<?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>44505</bug_id>
          
          <creation_ts>2010-08-24 02:16:00 -0700</creation_ts>
          <short_desc>[EFL] Missing plugins support for efl port</short_desc>
          <delta_ts>2011-12-22 07:39:12 -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>WebKit EFL</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>PC</rep_platform>
          <op_sys>Linux</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          <blocked>70592</blocked>
          <everconfirmed>0</everconfirmed>
          <reporter name="Mariusz Grzegorczyk">mariusz.g</reporter>
          <assigned_to name="Nobody">webkit-unassigned</assigned_to>
          <cc>andersca</cc>
    
    <cc>antognolli+webkit</cc>
    
    <cc>aroben</cc>
    
    <cc>cgarcia</cc>
    
    <cc>eric</cc>
    
    <cc>gyuyoung.kim</cc>
    
    <cc>hyuki.kim</cc>
    
    <cc>kbalazs</cc>
    
    <cc>kenneth</cc>
    
    <cc>leandro</cc>
    
    <cc>l.slachciak</cc>
    
    <cc>mariusz.g</cc>
    
    <cc>mrobinson</cc>
    
    <cc>rakuco</cc>
    
    <cc>ryuan.choi</cc>
    
    <cc>tonikitoo</cc>
    
    <cc>webkit.review.bot</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>268430</commentid>
    <comment_count>0</comment_count>
    <who name="Mariusz Grzegorczyk">mariusz.g</who>
    <bug_when>2010-08-24 02:16:00 -0700</bug_when>
    <thetext>Plugin support in efl port is missing, and function that creates plugins returns NULL.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>268452</commentid>
    <comment_count>1</comment_count>
      <attachid>65249</attachid>
    <who name="Mariusz Grzegorczyk">mariusz.g</who>
    <bug_when>2010-08-24 02:45:37 -0700</bug_when>
    <thetext>Created attachment 65249
Patch adding plugins support to efl port</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>269137</commentid>
    <comment_count>2</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2010-08-25 03:27:23 -0700</bug_when>
    <thetext>Attachment 65249 did not pass style-queue:

Failed to run &quot;[&apos;WebKitTools/Scripts/check-webkit-style&apos;]&quot; exit_code: 1
WebCore/plugins/efl/X11EmbedContainer.cpp:236:  Should have a space between // and comment  [whitespace/comments] [4]
WebCore/plugins/PluginView.h:360:  More than one command on the same line in if  [whitespace/parens] [4]
Total errors found: 2 in 12 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>269147</commentid>
    <comment_count>3</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2010-08-25 04:17:37 -0700</bug_when>
    <thetext>Attachment 65249 did not build on win:
Build output: http://queues.webkit.org/results/3806069</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>269164</commentid>
    <comment_count>4</comment_count>
      <attachid>65400</attachid>
    <who name="Mariusz Grzegorczyk">mariusz.g</who>
    <bug_when>2010-08-25 05:02:41 -0700</bug_when>
    <thetext>Created attachment 65400
Patch adding plugins support to efl port</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>269475</commentid>
    <comment_count>5</comment_count>
    <who name="Leandro Pereira">leandro</who>
    <bug_when>2010-08-25 13:32:22 -0700</bug_when>
    <thetext>(In reply to comment #4)
&gt; Created an attachment (id=65400) [details]
&gt; Patch adding plugins support to efl port

This looks like the implementation from the old EFL port. If it really is, it has been already reviewed negatively; please refer to bug #35762 for details.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>278008</commentid>
    <comment_count>6</comment_count>
      <attachid>65400</attachid>
    <who name="Kenneth Rohde Christiansen">kenneth</who>
    <bug_when>2010-09-13 00:00:26 -0700</bug_when>
    <thetext>Comment on attachment 65400
Patch adding plugins support to efl port

r- due to above comments</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>296105</commentid>
    <comment_count>7</comment_count>
    <who name="Gyuyoung Kim">gyuyoung.kim</who>
    <bug_when>2010-10-19 04:29:09 -0700</bug_when>
    <thetext>Any news on this?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>345463</commentid>
    <comment_count>8</comment_count>
      <attachid>81212</attachid>
    <who name="Mariusz Grzegorczyk">mariusz.g</who>
    <bug_when>2011-02-04 06:52:07 -0800</bug_when>
    <thetext>Created attachment 81212
Efl plugin&apos;s part support</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>345464</commentid>
    <comment_count>9</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2011-02-04 06:55:52 -0800</bug_when>
    <thetext>Attachment 81212 did not pass style-queue:

Failed to run &quot;[&apos;Tools/Scripts/check-webkit-style&apos;, &apos;--diff-files&apos;, u&apos;Source/JavaScriptCore/ChangeLog&apos;, u&apos;Source...&quot; exit_code: 1

Source/WebCore/plugins/efl/X11Window.cpp:29:  The parameter name &quot;object&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
Source/WebCore/plugins/efl/X11Window.h:56:  The parameter name &quot;evas&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
Source/WebCore/plugins/efl/X11Window.h:60:  The parameter name &quot;id&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
Source/WebCore/plugins/efl/X11Window.h:72:  The parameter name &quot;object&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
Source/WebCore/plugins/efl/X11Window.h:74:  The parameter name &quot;event&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
Source/WebCore/plugins/efl/X11Window.h:76:  The parameter name &quot;rect&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
Source/WebCore/plugins/efl/X11Window.h:81:  The parameter name &quot;rect&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
Source/WebCore/plugins/efl/X11EmbedContainer.h:36:  The parameter name &quot;evas&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
Source/WebCore/plugins/efl/X11EmbedContainer.h:36:  The parameter name &quot;view&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
Source/WebCore/plugins/efl/X11EmbedContainer.h:53:  The parameter name &quot;event&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
Source/WebCore/plugins/efl/X11EmbedContainer.h:55:  The parameter name &quot;rect&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
Total errors found: 11 in 14 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>345473</commentid>
    <comment_count>10</comment_count>
      <attachid>81214</attachid>
    <who name="Mariusz Grzegorczyk">mariusz.g</who>
    <bug_when>2011-02-04 07:09:11 -0800</bug_when>
    <thetext>Created attachment 81214
EFL&apos;s plugin support</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>345474</commentid>
    <comment_count>11</comment_count>
      <attachid>81215</attachid>
    <who name="Mariusz Grzegorczyk">mariusz.g</who>
    <bug_when>2011-02-04 07:10:05 -0800</bug_when>
    <thetext>Created attachment 81215
EFL&apos;s plugin support</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>354574</commentid>
    <comment_count>12</comment_count>
    <who name="Mariusz Grzegorczyk">mariusz.g</who>
    <bug_when>2011-02-21 06:45:20 -0800</bug_when>
    <thetext>Fixed comments described in bug #35762. This is base version of efl&apos;s port plugin. It&apos;s good starting point, from which further implementations can be added.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>360648</commentid>
    <comment_count>13</comment_count>
      <attachid>81215</attachid>
    <who name="Gyuyoung Kim">gyuyoung.kim</who>
    <bug_when>2011-03-02 00:53:46 -0800</bug_when>
    <thetext>Comment on attachment 81215
EFL&apos;s plugin support

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

At least, your patch should pass in efl ews.

&gt; Source/JavaScriptCore/ChangeLog:5
&gt; +        Support for efl&apos;s plugin part

There is no Bug Title and Bug url. Please add them.

&gt; Source/WebCore/ChangeLog:5
&gt; +        Added missing efl plugin&apos;s part

Same.

&gt; Source/WebCore/plugins/efl/PluginPackageEfl.cpp:7
&gt; + * Copyright (C) 2009-2010 Samsung Electronics

Please update date for samsung</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>366953</commentid>
    <comment_count>14</comment_count>
      <attachid>85669</attachid>
    <who name="Mariusz Grzegorczyk">mariusz.g</who>
    <bug_when>2011-03-14 06:21:30 -0700</bug_when>
    <thetext>Created attachment 85669
EFL&apos;s plugin support</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>367578</commentid>
    <comment_count>15</comment_count>
      <attachid>85669</attachid>
    <who name="Adam Barth">abarth</who>
    <bug_when>2011-03-15 02:21:34 -0700</bug_when>
    <thetext>Comment on attachment 85669
EFL&apos;s plugin support

This patch is huge!</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>371126</commentid>
    <comment_count>16</comment_count>
    <who name="Gyuyoung Kim">gyuyoung.kim</who>
    <bug_when>2011-03-21 18:31:01 -0700</bug_when>
    <thetext>(In reply to comment #15)
&gt; (From update of attachment 85669 [details])
&gt; This patch is huge!

Hello Mariusz,

As mentioned in adam comment, this patch is a little huge. Please separate this patch into more smaller patches. I think you need to make new bug for each patch. We should land this patch. Because we need this patch.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>371196</commentid>
    <comment_count>17</comment_count>
    <who name="Gyuyoung Kim">gyuyoung.kim</who>
    <bug_when>2011-03-21 21:58:34 -0700</bug_when>
    <thetext>Please make patches on latest WebKit.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>371480</commentid>
    <comment_count>18</comment_count>
    <who name="Leandro Pereira">leandro</who>
    <bug_when>2011-03-22 10:54:54 -0700</bug_when>
    <thetext>(In reply to comment #17)
&gt; Please make patches on latest WebKit.

Please keep in mind comment #5 before updating this patch and splitting it up to ease review.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>382174</commentid>
    <comment_count>19</comment_count>
      <attachid>88807</attachid>
    <who name="Mariusz Grzegorczyk">mariusz.g</who>
    <bug_when>2011-04-08 05:39:03 -0700</bug_when>
    <thetext>Created attachment 88807
EFL&apos;s plugin support</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>382177</commentid>
    <comment_count>20</comment_count>
    <who name="Mariusz Grzegorczyk">mariusz.g</who>
    <bug_when>2011-04-08 05:41:54 -0700</bug_when>
    <thetext>New patch was uploaded. This is shorter version with only windowless mode template.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>385472</commentid>
    <comment_count>21</comment_count>
      <attachid>88807</attachid>
    <who name="Gyuyoung Kim">gyuyoung.kim</who>
    <bug_when>2011-04-13 20:21:00 -0700</bug_when>
    <thetext>Comment on attachment 88807
EFL&apos;s plugin support

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

&gt; Source/WebCore/CMakeListsEfl.txt:78
&gt; +

Please remove unnecessary blank line

&gt; Source/WebCore/CMakeListsEfl.txt:97
&gt; +

Please remove unnecessary blank line

&gt; Source/WebKit/efl/ewk/ewk_frame.cpp:2061
&gt; +#endif // #if ENABLE(NETSCAPE_PLUGIN_API)

It seems we don&apos;t need to add this comment to here. Just #endif.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>385473</commentid>
    <comment_count>22</comment_count>
    <who name="Gyuyoung Kim">gyuyoung.kim</who>
    <bug_when>2011-04-13 20:21:37 -0700</bug_when>
    <thetext>Demarchi, I&apos;d like to listen your comment for this patch.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>386751</commentid>
    <comment_count>23</comment_count>
      <attachid>88807</attachid>
    <who name="Adam Roben (:aroben)">aroben</who>
    <bug_when>2011-04-15 10:59:31 -0700</bug_when>
    <thetext>Comment on attachment 88807
EFL&apos;s plugin support

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

&gt; Source/WebCore/ChangeLog:8
&gt; +        No new tests. (OOPS!)

You&apos;ll need to replace this line with something else before this patch can be landed. Ideally you&apos;d say why no new tests are needed.

&gt; Source/WebCore/ChangeLog:43
&gt; +        * CMakeListsEfl.txt:
&gt; +        * plugins/PluginView.h:
&gt; +        * plugins/efl/PluginDataEfl.cpp: Added.
&gt; +        (WebCore::PluginData::initPlugins):
&gt; +        (WebCore::PluginData::refresh):
&gt; +        * plugins/efl/PluginPackageEfl.cpp: Added.
&gt; +        (WebCore::PluginPackage::fetchInfo):
&gt; +        (WebCore::PluginPackage::NPVersion):
&gt; +        (WebCore::PluginPackage::load):
&gt; +        * plugins/efl/PluginViewEfl.cpp: Added.
&gt; +        (WebCore::PluginView::dispatchNPEvent):
&gt; +        (WebCore::PluginView::halt):
&gt; +        (WebCore::PluginView::handleFocusInEvent):
&gt; +        (WebCore::PluginView::handleFocusOutEvent):
&gt; +        (WebCore::PluginView::restart):
&gt; +        (WebCore::PluginView::handleKeyboardEvent):
&gt; +        (WebCore::PluginView::handleMouseEvent):
&gt; +        (WebCore::PluginView::updatePluginWidget):
&gt; +        (WebCore::PluginView::setFocus):
&gt; +        (WebCore::PluginView::show):
&gt; +        (WebCore::PluginView::hide):
&gt; +        (WebCore::PluginView::paint):
&gt; +        (WebCore::PluginView::setParent):
&gt; +        (WebCore::PluginView::setNPWindowRect):
&gt; +        (WebCore::PluginView::setNPWindowIfNeeded):
&gt; +        (WebCore::PluginView::setParentVisible):
&gt; +        (WebCore::PluginView::handlePostReadFile):
&gt; +        (WebCore::PluginView::platformGetValueStatic):
&gt; +        (WebCore::PluginView::platformGetValue):
&gt; +        (WebCore::PluginView::invalidateRect):
&gt; +        (WebCore::PluginView::invalidateRegion):
&gt; +        (WebCore::PluginView::forceRedraw):
&gt; +        (WebCore::PluginView::platformStart):
&gt; +        (WebCore::PluginView::platformDestroy):

prepare-ChangeLog creates this boilerplate for you so that you can fill it in with details explaining why you made the changes you did. It&apos;s not meant to be left there blank.

&gt; Source/WebCore/plugins/efl/PluginDataEfl.cpp:23
&gt; +/*
&gt; +    Copyright (C) 2006, 2007 Apple Inc.  All rights reserved.
&gt; +    Copyright (C) 2008 Trolltech ASA
&gt; +    Copyright (C) 2008 Collabora Ltd. All rights reserved.
&gt; +    Copyright (C) 2008 INdT - Instituto Nokia de Tecnologia
&gt; +    Copyright (C) 2009-2010 ProFUSION embedded systems
&gt; +    Copyright (C) 2009-2011 Samsung Electronics
&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; +*/

Why this license instead of the standard BSD-like one?

&gt; Source/WebCore/plugins/efl/PluginDataEfl.cpp:36
&gt; +    PluginDatabase* db = PluginDatabase::installedPlugins();
&gt; +    const Vector&lt;PluginPackage*&gt; &amp;plugins = db-&gt;plugins();

I don&apos;t think the db local variable is needed.

&amp; should go next to the type, not the variable name. I&apos;m surprised the style bot doesn&apos;t flag this.

&gt; Source/WebCore/plugins/efl/PluginDataEfl.cpp:38
&gt; +    for (unsigned int i = 0; i &lt; plugins.size(); ++i) {

We just say &quot;unsigned&quot;, not &quot;unsigned int&quot;. But for iterating over a Vector the correct type is size_t.

&gt; Source/WebCore/plugins/efl/PluginDataEfl.cpp:42
&gt; +        PluginInfo info;
&gt; +        PluginPackage* package = plugins[i];
&gt; +
&gt; +        info.name = package-&gt;name();

Please move the info declaration below the package declaration. No need to split up the use of info like this.

&gt; Source/WebCore/plugins/efl/PluginDataEfl.cpp:56
&gt; +            Vector&lt;String&gt; extensions = package-&gt;mimeToExtensions().get(mime.type);
&gt; +            info.mimes.append(mime);
&gt; +        }

You don&apos;t seem to be using the extensions Vector at all.

&gt; Source/WebCore/plugins/efl/PluginDataEfl.cpp:65
&gt; +    PluginDatabase* db = PluginDatabase::installedPlugins();
&gt; +    db-&gt;refresh();

No need for the local.

&gt; Source/WebCore/plugins/efl/PluginPackageEfl.cpp:58
&gt; +    getValue = (NPP_GetValueProcPtr)dlsym(m_module, &quot;NP_GetValue&quot;);

We prefer C++ casts to C-style casts.

&gt; Source/WebCore/plugins/efl/PluginPackageEfl.cpp:71
&gt; +    NPError err = getValue(0, NPPVpluginNameString, (void*) &amp;buffer);

Same comment here about casting.

&gt; Source/WebCore/plugins/efl/PluginPackageEfl.cpp:92
&gt; +        if (mime.size() &gt; 0) {

it&apos;s better to use !mime.isEmpty().

I&apos;d reverse this if and turn it into an early-continue.

&gt; Source/WebCore/plugins/efl/PluginViewEfl.cpp:62
&gt; +#include &quot;Document.h&quot;
&gt; +#include &quot;DocumentLoader.h&quot;
&gt; +#include &quot;Element.h&quot;
&gt; +#include &quot;Frame.h&quot;
&gt; +#include &quot;FrameLoadRequest.h&quot;
&gt; +#include &quot;FrameLoader.h&quot;
&gt; +#include &quot;FrameTree.h&quot;
&gt; +#include &quot;FrameView.h&quot;
&gt; +#include &quot;GraphicsContext.h&quot;
&gt; +#include &quot;HTMLNames.h&quot;
&gt; +#include &quot;HTMLPlugInElement.h&quot;
&gt; +#include &quot;HostWindow.h&quot;
&gt; +#include &quot;Image.h&quot;
&gt; +#include &quot;IntRect.h&quot;
&gt; +#include &quot;JSDOMBinding.h&quot;
&gt; +#include &quot;KeyboardEvent.h&quot;
&gt; +#include &quot;MouseEvent.h&quot;
&gt; +#include &quot;NotImplemented.h&quot;
&gt; +#include &quot;Page.h&quot;
&gt; +#include &quot;PlatformMouseEvent.h&quot;
&gt; +#include &quot;PlatformWheelEvent.h&quot;
&gt; +#include &quot;PluginDebug.h&quot;
&gt; +#include &quot;PluginPackage.h&quot;
&gt; +#include &quot;RenderLayer.h&quot;
&gt; +#include &quot;ScriptController.h&quot;
&gt; +#include &quot;Settings.h&quot;
&gt; +#include &quot;npruntime_impl.h&quot;
&gt; +#include &quot;runtime/JSLock.h&quot;
&gt; +#include &quot;runtime/JSValue.h&quot;
&gt; +#include &quot;runtime_root.h&quot;

I&apos;m surprised that all of these are needed, given how many of the functions in this file aren&apos;t really implemented.

&gt; Source/WebCore/plugins/efl/PluginViewEfl.cpp:75
&gt; +using JSC::ExecState;
&gt; +using JSC::Interpreter;
&gt; +using JSC::JSLock;
&gt; +using JSC::JSObject;
&gt; +using JSC::UString;

Are these really needed?

&gt; Source/WebCore/plugins/efl/PluginViewEfl.cpp:79
&gt; +using namespace std;
&gt; +using namespace WTF;
&gt; +using namespace WebCore;

You shouldn&apos;t need the WTF or WebCore directives.

&gt; Source/WebCore/plugins/efl/PluginViewEfl.cpp:84
&gt; +using namespace HTMLNames;
&gt; +#if ENABLE(NETSCAPE_PLUGIN_API)

Please add a blank line in here.

&gt; Source/WebCore/plugins/efl/PluginViewEfl.cpp:173
&gt; +    m_windowRect = IntRect(frameView-&gt;contentsToScreen(IntRect(frameRect().location(), frameRect().size())));

IntRect(frameRect().location(), frameRect().size()) should be equivalent to frameRect().

Why is the outer IntRect constructor needed?

&gt; Source/WebCore/plugins/efl/PluginViewEfl.cpp:184
&gt; +void PluginView::setFocus(bool)
&gt; +{
&gt; +    m_element-&gt;document()-&gt;setFocusedNode(m_element);
&gt; +
&gt; +    Widget::setFocus(true);
&gt; +}

Why are you ignoring the bool argument?

&gt; Source/WebCore/plugins/efl/PluginViewEfl.cpp:225
&gt; +    else {
&gt; +        if (!platformPluginWidget())
&gt; +            return;
&gt; +    }

You can use &quot;else if&quot; instead of nesting. But you don&apos;t even need to check the return value of platformPluginWidget, since your early return is right at the try end of the function.

&gt; Source/WebCore/plugins/efl/PluginViewEfl.cpp:252
&gt; +    if (filename.startsWith(&quot;file:///&quot;))
&gt; +        filename = filename.substring(8);

Is stripping off the leading / of the path really correct?

&gt; Source/WebCore/plugins/efl/PluginViewEfl.cpp:309
&gt; +        *(void **)value = (Display*) ecore_x_display_get();

Again, C++ casts are preferred.

&gt; Source/WebKit/efl/ewk/ewk_frame.cpp:2040
&gt;  WTF::PassRefPtr&lt;WebCore::Widget&gt; ewk_frame_plugin_create(Evas_Object* o, const WebCore::IntSize&amp; pluginSize, WebCore::HTMLPlugInElement* element, const WebCore::KURL&amp; url, const WTF::Vector&lt;WTF::String&gt;&amp; paramNames, const WTF::Vector&lt;WTF::String&gt;&amp; paramValues, const WTF::String&amp; mimeType, bool loadManually)

All the WTF::s shouldn&apos;t be necessary. WTF headers have using directives that make them unnecessary.

You should replace the WebCore:: qualifiers with a &quot;using namespace WebCore;&quot; near the top of the file.

&gt; Source/WebKit/efl/ewk/ewk_frame.cpp:2053
&gt; +    WTF::RefPtr&lt;WebCore::PluginView&gt; pluginView = WebCore::PluginView::create

Same comment here about qualifiers.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>395178</commentid>
    <comment_count>24</comment_count>
    <who name="Mariusz Grzegorczyk">mariusz.g</who>
    <bug_when>2011-04-29 02:13:20 -0700</bug_when>
    <thetext>(In reply to comment #23)
&gt; (From update of attachment 88807 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=88807&amp;action=review
&gt; 
&gt; &gt; Source/WebCore/ChangeLog:8
&gt; &gt; +        No new tests. (OOPS!)
&gt; 
&gt; You&apos;ll need to replace this line with something else before this patch can be landed. Ideally you&apos;d say why no new tests are needed.
&gt; 
&gt; &gt; Source/WebCore/ChangeLog:43
&gt; &gt; +        * CMakeListsEfl.txt:
&gt; &gt; +        * plugins/PluginView.h:
&gt; &gt; +        * plugins/efl/PluginDataEfl.cpp: Added.
&gt; &gt; +        (WebCore::PluginData::initPlugins):
&gt; &gt; +        (WebCore::PluginData::refresh):
&gt; &gt; +        * plugins/efl/PluginPackageEfl.cpp: Added.
&gt; &gt; +        (WebCore::PluginPackage::fetchInfo):
&gt; &gt; +        (WebCore::PluginPackage::NPVersion):
&gt; &gt; +        (WebCore::PluginPackage::load):
&gt; &gt; +        * plugins/efl/PluginViewEfl.cpp: Added.
&gt; &gt; +        (WebCore::PluginView::dispatchNPEvent):
&gt; &gt; +        (WebCore::PluginView::halt):
&gt; &gt; +        (WebCore::PluginView::handleFocusInEvent):
&gt; &gt; +        (WebCore::PluginView::handleFocusOutEvent):
&gt; &gt; +        (WebCore::PluginView::restart):
&gt; &gt; +        (WebCore::PluginView::handleKeyboardEvent):
&gt; &gt; +        (WebCore::PluginView::handleMouseEvent):
&gt; &gt; +        (WebCore::PluginView::updatePluginWidget):
&gt; &gt; +        (WebCore::PluginView::setFocus):
&gt; &gt; +        (WebCore::PluginView::show):
&gt; &gt; +        (WebCore::PluginView::hide):
&gt; &gt; +        (WebCore::PluginView::paint):
&gt; &gt; +        (WebCore::PluginView::setParent):
&gt; &gt; +        (WebCore::PluginView::setNPWindowRect):
&gt; &gt; +        (WebCore::PluginView::setNPWindowIfNeeded):
&gt; &gt; +        (WebCore::PluginView::setParentVisible):
&gt; &gt; +        (WebCore::PluginView::handlePostReadFile):
&gt; &gt; +        (WebCore::PluginView::platformGetValueStatic):
&gt; &gt; +        (WebCore::PluginView::platformGetValue):
&gt; &gt; +        (WebCore::PluginView::invalidateRect):
&gt; &gt; +        (WebCore::PluginView::invalidateRegion):
&gt; &gt; +        (WebCore::PluginView::forceRedraw):
&gt; &gt; +        (WebCore::PluginView::platformStart):
&gt; &gt; +        (WebCore::PluginView::platformDestroy):
&gt; 
&gt; prepare-ChangeLog creates this boilerplate for you so that you can fill it in with details explaining why you made the changes you did. It&apos;s not meant to be left there blank.
&gt; 
&gt; &gt; Source/WebCore/plugins/efl/PluginDataEfl.cpp:23
&gt; &gt; +/*
&gt; &gt; +    Copyright (C) 2006, 2007 Apple Inc.  All rights reserved.
&gt; &gt; +    Copyright (C) 2008 Trolltech ASA
&gt; &gt; +    Copyright (C) 2008 Collabora Ltd. All rights reserved.
&gt; &gt; +    Copyright (C) 2008 INdT - Instituto Nokia de Tecnologia
&gt; &gt; +    Copyright (C) 2009-2010 ProFUSION embedded systems
&gt; &gt; +    Copyright (C) 2009-2011 Samsung Electronics
&gt; &gt; +
&gt; &gt; +    This library is free software; you can redistribute it and/or
&gt; &gt; +    modify it under the terms of the GNU Library General Public
&gt; &gt; +    License as published by the Free Software Foundation; either
&gt; &gt; +    version 2 of the License, or (at your option) any later version.
&gt; &gt; +
&gt; &gt; +    This library is distributed in the hope that it will be useful,
&gt; &gt; +    but WITHOUT ANY WARRANTY; without even the implied warranty of
&gt; &gt; +    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
&gt; &gt; +    Library General Public License for more details.
&gt; &gt; +
&gt; &gt; +    You should have received a copy of the GNU Library General Public License
&gt; &gt; +    along with this library; see the file COPYING.LIB.  If not, write to
&gt; &gt; +    the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
&gt; &gt; +    Boston, MA 02110-1301, USA.
&gt; &gt; +*/
&gt; 
&gt; Why this license instead of the standard BSD-like one?
Look at the gtk port. Same license there.

&gt; 
&gt; &gt; Source/WebCore/plugins/efl/PluginDataEfl.cpp:36
&gt; &gt; +    PluginDatabase* db = PluginDatabase::installedPlugins();
&gt; &gt; +    const Vector&lt;PluginPackage*&gt; &amp;plugins = db-&gt;plugins();
&gt; 
&gt; I don&apos;t think the db local variable is needed.
&gt; 
&gt; &amp; should go next to the type, not the variable name. I&apos;m surprised the style bot doesn&apos;t flag this.
&gt; 
&gt; &gt; Source/WebCore/plugins/efl/PluginDataEfl.cpp:38
&gt; &gt; +    for (unsigned int i = 0; i &lt; plugins.size(); ++i) {
&gt; 
&gt; We just say &quot;unsigned&quot;, not &quot;unsigned int&quot;. But for iterating over a Vector the correct type is size_t.
&gt; 
&gt; &gt; Source/WebCore/plugins/efl/PluginDataEfl.cpp:42
&gt; &gt; +        PluginInfo info;
&gt; &gt; +        PluginPackage* package = plugins[i];
&gt; &gt; +
&gt; &gt; +        info.name = package-&gt;name();
&gt; 
&gt; Please move the info declaration below the package declaration. No need to split up the use of info like this.
&gt; 
&gt; &gt; Source/WebCore/plugins/efl/PluginDataEfl.cpp:56
&gt; &gt; +            Vector&lt;String&gt; extensions = package-&gt;mimeToExtensions().get(mime.type);
&gt; &gt; +            info.mimes.append(mime);
&gt; &gt; +        }
&gt; 
&gt; You don&apos;t seem to be using the extensions Vector at all.
&gt; 
&gt; &gt; Source/WebCore/plugins/efl/PluginDataEfl.cpp:65
&gt; &gt; +    PluginDatabase* db = PluginDatabase::installedPlugins();
&gt; &gt; +    db-&gt;refresh();
&gt; 
&gt; No need for the local.
&gt; 
&gt; &gt; Source/WebCore/plugins/efl/PluginPackageEfl.cpp:58
&gt; &gt; +    getValue = (NPP_GetValueProcPtr)dlsym(m_module, &quot;NP_GetValue&quot;);
&gt; 
&gt; We prefer C++ casts to C-style casts.
&gt; 
&gt; &gt; Source/WebCore/plugins/efl/PluginPackageEfl.cpp:71
&gt; &gt; +    NPError err = getValue(0, NPPVpluginNameString, (void*) &amp;buffer);
&gt; 
&gt; Same comment here about casting.
&gt; 
&gt; &gt; Source/WebCore/plugins/efl/PluginPackageEfl.cpp:92
&gt; &gt; +        if (mime.size() &gt; 0) {
&gt; 
&gt; it&apos;s better to use !mime.isEmpty().
&gt; 
&gt; I&apos;d reverse this if and turn it into an early-continue.
&gt; 
&gt; &gt; Source/WebCore/plugins/efl/PluginViewEfl.cpp:62
&gt; &gt; +#include &quot;Document.h&quot;
&gt; &gt; +#include &quot;DocumentLoader.h&quot;
&gt; &gt; +#include &quot;Element.h&quot;
&gt; &gt; +#include &quot;Frame.h&quot;
&gt; &gt; +#include &quot;FrameLoadRequest.h&quot;
&gt; &gt; +#include &quot;FrameLoader.h&quot;
&gt; &gt; +#include &quot;FrameTree.h&quot;
&gt; &gt; +#include &quot;FrameView.h&quot;
&gt; &gt; +#include &quot;GraphicsContext.h&quot;
&gt; &gt; +#include &quot;HTMLNames.h&quot;
&gt; &gt; +#include &quot;HTMLPlugInElement.h&quot;
&gt; &gt; +#include &quot;HostWindow.h&quot;
&gt; &gt; +#include &quot;Image.h&quot;
&gt; &gt; +#include &quot;IntRect.h&quot;
&gt; &gt; +#include &quot;JSDOMBinding.h&quot;
&gt; &gt; +#include &quot;KeyboardEvent.h&quot;
&gt; &gt; +#include &quot;MouseEvent.h&quot;
&gt; &gt; +#include &quot;NotImplemented.h&quot;
&gt; &gt; +#include &quot;Page.h&quot;
&gt; &gt; +#include &quot;PlatformMouseEvent.h&quot;
&gt; &gt; +#include &quot;PlatformWheelEvent.h&quot;
&gt; &gt; +#include &quot;PluginDebug.h&quot;
&gt; &gt; +#include &quot;PluginPackage.h&quot;
&gt; &gt; +#include &quot;RenderLayer.h&quot;
&gt; &gt; +#include &quot;ScriptController.h&quot;
&gt; &gt; +#include &quot;Settings.h&quot;
&gt; &gt; +#include &quot;npruntime_impl.h&quot;
&gt; &gt; +#include &quot;runtime/JSLock.h&quot;
&gt; &gt; +#include &quot;runtime/JSValue.h&quot;
&gt; &gt; +#include &quot;runtime_root.h&quot;
&gt; 
&gt; I&apos;m surprised that all of these are needed, given how many of the functions in this file aren&apos;t really implemented.
&gt; 
&gt; &gt; Source/WebCore/plugins/efl/PluginViewEfl.cpp:75
&gt; &gt; +using JSC::ExecState;
&gt; &gt; +using JSC::Interpreter;
&gt; &gt; +using JSC::JSLock;
&gt; &gt; +using JSC::JSObject;
&gt; &gt; +using JSC::UString;
&gt; 
&gt; Are these really needed?
&gt; 
&gt; &gt; Source/WebCore/plugins/efl/PluginViewEfl.cpp:79
&gt; &gt; +using namespace std;
&gt; &gt; +using namespace WTF;
&gt; &gt; +using namespace WebCore;
&gt; 
&gt; You shouldn&apos;t need the WTF or WebCore directives.
&gt; 
&gt; &gt; Source/WebCore/plugins/efl/PluginViewEfl.cpp:84
&gt; &gt; +using namespace HTMLNames;
&gt; &gt; +#if ENABLE(NETSCAPE_PLUGIN_API)
&gt; 
&gt; Please add a blank line in here.
&gt; 
&gt; &gt; Source/WebCore/plugins/efl/PluginViewEfl.cpp:173
&gt; &gt; +    m_windowRect = IntRect(frameView-&gt;contentsToScreen(IntRect(frameRect().location(), frameRect().size())));
&gt; 
&gt; IntRect(frameRect().location(), frameRect().size()) should be equivalent to frameRect().
&gt; 
&gt; Why is the outer IntRect constructor needed?
&gt; 
&gt; &gt; Source/WebCore/plugins/efl/PluginViewEfl.cpp:184
&gt; &gt; +void PluginView::setFocus(bool)
&gt; &gt; +{
&gt; &gt; +    m_element-&gt;document()-&gt;setFocusedNode(m_element);
&gt; &gt; +
&gt; &gt; +    Widget::setFocus(true);
&gt; &gt; +}
&gt; 
&gt; Why are you ignoring the bool argument?
&gt; 
&gt; &gt; Source/WebCore/plugins/efl/PluginViewEfl.cpp:225
&gt; &gt; +    else {
&gt; &gt; +        if (!platformPluginWidget())
&gt; &gt; +            return;
&gt; &gt; +    }
&gt; 
&gt; You can use &quot;else if&quot; instead of nesting. But you don&apos;t even need to check the return value of platformPluginWidget, since your early return is right at the try end of the function.
&gt; 
&gt; &gt; Source/WebCore/plugins/efl/PluginViewEfl.cpp:252
&gt; &gt; +    if (filename.startsWith(&quot;file:///&quot;))
&gt; &gt; +        filename = filename.substring(8);
&gt; 
&gt; Is stripping off the leading / of the path really correct?
&gt; 
&gt; &gt; Source/WebCore/plugins/efl/PluginViewEfl.cpp:309
&gt; &gt; +        *(void **)value = (Display*) ecore_x_display_get();
&gt; 
&gt; Again, C++ casts are preferred.
&gt; 
&gt; &gt; Source/WebKit/efl/ewk/ewk_frame.cpp:2040
&gt; &gt;  WTF::PassRefPtr&lt;WebCore::Widget&gt; ewk_frame_plugin_create(Evas_Object* o, const WebCore::IntSize&amp; pluginSize, WebCore::HTMLPlugInElement* element, const WebCore::KURL&amp; url, const WTF::Vector&lt;WTF::String&gt;&amp; paramNames, const WTF::Vector&lt;WTF::String&gt;&amp; paramValues, const WTF::String&amp; mimeType, bool loadManually)
&gt; 
&gt; All the WTF::s shouldn&apos;t be necessary. WTF headers have using directives that make them unnecessary.
&gt; 
&gt; You should replace the WebCore:: qualifiers with a &quot;using namespace WebCore;&quot; near the top of the file.
In whole ewk_frame.cpp it is common practice to use WTF::, and WebCore:: qualifiers.
&gt; 
&gt; &gt; Source/WebKit/efl/ewk/ewk_frame.cpp:2053
&gt; &gt; +    WTF::RefPtr&lt;WebCore::PluginView&gt; pluginView = WebCore::PluginView::create
&gt; 
&gt; Same comment here about qualifiers.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>395181</commentid>
    <comment_count>25</comment_count>
      <attachid>91654</attachid>
    <who name="Mariusz Grzegorczyk">mariusz.g</who>
    <bug_when>2011-04-29 02:16:45 -0700</bug_when>
    <thetext>Created attachment 91654
EFL&apos;s plugin support</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>418658</commentid>
    <comment_count>26</comment_count>
      <attachid>96734</attachid>
    <who name="Mariusz Grzegorczyk">mariusz.g</who>
    <bug_when>2011-06-10 04:40:49 -0700</bug_when>
    <thetext>Created attachment 96734
EFL&apos;s plugin support

Version synchronized with newest webkit&apos;s code.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>418660</commentid>
    <comment_count>27</comment_count>
      <attachid>96734</attachid>
    <who name="Gyuyoung Kim">gyuyoung.kim</who>
    <bug_when>2011-06-10 04:50:38 -0700</bug_when>
    <thetext>Comment on attachment 96734
EFL&apos;s plugin support

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

&gt; Source/JavaScriptCore/ChangeLog:7
&gt; +

Add patch summary

&gt; Source/WebCore/plugins/efl/PluginViewEfl.cpp:125
&gt; +    return;

Should we use &quot;return&quot; here ?

&gt; Source/WebCore/plugins/efl/PluginViewEfl.cpp:283
&gt; +#if ENABLE(NETSCAPE_PLUGIN_API)

Why do you use same NETSCAPE_PLUGIN_API here ? 239 line already use this macro.

&gt; Source/WebKit/efl/ChangeLog:7
&gt; +

ChangeLog doesnt have summary</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>418676</commentid>
    <comment_count>28</comment_count>
      <attachid>96740</attachid>
    <who name="Mariusz Grzegorczyk">mariusz.g</who>
    <bug_when>2011-06-10 05:38:31 -0700</bug_when>
    <thetext>Created attachment 96740
EFL&apos;s plugin support</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>418829</commentid>
    <comment_count>29</comment_count>
      <attachid>96740</attachid>
    <who name="Antonio Gomes">tonikitoo</who>
    <bug_when>2011-06-10 12:06:45 -0700</bug_when>
    <thetext>Comment on attachment 96740
EFL&apos;s plugin support

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

Looks fine. Some nits ...

&gt; Source/WebCore/plugins/efl/PluginViewEfl.cpp:101
&gt; +    IntRect p = static_cast&lt;FrameView*&gt;(parent())-&gt;contentsToScreen(IntRect(0, 0, event-&gt;offsetX(), event-&gt;offsetY()));

Use a more descriptive name than p

&gt; Source/WebCore/plugins/efl/PluginViewEfl.cpp:112
&gt; +        xEvent.xbutton.button = event-&gt;button() + 1; // DOM MouseEvent counts from 0, and XButtonEvent from 1

add . at the end.

&gt; Source/WebCore/plugins/efl/PluginViewEfl.cpp:190
&gt; +    if (parent)
&gt; +        init();
&gt; +    else if (!platformPluginWidget())
&gt; +        return;

do you need a return here? or a else-if then return?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>420402</commentid>
    <comment_count>30</comment_count>
      <attachid>97117</attachid>
    <who name="Mariusz Grzegorczyk">mariusz.g</who>
    <bug_when>2011-06-14 07:40:26 -0700</bug_when>
    <thetext>Created attachment 97117
EFL&apos;s plugin support</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>420490</commentid>
    <comment_count>31</comment_count>
      <attachid>97117</attachid>
    <who name="Leandro Pereira">leandro</who>
    <bug_when>2011-06-14 09:27:22 -0700</bug_when>
    <thetext>Comment on attachment 97117
EFL&apos;s plugin support

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

&gt; Source/WebKit/efl/ewk/ewk_frame.cpp:2058
&gt; +    if (pluginView-&gt;status() == WebCore::PluginStatusLoadedSuccessfully)
&gt; +        return pluginView;
&gt; +#else
&gt;      return 0;
&gt; +#endif // #if ENABLE(NETSCAPE_PLUGIN_API)
&gt;  }

If plugin hasn&apos;t been loaded successfully, this function will return some invalid value. Change that #else to an #endif and it should prevent that.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>443516</commentid>
    <comment_count>32</comment_count>
      <attachid>102263</attachid>
    <who name="Mariusz Grzegorczyk">mariusz.g</who>
    <bug_when>2011-07-28 09:26:40 -0700</bug_when>
    <thetext>Created attachment 102263
EFL&apos;s plugin support</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>443759</commentid>
    <comment_count>33</comment_count>
    <who name="Ryuan Choi">ryuan.choi</who>
    <bug_when>2011-07-28 18:38:33 -0700</bug_when>
    <thetext>(In reply to comment #32)
&gt; Created an attachment (id=102263) [details]
&gt; EFL&apos;s plugin support

Could you rebase patch or make newer?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>456197</commentid>
    <comment_count>34</comment_count>
      <attachid>105018</attachid>
    <who name="Mariusz Grzegorczyk">mariusz.g</who>
    <bug_when>2011-08-24 10:54:47 -0700</bug_when>
    <thetext>Created attachment 105018
EFL&apos;s plugin support

Rebased.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>457492</commentid>
    <comment_count>35</comment_count>
      <attachid>105018</attachid>
    <who name="Gyuyoung Kim">gyuyoung.kim</who>
    <bug_when>2011-08-26 02:51:53 -0700</bug_when>
    <thetext>Comment on attachment 105018
EFL&apos;s plugin support

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

It looks this patch is a little huge. Can you split this patch into smaller ones ?

&gt; Source/JavaScriptCore/ChangeLog:7
&gt; +

There is no description.

&gt; Source/WebCore/CMakeListsEfl.txt:13
&gt; +  &quot;${WEBCORE_DIR}/plugins/efl&quot;

Please adhere alphabetical order.

&gt; Source/WebCore/CMakeListsEfl.txt:84
&gt; +    plugins/PluginView.cpp

Please add an empty line to here.

&gt; Source/WebCore/ChangeLog:8
&gt; +        Basic functionality of plugins for efl port

Missing &quot;.&quot; at the end of line.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>457597</commentid>
    <comment_count>36</comment_count>
      <attachid>105367</attachid>
    <who name="Mariusz Grzegorczyk">mariusz.g</who>
    <bug_when>2011-08-26 10:01:30 -0700</bug_when>
    <thetext>Created attachment 105367
EFL&apos;s plugin support

Fixed and rebased. This patch is already splitted.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>457623</commentid>
    <comment_count>37</comment_count>
      <attachid>105367</attachid>
    <who name="Leandro Pereira">leandro</who>
    <bug_when>2011-08-26 10:36:54 -0700</bug_when>
    <thetext>Comment on attachment 105367
EFL&apos;s plugin support

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

Informal r- for the reasons below:

&gt; Source/WebCore/plugins/efl/PluginDataEfl.cpp:7
&gt; +    Copyright (C) 2006, 2007 Apple Inc.  All rights reserved.
&gt; +    Copyright (C) 2008 Trolltech ASA
&gt; +    Copyright (C) 2008 Collabora Ltd. All rights reserved.
&gt; +    Copyright (C) 2008 INdT - Instituto Nokia de Tecnologia
&gt; +    Copyright (C) 2009-2010 ProFUSION embedded systems
&gt; +    Copyright (C) 2009-2011 Samsung Electronics

Do we really need so many copyrights for such a simple/small file?

&gt; Source/WebCore/plugins/efl/PluginDataEfl.cpp:12
&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.

Other files from this directory uses a different license. Is this intentional?

&gt; Source/WebCore/plugins/efl/PluginPackageEfl.cpp:121
&gt; +    if (m_isLoaded) {
&gt; +        m_loadCount++;
&gt; +        return true;
&gt; +    }

Small nit: you could ditch m_isLoaded and just use m_loadCount instead.

&gt; Source/WebCore/plugins/efl/PluginViewEfl.cpp:106
&gt; +    if (event-&gt;type() == eventNames().mousemoveEvent
&gt; +            || event-&gt;type() == eventNames().mouseoutEvent
&gt; +            || event-&gt;type() == eventNames().mouseoverEvent) {

Minor nit: wouldn&apos;t a switch() statement be better here?

&gt; Source/WebCore/plugins/efl/PluginViewEfl.cpp:139
&gt; +    IntRect oldWindowRect = m_windowRect;
&gt; +    IntRect oldClipRect = m_clipRect;

What are these used for?

&gt; Source/WebCore/plugins/efl/PluginViewEfl.cpp:174
&gt; +void PluginView::paint(GraphicsContext* context, const IntRect&amp; rect)
&gt; +{
&gt; +    if (!m_isStarted) {
&gt; +        paintMissingPluginIcon(context, rect);
&gt; +        return;
&gt; +    }

if (!m_fnord)
   paintFooBar();

&gt; Source/WebCore/plugins/efl/PluginViewEfl.cpp:188
&gt; +    return;

Useless return statement.

&gt; Source/WebCore/plugins/efl/PluginViewEfl.cpp:224
&gt; +    if (bytesRead &lt;= 0)
&gt; +        return NPERR_FILE_NOT_FOUND;

NPERR_FILE_NOT_FOUND should be returned if the file is missing or is invalid; in this case, isn&apos;t NPERR_NO_DATA more suitable?

&gt; Source/WebCore/plugins/efl/PluginViewEfl.cpp:236
&gt; +        *static_cast&lt;uint32_t*&gt;(value) = 0;
&gt; +        *result = NPERR_NO_ERROR;

Are value and result guaranteed to be non-null?

&gt; Source/WebCore/plugins/efl/PluginViewEfl.cpp:267
&gt; +        *static_cast&lt;void **&gt;(value) = static_cast&lt;Display*&gt;(ecore_x_display_get());
&gt; +        *result = NPERR_NO_ERROR;

Are value and result guaranteed to be non-null?

Calling ecore_x_display_get() will most likely crash WebKit if it is being run on a framebuffer or Ecore_Evas_Buffer. Since the engine can be chosen in runtime, please take care of it. (FWIW, DumpRenderTree uses Ecore_Evas_Buffer but plugin tests wouldn&apos;t run because of this function call.)

&gt; Source/WebCore/plugins/efl/PluginViewEfl.cpp:287
&gt; +        void** v = (void**)value;
&gt; +        *v = windowScriptObject;

Minor nit: variable &apos;v&apos; can be removed if you do something along the lines of (perhaps with C++-style cast?): *(void **)value = (void*)windowScriptObject;

&gt; Source/WebCore/plugins/efl/PluginViewEfl.cpp:309
&gt; +        void** v = (void**)value;
&gt; +        *v = pluginScriptObject;

Same as above.

&gt; Source/WebCore/plugins/efl/PluginViewEfl.cpp:328
&gt; +    case NPNVToolkit:
&gt; +        if (m_plugin-&gt;quirks().contains(PluginQuirkRequiresGtkToolKit)) {
&gt; +            *((uint32_t *)value) = 2;
&gt; +            *result = NPERR_NO_ERROR;

What &apos;2&apos; means here?

&gt; Source/WebCore/plugins/efl/PluginViewEfl.cpp:334
&gt; +        return false;
&gt; +        // fall through
&gt; +    default:
&gt; +        return false;

Remove either the comment (which should be a proper sentence anyway) or the return statement.

&gt; Source/WebCore/plugins/efl/PluginViewEfl.cpp:354
&gt; +    IntRect r(rect-&gt;left, rect-&gt;top, rect-&gt;right - rect-&gt;left, rect-&gt;bottom - rect-&gt;top);
&gt; +
&gt; +    invalidateRect(r);

Minor nit: invalidateRect(IntRect(rect-&gt;left, ...));</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>458839</commentid>
    <comment_count>38</comment_count>
      <attachid>105367</attachid>
    <who name="Mariusz Grzegorczyk">mariusz.g</who>
    <bug_when>2011-08-30 04:42:44 -0700</bug_when>
    <thetext>Comment on attachment 105367
EFL&apos;s plugin support

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

&gt;&gt; Source/WebCore/plugins/efl/PluginPackageEfl.cpp:121
&gt;&gt; +    }
&gt; 
&gt; Small nit: you could ditch m_isLoaded and just use m_loadCount instead.

There can be situation that m_isLoaded is set, but m_loadCount is not incremented when module is opened, but symbols(NP_Initialize, and NP_Shutdown) can&apos;t be taken. Same implementation in Gtk.

&gt;&gt; Source/WebCore/plugins/efl/PluginViewEfl.cpp:106
&gt;&gt; +            || event-&gt;type() == eventNames().mouseoverEvent) {
&gt; 
&gt; Minor nit: wouldn&apos;t a switch() statement be better here?

event-&gt;type() is type of AtomicString, so can&apos;t use switch here

&gt;&gt; Source/WebCore/plugins/efl/PluginViewEfl.cpp:236
&gt;&gt; +        *result = NPERR_NO_ERROR;
&gt; 
&gt; Are value and result guaranteed to be non-null?

result is guaranteed, but value is not checked in any port. It looks that in this matter webkit trusts plugins. Also type of value is taken from type of NPNVariable which is possibly dangerous(casting from void* to different types of returned value)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>458848</commentid>
    <comment_count>39</comment_count>
      <attachid>105367</attachid>
    <who name="Mariusz Grzegorczyk">mariusz.g</who>
    <bug_when>2011-08-30 05:14:42 -0700</bug_when>
    <thetext>Comment on attachment 105367
EFL&apos;s plugin support

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

&gt;&gt; Source/WebCore/plugins/efl/PluginDataEfl.cpp:12
&gt;&gt; +    version 2 of the License, or (at your option) any later version.
&gt; 
&gt; Other files from this directory uses a different license. Is this intentional?

Code was moved from GTK version, so type of license is kept. Also copyrights were moved with adding new ones.

&gt;&gt;&gt; Source/WebCore/plugins/efl/PluginPackageEfl.cpp:121
&gt;&gt;&gt; +    }
&gt;&gt; 
&gt;&gt; Small nit: you could ditch m_isLoaded and just use m_loadCount instead.
&gt; 
&gt; There can be situation that m_isLoaded is set, but m_loadCount is not incremented when module is opened, but symbols(NP_Initialize, and NP_Shutdown) can&apos;t be taken. Same implementation in Gtk.

There can be situation that m_isLoaded is set, but m_loadCount is not incremented when module is opened, but symbols(NP_Initialize, and NP_Shutdown) can&apos;t be taken. Same implementation in Gtk.

&gt;&gt;&gt; Source/WebCore/plugins/efl/PluginViewEfl.cpp:106
&gt;&gt;&gt; +            || event-&gt;type() == eventNames().mouseoverEvent) {
&gt;&gt; 
&gt;&gt; Minor nit: wouldn&apos;t a switch() statement be better here?
&gt; 
&gt; event-&gt;type() is type of AtomicString, so can&apos;t use switch here

event-&gt;type() is type of AtomicString, so can&apos;t use switch here

&gt;&gt; Source/WebCore/plugins/efl/PluginViewEfl.cpp:224
&gt;&gt; +        return NPERR_FILE_NOT_FOUND;
&gt; 
&gt; NPERR_FILE_NOT_FOUND should be returned if the file is missing or is invalid; in this case, isn&apos;t NPERR_NO_DATA more suitable?

From PluginDebug.cpp it looks ok: this error means that file is missing, or is INVALID, but no data is for streams.
    &quot;File missing or invalid.&quot;, /* NPERR_FILE_NOT_FOUND */
    &quot;Stream contains no data.&quot;, /* NPERR_NO_DATA */

&gt;&gt;&gt; Source/WebCore/plugins/efl/PluginViewEfl.cpp:236
&gt;&gt;&gt; +        *result = NPERR_NO_ERROR;
&gt;&gt; 
&gt;&gt; Are value and result guaranteed to be non-null?
&gt; 
&gt; result is guaranteed, but value is not checked in any port. It looks that in this matter webkit trusts plugins. Also type of value is taken from type of NPNVariable which is possibly dangerous(casting from void* to different types of returned value)

result is guaranteed, but value is not checked in any port. It looks that in this matter webkit trusts plugins. Also type of value is taken from type of NPNVariable which is possibly dangerous(casting from void* to different types of returned value)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>467005</commentid>
    <comment_count>40</comment_count>
    <who name="Leandro Pereira">leandro</who>
    <bug_when>2011-09-14 07:00:06 -0700</bug_when>
    <thetext>I tried to build with this patch and couldn&apos;t get it to work. Tested with Youtube, pages with Windows Media videos, and Java applets. According to the debugger, the shared objects for each tested plugin is actually opened but no reaction was observed.

Also, from a broad inspection, this implementation doesn&apos;t support windowless mode, which is required for better interoperability with other Evas citizens. I&apos;ll be happy to get plugin support added to EFL port if and only if windowless mode is supported.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>467015</commentid>
    <comment_count>41</comment_count>
    <who name="Mariusz Grzegorczyk">mariusz.g</who>
    <bug_when>2011-09-14 07:11:35 -0700</bug_when>
    <thetext>Because of comment of GyuYoung I have separated patch to smaller parts. This is the first of them, and it is only windowless template(nothing is shown). It is starting point to windowless, and windowed working versions.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>467807</commentid>
    <comment_count>42</comment_count>
    <who name="Mariusz Grzegorczyk">mariusz.g</who>
    <bug_when>2011-09-15 07:57:17 -0700</bug_when>
    <thetext>Do you need to see running plugin on the screen to positively review this patch? Should I add second patch with windowless implementation to this bug?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>467875</commentid>
    <comment_count>43</comment_count>
    <who name="Leandro Pereira">leandro</who>
    <bug_when>2011-09-15 09:58:25 -0700</bug_when>
    <thetext>(In reply to comment #42)
&gt; Do you need to see running plugin on the screen to positively review this 
&gt; patch? Should I add second patch with windowless implementation to this bug?

Please open another bug report with the windowless implementation. I&apos;ll informally review both.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>468539</commentid>
    <comment_count>44</comment_count>
      <attachid>107665</attachid>
    <who name="Mariusz Grzegorczyk">mariusz.g</who>
    <bug_when>2011-09-16 09:35:00 -0700</bug_when>
    <thetext>Created attachment 107665
EFL&apos;s plugin support

Rebased.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>468641</commentid>
    <comment_count>45</comment_count>
      <attachid>107665</attachid>
    <who name="Raphael Kubo da Costa (:rakuco)">rakuco</who>
    <bug_when>2011-09-16 11:24:15 -0700</bug_when>
    <thetext>Comment on attachment 107665
EFL&apos;s plugin support

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

&gt; Source/WebCore/CMakeListsEfl.txt:169
&gt; +    platform/network/soup/ProxyServerSoup.cpp

Is this file and the curl equivalent related to this change? I don&apos;t see proxy code being used in this patch.

&gt; Source/WebCore/ChangeLog:14
&gt; +        * plugins/efl/PluginDataEfl.cpp: Added.

If files such as this one were copied from other files, the ChangeLog entry should have automatically said it was copied from foo/bar.cpp (see other examples in ChangeLog itself).

&gt; Source/WebCore/ChangeLog:15
&gt; +        (WebCore::PluginData::initPlugins):

It&apos;d be good to add some description to the entries, even it is just &quot;add boilerplate code&quot; or something like that (again, ChangeLog itself can provide some examples).

&gt; Source/WebCore/plugins/efl/PluginPackageEfl.cpp:129
&gt; +    m_isLoaded = true;

Is m_isLoaded really supposed to stay true if the dlsym() calls below fail?

&gt; Source/WebCore/plugins/efl/PluginViewEfl.cpp:52
&gt; +#if ENABLE(NETSCAPE_PLUGIN_API)

This file is built only if NETSCAPE_PLUGIN_API is enabled, so are these checks needed?

&gt; Source/WebCore/plugins/efl/PluginViewEfl.cpp:92
&gt; +    IntRect rect = static_cast&lt;FrameView*&gt;(parent())-&gt;contentsToScreen(IntRect(0, 0, event-&gt;offsetX(), event-&gt;offsetY()));

Is the cast needed? constentsToScreen() comes from ScrollView.

&gt; Source/WebCore/plugins/efl/PluginViewEfl.cpp:93
&gt; +    int eventX = rect.width();

can be const.

&gt; Source/WebCore/plugins/efl/PluginViewEfl.cpp:94
&gt; +    int eventY = rect.height();

can be const.

&gt; Source/WebCore/plugins/efl/PluginViewEfl.cpp:127
&gt; +    FrameView* frameView = static_cast&lt;FrameView*&gt;(parent());

The only FrameView method being called is contentsToScreen, which comes from ScrollView. Why is the downcast needed?

&gt; Source/WebCore/plugins/efl/PluginViewEfl.cpp:129
&gt; +    IntRect oldWindowRect = m_windowRect;

This variable does not seem to be used.

&gt; Source/WebCore/plugins/efl/PluginViewEfl.cpp:130
&gt; +    IntRect oldClipRect = m_clipRect;

Neither does this one.

&gt; Source/WebCore/plugins/efl/PluginViewEfl.cpp:164
&gt; +        return;

Useless return statement.

&gt; Source/WebCore/plugins/efl/PluginViewEfl.cpp:179
&gt; +    return;

Useless return statement.

&gt; Source/WebCore/plugins/efl/PluginViewEfl.cpp:188
&gt; +    if (isParentVisible() == visible)

Is this check really necessary?

&gt; Source/WebCore/plugins/efl/PluginViewEfl.cpp:199
&gt; +    if (filename.startsWith(&quot;file:///&quot;))

Adam&apos;s question in comment #23 has not been answered yet: is stripping off the leading / of the path really correct?

&gt; Source/WebCore/plugins/efl/PluginViewEfl.cpp:210
&gt; +    int bytesRead = fread(buffer.data(), 1, 0, fileHandle);

bytesRead can be const. I didn&apos;t understand the point of this call. You seem to be reading 0 bytes.

&gt; Source/WebCore/plugins/efl/PluginViewEfl.cpp:257
&gt; +        *static_cast&lt;void **&gt;(value) = static_cast&lt;Display*&gt;(ecore_x_display_get());

The space before ** is wrong.

&gt; Source/WebCore/plugins/efl/PluginViewEfl.cpp:277
&gt; +        void** v = (void**)value;

&quot;v&quot; is not a good variable name.

&gt; Source/WebCore/plugins/efl/PluginViewEfl.cpp:307
&gt; +        void* w = reinterpret_cast&lt;void*&gt;(value);

&quot;w&quot; is not a good variable name.

&gt; Source/WebCore/plugins/efl/PluginViewEfl.cpp:310
&gt; +        Ecore_Evas* ee = ecore_evas_ecore_evas_get(evas);

&quot;ee&quot; is not a good variable name.

&gt; Source/WebCore/plugins/efl/PluginViewEfl.cpp:311
&gt; +        *((XID *)w) = (Window) ecore_evas_window_get(ee);

C-style casts.

&gt; Source/WebCore/plugins/efl/PluginViewEfl.cpp:323
&gt; +        // fall through

Unnecessary comment.

&gt; Source/WebCore/plugins/efl/PluginViewEfl.cpp:343
&gt; +    IntRect r(rect-&gt;left, rect-&gt;top, rect-&gt;right - rect-&gt;left, rect-&gt;bottom - rect-&gt;top);

Just construct the IntRect when calling invalidateRect().</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>469313</commentid>
    <comment_count>46</comment_count>
      <attachid>107665</attachid>
    <who name="Mariusz Grzegorczyk">mariusz.g</who>
    <bug_when>2011-09-19 03:47:35 -0700</bug_when>
    <thetext>Comment on attachment 107665
EFL&apos;s plugin support

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

&gt;&gt; Source/WebCore/CMakeListsEfl.txt:169
&gt;&gt; +    platform/network/soup/ProxyServerSoup.cpp
&gt; 
&gt; Is this file and the curl equivalent related to this change? I don&apos;t see proxy code being used in this patch.

When ENABLE_NETSCAPE_PLUGIN_API is on in PluginView.cpp in function PluginView::getValueForURL(), proxyServersForURL() is called. By default webkit is build with macro off and causes build break for efl port.

&gt;&gt; Source/WebCore/plugins/efl/PluginPackageEfl.cpp:129
&gt;&gt; +    m_isLoaded = true;
&gt; 
&gt; Is m_isLoaded really supposed to stay true if the dlsym() calls below fail?

If one of the dlsym() calls below fail program goes to abort label, which calls unloadWithoutShutdown() which sets m_isLoaded to false.

&gt;&gt; Source/WebCore/plugins/efl/PluginViewEfl.cpp:52
&gt;&gt; +#if ENABLE(NETSCAPE_PLUGIN_API)
&gt; 
&gt; This file is built only if NETSCAPE_PLUGIN_API is enabled, so are these checks needed?

Yes, it can be ommited</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>470016</commentid>
    <comment_count>47</comment_count>
      <attachid>107993</attachid>
    <who name="Mariusz Grzegorczyk">mariusz.g</who>
    <bug_when>2011-09-20 06:20:06 -0700</bug_when>
    <thetext>Created attachment 107993
EFL&apos;s plugin support</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>470064</commentid>
    <comment_count>48</comment_count>
      <attachid>107993</attachid>
    <who name="Leandro Pereira">leandro</who>
    <bug_when>2011-09-20 08:04:43 -0700</bug_when>
    <thetext>Comment on attachment 107993
EFL&apos;s plugin support

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

Informal r- for the reason below.

&gt; Source/WebCore/plugins/efl/PluginViewEfl.cpp:181
&gt; +    if (filename.startsWith(&quot;file:///&quot;))
&gt; +#if defined(XP_UNIX)
&gt; +        filename = filename.substring(7);
&gt; +#else
&gt; +        filename = filename.substring(8);
&gt; +#endif

If you&apos;re on Unix, a &quot;file:///bin/bash&quot; URI will have the &quot;file://&quot; stripped, yielding &quot;/bin/bash&quot;. This is correct. However, I don&apos;t understand why the first &apos;/&apos; is stripped in a non-Unix build, since only &quot;file://&quot; is part of the URI schema. For example: &quot;file://c:/autoexec.bat&quot; will be transformed to &quot;:/autoexec.bat&quot;, which is clearly wrong.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>470069</commentid>
    <comment_count>49</comment_count>
      <attachid>107993</attachid>
    <who name="Raphael Kubo da Costa (:rakuco)">rakuco</who>
    <bug_when>2011-09-20 08:09:44 -0700</bug_when>
    <thetext>Comment on attachment 107993
EFL&apos;s plugin support

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

&gt; Source/WebCore/CMakeListsEfl.txt:7
&gt; +  &quot;${DERIVED_SOURCES_DIR}&quot;

I&apos;d rather if this patch just added plugins/efl to the list.

&gt; Source/WebCore/plugins/efl/PluginViewEfl.cpp:187
&gt; +    FILE* fileHandle = fopen(filename.utf8().data(), &quot;r&quot;);

Besides getFileSize, you could also use openFile, readFromFile and the other calls from FileSystem.h.

&gt; Source/WebCore/plugins/efl/PluginViewEfl.cpp:340
&gt; +{

Missing notImplemented().</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>470078</commentid>
    <comment_count>50</comment_count>
    <who name="Mariusz Grzegorczyk">mariusz.g</who>
    <bug_when>2011-09-20 08:30:40 -0700</bug_when>
    <thetext>(In reply to comment #48)
&gt; (From update of attachment 107993 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=107993&amp;action=review
&gt; 
&gt; Informal r- for the reason below.
&gt; 
&gt; &gt; Source/WebCore/plugins/efl/PluginViewEfl.cpp:181
&gt; &gt; +    if (filename.startsWith(&quot;file:///&quot;))
&gt; &gt; +#if defined(XP_UNIX)
&gt; &gt; +        filename = filename.substring(7);
&gt; &gt; +#else
&gt; &gt; +        filename = filename.substring(8);
&gt; &gt; +#endif
&gt; 
&gt; If you&apos;re on Unix, a &quot;file:///bin/bash&quot; URI will have the &quot;file://&quot; stripped, yielding &quot;/bin/bash&quot;. This is correct. However, I don&apos;t understand why the first &apos;/&apos; is stripped in a non-Unix build, since only &quot;file://&quot; is part of the URI schema. For example: &quot;file://c:/autoexec.bat&quot; will be transformed to &quot;:/autoexec.bat&quot;, which is clearly wrong.

At first the if statement says that this is only in case that filename starts with &quot;file:///&quot;, so there is no problem with example: &quot;file://c:/autoexec.bat&quot;. Second: as I know proper uri schema for local file is &quot;file:///&quot;, for other combinations like: &quot;file://something&quot; it will try to resolve name &quot;something&quot; f.e. file://localhost/.... For windows proper schema for local file will be f.e. &quot;file:///C:/autoexec.bat&quot;. Same stripping is made in Mac, Qt and Win ports, however I think it should be fixed at least in Qt.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>470081</commentid>
    <comment_count>51</comment_count>
    <who name="Mariusz Grzegorczyk">mariusz.g</who>
    <bug_when>2011-09-20 08:33:50 -0700</bug_when>
    <thetext>(In reply to comment #49)
&gt; (From update of attachment 107993 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=107993&amp;action=review
&gt; 
&gt; &gt; Source/WebCore/CMakeListsEfl.txt:7
&gt; &gt; +  &quot;${DERIVED_SOURCES_DIR}&quot;
&gt; 
&gt; I&apos;d rather if this patch just added plugins/efl to the list.
&gt; 
&gt; &gt; Source/WebCore/plugins/efl/PluginViewEfl.cpp:187
&gt; &gt; +    FILE* fileHandle = fopen(filename.utf8().data(), &quot;r&quot;);
&gt; 
&gt; Besides getFileSize, you could also use openFile, readFromFile and the other calls from FileSystem.h.
Thought about this, but left as is because none of the ports is using FileSystem methods for some reason, and FILE methods are used in Mac, and Qt

&gt; 
&gt; &gt; Source/WebCore/plugins/efl/PluginViewEfl.cpp:340
&gt; &gt; +{
&gt; 
&gt; Missing notImplemented().</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>470926</commentid>
    <comment_count>52</comment_count>
    <who name="Leandro Pereira">leandro</who>
    <bug_when>2011-09-21 10:48:15 -0700</bug_when>
    <thetext>(In reply to comment #50)

&gt; At first the if statement says that this is only in case that filename starts
&gt; with &quot;file:///&quot;, so there is no problem with example: &quot;file://c:/autoexec.bat&quot;.

You&apos;re right. I&apos;m changing the r- to r? again.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>470939</commentid>
    <comment_count>53</comment_count>
      <attachid>107993</attachid>
    <who name="Leandro Pereira">leandro</who>
    <bug_when>2011-09-21 11:00:14 -0700</bug_when>
    <thetext>Comment on attachment 107993
EFL&apos;s plugin support

Informal r+. Setting cq- so that this doesn&apos;t get committed before other parts of this patch gets properly reviewed.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>501890</commentid>
    <comment_count>54</comment_count>
    <who name="Mariusz Grzegorczyk">mariusz.g</who>
    <bug_when>2011-11-14 07:20:48 -0800</bug_when>
    <thetext>This patch works with windowless implementation. For details see:
https://bugs.webkit.org/show_bug.cgi?id=70592</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>501931</commentid>
    <comment_count>55</comment_count>
      <attachid>114951</attachid>
    <who name="Mariusz Grzegorczyk">mariusz.g</who>
    <bug_when>2011-11-14 08:29:27 -0800</bug_when>
    <thetext>Created attachment 114951
EFL&apos;s plugin support

Rebased version.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>502602</commentid>
    <comment_count>56</comment_count>
      <attachid>114951</attachid>
    <who name="Gyuyoung Kim">gyuyoung.kim</who>
    <bug_when>2011-11-14 20:16:46 -0800</bug_when>
    <thetext>Comment on attachment 114951
EFL&apos;s plugin support

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

&gt; Source/WebCore/plugins/efl/PluginViewEfl.cpp:209
&gt; +

Unneeded empty line.

&gt; Source/WebCore/plugins/efl/PluginViewEfl.cpp:214
&gt; +

ditto.

&gt; Source/WebCore/plugins/efl/PluginViewEfl.cpp:219
&gt; +

ditto.

&gt; Source/WebCore/plugins/efl/PluginViewEfl.cpp:224
&gt; +

ditto.

&gt; Source/WebCore/plugins/efl/PluginViewEfl.cpp:240
&gt; +

ditto.

&gt; Source/WebCore/plugins/efl/PluginViewEfl.cpp:244
&gt; +

ditto.

&gt; Source/WebCore/plugins/efl/PluginViewEfl.cpp:262
&gt; +

ditto.

&gt; Source/WebCore/plugins/efl/PluginViewEfl.cpp:278
&gt; +        *static_cast&lt;void**&gt;(value) = pluginScriptObject;

Is *static_cast correct usage ? I can&apos;t find similar usage in WebKit.

&gt; Source/WebCore/plugins/efl/PluginViewEfl.cpp:283
&gt; +

ditto.

&gt; Source/WebCore/plugins/efl/PluginViewEfl.cpp:292
&gt; +

ditto.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>502737</commentid>
    <comment_count>57</comment_count>
      <attachid>114951</attachid>
    <who name="Mariusz Grzegorczyk">mariusz.g</who>
    <bug_when>2011-11-15 01:48:03 -0800</bug_when>
    <thetext>Comment on attachment 114951
EFL&apos;s plugin support

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

&gt;&gt; Source/WebCore/plugins/efl/PluginViewEfl.cpp:209

&gt; 
&gt; Unneeded empty line.

Same style applied in PluginViewGtk and PluginView.

&gt;&gt; Source/WebCore/plugins/efl/PluginViewEfl.cpp:278
&gt;&gt; +        *static_cast&lt;void**&gt;(value) = pluginScriptObject;
&gt; 
&gt; Is *static_cast correct usage ? I can&apos;t find similar usage in WebKit.

It&apos;s better to use static_cast in C++ than C-style cast. For similar usage see f.e. PluginViewMac: *static_cast&lt;NPBool*&gt;(value) = false;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>511526</commentid>
    <comment_count>58</comment_count>
    <who name="Mariusz Grzegorczyk">mariusz.g</who>
    <bug_when>2011-11-30 01:50:18 -0800</bug_when>
    <thetext>Any news for it?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>518250</commentid>
    <comment_count>59</comment_count>
    <who name="Mariusz Grzegorczyk">mariusz.g</who>
    <bug_when>2011-12-09 07:18:15 -0800</bug_when>
    <thetext>Added people connected with gtk plugin&apos;s port since implementation is based on it.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>525284</commentid>
    <comment_count>60</comment_count>
      <attachid>114951</attachid>
    <who name="Anders Carlsson">andersca</who>
    <bug_when>2011-12-21 09:15:34 -0800</bug_when>
    <thetext>Comment on attachment 114951
EFL&apos;s plugin support

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

&gt; Source/WebKit/efl/ewk/ewk_frame.cpp:1639
&gt; +        return pluginView;

It&apos;s slightly more efficient to use pluginView.release() here.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>525730</commentid>
    <comment_count>61</comment_count>
      <attachid>114951</attachid>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2011-12-21 15:33:33 -0800</bug_when>
    <thetext>Comment on attachment 114951
EFL&apos;s plugin support

Marking cq+ since the author is not a comitter.  The extra ref probably shouldn&apos;t hold up this patch.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>525934</commentid>
    <comment_count>62</comment_count>
      <attachid>114951</attachid>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2011-12-21 19:38:21 -0800</bug_when>
    <thetext>Comment on attachment 114951
EFL&apos;s plugin support

Rejecting attachment 114951 from commit-queue.

Failed to run &quot;[&apos;/mnt/git/webkit-commit-queue/Tools/Scripts/webkit-patch&apos;, &apos;--status-host=queues.webkit.org&apos;, &apos;-...&quot; exit_code: 2

Last 500 characters of output:
hromium/testing/gmock --revision 374 --non-interactive --force --accept theirs-conflict --ignore-externals returned non-zero exit status 1 in /mnt/git/webkit-commit-queue/Source/WebKit/chromium
Error: &apos;depot_tools/gclient sync --force --reset --delete_unversioned_trees&apos; failed 3 tries and returned 256 at Tools/Scripts/update-webkit-chromium line 106.
Re-trying &apos;depot_tools/gclient sync --force --reset --delete_unversioned_trees&apos;
No such file or directory at Tools/Scripts/update-webkit line 112.

Full output: http://queues.webkit.org/results/10986247</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>525949</commentid>
    <comment_count>63</comment_count>
    <who name="Gyuyoung Kim">gyuyoung.kim</who>
    <bug_when>2011-12-21 20:29:56 -0800</bug_when>
    <thetext>Mariusz, this patch get a r+ at last. :-) Please rebase this patch based on latest  WebKit. And, add &quot;Reviewed by Anders Carlsson&quot; instead of &quot;Reviewed by NOBODY (OOPS!).&quot; in ChangeLog. Then, please only request cq?.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>526145</commentid>
    <comment_count>64</comment_count>
      <attachid>120300</attachid>
    <who name="Mariusz Grzegorczyk">mariusz.g</who>
    <bug_when>2011-12-22 03:10:59 -0800</bug_when>
    <thetext>Created attachment 120300
EFL&apos;s plugin support</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>526146</commentid>
    <comment_count>65</comment_count>
    <who name="Mariusz Grzegorczyk">mariusz.g</who>
    <bug_when>2011-12-22 03:12:34 -0800</bug_when>
    <thetext>Rebased.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>526148</commentid>
    <comment_count>66</comment_count>
      <attachid>120301</attachid>
    <who name="Mariusz Grzegorczyk">mariusz.g</who>
    <bug_when>2011-12-22 03:15:34 -0800</bug_when>
    <thetext>Created attachment 120301
EFL&apos;s plugin support</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>526150</commentid>
    <comment_count>67</comment_count>
    <who name="Mariusz Grzegorczyk">mariusz.g</who>
    <bug_when>2011-12-22 03:21:47 -0800</bug_when>
    <thetext>Patch for landing.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>526177</commentid>
    <comment_count>68</comment_count>
      <attachid>120301</attachid>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2011-12-22 04:24:13 -0800</bug_when>
    <thetext>Comment on attachment 120301
EFL&apos;s plugin support

Rejecting attachment 120301 from commit-queue.

Failed to run &quot;[&apos;/mnt/git/webkit-commit-queue/Tools/Scripts/webkit-patch&apos;, &apos;--status-host=queues.webkit.org&apos;, &apos;-...&quot; exit_code: 1

Anders Calsson found in /mnt/git/webkit-commit-queue/Source/WebKit/efl/ChangeLog does not appear to be a valid reviewer according to committers.py.
ERROR: /mnt/git/webkit-commit-queue/Source/WebKit/efl/ChangeLog neither lists a valid reviewer nor contains the string &quot;Unreviewed&quot; or &quot;Rubber stamp&quot; (case insensitive).

Full output: http://queues.webkit.org/results/10981493</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>526182</commentid>
    <comment_count>69</comment_count>
      <attachid>120301</attachid>
    <who name="Gyuyoung Kim">gyuyoung.kim</who>
    <bug_when>2011-12-22 04:36:24 -0800</bug_when>
    <thetext>Comment on attachment 120301
EFL&apos;s plugin support

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

&gt; Source/WebKit/efl/ChangeLog:6
&gt; +        Reviewed by Anders Calsson.

%s/Calsson/Carlsson/g</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>526186</commentid>
    <comment_count>70</comment_count>
      <attachid>120306</attachid>
    <who name="Mariusz Grzegorczyk">mariusz.g</who>
    <bug_when>2011-12-22 04:46:07 -0800</bug_when>
    <thetext>Created attachment 120306
EFL&apos;s plugin support</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>526250</commentid>
    <comment_count>71</comment_count>
      <attachid>120306</attachid>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2011-12-22 07:39:02 -0800</bug_when>
    <thetext>Comment on attachment 120306
EFL&apos;s plugin support

Clearing flags on attachment: 120306

Committed r103544: &lt;http://trac.webkit.org/changeset/103544&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>526251</commentid>
    <comment_count>72</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2011-12-22 07:39:12 -0800</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>65249</attachid>
            <date>2010-08-24 02:45:37 -0700</date>
            <delta_ts>2010-08-25 05:02:41 -0700</delta_ts>
            <desc>Patch adding plugins support to efl port</desc>
            <filename>efl.patch</filename>
            <type>text/plain</type>
            <size>48660</size>
            <attacher name="Mariusz Grzegorczyk">mariusz.g</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1dlYkNvcmUvQ01ha2VMaXN0cy50eHQgYi9XZWJDb3JlL0NNYWtlTGlzdHMu
dHh0CmluZGV4IDNmZTZjMmMuLmViOGYzOWEgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvQ01ha2VMaXN0
cy50eHQKKysrIGIvV2ViQ29yZS9DTWFrZUxpc3RzLnR4dApAQCAtMTM0Niw3ICsxMzQ2LDggQEAg
U0VUKFdlYkNvcmVfU09VUkNFUwogICAgIHBsdWdpbnMvUGx1Z2luRGF0YS5jcHAKICAgICBwbHVn
aW5zL1BsdWdpbkRhdGFOb25lLmNwcAogICAgIHBsdWdpbnMvUGx1Z2luTWFpblRocmVhZFNjaGVk
dWxlci5jcHAKLSAgICBwbHVnaW5zL1BsdWdpblZpZXdOb25lLmNwcAorIyAgICBwbHVnaW5zL1Bs
dWdpblZpZXdOb25lLmNwcAorICAgIHBsdWdpbnMvUGx1Z2luVmlldy5jcHAKIAogICAgIHJlbmRl
cmluZy9BdXRvVGFibGVMYXlvdXQuY3BwCiAgICAgcmVuZGVyaW5nL0JpZGlSdW4uY3BwCmRpZmYg
LS1naXQgYS9XZWJDb3JlL0NNYWtlTGlzdHNFZmwudHh0IGIvV2ViQ29yZS9DTWFrZUxpc3RzRWZs
LnR4dAppbmRleCA1YzhjZGYyLi5jZTI4MTA5IDEwMDY0NAotLS0gYS9XZWJDb3JlL0NNYWtlTGlz
dHNFZmwudHh0CisrKyBiL1dlYkNvcmUvQ01ha2VMaXN0c0VmbC50eHQKQEAgLTExLDYgKzExLDcg
QEAgTElTVChBUFBFTkQgV2ViQ29yZV9JTkNMVURFX0RJUkVDVE9SSUVTCiAgICIke1dFQkNPUkVf
RElSfS9wbGF0Zm9ybS9ncmFwaGljcy9lZmwiCiAgICIke1dFQkNPUkVfRElSfS9wYWdlL2VmbCIK
ICAgIiR7V0VCQ09SRV9ESVJ9L2FjY2Vzc2liaWxpdHkvZWZsIgorICAiJHtXRUJDT1JFX0RJUn0v
cGx1Z2lucy9lZmwiCiAgICIke1dFQktJVF9ESVJ9L2VmbC9XZWJDb3JlU3VwcG9ydCIKICAgIiR7
V0VCS0lUX0RJUn0vZWZsL2V3ayIKICkKQEAgLTU4LDYgKzU5LDE3IEBAIExJU1QoQVBQRU5EIFdl
YkNvcmVfU09VUkNFUwogICBwbGF0Zm9ybS9ncmFwaGljcy9lZmwvSW50UG9pbnRFZmwuY3BwCiAg
IHBsYXRmb3JtL3Bvc2l4L0ZpbGVTeXN0ZW1QT1NJWC5jcHAKICAgcGxhdGZvcm0vdGV4dC9lZmwv
VGV4dEJyZWFrSXRlcmF0b3JJbnRlcm5hbElDVUVmbC5jcHAKKyAgcGx1Z2lucy9lZmwvUGx1Z2lu
RGF0YUVmbC5jcHAKKyAgcGx1Z2lucy9lZmwvUGx1Z2luUGFja2FnZUVmbC5jcHAKKyAgcGx1Z2lu
cy9lZmwvUGx1Z2luVmlld0VmbC5jcHAKKyAgcGx1Z2lucy9lZmwvWDExRW1iZWRDb250YWluZXIu
Y3BwCisgIHBsdWdpbnMvZWZsL1gxMVdpbmRvdy5jcHAKKyAgcGx1Z2lucy9ucGFwaS5jcHAKKyAg
cGx1Z2lucy9QbHVnaW5EYXRhYmFzZS5jcHAKKyAgcGx1Z2lucy9QbHVnaW5EZWJ1Zy5jcHAKKyAg
cGx1Z2lucy9QbHVnaW5QYWNrYWdlLmNwcAorICBwbHVnaW5zL1BsdWdpblN0cmVhbS5jcHAKKyAg
cGx1Z2lucy9QbHVnaW5WaWV3LmNwcAogKQogCiBJRiAoV1RGX1BMQVRGT1JNX0NBSVJPKQpkaWZm
IC0tZ2l0IGEvV2ViQ29yZS9DaGFuZ2VMb2cgYi9XZWJDb3JlL0NoYW5nZUxvZwppbmRleCA5OTM0
ZmJmLi5hZTljNDIxIDEwMDY0NAotLS0gYS9XZWJDb3JlL0NoYW5nZUxvZworKysgYi9XZWJDb3Jl
L0NoYW5nZUxvZwpAQCAtMSwzICsxLDE3IEBACisyMDEwLTA4LTI0ICBNYXJpdXN6IEdyemVnb3Jj
enlrICA8bWFyaXVzei5nQHNhbXN1bmcuY29tPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9E
WSAoT09QUyEpLgorCisgICAgICAgIFtFRkxdIEFkZGVkIGZpbGVzIHRvIHBsdWdpbiBzdXBwb3J0
IGluIGVmbCBwb3J0CisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNn
aT9pZD00NDUwNQorCisgICAgICAgICogQ01ha2VMaXN0cy50eHQ6CisgICAgICAgICogQ01ha2VM
aXN0c0VmbC50eHQ6CisgICAgICAgICogcGx1Z2lucy9QbHVnaW5QYWNrYWdlLmNwcDoKKyAgICAg
ICAgKiBwbHVnaW5zL1BsdWdpblZpZXcuY3BwOgorICAgICAgICAoV2ViQ29yZTo6UGx1Z2luVmll
dzo6Y3JlYXRlKToKKyAgICAgICAgKiBwbHVnaW5zL1BsdWdpblZpZXcuaDoKKwogMjAxMC0wOC0x
OSAgQW5kcmVhcyBLbGluZyAgPGFuZHJlYXMua2xpbmdAbm9raWEuY29tPgogCiAgICAgICAgIFJl
dmlld2VkIGJ5IEtlbm5ldGggUm9oZGUgQ2hyaXN0aWFuc2VuLgpkaWZmIC0tZ2l0IGEvV2ViQ29y
ZS9wbHVnaW5zL1BsdWdpblBhY2thZ2UuY3BwIGIvV2ViQ29yZS9wbHVnaW5zL1BsdWdpblBhY2th
Z2UuY3BwCmluZGV4IGJmOTcwZjIuLmYzYjFhZTMgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvcGx1Z2lu
cy9QbHVnaW5QYWNrYWdlLmNwcAorKysgYi9XZWJDb3JlL3BsdWdpbnMvUGx1Z2luUGFja2FnZS5j
cHAKQEAgLTMwOCw3ICszMDgsOCBAQCB2b2lkIFBsdWdpblBhY2thZ2U6OmluaXRpYWxpemVCcm93
c2VyRnVuY3MoKQogfQogI2VuZGlmCiAKLSNpZiBFTkFCTEUoUExVR0lOX1BBQ0tBR0VfU0lNUExF
X0hBU0gpCisvLyAjaWYgRU5BQkxFKFBMVUdJTl9QQUNLQUdFX1NJTVBMRV9IQVNIKQorLy8gaW4g
aGVhZGVyIGFuZCBvdGhlciBmaWxlcyB0aGVyZSBpcyBubyBzdWNoIG1hY3JvLCBzbyBoZXJlIGl0
IGlzIGNvbW1lbnRlZAogdW5zaWduZWQgUGx1Z2luUGFja2FnZTo6aGFzaCgpIGNvbnN0CiB7CiAg
ICAgdW5zaWduZWQgaGFzaENvZGVzW10gPSB7CkBAIC0zMjMsNyArMzI0LDcgQEAgYm9vbCBQbHVn
aW5QYWNrYWdlOjplcXVhbChjb25zdCBQbHVnaW5QYWNrYWdlJiBhLCBjb25zdCBQbHVnaW5QYWNr
YWdlJiBiKQogewogICAgIHJldHVybiBhLm1fZGVzY3JpcHRpb24gPT0gYi5tX2Rlc2NyaXB0aW9u
OwogfQotI2VuZGlmCisvLyAjZW5kaWYKIAogaW50IFBsdWdpblBhY2thZ2U6OmNvbXBhcmVGaWxl
VmVyc2lvbihjb25zdCBQbGF0Zm9ybU1vZHVsZVZlcnNpb24mIGNvbXBhcmVWZXJzaW9uKSBjb25z
dAogewpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9wbHVnaW5zL1BsdWdpblZpZXcuaCBiL1dlYkNvcmUv
cGx1Z2lucy9QbHVnaW5WaWV3LmgKaW5kZXggOWI0NDE5Ny4uOTk5YzU2OCAxMDA2NDQKLS0tIGEv
V2ViQ29yZS9wbHVnaW5zL1BsdWdpblZpZXcuaAorKysgYi9XZWJDb3JlL3BsdWdpbnMvUGx1Z2lu
Vmlldy5oCkBAIC00OCw2ICs0OCw5IEBACiAjaWYgT1MoV0lORE9XUykgJiYgKFBMQVRGT1JNKFFU
KSB8fCBQTEFURk9STShXWCkpCiB0eXBlZGVmIHN0cnVjdCBIV05EX18qIEhXTkQ7CiB0eXBlZGVm
IEhXTkQgUGxhdGZvcm1QbHVnaW5XaWRnZXQ7CisjZWxpZiBQTEFURk9STShFRkwpCitjbGFzcyBY
MTFFbWJlZENvbnRhaW5lcjsKK3R5cGVkZWYgWDExRW1iZWRDb250YWluZXIqIFBsYXRmb3JtUGx1
Z2luV2lkZ2V0OwogI2Vsc2UKIHR5cGVkZWYgUGxhdGZvcm1XaWRnZXQgUGxhdGZvcm1QbHVnaW5X
aWRnZXQ7CiAjaWYgZGVmaW5lZChYUF9NQUNPU1gpICYmIFBMQVRGT1JNKFFUKQpAQCAtMzMzLDcg
KzMzNiw3IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKICAgICAgICAgYm9vbCBtX2hhdmVVcGRhdGVk
UGx1Z2luV2lkZ2V0OwogI2VuZGlmCiAKLSNpZiAoKFBMQVRGT1JNKFFUKSB8fCBQTEFURk9STShX
WCkpICYmIE9TKFdJTkRPV1MpKSB8fCBkZWZpbmVkKFhQX01BQ09TWCkKKyNpZiAoKFBMQVRGT1JN
KFFUKSB8fCBQTEFURk9STShXWCkpICYmIE9TKFdJTkRPV1MpKSB8fCBkZWZpbmVkKFhQX01BQ09T
WCkgfHwgUExBVEZPUk0oRUZMKQogICAgICAgICAvLyBPbiBNYWMgT1NYIGFuZCBRdC9XaW5kb3dz
IHRoZSBwbHVnaW4gZG9lcyBub3QgaGF2ZSBpdHMgb3duIG5hdGl2ZSB3aWRnZXQsCiAgICAgICAg
IC8vIGJ1dCBpcyB1c2luZyB0aGUgY29udGFpbmluZyB3aW5kb3cgYXMgaXRzIHJlZmVyZW5jZSBm
b3IgcG9zaXRpb25pbmcvcGFpbnRpbmcuCiAgICAgICAgIFBsYXRmb3JtUGx1Z2luV2lkZ2V0IG1f
d2luZG93OwpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9wbHVnaW5zL2VmbC9QbHVnaW5EYXRhRWZsLmNw
cCBiL1dlYkNvcmUvcGx1Z2lucy9lZmwvUGx1Z2luRGF0YUVmbC5jcHAKbmV3IGZpbGUgbW9kZSAx
MDA2NDQKaW5kZXggMDAwMDAwMC4uNjk3N2Q2NAotLS0gL2Rldi9udWxsCisrKyBiL1dlYkNvcmUv
cGx1Z2lucy9lZmwvUGx1Z2luRGF0YUVmbC5jcHAKQEAgLTAsMCArMSw2OCBAQAorLyoKKyAgICBD
b3B5cmlnaHQgKEMpIDIwMDYsIDIwMDcgQXBwbGUgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4K
KyAgICBDb3B5cmlnaHQgKEMpIDIwMDggVHJvbGx0ZWNoIEFTQQorICAgIENvcHlyaWdodCAoQykg
MjAwOCBDb2xsYWJvcmEgTHRkLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICAgIENvcHlyaWdodCAo
QykgMjAwOCBJTmRUIC0gSW5zdGl0dXRvIE5va2lhIGRlIFRlY25vbG9naWEKKyAgICBDb3B5cmln
aHQgKEMpIDIwMDktMjAxMCBQcm9GVVNJT04gZW1iZWRkZWQgc3lzdGVtcworICAgIENvcHlyaWdo
dCAoQykgMjAwOS0yMDEwIFNhbXN1bmcgRWxlY3Ryb25pY3MKKworICAgIFRoaXMgbGlicmFyeSBp
cyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAgICBtb2Rp
ZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwor
ICAgIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247
IGVpdGhlcgorICAgIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9u
KSBhbnkgbGF0ZXIgdmVyc2lvbi4KKworICAgIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBp
biB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICAgIGJ1dCBXSVRIT1VUIEFOWSBX
QVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgICAgTUVSQ0hB
TlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBH
TlUKKyAgICBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4K
KworICAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5
IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAgICBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2Vl
IHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bworICAgIHRoZSBGcmVlIFNv
ZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3Is
CisgICAgQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisqLworCisjaW5jbHVkZSAiY29uZmln
LmgiCisjaW5jbHVkZSAiUGx1Z2luRGF0YS5oIgorCisjaW5jbHVkZSAiUGx1Z2luRGF0YWJhc2Uu
aCIKKyNpbmNsdWRlICJQbHVnaW5QYWNrYWdlLmgiCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKwor
dm9pZCBQbHVnaW5EYXRhOjppbml0UGx1Z2lucygpCit7CisgICAgUGx1Z2luRGF0YWJhc2UqIGRi
ID0gUGx1Z2luRGF0YWJhc2U6Omluc3RhbGxlZFBsdWdpbnMoKTsKKyAgICBjb25zdCBWZWN0b3I8
UGx1Z2luUGFja2FnZSo+ICZwbHVnaW5zID0gZGItPnBsdWdpbnMoKTsKKworICAgIGZvciAodW5z
aWduZWQgaW50IGkgPSAwOyBpIDwgcGx1Z2lucy5zaXplKCk7ICsraSkgeworICAgICAgICBQbHVn
aW5JbmZvIGluZm87CisgICAgICAgIFBsdWdpblBhY2thZ2UqIHBhY2thZ2UgPSBwbHVnaW5zW2ld
OworCisgICAgICAgIGluZm8ubmFtZSA9IHBhY2thZ2UtPm5hbWUoKTsKKyAgICAgICAgaW5mby5m
aWxlID0gcGFja2FnZS0+ZmlsZU5hbWUoKTsKKyAgICAgICAgaW5mby5kZXNjID0gcGFja2FnZS0+
ZGVzY3JpcHRpb24oKTsKKworICAgICAgICBjb25zdCBNSU1FVG9EZXNjcmlwdGlvbnNNYXAmIG1p
bWVUb0Rlc2NyaXB0aW9ucyA9IHBhY2thZ2UtPm1pbWVUb0Rlc2NyaXB0aW9ucygpOworICAgICAg
ICBNSU1FVG9EZXNjcmlwdGlvbnNNYXA6OmNvbnN0X2l0ZXJhdG9yIGVuZCA9IG1pbWVUb0Rlc2Ny
aXB0aW9ucy5lbmQoKTsKKyAgICAgICAgZm9yIChNSU1FVG9EZXNjcmlwdGlvbnNNYXA6OmNvbnN0
X2l0ZXJhdG9yIGl0ID0gbWltZVRvRGVzY3JpcHRpb25zLmJlZ2luKCk7IGl0ICE9IGVuZDsgKytp
dCkgeworICAgICAgICAgICAgTWltZUNsYXNzSW5mbyBtaW1lOworICAgICAgICAgICAgCisgICAg
ICAgICAgICBtaW1lLnR5cGUgPSBpdC0+Zmlyc3Q7CisgICAgICAgICAgICBtaW1lLmRlc2MgPSBp
dC0+c2Vjb25kOworCisgICAgICAgICAgICBWZWN0b3I8U3RyaW5nPiBleHRlbnNpb25zID0gcGFj
a2FnZS0+bWltZVRvRXh0ZW5zaW9ucygpLmdldChtaW1lLnR5cGUpOworICAgICAgICAgICAgaW5m
by5taW1lcy5hcHBlbmQobWltZSk7CisgICAgICAgIH0KKworICAgICAgICBtX3BsdWdpbnMuYXBw
ZW5kKGluZm8pOworICAgIH0KK30KKwordm9pZCBQbHVnaW5EYXRhOjpyZWZyZXNoKCkKK3sKKyAg
ICBQbHVnaW5EYXRhYmFzZSogZGIgPSBQbHVnaW5EYXRhYmFzZTo6aW5zdGFsbGVkUGx1Z2lucygp
OworICAgIGRiLT5yZWZyZXNoKCk7Cit9CisKK307CmRpZmYgLS1naXQgYS9XZWJDb3JlL3BsdWdp
bnMvZWZsL1BsdWdpblBhY2thZ2VFZmwuY3BwIGIvV2ViQ29yZS9wbHVnaW5zL2VmbC9QbHVnaW5Q
YWNrYWdlRWZsLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40ZWViYzll
Ci0tLSAvZGV2L251bGwKKysrIGIvV2ViQ29yZS9wbHVnaW5zL2VmbC9QbHVnaW5QYWNrYWdlRWZs
LmNwcApAQCAtMCwwICsxLDE3MyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwNiwgMjAwNyBB
cHBsZSBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDA4IENv
bGxhYm9yYSBMdGQuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDgg
TnVhbnRpIEx0ZC4KKyAqIENvcHlyaWdodCAoQykgMjAwOCBJTmRUIC0gSW5zdGl0dXRvIE5va2lh
IGRlIFRlY25vbG9naWEKKyAqIENvcHlyaWdodCAoQykgMjAwOS0yMDEwIFByb0ZVU0lPTiBlbWJl
ZGRlZCBzeXN0ZW1zCisgKiBDb3B5cmlnaHQgKEMpIDIwMDktMjAxMCBTYW1zdW5nIEVsZWN0cm9u
aWNzCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm
b3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv
dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBS
ZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHly
aWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11
c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAg
IGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBk
aXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBD
T01QVVRFUiwgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdB
UlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQg
V0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxB
UgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIENP
TVBVVEVSLCBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNU
LCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VR
VUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NV
UkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRB
LCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNF
RCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNU
LCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1Ig
T1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMg
U09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1B
R0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIlBsdWdpblBhY2thZ2Uu
aCIKKworI2luY2x1ZGUgIk1JTUVUeXBlUmVnaXN0cnkuaCIKKyNpbmNsdWRlICJOb3RJbXBsZW1l
bnRlZC5oIgorI2luY2x1ZGUgIlBsdWdpbkRhdGFiYXNlLmgiCisjaW5jbHVkZSAiUGx1Z2luRGVi
dWcuaCIKKyNpbmNsdWRlICJucHJ1bnRpbWVfaW1wbC5oIgorCisjaW5jbHVkZSA8RWluYS5oPgor
I2luY2x1ZGUgPGRsZmNuLmg+CisjaW5jbHVkZSA8d3RmL3RleHQvQ1N0cmluZy5oPgorCituYW1l
c3BhY2UgV2ViQ29yZSB7CisKK3R5cGVkZWYgY2hhciogKCpOUFBfR2V0TUlNRURlc2NyaXB0aW9u
UHJvY1B0cikoKTsKKworYm9vbCBQbHVnaW5QYWNrYWdlOjpmZXRjaEluZm8oKQoreworI2lmIGRl
ZmluZWQoWFBfVU5JWCkKKyAgICBjb25zdCBjaGFyICplcnJtc2c7CisKKyAgICBpZiAoIWxvYWQo
KSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgTlBQX0dldFZhbHVlUHJvY1B0ciBnZXRW
YWx1ZSA9IDA7CisgICAgTlBQX0dldE1JTUVEZXNjcmlwdGlvblByb2NQdHIgZ2V0TUlNRURlc2Ny
aXB0aW9uID0gMDsKKworICAgIGdldFZhbHVlID0gKE5QUF9HZXRWYWx1ZVByb2NQdHIpZGxzeW0o
bV9tb2R1bGUsICJOUF9HZXRWYWx1ZSIpOworICAgIGlmICgoZXJybXNnID0gZGxlcnJvcigpKSkg
eworICAgICAgICBFSU5BX0xPR19FUlIoIkNvdWxkIG5vdCBnZXQgc3ltYm9sIE5QX0dldFZhbHVl
OiAlcyIsIGVycm1zZyk7CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisKKyAgICBnZXRN
SU1FRGVzY3JpcHRpb24gPSAoTlBQX0dldE1JTUVEZXNjcmlwdGlvblByb2NQdHIpZGxzeW0obV9t
b2R1bGUsICJOUF9HZXRNSU1FRGVzY3JpcHRpb24iKTsKKyAgICBpZiAoKGVycm1zZyA9IGRsZXJy
b3IoKSkpIHsKKyAgICAgICAgRUlOQV9MT0dfRVJSKCJDb3VsZCBub3QgZ2V0IHN5bWJvbCBOUF9H
ZXRNSU1FRGVzY3JpcHRpb246ICVzIiwgZXJybXNnKTsKKyAgICAgICAgcmV0dXJuIGZhbHNlOwor
ICAgIH0KKworICAgIGNoYXIqIGJ1ZmZlciA9IDA7CisgICAgTlBFcnJvciBlcnIgPSBnZXRWYWx1
ZSgwLCBOUFBWcGx1Z2luTmFtZVN0cmluZywgKHZvaWQqKSAmYnVmZmVyKTsKKyAgICBpZiAoZXJy
ICE9IE5QRVJSX05PX0VSUk9SKQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgbV9uYW1lID0g
YnVmZmVyOworCisgICAgYnVmZmVyID0gMDsKKyAgICBlcnIgPSBnZXRWYWx1ZSgwLCBOUFBWcGx1
Z2luRGVzY3JpcHRpb25TdHJpbmcsICh2b2lkKikgJmJ1ZmZlcik7CisgICAgaWYgKGVyciAhPSBO
UEVSUl9OT19FUlJPUikKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIG1fZGVzY3JpcHRpb24g
PSBidWZmZXI7CisgICAgZGV0ZXJtaW5lTW9kdWxlVmVyc2lvbkZyb21EZXNjcmlwdGlvbigpOwor
CisgICAgU3RyaW5nIGRlc2NyaXB0aW9uID0gZ2V0TUlNRURlc2NyaXB0aW9uKCk7CisKKyAgICBW
ZWN0b3I8U3RyaW5nPiB0eXBlczsKKyAgICBkZXNjcmlwdGlvbi5zcGxpdChVQ2hhcignOycpLCBm
YWxzZSwgdHlwZXMpOworCisgICAgZm9yIChpbnQgaSA9IDA7IGkgPCB0eXBlcy5zaXplKCk7ICsr
aSkgeworICAgICAgICBWZWN0b3I8U3RyaW5nPiBtaW1lOworICAgICAgICB0eXBlc1tpXS5zcGxp
dChVQ2hhcignOicpLCB0cnVlLCBtaW1lKTsKKworICAgICAgICBpZiAobWltZS5zaXplKCkgPiAw
KSB7CisgICAgICAgICAgICBWZWN0b3I8U3RyaW5nPiBleHRzOworCisgICAgICAgICAgICBpZiAo
bWltZS5zaXplKCkgPiAxKQorICAgICAgICAgICAgICAgIG1pbWVbMV0uc3BsaXQoVUNoYXIoJywn
KSwgZmFsc2UsIGV4dHMpOworCisgICAgICAgICAgICBkZXRlcm1pbmVRdWlya3MobWltZVswXSk7
CisgICAgICAgICAgICBtX21pbWVUb0V4dGVuc2lvbnMuYWRkKG1pbWVbMF0sIGV4dHMpOworCisg
ICAgICAgICAgICBpZiAobWltZS5zaXplKCkgPiAyKQorICAgICAgICAgICAgICAgIG1fbWltZVRv
RGVzY3JpcHRpb25zLmFkZChtaW1lWzBdLCBtaW1lWzJdKTsKKyAgICAgICAgfQorICAgIH0KKwor
ICAgIHJldHVybiB0cnVlOworI2Vsc2UKKyAgICBub3RJbXBsZW1lbnRlZCgpOworICAgIHJldHVy
biB0cnVlOworI2VuZGlmCit9CisKK3VpbnQxNl90IFBsdWdpblBhY2thZ2U6Ok5QVmVyc2lvbigp
IGNvbnN0Cit7CisgICAgcmV0dXJuIE5QVkVSU19IQVNfUExVR0lOX1RIUkVBRF9BU1lOQ19DQUxM
OworfQorCitib29sIFBsdWdpblBhY2thZ2U6OmxvYWQoKQoreworICAgIGNoYXIqIGVycm1zZzsK
KworICAgIGlmIChtX2lzTG9hZGVkKSB7CisgICAgICAgIG1fbG9hZENvdW50Kys7CisgICAgICAg
IHJldHVybiB0cnVlOworICAgIH0KKworICAgIG1fbW9kdWxlID0gZGxvcGVuKG1fcGF0aC51dGY4
KCkuZGF0YSgpLCBSVExEX0xBWlkgfCBSVExEX0xPQ0FMKTsKKyAgICBpZiAoKGVycm1zZyA9IGRs
ZXJyb3IoKSkpIHsKKyAgICAgICAgRUlOQV9MT0dfV0FSTigiJXMgbm90IGxvYWRlZDogJXMiLCBt
X3BhdGgudXRmOCgpLmRhdGEoKSwgZXJybXNnKTsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAg
IH0KKworICAgIG1faXNMb2FkZWQgPSB0cnVlOworCisgICAgTlBfSW5pdGlhbGl6ZUZ1bmNQdHIg
aW5pdGlhbGl6ZTsKKyAgICBOUEVycm9yIGVycjsKKworICAgIGluaXRpYWxpemUgPSAoTlBfSW5p
dGlhbGl6ZUZ1bmNQdHIpZGxzeW0obV9tb2R1bGUsICJOUF9Jbml0aWFsaXplIik7CisgICAgaWYg
KChlcnJtc2cgPSBkbGVycm9yKCkpKSB7CisgICAgICAgIEVJTkFfTE9HX0VSUigiQ291bGQgbm90
IGdldCBzeW1ib2wgTlBfSW5pdGlhbGl6ZTogJXMiLCBlcnJtc2cpOworICAgICAgICBnb3RvIGFi
b3J0OworICAgIH0KKworICAgIG1fTlBQX1NodXRkb3duID0gKE5QUF9TaHV0ZG93blByb2NQdHIp
ZGxzeW0obV9tb2R1bGUsICJOUF9TaHV0ZG93biIpOworICAgIGlmICgoZXJybXNnID0gZGxlcnJv
cigpKSkgeworICAgICAgICBFSU5BX0xPR19FUlIoIkNvdWxkIG5vdCBnZXQgc3ltYm9sIE5QX1No
dXRkb3duOiAlcyIsIGVycm1zZyk7CisgICAgICAgIGdvdG8gYWJvcnQ7CisgICAgfQorCisgICAg
bWVtc2V0KCZtX3BsdWdpbkZ1bmNzLCAwLCBzaXplb2YobV9wbHVnaW5GdW5jcykpOworICAgIG1f
cGx1Z2luRnVuY3Muc2l6ZSA9IHNpemVvZihtX3BsdWdpbkZ1bmNzKTsKKworICAgIGluaXRpYWxp
emVCcm93c2VyRnVuY3MoKTsKKworI2lmIGRlZmluZWQoWFBfVU5JWCkKKyAgICBlcnIgPSBpbml0
aWFsaXplKCZtX2Jyb3dzZXJGdW5jcywgJm1fcGx1Z2luRnVuY3MpOworI2Vsc2UKKyAgICBlcnIg
PSBpbml0aWFsaXplKCZtX2Jyb3dzZXJGdW5jcyk7CisjZW5kaWYKKyAgICBpZiAoZXJyICE9IE5Q
RVJSX05PX0VSUk9SKQorICAgICAgICBnb3RvIGFib3J0OworCisgICAgbV9sb2FkQ291bnQrKzsK
KyAgICByZXR1cm4gdHJ1ZTsKKworYWJvcnQ6CisgICAgRUlOQV9MT0dfREJHKCJmYWlsZWQgdG8g
bG9hZCBwbHVnaW4sIHVubG9hZCBpdCB3aXRob3V0IHNodXR0aW5nIGl0IGRvd24uIik7CisgICAg
dW5sb2FkV2l0aG91dFNodXRkb3duKCk7CisgICAgcmV0dXJuIGZhbHNlOworfQorCit9CmRpZmYg
LS1naXQgYS9XZWJDb3JlL3BsdWdpbnMvZWZsL1BsdWdpblZpZXdFZmwuY3BwIGIvV2ViQ29yZS9w
bHVnaW5zL2VmbC9QbHVnaW5WaWV3RWZsLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAw
MDAwMDAwLi40MDY1ZGQ1Ci0tLSAvZGV2L251bGwKKysrIGIvV2ViQ29yZS9wbHVnaW5zL2VmbC9Q
bHVnaW5WaWV3RWZsLmNwcApAQCAtMCwwICsxLDUzMiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykg
MjAwNiwgMjAwNyBBcHBsZSBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0
IChDKSAyMDA4IENvbGxhYm9yYSBMdGQuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmln
aHQgKEMpIDIwMDggSU5kVCAtIEluc3RpdHV0byBOb2tpYSBkZSBUZWNub2xvZ2lhCisgKiBDb3B5
cmlnaHQgKEMpIDIwMDktMjAxMCBQcm9GVVNJT04gZW1iZWRkZWQgc3lzdGVtcworICogQ29weXJp
Z2h0IChDKSAyMDA5LTIwMTAgU2Ftc3VuZyBFbGVjdHJvbmljcworICoKKyAqIFJlZGlzdHJpYnV0
aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAor
ICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2lu
ZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJj
ZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIu
IFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUg
Y29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBv
dGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRI
SVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQ09NUFVURVIsIElOQy4gYGBBUyBJUycn
IEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRB
QklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NM
QUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBDT01QVVRFUiwgSU5DLiBPUgorICogQ09O
VFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUws
IFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdP
T0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJV
U0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAq
IE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1Ig
VE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBB
TlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklT
RUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJj
b25maWcuaCIKKyNpbmNsdWRlICJQbHVnaW5WaWV3LmgiCisKKyNpbmNsdWRlICJEb2N1bWVudC5o
IgorI2luY2x1ZGUgIkRvY3VtZW50TG9hZGVyLmgiCisjaW5jbHVkZSAiRWxlbWVudC5oIgorI2lu
Y2x1ZGUgIkZyYW1lLmgiCisjaW5jbHVkZSAiRnJhbWVMb2FkUmVxdWVzdC5oIgorI2luY2x1ZGUg
IkZyYW1lTG9hZGVyLmgiCisjaW5jbHVkZSAiRnJhbWVUcmVlLmgiCisjaW5jbHVkZSAiRnJhbWVW
aWV3LmgiCisjaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0LmgiCisjaW5jbHVkZSAiSFRNTE5hbWVz
LmgiCisjaW5jbHVkZSAiSFRNTFBsdWdJbkVsZW1lbnQuaCIKKyNpbmNsdWRlICJIb3N0V2luZG93
LmgiCisjaW5jbHVkZSAiSW1hZ2UuaCIKKyNpbmNsdWRlICJJbnRSZWN0LmgiCisjaW5jbHVkZSAi
SlNET01CaW5kaW5nLmgiCisjaW5jbHVkZSAiS2V5Ym9hcmRFdmVudC5oIgorI2luY2x1ZGUgIk1v
dXNlRXZlbnQuaCIKKyNpbmNsdWRlICJOb3RJbXBsZW1lbnRlZC5oIgorI2luY2x1ZGUgIlBhZ2Uu
aCIKKyNpbmNsdWRlICJQbGF0Zm9ybU1vdXNlRXZlbnQuaCIKKyNpbmNsdWRlICJQbGF0Zm9ybVdo
ZWVsRXZlbnQuaCIKKyNpbmNsdWRlICJQbHVnaW5EZWJ1Zy5oIgorI2luY2x1ZGUgIlBsdWdpblBh
Y2thZ2UuaCIKKyNpbmNsdWRlICJSZW5kZXJMYXllci5oIgorI2luY2x1ZGUgIlNjcmlwdENvbnRy
b2xsZXIuaCIKKyNpbmNsdWRlICJTZXR0aW5ncy5oIgorI2luY2x1ZGUgIlgxMUVtYmVkQ29udGFp
bmVyLmgiCisjaW5jbHVkZSAiWDExV2luZG93LmgiCisjaW5jbHVkZSAibnBydW50aW1lX2ltcGwu
aCIKKyNpbmNsdWRlICJydW50aW1lL0pTTG9jay5oIgorI2luY2x1ZGUgInJ1bnRpbWUvSlNWYWx1
ZS5oIgorI2luY2x1ZGUgInJ1bnRpbWVfcm9vdC5oIgorCisjaW5jbHVkZSA8RWNvcmVfRXZhcy5o
PgorI2luY2x1ZGUgPEVjb3JlX1guaD4KKyNpbmNsdWRlIDxFdmFzLmg+CisKKyNpbmNsdWRlIDx3
dGYvUmVmQ291bnRlZC5oPgorI2luY2x1ZGUgPHd0Zi9SZWZQdHIuaD4KKwordXNpbmcgSlNDOjpF
eGVjU3RhdGU7Cit1c2luZyBKU0M6OkludGVycHJldGVyOwordXNpbmcgSlNDOjpKU0xvY2s7Cit1
c2luZyBKU0M6OkpTT2JqZWN0OwordXNpbmcgSlNDOjpVU3RyaW5nOworCit1c2luZyBuYW1lc3Bh
Y2Ugc3RkOwordXNpbmcgbmFtZXNwYWNlIFdURjsKK3VzaW5nIG5hbWVzcGFjZSBXZWJDb3JlOwor
CituYW1lc3BhY2UgV2ViQ29yZSB7CisKK3VzaW5nIG5hbWVzcGFjZSBIVE1MTmFtZXM7CisKK2Jv
b2wgUGx1Z2luVmlldzo6ZGlzcGF0Y2hOUEV2ZW50KE5QRXZlbnQmIGV2ZW50KQoreworICAgIGlm
ICghbV9wbHVnaW4tPnBsdWdpbkZ1bmNzKCktPmV2ZW50KQorICAgICAgICByZXR1cm4gZmFsc2U7
CisKKyAgICBQbHVnaW5WaWV3OjpzZXRDdXJyZW50UGx1Z2luVmlldyh0aGlzKTsKKyAgICBKU0M6
OkpTTG9jazo6RHJvcEFsbExvY2tzIGRyb3BBbGxMb2NrcyhmYWxzZSk7CisgICAgc2V0Q2FsbGlu
Z1BsdWdpbih0cnVlKTsKKworICAgIGJvb2wgYWNjZXB0ZWQgPSBtX3BsdWdpbi0+cGx1Z2luRnVu
Y3MoKS0+ZXZlbnQobV9pbnN0YW5jZSwgJmV2ZW50KTsKKworICAgIHNldENhbGxpbmdQbHVnaW4o
ZmFsc2UpOworICAgIFBsdWdpblZpZXc6OnNldEN1cnJlbnRQbHVnaW5WaWV3KDApOworICAgIHJl
dHVybiBhY2NlcHRlZDsKK30KKwordm9pZCBQbHVnaW5WaWV3OjpoYWx0KCkKK3sKKyAgICBub3RJ
bXBsZW1lbnRlZCgpOworfQorCit2b2lkIFBsdWdpblZpZXc6OmhhbmRsZUZvY3VzSW5FdmVudCgp
Cit7CisgICAgbm90SW1wbGVtZW50ZWQoKTsKK30KKwordm9pZCBQbHVnaW5WaWV3OjpoYW5kbGVG
b2N1c091dEV2ZW50KCkKK3sKKyAgICBub3RJbXBsZW1lbnRlZCgpOworfQorCit2b2lkIFBsdWdp
blZpZXc6OnJlc3RhcnQoKQoreworICAgIG5vdEltcGxlbWVudGVkKCk7Cit9CisKK3ZvaWQgUGx1
Z2luVmlldzo6aGFuZGxlS2V5Ym9hcmRFdmVudChLZXlib2FyZEV2ZW50KikKK3sKKyAgICBub3RJ
bXBsZW1lbnRlZCgpOworfQorCit2b2lkIFBsdWdpblZpZXc6OmhhbmRsZU1vdXNlRXZlbnQoTW91
c2VFdmVudCogZXZlbnQpCit7CisgICAgTlBFdmVudCB4ZXZlbnQ7CisKKyNpZiBkZWZpbmVkKFhQ
X1VOSVgpCisgICAgSW50UmVjdCBwID0gc3RhdGljX2Nhc3Q8RnJhbWVWaWV3Kj4ocGFyZW50KCkp
LT5jb250ZW50c1RvU2NyZWVuKEludFJlY3QoMCwgMCwgZXZlbnQtPm9mZnNldFgoKSwgZXZlbnQt
Pm9mZnNldFkoKSkpOworICAgIGlmIChldmVudC0+dHlwZSgpID09IGV2ZW50TmFtZXMoKS5tb3Vz
ZW1vdmVFdmVudAorICAgICAgICB8fCBldmVudC0+dHlwZSgpID09IGV2ZW50TmFtZXMoKS5tb3Vz
ZW91dEV2ZW50CisgICAgICAgIHx8IGV2ZW50LT50eXBlKCkgPT0gZXZlbnROYW1lcygpLm1vdXNl
b3ZlckV2ZW50KSB7CisgICAgICAgIHhldmVudC50eXBlID0gTW90aW9uTm90aWZ5OworICAgICAg
ICB4ZXZlbnQueG1vdGlvbi54ID0gcC53aWR0aCgpOworICAgICAgICB4ZXZlbnQueG1vdGlvbi55
ID0gcC5oZWlnaHQoKTsKKyAgICB9IGVsc2UgaWYgKGV2ZW50LT50eXBlKCkgPT0gZXZlbnROYW1l
cygpLm1vdXNlZG93bkV2ZW50KSB7CisgICAgICAgIHhldmVudC50eXBlID0gQnV0dG9uUHJlc3M7
CisgICAgICAgIHhldmVudC54YnV0dG9uLnggPSBwLndpZHRoKCk7CisgICAgICAgIHhldmVudC54
YnV0dG9uLnkgPSBwLmhlaWdodCgpOworICAgICAgICB4ZXZlbnQueGJ1dHRvbi5idXR0b24gPSBl
dmVudC0+YnV0dG9uKCkgKyAxOyAvLyBET00gTW91c2VFdmVudCBjb3VudHMgZnJvbSAwLCBhbmQg
WEJ1dHRvbkV2ZW50IGZyb20gMQorICAgIH0gZWxzZSBpZiAoZXZlbnQtPnR5cGUoKSA9PSBldmVu
dE5hbWVzKCkubW91c2V1cEV2ZW50KSB7CisgICAgICAgIHhldmVudC50eXBlID0gQnV0dG9uUmVs
ZWFzZTsKKyAgICAgICAgeGV2ZW50LnhidXR0b24ueCA9IHAud2lkdGgoKTsKKyAgICAgICAgeGV2
ZW50LnhidXR0b24ueSA9IHAuaGVpZ2h0KCk7CisgICAgICAgIHhldmVudC54YnV0dG9uLmJ1dHRv
biA9IGV2ZW50LT5idXR0b24oKSArIDE7CisgICAgfSBlbHNlCisgICAgICAgIHJldHVybjsKKyNl
bmRpZgorCisgICAgZGlzcGF0Y2hOUEV2ZW50KHhldmVudCk7Cit9CisKKy8qCitib29sIFBsdWdp
blZpZXc6OmRpc3BhdGNoV2hlZWxFdmVudChOUEV2ZW50KiBldmVudCkKK3sKKyAgICBYRXZlbnQq
IHhldmVudCA9IChYRXZlbnQqKSBldmVudDsKKyAgICBFdmFzX0V2ZW50X01vdXNlX1doZWVsIGV2
OworCisgICAgZXYudGltZXN0YW1wID0geGV2ZW50LT54YnV0dG9uLnRpbWU7CisgICAgZXYubW9k
aWZpZXJzID0gMDsKKworICAgIHN3aXRjaCAoeGV2ZW50LT54YnV0dG9uLmJ1dHRvbikgeworICAg
IGNhc2UgNDogZXYuZGlyZWN0aW9uID0gMDsgZXYueiA9IC0xOyBicmVhazsKKyAgICBjYXNlIDU6
IGV2LmRpcmVjdGlvbiA9IDA7IGV2LnogPSAxOyBicmVhazsKKyAgICBjYXNlIDY6IGV2LmRpcmVj
dGlvbiA9IDE7IGV2LnogPSAtMTsgYnJlYWs7CisgICAgY2FzZSA3OiBldi5kaXJlY3Rpb24gPSAx
OyBldi56ID0gMTsgYnJlYWs7CisgICAgfQorCisgICAgZXYuY2FudmFzLnggPSBldi5vdXRwdXQu
eCA9IHhldmVudC0+eGJ1dHRvbi54OworICAgIGV2LmNhbnZhcy55ID0gZXYub3V0cHV0LnkgPSB4
ZXZlbnQtPnhidXR0b24ueTsKKworICAgIFBsYXRmb3JtV2hlZWxFdmVudCB3aGVlbCgmZXYsIElu
dFBvaW50KCkpOworCisgICAgcmV0dXJuIG1fcGFyZW50RnJhbWUtPmV2ZW50SGFuZGxlcigpLT5o
YW5kbGVXaGVlbEV2ZW50KHdoZWVsKTsKK30KKyovCisKK3ZvaWQgUGx1Z2luVmlldzo6dXBkYXRl
UGx1Z2luV2lkZ2V0KCkKK3sKKyAgICBpZiAoIXBhcmVudCgpIHx8ICFtX2lzV2luZG93ZWQpCisg
ICAgICAgIHJldHVybjsKKworICAgIEFTU0VSVChwYXJlbnQoKS0+aXNGcmFtZVZpZXcoKSk7Cisg
ICAgRnJhbWVWaWV3KiBmcmFtZVZpZXcgPSBzdGF0aWNfY2FzdDxGcmFtZVZpZXcqPihwYXJlbnQo
KSk7CisKKyAgICBJbnRSZWN0IG9sZFdpbmRvd1JlY3QgPSBtX3dpbmRvd1JlY3Q7CisgICAgSW50
UmVjdCBvbGRDbGlwUmVjdCA9IG1fY2xpcFJlY3Q7CisKKyAgICBtX3dpbmRvd1JlY3QgPSBJbnRS
ZWN0KGZyYW1lVmlldy0+Y29udGVudHNUb1NjcmVlbihJbnRSZWN0KGZyYW1lUmVjdCgpLmxvY2F0
aW9uKCksIGZyYW1lUmVjdCgpLnNpemUoKSkpKTsKKworICAgIG1fY2xpcFJlY3QgPSB3aW5kb3dD
bGlwUmVjdCgpOworICAgIG1fY2xpcFJlY3QubW92ZSgtbV93aW5kb3dSZWN0LngoKSwgLW1fd2lu
ZG93UmVjdC55KCkpOworCisgICAgaWYgKHBsYXRmb3JtUGx1Z2luV2lkZ2V0KCkpIHsKKyAgICAg
ICAgRXZhc19Db29yZCB4LCB5OworICAgICAgICBldmFzX29iamVjdF9nZW9tZXRyeV9nZXQocm9v
dCgpLT5ldmFzT2JqZWN0KCksICZ4LCAmeSwgMCwgMCk7CisgICAgICAgIEludFJlY3QgY2hpbGRS
ZWN0ID0gbV93aW5kb3dSZWN0OworICAgICAgICBjaGlsZFJlY3QubW92ZSh4LCB5KTsKKyAgICAg
ICAgcGxhdGZvcm1QbHVnaW5XaWRnZXQoKS0+c2V0RnJhbWVSZWN0KGNoaWxkUmVjdCk7CisgICAg
ICAgIHBsYXRmb3JtUGx1Z2luV2lkZ2V0KCktPnVwZGF0ZShtX2NsaXBSZWN0KTsKKyAgICB9Cit9
CisKK3ZvaWQgUGx1Z2luVmlldzo6c2V0Rm9jdXMoYm9vbCkKK3sKKyAgICBpZiAocGxhdGZvcm1Q
bHVnaW5XaWRnZXQoKSkKKyAgICAgICAgcGxhdGZvcm1QbHVnaW5XaWRnZXQoKS0+c2V0Rm9jdXMo
KTsKKworICAgIG1fZWxlbWVudC0+ZG9jdW1lbnQoKS0+c2V0Rm9jdXNlZE5vZGUobV9lbGVtZW50
KTsKKworICAgIFdpZGdldDo6c2V0Rm9jdXModHJ1ZSk7Cit9CisKK3ZvaWQgUGx1Z2luVmlldzo6
c2hvdygpCit7CisgICAgc2V0U2VsZlZpc2libGUodHJ1ZSk7CisKKyAgICBpZiAoaXNQYXJlbnRW
aXNpYmxlKCkgJiYgcGxhdGZvcm1QbHVnaW5XaWRnZXQoKSkKKyAgICAgICAgcGxhdGZvcm1QbHVn
aW5XaWRnZXQoKS0+c2V0VmlzaWJsZSh0cnVlKTsKKworICAgIFdpZGdldDo6c2hvdygpOworfQor
Cit2b2lkIFBsdWdpblZpZXc6OmhpZGUoKQoreworICAgIHNldFNlbGZWaXNpYmxlKGZhbHNlKTsK
KworICAgIGlmIChpc1BhcmVudFZpc2libGUoKSAmJiBwbGF0Zm9ybVBsdWdpbldpZGdldCgpKQor
ICAgICAgICBwbGF0Zm9ybVBsdWdpbldpZGdldCgpLT5zZXRWaXNpYmxlKGZhbHNlKTsKKworICAg
IFdpZGdldDo6aGlkZSgpOworfQorCit2b2lkIFBsdWdpblZpZXc6OnBhaW50KEdyYXBoaWNzQ29u
dGV4dCogY29udGV4dCwgY29uc3QgSW50UmVjdCYgcmVjdCkKK3sKKyAgICBpZiAoIW1faXNTdGFy
dGVkKSB7CisgICAgICAgIHBhaW50TWlzc2luZ1BsdWdpbkljb24oY29udGV4dCwgcmVjdCk7Cisg
ICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBpZiAoY29udGV4dC0+cGFpbnRpbmdEaXNhYmxl
ZCgpKQorICAgICAgICByZXR1cm47CisKKyAgICBzZXROUFdpbmRvd0lmTmVlZGVkKCk7CisKKyAg
ICBpZiAobV9pc1dpbmRvd2VkIHx8IGNvbnRleHQtPnBhaW50aW5nRGlzYWJsZWQoKSkKKyAgICAg
ICAgcmV0dXJuOworfQorCit2b2lkIFBsdWdpblZpZXc6OnNldFBhcmVudChTY3JvbGxWaWV3KiBw
YXJlbnQpCit7CisgICAgV2lkZ2V0OjpzZXRQYXJlbnQocGFyZW50KTsKKworICAgIGlmIChwYXJl
bnQpCisgICAgICAgIGluaXQoKTsKKyAgICBlbHNlIHsKKyAgICAgICAgaWYgKCFwbGF0Zm9ybVBs
dWdpbldpZGdldCgpKQorICAgICAgICAgICAgcmV0dXJuOworICAgIH0KK30KKwordm9pZCBQbHVn
aW5WaWV3OjpzZXROUFdpbmRvd1JlY3QoY29uc3QgSW50UmVjdCYgcmVjdCkKK3sKKyAgICBpZiAo
IW1faXNTdGFydGVkIHx8ICFwYXJlbnQoKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgSW50UG9p
bnQgcCA9IHN0YXRpY19jYXN0PEZyYW1lVmlldyo+KHBhcmVudCgpKS0+Y29udGVudHNUb1dpbmRv
dyhyZWN0LmxvY2F0aW9uKCkpOworICAgIG1fbnBXaW5kb3cueCA9IHAueCgpOworICAgIG1fbnBX
aW5kb3cueSA9IHAueSgpOworCisgICAgbV9ucFdpbmRvdy53aWR0aCA9IHJlY3Qud2lkdGgoKTsK
KyAgICBtX25wV2luZG93LmhlaWdodCA9IHJlY3QuaGVpZ2h0KCk7CisKKyAgICBtX25wV2luZG93
LmNsaXBSZWN0LmxlZnQgPSAwOworICAgIG1fbnBXaW5kb3cuY2xpcFJlY3QudG9wID0gMDsKKyAg
ICBtX25wV2luZG93LmNsaXBSZWN0LnJpZ2h0ID0gcmVjdC53aWR0aCgpOworICAgIG1fbnBXaW5k
b3cuY2xpcFJlY3QuYm90dG9tID0gcmVjdC5oZWlnaHQoKTsKKworICAgIGlmIChtX25wV2luZG93
LnggPCAwIHx8IG1fbnBXaW5kb3cueSA8IDAKKyAgICAgICAgfHwgbV9ucFdpbmRvdy53aWR0aCA8
PSAwIHx8IG1fbnBXaW5kb3cuaGVpZ2h0IDw9IDApCisgICAgICAgIHJldHVybjsKKworICAgIGlm
IChtX3BsdWdpbi0+cGx1Z2luRnVuY3MoKS0+c2V0d2luZG93KSB7CisgICAgICAgIFBsdWdpblZp
ZXc6OnNldEN1cnJlbnRQbHVnaW5WaWV3KHRoaXMpOworICAgICAgICBKU0M6OkpTTG9jazo6RHJv
cEFsbExvY2tzIGRyb3BBbGxMb2NrcyhmYWxzZSk7CisgICAgICAgIHNldENhbGxpbmdQbHVnaW4o
dHJ1ZSk7CisgICAgICAgIG1fcGx1Z2luLT5wbHVnaW5GdW5jcygpLT5zZXR3aW5kb3cobV9pbnN0
YW5jZSwgJm1fbnBXaW5kb3cpOworICAgICAgICBzZXRDYWxsaW5nUGx1Z2luKGZhbHNlKTsKKyAg
ICAgICAgUGx1Z2luVmlldzo6c2V0Q3VycmVudFBsdWdpblZpZXcoMCk7CisKKyAgICAgICAgaWYg
KCFtX2lzV2luZG93ZWQpCisgICAgICAgICAgICByZXR1cm47CisKKyAgICAgICAgQVNTRVJUKHBs
YXRmb3JtUGx1Z2luV2lkZ2V0KCkpOworICAgIH0KK30KKwordm9pZCBQbHVnaW5WaWV3OjpzZXRO
UFdpbmRvd0lmTmVlZGVkKCkKK3sKK30KKwordm9pZCBQbHVnaW5WaWV3OjpzZXRQYXJlbnRWaXNp
YmxlKGJvb2wgdmlzaWJsZSkKK3sKKyAgICBpZiAoaXNQYXJlbnRWaXNpYmxlKCkgPT0gdmlzaWJs
ZSkKKyAgICAgICAgcmV0dXJuOworCisgICAgV2lkZ2V0OjpzZXRQYXJlbnRWaXNpYmxlKHZpc2li
bGUpOworCisgICAgaWYgKGlzU2VsZlZpc2libGUoKSAmJiBwbGF0Zm9ybVBsdWdpbldpZGdldCgp
KQorICAgICAgICBwbGF0Zm9ybVBsdWdpbldpZGdldCgpLT5zZXRWaXNpYmxlKHZpc2libGUpOwor
fQorCitOUEVycm9yIFBsdWdpblZpZXc6OmhhbmRsZVBvc3RSZWFkRmlsZShWZWN0b3I8Y2hhcj4m
IGJ1ZmZlciwgdWludDMyX3QgbGVuLCBjb25zdCBjaGFyKiBidWYpCit7CisgICAgU3RyaW5nIGZp
bGVuYW1lKGJ1ZiwgbGVuKTsKKworICAgIGlmIChmaWxlbmFtZS5zdGFydHNXaXRoKCJmaWxlOi8v
LyIpKQorICAgICAgICBmaWxlbmFtZSA9IGZpbGVuYW1lLnN1YnN0cmluZyg4KTsKKworICAgIGlm
ICghZmlsZUV4aXN0cyhmaWxlbmFtZSkpCisgICAgICAgIHJldHVybiBOUEVSUl9GSUxFX05PVF9G
T1VORDsKKworICAgIEZJTEUqIGZpbGVIYW5kbGUgPSBmb3BlbihmaWxlbmFtZS51dGY4KCkuZGF0
YSgpLCAiciIpOworCisgICAgaWYgKCFmaWxlSGFuZGxlKQorICAgICAgICByZXR1cm4gTlBFUlJf
RklMRV9OT1RfRk9VTkQ7CisKKyAgICBpbnQgYnl0ZXNSZWFkID0gZnJlYWQoYnVmZmVyLmRhdGEo
KSwgMSwgMCwgZmlsZUhhbmRsZSk7CisKKyAgICBmY2xvc2UoZmlsZUhhbmRsZSk7CisKKyAgICBp
ZiAoYnl0ZXNSZWFkIDw9IDApCisgICAgICAgIHJldHVybiBOUEVSUl9GSUxFX05PVF9GT1VORDsK
KworICAgIHJldHVybiBOUEVSUl9OT19FUlJPUjsKK30KKworYm9vbCBQbHVnaW5WaWV3OjpwbGF0
Zm9ybUdldFZhbHVlU3RhdGljKE5QTlZhcmlhYmxlIHZhcmlhYmxlLCB2b2lkKiB2YWx1ZSwgTlBF
cnJvciogcmVzdWx0KQoreworICAgIHN3aXRjaCAodmFyaWFibGUpIHsKKyAgICBjYXNlIE5QTlZU
b29sa2l0OgorICAgICAgICAqc3RhdGljX2Nhc3Q8dWludDMyX3QqPih2YWx1ZSkgPSAwOworICAg
ICAgICAqcmVzdWx0ID0gTlBFUlJfTk9fRVJST1I7CisgICAgICAgIHJldHVybiB0cnVlOworCisg
ICAgY2FzZSBOUE5WU3VwcG9ydHNYRW1iZWRCb29sOgorICAgICAgICAqc3RhdGljX2Nhc3Q8TlBC
b29sKj4odmFsdWUpID0gdHJ1ZTsKKyAgICAgICAgKnJlc3VsdCA9IE5QRVJSX05PX0VSUk9SOwor
ICAgICAgICByZXR1cm4gdHJ1ZTsKKworICAgIGNhc2UgTlBOVmphdmFzY3JpcHRFbmFibGVkQm9v
bDoKKyAgICAgICAgKnN0YXRpY19jYXN0PE5QQm9vbCo+KHZhbHVlKSA9IHRydWU7CisgICAgICAg
ICpyZXN1bHQgPSBOUEVSUl9OT19FUlJPUjsKKyAgICAgICAgcmV0dXJuIHRydWU7CisKKyAgICBj
YXNlIE5QTlZTdXBwb3J0c1dpbmRvd2xlc3M6CisgICAgICAgICpzdGF0aWNfY2FzdDxOUEJvb2wq
Pih2YWx1ZSkgPSBmYWxzZTsKKyAgICAgICAgKnJlc3VsdCA9IE5QRVJSX05PX0VSUk9SOworICAg
ICAgICByZXR1cm4gdHJ1ZTsKKworICAgIGRlZmF1bHQ6CisgICAgICAgIHJldHVybiBmYWxzZTsK
KyAgICB9Cit9CisKK2Jvb2wgUGx1Z2luVmlldzo6cGxhdGZvcm1HZXRWYWx1ZShOUE5WYXJpYWJs
ZSB2YXJpYWJsZSwgdm9pZCogdmFsdWUsIE5QRXJyb3IqIHJlc3VsdCkKK3sKKyAgICBzd2l0Y2gg
KHZhcmlhYmxlKSB7CisgICAgY2FzZSBOUE5WeERpc3BsYXk6CisgICAgICAgIGlmIChwbGF0Zm9y
bVBsdWdpbldpZGdldCgpKQorICAgICAgICAgICAgKih2b2lkICoqKXZhbHVlID0gcGxhdGZvcm1Q
bHVnaW5XaWRnZXQoKS0+eDExSW5mbygpLT5kaXNwbGF5KCk7CisgICAgICAgIGVsc2UKKyAgICAg
ICAgICAgICoodm9pZCAqKil2YWx1ZSA9IChEaXNwbGF5KikgZWNvcmVfeF9kaXNwbGF5X2dldCgp
OworICAgICAgICAqcmVzdWx0ID0gTlBFUlJfTk9fRVJST1I7CisgICAgICAgIHJldHVybiB0cnVl
OworCisgICAgY2FzZSBOUE5WeHRBcHBDb250ZXh0OgorICAgICAgICAqcmVzdWx0ID0gTlBFUlJf
R0VORVJJQ19FUlJPUjsKKyAgICAgICAgcmV0dXJuIHRydWU7CisKKyNpZiBFTkFCTEUoTkVUU0NB
UEVfUExVR0lOX0FQSSkKKyAgICBjYXNlIE5QTlZXaW5kb3dOUE9iamVjdDogeworICAgICAgICBp
ZiAobV9pc0phdmFTY3JpcHRQYXVzZWQpIHsKKyAgICAgICAgICAgICpyZXN1bHQgPSBOUEVSUl9H
RU5FUklDX0VSUk9SOworICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgIH0KKworICAg
ICAgICBOUE9iamVjdCogd2luZG93U2NyaXB0T2JqZWN0ID0gbV9wYXJlbnRGcmFtZS0+c2NyaXB0
KCktPndpbmRvd1NjcmlwdE5QT2JqZWN0KCk7CisKKyAgICAgICAgLy8gUmV0dXJuIHZhbHVlIGlz
IGV4cGVjdGVkIHRvIGJlIHJldGFpbmVkLCBhcyBkZXNjcmliZWQgaGVyZTogPGh0dHA6Ly93d3cu
bW96aWxsYS5vcmcvcHJvamVjdHMvcGx1Z2luL25wcnVudGltZS5odG1sPgorICAgICAgICBpZiAo
d2luZG93U2NyaXB0T2JqZWN0KQorICAgICAgICAgICAgX05QTl9SZXRhaW5PYmplY3Qod2luZG93
U2NyaXB0T2JqZWN0KTsKKworICAgICAgICB2b2lkKiogdiA9ICh2b2lkKiopdmFsdWU7CisgICAg
ICAgICp2ID0gd2luZG93U2NyaXB0T2JqZWN0OworCisgICAgICAgICpyZXN1bHQgPSBOUEVSUl9O
T19FUlJPUjsKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgfQorCisgICAgY2FzZSBOUE5WUGx1
Z2luRWxlbWVudE5QT2JqZWN0OiB7CisgICAgICAgIGlmIChtX2lzSmF2YVNjcmlwdFBhdXNlZCkg
eworICAgICAgICAgICAgKnJlc3VsdCA9IE5QRVJSX0dFTkVSSUNfRVJST1I7CisgICAgICAgICAg
ICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgfQorCisgICAgICAgIE5QT2JqZWN0KiBwbHVnaW5TY3Jp
cHRPYmplY3QgPSAwOworCisgICAgICAgIGlmIChtX2VsZW1lbnQtPmhhc1RhZ05hbWUoYXBwbGV0
VGFnKSB8fCBtX2VsZW1lbnQtPmhhc1RhZ05hbWUoZW1iZWRUYWcpIHx8IG1fZWxlbWVudC0+aGFz
VGFnTmFtZShvYmplY3RUYWcpKQorICAgICAgICAgICAgcGx1Z2luU2NyaXB0T2JqZWN0ID0gc3Rh
dGljX2Nhc3Q8SFRNTFBsdWdJbkVsZW1lbnQqPihtX2VsZW1lbnQpLT5nZXROUE9iamVjdCgpOwor
CisgICAgICAgIC8vIFJldHVybiB2YWx1ZSBpcyBleHBlY3RlZCB0byBiZSByZXRhaW5lZCwgYXMg
ZGVzY3JpYmVkIGhlcmU6IDxodHRwOi8vd3d3Lm1vemlsbGEub3JnL3Byb2plY3RzL3BsdWdpbi9u
cHJ1bnRpbWUuaHRtbD4KKyAgICAgICAgaWYgKHBsdWdpblNjcmlwdE9iamVjdCkKKyAgICAgICAg
ICAgIF9OUE5fUmV0YWluT2JqZWN0KHBsdWdpblNjcmlwdE9iamVjdCk7CisKKyAgICAgICAgdm9p
ZCoqIHYgPSAodm9pZCoqKXZhbHVlOworICAgICAgICAqdiA9IHBsdWdpblNjcmlwdE9iamVjdDsK
KworICAgICAgICAqcmVzdWx0ID0gTlBFUlJfTk9fRVJST1I7CisgICAgICAgIHJldHVybiB0cnVl
OworICAgIH0KKyNlbmRpZgorCisgICAgY2FzZSBOUE5WbmV0c2NhcGVXaW5kb3c6IHsKKyAgICAg
ICAgdm9pZCogdyA9IHJlaW50ZXJwcmV0X2Nhc3Q8dm9pZCo+KHZhbHVlKTsKKyAgICAgICAgRXZh
c19PYmplY3QqIHdpZGdldCA9IG1fcGFyZW50RnJhbWUtPnZpZXcoKS0+aG9zdFdpbmRvdygpLT5w
bGF0Zm9ybVBhZ2VDbGllbnQoKTsKKyAgICAgICAgRXZhcyogZXZhcyA9IGV2YXNfb2JqZWN0X2V2
YXNfZ2V0KHdpZGdldCk7CisgICAgICAgIEVjb3JlX0V2YXMqIGVlID0gZWNvcmVfZXZhc19lY29y
ZV9ldmFzX2dldChldmFzKTsKKyAgICAgICAgKigoWElEICopdykgPSAoV2luZG93KSBlY29yZV9l
dmFzX3dpbmRvd19nZXQoZWUpOworICAgICAgICAqcmVzdWx0ID0gTlBFUlJfTk9fRVJST1I7Cisg
ICAgICAgIHJldHVybiB0cnVlOworICAgIH0KKworICAgIGNhc2UgTlBOVlRvb2xraXQ6CisgICAg
ICAgIGlmIChtX3BsdWdpbi0+cXVpcmtzKCkuY29udGFpbnMoUGx1Z2luUXVpcmtSZXF1aXJlc0d0
a1Rvb2xLaXQpKSB7CisgICAgICAgICAgICAqKCh1aW50MzJfdCAqKXZhbHVlKSA9IDI7CisgICAg
ICAgICAgICAqcmVzdWx0ID0gTlBFUlJfTk9fRVJST1I7CisgICAgICAgICAgICByZXR1cm4gdHJ1
ZTsKKyAgICAgICAgfQorICAgICAgICAvLyBmYWxsIHRocm91Z2gKKyAgICBkZWZhdWx0OgorICAg
ICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorfQorCit2b2lkIFBsdWdpblZpZXc6OmludmFsaWRh
dGVSZWN0KGNvbnN0IEludFJlY3QmIHJlY3QpCit7CisgICAgaWYgKHBsYXRmb3JtUGx1Z2luV2lk
Z2V0KCkpIHsKKyAgICAgICAgcGxhdGZvcm1QbHVnaW5XaWRnZXQoKS0+dXBkYXRlKHJlY3QpOwor
ICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgaW52YWxpZGF0ZVdpbmRvd2xlc3NQbHVnaW5S
ZWN0KHJlY3QpOworfQorCit2b2lkIFBsdWdpblZpZXc6OmludmFsaWRhdGVSZWN0KE5QUmVjdCog
cmVjdCkKK3sKKyAgICBpZiAoIXJlY3QpIHsKKyAgICAgICAgaW52YWxpZGF0ZSgpOworICAgICAg
ICByZXR1cm47CisgICAgfQorCisgICAgSW50UmVjdCByKHJlY3QtPmxlZnQsIHJlY3QtPnRvcCwg
cmVjdC0+cmlnaHQgLSByZWN0LT5sZWZ0LCByZWN0LT5ib3R0b20gLSByZWN0LT50b3ApOworCisg
ICAgaW52YWxpZGF0ZVJlY3Qocik7Cit9CisKK3ZvaWQgUGx1Z2luVmlldzo6aW52YWxpZGF0ZVJl
Z2lvbihOUFJlZ2lvbiByZWdpb24pCit7CisgICAgbm90SW1wbGVtZW50ZWQoKTsKK30KKwordm9p
ZCBQbHVnaW5WaWV3Ojpmb3JjZVJlZHJhdygpCit7CisgICAgbm90SW1wbGVtZW50ZWQoKTsKK30K
KworYm9vbCBQbHVnaW5WaWV3OjpwbGF0Zm9ybVN0YXJ0KCkKK3sKKyAgICBBU1NFUlQobV9pc1N0
YXJ0ZWQpOworICAgIEFTU0VSVChtX3N0YXR1cyA9PSBQbHVnaW5TdGF0dXNMb2FkZWRTdWNjZXNz
ZnVsbHkpOworCisgICAgaWYgKG1fcGx1Z2luLT5wbHVnaW5GdW5jcygpLT5nZXR2YWx1ZSkgewor
ICAgICAgICBQbHVnaW5WaWV3OjpzZXRDdXJyZW50UGx1Z2luVmlldyh0aGlzKTsKKyAgICAgICAg
SlNDOjpKU0xvY2s6OkRyb3BBbGxMb2NrcyBkcm9wQWxsTG9ja3MoZmFsc2UpOworICAgICAgICBz
ZXRDYWxsaW5nUGx1Z2luKHRydWUpOworICAgICAgICBtX3BsdWdpbi0+cGx1Z2luRnVuY3MoKS0+
Z2V0dmFsdWUobV9pbnN0YW5jZSwgTlBQVnBsdWdpbk5lZWRzWEVtYmVkLCAmbV9uZWVkc1hFbWJl
ZCk7CisgICAgICAgIHNldENhbGxpbmdQbHVnaW4oZmFsc2UpOworICAgICAgICBQbHVnaW5WaWV3
OjpzZXRDdXJyZW50UGx1Z2luVmlldygwKTsKKyAgICB9CisKKyAgICBpZiAobV9uZWVkc1hFbWJl
ZCkgeworICAgICAgICBFdmFzX09iamVjdCogbyA9IG1fcGFyZW50RnJhbWUtPnZpZXcoKS0+aG9z
dFdpbmRvdygpLT5wbGF0Zm9ybVBhZ2VDbGllbnQoKTsKKyAgICAgICAgRXZhcyogZXZhcyA9IGV2
YXNfb2JqZWN0X2V2YXNfZ2V0KG8pOworICAgICAgICBzZXRQbGF0Zm9ybVBsdWdpbldpZGdldChu
ZXcgWDExRW1iZWRDb250YWluZXIoZXZhcywgdGhpcykpOworICAgIH0gZWxzZSB7CisgICAgICAg
IG5vdEltcGxlbWVudGVkKCk7CisgICAgICAgIG1fc3RhdHVzID0gUGx1Z2luU3RhdHVzQ2FuTm90
TG9hZFBsdWdpbjsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKworICAgIHNob3coKTsK
KyAgICBOUFNldFdpbmRvd0NhbGxiYWNrU3RydWN0KiB3c2kgPSBuZXcgTlBTZXRXaW5kb3dDYWxs
YmFja1N0cnVjdCgpOworCisgICAgd3NpLT50eXBlID0gMDsKKworICAgIFgxMUluZm8qIGluZm8g
PSBwbGF0Zm9ybVBsdWdpbldpZGdldCgpLT54MTFJbmZvKCk7CisKKyAgICB3c2ktPmRpc3BsYXkg
PSBpbmZvLT5kaXNwbGF5KCk7CisgICAgd3NpLT52aXN1YWwgPSBpbmZvLT52aXN1YWwoKTsKKyAg
ICB3c2ktPmRlcHRoID0gaW5mby0+ZGVwdGgoKTsKKyAgICB3c2ktPmNvbG9ybWFwID0gaW5mby0+
Y29sb3JtYXAoKTsKKyAgICBtX25wV2luZG93LndzX2luZm8gPSB3c2k7CisKKyAgICBtX25wV2lu
ZG93LnR5cGUgPSBOUFdpbmRvd1R5cGVXaW5kb3c7CisgICAgbV9ucFdpbmRvdy53aW5kb3cgPSAo
dm9pZCopIHBsYXRmb3JtUGx1Z2luV2lkZ2V0KCktPndpbklkKCk7CisKKyAgICBpZiAoIShtX3Bs
dWdpbi0+cXVpcmtzKCkuY29udGFpbnMoUGx1Z2luUXVpcmtEZWZlckZpcnN0U2V0V2luZG93Q2Fs
bCkpKQorICAgICAgICBzZXROUFdpbmRvd1JlY3QoZnJhbWVSZWN0KCkpOworCisgICAgcmV0dXJu
IHRydWU7Cit9CisKK3ZvaWQgUGx1Z2luVmlldzo6cGxhdGZvcm1EZXN0cm95KCkKK3sKK30KKwor
fSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9wbHVnaW5zL2VmbC9Y
MTFFbWJlZENvbnRhaW5lci5jcHAgYi9XZWJDb3JlL3BsdWdpbnMvZWZsL1gxMUVtYmVkQ29udGFp
bmVyLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41YTkxMzc1Ci0tLSAv
ZGV2L251bGwKKysrIGIvV2ViQ29yZS9wbHVnaW5zL2VmbC9YMTFFbWJlZENvbnRhaW5lci5jcHAK
QEAgLTAsMCArMSwzNTYgQEAKKy8qCisgICAgQ29weXJpZ2h0IChDKSAyMDA5IElOZFQgLSBJbnN0
aXR1dG8gTm9raWEgZGUgVGVjbm9sb2dpYQorICAgIENvcHlyaWdodCAoQykgMjAwOS0yMDEwIFBy
b0ZVU0lPTiBlbWJlZGRlZCBzeXN0ZW1zCisgICAgQ29weXJpZ2h0IChDKSAyMDA5LTIwMTAgU2Ft
c3VuZyBFbGVjdHJvbmljcworCisgICAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlv
dSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICAgIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVy
bXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgICAgTGljZW5zZSBhcyBwdWJs
aXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgICAgdmVyc2lv
biAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9u
LgorCisgICAgVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQg
d2lsbCBiZSB1c2VmdWwsCisgICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2
ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAgICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVT
UyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICAgIExpYnJhcnkgR2Vu
ZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorCisgICAgWW91IHNob3VsZCBo
YXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGlj
ZW5zZQorICAgIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5M
SUIuICBJZiBub3QsIHdyaXRlIHRvCisgICAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwg
SW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKKyAgICBCb3N0b24sIE1BIDAy
MTEwLTEzMDEsIFVTQS4KKyovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJYMTFF
bWJlZENvbnRhaW5lci5oIgorCisjaW5jbHVkZSAiUGx1Z2luVmlldy5oIgorI2luY2x1ZGUgIlgx
MVdpbmRvdy5oIgorCisjaW5jbHVkZSA8WDExL1guaD4KKyNpbmNsdWRlIDxYMTEvWGxpYi5oPgor
CisjZGVmaW5lIEtleVByZXNzICAgICAyCisjZGVmaW5lIEtleVJlbGVhc2UgICAzCisjZGVmaW5l
IEZvY3VzSW4gICAgICA5CisjZGVmaW5lIEZvY3VzT3V0ICAgIDEwCisKKyNkZWZpbmUgQVRPTShu
YW1lKSBlY29yZV94X2F0b21fZ2V0KCNuYW1lKQorCit1c2luZyBuYW1lc3BhY2Ugc3RkOwordXNp
bmcgbmFtZXNwYWNlIFdURjsKK3VzaW5nIG5hbWVzcGFjZSBXZWJDb3JlOworCitjbGFzcyBYMTFF
bWJlZEV2ZW50SGFuZGxlcjsKKworc3RhdGljIHVuc2lnbmVkIGludCB4ZW1iZWRWZXJzaW9uID0g
MDsKK3N0YXRpYyB1bnNpZ25lZCBpbnQgeGVtYmVkTWFwcGVkID0gKDEgPDwgMCk7CitzdGF0aWMg
dm9pZCBzZW5kWEVtYmVkTWVzc2FnZShXaW5JZCAsIERpc3BsYXkqICwgbG9uZyAsIGxvbmcgZGV0
YWlsID0gMCwgbG9uZyBkYXRhMSA9IDAsIGxvbmcgZGF0YTIgPSAwKTsKKworZW51bSBYMTFFbWJl
ZE1lc3NhZ2VUeXBlIHsKKyAgICBYRU1CRURfRU1CRURERURfTk9USUZZID0gMCwKKyAgICBYRU1C
RURfV0lORE9XX0FDVElWQVRFID0gMSwKKyAgICBYRU1CRURfV0lORE9XX0RFQUNUSVZBVEUgPSAy
LAorICAgIFhFTUJFRF9SRVFVRVNUX0ZPQ1VTID0gMywKKyAgICBYRU1CRURfRk9DVVNfSU4gPSA0
LAorICAgIFhFTUJFRF9GT0NVU19PVVQgPSA1LAorICAgIFhFTUJFRF9GT0NVU19ORVhUID0gNiwK
KyAgICBYRU1CRURfRk9DVVNfUFJFViA9IDcsCisgICAgLyogOC05IHdlcmUgdXNlZCBmb3IgWEVN
QkVEX0dSQUJfS0VZL1hFTUJFRF9VTkdSQUJfS0VZICovCisgICAgWEVNQkVEX01PREFMSVRZX09O
ID0gMTAsCisgICAgWEVNQkVEX01PREFMSVRZX09GRiA9IDExLAorICAgIFhFTUJFRF9SRUdJU1RF
Ul9BQ0NFTEVSQVRPUiA9IDEyLAorICAgIFhFTUJFRF9VTlJFR0lTVEVSX0FDQ0VMRVJBVE9SID0g
MTMsCisgICAgWEVNQkVEX0FDVElWQVRFX0FDQ0VMRVJBVE9SID0gMTQKK307CisKK2VudW0gWDEx
RW1iZWRGb2N1c0luRGV0YWlsIHsKKyAgICBYRU1CRURfRk9DVVNfQ1VSUkVOVCA9IDAsCisgICAg
WEVNQkVEX0ZPQ1VTX0ZJUlNUID0gMSwKKyAgICBYRU1CRURfRk9DVVNfTEFTVCA9IDIKK307CisK
K1gxMUVtYmVkQ29udGFpbmVyOjpYMTFFbWJlZENvbnRhaW5lcihFdmFzKiBldmFzLCBQbHVnaW5W
aWV3KiB2aWV3KQorICAgIDogWDExV2luZG93KGV2YXMpCisgICAgLCBtX2FjdGl2ZShmYWxzZSkK
KyAgICAsIG1fY2xpZW50KDApCisgICAgLCBtX3BsdWdpblZpZXcodmlldykKKyAgICAsIG1fY2xp
ZW50V2luZG93KDApCit7CisgICAgLy8gaW1wbGVtZW50IHRoZSBmb2N1cyBwcm94eSBhcyBpbiB0
aGUgc3BlYywgb2Zmc2NyZWVuCisgICAgbV9mb2N1c1Byb3h5LnNldChuZXcgWDExV2luZG93KHdp
bklkKCksIEludFJlY3QoLTEsIC0xLCAxLCAxKSkpOworICAgIG1fZm9jdXNQcm94eS0+aW5zdGFs
bEV2ZW50RmlsdGVyKHRoaXMpOworICAgIG1fZm9jdXNQcm94eS0+c2hvdygpOworCisgICAgZWNv
cmVfeF93aW5kb3dfYmFja2dyb3VuZF9jb2xvcl9zZXQod2luSWQoKSwgNjU1MzUsIDY1NTM1LCA2
NTUzNSk7CisKKyAgICAvLyBDaGFuZ2UgdGhlIGV2ZW50IGZpbHRlciBmb3IgdGhlIGV2ZW50cyB3
ZSB3b3VsZCBsaWtlIHRvIHJlY2VpdmUKKyAgICBYU2VsZWN0SW5wdXQoeDExSW5mbygpLT5kaXNw
bGF5KCksIHdpbklkKCksCisgICAgICAgICAgICBLZXlQcmVzc01hc2sgfCBLZXlSZWxlYXNlTWFz
aworICAgICAgICAgICAgfCBCdXR0b25QcmVzc01hc2sgfCBCdXR0b25SZWxlYXNlTWFzayB8IEJ1
dHRvbk1vdGlvbk1hc2sKKyAgICAgICAgICAgIHwgS2V5bWFwU3RhdGVNYXNrCisgICAgICAgICAg
ICB8IFBvaW50ZXJNb3Rpb25NYXNrCisgICAgICAgICAgICB8IEVudGVyV2luZG93TWFzayB8IExl
YXZlV2luZG93TWFzaworICAgICAgICAgICAgfCBGb2N1c0NoYW5nZU1hc2sKKyAgICAgICAgICAg
IHwgRXhwb3N1cmVNYXNrCisgICAgICAgICAgICB8IFN0cnVjdHVyZU5vdGlmeU1hc2sKKyAgICAg
ICAgICAgIHwgU3Vic3RydWN0dXJlTm90aWZ5TWFzayk7CisKKyAgICBYRmx1c2goeDExSW5mbygp
LT5kaXNwbGF5KCkpOworfQorCitYMTFFbWJlZENvbnRhaW5lcjo6flgxMUVtYmVkQ29udGFpbmVy
KCkKK3sKKyAgICBzZXRWaXNpYmxlKGZhbHNlKTsKKworICAgIGlmIChjbGllbnQoKSkgeworICAg
ICAgICBYVW5tYXBXaW5kb3coeDExSW5mbygpLT5kaXNwbGF5KCksIGNsaWVudCgpKTsKKyAgICAg
ICAgWFJlcGFyZW50V2luZG93KHgxMUluZm8oKS0+ZGlzcGxheSgpLCBjbGllbnQoKSwgcm9vdFdp
bmRvdygpLCAwLCAwKTsKKyAgICB9Cit9CisKK3ZvaWQgWDExRW1iZWRDb250YWluZXI6Om1vdmVJ
bnB1dEZvY3VzVG9Qcm94eSgpCit7CisgICAgaWYgKGhhc0ZvY3VzKCkpCisgICAgICAgIHJldHVy
bjsKKworICAgIFhTZXRJbnB1dEZvY3VzKHgxMUluZm8oKS0+ZGlzcGxheSgpLCBtX2ZvY3VzUHJv
eHktPndpbklkKCksIFJldmVydFRvUGFyZW50LCB4MTFJbmZvKCktPngxMVRpbWUoKSk7Cit9CisK
K3ZvaWQgWDExRW1iZWRDb250YWluZXI6OmFjY2VwdChXaW5JZCBjbGllbnQpCit7CisgICAgc2V0
Q2xpZW50KGNsaWVudCk7CisgICAgbV9jbGllbnRXaW5kb3ctPmluc3RhbGxFdmVudEZpbHRlcih0
aGlzKTsKKworICAgIFhBZGRUb1NhdmVTZXQoeDExSW5mbygpLT5kaXNwbGF5KCksIGNsaWVudCk7
IC8vIGF2b2lkIGNsaWVudCBmcm9tIGNyYXNoaW5nIGFsb25nIHdpdGggdXMKKworICAgIHVuc2ln
bmVkIGludCB2ZXJzaW9uID0gMDsgLy8gbGF0ZXN0IHZlcnNpb24gb2YgdGhlIHNwZWMKKworICAg
IGludCBuaXRlbXMgPSAwOworICAgIHVuc2lnbmVkIGNoYXIgKmRhdGEgPSAwOworICAgIHVuc2ln
bmVkIGludCBjbGllbnRWZXJzaW9uID0gMDsKKworICAgIHN0YXRpYyBBdG9tIGF0b20gPSBBVE9N
KF9YRU1CRURfSU5GTyk7CisKKyAgICBpZiAoZWNvcmVfeF93aW5kb3dfcHJvcF9wcm9wZXJ0eV9n
ZXQoY2xpZW50LCBhdG9tLCBhdG9tLCAyLCAmZGF0YSwgJm5pdGVtcykpIHsKKyAgICAgICAgdW5z
aWduZWQgaW50ICpwcm9wID0gKHVuc2lnbmVkIGludCAqKSBkYXRhOworCisgICAgICAgIGlmIChu
aXRlbXMgPj0gMikKKyAgICAgICAgICAgIGNsaWVudFZlcnNpb24gPSBwcm9wWzBdOworICAgICAg
ICBmcmVlKGRhdGEpOworICAgIH0KKworICAgIC8vIEFzayB0aGUgY2xpZW50IGZvciBpdHMgbWlu
aW11bSBzaXplLgorICAgIEludFNpemUgbWluU2l6ZUhpbnQ7CisgICAgWFNpemVIaW50cyBzaXpl
SGludDsKKyAgICBsb25nIHVudXNlZDsKKyAgICBpZiAoWEdldFdNTm9ybWFsSGludHMoeDExSW5m
bygpLT5kaXNwbGF5KCksIGNsaWVudCwgJnNpemVIaW50LCAmdW51c2VkKSAmJiAoc2l6ZUhpbnQu
ZmxhZ3MgJiBQTWluU2l6ZSkpCisgICAgICAgIG1pblNpemVIaW50ID0gSW50U2l6ZShzaXplSGlu
dC5taW5fd2lkdGgsIHNpemVIaW50Lm1pbl9oZWlnaHQpOworICAgIGVsc2UKKyAgICAgICAgbWlu
U2l6ZUhpbnQgPSBJbnRTaXplKDAsIDApOworCisgICAgdW5zaWduZWQgaW50IG1pblZlcnNpb24g
PSB2ZXJzaW9uID4gY2xpZW50VmVyc2lvbiA/IGNsaWVudFZlcnNpb24gOiB2ZXJzaW9uOworCisg
ICAgc2VuZFhFbWJlZE1lc3NhZ2UoY2xpZW50LCB4MTFJbmZvKCktPmRpc3BsYXkoKSwgWEVNQkVE
X0VNQkVEREVEX05PVElGWSwgMCwgd2luSWQoKSwgbWluVmVyc2lvbik7CisKKyAgICBYTWFwV2lu
ZG93KHgxMUluZm8oKS0+ZGlzcGxheSgpLCBjbGllbnQpOworCisgICAgcmVzaXplKG1heChzaXpl
KCkud2lkdGgoKSwgbWluU2l6ZUhpbnQud2lkdGgoKSksIG1heChzaXplKCkuaGVpZ2h0KCksIG1p
blNpemVIaW50LmhlaWdodCgpKSk7Cit9CisKK3ZvaWQgWDExRW1iZWRDb250YWluZXI6OnJlamVj
dChXaW5JZCBjbGllbnQpCit7CisgICAgWFJlbW92ZUZyb21TYXZlU2V0KHgxMUluZm8oKS0+ZGlz
cGxheSgpLCBjbGllbnQpOworICAgIFhSZXBhcmVudFdpbmRvdyh4MTFJbmZvKCktPmRpc3BsYXko
KSwgY2xpZW50LCByb290V2luZG93KCksIDAsIDApOworfQorCit2b2lkIFgxMUVtYmVkQ29udGFp
bmVyOjpzaG93KCkKK3sKKyAgICBYMTFXaW5kb3c6OnNob3coKTsKKworICAgIC8vIHNpZ25hbCBt
YXAKKyAgICBpZiAoY2xpZW50KCkpIHsKKyAgICAgICAgdW5zaWduZWQgaW50IGRhdGFbXSA9IHt4
ZW1iZWRWZXJzaW9uLCB4ZW1iZWRNYXBwZWR9OworICAgICAgICBYQ2hhbmdlUHJvcGVydHkoeDEx
SW5mbygpLT5kaXNwbGF5KCksIGNsaWVudCgpLCBBVE9NKF9YRU1CRURfSU5GTyksIEFUT00oX1hF
TUJFRF9JTkZPKSwgMzIsCisgICAgICAgICAgICBQcm9wTW9kZVJlcGxhY2UsICh1bnNpZ25lZCBj
aGFyICopIGRhdGEsIDIpOworICAgIH0KK30KKwordm9pZCBYMTFFbWJlZENvbnRhaW5lcjo6aGlk
ZSgpCit7CisgICAgWDExV2luZG93OjpoaWRlKCk7CisKKyAgICAvLyBzaWduYWwgdW5tYXAKKyAg
ICBpZiAoY2xpZW50KCkpIHsKKyAgICAgICAgdW5zaWduZWQgaW50IGRhdGFbXSA9IHt4ZW1iZWRW
ZXJzaW9uLCB4ZW1iZWRNYXBwZWR9OworICAgICAgICBYQ2hhbmdlUHJvcGVydHkoeDExSW5mbygp
LT5kaXNwbGF5KCksIGNsaWVudCgpLCBBVE9NKF9YRU1CRURfSU5GTyksIEFUT00oX1hFTUJFRF9J
TkZPKSwgMzIsCisgICAgICAgICAgICBQcm9wTW9kZVJlcGxhY2UsICh1bnNpZ25lZCBjaGFyICop
IGRhdGEsIDIpOworICAgIH0KKyAgICBtX2FjdGl2ZSA9IGZhbHNlOworfQorCit2b2lkIFgxMUVt
YmVkQ29udGFpbmVyOjpyZXNpemUoaW50IHdpZHRoLCBpbnQgaGVpZ2h0KQoreworICAgIFgxMVdp
bmRvdzo6cmVzaXplKHdpZHRoLCBoZWlnaHQpOworICAgIGlmIChjbGllbnQoKSkKKyAgICAgICAg
WFJlc2l6ZVdpbmRvdyh4MTFJbmZvKCktPmRpc3BsYXkoKSwgY2xpZW50KCksIHdpZHRoLCBoZWln
aHQpOworfQorCit2b2lkIFgxMUVtYmVkQ29udGFpbmVyOjpzZXRGcmFtZVJlY3QoY29uc3QgSW50
UmVjdCYgcmVjdCkKK3sKKyAgICBYMTFXaW5kb3c6OnNldEZyYW1lUmVjdChyZWN0KTsKKyAgICBp
ZiAoY2xpZW50KCkpCisgICAgICAgIFhNb3ZlUmVzaXplV2luZG93KHgxMUluZm8oKS0+ZGlzcGxh
eSgpLCBjbGllbnQoKSwgMCwgMCwgcmVjdC53aWR0aCgpLCByZWN0LmhlaWdodCgpKTsKK30KKwor
dm9pZCBYMTFFbWJlZENvbnRhaW5lcjo6c2V0Rm9jdXMoKQoreworICAgIG1vdmVJbnB1dEZvY3Vz
VG9Qcm94eSgpOworICAgIG1fYWN0aXZlID0gdHJ1ZTsKK30KKworYm9vbCBYMTFFbWJlZENvbnRh
aW5lcjo6aGFzRm9jdXMoKQoreworICAgIFdpbklkIGZvY3VzZWQ7CisgICAgaW50IHJldmVydFRv
OworICAgIFhHZXRJbnB1dEZvY3VzKHgxMUluZm8oKS0+ZGlzcGxheSgpLCAmZm9jdXNlZCwgJnJl
dmVydFRvKTsKKworICAgIHJldHVybiBmb2N1c2VkID09IG1fZm9jdXNQcm94eS0+d2luSWQoKTsK
K30KKworYm9vbCBYMTFFbWJlZENvbnRhaW5lcjo6aXNBY3RpdmUoKQoreworICAgIHJldHVybiBt
X2FjdGl2ZTsKK30KKworV2luSWQgWDExRW1iZWRDb250YWluZXI6OnJvb3RXaW5kb3coKQorewor
ICAgIHJldHVybiBEZWZhdWx0Um9vdFdpbmRvdyh4MTFJbmZvKCktPmRpc3BsYXkoKSk7Cit9CisK
K2Jvb2wgWDExRW1iZWRDb250YWluZXI6OngxMUV2ZW50KFhFdmVudCogZXZlbnQpCit7CisgICAg
Ly8gd2Ugc3Vic2NyaWJlIHRvIGV2ZW50cyBkaXJlY3RseSBmcm9tIHRoZSBjbGllbnQgYXMgd2Vs
bAorICAgIC8vIGluIG9yZGVyIHRvIHBpY2sgdXAgd2hlZWwgZXZlbnRzLgorICAgIGlmIChldmVu
dC0+eGFueS53aW5kb3cgPT0gY2xpZW50KCkpIHsKKyAgICAgICAgc3dpdGNoIChldmVudC0+dHlw
ZSkgeworICAgICAgICBjYXNlIEJ1dHRvblByZXNzOgorICAgICAgICAgICAgLy9tX3BsdWdpblZp
ZXctPmRpc3BhdGNoV2hlZWxFdmVudChldmVudCk7CisgICAgICAgICAgICBicmVhazsKKyAgICAg
ICAgY2FzZSBCdXR0b25SZWxlYXNlOgorICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAg
ICAgICAgcmV0dXJuIHRydWU7CisgICAgfQorCisgICAgc3dpdGNoIChldmVudC0+dHlwZSkgewor
ICAgIGNhc2UgRm9jdXNJbjoKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBGb2N1c091dDoKKyAg
ICAgICAgLy8gd2hlbiBvdXIgcHJveHkgZ2FpbiBmb2N1cywgdGhlIGNvbnRhaW5lciBhY3R1YWxs
eQorICAgICAgICAvLyBsb29zZXMgaXQsIHNvIG9ubHkgZGVhY3RpdmF0ZSB3aGVuIHRoZSBwcm94
eSBsb29zZXMKKyAgICAgICAgLy8gZm9jdXMuCisgICAgICAgIGlmIChldmVudC0+eGFueS53aW5k
b3cgIT0gbV9mb2N1c1Byb3h5LT53aW5JZCgpKQorICAgICAgICAgICAgYnJlYWs7CisKKyAgICAg
ICAgc2VuZFhFbWJlZE1lc3NhZ2UoY2xpZW50KCksIHgxMUluZm8oKS0+ZGlzcGxheSgpLCBYRU1C
RURfRk9DVVNfT1VUKTsKKyAgICAgICAgbV9hY3RpdmUgPSBmYWxzZTsKKyAgICAgICAgYnJlYWs7
CisgICAgY2FzZSBMZWF2ZU5vdGlmeToKKyAgICAgICAgc2VuZFhFbWJlZE1lc3NhZ2UoY2xpZW50
KCksIHgxMUluZm8oKS0+ZGlzcGxheSgpLCBYRU1CRURfV0lORE9XX0RFQUNUSVZBVEUpOworICAg
ICAgICBpZiAoIW1fYWN0aXZlKQorICAgICAgICAgICAgZWNvcmVfeF93aW5kb3dfZm9jdXMoZWNv
cmVfeF93aW5kb3dfcGFyZW50X2dldCh3aW5JZCgpKSk7CisKKyAgICAgICAgWFVuZ3JhYkJ1dHRv
bih4MTFJbmZvKCktPmRpc3BsYXkoKSwgNCwgQW55TW9kaWZpZXIsIGNsaWVudCgpKTsKKyAgICAg
ICAgWFVuZ3JhYkJ1dHRvbih4MTFJbmZvKCktPmRpc3BsYXkoKSwgNSwgQW55TW9kaWZpZXIsIGNs
aWVudCgpKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBFbnRlck5vdGlmeToKKyAgICAgICAg
c2VuZFhFbWJlZE1lc3NhZ2UoY2xpZW50KCksIHgxMUluZm8oKS0+ZGlzcGxheSgpLCBYRU1CRURf
V0lORE9XX0FDVElWQVRFKTsKKyAgICAgICAgbW92ZUlucHV0Rm9jdXNUb1Byb3h5KCk7CisKKyAg
ICAgICAgWEdyYWJCdXR0b24oeDExSW5mbygpLT5kaXNwbGF5KCksIDQsIEFueU1vZGlmaWVyLCBj
bGllbnQoKSwgZmFsc2UsCisgICAgICAgICAgICAgICAgQnV0dG9uUHJlc3NNYXNrLCBHcmFiTW9k
ZUFzeW5jLCBHcmFiTW9kZUFzeW5jLCAwTCwgMEwpOworICAgICAgICBYR3JhYkJ1dHRvbih4MTFJ
bmZvKCktPmRpc3BsYXkoKSwgNSwgQW55TW9kaWZpZXIsIGNsaWVudCgpLCBmYWxzZSwKKyAgICAg
ICAgICAgICAgICBCdXR0b25QcmVzc01hc2ssIEdyYWJNb2RlQXN5bmMsIEdyYWJNb2RlQXN5bmMs
IDBMLCAwTCk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgS2V5UHJlc3M6CisgICAgY2FzZSBL
ZXlSZWxlYXNlOgorICAgICAgICBpZiAoY2xpZW50KCkgJiYgaXNBY3RpdmUoKSkKKyAgICAgICAg
ICAgIGV2ZW50LT54a2V5LndpbmRvdyA9IGNsaWVudCgpOworICAgICAgICBlbHNlCisgICAgICAg
ICAgICBldmVudC0+eGtleS53aW5kb3cgPSBlY29yZV94X3dpbmRvd19wYXJlbnRfZ2V0KHdpbklk
KCkpOworCisgICAgICAgIFhTZW5kRXZlbnQoeDExSW5mbygpLT5kaXNwbGF5KCksIGV2ZW50LT54
a2V5LndpbmRvdywgZmFsc2UsIE5vRXZlbnRNYXNrLCBldmVudCk7CisgICAgICAgIFhTeW5jKHgx
MUluZm8oKS0+ZGlzcGxheSgpLCBmYWxzZSk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgQ3Jl
YXRlTm90aWZ5OgorICAgICAgICBpZiAoY2xpZW50KCkpCisgICAgICAgICAgICByZWplY3QoZXZl
bnQtPnhjcmVhdGV3aW5kb3cud2luZG93KTsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgYWNj
ZXB0KGV2ZW50LT54Y3JlYXRld2luZG93LndpbmRvdyk7CisgICAgICAgIGJyZWFrOworICAgIGNh
c2UgRGVzdHJveU5vdGlmeToKKyAgICAgICAgLy8gY2xpZW50IGdvZXMgYXdheQorICAgICAgICBp
ZiAoZXZlbnQtPnhkZXN0cm95d2luZG93LndpbmRvdyA9PSBjbGllbnQoKSkgeworICAgICAgICAg
ICAgc2V0Q2xpZW50KDApOworICAgICAgICAgICAgc2V0RnJhbWVSZWN0KEludFJlY3QoLTEsIC0x
LCAxLCAxKSk7CisgICAgICAgIH0KKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBSZXBhcmVudE5v
dGlmeToKKyAgICAgICAgLy8gdGhlIGNsaWVudCByZXBhcmVudHMgaXRzZWxmIG91dCBvZiB1cywg
d2FudHMgdG8gbGVhdmUgdXMKKyAgICAgICAgaWYgKGV2ZW50LT54cmVwYXJlbnQud2luZG93ID09
IGNsaWVudCgpICYmIGV2ZW50LT54cmVwYXJlbnQucGFyZW50ICE9IHdpbklkKCkpIHsKKyAgICAg
ICAgICAgIHNldENsaWVudCgwKTsKKyAgICAgICAgICAgIHNldEZyYW1lUmVjdChJbnRSZWN0KC0x
LCAtMSwgMSwgMSkpOworICAgICAgICB9IGVsc2UgaWYgKGV2ZW50LT54cmVwYXJlbnQucGFyZW50
ID09IHdpbklkKCkpIHsgLy8gdGhlIGNsaWVudCByZXBhcmVudHMgaXRzZWxmIGludG8gdXMKKyAg
ICAgICAgICAgIGlmIChjbGllbnQoKSkKKyAgICAgICAgICAgICAgICByZWplY3QoZXZlbnQtPnhy
ZXBhcmVudC53aW5kb3cpOworICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgIGFjY2Vw
dChldmVudC0+eHJlcGFyZW50LndpbmRvdyk7CisgICAgICAgIH0KKyAgICAgICAgYnJlYWs7Cisg
ICAgY2FzZSBDbGllbnRNZXNzYWdlOgorICAgICAgICBpZiAoZXZlbnQtPnhjbGllbnQubWVzc2Fn
ZV90eXBlICE9IEFUT00oX1hFTUJFRCkpCisgICAgICAgICAgICBicmVhazsKKworICAgICAgICAv
LyBub3QgZm9yIHVzLCBpZ25vcmUKKyAgICAgICAgaWYgKGV2ZW50LT54Y2xpZW50LndpbmRvdyAh
PSB3aW5JZCgpKQorICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgc3dpdGNoIChldmVudC0+
eGNsaWVudC5kYXRhLmxbMV0pIHsKKyAgICAgICAgY2FzZSBYRU1CRURfUkVRVUVTVF9GT0NVUzoK
KyAgICAgICAgICAgIG1fcGx1Z2luVmlldy0+c2V0Rm9jdXModHJ1ZSk7CisgICAgICAgICAgICBz
ZW5kWEVtYmVkTWVzc2FnZShjbGllbnQoKSwgeDExSW5mbygpLT5kaXNwbGF5KCksIFhFTUJFRF9G
T0NVU19JTiwgWEVNQkVEX0ZPQ1VTX0NVUlJFTlQpOworICAgICAgICAgICAgYnJlYWs7CisgICAg
ICAgIGNhc2UgWEVNQkVEX0ZPQ1VTX05FWFQ6CisgICAgICAgICAgICAvLyBDbGllbnQgc2VuZHMg
dGhpcyBldmVudCB3aGVuIGl0IHJlY2VpdmVkIGEgdGFiCisgICAgICAgICAgICAvLyBmb3J3YXJk
IGFuZCB3YXMgYXQgdGhlIGVuZCBvZiBpdHMgZm9jdXMgY2hhaW4uIElmCisgICAgICAgICAgICAv
LyB3ZSBhcmUgdGhlIG9ubHkgd2lkZ2V0IGluIHRoZSBmb2N1cyBjaGFpbiwgd2Ugc2VuZAorICAg
ICAgICAgICAgLy8gb3Vyc2VsdmVzIGEgRm9jdXNPdXQgZXZlbnQuCisgICAgICAgICAgICBicmVh
azsKKyAgICAgICAgY2FzZSBYRU1CRURfRk9DVVNfUFJFVjoKKyAgICAgICAgICAgIC8vIENsaWVu
dCBzZW5kcyB0aGlzIGV2ZW50IHdoZW4gaXQgcmVjZWl2ZWQgYSBiYWNrdGFiCisgICAgICAgICAg
ICAvLyBhbmQgd2FzIGF0IHRoZSBzdGFydCBvZiBpdHMgZm9jdXMgY2hhaW4uIElmIHdlIGFyZQor
ICAgICAgICAgICAgLy8gdGhlIG9ubHkgd2lkZ2V0IGluIHRoZSBmb2N1cyBjaGFpbiwgd2Ugc2Vu
ZAorICAgICAgICAgICAgLy8gb3Vyc2VsdmVzIGEgRm9jdXNPdXQgZXZlbnQuCisgICAgICAgICAg
ICBicmVhazsKKyAgICAgICAgfQorICAgICAgICBicmVhazsKKyAgICB9CisgICAgcmV0dXJuIGZh
bHNlOworfQorCit2b2lkIHNlbmRYRW1iZWRNZXNzYWdlKFdpbklkIHdpbmRvdywgRGlzcGxheSog
ZGlzcGxheSwgbG9uZyBtZXNzYWdlLCBsb25nIGRldGFpbCwgbG9uZyBkYXRhMSwgbG9uZyBkYXRh
MikKK3sKKyAgICBYRXZlbnQgZXY7CisgICAgbWVtc2V0KCZldiwgMCwgc2l6ZW9mKGV2KSk7Cisg
ICAgZXYueGNsaWVudC50eXBlID0gQ2xpZW50TWVzc2FnZTsKKyAgICBldi54Y2xpZW50LndpbmRv
dyA9IHdpbmRvdzsKKyAgICBldi54Y2xpZW50Lm1lc3NhZ2VfdHlwZSA9IEFUT00oX1hFTUJFRF9J
TkZPKTsKKyAgICBldi54Y2xpZW50LmZvcm1hdCA9IDMyOworICAgIGV2LnhjbGllbnQuZGF0YS5s
WzBdID0gZWNvcmVfeF9jdXJyZW50X3RpbWVfZ2V0KCk7CisgICAgZXYueGNsaWVudC5kYXRhLmxb
MV0gPSBtZXNzYWdlOworICAgIGV2LnhjbGllbnQuZGF0YS5sWzJdID0gZGV0YWlsOworICAgIGV2
LnhjbGllbnQuZGF0YS5sWzNdID0gZGF0YTE7CisgICAgZXYueGNsaWVudC5kYXRhLmxbNF0gPSBk
YXRhMjsKKyAgICBYU2VuZEV2ZW50KGRpc3BsYXksIHdpbmRvdywgZmFsc2UsIE5vRXZlbnRNYXNr
LCAmZXYpOworICAgIFhTeW5jKGRpc3BsYXksIGZhbHNlKTsKK30KKwpkaWZmIC0tZ2l0IGEvV2Vi
Q29yZS9wbHVnaW5zL2VmbC9YMTFFbWJlZENvbnRhaW5lci5oIGIvV2ViQ29yZS9wbHVnaW5zL2Vm
bC9YMTFFbWJlZENvbnRhaW5lci5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAu
LjAyMTk2YmMKLS0tIC9kZXYvbnVsbAorKysgYi9XZWJDb3JlL3BsdWdpbnMvZWZsL1gxMUVtYmVk
Q29udGFpbmVyLmgKQEAgLTAsMCArMSw3NSBAQAorLyoKKyAgICBDb3B5cmlnaHQgKEMpIDIwMDkg
SU5kVCAtIEluc3RpdHV0byBOb2tpYSBkZSBUZWNub2xvZ2lhCisgICAgQ29weXJpZ2h0IChDKSAy
MDA5LTIwMTAgUHJvRlVTSU9OIGVtYmVkZGVkIHN5c3RlbXMKKyAgICBDb3B5cmlnaHQgKEMpIDIw
MDktMjAxMCBTYW1zdW5nIEVsZWN0cm9uaWNzCisKKyAgICBUaGlzIGxpYnJhcnkgaXMgZnJlZSBz
b2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgICAgbW9kaWZ5IGl0IHVu
ZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAgICBMaWNl
bnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIK
KyAgICB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxh
dGVyIHZlcnNpb24uCisKKyAgICBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhv
cGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAgICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7
IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICAgIE1FUkNIQU5UQUJJTElU
WSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgICAg
TGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisKKyAgICBZ
b3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFs
IFB1YmxpYyBMaWNlbnNlCisgICAgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmls
ZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KKyAgICB0aGUgRnJlZSBTb2Z0d2FyZSBG
b3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAorICAgIEJv
c3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgorKi8KKworI2lmbmRlZiBYMTFFbWJlZENvbnRhaW5l
cl9oCisjZGVmaW5lIFgxMUVtYmVkQ29udGFpbmVyX2gKKworI2luY2x1ZGUgIlBsdWdpblZpZXcu
aCIKKyNpbmNsdWRlICJYMTFXaW5kb3cuaCIKKworI2luY2x1ZGUgPHd0Zi9Pd25QdHIuaD4KKyNp
bmNsdWRlIDx3dGYvVmVjdG9yLmg+CisKK2NsYXNzIFgxMUVtYmVkQ29udGFpbmVyOworY2xhc3Mg
WDExV2luZG93OworCitjbGFzcyBYMTFFbWJlZENvbnRhaW5lciA6IHB1YmxpYyBYMTFXaW5kb3cg
eworcHVibGljOgorICAgIFgxMUVtYmVkQ29udGFpbmVyKEV2YXMqIGV2YXMsIFdlYkNvcmU6OlBs
dWdpblZpZXcqIHZpZXcpOworICAgIH5YMTFFbWJlZENvbnRhaW5lcigpOworCisgICAgV2luSWQg
cm9vdFdpbmRvdygpOworCisgICAgV2luSWQgY2xpZW50KCkgeyByZXR1cm4gbV9jbGllbnQ7IH0K
KyAgICB2b2lkIHNldENsaWVudChXaW5JZCBjbGllbnQpCisgICAgeworICAgICAgICBtX2NsaWVu
dCA9IGNsaWVudDsKKyAgICAgICAgaWYgKGNsaWVudCkKKyAgICAgICAgICAgIG1fY2xpZW50V2lu
ZG93LnNldChYMTFXaW5kb3c6OmFkb3B0KGNsaWVudCkpOworICAgIH0KKworICAgIHZvaWQgYWNj
ZXB0KFdpbklkIGNsaWVudCk7CisgICAgdm9pZCByZWplY3QoV2luSWQgY2xpZW50KTsKKworICAg
IHZvaWQgbW92ZUlucHV0Rm9jdXNUb1Byb3h5KCk7CisgICAgYm9vbCB4MTFFdmVudChYRXZlbnQq
IGV2ZW50KTsKKworICAgIHZvaWQgc2V0RnJhbWVSZWN0KGNvbnN0IFdlYkNvcmU6OkludFJlY3Qm
IHJlY3QpOworCisgICAgdm9pZCByZXNpemUoaW50IHdpZHRoLCBpbnQgaGVpZ2h0KTsKKworICAg
IHZvaWQgc2hvdygpOworICAgIHZvaWQgaGlkZSgpOworCisgICAgdm9pZCBzZXRGb2N1cygpOwor
ICAgIGJvb2wgaGFzRm9jdXMoKTsKKyAgICBib29sIGlzQWN0aXZlKCk7CisKK3ByaXZhdGU6Cisg
ICAgYm9vbCBtX2FjdGl2ZTsKKyAgICBXaW5JZCBtX2NsaWVudDsKKworICAgIFdlYkNvcmU6OlBs
dWdpblZpZXcqIG1fcGx1Z2luVmlldzsKKyAgICBPd25QdHI8WDExV2luZG93PiBtX2ZvY3VzUHJv
eHk7CisgICAgT3duUHRyPFgxMVdpbmRvdz4gbV9jbGllbnRXaW5kb3c7Cit9OworCisjZW5kaWYg
Ly8gWDExRW1iZWRDb250YWluZXJfaApkaWZmIC0tZ2l0IGEvV2ViQ29yZS9wbHVnaW5zL2VmbC9Y
MTFXaW5kb3cuY3BwIGIvV2ViQ29yZS9wbHVnaW5zL2VmbC9YMTFXaW5kb3cuY3BwCm5ldyBmaWxl
IG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjJhY2QyNjEKLS0tIC9kZXYvbnVsbAorKysgYi9X
ZWJDb3JlL3BsdWdpbnMvZWZsL1gxMVdpbmRvdy5jcHAKQEAgLTAsMCArMSwxODMgQEAKKy8qCisg
ICAgQ29weXJpZ2h0IChDKSAyMDA5IElOZFQgLSBJbnN0aXR1dG8gTm9raWEgZGUgVGVjbm9sb2dp
YQorICAgIENvcHlyaWdodCAoQykgMjAwOS0yMDEwIFByb0ZVU0lPTiBlbWJlZGRlZCBzeXN0ZW1z
CisgICAgQ29weXJpZ2h0IChDKSAyMDA5LTIwMTAgU2Ftc3VuZyBFbGVjdHJvbmljcworCisgICAg
VGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFu
ZC9vcgorICAgIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdl
bmVyYWwgUHVibGljCisgICAgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdh
cmUgRm91bmRhdGlvbjsgZWl0aGVyCisgICAgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAo
YXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorCisgICAgVGhpcyBsaWJyYXJ5IGlz
IGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgICAgYnV0
IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkg
b2YKKyAgICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBP
U0UuICBTZWUgdGhlIEdOVQorICAgIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3Ig
bW9yZSBkZXRhaWxzLgorCisgICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0
aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICAgIGFsb25nIHdpdGggdGhp
cyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCisg
ICAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0
LCBGaWZ0aCBGbG9vciwKKyAgICBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKyovCisKKyNp
bmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJYMTFXaW5kb3cuaCIKKworI2luY2x1ZGUgPEVj
b3JlX0V2YXMuaD4KKwordXNpbmcgbmFtZXNwYWNlIFdlYkNvcmU7CisKK0VpbmFfQm9vbCBvbkVj
b3JlWEV2ZW50KHZvaWQqIG9iamVjdCwgaW50IHR5cGUsIHZvaWQqIGV2ZW50RGF0YSk7CisKK3Zv
aWQgWDExV2luZG93Ojppbml0KFdpbklkIHBhcmVudCwgSW50UmVjdCYgZ2VvbWV0cnkpCit7Cisg
ICAgbV93aW5JZCA9IGVjb3JlX3hfd2luZG93X25ldyhwYXJlbnQsIGdlb21ldHJ5LngoKSwgZ2Vv
bWV0cnkueSgpLAorICAgICAgICAgICAgZ2VvbWV0cnkud2lkdGgoKSwgZ2VvbWV0cnkuaGVpZ2h0
KCkpOworICAgIG1fWEV2ZW50SGFuZGxlciA9IGVjb3JlX2V2ZW50X2hhbmRsZXJfYWRkKEVDT1JF
X1hfRVZFTlRfQU5ZLCBvbkVjb3JlWEV2ZW50LCB0aGlzKTsKK30KKworWDExV2luZG93KiBYMTFX
aW5kb3c6OmFkb3B0KFdpbklkIGlkKQoreworICAgIFgxMVdpbmRvdyogd2luID0gbmV3IFgxMVdp
bmRvdygpOworICAgIHdpbi0+bV93aW5JZCA9IGlkOworICAgIHdpbi0+bV9YRXZlbnRIYW5kbGVy
ID0gZWNvcmVfZXZlbnRfaGFuZGxlcl9hZGQoRUNPUkVfWF9FVkVOVF9BTlksIG9uRWNvcmVYRXZl
bnQsIHdpbik7CisKKyAgICByZXR1cm4gd2luOworfQorCitYMTFXaW5kb3c6OlgxMVdpbmRvdygp
CisgICAgOiBtX3gxMUluZm8oMCkKKyAgICAsIG1fdmlzaWJsZShmYWxzZSkKKyAgICAsIG1fcmVj
dChJbnRSZWN0KCkpCisgICAgLCBtX2V2ZW50RmlsdGVyKDApCisgICAgLCBtX2Fkb3B0ZWQodHJ1
ZSkKK3sKK30KKworWDExV2luZG93OjpYMTFXaW5kb3coRXZhcyAqZXZhcywgSW50UmVjdCBnZW9t
ZXRyeSkKKyAgICA6IG1feDExSW5mbygwKQorICAgICwgbV92aXNpYmxlKGZhbHNlKQorICAgICwg
bV9yZWN0KGdlb21ldHJ5KQorICAgICwgbV9ldmVudEZpbHRlcigwKQorICAgICwgbV9hZG9wdGVk
KGZhbHNlKQoreworICAgIEVjb3JlX0V2YXMqIGVlID0gZWNvcmVfZXZhc19lY29yZV9ldmFzX2dl
dChldmFzKTsKKyAgICBXaW5JZCBwYXJlbnQgPSBlY29yZV9ldmFzX3dpbmRvd19nZXQoZWUpOwor
ICAgIGluaXQocGFyZW50LCBnZW9tZXRyeSk7Cit9CisKK1gxMVdpbmRvdzo6WDExV2luZG93KFdp
bklkIHBhcmVudCwgSW50UmVjdCBnZW9tZXRyeSkKKyAgICA6IG1feDExSW5mbygwKQorICAgICwg
bV92aXNpYmxlKGZhbHNlKQorICAgICwgbV9yZWN0KGdlb21ldHJ5KQorICAgICwgbV9ldmVudEZp
bHRlcigwKQorICAgICwgbV9hZG9wdGVkKGZhbHNlKQoreworICAgIGluaXQocGFyZW50LCBnZW9t
ZXRyeSk7Cit9CisKK1gxMVdpbmRvdzo6flgxMVdpbmRvdygpCit7CisgICAgZWNvcmVfZXZlbnRf
aGFuZGxlcl9kZWwobV9YRXZlbnRIYW5kbGVyKTsKKworICAgIGRlbGV0ZSBtX3gxMUluZm87Cisg
ICAgaWYgKCFtX2Fkb3B0ZWQpCisgICAgICAgIGVjb3JlX3hfd2luZG93X2ZyZWUobV93aW5JZCk7
Cit9CisKK3ZvaWQgWDExV2luZG93OjpzaG93KCkKK3sKKyAgICBpZiAobV92aXNpYmxlKQorICAg
ICAgICByZXR1cm47CisgICAgZWNvcmVfeF93aW5kb3dfc2hvdyhtX3dpbklkKTsKKyAgICBtX3Zp
c2libGUgPSB0cnVlOworfQorCit2b2lkIFgxMVdpbmRvdzo6aGlkZSgpCit7CisgICAgaWYgKG1f
dmlzaWJsZSkKKyAgICAgICAgcmV0dXJuOworICAgIGVjb3JlX3hfd2luZG93X2hpZGUobV93aW5J
ZCk7CisgICAgbV92aXNpYmxlID0gZmFsc2U7Cit9CisKK3ZvaWQgWDExV2luZG93OjpzZXRWaXNp
YmxlKGJvb2wgb24pCit7CisgICAgaWYgKG9uKQorICAgICAgICBzaG93KCk7CisgICAgZWxzZQor
ICAgICAgICBoaWRlKCk7Cit9CisKK3ZvaWQgWDExV2luZG93Ojptb3ZlKGludCB4LCBpbnQgeSkK
K3sKKyAgICBJbnRQb2ludCBuZXdQb3MgPSBJbnRQb2ludCh4LCB5KTsKKyAgICBpZiAoZ2VvbWV0
cnkoKS5sb2NhdGlvbigpID09IG5ld1BvcykKKyAgICAgICAgcmV0dXJuOworCisgICAgZWNvcmVf
eF93aW5kb3dfbW92ZSh3aW5JZCgpLCB4LCB5KTsKKyAgICBtX3JlY3Quc2V0TG9jYXRpb24obmV3
UG9zKTsKK30KKwordm9pZCBYMTFXaW5kb3c6OnJlc2l6ZShpbnQgd2lkdGgsIGludCBoZWlnaHQp
Cit7CisgICAgSW50U2l6ZSBuZXdTaXplID0gSW50U2l6ZSh3aWR0aCwgaGVpZ2h0KTsKKworICAg
IGlmIChzaXplKCkgPT0gbmV3U2l6ZSkKKyAgICAgICAgcmV0dXJuOworICAgIGVjb3JlX3hfd2lu
ZG93X3Jlc2l6ZSh3aW5JZCgpLCB3aWR0aCwgaGVpZ2h0KTsKKyAgICBtX3JlY3Quc2V0U2l6ZShu
ZXdTaXplKTsKK30KKwordm9pZCBYMTFXaW5kb3c6OnNldEZyYW1lUmVjdChjb25zdCBJbnRSZWN0
JiByZWN0KQoreworICAgIGlmIChnZW9tZXRyeSgpID09IHJlY3QpCisgICAgICAgIHJldHVybjsK
KyAgICBlY29yZV94X3dpbmRvd19tb3ZlX3Jlc2l6ZSh3aW5JZCgpLCByZWN0LngoKSwgcmVjdC55
KCksIHJlY3Qud2lkdGgoKSwgcmVjdC5oZWlnaHQoKSk7CisgICAgbV9yZWN0ID0gcmVjdDsKK30K
Kwordm9pZCBYMTFXaW5kb3c6OnVwZGF0ZShjb25zdCBJbnRSZWN0JiByZWN0KQoreworICAgIGVj
b3JlX3hfd2luZG93X2FyZWFfZXhwb3NlKHdpbklkKCksIHJlY3QueCgpLCByZWN0LnkoKSwgcmVj
dC53aWR0aCgpLCByZWN0LmhlaWdodCgpKTsKK30KKwordm9pZCBYMTFXaW5kb3c6OnNldEZvY3Vz
KCkKK3sKKyAgICBlY29yZV94X3dpbmRvd19mb2N1cyh3aW5JZCgpKTsKK30KKwordm9pZCBYMTFX
aW5kb3c6Omluc3RhbGxFdmVudEZpbHRlcihYMTFXaW5kb3cqIG9iamVjdCkKK3sKKyAgICBtX2V2
ZW50RmlsdGVyID0gb2JqZWN0OworfQorCit2b2lkIFgxMVdpbmRvdzo6cHJvY2Vzc0V2ZW50KFhF
dmVudCogeGV2ZW50KQoreworICAgIGJvb2wgaGFuZGxlZCA9IGZhbHNlOworCisgICAgaWYgKG1f
ZXZlbnRGaWx0ZXIpCisgICAgICAgIGhhbmRsZWQgPSBtX2V2ZW50RmlsdGVyLT54MTFFdmVudCh4
ZXZlbnQpOworCisgICAgaWYgKGhhbmRsZWQpCisgICAgICAgIHJldHVybjsKKworICAgIHgxMUV2
ZW50KHhldmVudCk7Cit9CisKK2Jvb2wgWDExV2luZG93Ojp4MTFFdmVudChYRXZlbnQqIHhldmVu
dCkKK3sKKyAgICByZXR1cm4gZmFsc2U7Cit9CisKK0VpbmFfQm9vbCBvbkVjb3JlWEV2ZW50KHZv
aWQqIG9iamVjdCwgaW50IHR5cGUsIHZvaWQqIGV2ZW50RGF0YSkKK3sKKyAgICBYMTFXaW5kb3cq
IHdpbiA9IHN0YXRpY19jYXN0PFgxMVdpbmRvdyo+KG9iamVjdCk7CisKKyAgICBYRXZlbnQqIHhl
dmVudCA9IChYRXZlbnQqKSBldmVudERhdGE7CisKKyAgICBpZiAoeGV2ZW50LT50eXBlID4gMSAm
JiB4ZXZlbnQtPnhhbnkud2luZG93ID09IHdpbi0+d2luSWQoKSkKKyAgICAgICAgd2luLT5wcm9j
ZXNzRXZlbnQoeGV2ZW50KTsKKworICAgIHJldHVybiBFQ09SRV9DQUxMQkFDS19SRU5FVzsKK30K
KwpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9wbHVnaW5zL2VmbC9YMTFXaW5kb3cuaCBiL1dlYkNvcmUv
cGx1Z2lucy9lZmwvWDExV2luZG93LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAw
MC4uNTZlMjczNgotLS0gL2Rldi9udWxsCisrKyBiL1dlYkNvcmUvcGx1Z2lucy9lZmwvWDExV2lu
ZG93LmgKQEAgLTAsMCArMSwxMDUgQEAKKy8qCisgICAgQ29weXJpZ2h0IChDKSAyMDA5IElOZFQg
LSBJbnN0aXR1dG8gTm9raWEgZGUgVGVjbm9sb2dpYQorICAgIENvcHlyaWdodCAoQykgMjAwOS0y
MDEwIFByb0ZVU0lPTiBlbWJlZGRlZCBzeXN0ZW1zCisgICAgQ29weXJpZ2h0IChDKSAyMDA5LTIw
MTAgU2Ftc3VuZyBFbGVjdHJvbmljcworCisgICAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdh
cmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICAgIG1vZGlmeSBpdCB1bmRlciB0
aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgICAgTGljZW5zZSBh
cyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgICAg
dmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2
ZXJzaW9uLgorCisgICAgVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRo
YXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRo
b3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAgICBNRVJDSEFOVEFCSUxJVFkgb3Ig
RklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICAgIExpYnJh
cnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorCisgICAgWW91IHNo
b3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJs
aWMgTGljZW5zZQorICAgIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09Q
WUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCisgICAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRh
dGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKKyAgICBCb3N0b24s
IE1BIDAyMTEwLTEzMDEsIFVTQS4KKyovCisKKyNpZm5kZWYgWDExV2luZG93X2gKKyNkZWZpbmUg
WDExV2luZG93X2gKKworI2luY2x1ZGUgIkludFJlY3QuaCIKKyNpbmNsdWRlICJQbHVnaW5QYWNr
YWdlLmgiCisKKyNpbmNsdWRlIDxFY29yZS5oPgorI2luY2x1ZGUgPEVjb3JlX1guaD4KKyNpbmNs
dWRlIDxFdmFzLmg+CisKK3R5cGVkZWYgV2luZG93IFdpbklkOworCitjbGFzcyBYMTFJbmZvIHsK
K3B1YmxpYzoKKyAgICBEaXNwbGF5KiBkaXNwbGF5KCkgeyByZXR1cm4gKERpc3BsYXkqKSBlY29y
ZV94X2Rpc3BsYXlfZ2V0KCk7IH0KKyAgICBWaXN1YWwqIHZpc3VhbCgpIHsgcmV0dXJuIChWaXN1
YWwqKSBtX2F0dC52aXN1YWw7IH0KKyAgICB1bnNpZ25lZCBpbnQgZGVwdGgoKSB7IHJldHVybiBt
X2F0dC5kZXB0aDsgfQorICAgIENvbG9ybWFwIGNvbG9ybWFwKCkgeyByZXR1cm4gbV9hdHQuY29s
b3JtYXA7IH0KKyAgICB1bnNpZ25lZCBpbnQgeDExVGltZSgpIHsgcmV0dXJuIGVjb3JlX3hfY3Vy
cmVudF90aW1lX2dldCgpOyB9CisKK3ByaXZhdGU6CisgICAgWDExSW5mbyhXaW5JZCBvd25lcikK
KyAgICB7CisgICAgICAgIG1fb3duZXIgPSBvd25lcjsKKyAgICAgICAgZWNvcmVfeF93aW5kb3df
YXR0cmlidXRlc19nZXQob3duZXIsICZtX2F0dCk7CisgICAgICAgIG1fYXR0LmNvbG9ybWFwID0g
RGVmYXVsdENvbG9ybWFwKGRpc3BsYXkoKSwgRGVmYXVsdFNjcmVlbihkaXNwbGF5KCkpKTsKKyAg
ICB9CisgICAgV2luSWQgbV9vd25lcjsKKyAgICBFY29yZV9YX1dpbmRvd19BdHRyaWJ1dGVzIG1f
YXR0OworICAgIGZyaWVuZCBjbGFzcyBYMTFXaW5kb3c7Cit9OworCitjbGFzcyBYMTFXaW5kb3cg
eworcHVibGljOgorICAgIFgxMVdpbmRvdyhFdmFzICpldmFzLCBXZWJDb3JlOjpJbnRSZWN0IGdl
b21ldHJ5ID0gV2ViQ29yZTo6SW50UmVjdCgwLCAwLCAzMiwgMzIpKTsKKyAgICBYMTFXaW5kb3co
V2luSWQgcGFyZW50LCBXZWJDb3JlOjpJbnRSZWN0IGdlb21ldHJ5ID0gV2ViQ29yZTo6SW50UmVj
dCgwLCAwLCAzMiwgMzIpKTsKKyAgICB+WDExV2luZG93KCk7CisKKyAgICBzdGF0aWMgWDExV2lu
ZG93KiBhZG9wdChXaW5JZCBpZCk7CisKKyAgICBYMTFJbmZvKiB4MTFJbmZvKCkKKyAgICB7Cisg
ICAgICAgIGlmICghbV94MTFJbmZvKQorICAgICAgICAgICAgbV94MTFJbmZvID0gbmV3IFgxMUlu
Zm8obV93aW5JZCk7CisgICAgICAgIHJldHVybiBtX3gxMUluZm87CisgICAgfQorCisgICAgV2Vi
Q29yZTo6SW50U2l6ZSBzaXplKCkgeyByZXR1cm4gbV9yZWN0LnNpemUoKTsgfQorICAgIFdlYkNv
cmU6OkludFJlY3QgZ2VvbWV0cnkoKSB7IHJldHVybiBtX3JlY3Q7IH0KKworICAgIHZvaWQgaW5z
dGFsbEV2ZW50RmlsdGVyKFgxMVdpbmRvdyogb2JqZWN0KTsKKyAgICB2b2lkIHByb2Nlc3NFdmVu
dChYRXZlbnQqIHhldmVudCk7CisgICAgdmlydHVhbCBib29sIHgxMUV2ZW50KFhFdmVudCogZXZl
bnQpOworCisgICAgdmlydHVhbCB2b2lkIHNldEZyYW1lUmVjdChjb25zdCBXZWJDb3JlOjpJbnRS
ZWN0JiByZWN0KTsKKworICAgIHZpcnR1YWwgdm9pZCBtb3ZlKGludCB4LCBpbnQgeSk7CisgICAg
dmlydHVhbCB2b2lkIHJlc2l6ZShpbnQgd2lkdGgsIGludCBoZWlnaHQpOworCisgICAgdmlydHVh
bCB2b2lkIHVwZGF0ZShjb25zdCBXZWJDb3JlOjpJbnRSZWN0JiByZWN0KTsKKworICAgIHZpcnR1
YWwgdm9pZCBzaG93KCk7CisgICAgdmlydHVhbCB2b2lkIGhpZGUoKTsKKyAgICB2b2lkIHNldFZp
c2libGUoYm9vbCBvbik7CisgICAgdmlydHVhbCB2b2lkIHNldEZvY3VzKCk7CisKKyAgICBXaW5J
ZCB3aW5JZCgpIHsgcmV0dXJuIG1fd2luSWQ7IH0KKworcHJvdGVjdGVkOgorICAgIFgxMVdpbmRv
dygpOworICAgIHZvaWQgaW5pdChXaW5JZCBwYXJlbnQsIFdlYkNvcmU6OkludFJlY3QmIGdlb21l
dHJ5KTsKKyAgICB2b2lkIGFjY2VwdEV2ZW50VHlwZShpbnQgdHlwZSk7CisKKyAgICBXaW5JZCBt
X3dpbklkOworICAgIFgxMUluZm8qIG1feDExSW5mbzsKKyAgICBib29sIG1fdmlzaWJsZTsKKyAg
ICBXZWJDb3JlOjpJbnRSZWN0IG1fcmVjdDsKKyAgICBYMTFXaW5kb3cqIG1fZXZlbnRGaWx0ZXI7
CisgICAgRWNvcmVfRXZlbnRfSGFuZGxlciogbV9YRXZlbnRIYW5kbGVyOworICAgIGJvb2wgbV9h
ZG9wdGVkOworfTsKKworCisjZW5kaWYgLy8gWDExV2luZG93X2gK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>65400</attachid>
            <date>2010-08-25 05:02:41 -0700</date>
            <delta_ts>2011-02-04 06:52:07 -0800</delta_ts>
            <desc>Patch adding plugins support to efl port</desc>
            <filename>efl.patch</filename>
            <type>text/plain</type>
            <size>71134</size>
            <attacher name="Mariusz Grzegorczyk">mariusz.g</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1dlYkNvcmUvQ01ha2VMaXN0cy50eHQgYi9XZWJDb3JlL0NNYWtlTGlzdHMu
dHh0CmluZGV4IDNmZTZjMmMuLmViOGYzOWEgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvQ01ha2VMaXN0
cy50eHQKKysrIGIvV2ViQ29yZS9DTWFrZUxpc3RzLnR4dApAQCAtMTM0Niw3ICsxMzQ2LDggQEAg
U0VUKFdlYkNvcmVfU09VUkNFUwogICAgIHBsdWdpbnMvUGx1Z2luRGF0YS5jcHAKICAgICBwbHVn
aW5zL1BsdWdpbkRhdGFOb25lLmNwcAogICAgIHBsdWdpbnMvUGx1Z2luTWFpblRocmVhZFNjaGVk
dWxlci5jcHAKLSAgICBwbHVnaW5zL1BsdWdpblZpZXdOb25lLmNwcAorIyAgICBwbHVnaW5zL1Bs
dWdpblZpZXdOb25lLmNwcAorICAgIHBsdWdpbnMvUGx1Z2luVmlldy5jcHAKIAogICAgIHJlbmRl
cmluZy9BdXRvVGFibGVMYXlvdXQuY3BwCiAgICAgcmVuZGVyaW5nL0JpZGlSdW4uY3BwCmRpZmYg
LS1naXQgYS9XZWJDb3JlL0NNYWtlTGlzdHNFZmwudHh0IGIvV2ViQ29yZS9DTWFrZUxpc3RzRWZs
LnR4dAppbmRleCA1YzhjZGYyLi5jZTI4MTA5IDEwMDY0NAotLS0gYS9XZWJDb3JlL0NNYWtlTGlz
dHNFZmwudHh0CisrKyBiL1dlYkNvcmUvQ01ha2VMaXN0c0VmbC50eHQKQEAgLTExLDYgKzExLDcg
QEAgTElTVChBUFBFTkQgV2ViQ29yZV9JTkNMVURFX0RJUkVDVE9SSUVTCiAgICIke1dFQkNPUkVf
RElSfS9wbGF0Zm9ybS9ncmFwaGljcy9lZmwiCiAgICIke1dFQkNPUkVfRElSfS9wYWdlL2VmbCIK
ICAgIiR7V0VCQ09SRV9ESVJ9L2FjY2Vzc2liaWxpdHkvZWZsIgorICAiJHtXRUJDT1JFX0RJUn0v
cGx1Z2lucy9lZmwiCiAgICIke1dFQktJVF9ESVJ9L2VmbC9XZWJDb3JlU3VwcG9ydCIKICAgIiR7
V0VCS0lUX0RJUn0vZWZsL2V3ayIKICkKQEAgLTU4LDYgKzU5LDE3IEBAIExJU1QoQVBQRU5EIFdl
YkNvcmVfU09VUkNFUwogICBwbGF0Zm9ybS9ncmFwaGljcy9lZmwvSW50UG9pbnRFZmwuY3BwCiAg
IHBsYXRmb3JtL3Bvc2l4L0ZpbGVTeXN0ZW1QT1NJWC5jcHAKICAgcGxhdGZvcm0vdGV4dC9lZmwv
VGV4dEJyZWFrSXRlcmF0b3JJbnRlcm5hbElDVUVmbC5jcHAKKyAgcGx1Z2lucy9lZmwvUGx1Z2lu
RGF0YUVmbC5jcHAKKyAgcGx1Z2lucy9lZmwvUGx1Z2luUGFja2FnZUVmbC5jcHAKKyAgcGx1Z2lu
cy9lZmwvUGx1Z2luVmlld0VmbC5jcHAKKyAgcGx1Z2lucy9lZmwvWDExRW1iZWRDb250YWluZXIu
Y3BwCisgIHBsdWdpbnMvZWZsL1gxMVdpbmRvdy5jcHAKKyAgcGx1Z2lucy9ucGFwaS5jcHAKKyAg
cGx1Z2lucy9QbHVnaW5EYXRhYmFzZS5jcHAKKyAgcGx1Z2lucy9QbHVnaW5EZWJ1Zy5jcHAKKyAg
cGx1Z2lucy9QbHVnaW5QYWNrYWdlLmNwcAorICBwbHVnaW5zL1BsdWdpblN0cmVhbS5jcHAKKyAg
cGx1Z2lucy9QbHVnaW5WaWV3LmNwcAogKQogCiBJRiAoV1RGX1BMQVRGT1JNX0NBSVJPKQpkaWZm
IC0tZ2l0IGEvV2ViQ29yZS9DaGFuZ2VMb2cgYi9XZWJDb3JlL0NoYW5nZUxvZwppbmRleCA5OTM0
ZmJmLi5hZTljNDIxIDEwMDY0NAotLS0gYS9XZWJDb3JlL0NoYW5nZUxvZworKysgYi9XZWJDb3Jl
L0NoYW5nZUxvZwpAQCAtMSwzICsxLDE3IEBACisyMDEwLTA4LTI0ICBNYXJpdXN6IEdyemVnb3Jj
enlrICA8bWFyaXVzei5nQHNhbXN1bmcuY29tPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9E
WSAoT09QUyEpLgorCisgICAgICAgIFtFRkxdIEFkZGVkIGZpbGVzIHRvIHBsdWdpbiBzdXBwb3J0
IGluIGVmbCBwb3J0CisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNn
aT9pZD00NDUwNQorCisgICAgICAgICogQ01ha2VMaXN0cy50eHQ6CisgICAgICAgICogQ01ha2VM
aXN0c0VmbC50eHQ6CisgICAgICAgICogcGx1Z2lucy9QbHVnaW5QYWNrYWdlLmNwcDoKKyAgICAg
ICAgKiBwbHVnaW5zL1BsdWdpblZpZXcuY3BwOgorICAgICAgICAoV2ViQ29yZTo6UGx1Z2luVmll
dzo6Y3JlYXRlKToKKyAgICAgICAgKiBwbHVnaW5zL1BsdWdpblZpZXcuaDoKKwogMjAxMC0wOC0x
OSAgQW5kcmVhcyBLbGluZyAgPGFuZHJlYXMua2xpbmdAbm9raWEuY29tPgogCiAgICAgICAgIFJl
dmlld2VkIGJ5IEtlbm5ldGggUm9oZGUgQ2hyaXN0aWFuc2VuLgpkaWZmIC0tZ2l0IGEvV2ViQ29y
ZS9wbHVnaW5zL1BsdWdpblBhY2thZ2UuY3BwIGIvV2ViQ29yZS9wbHVnaW5zL1BsdWdpblBhY2th
Z2UuY3BwCmluZGV4IGJmOTcwZjIuLmYzYjFhZTMgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvcGx1Z2lu
cy9QbHVnaW5QYWNrYWdlLmNwcAorKysgYi9XZWJDb3JlL3BsdWdpbnMvUGx1Z2luUGFja2FnZS5j
cHAKQEAgLTMwOCw3ICszMDgsOCBAQCB2b2lkIFBsdWdpblBhY2thZ2U6OmluaXRpYWxpemVCcm93
c2VyRnVuY3MoKQogfQogI2VuZGlmCiAKLSNpZiBFTkFCTEUoUExVR0lOX1BBQ0tBR0VfU0lNUExF
X0hBU0gpCisvLyAjaWYgRU5BQkxFKFBMVUdJTl9QQUNLQUdFX1NJTVBMRV9IQVNIKQorLy8gaW4g
aGVhZGVyIGFuZCBvdGhlciBmaWxlcyB0aGVyZSBpcyBubyBzdWNoIG1hY3JvLCBzbyBoZXJlIGl0
IGlzIGNvbW1lbnRlZAogdW5zaWduZWQgUGx1Z2luUGFja2FnZTo6aGFzaCgpIGNvbnN0CiB7CiAg
ICAgdW5zaWduZWQgaGFzaENvZGVzW10gPSB7CkBAIC0zMjMsNyArMzI0LDcgQEAgYm9vbCBQbHVn
aW5QYWNrYWdlOjplcXVhbChjb25zdCBQbHVnaW5QYWNrYWdlJiBhLCBjb25zdCBQbHVnaW5QYWNr
YWdlJiBiKQogewogICAgIHJldHVybiBhLm1fZGVzY3JpcHRpb24gPT0gYi5tX2Rlc2NyaXB0aW9u
OwogfQotI2VuZGlmCisvLyAjZW5kaWYKIAogaW50IFBsdWdpblBhY2thZ2U6OmNvbXBhcmVGaWxl
VmVyc2lvbihjb25zdCBQbGF0Zm9ybU1vZHVsZVZlcnNpb24mIGNvbXBhcmVWZXJzaW9uKSBjb25z
dAogewpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9wbHVnaW5zL1BsdWdpblZpZXcuaCBiL1dlYkNvcmUv
cGx1Z2lucy9QbHVnaW5WaWV3LmgKaW5kZXggOWI0NDE5Ny4uYzRhYWE0YSAxMDA2NDQKLS0tIGEv
V2ViQ29yZS9wbHVnaW5zL1BsdWdpblZpZXcuaAorKysgYi9XZWJDb3JlL3BsdWdpbnMvUGx1Z2lu
Vmlldy5oCkBAIC00OCw2ICs0OCw5IEBACiAjaWYgT1MoV0lORE9XUykgJiYgKFBMQVRGT1JNKFFU
KSB8fCBQTEFURk9STShXWCkpCiB0eXBlZGVmIHN0cnVjdCBIV05EX18qIEhXTkQ7CiB0eXBlZGVm
IEhXTkQgUGxhdGZvcm1QbHVnaW5XaWRnZXQ7CisjZWxpZiBQTEFURk9STShFRkwpCitjbGFzcyBY
MTFFbWJlZENvbnRhaW5lcjsKK3R5cGVkZWYgWDExRW1iZWRDb250YWluZXIqIFBsYXRmb3JtUGx1
Z2luV2lkZ2V0OwogI2Vsc2UKIHR5cGVkZWYgUGxhdGZvcm1XaWRnZXQgUGxhdGZvcm1QbHVnaW5X
aWRnZXQ7CiAjaWYgZGVmaW5lZChYUF9NQUNPU1gpICYmIFBMQVRGT1JNKFFUKQpAQCAtNjEsMzQ0
ICs2NCwzNDUgQEAgY2xhc3MgUVBhaW50ZXI7CiAKICNpZiBVU0UoSlNDKQogbmFtZXNwYWNlIEpT
QyB7Ci0gICAgbmFtZXNwYWNlIEJpbmRpbmdzIHsKLSAgICAgICAgY2xhc3MgSW5zdGFuY2U7Ci0g
ICAgfQorbmFtZXNwYWNlIEJpbmRpbmdzIHsKK2NsYXNzIEluc3RhbmNlOworfQogfQogI2VuZGlm
CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKLSAgICBjbGFzcyBFbGVtZW50OwotICAgIGNsYXNzIEZy
YW1lOwotICAgIGNsYXNzIEltYWdlOwotICAgIGNsYXNzIEtleWJvYXJkRXZlbnQ7Ci0gICAgY2xh
c3MgTW91c2VFdmVudDsKLSAgICBjbGFzcyBLVVJMOworY2xhc3MgRWxlbWVudDsKK2NsYXNzIEZy
YW1lOworY2xhc3MgSW1hZ2U7CitjbGFzcyBLZXlib2FyZEV2ZW50OworY2xhc3MgTW91c2VFdmVu
dDsKK2NsYXNzIEtVUkw7CiAjaWYgT1MoV0lORE9XUykgJiYgRU5BQkxFKE5FVFNDQVBFX1BMVUdJ
Tl9BUEkpCi0gICAgY2xhc3MgUGx1Z2luTWVzc2FnZVRocm90dGxlcldpbjsKK2NsYXNzIFBsdWdp
bk1lc3NhZ2VUaHJvdHRsZXJXaW47CiAjZW5kaWYKLSAgICBjbGFzcyBQbHVnaW5QYWNrYWdlOwot
ICAgIGNsYXNzIFBsdWdpblJlcXVlc3Q7Ci0gICAgY2xhc3MgUGx1Z2luU3RyZWFtOwotICAgIGNs
YXNzIFJlc291cmNlRXJyb3I7Ci0gICAgY2xhc3MgUmVzb3VyY2VSZXNwb25zZTsKLQotICAgIGVu
dW0gUGx1Z2luU3RhdHVzIHsKLSAgICAgICAgUGx1Z2luU3RhdHVzQ2FuTm90RmluZFBsdWdpbiwK
LSAgICAgICAgUGx1Z2luU3RhdHVzQ2FuTm90TG9hZFBsdWdpbiwKLSAgICAgICAgUGx1Z2luU3Rh
dHVzTG9hZGVkU3VjY2Vzc2Z1bGx5Ci0gICAgfTsKLQotICAgIGNsYXNzIFBsdWdpblJlcXVlc3Qg
OiBwdWJsaWMgTm9uY29weWFibGUgewotICAgIHB1YmxpYzoKLSAgICAgICAgUGx1Z2luUmVxdWVz
dChjb25zdCBGcmFtZUxvYWRSZXF1ZXN0JiBmcmFtZUxvYWRSZXF1ZXN0LCBib29sIHNlbmROb3Rp
ZmljYXRpb24sIHZvaWQqIG5vdGlmeURhdGEsIGJvb2wgc2hvdWxkQWxsb3dQb3B1cHMpCi0gICAg
ICAgICAgICA6IG1fZnJhbWVMb2FkUmVxdWVzdChmcmFtZUxvYWRSZXF1ZXN0KQotICAgICAgICAg
ICAgLCBtX25vdGlmeURhdGEobm90aWZ5RGF0YSkKLSAgICAgICAgICAgICwgbV9zZW5kTm90aWZp
Y2F0aW9uKHNlbmROb3RpZmljYXRpb24pCi0gICAgICAgICAgICAsIG1fc2hvdWxkQWxsb3dQb3B1
cHMoc2hvdWxkQWxsb3dQb3B1cHMpIHsgfQotICAgIHB1YmxpYzoKLSAgICAgICAgY29uc3QgRnJh
bWVMb2FkUmVxdWVzdCYgZnJhbWVMb2FkUmVxdWVzdCgpIGNvbnN0IHsgcmV0dXJuIG1fZnJhbWVM
b2FkUmVxdWVzdDsgfQotICAgICAgICB2b2lkKiBub3RpZnlEYXRhKCkgY29uc3QgeyByZXR1cm4g
bV9ub3RpZnlEYXRhOyB9Ci0gICAgICAgIGJvb2wgc2VuZE5vdGlmaWNhdGlvbigpIGNvbnN0IHsg
cmV0dXJuIG1fc2VuZE5vdGlmaWNhdGlvbjsgfQotICAgICAgICBib29sIHNob3VsZEFsbG93UG9w
dXBzKCkgY29uc3QgeyByZXR1cm4gbV9zaG91bGRBbGxvd1BvcHVwczsgfQotICAgIHByaXZhdGU6
Ci0gICAgICAgIEZyYW1lTG9hZFJlcXVlc3QgbV9mcmFtZUxvYWRSZXF1ZXN0OwotICAgICAgICB2
b2lkKiBtX25vdGlmeURhdGE7Ci0gICAgICAgIGJvb2wgbV9zZW5kTm90aWZpY2F0aW9uOwotICAg
ICAgICBib29sIG1fc2hvdWxkQWxsb3dQb3B1cHM7Ci0gICAgfTsKLQotICAgIGNsYXNzIFBsdWdp
bk1hbnVhbExvYWRlciB7Ci0gICAgcHVibGljOgotICAgICAgICB2aXJ0dWFsIH5QbHVnaW5NYW51
YWxMb2FkZXIoKSB7fQotICAgICAgICB2aXJ0dWFsIHZvaWQgZGlkUmVjZWl2ZVJlc3BvbnNlKGNv
bnN0IFJlc291cmNlUmVzcG9uc2UmKSA9IDA7Ci0gICAgICAgIHZpcnR1YWwgdm9pZCBkaWRSZWNl
aXZlRGF0YShjb25zdCBjaGFyKiwgaW50KSA9IDA7Ci0gICAgICAgIHZpcnR1YWwgdm9pZCBkaWRG
aW5pc2hMb2FkaW5nKCkgPSAwOwotICAgICAgICB2aXJ0dWFsIHZvaWQgZGlkRmFpbChjb25zdCBS
ZXNvdXJjZUVycm9yJikgPSAwOwotICAgIH07Ci0KLSAgICBjbGFzcyBQbHVnaW5WaWV3IDogcHVi
bGljIFdpZGdldCwgcHJpdmF0ZSBQbHVnaW5TdHJlYW1DbGllbnQsIHB1YmxpYyBQbHVnaW5NYW51
YWxMb2FkZXIsIHByaXZhdGUgSGFsdGFibGVQbHVnaW4sIHByaXZhdGUgTWVkaWFDYW5TdGFydExp
c3RlbmVyIHsKLSAgICBwdWJsaWM6Ci0gICAgICAgIHN0YXRpYyBQYXNzUmVmUHRyPFBsdWdpblZp
ZXc+IGNyZWF0ZShGcmFtZSogcGFyZW50RnJhbWUsIGNvbnN0IEludFNpemUmLCBFbGVtZW50Kiwg
Y29uc3QgS1VSTCYsIGNvbnN0IFZlY3RvcjxTdHJpbmc+JiBwYXJhbU5hbWVzLCBjb25zdCBWZWN0
b3I8U3RyaW5nPiYgcGFyYW1WYWx1ZXMsIGNvbnN0IFN0cmluZyYgbWltZVR5cGUsIGJvb2wgbG9h
ZE1hbnVhbGx5KTsKLSAgICAgICAgdmlydHVhbCB+UGx1Z2luVmlldygpOwotCi0gICAgICAgIFBs
dWdpblBhY2thZ2UqIHBsdWdpbigpIGNvbnN0IHsgcmV0dXJuIG1fcGx1Z2luLmdldCgpOyB9Ci0g
ICAgICAgIE5QUCBpbnN0YW5jZSgpIGNvbnN0IHsgcmV0dXJuIG1faW5zdGFuY2U7IH0KLQotICAg
ICAgICB2b2lkIHNldE5QV2luZG93UmVjdChjb25zdCBJbnRSZWN0Jik7Ci0gICAgICAgIHN0YXRp
YyBQbHVnaW5WaWV3KiBjdXJyZW50UGx1Z2luVmlldygpOworY2xhc3MgUGx1Z2luUGFja2FnZTsK
K2NsYXNzIFBsdWdpblJlcXVlc3Q7CitjbGFzcyBQbHVnaW5TdHJlYW07CitjbGFzcyBSZXNvdXJj
ZUVycm9yOworY2xhc3MgUmVzb3VyY2VSZXNwb25zZTsKKworZW51bSBQbHVnaW5TdGF0dXMgewor
ICAgIFBsdWdpblN0YXR1c0Nhbk5vdEZpbmRQbHVnaW4sCisgICAgUGx1Z2luU3RhdHVzQ2FuTm90
TG9hZFBsdWdpbiwKKyAgICBQbHVnaW5TdGF0dXNMb2FkZWRTdWNjZXNzZnVsbHkKK307CisKK2Ns
YXNzIFBsdWdpblJlcXVlc3QgOiBwdWJsaWMgTm9uY29weWFibGUgeworcHVibGljOgorICAgIFBs
dWdpblJlcXVlc3QoY29uc3QgRnJhbWVMb2FkUmVxdWVzdCYgZnJhbWVMb2FkUmVxdWVzdCwgYm9v
bCBzZW5kTm90aWZpY2F0aW9uLCB2b2lkKiBub3RpZnlEYXRhLCBib29sIHNob3VsZEFsbG93UG9w
dXBzKQorICAgICAgICA6IG1fZnJhbWVMb2FkUmVxdWVzdChmcmFtZUxvYWRSZXF1ZXN0KQorICAg
ICAgICAsIG1fbm90aWZ5RGF0YShub3RpZnlEYXRhKQorICAgICAgICAsIG1fc2VuZE5vdGlmaWNh
dGlvbihzZW5kTm90aWZpY2F0aW9uKQorICAgICAgICAsIG1fc2hvdWxkQWxsb3dQb3B1cHMoc2hv
dWxkQWxsb3dQb3B1cHMpIHsgfQorcHVibGljOgorICAgIGNvbnN0IEZyYW1lTG9hZFJlcXVlc3Qm
IGZyYW1lTG9hZFJlcXVlc3QoKSBjb25zdCB7IHJldHVybiBtX2ZyYW1lTG9hZFJlcXVlc3Q7IH0K
KyAgICB2b2lkKiBub3RpZnlEYXRhKCkgY29uc3QgeyByZXR1cm4gbV9ub3RpZnlEYXRhOyB9Cisg
ICAgYm9vbCBzZW5kTm90aWZpY2F0aW9uKCkgY29uc3QgeyByZXR1cm4gbV9zZW5kTm90aWZpY2F0
aW9uOyB9CisgICAgYm9vbCBzaG91bGRBbGxvd1BvcHVwcygpIGNvbnN0IHsgcmV0dXJuIG1fc2hv
dWxkQWxsb3dQb3B1cHM7IH0KK3ByaXZhdGU6CisgICAgRnJhbWVMb2FkUmVxdWVzdCBtX2ZyYW1l
TG9hZFJlcXVlc3Q7CisgICAgdm9pZCogbV9ub3RpZnlEYXRhOworICAgIGJvb2wgbV9zZW5kTm90
aWZpY2F0aW9uOworICAgIGJvb2wgbV9zaG91bGRBbGxvd1BvcHVwczsKK307CisKK2NsYXNzIFBs
dWdpbk1hbnVhbExvYWRlciB7CitwdWJsaWM6CisgICAgdmlydHVhbCB+UGx1Z2luTWFudWFsTG9h
ZGVyKCkge30KKyAgICB2aXJ0dWFsIHZvaWQgZGlkUmVjZWl2ZVJlc3BvbnNlKGNvbnN0IFJlc291
cmNlUmVzcG9uc2UmKSA9IDA7CisgICAgdmlydHVhbCB2b2lkIGRpZFJlY2VpdmVEYXRhKGNvbnN0
IGNoYXIqLCBpbnQpID0gMDsKKyAgICB2aXJ0dWFsIHZvaWQgZGlkRmluaXNoTG9hZGluZygpID0g
MDsKKyAgICB2aXJ0dWFsIHZvaWQgZGlkRmFpbChjb25zdCBSZXNvdXJjZUVycm9yJikgPSAwOwor
fTsKKworY2xhc3MgUGx1Z2luVmlldyA6IHB1YmxpYyBXaWRnZXQsIHByaXZhdGUgUGx1Z2luU3Ry
ZWFtQ2xpZW50LCBwdWJsaWMgUGx1Z2luTWFudWFsTG9hZGVyLCBwcml2YXRlIEhhbHRhYmxlUGx1
Z2luLCBwcml2YXRlIE1lZGlhQ2FuU3RhcnRMaXN0ZW5lciB7CitwdWJsaWM6CisgICAgc3RhdGlj
IFBhc3NSZWZQdHI8UGx1Z2luVmlldz4gY3JlYXRlKEZyYW1lKiBwYXJlbnRGcmFtZSwgY29uc3Qg
SW50U2l6ZSYsIEVsZW1lbnQqLCBjb25zdCBLVVJMJiwgY29uc3QgVmVjdG9yPFN0cmluZz4mIHBh
cmFtTmFtZXMsIGNvbnN0IFZlY3RvcjxTdHJpbmc+JiBwYXJhbVZhbHVlcywgY29uc3QgU3RyaW5n
JiBtaW1lVHlwZSwgYm9vbCBsb2FkTWFudWFsbHkpOworICAgIHZpcnR1YWwgflBsdWdpblZpZXco
KTsKKworICAgIFBsdWdpblBhY2thZ2UqIHBsdWdpbigpIGNvbnN0IHsgcmV0dXJuIG1fcGx1Z2lu
LmdldCgpOyB9CisgICAgTlBQIGluc3RhbmNlKCkgY29uc3QgeyByZXR1cm4gbV9pbnN0YW5jZTsg
fQorCisgICAgdm9pZCBzZXROUFdpbmRvd1JlY3QoY29uc3QgSW50UmVjdCYpOworICAgIHN0YXRp
YyBQbHVnaW5WaWV3KiBjdXJyZW50UGx1Z2luVmlldygpOwogCiAjaWYgVVNFKEpTQykKLSAgICAg
ICAgUGFzc1JlZlB0cjxKU0M6OkJpbmRpbmdzOjpJbnN0YW5jZT4gYmluZGluZ0luc3RhbmNlKCk7
CisgICAgUGFzc1JlZlB0cjxKU0M6OkJpbmRpbmdzOjpJbnN0YW5jZT4gYmluZGluZ0luc3RhbmNl
KCk7CiAjZW5kaWYKIAotICAgICAgICBQbHVnaW5TdGF0dXMgc3RhdHVzKCkgY29uc3QgeyByZXR1
cm4gbV9zdGF0dXM7IH0KLQotICAgICAgICAvLyBOUE4gZnVuY3Rpb25zCi0gICAgICAgIE5QRXJy
b3IgZ2V0VVJMTm90aWZ5KGNvbnN0IGNoYXIqIHVybCwgY29uc3QgY2hhciogdGFyZ2V0LCB2b2lk
KiBub3RpZnlEYXRhKTsKLSAgICAgICAgTlBFcnJvciBnZXRVUkwoY29uc3QgY2hhciogdXJsLCBj
b25zdCBjaGFyKiB0YXJnZXQpOwotICAgICAgICBOUEVycm9yIHBvc3RVUkxOb3RpZnkoY29uc3Qg
Y2hhciogdXJsLCBjb25zdCBjaGFyKiB0YXJnZXQsIHVpbnQzMl90IGxlbiwgY29uc3QgY2hhciog
YnV0LCBOUEJvb2wgZmlsZSwgdm9pZCogbm90aWZ5RGF0YSk7Ci0gICAgICAgIE5QRXJyb3IgcG9z
dFVSTChjb25zdCBjaGFyKiB1cmwsIGNvbnN0IGNoYXIqIHRhcmdldCwgdWludDMyX3QgbGVuLCBj
b25zdCBjaGFyKiBidXQsIE5QQm9vbCBmaWxlKTsKLSAgICAgICAgTlBFcnJvciBuZXdTdHJlYW0o
TlBNSU1FVHlwZSB0eXBlLCBjb25zdCBjaGFyKiB0YXJnZXQsIE5QU3RyZWFtKiogc3RyZWFtKTsK
LSAgICAgICAgaW50MzJfdCB3cml0ZShOUFN0cmVhbSogc3RyZWFtLCBpbnQzMl90IGxlbiwgdm9p
ZCogYnVmZmVyKTsKLSAgICAgICAgTlBFcnJvciBkZXN0cm95U3RyZWFtKE5QU3RyZWFtKiBzdHJl
YW0sIE5QUmVhc29uIHJlYXNvbik7Ci0gICAgICAgIGNvbnN0IGNoYXIqIHVzZXJBZ2VudCgpOwor
ICAgIFBsdWdpblN0YXR1cyBzdGF0dXMoKSBjb25zdCB7IHJldHVybiBtX3N0YXR1czsgfQorCisg
ICAgLy8gTlBOIGZ1bmN0aW9ucworICAgIE5QRXJyb3IgZ2V0VVJMTm90aWZ5KGNvbnN0IGNoYXIq
IHVybCwgY29uc3QgY2hhciogdGFyZ2V0LCB2b2lkKiBub3RpZnlEYXRhKTsKKyAgICBOUEVycm9y
IGdldFVSTChjb25zdCBjaGFyKiB1cmwsIGNvbnN0IGNoYXIqIHRhcmdldCk7CisgICAgTlBFcnJv
ciBwb3N0VVJMTm90aWZ5KGNvbnN0IGNoYXIqIHVybCwgY29uc3QgY2hhciogdGFyZ2V0LCB1aW50
MzJfdCBsZW4sIGNvbnN0IGNoYXIqIGJ1dCwgTlBCb29sIGZpbGUsIHZvaWQqIG5vdGlmeURhdGEp
OworICAgIE5QRXJyb3IgcG9zdFVSTChjb25zdCBjaGFyKiB1cmwsIGNvbnN0IGNoYXIqIHRhcmdl
dCwgdWludDMyX3QgbGVuLCBjb25zdCBjaGFyKiBidXQsIE5QQm9vbCBmaWxlKTsKKyAgICBOUEVy
cm9yIG5ld1N0cmVhbShOUE1JTUVUeXBlIHR5cGUsIGNvbnN0IGNoYXIqIHRhcmdldCwgTlBTdHJl
YW0qKiBzdHJlYW0pOworICAgIGludDMyX3Qgd3JpdGUoTlBTdHJlYW0qIHN0cmVhbSwgaW50MzJf
dCBsZW4sIHZvaWQqIGJ1ZmZlcik7CisgICAgTlBFcnJvciBkZXN0cm95U3RyZWFtKE5QU3RyZWFt
KiBzdHJlYW0sIE5QUmVhc29uIHJlYXNvbik7CisgICAgY29uc3QgY2hhciogdXNlckFnZW50KCk7
CiAjaWYgRU5BQkxFKE5FVFNDQVBFX1BMVUdJTl9BUEkpCi0gICAgICAgIHN0YXRpYyBjb25zdCBj
aGFyKiB1c2VyQWdlbnRTdGF0aWMoKTsKKyAgICBzdGF0aWMgY29uc3QgY2hhciogdXNlckFnZW50
U3RhdGljKCk7CiAjZW5kaWYKLSAgICAgICAgdm9pZCBzdGF0dXMoY29uc3QgY2hhciogbWVzc2Fn
ZSk7Ci0gICAgICAgIAorICAgIHZvaWQgc3RhdHVzKGNvbnN0IGNoYXIqIG1lc3NhZ2UpOworICAg
IAogI2lmIEVOQUJMRShORVRTQ0FQRV9QTFVHSU5fQVBJKQotICAgICAgICBOUEVycm9yIGdldFZh
bHVlKE5QTlZhcmlhYmxlIHZhcmlhYmxlLCB2b2lkKiB2YWx1ZSk7Ci0gICAgICAgIHN0YXRpYyBO
UEVycm9yIGdldFZhbHVlU3RhdGljKE5QTlZhcmlhYmxlIHZhcmlhYmxlLCB2b2lkKiB2YWx1ZSk7
CisgICAgTlBFcnJvciBnZXRWYWx1ZShOUE5WYXJpYWJsZSB2YXJpYWJsZSwgdm9pZCogdmFsdWUp
OworICAgIHN0YXRpYyBOUEVycm9yIGdldFZhbHVlU3RhdGljKE5QTlZhcmlhYmxlIHZhcmlhYmxl
LCB2b2lkKiB2YWx1ZSk7CiAjZW5kaWYKLSAgICAgICAgTlBFcnJvciBzZXRWYWx1ZShOUFBWYXJp
YWJsZSB2YXJpYWJsZSwgdm9pZCogdmFsdWUpOwotICAgICAgICB2b2lkIGludmFsaWRhdGVSZWN0
KE5QUmVjdCopOwotICAgICAgICB2b2lkIGludmFsaWRhdGVSZWdpb24oTlBSZWdpb24pOwotICAg
ICAgICB2b2lkIGZvcmNlUmVkcmF3KCk7Ci0gICAgICAgIHZvaWQgcHVzaFBvcHVwc0VuYWJsZWRT
dGF0ZShib29sIHN0YXRlKTsKLSAgICAgICAgdm9pZCBwb3BQb3B1cHNFbmFibGVkU3RhdGUoKTsK
KyAgICBOUEVycm9yIHNldFZhbHVlKE5QUFZhcmlhYmxlIHZhcmlhYmxlLCB2b2lkKiB2YWx1ZSk7
CisgICAgdm9pZCBpbnZhbGlkYXRlUmVjdChOUFJlY3QqKTsKKyAgICB2b2lkIGludmFsaWRhdGVS
ZWdpb24oTlBSZWdpb24pOworICAgIHZvaWQgZm9yY2VSZWRyYXcoKTsKKyAgICB2b2lkIHB1c2hQ
b3B1cHNFbmFibGVkU3RhdGUoYm9vbCBzdGF0ZSk7CisgICAgdm9pZCBwb3BQb3B1cHNFbmFibGVk
U3RhdGUoKTsKIAotICAgICAgICB2aXJ0dWFsIHZvaWQgaW52YWxpZGF0ZVJlY3QoY29uc3QgSW50
UmVjdCYpOworICAgIHZpcnR1YWwgdm9pZCBpbnZhbGlkYXRlUmVjdChjb25zdCBJbnRSZWN0Jik7
CiAKLSAgICAgICAgYm9vbCBhcmVQb3B1cHNBbGxvd2VkKCkgY29uc3Q7CisgICAgYm9vbCBhcmVQ
b3B1cHNBbGxvd2VkKCkgY29uc3Q7CiAKLSAgICAgICAgdm9pZCBzZXRKYXZhU2NyaXB0UGF1c2Vk
KGJvb2wpOworICAgIHZvaWQgc2V0SmF2YVNjcmlwdFBhdXNlZChib29sKTsKIAotICAgICAgICB2
b2lkIHByaXZhdGVCcm93c2luZ1N0YXRlQ2hhbmdlZChib29sKTsKKyAgICB2b2lkIHByaXZhdGVC
cm93c2luZ1N0YXRlQ2hhbmdlZChib29sKTsKIAotICAgICAgICB2b2lkIGRpc2Nvbm5lY3RTdHJl
YW0oUGx1Z2luU3RyZWFtKik7Ci0gICAgICAgIHZvaWQgc3RyZWFtRGlkRmluaXNoTG9hZGluZyhQ
bHVnaW5TdHJlYW0qIHN0cmVhbSkgeyBkaXNjb25uZWN0U3RyZWFtKHN0cmVhbSk7IH0KKyAgICB2
b2lkIGRpc2Nvbm5lY3RTdHJlYW0oUGx1Z2luU3RyZWFtKik7CisgICAgdm9pZCBzdHJlYW1EaWRG
aW5pc2hMb2FkaW5nKFBsdWdpblN0cmVhbSogc3RyZWFtKSB7IGRpc2Nvbm5lY3RTdHJlYW0oc3Ry
ZWFtKTsgfQogCi0gICAgICAgIC8vIFdpZGdldCBmdW5jdGlvbnMKLSAgICAgICAgdmlydHVhbCB2
b2lkIHNldEZyYW1lUmVjdChjb25zdCBJbnRSZWN0Jik7Ci0gICAgICAgIHZpcnR1YWwgdm9pZCBm
cmFtZVJlY3RzQ2hhbmdlZCgpOwotICAgICAgICB2aXJ0dWFsIHZvaWQgc2V0Rm9jdXMoYm9vbCk7
Ci0gICAgICAgIHZpcnR1YWwgdm9pZCBzaG93KCk7Ci0gICAgICAgIHZpcnR1YWwgdm9pZCBoaWRl
KCk7Ci0gICAgICAgIHZpcnR1YWwgdm9pZCBwYWludChHcmFwaGljc0NvbnRleHQqLCBjb25zdCBJ
bnRSZWN0Jik7CisgICAgLy8gV2lkZ2V0IGZ1bmN0aW9ucworICAgIHZpcnR1YWwgdm9pZCBzZXRG
cmFtZVJlY3QoY29uc3QgSW50UmVjdCYpOworICAgIHZpcnR1YWwgdm9pZCBmcmFtZVJlY3RzQ2hh
bmdlZCgpOworICAgIHZpcnR1YWwgdm9pZCBzZXRGb2N1cyhib29sKTsKKyAgICB2aXJ0dWFsIHZv
aWQgc2hvdygpOworICAgIHZpcnR1YWwgdm9pZCBoaWRlKCk7CisgICAgdmlydHVhbCB2b2lkIHBh
aW50KEdyYXBoaWNzQ29udGV4dCosIGNvbnN0IEludFJlY3QmKTsKIAotICAgICAgICAvLyBUaGlz
IG1ldGhvZCBpcyB1c2VkIGJ5IHBsdWdpbnMgb24gYWxsIHBsYXRmb3JtcyB0byBvYnRhaW4gYSBj
bGlwIHJlY3QgdGhhdCBpbmNsdWRlcyBjbGlwcyBzZXQgYnkgV2ViQ29yZSwKLSAgICAgICAgLy8g
ZS5nLiwgaW4gb3ZlcmZsb3c6YXV0byBzZWN0aW9ucy4gIFRoZSBjbGlwIHJlY3RzIGNvb3JkaW5h
dGVzIGFyZSBpbiB0aGUgY29udGFpbmluZyB3aW5kb3cncyBjb29yZGluYXRlIHNwYWNlLgotICAg
ICAgICAvLyBUaGlzIGNsaXAgaW5jbHVkZXMgYW55IGNsaXBzIHRoYXQgdGhlIHdpZGdldCBpdHNl
bGYgc2V0cyB1cCBmb3IgaXRzIGNoaWxkcmVuLgotICAgICAgICBJbnRSZWN0IHdpbmRvd0NsaXBS
ZWN0KCkgY29uc3Q7CisgICAgLy8gVGhpcyBtZXRob2QgaXMgdXNlZCBieSBwbHVnaW5zIG9uIGFs
bCBwbGF0Zm9ybXMgdG8gb2J0YWluIGEgY2xpcCByZWN0IHRoYXQgaW5jbHVkZXMgY2xpcHMgc2V0
IGJ5IFdlYkNvcmUsCisgICAgLy8gZS5nLiwgaW4gb3ZlcmZsb3c6YXV0byBzZWN0aW9ucy4gIFRo
ZSBjbGlwIHJlY3RzIGNvb3JkaW5hdGVzIGFyZSBpbiB0aGUgY29udGFpbmluZyB3aW5kb3cncyBj
b29yZGluYXRlIHNwYWNlLgorICAgIC8vIFRoaXMgY2xpcCBpbmNsdWRlcyBhbnkgY2xpcHMgdGhh
dCB0aGUgd2lkZ2V0IGl0c2VsZiBzZXRzIHVwIGZvciBpdHMgY2hpbGRyZW4uCisgICAgSW50UmVj
dCB3aW5kb3dDbGlwUmVjdCgpIGNvbnN0OwogCi0gICAgICAgIHZpcnR1YWwgdm9pZCBoYW5kbGVF
dmVudChFdmVudCopOwotICAgICAgICB2aXJ0dWFsIHZvaWQgc2V0UGFyZW50KFNjcm9sbFZpZXcq
KTsKLSAgICAgICAgdmlydHVhbCB2b2lkIHNldFBhcmVudFZpc2libGUoYm9vbCk7CisgICAgdmly
dHVhbCB2b2lkIGhhbmRsZUV2ZW50KEV2ZW50Kik7CisgICAgdmlydHVhbCB2b2lkIHNldFBhcmVu
dChTY3JvbGxWaWV3Kik7CisgICAgdmlydHVhbCB2b2lkIHNldFBhcmVudFZpc2libGUoYm9vbCk7
CiAKLSAgICAgICAgdmlydHVhbCBib29sIGlzUGx1Z2luVmlldygpIGNvbnN0IHsgcmV0dXJuIHRy
dWU7IH0KKyAgICB2aXJ0dWFsIGJvb2wgaXNQbHVnaW5WaWV3KCkgY29uc3QgeyByZXR1cm4gdHJ1
ZTsgfQogCi0gICAgICAgIEZyYW1lKiBwYXJlbnRGcmFtZSgpIGNvbnN0IHsgcmV0dXJuIG1fcGFy
ZW50RnJhbWUuZ2V0KCk7IH0KKyAgICBGcmFtZSogcGFyZW50RnJhbWUoKSBjb25zdCB7IHJldHVy
biBtX3BhcmVudEZyYW1lLmdldCgpOyB9CiAKLSAgICAgICAgdm9pZCBmb2N1c1BsdWdpbkVsZW1l
bnQoKTsKKyAgICB2b2lkIGZvY3VzUGx1Z2luRWxlbWVudCgpOwogCi0gICAgICAgIGNvbnN0IFN0
cmluZyYgcGx1Z2luc1BhZ2UoKSBjb25zdCB7IHJldHVybiBtX3BsdWdpbnNQYWdlOyB9Ci0gICAg
ICAgIGNvbnN0IFN0cmluZyYgbWltZVR5cGUoKSBjb25zdCB7IHJldHVybiBtX21pbWVUeXBlOyB9
Ci0gICAgICAgIGNvbnN0IEtVUkwmIHVybCgpIGNvbnN0IHsgcmV0dXJuIG1fdXJsOyB9CisgICAg
Y29uc3QgU3RyaW5nJiBwbHVnaW5zUGFnZSgpIGNvbnN0IHsgcmV0dXJuIG1fcGx1Z2luc1BhZ2U7
IH0KKyAgICBjb25zdCBTdHJpbmcmIG1pbWVUeXBlKCkgY29uc3QgeyByZXR1cm4gbV9taW1lVHlw
ZTsgfQorICAgIGNvbnN0IEtVUkwmIHVybCgpIGNvbnN0IHsgcmV0dXJuIG1fdXJsOyB9CiAKICNp
ZiBPUyhXSU5ET1dTKSAmJiBFTkFCTEUoTkVUU0NBUEVfUExVR0lOX0FQSSkKLSAgICAgICAgc3Rh
dGljIExSRVNVTFQgQ0FMTEJBQ0sgUGx1Z2luVmlld1duZFByb2MoSFdORCwgVUlOVCwgV1BBUkFN
LCBMUEFSQU0pOwotICAgICAgICBMUkVTVUxUIHduZFByb2MoSFdORCBoV25kLCBVSU5UIG1lc3Nh
Z2UsIFdQQVJBTSB3UGFyYW0sIExQQVJBTSBsUGFyYW0pOwotICAgICAgICBXTkRQUk9DIHBsdWdp
blduZFByb2MoKSBjb25zdCB7IHJldHVybiBtX3BsdWdpblduZFByb2M7IH0KKyAgICBzdGF0aWMg
TFJFU1VMVCBDQUxMQkFDSyBQbHVnaW5WaWV3V25kUHJvYyhIV05ELCBVSU5ULCBXUEFSQU0sIExQ
QVJBTSk7CisgICAgTFJFU1VMVCB3bmRQcm9jKEhXTkQgaFduZCwgVUlOVCBtZXNzYWdlLCBXUEFS
QU0gd1BhcmFtLCBMUEFSQU0gbFBhcmFtKTsKKyAgICBXTkRQUk9DIHBsdWdpblduZFByb2MoKSBj
b25zdCB7IHJldHVybiBtX3BsdWdpblduZFByb2M7IH0KICNlbmRpZgogCi0gICAgICAgIC8vIFVz
ZWQgZm9yIG1hbnVhbCBsb2FkaW5nCi0gICAgICAgIHZvaWQgZGlkUmVjZWl2ZVJlc3BvbnNlKGNv
bnN0IFJlc291cmNlUmVzcG9uc2UmKTsKLSAgICAgICAgdm9pZCBkaWRSZWNlaXZlRGF0YShjb25z
dCBjaGFyKiwgaW50KTsKLSAgICAgICAgdm9pZCBkaWRGaW5pc2hMb2FkaW5nKCk7Ci0gICAgICAg
IHZvaWQgZGlkRmFpbChjb25zdCBSZXNvdXJjZUVycm9yJik7CisgICAgLy8gVXNlZCBmb3IgbWFu
dWFsIGxvYWRpbmcKKyAgICB2b2lkIGRpZFJlY2VpdmVSZXNwb25zZShjb25zdCBSZXNvdXJjZVJl
c3BvbnNlJik7CisgICAgdm9pZCBkaWRSZWNlaXZlRGF0YShjb25zdCBjaGFyKiwgaW50KTsKKyAg
ICB2b2lkIGRpZEZpbmlzaExvYWRpbmcoKTsKKyAgICB2b2lkIGRpZEZhaWwoY29uc3QgUmVzb3Vy
Y2VFcnJvciYpOwogCi0gICAgICAgIC8vIEhhbHRhYmxlUGx1Z2luCi0gICAgICAgIHZpcnR1YWwg
dm9pZCBoYWx0KCk7Ci0gICAgICAgIHZpcnR1YWwgdm9pZCByZXN0YXJ0KCk7Ci0gICAgICAgIHZp
cnR1YWwgTm9kZSogbm9kZSgpIGNvbnN0OwotICAgICAgICB2aXJ0dWFsIGJvb2wgaXNXaW5kb3dl
ZCgpIGNvbnN0IHsgcmV0dXJuIG1faXNXaW5kb3dlZDsgfQotICAgICAgICB2aXJ0dWFsIFN0cmlu
ZyBwbHVnaW5OYW1lKCkgY29uc3Q7CisgICAgLy8gSGFsdGFibGVQbHVnaW4KKyAgICB2aXJ0dWFs
IHZvaWQgaGFsdCgpOworICAgIHZpcnR1YWwgdm9pZCByZXN0YXJ0KCk7CisgICAgdmlydHVhbCBO
b2RlKiBub2RlKCkgY29uc3Q7CisgICAgdmlydHVhbCBib29sIGlzV2luZG93ZWQoKSBjb25zdCB7
IHJldHVybiBtX2lzV2luZG93ZWQ7IH0KKyAgICB2aXJ0dWFsIFN0cmluZyBwbHVnaW5OYW1lKCkg
Y29uc3Q7CiAKLSAgICAgICAgYm9vbCBpc0hhbHRlZCgpIGNvbnN0IHsgcmV0dXJuIG1faXNIYWx0
ZWQ7IH0KLSAgICAgICAgYm9vbCBoYXNCZWVuSGFsdGVkKCkgY29uc3QgeyByZXR1cm4gbV9oYXNC
ZWVuSGFsdGVkOyB9CisgICAgYm9vbCBpc0hhbHRlZCgpIGNvbnN0IHsgcmV0dXJuIG1faXNIYWx0
ZWQ7IH0KKyAgICBib29sIGhhc0JlZW5IYWx0ZWQoKSBjb25zdCB7IHJldHVybiBtX2hhc0JlZW5I
YWx0ZWQ7IH0KIAotICAgICAgICBzdGF0aWMgYm9vbCBpc0NhbGxpbmdQbHVnaW4oKTsKKyAgICBz
dGF0aWMgYm9vbCBpc0NhbGxpbmdQbHVnaW4oKTsKIAotICAgICAgICBib29sIHN0YXJ0KCk7Cisg
ICAgYm9vbCBzdGFydCgpOwogCiAjaWYgRU5BQkxFKE5FVFNDQVBFX1BMVUdJTl9BUEkpCi0gICAg
ICAgIHN0YXRpYyB2b2lkIGtlZXBBbGl2ZShOUFApOworICAgIHN0YXRpYyB2b2lkIGtlZXBBbGl2
ZShOUFApOwogI2VuZGlmCi0gICAgICAgIHZvaWQga2VlcEFsaXZlKCk7CisgICAgdm9pZCBrZWVw
QWxpdmUoKTsKIAotICAgIHByaXZhdGU6Ci0gICAgICAgIFBsdWdpblZpZXcoRnJhbWUqIHBhcmVu
dEZyYW1lLCBjb25zdCBJbnRTaXplJiwgUGx1Z2luUGFja2FnZSosIEVsZW1lbnQqLCBjb25zdCBL
VVJMJiwgY29uc3QgVmVjdG9yPFN0cmluZz4mIHBhcmFtTmFtZXMsIGNvbnN0IFZlY3RvcjxTdHJp
bmc+JiBwYXJhbVZhbHVlcywgY29uc3QgU3RyaW5nJiBtaW1lVHlwZSwgYm9vbCBsb2FkTWFudWFs
bHkpOworcHJpdmF0ZToKKyAgICBQbHVnaW5WaWV3KEZyYW1lKiBwYXJlbnRGcmFtZSwgY29uc3Qg
SW50U2l6ZSYsIFBsdWdpblBhY2thZ2UqLCBFbGVtZW50KiwgY29uc3QgS1VSTCYsIGNvbnN0IFZl
Y3RvcjxTdHJpbmc+JiBwYXJhbU5hbWVzLCBjb25zdCBWZWN0b3I8U3RyaW5nPiYgcGFyYW1WYWx1
ZXMsIGNvbnN0IFN0cmluZyYgbWltZVR5cGUsIGJvb2wgbG9hZE1hbnVhbGx5KTsKIAotICAgICAg
ICB2b2lkIHNldFBhcmFtZXRlcnMoY29uc3QgVmVjdG9yPFN0cmluZz4mIHBhcmFtTmFtZXMsIGNv
bnN0IFZlY3RvcjxTdHJpbmc+JiBwYXJhbVZhbHVlcyk7Ci0gICAgICAgIGJvb2wgc3RhcnRPckFk
ZFRvVW5zdGFydGVkTGlzdCgpOwotICAgICAgICB2b2lkIGluaXQoKTsKLSAgICAgICAgYm9vbCBw
bGF0Zm9ybVN0YXJ0KCk7Ci0gICAgICAgIHZvaWQgc3RvcCgpOwotICAgICAgICB2b2lkIHBsYXRm
b3JtRGVzdHJveSgpOwotICAgICAgICBzdGF0aWMgdm9pZCBzZXRDdXJyZW50UGx1Z2luVmlldyhQ
bHVnaW5WaWV3Kik7Ci0gICAgICAgIE5QRXJyb3IgbG9hZChjb25zdCBGcmFtZUxvYWRSZXF1ZXN0
JiwgYm9vbCBzZW5kTm90aWZpY2F0aW9uLCB2b2lkKiBub3RpZnlEYXRhKTsKLSAgICAgICAgTlBF
cnJvciBoYW5kbGVQb3N0KGNvbnN0IGNoYXIqIHVybCwgY29uc3QgY2hhciogdGFyZ2V0LCB1aW50
MzJfdCBsZW4sIGNvbnN0IGNoYXIqIGJ1ZiwgYm9vbCBmaWxlLCB2b2lkKiBub3RpZnlEYXRhLCBi
b29sIHNlbmROb3RpZmljYXRpb24sIGJvb2wgYWxsb3dIZWFkZXJzKTsKLSAgICAgICAgTlBFcnJv
ciBoYW5kbGVQb3N0UmVhZEZpbGUoVmVjdG9yPGNoYXI+JiBidWZmZXIsIHVpbnQzMl90IGxlbiwg
Y29uc3QgY2hhciogYnVmKTsKLSAgICAgICAgc3RhdGljIHZvaWQgZnJlZVN0cmluZ0FycmF5KGNo
YXIqKiBzdHJpbmdBcnJheSwgaW50IGxlbmd0aCk7Ci0gICAgICAgIHZvaWQgc2V0Q2FsbGluZ1Bs
dWdpbihib29sKSBjb25zdDsKKyAgICB2b2lkIHNldFBhcmFtZXRlcnMoY29uc3QgVmVjdG9yPFN0
cmluZz4mIHBhcmFtTmFtZXMsIGNvbnN0IFZlY3RvcjxTdHJpbmc+JiBwYXJhbVZhbHVlcyk7Cisg
ICAgYm9vbCBzdGFydE9yQWRkVG9VbnN0YXJ0ZWRMaXN0KCk7CisgICAgdm9pZCBpbml0KCk7Cisg
ICAgYm9vbCBwbGF0Zm9ybVN0YXJ0KCk7CisgICAgdm9pZCBzdG9wKCk7CisgICAgdm9pZCBwbGF0
Zm9ybURlc3Ryb3koKTsKKyAgICBzdGF0aWMgdm9pZCBzZXRDdXJyZW50UGx1Z2luVmlldyhQbHVn
aW5WaWV3Kik7CisgICAgTlBFcnJvciBsb2FkKGNvbnN0IEZyYW1lTG9hZFJlcXVlc3QmLCBib29s
IHNlbmROb3RpZmljYXRpb24sIHZvaWQqIG5vdGlmeURhdGEpOworICAgIE5QRXJyb3IgaGFuZGxl
UG9zdChjb25zdCBjaGFyKiB1cmwsIGNvbnN0IGNoYXIqIHRhcmdldCwgdWludDMyX3QgbGVuLCBj
b25zdCBjaGFyKiBidWYsIGJvb2wgZmlsZSwgdm9pZCogbm90aWZ5RGF0YSwgYm9vbCBzZW5kTm90
aWZpY2F0aW9uLCBib29sIGFsbG93SGVhZGVycyk7CisgICAgTlBFcnJvciBoYW5kbGVQb3N0UmVh
ZEZpbGUoVmVjdG9yPGNoYXI+JiBidWZmZXIsIHVpbnQzMl90IGxlbiwgY29uc3QgY2hhciogYnVm
KTsKKyAgICBzdGF0aWMgdm9pZCBmcmVlU3RyaW5nQXJyYXkoY2hhcioqIHN0cmluZ0FycmF5LCBp
bnQgbGVuZ3RoKTsKKyAgICB2b2lkIHNldENhbGxpbmdQbHVnaW4oYm9vbCkgY29uc3Q7CiAKLSAg
ICAgICAgdm9pZCBpbnZhbGlkYXRlV2luZG93bGVzc1BsdWdpblJlY3QoY29uc3QgSW50UmVjdCYp
OworICAgIHZvaWQgaW52YWxpZGF0ZVdpbmRvd2xlc3NQbHVnaW5SZWN0KGNvbnN0IEludFJlY3Qm
KTsKIAotICAgICAgICB2aXJ0dWFsIHZvaWQgbWVkaWFDYW5TdGFydCgpOworICAgIHZpcnR1YWwg
dm9pZCBtZWRpYUNhblN0YXJ0KCk7CiAKICNpZiBPUyhXSU5ET1dTKSAmJiBFTkFCTEUoTkVUU0NB
UEVfUExVR0lOX0FQSSkKLSAgICAgICAgdm9pZCBwYWludFdpbmRvd2VkUGx1Z2luSW50b0NvbnRl
eHQoR3JhcGhpY3NDb250ZXh0KiwgY29uc3QgSW50UmVjdCYpOwotICAgICAgICBzdGF0aWMgSERD
IFdJTkFQSSBob29rZWRCZWdpblBhaW50KEhXTkQsIFBBSU5UU1RSVUNUKik7Ci0gICAgICAgIHN0
YXRpYyBCT09MIFdJTkFQSSBob29rZWRFbmRQYWludChIV05ELCBjb25zdCBQQUlOVFNUUlVDVCop
OworICAgIHZvaWQgcGFpbnRXaW5kb3dlZFBsdWdpbkludG9Db250ZXh0KEdyYXBoaWNzQ29udGV4
dCosIGNvbnN0IEludFJlY3QmKTsKKyAgICBzdGF0aWMgSERDIFdJTkFQSSBob29rZWRCZWdpblBh
aW50KEhXTkQsIFBBSU5UU1RSVUNUKik7CisgICAgc3RhdGljIEJPT0wgV0lOQVBJIGhvb2tlZEVu
ZFBhaW50KEhXTkQsIGNvbnN0IFBBSU5UU1RSVUNUKik7CiAjZW5kaWYKIAotICAgICAgICBzdGF0
aWMgYm9vbCBwbGF0Zm9ybUdldFZhbHVlU3RhdGljKE5QTlZhcmlhYmxlIHZhcmlhYmxlLCB2b2lk
KiB2YWx1ZSwgTlBFcnJvciogcmVzdWx0KTsKLSAgICAgICAgYm9vbCBwbGF0Zm9ybUdldFZhbHVl
KE5QTlZhcmlhYmxlIHZhcmlhYmxlLCB2b2lkKiB2YWx1ZSwgTlBFcnJvciogcmVzdWx0KTsKKyAg
ICBzdGF0aWMgYm9vbCBwbGF0Zm9ybUdldFZhbHVlU3RhdGljKE5QTlZhcmlhYmxlIHZhcmlhYmxl
LCB2b2lkKiB2YWx1ZSwgTlBFcnJvciogcmVzdWx0KTsKKyAgICBib29sIHBsYXRmb3JtR2V0VmFs
dWUoTlBOVmFyaWFibGUgdmFyaWFibGUsIHZvaWQqIHZhbHVlLCBOUEVycm9yKiByZXN1bHQpOwog
Ci0gICAgICAgIFJlZlB0cjxGcmFtZT4gbV9wYXJlbnRGcmFtZTsKLSAgICAgICAgUmVmUHRyPFBs
dWdpblBhY2thZ2U+IG1fcGx1Z2luOwotICAgICAgICBFbGVtZW50KiBtX2VsZW1lbnQ7Ci0gICAg
ICAgIGJvb2wgbV9pc1N0YXJ0ZWQ7Ci0gICAgICAgIEtVUkwgbV91cmw7Ci0gICAgICAgIEtVUkwg
bV9iYXNlVVJMOwotICAgICAgICBQbHVnaW5TdGF0dXMgbV9zdGF0dXM7Ci0gICAgICAgIFZlY3Rv
cjxJbnRSZWN0PiBtX2ludmFsaWRSZWN0czsKKyAgICBSZWZQdHI8RnJhbWU+IG1fcGFyZW50RnJh
bWU7CisgICAgUmVmUHRyPFBsdWdpblBhY2thZ2U+IG1fcGx1Z2luOworICAgIEVsZW1lbnQqIG1f
ZWxlbWVudDsKKyAgICBib29sIG1faXNTdGFydGVkOworICAgIEtVUkwgbV91cmw7CisgICAgS1VS
TCBtX2Jhc2VVUkw7CisgICAgUGx1Z2luU3RhdHVzIG1fc3RhdHVzOworICAgIFZlY3RvcjxJbnRS
ZWN0PiBtX2ludmFsaWRSZWN0czsKIAotICAgICAgICB2b2lkIHBlcmZvcm1SZXF1ZXN0KFBsdWdp
blJlcXVlc3QqKTsKLSAgICAgICAgdm9pZCBzY2hlZHVsZVJlcXVlc3QoUGx1Z2luUmVxdWVzdCop
OwotICAgICAgICB2b2lkIHJlcXVlc3RUaW1lckZpcmVkKFRpbWVyPFBsdWdpblZpZXc+Kik7Ci0g
ICAgICAgIHZvaWQgaW52YWxpZGF0ZVRpbWVyRmlyZWQoVGltZXI8UGx1Z2luVmlldz4qKTsKLSAg
ICAgICAgVGltZXI8UGx1Z2luVmlldz4gbV9yZXF1ZXN0VGltZXI7Ci0gICAgICAgIFRpbWVyPFBs
dWdpblZpZXc+IG1faW52YWxpZGF0ZVRpbWVyOworICAgIHZvaWQgcGVyZm9ybVJlcXVlc3QoUGx1
Z2luUmVxdWVzdCopOworICAgIHZvaWQgc2NoZWR1bGVSZXF1ZXN0KFBsdWdpblJlcXVlc3QqKTsK
KyAgICB2b2lkIHJlcXVlc3RUaW1lckZpcmVkKFRpbWVyPFBsdWdpblZpZXc+Kik7CisgICAgdm9p
ZCBpbnZhbGlkYXRlVGltZXJGaXJlZChUaW1lcjxQbHVnaW5WaWV3PiopOworICAgIFRpbWVyPFBs
dWdpblZpZXc+IG1fcmVxdWVzdFRpbWVyOworICAgIFRpbWVyPFBsdWdpblZpZXc+IG1faW52YWxp
ZGF0ZVRpbWVyOwogCi0gICAgICAgIHZvaWQgcG9wUG9wdXBzU3RhdGVUaW1lckZpcmVkKFRpbWVy
PFBsdWdpblZpZXc+Kik7Ci0gICAgICAgIFRpbWVyPFBsdWdpblZpZXc+IG1fcG9wUG9wdXBzU3Rh
dGVUaW1lcjsKKyAgICB2b2lkIHBvcFBvcHVwc1N0YXRlVGltZXJGaXJlZChUaW1lcjxQbHVnaW5W
aWV3PiopOworICAgIFRpbWVyPFBsdWdpblZpZXc+IG1fcG9wUG9wdXBzU3RhdGVUaW1lcjsKIAot
ICAgICAgICB2b2lkIGxpZmVTdXBwb3J0VGltZXJGaXJlZChUaW1lcjxQbHVnaW5WaWV3PiopOwot
ICAgICAgICBUaW1lcjxQbHVnaW5WaWV3PiBtX2xpZmVTdXBwb3J0VGltZXI7CisgICAgdm9pZCBs
aWZlU3VwcG9ydFRpbWVyRmlyZWQoVGltZXI8UGx1Z2luVmlldz4qKTsKKyAgICBUaW1lcjxQbHVn
aW5WaWV3PiBtX2xpZmVTdXBwb3J0VGltZXI7CiAKICNpZm5kZWYgTlBfTk9fQ0FSQk9OCi0gICAg
ICAgIGJvb2wgZGlzcGF0Y2hOUEV2ZW50KE5QRXZlbnQmKTsKKyAgICBib29sIGRpc3BhdGNoTlBF
dmVudChOUEV2ZW50Jik7CiAjZW5kaWYKLSAgICAgICAgdm9pZCB1cGRhdGVQbHVnaW5XaWRnZXQo
KTsKLSAgICAgICAgdm9pZCBwYWludE1pc3NpbmdQbHVnaW5JY29uKEdyYXBoaWNzQ29udGV4dCos
IGNvbnN0IEludFJlY3QmKTsKKyAgICB2b2lkIHVwZGF0ZVBsdWdpbldpZGdldCgpOworICAgIHZv
aWQgcGFpbnRNaXNzaW5nUGx1Z2luSWNvbihHcmFwaGljc0NvbnRleHQqLCBjb25zdCBJbnRSZWN0
Jik7CiAKLSAgICAgICAgdm9pZCBoYW5kbGVLZXlib2FyZEV2ZW50KEtleWJvYXJkRXZlbnQqKTsK
LSAgICAgICAgdm9pZCBoYW5kbGVNb3VzZUV2ZW50KE1vdXNlRXZlbnQqKTsKKyAgICB2b2lkIGhh
bmRsZUtleWJvYXJkRXZlbnQoS2V5Ym9hcmRFdmVudCopOworICAgIHZvaWQgaGFuZGxlTW91c2VF
dmVudChNb3VzZUV2ZW50Kik7CiAjaWYgZGVmaW5lZChYUF9VTklYKSAmJiBFTkFCTEUoTkVUU0NB
UEVfUExVR0lOX0FQSSkKLSAgICAgICAgdm9pZCBoYW5kbGVGb2N1c0luRXZlbnQoKTsKLSAgICAg
ICAgdm9pZCBoYW5kbGVGb2N1c091dEV2ZW50KCk7CisgICAgdm9pZCBoYW5kbGVGb2N1c0luRXZl
bnQoKTsKKyAgICB2b2lkIGhhbmRsZUZvY3VzT3V0RXZlbnQoKTsKICNlbmRpZgogCiAjaWYgT1Mo
V0lORE9XUykKLSAgICAgICAgdm9pZCBwYWludEludG9UcmFuc2Zvcm1lZENvbnRleHQoSERDKTsK
LSAgICAgICAgUGFzc1JlZlB0cjxJbWFnZT4gc25hcHNob3QoKTsKKyAgICB2b2lkIHBhaW50SW50
b1RyYW5zZm9ybWVkQ29udGV4dChIREMpOworICAgIFBhc3NSZWZQdHI8SW1hZ2U+IHNuYXBzaG90
KCk7CiAjZW5kaWYKIAotICAgICAgICBpbnQgbV9tb2RlOwotICAgICAgICBpbnQgbV9wYXJhbUNv
dW50OwotICAgICAgICBjaGFyKiogbV9wYXJhbU5hbWVzOwotICAgICAgICBjaGFyKiogbV9wYXJh
bVZhbHVlczsKLSAgICAgICAgU3RyaW5nIG1fcGx1Z2luc1BhZ2U7CisgICAgaW50IG1fbW9kZTsK
KyAgICBpbnQgbV9wYXJhbUNvdW50OworICAgIGNoYXIqKiBtX3BhcmFtTmFtZXM7CisgICAgY2hh
cioqIG1fcGFyYW1WYWx1ZXM7CisgICAgU3RyaW5nIG1fcGx1Z2luc1BhZ2U7CiAKLSAgICAgICAg
U3RyaW5nIG1fbWltZVR5cGU7Ci0gICAgICAgIFdURjo6Q1N0cmluZyBtX3VzZXJBZ2VudDsKKyAg
ICBTdHJpbmcgbV9taW1lVHlwZTsKKyAgICBXVEY6OkNTdHJpbmcgbV91c2VyQWdlbnQ7CiAKLSAg
ICAgICAgTlBQIG1faW5zdGFuY2U7Ci0gICAgICAgIE5QUF90IG1faW5zdGFuY2VTdHJ1Y3Q7Ci0g
ICAgICAgIE5QV2luZG93IG1fbnBXaW5kb3c7CisgICAgTlBQIG1faW5zdGFuY2U7CisgICAgTlBQ
X3QgbV9pbnN0YW5jZVN0cnVjdDsKKyAgICBOUFdpbmRvdyBtX25wV2luZG93OwogCi0gICAgICAg
IFZlY3Rvcjxib29sLCA0PiBtX3BvcHVwU3RhdGVTdGFjazsKKyAgICBWZWN0b3I8Ym9vbCwgND4g
bV9wb3B1cFN0YXRlU3RhY2s7CiAKLSAgICAgICAgSGFzaFNldDxSZWZQdHI8UGx1Z2luU3RyZWFt
PiA+IG1fc3RyZWFtczsKLSAgICAgICAgVmVjdG9yPFBsdWdpblJlcXVlc3QqPiBtX3JlcXVlc3Rz
OworICAgIEhhc2hTZXQ8UmVmUHRyPFBsdWdpblN0cmVhbT4gPiBtX3N0cmVhbXM7CisgICAgVmVj
dG9yPFBsdWdpblJlcXVlc3QqPiBtX3JlcXVlc3RzOwogCi0gICAgICAgIGJvb2wgbV9pc1dpbmRv
d2VkOwotICAgICAgICBib29sIG1faXNUcmFuc3BhcmVudDsKLSAgICAgICAgYm9vbCBtX2hhdmVJ
bml0aWFsaXplZDsKLSAgICAgICAgYm9vbCBtX2lzV2FpdGluZ1RvU3RhcnQ7CisgICAgYm9vbCBt
X2lzV2luZG93ZWQ7CisgICAgYm9vbCBtX2lzVHJhbnNwYXJlbnQ7CisgICAgYm9vbCBtX2hhdmVJ
bml0aWFsaXplZDsKKyAgICBib29sIG1faXNXYWl0aW5nVG9TdGFydDsKIAogI2lmIGRlZmluZWQo
WFBfVU5JWCkKLSAgICAgICAgYm9vbCBtX25lZWRzWEVtYmVkOworICAgIGJvb2wgbV9uZWVkc1hF
bWJlZDsKICNlbmRpZgogCiAjaWYgT1MoV0lORE9XUykgJiYgRU5BQkxFKE5FVFNDQVBFX1BMVUdJ
Tl9BUEkpCi0gICAgICAgIE93blB0cjxQbHVnaW5NZXNzYWdlVGhyb3R0bGVyV2luPiBtX21lc3Nh
Z2VUaHJvdHRsZXI7Ci0gICAgICAgIFdORFBST0MgbV9wbHVnaW5XbmRQcm9jOwotICAgICAgICB1
bnNpZ25lZCBtX2xhc3RNZXNzYWdlOwotICAgICAgICBib29sIG1faXNDYWxsaW5nUGx1Z2luV25k
UHJvYzsKLSAgICAgICAgSERDIG1fd21QcmludEhEQzsKLSAgICAgICAgYm9vbCBtX2hhdmVVcGRh
dGVkUGx1Z2luV2lkZ2V0OworICAgIE93blB0cjxQbHVnaW5NZXNzYWdlVGhyb3R0bGVyV2luPiBt
X21lc3NhZ2VUaHJvdHRsZXI7CisgICAgV05EUFJPQyBtX3BsdWdpblduZFByb2M7CisgICAgdW5z
aWduZWQgbV9sYXN0TWVzc2FnZTsKKyAgICBib29sIG1faXNDYWxsaW5nUGx1Z2luV25kUHJvYzsK
KyAgICBIREMgbV93bVByaW50SERDOworICAgIGJvb2wgbV9oYXZlVXBkYXRlZFBsdWdpbldpZGdl
dDsKICNlbmRpZgogCi0jaWYgKChQTEFURk9STShRVCkgfHwgUExBVEZPUk0oV1gpKSAmJiBPUyhX
SU5ET1dTKSkgfHwgZGVmaW5lZChYUF9NQUNPU1gpCi0gICAgICAgIC8vIE9uIE1hYyBPU1ggYW5k
IFF0L1dpbmRvd3MgdGhlIHBsdWdpbiBkb2VzIG5vdCBoYXZlIGl0cyBvd24gbmF0aXZlIHdpZGdl
dCwKLSAgICAgICAgLy8gYnV0IGlzIHVzaW5nIHRoZSBjb250YWluaW5nIHdpbmRvdyBhcyBpdHMg
cmVmZXJlbmNlIGZvciBwb3NpdGlvbmluZy9wYWludGluZy4KLSAgICAgICAgUGxhdGZvcm1QbHVn
aW5XaWRnZXQgbV93aW5kb3c7CisjaWYgKChQTEFURk9STShRVCkgfHwgUExBVEZPUk0oV1gpKSAm
JiBPUyhXSU5ET1dTKSkgXAorICAgIHx8IGRlZmluZWQoWFBfTUFDT1NYKSB8fCBQTEFURk9STShF
RkwpCisgICAgLy8gT24gTWFjIE9TWCBhbmQgUXQvV2luZG93cyB0aGUgcGx1Z2luIGRvZXMgbm90
IGhhdmUgaXRzIG93biBuYXRpdmUgd2lkZ2V0LAorICAgIC8vIGJ1dCBpcyB1c2luZyB0aGUgY29u
dGFpbmluZyB3aW5kb3cgYXMgaXRzIHJlZmVyZW5jZSBmb3IgcG9zaXRpb25pbmcvcGFpbnRpbmcu
CisgICAgUGxhdGZvcm1QbHVnaW5XaWRnZXQgbV93aW5kb3c7CiBwdWJsaWM6Ci0gICAgICAgIFBs
YXRmb3JtUGx1Z2luV2lkZ2V0IHBsYXRmb3JtUGx1Z2luV2lkZ2V0KCkgY29uc3QgeyByZXR1cm4g
bV93aW5kb3c7IH0KLSAgICAgICAgdm9pZCBzZXRQbGF0Zm9ybVBsdWdpbldpZGdldChQbGF0Zm9y
bVBsdWdpbldpZGdldCB3aWRnZXQpIHsgbV93aW5kb3cgPSB3aWRnZXQ7IH0KKyAgICBQbGF0Zm9y
bVBsdWdpbldpZGdldCBwbGF0Zm9ybVBsdWdpbldpZGdldCgpIGNvbnN0IHsgcmV0dXJuIG1fd2lu
ZG93OyB9CisgICAgdm9pZCBzZXRQbGF0Zm9ybVBsdWdpbldpZGdldChQbGF0Zm9ybVBsdWdpbldp
ZGdldCB3aWRnZXQpIHsgbV93aW5kb3cgPSB3aWRnZXQ7IH0KICNlbHNlCiBwdWJsaWM6Ci0gICAg
ICAgIHZvaWQgc2V0UGxhdGZvcm1QbHVnaW5XaWRnZXQoUGxhdGZvcm1QbHVnaW5XaWRnZXQgd2lk
Z2V0KSB7IHNldFBsYXRmb3JtV2lkZ2V0KHdpZGdldCk7IH0KLSAgICAgICAgUGxhdGZvcm1QbHVn
aW5XaWRnZXQgcGxhdGZvcm1QbHVnaW5XaWRnZXQoKSBjb25zdCB7IHJldHVybiBwbGF0Zm9ybVdp
ZGdldCgpOyB9CisgICAgdm9pZCBzZXRQbGF0Zm9ybVBsdWdpbldpZGdldChQbGF0Zm9ybVBsdWdp
bldpZGdldCB3aWRnZXQpIHsgc2V0UGxhdGZvcm1XaWRnZXQod2lkZ2V0KTsgfQorICAgIFBsYXRm
b3JtUGx1Z2luV2lkZ2V0IHBsYXRmb3JtUGx1Z2luV2lkZ2V0KCkgY29uc3QgeyByZXR1cm4gcGxh
dGZvcm1XaWRnZXQoKTsgfQogI2VuZGlmCiAKIHByaXZhdGU6CiAKICNpZiBkZWZpbmVkKFhQX1VO
SVgpIHx8IE9TKFNZTUJJQU4pCi0gICAgICAgIHZvaWQgc2V0TlBXaW5kb3dJZk5lZWRlZCgpOwor
ICAgIHZvaWQgc2V0TlBXaW5kb3dJZk5lZWRlZCgpOwogI2VsaWYgZGVmaW5lZChYUF9NQUNPU1gp
Ci0gICAgICAgIE5QX0NHQ29udGV4dCBtX25wQ2dDb250ZXh0OwotICAgICAgICBPd25QdHI8VGlt
ZXI8UGx1Z2luVmlldz4gPiBtX251bGxFdmVudFRpbWVyOwotICAgICAgICBOUERyYXdpbmdNb2Rl
bCBtX2RyYXdpbmdNb2RlbDsKLSAgICAgICAgTlBFdmVudE1vZGVsIG1fZXZlbnRNb2RlbDsKLSAg
ICAgICAgQ0dDb250ZXh0UmVmIG1fY29udGV4dFJlZjsKLSAgICAgICAgV2luZG93UmVmIG1fZmFr
ZVdpbmRvdzsKKyAgICBOUF9DR0NvbnRleHQgbV9ucENnQ29udGV4dDsKKyAgICBPd25QdHI8VGlt
ZXI8UGx1Z2luVmlldz4gPiBtX251bGxFdmVudFRpbWVyOworICAgIE5QRHJhd2luZ01vZGVsIG1f
ZHJhd2luZ01vZGVsOworICAgIE5QRXZlbnRNb2RlbCBtX2V2ZW50TW9kZWw7CisgICAgQ0dDb250
ZXh0UmVmIG1fY29udGV4dFJlZjsKKyAgICBXaW5kb3dSZWYgbV9mYWtlV2luZG93OwogI2lmIFBM
QVRGT1JNKFFUKQotICAgICAgICBRUGl4bWFwIG1fcGl4bWFwOworICAgIFFQaXhtYXAgbV9waXht
YXA7CiAjZW5kaWYKIAotICAgICAgICBQb2ludCBtX2xhc3RNb3VzZVBvczsKLSAgICAgICAgdm9p
ZCBzZXROUFdpbmRvd0lmTmVlZGVkKCk7Ci0gICAgICAgIHZvaWQgbnVsbEV2ZW50VGltZXJGaXJl
ZChUaW1lcjxQbHVnaW5WaWV3PiopOwotICAgICAgICBQb2ludCBnbG9iYWxNb3VzZVBvc0ZvclBs
dWdpbigpIGNvbnN0OwotICAgICAgICBQb2ludCBtb3VzZVBvc0ZvclBsdWdpbihNb3VzZUV2ZW50
KiBldmVudCA9IDApIGNvbnN0OworICAgIFBvaW50IG1fbGFzdE1vdXNlUG9zOworICAgIHZvaWQg
c2V0TlBXaW5kb3dJZk5lZWRlZCgpOworICAgIHZvaWQgbnVsbEV2ZW50VGltZXJGaXJlZChUaW1l
cjxQbHVnaW5WaWV3PiopOworICAgIFBvaW50IGdsb2JhbE1vdXNlUG9zRm9yUGx1Z2luKCkgY29u
c3Q7CisgICAgUG9pbnQgbW91c2VQb3NGb3JQbHVnaW4oTW91c2VFdmVudCogZXZlbnQgPSAwKSBj
b25zdDsKICNlbmRpZgogCiAjaWYgZGVmaW5lZChYUF9VTklYKSAmJiBFTkFCTEUoTkVUU0NBUEVf
UExVR0lOX0FQSSkKLSAgICAgICAgYm9vbCBtX2hhc1BlbmRpbmdHZW9tZXRyeUNoYW5nZTsKLSAg
ICAgICAgUGl4bWFwIG1fZHJhd2FibGU7Ci0gICAgICAgIFZpc3VhbCogbV92aXN1YWw7Ci0gICAg
ICAgIENvbG9ybWFwIG1fY29sb3JtYXA7Ci0gICAgICAgIERpc3BsYXkqIG1fcGx1Z2luRGlzcGxh
eTsKKyAgICBib29sIG1faGFzUGVuZGluZ0dlb21ldHJ5Q2hhbmdlOworICAgIFBpeG1hcCBtX2Ry
YXdhYmxlOworICAgIFZpc3VhbCogbV92aXN1YWw7CisgICAgQ29sb3JtYXAgbV9jb2xvcm1hcDsK
KyAgICBEaXNwbGF5KiBtX3BsdWdpbkRpc3BsYXk7CiAKLSAgICAgICAgdm9pZCBpbml0WEV2ZW50
KFhFdmVudCogZXZlbnQpOworICAgIHZvaWQgaW5pdFhFdmVudChYRXZlbnQqIGV2ZW50KTsKICNl
bmRpZgogCiAjaWYgUExBVEZPUk0oUVQpICYmIGRlZmluZWQoTU9aX1BMQVRGT1JNX01BRU1PKSAm
JiAoTU9aX1BMQVRGT1JNX01BRU1PID09IDUpCi0gICAgICAgIFFJbWFnZSBtX2ltYWdlOwotICAg
ICAgICBib29sIG1fcmVuZGVyVG9JbWFnZTsKLSAgICAgICAgdm9pZCBwYWludFVzaW5nSW1hZ2VT
dXJmYWNlRXh0ZW5zaW9uKFFQYWludGVyKiBwYWludGVyLCBjb25zdCBJbnRSZWN0JiBleHBvc2Vk
UmVjdCk7CisgICAgUUltYWdlIG1faW1hZ2U7CisgICAgYm9vbCBtX3JlbmRlclRvSW1hZ2U7Cisg
ICAgdm9pZCBwYWludFVzaW5nSW1hZ2VTdXJmYWNlRXh0ZW5zaW9uKFFQYWludGVyKiBwYWludGVy
LCBjb25zdCBJbnRSZWN0JiBleHBvc2VkUmVjdCk7CiAjZW5kaWYKIAotICAgICAgICBJbnRSZWN0
IG1fY2xpcFJlY3Q7IC8vIFRoZSBjbGlwIHJlY3QgdG8gYXBwbHkgdG8gYSB3aW5kb3dlZCBwbHVn
LWluCi0gICAgICAgIEludFJlY3QgbV93aW5kb3dSZWN0OyAvLyBPdXIgd2luZG93IHJlY3QuCisg
ICAgSW50UmVjdCBtX2NsaXBSZWN0OyAvLyBUaGUgY2xpcCByZWN0IHRvIGFwcGx5IHRvIGEgd2lu
ZG93ZWQgcGx1Zy1pbgorICAgIEludFJlY3QgbV93aW5kb3dSZWN0OyAvLyBPdXIgd2luZG93IHJl
Y3QuCiAKLSAgICAgICAgYm9vbCBtX2xvYWRNYW51YWxseTsKLSAgICAgICAgUmVmUHRyPFBsdWdp
blN0cmVhbT4gbV9tYW51YWxTdHJlYW07CisgICAgYm9vbCBtX2xvYWRNYW51YWxseTsKKyAgICBS
ZWZQdHI8UGx1Z2luU3RyZWFtPiBtX21hbnVhbFN0cmVhbTsKIAotICAgICAgICBib29sIG1faXNK
YXZhU2NyaXB0UGF1c2VkOworICAgIGJvb2wgbV9pc0phdmFTY3JpcHRQYXVzZWQ7CiAKLSAgICAg
ICAgYm9vbCBtX2lzSGFsdGVkOwotICAgICAgICBib29sIG1faGFzQmVlbkhhbHRlZDsKKyAgICBi
b29sIG1faXNIYWx0ZWQ7CisgICAgYm9vbCBtX2hhc0JlZW5IYWx0ZWQ7CiAKLSAgICAgICAgYm9v
bCBtX2hhdmVDYWxsZWRTZXRXaW5kb3c7CisgICAgYm9vbCBtX2hhdmVDYWxsZWRTZXRXaW5kb3c7
CiAKLSAgICAgICAgc3RhdGljIFBsdWdpblZpZXcqIHNfY3VycmVudFBsdWdpblZpZXc7Ci0gICAg
fTsKKyAgICBzdGF0aWMgUGx1Z2luVmlldyogc19jdXJyZW50UGx1Z2luVmlldzsKK307CiAKIH0g
Ly8gbmFtZXNwYWNlIFdlYkNvcmUKIApkaWZmIC0tZ2l0IGEvV2ViQ29yZS9wbHVnaW5zL2VmbC9Q
bHVnaW5EYXRhRWZsLmNwcCBiL1dlYkNvcmUvcGx1Z2lucy9lZmwvUGx1Z2luRGF0YUVmbC5jcHAK
bmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjk3N2Q2NAotLS0gL2Rldi9udWxs
CisrKyBiL1dlYkNvcmUvcGx1Z2lucy9lZmwvUGx1Z2luRGF0YUVmbC5jcHAKQEAgLTAsMCArMSw2
OCBAQAorLyoKKyAgICBDb3B5cmlnaHQgKEMpIDIwMDYsIDIwMDcgQXBwbGUgSW5jLiAgQWxsIHJp
Z2h0cyByZXNlcnZlZC4KKyAgICBDb3B5cmlnaHQgKEMpIDIwMDggVHJvbGx0ZWNoIEFTQQorICAg
IENvcHlyaWdodCAoQykgMjAwOCBDb2xsYWJvcmEgTHRkLiBBbGwgcmlnaHRzIHJlc2VydmVkLgor
ICAgIENvcHlyaWdodCAoQykgMjAwOCBJTmRUIC0gSW5zdGl0dXRvIE5va2lhIGRlIFRlY25vbG9n
aWEKKyAgICBDb3B5cmlnaHQgKEMpIDIwMDktMjAxMCBQcm9GVVNJT04gZW1iZWRkZWQgc3lzdGVt
cworICAgIENvcHlyaWdodCAoQykgMjAwOS0yMDEwIFNhbXN1bmcgRWxlY3Ryb25pY3MKKworICAg
IFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBh
bmQvb3IKKyAgICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBH
ZW5lcmFsIFB1YmxpYworICAgIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3
YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICAgIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3Ig
KGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKworICAgIFRoaXMgbGlicmFyeSBp
cyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICAgIGJ1
dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5
IG9mCisgICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQ
T1NFLiAgU2VlIHRoZSBHTlUKKyAgICBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9y
IG1vcmUgZGV0YWlscy4KKworICAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2Yg
dGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAgICBhbG9uZyB3aXRoIHRo
aXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bwor
ICAgIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVl
dCwgRmlmdGggRmxvb3IsCisgICAgQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisqLworCisj
aW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiUGx1Z2luRGF0YS5oIgorCisjaW5jbHVkZSAi
UGx1Z2luRGF0YWJhc2UuaCIKKyNpbmNsdWRlICJQbHVnaW5QYWNrYWdlLmgiCisKK25hbWVzcGFj
ZSBXZWJDb3JlIHsKKwordm9pZCBQbHVnaW5EYXRhOjppbml0UGx1Z2lucygpCit7CisgICAgUGx1
Z2luRGF0YWJhc2UqIGRiID0gUGx1Z2luRGF0YWJhc2U6Omluc3RhbGxlZFBsdWdpbnMoKTsKKyAg
ICBjb25zdCBWZWN0b3I8UGx1Z2luUGFja2FnZSo+ICZwbHVnaW5zID0gZGItPnBsdWdpbnMoKTsK
KworICAgIGZvciAodW5zaWduZWQgaW50IGkgPSAwOyBpIDwgcGx1Z2lucy5zaXplKCk7ICsraSkg
eworICAgICAgICBQbHVnaW5JbmZvIGluZm87CisgICAgICAgIFBsdWdpblBhY2thZ2UqIHBhY2th
Z2UgPSBwbHVnaW5zW2ldOworCisgICAgICAgIGluZm8ubmFtZSA9IHBhY2thZ2UtPm5hbWUoKTsK
KyAgICAgICAgaW5mby5maWxlID0gcGFja2FnZS0+ZmlsZU5hbWUoKTsKKyAgICAgICAgaW5mby5k
ZXNjID0gcGFja2FnZS0+ZGVzY3JpcHRpb24oKTsKKworICAgICAgICBjb25zdCBNSU1FVG9EZXNj
cmlwdGlvbnNNYXAmIG1pbWVUb0Rlc2NyaXB0aW9ucyA9IHBhY2thZ2UtPm1pbWVUb0Rlc2NyaXB0
aW9ucygpOworICAgICAgICBNSU1FVG9EZXNjcmlwdGlvbnNNYXA6OmNvbnN0X2l0ZXJhdG9yIGVu
ZCA9IG1pbWVUb0Rlc2NyaXB0aW9ucy5lbmQoKTsKKyAgICAgICAgZm9yIChNSU1FVG9EZXNjcmlw
dGlvbnNNYXA6OmNvbnN0X2l0ZXJhdG9yIGl0ID0gbWltZVRvRGVzY3JpcHRpb25zLmJlZ2luKCk7
IGl0ICE9IGVuZDsgKytpdCkgeworICAgICAgICAgICAgTWltZUNsYXNzSW5mbyBtaW1lOworICAg
ICAgICAgICAgCisgICAgICAgICAgICBtaW1lLnR5cGUgPSBpdC0+Zmlyc3Q7CisgICAgICAgICAg
ICBtaW1lLmRlc2MgPSBpdC0+c2Vjb25kOworCisgICAgICAgICAgICBWZWN0b3I8U3RyaW5nPiBl
eHRlbnNpb25zID0gcGFja2FnZS0+bWltZVRvRXh0ZW5zaW9ucygpLmdldChtaW1lLnR5cGUpOwor
ICAgICAgICAgICAgaW5mby5taW1lcy5hcHBlbmQobWltZSk7CisgICAgICAgIH0KKworICAgICAg
ICBtX3BsdWdpbnMuYXBwZW5kKGluZm8pOworICAgIH0KK30KKwordm9pZCBQbHVnaW5EYXRhOjpy
ZWZyZXNoKCkKK3sKKyAgICBQbHVnaW5EYXRhYmFzZSogZGIgPSBQbHVnaW5EYXRhYmFzZTo6aW5z
dGFsbGVkUGx1Z2lucygpOworICAgIGRiLT5yZWZyZXNoKCk7Cit9CisKK307CmRpZmYgLS1naXQg
YS9XZWJDb3JlL3BsdWdpbnMvZWZsL1BsdWdpblBhY2thZ2VFZmwuY3BwIGIvV2ViQ29yZS9wbHVn
aW5zL2VmbC9QbHVnaW5QYWNrYWdlRWZsLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAw
MDAwMDAwLi40ZWViYzllCi0tLSAvZGV2L251bGwKKysrIGIvV2ViQ29yZS9wbHVnaW5zL2VmbC9Q
bHVnaW5QYWNrYWdlRWZsLmNwcApAQCAtMCwwICsxLDE3MyBAQAorLyoKKyAqIENvcHlyaWdodCAo
QykgMjAwNiwgMjAwNyBBcHBsZSBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJp
Z2h0IChDKSAyMDA4IENvbGxhYm9yYSBMdGQuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5
cmlnaHQgKEMpIDIwMDggTnVhbnRpIEx0ZC4KKyAqIENvcHlyaWdodCAoQykgMjAwOCBJTmRUIC0g
SW5zdGl0dXRvIE5va2lhIGRlIFRlY25vbG9naWEKKyAqIENvcHlyaWdodCAoQykgMjAwOS0yMDEw
IFByb0ZVU0lPTiBlbWJlZGRlZCBzeXN0ZW1zCisgKiBDb3B5cmlnaHQgKEMpIDIwMDktMjAxMCBT
YW1zdW5nIEVsZWN0cm9uaWNzCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3Vy
Y2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFy
ZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFy
ZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4g
dGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGlu
IGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92
aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9W
SURFRCBCWSBBUFBMRSBDT01QVVRFUiwgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVT
UyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBU
SEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1Mg
Rk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5U
IFNIQUxMIEFQUExFIENPTVBVVEVSLCBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxF
IEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1Q
TEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExP
U1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9O
KSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVU
SEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5H
IE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBV
U0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJ
VFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUg
IlBsdWdpblBhY2thZ2UuaCIKKworI2luY2x1ZGUgIk1JTUVUeXBlUmVnaXN0cnkuaCIKKyNpbmNs
dWRlICJOb3RJbXBsZW1lbnRlZC5oIgorI2luY2x1ZGUgIlBsdWdpbkRhdGFiYXNlLmgiCisjaW5j
bHVkZSAiUGx1Z2luRGVidWcuaCIKKyNpbmNsdWRlICJucHJ1bnRpbWVfaW1wbC5oIgorCisjaW5j
bHVkZSA8RWluYS5oPgorI2luY2x1ZGUgPGRsZmNuLmg+CisjaW5jbHVkZSA8d3RmL3RleHQvQ1N0
cmluZy5oPgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK3R5cGVkZWYgY2hhciogKCpOUFBfR2V0
TUlNRURlc2NyaXB0aW9uUHJvY1B0cikoKTsKKworYm9vbCBQbHVnaW5QYWNrYWdlOjpmZXRjaElu
Zm8oKQoreworI2lmIGRlZmluZWQoWFBfVU5JWCkKKyAgICBjb25zdCBjaGFyICplcnJtc2c7CisK
KyAgICBpZiAoIWxvYWQoKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgTlBQX0dldFZh
bHVlUHJvY1B0ciBnZXRWYWx1ZSA9IDA7CisgICAgTlBQX0dldE1JTUVEZXNjcmlwdGlvblByb2NQ
dHIgZ2V0TUlNRURlc2NyaXB0aW9uID0gMDsKKworICAgIGdldFZhbHVlID0gKE5QUF9HZXRWYWx1
ZVByb2NQdHIpZGxzeW0obV9tb2R1bGUsICJOUF9HZXRWYWx1ZSIpOworICAgIGlmICgoZXJybXNn
ID0gZGxlcnJvcigpKSkgeworICAgICAgICBFSU5BX0xPR19FUlIoIkNvdWxkIG5vdCBnZXQgc3lt
Ym9sIE5QX0dldFZhbHVlOiAlcyIsIGVycm1zZyk7CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAg
ICB9CisKKyAgICBnZXRNSU1FRGVzY3JpcHRpb24gPSAoTlBQX0dldE1JTUVEZXNjcmlwdGlvblBy
b2NQdHIpZGxzeW0obV9tb2R1bGUsICJOUF9HZXRNSU1FRGVzY3JpcHRpb24iKTsKKyAgICBpZiAo
KGVycm1zZyA9IGRsZXJyb3IoKSkpIHsKKyAgICAgICAgRUlOQV9MT0dfRVJSKCJDb3VsZCBub3Qg
Z2V0IHN5bWJvbCBOUF9HZXRNSU1FRGVzY3JpcHRpb246ICVzIiwgZXJybXNnKTsKKyAgICAgICAg
cmV0dXJuIGZhbHNlOworICAgIH0KKworICAgIGNoYXIqIGJ1ZmZlciA9IDA7CisgICAgTlBFcnJv
ciBlcnIgPSBnZXRWYWx1ZSgwLCBOUFBWcGx1Z2luTmFtZVN0cmluZywgKHZvaWQqKSAmYnVmZmVy
KTsKKyAgICBpZiAoZXJyICE9IE5QRVJSX05PX0VSUk9SKQorICAgICAgICByZXR1cm4gZmFsc2U7
CisgICAgbV9uYW1lID0gYnVmZmVyOworCisgICAgYnVmZmVyID0gMDsKKyAgICBlcnIgPSBnZXRW
YWx1ZSgwLCBOUFBWcGx1Z2luRGVzY3JpcHRpb25TdHJpbmcsICh2b2lkKikgJmJ1ZmZlcik7Cisg
ICAgaWYgKGVyciAhPSBOUEVSUl9OT19FUlJPUikKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAg
IG1fZGVzY3JpcHRpb24gPSBidWZmZXI7CisgICAgZGV0ZXJtaW5lTW9kdWxlVmVyc2lvbkZyb21E
ZXNjcmlwdGlvbigpOworCisgICAgU3RyaW5nIGRlc2NyaXB0aW9uID0gZ2V0TUlNRURlc2NyaXB0
aW9uKCk7CisKKyAgICBWZWN0b3I8U3RyaW5nPiB0eXBlczsKKyAgICBkZXNjcmlwdGlvbi5zcGxp
dChVQ2hhcignOycpLCBmYWxzZSwgdHlwZXMpOworCisgICAgZm9yIChpbnQgaSA9IDA7IGkgPCB0
eXBlcy5zaXplKCk7ICsraSkgeworICAgICAgICBWZWN0b3I8U3RyaW5nPiBtaW1lOworICAgICAg
ICB0eXBlc1tpXS5zcGxpdChVQ2hhcignOicpLCB0cnVlLCBtaW1lKTsKKworICAgICAgICBpZiAo
bWltZS5zaXplKCkgPiAwKSB7CisgICAgICAgICAgICBWZWN0b3I8U3RyaW5nPiBleHRzOworCisg
ICAgICAgICAgICBpZiAobWltZS5zaXplKCkgPiAxKQorICAgICAgICAgICAgICAgIG1pbWVbMV0u
c3BsaXQoVUNoYXIoJywnKSwgZmFsc2UsIGV4dHMpOworCisgICAgICAgICAgICBkZXRlcm1pbmVR
dWlya3MobWltZVswXSk7CisgICAgICAgICAgICBtX21pbWVUb0V4dGVuc2lvbnMuYWRkKG1pbWVb
MF0sIGV4dHMpOworCisgICAgICAgICAgICBpZiAobWltZS5zaXplKCkgPiAyKQorICAgICAgICAg
ICAgICAgIG1fbWltZVRvRGVzY3JpcHRpb25zLmFkZChtaW1lWzBdLCBtaW1lWzJdKTsKKyAgICAg
ICAgfQorICAgIH0KKworICAgIHJldHVybiB0cnVlOworI2Vsc2UKKyAgICBub3RJbXBsZW1lbnRl
ZCgpOworICAgIHJldHVybiB0cnVlOworI2VuZGlmCit9CisKK3VpbnQxNl90IFBsdWdpblBhY2th
Z2U6Ok5QVmVyc2lvbigpIGNvbnN0Cit7CisgICAgcmV0dXJuIE5QVkVSU19IQVNfUExVR0lOX1RI
UkVBRF9BU1lOQ19DQUxMOworfQorCitib29sIFBsdWdpblBhY2thZ2U6OmxvYWQoKQoreworICAg
IGNoYXIqIGVycm1zZzsKKworICAgIGlmIChtX2lzTG9hZGVkKSB7CisgICAgICAgIG1fbG9hZENv
dW50Kys7CisgICAgICAgIHJldHVybiB0cnVlOworICAgIH0KKworICAgIG1fbW9kdWxlID0gZGxv
cGVuKG1fcGF0aC51dGY4KCkuZGF0YSgpLCBSVExEX0xBWlkgfCBSVExEX0xPQ0FMKTsKKyAgICBp
ZiAoKGVycm1zZyA9IGRsZXJyb3IoKSkpIHsKKyAgICAgICAgRUlOQV9MT0dfV0FSTigiJXMgbm90
IGxvYWRlZDogJXMiLCBtX3BhdGgudXRmOCgpLmRhdGEoKSwgZXJybXNnKTsKKyAgICAgICAgcmV0
dXJuIGZhbHNlOworICAgIH0KKworICAgIG1faXNMb2FkZWQgPSB0cnVlOworCisgICAgTlBfSW5p
dGlhbGl6ZUZ1bmNQdHIgaW5pdGlhbGl6ZTsKKyAgICBOUEVycm9yIGVycjsKKworICAgIGluaXRp
YWxpemUgPSAoTlBfSW5pdGlhbGl6ZUZ1bmNQdHIpZGxzeW0obV9tb2R1bGUsICJOUF9Jbml0aWFs
aXplIik7CisgICAgaWYgKChlcnJtc2cgPSBkbGVycm9yKCkpKSB7CisgICAgICAgIEVJTkFfTE9H
X0VSUigiQ291bGQgbm90IGdldCBzeW1ib2wgTlBfSW5pdGlhbGl6ZTogJXMiLCBlcnJtc2cpOwor
ICAgICAgICBnb3RvIGFib3J0OworICAgIH0KKworICAgIG1fTlBQX1NodXRkb3duID0gKE5QUF9T
aHV0ZG93blByb2NQdHIpZGxzeW0obV9tb2R1bGUsICJOUF9TaHV0ZG93biIpOworICAgIGlmICgo
ZXJybXNnID0gZGxlcnJvcigpKSkgeworICAgICAgICBFSU5BX0xPR19FUlIoIkNvdWxkIG5vdCBn
ZXQgc3ltYm9sIE5QX1NodXRkb3duOiAlcyIsIGVycm1zZyk7CisgICAgICAgIGdvdG8gYWJvcnQ7
CisgICAgfQorCisgICAgbWVtc2V0KCZtX3BsdWdpbkZ1bmNzLCAwLCBzaXplb2YobV9wbHVnaW5G
dW5jcykpOworICAgIG1fcGx1Z2luRnVuY3Muc2l6ZSA9IHNpemVvZihtX3BsdWdpbkZ1bmNzKTsK
KworICAgIGluaXRpYWxpemVCcm93c2VyRnVuY3MoKTsKKworI2lmIGRlZmluZWQoWFBfVU5JWCkK
KyAgICBlcnIgPSBpbml0aWFsaXplKCZtX2Jyb3dzZXJGdW5jcywgJm1fcGx1Z2luRnVuY3MpOwor
I2Vsc2UKKyAgICBlcnIgPSBpbml0aWFsaXplKCZtX2Jyb3dzZXJGdW5jcyk7CisjZW5kaWYKKyAg
ICBpZiAoZXJyICE9IE5QRVJSX05PX0VSUk9SKQorICAgICAgICBnb3RvIGFib3J0OworCisgICAg
bV9sb2FkQ291bnQrKzsKKyAgICByZXR1cm4gdHJ1ZTsKKworYWJvcnQ6CisgICAgRUlOQV9MT0df
REJHKCJmYWlsZWQgdG8gbG9hZCBwbHVnaW4sIHVubG9hZCBpdCB3aXRob3V0IHNodXR0aW5nIGl0
IGRvd24uIik7CisgICAgdW5sb2FkV2l0aG91dFNodXRkb3duKCk7CisgICAgcmV0dXJuIGZhbHNl
OworfQorCit9CmRpZmYgLS1naXQgYS9XZWJDb3JlL3BsdWdpbnMvZWZsL1BsdWdpblZpZXdFZmwu
Y3BwIGIvV2ViQ29yZS9wbHVnaW5zL2VmbC9QbHVnaW5WaWV3RWZsLmNwcApuZXcgZmlsZSBtb2Rl
IDEwMDY0NAppbmRleCAwMDAwMDAwLi40MDY1ZGQ1Ci0tLSAvZGV2L251bGwKKysrIGIvV2ViQ29y
ZS9wbHVnaW5zL2VmbC9QbHVnaW5WaWV3RWZsLmNwcApAQCAtMCwwICsxLDUzMiBAQAorLyoKKyAq
IENvcHlyaWdodCAoQykgMjAwNiwgMjAwNyBBcHBsZSBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVk
LgorICogQ29weXJpZ2h0IChDKSAyMDA4IENvbGxhYm9yYSBMdGQuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDggSU5kVCAtIEluc3RpdHV0byBOb2tpYSBkZSBUZWNu
b2xvZ2lhCisgKiBDb3B5cmlnaHQgKEMpIDIwMDktMjAxMCBQcm9GVVNJT04gZW1iZWRkZWQgc3lz
dGVtcworICogQ29weXJpZ2h0IChDKSAyMDA5LTIwMTAgU2Ftc3VuZyBFbGVjdHJvbmljcworICoK
KyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdp
dGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRo
YXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmli
dXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJv
ZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVu
dGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0
aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQ09NUFVURVIs
IElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVT
LCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJ
RVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBV
UlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBDT01QVVRFUiwg
SU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJF
Q1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwg
REFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBP
RiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAq
IFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9O
IEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNU
IExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lT
RSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJF
LCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICov
CisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJQbHVnaW5WaWV3LmgiCisKKyNpbmNs
dWRlICJEb2N1bWVudC5oIgorI2luY2x1ZGUgIkRvY3VtZW50TG9hZGVyLmgiCisjaW5jbHVkZSAi
RWxlbWVudC5oIgorI2luY2x1ZGUgIkZyYW1lLmgiCisjaW5jbHVkZSAiRnJhbWVMb2FkUmVxdWVz
dC5oIgorI2luY2x1ZGUgIkZyYW1lTG9hZGVyLmgiCisjaW5jbHVkZSAiRnJhbWVUcmVlLmgiCisj
aW5jbHVkZSAiRnJhbWVWaWV3LmgiCisjaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0LmgiCisjaW5j
bHVkZSAiSFRNTE5hbWVzLmgiCisjaW5jbHVkZSAiSFRNTFBsdWdJbkVsZW1lbnQuaCIKKyNpbmNs
dWRlICJIb3N0V2luZG93LmgiCisjaW5jbHVkZSAiSW1hZ2UuaCIKKyNpbmNsdWRlICJJbnRSZWN0
LmgiCisjaW5jbHVkZSAiSlNET01CaW5kaW5nLmgiCisjaW5jbHVkZSAiS2V5Ym9hcmRFdmVudC5o
IgorI2luY2x1ZGUgIk1vdXNlRXZlbnQuaCIKKyNpbmNsdWRlICJOb3RJbXBsZW1lbnRlZC5oIgor
I2luY2x1ZGUgIlBhZ2UuaCIKKyNpbmNsdWRlICJQbGF0Zm9ybU1vdXNlRXZlbnQuaCIKKyNpbmNs
dWRlICJQbGF0Zm9ybVdoZWVsRXZlbnQuaCIKKyNpbmNsdWRlICJQbHVnaW5EZWJ1Zy5oIgorI2lu
Y2x1ZGUgIlBsdWdpblBhY2thZ2UuaCIKKyNpbmNsdWRlICJSZW5kZXJMYXllci5oIgorI2luY2x1
ZGUgIlNjcmlwdENvbnRyb2xsZXIuaCIKKyNpbmNsdWRlICJTZXR0aW5ncy5oIgorI2luY2x1ZGUg
IlgxMUVtYmVkQ29udGFpbmVyLmgiCisjaW5jbHVkZSAiWDExV2luZG93LmgiCisjaW5jbHVkZSAi
bnBydW50aW1lX2ltcGwuaCIKKyNpbmNsdWRlICJydW50aW1lL0pTTG9jay5oIgorI2luY2x1ZGUg
InJ1bnRpbWUvSlNWYWx1ZS5oIgorI2luY2x1ZGUgInJ1bnRpbWVfcm9vdC5oIgorCisjaW5jbHVk
ZSA8RWNvcmVfRXZhcy5oPgorI2luY2x1ZGUgPEVjb3JlX1guaD4KKyNpbmNsdWRlIDxFdmFzLmg+
CisKKyNpbmNsdWRlIDx3dGYvUmVmQ291bnRlZC5oPgorI2luY2x1ZGUgPHd0Zi9SZWZQdHIuaD4K
KwordXNpbmcgSlNDOjpFeGVjU3RhdGU7Cit1c2luZyBKU0M6OkludGVycHJldGVyOwordXNpbmcg
SlNDOjpKU0xvY2s7Cit1c2luZyBKU0M6OkpTT2JqZWN0OwordXNpbmcgSlNDOjpVU3RyaW5nOwor
Cit1c2luZyBuYW1lc3BhY2Ugc3RkOwordXNpbmcgbmFtZXNwYWNlIFdURjsKK3VzaW5nIG5hbWVz
cGFjZSBXZWJDb3JlOworCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK3VzaW5nIG5hbWVzcGFjZSBI
VE1MTmFtZXM7CisKK2Jvb2wgUGx1Z2luVmlldzo6ZGlzcGF0Y2hOUEV2ZW50KE5QRXZlbnQmIGV2
ZW50KQoreworICAgIGlmICghbV9wbHVnaW4tPnBsdWdpbkZ1bmNzKCktPmV2ZW50KQorICAgICAg
ICByZXR1cm4gZmFsc2U7CisKKyAgICBQbHVnaW5WaWV3OjpzZXRDdXJyZW50UGx1Z2luVmlldyh0
aGlzKTsKKyAgICBKU0M6OkpTTG9jazo6RHJvcEFsbExvY2tzIGRyb3BBbGxMb2NrcyhmYWxzZSk7
CisgICAgc2V0Q2FsbGluZ1BsdWdpbih0cnVlKTsKKworICAgIGJvb2wgYWNjZXB0ZWQgPSBtX3Bs
dWdpbi0+cGx1Z2luRnVuY3MoKS0+ZXZlbnQobV9pbnN0YW5jZSwgJmV2ZW50KTsKKworICAgIHNl
dENhbGxpbmdQbHVnaW4oZmFsc2UpOworICAgIFBsdWdpblZpZXc6OnNldEN1cnJlbnRQbHVnaW5W
aWV3KDApOworICAgIHJldHVybiBhY2NlcHRlZDsKK30KKwordm9pZCBQbHVnaW5WaWV3OjpoYWx0
KCkKK3sKKyAgICBub3RJbXBsZW1lbnRlZCgpOworfQorCit2b2lkIFBsdWdpblZpZXc6OmhhbmRs
ZUZvY3VzSW5FdmVudCgpCit7CisgICAgbm90SW1wbGVtZW50ZWQoKTsKK30KKwordm9pZCBQbHVn
aW5WaWV3OjpoYW5kbGVGb2N1c091dEV2ZW50KCkKK3sKKyAgICBub3RJbXBsZW1lbnRlZCgpOwor
fQorCit2b2lkIFBsdWdpblZpZXc6OnJlc3RhcnQoKQoreworICAgIG5vdEltcGxlbWVudGVkKCk7
Cit9CisKK3ZvaWQgUGx1Z2luVmlldzo6aGFuZGxlS2V5Ym9hcmRFdmVudChLZXlib2FyZEV2ZW50
KikKK3sKKyAgICBub3RJbXBsZW1lbnRlZCgpOworfQorCit2b2lkIFBsdWdpblZpZXc6OmhhbmRs
ZU1vdXNlRXZlbnQoTW91c2VFdmVudCogZXZlbnQpCit7CisgICAgTlBFdmVudCB4ZXZlbnQ7CisK
KyNpZiBkZWZpbmVkKFhQX1VOSVgpCisgICAgSW50UmVjdCBwID0gc3RhdGljX2Nhc3Q8RnJhbWVW
aWV3Kj4ocGFyZW50KCkpLT5jb250ZW50c1RvU2NyZWVuKEludFJlY3QoMCwgMCwgZXZlbnQtPm9m
ZnNldFgoKSwgZXZlbnQtPm9mZnNldFkoKSkpOworICAgIGlmIChldmVudC0+dHlwZSgpID09IGV2
ZW50TmFtZXMoKS5tb3VzZW1vdmVFdmVudAorICAgICAgICB8fCBldmVudC0+dHlwZSgpID09IGV2
ZW50TmFtZXMoKS5tb3VzZW91dEV2ZW50CisgICAgICAgIHx8IGV2ZW50LT50eXBlKCkgPT0gZXZl
bnROYW1lcygpLm1vdXNlb3ZlckV2ZW50KSB7CisgICAgICAgIHhldmVudC50eXBlID0gTW90aW9u
Tm90aWZ5OworICAgICAgICB4ZXZlbnQueG1vdGlvbi54ID0gcC53aWR0aCgpOworICAgICAgICB4
ZXZlbnQueG1vdGlvbi55ID0gcC5oZWlnaHQoKTsKKyAgICB9IGVsc2UgaWYgKGV2ZW50LT50eXBl
KCkgPT0gZXZlbnROYW1lcygpLm1vdXNlZG93bkV2ZW50KSB7CisgICAgICAgIHhldmVudC50eXBl
ID0gQnV0dG9uUHJlc3M7CisgICAgICAgIHhldmVudC54YnV0dG9uLnggPSBwLndpZHRoKCk7Cisg
ICAgICAgIHhldmVudC54YnV0dG9uLnkgPSBwLmhlaWdodCgpOworICAgICAgICB4ZXZlbnQueGJ1
dHRvbi5idXR0b24gPSBldmVudC0+YnV0dG9uKCkgKyAxOyAvLyBET00gTW91c2VFdmVudCBjb3Vu
dHMgZnJvbSAwLCBhbmQgWEJ1dHRvbkV2ZW50IGZyb20gMQorICAgIH0gZWxzZSBpZiAoZXZlbnQt
PnR5cGUoKSA9PSBldmVudE5hbWVzKCkubW91c2V1cEV2ZW50KSB7CisgICAgICAgIHhldmVudC50
eXBlID0gQnV0dG9uUmVsZWFzZTsKKyAgICAgICAgeGV2ZW50LnhidXR0b24ueCA9IHAud2lkdGgo
KTsKKyAgICAgICAgeGV2ZW50LnhidXR0b24ueSA9IHAuaGVpZ2h0KCk7CisgICAgICAgIHhldmVu
dC54YnV0dG9uLmJ1dHRvbiA9IGV2ZW50LT5idXR0b24oKSArIDE7CisgICAgfSBlbHNlCisgICAg
ICAgIHJldHVybjsKKyNlbmRpZgorCisgICAgZGlzcGF0Y2hOUEV2ZW50KHhldmVudCk7Cit9CisK
Ky8qCitib29sIFBsdWdpblZpZXc6OmRpc3BhdGNoV2hlZWxFdmVudChOUEV2ZW50KiBldmVudCkK
K3sKKyAgICBYRXZlbnQqIHhldmVudCA9IChYRXZlbnQqKSBldmVudDsKKyAgICBFdmFzX0V2ZW50
X01vdXNlX1doZWVsIGV2OworCisgICAgZXYudGltZXN0YW1wID0geGV2ZW50LT54YnV0dG9uLnRp
bWU7CisgICAgZXYubW9kaWZpZXJzID0gMDsKKworICAgIHN3aXRjaCAoeGV2ZW50LT54YnV0dG9u
LmJ1dHRvbikgeworICAgIGNhc2UgNDogZXYuZGlyZWN0aW9uID0gMDsgZXYueiA9IC0xOyBicmVh
azsKKyAgICBjYXNlIDU6IGV2LmRpcmVjdGlvbiA9IDA7IGV2LnogPSAxOyBicmVhazsKKyAgICBj
YXNlIDY6IGV2LmRpcmVjdGlvbiA9IDE7IGV2LnogPSAtMTsgYnJlYWs7CisgICAgY2FzZSA3OiBl
di5kaXJlY3Rpb24gPSAxOyBldi56ID0gMTsgYnJlYWs7CisgICAgfQorCisgICAgZXYuY2FudmFz
LnggPSBldi5vdXRwdXQueCA9IHhldmVudC0+eGJ1dHRvbi54OworICAgIGV2LmNhbnZhcy55ID0g
ZXYub3V0cHV0LnkgPSB4ZXZlbnQtPnhidXR0b24ueTsKKworICAgIFBsYXRmb3JtV2hlZWxFdmVu
dCB3aGVlbCgmZXYsIEludFBvaW50KCkpOworCisgICAgcmV0dXJuIG1fcGFyZW50RnJhbWUtPmV2
ZW50SGFuZGxlcigpLT5oYW5kbGVXaGVlbEV2ZW50KHdoZWVsKTsKK30KKyovCisKK3ZvaWQgUGx1
Z2luVmlldzo6dXBkYXRlUGx1Z2luV2lkZ2V0KCkKK3sKKyAgICBpZiAoIXBhcmVudCgpIHx8ICFt
X2lzV2luZG93ZWQpCisgICAgICAgIHJldHVybjsKKworICAgIEFTU0VSVChwYXJlbnQoKS0+aXNG
cmFtZVZpZXcoKSk7CisgICAgRnJhbWVWaWV3KiBmcmFtZVZpZXcgPSBzdGF0aWNfY2FzdDxGcmFt
ZVZpZXcqPihwYXJlbnQoKSk7CisKKyAgICBJbnRSZWN0IG9sZFdpbmRvd1JlY3QgPSBtX3dpbmRv
d1JlY3Q7CisgICAgSW50UmVjdCBvbGRDbGlwUmVjdCA9IG1fY2xpcFJlY3Q7CisKKyAgICBtX3dp
bmRvd1JlY3QgPSBJbnRSZWN0KGZyYW1lVmlldy0+Y29udGVudHNUb1NjcmVlbihJbnRSZWN0KGZy
YW1lUmVjdCgpLmxvY2F0aW9uKCksIGZyYW1lUmVjdCgpLnNpemUoKSkpKTsKKworICAgIG1fY2xp
cFJlY3QgPSB3aW5kb3dDbGlwUmVjdCgpOworICAgIG1fY2xpcFJlY3QubW92ZSgtbV93aW5kb3dS
ZWN0LngoKSwgLW1fd2luZG93UmVjdC55KCkpOworCisgICAgaWYgKHBsYXRmb3JtUGx1Z2luV2lk
Z2V0KCkpIHsKKyAgICAgICAgRXZhc19Db29yZCB4LCB5OworICAgICAgICBldmFzX29iamVjdF9n
ZW9tZXRyeV9nZXQocm9vdCgpLT5ldmFzT2JqZWN0KCksICZ4LCAmeSwgMCwgMCk7CisgICAgICAg
IEludFJlY3QgY2hpbGRSZWN0ID0gbV93aW5kb3dSZWN0OworICAgICAgICBjaGlsZFJlY3QubW92
ZSh4LCB5KTsKKyAgICAgICAgcGxhdGZvcm1QbHVnaW5XaWRnZXQoKS0+c2V0RnJhbWVSZWN0KGNo
aWxkUmVjdCk7CisgICAgICAgIHBsYXRmb3JtUGx1Z2luV2lkZ2V0KCktPnVwZGF0ZShtX2NsaXBS
ZWN0KTsKKyAgICB9Cit9CisKK3ZvaWQgUGx1Z2luVmlldzo6c2V0Rm9jdXMoYm9vbCkKK3sKKyAg
ICBpZiAocGxhdGZvcm1QbHVnaW5XaWRnZXQoKSkKKyAgICAgICAgcGxhdGZvcm1QbHVnaW5XaWRn
ZXQoKS0+c2V0Rm9jdXMoKTsKKworICAgIG1fZWxlbWVudC0+ZG9jdW1lbnQoKS0+c2V0Rm9jdXNl
ZE5vZGUobV9lbGVtZW50KTsKKworICAgIFdpZGdldDo6c2V0Rm9jdXModHJ1ZSk7Cit9CisKK3Zv
aWQgUGx1Z2luVmlldzo6c2hvdygpCit7CisgICAgc2V0U2VsZlZpc2libGUodHJ1ZSk7CisKKyAg
ICBpZiAoaXNQYXJlbnRWaXNpYmxlKCkgJiYgcGxhdGZvcm1QbHVnaW5XaWRnZXQoKSkKKyAgICAg
ICAgcGxhdGZvcm1QbHVnaW5XaWRnZXQoKS0+c2V0VmlzaWJsZSh0cnVlKTsKKworICAgIFdpZGdl
dDo6c2hvdygpOworfQorCit2b2lkIFBsdWdpblZpZXc6OmhpZGUoKQoreworICAgIHNldFNlbGZW
aXNpYmxlKGZhbHNlKTsKKworICAgIGlmIChpc1BhcmVudFZpc2libGUoKSAmJiBwbGF0Zm9ybVBs
dWdpbldpZGdldCgpKQorICAgICAgICBwbGF0Zm9ybVBsdWdpbldpZGdldCgpLT5zZXRWaXNpYmxl
KGZhbHNlKTsKKworICAgIFdpZGdldDo6aGlkZSgpOworfQorCit2b2lkIFBsdWdpblZpZXc6OnBh
aW50KEdyYXBoaWNzQ29udGV4dCogY29udGV4dCwgY29uc3QgSW50UmVjdCYgcmVjdCkKK3sKKyAg
ICBpZiAoIW1faXNTdGFydGVkKSB7CisgICAgICAgIHBhaW50TWlzc2luZ1BsdWdpbkljb24oY29u
dGV4dCwgcmVjdCk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBpZiAoY29udGV4dC0+
cGFpbnRpbmdEaXNhYmxlZCgpKQorICAgICAgICByZXR1cm47CisKKyAgICBzZXROUFdpbmRvd0lm
TmVlZGVkKCk7CisKKyAgICBpZiAobV9pc1dpbmRvd2VkIHx8IGNvbnRleHQtPnBhaW50aW5nRGlz
YWJsZWQoKSkKKyAgICAgICAgcmV0dXJuOworfQorCit2b2lkIFBsdWdpblZpZXc6OnNldFBhcmVu
dChTY3JvbGxWaWV3KiBwYXJlbnQpCit7CisgICAgV2lkZ2V0OjpzZXRQYXJlbnQocGFyZW50KTsK
KworICAgIGlmIChwYXJlbnQpCisgICAgICAgIGluaXQoKTsKKyAgICBlbHNlIHsKKyAgICAgICAg
aWYgKCFwbGF0Zm9ybVBsdWdpbldpZGdldCgpKQorICAgICAgICAgICAgcmV0dXJuOworICAgIH0K
K30KKwordm9pZCBQbHVnaW5WaWV3OjpzZXROUFdpbmRvd1JlY3QoY29uc3QgSW50UmVjdCYgcmVj
dCkKK3sKKyAgICBpZiAoIW1faXNTdGFydGVkIHx8ICFwYXJlbnQoKSkKKyAgICAgICAgcmV0dXJu
OworCisgICAgSW50UG9pbnQgcCA9IHN0YXRpY19jYXN0PEZyYW1lVmlldyo+KHBhcmVudCgpKS0+
Y29udGVudHNUb1dpbmRvdyhyZWN0LmxvY2F0aW9uKCkpOworICAgIG1fbnBXaW5kb3cueCA9IHAu
eCgpOworICAgIG1fbnBXaW5kb3cueSA9IHAueSgpOworCisgICAgbV9ucFdpbmRvdy53aWR0aCA9
IHJlY3Qud2lkdGgoKTsKKyAgICBtX25wV2luZG93LmhlaWdodCA9IHJlY3QuaGVpZ2h0KCk7CisK
KyAgICBtX25wV2luZG93LmNsaXBSZWN0LmxlZnQgPSAwOworICAgIG1fbnBXaW5kb3cuY2xpcFJl
Y3QudG9wID0gMDsKKyAgICBtX25wV2luZG93LmNsaXBSZWN0LnJpZ2h0ID0gcmVjdC53aWR0aCgp
OworICAgIG1fbnBXaW5kb3cuY2xpcFJlY3QuYm90dG9tID0gcmVjdC5oZWlnaHQoKTsKKworICAg
IGlmIChtX25wV2luZG93LnggPCAwIHx8IG1fbnBXaW5kb3cueSA8IDAKKyAgICAgICAgfHwgbV9u
cFdpbmRvdy53aWR0aCA8PSAwIHx8IG1fbnBXaW5kb3cuaGVpZ2h0IDw9IDApCisgICAgICAgIHJl
dHVybjsKKworICAgIGlmIChtX3BsdWdpbi0+cGx1Z2luRnVuY3MoKS0+c2V0d2luZG93KSB7Cisg
ICAgICAgIFBsdWdpblZpZXc6OnNldEN1cnJlbnRQbHVnaW5WaWV3KHRoaXMpOworICAgICAgICBK
U0M6OkpTTG9jazo6RHJvcEFsbExvY2tzIGRyb3BBbGxMb2NrcyhmYWxzZSk7CisgICAgICAgIHNl
dENhbGxpbmdQbHVnaW4odHJ1ZSk7CisgICAgICAgIG1fcGx1Z2luLT5wbHVnaW5GdW5jcygpLT5z
ZXR3aW5kb3cobV9pbnN0YW5jZSwgJm1fbnBXaW5kb3cpOworICAgICAgICBzZXRDYWxsaW5nUGx1
Z2luKGZhbHNlKTsKKyAgICAgICAgUGx1Z2luVmlldzo6c2V0Q3VycmVudFBsdWdpblZpZXcoMCk7
CisKKyAgICAgICAgaWYgKCFtX2lzV2luZG93ZWQpCisgICAgICAgICAgICByZXR1cm47CisKKyAg
ICAgICAgQVNTRVJUKHBsYXRmb3JtUGx1Z2luV2lkZ2V0KCkpOworICAgIH0KK30KKwordm9pZCBQ
bHVnaW5WaWV3OjpzZXROUFdpbmRvd0lmTmVlZGVkKCkKK3sKK30KKwordm9pZCBQbHVnaW5WaWV3
OjpzZXRQYXJlbnRWaXNpYmxlKGJvb2wgdmlzaWJsZSkKK3sKKyAgICBpZiAoaXNQYXJlbnRWaXNp
YmxlKCkgPT0gdmlzaWJsZSkKKyAgICAgICAgcmV0dXJuOworCisgICAgV2lkZ2V0OjpzZXRQYXJl
bnRWaXNpYmxlKHZpc2libGUpOworCisgICAgaWYgKGlzU2VsZlZpc2libGUoKSAmJiBwbGF0Zm9y
bVBsdWdpbldpZGdldCgpKQorICAgICAgICBwbGF0Zm9ybVBsdWdpbldpZGdldCgpLT5zZXRWaXNp
YmxlKHZpc2libGUpOworfQorCitOUEVycm9yIFBsdWdpblZpZXc6OmhhbmRsZVBvc3RSZWFkRmls
ZShWZWN0b3I8Y2hhcj4mIGJ1ZmZlciwgdWludDMyX3QgbGVuLCBjb25zdCBjaGFyKiBidWYpCit7
CisgICAgU3RyaW5nIGZpbGVuYW1lKGJ1ZiwgbGVuKTsKKworICAgIGlmIChmaWxlbmFtZS5zdGFy
dHNXaXRoKCJmaWxlOi8vLyIpKQorICAgICAgICBmaWxlbmFtZSA9IGZpbGVuYW1lLnN1YnN0cmlu
Zyg4KTsKKworICAgIGlmICghZmlsZUV4aXN0cyhmaWxlbmFtZSkpCisgICAgICAgIHJldHVybiBO
UEVSUl9GSUxFX05PVF9GT1VORDsKKworICAgIEZJTEUqIGZpbGVIYW5kbGUgPSBmb3BlbihmaWxl
bmFtZS51dGY4KCkuZGF0YSgpLCAiciIpOworCisgICAgaWYgKCFmaWxlSGFuZGxlKQorICAgICAg
ICByZXR1cm4gTlBFUlJfRklMRV9OT1RfRk9VTkQ7CisKKyAgICBpbnQgYnl0ZXNSZWFkID0gZnJl
YWQoYnVmZmVyLmRhdGEoKSwgMSwgMCwgZmlsZUhhbmRsZSk7CisKKyAgICBmY2xvc2UoZmlsZUhh
bmRsZSk7CisKKyAgICBpZiAoYnl0ZXNSZWFkIDw9IDApCisgICAgICAgIHJldHVybiBOUEVSUl9G
SUxFX05PVF9GT1VORDsKKworICAgIHJldHVybiBOUEVSUl9OT19FUlJPUjsKK30KKworYm9vbCBQ
bHVnaW5WaWV3OjpwbGF0Zm9ybUdldFZhbHVlU3RhdGljKE5QTlZhcmlhYmxlIHZhcmlhYmxlLCB2
b2lkKiB2YWx1ZSwgTlBFcnJvciogcmVzdWx0KQoreworICAgIHN3aXRjaCAodmFyaWFibGUpIHsK
KyAgICBjYXNlIE5QTlZUb29sa2l0OgorICAgICAgICAqc3RhdGljX2Nhc3Q8dWludDMyX3QqPih2
YWx1ZSkgPSAwOworICAgICAgICAqcmVzdWx0ID0gTlBFUlJfTk9fRVJST1I7CisgICAgICAgIHJl
dHVybiB0cnVlOworCisgICAgY2FzZSBOUE5WU3VwcG9ydHNYRW1iZWRCb29sOgorICAgICAgICAq
c3RhdGljX2Nhc3Q8TlBCb29sKj4odmFsdWUpID0gdHJ1ZTsKKyAgICAgICAgKnJlc3VsdCA9IE5Q
RVJSX05PX0VSUk9SOworICAgICAgICByZXR1cm4gdHJ1ZTsKKworICAgIGNhc2UgTlBOVmphdmFz
Y3JpcHRFbmFibGVkQm9vbDoKKyAgICAgICAgKnN0YXRpY19jYXN0PE5QQm9vbCo+KHZhbHVlKSA9
IHRydWU7CisgICAgICAgICpyZXN1bHQgPSBOUEVSUl9OT19FUlJPUjsKKyAgICAgICAgcmV0dXJu
IHRydWU7CisKKyAgICBjYXNlIE5QTlZTdXBwb3J0c1dpbmRvd2xlc3M6CisgICAgICAgICpzdGF0
aWNfY2FzdDxOUEJvb2wqPih2YWx1ZSkgPSBmYWxzZTsKKyAgICAgICAgKnJlc3VsdCA9IE5QRVJS
X05PX0VSUk9SOworICAgICAgICByZXR1cm4gdHJ1ZTsKKworICAgIGRlZmF1bHQ6CisgICAgICAg
IHJldHVybiBmYWxzZTsKKyAgICB9Cit9CisKK2Jvb2wgUGx1Z2luVmlldzo6cGxhdGZvcm1HZXRW
YWx1ZShOUE5WYXJpYWJsZSB2YXJpYWJsZSwgdm9pZCogdmFsdWUsIE5QRXJyb3IqIHJlc3VsdCkK
K3sKKyAgICBzd2l0Y2ggKHZhcmlhYmxlKSB7CisgICAgY2FzZSBOUE5WeERpc3BsYXk6CisgICAg
ICAgIGlmIChwbGF0Zm9ybVBsdWdpbldpZGdldCgpKQorICAgICAgICAgICAgKih2b2lkICoqKXZh
bHVlID0gcGxhdGZvcm1QbHVnaW5XaWRnZXQoKS0+eDExSW5mbygpLT5kaXNwbGF5KCk7CisgICAg
ICAgIGVsc2UKKyAgICAgICAgICAgICoodm9pZCAqKil2YWx1ZSA9IChEaXNwbGF5KikgZWNvcmVf
eF9kaXNwbGF5X2dldCgpOworICAgICAgICAqcmVzdWx0ID0gTlBFUlJfTk9fRVJST1I7CisgICAg
ICAgIHJldHVybiB0cnVlOworCisgICAgY2FzZSBOUE5WeHRBcHBDb250ZXh0OgorICAgICAgICAq
cmVzdWx0ID0gTlBFUlJfR0VORVJJQ19FUlJPUjsKKyAgICAgICAgcmV0dXJuIHRydWU7CisKKyNp
ZiBFTkFCTEUoTkVUU0NBUEVfUExVR0lOX0FQSSkKKyAgICBjYXNlIE5QTlZXaW5kb3dOUE9iamVj
dDogeworICAgICAgICBpZiAobV9pc0phdmFTY3JpcHRQYXVzZWQpIHsKKyAgICAgICAgICAgICpy
ZXN1bHQgPSBOUEVSUl9HRU5FUklDX0VSUk9SOworICAgICAgICAgICAgcmV0dXJuIHRydWU7Cisg
ICAgICAgIH0KKworICAgICAgICBOUE9iamVjdCogd2luZG93U2NyaXB0T2JqZWN0ID0gbV9wYXJl
bnRGcmFtZS0+c2NyaXB0KCktPndpbmRvd1NjcmlwdE5QT2JqZWN0KCk7CisKKyAgICAgICAgLy8g
UmV0dXJuIHZhbHVlIGlzIGV4cGVjdGVkIHRvIGJlIHJldGFpbmVkLCBhcyBkZXNjcmliZWQgaGVy
ZTogPGh0dHA6Ly93d3cubW96aWxsYS5vcmcvcHJvamVjdHMvcGx1Z2luL25wcnVudGltZS5odG1s
PgorICAgICAgICBpZiAod2luZG93U2NyaXB0T2JqZWN0KQorICAgICAgICAgICAgX05QTl9SZXRh
aW5PYmplY3Qod2luZG93U2NyaXB0T2JqZWN0KTsKKworICAgICAgICB2b2lkKiogdiA9ICh2b2lk
KiopdmFsdWU7CisgICAgICAgICp2ID0gd2luZG93U2NyaXB0T2JqZWN0OworCisgICAgICAgICpy
ZXN1bHQgPSBOUEVSUl9OT19FUlJPUjsKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgfQorCisg
ICAgY2FzZSBOUE5WUGx1Z2luRWxlbWVudE5QT2JqZWN0OiB7CisgICAgICAgIGlmIChtX2lzSmF2
YVNjcmlwdFBhdXNlZCkgeworICAgICAgICAgICAgKnJlc3VsdCA9IE5QRVJSX0dFTkVSSUNfRVJS
T1I7CisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgfQorCisgICAgICAgIE5QT2Jq
ZWN0KiBwbHVnaW5TY3JpcHRPYmplY3QgPSAwOworCisgICAgICAgIGlmIChtX2VsZW1lbnQtPmhh
c1RhZ05hbWUoYXBwbGV0VGFnKSB8fCBtX2VsZW1lbnQtPmhhc1RhZ05hbWUoZW1iZWRUYWcpIHx8
IG1fZWxlbWVudC0+aGFzVGFnTmFtZShvYmplY3RUYWcpKQorICAgICAgICAgICAgcGx1Z2luU2Ny
aXB0T2JqZWN0ID0gc3RhdGljX2Nhc3Q8SFRNTFBsdWdJbkVsZW1lbnQqPihtX2VsZW1lbnQpLT5n
ZXROUE9iamVjdCgpOworCisgICAgICAgIC8vIFJldHVybiB2YWx1ZSBpcyBleHBlY3RlZCB0byBi
ZSByZXRhaW5lZCwgYXMgZGVzY3JpYmVkIGhlcmU6IDxodHRwOi8vd3d3Lm1vemlsbGEub3JnL3By
b2plY3RzL3BsdWdpbi9ucHJ1bnRpbWUuaHRtbD4KKyAgICAgICAgaWYgKHBsdWdpblNjcmlwdE9i
amVjdCkKKyAgICAgICAgICAgIF9OUE5fUmV0YWluT2JqZWN0KHBsdWdpblNjcmlwdE9iamVjdCk7
CisKKyAgICAgICAgdm9pZCoqIHYgPSAodm9pZCoqKXZhbHVlOworICAgICAgICAqdiA9IHBsdWdp
blNjcmlwdE9iamVjdDsKKworICAgICAgICAqcmVzdWx0ID0gTlBFUlJfTk9fRVJST1I7CisgICAg
ICAgIHJldHVybiB0cnVlOworICAgIH0KKyNlbmRpZgorCisgICAgY2FzZSBOUE5WbmV0c2NhcGVX
aW5kb3c6IHsKKyAgICAgICAgdm9pZCogdyA9IHJlaW50ZXJwcmV0X2Nhc3Q8dm9pZCo+KHZhbHVl
KTsKKyAgICAgICAgRXZhc19PYmplY3QqIHdpZGdldCA9IG1fcGFyZW50RnJhbWUtPnZpZXcoKS0+
aG9zdFdpbmRvdygpLT5wbGF0Zm9ybVBhZ2VDbGllbnQoKTsKKyAgICAgICAgRXZhcyogZXZhcyA9
IGV2YXNfb2JqZWN0X2V2YXNfZ2V0KHdpZGdldCk7CisgICAgICAgIEVjb3JlX0V2YXMqIGVlID0g
ZWNvcmVfZXZhc19lY29yZV9ldmFzX2dldChldmFzKTsKKyAgICAgICAgKigoWElEICopdykgPSAo
V2luZG93KSBlY29yZV9ldmFzX3dpbmRvd19nZXQoZWUpOworICAgICAgICAqcmVzdWx0ID0gTlBF
UlJfTk9fRVJST1I7CisgICAgICAgIHJldHVybiB0cnVlOworICAgIH0KKworICAgIGNhc2UgTlBO
VlRvb2xraXQ6CisgICAgICAgIGlmIChtX3BsdWdpbi0+cXVpcmtzKCkuY29udGFpbnMoUGx1Z2lu
UXVpcmtSZXF1aXJlc0d0a1Rvb2xLaXQpKSB7CisgICAgICAgICAgICAqKCh1aW50MzJfdCAqKXZh
bHVlKSA9IDI7CisgICAgICAgICAgICAqcmVzdWx0ID0gTlBFUlJfTk9fRVJST1I7CisgICAgICAg
ICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgfQorICAgICAgICAvLyBmYWxsIHRocm91Z2gKKyAg
ICBkZWZhdWx0OgorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorfQorCit2b2lkIFBsdWdp
blZpZXc6OmludmFsaWRhdGVSZWN0KGNvbnN0IEludFJlY3QmIHJlY3QpCit7CisgICAgaWYgKHBs
YXRmb3JtUGx1Z2luV2lkZ2V0KCkpIHsKKyAgICAgICAgcGxhdGZvcm1QbHVnaW5XaWRnZXQoKS0+
dXBkYXRlKHJlY3QpOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgaW52YWxpZGF0ZVdp
bmRvd2xlc3NQbHVnaW5SZWN0KHJlY3QpOworfQorCit2b2lkIFBsdWdpblZpZXc6OmludmFsaWRh
dGVSZWN0KE5QUmVjdCogcmVjdCkKK3sKKyAgICBpZiAoIXJlY3QpIHsKKyAgICAgICAgaW52YWxp
ZGF0ZSgpOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgSW50UmVjdCByKHJlY3QtPmxl
ZnQsIHJlY3QtPnRvcCwgcmVjdC0+cmlnaHQgLSByZWN0LT5sZWZ0LCByZWN0LT5ib3R0b20gLSBy
ZWN0LT50b3ApOworCisgICAgaW52YWxpZGF0ZVJlY3Qocik7Cit9CisKK3ZvaWQgUGx1Z2luVmll
dzo6aW52YWxpZGF0ZVJlZ2lvbihOUFJlZ2lvbiByZWdpb24pCit7CisgICAgbm90SW1wbGVtZW50
ZWQoKTsKK30KKwordm9pZCBQbHVnaW5WaWV3Ojpmb3JjZVJlZHJhdygpCit7CisgICAgbm90SW1w
bGVtZW50ZWQoKTsKK30KKworYm9vbCBQbHVnaW5WaWV3OjpwbGF0Zm9ybVN0YXJ0KCkKK3sKKyAg
ICBBU1NFUlQobV9pc1N0YXJ0ZWQpOworICAgIEFTU0VSVChtX3N0YXR1cyA9PSBQbHVnaW5TdGF0
dXNMb2FkZWRTdWNjZXNzZnVsbHkpOworCisgICAgaWYgKG1fcGx1Z2luLT5wbHVnaW5GdW5jcygp
LT5nZXR2YWx1ZSkgeworICAgICAgICBQbHVnaW5WaWV3OjpzZXRDdXJyZW50UGx1Z2luVmlldyh0
aGlzKTsKKyAgICAgICAgSlNDOjpKU0xvY2s6OkRyb3BBbGxMb2NrcyBkcm9wQWxsTG9ja3MoZmFs
c2UpOworICAgICAgICBzZXRDYWxsaW5nUGx1Z2luKHRydWUpOworICAgICAgICBtX3BsdWdpbi0+
cGx1Z2luRnVuY3MoKS0+Z2V0dmFsdWUobV9pbnN0YW5jZSwgTlBQVnBsdWdpbk5lZWRzWEVtYmVk
LCAmbV9uZWVkc1hFbWJlZCk7CisgICAgICAgIHNldENhbGxpbmdQbHVnaW4oZmFsc2UpOworICAg
ICAgICBQbHVnaW5WaWV3OjpzZXRDdXJyZW50UGx1Z2luVmlldygwKTsKKyAgICB9CisKKyAgICBp
ZiAobV9uZWVkc1hFbWJlZCkgeworICAgICAgICBFdmFzX09iamVjdCogbyA9IG1fcGFyZW50RnJh
bWUtPnZpZXcoKS0+aG9zdFdpbmRvdygpLT5wbGF0Zm9ybVBhZ2VDbGllbnQoKTsKKyAgICAgICAg
RXZhcyogZXZhcyA9IGV2YXNfb2JqZWN0X2V2YXNfZ2V0KG8pOworICAgICAgICBzZXRQbGF0Zm9y
bVBsdWdpbldpZGdldChuZXcgWDExRW1iZWRDb250YWluZXIoZXZhcywgdGhpcykpOworICAgIH0g
ZWxzZSB7CisgICAgICAgIG5vdEltcGxlbWVudGVkKCk7CisgICAgICAgIG1fc3RhdHVzID0gUGx1
Z2luU3RhdHVzQ2FuTm90TG9hZFBsdWdpbjsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0K
KworICAgIHNob3coKTsKKyAgICBOUFNldFdpbmRvd0NhbGxiYWNrU3RydWN0KiB3c2kgPSBuZXcg
TlBTZXRXaW5kb3dDYWxsYmFja1N0cnVjdCgpOworCisgICAgd3NpLT50eXBlID0gMDsKKworICAg
IFgxMUluZm8qIGluZm8gPSBwbGF0Zm9ybVBsdWdpbldpZGdldCgpLT54MTFJbmZvKCk7CisKKyAg
ICB3c2ktPmRpc3BsYXkgPSBpbmZvLT5kaXNwbGF5KCk7CisgICAgd3NpLT52aXN1YWwgPSBpbmZv
LT52aXN1YWwoKTsKKyAgICB3c2ktPmRlcHRoID0gaW5mby0+ZGVwdGgoKTsKKyAgICB3c2ktPmNv
bG9ybWFwID0gaW5mby0+Y29sb3JtYXAoKTsKKyAgICBtX25wV2luZG93LndzX2luZm8gPSB3c2k7
CisKKyAgICBtX25wV2luZG93LnR5cGUgPSBOUFdpbmRvd1R5cGVXaW5kb3c7CisgICAgbV9ucFdp
bmRvdy53aW5kb3cgPSAodm9pZCopIHBsYXRmb3JtUGx1Z2luV2lkZ2V0KCktPndpbklkKCk7CisK
KyAgICBpZiAoIShtX3BsdWdpbi0+cXVpcmtzKCkuY29udGFpbnMoUGx1Z2luUXVpcmtEZWZlckZp
cnN0U2V0V2luZG93Q2FsbCkpKQorICAgICAgICBzZXROUFdpbmRvd1JlY3QoZnJhbWVSZWN0KCkp
OworCisgICAgcmV0dXJuIHRydWU7Cit9CisKK3ZvaWQgUGx1Z2luVmlldzo6cGxhdGZvcm1EZXN0
cm95KCkKK3sKK30KKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvV2ViQ29y
ZS9wbHVnaW5zL2VmbC9YMTFFbWJlZENvbnRhaW5lci5jcHAgYi9XZWJDb3JlL3BsdWdpbnMvZWZs
L1gxMUVtYmVkQ29udGFpbmVyLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAw
Li5mMjVmNGZiCi0tLSAvZGV2L251bGwKKysrIGIvV2ViQ29yZS9wbHVnaW5zL2VmbC9YMTFFbWJl
ZENvbnRhaW5lci5jcHAKQEAgLTAsMCArMSwzNTYgQEAKKy8qCisgICAgQ29weXJpZ2h0IChDKSAy
MDA5IElOZFQgLSBJbnN0aXR1dG8gTm9raWEgZGUgVGVjbm9sb2dpYQorICAgIENvcHlyaWdodCAo
QykgMjAwOS0yMDEwIFByb0ZVU0lPTiBlbWJlZGRlZCBzeXN0ZW1zCisgICAgQ29weXJpZ2h0IChD
KSAyMDA5LTIwMTAgU2Ftc3VuZyBFbGVjdHJvbmljcworCisgICAgVGhpcyBsaWJyYXJ5IGlzIGZy
ZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICAgIG1vZGlmeSBp
dCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgICAg
TGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0
aGVyCisgICAgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFu
eSBsYXRlciB2ZXJzaW9uLgorCisgICAgVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRo
ZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJB
TlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAgICBNRVJDSEFOVEFC
SUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQor
ICAgIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorCisg
ICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2Vu
ZXJhbCBQdWJsaWMgTGljZW5zZQorICAgIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhl
IGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCisgICAgdGhlIEZyZWUgU29mdHdh
cmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKKyAg
ICBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKyovCisKKyNpbmNsdWRlICJjb25maWcuaCIK
KyNpbmNsdWRlICJYMTFFbWJlZENvbnRhaW5lci5oIgorCisjaW5jbHVkZSAiUGx1Z2luVmlldy5o
IgorI2luY2x1ZGUgIlgxMVdpbmRvdy5oIgorCisjaW5jbHVkZSA8WDExL1guaD4KKyNpbmNsdWRl
IDxYMTEvWGxpYi5oPgorCisjZGVmaW5lIEtleVByZXNzICAgICAyCisjZGVmaW5lIEtleVJlbGVh
c2UgICAzCisjZGVmaW5lIEZvY3VzSW4gICAgICA5CisjZGVmaW5lIEZvY3VzT3V0ICAgIDEwCisK
KyNkZWZpbmUgQVRPTShuYW1lKSBlY29yZV94X2F0b21fZ2V0KCNuYW1lKQorCit1c2luZyBuYW1l
c3BhY2Ugc3RkOwordXNpbmcgbmFtZXNwYWNlIFdURjsKK3VzaW5nIG5hbWVzcGFjZSBXZWJDb3Jl
OworCitjbGFzcyBYMTFFbWJlZEV2ZW50SGFuZGxlcjsKKworc3RhdGljIHVuc2lnbmVkIGludCB4
ZW1iZWRWZXJzaW9uID0gMDsKK3N0YXRpYyB1bnNpZ25lZCBpbnQgeGVtYmVkTWFwcGVkID0gKDEg
PDwgMCk7CitzdGF0aWMgdm9pZCBzZW5kWEVtYmVkTWVzc2FnZShXaW5JZCAsIERpc3BsYXkqICwg
bG9uZyAsIGxvbmcgZGV0YWlsID0gMCwgbG9uZyBkYXRhMSA9IDAsIGxvbmcgZGF0YTIgPSAwKTsK
KworZW51bSBYMTFFbWJlZE1lc3NhZ2VUeXBlIHsKKyAgICBYRU1CRURfRU1CRURERURfTk9USUZZ
ID0gMCwKKyAgICBYRU1CRURfV0lORE9XX0FDVElWQVRFID0gMSwKKyAgICBYRU1CRURfV0lORE9X
X0RFQUNUSVZBVEUgPSAyLAorICAgIFhFTUJFRF9SRVFVRVNUX0ZPQ1VTID0gMywKKyAgICBYRU1C
RURfRk9DVVNfSU4gPSA0LAorICAgIFhFTUJFRF9GT0NVU19PVVQgPSA1LAorICAgIFhFTUJFRF9G
T0NVU19ORVhUID0gNiwKKyAgICBYRU1CRURfRk9DVVNfUFJFViA9IDcsCisgICAgLyogOC05IHdl
cmUgdXNlZCBmb3IgWEVNQkVEX0dSQUJfS0VZL1hFTUJFRF9VTkdSQUJfS0VZICovCisgICAgWEVN
QkVEX01PREFMSVRZX09OID0gMTAsCisgICAgWEVNQkVEX01PREFMSVRZX09GRiA9IDExLAorICAg
IFhFTUJFRF9SRUdJU1RFUl9BQ0NFTEVSQVRPUiA9IDEyLAorICAgIFhFTUJFRF9VTlJFR0lTVEVS
X0FDQ0VMRVJBVE9SID0gMTMsCisgICAgWEVNQkVEX0FDVElWQVRFX0FDQ0VMRVJBVE9SID0gMTQK
K307CisKK2VudW0gWDExRW1iZWRGb2N1c0luRGV0YWlsIHsKKyAgICBYRU1CRURfRk9DVVNfQ1VS
UkVOVCA9IDAsCisgICAgWEVNQkVEX0ZPQ1VTX0ZJUlNUID0gMSwKKyAgICBYRU1CRURfRk9DVVNf
TEFTVCA9IDIKK307CisKK1gxMUVtYmVkQ29udGFpbmVyOjpYMTFFbWJlZENvbnRhaW5lcihFdmFz
KiBldmFzLCBQbHVnaW5WaWV3KiB2aWV3KQorICAgIDogWDExV2luZG93KGV2YXMpCisgICAgLCBt
X2FjdGl2ZShmYWxzZSkKKyAgICAsIG1fY2xpZW50KDApCisgICAgLCBtX3BsdWdpblZpZXcodmll
dykKKyAgICAsIG1fY2xpZW50V2luZG93KDApCit7CisgICAgLy8gaW1wbGVtZW50IHRoZSBmb2N1
cyBwcm94eSBhcyBpbiB0aGUgc3BlYywgb2Zmc2NyZWVuCisgICAgbV9mb2N1c1Byb3h5LnNldChu
ZXcgWDExV2luZG93KHdpbklkKCksIEludFJlY3QoLTEsIC0xLCAxLCAxKSkpOworICAgIG1fZm9j
dXNQcm94eS0+aW5zdGFsbEV2ZW50RmlsdGVyKHRoaXMpOworICAgIG1fZm9jdXNQcm94eS0+c2hv
dygpOworCisgICAgZWNvcmVfeF93aW5kb3dfYmFja2dyb3VuZF9jb2xvcl9zZXQod2luSWQoKSwg
NjU1MzUsIDY1NTM1LCA2NTUzNSk7CisKKyAgICAvLyBDaGFuZ2UgdGhlIGV2ZW50IGZpbHRlciBm
b3IgdGhlIGV2ZW50cyB3ZSB3b3VsZCBsaWtlIHRvIHJlY2VpdmUKKyAgICBYU2VsZWN0SW5wdXQo
eDExSW5mbygpLT5kaXNwbGF5KCksIHdpbklkKCksCisgICAgICAgICAgICBLZXlQcmVzc01hc2sg
fCBLZXlSZWxlYXNlTWFzaworICAgICAgICAgICAgfCBCdXR0b25QcmVzc01hc2sgfCBCdXR0b25S
ZWxlYXNlTWFzayB8IEJ1dHRvbk1vdGlvbk1hc2sKKyAgICAgICAgICAgIHwgS2V5bWFwU3RhdGVN
YXNrCisgICAgICAgICAgICB8IFBvaW50ZXJNb3Rpb25NYXNrCisgICAgICAgICAgICB8IEVudGVy
V2luZG93TWFzayB8IExlYXZlV2luZG93TWFzaworICAgICAgICAgICAgfCBGb2N1c0NoYW5nZU1h
c2sKKyAgICAgICAgICAgIHwgRXhwb3N1cmVNYXNrCisgICAgICAgICAgICB8IFN0cnVjdHVyZU5v
dGlmeU1hc2sKKyAgICAgICAgICAgIHwgU3Vic3RydWN0dXJlTm90aWZ5TWFzayk7CisKKyAgICBY
Rmx1c2goeDExSW5mbygpLT5kaXNwbGF5KCkpOworfQorCitYMTFFbWJlZENvbnRhaW5lcjo6flgx
MUVtYmVkQ29udGFpbmVyKCkKK3sKKyAgICBzZXRWaXNpYmxlKGZhbHNlKTsKKworICAgIGlmIChj
bGllbnQoKSkgeworICAgICAgICBYVW5tYXBXaW5kb3coeDExSW5mbygpLT5kaXNwbGF5KCksIGNs
aWVudCgpKTsKKyAgICAgICAgWFJlcGFyZW50V2luZG93KHgxMUluZm8oKS0+ZGlzcGxheSgpLCBj
bGllbnQoKSwgcm9vdFdpbmRvdygpLCAwLCAwKTsKKyAgICB9Cit9CisKK3ZvaWQgWDExRW1iZWRD
b250YWluZXI6Om1vdmVJbnB1dEZvY3VzVG9Qcm94eSgpCit7CisgICAgaWYgKGhhc0ZvY3VzKCkp
CisgICAgICAgIHJldHVybjsKKworICAgIFhTZXRJbnB1dEZvY3VzKHgxMUluZm8oKS0+ZGlzcGxh
eSgpLCBtX2ZvY3VzUHJveHktPndpbklkKCksIFJldmVydFRvUGFyZW50LCB4MTFJbmZvKCktPngx
MVRpbWUoKSk7Cit9CisKK3ZvaWQgWDExRW1iZWRDb250YWluZXI6OmFjY2VwdChXaW5JZCBjbGll
bnQpCit7CisgICAgc2V0Q2xpZW50KGNsaWVudCk7CisgICAgbV9jbGllbnRXaW5kb3ctPmluc3Rh
bGxFdmVudEZpbHRlcih0aGlzKTsKKworICAgIFhBZGRUb1NhdmVTZXQoeDExSW5mbygpLT5kaXNw
bGF5KCksIGNsaWVudCk7IC8vIGF2b2lkIGNsaWVudCBmcm9tIGNyYXNoaW5nIGFsb25nIHdpdGgg
dXMKKworICAgIHVuc2lnbmVkIGludCB2ZXJzaW9uID0gMDsgLy8gbGF0ZXN0IHZlcnNpb24gb2Yg
dGhlIHNwZWMKKworICAgIGludCBuaXRlbXMgPSAwOworICAgIHVuc2lnbmVkIGNoYXIgKmRhdGEg
PSAwOworICAgIHVuc2lnbmVkIGludCBjbGllbnRWZXJzaW9uID0gMDsKKworICAgIHN0YXRpYyBB
dG9tIGF0b20gPSBBVE9NKF9YRU1CRURfSU5GTyk7CisKKyAgICBpZiAoZWNvcmVfeF93aW5kb3df
cHJvcF9wcm9wZXJ0eV9nZXQoY2xpZW50LCBhdG9tLCBhdG9tLCAyLCAmZGF0YSwgJm5pdGVtcykp
IHsKKyAgICAgICAgdW5zaWduZWQgaW50ICpwcm9wID0gKHVuc2lnbmVkIGludCAqKSBkYXRhOwor
CisgICAgICAgIGlmIChuaXRlbXMgPj0gMikKKyAgICAgICAgICAgIGNsaWVudFZlcnNpb24gPSBw
cm9wWzBdOworICAgICAgICBmcmVlKGRhdGEpOworICAgIH0KKworICAgIC8vIEFzayB0aGUgY2xp
ZW50IGZvciBpdHMgbWluaW11bSBzaXplLgorICAgIEludFNpemUgbWluU2l6ZUhpbnQ7CisgICAg
WFNpemVIaW50cyBzaXplSGludDsKKyAgICBsb25nIHVudXNlZDsKKyAgICBpZiAoWEdldFdNTm9y
bWFsSGludHMoeDExSW5mbygpLT5kaXNwbGF5KCksIGNsaWVudCwgJnNpemVIaW50LCAmdW51c2Vk
KSAmJiAoc2l6ZUhpbnQuZmxhZ3MgJiBQTWluU2l6ZSkpCisgICAgICAgIG1pblNpemVIaW50ID0g
SW50U2l6ZShzaXplSGludC5taW5fd2lkdGgsIHNpemVIaW50Lm1pbl9oZWlnaHQpOworICAgIGVs
c2UKKyAgICAgICAgbWluU2l6ZUhpbnQgPSBJbnRTaXplKDAsIDApOworCisgICAgdW5zaWduZWQg
aW50IG1pblZlcnNpb24gPSB2ZXJzaW9uID4gY2xpZW50VmVyc2lvbiA/IGNsaWVudFZlcnNpb24g
OiB2ZXJzaW9uOworCisgICAgc2VuZFhFbWJlZE1lc3NhZ2UoY2xpZW50LCB4MTFJbmZvKCktPmRp
c3BsYXkoKSwgWEVNQkVEX0VNQkVEREVEX05PVElGWSwgMCwgd2luSWQoKSwgbWluVmVyc2lvbik7
CisKKyAgICBYTWFwV2luZG93KHgxMUluZm8oKS0+ZGlzcGxheSgpLCBjbGllbnQpOworCisgICAg
cmVzaXplKG1heChzaXplKCkud2lkdGgoKSwgbWluU2l6ZUhpbnQud2lkdGgoKSksIG1heChzaXpl
KCkuaGVpZ2h0KCksIG1pblNpemVIaW50LmhlaWdodCgpKSk7Cit9CisKK3ZvaWQgWDExRW1iZWRD
b250YWluZXI6OnJlamVjdChXaW5JZCBjbGllbnQpCit7CisgICAgWFJlbW92ZUZyb21TYXZlU2V0
KHgxMUluZm8oKS0+ZGlzcGxheSgpLCBjbGllbnQpOworICAgIFhSZXBhcmVudFdpbmRvdyh4MTFJ
bmZvKCktPmRpc3BsYXkoKSwgY2xpZW50LCByb290V2luZG93KCksIDAsIDApOworfQorCit2b2lk
IFgxMUVtYmVkQ29udGFpbmVyOjpzaG93KCkKK3sKKyAgICBYMTFXaW5kb3c6OnNob3coKTsKKwor
ICAgIC8vIHNpZ25hbCBtYXAKKyAgICBpZiAoY2xpZW50KCkpIHsKKyAgICAgICAgdW5zaWduZWQg
aW50IGRhdGFbXSA9IHt4ZW1iZWRWZXJzaW9uLCB4ZW1iZWRNYXBwZWR9OworICAgICAgICBYQ2hh
bmdlUHJvcGVydHkoeDExSW5mbygpLT5kaXNwbGF5KCksIGNsaWVudCgpLCBBVE9NKF9YRU1CRURf
SU5GTyksIEFUT00oX1hFTUJFRF9JTkZPKSwgMzIsCisgICAgICAgICAgICBQcm9wTW9kZVJlcGxh
Y2UsICh1bnNpZ25lZCBjaGFyICopIGRhdGEsIDIpOworICAgIH0KK30KKwordm9pZCBYMTFFbWJl
ZENvbnRhaW5lcjo6aGlkZSgpCit7CisgICAgWDExV2luZG93OjpoaWRlKCk7CisKKyAgICAvLyBz
aWduYWwgdW5tYXAKKyAgICBpZiAoY2xpZW50KCkpIHsKKyAgICAgICAgdW5zaWduZWQgaW50IGRh
dGFbXSA9IHt4ZW1iZWRWZXJzaW9uLCB4ZW1iZWRNYXBwZWR9OworICAgICAgICBYQ2hhbmdlUHJv
cGVydHkoeDExSW5mbygpLT5kaXNwbGF5KCksIGNsaWVudCgpLCBBVE9NKF9YRU1CRURfSU5GTyks
IEFUT00oX1hFTUJFRF9JTkZPKSwgMzIsCisgICAgICAgICAgICBQcm9wTW9kZVJlcGxhY2UsICh1
bnNpZ25lZCBjaGFyICopIGRhdGEsIDIpOworICAgIH0KKyAgICBtX2FjdGl2ZSA9IGZhbHNlOwor
fQorCit2b2lkIFgxMUVtYmVkQ29udGFpbmVyOjpyZXNpemUoaW50IHdpZHRoLCBpbnQgaGVpZ2h0
KQoreworICAgIFgxMVdpbmRvdzo6cmVzaXplKHdpZHRoLCBoZWlnaHQpOworICAgIGlmIChjbGll
bnQoKSkKKyAgICAgICAgWFJlc2l6ZVdpbmRvdyh4MTFJbmZvKCktPmRpc3BsYXkoKSwgY2xpZW50
KCksIHdpZHRoLCBoZWlnaHQpOworfQorCit2b2lkIFgxMUVtYmVkQ29udGFpbmVyOjpzZXRGcmFt
ZVJlY3QoY29uc3QgSW50UmVjdCYgcmVjdCkKK3sKKyAgICBYMTFXaW5kb3c6OnNldEZyYW1lUmVj
dChyZWN0KTsKKyAgICBpZiAoY2xpZW50KCkpCisgICAgICAgIFhNb3ZlUmVzaXplV2luZG93KHgx
MUluZm8oKS0+ZGlzcGxheSgpLCBjbGllbnQoKSwgMCwgMCwgcmVjdC53aWR0aCgpLCByZWN0Lmhl
aWdodCgpKTsKK30KKwordm9pZCBYMTFFbWJlZENvbnRhaW5lcjo6c2V0Rm9jdXMoKQoreworICAg
IG1vdmVJbnB1dEZvY3VzVG9Qcm94eSgpOworICAgIG1fYWN0aXZlID0gdHJ1ZTsKK30KKworYm9v
bCBYMTFFbWJlZENvbnRhaW5lcjo6aGFzRm9jdXMoKQoreworICAgIFdpbklkIGZvY3VzZWQ7Cisg
ICAgaW50IHJldmVydFRvOworICAgIFhHZXRJbnB1dEZvY3VzKHgxMUluZm8oKS0+ZGlzcGxheSgp
LCAmZm9jdXNlZCwgJnJldmVydFRvKTsKKworICAgIHJldHVybiBmb2N1c2VkID09IG1fZm9jdXNQ
cm94eS0+d2luSWQoKTsKK30KKworYm9vbCBYMTFFbWJlZENvbnRhaW5lcjo6aXNBY3RpdmUoKQor
eworICAgIHJldHVybiBtX2FjdGl2ZTsKK30KKworV2luSWQgWDExRW1iZWRDb250YWluZXI6OnJv
b3RXaW5kb3coKQoreworICAgIHJldHVybiBEZWZhdWx0Um9vdFdpbmRvdyh4MTFJbmZvKCktPmRp
c3BsYXkoKSk7Cit9CisKK2Jvb2wgWDExRW1iZWRDb250YWluZXI6OngxMUV2ZW50KFhFdmVudCog
ZXZlbnQpCit7CisgICAgLy8gd2Ugc3Vic2NyaWJlIHRvIGV2ZW50cyBkaXJlY3RseSBmcm9tIHRo
ZSBjbGllbnQgYXMgd2VsbAorICAgIC8vIGluIG9yZGVyIHRvIHBpY2sgdXAgd2hlZWwgZXZlbnRz
LgorICAgIGlmIChldmVudC0+eGFueS53aW5kb3cgPT0gY2xpZW50KCkpIHsKKyAgICAgICAgc3dp
dGNoIChldmVudC0+dHlwZSkgeworICAgICAgICBjYXNlIEJ1dHRvblByZXNzOgorICAgICAgICAg
ICAgLy8gbV9wbHVnaW5WaWV3LT5kaXNwYXRjaFdoZWVsRXZlbnQoZXZlbnQpOworICAgICAgICAg
ICAgYnJlYWs7CisgICAgICAgIGNhc2UgQnV0dG9uUmVsZWFzZToKKyAgICAgICAgICAgIGJyZWFr
OworICAgICAgICB9CisgICAgICAgIHJldHVybiB0cnVlOworICAgIH0KKworICAgIHN3aXRjaCAo
ZXZlbnQtPnR5cGUpIHsKKyAgICBjYXNlIEZvY3VzSW46CisgICAgICAgIGJyZWFrOworICAgIGNh
c2UgRm9jdXNPdXQ6CisgICAgICAgIC8vIHdoZW4gb3VyIHByb3h5IGdhaW4gZm9jdXMsIHRoZSBj
b250YWluZXIgYWN0dWFsbHkKKyAgICAgICAgLy8gbG9vc2VzIGl0LCBzbyBvbmx5IGRlYWN0aXZh
dGUgd2hlbiB0aGUgcHJveHkgbG9vc2VzCisgICAgICAgIC8vIGZvY3VzLgorICAgICAgICBpZiAo
ZXZlbnQtPnhhbnkud2luZG93ICE9IG1fZm9jdXNQcm94eS0+d2luSWQoKSkKKyAgICAgICAgICAg
IGJyZWFrOworCisgICAgICAgIHNlbmRYRW1iZWRNZXNzYWdlKGNsaWVudCgpLCB4MTFJbmZvKCkt
PmRpc3BsYXkoKSwgWEVNQkVEX0ZPQ1VTX09VVCk7CisgICAgICAgIG1fYWN0aXZlID0gZmFsc2U7
CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgTGVhdmVOb3RpZnk6CisgICAgICAgIHNlbmRYRW1i
ZWRNZXNzYWdlKGNsaWVudCgpLCB4MTFJbmZvKCktPmRpc3BsYXkoKSwgWEVNQkVEX1dJTkRPV19E
RUFDVElWQVRFKTsKKyAgICAgICAgaWYgKCFtX2FjdGl2ZSkKKyAgICAgICAgICAgIGVjb3JlX3hf
d2luZG93X2ZvY3VzKGVjb3JlX3hfd2luZG93X3BhcmVudF9nZXQod2luSWQoKSkpOworCisgICAg
ICAgIFhVbmdyYWJCdXR0b24oeDExSW5mbygpLT5kaXNwbGF5KCksIDQsIEFueU1vZGlmaWVyLCBj
bGllbnQoKSk7CisgICAgICAgIFhVbmdyYWJCdXR0b24oeDExSW5mbygpLT5kaXNwbGF5KCksIDUs
IEFueU1vZGlmaWVyLCBjbGllbnQoKSk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgRW50ZXJO
b3RpZnk6CisgICAgICAgIHNlbmRYRW1iZWRNZXNzYWdlKGNsaWVudCgpLCB4MTFJbmZvKCktPmRp
c3BsYXkoKSwgWEVNQkVEX1dJTkRPV19BQ1RJVkFURSk7CisgICAgICAgIG1vdmVJbnB1dEZvY3Vz
VG9Qcm94eSgpOworCisgICAgICAgIFhHcmFiQnV0dG9uKHgxMUluZm8oKS0+ZGlzcGxheSgpLCA0
LCBBbnlNb2RpZmllciwgY2xpZW50KCksIGZhbHNlLAorICAgICAgICAgICAgICAgIEJ1dHRvblBy
ZXNzTWFzaywgR3JhYk1vZGVBc3luYywgR3JhYk1vZGVBc3luYywgMEwsIDBMKTsKKyAgICAgICAg
WEdyYWJCdXR0b24oeDExSW5mbygpLT5kaXNwbGF5KCksIDUsIEFueU1vZGlmaWVyLCBjbGllbnQo
KSwgZmFsc2UsCisgICAgICAgICAgICAgICAgQnV0dG9uUHJlc3NNYXNrLCBHcmFiTW9kZUFzeW5j
LCBHcmFiTW9kZUFzeW5jLCAwTCwgMEwpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIEtleVBy
ZXNzOgorICAgIGNhc2UgS2V5UmVsZWFzZToKKyAgICAgICAgaWYgKGNsaWVudCgpICYmIGlzQWN0
aXZlKCkpCisgICAgICAgICAgICBldmVudC0+eGtleS53aW5kb3cgPSBjbGllbnQoKTsKKyAgICAg
ICAgZWxzZQorICAgICAgICAgICAgZXZlbnQtPnhrZXkud2luZG93ID0gZWNvcmVfeF93aW5kb3df
cGFyZW50X2dldCh3aW5JZCgpKTsKKworICAgICAgICBYU2VuZEV2ZW50KHgxMUluZm8oKS0+ZGlz
cGxheSgpLCBldmVudC0+eGtleS53aW5kb3csIGZhbHNlLCBOb0V2ZW50TWFzaywgZXZlbnQpOwor
ICAgICAgICBYU3luYyh4MTFJbmZvKCktPmRpc3BsYXkoKSwgZmFsc2UpOworICAgICAgICBicmVh
azsKKyAgICBjYXNlIENyZWF0ZU5vdGlmeToKKyAgICAgICAgaWYgKGNsaWVudCgpKQorICAgICAg
ICAgICAgcmVqZWN0KGV2ZW50LT54Y3JlYXRld2luZG93LndpbmRvdyk7CisgICAgICAgIGVsc2UK
KyAgICAgICAgICAgIGFjY2VwdChldmVudC0+eGNyZWF0ZXdpbmRvdy53aW5kb3cpOworICAgICAg
ICBicmVhazsKKyAgICBjYXNlIERlc3Ryb3lOb3RpZnk6CisgICAgICAgIC8vIGNsaWVudCBnb2Vz
IGF3YXkKKyAgICAgICAgaWYgKGV2ZW50LT54ZGVzdHJveXdpbmRvdy53aW5kb3cgPT0gY2xpZW50
KCkpIHsKKyAgICAgICAgICAgIHNldENsaWVudCgwKTsKKyAgICAgICAgICAgIHNldEZyYW1lUmVj
dChJbnRSZWN0KC0xLCAtMSwgMSwgMSkpOworICAgICAgICB9CisgICAgICAgIGJyZWFrOworICAg
IGNhc2UgUmVwYXJlbnROb3RpZnk6CisgICAgICAgIC8vIHRoZSBjbGllbnQgcmVwYXJlbnRzIGl0
c2VsZiBvdXQgb2YgdXMsIHdhbnRzIHRvIGxlYXZlIHVzCisgICAgICAgIGlmIChldmVudC0+eHJl
cGFyZW50LndpbmRvdyA9PSBjbGllbnQoKSAmJiBldmVudC0+eHJlcGFyZW50LnBhcmVudCAhPSB3
aW5JZCgpKSB7CisgICAgICAgICAgICBzZXRDbGllbnQoMCk7CisgICAgICAgICAgICBzZXRGcmFt
ZVJlY3QoSW50UmVjdCgtMSwgLTEsIDEsIDEpKTsKKyAgICAgICAgfSBlbHNlIGlmIChldmVudC0+
eHJlcGFyZW50LnBhcmVudCA9PSB3aW5JZCgpKSB7IC8vIHRoZSBjbGllbnQgcmVwYXJlbnRzIGl0
c2VsZiBpbnRvIHVzCisgICAgICAgICAgICBpZiAoY2xpZW50KCkpCisgICAgICAgICAgICAgICAg
cmVqZWN0KGV2ZW50LT54cmVwYXJlbnQud2luZG93KTsKKyAgICAgICAgICAgIGVsc2UKKyAgICAg
ICAgICAgICAgICBhY2NlcHQoZXZlbnQtPnhyZXBhcmVudC53aW5kb3cpOworICAgICAgICB9Cisg
ICAgICAgIGJyZWFrOworICAgIGNhc2UgQ2xpZW50TWVzc2FnZToKKyAgICAgICAgaWYgKGV2ZW50
LT54Y2xpZW50Lm1lc3NhZ2VfdHlwZSAhPSBBVE9NKF9YRU1CRUQpKQorICAgICAgICAgICAgYnJl
YWs7CisKKyAgICAgICAgLy8gbm90IGZvciB1cywgaWdub3JlCisgICAgICAgIGlmIChldmVudC0+
eGNsaWVudC53aW5kb3cgIT0gd2luSWQoKSkKKyAgICAgICAgICAgIGJyZWFrOworCisgICAgICAg
IHN3aXRjaCAoZXZlbnQtPnhjbGllbnQuZGF0YS5sWzFdKSB7CisgICAgICAgIGNhc2UgWEVNQkVE
X1JFUVVFU1RfRk9DVVM6CisgICAgICAgICAgICBtX3BsdWdpblZpZXctPnNldEZvY3VzKHRydWUp
OworICAgICAgICAgICAgc2VuZFhFbWJlZE1lc3NhZ2UoY2xpZW50KCksIHgxMUluZm8oKS0+ZGlz
cGxheSgpLCBYRU1CRURfRk9DVVNfSU4sIFhFTUJFRF9GT0NVU19DVVJSRU5UKTsKKyAgICAgICAg
ICAgIGJyZWFrOworICAgICAgICBjYXNlIFhFTUJFRF9GT0NVU19ORVhUOgorICAgICAgICAgICAg
Ly8gQ2xpZW50IHNlbmRzIHRoaXMgZXZlbnQgd2hlbiBpdCByZWNlaXZlZCBhIHRhYgorICAgICAg
ICAgICAgLy8gZm9yd2FyZCBhbmQgd2FzIGF0IHRoZSBlbmQgb2YgaXRzIGZvY3VzIGNoYWluLiBJ
ZgorICAgICAgICAgICAgLy8gd2UgYXJlIHRoZSBvbmx5IHdpZGdldCBpbiB0aGUgZm9jdXMgY2hh
aW4sIHdlIHNlbmQKKyAgICAgICAgICAgIC8vIG91cnNlbHZlcyBhIEZvY3VzT3V0IGV2ZW50Lgor
ICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgWEVNQkVEX0ZPQ1VTX1BSRVY6CisgICAg
ICAgICAgICAvLyBDbGllbnQgc2VuZHMgdGhpcyBldmVudCB3aGVuIGl0IHJlY2VpdmVkIGEgYmFj
a3RhYgorICAgICAgICAgICAgLy8gYW5kIHdhcyBhdCB0aGUgc3RhcnQgb2YgaXRzIGZvY3VzIGNo
YWluLiBJZiB3ZSBhcmUKKyAgICAgICAgICAgIC8vIHRoZSBvbmx5IHdpZGdldCBpbiB0aGUgZm9j
dXMgY2hhaW4sIHdlIHNlbmQKKyAgICAgICAgICAgIC8vIG91cnNlbHZlcyBhIEZvY3VzT3V0IGV2
ZW50LgorICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAgICAgYnJlYWs7CisgICAg
fQorICAgIHJldHVybiBmYWxzZTsKK30KKwordm9pZCBzZW5kWEVtYmVkTWVzc2FnZShXaW5JZCB3
aW5kb3csIERpc3BsYXkqIGRpc3BsYXksIGxvbmcgbWVzc2FnZSwgbG9uZyBkZXRhaWwsIGxvbmcg
ZGF0YTEsIGxvbmcgZGF0YTIpCit7CisgICAgWEV2ZW50IGV2OworICAgIG1lbXNldCgmZXYsIDAs
IHNpemVvZihldikpOworICAgIGV2LnhjbGllbnQudHlwZSA9IENsaWVudE1lc3NhZ2U7CisgICAg
ZXYueGNsaWVudC53aW5kb3cgPSB3aW5kb3c7CisgICAgZXYueGNsaWVudC5tZXNzYWdlX3R5cGUg
PSBBVE9NKF9YRU1CRURfSU5GTyk7CisgICAgZXYueGNsaWVudC5mb3JtYXQgPSAzMjsKKyAgICBl
di54Y2xpZW50LmRhdGEubFswXSA9IGVjb3JlX3hfY3VycmVudF90aW1lX2dldCgpOworICAgIGV2
LnhjbGllbnQuZGF0YS5sWzFdID0gbWVzc2FnZTsKKyAgICBldi54Y2xpZW50LmRhdGEubFsyXSA9
IGRldGFpbDsKKyAgICBldi54Y2xpZW50LmRhdGEubFszXSA9IGRhdGExOworICAgIGV2LnhjbGll
bnQuZGF0YS5sWzRdID0gZGF0YTI7CisgICAgWFNlbmRFdmVudChkaXNwbGF5LCB3aW5kb3csIGZh
bHNlLCBOb0V2ZW50TWFzaywgJmV2KTsKKyAgICBYU3luYyhkaXNwbGF5LCBmYWxzZSk7Cit9CisK
ZGlmZiAtLWdpdCBhL1dlYkNvcmUvcGx1Z2lucy9lZmwvWDExRW1iZWRDb250YWluZXIuaCBiL1dl
YkNvcmUvcGx1Z2lucy9lZmwvWDExRW1iZWRDb250YWluZXIuaApuZXcgZmlsZSBtb2RlIDEwMDY0
NAppbmRleCAwMDAwMDAwLi4wMjE5NmJjCi0tLSAvZGV2L251bGwKKysrIGIvV2ViQ29yZS9wbHVn
aW5zL2VmbC9YMTFFbWJlZENvbnRhaW5lci5oCkBAIC0wLDAgKzEsNzUgQEAKKy8qCisgICAgQ29w
eXJpZ2h0IChDKSAyMDA5IElOZFQgLSBJbnN0aXR1dG8gTm9raWEgZGUgVGVjbm9sb2dpYQorICAg
IENvcHlyaWdodCAoQykgMjAwOS0yMDEwIFByb0ZVU0lPTiBlbWJlZGRlZCBzeXN0ZW1zCisgICAg
Q29weXJpZ2h0IChDKSAyMDA5LTIwMTAgU2Ftc3VuZyBFbGVjdHJvbmljcworCisgICAgVGhpcyBs
aWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgor
ICAgIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwg
UHVibGljCisgICAgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91
bmRhdGlvbjsgZWl0aGVyCisgICAgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91
ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorCisgICAgVGhpcyBsaWJyYXJ5IGlzIGRpc3Ry
aWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgICAgYnV0IFdJVEhP
VVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAg
ICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBT
ZWUgdGhlIEdOVQorICAgIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBk
ZXRhaWxzLgorCisgICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05V
IExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICAgIGFsb25nIHdpdGggdGhpcyBsaWJy
YXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCisgICAgdGhl
IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0
aCBGbG9vciwKKyAgICBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKyovCisKKyNpZm5kZWYg
WDExRW1iZWRDb250YWluZXJfaAorI2RlZmluZSBYMTFFbWJlZENvbnRhaW5lcl9oCisKKyNpbmNs
dWRlICJQbHVnaW5WaWV3LmgiCisjaW5jbHVkZSAiWDExV2luZG93LmgiCisKKyNpbmNsdWRlIDx3
dGYvT3duUHRyLmg+CisjaW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgorCitjbGFzcyBYMTFFbWJlZENv
bnRhaW5lcjsKK2NsYXNzIFgxMVdpbmRvdzsKKworY2xhc3MgWDExRW1iZWRDb250YWluZXIgOiBw
dWJsaWMgWDExV2luZG93IHsKK3B1YmxpYzoKKyAgICBYMTFFbWJlZENvbnRhaW5lcihFdmFzKiBl
dmFzLCBXZWJDb3JlOjpQbHVnaW5WaWV3KiB2aWV3KTsKKyAgICB+WDExRW1iZWRDb250YWluZXIo
KTsKKworICAgIFdpbklkIHJvb3RXaW5kb3coKTsKKworICAgIFdpbklkIGNsaWVudCgpIHsgcmV0
dXJuIG1fY2xpZW50OyB9CisgICAgdm9pZCBzZXRDbGllbnQoV2luSWQgY2xpZW50KQorICAgIHsK
KyAgICAgICAgbV9jbGllbnQgPSBjbGllbnQ7CisgICAgICAgIGlmIChjbGllbnQpCisgICAgICAg
ICAgICBtX2NsaWVudFdpbmRvdy5zZXQoWDExV2luZG93OjphZG9wdChjbGllbnQpKTsKKyAgICB9
CisKKyAgICB2b2lkIGFjY2VwdChXaW5JZCBjbGllbnQpOworICAgIHZvaWQgcmVqZWN0KFdpbklk
IGNsaWVudCk7CisKKyAgICB2b2lkIG1vdmVJbnB1dEZvY3VzVG9Qcm94eSgpOworICAgIGJvb2wg
eDExRXZlbnQoWEV2ZW50KiBldmVudCk7CisKKyAgICB2b2lkIHNldEZyYW1lUmVjdChjb25zdCBX
ZWJDb3JlOjpJbnRSZWN0JiByZWN0KTsKKworICAgIHZvaWQgcmVzaXplKGludCB3aWR0aCwgaW50
IGhlaWdodCk7CisKKyAgICB2b2lkIHNob3coKTsKKyAgICB2b2lkIGhpZGUoKTsKKworICAgIHZv
aWQgc2V0Rm9jdXMoKTsKKyAgICBib29sIGhhc0ZvY3VzKCk7CisgICAgYm9vbCBpc0FjdGl2ZSgp
OworCitwcml2YXRlOgorICAgIGJvb2wgbV9hY3RpdmU7CisgICAgV2luSWQgbV9jbGllbnQ7CisK
KyAgICBXZWJDb3JlOjpQbHVnaW5WaWV3KiBtX3BsdWdpblZpZXc7CisgICAgT3duUHRyPFgxMVdp
bmRvdz4gbV9mb2N1c1Byb3h5OworICAgIE93blB0cjxYMTFXaW5kb3c+IG1fY2xpZW50V2luZG93
OworfTsKKworI2VuZGlmIC8vIFgxMUVtYmVkQ29udGFpbmVyX2gKZGlmZiAtLWdpdCBhL1dlYkNv
cmUvcGx1Z2lucy9lZmwvWDExV2luZG93LmNwcCBiL1dlYkNvcmUvcGx1Z2lucy9lZmwvWDExV2lu
ZG93LmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yYWNkMjYxCi0tLSAv
ZGV2L251bGwKKysrIGIvV2ViQ29yZS9wbHVnaW5zL2VmbC9YMTFXaW5kb3cuY3BwCkBAIC0wLDAg
KzEsMTgzIEBACisvKgorICAgIENvcHlyaWdodCAoQykgMjAwOSBJTmRUIC0gSW5zdGl0dXRvIE5v
a2lhIGRlIFRlY25vbG9naWEKKyAgICBDb3B5cmlnaHQgKEMpIDIwMDktMjAxMCBQcm9GVVNJT04g
ZW1iZWRkZWQgc3lzdGVtcworICAgIENvcHlyaWdodCAoQykgMjAwOS0yMDEwIFNhbXN1bmcgRWxl
Y3Ryb25pY3MKKworICAgIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJl
ZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAgICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRo
ZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworICAgIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5
IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICAgIHZlcnNpb24gMiBvZiB0
aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKworICAg
IFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUg
dXNlZnVsLAorICAgIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBp
bXBsaWVkIHdhcnJhbnR5IG9mCisgICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEg
UEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAgICBMaWJyYXJ5IEdlbmVyYWwgUHVi
bGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKworICAgIFlvdSBzaG91bGQgaGF2ZSByZWNl
aXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAg
ICBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYg
bm90LCB3cml0ZSB0bworICAgIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUx
IEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCisgICAgQm9zdG9uLCBNQSAwMjExMC0xMzAx
LCBVU0EuCisqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiWDExV2luZG93Lmgi
CisKKyNpbmNsdWRlIDxFY29yZV9FdmFzLmg+CisKK3VzaW5nIG5hbWVzcGFjZSBXZWJDb3JlOwor
CitFaW5hX0Jvb2wgb25FY29yZVhFdmVudCh2b2lkKiBvYmplY3QsIGludCB0eXBlLCB2b2lkKiBl
dmVudERhdGEpOworCit2b2lkIFgxMVdpbmRvdzo6aW5pdChXaW5JZCBwYXJlbnQsIEludFJlY3Qm
IGdlb21ldHJ5KQoreworICAgIG1fd2luSWQgPSBlY29yZV94X3dpbmRvd19uZXcocGFyZW50LCBn
ZW9tZXRyeS54KCksIGdlb21ldHJ5LnkoKSwKKyAgICAgICAgICAgIGdlb21ldHJ5LndpZHRoKCks
IGdlb21ldHJ5LmhlaWdodCgpKTsKKyAgICBtX1hFdmVudEhhbmRsZXIgPSBlY29yZV9ldmVudF9o
YW5kbGVyX2FkZChFQ09SRV9YX0VWRU5UX0FOWSwgb25FY29yZVhFdmVudCwgdGhpcyk7Cit9CisK
K1gxMVdpbmRvdyogWDExV2luZG93OjphZG9wdChXaW5JZCBpZCkKK3sKKyAgICBYMTFXaW5kb3cq
IHdpbiA9IG5ldyBYMTFXaW5kb3coKTsKKyAgICB3aW4tPm1fd2luSWQgPSBpZDsKKyAgICB3aW4t
Pm1fWEV2ZW50SGFuZGxlciA9IGVjb3JlX2V2ZW50X2hhbmRsZXJfYWRkKEVDT1JFX1hfRVZFTlRf
QU5ZLCBvbkVjb3JlWEV2ZW50LCB3aW4pOworCisgICAgcmV0dXJuIHdpbjsKK30KKworWDExV2lu
ZG93OjpYMTFXaW5kb3coKQorICAgIDogbV94MTFJbmZvKDApCisgICAgLCBtX3Zpc2libGUoZmFs
c2UpCisgICAgLCBtX3JlY3QoSW50UmVjdCgpKQorICAgICwgbV9ldmVudEZpbHRlcigwKQorICAg
ICwgbV9hZG9wdGVkKHRydWUpCit7Cit9CisKK1gxMVdpbmRvdzo6WDExV2luZG93KEV2YXMgKmV2
YXMsIEludFJlY3QgZ2VvbWV0cnkpCisgICAgOiBtX3gxMUluZm8oMCkKKyAgICAsIG1fdmlzaWJs
ZShmYWxzZSkKKyAgICAsIG1fcmVjdChnZW9tZXRyeSkKKyAgICAsIG1fZXZlbnRGaWx0ZXIoMCkK
KyAgICAsIG1fYWRvcHRlZChmYWxzZSkKK3sKKyAgICBFY29yZV9FdmFzKiBlZSA9IGVjb3JlX2V2
YXNfZWNvcmVfZXZhc19nZXQoZXZhcyk7CisgICAgV2luSWQgcGFyZW50ID0gZWNvcmVfZXZhc193
aW5kb3dfZ2V0KGVlKTsKKyAgICBpbml0KHBhcmVudCwgZ2VvbWV0cnkpOworfQorCitYMTFXaW5k
b3c6OlgxMVdpbmRvdyhXaW5JZCBwYXJlbnQsIEludFJlY3QgZ2VvbWV0cnkpCisgICAgOiBtX3gx
MUluZm8oMCkKKyAgICAsIG1fdmlzaWJsZShmYWxzZSkKKyAgICAsIG1fcmVjdChnZW9tZXRyeSkK
KyAgICAsIG1fZXZlbnRGaWx0ZXIoMCkKKyAgICAsIG1fYWRvcHRlZChmYWxzZSkKK3sKKyAgICBp
bml0KHBhcmVudCwgZ2VvbWV0cnkpOworfQorCitYMTFXaW5kb3c6On5YMTFXaW5kb3coKQorewor
ICAgIGVjb3JlX2V2ZW50X2hhbmRsZXJfZGVsKG1fWEV2ZW50SGFuZGxlcik7CisKKyAgICBkZWxl
dGUgbV94MTFJbmZvOworICAgIGlmICghbV9hZG9wdGVkKQorICAgICAgICBlY29yZV94X3dpbmRv
d19mcmVlKG1fd2luSWQpOworfQorCit2b2lkIFgxMVdpbmRvdzo6c2hvdygpCit7CisgICAgaWYg
KG1fdmlzaWJsZSkKKyAgICAgICAgcmV0dXJuOworICAgIGVjb3JlX3hfd2luZG93X3Nob3cobV93
aW5JZCk7CisgICAgbV92aXNpYmxlID0gdHJ1ZTsKK30KKwordm9pZCBYMTFXaW5kb3c6OmhpZGUo
KQoreworICAgIGlmIChtX3Zpc2libGUpCisgICAgICAgIHJldHVybjsKKyAgICBlY29yZV94X3dp
bmRvd19oaWRlKG1fd2luSWQpOworICAgIG1fdmlzaWJsZSA9IGZhbHNlOworfQorCit2b2lkIFgx
MVdpbmRvdzo6c2V0VmlzaWJsZShib29sIG9uKQoreworICAgIGlmIChvbikKKyAgICAgICAgc2hv
dygpOworICAgIGVsc2UKKyAgICAgICAgaGlkZSgpOworfQorCit2b2lkIFgxMVdpbmRvdzo6bW92
ZShpbnQgeCwgaW50IHkpCit7CisgICAgSW50UG9pbnQgbmV3UG9zID0gSW50UG9pbnQoeCwgeSk7
CisgICAgaWYgKGdlb21ldHJ5KCkubG9jYXRpb24oKSA9PSBuZXdQb3MpCisgICAgICAgIHJldHVy
bjsKKworICAgIGVjb3JlX3hfd2luZG93X21vdmUod2luSWQoKSwgeCwgeSk7CisgICAgbV9yZWN0
LnNldExvY2F0aW9uKG5ld1Bvcyk7Cit9CisKK3ZvaWQgWDExV2luZG93OjpyZXNpemUoaW50IHdp
ZHRoLCBpbnQgaGVpZ2h0KQoreworICAgIEludFNpemUgbmV3U2l6ZSA9IEludFNpemUod2lkdGgs
IGhlaWdodCk7CisKKyAgICBpZiAoc2l6ZSgpID09IG5ld1NpemUpCisgICAgICAgIHJldHVybjsK
KyAgICBlY29yZV94X3dpbmRvd19yZXNpemUod2luSWQoKSwgd2lkdGgsIGhlaWdodCk7CisgICAg
bV9yZWN0LnNldFNpemUobmV3U2l6ZSk7Cit9CisKK3ZvaWQgWDExV2luZG93OjpzZXRGcmFtZVJl
Y3QoY29uc3QgSW50UmVjdCYgcmVjdCkKK3sKKyAgICBpZiAoZ2VvbWV0cnkoKSA9PSByZWN0KQor
ICAgICAgICByZXR1cm47CisgICAgZWNvcmVfeF93aW5kb3dfbW92ZV9yZXNpemUod2luSWQoKSwg
cmVjdC54KCksIHJlY3QueSgpLCByZWN0LndpZHRoKCksIHJlY3QuaGVpZ2h0KCkpOworICAgIG1f
cmVjdCA9IHJlY3Q7Cit9CisKK3ZvaWQgWDExV2luZG93Ojp1cGRhdGUoY29uc3QgSW50UmVjdCYg
cmVjdCkKK3sKKyAgICBlY29yZV94X3dpbmRvd19hcmVhX2V4cG9zZSh3aW5JZCgpLCByZWN0Lngo
KSwgcmVjdC55KCksIHJlY3Qud2lkdGgoKSwgcmVjdC5oZWlnaHQoKSk7Cit9CisKK3ZvaWQgWDEx
V2luZG93OjpzZXRGb2N1cygpCit7CisgICAgZWNvcmVfeF93aW5kb3dfZm9jdXMod2luSWQoKSk7
Cit9CisKK3ZvaWQgWDExV2luZG93OjppbnN0YWxsRXZlbnRGaWx0ZXIoWDExV2luZG93KiBvYmpl
Y3QpCit7CisgICAgbV9ldmVudEZpbHRlciA9IG9iamVjdDsKK30KKwordm9pZCBYMTFXaW5kb3c6
OnByb2Nlc3NFdmVudChYRXZlbnQqIHhldmVudCkKK3sKKyAgICBib29sIGhhbmRsZWQgPSBmYWxz
ZTsKKworICAgIGlmIChtX2V2ZW50RmlsdGVyKQorICAgICAgICBoYW5kbGVkID0gbV9ldmVudEZp
bHRlci0+eDExRXZlbnQoeGV2ZW50KTsKKworICAgIGlmIChoYW5kbGVkKQorICAgICAgICByZXR1
cm47CisKKyAgICB4MTFFdmVudCh4ZXZlbnQpOworfQorCitib29sIFgxMVdpbmRvdzo6eDExRXZl
bnQoWEV2ZW50KiB4ZXZlbnQpCit7CisgICAgcmV0dXJuIGZhbHNlOworfQorCitFaW5hX0Jvb2wg
b25FY29yZVhFdmVudCh2b2lkKiBvYmplY3QsIGludCB0eXBlLCB2b2lkKiBldmVudERhdGEpCit7
CisgICAgWDExV2luZG93KiB3aW4gPSBzdGF0aWNfY2FzdDxYMTFXaW5kb3cqPihvYmplY3QpOwor
CisgICAgWEV2ZW50KiB4ZXZlbnQgPSAoWEV2ZW50KikgZXZlbnREYXRhOworCisgICAgaWYgKHhl
dmVudC0+dHlwZSA+IDEgJiYgeGV2ZW50LT54YW55LndpbmRvdyA9PSB3aW4tPndpbklkKCkpCisg
ICAgICAgIHdpbi0+cHJvY2Vzc0V2ZW50KHhldmVudCk7CisKKyAgICByZXR1cm4gRUNPUkVfQ0FM
TEJBQ0tfUkVORVc7Cit9CisKZGlmZiAtLWdpdCBhL1dlYkNvcmUvcGx1Z2lucy9lZmwvWDExV2lu
ZG93LmggYi9XZWJDb3JlL3BsdWdpbnMvZWZsL1gxMVdpbmRvdy5oCm5ldyBmaWxlIG1vZGUgMTAw
NjQ0CmluZGV4IDAwMDAwMDAuLjU2ZTI3MzYKLS0tIC9kZXYvbnVsbAorKysgYi9XZWJDb3JlL3Bs
dWdpbnMvZWZsL1gxMVdpbmRvdy5oCkBAIC0wLDAgKzEsMTA1IEBACisvKgorICAgIENvcHlyaWdo
dCAoQykgMjAwOSBJTmRUIC0gSW5zdGl0dXRvIE5va2lhIGRlIFRlY25vbG9naWEKKyAgICBDb3B5
cmlnaHQgKEMpIDIwMDktMjAxMCBQcm9GVVNJT04gZW1iZWRkZWQgc3lzdGVtcworICAgIENvcHly
aWdodCAoQykgMjAwOS0yMDEwIFNhbXN1bmcgRWxlY3Ryb25pY3MKKworICAgIFRoaXMgbGlicmFy
eSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAgICBt
b2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1Ymxp
YworICAgIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRp
b247IGVpdGhlcgorICAgIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0
aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKworICAgIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRl
ZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICAgIGJ1dCBXSVRIT1VUIEFO
WSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgICAgTUVS
Q0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRo
ZSBHTlUKKyAgICBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWls
cy4KKworICAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJy
YXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAgICBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsg
c2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bworICAgIHRoZSBGcmVl
IFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxv
b3IsCisgICAgQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisqLworCisjaWZuZGVmIFgxMVdp
bmRvd19oCisjZGVmaW5lIFgxMVdpbmRvd19oCisKKyNpbmNsdWRlICJJbnRSZWN0LmgiCisjaW5j
bHVkZSAiUGx1Z2luUGFja2FnZS5oIgorCisjaW5jbHVkZSA8RWNvcmUuaD4KKyNpbmNsdWRlIDxF
Y29yZV9YLmg+CisjaW5jbHVkZSA8RXZhcy5oPgorCit0eXBlZGVmIFdpbmRvdyBXaW5JZDsKKwor
Y2xhc3MgWDExSW5mbyB7CitwdWJsaWM6CisgICAgRGlzcGxheSogZGlzcGxheSgpIHsgcmV0dXJu
IChEaXNwbGF5KikgZWNvcmVfeF9kaXNwbGF5X2dldCgpOyB9CisgICAgVmlzdWFsKiB2aXN1YWwo
KSB7IHJldHVybiAoVmlzdWFsKikgbV9hdHQudmlzdWFsOyB9CisgICAgdW5zaWduZWQgaW50IGRl
cHRoKCkgeyByZXR1cm4gbV9hdHQuZGVwdGg7IH0KKyAgICBDb2xvcm1hcCBjb2xvcm1hcCgpIHsg
cmV0dXJuIG1fYXR0LmNvbG9ybWFwOyB9CisgICAgdW5zaWduZWQgaW50IHgxMVRpbWUoKSB7IHJl
dHVybiBlY29yZV94X2N1cnJlbnRfdGltZV9nZXQoKTsgfQorCitwcml2YXRlOgorICAgIFgxMUlu
Zm8oV2luSWQgb3duZXIpCisgICAgeworICAgICAgICBtX293bmVyID0gb3duZXI7CisgICAgICAg
IGVjb3JlX3hfd2luZG93X2F0dHJpYnV0ZXNfZ2V0KG93bmVyLCAmbV9hdHQpOworICAgICAgICBt
X2F0dC5jb2xvcm1hcCA9IERlZmF1bHRDb2xvcm1hcChkaXNwbGF5KCksIERlZmF1bHRTY3JlZW4o
ZGlzcGxheSgpKSk7CisgICAgfQorICAgIFdpbklkIG1fb3duZXI7CisgICAgRWNvcmVfWF9XaW5k
b3dfQXR0cmlidXRlcyBtX2F0dDsKKyAgICBmcmllbmQgY2xhc3MgWDExV2luZG93OworfTsKKwor
Y2xhc3MgWDExV2luZG93IHsKK3B1YmxpYzoKKyAgICBYMTFXaW5kb3coRXZhcyAqZXZhcywgV2Vi
Q29yZTo6SW50UmVjdCBnZW9tZXRyeSA9IFdlYkNvcmU6OkludFJlY3QoMCwgMCwgMzIsIDMyKSk7
CisgICAgWDExV2luZG93KFdpbklkIHBhcmVudCwgV2ViQ29yZTo6SW50UmVjdCBnZW9tZXRyeSA9
IFdlYkNvcmU6OkludFJlY3QoMCwgMCwgMzIsIDMyKSk7CisgICAgflgxMVdpbmRvdygpOworCisg
ICAgc3RhdGljIFgxMVdpbmRvdyogYWRvcHQoV2luSWQgaWQpOworCisgICAgWDExSW5mbyogeDEx
SW5mbygpCisgICAgeworICAgICAgICBpZiAoIW1feDExSW5mbykKKyAgICAgICAgICAgIG1feDEx
SW5mbyA9IG5ldyBYMTFJbmZvKG1fd2luSWQpOworICAgICAgICByZXR1cm4gbV94MTFJbmZvOwor
ICAgIH0KKworICAgIFdlYkNvcmU6OkludFNpemUgc2l6ZSgpIHsgcmV0dXJuIG1fcmVjdC5zaXpl
KCk7IH0KKyAgICBXZWJDb3JlOjpJbnRSZWN0IGdlb21ldHJ5KCkgeyByZXR1cm4gbV9yZWN0OyB9
CisKKyAgICB2b2lkIGluc3RhbGxFdmVudEZpbHRlcihYMTFXaW5kb3cqIG9iamVjdCk7CisgICAg
dm9pZCBwcm9jZXNzRXZlbnQoWEV2ZW50KiB4ZXZlbnQpOworICAgIHZpcnR1YWwgYm9vbCB4MTFF
dmVudChYRXZlbnQqIGV2ZW50KTsKKworICAgIHZpcnR1YWwgdm9pZCBzZXRGcmFtZVJlY3QoY29u
c3QgV2ViQ29yZTo6SW50UmVjdCYgcmVjdCk7CisKKyAgICB2aXJ0dWFsIHZvaWQgbW92ZShpbnQg
eCwgaW50IHkpOworICAgIHZpcnR1YWwgdm9pZCByZXNpemUoaW50IHdpZHRoLCBpbnQgaGVpZ2h0
KTsKKworICAgIHZpcnR1YWwgdm9pZCB1cGRhdGUoY29uc3QgV2ViQ29yZTo6SW50UmVjdCYgcmVj
dCk7CisKKyAgICB2aXJ0dWFsIHZvaWQgc2hvdygpOworICAgIHZpcnR1YWwgdm9pZCBoaWRlKCk7
CisgICAgdm9pZCBzZXRWaXNpYmxlKGJvb2wgb24pOworICAgIHZpcnR1YWwgdm9pZCBzZXRGb2N1
cygpOworCisgICAgV2luSWQgd2luSWQoKSB7IHJldHVybiBtX3dpbklkOyB9CisKK3Byb3RlY3Rl
ZDoKKyAgICBYMTFXaW5kb3coKTsKKyAgICB2b2lkIGluaXQoV2luSWQgcGFyZW50LCBXZWJDb3Jl
OjpJbnRSZWN0JiBnZW9tZXRyeSk7CisgICAgdm9pZCBhY2NlcHRFdmVudFR5cGUoaW50IHR5cGUp
OworCisgICAgV2luSWQgbV93aW5JZDsKKyAgICBYMTFJbmZvKiBtX3gxMUluZm87CisgICAgYm9v
bCBtX3Zpc2libGU7CisgICAgV2ViQ29yZTo6SW50UmVjdCBtX3JlY3Q7CisgICAgWDExV2luZG93
KiBtX2V2ZW50RmlsdGVyOworICAgIEVjb3JlX0V2ZW50X0hhbmRsZXIqIG1fWEV2ZW50SGFuZGxl
cjsKKyAgICBib29sIG1fYWRvcHRlZDsKK307CisKKworI2VuZGlmIC8vIFgxMVdpbmRvd19oCg==
</data>
<flag name="review"
          id="54180"
          type_id="1"
          status="-"
          setter="kenneth"
    />
    <flag name="commit-queue"
          id="54181"
          type_id="3"
          status="-"
          setter="kenneth"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>81212</attachid>
            <date>2011-02-04 06:52:07 -0800</date>
            <delta_ts>2011-02-04 07:10:05 -0800</delta_ts>
            <desc>Efl plugin&apos;s part support</desc>
            <filename>eflplugin.patch</filename>
            <type>text/plain</type>
            <size>54598</size>
            <attacher name="Mariusz Grzegorczyk">mariusz.g</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cgYi9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvQ2hhbmdlTG9nCmluZGV4IGFjZmQwZTQuLjYyNmE0MGQgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKKysrIGIvU291cmNlL0phdmFTY3JpcHRD
b3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDExIEBACisyMDExLTAyLTA0ICBNYXJpdXN6IEdyemVn
b3JjenlrICA8bWFyaXVzei5nQHNhbXN1bmcuY29tPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5P
Qk9EWSAoT09QUyEpLgorCisgICAgICAgIFN1cHBvcnQgZm9yIGVmbCdzIHBsdWdpbiBwYXJ0CisK
KyAgICAgICAgKiB3dGYvUGxhdGZvcm0uaDoKKwogMjAxMS0wMS0zMCAgQ3NhYmEgT3N6dHJvZ29u
w6FjICA8b3NzeUB3ZWJraXQub3JnPgogCiAgICAgICAgIFVucmV2aWV3ZWQsIHJvbGxpbmcgb3V0
IHI3NzA5OCwgcjc3MDk5LCByNzcxMDAsIHI3NzEwOSwgYW5kCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvd3RmL1BsYXRmb3JtLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd3Rm
L1BsYXRmb3JtLmgKaW5kZXggMDdmNTdmMC4uNjRkY2MzZCAxMDA2NDQKLS0tIGEvU291cmNlL0ph
dmFTY3JpcHRDb3JlL3d0Zi9QbGF0Zm9ybS5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93
dGYvUGxhdGZvcm0uaApAQCAtMTEwMSw3ICsxMTAxLDcgQEAKICNkZWZpbmUgV0FSTl9VTlVTRURf
UkVUVVJOCiAjZW5kaWYKIAotI2lmICFFTkFCTEUoTkVUU0NBUEVfUExVR0lOX0FQSSkgfHwgKEVO
QUJMRShORVRTQ0FQRV9QTFVHSU5fQVBJKSAmJiAoKE9TKFVOSVgpICYmIChQTEFURk9STShRVCkg
fHwgUExBVEZPUk0oV1gpKSkgfHwgUExBVEZPUk0oR1RLKSkpCisjaWYgIUVOQUJMRShORVRTQ0FQ
RV9QTFVHSU5fQVBJKSB8fCAoRU5BQkxFKE5FVFNDQVBFX1BMVUdJTl9BUEkpICYmICgoT1MoVU5J
WCkgJiYgKFBMQVRGT1JNKFFUKSB8fCBQTEFURk9STShXWCkpKSB8fCBQTEFURk9STShHVEspIHx8
IFBMQVRGT1JNKEVGTCkpKQogI2RlZmluZSBFTkFCTEVfUExVR0lOX1BBQ0tBR0VfU0lNUExFX0hB
U0ggMQogI2VuZGlmCiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0NNYWtlTGlzdHNFZmwu
dHh0IGIvU291cmNlL1dlYkNvcmUvQ01ha2VMaXN0c0VmbC50eHQKaW5kZXggMmZmOGM0ZS4uMTlh
MTJmNSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ01ha2VMaXN0c0VmbC50eHQKKysrIGIv
U291cmNlL1dlYkNvcmUvQ01ha2VMaXN0c0VmbC50eHQKQEAgLTExLDYgKzExLDcgQEAgTElTVChB
UFBFTkQgV2ViQ29yZV9JTkNMVURFX0RJUkVDVE9SSUVTCiAgICIke1dFQkNPUkVfRElSfS9wbGF0
Zm9ybS9ncmFwaGljcy9lZmwiCiAgICIke1dFQkNPUkVfRElSfS9wYWdlL2VmbCIKICAgIiR7V0VC
Q09SRV9ESVJ9L2FjY2Vzc2liaWxpdHkvZWZsIgorICAiJHtXRUJDT1JFX0RJUn0vcGx1Z2lucy9l
ZmwiCiAgICIke1dFQktJVF9ESVJ9L2VmbC9XZWJDb3JlU3VwcG9ydCIKICAgIiR7V0VCS0lUX0RJ
Un0vZWZsL2V3ayIKICkKQEAgLTYxLDkgKzYyLDMxIEBAIExJU1QoQVBQRU5EIFdlYkNvcmVfU09V
UkNFUwogICBwbGF0Zm9ybS9ncmFwaGljcy9lZmwvSW50UmVjdEVmbC5jcHAKICAgcGxhdGZvcm0v
cG9zaXgvRmlsZVN5c3RlbVBPU0lYLmNwcAogICBwbGF0Zm9ybS90ZXh0L2VmbC9UZXh0QnJlYWtJ
dGVyYXRvckludGVybmFsSUNVRWZsLmNwcAotICBwbHVnaW5zL1BsdWdpbkRhdGFOb25lLmNwcAog
KQogCisKK0lGIChFTkFCTEVfTkVUU0NBUEVfUExVR0lOX0FQSSkKKyAgICBMSVNUKEFQUEVORCBX
ZWJDb3JlX1NPVVJDRVMKKyAgICBwbHVnaW5zL1BsdWdpbkRhdGFiYXNlLmNwcAorICAgIHBsdWdp
bnMvUGx1Z2luRGVidWcuY3BwCisgICAgcGx1Z2lucy9QbHVnaW5QYWNrYWdlLmNwcAorICAgIHBs
dWdpbnMvUGx1Z2luU3RyZWFtLmNwcAorICAgIHBsdWdpbnMvUGx1Z2luVmlldy5jcHAKKyAgICBw
bHVnaW5zL2VmbC9QbHVnaW5EYXRhRWZsLmNwcAorICAgIHBsdWdpbnMvZWZsL1BsdWdpblBhY2th
Z2VFZmwuY3BwCisgICAgcGx1Z2lucy9lZmwvUGx1Z2luVmlld0VmbC5jcHAKKyAgICBwbHVnaW5z
L2VmbC9YMTFFbWJlZENvbnRhaW5lci5jcHAKKyAgICBwbHVnaW5zL2VmbC9YMTFXaW5kb3cuY3Bw
CisgICAgKQorRUxTRSAoKQorICAgIExJU1QoQVBQRU5EIFdlYkNvcmVfU09VUkNFUworICAgIHBs
dWdpbnMvUGx1Z2luRGF0YU5vbmUuY3BwCisgICAgcGx1Z2lucy9QbHVnaW5QYWNrYWdlTm9uZS5j
cHAKKyAgICBwbHVnaW5zL1BsdWdpblZpZXdOb25lLmNwcAorICAgICkKK0VORElGICgpCisKKwog
SUYgKFdURl9QTEFURk9STV9DQUlSTykKICAgTElTVChBUFBFTkQgV2ViQ29yZV9JTkNMVURFX0RJ
UkVDVE9SSUVTCiAgICAgIiR7V0VCQ09SRV9ESVJ9L3BsYXRmb3JtL2dyYXBoaWNzL2NhaXJvIgpA
QCAtMTI2LDYgKzE0OSw3IEBAIElGIChXVEZfVVNFX1NPVVApCiAgIExJU1QoQVBQRU5EIFdlYkNv
cmVfU09VUkNFUwogICAgIHBsYXRmb3JtL25ldHdvcmsvc291cC9Db29raWVKYXJTb3VwLmNwcAog
ICAgIHBsYXRmb3JtL25ldHdvcmsvc291cC9HT3duUHRyU291cC5jcHAKKyAgICBwbGF0Zm9ybS9u
ZXR3b3JrL3NvdXAvUHJveHlTZXJ2ZXJTb3VwLmNwcAogICAgIHBsYXRmb3JtL25ldHdvcmsvc291
cC9SZXNvdXJjZUhhbmRsZVNvdXAuY3BwCiAgICAgcGxhdGZvcm0vbmV0d29yay9zb3VwL1Jlc291
cmNlUmVxdWVzdFNvdXAuY3BwCiAgICAgcGxhdGZvcm0vbmV0d29yay9zb3VwL1Jlc291cmNlUmVz
cG9uc2VTb3VwLmNwcApAQCAtMTUyLDYgKzE3Niw3IEBAIElGIChXVEZfVVNFX0NVUkwpCiAgICAg
cGxhdGZvcm0vbmV0d29yay9jdXJsL0Nvb2tpZUphckN1cmwuY3BwCiAgICAgcGxhdGZvcm0vbmV0
d29yay9jdXJsL0ROU0N1cmwuY3BwCiAgICAgcGxhdGZvcm0vbmV0d29yay9jdXJsL0Zvcm1EYXRh
U3RyZWFtQ3VybC5jcHAKKyAgICBwbGF0Zm9ybS9uZXR3b3JrL2N1cmwvUHJveHlTZXJ2ZXJDdXJs
LmNwcAogICAgIHBsYXRmb3JtL25ldHdvcmsvY3VybC9SZXNvdXJjZUhhbmRsZUN1cmwuY3BwCiAg
ICAgcGxhdGZvcm0vbmV0d29yay9jdXJsL1Jlc291cmNlSGFuZGxlTWFuYWdlci5jcHAKICAgICBw
bGF0Zm9ybS9uZXR3b3JrL2N1cmwvU29ja2V0U3RyZWFtSGFuZGxlQ3VybC5jcHAKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpp
bmRleCAwY2RiZmI3Li40YTFmMDUzIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VM
b2cKKysrIGIvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsOTMgQEAKKzIwMTEt
MDItMDQgIE1hcml1c3ogR3J6ZWdvcmN6eWsgIDxtYXJpdXN6LmdAc2Ftc3VuZy5jb20+CisKKyAg
ICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgQWRkZWQgbWlzc2lu
ZyBlZmwgcGx1Z2luJ3MgcGFydAorCisgICAgICAgIE5vIG5ldyB0ZXN0cy4gKE9PUFMhKQorCisg
ICAgICAgICogQ01ha2VMaXN0c0VmbC50eHQ6CisgICAgICAgICogcGx1Z2lucy9QbHVnaW5WaWV3
Lmg6CisgICAgICAgICogcGx1Z2lucy9lZmwvUGx1Z2luRGF0YUVmbC5jcHA6IEFkZGVkLgorICAg
ICAgICAoV2ViQ29yZTo6UGx1Z2luRGF0YTo6aW5pdFBsdWdpbnMpOgorICAgICAgICAoV2ViQ29y
ZTo6UGx1Z2luRGF0YTo6cmVmcmVzaCk6CisgICAgICAgICogcGx1Z2lucy9lZmwvUGx1Z2luUGFj
a2FnZUVmbC5jcHA6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6UGx1Z2luUGFja2FnZTo6ZmV0
Y2hJbmZvKToKKyAgICAgICAgKFdlYkNvcmU6OlBsdWdpblBhY2thZ2U6Ok5QVmVyc2lvbik6Cisg
ICAgICAgIChXZWJDb3JlOjpQbHVnaW5QYWNrYWdlOjpsb2FkKToKKyAgICAgICAgKiBwbHVnaW5z
L2VmbC9QbHVnaW5WaWV3RWZsLmNwcDogQWRkZWQuCisgICAgICAgIChXZWJDb3JlOjpQbHVnaW5W
aWV3OjpkaXNwYXRjaE5QRXZlbnQpOgorICAgICAgICAoV2ViQ29yZTo6UGx1Z2luVmlldzo6aGFs
dCk6CisgICAgICAgIChXZWJDb3JlOjpQbHVnaW5WaWV3OjpoYW5kbGVGb2N1c0luRXZlbnQpOgor
ICAgICAgICAoV2ViQ29yZTo6UGx1Z2luVmlldzo6aGFuZGxlRm9jdXNPdXRFdmVudCk6CisgICAg
ICAgIChXZWJDb3JlOjpQbHVnaW5WaWV3OjpyZXN0YXJ0KToKKyAgICAgICAgKFdlYkNvcmU6OlBs
dWdpblZpZXc6OmhhbmRsZUtleWJvYXJkRXZlbnQpOgorICAgICAgICAoV2ViQ29yZTo6UGx1Z2lu
Vmlldzo6aGFuZGxlTW91c2VFdmVudCk6CisgICAgICAgIChXZWJDb3JlOjpQbHVnaW5WaWV3Ojp1
cGRhdGVQbHVnaW5XaWRnZXQpOgorICAgICAgICAoV2ViQ29yZTo6UGx1Z2luVmlldzo6c2V0Rm9j
dXMpOgorICAgICAgICAoV2ViQ29yZTo6UGx1Z2luVmlldzo6c2hvdyk6CisgICAgICAgIChXZWJD
b3JlOjpQbHVnaW5WaWV3OjpoaWRlKToKKyAgICAgICAgKFdlYkNvcmU6OlBsdWdpblZpZXc6OnBh
aW50KToKKyAgICAgICAgKFdlYkNvcmU6OlBsdWdpblZpZXc6OnNldFBhcmVudCk6CisgICAgICAg
IChXZWJDb3JlOjpQbHVnaW5WaWV3OjpzZXROUFdpbmRvd1JlY3QpOgorICAgICAgICAoV2ViQ29y
ZTo6UGx1Z2luVmlldzo6c2V0TlBXaW5kb3dJZk5lZWRlZCk6CisgICAgICAgIChXZWJDb3JlOjpQ
bHVnaW5WaWV3OjpzZXRQYXJlbnRWaXNpYmxlKToKKyAgICAgICAgKFdlYkNvcmU6OlBsdWdpblZp
ZXc6OmhhbmRsZVBvc3RSZWFkRmlsZSk6CisgICAgICAgIChXZWJDb3JlOjpQbHVnaW5WaWV3Ojpw
bGF0Zm9ybUdldFZhbHVlU3RhdGljKToKKyAgICAgICAgKFdlYkNvcmU6OlBsdWdpblZpZXc6OnBs
YXRmb3JtR2V0VmFsdWUpOgorICAgICAgICAoV2ViQ29yZTo6UGx1Z2luVmlldzo6aW52YWxpZGF0
ZVJlY3QpOgorICAgICAgICAoV2ViQ29yZTo6UGx1Z2luVmlldzo6aW52YWxpZGF0ZVJlZ2lvbik6
CisgICAgICAgIChXZWJDb3JlOjpQbHVnaW5WaWV3Ojpmb3JjZVJlZHJhdyk6CisgICAgICAgIChX
ZWJDb3JlOjpQbHVnaW5WaWV3OjpwbGF0Zm9ybVN0YXJ0KToKKyAgICAgICAgKFdlYkNvcmU6OlBs
dWdpblZpZXc6OnBsYXRmb3JtRGVzdHJveSk6CisgICAgICAgICogcGx1Z2lucy9lZmwvWDExRW1i
ZWRDb250YWluZXIuY3BwOiBBZGRlZC4KKyAgICAgICAgKFgxMUVtYmVkQ29udGFpbmVyOjpYMTFF
bWJlZENvbnRhaW5lcik6CisgICAgICAgIChYMTFFbWJlZENvbnRhaW5lcjo6flgxMUVtYmVkQ29u
dGFpbmVyKToKKyAgICAgICAgKFgxMUVtYmVkQ29udGFpbmVyOjptb3ZlSW5wdXRGb2N1c1RvUHJv
eHkpOgorICAgICAgICAoWDExRW1iZWRDb250YWluZXI6OmFjY2VwdCk6CisgICAgICAgIChYMTFF
bWJlZENvbnRhaW5lcjo6cmVqZWN0KToKKyAgICAgICAgKFgxMUVtYmVkQ29udGFpbmVyOjpzaG93
KToKKyAgICAgICAgKFgxMUVtYmVkQ29udGFpbmVyOjpoaWRlKToKKyAgICAgICAgKFgxMUVtYmVk
Q29udGFpbmVyOjpyZXNpemUpOgorICAgICAgICAoWDExRW1iZWRDb250YWluZXI6OnNldEZyYW1l
UmVjdCk6CisgICAgICAgIChYMTFFbWJlZENvbnRhaW5lcjo6c2V0Rm9jdXMpOgorICAgICAgICAo
WDExRW1iZWRDb250YWluZXI6Omhhc0ZvY3VzKToKKyAgICAgICAgKFgxMUVtYmVkQ29udGFpbmVy
Ojppc0FjdGl2ZSk6CisgICAgICAgIChYMTFFbWJlZENvbnRhaW5lcjo6cm9vdFdpbmRvdyk6Cisg
ICAgICAgIChYMTFFbWJlZENvbnRhaW5lcjo6eDExRXZlbnQpOgorICAgICAgICAoc2VuZFhFbWJl
ZE1lc3NhZ2UpOgorICAgICAgICAqIHBsdWdpbnMvZWZsL1gxMUVtYmVkQ29udGFpbmVyLmg6IEFk
ZGVkLgorICAgICAgICAoWDExRW1iZWRDb250YWluZXI6OmNsaWVudCk6CisgICAgICAgIChYMTFF
bWJlZENvbnRhaW5lcjo6c2V0Q2xpZW50KToKKyAgICAgICAgKiBwbHVnaW5zL2VmbC9YMTFXaW5k
b3cuY3BwOiBBZGRlZC4KKyAgICAgICAgKFgxMVdpbmRvdzo6aW5pdCk6CisgICAgICAgIChYMTFX
aW5kb3c6OmFkb3B0KToKKyAgICAgICAgKFgxMVdpbmRvdzo6WDExV2luZG93KToKKyAgICAgICAg
KFgxMVdpbmRvdzo6flgxMVdpbmRvdyk6CisgICAgICAgIChYMTFXaW5kb3c6OnNob3cpOgorICAg
ICAgICAoWDExV2luZG93OjpoaWRlKToKKyAgICAgICAgKFgxMVdpbmRvdzo6c2V0VmlzaWJsZSk6
CisgICAgICAgIChYMTFXaW5kb3c6Om1vdmUpOgorICAgICAgICAoWDExV2luZG93OjpyZXNpemUp
OgorICAgICAgICAoWDExV2luZG93OjpzZXRGcmFtZVJlY3QpOgorICAgICAgICAoWDExV2luZG93
Ojp1cGRhdGUpOgorICAgICAgICAoWDExV2luZG93OjpzZXRGb2N1cyk6CisgICAgICAgIChYMTFX
aW5kb3c6Omluc3RhbGxFdmVudEZpbHRlcik6CisgICAgICAgIChYMTFXaW5kb3c6OnByb2Nlc3NF
dmVudCk6CisgICAgICAgIChYMTFXaW5kb3c6OngxMUV2ZW50KToKKyAgICAgICAgKG9uRWNvcmVY
RXZlbnQpOgorICAgICAgICAqIHBsdWdpbnMvZWZsL1gxMVdpbmRvdy5oOiBBZGRlZC4KKyAgICAg
ICAgKFgxMUluZm86OmRpc3BsYXkpOgorICAgICAgICAoWDExSW5mbzo6dmlzdWFsKToKKyAgICAg
ICAgKFgxMUluZm86OmRlcHRoKToKKyAgICAgICAgKFgxMUluZm86OmNvbG9ybWFwKToKKyAgICAg
ICAgKFgxMUluZm86OngxMVRpbWUpOgorICAgICAgICAoWDExSW5mbzo6WDExSW5mbyk6CisgICAg
ICAgIChYMTFXaW5kb3c6OngxMUluZm8pOgorICAgICAgICAoWDExV2luZG93OjpzaXplKToKKyAg
ICAgICAgKFgxMVdpbmRvdzo6Z2VvbWV0cnkpOgorICAgICAgICAoWDExV2luZG93Ojp3aW5JZCk6
CisKIDIwMTEtMDEtMzEgIEFudHRpIEtvaXZpc3RvICA8YW50dGlAYXBwbGUuY29tPgogCiAgICAg
ICAgIE5vdCByZXZpZXdlZC4KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsdWdpbnMvUGx1
Z2luVmlldy5oIGIvU291cmNlL1dlYkNvcmUvcGx1Z2lucy9QbHVnaW5WaWV3LmgKaW5kZXggOGY4
ZjEzZi4uYzgyMGYyOCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGx1Z2lucy9QbHVnaW5W
aWV3LmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGx1Z2lucy9QbHVnaW5WaWV3LmgKQEAgLTUxLDYg
KzUxLDkgQEAKICNpZiBPUyhXSU5ET1dTKSAmJiAoUExBVEZPUk0oUVQpIHx8IFBMQVRGT1JNKFdY
KSkKIHR5cGVkZWYgc3RydWN0IEhXTkRfXyogSFdORDsKIHR5cGVkZWYgSFdORCBQbGF0Zm9ybVBs
dWdpbldpZGdldDsKKyNlbGlmIFBMQVRGT1JNKEVGTCkKK2NsYXNzIFgxMUVtYmVkQ29udGFpbmVy
OwordHlwZWRlZiBYMTFFbWJlZENvbnRhaW5lciogUGxhdGZvcm1QbHVnaW5XaWRnZXQ7CiAjZWxz
ZQogdHlwZWRlZiBQbGF0Zm9ybVdpZGdldCBQbGF0Zm9ybVBsdWdpbldpZGdldDsKICNpZiBkZWZp
bmVkKFhQX01BQ09TWCkgJiYgUExBVEZPUk0oUVQpCkBAIC0zNzIsNyArMzc1LDcgQEAgbmFtZXNw
YWNlIFdlYkNvcmUgewogICAgICAgICBib29sIG1faGF2ZVVwZGF0ZWRQbHVnaW5XaWRnZXQ7CiAj
ZW5kaWYKIAotI2lmICgoUExBVEZPUk0oUVQpIHx8IFBMQVRGT1JNKFdYKSkgJiYgT1MoV0lORE9X
UykpIHx8IGRlZmluZWQoWFBfTUFDT1NYKQorI2lmICgoUExBVEZPUk0oUVQpIHx8IFBMQVRGT1JN
KFdYKSkgJiYgT1MoV0lORE9XUykpIHx8IGRlZmluZWQoWFBfTUFDT1NYKSB8fCBQTEFURk9STShF
RkwpCiAgICAgICAgIC8vIE9uIE1hYyBPU1ggYW5kIFF0L1dpbmRvd3MgdGhlIHBsdWdpbiBkb2Vz
IG5vdCBoYXZlIGl0cyBvd24gbmF0aXZlIHdpZGdldCwKICAgICAgICAgLy8gYnV0IGlzIHVzaW5n
IHRoZSBjb250YWluaW5nIHdpbmRvdyBhcyBpdHMgcmVmZXJlbmNlIGZvciBwb3NpdGlvbmluZy9w
YWludGluZy4KICAgICAgICAgUGxhdGZvcm1QbHVnaW5XaWRnZXQgbV93aW5kb3c7CmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9wbHVnaW5zL2VmbC9QbHVnaW5EYXRhRWZsLmNwcCBiL1NvdXJj
ZS9XZWJDb3JlL3BsdWdpbnMvZWZsL1BsdWdpbkRhdGFFZmwuY3BwCm5ldyBmaWxlIG1vZGUgMTAw
NjQ0CmluZGV4IDAwMDAwMDAuLjA0YmI5MDIKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9wbHVnaW5zL2VmbC9QbHVnaW5EYXRhRWZsLmNwcApAQCAtMCwwICsxLDY4IEBACisvKgor
ICAgIENvcHlyaWdodCAoQykgMjAwNiwgMjAwNyBBcHBsZSBJbmMuICBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgorICAgIENvcHlyaWdodCAoQykgMjAwOCBUcm9sbHRlY2ggQVNBCisgICAgQ29weXJpZ2h0
IChDKSAyMDA4IENvbGxhYm9yYSBMdGQuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgICAgQ29weXJp
Z2h0IChDKSAyMDA4IElOZFQgLSBJbnN0aXR1dG8gTm9raWEgZGUgVGVjbm9sb2dpYQorICAgIENv
cHlyaWdodCAoQykgMjAwOS0yMDEwIFByb0ZVU0lPTiBlbWJlZGRlZCBzeXN0ZW1zCisgICAgQ29w
eXJpZ2h0IChDKSAyMDA5LTIwMTAgU2Ftc3VuZyBFbGVjdHJvbmljcworCisgICAgVGhpcyBsaWJy
YXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICAg
IG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVi
bGljCisgICAgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRh
dGlvbjsgZWl0aGVyCisgICAgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBv
cHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorCisgICAgVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1
dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgICAgYnV0IFdJVEhPVVQg
QU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAgICBN
RVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUg
dGhlIEdOVQorICAgIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRh
aWxzLgorCisgICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExp
YnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICAgIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5
OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCisgICAgdGhlIEZy
ZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBG
bG9vciwKKyAgICBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKyovCisKKyNpbmNsdWRlICJj
b25maWcuaCIKKyNpbmNsdWRlICJQbHVnaW5EYXRhLmgiCisKKyNpbmNsdWRlICJQbHVnaW5EYXRh
YmFzZS5oIgorI2luY2x1ZGUgIlBsdWdpblBhY2thZ2UuaCIKKworbmFtZXNwYWNlIFdlYkNvcmUg
eworCit2b2lkIFBsdWdpbkRhdGE6OmluaXRQbHVnaW5zKGNvbnN0IFBhZ2UqKQoreworICAgIFBs
dWdpbkRhdGFiYXNlKiBkYiA9IFBsdWdpbkRhdGFiYXNlOjppbnN0YWxsZWRQbHVnaW5zKCk7Cisg
ICAgY29uc3QgVmVjdG9yPFBsdWdpblBhY2thZ2UqPiAmcGx1Z2lucyA9IGRiLT5wbHVnaW5zKCk7
CisKKyAgICBmb3IgKHVuc2lnbmVkIGludCBpID0gMDsgaSA8IHBsdWdpbnMuc2l6ZSgpOyArK2kp
IHsKKyAgICAgICAgUGx1Z2luSW5mbyBpbmZvOworICAgICAgICBQbHVnaW5QYWNrYWdlKiBwYWNr
YWdlID0gcGx1Z2luc1tpXTsKKworICAgICAgICBpbmZvLm5hbWUgPSBwYWNrYWdlLT5uYW1lKCk7
CisgICAgICAgIGluZm8uZmlsZSA9IHBhY2thZ2UtPmZpbGVOYW1lKCk7CisgICAgICAgIGluZm8u
ZGVzYyA9IHBhY2thZ2UtPmRlc2NyaXB0aW9uKCk7CisKKyAgICAgICAgY29uc3QgTUlNRVRvRGVz
Y3JpcHRpb25zTWFwJiBtaW1lVG9EZXNjcmlwdGlvbnMgPSBwYWNrYWdlLT5taW1lVG9EZXNjcmlw
dGlvbnMoKTsKKyAgICAgICAgTUlNRVRvRGVzY3JpcHRpb25zTWFwOjpjb25zdF9pdGVyYXRvciBl
bmQgPSBtaW1lVG9EZXNjcmlwdGlvbnMuZW5kKCk7CisgICAgICAgIGZvciAoTUlNRVRvRGVzY3Jp
cHRpb25zTWFwOjpjb25zdF9pdGVyYXRvciBpdCA9IG1pbWVUb0Rlc2NyaXB0aW9ucy5iZWdpbigp
OyBpdCAhPSBlbmQ7ICsraXQpIHsKKyAgICAgICAgICAgIE1pbWVDbGFzc0luZm8gbWltZTsKKyAg
ICAgICAgICAgIAorICAgICAgICAgICAgbWltZS50eXBlID0gaXQtPmZpcnN0OworICAgICAgICAg
ICAgbWltZS5kZXNjID0gaXQtPnNlY29uZDsKKworICAgICAgICAgICAgVmVjdG9yPFN0cmluZz4g
ZXh0ZW5zaW9ucyA9IHBhY2thZ2UtPm1pbWVUb0V4dGVuc2lvbnMoKS5nZXQobWltZS50eXBlKTsK
KyAgICAgICAgICAgIGluZm8ubWltZXMuYXBwZW5kKG1pbWUpOworICAgICAgICB9CisKKyAgICAg
ICAgbV9wbHVnaW5zLmFwcGVuZChpbmZvKTsKKyAgICB9Cit9CisKK3ZvaWQgUGx1Z2luRGF0YTo6
cmVmcmVzaCgpCit7CisgICAgUGx1Z2luRGF0YWJhc2UqIGRiID0gUGx1Z2luRGF0YWJhc2U6Omlu
c3RhbGxlZFBsdWdpbnMoKTsKKyAgICBkYi0+cmVmcmVzaCgpOworfQorCit9OwpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvcGx1Z2lucy9lZmwvUGx1Z2luUGFja2FnZUVmbC5jcHAgYi9Tb3Vy
Y2UvV2ViQ29yZS9wbHVnaW5zL2VmbC9QbHVnaW5QYWNrYWdlRWZsLmNwcApuZXcgZmlsZSBtb2Rl
IDEwMDY0NAppbmRleCAwMDAwMDAwLi5hMjQ2NzdjCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNl
L1dlYkNvcmUvcGx1Z2lucy9lZmwvUGx1Z2luUGFja2FnZUVmbC5jcHAKQEAgLTAsMCArMSwxNjgg
QEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDYsIDIwMDcgQXBwbGUgSW5jLiAgQWxsIHJpZ2h0
cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAwOCBDb2xsYWJvcmEgTHRkLiBBbGwgcmln
aHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDA4IE51YW50aSBMdGQuCisgKiBDb3B5
cmlnaHQgKEMpIDIwMDggSU5kVCAtIEluc3RpdHV0byBOb2tpYSBkZSBUZWNub2xvZ2lhCisgKiBD
b3B5cmlnaHQgKEMpIDIwMDktMjAxMCBQcm9GVVNJT04gZW1iZWRkZWQgc3lzdGVtcworICogQ29w
eXJpZ2h0IChDKSAyMDA5LTIwMTAgU2Ftc3VuZyBFbGVjdHJvbmljcworICoKKyAqIFJlZGlzdHJp
YnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91
dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxv
d2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNv
dXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAq
IDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJv
dmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9v
ciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAq
IFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQ09NUFVURVIsIElOQy4gYGBBUyBJ
UycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hB
TlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJ
U0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBDT01QVVRFUiwgSU5DLiBPUgorICog
Q09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5U
QUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRF
IEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9S
IEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkK
KyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwg
T1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJ
TiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFE
VklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRl
ICJjb25maWcuaCIKKyNpbmNsdWRlICJQbHVnaW5QYWNrYWdlLmgiCisKKyNpbmNsdWRlICJNSU1F
VHlwZVJlZ2lzdHJ5LmgiCisjaW5jbHVkZSAiTm90SW1wbGVtZW50ZWQuaCIKKyNpbmNsdWRlICJQ
bHVnaW5EYXRhYmFzZS5oIgorI2luY2x1ZGUgIlBsdWdpbkRlYnVnLmgiCisjaW5jbHVkZSAibnBy
dW50aW1lX2ltcGwuaCIKKworI2luY2x1ZGUgPEVpbmEuaD4KKyNpbmNsdWRlIDxkbGZjbi5oPgor
I2luY2x1ZGUgPHd0Zi90ZXh0L0NTdHJpbmcuaD4KKworbmFtZXNwYWNlIFdlYkNvcmUgeworCit0
eXBlZGVmIGNoYXIqICgqTlBQX0dldE1JTUVEZXNjcmlwdGlvblByb2NQdHIpKCk7CisKK2Jvb2wg
UGx1Z2luUGFja2FnZTo6ZmV0Y2hJbmZvKCkKK3sKKyAgICBjb25zdCBjaGFyICplcnJtc2c7CisK
KyAgICBpZiAoIWxvYWQoKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgTlBQX0dldFZh
bHVlUHJvY1B0ciBnZXRWYWx1ZSA9IDA7CisgICAgTlBQX0dldE1JTUVEZXNjcmlwdGlvblByb2NQ
dHIgZ2V0TUlNRURlc2NyaXB0aW9uID0gMDsKKworICAgIGdldFZhbHVlID0gKE5QUF9HZXRWYWx1
ZVByb2NQdHIpZGxzeW0obV9tb2R1bGUsICJOUF9HZXRWYWx1ZSIpOworICAgIGlmICgoZXJybXNn
ID0gZGxlcnJvcigpKSkgeworICAgICAgICBFSU5BX0xPR19FUlIoIkNvdWxkIG5vdCBnZXQgc3lt
Ym9sIE5QX0dldFZhbHVlOiAlcyIsIGVycm1zZyk7CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAg
ICB9CisKKyAgICBnZXRNSU1FRGVzY3JpcHRpb24gPSAoTlBQX0dldE1JTUVEZXNjcmlwdGlvblBy
b2NQdHIpZGxzeW0obV9tb2R1bGUsICJOUF9HZXRNSU1FRGVzY3JpcHRpb24iKTsKKyAgICBpZiAo
KGVycm1zZyA9IGRsZXJyb3IoKSkpIHsKKyAgICAgICAgRUlOQV9MT0dfRVJSKCJDb3VsZCBub3Qg
Z2V0IHN5bWJvbCBOUF9HZXRNSU1FRGVzY3JpcHRpb246ICVzIiwgZXJybXNnKTsKKyAgICAgICAg
cmV0dXJuIGZhbHNlOworICAgIH0KKworICAgIGNoYXIqIGJ1ZmZlciA9IDA7CisgICAgTlBFcnJv
ciBlcnIgPSBnZXRWYWx1ZSgwLCBOUFBWcGx1Z2luTmFtZVN0cmluZywgKHZvaWQqKSAmYnVmZmVy
KTsKKyAgICBpZiAoZXJyICE9IE5QRVJSX05PX0VSUk9SKQorICAgICAgICByZXR1cm4gZmFsc2U7
CisgICAgbV9uYW1lID0gYnVmZmVyOworCisgICAgYnVmZmVyID0gMDsKKyAgICBlcnIgPSBnZXRW
YWx1ZSgwLCBOUFBWcGx1Z2luRGVzY3JpcHRpb25TdHJpbmcsICh2b2lkKikgJmJ1ZmZlcik7Cisg
ICAgaWYgKGVyciAhPSBOUEVSUl9OT19FUlJPUikKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAg
IG1fZGVzY3JpcHRpb24gPSBidWZmZXI7CisgICAgZGV0ZXJtaW5lTW9kdWxlVmVyc2lvbkZyb21E
ZXNjcmlwdGlvbigpOworCisgICAgU3RyaW5nIGRlc2NyaXB0aW9uID0gZ2V0TUlNRURlc2NyaXB0
aW9uKCk7CisKKyAgICBWZWN0b3I8U3RyaW5nPiB0eXBlczsKKyAgICBkZXNjcmlwdGlvbi5zcGxp
dChVQ2hhcignOycpLCBmYWxzZSwgdHlwZXMpOworCisgICAgZm9yIChzaXplX3QgaSA9IDA7IGkg
PCB0eXBlcy5zaXplKCk7ICsraSkgeworICAgICAgICBWZWN0b3I8U3RyaW5nPiBtaW1lOworICAg
ICAgICB0eXBlc1tpXS5zcGxpdChVQ2hhcignOicpLCB0cnVlLCBtaW1lKTsKKworICAgICAgICBp
ZiAobWltZS5zaXplKCkgPiAwKSB7CisgICAgICAgICAgICBWZWN0b3I8U3RyaW5nPiBleHRzOwor
CisgICAgICAgICAgICBpZiAobWltZS5zaXplKCkgPiAxKQorICAgICAgICAgICAgICAgIG1pbWVb
MV0uc3BsaXQoVUNoYXIoJywnKSwgZmFsc2UsIGV4dHMpOworCisgICAgICAgICAgICBkZXRlcm1p
bmVRdWlya3MobWltZVswXSk7CisgICAgICAgICAgICBtX21pbWVUb0V4dGVuc2lvbnMuYWRkKG1p
bWVbMF0sIGV4dHMpOworCisgICAgICAgICAgICBpZiAobWltZS5zaXplKCkgPiAyKQorICAgICAg
ICAgICAgICAgIG1fbWltZVRvRGVzY3JpcHRpb25zLmFkZChtaW1lWzBdLCBtaW1lWzJdKTsKKyAg
ICAgICAgfQorICAgIH0KKworICAgIHJldHVybiB0cnVlOworfQorCit1aW50MTZfdCBQbHVnaW5Q
YWNrYWdlOjpOUFZlcnNpb24oKSBjb25zdAoreworICAgIHJldHVybiBOUFZFUlNfSEFTX1BMVUdJ
Tl9USFJFQURfQVNZTkNfQ0FMTDsKK30KKworYm9vbCBQbHVnaW5QYWNrYWdlOjpsb2FkKCkKK3sK
KyAgICBjaGFyKiBlcnJtc2c7CisKKyAgICBpZiAobV9pc0xvYWRlZCkgeworICAgICAgICBtX2xv
YWRDb3VudCsrOworICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CisKKyAgICBtX21vZHVsZSA9
IGRsb3BlbihtX3BhdGgudXRmOCgpLmRhdGEoKSwgUlRMRF9MQVpZIHwgUlRMRF9MT0NBTCk7Cisg
ICAgaWYgKChlcnJtc2cgPSBkbGVycm9yKCkpKSB7CisgICAgICAgIEVJTkFfTE9HX1dBUk4oIiVz
IG5vdCBsb2FkZWQ6ICVzIiwgbV9wYXRoLnV0ZjgoKS5kYXRhKCksIGVycm1zZyk7CisgICAgICAg
IHJldHVybiBmYWxzZTsKKyAgICB9CisKKyAgICBtX2lzTG9hZGVkID0gdHJ1ZTsKKworICAgIE5Q
X0luaXRpYWxpemVGdW5jUHRyIGluaXRpYWxpemU7CisgICAgTlBFcnJvciBlcnI7CisKKyAgICBp
bml0aWFsaXplID0gKE5QX0luaXRpYWxpemVGdW5jUHRyKWRsc3ltKG1fbW9kdWxlLCAiTlBfSW5p
dGlhbGl6ZSIpOworICAgIGlmICgoZXJybXNnID0gZGxlcnJvcigpKSkgeworICAgICAgICBFSU5B
X0xPR19FUlIoIkNvdWxkIG5vdCBnZXQgc3ltYm9sIE5QX0luaXRpYWxpemU6ICVzIiwgZXJybXNn
KTsKKyAgICAgICAgZ290byBhYm9ydDsKKyAgICB9CisKKyAgICBtX05QUF9TaHV0ZG93biA9IChO
UFBfU2h1dGRvd25Qcm9jUHRyKWRsc3ltKG1fbW9kdWxlLCAiTlBfU2h1dGRvd24iKTsKKyAgICBp
ZiAoKGVycm1zZyA9IGRsZXJyb3IoKSkpIHsKKyAgICAgICAgRUlOQV9MT0dfRVJSKCJDb3VsZCBu
b3QgZ2V0IHN5bWJvbCBOUF9TaHV0ZG93bjogJXMiLCBlcnJtc2cpOworICAgICAgICBnb3RvIGFi
b3J0OworICAgIH0KKworICAgIG1lbXNldCgmbV9wbHVnaW5GdW5jcywgMCwgc2l6ZW9mKG1fcGx1
Z2luRnVuY3MpKTsKKyAgICBtX3BsdWdpbkZ1bmNzLnNpemUgPSBzaXplb2YobV9wbHVnaW5GdW5j
cyk7CisKKyAgICBpbml0aWFsaXplQnJvd3NlckZ1bmNzKCk7CisKKyNpZiBkZWZpbmVkKFhQX1VO
SVgpCisgICAgZXJyID0gaW5pdGlhbGl6ZSgmbV9icm93c2VyRnVuY3MsICZtX3BsdWdpbkZ1bmNz
KTsKKyNlbHNlCisgICAgZXJyID0gaW5pdGlhbGl6ZSgmbV9icm93c2VyRnVuY3MpOworI2VuZGlm
CisgICAgaWYgKGVyciAhPSBOUEVSUl9OT19FUlJPUikKKyAgICAgICAgZ290byBhYm9ydDsKKwor
ICAgIG1fbG9hZENvdW50Kys7CisgICAgcmV0dXJuIHRydWU7CisKK2Fib3J0OgorICAgIEVJTkFf
TE9HX0RCRygiZmFpbGVkIHRvIGxvYWQgcGx1Z2luLCB1bmxvYWQgaXQgd2l0aG91dCBzaHV0dGlu
ZyBpdCBkb3duLiIpOworICAgIHVubG9hZFdpdGhvdXRTaHV0ZG93bigpOworICAgIHJldHVybiBm
YWxzZTsKK30KKworfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGx1Z2lucy9lZmwvUGx1
Z2luVmlld0VmbC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbHVnaW5zL2VmbC9QbHVnaW5WaWV3RWZs
LmNwcApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi5kZDc3NWE2Ci0tLSAvZGV2
L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvcGx1Z2lucy9lZmwvUGx1Z2luVmlld0VmbC5jcHAK
QEAgLTAsMCArMSw1MzYgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDYsIDIwMDcgQXBwbGUg
SW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAwOCBDb2xsYWJv
cmEgTHRkLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDA4IElOZFQg
LSBJbnN0aXR1dG8gTm9raWEgZGUgVGVjbm9sb2dpYQorICogQ29weXJpZ2h0IChDKSAyMDA5LTIw
MTAgUHJvRlVTSU9OIGVtYmVkZGVkIHN5c3RlbXMKKyAqIENvcHlyaWdodCAoQykgMjAwOS0yMDEw
IFNhbXN1bmcgRWxlY3Ryb25pY3MKKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNv
dXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwg
YXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICog
YXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFp
biB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMg
aW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHBy
b3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBS
T1ZJREVEIEJZIEFQUExFIENPTVBVVEVSLCBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBS
RVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
IFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVT
UyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZF
TlQgU0hBTEwgQVBQTEUgQ09NUFVURVIsIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFC
TEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhF
TVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsg
TE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJ
T04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdI
RVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJ
TkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhF
IFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJ
TElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVk
ZSAiUGx1Z2luVmlldy5oIgorCisjaW5jbHVkZSAiRG9jdW1lbnQuaCIKKyNpbmNsdWRlICJEb2N1
bWVudExvYWRlci5oIgorI2luY2x1ZGUgIkVsZW1lbnQuaCIKKyNpbmNsdWRlICJGcmFtZS5oIgor
I2luY2x1ZGUgIkZyYW1lTG9hZFJlcXVlc3QuaCIKKyNpbmNsdWRlICJGcmFtZUxvYWRlci5oIgor
I2luY2x1ZGUgIkZyYW1lVHJlZS5oIgorI2luY2x1ZGUgIkZyYW1lVmlldy5oIgorI2luY2x1ZGUg
IkdyYXBoaWNzQ29udGV4dC5oIgorI2luY2x1ZGUgIkhUTUxOYW1lcy5oIgorI2luY2x1ZGUgIkhU
TUxQbHVnSW5FbGVtZW50LmgiCisjaW5jbHVkZSAiSG9zdFdpbmRvdy5oIgorI2luY2x1ZGUgIklt
YWdlLmgiCisjaW5jbHVkZSAiSW50UmVjdC5oIgorI2luY2x1ZGUgIkpTRE9NQmluZGluZy5oIgor
I2luY2x1ZGUgIktleWJvYXJkRXZlbnQuaCIKKyNpbmNsdWRlICJNb3VzZUV2ZW50LmgiCisjaW5j
bHVkZSAiTm90SW1wbGVtZW50ZWQuaCIKKyNpbmNsdWRlICJQYWdlLmgiCisjaW5jbHVkZSAiUGxh
dGZvcm1Nb3VzZUV2ZW50LmgiCisjaW5jbHVkZSAiUGxhdGZvcm1XaGVlbEV2ZW50LmgiCisjaW5j
bHVkZSAiUGx1Z2luRGVidWcuaCIKKyNpbmNsdWRlICJQbHVnaW5QYWNrYWdlLmgiCisjaW5jbHVk
ZSAiUmVuZGVyTGF5ZXIuaCIKKyNpbmNsdWRlICJTY3JpcHRDb250cm9sbGVyLmgiCisjaW5jbHVk
ZSAiU2V0dGluZ3MuaCIKKyNpbmNsdWRlICJYMTFFbWJlZENvbnRhaW5lci5oIgorI2luY2x1ZGUg
IlgxMVdpbmRvdy5oIgorI2luY2x1ZGUgIm5wcnVudGltZV9pbXBsLmgiCisjaW5jbHVkZSAicnVu
dGltZS9KU0xvY2suaCIKKyNpbmNsdWRlICJydW50aW1lL0pTVmFsdWUuaCIKKyNpbmNsdWRlICJy
dW50aW1lX3Jvb3QuaCIKKworI2luY2x1ZGUgPEVjb3JlX0V2YXMuaD4KKyNpbmNsdWRlIDxFY29y
ZV9YLmg+CisjaW5jbHVkZSA8RXZhcy5oPgorCisjaW5jbHVkZSA8d3RmL1JlZkNvdW50ZWQuaD4K
KyNpbmNsdWRlIDx3dGYvUmVmUHRyLmg+CisKK3VzaW5nIEpTQzo6RXhlY1N0YXRlOwordXNpbmcg
SlNDOjpJbnRlcnByZXRlcjsKK3VzaW5nIEpTQzo6SlNMb2NrOwordXNpbmcgSlNDOjpKU09iamVj
dDsKK3VzaW5nIEpTQzo6VVN0cmluZzsKKwordXNpbmcgbmFtZXNwYWNlIHN0ZDsKK3VzaW5nIG5h
bWVzcGFjZSBXVEY7Cit1c2luZyBuYW1lc3BhY2UgV2ViQ29yZTsKKworbmFtZXNwYWNlIFdlYkNv
cmUgeworCit1c2luZyBuYW1lc3BhY2UgSFRNTE5hbWVzOworCisjaWYgRU5BQkxFKE5FVFNDQVBF
X1BMVUdJTl9BUEkpCitib29sIFBsdWdpblZpZXc6OmRpc3BhdGNoTlBFdmVudChOUEV2ZW50JiBl
dmVudCkKK3sKKyAgICBpZiAoIW1fcGx1Z2luLT5wbHVnaW5GdW5jcygpLT5ldmVudCkKKyAgICAg
ICAgcmV0dXJuIGZhbHNlOworCisgICAgUGx1Z2luVmlldzo6c2V0Q3VycmVudFBsdWdpblZpZXco
dGhpcyk7CisgICAgSlNDOjpKU0xvY2s6OkRyb3BBbGxMb2NrcyBkcm9wQWxsTG9ja3MoZmFsc2Up
OworICAgIHNldENhbGxpbmdQbHVnaW4odHJ1ZSk7CisKKyAgICBib29sIGFjY2VwdGVkID0gbV9w
bHVnaW4tPnBsdWdpbkZ1bmNzKCktPmV2ZW50KG1faW5zdGFuY2UsICZldmVudCk7CisKKyAgICBz
ZXRDYWxsaW5nUGx1Z2luKGZhbHNlKTsKKyAgICBQbHVnaW5WaWV3OjpzZXRDdXJyZW50UGx1Z2lu
VmlldygwKTsKKyAgICByZXR1cm4gYWNjZXB0ZWQ7Cit9CisjZW5kaWYKKwordm9pZCBQbHVnaW5W
aWV3OjpoYWx0KCkKK3sKKyAgICBub3RJbXBsZW1lbnRlZCgpOworfQorCisjaWYgZGVmaW5lZChY
UF9VTklYKSAmJiBFTkFCTEUoTkVUU0NBUEVfUExVR0lOX0FQSSkKK3ZvaWQgUGx1Z2luVmlldzo6
aGFuZGxlRm9jdXNJbkV2ZW50KCkKK3sKKyAgICBub3RJbXBsZW1lbnRlZCgpOworfQorCit2b2lk
IFBsdWdpblZpZXc6OmhhbmRsZUZvY3VzT3V0RXZlbnQoKQoreworICAgIG5vdEltcGxlbWVudGVk
KCk7Cit9CisjZW5kaWYKKwordm9pZCBQbHVnaW5WaWV3OjpyZXN0YXJ0KCkKK3sKKyAgICBub3RJ
bXBsZW1lbnRlZCgpOworfQorCit2b2lkIFBsdWdpblZpZXc6OmhhbmRsZUtleWJvYXJkRXZlbnQo
S2V5Ym9hcmRFdmVudCopCit7CisgICAgbm90SW1wbGVtZW50ZWQoKTsKK30KKwordm9pZCBQbHVn
aW5WaWV3OjpoYW5kbGVNb3VzZUV2ZW50KE1vdXNlRXZlbnQqIGV2ZW50KQoreworI2lmIEVOQUJM
RShORVRTQ0FQRV9QTFVHSU5fQVBJKQorICAgIE5QRXZlbnQgeEV2ZW50OworCisgICAgSW50UmVj
dCBwID0gc3RhdGljX2Nhc3Q8RnJhbWVWaWV3Kj4ocGFyZW50KCkpLT5jb250ZW50c1RvU2NyZWVu
KEludFJlY3QoMCwgMCwgZXZlbnQtPm9mZnNldFgoKSwgZXZlbnQtPm9mZnNldFkoKSkpOworICAg
IGlmIChldmVudC0+dHlwZSgpID09IGV2ZW50TmFtZXMoKS5tb3VzZW1vdmVFdmVudAorICAgICAg
ICAgICAgfHwgZXZlbnQtPnR5cGUoKSA9PSBldmVudE5hbWVzKCkubW91c2VvdXRFdmVudAorICAg
ICAgICAgICAgfHwgZXZlbnQtPnR5cGUoKSA9PSBldmVudE5hbWVzKCkubW91c2VvdmVyRXZlbnQp
IHsKKyAgICAgICAgeEV2ZW50LnR5cGUgPSBNb3Rpb25Ob3RpZnk7CisgICAgICAgIHhFdmVudC54
bW90aW9uLnggPSBwLndpZHRoKCk7CisgICAgICAgIHhFdmVudC54bW90aW9uLnkgPSBwLmhlaWdo
dCgpOworICAgIH0gZWxzZSBpZiAoZXZlbnQtPnR5cGUoKSA9PSBldmVudE5hbWVzKCkubW91c2Vk
b3duRXZlbnQpIHsKKyAgICAgICAgeEV2ZW50LnR5cGUgPSBCdXR0b25QcmVzczsKKyAgICAgICAg
eEV2ZW50LnhidXR0b24ueCA9IHAud2lkdGgoKTsKKyAgICAgICAgeEV2ZW50LnhidXR0b24ueSA9
IHAuaGVpZ2h0KCk7CisgICAgICAgIHhFdmVudC54YnV0dG9uLmJ1dHRvbiA9IGV2ZW50LT5idXR0
b24oKSArIDE7IC8vIERPTSBNb3VzZUV2ZW50IGNvdW50cyBmcm9tIDAsIGFuZCBYQnV0dG9uRXZl
bnQgZnJvbSAxCisgICAgfSBlbHNlIGlmIChldmVudC0+dHlwZSgpID09IGV2ZW50TmFtZXMoKS5t
b3VzZXVwRXZlbnQpIHsKKyAgICAgICAgeEV2ZW50LnR5cGUgPSBCdXR0b25SZWxlYXNlOworICAg
ICAgICB4RXZlbnQueGJ1dHRvbi54ID0gcC53aWR0aCgpOworICAgICAgICB4RXZlbnQueGJ1dHRv
bi55ID0gcC5oZWlnaHQoKTsKKyAgICAgICAgeEV2ZW50LnhidXR0b24uYnV0dG9uID0gZXZlbnQt
PmJ1dHRvbigpICsgMTsKKyAgICB9IGVsc2UKKyAgICAgICAgcmV0dXJuOworCisgICAgaWYgKGRp
c3BhdGNoTlBFdmVudCh4RXZlbnQpKQorICAgICAgICBldmVudC0+c2V0RGVmYXVsdEhhbmRsZWQo
KTsKKyNlbHNlCisgICAgbm90SW1wbGVtZW50ZWQoKTsKKyAgICByZXR1cm47CisjZW5kaWYKK30K
Kwordm9pZCBQbHVnaW5WaWV3Ojp1cGRhdGVQbHVnaW5XaWRnZXQoKQoreworICAgIGlmICghcGFy
ZW50KCkgfHwgIW1faXNXaW5kb3dlZCkKKyAgICAgICAgcmV0dXJuOworCisgICAgQVNTRVJUKHBh
cmVudCgpLT5pc0ZyYW1lVmlldygpKTsKKyAgICBGcmFtZVZpZXcqIGZyYW1lVmlldyA9IHN0YXRp
Y19jYXN0PEZyYW1lVmlldyo+KHBhcmVudCgpKTsKKworICAgIEludFJlY3Qgb2xkV2luZG93UmVj
dCA9IG1fd2luZG93UmVjdDsKKyAgICBJbnRSZWN0IG9sZENsaXBSZWN0ID0gbV9jbGlwUmVjdDsK
KworICAgIG1fd2luZG93UmVjdCA9IEludFJlY3QoZnJhbWVWaWV3LT5jb250ZW50c1RvU2NyZWVu
KEludFJlY3QoZnJhbWVSZWN0KCkubG9jYXRpb24oKSwgZnJhbWVSZWN0KCkuc2l6ZSgpKSkpOwor
CisgICAgbV9jbGlwUmVjdCA9IHdpbmRvd0NsaXBSZWN0KCk7CisgICAgbV9jbGlwUmVjdC5tb3Zl
KC1tX3dpbmRvd1JlY3QueCgpLCAtbV93aW5kb3dSZWN0LnkoKSk7CisKKyAgICBpZiAocGxhdGZv
cm1QbHVnaW5XaWRnZXQoKSkgeworICAgICAgICBFdmFzX0Nvb3JkIHgsIHk7CisgICAgICAgIGV2
YXNfb2JqZWN0X2dlb21ldHJ5X2dldChyb290KCktPmV2YXNPYmplY3QoKSwgJngsICZ5LCAwLCAw
KTsKKyAgICAgICAgSW50UmVjdCBjaGlsZFJlY3QgPSBtX3dpbmRvd1JlY3Q7CisgICAgICAgIGNo
aWxkUmVjdC5tb3ZlKHgsIHkpOworICAgICAgICBwbGF0Zm9ybVBsdWdpbldpZGdldCgpLT5zZXRG
cmFtZVJlY3QoY2hpbGRSZWN0KTsKKyAgICAgICAgcGxhdGZvcm1QbHVnaW5XaWRnZXQoKS0+dXBk
YXRlKG1fY2xpcFJlY3QpOworICAgIH0KK30KKwordm9pZCBQbHVnaW5WaWV3OjpzZXRGb2N1cyhi
b29sKQoreworICAgIGlmIChwbGF0Zm9ybVBsdWdpbldpZGdldCgpKQorICAgICAgICBwbGF0Zm9y
bVBsdWdpbldpZGdldCgpLT5zZXRGb2N1cygpOworCisgICAgbV9lbGVtZW50LT5kb2N1bWVudCgp
LT5zZXRGb2N1c2VkTm9kZShtX2VsZW1lbnQpOworCisgICAgV2lkZ2V0OjpzZXRGb2N1cyh0cnVl
KTsKK30KKwordm9pZCBQbHVnaW5WaWV3OjpzaG93KCkKK3sKKyAgICBzZXRTZWxmVmlzaWJsZSh0
cnVlKTsKKworICAgIGlmIChpc1BhcmVudFZpc2libGUoKSAmJiBwbGF0Zm9ybVBsdWdpbldpZGdl
dCgpKQorICAgICAgICBwbGF0Zm9ybVBsdWdpbldpZGdldCgpLT5zZXRWaXNpYmxlKHRydWUpOwor
CisgICAgV2lkZ2V0OjpzaG93KCk7Cit9CisKK3ZvaWQgUGx1Z2luVmlldzo6aGlkZSgpCit7Cisg
ICAgc2V0U2VsZlZpc2libGUoZmFsc2UpOworCisgICAgaWYgKGlzUGFyZW50VmlzaWJsZSgpICYm
IHBsYXRmb3JtUGx1Z2luV2lkZ2V0KCkpCisgICAgICAgIHBsYXRmb3JtUGx1Z2luV2lkZ2V0KCkt
PnNldFZpc2libGUoZmFsc2UpOworCisgICAgV2lkZ2V0OjpoaWRlKCk7Cit9CisKK3ZvaWQgUGx1
Z2luVmlldzo6cGFpbnQoR3JhcGhpY3NDb250ZXh0KiBjb250ZXh0LCBjb25zdCBJbnRSZWN0JiBy
ZWN0KQoreworICAgIEludFJlY3QgZnJSZWN0ID0gZnJhbWVSZWN0KCk7CisKKyAgICBpZiAoIW1f
aXNTdGFydGVkKSB7CisgICAgICAgIHBhaW50TWlzc2luZ1BsdWdpbkljb24oY29udGV4dCwgcmVj
dCk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBpZiAoY29udGV4dC0+cGFpbnRpbmdE
aXNhYmxlZCgpKQorICAgICAgICByZXR1cm47CisKKyAgICBzZXROUFdpbmRvd0lmTmVlZGVkKCk7
CisKKyAgICBpZiAobV9pc1dpbmRvd2VkIHx8IGNvbnRleHQtPnBhaW50aW5nRGlzYWJsZWQoKSkK
KyAgICAgICAgcmV0dXJuOworfQorCit2b2lkIFBsdWdpblZpZXc6OnNldFBhcmVudChTY3JvbGxW
aWV3KiBwYXJlbnQpCit7CisgICAgV2lkZ2V0OjpzZXRQYXJlbnQocGFyZW50KTsKKworICAgIGlm
IChwYXJlbnQpCisgICAgICAgIGluaXQoKTsKKyAgICBlbHNlIHsKKyAgICAgICAgaWYgKCFwbGF0
Zm9ybVBsdWdpbldpZGdldCgpKQorICAgICAgICAgICAgcmV0dXJuOworICAgIH0KK30KKwordm9p
ZCBQbHVnaW5WaWV3OjpzZXROUFdpbmRvd1JlY3QoY29uc3QgSW50UmVjdCYgcmVjdCkKK3sKKyNp
ZiBFTkFCTEUoTkVUU0NBUEVfUExVR0lOX0FQSSkKKyAgICBpZiAoIW1faXNTdGFydGVkIHx8ICFw
YXJlbnQoKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgSW50UG9pbnQgcCA9IHN0YXRpY19jYXN0
PEZyYW1lVmlldyo+KHBhcmVudCgpKS0+Y29udGVudHNUb1dpbmRvdyhyZWN0LmxvY2F0aW9uKCkp
OworICAgIG1fbnBXaW5kb3cueCA9IHAueCgpOworICAgIG1fbnBXaW5kb3cueSA9IHAueSgpOwor
CisgICAgbV9ucFdpbmRvdy53aWR0aCA9IHJlY3Qud2lkdGgoKTsKKyAgICBtX25wV2luZG93Lmhl
aWdodCA9IHJlY3QuaGVpZ2h0KCk7CisKKyAgICBtX25wV2luZG93LmNsaXBSZWN0LmxlZnQgPSAw
OworICAgIG1fbnBXaW5kb3cuY2xpcFJlY3QudG9wID0gMDsKKyAgICBtX25wV2luZG93LmNsaXBS
ZWN0LnJpZ2h0ID0gcmVjdC53aWR0aCgpOworICAgIG1fbnBXaW5kb3cuY2xpcFJlY3QuYm90dG9t
ID0gcmVjdC5oZWlnaHQoKTsKKworICAgIGlmIChtX25wV2luZG93LnggPCAwIHx8IG1fbnBXaW5k
b3cueSA8IDAKKyAgICAgICAgfHwgbV9ucFdpbmRvdy53aWR0aCA8PSAwIHx8IG1fbnBXaW5kb3cu
aGVpZ2h0IDw9IDApCisgICAgICAgIHJldHVybjsKKworICAgIGlmIChtX3BsdWdpbi0+cGx1Z2lu
RnVuY3MoKS0+c2V0d2luZG93KSB7CisgICAgICAgIFBsdWdpblZpZXc6OnNldEN1cnJlbnRQbHVn
aW5WaWV3KHRoaXMpOworICAgICAgICBKU0M6OkpTTG9jazo6RHJvcEFsbExvY2tzIGRyb3BBbGxM
b2NrcyhmYWxzZSk7CisgICAgICAgIHNldENhbGxpbmdQbHVnaW4odHJ1ZSk7CisgICAgICAgIG1f
cGx1Z2luLT5wbHVnaW5GdW5jcygpLT5zZXR3aW5kb3cobV9pbnN0YW5jZSwgJm1fbnBXaW5kb3cp
OworICAgICAgICBzZXRDYWxsaW5nUGx1Z2luKGZhbHNlKTsKKyAgICAgICAgUGx1Z2luVmlldzo6
c2V0Q3VycmVudFBsdWdpblZpZXcoMCk7CisKKyAgICAgICAgaWYgKCFtX2lzV2luZG93ZWQpCisg
ICAgICAgICAgICByZXR1cm47CisKKyAgICAgICAgQVNTRVJUKHBsYXRmb3JtUGx1Z2luV2lkZ2V0
KCkpOworICAgIH0KKyNlbHNlCisgICAgbm90SW1wbGVtZW50ZWQoKTsKKyAgICByZXR1cm47Cisj
ZW5kaWYKK30KKwordm9pZCBQbHVnaW5WaWV3OjpzZXROUFdpbmRvd0lmTmVlZGVkKCkKK3sKK30K
K3ZvaWQgUGx1Z2luVmlldzo6c2V0UGFyZW50VmlzaWJsZShib29sIHZpc2libGUpCit7CisgICAg
aWYgKGlzUGFyZW50VmlzaWJsZSgpID09IHZpc2libGUpCisgICAgICAgIHJldHVybjsKKworICAg
IFdpZGdldDo6c2V0UGFyZW50VmlzaWJsZSh2aXNpYmxlKTsKKworICAgIGlmIChpc1NlbGZWaXNp
YmxlKCkgJiYgcGxhdGZvcm1QbHVnaW5XaWRnZXQoKSkKKyAgICAgICAgcGxhdGZvcm1QbHVnaW5X
aWRnZXQoKS0+c2V0VmlzaWJsZSh2aXNpYmxlKTsKK30KKworI2lmIEVOQUJMRShORVRTQ0FQRV9Q
TFVHSU5fQVBJKQorTlBFcnJvciBQbHVnaW5WaWV3OjpoYW5kbGVQb3N0UmVhZEZpbGUoVmVjdG9y
PGNoYXI+JiBidWZmZXIsIHVpbnQzMl90IGxlbiwgY29uc3QgY2hhciogYnVmKQoreworICAgIFN0
cmluZyBmaWxlbmFtZShidWYsIGxlbik7CisKKyAgICBpZiAoZmlsZW5hbWUuc3RhcnRzV2l0aCgi
ZmlsZTovLy8iKSkKKyAgICAgICAgZmlsZW5hbWUgPSBmaWxlbmFtZS5zdWJzdHJpbmcoOCk7CisK
KyAgICBpZiAoIWZpbGVFeGlzdHMoZmlsZW5hbWUpKQorICAgICAgICByZXR1cm4gTlBFUlJfRklM
RV9OT1RfRk9VTkQ7CisKKyAgICBGSUxFKiBmaWxlSGFuZGxlID0gZm9wZW4oZmlsZW5hbWUudXRm
OCgpLmRhdGEoKSwgInIiKTsKKworICAgIGlmICghZmlsZUhhbmRsZSkKKyAgICAgICAgcmV0dXJu
IE5QRVJSX0ZJTEVfTk9UX0ZPVU5EOworCisgICAgaW50IGJ5dGVzUmVhZCA9IGZyZWFkKGJ1ZmZl
ci5kYXRhKCksIDEsIDAsIGZpbGVIYW5kbGUpOworCisgICAgZmNsb3NlKGZpbGVIYW5kbGUpOwor
CisgICAgaWYgKGJ5dGVzUmVhZCA8PSAwKQorICAgICAgICByZXR1cm4gTlBFUlJfRklMRV9OT1Rf
Rk9VTkQ7CisKKyAgICByZXR1cm4gTlBFUlJfTk9fRVJST1I7Cit9CisjZW5kaWYKKworI2lmIEVO
QUJMRShORVRTQ0FQRV9QTFVHSU5fQVBJKQorYm9vbCBQbHVnaW5WaWV3OjpwbGF0Zm9ybUdldFZh
bHVlU3RhdGljKE5QTlZhcmlhYmxlIHZhcmlhYmxlLCB2b2lkKiB2YWx1ZSwgTlBFcnJvciogcmVz
dWx0KQoreworICAgIHN3aXRjaCAodmFyaWFibGUpIHsKKyAgICBjYXNlIE5QTlZUb29sa2l0Ogor
ICAgICAgICAqc3RhdGljX2Nhc3Q8dWludDMyX3QqPih2YWx1ZSkgPSAwOworICAgICAgICAqcmVz
dWx0ID0gTlBFUlJfTk9fRVJST1I7CisgICAgICAgIHJldHVybiB0cnVlOworCisgICAgY2FzZSBO
UE5WU3VwcG9ydHNYRW1iZWRCb29sOgorICAgICAgICAqc3RhdGljX2Nhc3Q8TlBCb29sKj4odmFs
dWUpID0gdHJ1ZTsKKyAgICAgICAgKnJlc3VsdCA9IE5QRVJSX05PX0VSUk9SOworICAgICAgICBy
ZXR1cm4gdHJ1ZTsKKworICAgIGNhc2UgTlBOVmphdmFzY3JpcHRFbmFibGVkQm9vbDoKKyAgICAg
ICAgKnN0YXRpY19jYXN0PE5QQm9vbCo+KHZhbHVlKSA9IHRydWU7CisgICAgICAgICpyZXN1bHQg
PSBOUEVSUl9OT19FUlJPUjsKKyAgICAgICAgcmV0dXJuIHRydWU7CisKKyAgICBjYXNlIE5QTlZT
dXBwb3J0c1dpbmRvd2xlc3M6CisgICAgICAgICpzdGF0aWNfY2FzdDxOUEJvb2wqPih2YWx1ZSkg
PSBmYWxzZTsKKyAgICAgICAgKnJlc3VsdCA9IE5QRVJSX05PX0VSUk9SOworICAgICAgICByZXR1
cm4gdHJ1ZTsKKworICAgIGRlZmF1bHQ6CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9Cit9
CisKK2Jvb2wgUGx1Z2luVmlldzo6cGxhdGZvcm1HZXRWYWx1ZShOUE5WYXJpYWJsZSB2YXJpYWJs
ZSwgdm9pZCogdmFsdWUsIE5QRXJyb3IqIHJlc3VsdCkKK3sKKyAgICBpZiAoIXZhbHVlIHx8ICFy
ZXN1bHQpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIHN3aXRjaCAodmFyaWFibGUpIHsK
KyAgICBjYXNlIE5QTlZ4RGlzcGxheToKKyAgICAgICAgaWYgKHBsYXRmb3JtUGx1Z2luV2lkZ2V0
KCkpCisgICAgICAgICAgICAqKHZvaWQgKiopdmFsdWUgPSBwbGF0Zm9ybVBsdWdpbldpZGdldCgp
LT54MTFJbmZvKCktPmRpc3BsYXkoKTsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgKih2b2lk
ICoqKXZhbHVlID0gKERpc3BsYXkqKSBlY29yZV94X2Rpc3BsYXlfZ2V0KCk7CisgICAgICAgICpy
ZXN1bHQgPSBOUEVSUl9OT19FUlJPUjsKKyAgICAgICAgcmV0dXJuIHRydWU7CisKKyAgICBjYXNl
IE5QTlZ4dEFwcENvbnRleHQ6CisgICAgICAgICpyZXN1bHQgPSBOUEVSUl9HRU5FUklDX0VSUk9S
OworICAgICAgICByZXR1cm4gdHJ1ZTsKKworI2lmIEVOQUJMRShORVRTQ0FQRV9QTFVHSU5fQVBJ
KQorICAgIGNhc2UgTlBOVldpbmRvd05QT2JqZWN0OiB7CisgICAgICAgIGlmIChtX2lzSmF2YVNj
cmlwdFBhdXNlZCkgeworICAgICAgICAgICAgKnJlc3VsdCA9IE5QRVJSX0dFTkVSSUNfRVJST1I7
CisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgfQorCisgICAgICAgIE5QT2JqZWN0
KiB3aW5kb3dTY3JpcHRPYmplY3QgPSBtX3BhcmVudEZyYW1lLT5zY3JpcHQoKS0+d2luZG93U2Ny
aXB0TlBPYmplY3QoKTsKKworICAgICAgICAvLyBSZXR1cm4gdmFsdWUgaXMgZXhwZWN0ZWQgdG8g
YmUgcmV0YWluZWQsIGFzIGRlc2NyaWJlZCBoZXJlOiA8aHR0cDovL3d3dy5tb3ppbGxhLm9yZy9w
cm9qZWN0cy9wbHVnaW4vbnBydW50aW1lLmh0bWw+CisgICAgICAgIGlmICh3aW5kb3dTY3JpcHRP
YmplY3QpCisgICAgICAgICAgICBfTlBOX1JldGFpbk9iamVjdCh3aW5kb3dTY3JpcHRPYmplY3Qp
OworCisgICAgICAgIHZvaWQqKiB2ID0gKHZvaWQqKil2YWx1ZTsKKyAgICAgICAgKnYgPSB3aW5k
b3dTY3JpcHRPYmplY3Q7CisKKyAgICAgICAgKnJlc3VsdCA9IE5QRVJSX05PX0VSUk9SOworICAg
ICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CisKKyAgICBjYXNlIE5QTlZQbHVnaW5FbGVtZW50TlBP
YmplY3Q6IHsKKyAgICAgICAgaWYgKG1faXNKYXZhU2NyaXB0UGF1c2VkKSB7CisgICAgICAgICAg
ICAqcmVzdWx0ID0gTlBFUlJfR0VORVJJQ19FUlJPUjsKKyAgICAgICAgICAgIHJldHVybiB0cnVl
OworICAgICAgICB9CisKKyAgICAgICAgTlBPYmplY3QqIHBsdWdpblNjcmlwdE9iamVjdCA9IDA7
CisKKyAgICAgICAgaWYgKG1fZWxlbWVudC0+aGFzVGFnTmFtZShhcHBsZXRUYWcpIHx8IG1fZWxl
bWVudC0+aGFzVGFnTmFtZShlbWJlZFRhZykgfHwgbV9lbGVtZW50LT5oYXNUYWdOYW1lKG9iamVj
dFRhZykpCisgICAgICAgICAgICBwbHVnaW5TY3JpcHRPYmplY3QgPSBzdGF0aWNfY2FzdDxIVE1M
UGx1Z0luRWxlbWVudCo+KG1fZWxlbWVudCktPmdldE5QT2JqZWN0KCk7CisKKyAgICAgICAgLy8g
UmV0dXJuIHZhbHVlIGlzIGV4cGVjdGVkIHRvIGJlIHJldGFpbmVkLCBhcyBkZXNjcmliZWQgaGVy
ZTogPGh0dHA6Ly93d3cubW96aWxsYS5vcmcvcHJvamVjdHMvcGx1Z2luL25wcnVudGltZS5odG1s
PgorICAgICAgICBpZiAocGx1Z2luU2NyaXB0T2JqZWN0KQorICAgICAgICAgICAgX05QTl9SZXRh
aW5PYmplY3QocGx1Z2luU2NyaXB0T2JqZWN0KTsKKworICAgICAgICB2b2lkKiogdiA9ICh2b2lk
KiopdmFsdWU7CisgICAgICAgICp2ID0gcGx1Z2luU2NyaXB0T2JqZWN0OworCisgICAgICAgICpy
ZXN1bHQgPSBOUEVSUl9OT19FUlJPUjsKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgfQorI2Vu
ZGlmCisKKyAgICBjYXNlIE5QTlZuZXRzY2FwZVdpbmRvdzogeworICAgICAgICB2b2lkKiB3ID0g
cmVpbnRlcnByZXRfY2FzdDx2b2lkKj4odmFsdWUpOworICAgICAgICBFdmFzX09iamVjdCogd2lk
Z2V0ID0gbV9wYXJlbnRGcmFtZS0+dmlldygpLT5ob3N0V2luZG93KCktPnBsYXRmb3JtUGFnZUNs
aWVudCgpOworICAgICAgICBFdmFzKiBldmFzID0gZXZhc19vYmplY3RfZXZhc19nZXQod2lkZ2V0
KTsKKyAgICAgICAgRWNvcmVfRXZhcyogZWUgPSBlY29yZV9ldmFzX2Vjb3JlX2V2YXNfZ2V0KGV2
YXMpOworICAgICAgICAqKChYSUQgKil3KSA9IChXaW5kb3cpIGVjb3JlX2V2YXNfd2luZG93X2dl
dChlZSk7CisgICAgICAgICpyZXN1bHQgPSBOUEVSUl9OT19FUlJPUjsKKyAgICAgICAgcmV0dXJu
IHRydWU7CisgICAgfQorCisgICAgY2FzZSBOUE5WVG9vbGtpdDoKKyAgICAgICAgaWYgKG1fcGx1
Z2luLT5xdWlya3MoKS5jb250YWlucyhQbHVnaW5RdWlya1JlcXVpcmVzR3RrVG9vbEtpdCkpIHsK
KyAgICAgICAgICAgICooKHVpbnQzMl90ICopdmFsdWUpID0gMjsKKyAgICAgICAgICAgICpyZXN1
bHQgPSBOUEVSUl9OT19FUlJPUjsKKyAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICB9
CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgLy8gZmFsbCB0aHJvdWdoCisgICAgZGVm
YXVsdDoKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KK30KKyNlbmRpZgorCit2b2lkIFBs
dWdpblZpZXc6OmludmFsaWRhdGVSZWN0KGNvbnN0IEludFJlY3QmIHJlY3QpCit7CisgICAgaWYg
KHBsYXRmb3JtUGx1Z2luV2lkZ2V0KCkpIHsKKyAgICAgICAgcGxhdGZvcm1QbHVnaW5XaWRnZXQo
KS0+dXBkYXRlKHJlY3QpOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgaW52YWxpZGF0
ZVdpbmRvd2xlc3NQbHVnaW5SZWN0KHJlY3QpOworfQorCisjaWYgRU5BQkxFKE5FVFNDQVBFX1BM
VUdJTl9BUEkpCit2b2lkIFBsdWdpblZpZXc6OmludmFsaWRhdGVSZWN0KE5QUmVjdCogcmVjdCkK
K3sKKyAgICBpZiAoIXJlY3QpIHsKKyAgICAgICAgaW52YWxpZGF0ZSgpOworICAgICAgICByZXR1
cm47CisgICAgfQorCisgICAgSW50UmVjdCByKHJlY3QtPmxlZnQsIHJlY3QtPnRvcCwgcmVjdC0+
cmlnaHQgLSByZWN0LT5sZWZ0LCByZWN0LT5ib3R0b20gLSByZWN0LT50b3ApOworCisgICAgaW52
YWxpZGF0ZVJlY3Qocik7Cit9CisKK3ZvaWQgUGx1Z2luVmlldzo6aW52YWxpZGF0ZVJlZ2lvbihO
UFJlZ2lvbiByZWdpb24pCit7CisgICAgbm90SW1wbGVtZW50ZWQoKTsKK30KKyNlbmRpZgorCit2
b2lkIFBsdWdpblZpZXc6OmZvcmNlUmVkcmF3KCkKK3sKKyAgICBub3RJbXBsZW1lbnRlZCgpOwor
fQorCitib29sIFBsdWdpblZpZXc6OnBsYXRmb3JtU3RhcnQoKQoreworICAgIEFTU0VSVChtX2lz
U3RhcnRlZCk7CisgICAgQVNTRVJUKG1fc3RhdHVzID09IFBsdWdpblN0YXR1c0xvYWRlZFN1Y2Nl
c3NmdWxseSk7CisKKyAgICBpZiAobV9wbHVnaW4tPnBsdWdpbkZ1bmNzKCktPmdldHZhbHVlKSB7
CisgICAgICAgIFBsdWdpblZpZXc6OnNldEN1cnJlbnRQbHVnaW5WaWV3KHRoaXMpOworICAgICAg
ICBKU0M6OkpTTG9jazo6RHJvcEFsbExvY2tzIGRyb3BBbGxMb2NrcyhmYWxzZSk7CisgICAgICAg
IHNldENhbGxpbmdQbHVnaW4odHJ1ZSk7CisjaWYgRU5BQkxFKE5FVFNDQVBFX1BMVUdJTl9BUEkp
CisgICAgICAgIG1fcGx1Z2luLT5wbHVnaW5GdW5jcygpLT5nZXR2YWx1ZShtX2luc3RhbmNlLCBO
UFBWcGx1Z2luTmVlZHNYRW1iZWQsICZtX25lZWRzWEVtYmVkKTsKKyNlbmRpZgorICAgICAgICBz
ZXRDYWxsaW5nUGx1Z2luKGZhbHNlKTsKKyAgICAgICAgUGx1Z2luVmlldzo6c2V0Q3VycmVudFBs
dWdpblZpZXcoMCk7CisgICAgfQorCisgICAgaWYgKG1fbmVlZHNYRW1iZWQpIHsKKyAgICAgICAg
RXZhc19PYmplY3QqIG8gPSBtX3BhcmVudEZyYW1lLT52aWV3KCktPmhvc3RXaW5kb3coKS0+cGxh
dGZvcm1QYWdlQ2xpZW50KCk7CisgICAgICAgIEV2YXMqIGV2YXMgPSBldmFzX29iamVjdF9ldmFz
X2dldChvKTsKKyAgICAgICAgc2V0UGxhdGZvcm1QbHVnaW5XaWRnZXQobmV3IFgxMUVtYmVkQ29u
dGFpbmVyKGV2YXMsIHRoaXMpKTsKKyAgICB9IGVsc2UgeworICAgICAgICBub3RJbXBsZW1lbnRl
ZCgpOworICAgICAgICBtX3N0YXR1cyA9IFBsdWdpblN0YXR1c0Nhbk5vdExvYWRQbHVnaW47Cisg
ICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisKKworICAgIHNob3coKTsKKyAgICBOUFNldFdp
bmRvd0NhbGxiYWNrU3RydWN0KiB3c2kgPSBuZXcgTlBTZXRXaW5kb3dDYWxsYmFja1N0cnVjdCgp
OworCisgICAgd3NpLT50eXBlID0gMDsKKworICAgIFgxMUluZm8qIGluZm8gPSBwbGF0Zm9ybVBs
dWdpbldpZGdldCgpLT54MTFJbmZvKCk7CisKKyAgICB3c2ktPmRpc3BsYXkgPSBpbmZvLT5kaXNw
bGF5KCk7CisgICAgd3NpLT52aXN1YWwgPSBpbmZvLT52aXN1YWwoKTsKKyAgICB3c2ktPmRlcHRo
ID0gaW5mby0+ZGVwdGgoKTsKKyAgICB3c2ktPmNvbG9ybWFwID0gaW5mby0+Y29sb3JtYXAoKTsK
KyNpZiBFTkFCTEUoTkVUU0NBUEVfUExVR0lOX0FQSSkKKyAgICBtX25wV2luZG93LndzX2luZm8g
PSB3c2k7CisKKyAgICBtX25wV2luZG93LnR5cGUgPSBOUFdpbmRvd1R5cGVXaW5kb3c7CisgICAg
bV9ucFdpbmRvdy53aW5kb3cgPSAodm9pZCopIHBsYXRmb3JtUGx1Z2luV2lkZ2V0KCktPndpbklk
KCk7CisjZW5kaWYKKworICAgIGlmICghKG1fcGx1Z2luLT5xdWlya3MoKS5jb250YWlucyhQbHVn
aW5RdWlya0RlZmVyRmlyc3RTZXRXaW5kb3dDYWxsKSkpCisgICAgICAgIHNldE5QV2luZG93UmVj
dChmcmFtZVJlY3QoKSk7CisKKyAgICByZXR1cm4gdHJ1ZTsKK30KKwordm9pZCBQbHVnaW5WaWV3
OjpwbGF0Zm9ybURlc3Ryb3koKQoreworfQorCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbHVnaW5zL2VmbC9YMTFFbWJlZENvbnRhaW5lci5jcHAg
Yi9Tb3VyY2UvV2ViQ29yZS9wbHVnaW5zL2VmbC9YMTFFbWJlZENvbnRhaW5lci5jcHAKbmV3IGZp
bGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjI1ZjRmYgotLS0gL2Rldi9udWxsCisrKyBi
L1NvdXJjZS9XZWJDb3JlL3BsdWdpbnMvZWZsL1gxMUVtYmVkQ29udGFpbmVyLmNwcApAQCAtMCww
ICsxLDM1NiBAQAorLyoKKyAgICBDb3B5cmlnaHQgKEMpIDIwMDkgSU5kVCAtIEluc3RpdHV0byBO
b2tpYSBkZSBUZWNub2xvZ2lhCisgICAgQ29weXJpZ2h0IChDKSAyMDA5LTIwMTAgUHJvRlVTSU9O
IGVtYmVkZGVkIHN5c3RlbXMKKyAgICBDb3B5cmlnaHQgKEMpIDIwMDktMjAxMCBTYW1zdW5nIEVs
ZWN0cm9uaWNzCisKKyAgICBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiBy
ZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgICAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0
aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAgICBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBi
eSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAgICB2ZXJzaW9uIDIgb2Yg
dGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisKKyAg
ICBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJl
IHVzZWZ1bCwKKyAgICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUg
aW1wbGllZCB3YXJyYW50eSBvZgorICAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBB
IFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgICAgTGlicmFyeSBHZW5lcmFsIFB1
YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisKKyAgICBZb3Ugc2hvdWxkIGhhdmUgcmVj
ZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisg
ICAgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElm
IG5vdCwgd3JpdGUgdG8KKyAgICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1
MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAorICAgIEJvc3RvbiwgTUEgMDIxMTAtMTMw
MSwgVVNBLgorKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIlgxMUVtYmVkQ29u
dGFpbmVyLmgiCisKKyNpbmNsdWRlICJQbHVnaW5WaWV3LmgiCisjaW5jbHVkZSAiWDExV2luZG93
LmgiCisKKyNpbmNsdWRlIDxYMTEvWC5oPgorI2luY2x1ZGUgPFgxMS9YbGliLmg+CisKKyNkZWZp
bmUgS2V5UHJlc3MgICAgIDIKKyNkZWZpbmUgS2V5UmVsZWFzZSAgIDMKKyNkZWZpbmUgRm9jdXNJ
biAgICAgIDkKKyNkZWZpbmUgRm9jdXNPdXQgICAgMTAKKworI2RlZmluZSBBVE9NKG5hbWUpIGVj
b3JlX3hfYXRvbV9nZXQoI25hbWUpCisKK3VzaW5nIG5hbWVzcGFjZSBzdGQ7Cit1c2luZyBuYW1l
c3BhY2UgV1RGOwordXNpbmcgbmFtZXNwYWNlIFdlYkNvcmU7CisKK2NsYXNzIFgxMUVtYmVkRXZl
bnRIYW5kbGVyOworCitzdGF0aWMgdW5zaWduZWQgaW50IHhlbWJlZFZlcnNpb24gPSAwOworc3Rh
dGljIHVuc2lnbmVkIGludCB4ZW1iZWRNYXBwZWQgPSAoMSA8PCAwKTsKK3N0YXRpYyB2b2lkIHNl
bmRYRW1iZWRNZXNzYWdlKFdpbklkICwgRGlzcGxheSogLCBsb25nICwgbG9uZyBkZXRhaWwgPSAw
LCBsb25nIGRhdGExID0gMCwgbG9uZyBkYXRhMiA9IDApOworCitlbnVtIFgxMUVtYmVkTWVzc2Fn
ZVR5cGUgeworICAgIFhFTUJFRF9FTUJFRERFRF9OT1RJRlkgPSAwLAorICAgIFhFTUJFRF9XSU5E
T1dfQUNUSVZBVEUgPSAxLAorICAgIFhFTUJFRF9XSU5ET1dfREVBQ1RJVkFURSA9IDIsCisgICAg
WEVNQkVEX1JFUVVFU1RfRk9DVVMgPSAzLAorICAgIFhFTUJFRF9GT0NVU19JTiA9IDQsCisgICAg
WEVNQkVEX0ZPQ1VTX09VVCA9IDUsCisgICAgWEVNQkVEX0ZPQ1VTX05FWFQgPSA2LAorICAgIFhF
TUJFRF9GT0NVU19QUkVWID0gNywKKyAgICAvKiA4LTkgd2VyZSB1c2VkIGZvciBYRU1CRURfR1JB
Ql9LRVkvWEVNQkVEX1VOR1JBQl9LRVkgKi8KKyAgICBYRU1CRURfTU9EQUxJVFlfT04gPSAxMCwK
KyAgICBYRU1CRURfTU9EQUxJVFlfT0ZGID0gMTEsCisgICAgWEVNQkVEX1JFR0lTVEVSX0FDQ0VM
RVJBVE9SID0gMTIsCisgICAgWEVNQkVEX1VOUkVHSVNURVJfQUNDRUxFUkFUT1IgPSAxMywKKyAg
ICBYRU1CRURfQUNUSVZBVEVfQUNDRUxFUkFUT1IgPSAxNAorfTsKKworZW51bSBYMTFFbWJlZEZv
Y3VzSW5EZXRhaWwgeworICAgIFhFTUJFRF9GT0NVU19DVVJSRU5UID0gMCwKKyAgICBYRU1CRURf
Rk9DVVNfRklSU1QgPSAxLAorICAgIFhFTUJFRF9GT0NVU19MQVNUID0gMgorfTsKKworWDExRW1i
ZWRDb250YWluZXI6OlgxMUVtYmVkQ29udGFpbmVyKEV2YXMqIGV2YXMsIFBsdWdpblZpZXcqIHZp
ZXcpCisgICAgOiBYMTFXaW5kb3coZXZhcykKKyAgICAsIG1fYWN0aXZlKGZhbHNlKQorICAgICwg
bV9jbGllbnQoMCkKKyAgICAsIG1fcGx1Z2luVmlldyh2aWV3KQorICAgICwgbV9jbGllbnRXaW5k
b3coMCkKK3sKKyAgICAvLyBpbXBsZW1lbnQgdGhlIGZvY3VzIHByb3h5IGFzIGluIHRoZSBzcGVj
LCBvZmZzY3JlZW4KKyAgICBtX2ZvY3VzUHJveHkuc2V0KG5ldyBYMTFXaW5kb3cod2luSWQoKSwg
SW50UmVjdCgtMSwgLTEsIDEsIDEpKSk7CisgICAgbV9mb2N1c1Byb3h5LT5pbnN0YWxsRXZlbnRG
aWx0ZXIodGhpcyk7CisgICAgbV9mb2N1c1Byb3h5LT5zaG93KCk7CisKKyAgICBlY29yZV94X3dp
bmRvd19iYWNrZ3JvdW5kX2NvbG9yX3NldCh3aW5JZCgpLCA2NTUzNSwgNjU1MzUsIDY1NTM1KTsK
KworICAgIC8vIENoYW5nZSB0aGUgZXZlbnQgZmlsdGVyIGZvciB0aGUgZXZlbnRzIHdlIHdvdWxk
IGxpa2UgdG8gcmVjZWl2ZQorICAgIFhTZWxlY3RJbnB1dCh4MTFJbmZvKCktPmRpc3BsYXkoKSwg
d2luSWQoKSwKKyAgICAgICAgICAgIEtleVByZXNzTWFzayB8IEtleVJlbGVhc2VNYXNrCisgICAg
ICAgICAgICB8IEJ1dHRvblByZXNzTWFzayB8IEJ1dHRvblJlbGVhc2VNYXNrIHwgQnV0dG9uTW90
aW9uTWFzaworICAgICAgICAgICAgfCBLZXltYXBTdGF0ZU1hc2sKKyAgICAgICAgICAgIHwgUG9p
bnRlck1vdGlvbk1hc2sKKyAgICAgICAgICAgIHwgRW50ZXJXaW5kb3dNYXNrIHwgTGVhdmVXaW5k
b3dNYXNrCisgICAgICAgICAgICB8IEZvY3VzQ2hhbmdlTWFzaworICAgICAgICAgICAgfCBFeHBv
c3VyZU1hc2sKKyAgICAgICAgICAgIHwgU3RydWN0dXJlTm90aWZ5TWFzaworICAgICAgICAgICAg
fCBTdWJzdHJ1Y3R1cmVOb3RpZnlNYXNrKTsKKworICAgIFhGbHVzaCh4MTFJbmZvKCktPmRpc3Bs
YXkoKSk7Cit9CisKK1gxMUVtYmVkQ29udGFpbmVyOjp+WDExRW1iZWRDb250YWluZXIoKQorewor
ICAgIHNldFZpc2libGUoZmFsc2UpOworCisgICAgaWYgKGNsaWVudCgpKSB7CisgICAgICAgIFhV
bm1hcFdpbmRvdyh4MTFJbmZvKCktPmRpc3BsYXkoKSwgY2xpZW50KCkpOworICAgICAgICBYUmVw
YXJlbnRXaW5kb3coeDExSW5mbygpLT5kaXNwbGF5KCksIGNsaWVudCgpLCByb290V2luZG93KCks
IDAsIDApOworICAgIH0KK30KKwordm9pZCBYMTFFbWJlZENvbnRhaW5lcjo6bW92ZUlucHV0Rm9j
dXNUb1Byb3h5KCkKK3sKKyAgICBpZiAoaGFzRm9jdXMoKSkKKyAgICAgICAgcmV0dXJuOworCisg
ICAgWFNldElucHV0Rm9jdXMoeDExSW5mbygpLT5kaXNwbGF5KCksIG1fZm9jdXNQcm94eS0+d2lu
SWQoKSwgUmV2ZXJ0VG9QYXJlbnQsIHgxMUluZm8oKS0+eDExVGltZSgpKTsKK30KKwordm9pZCBY
MTFFbWJlZENvbnRhaW5lcjo6YWNjZXB0KFdpbklkIGNsaWVudCkKK3sKKyAgICBzZXRDbGllbnQo
Y2xpZW50KTsKKyAgICBtX2NsaWVudFdpbmRvdy0+aW5zdGFsbEV2ZW50RmlsdGVyKHRoaXMpOwor
CisgICAgWEFkZFRvU2F2ZVNldCh4MTFJbmZvKCktPmRpc3BsYXkoKSwgY2xpZW50KTsgLy8gYXZv
aWQgY2xpZW50IGZyb20gY3Jhc2hpbmcgYWxvbmcgd2l0aCB1cworCisgICAgdW5zaWduZWQgaW50
IHZlcnNpb24gPSAwOyAvLyBsYXRlc3QgdmVyc2lvbiBvZiB0aGUgc3BlYworCisgICAgaW50IG5p
dGVtcyA9IDA7CisgICAgdW5zaWduZWQgY2hhciAqZGF0YSA9IDA7CisgICAgdW5zaWduZWQgaW50
IGNsaWVudFZlcnNpb24gPSAwOworCisgICAgc3RhdGljIEF0b20gYXRvbSA9IEFUT00oX1hFTUJF
RF9JTkZPKTsKKworICAgIGlmIChlY29yZV94X3dpbmRvd19wcm9wX3Byb3BlcnR5X2dldChjbGll
bnQsIGF0b20sIGF0b20sIDIsICZkYXRhLCAmbml0ZW1zKSkgeworICAgICAgICB1bnNpZ25lZCBp
bnQgKnByb3AgPSAodW5zaWduZWQgaW50ICopIGRhdGE7CisKKyAgICAgICAgaWYgKG5pdGVtcyA+
PSAyKQorICAgICAgICAgICAgY2xpZW50VmVyc2lvbiA9IHByb3BbMF07CisgICAgICAgIGZyZWUo
ZGF0YSk7CisgICAgfQorCisgICAgLy8gQXNrIHRoZSBjbGllbnQgZm9yIGl0cyBtaW5pbXVtIHNp
emUuCisgICAgSW50U2l6ZSBtaW5TaXplSGludDsKKyAgICBYU2l6ZUhpbnRzIHNpemVIaW50Owor
ICAgIGxvbmcgdW51c2VkOworICAgIGlmIChYR2V0V01Ob3JtYWxIaW50cyh4MTFJbmZvKCktPmRp
c3BsYXkoKSwgY2xpZW50LCAmc2l6ZUhpbnQsICZ1bnVzZWQpICYmIChzaXplSGludC5mbGFncyAm
IFBNaW5TaXplKSkKKyAgICAgICAgbWluU2l6ZUhpbnQgPSBJbnRTaXplKHNpemVIaW50Lm1pbl93
aWR0aCwgc2l6ZUhpbnQubWluX2hlaWdodCk7CisgICAgZWxzZQorICAgICAgICBtaW5TaXplSGlu
dCA9IEludFNpemUoMCwgMCk7CisKKyAgICB1bnNpZ25lZCBpbnQgbWluVmVyc2lvbiA9IHZlcnNp
b24gPiBjbGllbnRWZXJzaW9uID8gY2xpZW50VmVyc2lvbiA6IHZlcnNpb247CisKKyAgICBzZW5k
WEVtYmVkTWVzc2FnZShjbGllbnQsIHgxMUluZm8oKS0+ZGlzcGxheSgpLCBYRU1CRURfRU1CRURE
RURfTk9USUZZLCAwLCB3aW5JZCgpLCBtaW5WZXJzaW9uKTsKKworICAgIFhNYXBXaW5kb3coeDEx
SW5mbygpLT5kaXNwbGF5KCksIGNsaWVudCk7CisKKyAgICByZXNpemUobWF4KHNpemUoKS53aWR0
aCgpLCBtaW5TaXplSGludC53aWR0aCgpKSwgbWF4KHNpemUoKS5oZWlnaHQoKSwgbWluU2l6ZUhp
bnQuaGVpZ2h0KCkpKTsKK30KKwordm9pZCBYMTFFbWJlZENvbnRhaW5lcjo6cmVqZWN0KFdpbklk
IGNsaWVudCkKK3sKKyAgICBYUmVtb3ZlRnJvbVNhdmVTZXQoeDExSW5mbygpLT5kaXNwbGF5KCks
IGNsaWVudCk7CisgICAgWFJlcGFyZW50V2luZG93KHgxMUluZm8oKS0+ZGlzcGxheSgpLCBjbGll
bnQsIHJvb3RXaW5kb3coKSwgMCwgMCk7Cit9CisKK3ZvaWQgWDExRW1iZWRDb250YWluZXI6OnNo
b3coKQoreworICAgIFgxMVdpbmRvdzo6c2hvdygpOworCisgICAgLy8gc2lnbmFsIG1hcAorICAg
IGlmIChjbGllbnQoKSkgeworICAgICAgICB1bnNpZ25lZCBpbnQgZGF0YVtdID0ge3hlbWJlZFZl
cnNpb24sIHhlbWJlZE1hcHBlZH07CisgICAgICAgIFhDaGFuZ2VQcm9wZXJ0eSh4MTFJbmZvKCkt
PmRpc3BsYXkoKSwgY2xpZW50KCksIEFUT00oX1hFTUJFRF9JTkZPKSwgQVRPTShfWEVNQkVEX0lO
Rk8pLCAzMiwKKyAgICAgICAgICAgIFByb3BNb2RlUmVwbGFjZSwgKHVuc2lnbmVkIGNoYXIgKikg
ZGF0YSwgMik7CisgICAgfQorfQorCit2b2lkIFgxMUVtYmVkQ29udGFpbmVyOjpoaWRlKCkKK3sK
KyAgICBYMTFXaW5kb3c6OmhpZGUoKTsKKworICAgIC8vIHNpZ25hbCB1bm1hcAorICAgIGlmIChj
bGllbnQoKSkgeworICAgICAgICB1bnNpZ25lZCBpbnQgZGF0YVtdID0ge3hlbWJlZFZlcnNpb24s
IHhlbWJlZE1hcHBlZH07CisgICAgICAgIFhDaGFuZ2VQcm9wZXJ0eSh4MTFJbmZvKCktPmRpc3Bs
YXkoKSwgY2xpZW50KCksIEFUT00oX1hFTUJFRF9JTkZPKSwgQVRPTShfWEVNQkVEX0lORk8pLCAz
MiwKKyAgICAgICAgICAgIFByb3BNb2RlUmVwbGFjZSwgKHVuc2lnbmVkIGNoYXIgKikgZGF0YSwg
Mik7CisgICAgfQorICAgIG1fYWN0aXZlID0gZmFsc2U7Cit9CisKK3ZvaWQgWDExRW1iZWRDb250
YWluZXI6OnJlc2l6ZShpbnQgd2lkdGgsIGludCBoZWlnaHQpCit7CisgICAgWDExV2luZG93Ojpy
ZXNpemUod2lkdGgsIGhlaWdodCk7CisgICAgaWYgKGNsaWVudCgpKQorICAgICAgICBYUmVzaXpl
V2luZG93KHgxMUluZm8oKS0+ZGlzcGxheSgpLCBjbGllbnQoKSwgd2lkdGgsIGhlaWdodCk7Cit9
CisKK3ZvaWQgWDExRW1iZWRDb250YWluZXI6OnNldEZyYW1lUmVjdChjb25zdCBJbnRSZWN0JiBy
ZWN0KQoreworICAgIFgxMVdpbmRvdzo6c2V0RnJhbWVSZWN0KHJlY3QpOworICAgIGlmIChjbGll
bnQoKSkKKyAgICAgICAgWE1vdmVSZXNpemVXaW5kb3coeDExSW5mbygpLT5kaXNwbGF5KCksIGNs
aWVudCgpLCAwLCAwLCByZWN0LndpZHRoKCksIHJlY3QuaGVpZ2h0KCkpOworfQorCit2b2lkIFgx
MUVtYmVkQ29udGFpbmVyOjpzZXRGb2N1cygpCit7CisgICAgbW92ZUlucHV0Rm9jdXNUb1Byb3h5
KCk7CisgICAgbV9hY3RpdmUgPSB0cnVlOworfQorCitib29sIFgxMUVtYmVkQ29udGFpbmVyOjpo
YXNGb2N1cygpCit7CisgICAgV2luSWQgZm9jdXNlZDsKKyAgICBpbnQgcmV2ZXJ0VG87CisgICAg
WEdldElucHV0Rm9jdXMoeDExSW5mbygpLT5kaXNwbGF5KCksICZmb2N1c2VkLCAmcmV2ZXJ0VG8p
OworCisgICAgcmV0dXJuIGZvY3VzZWQgPT0gbV9mb2N1c1Byb3h5LT53aW5JZCgpOworfQorCiti
b29sIFgxMUVtYmVkQ29udGFpbmVyOjppc0FjdGl2ZSgpCit7CisgICAgcmV0dXJuIG1fYWN0aXZl
OworfQorCitXaW5JZCBYMTFFbWJlZENvbnRhaW5lcjo6cm9vdFdpbmRvdygpCit7CisgICAgcmV0
dXJuIERlZmF1bHRSb290V2luZG93KHgxMUluZm8oKS0+ZGlzcGxheSgpKTsKK30KKworYm9vbCBY
MTFFbWJlZENvbnRhaW5lcjo6eDExRXZlbnQoWEV2ZW50KiBldmVudCkKK3sKKyAgICAvLyB3ZSBz
dWJzY3JpYmUgdG8gZXZlbnRzIGRpcmVjdGx5IGZyb20gdGhlIGNsaWVudCBhcyB3ZWxsCisgICAg
Ly8gaW4gb3JkZXIgdG8gcGljayB1cCB3aGVlbCBldmVudHMuCisgICAgaWYgKGV2ZW50LT54YW55
LndpbmRvdyA9PSBjbGllbnQoKSkgeworICAgICAgICBzd2l0Y2ggKGV2ZW50LT50eXBlKSB7Cisg
ICAgICAgIGNhc2UgQnV0dG9uUHJlc3M6CisgICAgICAgICAgICAvLyBtX3BsdWdpblZpZXctPmRp
c3BhdGNoV2hlZWxFdmVudChldmVudCk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2Fz
ZSBCdXR0b25SZWxlYXNlOgorICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAgICAg
cmV0dXJuIHRydWU7CisgICAgfQorCisgICAgc3dpdGNoIChldmVudC0+dHlwZSkgeworICAgIGNh
c2UgRm9jdXNJbjoKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBGb2N1c091dDoKKyAgICAgICAg
Ly8gd2hlbiBvdXIgcHJveHkgZ2FpbiBmb2N1cywgdGhlIGNvbnRhaW5lciBhY3R1YWxseQorICAg
ICAgICAvLyBsb29zZXMgaXQsIHNvIG9ubHkgZGVhY3RpdmF0ZSB3aGVuIHRoZSBwcm94eSBsb29z
ZXMKKyAgICAgICAgLy8gZm9jdXMuCisgICAgICAgIGlmIChldmVudC0+eGFueS53aW5kb3cgIT0g
bV9mb2N1c1Byb3h5LT53aW5JZCgpKQorICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgc2Vu
ZFhFbWJlZE1lc3NhZ2UoY2xpZW50KCksIHgxMUluZm8oKS0+ZGlzcGxheSgpLCBYRU1CRURfRk9D
VVNfT1VUKTsKKyAgICAgICAgbV9hY3RpdmUgPSBmYWxzZTsKKyAgICAgICAgYnJlYWs7CisgICAg
Y2FzZSBMZWF2ZU5vdGlmeToKKyAgICAgICAgc2VuZFhFbWJlZE1lc3NhZ2UoY2xpZW50KCksIHgx
MUluZm8oKS0+ZGlzcGxheSgpLCBYRU1CRURfV0lORE9XX0RFQUNUSVZBVEUpOworICAgICAgICBp
ZiAoIW1fYWN0aXZlKQorICAgICAgICAgICAgZWNvcmVfeF93aW5kb3dfZm9jdXMoZWNvcmVfeF93
aW5kb3dfcGFyZW50X2dldCh3aW5JZCgpKSk7CisKKyAgICAgICAgWFVuZ3JhYkJ1dHRvbih4MTFJ
bmZvKCktPmRpc3BsYXkoKSwgNCwgQW55TW9kaWZpZXIsIGNsaWVudCgpKTsKKyAgICAgICAgWFVu
Z3JhYkJ1dHRvbih4MTFJbmZvKCktPmRpc3BsYXkoKSwgNSwgQW55TW9kaWZpZXIsIGNsaWVudCgp
KTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBFbnRlck5vdGlmeToKKyAgICAgICAgc2VuZFhF
bWJlZE1lc3NhZ2UoY2xpZW50KCksIHgxMUluZm8oKS0+ZGlzcGxheSgpLCBYRU1CRURfV0lORE9X
X0FDVElWQVRFKTsKKyAgICAgICAgbW92ZUlucHV0Rm9jdXNUb1Byb3h5KCk7CisKKyAgICAgICAg
WEdyYWJCdXR0b24oeDExSW5mbygpLT5kaXNwbGF5KCksIDQsIEFueU1vZGlmaWVyLCBjbGllbnQo
KSwgZmFsc2UsCisgICAgICAgICAgICAgICAgQnV0dG9uUHJlc3NNYXNrLCBHcmFiTW9kZUFzeW5j
LCBHcmFiTW9kZUFzeW5jLCAwTCwgMEwpOworICAgICAgICBYR3JhYkJ1dHRvbih4MTFJbmZvKCkt
PmRpc3BsYXkoKSwgNSwgQW55TW9kaWZpZXIsIGNsaWVudCgpLCBmYWxzZSwKKyAgICAgICAgICAg
ICAgICBCdXR0b25QcmVzc01hc2ssIEdyYWJNb2RlQXN5bmMsIEdyYWJNb2RlQXN5bmMsIDBMLCAw
TCk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgS2V5UHJlc3M6CisgICAgY2FzZSBLZXlSZWxl
YXNlOgorICAgICAgICBpZiAoY2xpZW50KCkgJiYgaXNBY3RpdmUoKSkKKyAgICAgICAgICAgIGV2
ZW50LT54a2V5LndpbmRvdyA9IGNsaWVudCgpOworICAgICAgICBlbHNlCisgICAgICAgICAgICBl
dmVudC0+eGtleS53aW5kb3cgPSBlY29yZV94X3dpbmRvd19wYXJlbnRfZ2V0KHdpbklkKCkpOwor
CisgICAgICAgIFhTZW5kRXZlbnQoeDExSW5mbygpLT5kaXNwbGF5KCksIGV2ZW50LT54a2V5Lndp
bmRvdywgZmFsc2UsIE5vRXZlbnRNYXNrLCBldmVudCk7CisgICAgICAgIFhTeW5jKHgxMUluZm8o
KS0+ZGlzcGxheSgpLCBmYWxzZSk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgQ3JlYXRlTm90
aWZ5OgorICAgICAgICBpZiAoY2xpZW50KCkpCisgICAgICAgICAgICByZWplY3QoZXZlbnQtPnhj
cmVhdGV3aW5kb3cud2luZG93KTsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgYWNjZXB0KGV2
ZW50LT54Y3JlYXRld2luZG93LndpbmRvdyk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgRGVz
dHJveU5vdGlmeToKKyAgICAgICAgLy8gY2xpZW50IGdvZXMgYXdheQorICAgICAgICBpZiAoZXZl
bnQtPnhkZXN0cm95d2luZG93LndpbmRvdyA9PSBjbGllbnQoKSkgeworICAgICAgICAgICAgc2V0
Q2xpZW50KDApOworICAgICAgICAgICAgc2V0RnJhbWVSZWN0KEludFJlY3QoLTEsIC0xLCAxLCAx
KSk7CisgICAgICAgIH0KKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBSZXBhcmVudE5vdGlmeToK
KyAgICAgICAgLy8gdGhlIGNsaWVudCByZXBhcmVudHMgaXRzZWxmIG91dCBvZiB1cywgd2FudHMg
dG8gbGVhdmUgdXMKKyAgICAgICAgaWYgKGV2ZW50LT54cmVwYXJlbnQud2luZG93ID09IGNsaWVu
dCgpICYmIGV2ZW50LT54cmVwYXJlbnQucGFyZW50ICE9IHdpbklkKCkpIHsKKyAgICAgICAgICAg
IHNldENsaWVudCgwKTsKKyAgICAgICAgICAgIHNldEZyYW1lUmVjdChJbnRSZWN0KC0xLCAtMSwg
MSwgMSkpOworICAgICAgICB9IGVsc2UgaWYgKGV2ZW50LT54cmVwYXJlbnQucGFyZW50ID09IHdp
bklkKCkpIHsgLy8gdGhlIGNsaWVudCByZXBhcmVudHMgaXRzZWxmIGludG8gdXMKKyAgICAgICAg
ICAgIGlmIChjbGllbnQoKSkKKyAgICAgICAgICAgICAgICByZWplY3QoZXZlbnQtPnhyZXBhcmVu
dC53aW5kb3cpOworICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgIGFjY2VwdChldmVu
dC0+eHJlcGFyZW50LndpbmRvdyk7CisgICAgICAgIH0KKyAgICAgICAgYnJlYWs7CisgICAgY2Fz
ZSBDbGllbnRNZXNzYWdlOgorICAgICAgICBpZiAoZXZlbnQtPnhjbGllbnQubWVzc2FnZV90eXBl
ICE9IEFUT00oX1hFTUJFRCkpCisgICAgICAgICAgICBicmVhazsKKworICAgICAgICAvLyBub3Qg
Zm9yIHVzLCBpZ25vcmUKKyAgICAgICAgaWYgKGV2ZW50LT54Y2xpZW50LndpbmRvdyAhPSB3aW5J
ZCgpKQorICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgc3dpdGNoIChldmVudC0+eGNsaWVu
dC5kYXRhLmxbMV0pIHsKKyAgICAgICAgY2FzZSBYRU1CRURfUkVRVUVTVF9GT0NVUzoKKyAgICAg
ICAgICAgIG1fcGx1Z2luVmlldy0+c2V0Rm9jdXModHJ1ZSk7CisgICAgICAgICAgICBzZW5kWEVt
YmVkTWVzc2FnZShjbGllbnQoKSwgeDExSW5mbygpLT5kaXNwbGF5KCksIFhFTUJFRF9GT0NVU19J
TiwgWEVNQkVEX0ZPQ1VTX0NVUlJFTlQpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNh
c2UgWEVNQkVEX0ZPQ1VTX05FWFQ6CisgICAgICAgICAgICAvLyBDbGllbnQgc2VuZHMgdGhpcyBl
dmVudCB3aGVuIGl0IHJlY2VpdmVkIGEgdGFiCisgICAgICAgICAgICAvLyBmb3J3YXJkIGFuZCB3
YXMgYXQgdGhlIGVuZCBvZiBpdHMgZm9jdXMgY2hhaW4uIElmCisgICAgICAgICAgICAvLyB3ZSBh
cmUgdGhlIG9ubHkgd2lkZ2V0IGluIHRoZSBmb2N1cyBjaGFpbiwgd2Ugc2VuZAorICAgICAgICAg
ICAgLy8gb3Vyc2VsdmVzIGEgRm9jdXNPdXQgZXZlbnQuCisgICAgICAgICAgICBicmVhazsKKyAg
ICAgICAgY2FzZSBYRU1CRURfRk9DVVNfUFJFVjoKKyAgICAgICAgICAgIC8vIENsaWVudCBzZW5k
cyB0aGlzIGV2ZW50IHdoZW4gaXQgcmVjZWl2ZWQgYSBiYWNrdGFiCisgICAgICAgICAgICAvLyBh
bmQgd2FzIGF0IHRoZSBzdGFydCBvZiBpdHMgZm9jdXMgY2hhaW4uIElmIHdlIGFyZQorICAgICAg
ICAgICAgLy8gdGhlIG9ubHkgd2lkZ2V0IGluIHRoZSBmb2N1cyBjaGFpbiwgd2Ugc2VuZAorICAg
ICAgICAgICAgLy8gb3Vyc2VsdmVzIGEgRm9jdXNPdXQgZXZlbnQuCisgICAgICAgICAgICBicmVh
azsKKyAgICAgICAgfQorICAgICAgICBicmVhazsKKyAgICB9CisgICAgcmV0dXJuIGZhbHNlOwor
fQorCit2b2lkIHNlbmRYRW1iZWRNZXNzYWdlKFdpbklkIHdpbmRvdywgRGlzcGxheSogZGlzcGxh
eSwgbG9uZyBtZXNzYWdlLCBsb25nIGRldGFpbCwgbG9uZyBkYXRhMSwgbG9uZyBkYXRhMikKK3sK
KyAgICBYRXZlbnQgZXY7CisgICAgbWVtc2V0KCZldiwgMCwgc2l6ZW9mKGV2KSk7CisgICAgZXYu
eGNsaWVudC50eXBlID0gQ2xpZW50TWVzc2FnZTsKKyAgICBldi54Y2xpZW50LndpbmRvdyA9IHdp
bmRvdzsKKyAgICBldi54Y2xpZW50Lm1lc3NhZ2VfdHlwZSA9IEFUT00oX1hFTUJFRF9JTkZPKTsK
KyAgICBldi54Y2xpZW50LmZvcm1hdCA9IDMyOworICAgIGV2LnhjbGllbnQuZGF0YS5sWzBdID0g
ZWNvcmVfeF9jdXJyZW50X3RpbWVfZ2V0KCk7CisgICAgZXYueGNsaWVudC5kYXRhLmxbMV0gPSBt
ZXNzYWdlOworICAgIGV2LnhjbGllbnQuZGF0YS5sWzJdID0gZGV0YWlsOworICAgIGV2LnhjbGll
bnQuZGF0YS5sWzNdID0gZGF0YTE7CisgICAgZXYueGNsaWVudC5kYXRhLmxbNF0gPSBkYXRhMjsK
KyAgICBYU2VuZEV2ZW50KGRpc3BsYXksIHdpbmRvdywgZmFsc2UsIE5vRXZlbnRNYXNrLCAmZXYp
OworICAgIFhTeW5jKGRpc3BsYXksIGZhbHNlKTsKK30KKwpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvcGx1Z2lucy9lZmwvWDExRW1iZWRDb250YWluZXIuaCBiL1NvdXJjZS9XZWJDb3JlL3Bs
dWdpbnMvZWZsL1gxMUVtYmVkQ29udGFpbmVyLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXgg
MDAwMDAwMC4uMDIxOTZiYwotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsdWdp
bnMvZWZsL1gxMUVtYmVkQ29udGFpbmVyLmgKQEAgLTAsMCArMSw3NSBAQAorLyoKKyAgICBDb3B5
cmlnaHQgKEMpIDIwMDkgSU5kVCAtIEluc3RpdHV0byBOb2tpYSBkZSBUZWNub2xvZ2lhCisgICAg
Q29weXJpZ2h0IChDKSAyMDA5LTIwMTAgUHJvRlVTSU9OIGVtYmVkZGVkIHN5c3RlbXMKKyAgICBD
b3B5cmlnaHQgKEMpIDIwMDktMjAxMCBTYW1zdW5nIEVsZWN0cm9uaWNzCisKKyAgICBUaGlzIGxp
YnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisg
ICAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQ
dWJsaWMKKyAgICBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3Vu
ZGF0aW9uOyBlaXRoZXIKKyAgICB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3Vy
IG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisKKyAgICBUaGlzIGxpYnJhcnkgaXMgZGlzdHJp
YnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAgICBidXQgV0lUSE9V
VCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICAg
IE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNl
ZSB0aGUgR05VCisgICAgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRl
dGFpbHMuCisKKyAgICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUg
TGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgICAgYWxvbmcgd2l0aCB0aGlzIGxpYnJh
cnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KKyAgICB0aGUg
RnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRo
IEZsb29yLAorICAgIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgorKi8KKworI2lmbmRlZiBY
MTFFbWJlZENvbnRhaW5lcl9oCisjZGVmaW5lIFgxMUVtYmVkQ29udGFpbmVyX2gKKworI2luY2x1
ZGUgIlBsdWdpblZpZXcuaCIKKyNpbmNsdWRlICJYMTFXaW5kb3cuaCIKKworI2luY2x1ZGUgPHd0
Zi9Pd25QdHIuaD4KKyNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+CisKK2NsYXNzIFgxMUVtYmVkQ29u
dGFpbmVyOworY2xhc3MgWDExV2luZG93OworCitjbGFzcyBYMTFFbWJlZENvbnRhaW5lciA6IHB1
YmxpYyBYMTFXaW5kb3cgeworcHVibGljOgorICAgIFgxMUVtYmVkQ29udGFpbmVyKEV2YXMqIGV2
YXMsIFdlYkNvcmU6OlBsdWdpblZpZXcqIHZpZXcpOworICAgIH5YMTFFbWJlZENvbnRhaW5lcigp
OworCisgICAgV2luSWQgcm9vdFdpbmRvdygpOworCisgICAgV2luSWQgY2xpZW50KCkgeyByZXR1
cm4gbV9jbGllbnQ7IH0KKyAgICB2b2lkIHNldENsaWVudChXaW5JZCBjbGllbnQpCisgICAgewor
ICAgICAgICBtX2NsaWVudCA9IGNsaWVudDsKKyAgICAgICAgaWYgKGNsaWVudCkKKyAgICAgICAg
ICAgIG1fY2xpZW50V2luZG93LnNldChYMTFXaW5kb3c6OmFkb3B0KGNsaWVudCkpOworICAgIH0K
KworICAgIHZvaWQgYWNjZXB0KFdpbklkIGNsaWVudCk7CisgICAgdm9pZCByZWplY3QoV2luSWQg
Y2xpZW50KTsKKworICAgIHZvaWQgbW92ZUlucHV0Rm9jdXNUb1Byb3h5KCk7CisgICAgYm9vbCB4
MTFFdmVudChYRXZlbnQqIGV2ZW50KTsKKworICAgIHZvaWQgc2V0RnJhbWVSZWN0KGNvbnN0IFdl
YkNvcmU6OkludFJlY3QmIHJlY3QpOworCisgICAgdm9pZCByZXNpemUoaW50IHdpZHRoLCBpbnQg
aGVpZ2h0KTsKKworICAgIHZvaWQgc2hvdygpOworICAgIHZvaWQgaGlkZSgpOworCisgICAgdm9p
ZCBzZXRGb2N1cygpOworICAgIGJvb2wgaGFzRm9jdXMoKTsKKyAgICBib29sIGlzQWN0aXZlKCk7
CisKK3ByaXZhdGU6CisgICAgYm9vbCBtX2FjdGl2ZTsKKyAgICBXaW5JZCBtX2NsaWVudDsKKwor
ICAgIFdlYkNvcmU6OlBsdWdpblZpZXcqIG1fcGx1Z2luVmlldzsKKyAgICBPd25QdHI8WDExV2lu
ZG93PiBtX2ZvY3VzUHJveHk7CisgICAgT3duUHRyPFgxMVdpbmRvdz4gbV9jbGllbnRXaW5kb3c7
Cit9OworCisjZW5kaWYgLy8gWDExRW1iZWRDb250YWluZXJfaApkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvcGx1Z2lucy9lZmwvWDExV2luZG93LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsdWdp
bnMvZWZsL1gxMVdpbmRvdy5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4u
MmFjZDI2MQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsdWdpbnMvZWZsL1gx
MVdpbmRvdy5jcHAKQEAgLTAsMCArMSwxODMgQEAKKy8qCisgICAgQ29weXJpZ2h0IChDKSAyMDA5
IElOZFQgLSBJbnN0aXR1dG8gTm9raWEgZGUgVGVjbm9sb2dpYQorICAgIENvcHlyaWdodCAoQykg
MjAwOS0yMDEwIFByb0ZVU0lPTiBlbWJlZGRlZCBzeXN0ZW1zCisgICAgQ29weXJpZ2h0IChDKSAy
MDA5LTIwMTAgU2Ftc3VuZyBFbGVjdHJvbmljcworCisgICAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUg
c29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICAgIG1vZGlmeSBpdCB1
bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgICAgTGlj
ZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVy
CisgICAgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBs
YXRlciB2ZXJzaW9uLgorCisgICAgVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBo
b3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZ
OyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAgICBNRVJDSEFOVEFCSUxJ
VFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICAg
IExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorCisgICAg
WW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJh
bCBQdWJsaWMgTGljZW5zZQorICAgIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZp
bGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCisgICAgdGhlIEZyZWUgU29mdHdhcmUg
Rm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKKyAgICBC
b3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKyovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNp
bmNsdWRlICJYMTFXaW5kb3cuaCIKKworI2luY2x1ZGUgPEVjb3JlX0V2YXMuaD4KKwordXNpbmcg
bmFtZXNwYWNlIFdlYkNvcmU7CisKK0VpbmFfQm9vbCBvbkVjb3JlWEV2ZW50KHZvaWQqIG9iamVj
dCwgaW50IHR5cGUsIHZvaWQqIGV2ZW50RGF0YSk7CisKK3ZvaWQgWDExV2luZG93Ojppbml0KFdp
bklkIHBhcmVudCwgSW50UmVjdCYgZ2VvbWV0cnkpCit7CisgICAgbV93aW5JZCA9IGVjb3JlX3hf
d2luZG93X25ldyhwYXJlbnQsIGdlb21ldHJ5LngoKSwgZ2VvbWV0cnkueSgpLAorICAgICAgICAg
ICAgZ2VvbWV0cnkud2lkdGgoKSwgZ2VvbWV0cnkuaGVpZ2h0KCkpOworICAgIG1fWEV2ZW50SGFu
ZGxlciA9IGVjb3JlX2V2ZW50X2hhbmRsZXJfYWRkKEVDT1JFX1hfRVZFTlRfQU5ZLCBvbkVjb3Jl
WEV2ZW50LCB0aGlzKTsKK30KKworWDExV2luZG93KiBYMTFXaW5kb3c6OmFkb3B0KFdpbklkIGlk
KQoreworICAgIFgxMVdpbmRvdyogd2luID0gbmV3IFgxMVdpbmRvdygpOworICAgIHdpbi0+bV93
aW5JZCA9IGlkOworICAgIHdpbi0+bV9YRXZlbnRIYW5kbGVyID0gZWNvcmVfZXZlbnRfaGFuZGxl
cl9hZGQoRUNPUkVfWF9FVkVOVF9BTlksIG9uRWNvcmVYRXZlbnQsIHdpbik7CisKKyAgICByZXR1
cm4gd2luOworfQorCitYMTFXaW5kb3c6OlgxMVdpbmRvdygpCisgICAgOiBtX3gxMUluZm8oMCkK
KyAgICAsIG1fdmlzaWJsZShmYWxzZSkKKyAgICAsIG1fcmVjdChJbnRSZWN0KCkpCisgICAgLCBt
X2V2ZW50RmlsdGVyKDApCisgICAgLCBtX2Fkb3B0ZWQodHJ1ZSkKK3sKK30KKworWDExV2luZG93
OjpYMTFXaW5kb3coRXZhcyAqZXZhcywgSW50UmVjdCBnZW9tZXRyeSkKKyAgICA6IG1feDExSW5m
bygwKQorICAgICwgbV92aXNpYmxlKGZhbHNlKQorICAgICwgbV9yZWN0KGdlb21ldHJ5KQorICAg
ICwgbV9ldmVudEZpbHRlcigwKQorICAgICwgbV9hZG9wdGVkKGZhbHNlKQoreworICAgIEVjb3Jl
X0V2YXMqIGVlID0gZWNvcmVfZXZhc19lY29yZV9ldmFzX2dldChldmFzKTsKKyAgICBXaW5JZCBw
YXJlbnQgPSBlY29yZV9ldmFzX3dpbmRvd19nZXQoZWUpOworICAgIGluaXQocGFyZW50LCBnZW9t
ZXRyeSk7Cit9CisKK1gxMVdpbmRvdzo6WDExV2luZG93KFdpbklkIHBhcmVudCwgSW50UmVjdCBn
ZW9tZXRyeSkKKyAgICA6IG1feDExSW5mbygwKQorICAgICwgbV92aXNpYmxlKGZhbHNlKQorICAg
ICwgbV9yZWN0KGdlb21ldHJ5KQorICAgICwgbV9ldmVudEZpbHRlcigwKQorICAgICwgbV9hZG9w
dGVkKGZhbHNlKQoreworICAgIGluaXQocGFyZW50LCBnZW9tZXRyeSk7Cit9CisKK1gxMVdpbmRv
dzo6flgxMVdpbmRvdygpCit7CisgICAgZWNvcmVfZXZlbnRfaGFuZGxlcl9kZWwobV9YRXZlbnRI
YW5kbGVyKTsKKworICAgIGRlbGV0ZSBtX3gxMUluZm87CisgICAgaWYgKCFtX2Fkb3B0ZWQpCisg
ICAgICAgIGVjb3JlX3hfd2luZG93X2ZyZWUobV93aW5JZCk7Cit9CisKK3ZvaWQgWDExV2luZG93
OjpzaG93KCkKK3sKKyAgICBpZiAobV92aXNpYmxlKQorICAgICAgICByZXR1cm47CisgICAgZWNv
cmVfeF93aW5kb3dfc2hvdyhtX3dpbklkKTsKKyAgICBtX3Zpc2libGUgPSB0cnVlOworfQorCit2
b2lkIFgxMVdpbmRvdzo6aGlkZSgpCit7CisgICAgaWYgKG1fdmlzaWJsZSkKKyAgICAgICAgcmV0
dXJuOworICAgIGVjb3JlX3hfd2luZG93X2hpZGUobV93aW5JZCk7CisgICAgbV92aXNpYmxlID0g
ZmFsc2U7Cit9CisKK3ZvaWQgWDExV2luZG93OjpzZXRWaXNpYmxlKGJvb2wgb24pCit7CisgICAg
aWYgKG9uKQorICAgICAgICBzaG93KCk7CisgICAgZWxzZQorICAgICAgICBoaWRlKCk7Cit9CisK
K3ZvaWQgWDExV2luZG93Ojptb3ZlKGludCB4LCBpbnQgeSkKK3sKKyAgICBJbnRQb2ludCBuZXdQ
b3MgPSBJbnRQb2ludCh4LCB5KTsKKyAgICBpZiAoZ2VvbWV0cnkoKS5sb2NhdGlvbigpID09IG5l
d1BvcykKKyAgICAgICAgcmV0dXJuOworCisgICAgZWNvcmVfeF93aW5kb3dfbW92ZSh3aW5JZCgp
LCB4LCB5KTsKKyAgICBtX3JlY3Quc2V0TG9jYXRpb24obmV3UG9zKTsKK30KKwordm9pZCBYMTFX
aW5kb3c6OnJlc2l6ZShpbnQgd2lkdGgsIGludCBoZWlnaHQpCit7CisgICAgSW50U2l6ZSBuZXdT
aXplID0gSW50U2l6ZSh3aWR0aCwgaGVpZ2h0KTsKKworICAgIGlmIChzaXplKCkgPT0gbmV3U2l6
ZSkKKyAgICAgICAgcmV0dXJuOworICAgIGVjb3JlX3hfd2luZG93X3Jlc2l6ZSh3aW5JZCgpLCB3
aWR0aCwgaGVpZ2h0KTsKKyAgICBtX3JlY3Quc2V0U2l6ZShuZXdTaXplKTsKK30KKwordm9pZCBY
MTFXaW5kb3c6OnNldEZyYW1lUmVjdChjb25zdCBJbnRSZWN0JiByZWN0KQoreworICAgIGlmIChn
ZW9tZXRyeSgpID09IHJlY3QpCisgICAgICAgIHJldHVybjsKKyAgICBlY29yZV94X3dpbmRvd19t
b3ZlX3Jlc2l6ZSh3aW5JZCgpLCByZWN0LngoKSwgcmVjdC55KCksIHJlY3Qud2lkdGgoKSwgcmVj
dC5oZWlnaHQoKSk7CisgICAgbV9yZWN0ID0gcmVjdDsKK30KKwordm9pZCBYMTFXaW5kb3c6OnVw
ZGF0ZShjb25zdCBJbnRSZWN0JiByZWN0KQoreworICAgIGVjb3JlX3hfd2luZG93X2FyZWFfZXhw
b3NlKHdpbklkKCksIHJlY3QueCgpLCByZWN0LnkoKSwgcmVjdC53aWR0aCgpLCByZWN0LmhlaWdo
dCgpKTsKK30KKwordm9pZCBYMTFXaW5kb3c6OnNldEZvY3VzKCkKK3sKKyAgICBlY29yZV94X3dp
bmRvd19mb2N1cyh3aW5JZCgpKTsKK30KKwordm9pZCBYMTFXaW5kb3c6Omluc3RhbGxFdmVudEZp
bHRlcihYMTFXaW5kb3cqIG9iamVjdCkKK3sKKyAgICBtX2V2ZW50RmlsdGVyID0gb2JqZWN0Owor
fQorCit2b2lkIFgxMVdpbmRvdzo6cHJvY2Vzc0V2ZW50KFhFdmVudCogeGV2ZW50KQoreworICAg
IGJvb2wgaGFuZGxlZCA9IGZhbHNlOworCisgICAgaWYgKG1fZXZlbnRGaWx0ZXIpCisgICAgICAg
IGhhbmRsZWQgPSBtX2V2ZW50RmlsdGVyLT54MTFFdmVudCh4ZXZlbnQpOworCisgICAgaWYgKGhh
bmRsZWQpCisgICAgICAgIHJldHVybjsKKworICAgIHgxMUV2ZW50KHhldmVudCk7Cit9CisKK2Jv
b2wgWDExV2luZG93Ojp4MTFFdmVudChYRXZlbnQqIHhldmVudCkKK3sKKyAgICByZXR1cm4gZmFs
c2U7Cit9CisKK0VpbmFfQm9vbCBvbkVjb3JlWEV2ZW50KHZvaWQqIG9iamVjdCwgaW50IHR5cGUs
IHZvaWQqIGV2ZW50RGF0YSkKK3sKKyAgICBYMTFXaW5kb3cqIHdpbiA9IHN0YXRpY19jYXN0PFgx
MVdpbmRvdyo+KG9iamVjdCk7CisKKyAgICBYRXZlbnQqIHhldmVudCA9IChYRXZlbnQqKSBldmVu
dERhdGE7CisKKyAgICBpZiAoeGV2ZW50LT50eXBlID4gMSAmJiB4ZXZlbnQtPnhhbnkud2luZG93
ID09IHdpbi0+d2luSWQoKSkKKyAgICAgICAgd2luLT5wcm9jZXNzRXZlbnQoeGV2ZW50KTsKKwor
ICAgIHJldHVybiBFQ09SRV9DQUxMQkFDS19SRU5FVzsKK30KKwpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvcGx1Z2lucy9lZmwvWDExV2luZG93LmggYi9Tb3VyY2UvV2ViQ29yZS9wbHVnaW5z
L2VmbC9YMTFXaW5kb3cuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41NmUy
NzM2Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvcGx1Z2lucy9lZmwvWDExV2lu
ZG93LmgKQEAgLTAsMCArMSwxMDUgQEAKKy8qCisgICAgQ29weXJpZ2h0IChDKSAyMDA5IElOZFQg
LSBJbnN0aXR1dG8gTm9raWEgZGUgVGVjbm9sb2dpYQorICAgIENvcHlyaWdodCAoQykgMjAwOS0y
MDEwIFByb0ZVU0lPTiBlbWJlZGRlZCBzeXN0ZW1zCisgICAgQ29weXJpZ2h0IChDKSAyMDA5LTIw
MTAgU2Ftc3VuZyBFbGVjdHJvbmljcworCisgICAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdh
cmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICAgIG1vZGlmeSBpdCB1bmRlciB0
aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgICAgTGljZW5zZSBh
cyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgICAg
dmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2
ZXJzaW9uLgorCisgICAgVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRo
YXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRo
b3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAgICBNRVJDSEFOVEFCSUxJVFkgb3Ig
RklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICAgIExpYnJh
cnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorCisgICAgWW91IHNo
b3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJs
aWMgTGljZW5zZQorICAgIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09Q
WUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCisgICAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRh
dGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKKyAgICBCb3N0b24s
IE1BIDAyMTEwLTEzMDEsIFVTQS4KKyovCisKKyNpZm5kZWYgWDExV2luZG93X2gKKyNkZWZpbmUg
WDExV2luZG93X2gKKworI2luY2x1ZGUgIkludFJlY3QuaCIKKyNpbmNsdWRlICJQbHVnaW5QYWNr
YWdlLmgiCisKKyNpbmNsdWRlIDxFY29yZS5oPgorI2luY2x1ZGUgPEVjb3JlX1guaD4KKyNpbmNs
dWRlIDxFdmFzLmg+CisKK3R5cGVkZWYgV2luZG93IFdpbklkOworCitjbGFzcyBYMTFJbmZvIHsK
K3B1YmxpYzoKKyAgICBEaXNwbGF5KiBkaXNwbGF5KCkgeyByZXR1cm4gKERpc3BsYXkqKSBlY29y
ZV94X2Rpc3BsYXlfZ2V0KCk7IH0KKyAgICBWaXN1YWwqIHZpc3VhbCgpIHsgcmV0dXJuIChWaXN1
YWwqKSBtX2F0dC52aXN1YWw7IH0KKyAgICB1bnNpZ25lZCBpbnQgZGVwdGgoKSB7IHJldHVybiBt
X2F0dC5kZXB0aDsgfQorICAgIENvbG9ybWFwIGNvbG9ybWFwKCkgeyByZXR1cm4gbV9hdHQuY29s
b3JtYXA7IH0KKyAgICB1bnNpZ25lZCBpbnQgeDExVGltZSgpIHsgcmV0dXJuIGVjb3JlX3hfY3Vy
cmVudF90aW1lX2dldCgpOyB9CisKK3ByaXZhdGU6CisgICAgWDExSW5mbyhXaW5JZCBvd25lcikK
KyAgICB7CisgICAgICAgIG1fb3duZXIgPSBvd25lcjsKKyAgICAgICAgZWNvcmVfeF93aW5kb3df
YXR0cmlidXRlc19nZXQob3duZXIsICZtX2F0dCk7CisgICAgICAgIG1fYXR0LmNvbG9ybWFwID0g
RGVmYXVsdENvbG9ybWFwKGRpc3BsYXkoKSwgRGVmYXVsdFNjcmVlbihkaXNwbGF5KCkpKTsKKyAg
ICB9CisgICAgV2luSWQgbV9vd25lcjsKKyAgICBFY29yZV9YX1dpbmRvd19BdHRyaWJ1dGVzIG1f
YXR0OworICAgIGZyaWVuZCBjbGFzcyBYMTFXaW5kb3c7Cit9OworCitjbGFzcyBYMTFXaW5kb3cg
eworcHVibGljOgorICAgIFgxMVdpbmRvdyhFdmFzICpldmFzLCBXZWJDb3JlOjpJbnRSZWN0IGdl
b21ldHJ5ID0gV2ViQ29yZTo6SW50UmVjdCgwLCAwLCAzMiwgMzIpKTsKKyAgICBYMTFXaW5kb3co
V2luSWQgcGFyZW50LCBXZWJDb3JlOjpJbnRSZWN0IGdlb21ldHJ5ID0gV2ViQ29yZTo6SW50UmVj
dCgwLCAwLCAzMiwgMzIpKTsKKyAgICB+WDExV2luZG93KCk7CisKKyAgICBzdGF0aWMgWDExV2lu
ZG93KiBhZG9wdChXaW5JZCBpZCk7CisKKyAgICBYMTFJbmZvKiB4MTFJbmZvKCkKKyAgICB7Cisg
ICAgICAgIGlmICghbV94MTFJbmZvKQorICAgICAgICAgICAgbV94MTFJbmZvID0gbmV3IFgxMUlu
Zm8obV93aW5JZCk7CisgICAgICAgIHJldHVybiBtX3gxMUluZm87CisgICAgfQorCisgICAgV2Vi
Q29yZTo6SW50U2l6ZSBzaXplKCkgeyByZXR1cm4gbV9yZWN0LnNpemUoKTsgfQorICAgIFdlYkNv
cmU6OkludFJlY3QgZ2VvbWV0cnkoKSB7IHJldHVybiBtX3JlY3Q7IH0KKworICAgIHZvaWQgaW5z
dGFsbEV2ZW50RmlsdGVyKFgxMVdpbmRvdyogb2JqZWN0KTsKKyAgICB2b2lkIHByb2Nlc3NFdmVu
dChYRXZlbnQqIHhldmVudCk7CisgICAgdmlydHVhbCBib29sIHgxMUV2ZW50KFhFdmVudCogZXZl
bnQpOworCisgICAgdmlydHVhbCB2b2lkIHNldEZyYW1lUmVjdChjb25zdCBXZWJDb3JlOjpJbnRS
ZWN0JiByZWN0KTsKKworICAgIHZpcnR1YWwgdm9pZCBtb3ZlKGludCB4LCBpbnQgeSk7CisgICAg
dmlydHVhbCB2b2lkIHJlc2l6ZShpbnQgd2lkdGgsIGludCBoZWlnaHQpOworCisgICAgdmlydHVh
bCB2b2lkIHVwZGF0ZShjb25zdCBXZWJDb3JlOjpJbnRSZWN0JiByZWN0KTsKKworICAgIHZpcnR1
YWwgdm9pZCBzaG93KCk7CisgICAgdmlydHVhbCB2b2lkIGhpZGUoKTsKKyAgICB2b2lkIHNldFZp
c2libGUoYm9vbCBvbik7CisgICAgdmlydHVhbCB2b2lkIHNldEZvY3VzKCk7CisKKyAgICBXaW5J
ZCB3aW5JZCgpIHsgcmV0dXJuIG1fd2luSWQ7IH0KKworcHJvdGVjdGVkOgorICAgIFgxMVdpbmRv
dygpOworICAgIHZvaWQgaW5pdChXaW5JZCBwYXJlbnQsIFdlYkNvcmU6OkludFJlY3QmIGdlb21l
dHJ5KTsKKyAgICB2b2lkIGFjY2VwdEV2ZW50VHlwZShpbnQgdHlwZSk7CisKKyAgICBXaW5JZCBt
X3dpbklkOworICAgIFgxMUluZm8qIG1feDExSW5mbzsKKyAgICBib29sIG1fdmlzaWJsZTsKKyAg
ICBXZWJDb3JlOjpJbnRSZWN0IG1fcmVjdDsKKyAgICBYMTFXaW5kb3cqIG1fZXZlbnRGaWx0ZXI7
CisgICAgRWNvcmVfRXZlbnRfSGFuZGxlciogbV9YRXZlbnRIYW5kbGVyOworICAgIGJvb2wgbV9h
ZG9wdGVkOworfTsKKworCisjZW5kaWYgLy8gWDExV2luZG93X2gKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJLaXQvZWZsL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJLaXQvZWZsL0NoYW5nZUxvZwppbmRl
eCBkNjE3MDQ4Li41ZjNhNjkwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L2VmbC9DaGFuZ2VM
b2cKKysrIGIvU291cmNlL1dlYktpdC9lZmwvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTIgQEAKKzIw
MTEtMDItMDQgIE1hcml1c3ogR3J6ZWdvcmN6eWsgIDxtYXJpdXN6LmdAc2Ftc3VuZy5jb20+CisK
KyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgQ3JlYXRpbmcg
UGx1Z2luVmlldyBpbiBld2tfZnJhbWVfcGx1Z2luX2NyZWF0ZSgpIGZ1bmN0aW9uCisKKyAgICAg
ICAgKiBld2svZXdrX2ZyYW1lLmNwcDoKKyAgICAgICAgKGV3a19mcmFtZV9wbHVnaW5fY3JlYXRl
KToKKwogMjAxMS0wMS0yOSAgRGFuIFdpbnNoaXAgIDxkYW53QGdub21lLm9yZz4KIAogICAgICAg
ICBSZXZpZXdlZCBieSBYYW4gTG9wZXouCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L2VmbC9l
d2svZXdrX2ZyYW1lLmNwcCBiL1NvdXJjZS9XZWJLaXQvZWZsL2V3ay9ld2tfZnJhbWUuY3BwCmlu
ZGV4IGYyNmQ0Y2YuLmM2ZDJmOWUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvZWZsL2V3ay9l
d2tfZnJhbWUuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvZWZsL2V3ay9ld2tfZnJhbWUuY3BwCkBA
IC0yMDMzLDUgKzIwMzMsMjQgQEAgdm9pZCBld2tfZnJhbWVfZm9yY2VfbGF5b3V0KEV2YXNfT2Jq
ZWN0KiBvKQogCiBXVEY6OlBhc3NSZWZQdHI8V2ViQ29yZTo6V2lkZ2V0PiBld2tfZnJhbWVfcGx1
Z2luX2NyZWF0ZShFdmFzX09iamVjdCogbywgY29uc3QgV2ViQ29yZTo6SW50U2l6ZSYgcGx1Z2lu
U2l6ZSwgV2ViQ29yZTo6SFRNTFBsdWdJbkVsZW1lbnQqIGVsZW1lbnQsIGNvbnN0IFdlYkNvcmU6
OktVUkwmIHVybCwgY29uc3QgV1RGOjpWZWN0b3I8V1RGOjpTdHJpbmc+JiBwYXJhbU5hbWVzLCBj
b25zdCBXVEY6OlZlY3RvcjxXVEY6OlN0cmluZz4mIHBhcmFtVmFsdWVzLCBjb25zdCBXVEY6OlN0
cmluZyYgbWltZVR5cGUsIGJvb2wgbG9hZE1hbnVhbGx5KQogeworI2lmIEVOQUJMRShORVRTQ0FQ
RV9QTFVHSU5fQVBJKQorICAgIERCRygibz0lcCwgc2l6ZT0lZHglZCwgZWxlbWVudD0lcCwgdXJs
PSVzLCBtaW1lVHlwZT0lcyIsCisgICAgICAgIG8sIHBsdWdpblNpemUud2lkdGgoKSwgcGx1Z2lu
U2l6ZS5oZWlnaHQoKSwgZWxlbWVudCwKKyAgICAgICAgdXJsLnByZXR0eVVSTCgpLnV0ZjgoKS5k
YXRhKCksIG1pbWVUeXBlLnV0ZjgoKS5kYXRhKCkpOworCisgICAgRVdLX0ZSQU1FX1NEX0dFVF9P
Ul9SRVRVUk4obywgc2QsIDApOworCisgICAgLy8gVE9ETzogZW1pdCBzaWduYWwgYW5kIGFzayB3
ZWJraXQgdXNlcnMgaWYgc29tZXRoaW5nIGVsc2Ugc2hvdWxkIGJlIGRvbmUuCisgICAgLy8gbGlr
ZSBjcmVhdGluZyBhbm90aGVyIHggd2luZG93IChzZWUgZ3RrLCBpdCBhbGxvd3MgdXNlcnMgdG8g
Y3JlYXRlCisgICAgLy8gR3RrUGx1Z2luV2lkZ2V0LgorCisgICAgV1RGOjpSZWZQdHI8V2ViQ29y
ZTo6UGx1Z2luVmlldz4gcGx1Z2luVmlldyA9IFdlYkNvcmU6OlBsdWdpblZpZXc6OmNyZWF0ZQor
ICAgICAgICAoc2QtPmZyYW1lLCBwbHVnaW5TaXplLCBlbGVtZW50LCB1cmwsIHBhcmFtTmFtZXMs
IHBhcmFtVmFsdWVzLAorICAgICAgICBtaW1lVHlwZSwgbG9hZE1hbnVhbGx5KTsKKworICAgIGlm
IChwbHVnaW5WaWV3LT5zdGF0dXMoKSA9PSBXZWJDb3JlOjpQbHVnaW5TdGF0dXNMb2FkZWRTdWNj
ZXNzZnVsbHkpCisgICAgICAgIHJldHVybiBwbHVnaW5WaWV3OworI2Vsc2UKICAgICByZXR1cm4g
MDsKKyNlbmRpZiAvLyAjaWYgRU5BQkxFKE5FVFNDQVBFX1BMVUdJTl9BUEkpCiB9Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>81214</attachid>
            <date>2011-02-04 07:09:11 -0800</date>
            <delta_ts>2011-02-04 07:10:05 -0800</delta_ts>
            <desc>EFL&apos;s plugin support</desc>
            <filename>eflplugin.patch</filename>
            <type>text/plain</type>
            <size>54540</size>
            <attacher name="Mariusz Grzegorczyk">mariusz.g</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cgYi9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvQ2hhbmdlTG9nCmluZGV4IGFjZmQwZTQuLjYyNmE0MGQgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKKysrIGIvU291cmNlL0phdmFTY3JpcHRD
b3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDExIEBACisyMDExLTAyLTA0ICBNYXJpdXN6IEdyemVn
b3JjenlrICA8bWFyaXVzei5nQHNhbXN1bmcuY29tPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5P
Qk9EWSAoT09QUyEpLgorCisgICAgICAgIFN1cHBvcnQgZm9yIGVmbCdzIHBsdWdpbiBwYXJ0CisK
KyAgICAgICAgKiB3dGYvUGxhdGZvcm0uaDoKKwogMjAxMS0wMS0zMCAgQ3NhYmEgT3N6dHJvZ29u
w6FjICA8b3NzeUB3ZWJraXQub3JnPgogCiAgICAgICAgIFVucmV2aWV3ZWQsIHJvbGxpbmcgb3V0
IHI3NzA5OCwgcjc3MDk5LCByNzcxMDAsIHI3NzEwOSwgYW5kCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvd3RmL1BsYXRmb3JtLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd3Rm
L1BsYXRmb3JtLmgKaW5kZXggMDdmNTdmMC4uNjRkY2MzZCAxMDA2NDQKLS0tIGEvU291cmNlL0ph
dmFTY3JpcHRDb3JlL3d0Zi9QbGF0Zm9ybS5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93
dGYvUGxhdGZvcm0uaApAQCAtMTEwMSw3ICsxMTAxLDcgQEAKICNkZWZpbmUgV0FSTl9VTlVTRURf
UkVUVVJOCiAjZW5kaWYKIAotI2lmICFFTkFCTEUoTkVUU0NBUEVfUExVR0lOX0FQSSkgfHwgKEVO
QUJMRShORVRTQ0FQRV9QTFVHSU5fQVBJKSAmJiAoKE9TKFVOSVgpICYmIChQTEFURk9STShRVCkg
fHwgUExBVEZPUk0oV1gpKSkgfHwgUExBVEZPUk0oR1RLKSkpCisjaWYgIUVOQUJMRShORVRTQ0FQ
RV9QTFVHSU5fQVBJKSB8fCAoRU5BQkxFKE5FVFNDQVBFX1BMVUdJTl9BUEkpICYmICgoT1MoVU5J
WCkgJiYgKFBMQVRGT1JNKFFUKSB8fCBQTEFURk9STShXWCkpKSB8fCBQTEFURk9STShHVEspIHx8
IFBMQVRGT1JNKEVGTCkpKQogI2RlZmluZSBFTkFCTEVfUExVR0lOX1BBQ0tBR0VfU0lNUExFX0hB
U0ggMQogI2VuZGlmCiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0NNYWtlTGlzdHNFZmwu
dHh0IGIvU291cmNlL1dlYkNvcmUvQ01ha2VMaXN0c0VmbC50eHQKaW5kZXggMmZmOGM0ZS4uMTlh
MTJmNSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ01ha2VMaXN0c0VmbC50eHQKKysrIGIv
U291cmNlL1dlYkNvcmUvQ01ha2VMaXN0c0VmbC50eHQKQEAgLTExLDYgKzExLDcgQEAgTElTVChB
UFBFTkQgV2ViQ29yZV9JTkNMVURFX0RJUkVDVE9SSUVTCiAgICIke1dFQkNPUkVfRElSfS9wbGF0
Zm9ybS9ncmFwaGljcy9lZmwiCiAgICIke1dFQkNPUkVfRElSfS9wYWdlL2VmbCIKICAgIiR7V0VC
Q09SRV9ESVJ9L2FjY2Vzc2liaWxpdHkvZWZsIgorICAiJHtXRUJDT1JFX0RJUn0vcGx1Z2lucy9l
ZmwiCiAgICIke1dFQktJVF9ESVJ9L2VmbC9XZWJDb3JlU3VwcG9ydCIKICAgIiR7V0VCS0lUX0RJ
Un0vZWZsL2V3ayIKICkKQEAgLTYxLDkgKzYyLDMxIEBAIExJU1QoQVBQRU5EIFdlYkNvcmVfU09V
UkNFUwogICBwbGF0Zm9ybS9ncmFwaGljcy9lZmwvSW50UmVjdEVmbC5jcHAKICAgcGxhdGZvcm0v
cG9zaXgvRmlsZVN5c3RlbVBPU0lYLmNwcAogICBwbGF0Zm9ybS90ZXh0L2VmbC9UZXh0QnJlYWtJ
dGVyYXRvckludGVybmFsSUNVRWZsLmNwcAotICBwbHVnaW5zL1BsdWdpbkRhdGFOb25lLmNwcAog
KQogCisKK0lGIChFTkFCTEVfTkVUU0NBUEVfUExVR0lOX0FQSSkKKyAgICBMSVNUKEFQUEVORCBX
ZWJDb3JlX1NPVVJDRVMKKyAgICBwbHVnaW5zL1BsdWdpbkRhdGFiYXNlLmNwcAorICAgIHBsdWdp
bnMvUGx1Z2luRGVidWcuY3BwCisgICAgcGx1Z2lucy9QbHVnaW5QYWNrYWdlLmNwcAorICAgIHBs
dWdpbnMvUGx1Z2luU3RyZWFtLmNwcAorICAgIHBsdWdpbnMvUGx1Z2luVmlldy5jcHAKKyAgICBw
bHVnaW5zL2VmbC9QbHVnaW5EYXRhRWZsLmNwcAorICAgIHBsdWdpbnMvZWZsL1BsdWdpblBhY2th
Z2VFZmwuY3BwCisgICAgcGx1Z2lucy9lZmwvUGx1Z2luVmlld0VmbC5jcHAKKyAgICBwbHVnaW5z
L2VmbC9YMTFFbWJlZENvbnRhaW5lci5jcHAKKyAgICBwbHVnaW5zL2VmbC9YMTFXaW5kb3cuY3Bw
CisgICAgKQorRUxTRSAoKQorICAgIExJU1QoQVBQRU5EIFdlYkNvcmVfU09VUkNFUworICAgIHBs
dWdpbnMvUGx1Z2luRGF0YU5vbmUuY3BwCisgICAgcGx1Z2lucy9QbHVnaW5QYWNrYWdlTm9uZS5j
cHAKKyAgICBwbHVnaW5zL1BsdWdpblZpZXdOb25lLmNwcAorICAgICkKK0VORElGICgpCisKKwog
SUYgKFdURl9QTEFURk9STV9DQUlSTykKICAgTElTVChBUFBFTkQgV2ViQ29yZV9JTkNMVURFX0RJ
UkVDVE9SSUVTCiAgICAgIiR7V0VCQ09SRV9ESVJ9L3BsYXRmb3JtL2dyYXBoaWNzL2NhaXJvIgpA
QCAtMTI2LDYgKzE0OSw3IEBAIElGIChXVEZfVVNFX1NPVVApCiAgIExJU1QoQVBQRU5EIFdlYkNv
cmVfU09VUkNFUwogICAgIHBsYXRmb3JtL25ldHdvcmsvc291cC9Db29raWVKYXJTb3VwLmNwcAog
ICAgIHBsYXRmb3JtL25ldHdvcmsvc291cC9HT3duUHRyU291cC5jcHAKKyAgICBwbGF0Zm9ybS9u
ZXR3b3JrL3NvdXAvUHJveHlTZXJ2ZXJTb3VwLmNwcAogICAgIHBsYXRmb3JtL25ldHdvcmsvc291
cC9SZXNvdXJjZUhhbmRsZVNvdXAuY3BwCiAgICAgcGxhdGZvcm0vbmV0d29yay9zb3VwL1Jlc291
cmNlUmVxdWVzdFNvdXAuY3BwCiAgICAgcGxhdGZvcm0vbmV0d29yay9zb3VwL1Jlc291cmNlUmVz
cG9uc2VTb3VwLmNwcApAQCAtMTUyLDYgKzE3Niw3IEBAIElGIChXVEZfVVNFX0NVUkwpCiAgICAg
cGxhdGZvcm0vbmV0d29yay9jdXJsL0Nvb2tpZUphckN1cmwuY3BwCiAgICAgcGxhdGZvcm0vbmV0
d29yay9jdXJsL0ROU0N1cmwuY3BwCiAgICAgcGxhdGZvcm0vbmV0d29yay9jdXJsL0Zvcm1EYXRh
U3RyZWFtQ3VybC5jcHAKKyAgICBwbGF0Zm9ybS9uZXR3b3JrL2N1cmwvUHJveHlTZXJ2ZXJDdXJs
LmNwcAogICAgIHBsYXRmb3JtL25ldHdvcmsvY3VybC9SZXNvdXJjZUhhbmRsZUN1cmwuY3BwCiAg
ICAgcGxhdGZvcm0vbmV0d29yay9jdXJsL1Jlc291cmNlSGFuZGxlTWFuYWdlci5jcHAKICAgICBw
bGF0Zm9ybS9uZXR3b3JrL2N1cmwvU29ja2V0U3RyZWFtSGFuZGxlQ3VybC5jcHAKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpp
bmRleCAwY2RiZmI3Li40YTFmMDUzIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VM
b2cKKysrIGIvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsOTMgQEAKKzIwMTEt
MDItMDQgIE1hcml1c3ogR3J6ZWdvcmN6eWsgIDxtYXJpdXN6LmdAc2Ftc3VuZy5jb20+CisKKyAg
ICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgQWRkZWQgbWlzc2lu
ZyBlZmwgcGx1Z2luJ3MgcGFydAorCisgICAgICAgIE5vIG5ldyB0ZXN0cy4gKE9PUFMhKQorCisg
ICAgICAgICogQ01ha2VMaXN0c0VmbC50eHQ6CisgICAgICAgICogcGx1Z2lucy9QbHVnaW5WaWV3
Lmg6CisgICAgICAgICogcGx1Z2lucy9lZmwvUGx1Z2luRGF0YUVmbC5jcHA6IEFkZGVkLgorICAg
ICAgICAoV2ViQ29yZTo6UGx1Z2luRGF0YTo6aW5pdFBsdWdpbnMpOgorICAgICAgICAoV2ViQ29y
ZTo6UGx1Z2luRGF0YTo6cmVmcmVzaCk6CisgICAgICAgICogcGx1Z2lucy9lZmwvUGx1Z2luUGFj
a2FnZUVmbC5jcHA6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6UGx1Z2luUGFja2FnZTo6ZmV0
Y2hJbmZvKToKKyAgICAgICAgKFdlYkNvcmU6OlBsdWdpblBhY2thZ2U6Ok5QVmVyc2lvbik6Cisg
ICAgICAgIChXZWJDb3JlOjpQbHVnaW5QYWNrYWdlOjpsb2FkKToKKyAgICAgICAgKiBwbHVnaW5z
L2VmbC9QbHVnaW5WaWV3RWZsLmNwcDogQWRkZWQuCisgICAgICAgIChXZWJDb3JlOjpQbHVnaW5W
aWV3OjpkaXNwYXRjaE5QRXZlbnQpOgorICAgICAgICAoV2ViQ29yZTo6UGx1Z2luVmlldzo6aGFs
dCk6CisgICAgICAgIChXZWJDb3JlOjpQbHVnaW5WaWV3OjpoYW5kbGVGb2N1c0luRXZlbnQpOgor
ICAgICAgICAoV2ViQ29yZTo6UGx1Z2luVmlldzo6aGFuZGxlRm9jdXNPdXRFdmVudCk6CisgICAg
ICAgIChXZWJDb3JlOjpQbHVnaW5WaWV3OjpyZXN0YXJ0KToKKyAgICAgICAgKFdlYkNvcmU6OlBs
dWdpblZpZXc6OmhhbmRsZUtleWJvYXJkRXZlbnQpOgorICAgICAgICAoV2ViQ29yZTo6UGx1Z2lu
Vmlldzo6aGFuZGxlTW91c2VFdmVudCk6CisgICAgICAgIChXZWJDb3JlOjpQbHVnaW5WaWV3Ojp1
cGRhdGVQbHVnaW5XaWRnZXQpOgorICAgICAgICAoV2ViQ29yZTo6UGx1Z2luVmlldzo6c2V0Rm9j
dXMpOgorICAgICAgICAoV2ViQ29yZTo6UGx1Z2luVmlldzo6c2hvdyk6CisgICAgICAgIChXZWJD
b3JlOjpQbHVnaW5WaWV3OjpoaWRlKToKKyAgICAgICAgKFdlYkNvcmU6OlBsdWdpblZpZXc6OnBh
aW50KToKKyAgICAgICAgKFdlYkNvcmU6OlBsdWdpblZpZXc6OnNldFBhcmVudCk6CisgICAgICAg
IChXZWJDb3JlOjpQbHVnaW5WaWV3OjpzZXROUFdpbmRvd1JlY3QpOgorICAgICAgICAoV2ViQ29y
ZTo6UGx1Z2luVmlldzo6c2V0TlBXaW5kb3dJZk5lZWRlZCk6CisgICAgICAgIChXZWJDb3JlOjpQ
bHVnaW5WaWV3OjpzZXRQYXJlbnRWaXNpYmxlKToKKyAgICAgICAgKFdlYkNvcmU6OlBsdWdpblZp
ZXc6OmhhbmRsZVBvc3RSZWFkRmlsZSk6CisgICAgICAgIChXZWJDb3JlOjpQbHVnaW5WaWV3Ojpw
bGF0Zm9ybUdldFZhbHVlU3RhdGljKToKKyAgICAgICAgKFdlYkNvcmU6OlBsdWdpblZpZXc6OnBs
YXRmb3JtR2V0VmFsdWUpOgorICAgICAgICAoV2ViQ29yZTo6UGx1Z2luVmlldzo6aW52YWxpZGF0
ZVJlY3QpOgorICAgICAgICAoV2ViQ29yZTo6UGx1Z2luVmlldzo6aW52YWxpZGF0ZVJlZ2lvbik6
CisgICAgICAgIChXZWJDb3JlOjpQbHVnaW5WaWV3Ojpmb3JjZVJlZHJhdyk6CisgICAgICAgIChX
ZWJDb3JlOjpQbHVnaW5WaWV3OjpwbGF0Zm9ybVN0YXJ0KToKKyAgICAgICAgKFdlYkNvcmU6OlBs
dWdpblZpZXc6OnBsYXRmb3JtRGVzdHJveSk6CisgICAgICAgICogcGx1Z2lucy9lZmwvWDExRW1i
ZWRDb250YWluZXIuY3BwOiBBZGRlZC4KKyAgICAgICAgKFgxMUVtYmVkQ29udGFpbmVyOjpYMTFF
bWJlZENvbnRhaW5lcik6CisgICAgICAgIChYMTFFbWJlZENvbnRhaW5lcjo6flgxMUVtYmVkQ29u
dGFpbmVyKToKKyAgICAgICAgKFgxMUVtYmVkQ29udGFpbmVyOjptb3ZlSW5wdXRGb2N1c1RvUHJv
eHkpOgorICAgICAgICAoWDExRW1iZWRDb250YWluZXI6OmFjY2VwdCk6CisgICAgICAgIChYMTFF
bWJlZENvbnRhaW5lcjo6cmVqZWN0KToKKyAgICAgICAgKFgxMUVtYmVkQ29udGFpbmVyOjpzaG93
KToKKyAgICAgICAgKFgxMUVtYmVkQ29udGFpbmVyOjpoaWRlKToKKyAgICAgICAgKFgxMUVtYmVk
Q29udGFpbmVyOjpyZXNpemUpOgorICAgICAgICAoWDExRW1iZWRDb250YWluZXI6OnNldEZyYW1l
UmVjdCk6CisgICAgICAgIChYMTFFbWJlZENvbnRhaW5lcjo6c2V0Rm9jdXMpOgorICAgICAgICAo
WDExRW1iZWRDb250YWluZXI6Omhhc0ZvY3VzKToKKyAgICAgICAgKFgxMUVtYmVkQ29udGFpbmVy
Ojppc0FjdGl2ZSk6CisgICAgICAgIChYMTFFbWJlZENvbnRhaW5lcjo6cm9vdFdpbmRvdyk6Cisg
ICAgICAgIChYMTFFbWJlZENvbnRhaW5lcjo6eDExRXZlbnQpOgorICAgICAgICAoc2VuZFhFbWJl
ZE1lc3NhZ2UpOgorICAgICAgICAqIHBsdWdpbnMvZWZsL1gxMUVtYmVkQ29udGFpbmVyLmg6IEFk
ZGVkLgorICAgICAgICAoWDExRW1iZWRDb250YWluZXI6OmNsaWVudCk6CisgICAgICAgIChYMTFF
bWJlZENvbnRhaW5lcjo6c2V0Q2xpZW50KToKKyAgICAgICAgKiBwbHVnaW5zL2VmbC9YMTFXaW5k
b3cuY3BwOiBBZGRlZC4KKyAgICAgICAgKFgxMVdpbmRvdzo6aW5pdCk6CisgICAgICAgIChYMTFX
aW5kb3c6OmFkb3B0KToKKyAgICAgICAgKFgxMVdpbmRvdzo6WDExV2luZG93KToKKyAgICAgICAg
KFgxMVdpbmRvdzo6flgxMVdpbmRvdyk6CisgICAgICAgIChYMTFXaW5kb3c6OnNob3cpOgorICAg
ICAgICAoWDExV2luZG93OjpoaWRlKToKKyAgICAgICAgKFgxMVdpbmRvdzo6c2V0VmlzaWJsZSk6
CisgICAgICAgIChYMTFXaW5kb3c6Om1vdmUpOgorICAgICAgICAoWDExV2luZG93OjpyZXNpemUp
OgorICAgICAgICAoWDExV2luZG93OjpzZXRGcmFtZVJlY3QpOgorICAgICAgICAoWDExV2luZG93
Ojp1cGRhdGUpOgorICAgICAgICAoWDExV2luZG93OjpzZXRGb2N1cyk6CisgICAgICAgIChYMTFX
aW5kb3c6Omluc3RhbGxFdmVudEZpbHRlcik6CisgICAgICAgIChYMTFXaW5kb3c6OnByb2Nlc3NF
dmVudCk6CisgICAgICAgIChYMTFXaW5kb3c6OngxMUV2ZW50KToKKyAgICAgICAgKG9uRWNvcmVY
RXZlbnQpOgorICAgICAgICAqIHBsdWdpbnMvZWZsL1gxMVdpbmRvdy5oOiBBZGRlZC4KKyAgICAg
ICAgKFgxMUluZm86OmRpc3BsYXkpOgorICAgICAgICAoWDExSW5mbzo6dmlzdWFsKToKKyAgICAg
ICAgKFgxMUluZm86OmRlcHRoKToKKyAgICAgICAgKFgxMUluZm86OmNvbG9ybWFwKToKKyAgICAg
ICAgKFgxMUluZm86OngxMVRpbWUpOgorICAgICAgICAoWDExSW5mbzo6WDExSW5mbyk6CisgICAg
ICAgIChYMTFXaW5kb3c6OngxMUluZm8pOgorICAgICAgICAoWDExV2luZG93OjpzaXplKToKKyAg
ICAgICAgKFgxMVdpbmRvdzo6Z2VvbWV0cnkpOgorICAgICAgICAoWDExV2luZG93Ojp3aW5JZCk6
CisKIDIwMTEtMDEtMzEgIEFudHRpIEtvaXZpc3RvICA8YW50dGlAYXBwbGUuY29tPgogCiAgICAg
ICAgIE5vdCByZXZpZXdlZC4KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsdWdpbnMvUGx1
Z2luVmlldy5oIGIvU291cmNlL1dlYkNvcmUvcGx1Z2lucy9QbHVnaW5WaWV3LmgKaW5kZXggOGY4
ZjEzZi4uYzgyMGYyOCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGx1Z2lucy9QbHVnaW5W
aWV3LmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGx1Z2lucy9QbHVnaW5WaWV3LmgKQEAgLTUxLDYg
KzUxLDkgQEAKICNpZiBPUyhXSU5ET1dTKSAmJiAoUExBVEZPUk0oUVQpIHx8IFBMQVRGT1JNKFdY
KSkKIHR5cGVkZWYgc3RydWN0IEhXTkRfXyogSFdORDsKIHR5cGVkZWYgSFdORCBQbGF0Zm9ybVBs
dWdpbldpZGdldDsKKyNlbGlmIFBMQVRGT1JNKEVGTCkKK2NsYXNzIFgxMUVtYmVkQ29udGFpbmVy
OwordHlwZWRlZiBYMTFFbWJlZENvbnRhaW5lciogUGxhdGZvcm1QbHVnaW5XaWRnZXQ7CiAjZWxz
ZQogdHlwZWRlZiBQbGF0Zm9ybVdpZGdldCBQbGF0Zm9ybVBsdWdpbldpZGdldDsKICNpZiBkZWZp
bmVkKFhQX01BQ09TWCkgJiYgUExBVEZPUk0oUVQpCkBAIC0zNzIsNyArMzc1LDcgQEAgbmFtZXNw
YWNlIFdlYkNvcmUgewogICAgICAgICBib29sIG1faGF2ZVVwZGF0ZWRQbHVnaW5XaWRnZXQ7CiAj
ZW5kaWYKIAotI2lmICgoUExBVEZPUk0oUVQpIHx8IFBMQVRGT1JNKFdYKSkgJiYgT1MoV0lORE9X
UykpIHx8IGRlZmluZWQoWFBfTUFDT1NYKQorI2lmICgoUExBVEZPUk0oUVQpIHx8IFBMQVRGT1JN
KFdYKSkgJiYgT1MoV0lORE9XUykpIHx8IGRlZmluZWQoWFBfTUFDT1NYKSB8fCBQTEFURk9STShF
RkwpCiAgICAgICAgIC8vIE9uIE1hYyBPU1ggYW5kIFF0L1dpbmRvd3MgdGhlIHBsdWdpbiBkb2Vz
IG5vdCBoYXZlIGl0cyBvd24gbmF0aXZlIHdpZGdldCwKICAgICAgICAgLy8gYnV0IGlzIHVzaW5n
IHRoZSBjb250YWluaW5nIHdpbmRvdyBhcyBpdHMgcmVmZXJlbmNlIGZvciBwb3NpdGlvbmluZy9w
YWludGluZy4KICAgICAgICAgUGxhdGZvcm1QbHVnaW5XaWRnZXQgbV93aW5kb3c7CmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9wbHVnaW5zL2VmbC9QbHVnaW5EYXRhRWZsLmNwcCBiL1NvdXJj
ZS9XZWJDb3JlL3BsdWdpbnMvZWZsL1BsdWdpbkRhdGFFZmwuY3BwCm5ldyBmaWxlIG1vZGUgMTAw
NjQ0CmluZGV4IDAwMDAwMDAuLjA0YmI5MDIKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9wbHVnaW5zL2VmbC9QbHVnaW5EYXRhRWZsLmNwcApAQCAtMCwwICsxLDY4IEBACisvKgor
ICAgIENvcHlyaWdodCAoQykgMjAwNiwgMjAwNyBBcHBsZSBJbmMuICBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgorICAgIENvcHlyaWdodCAoQykgMjAwOCBUcm9sbHRlY2ggQVNBCisgICAgQ29weXJpZ2h0
IChDKSAyMDA4IENvbGxhYm9yYSBMdGQuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgICAgQ29weXJp
Z2h0IChDKSAyMDA4IElOZFQgLSBJbnN0aXR1dG8gTm9raWEgZGUgVGVjbm9sb2dpYQorICAgIENv
cHlyaWdodCAoQykgMjAwOS0yMDEwIFByb0ZVU0lPTiBlbWJlZGRlZCBzeXN0ZW1zCisgICAgQ29w
eXJpZ2h0IChDKSAyMDA5LTIwMTAgU2Ftc3VuZyBFbGVjdHJvbmljcworCisgICAgVGhpcyBsaWJy
YXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICAg
IG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVi
bGljCisgICAgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRh
dGlvbjsgZWl0aGVyCisgICAgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBv
cHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorCisgICAgVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1
dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgICAgYnV0IFdJVEhPVVQg
QU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAgICBN
RVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUg
dGhlIEdOVQorICAgIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRh
aWxzLgorCisgICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExp
YnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICAgIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5
OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCisgICAgdGhlIEZy
ZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBG
bG9vciwKKyAgICBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKyovCisKKyNpbmNsdWRlICJj
b25maWcuaCIKKyNpbmNsdWRlICJQbHVnaW5EYXRhLmgiCisKKyNpbmNsdWRlICJQbHVnaW5EYXRh
YmFzZS5oIgorI2luY2x1ZGUgIlBsdWdpblBhY2thZ2UuaCIKKworbmFtZXNwYWNlIFdlYkNvcmUg
eworCit2b2lkIFBsdWdpbkRhdGE6OmluaXRQbHVnaW5zKGNvbnN0IFBhZ2UqKQoreworICAgIFBs
dWdpbkRhdGFiYXNlKiBkYiA9IFBsdWdpbkRhdGFiYXNlOjppbnN0YWxsZWRQbHVnaW5zKCk7Cisg
ICAgY29uc3QgVmVjdG9yPFBsdWdpblBhY2thZ2UqPiAmcGx1Z2lucyA9IGRiLT5wbHVnaW5zKCk7
CisKKyAgICBmb3IgKHVuc2lnbmVkIGludCBpID0gMDsgaSA8IHBsdWdpbnMuc2l6ZSgpOyArK2kp
IHsKKyAgICAgICAgUGx1Z2luSW5mbyBpbmZvOworICAgICAgICBQbHVnaW5QYWNrYWdlKiBwYWNr
YWdlID0gcGx1Z2luc1tpXTsKKworICAgICAgICBpbmZvLm5hbWUgPSBwYWNrYWdlLT5uYW1lKCk7
CisgICAgICAgIGluZm8uZmlsZSA9IHBhY2thZ2UtPmZpbGVOYW1lKCk7CisgICAgICAgIGluZm8u
ZGVzYyA9IHBhY2thZ2UtPmRlc2NyaXB0aW9uKCk7CisKKyAgICAgICAgY29uc3QgTUlNRVRvRGVz
Y3JpcHRpb25zTWFwJiBtaW1lVG9EZXNjcmlwdGlvbnMgPSBwYWNrYWdlLT5taW1lVG9EZXNjcmlw
dGlvbnMoKTsKKyAgICAgICAgTUlNRVRvRGVzY3JpcHRpb25zTWFwOjpjb25zdF9pdGVyYXRvciBl
bmQgPSBtaW1lVG9EZXNjcmlwdGlvbnMuZW5kKCk7CisgICAgICAgIGZvciAoTUlNRVRvRGVzY3Jp
cHRpb25zTWFwOjpjb25zdF9pdGVyYXRvciBpdCA9IG1pbWVUb0Rlc2NyaXB0aW9ucy5iZWdpbigp
OyBpdCAhPSBlbmQ7ICsraXQpIHsKKyAgICAgICAgICAgIE1pbWVDbGFzc0luZm8gbWltZTsKKyAg
ICAgICAgICAgIAorICAgICAgICAgICAgbWltZS50eXBlID0gaXQtPmZpcnN0OworICAgICAgICAg
ICAgbWltZS5kZXNjID0gaXQtPnNlY29uZDsKKworICAgICAgICAgICAgVmVjdG9yPFN0cmluZz4g
ZXh0ZW5zaW9ucyA9IHBhY2thZ2UtPm1pbWVUb0V4dGVuc2lvbnMoKS5nZXQobWltZS50eXBlKTsK
KyAgICAgICAgICAgIGluZm8ubWltZXMuYXBwZW5kKG1pbWUpOworICAgICAgICB9CisKKyAgICAg
ICAgbV9wbHVnaW5zLmFwcGVuZChpbmZvKTsKKyAgICB9Cit9CisKK3ZvaWQgUGx1Z2luRGF0YTo6
cmVmcmVzaCgpCit7CisgICAgUGx1Z2luRGF0YWJhc2UqIGRiID0gUGx1Z2luRGF0YWJhc2U6Omlu
c3RhbGxlZFBsdWdpbnMoKTsKKyAgICBkYi0+cmVmcmVzaCgpOworfQorCit9OwpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvcGx1Z2lucy9lZmwvUGx1Z2luUGFja2FnZUVmbC5jcHAgYi9Tb3Vy
Y2UvV2ViQ29yZS9wbHVnaW5zL2VmbC9QbHVnaW5QYWNrYWdlRWZsLmNwcApuZXcgZmlsZSBtb2Rl
IDEwMDY0NAppbmRleCAwMDAwMDAwLi5hMjQ2NzdjCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNl
L1dlYkNvcmUvcGx1Z2lucy9lZmwvUGx1Z2luUGFja2FnZUVmbC5jcHAKQEAgLTAsMCArMSwxNjgg
QEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDYsIDIwMDcgQXBwbGUgSW5jLiAgQWxsIHJpZ2h0
cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAwOCBDb2xsYWJvcmEgTHRkLiBBbGwgcmln
aHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDA4IE51YW50aSBMdGQuCisgKiBDb3B5
cmlnaHQgKEMpIDIwMDggSU5kVCAtIEluc3RpdHV0byBOb2tpYSBkZSBUZWNub2xvZ2lhCisgKiBD
b3B5cmlnaHQgKEMpIDIwMDktMjAxMCBQcm9GVVNJT04gZW1iZWRkZWQgc3lzdGVtcworICogQ29w
eXJpZ2h0IChDKSAyMDA5LTIwMTAgU2Ftc3VuZyBFbGVjdHJvbmljcworICoKKyAqIFJlZGlzdHJp
YnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91
dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxv
d2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNv
dXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAq
IDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJv
dmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9v
ciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAq
IFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQ09NUFVURVIsIElOQy4gYGBBUyBJ
UycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hB
TlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJ
U0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBDT01QVVRFUiwgSU5DLiBPUgorICog
Q09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5U
QUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRF
IEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9S
IEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkK
KyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwg
T1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJ
TiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFE
VklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRl
ICJjb25maWcuaCIKKyNpbmNsdWRlICJQbHVnaW5QYWNrYWdlLmgiCisKKyNpbmNsdWRlICJNSU1F
VHlwZVJlZ2lzdHJ5LmgiCisjaW5jbHVkZSAiTm90SW1wbGVtZW50ZWQuaCIKKyNpbmNsdWRlICJQ
bHVnaW5EYXRhYmFzZS5oIgorI2luY2x1ZGUgIlBsdWdpbkRlYnVnLmgiCisjaW5jbHVkZSAibnBy
dW50aW1lX2ltcGwuaCIKKworI2luY2x1ZGUgPEVpbmEuaD4KKyNpbmNsdWRlIDxkbGZjbi5oPgor
I2luY2x1ZGUgPHd0Zi90ZXh0L0NTdHJpbmcuaD4KKworbmFtZXNwYWNlIFdlYkNvcmUgeworCit0
eXBlZGVmIGNoYXIqICgqTlBQX0dldE1JTUVEZXNjcmlwdGlvblByb2NQdHIpKCk7CisKK2Jvb2wg
UGx1Z2luUGFja2FnZTo6ZmV0Y2hJbmZvKCkKK3sKKyAgICBjb25zdCBjaGFyICplcnJtc2c7CisK
KyAgICBpZiAoIWxvYWQoKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgTlBQX0dldFZh
bHVlUHJvY1B0ciBnZXRWYWx1ZSA9IDA7CisgICAgTlBQX0dldE1JTUVEZXNjcmlwdGlvblByb2NQ
dHIgZ2V0TUlNRURlc2NyaXB0aW9uID0gMDsKKworICAgIGdldFZhbHVlID0gKE5QUF9HZXRWYWx1
ZVByb2NQdHIpZGxzeW0obV9tb2R1bGUsICJOUF9HZXRWYWx1ZSIpOworICAgIGlmICgoZXJybXNn
ID0gZGxlcnJvcigpKSkgeworICAgICAgICBFSU5BX0xPR19FUlIoIkNvdWxkIG5vdCBnZXQgc3lt
Ym9sIE5QX0dldFZhbHVlOiAlcyIsIGVycm1zZyk7CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAg
ICB9CisKKyAgICBnZXRNSU1FRGVzY3JpcHRpb24gPSAoTlBQX0dldE1JTUVEZXNjcmlwdGlvblBy
b2NQdHIpZGxzeW0obV9tb2R1bGUsICJOUF9HZXRNSU1FRGVzY3JpcHRpb24iKTsKKyAgICBpZiAo
KGVycm1zZyA9IGRsZXJyb3IoKSkpIHsKKyAgICAgICAgRUlOQV9MT0dfRVJSKCJDb3VsZCBub3Qg
Z2V0IHN5bWJvbCBOUF9HZXRNSU1FRGVzY3JpcHRpb246ICVzIiwgZXJybXNnKTsKKyAgICAgICAg
cmV0dXJuIGZhbHNlOworICAgIH0KKworICAgIGNoYXIqIGJ1ZmZlciA9IDA7CisgICAgTlBFcnJv
ciBlcnIgPSBnZXRWYWx1ZSgwLCBOUFBWcGx1Z2luTmFtZVN0cmluZywgKHZvaWQqKSAmYnVmZmVy
KTsKKyAgICBpZiAoZXJyICE9IE5QRVJSX05PX0VSUk9SKQorICAgICAgICByZXR1cm4gZmFsc2U7
CisgICAgbV9uYW1lID0gYnVmZmVyOworCisgICAgYnVmZmVyID0gMDsKKyAgICBlcnIgPSBnZXRW
YWx1ZSgwLCBOUFBWcGx1Z2luRGVzY3JpcHRpb25TdHJpbmcsICh2b2lkKikgJmJ1ZmZlcik7Cisg
ICAgaWYgKGVyciAhPSBOUEVSUl9OT19FUlJPUikKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAg
IG1fZGVzY3JpcHRpb24gPSBidWZmZXI7CisgICAgZGV0ZXJtaW5lTW9kdWxlVmVyc2lvbkZyb21E
ZXNjcmlwdGlvbigpOworCisgICAgU3RyaW5nIGRlc2NyaXB0aW9uID0gZ2V0TUlNRURlc2NyaXB0
aW9uKCk7CisKKyAgICBWZWN0b3I8U3RyaW5nPiB0eXBlczsKKyAgICBkZXNjcmlwdGlvbi5zcGxp
dChVQ2hhcignOycpLCBmYWxzZSwgdHlwZXMpOworCisgICAgZm9yIChzaXplX3QgaSA9IDA7IGkg
PCB0eXBlcy5zaXplKCk7ICsraSkgeworICAgICAgICBWZWN0b3I8U3RyaW5nPiBtaW1lOworICAg
ICAgICB0eXBlc1tpXS5zcGxpdChVQ2hhcignOicpLCB0cnVlLCBtaW1lKTsKKworICAgICAgICBp
ZiAobWltZS5zaXplKCkgPiAwKSB7CisgICAgICAgICAgICBWZWN0b3I8U3RyaW5nPiBleHRzOwor
CisgICAgICAgICAgICBpZiAobWltZS5zaXplKCkgPiAxKQorICAgICAgICAgICAgICAgIG1pbWVb
MV0uc3BsaXQoVUNoYXIoJywnKSwgZmFsc2UsIGV4dHMpOworCisgICAgICAgICAgICBkZXRlcm1p
bmVRdWlya3MobWltZVswXSk7CisgICAgICAgICAgICBtX21pbWVUb0V4dGVuc2lvbnMuYWRkKG1p
bWVbMF0sIGV4dHMpOworCisgICAgICAgICAgICBpZiAobWltZS5zaXplKCkgPiAyKQorICAgICAg
ICAgICAgICAgIG1fbWltZVRvRGVzY3JpcHRpb25zLmFkZChtaW1lWzBdLCBtaW1lWzJdKTsKKyAg
ICAgICAgfQorICAgIH0KKworICAgIHJldHVybiB0cnVlOworfQorCit1aW50MTZfdCBQbHVnaW5Q
YWNrYWdlOjpOUFZlcnNpb24oKSBjb25zdAoreworICAgIHJldHVybiBOUFZFUlNfSEFTX1BMVUdJ
Tl9USFJFQURfQVNZTkNfQ0FMTDsKK30KKworYm9vbCBQbHVnaW5QYWNrYWdlOjpsb2FkKCkKK3sK
KyAgICBjaGFyKiBlcnJtc2c7CisKKyAgICBpZiAobV9pc0xvYWRlZCkgeworICAgICAgICBtX2xv
YWRDb3VudCsrOworICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CisKKyAgICBtX21vZHVsZSA9
IGRsb3BlbihtX3BhdGgudXRmOCgpLmRhdGEoKSwgUlRMRF9MQVpZIHwgUlRMRF9MT0NBTCk7Cisg
ICAgaWYgKChlcnJtc2cgPSBkbGVycm9yKCkpKSB7CisgICAgICAgIEVJTkFfTE9HX1dBUk4oIiVz
IG5vdCBsb2FkZWQ6ICVzIiwgbV9wYXRoLnV0ZjgoKS5kYXRhKCksIGVycm1zZyk7CisgICAgICAg
IHJldHVybiBmYWxzZTsKKyAgICB9CisKKyAgICBtX2lzTG9hZGVkID0gdHJ1ZTsKKworICAgIE5Q
X0luaXRpYWxpemVGdW5jUHRyIGluaXRpYWxpemU7CisgICAgTlBFcnJvciBlcnI7CisKKyAgICBp
bml0aWFsaXplID0gKE5QX0luaXRpYWxpemVGdW5jUHRyKWRsc3ltKG1fbW9kdWxlLCAiTlBfSW5p
dGlhbGl6ZSIpOworICAgIGlmICgoZXJybXNnID0gZGxlcnJvcigpKSkgeworICAgICAgICBFSU5B
X0xPR19FUlIoIkNvdWxkIG5vdCBnZXQgc3ltYm9sIE5QX0luaXRpYWxpemU6ICVzIiwgZXJybXNn
KTsKKyAgICAgICAgZ290byBhYm9ydDsKKyAgICB9CisKKyAgICBtX05QUF9TaHV0ZG93biA9IChO
UFBfU2h1dGRvd25Qcm9jUHRyKWRsc3ltKG1fbW9kdWxlLCAiTlBfU2h1dGRvd24iKTsKKyAgICBp
ZiAoKGVycm1zZyA9IGRsZXJyb3IoKSkpIHsKKyAgICAgICAgRUlOQV9MT0dfRVJSKCJDb3VsZCBu
b3QgZ2V0IHN5bWJvbCBOUF9TaHV0ZG93bjogJXMiLCBlcnJtc2cpOworICAgICAgICBnb3RvIGFi
b3J0OworICAgIH0KKworICAgIG1lbXNldCgmbV9wbHVnaW5GdW5jcywgMCwgc2l6ZW9mKG1fcGx1
Z2luRnVuY3MpKTsKKyAgICBtX3BsdWdpbkZ1bmNzLnNpemUgPSBzaXplb2YobV9wbHVnaW5GdW5j
cyk7CisKKyAgICBpbml0aWFsaXplQnJvd3NlckZ1bmNzKCk7CisKKyNpZiBkZWZpbmVkKFhQX1VO
SVgpCisgICAgZXJyID0gaW5pdGlhbGl6ZSgmbV9icm93c2VyRnVuY3MsICZtX3BsdWdpbkZ1bmNz
KTsKKyNlbHNlCisgICAgZXJyID0gaW5pdGlhbGl6ZSgmbV9icm93c2VyRnVuY3MpOworI2VuZGlm
CisgICAgaWYgKGVyciAhPSBOUEVSUl9OT19FUlJPUikKKyAgICAgICAgZ290byBhYm9ydDsKKwor
ICAgIG1fbG9hZENvdW50Kys7CisgICAgcmV0dXJuIHRydWU7CisKK2Fib3J0OgorICAgIEVJTkFf
TE9HX0RCRygiZmFpbGVkIHRvIGxvYWQgcGx1Z2luLCB1bmxvYWQgaXQgd2l0aG91dCBzaHV0dGlu
ZyBpdCBkb3duLiIpOworICAgIHVubG9hZFdpdGhvdXRTaHV0ZG93bigpOworICAgIHJldHVybiBm
YWxzZTsKK30KKworfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGx1Z2lucy9lZmwvUGx1
Z2luVmlld0VmbC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbHVnaW5zL2VmbC9QbHVnaW5WaWV3RWZs
LmNwcApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi5kZDc3NWE2Ci0tLSAvZGV2
L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvcGx1Z2lucy9lZmwvUGx1Z2luVmlld0VmbC5jcHAK
QEAgLTAsMCArMSw1MzYgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDYsIDIwMDcgQXBwbGUg
SW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAwOCBDb2xsYWJv
cmEgTHRkLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDA4IElOZFQg
LSBJbnN0aXR1dG8gTm9raWEgZGUgVGVjbm9sb2dpYQorICogQ29weXJpZ2h0IChDKSAyMDA5LTIw
MTAgUHJvRlVTSU9OIGVtYmVkZGVkIHN5c3RlbXMKKyAqIENvcHlyaWdodCAoQykgMjAwOS0yMDEw
IFNhbXN1bmcgRWxlY3Ryb25pY3MKKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNv
dXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwg
YXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICog
YXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFp
biB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMg
aW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHBy
b3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBS
T1ZJREVEIEJZIEFQUExFIENPTVBVVEVSLCBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBS
RVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
IFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVT
UyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZF
TlQgU0hBTEwgQVBQTEUgQ09NUFVURVIsIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFC
TEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhF
TVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsg
TE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJ
T04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdI
RVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJ
TkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhF
IFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJ
TElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVk
ZSAiUGx1Z2luVmlldy5oIgorCisjaW5jbHVkZSAiRG9jdW1lbnQuaCIKKyNpbmNsdWRlICJEb2N1
bWVudExvYWRlci5oIgorI2luY2x1ZGUgIkVsZW1lbnQuaCIKKyNpbmNsdWRlICJGcmFtZS5oIgor
I2luY2x1ZGUgIkZyYW1lTG9hZFJlcXVlc3QuaCIKKyNpbmNsdWRlICJGcmFtZUxvYWRlci5oIgor
I2luY2x1ZGUgIkZyYW1lVHJlZS5oIgorI2luY2x1ZGUgIkZyYW1lVmlldy5oIgorI2luY2x1ZGUg
IkdyYXBoaWNzQ29udGV4dC5oIgorI2luY2x1ZGUgIkhUTUxOYW1lcy5oIgorI2luY2x1ZGUgIkhU
TUxQbHVnSW5FbGVtZW50LmgiCisjaW5jbHVkZSAiSG9zdFdpbmRvdy5oIgorI2luY2x1ZGUgIklt
YWdlLmgiCisjaW5jbHVkZSAiSW50UmVjdC5oIgorI2luY2x1ZGUgIkpTRE9NQmluZGluZy5oIgor
I2luY2x1ZGUgIktleWJvYXJkRXZlbnQuaCIKKyNpbmNsdWRlICJNb3VzZUV2ZW50LmgiCisjaW5j
bHVkZSAiTm90SW1wbGVtZW50ZWQuaCIKKyNpbmNsdWRlICJQYWdlLmgiCisjaW5jbHVkZSAiUGxh
dGZvcm1Nb3VzZUV2ZW50LmgiCisjaW5jbHVkZSAiUGxhdGZvcm1XaGVlbEV2ZW50LmgiCisjaW5j
bHVkZSAiUGx1Z2luRGVidWcuaCIKKyNpbmNsdWRlICJQbHVnaW5QYWNrYWdlLmgiCisjaW5jbHVk
ZSAiUmVuZGVyTGF5ZXIuaCIKKyNpbmNsdWRlICJTY3JpcHRDb250cm9sbGVyLmgiCisjaW5jbHVk
ZSAiU2V0dGluZ3MuaCIKKyNpbmNsdWRlICJYMTFFbWJlZENvbnRhaW5lci5oIgorI2luY2x1ZGUg
IlgxMVdpbmRvdy5oIgorI2luY2x1ZGUgIm5wcnVudGltZV9pbXBsLmgiCisjaW5jbHVkZSAicnVu
dGltZS9KU0xvY2suaCIKKyNpbmNsdWRlICJydW50aW1lL0pTVmFsdWUuaCIKKyNpbmNsdWRlICJy
dW50aW1lX3Jvb3QuaCIKKworI2luY2x1ZGUgPEVjb3JlX0V2YXMuaD4KKyNpbmNsdWRlIDxFY29y
ZV9YLmg+CisjaW5jbHVkZSA8RXZhcy5oPgorCisjaW5jbHVkZSA8d3RmL1JlZkNvdW50ZWQuaD4K
KyNpbmNsdWRlIDx3dGYvUmVmUHRyLmg+CisKK3VzaW5nIEpTQzo6RXhlY1N0YXRlOwordXNpbmcg
SlNDOjpJbnRlcnByZXRlcjsKK3VzaW5nIEpTQzo6SlNMb2NrOwordXNpbmcgSlNDOjpKU09iamVj
dDsKK3VzaW5nIEpTQzo6VVN0cmluZzsKKwordXNpbmcgbmFtZXNwYWNlIHN0ZDsKK3VzaW5nIG5h
bWVzcGFjZSBXVEY7Cit1c2luZyBuYW1lc3BhY2UgV2ViQ29yZTsKKworbmFtZXNwYWNlIFdlYkNv
cmUgeworCit1c2luZyBuYW1lc3BhY2UgSFRNTE5hbWVzOworCisjaWYgRU5BQkxFKE5FVFNDQVBF
X1BMVUdJTl9BUEkpCitib29sIFBsdWdpblZpZXc6OmRpc3BhdGNoTlBFdmVudChOUEV2ZW50JiBl
dmVudCkKK3sKKyAgICBpZiAoIW1fcGx1Z2luLT5wbHVnaW5GdW5jcygpLT5ldmVudCkKKyAgICAg
ICAgcmV0dXJuIGZhbHNlOworCisgICAgUGx1Z2luVmlldzo6c2V0Q3VycmVudFBsdWdpblZpZXco
dGhpcyk7CisgICAgSlNDOjpKU0xvY2s6OkRyb3BBbGxMb2NrcyBkcm9wQWxsTG9ja3MoZmFsc2Up
OworICAgIHNldENhbGxpbmdQbHVnaW4odHJ1ZSk7CisKKyAgICBib29sIGFjY2VwdGVkID0gbV9w
bHVnaW4tPnBsdWdpbkZ1bmNzKCktPmV2ZW50KG1faW5zdGFuY2UsICZldmVudCk7CisKKyAgICBz
ZXRDYWxsaW5nUGx1Z2luKGZhbHNlKTsKKyAgICBQbHVnaW5WaWV3OjpzZXRDdXJyZW50UGx1Z2lu
VmlldygwKTsKKyAgICByZXR1cm4gYWNjZXB0ZWQ7Cit9CisjZW5kaWYKKwordm9pZCBQbHVnaW5W
aWV3OjpoYWx0KCkKK3sKKyAgICBub3RJbXBsZW1lbnRlZCgpOworfQorCisjaWYgZGVmaW5lZChY
UF9VTklYKSAmJiBFTkFCTEUoTkVUU0NBUEVfUExVR0lOX0FQSSkKK3ZvaWQgUGx1Z2luVmlldzo6
aGFuZGxlRm9jdXNJbkV2ZW50KCkKK3sKKyAgICBub3RJbXBsZW1lbnRlZCgpOworfQorCit2b2lk
IFBsdWdpblZpZXc6OmhhbmRsZUZvY3VzT3V0RXZlbnQoKQoreworICAgIG5vdEltcGxlbWVudGVk
KCk7Cit9CisjZW5kaWYKKwordm9pZCBQbHVnaW5WaWV3OjpyZXN0YXJ0KCkKK3sKKyAgICBub3RJ
bXBsZW1lbnRlZCgpOworfQorCit2b2lkIFBsdWdpblZpZXc6OmhhbmRsZUtleWJvYXJkRXZlbnQo
S2V5Ym9hcmRFdmVudCopCit7CisgICAgbm90SW1wbGVtZW50ZWQoKTsKK30KKwordm9pZCBQbHVn
aW5WaWV3OjpoYW5kbGVNb3VzZUV2ZW50KE1vdXNlRXZlbnQqIGV2ZW50KQoreworI2lmIEVOQUJM
RShORVRTQ0FQRV9QTFVHSU5fQVBJKQorICAgIE5QRXZlbnQgeEV2ZW50OworCisgICAgSW50UmVj
dCBwID0gc3RhdGljX2Nhc3Q8RnJhbWVWaWV3Kj4ocGFyZW50KCkpLT5jb250ZW50c1RvU2NyZWVu
KEludFJlY3QoMCwgMCwgZXZlbnQtPm9mZnNldFgoKSwgZXZlbnQtPm9mZnNldFkoKSkpOworICAg
IGlmIChldmVudC0+dHlwZSgpID09IGV2ZW50TmFtZXMoKS5tb3VzZW1vdmVFdmVudAorICAgICAg
ICAgICAgfHwgZXZlbnQtPnR5cGUoKSA9PSBldmVudE5hbWVzKCkubW91c2VvdXRFdmVudAorICAg
ICAgICAgICAgfHwgZXZlbnQtPnR5cGUoKSA9PSBldmVudE5hbWVzKCkubW91c2VvdmVyRXZlbnQp
IHsKKyAgICAgICAgeEV2ZW50LnR5cGUgPSBNb3Rpb25Ob3RpZnk7CisgICAgICAgIHhFdmVudC54
bW90aW9uLnggPSBwLndpZHRoKCk7CisgICAgICAgIHhFdmVudC54bW90aW9uLnkgPSBwLmhlaWdo
dCgpOworICAgIH0gZWxzZSBpZiAoZXZlbnQtPnR5cGUoKSA9PSBldmVudE5hbWVzKCkubW91c2Vk
b3duRXZlbnQpIHsKKyAgICAgICAgeEV2ZW50LnR5cGUgPSBCdXR0b25QcmVzczsKKyAgICAgICAg
eEV2ZW50LnhidXR0b24ueCA9IHAud2lkdGgoKTsKKyAgICAgICAgeEV2ZW50LnhidXR0b24ueSA9
IHAuaGVpZ2h0KCk7CisgICAgICAgIHhFdmVudC54YnV0dG9uLmJ1dHRvbiA9IGV2ZW50LT5idXR0
b24oKSArIDE7IC8vIERPTSBNb3VzZUV2ZW50IGNvdW50cyBmcm9tIDAsIGFuZCBYQnV0dG9uRXZl
bnQgZnJvbSAxCisgICAgfSBlbHNlIGlmIChldmVudC0+dHlwZSgpID09IGV2ZW50TmFtZXMoKS5t
b3VzZXVwRXZlbnQpIHsKKyAgICAgICAgeEV2ZW50LnR5cGUgPSBCdXR0b25SZWxlYXNlOworICAg
ICAgICB4RXZlbnQueGJ1dHRvbi54ID0gcC53aWR0aCgpOworICAgICAgICB4RXZlbnQueGJ1dHRv
bi55ID0gcC5oZWlnaHQoKTsKKyAgICAgICAgeEV2ZW50LnhidXR0b24uYnV0dG9uID0gZXZlbnQt
PmJ1dHRvbigpICsgMTsKKyAgICB9IGVsc2UKKyAgICAgICAgcmV0dXJuOworCisgICAgaWYgKGRp
c3BhdGNoTlBFdmVudCh4RXZlbnQpKQorICAgICAgICBldmVudC0+c2V0RGVmYXVsdEhhbmRsZWQo
KTsKKyNlbHNlCisgICAgbm90SW1wbGVtZW50ZWQoKTsKKyAgICByZXR1cm47CisjZW5kaWYKK30K
Kwordm9pZCBQbHVnaW5WaWV3Ojp1cGRhdGVQbHVnaW5XaWRnZXQoKQoreworICAgIGlmICghcGFy
ZW50KCkgfHwgIW1faXNXaW5kb3dlZCkKKyAgICAgICAgcmV0dXJuOworCisgICAgQVNTRVJUKHBh
cmVudCgpLT5pc0ZyYW1lVmlldygpKTsKKyAgICBGcmFtZVZpZXcqIGZyYW1lVmlldyA9IHN0YXRp
Y19jYXN0PEZyYW1lVmlldyo+KHBhcmVudCgpKTsKKworICAgIEludFJlY3Qgb2xkV2luZG93UmVj
dCA9IG1fd2luZG93UmVjdDsKKyAgICBJbnRSZWN0IG9sZENsaXBSZWN0ID0gbV9jbGlwUmVjdDsK
KworICAgIG1fd2luZG93UmVjdCA9IEludFJlY3QoZnJhbWVWaWV3LT5jb250ZW50c1RvU2NyZWVu
KEludFJlY3QoZnJhbWVSZWN0KCkubG9jYXRpb24oKSwgZnJhbWVSZWN0KCkuc2l6ZSgpKSkpOwor
CisgICAgbV9jbGlwUmVjdCA9IHdpbmRvd0NsaXBSZWN0KCk7CisgICAgbV9jbGlwUmVjdC5tb3Zl
KC1tX3dpbmRvd1JlY3QueCgpLCAtbV93aW5kb3dSZWN0LnkoKSk7CisKKyAgICBpZiAocGxhdGZv
cm1QbHVnaW5XaWRnZXQoKSkgeworICAgICAgICBFdmFzX0Nvb3JkIHgsIHk7CisgICAgICAgIGV2
YXNfb2JqZWN0X2dlb21ldHJ5X2dldChyb290KCktPmV2YXNPYmplY3QoKSwgJngsICZ5LCAwLCAw
KTsKKyAgICAgICAgSW50UmVjdCBjaGlsZFJlY3QgPSBtX3dpbmRvd1JlY3Q7CisgICAgICAgIGNo
aWxkUmVjdC5tb3ZlKHgsIHkpOworICAgICAgICBwbGF0Zm9ybVBsdWdpbldpZGdldCgpLT5zZXRG
cmFtZVJlY3QoY2hpbGRSZWN0KTsKKyAgICAgICAgcGxhdGZvcm1QbHVnaW5XaWRnZXQoKS0+dXBk
YXRlKG1fY2xpcFJlY3QpOworICAgIH0KK30KKwordm9pZCBQbHVnaW5WaWV3OjpzZXRGb2N1cyhi
b29sKQoreworICAgIGlmIChwbGF0Zm9ybVBsdWdpbldpZGdldCgpKQorICAgICAgICBwbGF0Zm9y
bVBsdWdpbldpZGdldCgpLT5zZXRGb2N1cygpOworCisgICAgbV9lbGVtZW50LT5kb2N1bWVudCgp
LT5zZXRGb2N1c2VkTm9kZShtX2VsZW1lbnQpOworCisgICAgV2lkZ2V0OjpzZXRGb2N1cyh0cnVl
KTsKK30KKwordm9pZCBQbHVnaW5WaWV3OjpzaG93KCkKK3sKKyAgICBzZXRTZWxmVmlzaWJsZSh0
cnVlKTsKKworICAgIGlmIChpc1BhcmVudFZpc2libGUoKSAmJiBwbGF0Zm9ybVBsdWdpbldpZGdl
dCgpKQorICAgICAgICBwbGF0Zm9ybVBsdWdpbldpZGdldCgpLT5zZXRWaXNpYmxlKHRydWUpOwor
CisgICAgV2lkZ2V0OjpzaG93KCk7Cit9CisKK3ZvaWQgUGx1Z2luVmlldzo6aGlkZSgpCit7Cisg
ICAgc2V0U2VsZlZpc2libGUoZmFsc2UpOworCisgICAgaWYgKGlzUGFyZW50VmlzaWJsZSgpICYm
IHBsYXRmb3JtUGx1Z2luV2lkZ2V0KCkpCisgICAgICAgIHBsYXRmb3JtUGx1Z2luV2lkZ2V0KCkt
PnNldFZpc2libGUoZmFsc2UpOworCisgICAgV2lkZ2V0OjpoaWRlKCk7Cit9CisKK3ZvaWQgUGx1
Z2luVmlldzo6cGFpbnQoR3JhcGhpY3NDb250ZXh0KiBjb250ZXh0LCBjb25zdCBJbnRSZWN0JiBy
ZWN0KQoreworICAgIEludFJlY3QgZnJSZWN0ID0gZnJhbWVSZWN0KCk7CisKKyAgICBpZiAoIW1f
aXNTdGFydGVkKSB7CisgICAgICAgIHBhaW50TWlzc2luZ1BsdWdpbkljb24oY29udGV4dCwgcmVj
dCk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBpZiAoY29udGV4dC0+cGFpbnRpbmdE
aXNhYmxlZCgpKQorICAgICAgICByZXR1cm47CisKKyAgICBzZXROUFdpbmRvd0lmTmVlZGVkKCk7
CisKKyAgICBpZiAobV9pc1dpbmRvd2VkIHx8IGNvbnRleHQtPnBhaW50aW5nRGlzYWJsZWQoKSkK
KyAgICAgICAgcmV0dXJuOworfQorCit2b2lkIFBsdWdpblZpZXc6OnNldFBhcmVudChTY3JvbGxW
aWV3KiBwYXJlbnQpCit7CisgICAgV2lkZ2V0OjpzZXRQYXJlbnQocGFyZW50KTsKKworICAgIGlm
IChwYXJlbnQpCisgICAgICAgIGluaXQoKTsKKyAgICBlbHNlIHsKKyAgICAgICAgaWYgKCFwbGF0
Zm9ybVBsdWdpbldpZGdldCgpKQorICAgICAgICAgICAgcmV0dXJuOworICAgIH0KK30KKwordm9p
ZCBQbHVnaW5WaWV3OjpzZXROUFdpbmRvd1JlY3QoY29uc3QgSW50UmVjdCYgcmVjdCkKK3sKKyNp
ZiBFTkFCTEUoTkVUU0NBUEVfUExVR0lOX0FQSSkKKyAgICBpZiAoIW1faXNTdGFydGVkIHx8ICFw
YXJlbnQoKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgSW50UG9pbnQgcCA9IHN0YXRpY19jYXN0
PEZyYW1lVmlldyo+KHBhcmVudCgpKS0+Y29udGVudHNUb1dpbmRvdyhyZWN0LmxvY2F0aW9uKCkp
OworICAgIG1fbnBXaW5kb3cueCA9IHAueCgpOworICAgIG1fbnBXaW5kb3cueSA9IHAueSgpOwor
CisgICAgbV9ucFdpbmRvdy53aWR0aCA9IHJlY3Qud2lkdGgoKTsKKyAgICBtX25wV2luZG93Lmhl
aWdodCA9IHJlY3QuaGVpZ2h0KCk7CisKKyAgICBtX25wV2luZG93LmNsaXBSZWN0LmxlZnQgPSAw
OworICAgIG1fbnBXaW5kb3cuY2xpcFJlY3QudG9wID0gMDsKKyAgICBtX25wV2luZG93LmNsaXBS
ZWN0LnJpZ2h0ID0gcmVjdC53aWR0aCgpOworICAgIG1fbnBXaW5kb3cuY2xpcFJlY3QuYm90dG9t
ID0gcmVjdC5oZWlnaHQoKTsKKworICAgIGlmIChtX25wV2luZG93LnggPCAwIHx8IG1fbnBXaW5k
b3cueSA8IDAKKyAgICAgICAgfHwgbV9ucFdpbmRvdy53aWR0aCA8PSAwIHx8IG1fbnBXaW5kb3cu
aGVpZ2h0IDw9IDApCisgICAgICAgIHJldHVybjsKKworICAgIGlmIChtX3BsdWdpbi0+cGx1Z2lu
RnVuY3MoKS0+c2V0d2luZG93KSB7CisgICAgICAgIFBsdWdpblZpZXc6OnNldEN1cnJlbnRQbHVn
aW5WaWV3KHRoaXMpOworICAgICAgICBKU0M6OkpTTG9jazo6RHJvcEFsbExvY2tzIGRyb3BBbGxM
b2NrcyhmYWxzZSk7CisgICAgICAgIHNldENhbGxpbmdQbHVnaW4odHJ1ZSk7CisgICAgICAgIG1f
cGx1Z2luLT5wbHVnaW5GdW5jcygpLT5zZXR3aW5kb3cobV9pbnN0YW5jZSwgJm1fbnBXaW5kb3cp
OworICAgICAgICBzZXRDYWxsaW5nUGx1Z2luKGZhbHNlKTsKKyAgICAgICAgUGx1Z2luVmlldzo6
c2V0Q3VycmVudFBsdWdpblZpZXcoMCk7CisKKyAgICAgICAgaWYgKCFtX2lzV2luZG93ZWQpCisg
ICAgICAgICAgICByZXR1cm47CisKKyAgICAgICAgQVNTRVJUKHBsYXRmb3JtUGx1Z2luV2lkZ2V0
KCkpOworICAgIH0KKyNlbHNlCisgICAgbm90SW1wbGVtZW50ZWQoKTsKKyAgICByZXR1cm47Cisj
ZW5kaWYKK30KKwordm9pZCBQbHVnaW5WaWV3OjpzZXROUFdpbmRvd0lmTmVlZGVkKCkKK3sKK30K
K3ZvaWQgUGx1Z2luVmlldzo6c2V0UGFyZW50VmlzaWJsZShib29sIHZpc2libGUpCit7CisgICAg
aWYgKGlzUGFyZW50VmlzaWJsZSgpID09IHZpc2libGUpCisgICAgICAgIHJldHVybjsKKworICAg
IFdpZGdldDo6c2V0UGFyZW50VmlzaWJsZSh2aXNpYmxlKTsKKworICAgIGlmIChpc1NlbGZWaXNp
YmxlKCkgJiYgcGxhdGZvcm1QbHVnaW5XaWRnZXQoKSkKKyAgICAgICAgcGxhdGZvcm1QbHVnaW5X
aWRnZXQoKS0+c2V0VmlzaWJsZSh2aXNpYmxlKTsKK30KKworI2lmIEVOQUJMRShORVRTQ0FQRV9Q
TFVHSU5fQVBJKQorTlBFcnJvciBQbHVnaW5WaWV3OjpoYW5kbGVQb3N0UmVhZEZpbGUoVmVjdG9y
PGNoYXI+JiBidWZmZXIsIHVpbnQzMl90IGxlbiwgY29uc3QgY2hhciogYnVmKQoreworICAgIFN0
cmluZyBmaWxlbmFtZShidWYsIGxlbik7CisKKyAgICBpZiAoZmlsZW5hbWUuc3RhcnRzV2l0aCgi
ZmlsZTovLy8iKSkKKyAgICAgICAgZmlsZW5hbWUgPSBmaWxlbmFtZS5zdWJzdHJpbmcoOCk7CisK
KyAgICBpZiAoIWZpbGVFeGlzdHMoZmlsZW5hbWUpKQorICAgICAgICByZXR1cm4gTlBFUlJfRklM
RV9OT1RfRk9VTkQ7CisKKyAgICBGSUxFKiBmaWxlSGFuZGxlID0gZm9wZW4oZmlsZW5hbWUudXRm
OCgpLmRhdGEoKSwgInIiKTsKKworICAgIGlmICghZmlsZUhhbmRsZSkKKyAgICAgICAgcmV0dXJu
IE5QRVJSX0ZJTEVfTk9UX0ZPVU5EOworCisgICAgaW50IGJ5dGVzUmVhZCA9IGZyZWFkKGJ1ZmZl
ci5kYXRhKCksIDEsIDAsIGZpbGVIYW5kbGUpOworCisgICAgZmNsb3NlKGZpbGVIYW5kbGUpOwor
CisgICAgaWYgKGJ5dGVzUmVhZCA8PSAwKQorICAgICAgICByZXR1cm4gTlBFUlJfRklMRV9OT1Rf
Rk9VTkQ7CisKKyAgICByZXR1cm4gTlBFUlJfTk9fRVJST1I7Cit9CisjZW5kaWYKKworI2lmIEVO
QUJMRShORVRTQ0FQRV9QTFVHSU5fQVBJKQorYm9vbCBQbHVnaW5WaWV3OjpwbGF0Zm9ybUdldFZh
bHVlU3RhdGljKE5QTlZhcmlhYmxlIHZhcmlhYmxlLCB2b2lkKiB2YWx1ZSwgTlBFcnJvciogcmVz
dWx0KQoreworICAgIHN3aXRjaCAodmFyaWFibGUpIHsKKyAgICBjYXNlIE5QTlZUb29sa2l0Ogor
ICAgICAgICAqc3RhdGljX2Nhc3Q8dWludDMyX3QqPih2YWx1ZSkgPSAwOworICAgICAgICAqcmVz
dWx0ID0gTlBFUlJfTk9fRVJST1I7CisgICAgICAgIHJldHVybiB0cnVlOworCisgICAgY2FzZSBO
UE5WU3VwcG9ydHNYRW1iZWRCb29sOgorICAgICAgICAqc3RhdGljX2Nhc3Q8TlBCb29sKj4odmFs
dWUpID0gdHJ1ZTsKKyAgICAgICAgKnJlc3VsdCA9IE5QRVJSX05PX0VSUk9SOworICAgICAgICBy
ZXR1cm4gdHJ1ZTsKKworICAgIGNhc2UgTlBOVmphdmFzY3JpcHRFbmFibGVkQm9vbDoKKyAgICAg
ICAgKnN0YXRpY19jYXN0PE5QQm9vbCo+KHZhbHVlKSA9IHRydWU7CisgICAgICAgICpyZXN1bHQg
PSBOUEVSUl9OT19FUlJPUjsKKyAgICAgICAgcmV0dXJuIHRydWU7CisKKyAgICBjYXNlIE5QTlZT
dXBwb3J0c1dpbmRvd2xlc3M6CisgICAgICAgICpzdGF0aWNfY2FzdDxOUEJvb2wqPih2YWx1ZSkg
PSBmYWxzZTsKKyAgICAgICAgKnJlc3VsdCA9IE5QRVJSX05PX0VSUk9SOworICAgICAgICByZXR1
cm4gdHJ1ZTsKKworICAgIGRlZmF1bHQ6CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9Cit9
CisKK2Jvb2wgUGx1Z2luVmlldzo6cGxhdGZvcm1HZXRWYWx1ZShOUE5WYXJpYWJsZSB2YXJpYWJs
ZSwgdm9pZCogdmFsdWUsIE5QRXJyb3IqIHJlc3VsdCkKK3sKKyAgICBpZiAoIXZhbHVlIHx8ICFy
ZXN1bHQpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIHN3aXRjaCAodmFyaWFibGUpIHsK
KyAgICBjYXNlIE5QTlZ4RGlzcGxheToKKyAgICAgICAgaWYgKHBsYXRmb3JtUGx1Z2luV2lkZ2V0
KCkpCisgICAgICAgICAgICAqKHZvaWQgKiopdmFsdWUgPSBwbGF0Zm9ybVBsdWdpbldpZGdldCgp
LT54MTFJbmZvKCktPmRpc3BsYXkoKTsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgKih2b2lk
ICoqKXZhbHVlID0gKERpc3BsYXkqKSBlY29yZV94X2Rpc3BsYXlfZ2V0KCk7CisgICAgICAgICpy
ZXN1bHQgPSBOUEVSUl9OT19FUlJPUjsKKyAgICAgICAgcmV0dXJuIHRydWU7CisKKyAgICBjYXNl
IE5QTlZ4dEFwcENvbnRleHQ6CisgICAgICAgICpyZXN1bHQgPSBOUEVSUl9HRU5FUklDX0VSUk9S
OworICAgICAgICByZXR1cm4gdHJ1ZTsKKworI2lmIEVOQUJMRShORVRTQ0FQRV9QTFVHSU5fQVBJ
KQorICAgIGNhc2UgTlBOVldpbmRvd05QT2JqZWN0OiB7CisgICAgICAgIGlmIChtX2lzSmF2YVNj
cmlwdFBhdXNlZCkgeworICAgICAgICAgICAgKnJlc3VsdCA9IE5QRVJSX0dFTkVSSUNfRVJST1I7
CisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgfQorCisgICAgICAgIE5QT2JqZWN0
KiB3aW5kb3dTY3JpcHRPYmplY3QgPSBtX3BhcmVudEZyYW1lLT5zY3JpcHQoKS0+d2luZG93U2Ny
aXB0TlBPYmplY3QoKTsKKworICAgICAgICAvLyBSZXR1cm4gdmFsdWUgaXMgZXhwZWN0ZWQgdG8g
YmUgcmV0YWluZWQsIGFzIGRlc2NyaWJlZCBoZXJlOiA8aHR0cDovL3d3dy5tb3ppbGxhLm9yZy9w
cm9qZWN0cy9wbHVnaW4vbnBydW50aW1lLmh0bWw+CisgICAgICAgIGlmICh3aW5kb3dTY3JpcHRP
YmplY3QpCisgICAgICAgICAgICBfTlBOX1JldGFpbk9iamVjdCh3aW5kb3dTY3JpcHRPYmplY3Qp
OworCisgICAgICAgIHZvaWQqKiB2ID0gKHZvaWQqKil2YWx1ZTsKKyAgICAgICAgKnYgPSB3aW5k
b3dTY3JpcHRPYmplY3Q7CisKKyAgICAgICAgKnJlc3VsdCA9IE5QRVJSX05PX0VSUk9SOworICAg
ICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CisKKyAgICBjYXNlIE5QTlZQbHVnaW5FbGVtZW50TlBP
YmplY3Q6IHsKKyAgICAgICAgaWYgKG1faXNKYXZhU2NyaXB0UGF1c2VkKSB7CisgICAgICAgICAg
ICAqcmVzdWx0ID0gTlBFUlJfR0VORVJJQ19FUlJPUjsKKyAgICAgICAgICAgIHJldHVybiB0cnVl
OworICAgICAgICB9CisKKyAgICAgICAgTlBPYmplY3QqIHBsdWdpblNjcmlwdE9iamVjdCA9IDA7
CisKKyAgICAgICAgaWYgKG1fZWxlbWVudC0+aGFzVGFnTmFtZShhcHBsZXRUYWcpIHx8IG1fZWxl
bWVudC0+aGFzVGFnTmFtZShlbWJlZFRhZykgfHwgbV9lbGVtZW50LT5oYXNUYWdOYW1lKG9iamVj
dFRhZykpCisgICAgICAgICAgICBwbHVnaW5TY3JpcHRPYmplY3QgPSBzdGF0aWNfY2FzdDxIVE1M
UGx1Z0luRWxlbWVudCo+KG1fZWxlbWVudCktPmdldE5QT2JqZWN0KCk7CisKKyAgICAgICAgLy8g
UmV0dXJuIHZhbHVlIGlzIGV4cGVjdGVkIHRvIGJlIHJldGFpbmVkLCBhcyBkZXNjcmliZWQgaGVy
ZTogPGh0dHA6Ly93d3cubW96aWxsYS5vcmcvcHJvamVjdHMvcGx1Z2luL25wcnVudGltZS5odG1s
PgorICAgICAgICBpZiAocGx1Z2luU2NyaXB0T2JqZWN0KQorICAgICAgICAgICAgX05QTl9SZXRh
aW5PYmplY3QocGx1Z2luU2NyaXB0T2JqZWN0KTsKKworICAgICAgICB2b2lkKiogdiA9ICh2b2lk
KiopdmFsdWU7CisgICAgICAgICp2ID0gcGx1Z2luU2NyaXB0T2JqZWN0OworCisgICAgICAgICpy
ZXN1bHQgPSBOUEVSUl9OT19FUlJPUjsKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgfQorI2Vu
ZGlmCisKKyAgICBjYXNlIE5QTlZuZXRzY2FwZVdpbmRvdzogeworICAgICAgICB2b2lkKiB3ID0g
cmVpbnRlcnByZXRfY2FzdDx2b2lkKj4odmFsdWUpOworICAgICAgICBFdmFzX09iamVjdCogd2lk
Z2V0ID0gbV9wYXJlbnRGcmFtZS0+dmlldygpLT5ob3N0V2luZG93KCktPnBsYXRmb3JtUGFnZUNs
aWVudCgpOworICAgICAgICBFdmFzKiBldmFzID0gZXZhc19vYmplY3RfZXZhc19nZXQod2lkZ2V0
KTsKKyAgICAgICAgRWNvcmVfRXZhcyogZWUgPSBlY29yZV9ldmFzX2Vjb3JlX2V2YXNfZ2V0KGV2
YXMpOworICAgICAgICAqKChYSUQgKil3KSA9IChXaW5kb3cpIGVjb3JlX2V2YXNfd2luZG93X2dl
dChlZSk7CisgICAgICAgICpyZXN1bHQgPSBOUEVSUl9OT19FUlJPUjsKKyAgICAgICAgcmV0dXJu
IHRydWU7CisgICAgfQorCisgICAgY2FzZSBOUE5WVG9vbGtpdDoKKyAgICAgICAgaWYgKG1fcGx1
Z2luLT5xdWlya3MoKS5jb250YWlucyhQbHVnaW5RdWlya1JlcXVpcmVzR3RrVG9vbEtpdCkpIHsK
KyAgICAgICAgICAgICooKHVpbnQzMl90ICopdmFsdWUpID0gMjsKKyAgICAgICAgICAgICpyZXN1
bHQgPSBOUEVSUl9OT19FUlJPUjsKKyAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICB9
CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgLy8gZmFsbCB0aHJvdWdoCisgICAgZGVm
YXVsdDoKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KK30KKyNlbmRpZgorCit2b2lkIFBs
dWdpblZpZXc6OmludmFsaWRhdGVSZWN0KGNvbnN0IEludFJlY3QmIHJlY3QpCit7CisgICAgaWYg
KHBsYXRmb3JtUGx1Z2luV2lkZ2V0KCkpIHsKKyAgICAgICAgcGxhdGZvcm1QbHVnaW5XaWRnZXQo
KS0+dXBkYXRlKHJlY3QpOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgaW52YWxpZGF0
ZVdpbmRvd2xlc3NQbHVnaW5SZWN0KHJlY3QpOworfQorCisjaWYgRU5BQkxFKE5FVFNDQVBFX1BM
VUdJTl9BUEkpCit2b2lkIFBsdWdpblZpZXc6OmludmFsaWRhdGVSZWN0KE5QUmVjdCogcmVjdCkK
K3sKKyAgICBpZiAoIXJlY3QpIHsKKyAgICAgICAgaW52YWxpZGF0ZSgpOworICAgICAgICByZXR1
cm47CisgICAgfQorCisgICAgSW50UmVjdCByKHJlY3QtPmxlZnQsIHJlY3QtPnRvcCwgcmVjdC0+
cmlnaHQgLSByZWN0LT5sZWZ0LCByZWN0LT5ib3R0b20gLSByZWN0LT50b3ApOworCisgICAgaW52
YWxpZGF0ZVJlY3Qocik7Cit9CisKK3ZvaWQgUGx1Z2luVmlldzo6aW52YWxpZGF0ZVJlZ2lvbihO
UFJlZ2lvbiByZWdpb24pCit7CisgICAgbm90SW1wbGVtZW50ZWQoKTsKK30KKyNlbmRpZgorCit2
b2lkIFBsdWdpblZpZXc6OmZvcmNlUmVkcmF3KCkKK3sKKyAgICBub3RJbXBsZW1lbnRlZCgpOwor
fQorCitib29sIFBsdWdpblZpZXc6OnBsYXRmb3JtU3RhcnQoKQoreworICAgIEFTU0VSVChtX2lz
U3RhcnRlZCk7CisgICAgQVNTRVJUKG1fc3RhdHVzID09IFBsdWdpblN0YXR1c0xvYWRlZFN1Y2Nl
c3NmdWxseSk7CisKKyAgICBpZiAobV9wbHVnaW4tPnBsdWdpbkZ1bmNzKCktPmdldHZhbHVlKSB7
CisgICAgICAgIFBsdWdpblZpZXc6OnNldEN1cnJlbnRQbHVnaW5WaWV3KHRoaXMpOworICAgICAg
ICBKU0M6OkpTTG9jazo6RHJvcEFsbExvY2tzIGRyb3BBbGxMb2NrcyhmYWxzZSk7CisgICAgICAg
IHNldENhbGxpbmdQbHVnaW4odHJ1ZSk7CisjaWYgRU5BQkxFKE5FVFNDQVBFX1BMVUdJTl9BUEkp
CisgICAgICAgIG1fcGx1Z2luLT5wbHVnaW5GdW5jcygpLT5nZXR2YWx1ZShtX2luc3RhbmNlLCBO
UFBWcGx1Z2luTmVlZHNYRW1iZWQsICZtX25lZWRzWEVtYmVkKTsKKyNlbmRpZgorICAgICAgICBz
ZXRDYWxsaW5nUGx1Z2luKGZhbHNlKTsKKyAgICAgICAgUGx1Z2luVmlldzo6c2V0Q3VycmVudFBs
dWdpblZpZXcoMCk7CisgICAgfQorCisgICAgaWYgKG1fbmVlZHNYRW1iZWQpIHsKKyAgICAgICAg
RXZhc19PYmplY3QqIG8gPSBtX3BhcmVudEZyYW1lLT52aWV3KCktPmhvc3RXaW5kb3coKS0+cGxh
dGZvcm1QYWdlQ2xpZW50KCk7CisgICAgICAgIEV2YXMqIGV2YXMgPSBldmFzX29iamVjdF9ldmFz
X2dldChvKTsKKyAgICAgICAgc2V0UGxhdGZvcm1QbHVnaW5XaWRnZXQobmV3IFgxMUVtYmVkQ29u
dGFpbmVyKGV2YXMsIHRoaXMpKTsKKyAgICB9IGVsc2UgeworICAgICAgICBub3RJbXBsZW1lbnRl
ZCgpOworICAgICAgICBtX3N0YXR1cyA9IFBsdWdpblN0YXR1c0Nhbk5vdExvYWRQbHVnaW47Cisg
ICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisKKworICAgIHNob3coKTsKKyAgICBOUFNldFdp
bmRvd0NhbGxiYWNrU3RydWN0KiB3c2kgPSBuZXcgTlBTZXRXaW5kb3dDYWxsYmFja1N0cnVjdCgp
OworCisgICAgd3NpLT50eXBlID0gMDsKKworICAgIFgxMUluZm8qIGluZm8gPSBwbGF0Zm9ybVBs
dWdpbldpZGdldCgpLT54MTFJbmZvKCk7CisKKyAgICB3c2ktPmRpc3BsYXkgPSBpbmZvLT5kaXNw
bGF5KCk7CisgICAgd3NpLT52aXN1YWwgPSBpbmZvLT52aXN1YWwoKTsKKyAgICB3c2ktPmRlcHRo
ID0gaW5mby0+ZGVwdGgoKTsKKyAgICB3c2ktPmNvbG9ybWFwID0gaW5mby0+Y29sb3JtYXAoKTsK
KyNpZiBFTkFCTEUoTkVUU0NBUEVfUExVR0lOX0FQSSkKKyAgICBtX25wV2luZG93LndzX2luZm8g
PSB3c2k7CisKKyAgICBtX25wV2luZG93LnR5cGUgPSBOUFdpbmRvd1R5cGVXaW5kb3c7CisgICAg
bV9ucFdpbmRvdy53aW5kb3cgPSAodm9pZCopIHBsYXRmb3JtUGx1Z2luV2lkZ2V0KCktPndpbklk
KCk7CisjZW5kaWYKKworICAgIGlmICghKG1fcGx1Z2luLT5xdWlya3MoKS5jb250YWlucyhQbHVn
aW5RdWlya0RlZmVyRmlyc3RTZXRXaW5kb3dDYWxsKSkpCisgICAgICAgIHNldE5QV2luZG93UmVj
dChmcmFtZVJlY3QoKSk7CisKKyAgICByZXR1cm4gdHJ1ZTsKK30KKwordm9pZCBQbHVnaW5WaWV3
OjpwbGF0Zm9ybURlc3Ryb3koKQoreworfQorCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbHVnaW5zL2VmbC9YMTFFbWJlZENvbnRhaW5lci5jcHAg
Yi9Tb3VyY2UvV2ViQ29yZS9wbHVnaW5zL2VmbC9YMTFFbWJlZENvbnRhaW5lci5jcHAKbmV3IGZp
bGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjI1ZjRmYgotLS0gL2Rldi9udWxsCisrKyBi
L1NvdXJjZS9XZWJDb3JlL3BsdWdpbnMvZWZsL1gxMUVtYmVkQ29udGFpbmVyLmNwcApAQCAtMCww
ICsxLDM1NiBAQAorLyoKKyAgICBDb3B5cmlnaHQgKEMpIDIwMDkgSU5kVCAtIEluc3RpdHV0byBO
b2tpYSBkZSBUZWNub2xvZ2lhCisgICAgQ29weXJpZ2h0IChDKSAyMDA5LTIwMTAgUHJvRlVTSU9O
IGVtYmVkZGVkIHN5c3RlbXMKKyAgICBDb3B5cmlnaHQgKEMpIDIwMDktMjAxMCBTYW1zdW5nIEVs
ZWN0cm9uaWNzCisKKyAgICBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiBy
ZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgICAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0
aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAgICBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBi
eSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAgICB2ZXJzaW9uIDIgb2Yg
dGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisKKyAg
ICBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJl
IHVzZWZ1bCwKKyAgICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUg
aW1wbGllZCB3YXJyYW50eSBvZgorICAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBB
IFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgICAgTGlicmFyeSBHZW5lcmFsIFB1
YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisKKyAgICBZb3Ugc2hvdWxkIGhhdmUgcmVj
ZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisg
ICAgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElm
IG5vdCwgd3JpdGUgdG8KKyAgICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1
MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAorICAgIEJvc3RvbiwgTUEgMDIxMTAtMTMw
MSwgVVNBLgorKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIlgxMUVtYmVkQ29u
dGFpbmVyLmgiCisKKyNpbmNsdWRlICJQbHVnaW5WaWV3LmgiCisjaW5jbHVkZSAiWDExV2luZG93
LmgiCisKKyNpbmNsdWRlIDxYMTEvWC5oPgorI2luY2x1ZGUgPFgxMS9YbGliLmg+CisKKyNkZWZp
bmUgS2V5UHJlc3MgICAgIDIKKyNkZWZpbmUgS2V5UmVsZWFzZSAgIDMKKyNkZWZpbmUgRm9jdXNJ
biAgICAgIDkKKyNkZWZpbmUgRm9jdXNPdXQgICAgMTAKKworI2RlZmluZSBBVE9NKG5hbWUpIGVj
b3JlX3hfYXRvbV9nZXQoI25hbWUpCisKK3VzaW5nIG5hbWVzcGFjZSBzdGQ7Cit1c2luZyBuYW1l
c3BhY2UgV1RGOwordXNpbmcgbmFtZXNwYWNlIFdlYkNvcmU7CisKK2NsYXNzIFgxMUVtYmVkRXZl
bnRIYW5kbGVyOworCitzdGF0aWMgdW5zaWduZWQgaW50IHhlbWJlZFZlcnNpb24gPSAwOworc3Rh
dGljIHVuc2lnbmVkIGludCB4ZW1iZWRNYXBwZWQgPSAoMSA8PCAwKTsKK3N0YXRpYyB2b2lkIHNl
bmRYRW1iZWRNZXNzYWdlKFdpbklkICwgRGlzcGxheSogLCBsb25nICwgbG9uZyBkZXRhaWwgPSAw
LCBsb25nIGRhdGExID0gMCwgbG9uZyBkYXRhMiA9IDApOworCitlbnVtIFgxMUVtYmVkTWVzc2Fn
ZVR5cGUgeworICAgIFhFTUJFRF9FTUJFRERFRF9OT1RJRlkgPSAwLAorICAgIFhFTUJFRF9XSU5E
T1dfQUNUSVZBVEUgPSAxLAorICAgIFhFTUJFRF9XSU5ET1dfREVBQ1RJVkFURSA9IDIsCisgICAg
WEVNQkVEX1JFUVVFU1RfRk9DVVMgPSAzLAorICAgIFhFTUJFRF9GT0NVU19JTiA9IDQsCisgICAg
WEVNQkVEX0ZPQ1VTX09VVCA9IDUsCisgICAgWEVNQkVEX0ZPQ1VTX05FWFQgPSA2LAorICAgIFhF
TUJFRF9GT0NVU19QUkVWID0gNywKKyAgICAvKiA4LTkgd2VyZSB1c2VkIGZvciBYRU1CRURfR1JB
Ql9LRVkvWEVNQkVEX1VOR1JBQl9LRVkgKi8KKyAgICBYRU1CRURfTU9EQUxJVFlfT04gPSAxMCwK
KyAgICBYRU1CRURfTU9EQUxJVFlfT0ZGID0gMTEsCisgICAgWEVNQkVEX1JFR0lTVEVSX0FDQ0VM
RVJBVE9SID0gMTIsCisgICAgWEVNQkVEX1VOUkVHSVNURVJfQUNDRUxFUkFUT1IgPSAxMywKKyAg
ICBYRU1CRURfQUNUSVZBVEVfQUNDRUxFUkFUT1IgPSAxNAorfTsKKworZW51bSBYMTFFbWJlZEZv
Y3VzSW5EZXRhaWwgeworICAgIFhFTUJFRF9GT0NVU19DVVJSRU5UID0gMCwKKyAgICBYRU1CRURf
Rk9DVVNfRklSU1QgPSAxLAorICAgIFhFTUJFRF9GT0NVU19MQVNUID0gMgorfTsKKworWDExRW1i
ZWRDb250YWluZXI6OlgxMUVtYmVkQ29udGFpbmVyKEV2YXMqIGV2YXMsIFBsdWdpblZpZXcqIHZp
ZXcpCisgICAgOiBYMTFXaW5kb3coZXZhcykKKyAgICAsIG1fYWN0aXZlKGZhbHNlKQorICAgICwg
bV9jbGllbnQoMCkKKyAgICAsIG1fcGx1Z2luVmlldyh2aWV3KQorICAgICwgbV9jbGllbnRXaW5k
b3coMCkKK3sKKyAgICAvLyBpbXBsZW1lbnQgdGhlIGZvY3VzIHByb3h5IGFzIGluIHRoZSBzcGVj
LCBvZmZzY3JlZW4KKyAgICBtX2ZvY3VzUHJveHkuc2V0KG5ldyBYMTFXaW5kb3cod2luSWQoKSwg
SW50UmVjdCgtMSwgLTEsIDEsIDEpKSk7CisgICAgbV9mb2N1c1Byb3h5LT5pbnN0YWxsRXZlbnRG
aWx0ZXIodGhpcyk7CisgICAgbV9mb2N1c1Byb3h5LT5zaG93KCk7CisKKyAgICBlY29yZV94X3dp
bmRvd19iYWNrZ3JvdW5kX2NvbG9yX3NldCh3aW5JZCgpLCA2NTUzNSwgNjU1MzUsIDY1NTM1KTsK
KworICAgIC8vIENoYW5nZSB0aGUgZXZlbnQgZmlsdGVyIGZvciB0aGUgZXZlbnRzIHdlIHdvdWxk
IGxpa2UgdG8gcmVjZWl2ZQorICAgIFhTZWxlY3RJbnB1dCh4MTFJbmZvKCktPmRpc3BsYXkoKSwg
d2luSWQoKSwKKyAgICAgICAgICAgIEtleVByZXNzTWFzayB8IEtleVJlbGVhc2VNYXNrCisgICAg
ICAgICAgICB8IEJ1dHRvblByZXNzTWFzayB8IEJ1dHRvblJlbGVhc2VNYXNrIHwgQnV0dG9uTW90
aW9uTWFzaworICAgICAgICAgICAgfCBLZXltYXBTdGF0ZU1hc2sKKyAgICAgICAgICAgIHwgUG9p
bnRlck1vdGlvbk1hc2sKKyAgICAgICAgICAgIHwgRW50ZXJXaW5kb3dNYXNrIHwgTGVhdmVXaW5k
b3dNYXNrCisgICAgICAgICAgICB8IEZvY3VzQ2hhbmdlTWFzaworICAgICAgICAgICAgfCBFeHBv
c3VyZU1hc2sKKyAgICAgICAgICAgIHwgU3RydWN0dXJlTm90aWZ5TWFzaworICAgICAgICAgICAg
fCBTdWJzdHJ1Y3R1cmVOb3RpZnlNYXNrKTsKKworICAgIFhGbHVzaCh4MTFJbmZvKCktPmRpc3Bs
YXkoKSk7Cit9CisKK1gxMUVtYmVkQ29udGFpbmVyOjp+WDExRW1iZWRDb250YWluZXIoKQorewor
ICAgIHNldFZpc2libGUoZmFsc2UpOworCisgICAgaWYgKGNsaWVudCgpKSB7CisgICAgICAgIFhV
bm1hcFdpbmRvdyh4MTFJbmZvKCktPmRpc3BsYXkoKSwgY2xpZW50KCkpOworICAgICAgICBYUmVw
YXJlbnRXaW5kb3coeDExSW5mbygpLT5kaXNwbGF5KCksIGNsaWVudCgpLCByb290V2luZG93KCks
IDAsIDApOworICAgIH0KK30KKwordm9pZCBYMTFFbWJlZENvbnRhaW5lcjo6bW92ZUlucHV0Rm9j
dXNUb1Byb3h5KCkKK3sKKyAgICBpZiAoaGFzRm9jdXMoKSkKKyAgICAgICAgcmV0dXJuOworCisg
ICAgWFNldElucHV0Rm9jdXMoeDExSW5mbygpLT5kaXNwbGF5KCksIG1fZm9jdXNQcm94eS0+d2lu
SWQoKSwgUmV2ZXJ0VG9QYXJlbnQsIHgxMUluZm8oKS0+eDExVGltZSgpKTsKK30KKwordm9pZCBY
MTFFbWJlZENvbnRhaW5lcjo6YWNjZXB0KFdpbklkIGNsaWVudCkKK3sKKyAgICBzZXRDbGllbnQo
Y2xpZW50KTsKKyAgICBtX2NsaWVudFdpbmRvdy0+aW5zdGFsbEV2ZW50RmlsdGVyKHRoaXMpOwor
CisgICAgWEFkZFRvU2F2ZVNldCh4MTFJbmZvKCktPmRpc3BsYXkoKSwgY2xpZW50KTsgLy8gYXZv
aWQgY2xpZW50IGZyb20gY3Jhc2hpbmcgYWxvbmcgd2l0aCB1cworCisgICAgdW5zaWduZWQgaW50
IHZlcnNpb24gPSAwOyAvLyBsYXRlc3QgdmVyc2lvbiBvZiB0aGUgc3BlYworCisgICAgaW50IG5p
dGVtcyA9IDA7CisgICAgdW5zaWduZWQgY2hhciAqZGF0YSA9IDA7CisgICAgdW5zaWduZWQgaW50
IGNsaWVudFZlcnNpb24gPSAwOworCisgICAgc3RhdGljIEF0b20gYXRvbSA9IEFUT00oX1hFTUJF
RF9JTkZPKTsKKworICAgIGlmIChlY29yZV94X3dpbmRvd19wcm9wX3Byb3BlcnR5X2dldChjbGll
bnQsIGF0b20sIGF0b20sIDIsICZkYXRhLCAmbml0ZW1zKSkgeworICAgICAgICB1bnNpZ25lZCBp
bnQgKnByb3AgPSAodW5zaWduZWQgaW50ICopIGRhdGE7CisKKyAgICAgICAgaWYgKG5pdGVtcyA+
PSAyKQorICAgICAgICAgICAgY2xpZW50VmVyc2lvbiA9IHByb3BbMF07CisgICAgICAgIGZyZWUo
ZGF0YSk7CisgICAgfQorCisgICAgLy8gQXNrIHRoZSBjbGllbnQgZm9yIGl0cyBtaW5pbXVtIHNp
emUuCisgICAgSW50U2l6ZSBtaW5TaXplSGludDsKKyAgICBYU2l6ZUhpbnRzIHNpemVIaW50Owor
ICAgIGxvbmcgdW51c2VkOworICAgIGlmIChYR2V0V01Ob3JtYWxIaW50cyh4MTFJbmZvKCktPmRp
c3BsYXkoKSwgY2xpZW50LCAmc2l6ZUhpbnQsICZ1bnVzZWQpICYmIChzaXplSGludC5mbGFncyAm
IFBNaW5TaXplKSkKKyAgICAgICAgbWluU2l6ZUhpbnQgPSBJbnRTaXplKHNpemVIaW50Lm1pbl93
aWR0aCwgc2l6ZUhpbnQubWluX2hlaWdodCk7CisgICAgZWxzZQorICAgICAgICBtaW5TaXplSGlu
dCA9IEludFNpemUoMCwgMCk7CisKKyAgICB1bnNpZ25lZCBpbnQgbWluVmVyc2lvbiA9IHZlcnNp
b24gPiBjbGllbnRWZXJzaW9uID8gY2xpZW50VmVyc2lvbiA6IHZlcnNpb247CisKKyAgICBzZW5k
WEVtYmVkTWVzc2FnZShjbGllbnQsIHgxMUluZm8oKS0+ZGlzcGxheSgpLCBYRU1CRURfRU1CRURE
RURfTk9USUZZLCAwLCB3aW5JZCgpLCBtaW5WZXJzaW9uKTsKKworICAgIFhNYXBXaW5kb3coeDEx
SW5mbygpLT5kaXNwbGF5KCksIGNsaWVudCk7CisKKyAgICByZXNpemUobWF4KHNpemUoKS53aWR0
aCgpLCBtaW5TaXplSGludC53aWR0aCgpKSwgbWF4KHNpemUoKS5oZWlnaHQoKSwgbWluU2l6ZUhp
bnQuaGVpZ2h0KCkpKTsKK30KKwordm9pZCBYMTFFbWJlZENvbnRhaW5lcjo6cmVqZWN0KFdpbklk
IGNsaWVudCkKK3sKKyAgICBYUmVtb3ZlRnJvbVNhdmVTZXQoeDExSW5mbygpLT5kaXNwbGF5KCks
IGNsaWVudCk7CisgICAgWFJlcGFyZW50V2luZG93KHgxMUluZm8oKS0+ZGlzcGxheSgpLCBjbGll
bnQsIHJvb3RXaW5kb3coKSwgMCwgMCk7Cit9CisKK3ZvaWQgWDExRW1iZWRDb250YWluZXI6OnNo
b3coKQoreworICAgIFgxMVdpbmRvdzo6c2hvdygpOworCisgICAgLy8gc2lnbmFsIG1hcAorICAg
IGlmIChjbGllbnQoKSkgeworICAgICAgICB1bnNpZ25lZCBpbnQgZGF0YVtdID0ge3hlbWJlZFZl
cnNpb24sIHhlbWJlZE1hcHBlZH07CisgICAgICAgIFhDaGFuZ2VQcm9wZXJ0eSh4MTFJbmZvKCkt
PmRpc3BsYXkoKSwgY2xpZW50KCksIEFUT00oX1hFTUJFRF9JTkZPKSwgQVRPTShfWEVNQkVEX0lO
Rk8pLCAzMiwKKyAgICAgICAgICAgIFByb3BNb2RlUmVwbGFjZSwgKHVuc2lnbmVkIGNoYXIgKikg
ZGF0YSwgMik7CisgICAgfQorfQorCit2b2lkIFgxMUVtYmVkQ29udGFpbmVyOjpoaWRlKCkKK3sK
KyAgICBYMTFXaW5kb3c6OmhpZGUoKTsKKworICAgIC8vIHNpZ25hbCB1bm1hcAorICAgIGlmIChj
bGllbnQoKSkgeworICAgICAgICB1bnNpZ25lZCBpbnQgZGF0YVtdID0ge3hlbWJlZFZlcnNpb24s
IHhlbWJlZE1hcHBlZH07CisgICAgICAgIFhDaGFuZ2VQcm9wZXJ0eSh4MTFJbmZvKCktPmRpc3Bs
YXkoKSwgY2xpZW50KCksIEFUT00oX1hFTUJFRF9JTkZPKSwgQVRPTShfWEVNQkVEX0lORk8pLCAz
MiwKKyAgICAgICAgICAgIFByb3BNb2RlUmVwbGFjZSwgKHVuc2lnbmVkIGNoYXIgKikgZGF0YSwg
Mik7CisgICAgfQorICAgIG1fYWN0aXZlID0gZmFsc2U7Cit9CisKK3ZvaWQgWDExRW1iZWRDb250
YWluZXI6OnJlc2l6ZShpbnQgd2lkdGgsIGludCBoZWlnaHQpCit7CisgICAgWDExV2luZG93Ojpy
ZXNpemUod2lkdGgsIGhlaWdodCk7CisgICAgaWYgKGNsaWVudCgpKQorICAgICAgICBYUmVzaXpl
V2luZG93KHgxMUluZm8oKS0+ZGlzcGxheSgpLCBjbGllbnQoKSwgd2lkdGgsIGhlaWdodCk7Cit9
CisKK3ZvaWQgWDExRW1iZWRDb250YWluZXI6OnNldEZyYW1lUmVjdChjb25zdCBJbnRSZWN0JiBy
ZWN0KQoreworICAgIFgxMVdpbmRvdzo6c2V0RnJhbWVSZWN0KHJlY3QpOworICAgIGlmIChjbGll
bnQoKSkKKyAgICAgICAgWE1vdmVSZXNpemVXaW5kb3coeDExSW5mbygpLT5kaXNwbGF5KCksIGNs
aWVudCgpLCAwLCAwLCByZWN0LndpZHRoKCksIHJlY3QuaGVpZ2h0KCkpOworfQorCit2b2lkIFgx
MUVtYmVkQ29udGFpbmVyOjpzZXRGb2N1cygpCit7CisgICAgbW92ZUlucHV0Rm9jdXNUb1Byb3h5
KCk7CisgICAgbV9hY3RpdmUgPSB0cnVlOworfQorCitib29sIFgxMUVtYmVkQ29udGFpbmVyOjpo
YXNGb2N1cygpCit7CisgICAgV2luSWQgZm9jdXNlZDsKKyAgICBpbnQgcmV2ZXJ0VG87CisgICAg
WEdldElucHV0Rm9jdXMoeDExSW5mbygpLT5kaXNwbGF5KCksICZmb2N1c2VkLCAmcmV2ZXJ0VG8p
OworCisgICAgcmV0dXJuIGZvY3VzZWQgPT0gbV9mb2N1c1Byb3h5LT53aW5JZCgpOworfQorCiti
b29sIFgxMUVtYmVkQ29udGFpbmVyOjppc0FjdGl2ZSgpCit7CisgICAgcmV0dXJuIG1fYWN0aXZl
OworfQorCitXaW5JZCBYMTFFbWJlZENvbnRhaW5lcjo6cm9vdFdpbmRvdygpCit7CisgICAgcmV0
dXJuIERlZmF1bHRSb290V2luZG93KHgxMUluZm8oKS0+ZGlzcGxheSgpKTsKK30KKworYm9vbCBY
MTFFbWJlZENvbnRhaW5lcjo6eDExRXZlbnQoWEV2ZW50KiBldmVudCkKK3sKKyAgICAvLyB3ZSBz
dWJzY3JpYmUgdG8gZXZlbnRzIGRpcmVjdGx5IGZyb20gdGhlIGNsaWVudCBhcyB3ZWxsCisgICAg
Ly8gaW4gb3JkZXIgdG8gcGljayB1cCB3aGVlbCBldmVudHMuCisgICAgaWYgKGV2ZW50LT54YW55
LndpbmRvdyA9PSBjbGllbnQoKSkgeworICAgICAgICBzd2l0Y2ggKGV2ZW50LT50eXBlKSB7Cisg
ICAgICAgIGNhc2UgQnV0dG9uUHJlc3M6CisgICAgICAgICAgICAvLyBtX3BsdWdpblZpZXctPmRp
c3BhdGNoV2hlZWxFdmVudChldmVudCk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2Fz
ZSBCdXR0b25SZWxlYXNlOgorICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAgICAg
cmV0dXJuIHRydWU7CisgICAgfQorCisgICAgc3dpdGNoIChldmVudC0+dHlwZSkgeworICAgIGNh
c2UgRm9jdXNJbjoKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBGb2N1c091dDoKKyAgICAgICAg
Ly8gd2hlbiBvdXIgcHJveHkgZ2FpbiBmb2N1cywgdGhlIGNvbnRhaW5lciBhY3R1YWxseQorICAg
ICAgICAvLyBsb29zZXMgaXQsIHNvIG9ubHkgZGVhY3RpdmF0ZSB3aGVuIHRoZSBwcm94eSBsb29z
ZXMKKyAgICAgICAgLy8gZm9jdXMuCisgICAgICAgIGlmIChldmVudC0+eGFueS53aW5kb3cgIT0g
bV9mb2N1c1Byb3h5LT53aW5JZCgpKQorICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgc2Vu
ZFhFbWJlZE1lc3NhZ2UoY2xpZW50KCksIHgxMUluZm8oKS0+ZGlzcGxheSgpLCBYRU1CRURfRk9D
VVNfT1VUKTsKKyAgICAgICAgbV9hY3RpdmUgPSBmYWxzZTsKKyAgICAgICAgYnJlYWs7CisgICAg
Y2FzZSBMZWF2ZU5vdGlmeToKKyAgICAgICAgc2VuZFhFbWJlZE1lc3NhZ2UoY2xpZW50KCksIHgx
MUluZm8oKS0+ZGlzcGxheSgpLCBYRU1CRURfV0lORE9XX0RFQUNUSVZBVEUpOworICAgICAgICBp
ZiAoIW1fYWN0aXZlKQorICAgICAgICAgICAgZWNvcmVfeF93aW5kb3dfZm9jdXMoZWNvcmVfeF93
aW5kb3dfcGFyZW50X2dldCh3aW5JZCgpKSk7CisKKyAgICAgICAgWFVuZ3JhYkJ1dHRvbih4MTFJ
bmZvKCktPmRpc3BsYXkoKSwgNCwgQW55TW9kaWZpZXIsIGNsaWVudCgpKTsKKyAgICAgICAgWFVu
Z3JhYkJ1dHRvbih4MTFJbmZvKCktPmRpc3BsYXkoKSwgNSwgQW55TW9kaWZpZXIsIGNsaWVudCgp
KTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBFbnRlck5vdGlmeToKKyAgICAgICAgc2VuZFhF
bWJlZE1lc3NhZ2UoY2xpZW50KCksIHgxMUluZm8oKS0+ZGlzcGxheSgpLCBYRU1CRURfV0lORE9X
X0FDVElWQVRFKTsKKyAgICAgICAgbW92ZUlucHV0Rm9jdXNUb1Byb3h5KCk7CisKKyAgICAgICAg
WEdyYWJCdXR0b24oeDExSW5mbygpLT5kaXNwbGF5KCksIDQsIEFueU1vZGlmaWVyLCBjbGllbnQo
KSwgZmFsc2UsCisgICAgICAgICAgICAgICAgQnV0dG9uUHJlc3NNYXNrLCBHcmFiTW9kZUFzeW5j
LCBHcmFiTW9kZUFzeW5jLCAwTCwgMEwpOworICAgICAgICBYR3JhYkJ1dHRvbih4MTFJbmZvKCkt
PmRpc3BsYXkoKSwgNSwgQW55TW9kaWZpZXIsIGNsaWVudCgpLCBmYWxzZSwKKyAgICAgICAgICAg
ICAgICBCdXR0b25QcmVzc01hc2ssIEdyYWJNb2RlQXN5bmMsIEdyYWJNb2RlQXN5bmMsIDBMLCAw
TCk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgS2V5UHJlc3M6CisgICAgY2FzZSBLZXlSZWxl
YXNlOgorICAgICAgICBpZiAoY2xpZW50KCkgJiYgaXNBY3RpdmUoKSkKKyAgICAgICAgICAgIGV2
ZW50LT54a2V5LndpbmRvdyA9IGNsaWVudCgpOworICAgICAgICBlbHNlCisgICAgICAgICAgICBl
dmVudC0+eGtleS53aW5kb3cgPSBlY29yZV94X3dpbmRvd19wYXJlbnRfZ2V0KHdpbklkKCkpOwor
CisgICAgICAgIFhTZW5kRXZlbnQoeDExSW5mbygpLT5kaXNwbGF5KCksIGV2ZW50LT54a2V5Lndp
bmRvdywgZmFsc2UsIE5vRXZlbnRNYXNrLCBldmVudCk7CisgICAgICAgIFhTeW5jKHgxMUluZm8o
KS0+ZGlzcGxheSgpLCBmYWxzZSk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgQ3JlYXRlTm90
aWZ5OgorICAgICAgICBpZiAoY2xpZW50KCkpCisgICAgICAgICAgICByZWplY3QoZXZlbnQtPnhj
cmVhdGV3aW5kb3cud2luZG93KTsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgYWNjZXB0KGV2
ZW50LT54Y3JlYXRld2luZG93LndpbmRvdyk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgRGVz
dHJveU5vdGlmeToKKyAgICAgICAgLy8gY2xpZW50IGdvZXMgYXdheQorICAgICAgICBpZiAoZXZl
bnQtPnhkZXN0cm95d2luZG93LndpbmRvdyA9PSBjbGllbnQoKSkgeworICAgICAgICAgICAgc2V0
Q2xpZW50KDApOworICAgICAgICAgICAgc2V0RnJhbWVSZWN0KEludFJlY3QoLTEsIC0xLCAxLCAx
KSk7CisgICAgICAgIH0KKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBSZXBhcmVudE5vdGlmeToK
KyAgICAgICAgLy8gdGhlIGNsaWVudCByZXBhcmVudHMgaXRzZWxmIG91dCBvZiB1cywgd2FudHMg
dG8gbGVhdmUgdXMKKyAgICAgICAgaWYgKGV2ZW50LT54cmVwYXJlbnQud2luZG93ID09IGNsaWVu
dCgpICYmIGV2ZW50LT54cmVwYXJlbnQucGFyZW50ICE9IHdpbklkKCkpIHsKKyAgICAgICAgICAg
IHNldENsaWVudCgwKTsKKyAgICAgICAgICAgIHNldEZyYW1lUmVjdChJbnRSZWN0KC0xLCAtMSwg
MSwgMSkpOworICAgICAgICB9IGVsc2UgaWYgKGV2ZW50LT54cmVwYXJlbnQucGFyZW50ID09IHdp
bklkKCkpIHsgLy8gdGhlIGNsaWVudCByZXBhcmVudHMgaXRzZWxmIGludG8gdXMKKyAgICAgICAg
ICAgIGlmIChjbGllbnQoKSkKKyAgICAgICAgICAgICAgICByZWplY3QoZXZlbnQtPnhyZXBhcmVu
dC53aW5kb3cpOworICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgIGFjY2VwdChldmVu
dC0+eHJlcGFyZW50LndpbmRvdyk7CisgICAgICAgIH0KKyAgICAgICAgYnJlYWs7CisgICAgY2Fz
ZSBDbGllbnRNZXNzYWdlOgorICAgICAgICBpZiAoZXZlbnQtPnhjbGllbnQubWVzc2FnZV90eXBl
ICE9IEFUT00oX1hFTUJFRCkpCisgICAgICAgICAgICBicmVhazsKKworICAgICAgICAvLyBub3Qg
Zm9yIHVzLCBpZ25vcmUKKyAgICAgICAgaWYgKGV2ZW50LT54Y2xpZW50LndpbmRvdyAhPSB3aW5J
ZCgpKQorICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgc3dpdGNoIChldmVudC0+eGNsaWVu
dC5kYXRhLmxbMV0pIHsKKyAgICAgICAgY2FzZSBYRU1CRURfUkVRVUVTVF9GT0NVUzoKKyAgICAg
ICAgICAgIG1fcGx1Z2luVmlldy0+c2V0Rm9jdXModHJ1ZSk7CisgICAgICAgICAgICBzZW5kWEVt
YmVkTWVzc2FnZShjbGllbnQoKSwgeDExSW5mbygpLT5kaXNwbGF5KCksIFhFTUJFRF9GT0NVU19J
TiwgWEVNQkVEX0ZPQ1VTX0NVUlJFTlQpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNh
c2UgWEVNQkVEX0ZPQ1VTX05FWFQ6CisgICAgICAgICAgICAvLyBDbGllbnQgc2VuZHMgdGhpcyBl
dmVudCB3aGVuIGl0IHJlY2VpdmVkIGEgdGFiCisgICAgICAgICAgICAvLyBmb3J3YXJkIGFuZCB3
YXMgYXQgdGhlIGVuZCBvZiBpdHMgZm9jdXMgY2hhaW4uIElmCisgICAgICAgICAgICAvLyB3ZSBh
cmUgdGhlIG9ubHkgd2lkZ2V0IGluIHRoZSBmb2N1cyBjaGFpbiwgd2Ugc2VuZAorICAgICAgICAg
ICAgLy8gb3Vyc2VsdmVzIGEgRm9jdXNPdXQgZXZlbnQuCisgICAgICAgICAgICBicmVhazsKKyAg
ICAgICAgY2FzZSBYRU1CRURfRk9DVVNfUFJFVjoKKyAgICAgICAgICAgIC8vIENsaWVudCBzZW5k
cyB0aGlzIGV2ZW50IHdoZW4gaXQgcmVjZWl2ZWQgYSBiYWNrdGFiCisgICAgICAgICAgICAvLyBh
bmQgd2FzIGF0IHRoZSBzdGFydCBvZiBpdHMgZm9jdXMgY2hhaW4uIElmIHdlIGFyZQorICAgICAg
ICAgICAgLy8gdGhlIG9ubHkgd2lkZ2V0IGluIHRoZSBmb2N1cyBjaGFpbiwgd2Ugc2VuZAorICAg
ICAgICAgICAgLy8gb3Vyc2VsdmVzIGEgRm9jdXNPdXQgZXZlbnQuCisgICAgICAgICAgICBicmVh
azsKKyAgICAgICAgfQorICAgICAgICBicmVhazsKKyAgICB9CisgICAgcmV0dXJuIGZhbHNlOwor
fQorCit2b2lkIHNlbmRYRW1iZWRNZXNzYWdlKFdpbklkIHdpbmRvdywgRGlzcGxheSogZGlzcGxh
eSwgbG9uZyBtZXNzYWdlLCBsb25nIGRldGFpbCwgbG9uZyBkYXRhMSwgbG9uZyBkYXRhMikKK3sK
KyAgICBYRXZlbnQgZXY7CisgICAgbWVtc2V0KCZldiwgMCwgc2l6ZW9mKGV2KSk7CisgICAgZXYu
eGNsaWVudC50eXBlID0gQ2xpZW50TWVzc2FnZTsKKyAgICBldi54Y2xpZW50LndpbmRvdyA9IHdp
bmRvdzsKKyAgICBldi54Y2xpZW50Lm1lc3NhZ2VfdHlwZSA9IEFUT00oX1hFTUJFRF9JTkZPKTsK
KyAgICBldi54Y2xpZW50LmZvcm1hdCA9IDMyOworICAgIGV2LnhjbGllbnQuZGF0YS5sWzBdID0g
ZWNvcmVfeF9jdXJyZW50X3RpbWVfZ2V0KCk7CisgICAgZXYueGNsaWVudC5kYXRhLmxbMV0gPSBt
ZXNzYWdlOworICAgIGV2LnhjbGllbnQuZGF0YS5sWzJdID0gZGV0YWlsOworICAgIGV2LnhjbGll
bnQuZGF0YS5sWzNdID0gZGF0YTE7CisgICAgZXYueGNsaWVudC5kYXRhLmxbNF0gPSBkYXRhMjsK
KyAgICBYU2VuZEV2ZW50KGRpc3BsYXksIHdpbmRvdywgZmFsc2UsIE5vRXZlbnRNYXNrLCAmZXYp
OworICAgIFhTeW5jKGRpc3BsYXksIGZhbHNlKTsKK30KKwpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvcGx1Z2lucy9lZmwvWDExRW1iZWRDb250YWluZXIuaCBiL1NvdXJjZS9XZWJDb3JlL3Bs
dWdpbnMvZWZsL1gxMUVtYmVkQ29udGFpbmVyLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXgg
MDAwMDAwMC4uMDkwNGQ2NgotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsdWdp
bnMvZWZsL1gxMUVtYmVkQ29udGFpbmVyLmgKQEAgLTAsMCArMSw3NSBAQAorLyoKKyAgICBDb3B5
cmlnaHQgKEMpIDIwMDkgSU5kVCAtIEluc3RpdHV0byBOb2tpYSBkZSBUZWNub2xvZ2lhCisgICAg
Q29weXJpZ2h0IChDKSAyMDA5LTIwMTAgUHJvRlVTSU9OIGVtYmVkZGVkIHN5c3RlbXMKKyAgICBD
b3B5cmlnaHQgKEMpIDIwMDktMjAxMCBTYW1zdW5nIEVsZWN0cm9uaWNzCisKKyAgICBUaGlzIGxp
YnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisg
ICAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQ
dWJsaWMKKyAgICBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3Vu
ZGF0aW9uOyBlaXRoZXIKKyAgICB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3Vy
IG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisKKyAgICBUaGlzIGxpYnJhcnkgaXMgZGlzdHJp
YnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAgICBidXQgV0lUSE9V
VCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICAg
IE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNl
ZSB0aGUgR05VCisgICAgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRl
dGFpbHMuCisKKyAgICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUg
TGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgICAgYWxvbmcgd2l0aCB0aGlzIGxpYnJh
cnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KKyAgICB0aGUg
RnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRo
IEZsb29yLAorICAgIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgorKi8KKworI2lmbmRlZiBY
MTFFbWJlZENvbnRhaW5lcl9oCisjZGVmaW5lIFgxMUVtYmVkQ29udGFpbmVyX2gKKworI2luY2x1
ZGUgIlBsdWdpblZpZXcuaCIKKyNpbmNsdWRlICJYMTFXaW5kb3cuaCIKKworI2luY2x1ZGUgPHd0
Zi9Pd25QdHIuaD4KKyNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+CisKK2NsYXNzIFgxMUVtYmVkQ29u
dGFpbmVyOworY2xhc3MgWDExV2luZG93OworCitjbGFzcyBYMTFFbWJlZENvbnRhaW5lciA6IHB1
YmxpYyBYMTFXaW5kb3cgeworcHVibGljOgorICAgIFgxMUVtYmVkQ29udGFpbmVyKEV2YXMqLCBX
ZWJDb3JlOjpQbHVnaW5WaWV3Kik7CisgICAgflgxMUVtYmVkQ29udGFpbmVyKCk7CisKKyAgICBX
aW5JZCByb290V2luZG93KCk7CisKKyAgICBXaW5JZCBjbGllbnQoKSB7IHJldHVybiBtX2NsaWVu
dDsgfQorICAgIHZvaWQgc2V0Q2xpZW50KFdpbklkIGNsaWVudCkKKyAgICB7CisgICAgICAgIG1f
Y2xpZW50ID0gY2xpZW50OworICAgICAgICBpZiAoY2xpZW50KQorICAgICAgICAgICAgbV9jbGll
bnRXaW5kb3cuc2V0KFgxMVdpbmRvdzo6YWRvcHQoY2xpZW50KSk7CisgICAgfQorCisgICAgdm9p
ZCBhY2NlcHQoV2luSWQgY2xpZW50KTsKKyAgICB2b2lkIHJlamVjdChXaW5JZCBjbGllbnQpOwor
CisgICAgdm9pZCBtb3ZlSW5wdXRGb2N1c1RvUHJveHkoKTsKKyAgICBib29sIHgxMUV2ZW50KFhF
dmVudCopOworCisgICAgdm9pZCBzZXRGcmFtZVJlY3QoY29uc3QgV2ViQ29yZTo6SW50UmVjdCYp
OworCisgICAgdm9pZCByZXNpemUoaW50IHdpZHRoLCBpbnQgaGVpZ2h0KTsKKworICAgIHZvaWQg
c2hvdygpOworICAgIHZvaWQgaGlkZSgpOworCisgICAgdm9pZCBzZXRGb2N1cygpOworICAgIGJv
b2wgaGFzRm9jdXMoKTsKKyAgICBib29sIGlzQWN0aXZlKCk7CisKK3ByaXZhdGU6CisgICAgYm9v
bCBtX2FjdGl2ZTsKKyAgICBXaW5JZCBtX2NsaWVudDsKKworICAgIFdlYkNvcmU6OlBsdWdpblZp
ZXcqIG1fcGx1Z2luVmlldzsKKyAgICBPd25QdHI8WDExV2luZG93PiBtX2ZvY3VzUHJveHk7Cisg
ICAgT3duUHRyPFgxMVdpbmRvdz4gbV9jbGllbnRXaW5kb3c7Cit9OworCisjZW5kaWYgLy8gWDEx
RW1iZWRDb250YWluZXJfaApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGx1Z2lucy9lZmwv
WDExV2luZG93LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsdWdpbnMvZWZsL1gxMVdpbmRvdy5jcHAK
bmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTk0MTE4NQotLS0gL2Rldi9udWxs
CisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsdWdpbnMvZWZsL1gxMVdpbmRvdy5jcHAKQEAgLTAsMCAr
MSwxODMgQEAKKy8qCisgICAgQ29weXJpZ2h0IChDKSAyMDA5IElOZFQgLSBJbnN0aXR1dG8gTm9r
aWEgZGUgVGVjbm9sb2dpYQorICAgIENvcHlyaWdodCAoQykgMjAwOS0yMDEwIFByb0ZVU0lPTiBl
bWJlZGRlZCBzeXN0ZW1zCisgICAgQ29weXJpZ2h0IChDKSAyMDA5LTIwMTAgU2Ftc3VuZyBFbGVj
dHJvbmljcworCisgICAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVk
aXN0cmlidXRlIGl0IGFuZC9vcgorICAgIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhl
IEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgICAgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkg
dGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgICAgdmVyc2lvbiAyIG9mIHRo
ZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorCisgICAg
VGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1
c2VmdWwsCisgICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGlt
cGxpZWQgd2FycmFudHkgb2YKKyAgICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQ
QVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICAgIExpYnJhcnkgR2VuZXJhbCBQdWJs
aWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorCisgICAgWW91IHNob3VsZCBoYXZlIHJlY2Vp
dmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICAg
IGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBu
b3QsIHdyaXRlIHRvCisgICAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEg
RnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKKyAgICBCb3N0b24sIE1BIDAyMTEwLTEzMDEs
IFVTQS4KKyovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJYMTFXaW5kb3cuaCIK
KworI2luY2x1ZGUgPEVjb3JlX0V2YXMuaD4KKwordXNpbmcgbmFtZXNwYWNlIFdlYkNvcmU7CisK
K0VpbmFfQm9vbCBvbkVjb3JlWEV2ZW50KHZvaWQqLCBpbnQgdHlwZSwgdm9pZCogZXZlbnREYXRh
KTsKKwordm9pZCBYMTFXaW5kb3c6OmluaXQoV2luSWQgcGFyZW50LCBJbnRSZWN0JiBnZW9tZXRy
eSkKK3sKKyAgICBtX3dpbklkID0gZWNvcmVfeF93aW5kb3dfbmV3KHBhcmVudCwgZ2VvbWV0cnku
eCgpLCBnZW9tZXRyeS55KCksCisgICAgICAgICAgICBnZW9tZXRyeS53aWR0aCgpLCBnZW9tZXRy
eS5oZWlnaHQoKSk7CisgICAgbV9YRXZlbnRIYW5kbGVyID0gZWNvcmVfZXZlbnRfaGFuZGxlcl9h
ZGQoRUNPUkVfWF9FVkVOVF9BTlksIG9uRWNvcmVYRXZlbnQsIHRoaXMpOworfQorCitYMTFXaW5k
b3cqIFgxMVdpbmRvdzo6YWRvcHQoV2luSWQgaWQpCit7CisgICAgWDExV2luZG93KiB3aW4gPSBu
ZXcgWDExV2luZG93KCk7CisgICAgd2luLT5tX3dpbklkID0gaWQ7CisgICAgd2luLT5tX1hFdmVu
dEhhbmRsZXIgPSBlY29yZV9ldmVudF9oYW5kbGVyX2FkZChFQ09SRV9YX0VWRU5UX0FOWSwgb25F
Y29yZVhFdmVudCwgd2luKTsKKworICAgIHJldHVybiB3aW47Cit9CisKK1gxMVdpbmRvdzo6WDEx
V2luZG93KCkKKyAgICA6IG1feDExSW5mbygwKQorICAgICwgbV92aXNpYmxlKGZhbHNlKQorICAg
ICwgbV9yZWN0KEludFJlY3QoKSkKKyAgICAsIG1fZXZlbnRGaWx0ZXIoMCkKKyAgICAsIG1fYWRv
cHRlZCh0cnVlKQoreworfQorCitYMTFXaW5kb3c6OlgxMVdpbmRvdyhFdmFzICpldmFzLCBJbnRS
ZWN0IGdlb21ldHJ5KQorICAgIDogbV94MTFJbmZvKDApCisgICAgLCBtX3Zpc2libGUoZmFsc2Up
CisgICAgLCBtX3JlY3QoZ2VvbWV0cnkpCisgICAgLCBtX2V2ZW50RmlsdGVyKDApCisgICAgLCBt
X2Fkb3B0ZWQoZmFsc2UpCit7CisgICAgRWNvcmVfRXZhcyogZWUgPSBlY29yZV9ldmFzX2Vjb3Jl
X2V2YXNfZ2V0KGV2YXMpOworICAgIFdpbklkIHBhcmVudCA9IGVjb3JlX2V2YXNfd2luZG93X2dl
dChlZSk7CisgICAgaW5pdChwYXJlbnQsIGdlb21ldHJ5KTsKK30KKworWDExV2luZG93OjpYMTFX
aW5kb3coV2luSWQgcGFyZW50LCBJbnRSZWN0IGdlb21ldHJ5KQorICAgIDogbV94MTFJbmZvKDAp
CisgICAgLCBtX3Zpc2libGUoZmFsc2UpCisgICAgLCBtX3JlY3QoZ2VvbWV0cnkpCisgICAgLCBt
X2V2ZW50RmlsdGVyKDApCisgICAgLCBtX2Fkb3B0ZWQoZmFsc2UpCit7CisgICAgaW5pdChwYXJl
bnQsIGdlb21ldHJ5KTsKK30KKworWDExV2luZG93Ojp+WDExV2luZG93KCkKK3sKKyAgICBlY29y
ZV9ldmVudF9oYW5kbGVyX2RlbChtX1hFdmVudEhhbmRsZXIpOworCisgICAgZGVsZXRlIG1feDEx
SW5mbzsKKyAgICBpZiAoIW1fYWRvcHRlZCkKKyAgICAgICAgZWNvcmVfeF93aW5kb3dfZnJlZSht
X3dpbklkKTsKK30KKwordm9pZCBYMTFXaW5kb3c6OnNob3coKQoreworICAgIGlmIChtX3Zpc2li
bGUpCisgICAgICAgIHJldHVybjsKKyAgICBlY29yZV94X3dpbmRvd19zaG93KG1fd2luSWQpOwor
ICAgIG1fdmlzaWJsZSA9IHRydWU7Cit9CisKK3ZvaWQgWDExV2luZG93OjpoaWRlKCkKK3sKKyAg
ICBpZiAobV92aXNpYmxlKQorICAgICAgICByZXR1cm47CisgICAgZWNvcmVfeF93aW5kb3dfaGlk
ZShtX3dpbklkKTsKKyAgICBtX3Zpc2libGUgPSBmYWxzZTsKK30KKwordm9pZCBYMTFXaW5kb3c6
OnNldFZpc2libGUoYm9vbCBvbikKK3sKKyAgICBpZiAob24pCisgICAgICAgIHNob3coKTsKKyAg
ICBlbHNlCisgICAgICAgIGhpZGUoKTsKK30KKwordm9pZCBYMTFXaW5kb3c6Om1vdmUoaW50IHgs
IGludCB5KQoreworICAgIEludFBvaW50IG5ld1BvcyA9IEludFBvaW50KHgsIHkpOworICAgIGlm
IChnZW9tZXRyeSgpLmxvY2F0aW9uKCkgPT0gbmV3UG9zKQorICAgICAgICByZXR1cm47CisKKyAg
ICBlY29yZV94X3dpbmRvd19tb3ZlKHdpbklkKCksIHgsIHkpOworICAgIG1fcmVjdC5zZXRMb2Nh
dGlvbihuZXdQb3MpOworfQorCit2b2lkIFgxMVdpbmRvdzo6cmVzaXplKGludCB3aWR0aCwgaW50
IGhlaWdodCkKK3sKKyAgICBJbnRTaXplIG5ld1NpemUgPSBJbnRTaXplKHdpZHRoLCBoZWlnaHQp
OworCisgICAgaWYgKHNpemUoKSA9PSBuZXdTaXplKQorICAgICAgICByZXR1cm47CisgICAgZWNv
cmVfeF93aW5kb3dfcmVzaXplKHdpbklkKCksIHdpZHRoLCBoZWlnaHQpOworICAgIG1fcmVjdC5z
ZXRTaXplKG5ld1NpemUpOworfQorCit2b2lkIFgxMVdpbmRvdzo6c2V0RnJhbWVSZWN0KGNvbnN0
IEludFJlY3QmIHJlY3QpCit7CisgICAgaWYgKGdlb21ldHJ5KCkgPT0gcmVjdCkKKyAgICAgICAg
cmV0dXJuOworICAgIGVjb3JlX3hfd2luZG93X21vdmVfcmVzaXplKHdpbklkKCksIHJlY3QueCgp
LCByZWN0LnkoKSwgcmVjdC53aWR0aCgpLCByZWN0LmhlaWdodCgpKTsKKyAgICBtX3JlY3QgPSBy
ZWN0OworfQorCit2b2lkIFgxMVdpbmRvdzo6dXBkYXRlKGNvbnN0IEludFJlY3QmIHJlY3QpCit7
CisgICAgZWNvcmVfeF93aW5kb3dfYXJlYV9leHBvc2Uod2luSWQoKSwgcmVjdC54KCksIHJlY3Qu
eSgpLCByZWN0LndpZHRoKCksIHJlY3QuaGVpZ2h0KCkpOworfQorCit2b2lkIFgxMVdpbmRvdzo6
c2V0Rm9jdXMoKQoreworICAgIGVjb3JlX3hfd2luZG93X2ZvY3VzKHdpbklkKCkpOworfQorCit2
b2lkIFgxMVdpbmRvdzo6aW5zdGFsbEV2ZW50RmlsdGVyKFgxMVdpbmRvdyogb2JqZWN0KQorewor
ICAgIG1fZXZlbnRGaWx0ZXIgPSBvYmplY3Q7Cit9CisKK3ZvaWQgWDExV2luZG93Ojpwcm9jZXNz
RXZlbnQoWEV2ZW50KiB4ZXZlbnQpCit7CisgICAgYm9vbCBoYW5kbGVkID0gZmFsc2U7CisKKyAg
ICBpZiAobV9ldmVudEZpbHRlcikKKyAgICAgICAgaGFuZGxlZCA9IG1fZXZlbnRGaWx0ZXItPngx
MUV2ZW50KHhldmVudCk7CisKKyAgICBpZiAoaGFuZGxlZCkKKyAgICAgICAgcmV0dXJuOworCisg
ICAgeDExRXZlbnQoeGV2ZW50KTsKK30KKworYm9vbCBYMTFXaW5kb3c6OngxMUV2ZW50KFhFdmVu
dCogeGV2ZW50KQoreworICAgIHJldHVybiBmYWxzZTsKK30KKworRWluYV9Cb29sIG9uRWNvcmVY
RXZlbnQodm9pZCogb2JqZWN0LCBpbnQgdHlwZSwgdm9pZCogZXZlbnREYXRhKQoreworICAgIFgx
MVdpbmRvdyogd2luID0gc3RhdGljX2Nhc3Q8WDExV2luZG93Kj4ob2JqZWN0KTsKKworICAgIFhF
dmVudCogeGV2ZW50ID0gKFhFdmVudCopIGV2ZW50RGF0YTsKKworICAgIGlmICh4ZXZlbnQtPnR5
cGUgPiAxICYmIHhldmVudC0+eGFueS53aW5kb3cgPT0gd2luLT53aW5JZCgpKQorICAgICAgICB3
aW4tPnByb2Nlc3NFdmVudCh4ZXZlbnQpOworCisgICAgcmV0dXJuIEVDT1JFX0NBTExCQUNLX1JF
TkVXOworfQorCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbHVnaW5zL2VmbC9YMTFXaW5k
b3cuaCBiL1NvdXJjZS9XZWJDb3JlL3BsdWdpbnMvZWZsL1gxMVdpbmRvdy5oCm5ldyBmaWxlIG1v
ZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmM5NzdhZWIKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9wbHVnaW5zL2VmbC9YMTFXaW5kb3cuaApAQCAtMCwwICsxLDEwNSBAQAorLyoK
KyAgICBDb3B5cmlnaHQgKEMpIDIwMDkgSU5kVCAtIEluc3RpdHV0byBOb2tpYSBkZSBUZWNub2xv
Z2lhCisgICAgQ29weXJpZ2h0IChDKSAyMDA5LTIwMTAgUHJvRlVTSU9OIGVtYmVkZGVkIHN5c3Rl
bXMKKyAgICBDb3B5cmlnaHQgKEMpIDIwMDktMjAxMCBTYW1zdW5nIEVsZWN0cm9uaWNzCisKKyAg
ICBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQg
YW5kL29yCisgICAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkg
R2VuZXJhbCBQdWJsaWMKKyAgICBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0
d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAgICB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9y
IChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisKKyAgICBUaGlzIGxpYnJhcnkg
aXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAgICBi
dXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50
eSBvZgorICAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVS
UE9TRS4gIFNlZSB0aGUgR05VCisgICAgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZv
ciBtb3JlIGRldGFpbHMuCisKKyAgICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9m
IHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgICAgYWxvbmcgd2l0aCB0
aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8K
KyAgICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJl
ZXQsIEZpZnRoIEZsb29yLAorICAgIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgorKi8KKwor
I2lmbmRlZiBYMTFXaW5kb3dfaAorI2RlZmluZSBYMTFXaW5kb3dfaAorCisjaW5jbHVkZSAiSW50
UmVjdC5oIgorI2luY2x1ZGUgIlBsdWdpblBhY2thZ2UuaCIKKworI2luY2x1ZGUgPEVjb3JlLmg+
CisjaW5jbHVkZSA8RWNvcmVfWC5oPgorI2luY2x1ZGUgPEV2YXMuaD4KKwordHlwZWRlZiBXaW5k
b3cgV2luSWQ7CisKK2NsYXNzIFgxMUluZm8geworcHVibGljOgorICAgIERpc3BsYXkqIGRpc3Bs
YXkoKSB7IHJldHVybiAoRGlzcGxheSopIGVjb3JlX3hfZGlzcGxheV9nZXQoKTsgfQorICAgIFZp
c3VhbCogdmlzdWFsKCkgeyByZXR1cm4gKFZpc3VhbCopIG1fYXR0LnZpc3VhbDsgfQorICAgIHVu
c2lnbmVkIGludCBkZXB0aCgpIHsgcmV0dXJuIG1fYXR0LmRlcHRoOyB9CisgICAgQ29sb3JtYXAg
Y29sb3JtYXAoKSB7IHJldHVybiBtX2F0dC5jb2xvcm1hcDsgfQorICAgIHVuc2lnbmVkIGludCB4
MTFUaW1lKCkgeyByZXR1cm4gZWNvcmVfeF9jdXJyZW50X3RpbWVfZ2V0KCk7IH0KKworcHJpdmF0
ZToKKyAgICBYMTFJbmZvKFdpbklkIG93bmVyKQorICAgIHsKKyAgICAgICAgbV9vd25lciA9IG93
bmVyOworICAgICAgICBlY29yZV94X3dpbmRvd19hdHRyaWJ1dGVzX2dldChvd25lciwgJm1fYXR0
KTsKKyAgICAgICAgbV9hdHQuY29sb3JtYXAgPSBEZWZhdWx0Q29sb3JtYXAoZGlzcGxheSgpLCBE
ZWZhdWx0U2NyZWVuKGRpc3BsYXkoKSkpOworICAgIH0KKyAgICBXaW5JZCBtX293bmVyOworICAg
IEVjb3JlX1hfV2luZG93X0F0dHJpYnV0ZXMgbV9hdHQ7CisgICAgZnJpZW5kIGNsYXNzIFgxMVdp
bmRvdzsKK307CisKK2NsYXNzIFgxMVdpbmRvdyB7CitwdWJsaWM6CisgICAgWDExV2luZG93KEV2
YXMgKiwgV2ViQ29yZTo6SW50UmVjdCBnZW9tZXRyeSA9IFdlYkNvcmU6OkludFJlY3QoMCwgMCwg
MzIsIDMyKSk7CisgICAgWDExV2luZG93KFdpbklkIHBhcmVudCwgV2ViQ29yZTo6SW50UmVjdCBn
ZW9tZXRyeSA9IFdlYkNvcmU6OkludFJlY3QoMCwgMCwgMzIsIDMyKSk7CisgICAgflgxMVdpbmRv
dygpOworCisgICAgc3RhdGljIFgxMVdpbmRvdyogYWRvcHQoV2luSWQpOworCisgICAgWDExSW5m
byogeDExSW5mbygpCisgICAgeworICAgICAgICBpZiAoIW1feDExSW5mbykKKyAgICAgICAgICAg
IG1feDExSW5mbyA9IG5ldyBYMTFJbmZvKG1fd2luSWQpOworICAgICAgICByZXR1cm4gbV94MTFJ
bmZvOworICAgIH0KKworICAgIFdlYkNvcmU6OkludFNpemUgc2l6ZSgpIHsgcmV0dXJuIG1fcmVj
dC5zaXplKCk7IH0KKyAgICBXZWJDb3JlOjpJbnRSZWN0IGdlb21ldHJ5KCkgeyByZXR1cm4gbV9y
ZWN0OyB9CisKKyAgICB2b2lkIGluc3RhbGxFdmVudEZpbHRlcihYMTFXaW5kb3cqKTsKKyAgICB2
b2lkIHByb2Nlc3NFdmVudChYRXZlbnQqIHhldmVudCk7CisgICAgdmlydHVhbCBib29sIHgxMUV2
ZW50KFhFdmVudCopOworCisgICAgdmlydHVhbCB2b2lkIHNldEZyYW1lUmVjdChjb25zdCBXZWJD
b3JlOjpJbnRSZWN0Jik7CisKKyAgICB2aXJ0dWFsIHZvaWQgbW92ZShpbnQgeCwgaW50IHkpOwor
ICAgIHZpcnR1YWwgdm9pZCByZXNpemUoaW50IHdpZHRoLCBpbnQgaGVpZ2h0KTsKKworICAgIHZp
cnR1YWwgdm9pZCB1cGRhdGUoY29uc3QgV2ViQ29yZTo6SW50UmVjdCYpOworCisgICAgdmlydHVh
bCB2b2lkIHNob3coKTsKKyAgICB2aXJ0dWFsIHZvaWQgaGlkZSgpOworICAgIHZvaWQgc2V0Vmlz
aWJsZShib29sIG9uKTsKKyAgICB2aXJ0dWFsIHZvaWQgc2V0Rm9jdXMoKTsKKworICAgIFdpbklk
IHdpbklkKCkgeyByZXR1cm4gbV93aW5JZDsgfQorCitwcm90ZWN0ZWQ6CisgICAgWDExV2luZG93
KCk7CisgICAgdm9pZCBpbml0KFdpbklkIHBhcmVudCwgV2ViQ29yZTo6SW50UmVjdCYgZ2VvbWV0
cnkpOworICAgIHZvaWQgYWNjZXB0RXZlbnRUeXBlKGludCB0eXBlKTsKKworICAgIFdpbklkIG1f
d2luSWQ7CisgICAgWDExSW5mbyogbV94MTFJbmZvOworICAgIGJvb2wgbV92aXNpYmxlOworICAg
IFdlYkNvcmU6OkludFJlY3QgbV9yZWN0OworICAgIFgxMVdpbmRvdyogbV9ldmVudEZpbHRlcjsK
KyAgICBFY29yZV9FdmVudF9IYW5kbGVyKiBtX1hFdmVudEhhbmRsZXI7CisgICAgYm9vbCBtX2Fk
b3B0ZWQ7Cit9OworCisKKyNlbmRpZiAvLyBYMTFXaW5kb3dfaApkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYktpdC9lZmwvQ2hhbmdlTG9nIGIvU291cmNlL1dlYktpdC9lZmwvQ2hhbmdlTG9nCmluZGV4
IGQ2MTcwNDguLjVmM2E2OTAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvZWZsL0NoYW5nZUxv
ZworKysgYi9Tb3VyY2UvV2ViS2l0L2VmbC9DaGFuZ2VMb2cKQEAgLTEsMyArMSwxMiBAQAorMjAx
MS0wMi0wNCAgTWFyaXVzeiBHcnplZ29yY3p5ayAgPG1hcml1c3ouZ0BzYW1zdW5nLmNvbT4KKwor
ICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBDcmVhdGluZyBQ
bHVnaW5WaWV3IGluIGV3a19mcmFtZV9wbHVnaW5fY3JlYXRlKCkgZnVuY3Rpb24KKworICAgICAg
ICAqIGV3ay9ld2tfZnJhbWUuY3BwOgorICAgICAgICAoZXdrX2ZyYW1lX3BsdWdpbl9jcmVhdGUp
OgorCiAyMDExLTAxLTI5ICBEYW4gV2luc2hpcCAgPGRhbndAZ25vbWUub3JnPgogCiAgICAgICAg
IFJldmlld2VkIGJ5IFhhbiBMb3Blei4KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvZWZsL2V3
ay9ld2tfZnJhbWUuY3BwIGIvU291cmNlL1dlYktpdC9lZmwvZXdrL2V3a19mcmFtZS5jcHAKaW5k
ZXggZjI2ZDRjZi4uYzZkMmY5ZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9lZmwvZXdrL2V3
a19mcmFtZS5jcHAKKysrIGIvU291cmNlL1dlYktpdC9lZmwvZXdrL2V3a19mcmFtZS5jcHAKQEAg
LTIwMzMsNSArMjAzMywyNCBAQCB2b2lkIGV3a19mcmFtZV9mb3JjZV9sYXlvdXQoRXZhc19PYmpl
Y3QqIG8pCiAKIFdURjo6UGFzc1JlZlB0cjxXZWJDb3JlOjpXaWRnZXQ+IGV3a19mcmFtZV9wbHVn
aW5fY3JlYXRlKEV2YXNfT2JqZWN0KiBvLCBjb25zdCBXZWJDb3JlOjpJbnRTaXplJiBwbHVnaW5T
aXplLCBXZWJDb3JlOjpIVE1MUGx1Z0luRWxlbWVudCogZWxlbWVudCwgY29uc3QgV2ViQ29yZTo6
S1VSTCYgdXJsLCBjb25zdCBXVEY6OlZlY3RvcjxXVEY6OlN0cmluZz4mIHBhcmFtTmFtZXMsIGNv
bnN0IFdURjo6VmVjdG9yPFdURjo6U3RyaW5nPiYgcGFyYW1WYWx1ZXMsIGNvbnN0IFdURjo6U3Ry
aW5nJiBtaW1lVHlwZSwgYm9vbCBsb2FkTWFudWFsbHkpCiB7CisjaWYgRU5BQkxFKE5FVFNDQVBF
X1BMVUdJTl9BUEkpCisgICAgREJHKCJvPSVwLCBzaXplPSVkeCVkLCBlbGVtZW50PSVwLCB1cmw9
JXMsIG1pbWVUeXBlPSVzIiwKKyAgICAgICAgbywgcGx1Z2luU2l6ZS53aWR0aCgpLCBwbHVnaW5T
aXplLmhlaWdodCgpLCBlbGVtZW50LAorICAgICAgICB1cmwucHJldHR5VVJMKCkudXRmOCgpLmRh
dGEoKSwgbWltZVR5cGUudXRmOCgpLmRhdGEoKSk7CisKKyAgICBFV0tfRlJBTUVfU0RfR0VUX09S
X1JFVFVSTihvLCBzZCwgMCk7CisKKyAgICAvLyBUT0RPOiBlbWl0IHNpZ25hbCBhbmQgYXNrIHdl
YmtpdCB1c2VycyBpZiBzb21ldGhpbmcgZWxzZSBzaG91bGQgYmUgZG9uZS4KKyAgICAvLyBsaWtl
IGNyZWF0aW5nIGFub3RoZXIgeCB3aW5kb3cgKHNlZSBndGssIGl0IGFsbG93cyB1c2VycyB0byBj
cmVhdGUKKyAgICAvLyBHdGtQbHVnaW5XaWRnZXQuCisKKyAgICBXVEY6OlJlZlB0cjxXZWJDb3Jl
OjpQbHVnaW5WaWV3PiBwbHVnaW5WaWV3ID0gV2ViQ29yZTo6UGx1Z2luVmlldzo6Y3JlYXRlCisg
ICAgICAgIChzZC0+ZnJhbWUsIHBsdWdpblNpemUsIGVsZW1lbnQsIHVybCwgcGFyYW1OYW1lcywg
cGFyYW1WYWx1ZXMsCisgICAgICAgIG1pbWVUeXBlLCBsb2FkTWFudWFsbHkpOworCisgICAgaWYg
KHBsdWdpblZpZXctPnN0YXR1cygpID09IFdlYkNvcmU6OlBsdWdpblN0YXR1c0xvYWRlZFN1Y2Nl
c3NmdWxseSkKKyAgICAgICAgcmV0dXJuIHBsdWdpblZpZXc7CisjZWxzZQogICAgIHJldHVybiAw
OworI2VuZGlmIC8vICNpZiBFTkFCTEUoTkVUU0NBUEVfUExVR0lOX0FQSSkKIH0K
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>81215</attachid>
            <date>2011-02-04 07:10:05 -0800</date>
            <delta_ts>2011-03-14 06:21:30 -0700</delta_ts>
            <desc>EFL&apos;s plugin support</desc>
            <filename>eflplugin.patch</filename>
            <type>text/plain</type>
            <size>54540</size>
            <attacher name="Mariusz Grzegorczyk">mariusz.g</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cgYi9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvQ2hhbmdlTG9nCmluZGV4IGFjZmQwZTQuLjYyNmE0MGQgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKKysrIGIvU291cmNlL0phdmFTY3JpcHRD
b3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDExIEBACisyMDExLTAyLTA0ICBNYXJpdXN6IEdyemVn
b3JjenlrICA8bWFyaXVzei5nQHNhbXN1bmcuY29tPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5P
Qk9EWSAoT09QUyEpLgorCisgICAgICAgIFN1cHBvcnQgZm9yIGVmbCdzIHBsdWdpbiBwYXJ0CisK
KyAgICAgICAgKiB3dGYvUGxhdGZvcm0uaDoKKwogMjAxMS0wMS0zMCAgQ3NhYmEgT3N6dHJvZ29u
w6FjICA8b3NzeUB3ZWJraXQub3JnPgogCiAgICAgICAgIFVucmV2aWV3ZWQsIHJvbGxpbmcgb3V0
IHI3NzA5OCwgcjc3MDk5LCByNzcxMDAsIHI3NzEwOSwgYW5kCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvd3RmL1BsYXRmb3JtLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd3Rm
L1BsYXRmb3JtLmgKaW5kZXggMDdmNTdmMC4uNjRkY2MzZCAxMDA2NDQKLS0tIGEvU291cmNlL0ph
dmFTY3JpcHRDb3JlL3d0Zi9QbGF0Zm9ybS5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93
dGYvUGxhdGZvcm0uaApAQCAtMTEwMSw3ICsxMTAxLDcgQEAKICNkZWZpbmUgV0FSTl9VTlVTRURf
UkVUVVJOCiAjZW5kaWYKIAotI2lmICFFTkFCTEUoTkVUU0NBUEVfUExVR0lOX0FQSSkgfHwgKEVO
QUJMRShORVRTQ0FQRV9QTFVHSU5fQVBJKSAmJiAoKE9TKFVOSVgpICYmIChQTEFURk9STShRVCkg
fHwgUExBVEZPUk0oV1gpKSkgfHwgUExBVEZPUk0oR1RLKSkpCisjaWYgIUVOQUJMRShORVRTQ0FQ
RV9QTFVHSU5fQVBJKSB8fCAoRU5BQkxFKE5FVFNDQVBFX1BMVUdJTl9BUEkpICYmICgoT1MoVU5J
WCkgJiYgKFBMQVRGT1JNKFFUKSB8fCBQTEFURk9STShXWCkpKSB8fCBQTEFURk9STShHVEspIHx8
IFBMQVRGT1JNKEVGTCkpKQogI2RlZmluZSBFTkFCTEVfUExVR0lOX1BBQ0tBR0VfU0lNUExFX0hB
U0ggMQogI2VuZGlmCiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0NNYWtlTGlzdHNFZmwu
dHh0IGIvU291cmNlL1dlYkNvcmUvQ01ha2VMaXN0c0VmbC50eHQKaW5kZXggMmZmOGM0ZS4uMTlh
MTJmNSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ01ha2VMaXN0c0VmbC50eHQKKysrIGIv
U291cmNlL1dlYkNvcmUvQ01ha2VMaXN0c0VmbC50eHQKQEAgLTExLDYgKzExLDcgQEAgTElTVChB
UFBFTkQgV2ViQ29yZV9JTkNMVURFX0RJUkVDVE9SSUVTCiAgICIke1dFQkNPUkVfRElSfS9wbGF0
Zm9ybS9ncmFwaGljcy9lZmwiCiAgICIke1dFQkNPUkVfRElSfS9wYWdlL2VmbCIKICAgIiR7V0VC
Q09SRV9ESVJ9L2FjY2Vzc2liaWxpdHkvZWZsIgorICAiJHtXRUJDT1JFX0RJUn0vcGx1Z2lucy9l
ZmwiCiAgICIke1dFQktJVF9ESVJ9L2VmbC9XZWJDb3JlU3VwcG9ydCIKICAgIiR7V0VCS0lUX0RJ
Un0vZWZsL2V3ayIKICkKQEAgLTYxLDkgKzYyLDMxIEBAIExJU1QoQVBQRU5EIFdlYkNvcmVfU09V
UkNFUwogICBwbGF0Zm9ybS9ncmFwaGljcy9lZmwvSW50UmVjdEVmbC5jcHAKICAgcGxhdGZvcm0v
cG9zaXgvRmlsZVN5c3RlbVBPU0lYLmNwcAogICBwbGF0Zm9ybS90ZXh0L2VmbC9UZXh0QnJlYWtJ
dGVyYXRvckludGVybmFsSUNVRWZsLmNwcAotICBwbHVnaW5zL1BsdWdpbkRhdGFOb25lLmNwcAog
KQogCisKK0lGIChFTkFCTEVfTkVUU0NBUEVfUExVR0lOX0FQSSkKKyAgICBMSVNUKEFQUEVORCBX
ZWJDb3JlX1NPVVJDRVMKKyAgICBwbHVnaW5zL1BsdWdpbkRhdGFiYXNlLmNwcAorICAgIHBsdWdp
bnMvUGx1Z2luRGVidWcuY3BwCisgICAgcGx1Z2lucy9QbHVnaW5QYWNrYWdlLmNwcAorICAgIHBs
dWdpbnMvUGx1Z2luU3RyZWFtLmNwcAorICAgIHBsdWdpbnMvUGx1Z2luVmlldy5jcHAKKyAgICBw
bHVnaW5zL2VmbC9QbHVnaW5EYXRhRWZsLmNwcAorICAgIHBsdWdpbnMvZWZsL1BsdWdpblBhY2th
Z2VFZmwuY3BwCisgICAgcGx1Z2lucy9lZmwvUGx1Z2luVmlld0VmbC5jcHAKKyAgICBwbHVnaW5z
L2VmbC9YMTFFbWJlZENvbnRhaW5lci5jcHAKKyAgICBwbHVnaW5zL2VmbC9YMTFXaW5kb3cuY3Bw
CisgICAgKQorRUxTRSAoKQorICAgIExJU1QoQVBQRU5EIFdlYkNvcmVfU09VUkNFUworICAgIHBs
dWdpbnMvUGx1Z2luRGF0YU5vbmUuY3BwCisgICAgcGx1Z2lucy9QbHVnaW5QYWNrYWdlTm9uZS5j
cHAKKyAgICBwbHVnaW5zL1BsdWdpblZpZXdOb25lLmNwcAorICAgICkKK0VORElGICgpCisKKwog
SUYgKFdURl9QTEFURk9STV9DQUlSTykKICAgTElTVChBUFBFTkQgV2ViQ29yZV9JTkNMVURFX0RJ
UkVDVE9SSUVTCiAgICAgIiR7V0VCQ09SRV9ESVJ9L3BsYXRmb3JtL2dyYXBoaWNzL2NhaXJvIgpA
QCAtMTI2LDYgKzE0OSw3IEBAIElGIChXVEZfVVNFX1NPVVApCiAgIExJU1QoQVBQRU5EIFdlYkNv
cmVfU09VUkNFUwogICAgIHBsYXRmb3JtL25ldHdvcmsvc291cC9Db29raWVKYXJTb3VwLmNwcAog
ICAgIHBsYXRmb3JtL25ldHdvcmsvc291cC9HT3duUHRyU291cC5jcHAKKyAgICBwbGF0Zm9ybS9u
ZXR3b3JrL3NvdXAvUHJveHlTZXJ2ZXJTb3VwLmNwcAogICAgIHBsYXRmb3JtL25ldHdvcmsvc291
cC9SZXNvdXJjZUhhbmRsZVNvdXAuY3BwCiAgICAgcGxhdGZvcm0vbmV0d29yay9zb3VwL1Jlc291
cmNlUmVxdWVzdFNvdXAuY3BwCiAgICAgcGxhdGZvcm0vbmV0d29yay9zb3VwL1Jlc291cmNlUmVz
cG9uc2VTb3VwLmNwcApAQCAtMTUyLDYgKzE3Niw3IEBAIElGIChXVEZfVVNFX0NVUkwpCiAgICAg
cGxhdGZvcm0vbmV0d29yay9jdXJsL0Nvb2tpZUphckN1cmwuY3BwCiAgICAgcGxhdGZvcm0vbmV0
d29yay9jdXJsL0ROU0N1cmwuY3BwCiAgICAgcGxhdGZvcm0vbmV0d29yay9jdXJsL0Zvcm1EYXRh
U3RyZWFtQ3VybC5jcHAKKyAgICBwbGF0Zm9ybS9uZXR3b3JrL2N1cmwvUHJveHlTZXJ2ZXJDdXJs
LmNwcAogICAgIHBsYXRmb3JtL25ldHdvcmsvY3VybC9SZXNvdXJjZUhhbmRsZUN1cmwuY3BwCiAg
ICAgcGxhdGZvcm0vbmV0d29yay9jdXJsL1Jlc291cmNlSGFuZGxlTWFuYWdlci5jcHAKICAgICBw
bGF0Zm9ybS9uZXR3b3JrL2N1cmwvU29ja2V0U3RyZWFtSGFuZGxlQ3VybC5jcHAKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpp
bmRleCAwY2RiZmI3Li40YTFmMDUzIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VM
b2cKKysrIGIvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsOTMgQEAKKzIwMTEt
MDItMDQgIE1hcml1c3ogR3J6ZWdvcmN6eWsgIDxtYXJpdXN6LmdAc2Ftc3VuZy5jb20+CisKKyAg
ICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgQWRkZWQgbWlzc2lu
ZyBlZmwgcGx1Z2luJ3MgcGFydAorCisgICAgICAgIE5vIG5ldyB0ZXN0cy4gKE9PUFMhKQorCisg
ICAgICAgICogQ01ha2VMaXN0c0VmbC50eHQ6CisgICAgICAgICogcGx1Z2lucy9QbHVnaW5WaWV3
Lmg6CisgICAgICAgICogcGx1Z2lucy9lZmwvUGx1Z2luRGF0YUVmbC5jcHA6IEFkZGVkLgorICAg
ICAgICAoV2ViQ29yZTo6UGx1Z2luRGF0YTo6aW5pdFBsdWdpbnMpOgorICAgICAgICAoV2ViQ29y
ZTo6UGx1Z2luRGF0YTo6cmVmcmVzaCk6CisgICAgICAgICogcGx1Z2lucy9lZmwvUGx1Z2luUGFj
a2FnZUVmbC5jcHA6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6UGx1Z2luUGFja2FnZTo6ZmV0
Y2hJbmZvKToKKyAgICAgICAgKFdlYkNvcmU6OlBsdWdpblBhY2thZ2U6Ok5QVmVyc2lvbik6Cisg
ICAgICAgIChXZWJDb3JlOjpQbHVnaW5QYWNrYWdlOjpsb2FkKToKKyAgICAgICAgKiBwbHVnaW5z
L2VmbC9QbHVnaW5WaWV3RWZsLmNwcDogQWRkZWQuCisgICAgICAgIChXZWJDb3JlOjpQbHVnaW5W
aWV3OjpkaXNwYXRjaE5QRXZlbnQpOgorICAgICAgICAoV2ViQ29yZTo6UGx1Z2luVmlldzo6aGFs
dCk6CisgICAgICAgIChXZWJDb3JlOjpQbHVnaW5WaWV3OjpoYW5kbGVGb2N1c0luRXZlbnQpOgor
ICAgICAgICAoV2ViQ29yZTo6UGx1Z2luVmlldzo6aGFuZGxlRm9jdXNPdXRFdmVudCk6CisgICAg
ICAgIChXZWJDb3JlOjpQbHVnaW5WaWV3OjpyZXN0YXJ0KToKKyAgICAgICAgKFdlYkNvcmU6OlBs
dWdpblZpZXc6OmhhbmRsZUtleWJvYXJkRXZlbnQpOgorICAgICAgICAoV2ViQ29yZTo6UGx1Z2lu
Vmlldzo6aGFuZGxlTW91c2VFdmVudCk6CisgICAgICAgIChXZWJDb3JlOjpQbHVnaW5WaWV3Ojp1
cGRhdGVQbHVnaW5XaWRnZXQpOgorICAgICAgICAoV2ViQ29yZTo6UGx1Z2luVmlldzo6c2V0Rm9j
dXMpOgorICAgICAgICAoV2ViQ29yZTo6UGx1Z2luVmlldzo6c2hvdyk6CisgICAgICAgIChXZWJD
b3JlOjpQbHVnaW5WaWV3OjpoaWRlKToKKyAgICAgICAgKFdlYkNvcmU6OlBsdWdpblZpZXc6OnBh
aW50KToKKyAgICAgICAgKFdlYkNvcmU6OlBsdWdpblZpZXc6OnNldFBhcmVudCk6CisgICAgICAg
IChXZWJDb3JlOjpQbHVnaW5WaWV3OjpzZXROUFdpbmRvd1JlY3QpOgorICAgICAgICAoV2ViQ29y
ZTo6UGx1Z2luVmlldzo6c2V0TlBXaW5kb3dJZk5lZWRlZCk6CisgICAgICAgIChXZWJDb3JlOjpQ
bHVnaW5WaWV3OjpzZXRQYXJlbnRWaXNpYmxlKToKKyAgICAgICAgKFdlYkNvcmU6OlBsdWdpblZp
ZXc6OmhhbmRsZVBvc3RSZWFkRmlsZSk6CisgICAgICAgIChXZWJDb3JlOjpQbHVnaW5WaWV3Ojpw
bGF0Zm9ybUdldFZhbHVlU3RhdGljKToKKyAgICAgICAgKFdlYkNvcmU6OlBsdWdpblZpZXc6OnBs
YXRmb3JtR2V0VmFsdWUpOgorICAgICAgICAoV2ViQ29yZTo6UGx1Z2luVmlldzo6aW52YWxpZGF0
ZVJlY3QpOgorICAgICAgICAoV2ViQ29yZTo6UGx1Z2luVmlldzo6aW52YWxpZGF0ZVJlZ2lvbik6
CisgICAgICAgIChXZWJDb3JlOjpQbHVnaW5WaWV3Ojpmb3JjZVJlZHJhdyk6CisgICAgICAgIChX
ZWJDb3JlOjpQbHVnaW5WaWV3OjpwbGF0Zm9ybVN0YXJ0KToKKyAgICAgICAgKFdlYkNvcmU6OlBs
dWdpblZpZXc6OnBsYXRmb3JtRGVzdHJveSk6CisgICAgICAgICogcGx1Z2lucy9lZmwvWDExRW1i
ZWRDb250YWluZXIuY3BwOiBBZGRlZC4KKyAgICAgICAgKFgxMUVtYmVkQ29udGFpbmVyOjpYMTFF
bWJlZENvbnRhaW5lcik6CisgICAgICAgIChYMTFFbWJlZENvbnRhaW5lcjo6flgxMUVtYmVkQ29u
dGFpbmVyKToKKyAgICAgICAgKFgxMUVtYmVkQ29udGFpbmVyOjptb3ZlSW5wdXRGb2N1c1RvUHJv
eHkpOgorICAgICAgICAoWDExRW1iZWRDb250YWluZXI6OmFjY2VwdCk6CisgICAgICAgIChYMTFF
bWJlZENvbnRhaW5lcjo6cmVqZWN0KToKKyAgICAgICAgKFgxMUVtYmVkQ29udGFpbmVyOjpzaG93
KToKKyAgICAgICAgKFgxMUVtYmVkQ29udGFpbmVyOjpoaWRlKToKKyAgICAgICAgKFgxMUVtYmVk
Q29udGFpbmVyOjpyZXNpemUpOgorICAgICAgICAoWDExRW1iZWRDb250YWluZXI6OnNldEZyYW1l
UmVjdCk6CisgICAgICAgIChYMTFFbWJlZENvbnRhaW5lcjo6c2V0Rm9jdXMpOgorICAgICAgICAo
WDExRW1iZWRDb250YWluZXI6Omhhc0ZvY3VzKToKKyAgICAgICAgKFgxMUVtYmVkQ29udGFpbmVy
Ojppc0FjdGl2ZSk6CisgICAgICAgIChYMTFFbWJlZENvbnRhaW5lcjo6cm9vdFdpbmRvdyk6Cisg
ICAgICAgIChYMTFFbWJlZENvbnRhaW5lcjo6eDExRXZlbnQpOgorICAgICAgICAoc2VuZFhFbWJl
ZE1lc3NhZ2UpOgorICAgICAgICAqIHBsdWdpbnMvZWZsL1gxMUVtYmVkQ29udGFpbmVyLmg6IEFk
ZGVkLgorICAgICAgICAoWDExRW1iZWRDb250YWluZXI6OmNsaWVudCk6CisgICAgICAgIChYMTFF
bWJlZENvbnRhaW5lcjo6c2V0Q2xpZW50KToKKyAgICAgICAgKiBwbHVnaW5zL2VmbC9YMTFXaW5k
b3cuY3BwOiBBZGRlZC4KKyAgICAgICAgKFgxMVdpbmRvdzo6aW5pdCk6CisgICAgICAgIChYMTFX
aW5kb3c6OmFkb3B0KToKKyAgICAgICAgKFgxMVdpbmRvdzo6WDExV2luZG93KToKKyAgICAgICAg
KFgxMVdpbmRvdzo6flgxMVdpbmRvdyk6CisgICAgICAgIChYMTFXaW5kb3c6OnNob3cpOgorICAg
ICAgICAoWDExV2luZG93OjpoaWRlKToKKyAgICAgICAgKFgxMVdpbmRvdzo6c2V0VmlzaWJsZSk6
CisgICAgICAgIChYMTFXaW5kb3c6Om1vdmUpOgorICAgICAgICAoWDExV2luZG93OjpyZXNpemUp
OgorICAgICAgICAoWDExV2luZG93OjpzZXRGcmFtZVJlY3QpOgorICAgICAgICAoWDExV2luZG93
Ojp1cGRhdGUpOgorICAgICAgICAoWDExV2luZG93OjpzZXRGb2N1cyk6CisgICAgICAgIChYMTFX
aW5kb3c6Omluc3RhbGxFdmVudEZpbHRlcik6CisgICAgICAgIChYMTFXaW5kb3c6OnByb2Nlc3NF
dmVudCk6CisgICAgICAgIChYMTFXaW5kb3c6OngxMUV2ZW50KToKKyAgICAgICAgKG9uRWNvcmVY
RXZlbnQpOgorICAgICAgICAqIHBsdWdpbnMvZWZsL1gxMVdpbmRvdy5oOiBBZGRlZC4KKyAgICAg
ICAgKFgxMUluZm86OmRpc3BsYXkpOgorICAgICAgICAoWDExSW5mbzo6dmlzdWFsKToKKyAgICAg
ICAgKFgxMUluZm86OmRlcHRoKToKKyAgICAgICAgKFgxMUluZm86OmNvbG9ybWFwKToKKyAgICAg
ICAgKFgxMUluZm86OngxMVRpbWUpOgorICAgICAgICAoWDExSW5mbzo6WDExSW5mbyk6CisgICAg
ICAgIChYMTFXaW5kb3c6OngxMUluZm8pOgorICAgICAgICAoWDExV2luZG93OjpzaXplKToKKyAg
ICAgICAgKFgxMVdpbmRvdzo6Z2VvbWV0cnkpOgorICAgICAgICAoWDExV2luZG93Ojp3aW5JZCk6
CisKIDIwMTEtMDEtMzEgIEFudHRpIEtvaXZpc3RvICA8YW50dGlAYXBwbGUuY29tPgogCiAgICAg
ICAgIE5vdCByZXZpZXdlZC4KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsdWdpbnMvUGx1
Z2luVmlldy5oIGIvU291cmNlL1dlYkNvcmUvcGx1Z2lucy9QbHVnaW5WaWV3LmgKaW5kZXggOGY4
ZjEzZi4uYzgyMGYyOCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGx1Z2lucy9QbHVnaW5W
aWV3LmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGx1Z2lucy9QbHVnaW5WaWV3LmgKQEAgLTUxLDYg
KzUxLDkgQEAKICNpZiBPUyhXSU5ET1dTKSAmJiAoUExBVEZPUk0oUVQpIHx8IFBMQVRGT1JNKFdY
KSkKIHR5cGVkZWYgc3RydWN0IEhXTkRfXyogSFdORDsKIHR5cGVkZWYgSFdORCBQbGF0Zm9ybVBs
dWdpbldpZGdldDsKKyNlbGlmIFBMQVRGT1JNKEVGTCkKK2NsYXNzIFgxMUVtYmVkQ29udGFpbmVy
OwordHlwZWRlZiBYMTFFbWJlZENvbnRhaW5lciogUGxhdGZvcm1QbHVnaW5XaWRnZXQ7CiAjZWxz
ZQogdHlwZWRlZiBQbGF0Zm9ybVdpZGdldCBQbGF0Zm9ybVBsdWdpbldpZGdldDsKICNpZiBkZWZp
bmVkKFhQX01BQ09TWCkgJiYgUExBVEZPUk0oUVQpCkBAIC0zNzIsNyArMzc1LDcgQEAgbmFtZXNw
YWNlIFdlYkNvcmUgewogICAgICAgICBib29sIG1faGF2ZVVwZGF0ZWRQbHVnaW5XaWRnZXQ7CiAj
ZW5kaWYKIAotI2lmICgoUExBVEZPUk0oUVQpIHx8IFBMQVRGT1JNKFdYKSkgJiYgT1MoV0lORE9X
UykpIHx8IGRlZmluZWQoWFBfTUFDT1NYKQorI2lmICgoUExBVEZPUk0oUVQpIHx8IFBMQVRGT1JN
KFdYKSkgJiYgT1MoV0lORE9XUykpIHx8IGRlZmluZWQoWFBfTUFDT1NYKSB8fCBQTEFURk9STShF
RkwpCiAgICAgICAgIC8vIE9uIE1hYyBPU1ggYW5kIFF0L1dpbmRvd3MgdGhlIHBsdWdpbiBkb2Vz
IG5vdCBoYXZlIGl0cyBvd24gbmF0aXZlIHdpZGdldCwKICAgICAgICAgLy8gYnV0IGlzIHVzaW5n
IHRoZSBjb250YWluaW5nIHdpbmRvdyBhcyBpdHMgcmVmZXJlbmNlIGZvciBwb3NpdGlvbmluZy9w
YWludGluZy4KICAgICAgICAgUGxhdGZvcm1QbHVnaW5XaWRnZXQgbV93aW5kb3c7CmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9wbHVnaW5zL2VmbC9QbHVnaW5EYXRhRWZsLmNwcCBiL1NvdXJj
ZS9XZWJDb3JlL3BsdWdpbnMvZWZsL1BsdWdpbkRhdGFFZmwuY3BwCm5ldyBmaWxlIG1vZGUgMTAw
NjQ0CmluZGV4IDAwMDAwMDAuLjA0YmI5MDIKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9wbHVnaW5zL2VmbC9QbHVnaW5EYXRhRWZsLmNwcApAQCAtMCwwICsxLDY4IEBACisvKgor
ICAgIENvcHlyaWdodCAoQykgMjAwNiwgMjAwNyBBcHBsZSBJbmMuICBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgorICAgIENvcHlyaWdodCAoQykgMjAwOCBUcm9sbHRlY2ggQVNBCisgICAgQ29weXJpZ2h0
IChDKSAyMDA4IENvbGxhYm9yYSBMdGQuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgICAgQ29weXJp
Z2h0IChDKSAyMDA4IElOZFQgLSBJbnN0aXR1dG8gTm9raWEgZGUgVGVjbm9sb2dpYQorICAgIENv
cHlyaWdodCAoQykgMjAwOS0yMDEwIFByb0ZVU0lPTiBlbWJlZGRlZCBzeXN0ZW1zCisgICAgQ29w
eXJpZ2h0IChDKSAyMDA5LTIwMTAgU2Ftc3VuZyBFbGVjdHJvbmljcworCisgICAgVGhpcyBsaWJy
YXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICAg
IG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVi
bGljCisgICAgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRh
dGlvbjsgZWl0aGVyCisgICAgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBv
cHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorCisgICAgVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1
dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgICAgYnV0IFdJVEhPVVQg
QU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAgICBN
RVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUg
dGhlIEdOVQorICAgIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRh
aWxzLgorCisgICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExp
YnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICAgIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5
OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCisgICAgdGhlIEZy
ZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBG
bG9vciwKKyAgICBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKyovCisKKyNpbmNsdWRlICJj
b25maWcuaCIKKyNpbmNsdWRlICJQbHVnaW5EYXRhLmgiCisKKyNpbmNsdWRlICJQbHVnaW5EYXRh
YmFzZS5oIgorI2luY2x1ZGUgIlBsdWdpblBhY2thZ2UuaCIKKworbmFtZXNwYWNlIFdlYkNvcmUg
eworCit2b2lkIFBsdWdpbkRhdGE6OmluaXRQbHVnaW5zKGNvbnN0IFBhZ2UqKQoreworICAgIFBs
dWdpbkRhdGFiYXNlKiBkYiA9IFBsdWdpbkRhdGFiYXNlOjppbnN0YWxsZWRQbHVnaW5zKCk7Cisg
ICAgY29uc3QgVmVjdG9yPFBsdWdpblBhY2thZ2UqPiAmcGx1Z2lucyA9IGRiLT5wbHVnaW5zKCk7
CisKKyAgICBmb3IgKHVuc2lnbmVkIGludCBpID0gMDsgaSA8IHBsdWdpbnMuc2l6ZSgpOyArK2kp
IHsKKyAgICAgICAgUGx1Z2luSW5mbyBpbmZvOworICAgICAgICBQbHVnaW5QYWNrYWdlKiBwYWNr
YWdlID0gcGx1Z2luc1tpXTsKKworICAgICAgICBpbmZvLm5hbWUgPSBwYWNrYWdlLT5uYW1lKCk7
CisgICAgICAgIGluZm8uZmlsZSA9IHBhY2thZ2UtPmZpbGVOYW1lKCk7CisgICAgICAgIGluZm8u
ZGVzYyA9IHBhY2thZ2UtPmRlc2NyaXB0aW9uKCk7CisKKyAgICAgICAgY29uc3QgTUlNRVRvRGVz
Y3JpcHRpb25zTWFwJiBtaW1lVG9EZXNjcmlwdGlvbnMgPSBwYWNrYWdlLT5taW1lVG9EZXNjcmlw
dGlvbnMoKTsKKyAgICAgICAgTUlNRVRvRGVzY3JpcHRpb25zTWFwOjpjb25zdF9pdGVyYXRvciBl
bmQgPSBtaW1lVG9EZXNjcmlwdGlvbnMuZW5kKCk7CisgICAgICAgIGZvciAoTUlNRVRvRGVzY3Jp
cHRpb25zTWFwOjpjb25zdF9pdGVyYXRvciBpdCA9IG1pbWVUb0Rlc2NyaXB0aW9ucy5iZWdpbigp
OyBpdCAhPSBlbmQ7ICsraXQpIHsKKyAgICAgICAgICAgIE1pbWVDbGFzc0luZm8gbWltZTsKKyAg
ICAgICAgICAgIAorICAgICAgICAgICAgbWltZS50eXBlID0gaXQtPmZpcnN0OworICAgICAgICAg
ICAgbWltZS5kZXNjID0gaXQtPnNlY29uZDsKKworICAgICAgICAgICAgVmVjdG9yPFN0cmluZz4g
ZXh0ZW5zaW9ucyA9IHBhY2thZ2UtPm1pbWVUb0V4dGVuc2lvbnMoKS5nZXQobWltZS50eXBlKTsK
KyAgICAgICAgICAgIGluZm8ubWltZXMuYXBwZW5kKG1pbWUpOworICAgICAgICB9CisKKyAgICAg
ICAgbV9wbHVnaW5zLmFwcGVuZChpbmZvKTsKKyAgICB9Cit9CisKK3ZvaWQgUGx1Z2luRGF0YTo6
cmVmcmVzaCgpCit7CisgICAgUGx1Z2luRGF0YWJhc2UqIGRiID0gUGx1Z2luRGF0YWJhc2U6Omlu
c3RhbGxlZFBsdWdpbnMoKTsKKyAgICBkYi0+cmVmcmVzaCgpOworfQorCit9OwpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvcGx1Z2lucy9lZmwvUGx1Z2luUGFja2FnZUVmbC5jcHAgYi9Tb3Vy
Y2UvV2ViQ29yZS9wbHVnaW5zL2VmbC9QbHVnaW5QYWNrYWdlRWZsLmNwcApuZXcgZmlsZSBtb2Rl
IDEwMDY0NAppbmRleCAwMDAwMDAwLi5hMjQ2NzdjCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNl
L1dlYkNvcmUvcGx1Z2lucy9lZmwvUGx1Z2luUGFja2FnZUVmbC5jcHAKQEAgLTAsMCArMSwxNjgg
QEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDYsIDIwMDcgQXBwbGUgSW5jLiAgQWxsIHJpZ2h0
cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAwOCBDb2xsYWJvcmEgTHRkLiBBbGwgcmln
aHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDA4IE51YW50aSBMdGQuCisgKiBDb3B5
cmlnaHQgKEMpIDIwMDggSU5kVCAtIEluc3RpdHV0byBOb2tpYSBkZSBUZWNub2xvZ2lhCisgKiBD
b3B5cmlnaHQgKEMpIDIwMDktMjAxMCBQcm9GVVNJT04gZW1iZWRkZWQgc3lzdGVtcworICogQ29w
eXJpZ2h0IChDKSAyMDA5LTIwMTAgU2Ftc3VuZyBFbGVjdHJvbmljcworICoKKyAqIFJlZGlzdHJp
YnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91
dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxv
d2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNv
dXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAq
IDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJv
dmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9v
ciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAq
IFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQ09NUFVURVIsIElOQy4gYGBBUyBJ
UycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hB
TlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJ
U0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBDT01QVVRFUiwgSU5DLiBPUgorICog
Q09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5U
QUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRF
IEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9S
IEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkK
KyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwg
T1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJ
TiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFE
VklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRl
ICJjb25maWcuaCIKKyNpbmNsdWRlICJQbHVnaW5QYWNrYWdlLmgiCisKKyNpbmNsdWRlICJNSU1F
VHlwZVJlZ2lzdHJ5LmgiCisjaW5jbHVkZSAiTm90SW1wbGVtZW50ZWQuaCIKKyNpbmNsdWRlICJQ
bHVnaW5EYXRhYmFzZS5oIgorI2luY2x1ZGUgIlBsdWdpbkRlYnVnLmgiCisjaW5jbHVkZSAibnBy
dW50aW1lX2ltcGwuaCIKKworI2luY2x1ZGUgPEVpbmEuaD4KKyNpbmNsdWRlIDxkbGZjbi5oPgor
I2luY2x1ZGUgPHd0Zi90ZXh0L0NTdHJpbmcuaD4KKworbmFtZXNwYWNlIFdlYkNvcmUgeworCit0
eXBlZGVmIGNoYXIqICgqTlBQX0dldE1JTUVEZXNjcmlwdGlvblByb2NQdHIpKCk7CisKK2Jvb2wg
UGx1Z2luUGFja2FnZTo6ZmV0Y2hJbmZvKCkKK3sKKyAgICBjb25zdCBjaGFyICplcnJtc2c7CisK
KyAgICBpZiAoIWxvYWQoKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgTlBQX0dldFZh
bHVlUHJvY1B0ciBnZXRWYWx1ZSA9IDA7CisgICAgTlBQX0dldE1JTUVEZXNjcmlwdGlvblByb2NQ
dHIgZ2V0TUlNRURlc2NyaXB0aW9uID0gMDsKKworICAgIGdldFZhbHVlID0gKE5QUF9HZXRWYWx1
ZVByb2NQdHIpZGxzeW0obV9tb2R1bGUsICJOUF9HZXRWYWx1ZSIpOworICAgIGlmICgoZXJybXNn
ID0gZGxlcnJvcigpKSkgeworICAgICAgICBFSU5BX0xPR19FUlIoIkNvdWxkIG5vdCBnZXQgc3lt
Ym9sIE5QX0dldFZhbHVlOiAlcyIsIGVycm1zZyk7CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAg
ICB9CisKKyAgICBnZXRNSU1FRGVzY3JpcHRpb24gPSAoTlBQX0dldE1JTUVEZXNjcmlwdGlvblBy
b2NQdHIpZGxzeW0obV9tb2R1bGUsICJOUF9HZXRNSU1FRGVzY3JpcHRpb24iKTsKKyAgICBpZiAo
KGVycm1zZyA9IGRsZXJyb3IoKSkpIHsKKyAgICAgICAgRUlOQV9MT0dfRVJSKCJDb3VsZCBub3Qg
Z2V0IHN5bWJvbCBOUF9HZXRNSU1FRGVzY3JpcHRpb246ICVzIiwgZXJybXNnKTsKKyAgICAgICAg
cmV0dXJuIGZhbHNlOworICAgIH0KKworICAgIGNoYXIqIGJ1ZmZlciA9IDA7CisgICAgTlBFcnJv
ciBlcnIgPSBnZXRWYWx1ZSgwLCBOUFBWcGx1Z2luTmFtZVN0cmluZywgKHZvaWQqKSAmYnVmZmVy
KTsKKyAgICBpZiAoZXJyICE9IE5QRVJSX05PX0VSUk9SKQorICAgICAgICByZXR1cm4gZmFsc2U7
CisgICAgbV9uYW1lID0gYnVmZmVyOworCisgICAgYnVmZmVyID0gMDsKKyAgICBlcnIgPSBnZXRW
YWx1ZSgwLCBOUFBWcGx1Z2luRGVzY3JpcHRpb25TdHJpbmcsICh2b2lkKikgJmJ1ZmZlcik7Cisg
ICAgaWYgKGVyciAhPSBOUEVSUl9OT19FUlJPUikKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAg
IG1fZGVzY3JpcHRpb24gPSBidWZmZXI7CisgICAgZGV0ZXJtaW5lTW9kdWxlVmVyc2lvbkZyb21E
ZXNjcmlwdGlvbigpOworCisgICAgU3RyaW5nIGRlc2NyaXB0aW9uID0gZ2V0TUlNRURlc2NyaXB0
aW9uKCk7CisKKyAgICBWZWN0b3I8U3RyaW5nPiB0eXBlczsKKyAgICBkZXNjcmlwdGlvbi5zcGxp
dChVQ2hhcignOycpLCBmYWxzZSwgdHlwZXMpOworCisgICAgZm9yIChzaXplX3QgaSA9IDA7IGkg
PCB0eXBlcy5zaXplKCk7ICsraSkgeworICAgICAgICBWZWN0b3I8U3RyaW5nPiBtaW1lOworICAg
ICAgICB0eXBlc1tpXS5zcGxpdChVQ2hhcignOicpLCB0cnVlLCBtaW1lKTsKKworICAgICAgICBp
ZiAobWltZS5zaXplKCkgPiAwKSB7CisgICAgICAgICAgICBWZWN0b3I8U3RyaW5nPiBleHRzOwor
CisgICAgICAgICAgICBpZiAobWltZS5zaXplKCkgPiAxKQorICAgICAgICAgICAgICAgIG1pbWVb
MV0uc3BsaXQoVUNoYXIoJywnKSwgZmFsc2UsIGV4dHMpOworCisgICAgICAgICAgICBkZXRlcm1p
bmVRdWlya3MobWltZVswXSk7CisgICAgICAgICAgICBtX21pbWVUb0V4dGVuc2lvbnMuYWRkKG1p
bWVbMF0sIGV4dHMpOworCisgICAgICAgICAgICBpZiAobWltZS5zaXplKCkgPiAyKQorICAgICAg
ICAgICAgICAgIG1fbWltZVRvRGVzY3JpcHRpb25zLmFkZChtaW1lWzBdLCBtaW1lWzJdKTsKKyAg
ICAgICAgfQorICAgIH0KKworICAgIHJldHVybiB0cnVlOworfQorCit1aW50MTZfdCBQbHVnaW5Q
YWNrYWdlOjpOUFZlcnNpb24oKSBjb25zdAoreworICAgIHJldHVybiBOUFZFUlNfSEFTX1BMVUdJ
Tl9USFJFQURfQVNZTkNfQ0FMTDsKK30KKworYm9vbCBQbHVnaW5QYWNrYWdlOjpsb2FkKCkKK3sK
KyAgICBjaGFyKiBlcnJtc2c7CisKKyAgICBpZiAobV9pc0xvYWRlZCkgeworICAgICAgICBtX2xv
YWRDb3VudCsrOworICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CisKKyAgICBtX21vZHVsZSA9
IGRsb3BlbihtX3BhdGgudXRmOCgpLmRhdGEoKSwgUlRMRF9MQVpZIHwgUlRMRF9MT0NBTCk7Cisg
ICAgaWYgKChlcnJtc2cgPSBkbGVycm9yKCkpKSB7CisgICAgICAgIEVJTkFfTE9HX1dBUk4oIiVz
IG5vdCBsb2FkZWQ6ICVzIiwgbV9wYXRoLnV0ZjgoKS5kYXRhKCksIGVycm1zZyk7CisgICAgICAg
IHJldHVybiBmYWxzZTsKKyAgICB9CisKKyAgICBtX2lzTG9hZGVkID0gdHJ1ZTsKKworICAgIE5Q
X0luaXRpYWxpemVGdW5jUHRyIGluaXRpYWxpemU7CisgICAgTlBFcnJvciBlcnI7CisKKyAgICBp
bml0aWFsaXplID0gKE5QX0luaXRpYWxpemVGdW5jUHRyKWRsc3ltKG1fbW9kdWxlLCAiTlBfSW5p
dGlhbGl6ZSIpOworICAgIGlmICgoZXJybXNnID0gZGxlcnJvcigpKSkgeworICAgICAgICBFSU5B
X0xPR19FUlIoIkNvdWxkIG5vdCBnZXQgc3ltYm9sIE5QX0luaXRpYWxpemU6ICVzIiwgZXJybXNn
KTsKKyAgICAgICAgZ290byBhYm9ydDsKKyAgICB9CisKKyAgICBtX05QUF9TaHV0ZG93biA9IChO
UFBfU2h1dGRvd25Qcm9jUHRyKWRsc3ltKG1fbW9kdWxlLCAiTlBfU2h1dGRvd24iKTsKKyAgICBp
ZiAoKGVycm1zZyA9IGRsZXJyb3IoKSkpIHsKKyAgICAgICAgRUlOQV9MT0dfRVJSKCJDb3VsZCBu
b3QgZ2V0IHN5bWJvbCBOUF9TaHV0ZG93bjogJXMiLCBlcnJtc2cpOworICAgICAgICBnb3RvIGFi
b3J0OworICAgIH0KKworICAgIG1lbXNldCgmbV9wbHVnaW5GdW5jcywgMCwgc2l6ZW9mKG1fcGx1
Z2luRnVuY3MpKTsKKyAgICBtX3BsdWdpbkZ1bmNzLnNpemUgPSBzaXplb2YobV9wbHVnaW5GdW5j
cyk7CisKKyAgICBpbml0aWFsaXplQnJvd3NlckZ1bmNzKCk7CisKKyNpZiBkZWZpbmVkKFhQX1VO
SVgpCisgICAgZXJyID0gaW5pdGlhbGl6ZSgmbV9icm93c2VyRnVuY3MsICZtX3BsdWdpbkZ1bmNz
KTsKKyNlbHNlCisgICAgZXJyID0gaW5pdGlhbGl6ZSgmbV9icm93c2VyRnVuY3MpOworI2VuZGlm
CisgICAgaWYgKGVyciAhPSBOUEVSUl9OT19FUlJPUikKKyAgICAgICAgZ290byBhYm9ydDsKKwor
ICAgIG1fbG9hZENvdW50Kys7CisgICAgcmV0dXJuIHRydWU7CisKK2Fib3J0OgorICAgIEVJTkFf
TE9HX0RCRygiZmFpbGVkIHRvIGxvYWQgcGx1Z2luLCB1bmxvYWQgaXQgd2l0aG91dCBzaHV0dGlu
ZyBpdCBkb3duLiIpOworICAgIHVubG9hZFdpdGhvdXRTaHV0ZG93bigpOworICAgIHJldHVybiBm
YWxzZTsKK30KKworfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGx1Z2lucy9lZmwvUGx1
Z2luVmlld0VmbC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbHVnaW5zL2VmbC9QbHVnaW5WaWV3RWZs
LmNwcApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi5kZDc3NWE2Ci0tLSAvZGV2
L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvcGx1Z2lucy9lZmwvUGx1Z2luVmlld0VmbC5jcHAK
QEAgLTAsMCArMSw1MzYgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDYsIDIwMDcgQXBwbGUg
SW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAwOCBDb2xsYWJv
cmEgTHRkLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDA4IElOZFQg
LSBJbnN0aXR1dG8gTm9raWEgZGUgVGVjbm9sb2dpYQorICogQ29weXJpZ2h0IChDKSAyMDA5LTIw
MTAgUHJvRlVTSU9OIGVtYmVkZGVkIHN5c3RlbXMKKyAqIENvcHlyaWdodCAoQykgMjAwOS0yMDEw
IFNhbXN1bmcgRWxlY3Ryb25pY3MKKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNv
dXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwg
YXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICog
YXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFp
biB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMg
aW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHBy
b3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBS
T1ZJREVEIEJZIEFQUExFIENPTVBVVEVSLCBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBS
RVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
IFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVT
UyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZF
TlQgU0hBTEwgQVBQTEUgQ09NUFVURVIsIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFC
TEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhF
TVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsg
TE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJ
T04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdI
RVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJ
TkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhF
IFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJ
TElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVk
ZSAiUGx1Z2luVmlldy5oIgorCisjaW5jbHVkZSAiRG9jdW1lbnQuaCIKKyNpbmNsdWRlICJEb2N1
bWVudExvYWRlci5oIgorI2luY2x1ZGUgIkVsZW1lbnQuaCIKKyNpbmNsdWRlICJGcmFtZS5oIgor
I2luY2x1ZGUgIkZyYW1lTG9hZFJlcXVlc3QuaCIKKyNpbmNsdWRlICJGcmFtZUxvYWRlci5oIgor
I2luY2x1ZGUgIkZyYW1lVHJlZS5oIgorI2luY2x1ZGUgIkZyYW1lVmlldy5oIgorI2luY2x1ZGUg
IkdyYXBoaWNzQ29udGV4dC5oIgorI2luY2x1ZGUgIkhUTUxOYW1lcy5oIgorI2luY2x1ZGUgIkhU
TUxQbHVnSW5FbGVtZW50LmgiCisjaW5jbHVkZSAiSG9zdFdpbmRvdy5oIgorI2luY2x1ZGUgIklt
YWdlLmgiCisjaW5jbHVkZSAiSW50UmVjdC5oIgorI2luY2x1ZGUgIkpTRE9NQmluZGluZy5oIgor
I2luY2x1ZGUgIktleWJvYXJkRXZlbnQuaCIKKyNpbmNsdWRlICJNb3VzZUV2ZW50LmgiCisjaW5j
bHVkZSAiTm90SW1wbGVtZW50ZWQuaCIKKyNpbmNsdWRlICJQYWdlLmgiCisjaW5jbHVkZSAiUGxh
dGZvcm1Nb3VzZUV2ZW50LmgiCisjaW5jbHVkZSAiUGxhdGZvcm1XaGVlbEV2ZW50LmgiCisjaW5j
bHVkZSAiUGx1Z2luRGVidWcuaCIKKyNpbmNsdWRlICJQbHVnaW5QYWNrYWdlLmgiCisjaW5jbHVk
ZSAiUmVuZGVyTGF5ZXIuaCIKKyNpbmNsdWRlICJTY3JpcHRDb250cm9sbGVyLmgiCisjaW5jbHVk
ZSAiU2V0dGluZ3MuaCIKKyNpbmNsdWRlICJYMTFFbWJlZENvbnRhaW5lci5oIgorI2luY2x1ZGUg
IlgxMVdpbmRvdy5oIgorI2luY2x1ZGUgIm5wcnVudGltZV9pbXBsLmgiCisjaW5jbHVkZSAicnVu
dGltZS9KU0xvY2suaCIKKyNpbmNsdWRlICJydW50aW1lL0pTVmFsdWUuaCIKKyNpbmNsdWRlICJy
dW50aW1lX3Jvb3QuaCIKKworI2luY2x1ZGUgPEVjb3JlX0V2YXMuaD4KKyNpbmNsdWRlIDxFY29y
ZV9YLmg+CisjaW5jbHVkZSA8RXZhcy5oPgorCisjaW5jbHVkZSA8d3RmL1JlZkNvdW50ZWQuaD4K
KyNpbmNsdWRlIDx3dGYvUmVmUHRyLmg+CisKK3VzaW5nIEpTQzo6RXhlY1N0YXRlOwordXNpbmcg
SlNDOjpJbnRlcnByZXRlcjsKK3VzaW5nIEpTQzo6SlNMb2NrOwordXNpbmcgSlNDOjpKU09iamVj
dDsKK3VzaW5nIEpTQzo6VVN0cmluZzsKKwordXNpbmcgbmFtZXNwYWNlIHN0ZDsKK3VzaW5nIG5h
bWVzcGFjZSBXVEY7Cit1c2luZyBuYW1lc3BhY2UgV2ViQ29yZTsKKworbmFtZXNwYWNlIFdlYkNv
cmUgeworCit1c2luZyBuYW1lc3BhY2UgSFRNTE5hbWVzOworCisjaWYgRU5BQkxFKE5FVFNDQVBF
X1BMVUdJTl9BUEkpCitib29sIFBsdWdpblZpZXc6OmRpc3BhdGNoTlBFdmVudChOUEV2ZW50JiBl
dmVudCkKK3sKKyAgICBpZiAoIW1fcGx1Z2luLT5wbHVnaW5GdW5jcygpLT5ldmVudCkKKyAgICAg
ICAgcmV0dXJuIGZhbHNlOworCisgICAgUGx1Z2luVmlldzo6c2V0Q3VycmVudFBsdWdpblZpZXco
dGhpcyk7CisgICAgSlNDOjpKU0xvY2s6OkRyb3BBbGxMb2NrcyBkcm9wQWxsTG9ja3MoZmFsc2Up
OworICAgIHNldENhbGxpbmdQbHVnaW4odHJ1ZSk7CisKKyAgICBib29sIGFjY2VwdGVkID0gbV9w
bHVnaW4tPnBsdWdpbkZ1bmNzKCktPmV2ZW50KG1faW5zdGFuY2UsICZldmVudCk7CisKKyAgICBz
ZXRDYWxsaW5nUGx1Z2luKGZhbHNlKTsKKyAgICBQbHVnaW5WaWV3OjpzZXRDdXJyZW50UGx1Z2lu
VmlldygwKTsKKyAgICByZXR1cm4gYWNjZXB0ZWQ7Cit9CisjZW5kaWYKKwordm9pZCBQbHVnaW5W
aWV3OjpoYWx0KCkKK3sKKyAgICBub3RJbXBsZW1lbnRlZCgpOworfQorCisjaWYgZGVmaW5lZChY
UF9VTklYKSAmJiBFTkFCTEUoTkVUU0NBUEVfUExVR0lOX0FQSSkKK3ZvaWQgUGx1Z2luVmlldzo6
aGFuZGxlRm9jdXNJbkV2ZW50KCkKK3sKKyAgICBub3RJbXBsZW1lbnRlZCgpOworfQorCit2b2lk
IFBsdWdpblZpZXc6OmhhbmRsZUZvY3VzT3V0RXZlbnQoKQoreworICAgIG5vdEltcGxlbWVudGVk
KCk7Cit9CisjZW5kaWYKKwordm9pZCBQbHVnaW5WaWV3OjpyZXN0YXJ0KCkKK3sKKyAgICBub3RJ
bXBsZW1lbnRlZCgpOworfQorCit2b2lkIFBsdWdpblZpZXc6OmhhbmRsZUtleWJvYXJkRXZlbnQo
S2V5Ym9hcmRFdmVudCopCit7CisgICAgbm90SW1wbGVtZW50ZWQoKTsKK30KKwordm9pZCBQbHVn
aW5WaWV3OjpoYW5kbGVNb3VzZUV2ZW50KE1vdXNlRXZlbnQqIGV2ZW50KQoreworI2lmIEVOQUJM
RShORVRTQ0FQRV9QTFVHSU5fQVBJKQorICAgIE5QRXZlbnQgeEV2ZW50OworCisgICAgSW50UmVj
dCBwID0gc3RhdGljX2Nhc3Q8RnJhbWVWaWV3Kj4ocGFyZW50KCkpLT5jb250ZW50c1RvU2NyZWVu
KEludFJlY3QoMCwgMCwgZXZlbnQtPm9mZnNldFgoKSwgZXZlbnQtPm9mZnNldFkoKSkpOworICAg
IGlmIChldmVudC0+dHlwZSgpID09IGV2ZW50TmFtZXMoKS5tb3VzZW1vdmVFdmVudAorICAgICAg
ICAgICAgfHwgZXZlbnQtPnR5cGUoKSA9PSBldmVudE5hbWVzKCkubW91c2VvdXRFdmVudAorICAg
ICAgICAgICAgfHwgZXZlbnQtPnR5cGUoKSA9PSBldmVudE5hbWVzKCkubW91c2VvdmVyRXZlbnQp
IHsKKyAgICAgICAgeEV2ZW50LnR5cGUgPSBNb3Rpb25Ob3RpZnk7CisgICAgICAgIHhFdmVudC54
bW90aW9uLnggPSBwLndpZHRoKCk7CisgICAgICAgIHhFdmVudC54bW90aW9uLnkgPSBwLmhlaWdo
dCgpOworICAgIH0gZWxzZSBpZiAoZXZlbnQtPnR5cGUoKSA9PSBldmVudE5hbWVzKCkubW91c2Vk
b3duRXZlbnQpIHsKKyAgICAgICAgeEV2ZW50LnR5cGUgPSBCdXR0b25QcmVzczsKKyAgICAgICAg
eEV2ZW50LnhidXR0b24ueCA9IHAud2lkdGgoKTsKKyAgICAgICAgeEV2ZW50LnhidXR0b24ueSA9
IHAuaGVpZ2h0KCk7CisgICAgICAgIHhFdmVudC54YnV0dG9uLmJ1dHRvbiA9IGV2ZW50LT5idXR0
b24oKSArIDE7IC8vIERPTSBNb3VzZUV2ZW50IGNvdW50cyBmcm9tIDAsIGFuZCBYQnV0dG9uRXZl
bnQgZnJvbSAxCisgICAgfSBlbHNlIGlmIChldmVudC0+dHlwZSgpID09IGV2ZW50TmFtZXMoKS5t
b3VzZXVwRXZlbnQpIHsKKyAgICAgICAgeEV2ZW50LnR5cGUgPSBCdXR0b25SZWxlYXNlOworICAg
ICAgICB4RXZlbnQueGJ1dHRvbi54ID0gcC53aWR0aCgpOworICAgICAgICB4RXZlbnQueGJ1dHRv
bi55ID0gcC5oZWlnaHQoKTsKKyAgICAgICAgeEV2ZW50LnhidXR0b24uYnV0dG9uID0gZXZlbnQt
PmJ1dHRvbigpICsgMTsKKyAgICB9IGVsc2UKKyAgICAgICAgcmV0dXJuOworCisgICAgaWYgKGRp
c3BhdGNoTlBFdmVudCh4RXZlbnQpKQorICAgICAgICBldmVudC0+c2V0RGVmYXVsdEhhbmRsZWQo
KTsKKyNlbHNlCisgICAgbm90SW1wbGVtZW50ZWQoKTsKKyAgICByZXR1cm47CisjZW5kaWYKK30K
Kwordm9pZCBQbHVnaW5WaWV3Ojp1cGRhdGVQbHVnaW5XaWRnZXQoKQoreworICAgIGlmICghcGFy
ZW50KCkgfHwgIW1faXNXaW5kb3dlZCkKKyAgICAgICAgcmV0dXJuOworCisgICAgQVNTRVJUKHBh
cmVudCgpLT5pc0ZyYW1lVmlldygpKTsKKyAgICBGcmFtZVZpZXcqIGZyYW1lVmlldyA9IHN0YXRp
Y19jYXN0PEZyYW1lVmlldyo+KHBhcmVudCgpKTsKKworICAgIEludFJlY3Qgb2xkV2luZG93UmVj
dCA9IG1fd2luZG93UmVjdDsKKyAgICBJbnRSZWN0IG9sZENsaXBSZWN0ID0gbV9jbGlwUmVjdDsK
KworICAgIG1fd2luZG93UmVjdCA9IEludFJlY3QoZnJhbWVWaWV3LT5jb250ZW50c1RvU2NyZWVu
KEludFJlY3QoZnJhbWVSZWN0KCkubG9jYXRpb24oKSwgZnJhbWVSZWN0KCkuc2l6ZSgpKSkpOwor
CisgICAgbV9jbGlwUmVjdCA9IHdpbmRvd0NsaXBSZWN0KCk7CisgICAgbV9jbGlwUmVjdC5tb3Zl
KC1tX3dpbmRvd1JlY3QueCgpLCAtbV93aW5kb3dSZWN0LnkoKSk7CisKKyAgICBpZiAocGxhdGZv
cm1QbHVnaW5XaWRnZXQoKSkgeworICAgICAgICBFdmFzX0Nvb3JkIHgsIHk7CisgICAgICAgIGV2
YXNfb2JqZWN0X2dlb21ldHJ5X2dldChyb290KCktPmV2YXNPYmplY3QoKSwgJngsICZ5LCAwLCAw
KTsKKyAgICAgICAgSW50UmVjdCBjaGlsZFJlY3QgPSBtX3dpbmRvd1JlY3Q7CisgICAgICAgIGNo
aWxkUmVjdC5tb3ZlKHgsIHkpOworICAgICAgICBwbGF0Zm9ybVBsdWdpbldpZGdldCgpLT5zZXRG
cmFtZVJlY3QoY2hpbGRSZWN0KTsKKyAgICAgICAgcGxhdGZvcm1QbHVnaW5XaWRnZXQoKS0+dXBk
YXRlKG1fY2xpcFJlY3QpOworICAgIH0KK30KKwordm9pZCBQbHVnaW5WaWV3OjpzZXRGb2N1cyhi
b29sKQoreworICAgIGlmIChwbGF0Zm9ybVBsdWdpbldpZGdldCgpKQorICAgICAgICBwbGF0Zm9y
bVBsdWdpbldpZGdldCgpLT5zZXRGb2N1cygpOworCisgICAgbV9lbGVtZW50LT5kb2N1bWVudCgp
LT5zZXRGb2N1c2VkTm9kZShtX2VsZW1lbnQpOworCisgICAgV2lkZ2V0OjpzZXRGb2N1cyh0cnVl
KTsKK30KKwordm9pZCBQbHVnaW5WaWV3OjpzaG93KCkKK3sKKyAgICBzZXRTZWxmVmlzaWJsZSh0
cnVlKTsKKworICAgIGlmIChpc1BhcmVudFZpc2libGUoKSAmJiBwbGF0Zm9ybVBsdWdpbldpZGdl
dCgpKQorICAgICAgICBwbGF0Zm9ybVBsdWdpbldpZGdldCgpLT5zZXRWaXNpYmxlKHRydWUpOwor
CisgICAgV2lkZ2V0OjpzaG93KCk7Cit9CisKK3ZvaWQgUGx1Z2luVmlldzo6aGlkZSgpCit7Cisg
ICAgc2V0U2VsZlZpc2libGUoZmFsc2UpOworCisgICAgaWYgKGlzUGFyZW50VmlzaWJsZSgpICYm
IHBsYXRmb3JtUGx1Z2luV2lkZ2V0KCkpCisgICAgICAgIHBsYXRmb3JtUGx1Z2luV2lkZ2V0KCkt
PnNldFZpc2libGUoZmFsc2UpOworCisgICAgV2lkZ2V0OjpoaWRlKCk7Cit9CisKK3ZvaWQgUGx1
Z2luVmlldzo6cGFpbnQoR3JhcGhpY3NDb250ZXh0KiBjb250ZXh0LCBjb25zdCBJbnRSZWN0JiBy
ZWN0KQoreworICAgIEludFJlY3QgZnJSZWN0ID0gZnJhbWVSZWN0KCk7CisKKyAgICBpZiAoIW1f
aXNTdGFydGVkKSB7CisgICAgICAgIHBhaW50TWlzc2luZ1BsdWdpbkljb24oY29udGV4dCwgcmVj
dCk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBpZiAoY29udGV4dC0+cGFpbnRpbmdE
aXNhYmxlZCgpKQorICAgICAgICByZXR1cm47CisKKyAgICBzZXROUFdpbmRvd0lmTmVlZGVkKCk7
CisKKyAgICBpZiAobV9pc1dpbmRvd2VkIHx8IGNvbnRleHQtPnBhaW50aW5nRGlzYWJsZWQoKSkK
KyAgICAgICAgcmV0dXJuOworfQorCit2b2lkIFBsdWdpblZpZXc6OnNldFBhcmVudChTY3JvbGxW
aWV3KiBwYXJlbnQpCit7CisgICAgV2lkZ2V0OjpzZXRQYXJlbnQocGFyZW50KTsKKworICAgIGlm
IChwYXJlbnQpCisgICAgICAgIGluaXQoKTsKKyAgICBlbHNlIHsKKyAgICAgICAgaWYgKCFwbGF0
Zm9ybVBsdWdpbldpZGdldCgpKQorICAgICAgICAgICAgcmV0dXJuOworICAgIH0KK30KKwordm9p
ZCBQbHVnaW5WaWV3OjpzZXROUFdpbmRvd1JlY3QoY29uc3QgSW50UmVjdCYgcmVjdCkKK3sKKyNp
ZiBFTkFCTEUoTkVUU0NBUEVfUExVR0lOX0FQSSkKKyAgICBpZiAoIW1faXNTdGFydGVkIHx8ICFw
YXJlbnQoKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgSW50UG9pbnQgcCA9IHN0YXRpY19jYXN0
PEZyYW1lVmlldyo+KHBhcmVudCgpKS0+Y29udGVudHNUb1dpbmRvdyhyZWN0LmxvY2F0aW9uKCkp
OworICAgIG1fbnBXaW5kb3cueCA9IHAueCgpOworICAgIG1fbnBXaW5kb3cueSA9IHAueSgpOwor
CisgICAgbV9ucFdpbmRvdy53aWR0aCA9IHJlY3Qud2lkdGgoKTsKKyAgICBtX25wV2luZG93Lmhl
aWdodCA9IHJlY3QuaGVpZ2h0KCk7CisKKyAgICBtX25wV2luZG93LmNsaXBSZWN0LmxlZnQgPSAw
OworICAgIG1fbnBXaW5kb3cuY2xpcFJlY3QudG9wID0gMDsKKyAgICBtX25wV2luZG93LmNsaXBS
ZWN0LnJpZ2h0ID0gcmVjdC53aWR0aCgpOworICAgIG1fbnBXaW5kb3cuY2xpcFJlY3QuYm90dG9t
ID0gcmVjdC5oZWlnaHQoKTsKKworICAgIGlmIChtX25wV2luZG93LnggPCAwIHx8IG1fbnBXaW5k
b3cueSA8IDAKKyAgICAgICAgfHwgbV9ucFdpbmRvdy53aWR0aCA8PSAwIHx8IG1fbnBXaW5kb3cu
aGVpZ2h0IDw9IDApCisgICAgICAgIHJldHVybjsKKworICAgIGlmIChtX3BsdWdpbi0+cGx1Z2lu
RnVuY3MoKS0+c2V0d2luZG93KSB7CisgICAgICAgIFBsdWdpblZpZXc6OnNldEN1cnJlbnRQbHVn
aW5WaWV3KHRoaXMpOworICAgICAgICBKU0M6OkpTTG9jazo6RHJvcEFsbExvY2tzIGRyb3BBbGxM
b2NrcyhmYWxzZSk7CisgICAgICAgIHNldENhbGxpbmdQbHVnaW4odHJ1ZSk7CisgICAgICAgIG1f
cGx1Z2luLT5wbHVnaW5GdW5jcygpLT5zZXR3aW5kb3cobV9pbnN0YW5jZSwgJm1fbnBXaW5kb3cp
OworICAgICAgICBzZXRDYWxsaW5nUGx1Z2luKGZhbHNlKTsKKyAgICAgICAgUGx1Z2luVmlldzo6
c2V0Q3VycmVudFBsdWdpblZpZXcoMCk7CisKKyAgICAgICAgaWYgKCFtX2lzV2luZG93ZWQpCisg
ICAgICAgICAgICByZXR1cm47CisKKyAgICAgICAgQVNTRVJUKHBsYXRmb3JtUGx1Z2luV2lkZ2V0
KCkpOworICAgIH0KKyNlbHNlCisgICAgbm90SW1wbGVtZW50ZWQoKTsKKyAgICByZXR1cm47Cisj
ZW5kaWYKK30KKwordm9pZCBQbHVnaW5WaWV3OjpzZXROUFdpbmRvd0lmTmVlZGVkKCkKK3sKK30K
K3ZvaWQgUGx1Z2luVmlldzo6c2V0UGFyZW50VmlzaWJsZShib29sIHZpc2libGUpCit7CisgICAg
aWYgKGlzUGFyZW50VmlzaWJsZSgpID09IHZpc2libGUpCisgICAgICAgIHJldHVybjsKKworICAg
IFdpZGdldDo6c2V0UGFyZW50VmlzaWJsZSh2aXNpYmxlKTsKKworICAgIGlmIChpc1NlbGZWaXNp
YmxlKCkgJiYgcGxhdGZvcm1QbHVnaW5XaWRnZXQoKSkKKyAgICAgICAgcGxhdGZvcm1QbHVnaW5X
aWRnZXQoKS0+c2V0VmlzaWJsZSh2aXNpYmxlKTsKK30KKworI2lmIEVOQUJMRShORVRTQ0FQRV9Q
TFVHSU5fQVBJKQorTlBFcnJvciBQbHVnaW5WaWV3OjpoYW5kbGVQb3N0UmVhZEZpbGUoVmVjdG9y
PGNoYXI+JiBidWZmZXIsIHVpbnQzMl90IGxlbiwgY29uc3QgY2hhciogYnVmKQoreworICAgIFN0
cmluZyBmaWxlbmFtZShidWYsIGxlbik7CisKKyAgICBpZiAoZmlsZW5hbWUuc3RhcnRzV2l0aCgi
ZmlsZTovLy8iKSkKKyAgICAgICAgZmlsZW5hbWUgPSBmaWxlbmFtZS5zdWJzdHJpbmcoOCk7CisK
KyAgICBpZiAoIWZpbGVFeGlzdHMoZmlsZW5hbWUpKQorICAgICAgICByZXR1cm4gTlBFUlJfRklM
RV9OT1RfRk9VTkQ7CisKKyAgICBGSUxFKiBmaWxlSGFuZGxlID0gZm9wZW4oZmlsZW5hbWUudXRm
OCgpLmRhdGEoKSwgInIiKTsKKworICAgIGlmICghZmlsZUhhbmRsZSkKKyAgICAgICAgcmV0dXJu
IE5QRVJSX0ZJTEVfTk9UX0ZPVU5EOworCisgICAgaW50IGJ5dGVzUmVhZCA9IGZyZWFkKGJ1ZmZl
ci5kYXRhKCksIDEsIDAsIGZpbGVIYW5kbGUpOworCisgICAgZmNsb3NlKGZpbGVIYW5kbGUpOwor
CisgICAgaWYgKGJ5dGVzUmVhZCA8PSAwKQorICAgICAgICByZXR1cm4gTlBFUlJfRklMRV9OT1Rf
Rk9VTkQ7CisKKyAgICByZXR1cm4gTlBFUlJfTk9fRVJST1I7Cit9CisjZW5kaWYKKworI2lmIEVO
QUJMRShORVRTQ0FQRV9QTFVHSU5fQVBJKQorYm9vbCBQbHVnaW5WaWV3OjpwbGF0Zm9ybUdldFZh
bHVlU3RhdGljKE5QTlZhcmlhYmxlIHZhcmlhYmxlLCB2b2lkKiB2YWx1ZSwgTlBFcnJvciogcmVz
dWx0KQoreworICAgIHN3aXRjaCAodmFyaWFibGUpIHsKKyAgICBjYXNlIE5QTlZUb29sa2l0Ogor
ICAgICAgICAqc3RhdGljX2Nhc3Q8dWludDMyX3QqPih2YWx1ZSkgPSAwOworICAgICAgICAqcmVz
dWx0ID0gTlBFUlJfTk9fRVJST1I7CisgICAgICAgIHJldHVybiB0cnVlOworCisgICAgY2FzZSBO
UE5WU3VwcG9ydHNYRW1iZWRCb29sOgorICAgICAgICAqc3RhdGljX2Nhc3Q8TlBCb29sKj4odmFs
dWUpID0gdHJ1ZTsKKyAgICAgICAgKnJlc3VsdCA9IE5QRVJSX05PX0VSUk9SOworICAgICAgICBy
ZXR1cm4gdHJ1ZTsKKworICAgIGNhc2UgTlBOVmphdmFzY3JpcHRFbmFibGVkQm9vbDoKKyAgICAg
ICAgKnN0YXRpY19jYXN0PE5QQm9vbCo+KHZhbHVlKSA9IHRydWU7CisgICAgICAgICpyZXN1bHQg
PSBOUEVSUl9OT19FUlJPUjsKKyAgICAgICAgcmV0dXJuIHRydWU7CisKKyAgICBjYXNlIE5QTlZT
dXBwb3J0c1dpbmRvd2xlc3M6CisgICAgICAgICpzdGF0aWNfY2FzdDxOUEJvb2wqPih2YWx1ZSkg
PSBmYWxzZTsKKyAgICAgICAgKnJlc3VsdCA9IE5QRVJSX05PX0VSUk9SOworICAgICAgICByZXR1
cm4gdHJ1ZTsKKworICAgIGRlZmF1bHQ6CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9Cit9
CisKK2Jvb2wgUGx1Z2luVmlldzo6cGxhdGZvcm1HZXRWYWx1ZShOUE5WYXJpYWJsZSB2YXJpYWJs
ZSwgdm9pZCogdmFsdWUsIE5QRXJyb3IqIHJlc3VsdCkKK3sKKyAgICBpZiAoIXZhbHVlIHx8ICFy
ZXN1bHQpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIHN3aXRjaCAodmFyaWFibGUpIHsK
KyAgICBjYXNlIE5QTlZ4RGlzcGxheToKKyAgICAgICAgaWYgKHBsYXRmb3JtUGx1Z2luV2lkZ2V0
KCkpCisgICAgICAgICAgICAqKHZvaWQgKiopdmFsdWUgPSBwbGF0Zm9ybVBsdWdpbldpZGdldCgp
LT54MTFJbmZvKCktPmRpc3BsYXkoKTsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgKih2b2lk
ICoqKXZhbHVlID0gKERpc3BsYXkqKSBlY29yZV94X2Rpc3BsYXlfZ2V0KCk7CisgICAgICAgICpy
ZXN1bHQgPSBOUEVSUl9OT19FUlJPUjsKKyAgICAgICAgcmV0dXJuIHRydWU7CisKKyAgICBjYXNl
IE5QTlZ4dEFwcENvbnRleHQ6CisgICAgICAgICpyZXN1bHQgPSBOUEVSUl9HRU5FUklDX0VSUk9S
OworICAgICAgICByZXR1cm4gdHJ1ZTsKKworI2lmIEVOQUJMRShORVRTQ0FQRV9QTFVHSU5fQVBJ
KQorICAgIGNhc2UgTlBOVldpbmRvd05QT2JqZWN0OiB7CisgICAgICAgIGlmIChtX2lzSmF2YVNj
cmlwdFBhdXNlZCkgeworICAgICAgICAgICAgKnJlc3VsdCA9IE5QRVJSX0dFTkVSSUNfRVJST1I7
CisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgfQorCisgICAgICAgIE5QT2JqZWN0
KiB3aW5kb3dTY3JpcHRPYmplY3QgPSBtX3BhcmVudEZyYW1lLT5zY3JpcHQoKS0+d2luZG93U2Ny
aXB0TlBPYmplY3QoKTsKKworICAgICAgICAvLyBSZXR1cm4gdmFsdWUgaXMgZXhwZWN0ZWQgdG8g
YmUgcmV0YWluZWQsIGFzIGRlc2NyaWJlZCBoZXJlOiA8aHR0cDovL3d3dy5tb3ppbGxhLm9yZy9w
cm9qZWN0cy9wbHVnaW4vbnBydW50aW1lLmh0bWw+CisgICAgICAgIGlmICh3aW5kb3dTY3JpcHRP
YmplY3QpCisgICAgICAgICAgICBfTlBOX1JldGFpbk9iamVjdCh3aW5kb3dTY3JpcHRPYmplY3Qp
OworCisgICAgICAgIHZvaWQqKiB2ID0gKHZvaWQqKil2YWx1ZTsKKyAgICAgICAgKnYgPSB3aW5k
b3dTY3JpcHRPYmplY3Q7CisKKyAgICAgICAgKnJlc3VsdCA9IE5QRVJSX05PX0VSUk9SOworICAg
ICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CisKKyAgICBjYXNlIE5QTlZQbHVnaW5FbGVtZW50TlBP
YmplY3Q6IHsKKyAgICAgICAgaWYgKG1faXNKYXZhU2NyaXB0UGF1c2VkKSB7CisgICAgICAgICAg
ICAqcmVzdWx0ID0gTlBFUlJfR0VORVJJQ19FUlJPUjsKKyAgICAgICAgICAgIHJldHVybiB0cnVl
OworICAgICAgICB9CisKKyAgICAgICAgTlBPYmplY3QqIHBsdWdpblNjcmlwdE9iamVjdCA9IDA7
CisKKyAgICAgICAgaWYgKG1fZWxlbWVudC0+aGFzVGFnTmFtZShhcHBsZXRUYWcpIHx8IG1fZWxl
bWVudC0+aGFzVGFnTmFtZShlbWJlZFRhZykgfHwgbV9lbGVtZW50LT5oYXNUYWdOYW1lKG9iamVj
dFRhZykpCisgICAgICAgICAgICBwbHVnaW5TY3JpcHRPYmplY3QgPSBzdGF0aWNfY2FzdDxIVE1M
UGx1Z0luRWxlbWVudCo+KG1fZWxlbWVudCktPmdldE5QT2JqZWN0KCk7CisKKyAgICAgICAgLy8g
UmV0dXJuIHZhbHVlIGlzIGV4cGVjdGVkIHRvIGJlIHJldGFpbmVkLCBhcyBkZXNjcmliZWQgaGVy
ZTogPGh0dHA6Ly93d3cubW96aWxsYS5vcmcvcHJvamVjdHMvcGx1Z2luL25wcnVudGltZS5odG1s
PgorICAgICAgICBpZiAocGx1Z2luU2NyaXB0T2JqZWN0KQorICAgICAgICAgICAgX05QTl9SZXRh
aW5PYmplY3QocGx1Z2luU2NyaXB0T2JqZWN0KTsKKworICAgICAgICB2b2lkKiogdiA9ICh2b2lk
KiopdmFsdWU7CisgICAgICAgICp2ID0gcGx1Z2luU2NyaXB0T2JqZWN0OworCisgICAgICAgICpy
ZXN1bHQgPSBOUEVSUl9OT19FUlJPUjsKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgfQorI2Vu
ZGlmCisKKyAgICBjYXNlIE5QTlZuZXRzY2FwZVdpbmRvdzogeworICAgICAgICB2b2lkKiB3ID0g
cmVpbnRlcnByZXRfY2FzdDx2b2lkKj4odmFsdWUpOworICAgICAgICBFdmFzX09iamVjdCogd2lk
Z2V0ID0gbV9wYXJlbnRGcmFtZS0+dmlldygpLT5ob3N0V2luZG93KCktPnBsYXRmb3JtUGFnZUNs
aWVudCgpOworICAgICAgICBFdmFzKiBldmFzID0gZXZhc19vYmplY3RfZXZhc19nZXQod2lkZ2V0
KTsKKyAgICAgICAgRWNvcmVfRXZhcyogZWUgPSBlY29yZV9ldmFzX2Vjb3JlX2V2YXNfZ2V0KGV2
YXMpOworICAgICAgICAqKChYSUQgKil3KSA9IChXaW5kb3cpIGVjb3JlX2V2YXNfd2luZG93X2dl
dChlZSk7CisgICAgICAgICpyZXN1bHQgPSBOUEVSUl9OT19FUlJPUjsKKyAgICAgICAgcmV0dXJu
IHRydWU7CisgICAgfQorCisgICAgY2FzZSBOUE5WVG9vbGtpdDoKKyAgICAgICAgaWYgKG1fcGx1
Z2luLT5xdWlya3MoKS5jb250YWlucyhQbHVnaW5RdWlya1JlcXVpcmVzR3RrVG9vbEtpdCkpIHsK
KyAgICAgICAgICAgICooKHVpbnQzMl90ICopdmFsdWUpID0gMjsKKyAgICAgICAgICAgICpyZXN1
bHQgPSBOUEVSUl9OT19FUlJPUjsKKyAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICB9
CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgLy8gZmFsbCB0aHJvdWdoCisgICAgZGVm
YXVsdDoKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KK30KKyNlbmRpZgorCit2b2lkIFBs
dWdpblZpZXc6OmludmFsaWRhdGVSZWN0KGNvbnN0IEludFJlY3QmIHJlY3QpCit7CisgICAgaWYg
KHBsYXRmb3JtUGx1Z2luV2lkZ2V0KCkpIHsKKyAgICAgICAgcGxhdGZvcm1QbHVnaW5XaWRnZXQo
KS0+dXBkYXRlKHJlY3QpOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgaW52YWxpZGF0
ZVdpbmRvd2xlc3NQbHVnaW5SZWN0KHJlY3QpOworfQorCisjaWYgRU5BQkxFKE5FVFNDQVBFX1BM
VUdJTl9BUEkpCit2b2lkIFBsdWdpblZpZXc6OmludmFsaWRhdGVSZWN0KE5QUmVjdCogcmVjdCkK
K3sKKyAgICBpZiAoIXJlY3QpIHsKKyAgICAgICAgaW52YWxpZGF0ZSgpOworICAgICAgICByZXR1
cm47CisgICAgfQorCisgICAgSW50UmVjdCByKHJlY3QtPmxlZnQsIHJlY3QtPnRvcCwgcmVjdC0+
cmlnaHQgLSByZWN0LT5sZWZ0LCByZWN0LT5ib3R0b20gLSByZWN0LT50b3ApOworCisgICAgaW52
YWxpZGF0ZVJlY3Qocik7Cit9CisKK3ZvaWQgUGx1Z2luVmlldzo6aW52YWxpZGF0ZVJlZ2lvbihO
UFJlZ2lvbiByZWdpb24pCit7CisgICAgbm90SW1wbGVtZW50ZWQoKTsKK30KKyNlbmRpZgorCit2
b2lkIFBsdWdpblZpZXc6OmZvcmNlUmVkcmF3KCkKK3sKKyAgICBub3RJbXBsZW1lbnRlZCgpOwor
fQorCitib29sIFBsdWdpblZpZXc6OnBsYXRmb3JtU3RhcnQoKQoreworICAgIEFTU0VSVChtX2lz
U3RhcnRlZCk7CisgICAgQVNTRVJUKG1fc3RhdHVzID09IFBsdWdpblN0YXR1c0xvYWRlZFN1Y2Nl
c3NmdWxseSk7CisKKyAgICBpZiAobV9wbHVnaW4tPnBsdWdpbkZ1bmNzKCktPmdldHZhbHVlKSB7
CisgICAgICAgIFBsdWdpblZpZXc6OnNldEN1cnJlbnRQbHVnaW5WaWV3KHRoaXMpOworICAgICAg
ICBKU0M6OkpTTG9jazo6RHJvcEFsbExvY2tzIGRyb3BBbGxMb2NrcyhmYWxzZSk7CisgICAgICAg
IHNldENhbGxpbmdQbHVnaW4odHJ1ZSk7CisjaWYgRU5BQkxFKE5FVFNDQVBFX1BMVUdJTl9BUEkp
CisgICAgICAgIG1fcGx1Z2luLT5wbHVnaW5GdW5jcygpLT5nZXR2YWx1ZShtX2luc3RhbmNlLCBO
UFBWcGx1Z2luTmVlZHNYRW1iZWQsICZtX25lZWRzWEVtYmVkKTsKKyNlbmRpZgorICAgICAgICBz
ZXRDYWxsaW5nUGx1Z2luKGZhbHNlKTsKKyAgICAgICAgUGx1Z2luVmlldzo6c2V0Q3VycmVudFBs
dWdpblZpZXcoMCk7CisgICAgfQorCisgICAgaWYgKG1fbmVlZHNYRW1iZWQpIHsKKyAgICAgICAg
RXZhc19PYmplY3QqIG8gPSBtX3BhcmVudEZyYW1lLT52aWV3KCktPmhvc3RXaW5kb3coKS0+cGxh
dGZvcm1QYWdlQ2xpZW50KCk7CisgICAgICAgIEV2YXMqIGV2YXMgPSBldmFzX29iamVjdF9ldmFz
X2dldChvKTsKKyAgICAgICAgc2V0UGxhdGZvcm1QbHVnaW5XaWRnZXQobmV3IFgxMUVtYmVkQ29u
dGFpbmVyKGV2YXMsIHRoaXMpKTsKKyAgICB9IGVsc2UgeworICAgICAgICBub3RJbXBsZW1lbnRl
ZCgpOworICAgICAgICBtX3N0YXR1cyA9IFBsdWdpblN0YXR1c0Nhbk5vdExvYWRQbHVnaW47Cisg
ICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisKKworICAgIHNob3coKTsKKyAgICBOUFNldFdp
bmRvd0NhbGxiYWNrU3RydWN0KiB3c2kgPSBuZXcgTlBTZXRXaW5kb3dDYWxsYmFja1N0cnVjdCgp
OworCisgICAgd3NpLT50eXBlID0gMDsKKworICAgIFgxMUluZm8qIGluZm8gPSBwbGF0Zm9ybVBs
dWdpbldpZGdldCgpLT54MTFJbmZvKCk7CisKKyAgICB3c2ktPmRpc3BsYXkgPSBpbmZvLT5kaXNw
bGF5KCk7CisgICAgd3NpLT52aXN1YWwgPSBpbmZvLT52aXN1YWwoKTsKKyAgICB3c2ktPmRlcHRo
ID0gaW5mby0+ZGVwdGgoKTsKKyAgICB3c2ktPmNvbG9ybWFwID0gaW5mby0+Y29sb3JtYXAoKTsK
KyNpZiBFTkFCTEUoTkVUU0NBUEVfUExVR0lOX0FQSSkKKyAgICBtX25wV2luZG93LndzX2luZm8g
PSB3c2k7CisKKyAgICBtX25wV2luZG93LnR5cGUgPSBOUFdpbmRvd1R5cGVXaW5kb3c7CisgICAg
bV9ucFdpbmRvdy53aW5kb3cgPSAodm9pZCopIHBsYXRmb3JtUGx1Z2luV2lkZ2V0KCktPndpbklk
KCk7CisjZW5kaWYKKworICAgIGlmICghKG1fcGx1Z2luLT5xdWlya3MoKS5jb250YWlucyhQbHVn
aW5RdWlya0RlZmVyRmlyc3RTZXRXaW5kb3dDYWxsKSkpCisgICAgICAgIHNldE5QV2luZG93UmVj
dChmcmFtZVJlY3QoKSk7CisKKyAgICByZXR1cm4gdHJ1ZTsKK30KKwordm9pZCBQbHVnaW5WaWV3
OjpwbGF0Zm9ybURlc3Ryb3koKQoreworfQorCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbHVnaW5zL2VmbC9YMTFFbWJlZENvbnRhaW5lci5jcHAg
Yi9Tb3VyY2UvV2ViQ29yZS9wbHVnaW5zL2VmbC9YMTFFbWJlZENvbnRhaW5lci5jcHAKbmV3IGZp
bGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjI1ZjRmYgotLS0gL2Rldi9udWxsCisrKyBi
L1NvdXJjZS9XZWJDb3JlL3BsdWdpbnMvZWZsL1gxMUVtYmVkQ29udGFpbmVyLmNwcApAQCAtMCww
ICsxLDM1NiBAQAorLyoKKyAgICBDb3B5cmlnaHQgKEMpIDIwMDkgSU5kVCAtIEluc3RpdHV0byBO
b2tpYSBkZSBUZWNub2xvZ2lhCisgICAgQ29weXJpZ2h0IChDKSAyMDA5LTIwMTAgUHJvRlVTSU9O
IGVtYmVkZGVkIHN5c3RlbXMKKyAgICBDb3B5cmlnaHQgKEMpIDIwMDktMjAxMCBTYW1zdW5nIEVs
ZWN0cm9uaWNzCisKKyAgICBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiBy
ZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgICAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0
aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAgICBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBi
eSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAgICB2ZXJzaW9uIDIgb2Yg
dGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisKKyAg
ICBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJl
IHVzZWZ1bCwKKyAgICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUg
aW1wbGllZCB3YXJyYW50eSBvZgorICAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBB
IFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgICAgTGlicmFyeSBHZW5lcmFsIFB1
YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisKKyAgICBZb3Ugc2hvdWxkIGhhdmUgcmVj
ZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisg
ICAgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElm
IG5vdCwgd3JpdGUgdG8KKyAgICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1
MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAorICAgIEJvc3RvbiwgTUEgMDIxMTAtMTMw
MSwgVVNBLgorKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIlgxMUVtYmVkQ29u
dGFpbmVyLmgiCisKKyNpbmNsdWRlICJQbHVnaW5WaWV3LmgiCisjaW5jbHVkZSAiWDExV2luZG93
LmgiCisKKyNpbmNsdWRlIDxYMTEvWC5oPgorI2luY2x1ZGUgPFgxMS9YbGliLmg+CisKKyNkZWZp
bmUgS2V5UHJlc3MgICAgIDIKKyNkZWZpbmUgS2V5UmVsZWFzZSAgIDMKKyNkZWZpbmUgRm9jdXNJ
biAgICAgIDkKKyNkZWZpbmUgRm9jdXNPdXQgICAgMTAKKworI2RlZmluZSBBVE9NKG5hbWUpIGVj
b3JlX3hfYXRvbV9nZXQoI25hbWUpCisKK3VzaW5nIG5hbWVzcGFjZSBzdGQ7Cit1c2luZyBuYW1l
c3BhY2UgV1RGOwordXNpbmcgbmFtZXNwYWNlIFdlYkNvcmU7CisKK2NsYXNzIFgxMUVtYmVkRXZl
bnRIYW5kbGVyOworCitzdGF0aWMgdW5zaWduZWQgaW50IHhlbWJlZFZlcnNpb24gPSAwOworc3Rh
dGljIHVuc2lnbmVkIGludCB4ZW1iZWRNYXBwZWQgPSAoMSA8PCAwKTsKK3N0YXRpYyB2b2lkIHNl
bmRYRW1iZWRNZXNzYWdlKFdpbklkICwgRGlzcGxheSogLCBsb25nICwgbG9uZyBkZXRhaWwgPSAw
LCBsb25nIGRhdGExID0gMCwgbG9uZyBkYXRhMiA9IDApOworCitlbnVtIFgxMUVtYmVkTWVzc2Fn
ZVR5cGUgeworICAgIFhFTUJFRF9FTUJFRERFRF9OT1RJRlkgPSAwLAorICAgIFhFTUJFRF9XSU5E
T1dfQUNUSVZBVEUgPSAxLAorICAgIFhFTUJFRF9XSU5ET1dfREVBQ1RJVkFURSA9IDIsCisgICAg
WEVNQkVEX1JFUVVFU1RfRk9DVVMgPSAzLAorICAgIFhFTUJFRF9GT0NVU19JTiA9IDQsCisgICAg
WEVNQkVEX0ZPQ1VTX09VVCA9IDUsCisgICAgWEVNQkVEX0ZPQ1VTX05FWFQgPSA2LAorICAgIFhF
TUJFRF9GT0NVU19QUkVWID0gNywKKyAgICAvKiA4LTkgd2VyZSB1c2VkIGZvciBYRU1CRURfR1JB
Ql9LRVkvWEVNQkVEX1VOR1JBQl9LRVkgKi8KKyAgICBYRU1CRURfTU9EQUxJVFlfT04gPSAxMCwK
KyAgICBYRU1CRURfTU9EQUxJVFlfT0ZGID0gMTEsCisgICAgWEVNQkVEX1JFR0lTVEVSX0FDQ0VM
RVJBVE9SID0gMTIsCisgICAgWEVNQkVEX1VOUkVHSVNURVJfQUNDRUxFUkFUT1IgPSAxMywKKyAg
ICBYRU1CRURfQUNUSVZBVEVfQUNDRUxFUkFUT1IgPSAxNAorfTsKKworZW51bSBYMTFFbWJlZEZv
Y3VzSW5EZXRhaWwgeworICAgIFhFTUJFRF9GT0NVU19DVVJSRU5UID0gMCwKKyAgICBYRU1CRURf
Rk9DVVNfRklSU1QgPSAxLAorICAgIFhFTUJFRF9GT0NVU19MQVNUID0gMgorfTsKKworWDExRW1i
ZWRDb250YWluZXI6OlgxMUVtYmVkQ29udGFpbmVyKEV2YXMqIGV2YXMsIFBsdWdpblZpZXcqIHZp
ZXcpCisgICAgOiBYMTFXaW5kb3coZXZhcykKKyAgICAsIG1fYWN0aXZlKGZhbHNlKQorICAgICwg
bV9jbGllbnQoMCkKKyAgICAsIG1fcGx1Z2luVmlldyh2aWV3KQorICAgICwgbV9jbGllbnRXaW5k
b3coMCkKK3sKKyAgICAvLyBpbXBsZW1lbnQgdGhlIGZvY3VzIHByb3h5IGFzIGluIHRoZSBzcGVj
LCBvZmZzY3JlZW4KKyAgICBtX2ZvY3VzUHJveHkuc2V0KG5ldyBYMTFXaW5kb3cod2luSWQoKSwg
SW50UmVjdCgtMSwgLTEsIDEsIDEpKSk7CisgICAgbV9mb2N1c1Byb3h5LT5pbnN0YWxsRXZlbnRG
aWx0ZXIodGhpcyk7CisgICAgbV9mb2N1c1Byb3h5LT5zaG93KCk7CisKKyAgICBlY29yZV94X3dp
bmRvd19iYWNrZ3JvdW5kX2NvbG9yX3NldCh3aW5JZCgpLCA2NTUzNSwgNjU1MzUsIDY1NTM1KTsK
KworICAgIC8vIENoYW5nZSB0aGUgZXZlbnQgZmlsdGVyIGZvciB0aGUgZXZlbnRzIHdlIHdvdWxk
IGxpa2UgdG8gcmVjZWl2ZQorICAgIFhTZWxlY3RJbnB1dCh4MTFJbmZvKCktPmRpc3BsYXkoKSwg
d2luSWQoKSwKKyAgICAgICAgICAgIEtleVByZXNzTWFzayB8IEtleVJlbGVhc2VNYXNrCisgICAg
ICAgICAgICB8IEJ1dHRvblByZXNzTWFzayB8IEJ1dHRvblJlbGVhc2VNYXNrIHwgQnV0dG9uTW90
aW9uTWFzaworICAgICAgICAgICAgfCBLZXltYXBTdGF0ZU1hc2sKKyAgICAgICAgICAgIHwgUG9p
bnRlck1vdGlvbk1hc2sKKyAgICAgICAgICAgIHwgRW50ZXJXaW5kb3dNYXNrIHwgTGVhdmVXaW5k
b3dNYXNrCisgICAgICAgICAgICB8IEZvY3VzQ2hhbmdlTWFzaworICAgICAgICAgICAgfCBFeHBv
c3VyZU1hc2sKKyAgICAgICAgICAgIHwgU3RydWN0dXJlTm90aWZ5TWFzaworICAgICAgICAgICAg
fCBTdWJzdHJ1Y3R1cmVOb3RpZnlNYXNrKTsKKworICAgIFhGbHVzaCh4MTFJbmZvKCktPmRpc3Bs
YXkoKSk7Cit9CisKK1gxMUVtYmVkQ29udGFpbmVyOjp+WDExRW1iZWRDb250YWluZXIoKQorewor
ICAgIHNldFZpc2libGUoZmFsc2UpOworCisgICAgaWYgKGNsaWVudCgpKSB7CisgICAgICAgIFhV
bm1hcFdpbmRvdyh4MTFJbmZvKCktPmRpc3BsYXkoKSwgY2xpZW50KCkpOworICAgICAgICBYUmVw
YXJlbnRXaW5kb3coeDExSW5mbygpLT5kaXNwbGF5KCksIGNsaWVudCgpLCByb290V2luZG93KCks
IDAsIDApOworICAgIH0KK30KKwordm9pZCBYMTFFbWJlZENvbnRhaW5lcjo6bW92ZUlucHV0Rm9j
dXNUb1Byb3h5KCkKK3sKKyAgICBpZiAoaGFzRm9jdXMoKSkKKyAgICAgICAgcmV0dXJuOworCisg
ICAgWFNldElucHV0Rm9jdXMoeDExSW5mbygpLT5kaXNwbGF5KCksIG1fZm9jdXNQcm94eS0+d2lu
SWQoKSwgUmV2ZXJ0VG9QYXJlbnQsIHgxMUluZm8oKS0+eDExVGltZSgpKTsKK30KKwordm9pZCBY
MTFFbWJlZENvbnRhaW5lcjo6YWNjZXB0KFdpbklkIGNsaWVudCkKK3sKKyAgICBzZXRDbGllbnQo
Y2xpZW50KTsKKyAgICBtX2NsaWVudFdpbmRvdy0+aW5zdGFsbEV2ZW50RmlsdGVyKHRoaXMpOwor
CisgICAgWEFkZFRvU2F2ZVNldCh4MTFJbmZvKCktPmRpc3BsYXkoKSwgY2xpZW50KTsgLy8gYXZv
aWQgY2xpZW50IGZyb20gY3Jhc2hpbmcgYWxvbmcgd2l0aCB1cworCisgICAgdW5zaWduZWQgaW50
IHZlcnNpb24gPSAwOyAvLyBsYXRlc3QgdmVyc2lvbiBvZiB0aGUgc3BlYworCisgICAgaW50IG5p
dGVtcyA9IDA7CisgICAgdW5zaWduZWQgY2hhciAqZGF0YSA9IDA7CisgICAgdW5zaWduZWQgaW50
IGNsaWVudFZlcnNpb24gPSAwOworCisgICAgc3RhdGljIEF0b20gYXRvbSA9IEFUT00oX1hFTUJF
RF9JTkZPKTsKKworICAgIGlmIChlY29yZV94X3dpbmRvd19wcm9wX3Byb3BlcnR5X2dldChjbGll
bnQsIGF0b20sIGF0b20sIDIsICZkYXRhLCAmbml0ZW1zKSkgeworICAgICAgICB1bnNpZ25lZCBp
bnQgKnByb3AgPSAodW5zaWduZWQgaW50ICopIGRhdGE7CisKKyAgICAgICAgaWYgKG5pdGVtcyA+
PSAyKQorICAgICAgICAgICAgY2xpZW50VmVyc2lvbiA9IHByb3BbMF07CisgICAgICAgIGZyZWUo
ZGF0YSk7CisgICAgfQorCisgICAgLy8gQXNrIHRoZSBjbGllbnQgZm9yIGl0cyBtaW5pbXVtIHNp
emUuCisgICAgSW50U2l6ZSBtaW5TaXplSGludDsKKyAgICBYU2l6ZUhpbnRzIHNpemVIaW50Owor
ICAgIGxvbmcgdW51c2VkOworICAgIGlmIChYR2V0V01Ob3JtYWxIaW50cyh4MTFJbmZvKCktPmRp
c3BsYXkoKSwgY2xpZW50LCAmc2l6ZUhpbnQsICZ1bnVzZWQpICYmIChzaXplSGludC5mbGFncyAm
IFBNaW5TaXplKSkKKyAgICAgICAgbWluU2l6ZUhpbnQgPSBJbnRTaXplKHNpemVIaW50Lm1pbl93
aWR0aCwgc2l6ZUhpbnQubWluX2hlaWdodCk7CisgICAgZWxzZQorICAgICAgICBtaW5TaXplSGlu
dCA9IEludFNpemUoMCwgMCk7CisKKyAgICB1bnNpZ25lZCBpbnQgbWluVmVyc2lvbiA9IHZlcnNp
b24gPiBjbGllbnRWZXJzaW9uID8gY2xpZW50VmVyc2lvbiA6IHZlcnNpb247CisKKyAgICBzZW5k
WEVtYmVkTWVzc2FnZShjbGllbnQsIHgxMUluZm8oKS0+ZGlzcGxheSgpLCBYRU1CRURfRU1CRURE
RURfTk9USUZZLCAwLCB3aW5JZCgpLCBtaW5WZXJzaW9uKTsKKworICAgIFhNYXBXaW5kb3coeDEx
SW5mbygpLT5kaXNwbGF5KCksIGNsaWVudCk7CisKKyAgICByZXNpemUobWF4KHNpemUoKS53aWR0
aCgpLCBtaW5TaXplSGludC53aWR0aCgpKSwgbWF4KHNpemUoKS5oZWlnaHQoKSwgbWluU2l6ZUhp
bnQuaGVpZ2h0KCkpKTsKK30KKwordm9pZCBYMTFFbWJlZENvbnRhaW5lcjo6cmVqZWN0KFdpbklk
IGNsaWVudCkKK3sKKyAgICBYUmVtb3ZlRnJvbVNhdmVTZXQoeDExSW5mbygpLT5kaXNwbGF5KCks
IGNsaWVudCk7CisgICAgWFJlcGFyZW50V2luZG93KHgxMUluZm8oKS0+ZGlzcGxheSgpLCBjbGll
bnQsIHJvb3RXaW5kb3coKSwgMCwgMCk7Cit9CisKK3ZvaWQgWDExRW1iZWRDb250YWluZXI6OnNo
b3coKQoreworICAgIFgxMVdpbmRvdzo6c2hvdygpOworCisgICAgLy8gc2lnbmFsIG1hcAorICAg
IGlmIChjbGllbnQoKSkgeworICAgICAgICB1bnNpZ25lZCBpbnQgZGF0YVtdID0ge3hlbWJlZFZl
cnNpb24sIHhlbWJlZE1hcHBlZH07CisgICAgICAgIFhDaGFuZ2VQcm9wZXJ0eSh4MTFJbmZvKCkt
PmRpc3BsYXkoKSwgY2xpZW50KCksIEFUT00oX1hFTUJFRF9JTkZPKSwgQVRPTShfWEVNQkVEX0lO
Rk8pLCAzMiwKKyAgICAgICAgICAgIFByb3BNb2RlUmVwbGFjZSwgKHVuc2lnbmVkIGNoYXIgKikg
ZGF0YSwgMik7CisgICAgfQorfQorCit2b2lkIFgxMUVtYmVkQ29udGFpbmVyOjpoaWRlKCkKK3sK
KyAgICBYMTFXaW5kb3c6OmhpZGUoKTsKKworICAgIC8vIHNpZ25hbCB1bm1hcAorICAgIGlmIChj
bGllbnQoKSkgeworICAgICAgICB1bnNpZ25lZCBpbnQgZGF0YVtdID0ge3hlbWJlZFZlcnNpb24s
IHhlbWJlZE1hcHBlZH07CisgICAgICAgIFhDaGFuZ2VQcm9wZXJ0eSh4MTFJbmZvKCktPmRpc3Bs
YXkoKSwgY2xpZW50KCksIEFUT00oX1hFTUJFRF9JTkZPKSwgQVRPTShfWEVNQkVEX0lORk8pLCAz
MiwKKyAgICAgICAgICAgIFByb3BNb2RlUmVwbGFjZSwgKHVuc2lnbmVkIGNoYXIgKikgZGF0YSwg
Mik7CisgICAgfQorICAgIG1fYWN0aXZlID0gZmFsc2U7Cit9CisKK3ZvaWQgWDExRW1iZWRDb250
YWluZXI6OnJlc2l6ZShpbnQgd2lkdGgsIGludCBoZWlnaHQpCit7CisgICAgWDExV2luZG93Ojpy
ZXNpemUod2lkdGgsIGhlaWdodCk7CisgICAgaWYgKGNsaWVudCgpKQorICAgICAgICBYUmVzaXpl
V2luZG93KHgxMUluZm8oKS0+ZGlzcGxheSgpLCBjbGllbnQoKSwgd2lkdGgsIGhlaWdodCk7Cit9
CisKK3ZvaWQgWDExRW1iZWRDb250YWluZXI6OnNldEZyYW1lUmVjdChjb25zdCBJbnRSZWN0JiBy
ZWN0KQoreworICAgIFgxMVdpbmRvdzo6c2V0RnJhbWVSZWN0KHJlY3QpOworICAgIGlmIChjbGll
bnQoKSkKKyAgICAgICAgWE1vdmVSZXNpemVXaW5kb3coeDExSW5mbygpLT5kaXNwbGF5KCksIGNs
aWVudCgpLCAwLCAwLCByZWN0LndpZHRoKCksIHJlY3QuaGVpZ2h0KCkpOworfQorCit2b2lkIFgx
MUVtYmVkQ29udGFpbmVyOjpzZXRGb2N1cygpCit7CisgICAgbW92ZUlucHV0Rm9jdXNUb1Byb3h5
KCk7CisgICAgbV9hY3RpdmUgPSB0cnVlOworfQorCitib29sIFgxMUVtYmVkQ29udGFpbmVyOjpo
YXNGb2N1cygpCit7CisgICAgV2luSWQgZm9jdXNlZDsKKyAgICBpbnQgcmV2ZXJ0VG87CisgICAg
WEdldElucHV0Rm9jdXMoeDExSW5mbygpLT5kaXNwbGF5KCksICZmb2N1c2VkLCAmcmV2ZXJ0VG8p
OworCisgICAgcmV0dXJuIGZvY3VzZWQgPT0gbV9mb2N1c1Byb3h5LT53aW5JZCgpOworfQorCiti
b29sIFgxMUVtYmVkQ29udGFpbmVyOjppc0FjdGl2ZSgpCit7CisgICAgcmV0dXJuIG1fYWN0aXZl
OworfQorCitXaW5JZCBYMTFFbWJlZENvbnRhaW5lcjo6cm9vdFdpbmRvdygpCit7CisgICAgcmV0
dXJuIERlZmF1bHRSb290V2luZG93KHgxMUluZm8oKS0+ZGlzcGxheSgpKTsKK30KKworYm9vbCBY
MTFFbWJlZENvbnRhaW5lcjo6eDExRXZlbnQoWEV2ZW50KiBldmVudCkKK3sKKyAgICAvLyB3ZSBz
dWJzY3JpYmUgdG8gZXZlbnRzIGRpcmVjdGx5IGZyb20gdGhlIGNsaWVudCBhcyB3ZWxsCisgICAg
Ly8gaW4gb3JkZXIgdG8gcGljayB1cCB3aGVlbCBldmVudHMuCisgICAgaWYgKGV2ZW50LT54YW55
LndpbmRvdyA9PSBjbGllbnQoKSkgeworICAgICAgICBzd2l0Y2ggKGV2ZW50LT50eXBlKSB7Cisg
ICAgICAgIGNhc2UgQnV0dG9uUHJlc3M6CisgICAgICAgICAgICAvLyBtX3BsdWdpblZpZXctPmRp
c3BhdGNoV2hlZWxFdmVudChldmVudCk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2Fz
ZSBCdXR0b25SZWxlYXNlOgorICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAgICAg
cmV0dXJuIHRydWU7CisgICAgfQorCisgICAgc3dpdGNoIChldmVudC0+dHlwZSkgeworICAgIGNh
c2UgRm9jdXNJbjoKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBGb2N1c091dDoKKyAgICAgICAg
Ly8gd2hlbiBvdXIgcHJveHkgZ2FpbiBmb2N1cywgdGhlIGNvbnRhaW5lciBhY3R1YWxseQorICAg
ICAgICAvLyBsb29zZXMgaXQsIHNvIG9ubHkgZGVhY3RpdmF0ZSB3aGVuIHRoZSBwcm94eSBsb29z
ZXMKKyAgICAgICAgLy8gZm9jdXMuCisgICAgICAgIGlmIChldmVudC0+eGFueS53aW5kb3cgIT0g
bV9mb2N1c1Byb3h5LT53aW5JZCgpKQorICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgc2Vu
ZFhFbWJlZE1lc3NhZ2UoY2xpZW50KCksIHgxMUluZm8oKS0+ZGlzcGxheSgpLCBYRU1CRURfRk9D
VVNfT1VUKTsKKyAgICAgICAgbV9hY3RpdmUgPSBmYWxzZTsKKyAgICAgICAgYnJlYWs7CisgICAg
Y2FzZSBMZWF2ZU5vdGlmeToKKyAgICAgICAgc2VuZFhFbWJlZE1lc3NhZ2UoY2xpZW50KCksIHgx
MUluZm8oKS0+ZGlzcGxheSgpLCBYRU1CRURfV0lORE9XX0RFQUNUSVZBVEUpOworICAgICAgICBp
ZiAoIW1fYWN0aXZlKQorICAgICAgICAgICAgZWNvcmVfeF93aW5kb3dfZm9jdXMoZWNvcmVfeF93
aW5kb3dfcGFyZW50X2dldCh3aW5JZCgpKSk7CisKKyAgICAgICAgWFVuZ3JhYkJ1dHRvbih4MTFJ
bmZvKCktPmRpc3BsYXkoKSwgNCwgQW55TW9kaWZpZXIsIGNsaWVudCgpKTsKKyAgICAgICAgWFVu
Z3JhYkJ1dHRvbih4MTFJbmZvKCktPmRpc3BsYXkoKSwgNSwgQW55TW9kaWZpZXIsIGNsaWVudCgp
KTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBFbnRlck5vdGlmeToKKyAgICAgICAgc2VuZFhF
bWJlZE1lc3NhZ2UoY2xpZW50KCksIHgxMUluZm8oKS0+ZGlzcGxheSgpLCBYRU1CRURfV0lORE9X
X0FDVElWQVRFKTsKKyAgICAgICAgbW92ZUlucHV0Rm9jdXNUb1Byb3h5KCk7CisKKyAgICAgICAg
WEdyYWJCdXR0b24oeDExSW5mbygpLT5kaXNwbGF5KCksIDQsIEFueU1vZGlmaWVyLCBjbGllbnQo
KSwgZmFsc2UsCisgICAgICAgICAgICAgICAgQnV0dG9uUHJlc3NNYXNrLCBHcmFiTW9kZUFzeW5j
LCBHcmFiTW9kZUFzeW5jLCAwTCwgMEwpOworICAgICAgICBYR3JhYkJ1dHRvbih4MTFJbmZvKCkt
PmRpc3BsYXkoKSwgNSwgQW55TW9kaWZpZXIsIGNsaWVudCgpLCBmYWxzZSwKKyAgICAgICAgICAg
ICAgICBCdXR0b25QcmVzc01hc2ssIEdyYWJNb2RlQXN5bmMsIEdyYWJNb2RlQXN5bmMsIDBMLCAw
TCk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgS2V5UHJlc3M6CisgICAgY2FzZSBLZXlSZWxl
YXNlOgorICAgICAgICBpZiAoY2xpZW50KCkgJiYgaXNBY3RpdmUoKSkKKyAgICAgICAgICAgIGV2
ZW50LT54a2V5LndpbmRvdyA9IGNsaWVudCgpOworICAgICAgICBlbHNlCisgICAgICAgICAgICBl
dmVudC0+eGtleS53aW5kb3cgPSBlY29yZV94X3dpbmRvd19wYXJlbnRfZ2V0KHdpbklkKCkpOwor
CisgICAgICAgIFhTZW5kRXZlbnQoeDExSW5mbygpLT5kaXNwbGF5KCksIGV2ZW50LT54a2V5Lndp
bmRvdywgZmFsc2UsIE5vRXZlbnRNYXNrLCBldmVudCk7CisgICAgICAgIFhTeW5jKHgxMUluZm8o
KS0+ZGlzcGxheSgpLCBmYWxzZSk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgQ3JlYXRlTm90
aWZ5OgorICAgICAgICBpZiAoY2xpZW50KCkpCisgICAgICAgICAgICByZWplY3QoZXZlbnQtPnhj
cmVhdGV3aW5kb3cud2luZG93KTsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgYWNjZXB0KGV2
ZW50LT54Y3JlYXRld2luZG93LndpbmRvdyk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgRGVz
dHJveU5vdGlmeToKKyAgICAgICAgLy8gY2xpZW50IGdvZXMgYXdheQorICAgICAgICBpZiAoZXZl
bnQtPnhkZXN0cm95d2luZG93LndpbmRvdyA9PSBjbGllbnQoKSkgeworICAgICAgICAgICAgc2V0
Q2xpZW50KDApOworICAgICAgICAgICAgc2V0RnJhbWVSZWN0KEludFJlY3QoLTEsIC0xLCAxLCAx
KSk7CisgICAgICAgIH0KKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBSZXBhcmVudE5vdGlmeToK
KyAgICAgICAgLy8gdGhlIGNsaWVudCByZXBhcmVudHMgaXRzZWxmIG91dCBvZiB1cywgd2FudHMg
dG8gbGVhdmUgdXMKKyAgICAgICAgaWYgKGV2ZW50LT54cmVwYXJlbnQud2luZG93ID09IGNsaWVu
dCgpICYmIGV2ZW50LT54cmVwYXJlbnQucGFyZW50ICE9IHdpbklkKCkpIHsKKyAgICAgICAgICAg
IHNldENsaWVudCgwKTsKKyAgICAgICAgICAgIHNldEZyYW1lUmVjdChJbnRSZWN0KC0xLCAtMSwg
MSwgMSkpOworICAgICAgICB9IGVsc2UgaWYgKGV2ZW50LT54cmVwYXJlbnQucGFyZW50ID09IHdp
bklkKCkpIHsgLy8gdGhlIGNsaWVudCByZXBhcmVudHMgaXRzZWxmIGludG8gdXMKKyAgICAgICAg
ICAgIGlmIChjbGllbnQoKSkKKyAgICAgICAgICAgICAgICByZWplY3QoZXZlbnQtPnhyZXBhcmVu
dC53aW5kb3cpOworICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgIGFjY2VwdChldmVu
dC0+eHJlcGFyZW50LndpbmRvdyk7CisgICAgICAgIH0KKyAgICAgICAgYnJlYWs7CisgICAgY2Fz
ZSBDbGllbnRNZXNzYWdlOgorICAgICAgICBpZiAoZXZlbnQtPnhjbGllbnQubWVzc2FnZV90eXBl
ICE9IEFUT00oX1hFTUJFRCkpCisgICAgICAgICAgICBicmVhazsKKworICAgICAgICAvLyBub3Qg
Zm9yIHVzLCBpZ25vcmUKKyAgICAgICAgaWYgKGV2ZW50LT54Y2xpZW50LndpbmRvdyAhPSB3aW5J
ZCgpKQorICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgc3dpdGNoIChldmVudC0+eGNsaWVu
dC5kYXRhLmxbMV0pIHsKKyAgICAgICAgY2FzZSBYRU1CRURfUkVRVUVTVF9GT0NVUzoKKyAgICAg
ICAgICAgIG1fcGx1Z2luVmlldy0+c2V0Rm9jdXModHJ1ZSk7CisgICAgICAgICAgICBzZW5kWEVt
YmVkTWVzc2FnZShjbGllbnQoKSwgeDExSW5mbygpLT5kaXNwbGF5KCksIFhFTUJFRF9GT0NVU19J
TiwgWEVNQkVEX0ZPQ1VTX0NVUlJFTlQpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNh
c2UgWEVNQkVEX0ZPQ1VTX05FWFQ6CisgICAgICAgICAgICAvLyBDbGllbnQgc2VuZHMgdGhpcyBl
dmVudCB3aGVuIGl0IHJlY2VpdmVkIGEgdGFiCisgICAgICAgICAgICAvLyBmb3J3YXJkIGFuZCB3
YXMgYXQgdGhlIGVuZCBvZiBpdHMgZm9jdXMgY2hhaW4uIElmCisgICAgICAgICAgICAvLyB3ZSBh
cmUgdGhlIG9ubHkgd2lkZ2V0IGluIHRoZSBmb2N1cyBjaGFpbiwgd2Ugc2VuZAorICAgICAgICAg
ICAgLy8gb3Vyc2VsdmVzIGEgRm9jdXNPdXQgZXZlbnQuCisgICAgICAgICAgICBicmVhazsKKyAg
ICAgICAgY2FzZSBYRU1CRURfRk9DVVNfUFJFVjoKKyAgICAgICAgICAgIC8vIENsaWVudCBzZW5k
cyB0aGlzIGV2ZW50IHdoZW4gaXQgcmVjZWl2ZWQgYSBiYWNrdGFiCisgICAgICAgICAgICAvLyBh
bmQgd2FzIGF0IHRoZSBzdGFydCBvZiBpdHMgZm9jdXMgY2hhaW4uIElmIHdlIGFyZQorICAgICAg
ICAgICAgLy8gdGhlIG9ubHkgd2lkZ2V0IGluIHRoZSBmb2N1cyBjaGFpbiwgd2Ugc2VuZAorICAg
ICAgICAgICAgLy8gb3Vyc2VsdmVzIGEgRm9jdXNPdXQgZXZlbnQuCisgICAgICAgICAgICBicmVh
azsKKyAgICAgICAgfQorICAgICAgICBicmVhazsKKyAgICB9CisgICAgcmV0dXJuIGZhbHNlOwor
fQorCit2b2lkIHNlbmRYRW1iZWRNZXNzYWdlKFdpbklkIHdpbmRvdywgRGlzcGxheSogZGlzcGxh
eSwgbG9uZyBtZXNzYWdlLCBsb25nIGRldGFpbCwgbG9uZyBkYXRhMSwgbG9uZyBkYXRhMikKK3sK
KyAgICBYRXZlbnQgZXY7CisgICAgbWVtc2V0KCZldiwgMCwgc2l6ZW9mKGV2KSk7CisgICAgZXYu
eGNsaWVudC50eXBlID0gQ2xpZW50TWVzc2FnZTsKKyAgICBldi54Y2xpZW50LndpbmRvdyA9IHdp
bmRvdzsKKyAgICBldi54Y2xpZW50Lm1lc3NhZ2VfdHlwZSA9IEFUT00oX1hFTUJFRF9JTkZPKTsK
KyAgICBldi54Y2xpZW50LmZvcm1hdCA9IDMyOworICAgIGV2LnhjbGllbnQuZGF0YS5sWzBdID0g
ZWNvcmVfeF9jdXJyZW50X3RpbWVfZ2V0KCk7CisgICAgZXYueGNsaWVudC5kYXRhLmxbMV0gPSBt
ZXNzYWdlOworICAgIGV2LnhjbGllbnQuZGF0YS5sWzJdID0gZGV0YWlsOworICAgIGV2LnhjbGll
bnQuZGF0YS5sWzNdID0gZGF0YTE7CisgICAgZXYueGNsaWVudC5kYXRhLmxbNF0gPSBkYXRhMjsK
KyAgICBYU2VuZEV2ZW50KGRpc3BsYXksIHdpbmRvdywgZmFsc2UsIE5vRXZlbnRNYXNrLCAmZXYp
OworICAgIFhTeW5jKGRpc3BsYXksIGZhbHNlKTsKK30KKwpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvcGx1Z2lucy9lZmwvWDExRW1iZWRDb250YWluZXIuaCBiL1NvdXJjZS9XZWJDb3JlL3Bs
dWdpbnMvZWZsL1gxMUVtYmVkQ29udGFpbmVyLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXgg
MDAwMDAwMC4uMDkwNGQ2NgotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsdWdp
bnMvZWZsL1gxMUVtYmVkQ29udGFpbmVyLmgKQEAgLTAsMCArMSw3NSBAQAorLyoKKyAgICBDb3B5
cmlnaHQgKEMpIDIwMDkgSU5kVCAtIEluc3RpdHV0byBOb2tpYSBkZSBUZWNub2xvZ2lhCisgICAg
Q29weXJpZ2h0IChDKSAyMDA5LTIwMTAgUHJvRlVTSU9OIGVtYmVkZGVkIHN5c3RlbXMKKyAgICBD
b3B5cmlnaHQgKEMpIDIwMDktMjAxMCBTYW1zdW5nIEVsZWN0cm9uaWNzCisKKyAgICBUaGlzIGxp
YnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisg
ICAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQ
dWJsaWMKKyAgICBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3Vu
ZGF0aW9uOyBlaXRoZXIKKyAgICB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3Vy
IG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisKKyAgICBUaGlzIGxpYnJhcnkgaXMgZGlzdHJp
YnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAgICBidXQgV0lUSE9V
VCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICAg
IE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNl
ZSB0aGUgR05VCisgICAgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRl
dGFpbHMuCisKKyAgICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUg
TGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgICAgYWxvbmcgd2l0aCB0aGlzIGxpYnJh
cnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KKyAgICB0aGUg
RnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRo
IEZsb29yLAorICAgIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgorKi8KKworI2lmbmRlZiBY
MTFFbWJlZENvbnRhaW5lcl9oCisjZGVmaW5lIFgxMUVtYmVkQ29udGFpbmVyX2gKKworI2luY2x1
ZGUgIlBsdWdpblZpZXcuaCIKKyNpbmNsdWRlICJYMTFXaW5kb3cuaCIKKworI2luY2x1ZGUgPHd0
Zi9Pd25QdHIuaD4KKyNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+CisKK2NsYXNzIFgxMUVtYmVkQ29u
dGFpbmVyOworY2xhc3MgWDExV2luZG93OworCitjbGFzcyBYMTFFbWJlZENvbnRhaW5lciA6IHB1
YmxpYyBYMTFXaW5kb3cgeworcHVibGljOgorICAgIFgxMUVtYmVkQ29udGFpbmVyKEV2YXMqLCBX
ZWJDb3JlOjpQbHVnaW5WaWV3Kik7CisgICAgflgxMUVtYmVkQ29udGFpbmVyKCk7CisKKyAgICBX
aW5JZCByb290V2luZG93KCk7CisKKyAgICBXaW5JZCBjbGllbnQoKSB7IHJldHVybiBtX2NsaWVu
dDsgfQorICAgIHZvaWQgc2V0Q2xpZW50KFdpbklkIGNsaWVudCkKKyAgICB7CisgICAgICAgIG1f
Y2xpZW50ID0gY2xpZW50OworICAgICAgICBpZiAoY2xpZW50KQorICAgICAgICAgICAgbV9jbGll
bnRXaW5kb3cuc2V0KFgxMVdpbmRvdzo6YWRvcHQoY2xpZW50KSk7CisgICAgfQorCisgICAgdm9p
ZCBhY2NlcHQoV2luSWQgY2xpZW50KTsKKyAgICB2b2lkIHJlamVjdChXaW5JZCBjbGllbnQpOwor
CisgICAgdm9pZCBtb3ZlSW5wdXRGb2N1c1RvUHJveHkoKTsKKyAgICBib29sIHgxMUV2ZW50KFhF
dmVudCopOworCisgICAgdm9pZCBzZXRGcmFtZVJlY3QoY29uc3QgV2ViQ29yZTo6SW50UmVjdCYp
OworCisgICAgdm9pZCByZXNpemUoaW50IHdpZHRoLCBpbnQgaGVpZ2h0KTsKKworICAgIHZvaWQg
c2hvdygpOworICAgIHZvaWQgaGlkZSgpOworCisgICAgdm9pZCBzZXRGb2N1cygpOworICAgIGJv
b2wgaGFzRm9jdXMoKTsKKyAgICBib29sIGlzQWN0aXZlKCk7CisKK3ByaXZhdGU6CisgICAgYm9v
bCBtX2FjdGl2ZTsKKyAgICBXaW5JZCBtX2NsaWVudDsKKworICAgIFdlYkNvcmU6OlBsdWdpblZp
ZXcqIG1fcGx1Z2luVmlldzsKKyAgICBPd25QdHI8WDExV2luZG93PiBtX2ZvY3VzUHJveHk7Cisg
ICAgT3duUHRyPFgxMVdpbmRvdz4gbV9jbGllbnRXaW5kb3c7Cit9OworCisjZW5kaWYgLy8gWDEx
RW1iZWRDb250YWluZXJfaApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGx1Z2lucy9lZmwv
WDExV2luZG93LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsdWdpbnMvZWZsL1gxMVdpbmRvdy5jcHAK
bmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTk0MTE4NQotLS0gL2Rldi9udWxs
CisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsdWdpbnMvZWZsL1gxMVdpbmRvdy5jcHAKQEAgLTAsMCAr
MSwxODMgQEAKKy8qCisgICAgQ29weXJpZ2h0IChDKSAyMDA5IElOZFQgLSBJbnN0aXR1dG8gTm9r
aWEgZGUgVGVjbm9sb2dpYQorICAgIENvcHlyaWdodCAoQykgMjAwOS0yMDEwIFByb0ZVU0lPTiBl
bWJlZGRlZCBzeXN0ZW1zCisgICAgQ29weXJpZ2h0IChDKSAyMDA5LTIwMTAgU2Ftc3VuZyBFbGVj
dHJvbmljcworCisgICAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVk
aXN0cmlidXRlIGl0IGFuZC9vcgorICAgIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhl
IEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgICAgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkg
dGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgICAgdmVyc2lvbiAyIG9mIHRo
ZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorCisgICAg
VGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1
c2VmdWwsCisgICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGlt
cGxpZWQgd2FycmFudHkgb2YKKyAgICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQ
QVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICAgIExpYnJhcnkgR2VuZXJhbCBQdWJs
aWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorCisgICAgWW91IHNob3VsZCBoYXZlIHJlY2Vp
dmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICAg
IGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBu
b3QsIHdyaXRlIHRvCisgICAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEg
RnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKKyAgICBCb3N0b24sIE1BIDAyMTEwLTEzMDEs
IFVTQS4KKyovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJYMTFXaW5kb3cuaCIK
KworI2luY2x1ZGUgPEVjb3JlX0V2YXMuaD4KKwordXNpbmcgbmFtZXNwYWNlIFdlYkNvcmU7CisK
K0VpbmFfQm9vbCBvbkVjb3JlWEV2ZW50KHZvaWQqLCBpbnQgdHlwZSwgdm9pZCogZXZlbnREYXRh
KTsKKwordm9pZCBYMTFXaW5kb3c6OmluaXQoV2luSWQgcGFyZW50LCBJbnRSZWN0JiBnZW9tZXRy
eSkKK3sKKyAgICBtX3dpbklkID0gZWNvcmVfeF93aW5kb3dfbmV3KHBhcmVudCwgZ2VvbWV0cnku
eCgpLCBnZW9tZXRyeS55KCksCisgICAgICAgICAgICBnZW9tZXRyeS53aWR0aCgpLCBnZW9tZXRy
eS5oZWlnaHQoKSk7CisgICAgbV9YRXZlbnRIYW5kbGVyID0gZWNvcmVfZXZlbnRfaGFuZGxlcl9h
ZGQoRUNPUkVfWF9FVkVOVF9BTlksIG9uRWNvcmVYRXZlbnQsIHRoaXMpOworfQorCitYMTFXaW5k
b3cqIFgxMVdpbmRvdzo6YWRvcHQoV2luSWQgaWQpCit7CisgICAgWDExV2luZG93KiB3aW4gPSBu
ZXcgWDExV2luZG93KCk7CisgICAgd2luLT5tX3dpbklkID0gaWQ7CisgICAgd2luLT5tX1hFdmVu
dEhhbmRsZXIgPSBlY29yZV9ldmVudF9oYW5kbGVyX2FkZChFQ09SRV9YX0VWRU5UX0FOWSwgb25F
Y29yZVhFdmVudCwgd2luKTsKKworICAgIHJldHVybiB3aW47Cit9CisKK1gxMVdpbmRvdzo6WDEx
V2luZG93KCkKKyAgICA6IG1feDExSW5mbygwKQorICAgICwgbV92aXNpYmxlKGZhbHNlKQorICAg
ICwgbV9yZWN0KEludFJlY3QoKSkKKyAgICAsIG1fZXZlbnRGaWx0ZXIoMCkKKyAgICAsIG1fYWRv
cHRlZCh0cnVlKQoreworfQorCitYMTFXaW5kb3c6OlgxMVdpbmRvdyhFdmFzICpldmFzLCBJbnRS
ZWN0IGdlb21ldHJ5KQorICAgIDogbV94MTFJbmZvKDApCisgICAgLCBtX3Zpc2libGUoZmFsc2Up
CisgICAgLCBtX3JlY3QoZ2VvbWV0cnkpCisgICAgLCBtX2V2ZW50RmlsdGVyKDApCisgICAgLCBt
X2Fkb3B0ZWQoZmFsc2UpCit7CisgICAgRWNvcmVfRXZhcyogZWUgPSBlY29yZV9ldmFzX2Vjb3Jl
X2V2YXNfZ2V0KGV2YXMpOworICAgIFdpbklkIHBhcmVudCA9IGVjb3JlX2V2YXNfd2luZG93X2dl
dChlZSk7CisgICAgaW5pdChwYXJlbnQsIGdlb21ldHJ5KTsKK30KKworWDExV2luZG93OjpYMTFX
aW5kb3coV2luSWQgcGFyZW50LCBJbnRSZWN0IGdlb21ldHJ5KQorICAgIDogbV94MTFJbmZvKDAp
CisgICAgLCBtX3Zpc2libGUoZmFsc2UpCisgICAgLCBtX3JlY3QoZ2VvbWV0cnkpCisgICAgLCBt
X2V2ZW50RmlsdGVyKDApCisgICAgLCBtX2Fkb3B0ZWQoZmFsc2UpCit7CisgICAgaW5pdChwYXJl
bnQsIGdlb21ldHJ5KTsKK30KKworWDExV2luZG93Ojp+WDExV2luZG93KCkKK3sKKyAgICBlY29y
ZV9ldmVudF9oYW5kbGVyX2RlbChtX1hFdmVudEhhbmRsZXIpOworCisgICAgZGVsZXRlIG1feDEx
SW5mbzsKKyAgICBpZiAoIW1fYWRvcHRlZCkKKyAgICAgICAgZWNvcmVfeF93aW5kb3dfZnJlZSht
X3dpbklkKTsKK30KKwordm9pZCBYMTFXaW5kb3c6OnNob3coKQoreworICAgIGlmIChtX3Zpc2li
bGUpCisgICAgICAgIHJldHVybjsKKyAgICBlY29yZV94X3dpbmRvd19zaG93KG1fd2luSWQpOwor
ICAgIG1fdmlzaWJsZSA9IHRydWU7Cit9CisKK3ZvaWQgWDExV2luZG93OjpoaWRlKCkKK3sKKyAg
ICBpZiAobV92aXNpYmxlKQorICAgICAgICByZXR1cm47CisgICAgZWNvcmVfeF93aW5kb3dfaGlk
ZShtX3dpbklkKTsKKyAgICBtX3Zpc2libGUgPSBmYWxzZTsKK30KKwordm9pZCBYMTFXaW5kb3c6
OnNldFZpc2libGUoYm9vbCBvbikKK3sKKyAgICBpZiAob24pCisgICAgICAgIHNob3coKTsKKyAg
ICBlbHNlCisgICAgICAgIGhpZGUoKTsKK30KKwordm9pZCBYMTFXaW5kb3c6Om1vdmUoaW50IHgs
IGludCB5KQoreworICAgIEludFBvaW50IG5ld1BvcyA9IEludFBvaW50KHgsIHkpOworICAgIGlm
IChnZW9tZXRyeSgpLmxvY2F0aW9uKCkgPT0gbmV3UG9zKQorICAgICAgICByZXR1cm47CisKKyAg
ICBlY29yZV94X3dpbmRvd19tb3ZlKHdpbklkKCksIHgsIHkpOworICAgIG1fcmVjdC5zZXRMb2Nh
dGlvbihuZXdQb3MpOworfQorCit2b2lkIFgxMVdpbmRvdzo6cmVzaXplKGludCB3aWR0aCwgaW50
IGhlaWdodCkKK3sKKyAgICBJbnRTaXplIG5ld1NpemUgPSBJbnRTaXplKHdpZHRoLCBoZWlnaHQp
OworCisgICAgaWYgKHNpemUoKSA9PSBuZXdTaXplKQorICAgICAgICByZXR1cm47CisgICAgZWNv
cmVfeF93aW5kb3dfcmVzaXplKHdpbklkKCksIHdpZHRoLCBoZWlnaHQpOworICAgIG1fcmVjdC5z
ZXRTaXplKG5ld1NpemUpOworfQorCit2b2lkIFgxMVdpbmRvdzo6c2V0RnJhbWVSZWN0KGNvbnN0
IEludFJlY3QmIHJlY3QpCit7CisgICAgaWYgKGdlb21ldHJ5KCkgPT0gcmVjdCkKKyAgICAgICAg
cmV0dXJuOworICAgIGVjb3JlX3hfd2luZG93X21vdmVfcmVzaXplKHdpbklkKCksIHJlY3QueCgp
LCByZWN0LnkoKSwgcmVjdC53aWR0aCgpLCByZWN0LmhlaWdodCgpKTsKKyAgICBtX3JlY3QgPSBy
ZWN0OworfQorCit2b2lkIFgxMVdpbmRvdzo6dXBkYXRlKGNvbnN0IEludFJlY3QmIHJlY3QpCit7
CisgICAgZWNvcmVfeF93aW5kb3dfYXJlYV9leHBvc2Uod2luSWQoKSwgcmVjdC54KCksIHJlY3Qu
eSgpLCByZWN0LndpZHRoKCksIHJlY3QuaGVpZ2h0KCkpOworfQorCit2b2lkIFgxMVdpbmRvdzo6
c2V0Rm9jdXMoKQoreworICAgIGVjb3JlX3hfd2luZG93X2ZvY3VzKHdpbklkKCkpOworfQorCit2
b2lkIFgxMVdpbmRvdzo6aW5zdGFsbEV2ZW50RmlsdGVyKFgxMVdpbmRvdyogb2JqZWN0KQorewor
ICAgIG1fZXZlbnRGaWx0ZXIgPSBvYmplY3Q7Cit9CisKK3ZvaWQgWDExV2luZG93Ojpwcm9jZXNz
RXZlbnQoWEV2ZW50KiB4ZXZlbnQpCit7CisgICAgYm9vbCBoYW5kbGVkID0gZmFsc2U7CisKKyAg
ICBpZiAobV9ldmVudEZpbHRlcikKKyAgICAgICAgaGFuZGxlZCA9IG1fZXZlbnRGaWx0ZXItPngx
MUV2ZW50KHhldmVudCk7CisKKyAgICBpZiAoaGFuZGxlZCkKKyAgICAgICAgcmV0dXJuOworCisg
ICAgeDExRXZlbnQoeGV2ZW50KTsKK30KKworYm9vbCBYMTFXaW5kb3c6OngxMUV2ZW50KFhFdmVu
dCogeGV2ZW50KQoreworICAgIHJldHVybiBmYWxzZTsKK30KKworRWluYV9Cb29sIG9uRWNvcmVY
RXZlbnQodm9pZCogb2JqZWN0LCBpbnQgdHlwZSwgdm9pZCogZXZlbnREYXRhKQoreworICAgIFgx
MVdpbmRvdyogd2luID0gc3RhdGljX2Nhc3Q8WDExV2luZG93Kj4ob2JqZWN0KTsKKworICAgIFhF
dmVudCogeGV2ZW50ID0gKFhFdmVudCopIGV2ZW50RGF0YTsKKworICAgIGlmICh4ZXZlbnQtPnR5
cGUgPiAxICYmIHhldmVudC0+eGFueS53aW5kb3cgPT0gd2luLT53aW5JZCgpKQorICAgICAgICB3
aW4tPnByb2Nlc3NFdmVudCh4ZXZlbnQpOworCisgICAgcmV0dXJuIEVDT1JFX0NBTExCQUNLX1JF
TkVXOworfQorCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbHVnaW5zL2VmbC9YMTFXaW5k
b3cuaCBiL1NvdXJjZS9XZWJDb3JlL3BsdWdpbnMvZWZsL1gxMVdpbmRvdy5oCm5ldyBmaWxlIG1v
ZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmM5NzdhZWIKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9wbHVnaW5zL2VmbC9YMTFXaW5kb3cuaApAQCAtMCwwICsxLDEwNSBAQAorLyoK
KyAgICBDb3B5cmlnaHQgKEMpIDIwMDkgSU5kVCAtIEluc3RpdHV0byBOb2tpYSBkZSBUZWNub2xv
Z2lhCisgICAgQ29weXJpZ2h0IChDKSAyMDA5LTIwMTAgUHJvRlVTSU9OIGVtYmVkZGVkIHN5c3Rl
bXMKKyAgICBDb3B5cmlnaHQgKEMpIDIwMDktMjAxMCBTYW1zdW5nIEVsZWN0cm9uaWNzCisKKyAg
ICBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQg
YW5kL29yCisgICAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkg
R2VuZXJhbCBQdWJsaWMKKyAgICBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0
d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAgICB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9y
IChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisKKyAgICBUaGlzIGxpYnJhcnkg
aXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAgICBi
dXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50
eSBvZgorICAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVS
UE9TRS4gIFNlZSB0aGUgR05VCisgICAgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZv
ciBtb3JlIGRldGFpbHMuCisKKyAgICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9m
IHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgICAgYWxvbmcgd2l0aCB0
aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8K
KyAgICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJl
ZXQsIEZpZnRoIEZsb29yLAorICAgIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgorKi8KKwor
I2lmbmRlZiBYMTFXaW5kb3dfaAorI2RlZmluZSBYMTFXaW5kb3dfaAorCisjaW5jbHVkZSAiSW50
UmVjdC5oIgorI2luY2x1ZGUgIlBsdWdpblBhY2thZ2UuaCIKKworI2luY2x1ZGUgPEVjb3JlLmg+
CisjaW5jbHVkZSA8RWNvcmVfWC5oPgorI2luY2x1ZGUgPEV2YXMuaD4KKwordHlwZWRlZiBXaW5k
b3cgV2luSWQ7CisKK2NsYXNzIFgxMUluZm8geworcHVibGljOgorICAgIERpc3BsYXkqIGRpc3Bs
YXkoKSB7IHJldHVybiAoRGlzcGxheSopIGVjb3JlX3hfZGlzcGxheV9nZXQoKTsgfQorICAgIFZp
c3VhbCogdmlzdWFsKCkgeyByZXR1cm4gKFZpc3VhbCopIG1fYXR0LnZpc3VhbDsgfQorICAgIHVu
c2lnbmVkIGludCBkZXB0aCgpIHsgcmV0dXJuIG1fYXR0LmRlcHRoOyB9CisgICAgQ29sb3JtYXAg
Y29sb3JtYXAoKSB7IHJldHVybiBtX2F0dC5jb2xvcm1hcDsgfQorICAgIHVuc2lnbmVkIGludCB4
MTFUaW1lKCkgeyByZXR1cm4gZWNvcmVfeF9jdXJyZW50X3RpbWVfZ2V0KCk7IH0KKworcHJpdmF0
ZToKKyAgICBYMTFJbmZvKFdpbklkIG93bmVyKQorICAgIHsKKyAgICAgICAgbV9vd25lciA9IG93
bmVyOworICAgICAgICBlY29yZV94X3dpbmRvd19hdHRyaWJ1dGVzX2dldChvd25lciwgJm1fYXR0
KTsKKyAgICAgICAgbV9hdHQuY29sb3JtYXAgPSBEZWZhdWx0Q29sb3JtYXAoZGlzcGxheSgpLCBE
ZWZhdWx0U2NyZWVuKGRpc3BsYXkoKSkpOworICAgIH0KKyAgICBXaW5JZCBtX293bmVyOworICAg
IEVjb3JlX1hfV2luZG93X0F0dHJpYnV0ZXMgbV9hdHQ7CisgICAgZnJpZW5kIGNsYXNzIFgxMVdp
bmRvdzsKK307CisKK2NsYXNzIFgxMVdpbmRvdyB7CitwdWJsaWM6CisgICAgWDExV2luZG93KEV2
YXMgKiwgV2ViQ29yZTo6SW50UmVjdCBnZW9tZXRyeSA9IFdlYkNvcmU6OkludFJlY3QoMCwgMCwg
MzIsIDMyKSk7CisgICAgWDExV2luZG93KFdpbklkIHBhcmVudCwgV2ViQ29yZTo6SW50UmVjdCBn
ZW9tZXRyeSA9IFdlYkNvcmU6OkludFJlY3QoMCwgMCwgMzIsIDMyKSk7CisgICAgflgxMVdpbmRv
dygpOworCisgICAgc3RhdGljIFgxMVdpbmRvdyogYWRvcHQoV2luSWQpOworCisgICAgWDExSW5m
byogeDExSW5mbygpCisgICAgeworICAgICAgICBpZiAoIW1feDExSW5mbykKKyAgICAgICAgICAg
IG1feDExSW5mbyA9IG5ldyBYMTFJbmZvKG1fd2luSWQpOworICAgICAgICByZXR1cm4gbV94MTFJ
bmZvOworICAgIH0KKworICAgIFdlYkNvcmU6OkludFNpemUgc2l6ZSgpIHsgcmV0dXJuIG1fcmVj
dC5zaXplKCk7IH0KKyAgICBXZWJDb3JlOjpJbnRSZWN0IGdlb21ldHJ5KCkgeyByZXR1cm4gbV9y
ZWN0OyB9CisKKyAgICB2b2lkIGluc3RhbGxFdmVudEZpbHRlcihYMTFXaW5kb3cqKTsKKyAgICB2
b2lkIHByb2Nlc3NFdmVudChYRXZlbnQqIHhldmVudCk7CisgICAgdmlydHVhbCBib29sIHgxMUV2
ZW50KFhFdmVudCopOworCisgICAgdmlydHVhbCB2b2lkIHNldEZyYW1lUmVjdChjb25zdCBXZWJD
b3JlOjpJbnRSZWN0Jik7CisKKyAgICB2aXJ0dWFsIHZvaWQgbW92ZShpbnQgeCwgaW50IHkpOwor
ICAgIHZpcnR1YWwgdm9pZCByZXNpemUoaW50IHdpZHRoLCBpbnQgaGVpZ2h0KTsKKworICAgIHZp
cnR1YWwgdm9pZCB1cGRhdGUoY29uc3QgV2ViQ29yZTo6SW50UmVjdCYpOworCisgICAgdmlydHVh
bCB2b2lkIHNob3coKTsKKyAgICB2aXJ0dWFsIHZvaWQgaGlkZSgpOworICAgIHZvaWQgc2V0Vmlz
aWJsZShib29sIG9uKTsKKyAgICB2aXJ0dWFsIHZvaWQgc2V0Rm9jdXMoKTsKKworICAgIFdpbklk
IHdpbklkKCkgeyByZXR1cm4gbV93aW5JZDsgfQorCitwcm90ZWN0ZWQ6CisgICAgWDExV2luZG93
KCk7CisgICAgdm9pZCBpbml0KFdpbklkIHBhcmVudCwgV2ViQ29yZTo6SW50UmVjdCYgZ2VvbWV0
cnkpOworICAgIHZvaWQgYWNjZXB0RXZlbnRUeXBlKGludCB0eXBlKTsKKworICAgIFdpbklkIG1f
d2luSWQ7CisgICAgWDExSW5mbyogbV94MTFJbmZvOworICAgIGJvb2wgbV92aXNpYmxlOworICAg
IFdlYkNvcmU6OkludFJlY3QgbV9yZWN0OworICAgIFgxMVdpbmRvdyogbV9ldmVudEZpbHRlcjsK
KyAgICBFY29yZV9FdmVudF9IYW5kbGVyKiBtX1hFdmVudEhhbmRsZXI7CisgICAgYm9vbCBtX2Fk
b3B0ZWQ7Cit9OworCisKKyNlbmRpZiAvLyBYMTFXaW5kb3dfaApkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYktpdC9lZmwvQ2hhbmdlTG9nIGIvU291cmNlL1dlYktpdC9lZmwvQ2hhbmdlTG9nCmluZGV4
IGQ2MTcwNDguLjVmM2E2OTAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvZWZsL0NoYW5nZUxv
ZworKysgYi9Tb3VyY2UvV2ViS2l0L2VmbC9DaGFuZ2VMb2cKQEAgLTEsMyArMSwxMiBAQAorMjAx
MS0wMi0wNCAgTWFyaXVzeiBHcnplZ29yY3p5ayAgPG1hcml1c3ouZ0BzYW1zdW5nLmNvbT4KKwor
ICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBDcmVhdGluZyBQ
bHVnaW5WaWV3IGluIGV3a19mcmFtZV9wbHVnaW5fY3JlYXRlKCkgZnVuY3Rpb24KKworICAgICAg
ICAqIGV3ay9ld2tfZnJhbWUuY3BwOgorICAgICAgICAoZXdrX2ZyYW1lX3BsdWdpbl9jcmVhdGUp
OgorCiAyMDExLTAxLTI5ICBEYW4gV2luc2hpcCAgPGRhbndAZ25vbWUub3JnPgogCiAgICAgICAg
IFJldmlld2VkIGJ5IFhhbiBMb3Blei4KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvZWZsL2V3
ay9ld2tfZnJhbWUuY3BwIGIvU291cmNlL1dlYktpdC9lZmwvZXdrL2V3a19mcmFtZS5jcHAKaW5k
ZXggZjI2ZDRjZi4uYzZkMmY5ZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9lZmwvZXdrL2V3
a19mcmFtZS5jcHAKKysrIGIvU291cmNlL1dlYktpdC9lZmwvZXdrL2V3a19mcmFtZS5jcHAKQEAg
LTIwMzMsNSArMjAzMywyNCBAQCB2b2lkIGV3a19mcmFtZV9mb3JjZV9sYXlvdXQoRXZhc19PYmpl
Y3QqIG8pCiAKIFdURjo6UGFzc1JlZlB0cjxXZWJDb3JlOjpXaWRnZXQ+IGV3a19mcmFtZV9wbHVn
aW5fY3JlYXRlKEV2YXNfT2JqZWN0KiBvLCBjb25zdCBXZWJDb3JlOjpJbnRTaXplJiBwbHVnaW5T
aXplLCBXZWJDb3JlOjpIVE1MUGx1Z0luRWxlbWVudCogZWxlbWVudCwgY29uc3QgV2ViQ29yZTo6
S1VSTCYgdXJsLCBjb25zdCBXVEY6OlZlY3RvcjxXVEY6OlN0cmluZz4mIHBhcmFtTmFtZXMsIGNv
bnN0IFdURjo6VmVjdG9yPFdURjo6U3RyaW5nPiYgcGFyYW1WYWx1ZXMsIGNvbnN0IFdURjo6U3Ry
aW5nJiBtaW1lVHlwZSwgYm9vbCBsb2FkTWFudWFsbHkpCiB7CisjaWYgRU5BQkxFKE5FVFNDQVBF
X1BMVUdJTl9BUEkpCisgICAgREJHKCJvPSVwLCBzaXplPSVkeCVkLCBlbGVtZW50PSVwLCB1cmw9
JXMsIG1pbWVUeXBlPSVzIiwKKyAgICAgICAgbywgcGx1Z2luU2l6ZS53aWR0aCgpLCBwbHVnaW5T
aXplLmhlaWdodCgpLCBlbGVtZW50LAorICAgICAgICB1cmwucHJldHR5VVJMKCkudXRmOCgpLmRh
dGEoKSwgbWltZVR5cGUudXRmOCgpLmRhdGEoKSk7CisKKyAgICBFV0tfRlJBTUVfU0RfR0VUX09S
X1JFVFVSTihvLCBzZCwgMCk7CisKKyAgICAvLyBUT0RPOiBlbWl0IHNpZ25hbCBhbmQgYXNrIHdl
YmtpdCB1c2VycyBpZiBzb21ldGhpbmcgZWxzZSBzaG91bGQgYmUgZG9uZS4KKyAgICAvLyBsaWtl
IGNyZWF0aW5nIGFub3RoZXIgeCB3aW5kb3cgKHNlZSBndGssIGl0IGFsbG93cyB1c2VycyB0byBj
cmVhdGUKKyAgICAvLyBHdGtQbHVnaW5XaWRnZXQuCisKKyAgICBXVEY6OlJlZlB0cjxXZWJDb3Jl
OjpQbHVnaW5WaWV3PiBwbHVnaW5WaWV3ID0gV2ViQ29yZTo6UGx1Z2luVmlldzo6Y3JlYXRlCisg
ICAgICAgIChzZC0+ZnJhbWUsIHBsdWdpblNpemUsIGVsZW1lbnQsIHVybCwgcGFyYW1OYW1lcywg
cGFyYW1WYWx1ZXMsCisgICAgICAgIG1pbWVUeXBlLCBsb2FkTWFudWFsbHkpOworCisgICAgaWYg
KHBsdWdpblZpZXctPnN0YXR1cygpID09IFdlYkNvcmU6OlBsdWdpblN0YXR1c0xvYWRlZFN1Y2Nl
c3NmdWxseSkKKyAgICAgICAgcmV0dXJuIHBsdWdpblZpZXc7CisjZWxzZQogICAgIHJldHVybiAw
OworI2VuZGlmIC8vICNpZiBFTkFCTEUoTkVUU0NBUEVfUExVR0lOX0FQSSkKIH0K
</data>
<flag name="commit-queue"
          id="72771"
          type_id="3"
          status="-"
          setter="gyuyoung.kim"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>85669</attachid>
            <date>2011-03-14 06:21:30 -0700</date>
            <delta_ts>2011-04-08 05:40:23 -0700</delta_ts>
            <desc>EFL&apos;s plugin support</desc>
            <filename>efl_plugin.patch</filename>
            <type>text/plain</type>
            <size>54794</size>
            <attacher name="Mariusz Grzegorczyk">mariusz.g</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cgYi9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvQ2hhbmdlTG9nCmluZGV4IGMyNGQzNmYuLjNlMjk4NzkgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKKysrIGIvU291cmNlL0phdmFTY3JpcHRD
b3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDEyIEBACisyMDExLTAzLTE0ICBNYXJpdXN6IEdyemVn
b3JjenlrICA8bWFyaXVzei5nQHNhbXN1bmcuY29tPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5P
Qk9EWSAoT09QUyEpLgorCisgICAgICAgIEJ1ZyA0NDUwNSAtIFtFRkxdIE1pc3NpbmcgcGx1Z2lu
cyBzdXBwb3J0IGZvciBlZmwgcG9ydAorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9z
aG93X2J1Zy5jZ2k/aWQ9NDQ1MDUKKworICAgICAgICAqIHd0Zi9QbGF0Zm9ybS5oOgorCiAyMDEx
LTAzLTEzICBHZW9mZnJleSBHYXJlbiAgPGdnYXJlbkBhcHBsZS5jb20+CiAKICAgICAgICAgUmV2
aWV3ZWQgYnkgU2FtIFdlaW5pZy4KZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93
dGYvUGxhdGZvcm0uaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93dGYvUGxhdGZvcm0uaAppbmRl
eCAxZWRiNTQ2Li4yZDI1ZTk5IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd3Rm
L1BsYXRmb3JtLmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3d0Zi9QbGF0Zm9ybS5oCkBA
IC0xMTQ0LDcgKzExNDQsNyBAQAogI2RlZmluZSBXQVJOX1VOVVNFRF9SRVRVUk4KICNlbmRpZgog
Ci0jaWYgIUVOQUJMRShORVRTQ0FQRV9QTFVHSU5fQVBJKSB8fCAoRU5BQkxFKE5FVFNDQVBFX1BM
VUdJTl9BUEkpICYmICgoT1MoVU5JWCkgJiYgKFBMQVRGT1JNKFFUKSB8fCBQTEFURk9STShXWCkp
KSB8fCBQTEFURk9STShHVEspKSkKKyNpZiAhRU5BQkxFKE5FVFNDQVBFX1BMVUdJTl9BUEkpIHx8
IChFTkFCTEUoTkVUU0NBUEVfUExVR0lOX0FQSSkgJiYgKChPUyhVTklYKSAmJiAoUExBVEZPUk0o
UVQpIHx8IFBMQVRGT1JNKFdYKSkpIHx8IFBMQVRGT1JNKEdUSykgfHwgUExBVEZPUk0oRUZMKSkp
CiAjZGVmaW5lIEVOQUJMRV9QTFVHSU5fUEFDS0FHRV9TSU1QTEVfSEFTSCAxCiAjZW5kaWYKIApk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvQ01ha2VMaXN0c0VmbC50eHQgYi9Tb3VyY2UvV2Vi
Q29yZS9DTWFrZUxpc3RzRWZsLnR4dAppbmRleCA3YmYyZmIwLi44NGE5NzAwIDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9DTWFrZUxpc3RzRWZsLnR4dAorKysgYi9Tb3VyY2UvV2ViQ29yZS9D
TWFrZUxpc3RzRWZsLnR4dApAQCAtMTEsNiArMTEsNyBAQCBMSVNUKEFQUEVORCBXZWJDb3JlX0lO
Q0xVREVfRElSRUNUT1JJRVMKICAgIiR7V0VCQ09SRV9ESVJ9L3BsYXRmb3JtL2dyYXBoaWNzL2Vm
bCIKICAgIiR7V0VCQ09SRV9ESVJ9L3BhZ2UvZWZsIgogICAiJHtXRUJDT1JFX0RJUn0vYWNjZXNz
aWJpbGl0eS9lZmwiCisgICIke1dFQkNPUkVfRElSfS9wbHVnaW5zL2VmbCIKICAgIiR7V0VCS0lU
X0RJUn0vZWZsL1dlYkNvcmVTdXBwb3J0IgogICAiJHtXRUJLSVRfRElSfS9lZmwvZXdrIgogICAi
JHtERVJJVkVEX1NPVVJDRVNfRElSfSIKQEAgLTcyLDkgKzczLDMxIEBAIExJU1QoQVBQRU5EIFdl
YkNvcmVfU09VUkNFUwogICBwbGF0Zm9ybS9pbWFnZS1kZWNvZGVycy93ZWJwL1dFQlBJbWFnZURl
Y29kZXIuY3BwCiAgIHBsYXRmb3JtL3Bvc2l4L0ZpbGVTeXN0ZW1QT1NJWC5jcHAKICAgcGxhdGZv
cm0vdGV4dC9lZmwvVGV4dEJyZWFrSXRlcmF0b3JJbnRlcm5hbElDVUVmbC5jcHAKLSAgcGx1Z2lu
cy9QbHVnaW5EYXRhTm9uZS5jcHAKICkKIAorCitJRiAoRU5BQkxFX05FVFNDQVBFX1BMVUdJTl9B
UEkpCisgICAgTElTVChBUFBFTkQgV2ViQ29yZV9TT1VSQ0VTCisgICAgcGx1Z2lucy9QbHVnaW5E
YXRhYmFzZS5jcHAKKyAgICBwbHVnaW5zL1BsdWdpbkRlYnVnLmNwcAorICAgIHBsdWdpbnMvUGx1
Z2luUGFja2FnZS5jcHAKKyAgICBwbHVnaW5zL1BsdWdpblN0cmVhbS5jcHAKKyAgICBwbHVnaW5z
L1BsdWdpblZpZXcuY3BwCisgICAgcGx1Z2lucy9lZmwvUGx1Z2luRGF0YUVmbC5jcHAKKyAgICBw
bHVnaW5zL2VmbC9QbHVnaW5QYWNrYWdlRWZsLmNwcAorICAgIHBsdWdpbnMvZWZsL1BsdWdpblZp
ZXdFZmwuY3BwCisgICAgcGx1Z2lucy9lZmwvWDExRW1iZWRDb250YWluZXIuY3BwCisgICAgcGx1
Z2lucy9lZmwvWDExV2luZG93LmNwcAorICAgICkKK0VMU0UgKCkKKyAgICBMSVNUKEFQUEVORCBX
ZWJDb3JlX1NPVVJDRVMKKyAgICBwbHVnaW5zL1BsdWdpbkRhdGFOb25lLmNwcAorICAgIHBsdWdp
bnMvUGx1Z2luUGFja2FnZU5vbmUuY3BwCisgICAgcGx1Z2lucy9QbHVnaW5WaWV3Tm9uZS5jcHAK
KyAgICApCitFTkRJRiAoKQorCisKIElGIChXVEZfUExBVEZPUk1fQ0FJUk8pCiAgIExJU1QoQVBQ
RU5EIFdlYkNvcmVfSU5DTFVERV9ESVJFQ1RPUklFUwogICAgICIke1dFQkNPUkVfRElSfS9wbGF0
Zm9ybS9ncmFwaGljcy9jYWlybyIKQEAgLTEzNyw2ICsxNjAsNyBAQCBJRiAoV1RGX1VTRV9TT1VQ
KQogICBMSVNUKEFQUEVORCBXZWJDb3JlX1NPVVJDRVMKICAgICBwbGF0Zm9ybS9uZXR3b3JrL3Nv
dXAvQ29va2llSmFyU291cC5jcHAKICAgICBwbGF0Zm9ybS9uZXR3b3JrL3NvdXAvR093blB0clNv
dXAuY3BwCisgICAgcGxhdGZvcm0vbmV0d29yay9zb3VwL1Byb3h5U2VydmVyU291cC5jcHAKICAg
ICBwbGF0Zm9ybS9uZXR3b3JrL3NvdXAvUmVzb3VyY2VIYW5kbGVTb3VwLmNwcAogICAgIHBsYXRm
b3JtL25ldHdvcmsvc291cC9SZXNvdXJjZVJlcXVlc3RTb3VwLmNwcAogICAgIHBsYXRmb3JtL25l
dHdvcmsvc291cC9SZXNvdXJjZVJlc3BvbnNlU291cC5jcHAKQEAgLTE1Myw2ICsxNzcsNyBAQCBJ
RiAoV1RGX1VTRV9DVVJMKQogICAgIHBsYXRmb3JtL25ldHdvcmsvY3VybC9Db29raWVKYXJDdXJs
LmNwcAogICAgIHBsYXRmb3JtL25ldHdvcmsvY3VybC9ETlNDdXJsLmNwcAogICAgIHBsYXRmb3Jt
L25ldHdvcmsvY3VybC9Gb3JtRGF0YVN0cmVhbUN1cmwuY3BwCisgICAgcGxhdGZvcm0vbmV0d29y
ay9jdXJsL1Byb3h5U2VydmVyQ3VybC5jcHAKICAgICBwbGF0Zm9ybS9uZXR3b3JrL2N1cmwvUmVz
b3VyY2VIYW5kbGVDdXJsLmNwcAogICAgIHBsYXRmb3JtL25ldHdvcmsvY3VybC9SZXNvdXJjZUhh
bmRsZU1hbmFnZXIuY3BwCiAgICAgcGxhdGZvcm0vbmV0d29yay9jdXJsL1NvY2tldFN0cmVhbUhh
bmRsZUN1cmwuY3BwCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cgYi9Tb3Vy
Y2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggMDkwNjI3Yy4uMDIyMDI3NSAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpA
QCAtMSwzICsxLDk0IEBACisyMDExLTAzLTE0ICBNYXJpdXN6IEdyemVnb3JjenlrICA8bWFyaXVz
ei5nQHNhbXN1bmcuY29tPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgor
CisgICAgICAgIEJ1ZyA0NDUwNSAtIFtFRkxdIE1pc3NpbmcgcGx1Z2lucyBzdXBwb3J0IGZvciBl
ZmwgcG9ydAorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9
NDQ1MDUKKworICAgICAgICBObyBuZXcgdGVzdHMuIChPT1BTISkKKworICAgICAgICAqIENNYWtl
TGlzdHNFZmwudHh0OgorICAgICAgICAqIHBsdWdpbnMvUGx1Z2luVmlldy5oOgorICAgICAgICAq
IHBsdWdpbnMvZWZsL1BsdWdpbkRhdGFFZmwuY3BwOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6
OlBsdWdpbkRhdGE6OmluaXRQbHVnaW5zKToKKyAgICAgICAgKFdlYkNvcmU6OlBsdWdpbkRhdGE6
OnJlZnJlc2gpOgorICAgICAgICAqIHBsdWdpbnMvZWZsL1BsdWdpblBhY2thZ2VFZmwuY3BwOiBB
ZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6OlBsdWdpblBhY2thZ2U6OmZldGNoSW5mbyk6CisgICAg
ICAgIChXZWJDb3JlOjpQbHVnaW5QYWNrYWdlOjpOUFZlcnNpb24pOgorICAgICAgICAoV2ViQ29y
ZTo6UGx1Z2luUGFja2FnZTo6bG9hZCk6CisgICAgICAgICogcGx1Z2lucy9lZmwvUGx1Z2luVmll
d0VmbC5jcHA6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6UGx1Z2luVmlldzo6ZGlzcGF0Y2hO
UEV2ZW50KToKKyAgICAgICAgKFdlYkNvcmU6OlBsdWdpblZpZXc6OmhhbHQpOgorICAgICAgICAo
V2ViQ29yZTo6UGx1Z2luVmlldzo6aGFuZGxlRm9jdXNJbkV2ZW50KToKKyAgICAgICAgKFdlYkNv
cmU6OlBsdWdpblZpZXc6OmhhbmRsZUZvY3VzT3V0RXZlbnQpOgorICAgICAgICAoV2ViQ29yZTo6
UGx1Z2luVmlldzo6cmVzdGFydCk6CisgICAgICAgIChXZWJDb3JlOjpQbHVnaW5WaWV3OjpoYW5k
bGVLZXlib2FyZEV2ZW50KToKKyAgICAgICAgKFdlYkNvcmU6OlBsdWdpblZpZXc6OmhhbmRsZU1v
dXNlRXZlbnQpOgorICAgICAgICAoV2ViQ29yZTo6UGx1Z2luVmlldzo6dXBkYXRlUGx1Z2luV2lk
Z2V0KToKKyAgICAgICAgKFdlYkNvcmU6OlBsdWdpblZpZXc6OnNldEZvY3VzKToKKyAgICAgICAg
KFdlYkNvcmU6OlBsdWdpblZpZXc6OnNob3cpOgorICAgICAgICAoV2ViQ29yZTo6UGx1Z2luVmll
dzo6aGlkZSk6CisgICAgICAgIChXZWJDb3JlOjpQbHVnaW5WaWV3OjpwYWludCk6CisgICAgICAg
IChXZWJDb3JlOjpQbHVnaW5WaWV3OjpzZXRQYXJlbnQpOgorICAgICAgICAoV2ViQ29yZTo6UGx1
Z2luVmlldzo6c2V0TlBXaW5kb3dSZWN0KToKKyAgICAgICAgKFdlYkNvcmU6OlBsdWdpblZpZXc6
OnNldE5QV2luZG93SWZOZWVkZWQpOgorICAgICAgICAoV2ViQ29yZTo6UGx1Z2luVmlldzo6c2V0
UGFyZW50VmlzaWJsZSk6CisgICAgICAgIChXZWJDb3JlOjpQbHVnaW5WaWV3OjpoYW5kbGVQb3N0
UmVhZEZpbGUpOgorICAgICAgICAoV2ViQ29yZTo6UGx1Z2luVmlldzo6cGxhdGZvcm1HZXRWYWx1
ZVN0YXRpYyk6CisgICAgICAgIChXZWJDb3JlOjpQbHVnaW5WaWV3OjpwbGF0Zm9ybUdldFZhbHVl
KToKKyAgICAgICAgKFdlYkNvcmU6OlBsdWdpblZpZXc6OmludmFsaWRhdGVSZWN0KToKKyAgICAg
ICAgKFdlYkNvcmU6OlBsdWdpblZpZXc6OmludmFsaWRhdGVSZWdpb24pOgorICAgICAgICAoV2Vi
Q29yZTo6UGx1Z2luVmlldzo6Zm9yY2VSZWRyYXcpOgorICAgICAgICAoV2ViQ29yZTo6UGx1Z2lu
Vmlldzo6cGxhdGZvcm1TdGFydCk6CisgICAgICAgIChXZWJDb3JlOjpQbHVnaW5WaWV3OjpwbGF0
Zm9ybURlc3Ryb3kpOgorICAgICAgICAqIHBsdWdpbnMvZWZsL1gxMUVtYmVkQ29udGFpbmVyLmNw
cDogQWRkZWQuCisgICAgICAgIChYMTFFbWJlZENvbnRhaW5lcjo6WDExRW1iZWRDb250YWluZXIp
OgorICAgICAgICAoWDExRW1iZWRDb250YWluZXI6On5YMTFFbWJlZENvbnRhaW5lcik6CisgICAg
ICAgIChYMTFFbWJlZENvbnRhaW5lcjo6bW92ZUlucHV0Rm9jdXNUb1Byb3h5KToKKyAgICAgICAg
KFgxMUVtYmVkQ29udGFpbmVyOjphY2NlcHQpOgorICAgICAgICAoWDExRW1iZWRDb250YWluZXI6
OnJlamVjdCk6CisgICAgICAgIChYMTFFbWJlZENvbnRhaW5lcjo6c2hvdyk6CisgICAgICAgIChY
MTFFbWJlZENvbnRhaW5lcjo6aGlkZSk6CisgICAgICAgIChYMTFFbWJlZENvbnRhaW5lcjo6cmVz
aXplKToKKyAgICAgICAgKFgxMUVtYmVkQ29udGFpbmVyOjpzZXRGcmFtZVJlY3QpOgorICAgICAg
ICAoWDExRW1iZWRDb250YWluZXI6OnNldEZvY3VzKToKKyAgICAgICAgKFgxMUVtYmVkQ29udGFp
bmVyOjpoYXNGb2N1cyk6CisgICAgICAgIChYMTFFbWJlZENvbnRhaW5lcjo6aXNBY3RpdmUpOgor
ICAgICAgICAoWDExRW1iZWRDb250YWluZXI6OnJvb3RXaW5kb3cpOgorICAgICAgICAoWDExRW1i
ZWRDb250YWluZXI6OngxMUV2ZW50KToKKyAgICAgICAgKHNlbmRYRW1iZWRNZXNzYWdlKToKKyAg
ICAgICAgKiBwbHVnaW5zL2VmbC9YMTFFbWJlZENvbnRhaW5lci5oOiBBZGRlZC4KKyAgICAgICAg
KFgxMUVtYmVkQ29udGFpbmVyOjpjbGllbnQpOgorICAgICAgICAoWDExRW1iZWRDb250YWluZXI6
OnNldENsaWVudCk6CisgICAgICAgICogcGx1Z2lucy9lZmwvWDExV2luZG93LmNwcDogQWRkZWQu
CisgICAgICAgIChYMTFXaW5kb3c6OmluaXQpOgorICAgICAgICAoWDExV2luZG93OjphZG9wdCk6
CisgICAgICAgIChYMTFXaW5kb3c6OlgxMVdpbmRvdyk6CisgICAgICAgIChYMTFXaW5kb3c6On5Y
MTFXaW5kb3cpOgorICAgICAgICAoWDExV2luZG93OjpzaG93KToKKyAgICAgICAgKFgxMVdpbmRv
dzo6aGlkZSk6CisgICAgICAgIChYMTFXaW5kb3c6OnNldFZpc2libGUpOgorICAgICAgICAoWDEx
V2luZG93Ojptb3ZlKToKKyAgICAgICAgKFgxMVdpbmRvdzo6cmVzaXplKToKKyAgICAgICAgKFgx
MVdpbmRvdzo6c2V0RnJhbWVSZWN0KToKKyAgICAgICAgKFgxMVdpbmRvdzo6dXBkYXRlKToKKyAg
ICAgICAgKFgxMVdpbmRvdzo6c2V0Rm9jdXMpOgorICAgICAgICAoWDExV2luZG93OjppbnN0YWxs
RXZlbnRGaWx0ZXIpOgorICAgICAgICAoWDExV2luZG93Ojpwcm9jZXNzRXZlbnQpOgorICAgICAg
ICAoWDExV2luZG93Ojp4MTFFdmVudCk6CisgICAgICAgIChvbkVjb3JlWEV2ZW50KToKKyAgICAg
ICAgKiBwbHVnaW5zL2VmbC9YMTFXaW5kb3cuaDogQWRkZWQuCisgICAgICAgIChYMTFJbmZvOjpk
aXNwbGF5KToKKyAgICAgICAgKFgxMUluZm86OnZpc3VhbCk6CisgICAgICAgIChYMTFJbmZvOjpk
ZXB0aCk6CisgICAgICAgIChYMTFJbmZvOjpjb2xvcm1hcCk6CisgICAgICAgIChYMTFJbmZvOjp4
MTFUaW1lKToKKyAgICAgICAgKFgxMUluZm86OlgxMUluZm8pOgorICAgICAgICAoWDExV2luZG93
Ojp4MTFJbmZvKToKKyAgICAgICAgKFgxMVdpbmRvdzo6c2l6ZSk6CisgICAgICAgIChYMTFXaW5k
b3c6Omdlb21ldHJ5KToKKyAgICAgICAgKFgxMVdpbmRvdzo6d2luSWQpOgorCiAyMDExLTAzLTE0
ICBQYXZlbCBGZWxkbWFuICA8cGZlbGRtYW5AY2hyb21pdW0ub3JnPgogCiAgICAgICAgIFJldmll
d2VkIGJ5IFl1cnkgU2VtaWtoYXRza3kuCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbHVn
aW5zL1BsdWdpblZpZXcuaCBiL1NvdXJjZS9XZWJDb3JlL3BsdWdpbnMvUGx1Z2luVmlldy5oCmlu
ZGV4IDg5NjUwOGQuLjZlYmQzZDEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsdWdpbnMv
UGx1Z2luVmlldy5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsdWdpbnMvUGx1Z2luVmlldy5oCkBA
IC01MSw2ICs1MSw5IEBACiAjaWYgT1MoV0lORE9XUykgJiYgKFBMQVRGT1JNKFFUKSB8fCBQTEFU
Rk9STShXWCkpCiB0eXBlZGVmIHN0cnVjdCBIV05EX18qIEhXTkQ7CiB0eXBlZGVmIEhXTkQgUGxh
dGZvcm1QbHVnaW5XaWRnZXQ7CisjZWxpZiBQTEFURk9STShFRkwpCitjbGFzcyBYMTFFbWJlZENv
bnRhaW5lcjsKK3R5cGVkZWYgWDExRW1iZWRDb250YWluZXIqIFBsYXRmb3JtUGx1Z2luV2lkZ2V0
OwogI2Vsc2UKIHR5cGVkZWYgUGxhdGZvcm1XaWRnZXQgUGxhdGZvcm1QbHVnaW5XaWRnZXQ7CiAj
aWYgZGVmaW5lZChYUF9NQUNPU1gpICYmIFBMQVRGT1JNKFFUKQpAQCAtMzc1LDcgKzM3OCw3IEBA
IG5hbWVzcGFjZSBXZWJDb3JlIHsKICAgICAgICAgYm9vbCBtX2hhdmVVcGRhdGVkUGx1Z2luV2lk
Z2V0OwogI2VuZGlmCiAKLSNpZiAoKFBMQVRGT1JNKFFUKSB8fCBQTEFURk9STShXWCkpICYmIE9T
KFdJTkRPV1MpKSB8fCBkZWZpbmVkKFhQX01BQ09TWCkKKyNpZiAoKFBMQVRGT1JNKFFUKSB8fCBQ
TEFURk9STShXWCkpICYmIE9TKFdJTkRPV1MpKSB8fCBkZWZpbmVkKFhQX01BQ09TWCkgfHwgUExB
VEZPUk0oRUZMKQogICAgICAgICAvLyBPbiBNYWMgT1NYIGFuZCBRdC9XaW5kb3dzIHRoZSBwbHVn
aW4gZG9lcyBub3QgaGF2ZSBpdHMgb3duIG5hdGl2ZSB3aWRnZXQsCiAgICAgICAgIC8vIGJ1dCBp
cyB1c2luZyB0aGUgY29udGFpbmluZyB3aW5kb3cgYXMgaXRzIHJlZmVyZW5jZSBmb3IgcG9zaXRp
b25pbmcvcGFpbnRpbmcuCiAgICAgICAgIFBsYXRmb3JtUGx1Z2luV2lkZ2V0IG1fd2luZG93Owpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGx1Z2lucy9lZmwvUGx1Z2luRGF0YUVmbC5jcHAg
Yi9Tb3VyY2UvV2ViQ29yZS9wbHVnaW5zL2VmbC9QbHVnaW5EYXRhRWZsLmNwcApuZXcgZmlsZSBt
b2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41OWE5ZGY5Ci0tLSAvZGV2L251bGwKKysrIGIvU291
cmNlL1dlYkNvcmUvcGx1Z2lucy9lZmwvUGx1Z2luRGF0YUVmbC5jcHAKQEAgLTAsMCArMSw2OCBA
QAorLyoKKyAgICBDb3B5cmlnaHQgKEMpIDIwMDYsIDIwMDcgQXBwbGUgSW5jLiAgQWxsIHJpZ2h0
cyByZXNlcnZlZC4KKyAgICBDb3B5cmlnaHQgKEMpIDIwMDggVHJvbGx0ZWNoIEFTQQorICAgIENv
cHlyaWdodCAoQykgMjAwOCBDb2xsYWJvcmEgTHRkLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICAg
IENvcHlyaWdodCAoQykgMjAwOCBJTmRUIC0gSW5zdGl0dXRvIE5va2lhIGRlIFRlY25vbG9naWEK
KyAgICBDb3B5cmlnaHQgKEMpIDIwMDktMjAxMCBQcm9GVVNJT04gZW1iZWRkZWQgc3lzdGVtcwor
ICAgIENvcHlyaWdodCAoQykgMjAwOS0yMDExIFNhbXN1bmcgRWxlY3Ryb25pY3MKKworICAgIFRo
aXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQv
b3IKKyAgICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5l
cmFsIFB1YmxpYworICAgIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJl
IEZvdW5kYXRpb247IGVpdGhlcgorICAgIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0
IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKworICAgIFRoaXMgbGlicmFyeSBpcyBk
aXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICAgIGJ1dCBX
SVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9m
CisgICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NF
LiAgU2VlIHRoZSBHTlUKKyAgICBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1v
cmUgZGV0YWlscy4KKworICAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhl
IEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAgICBhbG9uZyB3aXRoIHRoaXMg
bGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bworICAg
IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwg
RmlmdGggRmxvb3IsCisgICAgQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisqLworCisjaW5j
bHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiUGx1Z2luRGF0YS5oIgorCisjaW5jbHVkZSAiUGx1
Z2luRGF0YWJhc2UuaCIKKyNpbmNsdWRlICJQbHVnaW5QYWNrYWdlLmgiCisKK25hbWVzcGFjZSBX
ZWJDb3JlIHsKKwordm9pZCBQbHVnaW5EYXRhOjppbml0UGx1Z2lucyhjb25zdCBQYWdlKikKK3sK
KyAgICBQbHVnaW5EYXRhYmFzZSogZGIgPSBQbHVnaW5EYXRhYmFzZTo6aW5zdGFsbGVkUGx1Z2lu
cygpOworICAgIGNvbnN0IFZlY3RvcjxQbHVnaW5QYWNrYWdlKj4gJnBsdWdpbnMgPSBkYi0+cGx1
Z2lucygpOworCisgICAgZm9yICh1bnNpZ25lZCBpbnQgaSA9IDA7IGkgPCBwbHVnaW5zLnNpemUo
KTsgKytpKSB7CisgICAgICAgIFBsdWdpbkluZm8gaW5mbzsKKyAgICAgICAgUGx1Z2luUGFja2Fn
ZSogcGFja2FnZSA9IHBsdWdpbnNbaV07CisKKyAgICAgICAgaW5mby5uYW1lID0gcGFja2FnZS0+
bmFtZSgpOworICAgICAgICBpbmZvLmZpbGUgPSBwYWNrYWdlLT5maWxlTmFtZSgpOworICAgICAg
ICBpbmZvLmRlc2MgPSBwYWNrYWdlLT5kZXNjcmlwdGlvbigpOworCisgICAgICAgIGNvbnN0IE1J
TUVUb0Rlc2NyaXB0aW9uc01hcCYgbWltZVRvRGVzY3JpcHRpb25zID0gcGFja2FnZS0+bWltZVRv
RGVzY3JpcHRpb25zKCk7CisgICAgICAgIE1JTUVUb0Rlc2NyaXB0aW9uc01hcDo6Y29uc3RfaXRl
cmF0b3IgZW5kID0gbWltZVRvRGVzY3JpcHRpb25zLmVuZCgpOworICAgICAgICBmb3IgKE1JTUVU
b0Rlc2NyaXB0aW9uc01hcDo6Y29uc3RfaXRlcmF0b3IgaXQgPSBtaW1lVG9EZXNjcmlwdGlvbnMu
YmVnaW4oKTsgaXQgIT0gZW5kOyArK2l0KSB7CisgICAgICAgICAgICBNaW1lQ2xhc3NJbmZvIG1p
bWU7CisgICAgICAgICAgICAKKyAgICAgICAgICAgIG1pbWUudHlwZSA9IGl0LT5maXJzdDsKKyAg
ICAgICAgICAgIG1pbWUuZGVzYyA9IGl0LT5zZWNvbmQ7CisKKyAgICAgICAgICAgIFZlY3RvcjxT
dHJpbmc+IGV4dGVuc2lvbnMgPSBwYWNrYWdlLT5taW1lVG9FeHRlbnNpb25zKCkuZ2V0KG1pbWUu
dHlwZSk7CisgICAgICAgICAgICBpbmZvLm1pbWVzLmFwcGVuZChtaW1lKTsKKyAgICAgICAgfQor
CisgICAgICAgIG1fcGx1Z2lucy5hcHBlbmQoaW5mbyk7CisgICAgfQorfQorCit2b2lkIFBsdWdp
bkRhdGE6OnJlZnJlc2goKQoreworICAgIFBsdWdpbkRhdGFiYXNlKiBkYiA9IFBsdWdpbkRhdGFi
YXNlOjppbnN0YWxsZWRQbHVnaW5zKCk7CisgICAgZGItPnJlZnJlc2goKTsKK30KKworfTsKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsdWdpbnMvZWZsL1BsdWdpblBhY2thZ2VFZmwuY3Bw
IGIvU291cmNlL1dlYkNvcmUvcGx1Z2lucy9lZmwvUGx1Z2luUGFja2FnZUVmbC5jcHAKbmV3IGZp
bGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNmY4NjllMAotLS0gL2Rldi9udWxsCisrKyBi
L1NvdXJjZS9XZWJDb3JlL3BsdWdpbnMvZWZsL1BsdWdpblBhY2thZ2VFZmwuY3BwCkBAIC0wLDAg
KzEsMTY4IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA2LCAyMDA3IEFwcGxlIEluYy4gIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDggQ29sbGFib3JhIEx0ZC4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAwOCBOdWFudGkgTHRkLgor
ICogQ29weXJpZ2h0IChDKSAyMDA4IElOZFQgLSBJbnN0aXR1dG8gTm9raWEgZGUgVGVjbm9sb2dp
YQorICogQ29weXJpZ2h0IChDKSAyMDA5LTIwMTAgUHJvRlVTSU9OIGVtYmVkZGVkIHN5c3RlbXMK
KyAqIENvcHlyaWdodCAoQykgMjAwOS0yMDExIFNhbXN1bmcgRWxlY3Ryb25pY3MKKyAqCisgKiBS
ZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9y
IHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRo
ZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9u
cyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2Ug
dGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlv
biBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4K
KyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIENPTVBVVEVSLCBJTkMu
IGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9G
IE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NF
IEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgQ09NUFVURVIsIElOQy4g
T1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJ
TkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFH
RVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VC
U1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9G
SVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkg
VEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFC
SUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFS
SVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZF
TiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisj
aW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiUGx1Z2luUGFja2FnZS5oIgorCisjaW5jbHVk
ZSAiTUlNRVR5cGVSZWdpc3RyeS5oIgorI2luY2x1ZGUgIk5vdEltcGxlbWVudGVkLmgiCisjaW5j
bHVkZSAiUGx1Z2luRGF0YWJhc2UuaCIKKyNpbmNsdWRlICJQbHVnaW5EZWJ1Zy5oIgorI2luY2x1
ZGUgIm5wcnVudGltZV9pbXBsLmgiCisKKyNpbmNsdWRlIDxFaW5hLmg+CisjaW5jbHVkZSA8ZGxm
Y24uaD4KKyNpbmNsdWRlIDx3dGYvdGV4dC9DU3RyaW5nLmg+CisKK25hbWVzcGFjZSBXZWJDb3Jl
IHsKKwordHlwZWRlZiBjaGFyKiAoKk5QUF9HZXRNSU1FRGVzY3JpcHRpb25Qcm9jUHRyKSgpOwor
Citib29sIFBsdWdpblBhY2thZ2U6OmZldGNoSW5mbygpCit7CisgICAgY29uc3QgY2hhciAqZXJy
bXNnOworCisgICAgaWYgKCFsb2FkKCkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIE5Q
UF9HZXRWYWx1ZVByb2NQdHIgZ2V0VmFsdWUgPSAwOworICAgIE5QUF9HZXRNSU1FRGVzY3JpcHRp
b25Qcm9jUHRyIGdldE1JTUVEZXNjcmlwdGlvbiA9IDA7CisKKyAgICBnZXRWYWx1ZSA9IChOUFBf
R2V0VmFsdWVQcm9jUHRyKWRsc3ltKG1fbW9kdWxlLCAiTlBfR2V0VmFsdWUiKTsKKyAgICBpZiAo
KGVycm1zZyA9IGRsZXJyb3IoKSkpIHsKKyAgICAgICAgRUlOQV9MT0dfRVJSKCJDb3VsZCBub3Qg
Z2V0IHN5bWJvbCBOUF9HZXRWYWx1ZTogJXMiLCBlcnJtc2cpOworICAgICAgICByZXR1cm4gZmFs
c2U7CisgICAgfQorCisgICAgZ2V0TUlNRURlc2NyaXB0aW9uID0gKE5QUF9HZXRNSU1FRGVzY3Jp
cHRpb25Qcm9jUHRyKWRsc3ltKG1fbW9kdWxlLCAiTlBfR2V0TUlNRURlc2NyaXB0aW9uIik7Cisg
ICAgaWYgKChlcnJtc2cgPSBkbGVycm9yKCkpKSB7CisgICAgICAgIEVJTkFfTE9HX0VSUigiQ291
bGQgbm90IGdldCBzeW1ib2wgTlBfR2V0TUlNRURlc2NyaXB0aW9uOiAlcyIsIGVycm1zZyk7Cisg
ICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisKKyAgICBjaGFyKiBidWZmZXIgPSAwOworICAg
IE5QRXJyb3IgZXJyID0gZ2V0VmFsdWUoMCwgTlBQVnBsdWdpbk5hbWVTdHJpbmcsICh2b2lkKikg
JmJ1ZmZlcik7CisgICAgaWYgKGVyciAhPSBOUEVSUl9OT19FUlJPUikKKyAgICAgICAgcmV0dXJu
IGZhbHNlOworICAgIG1fbmFtZSA9IGJ1ZmZlcjsKKworICAgIGJ1ZmZlciA9IDA7CisgICAgZXJy
ID0gZ2V0VmFsdWUoMCwgTlBQVnBsdWdpbkRlc2NyaXB0aW9uU3RyaW5nLCAodm9pZCopICZidWZm
ZXIpOworICAgIGlmIChlcnIgIT0gTlBFUlJfTk9fRVJST1IpCisgICAgICAgIHJldHVybiBmYWxz
ZTsKKyAgICBtX2Rlc2NyaXB0aW9uID0gYnVmZmVyOworICAgIGRldGVybWluZU1vZHVsZVZlcnNp
b25Gcm9tRGVzY3JpcHRpb24oKTsKKworICAgIFN0cmluZyBkZXNjcmlwdGlvbiA9IGdldE1JTUVE
ZXNjcmlwdGlvbigpOworCisgICAgVmVjdG9yPFN0cmluZz4gdHlwZXM7CisgICAgZGVzY3JpcHRp
b24uc3BsaXQoVUNoYXIoJzsnKSwgZmFsc2UsIHR5cGVzKTsKKworICAgIGZvciAoc2l6ZV90IGkg
PSAwOyBpIDwgdHlwZXMuc2l6ZSgpOyArK2kpIHsKKyAgICAgICAgVmVjdG9yPFN0cmluZz4gbWlt
ZTsKKyAgICAgICAgdHlwZXNbaV0uc3BsaXQoVUNoYXIoJzonKSwgdHJ1ZSwgbWltZSk7CisKKyAg
ICAgICAgaWYgKG1pbWUuc2l6ZSgpID4gMCkgeworICAgICAgICAgICAgVmVjdG9yPFN0cmluZz4g
ZXh0czsKKworICAgICAgICAgICAgaWYgKG1pbWUuc2l6ZSgpID4gMSkKKyAgICAgICAgICAgICAg
ICBtaW1lWzFdLnNwbGl0KFVDaGFyKCcsJyksIGZhbHNlLCBleHRzKTsKKworICAgICAgICAgICAg
ZGV0ZXJtaW5lUXVpcmtzKG1pbWVbMF0pOworICAgICAgICAgICAgbV9taW1lVG9FeHRlbnNpb25z
LmFkZChtaW1lWzBdLCBleHRzKTsKKworICAgICAgICAgICAgaWYgKG1pbWUuc2l6ZSgpID4gMikK
KyAgICAgICAgICAgICAgICBtX21pbWVUb0Rlc2NyaXB0aW9ucy5hZGQobWltZVswXSwgbWltZVsy
XSk7CisgICAgICAgIH0KKyAgICB9CisKKyAgICByZXR1cm4gdHJ1ZTsKK30KKwordWludDE2X3Qg
UGx1Z2luUGFja2FnZTo6TlBWZXJzaW9uKCkgY29uc3QKK3sKKyAgICByZXR1cm4gTlBWRVJTX0hB
U19QTFVHSU5fVEhSRUFEX0FTWU5DX0NBTEw7Cit9CisKK2Jvb2wgUGx1Z2luUGFja2FnZTo6bG9h
ZCgpCit7CisgICAgY2hhciogZXJybXNnOworCisgICAgaWYgKG1faXNMb2FkZWQpIHsKKyAgICAg
ICAgbV9sb2FkQ291bnQrKzsKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgfQorCisgICAgbV9t
b2R1bGUgPSBkbG9wZW4obV9wYXRoLnV0ZjgoKS5kYXRhKCksIFJUTERfTEFaWSB8IFJUTERfTE9D
QUwpOworICAgIGlmICgoZXJybXNnID0gZGxlcnJvcigpKSkgeworICAgICAgICBFSU5BX0xPR19X
QVJOKCIlcyBub3QgbG9hZGVkOiAlcyIsIG1fcGF0aC51dGY4KCkuZGF0YSgpLCBlcnJtc2cpOwor
ICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorCisgICAgbV9pc0xvYWRlZCA9IHRydWU7CisK
KyAgICBOUF9Jbml0aWFsaXplRnVuY1B0ciBpbml0aWFsaXplOworICAgIE5QRXJyb3IgZXJyOwor
CisgICAgaW5pdGlhbGl6ZSA9IChOUF9Jbml0aWFsaXplRnVuY1B0cilkbHN5bShtX21vZHVsZSwg
Ik5QX0luaXRpYWxpemUiKTsKKyAgICBpZiAoKGVycm1zZyA9IGRsZXJyb3IoKSkpIHsKKyAgICAg
ICAgRUlOQV9MT0dfRVJSKCJDb3VsZCBub3QgZ2V0IHN5bWJvbCBOUF9Jbml0aWFsaXplOiAlcyIs
IGVycm1zZyk7CisgICAgICAgIGdvdG8gYWJvcnQ7CisgICAgfQorCisgICAgbV9OUFBfU2h1dGRv
d24gPSAoTlBQX1NodXRkb3duUHJvY1B0cilkbHN5bShtX21vZHVsZSwgIk5QX1NodXRkb3duIik7
CisgICAgaWYgKChlcnJtc2cgPSBkbGVycm9yKCkpKSB7CisgICAgICAgIEVJTkFfTE9HX0VSUigi
Q291bGQgbm90IGdldCBzeW1ib2wgTlBfU2h1dGRvd246ICVzIiwgZXJybXNnKTsKKyAgICAgICAg
Z290byBhYm9ydDsKKyAgICB9CisKKyAgICBtZW1zZXQoJm1fcGx1Z2luRnVuY3MsIDAsIHNpemVv
ZihtX3BsdWdpbkZ1bmNzKSk7CisgICAgbV9wbHVnaW5GdW5jcy5zaXplID0gc2l6ZW9mKG1fcGx1
Z2luRnVuY3MpOworCisgICAgaW5pdGlhbGl6ZUJyb3dzZXJGdW5jcygpOworCisjaWYgZGVmaW5l
ZChYUF9VTklYKQorICAgIGVyciA9IGluaXRpYWxpemUoJm1fYnJvd3NlckZ1bmNzLCAmbV9wbHVn
aW5GdW5jcyk7CisjZWxzZQorICAgIGVyciA9IGluaXRpYWxpemUoJm1fYnJvd3NlckZ1bmNzKTsK
KyNlbmRpZgorICAgIGlmIChlcnIgIT0gTlBFUlJfTk9fRVJST1IpCisgICAgICAgIGdvdG8gYWJv
cnQ7CisKKyAgICBtX2xvYWRDb3VudCsrOworICAgIHJldHVybiB0cnVlOworCithYm9ydDoKKyAg
ICBFSU5BX0xPR19EQkcoImZhaWxlZCB0byBsb2FkIHBsdWdpbiwgdW5sb2FkIGl0IHdpdGhvdXQg
c2h1dHRpbmcgaXQgZG93bi4iKTsKKyAgICB1bmxvYWRXaXRob3V0U2h1dGRvd24oKTsKKyAgICBy
ZXR1cm4gZmFsc2U7Cit9CisKK30KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsdWdpbnMv
ZWZsL1BsdWdpblZpZXdFZmwuY3BwIGIvU291cmNlL1dlYkNvcmUvcGx1Z2lucy9lZmwvUGx1Z2lu
Vmlld0VmbC5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZGIwNzBiZAot
LS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsdWdpbnMvZWZsL1BsdWdpblZpZXdF
ZmwuY3BwCkBAIC0wLDAgKzEsNTM2IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA2LCAyMDA3
IEFwcGxlIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDgg
Q29sbGFib3JhIEx0ZC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAw
OCBJTmRUIC0gSW5zdGl0dXRvIE5va2lhIGRlIFRlY25vbG9naWEKKyAqIENvcHlyaWdodCAoQykg
MjAwOS0yMDEwIFByb0ZVU0lPTiBlbWJlZGRlZCBzeXN0ZW1zCisgKiBDb3B5cmlnaHQgKEMpIDIw
MDktMjAxMSBTYW1zdW5nIEVsZWN0cm9uaWNzCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVz
ZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmlj
YXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlv
bnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVz
dCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmli
dXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVy
aWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FS
RSBJUyBQUk9WSURFRCBCWSBBUFBMRSBDT01QVVRFUiwgSU5DLiBgYEFTIElTJycgQU5EIEFOWQor
ICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5E
IEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElO
IE5PIEVWRU5UIFNIQUxMIEFQUExFIENPTVBVVEVSLCBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMg
QkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwK
KyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VS
VklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5U
RVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklM
SVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAo
SU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VU
IE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUg
UE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgor
I2luY2x1ZGUgIlBsdWdpblZpZXcuaCIKKworI2luY2x1ZGUgIkRvY3VtZW50LmgiCisjaW5jbHVk
ZSAiRG9jdW1lbnRMb2FkZXIuaCIKKyNpbmNsdWRlICJFbGVtZW50LmgiCisjaW5jbHVkZSAiRnJh
bWUuaCIKKyNpbmNsdWRlICJGcmFtZUxvYWRSZXF1ZXN0LmgiCisjaW5jbHVkZSAiRnJhbWVMb2Fk
ZXIuaCIKKyNpbmNsdWRlICJGcmFtZVRyZWUuaCIKKyNpbmNsdWRlICJGcmFtZVZpZXcuaCIKKyNp
bmNsdWRlICJHcmFwaGljc0NvbnRleHQuaCIKKyNpbmNsdWRlICJIVE1MTmFtZXMuaCIKKyNpbmNs
dWRlICJIVE1MUGx1Z0luRWxlbWVudC5oIgorI2luY2x1ZGUgIkhvc3RXaW5kb3cuaCIKKyNpbmNs
dWRlICJJbWFnZS5oIgorI2luY2x1ZGUgIkludFJlY3QuaCIKKyNpbmNsdWRlICJKU0RPTUJpbmRp
bmcuaCIKKyNpbmNsdWRlICJLZXlib2FyZEV2ZW50LmgiCisjaW5jbHVkZSAiTW91c2VFdmVudC5o
IgorI2luY2x1ZGUgIk5vdEltcGxlbWVudGVkLmgiCisjaW5jbHVkZSAiUGFnZS5oIgorI2luY2x1
ZGUgIlBsYXRmb3JtTW91c2VFdmVudC5oIgorI2luY2x1ZGUgIlBsYXRmb3JtV2hlZWxFdmVudC5o
IgorI2luY2x1ZGUgIlBsdWdpbkRlYnVnLmgiCisjaW5jbHVkZSAiUGx1Z2luUGFja2FnZS5oIgor
I2luY2x1ZGUgIlJlbmRlckxheWVyLmgiCisjaW5jbHVkZSAiU2NyaXB0Q29udHJvbGxlci5oIgor
I2luY2x1ZGUgIlNldHRpbmdzLmgiCisjaW5jbHVkZSAiWDExRW1iZWRDb250YWluZXIuaCIKKyNp
bmNsdWRlICJYMTFXaW5kb3cuaCIKKyNpbmNsdWRlICJucHJ1bnRpbWVfaW1wbC5oIgorI2luY2x1
ZGUgInJ1bnRpbWUvSlNMb2NrLmgiCisjaW5jbHVkZSAicnVudGltZS9KU1ZhbHVlLmgiCisjaW5j
bHVkZSAicnVudGltZV9yb290LmgiCisKKyNpbmNsdWRlIDxFY29yZV9FdmFzLmg+CisjaW5jbHVk
ZSA8RWNvcmVfWC5oPgorI2luY2x1ZGUgPEV2YXMuaD4KKworI2luY2x1ZGUgPHd0Zi9SZWZDb3Vu
dGVkLmg+CisjaW5jbHVkZSA8d3RmL1JlZlB0ci5oPgorCit1c2luZyBKU0M6OkV4ZWNTdGF0ZTsK
K3VzaW5nIEpTQzo6SW50ZXJwcmV0ZXI7Cit1c2luZyBKU0M6OkpTTG9jazsKK3VzaW5nIEpTQzo6
SlNPYmplY3Q7Cit1c2luZyBKU0M6OlVTdHJpbmc7CisKK3VzaW5nIG5hbWVzcGFjZSBzdGQ7Cit1
c2luZyBuYW1lc3BhY2UgV1RGOwordXNpbmcgbmFtZXNwYWNlIFdlYkNvcmU7CisKK25hbWVzcGFj
ZSBXZWJDb3JlIHsKKwordXNpbmcgbmFtZXNwYWNlIEhUTUxOYW1lczsKKworI2lmIEVOQUJMRShO
RVRTQ0FQRV9QTFVHSU5fQVBJKQorYm9vbCBQbHVnaW5WaWV3OjpkaXNwYXRjaE5QRXZlbnQoTlBF
dmVudCYgZXZlbnQpCit7CisgICAgaWYgKCFtX3BsdWdpbi0+cGx1Z2luRnVuY3MoKS0+ZXZlbnQp
CisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIFBsdWdpblZpZXc6OnNldEN1cnJlbnRQbHVn
aW5WaWV3KHRoaXMpOworICAgIEpTQzo6SlNMb2NrOjpEcm9wQWxsTG9ja3MgZHJvcEFsbExvY2tz
KGZhbHNlKTsKKyAgICBzZXRDYWxsaW5nUGx1Z2luKHRydWUpOworCisgICAgYm9vbCBhY2NlcHRl
ZCA9IG1fcGx1Z2luLT5wbHVnaW5GdW5jcygpLT5ldmVudChtX2luc3RhbmNlLCAmZXZlbnQpOwor
CisgICAgc2V0Q2FsbGluZ1BsdWdpbihmYWxzZSk7CisgICAgUGx1Z2luVmlldzo6c2V0Q3VycmVu
dFBsdWdpblZpZXcoMCk7CisgICAgcmV0dXJuIGFjY2VwdGVkOworfQorI2VuZGlmCisKK3ZvaWQg
UGx1Z2luVmlldzo6aGFsdCgpCit7CisgICAgbm90SW1wbGVtZW50ZWQoKTsKK30KKworI2lmIGRl
ZmluZWQoWFBfVU5JWCkgJiYgRU5BQkxFKE5FVFNDQVBFX1BMVUdJTl9BUEkpCit2b2lkIFBsdWdp
blZpZXc6OmhhbmRsZUZvY3VzSW5FdmVudCgpCit7CisgICAgbm90SW1wbGVtZW50ZWQoKTsKK30K
Kwordm9pZCBQbHVnaW5WaWV3OjpoYW5kbGVGb2N1c091dEV2ZW50KCkKK3sKKyAgICBub3RJbXBs
ZW1lbnRlZCgpOworfQorI2VuZGlmCisKK3ZvaWQgUGx1Z2luVmlldzo6cmVzdGFydCgpCit7Cisg
ICAgbm90SW1wbGVtZW50ZWQoKTsKK30KKwordm9pZCBQbHVnaW5WaWV3OjpoYW5kbGVLZXlib2Fy
ZEV2ZW50KEtleWJvYXJkRXZlbnQqKQoreworICAgIG5vdEltcGxlbWVudGVkKCk7Cit9CisKK3Zv
aWQgUGx1Z2luVmlldzo6aGFuZGxlTW91c2VFdmVudChNb3VzZUV2ZW50KiBldmVudCkKK3sKKyNp
ZiBFTkFCTEUoTkVUU0NBUEVfUExVR0lOX0FQSSkKKyAgICBOUEV2ZW50IHhFdmVudDsKKworICAg
IEludFJlY3QgcCA9IHN0YXRpY19jYXN0PEZyYW1lVmlldyo+KHBhcmVudCgpKS0+Y29udGVudHNU
b1NjcmVlbihJbnRSZWN0KDAsIDAsIGV2ZW50LT5vZmZzZXRYKCksIGV2ZW50LT5vZmZzZXRZKCkp
KTsKKyAgICBpZiAoZXZlbnQtPnR5cGUoKSA9PSBldmVudE5hbWVzKCkubW91c2Vtb3ZlRXZlbnQK
KyAgICAgICAgICAgIHx8IGV2ZW50LT50eXBlKCkgPT0gZXZlbnROYW1lcygpLm1vdXNlb3V0RXZl
bnQKKyAgICAgICAgICAgIHx8IGV2ZW50LT50eXBlKCkgPT0gZXZlbnROYW1lcygpLm1vdXNlb3Zl
ckV2ZW50KSB7CisgICAgICAgIHhFdmVudC50eXBlID0gTW90aW9uTm90aWZ5OworICAgICAgICB4
RXZlbnQueG1vdGlvbi54ID0gcC53aWR0aCgpOworICAgICAgICB4RXZlbnQueG1vdGlvbi55ID0g
cC5oZWlnaHQoKTsKKyAgICB9IGVsc2UgaWYgKGV2ZW50LT50eXBlKCkgPT0gZXZlbnROYW1lcygp
Lm1vdXNlZG93bkV2ZW50KSB7CisgICAgICAgIHhFdmVudC50eXBlID0gQnV0dG9uUHJlc3M7Cisg
ICAgICAgIHhFdmVudC54YnV0dG9uLnggPSBwLndpZHRoKCk7CisgICAgICAgIHhFdmVudC54YnV0
dG9uLnkgPSBwLmhlaWdodCgpOworICAgICAgICB4RXZlbnQueGJ1dHRvbi5idXR0b24gPSBldmVu
dC0+YnV0dG9uKCkgKyAxOyAvLyBET00gTW91c2VFdmVudCBjb3VudHMgZnJvbSAwLCBhbmQgWEJ1
dHRvbkV2ZW50IGZyb20gMQorICAgIH0gZWxzZSBpZiAoZXZlbnQtPnR5cGUoKSA9PSBldmVudE5h
bWVzKCkubW91c2V1cEV2ZW50KSB7CisgICAgICAgIHhFdmVudC50eXBlID0gQnV0dG9uUmVsZWFz
ZTsKKyAgICAgICAgeEV2ZW50LnhidXR0b24ueCA9IHAud2lkdGgoKTsKKyAgICAgICAgeEV2ZW50
LnhidXR0b24ueSA9IHAuaGVpZ2h0KCk7CisgICAgICAgIHhFdmVudC54YnV0dG9uLmJ1dHRvbiA9
IGV2ZW50LT5idXR0b24oKSArIDE7CisgICAgfSBlbHNlCisgICAgICAgIHJldHVybjsKKworICAg
IGlmIChkaXNwYXRjaE5QRXZlbnQoeEV2ZW50KSkKKyAgICAgICAgZXZlbnQtPnNldERlZmF1bHRI
YW5kbGVkKCk7CisjZWxzZQorICAgIG5vdEltcGxlbWVudGVkKCk7CisgICAgcmV0dXJuOworI2Vu
ZGlmCit9CisKK3ZvaWQgUGx1Z2luVmlldzo6dXBkYXRlUGx1Z2luV2lkZ2V0KCkKK3sKKyAgICBp
ZiAoIXBhcmVudCgpIHx8ICFtX2lzV2luZG93ZWQpCisgICAgICAgIHJldHVybjsKKworICAgIEFT
U0VSVChwYXJlbnQoKS0+aXNGcmFtZVZpZXcoKSk7CisgICAgRnJhbWVWaWV3KiBmcmFtZVZpZXcg
PSBzdGF0aWNfY2FzdDxGcmFtZVZpZXcqPihwYXJlbnQoKSk7CisKKyAgICBJbnRSZWN0IG9sZFdp
bmRvd1JlY3QgPSBtX3dpbmRvd1JlY3Q7CisgICAgSW50UmVjdCBvbGRDbGlwUmVjdCA9IG1fY2xp
cFJlY3Q7CisKKyAgICBtX3dpbmRvd1JlY3QgPSBJbnRSZWN0KGZyYW1lVmlldy0+Y29udGVudHNU
b1NjcmVlbihJbnRSZWN0KGZyYW1lUmVjdCgpLmxvY2F0aW9uKCksIGZyYW1lUmVjdCgpLnNpemUo
KSkpKTsKKworICAgIG1fY2xpcFJlY3QgPSB3aW5kb3dDbGlwUmVjdCgpOworICAgIG1fY2xpcFJl
Y3QubW92ZSgtbV93aW5kb3dSZWN0LngoKSwgLW1fd2luZG93UmVjdC55KCkpOworCisgICAgaWYg
KHBsYXRmb3JtUGx1Z2luV2lkZ2V0KCkpIHsKKyAgICAgICAgRXZhc19Db29yZCB4LCB5OworICAg
ICAgICBldmFzX29iamVjdF9nZW9tZXRyeV9nZXQocm9vdCgpLT5ldmFzT2JqZWN0KCksICZ4LCAm
eSwgMCwgMCk7CisgICAgICAgIEludFJlY3QgY2hpbGRSZWN0ID0gbV93aW5kb3dSZWN0OworICAg
ICAgICBjaGlsZFJlY3QubW92ZSh4LCB5KTsKKyAgICAgICAgcGxhdGZvcm1QbHVnaW5XaWRnZXQo
KS0+c2V0RnJhbWVSZWN0KGNoaWxkUmVjdCk7CisgICAgICAgIHBsYXRmb3JtUGx1Z2luV2lkZ2V0
KCktPnVwZGF0ZShtX2NsaXBSZWN0KTsKKyAgICB9Cit9CisKK3ZvaWQgUGx1Z2luVmlldzo6c2V0
Rm9jdXMoYm9vbCkKK3sKKyAgICBpZiAocGxhdGZvcm1QbHVnaW5XaWRnZXQoKSkKKyAgICAgICAg
cGxhdGZvcm1QbHVnaW5XaWRnZXQoKS0+c2V0Rm9jdXMoKTsKKworICAgIG1fZWxlbWVudC0+ZG9j
dW1lbnQoKS0+c2V0Rm9jdXNlZE5vZGUobV9lbGVtZW50KTsKKworICAgIFdpZGdldDo6c2V0Rm9j
dXModHJ1ZSk7Cit9CisKK3ZvaWQgUGx1Z2luVmlldzo6c2hvdygpCit7CisgICAgc2V0U2VsZlZp
c2libGUodHJ1ZSk7CisKKyAgICBpZiAoaXNQYXJlbnRWaXNpYmxlKCkgJiYgcGxhdGZvcm1QbHVn
aW5XaWRnZXQoKSkKKyAgICAgICAgcGxhdGZvcm1QbHVnaW5XaWRnZXQoKS0+c2V0VmlzaWJsZSh0
cnVlKTsKKworICAgIFdpZGdldDo6c2hvdygpOworfQorCit2b2lkIFBsdWdpblZpZXc6OmhpZGUo
KQoreworICAgIHNldFNlbGZWaXNpYmxlKGZhbHNlKTsKKworICAgIGlmIChpc1BhcmVudFZpc2li
bGUoKSAmJiBwbGF0Zm9ybVBsdWdpbldpZGdldCgpKQorICAgICAgICBwbGF0Zm9ybVBsdWdpbldp
ZGdldCgpLT5zZXRWaXNpYmxlKGZhbHNlKTsKKworICAgIFdpZGdldDo6aGlkZSgpOworfQorCit2
b2lkIFBsdWdpblZpZXc6OnBhaW50KEdyYXBoaWNzQ29udGV4dCogY29udGV4dCwgY29uc3QgSW50
UmVjdCYgcmVjdCkKK3sKKyAgICBJbnRSZWN0IGZyUmVjdCA9IGZyYW1lUmVjdCgpOworCisgICAg
aWYgKCFtX2lzU3RhcnRlZCkgeworICAgICAgICBwYWludE1pc3NpbmdQbHVnaW5JY29uKGNvbnRl
eHQsIHJlY3QpOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgaWYgKGNvbnRleHQtPnBh
aW50aW5nRGlzYWJsZWQoKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgc2V0TlBXaW5kb3dJZk5l
ZWRlZCgpOworCisgICAgaWYgKG1faXNXaW5kb3dlZCB8fCBjb250ZXh0LT5wYWludGluZ0Rpc2Fi
bGVkKCkpCisgICAgICAgIHJldHVybjsKK30KKwordm9pZCBQbHVnaW5WaWV3OjpzZXRQYXJlbnQo
U2Nyb2xsVmlldyogcGFyZW50KQoreworICAgIFdpZGdldDo6c2V0UGFyZW50KHBhcmVudCk7CisK
KyAgICBpZiAocGFyZW50KQorICAgICAgICBpbml0KCk7CisgICAgZWxzZSB7CisgICAgICAgIGlm
ICghcGxhdGZvcm1QbHVnaW5XaWRnZXQoKSkKKyAgICAgICAgICAgIHJldHVybjsKKyAgICB9Cit9
CisKK3ZvaWQgUGx1Z2luVmlldzo6c2V0TlBXaW5kb3dSZWN0KGNvbnN0IEludFJlY3QmIHJlY3Qp
Cit7CisjaWYgRU5BQkxFKE5FVFNDQVBFX1BMVUdJTl9BUEkpCisgICAgaWYgKCFtX2lzU3RhcnRl
ZCB8fCAhcGFyZW50KCkpCisgICAgICAgIHJldHVybjsKKworICAgIEludFBvaW50IHAgPSBzdGF0
aWNfY2FzdDxGcmFtZVZpZXcqPihwYXJlbnQoKSktPmNvbnRlbnRzVG9XaW5kb3cocmVjdC5sb2Nh
dGlvbigpKTsKKyAgICBtX25wV2luZG93LnggPSBwLngoKTsKKyAgICBtX25wV2luZG93LnkgPSBw
LnkoKTsKKworICAgIG1fbnBXaW5kb3cud2lkdGggPSByZWN0LndpZHRoKCk7CisgICAgbV9ucFdp
bmRvdy5oZWlnaHQgPSByZWN0LmhlaWdodCgpOworCisgICAgbV9ucFdpbmRvdy5jbGlwUmVjdC5s
ZWZ0ID0gMDsKKyAgICBtX25wV2luZG93LmNsaXBSZWN0LnRvcCA9IDA7CisgICAgbV9ucFdpbmRv
dy5jbGlwUmVjdC5yaWdodCA9IHJlY3Qud2lkdGgoKTsKKyAgICBtX25wV2luZG93LmNsaXBSZWN0
LmJvdHRvbSA9IHJlY3QuaGVpZ2h0KCk7CisKKyAgICBpZiAobV9ucFdpbmRvdy54IDwgMCB8fCBt
X25wV2luZG93LnkgPCAwCisgICAgICAgIHx8IG1fbnBXaW5kb3cud2lkdGggPD0gMCB8fCBtX25w
V2luZG93LmhlaWdodCA8PSAwKQorICAgICAgICByZXR1cm47CisKKyAgICBpZiAobV9wbHVnaW4t
PnBsdWdpbkZ1bmNzKCktPnNldHdpbmRvdykgeworICAgICAgICBQbHVnaW5WaWV3OjpzZXRDdXJy
ZW50UGx1Z2luVmlldyh0aGlzKTsKKyAgICAgICAgSlNDOjpKU0xvY2s6OkRyb3BBbGxMb2NrcyBk
cm9wQWxsTG9ja3MoZmFsc2UpOworICAgICAgICBzZXRDYWxsaW5nUGx1Z2luKHRydWUpOworICAg
ICAgICBtX3BsdWdpbi0+cGx1Z2luRnVuY3MoKS0+c2V0d2luZG93KG1faW5zdGFuY2UsICZtX25w
V2luZG93KTsKKyAgICAgICAgc2V0Q2FsbGluZ1BsdWdpbihmYWxzZSk7CisgICAgICAgIFBsdWdp
blZpZXc6OnNldEN1cnJlbnRQbHVnaW5WaWV3KDApOworCisgICAgICAgIGlmICghbV9pc1dpbmRv
d2VkKQorICAgICAgICAgICAgcmV0dXJuOworCisgICAgICAgIEFTU0VSVChwbGF0Zm9ybVBsdWdp
bldpZGdldCgpKTsKKyAgICB9CisjZWxzZQorICAgIG5vdEltcGxlbWVudGVkKCk7CisgICAgcmV0
dXJuOworI2VuZGlmCit9CisKK3ZvaWQgUGx1Z2luVmlldzo6c2V0TlBXaW5kb3dJZk5lZWRlZCgp
Cit7Cit9Cit2b2lkIFBsdWdpblZpZXc6OnNldFBhcmVudFZpc2libGUoYm9vbCB2aXNpYmxlKQor
eworICAgIGlmIChpc1BhcmVudFZpc2libGUoKSA9PSB2aXNpYmxlKQorICAgICAgICByZXR1cm47
CisKKyAgICBXaWRnZXQ6OnNldFBhcmVudFZpc2libGUodmlzaWJsZSk7CisKKyAgICBpZiAoaXNT
ZWxmVmlzaWJsZSgpICYmIHBsYXRmb3JtUGx1Z2luV2lkZ2V0KCkpCisgICAgICAgIHBsYXRmb3Jt
UGx1Z2luV2lkZ2V0KCktPnNldFZpc2libGUodmlzaWJsZSk7Cit9CisKKyNpZiBFTkFCTEUoTkVU
U0NBUEVfUExVR0lOX0FQSSkKK05QRXJyb3IgUGx1Z2luVmlldzo6aGFuZGxlUG9zdFJlYWRGaWxl
KFZlY3RvcjxjaGFyPiYgYnVmZmVyLCB1aW50MzJfdCBsZW4sIGNvbnN0IGNoYXIqIGJ1ZikKK3sK
KyAgICBTdHJpbmcgZmlsZW5hbWUoYnVmLCBsZW4pOworCisgICAgaWYgKGZpbGVuYW1lLnN0YXJ0
c1dpdGgoImZpbGU6Ly8vIikpCisgICAgICAgIGZpbGVuYW1lID0gZmlsZW5hbWUuc3Vic3RyaW5n
KDgpOworCisgICAgaWYgKCFmaWxlRXhpc3RzKGZpbGVuYW1lKSkKKyAgICAgICAgcmV0dXJuIE5Q
RVJSX0ZJTEVfTk9UX0ZPVU5EOworCisgICAgRklMRSogZmlsZUhhbmRsZSA9IGZvcGVuKGZpbGVu
YW1lLnV0ZjgoKS5kYXRhKCksICJyIik7CisKKyAgICBpZiAoIWZpbGVIYW5kbGUpCisgICAgICAg
IHJldHVybiBOUEVSUl9GSUxFX05PVF9GT1VORDsKKworICAgIGludCBieXRlc1JlYWQgPSBmcmVh
ZChidWZmZXIuZGF0YSgpLCAxLCAwLCBmaWxlSGFuZGxlKTsKKworICAgIGZjbG9zZShmaWxlSGFu
ZGxlKTsKKworICAgIGlmIChieXRlc1JlYWQgPD0gMCkKKyAgICAgICAgcmV0dXJuIE5QRVJSX0ZJ
TEVfTk9UX0ZPVU5EOworCisgICAgcmV0dXJuIE5QRVJSX05PX0VSUk9SOworfQorI2VuZGlmCisK
KyNpZiBFTkFCTEUoTkVUU0NBUEVfUExVR0lOX0FQSSkKK2Jvb2wgUGx1Z2luVmlldzo6cGxhdGZv
cm1HZXRWYWx1ZVN0YXRpYyhOUE5WYXJpYWJsZSB2YXJpYWJsZSwgdm9pZCogdmFsdWUsIE5QRXJy
b3IqIHJlc3VsdCkKK3sKKyAgICBzd2l0Y2ggKHZhcmlhYmxlKSB7CisgICAgY2FzZSBOUE5WVG9v
bGtpdDoKKyAgICAgICAgKnN0YXRpY19jYXN0PHVpbnQzMl90Kj4odmFsdWUpID0gMDsKKyAgICAg
ICAgKnJlc3VsdCA9IE5QRVJSX05PX0VSUk9SOworICAgICAgICByZXR1cm4gdHJ1ZTsKKworICAg
IGNhc2UgTlBOVlN1cHBvcnRzWEVtYmVkQm9vbDoKKyAgICAgICAgKnN0YXRpY19jYXN0PE5QQm9v
bCo+KHZhbHVlKSA9IHRydWU7CisgICAgICAgICpyZXN1bHQgPSBOUEVSUl9OT19FUlJPUjsKKyAg
ICAgICAgcmV0dXJuIHRydWU7CisKKyAgICBjYXNlIE5QTlZqYXZhc2NyaXB0RW5hYmxlZEJvb2w6
CisgICAgICAgICpzdGF0aWNfY2FzdDxOUEJvb2wqPih2YWx1ZSkgPSB0cnVlOworICAgICAgICAq
cmVzdWx0ID0gTlBFUlJfTk9fRVJST1I7CisgICAgICAgIHJldHVybiB0cnVlOworCisgICAgY2Fz
ZSBOUE5WU3VwcG9ydHNXaW5kb3dsZXNzOgorICAgICAgICAqc3RhdGljX2Nhc3Q8TlBCb29sKj4o
dmFsdWUpID0gZmFsc2U7CisgICAgICAgICpyZXN1bHQgPSBOUEVSUl9OT19FUlJPUjsKKyAgICAg
ICAgcmV0dXJuIHRydWU7CisKKyAgICBkZWZhdWx0OgorICAgICAgICByZXR1cm4gZmFsc2U7Cisg
ICAgfQorfQorCitib29sIFBsdWdpblZpZXc6OnBsYXRmb3JtR2V0VmFsdWUoTlBOVmFyaWFibGUg
dmFyaWFibGUsIHZvaWQqIHZhbHVlLCBOUEVycm9yKiByZXN1bHQpCit7CisgICAgaWYgKCF2YWx1
ZSB8fCAhcmVzdWx0KQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBzd2l0Y2ggKHZhcmlh
YmxlKSB7CisgICAgY2FzZSBOUE5WeERpc3BsYXk6CisgICAgICAgIGlmIChwbGF0Zm9ybVBsdWdp
bldpZGdldCgpKQorICAgICAgICAgICAgKih2b2lkICoqKXZhbHVlID0gcGxhdGZvcm1QbHVnaW5X
aWRnZXQoKS0+eDExSW5mbygpLT5kaXNwbGF5KCk7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAg
ICoodm9pZCAqKil2YWx1ZSA9IChEaXNwbGF5KikgZWNvcmVfeF9kaXNwbGF5X2dldCgpOworICAg
ICAgICAqcmVzdWx0ID0gTlBFUlJfTk9fRVJST1I7CisgICAgICAgIHJldHVybiB0cnVlOworCisg
ICAgY2FzZSBOUE5WeHRBcHBDb250ZXh0OgorICAgICAgICAqcmVzdWx0ID0gTlBFUlJfR0VORVJJ
Q19FUlJPUjsKKyAgICAgICAgcmV0dXJuIHRydWU7CisKKyNpZiBFTkFCTEUoTkVUU0NBUEVfUExV
R0lOX0FQSSkKKyAgICBjYXNlIE5QTlZXaW5kb3dOUE9iamVjdDogeworICAgICAgICBpZiAobV9p
c0phdmFTY3JpcHRQYXVzZWQpIHsKKyAgICAgICAgICAgICpyZXN1bHQgPSBOUEVSUl9HRU5FUklD
X0VSUk9SOworICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgIH0KKworICAgICAgICBO
UE9iamVjdCogd2luZG93U2NyaXB0T2JqZWN0ID0gbV9wYXJlbnRGcmFtZS0+c2NyaXB0KCktPndp
bmRvd1NjcmlwdE5QT2JqZWN0KCk7CisKKyAgICAgICAgLy8gUmV0dXJuIHZhbHVlIGlzIGV4cGVj
dGVkIHRvIGJlIHJldGFpbmVkLCBhcyBkZXNjcmliZWQgaGVyZTogPGh0dHA6Ly93d3cubW96aWxs
YS5vcmcvcHJvamVjdHMvcGx1Z2luL25wcnVudGltZS5odG1sPgorICAgICAgICBpZiAod2luZG93
U2NyaXB0T2JqZWN0KQorICAgICAgICAgICAgX05QTl9SZXRhaW5PYmplY3Qod2luZG93U2NyaXB0
T2JqZWN0KTsKKworICAgICAgICB2b2lkKiogdiA9ICh2b2lkKiopdmFsdWU7CisgICAgICAgICp2
ID0gd2luZG93U2NyaXB0T2JqZWN0OworCisgICAgICAgICpyZXN1bHQgPSBOUEVSUl9OT19FUlJP
UjsKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgfQorCisgICAgY2FzZSBOUE5WUGx1Z2luRWxl
bWVudE5QT2JqZWN0OiB7CisgICAgICAgIGlmIChtX2lzSmF2YVNjcmlwdFBhdXNlZCkgeworICAg
ICAgICAgICAgKnJlc3VsdCA9IE5QRVJSX0dFTkVSSUNfRVJST1I7CisgICAgICAgICAgICByZXR1
cm4gdHJ1ZTsKKyAgICAgICAgfQorCisgICAgICAgIE5QT2JqZWN0KiBwbHVnaW5TY3JpcHRPYmpl
Y3QgPSAwOworCisgICAgICAgIGlmIChtX2VsZW1lbnQtPmhhc1RhZ05hbWUoYXBwbGV0VGFnKSB8
fCBtX2VsZW1lbnQtPmhhc1RhZ05hbWUoZW1iZWRUYWcpIHx8IG1fZWxlbWVudC0+aGFzVGFnTmFt
ZShvYmplY3RUYWcpKQorICAgICAgICAgICAgcGx1Z2luU2NyaXB0T2JqZWN0ID0gc3RhdGljX2Nh
c3Q8SFRNTFBsdWdJbkVsZW1lbnQqPihtX2VsZW1lbnQpLT5nZXROUE9iamVjdCgpOworCisgICAg
ICAgIC8vIFJldHVybiB2YWx1ZSBpcyBleHBlY3RlZCB0byBiZSByZXRhaW5lZCwgYXMgZGVzY3Jp
YmVkIGhlcmU6IDxodHRwOi8vd3d3Lm1vemlsbGEub3JnL3Byb2plY3RzL3BsdWdpbi9ucHJ1bnRp
bWUuaHRtbD4KKyAgICAgICAgaWYgKHBsdWdpblNjcmlwdE9iamVjdCkKKyAgICAgICAgICAgIF9O
UE5fUmV0YWluT2JqZWN0KHBsdWdpblNjcmlwdE9iamVjdCk7CisKKyAgICAgICAgdm9pZCoqIHYg
PSAodm9pZCoqKXZhbHVlOworICAgICAgICAqdiA9IHBsdWdpblNjcmlwdE9iamVjdDsKKworICAg
ICAgICAqcmVzdWx0ID0gTlBFUlJfTk9fRVJST1I7CisgICAgICAgIHJldHVybiB0cnVlOworICAg
IH0KKyNlbmRpZgorCisgICAgY2FzZSBOUE5WbmV0c2NhcGVXaW5kb3c6IHsKKyAgICAgICAgdm9p
ZCogdyA9IHJlaW50ZXJwcmV0X2Nhc3Q8dm9pZCo+KHZhbHVlKTsKKyAgICAgICAgRXZhc19PYmpl
Y3QqIHdpZGdldCA9IG1fcGFyZW50RnJhbWUtPnZpZXcoKS0+aG9zdFdpbmRvdygpLT5wbGF0Zm9y
bVBhZ2VDbGllbnQoKTsKKyAgICAgICAgRXZhcyogZXZhcyA9IGV2YXNfb2JqZWN0X2V2YXNfZ2V0
KHdpZGdldCk7CisgICAgICAgIEVjb3JlX0V2YXMqIGVlID0gZWNvcmVfZXZhc19lY29yZV9ldmFz
X2dldChldmFzKTsKKyAgICAgICAgKigoWElEICopdykgPSAoV2luZG93KSBlY29yZV9ldmFzX3dp
bmRvd19nZXQoZWUpOworICAgICAgICAqcmVzdWx0ID0gTlBFUlJfTk9fRVJST1I7CisgICAgICAg
IHJldHVybiB0cnVlOworICAgIH0KKworICAgIGNhc2UgTlBOVlRvb2xraXQ6CisgICAgICAgIGlm
IChtX3BsdWdpbi0+cXVpcmtzKCkuY29udGFpbnMoUGx1Z2luUXVpcmtSZXF1aXJlc0d0a1Rvb2xL
aXQpKSB7CisgICAgICAgICAgICAqKCh1aW50MzJfdCAqKXZhbHVlKSA9IDI7CisgICAgICAgICAg
ICAqcmVzdWx0ID0gTlBFUlJfTk9fRVJST1I7CisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAg
ICAgICAgfQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIC8vIGZhbGwgdGhyb3VnaAor
ICAgIGRlZmF1bHQ6CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9Cit9CisjZW5kaWYKKwor
dm9pZCBQbHVnaW5WaWV3OjppbnZhbGlkYXRlUmVjdChjb25zdCBJbnRSZWN0JiByZWN0KQorewor
ICAgIGlmIChwbGF0Zm9ybVBsdWdpbldpZGdldCgpKSB7CisgICAgICAgIHBsYXRmb3JtUGx1Z2lu
V2lkZ2V0KCktPnVwZGF0ZShyZWN0KTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIGlu
dmFsaWRhdGVXaW5kb3dsZXNzUGx1Z2luUmVjdChyZWN0KTsKK30KKworI2lmIEVOQUJMRShORVRT
Q0FQRV9QTFVHSU5fQVBJKQordm9pZCBQbHVnaW5WaWV3OjppbnZhbGlkYXRlUmVjdChOUFJlY3Qq
IHJlY3QpCit7CisgICAgaWYgKCFyZWN0KSB7CisgICAgICAgIGludmFsaWRhdGUoKTsKKyAgICAg
ICAgcmV0dXJuOworICAgIH0KKworICAgIEludFJlY3QgcihyZWN0LT5sZWZ0LCByZWN0LT50b3As
IHJlY3QtPnJpZ2h0IC0gcmVjdC0+bGVmdCwgcmVjdC0+Ym90dG9tIC0gcmVjdC0+dG9wKTsKKwor
ICAgIGludmFsaWRhdGVSZWN0KHIpOworfQorCit2b2lkIFBsdWdpblZpZXc6OmludmFsaWRhdGVS
ZWdpb24oTlBSZWdpb24gcmVnaW9uKQoreworICAgIG5vdEltcGxlbWVudGVkKCk7Cit9CisjZW5k
aWYKKwordm9pZCBQbHVnaW5WaWV3Ojpmb3JjZVJlZHJhdygpCit7CisgICAgbm90SW1wbGVtZW50
ZWQoKTsKK30KKworYm9vbCBQbHVnaW5WaWV3OjpwbGF0Zm9ybVN0YXJ0KCkKK3sKKyAgICBBU1NF
UlQobV9pc1N0YXJ0ZWQpOworICAgIEFTU0VSVChtX3N0YXR1cyA9PSBQbHVnaW5TdGF0dXNMb2Fk
ZWRTdWNjZXNzZnVsbHkpOworCisgICAgaWYgKG1fcGx1Z2luLT5wbHVnaW5GdW5jcygpLT5nZXR2
YWx1ZSkgeworICAgICAgICBQbHVnaW5WaWV3OjpzZXRDdXJyZW50UGx1Z2luVmlldyh0aGlzKTsK
KyAgICAgICAgSlNDOjpKU0xvY2s6OkRyb3BBbGxMb2NrcyBkcm9wQWxsTG9ja3MoZmFsc2UpOwor
ICAgICAgICBzZXRDYWxsaW5nUGx1Z2luKHRydWUpOworI2lmIEVOQUJMRShORVRTQ0FQRV9QTFVH
SU5fQVBJKQorICAgICAgICBtX3BsdWdpbi0+cGx1Z2luRnVuY3MoKS0+Z2V0dmFsdWUobV9pbnN0
YW5jZSwgTlBQVnBsdWdpbk5lZWRzWEVtYmVkLCAmbV9uZWVkc1hFbWJlZCk7CisjZW5kaWYKKyAg
ICAgICAgc2V0Q2FsbGluZ1BsdWdpbihmYWxzZSk7CisgICAgICAgIFBsdWdpblZpZXc6OnNldEN1
cnJlbnRQbHVnaW5WaWV3KDApOworICAgIH0KKworICAgIGlmIChtX25lZWRzWEVtYmVkKSB7Cisg
ICAgICAgIEV2YXNfT2JqZWN0KiBvID0gbV9wYXJlbnRGcmFtZS0+dmlldygpLT5ob3N0V2luZG93
KCktPnBsYXRmb3JtUGFnZUNsaWVudCgpOworICAgICAgICBFdmFzKiBldmFzID0gZXZhc19vYmpl
Y3RfZXZhc19nZXQobyk7CisgICAgICAgIHNldFBsYXRmb3JtUGx1Z2luV2lkZ2V0KG5ldyBYMTFF
bWJlZENvbnRhaW5lcihldmFzLCB0aGlzKSk7CisgICAgfSBlbHNlIHsKKyAgICAgICAgbm90SW1w
bGVtZW50ZWQoKTsKKyAgICAgICAgbV9zdGF0dXMgPSBQbHVnaW5TdGF0dXNDYW5Ob3RMb2FkUGx1
Z2luOworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorCisKKyAgICBzaG93KCk7CisgICAg
TlBTZXRXaW5kb3dDYWxsYmFja1N0cnVjdCogd3NpID0gbmV3IE5QU2V0V2luZG93Q2FsbGJhY2tT
dHJ1Y3QoKTsKKworICAgIHdzaS0+dHlwZSA9IDA7CisKKyAgICBYMTFJbmZvKiBpbmZvID0gcGxh
dGZvcm1QbHVnaW5XaWRnZXQoKS0+eDExSW5mbygpOworCisgICAgd3NpLT5kaXNwbGF5ID0gaW5m
by0+ZGlzcGxheSgpOworICAgIHdzaS0+dmlzdWFsID0gaW5mby0+dmlzdWFsKCk7CisgICAgd3Np
LT5kZXB0aCA9IGluZm8tPmRlcHRoKCk7CisgICAgd3NpLT5jb2xvcm1hcCA9IGluZm8tPmNvbG9y
bWFwKCk7CisjaWYgRU5BQkxFKE5FVFNDQVBFX1BMVUdJTl9BUEkpCisgICAgbV9ucFdpbmRvdy53
c19pbmZvID0gd3NpOworCisgICAgbV9ucFdpbmRvdy50eXBlID0gTlBXaW5kb3dUeXBlV2luZG93
OworICAgIG1fbnBXaW5kb3cud2luZG93ID0gKHZvaWQqKSBwbGF0Zm9ybVBsdWdpbldpZGdldCgp
LT53aW5JZCgpOworI2VuZGlmCisKKyAgICBpZiAoIShtX3BsdWdpbi0+cXVpcmtzKCkuY29udGFp
bnMoUGx1Z2luUXVpcmtEZWZlckZpcnN0U2V0V2luZG93Q2FsbCkpKQorICAgICAgICBzZXROUFdp
bmRvd1JlY3QoZnJhbWVSZWN0KCkpOworCisgICAgcmV0dXJuIHRydWU7Cit9CisKK3ZvaWQgUGx1
Z2luVmlldzo6cGxhdGZvcm1EZXN0cm95KCkKK3sKK30KKworfSAvLyBuYW1lc3BhY2UgV2ViQ29y
ZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGx1Z2lucy9lZmwvWDExRW1iZWRDb250YWlu
ZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvcGx1Z2lucy9lZmwvWDExRW1iZWRDb250YWluZXIuY3Bw
Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjU5MDExNjMKLS0tIC9kZXYvbnVs
bAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbHVnaW5zL2VmbC9YMTFFbWJlZENvbnRhaW5lci5jcHAK
QEAgLTAsMCArMSwzNTYgQEAKKy8qCisgICAgQ29weXJpZ2h0IChDKSAyMDA5IElOZFQgLSBJbnN0
aXR1dG8gTm9raWEgZGUgVGVjbm9sb2dpYQorICAgIENvcHlyaWdodCAoQykgMjAwOS0yMDEwIFBy
b0ZVU0lPTiBlbWJlZGRlZCBzeXN0ZW1zCisgICAgQ29weXJpZ2h0IChDKSAyMDA5LTIwMTEgU2Ft
c3VuZyBFbGVjdHJvbmljcworCisgICAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlv
dSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICAgIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVy
bXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgICAgTGljZW5zZSBhcyBwdWJs
aXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgICAgdmVyc2lv
biAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9u
LgorCisgICAgVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQg
d2lsbCBiZSB1c2VmdWwsCisgICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2
ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAgICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVT
UyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICAgIExpYnJhcnkgR2Vu
ZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorCisgICAgWW91IHNob3VsZCBo
YXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGlj
ZW5zZQorICAgIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5M
SUIuICBJZiBub3QsIHdyaXRlIHRvCisgICAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwg
SW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKKyAgICBCb3N0b24sIE1BIDAy
MTEwLTEzMDEsIFVTQS4KKyovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJYMTFF
bWJlZENvbnRhaW5lci5oIgorCisjaW5jbHVkZSAiUGx1Z2luVmlldy5oIgorI2luY2x1ZGUgIlgx
MVdpbmRvdy5oIgorCisjaW5jbHVkZSA8WDExL1guaD4KKyNpbmNsdWRlIDxYMTEvWGxpYi5oPgor
CisjZGVmaW5lIEtleVByZXNzICAgICAyCisjZGVmaW5lIEtleVJlbGVhc2UgICAzCisjZGVmaW5l
IEZvY3VzSW4gICAgICA5CisjZGVmaW5lIEZvY3VzT3V0ICAgIDEwCisKKyNkZWZpbmUgQVRPTShu
YW1lKSBlY29yZV94X2F0b21fZ2V0KCNuYW1lKQorCit1c2luZyBuYW1lc3BhY2Ugc3RkOwordXNp
bmcgbmFtZXNwYWNlIFdURjsKK3VzaW5nIG5hbWVzcGFjZSBXZWJDb3JlOworCitjbGFzcyBYMTFF
bWJlZEV2ZW50SGFuZGxlcjsKKworc3RhdGljIHVuc2lnbmVkIGludCB4ZW1iZWRWZXJzaW9uID0g
MDsKK3N0YXRpYyB1bnNpZ25lZCBpbnQgeGVtYmVkTWFwcGVkID0gKDEgPDwgMCk7CitzdGF0aWMg
dm9pZCBzZW5kWEVtYmVkTWVzc2FnZShXaW5JZCAsIERpc3BsYXkqICwgbG9uZyAsIGxvbmcgZGV0
YWlsID0gMCwgbG9uZyBkYXRhMSA9IDAsIGxvbmcgZGF0YTIgPSAwKTsKKworZW51bSBYMTFFbWJl
ZE1lc3NhZ2VUeXBlIHsKKyAgICBYRU1CRURfRU1CRURERURfTk9USUZZID0gMCwKKyAgICBYRU1C
RURfV0lORE9XX0FDVElWQVRFID0gMSwKKyAgICBYRU1CRURfV0lORE9XX0RFQUNUSVZBVEUgPSAy
LAorICAgIFhFTUJFRF9SRVFVRVNUX0ZPQ1VTID0gMywKKyAgICBYRU1CRURfRk9DVVNfSU4gPSA0
LAorICAgIFhFTUJFRF9GT0NVU19PVVQgPSA1LAorICAgIFhFTUJFRF9GT0NVU19ORVhUID0gNiwK
KyAgICBYRU1CRURfRk9DVVNfUFJFViA9IDcsCisgICAgLyogOC05IHdlcmUgdXNlZCBmb3IgWEVN
QkVEX0dSQUJfS0VZL1hFTUJFRF9VTkdSQUJfS0VZICovCisgICAgWEVNQkVEX01PREFMSVRZX09O
ID0gMTAsCisgICAgWEVNQkVEX01PREFMSVRZX09GRiA9IDExLAorICAgIFhFTUJFRF9SRUdJU1RF
Ul9BQ0NFTEVSQVRPUiA9IDEyLAorICAgIFhFTUJFRF9VTlJFR0lTVEVSX0FDQ0VMRVJBVE9SID0g
MTMsCisgICAgWEVNQkVEX0FDVElWQVRFX0FDQ0VMRVJBVE9SID0gMTQKK307CisKK2VudW0gWDEx
RW1iZWRGb2N1c0luRGV0YWlsIHsKKyAgICBYRU1CRURfRk9DVVNfQ1VSUkVOVCA9IDAsCisgICAg
WEVNQkVEX0ZPQ1VTX0ZJUlNUID0gMSwKKyAgICBYRU1CRURfRk9DVVNfTEFTVCA9IDIKK307CisK
K1gxMUVtYmVkQ29udGFpbmVyOjpYMTFFbWJlZENvbnRhaW5lcihFdmFzKiBldmFzLCBQbHVnaW5W
aWV3KiB2aWV3KQorICAgIDogWDExV2luZG93KGV2YXMpCisgICAgLCBtX2FjdGl2ZShmYWxzZSkK
KyAgICAsIG1fY2xpZW50KDApCisgICAgLCBtX3BsdWdpblZpZXcodmlldykKKyAgICAsIG1fY2xp
ZW50V2luZG93KDApCit7CisgICAgLy8gaW1wbGVtZW50IHRoZSBmb2N1cyBwcm94eSBhcyBpbiB0
aGUgc3BlYywgb2Zmc2NyZWVuCisgICAgbV9mb2N1c1Byb3h5LnNldChuZXcgWDExV2luZG93KHdp
bklkKCksIEludFJlY3QoLTEsIC0xLCAxLCAxKSkpOworICAgIG1fZm9jdXNQcm94eS0+aW5zdGFs
bEV2ZW50RmlsdGVyKHRoaXMpOworICAgIG1fZm9jdXNQcm94eS0+c2hvdygpOworCisgICAgZWNv
cmVfeF93aW5kb3dfYmFja2dyb3VuZF9jb2xvcl9zZXQod2luSWQoKSwgNjU1MzUsIDY1NTM1LCA2
NTUzNSk7CisKKyAgICAvLyBDaGFuZ2UgdGhlIGV2ZW50IGZpbHRlciBmb3IgdGhlIGV2ZW50cyB3
ZSB3b3VsZCBsaWtlIHRvIHJlY2VpdmUKKyAgICBYU2VsZWN0SW5wdXQoeDExSW5mbygpLT5kaXNw
bGF5KCksIHdpbklkKCksCisgICAgICAgICAgICBLZXlQcmVzc01hc2sgfCBLZXlSZWxlYXNlTWFz
aworICAgICAgICAgICAgfCBCdXR0b25QcmVzc01hc2sgfCBCdXR0b25SZWxlYXNlTWFzayB8IEJ1
dHRvbk1vdGlvbk1hc2sKKyAgICAgICAgICAgIHwgS2V5bWFwU3RhdGVNYXNrCisgICAgICAgICAg
ICB8IFBvaW50ZXJNb3Rpb25NYXNrCisgICAgICAgICAgICB8IEVudGVyV2luZG93TWFzayB8IExl
YXZlV2luZG93TWFzaworICAgICAgICAgICAgfCBGb2N1c0NoYW5nZU1hc2sKKyAgICAgICAgICAg
IHwgRXhwb3N1cmVNYXNrCisgICAgICAgICAgICB8IFN0cnVjdHVyZU5vdGlmeU1hc2sKKyAgICAg
ICAgICAgIHwgU3Vic3RydWN0dXJlTm90aWZ5TWFzayk7CisKKyAgICBYRmx1c2goeDExSW5mbygp
LT5kaXNwbGF5KCkpOworfQorCitYMTFFbWJlZENvbnRhaW5lcjo6flgxMUVtYmVkQ29udGFpbmVy
KCkKK3sKKyAgICBzZXRWaXNpYmxlKGZhbHNlKTsKKworICAgIGlmIChjbGllbnQoKSkgeworICAg
ICAgICBYVW5tYXBXaW5kb3coeDExSW5mbygpLT5kaXNwbGF5KCksIGNsaWVudCgpKTsKKyAgICAg
ICAgWFJlcGFyZW50V2luZG93KHgxMUluZm8oKS0+ZGlzcGxheSgpLCBjbGllbnQoKSwgcm9vdFdp
bmRvdygpLCAwLCAwKTsKKyAgICB9Cit9CisKK3ZvaWQgWDExRW1iZWRDb250YWluZXI6Om1vdmVJ
bnB1dEZvY3VzVG9Qcm94eSgpCit7CisgICAgaWYgKGhhc0ZvY3VzKCkpCisgICAgICAgIHJldHVy
bjsKKworICAgIFhTZXRJbnB1dEZvY3VzKHgxMUluZm8oKS0+ZGlzcGxheSgpLCBtX2ZvY3VzUHJv
eHktPndpbklkKCksIFJldmVydFRvUGFyZW50LCB4MTFJbmZvKCktPngxMVRpbWUoKSk7Cit9CisK
K3ZvaWQgWDExRW1iZWRDb250YWluZXI6OmFjY2VwdChXaW5JZCBjbGllbnQpCit7CisgICAgc2V0
Q2xpZW50KGNsaWVudCk7CisgICAgbV9jbGllbnRXaW5kb3ctPmluc3RhbGxFdmVudEZpbHRlcih0
aGlzKTsKKworICAgIFhBZGRUb1NhdmVTZXQoeDExSW5mbygpLT5kaXNwbGF5KCksIGNsaWVudCk7
IC8vIGF2b2lkIGNsaWVudCBmcm9tIGNyYXNoaW5nIGFsb25nIHdpdGggdXMKKworICAgIHVuc2ln
bmVkIGludCB2ZXJzaW9uID0gMDsgLy8gbGF0ZXN0IHZlcnNpb24gb2YgdGhlIHNwZWMKKworICAg
IGludCBuaXRlbXMgPSAwOworICAgIHVuc2lnbmVkIGNoYXIgKmRhdGEgPSAwOworICAgIHVuc2ln
bmVkIGludCBjbGllbnRWZXJzaW9uID0gMDsKKworICAgIHN0YXRpYyBBdG9tIGF0b20gPSBBVE9N
KF9YRU1CRURfSU5GTyk7CisKKyAgICBpZiAoZWNvcmVfeF93aW5kb3dfcHJvcF9wcm9wZXJ0eV9n
ZXQoY2xpZW50LCBhdG9tLCBhdG9tLCAyLCAmZGF0YSwgJm5pdGVtcykpIHsKKyAgICAgICAgdW5z
aWduZWQgaW50ICpwcm9wID0gKHVuc2lnbmVkIGludCAqKSBkYXRhOworCisgICAgICAgIGlmIChu
aXRlbXMgPj0gMikKKyAgICAgICAgICAgIGNsaWVudFZlcnNpb24gPSBwcm9wWzBdOworICAgICAg
ICBmcmVlKGRhdGEpOworICAgIH0KKworICAgIC8vIEFzayB0aGUgY2xpZW50IGZvciBpdHMgbWlu
aW11bSBzaXplLgorICAgIEludFNpemUgbWluU2l6ZUhpbnQ7CisgICAgWFNpemVIaW50cyBzaXpl
SGludDsKKyAgICBsb25nIHVudXNlZDsKKyAgICBpZiAoWEdldFdNTm9ybWFsSGludHMoeDExSW5m
bygpLT5kaXNwbGF5KCksIGNsaWVudCwgJnNpemVIaW50LCAmdW51c2VkKSAmJiAoc2l6ZUhpbnQu
ZmxhZ3MgJiBQTWluU2l6ZSkpCisgICAgICAgIG1pblNpemVIaW50ID0gSW50U2l6ZShzaXplSGlu
dC5taW5fd2lkdGgsIHNpemVIaW50Lm1pbl9oZWlnaHQpOworICAgIGVsc2UKKyAgICAgICAgbWlu
U2l6ZUhpbnQgPSBJbnRTaXplKDAsIDApOworCisgICAgdW5zaWduZWQgaW50IG1pblZlcnNpb24g
PSB2ZXJzaW9uID4gY2xpZW50VmVyc2lvbiA/IGNsaWVudFZlcnNpb24gOiB2ZXJzaW9uOworCisg
ICAgc2VuZFhFbWJlZE1lc3NhZ2UoY2xpZW50LCB4MTFJbmZvKCktPmRpc3BsYXkoKSwgWEVNQkVE
X0VNQkVEREVEX05PVElGWSwgMCwgd2luSWQoKSwgbWluVmVyc2lvbik7CisKKyAgICBYTWFwV2lu
ZG93KHgxMUluZm8oKS0+ZGlzcGxheSgpLCBjbGllbnQpOworCisgICAgcmVzaXplKG1heChzaXpl
KCkud2lkdGgoKSwgbWluU2l6ZUhpbnQud2lkdGgoKSksIG1heChzaXplKCkuaGVpZ2h0KCksIG1p
blNpemVIaW50LmhlaWdodCgpKSk7Cit9CisKK3ZvaWQgWDExRW1iZWRDb250YWluZXI6OnJlamVj
dChXaW5JZCBjbGllbnQpCit7CisgICAgWFJlbW92ZUZyb21TYXZlU2V0KHgxMUluZm8oKS0+ZGlz
cGxheSgpLCBjbGllbnQpOworICAgIFhSZXBhcmVudFdpbmRvdyh4MTFJbmZvKCktPmRpc3BsYXko
KSwgY2xpZW50LCByb290V2luZG93KCksIDAsIDApOworfQorCit2b2lkIFgxMUVtYmVkQ29udGFp
bmVyOjpzaG93KCkKK3sKKyAgICBYMTFXaW5kb3c6OnNob3coKTsKKworICAgIC8vIHNpZ25hbCBt
YXAKKyAgICBpZiAoY2xpZW50KCkpIHsKKyAgICAgICAgdW5zaWduZWQgaW50IGRhdGFbXSA9IHt4
ZW1iZWRWZXJzaW9uLCB4ZW1iZWRNYXBwZWR9OworICAgICAgICBYQ2hhbmdlUHJvcGVydHkoeDEx
SW5mbygpLT5kaXNwbGF5KCksIGNsaWVudCgpLCBBVE9NKF9YRU1CRURfSU5GTyksIEFUT00oX1hF
TUJFRF9JTkZPKSwgMzIsCisgICAgICAgICAgICBQcm9wTW9kZVJlcGxhY2UsICh1bnNpZ25lZCBj
aGFyICopIGRhdGEsIDIpOworICAgIH0KK30KKwordm9pZCBYMTFFbWJlZENvbnRhaW5lcjo6aGlk
ZSgpCit7CisgICAgWDExV2luZG93OjpoaWRlKCk7CisKKyAgICAvLyBzaWduYWwgdW5tYXAKKyAg
ICBpZiAoY2xpZW50KCkpIHsKKyAgICAgICAgdW5zaWduZWQgaW50IGRhdGFbXSA9IHt4ZW1iZWRW
ZXJzaW9uLCB4ZW1iZWRNYXBwZWR9OworICAgICAgICBYQ2hhbmdlUHJvcGVydHkoeDExSW5mbygp
LT5kaXNwbGF5KCksIGNsaWVudCgpLCBBVE9NKF9YRU1CRURfSU5GTyksIEFUT00oX1hFTUJFRF9J
TkZPKSwgMzIsCisgICAgICAgICAgICBQcm9wTW9kZVJlcGxhY2UsICh1bnNpZ25lZCBjaGFyICop
IGRhdGEsIDIpOworICAgIH0KKyAgICBtX2FjdGl2ZSA9IGZhbHNlOworfQorCit2b2lkIFgxMUVt
YmVkQ29udGFpbmVyOjpyZXNpemUoaW50IHdpZHRoLCBpbnQgaGVpZ2h0KQoreworICAgIFgxMVdp
bmRvdzo6cmVzaXplKHdpZHRoLCBoZWlnaHQpOworICAgIGlmIChjbGllbnQoKSkKKyAgICAgICAg
WFJlc2l6ZVdpbmRvdyh4MTFJbmZvKCktPmRpc3BsYXkoKSwgY2xpZW50KCksIHdpZHRoLCBoZWln
aHQpOworfQorCit2b2lkIFgxMUVtYmVkQ29udGFpbmVyOjpzZXRGcmFtZVJlY3QoY29uc3QgSW50
UmVjdCYgcmVjdCkKK3sKKyAgICBYMTFXaW5kb3c6OnNldEZyYW1lUmVjdChyZWN0KTsKKyAgICBp
ZiAoY2xpZW50KCkpCisgICAgICAgIFhNb3ZlUmVzaXplV2luZG93KHgxMUluZm8oKS0+ZGlzcGxh
eSgpLCBjbGllbnQoKSwgMCwgMCwgcmVjdC53aWR0aCgpLCByZWN0LmhlaWdodCgpKTsKK30KKwor
dm9pZCBYMTFFbWJlZENvbnRhaW5lcjo6c2V0Rm9jdXMoKQoreworICAgIG1vdmVJbnB1dEZvY3Vz
VG9Qcm94eSgpOworICAgIG1fYWN0aXZlID0gdHJ1ZTsKK30KKworYm9vbCBYMTFFbWJlZENvbnRh
aW5lcjo6aGFzRm9jdXMoKQoreworICAgIFdpbklkIGZvY3VzZWQ7CisgICAgaW50IHJldmVydFRv
OworICAgIFhHZXRJbnB1dEZvY3VzKHgxMUluZm8oKS0+ZGlzcGxheSgpLCAmZm9jdXNlZCwgJnJl
dmVydFRvKTsKKworICAgIHJldHVybiBmb2N1c2VkID09IG1fZm9jdXNQcm94eS0+d2luSWQoKTsK
K30KKworYm9vbCBYMTFFbWJlZENvbnRhaW5lcjo6aXNBY3RpdmUoKQoreworICAgIHJldHVybiBt
X2FjdGl2ZTsKK30KKworV2luSWQgWDExRW1iZWRDb250YWluZXI6OnJvb3RXaW5kb3coKQorewor
ICAgIHJldHVybiBEZWZhdWx0Um9vdFdpbmRvdyh4MTFJbmZvKCktPmRpc3BsYXkoKSk7Cit9CisK
K2Jvb2wgWDExRW1iZWRDb250YWluZXI6OngxMUV2ZW50KFhFdmVudCogZXZlbnQpCit7CisgICAg
Ly8gd2Ugc3Vic2NyaWJlIHRvIGV2ZW50cyBkaXJlY3RseSBmcm9tIHRoZSBjbGllbnQgYXMgd2Vs
bAorICAgIC8vIGluIG9yZGVyIHRvIHBpY2sgdXAgd2hlZWwgZXZlbnRzLgorICAgIGlmIChldmVu
dC0+eGFueS53aW5kb3cgPT0gY2xpZW50KCkpIHsKKyAgICAgICAgc3dpdGNoIChldmVudC0+dHlw
ZSkgeworICAgICAgICBjYXNlIEJ1dHRvblByZXNzOgorICAgICAgICAgICAgLy8gbV9wbHVnaW5W
aWV3LT5kaXNwYXRjaFdoZWVsRXZlbnQoZXZlbnQpOworICAgICAgICAgICAgYnJlYWs7CisgICAg
ICAgIGNhc2UgQnV0dG9uUmVsZWFzZToKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9Cisg
ICAgICAgIHJldHVybiB0cnVlOworICAgIH0KKworICAgIHN3aXRjaCAoZXZlbnQtPnR5cGUpIHsK
KyAgICBjYXNlIEZvY3VzSW46CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgRm9jdXNPdXQ6Cisg
ICAgICAgIC8vIHdoZW4gb3VyIHByb3h5IGdhaW4gZm9jdXMsIHRoZSBjb250YWluZXIgYWN0dWFs
bHkKKyAgICAgICAgLy8gbG9vc2VzIGl0LCBzbyBvbmx5IGRlYWN0aXZhdGUgd2hlbiB0aGUgcHJv
eHkgbG9vc2VzCisgICAgICAgIC8vIGZvY3VzLgorICAgICAgICBpZiAoZXZlbnQtPnhhbnkud2lu
ZG93ICE9IG1fZm9jdXNQcm94eS0+d2luSWQoKSkKKyAgICAgICAgICAgIGJyZWFrOworCisgICAg
ICAgIHNlbmRYRW1iZWRNZXNzYWdlKGNsaWVudCgpLCB4MTFJbmZvKCktPmRpc3BsYXkoKSwgWEVN
QkVEX0ZPQ1VTX09VVCk7CisgICAgICAgIG1fYWN0aXZlID0gZmFsc2U7CisgICAgICAgIGJyZWFr
OworICAgIGNhc2UgTGVhdmVOb3RpZnk6CisgICAgICAgIHNlbmRYRW1iZWRNZXNzYWdlKGNsaWVu
dCgpLCB4MTFJbmZvKCktPmRpc3BsYXkoKSwgWEVNQkVEX1dJTkRPV19ERUFDVElWQVRFKTsKKyAg
ICAgICAgaWYgKCFtX2FjdGl2ZSkKKyAgICAgICAgICAgIGVjb3JlX3hfd2luZG93X2ZvY3VzKGVj
b3JlX3hfd2luZG93X3BhcmVudF9nZXQod2luSWQoKSkpOworCisgICAgICAgIFhVbmdyYWJCdXR0
b24oeDExSW5mbygpLT5kaXNwbGF5KCksIDQsIEFueU1vZGlmaWVyLCBjbGllbnQoKSk7CisgICAg
ICAgIFhVbmdyYWJCdXR0b24oeDExSW5mbygpLT5kaXNwbGF5KCksIDUsIEFueU1vZGlmaWVyLCBj
bGllbnQoKSk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgRW50ZXJOb3RpZnk6CisgICAgICAg
IHNlbmRYRW1iZWRNZXNzYWdlKGNsaWVudCgpLCB4MTFJbmZvKCktPmRpc3BsYXkoKSwgWEVNQkVE
X1dJTkRPV19BQ1RJVkFURSk7CisgICAgICAgIG1vdmVJbnB1dEZvY3VzVG9Qcm94eSgpOworCisg
ICAgICAgIFhHcmFiQnV0dG9uKHgxMUluZm8oKS0+ZGlzcGxheSgpLCA0LCBBbnlNb2RpZmllciwg
Y2xpZW50KCksIGZhbHNlLAorICAgICAgICAgICAgICAgIEJ1dHRvblByZXNzTWFzaywgR3JhYk1v
ZGVBc3luYywgR3JhYk1vZGVBc3luYywgMEwsIDBMKTsKKyAgICAgICAgWEdyYWJCdXR0b24oeDEx
SW5mbygpLT5kaXNwbGF5KCksIDUsIEFueU1vZGlmaWVyLCBjbGllbnQoKSwgZmFsc2UsCisgICAg
ICAgICAgICAgICAgQnV0dG9uUHJlc3NNYXNrLCBHcmFiTW9kZUFzeW5jLCBHcmFiTW9kZUFzeW5j
LCAwTCwgMEwpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIEtleVByZXNzOgorICAgIGNhc2Ug
S2V5UmVsZWFzZToKKyAgICAgICAgaWYgKGNsaWVudCgpICYmIGlzQWN0aXZlKCkpCisgICAgICAg
ICAgICBldmVudC0+eGtleS53aW5kb3cgPSBjbGllbnQoKTsKKyAgICAgICAgZWxzZQorICAgICAg
ICAgICAgZXZlbnQtPnhrZXkud2luZG93ID0gZWNvcmVfeF93aW5kb3dfcGFyZW50X2dldCh3aW5J
ZCgpKTsKKworICAgICAgICBYU2VuZEV2ZW50KHgxMUluZm8oKS0+ZGlzcGxheSgpLCBldmVudC0+
eGtleS53aW5kb3csIGZhbHNlLCBOb0V2ZW50TWFzaywgZXZlbnQpOworICAgICAgICBYU3luYyh4
MTFJbmZvKCktPmRpc3BsYXkoKSwgZmFsc2UpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIENy
ZWF0ZU5vdGlmeToKKyAgICAgICAgaWYgKGNsaWVudCgpKQorICAgICAgICAgICAgcmVqZWN0KGV2
ZW50LT54Y3JlYXRld2luZG93LndpbmRvdyk7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIGFj
Y2VwdChldmVudC0+eGNyZWF0ZXdpbmRvdy53aW5kb3cpOworICAgICAgICBicmVhazsKKyAgICBj
YXNlIERlc3Ryb3lOb3RpZnk6CisgICAgICAgIC8vIGNsaWVudCBnb2VzIGF3YXkKKyAgICAgICAg
aWYgKGV2ZW50LT54ZGVzdHJveXdpbmRvdy53aW5kb3cgPT0gY2xpZW50KCkpIHsKKyAgICAgICAg
ICAgIHNldENsaWVudCgwKTsKKyAgICAgICAgICAgIHNldEZyYW1lUmVjdChJbnRSZWN0KC0xLCAt
MSwgMSwgMSkpOworICAgICAgICB9CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgUmVwYXJlbnRO
b3RpZnk6CisgICAgICAgIC8vIHRoZSBjbGllbnQgcmVwYXJlbnRzIGl0c2VsZiBvdXQgb2YgdXMs
IHdhbnRzIHRvIGxlYXZlIHVzCisgICAgICAgIGlmIChldmVudC0+eHJlcGFyZW50LndpbmRvdyA9
PSBjbGllbnQoKSAmJiBldmVudC0+eHJlcGFyZW50LnBhcmVudCAhPSB3aW5JZCgpKSB7CisgICAg
ICAgICAgICBzZXRDbGllbnQoMCk7CisgICAgICAgICAgICBzZXRGcmFtZVJlY3QoSW50UmVjdCgt
MSwgLTEsIDEsIDEpKTsKKyAgICAgICAgfSBlbHNlIGlmIChldmVudC0+eHJlcGFyZW50LnBhcmVu
dCA9PSB3aW5JZCgpKSB7IC8vIHRoZSBjbGllbnQgcmVwYXJlbnRzIGl0c2VsZiBpbnRvIHVzCisg
ICAgICAgICAgICBpZiAoY2xpZW50KCkpCisgICAgICAgICAgICAgICAgcmVqZWN0KGV2ZW50LT54
cmVwYXJlbnQud2luZG93KTsKKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICBhY2Nl
cHQoZXZlbnQtPnhyZXBhcmVudC53aW5kb3cpOworICAgICAgICB9CisgICAgICAgIGJyZWFrOwor
ICAgIGNhc2UgQ2xpZW50TWVzc2FnZToKKyAgICAgICAgaWYgKGV2ZW50LT54Y2xpZW50Lm1lc3Nh
Z2VfdHlwZSAhPSBBVE9NKF9YRU1CRUQpKQorICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAg
Ly8gbm90IGZvciB1cywgaWdub3JlCisgICAgICAgIGlmIChldmVudC0+eGNsaWVudC53aW5kb3cg
IT0gd2luSWQoKSkKKyAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgIHN3aXRjaCAoZXZlbnQt
PnhjbGllbnQuZGF0YS5sWzFdKSB7CisgICAgICAgIGNhc2UgWEVNQkVEX1JFUVVFU1RfRk9DVVM6
CisgICAgICAgICAgICBtX3BsdWdpblZpZXctPnNldEZvY3VzKHRydWUpOworICAgICAgICAgICAg
c2VuZFhFbWJlZE1lc3NhZ2UoY2xpZW50KCksIHgxMUluZm8oKS0+ZGlzcGxheSgpLCBYRU1CRURf
Rk9DVVNfSU4sIFhFTUJFRF9GT0NVU19DVVJSRU5UKTsKKyAgICAgICAgICAgIGJyZWFrOworICAg
ICAgICBjYXNlIFhFTUJFRF9GT0NVU19ORVhUOgorICAgICAgICAgICAgLy8gQ2xpZW50IHNlbmRz
IHRoaXMgZXZlbnQgd2hlbiBpdCByZWNlaXZlZCBhIHRhYgorICAgICAgICAgICAgLy8gZm9yd2Fy
ZCBhbmQgd2FzIGF0IHRoZSBlbmQgb2YgaXRzIGZvY3VzIGNoYWluLiBJZgorICAgICAgICAgICAg
Ly8gd2UgYXJlIHRoZSBvbmx5IHdpZGdldCBpbiB0aGUgZm9jdXMgY2hhaW4sIHdlIHNlbmQKKyAg
ICAgICAgICAgIC8vIG91cnNlbHZlcyBhIEZvY3VzT3V0IGV2ZW50LgorICAgICAgICAgICAgYnJl
YWs7CisgICAgICAgIGNhc2UgWEVNQkVEX0ZPQ1VTX1BSRVY6CisgICAgICAgICAgICAvLyBDbGll
bnQgc2VuZHMgdGhpcyBldmVudCB3aGVuIGl0IHJlY2VpdmVkIGEgYmFja3RhYgorICAgICAgICAg
ICAgLy8gYW5kIHdhcyBhdCB0aGUgc3RhcnQgb2YgaXRzIGZvY3VzIGNoYWluLiBJZiB3ZSBhcmUK
KyAgICAgICAgICAgIC8vIHRoZSBvbmx5IHdpZGdldCBpbiB0aGUgZm9jdXMgY2hhaW4sIHdlIHNl
bmQKKyAgICAgICAgICAgIC8vIG91cnNlbHZlcyBhIEZvY3VzT3V0IGV2ZW50LgorICAgICAgICAg
ICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAgICAgYnJlYWs7CisgICAgfQorICAgIHJldHVybiBm
YWxzZTsKK30KKwordm9pZCBzZW5kWEVtYmVkTWVzc2FnZShXaW5JZCB3aW5kb3csIERpc3BsYXkq
IGRpc3BsYXksIGxvbmcgbWVzc2FnZSwgbG9uZyBkZXRhaWwsIGxvbmcgZGF0YTEsIGxvbmcgZGF0
YTIpCit7CisgICAgWEV2ZW50IGV2OworICAgIG1lbXNldCgmZXYsIDAsIHNpemVvZihldikpOwor
ICAgIGV2LnhjbGllbnQudHlwZSA9IENsaWVudE1lc3NhZ2U7CisgICAgZXYueGNsaWVudC53aW5k
b3cgPSB3aW5kb3c7CisgICAgZXYueGNsaWVudC5tZXNzYWdlX3R5cGUgPSBBVE9NKF9YRU1CRURf
SU5GTyk7CisgICAgZXYueGNsaWVudC5mb3JtYXQgPSAzMjsKKyAgICBldi54Y2xpZW50LmRhdGEu
bFswXSA9IGVjb3JlX3hfY3VycmVudF90aW1lX2dldCgpOworICAgIGV2LnhjbGllbnQuZGF0YS5s
WzFdID0gbWVzc2FnZTsKKyAgICBldi54Y2xpZW50LmRhdGEubFsyXSA9IGRldGFpbDsKKyAgICBl
di54Y2xpZW50LmRhdGEubFszXSA9IGRhdGExOworICAgIGV2LnhjbGllbnQuZGF0YS5sWzRdID0g
ZGF0YTI7CisgICAgWFNlbmRFdmVudChkaXNwbGF5LCB3aW5kb3csIGZhbHNlLCBOb0V2ZW50TWFz
aywgJmV2KTsKKyAgICBYU3luYyhkaXNwbGF5LCBmYWxzZSk7Cit9CisKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL3BsdWdpbnMvZWZsL1gxMUVtYmVkQ29udGFpbmVyLmggYi9Tb3VyY2UvV2Vi
Q29yZS9wbHVnaW5zL2VmbC9YMTFFbWJlZENvbnRhaW5lci5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0
CmluZGV4IDAwMDAwMDAuLmMxNzE4YjQKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9wbHVnaW5zL2VmbC9YMTFFbWJlZENvbnRhaW5lci5oCkBAIC0wLDAgKzEsNzUgQEAKKy8qCisg
ICAgQ29weXJpZ2h0IChDKSAyMDA5IElOZFQgLSBJbnN0aXR1dG8gTm9raWEgZGUgVGVjbm9sb2dp
YQorICAgIENvcHlyaWdodCAoQykgMjAwOS0yMDEwIFByb0ZVU0lPTiBlbWJlZGRlZCBzeXN0ZW1z
CisgICAgQ29weXJpZ2h0IChDKSAyMDA5LTIwMTEgU2Ftc3VuZyBFbGVjdHJvbmljcworCisgICAg
VGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFu
ZC9vcgorICAgIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdl
bmVyYWwgUHVibGljCisgICAgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdh
cmUgRm91bmRhdGlvbjsgZWl0aGVyCisgICAgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAo
YXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorCisgICAgVGhpcyBsaWJyYXJ5IGlz
IGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgICAgYnV0
IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkg
b2YKKyAgICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBP
U0UuICBTZWUgdGhlIEdOVQorICAgIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3Ig
bW9yZSBkZXRhaWxzLgorCisgICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0
aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICAgIGFsb25nIHdpdGggdGhp
cyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCisg
ICAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0
LCBGaWZ0aCBGbG9vciwKKyAgICBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKyovCisKKyNp
Zm5kZWYgWDExRW1iZWRDb250YWluZXJfaAorI2RlZmluZSBYMTFFbWJlZENvbnRhaW5lcl9oCisK
KyNpbmNsdWRlICJQbHVnaW5WaWV3LmgiCisjaW5jbHVkZSAiWDExV2luZG93LmgiCisKKyNpbmNs
dWRlIDx3dGYvT3duUHRyLmg+CisjaW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgorCitjbGFzcyBYMTFF
bWJlZENvbnRhaW5lcjsKK2NsYXNzIFgxMVdpbmRvdzsKKworY2xhc3MgWDExRW1iZWRDb250YWlu
ZXIgOiBwdWJsaWMgWDExV2luZG93IHsKK3B1YmxpYzoKKyAgICBYMTFFbWJlZENvbnRhaW5lcihF
dmFzKiwgV2ViQ29yZTo6UGx1Z2luVmlldyopOworICAgIH5YMTFFbWJlZENvbnRhaW5lcigpOwor
CisgICAgV2luSWQgcm9vdFdpbmRvdygpOworCisgICAgV2luSWQgY2xpZW50KCkgeyByZXR1cm4g
bV9jbGllbnQ7IH0KKyAgICB2b2lkIHNldENsaWVudChXaW5JZCBjbGllbnQpCisgICAgeworICAg
ICAgICBtX2NsaWVudCA9IGNsaWVudDsKKyAgICAgICAgaWYgKGNsaWVudCkKKyAgICAgICAgICAg
IG1fY2xpZW50V2luZG93LnNldChYMTFXaW5kb3c6OmFkb3B0KGNsaWVudCkpOworICAgIH0KKwor
ICAgIHZvaWQgYWNjZXB0KFdpbklkIGNsaWVudCk7CisgICAgdm9pZCByZWplY3QoV2luSWQgY2xp
ZW50KTsKKworICAgIHZvaWQgbW92ZUlucHV0Rm9jdXNUb1Byb3h5KCk7CisgICAgYm9vbCB4MTFF
dmVudChYRXZlbnQqKTsKKworICAgIHZvaWQgc2V0RnJhbWVSZWN0KGNvbnN0IFdlYkNvcmU6Oklu
dFJlY3QmKTsKKworICAgIHZvaWQgcmVzaXplKGludCB3aWR0aCwgaW50IGhlaWdodCk7CisKKyAg
ICB2b2lkIHNob3coKTsKKyAgICB2b2lkIGhpZGUoKTsKKworICAgIHZvaWQgc2V0Rm9jdXMoKTsK
KyAgICBib29sIGhhc0ZvY3VzKCk7CisgICAgYm9vbCBpc0FjdGl2ZSgpOworCitwcml2YXRlOgor
ICAgIGJvb2wgbV9hY3RpdmU7CisgICAgV2luSWQgbV9jbGllbnQ7CisKKyAgICBXZWJDb3JlOjpQ
bHVnaW5WaWV3KiBtX3BsdWdpblZpZXc7CisgICAgT3duUHRyPFgxMVdpbmRvdz4gbV9mb2N1c1By
b3h5OworICAgIE93blB0cjxYMTFXaW5kb3c+IG1fY2xpZW50V2luZG93OworfTsKKworI2VuZGlm
IC8vIFgxMUVtYmVkQ29udGFpbmVyX2gKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsdWdp
bnMvZWZsL1gxMVdpbmRvdy5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbHVnaW5zL2VmbC9YMTFXaW5k
b3cuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjdkZTIzZjcKLS0tIC9k
ZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbHVnaW5zL2VmbC9YMTFXaW5kb3cuY3BwCkBA
IC0wLDAgKzEsMTgzIEBACisvKgorICAgIENvcHlyaWdodCAoQykgMjAwOSBJTmRUIC0gSW5zdGl0
dXRvIE5va2lhIGRlIFRlY25vbG9naWEKKyAgICBDb3B5cmlnaHQgKEMpIDIwMDktMjAxMCBQcm9G
VVNJT04gZW1iZWRkZWQgc3lzdGVtcworICAgIENvcHlyaWdodCAoQykgMjAwOS0yMDExIFNhbXN1
bmcgRWxlY3Ryb25pY3MKKworICAgIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3Ug
Y2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAgICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1z
IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworICAgIExpY2Vuc2UgYXMgcHVibGlz
aGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICAgIHZlcnNpb24g
MiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4K
KworICAgIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdp
bGwgYmUgdXNlZnVsLAorICAgIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVu
IHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1Mg
Rk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAgICBMaWJyYXJ5IEdlbmVy
YWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKworICAgIFlvdSBzaG91bGQgaGF2
ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vu
c2UKKyAgICBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElC
LiAgSWYgbm90LCB3cml0ZSB0bworICAgIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIElu
Yy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCisgICAgQm9zdG9uLCBNQSAwMjEx
MC0xMzAxLCBVU0EuCisqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiWDExV2lu
ZG93LmgiCisKKyNpbmNsdWRlIDxFY29yZV9FdmFzLmg+CisKK3VzaW5nIG5hbWVzcGFjZSBXZWJD
b3JlOworCitFaW5hX0Jvb2wgb25FY29yZVhFdmVudCh2b2lkKiwgaW50IHR5cGUsIHZvaWQqIGV2
ZW50RGF0YSk7CisKK3ZvaWQgWDExV2luZG93Ojppbml0KFdpbklkIHBhcmVudCwgSW50UmVjdCYg
Z2VvbWV0cnkpCit7CisgICAgbV93aW5JZCA9IGVjb3JlX3hfd2luZG93X25ldyhwYXJlbnQsIGdl
b21ldHJ5LngoKSwgZ2VvbWV0cnkueSgpLAorICAgICAgICAgICAgZ2VvbWV0cnkud2lkdGgoKSwg
Z2VvbWV0cnkuaGVpZ2h0KCkpOworICAgIG1fWEV2ZW50SGFuZGxlciA9IGVjb3JlX2V2ZW50X2hh
bmRsZXJfYWRkKEVDT1JFX1hfRVZFTlRfQU5ZLCBvbkVjb3JlWEV2ZW50LCB0aGlzKTsKK30KKwor
WDExV2luZG93KiBYMTFXaW5kb3c6OmFkb3B0KFdpbklkIGlkKQoreworICAgIFgxMVdpbmRvdyog
d2luID0gbmV3IFgxMVdpbmRvdygpOworICAgIHdpbi0+bV93aW5JZCA9IGlkOworICAgIHdpbi0+
bV9YRXZlbnRIYW5kbGVyID0gZWNvcmVfZXZlbnRfaGFuZGxlcl9hZGQoRUNPUkVfWF9FVkVOVF9B
TlksIG9uRWNvcmVYRXZlbnQsIHdpbik7CisKKyAgICByZXR1cm4gd2luOworfQorCitYMTFXaW5k
b3c6OlgxMVdpbmRvdygpCisgICAgOiBtX3gxMUluZm8oMCkKKyAgICAsIG1fdmlzaWJsZShmYWxz
ZSkKKyAgICAsIG1fcmVjdChJbnRSZWN0KCkpCisgICAgLCBtX2V2ZW50RmlsdGVyKDApCisgICAg
LCBtX2Fkb3B0ZWQodHJ1ZSkKK3sKK30KKworWDExV2luZG93OjpYMTFXaW5kb3coRXZhcyAqZXZh
cywgSW50UmVjdCBnZW9tZXRyeSkKKyAgICA6IG1feDExSW5mbygwKQorICAgICwgbV92aXNpYmxl
KGZhbHNlKQorICAgICwgbV9yZWN0KGdlb21ldHJ5KQorICAgICwgbV9ldmVudEZpbHRlcigwKQor
ICAgICwgbV9hZG9wdGVkKGZhbHNlKQoreworICAgIEVjb3JlX0V2YXMqIGVlID0gZWNvcmVfZXZh
c19lY29yZV9ldmFzX2dldChldmFzKTsKKyAgICBXaW5JZCBwYXJlbnQgPSBlY29yZV9ldmFzX3dp
bmRvd19nZXQoZWUpOworICAgIGluaXQocGFyZW50LCBnZW9tZXRyeSk7Cit9CisKK1gxMVdpbmRv
dzo6WDExV2luZG93KFdpbklkIHBhcmVudCwgSW50UmVjdCBnZW9tZXRyeSkKKyAgICA6IG1feDEx
SW5mbygwKQorICAgICwgbV92aXNpYmxlKGZhbHNlKQorICAgICwgbV9yZWN0KGdlb21ldHJ5KQor
ICAgICwgbV9ldmVudEZpbHRlcigwKQorICAgICwgbV9hZG9wdGVkKGZhbHNlKQoreworICAgIGlu
aXQocGFyZW50LCBnZW9tZXRyeSk7Cit9CisKK1gxMVdpbmRvdzo6flgxMVdpbmRvdygpCit7Cisg
ICAgZWNvcmVfZXZlbnRfaGFuZGxlcl9kZWwobV9YRXZlbnRIYW5kbGVyKTsKKworICAgIGRlbGV0
ZSBtX3gxMUluZm87CisgICAgaWYgKCFtX2Fkb3B0ZWQpCisgICAgICAgIGVjb3JlX3hfd2luZG93
X2ZyZWUobV93aW5JZCk7Cit9CisKK3ZvaWQgWDExV2luZG93OjpzaG93KCkKK3sKKyAgICBpZiAo
bV92aXNpYmxlKQorICAgICAgICByZXR1cm47CisgICAgZWNvcmVfeF93aW5kb3dfc2hvdyhtX3dp
bklkKTsKKyAgICBtX3Zpc2libGUgPSB0cnVlOworfQorCit2b2lkIFgxMVdpbmRvdzo6aGlkZSgp
Cit7CisgICAgaWYgKG1fdmlzaWJsZSkKKyAgICAgICAgcmV0dXJuOworICAgIGVjb3JlX3hfd2lu
ZG93X2hpZGUobV93aW5JZCk7CisgICAgbV92aXNpYmxlID0gZmFsc2U7Cit9CisKK3ZvaWQgWDEx
V2luZG93OjpzZXRWaXNpYmxlKGJvb2wgb24pCit7CisgICAgaWYgKG9uKQorICAgICAgICBzaG93
KCk7CisgICAgZWxzZQorICAgICAgICBoaWRlKCk7Cit9CisKK3ZvaWQgWDExV2luZG93Ojptb3Zl
KGludCB4LCBpbnQgeSkKK3sKKyAgICBJbnRQb2ludCBuZXdQb3MgPSBJbnRQb2ludCh4LCB5KTsK
KyAgICBpZiAoZ2VvbWV0cnkoKS5sb2NhdGlvbigpID09IG5ld1BvcykKKyAgICAgICAgcmV0dXJu
OworCisgICAgZWNvcmVfeF93aW5kb3dfbW92ZSh3aW5JZCgpLCB4LCB5KTsKKyAgICBtX3JlY3Qu
c2V0TG9jYXRpb24obmV3UG9zKTsKK30KKwordm9pZCBYMTFXaW5kb3c6OnJlc2l6ZShpbnQgd2lk
dGgsIGludCBoZWlnaHQpCit7CisgICAgSW50U2l6ZSBuZXdTaXplID0gSW50U2l6ZSh3aWR0aCwg
aGVpZ2h0KTsKKworICAgIGlmIChzaXplKCkgPT0gbmV3U2l6ZSkKKyAgICAgICAgcmV0dXJuOwor
ICAgIGVjb3JlX3hfd2luZG93X3Jlc2l6ZSh3aW5JZCgpLCB3aWR0aCwgaGVpZ2h0KTsKKyAgICBt
X3JlY3Quc2V0U2l6ZShuZXdTaXplKTsKK30KKwordm9pZCBYMTFXaW5kb3c6OnNldEZyYW1lUmVj
dChjb25zdCBJbnRSZWN0JiByZWN0KQoreworICAgIGlmIChnZW9tZXRyeSgpID09IHJlY3QpCisg
ICAgICAgIHJldHVybjsKKyAgICBlY29yZV94X3dpbmRvd19tb3ZlX3Jlc2l6ZSh3aW5JZCgpLCBy
ZWN0LngoKSwgcmVjdC55KCksIHJlY3Qud2lkdGgoKSwgcmVjdC5oZWlnaHQoKSk7CisgICAgbV9y
ZWN0ID0gcmVjdDsKK30KKwordm9pZCBYMTFXaW5kb3c6OnVwZGF0ZShjb25zdCBJbnRSZWN0JiBy
ZWN0KQoreworICAgIGVjb3JlX3hfd2luZG93X2FyZWFfZXhwb3NlKHdpbklkKCksIHJlY3QueCgp
LCByZWN0LnkoKSwgcmVjdC53aWR0aCgpLCByZWN0LmhlaWdodCgpKTsKK30KKwordm9pZCBYMTFX
aW5kb3c6OnNldEZvY3VzKCkKK3sKKyAgICBlY29yZV94X3dpbmRvd19mb2N1cyh3aW5JZCgpKTsK
K30KKwordm9pZCBYMTFXaW5kb3c6Omluc3RhbGxFdmVudEZpbHRlcihYMTFXaW5kb3cqIG9iamVj
dCkKK3sKKyAgICBtX2V2ZW50RmlsdGVyID0gb2JqZWN0OworfQorCit2b2lkIFgxMVdpbmRvdzo6
cHJvY2Vzc0V2ZW50KFhFdmVudCogeGV2ZW50KQoreworICAgIGJvb2wgaGFuZGxlZCA9IGZhbHNl
OworCisgICAgaWYgKG1fZXZlbnRGaWx0ZXIpCisgICAgICAgIGhhbmRsZWQgPSBtX2V2ZW50Rmls
dGVyLT54MTFFdmVudCh4ZXZlbnQpOworCisgICAgaWYgKGhhbmRsZWQpCisgICAgICAgIHJldHVy
bjsKKworICAgIHgxMUV2ZW50KHhldmVudCk7Cit9CisKK2Jvb2wgWDExV2luZG93Ojp4MTFFdmVu
dChYRXZlbnQqIHhldmVudCkKK3sKKyAgICByZXR1cm4gZmFsc2U7Cit9CisKK0VpbmFfQm9vbCBv
bkVjb3JlWEV2ZW50KHZvaWQqIG9iamVjdCwgaW50IHR5cGUsIHZvaWQqIGV2ZW50RGF0YSkKK3sK
KyAgICBYMTFXaW5kb3cqIHdpbiA9IHN0YXRpY19jYXN0PFgxMVdpbmRvdyo+KG9iamVjdCk7CisK
KyAgICBYRXZlbnQqIHhldmVudCA9IChYRXZlbnQqKSBldmVudERhdGE7CisKKyAgICBpZiAoeGV2
ZW50LT50eXBlID4gMSAmJiB4ZXZlbnQtPnhhbnkud2luZG93ID09IHdpbi0+d2luSWQoKSkKKyAg
ICAgICAgd2luLT5wcm9jZXNzRXZlbnQoeGV2ZW50KTsKKworICAgIHJldHVybiBFQ09SRV9DQUxM
QkFDS19SRU5FVzsKK30KKwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGx1Z2lucy9lZmwv
WDExV2luZG93LmggYi9Tb3VyY2UvV2ViQ29yZS9wbHVnaW5zL2VmbC9YMTFXaW5kb3cuaApuZXcg
ZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40YzZiOWJkCi0tLSAvZGV2L251bGwKKysr
IGIvU291cmNlL1dlYkNvcmUvcGx1Z2lucy9lZmwvWDExV2luZG93LmgKQEAgLTAsMCArMSwxMDUg
QEAKKy8qCisgICAgQ29weXJpZ2h0IChDKSAyMDA5IElOZFQgLSBJbnN0aXR1dG8gTm9raWEgZGUg
VGVjbm9sb2dpYQorICAgIENvcHlyaWdodCAoQykgMjAwOS0yMDEwIFByb0ZVU0lPTiBlbWJlZGRl
ZCBzeXN0ZW1zCisgICAgQ29weXJpZ2h0IChDKSAyMDA5LTIwMTEgU2Ftc3VuZyBFbGVjdHJvbmlj
cworCisgICAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmli
dXRlIGl0IGFuZC9vcgorICAgIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBM
aWJyYXJ5IEdlbmVyYWwgUHVibGljCisgICAgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZy
ZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgICAgdmVyc2lvbiAyIG9mIHRoZSBMaWNl
bnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorCisgICAgVGhpcyBs
aWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWws
CisgICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQg
d2FycmFudHkgb2YKKyAgICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNV
TEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICAgIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGlj
ZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorCisgICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEg
Y29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICAgIGFsb25n
IHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdy
aXRlIHRvCisgICAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmts
aW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKKyAgICBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4K
KyovCisKKyNpZm5kZWYgWDExV2luZG93X2gKKyNkZWZpbmUgWDExV2luZG93X2gKKworI2luY2x1
ZGUgIkludFJlY3QuaCIKKyNpbmNsdWRlICJQbHVnaW5QYWNrYWdlLmgiCisKKyNpbmNsdWRlIDxF
Y29yZS5oPgorI2luY2x1ZGUgPEVjb3JlX1guaD4KKyNpbmNsdWRlIDxFdmFzLmg+CisKK3R5cGVk
ZWYgV2luZG93IFdpbklkOworCitjbGFzcyBYMTFJbmZvIHsKK3B1YmxpYzoKKyAgICBEaXNwbGF5
KiBkaXNwbGF5KCkgeyByZXR1cm4gKERpc3BsYXkqKSBlY29yZV94X2Rpc3BsYXlfZ2V0KCk7IH0K
KyAgICBWaXN1YWwqIHZpc3VhbCgpIHsgcmV0dXJuIChWaXN1YWwqKSBtX2F0dC52aXN1YWw7IH0K
KyAgICB1bnNpZ25lZCBpbnQgZGVwdGgoKSB7IHJldHVybiBtX2F0dC5kZXB0aDsgfQorICAgIENv
bG9ybWFwIGNvbG9ybWFwKCkgeyByZXR1cm4gbV9hdHQuY29sb3JtYXA7IH0KKyAgICB1bnNpZ25l
ZCBpbnQgeDExVGltZSgpIHsgcmV0dXJuIGVjb3JlX3hfY3VycmVudF90aW1lX2dldCgpOyB9CisK
K3ByaXZhdGU6CisgICAgWDExSW5mbyhXaW5JZCBvd25lcikKKyAgICB7CisgICAgICAgIG1fb3du
ZXIgPSBvd25lcjsKKyAgICAgICAgZWNvcmVfeF93aW5kb3dfYXR0cmlidXRlc19nZXQob3duZXIs
ICZtX2F0dCk7CisgICAgICAgIG1fYXR0LmNvbG9ybWFwID0gRGVmYXVsdENvbG9ybWFwKGRpc3Bs
YXkoKSwgRGVmYXVsdFNjcmVlbihkaXNwbGF5KCkpKTsKKyAgICB9CisgICAgV2luSWQgbV9vd25l
cjsKKyAgICBFY29yZV9YX1dpbmRvd19BdHRyaWJ1dGVzIG1fYXR0OworICAgIGZyaWVuZCBjbGFz
cyBYMTFXaW5kb3c7Cit9OworCitjbGFzcyBYMTFXaW5kb3cgeworcHVibGljOgorICAgIFgxMVdp
bmRvdyhFdmFzICosIFdlYkNvcmU6OkludFJlY3QgZ2VvbWV0cnkgPSBXZWJDb3JlOjpJbnRSZWN0
KDAsIDAsIDMyLCAzMikpOworICAgIFgxMVdpbmRvdyhXaW5JZCBwYXJlbnQsIFdlYkNvcmU6Oklu
dFJlY3QgZ2VvbWV0cnkgPSBXZWJDb3JlOjpJbnRSZWN0KDAsIDAsIDMyLCAzMikpOworICAgIH5Y
MTFXaW5kb3coKTsKKworICAgIHN0YXRpYyBYMTFXaW5kb3cqIGFkb3B0KFdpbklkKTsKKworICAg
IFgxMUluZm8qIHgxMUluZm8oKQorICAgIHsKKyAgICAgICAgaWYgKCFtX3gxMUluZm8pCisgICAg
ICAgICAgICBtX3gxMUluZm8gPSBuZXcgWDExSW5mbyhtX3dpbklkKTsKKyAgICAgICAgcmV0dXJu
IG1feDExSW5mbzsKKyAgICB9CisKKyAgICBXZWJDb3JlOjpJbnRTaXplIHNpemUoKSB7IHJldHVy
biBtX3JlY3Quc2l6ZSgpOyB9CisgICAgV2ViQ29yZTo6SW50UmVjdCBnZW9tZXRyeSgpIHsgcmV0
dXJuIG1fcmVjdDsgfQorCisgICAgdm9pZCBpbnN0YWxsRXZlbnRGaWx0ZXIoWDExV2luZG93Kik7
CisgICAgdm9pZCBwcm9jZXNzRXZlbnQoWEV2ZW50KiB4ZXZlbnQpOworICAgIHZpcnR1YWwgYm9v
bCB4MTFFdmVudChYRXZlbnQqKTsKKworICAgIHZpcnR1YWwgdm9pZCBzZXRGcmFtZVJlY3QoY29u
c3QgV2ViQ29yZTo6SW50UmVjdCYpOworCisgICAgdmlydHVhbCB2b2lkIG1vdmUoaW50IHgsIGlu
dCB5KTsKKyAgICB2aXJ0dWFsIHZvaWQgcmVzaXplKGludCB3aWR0aCwgaW50IGhlaWdodCk7CisK
KyAgICB2aXJ0dWFsIHZvaWQgdXBkYXRlKGNvbnN0IFdlYkNvcmU6OkludFJlY3QmKTsKKworICAg
IHZpcnR1YWwgdm9pZCBzaG93KCk7CisgICAgdmlydHVhbCB2b2lkIGhpZGUoKTsKKyAgICB2b2lk
IHNldFZpc2libGUoYm9vbCBvbik7CisgICAgdmlydHVhbCB2b2lkIHNldEZvY3VzKCk7CisKKyAg
ICBXaW5JZCB3aW5JZCgpIHsgcmV0dXJuIG1fd2luSWQ7IH0KKworcHJvdGVjdGVkOgorICAgIFgx
MVdpbmRvdygpOworICAgIHZvaWQgaW5pdChXaW5JZCBwYXJlbnQsIFdlYkNvcmU6OkludFJlY3Qm
IGdlb21ldHJ5KTsKKyAgICB2b2lkIGFjY2VwdEV2ZW50VHlwZShpbnQgdHlwZSk7CisKKyAgICBX
aW5JZCBtX3dpbklkOworICAgIFgxMUluZm8qIG1feDExSW5mbzsKKyAgICBib29sIG1fdmlzaWJs
ZTsKKyAgICBXZWJDb3JlOjpJbnRSZWN0IG1fcmVjdDsKKyAgICBYMTFXaW5kb3cqIG1fZXZlbnRG
aWx0ZXI7CisgICAgRWNvcmVfRXZlbnRfSGFuZGxlciogbV9YRXZlbnRIYW5kbGVyOworICAgIGJv
b2wgbV9hZG9wdGVkOworfTsKKworCisjZW5kaWYgLy8gWDExV2luZG93X2gKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJLaXQvZWZsL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJLaXQvZWZsL0NoYW5nZUxv
ZwppbmRleCAwYjM0MjIwLi45MDQwMzgwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L2VmbC9D
aGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYktpdC9lZmwvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTMg
QEAKKzIwMTEtMDMtMTQgIE1hcml1c3ogR3J6ZWdvcmN6eWsgIDxtYXJpdXN6LmdAc2Ftc3VuZy5j
b20+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgQnVn
IDQ0NTA1IC0gW0VGTF0gTWlzc2luZyBwbHVnaW5zIHN1cHBvcnQgZm9yIGVmbCBwb3J0CisgICAg
ICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD00NDUwNQorCisgICAg
ICAgICogZXdrL2V3a19mcmFtZS5jcHA6CisgICAgICAgIChld2tfZnJhbWVfcGx1Z2luX2NyZWF0
ZSk6CisKIDIwMTEtMDMtMTQgIFJ5dWFuIENob2kgIDxyeXVhbi5jaG9pQHNhbXN1bmcuY29tPgog
CiAgICAgICAgIFJldmlld2VkIGJ5IEtlbm5ldGggUm9oZGUgQ2hyaXN0aWFuc2VuLgpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYktpdC9lZmwvZXdrL2V3a19mcmFtZS5jcHAgYi9Tb3VyY2UvV2ViS2l0
L2VmbC9ld2svZXdrX2ZyYW1lLmNwcAppbmRleCA0ZTUyYjU2Li44YmZmOGNkIDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViS2l0L2VmbC9ld2svZXdrX2ZyYW1lLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0
L2VmbC9ld2svZXdrX2ZyYW1lLmNwcApAQCAtMjAzOSw1ICsyMDM5LDI0IEBAIHZvaWQgZXdrX2Zy
YW1lX2ZvcmNlX2xheW91dChFdmFzX09iamVjdCogbykKIAogV1RGOjpQYXNzUmVmUHRyPFdlYkNv
cmU6OldpZGdldD4gZXdrX2ZyYW1lX3BsdWdpbl9jcmVhdGUoRXZhc19PYmplY3QqIG8sIGNvbnN0
IFdlYkNvcmU6OkludFNpemUmIHBsdWdpblNpemUsIFdlYkNvcmU6OkhUTUxQbHVnSW5FbGVtZW50
KiBlbGVtZW50LCBjb25zdCBXZWJDb3JlOjpLVVJMJiB1cmwsIGNvbnN0IFdURjo6VmVjdG9yPFdU
Rjo6U3RyaW5nPiYgcGFyYW1OYW1lcywgY29uc3QgV1RGOjpWZWN0b3I8V1RGOjpTdHJpbmc+JiBw
YXJhbVZhbHVlcywgY29uc3QgV1RGOjpTdHJpbmcmIG1pbWVUeXBlLCBib29sIGxvYWRNYW51YWxs
eSkKIHsKKyNpZiBFTkFCTEUoTkVUU0NBUEVfUExVR0lOX0FQSSkKKyAgICBEQkcoIm89JXAsIHNp
emU9JWR4JWQsIGVsZW1lbnQ9JXAsIHVybD0lcywgbWltZVR5cGU9JXMiLAorICAgICAgICBvLCBw
bHVnaW5TaXplLndpZHRoKCksIHBsdWdpblNpemUuaGVpZ2h0KCksIGVsZW1lbnQsCisgICAgICAg
IHVybC5wcmV0dHlVUkwoKS51dGY4KCkuZGF0YSgpLCBtaW1lVHlwZS51dGY4KCkuZGF0YSgpKTsK
KworICAgIEVXS19GUkFNRV9TRF9HRVRfT1JfUkVUVVJOKG8sIHNkLCAwKTsKKworICAgIC8vIFRP
RE86IGVtaXQgc2lnbmFsIGFuZCBhc2sgd2Via2l0IHVzZXJzIGlmIHNvbWV0aGluZyBlbHNlIHNo
b3VsZCBiZSBkb25lLgorICAgIC8vIGxpa2UgY3JlYXRpbmcgYW5vdGhlciB4IHdpbmRvdyAoc2Vl
IGd0aywgaXQgYWxsb3dzIHVzZXJzIHRvIGNyZWF0ZQorICAgIC8vIEd0a1BsdWdpbldpZGdldC4K
KworICAgIFdURjo6UmVmUHRyPFdlYkNvcmU6OlBsdWdpblZpZXc+IHBsdWdpblZpZXcgPSBXZWJD
b3JlOjpQbHVnaW5WaWV3OjpjcmVhdGUKKyAgICAgICAgKHNkLT5mcmFtZSwgcGx1Z2luU2l6ZSwg
ZWxlbWVudCwgdXJsLCBwYXJhbU5hbWVzLCBwYXJhbVZhbHVlcywKKyAgICAgICAgbWltZVR5cGUs
IGxvYWRNYW51YWxseSk7CisKKyAgICBpZiAocGx1Z2luVmlldy0+c3RhdHVzKCkgPT0gV2ViQ29y
ZTo6UGx1Z2luU3RhdHVzTG9hZGVkU3VjY2Vzc2Z1bGx5KQorICAgICAgICByZXR1cm4gcGx1Z2lu
VmlldzsKKyNlbHNlCiAgICAgcmV0dXJuIDA7CisjZW5kaWYgLy8gI2lmIEVOQUJMRShORVRTQ0FQ
RV9QTFVHSU5fQVBJKQogfQo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>88807</attachid>
            <date>2011-04-08 05:39:03 -0700</date>
            <delta_ts>2011-04-29 02:16:45 -0700</delta_ts>
            <desc>EFL&apos;s plugin support</desc>
            <filename>eflplugins.patch</filename>
            <type>text/plain</type>
            <size>27377</size>
            <attacher name="Mariusz Grzegorczyk">mariusz.g</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cgYi9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvQ2hhbmdlTG9nCmluZGV4IDFiMzhkODkuLmI5OGJmMWMgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKKysrIGIvU291cmNlL0phdmFTY3JpcHRD
b3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDEyIEBACisyMDExLTA0LTA4ICBNYXJpdXN6IEdyemVn
b3JjenlrICA8bWFyaXVzei5nQHNhbXN1bmcuY29tPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5P
Qk9EWSAoT09QUyEpLgorCisgICAgICAgIEJ1ZyA0NDUwNSAtIFtFRkxdIE1pc3NpbmcgcGx1Z2lu
cyBzdXBwb3J0IGZvciBlZmwgcG9ydAorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9z
aG93X2J1Zy5jZ2k/aWQ9NDQ1MDUKKworICAgICAgICAqIHd0Zi9QbGF0Zm9ybS5oOgorCiAyMDEx
LTA0LTA1ICBHZW9mZnJleSBHYXJlbiAgPGdnYXJlbkBhcHBsZS5jb20+CiAKICAgICAgICAgVHJ5
IHRvIGZpeCB0aGUgV2luZG93cyBidWlsZC4KZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS93dGYvUGxhdGZvcm0uaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93dGYvUGxhdGZvcm0u
aAppbmRleCBlNDBiMWE2Li45MGExOGM3IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvd3RmL1BsYXRmb3JtLmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3d0Zi9QbGF0Zm9y
bS5oCkBAIC0xMTU3LDcgKzExNTcsNyBAQAogI2RlZmluZSBXQVJOX1VOVVNFRF9SRVRVUk4KICNl
bmRpZgogCi0jaWYgIUVOQUJMRShORVRTQ0FQRV9QTFVHSU5fQVBJKSB8fCAoRU5BQkxFKE5FVFND
QVBFX1BMVUdJTl9BUEkpICYmICgoT1MoVU5JWCkgJiYgKFBMQVRGT1JNKFFUKSB8fCBQTEFURk9S
TShXWCkpKSB8fCBQTEFURk9STShHVEspKSkKKyNpZiAhRU5BQkxFKE5FVFNDQVBFX1BMVUdJTl9B
UEkpIHx8IChFTkFCTEUoTkVUU0NBUEVfUExVR0lOX0FQSSkgJiYgKChPUyhVTklYKSAmJiAoUExB
VEZPUk0oUVQpIHx8IFBMQVRGT1JNKFdYKSkpIHx8IFBMQVRGT1JNKEdUSykgfHwgUExBVEZPUk0o
RUZMKSkpCiAjZGVmaW5lIEVOQUJMRV9QTFVHSU5fUEFDS0FHRV9TSU1QTEVfSEFTSCAxCiAjZW5k
aWYKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvQ01ha2VMaXN0c0VmbC50eHQgYi9Tb3Vy
Y2UvV2ViQ29yZS9DTWFrZUxpc3RzRWZsLnR4dAppbmRleCBiMzFiYWJjLi4yMGQ3YmJjIDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9DTWFrZUxpc3RzRWZsLnR4dAorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9DTWFrZUxpc3RzRWZsLnR4dApAQCAtMTEsNiArMTEsNyBAQCBMSVNUKEFQUEVORCBXZWJD
b3JlX0lOQ0xVREVfRElSRUNUT1JJRVMKICAgIiR7V0VCQ09SRV9ESVJ9L3BsYXRmb3JtL2dyYXBo
aWNzL2VmbCIKICAgIiR7V0VCQ09SRV9ESVJ9L3BhZ2UvZWZsIgogICAiJHtXRUJDT1JFX0RJUn0v
YWNjZXNzaWJpbGl0eS9lZmwiCisgICIke1dFQkNPUkVfRElSfS9wbHVnaW5zL2VmbCIKICAgIiR7
V0VCS0lUX0RJUn0vZWZsL1dlYkNvcmVTdXBwb3J0IgogICAiJHtXRUJLSVRfRElSfS9lZmwvZXdr
IgogICAiJHtERVJJVkVEX1NPVVJDRVNfRElSfSIKQEAgLTcyLDkgKzczLDI5IEBAIExJU1QoQVBQ
RU5EIFdlYkNvcmVfU09VUkNFUwogICBwbGF0Zm9ybS9pbWFnZS1kZWNvZGVycy93ZWJwL1dFQlBJ
bWFnZURlY29kZXIuY3BwCiAgIHBsYXRmb3JtL3Bvc2l4L0ZpbGVTeXN0ZW1QT1NJWC5jcHAKICAg
cGxhdGZvcm0vdGV4dC9lZmwvVGV4dEJyZWFrSXRlcmF0b3JJbnRlcm5hbElDVUVmbC5jcHAKLSAg
cGx1Z2lucy9QbHVnaW5EYXRhTm9uZS5jcHAKICkKIAorCitJRiAoRU5BQkxFX05FVFNDQVBFX1BM
VUdJTl9BUEkpCisgICAgTElTVChBUFBFTkQgV2ViQ29yZV9TT1VSQ0VTCisgICAgcGx1Z2lucy9Q
bHVnaW5EYXRhYmFzZS5jcHAKKyAgICBwbHVnaW5zL1BsdWdpbkRlYnVnLmNwcAorICAgIHBsdWdp
bnMvUGx1Z2luUGFja2FnZS5jcHAKKyAgICBwbHVnaW5zL1BsdWdpblN0cmVhbS5jcHAKKyAgICBw
bHVnaW5zL1BsdWdpblZpZXcuY3BwCisgICAgcGx1Z2lucy9lZmwvUGx1Z2luRGF0YUVmbC5jcHAK
KyAgICBwbHVnaW5zL2VmbC9QbHVnaW5QYWNrYWdlRWZsLmNwcAorICAgIHBsdWdpbnMvZWZsL1Bs
dWdpblZpZXdFZmwuY3BwCisgICAgKQorRUxTRSAoKQorICAgIExJU1QoQVBQRU5EIFdlYkNvcmVf
U09VUkNFUworICAgIHBsdWdpbnMvUGx1Z2luRGF0YU5vbmUuY3BwCisgICAgcGx1Z2lucy9QbHVn
aW5QYWNrYWdlTm9uZS5jcHAKKyAgICBwbHVnaW5zL1BsdWdpblZpZXdOb25lLmNwcAorICAgICkK
K0VORElGICgpCisKKwogSUYgKFdURl9QTEFURk9STV9DQUlSTykKICAgTElTVChBUFBFTkQgV2Vi
Q29yZV9JTkNMVURFX0RJUkVDVE9SSUVTCiAgICAgIiR7V0VCQ09SRV9ESVJ9L3BsYXRmb3JtL2dy
YXBoaWNzL2NhaXJvIgpAQCAtMTM4LDYgKzE1OSw3IEBAIElGIChXVEZfVVNFX1NPVVApCiAgIExJ
U1QoQVBQRU5EIFdlYkNvcmVfU09VUkNFUwogICAgIHBsYXRmb3JtL25ldHdvcmsvc291cC9Db29r
aWVKYXJTb3VwLmNwcAogICAgIHBsYXRmb3JtL25ldHdvcmsvc291cC9HT3duUHRyU291cC5jcHAK
KyAgICBwbGF0Zm9ybS9uZXR3b3JrL3NvdXAvUHJveHlTZXJ2ZXJTb3VwLmNwcAogICAgIHBsYXRm
b3JtL25ldHdvcmsvc291cC9SZXNvdXJjZUhhbmRsZVNvdXAuY3BwCiAgICAgcGxhdGZvcm0vbmV0
d29yay9zb3VwL1Jlc291cmNlUmVxdWVzdFNvdXAuY3BwCiAgICAgcGxhdGZvcm0vbmV0d29yay9z
b3VwL1Jlc291cmNlUmVzcG9uc2VTb3VwLmNwcApAQCAtMTU0LDYgKzE3Niw3IEBAIElGIChXVEZf
VVNFX0NVUkwpCiAgICAgcGxhdGZvcm0vbmV0d29yay9jdXJsL0Nvb2tpZUphckN1cmwuY3BwCiAg
ICAgcGxhdGZvcm0vbmV0d29yay9jdXJsL0ROU0N1cmwuY3BwCiAgICAgcGxhdGZvcm0vbmV0d29y
ay9jdXJsL0Zvcm1EYXRhU3RyZWFtQ3VybC5jcHAKKyAgICBwbGF0Zm9ybS9uZXR3b3JrL2N1cmwv
UHJveHlTZXJ2ZXJDdXJsLmNwcAogICAgIHBsYXRmb3JtL25ldHdvcmsvY3VybC9SZXNvdXJjZUhh
bmRsZUN1cmwuY3BwCiAgICAgcGxhdGZvcm0vbmV0d29yay9jdXJsL1Jlc291cmNlSGFuZGxlTWFu
YWdlci5jcHAKICAgICBwbGF0Zm9ybS9uZXR3b3JrL2N1cmwvU29ja2V0U3RyZWFtSGFuZGxlQ3Vy
bC5jcHAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJD
b3JlL0NoYW5nZUxvZwppbmRleCA1NWM0NTNhLi5kZTRjMDE2IDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCkBAIC0xLDMg
KzEsNDcgQEAKKzIwMTEtMDQtMDggIE1hcml1c3ogR3J6ZWdvcmN6eWsgIDxtYXJpdXN6LmdAc2Ft
c3VuZy5jb20+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAg
ICAgQnVnIDQ0NTA1IC0gW0VGTF0gTWlzc2luZyBwbHVnaW5zIHN1cHBvcnQgZm9yIGVmbCBwb3J0
CisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD00NDUwNQor
CisgICAgICAgIE5vIG5ldyB0ZXN0cy4gKE9PUFMhKQorCisgICAgICAgICogQ01ha2VMaXN0c0Vm
bC50eHQ6CisgICAgICAgICogcGx1Z2lucy9QbHVnaW5WaWV3Lmg6CisgICAgICAgICogcGx1Z2lu
cy9lZmwvUGx1Z2luRGF0YUVmbC5jcHA6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6UGx1Z2lu
RGF0YTo6aW5pdFBsdWdpbnMpOgorICAgICAgICAoV2ViQ29yZTo6UGx1Z2luRGF0YTo6cmVmcmVz
aCk6CisgICAgICAgICogcGx1Z2lucy9lZmwvUGx1Z2luUGFja2FnZUVmbC5jcHA6IEFkZGVkLgor
ICAgICAgICAoV2ViQ29yZTo6UGx1Z2luUGFja2FnZTo6ZmV0Y2hJbmZvKToKKyAgICAgICAgKFdl
YkNvcmU6OlBsdWdpblBhY2thZ2U6Ok5QVmVyc2lvbik6CisgICAgICAgIChXZWJDb3JlOjpQbHVn
aW5QYWNrYWdlOjpsb2FkKToKKyAgICAgICAgKiBwbHVnaW5zL2VmbC9QbHVnaW5WaWV3RWZsLmNw
cDogQWRkZWQuCisgICAgICAgIChXZWJDb3JlOjpQbHVnaW5WaWV3OjpkaXNwYXRjaE5QRXZlbnQp
OgorICAgICAgICAoV2ViQ29yZTo6UGx1Z2luVmlldzo6aGFsdCk6CisgICAgICAgIChXZWJDb3Jl
OjpQbHVnaW5WaWV3OjpoYW5kbGVGb2N1c0luRXZlbnQpOgorICAgICAgICAoV2ViQ29yZTo6UGx1
Z2luVmlldzo6aGFuZGxlRm9jdXNPdXRFdmVudCk6CisgICAgICAgIChXZWJDb3JlOjpQbHVnaW5W
aWV3OjpyZXN0YXJ0KToKKyAgICAgICAgKFdlYkNvcmU6OlBsdWdpblZpZXc6OmhhbmRsZUtleWJv
YXJkRXZlbnQpOgorICAgICAgICAoV2ViQ29yZTo6UGx1Z2luVmlldzo6aGFuZGxlTW91c2VFdmVu
dCk6CisgICAgICAgIChXZWJDb3JlOjpQbHVnaW5WaWV3Ojp1cGRhdGVQbHVnaW5XaWRnZXQpOgor
ICAgICAgICAoV2ViQ29yZTo6UGx1Z2luVmlldzo6c2V0Rm9jdXMpOgorICAgICAgICAoV2ViQ29y
ZTo6UGx1Z2luVmlldzo6c2hvdyk6CisgICAgICAgIChXZWJDb3JlOjpQbHVnaW5WaWV3OjpoaWRl
KToKKyAgICAgICAgKFdlYkNvcmU6OlBsdWdpblZpZXc6OnBhaW50KToKKyAgICAgICAgKFdlYkNv
cmU6OlBsdWdpblZpZXc6OnNldFBhcmVudCk6CisgICAgICAgIChXZWJDb3JlOjpQbHVnaW5WaWV3
OjpzZXROUFdpbmRvd1JlY3QpOgorICAgICAgICAoV2ViQ29yZTo6UGx1Z2luVmlldzo6c2V0TlBX
aW5kb3dJZk5lZWRlZCk6CisgICAgICAgIChXZWJDb3JlOjpQbHVnaW5WaWV3OjpzZXRQYXJlbnRW
aXNpYmxlKToKKyAgICAgICAgKFdlYkNvcmU6OlBsdWdpblZpZXc6OmhhbmRsZVBvc3RSZWFkRmls
ZSk6CisgICAgICAgIChXZWJDb3JlOjpQbHVnaW5WaWV3OjpwbGF0Zm9ybUdldFZhbHVlU3RhdGlj
KToKKyAgICAgICAgKFdlYkNvcmU6OlBsdWdpblZpZXc6OnBsYXRmb3JtR2V0VmFsdWUpOgorICAg
ICAgICAoV2ViQ29yZTo6UGx1Z2luVmlldzo6aW52YWxpZGF0ZVJlY3QpOgorICAgICAgICAoV2Vi
Q29yZTo6UGx1Z2luVmlldzo6aW52YWxpZGF0ZVJlZ2lvbik6CisgICAgICAgIChXZWJDb3JlOjpQ
bHVnaW5WaWV3Ojpmb3JjZVJlZHJhdyk6CisgICAgICAgIChXZWJDb3JlOjpQbHVnaW5WaWV3Ojpw
bGF0Zm9ybVN0YXJ0KToKKyAgICAgICAgKFdlYkNvcmU6OlBsdWdpblZpZXc6OnBsYXRmb3JtRGVz
dHJveSk6CisKIDIwMTEtMDQtMDYgIEFsZWphbmRybyBHLiBDYXN0cm8gIDxhbGV4QGlnYWxpYS5j
b20+CiAKICAgICAgICAgRml4IEdUSzMgY29tcGlsYXRpb24gYWZ0ZXIgcjgyOTYyLgpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvcGx1Z2lucy9QbHVnaW5WaWV3LmggYi9Tb3VyY2UvV2ViQ29y
ZS9wbHVnaW5zL1BsdWdpblZpZXcuaAppbmRleCA4OTY1MDhkLi44OWFhODA1IDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9wbHVnaW5zL1BsdWdpblZpZXcuaAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9wbHVnaW5zL1BsdWdpblZpZXcuaApAQCAtMzc1LDcgKzM3NSw3IEBAIG5hbWVzcGFjZSBXZWJD
b3JlIHsKICAgICAgICAgYm9vbCBtX2hhdmVVcGRhdGVkUGx1Z2luV2lkZ2V0OwogI2VuZGlmCiAK
LSNpZiAoKFBMQVRGT1JNKFFUKSB8fCBQTEFURk9STShXWCkpICYmIE9TKFdJTkRPV1MpKSB8fCBk
ZWZpbmVkKFhQX01BQ09TWCkKKyNpZiAoKFBMQVRGT1JNKFFUKSB8fCBQTEFURk9STShXWCkpICYm
IE9TKFdJTkRPV1MpKSB8fCBkZWZpbmVkKFhQX01BQ09TWCkgfHwgUExBVEZPUk0oRUZMKQogICAg
ICAgICAvLyBPbiBNYWMgT1NYIGFuZCBRdC9XaW5kb3dzIHRoZSBwbHVnaW4gZG9lcyBub3QgaGF2
ZSBpdHMgb3duIG5hdGl2ZSB3aWRnZXQsCiAgICAgICAgIC8vIGJ1dCBpcyB1c2luZyB0aGUgY29u
dGFpbmluZyB3aW5kb3cgYXMgaXRzIHJlZmVyZW5jZSBmb3IgcG9zaXRpb25pbmcvcGFpbnRpbmcu
CiAgICAgICAgIFBsYXRmb3JtUGx1Z2luV2lkZ2V0IG1fd2luZG93OwpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvcGx1Z2lucy9lZmwvUGx1Z2luRGF0YUVmbC5jcHAgYi9Tb3VyY2UvV2ViQ29y
ZS9wbHVnaW5zL2VmbC9QbHVnaW5EYXRhRWZsLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRl
eCAwMDAwMDAwLi41OWE5ZGY5Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvcGx1
Z2lucy9lZmwvUGx1Z2luRGF0YUVmbC5jcHAKQEAgLTAsMCArMSw2OCBAQAorLyoKKyAgICBDb3B5
cmlnaHQgKEMpIDIwMDYsIDIwMDcgQXBwbGUgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAg
ICBDb3B5cmlnaHQgKEMpIDIwMDggVHJvbGx0ZWNoIEFTQQorICAgIENvcHlyaWdodCAoQykgMjAw
OCBDb2xsYWJvcmEgTHRkLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICAgIENvcHlyaWdodCAoQykg
MjAwOCBJTmRUIC0gSW5zdGl0dXRvIE5va2lhIGRlIFRlY25vbG9naWEKKyAgICBDb3B5cmlnaHQg
KEMpIDIwMDktMjAxMCBQcm9GVVNJT04gZW1iZWRkZWQgc3lzdGVtcworICAgIENvcHlyaWdodCAo
QykgMjAwOS0yMDExIFNhbXN1bmcgRWxlY3Ryb25pY3MKKworICAgIFRoaXMgbGlicmFyeSBpcyBm
cmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAgICBtb2RpZnkg
aXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworICAg
IExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVp
dGhlcgorICAgIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBh
bnkgbGF0ZXIgdmVyc2lvbi4KKworICAgIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0
aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICAgIGJ1dCBXSVRIT1VUIEFOWSBXQVJS
QU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgICAgTUVSQ0hBTlRB
QklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUK
KyAgICBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKwor
ICAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdl
bmVyYWwgUHVibGljIExpY2Vuc2UKKyAgICBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRo
ZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bworICAgIHRoZSBGcmVlIFNvZnR3
YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCisg
ICAgQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisqLworCisjaW5jbHVkZSAiY29uZmlnLmgi
CisjaW5jbHVkZSAiUGx1Z2luRGF0YS5oIgorCisjaW5jbHVkZSAiUGx1Z2luRGF0YWJhc2UuaCIK
KyNpbmNsdWRlICJQbHVnaW5QYWNrYWdlLmgiCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKwordm9p
ZCBQbHVnaW5EYXRhOjppbml0UGx1Z2lucyhjb25zdCBQYWdlKikKK3sKKyAgICBQbHVnaW5EYXRh
YmFzZSogZGIgPSBQbHVnaW5EYXRhYmFzZTo6aW5zdGFsbGVkUGx1Z2lucygpOworICAgIGNvbnN0
IFZlY3RvcjxQbHVnaW5QYWNrYWdlKj4gJnBsdWdpbnMgPSBkYi0+cGx1Z2lucygpOworCisgICAg
Zm9yICh1bnNpZ25lZCBpbnQgaSA9IDA7IGkgPCBwbHVnaW5zLnNpemUoKTsgKytpKSB7CisgICAg
ICAgIFBsdWdpbkluZm8gaW5mbzsKKyAgICAgICAgUGx1Z2luUGFja2FnZSogcGFja2FnZSA9IHBs
dWdpbnNbaV07CisKKyAgICAgICAgaW5mby5uYW1lID0gcGFja2FnZS0+bmFtZSgpOworICAgICAg
ICBpbmZvLmZpbGUgPSBwYWNrYWdlLT5maWxlTmFtZSgpOworICAgICAgICBpbmZvLmRlc2MgPSBw
YWNrYWdlLT5kZXNjcmlwdGlvbigpOworCisgICAgICAgIGNvbnN0IE1JTUVUb0Rlc2NyaXB0aW9u
c01hcCYgbWltZVRvRGVzY3JpcHRpb25zID0gcGFja2FnZS0+bWltZVRvRGVzY3JpcHRpb25zKCk7
CisgICAgICAgIE1JTUVUb0Rlc2NyaXB0aW9uc01hcDo6Y29uc3RfaXRlcmF0b3IgZW5kID0gbWlt
ZVRvRGVzY3JpcHRpb25zLmVuZCgpOworICAgICAgICBmb3IgKE1JTUVUb0Rlc2NyaXB0aW9uc01h
cDo6Y29uc3RfaXRlcmF0b3IgaXQgPSBtaW1lVG9EZXNjcmlwdGlvbnMuYmVnaW4oKTsgaXQgIT0g
ZW5kOyArK2l0KSB7CisgICAgICAgICAgICBNaW1lQ2xhc3NJbmZvIG1pbWU7CisgICAgICAgICAg
ICAKKyAgICAgICAgICAgIG1pbWUudHlwZSA9IGl0LT5maXJzdDsKKyAgICAgICAgICAgIG1pbWUu
ZGVzYyA9IGl0LT5zZWNvbmQ7CisKKyAgICAgICAgICAgIFZlY3RvcjxTdHJpbmc+IGV4dGVuc2lv
bnMgPSBwYWNrYWdlLT5taW1lVG9FeHRlbnNpb25zKCkuZ2V0KG1pbWUudHlwZSk7CisgICAgICAg
ICAgICBpbmZvLm1pbWVzLmFwcGVuZChtaW1lKTsKKyAgICAgICAgfQorCisgICAgICAgIG1fcGx1
Z2lucy5hcHBlbmQoaW5mbyk7CisgICAgfQorfQorCit2b2lkIFBsdWdpbkRhdGE6OnJlZnJlc2go
KQoreworICAgIFBsdWdpbkRhdGFiYXNlKiBkYiA9IFBsdWdpbkRhdGFiYXNlOjppbnN0YWxsZWRQ
bHVnaW5zKCk7CisgICAgZGItPnJlZnJlc2goKTsKK30KKworfTsKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL3BsdWdpbnMvZWZsL1BsdWdpblBhY2thZ2VFZmwuY3BwIGIvU291cmNlL1dlYkNv
cmUvcGx1Z2lucy9lZmwvUGx1Z2luUGFja2FnZUVmbC5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQK
aW5kZXggMDAwMDAwMC4uNmY4NjllMAotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L3BsdWdpbnMvZWZsL1BsdWdpblBhY2thZ2VFZmwuY3BwCkBAIC0wLDAgKzEsMTY4IEBACisvKgor
ICogQ29weXJpZ2h0IChDKSAyMDA2LCAyMDA3IEFwcGxlIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDggQ29sbGFib3JhIEx0ZC4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAwOCBOdWFudGkgTHRkLgorICogQ29weXJpZ2h0IChD
KSAyMDA4IElOZFQgLSBJbnN0aXR1dG8gTm9raWEgZGUgVGVjbm9sb2dpYQorICogQ29weXJpZ2h0
IChDKSAyMDA5LTIwMTAgUHJvRlVTSU9OIGVtYmVkZGVkIHN5c3RlbXMKKyAqIENvcHlyaWdodCAo
QykgMjAwOS0yMDExIFNhbXN1bmcgRWxlY3Ryb25pY3MKKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBh
bmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1v
ZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29u
ZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29k
ZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRp
c3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHly
aWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIg
bWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNP
RlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIENPTVBVVEVSLCBJTkMuIGBgQVMgSVMnJyBBTkQg
QU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElU
WSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVE
LiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgQ09NUFVURVIsIElOQy4gT1IKKyAqIENPTlRSSUJV
VE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVD
SUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBP
UiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVT
UyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBM
SUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQK
KyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdB
WSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9G
IFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmln
LmgiCisjaW5jbHVkZSAiUGx1Z2luUGFja2FnZS5oIgorCisjaW5jbHVkZSAiTUlNRVR5cGVSZWdp
c3RyeS5oIgorI2luY2x1ZGUgIk5vdEltcGxlbWVudGVkLmgiCisjaW5jbHVkZSAiUGx1Z2luRGF0
YWJhc2UuaCIKKyNpbmNsdWRlICJQbHVnaW5EZWJ1Zy5oIgorI2luY2x1ZGUgIm5wcnVudGltZV9p
bXBsLmgiCisKKyNpbmNsdWRlIDxFaW5hLmg+CisjaW5jbHVkZSA8ZGxmY24uaD4KKyNpbmNsdWRl
IDx3dGYvdGV4dC9DU3RyaW5nLmg+CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKwordHlwZWRlZiBj
aGFyKiAoKk5QUF9HZXRNSU1FRGVzY3JpcHRpb25Qcm9jUHRyKSgpOworCitib29sIFBsdWdpblBh
Y2thZ2U6OmZldGNoSW5mbygpCit7CisgICAgY29uc3QgY2hhciAqZXJybXNnOworCisgICAgaWYg
KCFsb2FkKCkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIE5QUF9HZXRWYWx1ZVByb2NQ
dHIgZ2V0VmFsdWUgPSAwOworICAgIE5QUF9HZXRNSU1FRGVzY3JpcHRpb25Qcm9jUHRyIGdldE1J
TUVEZXNjcmlwdGlvbiA9IDA7CisKKyAgICBnZXRWYWx1ZSA9IChOUFBfR2V0VmFsdWVQcm9jUHRy
KWRsc3ltKG1fbW9kdWxlLCAiTlBfR2V0VmFsdWUiKTsKKyAgICBpZiAoKGVycm1zZyA9IGRsZXJy
b3IoKSkpIHsKKyAgICAgICAgRUlOQV9MT0dfRVJSKCJDb3VsZCBub3QgZ2V0IHN5bWJvbCBOUF9H
ZXRWYWx1ZTogJXMiLCBlcnJtc2cpOworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorCisg
ICAgZ2V0TUlNRURlc2NyaXB0aW9uID0gKE5QUF9HZXRNSU1FRGVzY3JpcHRpb25Qcm9jUHRyKWRs
c3ltKG1fbW9kdWxlLCAiTlBfR2V0TUlNRURlc2NyaXB0aW9uIik7CisgICAgaWYgKChlcnJtc2cg
PSBkbGVycm9yKCkpKSB7CisgICAgICAgIEVJTkFfTE9HX0VSUigiQ291bGQgbm90IGdldCBzeW1i
b2wgTlBfR2V0TUlNRURlc2NyaXB0aW9uOiAlcyIsIGVycm1zZyk7CisgICAgICAgIHJldHVybiBm
YWxzZTsKKyAgICB9CisKKyAgICBjaGFyKiBidWZmZXIgPSAwOworICAgIE5QRXJyb3IgZXJyID0g
Z2V0VmFsdWUoMCwgTlBQVnBsdWdpbk5hbWVTdHJpbmcsICh2b2lkKikgJmJ1ZmZlcik7CisgICAg
aWYgKGVyciAhPSBOUEVSUl9OT19FUlJPUikKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIG1f
bmFtZSA9IGJ1ZmZlcjsKKworICAgIGJ1ZmZlciA9IDA7CisgICAgZXJyID0gZ2V0VmFsdWUoMCwg
TlBQVnBsdWdpbkRlc2NyaXB0aW9uU3RyaW5nLCAodm9pZCopICZidWZmZXIpOworICAgIGlmIChl
cnIgIT0gTlBFUlJfTk9fRVJST1IpCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICBtX2Rlc2Ny
aXB0aW9uID0gYnVmZmVyOworICAgIGRldGVybWluZU1vZHVsZVZlcnNpb25Gcm9tRGVzY3JpcHRp
b24oKTsKKworICAgIFN0cmluZyBkZXNjcmlwdGlvbiA9IGdldE1JTUVEZXNjcmlwdGlvbigpOwor
CisgICAgVmVjdG9yPFN0cmluZz4gdHlwZXM7CisgICAgZGVzY3JpcHRpb24uc3BsaXQoVUNoYXIo
JzsnKSwgZmFsc2UsIHR5cGVzKTsKKworICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgdHlwZXMu
c2l6ZSgpOyArK2kpIHsKKyAgICAgICAgVmVjdG9yPFN0cmluZz4gbWltZTsKKyAgICAgICAgdHlw
ZXNbaV0uc3BsaXQoVUNoYXIoJzonKSwgdHJ1ZSwgbWltZSk7CisKKyAgICAgICAgaWYgKG1pbWUu
c2l6ZSgpID4gMCkgeworICAgICAgICAgICAgVmVjdG9yPFN0cmluZz4gZXh0czsKKworICAgICAg
ICAgICAgaWYgKG1pbWUuc2l6ZSgpID4gMSkKKyAgICAgICAgICAgICAgICBtaW1lWzFdLnNwbGl0
KFVDaGFyKCcsJyksIGZhbHNlLCBleHRzKTsKKworICAgICAgICAgICAgZGV0ZXJtaW5lUXVpcmtz
KG1pbWVbMF0pOworICAgICAgICAgICAgbV9taW1lVG9FeHRlbnNpb25zLmFkZChtaW1lWzBdLCBl
eHRzKTsKKworICAgICAgICAgICAgaWYgKG1pbWUuc2l6ZSgpID4gMikKKyAgICAgICAgICAgICAg
ICBtX21pbWVUb0Rlc2NyaXB0aW9ucy5hZGQobWltZVswXSwgbWltZVsyXSk7CisgICAgICAgIH0K
KyAgICB9CisKKyAgICByZXR1cm4gdHJ1ZTsKK30KKwordWludDE2X3QgUGx1Z2luUGFja2FnZTo6
TlBWZXJzaW9uKCkgY29uc3QKK3sKKyAgICByZXR1cm4gTlBWRVJTX0hBU19QTFVHSU5fVEhSRUFE
X0FTWU5DX0NBTEw7Cit9CisKK2Jvb2wgUGx1Z2luUGFja2FnZTo6bG9hZCgpCit7CisgICAgY2hh
ciogZXJybXNnOworCisgICAgaWYgKG1faXNMb2FkZWQpIHsKKyAgICAgICAgbV9sb2FkQ291bnQr
KzsKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgfQorCisgICAgbV9tb2R1bGUgPSBkbG9wZW4o
bV9wYXRoLnV0ZjgoKS5kYXRhKCksIFJUTERfTEFaWSB8IFJUTERfTE9DQUwpOworICAgIGlmICgo
ZXJybXNnID0gZGxlcnJvcigpKSkgeworICAgICAgICBFSU5BX0xPR19XQVJOKCIlcyBub3QgbG9h
ZGVkOiAlcyIsIG1fcGF0aC51dGY4KCkuZGF0YSgpLCBlcnJtc2cpOworICAgICAgICByZXR1cm4g
ZmFsc2U7CisgICAgfQorCisgICAgbV9pc0xvYWRlZCA9IHRydWU7CisKKyAgICBOUF9Jbml0aWFs
aXplRnVuY1B0ciBpbml0aWFsaXplOworICAgIE5QRXJyb3IgZXJyOworCisgICAgaW5pdGlhbGl6
ZSA9IChOUF9Jbml0aWFsaXplRnVuY1B0cilkbHN5bShtX21vZHVsZSwgIk5QX0luaXRpYWxpemUi
KTsKKyAgICBpZiAoKGVycm1zZyA9IGRsZXJyb3IoKSkpIHsKKyAgICAgICAgRUlOQV9MT0dfRVJS
KCJDb3VsZCBub3QgZ2V0IHN5bWJvbCBOUF9Jbml0aWFsaXplOiAlcyIsIGVycm1zZyk7CisgICAg
ICAgIGdvdG8gYWJvcnQ7CisgICAgfQorCisgICAgbV9OUFBfU2h1dGRvd24gPSAoTlBQX1NodXRk
b3duUHJvY1B0cilkbHN5bShtX21vZHVsZSwgIk5QX1NodXRkb3duIik7CisgICAgaWYgKChlcnJt
c2cgPSBkbGVycm9yKCkpKSB7CisgICAgICAgIEVJTkFfTE9HX0VSUigiQ291bGQgbm90IGdldCBz
eW1ib2wgTlBfU2h1dGRvd246ICVzIiwgZXJybXNnKTsKKyAgICAgICAgZ290byBhYm9ydDsKKyAg
ICB9CisKKyAgICBtZW1zZXQoJm1fcGx1Z2luRnVuY3MsIDAsIHNpemVvZihtX3BsdWdpbkZ1bmNz
KSk7CisgICAgbV9wbHVnaW5GdW5jcy5zaXplID0gc2l6ZW9mKG1fcGx1Z2luRnVuY3MpOworCisg
ICAgaW5pdGlhbGl6ZUJyb3dzZXJGdW5jcygpOworCisjaWYgZGVmaW5lZChYUF9VTklYKQorICAg
IGVyciA9IGluaXRpYWxpemUoJm1fYnJvd3NlckZ1bmNzLCAmbV9wbHVnaW5GdW5jcyk7CisjZWxz
ZQorICAgIGVyciA9IGluaXRpYWxpemUoJm1fYnJvd3NlckZ1bmNzKTsKKyNlbmRpZgorICAgIGlm
IChlcnIgIT0gTlBFUlJfTk9fRVJST1IpCisgICAgICAgIGdvdG8gYWJvcnQ7CisKKyAgICBtX2xv
YWRDb3VudCsrOworICAgIHJldHVybiB0cnVlOworCithYm9ydDoKKyAgICBFSU5BX0xPR19EQkco
ImZhaWxlZCB0byBsb2FkIHBsdWdpbiwgdW5sb2FkIGl0IHdpdGhvdXQgc2h1dHRpbmcgaXQgZG93
bi4iKTsKKyAgICB1bmxvYWRXaXRob3V0U2h1dGRvd24oKTsKKyAgICByZXR1cm4gZmFsc2U7Cit9
CisKK30KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsdWdpbnMvZWZsL1BsdWdpblZpZXdF
ZmwuY3BwIGIvU291cmNlL1dlYkNvcmUvcGx1Z2lucy9lZmwvUGx1Z2luVmlld0VmbC5jcHAKbmV3
IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzY1ODY2OQotLS0gL2Rldi9udWxsCisr
KyBiL1NvdXJjZS9XZWJDb3JlL3BsdWdpbnMvZWZsL1BsdWdpblZpZXdFZmwuY3BwCkBAIC0wLDAg
KzEsNDI2IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA2LCAyMDA3IEFwcGxlIEluYy4gIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDggQ29sbGFib3JhIEx0ZC4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAwOCBJTmRUIC0gSW5zdGl0
dXRvIE5va2lhIGRlIFRlY25vbG9naWEKKyAqIENvcHlyaWdodCAoQykgMjAwOS0yMDEwIFByb0ZV
U0lPTiBlbWJlZGRlZCBzeXN0ZW1zCisgKiBDb3B5cmlnaHQgKEMpIDIwMDktMjAxMSBTYW1zdW5n
IEVsZWN0cm9uaWNzCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5k
IGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJt
aXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6
CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFi
b3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFy
eSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0
aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3
aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBC
WSBBUFBMRSBDT01QVVRFUiwgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJ
TVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAq
IElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEg
UEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxM
IEFQUExFIENPTVBVVEVSLCBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBB
TlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwg
T1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywK
KyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0Yg
VVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dF
VkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElO
IENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJ
R0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAq
IE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0Yg
U1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIlBsdWdp
blZpZXcuaCIKKworI2luY2x1ZGUgIkRvY3VtZW50LmgiCisjaW5jbHVkZSAiRG9jdW1lbnRMb2Fk
ZXIuaCIKKyNpbmNsdWRlICJFbGVtZW50LmgiCisjaW5jbHVkZSAiRnJhbWUuaCIKKyNpbmNsdWRl
ICJGcmFtZUxvYWRSZXF1ZXN0LmgiCisjaW5jbHVkZSAiRnJhbWVMb2FkZXIuaCIKKyNpbmNsdWRl
ICJGcmFtZVRyZWUuaCIKKyNpbmNsdWRlICJGcmFtZVZpZXcuaCIKKyNpbmNsdWRlICJHcmFwaGlj
c0NvbnRleHQuaCIKKyNpbmNsdWRlICJIVE1MTmFtZXMuaCIKKyNpbmNsdWRlICJIVE1MUGx1Z0lu
RWxlbWVudC5oIgorI2luY2x1ZGUgIkhvc3RXaW5kb3cuaCIKKyNpbmNsdWRlICJJbWFnZS5oIgor
I2luY2x1ZGUgIkludFJlY3QuaCIKKyNpbmNsdWRlICJKU0RPTUJpbmRpbmcuaCIKKyNpbmNsdWRl
ICJLZXlib2FyZEV2ZW50LmgiCisjaW5jbHVkZSAiTW91c2VFdmVudC5oIgorI2luY2x1ZGUgIk5v
dEltcGxlbWVudGVkLmgiCisjaW5jbHVkZSAiUGFnZS5oIgorI2luY2x1ZGUgIlBsYXRmb3JtTW91
c2VFdmVudC5oIgorI2luY2x1ZGUgIlBsYXRmb3JtV2hlZWxFdmVudC5oIgorI2luY2x1ZGUgIlBs
dWdpbkRlYnVnLmgiCisjaW5jbHVkZSAiUGx1Z2luUGFja2FnZS5oIgorI2luY2x1ZGUgIlJlbmRl
ckxheWVyLmgiCisjaW5jbHVkZSAiU2NyaXB0Q29udHJvbGxlci5oIgorI2luY2x1ZGUgIlNldHRp
bmdzLmgiCisjaW5jbHVkZSAibnBydW50aW1lX2ltcGwuaCIKKyNpbmNsdWRlICJydW50aW1lL0pT
TG9jay5oIgorI2luY2x1ZGUgInJ1bnRpbWUvSlNWYWx1ZS5oIgorI2luY2x1ZGUgInJ1bnRpbWVf
cm9vdC5oIgorCisjaW5jbHVkZSA8RWNvcmVfRXZhcy5oPgorI2luY2x1ZGUgPEVjb3JlX1guaD4K
KyNpbmNsdWRlIDxFdmFzLmg+CisKKyNpbmNsdWRlIDx3dGYvUmVmQ291bnRlZC5oPgorI2luY2x1
ZGUgPHd0Zi9SZWZQdHIuaD4KKwordXNpbmcgSlNDOjpFeGVjU3RhdGU7Cit1c2luZyBKU0M6Oklu
dGVycHJldGVyOwordXNpbmcgSlNDOjpKU0xvY2s7Cit1c2luZyBKU0M6OkpTT2JqZWN0OwordXNp
bmcgSlNDOjpVU3RyaW5nOworCit1c2luZyBuYW1lc3BhY2Ugc3RkOwordXNpbmcgbmFtZXNwYWNl
IFdURjsKK3VzaW5nIG5hbWVzcGFjZSBXZWJDb3JlOworCituYW1lc3BhY2UgV2ViQ29yZSB7CisK
K3VzaW5nIG5hbWVzcGFjZSBIVE1MTmFtZXM7CisjaWYgRU5BQkxFKE5FVFNDQVBFX1BMVUdJTl9B
UEkpCitib29sIFBsdWdpblZpZXc6OmRpc3BhdGNoTlBFdmVudChOUEV2ZW50JiBldmVudCkKK3sK
KyAgICBpZiAoIW1fcGx1Z2luLT5wbHVnaW5GdW5jcygpLT5ldmVudCkKKyAgICAgICAgcmV0dXJu
IGZhbHNlOworCisgICAgUGx1Z2luVmlldzo6c2V0Q3VycmVudFBsdWdpblZpZXcodGhpcyk7Cisg
ICAgSlNDOjpKU0xvY2s6OkRyb3BBbGxMb2NrcyBkcm9wQWxsTG9ja3MoZmFsc2UpOworICAgIHNl
dENhbGxpbmdQbHVnaW4odHJ1ZSk7CisKKyAgICBib29sIGFjY2VwdGVkID0gbV9wbHVnaW4tPnBs
dWdpbkZ1bmNzKCktPmV2ZW50KG1faW5zdGFuY2UsICZldmVudCk7CisKKyAgICBzZXRDYWxsaW5n
UGx1Z2luKGZhbHNlKTsKKyAgICBQbHVnaW5WaWV3OjpzZXRDdXJyZW50UGx1Z2luVmlldygwKTsK
KyAgICByZXR1cm4gYWNjZXB0ZWQ7Cit9CisjZW5kaWYKKwordm9pZCBQbHVnaW5WaWV3OjpoYWx0
KCkKK3sKKyAgICBub3RJbXBsZW1lbnRlZCgpOworfQorCisjaWYgZGVmaW5lZChYUF9VTklYKSAm
JiBFTkFCTEUoTkVUU0NBUEVfUExVR0lOX0FQSSkKK3ZvaWQgUGx1Z2luVmlldzo6aGFuZGxlRm9j
dXNJbkV2ZW50KCkKK3sKKyAgICBub3RJbXBsZW1lbnRlZCgpOworfQorCit2b2lkIFBsdWdpblZp
ZXc6OmhhbmRsZUZvY3VzT3V0RXZlbnQoKQoreworICAgIG5vdEltcGxlbWVudGVkKCk7Cit9Cisj
ZW5kaWYKKwordm9pZCBQbHVnaW5WaWV3OjpyZXN0YXJ0KCkKK3sKKyAgICBub3RJbXBsZW1lbnRl
ZCgpOworfQorCit2b2lkIFBsdWdpblZpZXc6OmhhbmRsZUtleWJvYXJkRXZlbnQoS2V5Ym9hcmRF
dmVudCopCit7CisgICAgbm90SW1wbGVtZW50ZWQoKTsKK30KKwordm9pZCBQbHVnaW5WaWV3Ojpo
YW5kbGVNb3VzZUV2ZW50KE1vdXNlRXZlbnQqIGV2ZW50KQoreworI2lmIEVOQUJMRShORVRTQ0FQ
RV9QTFVHSU5fQVBJKQorICAgIE5QRXZlbnQgeEV2ZW50OworCisgICAgSW50UmVjdCBwID0gc3Rh
dGljX2Nhc3Q8RnJhbWVWaWV3Kj4ocGFyZW50KCkpLT5jb250ZW50c1RvU2NyZWVuKEludFJlY3Qo
MCwgMCwgZXZlbnQtPm9mZnNldFgoKSwgZXZlbnQtPm9mZnNldFkoKSkpOworICAgIGlmIChldmVu
dC0+dHlwZSgpID09IGV2ZW50TmFtZXMoKS5tb3VzZW1vdmVFdmVudAorICAgICAgICAgICAgfHwg
ZXZlbnQtPnR5cGUoKSA9PSBldmVudE5hbWVzKCkubW91c2VvdXRFdmVudAorICAgICAgICAgICAg
fHwgZXZlbnQtPnR5cGUoKSA9PSBldmVudE5hbWVzKCkubW91c2VvdmVyRXZlbnQpIHsKKyAgICAg
ICAgeEV2ZW50LnR5cGUgPSBNb3Rpb25Ob3RpZnk7CisgICAgICAgIHhFdmVudC54bW90aW9uLngg
PSBwLndpZHRoKCk7CisgICAgICAgIHhFdmVudC54bW90aW9uLnkgPSBwLmhlaWdodCgpOworICAg
IH0gZWxzZSBpZiAoZXZlbnQtPnR5cGUoKSA9PSBldmVudE5hbWVzKCkubW91c2Vkb3duRXZlbnQp
IHsKKyAgICAgICAgeEV2ZW50LnR5cGUgPSBCdXR0b25QcmVzczsKKyAgICAgICAgeEV2ZW50Lnhi
dXR0b24ueCA9IHAud2lkdGgoKTsKKyAgICAgICAgeEV2ZW50LnhidXR0b24ueSA9IHAuaGVpZ2h0
KCk7CisgICAgICAgIHhFdmVudC54YnV0dG9uLmJ1dHRvbiA9IGV2ZW50LT5idXR0b24oKSArIDE7
IC8vIERPTSBNb3VzZUV2ZW50IGNvdW50cyBmcm9tIDAsIGFuZCBYQnV0dG9uRXZlbnQgZnJvbSAx
CisgICAgfSBlbHNlIGlmIChldmVudC0+dHlwZSgpID09IGV2ZW50TmFtZXMoKS5tb3VzZXVwRXZl
bnQpIHsKKyAgICAgICAgeEV2ZW50LnR5cGUgPSBCdXR0b25SZWxlYXNlOworICAgICAgICB4RXZl
bnQueGJ1dHRvbi54ID0gcC53aWR0aCgpOworICAgICAgICB4RXZlbnQueGJ1dHRvbi55ID0gcC5o
ZWlnaHQoKTsKKyAgICAgICAgeEV2ZW50LnhidXR0b24uYnV0dG9uID0gZXZlbnQtPmJ1dHRvbigp
ICsgMTsKKyAgICB9IGVsc2UKKyAgICAgICAgcmV0dXJuOworCisgICAgaWYgKGRpc3BhdGNoTlBF
dmVudCh4RXZlbnQpKQorICAgICAgICBldmVudC0+c2V0RGVmYXVsdEhhbmRsZWQoKTsKKyNlbHNl
CisgICAgbm90SW1wbGVtZW50ZWQoKTsKKyAgICByZXR1cm47CisjZW5kaWYKK30KKwordm9pZCBQ
bHVnaW5WaWV3Ojp1cGRhdGVQbHVnaW5XaWRnZXQoKQoreworICAgIGlmICghcGFyZW50KCkgfHwg
IW1faXNXaW5kb3dlZCkKKyAgICAgICAgcmV0dXJuOworCisgICAgQVNTRVJUKHBhcmVudCgpLT5p
c0ZyYW1lVmlldygpKTsKKyAgICBGcmFtZVZpZXcqIGZyYW1lVmlldyA9IHN0YXRpY19jYXN0PEZy
YW1lVmlldyo+KHBhcmVudCgpKTsKKworICAgIEludFJlY3Qgb2xkV2luZG93UmVjdCA9IG1fd2lu
ZG93UmVjdDsKKyAgICBJbnRSZWN0IG9sZENsaXBSZWN0ID0gbV9jbGlwUmVjdDsKKworICAgIG1f
d2luZG93UmVjdCA9IEludFJlY3QoZnJhbWVWaWV3LT5jb250ZW50c1RvU2NyZWVuKEludFJlY3Qo
ZnJhbWVSZWN0KCkubG9jYXRpb24oKSwgZnJhbWVSZWN0KCkuc2l6ZSgpKSkpOworCisgICAgbV9j
bGlwUmVjdCA9IHdpbmRvd0NsaXBSZWN0KCk7CisgICAgbV9jbGlwUmVjdC5tb3ZlKC1tX3dpbmRv
d1JlY3QueCgpLCAtbV93aW5kb3dSZWN0LnkoKSk7Cit9CisKK3ZvaWQgUGx1Z2luVmlldzo6c2V0
Rm9jdXMoYm9vbCkKK3sKKyAgICBtX2VsZW1lbnQtPmRvY3VtZW50KCktPnNldEZvY3VzZWROb2Rl
KG1fZWxlbWVudCk7CisKKyAgICBXaWRnZXQ6OnNldEZvY3VzKHRydWUpOworfQorCit2b2lkIFBs
dWdpblZpZXc6OnNob3coKQoreworICAgIHNldFNlbGZWaXNpYmxlKHRydWUpOworCisgICAgV2lk
Z2V0OjpzaG93KCk7Cit9CisKK3ZvaWQgUGx1Z2luVmlldzo6aGlkZSgpCit7CisgICAgc2V0U2Vs
ZlZpc2libGUoZmFsc2UpOworCisgICAgV2lkZ2V0OjpoaWRlKCk7Cit9CisKK3ZvaWQgUGx1Z2lu
Vmlldzo6cGFpbnQoR3JhcGhpY3NDb250ZXh0KiBjb250ZXh0LCBjb25zdCBJbnRSZWN0JiByZWN0
KQoreworICAgIEludFJlY3QgZnJSZWN0ID0gZnJhbWVSZWN0KCk7CisKKyAgICBpZiAoIW1faXNT
dGFydGVkKSB7CisgICAgICAgIHBhaW50TWlzc2luZ1BsdWdpbkljb24oY29udGV4dCwgcmVjdCk7
CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBpZiAoY29udGV4dC0+cGFpbnRpbmdEaXNh
YmxlZCgpKQorICAgICAgICByZXR1cm47CisKKyAgICBpZiAobV9pc1dpbmRvd2VkIHx8IGNvbnRl
eHQtPnBhaW50aW5nRGlzYWJsZWQoKSkKKyAgICAgICAgcmV0dXJuOworfQorCit2b2lkIFBsdWdp
blZpZXc6OnNldFBhcmVudChTY3JvbGxWaWV3KiBwYXJlbnQpCit7CisgICAgV2lkZ2V0OjpzZXRQ
YXJlbnQocGFyZW50KTsKKworICAgIGlmIChwYXJlbnQpCisgICAgICAgIGluaXQoKTsKKyAgICBl
bHNlIHsKKyAgICAgICAgaWYgKCFwbGF0Zm9ybVBsdWdpbldpZGdldCgpKQorICAgICAgICAgICAg
cmV0dXJuOworICAgIH0KK30KKwordm9pZCBQbHVnaW5WaWV3OjpzZXROUFdpbmRvd1JlY3QoY29u
c3QgSW50UmVjdCYgcmVjdCkKK3sKKyAgICBub3RJbXBsZW1lbnRlZCgpOworICAgIHJldHVybjsK
K30KKwordm9pZCBQbHVnaW5WaWV3OjpzZXROUFdpbmRvd0lmTmVlZGVkKCkKK3sKK30KKwordm9p
ZCBQbHVnaW5WaWV3OjpzZXRQYXJlbnRWaXNpYmxlKGJvb2wgdmlzaWJsZSkKK3sKKyAgICBpZiAo
aXNQYXJlbnRWaXNpYmxlKCkgPT0gdmlzaWJsZSkKKyAgICAgICAgcmV0dXJuOworCisgICAgV2lk
Z2V0OjpzZXRQYXJlbnRWaXNpYmxlKHZpc2libGUpOworfQorCisjaWYgRU5BQkxFKE5FVFNDQVBF
X1BMVUdJTl9BUEkpCitOUEVycm9yIFBsdWdpblZpZXc6OmhhbmRsZVBvc3RSZWFkRmlsZShWZWN0
b3I8Y2hhcj4mIGJ1ZmZlciwgdWludDMyX3QgbGVuLCBjb25zdCBjaGFyKiBidWYpCit7CisgICAg
U3RyaW5nIGZpbGVuYW1lKGJ1ZiwgbGVuKTsKKworICAgIGlmIChmaWxlbmFtZS5zdGFydHNXaXRo
KCJmaWxlOi8vLyIpKQorICAgICAgICBmaWxlbmFtZSA9IGZpbGVuYW1lLnN1YnN0cmluZyg4KTsK
KworICAgIGlmICghZmlsZUV4aXN0cyhmaWxlbmFtZSkpCisgICAgICAgIHJldHVybiBOUEVSUl9G
SUxFX05PVF9GT1VORDsKKworICAgIEZJTEUqIGZpbGVIYW5kbGUgPSBmb3BlbihmaWxlbmFtZS51
dGY4KCkuZGF0YSgpLCAiciIpOworCisgICAgaWYgKCFmaWxlSGFuZGxlKQorICAgICAgICByZXR1
cm4gTlBFUlJfRklMRV9OT1RfRk9VTkQ7CisKKyAgICBpbnQgYnl0ZXNSZWFkID0gZnJlYWQoYnVm
ZmVyLmRhdGEoKSwgMSwgMCwgZmlsZUhhbmRsZSk7CisKKyAgICBmY2xvc2UoZmlsZUhhbmRsZSk7
CisKKyAgICBpZiAoYnl0ZXNSZWFkIDw9IDApCisgICAgICAgIHJldHVybiBOUEVSUl9GSUxFX05P
VF9GT1VORDsKKworICAgIHJldHVybiBOUEVSUl9OT19FUlJPUjsKK30KKyNlbmRpZgorCisjaWYg
RU5BQkxFKE5FVFNDQVBFX1BMVUdJTl9BUEkpCitib29sIFBsdWdpblZpZXc6OnBsYXRmb3JtR2V0
VmFsdWVTdGF0aWMoTlBOVmFyaWFibGUgdmFyaWFibGUsIHZvaWQqIHZhbHVlLCBOUEVycm9yKiBy
ZXN1bHQpCit7CisgICAgc3dpdGNoICh2YXJpYWJsZSkgeworICAgIGNhc2UgTlBOVlRvb2xraXQ6
CisgICAgICAgICpzdGF0aWNfY2FzdDx1aW50MzJfdCo+KHZhbHVlKSA9IDA7CisgICAgICAgICpy
ZXN1bHQgPSBOUEVSUl9OT19FUlJPUjsKKyAgICAgICAgcmV0dXJuIHRydWU7CisKKyAgICBjYXNl
IE5QTlZTdXBwb3J0c1hFbWJlZEJvb2w6CisgICAgICAgICpzdGF0aWNfY2FzdDxOUEJvb2wqPih2
YWx1ZSkgPSBmYWxzZTsKKyAgICAgICAgKnJlc3VsdCA9IE5QRVJSX05PX0VSUk9SOworICAgICAg
ICByZXR1cm4gdHJ1ZTsKKworICAgIGNhc2UgTlBOVmphdmFzY3JpcHRFbmFibGVkQm9vbDoKKyAg
ICAgICAgKnN0YXRpY19jYXN0PE5QQm9vbCo+KHZhbHVlKSA9IHRydWU7CisgICAgICAgICpyZXN1
bHQgPSBOUEVSUl9OT19FUlJPUjsKKyAgICAgICAgcmV0dXJuIHRydWU7CisKKyAgICBjYXNlIE5Q
TlZTdXBwb3J0c1dpbmRvd2xlc3M6CisgICAgICAgICpzdGF0aWNfY2FzdDxOUEJvb2wqPih2YWx1
ZSkgPSBmYWxzZTsKKyAgICAgICAgKnJlc3VsdCA9IE5QRVJSX05PX0VSUk9SOworICAgICAgICBy
ZXR1cm4gdHJ1ZTsKKworICAgIGRlZmF1bHQ6CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9
Cit9CisKK2Jvb2wgUGx1Z2luVmlldzo6cGxhdGZvcm1HZXRWYWx1ZShOUE5WYXJpYWJsZSB2YXJp
YWJsZSwgdm9pZCogdmFsdWUsIE5QRXJyb3IqIHJlc3VsdCkKK3sKKyAgICBpZiAoIXZhbHVlIHx8
ICFyZXN1bHQpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIHN3aXRjaCAodmFyaWFibGUp
IHsKKyAgICBjYXNlIE5QTlZ4RGlzcGxheToKKyAgICAgICAgKih2b2lkICoqKXZhbHVlID0gKERp
c3BsYXkqKSBlY29yZV94X2Rpc3BsYXlfZ2V0KCk7CisgICAgICAgICpyZXN1bHQgPSBOUEVSUl9O
T19FUlJPUjsKKyAgICAgICAgcmV0dXJuIHRydWU7CisKKyAgICBjYXNlIE5QTlZ4dEFwcENvbnRl
eHQ6CisgICAgICAgICpyZXN1bHQgPSBOUEVSUl9HRU5FUklDX0VSUk9SOworICAgICAgICByZXR1
cm4gdHJ1ZTsKKworI2lmIEVOQUJMRShORVRTQ0FQRV9QTFVHSU5fQVBJKQorICAgIGNhc2UgTlBO
VldpbmRvd05QT2JqZWN0OiB7CisgICAgICAgIGlmIChtX2lzSmF2YVNjcmlwdFBhdXNlZCkgewor
ICAgICAgICAgICAgKnJlc3VsdCA9IE5QRVJSX0dFTkVSSUNfRVJST1I7CisgICAgICAgICAgICBy
ZXR1cm4gdHJ1ZTsKKyAgICAgICAgfQorCisgICAgICAgIE5QT2JqZWN0KiB3aW5kb3dTY3JpcHRP
YmplY3QgPSBtX3BhcmVudEZyYW1lLT5zY3JpcHQoKS0+d2luZG93U2NyaXB0TlBPYmplY3QoKTsK
KworICAgICAgICAvLyBSZXR1cm4gdmFsdWUgaXMgZXhwZWN0ZWQgdG8gYmUgcmV0YWluZWQsIGFz
IGRlc2NyaWJlZCBoZXJlOiA8aHR0cDovL3d3dy5tb3ppbGxhLm9yZy9wcm9qZWN0cy9wbHVnaW4v
bnBydW50aW1lLmh0bWw+CisgICAgICAgIGlmICh3aW5kb3dTY3JpcHRPYmplY3QpCisgICAgICAg
ICAgICBfTlBOX1JldGFpbk9iamVjdCh3aW5kb3dTY3JpcHRPYmplY3QpOworCisgICAgICAgIHZv
aWQqKiB2ID0gKHZvaWQqKil2YWx1ZTsKKyAgICAgICAgKnYgPSB3aW5kb3dTY3JpcHRPYmplY3Q7
CisKKyAgICAgICAgKnJlc3VsdCA9IE5QRVJSX05PX0VSUk9SOworICAgICAgICByZXR1cm4gdHJ1
ZTsKKyAgICB9CisKKyAgICBjYXNlIE5QTlZQbHVnaW5FbGVtZW50TlBPYmplY3Q6IHsKKyAgICAg
ICAgaWYgKG1faXNKYXZhU2NyaXB0UGF1c2VkKSB7CisgICAgICAgICAgICAqcmVzdWx0ID0gTlBF
UlJfR0VORVJJQ19FUlJPUjsKKyAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICB9CisK
KyAgICAgICAgTlBPYmplY3QqIHBsdWdpblNjcmlwdE9iamVjdCA9IDA7CisKKyAgICAgICAgaWYg
KG1fZWxlbWVudC0+aGFzVGFnTmFtZShhcHBsZXRUYWcpIHx8IG1fZWxlbWVudC0+aGFzVGFnTmFt
ZShlbWJlZFRhZykgfHwgbV9lbGVtZW50LT5oYXNUYWdOYW1lKG9iamVjdFRhZykpCisgICAgICAg
ICAgICBwbHVnaW5TY3JpcHRPYmplY3QgPSBzdGF0aWNfY2FzdDxIVE1MUGx1Z0luRWxlbWVudCo+
KG1fZWxlbWVudCktPmdldE5QT2JqZWN0KCk7CisKKyAgICAgICAgLy8gUmV0dXJuIHZhbHVlIGlz
IGV4cGVjdGVkIHRvIGJlIHJldGFpbmVkLCBhcyBkZXNjcmliZWQgaGVyZTogPGh0dHA6Ly93d3cu
bW96aWxsYS5vcmcvcHJvamVjdHMvcGx1Z2luL25wcnVudGltZS5odG1sPgorICAgICAgICBpZiAo
cGx1Z2luU2NyaXB0T2JqZWN0KQorICAgICAgICAgICAgX05QTl9SZXRhaW5PYmplY3QocGx1Z2lu
U2NyaXB0T2JqZWN0KTsKKworICAgICAgICB2b2lkKiogdiA9ICh2b2lkKiopdmFsdWU7CisgICAg
ICAgICp2ID0gcGx1Z2luU2NyaXB0T2JqZWN0OworCisgICAgICAgICpyZXN1bHQgPSBOUEVSUl9O
T19FUlJPUjsKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgfQorI2VuZGlmCisKKyAgICBjYXNl
IE5QTlZuZXRzY2FwZVdpbmRvdzogeworICAgICAgICB2b2lkKiB3ID0gcmVpbnRlcnByZXRfY2Fz
dDx2b2lkKj4odmFsdWUpOworICAgICAgICBFdmFzX09iamVjdCogd2lkZ2V0ID0gbV9wYXJlbnRG
cmFtZS0+dmlldygpLT5ob3N0V2luZG93KCktPnBsYXRmb3JtUGFnZUNsaWVudCgpOworICAgICAg
ICBFdmFzKiBldmFzID0gZXZhc19vYmplY3RfZXZhc19nZXQod2lkZ2V0KTsKKyAgICAgICAgRWNv
cmVfRXZhcyogZWUgPSBlY29yZV9ldmFzX2Vjb3JlX2V2YXNfZ2V0KGV2YXMpOworICAgICAgICAq
KChYSUQgKil3KSA9IChXaW5kb3cpIGVjb3JlX2V2YXNfd2luZG93X2dldChlZSk7CisgICAgICAg
ICpyZXN1bHQgPSBOUEVSUl9OT19FUlJPUjsKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgfQor
CisgICAgY2FzZSBOUE5WVG9vbGtpdDoKKyAgICAgICAgaWYgKG1fcGx1Z2luLT5xdWlya3MoKS5j
b250YWlucyhQbHVnaW5RdWlya1JlcXVpcmVzR3RrVG9vbEtpdCkpIHsKKyAgICAgICAgICAgICoo
KHVpbnQzMl90ICopdmFsdWUpID0gMjsKKyAgICAgICAgICAgICpyZXN1bHQgPSBOUEVSUl9OT19F
UlJPUjsKKyAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICB9CisgICAgICAgIHJldHVy
biBmYWxzZTsKKyAgICAgICAgLy8gZmFsbCB0aHJvdWdoCisgICAgZGVmYXVsdDoKKyAgICAgICAg
cmV0dXJuIGZhbHNlOworICAgIH0KK30KKyNlbmRpZgorCit2b2lkIFBsdWdpblZpZXc6OmludmFs
aWRhdGVSZWN0KGNvbnN0IEludFJlY3QmIHJlY3QpCit7CisgICAgaW52YWxpZGF0ZVdpbmRvd2xl
c3NQbHVnaW5SZWN0KHJlY3QpOworfQorCisjaWYgRU5BQkxFKE5FVFNDQVBFX1BMVUdJTl9BUEkp
Cit2b2lkIFBsdWdpblZpZXc6OmludmFsaWRhdGVSZWN0KE5QUmVjdCogcmVjdCkKK3sKKyAgICBp
ZiAoIXJlY3QpIHsKKyAgICAgICAgaW52YWxpZGF0ZSgpOworICAgICAgICByZXR1cm47CisgICAg
fQorCisgICAgSW50UmVjdCByKHJlY3QtPmxlZnQsIHJlY3QtPnRvcCwgcmVjdC0+cmlnaHQgLSBy
ZWN0LT5sZWZ0LCByZWN0LT5ib3R0b20gLSByZWN0LT50b3ApOworCisgICAgaW52YWxpZGF0ZVJl
Y3Qocik7Cit9CisKK3ZvaWQgUGx1Z2luVmlldzo6aW52YWxpZGF0ZVJlZ2lvbihOUFJlZ2lvbiBy
ZWdpb24pCit7CisgICAgbm90SW1wbGVtZW50ZWQoKTsKK30KKyNlbmRpZgorCit2b2lkIFBsdWdp
blZpZXc6OmZvcmNlUmVkcmF3KCkKK3sKKyAgICBub3RJbXBsZW1lbnRlZCgpOworfQorCitib29s
IFBsdWdpblZpZXc6OnBsYXRmb3JtU3RhcnQoKQoreworICAgIEFTU0VSVChtX2lzU3RhcnRlZCk7
CisgICAgQVNTRVJUKG1fc3RhdHVzID09IFBsdWdpblN0YXR1c0xvYWRlZFN1Y2Nlc3NmdWxseSk7
CisKKyAgICBub3RJbXBsZW1lbnRlZCgpOworICAgIHJldHVybiB0cnVlOworfQorCit2b2lkIFBs
dWdpblZpZXc6OnBsYXRmb3JtRGVzdHJveSgpCit7Cit9CisKK30gLy8gbmFtZXNwYWNlIFdlYkNv
cmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvZWZsL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJL
aXQvZWZsL0NoYW5nZUxvZwppbmRleCA2YWQyMjE3Li5kZTkyNmY4IDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViS2l0L2VmbC9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYktpdC9lZmwvQ2hhbmdlTG9n
CkBAIC0xLDMgKzEsMTMgQEAKKzIwMTEtMDQtMDggIE1hcml1c3ogR3J6ZWdvcmN6eWsgIDxtYXJp
dXN6LmdAc2Ftc3VuZy5jb20+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISku
CisKKyAgICAgICAgQnVnIDQ0NTA1IC0gW0VGTF0gTWlzc2luZyBwbHVnaW5zIHN1cHBvcnQgZm9y
IGVmbCBwb3J0CisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9p
ZD00NDUwNQorCisgICAgICAgICogZXdrL2V3a19mcmFtZS5jcHA6CisgICAgICAgIChld2tfZnJh
bWVfcGx1Z2luX2NyZWF0ZSk6CisKIDIwMTEtMDQtMDQgIE1PUklUQSBIYWppbWUgIDxtb3JyaXRh
QGdvb2dsZS5jb20+CiAKICAgICAgICAgUmV2aWV3ZWQgYnkgUnlvc3VrZSBOaXdhLgpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYktpdC9lZmwvZXdrL2V3a19mcmFtZS5jcHAgYi9Tb3VyY2UvV2ViS2l0
L2VmbC9ld2svZXdrX2ZyYW1lLmNwcAppbmRleCA0ZTUyYjU2Li44YmZmOGNkIDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViS2l0L2VmbC9ld2svZXdrX2ZyYW1lLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0
L2VmbC9ld2svZXdrX2ZyYW1lLmNwcApAQCAtMjAzOSw1ICsyMDM5LDI0IEBAIHZvaWQgZXdrX2Zy
YW1lX2ZvcmNlX2xheW91dChFdmFzX09iamVjdCogbykKIAogV1RGOjpQYXNzUmVmUHRyPFdlYkNv
cmU6OldpZGdldD4gZXdrX2ZyYW1lX3BsdWdpbl9jcmVhdGUoRXZhc19PYmplY3QqIG8sIGNvbnN0
IFdlYkNvcmU6OkludFNpemUmIHBsdWdpblNpemUsIFdlYkNvcmU6OkhUTUxQbHVnSW5FbGVtZW50
KiBlbGVtZW50LCBjb25zdCBXZWJDb3JlOjpLVVJMJiB1cmwsIGNvbnN0IFdURjo6VmVjdG9yPFdU
Rjo6U3RyaW5nPiYgcGFyYW1OYW1lcywgY29uc3QgV1RGOjpWZWN0b3I8V1RGOjpTdHJpbmc+JiBw
YXJhbVZhbHVlcywgY29uc3QgV1RGOjpTdHJpbmcmIG1pbWVUeXBlLCBib29sIGxvYWRNYW51YWxs
eSkKIHsKKyNpZiBFTkFCTEUoTkVUU0NBUEVfUExVR0lOX0FQSSkKKyAgICBEQkcoIm89JXAsIHNp
emU9JWR4JWQsIGVsZW1lbnQ9JXAsIHVybD0lcywgbWltZVR5cGU9JXMiLAorICAgICAgICBvLCBw
bHVnaW5TaXplLndpZHRoKCksIHBsdWdpblNpemUuaGVpZ2h0KCksIGVsZW1lbnQsCisgICAgICAg
IHVybC5wcmV0dHlVUkwoKS51dGY4KCkuZGF0YSgpLCBtaW1lVHlwZS51dGY4KCkuZGF0YSgpKTsK
KworICAgIEVXS19GUkFNRV9TRF9HRVRfT1JfUkVUVVJOKG8sIHNkLCAwKTsKKworICAgIC8vIFRP
RE86IGVtaXQgc2lnbmFsIGFuZCBhc2sgd2Via2l0IHVzZXJzIGlmIHNvbWV0aGluZyBlbHNlIHNo
b3VsZCBiZSBkb25lLgorICAgIC8vIGxpa2UgY3JlYXRpbmcgYW5vdGhlciB4IHdpbmRvdyAoc2Vl
IGd0aywgaXQgYWxsb3dzIHVzZXJzIHRvIGNyZWF0ZQorICAgIC8vIEd0a1BsdWdpbldpZGdldC4K
KworICAgIFdURjo6UmVmUHRyPFdlYkNvcmU6OlBsdWdpblZpZXc+IHBsdWdpblZpZXcgPSBXZWJD
b3JlOjpQbHVnaW5WaWV3OjpjcmVhdGUKKyAgICAgICAgKHNkLT5mcmFtZSwgcGx1Z2luU2l6ZSwg
ZWxlbWVudCwgdXJsLCBwYXJhbU5hbWVzLCBwYXJhbVZhbHVlcywKKyAgICAgICAgbWltZVR5cGUs
IGxvYWRNYW51YWxseSk7CisKKyAgICBpZiAocGx1Z2luVmlldy0+c3RhdHVzKCkgPT0gV2ViQ29y
ZTo6UGx1Z2luU3RhdHVzTG9hZGVkU3VjY2Vzc2Z1bGx5KQorICAgICAgICByZXR1cm4gcGx1Z2lu
VmlldzsKKyNlbHNlCiAgICAgcmV0dXJuIDA7CisjZW5kaWYgLy8gI2lmIEVOQUJMRShORVRTQ0FQ
RV9QTFVHSU5fQVBJKQogfQo=
</data>
<flag name="review"
          id="81379"
          type_id="1"
          status="-"
          setter="aroben"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>91654</attachid>
            <date>2011-04-29 02:16:45 -0700</date>
            <delta_ts>2011-06-10 04:40:49 -0700</delta_ts>
            <desc>EFL&apos;s plugin support</desc>
            <filename>eflplugins.diff</filename>
            <type>text/plain</type>
            <size>26558</size>
            <attacher name="Mariusz Grzegorczyk">mariusz.g</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cgYi9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvQ2hhbmdlTG9nCmluZGV4IGIzYzcyNzcuLjM4ZGQwZmUgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKKysrIGIvU291cmNlL0phdmFTY3JpcHRD
b3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDEyIEBACisyMDExLTA0LTI4ICBNYXJpdXN6IEdyemVn
b3JjenlrICA8bWFyaXVzei5nQHNhbXN1bmcuY29tPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5P
Qk9EWSAoT09QUyEpLgorCisgICAgICAgIEJ1ZyA0NDUwNSAtIFtFRkxdIE1pc3NpbmcgcGx1Z2lu
cyBzdXBwb3J0IGZvciBlZmwgcG9ydAorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9z
aG93X2J1Zy5jZ2k/aWQ9NDQ1MDUKKworICAgICAgICAqIHd0Zi9QbGF0Zm9ybS5oOgorCiAyMDEx
LTAzLTEzICBHZW9mZnJleSBHYXJlbiAgPGdnYXJlbkBhcHBsZS5jb20+CiAKICAgICAgICAgTm90
IHJldmlld2VkLgpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3d0Zi9QbGF0Zm9y
bS5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3d0Zi9QbGF0Zm9ybS5oCmluZGV4IDFlZGI1NDYu
LjJkMjVlOTkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93dGYvUGxhdGZvcm0u
aAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd3RmL1BsYXRmb3JtLmgKQEAgLTExNDQsNyAr
MTE0NCw3IEBACiAjZGVmaW5lIFdBUk5fVU5VU0VEX1JFVFVSTgogI2VuZGlmCiAKLSNpZiAhRU5B
QkxFKE5FVFNDQVBFX1BMVUdJTl9BUEkpIHx8IChFTkFCTEUoTkVUU0NBUEVfUExVR0lOX0FQSSkg
JiYgKChPUyhVTklYKSAmJiAoUExBVEZPUk0oUVQpIHx8IFBMQVRGT1JNKFdYKSkpIHx8IFBMQVRG
T1JNKEdUSykpKQorI2lmICFFTkFCTEUoTkVUU0NBUEVfUExVR0lOX0FQSSkgfHwgKEVOQUJMRShO
RVRTQ0FQRV9QTFVHSU5fQVBJKSAmJiAoKE9TKFVOSVgpICYmIChQTEFURk9STShRVCkgfHwgUExB
VEZPUk0oV1gpKSkgfHwgUExBVEZPUk0oR1RLKSB8fCBQTEFURk9STShFRkwpKSkKICNkZWZpbmUg
RU5BQkxFX1BMVUdJTl9QQUNLQUdFX1NJTVBMRV9IQVNIIDEKICNlbmRpZgogCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9DTWFrZUxpc3RzRWZsLnR4dCBiL1NvdXJjZS9XZWJDb3JlL0NNYWtl
TGlzdHNFZmwudHh0CmluZGV4IDdiZjJmYjAuLmY2Yjc1NjkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL0NNYWtlTGlzdHNFZmwudHh0CisrKyBiL1NvdXJjZS9XZWJDb3JlL0NNYWtlTGlzdHNF
ZmwudHh0CkBAIC0xMSw2ICsxMSw3IEBAIExJU1QoQVBQRU5EIFdlYkNvcmVfSU5DTFVERV9ESVJF
Q1RPUklFUwogICAiJHtXRUJDT1JFX0RJUn0vcGxhdGZvcm0vZ3JhcGhpY3MvZWZsIgogICAiJHtX
RUJDT1JFX0RJUn0vcGFnZS9lZmwiCiAgICIke1dFQkNPUkVfRElSfS9hY2Nlc3NpYmlsaXR5L2Vm
bCIKKyAgIiR7V0VCQ09SRV9ESVJ9L3BsdWdpbnMvZWZsIgogICAiJHtXRUJLSVRfRElSfS9lZmwv
V2ViQ29yZVN1cHBvcnQiCiAgICIke1dFQktJVF9ESVJ9L2VmbC9ld2siCiAgICIke0RFUklWRURf
U09VUkNFU19ESVJ9IgpAQCAtNzIsOSArNzMsMjkgQEAgTElTVChBUFBFTkQgV2ViQ29yZV9TT1VS
Q0VTCiAgIHBsYXRmb3JtL2ltYWdlLWRlY29kZXJzL3dlYnAvV0VCUEltYWdlRGVjb2Rlci5jcHAK
ICAgcGxhdGZvcm0vcG9zaXgvRmlsZVN5c3RlbVBPU0lYLmNwcAogICBwbGF0Zm9ybS90ZXh0L2Vm
bC9UZXh0QnJlYWtJdGVyYXRvckludGVybmFsSUNVRWZsLmNwcAotICBwbHVnaW5zL1BsdWdpbkRh
dGFOb25lLmNwcAogKQogCisKK0lGIChFTkFCTEVfTkVUU0NBUEVfUExVR0lOX0FQSSkKKyAgICBM
SVNUKEFQUEVORCBXZWJDb3JlX1NPVVJDRVMKKyAgICBwbHVnaW5zL1BsdWdpbkRhdGFiYXNlLmNw
cAorICAgIHBsdWdpbnMvUGx1Z2luRGVidWcuY3BwCisgICAgcGx1Z2lucy9QbHVnaW5QYWNrYWdl
LmNwcAorICAgIHBsdWdpbnMvUGx1Z2luU3RyZWFtLmNwcAorICAgIHBsdWdpbnMvUGx1Z2luVmll
dy5jcHAKKyAgICBwbHVnaW5zL2VmbC9QbHVnaW5EYXRhRWZsLmNwcAorICAgIHBsdWdpbnMvZWZs
L1BsdWdpblBhY2thZ2VFZmwuY3BwCisgICAgcGx1Z2lucy9lZmwvUGx1Z2luVmlld0VmbC5jcHAK
KyAgICApCitFTFNFICgpCisgICAgTElTVChBUFBFTkQgV2ViQ29yZV9TT1VSQ0VTCisgICAgcGx1
Z2lucy9QbHVnaW5EYXRhTm9uZS5jcHAKKyAgICBwbHVnaW5zL1BsdWdpblBhY2thZ2VOb25lLmNw
cAorICAgIHBsdWdpbnMvUGx1Z2luVmlld05vbmUuY3BwCisgICAgKQorRU5ESUYgKCkKKworCiBJ
RiAoV1RGX1BMQVRGT1JNX0NBSVJPKQogICBMSVNUKEFQUEVORCBXZWJDb3JlX0lOQ0xVREVfRElS
RUNUT1JJRVMKICAgICAiJHtXRUJDT1JFX0RJUn0vcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8iCkBA
IC0xMzcsNiArMTU4LDcgQEAgSUYgKFdURl9VU0VfU09VUCkKICAgTElTVChBUFBFTkQgV2ViQ29y
ZV9TT1VSQ0VTCiAgICAgcGxhdGZvcm0vbmV0d29yay9zb3VwL0Nvb2tpZUphclNvdXAuY3BwCiAg
ICAgcGxhdGZvcm0vbmV0d29yay9zb3VwL0dPd25QdHJTb3VwLmNwcAorICAgIHBsYXRmb3JtL25l
dHdvcmsvc291cC9Qcm94eVNlcnZlclNvdXAuY3BwCiAgICAgcGxhdGZvcm0vbmV0d29yay9zb3Vw
L1Jlc291cmNlSGFuZGxlU291cC5jcHAKICAgICBwbGF0Zm9ybS9uZXR3b3JrL3NvdXAvUmVzb3Vy
Y2VSZXF1ZXN0U291cC5jcHAKICAgICBwbGF0Zm9ybS9uZXR3b3JrL3NvdXAvUmVzb3VyY2VSZXNw
b25zZVNvdXAuY3BwCkBAIC0xNTMsNiArMTc1LDcgQEAgSUYgKFdURl9VU0VfQ1VSTCkKICAgICBw
bGF0Zm9ybS9uZXR3b3JrL2N1cmwvQ29va2llSmFyQ3VybC5jcHAKICAgICBwbGF0Zm9ybS9uZXR3
b3JrL2N1cmwvRE5TQ3VybC5jcHAKICAgICBwbGF0Zm9ybS9uZXR3b3JrL2N1cmwvRm9ybURhdGFT
dHJlYW1DdXJsLmNwcAorICAgIHBsYXRmb3JtL25ldHdvcmsvY3VybC9Qcm94eVNlcnZlckN1cmwu
Y3BwCiAgICAgcGxhdGZvcm0vbmV0d29yay9jdXJsL1Jlc291cmNlSGFuZGxlQ3VybC5jcHAKICAg
ICBwbGF0Zm9ybS9uZXR3b3JrL2N1cmwvUmVzb3VyY2VIYW5kbGVNYW5hZ2VyLmNwcAogICAgIHBs
YXRmb3JtL25ldHdvcmsvY3VybC9Tb2NrZXRTdHJlYW1IYW5kbGVDdXJsLmNwcApkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nIGIvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCmlu
ZGV4IGIzY2I3MjMuLmEwN2YxNTAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxv
ZworKysgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKQEAgLTEsMyArMSw0NyBAQAorMjAxMS0w
NC0yOCAgTWFyaXVzeiBHcnplZ29yY3p5ayAgPG1hcml1c3ouZ0BzYW1zdW5nLmNvbT4KKworICAg
ICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBCdWcgNDQ1MDUgLSBb
RUZMXSBNaXNzaW5nIHBsdWdpbnMgc3VwcG9ydCBmb3IgZWZsIHBvcnQKKyAgICAgICAgaHR0cHM6
Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTQ0NTA1CisKKyAgICAgICAgVGVtcGxh
dGUgdmVyc2lvbiwgc28gbm8gbmV3IHRlc3RzIGFyZSBuZWVkZWQuCisKKyAgICAgICAgKiBDTWFr
ZUxpc3RzRWZsLnR4dDoKKyAgICAgICAgKiBwbHVnaW5zL1BsdWdpblZpZXcuaDoKKyAgICAgICAg
KiBwbHVnaW5zL2VmbC9QbHVnaW5EYXRhRWZsLmNwcDogQWRkZWQuCisgICAgICAgIChXZWJDb3Jl
OjpQbHVnaW5EYXRhOjppbml0UGx1Z2lucyk6CisgICAgICAgIChXZWJDb3JlOjpQbHVnaW5EYXRh
OjpyZWZyZXNoKToKKyAgICAgICAgKiBwbHVnaW5zL2VmbC9QbHVnaW5QYWNrYWdlRWZsLmNwcDog
QWRkZWQuCisgICAgICAgIChXZWJDb3JlOjpQbHVnaW5QYWNrYWdlOjpmZXRjaEluZm8pOgorICAg
ICAgICAoV2ViQ29yZTo6UGx1Z2luUGFja2FnZTo6TlBWZXJzaW9uKToKKyAgICAgICAgKFdlYkNv
cmU6OlBsdWdpblBhY2thZ2U6OmxvYWQpOgorICAgICAgICAqIHBsdWdpbnMvZWZsL1BsdWdpblZp
ZXdFZmwuY3BwOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6OlBsdWdpblZpZXc6OmRpc3BhdGNo
TlBFdmVudCk6CisgICAgICAgIChXZWJDb3JlOjpQbHVnaW5WaWV3OjpoYWx0KToKKyAgICAgICAg
KFdlYkNvcmU6OlBsdWdpblZpZXc6OmhhbmRsZUZvY3VzSW5FdmVudCk6CisgICAgICAgIChXZWJD
b3JlOjpQbHVnaW5WaWV3OjpoYW5kbGVGb2N1c091dEV2ZW50KToKKyAgICAgICAgKFdlYkNvcmU6
OlBsdWdpblZpZXc6OnJlc3RhcnQpOgorICAgICAgICAoV2ViQ29yZTo6UGx1Z2luVmlldzo6aGFu
ZGxlS2V5Ym9hcmRFdmVudCk6CisgICAgICAgIChXZWJDb3JlOjpQbHVnaW5WaWV3OjpoYW5kbGVN
b3VzZUV2ZW50KToKKyAgICAgICAgKFdlYkNvcmU6OlBsdWdpblZpZXc6OnVwZGF0ZVBsdWdpbldp
ZGdldCk6CisgICAgICAgIChXZWJDb3JlOjpQbHVnaW5WaWV3OjpzZXRGb2N1cyk6CisgICAgICAg
IChXZWJDb3JlOjpQbHVnaW5WaWV3OjpzaG93KToKKyAgICAgICAgKFdlYkNvcmU6OlBsdWdpblZp
ZXc6OmhpZGUpOgorICAgICAgICAoV2ViQ29yZTo6UGx1Z2luVmlldzo6cGFpbnQpOgorICAgICAg
ICAoV2ViQ29yZTo6UGx1Z2luVmlldzo6c2V0UGFyZW50KToKKyAgICAgICAgKFdlYkNvcmU6OlBs
dWdpblZpZXc6OnNldE5QV2luZG93UmVjdCk6CisgICAgICAgIChXZWJDb3JlOjpQbHVnaW5WaWV3
OjpzZXROUFdpbmRvd0lmTmVlZGVkKToKKyAgICAgICAgKFdlYkNvcmU6OlBsdWdpblZpZXc6OnNl
dFBhcmVudFZpc2libGUpOgorICAgICAgICAoV2ViQ29yZTo6UGx1Z2luVmlldzo6aGFuZGxlUG9z
dFJlYWRGaWxlKToKKyAgICAgICAgKFdlYkNvcmU6OlBsdWdpblZpZXc6OnBsYXRmb3JtR2V0VmFs
dWVTdGF0aWMpOgorICAgICAgICAoV2ViQ29yZTo6UGx1Z2luVmlldzo6cGxhdGZvcm1HZXRWYWx1
ZSk6CisgICAgICAgIChXZWJDb3JlOjpQbHVnaW5WaWV3OjppbnZhbGlkYXRlUmVjdCk6CisgICAg
ICAgIChXZWJDb3JlOjpQbHVnaW5WaWV3OjppbnZhbGlkYXRlUmVnaW9uKToKKyAgICAgICAgKFdl
YkNvcmU6OlBsdWdpblZpZXc6OmZvcmNlUmVkcmF3KToKKyAgICAgICAgKFdlYkNvcmU6OlBsdWdp
blZpZXc6OnBsYXRmb3JtU3RhcnQpOgorICAgICAgICAoV2ViQ29yZTo6UGx1Z2luVmlldzo6cGxh
dGZvcm1EZXN0cm95KToKKwogMjAxMS0wMy0xMyAgU2FtIFdlaW5pZyAgPHNhbUB3ZWJraXQub3Jn
PgogCiAgICAgICAgIEZpeCB3aW5kb3dzIGJ1aWxkLgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvcGx1Z2lucy9QbHVnaW5WaWV3LmggYi9Tb3VyY2UvV2ViQ29yZS9wbHVnaW5zL1BsdWdpblZp
ZXcuaAppbmRleCA4OTY1MDhkLi44OWFhODA1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9w
bHVnaW5zL1BsdWdpblZpZXcuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbHVnaW5zL1BsdWdpblZp
ZXcuaApAQCAtMzc1LDcgKzM3NSw3IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKICAgICAgICAgYm9v
bCBtX2hhdmVVcGRhdGVkUGx1Z2luV2lkZ2V0OwogI2VuZGlmCiAKLSNpZiAoKFBMQVRGT1JNKFFU
KSB8fCBQTEFURk9STShXWCkpICYmIE9TKFdJTkRPV1MpKSB8fCBkZWZpbmVkKFhQX01BQ09TWCkK
KyNpZiAoKFBMQVRGT1JNKFFUKSB8fCBQTEFURk9STShXWCkpICYmIE9TKFdJTkRPV1MpKSB8fCBk
ZWZpbmVkKFhQX01BQ09TWCkgfHwgUExBVEZPUk0oRUZMKQogICAgICAgICAvLyBPbiBNYWMgT1NY
IGFuZCBRdC9XaW5kb3dzIHRoZSBwbHVnaW4gZG9lcyBub3QgaGF2ZSBpdHMgb3duIG5hdGl2ZSB3
aWRnZXQsCiAgICAgICAgIC8vIGJ1dCBpcyB1c2luZyB0aGUgY29udGFpbmluZyB3aW5kb3cgYXMg
aXRzIHJlZmVyZW5jZSBmb3IgcG9zaXRpb25pbmcvcGFpbnRpbmcuCiAgICAgICAgIFBsYXRmb3Jt
UGx1Z2luV2lkZ2V0IG1fd2luZG93OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGx1Z2lu
cy9lZmwvUGx1Z2luRGF0YUVmbC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbHVnaW5zL2VmbC9QbHVn
aW5EYXRhRWZsLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jMjFkNTFi
Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvcGx1Z2lucy9lZmwvUGx1Z2luRGF0
YUVmbC5jcHAKQEAgLTAsMCArMSw2NiBAQAorLyoKKyAgICBDb3B5cmlnaHQgKEMpIDIwMDYsIDIw
MDcgQXBwbGUgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAgICBDb3B5cmlnaHQgKEMpIDIw
MDggVHJvbGx0ZWNoIEFTQQorICAgIENvcHlyaWdodCAoQykgMjAwOCBDb2xsYWJvcmEgTHRkLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgorICAgIENvcHlyaWdodCAoQykgMjAwOCBJTmRUIC0gSW5zdGl0
dXRvIE5va2lhIGRlIFRlY25vbG9naWEKKyAgICBDb3B5cmlnaHQgKEMpIDIwMDktMjAxMCBQcm9G
VVNJT04gZW1iZWRkZWQgc3lzdGVtcworICAgIENvcHlyaWdodCAoQykgMjAwOS0yMDExIFNhbXN1
bmcgRWxlY3Ryb25pY3MKKworICAgIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3Ug
Y2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAgICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1z
IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworICAgIExpY2Vuc2UgYXMgcHVibGlz
aGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICAgIHZlcnNpb24g
MiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4K
KworICAgIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdp
bGwgYmUgdXNlZnVsLAorICAgIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVu
IHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1Mg
Rk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAgICBMaWJyYXJ5IEdlbmVy
YWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKworICAgIFlvdSBzaG91bGQgaGF2
ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vu
c2UKKyAgICBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElC
LiAgSWYgbm90LCB3cml0ZSB0bworICAgIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIElu
Yy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCisgICAgQm9zdG9uLCBNQSAwMjEx
MC0xMzAxLCBVU0EuCisqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiUGx1Z2lu
RGF0YS5oIgorCisjaW5jbHVkZSAiUGx1Z2luRGF0YWJhc2UuaCIKKyNpbmNsdWRlICJQbHVnaW5Q
YWNrYWdlLmgiCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKwordm9pZCBQbHVnaW5EYXRhOjppbml0
UGx1Z2lucyhjb25zdCBQYWdlKikKK3sKKyAgICBjb25zdCBWZWN0b3I8UGx1Z2luUGFja2FnZSo+
JiBwbHVnaW5zID0gUGx1Z2luRGF0YWJhc2U6Omluc3RhbGxlZFBsdWdpbnMoKS0+cGx1Z2lucygp
OworCisgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBwbHVnaW5zLnNpemUoKTsgKytpKSB7Cisg
ICAgICAgIFBsdWdpblBhY2thZ2UqIHBhY2thZ2UgPSBwbHVnaW5zW2ldOworICAgICAgICBQbHVn
aW5JbmZvIGluZm87CisKKyAgICAgICAgaW5mby5uYW1lID0gcGFja2FnZS0+bmFtZSgpOworICAg
ICAgICBpbmZvLmZpbGUgPSBwYWNrYWdlLT5maWxlTmFtZSgpOworICAgICAgICBpbmZvLmRlc2Mg
PSBwYWNrYWdlLT5kZXNjcmlwdGlvbigpOworCisgICAgICAgIGNvbnN0IE1JTUVUb0Rlc2NyaXB0
aW9uc01hcCYgbWltZVRvRGVzY3JpcHRpb25zID0gcGFja2FnZS0+bWltZVRvRGVzY3JpcHRpb25z
KCk7CisgICAgICAgIE1JTUVUb0Rlc2NyaXB0aW9uc01hcDo6Y29uc3RfaXRlcmF0b3IgZW5kID0g
bWltZVRvRGVzY3JpcHRpb25zLmVuZCgpOworICAgICAgICBmb3IgKE1JTUVUb0Rlc2NyaXB0aW9u
c01hcDo6Y29uc3RfaXRlcmF0b3IgaXQgPSBtaW1lVG9EZXNjcmlwdGlvbnMuYmVnaW4oKTsgaXQg
IT0gZW5kOyArK2l0KSB7CisgICAgICAgICAgICBNaW1lQ2xhc3NJbmZvIG1pbWU7CisKKyAgICAg
ICAgICAgIG1pbWUudHlwZSA9IGl0LT5maXJzdDsKKyAgICAgICAgICAgIG1pbWUuZGVzYyA9IGl0
LT5zZWNvbmQ7CisgICAgICAgICAgICBtaW1lLmV4dGVuc2lvbnMgPSBwYWNrYWdlLT5taW1lVG9F
eHRlbnNpb25zKCkuZ2V0KG1pbWUudHlwZSk7CisKKyAgICAgICAgICAgIGluZm8ubWltZXMuYXBw
ZW5kKG1pbWUpOworICAgICAgICB9CisKKyAgICAgICAgbV9wbHVnaW5zLmFwcGVuZChpbmZvKTsK
KyAgICB9Cit9CisKK3ZvaWQgUGx1Z2luRGF0YTo6cmVmcmVzaCgpCit7CisgICAgUGx1Z2luRGF0
YWJhc2U6Omluc3RhbGxlZFBsdWdpbnMoKS0+cmVmcmVzaCgpOworfQorCit9OwpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvcGx1Z2lucy9lZmwvUGx1Z2luUGFja2FnZUVmbC5jcHAgYi9Tb3Vy
Y2UvV2ViQ29yZS9wbHVnaW5zL2VmbC9QbHVnaW5QYWNrYWdlRWZsLmNwcApuZXcgZmlsZSBtb2Rl
IDEwMDY0NAppbmRleCAwMDAwMDAwLi4yMThhZWE2Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNl
L1dlYkNvcmUvcGx1Z2lucy9lZmwvUGx1Z2luUGFja2FnZUVmbC5jcHAKQEAgLTAsMCArMSwxNjgg
QEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDYsIDIwMDcgQXBwbGUgSW5jLiAgQWxsIHJpZ2h0
cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAwOCBDb2xsYWJvcmEgTHRkLiBBbGwgcmln
aHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDA4IE51YW50aSBMdGQuCisgKiBDb3B5
cmlnaHQgKEMpIDIwMDggSU5kVCAtIEluc3RpdHV0byBOb2tpYSBkZSBUZWNub2xvZ2lhCisgKiBD
b3B5cmlnaHQgKEMpIDIwMDktMjAxMCBQcm9GVVNJT04gZW1iZWRkZWQgc3lzdGVtcworICogQ29w
eXJpZ2h0IChDKSAyMDA5LTIwMTEgU2Ftc3VuZyBFbGVjdHJvbmljcworICoKKyAqIFJlZGlzdHJp
YnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91
dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxv
d2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNv
dXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAq
IDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJv
dmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9v
ciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAq
IFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQ09NUFVURVIsIElOQy4gYGBBUyBJ
UycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hB
TlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJ
U0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBDT01QVVRFUiwgSU5DLiBPUgorICog
Q09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5U
QUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRF
IEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9S
IEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkK
KyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwg
T1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJ
TiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFE
VklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRl
ICJjb25maWcuaCIKKyNpbmNsdWRlICJQbHVnaW5QYWNrYWdlLmgiCisKKyNpbmNsdWRlICJNSU1F
VHlwZVJlZ2lzdHJ5LmgiCisjaW5jbHVkZSAiTm90SW1wbGVtZW50ZWQuaCIKKyNpbmNsdWRlICJQ
bHVnaW5EYXRhYmFzZS5oIgorI2luY2x1ZGUgIlBsdWdpbkRlYnVnLmgiCisjaW5jbHVkZSAibnBy
dW50aW1lX2ltcGwuaCIKKworI2luY2x1ZGUgPEVpbmEuaD4KKyNpbmNsdWRlIDxkbGZjbi5oPgor
I2luY2x1ZGUgPHd0Zi90ZXh0L0NTdHJpbmcuaD4KKworbmFtZXNwYWNlIFdlYkNvcmUgeworCit0
eXBlZGVmIGNoYXIqICgqTlBQX0dldE1JTUVEZXNjcmlwdGlvblByb2NQdHIpKCk7CisKK2Jvb2wg
UGx1Z2luUGFja2FnZTo6ZmV0Y2hJbmZvKCkKK3sKKyAgICBjb25zdCBjaGFyICplcnJtc2c7CisK
KyAgICBpZiAoIWxvYWQoKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgTlBQX0dldFZh
bHVlUHJvY1B0ciBnZXRWYWx1ZSA9IDA7CisgICAgTlBQX0dldE1JTUVEZXNjcmlwdGlvblByb2NQ
dHIgZ2V0TUlNRURlc2NyaXB0aW9uID0gMDsKKworICAgIGdldFZhbHVlID0gcmVpbnRlcnByZXRf
Y2FzdDxOUFBfR2V0VmFsdWVQcm9jUHRyPihkbHN5bShtX21vZHVsZSwgIk5QX0dldFZhbHVlIikp
OworICAgIGlmICgoZXJybXNnID0gZGxlcnJvcigpKSkgeworICAgICAgICBFSU5BX0xPR19FUlIo
IkNvdWxkIG5vdCBnZXQgc3ltYm9sIE5QX0dldFZhbHVlOiAlcyIsIGVycm1zZyk7CisgICAgICAg
IHJldHVybiBmYWxzZTsKKyAgICB9CisKKyAgICBnZXRNSU1FRGVzY3JpcHRpb24gPSByZWludGVy
cHJldF9jYXN0PE5QUF9HZXRNSU1FRGVzY3JpcHRpb25Qcm9jUHRyPihkbHN5bShtX21vZHVsZSwg
Ik5QX0dldE1JTUVEZXNjcmlwdGlvbiIpKTsKKyAgICBpZiAoKGVycm1zZyA9IGRsZXJyb3IoKSkp
IHsKKyAgICAgICAgRUlOQV9MT0dfRVJSKCJDb3VsZCBub3QgZ2V0IHN5bWJvbCBOUF9HZXRNSU1F
RGVzY3JpcHRpb246ICVzIiwgZXJybXNnKTsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0K
KworICAgIGNoYXIqIGJ1ZmZlciA9IDA7CisgICAgTlBFcnJvciBlcnIgPSBnZXRWYWx1ZSgwLCBO
UFBWcGx1Z2luTmFtZVN0cmluZywgc3RhdGljX2Nhc3Q8dm9pZCo+KCZidWZmZXIpKTsKKyAgICBp
ZiAoZXJyICE9IE5QRVJSX05PX0VSUk9SKQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgbV9u
YW1lID0gYnVmZmVyOworCisgICAgYnVmZmVyID0gMDsKKyAgICBlcnIgPSBnZXRWYWx1ZSgwLCBO
UFBWcGx1Z2luRGVzY3JpcHRpb25TdHJpbmcsIHN0YXRpY19jYXN0PHZvaWQqPigmYnVmZmVyKSk7
CisgICAgaWYgKGVyciAhPSBOUEVSUl9OT19FUlJPUikKKyAgICAgICAgcmV0dXJuIGZhbHNlOwor
ICAgIG1fZGVzY3JpcHRpb24gPSBidWZmZXI7CisgICAgZGV0ZXJtaW5lTW9kdWxlVmVyc2lvbkZy
b21EZXNjcmlwdGlvbigpOworCisgICAgU3RyaW5nIGRlc2NyaXB0aW9uID0gZ2V0TUlNRURlc2Ny
aXB0aW9uKCk7CisKKyAgICBWZWN0b3I8U3RyaW5nPiB0eXBlczsKKyAgICBkZXNjcmlwdGlvbi5z
cGxpdChVQ2hhcignOycpLCBmYWxzZSwgdHlwZXMpOworCisgICAgZm9yIChzaXplX3QgaSA9IDA7
IGkgPCB0eXBlcy5zaXplKCk7ICsraSkgeworICAgICAgICBWZWN0b3I8U3RyaW5nPiBtaW1lOwor
ICAgICAgICB0eXBlc1tpXS5zcGxpdChVQ2hhcignOicpLCB0cnVlLCBtaW1lKTsKKworICAgICAg
ICBpZiAoIW1pbWUuaXNFbXB0eSgpID4gMCkgeworICAgICAgICAgICAgVmVjdG9yPFN0cmluZz4g
ZXh0czsKKworICAgICAgICAgICAgaWYgKG1pbWUuc2l6ZSgpID4gMSkKKyAgICAgICAgICAgICAg
ICBtaW1lWzFdLnNwbGl0KFVDaGFyKCcsJyksIGZhbHNlLCBleHRzKTsKKworICAgICAgICAgICAg
ZGV0ZXJtaW5lUXVpcmtzKG1pbWVbMF0pOworICAgICAgICAgICAgbV9taW1lVG9FeHRlbnNpb25z
LmFkZChtaW1lWzBdLCBleHRzKTsKKworICAgICAgICAgICAgaWYgKG1pbWUuc2l6ZSgpID4gMikK
KyAgICAgICAgICAgICAgICBtX21pbWVUb0Rlc2NyaXB0aW9ucy5hZGQobWltZVswXSwgbWltZVsy
XSk7CisgICAgICAgIH0KKyAgICB9CisKKyAgICByZXR1cm4gdHJ1ZTsKK30KKwordWludDE2X3Qg
UGx1Z2luUGFja2FnZTo6TlBWZXJzaW9uKCkgY29uc3QKK3sKKyAgICByZXR1cm4gTlBWRVJTX0hB
U19QTFVHSU5fVEhSRUFEX0FTWU5DX0NBTEw7Cit9CisKK2Jvb2wgUGx1Z2luUGFja2FnZTo6bG9h
ZCgpCit7CisgICAgY2hhciogZXJybXNnOworCisgICAgaWYgKG1faXNMb2FkZWQpIHsKKyAgICAg
ICAgbV9sb2FkQ291bnQrKzsKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgfQorCisgICAgbV9t
b2R1bGUgPSBkbG9wZW4obV9wYXRoLnV0ZjgoKS5kYXRhKCksIFJUTERfTEFaWSB8IFJUTERfTE9D
QUwpOworICAgIGlmICgoZXJybXNnID0gZGxlcnJvcigpKSkgeworICAgICAgICBFSU5BX0xPR19X
QVJOKCIlcyBub3QgbG9hZGVkOiAlcyIsIG1fcGF0aC51dGY4KCkuZGF0YSgpLCBlcnJtc2cpOwor
ICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorCisgICAgbV9pc0xvYWRlZCA9IHRydWU7CisK
KyAgICBOUF9Jbml0aWFsaXplRnVuY1B0ciBpbml0aWFsaXplOworICAgIE5QRXJyb3IgZXJyOwor
CisgICAgaW5pdGlhbGl6ZSA9IChOUF9Jbml0aWFsaXplRnVuY1B0cilkbHN5bShtX21vZHVsZSwg
Ik5QX0luaXRpYWxpemUiKTsKKyAgICBpZiAoKGVycm1zZyA9IGRsZXJyb3IoKSkpIHsKKyAgICAg
ICAgRUlOQV9MT0dfRVJSKCJDb3VsZCBub3QgZ2V0IHN5bWJvbCBOUF9Jbml0aWFsaXplOiAlcyIs
IGVycm1zZyk7CisgICAgICAgIGdvdG8gYWJvcnQ7CisgICAgfQorCisgICAgbV9OUFBfU2h1dGRv
d24gPSAoTlBQX1NodXRkb3duUHJvY1B0cilkbHN5bShtX21vZHVsZSwgIk5QX1NodXRkb3duIik7
CisgICAgaWYgKChlcnJtc2cgPSBkbGVycm9yKCkpKSB7CisgICAgICAgIEVJTkFfTE9HX0VSUigi
Q291bGQgbm90IGdldCBzeW1ib2wgTlBfU2h1dGRvd246ICVzIiwgZXJybXNnKTsKKyAgICAgICAg
Z290byBhYm9ydDsKKyAgICB9CisKKyAgICBtZW1zZXQoJm1fcGx1Z2luRnVuY3MsIDAsIHNpemVv
ZihtX3BsdWdpbkZ1bmNzKSk7CisgICAgbV9wbHVnaW5GdW5jcy5zaXplID0gc2l6ZW9mKG1fcGx1
Z2luRnVuY3MpOworCisgICAgaW5pdGlhbGl6ZUJyb3dzZXJGdW5jcygpOworCisjaWYgZGVmaW5l
ZChYUF9VTklYKQorICAgIGVyciA9IGluaXRpYWxpemUoJm1fYnJvd3NlckZ1bmNzLCAmbV9wbHVn
aW5GdW5jcyk7CisjZWxzZQorICAgIGVyciA9IGluaXRpYWxpemUoJm1fYnJvd3NlckZ1bmNzKTsK
KyNlbmRpZgorICAgIGlmIChlcnIgIT0gTlBFUlJfTk9fRVJST1IpCisgICAgICAgIGdvdG8gYWJv
cnQ7CisKKyAgICBtX2xvYWRDb3VudCsrOworICAgIHJldHVybiB0cnVlOworCithYm9ydDoKKyAg
ICBFSU5BX0xPR19EQkcoImZhaWxlZCB0byBsb2FkIHBsdWdpbiwgdW5sb2FkIGl0IHdpdGhvdXQg
c2h1dHRpbmcgaXQgZG93bi4iKTsKKyAgICB1bmxvYWRXaXRob3V0U2h1dGRvd24oKTsKKyAgICBy
ZXR1cm4gZmFsc2U7Cit9CisKK30KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsdWdpbnMv
ZWZsL1BsdWdpblZpZXdFZmwuY3BwIGIvU291cmNlL1dlYkNvcmUvcGx1Z2lucy9lZmwvUGx1Z2lu
Vmlld0VmbC5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODk5OTY2Mgot
LS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsdWdpbnMvZWZsL1BsdWdpblZpZXdF
ZmwuY3BwCkBAIC0wLDAgKzEsMzkyIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA2LCAyMDA3
IEFwcGxlIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDgg
Q29sbGFib3JhIEx0ZC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAw
OCBJTmRUIC0gSW5zdGl0dXRvIE5va2lhIGRlIFRlY25vbG9naWEKKyAqIENvcHlyaWdodCAoQykg
MjAwOS0yMDEwIFByb0ZVU0lPTiBlbWJlZGRlZCBzeXN0ZW1zCisgKiBDb3B5cmlnaHQgKEMpIDIw
MDktMjAxMSBTYW1zdW5nIEVsZWN0cm9uaWNzCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVz
ZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmlj
YXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlv
bnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVz
dCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmli
dXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVy
aWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FS
RSBJUyBQUk9WSURFRCBCWSBBUFBMRSBDT01QVVRFUiwgSU5DLiBgYEFTIElTJycgQU5EIEFOWQor
ICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5E
IEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElO
IE5PIEVWRU5UIFNIQUxMIEFQUExFIENPTVBVVEVSLCBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMg
QkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwK
KyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VS
VklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5U
RVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklM
SVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAo
SU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VU
IE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUg
UE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgor
I2luY2x1ZGUgIlBsdWdpblZpZXcuaCIKKworI2luY2x1ZGUgIkZyYW1lVmlldy5oIgorI2luY2x1
ZGUgIkdyYXBoaWNzQ29udGV4dC5oIgorI2luY2x1ZGUgIkhUTUxOYW1lcy5oIgorI2luY2x1ZGUg
IkhUTUxQbHVnSW5FbGVtZW50LmgiCisjaW5jbHVkZSAiSG9zdFdpbmRvdy5oIgorI2luY2x1ZGUg
Ik1vdXNlRXZlbnQuaCIKKyNpbmNsdWRlICJOb3RJbXBsZW1lbnRlZC5oIgorI2luY2x1ZGUgIlBs
dWdpblBhY2thZ2UuaCIKKyNpbmNsdWRlICJucHJ1bnRpbWVfaW1wbC5oIgorI2luY2x1ZGUgInJ1
bnRpbWUvSlNMb2NrLmgiCisjaW5jbHVkZSA8RWNvcmVfRXZhcy5oPgorI2luY2x1ZGUgPEVjb3Jl
X1guaD4KKyNpbmNsdWRlIDxFdmFzLmg+CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKwordXNpbmcg
bmFtZXNwYWNlIEhUTUxOYW1lczsKKworI2lmIEVOQUJMRShORVRTQ0FQRV9QTFVHSU5fQVBJKQor
Ym9vbCBQbHVnaW5WaWV3OjpkaXNwYXRjaE5QRXZlbnQoTlBFdmVudCYgZXZlbnQpCit7CisgICAg
aWYgKCFtX3BsdWdpbi0+cGx1Z2luRnVuY3MoKS0+ZXZlbnQpCisgICAgICAgIHJldHVybiBmYWxz
ZTsKKworICAgIFBsdWdpblZpZXc6OnNldEN1cnJlbnRQbHVnaW5WaWV3KHRoaXMpOworICAgIEpT
Qzo6SlNMb2NrOjpEcm9wQWxsTG9ja3MgZHJvcEFsbExvY2tzKGZhbHNlKTsKKyAgICBzZXRDYWxs
aW5nUGx1Z2luKHRydWUpOworCisgICAgYm9vbCBhY2NlcHRlZCA9IG1fcGx1Z2luLT5wbHVnaW5G
dW5jcygpLT5ldmVudChtX2luc3RhbmNlLCAmZXZlbnQpOworCisgICAgc2V0Q2FsbGluZ1BsdWdp
bihmYWxzZSk7CisgICAgUGx1Z2luVmlldzo6c2V0Q3VycmVudFBsdWdpblZpZXcoMCk7CisgICAg
cmV0dXJuIGFjY2VwdGVkOworfQorI2VuZGlmCisKK3ZvaWQgUGx1Z2luVmlldzo6aGFsdCgpCit7
CisgICAgbm90SW1wbGVtZW50ZWQoKTsKK30KKworI2lmIGRlZmluZWQoWFBfVU5JWCkgJiYgRU5B
QkxFKE5FVFNDQVBFX1BMVUdJTl9BUEkpCit2b2lkIFBsdWdpblZpZXc6OmhhbmRsZUZvY3VzSW5F
dmVudCgpCit7CisgICAgbm90SW1wbGVtZW50ZWQoKTsKK30KKwordm9pZCBQbHVnaW5WaWV3Ojpo
YW5kbGVGb2N1c091dEV2ZW50KCkKK3sKKyAgICBub3RJbXBsZW1lbnRlZCgpOworfQorI2VuZGlm
CisKK3ZvaWQgUGx1Z2luVmlldzo6cmVzdGFydCgpCit7CisgICAgbm90SW1wbGVtZW50ZWQoKTsK
K30KKwordm9pZCBQbHVnaW5WaWV3OjpoYW5kbGVLZXlib2FyZEV2ZW50KEtleWJvYXJkRXZlbnQq
KQoreworICAgIG5vdEltcGxlbWVudGVkKCk7Cit9CisKK3ZvaWQgUGx1Z2luVmlldzo6aGFuZGxl
TW91c2VFdmVudChNb3VzZUV2ZW50KiBldmVudCkKK3sKKyNpZiBFTkFCTEUoTkVUU0NBUEVfUExV
R0lOX0FQSSkKKyAgICBOUEV2ZW50IHhFdmVudDsKKworICAgIEludFJlY3QgcCA9IHN0YXRpY19j
YXN0PEZyYW1lVmlldyo+KHBhcmVudCgpKS0+Y29udGVudHNUb1NjcmVlbihJbnRSZWN0KDAsIDAs
IGV2ZW50LT5vZmZzZXRYKCksIGV2ZW50LT5vZmZzZXRZKCkpKTsKKyAgICBpZiAoZXZlbnQtPnR5
cGUoKSA9PSBldmVudE5hbWVzKCkubW91c2Vtb3ZlRXZlbnQKKyAgICAgICAgICAgIHx8IGV2ZW50
LT50eXBlKCkgPT0gZXZlbnROYW1lcygpLm1vdXNlb3V0RXZlbnQKKyAgICAgICAgICAgIHx8IGV2
ZW50LT50eXBlKCkgPT0gZXZlbnROYW1lcygpLm1vdXNlb3ZlckV2ZW50KSB7CisgICAgICAgIHhF
dmVudC50eXBlID0gTW90aW9uTm90aWZ5OworICAgICAgICB4RXZlbnQueG1vdGlvbi54ID0gcC53
aWR0aCgpOworICAgICAgICB4RXZlbnQueG1vdGlvbi55ID0gcC5oZWlnaHQoKTsKKyAgICB9IGVs
c2UgaWYgKGV2ZW50LT50eXBlKCkgPT0gZXZlbnROYW1lcygpLm1vdXNlZG93bkV2ZW50KSB7Cisg
ICAgICAgIHhFdmVudC50eXBlID0gQnV0dG9uUHJlc3M7CisgICAgICAgIHhFdmVudC54YnV0dG9u
LnggPSBwLndpZHRoKCk7CisgICAgICAgIHhFdmVudC54YnV0dG9uLnkgPSBwLmhlaWdodCgpOwor
ICAgICAgICB4RXZlbnQueGJ1dHRvbi5idXR0b24gPSBldmVudC0+YnV0dG9uKCkgKyAxOyAvLyBE
T00gTW91c2VFdmVudCBjb3VudHMgZnJvbSAwLCBhbmQgWEJ1dHRvbkV2ZW50IGZyb20gMQorICAg
IH0gZWxzZSBpZiAoZXZlbnQtPnR5cGUoKSA9PSBldmVudE5hbWVzKCkubW91c2V1cEV2ZW50KSB7
CisgICAgICAgIHhFdmVudC50eXBlID0gQnV0dG9uUmVsZWFzZTsKKyAgICAgICAgeEV2ZW50Lnhi
dXR0b24ueCA9IHAud2lkdGgoKTsKKyAgICAgICAgeEV2ZW50LnhidXR0b24ueSA9IHAuaGVpZ2h0
KCk7CisgICAgICAgIHhFdmVudC54YnV0dG9uLmJ1dHRvbiA9IGV2ZW50LT5idXR0b24oKSArIDE7
CisgICAgfSBlbHNlCisgICAgICAgIHJldHVybjsKKworICAgIGlmIChkaXNwYXRjaE5QRXZlbnQo
eEV2ZW50KSkKKyAgICAgICAgZXZlbnQtPnNldERlZmF1bHRIYW5kbGVkKCk7CisjZWxzZQorICAg
IG5vdEltcGxlbWVudGVkKCk7CisgICAgcmV0dXJuOworI2VuZGlmCit9CisKK3ZvaWQgUGx1Z2lu
Vmlldzo6dXBkYXRlUGx1Z2luV2lkZ2V0KCkKK3sKKyAgICBpZiAoIXBhcmVudCgpIHx8ICFtX2lz
V2luZG93ZWQpCisgICAgICAgIHJldHVybjsKKworICAgIEFTU0VSVChwYXJlbnQoKS0+aXNGcmFt
ZVZpZXcoKSk7CisgICAgRnJhbWVWaWV3KiBmcmFtZVZpZXcgPSBzdGF0aWNfY2FzdDxGcmFtZVZp
ZXcqPihwYXJlbnQoKSk7CisKKyAgICBJbnRSZWN0IG9sZFdpbmRvd1JlY3QgPSBtX3dpbmRvd1Jl
Y3Q7CisgICAgSW50UmVjdCBvbGRDbGlwUmVjdCA9IG1fY2xpcFJlY3Q7CisKKyAgICBtX3dpbmRv
d1JlY3QgPSBmcmFtZVZpZXctPmNvbnRlbnRzVG9TY3JlZW4oZnJhbWVSZWN0KCkpOworCisgICAg
bV9jbGlwUmVjdCA9IHdpbmRvd0NsaXBSZWN0KCk7CisgICAgbV9jbGlwUmVjdC5tb3ZlKC1tX3dp
bmRvd1JlY3QueCgpLCAtbV93aW5kb3dSZWN0LnkoKSk7Cit9CisKK3ZvaWQgUGx1Z2luVmlldzo6
c2V0Rm9jdXMoYm9vbCBmb2N1c2VkKQoreworICAgIGlmIChmb2N1c2VkKQorICAgICAgICBtX2Vs
ZW1lbnQtPmRvY3VtZW50KCktPnNldEZvY3VzZWROb2RlKG1fZWxlbWVudCk7CisKKyAgICBXaWRn
ZXQ6OnNldEZvY3VzKGZvY3VzZWQpOworfQorCit2b2lkIFBsdWdpblZpZXc6OnNob3coKQorewor
ICAgIHNldFNlbGZWaXNpYmxlKHRydWUpOworCisgICAgV2lkZ2V0OjpzaG93KCk7Cit9CisKK3Zv
aWQgUGx1Z2luVmlldzo6aGlkZSgpCit7CisgICAgc2V0U2VsZlZpc2libGUoZmFsc2UpOworCisg
ICAgV2lkZ2V0OjpoaWRlKCk7Cit9CisKK3ZvaWQgUGx1Z2luVmlldzo6cGFpbnQoR3JhcGhpY3ND
b250ZXh0KiBjb250ZXh0LCBjb25zdCBJbnRSZWN0JiByZWN0KQoreworICAgIEludFJlY3QgZnJS
ZWN0ID0gZnJhbWVSZWN0KCk7CisKKyAgICBpZiAoIW1faXNTdGFydGVkKSB7CisgICAgICAgIHBh
aW50TWlzc2luZ1BsdWdpbkljb24oY29udGV4dCwgcmVjdCk7CisgICAgICAgIHJldHVybjsKKyAg
ICB9CisKKyAgICBpZiAoY29udGV4dC0+cGFpbnRpbmdEaXNhYmxlZCgpKQorICAgICAgICByZXR1
cm47CisKKyAgICBpZiAobV9pc1dpbmRvd2VkIHx8IGNvbnRleHQtPnBhaW50aW5nRGlzYWJsZWQo
KSkKKyAgICAgICAgcmV0dXJuOworfQorCit2b2lkIFBsdWdpblZpZXc6OnNldFBhcmVudChTY3Jv
bGxWaWV3KiBwYXJlbnQpCit7CisgICAgV2lkZ2V0OjpzZXRQYXJlbnQocGFyZW50KTsKKworICAg
IGlmIChwYXJlbnQpCisgICAgICAgIGluaXQoKTsKKyAgICBlbHNlIGlmICghcGxhdGZvcm1QbHVn
aW5XaWRnZXQoKSkKKyAgICAgICAgcmV0dXJuOworfQorCit2b2lkIFBsdWdpblZpZXc6OnNldE5Q
V2luZG93UmVjdChjb25zdCBJbnRSZWN0JiByZWN0KQoreworICAgIG5vdEltcGxlbWVudGVkKCk7
CisgICAgcmV0dXJuOworfQorCit2b2lkIFBsdWdpblZpZXc6OnNldE5QV2luZG93SWZOZWVkZWQo
KQoreworfQorCit2b2lkIFBsdWdpblZpZXc6OnNldFBhcmVudFZpc2libGUoYm9vbCB2aXNpYmxl
KQoreworICAgIGlmIChpc1BhcmVudFZpc2libGUoKSA9PSB2aXNpYmxlKQorICAgICAgICByZXR1
cm47CisKKyAgICBXaWRnZXQ6OnNldFBhcmVudFZpc2libGUodmlzaWJsZSk7Cit9CisKKyNpZiBF
TkFCTEUoTkVUU0NBUEVfUExVR0lOX0FQSSkKK05QRXJyb3IgUGx1Z2luVmlldzo6aGFuZGxlUG9z
dFJlYWRGaWxlKFZlY3RvcjxjaGFyPiYgYnVmZmVyLCB1aW50MzJfdCBsZW4sIGNvbnN0IGNoYXIq
IGJ1ZikKK3sKKyAgICBTdHJpbmcgZmlsZW5hbWUoYnVmLCBsZW4pOworCisgICAgaWYgKGZpbGVu
YW1lLnN0YXJ0c1dpdGgoImZpbGU6Ly8vIikpCisgICAgICAgIGZpbGVuYW1lID0gZmlsZW5hbWUu
c3Vic3RyaW5nKDgpOworCisgICAgaWYgKCFmaWxlRXhpc3RzKGZpbGVuYW1lKSkKKyAgICAgICAg
cmV0dXJuIE5QRVJSX0ZJTEVfTk9UX0ZPVU5EOworCisgICAgRklMRSogZmlsZUhhbmRsZSA9IGZv
cGVuKGZpbGVuYW1lLnV0ZjgoKS5kYXRhKCksICJyIik7CisKKyAgICBpZiAoIWZpbGVIYW5kbGUp
CisgICAgICAgIHJldHVybiBOUEVSUl9GSUxFX05PVF9GT1VORDsKKworICAgIGludCBieXRlc1Jl
YWQgPSBmcmVhZChidWZmZXIuZGF0YSgpLCAxLCAwLCBmaWxlSGFuZGxlKTsKKworICAgIGZjbG9z
ZShmaWxlSGFuZGxlKTsKKworICAgIGlmIChieXRlc1JlYWQgPD0gMCkKKyAgICAgICAgcmV0dXJu
IE5QRVJSX0ZJTEVfTk9UX0ZPVU5EOworCisgICAgcmV0dXJuIE5QRVJSX05PX0VSUk9SOworfQor
I2VuZGlmCisKKyNpZiBFTkFCTEUoTkVUU0NBUEVfUExVR0lOX0FQSSkKK2Jvb2wgUGx1Z2luVmll
dzo6cGxhdGZvcm1HZXRWYWx1ZVN0YXRpYyhOUE5WYXJpYWJsZSB2YXJpYWJsZSwgdm9pZCogdmFs
dWUsIE5QRXJyb3IqIHJlc3VsdCkKK3sKKyAgICBzd2l0Y2ggKHZhcmlhYmxlKSB7CisgICAgY2Fz
ZSBOUE5WVG9vbGtpdDoKKyAgICAgICAgKnN0YXRpY19jYXN0PHVpbnQzMl90Kj4odmFsdWUpID0g
MDsKKyAgICAgICAgKnJlc3VsdCA9IE5QRVJSX05PX0VSUk9SOworICAgICAgICByZXR1cm4gdHJ1
ZTsKKworICAgIGNhc2UgTlBOVlN1cHBvcnRzWEVtYmVkQm9vbDoKKyAgICAgICAgKnN0YXRpY19j
YXN0PE5QQm9vbCo+KHZhbHVlKSA9IGZhbHNlOworICAgICAgICAqcmVzdWx0ID0gTlBFUlJfTk9f
RVJST1I7CisgICAgICAgIHJldHVybiB0cnVlOworCisgICAgY2FzZSBOUE5WamF2YXNjcmlwdEVu
YWJsZWRCb29sOgorICAgICAgICAqc3RhdGljX2Nhc3Q8TlBCb29sKj4odmFsdWUpID0gdHJ1ZTsK
KyAgICAgICAgKnJlc3VsdCA9IE5QRVJSX05PX0VSUk9SOworICAgICAgICByZXR1cm4gdHJ1ZTsK
KworICAgIGNhc2UgTlBOVlN1cHBvcnRzV2luZG93bGVzczoKKyAgICAgICAgKnN0YXRpY19jYXN0
PE5QQm9vbCo+KHZhbHVlKSA9IGZhbHNlOworICAgICAgICAqcmVzdWx0ID0gTlBFUlJfTk9fRVJS
T1I7CisgICAgICAgIHJldHVybiB0cnVlOworCisgICAgZGVmYXVsdDoKKyAgICAgICAgcmV0dXJu
IGZhbHNlOworICAgIH0KK30KKworYm9vbCBQbHVnaW5WaWV3OjpwbGF0Zm9ybUdldFZhbHVlKE5Q
TlZhcmlhYmxlIHZhcmlhYmxlLCB2b2lkKiB2YWx1ZSwgTlBFcnJvciogcmVzdWx0KQoreworICAg
IGlmICghdmFsdWUgfHwgIXJlc3VsdCkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgc3dp
dGNoICh2YXJpYWJsZSkgeworICAgIGNhc2UgTlBOVnhEaXNwbGF5OgorICAgICAgICAqc3RhdGlj
X2Nhc3Q8dm9pZCAqKj4odmFsdWUpID0gc3RhdGljX2Nhc3Q8RGlzcGxheSo+KGVjb3JlX3hfZGlz
cGxheV9nZXQoKSk7CisgICAgICAgICpyZXN1bHQgPSBOUEVSUl9OT19FUlJPUjsKKyAgICAgICAg
cmV0dXJuIHRydWU7CisKKyAgICBjYXNlIE5QTlZ4dEFwcENvbnRleHQ6CisgICAgICAgICpyZXN1
bHQgPSBOUEVSUl9HRU5FUklDX0VSUk9SOworICAgICAgICByZXR1cm4gdHJ1ZTsKKworI2lmIEVO
QUJMRShORVRTQ0FQRV9QTFVHSU5fQVBJKQorICAgIGNhc2UgTlBOVldpbmRvd05QT2JqZWN0OiB7
CisgICAgICAgIGlmIChtX2lzSmF2YVNjcmlwdFBhdXNlZCkgeworICAgICAgICAgICAgKnJlc3Vs
dCA9IE5QRVJSX0dFTkVSSUNfRVJST1I7CisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAg
ICAgfQorCisgICAgICAgIE5QT2JqZWN0KiB3aW5kb3dTY3JpcHRPYmplY3QgPSBtX3BhcmVudEZy
YW1lLT5zY3JpcHQoKS0+d2luZG93U2NyaXB0TlBPYmplY3QoKTsKKworICAgICAgICAvLyBSZXR1
cm4gdmFsdWUgaXMgZXhwZWN0ZWQgdG8gYmUgcmV0YWluZWQsIGFzIGRlc2NyaWJlZCBoZXJlOiA8
aHR0cDovL3d3dy5tb3ppbGxhLm9yZy9wcm9qZWN0cy9wbHVnaW4vbnBydW50aW1lLmh0bWw+Cisg
ICAgICAgIGlmICh3aW5kb3dTY3JpcHRPYmplY3QpCisgICAgICAgICAgICBfTlBOX1JldGFpbk9i
amVjdCh3aW5kb3dTY3JpcHRPYmplY3QpOworCisgICAgICAgIHZvaWQqKiB2ID0gKHZvaWQqKil2
YWx1ZTsKKyAgICAgICAgKnYgPSB3aW5kb3dTY3JpcHRPYmplY3Q7CisKKyAgICAgICAgKnJlc3Vs
dCA9IE5QRVJSX05PX0VSUk9SOworICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CisKKyAgICBj
YXNlIE5QTlZQbHVnaW5FbGVtZW50TlBPYmplY3Q6IHsKKyAgICAgICAgaWYgKG1faXNKYXZhU2Ny
aXB0UGF1c2VkKSB7CisgICAgICAgICAgICAqcmVzdWx0ID0gTlBFUlJfR0VORVJJQ19FUlJPUjsK
KyAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICB9CisKKyAgICAgICAgTlBPYmplY3Qq
IHBsdWdpblNjcmlwdE9iamVjdCA9IDA7CisKKyAgICAgICAgaWYgKG1fZWxlbWVudC0+aGFzVGFn
TmFtZShhcHBsZXRUYWcpIHx8IG1fZWxlbWVudC0+aGFzVGFnTmFtZShlbWJlZFRhZykgfHwgbV9l
bGVtZW50LT5oYXNUYWdOYW1lKG9iamVjdFRhZykpCisgICAgICAgICAgICBwbHVnaW5TY3JpcHRP
YmplY3QgPSBzdGF0aWNfY2FzdDxIVE1MUGx1Z0luRWxlbWVudCo+KG1fZWxlbWVudCktPmdldE5Q
T2JqZWN0KCk7CisKKyAgICAgICAgLy8gUmV0dXJuIHZhbHVlIGlzIGV4cGVjdGVkIHRvIGJlIHJl
dGFpbmVkLCBhcyBkZXNjcmliZWQgaGVyZTogPGh0dHA6Ly93d3cubW96aWxsYS5vcmcvcHJvamVj
dHMvcGx1Z2luL25wcnVudGltZS5odG1sPgorICAgICAgICBpZiAocGx1Z2luU2NyaXB0T2JqZWN0
KQorICAgICAgICAgICAgX05QTl9SZXRhaW5PYmplY3QocGx1Z2luU2NyaXB0T2JqZWN0KTsKKwor
ICAgICAgICB2b2lkKiogdiA9ICh2b2lkKiopdmFsdWU7CisgICAgICAgICp2ID0gcGx1Z2luU2Ny
aXB0T2JqZWN0OworCisgICAgICAgICpyZXN1bHQgPSBOUEVSUl9OT19FUlJPUjsKKyAgICAgICAg
cmV0dXJuIHRydWU7CisgICAgfQorI2VuZGlmCisKKyAgICBjYXNlIE5QTlZuZXRzY2FwZVdpbmRv
dzogeworICAgICAgICB2b2lkKiB3ID0gcmVpbnRlcnByZXRfY2FzdDx2b2lkKj4odmFsdWUpOwor
ICAgICAgICBFdmFzX09iamVjdCogd2lkZ2V0ID0gbV9wYXJlbnRGcmFtZS0+dmlldygpLT5ob3N0
V2luZG93KCktPnBsYXRmb3JtUGFnZUNsaWVudCgpOworICAgICAgICBFdmFzKiBldmFzID0gZXZh
c19vYmplY3RfZXZhc19nZXQod2lkZ2V0KTsKKyAgICAgICAgRWNvcmVfRXZhcyogZWUgPSBlY29y
ZV9ldmFzX2Vjb3JlX2V2YXNfZ2V0KGV2YXMpOworICAgICAgICAqKChYSUQgKil3KSA9IChXaW5k
b3cpIGVjb3JlX2V2YXNfd2luZG93X2dldChlZSk7CisgICAgICAgICpyZXN1bHQgPSBOUEVSUl9O
T19FUlJPUjsKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgfQorCisgICAgY2FzZSBOUE5WVG9v
bGtpdDoKKyAgICAgICAgaWYgKG1fcGx1Z2luLT5xdWlya3MoKS5jb250YWlucyhQbHVnaW5RdWly
a1JlcXVpcmVzR3RrVG9vbEtpdCkpIHsKKyAgICAgICAgICAgICooKHVpbnQzMl90ICopdmFsdWUp
ID0gMjsKKyAgICAgICAgICAgICpyZXN1bHQgPSBOUEVSUl9OT19FUlJPUjsKKyAgICAgICAgICAg
IHJldHVybiB0cnVlOworICAgICAgICB9CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAg
Ly8gZmFsbCB0aHJvdWdoCisgICAgZGVmYXVsdDoKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAg
IH0KK30KKyNlbmRpZgorCit2b2lkIFBsdWdpblZpZXc6OmludmFsaWRhdGVSZWN0KGNvbnN0IElu
dFJlY3QmIHJlY3QpCit7CisgICAgaW52YWxpZGF0ZVdpbmRvd2xlc3NQbHVnaW5SZWN0KHJlY3Qp
OworfQorCisjaWYgRU5BQkxFKE5FVFNDQVBFX1BMVUdJTl9BUEkpCit2b2lkIFBsdWdpblZpZXc6
OmludmFsaWRhdGVSZWN0KE5QUmVjdCogcmVjdCkKK3sKKyAgICBpZiAoIXJlY3QpIHsKKyAgICAg
ICAgaW52YWxpZGF0ZSgpOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgSW50UmVjdCBy
KHJlY3QtPmxlZnQsIHJlY3QtPnRvcCwgcmVjdC0+cmlnaHQgLSByZWN0LT5sZWZ0LCByZWN0LT5i
b3R0b20gLSByZWN0LT50b3ApOworCisgICAgaW52YWxpZGF0ZVJlY3Qocik7Cit9CisKK3ZvaWQg
UGx1Z2luVmlldzo6aW52YWxpZGF0ZVJlZ2lvbihOUFJlZ2lvbiByZWdpb24pCit7CisgICAgbm90
SW1wbGVtZW50ZWQoKTsKK30KKyNlbmRpZgorCit2b2lkIFBsdWdpblZpZXc6OmZvcmNlUmVkcmF3
KCkKK3sKKyAgICBub3RJbXBsZW1lbnRlZCgpOworfQorCitib29sIFBsdWdpblZpZXc6OnBsYXRm
b3JtU3RhcnQoKQoreworICAgIEFTU0VSVChtX2lzU3RhcnRlZCk7CisgICAgQVNTRVJUKG1fc3Rh
dHVzID09IFBsdWdpblN0YXR1c0xvYWRlZFN1Y2Nlc3NmdWxseSk7CisKKyAgICBub3RJbXBsZW1l
bnRlZCgpOworICAgIHJldHVybiB0cnVlOworfQorCit2b2lkIFBsdWdpblZpZXc6OnBsYXRmb3Jt
RGVzdHJveSgpCit7Cit9CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJLaXQvZWZsL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJLaXQvZWZsL0NoYW5nZUxvZwpp
bmRleCBiYmUyZDBkLi41N2NkMDViIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L2VmbC9DaGFu
Z2VMb2cKKysrIGIvU291cmNlL1dlYktpdC9lZmwvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTMgQEAK
KzIwMTEtMDQtMjggIE1hcml1c3ogR3J6ZWdvcmN6eWsgIDxtYXJpdXN6LmdAc2Ftc3VuZy5jb20+
CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgQnVnIDQ0
NTA1IC0gW0VGTF0gTWlzc2luZyBwbHVnaW5zIHN1cHBvcnQgZm9yIGVmbCBwb3J0CisgICAgICAg
IGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD00NDUwNQorCisgICAgICAg
ICogZXdrL2V3a19mcmFtZS5jcHA6CisgICAgICAgIChld2tfZnJhbWVfcGx1Z2luX2NyZWF0ZSk6
CisKIDIwMTEtMDMtMTIgIFJ5dWFuIENob2kgIDxyeXVhbi5jaG9pQHNhbXN1bmcuY29tPgogCiAg
ICAgICAgIFVucmV2aWV3ZWQgYnVpbGQgZml4LgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9l
ZmwvZXdrL2V3a19mcmFtZS5jcHAgYi9Tb3VyY2UvV2ViS2l0L2VmbC9ld2svZXdrX2ZyYW1lLmNw
cAppbmRleCA0ZTUyYjU2Li44YmZmOGNkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L2VmbC9l
d2svZXdrX2ZyYW1lLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0L2VmbC9ld2svZXdrX2ZyYW1lLmNw
cApAQCAtMjAzOSw1ICsyMDM5LDI0IEBAIHZvaWQgZXdrX2ZyYW1lX2ZvcmNlX2xheW91dChFdmFz
X09iamVjdCogbykKIAogV1RGOjpQYXNzUmVmUHRyPFdlYkNvcmU6OldpZGdldD4gZXdrX2ZyYW1l
X3BsdWdpbl9jcmVhdGUoRXZhc19PYmplY3QqIG8sIGNvbnN0IFdlYkNvcmU6OkludFNpemUmIHBs
dWdpblNpemUsIFdlYkNvcmU6OkhUTUxQbHVnSW5FbGVtZW50KiBlbGVtZW50LCBjb25zdCBXZWJD
b3JlOjpLVVJMJiB1cmwsIGNvbnN0IFdURjo6VmVjdG9yPFdURjo6U3RyaW5nPiYgcGFyYW1OYW1l
cywgY29uc3QgV1RGOjpWZWN0b3I8V1RGOjpTdHJpbmc+JiBwYXJhbVZhbHVlcywgY29uc3QgV1RG
OjpTdHJpbmcmIG1pbWVUeXBlLCBib29sIGxvYWRNYW51YWxseSkKIHsKKyNpZiBFTkFCTEUoTkVU
U0NBUEVfUExVR0lOX0FQSSkKKyAgICBEQkcoIm89JXAsIHNpemU9JWR4JWQsIGVsZW1lbnQ9JXAs
IHVybD0lcywgbWltZVR5cGU9JXMiLAorICAgICAgICBvLCBwbHVnaW5TaXplLndpZHRoKCksIHBs
dWdpblNpemUuaGVpZ2h0KCksIGVsZW1lbnQsCisgICAgICAgIHVybC5wcmV0dHlVUkwoKS51dGY4
KCkuZGF0YSgpLCBtaW1lVHlwZS51dGY4KCkuZGF0YSgpKTsKKworICAgIEVXS19GUkFNRV9TRF9H
RVRfT1JfUkVUVVJOKG8sIHNkLCAwKTsKKworICAgIC8vIFRPRE86IGVtaXQgc2lnbmFsIGFuZCBh
c2sgd2Via2l0IHVzZXJzIGlmIHNvbWV0aGluZyBlbHNlIHNob3VsZCBiZSBkb25lLgorICAgIC8v
IGxpa2UgY3JlYXRpbmcgYW5vdGhlciB4IHdpbmRvdyAoc2VlIGd0aywgaXQgYWxsb3dzIHVzZXJz
IHRvIGNyZWF0ZQorICAgIC8vIEd0a1BsdWdpbldpZGdldC4KKworICAgIFdURjo6UmVmUHRyPFdl
YkNvcmU6OlBsdWdpblZpZXc+IHBsdWdpblZpZXcgPSBXZWJDb3JlOjpQbHVnaW5WaWV3OjpjcmVh
dGUKKyAgICAgICAgKHNkLT5mcmFtZSwgcGx1Z2luU2l6ZSwgZWxlbWVudCwgdXJsLCBwYXJhbU5h
bWVzLCBwYXJhbVZhbHVlcywKKyAgICAgICAgbWltZVR5cGUsIGxvYWRNYW51YWxseSk7CisKKyAg
ICBpZiAocGx1Z2luVmlldy0+c3RhdHVzKCkgPT0gV2ViQ29yZTo6UGx1Z2luU3RhdHVzTG9hZGVk
U3VjY2Vzc2Z1bGx5KQorICAgICAgICByZXR1cm4gcGx1Z2luVmlldzsKKyNlbHNlCiAgICAgcmV0
dXJuIDA7CisjZW5kaWYgLy8gI2lmIEVOQUJMRShORVRTQ0FQRV9QTFVHSU5fQVBJKQogfQo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>96734</attachid>
            <date>2011-06-10 04:40:49 -0700</date>
            <delta_ts>2011-06-10 05:38:31 -0700</delta_ts>
            <desc>EFL&apos;s plugin support</desc>
            <filename>efl_plugins.patch</filename>
            <type>text/plain</type>
            <size>26570</size>
            <attacher name="Mariusz Grzegorczyk">mariusz.g</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cgYi9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvQ2hhbmdlTG9nCmluZGV4IDUzZTUxNzYuLjY4YmM4MDQgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKKysrIGIvU291cmNlL0phdmFTY3JpcHRD
b3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDEyIEBACisyMDExLTA2LTEwICBNYXJpdXN6IEdyemVn
b3JjenlrICA8bWFyaXVzei5nQHNhbXN1bmcuY29tPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5P
Qk9EWSAoT09QUyEpLgorCisgICAgICAgIEJ1ZyA0NDUwNSAtIFtFRkxdIE1pc3NpbmcgcGx1Z2lu
cyBzdXBwb3J0IGZvciBlZmwgcG9ydAorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9z
aG93X2J1Zy5jZ2k/aWQ9NDQ1MDUKKworICAgICAgICAqIHd0Zi9QbGF0Zm9ybS5oOgorCiAyMDEx
LTA2LTA4ICBTaGVyaWZmIEJvdCAgPHdlYmtpdC5yZXZpZXcuYm90QGdtYWlsLmNvbT4KIAogICAg
ICAgICBVbnJldmlld2VkLCByb2xsaW5nIG91dCByODg0MDQuCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvd3RmL1BsYXRmb3JtLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd3Rm
L1BsYXRmb3JtLmgKaW5kZXggNGZjNzk2NS4uZDk3MzU4MSAxMDA2NDQKLS0tIGEvU291cmNlL0ph
dmFTY3JpcHRDb3JlL3d0Zi9QbGF0Zm9ybS5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93
dGYvUGxhdGZvcm0uaApAQCAtMTE2OCw3ICsxMTY4LDcgQEAKICNkZWZpbmUgV0FSTl9VTlVTRURf
UkVUVVJOCiAjZW5kaWYKIAotI2lmICFFTkFCTEUoTkVUU0NBUEVfUExVR0lOX0FQSSkgfHwgKEVO
QUJMRShORVRTQ0FQRV9QTFVHSU5fQVBJKSAmJiAoKE9TKFVOSVgpICYmIChQTEFURk9STShRVCkg
fHwgUExBVEZPUk0oV1gpKSkgfHwgUExBVEZPUk0oR1RLKSkpCisjaWYgIUVOQUJMRShORVRTQ0FQ
RV9QTFVHSU5fQVBJKSB8fCAoRU5BQkxFKE5FVFNDQVBFX1BMVUdJTl9BUEkpICYmICgoT1MoVU5J
WCkgJiYgKFBMQVRGT1JNKFFUKSB8fCBQTEFURk9STShXWCkpKSB8fCBQTEFURk9STShHVEspIHx8
IFBMQVRGT1JNKEVGTCkpKQogI2RlZmluZSBFTkFCTEVfUExVR0lOX1BBQ0tBR0VfU0lNUExFX0hB
U0ggMQogI2VuZGlmCiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0NNYWtlTGlzdHNFZmwu
dHh0IGIvU291cmNlL1dlYkNvcmUvQ01ha2VMaXN0c0VmbC50eHQKaW5kZXggZDRhMGE2MS4uZTA1
NzU3NCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ01ha2VMaXN0c0VmbC50eHQKKysrIGIv
U291cmNlL1dlYkNvcmUvQ01ha2VMaXN0c0VmbC50eHQKQEAgLTExLDYgKzExLDcgQEAgTElTVChB
UFBFTkQgV2ViQ29yZV9JTkNMVURFX0RJUkVDVE9SSUVTCiAgICIke1dFQkNPUkVfRElSfS9wbGF0
Zm9ybS9ncmFwaGljcy9lZmwiCiAgICIke1dFQkNPUkVfRElSfS9wYWdlL2VmbCIKICAgIiR7V0VC
Q09SRV9ESVJ9L2FjY2Vzc2liaWxpdHkvZWZsIgorICAiJHtXRUJDT1JFX0RJUn0vcGx1Z2lucy9l
ZmwiCiAgICIke1dFQktJVF9ESVJ9L2VmbC9XZWJDb3JlU3VwcG9ydCIKICAgIiR7V0VCS0lUX0RJ
Un0vZWZsL2V3ayIKICAgIiR7REVSSVZFRF9TT1VSQ0VTX0RJUn0iCkBAIC03Myw5ICs3NCwyNyBA
QCBMSVNUKEFQUEVORCBXZWJDb3JlX1NPVVJDRVMKICAgcGxhdGZvcm0vaW1hZ2UtZGVjb2RlcnMv
d2VicC9XRUJQSW1hZ2VEZWNvZGVyLmNwcAogICBwbGF0Zm9ybS9wb3NpeC9GaWxlU3lzdGVtUE9T
SVguY3BwCiAgIHBsYXRmb3JtL3RleHQvZWZsL1RleHRCcmVha0l0ZXJhdG9ySW50ZXJuYWxJQ1VF
ZmwuY3BwCi0gIHBsdWdpbnMvUGx1Z2luRGF0YU5vbmUuY3BwCiApCiAKK0lGIChFTkFCTEVfTkVU
U0NBUEVfUExVR0lOX0FQSSkKKyAgTElTVChBUFBFTkQgV2ViQ29yZV9TT1VSQ0VTCisgICAgcGx1
Z2lucy9QbHVnaW5EYXRhYmFzZS5jcHAKKyAgICBwbHVnaW5zL1BsdWdpbkRlYnVnLmNwcAorICAg
IHBsdWdpbnMvUGx1Z2luUGFja2FnZS5jcHAKKyAgICBwbHVnaW5zL1BsdWdpblN0cmVhbS5jcHAK
KyAgICBwbHVnaW5zL1BsdWdpblZpZXcuY3BwCisgICAgcGx1Z2lucy9lZmwvUGx1Z2luRGF0YUVm
bC5jcHAKKyAgICBwbHVnaW5zL2VmbC9QbHVnaW5QYWNrYWdlRWZsLmNwcAorICAgIHBsdWdpbnMv
ZWZsL1BsdWdpblZpZXdFZmwuY3BwCisgICkKK0VMU0UgKCkKKyAgTElTVChBUFBFTkQgV2ViQ29y
ZV9TT1VSQ0VTCisgICAgcGx1Z2lucy9QbHVnaW5EYXRhTm9uZS5jcHAKKyAgICBwbHVnaW5zL1Bs
dWdpblBhY2thZ2VOb25lLmNwcAorICAgIHBsdWdpbnMvUGx1Z2luVmlld05vbmUuY3BwCisgICkK
K0VORElGICgpCisKIExJU1QoQVBQRU5EIFdlYkNvcmVfVVNFUl9BR0VOVF9TVFlMRV9TSEVFVFMK
ICAgICAke1dFQkNPUkVfRElSfS9jc3MvbWVkaWFDb250cm9sc0VmbC5jc3MKICkKQEAgLTE0NCw2
ICsxNjMsNyBAQCBJRiAoV1RGX1VTRV9TT1VQKQogICBMSVNUKEFQUEVORCBXZWJDb3JlX1NPVVJD
RVMKICAgICBwbGF0Zm9ybS9uZXR3b3JrL3NvdXAvQ29va2llSmFyU291cC5jcHAKICAgICBwbGF0
Zm9ybS9uZXR3b3JrL3NvdXAvR093blB0clNvdXAuY3BwCisgICAgcGxhdGZvcm0vbmV0d29yay9z
b3VwL1Byb3h5U2VydmVyU291cC5jcHAKICAgICBwbGF0Zm9ybS9uZXR3b3JrL3NvdXAvUmVzb3Vy
Y2VIYW5kbGVTb3VwLmNwcAogICAgIHBsYXRmb3JtL25ldHdvcmsvc291cC9SZXNvdXJjZVJlcXVl
c3RTb3VwLmNwcAogICAgIHBsYXRmb3JtL25ldHdvcmsvc291cC9SZXNvdXJjZVJlc3BvbnNlU291
cC5jcHAKQEAgLTE2MCw2ICsxODAsNyBAQCBJRiAoV1RGX1VTRV9DVVJMKQogICAgIHBsYXRmb3Jt
L25ldHdvcmsvY3VybC9Db29raWVKYXJDdXJsLmNwcAogICAgIHBsYXRmb3JtL25ldHdvcmsvY3Vy
bC9ETlNDdXJsLmNwcAogICAgIHBsYXRmb3JtL25ldHdvcmsvY3VybC9Gb3JtRGF0YVN0cmVhbUN1
cmwuY3BwCisgICAgcGxhdGZvcm0vbmV0d29yay9jdXJsL1Byb3h5U2VydmVyQ3VybC5jcHAKICAg
ICBwbGF0Zm9ybS9uZXR3b3JrL2N1cmwvUmVzb3VyY2VIYW5kbGVDdXJsLmNwcAogICAgIHBsYXRm
b3JtL25ldHdvcmsvY3VybC9SZXNvdXJjZUhhbmRsZU1hbmFnZXIuY3BwCiAgICAgcGxhdGZvcm0v
bmV0d29yay9jdXJsL1NvY2tldFN0cmVhbUhhbmRsZUN1cmwuY3BwCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9DaGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggNzI1
MjIxOC4uMzViMjQyNCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBi
L1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDQ3IEBACisyMDExLTA2LTEwICBN
YXJpdXN6IEdyemVnb3JjenlrICA8bWFyaXVzei5nQHNhbXN1bmcuY29tPgorCisgICAgICAgIFJl
dmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIEJ1ZyA0NDUwNSAtIFtFRkxdIE1p
c3NpbmcgcGx1Z2lucyBzdXBwb3J0IGZvciBlZmwgcG9ydAorICAgICAgICBodHRwczovL2J1Z3Mu
d2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NDQ1MDUKKworICAgICAgICBUZW1wbGF0ZSB2ZXJz
aW9uLCBzbyBubyBuZXcgdGVzdHMgYXJlIG5lZWRlZC4KKworICAgICAgICAqIENNYWtlTGlzdHNF
ZmwudHh0OgorICAgICAgICAqIHBsdWdpbnMvUGx1Z2luVmlldy5oOgorICAgICAgICAqIHBsdWdp
bnMvZWZsL1BsdWdpbkRhdGFFZmwuY3BwOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6OlBsdWdp
bkRhdGE6OmluaXRQbHVnaW5zKToKKyAgICAgICAgKFdlYkNvcmU6OlBsdWdpbkRhdGE6OnJlZnJl
c2gpOgorICAgICAgICAqIHBsdWdpbnMvZWZsL1BsdWdpblBhY2thZ2VFZmwuY3BwOiBBZGRlZC4K
KyAgICAgICAgKFdlYkNvcmU6OlBsdWdpblBhY2thZ2U6OmZldGNoSW5mbyk6CisgICAgICAgIChX
ZWJDb3JlOjpQbHVnaW5QYWNrYWdlOjpOUFZlcnNpb24pOgorICAgICAgICAoV2ViQ29yZTo6UGx1
Z2luUGFja2FnZTo6bG9hZCk6CisgICAgICAgICogcGx1Z2lucy9lZmwvUGx1Z2luVmlld0VmbC5j
cHA6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6UGx1Z2luVmlldzo6ZGlzcGF0Y2hOUEV2ZW50
KToKKyAgICAgICAgKFdlYkNvcmU6OlBsdWdpblZpZXc6OmhhbHQpOgorICAgICAgICAoV2ViQ29y
ZTo6UGx1Z2luVmlldzo6aGFuZGxlRm9jdXNJbkV2ZW50KToKKyAgICAgICAgKFdlYkNvcmU6OlBs
dWdpblZpZXc6OmhhbmRsZUZvY3VzT3V0RXZlbnQpOgorICAgICAgICAoV2ViQ29yZTo6UGx1Z2lu
Vmlldzo6cmVzdGFydCk6CisgICAgICAgIChXZWJDb3JlOjpQbHVnaW5WaWV3OjpoYW5kbGVLZXli
b2FyZEV2ZW50KToKKyAgICAgICAgKFdlYkNvcmU6OlBsdWdpblZpZXc6OmhhbmRsZU1vdXNlRXZl
bnQpOgorICAgICAgICAoV2ViQ29yZTo6UGx1Z2luVmlldzo6dXBkYXRlUGx1Z2luV2lkZ2V0KToK
KyAgICAgICAgKFdlYkNvcmU6OlBsdWdpblZpZXc6OnNldEZvY3VzKToKKyAgICAgICAgKFdlYkNv
cmU6OlBsdWdpblZpZXc6OnNob3cpOgorICAgICAgICAoV2ViQ29yZTo6UGx1Z2luVmlldzo6aGlk
ZSk6CisgICAgICAgIChXZWJDb3JlOjpQbHVnaW5WaWV3OjpwYWludCk6CisgICAgICAgIChXZWJD
b3JlOjpQbHVnaW5WaWV3OjpzZXRQYXJlbnQpOgorICAgICAgICAoV2ViQ29yZTo6UGx1Z2luVmll
dzo6c2V0TlBXaW5kb3dSZWN0KToKKyAgICAgICAgKFdlYkNvcmU6OlBsdWdpblZpZXc6OnNldE5Q
V2luZG93SWZOZWVkZWQpOgorICAgICAgICAoV2ViQ29yZTo6UGx1Z2luVmlldzo6c2V0UGFyZW50
VmlzaWJsZSk6CisgICAgICAgIChXZWJDb3JlOjpQbHVnaW5WaWV3OjpoYW5kbGVQb3N0UmVhZEZp
bGUpOgorICAgICAgICAoV2ViQ29yZTo6UGx1Z2luVmlldzo6cGxhdGZvcm1HZXRWYWx1ZVN0YXRp
Yyk6CisgICAgICAgIChXZWJDb3JlOjpQbHVnaW5WaWV3OjpwbGF0Zm9ybUdldFZhbHVlKToKKyAg
ICAgICAgKFdlYkNvcmU6OlBsdWdpblZpZXc6OmludmFsaWRhdGVSZWN0KToKKyAgICAgICAgKFdl
YkNvcmU6OlBsdWdpblZpZXc6OmludmFsaWRhdGVSZWdpb24pOgorICAgICAgICAoV2ViQ29yZTo6
UGx1Z2luVmlldzo6Zm9yY2VSZWRyYXcpOgorICAgICAgICAoV2ViQ29yZTo6UGx1Z2luVmlldzo6
cGxhdGZvcm1TdGFydCk6CisgICAgICAgIChXZWJDb3JlOjpQbHVnaW5WaWV3OjpwbGF0Zm9ybURl
c3Ryb3kpOgorCiAyMDExLTA2LTA4ICBIYXlhdG8gSXRvICA8aGF5YXRvQGNocm9taXVtLm9yZz4K
IAogICAgICAgICBSZXZpZXdlZCBieSBIYWppbWUgTW9yaXRhLgpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvcGx1Z2lucy9QbHVnaW5WaWV3LmggYi9Tb3VyY2UvV2ViQ29yZS9wbHVnaW5zL1Bs
dWdpblZpZXcuaAppbmRleCBhNWM0YjkwLi40YTUwY2FiIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9wbHVnaW5zL1BsdWdpblZpZXcuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbHVnaW5zL1Bs
dWdpblZpZXcuaApAQCAtMzc5LDcgKzM3OSw3IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKICAgICAg
ICAgYm9vbCBtX2hhdmVVcGRhdGVkUGx1Z2luV2lkZ2V0OwogI2VuZGlmCiAKLSNpZiAoKFBMQVRG
T1JNKFFUKSB8fCBQTEFURk9STShXWCkpICYmIE9TKFdJTkRPV1MpKSB8fCBkZWZpbmVkKFhQX01B
Q09TWCkKKyNpZiAoKFBMQVRGT1JNKFFUKSB8fCBQTEFURk9STShXWCkpICYmIE9TKFdJTkRPV1Mp
KSB8fCBkZWZpbmVkKFhQX01BQ09TWCkgfHwgUExBVEZPUk0oRUZMKQogICAgICAgICAvLyBPbiBN
YWMgT1NYIGFuZCBRdC9XaW5kb3dzIHRoZSBwbHVnaW4gZG9lcyBub3QgaGF2ZSBpdHMgb3duIG5h
dGl2ZSB3aWRnZXQsCiAgICAgICAgIC8vIGJ1dCBpcyB1c2luZyB0aGUgY29udGFpbmluZyB3aW5k
b3cgYXMgaXRzIHJlZmVyZW5jZSBmb3IgcG9zaXRpb25pbmcvcGFpbnRpbmcuCiAgICAgICAgIFBs
YXRmb3JtUGx1Z2luV2lkZ2V0IG1fd2luZG93OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
cGx1Z2lucy9lZmwvUGx1Z2luRGF0YUVmbC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbHVnaW5zL2Vm
bC9QbHVnaW5EYXRhRWZsLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5j
MjFkNTFiCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvcGx1Z2lucy9lZmwvUGx1
Z2luRGF0YUVmbC5jcHAKQEAgLTAsMCArMSw2NiBAQAorLyoKKyAgICBDb3B5cmlnaHQgKEMpIDIw
MDYsIDIwMDcgQXBwbGUgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAgICBDb3B5cmlnaHQg
KEMpIDIwMDggVHJvbGx0ZWNoIEFTQQorICAgIENvcHlyaWdodCAoQykgMjAwOCBDb2xsYWJvcmEg
THRkLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICAgIENvcHlyaWdodCAoQykgMjAwOCBJTmRUIC0g
SW5zdGl0dXRvIE5va2lhIGRlIFRlY25vbG9naWEKKyAgICBDb3B5cmlnaHQgKEMpIDIwMDktMjAx
MCBQcm9GVVNJT04gZW1iZWRkZWQgc3lzdGVtcworICAgIENvcHlyaWdodCAoQykgMjAwOS0yMDEx
IFNhbXN1bmcgRWxlY3Ryb25pY3MKKworICAgIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJl
OyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAgICBtb2RpZnkgaXQgdW5kZXIgdGhl
IHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworICAgIExpY2Vuc2UgYXMg
cHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICAgIHZl
cnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVy
c2lvbi4KKworICAgIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0
IGl0IHdpbGwgYmUgdXNlZnVsLAorICAgIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91
dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJ
VE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAgICBMaWJyYXJ5
IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKworICAgIFlvdSBzaG91
bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGlj
IExpY2Vuc2UKKyAgICBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJ
TkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bworICAgIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRp
b24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCisgICAgQm9zdG9uLCBN
QSAwMjExMC0xMzAxLCBVU0EuCisqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAi
UGx1Z2luRGF0YS5oIgorCisjaW5jbHVkZSAiUGx1Z2luRGF0YWJhc2UuaCIKKyNpbmNsdWRlICJQ
bHVnaW5QYWNrYWdlLmgiCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKwordm9pZCBQbHVnaW5EYXRh
Ojppbml0UGx1Z2lucyhjb25zdCBQYWdlKikKK3sKKyAgICBjb25zdCBWZWN0b3I8UGx1Z2luUGFj
a2FnZSo+JiBwbHVnaW5zID0gUGx1Z2luRGF0YWJhc2U6Omluc3RhbGxlZFBsdWdpbnMoKS0+cGx1
Z2lucygpOworCisgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBwbHVnaW5zLnNpemUoKTsgKytp
KSB7CisgICAgICAgIFBsdWdpblBhY2thZ2UqIHBhY2thZ2UgPSBwbHVnaW5zW2ldOworICAgICAg
ICBQbHVnaW5JbmZvIGluZm87CisKKyAgICAgICAgaW5mby5uYW1lID0gcGFja2FnZS0+bmFtZSgp
OworICAgICAgICBpbmZvLmZpbGUgPSBwYWNrYWdlLT5maWxlTmFtZSgpOworICAgICAgICBpbmZv
LmRlc2MgPSBwYWNrYWdlLT5kZXNjcmlwdGlvbigpOworCisgICAgICAgIGNvbnN0IE1JTUVUb0Rl
c2NyaXB0aW9uc01hcCYgbWltZVRvRGVzY3JpcHRpb25zID0gcGFja2FnZS0+bWltZVRvRGVzY3Jp
cHRpb25zKCk7CisgICAgICAgIE1JTUVUb0Rlc2NyaXB0aW9uc01hcDo6Y29uc3RfaXRlcmF0b3Ig
ZW5kID0gbWltZVRvRGVzY3JpcHRpb25zLmVuZCgpOworICAgICAgICBmb3IgKE1JTUVUb0Rlc2Ny
aXB0aW9uc01hcDo6Y29uc3RfaXRlcmF0b3IgaXQgPSBtaW1lVG9EZXNjcmlwdGlvbnMuYmVnaW4o
KTsgaXQgIT0gZW5kOyArK2l0KSB7CisgICAgICAgICAgICBNaW1lQ2xhc3NJbmZvIG1pbWU7CisK
KyAgICAgICAgICAgIG1pbWUudHlwZSA9IGl0LT5maXJzdDsKKyAgICAgICAgICAgIG1pbWUuZGVz
YyA9IGl0LT5zZWNvbmQ7CisgICAgICAgICAgICBtaW1lLmV4dGVuc2lvbnMgPSBwYWNrYWdlLT5t
aW1lVG9FeHRlbnNpb25zKCkuZ2V0KG1pbWUudHlwZSk7CisKKyAgICAgICAgICAgIGluZm8ubWlt
ZXMuYXBwZW5kKG1pbWUpOworICAgICAgICB9CisKKyAgICAgICAgbV9wbHVnaW5zLmFwcGVuZChp
bmZvKTsKKyAgICB9Cit9CisKK3ZvaWQgUGx1Z2luRGF0YTo6cmVmcmVzaCgpCit7CisgICAgUGx1
Z2luRGF0YWJhc2U6Omluc3RhbGxlZFBsdWdpbnMoKS0+cmVmcmVzaCgpOworfQorCit9OwpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGx1Z2lucy9lZmwvUGx1Z2luUGFja2FnZUVmbC5jcHAg
Yi9Tb3VyY2UvV2ViQ29yZS9wbHVnaW5zL2VmbC9QbHVnaW5QYWNrYWdlRWZsLmNwcApuZXcgZmls
ZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yMThhZWE2Ci0tLSAvZGV2L251bGwKKysrIGIv
U291cmNlL1dlYkNvcmUvcGx1Z2lucy9lZmwvUGx1Z2luUGFja2FnZUVmbC5jcHAKQEAgLTAsMCAr
MSwxNjggQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDYsIDIwMDcgQXBwbGUgSW5jLiAgQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAwOCBDb2xsYWJvcmEgTHRkLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDA4IE51YW50aSBMdGQuCisg
KiBDb3B5cmlnaHQgKEMpIDIwMDggSU5kVCAtIEluc3RpdHV0byBOb2tpYSBkZSBUZWNub2xvZ2lh
CisgKiBDb3B5cmlnaHQgKEMpIDIwMDktMjAxMCBQcm9GVVNJT04gZW1iZWRkZWQgc3lzdGVtcwor
ICogQ29weXJpZ2h0IChDKSAyMDA5LTIwMTEgU2Ftc3VuZyBFbGVjdHJvbmljcworICoKKyAqIFJl
ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig
d2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl
IGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25z
IG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0
aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9u
IGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgor
ICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQ09NUFVURVIsIElOQy4g
YGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0Yg
TUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0Ug
QVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBDT01QVVRFUiwgSU5DLiBP
UgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElO
Q0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdF
UyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJT
VElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJ
VFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBU
SEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJ
TElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJ
U0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVO
IElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNp
bmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJQbHVnaW5QYWNrYWdlLmgiCisKKyNpbmNsdWRl
ICJNSU1FVHlwZVJlZ2lzdHJ5LmgiCisjaW5jbHVkZSAiTm90SW1wbGVtZW50ZWQuaCIKKyNpbmNs
dWRlICJQbHVnaW5EYXRhYmFzZS5oIgorI2luY2x1ZGUgIlBsdWdpbkRlYnVnLmgiCisjaW5jbHVk
ZSAibnBydW50aW1lX2ltcGwuaCIKKworI2luY2x1ZGUgPEVpbmEuaD4KKyNpbmNsdWRlIDxkbGZj
bi5oPgorI2luY2x1ZGUgPHd0Zi90ZXh0L0NTdHJpbmcuaD4KKworbmFtZXNwYWNlIFdlYkNvcmUg
eworCit0eXBlZGVmIGNoYXIqICgqTlBQX0dldE1JTUVEZXNjcmlwdGlvblByb2NQdHIpKCk7CisK
K2Jvb2wgUGx1Z2luUGFja2FnZTo6ZmV0Y2hJbmZvKCkKK3sKKyAgICBjb25zdCBjaGFyICplcnJt
c2c7CisKKyAgICBpZiAoIWxvYWQoKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgTlBQ
X0dldFZhbHVlUHJvY1B0ciBnZXRWYWx1ZSA9IDA7CisgICAgTlBQX0dldE1JTUVEZXNjcmlwdGlv
blByb2NQdHIgZ2V0TUlNRURlc2NyaXB0aW9uID0gMDsKKworICAgIGdldFZhbHVlID0gcmVpbnRl
cnByZXRfY2FzdDxOUFBfR2V0VmFsdWVQcm9jUHRyPihkbHN5bShtX21vZHVsZSwgIk5QX0dldFZh
bHVlIikpOworICAgIGlmICgoZXJybXNnID0gZGxlcnJvcigpKSkgeworICAgICAgICBFSU5BX0xP
R19FUlIoIkNvdWxkIG5vdCBnZXQgc3ltYm9sIE5QX0dldFZhbHVlOiAlcyIsIGVycm1zZyk7Cisg
ICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisKKyAgICBnZXRNSU1FRGVzY3JpcHRpb24gPSBy
ZWludGVycHJldF9jYXN0PE5QUF9HZXRNSU1FRGVzY3JpcHRpb25Qcm9jUHRyPihkbHN5bShtX21v
ZHVsZSwgIk5QX0dldE1JTUVEZXNjcmlwdGlvbiIpKTsKKyAgICBpZiAoKGVycm1zZyA9IGRsZXJy
b3IoKSkpIHsKKyAgICAgICAgRUlOQV9MT0dfRVJSKCJDb3VsZCBub3QgZ2V0IHN5bWJvbCBOUF9H
ZXRNSU1FRGVzY3JpcHRpb246ICVzIiwgZXJybXNnKTsKKyAgICAgICAgcmV0dXJuIGZhbHNlOwor
ICAgIH0KKworICAgIGNoYXIqIGJ1ZmZlciA9IDA7CisgICAgTlBFcnJvciBlcnIgPSBnZXRWYWx1
ZSgwLCBOUFBWcGx1Z2luTmFtZVN0cmluZywgc3RhdGljX2Nhc3Q8dm9pZCo+KCZidWZmZXIpKTsK
KyAgICBpZiAoZXJyICE9IE5QRVJSX05PX0VSUk9SKQorICAgICAgICByZXR1cm4gZmFsc2U7Cisg
ICAgbV9uYW1lID0gYnVmZmVyOworCisgICAgYnVmZmVyID0gMDsKKyAgICBlcnIgPSBnZXRWYWx1
ZSgwLCBOUFBWcGx1Z2luRGVzY3JpcHRpb25TdHJpbmcsIHN0YXRpY19jYXN0PHZvaWQqPigmYnVm
ZmVyKSk7CisgICAgaWYgKGVyciAhPSBOUEVSUl9OT19FUlJPUikKKyAgICAgICAgcmV0dXJuIGZh
bHNlOworICAgIG1fZGVzY3JpcHRpb24gPSBidWZmZXI7CisgICAgZGV0ZXJtaW5lTW9kdWxlVmVy
c2lvbkZyb21EZXNjcmlwdGlvbigpOworCisgICAgU3RyaW5nIGRlc2NyaXB0aW9uID0gZ2V0TUlN
RURlc2NyaXB0aW9uKCk7CisKKyAgICBWZWN0b3I8U3RyaW5nPiB0eXBlczsKKyAgICBkZXNjcmlw
dGlvbi5zcGxpdChVQ2hhcignOycpLCBmYWxzZSwgdHlwZXMpOworCisgICAgZm9yIChzaXplX3Qg
aSA9IDA7IGkgPCB0eXBlcy5zaXplKCk7ICsraSkgeworICAgICAgICBWZWN0b3I8U3RyaW5nPiBt
aW1lOworICAgICAgICB0eXBlc1tpXS5zcGxpdChVQ2hhcignOicpLCB0cnVlLCBtaW1lKTsKKwor
ICAgICAgICBpZiAoIW1pbWUuaXNFbXB0eSgpID4gMCkgeworICAgICAgICAgICAgVmVjdG9yPFN0
cmluZz4gZXh0czsKKworICAgICAgICAgICAgaWYgKG1pbWUuc2l6ZSgpID4gMSkKKyAgICAgICAg
ICAgICAgICBtaW1lWzFdLnNwbGl0KFVDaGFyKCcsJyksIGZhbHNlLCBleHRzKTsKKworICAgICAg
ICAgICAgZGV0ZXJtaW5lUXVpcmtzKG1pbWVbMF0pOworICAgICAgICAgICAgbV9taW1lVG9FeHRl
bnNpb25zLmFkZChtaW1lWzBdLCBleHRzKTsKKworICAgICAgICAgICAgaWYgKG1pbWUuc2l6ZSgp
ID4gMikKKyAgICAgICAgICAgICAgICBtX21pbWVUb0Rlc2NyaXB0aW9ucy5hZGQobWltZVswXSwg
bWltZVsyXSk7CisgICAgICAgIH0KKyAgICB9CisKKyAgICByZXR1cm4gdHJ1ZTsKK30KKwordWlu
dDE2X3QgUGx1Z2luUGFja2FnZTo6TlBWZXJzaW9uKCkgY29uc3QKK3sKKyAgICByZXR1cm4gTlBW
RVJTX0hBU19QTFVHSU5fVEhSRUFEX0FTWU5DX0NBTEw7Cit9CisKK2Jvb2wgUGx1Z2luUGFja2Fn
ZTo6bG9hZCgpCit7CisgICAgY2hhciogZXJybXNnOworCisgICAgaWYgKG1faXNMb2FkZWQpIHsK
KyAgICAgICAgbV9sb2FkQ291bnQrKzsKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgfQorCisg
ICAgbV9tb2R1bGUgPSBkbG9wZW4obV9wYXRoLnV0ZjgoKS5kYXRhKCksIFJUTERfTEFaWSB8IFJU
TERfTE9DQUwpOworICAgIGlmICgoZXJybXNnID0gZGxlcnJvcigpKSkgeworICAgICAgICBFSU5B
X0xPR19XQVJOKCIlcyBub3QgbG9hZGVkOiAlcyIsIG1fcGF0aC51dGY4KCkuZGF0YSgpLCBlcnJt
c2cpOworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorCisgICAgbV9pc0xvYWRlZCA9IHRy
dWU7CisKKyAgICBOUF9Jbml0aWFsaXplRnVuY1B0ciBpbml0aWFsaXplOworICAgIE5QRXJyb3Ig
ZXJyOworCisgICAgaW5pdGlhbGl6ZSA9IChOUF9Jbml0aWFsaXplRnVuY1B0cilkbHN5bShtX21v
ZHVsZSwgIk5QX0luaXRpYWxpemUiKTsKKyAgICBpZiAoKGVycm1zZyA9IGRsZXJyb3IoKSkpIHsK
KyAgICAgICAgRUlOQV9MT0dfRVJSKCJDb3VsZCBub3QgZ2V0IHN5bWJvbCBOUF9Jbml0aWFsaXpl
OiAlcyIsIGVycm1zZyk7CisgICAgICAgIGdvdG8gYWJvcnQ7CisgICAgfQorCisgICAgbV9OUFBf
U2h1dGRvd24gPSAoTlBQX1NodXRkb3duUHJvY1B0cilkbHN5bShtX21vZHVsZSwgIk5QX1NodXRk
b3duIik7CisgICAgaWYgKChlcnJtc2cgPSBkbGVycm9yKCkpKSB7CisgICAgICAgIEVJTkFfTE9H
X0VSUigiQ291bGQgbm90IGdldCBzeW1ib2wgTlBfU2h1dGRvd246ICVzIiwgZXJybXNnKTsKKyAg
ICAgICAgZ290byBhYm9ydDsKKyAgICB9CisKKyAgICBtZW1zZXQoJm1fcGx1Z2luRnVuY3MsIDAs
IHNpemVvZihtX3BsdWdpbkZ1bmNzKSk7CisgICAgbV9wbHVnaW5GdW5jcy5zaXplID0gc2l6ZW9m
KG1fcGx1Z2luRnVuY3MpOworCisgICAgaW5pdGlhbGl6ZUJyb3dzZXJGdW5jcygpOworCisjaWYg
ZGVmaW5lZChYUF9VTklYKQorICAgIGVyciA9IGluaXRpYWxpemUoJm1fYnJvd3NlckZ1bmNzLCAm
bV9wbHVnaW5GdW5jcyk7CisjZWxzZQorICAgIGVyciA9IGluaXRpYWxpemUoJm1fYnJvd3NlckZ1
bmNzKTsKKyNlbmRpZgorICAgIGlmIChlcnIgIT0gTlBFUlJfTk9fRVJST1IpCisgICAgICAgIGdv
dG8gYWJvcnQ7CisKKyAgICBtX2xvYWRDb3VudCsrOworICAgIHJldHVybiB0cnVlOworCithYm9y
dDoKKyAgICBFSU5BX0xPR19EQkcoImZhaWxlZCB0byBsb2FkIHBsdWdpbiwgdW5sb2FkIGl0IHdp
dGhvdXQgc2h1dHRpbmcgaXQgZG93bi4iKTsKKyAgICB1bmxvYWRXaXRob3V0U2h1dGRvd24oKTsK
KyAgICByZXR1cm4gZmFsc2U7Cit9CisKK30KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3Bs
dWdpbnMvZWZsL1BsdWdpblZpZXdFZmwuY3BwIGIvU291cmNlL1dlYkNvcmUvcGx1Z2lucy9lZmwv
UGx1Z2luVmlld0VmbC5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODk5
OTY2MgotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsdWdpbnMvZWZsL1BsdWdp
blZpZXdFZmwuY3BwCkBAIC0wLDAgKzEsMzkyIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA2
LCAyMDA3IEFwcGxlIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMp
IDIwMDggQ29sbGFib3JhIEx0ZC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAo
QykgMjAwOCBJTmRUIC0gSW5zdGl0dXRvIE5va2lhIGRlIFRlY25vbG9naWEKKyAqIENvcHlyaWdo
dCAoQykgMjAwOS0yMDEwIFByb0ZVU0lPTiBlbWJlZGRlZCBzeXN0ZW1zCisgKiBDb3B5cmlnaHQg
KEMpIDIwMDktMjAxMSBTYW1zdW5nIEVsZWN0cm9uaWNzCisgKgorICogUmVkaXN0cmlidXRpb24g
YW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBt
b2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNv
bmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNv
ZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVk
aXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVy
IG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBT
T0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBDT01QVVRFUiwgSU5DLiBgYEFTIElTJycgQU5E
IEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJ
VFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1F
RC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIENPTVBVVEVSLCBJTkMuIE9SCisgKiBDT05UUklC
VVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BF
Q0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMg
T1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5F
U1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0Yg
TElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JU
CisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBX
QVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBP
RiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZp
Zy5oIgorI2luY2x1ZGUgIlBsdWdpblZpZXcuaCIKKworI2luY2x1ZGUgIkZyYW1lVmlldy5oIgor
I2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dC5oIgorI2luY2x1ZGUgIkhUTUxOYW1lcy5oIgorI2lu
Y2x1ZGUgIkhUTUxQbHVnSW5FbGVtZW50LmgiCisjaW5jbHVkZSAiSG9zdFdpbmRvdy5oIgorI2lu
Y2x1ZGUgIk1vdXNlRXZlbnQuaCIKKyNpbmNsdWRlICJOb3RJbXBsZW1lbnRlZC5oIgorI2luY2x1
ZGUgIlBsdWdpblBhY2thZ2UuaCIKKyNpbmNsdWRlICJucHJ1bnRpbWVfaW1wbC5oIgorI2luY2x1
ZGUgInJ1bnRpbWUvSlNMb2NrLmgiCisjaW5jbHVkZSA8RWNvcmVfRXZhcy5oPgorI2luY2x1ZGUg
PEVjb3JlX1guaD4KKyNpbmNsdWRlIDxFdmFzLmg+CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKwor
dXNpbmcgbmFtZXNwYWNlIEhUTUxOYW1lczsKKworI2lmIEVOQUJMRShORVRTQ0FQRV9QTFVHSU5f
QVBJKQorYm9vbCBQbHVnaW5WaWV3OjpkaXNwYXRjaE5QRXZlbnQoTlBFdmVudCYgZXZlbnQpCit7
CisgICAgaWYgKCFtX3BsdWdpbi0+cGx1Z2luRnVuY3MoKS0+ZXZlbnQpCisgICAgICAgIHJldHVy
biBmYWxzZTsKKworICAgIFBsdWdpblZpZXc6OnNldEN1cnJlbnRQbHVnaW5WaWV3KHRoaXMpOwor
ICAgIEpTQzo6SlNMb2NrOjpEcm9wQWxsTG9ja3MgZHJvcEFsbExvY2tzKGZhbHNlKTsKKyAgICBz
ZXRDYWxsaW5nUGx1Z2luKHRydWUpOworCisgICAgYm9vbCBhY2NlcHRlZCA9IG1fcGx1Z2luLT5w
bHVnaW5GdW5jcygpLT5ldmVudChtX2luc3RhbmNlLCAmZXZlbnQpOworCisgICAgc2V0Q2FsbGlu
Z1BsdWdpbihmYWxzZSk7CisgICAgUGx1Z2luVmlldzo6c2V0Q3VycmVudFBsdWdpblZpZXcoMCk7
CisgICAgcmV0dXJuIGFjY2VwdGVkOworfQorI2VuZGlmCisKK3ZvaWQgUGx1Z2luVmlldzo6aGFs
dCgpCit7CisgICAgbm90SW1wbGVtZW50ZWQoKTsKK30KKworI2lmIGRlZmluZWQoWFBfVU5JWCkg
JiYgRU5BQkxFKE5FVFNDQVBFX1BMVUdJTl9BUEkpCit2b2lkIFBsdWdpblZpZXc6OmhhbmRsZUZv
Y3VzSW5FdmVudCgpCit7CisgICAgbm90SW1wbGVtZW50ZWQoKTsKK30KKwordm9pZCBQbHVnaW5W
aWV3OjpoYW5kbGVGb2N1c091dEV2ZW50KCkKK3sKKyAgICBub3RJbXBsZW1lbnRlZCgpOworfQor
I2VuZGlmCisKK3ZvaWQgUGx1Z2luVmlldzo6cmVzdGFydCgpCit7CisgICAgbm90SW1wbGVtZW50
ZWQoKTsKK30KKwordm9pZCBQbHVnaW5WaWV3OjpoYW5kbGVLZXlib2FyZEV2ZW50KEtleWJvYXJk
RXZlbnQqKQoreworICAgIG5vdEltcGxlbWVudGVkKCk7Cit9CisKK3ZvaWQgUGx1Z2luVmlldzo6
aGFuZGxlTW91c2VFdmVudChNb3VzZUV2ZW50KiBldmVudCkKK3sKKyNpZiBFTkFCTEUoTkVUU0NB
UEVfUExVR0lOX0FQSSkKKyAgICBOUEV2ZW50IHhFdmVudDsKKworICAgIEludFJlY3QgcCA9IHN0
YXRpY19jYXN0PEZyYW1lVmlldyo+KHBhcmVudCgpKS0+Y29udGVudHNUb1NjcmVlbihJbnRSZWN0
KDAsIDAsIGV2ZW50LT5vZmZzZXRYKCksIGV2ZW50LT5vZmZzZXRZKCkpKTsKKyAgICBpZiAoZXZl
bnQtPnR5cGUoKSA9PSBldmVudE5hbWVzKCkubW91c2Vtb3ZlRXZlbnQKKyAgICAgICAgICAgIHx8
IGV2ZW50LT50eXBlKCkgPT0gZXZlbnROYW1lcygpLm1vdXNlb3V0RXZlbnQKKyAgICAgICAgICAg
IHx8IGV2ZW50LT50eXBlKCkgPT0gZXZlbnROYW1lcygpLm1vdXNlb3ZlckV2ZW50KSB7CisgICAg
ICAgIHhFdmVudC50eXBlID0gTW90aW9uTm90aWZ5OworICAgICAgICB4RXZlbnQueG1vdGlvbi54
ID0gcC53aWR0aCgpOworICAgICAgICB4RXZlbnQueG1vdGlvbi55ID0gcC5oZWlnaHQoKTsKKyAg
ICB9IGVsc2UgaWYgKGV2ZW50LT50eXBlKCkgPT0gZXZlbnROYW1lcygpLm1vdXNlZG93bkV2ZW50
KSB7CisgICAgICAgIHhFdmVudC50eXBlID0gQnV0dG9uUHJlc3M7CisgICAgICAgIHhFdmVudC54
YnV0dG9uLnggPSBwLndpZHRoKCk7CisgICAgICAgIHhFdmVudC54YnV0dG9uLnkgPSBwLmhlaWdo
dCgpOworICAgICAgICB4RXZlbnQueGJ1dHRvbi5idXR0b24gPSBldmVudC0+YnV0dG9uKCkgKyAx
OyAvLyBET00gTW91c2VFdmVudCBjb3VudHMgZnJvbSAwLCBhbmQgWEJ1dHRvbkV2ZW50IGZyb20g
MQorICAgIH0gZWxzZSBpZiAoZXZlbnQtPnR5cGUoKSA9PSBldmVudE5hbWVzKCkubW91c2V1cEV2
ZW50KSB7CisgICAgICAgIHhFdmVudC50eXBlID0gQnV0dG9uUmVsZWFzZTsKKyAgICAgICAgeEV2
ZW50LnhidXR0b24ueCA9IHAud2lkdGgoKTsKKyAgICAgICAgeEV2ZW50LnhidXR0b24ueSA9IHAu
aGVpZ2h0KCk7CisgICAgICAgIHhFdmVudC54YnV0dG9uLmJ1dHRvbiA9IGV2ZW50LT5idXR0b24o
KSArIDE7CisgICAgfSBlbHNlCisgICAgICAgIHJldHVybjsKKworICAgIGlmIChkaXNwYXRjaE5Q
RXZlbnQoeEV2ZW50KSkKKyAgICAgICAgZXZlbnQtPnNldERlZmF1bHRIYW5kbGVkKCk7CisjZWxz
ZQorICAgIG5vdEltcGxlbWVudGVkKCk7CisgICAgcmV0dXJuOworI2VuZGlmCit9CisKK3ZvaWQg
UGx1Z2luVmlldzo6dXBkYXRlUGx1Z2luV2lkZ2V0KCkKK3sKKyAgICBpZiAoIXBhcmVudCgpIHx8
ICFtX2lzV2luZG93ZWQpCisgICAgICAgIHJldHVybjsKKworICAgIEFTU0VSVChwYXJlbnQoKS0+
aXNGcmFtZVZpZXcoKSk7CisgICAgRnJhbWVWaWV3KiBmcmFtZVZpZXcgPSBzdGF0aWNfY2FzdDxG
cmFtZVZpZXcqPihwYXJlbnQoKSk7CisKKyAgICBJbnRSZWN0IG9sZFdpbmRvd1JlY3QgPSBtX3dp
bmRvd1JlY3Q7CisgICAgSW50UmVjdCBvbGRDbGlwUmVjdCA9IG1fY2xpcFJlY3Q7CisKKyAgICBt
X3dpbmRvd1JlY3QgPSBmcmFtZVZpZXctPmNvbnRlbnRzVG9TY3JlZW4oZnJhbWVSZWN0KCkpOwor
CisgICAgbV9jbGlwUmVjdCA9IHdpbmRvd0NsaXBSZWN0KCk7CisgICAgbV9jbGlwUmVjdC5tb3Zl
KC1tX3dpbmRvd1JlY3QueCgpLCAtbV93aW5kb3dSZWN0LnkoKSk7Cit9CisKK3ZvaWQgUGx1Z2lu
Vmlldzo6c2V0Rm9jdXMoYm9vbCBmb2N1c2VkKQoreworICAgIGlmIChmb2N1c2VkKQorICAgICAg
ICBtX2VsZW1lbnQtPmRvY3VtZW50KCktPnNldEZvY3VzZWROb2RlKG1fZWxlbWVudCk7CisKKyAg
ICBXaWRnZXQ6OnNldEZvY3VzKGZvY3VzZWQpOworfQorCit2b2lkIFBsdWdpblZpZXc6OnNob3co
KQoreworICAgIHNldFNlbGZWaXNpYmxlKHRydWUpOworCisgICAgV2lkZ2V0OjpzaG93KCk7Cit9
CisKK3ZvaWQgUGx1Z2luVmlldzo6aGlkZSgpCit7CisgICAgc2V0U2VsZlZpc2libGUoZmFsc2Up
OworCisgICAgV2lkZ2V0OjpoaWRlKCk7Cit9CisKK3ZvaWQgUGx1Z2luVmlldzo6cGFpbnQoR3Jh
cGhpY3NDb250ZXh0KiBjb250ZXh0LCBjb25zdCBJbnRSZWN0JiByZWN0KQoreworICAgIEludFJl
Y3QgZnJSZWN0ID0gZnJhbWVSZWN0KCk7CisKKyAgICBpZiAoIW1faXNTdGFydGVkKSB7CisgICAg
ICAgIHBhaW50TWlzc2luZ1BsdWdpbkljb24oY29udGV4dCwgcmVjdCk7CisgICAgICAgIHJldHVy
bjsKKyAgICB9CisKKyAgICBpZiAoY29udGV4dC0+cGFpbnRpbmdEaXNhYmxlZCgpKQorICAgICAg
ICByZXR1cm47CisKKyAgICBpZiAobV9pc1dpbmRvd2VkIHx8IGNvbnRleHQtPnBhaW50aW5nRGlz
YWJsZWQoKSkKKyAgICAgICAgcmV0dXJuOworfQorCit2b2lkIFBsdWdpblZpZXc6OnNldFBhcmVu
dChTY3JvbGxWaWV3KiBwYXJlbnQpCit7CisgICAgV2lkZ2V0OjpzZXRQYXJlbnQocGFyZW50KTsK
KworICAgIGlmIChwYXJlbnQpCisgICAgICAgIGluaXQoKTsKKyAgICBlbHNlIGlmICghcGxhdGZv
cm1QbHVnaW5XaWRnZXQoKSkKKyAgICAgICAgcmV0dXJuOworfQorCit2b2lkIFBsdWdpblZpZXc6
OnNldE5QV2luZG93UmVjdChjb25zdCBJbnRSZWN0JiByZWN0KQoreworICAgIG5vdEltcGxlbWVu
dGVkKCk7CisgICAgcmV0dXJuOworfQorCit2b2lkIFBsdWdpblZpZXc6OnNldE5QV2luZG93SWZO
ZWVkZWQoKQoreworfQorCit2b2lkIFBsdWdpblZpZXc6OnNldFBhcmVudFZpc2libGUoYm9vbCB2
aXNpYmxlKQoreworICAgIGlmIChpc1BhcmVudFZpc2libGUoKSA9PSB2aXNpYmxlKQorICAgICAg
ICByZXR1cm47CisKKyAgICBXaWRnZXQ6OnNldFBhcmVudFZpc2libGUodmlzaWJsZSk7Cit9CisK
KyNpZiBFTkFCTEUoTkVUU0NBUEVfUExVR0lOX0FQSSkKK05QRXJyb3IgUGx1Z2luVmlldzo6aGFu
ZGxlUG9zdFJlYWRGaWxlKFZlY3RvcjxjaGFyPiYgYnVmZmVyLCB1aW50MzJfdCBsZW4sIGNvbnN0
IGNoYXIqIGJ1ZikKK3sKKyAgICBTdHJpbmcgZmlsZW5hbWUoYnVmLCBsZW4pOworCisgICAgaWYg
KGZpbGVuYW1lLnN0YXJ0c1dpdGgoImZpbGU6Ly8vIikpCisgICAgICAgIGZpbGVuYW1lID0gZmls
ZW5hbWUuc3Vic3RyaW5nKDgpOworCisgICAgaWYgKCFmaWxlRXhpc3RzKGZpbGVuYW1lKSkKKyAg
ICAgICAgcmV0dXJuIE5QRVJSX0ZJTEVfTk9UX0ZPVU5EOworCisgICAgRklMRSogZmlsZUhhbmRs
ZSA9IGZvcGVuKGZpbGVuYW1lLnV0ZjgoKS5kYXRhKCksICJyIik7CisKKyAgICBpZiAoIWZpbGVI
YW5kbGUpCisgICAgICAgIHJldHVybiBOUEVSUl9GSUxFX05PVF9GT1VORDsKKworICAgIGludCBi
eXRlc1JlYWQgPSBmcmVhZChidWZmZXIuZGF0YSgpLCAxLCAwLCBmaWxlSGFuZGxlKTsKKworICAg
IGZjbG9zZShmaWxlSGFuZGxlKTsKKworICAgIGlmIChieXRlc1JlYWQgPD0gMCkKKyAgICAgICAg
cmV0dXJuIE5QRVJSX0ZJTEVfTk9UX0ZPVU5EOworCisgICAgcmV0dXJuIE5QRVJSX05PX0VSUk9S
OworfQorI2VuZGlmCisKKyNpZiBFTkFCTEUoTkVUU0NBUEVfUExVR0lOX0FQSSkKK2Jvb2wgUGx1
Z2luVmlldzo6cGxhdGZvcm1HZXRWYWx1ZVN0YXRpYyhOUE5WYXJpYWJsZSB2YXJpYWJsZSwgdm9p
ZCogdmFsdWUsIE5QRXJyb3IqIHJlc3VsdCkKK3sKKyAgICBzd2l0Y2ggKHZhcmlhYmxlKSB7Cisg
ICAgY2FzZSBOUE5WVG9vbGtpdDoKKyAgICAgICAgKnN0YXRpY19jYXN0PHVpbnQzMl90Kj4odmFs
dWUpID0gMDsKKyAgICAgICAgKnJlc3VsdCA9IE5QRVJSX05PX0VSUk9SOworICAgICAgICByZXR1
cm4gdHJ1ZTsKKworICAgIGNhc2UgTlBOVlN1cHBvcnRzWEVtYmVkQm9vbDoKKyAgICAgICAgKnN0
YXRpY19jYXN0PE5QQm9vbCo+KHZhbHVlKSA9IGZhbHNlOworICAgICAgICAqcmVzdWx0ID0gTlBF
UlJfTk9fRVJST1I7CisgICAgICAgIHJldHVybiB0cnVlOworCisgICAgY2FzZSBOUE5WamF2YXNj
cmlwdEVuYWJsZWRCb29sOgorICAgICAgICAqc3RhdGljX2Nhc3Q8TlBCb29sKj4odmFsdWUpID0g
dHJ1ZTsKKyAgICAgICAgKnJlc3VsdCA9IE5QRVJSX05PX0VSUk9SOworICAgICAgICByZXR1cm4g
dHJ1ZTsKKworICAgIGNhc2UgTlBOVlN1cHBvcnRzV2luZG93bGVzczoKKyAgICAgICAgKnN0YXRp
Y19jYXN0PE5QQm9vbCo+KHZhbHVlKSA9IGZhbHNlOworICAgICAgICAqcmVzdWx0ID0gTlBFUlJf
Tk9fRVJST1I7CisgICAgICAgIHJldHVybiB0cnVlOworCisgICAgZGVmYXVsdDoKKyAgICAgICAg
cmV0dXJuIGZhbHNlOworICAgIH0KK30KKworYm9vbCBQbHVnaW5WaWV3OjpwbGF0Zm9ybUdldFZh
bHVlKE5QTlZhcmlhYmxlIHZhcmlhYmxlLCB2b2lkKiB2YWx1ZSwgTlBFcnJvciogcmVzdWx0KQor
eworICAgIGlmICghdmFsdWUgfHwgIXJlc3VsdCkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisg
ICAgc3dpdGNoICh2YXJpYWJsZSkgeworICAgIGNhc2UgTlBOVnhEaXNwbGF5OgorICAgICAgICAq
c3RhdGljX2Nhc3Q8dm9pZCAqKj4odmFsdWUpID0gc3RhdGljX2Nhc3Q8RGlzcGxheSo+KGVjb3Jl
X3hfZGlzcGxheV9nZXQoKSk7CisgICAgICAgICpyZXN1bHQgPSBOUEVSUl9OT19FUlJPUjsKKyAg
ICAgICAgcmV0dXJuIHRydWU7CisKKyAgICBjYXNlIE5QTlZ4dEFwcENvbnRleHQ6CisgICAgICAg
ICpyZXN1bHQgPSBOUEVSUl9HRU5FUklDX0VSUk9SOworICAgICAgICByZXR1cm4gdHJ1ZTsKKwor
I2lmIEVOQUJMRShORVRTQ0FQRV9QTFVHSU5fQVBJKQorICAgIGNhc2UgTlBOVldpbmRvd05QT2Jq
ZWN0OiB7CisgICAgICAgIGlmIChtX2lzSmF2YVNjcmlwdFBhdXNlZCkgeworICAgICAgICAgICAg
KnJlc3VsdCA9IE5QRVJSX0dFTkVSSUNfRVJST1I7CisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsK
KyAgICAgICAgfQorCisgICAgICAgIE5QT2JqZWN0KiB3aW5kb3dTY3JpcHRPYmplY3QgPSBtX3Bh
cmVudEZyYW1lLT5zY3JpcHQoKS0+d2luZG93U2NyaXB0TlBPYmplY3QoKTsKKworICAgICAgICAv
LyBSZXR1cm4gdmFsdWUgaXMgZXhwZWN0ZWQgdG8gYmUgcmV0YWluZWQsIGFzIGRlc2NyaWJlZCBo
ZXJlOiA8aHR0cDovL3d3dy5tb3ppbGxhLm9yZy9wcm9qZWN0cy9wbHVnaW4vbnBydW50aW1lLmh0
bWw+CisgICAgICAgIGlmICh3aW5kb3dTY3JpcHRPYmplY3QpCisgICAgICAgICAgICBfTlBOX1Jl
dGFpbk9iamVjdCh3aW5kb3dTY3JpcHRPYmplY3QpOworCisgICAgICAgIHZvaWQqKiB2ID0gKHZv
aWQqKil2YWx1ZTsKKyAgICAgICAgKnYgPSB3aW5kb3dTY3JpcHRPYmplY3Q7CisKKyAgICAgICAg
KnJlc3VsdCA9IE5QRVJSX05PX0VSUk9SOworICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CisK
KyAgICBjYXNlIE5QTlZQbHVnaW5FbGVtZW50TlBPYmplY3Q6IHsKKyAgICAgICAgaWYgKG1faXNK
YXZhU2NyaXB0UGF1c2VkKSB7CisgICAgICAgICAgICAqcmVzdWx0ID0gTlBFUlJfR0VORVJJQ19F
UlJPUjsKKyAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICB9CisKKyAgICAgICAgTlBP
YmplY3QqIHBsdWdpblNjcmlwdE9iamVjdCA9IDA7CisKKyAgICAgICAgaWYgKG1fZWxlbWVudC0+
aGFzVGFnTmFtZShhcHBsZXRUYWcpIHx8IG1fZWxlbWVudC0+aGFzVGFnTmFtZShlbWJlZFRhZykg
fHwgbV9lbGVtZW50LT5oYXNUYWdOYW1lKG9iamVjdFRhZykpCisgICAgICAgICAgICBwbHVnaW5T
Y3JpcHRPYmplY3QgPSBzdGF0aWNfY2FzdDxIVE1MUGx1Z0luRWxlbWVudCo+KG1fZWxlbWVudCkt
PmdldE5QT2JqZWN0KCk7CisKKyAgICAgICAgLy8gUmV0dXJuIHZhbHVlIGlzIGV4cGVjdGVkIHRv
IGJlIHJldGFpbmVkLCBhcyBkZXNjcmliZWQgaGVyZTogPGh0dHA6Ly93d3cubW96aWxsYS5vcmcv
cHJvamVjdHMvcGx1Z2luL25wcnVudGltZS5odG1sPgorICAgICAgICBpZiAocGx1Z2luU2NyaXB0
T2JqZWN0KQorICAgICAgICAgICAgX05QTl9SZXRhaW5PYmplY3QocGx1Z2luU2NyaXB0T2JqZWN0
KTsKKworICAgICAgICB2b2lkKiogdiA9ICh2b2lkKiopdmFsdWU7CisgICAgICAgICp2ID0gcGx1
Z2luU2NyaXB0T2JqZWN0OworCisgICAgICAgICpyZXN1bHQgPSBOUEVSUl9OT19FUlJPUjsKKyAg
ICAgICAgcmV0dXJuIHRydWU7CisgICAgfQorI2VuZGlmCisKKyAgICBjYXNlIE5QTlZuZXRzY2Fw
ZVdpbmRvdzogeworICAgICAgICB2b2lkKiB3ID0gcmVpbnRlcnByZXRfY2FzdDx2b2lkKj4odmFs
dWUpOworICAgICAgICBFdmFzX09iamVjdCogd2lkZ2V0ID0gbV9wYXJlbnRGcmFtZS0+dmlldygp
LT5ob3N0V2luZG93KCktPnBsYXRmb3JtUGFnZUNsaWVudCgpOworICAgICAgICBFdmFzKiBldmFz
ID0gZXZhc19vYmplY3RfZXZhc19nZXQod2lkZ2V0KTsKKyAgICAgICAgRWNvcmVfRXZhcyogZWUg
PSBlY29yZV9ldmFzX2Vjb3JlX2V2YXNfZ2V0KGV2YXMpOworICAgICAgICAqKChYSUQgKil3KSA9
IChXaW5kb3cpIGVjb3JlX2V2YXNfd2luZG93X2dldChlZSk7CisgICAgICAgICpyZXN1bHQgPSBO
UEVSUl9OT19FUlJPUjsKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgfQorCisgICAgY2FzZSBO
UE5WVG9vbGtpdDoKKyAgICAgICAgaWYgKG1fcGx1Z2luLT5xdWlya3MoKS5jb250YWlucyhQbHVn
aW5RdWlya1JlcXVpcmVzR3RrVG9vbEtpdCkpIHsKKyAgICAgICAgICAgICooKHVpbnQzMl90ICop
dmFsdWUpID0gMjsKKyAgICAgICAgICAgICpyZXN1bHQgPSBOUEVSUl9OT19FUlJPUjsKKyAgICAg
ICAgICAgIHJldHVybiB0cnVlOworICAgICAgICB9CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAg
ICAgICAgLy8gZmFsbCB0aHJvdWdoCisgICAgZGVmYXVsdDoKKyAgICAgICAgcmV0dXJuIGZhbHNl
OworICAgIH0KK30KKyNlbmRpZgorCit2b2lkIFBsdWdpblZpZXc6OmludmFsaWRhdGVSZWN0KGNv
bnN0IEludFJlY3QmIHJlY3QpCit7CisgICAgaW52YWxpZGF0ZVdpbmRvd2xlc3NQbHVnaW5SZWN0
KHJlY3QpOworfQorCisjaWYgRU5BQkxFKE5FVFNDQVBFX1BMVUdJTl9BUEkpCit2b2lkIFBsdWdp
blZpZXc6OmludmFsaWRhdGVSZWN0KE5QUmVjdCogcmVjdCkKK3sKKyAgICBpZiAoIXJlY3QpIHsK
KyAgICAgICAgaW52YWxpZGF0ZSgpOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgSW50
UmVjdCByKHJlY3QtPmxlZnQsIHJlY3QtPnRvcCwgcmVjdC0+cmlnaHQgLSByZWN0LT5sZWZ0LCBy
ZWN0LT5ib3R0b20gLSByZWN0LT50b3ApOworCisgICAgaW52YWxpZGF0ZVJlY3Qocik7Cit9CisK
K3ZvaWQgUGx1Z2luVmlldzo6aW52YWxpZGF0ZVJlZ2lvbihOUFJlZ2lvbiByZWdpb24pCit7Cisg
ICAgbm90SW1wbGVtZW50ZWQoKTsKK30KKyNlbmRpZgorCit2b2lkIFBsdWdpblZpZXc6OmZvcmNl
UmVkcmF3KCkKK3sKKyAgICBub3RJbXBsZW1lbnRlZCgpOworfQorCitib29sIFBsdWdpblZpZXc6
OnBsYXRmb3JtU3RhcnQoKQoreworICAgIEFTU0VSVChtX2lzU3RhcnRlZCk7CisgICAgQVNTRVJU
KG1fc3RhdHVzID09IFBsdWdpblN0YXR1c0xvYWRlZFN1Y2Nlc3NmdWxseSk7CisKKyAgICBub3RJ
bXBsZW1lbnRlZCgpOworICAgIHJldHVybiB0cnVlOworfQorCit2b2lkIFBsdWdpblZpZXc6OnBs
YXRmb3JtRGVzdHJveSgpCit7Cit9CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJLaXQvZWZsL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJLaXQvZWZsL0NoYW5n
ZUxvZwppbmRleCAwNzA4Y2FmLi40ZWE4NjQxIDEwMDc1NQotLS0gYS9Tb3VyY2UvV2ViS2l0L2Vm
bC9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYktpdC9lZmwvQ2hhbmdlTG9nCkBAIC0xLDMgKzEs
MTMgQEAKKzIwMTEtMDYtMTAgIE1hcml1c3ogR3J6ZWdvcmN6eWsgIDxtYXJpdXN6LmdAc2Ftc3Vu
Zy5jb20+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAg
QnVnIDQ0NTA1IC0gW0VGTF0gTWlzc2luZyBwbHVnaW5zIHN1cHBvcnQgZm9yIGVmbCBwb3J0Cisg
ICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD00NDUwNQorCisg
ICAgICAgICogZXdrL2V3a19mcmFtZS5jcHA6CisgICAgICAgIChld2tfZnJhbWVfcGx1Z2luX2Ny
ZWF0ZSk6CisKIDIwMTEtMDYtMDggIEphZWh1biBMaW0gIDxsamFlaHVuLmxpbUBzYW1zdW5nLmNv
bT4KIAogICAgICAgICBSZXZpZXdlZCBieSBBbnRvbmlvIEdvbWVzLgpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYktpdC9lZmwvZXdrL2V3a19mcmFtZS5jcHAgYi9Tb3VyY2UvV2ViS2l0L2VmbC9ld2sv
ZXdrX2ZyYW1lLmNwcAppbmRleCAzODUzZjg2Li4zNDYxMWNhIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViS2l0L2VmbC9ld2svZXdrX2ZyYW1lLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0L2VmbC9ld2sv
ZXdrX2ZyYW1lLmNwcApAQCAtMjAzNSw1ICsyMDM1LDI0IEBAIHZvaWQgZXdrX2ZyYW1lX2ZvcmNl
X2xheW91dChFdmFzX09iamVjdCogbykKIAogV1RGOjpQYXNzUmVmUHRyPFdlYkNvcmU6OldpZGdl
dD4gZXdrX2ZyYW1lX3BsdWdpbl9jcmVhdGUoRXZhc19PYmplY3QqIG8sIGNvbnN0IFdlYkNvcmU6
OkludFNpemUmIHBsdWdpblNpemUsIFdlYkNvcmU6OkhUTUxQbHVnSW5FbGVtZW50KiBlbGVtZW50
LCBjb25zdCBXZWJDb3JlOjpLVVJMJiB1cmwsIGNvbnN0IFdURjo6VmVjdG9yPFdURjo6U3RyaW5n
PiYgcGFyYW1OYW1lcywgY29uc3QgV1RGOjpWZWN0b3I8V1RGOjpTdHJpbmc+JiBwYXJhbVZhbHVl
cywgY29uc3QgV1RGOjpTdHJpbmcmIG1pbWVUeXBlLCBib29sIGxvYWRNYW51YWxseSkKIHsKKyNp
ZiBFTkFCTEUoTkVUU0NBUEVfUExVR0lOX0FQSSkKKyAgICBEQkcoIm89JXAsIHNpemU9JWR4JWQs
IGVsZW1lbnQ9JXAsIHVybD0lcywgbWltZVR5cGU9JXMiLAorICAgICAgICBvLCBwbHVnaW5TaXpl
LndpZHRoKCksIHBsdWdpblNpemUuaGVpZ2h0KCksIGVsZW1lbnQsCisgICAgICAgIHVybC5wcmV0
dHlVUkwoKS51dGY4KCkuZGF0YSgpLCBtaW1lVHlwZS51dGY4KCkuZGF0YSgpKTsKKworICAgIEVX
S19GUkFNRV9TRF9HRVRfT1JfUkVUVVJOKG8sIHNkLCAwKTsKKworICAgIC8vIFRPRE86IGVtaXQg
c2lnbmFsIGFuZCBhc2sgd2Via2l0IHVzZXJzIGlmIHNvbWV0aGluZyBlbHNlIHNob3VsZCBiZSBk
b25lLgorICAgIC8vIGxpa2UgY3JlYXRpbmcgYW5vdGhlciB4IHdpbmRvdyAoc2VlIGd0aywgaXQg
YWxsb3dzIHVzZXJzIHRvIGNyZWF0ZQorICAgIC8vIEd0a1BsdWdpbldpZGdldC4KKworICAgIFdU
Rjo6UmVmUHRyPFdlYkNvcmU6OlBsdWdpblZpZXc+IHBsdWdpblZpZXcgPSBXZWJDb3JlOjpQbHVn
aW5WaWV3OjpjcmVhdGUKKyAgICAgICAgKHNkLT5mcmFtZSwgcGx1Z2luU2l6ZSwgZWxlbWVudCwg
dXJsLCBwYXJhbU5hbWVzLCBwYXJhbVZhbHVlcywKKyAgICAgICAgbWltZVR5cGUsIGxvYWRNYW51
YWxseSk7CisKKyAgICBpZiAocGx1Z2luVmlldy0+c3RhdHVzKCkgPT0gV2ViQ29yZTo6UGx1Z2lu
U3RhdHVzTG9hZGVkU3VjY2Vzc2Z1bGx5KQorICAgICAgICByZXR1cm4gcGx1Z2luVmlldzsKKyNl
bHNlCiAgICAgcmV0dXJuIDA7CisjZW5kaWYgLy8gI2lmIEVOQUJMRShORVRTQ0FQRV9QTFVHSU5f
QVBJKQogfQo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>96740</attachid>
            <date>2011-06-10 05:38:31 -0700</date>
            <delta_ts>2011-06-14 07:40:26 -0700</delta_ts>
            <desc>EFL&apos;s plugin support</desc>
            <filename>efl_plugins.patch</filename>
            <type>text/plain</type>
            <size>26720</size>
            <attacher name="Mariusz Grzegorczyk">mariusz.g</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cgYi9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvQ2hhbmdlTG9nCmluZGV4IDUzZTUxNzYuLjU3OWQ3NWUgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKKysrIGIvU291cmNlL0phdmFTY3JpcHRD
b3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDE0IEBACisyMDExLTA2LTEwICBNYXJpdXN6IEdyemVn
b3JjenlrICA8bWFyaXVzei5nQHNhbXN1bmcuY29tPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5P
Qk9EWSAoT09QUyEpLgorCisgICAgICAgIEJ1ZyA0NDUwNSAtIFtFRkxdIE1pc3NpbmcgcGx1Z2lu
cyBzdXBwb3J0IGZvciBlZmwgcG9ydAorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9z
aG93X2J1Zy5jZ2k/aWQ9NDQ1MDUKKworICAgICAgICBBZGQgZGVmaW5lIG9mIEVOQUJMRV9QTFVH
SU5fUEFDS0FHRV9TSU1QTEVfSEFTSCBmb3IgZWZsIHBvcnQKKworICAgICAgICAqIHd0Zi9QbGF0
Zm9ybS5oOgorCiAyMDExLTA2LTA4ICBTaGVyaWZmIEJvdCAgPHdlYmtpdC5yZXZpZXcuYm90QGdt
YWlsLmNvbT4KIAogICAgICAgICBVbnJldmlld2VkLCByb2xsaW5nIG91dCByODg0MDQuCmRpZmYg
LS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd3RmL1BsYXRmb3JtLmggYi9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvd3RmL1BsYXRmb3JtLmgKaW5kZXggNGZjNzk2NS4uZDk3MzU4MSAxMDA2NDQK
LS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3d0Zi9QbGF0Zm9ybS5oCisrKyBiL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS93dGYvUGxhdGZvcm0uaApAQCAtMTE2OCw3ICsxMTY4LDcgQEAKICNkZWZp
bmUgV0FSTl9VTlVTRURfUkVUVVJOCiAjZW5kaWYKIAotI2lmICFFTkFCTEUoTkVUU0NBUEVfUExV
R0lOX0FQSSkgfHwgKEVOQUJMRShORVRTQ0FQRV9QTFVHSU5fQVBJKSAmJiAoKE9TKFVOSVgpICYm
IChQTEFURk9STShRVCkgfHwgUExBVEZPUk0oV1gpKSkgfHwgUExBVEZPUk0oR1RLKSkpCisjaWYg
IUVOQUJMRShORVRTQ0FQRV9QTFVHSU5fQVBJKSB8fCAoRU5BQkxFKE5FVFNDQVBFX1BMVUdJTl9B
UEkpICYmICgoT1MoVU5JWCkgJiYgKFBMQVRGT1JNKFFUKSB8fCBQTEFURk9STShXWCkpKSB8fCBQ
TEFURk9STShHVEspIHx8IFBMQVRGT1JNKEVGTCkpKQogI2RlZmluZSBFTkFCTEVfUExVR0lOX1BB
Q0tBR0VfU0lNUExFX0hBU0ggMQogI2VuZGlmCiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L0NNYWtlTGlzdHNFZmwudHh0IGIvU291cmNlL1dlYkNvcmUvQ01ha2VMaXN0c0VmbC50eHQKaW5k
ZXggZDRhMGE2MS4uZTA1NzU3NCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ01ha2VMaXN0
c0VmbC50eHQKKysrIGIvU291cmNlL1dlYkNvcmUvQ01ha2VMaXN0c0VmbC50eHQKQEAgLTExLDYg
KzExLDcgQEAgTElTVChBUFBFTkQgV2ViQ29yZV9JTkNMVURFX0RJUkVDVE9SSUVTCiAgICIke1dF
QkNPUkVfRElSfS9wbGF0Zm9ybS9ncmFwaGljcy9lZmwiCiAgICIke1dFQkNPUkVfRElSfS9wYWdl
L2VmbCIKICAgIiR7V0VCQ09SRV9ESVJ9L2FjY2Vzc2liaWxpdHkvZWZsIgorICAiJHtXRUJDT1JF
X0RJUn0vcGx1Z2lucy9lZmwiCiAgICIke1dFQktJVF9ESVJ9L2VmbC9XZWJDb3JlU3VwcG9ydCIK
ICAgIiR7V0VCS0lUX0RJUn0vZWZsL2V3ayIKICAgIiR7REVSSVZFRF9TT1VSQ0VTX0RJUn0iCkBA
IC03Myw5ICs3NCwyNyBAQCBMSVNUKEFQUEVORCBXZWJDb3JlX1NPVVJDRVMKICAgcGxhdGZvcm0v
aW1hZ2UtZGVjb2RlcnMvd2VicC9XRUJQSW1hZ2VEZWNvZGVyLmNwcAogICBwbGF0Zm9ybS9wb3Np
eC9GaWxlU3lzdGVtUE9TSVguY3BwCiAgIHBsYXRmb3JtL3RleHQvZWZsL1RleHRCcmVha0l0ZXJh
dG9ySW50ZXJuYWxJQ1VFZmwuY3BwCi0gIHBsdWdpbnMvUGx1Z2luRGF0YU5vbmUuY3BwCiApCiAK
K0lGIChFTkFCTEVfTkVUU0NBUEVfUExVR0lOX0FQSSkKKyAgTElTVChBUFBFTkQgV2ViQ29yZV9T
T1VSQ0VTCisgICAgcGx1Z2lucy9QbHVnaW5EYXRhYmFzZS5jcHAKKyAgICBwbHVnaW5zL1BsdWdp
bkRlYnVnLmNwcAorICAgIHBsdWdpbnMvUGx1Z2luUGFja2FnZS5jcHAKKyAgICBwbHVnaW5zL1Bs
dWdpblN0cmVhbS5jcHAKKyAgICBwbHVnaW5zL1BsdWdpblZpZXcuY3BwCisgICAgcGx1Z2lucy9l
ZmwvUGx1Z2luRGF0YUVmbC5jcHAKKyAgICBwbHVnaW5zL2VmbC9QbHVnaW5QYWNrYWdlRWZsLmNw
cAorICAgIHBsdWdpbnMvZWZsL1BsdWdpblZpZXdFZmwuY3BwCisgICkKK0VMU0UgKCkKKyAgTElT
VChBUFBFTkQgV2ViQ29yZV9TT1VSQ0VTCisgICAgcGx1Z2lucy9QbHVnaW5EYXRhTm9uZS5jcHAK
KyAgICBwbHVnaW5zL1BsdWdpblBhY2thZ2VOb25lLmNwcAorICAgIHBsdWdpbnMvUGx1Z2luVmll
d05vbmUuY3BwCisgICkKK0VORElGICgpCisKIExJU1QoQVBQRU5EIFdlYkNvcmVfVVNFUl9BR0VO
VF9TVFlMRV9TSEVFVFMKICAgICAke1dFQkNPUkVfRElSfS9jc3MvbWVkaWFDb250cm9sc0VmbC5j
c3MKICkKQEAgLTE0NCw2ICsxNjMsNyBAQCBJRiAoV1RGX1VTRV9TT1VQKQogICBMSVNUKEFQUEVO
RCBXZWJDb3JlX1NPVVJDRVMKICAgICBwbGF0Zm9ybS9uZXR3b3JrL3NvdXAvQ29va2llSmFyU291
cC5jcHAKICAgICBwbGF0Zm9ybS9uZXR3b3JrL3NvdXAvR093blB0clNvdXAuY3BwCisgICAgcGxh
dGZvcm0vbmV0d29yay9zb3VwL1Byb3h5U2VydmVyU291cC5jcHAKICAgICBwbGF0Zm9ybS9uZXR3
b3JrL3NvdXAvUmVzb3VyY2VIYW5kbGVTb3VwLmNwcAogICAgIHBsYXRmb3JtL25ldHdvcmsvc291
cC9SZXNvdXJjZVJlcXVlc3RTb3VwLmNwcAogICAgIHBsYXRmb3JtL25ldHdvcmsvc291cC9SZXNv
dXJjZVJlc3BvbnNlU291cC5jcHAKQEAgLTE2MCw2ICsxODAsNyBAQCBJRiAoV1RGX1VTRV9DVVJM
KQogICAgIHBsYXRmb3JtL25ldHdvcmsvY3VybC9Db29raWVKYXJDdXJsLmNwcAogICAgIHBsYXRm
b3JtL25ldHdvcmsvY3VybC9ETlNDdXJsLmNwcAogICAgIHBsYXRmb3JtL25ldHdvcmsvY3VybC9G
b3JtRGF0YVN0cmVhbUN1cmwuY3BwCisgICAgcGxhdGZvcm0vbmV0d29yay9jdXJsL1Byb3h5U2Vy
dmVyQ3VybC5jcHAKICAgICBwbGF0Zm9ybS9uZXR3b3JrL2N1cmwvUmVzb3VyY2VIYW5kbGVDdXJs
LmNwcAogICAgIHBsYXRmb3JtL25ldHdvcmsvY3VybC9SZXNvdXJjZUhhbmRsZU1hbmFnZXIuY3Bw
CiAgICAgcGxhdGZvcm0vbmV0d29yay9jdXJsL1NvY2tldFN0cmVhbUhhbmRsZUN1cmwuY3BwCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFu
Z2VMb2cKaW5kZXggNzI1MjIxOC4uYzUxMmQzYyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUv
Q2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDQ5IEBA
CisyMDExLTA2LTEwICBNYXJpdXN6IEdyemVnb3JjenlrICA8bWFyaXVzei5nQHNhbXN1bmcuY29t
PgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIEJ1ZyA0
NDUwNSAtIFtFRkxdIE1pc3NpbmcgcGx1Z2lucyBzdXBwb3J0IGZvciBlZmwgcG9ydAorICAgICAg
ICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NDQ1MDUKKworICAgICAg
ICBCYXNpYyBmdW5jdGlvbmFsaXR5IG9mIHBsdWdpbnMgZm9yIGVmbCBwb3J0CisKKyAgICAgICAg
VGVtcGxhdGUgdmVyc2lvbiwgc28gbm8gbmV3IHRlc3RzIGFyZSBuZWVkZWQuCisKKyAgICAgICAg
KiBDTWFrZUxpc3RzRWZsLnR4dDoKKyAgICAgICAgKiBwbHVnaW5zL1BsdWdpblZpZXcuaDoKKyAg
ICAgICAgKiBwbHVnaW5zL2VmbC9QbHVnaW5EYXRhRWZsLmNwcDogQWRkZWQuCisgICAgICAgIChX
ZWJDb3JlOjpQbHVnaW5EYXRhOjppbml0UGx1Z2lucyk6CisgICAgICAgIChXZWJDb3JlOjpQbHVn
aW5EYXRhOjpyZWZyZXNoKToKKyAgICAgICAgKiBwbHVnaW5zL2VmbC9QbHVnaW5QYWNrYWdlRWZs
LmNwcDogQWRkZWQuCisgICAgICAgIChXZWJDb3JlOjpQbHVnaW5QYWNrYWdlOjpmZXRjaEluZm8p
OgorICAgICAgICAoV2ViQ29yZTo6UGx1Z2luUGFja2FnZTo6TlBWZXJzaW9uKToKKyAgICAgICAg
KFdlYkNvcmU6OlBsdWdpblBhY2thZ2U6OmxvYWQpOgorICAgICAgICAqIHBsdWdpbnMvZWZsL1Bs
dWdpblZpZXdFZmwuY3BwOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6OlBsdWdpblZpZXc6OmRp
c3BhdGNoTlBFdmVudCk6CisgICAgICAgIChXZWJDb3JlOjpQbHVnaW5WaWV3OjpoYWx0KToKKyAg
ICAgICAgKFdlYkNvcmU6OlBsdWdpblZpZXc6OmhhbmRsZUZvY3VzSW5FdmVudCk6CisgICAgICAg
IChXZWJDb3JlOjpQbHVnaW5WaWV3OjpoYW5kbGVGb2N1c091dEV2ZW50KToKKyAgICAgICAgKFdl
YkNvcmU6OlBsdWdpblZpZXc6OnJlc3RhcnQpOgorICAgICAgICAoV2ViQ29yZTo6UGx1Z2luVmll
dzo6aGFuZGxlS2V5Ym9hcmRFdmVudCk6CisgICAgICAgIChXZWJDb3JlOjpQbHVnaW5WaWV3Ojpo
YW5kbGVNb3VzZUV2ZW50KToKKyAgICAgICAgKFdlYkNvcmU6OlBsdWdpblZpZXc6OnVwZGF0ZVBs
dWdpbldpZGdldCk6CisgICAgICAgIChXZWJDb3JlOjpQbHVnaW5WaWV3OjpzZXRGb2N1cyk6Cisg
ICAgICAgIChXZWJDb3JlOjpQbHVnaW5WaWV3OjpzaG93KToKKyAgICAgICAgKFdlYkNvcmU6OlBs
dWdpblZpZXc6OmhpZGUpOgorICAgICAgICAoV2ViQ29yZTo6UGx1Z2luVmlldzo6cGFpbnQpOgor
ICAgICAgICAoV2ViQ29yZTo6UGx1Z2luVmlldzo6c2V0UGFyZW50KToKKyAgICAgICAgKFdlYkNv
cmU6OlBsdWdpblZpZXc6OnNldE5QV2luZG93UmVjdCk6CisgICAgICAgIChXZWJDb3JlOjpQbHVn
aW5WaWV3OjpzZXROUFdpbmRvd0lmTmVlZGVkKToKKyAgICAgICAgKFdlYkNvcmU6OlBsdWdpblZp
ZXc6OnNldFBhcmVudFZpc2libGUpOgorICAgICAgICAoV2ViQ29yZTo6UGx1Z2luVmlldzo6aGFu
ZGxlUG9zdFJlYWRGaWxlKToKKyAgICAgICAgKFdlYkNvcmU6OlBsdWdpblZpZXc6OnBsYXRmb3Jt
R2V0VmFsdWVTdGF0aWMpOgorICAgICAgICAoV2ViQ29yZTo6UGx1Z2luVmlldzo6cGxhdGZvcm1H
ZXRWYWx1ZSk6CisgICAgICAgIChXZWJDb3JlOjpQbHVnaW5WaWV3OjppbnZhbGlkYXRlUmVjdCk6
CisgICAgICAgIChXZWJDb3JlOjpQbHVnaW5WaWV3OjppbnZhbGlkYXRlUmVnaW9uKToKKyAgICAg
ICAgKFdlYkNvcmU6OlBsdWdpblZpZXc6OmZvcmNlUmVkcmF3KToKKyAgICAgICAgKFdlYkNvcmU6
OlBsdWdpblZpZXc6OnBsYXRmb3JtU3RhcnQpOgorICAgICAgICAoV2ViQ29yZTo6UGx1Z2luVmll
dzo6cGxhdGZvcm1EZXN0cm95KToKKwogMjAxMS0wNi0wOCAgSGF5YXRvIEl0byAgPGhheWF0b0Bj
aHJvbWl1bS5vcmc+CiAKICAgICAgICAgUmV2aWV3ZWQgYnkgSGFqaW1lIE1vcml0YS4KZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsdWdpbnMvUGx1Z2luVmlldy5oIGIvU291cmNlL1dlYkNv
cmUvcGx1Z2lucy9QbHVnaW5WaWV3LmgKaW5kZXggYTVjNGI5MC4uNGE1MGNhYiAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYkNvcmUvcGx1Z2lucy9QbHVnaW5WaWV3LmgKKysrIGIvU291cmNlL1dlYkNv
cmUvcGx1Z2lucy9QbHVnaW5WaWV3LmgKQEAgLTM3OSw3ICszNzksNyBAQCBuYW1lc3BhY2UgV2Vi
Q29yZSB7CiAgICAgICAgIGJvb2wgbV9oYXZlVXBkYXRlZFBsdWdpbldpZGdldDsKICNlbmRpZgog
Ci0jaWYgKChQTEFURk9STShRVCkgfHwgUExBVEZPUk0oV1gpKSAmJiBPUyhXSU5ET1dTKSkgfHwg
ZGVmaW5lZChYUF9NQUNPU1gpCisjaWYgKChQTEFURk9STShRVCkgfHwgUExBVEZPUk0oV1gpKSAm
JiBPUyhXSU5ET1dTKSkgfHwgZGVmaW5lZChYUF9NQUNPU1gpIHx8IFBMQVRGT1JNKEVGTCkKICAg
ICAgICAgLy8gT24gTWFjIE9TWCBhbmQgUXQvV2luZG93cyB0aGUgcGx1Z2luIGRvZXMgbm90IGhh
dmUgaXRzIG93biBuYXRpdmUgd2lkZ2V0LAogICAgICAgICAvLyBidXQgaXMgdXNpbmcgdGhlIGNv
bnRhaW5pbmcgd2luZG93IGFzIGl0cyByZWZlcmVuY2UgZm9yIHBvc2l0aW9uaW5nL3BhaW50aW5n
LgogICAgICAgICBQbGF0Zm9ybVBsdWdpbldpZGdldCBtX3dpbmRvdzsKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL3BsdWdpbnMvZWZsL1BsdWdpbkRhdGFFZmwuY3BwIGIvU291cmNlL1dlYkNv
cmUvcGx1Z2lucy9lZmwvUGx1Z2luRGF0YUVmbC5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5k
ZXggMDAwMDAwMC4uYzIxZDUxYgotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3Bs
dWdpbnMvZWZsL1BsdWdpbkRhdGFFZmwuY3BwCkBAIC0wLDAgKzEsNjYgQEAKKy8qCisgICAgQ29w
eXJpZ2h0IChDKSAyMDA2LCAyMDA3IEFwcGxlIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisg
ICAgQ29weXJpZ2h0IChDKSAyMDA4IFRyb2xsdGVjaCBBU0EKKyAgICBDb3B5cmlnaHQgKEMpIDIw
MDggQ29sbGFib3JhIEx0ZC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAgICBDb3B5cmlnaHQgKEMp
IDIwMDggSU5kVCAtIEluc3RpdHV0byBOb2tpYSBkZSBUZWNub2xvZ2lhCisgICAgQ29weXJpZ2h0
IChDKSAyMDA5LTIwMTAgUHJvRlVTSU9OIGVtYmVkZGVkIHN5c3RlbXMKKyAgICBDb3B5cmlnaHQg
KEMpIDIwMDktMjAxMSBTYW1zdW5nIEVsZWN0cm9uaWNzCisKKyAgICBUaGlzIGxpYnJhcnkgaXMg
ZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgICAgbW9kaWZ5
IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAg
ICBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBl
aXRoZXIKKyAgICB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikg
YW55IGxhdGVyIHZlcnNpb24uCisKKyAgICBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4g
dGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAgICBidXQgV0lUSE9VVCBBTlkgV0FS
UkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICAgIE1FUkNIQU5U
QUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05V
CisgICAgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisK
KyAgICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBH
ZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgICAgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0
aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KKyAgICB0aGUgRnJlZSBTb2Z0
d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAor
ICAgIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgorKi8KKworI2luY2x1ZGUgImNvbmZpZy5o
IgorI2luY2x1ZGUgIlBsdWdpbkRhdGEuaCIKKworI2luY2x1ZGUgIlBsdWdpbkRhdGFiYXNlLmgi
CisjaW5jbHVkZSAiUGx1Z2luUGFja2FnZS5oIgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK3Zv
aWQgUGx1Z2luRGF0YTo6aW5pdFBsdWdpbnMoY29uc3QgUGFnZSopCit7CisgICAgY29uc3QgVmVj
dG9yPFBsdWdpblBhY2thZ2UqPiYgcGx1Z2lucyA9IFBsdWdpbkRhdGFiYXNlOjppbnN0YWxsZWRQ
bHVnaW5zKCktPnBsdWdpbnMoKTsKKworICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgcGx1Z2lu
cy5zaXplKCk7ICsraSkgeworICAgICAgICBQbHVnaW5QYWNrYWdlKiBwYWNrYWdlID0gcGx1Z2lu
c1tpXTsKKyAgICAgICAgUGx1Z2luSW5mbyBpbmZvOworCisgICAgICAgIGluZm8ubmFtZSA9IHBh
Y2thZ2UtPm5hbWUoKTsKKyAgICAgICAgaW5mby5maWxlID0gcGFja2FnZS0+ZmlsZU5hbWUoKTsK
KyAgICAgICAgaW5mby5kZXNjID0gcGFja2FnZS0+ZGVzY3JpcHRpb24oKTsKKworICAgICAgICBj
b25zdCBNSU1FVG9EZXNjcmlwdGlvbnNNYXAmIG1pbWVUb0Rlc2NyaXB0aW9ucyA9IHBhY2thZ2Ut
Pm1pbWVUb0Rlc2NyaXB0aW9ucygpOworICAgICAgICBNSU1FVG9EZXNjcmlwdGlvbnNNYXA6OmNv
bnN0X2l0ZXJhdG9yIGVuZCA9IG1pbWVUb0Rlc2NyaXB0aW9ucy5lbmQoKTsKKyAgICAgICAgZm9y
IChNSU1FVG9EZXNjcmlwdGlvbnNNYXA6OmNvbnN0X2l0ZXJhdG9yIGl0ID0gbWltZVRvRGVzY3Jp
cHRpb25zLmJlZ2luKCk7IGl0ICE9IGVuZDsgKytpdCkgeworICAgICAgICAgICAgTWltZUNsYXNz
SW5mbyBtaW1lOworCisgICAgICAgICAgICBtaW1lLnR5cGUgPSBpdC0+Zmlyc3Q7CisgICAgICAg
ICAgICBtaW1lLmRlc2MgPSBpdC0+c2Vjb25kOworICAgICAgICAgICAgbWltZS5leHRlbnNpb25z
ID0gcGFja2FnZS0+bWltZVRvRXh0ZW5zaW9ucygpLmdldChtaW1lLnR5cGUpOworCisgICAgICAg
ICAgICBpbmZvLm1pbWVzLmFwcGVuZChtaW1lKTsKKyAgICAgICAgfQorCisgICAgICAgIG1fcGx1
Z2lucy5hcHBlbmQoaW5mbyk7CisgICAgfQorfQorCit2b2lkIFBsdWdpbkRhdGE6OnJlZnJlc2go
KQoreworICAgIFBsdWdpbkRhdGFiYXNlOjppbnN0YWxsZWRQbHVnaW5zKCktPnJlZnJlc2goKTsK
K30KKworfTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsdWdpbnMvZWZsL1BsdWdpblBh
Y2thZ2VFZmwuY3BwIGIvU291cmNlL1dlYkNvcmUvcGx1Z2lucy9lZmwvUGx1Z2luUGFja2FnZUVm
bC5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjE4YWVhNgotLS0gL2Rl
di9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsdWdpbnMvZWZsL1BsdWdpblBhY2thZ2VFZmwu
Y3BwCkBAIC0wLDAgKzEsMTY4IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA2LCAyMDA3IEFw
cGxlIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDggQ29s
bGFib3JhIEx0ZC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAwOCBO
dWFudGkgTHRkLgorICogQ29weXJpZ2h0IChDKSAyMDA4IElOZFQgLSBJbnN0aXR1dG8gTm9raWEg
ZGUgVGVjbm9sb2dpYQorICogQ29weXJpZ2h0IChDKSAyMDA5LTIwMTAgUHJvRlVTSU9OIGVtYmVk
ZGVkIHN5c3RlbXMKKyAqIENvcHlyaWdodCAoQykgMjAwOS0yMDExIFNhbXN1bmcgRWxlY3Ryb25p
Y3MKKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv
cm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92
aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJl
ZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJp
Z2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVz
dCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAg
ZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRp
c3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIENP
TVBVVEVSLCBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FS
UkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBX
QVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFS
CisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgQ09N
UFVURVIsIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1Qs
IElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFV
RU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VS
RU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEs
IE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VE
IEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1Qs
IFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBP
VEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBT
T0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFH
RS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiUGx1Z2luUGFja2FnZS5o
IgorCisjaW5jbHVkZSAiTUlNRVR5cGVSZWdpc3RyeS5oIgorI2luY2x1ZGUgIk5vdEltcGxlbWVu
dGVkLmgiCisjaW5jbHVkZSAiUGx1Z2luRGF0YWJhc2UuaCIKKyNpbmNsdWRlICJQbHVnaW5EZWJ1
Zy5oIgorI2luY2x1ZGUgIm5wcnVudGltZV9pbXBsLmgiCisKKyNpbmNsdWRlIDxFaW5hLmg+Cisj
aW5jbHVkZSA8ZGxmY24uaD4KKyNpbmNsdWRlIDx3dGYvdGV4dC9DU3RyaW5nLmg+CisKK25hbWVz
cGFjZSBXZWJDb3JlIHsKKwordHlwZWRlZiBjaGFyKiAoKk5QUF9HZXRNSU1FRGVzY3JpcHRpb25Q
cm9jUHRyKSgpOworCitib29sIFBsdWdpblBhY2thZ2U6OmZldGNoSW5mbygpCit7CisgICAgY29u
c3QgY2hhciAqZXJybXNnOworCisgICAgaWYgKCFsb2FkKCkpCisgICAgICAgIHJldHVybiBmYWxz
ZTsKKworICAgIE5QUF9HZXRWYWx1ZVByb2NQdHIgZ2V0VmFsdWUgPSAwOworICAgIE5QUF9HZXRN
SU1FRGVzY3JpcHRpb25Qcm9jUHRyIGdldE1JTUVEZXNjcmlwdGlvbiA9IDA7CisKKyAgICBnZXRW
YWx1ZSA9IHJlaW50ZXJwcmV0X2Nhc3Q8TlBQX0dldFZhbHVlUHJvY1B0cj4oZGxzeW0obV9tb2R1
bGUsICJOUF9HZXRWYWx1ZSIpKTsKKyAgICBpZiAoKGVycm1zZyA9IGRsZXJyb3IoKSkpIHsKKyAg
ICAgICAgRUlOQV9MT0dfRVJSKCJDb3VsZCBub3QgZ2V0IHN5bWJvbCBOUF9HZXRWYWx1ZTogJXMi
LCBlcnJtc2cpOworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorCisgICAgZ2V0TUlNRURl
c2NyaXB0aW9uID0gcmVpbnRlcnByZXRfY2FzdDxOUFBfR2V0TUlNRURlc2NyaXB0aW9uUHJvY1B0
cj4oZGxzeW0obV9tb2R1bGUsICJOUF9HZXRNSU1FRGVzY3JpcHRpb24iKSk7CisgICAgaWYgKChl
cnJtc2cgPSBkbGVycm9yKCkpKSB7CisgICAgICAgIEVJTkFfTE9HX0VSUigiQ291bGQgbm90IGdl
dCBzeW1ib2wgTlBfR2V0TUlNRURlc2NyaXB0aW9uOiAlcyIsIGVycm1zZyk7CisgICAgICAgIHJl
dHVybiBmYWxzZTsKKyAgICB9CisKKyAgICBjaGFyKiBidWZmZXIgPSAwOworICAgIE5QRXJyb3Ig
ZXJyID0gZ2V0VmFsdWUoMCwgTlBQVnBsdWdpbk5hbWVTdHJpbmcsIHN0YXRpY19jYXN0PHZvaWQq
PigmYnVmZmVyKSk7CisgICAgaWYgKGVyciAhPSBOUEVSUl9OT19FUlJPUikKKyAgICAgICAgcmV0
dXJuIGZhbHNlOworICAgIG1fbmFtZSA9IGJ1ZmZlcjsKKworICAgIGJ1ZmZlciA9IDA7CisgICAg
ZXJyID0gZ2V0VmFsdWUoMCwgTlBQVnBsdWdpbkRlc2NyaXB0aW9uU3RyaW5nLCBzdGF0aWNfY2Fz
dDx2b2lkKj4oJmJ1ZmZlcikpOworICAgIGlmIChlcnIgIT0gTlBFUlJfTk9fRVJST1IpCisgICAg
ICAgIHJldHVybiBmYWxzZTsKKyAgICBtX2Rlc2NyaXB0aW9uID0gYnVmZmVyOworICAgIGRldGVy
bWluZU1vZHVsZVZlcnNpb25Gcm9tRGVzY3JpcHRpb24oKTsKKworICAgIFN0cmluZyBkZXNjcmlw
dGlvbiA9IGdldE1JTUVEZXNjcmlwdGlvbigpOworCisgICAgVmVjdG9yPFN0cmluZz4gdHlwZXM7
CisgICAgZGVzY3JpcHRpb24uc3BsaXQoVUNoYXIoJzsnKSwgZmFsc2UsIHR5cGVzKTsKKworICAg
IGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgdHlwZXMuc2l6ZSgpOyArK2kpIHsKKyAgICAgICAgVmVj
dG9yPFN0cmluZz4gbWltZTsKKyAgICAgICAgdHlwZXNbaV0uc3BsaXQoVUNoYXIoJzonKSwgdHJ1
ZSwgbWltZSk7CisKKyAgICAgICAgaWYgKCFtaW1lLmlzRW1wdHkoKSA+IDApIHsKKyAgICAgICAg
ICAgIFZlY3RvcjxTdHJpbmc+IGV4dHM7CisKKyAgICAgICAgICAgIGlmIChtaW1lLnNpemUoKSA+
IDEpCisgICAgICAgICAgICAgICAgbWltZVsxXS5zcGxpdChVQ2hhcignLCcpLCBmYWxzZSwgZXh0
cyk7CisKKyAgICAgICAgICAgIGRldGVybWluZVF1aXJrcyhtaW1lWzBdKTsKKyAgICAgICAgICAg
IG1fbWltZVRvRXh0ZW5zaW9ucy5hZGQobWltZVswXSwgZXh0cyk7CisKKyAgICAgICAgICAgIGlm
IChtaW1lLnNpemUoKSA+IDIpCisgICAgICAgICAgICAgICAgbV9taW1lVG9EZXNjcmlwdGlvbnMu
YWRkKG1pbWVbMF0sIG1pbWVbMl0pOworICAgICAgICB9CisgICAgfQorCisgICAgcmV0dXJuIHRy
dWU7Cit9CisKK3VpbnQxNl90IFBsdWdpblBhY2thZ2U6Ok5QVmVyc2lvbigpIGNvbnN0Cit7Cisg
ICAgcmV0dXJuIE5QVkVSU19IQVNfUExVR0lOX1RIUkVBRF9BU1lOQ19DQUxMOworfQorCitib29s
IFBsdWdpblBhY2thZ2U6OmxvYWQoKQoreworICAgIGNoYXIqIGVycm1zZzsKKworICAgIGlmICht
X2lzTG9hZGVkKSB7CisgICAgICAgIG1fbG9hZENvdW50Kys7CisgICAgICAgIHJldHVybiB0cnVl
OworICAgIH0KKworICAgIG1fbW9kdWxlID0gZGxvcGVuKG1fcGF0aC51dGY4KCkuZGF0YSgpLCBS
VExEX0xBWlkgfCBSVExEX0xPQ0FMKTsKKyAgICBpZiAoKGVycm1zZyA9IGRsZXJyb3IoKSkpIHsK
KyAgICAgICAgRUlOQV9MT0dfV0FSTigiJXMgbm90IGxvYWRlZDogJXMiLCBtX3BhdGgudXRmOCgp
LmRhdGEoKSwgZXJybXNnKTsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKworICAgIG1f
aXNMb2FkZWQgPSB0cnVlOworCisgICAgTlBfSW5pdGlhbGl6ZUZ1bmNQdHIgaW5pdGlhbGl6ZTsK
KyAgICBOUEVycm9yIGVycjsKKworICAgIGluaXRpYWxpemUgPSAoTlBfSW5pdGlhbGl6ZUZ1bmNQ
dHIpZGxzeW0obV9tb2R1bGUsICJOUF9Jbml0aWFsaXplIik7CisgICAgaWYgKChlcnJtc2cgPSBk
bGVycm9yKCkpKSB7CisgICAgICAgIEVJTkFfTE9HX0VSUigiQ291bGQgbm90IGdldCBzeW1ib2wg
TlBfSW5pdGlhbGl6ZTogJXMiLCBlcnJtc2cpOworICAgICAgICBnb3RvIGFib3J0OworICAgIH0K
KworICAgIG1fTlBQX1NodXRkb3duID0gKE5QUF9TaHV0ZG93blByb2NQdHIpZGxzeW0obV9tb2R1
bGUsICJOUF9TaHV0ZG93biIpOworICAgIGlmICgoZXJybXNnID0gZGxlcnJvcigpKSkgeworICAg
ICAgICBFSU5BX0xPR19FUlIoIkNvdWxkIG5vdCBnZXQgc3ltYm9sIE5QX1NodXRkb3duOiAlcyIs
IGVycm1zZyk7CisgICAgICAgIGdvdG8gYWJvcnQ7CisgICAgfQorCisgICAgbWVtc2V0KCZtX3Bs
dWdpbkZ1bmNzLCAwLCBzaXplb2YobV9wbHVnaW5GdW5jcykpOworICAgIG1fcGx1Z2luRnVuY3Mu
c2l6ZSA9IHNpemVvZihtX3BsdWdpbkZ1bmNzKTsKKworICAgIGluaXRpYWxpemVCcm93c2VyRnVu
Y3MoKTsKKworI2lmIGRlZmluZWQoWFBfVU5JWCkKKyAgICBlcnIgPSBpbml0aWFsaXplKCZtX2Jy
b3dzZXJGdW5jcywgJm1fcGx1Z2luRnVuY3MpOworI2Vsc2UKKyAgICBlcnIgPSBpbml0aWFsaXpl
KCZtX2Jyb3dzZXJGdW5jcyk7CisjZW5kaWYKKyAgICBpZiAoZXJyICE9IE5QRVJSX05PX0VSUk9S
KQorICAgICAgICBnb3RvIGFib3J0OworCisgICAgbV9sb2FkQ291bnQrKzsKKyAgICByZXR1cm4g
dHJ1ZTsKKworYWJvcnQ6CisgICAgRUlOQV9MT0dfREJHKCJmYWlsZWQgdG8gbG9hZCBwbHVnaW4s
IHVubG9hZCBpdCB3aXRob3V0IHNodXR0aW5nIGl0IGRvd24uIik7CisgICAgdW5sb2FkV2l0aG91
dFNodXRkb3duKCk7CisgICAgcmV0dXJuIGZhbHNlOworfQorCit9CmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9wbHVnaW5zL2VmbC9QbHVnaW5WaWV3RWZsLmNwcCBiL1NvdXJjZS9XZWJDb3Jl
L3BsdWdpbnMvZWZsL1BsdWdpblZpZXdFZmwuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4
IDAwMDAwMDAuLjJiMmJjN2QKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbHVn
aW5zL2VmbC9QbHVnaW5WaWV3RWZsLmNwcApAQCAtMCwwICsxLDM4OSBAQAorLyoKKyAqIENvcHly
aWdodCAoQykgMjAwNiwgMjAwNyBBcHBsZSBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICog
Q29weXJpZ2h0IChDKSAyMDA4IENvbGxhYm9yYSBMdGQuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisg
KiBDb3B5cmlnaHQgKEMpIDIwMDggSU5kVCAtIEluc3RpdHV0byBOb2tpYSBkZSBUZWNub2xvZ2lh
CisgKiBDb3B5cmlnaHQgKEMpIDIwMDktMjAxMCBQcm9GVVNJT04gZW1iZWRkZWQgc3lzdGVtcwor
ICogQ29weXJpZ2h0IChDKSAyMDA5LTIwMTEgU2Ftc3VuZyBFbGVjdHJvbmljcworICoKKyAqIFJl
ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig
d2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl
IGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25z
IG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0
aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9u
IGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgor
ICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQ09NUFVURVIsIElOQy4g
YGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0Yg
TUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0Ug
QVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBDT01QVVRFUiwgSU5DLiBP
UgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElO
Q0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdF
UyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJT
VElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJ
VFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBU
SEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJ
TElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJ
U0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVO
IElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNp
bmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJQbHVnaW5WaWV3LmgiCisKKyNpbmNsdWRlICJG
cmFtZVZpZXcuaCIKKyNpbmNsdWRlICJHcmFwaGljc0NvbnRleHQuaCIKKyNpbmNsdWRlICJIVE1M
TmFtZXMuaCIKKyNpbmNsdWRlICJIVE1MUGx1Z0luRWxlbWVudC5oIgorI2luY2x1ZGUgIkhvc3RX
aW5kb3cuaCIKKyNpbmNsdWRlICJNb3VzZUV2ZW50LmgiCisjaW5jbHVkZSAiTm90SW1wbGVtZW50
ZWQuaCIKKyNpbmNsdWRlICJQbHVnaW5QYWNrYWdlLmgiCisjaW5jbHVkZSAibnBydW50aW1lX2lt
cGwuaCIKKyNpbmNsdWRlICJydW50aW1lL0pTTG9jay5oIgorI2luY2x1ZGUgPEVjb3JlX0V2YXMu
aD4KKyNpbmNsdWRlIDxFY29yZV9YLmg+CisjaW5jbHVkZSA8RXZhcy5oPgorCituYW1lc3BhY2Ug
V2ViQ29yZSB7CisKK3VzaW5nIG5hbWVzcGFjZSBIVE1MTmFtZXM7CisKKyNpZiBFTkFCTEUoTkVU
U0NBUEVfUExVR0lOX0FQSSkKK2Jvb2wgUGx1Z2luVmlldzo6ZGlzcGF0Y2hOUEV2ZW50KE5QRXZl
bnQmIGV2ZW50KQoreworICAgIGlmICghbV9wbHVnaW4tPnBsdWdpbkZ1bmNzKCktPmV2ZW50KQor
ICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBQbHVnaW5WaWV3OjpzZXRDdXJyZW50UGx1Z2lu
Vmlldyh0aGlzKTsKKyAgICBKU0M6OkpTTG9jazo6RHJvcEFsbExvY2tzIGRyb3BBbGxMb2Nrcyhm
YWxzZSk7CisgICAgc2V0Q2FsbGluZ1BsdWdpbih0cnVlKTsKKworICAgIGJvb2wgYWNjZXB0ZWQg
PSBtX3BsdWdpbi0+cGx1Z2luRnVuY3MoKS0+ZXZlbnQobV9pbnN0YW5jZSwgJmV2ZW50KTsKKwor
ICAgIHNldENhbGxpbmdQbHVnaW4oZmFsc2UpOworICAgIFBsdWdpblZpZXc6OnNldEN1cnJlbnRQ
bHVnaW5WaWV3KDApOworICAgIHJldHVybiBhY2NlcHRlZDsKK30KKyNlbmRpZgorCit2b2lkIFBs
dWdpblZpZXc6OmhhbHQoKQoreworICAgIG5vdEltcGxlbWVudGVkKCk7Cit9CisKKyNpZiBkZWZp
bmVkKFhQX1VOSVgpICYmIEVOQUJMRShORVRTQ0FQRV9QTFVHSU5fQVBJKQordm9pZCBQbHVnaW5W
aWV3OjpoYW5kbGVGb2N1c0luRXZlbnQoKQoreworICAgIG5vdEltcGxlbWVudGVkKCk7Cit9CisK
K3ZvaWQgUGx1Z2luVmlldzo6aGFuZGxlRm9jdXNPdXRFdmVudCgpCit7CisgICAgbm90SW1wbGVt
ZW50ZWQoKTsKK30KKyNlbmRpZgorCit2b2lkIFBsdWdpblZpZXc6OnJlc3RhcnQoKQoreworICAg
IG5vdEltcGxlbWVudGVkKCk7Cit9CisKK3ZvaWQgUGx1Z2luVmlldzo6aGFuZGxlS2V5Ym9hcmRF
dmVudChLZXlib2FyZEV2ZW50KikKK3sKKyAgICBub3RJbXBsZW1lbnRlZCgpOworfQorCit2b2lk
IFBsdWdpblZpZXc6OmhhbmRsZU1vdXNlRXZlbnQoTW91c2VFdmVudCogZXZlbnQpCit7CisjaWYg
RU5BQkxFKE5FVFNDQVBFX1BMVUdJTl9BUEkpCisgICAgTlBFdmVudCB4RXZlbnQ7CisKKyAgICBJ
bnRSZWN0IHAgPSBzdGF0aWNfY2FzdDxGcmFtZVZpZXcqPihwYXJlbnQoKSktPmNvbnRlbnRzVG9T
Y3JlZW4oSW50UmVjdCgwLCAwLCBldmVudC0+b2Zmc2V0WCgpLCBldmVudC0+b2Zmc2V0WSgpKSk7
CisgICAgaWYgKGV2ZW50LT50eXBlKCkgPT0gZXZlbnROYW1lcygpLm1vdXNlbW92ZUV2ZW50Cisg
ICAgICAgICAgICB8fCBldmVudC0+dHlwZSgpID09IGV2ZW50TmFtZXMoKS5tb3VzZW91dEV2ZW50
CisgICAgICAgICAgICB8fCBldmVudC0+dHlwZSgpID09IGV2ZW50TmFtZXMoKS5tb3VzZW92ZXJF
dmVudCkgeworICAgICAgICB4RXZlbnQudHlwZSA9IE1vdGlvbk5vdGlmeTsKKyAgICAgICAgeEV2
ZW50Lnhtb3Rpb24ueCA9IHAud2lkdGgoKTsKKyAgICAgICAgeEV2ZW50Lnhtb3Rpb24ueSA9IHAu
aGVpZ2h0KCk7CisgICAgfSBlbHNlIGlmIChldmVudC0+dHlwZSgpID09IGV2ZW50TmFtZXMoKS5t
b3VzZWRvd25FdmVudCkgeworICAgICAgICB4RXZlbnQudHlwZSA9IEJ1dHRvblByZXNzOworICAg
ICAgICB4RXZlbnQueGJ1dHRvbi54ID0gcC53aWR0aCgpOworICAgICAgICB4RXZlbnQueGJ1dHRv
bi55ID0gcC5oZWlnaHQoKTsKKyAgICAgICAgeEV2ZW50LnhidXR0b24uYnV0dG9uID0gZXZlbnQt
PmJ1dHRvbigpICsgMTsgLy8gRE9NIE1vdXNlRXZlbnQgY291bnRzIGZyb20gMCwgYW5kIFhCdXR0
b25FdmVudCBmcm9tIDEKKyAgICB9IGVsc2UgaWYgKGV2ZW50LT50eXBlKCkgPT0gZXZlbnROYW1l
cygpLm1vdXNldXBFdmVudCkgeworICAgICAgICB4RXZlbnQudHlwZSA9IEJ1dHRvblJlbGVhc2U7
CisgICAgICAgIHhFdmVudC54YnV0dG9uLnggPSBwLndpZHRoKCk7CisgICAgICAgIHhFdmVudC54
YnV0dG9uLnkgPSBwLmhlaWdodCgpOworICAgICAgICB4RXZlbnQueGJ1dHRvbi5idXR0b24gPSBl
dmVudC0+YnV0dG9uKCkgKyAxOworICAgIH0gZWxzZQorICAgICAgICByZXR1cm47CisKKyAgICBp
ZiAoZGlzcGF0Y2hOUEV2ZW50KHhFdmVudCkpCisgICAgICAgIGV2ZW50LT5zZXREZWZhdWx0SGFu
ZGxlZCgpOworI2Vsc2UKKyAgICBub3RJbXBsZW1lbnRlZCgpOworI2VuZGlmCit9CisKK3ZvaWQg
UGx1Z2luVmlldzo6dXBkYXRlUGx1Z2luV2lkZ2V0KCkKK3sKKyAgICBpZiAoIXBhcmVudCgpIHx8
ICFtX2lzV2luZG93ZWQpCisgICAgICAgIHJldHVybjsKKworICAgIEFTU0VSVChwYXJlbnQoKS0+
aXNGcmFtZVZpZXcoKSk7CisgICAgRnJhbWVWaWV3KiBmcmFtZVZpZXcgPSBzdGF0aWNfY2FzdDxG
cmFtZVZpZXcqPihwYXJlbnQoKSk7CisKKyAgICBJbnRSZWN0IG9sZFdpbmRvd1JlY3QgPSBtX3dp
bmRvd1JlY3Q7CisgICAgSW50UmVjdCBvbGRDbGlwUmVjdCA9IG1fY2xpcFJlY3Q7CisKKyAgICBt
X3dpbmRvd1JlY3QgPSBmcmFtZVZpZXctPmNvbnRlbnRzVG9TY3JlZW4oZnJhbWVSZWN0KCkpOwor
CisgICAgbV9jbGlwUmVjdCA9IHdpbmRvd0NsaXBSZWN0KCk7CisgICAgbV9jbGlwUmVjdC5tb3Zl
KC1tX3dpbmRvd1JlY3QueCgpLCAtbV93aW5kb3dSZWN0LnkoKSk7Cit9CisKK3ZvaWQgUGx1Z2lu
Vmlldzo6c2V0Rm9jdXMoYm9vbCBmb2N1c2VkKQoreworICAgIGlmIChmb2N1c2VkKQorICAgICAg
ICBtX2VsZW1lbnQtPmRvY3VtZW50KCktPnNldEZvY3VzZWROb2RlKG1fZWxlbWVudCk7CisKKyAg
ICBXaWRnZXQ6OnNldEZvY3VzKGZvY3VzZWQpOworfQorCit2b2lkIFBsdWdpblZpZXc6OnNob3co
KQoreworICAgIHNldFNlbGZWaXNpYmxlKHRydWUpOworCisgICAgV2lkZ2V0OjpzaG93KCk7Cit9
CisKK3ZvaWQgUGx1Z2luVmlldzo6aGlkZSgpCit7CisgICAgc2V0U2VsZlZpc2libGUoZmFsc2Up
OworCisgICAgV2lkZ2V0OjpoaWRlKCk7Cit9CisKK3ZvaWQgUGx1Z2luVmlldzo6cGFpbnQoR3Jh
cGhpY3NDb250ZXh0KiBjb250ZXh0LCBjb25zdCBJbnRSZWN0JiByZWN0KQoreworICAgIEludFJl
Y3QgZnJSZWN0ID0gZnJhbWVSZWN0KCk7CisKKyAgICBpZiAoIW1faXNTdGFydGVkKSB7CisgICAg
ICAgIHBhaW50TWlzc2luZ1BsdWdpbkljb24oY29udGV4dCwgcmVjdCk7CisgICAgICAgIHJldHVy
bjsKKyAgICB9CisKKyAgICBpZiAoY29udGV4dC0+cGFpbnRpbmdEaXNhYmxlZCgpKQorICAgICAg
ICByZXR1cm47CisKKyAgICBpZiAobV9pc1dpbmRvd2VkIHx8IGNvbnRleHQtPnBhaW50aW5nRGlz
YWJsZWQoKSkKKyAgICAgICAgcmV0dXJuOworfQorCit2b2lkIFBsdWdpblZpZXc6OnNldFBhcmVu
dChTY3JvbGxWaWV3KiBwYXJlbnQpCit7CisgICAgV2lkZ2V0OjpzZXRQYXJlbnQocGFyZW50KTsK
KworICAgIGlmIChwYXJlbnQpCisgICAgICAgIGluaXQoKTsKKyAgICBlbHNlIGlmICghcGxhdGZv
cm1QbHVnaW5XaWRnZXQoKSkKKyAgICAgICAgcmV0dXJuOworfQorCit2b2lkIFBsdWdpblZpZXc6
OnNldE5QV2luZG93UmVjdChjb25zdCBJbnRSZWN0JiByZWN0KQoreworICAgIG5vdEltcGxlbWVu
dGVkKCk7CisgICAgcmV0dXJuOworfQorCit2b2lkIFBsdWdpblZpZXc6OnNldE5QV2luZG93SWZO
ZWVkZWQoKQoreworfQorCit2b2lkIFBsdWdpblZpZXc6OnNldFBhcmVudFZpc2libGUoYm9vbCB2
aXNpYmxlKQoreworICAgIGlmIChpc1BhcmVudFZpc2libGUoKSA9PSB2aXNpYmxlKQorICAgICAg
ICByZXR1cm47CisKKyAgICBXaWRnZXQ6OnNldFBhcmVudFZpc2libGUodmlzaWJsZSk7Cit9CisK
KyNpZiBFTkFCTEUoTkVUU0NBUEVfUExVR0lOX0FQSSkKK05QRXJyb3IgUGx1Z2luVmlldzo6aGFu
ZGxlUG9zdFJlYWRGaWxlKFZlY3RvcjxjaGFyPiYgYnVmZmVyLCB1aW50MzJfdCBsZW4sIGNvbnN0
IGNoYXIqIGJ1ZikKK3sKKyAgICBTdHJpbmcgZmlsZW5hbWUoYnVmLCBsZW4pOworCisgICAgaWYg
KGZpbGVuYW1lLnN0YXJ0c1dpdGgoImZpbGU6Ly8vIikpCisgICAgICAgIGZpbGVuYW1lID0gZmls
ZW5hbWUuc3Vic3RyaW5nKDgpOworCisgICAgaWYgKCFmaWxlRXhpc3RzKGZpbGVuYW1lKSkKKyAg
ICAgICAgcmV0dXJuIE5QRVJSX0ZJTEVfTk9UX0ZPVU5EOworCisgICAgRklMRSogZmlsZUhhbmRs
ZSA9IGZvcGVuKGZpbGVuYW1lLnV0ZjgoKS5kYXRhKCksICJyIik7CisKKyAgICBpZiAoIWZpbGVI
YW5kbGUpCisgICAgICAgIHJldHVybiBOUEVSUl9GSUxFX05PVF9GT1VORDsKKworICAgIGludCBi
eXRlc1JlYWQgPSBmcmVhZChidWZmZXIuZGF0YSgpLCAxLCAwLCBmaWxlSGFuZGxlKTsKKworICAg
IGZjbG9zZShmaWxlSGFuZGxlKTsKKworICAgIGlmIChieXRlc1JlYWQgPD0gMCkKKyAgICAgICAg
cmV0dXJuIE5QRVJSX0ZJTEVfTk9UX0ZPVU5EOworCisgICAgcmV0dXJuIE5QRVJSX05PX0VSUk9S
OworfQorI2VuZGlmCisKKyNpZiBFTkFCTEUoTkVUU0NBUEVfUExVR0lOX0FQSSkKK2Jvb2wgUGx1
Z2luVmlldzo6cGxhdGZvcm1HZXRWYWx1ZVN0YXRpYyhOUE5WYXJpYWJsZSB2YXJpYWJsZSwgdm9p
ZCogdmFsdWUsIE5QRXJyb3IqIHJlc3VsdCkKK3sKKyAgICBzd2l0Y2ggKHZhcmlhYmxlKSB7Cisg
ICAgY2FzZSBOUE5WVG9vbGtpdDoKKyAgICAgICAgKnN0YXRpY19jYXN0PHVpbnQzMl90Kj4odmFs
dWUpID0gMDsKKyAgICAgICAgKnJlc3VsdCA9IE5QRVJSX05PX0VSUk9SOworICAgICAgICByZXR1
cm4gdHJ1ZTsKKworICAgIGNhc2UgTlBOVlN1cHBvcnRzWEVtYmVkQm9vbDoKKyAgICAgICAgKnN0
YXRpY19jYXN0PE5QQm9vbCo+KHZhbHVlKSA9IGZhbHNlOworICAgICAgICAqcmVzdWx0ID0gTlBF
UlJfTk9fRVJST1I7CisgICAgICAgIHJldHVybiB0cnVlOworCisgICAgY2FzZSBOUE5WamF2YXNj
cmlwdEVuYWJsZWRCb29sOgorICAgICAgICAqc3RhdGljX2Nhc3Q8TlBCb29sKj4odmFsdWUpID0g
dHJ1ZTsKKyAgICAgICAgKnJlc3VsdCA9IE5QRVJSX05PX0VSUk9SOworICAgICAgICByZXR1cm4g
dHJ1ZTsKKworICAgIGNhc2UgTlBOVlN1cHBvcnRzV2luZG93bGVzczoKKyAgICAgICAgKnN0YXRp
Y19jYXN0PE5QQm9vbCo+KHZhbHVlKSA9IGZhbHNlOworICAgICAgICAqcmVzdWx0ID0gTlBFUlJf
Tk9fRVJST1I7CisgICAgICAgIHJldHVybiB0cnVlOworCisgICAgZGVmYXVsdDoKKyAgICAgICAg
cmV0dXJuIGZhbHNlOworICAgIH0KK30KKworYm9vbCBQbHVnaW5WaWV3OjpwbGF0Zm9ybUdldFZh
bHVlKE5QTlZhcmlhYmxlIHZhcmlhYmxlLCB2b2lkKiB2YWx1ZSwgTlBFcnJvciogcmVzdWx0KQor
eworICAgIGlmICghdmFsdWUgfHwgIXJlc3VsdCkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisg
ICAgc3dpdGNoICh2YXJpYWJsZSkgeworICAgIGNhc2UgTlBOVnhEaXNwbGF5OgorICAgICAgICAq
c3RhdGljX2Nhc3Q8dm9pZCAqKj4odmFsdWUpID0gc3RhdGljX2Nhc3Q8RGlzcGxheSo+KGVjb3Jl
X3hfZGlzcGxheV9nZXQoKSk7CisgICAgICAgICpyZXN1bHQgPSBOUEVSUl9OT19FUlJPUjsKKyAg
ICAgICAgcmV0dXJuIHRydWU7CisKKyAgICBjYXNlIE5QTlZ4dEFwcENvbnRleHQ6CisgICAgICAg
ICpyZXN1bHQgPSBOUEVSUl9HRU5FUklDX0VSUk9SOworICAgICAgICByZXR1cm4gdHJ1ZTsKKwor
ICAgIGNhc2UgTlBOVldpbmRvd05QT2JqZWN0OiB7CisgICAgICAgIGlmIChtX2lzSmF2YVNjcmlw
dFBhdXNlZCkgeworICAgICAgICAgICAgKnJlc3VsdCA9IE5QRVJSX0dFTkVSSUNfRVJST1I7Cisg
ICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgfQorCisgICAgICAgIE5QT2JqZWN0KiB3
aW5kb3dTY3JpcHRPYmplY3QgPSBtX3BhcmVudEZyYW1lLT5zY3JpcHQoKS0+d2luZG93U2NyaXB0
TlBPYmplY3QoKTsKKworICAgICAgICAvLyBSZXR1cm4gdmFsdWUgaXMgZXhwZWN0ZWQgdG8gYmUg
cmV0YWluZWQsIGFzIGRlc2NyaWJlZCBoZXJlOiA8aHR0cDovL3d3dy5tb3ppbGxhLm9yZy9wcm9q
ZWN0cy9wbHVnaW4vbnBydW50aW1lLmh0bWw+CisgICAgICAgIGlmICh3aW5kb3dTY3JpcHRPYmpl
Y3QpCisgICAgICAgICAgICBfTlBOX1JldGFpbk9iamVjdCh3aW5kb3dTY3JpcHRPYmplY3QpOwor
CisgICAgICAgIHZvaWQqKiB2ID0gKHZvaWQqKil2YWx1ZTsKKyAgICAgICAgKnYgPSB3aW5kb3dT
Y3JpcHRPYmplY3Q7CisKKyAgICAgICAgKnJlc3VsdCA9IE5QRVJSX05PX0VSUk9SOworICAgICAg
ICByZXR1cm4gdHJ1ZTsKKyAgICB9CisKKyAgICBjYXNlIE5QTlZQbHVnaW5FbGVtZW50TlBPYmpl
Y3Q6IHsKKyAgICAgICAgaWYgKG1faXNKYXZhU2NyaXB0UGF1c2VkKSB7CisgICAgICAgICAgICAq
cmVzdWx0ID0gTlBFUlJfR0VORVJJQ19FUlJPUjsKKyAgICAgICAgICAgIHJldHVybiB0cnVlOwor
ICAgICAgICB9CisKKyAgICAgICAgTlBPYmplY3QqIHBsdWdpblNjcmlwdE9iamVjdCA9IDA7CisK
KyAgICAgICAgaWYgKG1fZWxlbWVudC0+aGFzVGFnTmFtZShhcHBsZXRUYWcpIHx8IG1fZWxlbWVu
dC0+aGFzVGFnTmFtZShlbWJlZFRhZykgfHwgbV9lbGVtZW50LT5oYXNUYWdOYW1lKG9iamVjdFRh
ZykpCisgICAgICAgICAgICBwbHVnaW5TY3JpcHRPYmplY3QgPSBzdGF0aWNfY2FzdDxIVE1MUGx1
Z0luRWxlbWVudCo+KG1fZWxlbWVudCktPmdldE5QT2JqZWN0KCk7CisKKyAgICAgICAgLy8gUmV0
dXJuIHZhbHVlIGlzIGV4cGVjdGVkIHRvIGJlIHJldGFpbmVkLCBhcyBkZXNjcmliZWQgaGVyZTog
PGh0dHA6Ly93d3cubW96aWxsYS5vcmcvcHJvamVjdHMvcGx1Z2luL25wcnVudGltZS5odG1sPgor
ICAgICAgICBpZiAocGx1Z2luU2NyaXB0T2JqZWN0KQorICAgICAgICAgICAgX05QTl9SZXRhaW5P
YmplY3QocGx1Z2luU2NyaXB0T2JqZWN0KTsKKworICAgICAgICB2b2lkKiogdiA9ICh2b2lkKiop
dmFsdWU7CisgICAgICAgICp2ID0gcGx1Z2luU2NyaXB0T2JqZWN0OworCisgICAgICAgICpyZXN1
bHQgPSBOUEVSUl9OT19FUlJPUjsKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgfQorCisgICAg
Y2FzZSBOUE5WbmV0c2NhcGVXaW5kb3c6IHsKKyAgICAgICAgdm9pZCogdyA9IHJlaW50ZXJwcmV0
X2Nhc3Q8dm9pZCo+KHZhbHVlKTsKKyAgICAgICAgRXZhc19PYmplY3QqIHdpZGdldCA9IG1fcGFy
ZW50RnJhbWUtPnZpZXcoKS0+aG9zdFdpbmRvdygpLT5wbGF0Zm9ybVBhZ2VDbGllbnQoKTsKKyAg
ICAgICAgRXZhcyogZXZhcyA9IGV2YXNfb2JqZWN0X2V2YXNfZ2V0KHdpZGdldCk7CisgICAgICAg
IEVjb3JlX0V2YXMqIGVlID0gZWNvcmVfZXZhc19lY29yZV9ldmFzX2dldChldmFzKTsKKyAgICAg
ICAgKigoWElEICopdykgPSAoV2luZG93KSBlY29yZV9ldmFzX3dpbmRvd19nZXQoZWUpOworICAg
ICAgICAqcmVzdWx0ID0gTlBFUlJfTk9fRVJST1I7CisgICAgICAgIHJldHVybiB0cnVlOworICAg
IH0KKworICAgIGNhc2UgTlBOVlRvb2xraXQ6CisgICAgICAgIGlmIChtX3BsdWdpbi0+cXVpcmtz
KCkuY29udGFpbnMoUGx1Z2luUXVpcmtSZXF1aXJlc0d0a1Rvb2xLaXQpKSB7CisgICAgICAgICAg
ICAqKCh1aW50MzJfdCAqKXZhbHVlKSA9IDI7CisgICAgICAgICAgICAqcmVzdWx0ID0gTlBFUlJf
Tk9fRVJST1I7CisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgfQorICAgICAgICBy
ZXR1cm4gZmFsc2U7CisgICAgICAgIC8vIGZhbGwgdGhyb3VnaAorICAgIGRlZmF1bHQ6CisgICAg
ICAgIHJldHVybiBmYWxzZTsKKyAgICB9Cit9CisjZW5kaWYKKwordm9pZCBQbHVnaW5WaWV3Ojpp
bnZhbGlkYXRlUmVjdChjb25zdCBJbnRSZWN0JiByZWN0KQoreworICAgIGludmFsaWRhdGVXaW5k
b3dsZXNzUGx1Z2luUmVjdChyZWN0KTsKK30KKworI2lmIEVOQUJMRShORVRTQ0FQRV9QTFVHSU5f
QVBJKQordm9pZCBQbHVnaW5WaWV3OjppbnZhbGlkYXRlUmVjdChOUFJlY3QqIHJlY3QpCit7Cisg
ICAgaWYgKCFyZWN0KSB7CisgICAgICAgIGludmFsaWRhdGUoKTsKKyAgICAgICAgcmV0dXJuOwor
ICAgIH0KKworICAgIEludFJlY3QgcihyZWN0LT5sZWZ0LCByZWN0LT50b3AsIHJlY3QtPnJpZ2h0
IC0gcmVjdC0+bGVmdCwgcmVjdC0+Ym90dG9tIC0gcmVjdC0+dG9wKTsKKworICAgIGludmFsaWRh
dGVSZWN0KHIpOworfQorCit2b2lkIFBsdWdpblZpZXc6OmludmFsaWRhdGVSZWdpb24oTlBSZWdp
b24gcmVnaW9uKQoreworICAgIG5vdEltcGxlbWVudGVkKCk7Cit9CisjZW5kaWYKKwordm9pZCBQ
bHVnaW5WaWV3Ojpmb3JjZVJlZHJhdygpCit7CisgICAgbm90SW1wbGVtZW50ZWQoKTsKK30KKwor
Ym9vbCBQbHVnaW5WaWV3OjpwbGF0Zm9ybVN0YXJ0KCkKK3sKKyAgICBBU1NFUlQobV9pc1N0YXJ0
ZWQpOworICAgIEFTU0VSVChtX3N0YXR1cyA9PSBQbHVnaW5TdGF0dXNMb2FkZWRTdWNjZXNzZnVs
bHkpOworCisgICAgbm90SW1wbGVtZW50ZWQoKTsKKyAgICByZXR1cm4gdHJ1ZTsKK30KKwordm9p
ZCBQbHVnaW5WaWV3OjpwbGF0Zm9ybURlc3Ryb3koKQoreworfQorCit9IC8vIG5hbWVzcGFjZSBX
ZWJDb3JlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L2VmbC9DaGFuZ2VMb2cgYi9Tb3VyY2Uv
V2ViS2l0L2VmbC9DaGFuZ2VMb2cKaW5kZXggMDcwOGNhZi4uZjE2NDQzOSAxMDA3NTUKLS0tIGEv
U291cmNlL1dlYktpdC9lZmwvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XZWJLaXQvZWZsL0NoYW5n
ZUxvZwpAQCAtMSwzICsxLDE1IEBACisyMDExLTA2LTEwICBNYXJpdXN6IEdyemVnb3JjenlrICA8
bWFyaXVzei5nQHNhbXN1bmcuY29tPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09Q
UyEpLgorCisgICAgICAgIEJ1ZyA0NDUwNSAtIFtFRkxdIE1pc3NpbmcgcGx1Z2lucyBzdXBwb3J0
IGZvciBlZmwgcG9ydAorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5j
Z2k/aWQ9NDQ1MDUKKworICAgICAgICBJbXBsZW1lbnRhdGlvbiBvZiBld2tfZnJhbWVfcGx1Z2lu
X2NyZWF0ZSgpIC0gY3JlYXRpbmcgUGx1Z2luVmlldworCisgICAgICAgICogZXdrL2V3a19mcmFt
ZS5jcHA6CisgICAgICAgIChld2tfZnJhbWVfcGx1Z2luX2NyZWF0ZSk6CisKIDIwMTEtMDYtMDgg
IEphZWh1biBMaW0gIDxsamFlaHVuLmxpbUBzYW1zdW5nLmNvbT4KIAogICAgICAgICBSZXZpZXdl
ZCBieSBBbnRvbmlvIEdvbWVzLgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9lZmwvZXdrL2V3
a19mcmFtZS5jcHAgYi9Tb3VyY2UvV2ViS2l0L2VmbC9ld2svZXdrX2ZyYW1lLmNwcAppbmRleCAz
ODUzZjg2Li4zNDYxMWNhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L2VmbC9ld2svZXdrX2Zy
YW1lLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0L2VmbC9ld2svZXdrX2ZyYW1lLmNwcApAQCAtMjAz
NSw1ICsyMDM1LDI0IEBAIHZvaWQgZXdrX2ZyYW1lX2ZvcmNlX2xheW91dChFdmFzX09iamVjdCog
bykKIAogV1RGOjpQYXNzUmVmUHRyPFdlYkNvcmU6OldpZGdldD4gZXdrX2ZyYW1lX3BsdWdpbl9j
cmVhdGUoRXZhc19PYmplY3QqIG8sIGNvbnN0IFdlYkNvcmU6OkludFNpemUmIHBsdWdpblNpemUs
IFdlYkNvcmU6OkhUTUxQbHVnSW5FbGVtZW50KiBlbGVtZW50LCBjb25zdCBXZWJDb3JlOjpLVVJM
JiB1cmwsIGNvbnN0IFdURjo6VmVjdG9yPFdURjo6U3RyaW5nPiYgcGFyYW1OYW1lcywgY29uc3Qg
V1RGOjpWZWN0b3I8V1RGOjpTdHJpbmc+JiBwYXJhbVZhbHVlcywgY29uc3QgV1RGOjpTdHJpbmcm
IG1pbWVUeXBlLCBib29sIGxvYWRNYW51YWxseSkKIHsKKyNpZiBFTkFCTEUoTkVUU0NBUEVfUExV
R0lOX0FQSSkKKyAgICBEQkcoIm89JXAsIHNpemU9JWR4JWQsIGVsZW1lbnQ9JXAsIHVybD0lcywg
bWltZVR5cGU9JXMiLAorICAgICAgICBvLCBwbHVnaW5TaXplLndpZHRoKCksIHBsdWdpblNpemUu
aGVpZ2h0KCksIGVsZW1lbnQsCisgICAgICAgIHVybC5wcmV0dHlVUkwoKS51dGY4KCkuZGF0YSgp
LCBtaW1lVHlwZS51dGY4KCkuZGF0YSgpKTsKKworICAgIEVXS19GUkFNRV9TRF9HRVRfT1JfUkVU
VVJOKG8sIHNkLCAwKTsKKworICAgIC8vIFRPRE86IGVtaXQgc2lnbmFsIGFuZCBhc2sgd2Via2l0
IHVzZXJzIGlmIHNvbWV0aGluZyBlbHNlIHNob3VsZCBiZSBkb25lLgorICAgIC8vIGxpa2UgY3Jl
YXRpbmcgYW5vdGhlciB4IHdpbmRvdyAoc2VlIGd0aywgaXQgYWxsb3dzIHVzZXJzIHRvIGNyZWF0
ZQorICAgIC8vIEd0a1BsdWdpbldpZGdldC4KKworICAgIFdURjo6UmVmUHRyPFdlYkNvcmU6OlBs
dWdpblZpZXc+IHBsdWdpblZpZXcgPSBXZWJDb3JlOjpQbHVnaW5WaWV3OjpjcmVhdGUKKyAgICAg
ICAgKHNkLT5mcmFtZSwgcGx1Z2luU2l6ZSwgZWxlbWVudCwgdXJsLCBwYXJhbU5hbWVzLCBwYXJh
bVZhbHVlcywKKyAgICAgICAgbWltZVR5cGUsIGxvYWRNYW51YWxseSk7CisKKyAgICBpZiAocGx1
Z2luVmlldy0+c3RhdHVzKCkgPT0gV2ViQ29yZTo6UGx1Z2luU3RhdHVzTG9hZGVkU3VjY2Vzc2Z1
bGx5KQorICAgICAgICByZXR1cm4gcGx1Z2luVmlldzsKKyNlbHNlCiAgICAgcmV0dXJuIDA7Cisj
ZW5kaWYgLy8gI2lmIEVOQUJMRShORVRTQ0FQRV9QTFVHSU5fQVBJKQogfQo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>97117</attachid>
            <date>2011-06-14 07:40:26 -0700</date>
            <delta_ts>2011-07-28 09:26:40 -0700</delta_ts>
            <desc>EFL&apos;s plugin support</desc>
            <filename>efl_plugins.patch</filename>
            <type>text/plain</type>
            <size>26545</size>
            <attacher name="Mariusz Grzegorczyk">mariusz.g</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cgYi9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvQ2hhbmdlTG9nCmluZGV4IDUzZTUxNzYuLjU3OWQ3NWUgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKKysrIGIvU291cmNlL0phdmFTY3JpcHRD
b3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDE0IEBACisyMDExLTA2LTEwICBNYXJpdXN6IEdyemVn
b3JjenlrICA8bWFyaXVzei5nQHNhbXN1bmcuY29tPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5P
Qk9EWSAoT09QUyEpLgorCisgICAgICAgIEJ1ZyA0NDUwNSAtIFtFRkxdIE1pc3NpbmcgcGx1Z2lu
cyBzdXBwb3J0IGZvciBlZmwgcG9ydAorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9z
aG93X2J1Zy5jZ2k/aWQ9NDQ1MDUKKworICAgICAgICBBZGQgZGVmaW5lIG9mIEVOQUJMRV9QTFVH
SU5fUEFDS0FHRV9TSU1QTEVfSEFTSCBmb3IgZWZsIHBvcnQKKworICAgICAgICAqIHd0Zi9QbGF0
Zm9ybS5oOgorCiAyMDExLTA2LTA4ICBTaGVyaWZmIEJvdCAgPHdlYmtpdC5yZXZpZXcuYm90QGdt
YWlsLmNvbT4KIAogICAgICAgICBVbnJldmlld2VkLCByb2xsaW5nIG91dCByODg0MDQuCmRpZmYg
LS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd3RmL1BsYXRmb3JtLmggYi9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvd3RmL1BsYXRmb3JtLmgKaW5kZXggNGZjNzk2NS4uZDk3MzU4MSAxMDA2NDQK
LS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3d0Zi9QbGF0Zm9ybS5oCisrKyBiL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS93dGYvUGxhdGZvcm0uaApAQCAtMTE2OCw3ICsxMTY4LDcgQEAKICNkZWZp
bmUgV0FSTl9VTlVTRURfUkVUVVJOCiAjZW5kaWYKIAotI2lmICFFTkFCTEUoTkVUU0NBUEVfUExV
R0lOX0FQSSkgfHwgKEVOQUJMRShORVRTQ0FQRV9QTFVHSU5fQVBJKSAmJiAoKE9TKFVOSVgpICYm
IChQTEFURk9STShRVCkgfHwgUExBVEZPUk0oV1gpKSkgfHwgUExBVEZPUk0oR1RLKSkpCisjaWYg
IUVOQUJMRShORVRTQ0FQRV9QTFVHSU5fQVBJKSB8fCAoRU5BQkxFKE5FVFNDQVBFX1BMVUdJTl9B
UEkpICYmICgoT1MoVU5JWCkgJiYgKFBMQVRGT1JNKFFUKSB8fCBQTEFURk9STShXWCkpKSB8fCBQ
TEFURk9STShHVEspIHx8IFBMQVRGT1JNKEVGTCkpKQogI2RlZmluZSBFTkFCTEVfUExVR0lOX1BB
Q0tBR0VfU0lNUExFX0hBU0ggMQogI2VuZGlmCiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L0NNYWtlTGlzdHNFZmwudHh0IGIvU291cmNlL1dlYkNvcmUvQ01ha2VMaXN0c0VmbC50eHQKaW5k
ZXggZDRhMGE2MS4uZTA1NzU3NCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ01ha2VMaXN0
c0VmbC50eHQKKysrIGIvU291cmNlL1dlYkNvcmUvQ01ha2VMaXN0c0VmbC50eHQKQEAgLTExLDYg
KzExLDcgQEAgTElTVChBUFBFTkQgV2ViQ29yZV9JTkNMVURFX0RJUkVDVE9SSUVTCiAgICIke1dF
QkNPUkVfRElSfS9wbGF0Zm9ybS9ncmFwaGljcy9lZmwiCiAgICIke1dFQkNPUkVfRElSfS9wYWdl
L2VmbCIKICAgIiR7V0VCQ09SRV9ESVJ9L2FjY2Vzc2liaWxpdHkvZWZsIgorICAiJHtXRUJDT1JF
X0RJUn0vcGx1Z2lucy9lZmwiCiAgICIke1dFQktJVF9ESVJ9L2VmbC9XZWJDb3JlU3VwcG9ydCIK
ICAgIiR7V0VCS0lUX0RJUn0vZWZsL2V3ayIKICAgIiR7REVSSVZFRF9TT1VSQ0VTX0RJUn0iCkBA
IC03Myw5ICs3NCwyNyBAQCBMSVNUKEFQUEVORCBXZWJDb3JlX1NPVVJDRVMKICAgcGxhdGZvcm0v
aW1hZ2UtZGVjb2RlcnMvd2VicC9XRUJQSW1hZ2VEZWNvZGVyLmNwcAogICBwbGF0Zm9ybS9wb3Np
eC9GaWxlU3lzdGVtUE9TSVguY3BwCiAgIHBsYXRmb3JtL3RleHQvZWZsL1RleHRCcmVha0l0ZXJh
dG9ySW50ZXJuYWxJQ1VFZmwuY3BwCi0gIHBsdWdpbnMvUGx1Z2luRGF0YU5vbmUuY3BwCiApCiAK
K0lGIChFTkFCTEVfTkVUU0NBUEVfUExVR0lOX0FQSSkKKyAgTElTVChBUFBFTkQgV2ViQ29yZV9T
T1VSQ0VTCisgICAgcGx1Z2lucy9QbHVnaW5EYXRhYmFzZS5jcHAKKyAgICBwbHVnaW5zL1BsdWdp
bkRlYnVnLmNwcAorICAgIHBsdWdpbnMvUGx1Z2luUGFja2FnZS5jcHAKKyAgICBwbHVnaW5zL1Bs
dWdpblN0cmVhbS5jcHAKKyAgICBwbHVnaW5zL1BsdWdpblZpZXcuY3BwCisgICAgcGx1Z2lucy9l
ZmwvUGx1Z2luRGF0YUVmbC5jcHAKKyAgICBwbHVnaW5zL2VmbC9QbHVnaW5QYWNrYWdlRWZsLmNw
cAorICAgIHBsdWdpbnMvZWZsL1BsdWdpblZpZXdFZmwuY3BwCisgICkKK0VMU0UgKCkKKyAgTElT
VChBUFBFTkQgV2ViQ29yZV9TT1VSQ0VTCisgICAgcGx1Z2lucy9QbHVnaW5EYXRhTm9uZS5jcHAK
KyAgICBwbHVnaW5zL1BsdWdpblBhY2thZ2VOb25lLmNwcAorICAgIHBsdWdpbnMvUGx1Z2luVmll
d05vbmUuY3BwCisgICkKK0VORElGICgpCisKIExJU1QoQVBQRU5EIFdlYkNvcmVfVVNFUl9BR0VO
VF9TVFlMRV9TSEVFVFMKICAgICAke1dFQkNPUkVfRElSfS9jc3MvbWVkaWFDb250cm9sc0VmbC5j
c3MKICkKQEAgLTE0NCw2ICsxNjMsNyBAQCBJRiAoV1RGX1VTRV9TT1VQKQogICBMSVNUKEFQUEVO
RCBXZWJDb3JlX1NPVVJDRVMKICAgICBwbGF0Zm9ybS9uZXR3b3JrL3NvdXAvQ29va2llSmFyU291
cC5jcHAKICAgICBwbGF0Zm9ybS9uZXR3b3JrL3NvdXAvR093blB0clNvdXAuY3BwCisgICAgcGxh
dGZvcm0vbmV0d29yay9zb3VwL1Byb3h5U2VydmVyU291cC5jcHAKICAgICBwbGF0Zm9ybS9uZXR3
b3JrL3NvdXAvUmVzb3VyY2VIYW5kbGVTb3VwLmNwcAogICAgIHBsYXRmb3JtL25ldHdvcmsvc291
cC9SZXNvdXJjZVJlcXVlc3RTb3VwLmNwcAogICAgIHBsYXRmb3JtL25ldHdvcmsvc291cC9SZXNv
dXJjZVJlc3BvbnNlU291cC5jcHAKQEAgLTE2MCw2ICsxODAsNyBAQCBJRiAoV1RGX1VTRV9DVVJM
KQogICAgIHBsYXRmb3JtL25ldHdvcmsvY3VybC9Db29raWVKYXJDdXJsLmNwcAogICAgIHBsYXRm
b3JtL25ldHdvcmsvY3VybC9ETlNDdXJsLmNwcAogICAgIHBsYXRmb3JtL25ldHdvcmsvY3VybC9G
b3JtRGF0YVN0cmVhbUN1cmwuY3BwCisgICAgcGxhdGZvcm0vbmV0d29yay9jdXJsL1Byb3h5U2Vy
dmVyQ3VybC5jcHAKICAgICBwbGF0Zm9ybS9uZXR3b3JrL2N1cmwvUmVzb3VyY2VIYW5kbGVDdXJs
LmNwcAogICAgIHBsYXRmb3JtL25ldHdvcmsvY3VybC9SZXNvdXJjZUhhbmRsZU1hbmFnZXIuY3Bw
CiAgICAgcGxhdGZvcm0vbmV0d29yay9jdXJsL1NvY2tldFN0cmVhbUhhbmRsZUN1cmwuY3BwCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFu
Z2VMb2cKaW5kZXggNzI1MjIxOC4uYzUxMmQzYyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUv
Q2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDQ5IEBA
CisyMDExLTA2LTEwICBNYXJpdXN6IEdyemVnb3JjenlrICA8bWFyaXVzei5nQHNhbXN1bmcuY29t
PgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIEJ1ZyA0
NDUwNSAtIFtFRkxdIE1pc3NpbmcgcGx1Z2lucyBzdXBwb3J0IGZvciBlZmwgcG9ydAorICAgICAg
ICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NDQ1MDUKKworICAgICAg
ICBCYXNpYyBmdW5jdGlvbmFsaXR5IG9mIHBsdWdpbnMgZm9yIGVmbCBwb3J0CisKKyAgICAgICAg
VGVtcGxhdGUgdmVyc2lvbiwgc28gbm8gbmV3IHRlc3RzIGFyZSBuZWVkZWQuCisKKyAgICAgICAg
KiBDTWFrZUxpc3RzRWZsLnR4dDoKKyAgICAgICAgKiBwbHVnaW5zL1BsdWdpblZpZXcuaDoKKyAg
ICAgICAgKiBwbHVnaW5zL2VmbC9QbHVnaW5EYXRhRWZsLmNwcDogQWRkZWQuCisgICAgICAgIChX
ZWJDb3JlOjpQbHVnaW5EYXRhOjppbml0UGx1Z2lucyk6CisgICAgICAgIChXZWJDb3JlOjpQbHVn
aW5EYXRhOjpyZWZyZXNoKToKKyAgICAgICAgKiBwbHVnaW5zL2VmbC9QbHVnaW5QYWNrYWdlRWZs
LmNwcDogQWRkZWQuCisgICAgICAgIChXZWJDb3JlOjpQbHVnaW5QYWNrYWdlOjpmZXRjaEluZm8p
OgorICAgICAgICAoV2ViQ29yZTo6UGx1Z2luUGFja2FnZTo6TlBWZXJzaW9uKToKKyAgICAgICAg
KFdlYkNvcmU6OlBsdWdpblBhY2thZ2U6OmxvYWQpOgorICAgICAgICAqIHBsdWdpbnMvZWZsL1Bs
dWdpblZpZXdFZmwuY3BwOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6OlBsdWdpblZpZXc6OmRp
c3BhdGNoTlBFdmVudCk6CisgICAgICAgIChXZWJDb3JlOjpQbHVnaW5WaWV3OjpoYWx0KToKKyAg
ICAgICAgKFdlYkNvcmU6OlBsdWdpblZpZXc6OmhhbmRsZUZvY3VzSW5FdmVudCk6CisgICAgICAg
IChXZWJDb3JlOjpQbHVnaW5WaWV3OjpoYW5kbGVGb2N1c091dEV2ZW50KToKKyAgICAgICAgKFdl
YkNvcmU6OlBsdWdpblZpZXc6OnJlc3RhcnQpOgorICAgICAgICAoV2ViQ29yZTo6UGx1Z2luVmll
dzo6aGFuZGxlS2V5Ym9hcmRFdmVudCk6CisgICAgICAgIChXZWJDb3JlOjpQbHVnaW5WaWV3Ojpo
YW5kbGVNb3VzZUV2ZW50KToKKyAgICAgICAgKFdlYkNvcmU6OlBsdWdpblZpZXc6OnVwZGF0ZVBs
dWdpbldpZGdldCk6CisgICAgICAgIChXZWJDb3JlOjpQbHVnaW5WaWV3OjpzZXRGb2N1cyk6Cisg
ICAgICAgIChXZWJDb3JlOjpQbHVnaW5WaWV3OjpzaG93KToKKyAgICAgICAgKFdlYkNvcmU6OlBs
dWdpblZpZXc6OmhpZGUpOgorICAgICAgICAoV2ViQ29yZTo6UGx1Z2luVmlldzo6cGFpbnQpOgor
ICAgICAgICAoV2ViQ29yZTo6UGx1Z2luVmlldzo6c2V0UGFyZW50KToKKyAgICAgICAgKFdlYkNv
cmU6OlBsdWdpblZpZXc6OnNldE5QV2luZG93UmVjdCk6CisgICAgICAgIChXZWJDb3JlOjpQbHVn
aW5WaWV3OjpzZXROUFdpbmRvd0lmTmVlZGVkKToKKyAgICAgICAgKFdlYkNvcmU6OlBsdWdpblZp
ZXc6OnNldFBhcmVudFZpc2libGUpOgorICAgICAgICAoV2ViQ29yZTo6UGx1Z2luVmlldzo6aGFu
ZGxlUG9zdFJlYWRGaWxlKToKKyAgICAgICAgKFdlYkNvcmU6OlBsdWdpblZpZXc6OnBsYXRmb3Jt
R2V0VmFsdWVTdGF0aWMpOgorICAgICAgICAoV2ViQ29yZTo6UGx1Z2luVmlldzo6cGxhdGZvcm1H
ZXRWYWx1ZSk6CisgICAgICAgIChXZWJDb3JlOjpQbHVnaW5WaWV3OjppbnZhbGlkYXRlUmVjdCk6
CisgICAgICAgIChXZWJDb3JlOjpQbHVnaW5WaWV3OjppbnZhbGlkYXRlUmVnaW9uKToKKyAgICAg
ICAgKFdlYkNvcmU6OlBsdWdpblZpZXc6OmZvcmNlUmVkcmF3KToKKyAgICAgICAgKFdlYkNvcmU6
OlBsdWdpblZpZXc6OnBsYXRmb3JtU3RhcnQpOgorICAgICAgICAoV2ViQ29yZTo6UGx1Z2luVmll
dzo6cGxhdGZvcm1EZXN0cm95KToKKwogMjAxMS0wNi0wOCAgSGF5YXRvIEl0byAgPGhheWF0b0Bj
aHJvbWl1bS5vcmc+CiAKICAgICAgICAgUmV2aWV3ZWQgYnkgSGFqaW1lIE1vcml0YS4KZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsdWdpbnMvUGx1Z2luVmlldy5oIGIvU291cmNlL1dlYkNv
cmUvcGx1Z2lucy9QbHVnaW5WaWV3LmgKaW5kZXggYTVjNGI5MC4uNGE1MGNhYiAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYkNvcmUvcGx1Z2lucy9QbHVnaW5WaWV3LmgKKysrIGIvU291cmNlL1dlYkNv
cmUvcGx1Z2lucy9QbHVnaW5WaWV3LmgKQEAgLTM3OSw3ICszNzksNyBAQCBuYW1lc3BhY2UgV2Vi
Q29yZSB7CiAgICAgICAgIGJvb2wgbV9oYXZlVXBkYXRlZFBsdWdpbldpZGdldDsKICNlbmRpZgog
Ci0jaWYgKChQTEFURk9STShRVCkgfHwgUExBVEZPUk0oV1gpKSAmJiBPUyhXSU5ET1dTKSkgfHwg
ZGVmaW5lZChYUF9NQUNPU1gpCisjaWYgKChQTEFURk9STShRVCkgfHwgUExBVEZPUk0oV1gpKSAm
JiBPUyhXSU5ET1dTKSkgfHwgZGVmaW5lZChYUF9NQUNPU1gpIHx8IFBMQVRGT1JNKEVGTCkKICAg
ICAgICAgLy8gT24gTWFjIE9TWCBhbmQgUXQvV2luZG93cyB0aGUgcGx1Z2luIGRvZXMgbm90IGhh
dmUgaXRzIG93biBuYXRpdmUgd2lkZ2V0LAogICAgICAgICAvLyBidXQgaXMgdXNpbmcgdGhlIGNv
bnRhaW5pbmcgd2luZG93IGFzIGl0cyByZWZlcmVuY2UgZm9yIHBvc2l0aW9uaW5nL3BhaW50aW5n
LgogICAgICAgICBQbGF0Zm9ybVBsdWdpbldpZGdldCBtX3dpbmRvdzsKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL3BsdWdpbnMvZWZsL1BsdWdpbkRhdGFFZmwuY3BwIGIvU291cmNlL1dlYkNv
cmUvcGx1Z2lucy9lZmwvUGx1Z2luRGF0YUVmbC5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5k
ZXggMDAwMDAwMC4uYzIxZDUxYgotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3Bs
dWdpbnMvZWZsL1BsdWdpbkRhdGFFZmwuY3BwCkBAIC0wLDAgKzEsNjYgQEAKKy8qCisgICAgQ29w
eXJpZ2h0IChDKSAyMDA2LCAyMDA3IEFwcGxlIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisg
ICAgQ29weXJpZ2h0IChDKSAyMDA4IFRyb2xsdGVjaCBBU0EKKyAgICBDb3B5cmlnaHQgKEMpIDIw
MDggQ29sbGFib3JhIEx0ZC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAgICBDb3B5cmlnaHQgKEMp
IDIwMDggSU5kVCAtIEluc3RpdHV0byBOb2tpYSBkZSBUZWNub2xvZ2lhCisgICAgQ29weXJpZ2h0
IChDKSAyMDA5LTIwMTAgUHJvRlVTSU9OIGVtYmVkZGVkIHN5c3RlbXMKKyAgICBDb3B5cmlnaHQg
KEMpIDIwMDktMjAxMSBTYW1zdW5nIEVsZWN0cm9uaWNzCisKKyAgICBUaGlzIGxpYnJhcnkgaXMg
ZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgICAgbW9kaWZ5
IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAg
ICBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBl
aXRoZXIKKyAgICB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikg
YW55IGxhdGVyIHZlcnNpb24uCisKKyAgICBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4g
dGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAgICBidXQgV0lUSE9VVCBBTlkgV0FS
UkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICAgIE1FUkNIQU5U
QUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05V
CisgICAgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisK
KyAgICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBH
ZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgICAgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0
aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KKyAgICB0aGUgRnJlZSBTb2Z0
d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAor
ICAgIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgorKi8KKworI2luY2x1ZGUgImNvbmZpZy5o
IgorI2luY2x1ZGUgIlBsdWdpbkRhdGEuaCIKKworI2luY2x1ZGUgIlBsdWdpbkRhdGFiYXNlLmgi
CisjaW5jbHVkZSAiUGx1Z2luUGFja2FnZS5oIgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK3Zv
aWQgUGx1Z2luRGF0YTo6aW5pdFBsdWdpbnMoY29uc3QgUGFnZSopCit7CisgICAgY29uc3QgVmVj
dG9yPFBsdWdpblBhY2thZ2UqPiYgcGx1Z2lucyA9IFBsdWdpbkRhdGFiYXNlOjppbnN0YWxsZWRQ
bHVnaW5zKCktPnBsdWdpbnMoKTsKKworICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgcGx1Z2lu
cy5zaXplKCk7ICsraSkgeworICAgICAgICBQbHVnaW5QYWNrYWdlKiBwYWNrYWdlID0gcGx1Z2lu
c1tpXTsKKyAgICAgICAgUGx1Z2luSW5mbyBpbmZvOworCisgICAgICAgIGluZm8ubmFtZSA9IHBh
Y2thZ2UtPm5hbWUoKTsKKyAgICAgICAgaW5mby5maWxlID0gcGFja2FnZS0+ZmlsZU5hbWUoKTsK
KyAgICAgICAgaW5mby5kZXNjID0gcGFja2FnZS0+ZGVzY3JpcHRpb24oKTsKKworICAgICAgICBj
b25zdCBNSU1FVG9EZXNjcmlwdGlvbnNNYXAmIG1pbWVUb0Rlc2NyaXB0aW9ucyA9IHBhY2thZ2Ut
Pm1pbWVUb0Rlc2NyaXB0aW9ucygpOworICAgICAgICBNSU1FVG9EZXNjcmlwdGlvbnNNYXA6OmNv
bnN0X2l0ZXJhdG9yIGVuZCA9IG1pbWVUb0Rlc2NyaXB0aW9ucy5lbmQoKTsKKyAgICAgICAgZm9y
IChNSU1FVG9EZXNjcmlwdGlvbnNNYXA6OmNvbnN0X2l0ZXJhdG9yIGl0ID0gbWltZVRvRGVzY3Jp
cHRpb25zLmJlZ2luKCk7IGl0ICE9IGVuZDsgKytpdCkgeworICAgICAgICAgICAgTWltZUNsYXNz
SW5mbyBtaW1lOworCisgICAgICAgICAgICBtaW1lLnR5cGUgPSBpdC0+Zmlyc3Q7CisgICAgICAg
ICAgICBtaW1lLmRlc2MgPSBpdC0+c2Vjb25kOworICAgICAgICAgICAgbWltZS5leHRlbnNpb25z
ID0gcGFja2FnZS0+bWltZVRvRXh0ZW5zaW9ucygpLmdldChtaW1lLnR5cGUpOworCisgICAgICAg
ICAgICBpbmZvLm1pbWVzLmFwcGVuZChtaW1lKTsKKyAgICAgICAgfQorCisgICAgICAgIG1fcGx1
Z2lucy5hcHBlbmQoaW5mbyk7CisgICAgfQorfQorCit2b2lkIFBsdWdpbkRhdGE6OnJlZnJlc2go
KQoreworICAgIFBsdWdpbkRhdGFiYXNlOjppbnN0YWxsZWRQbHVnaW5zKCktPnJlZnJlc2goKTsK
K30KKworfTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsdWdpbnMvZWZsL1BsdWdpblBh
Y2thZ2VFZmwuY3BwIGIvU291cmNlL1dlYkNvcmUvcGx1Z2lucy9lZmwvUGx1Z2luUGFja2FnZUVm
bC5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjE4YWVhNgotLS0gL2Rl
di9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsdWdpbnMvZWZsL1BsdWdpblBhY2thZ2VFZmwu
Y3BwCkBAIC0wLDAgKzEsMTY4IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA2LCAyMDA3IEFw
cGxlIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDggQ29s
bGFib3JhIEx0ZC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAwOCBO
dWFudGkgTHRkLgorICogQ29weXJpZ2h0IChDKSAyMDA4IElOZFQgLSBJbnN0aXR1dG8gTm9raWEg
ZGUgVGVjbm9sb2dpYQorICogQ29weXJpZ2h0IChDKSAyMDA5LTIwMTAgUHJvRlVTSU9OIGVtYmVk
ZGVkIHN5c3RlbXMKKyAqIENvcHlyaWdodCAoQykgMjAwOS0yMDExIFNhbXN1bmcgRWxlY3Ryb25p
Y3MKKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv
cm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92
aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJl
ZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJp
Z2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVz
dCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAg
ZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRp
c3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIENP
TVBVVEVSLCBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FS
UkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBX
QVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFS
CisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgQ09N
UFVURVIsIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1Qs
IElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFV
RU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VS
RU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEs
IE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VE
IEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1Qs
IFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBP
VEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBT
T0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFH
RS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiUGx1Z2luUGFja2FnZS5o
IgorCisjaW5jbHVkZSAiTUlNRVR5cGVSZWdpc3RyeS5oIgorI2luY2x1ZGUgIk5vdEltcGxlbWVu
dGVkLmgiCisjaW5jbHVkZSAiUGx1Z2luRGF0YWJhc2UuaCIKKyNpbmNsdWRlICJQbHVnaW5EZWJ1
Zy5oIgorI2luY2x1ZGUgIm5wcnVudGltZV9pbXBsLmgiCisKKyNpbmNsdWRlIDxFaW5hLmg+Cisj
aW5jbHVkZSA8ZGxmY24uaD4KKyNpbmNsdWRlIDx3dGYvdGV4dC9DU3RyaW5nLmg+CisKK25hbWVz
cGFjZSBXZWJDb3JlIHsKKwordHlwZWRlZiBjaGFyKiAoKk5QUF9HZXRNSU1FRGVzY3JpcHRpb25Q
cm9jUHRyKSgpOworCitib29sIFBsdWdpblBhY2thZ2U6OmZldGNoSW5mbygpCit7CisgICAgY29u
c3QgY2hhciAqZXJybXNnOworCisgICAgaWYgKCFsb2FkKCkpCisgICAgICAgIHJldHVybiBmYWxz
ZTsKKworICAgIE5QUF9HZXRWYWx1ZVByb2NQdHIgZ2V0VmFsdWUgPSAwOworICAgIE5QUF9HZXRN
SU1FRGVzY3JpcHRpb25Qcm9jUHRyIGdldE1JTUVEZXNjcmlwdGlvbiA9IDA7CisKKyAgICBnZXRW
YWx1ZSA9IHJlaW50ZXJwcmV0X2Nhc3Q8TlBQX0dldFZhbHVlUHJvY1B0cj4oZGxzeW0obV9tb2R1
bGUsICJOUF9HZXRWYWx1ZSIpKTsKKyAgICBpZiAoKGVycm1zZyA9IGRsZXJyb3IoKSkpIHsKKyAg
ICAgICAgRUlOQV9MT0dfRVJSKCJDb3VsZCBub3QgZ2V0IHN5bWJvbCBOUF9HZXRWYWx1ZTogJXMi
LCBlcnJtc2cpOworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorCisgICAgZ2V0TUlNRURl
c2NyaXB0aW9uID0gcmVpbnRlcnByZXRfY2FzdDxOUFBfR2V0TUlNRURlc2NyaXB0aW9uUHJvY1B0
cj4oZGxzeW0obV9tb2R1bGUsICJOUF9HZXRNSU1FRGVzY3JpcHRpb24iKSk7CisgICAgaWYgKChl
cnJtc2cgPSBkbGVycm9yKCkpKSB7CisgICAgICAgIEVJTkFfTE9HX0VSUigiQ291bGQgbm90IGdl
dCBzeW1ib2wgTlBfR2V0TUlNRURlc2NyaXB0aW9uOiAlcyIsIGVycm1zZyk7CisgICAgICAgIHJl
dHVybiBmYWxzZTsKKyAgICB9CisKKyAgICBjaGFyKiBidWZmZXIgPSAwOworICAgIE5QRXJyb3Ig
ZXJyID0gZ2V0VmFsdWUoMCwgTlBQVnBsdWdpbk5hbWVTdHJpbmcsIHN0YXRpY19jYXN0PHZvaWQq
PigmYnVmZmVyKSk7CisgICAgaWYgKGVyciAhPSBOUEVSUl9OT19FUlJPUikKKyAgICAgICAgcmV0
dXJuIGZhbHNlOworICAgIG1fbmFtZSA9IGJ1ZmZlcjsKKworICAgIGJ1ZmZlciA9IDA7CisgICAg
ZXJyID0gZ2V0VmFsdWUoMCwgTlBQVnBsdWdpbkRlc2NyaXB0aW9uU3RyaW5nLCBzdGF0aWNfY2Fz
dDx2b2lkKj4oJmJ1ZmZlcikpOworICAgIGlmIChlcnIgIT0gTlBFUlJfTk9fRVJST1IpCisgICAg
ICAgIHJldHVybiBmYWxzZTsKKyAgICBtX2Rlc2NyaXB0aW9uID0gYnVmZmVyOworICAgIGRldGVy
bWluZU1vZHVsZVZlcnNpb25Gcm9tRGVzY3JpcHRpb24oKTsKKworICAgIFN0cmluZyBkZXNjcmlw
dGlvbiA9IGdldE1JTUVEZXNjcmlwdGlvbigpOworCisgICAgVmVjdG9yPFN0cmluZz4gdHlwZXM7
CisgICAgZGVzY3JpcHRpb24uc3BsaXQoVUNoYXIoJzsnKSwgZmFsc2UsIHR5cGVzKTsKKworICAg
IGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgdHlwZXMuc2l6ZSgpOyArK2kpIHsKKyAgICAgICAgVmVj
dG9yPFN0cmluZz4gbWltZTsKKyAgICAgICAgdHlwZXNbaV0uc3BsaXQoVUNoYXIoJzonKSwgdHJ1
ZSwgbWltZSk7CisKKyAgICAgICAgaWYgKCFtaW1lLmlzRW1wdHkoKSA+IDApIHsKKyAgICAgICAg
ICAgIFZlY3RvcjxTdHJpbmc+IGV4dHM7CisKKyAgICAgICAgICAgIGlmIChtaW1lLnNpemUoKSA+
IDEpCisgICAgICAgICAgICAgICAgbWltZVsxXS5zcGxpdChVQ2hhcignLCcpLCBmYWxzZSwgZXh0
cyk7CisKKyAgICAgICAgICAgIGRldGVybWluZVF1aXJrcyhtaW1lWzBdKTsKKyAgICAgICAgICAg
IG1fbWltZVRvRXh0ZW5zaW9ucy5hZGQobWltZVswXSwgZXh0cyk7CisKKyAgICAgICAgICAgIGlm
IChtaW1lLnNpemUoKSA+IDIpCisgICAgICAgICAgICAgICAgbV9taW1lVG9EZXNjcmlwdGlvbnMu
YWRkKG1pbWVbMF0sIG1pbWVbMl0pOworICAgICAgICB9CisgICAgfQorCisgICAgcmV0dXJuIHRy
dWU7Cit9CisKK3VpbnQxNl90IFBsdWdpblBhY2thZ2U6Ok5QVmVyc2lvbigpIGNvbnN0Cit7Cisg
ICAgcmV0dXJuIE5QVkVSU19IQVNfUExVR0lOX1RIUkVBRF9BU1lOQ19DQUxMOworfQorCitib29s
IFBsdWdpblBhY2thZ2U6OmxvYWQoKQoreworICAgIGNoYXIqIGVycm1zZzsKKworICAgIGlmICht
X2lzTG9hZGVkKSB7CisgICAgICAgIG1fbG9hZENvdW50Kys7CisgICAgICAgIHJldHVybiB0cnVl
OworICAgIH0KKworICAgIG1fbW9kdWxlID0gZGxvcGVuKG1fcGF0aC51dGY4KCkuZGF0YSgpLCBS
VExEX0xBWlkgfCBSVExEX0xPQ0FMKTsKKyAgICBpZiAoKGVycm1zZyA9IGRsZXJyb3IoKSkpIHsK
KyAgICAgICAgRUlOQV9MT0dfV0FSTigiJXMgbm90IGxvYWRlZDogJXMiLCBtX3BhdGgudXRmOCgp
LmRhdGEoKSwgZXJybXNnKTsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKworICAgIG1f
aXNMb2FkZWQgPSB0cnVlOworCisgICAgTlBfSW5pdGlhbGl6ZUZ1bmNQdHIgaW5pdGlhbGl6ZTsK
KyAgICBOUEVycm9yIGVycjsKKworICAgIGluaXRpYWxpemUgPSAoTlBfSW5pdGlhbGl6ZUZ1bmNQ
dHIpZGxzeW0obV9tb2R1bGUsICJOUF9Jbml0aWFsaXplIik7CisgICAgaWYgKChlcnJtc2cgPSBk
bGVycm9yKCkpKSB7CisgICAgICAgIEVJTkFfTE9HX0VSUigiQ291bGQgbm90IGdldCBzeW1ib2wg
TlBfSW5pdGlhbGl6ZTogJXMiLCBlcnJtc2cpOworICAgICAgICBnb3RvIGFib3J0OworICAgIH0K
KworICAgIG1fTlBQX1NodXRkb3duID0gKE5QUF9TaHV0ZG93blByb2NQdHIpZGxzeW0obV9tb2R1
bGUsICJOUF9TaHV0ZG93biIpOworICAgIGlmICgoZXJybXNnID0gZGxlcnJvcigpKSkgeworICAg
ICAgICBFSU5BX0xPR19FUlIoIkNvdWxkIG5vdCBnZXQgc3ltYm9sIE5QX1NodXRkb3duOiAlcyIs
IGVycm1zZyk7CisgICAgICAgIGdvdG8gYWJvcnQ7CisgICAgfQorCisgICAgbWVtc2V0KCZtX3Bs
dWdpbkZ1bmNzLCAwLCBzaXplb2YobV9wbHVnaW5GdW5jcykpOworICAgIG1fcGx1Z2luRnVuY3Mu
c2l6ZSA9IHNpemVvZihtX3BsdWdpbkZ1bmNzKTsKKworICAgIGluaXRpYWxpemVCcm93c2VyRnVu
Y3MoKTsKKworI2lmIGRlZmluZWQoWFBfVU5JWCkKKyAgICBlcnIgPSBpbml0aWFsaXplKCZtX2Jy
b3dzZXJGdW5jcywgJm1fcGx1Z2luRnVuY3MpOworI2Vsc2UKKyAgICBlcnIgPSBpbml0aWFsaXpl
KCZtX2Jyb3dzZXJGdW5jcyk7CisjZW5kaWYKKyAgICBpZiAoZXJyICE9IE5QRVJSX05PX0VSUk9S
KQorICAgICAgICBnb3RvIGFib3J0OworCisgICAgbV9sb2FkQ291bnQrKzsKKyAgICByZXR1cm4g
dHJ1ZTsKKworYWJvcnQ6CisgICAgRUlOQV9MT0dfREJHKCJmYWlsZWQgdG8gbG9hZCBwbHVnaW4s
IHVubG9hZCBpdCB3aXRob3V0IHNodXR0aW5nIGl0IGRvd24uIik7CisgICAgdW5sb2FkV2l0aG91
dFNodXRkb3duKCk7CisgICAgcmV0dXJuIGZhbHNlOworfQorCit9CmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9wbHVnaW5zL2VmbC9QbHVnaW5WaWV3RWZsLmNwcCBiL1NvdXJjZS9XZWJDb3Jl
L3BsdWdpbnMvZWZsL1BsdWdpblZpZXdFZmwuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4
IDAwMDAwMDAuLmUwYTY3ZGQKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbHVn
aW5zL2VmbC9QbHVnaW5WaWV3RWZsLmNwcApAQCAtMCwwICsxLDM4MSBAQAorLyoKKyAqIENvcHly
aWdodCAoQykgMjAwNiwgMjAwNyBBcHBsZSBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICog
Q29weXJpZ2h0IChDKSAyMDA4IENvbGxhYm9yYSBMdGQuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisg
KiBDb3B5cmlnaHQgKEMpIDIwMDggSU5kVCAtIEluc3RpdHV0byBOb2tpYSBkZSBUZWNub2xvZ2lh
CisgKiBDb3B5cmlnaHQgKEMpIDIwMDktMjAxMCBQcm9GVVNJT04gZW1iZWRkZWQgc3lzdGVtcwor
ICogQ29weXJpZ2h0IChDKSAyMDA5LTIwMTEgU2Ftc3VuZyBFbGVjdHJvbmljcworICoKKyAqIFJl
ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig
d2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl
IGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25z
IG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0
aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9u
IGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgor
ICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQ09NUFVURVIsIElOQy4g
YGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0Yg
TUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0Ug
QVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBDT01QVVRFUiwgSU5DLiBP
UgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElO
Q0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdF
UyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJT
VElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJ
VFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBU
SEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJ
TElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJ
U0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVO
IElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNp
bmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJQbHVnaW5WaWV3LmgiCisKKyNpbmNsdWRlICJG
cmFtZVZpZXcuaCIKKyNpbmNsdWRlICJHcmFwaGljc0NvbnRleHQuaCIKKyNpbmNsdWRlICJIVE1M
TmFtZXMuaCIKKyNpbmNsdWRlICJIVE1MUGx1Z0luRWxlbWVudC5oIgorI2luY2x1ZGUgIkhvc3RX
aW5kb3cuaCIKKyNpbmNsdWRlICJNb3VzZUV2ZW50LmgiCisjaW5jbHVkZSAiTm90SW1wbGVtZW50
ZWQuaCIKKyNpbmNsdWRlICJQbHVnaW5QYWNrYWdlLmgiCisjaW5jbHVkZSAibnBydW50aW1lX2lt
cGwuaCIKKyNpbmNsdWRlICJydW50aW1lL0pTTG9jay5oIgorI2luY2x1ZGUgPEVjb3JlX0V2YXMu
aD4KKyNpbmNsdWRlIDxFY29yZV9YLmg+CisjaW5jbHVkZSA8RXZhcy5oPgorCituYW1lc3BhY2Ug
V2ViQ29yZSB7CisKK3VzaW5nIG5hbWVzcGFjZSBIVE1MTmFtZXM7CisKKyNpZiBFTkFCTEUoTkVU
U0NBUEVfUExVR0lOX0FQSSkKK2Jvb2wgUGx1Z2luVmlldzo6ZGlzcGF0Y2hOUEV2ZW50KE5QRXZl
bnQmIGV2ZW50KQoreworICAgIGlmICghbV9wbHVnaW4tPnBsdWdpbkZ1bmNzKCktPmV2ZW50KQor
ICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBQbHVnaW5WaWV3OjpzZXRDdXJyZW50UGx1Z2lu
Vmlldyh0aGlzKTsKKyAgICBKU0M6OkpTTG9jazo6RHJvcEFsbExvY2tzIGRyb3BBbGxMb2Nrcyhm
YWxzZSk7CisgICAgc2V0Q2FsbGluZ1BsdWdpbih0cnVlKTsKKworICAgIGJvb2wgYWNjZXB0ZWQg
PSBtX3BsdWdpbi0+cGx1Z2luRnVuY3MoKS0+ZXZlbnQobV9pbnN0YW5jZSwgJmV2ZW50KTsKKwor
ICAgIHNldENhbGxpbmdQbHVnaW4oZmFsc2UpOworICAgIFBsdWdpblZpZXc6OnNldEN1cnJlbnRQ
bHVnaW5WaWV3KDApOworICAgIHJldHVybiBhY2NlcHRlZDsKK30KKyNlbmRpZgorCit2b2lkIFBs
dWdpblZpZXc6OmhhbHQoKQoreworICAgIG5vdEltcGxlbWVudGVkKCk7Cit9CisKKyNpZiBkZWZp
bmVkKFhQX1VOSVgpICYmIEVOQUJMRShORVRTQ0FQRV9QTFVHSU5fQVBJKQordm9pZCBQbHVnaW5W
aWV3OjpoYW5kbGVGb2N1c0luRXZlbnQoKQoreworICAgIG5vdEltcGxlbWVudGVkKCk7Cit9CisK
K3ZvaWQgUGx1Z2luVmlldzo6aGFuZGxlRm9jdXNPdXRFdmVudCgpCit7CisgICAgbm90SW1wbGVt
ZW50ZWQoKTsKK30KKyNlbmRpZgorCit2b2lkIFBsdWdpblZpZXc6OnJlc3RhcnQoKQoreworICAg
IG5vdEltcGxlbWVudGVkKCk7Cit9CisKK3ZvaWQgUGx1Z2luVmlldzo6aGFuZGxlS2V5Ym9hcmRF
dmVudChLZXlib2FyZEV2ZW50KikKK3sKKyAgICBub3RJbXBsZW1lbnRlZCgpOworfQorCit2b2lk
IFBsdWdpblZpZXc6OmhhbmRsZU1vdXNlRXZlbnQoTW91c2VFdmVudCogZXZlbnQpCit7CisjaWYg
RU5BQkxFKE5FVFNDQVBFX1BMVUdJTl9BUEkpCisgICAgTlBFdmVudCB4RXZlbnQ7CisKKyAgICBJ
bnRSZWN0IHJlY3QgPSBzdGF0aWNfY2FzdDxGcmFtZVZpZXcqPihwYXJlbnQoKSktPmNvbnRlbnRz
VG9TY3JlZW4oSW50UmVjdCgwLCAwLCBldmVudC0+b2Zmc2V0WCgpLCBldmVudC0+b2Zmc2V0WSgp
KSk7CisgICAgaW50IGV2ZW50WCA9IHJlY3Qud2lkdGgoKTsKKyAgICBpbnQgZXZlbnRZID0gcmVj
dC5oZWlnaHQoKTsKKyAgICBpZiAoZXZlbnQtPnR5cGUoKSA9PSBldmVudE5hbWVzKCkubW91c2Vt
b3ZlRXZlbnQKKyAgICAgICAgICAgIHx8IGV2ZW50LT50eXBlKCkgPT0gZXZlbnROYW1lcygpLm1v
dXNlb3V0RXZlbnQKKyAgICAgICAgICAgIHx8IGV2ZW50LT50eXBlKCkgPT0gZXZlbnROYW1lcygp
Lm1vdXNlb3ZlckV2ZW50KSB7CisgICAgICAgIHhFdmVudC50eXBlID0gTW90aW9uTm90aWZ5Owor
ICAgICAgICB4RXZlbnQueG1vdGlvbi54ID0gZXZlbnRYOworICAgICAgICB4RXZlbnQueG1vdGlv
bi55ID0gZXZlbnRZOworICAgIH0gZWxzZSBpZiAoZXZlbnQtPnR5cGUoKSA9PSBldmVudE5hbWVz
KCkubW91c2Vkb3duRXZlbnQpIHsKKyAgICAgICAgeEV2ZW50LnR5cGUgPSBCdXR0b25QcmVzczsK
KyAgICAgICAgeEV2ZW50LnhidXR0b24ueCA9IGV2ZW50WDsKKyAgICAgICAgeEV2ZW50LnhidXR0
b24ueSA9IGV2ZW50WTsKKyAgICAgICAgeEV2ZW50LnhidXR0b24uYnV0dG9uID0gZXZlbnQtPmJ1
dHRvbigpICsgMTsgLy8gRE9NIE1vdXNlRXZlbnQgY291bnRzIGZyb20gMCwgYW5kIFhCdXR0b25F
dmVudCBmcm9tIDEuCisgICAgfSBlbHNlIGlmIChldmVudC0+dHlwZSgpID09IGV2ZW50TmFtZXMo
KS5tb3VzZXVwRXZlbnQpIHsKKyAgICAgICAgeEV2ZW50LnR5cGUgPSBCdXR0b25SZWxlYXNlOwor
ICAgICAgICB4RXZlbnQueGJ1dHRvbi54ID0gZXZlbnRYOworICAgICAgICB4RXZlbnQueGJ1dHRv
bi55ID0gZXZlbnRZOworICAgICAgICB4RXZlbnQueGJ1dHRvbi5idXR0b24gPSBldmVudC0+YnV0
dG9uKCkgKyAxOworICAgIH0gZWxzZQorICAgICAgICByZXR1cm47CisKKyAgICBpZiAoZGlzcGF0
Y2hOUEV2ZW50KHhFdmVudCkpCisgICAgICAgIGV2ZW50LT5zZXREZWZhdWx0SGFuZGxlZCgpOwor
I2Vsc2UKKyAgICBub3RJbXBsZW1lbnRlZCgpOworI2VuZGlmCit9CisKK3ZvaWQgUGx1Z2luVmll
dzo6dXBkYXRlUGx1Z2luV2lkZ2V0KCkKK3sKKyAgICBpZiAoIXBhcmVudCgpIHx8ICFtX2lzV2lu
ZG93ZWQpCisgICAgICAgIHJldHVybjsKKworICAgIEFTU0VSVChwYXJlbnQoKS0+aXNGcmFtZVZp
ZXcoKSk7CisgICAgRnJhbWVWaWV3KiBmcmFtZVZpZXcgPSBzdGF0aWNfY2FzdDxGcmFtZVZpZXcq
PihwYXJlbnQoKSk7CisKKyAgICBJbnRSZWN0IG9sZFdpbmRvd1JlY3QgPSBtX3dpbmRvd1JlY3Q7
CisgICAgSW50UmVjdCBvbGRDbGlwUmVjdCA9IG1fY2xpcFJlY3Q7CisKKyAgICBtX3dpbmRvd1Jl
Y3QgPSBmcmFtZVZpZXctPmNvbnRlbnRzVG9TY3JlZW4oZnJhbWVSZWN0KCkpOworCisgICAgbV9j
bGlwUmVjdCA9IHdpbmRvd0NsaXBSZWN0KCk7CisgICAgbV9jbGlwUmVjdC5tb3ZlKC1tX3dpbmRv
d1JlY3QueCgpLCAtbV93aW5kb3dSZWN0LnkoKSk7Cit9CisKK3ZvaWQgUGx1Z2luVmlldzo6c2V0
Rm9jdXMoYm9vbCBmb2N1c2VkKQoreworICAgIGlmIChmb2N1c2VkKQorICAgICAgICBtX2VsZW1l
bnQtPmRvY3VtZW50KCktPnNldEZvY3VzZWROb2RlKG1fZWxlbWVudCk7CisKKyAgICBXaWRnZXQ6
OnNldEZvY3VzKGZvY3VzZWQpOworfQorCit2b2lkIFBsdWdpblZpZXc6OnNob3coKQoreworICAg
IHNldFNlbGZWaXNpYmxlKHRydWUpOworCisgICAgV2lkZ2V0OjpzaG93KCk7Cit9CisKK3ZvaWQg
UGx1Z2luVmlldzo6aGlkZSgpCit7CisgICAgc2V0U2VsZlZpc2libGUoZmFsc2UpOworCisgICAg
V2lkZ2V0OjpoaWRlKCk7Cit9CisKK3ZvaWQgUGx1Z2luVmlldzo6cGFpbnQoR3JhcGhpY3NDb250
ZXh0KiBjb250ZXh0LCBjb25zdCBJbnRSZWN0JiByZWN0KQoreworICAgIGlmICghbV9pc1N0YXJ0
ZWQpIHsKKyAgICAgICAgcGFpbnRNaXNzaW5nUGx1Z2luSWNvbihjb250ZXh0LCByZWN0KTsKKyAg
ICAgICAgcmV0dXJuOworICAgIH0KK30KKwordm9pZCBQbHVnaW5WaWV3OjpzZXRQYXJlbnQoU2Ny
b2xsVmlldyogcGFyZW50KQoreworICAgIFdpZGdldDo6c2V0UGFyZW50KHBhcmVudCk7CisKKyAg
ICBpZiAocGFyZW50KQorICAgICAgICBpbml0KCk7Cit9CisKK3ZvaWQgUGx1Z2luVmlldzo6c2V0
TlBXaW5kb3dSZWN0KGNvbnN0IEludFJlY3QmIHJlY3QpCit7CisgICAgbm90SW1wbGVtZW50ZWQo
KTsKKyAgICByZXR1cm47Cit9CisKK3ZvaWQgUGx1Z2luVmlldzo6c2V0TlBXaW5kb3dJZk5lZWRl
ZCgpCit7Cit9CisKK3ZvaWQgUGx1Z2luVmlldzo6c2V0UGFyZW50VmlzaWJsZShib29sIHZpc2li
bGUpCit7CisgICAgaWYgKGlzUGFyZW50VmlzaWJsZSgpID09IHZpc2libGUpCisgICAgICAgIHJl
dHVybjsKKworICAgIFdpZGdldDo6c2V0UGFyZW50VmlzaWJsZSh2aXNpYmxlKTsKK30KKworI2lm
IEVOQUJMRShORVRTQ0FQRV9QTFVHSU5fQVBJKQorTlBFcnJvciBQbHVnaW5WaWV3OjpoYW5kbGVQ
b3N0UmVhZEZpbGUoVmVjdG9yPGNoYXI+JiBidWZmZXIsIHVpbnQzMl90IGxlbiwgY29uc3QgY2hh
ciogYnVmKQoreworICAgIFN0cmluZyBmaWxlbmFtZShidWYsIGxlbik7CisKKyAgICBpZiAoZmls
ZW5hbWUuc3RhcnRzV2l0aCgiZmlsZTovLy8iKSkKKyAgICAgICAgZmlsZW5hbWUgPSBmaWxlbmFt
ZS5zdWJzdHJpbmcoOCk7CisKKyAgICBpZiAoIWZpbGVFeGlzdHMoZmlsZW5hbWUpKQorICAgICAg
ICByZXR1cm4gTlBFUlJfRklMRV9OT1RfRk9VTkQ7CisKKyAgICBGSUxFKiBmaWxlSGFuZGxlID0g
Zm9wZW4oZmlsZW5hbWUudXRmOCgpLmRhdGEoKSwgInIiKTsKKworICAgIGlmICghZmlsZUhhbmRs
ZSkKKyAgICAgICAgcmV0dXJuIE5QRVJSX0ZJTEVfTk9UX0ZPVU5EOworCisgICAgaW50IGJ5dGVz
UmVhZCA9IGZyZWFkKGJ1ZmZlci5kYXRhKCksIDEsIDAsIGZpbGVIYW5kbGUpOworCisgICAgZmNs
b3NlKGZpbGVIYW5kbGUpOworCisgICAgaWYgKGJ5dGVzUmVhZCA8PSAwKQorICAgICAgICByZXR1
cm4gTlBFUlJfRklMRV9OT1RfRk9VTkQ7CisKKyAgICByZXR1cm4gTlBFUlJfTk9fRVJST1I7Cit9
CisjZW5kaWYKKworI2lmIEVOQUJMRShORVRTQ0FQRV9QTFVHSU5fQVBJKQorYm9vbCBQbHVnaW5W
aWV3OjpwbGF0Zm9ybUdldFZhbHVlU3RhdGljKE5QTlZhcmlhYmxlIHZhcmlhYmxlLCB2b2lkKiB2
YWx1ZSwgTlBFcnJvciogcmVzdWx0KQoreworICAgIHN3aXRjaCAodmFyaWFibGUpIHsKKyAgICBj
YXNlIE5QTlZUb29sa2l0OgorICAgICAgICAqc3RhdGljX2Nhc3Q8dWludDMyX3QqPih2YWx1ZSkg
PSAwOworICAgICAgICAqcmVzdWx0ID0gTlBFUlJfTk9fRVJST1I7CisgICAgICAgIHJldHVybiB0
cnVlOworCisgICAgY2FzZSBOUE5WU3VwcG9ydHNYRW1iZWRCb29sOgorICAgICAgICAqc3RhdGlj
X2Nhc3Q8TlBCb29sKj4odmFsdWUpID0gZmFsc2U7CisgICAgICAgICpyZXN1bHQgPSBOUEVSUl9O
T19FUlJPUjsKKyAgICAgICAgcmV0dXJuIHRydWU7CisKKyAgICBjYXNlIE5QTlZqYXZhc2NyaXB0
RW5hYmxlZEJvb2w6CisgICAgICAgICpzdGF0aWNfY2FzdDxOUEJvb2wqPih2YWx1ZSkgPSB0cnVl
OworICAgICAgICAqcmVzdWx0ID0gTlBFUlJfTk9fRVJST1I7CisgICAgICAgIHJldHVybiB0cnVl
OworCisgICAgY2FzZSBOUE5WU3VwcG9ydHNXaW5kb3dsZXNzOgorICAgICAgICAqc3RhdGljX2Nh
c3Q8TlBCb29sKj4odmFsdWUpID0gZmFsc2U7CisgICAgICAgICpyZXN1bHQgPSBOUEVSUl9OT19F
UlJPUjsKKyAgICAgICAgcmV0dXJuIHRydWU7CisKKyAgICBkZWZhdWx0OgorICAgICAgICByZXR1
cm4gZmFsc2U7CisgICAgfQorfQorCitib29sIFBsdWdpblZpZXc6OnBsYXRmb3JtR2V0VmFsdWUo
TlBOVmFyaWFibGUgdmFyaWFibGUsIHZvaWQqIHZhbHVlLCBOUEVycm9yKiByZXN1bHQpCit7Cisg
ICAgaWYgKCF2YWx1ZSB8fCAhcmVzdWx0KQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBz
d2l0Y2ggKHZhcmlhYmxlKSB7CisgICAgY2FzZSBOUE5WeERpc3BsYXk6CisgICAgICAgICpzdGF0
aWNfY2FzdDx2b2lkICoqPih2YWx1ZSkgPSBzdGF0aWNfY2FzdDxEaXNwbGF5Kj4oZWNvcmVfeF9k
aXNwbGF5X2dldCgpKTsKKyAgICAgICAgKnJlc3VsdCA9IE5QRVJSX05PX0VSUk9SOworICAgICAg
ICByZXR1cm4gdHJ1ZTsKKworICAgIGNhc2UgTlBOVnh0QXBwQ29udGV4dDoKKyAgICAgICAgKnJl
c3VsdCA9IE5QRVJSX0dFTkVSSUNfRVJST1I7CisgICAgICAgIHJldHVybiB0cnVlOworCisgICAg
Y2FzZSBOUE5WV2luZG93TlBPYmplY3Q6IHsKKyAgICAgICAgaWYgKG1faXNKYXZhU2NyaXB0UGF1
c2VkKSB7CisgICAgICAgICAgICAqcmVzdWx0ID0gTlBFUlJfR0VORVJJQ19FUlJPUjsKKyAgICAg
ICAgICAgIHJldHVybiB0cnVlOworICAgICAgICB9CisKKyAgICAgICAgTlBPYmplY3QqIHdpbmRv
d1NjcmlwdE9iamVjdCA9IG1fcGFyZW50RnJhbWUtPnNjcmlwdCgpLT53aW5kb3dTY3JpcHROUE9i
amVjdCgpOworCisgICAgICAgIC8vIFJldHVybiB2YWx1ZSBpcyBleHBlY3RlZCB0byBiZSByZXRh
aW5lZCwgYXMgZGVzY3JpYmVkIGhlcmU6IDxodHRwOi8vd3d3Lm1vemlsbGEub3JnL3Byb2plY3Rz
L3BsdWdpbi9ucHJ1bnRpbWUuaHRtbD4KKyAgICAgICAgaWYgKHdpbmRvd1NjcmlwdE9iamVjdCkK
KyAgICAgICAgICAgIF9OUE5fUmV0YWluT2JqZWN0KHdpbmRvd1NjcmlwdE9iamVjdCk7CisKKyAg
ICAgICAgdm9pZCoqIHYgPSAodm9pZCoqKXZhbHVlOworICAgICAgICAqdiA9IHdpbmRvd1Njcmlw
dE9iamVjdDsKKworICAgICAgICAqcmVzdWx0ID0gTlBFUlJfTk9fRVJST1I7CisgICAgICAgIHJl
dHVybiB0cnVlOworICAgIH0KKworICAgIGNhc2UgTlBOVlBsdWdpbkVsZW1lbnROUE9iamVjdDog
eworICAgICAgICBpZiAobV9pc0phdmFTY3JpcHRQYXVzZWQpIHsKKyAgICAgICAgICAgICpyZXN1
bHQgPSBOUEVSUl9HRU5FUklDX0VSUk9SOworICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAg
ICAgIH0KKworICAgICAgICBOUE9iamVjdCogcGx1Z2luU2NyaXB0T2JqZWN0ID0gMDsKKworICAg
ICAgICBpZiAobV9lbGVtZW50LT5oYXNUYWdOYW1lKGFwcGxldFRhZykgfHwgbV9lbGVtZW50LT5o
YXNUYWdOYW1lKGVtYmVkVGFnKSB8fCBtX2VsZW1lbnQtPmhhc1RhZ05hbWUob2JqZWN0VGFnKSkK
KyAgICAgICAgICAgIHBsdWdpblNjcmlwdE9iamVjdCA9IHN0YXRpY19jYXN0PEhUTUxQbHVnSW5F
bGVtZW50Kj4obV9lbGVtZW50KS0+Z2V0TlBPYmplY3QoKTsKKworICAgICAgICAvLyBSZXR1cm4g
dmFsdWUgaXMgZXhwZWN0ZWQgdG8gYmUgcmV0YWluZWQsIGFzIGRlc2NyaWJlZCBoZXJlOiA8aHR0
cDovL3d3dy5tb3ppbGxhLm9yZy9wcm9qZWN0cy9wbHVnaW4vbnBydW50aW1lLmh0bWw+CisgICAg
ICAgIGlmIChwbHVnaW5TY3JpcHRPYmplY3QpCisgICAgICAgICAgICBfTlBOX1JldGFpbk9iamVj
dChwbHVnaW5TY3JpcHRPYmplY3QpOworCisgICAgICAgIHZvaWQqKiB2ID0gKHZvaWQqKil2YWx1
ZTsKKyAgICAgICAgKnYgPSBwbHVnaW5TY3JpcHRPYmplY3Q7CisKKyAgICAgICAgKnJlc3VsdCA9
IE5QRVJSX05PX0VSUk9SOworICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CisKKyAgICBjYXNl
IE5QTlZuZXRzY2FwZVdpbmRvdzogeworICAgICAgICB2b2lkKiB3ID0gcmVpbnRlcnByZXRfY2Fz
dDx2b2lkKj4odmFsdWUpOworICAgICAgICBFdmFzX09iamVjdCogd2lkZ2V0ID0gbV9wYXJlbnRG
cmFtZS0+dmlldygpLT5ob3N0V2luZG93KCktPnBsYXRmb3JtUGFnZUNsaWVudCgpOworICAgICAg
ICBFdmFzKiBldmFzID0gZXZhc19vYmplY3RfZXZhc19nZXQod2lkZ2V0KTsKKyAgICAgICAgRWNv
cmVfRXZhcyogZWUgPSBlY29yZV9ldmFzX2Vjb3JlX2V2YXNfZ2V0KGV2YXMpOworICAgICAgICAq
KChYSUQgKil3KSA9IChXaW5kb3cpIGVjb3JlX2V2YXNfd2luZG93X2dldChlZSk7CisgICAgICAg
ICpyZXN1bHQgPSBOUEVSUl9OT19FUlJPUjsKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgfQor
CisgICAgY2FzZSBOUE5WVG9vbGtpdDoKKyAgICAgICAgaWYgKG1fcGx1Z2luLT5xdWlya3MoKS5j
b250YWlucyhQbHVnaW5RdWlya1JlcXVpcmVzR3RrVG9vbEtpdCkpIHsKKyAgICAgICAgICAgICoo
KHVpbnQzMl90ICopdmFsdWUpID0gMjsKKyAgICAgICAgICAgICpyZXN1bHQgPSBOUEVSUl9OT19F
UlJPUjsKKyAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICB9CisgICAgICAgIHJldHVy
biBmYWxzZTsKKyAgICAgICAgLy8gZmFsbCB0aHJvdWdoCisgICAgZGVmYXVsdDoKKyAgICAgICAg
cmV0dXJuIGZhbHNlOworICAgIH0KK30KKyNlbmRpZgorCit2b2lkIFBsdWdpblZpZXc6OmludmFs
aWRhdGVSZWN0KGNvbnN0IEludFJlY3QmIHJlY3QpCit7CisgICAgaW52YWxpZGF0ZVdpbmRvd2xl
c3NQbHVnaW5SZWN0KHJlY3QpOworfQorCisjaWYgRU5BQkxFKE5FVFNDQVBFX1BMVUdJTl9BUEkp
Cit2b2lkIFBsdWdpblZpZXc6OmludmFsaWRhdGVSZWN0KE5QUmVjdCogcmVjdCkKK3sKKyAgICBp
ZiAoIXJlY3QpIHsKKyAgICAgICAgaW52YWxpZGF0ZSgpOworICAgICAgICByZXR1cm47CisgICAg
fQorCisgICAgSW50UmVjdCByKHJlY3QtPmxlZnQsIHJlY3QtPnRvcCwgcmVjdC0+cmlnaHQgLSBy
ZWN0LT5sZWZ0LCByZWN0LT5ib3R0b20gLSByZWN0LT50b3ApOworCisgICAgaW52YWxpZGF0ZVJl
Y3Qocik7Cit9CisKK3ZvaWQgUGx1Z2luVmlldzo6aW52YWxpZGF0ZVJlZ2lvbihOUFJlZ2lvbiBy
ZWdpb24pCit7CisgICAgbm90SW1wbGVtZW50ZWQoKTsKK30KKyNlbmRpZgorCit2b2lkIFBsdWdp
blZpZXc6OmZvcmNlUmVkcmF3KCkKK3sKKyAgICBub3RJbXBsZW1lbnRlZCgpOworfQorCitib29s
IFBsdWdpblZpZXc6OnBsYXRmb3JtU3RhcnQoKQoreworICAgIEFTU0VSVChtX2lzU3RhcnRlZCk7
CisgICAgQVNTRVJUKG1fc3RhdHVzID09IFBsdWdpblN0YXR1c0xvYWRlZFN1Y2Nlc3NmdWxseSk7
CisKKyAgICBub3RJbXBsZW1lbnRlZCgpOworICAgIHJldHVybiB0cnVlOworfQorCit2b2lkIFBs
dWdpblZpZXc6OnBsYXRmb3JtRGVzdHJveSgpCit7Cit9CisKK30gLy8gbmFtZXNwYWNlIFdlYkNv
cmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvZWZsL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJL
aXQvZWZsL0NoYW5nZUxvZwppbmRleCAwNzA4Y2FmLi5mMTY0NDM5IDEwMDc1NQotLS0gYS9Tb3Vy
Y2UvV2ViS2l0L2VmbC9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYktpdC9lZmwvQ2hhbmdlTG9n
CkBAIC0xLDMgKzEsMTUgQEAKKzIwMTEtMDYtMTAgIE1hcml1c3ogR3J6ZWdvcmN6eWsgIDxtYXJp
dXN6LmdAc2Ftc3VuZy5jb20+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISku
CisKKyAgICAgICAgQnVnIDQ0NTA1IC0gW0VGTF0gTWlzc2luZyBwbHVnaW5zIHN1cHBvcnQgZm9y
IGVmbCBwb3J0CisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9p
ZD00NDUwNQorCisgICAgICAgIEltcGxlbWVudGF0aW9uIG9mIGV3a19mcmFtZV9wbHVnaW5fY3Jl
YXRlKCkgLSBjcmVhdGluZyBQbHVnaW5WaWV3CisKKyAgICAgICAgKiBld2svZXdrX2ZyYW1lLmNw
cDoKKyAgICAgICAgKGV3a19mcmFtZV9wbHVnaW5fY3JlYXRlKToKKwogMjAxMS0wNi0wOCAgSmFl
aHVuIExpbSAgPGxqYWVodW4ubGltQHNhbXN1bmcuY29tPgogCiAgICAgICAgIFJldmlld2VkIGJ5
IEFudG9uaW8gR29tZXMuCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L2VmbC9ld2svZXdrX2Zy
YW1lLmNwcCBiL1NvdXJjZS9XZWJLaXQvZWZsL2V3ay9ld2tfZnJhbWUuY3BwCmluZGV4IDM4NTNm
ODYuLjM0NjExY2EgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvZWZsL2V3ay9ld2tfZnJhbWUu
Y3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvZWZsL2V3ay9ld2tfZnJhbWUuY3BwCkBAIC0yMDM1LDUg
KzIwMzUsMjQgQEAgdm9pZCBld2tfZnJhbWVfZm9yY2VfbGF5b3V0KEV2YXNfT2JqZWN0KiBvKQog
CiBXVEY6OlBhc3NSZWZQdHI8V2ViQ29yZTo6V2lkZ2V0PiBld2tfZnJhbWVfcGx1Z2luX2NyZWF0
ZShFdmFzX09iamVjdCogbywgY29uc3QgV2ViQ29yZTo6SW50U2l6ZSYgcGx1Z2luU2l6ZSwgV2Vi
Q29yZTo6SFRNTFBsdWdJbkVsZW1lbnQqIGVsZW1lbnQsIGNvbnN0IFdlYkNvcmU6OktVUkwmIHVy
bCwgY29uc3QgV1RGOjpWZWN0b3I8V1RGOjpTdHJpbmc+JiBwYXJhbU5hbWVzLCBjb25zdCBXVEY6
OlZlY3RvcjxXVEY6OlN0cmluZz4mIHBhcmFtVmFsdWVzLCBjb25zdCBXVEY6OlN0cmluZyYgbWlt
ZVR5cGUsIGJvb2wgbG9hZE1hbnVhbGx5KQogeworI2lmIEVOQUJMRShORVRTQ0FQRV9QTFVHSU5f
QVBJKQorICAgIERCRygibz0lcCwgc2l6ZT0lZHglZCwgZWxlbWVudD0lcCwgdXJsPSVzLCBtaW1l
VHlwZT0lcyIsCisgICAgICAgIG8sIHBsdWdpblNpemUud2lkdGgoKSwgcGx1Z2luU2l6ZS5oZWln
aHQoKSwgZWxlbWVudCwKKyAgICAgICAgdXJsLnByZXR0eVVSTCgpLnV0ZjgoKS5kYXRhKCksIG1p
bWVUeXBlLnV0ZjgoKS5kYXRhKCkpOworCisgICAgRVdLX0ZSQU1FX1NEX0dFVF9PUl9SRVRVUk4o
bywgc2QsIDApOworCisgICAgLy8gVE9ETzogZW1pdCBzaWduYWwgYW5kIGFzayB3ZWJraXQgdXNl
cnMgaWYgc29tZXRoaW5nIGVsc2Ugc2hvdWxkIGJlIGRvbmUuCisgICAgLy8gbGlrZSBjcmVhdGlu
ZyBhbm90aGVyIHggd2luZG93IChzZWUgZ3RrLCBpdCBhbGxvd3MgdXNlcnMgdG8gY3JlYXRlCisg
ICAgLy8gR3RrUGx1Z2luV2lkZ2V0LgorCisgICAgV1RGOjpSZWZQdHI8V2ViQ29yZTo6UGx1Z2lu
Vmlldz4gcGx1Z2luVmlldyA9IFdlYkNvcmU6OlBsdWdpblZpZXc6OmNyZWF0ZQorICAgICAgICAo
c2QtPmZyYW1lLCBwbHVnaW5TaXplLCBlbGVtZW50LCB1cmwsIHBhcmFtTmFtZXMsIHBhcmFtVmFs
dWVzLAorICAgICAgICBtaW1lVHlwZSwgbG9hZE1hbnVhbGx5KTsKKworICAgIGlmIChwbHVnaW5W
aWV3LT5zdGF0dXMoKSA9PSBXZWJDb3JlOjpQbHVnaW5TdGF0dXNMb2FkZWRTdWNjZXNzZnVsbHkp
CisgICAgICAgIHJldHVybiBwbHVnaW5WaWV3OworI2Vsc2UKICAgICByZXR1cm4gMDsKKyNlbmRp
ZiAvLyAjaWYgRU5BQkxFKE5FVFNDQVBFX1BMVUdJTl9BUEkpCiB9Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>102263</attachid>
            <date>2011-07-28 09:26:40 -0700</date>
            <delta_ts>2011-08-24 10:54:47 -0700</delta_ts>
            <desc>EFL&apos;s plugin support</desc>
            <filename>efl_plugins.patch</filename>
            <type>text/plain</type>
            <size>26538</size>
            <attacher name="Mariusz Grzegorczyk">mariusz.g</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cgYi9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvQ2hhbmdlTG9nCmluZGV4IDUzZTUxNzYuLjU3OWQ3NWUgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKKysrIGIvU291cmNlL0phdmFTY3JpcHRD
b3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDE0IEBACisyMDExLTA2LTEwICBNYXJpdXN6IEdyemVn
b3JjenlrICA8bWFyaXVzei5nQHNhbXN1bmcuY29tPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5P
Qk9EWSAoT09QUyEpLgorCisgICAgICAgIEJ1ZyA0NDUwNSAtIFtFRkxdIE1pc3NpbmcgcGx1Z2lu
cyBzdXBwb3J0IGZvciBlZmwgcG9ydAorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9z
aG93X2J1Zy5jZ2k/aWQ9NDQ1MDUKKworICAgICAgICBBZGQgZGVmaW5lIG9mIEVOQUJMRV9QTFVH
SU5fUEFDS0FHRV9TSU1QTEVfSEFTSCBmb3IgZWZsIHBvcnQKKworICAgICAgICAqIHd0Zi9QbGF0
Zm9ybS5oOgorCiAyMDExLTA2LTA4ICBTaGVyaWZmIEJvdCAgPHdlYmtpdC5yZXZpZXcuYm90QGdt
YWlsLmNvbT4KIAogICAgICAgICBVbnJldmlld2VkLCByb2xsaW5nIG91dCByODg0MDQuCmRpZmYg
LS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd3RmL1BsYXRmb3JtLmggYi9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvd3RmL1BsYXRmb3JtLmgKaW5kZXggNGZjNzk2NS4uZDk3MzU4MSAxMDA2NDQK
LS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3d0Zi9QbGF0Zm9ybS5oCisrKyBiL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS93dGYvUGxhdGZvcm0uaApAQCAtMTE2OCw3ICsxMTY4LDcgQEAKICNkZWZp
bmUgV0FSTl9VTlVTRURfUkVUVVJOCiAjZW5kaWYKIAotI2lmICFFTkFCTEUoTkVUU0NBUEVfUExV
R0lOX0FQSSkgfHwgKEVOQUJMRShORVRTQ0FQRV9QTFVHSU5fQVBJKSAmJiAoKE9TKFVOSVgpICYm
IChQTEFURk9STShRVCkgfHwgUExBVEZPUk0oV1gpKSkgfHwgUExBVEZPUk0oR1RLKSkpCisjaWYg
IUVOQUJMRShORVRTQ0FQRV9QTFVHSU5fQVBJKSB8fCAoRU5BQkxFKE5FVFNDQVBFX1BMVUdJTl9B
UEkpICYmICgoT1MoVU5JWCkgJiYgKFBMQVRGT1JNKFFUKSB8fCBQTEFURk9STShXWCkpKSB8fCBQ
TEFURk9STShHVEspIHx8IFBMQVRGT1JNKEVGTCkpKQogI2RlZmluZSBFTkFCTEVfUExVR0lOX1BB
Q0tBR0VfU0lNUExFX0hBU0ggMQogI2VuZGlmCiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L0NNYWtlTGlzdHNFZmwudHh0IGIvU291cmNlL1dlYkNvcmUvQ01ha2VMaXN0c0VmbC50eHQKaW5k
ZXggZDRhMGE2MS4uZTA1NzU3NCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ01ha2VMaXN0
c0VmbC50eHQKKysrIGIvU291cmNlL1dlYkNvcmUvQ01ha2VMaXN0c0VmbC50eHQKQEAgLTExLDYg
KzExLDcgQEAgTElTVChBUFBFTkQgV2ViQ29yZV9JTkNMVURFX0RJUkVDVE9SSUVTCiAgICIke1dF
QkNPUkVfRElSfS9wbGF0Zm9ybS9ncmFwaGljcy9lZmwiCiAgICIke1dFQkNPUkVfRElSfS9wYWdl
L2VmbCIKICAgIiR7V0VCQ09SRV9ESVJ9L2FjY2Vzc2liaWxpdHkvZWZsIgorICAiJHtXRUJDT1JF
X0RJUn0vcGx1Z2lucy9lZmwiCiAgICIke1dFQktJVF9ESVJ9L2VmbC9XZWJDb3JlU3VwcG9ydCIK
ICAgIiR7V0VCS0lUX0RJUn0vZWZsL2V3ayIKICAgIiR7REVSSVZFRF9TT1VSQ0VTX0RJUn0iCkBA
IC03Myw5ICs3NCwyNyBAQCBMSVNUKEFQUEVORCBXZWJDb3JlX1NPVVJDRVMKICAgcGxhdGZvcm0v
aW1hZ2UtZGVjb2RlcnMvd2VicC9XRUJQSW1hZ2VEZWNvZGVyLmNwcAogICBwbGF0Zm9ybS9wb3Np
eC9GaWxlU3lzdGVtUE9TSVguY3BwCiAgIHBsYXRmb3JtL3RleHQvZWZsL1RleHRCcmVha0l0ZXJh
dG9ySW50ZXJuYWxJQ1VFZmwuY3BwCi0gIHBsdWdpbnMvUGx1Z2luRGF0YU5vbmUuY3BwCiApCiAK
K0lGIChFTkFCTEVfTkVUU0NBUEVfUExVR0lOX0FQSSkKKyAgTElTVChBUFBFTkQgV2ViQ29yZV9T
T1VSQ0VTCisgICAgcGx1Z2lucy9QbHVnaW5EYXRhYmFzZS5jcHAKKyAgICBwbHVnaW5zL1BsdWdp
bkRlYnVnLmNwcAorICAgIHBsdWdpbnMvUGx1Z2luUGFja2FnZS5jcHAKKyAgICBwbHVnaW5zL1Bs
dWdpblN0cmVhbS5jcHAKKyAgICBwbHVnaW5zL1BsdWdpblZpZXcuY3BwCisgICAgcGx1Z2lucy9l
ZmwvUGx1Z2luRGF0YUVmbC5jcHAKKyAgICBwbHVnaW5zL2VmbC9QbHVnaW5QYWNrYWdlRWZsLmNw
cAorICAgIHBsdWdpbnMvZWZsL1BsdWdpblZpZXdFZmwuY3BwCisgICkKK0VMU0UgKCkKKyAgTElT
VChBUFBFTkQgV2ViQ29yZV9TT1VSQ0VTCisgICAgcGx1Z2lucy9QbHVnaW5EYXRhTm9uZS5jcHAK
KyAgICBwbHVnaW5zL1BsdWdpblBhY2thZ2VOb25lLmNwcAorICAgIHBsdWdpbnMvUGx1Z2luVmll
d05vbmUuY3BwCisgICkKK0VORElGICgpCisKIExJU1QoQVBQRU5EIFdlYkNvcmVfVVNFUl9BR0VO
VF9TVFlMRV9TSEVFVFMKICAgICAke1dFQkNPUkVfRElSfS9jc3MvbWVkaWFDb250cm9sc0VmbC5j
c3MKICkKQEAgLTE0NCw2ICsxNjMsNyBAQCBJRiAoV1RGX1VTRV9TT1VQKQogICBMSVNUKEFQUEVO
RCBXZWJDb3JlX1NPVVJDRVMKICAgICBwbGF0Zm9ybS9uZXR3b3JrL3NvdXAvQ29va2llSmFyU291
cC5jcHAKICAgICBwbGF0Zm9ybS9uZXR3b3JrL3NvdXAvR093blB0clNvdXAuY3BwCisgICAgcGxh
dGZvcm0vbmV0d29yay9zb3VwL1Byb3h5U2VydmVyU291cC5jcHAKICAgICBwbGF0Zm9ybS9uZXR3
b3JrL3NvdXAvUmVzb3VyY2VIYW5kbGVTb3VwLmNwcAogICAgIHBsYXRmb3JtL25ldHdvcmsvc291
cC9SZXNvdXJjZVJlcXVlc3RTb3VwLmNwcAogICAgIHBsYXRmb3JtL25ldHdvcmsvc291cC9SZXNv
dXJjZVJlc3BvbnNlU291cC5jcHAKQEAgLTE2MCw2ICsxODAsNyBAQCBJRiAoV1RGX1VTRV9DVVJM
KQogICAgIHBsYXRmb3JtL25ldHdvcmsvY3VybC9Db29raWVKYXJDdXJsLmNwcAogICAgIHBsYXRm
b3JtL25ldHdvcmsvY3VybC9ETlNDdXJsLmNwcAogICAgIHBsYXRmb3JtL25ldHdvcmsvY3VybC9G
b3JtRGF0YVN0cmVhbUN1cmwuY3BwCisgICAgcGxhdGZvcm0vbmV0d29yay9jdXJsL1Byb3h5U2Vy
dmVyQ3VybC5jcHAKICAgICBwbGF0Zm9ybS9uZXR3b3JrL2N1cmwvUmVzb3VyY2VIYW5kbGVDdXJs
LmNwcAogICAgIHBsYXRmb3JtL25ldHdvcmsvY3VybC9SZXNvdXJjZUhhbmRsZU1hbmFnZXIuY3Bw
CiAgICAgcGxhdGZvcm0vbmV0d29yay9jdXJsL1NvY2tldFN0cmVhbUhhbmRsZUN1cmwuY3BwCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFu
Z2VMb2cKaW5kZXggNzI1MjIxOC4uYzUxMmQzYyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUv
Q2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDQ5IEBA
CisyMDExLTA2LTEwICBNYXJpdXN6IEdyemVnb3JjenlrICA8bWFyaXVzei5nQHNhbXN1bmcuY29t
PgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIEJ1ZyA0
NDUwNSAtIFtFRkxdIE1pc3NpbmcgcGx1Z2lucyBzdXBwb3J0IGZvciBlZmwgcG9ydAorICAgICAg
ICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NDQ1MDUKKworICAgICAg
ICBCYXNpYyBmdW5jdGlvbmFsaXR5IG9mIHBsdWdpbnMgZm9yIGVmbCBwb3J0CisKKyAgICAgICAg
VGVtcGxhdGUgdmVyc2lvbiwgc28gbm8gbmV3IHRlc3RzIGFyZSBuZWVkZWQuCisKKyAgICAgICAg
KiBDTWFrZUxpc3RzRWZsLnR4dDoKKyAgICAgICAgKiBwbHVnaW5zL1BsdWdpblZpZXcuaDoKKyAg
ICAgICAgKiBwbHVnaW5zL2VmbC9QbHVnaW5EYXRhRWZsLmNwcDogQWRkZWQuCisgICAgICAgIChX
ZWJDb3JlOjpQbHVnaW5EYXRhOjppbml0UGx1Z2lucyk6CisgICAgICAgIChXZWJDb3JlOjpQbHVn
aW5EYXRhOjpyZWZyZXNoKToKKyAgICAgICAgKiBwbHVnaW5zL2VmbC9QbHVnaW5QYWNrYWdlRWZs
LmNwcDogQWRkZWQuCisgICAgICAgIChXZWJDb3JlOjpQbHVnaW5QYWNrYWdlOjpmZXRjaEluZm8p
OgorICAgICAgICAoV2ViQ29yZTo6UGx1Z2luUGFja2FnZTo6TlBWZXJzaW9uKToKKyAgICAgICAg
KFdlYkNvcmU6OlBsdWdpblBhY2thZ2U6OmxvYWQpOgorICAgICAgICAqIHBsdWdpbnMvZWZsL1Bs
dWdpblZpZXdFZmwuY3BwOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6OlBsdWdpblZpZXc6OmRp
c3BhdGNoTlBFdmVudCk6CisgICAgICAgIChXZWJDb3JlOjpQbHVnaW5WaWV3OjpoYWx0KToKKyAg
ICAgICAgKFdlYkNvcmU6OlBsdWdpblZpZXc6OmhhbmRsZUZvY3VzSW5FdmVudCk6CisgICAgICAg
IChXZWJDb3JlOjpQbHVnaW5WaWV3OjpoYW5kbGVGb2N1c091dEV2ZW50KToKKyAgICAgICAgKFdl
YkNvcmU6OlBsdWdpblZpZXc6OnJlc3RhcnQpOgorICAgICAgICAoV2ViQ29yZTo6UGx1Z2luVmll
dzo6aGFuZGxlS2V5Ym9hcmRFdmVudCk6CisgICAgICAgIChXZWJDb3JlOjpQbHVnaW5WaWV3Ojpo
YW5kbGVNb3VzZUV2ZW50KToKKyAgICAgICAgKFdlYkNvcmU6OlBsdWdpblZpZXc6OnVwZGF0ZVBs
dWdpbldpZGdldCk6CisgICAgICAgIChXZWJDb3JlOjpQbHVnaW5WaWV3OjpzZXRGb2N1cyk6Cisg
ICAgICAgIChXZWJDb3JlOjpQbHVnaW5WaWV3OjpzaG93KToKKyAgICAgICAgKFdlYkNvcmU6OlBs
dWdpblZpZXc6OmhpZGUpOgorICAgICAgICAoV2ViQ29yZTo6UGx1Z2luVmlldzo6cGFpbnQpOgor
ICAgICAgICAoV2ViQ29yZTo6UGx1Z2luVmlldzo6c2V0UGFyZW50KToKKyAgICAgICAgKFdlYkNv
cmU6OlBsdWdpblZpZXc6OnNldE5QV2luZG93UmVjdCk6CisgICAgICAgIChXZWJDb3JlOjpQbHVn
aW5WaWV3OjpzZXROUFdpbmRvd0lmTmVlZGVkKToKKyAgICAgICAgKFdlYkNvcmU6OlBsdWdpblZp
ZXc6OnNldFBhcmVudFZpc2libGUpOgorICAgICAgICAoV2ViQ29yZTo6UGx1Z2luVmlldzo6aGFu
ZGxlUG9zdFJlYWRGaWxlKToKKyAgICAgICAgKFdlYkNvcmU6OlBsdWdpblZpZXc6OnBsYXRmb3Jt
R2V0VmFsdWVTdGF0aWMpOgorICAgICAgICAoV2ViQ29yZTo6UGx1Z2luVmlldzo6cGxhdGZvcm1H
ZXRWYWx1ZSk6CisgICAgICAgIChXZWJDb3JlOjpQbHVnaW5WaWV3OjppbnZhbGlkYXRlUmVjdCk6
CisgICAgICAgIChXZWJDb3JlOjpQbHVnaW5WaWV3OjppbnZhbGlkYXRlUmVnaW9uKToKKyAgICAg
ICAgKFdlYkNvcmU6OlBsdWdpblZpZXc6OmZvcmNlUmVkcmF3KToKKyAgICAgICAgKFdlYkNvcmU6
OlBsdWdpblZpZXc6OnBsYXRmb3JtU3RhcnQpOgorICAgICAgICAoV2ViQ29yZTo6UGx1Z2luVmll
dzo6cGxhdGZvcm1EZXN0cm95KToKKwogMjAxMS0wNi0wOCAgSGF5YXRvIEl0byAgPGhheWF0b0Bj
aHJvbWl1bS5vcmc+CiAKICAgICAgICAgUmV2aWV3ZWQgYnkgSGFqaW1lIE1vcml0YS4KZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsdWdpbnMvUGx1Z2luVmlldy5oIGIvU291cmNlL1dlYkNv
cmUvcGx1Z2lucy9QbHVnaW5WaWV3LmgKaW5kZXggYTVjNGI5MC4uNGE1MGNhYiAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYkNvcmUvcGx1Z2lucy9QbHVnaW5WaWV3LmgKKysrIGIvU291cmNlL1dlYkNv
cmUvcGx1Z2lucy9QbHVnaW5WaWV3LmgKQEAgLTM3OSw3ICszNzksNyBAQCBuYW1lc3BhY2UgV2Vi
Q29yZSB7CiAgICAgICAgIGJvb2wgbV9oYXZlVXBkYXRlZFBsdWdpbldpZGdldDsKICNlbmRpZgog
Ci0jaWYgKChQTEFURk9STShRVCkgfHwgUExBVEZPUk0oV1gpKSAmJiBPUyhXSU5ET1dTKSkgfHwg
ZGVmaW5lZChYUF9NQUNPU1gpCisjaWYgKChQTEFURk9STShRVCkgfHwgUExBVEZPUk0oV1gpKSAm
JiBPUyhXSU5ET1dTKSkgfHwgZGVmaW5lZChYUF9NQUNPU1gpIHx8IFBMQVRGT1JNKEVGTCkKICAg
ICAgICAgLy8gT24gTWFjIE9TWCBhbmQgUXQvV2luZG93cyB0aGUgcGx1Z2luIGRvZXMgbm90IGhh
dmUgaXRzIG93biBuYXRpdmUgd2lkZ2V0LAogICAgICAgICAvLyBidXQgaXMgdXNpbmcgdGhlIGNv
bnRhaW5pbmcgd2luZG93IGFzIGl0cyByZWZlcmVuY2UgZm9yIHBvc2l0aW9uaW5nL3BhaW50aW5n
LgogICAgICAgICBQbGF0Zm9ybVBsdWdpbldpZGdldCBtX3dpbmRvdzsKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL3BsdWdpbnMvZWZsL1BsdWdpbkRhdGFFZmwuY3BwIGIvU291cmNlL1dlYkNv
cmUvcGx1Z2lucy9lZmwvUGx1Z2luRGF0YUVmbC5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5k
ZXggMDAwMDAwMC4uYzIxZDUxYgotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3Bs
dWdpbnMvZWZsL1BsdWdpbkRhdGFFZmwuY3BwCkBAIC0wLDAgKzEsNjYgQEAKKy8qCisgICAgQ29w
eXJpZ2h0IChDKSAyMDA2LCAyMDA3IEFwcGxlIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisg
ICAgQ29weXJpZ2h0IChDKSAyMDA4IFRyb2xsdGVjaCBBU0EKKyAgICBDb3B5cmlnaHQgKEMpIDIw
MDggQ29sbGFib3JhIEx0ZC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAgICBDb3B5cmlnaHQgKEMp
IDIwMDggSU5kVCAtIEluc3RpdHV0byBOb2tpYSBkZSBUZWNub2xvZ2lhCisgICAgQ29weXJpZ2h0
IChDKSAyMDA5LTIwMTAgUHJvRlVTSU9OIGVtYmVkZGVkIHN5c3RlbXMKKyAgICBDb3B5cmlnaHQg
KEMpIDIwMDktMjAxMSBTYW1zdW5nIEVsZWN0cm9uaWNzCisKKyAgICBUaGlzIGxpYnJhcnkgaXMg
ZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgICAgbW9kaWZ5
IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAg
ICBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBl
aXRoZXIKKyAgICB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikg
YW55IGxhdGVyIHZlcnNpb24uCisKKyAgICBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4g
dGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAgICBidXQgV0lUSE9VVCBBTlkgV0FS
UkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICAgIE1FUkNIQU5U
QUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05V
CisgICAgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisK
KyAgICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBH
ZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgICAgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0
aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KKyAgICB0aGUgRnJlZSBTb2Z0
d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAor
ICAgIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgorKi8KKworI2luY2x1ZGUgImNvbmZpZy5o
IgorI2luY2x1ZGUgIlBsdWdpbkRhdGEuaCIKKworI2luY2x1ZGUgIlBsdWdpbkRhdGFiYXNlLmgi
CisjaW5jbHVkZSAiUGx1Z2luUGFja2FnZS5oIgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK3Zv
aWQgUGx1Z2luRGF0YTo6aW5pdFBsdWdpbnMoY29uc3QgUGFnZSopCit7CisgICAgY29uc3QgVmVj
dG9yPFBsdWdpblBhY2thZ2UqPiYgcGx1Z2lucyA9IFBsdWdpbkRhdGFiYXNlOjppbnN0YWxsZWRQ
bHVnaW5zKCktPnBsdWdpbnMoKTsKKworICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgcGx1Z2lu
cy5zaXplKCk7ICsraSkgeworICAgICAgICBQbHVnaW5QYWNrYWdlKiBwYWNrYWdlID0gcGx1Z2lu
c1tpXTsKKyAgICAgICAgUGx1Z2luSW5mbyBpbmZvOworCisgICAgICAgIGluZm8ubmFtZSA9IHBh
Y2thZ2UtPm5hbWUoKTsKKyAgICAgICAgaW5mby5maWxlID0gcGFja2FnZS0+ZmlsZU5hbWUoKTsK
KyAgICAgICAgaW5mby5kZXNjID0gcGFja2FnZS0+ZGVzY3JpcHRpb24oKTsKKworICAgICAgICBj
b25zdCBNSU1FVG9EZXNjcmlwdGlvbnNNYXAmIG1pbWVUb0Rlc2NyaXB0aW9ucyA9IHBhY2thZ2Ut
Pm1pbWVUb0Rlc2NyaXB0aW9ucygpOworICAgICAgICBNSU1FVG9EZXNjcmlwdGlvbnNNYXA6OmNv
bnN0X2l0ZXJhdG9yIGVuZCA9IG1pbWVUb0Rlc2NyaXB0aW9ucy5lbmQoKTsKKyAgICAgICAgZm9y
IChNSU1FVG9EZXNjcmlwdGlvbnNNYXA6OmNvbnN0X2l0ZXJhdG9yIGl0ID0gbWltZVRvRGVzY3Jp
cHRpb25zLmJlZ2luKCk7IGl0ICE9IGVuZDsgKytpdCkgeworICAgICAgICAgICAgTWltZUNsYXNz
SW5mbyBtaW1lOworCisgICAgICAgICAgICBtaW1lLnR5cGUgPSBpdC0+Zmlyc3Q7CisgICAgICAg
ICAgICBtaW1lLmRlc2MgPSBpdC0+c2Vjb25kOworICAgICAgICAgICAgbWltZS5leHRlbnNpb25z
ID0gcGFja2FnZS0+bWltZVRvRXh0ZW5zaW9ucygpLmdldChtaW1lLnR5cGUpOworCisgICAgICAg
ICAgICBpbmZvLm1pbWVzLmFwcGVuZChtaW1lKTsKKyAgICAgICAgfQorCisgICAgICAgIG1fcGx1
Z2lucy5hcHBlbmQoaW5mbyk7CisgICAgfQorfQorCit2b2lkIFBsdWdpbkRhdGE6OnJlZnJlc2go
KQoreworICAgIFBsdWdpbkRhdGFiYXNlOjppbnN0YWxsZWRQbHVnaW5zKCktPnJlZnJlc2goKTsK
K30KKworfTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsdWdpbnMvZWZsL1BsdWdpblBh
Y2thZ2VFZmwuY3BwIGIvU291cmNlL1dlYkNvcmUvcGx1Z2lucy9lZmwvUGx1Z2luUGFja2FnZUVm
bC5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjE4YWVhNgotLS0gL2Rl
di9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsdWdpbnMvZWZsL1BsdWdpblBhY2thZ2VFZmwu
Y3BwCkBAIC0wLDAgKzEsMTY4IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA2LCAyMDA3IEFw
cGxlIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDggQ29s
bGFib3JhIEx0ZC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAwOCBO
dWFudGkgTHRkLgorICogQ29weXJpZ2h0IChDKSAyMDA4IElOZFQgLSBJbnN0aXR1dG8gTm9raWEg
ZGUgVGVjbm9sb2dpYQorICogQ29weXJpZ2h0IChDKSAyMDA5LTIwMTAgUHJvRlVTSU9OIGVtYmVk
ZGVkIHN5c3RlbXMKKyAqIENvcHlyaWdodCAoQykgMjAwOS0yMDExIFNhbXN1bmcgRWxlY3Ryb25p
Y3MKKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv
cm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92
aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJl
ZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJp
Z2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVz
dCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAg
ZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRp
c3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIENP
TVBVVEVSLCBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FS
UkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBX
QVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFS
CisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgQ09N
UFVURVIsIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1Qs
IElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFV
RU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VS
RU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEs
IE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VE
IEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1Qs
IFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBP
VEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBT
T0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFH
RS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiUGx1Z2luUGFja2FnZS5o
IgorCisjaW5jbHVkZSAiTUlNRVR5cGVSZWdpc3RyeS5oIgorI2luY2x1ZGUgIk5vdEltcGxlbWVu
dGVkLmgiCisjaW5jbHVkZSAiUGx1Z2luRGF0YWJhc2UuaCIKKyNpbmNsdWRlICJQbHVnaW5EZWJ1
Zy5oIgorI2luY2x1ZGUgIm5wcnVudGltZV9pbXBsLmgiCisKKyNpbmNsdWRlIDxFaW5hLmg+Cisj
aW5jbHVkZSA8ZGxmY24uaD4KKyNpbmNsdWRlIDx3dGYvdGV4dC9DU3RyaW5nLmg+CisKK25hbWVz
cGFjZSBXZWJDb3JlIHsKKwordHlwZWRlZiBjaGFyKiAoKk5QUF9HZXRNSU1FRGVzY3JpcHRpb25Q
cm9jUHRyKSgpOworCitib29sIFBsdWdpblBhY2thZ2U6OmZldGNoSW5mbygpCit7CisgICAgY29u
c3QgY2hhciAqZXJybXNnOworCisgICAgaWYgKCFsb2FkKCkpCisgICAgICAgIHJldHVybiBmYWxz
ZTsKKworICAgIE5QUF9HZXRWYWx1ZVByb2NQdHIgZ2V0VmFsdWUgPSAwOworICAgIE5QUF9HZXRN
SU1FRGVzY3JpcHRpb25Qcm9jUHRyIGdldE1JTUVEZXNjcmlwdGlvbiA9IDA7CisKKyAgICBnZXRW
YWx1ZSA9IHJlaW50ZXJwcmV0X2Nhc3Q8TlBQX0dldFZhbHVlUHJvY1B0cj4oZGxzeW0obV9tb2R1
bGUsICJOUF9HZXRWYWx1ZSIpKTsKKyAgICBpZiAoKGVycm1zZyA9IGRsZXJyb3IoKSkpIHsKKyAg
ICAgICAgRUlOQV9MT0dfRVJSKCJDb3VsZCBub3QgZ2V0IHN5bWJvbCBOUF9HZXRWYWx1ZTogJXMi
LCBlcnJtc2cpOworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorCisgICAgZ2V0TUlNRURl
c2NyaXB0aW9uID0gcmVpbnRlcnByZXRfY2FzdDxOUFBfR2V0TUlNRURlc2NyaXB0aW9uUHJvY1B0
cj4oZGxzeW0obV9tb2R1bGUsICJOUF9HZXRNSU1FRGVzY3JpcHRpb24iKSk7CisgICAgaWYgKChl
cnJtc2cgPSBkbGVycm9yKCkpKSB7CisgICAgICAgIEVJTkFfTE9HX0VSUigiQ291bGQgbm90IGdl
dCBzeW1ib2wgTlBfR2V0TUlNRURlc2NyaXB0aW9uOiAlcyIsIGVycm1zZyk7CisgICAgICAgIHJl
dHVybiBmYWxzZTsKKyAgICB9CisKKyAgICBjaGFyKiBidWZmZXIgPSAwOworICAgIE5QRXJyb3Ig
ZXJyID0gZ2V0VmFsdWUoMCwgTlBQVnBsdWdpbk5hbWVTdHJpbmcsIHN0YXRpY19jYXN0PHZvaWQq
PigmYnVmZmVyKSk7CisgICAgaWYgKGVyciAhPSBOUEVSUl9OT19FUlJPUikKKyAgICAgICAgcmV0
dXJuIGZhbHNlOworICAgIG1fbmFtZSA9IGJ1ZmZlcjsKKworICAgIGJ1ZmZlciA9IDA7CisgICAg
ZXJyID0gZ2V0VmFsdWUoMCwgTlBQVnBsdWdpbkRlc2NyaXB0aW9uU3RyaW5nLCBzdGF0aWNfY2Fz
dDx2b2lkKj4oJmJ1ZmZlcikpOworICAgIGlmIChlcnIgIT0gTlBFUlJfTk9fRVJST1IpCisgICAg
ICAgIHJldHVybiBmYWxzZTsKKyAgICBtX2Rlc2NyaXB0aW9uID0gYnVmZmVyOworICAgIGRldGVy
bWluZU1vZHVsZVZlcnNpb25Gcm9tRGVzY3JpcHRpb24oKTsKKworICAgIFN0cmluZyBkZXNjcmlw
dGlvbiA9IGdldE1JTUVEZXNjcmlwdGlvbigpOworCisgICAgVmVjdG9yPFN0cmluZz4gdHlwZXM7
CisgICAgZGVzY3JpcHRpb24uc3BsaXQoVUNoYXIoJzsnKSwgZmFsc2UsIHR5cGVzKTsKKworICAg
IGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgdHlwZXMuc2l6ZSgpOyArK2kpIHsKKyAgICAgICAgVmVj
dG9yPFN0cmluZz4gbWltZTsKKyAgICAgICAgdHlwZXNbaV0uc3BsaXQoVUNoYXIoJzonKSwgdHJ1
ZSwgbWltZSk7CisKKyAgICAgICAgaWYgKCFtaW1lLmlzRW1wdHkoKSA+IDApIHsKKyAgICAgICAg
ICAgIFZlY3RvcjxTdHJpbmc+IGV4dHM7CisKKyAgICAgICAgICAgIGlmIChtaW1lLnNpemUoKSA+
IDEpCisgICAgICAgICAgICAgICAgbWltZVsxXS5zcGxpdChVQ2hhcignLCcpLCBmYWxzZSwgZXh0
cyk7CisKKyAgICAgICAgICAgIGRldGVybWluZVF1aXJrcyhtaW1lWzBdKTsKKyAgICAgICAgICAg
IG1fbWltZVRvRXh0ZW5zaW9ucy5hZGQobWltZVswXSwgZXh0cyk7CisKKyAgICAgICAgICAgIGlm
IChtaW1lLnNpemUoKSA+IDIpCisgICAgICAgICAgICAgICAgbV9taW1lVG9EZXNjcmlwdGlvbnMu
YWRkKG1pbWVbMF0sIG1pbWVbMl0pOworICAgICAgICB9CisgICAgfQorCisgICAgcmV0dXJuIHRy
dWU7Cit9CisKK3VpbnQxNl90IFBsdWdpblBhY2thZ2U6Ok5QVmVyc2lvbigpIGNvbnN0Cit7Cisg
ICAgcmV0dXJuIE5QVkVSU19IQVNfUExVR0lOX1RIUkVBRF9BU1lOQ19DQUxMOworfQorCitib29s
IFBsdWdpblBhY2thZ2U6OmxvYWQoKQoreworICAgIGNoYXIqIGVycm1zZzsKKworICAgIGlmICht
X2lzTG9hZGVkKSB7CisgICAgICAgIG1fbG9hZENvdW50Kys7CisgICAgICAgIHJldHVybiB0cnVl
OworICAgIH0KKworICAgIG1fbW9kdWxlID0gZGxvcGVuKG1fcGF0aC51dGY4KCkuZGF0YSgpLCBS
VExEX0xBWlkgfCBSVExEX0xPQ0FMKTsKKyAgICBpZiAoKGVycm1zZyA9IGRsZXJyb3IoKSkpIHsK
KyAgICAgICAgRUlOQV9MT0dfV0FSTigiJXMgbm90IGxvYWRlZDogJXMiLCBtX3BhdGgudXRmOCgp
LmRhdGEoKSwgZXJybXNnKTsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKworICAgIG1f
aXNMb2FkZWQgPSB0cnVlOworCisgICAgTlBfSW5pdGlhbGl6ZUZ1bmNQdHIgaW5pdGlhbGl6ZTsK
KyAgICBOUEVycm9yIGVycjsKKworICAgIGluaXRpYWxpemUgPSAoTlBfSW5pdGlhbGl6ZUZ1bmNQ
dHIpZGxzeW0obV9tb2R1bGUsICJOUF9Jbml0aWFsaXplIik7CisgICAgaWYgKChlcnJtc2cgPSBk
bGVycm9yKCkpKSB7CisgICAgICAgIEVJTkFfTE9HX0VSUigiQ291bGQgbm90IGdldCBzeW1ib2wg
TlBfSW5pdGlhbGl6ZTogJXMiLCBlcnJtc2cpOworICAgICAgICBnb3RvIGFib3J0OworICAgIH0K
KworICAgIG1fTlBQX1NodXRkb3duID0gKE5QUF9TaHV0ZG93blByb2NQdHIpZGxzeW0obV9tb2R1
bGUsICJOUF9TaHV0ZG93biIpOworICAgIGlmICgoZXJybXNnID0gZGxlcnJvcigpKSkgeworICAg
ICAgICBFSU5BX0xPR19FUlIoIkNvdWxkIG5vdCBnZXQgc3ltYm9sIE5QX1NodXRkb3duOiAlcyIs
IGVycm1zZyk7CisgICAgICAgIGdvdG8gYWJvcnQ7CisgICAgfQorCisgICAgbWVtc2V0KCZtX3Bs
dWdpbkZ1bmNzLCAwLCBzaXplb2YobV9wbHVnaW5GdW5jcykpOworICAgIG1fcGx1Z2luRnVuY3Mu
c2l6ZSA9IHNpemVvZihtX3BsdWdpbkZ1bmNzKTsKKworICAgIGluaXRpYWxpemVCcm93c2VyRnVu
Y3MoKTsKKworI2lmIGRlZmluZWQoWFBfVU5JWCkKKyAgICBlcnIgPSBpbml0aWFsaXplKCZtX2Jy
b3dzZXJGdW5jcywgJm1fcGx1Z2luRnVuY3MpOworI2Vsc2UKKyAgICBlcnIgPSBpbml0aWFsaXpl
KCZtX2Jyb3dzZXJGdW5jcyk7CisjZW5kaWYKKyAgICBpZiAoZXJyICE9IE5QRVJSX05PX0VSUk9S
KQorICAgICAgICBnb3RvIGFib3J0OworCisgICAgbV9sb2FkQ291bnQrKzsKKyAgICByZXR1cm4g
dHJ1ZTsKKworYWJvcnQ6CisgICAgRUlOQV9MT0dfREJHKCJmYWlsZWQgdG8gbG9hZCBwbHVnaW4s
IHVubG9hZCBpdCB3aXRob3V0IHNodXR0aW5nIGl0IGRvd24uIik7CisgICAgdW5sb2FkV2l0aG91
dFNodXRkb3duKCk7CisgICAgcmV0dXJuIGZhbHNlOworfQorCit9CmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9wbHVnaW5zL2VmbC9QbHVnaW5WaWV3RWZsLmNwcCBiL1NvdXJjZS9XZWJDb3Jl
L3BsdWdpbnMvZWZsL1BsdWdpblZpZXdFZmwuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4
IDAwMDAwMDAuLmUwYTY3ZGQKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbHVn
aW5zL2VmbC9QbHVnaW5WaWV3RWZsLmNwcApAQCAtMCwwICsxLDM4MSBAQAorLyoKKyAqIENvcHly
aWdodCAoQykgMjAwNiwgMjAwNyBBcHBsZSBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICog
Q29weXJpZ2h0IChDKSAyMDA4IENvbGxhYm9yYSBMdGQuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisg
KiBDb3B5cmlnaHQgKEMpIDIwMDggSU5kVCAtIEluc3RpdHV0byBOb2tpYSBkZSBUZWNub2xvZ2lh
CisgKiBDb3B5cmlnaHQgKEMpIDIwMDktMjAxMCBQcm9GVVNJT04gZW1iZWRkZWQgc3lzdGVtcwor
ICogQ29weXJpZ2h0IChDKSAyMDA5LTIwMTEgU2Ftc3VuZyBFbGVjdHJvbmljcworICoKKyAqIFJl
ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig
d2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl
IGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25z
IG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0
aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9u
IGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgor
ICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQ09NUFVURVIsIElOQy4g
YGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0Yg
TUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0Ug
QVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBDT01QVVRFUiwgSU5DLiBP
UgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElO
Q0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdF
UyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJT
VElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJ
VFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBU
SEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJ
TElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJ
U0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVO
IElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNp
bmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJQbHVnaW5WaWV3LmgiCisKKyNpbmNsdWRlICJG
cmFtZVZpZXcuaCIKKyNpbmNsdWRlICJHcmFwaGljc0NvbnRleHQuaCIKKyNpbmNsdWRlICJIVE1M
TmFtZXMuaCIKKyNpbmNsdWRlICJIVE1MUGx1Z0luRWxlbWVudC5oIgorI2luY2x1ZGUgIkhvc3RX
aW5kb3cuaCIKKyNpbmNsdWRlICJNb3VzZUV2ZW50LmgiCisjaW5jbHVkZSAiTm90SW1wbGVtZW50
ZWQuaCIKKyNpbmNsdWRlICJQbHVnaW5QYWNrYWdlLmgiCisjaW5jbHVkZSAibnBydW50aW1lX2lt
cGwuaCIKKyNpbmNsdWRlICJydW50aW1lL0pTTG9jay5oIgorI2luY2x1ZGUgPEVjb3JlX0V2YXMu
aD4KKyNpbmNsdWRlIDxFY29yZV9YLmg+CisjaW5jbHVkZSA8RXZhcy5oPgorCituYW1lc3BhY2Ug
V2ViQ29yZSB7CisKK3VzaW5nIG5hbWVzcGFjZSBIVE1MTmFtZXM7CisKKyNpZiBFTkFCTEUoTkVU
U0NBUEVfUExVR0lOX0FQSSkKK2Jvb2wgUGx1Z2luVmlldzo6ZGlzcGF0Y2hOUEV2ZW50KE5QRXZl
bnQmIGV2ZW50KQoreworICAgIGlmICghbV9wbHVnaW4tPnBsdWdpbkZ1bmNzKCktPmV2ZW50KQor
ICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBQbHVnaW5WaWV3OjpzZXRDdXJyZW50UGx1Z2lu
Vmlldyh0aGlzKTsKKyAgICBKU0M6OkpTTG9jazo6RHJvcEFsbExvY2tzIGRyb3BBbGxMb2Nrcyhm
YWxzZSk7CisgICAgc2V0Q2FsbGluZ1BsdWdpbih0cnVlKTsKKworICAgIGJvb2wgYWNjZXB0ZWQg
PSBtX3BsdWdpbi0+cGx1Z2luRnVuY3MoKS0+ZXZlbnQobV9pbnN0YW5jZSwgJmV2ZW50KTsKKwor
ICAgIHNldENhbGxpbmdQbHVnaW4oZmFsc2UpOworICAgIFBsdWdpblZpZXc6OnNldEN1cnJlbnRQ
bHVnaW5WaWV3KDApOworICAgIHJldHVybiBhY2NlcHRlZDsKK30KKyNlbmRpZgorCit2b2lkIFBs
dWdpblZpZXc6OmhhbHQoKQoreworICAgIG5vdEltcGxlbWVudGVkKCk7Cit9CisKKyNpZiBkZWZp
bmVkKFhQX1VOSVgpICYmIEVOQUJMRShORVRTQ0FQRV9QTFVHSU5fQVBJKQordm9pZCBQbHVnaW5W
aWV3OjpoYW5kbGVGb2N1c0luRXZlbnQoKQoreworICAgIG5vdEltcGxlbWVudGVkKCk7Cit9CisK
K3ZvaWQgUGx1Z2luVmlldzo6aGFuZGxlRm9jdXNPdXRFdmVudCgpCit7CisgICAgbm90SW1wbGVt
ZW50ZWQoKTsKK30KKyNlbmRpZgorCit2b2lkIFBsdWdpblZpZXc6OnJlc3RhcnQoKQoreworICAg
IG5vdEltcGxlbWVudGVkKCk7Cit9CisKK3ZvaWQgUGx1Z2luVmlldzo6aGFuZGxlS2V5Ym9hcmRF
dmVudChLZXlib2FyZEV2ZW50KikKK3sKKyAgICBub3RJbXBsZW1lbnRlZCgpOworfQorCit2b2lk
IFBsdWdpblZpZXc6OmhhbmRsZU1vdXNlRXZlbnQoTW91c2VFdmVudCogZXZlbnQpCit7CisjaWYg
RU5BQkxFKE5FVFNDQVBFX1BMVUdJTl9BUEkpCisgICAgTlBFdmVudCB4RXZlbnQ7CisKKyAgICBJ
bnRSZWN0IHJlY3QgPSBzdGF0aWNfY2FzdDxGcmFtZVZpZXcqPihwYXJlbnQoKSktPmNvbnRlbnRz
VG9TY3JlZW4oSW50UmVjdCgwLCAwLCBldmVudC0+b2Zmc2V0WCgpLCBldmVudC0+b2Zmc2V0WSgp
KSk7CisgICAgaW50IGV2ZW50WCA9IHJlY3Qud2lkdGgoKTsKKyAgICBpbnQgZXZlbnRZID0gcmVj
dC5oZWlnaHQoKTsKKyAgICBpZiAoZXZlbnQtPnR5cGUoKSA9PSBldmVudE5hbWVzKCkubW91c2Vt
b3ZlRXZlbnQKKyAgICAgICAgICAgIHx8IGV2ZW50LT50eXBlKCkgPT0gZXZlbnROYW1lcygpLm1v
dXNlb3V0RXZlbnQKKyAgICAgICAgICAgIHx8IGV2ZW50LT50eXBlKCkgPT0gZXZlbnROYW1lcygp
Lm1vdXNlb3ZlckV2ZW50KSB7CisgICAgICAgIHhFdmVudC50eXBlID0gTW90aW9uTm90aWZ5Owor
ICAgICAgICB4RXZlbnQueG1vdGlvbi54ID0gZXZlbnRYOworICAgICAgICB4RXZlbnQueG1vdGlv
bi55ID0gZXZlbnRZOworICAgIH0gZWxzZSBpZiAoZXZlbnQtPnR5cGUoKSA9PSBldmVudE5hbWVz
KCkubW91c2Vkb3duRXZlbnQpIHsKKyAgICAgICAgeEV2ZW50LnR5cGUgPSBCdXR0b25QcmVzczsK
KyAgICAgICAgeEV2ZW50LnhidXR0b24ueCA9IGV2ZW50WDsKKyAgICAgICAgeEV2ZW50LnhidXR0
b24ueSA9IGV2ZW50WTsKKyAgICAgICAgeEV2ZW50LnhidXR0b24uYnV0dG9uID0gZXZlbnQtPmJ1
dHRvbigpICsgMTsgLy8gRE9NIE1vdXNlRXZlbnQgY291bnRzIGZyb20gMCwgYW5kIFhCdXR0b25F
dmVudCBmcm9tIDEuCisgICAgfSBlbHNlIGlmIChldmVudC0+dHlwZSgpID09IGV2ZW50TmFtZXMo
KS5tb3VzZXVwRXZlbnQpIHsKKyAgICAgICAgeEV2ZW50LnR5cGUgPSBCdXR0b25SZWxlYXNlOwor
ICAgICAgICB4RXZlbnQueGJ1dHRvbi54ID0gZXZlbnRYOworICAgICAgICB4RXZlbnQueGJ1dHRv
bi55ID0gZXZlbnRZOworICAgICAgICB4RXZlbnQueGJ1dHRvbi5idXR0b24gPSBldmVudC0+YnV0
dG9uKCkgKyAxOworICAgIH0gZWxzZQorICAgICAgICByZXR1cm47CisKKyAgICBpZiAoZGlzcGF0
Y2hOUEV2ZW50KHhFdmVudCkpCisgICAgICAgIGV2ZW50LT5zZXREZWZhdWx0SGFuZGxlZCgpOwor
I2Vsc2UKKyAgICBub3RJbXBsZW1lbnRlZCgpOworI2VuZGlmCit9CisKK3ZvaWQgUGx1Z2luVmll
dzo6dXBkYXRlUGx1Z2luV2lkZ2V0KCkKK3sKKyAgICBpZiAoIXBhcmVudCgpIHx8ICFtX2lzV2lu
ZG93ZWQpCisgICAgICAgIHJldHVybjsKKworICAgIEFTU0VSVChwYXJlbnQoKS0+aXNGcmFtZVZp
ZXcoKSk7CisgICAgRnJhbWVWaWV3KiBmcmFtZVZpZXcgPSBzdGF0aWNfY2FzdDxGcmFtZVZpZXcq
PihwYXJlbnQoKSk7CisKKyAgICBJbnRSZWN0IG9sZFdpbmRvd1JlY3QgPSBtX3dpbmRvd1JlY3Q7
CisgICAgSW50UmVjdCBvbGRDbGlwUmVjdCA9IG1fY2xpcFJlY3Q7CisKKyAgICBtX3dpbmRvd1Jl
Y3QgPSBmcmFtZVZpZXctPmNvbnRlbnRzVG9TY3JlZW4oZnJhbWVSZWN0KCkpOworCisgICAgbV9j
bGlwUmVjdCA9IHdpbmRvd0NsaXBSZWN0KCk7CisgICAgbV9jbGlwUmVjdC5tb3ZlKC1tX3dpbmRv
d1JlY3QueCgpLCAtbV93aW5kb3dSZWN0LnkoKSk7Cit9CisKK3ZvaWQgUGx1Z2luVmlldzo6c2V0
Rm9jdXMoYm9vbCBmb2N1c2VkKQoreworICAgIGlmIChmb2N1c2VkKQorICAgICAgICBtX2VsZW1l
bnQtPmRvY3VtZW50KCktPnNldEZvY3VzZWROb2RlKG1fZWxlbWVudCk7CisKKyAgICBXaWRnZXQ6
OnNldEZvY3VzKGZvY3VzZWQpOworfQorCit2b2lkIFBsdWdpblZpZXc6OnNob3coKQoreworICAg
IHNldFNlbGZWaXNpYmxlKHRydWUpOworCisgICAgV2lkZ2V0OjpzaG93KCk7Cit9CisKK3ZvaWQg
UGx1Z2luVmlldzo6aGlkZSgpCit7CisgICAgc2V0U2VsZlZpc2libGUoZmFsc2UpOworCisgICAg
V2lkZ2V0OjpoaWRlKCk7Cit9CisKK3ZvaWQgUGx1Z2luVmlldzo6cGFpbnQoR3JhcGhpY3NDb250
ZXh0KiBjb250ZXh0LCBjb25zdCBJbnRSZWN0JiByZWN0KQoreworICAgIGlmICghbV9pc1N0YXJ0
ZWQpIHsKKyAgICAgICAgcGFpbnRNaXNzaW5nUGx1Z2luSWNvbihjb250ZXh0LCByZWN0KTsKKyAg
ICAgICAgcmV0dXJuOworICAgIH0KK30KKwordm9pZCBQbHVnaW5WaWV3OjpzZXRQYXJlbnQoU2Ny
b2xsVmlldyogcGFyZW50KQoreworICAgIFdpZGdldDo6c2V0UGFyZW50KHBhcmVudCk7CisKKyAg
ICBpZiAocGFyZW50KQorICAgICAgICBpbml0KCk7Cit9CisKK3ZvaWQgUGx1Z2luVmlldzo6c2V0
TlBXaW5kb3dSZWN0KGNvbnN0IEludFJlY3QmIHJlY3QpCit7CisgICAgbm90SW1wbGVtZW50ZWQo
KTsKKyAgICByZXR1cm47Cit9CisKK3ZvaWQgUGx1Z2luVmlldzo6c2V0TlBXaW5kb3dJZk5lZWRl
ZCgpCit7Cit9CisKK3ZvaWQgUGx1Z2luVmlldzo6c2V0UGFyZW50VmlzaWJsZShib29sIHZpc2li
bGUpCit7CisgICAgaWYgKGlzUGFyZW50VmlzaWJsZSgpID09IHZpc2libGUpCisgICAgICAgIHJl
dHVybjsKKworICAgIFdpZGdldDo6c2V0UGFyZW50VmlzaWJsZSh2aXNpYmxlKTsKK30KKworI2lm
IEVOQUJMRShORVRTQ0FQRV9QTFVHSU5fQVBJKQorTlBFcnJvciBQbHVnaW5WaWV3OjpoYW5kbGVQ
b3N0UmVhZEZpbGUoVmVjdG9yPGNoYXI+JiBidWZmZXIsIHVpbnQzMl90IGxlbiwgY29uc3QgY2hh
ciogYnVmKQoreworICAgIFN0cmluZyBmaWxlbmFtZShidWYsIGxlbik7CisKKyAgICBpZiAoZmls
ZW5hbWUuc3RhcnRzV2l0aCgiZmlsZTovLy8iKSkKKyAgICAgICAgZmlsZW5hbWUgPSBmaWxlbmFt
ZS5zdWJzdHJpbmcoOCk7CisKKyAgICBpZiAoIWZpbGVFeGlzdHMoZmlsZW5hbWUpKQorICAgICAg
ICByZXR1cm4gTlBFUlJfRklMRV9OT1RfRk9VTkQ7CisKKyAgICBGSUxFKiBmaWxlSGFuZGxlID0g
Zm9wZW4oZmlsZW5hbWUudXRmOCgpLmRhdGEoKSwgInIiKTsKKworICAgIGlmICghZmlsZUhhbmRs
ZSkKKyAgICAgICAgcmV0dXJuIE5QRVJSX0ZJTEVfTk9UX0ZPVU5EOworCisgICAgaW50IGJ5dGVz
UmVhZCA9IGZyZWFkKGJ1ZmZlci5kYXRhKCksIDEsIDAsIGZpbGVIYW5kbGUpOworCisgICAgZmNs
b3NlKGZpbGVIYW5kbGUpOworCisgICAgaWYgKGJ5dGVzUmVhZCA8PSAwKQorICAgICAgICByZXR1
cm4gTlBFUlJfRklMRV9OT1RfRk9VTkQ7CisKKyAgICByZXR1cm4gTlBFUlJfTk9fRVJST1I7Cit9
CisjZW5kaWYKKworI2lmIEVOQUJMRShORVRTQ0FQRV9QTFVHSU5fQVBJKQorYm9vbCBQbHVnaW5W
aWV3OjpwbGF0Zm9ybUdldFZhbHVlU3RhdGljKE5QTlZhcmlhYmxlIHZhcmlhYmxlLCB2b2lkKiB2
YWx1ZSwgTlBFcnJvciogcmVzdWx0KQoreworICAgIHN3aXRjaCAodmFyaWFibGUpIHsKKyAgICBj
YXNlIE5QTlZUb29sa2l0OgorICAgICAgICAqc3RhdGljX2Nhc3Q8dWludDMyX3QqPih2YWx1ZSkg
PSAwOworICAgICAgICAqcmVzdWx0ID0gTlBFUlJfTk9fRVJST1I7CisgICAgICAgIHJldHVybiB0
cnVlOworCisgICAgY2FzZSBOUE5WU3VwcG9ydHNYRW1iZWRCb29sOgorICAgICAgICAqc3RhdGlj
X2Nhc3Q8TlBCb29sKj4odmFsdWUpID0gZmFsc2U7CisgICAgICAgICpyZXN1bHQgPSBOUEVSUl9O
T19FUlJPUjsKKyAgICAgICAgcmV0dXJuIHRydWU7CisKKyAgICBjYXNlIE5QTlZqYXZhc2NyaXB0
RW5hYmxlZEJvb2w6CisgICAgICAgICpzdGF0aWNfY2FzdDxOUEJvb2wqPih2YWx1ZSkgPSB0cnVl
OworICAgICAgICAqcmVzdWx0ID0gTlBFUlJfTk9fRVJST1I7CisgICAgICAgIHJldHVybiB0cnVl
OworCisgICAgY2FzZSBOUE5WU3VwcG9ydHNXaW5kb3dsZXNzOgorICAgICAgICAqc3RhdGljX2Nh
c3Q8TlBCb29sKj4odmFsdWUpID0gZmFsc2U7CisgICAgICAgICpyZXN1bHQgPSBOUEVSUl9OT19F
UlJPUjsKKyAgICAgICAgcmV0dXJuIHRydWU7CisKKyAgICBkZWZhdWx0OgorICAgICAgICByZXR1
cm4gZmFsc2U7CisgICAgfQorfQorCitib29sIFBsdWdpblZpZXc6OnBsYXRmb3JtR2V0VmFsdWUo
TlBOVmFyaWFibGUgdmFyaWFibGUsIHZvaWQqIHZhbHVlLCBOUEVycm9yKiByZXN1bHQpCit7Cisg
ICAgaWYgKCF2YWx1ZSB8fCAhcmVzdWx0KQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBz
d2l0Y2ggKHZhcmlhYmxlKSB7CisgICAgY2FzZSBOUE5WeERpc3BsYXk6CisgICAgICAgICpzdGF0
aWNfY2FzdDx2b2lkICoqPih2YWx1ZSkgPSBzdGF0aWNfY2FzdDxEaXNwbGF5Kj4oZWNvcmVfeF9k
aXNwbGF5X2dldCgpKTsKKyAgICAgICAgKnJlc3VsdCA9IE5QRVJSX05PX0VSUk9SOworICAgICAg
ICByZXR1cm4gdHJ1ZTsKKworICAgIGNhc2UgTlBOVnh0QXBwQ29udGV4dDoKKyAgICAgICAgKnJl
c3VsdCA9IE5QRVJSX0dFTkVSSUNfRVJST1I7CisgICAgICAgIHJldHVybiB0cnVlOworCisgICAg
Y2FzZSBOUE5WV2luZG93TlBPYmplY3Q6IHsKKyAgICAgICAgaWYgKG1faXNKYXZhU2NyaXB0UGF1
c2VkKSB7CisgICAgICAgICAgICAqcmVzdWx0ID0gTlBFUlJfR0VORVJJQ19FUlJPUjsKKyAgICAg
ICAgICAgIHJldHVybiB0cnVlOworICAgICAgICB9CisKKyAgICAgICAgTlBPYmplY3QqIHdpbmRv
d1NjcmlwdE9iamVjdCA9IG1fcGFyZW50RnJhbWUtPnNjcmlwdCgpLT53aW5kb3dTY3JpcHROUE9i
amVjdCgpOworCisgICAgICAgIC8vIFJldHVybiB2YWx1ZSBpcyBleHBlY3RlZCB0byBiZSByZXRh
aW5lZCwgYXMgZGVzY3JpYmVkIGhlcmU6IDxodHRwOi8vd3d3Lm1vemlsbGEub3JnL3Byb2plY3Rz
L3BsdWdpbi9ucHJ1bnRpbWUuaHRtbD4KKyAgICAgICAgaWYgKHdpbmRvd1NjcmlwdE9iamVjdCkK
KyAgICAgICAgICAgIF9OUE5fUmV0YWluT2JqZWN0KHdpbmRvd1NjcmlwdE9iamVjdCk7CisKKyAg
ICAgICAgdm9pZCoqIHYgPSAodm9pZCoqKXZhbHVlOworICAgICAgICAqdiA9IHdpbmRvd1Njcmlw
dE9iamVjdDsKKworICAgICAgICAqcmVzdWx0ID0gTlBFUlJfTk9fRVJST1I7CisgICAgICAgIHJl
dHVybiB0cnVlOworICAgIH0KKworICAgIGNhc2UgTlBOVlBsdWdpbkVsZW1lbnROUE9iamVjdDog
eworICAgICAgICBpZiAobV9pc0phdmFTY3JpcHRQYXVzZWQpIHsKKyAgICAgICAgICAgICpyZXN1
bHQgPSBOUEVSUl9HRU5FUklDX0VSUk9SOworICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAg
ICAgIH0KKworICAgICAgICBOUE9iamVjdCogcGx1Z2luU2NyaXB0T2JqZWN0ID0gMDsKKworICAg
ICAgICBpZiAobV9lbGVtZW50LT5oYXNUYWdOYW1lKGFwcGxldFRhZykgfHwgbV9lbGVtZW50LT5o
YXNUYWdOYW1lKGVtYmVkVGFnKSB8fCBtX2VsZW1lbnQtPmhhc1RhZ05hbWUob2JqZWN0VGFnKSkK
KyAgICAgICAgICAgIHBsdWdpblNjcmlwdE9iamVjdCA9IHN0YXRpY19jYXN0PEhUTUxQbHVnSW5F
bGVtZW50Kj4obV9lbGVtZW50KS0+Z2V0TlBPYmplY3QoKTsKKworICAgICAgICAvLyBSZXR1cm4g
dmFsdWUgaXMgZXhwZWN0ZWQgdG8gYmUgcmV0YWluZWQsIGFzIGRlc2NyaWJlZCBoZXJlOiA8aHR0
cDovL3d3dy5tb3ppbGxhLm9yZy9wcm9qZWN0cy9wbHVnaW4vbnBydW50aW1lLmh0bWw+CisgICAg
ICAgIGlmIChwbHVnaW5TY3JpcHRPYmplY3QpCisgICAgICAgICAgICBfTlBOX1JldGFpbk9iamVj
dChwbHVnaW5TY3JpcHRPYmplY3QpOworCisgICAgICAgIHZvaWQqKiB2ID0gKHZvaWQqKil2YWx1
ZTsKKyAgICAgICAgKnYgPSBwbHVnaW5TY3JpcHRPYmplY3Q7CisKKyAgICAgICAgKnJlc3VsdCA9
IE5QRVJSX05PX0VSUk9SOworICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CisKKyAgICBjYXNl
IE5QTlZuZXRzY2FwZVdpbmRvdzogeworICAgICAgICB2b2lkKiB3ID0gcmVpbnRlcnByZXRfY2Fz
dDx2b2lkKj4odmFsdWUpOworICAgICAgICBFdmFzX09iamVjdCogd2lkZ2V0ID0gbV9wYXJlbnRG
cmFtZS0+dmlldygpLT5ob3N0V2luZG93KCktPnBsYXRmb3JtUGFnZUNsaWVudCgpOworICAgICAg
ICBFdmFzKiBldmFzID0gZXZhc19vYmplY3RfZXZhc19nZXQod2lkZ2V0KTsKKyAgICAgICAgRWNv
cmVfRXZhcyogZWUgPSBlY29yZV9ldmFzX2Vjb3JlX2V2YXNfZ2V0KGV2YXMpOworICAgICAgICAq
KChYSUQgKil3KSA9IChXaW5kb3cpIGVjb3JlX2V2YXNfd2luZG93X2dldChlZSk7CisgICAgICAg
ICpyZXN1bHQgPSBOUEVSUl9OT19FUlJPUjsKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgfQor
CisgICAgY2FzZSBOUE5WVG9vbGtpdDoKKyAgICAgICAgaWYgKG1fcGx1Z2luLT5xdWlya3MoKS5j
b250YWlucyhQbHVnaW5RdWlya1JlcXVpcmVzR3RrVG9vbEtpdCkpIHsKKyAgICAgICAgICAgICoo
KHVpbnQzMl90ICopdmFsdWUpID0gMjsKKyAgICAgICAgICAgICpyZXN1bHQgPSBOUEVSUl9OT19F
UlJPUjsKKyAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICB9CisgICAgICAgIHJldHVy
biBmYWxzZTsKKyAgICAgICAgLy8gZmFsbCB0aHJvdWdoCisgICAgZGVmYXVsdDoKKyAgICAgICAg
cmV0dXJuIGZhbHNlOworICAgIH0KK30KKyNlbmRpZgorCit2b2lkIFBsdWdpblZpZXc6OmludmFs
aWRhdGVSZWN0KGNvbnN0IEludFJlY3QmIHJlY3QpCit7CisgICAgaW52YWxpZGF0ZVdpbmRvd2xl
c3NQbHVnaW5SZWN0KHJlY3QpOworfQorCisjaWYgRU5BQkxFKE5FVFNDQVBFX1BMVUdJTl9BUEkp
Cit2b2lkIFBsdWdpblZpZXc6OmludmFsaWRhdGVSZWN0KE5QUmVjdCogcmVjdCkKK3sKKyAgICBp
ZiAoIXJlY3QpIHsKKyAgICAgICAgaW52YWxpZGF0ZSgpOworICAgICAgICByZXR1cm47CisgICAg
fQorCisgICAgSW50UmVjdCByKHJlY3QtPmxlZnQsIHJlY3QtPnRvcCwgcmVjdC0+cmlnaHQgLSBy
ZWN0LT5sZWZ0LCByZWN0LT5ib3R0b20gLSByZWN0LT50b3ApOworCisgICAgaW52YWxpZGF0ZVJl
Y3Qocik7Cit9CisKK3ZvaWQgUGx1Z2luVmlldzo6aW52YWxpZGF0ZVJlZ2lvbihOUFJlZ2lvbiBy
ZWdpb24pCit7CisgICAgbm90SW1wbGVtZW50ZWQoKTsKK30KKyNlbmRpZgorCit2b2lkIFBsdWdp
blZpZXc6OmZvcmNlUmVkcmF3KCkKK3sKKyAgICBub3RJbXBsZW1lbnRlZCgpOworfQorCitib29s
IFBsdWdpblZpZXc6OnBsYXRmb3JtU3RhcnQoKQoreworICAgIEFTU0VSVChtX2lzU3RhcnRlZCk7
CisgICAgQVNTRVJUKG1fc3RhdHVzID09IFBsdWdpblN0YXR1c0xvYWRlZFN1Y2Nlc3NmdWxseSk7
CisKKyAgICBub3RJbXBsZW1lbnRlZCgpOworICAgIHJldHVybiB0cnVlOworfQorCit2b2lkIFBs
dWdpblZpZXc6OnBsYXRmb3JtRGVzdHJveSgpCit7Cit9CisKK30gLy8gbmFtZXNwYWNlIFdlYkNv
cmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvZWZsL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJL
aXQvZWZsL0NoYW5nZUxvZwppbmRleCAwNzA4Y2FmLi5mMTY0NDM5IDEwMDc1NQotLS0gYS9Tb3Vy
Y2UvV2ViS2l0L2VmbC9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYktpdC9lZmwvQ2hhbmdlTG9n
CkBAIC0xLDMgKzEsMTUgQEAKKzIwMTEtMDYtMTAgIE1hcml1c3ogR3J6ZWdvcmN6eWsgIDxtYXJp
dXN6LmdAc2Ftc3VuZy5jb20+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISku
CisKKyAgICAgICAgQnVnIDQ0NTA1IC0gW0VGTF0gTWlzc2luZyBwbHVnaW5zIHN1cHBvcnQgZm9y
IGVmbCBwb3J0CisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9p
ZD00NDUwNQorCisgICAgICAgIEltcGxlbWVudGF0aW9uIG9mIGV3a19mcmFtZV9wbHVnaW5fY3Jl
YXRlKCkgLSBjcmVhdGluZyBQbHVnaW5WaWV3CisKKyAgICAgICAgKiBld2svZXdrX2ZyYW1lLmNw
cDoKKyAgICAgICAgKGV3a19mcmFtZV9wbHVnaW5fY3JlYXRlKToKKwogMjAxMS0wNi0wOCAgSmFl
aHVuIExpbSAgPGxqYWVodW4ubGltQHNhbXN1bmcuY29tPgogCiAgICAgICAgIFJldmlld2VkIGJ5
IEFudG9uaW8gR29tZXMuCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L2VmbC9ld2svZXdrX2Zy
YW1lLmNwcCBiL1NvdXJjZS9XZWJLaXQvZWZsL2V3ay9ld2tfZnJhbWUuY3BwCmluZGV4IDM4NTNm
ODYuLjI3MjEwZGMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvZWZsL2V3ay9ld2tfZnJhbWUu
Y3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvZWZsL2V3ay9ld2tfZnJhbWUuY3BwCkBAIC0yMDM1LDUg
KzIwMzUsMjMgQEAgdm9pZCBld2tfZnJhbWVfZm9yY2VfbGF5b3V0KEV2YXNfT2JqZWN0KiBvKQog
CiBXVEY6OlBhc3NSZWZQdHI8V2ViQ29yZTo6V2lkZ2V0PiBld2tfZnJhbWVfcGx1Z2luX2NyZWF0
ZShFdmFzX09iamVjdCogbywgY29uc3QgV2ViQ29yZTo6SW50U2l6ZSYgcGx1Z2luU2l6ZSwgV2Vi
Q29yZTo6SFRNTFBsdWdJbkVsZW1lbnQqIGVsZW1lbnQsIGNvbnN0IFdlYkNvcmU6OktVUkwmIHVy
bCwgY29uc3QgV1RGOjpWZWN0b3I8V1RGOjpTdHJpbmc+JiBwYXJhbU5hbWVzLCBjb25zdCBXVEY6
OlZlY3RvcjxXVEY6OlN0cmluZz4mIHBhcmFtVmFsdWVzLCBjb25zdCBXVEY6OlN0cmluZyYgbWlt
ZVR5cGUsIGJvb2wgbG9hZE1hbnVhbGx5KQogeworI2lmIEVOQUJMRShORVRTQ0FQRV9QTFVHSU5f
QVBJKQorICAgIERCRygibz0lcCwgc2l6ZT0lZHglZCwgZWxlbWVudD0lcCwgdXJsPSVzLCBtaW1l
VHlwZT0lcyIsCisgICAgICAgIG8sIHBsdWdpblNpemUud2lkdGgoKSwgcGx1Z2luU2l6ZS5oZWln
aHQoKSwgZWxlbWVudCwKKyAgICAgICAgdXJsLnByZXR0eVVSTCgpLnV0ZjgoKS5kYXRhKCksIG1p
bWVUeXBlLnV0ZjgoKS5kYXRhKCkpOworCisgICAgRVdLX0ZSQU1FX1NEX0dFVF9PUl9SRVRVUk4o
bywgc2QsIDApOworCisgICAgLy8gVE9ETzogZW1pdCBzaWduYWwgYW5kIGFzayB3ZWJraXQgdXNl
cnMgaWYgc29tZXRoaW5nIGVsc2Ugc2hvdWxkIGJlIGRvbmUuCisgICAgLy8gbGlrZSBjcmVhdGlu
ZyBhbm90aGVyIHggd2luZG93IChzZWUgZ3RrLCBpdCBhbGxvd3MgdXNlcnMgdG8gY3JlYXRlCisg
ICAgLy8gR3RrUGx1Z2luV2lkZ2V0LgorCisgICAgV1RGOjpSZWZQdHI8V2ViQ29yZTo6UGx1Z2lu
Vmlldz4gcGx1Z2luVmlldyA9IFdlYkNvcmU6OlBsdWdpblZpZXc6OmNyZWF0ZQorICAgICAgICAo
c2QtPmZyYW1lLCBwbHVnaW5TaXplLCBlbGVtZW50LCB1cmwsIHBhcmFtTmFtZXMsIHBhcmFtVmFs
dWVzLAorICAgICAgICBtaW1lVHlwZSwgbG9hZE1hbnVhbGx5KTsKKworICAgIGlmIChwbHVnaW5W
aWV3LT5zdGF0dXMoKSA9PSBXZWJDb3JlOjpQbHVnaW5TdGF0dXNMb2FkZWRTdWNjZXNzZnVsbHkp
CisgICAgICAgIHJldHVybiBwbHVnaW5WaWV3OworI2VuZGlmIC8vICNpZiBFTkFCTEUoTkVUU0NB
UEVfUExVR0lOX0FQSSkKICAgICByZXR1cm4gMDsKIH0K
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>105018</attachid>
            <date>2011-08-24 10:54:47 -0700</date>
            <delta_ts>2011-08-26 10:01:30 -0700</delta_ts>
            <desc>EFL&apos;s plugin support</desc>
            <filename>efl_plugins.patch</filename>
            <type>text/plain</type>
            <size>26624</size>
            <attacher name="Mariusz Grzegorczyk">mariusz.g</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cgYi9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvQ2hhbmdlTG9nCmluZGV4IDZkMmFhZDkuLmJjYmYyNTQgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKKysrIGIvU291cmNlL0phdmFTY3JpcHRD
b3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDEyIEBACisyMDExLTA4LTI0ICBNYXJpdXN6IEdyemVn
b3JjenlrICA8bWFyaXVzei5nQHNhbXN1bmcuY29tPgorCisgICAgICAgIEJ1ZyA0NDUwNSAtIFtF
RkxdIE1pc3NpbmcgcGx1Z2lucyBzdXBwb3J0IGZvciBlZmwgcG9ydAorICAgICAgICBodHRwczov
L2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NDQ1MDUKKworICAgICAgICBSZXZpZXdl
ZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICAqIHd0Zi9QbGF0Zm9ybS5oOgorCiAyMDEx
LTA4LTI0ICBGaWxpcCBQaXpsbyAgPGZwaXpsb0BhcHBsZS5jb20+CiAKICAgICAgICAgVGhlcmUg
aXMgbm8gZmFjaWxpdHkgZm9yIHByb2ZpbGluZyBob3cgdGhlIHdyaXRlIGJhcnJpZXIgaXMgdXNl
ZApkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3d0Zi9QbGF0Zm9ybS5oIGIvU291
cmNlL0phdmFTY3JpcHRDb3JlL3d0Zi9QbGF0Zm9ybS5oCmluZGV4IGZhMDc0ZDguLmFhNWE5MzAg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93dGYvUGxhdGZvcm0uaAorKysgYi9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvd3RmL1BsYXRmb3JtLmgKQEAgLTEwOTMsNyArMTA5Myw3IEBA
CiAjZGVmaW5lIFdURl9VU0VfUFJPVEVDVElPTl9TUEFDRV9BVVRIX0NBTExCQUNLIDEKICNlbmRp
ZgogCi0jaWYgIUVOQUJMRShORVRTQ0FQRV9QTFVHSU5fQVBJKSB8fCAoRU5BQkxFKE5FVFNDQVBF
X1BMVUdJTl9BUEkpICYmICgoT1MoVU5JWCkgJiYgKFBMQVRGT1JNKFFUKSB8fCBQTEFURk9STShX
WCkpKSB8fCBQTEFURk9STShHVEspKSkKKyNpZiAhRU5BQkxFKE5FVFNDQVBFX1BMVUdJTl9BUEkp
IHx8IChFTkFCTEUoTkVUU0NBUEVfUExVR0lOX0FQSSkgJiYgKChPUyhVTklYKSAmJiAoUExBVEZP
Uk0oUVQpIHx8IFBMQVRGT1JNKFdYKSkpIHx8IFBMQVRGT1JNKEdUSykgfHwgUExBVEZPUk0oRUZM
KSkpCiAjZGVmaW5lIEVOQUJMRV9QTFVHSU5fUEFDS0FHRV9TSU1QTEVfSEFTSCAxCiAjZW5kaWYK
IApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvQ01ha2VMaXN0c0VmbC50eHQgYi9Tb3VyY2Uv
V2ViQ29yZS9DTWFrZUxpc3RzRWZsLnR4dAppbmRleCBmZWVlYTZkLi42NmFkNGFmIDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9DTWFrZUxpc3RzRWZsLnR4dAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9DTWFrZUxpc3RzRWZsLnR4dApAQCAtMTAsNiArMTAsNyBAQCBMSVNUKEFQUEVORCBXZWJDb3Jl
X0lOQ0xVREVfRElSRUNUT1JJRVMKICAgIiR7V0VCQ09SRV9ESVJ9L3BsYXRmb3JtL2dyYXBoaWNz
L2VmbCIKICAgIiR7V0VCQ09SRV9ESVJ9L3BhZ2UvZWZsIgogICAiJHtXRUJDT1JFX0RJUn0vYWNj
ZXNzaWJpbGl0eS9lZmwiCisgICIke1dFQkNPUkVfRElSfS9wbHVnaW5zL2VmbCIKICAgIiR7V0VC
S0lUX0RJUn0vZWZsL1dlYkNvcmVTdXBwb3J0IgogICAiJHtXRUJLSVRfRElSfS9lZmwvZXdrIgog
ICAiJHtERVJJVkVEX1NPVVJDRVNfRElSfSIKQEAgLTcyLDExICs3MywyNyBAQCBMSVNUKEFQUEVO
RCBXZWJDb3JlX1NPVVJDRVMKICAgcGxhdGZvcm0vaW1hZ2UtZGVjb2RlcnMvd2VicC9XRUJQSW1h
Z2VEZWNvZGVyLmNwcAogICBwbGF0Zm9ybS9wb3NpeC9GaWxlU3lzdGVtUE9TSVguY3BwCiAgIHBs
YXRmb3JtL3RleHQvZWZsL1RleHRCcmVha0l0ZXJhdG9ySW50ZXJuYWxJQ1VFZmwuY3BwCi0gIHBs
dWdpbnMvUGx1Z2luRGF0YU5vbmUuY3BwCi0gIHBsdWdpbnMvUGx1Z2luUGFja2FnZU5vbmUuY3Bw
Ci0gIHBsdWdpbnMvUGx1Z2luVmlld05vbmUuY3BwCiApCiAKK0lGIChFTkFCTEVfTkVUU0NBUEVf
UExVR0lOX0FQSSkKKyAgTElTVChBUFBFTkQgV2ViQ29yZV9TT1VSQ0VTCisgICAgcGx1Z2lucy9Q
bHVnaW5EYXRhYmFzZS5jcHAKKyAgICBwbHVnaW5zL1BsdWdpbkRlYnVnLmNwcAorICAgIHBsdWdp
bnMvUGx1Z2luUGFja2FnZS5jcHAKKyAgICBwbHVnaW5zL1BsdWdpblN0cmVhbS5jcHAKKyAgICBw
bHVnaW5zL1BsdWdpblZpZXcuY3BwCisgICAgcGx1Z2lucy9lZmwvUGx1Z2luRGF0YUVmbC5jcHAK
KyAgICBwbHVnaW5zL2VmbC9QbHVnaW5QYWNrYWdlRWZsLmNwcAorICAgIHBsdWdpbnMvZWZsL1Bs
dWdpblZpZXdFZmwuY3BwCisgICkKK0VMU0UgKCkKKyAgTElTVChBUFBFTkQgV2ViQ29yZV9TT1VS
Q0VTCisgICAgcGx1Z2lucy9QbHVnaW5EYXRhTm9uZS5jcHAKKyAgICBwbHVnaW5zL1BsdWdpblBh
Y2thZ2VOb25lLmNwcAorICAgIHBsdWdpbnMvUGx1Z2luVmlld05vbmUuY3BwCisgICkKK0VORElG
ICgpIAorCiBMSVNUKEFQUEVORCBXZWJDb3JlX1VTRVJfQUdFTlRfU1RZTEVfU0hFRVRTCiAgICAg
JHtXRUJDT1JFX0RJUn0vY3NzL21lZGlhQ29udHJvbHNFZmwuY3NzCiApCkBAIC0xNDQsNiArMTYx
LDcgQEAgSUYgKFdURl9VU0VfU09VUCkKICAgTElTVChBUFBFTkQgV2ViQ29yZV9TT1VSQ0VTCiAg
ICAgcGxhdGZvcm0vbmV0d29yay9zb3VwL0Nvb2tpZUphclNvdXAuY3BwCiAgICAgcGxhdGZvcm0v
bmV0d29yay9zb3VwL0dPd25QdHJTb3VwLmNwcAorICAgIHBsYXRmb3JtL25ldHdvcmsvc291cC9Q
cm94eVNlcnZlclNvdXAuY3BwCiAgICAgcGxhdGZvcm0vbmV0d29yay9zb3VwL1Jlc291cmNlSGFu
ZGxlU291cC5jcHAKICAgICBwbGF0Zm9ybS9uZXR3b3JrL3NvdXAvUmVzb3VyY2VSZXF1ZXN0U291
cC5jcHAKICAgICBwbGF0Zm9ybS9uZXR3b3JrL3NvdXAvUmVzb3VyY2VSZXNwb25zZVNvdXAuY3Bw
CkBAIC0xNjAsNiArMTc4LDcgQEAgSUYgKFdURl9VU0VfQ1VSTCkKICAgICBwbGF0Zm9ybS9uZXR3
b3JrL2N1cmwvQ29va2llSmFyQ3VybC5jcHAKICAgICBwbGF0Zm9ybS9uZXR3b3JrL2N1cmwvRE5T
Q3VybC5jcHAKICAgICBwbGF0Zm9ybS9uZXR3b3JrL2N1cmwvRm9ybURhdGFTdHJlYW1DdXJsLmNw
cAorICAgIHBsYXRmb3JtL25ldHdvcmsvY3VybC9Qcm94eVNlcnZlckN1cmwuY3BwCiAgICAgcGxh
dGZvcm0vbmV0d29yay9jdXJsL1Jlc291cmNlSGFuZGxlQ3VybC5jcHAKICAgICBwbGF0Zm9ybS9u
ZXR3b3JrL2N1cmwvUmVzb3VyY2VIYW5kbGVNYW5hZ2VyLmNwcAogICAgIHBsYXRmb3JtL25ldHdv
cmsvY3VybC9Tb2NrZXRTdHJlYW1IYW5kbGVDdXJsLmNwcApkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvQ2hhbmdlTG9nIGIvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCmluZGV4IGU0M2FjNWIu
LjEzOTVlMzEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZworKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9DaGFuZ2VMb2cKQEAgLTEsMyArMSw0OSBAQAorMjAxMS0wOC0yNCAgTWFyaXVz
eiBHcnplZ29yY3p5ayAgPG1hcml1c3ouZ0BzYW1zdW5nLmNvbT4KKworICAgICAgICBCdWcgNDQ1
MDUgLSBbRUZMXSBNaXNzaW5nIHBsdWdpbnMgc3VwcG9ydCBmb3IgZWZsIHBvcnQKKyAgICAgICAg
aHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTQ0NTA1CisKKyAgICAgICAg
UmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgQmFzaWMgZnVuY3Rpb25hbGl0
eSBvZiBwbHVnaW5zIGZvciBlZmwgcG9ydAorCisgICAgICAgIFRlbXBsYXRlIHZlcnNpb24sIHNv
IG5vIG5ldyB0ZXN0cyBhcmUgbmVlZGVkLgorCisgICAgICAgICogQ01ha2VMaXN0c0VmbC50eHQ6
CisgICAgICAgICogcGx1Z2lucy9QbHVnaW5WaWV3Lmg6CisgICAgICAgICogcGx1Z2lucy9lZmwv
UGx1Z2luRGF0YUVmbC5jcHA6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6UGx1Z2luRGF0YTo6
aW5pdFBsdWdpbnMpOgorICAgICAgICAoV2ViQ29yZTo6UGx1Z2luRGF0YTo6cmVmcmVzaCk6Cisg
ICAgICAgICogcGx1Z2lucy9lZmwvUGx1Z2luUGFja2FnZUVmbC5jcHA6IEFkZGVkLgorICAgICAg
ICAoV2ViQ29yZTo6UGx1Z2luUGFja2FnZTo6ZmV0Y2hJbmZvKToKKyAgICAgICAgKFdlYkNvcmU6
OlBsdWdpblBhY2thZ2U6Ok5QVmVyc2lvbik6CisgICAgICAgIChXZWJDb3JlOjpQbHVnaW5QYWNr
YWdlOjpsb2FkKToKKyAgICAgICAgKiBwbHVnaW5zL2VmbC9QbHVnaW5WaWV3RWZsLmNwcDogQWRk
ZWQuCisgICAgICAgIChXZWJDb3JlOjpQbHVnaW5WaWV3OjpkaXNwYXRjaE5QRXZlbnQpOgorICAg
ICAgICAoV2ViQ29yZTo6UGx1Z2luVmlldzo6aGFsdCk6CisgICAgICAgIChXZWJDb3JlOjpQbHVn
aW5WaWV3OjpoYW5kbGVGb2N1c0luRXZlbnQpOgorICAgICAgICAoV2ViQ29yZTo6UGx1Z2luVmll
dzo6aGFuZGxlRm9jdXNPdXRFdmVudCk6CisgICAgICAgIChXZWJDb3JlOjpQbHVnaW5WaWV3Ojpy
ZXN0YXJ0KToKKyAgICAgICAgKFdlYkNvcmU6OlBsdWdpblZpZXc6OmhhbmRsZUtleWJvYXJkRXZl
bnQpOgorICAgICAgICAoV2ViQ29yZTo6UGx1Z2luVmlldzo6aGFuZGxlTW91c2VFdmVudCk6Cisg
ICAgICAgIChXZWJDb3JlOjpQbHVnaW5WaWV3Ojp1cGRhdGVQbHVnaW5XaWRnZXQpOgorICAgICAg
ICAoV2ViQ29yZTo6UGx1Z2luVmlldzo6c2V0Rm9jdXMpOgorICAgICAgICAoV2ViQ29yZTo6UGx1
Z2luVmlldzo6c2hvdyk6CisgICAgICAgIChXZWJDb3JlOjpQbHVnaW5WaWV3OjpoaWRlKToKKyAg
ICAgICAgKFdlYkNvcmU6OlBsdWdpblZpZXc6OnBhaW50KToKKyAgICAgICAgKFdlYkNvcmU6OlBs
dWdpblZpZXc6OnNldFBhcmVudCk6CisgICAgICAgIChXZWJDb3JlOjpQbHVnaW5WaWV3OjpzZXRO
UFdpbmRvd1JlY3QpOgorICAgICAgICAoV2ViQ29yZTo6UGx1Z2luVmlldzo6c2V0TlBXaW5kb3dJ
Zk5lZWRlZCk6CisgICAgICAgIChXZWJDb3JlOjpQbHVnaW5WaWV3OjpzZXRQYXJlbnRWaXNpYmxl
KToKKyAgICAgICAgKFdlYkNvcmU6OlBsdWdpblZpZXc6OmhhbmRsZVBvc3RSZWFkRmlsZSk6Cisg
ICAgICAgIChXZWJDb3JlOjpQbHVnaW5WaWV3OjpwbGF0Zm9ybUdldFZhbHVlU3RhdGljKToKKyAg
ICAgICAgKFdlYkNvcmU6OlBsdWdpblZpZXc6OnBsYXRmb3JtR2V0VmFsdWUpOgorICAgICAgICAo
V2ViQ29yZTo6UGx1Z2luVmlldzo6aW52YWxpZGF0ZVJlY3QpOgorICAgICAgICAoV2ViQ29yZTo6
UGx1Z2luVmlldzo6aW52YWxpZGF0ZVJlZ2lvbik6CisgICAgICAgIChXZWJDb3JlOjpQbHVnaW5W
aWV3Ojpmb3JjZVJlZHJhdyk6CisgICAgICAgIChXZWJDb3JlOjpQbHVnaW5WaWV3OjpwbGF0Zm9y
bVN0YXJ0KToKKyAgICAgICAgKFdlYkNvcmU6OlBsdWdpblZpZXc6OnBsYXRmb3JtRGVzdHJveSk6
CisKIDIwMTEtMDgtMjQgIEFuZHJlYXMgS2xpbmcgIDxrbGluZ0B3ZWJraXQub3JnPgogCiAgICAg
ICAgIFNlbGVjdEVsZW1lbnREYXRhOiBSZW9yZGVyIG1lbWJlcnMgdG8gcmVkdWNlIG1lbW9yeSB1
c2FnZS4KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsdWdpbnMvUGx1Z2luVmlldy5oIGIv
U291cmNlL1dlYkNvcmUvcGx1Z2lucy9QbHVnaW5WaWV3LmgKaW5kZXggMDdjM2M2Ny4uZTljZjIw
OCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGx1Z2lucy9QbHVnaW5WaWV3LmgKKysrIGIv
U291cmNlL1dlYkNvcmUvcGx1Z2lucy9QbHVnaW5WaWV3LmgKQEAgLTM3Myw3ICszNzMsNyBAQCBu
YW1lc3BhY2UgV2ViQ29yZSB7CiAgICAgICAgIGJvb2wgbV9oYXZlVXBkYXRlZFBsdWdpbldpZGdl
dDsKICNlbmRpZgogCi0jaWYgKChQTEFURk9STShRVCkgfHwgUExBVEZPUk0oV1gpKSAmJiBPUyhX
SU5ET1dTKSkgfHwgZGVmaW5lZChYUF9NQUNPU1gpCisjaWYgKChQTEFURk9STShRVCkgfHwgUExB
VEZPUk0oV1gpKSAmJiBPUyhXSU5ET1dTKSkgfHwgZGVmaW5lZChYUF9NQUNPU1gpIHx8IFBMQVRG
T1JNKEVGTCkKICAgICAgICAgLy8gT24gTWFjIE9TWCBhbmQgUXQvV2luZG93cyB0aGUgcGx1Z2lu
IGRvZXMgbm90IGhhdmUgaXRzIG93biBuYXRpdmUgd2lkZ2V0LAogICAgICAgICAvLyBidXQgaXMg
dXNpbmcgdGhlIGNvbnRhaW5pbmcgd2luZG93IGFzIGl0cyByZWZlcmVuY2UgZm9yIHBvc2l0aW9u
aW5nL3BhaW50aW5nLgogICAgICAgICBQbGF0Zm9ybVBsdWdpbldpZGdldCBtX3dpbmRvdzsKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsdWdpbnMvZWZsL1BsdWdpbkRhdGFFZmwuY3BwIGIv
U291cmNlL1dlYkNvcmUvcGx1Z2lucy9lZmwvUGx1Z2luRGF0YUVmbC5jcHAKbmV3IGZpbGUgbW9k
ZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzIxZDUxYgotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL3BsdWdpbnMvZWZsL1BsdWdpbkRhdGFFZmwuY3BwCkBAIC0wLDAgKzEsNjYgQEAK
Ky8qCisgICAgQ29weXJpZ2h0IChDKSAyMDA2LCAyMDA3IEFwcGxlIEluYy4gIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCisgICAgQ29weXJpZ2h0IChDKSAyMDA4IFRyb2xsdGVjaCBBU0EKKyAgICBDb3B5
cmlnaHQgKEMpIDIwMDggQ29sbGFib3JhIEx0ZC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAgICBD
b3B5cmlnaHQgKEMpIDIwMDggSU5kVCAtIEluc3RpdHV0byBOb2tpYSBkZSBUZWNub2xvZ2lhCisg
ICAgQ29weXJpZ2h0IChDKSAyMDA5LTIwMTAgUHJvRlVTSU9OIGVtYmVkZGVkIHN5c3RlbXMKKyAg
ICBDb3B5cmlnaHQgKEMpIDIwMDktMjAxMSBTYW1zdW5nIEVsZWN0cm9uaWNzCisKKyAgICBUaGlz
IGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29y
CisgICAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJh
bCBQdWJsaWMKKyAgICBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBG
b3VuZGF0aW9uOyBlaXRoZXIKKyAgICB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5
b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisKKyAgICBUaGlzIGxpYnJhcnkgaXMgZGlz
dHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAgICBidXQgV0lU
SE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgor
ICAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4g
IFNlZSB0aGUgR05VCisgICAgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3Jl
IGRldGFpbHMuCisKKyAgICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBH
TlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgICAgYWxvbmcgd2l0aCB0aGlzIGxp
YnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KKyAgICB0
aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZp
ZnRoIEZsb29yLAorICAgIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgorKi8KKworI2luY2x1
ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIlBsdWdpbkRhdGEuaCIKKworI2luY2x1ZGUgIlBsdWdp
bkRhdGFiYXNlLmgiCisjaW5jbHVkZSAiUGx1Z2luUGFja2FnZS5oIgorCituYW1lc3BhY2UgV2Vi
Q29yZSB7CisKK3ZvaWQgUGx1Z2luRGF0YTo6aW5pdFBsdWdpbnMoY29uc3QgUGFnZSopCit7Cisg
ICAgY29uc3QgVmVjdG9yPFBsdWdpblBhY2thZ2UqPiYgcGx1Z2lucyA9IFBsdWdpbkRhdGFiYXNl
OjppbnN0YWxsZWRQbHVnaW5zKCktPnBsdWdpbnMoKTsKKworICAgIGZvciAoc2l6ZV90IGkgPSAw
OyBpIDwgcGx1Z2lucy5zaXplKCk7ICsraSkgeworICAgICAgICBQbHVnaW5QYWNrYWdlKiBwYWNr
YWdlID0gcGx1Z2luc1tpXTsKKyAgICAgICAgUGx1Z2luSW5mbyBpbmZvOworCisgICAgICAgIGlu
Zm8ubmFtZSA9IHBhY2thZ2UtPm5hbWUoKTsKKyAgICAgICAgaW5mby5maWxlID0gcGFja2FnZS0+
ZmlsZU5hbWUoKTsKKyAgICAgICAgaW5mby5kZXNjID0gcGFja2FnZS0+ZGVzY3JpcHRpb24oKTsK
KworICAgICAgICBjb25zdCBNSU1FVG9EZXNjcmlwdGlvbnNNYXAmIG1pbWVUb0Rlc2NyaXB0aW9u
cyA9IHBhY2thZ2UtPm1pbWVUb0Rlc2NyaXB0aW9ucygpOworICAgICAgICBNSU1FVG9EZXNjcmlw
dGlvbnNNYXA6OmNvbnN0X2l0ZXJhdG9yIGVuZCA9IG1pbWVUb0Rlc2NyaXB0aW9ucy5lbmQoKTsK
KyAgICAgICAgZm9yIChNSU1FVG9EZXNjcmlwdGlvbnNNYXA6OmNvbnN0X2l0ZXJhdG9yIGl0ID0g
bWltZVRvRGVzY3JpcHRpb25zLmJlZ2luKCk7IGl0ICE9IGVuZDsgKytpdCkgeworICAgICAgICAg
ICAgTWltZUNsYXNzSW5mbyBtaW1lOworCisgICAgICAgICAgICBtaW1lLnR5cGUgPSBpdC0+Zmly
c3Q7CisgICAgICAgICAgICBtaW1lLmRlc2MgPSBpdC0+c2Vjb25kOworICAgICAgICAgICAgbWlt
ZS5leHRlbnNpb25zID0gcGFja2FnZS0+bWltZVRvRXh0ZW5zaW9ucygpLmdldChtaW1lLnR5cGUp
OworCisgICAgICAgICAgICBpbmZvLm1pbWVzLmFwcGVuZChtaW1lKTsKKyAgICAgICAgfQorCisg
ICAgICAgIG1fcGx1Z2lucy5hcHBlbmQoaW5mbyk7CisgICAgfQorfQorCit2b2lkIFBsdWdpbkRh
dGE6OnJlZnJlc2goKQoreworICAgIFBsdWdpbkRhdGFiYXNlOjppbnN0YWxsZWRQbHVnaW5zKCkt
PnJlZnJlc2goKTsKK30KKworfTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsdWdpbnMv
ZWZsL1BsdWdpblBhY2thZ2VFZmwuY3BwIGIvU291cmNlL1dlYkNvcmUvcGx1Z2lucy9lZmwvUGx1
Z2luUGFja2FnZUVmbC5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjE4
YWVhNgotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsdWdpbnMvZWZsL1BsdWdp
blBhY2thZ2VFZmwuY3BwCkBAIC0wLDAgKzEsMTY4IEBACisvKgorICogQ29weXJpZ2h0IChDKSAy
MDA2LCAyMDA3IEFwcGxlIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQg
KEMpIDIwMDggQ29sbGFib3JhIEx0ZC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdo
dCAoQykgMjAwOCBOdWFudGkgTHRkLgorICogQ29weXJpZ2h0IChDKSAyMDA4IElOZFQgLSBJbnN0
aXR1dG8gTm9raWEgZGUgVGVjbm9sb2dpYQorICogQ29weXJpZ2h0IChDKSAyMDA5LTIwMTAgUHJv
RlVTSU9OIGVtYmVkZGVkIHN5c3RlbXMKKyAqIENvcHlyaWdodCAoQykgMjAwOS0yMDExIFNhbXN1
bmcgRWxlY3Ryb25pY3MKKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBh
bmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBl
cm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1l
dDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUg
YWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmlu
YXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGlu
IHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVk
IHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVE
IEJZIEFQUExFIENPTVBVVEVSLCBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9S
IElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQor
ICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1Ig
QSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hB
TEwgQVBQTEUgQ09NUFVURVIsIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9S
IEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZ
LCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBP
RiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhP
V0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIg
SU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVH
TElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQor
ICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBP
RiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiUGx1
Z2luUGFja2FnZS5oIgorCisjaW5jbHVkZSAiTUlNRVR5cGVSZWdpc3RyeS5oIgorI2luY2x1ZGUg
Ik5vdEltcGxlbWVudGVkLmgiCisjaW5jbHVkZSAiUGx1Z2luRGF0YWJhc2UuaCIKKyNpbmNsdWRl
ICJQbHVnaW5EZWJ1Zy5oIgorI2luY2x1ZGUgIm5wcnVudGltZV9pbXBsLmgiCisKKyNpbmNsdWRl
IDxFaW5hLmg+CisjaW5jbHVkZSA8ZGxmY24uaD4KKyNpbmNsdWRlIDx3dGYvdGV4dC9DU3RyaW5n
Lmg+CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKwordHlwZWRlZiBjaGFyKiAoKk5QUF9HZXRNSU1F
RGVzY3JpcHRpb25Qcm9jUHRyKSgpOworCitib29sIFBsdWdpblBhY2thZ2U6OmZldGNoSW5mbygp
Cit7CisgICAgY29uc3QgY2hhciAqZXJybXNnOworCisgICAgaWYgKCFsb2FkKCkpCisgICAgICAg
IHJldHVybiBmYWxzZTsKKworICAgIE5QUF9HZXRWYWx1ZVByb2NQdHIgZ2V0VmFsdWUgPSAwOwor
ICAgIE5QUF9HZXRNSU1FRGVzY3JpcHRpb25Qcm9jUHRyIGdldE1JTUVEZXNjcmlwdGlvbiA9IDA7
CisKKyAgICBnZXRWYWx1ZSA9IHJlaW50ZXJwcmV0X2Nhc3Q8TlBQX0dldFZhbHVlUHJvY1B0cj4o
ZGxzeW0obV9tb2R1bGUsICJOUF9HZXRWYWx1ZSIpKTsKKyAgICBpZiAoKGVycm1zZyA9IGRsZXJy
b3IoKSkpIHsKKyAgICAgICAgRUlOQV9MT0dfRVJSKCJDb3VsZCBub3QgZ2V0IHN5bWJvbCBOUF9H
ZXRWYWx1ZTogJXMiLCBlcnJtc2cpOworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorCisg
ICAgZ2V0TUlNRURlc2NyaXB0aW9uID0gcmVpbnRlcnByZXRfY2FzdDxOUFBfR2V0TUlNRURlc2Ny
aXB0aW9uUHJvY1B0cj4oZGxzeW0obV9tb2R1bGUsICJOUF9HZXRNSU1FRGVzY3JpcHRpb24iKSk7
CisgICAgaWYgKChlcnJtc2cgPSBkbGVycm9yKCkpKSB7CisgICAgICAgIEVJTkFfTE9HX0VSUigi
Q291bGQgbm90IGdldCBzeW1ib2wgTlBfR2V0TUlNRURlc2NyaXB0aW9uOiAlcyIsIGVycm1zZyk7
CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisKKyAgICBjaGFyKiBidWZmZXIgPSAwOwor
ICAgIE5QRXJyb3IgZXJyID0gZ2V0VmFsdWUoMCwgTlBQVnBsdWdpbk5hbWVTdHJpbmcsIHN0YXRp
Y19jYXN0PHZvaWQqPigmYnVmZmVyKSk7CisgICAgaWYgKGVyciAhPSBOUEVSUl9OT19FUlJPUikK
KyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIG1fbmFtZSA9IGJ1ZmZlcjsKKworICAgIGJ1ZmZl
ciA9IDA7CisgICAgZXJyID0gZ2V0VmFsdWUoMCwgTlBQVnBsdWdpbkRlc2NyaXB0aW9uU3RyaW5n
LCBzdGF0aWNfY2FzdDx2b2lkKj4oJmJ1ZmZlcikpOworICAgIGlmIChlcnIgIT0gTlBFUlJfTk9f
RVJST1IpCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICBtX2Rlc2NyaXB0aW9uID0gYnVmZmVy
OworICAgIGRldGVybWluZU1vZHVsZVZlcnNpb25Gcm9tRGVzY3JpcHRpb24oKTsKKworICAgIFN0
cmluZyBkZXNjcmlwdGlvbiA9IGdldE1JTUVEZXNjcmlwdGlvbigpOworCisgICAgVmVjdG9yPFN0
cmluZz4gdHlwZXM7CisgICAgZGVzY3JpcHRpb24uc3BsaXQoVUNoYXIoJzsnKSwgZmFsc2UsIHR5
cGVzKTsKKworICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgdHlwZXMuc2l6ZSgpOyArK2kpIHsK
KyAgICAgICAgVmVjdG9yPFN0cmluZz4gbWltZTsKKyAgICAgICAgdHlwZXNbaV0uc3BsaXQoVUNo
YXIoJzonKSwgdHJ1ZSwgbWltZSk7CisKKyAgICAgICAgaWYgKCFtaW1lLmlzRW1wdHkoKSA+IDAp
IHsKKyAgICAgICAgICAgIFZlY3RvcjxTdHJpbmc+IGV4dHM7CisKKyAgICAgICAgICAgIGlmICht
aW1lLnNpemUoKSA+IDEpCisgICAgICAgICAgICAgICAgbWltZVsxXS5zcGxpdChVQ2hhcignLCcp
LCBmYWxzZSwgZXh0cyk7CisKKyAgICAgICAgICAgIGRldGVybWluZVF1aXJrcyhtaW1lWzBdKTsK
KyAgICAgICAgICAgIG1fbWltZVRvRXh0ZW5zaW9ucy5hZGQobWltZVswXSwgZXh0cyk7CisKKyAg
ICAgICAgICAgIGlmIChtaW1lLnNpemUoKSA+IDIpCisgICAgICAgICAgICAgICAgbV9taW1lVG9E
ZXNjcmlwdGlvbnMuYWRkKG1pbWVbMF0sIG1pbWVbMl0pOworICAgICAgICB9CisgICAgfQorCisg
ICAgcmV0dXJuIHRydWU7Cit9CisKK3VpbnQxNl90IFBsdWdpblBhY2thZ2U6Ok5QVmVyc2lvbigp
IGNvbnN0Cit7CisgICAgcmV0dXJuIE5QVkVSU19IQVNfUExVR0lOX1RIUkVBRF9BU1lOQ19DQUxM
OworfQorCitib29sIFBsdWdpblBhY2thZ2U6OmxvYWQoKQoreworICAgIGNoYXIqIGVycm1zZzsK
KworICAgIGlmIChtX2lzTG9hZGVkKSB7CisgICAgICAgIG1fbG9hZENvdW50Kys7CisgICAgICAg
IHJldHVybiB0cnVlOworICAgIH0KKworICAgIG1fbW9kdWxlID0gZGxvcGVuKG1fcGF0aC51dGY4
KCkuZGF0YSgpLCBSVExEX0xBWlkgfCBSVExEX0xPQ0FMKTsKKyAgICBpZiAoKGVycm1zZyA9IGRs
ZXJyb3IoKSkpIHsKKyAgICAgICAgRUlOQV9MT0dfV0FSTigiJXMgbm90IGxvYWRlZDogJXMiLCBt
X3BhdGgudXRmOCgpLmRhdGEoKSwgZXJybXNnKTsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAg
IH0KKworICAgIG1faXNMb2FkZWQgPSB0cnVlOworCisgICAgTlBfSW5pdGlhbGl6ZUZ1bmNQdHIg
aW5pdGlhbGl6ZTsKKyAgICBOUEVycm9yIGVycjsKKworICAgIGluaXRpYWxpemUgPSAoTlBfSW5p
dGlhbGl6ZUZ1bmNQdHIpZGxzeW0obV9tb2R1bGUsICJOUF9Jbml0aWFsaXplIik7CisgICAgaWYg
KChlcnJtc2cgPSBkbGVycm9yKCkpKSB7CisgICAgICAgIEVJTkFfTE9HX0VSUigiQ291bGQgbm90
IGdldCBzeW1ib2wgTlBfSW5pdGlhbGl6ZTogJXMiLCBlcnJtc2cpOworICAgICAgICBnb3RvIGFi
b3J0OworICAgIH0KKworICAgIG1fTlBQX1NodXRkb3duID0gKE5QUF9TaHV0ZG93blByb2NQdHIp
ZGxzeW0obV9tb2R1bGUsICJOUF9TaHV0ZG93biIpOworICAgIGlmICgoZXJybXNnID0gZGxlcnJv
cigpKSkgeworICAgICAgICBFSU5BX0xPR19FUlIoIkNvdWxkIG5vdCBnZXQgc3ltYm9sIE5QX1No
dXRkb3duOiAlcyIsIGVycm1zZyk7CisgICAgICAgIGdvdG8gYWJvcnQ7CisgICAgfQorCisgICAg
bWVtc2V0KCZtX3BsdWdpbkZ1bmNzLCAwLCBzaXplb2YobV9wbHVnaW5GdW5jcykpOworICAgIG1f
cGx1Z2luRnVuY3Muc2l6ZSA9IHNpemVvZihtX3BsdWdpbkZ1bmNzKTsKKworICAgIGluaXRpYWxp
emVCcm93c2VyRnVuY3MoKTsKKworI2lmIGRlZmluZWQoWFBfVU5JWCkKKyAgICBlcnIgPSBpbml0
aWFsaXplKCZtX2Jyb3dzZXJGdW5jcywgJm1fcGx1Z2luRnVuY3MpOworI2Vsc2UKKyAgICBlcnIg
PSBpbml0aWFsaXplKCZtX2Jyb3dzZXJGdW5jcyk7CisjZW5kaWYKKyAgICBpZiAoZXJyICE9IE5Q
RVJSX05PX0VSUk9SKQorICAgICAgICBnb3RvIGFib3J0OworCisgICAgbV9sb2FkQ291bnQrKzsK
KyAgICByZXR1cm4gdHJ1ZTsKKworYWJvcnQ6CisgICAgRUlOQV9MT0dfREJHKCJmYWlsZWQgdG8g
bG9hZCBwbHVnaW4sIHVubG9hZCBpdCB3aXRob3V0IHNodXR0aW5nIGl0IGRvd24uIik7CisgICAg
dW5sb2FkV2l0aG91dFNodXRkb3duKCk7CisgICAgcmV0dXJuIGZhbHNlOworfQorCit9CmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbHVnaW5zL2VmbC9QbHVnaW5WaWV3RWZsLmNwcCBiL1Nv
dXJjZS9XZWJDb3JlL3BsdWdpbnMvZWZsL1BsdWdpblZpZXdFZmwuY3BwCm5ldyBmaWxlIG1vZGUg
MTAwNjQ0CmluZGV4IDAwMDAwMDAuLmUwYTY3ZGQKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9wbHVnaW5zL2VmbC9QbHVnaW5WaWV3RWZsLmNwcApAQCAtMCwwICsxLDM4MSBAQAor
LyoKKyAqIENvcHlyaWdodCAoQykgMjAwNiwgMjAwNyBBcHBsZSBJbmMuICBBbGwgcmlnaHRzIHJl
c2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDA4IENvbGxhYm9yYSBMdGQuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDggSU5kVCAtIEluc3RpdHV0byBOb2tpYSBk
ZSBUZWNub2xvZ2lhCisgKiBDb3B5cmlnaHQgKEMpIDIwMDktMjAxMCBQcm9GVVNJT04gZW1iZWRk
ZWQgc3lzdGVtcworICogQ29weXJpZ2h0IChDKSAyMDA5LTIwMTEgU2Ftc3VuZyBFbGVjdHJvbmlj
cworICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9y
bXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3Zp
ZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVk
aXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0
IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBk
b2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlz
dHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQ09N
UFVURVIsIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJS
QU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdB
UlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIK
KyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBDT01Q
VVRFUiwgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwg
SU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVF
TlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJF
TUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwg
T1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQg
QU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwg
U1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9U
SEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNP
RlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdF
LgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJQbHVnaW5WaWV3LmgiCisK
KyNpbmNsdWRlICJGcmFtZVZpZXcuaCIKKyNpbmNsdWRlICJHcmFwaGljc0NvbnRleHQuaCIKKyNp
bmNsdWRlICJIVE1MTmFtZXMuaCIKKyNpbmNsdWRlICJIVE1MUGx1Z0luRWxlbWVudC5oIgorI2lu
Y2x1ZGUgIkhvc3RXaW5kb3cuaCIKKyNpbmNsdWRlICJNb3VzZUV2ZW50LmgiCisjaW5jbHVkZSAi
Tm90SW1wbGVtZW50ZWQuaCIKKyNpbmNsdWRlICJQbHVnaW5QYWNrYWdlLmgiCisjaW5jbHVkZSAi
bnBydW50aW1lX2ltcGwuaCIKKyNpbmNsdWRlICJydW50aW1lL0pTTG9jay5oIgorI2luY2x1ZGUg
PEVjb3JlX0V2YXMuaD4KKyNpbmNsdWRlIDxFY29yZV9YLmg+CisjaW5jbHVkZSA8RXZhcy5oPgor
CituYW1lc3BhY2UgV2ViQ29yZSB7CisKK3VzaW5nIG5hbWVzcGFjZSBIVE1MTmFtZXM7CisKKyNp
ZiBFTkFCTEUoTkVUU0NBUEVfUExVR0lOX0FQSSkKK2Jvb2wgUGx1Z2luVmlldzo6ZGlzcGF0Y2hO
UEV2ZW50KE5QRXZlbnQmIGV2ZW50KQoreworICAgIGlmICghbV9wbHVnaW4tPnBsdWdpbkZ1bmNz
KCktPmV2ZW50KQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBQbHVnaW5WaWV3OjpzZXRD
dXJyZW50UGx1Z2luVmlldyh0aGlzKTsKKyAgICBKU0M6OkpTTG9jazo6RHJvcEFsbExvY2tzIGRy
b3BBbGxMb2NrcyhmYWxzZSk7CisgICAgc2V0Q2FsbGluZ1BsdWdpbih0cnVlKTsKKworICAgIGJv
b2wgYWNjZXB0ZWQgPSBtX3BsdWdpbi0+cGx1Z2luRnVuY3MoKS0+ZXZlbnQobV9pbnN0YW5jZSwg
JmV2ZW50KTsKKworICAgIHNldENhbGxpbmdQbHVnaW4oZmFsc2UpOworICAgIFBsdWdpblZpZXc6
OnNldEN1cnJlbnRQbHVnaW5WaWV3KDApOworICAgIHJldHVybiBhY2NlcHRlZDsKK30KKyNlbmRp
ZgorCit2b2lkIFBsdWdpblZpZXc6OmhhbHQoKQoreworICAgIG5vdEltcGxlbWVudGVkKCk7Cit9
CisKKyNpZiBkZWZpbmVkKFhQX1VOSVgpICYmIEVOQUJMRShORVRTQ0FQRV9QTFVHSU5fQVBJKQor
dm9pZCBQbHVnaW5WaWV3OjpoYW5kbGVGb2N1c0luRXZlbnQoKQoreworICAgIG5vdEltcGxlbWVu
dGVkKCk7Cit9CisKK3ZvaWQgUGx1Z2luVmlldzo6aGFuZGxlRm9jdXNPdXRFdmVudCgpCit7Cisg
ICAgbm90SW1wbGVtZW50ZWQoKTsKK30KKyNlbmRpZgorCit2b2lkIFBsdWdpblZpZXc6OnJlc3Rh
cnQoKQoreworICAgIG5vdEltcGxlbWVudGVkKCk7Cit9CisKK3ZvaWQgUGx1Z2luVmlldzo6aGFu
ZGxlS2V5Ym9hcmRFdmVudChLZXlib2FyZEV2ZW50KikKK3sKKyAgICBub3RJbXBsZW1lbnRlZCgp
OworfQorCit2b2lkIFBsdWdpblZpZXc6OmhhbmRsZU1vdXNlRXZlbnQoTW91c2VFdmVudCogZXZl
bnQpCit7CisjaWYgRU5BQkxFKE5FVFNDQVBFX1BMVUdJTl9BUEkpCisgICAgTlBFdmVudCB4RXZl
bnQ7CisKKyAgICBJbnRSZWN0IHJlY3QgPSBzdGF0aWNfY2FzdDxGcmFtZVZpZXcqPihwYXJlbnQo
KSktPmNvbnRlbnRzVG9TY3JlZW4oSW50UmVjdCgwLCAwLCBldmVudC0+b2Zmc2V0WCgpLCBldmVu
dC0+b2Zmc2V0WSgpKSk7CisgICAgaW50IGV2ZW50WCA9IHJlY3Qud2lkdGgoKTsKKyAgICBpbnQg
ZXZlbnRZID0gcmVjdC5oZWlnaHQoKTsKKyAgICBpZiAoZXZlbnQtPnR5cGUoKSA9PSBldmVudE5h
bWVzKCkubW91c2Vtb3ZlRXZlbnQKKyAgICAgICAgICAgIHx8IGV2ZW50LT50eXBlKCkgPT0gZXZl
bnROYW1lcygpLm1vdXNlb3V0RXZlbnQKKyAgICAgICAgICAgIHx8IGV2ZW50LT50eXBlKCkgPT0g
ZXZlbnROYW1lcygpLm1vdXNlb3ZlckV2ZW50KSB7CisgICAgICAgIHhFdmVudC50eXBlID0gTW90
aW9uTm90aWZ5OworICAgICAgICB4RXZlbnQueG1vdGlvbi54ID0gZXZlbnRYOworICAgICAgICB4
RXZlbnQueG1vdGlvbi55ID0gZXZlbnRZOworICAgIH0gZWxzZSBpZiAoZXZlbnQtPnR5cGUoKSA9
PSBldmVudE5hbWVzKCkubW91c2Vkb3duRXZlbnQpIHsKKyAgICAgICAgeEV2ZW50LnR5cGUgPSBC
dXR0b25QcmVzczsKKyAgICAgICAgeEV2ZW50LnhidXR0b24ueCA9IGV2ZW50WDsKKyAgICAgICAg
eEV2ZW50LnhidXR0b24ueSA9IGV2ZW50WTsKKyAgICAgICAgeEV2ZW50LnhidXR0b24uYnV0dG9u
ID0gZXZlbnQtPmJ1dHRvbigpICsgMTsgLy8gRE9NIE1vdXNlRXZlbnQgY291bnRzIGZyb20gMCwg
YW5kIFhCdXR0b25FdmVudCBmcm9tIDEuCisgICAgfSBlbHNlIGlmIChldmVudC0+dHlwZSgpID09
IGV2ZW50TmFtZXMoKS5tb3VzZXVwRXZlbnQpIHsKKyAgICAgICAgeEV2ZW50LnR5cGUgPSBCdXR0
b25SZWxlYXNlOworICAgICAgICB4RXZlbnQueGJ1dHRvbi54ID0gZXZlbnRYOworICAgICAgICB4
RXZlbnQueGJ1dHRvbi55ID0gZXZlbnRZOworICAgICAgICB4RXZlbnQueGJ1dHRvbi5idXR0b24g
PSBldmVudC0+YnV0dG9uKCkgKyAxOworICAgIH0gZWxzZQorICAgICAgICByZXR1cm47CisKKyAg
ICBpZiAoZGlzcGF0Y2hOUEV2ZW50KHhFdmVudCkpCisgICAgICAgIGV2ZW50LT5zZXREZWZhdWx0
SGFuZGxlZCgpOworI2Vsc2UKKyAgICBub3RJbXBsZW1lbnRlZCgpOworI2VuZGlmCit9CisKK3Zv
aWQgUGx1Z2luVmlldzo6dXBkYXRlUGx1Z2luV2lkZ2V0KCkKK3sKKyAgICBpZiAoIXBhcmVudCgp
IHx8ICFtX2lzV2luZG93ZWQpCisgICAgICAgIHJldHVybjsKKworICAgIEFTU0VSVChwYXJlbnQo
KS0+aXNGcmFtZVZpZXcoKSk7CisgICAgRnJhbWVWaWV3KiBmcmFtZVZpZXcgPSBzdGF0aWNfY2Fz
dDxGcmFtZVZpZXcqPihwYXJlbnQoKSk7CisKKyAgICBJbnRSZWN0IG9sZFdpbmRvd1JlY3QgPSBt
X3dpbmRvd1JlY3Q7CisgICAgSW50UmVjdCBvbGRDbGlwUmVjdCA9IG1fY2xpcFJlY3Q7CisKKyAg
ICBtX3dpbmRvd1JlY3QgPSBmcmFtZVZpZXctPmNvbnRlbnRzVG9TY3JlZW4oZnJhbWVSZWN0KCkp
OworCisgICAgbV9jbGlwUmVjdCA9IHdpbmRvd0NsaXBSZWN0KCk7CisgICAgbV9jbGlwUmVjdC5t
b3ZlKC1tX3dpbmRvd1JlY3QueCgpLCAtbV93aW5kb3dSZWN0LnkoKSk7Cit9CisKK3ZvaWQgUGx1
Z2luVmlldzo6c2V0Rm9jdXMoYm9vbCBmb2N1c2VkKQoreworICAgIGlmIChmb2N1c2VkKQorICAg
ICAgICBtX2VsZW1lbnQtPmRvY3VtZW50KCktPnNldEZvY3VzZWROb2RlKG1fZWxlbWVudCk7CisK
KyAgICBXaWRnZXQ6OnNldEZvY3VzKGZvY3VzZWQpOworfQorCit2b2lkIFBsdWdpblZpZXc6OnNo
b3coKQoreworICAgIHNldFNlbGZWaXNpYmxlKHRydWUpOworCisgICAgV2lkZ2V0OjpzaG93KCk7
Cit9CisKK3ZvaWQgUGx1Z2luVmlldzo6aGlkZSgpCit7CisgICAgc2V0U2VsZlZpc2libGUoZmFs
c2UpOworCisgICAgV2lkZ2V0OjpoaWRlKCk7Cit9CisKK3ZvaWQgUGx1Z2luVmlldzo6cGFpbnQo
R3JhcGhpY3NDb250ZXh0KiBjb250ZXh0LCBjb25zdCBJbnRSZWN0JiByZWN0KQoreworICAgIGlm
ICghbV9pc1N0YXJ0ZWQpIHsKKyAgICAgICAgcGFpbnRNaXNzaW5nUGx1Z2luSWNvbihjb250ZXh0
LCByZWN0KTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KK30KKwordm9pZCBQbHVnaW5WaWV3Ojpz
ZXRQYXJlbnQoU2Nyb2xsVmlldyogcGFyZW50KQoreworICAgIFdpZGdldDo6c2V0UGFyZW50KHBh
cmVudCk7CisKKyAgICBpZiAocGFyZW50KQorICAgICAgICBpbml0KCk7Cit9CisKK3ZvaWQgUGx1
Z2luVmlldzo6c2V0TlBXaW5kb3dSZWN0KGNvbnN0IEludFJlY3QmIHJlY3QpCit7CisgICAgbm90
SW1wbGVtZW50ZWQoKTsKKyAgICByZXR1cm47Cit9CisKK3ZvaWQgUGx1Z2luVmlldzo6c2V0TlBX
aW5kb3dJZk5lZWRlZCgpCit7Cit9CisKK3ZvaWQgUGx1Z2luVmlldzo6c2V0UGFyZW50VmlzaWJs
ZShib29sIHZpc2libGUpCit7CisgICAgaWYgKGlzUGFyZW50VmlzaWJsZSgpID09IHZpc2libGUp
CisgICAgICAgIHJldHVybjsKKworICAgIFdpZGdldDo6c2V0UGFyZW50VmlzaWJsZSh2aXNpYmxl
KTsKK30KKworI2lmIEVOQUJMRShORVRTQ0FQRV9QTFVHSU5fQVBJKQorTlBFcnJvciBQbHVnaW5W
aWV3OjpoYW5kbGVQb3N0UmVhZEZpbGUoVmVjdG9yPGNoYXI+JiBidWZmZXIsIHVpbnQzMl90IGxl
biwgY29uc3QgY2hhciogYnVmKQoreworICAgIFN0cmluZyBmaWxlbmFtZShidWYsIGxlbik7CisK
KyAgICBpZiAoZmlsZW5hbWUuc3RhcnRzV2l0aCgiZmlsZTovLy8iKSkKKyAgICAgICAgZmlsZW5h
bWUgPSBmaWxlbmFtZS5zdWJzdHJpbmcoOCk7CisKKyAgICBpZiAoIWZpbGVFeGlzdHMoZmlsZW5h
bWUpKQorICAgICAgICByZXR1cm4gTlBFUlJfRklMRV9OT1RfRk9VTkQ7CisKKyAgICBGSUxFKiBm
aWxlSGFuZGxlID0gZm9wZW4oZmlsZW5hbWUudXRmOCgpLmRhdGEoKSwgInIiKTsKKworICAgIGlm
ICghZmlsZUhhbmRsZSkKKyAgICAgICAgcmV0dXJuIE5QRVJSX0ZJTEVfTk9UX0ZPVU5EOworCisg
ICAgaW50IGJ5dGVzUmVhZCA9IGZyZWFkKGJ1ZmZlci5kYXRhKCksIDEsIDAsIGZpbGVIYW5kbGUp
OworCisgICAgZmNsb3NlKGZpbGVIYW5kbGUpOworCisgICAgaWYgKGJ5dGVzUmVhZCA8PSAwKQor
ICAgICAgICByZXR1cm4gTlBFUlJfRklMRV9OT1RfRk9VTkQ7CisKKyAgICByZXR1cm4gTlBFUlJf
Tk9fRVJST1I7Cit9CisjZW5kaWYKKworI2lmIEVOQUJMRShORVRTQ0FQRV9QTFVHSU5fQVBJKQor
Ym9vbCBQbHVnaW5WaWV3OjpwbGF0Zm9ybUdldFZhbHVlU3RhdGljKE5QTlZhcmlhYmxlIHZhcmlh
YmxlLCB2b2lkKiB2YWx1ZSwgTlBFcnJvciogcmVzdWx0KQoreworICAgIHN3aXRjaCAodmFyaWFi
bGUpIHsKKyAgICBjYXNlIE5QTlZUb29sa2l0OgorICAgICAgICAqc3RhdGljX2Nhc3Q8dWludDMy
X3QqPih2YWx1ZSkgPSAwOworICAgICAgICAqcmVzdWx0ID0gTlBFUlJfTk9fRVJST1I7CisgICAg
ICAgIHJldHVybiB0cnVlOworCisgICAgY2FzZSBOUE5WU3VwcG9ydHNYRW1iZWRCb29sOgorICAg
ICAgICAqc3RhdGljX2Nhc3Q8TlBCb29sKj4odmFsdWUpID0gZmFsc2U7CisgICAgICAgICpyZXN1
bHQgPSBOUEVSUl9OT19FUlJPUjsKKyAgICAgICAgcmV0dXJuIHRydWU7CisKKyAgICBjYXNlIE5Q
TlZqYXZhc2NyaXB0RW5hYmxlZEJvb2w6CisgICAgICAgICpzdGF0aWNfY2FzdDxOUEJvb2wqPih2
YWx1ZSkgPSB0cnVlOworICAgICAgICAqcmVzdWx0ID0gTlBFUlJfTk9fRVJST1I7CisgICAgICAg
IHJldHVybiB0cnVlOworCisgICAgY2FzZSBOUE5WU3VwcG9ydHNXaW5kb3dsZXNzOgorICAgICAg
ICAqc3RhdGljX2Nhc3Q8TlBCb29sKj4odmFsdWUpID0gZmFsc2U7CisgICAgICAgICpyZXN1bHQg
PSBOUEVSUl9OT19FUlJPUjsKKyAgICAgICAgcmV0dXJuIHRydWU7CisKKyAgICBkZWZhdWx0Ogor
ICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorfQorCitib29sIFBsdWdpblZpZXc6OnBsYXRm
b3JtR2V0VmFsdWUoTlBOVmFyaWFibGUgdmFyaWFibGUsIHZvaWQqIHZhbHVlLCBOUEVycm9yKiBy
ZXN1bHQpCit7CisgICAgaWYgKCF2YWx1ZSB8fCAhcmVzdWx0KQorICAgICAgICByZXR1cm4gZmFs
c2U7CisKKyAgICBzd2l0Y2ggKHZhcmlhYmxlKSB7CisgICAgY2FzZSBOUE5WeERpc3BsYXk6Cisg
ICAgICAgICpzdGF0aWNfY2FzdDx2b2lkICoqPih2YWx1ZSkgPSBzdGF0aWNfY2FzdDxEaXNwbGF5
Kj4oZWNvcmVfeF9kaXNwbGF5X2dldCgpKTsKKyAgICAgICAgKnJlc3VsdCA9IE5QRVJSX05PX0VS
Uk9SOworICAgICAgICByZXR1cm4gdHJ1ZTsKKworICAgIGNhc2UgTlBOVnh0QXBwQ29udGV4dDoK
KyAgICAgICAgKnJlc3VsdCA9IE5QRVJSX0dFTkVSSUNfRVJST1I7CisgICAgICAgIHJldHVybiB0
cnVlOworCisgICAgY2FzZSBOUE5WV2luZG93TlBPYmplY3Q6IHsKKyAgICAgICAgaWYgKG1faXNK
YXZhU2NyaXB0UGF1c2VkKSB7CisgICAgICAgICAgICAqcmVzdWx0ID0gTlBFUlJfR0VORVJJQ19F
UlJPUjsKKyAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICB9CisKKyAgICAgICAgTlBP
YmplY3QqIHdpbmRvd1NjcmlwdE9iamVjdCA9IG1fcGFyZW50RnJhbWUtPnNjcmlwdCgpLT53aW5k
b3dTY3JpcHROUE9iamVjdCgpOworCisgICAgICAgIC8vIFJldHVybiB2YWx1ZSBpcyBleHBlY3Rl
ZCB0byBiZSByZXRhaW5lZCwgYXMgZGVzY3JpYmVkIGhlcmU6IDxodHRwOi8vd3d3Lm1vemlsbGEu
b3JnL3Byb2plY3RzL3BsdWdpbi9ucHJ1bnRpbWUuaHRtbD4KKyAgICAgICAgaWYgKHdpbmRvd1Nj
cmlwdE9iamVjdCkKKyAgICAgICAgICAgIF9OUE5fUmV0YWluT2JqZWN0KHdpbmRvd1NjcmlwdE9i
amVjdCk7CisKKyAgICAgICAgdm9pZCoqIHYgPSAodm9pZCoqKXZhbHVlOworICAgICAgICAqdiA9
IHdpbmRvd1NjcmlwdE9iamVjdDsKKworICAgICAgICAqcmVzdWx0ID0gTlBFUlJfTk9fRVJST1I7
CisgICAgICAgIHJldHVybiB0cnVlOworICAgIH0KKworICAgIGNhc2UgTlBOVlBsdWdpbkVsZW1l
bnROUE9iamVjdDogeworICAgICAgICBpZiAobV9pc0phdmFTY3JpcHRQYXVzZWQpIHsKKyAgICAg
ICAgICAgICpyZXN1bHQgPSBOUEVSUl9HRU5FUklDX0VSUk9SOworICAgICAgICAgICAgcmV0dXJu
IHRydWU7CisgICAgICAgIH0KKworICAgICAgICBOUE9iamVjdCogcGx1Z2luU2NyaXB0T2JqZWN0
ID0gMDsKKworICAgICAgICBpZiAobV9lbGVtZW50LT5oYXNUYWdOYW1lKGFwcGxldFRhZykgfHwg
bV9lbGVtZW50LT5oYXNUYWdOYW1lKGVtYmVkVGFnKSB8fCBtX2VsZW1lbnQtPmhhc1RhZ05hbWUo
b2JqZWN0VGFnKSkKKyAgICAgICAgICAgIHBsdWdpblNjcmlwdE9iamVjdCA9IHN0YXRpY19jYXN0
PEhUTUxQbHVnSW5FbGVtZW50Kj4obV9lbGVtZW50KS0+Z2V0TlBPYmplY3QoKTsKKworICAgICAg
ICAvLyBSZXR1cm4gdmFsdWUgaXMgZXhwZWN0ZWQgdG8gYmUgcmV0YWluZWQsIGFzIGRlc2NyaWJl
ZCBoZXJlOiA8aHR0cDovL3d3dy5tb3ppbGxhLm9yZy9wcm9qZWN0cy9wbHVnaW4vbnBydW50aW1l
Lmh0bWw+CisgICAgICAgIGlmIChwbHVnaW5TY3JpcHRPYmplY3QpCisgICAgICAgICAgICBfTlBO
X1JldGFpbk9iamVjdChwbHVnaW5TY3JpcHRPYmplY3QpOworCisgICAgICAgIHZvaWQqKiB2ID0g
KHZvaWQqKil2YWx1ZTsKKyAgICAgICAgKnYgPSBwbHVnaW5TY3JpcHRPYmplY3Q7CisKKyAgICAg
ICAgKnJlc3VsdCA9IE5QRVJSX05PX0VSUk9SOworICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9
CisKKyAgICBjYXNlIE5QTlZuZXRzY2FwZVdpbmRvdzogeworICAgICAgICB2b2lkKiB3ID0gcmVp
bnRlcnByZXRfY2FzdDx2b2lkKj4odmFsdWUpOworICAgICAgICBFdmFzX09iamVjdCogd2lkZ2V0
ID0gbV9wYXJlbnRGcmFtZS0+dmlldygpLT5ob3N0V2luZG93KCktPnBsYXRmb3JtUGFnZUNsaWVu
dCgpOworICAgICAgICBFdmFzKiBldmFzID0gZXZhc19vYmplY3RfZXZhc19nZXQod2lkZ2V0KTsK
KyAgICAgICAgRWNvcmVfRXZhcyogZWUgPSBlY29yZV9ldmFzX2Vjb3JlX2V2YXNfZ2V0KGV2YXMp
OworICAgICAgICAqKChYSUQgKil3KSA9IChXaW5kb3cpIGVjb3JlX2V2YXNfd2luZG93X2dldChl
ZSk7CisgICAgICAgICpyZXN1bHQgPSBOUEVSUl9OT19FUlJPUjsKKyAgICAgICAgcmV0dXJuIHRy
dWU7CisgICAgfQorCisgICAgY2FzZSBOUE5WVG9vbGtpdDoKKyAgICAgICAgaWYgKG1fcGx1Z2lu
LT5xdWlya3MoKS5jb250YWlucyhQbHVnaW5RdWlya1JlcXVpcmVzR3RrVG9vbEtpdCkpIHsKKyAg
ICAgICAgICAgICooKHVpbnQzMl90ICopdmFsdWUpID0gMjsKKyAgICAgICAgICAgICpyZXN1bHQg
PSBOUEVSUl9OT19FUlJPUjsKKyAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICB9Cisg
ICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgLy8gZmFsbCB0aHJvdWdoCisgICAgZGVmYXVs
dDoKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KK30KKyNlbmRpZgorCit2b2lkIFBsdWdp
blZpZXc6OmludmFsaWRhdGVSZWN0KGNvbnN0IEludFJlY3QmIHJlY3QpCit7CisgICAgaW52YWxp
ZGF0ZVdpbmRvd2xlc3NQbHVnaW5SZWN0KHJlY3QpOworfQorCisjaWYgRU5BQkxFKE5FVFNDQVBF
X1BMVUdJTl9BUEkpCit2b2lkIFBsdWdpblZpZXc6OmludmFsaWRhdGVSZWN0KE5QUmVjdCogcmVj
dCkKK3sKKyAgICBpZiAoIXJlY3QpIHsKKyAgICAgICAgaW52YWxpZGF0ZSgpOworICAgICAgICBy
ZXR1cm47CisgICAgfQorCisgICAgSW50UmVjdCByKHJlY3QtPmxlZnQsIHJlY3QtPnRvcCwgcmVj
dC0+cmlnaHQgLSByZWN0LT5sZWZ0LCByZWN0LT5ib3R0b20gLSByZWN0LT50b3ApOworCisgICAg
aW52YWxpZGF0ZVJlY3Qocik7Cit9CisKK3ZvaWQgUGx1Z2luVmlldzo6aW52YWxpZGF0ZVJlZ2lv
bihOUFJlZ2lvbiByZWdpb24pCit7CisgICAgbm90SW1wbGVtZW50ZWQoKTsKK30KKyNlbmRpZgor
Cit2b2lkIFBsdWdpblZpZXc6OmZvcmNlUmVkcmF3KCkKK3sKKyAgICBub3RJbXBsZW1lbnRlZCgp
OworfQorCitib29sIFBsdWdpblZpZXc6OnBsYXRmb3JtU3RhcnQoKQoreworICAgIEFTU0VSVCht
X2lzU3RhcnRlZCk7CisgICAgQVNTRVJUKG1fc3RhdHVzID09IFBsdWdpblN0YXR1c0xvYWRlZFN1
Y2Nlc3NmdWxseSk7CisKKyAgICBub3RJbXBsZW1lbnRlZCgpOworICAgIHJldHVybiB0cnVlOwor
fQorCit2b2lkIFBsdWdpblZpZXc6OnBsYXRmb3JtRGVzdHJveSgpCit7Cit9CisKK30gLy8gbmFt
ZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvZWZsL0NoYW5nZUxvZyBi
L1NvdXJjZS9XZWJLaXQvZWZsL0NoYW5nZUxvZwppbmRleCBiMDVkNDcwLi5mZTFjZWZkIDEwMDc1
NQotLS0gYS9Tb3VyY2UvV2ViS2l0L2VmbC9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYktpdC9l
ZmwvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTUgQEAKKzIwMTEtMDgtMjQgIE1hcml1c3ogR3J6ZWdv
cmN6eWsgIDxtYXJpdXN6LmdAc2Ftc3VuZy5jb20+CisKKyAgICAgICAgQnVnIDQ0NTA1IC0gW0VG
TF0gTWlzc2luZyBwbHVnaW5zIHN1cHBvcnQgZm9yIGVmbCBwb3J0CisgICAgICAgIGh0dHBzOi8v
YnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD00NDUwNQorCisgICAgICAgIFJldmlld2Vk
IGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIEltcGxlbWVudGF0aW9uIG9mIGV3a19mcmFt
ZV9wbHVnaW5fY3JlYXRlKCkgLSBjcmVhdGluZyBQbHVnaW5WaWV3CisKKyAgICAgICAgKiBld2sv
ZXdrX2ZyYW1lLmNwcDoKKyAgICAgICAgKGV3a19mcmFtZV9wbHVnaW5fY3JlYXRlKToKKwogMjAx
MS0wOC0yNCAgSmFlaHVuIExpbSAgPGxqYWVodW4ubGltQHNhbXN1bmcuY29tPgogCiAgICAgICAg
IFtFRkxdIEFkZCBkdW1teSBJY29uRGF0YWJhc2VDbGllbnRFZmwuCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViS2l0L2VmbC9ld2svZXdrX2ZyYW1lLmNwcCBiL1NvdXJjZS9XZWJLaXQvZWZsL2V3ay9l
d2tfZnJhbWUuY3BwCmluZGV4IDkxZjIyMzcuLjY2ODVlZTkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJLaXQvZWZsL2V3ay9ld2tfZnJhbWUuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvZWZsL2V3ay9l
d2tfZnJhbWUuY3BwCkBAIC0xNjI1LDYgKzE2MjUsMjQgQEAgdm9pZCBld2tfZnJhbWVfZm9yY2Vf
bGF5b3V0KEV2YXNfT2JqZWN0ICpvKQogICovCiBXVEY6OlBhc3NSZWZQdHI8V2ViQ29yZTo6V2lk
Z2V0PiBld2tfZnJhbWVfcGx1Z2luX2NyZWF0ZShFdmFzX09iamVjdCAqbywgY29uc3QgV2ViQ29y
ZTo6SW50U2l6ZSAmcGx1Z2luU2l6ZSwgV2ViQ29yZTo6SFRNTFBsdWdJbkVsZW1lbnQgKmVsZW1l
bnQsIGNvbnN0IFdlYkNvcmU6OktVUkwgJnVybCwgY29uc3QgV1RGOjpWZWN0b3I8V1RGOjpTdHJp
bmc+ICZwYXJhbU5hbWVzLCBjb25zdCBXVEY6OlZlY3RvcjxXVEY6OlN0cmluZz4gJnBhcmFtVmFs
dWVzLCBjb25zdCBXVEY6OlN0cmluZyAmbWltZVR5cGUsIGJvb2wgbG9hZE1hbnVhbGx5KQogewor
I2lmIEVOQUJMRShORVRTQ0FQRV9QTFVHSU5fQVBJKQorICAgIERCRygibz0lcCwgc2l6ZT0lZHgl
ZCwgZWxlbWVudD0lcCwgdXJsPSVzLCBtaW1lVHlwZT0lcyIsCisgICAgICAgIG8sIHBsdWdpblNp
emUud2lkdGgoKSwgcGx1Z2luU2l6ZS5oZWlnaHQoKSwgZWxlbWVudCwKKyAgICAgICAgdXJsLnBy
ZXR0eVVSTCgpLnV0ZjgoKS5kYXRhKCksIG1pbWVUeXBlLnV0ZjgoKS5kYXRhKCkpOworCisgICAg
RVdLX0ZSQU1FX1NEX0dFVF9PUl9SRVRVUk4obywgc2QsIDApOworCisgICAgLy8gVE9ETzogZW1p
dCBzaWduYWwgYW5kIGFzayB3ZWJraXQgdXNlcnMgaWYgc29tZXRoaW5nIGVsc2Ugc2hvdWxkIGJl
IGRvbmUuCisgICAgLy8gbGlrZSBjcmVhdGluZyBhbm90aGVyIHggd2luZG93IChzZWUgZ3RrLCBp
dCBhbGxvd3MgdXNlcnMgdG8gY3JlYXRlCisgICAgLy8gR3RrUGx1Z2luV2lkZ2V0LgorCisgICAg
V1RGOjpSZWZQdHI8V2ViQ29yZTo6UGx1Z2luVmlldz4gcGx1Z2luVmlldyA9IFdlYkNvcmU6OlBs
dWdpblZpZXc6OmNyZWF0ZQorICAgICAgICAoc2QtPmZyYW1lLCBwbHVnaW5TaXplLCBlbGVtZW50
LCB1cmwsIHBhcmFtTmFtZXMsIHBhcmFtVmFsdWVzLAorICAgICAgICBtaW1lVHlwZSwgbG9hZE1h
bnVhbGx5KTsKKworICAgIGlmIChwbHVnaW5WaWV3LT5zdGF0dXMoKSA9PSBXZWJDb3JlOjpQbHVn
aW5TdGF0dXNMb2FkZWRTdWNjZXNzZnVsbHkpCisgICAgICAgIHJldHVybiBwbHVnaW5WaWV3Owor
I2VuZGlmIC8vICNpZiBFTkFCTEUoTkVUU0NBUEVfUExVR0lOX0FQSSkKICAgICByZXR1cm4gMDsK
IH0KIAo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>105367</attachid>
            <date>2011-08-26 10:01:30 -0700</date>
            <delta_ts>2011-09-16 09:35:00 -0700</delta_ts>
            <desc>EFL&apos;s plugin support</desc>
            <filename>efl_plugins.patch</filename>
            <type>text/plain</type>
            <size>27087</size>
            <attacher name="Mariusz Grzegorczyk">mariusz.g</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cgYi9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvQ2hhbmdlTG9nCmluZGV4IDk0ZTE1NmIuLjFiMTMwODkgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKKysrIGIvU291cmNlL0phdmFTY3JpcHRD
b3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDE0IEBACisyMDExLTA4LTI2ICBNYXJpdXN6IEdyemVn
b3JjenlrICA8bWFyaXVzei5nQHNhbXN1bmcuY29tPgorCisgICAgICAgIEJ1ZyA0NDUwNSAtIFtF
RkxdIE1pc3NpbmcgcGx1Z2lucyBzdXBwb3J0IGZvciBlZmwgcG9ydAorICAgICAgICBodHRwczov
L2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NDQ1MDUKKworICAgICAgICBSZXZpZXdl
ZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBBZGQgZGVmaW5lIG9mIEVOQUJMRV9QTFVH
SU5fUEFDS0FHRV9TSU1QTEVfSEFTSCBmb3IgZWZsIHBvcnQuCisKKyAgICAgICAgKiB3dGYvUGxh
dGZvcm0uaDoKKwogMjAxMS0wOC0yNSAgTWFyayBIYWhuZW5iZXJnICA8bWhhaG5lbmJlcmdAYXBw
bGUuY29tPgogCiAgICAgICAgIEZpeGluZyBicm9rZW4gYnVpbGQgZHVlIHRvIHVudXNlZCB2YXJp
YWJsZXMgaW4gcmVsZWFzZSBtb2RlCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
d3RmL1BsYXRmb3JtLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd3RmL1BsYXRmb3JtLmgKaW5k
ZXggZmEwNzRkOC4uYWE1YTkzMCAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3d0
Zi9QbGF0Zm9ybS5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93dGYvUGxhdGZvcm0uaApA
QCAtMTA5Myw3ICsxMDkzLDcgQEAKICNkZWZpbmUgV1RGX1VTRV9QUk9URUNUSU9OX1NQQUNFX0FV
VEhfQ0FMTEJBQ0sgMQogI2VuZGlmCiAKLSNpZiAhRU5BQkxFKE5FVFNDQVBFX1BMVUdJTl9BUEkp
IHx8IChFTkFCTEUoTkVUU0NBUEVfUExVR0lOX0FQSSkgJiYgKChPUyhVTklYKSAmJiAoUExBVEZP
Uk0oUVQpIHx8IFBMQVRGT1JNKFdYKSkpIHx8IFBMQVRGT1JNKEdUSykpKQorI2lmICFFTkFCTEUo
TkVUU0NBUEVfUExVR0lOX0FQSSkgfHwgKEVOQUJMRShORVRTQ0FQRV9QTFVHSU5fQVBJKSAmJiAo
KE9TKFVOSVgpICYmIChQTEFURk9STShRVCkgfHwgUExBVEZPUk0oV1gpKSkgfHwgUExBVEZPUk0o
R1RLKSB8fCBQTEFURk9STShFRkwpKSkKICNkZWZpbmUgRU5BQkxFX1BMVUdJTl9QQUNLQUdFX1NJ
TVBMRV9IQVNIIDEKICNlbmRpZgogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9DTWFrZUxp
c3RzRWZsLnR4dCBiL1NvdXJjZS9XZWJDb3JlL0NNYWtlTGlzdHNFZmwudHh0CmluZGV4IGZlZWVh
NmQuLjMzODk1ZDkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL0NNYWtlTGlzdHNFZmwudHh0
CisrKyBiL1NvdXJjZS9XZWJDb3JlL0NNYWtlTGlzdHNFZmwudHh0CkBAIC00LDE1ICs0LDE2IEBA
IExJU1QoQVBQRU5EIFdlYkNvcmVfTElOS19GTEFHUwogKQogCiBMSVNUKEFQUEVORCBXZWJDb3Jl
X0lOQ0xVREVfRElSRUNUT1JJRVMKKyAgIiR7REVSSVZFRF9TT1VSQ0VTX0RJUn0iCiAgICIke0pB
VkFTQ1JJUFRDT1JFX0RJUn0vd3RmL2dvYmplY3QiCisgICIke1dFQkNPUkVfRElSfS9hY2Nlc3Np
YmlsaXR5L2VmbCIKKyAgIiR7V0VCQ09SRV9ESVJ9L3BhZ2UvZWZsIgogICAiJHtXRUJDT1JFX0RJ
Un0vcGxhdGZvcm0vZWZsIgotICAiJHtXRUJDT1JFX0RJUn0vcGxhdGZvcm0vdGV4dC9lZmwiCiAg
ICIke1dFQkNPUkVfRElSfS9wbGF0Zm9ybS9ncmFwaGljcy9lZmwiCi0gICIke1dFQkNPUkVfRElS
fS9wYWdlL2VmbCIKLSAgIiR7V0VCQ09SRV9ESVJ9L2FjY2Vzc2liaWxpdHkvZWZsIgorICAiJHtX
RUJDT1JFX0RJUn0vcGxhdGZvcm0vdGV4dC9lZmwiCisgICIke1dFQkNPUkVfRElSfS9wbHVnaW5z
L2VmbCIKICAgIiR7V0VCS0lUX0RJUn0vZWZsL1dlYkNvcmVTdXBwb3J0IgogICAiJHtXRUJLSVRf
RElSfS9lZmwvZXdrIgotICAiJHtERVJJVkVEX1NPVVJDRVNfRElSfSIKICkKIAogTElTVChBUFBF
TkQgV2ViQ29yZV9TT1VSQ0VTCkBAIC03MiwxMSArNzMsMjggQEAgTElTVChBUFBFTkQgV2ViQ29y
ZV9TT1VSQ0VTCiAgIHBsYXRmb3JtL2ltYWdlLWRlY29kZXJzL3dlYnAvV0VCUEltYWdlRGVjb2Rl
ci5jcHAKICAgcGxhdGZvcm0vcG9zaXgvRmlsZVN5c3RlbVBPU0lYLmNwcAogICBwbGF0Zm9ybS90
ZXh0L2VmbC9UZXh0QnJlYWtJdGVyYXRvckludGVybmFsSUNVRWZsLmNwcAotICBwbHVnaW5zL1Bs
dWdpbkRhdGFOb25lLmNwcAotICBwbHVnaW5zL1BsdWdpblBhY2thZ2VOb25lLmNwcAotICBwbHVn
aW5zL1BsdWdpblZpZXdOb25lLmNwcAogKQogCitJRiAoRU5BQkxFX05FVFNDQVBFX1BMVUdJTl9B
UEkpCisgIExJU1QoQVBQRU5EIFdlYkNvcmVfU09VUkNFUworICAgIHBsdWdpbnMvUGx1Z2luRGF0
YWJhc2UuY3BwCisgICAgcGx1Z2lucy9QbHVnaW5EZWJ1Zy5jcHAKKyAgICBwbHVnaW5zL1BsdWdp
blBhY2thZ2UuY3BwCisgICAgcGx1Z2lucy9QbHVnaW5TdHJlYW0uY3BwCisgICAgcGx1Z2lucy9Q
bHVnaW5WaWV3LmNwcAorCisgICAgcGx1Z2lucy9lZmwvUGx1Z2luRGF0YUVmbC5jcHAKKyAgICBw
bHVnaW5zL2VmbC9QbHVnaW5QYWNrYWdlRWZsLmNwcAorICAgIHBsdWdpbnMvZWZsL1BsdWdpblZp
ZXdFZmwuY3BwCisgICkKK0VMU0UgKCkKKyAgTElTVChBUFBFTkQgV2ViQ29yZV9TT1VSQ0VTCisg
ICAgcGx1Z2lucy9QbHVnaW5EYXRhTm9uZS5jcHAKKyAgICBwbHVnaW5zL1BsdWdpblBhY2thZ2VO
b25lLmNwcAorICAgIHBsdWdpbnMvUGx1Z2luVmlld05vbmUuY3BwCisgICkKK0VORElGICgpCisK
IExJU1QoQVBQRU5EIFdlYkNvcmVfVVNFUl9BR0VOVF9TVFlMRV9TSEVFVFMKICAgICAke1dFQkNP
UkVfRElSfS9jc3MvbWVkaWFDb250cm9sc0VmbC5jc3MKICkKQEAgLTE0NCw2ICsxNjIsNyBAQCBJ
RiAoV1RGX1VTRV9TT1VQKQogICBMSVNUKEFQUEVORCBXZWJDb3JlX1NPVVJDRVMKICAgICBwbGF0
Zm9ybS9uZXR3b3JrL3NvdXAvQ29va2llSmFyU291cC5jcHAKICAgICBwbGF0Zm9ybS9uZXR3b3Jr
L3NvdXAvR093blB0clNvdXAuY3BwCisgICAgcGxhdGZvcm0vbmV0d29yay9zb3VwL1Byb3h5U2Vy
dmVyU291cC5jcHAKICAgICBwbGF0Zm9ybS9uZXR3b3JrL3NvdXAvUmVzb3VyY2VIYW5kbGVTb3Vw
LmNwcAogICAgIHBsYXRmb3JtL25ldHdvcmsvc291cC9SZXNvdXJjZVJlcXVlc3RTb3VwLmNwcAog
ICAgIHBsYXRmb3JtL25ldHdvcmsvc291cC9SZXNvdXJjZVJlc3BvbnNlU291cC5jcHAKQEAgLTE2
MCw2ICsxNzksNyBAQCBJRiAoV1RGX1VTRV9DVVJMKQogICAgIHBsYXRmb3JtL25ldHdvcmsvY3Vy
bC9Db29raWVKYXJDdXJsLmNwcAogICAgIHBsYXRmb3JtL25ldHdvcmsvY3VybC9ETlNDdXJsLmNw
cAogICAgIHBsYXRmb3JtL25ldHdvcmsvY3VybC9Gb3JtRGF0YVN0cmVhbUN1cmwuY3BwCisgICAg
cGxhdGZvcm0vbmV0d29yay9jdXJsL1Byb3h5U2VydmVyQ3VybC5jcHAKICAgICBwbGF0Zm9ybS9u
ZXR3b3JrL2N1cmwvUmVzb3VyY2VIYW5kbGVDdXJsLmNwcAogICAgIHBsYXRmb3JtL25ldHdvcmsv
Y3VybC9SZXNvdXJjZUhhbmRsZU1hbmFnZXIuY3BwCiAgICAgcGxhdGZvcm0vbmV0d29yay9jdXJs
L1NvY2tldFN0cmVhbUhhbmRsZUN1cmwuY3BwCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggYmU3ZWJkZC4uN2YwYzYw
NCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XZWJD
b3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDQ5IEBACisyMDExLTA4LTI2ICBNYXJpdXN6IEdyemVn
b3JjenlrICA8bWFyaXVzei5nQHNhbXN1bmcuY29tPgorCisgICAgICAgIEJ1ZyA0NDUwNSAtIFtF
RkxdIE1pc3NpbmcgcGx1Z2lucyBzdXBwb3J0IGZvciBlZmwgcG9ydAorICAgICAgICBodHRwczov
L2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NDQ1MDUKKworICAgICAgICBSZXZpZXdl
ZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBCYXNpYyBmdW5jdGlvbmFsaXR5IG9mIHBs
dWdpbnMgZm9yIGVmbCBwb3J0LgorCisgICAgICAgIFRlbXBsYXRlIHZlcnNpb24sIHNvIG5vIG5l
dyB0ZXN0cyBhcmUgbmVlZGVkLgorCisgICAgICAgICogQ01ha2VMaXN0c0VmbC50eHQ6CisgICAg
ICAgICogcGx1Z2lucy9QbHVnaW5WaWV3Lmg6CisgICAgICAgICogcGx1Z2lucy9lZmwvUGx1Z2lu
RGF0YUVmbC5jcHA6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6UGx1Z2luRGF0YTo6aW5pdFBs
dWdpbnMpOgorICAgICAgICAoV2ViQ29yZTo6UGx1Z2luRGF0YTo6cmVmcmVzaCk6CisgICAgICAg
ICogcGx1Z2lucy9lZmwvUGx1Z2luUGFja2FnZUVmbC5jcHA6IEFkZGVkLgorICAgICAgICAoV2Vi
Q29yZTo6UGx1Z2luUGFja2FnZTo6ZmV0Y2hJbmZvKToKKyAgICAgICAgKFdlYkNvcmU6OlBsdWdp
blBhY2thZ2U6Ok5QVmVyc2lvbik6CisgICAgICAgIChXZWJDb3JlOjpQbHVnaW5QYWNrYWdlOjps
b2FkKToKKyAgICAgICAgKiBwbHVnaW5zL2VmbC9QbHVnaW5WaWV3RWZsLmNwcDogQWRkZWQuCisg
ICAgICAgIChXZWJDb3JlOjpQbHVnaW5WaWV3OjpkaXNwYXRjaE5QRXZlbnQpOgorICAgICAgICAo
V2ViQ29yZTo6UGx1Z2luVmlldzo6aGFsdCk6CisgICAgICAgIChXZWJDb3JlOjpQbHVnaW5WaWV3
OjpoYW5kbGVGb2N1c0luRXZlbnQpOgorICAgICAgICAoV2ViQ29yZTo6UGx1Z2luVmlldzo6aGFu
ZGxlRm9jdXNPdXRFdmVudCk6CisgICAgICAgIChXZWJDb3JlOjpQbHVnaW5WaWV3OjpyZXN0YXJ0
KToKKyAgICAgICAgKFdlYkNvcmU6OlBsdWdpblZpZXc6OmhhbmRsZUtleWJvYXJkRXZlbnQpOgor
ICAgICAgICAoV2ViQ29yZTo6UGx1Z2luVmlldzo6aGFuZGxlTW91c2VFdmVudCk6CisgICAgICAg
IChXZWJDb3JlOjpQbHVnaW5WaWV3Ojp1cGRhdGVQbHVnaW5XaWRnZXQpOgorICAgICAgICAoV2Vi
Q29yZTo6UGx1Z2luVmlldzo6c2V0Rm9jdXMpOgorICAgICAgICAoV2ViQ29yZTo6UGx1Z2luVmll
dzo6c2hvdyk6CisgICAgICAgIChXZWJDb3JlOjpQbHVnaW5WaWV3OjpoaWRlKToKKyAgICAgICAg
KFdlYkNvcmU6OlBsdWdpblZpZXc6OnBhaW50KToKKyAgICAgICAgKFdlYkNvcmU6OlBsdWdpblZp
ZXc6OnNldFBhcmVudCk6CisgICAgICAgIChXZWJDb3JlOjpQbHVnaW5WaWV3OjpzZXROUFdpbmRv
d1JlY3QpOgorICAgICAgICAoV2ViQ29yZTo6UGx1Z2luVmlldzo6c2V0TlBXaW5kb3dJZk5lZWRl
ZCk6CisgICAgICAgIChXZWJDb3JlOjpQbHVnaW5WaWV3OjpzZXRQYXJlbnRWaXNpYmxlKToKKyAg
ICAgICAgKFdlYkNvcmU6OlBsdWdpblZpZXc6OmhhbmRsZVBvc3RSZWFkRmlsZSk6CisgICAgICAg
IChXZWJDb3JlOjpQbHVnaW5WaWV3OjpwbGF0Zm9ybUdldFZhbHVlU3RhdGljKToKKyAgICAgICAg
KFdlYkNvcmU6OlBsdWdpblZpZXc6OnBsYXRmb3JtR2V0VmFsdWUpOgorICAgICAgICAoV2ViQ29y
ZTo6UGx1Z2luVmlldzo6aW52YWxpZGF0ZVJlY3QpOgorICAgICAgICAoV2ViQ29yZTo6UGx1Z2lu
Vmlldzo6aW52YWxpZGF0ZVJlZ2lvbik6CisgICAgICAgIChXZWJDb3JlOjpQbHVnaW5WaWV3Ojpm
b3JjZVJlZHJhdyk6CisgICAgICAgIChXZWJDb3JlOjpQbHVnaW5WaWV3OjpwbGF0Zm9ybVN0YXJ0
KToKKyAgICAgICAgKFdlYkNvcmU6OlBsdWdpblZpZXc6OnBsYXRmb3JtRGVzdHJveSk6CisKIDIw
MTEtMDgtMjYgIEFsZXhlaSBTdml0a2luZSAgPGFzdml0a2luZUBjaHJvbWl1bS5vcmc+CiAKICAg
ICAgICAgQ2hyb21pdW0gTWFjOiBVc2UgYSBjdXN0b20gcGF0dGVybiBpbWFnZSBmb3IgcnViYmVy
IGJhbmRpbmcgb3ZlcmhhbmcgYXJlYQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGx1Z2lu
cy9QbHVnaW5WaWV3LmggYi9Tb3VyY2UvV2ViQ29yZS9wbHVnaW5zL1BsdWdpblZpZXcuaAppbmRl
eCAwN2MzYzY3Li5lOWNmMjA4IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbHVnaW5zL1Bs
dWdpblZpZXcuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbHVnaW5zL1BsdWdpblZpZXcuaApAQCAt
MzczLDcgKzM3Myw3IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKICAgICAgICAgYm9vbCBtX2hhdmVV
cGRhdGVkUGx1Z2luV2lkZ2V0OwogI2VuZGlmCiAKLSNpZiAoKFBMQVRGT1JNKFFUKSB8fCBQTEFU
Rk9STShXWCkpICYmIE9TKFdJTkRPV1MpKSB8fCBkZWZpbmVkKFhQX01BQ09TWCkKKyNpZiAoKFBM
QVRGT1JNKFFUKSB8fCBQTEFURk9STShXWCkpICYmIE9TKFdJTkRPV1MpKSB8fCBkZWZpbmVkKFhQ
X01BQ09TWCkgfHwgUExBVEZPUk0oRUZMKQogICAgICAgICAvLyBPbiBNYWMgT1NYIGFuZCBRdC9X
aW5kb3dzIHRoZSBwbHVnaW4gZG9lcyBub3QgaGF2ZSBpdHMgb3duIG5hdGl2ZSB3aWRnZXQsCiAg
ICAgICAgIC8vIGJ1dCBpcyB1c2luZyB0aGUgY29udGFpbmluZyB3aW5kb3cgYXMgaXRzIHJlZmVy
ZW5jZSBmb3IgcG9zaXRpb25pbmcvcGFpbnRpbmcuCiAgICAgICAgIFBsYXRmb3JtUGx1Z2luV2lk
Z2V0IG1fd2luZG93OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGx1Z2lucy9lZmwvUGx1
Z2luRGF0YUVmbC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbHVnaW5zL2VmbC9QbHVnaW5EYXRhRWZs
LmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jMjFkNTFiCi0tLSAvZGV2
L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvcGx1Z2lucy9lZmwvUGx1Z2luRGF0YUVmbC5jcHAK
QEAgLTAsMCArMSw2NiBAQAorLyoKKyAgICBDb3B5cmlnaHQgKEMpIDIwMDYsIDIwMDcgQXBwbGUg
SW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAgICBDb3B5cmlnaHQgKEMpIDIwMDggVHJvbGx0
ZWNoIEFTQQorICAgIENvcHlyaWdodCAoQykgMjAwOCBDb2xsYWJvcmEgTHRkLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgorICAgIENvcHlyaWdodCAoQykgMjAwOCBJTmRUIC0gSW5zdGl0dXRvIE5va2lh
IGRlIFRlY25vbG9naWEKKyAgICBDb3B5cmlnaHQgKEMpIDIwMDktMjAxMCBQcm9GVVNJT04gZW1i
ZWRkZWQgc3lzdGVtcworICAgIENvcHlyaWdodCAoQykgMjAwOS0yMDExIFNhbXN1bmcgRWxlY3Ry
b25pY3MKKworICAgIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlz
dHJpYnV0ZSBpdCBhbmQvb3IKKyAgICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBH
TlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworICAgIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRo
ZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICAgIHZlcnNpb24gMiBvZiB0aGUg
TGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKworICAgIFRo
aXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNl
ZnVsLAorICAgIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBs
aWVkIHdhcnJhbnR5IG9mCisgICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFS
VElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAgICBMaWJyYXJ5IEdlbmVyYWwgUHVibGlj
IExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKworICAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZl
ZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAgICBh
bG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90
LCB3cml0ZSB0bworICAgIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZy
YW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCisgICAgQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBV
U0EuCisqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiUGx1Z2luRGF0YS5oIgor
CisjaW5jbHVkZSAiUGx1Z2luRGF0YWJhc2UuaCIKKyNpbmNsdWRlICJQbHVnaW5QYWNrYWdlLmgi
CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKwordm9pZCBQbHVnaW5EYXRhOjppbml0UGx1Z2lucyhj
b25zdCBQYWdlKikKK3sKKyAgICBjb25zdCBWZWN0b3I8UGx1Z2luUGFja2FnZSo+JiBwbHVnaW5z
ID0gUGx1Z2luRGF0YWJhc2U6Omluc3RhbGxlZFBsdWdpbnMoKS0+cGx1Z2lucygpOworCisgICAg
Zm9yIChzaXplX3QgaSA9IDA7IGkgPCBwbHVnaW5zLnNpemUoKTsgKytpKSB7CisgICAgICAgIFBs
dWdpblBhY2thZ2UqIHBhY2thZ2UgPSBwbHVnaW5zW2ldOworICAgICAgICBQbHVnaW5JbmZvIGlu
Zm87CisKKyAgICAgICAgaW5mby5uYW1lID0gcGFja2FnZS0+bmFtZSgpOworICAgICAgICBpbmZv
LmZpbGUgPSBwYWNrYWdlLT5maWxlTmFtZSgpOworICAgICAgICBpbmZvLmRlc2MgPSBwYWNrYWdl
LT5kZXNjcmlwdGlvbigpOworCisgICAgICAgIGNvbnN0IE1JTUVUb0Rlc2NyaXB0aW9uc01hcCYg
bWltZVRvRGVzY3JpcHRpb25zID0gcGFja2FnZS0+bWltZVRvRGVzY3JpcHRpb25zKCk7CisgICAg
ICAgIE1JTUVUb0Rlc2NyaXB0aW9uc01hcDo6Y29uc3RfaXRlcmF0b3IgZW5kID0gbWltZVRvRGVz
Y3JpcHRpb25zLmVuZCgpOworICAgICAgICBmb3IgKE1JTUVUb0Rlc2NyaXB0aW9uc01hcDo6Y29u
c3RfaXRlcmF0b3IgaXQgPSBtaW1lVG9EZXNjcmlwdGlvbnMuYmVnaW4oKTsgaXQgIT0gZW5kOyAr
K2l0KSB7CisgICAgICAgICAgICBNaW1lQ2xhc3NJbmZvIG1pbWU7CisKKyAgICAgICAgICAgIG1p
bWUudHlwZSA9IGl0LT5maXJzdDsKKyAgICAgICAgICAgIG1pbWUuZGVzYyA9IGl0LT5zZWNvbmQ7
CisgICAgICAgICAgICBtaW1lLmV4dGVuc2lvbnMgPSBwYWNrYWdlLT5taW1lVG9FeHRlbnNpb25z
KCkuZ2V0KG1pbWUudHlwZSk7CisKKyAgICAgICAgICAgIGluZm8ubWltZXMuYXBwZW5kKG1pbWUp
OworICAgICAgICB9CisKKyAgICAgICAgbV9wbHVnaW5zLmFwcGVuZChpbmZvKTsKKyAgICB9Cit9
CisKK3ZvaWQgUGx1Z2luRGF0YTo6cmVmcmVzaCgpCit7CisgICAgUGx1Z2luRGF0YWJhc2U6Omlu
c3RhbGxlZFBsdWdpbnMoKS0+cmVmcmVzaCgpOworfQorCit9OwpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvcGx1Z2lucy9lZmwvUGx1Z2luUGFja2FnZUVmbC5jcHAgYi9Tb3VyY2UvV2ViQ29y
ZS9wbHVnaW5zL2VmbC9QbHVnaW5QYWNrYWdlRWZsLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NApp
bmRleCAwMDAwMDAwLi4yMThhZWE2Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUv
cGx1Z2lucy9lZmwvUGx1Z2luUGFja2FnZUVmbC5jcHAKQEAgLTAsMCArMSwxNjggQEAKKy8qCisg
KiBDb3B5cmlnaHQgKEMpIDIwMDYsIDIwMDcgQXBwbGUgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KKyAqIENvcHlyaWdodCAoQykgMjAwOCBDb2xsYWJvcmEgTHRkLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgorICogQ29weXJpZ2h0IChDKSAyMDA4IE51YW50aSBMdGQuCisgKiBDb3B5cmlnaHQgKEMp
IDIwMDggSU5kVCAtIEluc3RpdHV0byBOb2tpYSBkZSBUZWNub2xvZ2lhCisgKiBDb3B5cmlnaHQg
KEMpIDIwMDktMjAxMCBQcm9GVVNJT04gZW1iZWRkZWQgc3lzdGVtcworICogQ29weXJpZ2h0IChD
KSAyMDA5LTIwMTEgU2Ftc3VuZyBFbGVjdHJvbmljcworICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFu
ZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9k
aWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25k
aXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2Rl
IG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlz
dHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJp
Z2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBt
YXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09G
VFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQ09NUFVURVIsIElOQy4gYGBBUyBJUycnIEFORCBB
TlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZ
IEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQu
ICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBDT01QVVRFUiwgSU5DLiBPUgorICogQ09OVFJJQlVU
T1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJ
QUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9S
IFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNT
IElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJ
QUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAor
ICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZ
IE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0Yg
VEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcu
aCIKKyNpbmNsdWRlICJQbHVnaW5QYWNrYWdlLmgiCisKKyNpbmNsdWRlICJNSU1FVHlwZVJlZ2lz
dHJ5LmgiCisjaW5jbHVkZSAiTm90SW1wbGVtZW50ZWQuaCIKKyNpbmNsdWRlICJQbHVnaW5EYXRh
YmFzZS5oIgorI2luY2x1ZGUgIlBsdWdpbkRlYnVnLmgiCisjaW5jbHVkZSAibnBydW50aW1lX2lt
cGwuaCIKKworI2luY2x1ZGUgPEVpbmEuaD4KKyNpbmNsdWRlIDxkbGZjbi5oPgorI2luY2x1ZGUg
PHd0Zi90ZXh0L0NTdHJpbmcuaD4KKworbmFtZXNwYWNlIFdlYkNvcmUgeworCit0eXBlZGVmIGNo
YXIqICgqTlBQX0dldE1JTUVEZXNjcmlwdGlvblByb2NQdHIpKCk7CisKK2Jvb2wgUGx1Z2luUGFj
a2FnZTo6ZmV0Y2hJbmZvKCkKK3sKKyAgICBjb25zdCBjaGFyICplcnJtc2c7CisKKyAgICBpZiAo
IWxvYWQoKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgTlBQX0dldFZhbHVlUHJvY1B0
ciBnZXRWYWx1ZSA9IDA7CisgICAgTlBQX0dldE1JTUVEZXNjcmlwdGlvblByb2NQdHIgZ2V0TUlN
RURlc2NyaXB0aW9uID0gMDsKKworICAgIGdldFZhbHVlID0gcmVpbnRlcnByZXRfY2FzdDxOUFBf
R2V0VmFsdWVQcm9jUHRyPihkbHN5bShtX21vZHVsZSwgIk5QX0dldFZhbHVlIikpOworICAgIGlm
ICgoZXJybXNnID0gZGxlcnJvcigpKSkgeworICAgICAgICBFSU5BX0xPR19FUlIoIkNvdWxkIG5v
dCBnZXQgc3ltYm9sIE5QX0dldFZhbHVlOiAlcyIsIGVycm1zZyk7CisgICAgICAgIHJldHVybiBm
YWxzZTsKKyAgICB9CisKKyAgICBnZXRNSU1FRGVzY3JpcHRpb24gPSByZWludGVycHJldF9jYXN0
PE5QUF9HZXRNSU1FRGVzY3JpcHRpb25Qcm9jUHRyPihkbHN5bShtX21vZHVsZSwgIk5QX0dldE1J
TUVEZXNjcmlwdGlvbiIpKTsKKyAgICBpZiAoKGVycm1zZyA9IGRsZXJyb3IoKSkpIHsKKyAgICAg
ICAgRUlOQV9MT0dfRVJSKCJDb3VsZCBub3QgZ2V0IHN5bWJvbCBOUF9HZXRNSU1FRGVzY3JpcHRp
b246ICVzIiwgZXJybXNnKTsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKworICAgIGNo
YXIqIGJ1ZmZlciA9IDA7CisgICAgTlBFcnJvciBlcnIgPSBnZXRWYWx1ZSgwLCBOUFBWcGx1Z2lu
TmFtZVN0cmluZywgc3RhdGljX2Nhc3Q8dm9pZCo+KCZidWZmZXIpKTsKKyAgICBpZiAoZXJyICE9
IE5QRVJSX05PX0VSUk9SKQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgbV9uYW1lID0gYnVm
ZmVyOworCisgICAgYnVmZmVyID0gMDsKKyAgICBlcnIgPSBnZXRWYWx1ZSgwLCBOUFBWcGx1Z2lu
RGVzY3JpcHRpb25TdHJpbmcsIHN0YXRpY19jYXN0PHZvaWQqPigmYnVmZmVyKSk7CisgICAgaWYg
KGVyciAhPSBOUEVSUl9OT19FUlJPUikKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIG1fZGVz
Y3JpcHRpb24gPSBidWZmZXI7CisgICAgZGV0ZXJtaW5lTW9kdWxlVmVyc2lvbkZyb21EZXNjcmlw
dGlvbigpOworCisgICAgU3RyaW5nIGRlc2NyaXB0aW9uID0gZ2V0TUlNRURlc2NyaXB0aW9uKCk7
CisKKyAgICBWZWN0b3I8U3RyaW5nPiB0eXBlczsKKyAgICBkZXNjcmlwdGlvbi5zcGxpdChVQ2hh
cignOycpLCBmYWxzZSwgdHlwZXMpOworCisgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCB0eXBl
cy5zaXplKCk7ICsraSkgeworICAgICAgICBWZWN0b3I8U3RyaW5nPiBtaW1lOworICAgICAgICB0
eXBlc1tpXS5zcGxpdChVQ2hhcignOicpLCB0cnVlLCBtaW1lKTsKKworICAgICAgICBpZiAoIW1p
bWUuaXNFbXB0eSgpID4gMCkgeworICAgICAgICAgICAgVmVjdG9yPFN0cmluZz4gZXh0czsKKwor
ICAgICAgICAgICAgaWYgKG1pbWUuc2l6ZSgpID4gMSkKKyAgICAgICAgICAgICAgICBtaW1lWzFd
LnNwbGl0KFVDaGFyKCcsJyksIGZhbHNlLCBleHRzKTsKKworICAgICAgICAgICAgZGV0ZXJtaW5l
UXVpcmtzKG1pbWVbMF0pOworICAgICAgICAgICAgbV9taW1lVG9FeHRlbnNpb25zLmFkZChtaW1l
WzBdLCBleHRzKTsKKworICAgICAgICAgICAgaWYgKG1pbWUuc2l6ZSgpID4gMikKKyAgICAgICAg
ICAgICAgICBtX21pbWVUb0Rlc2NyaXB0aW9ucy5hZGQobWltZVswXSwgbWltZVsyXSk7CisgICAg
ICAgIH0KKyAgICB9CisKKyAgICByZXR1cm4gdHJ1ZTsKK30KKwordWludDE2X3QgUGx1Z2luUGFj
a2FnZTo6TlBWZXJzaW9uKCkgY29uc3QKK3sKKyAgICByZXR1cm4gTlBWRVJTX0hBU19QTFVHSU5f
VEhSRUFEX0FTWU5DX0NBTEw7Cit9CisKK2Jvb2wgUGx1Z2luUGFja2FnZTo6bG9hZCgpCit7Cisg
ICAgY2hhciogZXJybXNnOworCisgICAgaWYgKG1faXNMb2FkZWQpIHsKKyAgICAgICAgbV9sb2Fk
Q291bnQrKzsKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgfQorCisgICAgbV9tb2R1bGUgPSBk
bG9wZW4obV9wYXRoLnV0ZjgoKS5kYXRhKCksIFJUTERfTEFaWSB8IFJUTERfTE9DQUwpOworICAg
IGlmICgoZXJybXNnID0gZGxlcnJvcigpKSkgeworICAgICAgICBFSU5BX0xPR19XQVJOKCIlcyBu
b3QgbG9hZGVkOiAlcyIsIG1fcGF0aC51dGY4KCkuZGF0YSgpLCBlcnJtc2cpOworICAgICAgICBy
ZXR1cm4gZmFsc2U7CisgICAgfQorCisgICAgbV9pc0xvYWRlZCA9IHRydWU7CisKKyAgICBOUF9J
bml0aWFsaXplRnVuY1B0ciBpbml0aWFsaXplOworICAgIE5QRXJyb3IgZXJyOworCisgICAgaW5p
dGlhbGl6ZSA9IChOUF9Jbml0aWFsaXplRnVuY1B0cilkbHN5bShtX21vZHVsZSwgIk5QX0luaXRp
YWxpemUiKTsKKyAgICBpZiAoKGVycm1zZyA9IGRsZXJyb3IoKSkpIHsKKyAgICAgICAgRUlOQV9M
T0dfRVJSKCJDb3VsZCBub3QgZ2V0IHN5bWJvbCBOUF9Jbml0aWFsaXplOiAlcyIsIGVycm1zZyk7
CisgICAgICAgIGdvdG8gYWJvcnQ7CisgICAgfQorCisgICAgbV9OUFBfU2h1dGRvd24gPSAoTlBQ
X1NodXRkb3duUHJvY1B0cilkbHN5bShtX21vZHVsZSwgIk5QX1NodXRkb3duIik7CisgICAgaWYg
KChlcnJtc2cgPSBkbGVycm9yKCkpKSB7CisgICAgICAgIEVJTkFfTE9HX0VSUigiQ291bGQgbm90
IGdldCBzeW1ib2wgTlBfU2h1dGRvd246ICVzIiwgZXJybXNnKTsKKyAgICAgICAgZ290byBhYm9y
dDsKKyAgICB9CisKKyAgICBtZW1zZXQoJm1fcGx1Z2luRnVuY3MsIDAsIHNpemVvZihtX3BsdWdp
bkZ1bmNzKSk7CisgICAgbV9wbHVnaW5GdW5jcy5zaXplID0gc2l6ZW9mKG1fcGx1Z2luRnVuY3Mp
OworCisgICAgaW5pdGlhbGl6ZUJyb3dzZXJGdW5jcygpOworCisjaWYgZGVmaW5lZChYUF9VTklY
KQorICAgIGVyciA9IGluaXRpYWxpemUoJm1fYnJvd3NlckZ1bmNzLCAmbV9wbHVnaW5GdW5jcyk7
CisjZWxzZQorICAgIGVyciA9IGluaXRpYWxpemUoJm1fYnJvd3NlckZ1bmNzKTsKKyNlbmRpZgor
ICAgIGlmIChlcnIgIT0gTlBFUlJfTk9fRVJST1IpCisgICAgICAgIGdvdG8gYWJvcnQ7CisKKyAg
ICBtX2xvYWRDb3VudCsrOworICAgIHJldHVybiB0cnVlOworCithYm9ydDoKKyAgICBFSU5BX0xP
R19EQkcoImZhaWxlZCB0byBsb2FkIHBsdWdpbiwgdW5sb2FkIGl0IHdpdGhvdXQgc2h1dHRpbmcg
aXQgZG93bi4iKTsKKyAgICB1bmxvYWRXaXRob3V0U2h1dGRvd24oKTsKKyAgICByZXR1cm4gZmFs
c2U7Cit9CisKK30KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsdWdpbnMvZWZsL1BsdWdp
blZpZXdFZmwuY3BwIGIvU291cmNlL1dlYkNvcmUvcGx1Z2lucy9lZmwvUGx1Z2luVmlld0VmbC5j
cHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTBhNjdkZAotLS0gL2Rldi9u
dWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsdWdpbnMvZWZsL1BsdWdpblZpZXdFZmwuY3BwCkBA
IC0wLDAgKzEsMzgxIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA2LCAyMDA3IEFwcGxlIElu
Yy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDggQ29sbGFib3Jh
IEx0ZC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAwOCBJTmRUIC0g
SW5zdGl0dXRvIE5va2lhIGRlIFRlY25vbG9naWEKKyAqIENvcHlyaWdodCAoQykgMjAwOS0yMDEw
IFByb0ZVU0lPTiBlbWJlZGRlZCBzeXN0ZW1zCisgKiBDb3B5cmlnaHQgKEMpIDIwMDktMjAxMSBT
YW1zdW5nIEVsZWN0cm9uaWNzCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3Vy
Y2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFy
ZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFy
ZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4g
dGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGlu
IGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92
aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9W
SURFRCBCWSBBUFBMRSBDT01QVVRFUiwgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVT
UyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBU
SEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1Mg
Rk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5U
IFNIQUxMIEFQUExFIENPTVBVVEVSLCBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxF
IEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1Q
TEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExP
U1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9O
KSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVU
SEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5H
IE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBV
U0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJ
VFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUg
IlBsdWdpblZpZXcuaCIKKworI2luY2x1ZGUgIkZyYW1lVmlldy5oIgorI2luY2x1ZGUgIkdyYXBo
aWNzQ29udGV4dC5oIgorI2luY2x1ZGUgIkhUTUxOYW1lcy5oIgorI2luY2x1ZGUgIkhUTUxQbHVn
SW5FbGVtZW50LmgiCisjaW5jbHVkZSAiSG9zdFdpbmRvdy5oIgorI2luY2x1ZGUgIk1vdXNlRXZl
bnQuaCIKKyNpbmNsdWRlICJOb3RJbXBsZW1lbnRlZC5oIgorI2luY2x1ZGUgIlBsdWdpblBhY2th
Z2UuaCIKKyNpbmNsdWRlICJucHJ1bnRpbWVfaW1wbC5oIgorI2luY2x1ZGUgInJ1bnRpbWUvSlNM
b2NrLmgiCisjaW5jbHVkZSA8RWNvcmVfRXZhcy5oPgorI2luY2x1ZGUgPEVjb3JlX1guaD4KKyNp
bmNsdWRlIDxFdmFzLmg+CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKwordXNpbmcgbmFtZXNwYWNl
IEhUTUxOYW1lczsKKworI2lmIEVOQUJMRShORVRTQ0FQRV9QTFVHSU5fQVBJKQorYm9vbCBQbHVn
aW5WaWV3OjpkaXNwYXRjaE5QRXZlbnQoTlBFdmVudCYgZXZlbnQpCit7CisgICAgaWYgKCFtX3Bs
dWdpbi0+cGx1Z2luRnVuY3MoKS0+ZXZlbnQpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAg
IFBsdWdpblZpZXc6OnNldEN1cnJlbnRQbHVnaW5WaWV3KHRoaXMpOworICAgIEpTQzo6SlNMb2Nr
OjpEcm9wQWxsTG9ja3MgZHJvcEFsbExvY2tzKGZhbHNlKTsKKyAgICBzZXRDYWxsaW5nUGx1Z2lu
KHRydWUpOworCisgICAgYm9vbCBhY2NlcHRlZCA9IG1fcGx1Z2luLT5wbHVnaW5GdW5jcygpLT5l
dmVudChtX2luc3RhbmNlLCAmZXZlbnQpOworCisgICAgc2V0Q2FsbGluZ1BsdWdpbihmYWxzZSk7
CisgICAgUGx1Z2luVmlldzo6c2V0Q3VycmVudFBsdWdpblZpZXcoMCk7CisgICAgcmV0dXJuIGFj
Y2VwdGVkOworfQorI2VuZGlmCisKK3ZvaWQgUGx1Z2luVmlldzo6aGFsdCgpCit7CisgICAgbm90
SW1wbGVtZW50ZWQoKTsKK30KKworI2lmIGRlZmluZWQoWFBfVU5JWCkgJiYgRU5BQkxFKE5FVFND
QVBFX1BMVUdJTl9BUEkpCit2b2lkIFBsdWdpblZpZXc6OmhhbmRsZUZvY3VzSW5FdmVudCgpCit7
CisgICAgbm90SW1wbGVtZW50ZWQoKTsKK30KKwordm9pZCBQbHVnaW5WaWV3OjpoYW5kbGVGb2N1
c091dEV2ZW50KCkKK3sKKyAgICBub3RJbXBsZW1lbnRlZCgpOworfQorI2VuZGlmCisKK3ZvaWQg
UGx1Z2luVmlldzo6cmVzdGFydCgpCit7CisgICAgbm90SW1wbGVtZW50ZWQoKTsKK30KKwordm9p
ZCBQbHVnaW5WaWV3OjpoYW5kbGVLZXlib2FyZEV2ZW50KEtleWJvYXJkRXZlbnQqKQoreworICAg
IG5vdEltcGxlbWVudGVkKCk7Cit9CisKK3ZvaWQgUGx1Z2luVmlldzo6aGFuZGxlTW91c2VFdmVu
dChNb3VzZUV2ZW50KiBldmVudCkKK3sKKyNpZiBFTkFCTEUoTkVUU0NBUEVfUExVR0lOX0FQSSkK
KyAgICBOUEV2ZW50IHhFdmVudDsKKworICAgIEludFJlY3QgcmVjdCA9IHN0YXRpY19jYXN0PEZy
YW1lVmlldyo+KHBhcmVudCgpKS0+Y29udGVudHNUb1NjcmVlbihJbnRSZWN0KDAsIDAsIGV2ZW50
LT5vZmZzZXRYKCksIGV2ZW50LT5vZmZzZXRZKCkpKTsKKyAgICBpbnQgZXZlbnRYID0gcmVjdC53
aWR0aCgpOworICAgIGludCBldmVudFkgPSByZWN0LmhlaWdodCgpOworICAgIGlmIChldmVudC0+
dHlwZSgpID09IGV2ZW50TmFtZXMoKS5tb3VzZW1vdmVFdmVudAorICAgICAgICAgICAgfHwgZXZl
bnQtPnR5cGUoKSA9PSBldmVudE5hbWVzKCkubW91c2VvdXRFdmVudAorICAgICAgICAgICAgfHwg
ZXZlbnQtPnR5cGUoKSA9PSBldmVudE5hbWVzKCkubW91c2VvdmVyRXZlbnQpIHsKKyAgICAgICAg
eEV2ZW50LnR5cGUgPSBNb3Rpb25Ob3RpZnk7CisgICAgICAgIHhFdmVudC54bW90aW9uLnggPSBl
dmVudFg7CisgICAgICAgIHhFdmVudC54bW90aW9uLnkgPSBldmVudFk7CisgICAgfSBlbHNlIGlm
IChldmVudC0+dHlwZSgpID09IGV2ZW50TmFtZXMoKS5tb3VzZWRvd25FdmVudCkgeworICAgICAg
ICB4RXZlbnQudHlwZSA9IEJ1dHRvblByZXNzOworICAgICAgICB4RXZlbnQueGJ1dHRvbi54ID0g
ZXZlbnRYOworICAgICAgICB4RXZlbnQueGJ1dHRvbi55ID0gZXZlbnRZOworICAgICAgICB4RXZl
bnQueGJ1dHRvbi5idXR0b24gPSBldmVudC0+YnV0dG9uKCkgKyAxOyAvLyBET00gTW91c2VFdmVu
dCBjb3VudHMgZnJvbSAwLCBhbmQgWEJ1dHRvbkV2ZW50IGZyb20gMS4KKyAgICB9IGVsc2UgaWYg
KGV2ZW50LT50eXBlKCkgPT0gZXZlbnROYW1lcygpLm1vdXNldXBFdmVudCkgeworICAgICAgICB4
RXZlbnQudHlwZSA9IEJ1dHRvblJlbGVhc2U7CisgICAgICAgIHhFdmVudC54YnV0dG9uLnggPSBl
dmVudFg7CisgICAgICAgIHhFdmVudC54YnV0dG9uLnkgPSBldmVudFk7CisgICAgICAgIHhFdmVu
dC54YnV0dG9uLmJ1dHRvbiA9IGV2ZW50LT5idXR0b24oKSArIDE7CisgICAgfSBlbHNlCisgICAg
ICAgIHJldHVybjsKKworICAgIGlmIChkaXNwYXRjaE5QRXZlbnQoeEV2ZW50KSkKKyAgICAgICAg
ZXZlbnQtPnNldERlZmF1bHRIYW5kbGVkKCk7CisjZWxzZQorICAgIG5vdEltcGxlbWVudGVkKCk7
CisjZW5kaWYKK30KKwordm9pZCBQbHVnaW5WaWV3Ojp1cGRhdGVQbHVnaW5XaWRnZXQoKQorewor
ICAgIGlmICghcGFyZW50KCkgfHwgIW1faXNXaW5kb3dlZCkKKyAgICAgICAgcmV0dXJuOworCisg
ICAgQVNTRVJUKHBhcmVudCgpLT5pc0ZyYW1lVmlldygpKTsKKyAgICBGcmFtZVZpZXcqIGZyYW1l
VmlldyA9IHN0YXRpY19jYXN0PEZyYW1lVmlldyo+KHBhcmVudCgpKTsKKworICAgIEludFJlY3Qg
b2xkV2luZG93UmVjdCA9IG1fd2luZG93UmVjdDsKKyAgICBJbnRSZWN0IG9sZENsaXBSZWN0ID0g
bV9jbGlwUmVjdDsKKworICAgIG1fd2luZG93UmVjdCA9IGZyYW1lVmlldy0+Y29udGVudHNUb1Nj
cmVlbihmcmFtZVJlY3QoKSk7CisKKyAgICBtX2NsaXBSZWN0ID0gd2luZG93Q2xpcFJlY3QoKTsK
KyAgICBtX2NsaXBSZWN0Lm1vdmUoLW1fd2luZG93UmVjdC54KCksIC1tX3dpbmRvd1JlY3QueSgp
KTsKK30KKwordm9pZCBQbHVnaW5WaWV3OjpzZXRGb2N1cyhib29sIGZvY3VzZWQpCit7CisgICAg
aWYgKGZvY3VzZWQpCisgICAgICAgIG1fZWxlbWVudC0+ZG9jdW1lbnQoKS0+c2V0Rm9jdXNlZE5v
ZGUobV9lbGVtZW50KTsKKworICAgIFdpZGdldDo6c2V0Rm9jdXMoZm9jdXNlZCk7Cit9CisKK3Zv
aWQgUGx1Z2luVmlldzo6c2hvdygpCit7CisgICAgc2V0U2VsZlZpc2libGUodHJ1ZSk7CisKKyAg
ICBXaWRnZXQ6OnNob3coKTsKK30KKwordm9pZCBQbHVnaW5WaWV3OjpoaWRlKCkKK3sKKyAgICBz
ZXRTZWxmVmlzaWJsZShmYWxzZSk7CisKKyAgICBXaWRnZXQ6OmhpZGUoKTsKK30KKwordm9pZCBQ
bHVnaW5WaWV3OjpwYWludChHcmFwaGljc0NvbnRleHQqIGNvbnRleHQsIGNvbnN0IEludFJlY3Qm
IHJlY3QpCit7CisgICAgaWYgKCFtX2lzU3RhcnRlZCkgeworICAgICAgICBwYWludE1pc3NpbmdQ
bHVnaW5JY29uKGNvbnRleHQsIHJlY3QpOworICAgICAgICByZXR1cm47CisgICAgfQorfQorCit2
b2lkIFBsdWdpblZpZXc6OnNldFBhcmVudChTY3JvbGxWaWV3KiBwYXJlbnQpCit7CisgICAgV2lk
Z2V0OjpzZXRQYXJlbnQocGFyZW50KTsKKworICAgIGlmIChwYXJlbnQpCisgICAgICAgIGluaXQo
KTsKK30KKwordm9pZCBQbHVnaW5WaWV3OjpzZXROUFdpbmRvd1JlY3QoY29uc3QgSW50UmVjdCYg
cmVjdCkKK3sKKyAgICBub3RJbXBsZW1lbnRlZCgpOworICAgIHJldHVybjsKK30KKwordm9pZCBQ
bHVnaW5WaWV3OjpzZXROUFdpbmRvd0lmTmVlZGVkKCkKK3sKK30KKwordm9pZCBQbHVnaW5WaWV3
OjpzZXRQYXJlbnRWaXNpYmxlKGJvb2wgdmlzaWJsZSkKK3sKKyAgICBpZiAoaXNQYXJlbnRWaXNp
YmxlKCkgPT0gdmlzaWJsZSkKKyAgICAgICAgcmV0dXJuOworCisgICAgV2lkZ2V0OjpzZXRQYXJl
bnRWaXNpYmxlKHZpc2libGUpOworfQorCisjaWYgRU5BQkxFKE5FVFNDQVBFX1BMVUdJTl9BUEkp
CitOUEVycm9yIFBsdWdpblZpZXc6OmhhbmRsZVBvc3RSZWFkRmlsZShWZWN0b3I8Y2hhcj4mIGJ1
ZmZlciwgdWludDMyX3QgbGVuLCBjb25zdCBjaGFyKiBidWYpCit7CisgICAgU3RyaW5nIGZpbGVu
YW1lKGJ1ZiwgbGVuKTsKKworICAgIGlmIChmaWxlbmFtZS5zdGFydHNXaXRoKCJmaWxlOi8vLyIp
KQorICAgICAgICBmaWxlbmFtZSA9IGZpbGVuYW1lLnN1YnN0cmluZyg4KTsKKworICAgIGlmICgh
ZmlsZUV4aXN0cyhmaWxlbmFtZSkpCisgICAgICAgIHJldHVybiBOUEVSUl9GSUxFX05PVF9GT1VO
RDsKKworICAgIEZJTEUqIGZpbGVIYW5kbGUgPSBmb3BlbihmaWxlbmFtZS51dGY4KCkuZGF0YSgp
LCAiciIpOworCisgICAgaWYgKCFmaWxlSGFuZGxlKQorICAgICAgICByZXR1cm4gTlBFUlJfRklM
RV9OT1RfRk9VTkQ7CisKKyAgICBpbnQgYnl0ZXNSZWFkID0gZnJlYWQoYnVmZmVyLmRhdGEoKSwg
MSwgMCwgZmlsZUhhbmRsZSk7CisKKyAgICBmY2xvc2UoZmlsZUhhbmRsZSk7CisKKyAgICBpZiAo
Ynl0ZXNSZWFkIDw9IDApCisgICAgICAgIHJldHVybiBOUEVSUl9GSUxFX05PVF9GT1VORDsKKwor
ICAgIHJldHVybiBOUEVSUl9OT19FUlJPUjsKK30KKyNlbmRpZgorCisjaWYgRU5BQkxFKE5FVFND
QVBFX1BMVUdJTl9BUEkpCitib29sIFBsdWdpblZpZXc6OnBsYXRmb3JtR2V0VmFsdWVTdGF0aWMo
TlBOVmFyaWFibGUgdmFyaWFibGUsIHZvaWQqIHZhbHVlLCBOUEVycm9yKiByZXN1bHQpCit7Cisg
ICAgc3dpdGNoICh2YXJpYWJsZSkgeworICAgIGNhc2UgTlBOVlRvb2xraXQ6CisgICAgICAgICpz
dGF0aWNfY2FzdDx1aW50MzJfdCo+KHZhbHVlKSA9IDA7CisgICAgICAgICpyZXN1bHQgPSBOUEVS
Ul9OT19FUlJPUjsKKyAgICAgICAgcmV0dXJuIHRydWU7CisKKyAgICBjYXNlIE5QTlZTdXBwb3J0
c1hFbWJlZEJvb2w6CisgICAgICAgICpzdGF0aWNfY2FzdDxOUEJvb2wqPih2YWx1ZSkgPSBmYWxz
ZTsKKyAgICAgICAgKnJlc3VsdCA9IE5QRVJSX05PX0VSUk9SOworICAgICAgICByZXR1cm4gdHJ1
ZTsKKworICAgIGNhc2UgTlBOVmphdmFzY3JpcHRFbmFibGVkQm9vbDoKKyAgICAgICAgKnN0YXRp
Y19jYXN0PE5QQm9vbCo+KHZhbHVlKSA9IHRydWU7CisgICAgICAgICpyZXN1bHQgPSBOUEVSUl9O
T19FUlJPUjsKKyAgICAgICAgcmV0dXJuIHRydWU7CisKKyAgICBjYXNlIE5QTlZTdXBwb3J0c1dp
bmRvd2xlc3M6CisgICAgICAgICpzdGF0aWNfY2FzdDxOUEJvb2wqPih2YWx1ZSkgPSBmYWxzZTsK
KyAgICAgICAgKnJlc3VsdCA9IE5QRVJSX05PX0VSUk9SOworICAgICAgICByZXR1cm4gdHJ1ZTsK
KworICAgIGRlZmF1bHQ6CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9Cit9CisKK2Jvb2wg
UGx1Z2luVmlldzo6cGxhdGZvcm1HZXRWYWx1ZShOUE5WYXJpYWJsZSB2YXJpYWJsZSwgdm9pZCog
dmFsdWUsIE5QRXJyb3IqIHJlc3VsdCkKK3sKKyAgICBpZiAoIXZhbHVlIHx8ICFyZXN1bHQpCisg
ICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIHN3aXRjaCAodmFyaWFibGUpIHsKKyAgICBjYXNl
IE5QTlZ4RGlzcGxheToKKyAgICAgICAgKnN0YXRpY19jYXN0PHZvaWQgKio+KHZhbHVlKSA9IHN0
YXRpY19jYXN0PERpc3BsYXkqPihlY29yZV94X2Rpc3BsYXlfZ2V0KCkpOworICAgICAgICAqcmVz
dWx0ID0gTlBFUlJfTk9fRVJST1I7CisgICAgICAgIHJldHVybiB0cnVlOworCisgICAgY2FzZSBO
UE5WeHRBcHBDb250ZXh0OgorICAgICAgICAqcmVzdWx0ID0gTlBFUlJfR0VORVJJQ19FUlJPUjsK
KyAgICAgICAgcmV0dXJuIHRydWU7CisKKyAgICBjYXNlIE5QTlZXaW5kb3dOUE9iamVjdDogewor
ICAgICAgICBpZiAobV9pc0phdmFTY3JpcHRQYXVzZWQpIHsKKyAgICAgICAgICAgICpyZXN1bHQg
PSBOUEVSUl9HRU5FUklDX0VSUk9SOworICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAg
IH0KKworICAgICAgICBOUE9iamVjdCogd2luZG93U2NyaXB0T2JqZWN0ID0gbV9wYXJlbnRGcmFt
ZS0+c2NyaXB0KCktPndpbmRvd1NjcmlwdE5QT2JqZWN0KCk7CisKKyAgICAgICAgLy8gUmV0dXJu
IHZhbHVlIGlzIGV4cGVjdGVkIHRvIGJlIHJldGFpbmVkLCBhcyBkZXNjcmliZWQgaGVyZTogPGh0
dHA6Ly93d3cubW96aWxsYS5vcmcvcHJvamVjdHMvcGx1Z2luL25wcnVudGltZS5odG1sPgorICAg
ICAgICBpZiAod2luZG93U2NyaXB0T2JqZWN0KQorICAgICAgICAgICAgX05QTl9SZXRhaW5PYmpl
Y3Qod2luZG93U2NyaXB0T2JqZWN0KTsKKworICAgICAgICB2b2lkKiogdiA9ICh2b2lkKiopdmFs
dWU7CisgICAgICAgICp2ID0gd2luZG93U2NyaXB0T2JqZWN0OworCisgICAgICAgICpyZXN1bHQg
PSBOUEVSUl9OT19FUlJPUjsKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgfQorCisgICAgY2Fz
ZSBOUE5WUGx1Z2luRWxlbWVudE5QT2JqZWN0OiB7CisgICAgICAgIGlmIChtX2lzSmF2YVNjcmlw
dFBhdXNlZCkgeworICAgICAgICAgICAgKnJlc3VsdCA9IE5QRVJSX0dFTkVSSUNfRVJST1I7Cisg
ICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgfQorCisgICAgICAgIE5QT2JqZWN0KiBw
bHVnaW5TY3JpcHRPYmplY3QgPSAwOworCisgICAgICAgIGlmIChtX2VsZW1lbnQtPmhhc1RhZ05h
bWUoYXBwbGV0VGFnKSB8fCBtX2VsZW1lbnQtPmhhc1RhZ05hbWUoZW1iZWRUYWcpIHx8IG1fZWxl
bWVudC0+aGFzVGFnTmFtZShvYmplY3RUYWcpKQorICAgICAgICAgICAgcGx1Z2luU2NyaXB0T2Jq
ZWN0ID0gc3RhdGljX2Nhc3Q8SFRNTFBsdWdJbkVsZW1lbnQqPihtX2VsZW1lbnQpLT5nZXROUE9i
amVjdCgpOworCisgICAgICAgIC8vIFJldHVybiB2YWx1ZSBpcyBleHBlY3RlZCB0byBiZSByZXRh
aW5lZCwgYXMgZGVzY3JpYmVkIGhlcmU6IDxodHRwOi8vd3d3Lm1vemlsbGEub3JnL3Byb2plY3Rz
L3BsdWdpbi9ucHJ1bnRpbWUuaHRtbD4KKyAgICAgICAgaWYgKHBsdWdpblNjcmlwdE9iamVjdCkK
KyAgICAgICAgICAgIF9OUE5fUmV0YWluT2JqZWN0KHBsdWdpblNjcmlwdE9iamVjdCk7CisKKyAg
ICAgICAgdm9pZCoqIHYgPSAodm9pZCoqKXZhbHVlOworICAgICAgICAqdiA9IHBsdWdpblNjcmlw
dE9iamVjdDsKKworICAgICAgICAqcmVzdWx0ID0gTlBFUlJfTk9fRVJST1I7CisgICAgICAgIHJl
dHVybiB0cnVlOworICAgIH0KKworICAgIGNhc2UgTlBOVm5ldHNjYXBlV2luZG93OiB7CisgICAg
ICAgIHZvaWQqIHcgPSByZWludGVycHJldF9jYXN0PHZvaWQqPih2YWx1ZSk7CisgICAgICAgIEV2
YXNfT2JqZWN0KiB3aWRnZXQgPSBtX3BhcmVudEZyYW1lLT52aWV3KCktPmhvc3RXaW5kb3coKS0+
cGxhdGZvcm1QYWdlQ2xpZW50KCk7CisgICAgICAgIEV2YXMqIGV2YXMgPSBldmFzX29iamVjdF9l
dmFzX2dldCh3aWRnZXQpOworICAgICAgICBFY29yZV9FdmFzKiBlZSA9IGVjb3JlX2V2YXNfZWNv
cmVfZXZhc19nZXQoZXZhcyk7CisgICAgICAgICooKFhJRCAqKXcpID0gKFdpbmRvdykgZWNvcmVf
ZXZhc193aW5kb3dfZ2V0KGVlKTsKKyAgICAgICAgKnJlc3VsdCA9IE5QRVJSX05PX0VSUk9SOwor
ICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CisKKyAgICBjYXNlIE5QTlZUb29sa2l0OgorICAg
ICAgICBpZiAobV9wbHVnaW4tPnF1aXJrcygpLmNvbnRhaW5zKFBsdWdpblF1aXJrUmVxdWlyZXNH
dGtUb29sS2l0KSkgeworICAgICAgICAgICAgKigodWludDMyX3QgKil2YWx1ZSkgPSAyOworICAg
ICAgICAgICAgKnJlc3VsdCA9IE5QRVJSX05PX0VSUk9SOworICAgICAgICAgICAgcmV0dXJuIHRy
dWU7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICAvLyBmYWxsIHRo
cm91Z2gKKyAgICBkZWZhdWx0OgorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorfQorI2Vu
ZGlmCisKK3ZvaWQgUGx1Z2luVmlldzo6aW52YWxpZGF0ZVJlY3QoY29uc3QgSW50UmVjdCYgcmVj
dCkKK3sKKyAgICBpbnZhbGlkYXRlV2luZG93bGVzc1BsdWdpblJlY3QocmVjdCk7Cit9CisKKyNp
ZiBFTkFCTEUoTkVUU0NBUEVfUExVR0lOX0FQSSkKK3ZvaWQgUGx1Z2luVmlldzo6aW52YWxpZGF0
ZVJlY3QoTlBSZWN0KiByZWN0KQoreworICAgIGlmICghcmVjdCkgeworICAgICAgICBpbnZhbGlk
YXRlKCk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBJbnRSZWN0IHIocmVjdC0+bGVm
dCwgcmVjdC0+dG9wLCByZWN0LT5yaWdodCAtIHJlY3QtPmxlZnQsIHJlY3QtPmJvdHRvbSAtIHJl
Y3QtPnRvcCk7CisKKyAgICBpbnZhbGlkYXRlUmVjdChyKTsKK30KKwordm9pZCBQbHVnaW5WaWV3
OjppbnZhbGlkYXRlUmVnaW9uKE5QUmVnaW9uIHJlZ2lvbikKK3sKKyAgICBub3RJbXBsZW1lbnRl
ZCgpOworfQorI2VuZGlmCisKK3ZvaWQgUGx1Z2luVmlldzo6Zm9yY2VSZWRyYXcoKQoreworICAg
IG5vdEltcGxlbWVudGVkKCk7Cit9CisKK2Jvb2wgUGx1Z2luVmlldzo6cGxhdGZvcm1TdGFydCgp
Cit7CisgICAgQVNTRVJUKG1faXNTdGFydGVkKTsKKyAgICBBU1NFUlQobV9zdGF0dXMgPT0gUGx1
Z2luU3RhdHVzTG9hZGVkU3VjY2Vzc2Z1bGx5KTsKKworICAgIG5vdEltcGxlbWVudGVkKCk7Cisg
ICAgcmV0dXJuIHRydWU7Cit9CisKK3ZvaWQgUGx1Z2luVmlldzo6cGxhdGZvcm1EZXN0cm95KCkK
K3sKK30KKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktp
dC9lZmwvQ2hhbmdlTG9nIGIvU291cmNlL1dlYktpdC9lZmwvQ2hhbmdlTG9nCmluZGV4IDU5NzYz
OGEuLmRhYzgxZTIgMTAwNzU1Ci0tLSBhL1NvdXJjZS9XZWJLaXQvZWZsL0NoYW5nZUxvZworKysg
Yi9Tb3VyY2UvV2ViS2l0L2VmbC9DaGFuZ2VMb2cKQEAgLTEsMyArMSwxNSBAQAorMjAxMS0wOC0y
NiAgTWFyaXVzeiBHcnplZ29yY3p5ayAgPG1hcml1c3ouZ0BzYW1zdW5nLmNvbT4KKworICAgICAg
ICBCdWcgNDQ1MDUgLSBbRUZMXSBNaXNzaW5nIHBsdWdpbnMgc3VwcG9ydCBmb3IgZWZsIHBvcnQK
KyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTQ0NTA1CisK
KyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgSW1wbGVtZW50
YXRpb24gb2YgZXdrX2ZyYW1lX3BsdWdpbl9jcmVhdGUoKSAtIGNyZWF0aW5nIFBsdWdpblZpZXcu
CisKKyAgICAgICAgKiBld2svZXdrX2ZyYW1lLmNwcDoKKyAgICAgICAgKGV3a19mcmFtZV9wbHVn
aW5fY3JlYXRlKToKKwogMjAxMS0wOC0yNSAgUmFwaGFlbCBLdWJvIGRhIENvc3RhICA8a3Vib0Bw
cm9mdXNpb24ubW9iaT4KIAogICAgICAgICBbRUZMXSBBZGQgQVBJIHRvIGFsbG93IHNjcmlwdHMg
dG8gY2xvc2Ugd2luZG93cyBhdXRvbWF0aWNhbGx5IHZpYSBKYXZhU2NyaXB0LgpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYktpdC9lZmwvZXdrL2V3a19mcmFtZS5jcHAgYi9Tb3VyY2UvV2ViS2l0L2Vm
bC9ld2svZXdrX2ZyYW1lLmNwcAppbmRleCBiMDNkNzI3Li5mYWVmNWU3IDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViS2l0L2VmbC9ld2svZXdrX2ZyYW1lLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0L2Vm
bC9ld2svZXdrX2ZyYW1lLmNwcApAQCAtMTYzOSw2ICsxNjM5LDI0IEBAIHZvaWQgZXdrX2ZyYW1l
X2ZvcmNlX2xheW91dChFdmFzX09iamVjdCAqbykKICAqLwogV1RGOjpQYXNzUmVmUHRyPFdlYkNv
cmU6OldpZGdldD4gZXdrX2ZyYW1lX3BsdWdpbl9jcmVhdGUoRXZhc19PYmplY3QgKm8sIGNvbnN0
IFdlYkNvcmU6OkludFNpemUgJnBsdWdpblNpemUsIFdlYkNvcmU6OkhUTUxQbHVnSW5FbGVtZW50
ICplbGVtZW50LCBjb25zdCBXZWJDb3JlOjpLVVJMICZ1cmwsIGNvbnN0IFdURjo6VmVjdG9yPFdU
Rjo6U3RyaW5nPiAmcGFyYW1OYW1lcywgY29uc3QgV1RGOjpWZWN0b3I8V1RGOjpTdHJpbmc+ICZw
YXJhbVZhbHVlcywgY29uc3QgV1RGOjpTdHJpbmcgJm1pbWVUeXBlLCBib29sIGxvYWRNYW51YWxs
eSkKIHsKKyNpZiBFTkFCTEUoTkVUU0NBUEVfUExVR0lOX0FQSSkKKyAgICBEQkcoIm89JXAsIHNp
emU9JWR4JWQsIGVsZW1lbnQ9JXAsIHVybD0lcywgbWltZVR5cGU9JXMiLAorICAgICAgICBvLCBw
bHVnaW5TaXplLndpZHRoKCksIHBsdWdpblNpemUuaGVpZ2h0KCksIGVsZW1lbnQsCisgICAgICAg
IHVybC5wcmV0dHlVUkwoKS51dGY4KCkuZGF0YSgpLCBtaW1lVHlwZS51dGY4KCkuZGF0YSgpKTsK
KworICAgIEVXS19GUkFNRV9TRF9HRVRfT1JfUkVUVVJOKG8sIHNkLCAwKTsKKworICAgIC8vIFRP
RE86IGVtaXQgc2lnbmFsIGFuZCBhc2sgd2Via2l0IHVzZXJzIGlmIHNvbWV0aGluZyBlbHNlIHNo
b3VsZCBiZSBkb25lLgorICAgIC8vIGxpa2UgY3JlYXRpbmcgYW5vdGhlciB4IHdpbmRvdyAoc2Vl
IGd0aywgaXQgYWxsb3dzIHVzZXJzIHRvIGNyZWF0ZQorICAgIC8vIEd0a1BsdWdpbldpZGdldC4K
KworICAgIFdURjo6UmVmUHRyPFdlYkNvcmU6OlBsdWdpblZpZXc+IHBsdWdpblZpZXcgPSBXZWJD
b3JlOjpQbHVnaW5WaWV3OjpjcmVhdGUKKyAgICAgICAgKHNkLT5mcmFtZSwgcGx1Z2luU2l6ZSwg
ZWxlbWVudCwgdXJsLCBwYXJhbU5hbWVzLCBwYXJhbVZhbHVlcywKKyAgICAgICAgbWltZVR5cGUs
IGxvYWRNYW51YWxseSk7CisKKyAgICBpZiAocGx1Z2luVmlldy0+c3RhdHVzKCkgPT0gV2ViQ29y
ZTo6UGx1Z2luU3RhdHVzTG9hZGVkU3VjY2Vzc2Z1bGx5KQorICAgICAgICByZXR1cm4gcGx1Z2lu
VmlldzsKKyNlbmRpZiAvLyAjaWYgRU5BQkxFKE5FVFNDQVBFX1BMVUdJTl9BUEkpCiAgICAgcmV0
dXJuIDA7CiB9CiAK
</data>
<flag name="review"
          id="101485"
          type_id="1"
          status="-"
          setter="leandro"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>107665</attachid>
            <date>2011-09-16 09:35:00 -0700</date>
            <delta_ts>2011-09-20 06:20:06 -0700</delta_ts>
            <desc>EFL&apos;s plugin support</desc>
            <filename>efl_plugins.patch</filename>
            <type>text/plain</type>
            <size>26828</size>
            <attacher name="Mariusz Grzegorczyk">mariusz.g</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cgYi9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvQ2hhbmdlTG9nCmluZGV4IDE5Yjc1NzYuLmYwYTdjZTQgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKKysrIGIvU291cmNlL0phdmFTY3JpcHRD
b3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDE0IEBACisyMDExLTA5LTE2ICBNYXJpdXN6IEdyemVn
b3JjenlrICA8bWFyaXVzei5nQHNhbXN1bmcuY29tPgorCisgICAgICAgIEJ1ZyA0NDUwNSAtIFtF
RkxdIE1pc3NpbmcgcGx1Z2lucyBzdXBwb3J0IGZvciBlZmwgcG9ydAorICAgICAgICBodHRwczov
L2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NDQ1MDUKKworICAgICAgICBSZXZpZXdl
ZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBBZGQgZGVmaW5lIG9mIEVOQUJMRV9QTFVH
SU5fUEFDS0FHRV9TSU1QTEVfSEFTSCBmb3IgZWZsIHBvcnQuCisKKyAgICAgICAgKiB3dGYvUGxh
dGZvcm0uaDoKKwogMjAxMS0wOS0xNSAgRmlsaXAgUGl6bG8gIDxmcGl6bG9AYXBwbGUuY29tPgog
CiAgICAgICAgIERGRyBKSVQgZG9lcyBub3Qgb3B0aW1pemUgbWV0aG9kX2NoZWNrCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd3RmL1BsYXRmb3JtLmggYi9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvd3RmL1BsYXRmb3JtLmgKaW5kZXggODRkOWYxNy4uOGIyOTUxOCAxMDA2NDQKLS0t
IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3d0Zi9QbGF0Zm9ybS5oCisrKyBiL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS93dGYvUGxhdGZvcm0uaApAQCAtMTA5OCw3ICsxMDk4LDcgQEAKICNkZWZpbmUg
V1RGX1VTRV9QUk9URUNUSU9OX1NQQUNFX0FVVEhfQ0FMTEJBQ0sgMQogI2VuZGlmCiAKLSNpZiAh
RU5BQkxFKE5FVFNDQVBFX1BMVUdJTl9BUEkpIHx8IChFTkFCTEUoTkVUU0NBUEVfUExVR0lOX0FQ
SSkgJiYgKChPUyhVTklYKSAmJiAoUExBVEZPUk0oUVQpIHx8IFBMQVRGT1JNKFdYKSkpIHx8IFBM
QVRGT1JNKEdUSykpKQorI2lmICFFTkFCTEUoTkVUU0NBUEVfUExVR0lOX0FQSSkgfHwgKEVOQUJM
RShORVRTQ0FQRV9QTFVHSU5fQVBJKSAmJiAoKE9TKFVOSVgpICYmIChQTEFURk9STShRVCkgfHwg
UExBVEZPUk0oV1gpKSkgfHwgUExBVEZPUk0oR1RLKSB8fCBQTEFURk9STShFRkwpKSkKICNkZWZp
bmUgRU5BQkxFX1BMVUdJTl9QQUNLQUdFX1NJTVBMRV9IQVNIIDEKICNlbmRpZgogCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9DTWFrZUxpc3RzRWZsLnR4dCBiL1NvdXJjZS9XZWJDb3JlL0NN
YWtlTGlzdHNFZmwudHh0CmluZGV4IDMzY2ZhZDQuLjE2MzM0M2QgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL0NNYWtlTGlzdHNFZmwudHh0CisrKyBiL1NvdXJjZS9XZWJDb3JlL0NNYWtlTGlz
dHNFZmwudHh0CkBAIC00LDE1ICs0LDE2IEBAIExJU1QoQVBQRU5EIFdlYkNvcmVfTElOS19GTEFH
UwogKQogCiBMSVNUKEFQUEVORCBXZWJDb3JlX0lOQ0xVREVfRElSRUNUT1JJRVMKKyAgIiR7REVS
SVZFRF9TT1VSQ0VTX0RJUn0iCiAgICIke0pBVkFTQ1JJUFRDT1JFX0RJUn0vd3RmL2dvYmplY3Qi
CisgICIke1dFQkNPUkVfRElSfS9hY2Nlc3NpYmlsaXR5L2VmbCIKKyAgIiR7V0VCQ09SRV9ESVJ9
L3BhZ2UvZWZsIgogICAiJHtXRUJDT1JFX0RJUn0vcGxhdGZvcm0vZWZsIgotICAiJHtXRUJDT1JF
X0RJUn0vcGxhdGZvcm0vdGV4dC9lZmwiCiAgICIke1dFQkNPUkVfRElSfS9wbGF0Zm9ybS9ncmFw
aGljcy9lZmwiCi0gICIke1dFQkNPUkVfRElSfS9wYWdlL2VmbCIKLSAgIiR7V0VCQ09SRV9ESVJ9
L2FjY2Vzc2liaWxpdHkvZWZsIgorICAiJHtXRUJDT1JFX0RJUn0vcGxhdGZvcm0vdGV4dC9lZmwi
CisgICIke1dFQkNPUkVfRElSfS9wbHVnaW5zL2VmbCIKICAgIiR7V0VCS0lUX0RJUn0vZWZsL1dl
YkNvcmVTdXBwb3J0IgogICAiJHtXRUJLSVRfRElSfS9lZmwvZXdrIgotICAiJHtERVJJVkVEX1NP
VVJDRVNfRElSfSIKICkKIAogTElTVChBUFBFTkQgV2ViQ29yZV9TT1VSQ0VTCkBAIC03MiwxMSAr
NzMsMjggQEAgTElTVChBUFBFTkQgV2ViQ29yZV9TT1VSQ0VTCiAgIHBsYXRmb3JtL21vY2svU2Ny
b2xsYmFyVGhlbWVNb2NrLmNwcAogICBwbGF0Zm9ybS9wb3NpeC9GaWxlU3lzdGVtUE9TSVguY3Bw
CiAgIHBsYXRmb3JtL3RleHQvZWZsL1RleHRCcmVha0l0ZXJhdG9ySW50ZXJuYWxJQ1VFZmwuY3Bw
Ci0gIHBsdWdpbnMvUGx1Z2luRGF0YU5vbmUuY3BwCi0gIHBsdWdpbnMvUGx1Z2luUGFja2FnZU5v
bmUuY3BwCi0gIHBsdWdpbnMvUGx1Z2luVmlld05vbmUuY3BwCiApCiAKK0lGIChFTkFCTEVfTkVU
U0NBUEVfUExVR0lOX0FQSSkKKyAgTElTVChBUFBFTkQgV2ViQ29yZV9TT1VSQ0VTCisgICAgcGx1
Z2lucy9QbHVnaW5EYXRhYmFzZS5jcHAKKyAgICBwbHVnaW5zL1BsdWdpbkRlYnVnLmNwcAorICAg
IHBsdWdpbnMvUGx1Z2luUGFja2FnZS5jcHAKKyAgICBwbHVnaW5zL1BsdWdpblN0cmVhbS5jcHAK
KyAgICBwbHVnaW5zL1BsdWdpblZpZXcuY3BwCisKKyAgICBwbHVnaW5zL2VmbC9QbHVnaW5EYXRh
RWZsLmNwcAorICAgIHBsdWdpbnMvZWZsL1BsdWdpblBhY2thZ2VFZmwuY3BwCisgICAgcGx1Z2lu
cy9lZmwvUGx1Z2luVmlld0VmbC5jcHAKKyAgKQorRUxTRSAoKQorICBMSVNUKEFQUEVORCBXZWJD
b3JlX1NPVVJDRVMKKyAgICBwbHVnaW5zL1BsdWdpbkRhdGFOb25lLmNwcAorICAgIHBsdWdpbnMv
UGx1Z2luUGFja2FnZU5vbmUuY3BwCisgICAgcGx1Z2lucy9QbHVnaW5WaWV3Tm9uZS5jcHAKKyAg
KQorRU5ESUYgKCkKKwogTElTVChBUFBFTkQgV2ViQ29yZV9VU0VSX0FHRU5UX1NUWUxFX1NIRUVU
UwogICAgICR7V0VCQ09SRV9ESVJ9L2Nzcy9tZWRpYUNvbnRyb2xzRWZsLmNzcwogKQpAQCAtMTQ4
LDYgKzE2Niw3IEBAIElGIChXVEZfVVNFX1NPVVApCiAgIExJU1QoQVBQRU5EIFdlYkNvcmVfU09V
UkNFUwogICAgIHBsYXRmb3JtL25ldHdvcmsvc291cC9Db29raWVKYXJTb3VwLmNwcAogICAgIHBs
YXRmb3JtL25ldHdvcmsvc291cC9HT3duUHRyU291cC5jcHAKKyAgICBwbGF0Zm9ybS9uZXR3b3Jr
L3NvdXAvUHJveHlTZXJ2ZXJTb3VwLmNwcAogICAgIHBsYXRmb3JtL25ldHdvcmsvc291cC9SZXNv
dXJjZUhhbmRsZVNvdXAuY3BwCiAgICAgcGxhdGZvcm0vbmV0d29yay9zb3VwL1Jlc291cmNlUmVx
dWVzdFNvdXAuY3BwCiAgICAgcGxhdGZvcm0vbmV0d29yay9zb3VwL1Jlc291cmNlUmVzcG9uc2VT
b3VwLmNwcApAQCAtMTY0LDYgKzE4Myw3IEBAIElGIChXVEZfVVNFX0NVUkwpCiAgICAgcGxhdGZv
cm0vbmV0d29yay9jdXJsL0Nvb2tpZUphckN1cmwuY3BwCiAgICAgcGxhdGZvcm0vbmV0d29yay9j
dXJsL0ROU0N1cmwuY3BwCiAgICAgcGxhdGZvcm0vbmV0d29yay9jdXJsL0Zvcm1EYXRhU3RyZWFt
Q3VybC5jcHAKKyAgICBwbGF0Zm9ybS9uZXR3b3JrL2N1cmwvUHJveHlTZXJ2ZXJDdXJsLmNwcAog
ICAgIHBsYXRmb3JtL25ldHdvcmsvY3VybC9SZXNvdXJjZUhhbmRsZUN1cmwuY3BwCiAgICAgcGxh
dGZvcm0vbmV0d29yay9jdXJsL1Jlc291cmNlSGFuZGxlTWFuYWdlci5jcHAKICAgICBwbGF0Zm9y
bS9uZXR3b3JrL2N1cmwvU29ja2V0U3RyZWFtSGFuZGxlQ3VybC5jcHAKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwppbmRleCAz
OTk4ZTU4Li4yZTA2NTFhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKKysr
IGIvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsNDcgQEAKKzIwMTEtMDktMTYg
IE1hcml1c3ogR3J6ZWdvcmN6eWsgIDxtYXJpdXN6LmdAc2Ftc3VuZy5jb20+CisKKyAgICAgICAg
QnVnIDQ0NTA1IC0gW0VGTF0gTWlzc2luZyBwbHVnaW5zIHN1cHBvcnQgZm9yIGVmbCBwb3J0Cisg
ICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD00NDUwNQorCisg
ICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIEJhc2ljIGZ1bmN0
aW9uYWxpdHkgb2YgcGx1Z2lucyBmb3IgZWZsIHBvcnQuCisKKyAgICAgICAgVGVtcGxhdGUgdmVy
c2lvbiwgc28gbm8gbmV3IHRlc3RzIGFyZSBuZWVkZWQuCisKKyAgICAgICAgKiBDTWFrZUxpc3Rz
RWZsLnR4dDoKKyAgICAgICAgKiBwbHVnaW5zL1BsdWdpblZpZXcuaDoKKyAgICAgICAgKiBwbHVn
aW5zL2VmbC9QbHVnaW5EYXRhRWZsLmNwcDogQWRkZWQuCisgICAgICAgIChXZWJDb3JlOjpQbHVn
aW5EYXRhOjppbml0UGx1Z2lucyk6CisgICAgICAgIChXZWJDb3JlOjpQbHVnaW5EYXRhOjpyZWZy
ZXNoKToKKyAgICAgICAgKiBwbHVnaW5zL2VmbC9QbHVnaW5QYWNrYWdlRWZsLmNwcDogQWRkZWQu
CisgICAgICAgIChXZWJDb3JlOjpQbHVnaW5QYWNrYWdlOjpmZXRjaEluZm8pOgorICAgICAgICAo
V2ViQ29yZTo6UGx1Z2luUGFja2FnZTo6TlBWZXJzaW9uKToKKyAgICAgICAgKFdlYkNvcmU6OlBs
dWdpblBhY2thZ2U6OmxvYWQpOgorICAgICAgICAqIHBsdWdpbnMvZWZsL1BsdWdpblZpZXdFZmwu
Y3BwOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6OlBsdWdpblZpZXc6OmRpc3BhdGNoTlBFdmVu
dCk6CisgICAgICAgIChXZWJDb3JlOjpQbHVnaW5WaWV3OjpoYW5kbGVGb2N1c0luRXZlbnQpOgor
ICAgICAgICAoV2ViQ29yZTo6UGx1Z2luVmlldzo6aGFuZGxlRm9jdXNPdXRFdmVudCk6CisgICAg
ICAgIChXZWJDb3JlOjpQbHVnaW5WaWV3OjpoYW5kbGVLZXlib2FyZEV2ZW50KToKKyAgICAgICAg
KFdlYkNvcmU6OlBsdWdpblZpZXc6OmhhbmRsZU1vdXNlRXZlbnQpOgorICAgICAgICAoV2ViQ29y
ZTo6UGx1Z2luVmlldzo6dXBkYXRlUGx1Z2luV2lkZ2V0KToKKyAgICAgICAgKFdlYkNvcmU6OlBs
dWdpblZpZXc6OnNldEZvY3VzKToKKyAgICAgICAgKFdlYkNvcmU6OlBsdWdpblZpZXc6OnNob3cp
OgorICAgICAgICAoV2ViQ29yZTo6UGx1Z2luVmlldzo6aGlkZSk6CisgICAgICAgIChXZWJDb3Jl
OjpQbHVnaW5WaWV3OjpwYWludCk6CisgICAgICAgIChXZWJDb3JlOjpQbHVnaW5WaWV3OjpzZXRQ
YXJlbnQpOgorICAgICAgICAoV2ViQ29yZTo6UGx1Z2luVmlldzo6c2V0TlBXaW5kb3dSZWN0KToK
KyAgICAgICAgKFdlYkNvcmU6OlBsdWdpblZpZXc6OnNldE5QV2luZG93SWZOZWVkZWQpOgorICAg
ICAgICAoV2ViQ29yZTo6UGx1Z2luVmlldzo6c2V0UGFyZW50VmlzaWJsZSk6CisgICAgICAgIChX
ZWJDb3JlOjpQbHVnaW5WaWV3OjpoYW5kbGVQb3N0UmVhZEZpbGUpOgorICAgICAgICAoV2ViQ29y
ZTo6UGx1Z2luVmlldzo6cGxhdGZvcm1HZXRWYWx1ZVN0YXRpYyk6CisgICAgICAgIChXZWJDb3Jl
OjpQbHVnaW5WaWV3OjpwbGF0Zm9ybUdldFZhbHVlKToKKyAgICAgICAgKFdlYkNvcmU6OlBsdWdp
blZpZXc6OmludmFsaWRhdGVSZWN0KToKKyAgICAgICAgKFdlYkNvcmU6OlBsdWdpblZpZXc6Omlu
dmFsaWRhdGVSZWdpb24pOgorICAgICAgICAoV2ViQ29yZTo6UGx1Z2luVmlldzo6Zm9yY2VSZWRy
YXcpOgorICAgICAgICAoV2ViQ29yZTo6UGx1Z2luVmlldzo6cGxhdGZvcm1TdGFydCk6CisgICAg
ICAgIChXZWJDb3JlOjpQbHVnaW5WaWV3OjpwbGF0Zm9ybURlc3Ryb3kpOgorCiAyMDExLTA5LTE2
ICBBbmRyZXkgS29zeWFrb3YgIDxjYXNlcUBjaHJvbWl1bS5vcmc+CiAKICAgICAgICAgV2ViIElu
c3BlY3RvcjogW0V4dGVuc2lvbnMgQVBJXSBzdXBwb3J0IGV4dGVuc2lvbnMgZm9yIHJlbW90ZSBp
bnNwZWN0b3IgZnJvbnQtZW5kCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbHVnaW5zL1Bs
dWdpblZpZXcuaCBiL1NvdXJjZS9XZWJDb3JlL3BsdWdpbnMvUGx1Z2luVmlldy5oCmluZGV4IDA3
YzNjNjcuLmU5Y2YyMDggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsdWdpbnMvUGx1Z2lu
Vmlldy5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsdWdpbnMvUGx1Z2luVmlldy5oCkBAIC0zNzMs
NyArMzczLDcgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogICAgICAgICBib29sIG1faGF2ZVVwZGF0
ZWRQbHVnaW5XaWRnZXQ7CiAjZW5kaWYKIAotI2lmICgoUExBVEZPUk0oUVQpIHx8IFBMQVRGT1JN
KFdYKSkgJiYgT1MoV0lORE9XUykpIHx8IGRlZmluZWQoWFBfTUFDT1NYKQorI2lmICgoUExBVEZP
Uk0oUVQpIHx8IFBMQVRGT1JNKFdYKSkgJiYgT1MoV0lORE9XUykpIHx8IGRlZmluZWQoWFBfTUFD
T1NYKSB8fCBQTEFURk9STShFRkwpCiAgICAgICAgIC8vIE9uIE1hYyBPU1ggYW5kIFF0L1dpbmRv
d3MgdGhlIHBsdWdpbiBkb2VzIG5vdCBoYXZlIGl0cyBvd24gbmF0aXZlIHdpZGdldCwKICAgICAg
ICAgLy8gYnV0IGlzIHVzaW5nIHRoZSBjb250YWluaW5nIHdpbmRvdyBhcyBpdHMgcmVmZXJlbmNl
IGZvciBwb3NpdGlvbmluZy9wYWludGluZy4KICAgICAgICAgUGxhdGZvcm1QbHVnaW5XaWRnZXQg
bV93aW5kb3c7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbHVnaW5zL2VmbC9QbHVnaW5E
YXRhRWZsLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsdWdpbnMvZWZsL1BsdWdpbkRhdGFFZmwuY3Bw
Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmMyMWQ1MWIKLS0tIC9kZXYvbnVs
bAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbHVnaW5zL2VmbC9QbHVnaW5EYXRhRWZsLmNwcApAQCAt
MCwwICsxLDY2IEBACisvKgorICAgIENvcHlyaWdodCAoQykgMjAwNiwgMjAwNyBBcHBsZSBJbmMu
ICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICAgIENvcHlyaWdodCAoQykgMjAwOCBUcm9sbHRlY2gg
QVNBCisgICAgQ29weXJpZ2h0IChDKSAyMDA4IENvbGxhYm9yYSBMdGQuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCisgICAgQ29weXJpZ2h0IChDKSAyMDA4IElOZFQgLSBJbnN0aXR1dG8gTm9raWEgZGUg
VGVjbm9sb2dpYQorICAgIENvcHlyaWdodCAoQykgMjAwOS0yMDEwIFByb0ZVU0lPTiBlbWJlZGRl
ZCBzeXN0ZW1zCisgICAgQ29weXJpZ2h0IChDKSAyMDA5LTIwMTEgU2Ftc3VuZyBFbGVjdHJvbmlj
cworCisgICAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmli
dXRlIGl0IGFuZC9vcgorICAgIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBM
aWJyYXJ5IEdlbmVyYWwgUHVibGljCisgICAgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZy
ZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgICAgdmVyc2lvbiAyIG9mIHRoZSBMaWNl
bnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorCisgICAgVGhpcyBs
aWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWws
CisgICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQg
d2FycmFudHkgb2YKKyAgICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNV
TEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICAgIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGlj
ZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorCisgICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEg
Y29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICAgIGFsb25n
IHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdy
aXRlIHRvCisgICAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmts
aW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKKyAgICBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4K
KyovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJQbHVnaW5EYXRhLmgiCisKKyNp
bmNsdWRlICJQbHVnaW5EYXRhYmFzZS5oIgorI2luY2x1ZGUgIlBsdWdpblBhY2thZ2UuaCIKKwor
bmFtZXNwYWNlIFdlYkNvcmUgeworCit2b2lkIFBsdWdpbkRhdGE6OmluaXRQbHVnaW5zKGNvbnN0
IFBhZ2UqKQoreworICAgIGNvbnN0IFZlY3RvcjxQbHVnaW5QYWNrYWdlKj4mIHBsdWdpbnMgPSBQ
bHVnaW5EYXRhYmFzZTo6aW5zdGFsbGVkUGx1Z2lucygpLT5wbHVnaW5zKCk7CisKKyAgICBmb3Ig
KHNpemVfdCBpID0gMDsgaSA8IHBsdWdpbnMuc2l6ZSgpOyArK2kpIHsKKyAgICAgICAgUGx1Z2lu
UGFja2FnZSogcGFja2FnZSA9IHBsdWdpbnNbaV07CisgICAgICAgIFBsdWdpbkluZm8gaW5mbzsK
KworICAgICAgICBpbmZvLm5hbWUgPSBwYWNrYWdlLT5uYW1lKCk7CisgICAgICAgIGluZm8uZmls
ZSA9IHBhY2thZ2UtPmZpbGVOYW1lKCk7CisgICAgICAgIGluZm8uZGVzYyA9IHBhY2thZ2UtPmRl
c2NyaXB0aW9uKCk7CisKKyAgICAgICAgY29uc3QgTUlNRVRvRGVzY3JpcHRpb25zTWFwJiBtaW1l
VG9EZXNjcmlwdGlvbnMgPSBwYWNrYWdlLT5taW1lVG9EZXNjcmlwdGlvbnMoKTsKKyAgICAgICAg
TUlNRVRvRGVzY3JpcHRpb25zTWFwOjpjb25zdF9pdGVyYXRvciBlbmQgPSBtaW1lVG9EZXNjcmlw
dGlvbnMuZW5kKCk7CisgICAgICAgIGZvciAoTUlNRVRvRGVzY3JpcHRpb25zTWFwOjpjb25zdF9p
dGVyYXRvciBpdCA9IG1pbWVUb0Rlc2NyaXB0aW9ucy5iZWdpbigpOyBpdCAhPSBlbmQ7ICsraXQp
IHsKKyAgICAgICAgICAgIE1pbWVDbGFzc0luZm8gbWltZTsKKworICAgICAgICAgICAgbWltZS50
eXBlID0gaXQtPmZpcnN0OworICAgICAgICAgICAgbWltZS5kZXNjID0gaXQtPnNlY29uZDsKKyAg
ICAgICAgICAgIG1pbWUuZXh0ZW5zaW9ucyA9IHBhY2thZ2UtPm1pbWVUb0V4dGVuc2lvbnMoKS5n
ZXQobWltZS50eXBlKTsKKworICAgICAgICAgICAgaW5mby5taW1lcy5hcHBlbmQobWltZSk7Cisg
ICAgICAgIH0KKworICAgICAgICBtX3BsdWdpbnMuYXBwZW5kKGluZm8pOworICAgIH0KK30KKwor
dm9pZCBQbHVnaW5EYXRhOjpyZWZyZXNoKCkKK3sKKyAgICBQbHVnaW5EYXRhYmFzZTo6aW5zdGFs
bGVkUGx1Z2lucygpLT5yZWZyZXNoKCk7Cit9CisKK307CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9wbHVnaW5zL2VmbC9QbHVnaW5QYWNrYWdlRWZsLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3Bs
dWdpbnMvZWZsL1BsdWdpblBhY2thZ2VFZmwuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4
IDAwMDAwMDAuLjIxOGFlYTYKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbHVn
aW5zL2VmbC9QbHVnaW5QYWNrYWdlRWZsLmNwcApAQCAtMCwwICsxLDE2OCBAQAorLyoKKyAqIENv
cHlyaWdodCAoQykgMjAwNiwgMjAwNyBBcHBsZSBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgor
ICogQ29weXJpZ2h0IChDKSAyMDA4IENvbGxhYm9yYSBMdGQuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CisgKiBDb3B5cmlnaHQgKEMpIDIwMDggTnVhbnRpIEx0ZC4KKyAqIENvcHlyaWdodCAoQykgMjAw
OCBJTmRUIC0gSW5zdGl0dXRvIE5va2lhIGRlIFRlY25vbG9naWEKKyAqIENvcHlyaWdodCAoQykg
MjAwOS0yMDEwIFByb0ZVU0lPTiBlbWJlZGRlZCBzeXN0ZW1zCisgKiBDb3B5cmlnaHQgKEMpIDIw
MDktMjAxMSBTYW1zdW5nIEVsZWN0cm9uaWNzCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVz
ZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmlj
YXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlv
bnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVz
dCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmli
dXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVy
aWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FS
RSBJUyBQUk9WSURFRCBCWSBBUFBMRSBDT01QVVRFUiwgSU5DLiBgYEFTIElTJycgQU5EIEFOWQor
ICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5E
IEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElO
IE5PIEVWRU5UIFNIQUxMIEFQUExFIENPTVBVVEVSLCBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMg
QkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwK
KyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VS
VklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5U
RVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklM
SVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAo
SU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VU
IE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUg
UE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgor
I2luY2x1ZGUgIlBsdWdpblBhY2thZ2UuaCIKKworI2luY2x1ZGUgIk1JTUVUeXBlUmVnaXN0cnku
aCIKKyNpbmNsdWRlICJOb3RJbXBsZW1lbnRlZC5oIgorI2luY2x1ZGUgIlBsdWdpbkRhdGFiYXNl
LmgiCisjaW5jbHVkZSAiUGx1Z2luRGVidWcuaCIKKyNpbmNsdWRlICJucHJ1bnRpbWVfaW1wbC5o
IgorCisjaW5jbHVkZSA8RWluYS5oPgorI2luY2x1ZGUgPGRsZmNuLmg+CisjaW5jbHVkZSA8d3Rm
L3RleHQvQ1N0cmluZy5oPgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK3R5cGVkZWYgY2hhciog
KCpOUFBfR2V0TUlNRURlc2NyaXB0aW9uUHJvY1B0cikoKTsKKworYm9vbCBQbHVnaW5QYWNrYWdl
OjpmZXRjaEluZm8oKQoreworICAgIGNvbnN0IGNoYXIgKmVycm1zZzsKKworICAgIGlmICghbG9h
ZCgpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBOUFBfR2V0VmFsdWVQcm9jUHRyIGdl
dFZhbHVlID0gMDsKKyAgICBOUFBfR2V0TUlNRURlc2NyaXB0aW9uUHJvY1B0ciBnZXRNSU1FRGVz
Y3JpcHRpb24gPSAwOworCisgICAgZ2V0VmFsdWUgPSByZWludGVycHJldF9jYXN0PE5QUF9HZXRW
YWx1ZVByb2NQdHI+KGRsc3ltKG1fbW9kdWxlLCAiTlBfR2V0VmFsdWUiKSk7CisgICAgaWYgKChl
cnJtc2cgPSBkbGVycm9yKCkpKSB7CisgICAgICAgIEVJTkFfTE9HX0VSUigiQ291bGQgbm90IGdl
dCBzeW1ib2wgTlBfR2V0VmFsdWU6ICVzIiwgZXJybXNnKTsKKyAgICAgICAgcmV0dXJuIGZhbHNl
OworICAgIH0KKworICAgIGdldE1JTUVEZXNjcmlwdGlvbiA9IHJlaW50ZXJwcmV0X2Nhc3Q8TlBQ
X0dldE1JTUVEZXNjcmlwdGlvblByb2NQdHI+KGRsc3ltKG1fbW9kdWxlLCAiTlBfR2V0TUlNRURl
c2NyaXB0aW9uIikpOworICAgIGlmICgoZXJybXNnID0gZGxlcnJvcigpKSkgeworICAgICAgICBF
SU5BX0xPR19FUlIoIkNvdWxkIG5vdCBnZXQgc3ltYm9sIE5QX0dldE1JTUVEZXNjcmlwdGlvbjog
JXMiLCBlcnJtc2cpOworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorCisgICAgY2hhciog
YnVmZmVyID0gMDsKKyAgICBOUEVycm9yIGVyciA9IGdldFZhbHVlKDAsIE5QUFZwbHVnaW5OYW1l
U3RyaW5nLCBzdGF0aWNfY2FzdDx2b2lkKj4oJmJ1ZmZlcikpOworICAgIGlmIChlcnIgIT0gTlBF
UlJfTk9fRVJST1IpCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICBtX25hbWUgPSBidWZmZXI7
CisKKyAgICBidWZmZXIgPSAwOworICAgIGVyciA9IGdldFZhbHVlKDAsIE5QUFZwbHVnaW5EZXNj
cmlwdGlvblN0cmluZywgc3RhdGljX2Nhc3Q8dm9pZCo+KCZidWZmZXIpKTsKKyAgICBpZiAoZXJy
ICE9IE5QRVJSX05PX0VSUk9SKQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgbV9kZXNjcmlw
dGlvbiA9IGJ1ZmZlcjsKKyAgICBkZXRlcm1pbmVNb2R1bGVWZXJzaW9uRnJvbURlc2NyaXB0aW9u
KCk7CisKKyAgICBTdHJpbmcgZGVzY3JpcHRpb24gPSBnZXRNSU1FRGVzY3JpcHRpb24oKTsKKwor
ICAgIFZlY3RvcjxTdHJpbmc+IHR5cGVzOworICAgIGRlc2NyaXB0aW9uLnNwbGl0KFVDaGFyKCc7
JyksIGZhbHNlLCB0eXBlcyk7CisKKyAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IHR5cGVzLnNp
emUoKTsgKytpKSB7CisgICAgICAgIFZlY3RvcjxTdHJpbmc+IG1pbWU7CisgICAgICAgIHR5cGVz
W2ldLnNwbGl0KFVDaGFyKCc6JyksIHRydWUsIG1pbWUpOworCisgICAgICAgIGlmICghbWltZS5p
c0VtcHR5KCkgPiAwKSB7CisgICAgICAgICAgICBWZWN0b3I8U3RyaW5nPiBleHRzOworCisgICAg
ICAgICAgICBpZiAobWltZS5zaXplKCkgPiAxKQorICAgICAgICAgICAgICAgIG1pbWVbMV0uc3Bs
aXQoVUNoYXIoJywnKSwgZmFsc2UsIGV4dHMpOworCisgICAgICAgICAgICBkZXRlcm1pbmVRdWly
a3MobWltZVswXSk7CisgICAgICAgICAgICBtX21pbWVUb0V4dGVuc2lvbnMuYWRkKG1pbWVbMF0s
IGV4dHMpOworCisgICAgICAgICAgICBpZiAobWltZS5zaXplKCkgPiAyKQorICAgICAgICAgICAg
ICAgIG1fbWltZVRvRGVzY3JpcHRpb25zLmFkZChtaW1lWzBdLCBtaW1lWzJdKTsKKyAgICAgICAg
fQorICAgIH0KKworICAgIHJldHVybiB0cnVlOworfQorCit1aW50MTZfdCBQbHVnaW5QYWNrYWdl
OjpOUFZlcnNpb24oKSBjb25zdAoreworICAgIHJldHVybiBOUFZFUlNfSEFTX1BMVUdJTl9USFJF
QURfQVNZTkNfQ0FMTDsKK30KKworYm9vbCBQbHVnaW5QYWNrYWdlOjpsb2FkKCkKK3sKKyAgICBj
aGFyKiBlcnJtc2c7CisKKyAgICBpZiAobV9pc0xvYWRlZCkgeworICAgICAgICBtX2xvYWRDb3Vu
dCsrOworICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CisKKyAgICBtX21vZHVsZSA9IGRsb3Bl
bihtX3BhdGgudXRmOCgpLmRhdGEoKSwgUlRMRF9MQVpZIHwgUlRMRF9MT0NBTCk7CisgICAgaWYg
KChlcnJtc2cgPSBkbGVycm9yKCkpKSB7CisgICAgICAgIEVJTkFfTE9HX1dBUk4oIiVzIG5vdCBs
b2FkZWQ6ICVzIiwgbV9wYXRoLnV0ZjgoKS5kYXRhKCksIGVycm1zZyk7CisgICAgICAgIHJldHVy
biBmYWxzZTsKKyAgICB9CisKKyAgICBtX2lzTG9hZGVkID0gdHJ1ZTsKKworICAgIE5QX0luaXRp
YWxpemVGdW5jUHRyIGluaXRpYWxpemU7CisgICAgTlBFcnJvciBlcnI7CisKKyAgICBpbml0aWFs
aXplID0gKE5QX0luaXRpYWxpemVGdW5jUHRyKWRsc3ltKG1fbW9kdWxlLCAiTlBfSW5pdGlhbGl6
ZSIpOworICAgIGlmICgoZXJybXNnID0gZGxlcnJvcigpKSkgeworICAgICAgICBFSU5BX0xPR19F
UlIoIkNvdWxkIG5vdCBnZXQgc3ltYm9sIE5QX0luaXRpYWxpemU6ICVzIiwgZXJybXNnKTsKKyAg
ICAgICAgZ290byBhYm9ydDsKKyAgICB9CisKKyAgICBtX05QUF9TaHV0ZG93biA9IChOUFBfU2h1
dGRvd25Qcm9jUHRyKWRsc3ltKG1fbW9kdWxlLCAiTlBfU2h1dGRvd24iKTsKKyAgICBpZiAoKGVy
cm1zZyA9IGRsZXJyb3IoKSkpIHsKKyAgICAgICAgRUlOQV9MT0dfRVJSKCJDb3VsZCBub3QgZ2V0
IHN5bWJvbCBOUF9TaHV0ZG93bjogJXMiLCBlcnJtc2cpOworICAgICAgICBnb3RvIGFib3J0Owor
ICAgIH0KKworICAgIG1lbXNldCgmbV9wbHVnaW5GdW5jcywgMCwgc2l6ZW9mKG1fcGx1Z2luRnVu
Y3MpKTsKKyAgICBtX3BsdWdpbkZ1bmNzLnNpemUgPSBzaXplb2YobV9wbHVnaW5GdW5jcyk7CisK
KyAgICBpbml0aWFsaXplQnJvd3NlckZ1bmNzKCk7CisKKyNpZiBkZWZpbmVkKFhQX1VOSVgpCisg
ICAgZXJyID0gaW5pdGlhbGl6ZSgmbV9icm93c2VyRnVuY3MsICZtX3BsdWdpbkZ1bmNzKTsKKyNl
bHNlCisgICAgZXJyID0gaW5pdGlhbGl6ZSgmbV9icm93c2VyRnVuY3MpOworI2VuZGlmCisgICAg
aWYgKGVyciAhPSBOUEVSUl9OT19FUlJPUikKKyAgICAgICAgZ290byBhYm9ydDsKKworICAgIG1f
bG9hZENvdW50Kys7CisgICAgcmV0dXJuIHRydWU7CisKK2Fib3J0OgorICAgIEVJTkFfTE9HX0RC
RygiZmFpbGVkIHRvIGxvYWQgcGx1Z2luLCB1bmxvYWQgaXQgd2l0aG91dCBzaHV0dGluZyBpdCBk
b3duLiIpOworICAgIHVubG9hZFdpdGhvdXRTaHV0ZG93bigpOworICAgIHJldHVybiBmYWxzZTsK
K30KKworfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGx1Z2lucy9lZmwvUGx1Z2luVmll
d0VmbC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbHVnaW5zL2VmbC9QbHVnaW5WaWV3RWZsLmNwcApu
ZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iZmE2MDEyCi0tLSAvZGV2L251bGwK
KysrIGIvU291cmNlL1dlYkNvcmUvcGx1Z2lucy9lZmwvUGx1Z2luVmlld0VmbC5jcHAKQEAgLTAs
MCArMSwzNzIgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDYsIDIwMDcgQXBwbGUgSW5jLiAg
QWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAwOCBDb2xsYWJvcmEgTHRk
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDA4IElOZFQgLSBJbnN0
aXR1dG8gTm9raWEgZGUgVGVjbm9sb2dpYQorICogQ29weXJpZ2h0IChDKSAyMDA5LTIwMTAgUHJv
RlVTSU9OIGVtYmVkZGVkIHN5c3RlbXMKKyAqIENvcHlyaWdodCAoQykgMjAwOS0yMDExIFNhbXN1
bmcgRWxlY3Ryb25pY3MKKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBh
bmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBl
cm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1l
dDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUg
YWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmlu
YXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGlu
IHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVk
IHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVE
IEJZIEFQUExFIENPTVBVVEVSLCBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9S
IElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQor
ICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1Ig
QSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hB
TEwgQVBQTEUgQ09NUFVURVIsIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9S
IEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZ
LCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBP
RiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhP
V0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIg
SU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVH
TElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQor
ICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBP
RiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiUGx1
Z2luVmlldy5oIgorCisjaW5jbHVkZSAiRnJhbWUuaCIKKyNpbmNsdWRlICJGcmFtZVZpZXcuaCIK
KyNpbmNsdWRlICJHcmFwaGljc0NvbnRleHQuaCIKKyNpbmNsdWRlICJIVE1MTmFtZXMuaCIKKyNp
bmNsdWRlICJIVE1MUGx1Z0luRWxlbWVudC5oIgorI2luY2x1ZGUgIkhvc3RXaW5kb3cuaCIKKyNp
bmNsdWRlICJNb3VzZUV2ZW50LmgiCisjaW5jbHVkZSAiTm90SW1wbGVtZW50ZWQuaCIKKyNpbmNs
dWRlICJQbHVnaW5QYWNrYWdlLmgiCisjaW5jbHVkZSAibnBydW50aW1lX2ltcGwuaCIKKyNpbmNs
dWRlICJydW50aW1lL0pTTG9jay5oIgorI2luY2x1ZGUgPEVjb3JlX0V2YXMuaD4KKyNpbmNsdWRl
IDxFY29yZV9YLmg+CisjaW5jbHVkZSA8RXZhcy5oPgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisK
K3VzaW5nIG5hbWVzcGFjZSBIVE1MTmFtZXM7CisKKyNpZiBFTkFCTEUoTkVUU0NBUEVfUExVR0lO
X0FQSSkKK2Jvb2wgUGx1Z2luVmlldzo6ZGlzcGF0Y2hOUEV2ZW50KE5QRXZlbnQmIGV2ZW50KQor
eworICAgIGlmICghbV9wbHVnaW4tPnBsdWdpbkZ1bmNzKCktPmV2ZW50KQorICAgICAgICByZXR1
cm4gZmFsc2U7CisKKyAgICBQbHVnaW5WaWV3OjpzZXRDdXJyZW50UGx1Z2luVmlldyh0aGlzKTsK
KyAgICBKU0M6OkpTTG9jazo6RHJvcEFsbExvY2tzIGRyb3BBbGxMb2NrcyhmYWxzZSk7CisgICAg
c2V0Q2FsbGluZ1BsdWdpbih0cnVlKTsKKworICAgIGJvb2wgYWNjZXB0ZWQgPSBtX3BsdWdpbi0+
cGx1Z2luRnVuY3MoKS0+ZXZlbnQobV9pbnN0YW5jZSwgJmV2ZW50KTsKKworICAgIHNldENhbGxp
bmdQbHVnaW4oZmFsc2UpOworICAgIFBsdWdpblZpZXc6OnNldEN1cnJlbnRQbHVnaW5WaWV3KDAp
OworICAgIHJldHVybiBhY2NlcHRlZDsKK30KKyNlbmRpZgorCisjaWYgZGVmaW5lZChYUF9VTklY
KSAmJiBFTkFCTEUoTkVUU0NBUEVfUExVR0lOX0FQSSkKK3ZvaWQgUGx1Z2luVmlldzo6aGFuZGxl
Rm9jdXNJbkV2ZW50KCkKK3sKKyAgICBub3RJbXBsZW1lbnRlZCgpOworfQorCit2b2lkIFBsdWdp
blZpZXc6OmhhbmRsZUZvY3VzT3V0RXZlbnQoKQoreworICAgIG5vdEltcGxlbWVudGVkKCk7Cit9
CisjZW5kaWYKKwordm9pZCBQbHVnaW5WaWV3OjpoYW5kbGVLZXlib2FyZEV2ZW50KEtleWJvYXJk
RXZlbnQqKQoreworICAgIG5vdEltcGxlbWVudGVkKCk7Cit9CisKK3ZvaWQgUGx1Z2luVmlldzo6
aGFuZGxlTW91c2VFdmVudChNb3VzZUV2ZW50KiBldmVudCkKK3sKKyNpZiBFTkFCTEUoTkVUU0NB
UEVfUExVR0lOX0FQSSkKKyAgICBOUEV2ZW50IHhFdmVudDsKKworICAgIEludFJlY3QgcmVjdCA9
IHN0YXRpY19jYXN0PEZyYW1lVmlldyo+KHBhcmVudCgpKS0+Y29udGVudHNUb1NjcmVlbihJbnRS
ZWN0KDAsIDAsIGV2ZW50LT5vZmZzZXRYKCksIGV2ZW50LT5vZmZzZXRZKCkpKTsKKyAgICBpbnQg
ZXZlbnRYID0gcmVjdC53aWR0aCgpOworICAgIGludCBldmVudFkgPSByZWN0LmhlaWdodCgpOwor
ICAgIGlmIChldmVudC0+dHlwZSgpID09IGV2ZW50TmFtZXMoKS5tb3VzZW1vdmVFdmVudAorICAg
ICAgICAgICAgfHwgZXZlbnQtPnR5cGUoKSA9PSBldmVudE5hbWVzKCkubW91c2VvdXRFdmVudAor
ICAgICAgICAgICAgfHwgZXZlbnQtPnR5cGUoKSA9PSBldmVudE5hbWVzKCkubW91c2VvdmVyRXZl
bnQpIHsKKyAgICAgICAgeEV2ZW50LnR5cGUgPSBNb3Rpb25Ob3RpZnk7CisgICAgICAgIHhFdmVu
dC54bW90aW9uLnggPSBldmVudFg7CisgICAgICAgIHhFdmVudC54bW90aW9uLnkgPSBldmVudFk7
CisgICAgfSBlbHNlIGlmIChldmVudC0+dHlwZSgpID09IGV2ZW50TmFtZXMoKS5tb3VzZWRvd25F
dmVudCkgeworICAgICAgICB4RXZlbnQudHlwZSA9IEJ1dHRvblByZXNzOworICAgICAgICB4RXZl
bnQueGJ1dHRvbi54ID0gZXZlbnRYOworICAgICAgICB4RXZlbnQueGJ1dHRvbi55ID0gZXZlbnRZ
OworICAgICAgICB4RXZlbnQueGJ1dHRvbi5idXR0b24gPSBldmVudC0+YnV0dG9uKCkgKyAxOyAv
LyBET00gTW91c2VFdmVudCBjb3VudHMgZnJvbSAwLCBhbmQgWEJ1dHRvbkV2ZW50IGZyb20gMS4K
KyAgICB9IGVsc2UgaWYgKGV2ZW50LT50eXBlKCkgPT0gZXZlbnROYW1lcygpLm1vdXNldXBFdmVu
dCkgeworICAgICAgICB4RXZlbnQudHlwZSA9IEJ1dHRvblJlbGVhc2U7CisgICAgICAgIHhFdmVu
dC54YnV0dG9uLnggPSBldmVudFg7CisgICAgICAgIHhFdmVudC54YnV0dG9uLnkgPSBldmVudFk7
CisgICAgICAgIHhFdmVudC54YnV0dG9uLmJ1dHRvbiA9IGV2ZW50LT5idXR0b24oKSArIDE7Cisg
ICAgfSBlbHNlCisgICAgICAgIHJldHVybjsKKworICAgIGlmIChkaXNwYXRjaE5QRXZlbnQoeEV2
ZW50KSkKKyAgICAgICAgZXZlbnQtPnNldERlZmF1bHRIYW5kbGVkKCk7CisjZWxzZQorICAgIG5v
dEltcGxlbWVudGVkKCk7CisjZW5kaWYKK30KKwordm9pZCBQbHVnaW5WaWV3Ojp1cGRhdGVQbHVn
aW5XaWRnZXQoKQoreworICAgIGlmICghcGFyZW50KCkgfHwgIW1faXNXaW5kb3dlZCkKKyAgICAg
ICAgcmV0dXJuOworCisgICAgQVNTRVJUKHBhcmVudCgpLT5pc0ZyYW1lVmlldygpKTsKKyAgICBG
cmFtZVZpZXcqIGZyYW1lVmlldyA9IHN0YXRpY19jYXN0PEZyYW1lVmlldyo+KHBhcmVudCgpKTsK
KworICAgIEludFJlY3Qgb2xkV2luZG93UmVjdCA9IG1fd2luZG93UmVjdDsKKyAgICBJbnRSZWN0
IG9sZENsaXBSZWN0ID0gbV9jbGlwUmVjdDsKKworICAgIG1fd2luZG93UmVjdCA9IGZyYW1lVmll
dy0+Y29udGVudHNUb1NjcmVlbihmcmFtZVJlY3QoKSk7CisKKyAgICBtX2NsaXBSZWN0ID0gd2lu
ZG93Q2xpcFJlY3QoKTsKKyAgICBtX2NsaXBSZWN0Lm1vdmUoLW1fd2luZG93UmVjdC54KCksIC1t
X3dpbmRvd1JlY3QueSgpKTsKK30KKwordm9pZCBQbHVnaW5WaWV3OjpzZXRGb2N1cyhib29sIGZv
Y3VzZWQpCit7CisgICAgaWYgKGZvY3VzZWQpCisgICAgICAgIG1fZWxlbWVudC0+ZG9jdW1lbnQo
KS0+c2V0Rm9jdXNlZE5vZGUobV9lbGVtZW50KTsKKworICAgIFdpZGdldDo6c2V0Rm9jdXMoZm9j
dXNlZCk7Cit9CisKK3ZvaWQgUGx1Z2luVmlldzo6c2hvdygpCit7CisgICAgc2V0U2VsZlZpc2li
bGUodHJ1ZSk7CisKKyAgICBXaWRnZXQ6OnNob3coKTsKK30KKwordm9pZCBQbHVnaW5WaWV3Ojpo
aWRlKCkKK3sKKyAgICBzZXRTZWxmVmlzaWJsZShmYWxzZSk7CisKKyAgICBXaWRnZXQ6OmhpZGUo
KTsKK30KKwordm9pZCBQbHVnaW5WaWV3OjpwYWludChHcmFwaGljc0NvbnRleHQqIGNvbnRleHQs
IGNvbnN0IEludFJlY3QmIHJlY3QpCit7CisgICAgaWYgKCFtX2lzU3RhcnRlZCkgeworICAgICAg
ICBwYWludE1pc3NpbmdQbHVnaW5JY29uKGNvbnRleHQsIHJlY3QpOworICAgICAgICByZXR1cm47
CisgICAgfQorfQorCit2b2lkIFBsdWdpblZpZXc6OnNldFBhcmVudChTY3JvbGxWaWV3KiBwYXJl
bnQpCit7CisgICAgV2lkZ2V0OjpzZXRQYXJlbnQocGFyZW50KTsKKworICAgIGlmIChwYXJlbnQp
CisgICAgICAgIGluaXQoKTsKK30KKwordm9pZCBQbHVnaW5WaWV3OjpzZXROUFdpbmRvd1JlY3Qo
Y29uc3QgSW50UmVjdCYgcmVjdCkKK3sKKyAgICBub3RJbXBsZW1lbnRlZCgpOworICAgIHJldHVy
bjsKK30KKwordm9pZCBQbHVnaW5WaWV3OjpzZXROUFdpbmRvd0lmTmVlZGVkKCkKK3sKK30KKwor
dm9pZCBQbHVnaW5WaWV3OjpzZXRQYXJlbnRWaXNpYmxlKGJvb2wgdmlzaWJsZSkKK3sKKyAgICBp
ZiAoaXNQYXJlbnRWaXNpYmxlKCkgPT0gdmlzaWJsZSkKKyAgICAgICAgcmV0dXJuOworCisgICAg
V2lkZ2V0OjpzZXRQYXJlbnRWaXNpYmxlKHZpc2libGUpOworfQorCisjaWYgRU5BQkxFKE5FVFND
QVBFX1BMVUdJTl9BUEkpCitOUEVycm9yIFBsdWdpblZpZXc6OmhhbmRsZVBvc3RSZWFkRmlsZShW
ZWN0b3I8Y2hhcj4mIGJ1ZmZlciwgdWludDMyX3QgbGVuLCBjb25zdCBjaGFyKiBidWYpCit7Cisg
ICAgU3RyaW5nIGZpbGVuYW1lKGJ1ZiwgbGVuKTsKKworICAgIGlmIChmaWxlbmFtZS5zdGFydHNX
aXRoKCJmaWxlOi8vLyIpKQorICAgICAgICBmaWxlbmFtZSA9IGZpbGVuYW1lLnN1YnN0cmluZyg4
KTsKKworICAgIGlmICghZmlsZUV4aXN0cyhmaWxlbmFtZSkpCisgICAgICAgIHJldHVybiBOUEVS
Ul9GSUxFX05PVF9GT1VORDsKKworICAgIEZJTEUqIGZpbGVIYW5kbGUgPSBmb3BlbihmaWxlbmFt
ZS51dGY4KCkuZGF0YSgpLCAiciIpOworCisgICAgaWYgKCFmaWxlSGFuZGxlKQorICAgICAgICBy
ZXR1cm4gTlBFUlJfRklMRV9OT1RfRk9VTkQ7CisKKyAgICBpbnQgYnl0ZXNSZWFkID0gZnJlYWQo
YnVmZmVyLmRhdGEoKSwgMSwgMCwgZmlsZUhhbmRsZSk7CisKKyAgICBmY2xvc2UoZmlsZUhhbmRs
ZSk7CisKKyAgICBpZiAoYnl0ZXNSZWFkIDw9IDApCisgICAgICAgIHJldHVybiBOUEVSUl9GSUxF
X05PVF9GT1VORDsKKworICAgIHJldHVybiBOUEVSUl9OT19FUlJPUjsKK30KKyNlbmRpZgorCisj
aWYgRU5BQkxFKE5FVFNDQVBFX1BMVUdJTl9BUEkpCitib29sIFBsdWdpblZpZXc6OnBsYXRmb3Jt
R2V0VmFsdWVTdGF0aWMoTlBOVmFyaWFibGUgdmFyaWFibGUsIHZvaWQqIHZhbHVlLCBOUEVycm9y
KiByZXN1bHQpCit7CisgICAgc3dpdGNoICh2YXJpYWJsZSkgeworICAgIGNhc2UgTlBOVlRvb2xr
aXQ6CisgICAgICAgICpzdGF0aWNfY2FzdDx1aW50MzJfdCo+KHZhbHVlKSA9IDA7CisgICAgICAg
ICpyZXN1bHQgPSBOUEVSUl9OT19FUlJPUjsKKyAgICAgICAgcmV0dXJuIHRydWU7CisKKyAgICBj
YXNlIE5QTlZTdXBwb3J0c1hFbWJlZEJvb2w6CisgICAgICAgICpzdGF0aWNfY2FzdDxOUEJvb2wq
Pih2YWx1ZSkgPSBmYWxzZTsKKyAgICAgICAgKnJlc3VsdCA9IE5QRVJSX05PX0VSUk9SOworICAg
ICAgICByZXR1cm4gdHJ1ZTsKKworICAgIGNhc2UgTlBOVmphdmFzY3JpcHRFbmFibGVkQm9vbDoK
KyAgICAgICAgKnN0YXRpY19jYXN0PE5QQm9vbCo+KHZhbHVlKSA9IHRydWU7CisgICAgICAgICpy
ZXN1bHQgPSBOUEVSUl9OT19FUlJPUjsKKyAgICAgICAgcmV0dXJuIHRydWU7CisKKyAgICBjYXNl
IE5QTlZTdXBwb3J0c1dpbmRvd2xlc3M6CisgICAgICAgICpzdGF0aWNfY2FzdDxOUEJvb2wqPih2
YWx1ZSkgPSBmYWxzZTsKKyAgICAgICAgKnJlc3VsdCA9IE5QRVJSX05PX0VSUk9SOworICAgICAg
ICByZXR1cm4gdHJ1ZTsKKworICAgIGRlZmF1bHQ6CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAg
ICB9Cit9CisKK2Jvb2wgUGx1Z2luVmlldzo6cGxhdGZvcm1HZXRWYWx1ZShOUE5WYXJpYWJsZSB2
YXJpYWJsZSwgdm9pZCogdmFsdWUsIE5QRXJyb3IqIHJlc3VsdCkKK3sKKyAgICBpZiAoIXZhbHVl
IHx8ICFyZXN1bHQpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIHN3aXRjaCAodmFyaWFi
bGUpIHsKKyAgICBjYXNlIE5QTlZ4RGlzcGxheToKKyAgICAgICAgKnN0YXRpY19jYXN0PHZvaWQg
Kio+KHZhbHVlKSA9IHN0YXRpY19jYXN0PERpc3BsYXkqPihlY29yZV94X2Rpc3BsYXlfZ2V0KCkp
OworICAgICAgICAqcmVzdWx0ID0gTlBFUlJfTk9fRVJST1I7CisgICAgICAgIHJldHVybiB0cnVl
OworCisgICAgY2FzZSBOUE5WeHRBcHBDb250ZXh0OgorICAgICAgICAqcmVzdWx0ID0gTlBFUlJf
R0VORVJJQ19FUlJPUjsKKyAgICAgICAgcmV0dXJuIHRydWU7CisKKyAgICBjYXNlIE5QTlZXaW5k
b3dOUE9iamVjdDogeworICAgICAgICBpZiAobV9pc0phdmFTY3JpcHRQYXVzZWQpIHsKKyAgICAg
ICAgICAgICpyZXN1bHQgPSBOUEVSUl9HRU5FUklDX0VSUk9SOworICAgICAgICAgICAgcmV0dXJu
IHRydWU7CisgICAgICAgIH0KKworICAgICAgICBOUE9iamVjdCogd2luZG93U2NyaXB0T2JqZWN0
ID0gbV9wYXJlbnRGcmFtZS0+c2NyaXB0KCktPndpbmRvd1NjcmlwdE5QT2JqZWN0KCk7CisKKyAg
ICAgICAgLy8gUmV0dXJuIHZhbHVlIGlzIGV4cGVjdGVkIHRvIGJlIHJldGFpbmVkLCBhcyBkZXNj
cmliZWQgaGVyZTogPGh0dHA6Ly93d3cubW96aWxsYS5vcmcvcHJvamVjdHMvcGx1Z2luL25wcnVu
dGltZS5odG1sPgorICAgICAgICBpZiAod2luZG93U2NyaXB0T2JqZWN0KQorICAgICAgICAgICAg
X05QTl9SZXRhaW5PYmplY3Qod2luZG93U2NyaXB0T2JqZWN0KTsKKworICAgICAgICB2b2lkKiog
diA9ICh2b2lkKiopdmFsdWU7CisgICAgICAgICp2ID0gd2luZG93U2NyaXB0T2JqZWN0OworCisg
ICAgICAgICpyZXN1bHQgPSBOUEVSUl9OT19FUlJPUjsKKyAgICAgICAgcmV0dXJuIHRydWU7Cisg
ICAgfQorCisgICAgY2FzZSBOUE5WUGx1Z2luRWxlbWVudE5QT2JqZWN0OiB7CisgICAgICAgIGlm
IChtX2lzSmF2YVNjcmlwdFBhdXNlZCkgeworICAgICAgICAgICAgKnJlc3VsdCA9IE5QRVJSX0dF
TkVSSUNfRVJST1I7CisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgfQorCisgICAg
ICAgIE5QT2JqZWN0KiBwbHVnaW5TY3JpcHRPYmplY3QgPSAwOworCisgICAgICAgIGlmIChtX2Vs
ZW1lbnQtPmhhc1RhZ05hbWUoYXBwbGV0VGFnKSB8fCBtX2VsZW1lbnQtPmhhc1RhZ05hbWUoZW1i
ZWRUYWcpIHx8IG1fZWxlbWVudC0+aGFzVGFnTmFtZShvYmplY3RUYWcpKQorICAgICAgICAgICAg
cGx1Z2luU2NyaXB0T2JqZWN0ID0gc3RhdGljX2Nhc3Q8SFRNTFBsdWdJbkVsZW1lbnQqPihtX2Vs
ZW1lbnQpLT5nZXROUE9iamVjdCgpOworCisgICAgICAgIC8vIFJldHVybiB2YWx1ZSBpcyBleHBl
Y3RlZCB0byBiZSByZXRhaW5lZCwgYXMgZGVzY3JpYmVkIGhlcmU6IDxodHRwOi8vd3d3Lm1vemls
bGEub3JnL3Byb2plY3RzL3BsdWdpbi9ucHJ1bnRpbWUuaHRtbD4KKyAgICAgICAgaWYgKHBsdWdp
blNjcmlwdE9iamVjdCkKKyAgICAgICAgICAgIF9OUE5fUmV0YWluT2JqZWN0KHBsdWdpblNjcmlw
dE9iamVjdCk7CisKKyAgICAgICAgdm9pZCoqIHYgPSAodm9pZCoqKXZhbHVlOworICAgICAgICAq
diA9IHBsdWdpblNjcmlwdE9iamVjdDsKKworICAgICAgICAqcmVzdWx0ID0gTlBFUlJfTk9fRVJS
T1I7CisgICAgICAgIHJldHVybiB0cnVlOworICAgIH0KKworICAgIGNhc2UgTlBOVm5ldHNjYXBl
V2luZG93OiB7CisgICAgICAgIHZvaWQqIHcgPSByZWludGVycHJldF9jYXN0PHZvaWQqPih2YWx1
ZSk7CisgICAgICAgIEV2YXNfT2JqZWN0KiB3aWRnZXQgPSBtX3BhcmVudEZyYW1lLT52aWV3KCkt
Pmhvc3RXaW5kb3coKS0+cGxhdGZvcm1QYWdlQ2xpZW50KCk7CisgICAgICAgIEV2YXMqIGV2YXMg
PSBldmFzX29iamVjdF9ldmFzX2dldCh3aWRnZXQpOworICAgICAgICBFY29yZV9FdmFzKiBlZSA9
IGVjb3JlX2V2YXNfZWNvcmVfZXZhc19nZXQoZXZhcyk7CisgICAgICAgICooKFhJRCAqKXcpID0g
KFdpbmRvdykgZWNvcmVfZXZhc193aW5kb3dfZ2V0KGVlKTsKKyAgICAgICAgKnJlc3VsdCA9IE5Q
RVJSX05PX0VSUk9SOworICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CisKKyAgICBjYXNlIE5Q
TlZUb29sa2l0OgorICAgICAgICBpZiAobV9wbHVnaW4tPnF1aXJrcygpLmNvbnRhaW5zKFBsdWdp
blF1aXJrUmVxdWlyZXNHdGtUb29sS2l0KSkgeworICAgICAgICAgICAgKigodWludDMyX3QgKil2
YWx1ZSkgPSAyOworICAgICAgICAgICAgKnJlc3VsdCA9IE5QRVJSX05PX0VSUk9SOworICAgICAg
ICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAg
ICAgICAvLyBmYWxsIHRocm91Z2gKKyAgICBkZWZhdWx0OgorICAgICAgICByZXR1cm4gZmFsc2U7
CisgICAgfQorfQorI2VuZGlmCisKK3ZvaWQgUGx1Z2luVmlldzo6aW52YWxpZGF0ZVJlY3QoY29u
c3QgSW50UmVjdCYgcmVjdCkKK3sKKyAgICBpbnZhbGlkYXRlV2luZG93bGVzc1BsdWdpblJlY3Qo
cmVjdCk7Cit9CisKKyNpZiBFTkFCTEUoTkVUU0NBUEVfUExVR0lOX0FQSSkKK3ZvaWQgUGx1Z2lu
Vmlldzo6aW52YWxpZGF0ZVJlY3QoTlBSZWN0KiByZWN0KQoreworICAgIGlmICghcmVjdCkgewor
ICAgICAgICBpbnZhbGlkYXRlKCk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBJbnRS
ZWN0IHIocmVjdC0+bGVmdCwgcmVjdC0+dG9wLCByZWN0LT5yaWdodCAtIHJlY3QtPmxlZnQsIHJl
Y3QtPmJvdHRvbSAtIHJlY3QtPnRvcCk7CisKKyAgICBpbnZhbGlkYXRlUmVjdChyKTsKK30KKwor
dm9pZCBQbHVnaW5WaWV3OjppbnZhbGlkYXRlUmVnaW9uKE5QUmVnaW9uIHJlZ2lvbikKK3sKKyAg
ICBub3RJbXBsZW1lbnRlZCgpOworfQorI2VuZGlmCisKK3ZvaWQgUGx1Z2luVmlldzo6Zm9yY2VS
ZWRyYXcoKQoreworICAgIG5vdEltcGxlbWVudGVkKCk7Cit9CisKK2Jvb2wgUGx1Z2luVmlldzo6
cGxhdGZvcm1TdGFydCgpCit7CisgICAgQVNTRVJUKG1faXNTdGFydGVkKTsKKyAgICBBU1NFUlQo
bV9zdGF0dXMgPT0gUGx1Z2luU3RhdHVzTG9hZGVkU3VjY2Vzc2Z1bGx5KTsKKworICAgIG5vdElt
cGxlbWVudGVkKCk7CisgICAgcmV0dXJuIHRydWU7Cit9CisKK3ZvaWQgUGx1Z2luVmlldzo6cGxh
dGZvcm1EZXN0cm95KCkKK3sKK30KKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYktpdC9lZmwvQ2hhbmdlTG9nIGIvU291cmNlL1dlYktpdC9lZmwvQ2hhbmdl
TG9nCmluZGV4IDU0N2ExNjkuLjEzZjAwMzcgMTAwNzU1Ci0tLSBhL1NvdXJjZS9XZWJLaXQvZWZs
L0NoYW5nZUxvZworKysgYi9Tb3VyY2UvV2ViS2l0L2VmbC9DaGFuZ2VMb2cKQEAgLTEsMyArMSwx
NSBAQAorMjAxMS0wOS0xNiAgTWFyaXVzeiBHcnplZ29yY3p5ayAgPG1hcml1c3ouZ0BzYW1zdW5n
LmNvbT4KKworICAgICAgICBCdWcgNDQ1MDUgLSBbRUZMXSBNaXNzaW5nIHBsdWdpbnMgc3VwcG9y
dCBmb3IgZWZsIHBvcnQKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcu
Y2dpP2lkPTQ0NTA1CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAg
ICAgICAgSW1wbGVtZW50YXRpb24gb2YgZXdrX2ZyYW1lX3BsdWdpbl9jcmVhdGUoKSAtIGNyZWF0
aW5nIFBsdWdpblZpZXcuCisKKyAgICAgICAgKiBld2svZXdrX2ZyYW1lLmNwcDoKKyAgICAgICAg
KGV3a19mcmFtZV9wbHVnaW5fY3JlYXRlKToKKwogMjAxMS0wOS0xNSAgQWRhbSBCYXJ0aCAgPGFi
YXJ0aEB3ZWJraXQub3JnPgogCiAgICAgICAgIFJlbmFtZSBFTkFCTEUoREFUQUJBU0UpIHRvIEVO
QUJMRShTUUxfREFUQUJBU0UpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L2VmbC9ld2svZXdr
X2ZyYW1lLmNwcCBiL1NvdXJjZS9XZWJLaXQvZWZsL2V3ay9ld2tfZnJhbWUuY3BwCmluZGV4IGRh
NDM0NDAuLmVjZjc5MzEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvZWZsL2V3ay9ld2tfZnJh
bWUuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvZWZsL2V3ay9ld2tfZnJhbWUuY3BwCkBAIC0xNjMy
LDYgKzE2MzIsMjQgQEAgdm9pZCBld2tfZnJhbWVfZm9yY2VfbGF5b3V0KEV2YXNfT2JqZWN0ICpv
KQogICovCiBXVEY6OlBhc3NSZWZQdHI8V2ViQ29yZTo6V2lkZ2V0PiBld2tfZnJhbWVfcGx1Z2lu
X2NyZWF0ZShFdmFzX09iamVjdCAqbywgY29uc3QgV2ViQ29yZTo6SW50U2l6ZSAmcGx1Z2luU2l6
ZSwgV2ViQ29yZTo6SFRNTFBsdWdJbkVsZW1lbnQgKmVsZW1lbnQsIGNvbnN0IFdlYkNvcmU6OktV
UkwgJnVybCwgY29uc3QgV1RGOjpWZWN0b3I8V1RGOjpTdHJpbmc+ICZwYXJhbU5hbWVzLCBjb25z
dCBXVEY6OlZlY3RvcjxXVEY6OlN0cmluZz4gJnBhcmFtVmFsdWVzLCBjb25zdCBXVEY6OlN0cmlu
ZyAmbWltZVR5cGUsIGJvb2wgbG9hZE1hbnVhbGx5KQogeworI2lmIEVOQUJMRShORVRTQ0FQRV9Q
TFVHSU5fQVBJKQorICAgIERCRygibz0lcCwgc2l6ZT0lZHglZCwgZWxlbWVudD0lcCwgdXJsPSVz
LCBtaW1lVHlwZT0lcyIsCisgICAgICAgIG8sIHBsdWdpblNpemUud2lkdGgoKSwgcGx1Z2luU2l6
ZS5oZWlnaHQoKSwgZWxlbWVudCwKKyAgICAgICAgdXJsLnN0cmluZygpLnV0ZjgoKS5kYXRhKCks
IG1pbWVUeXBlLnV0ZjgoKS5kYXRhKCkpOworCisgICAgRVdLX0ZSQU1FX1NEX0dFVF9PUl9SRVRV
Uk4obywgc2QsIDApOworCisgICAgLy8gVE9ETzogZW1pdCBzaWduYWwgYW5kIGFzayB3ZWJraXQg
dXNlcnMgaWYgc29tZXRoaW5nIGVsc2Ugc2hvdWxkIGJlIGRvbmUuCisgICAgLy8gbGlrZSBjcmVh
dGluZyBhbm90aGVyIHggd2luZG93IChzZWUgZ3RrLCBpdCBhbGxvd3MgdXNlcnMgdG8gY3JlYXRl
CisgICAgLy8gR3RrUGx1Z2luV2lkZ2V0LgorCisgICAgV1RGOjpSZWZQdHI8V2ViQ29yZTo6UGx1
Z2luVmlldz4gcGx1Z2luVmlldyA9IFdlYkNvcmU6OlBsdWdpblZpZXc6OmNyZWF0ZQorICAgICAg
ICAoc2QtPmZyYW1lLCBwbHVnaW5TaXplLCBlbGVtZW50LCB1cmwsIHBhcmFtTmFtZXMsIHBhcmFt
VmFsdWVzLAorICAgICAgICBtaW1lVHlwZSwgbG9hZE1hbnVhbGx5KTsKKworICAgIGlmIChwbHVn
aW5WaWV3LT5zdGF0dXMoKSA9PSBXZWJDb3JlOjpQbHVnaW5TdGF0dXNMb2FkZWRTdWNjZXNzZnVs
bHkpCisgICAgICAgIHJldHVybiBwbHVnaW5WaWV3OworI2VuZGlmIC8vICNpZiBFTkFCTEUoTkVU
U0NBUEVfUExVR0lOX0FQSSkKICAgICByZXR1cm4gMDsKIH0KIAo=
</data>
<flag name="review"
          id="104407"
          type_id="1"
          status="-"
          setter="rakuco"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>107993</attachid>
            <date>2011-09-20 06:20:06 -0700</date>
            <delta_ts>2011-11-14 08:29:27 -0800</delta_ts>
            <desc>EFL&apos;s plugin support</desc>
            <filename>efl_plugins.patch</filename>
            <type>text/plain</type>
            <size>26504</size>
            <attacher name="Mariusz Grzegorczyk">mariusz.g</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cgYi9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvQ2hhbmdlTG9nCmluZGV4IDE5Yjc1NzYuLmYwYTdjZTQgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKKysrIGIvU291cmNlL0phdmFTY3JpcHRD
b3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDE0IEBACisyMDExLTA5LTE2ICBNYXJpdXN6IEdyemVn
b3JjenlrICA8bWFyaXVzei5nQHNhbXN1bmcuY29tPgorCisgICAgICAgIEJ1ZyA0NDUwNSAtIFtF
RkxdIE1pc3NpbmcgcGx1Z2lucyBzdXBwb3J0IGZvciBlZmwgcG9ydAorICAgICAgICBodHRwczov
L2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NDQ1MDUKKworICAgICAgICBSZXZpZXdl
ZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBBZGQgZGVmaW5lIG9mIEVOQUJMRV9QTFVH
SU5fUEFDS0FHRV9TSU1QTEVfSEFTSCBmb3IgZWZsIHBvcnQuCisKKyAgICAgICAgKiB3dGYvUGxh
dGZvcm0uaDoKKwogMjAxMS0wOS0xNSAgRmlsaXAgUGl6bG8gIDxmcGl6bG9AYXBwbGUuY29tPgog
CiAgICAgICAgIERGRyBKSVQgZG9lcyBub3Qgb3B0aW1pemUgbWV0aG9kX2NoZWNrCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd3RmL1BsYXRmb3JtLmggYi9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvd3RmL1BsYXRmb3JtLmgKaW5kZXggODRkOWYxNy4uOGIyOTUxOCAxMDA2NDQKLS0t
IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3d0Zi9QbGF0Zm9ybS5oCisrKyBiL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS93dGYvUGxhdGZvcm0uaApAQCAtMTA5OCw3ICsxMDk4LDcgQEAKICNkZWZpbmUg
V1RGX1VTRV9QUk9URUNUSU9OX1NQQUNFX0FVVEhfQ0FMTEJBQ0sgMQogI2VuZGlmCiAKLSNpZiAh
RU5BQkxFKE5FVFNDQVBFX1BMVUdJTl9BUEkpIHx8IChFTkFCTEUoTkVUU0NBUEVfUExVR0lOX0FQ
SSkgJiYgKChPUyhVTklYKSAmJiAoUExBVEZPUk0oUVQpIHx8IFBMQVRGT1JNKFdYKSkpIHx8IFBM
QVRGT1JNKEdUSykpKQorI2lmICFFTkFCTEUoTkVUU0NBUEVfUExVR0lOX0FQSSkgfHwgKEVOQUJM
RShORVRTQ0FQRV9QTFVHSU5fQVBJKSAmJiAoKE9TKFVOSVgpICYmIChQTEFURk9STShRVCkgfHwg
UExBVEZPUk0oV1gpKSkgfHwgUExBVEZPUk0oR1RLKSB8fCBQTEFURk9STShFRkwpKSkKICNkZWZp
bmUgRU5BQkxFX1BMVUdJTl9QQUNLQUdFX1NJTVBMRV9IQVNIIDEKICNlbmRpZgogCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9DTWFrZUxpc3RzRWZsLnR4dCBiL1NvdXJjZS9XZWJDb3JlL0NN
YWtlTGlzdHNFZmwudHh0CmluZGV4IDMzY2ZhZDQuLjE2MzM0M2QgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL0NNYWtlTGlzdHNFZmwudHh0CisrKyBiL1NvdXJjZS9XZWJDb3JlL0NNYWtlTGlz
dHNFZmwudHh0CkBAIC00LDE1ICs0LDE2IEBAIExJU1QoQVBQRU5EIFdlYkNvcmVfTElOS19GTEFH
UwogKQogCiBMSVNUKEFQUEVORCBXZWJDb3JlX0lOQ0xVREVfRElSRUNUT1JJRVMKKyAgIiR7REVS
SVZFRF9TT1VSQ0VTX0RJUn0iCiAgICIke0pBVkFTQ1JJUFRDT1JFX0RJUn0vd3RmL2dvYmplY3Qi
CisgICIke1dFQkNPUkVfRElSfS9hY2Nlc3NpYmlsaXR5L2VmbCIKKyAgIiR7V0VCQ09SRV9ESVJ9
L3BhZ2UvZWZsIgogICAiJHtXRUJDT1JFX0RJUn0vcGxhdGZvcm0vZWZsIgotICAiJHtXRUJDT1JF
X0RJUn0vcGxhdGZvcm0vdGV4dC9lZmwiCiAgICIke1dFQkNPUkVfRElSfS9wbGF0Zm9ybS9ncmFw
aGljcy9lZmwiCi0gICIke1dFQkNPUkVfRElSfS9wYWdlL2VmbCIKLSAgIiR7V0VCQ09SRV9ESVJ9
L2FjY2Vzc2liaWxpdHkvZWZsIgorICAiJHtXRUJDT1JFX0RJUn0vcGxhdGZvcm0vdGV4dC9lZmwi
CisgICIke1dFQkNPUkVfRElSfS9wbHVnaW5zL2VmbCIKICAgIiR7V0VCS0lUX0RJUn0vZWZsL1dl
YkNvcmVTdXBwb3J0IgogICAiJHtXRUJLSVRfRElSfS9lZmwvZXdrIgotICAiJHtERVJJVkVEX1NP
VVJDRVNfRElSfSIKICkKIAogTElTVChBUFBFTkQgV2ViQ29yZV9TT1VSQ0VTCkBAIC03MiwxMSAr
NzMsMjggQEAgTElTVChBUFBFTkQgV2ViQ29yZV9TT1VSQ0VTCiAgIHBsYXRmb3JtL21vY2svU2Ny
b2xsYmFyVGhlbWVNb2NrLmNwcAogICBwbGF0Zm9ybS9wb3NpeC9GaWxlU3lzdGVtUE9TSVguY3Bw
CiAgIHBsYXRmb3JtL3RleHQvZWZsL1RleHRCcmVha0l0ZXJhdG9ySW50ZXJuYWxJQ1VFZmwuY3Bw
Ci0gIHBsdWdpbnMvUGx1Z2luRGF0YU5vbmUuY3BwCi0gIHBsdWdpbnMvUGx1Z2luUGFja2FnZU5v
bmUuY3BwCi0gIHBsdWdpbnMvUGx1Z2luVmlld05vbmUuY3BwCiApCiAKK0lGIChFTkFCTEVfTkVU
U0NBUEVfUExVR0lOX0FQSSkKKyAgTElTVChBUFBFTkQgV2ViQ29yZV9TT1VSQ0VTCisgICAgcGx1
Z2lucy9QbHVnaW5EYXRhYmFzZS5jcHAKKyAgICBwbHVnaW5zL1BsdWdpbkRlYnVnLmNwcAorICAg
IHBsdWdpbnMvUGx1Z2luUGFja2FnZS5jcHAKKyAgICBwbHVnaW5zL1BsdWdpblN0cmVhbS5jcHAK
KyAgICBwbHVnaW5zL1BsdWdpblZpZXcuY3BwCisKKyAgICBwbHVnaW5zL2VmbC9QbHVnaW5EYXRh
RWZsLmNwcAorICAgIHBsdWdpbnMvZWZsL1BsdWdpblBhY2thZ2VFZmwuY3BwCisgICAgcGx1Z2lu
cy9lZmwvUGx1Z2luVmlld0VmbC5jcHAKKyAgKQorRUxTRSAoKQorICBMSVNUKEFQUEVORCBXZWJD
b3JlX1NPVVJDRVMKKyAgICBwbHVnaW5zL1BsdWdpbkRhdGFOb25lLmNwcAorICAgIHBsdWdpbnMv
UGx1Z2luUGFja2FnZU5vbmUuY3BwCisgICAgcGx1Z2lucy9QbHVnaW5WaWV3Tm9uZS5jcHAKKyAg
KQorRU5ESUYgKCkKKwogTElTVChBUFBFTkQgV2ViQ29yZV9VU0VSX0FHRU5UX1NUWUxFX1NIRUVU
UwogICAgICR7V0VCQ09SRV9ESVJ9L2Nzcy9tZWRpYUNvbnRyb2xzRWZsLmNzcwogKQpAQCAtMTQ4
LDYgKzE2Niw3IEBAIElGIChXVEZfVVNFX1NPVVApCiAgIExJU1QoQVBQRU5EIFdlYkNvcmVfU09V
UkNFUwogICAgIHBsYXRmb3JtL25ldHdvcmsvc291cC9Db29raWVKYXJTb3VwLmNwcAogICAgIHBs
YXRmb3JtL25ldHdvcmsvc291cC9HT3duUHRyU291cC5jcHAKKyAgICBwbGF0Zm9ybS9uZXR3b3Jr
L3NvdXAvUHJveHlTZXJ2ZXJTb3VwLmNwcAogICAgIHBsYXRmb3JtL25ldHdvcmsvc291cC9SZXNv
dXJjZUhhbmRsZVNvdXAuY3BwCiAgICAgcGxhdGZvcm0vbmV0d29yay9zb3VwL1Jlc291cmNlUmVx
dWVzdFNvdXAuY3BwCiAgICAgcGxhdGZvcm0vbmV0d29yay9zb3VwL1Jlc291cmNlUmVzcG9uc2VT
b3VwLmNwcApAQCAtMTY0LDYgKzE4Myw3IEBAIElGIChXVEZfVVNFX0NVUkwpCiAgICAgcGxhdGZv
cm0vbmV0d29yay9jdXJsL0Nvb2tpZUphckN1cmwuY3BwCiAgICAgcGxhdGZvcm0vbmV0d29yay9j
dXJsL0ROU0N1cmwuY3BwCiAgICAgcGxhdGZvcm0vbmV0d29yay9jdXJsL0Zvcm1EYXRhU3RyZWFt
Q3VybC5jcHAKKyAgICBwbGF0Zm9ybS9uZXR3b3JrL2N1cmwvUHJveHlTZXJ2ZXJDdXJsLmNwcAog
ICAgIHBsYXRmb3JtL25ldHdvcmsvY3VybC9SZXNvdXJjZUhhbmRsZUN1cmwuY3BwCiAgICAgcGxh
dGZvcm0vbmV0d29yay9jdXJsL1Jlc291cmNlSGFuZGxlTWFuYWdlci5jcHAKICAgICBwbGF0Zm9y
bS9uZXR3b3JrL2N1cmwvU29ja2V0U3RyZWFtSGFuZGxlQ3VybC5jcHAKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwppbmRleCAz
OTk4ZTU4Li5hNDlhZTJjIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKKysr
IGIvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsNDcgQEAKKzIwMTEtMDktMTYg
IE1hcml1c3ogR3J6ZWdvcmN6eWsgIDxtYXJpdXN6LmdAc2Ftc3VuZy5jb20+CisKKyAgICAgICAg
QnVnIDQ0NTA1IC0gW0VGTF0gTWlzc2luZyBwbHVnaW5zIHN1cHBvcnQgZm9yIGVmbCBwb3J0Cisg
ICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD00NDUwNQorCisg
ICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIEJhc2ljIGZ1bmN0
aW9uYWxpdHkgb2YgcGx1Z2lucyBmb3IgZWZsIHBvcnQuCisKKyAgICAgICAgVGVtcGxhdGUgdmVy
c2lvbiwgc28gbm8gbmV3IHRlc3RzIGFyZSBuZWVkZWQuCisKKyAgICAgICAgKiBDTWFrZUxpc3Rz
RWZsLnR4dDoKKyAgICAgICAgKiBwbHVnaW5zL1BsdWdpblZpZXcuaDoKKyAgICAgICAgKiBwbHVn
aW5zL2VmbC9QbHVnaW5EYXRhRWZsLmNwcDogQWRkZWQuIENvcGllZCBmcm9tIHBsdWdpbnMvZ3Rr
L1BsdWdpbkRhdGFHdGsuY3BwLgorICAgICAgICAoV2ViQ29yZTo6UGx1Z2luRGF0YTo6aW5pdFBs
dWdpbnMpOiBGaWxsIG1pbWUvZGVzY3JpcHRpb24vZXh0ZW5zaW9uIG1hcHMgZm9yIHBsdWdpbnMu
CisgICAgICAgIChXZWJDb3JlOjpQbHVnaW5EYXRhOjpyZWZyZXNoKTogUmVmcmVzaCBwbHVnaW4n
cyBkYXRhYmFzZS4KKyAgICAgICAgKiBwbHVnaW5zL2VmbC9QbHVnaW5QYWNrYWdlRWZsLmNwcDog
QWRkZWQuIENvcGllZCBmcm9tIHBsdWdpbnMvZ3RrL1BsdWdpblBhY2thZ2VHdGsuY3BwLgorICAg
ICAgICAoV2ViQ29yZTo6UGx1Z2luUGFja2FnZTo6ZmV0Y2hJbmZvKTogR2V0IGluZm8gZnJvbSBw
bHVnaW4ncyBsaWJyYXJ5IGFib3V0IG5hbWUgYW5kIG1pbWUgc3VwcG9ydGVkLgorICAgICAgICAo
V2ViQ29yZTo6UGx1Z2luUGFja2FnZTo6TlBWZXJzaW9uKToKKyAgICAgICAgKFdlYkNvcmU6OlBs
dWdpblBhY2thZ2U6OmxvYWQpOiBMb2FkIHBsdWdpbi4KKyAgICAgICAgKiBwbHVnaW5zL2VmbC9Q
bHVnaW5WaWV3RWZsLmNwcDogQWRkZWQuIENvcGllZCBmcm9tIHBsdWdpbnMvZ3RrL1BsdWdpblZp
ZXdHdGsuY3BwLgorICAgICAgICAoV2ViQ29yZTo6UGx1Z2luVmlldzo6ZGlzcGF0Y2hOUEV2ZW50
KToKKyAgICAgICAgKFdlYkNvcmU6OlBsdWdpblZpZXc6OmhhbmRsZUZvY3VzSW5FdmVudCk6Cisg
ICAgICAgIChXZWJDb3JlOjpQbHVnaW5WaWV3OjpoYW5kbGVGb2N1c091dEV2ZW50KToKKyAgICAg
ICAgKFdlYkNvcmU6OlBsdWdpblZpZXc6OmhhbmRsZUtleWJvYXJkRXZlbnQpOgorICAgICAgICAo
V2ViQ29yZTo6UGx1Z2luVmlldzo6aGFuZGxlTW91c2VFdmVudCk6CisgICAgICAgIChXZWJDb3Jl
OjpQbHVnaW5WaWV3Ojp1cGRhdGVQbHVnaW5XaWRnZXQpOgorICAgICAgICAoV2ViQ29yZTo6UGx1
Z2luVmlldzo6c2V0Rm9jdXMpOgorICAgICAgICAoV2ViQ29yZTo6UGx1Z2luVmlldzo6c2hvdyk6
CisgICAgICAgIChXZWJDb3JlOjpQbHVnaW5WaWV3OjpoaWRlKToKKyAgICAgICAgKFdlYkNvcmU6
OlBsdWdpblZpZXc6OnBhaW50KToKKyAgICAgICAgKFdlYkNvcmU6OlBsdWdpblZpZXc6OnNldFBh
cmVudCk6CisgICAgICAgIChXZWJDb3JlOjpQbHVnaW5WaWV3OjpzZXROUFdpbmRvd1JlY3QpOgor
ICAgICAgICAoV2ViQ29yZTo6UGx1Z2luVmlldzo6c2V0TlBXaW5kb3dJZk5lZWRlZCk6CisgICAg
ICAgIChXZWJDb3JlOjpQbHVnaW5WaWV3OjpzZXRQYXJlbnRWaXNpYmxlKToKKyAgICAgICAgKFdl
YkNvcmU6OlBsdWdpblZpZXc6OmhhbmRsZVBvc3RSZWFkRmlsZSk6CisgICAgICAgIChXZWJDb3Jl
OjpQbHVnaW5WaWV3OjpwbGF0Zm9ybUdldFZhbHVlU3RhdGljKToKKyAgICAgICAgKFdlYkNvcmU6
OlBsdWdpblZpZXc6OnBsYXRmb3JtR2V0VmFsdWUpOgorICAgICAgICAoV2ViQ29yZTo6UGx1Z2lu
Vmlldzo6aW52YWxpZGF0ZVJlY3QpOgorICAgICAgICAoV2ViQ29yZTo6UGx1Z2luVmlldzo6aW52
YWxpZGF0ZVJlZ2lvbik6CisgICAgICAgIChXZWJDb3JlOjpQbHVnaW5WaWV3Ojpmb3JjZVJlZHJh
dyk6CisgICAgICAgIChXZWJDb3JlOjpQbHVnaW5WaWV3OjpwbGF0Zm9ybVN0YXJ0KToKKyAgICAg
ICAgKFdlYkNvcmU6OlBsdWdpblZpZXc6OnBsYXRmb3JtRGVzdHJveSk6CisKIDIwMTEtMDktMTYg
IEFuZHJleSBLb3N5YWtvdiAgPGNhc2VxQGNocm9taXVtLm9yZz4KIAogICAgICAgICBXZWIgSW5z
cGVjdG9yOiBbRXh0ZW5zaW9ucyBBUEldIHN1cHBvcnQgZXh0ZW5zaW9ucyBmb3IgcmVtb3RlIGlu
c3BlY3RvciBmcm9udC1lbmQKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsdWdpbnMvUGx1
Z2luVmlldy5oIGIvU291cmNlL1dlYkNvcmUvcGx1Z2lucy9QbHVnaW5WaWV3LmgKaW5kZXggMDdj
M2M2Ny4uZTljZjIwOCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGx1Z2lucy9QbHVnaW5W
aWV3LmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGx1Z2lucy9QbHVnaW5WaWV3LmgKQEAgLTM3Myw3
ICszNzMsNyBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAgICAgICAgIGJvb2wgbV9oYXZlVXBkYXRl
ZFBsdWdpbldpZGdldDsKICNlbmRpZgogCi0jaWYgKChQTEFURk9STShRVCkgfHwgUExBVEZPUk0o
V1gpKSAmJiBPUyhXSU5ET1dTKSkgfHwgZGVmaW5lZChYUF9NQUNPU1gpCisjaWYgKChQTEFURk9S
TShRVCkgfHwgUExBVEZPUk0oV1gpKSAmJiBPUyhXSU5ET1dTKSkgfHwgZGVmaW5lZChYUF9NQUNP
U1gpIHx8IFBMQVRGT1JNKEVGTCkKICAgICAgICAgLy8gT24gTWFjIE9TWCBhbmQgUXQvV2luZG93
cyB0aGUgcGx1Z2luIGRvZXMgbm90IGhhdmUgaXRzIG93biBuYXRpdmUgd2lkZ2V0LAogICAgICAg
ICAvLyBidXQgaXMgdXNpbmcgdGhlIGNvbnRhaW5pbmcgd2luZG93IGFzIGl0cyByZWZlcmVuY2Ug
Zm9yIHBvc2l0aW9uaW5nL3BhaW50aW5nLgogICAgICAgICBQbGF0Zm9ybVBsdWdpbldpZGdldCBt
X3dpbmRvdzsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsdWdpbnMvZWZsL1BsdWdpbkRh
dGFFZmwuY3BwIGIvU291cmNlL1dlYkNvcmUvcGx1Z2lucy9lZmwvUGx1Z2luRGF0YUVmbC5jcHAK
bmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzIxZDUxYgotLS0gL2Rldi9udWxs
CisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsdWdpbnMvZWZsL1BsdWdpbkRhdGFFZmwuY3BwCkBAIC0w
LDAgKzEsNjYgQEAKKy8qCisgICAgQ29weXJpZ2h0IChDKSAyMDA2LCAyMDA3IEFwcGxlIEluYy4g
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgICAgQ29weXJpZ2h0IChDKSAyMDA4IFRyb2xsdGVjaCBB
U0EKKyAgICBDb3B5cmlnaHQgKEMpIDIwMDggQ29sbGFib3JhIEx0ZC4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KKyAgICBDb3B5cmlnaHQgKEMpIDIwMDggSU5kVCAtIEluc3RpdHV0byBOb2tpYSBkZSBU
ZWNub2xvZ2lhCisgICAgQ29weXJpZ2h0IChDKSAyMDA5LTIwMTAgUHJvRlVTSU9OIGVtYmVkZGVk
IHN5c3RlbXMKKyAgICBDb3B5cmlnaHQgKEMpIDIwMDktMjAxMSBTYW1zdW5nIEVsZWN0cm9uaWNz
CisKKyAgICBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1
dGUgaXQgYW5kL29yCisgICAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExp
YnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAgICBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJl
ZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAgICB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vu
c2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisKKyAgICBUaGlzIGxp
YnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwK
KyAgICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3
YXJyYW50eSBvZgorICAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VM
QVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgICAgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNl
bnNlIGZvciBtb3JlIGRldGFpbHMuCisKKyAgICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBj
b3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgICAgYWxvbmcg
d2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3Jp
dGUgdG8KKyAgICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xp
biBTdHJlZXQsIEZpZnRoIEZsb29yLAorICAgIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgor
Ki8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIlBsdWdpbkRhdGEuaCIKKworI2lu
Y2x1ZGUgIlBsdWdpbkRhdGFiYXNlLmgiCisjaW5jbHVkZSAiUGx1Z2luUGFja2FnZS5oIgorCitu
YW1lc3BhY2UgV2ViQ29yZSB7CisKK3ZvaWQgUGx1Z2luRGF0YTo6aW5pdFBsdWdpbnMoY29uc3Qg
UGFnZSopCit7CisgICAgY29uc3QgVmVjdG9yPFBsdWdpblBhY2thZ2UqPiYgcGx1Z2lucyA9IFBs
dWdpbkRhdGFiYXNlOjppbnN0YWxsZWRQbHVnaW5zKCktPnBsdWdpbnMoKTsKKworICAgIGZvciAo
c2l6ZV90IGkgPSAwOyBpIDwgcGx1Z2lucy5zaXplKCk7ICsraSkgeworICAgICAgICBQbHVnaW5Q
YWNrYWdlKiBwYWNrYWdlID0gcGx1Z2luc1tpXTsKKyAgICAgICAgUGx1Z2luSW5mbyBpbmZvOwor
CisgICAgICAgIGluZm8ubmFtZSA9IHBhY2thZ2UtPm5hbWUoKTsKKyAgICAgICAgaW5mby5maWxl
ID0gcGFja2FnZS0+ZmlsZU5hbWUoKTsKKyAgICAgICAgaW5mby5kZXNjID0gcGFja2FnZS0+ZGVz
Y3JpcHRpb24oKTsKKworICAgICAgICBjb25zdCBNSU1FVG9EZXNjcmlwdGlvbnNNYXAmIG1pbWVU
b0Rlc2NyaXB0aW9ucyA9IHBhY2thZ2UtPm1pbWVUb0Rlc2NyaXB0aW9ucygpOworICAgICAgICBN
SU1FVG9EZXNjcmlwdGlvbnNNYXA6OmNvbnN0X2l0ZXJhdG9yIGVuZCA9IG1pbWVUb0Rlc2NyaXB0
aW9ucy5lbmQoKTsKKyAgICAgICAgZm9yIChNSU1FVG9EZXNjcmlwdGlvbnNNYXA6OmNvbnN0X2l0
ZXJhdG9yIGl0ID0gbWltZVRvRGVzY3JpcHRpb25zLmJlZ2luKCk7IGl0ICE9IGVuZDsgKytpdCkg
eworICAgICAgICAgICAgTWltZUNsYXNzSW5mbyBtaW1lOworCisgICAgICAgICAgICBtaW1lLnR5
cGUgPSBpdC0+Zmlyc3Q7CisgICAgICAgICAgICBtaW1lLmRlc2MgPSBpdC0+c2Vjb25kOworICAg
ICAgICAgICAgbWltZS5leHRlbnNpb25zID0gcGFja2FnZS0+bWltZVRvRXh0ZW5zaW9ucygpLmdl
dChtaW1lLnR5cGUpOworCisgICAgICAgICAgICBpbmZvLm1pbWVzLmFwcGVuZChtaW1lKTsKKyAg
ICAgICAgfQorCisgICAgICAgIG1fcGx1Z2lucy5hcHBlbmQoaW5mbyk7CisgICAgfQorfQorCit2
b2lkIFBsdWdpbkRhdGE6OnJlZnJlc2goKQoreworICAgIFBsdWdpbkRhdGFiYXNlOjppbnN0YWxs
ZWRQbHVnaW5zKCktPnJlZnJlc2goKTsKK30KKworfTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL3BsdWdpbnMvZWZsL1BsdWdpblBhY2thZ2VFZmwuY3BwIGIvU291cmNlL1dlYkNvcmUvcGx1
Z2lucy9lZmwvUGx1Z2luUGFja2FnZUVmbC5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXgg
MDAwMDAwMC4uYTdiMGEwYgotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsdWdp
bnMvZWZsL1BsdWdpblBhY2thZ2VFZmwuY3BwCkBAIC0wLDAgKzEsMTY4IEBACisvKgorICogQ29w
eXJpZ2h0IChDKSAyMDA2LCAyMDA3IEFwcGxlIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisg
KiBDb3B5cmlnaHQgKEMpIDIwMDggQ29sbGFib3JhIEx0ZC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
KyAqIENvcHlyaWdodCAoQykgMjAwOCBOdWFudGkgTHRkLgorICogQ29weXJpZ2h0IChDKSAyMDA4
IElOZFQgLSBJbnN0aXR1dG8gTm9raWEgZGUgVGVjbm9sb2dpYQorICogQ29weXJpZ2h0IChDKSAy
MDA5LTIwMTAgUHJvRlVTSU9OIGVtYmVkZGVkIHN5c3RlbXMKKyAqIENvcHlyaWdodCAoQykgMjAw
OS0yMDExIFNhbXN1bmcgRWxlY3Ryb25pY3MKKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNl
IGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNh
dGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9u
cworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0
IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1
dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAor
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJp
YWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJF
IElTIFBST1ZJREVEIEJZIEFQUExFIENPTVBVVEVSLCBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisg
KiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQg
RklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4g
Tk8gRVZFTlQgU0hBTEwgQVBQTEUgQ09NUFVURVIsIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBC
RSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAor
ICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJW
SUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRF
UlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJ
VFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJ
TkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQg
T0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQ
T1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisj
aW5jbHVkZSAiUGx1Z2luUGFja2FnZS5oIgorCisjaW5jbHVkZSAiTUlNRVR5cGVSZWdpc3RyeS5o
IgorI2luY2x1ZGUgIk5vdEltcGxlbWVudGVkLmgiCisjaW5jbHVkZSAiUGx1Z2luRGF0YWJhc2Uu
aCIKKyNpbmNsdWRlICJQbHVnaW5EZWJ1Zy5oIgorI2luY2x1ZGUgIm5wcnVudGltZV9pbXBsLmgi
CisKKyNpbmNsdWRlIDxFaW5hLmg+CisjaW5jbHVkZSA8ZGxmY24uaD4KKyNpbmNsdWRlIDx3dGYv
dGV4dC9DU3RyaW5nLmg+CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKwordHlwZWRlZiBjaGFyKiAo
Kk5QUF9HZXRNSU1FRGVzY3JpcHRpb25Qcm9jUHRyKSgpOworCitib29sIFBsdWdpblBhY2thZ2U6
OmZldGNoSW5mbygpCit7CisgICAgY29uc3QgY2hhciAqZXJybXNnOworCisgICAgaWYgKCFsb2Fk
KCkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIE5QUF9HZXRWYWx1ZVByb2NQdHIgZ2V0
VmFsdWUgPSAwOworICAgIE5QUF9HZXRNSU1FRGVzY3JpcHRpb25Qcm9jUHRyIGdldE1JTUVEZXNj
cmlwdGlvbiA9IDA7CisKKyAgICBnZXRWYWx1ZSA9IHJlaW50ZXJwcmV0X2Nhc3Q8TlBQX0dldFZh
bHVlUHJvY1B0cj4oZGxzeW0obV9tb2R1bGUsICJOUF9HZXRWYWx1ZSIpKTsKKyAgICBpZiAoKGVy
cm1zZyA9IGRsZXJyb3IoKSkpIHsKKyAgICAgICAgRUlOQV9MT0dfRVJSKCJDb3VsZCBub3QgZ2V0
IHN5bWJvbCBOUF9HZXRWYWx1ZTogJXMiLCBlcnJtc2cpOworICAgICAgICByZXR1cm4gZmFsc2U7
CisgICAgfQorCisgICAgZ2V0TUlNRURlc2NyaXB0aW9uID0gcmVpbnRlcnByZXRfY2FzdDxOUFBf
R2V0TUlNRURlc2NyaXB0aW9uUHJvY1B0cj4oZGxzeW0obV9tb2R1bGUsICJOUF9HZXRNSU1FRGVz
Y3JpcHRpb24iKSk7CisgICAgaWYgKChlcnJtc2cgPSBkbGVycm9yKCkpKSB7CisgICAgICAgIEVJ
TkFfTE9HX0VSUigiQ291bGQgbm90IGdldCBzeW1ib2wgTlBfR2V0TUlNRURlc2NyaXB0aW9uOiAl
cyIsIGVycm1zZyk7CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisKKyAgICBjaGFyKiBi
dWZmZXIgPSAwOworICAgIE5QRXJyb3IgZXJyID0gZ2V0VmFsdWUoMCwgTlBQVnBsdWdpbk5hbWVT
dHJpbmcsIHN0YXRpY19jYXN0PHZvaWQqPigmYnVmZmVyKSk7CisgICAgaWYgKGVyciAhPSBOUEVS
Ul9OT19FUlJPUikKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIG1fbmFtZSA9IGJ1ZmZlcjsK
KworICAgIGJ1ZmZlciA9IDA7CisgICAgZXJyID0gZ2V0VmFsdWUoMCwgTlBQVnBsdWdpbkRlc2Ny
aXB0aW9uU3RyaW5nLCBzdGF0aWNfY2FzdDx2b2lkKj4oJmJ1ZmZlcikpOworICAgIGlmIChlcnIg
IT0gTlBFUlJfTk9fRVJST1IpCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICBtX2Rlc2NyaXB0
aW9uID0gYnVmZmVyOworICAgIGRldGVybWluZU1vZHVsZVZlcnNpb25Gcm9tRGVzY3JpcHRpb24o
KTsKKworICAgIFN0cmluZyBkZXNjcmlwdGlvbiA9IGdldE1JTUVEZXNjcmlwdGlvbigpOworCisg
ICAgVmVjdG9yPFN0cmluZz4gdHlwZXM7CisgICAgZGVzY3JpcHRpb24uc3BsaXQoVUNoYXIoJzsn
KSwgZmFsc2UsIHR5cGVzKTsKKworICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgdHlwZXMuc2l6
ZSgpOyArK2kpIHsKKyAgICAgICAgVmVjdG9yPFN0cmluZz4gbWltZTsKKyAgICAgICAgdHlwZXNb
aV0uc3BsaXQoVUNoYXIoJzonKSwgdHJ1ZSwgbWltZSk7CisKKyAgICAgICAgaWYgKCFtaW1lLmlz
RW1wdHkoKSA+IDApIHsKKyAgICAgICAgICAgIFZlY3RvcjxTdHJpbmc+IGV4dHM7CisKKyAgICAg
ICAgICAgIGlmIChtaW1lLnNpemUoKSA+IDEpCisgICAgICAgICAgICAgICAgbWltZVsxXS5zcGxp
dChVQ2hhcignLCcpLCBmYWxzZSwgZXh0cyk7CisKKyAgICAgICAgICAgIGRldGVybWluZVF1aXJr
cyhtaW1lWzBdKTsKKyAgICAgICAgICAgIG1fbWltZVRvRXh0ZW5zaW9ucy5hZGQobWltZVswXSwg
ZXh0cyk7CisKKyAgICAgICAgICAgIGlmIChtaW1lLnNpemUoKSA+IDIpCisgICAgICAgICAgICAg
ICAgbV9taW1lVG9EZXNjcmlwdGlvbnMuYWRkKG1pbWVbMF0sIG1pbWVbMl0pOworICAgICAgICB9
CisgICAgfQorCisgICAgcmV0dXJuIHRydWU7Cit9CisKK3VpbnQxNl90IFBsdWdpblBhY2thZ2U6
Ok5QVmVyc2lvbigpIGNvbnN0Cit7CisgICAgcmV0dXJuIE5QVkVSU19IQVNfUExVR0lOX1RIUkVB
RF9BU1lOQ19DQUxMOworfQorCitib29sIFBsdWdpblBhY2thZ2U6OmxvYWQoKQoreworICAgIGNo
YXIqIGVycm1zZzsKKworICAgIGlmIChtX2lzTG9hZGVkKSB7CisgICAgICAgIG1fbG9hZENvdW50
Kys7CisgICAgICAgIHJldHVybiB0cnVlOworICAgIH0KKworICAgIG1fbW9kdWxlID0gZGxvcGVu
KG1fcGF0aC51dGY4KCkuZGF0YSgpLCBSVExEX0xBWlkgfCBSVExEX0xPQ0FMKTsKKyAgICBpZiAo
KGVycm1zZyA9IGRsZXJyb3IoKSkpIHsKKyAgICAgICAgRUlOQV9MT0dfV0FSTigiJXMgbm90IGxv
YWRlZDogJXMiLCBtX3BhdGgudXRmOCgpLmRhdGEoKSwgZXJybXNnKTsKKyAgICAgICAgcmV0dXJu
IGZhbHNlOworICAgIH0KKworICAgIG1faXNMb2FkZWQgPSB0cnVlOworCisgICAgTlBfSW5pdGlh
bGl6ZUZ1bmNQdHIgaW5pdGlhbGl6ZTsKKyAgICBOUEVycm9yIGVycjsKKworICAgIGluaXRpYWxp
emUgPSByZWludGVycHJldF9jYXN0PE5QX0luaXRpYWxpemVGdW5jUHRyPihkbHN5bShtX21vZHVs
ZSwgIk5QX0luaXRpYWxpemUiKSk7CisgICAgaWYgKChlcnJtc2cgPSBkbGVycm9yKCkpKSB7Cisg
ICAgICAgIEVJTkFfTE9HX0VSUigiQ291bGQgbm90IGdldCBzeW1ib2wgTlBfSW5pdGlhbGl6ZTog
JXMiLCBlcnJtc2cpOworICAgICAgICBnb3RvIGFib3J0OworICAgIH0KKworICAgIG1fTlBQX1No
dXRkb3duID0gcmVpbnRlcnByZXRfY2FzdDxOUFBfU2h1dGRvd25Qcm9jUHRyPihkbHN5bShtX21v
ZHVsZSwgIk5QX1NodXRkb3duIikpOworICAgIGlmICgoZXJybXNnID0gZGxlcnJvcigpKSkgewor
ICAgICAgICBFSU5BX0xPR19FUlIoIkNvdWxkIG5vdCBnZXQgc3ltYm9sIE5QX1NodXRkb3duOiAl
cyIsIGVycm1zZyk7CisgICAgICAgIGdvdG8gYWJvcnQ7CisgICAgfQorCisgICAgbWVtc2V0KCZt
X3BsdWdpbkZ1bmNzLCAwLCBzaXplb2YobV9wbHVnaW5GdW5jcykpOworICAgIG1fcGx1Z2luRnVu
Y3Muc2l6ZSA9IHNpemVvZihtX3BsdWdpbkZ1bmNzKTsKKworICAgIGluaXRpYWxpemVCcm93c2Vy
RnVuY3MoKTsKKworI2lmIGRlZmluZWQoWFBfVU5JWCkKKyAgICBlcnIgPSBpbml0aWFsaXplKCZt
X2Jyb3dzZXJGdW5jcywgJm1fcGx1Z2luRnVuY3MpOworI2Vsc2UKKyAgICBlcnIgPSBpbml0aWFs
aXplKCZtX2Jyb3dzZXJGdW5jcyk7CisjZW5kaWYKKyAgICBpZiAoZXJyICE9IE5QRVJSX05PX0VS
Uk9SKQorICAgICAgICBnb3RvIGFib3J0OworCisgICAgbV9sb2FkQ291bnQrKzsKKyAgICByZXR1
cm4gdHJ1ZTsKKworYWJvcnQ6CisgICAgRUlOQV9MT0dfREJHKCJmYWlsZWQgdG8gbG9hZCBwbHVn
aW4sIHVubG9hZCBpdCB3aXRob3V0IHNodXR0aW5nIGl0IGRvd24uIik7CisgICAgdW5sb2FkV2l0
aG91dFNodXRkb3duKCk7CisgICAgcmV0dXJuIGZhbHNlOworfQorCit9CmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9wbHVnaW5zL2VmbC9QbHVnaW5WaWV3RWZsLmNwcCBiL1NvdXJjZS9XZWJD
b3JlL3BsdWdpbnMvZWZsL1BsdWdpblZpZXdFZmwuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0Cmlu
ZGV4IDAwMDAwMDAuLjIwODZmMmEKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9w
bHVnaW5zL2VmbC9QbHVnaW5WaWV3RWZsLmNwcApAQCAtMCwwICsxLDM0MyBAQAorLyoKKyAqIENv
cHlyaWdodCAoQykgMjAwNiwgMjAwNyBBcHBsZSBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgor
ICogQ29weXJpZ2h0IChDKSAyMDA4IENvbGxhYm9yYSBMdGQuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CisgKiBDb3B5cmlnaHQgKEMpIDIwMDggSU5kVCAtIEluc3RpdHV0byBOb2tpYSBkZSBUZWNub2xv
Z2lhCisgKiBDb3B5cmlnaHQgKEMpIDIwMDktMjAxMCBQcm9GVVNJT04gZW1iZWRkZWQgc3lzdGVt
cworICogQ29weXJpZ2h0IChDKSAyMDA5LTIwMTEgU2Ftc3VuZyBFbGVjdHJvbmljcworICoKKyAq
IFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGgg
b3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQg
dGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRp
b25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVj
ZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0
aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9u
LgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQ09NUFVURVIsIElO
Qy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMg
T0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBP
U0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBDT01QVVRFUiwgSU5D
LiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1Qs
IElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFN
QUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBT
VUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBS
T0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFO
WSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJ
QUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkg
QVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBF
VkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisK
KyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJQbHVnaW5WaWV3LmgiCisKKyNpbmNsdWRl
ICJGcmFtZS5oIgorI2luY2x1ZGUgIkZyYW1lVmlldy5oIgorI2luY2x1ZGUgIkdyYXBoaWNzQ29u
dGV4dC5oIgorI2luY2x1ZGUgIkhUTUxOYW1lcy5oIgorI2luY2x1ZGUgIkhUTUxQbHVnSW5FbGVt
ZW50LmgiCisjaW5jbHVkZSAiSG9zdFdpbmRvdy5oIgorI2luY2x1ZGUgIk1vdXNlRXZlbnQuaCIK
KyNpbmNsdWRlICJOb3RJbXBsZW1lbnRlZC5oIgorI2luY2x1ZGUgIlBsdWdpblBhY2thZ2UuaCIK
KyNpbmNsdWRlICJucHJ1bnRpbWVfaW1wbC5oIgorI2luY2x1ZGUgInJ1bnRpbWUvSlNMb2NrLmgi
CisjaW5jbHVkZSA8RWNvcmVfRXZhcy5oPgorI2luY2x1ZGUgPEVjb3JlX1guaD4KKyNpbmNsdWRl
IDxFdmFzLmg+CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKwordXNpbmcgbmFtZXNwYWNlIEhUTUxO
YW1lczsKKworYm9vbCBQbHVnaW5WaWV3OjpkaXNwYXRjaE5QRXZlbnQoTlBFdmVudCYgZXZlbnQp
Cit7CisgICAgaWYgKCFtX3BsdWdpbi0+cGx1Z2luRnVuY3MoKS0+ZXZlbnQpCisgICAgICAgIHJl
dHVybiBmYWxzZTsKKworICAgIFBsdWdpblZpZXc6OnNldEN1cnJlbnRQbHVnaW5WaWV3KHRoaXMp
OworICAgIEpTQzo6SlNMb2NrOjpEcm9wQWxsTG9ja3MgZHJvcEFsbExvY2tzKGZhbHNlKTsKKyAg
ICBzZXRDYWxsaW5nUGx1Z2luKHRydWUpOworCisgICAgYm9vbCBhY2NlcHRlZCA9IG1fcGx1Z2lu
LT5wbHVnaW5GdW5jcygpLT5ldmVudChtX2luc3RhbmNlLCAmZXZlbnQpOworCisgICAgc2V0Q2Fs
bGluZ1BsdWdpbihmYWxzZSk7CisgICAgUGx1Z2luVmlldzo6c2V0Q3VycmVudFBsdWdpblZpZXco
MCk7CisgICAgcmV0dXJuIGFjY2VwdGVkOworfQorCisjaWYgZGVmaW5lZChYUF9VTklYKQordm9p
ZCBQbHVnaW5WaWV3OjpoYW5kbGVGb2N1c0luRXZlbnQoKQoreworICAgIG5vdEltcGxlbWVudGVk
KCk7Cit9CisKK3ZvaWQgUGx1Z2luVmlldzo6aGFuZGxlRm9jdXNPdXRFdmVudCgpCit7CisgICAg
bm90SW1wbGVtZW50ZWQoKTsKK30KKyNlbmRpZgorCit2b2lkIFBsdWdpblZpZXc6OmhhbmRsZUtl
eWJvYXJkRXZlbnQoS2V5Ym9hcmRFdmVudCopCit7CisgICAgbm90SW1wbGVtZW50ZWQoKTsKK30K
Kwordm9pZCBQbHVnaW5WaWV3OjpoYW5kbGVNb3VzZUV2ZW50KE1vdXNlRXZlbnQqIGV2ZW50KQor
eworICAgIE5QRXZlbnQgeEV2ZW50OworCisjaWYgZGVmaW5lZChYUF9VTklYKQorICAgIGNvbnN0
IEludFJlY3QgcmVjdCA9IHBhcmVudCgpLT5jb250ZW50c1RvU2NyZWVuKEludFJlY3QoMCwgMCwg
ZXZlbnQtPm9mZnNldFgoKSwgZXZlbnQtPm9mZnNldFkoKSkpOworICAgIGNvbnN0IGludCBldmVu
dFggPSByZWN0LndpZHRoKCk7CisgICAgY29uc3QgaW50IGV2ZW50WSA9IHJlY3QuaGVpZ2h0KCk7
CisgICAgaWYgKGV2ZW50LT50eXBlKCkgPT0gZXZlbnROYW1lcygpLm1vdXNlbW92ZUV2ZW50Cisg
ICAgICAgICAgICB8fCBldmVudC0+dHlwZSgpID09IGV2ZW50TmFtZXMoKS5tb3VzZW91dEV2ZW50
CisgICAgICAgICAgICB8fCBldmVudC0+dHlwZSgpID09IGV2ZW50TmFtZXMoKS5tb3VzZW92ZXJF
dmVudCkgeworICAgICAgICB4RXZlbnQudHlwZSA9IE1vdGlvbk5vdGlmeTsKKyAgICAgICAgeEV2
ZW50Lnhtb3Rpb24ueCA9IGV2ZW50WDsKKyAgICAgICAgeEV2ZW50Lnhtb3Rpb24ueSA9IGV2ZW50
WTsKKyAgICB9IGVsc2UgaWYgKGV2ZW50LT50eXBlKCkgPT0gZXZlbnROYW1lcygpLm1vdXNlZG93
bkV2ZW50KSB7CisgICAgICAgIHhFdmVudC50eXBlID0gQnV0dG9uUHJlc3M7CisgICAgICAgIHhF
dmVudC54YnV0dG9uLnggPSBldmVudFg7CisgICAgICAgIHhFdmVudC54YnV0dG9uLnkgPSBldmVu
dFk7CisgICAgICAgIHhFdmVudC54YnV0dG9uLmJ1dHRvbiA9IGV2ZW50LT5idXR0b24oKSArIDE7
IC8vIERPTSBNb3VzZUV2ZW50IGNvdW50cyBmcm9tIDAsIGFuZCBYQnV0dG9uRXZlbnQgZnJvbSAx
LgorICAgIH0gZWxzZSBpZiAoZXZlbnQtPnR5cGUoKSA9PSBldmVudE5hbWVzKCkubW91c2V1cEV2
ZW50KSB7CisgICAgICAgIHhFdmVudC50eXBlID0gQnV0dG9uUmVsZWFzZTsKKyAgICAgICAgeEV2
ZW50LnhidXR0b24ueCA9IGV2ZW50WDsKKyAgICAgICAgeEV2ZW50LnhidXR0b24ueSA9IGV2ZW50
WTsKKyAgICAgICAgeEV2ZW50LnhidXR0b24uYnV0dG9uID0gZXZlbnQtPmJ1dHRvbigpICsgMTsK
KyAgICB9IGVsc2UKKyAgICAgICAgcmV0dXJuOworI2VuZGlmCisKKyAgICBpZiAoZGlzcGF0Y2hO
UEV2ZW50KHhFdmVudCkpCisgICAgICAgIGV2ZW50LT5zZXREZWZhdWx0SGFuZGxlZCgpOworfQor
Cit2b2lkIFBsdWdpblZpZXc6OnVwZGF0ZVBsdWdpbldpZGdldCgpCit7CisgICAgbm90SW1wbGVt
ZW50ZWQoKTsKK30KKwordm9pZCBQbHVnaW5WaWV3OjpzZXRGb2N1cyhib29sIGZvY3VzZWQpCit7
CisgICAgaWYgKGZvY3VzZWQpCisgICAgICAgIG1fZWxlbWVudC0+ZG9jdW1lbnQoKS0+c2V0Rm9j
dXNlZE5vZGUobV9lbGVtZW50KTsKKworICAgIFdpZGdldDo6c2V0Rm9jdXMoZm9jdXNlZCk7Cit9
CisKK3ZvaWQgUGx1Z2luVmlldzo6c2hvdygpCit7CisgICAgc2V0U2VsZlZpc2libGUodHJ1ZSk7
CisKKyAgICBXaWRnZXQ6OnNob3coKTsKK30KKwordm9pZCBQbHVnaW5WaWV3OjpoaWRlKCkKK3sK
KyAgICBzZXRTZWxmVmlzaWJsZShmYWxzZSk7CisKKyAgICBXaWRnZXQ6OmhpZGUoKTsKK30KKwor
dm9pZCBQbHVnaW5WaWV3OjpwYWludChHcmFwaGljc0NvbnRleHQqIGNvbnRleHQsIGNvbnN0IElu
dFJlY3QmIHJlY3QpCit7CisgICAgaWYgKCFtX2lzU3RhcnRlZCkKKyAgICAgICAgcGFpbnRNaXNz
aW5nUGx1Z2luSWNvbihjb250ZXh0LCByZWN0KTsKK30KKwordm9pZCBQbHVnaW5WaWV3OjpzZXRQ
YXJlbnQoU2Nyb2xsVmlldyogcGFyZW50KQoreworICAgIFdpZGdldDo6c2V0UGFyZW50KHBhcmVu
dCk7CisKKyAgICBpZiAocGFyZW50KQorICAgICAgICBpbml0KCk7Cit9CisKK3ZvaWQgUGx1Z2lu
Vmlldzo6c2V0TlBXaW5kb3dSZWN0KGNvbnN0IEludFJlY3QmIHJlY3QpCit7CisgICAgbm90SW1w
bGVtZW50ZWQoKTsKK30KKwordm9pZCBQbHVnaW5WaWV3OjpzZXROUFdpbmRvd0lmTmVlZGVkKCkK
K3sKK30KKwordm9pZCBQbHVnaW5WaWV3OjpzZXRQYXJlbnRWaXNpYmxlKGJvb2wgdmlzaWJsZSkK
K3sKKyAgICBXaWRnZXQ6OnNldFBhcmVudFZpc2libGUodmlzaWJsZSk7Cit9CisKK05QRXJyb3Ig
UGx1Z2luVmlldzo6aGFuZGxlUG9zdFJlYWRGaWxlKFZlY3RvcjxjaGFyPiYgYnVmZmVyLCB1aW50
MzJfdCBsZW4sIGNvbnN0IGNoYXIqIGJ1ZikKK3sKKyAgICBTdHJpbmcgZmlsZW5hbWUoYnVmLCBs
ZW4pOworCisgICAgaWYgKGZpbGVuYW1lLnN0YXJ0c1dpdGgoImZpbGU6Ly8vIikpCisjaWYgZGVm
aW5lZChYUF9VTklYKQorICAgICAgICBmaWxlbmFtZSA9IGZpbGVuYW1lLnN1YnN0cmluZyg3KTsK
KyNlbHNlCisgICAgICAgIGZpbGVuYW1lID0gZmlsZW5hbWUuc3Vic3RyaW5nKDgpOworI2VuZGlm
CisKKyAgICBsb25nIGxvbmcgc2l6ZTsKKyAgICBpZiAoIWdldEZpbGVTaXplKGZpbGVuYW1lLCBz
aXplKSkKKyAgICAgICAgcmV0dXJuIE5QRVJSX0ZJTEVfTk9UX0ZPVU5EOworCisgICAgRklMRSog
ZmlsZUhhbmRsZSA9IGZvcGVuKGZpbGVuYW1lLnV0ZjgoKS5kYXRhKCksICJyIik7CisgICAgaWYg
KCFmaWxlSGFuZGxlKQorICAgICAgICByZXR1cm4gTlBFUlJfRklMRV9OT1RfRk9VTkQ7CisKKyAg
ICBidWZmZXIucmVzaXplKHNpemUpOworICAgIGludCBieXRlc1JlYWQgPSBmcmVhZChidWZmZXIu
ZGF0YSgpLCAxLCBzaXplLCBmaWxlSGFuZGxlKTsKKworICAgIGZjbG9zZShmaWxlSGFuZGxlKTsK
KworICAgIGlmIChieXRlc1JlYWQgPD0gMCkKKyAgICAgICAgcmV0dXJuIE5QRVJSX0ZJTEVfTk9U
X0ZPVU5EOworCisgICAgcmV0dXJuIE5QRVJSX05PX0VSUk9SOworfQorCitib29sIFBsdWdpblZp
ZXc6OnBsYXRmb3JtR2V0VmFsdWVTdGF0aWMoTlBOVmFyaWFibGUgdmFyaWFibGUsIHZvaWQqIHZh
bHVlLCBOUEVycm9yKiByZXN1bHQpCit7CisgICAgc3dpdGNoICh2YXJpYWJsZSkgeworICAgIGNh
c2UgTlBOVlRvb2xraXQ6CisgICAgICAgICpzdGF0aWNfY2FzdDx1aW50MzJfdCo+KHZhbHVlKSA9
IDA7CisgICAgICAgICpyZXN1bHQgPSBOUEVSUl9OT19FUlJPUjsKKyAgICAgICAgcmV0dXJuIHRy
dWU7CisKKyAgICBjYXNlIE5QTlZTdXBwb3J0c1hFbWJlZEJvb2w6CisgICAgICAgICpzdGF0aWNf
Y2FzdDxOUEJvb2wqPih2YWx1ZSkgPSBmYWxzZTsKKyAgICAgICAgKnJlc3VsdCA9IE5QRVJSX05P
X0VSUk9SOworICAgICAgICByZXR1cm4gdHJ1ZTsKKworICAgIGNhc2UgTlBOVmphdmFzY3JpcHRF
bmFibGVkQm9vbDoKKyAgICAgICAgKnN0YXRpY19jYXN0PE5QQm9vbCo+KHZhbHVlKSA9IHRydWU7
CisgICAgICAgICpyZXN1bHQgPSBOUEVSUl9OT19FUlJPUjsKKyAgICAgICAgcmV0dXJuIHRydWU7
CisKKyAgICBjYXNlIE5QTlZTdXBwb3J0c1dpbmRvd2xlc3M6CisgICAgICAgICpzdGF0aWNfY2Fz
dDxOUEJvb2wqPih2YWx1ZSkgPSBmYWxzZTsKKyAgICAgICAgKnJlc3VsdCA9IE5QRVJSX05PX0VS
Uk9SOworICAgICAgICByZXR1cm4gdHJ1ZTsKKworICAgIGRlZmF1bHQ6CisgICAgICAgIHJldHVy
biBmYWxzZTsKKyAgICB9Cit9CisKK2Jvb2wgUGx1Z2luVmlldzo6cGxhdGZvcm1HZXRWYWx1ZShO
UE5WYXJpYWJsZSB2YXJpYWJsZSwgdm9pZCogdmFsdWUsIE5QRXJyb3IqIHJlc3VsdCkKK3sKKyAg
ICBpZiAoIXZhbHVlIHx8ICFyZXN1bHQpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIHN3
aXRjaCAodmFyaWFibGUpIHsKKyAgICBjYXNlIE5QTlZ4RGlzcGxheToKKyAgICAgICAgKnN0YXRp
Y19jYXN0PHZvaWQqKj4odmFsdWUpID0gc3RhdGljX2Nhc3Q8RGlzcGxheSo+KGVjb3JlX3hfZGlz
cGxheV9nZXQoKSk7CisgICAgICAgICpyZXN1bHQgPSBOUEVSUl9OT19FUlJPUjsKKyAgICAgICAg
cmV0dXJuIHRydWU7CisKKyAgICBjYXNlIE5QTlZ4dEFwcENvbnRleHQ6CisgICAgICAgICpyZXN1
bHQgPSBOUEVSUl9HRU5FUklDX0VSUk9SOworICAgICAgICByZXR1cm4gdHJ1ZTsKKworICAgIGNh
c2UgTlBOVldpbmRvd05QT2JqZWN0OiB7CisgICAgICAgIGlmIChtX2lzSmF2YVNjcmlwdFBhdXNl
ZCkgeworICAgICAgICAgICAgKnJlc3VsdCA9IE5QRVJSX0dFTkVSSUNfRVJST1I7CisgICAgICAg
ICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgfQorCisgICAgICAgIE5QT2JqZWN0KiB3aW5kb3dT
Y3JpcHRPYmplY3QgPSBtX3BhcmVudEZyYW1lLT5zY3JpcHQoKS0+d2luZG93U2NyaXB0TlBPYmpl
Y3QoKTsKKworICAgICAgICAvLyBSZXR1cm4gdmFsdWUgaXMgZXhwZWN0ZWQgdG8gYmUgcmV0YWlu
ZWQsIGFzIGRlc2NyaWJlZCBoZXJlOiA8aHR0cDovL3d3dy5tb3ppbGxhLm9yZy9wcm9qZWN0cy9w
bHVnaW4vbnBydW50aW1lLmh0bWw+CisgICAgICAgIGlmICh3aW5kb3dTY3JpcHRPYmplY3QpCisg
ICAgICAgICAgICBfTlBOX1JldGFpbk9iamVjdCh3aW5kb3dTY3JpcHRPYmplY3QpOworCisgICAg
ICAgICpzdGF0aWNfY2FzdDx2b2lkKio+KHZhbHVlKSA9IHdpbmRvd1NjcmlwdE9iamVjdDsKKwor
ICAgICAgICAqcmVzdWx0ID0gTlBFUlJfTk9fRVJST1I7CisgICAgICAgIHJldHVybiB0cnVlOwor
ICAgIH0KKworICAgIGNhc2UgTlBOVlBsdWdpbkVsZW1lbnROUE9iamVjdDogeworICAgICAgICBp
ZiAobV9pc0phdmFTY3JpcHRQYXVzZWQpIHsKKyAgICAgICAgICAgICpyZXN1bHQgPSBOUEVSUl9H
RU5FUklDX0VSUk9SOworICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgIH0KKworICAg
ICAgICBOUE9iamVjdCogcGx1Z2luU2NyaXB0T2JqZWN0ID0gMDsKKworICAgICAgICBpZiAobV9l
bGVtZW50LT5oYXNUYWdOYW1lKGFwcGxldFRhZykgfHwgbV9lbGVtZW50LT5oYXNUYWdOYW1lKGVt
YmVkVGFnKSB8fCBtX2VsZW1lbnQtPmhhc1RhZ05hbWUob2JqZWN0VGFnKSkKKyAgICAgICAgICAg
IHBsdWdpblNjcmlwdE9iamVjdCA9IHN0YXRpY19jYXN0PEhUTUxQbHVnSW5FbGVtZW50Kj4obV9l
bGVtZW50KS0+Z2V0TlBPYmplY3QoKTsKKworICAgICAgICAvLyBSZXR1cm4gdmFsdWUgaXMgZXhw
ZWN0ZWQgdG8gYmUgcmV0YWluZWQsIGFzIGRlc2NyaWJlZCBoZXJlOiA8aHR0cDovL3d3dy5tb3pp
bGxhLm9yZy9wcm9qZWN0cy9wbHVnaW4vbnBydW50aW1lLmh0bWw+CisgICAgICAgIGlmIChwbHVn
aW5TY3JpcHRPYmplY3QpCisgICAgICAgICAgICBfTlBOX1JldGFpbk9iamVjdChwbHVnaW5TY3Jp
cHRPYmplY3QpOworCisgICAgICAgICpzdGF0aWNfY2FzdDx2b2lkKio+KHZhbHVlKSA9IHBsdWdp
blNjcmlwdE9iamVjdDsKKworICAgICAgICAqcmVzdWx0ID0gTlBFUlJfTk9fRVJST1I7CisgICAg
ICAgIHJldHVybiB0cnVlOworICAgIH0KKworICAgIGNhc2UgTlBOVm5ldHNjYXBlV2luZG93OiB7
CisgICAgICAgIEV2YXNfT2JqZWN0KiB3aWRnZXQgPSBtX3BhcmVudEZyYW1lLT52aWV3KCktPmhv
c3RXaW5kb3coKS0+cGxhdGZvcm1QYWdlQ2xpZW50KCk7CisgICAgICAgIEV2YXMqIGV2YXMgPSBl
dmFzX29iamVjdF9ldmFzX2dldCh3aWRnZXQpOworICAgICAgICBFY29yZV9FdmFzKiBlY29yZUV2
YXMgPSBlY29yZV9ldmFzX2Vjb3JlX2V2YXNfZ2V0KGV2YXMpOworICAgICAgICAqc3RhdGljX2Nh
c3Q8WElEKj4odmFsdWUpID0gc3RhdGljX2Nhc3Q8V2luZG93PihlY29yZV9ldmFzX3dpbmRvd19n
ZXQoZWNvcmVFdmFzKSk7CisgICAgICAgICpyZXN1bHQgPSBOUEVSUl9OT19FUlJPUjsKKyAgICAg
ICAgcmV0dXJuIHRydWU7CisgICAgfQorCisgICAgY2FzZSBOUE5WVG9vbGtpdDoKKyAgICAgICAg
aWYgKG1fcGx1Z2luLT5xdWlya3MoKS5jb250YWlucyhQbHVnaW5RdWlya1JlcXVpcmVzR3RrVG9v
bEtpdCkpIHsKKyAgICAgICAgICAgICpzdGF0aWNfY2FzdDx1aW50MzJfdCo+KHZhbHVlKSA9IDI7
CisgICAgICAgICAgICAqcmVzdWx0ID0gTlBFUlJfTk9fRVJST1I7CisgICAgICAgICAgICByZXR1
cm4gdHJ1ZTsKKyAgICAgICAgfQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgZGVmYXVsdDoK
KyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KK30KKwordm9pZCBQbHVnaW5WaWV3OjppbnZh
bGlkYXRlUmVjdChjb25zdCBJbnRSZWN0JiByZWN0KQoreworICAgIGludmFsaWRhdGVXaW5kb3ds
ZXNzUGx1Z2luUmVjdChyZWN0KTsKK30KKwordm9pZCBQbHVnaW5WaWV3OjppbnZhbGlkYXRlUmVj
dChOUFJlY3QqIHJlY3QpCit7CisgICAgaWYgKCFyZWN0KSB7CisgICAgICAgIGludmFsaWRhdGUo
KTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIGludmFsaWRhdGVSZWN0KEludFJlY3Qo
cmVjdC0+bGVmdCwgcmVjdC0+dG9wLCByZWN0LT5yaWdodCAtIHJlY3QtPmxlZnQsIHJlY3QtPmJv
dHRvbSAtIHJlY3QtPnRvcCkpOworfQorCit2b2lkIFBsdWdpblZpZXc6OmludmFsaWRhdGVSZWdp
b24oTlBSZWdpb24gcmVnaW9uKQoreworICAgIG5vdEltcGxlbWVudGVkKCk7Cit9CisKK3ZvaWQg
UGx1Z2luVmlldzo6Zm9yY2VSZWRyYXcoKQoreworICAgIG5vdEltcGxlbWVudGVkKCk7Cit9CisK
K2Jvb2wgUGx1Z2luVmlldzo6cGxhdGZvcm1TdGFydCgpCit7CisgICAgQVNTRVJUKG1faXNTdGFy
dGVkKTsKKyAgICBBU1NFUlQobV9zdGF0dXMgPT0gUGx1Z2luU3RhdHVzTG9hZGVkU3VjY2Vzc2Z1
bGx5KTsKKworICAgIG5vdEltcGxlbWVudGVkKCk7CisgICAgcmV0dXJuIHRydWU7Cit9CisKK3Zv
aWQgUGx1Z2luVmlldzo6cGxhdGZvcm1EZXN0cm95KCkKK3sKK30KKworfSAvLyBuYW1lc3BhY2Ug
V2ViQ29yZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9lZmwvQ2hhbmdlTG9nIGIvU291cmNl
L1dlYktpdC9lZmwvQ2hhbmdlTG9nCmluZGV4IDU0N2ExNjkuLjEzZjAwMzcgMTAwNzU1Ci0tLSBh
L1NvdXJjZS9XZWJLaXQvZWZsL0NoYW5nZUxvZworKysgYi9Tb3VyY2UvV2ViS2l0L2VmbC9DaGFu
Z2VMb2cKQEAgLTEsMyArMSwxNSBAQAorMjAxMS0wOS0xNiAgTWFyaXVzeiBHcnplZ29yY3p5ayAg
PG1hcml1c3ouZ0BzYW1zdW5nLmNvbT4KKworICAgICAgICBCdWcgNDQ1MDUgLSBbRUZMXSBNaXNz
aW5nIHBsdWdpbnMgc3VwcG9ydCBmb3IgZWZsIHBvcnQKKyAgICAgICAgaHR0cHM6Ly9idWdzLndl
YmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTQ0NTA1CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9C
T0RZIChPT1BTISkuCisKKyAgICAgICAgSW1wbGVtZW50YXRpb24gb2YgZXdrX2ZyYW1lX3BsdWdp
bl9jcmVhdGUoKSAtIGNyZWF0aW5nIFBsdWdpblZpZXcuCisKKyAgICAgICAgKiBld2svZXdrX2Zy
YW1lLmNwcDoKKyAgICAgICAgKGV3a19mcmFtZV9wbHVnaW5fY3JlYXRlKToKKwogMjAxMS0wOS0x
NSAgQWRhbSBCYXJ0aCAgPGFiYXJ0aEB3ZWJraXQub3JnPgogCiAgICAgICAgIFJlbmFtZSBFTkFC
TEUoREFUQUJBU0UpIHRvIEVOQUJMRShTUUxfREFUQUJBU0UpCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViS2l0L2VmbC9ld2svZXdrX2ZyYW1lLmNwcCBiL1NvdXJjZS9XZWJLaXQvZWZsL2V3ay9ld2tf
ZnJhbWUuY3BwCmluZGV4IGRhNDM0NDAuLmVjZjc5MzEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJL
aXQvZWZsL2V3ay9ld2tfZnJhbWUuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvZWZsL2V3ay9ld2tf
ZnJhbWUuY3BwCkBAIC0xNjMyLDYgKzE2MzIsMjQgQEAgdm9pZCBld2tfZnJhbWVfZm9yY2VfbGF5
b3V0KEV2YXNfT2JqZWN0ICpvKQogICovCiBXVEY6OlBhc3NSZWZQdHI8V2ViQ29yZTo6V2lkZ2V0
PiBld2tfZnJhbWVfcGx1Z2luX2NyZWF0ZShFdmFzX09iamVjdCAqbywgY29uc3QgV2ViQ29yZTo6
SW50U2l6ZSAmcGx1Z2luU2l6ZSwgV2ViQ29yZTo6SFRNTFBsdWdJbkVsZW1lbnQgKmVsZW1lbnQs
IGNvbnN0IFdlYkNvcmU6OktVUkwgJnVybCwgY29uc3QgV1RGOjpWZWN0b3I8V1RGOjpTdHJpbmc+
ICZwYXJhbU5hbWVzLCBjb25zdCBXVEY6OlZlY3RvcjxXVEY6OlN0cmluZz4gJnBhcmFtVmFsdWVz
LCBjb25zdCBXVEY6OlN0cmluZyAmbWltZVR5cGUsIGJvb2wgbG9hZE1hbnVhbGx5KQogeworI2lm
IEVOQUJMRShORVRTQ0FQRV9QTFVHSU5fQVBJKQorICAgIERCRygibz0lcCwgc2l6ZT0lZHglZCwg
ZWxlbWVudD0lcCwgdXJsPSVzLCBtaW1lVHlwZT0lcyIsCisgICAgICAgIG8sIHBsdWdpblNpemUu
d2lkdGgoKSwgcGx1Z2luU2l6ZS5oZWlnaHQoKSwgZWxlbWVudCwKKyAgICAgICAgdXJsLnN0cmlu
ZygpLnV0ZjgoKS5kYXRhKCksIG1pbWVUeXBlLnV0ZjgoKS5kYXRhKCkpOworCisgICAgRVdLX0ZS
QU1FX1NEX0dFVF9PUl9SRVRVUk4obywgc2QsIDApOworCisgICAgLy8gVE9ETzogZW1pdCBzaWdu
YWwgYW5kIGFzayB3ZWJraXQgdXNlcnMgaWYgc29tZXRoaW5nIGVsc2Ugc2hvdWxkIGJlIGRvbmUu
CisgICAgLy8gbGlrZSBjcmVhdGluZyBhbm90aGVyIHggd2luZG93IChzZWUgZ3RrLCBpdCBhbGxv
d3MgdXNlcnMgdG8gY3JlYXRlCisgICAgLy8gR3RrUGx1Z2luV2lkZ2V0LgorCisgICAgV1RGOjpS
ZWZQdHI8V2ViQ29yZTo6UGx1Z2luVmlldz4gcGx1Z2luVmlldyA9IFdlYkNvcmU6OlBsdWdpblZp
ZXc6OmNyZWF0ZQorICAgICAgICAoc2QtPmZyYW1lLCBwbHVnaW5TaXplLCBlbGVtZW50LCB1cmws
IHBhcmFtTmFtZXMsIHBhcmFtVmFsdWVzLAorICAgICAgICBtaW1lVHlwZSwgbG9hZE1hbnVhbGx5
KTsKKworICAgIGlmIChwbHVnaW5WaWV3LT5zdGF0dXMoKSA9PSBXZWJDb3JlOjpQbHVnaW5TdGF0
dXNMb2FkZWRTdWNjZXNzZnVsbHkpCisgICAgICAgIHJldHVybiBwbHVnaW5WaWV3OworI2VuZGlm
IC8vICNpZiBFTkFCTEUoTkVUU0NBUEVfUExVR0lOX0FQSSkKICAgICByZXR1cm4gMDsKIH0KIAo=
</data>
<flag name="commit-queue"
          id="105087"
          type_id="3"
          status="-"
          setter="leandro"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>114951</attachid>
            <date>2011-11-14 08:29:27 -0800</date>
            <delta_ts>2011-12-22 03:10:59 -0800</delta_ts>
            <desc>EFL&apos;s plugin support</desc>
            <filename>efl_plugins.patch</filename>
            <type>text/plain</type>
            <size>26035</size>
            <attacher name="Mariusz Grzegorczyk">mariusz.g</attacher>
            
              <data encoding="base64">Y29tbWl0IDMyNWM0MTg2Yjc2NDVhMGY0NGJiODI5MTBiZGY5ZDYxM2U3ZTJjODgKQXV0aG9yOiBN
YXJpdXN6IEdyemVnb3JjenlrIDxtYXJpdXN6LmdAc2Ftc3VuZy5jb20+CkRhdGU6ICAgTW9uIE5v
diAxNCAxNzoyNjowMSAyMDExICswMTAwCgogICAgW0VGTF0gTWlzc2luZyBwbHVnaW5zIHN1cHBv
cnQgZm9yIGVmbCBwb3J0CgpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5n
ZUxvZyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKaW5kZXggZTkxZmYzMi4uYTQ2
MmE4ZiAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZworKysgYi9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTQgQEAKKzIwMTEtMTEt
MTQgIE1hcml1c3ogR3J6ZWdvcmN6eWsgIDxtYXJpdXN6LmdAc2Ftc3VuZy5jb20+CisKKyAgICAg
ICAgQnVnIDQ0NTA1IC0gW0VGTF0gTWlzc2luZyBwbHVnaW5zIHN1cHBvcnQgZm9yIGVmbCBwb3J0
CisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD00NDUwNQor
CisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIEFkZCBkZWZp
bmUgb2YgRU5BQkxFX1BMVUdJTl9QQUNLQUdFX1NJTVBMRV9IQVNIIGZvciBlZmwgcG9ydC4KKwor
ICAgICAgICAqIHd0Zi9QbGF0Zm9ybS5oOgorCiAyMDExLTExLTE0ICBTaW1vbiBIYXVzbWFubiAg
PHNpbW9uLmhhdXNtYW5uQG5va2lhLmNvbT4KIAogICAgICAgICBbUXRdIFJlcGxhY2UgdXNlIG9m
IFFBcHBsaWNhdGlvbiB3aXRoIFFHdWlBcHBsaWNhdGlvbi4KZGlmZiAtLWdpdCBhL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS93dGYvUGxhdGZvcm0uaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93dGYv
UGxhdGZvcm0uaAppbmRleCBiYTFlZGIzLi41MGU4ZDM2IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvd3RmL1BsYXRmb3JtLmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3d0
Zi9QbGF0Zm9ybS5oCkBAIC0xMDQ4LDcgKzEwNDgsNyBAQAogI2RlZmluZSBXVEZfVVNFX1BST1RF
Q1RJT05fU1BBQ0VfQVVUSF9DQUxMQkFDSyAxCiAjZW5kaWYKIAotI2lmICFFTkFCTEUoTkVUU0NB
UEVfUExVR0lOX0FQSSkgfHwgKEVOQUJMRShORVRTQ0FQRV9QTFVHSU5fQVBJKSAmJiAoKE9TKFVO
SVgpICYmIChQTEFURk9STShRVCkgfHwgUExBVEZPUk0oV1gpKSkgfHwgUExBVEZPUk0oR1RLKSkp
CisjaWYgIUVOQUJMRShORVRTQ0FQRV9QTFVHSU5fQVBJKSB8fCAoRU5BQkxFKE5FVFNDQVBFX1BM
VUdJTl9BUEkpICYmICgoT1MoVU5JWCkgJiYgKFBMQVRGT1JNKFFUKSB8fCBQTEFURk9STShXWCkp
KSB8fCBQTEFURk9STShHVEspIHx8IFBMQVRGT1JNKEVGTCkpKQogI2RlZmluZSBFTkFCTEVfUExV
R0lOX1BBQ0tBR0VfU0lNUExFX0hBU0ggMQogI2VuZGlmCiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwppbmRleCBhZjNjNDYz
Li4xZWUzMzJmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKKysrIGIvU291
cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsNDcgQEAKKzIwMTEtMTEtMTQgIE1hcml1
c3ogR3J6ZWdvcmN6eWsgIDxtYXJpdXN6LmdAc2Ftc3VuZy5jb20+CisKKyAgICAgICAgQnVnIDQ0
NTA1IC0gW0VGTF0gTWlzc2luZyBwbHVnaW5zIHN1cHBvcnQgZm9yIGVmbCBwb3J0CisgICAgICAg
IGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD00NDUwNQorCisgICAgICAg
IFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIEJhc2ljIGZ1bmN0aW9uYWxp
dHkgb2YgcGx1Z2lucyBmb3IgZWZsIHBvcnQuCisKKyAgICAgICAgVGVtcGxhdGUgdmVyc2lvbiwg
c28gbm8gbmV3IHRlc3RzIGFyZSBuZWVkZWQuCisKKyAgICAgICAgKiBQbGF0Zm9ybUVmbC5jbWFr
ZToKKyAgICAgICAgKiBwbHVnaW5zL1BsdWdpblZpZXcuaDoKKyAgICAgICAgKiBwbHVnaW5zL2Vm
bC9QbHVnaW5EYXRhRWZsLmNwcDogQWRkZWQuIENvcGllZCBmcm9tIHBsdWdpbnMvZ3RrL1BsdWdp
bkRhdGFHdGsuY3BwLgorICAgICAgICAoV2ViQ29yZTo6UGx1Z2luRGF0YTo6aW5pdFBsdWdpbnMp
OiBGaWxsIG1pbWUvZGVzY3JpcHRpb24vZXh0ZW5zaW9uIG1hcHMgZm9yIHBsdWdpbnMuCisgICAg
ICAgIChXZWJDb3JlOjpQbHVnaW5EYXRhOjpyZWZyZXNoKTogUmVmcmVzaCBwbHVnaW4ncyBkYXRh
YmFzZS4KKyAgICAgICAgKiBwbHVnaW5zL2VmbC9QbHVnaW5QYWNrYWdlRWZsLmNwcDogQWRkZWQu
IENvcGllZCBmcm9tIHBsdWdpbnMvZ3RrL1BsdWdpblBhY2thZ2VHdGsuY3BwLgorICAgICAgICAo
V2ViQ29yZTo6UGx1Z2luUGFja2FnZTo6ZmV0Y2hJbmZvKTogR2V0IGluZm8gZnJvbSBwbHVnaW4n
cyBsaWJyYXJ5IGFib3V0IG5hbWUgYW5kIG1pbWUgc3VwcG9ydGVkLgorICAgICAgICAoV2ViQ29y
ZTo6UGx1Z2luUGFja2FnZTo6TlBWZXJzaW9uKToKKyAgICAgICAgKFdlYkNvcmU6OlBsdWdpblBh
Y2thZ2U6OmxvYWQpOiBMb2FkIHBsdWdpbi4KKyAgICAgICAgKiBwbHVnaW5zL2VmbC9QbHVnaW5W
aWV3RWZsLmNwcDogQWRkZWQuIENvcGllZCBmcm9tIHBsdWdpbnMvZ3RrL1BsdWdpblZpZXdHdGsu
Y3BwLgorICAgICAgICAoV2ViQ29yZTo6UGx1Z2luVmlldzo6ZGlzcGF0Y2hOUEV2ZW50KToKKyAg
ICAgICAgKFdlYkNvcmU6OlBsdWdpblZpZXc6OmhhbmRsZUZvY3VzSW5FdmVudCk6CisgICAgICAg
IChXZWJDb3JlOjpQbHVnaW5WaWV3OjpoYW5kbGVGb2N1c091dEV2ZW50KToKKyAgICAgICAgKFdl
YkNvcmU6OlBsdWdpblZpZXc6OmhhbmRsZUtleWJvYXJkRXZlbnQpOgorICAgICAgICAoV2ViQ29y
ZTo6UGx1Z2luVmlldzo6aGFuZGxlTW91c2VFdmVudCk6CisgICAgICAgIChXZWJDb3JlOjpQbHVn
aW5WaWV3Ojp1cGRhdGVQbHVnaW5XaWRnZXQpOgorICAgICAgICAoV2ViQ29yZTo6UGx1Z2luVmll
dzo6c2V0Rm9jdXMpOgorICAgICAgICAoV2ViQ29yZTo6UGx1Z2luVmlldzo6c2hvdyk6CisgICAg
ICAgIChXZWJDb3JlOjpQbHVnaW5WaWV3OjpoaWRlKToKKyAgICAgICAgKFdlYkNvcmU6OlBsdWdp
blZpZXc6OnBhaW50KToKKyAgICAgICAgKFdlYkNvcmU6OlBsdWdpblZpZXc6OnNldFBhcmVudCk6
CisgICAgICAgIChXZWJDb3JlOjpQbHVnaW5WaWV3OjpzZXROUFdpbmRvd1JlY3QpOgorICAgICAg
ICAoV2ViQ29yZTo6UGx1Z2luVmlldzo6c2V0TlBXaW5kb3dJZk5lZWRlZCk6CisgICAgICAgIChX
ZWJDb3JlOjpQbHVnaW5WaWV3OjpzZXRQYXJlbnRWaXNpYmxlKToKKyAgICAgICAgKFdlYkNvcmU6
OlBsdWdpblZpZXc6OmhhbmRsZVBvc3RSZWFkRmlsZSk6CisgICAgICAgIChXZWJDb3JlOjpQbHVn
aW5WaWV3OjpwbGF0Zm9ybUdldFZhbHVlU3RhdGljKToKKyAgICAgICAgKFdlYkNvcmU6OlBsdWdp
blZpZXc6OnBsYXRmb3JtR2V0VmFsdWUpOgorICAgICAgICAoV2ViQ29yZTo6UGx1Z2luVmlldzo6
aW52YWxpZGF0ZVJlY3QpOgorICAgICAgICAoV2ViQ29yZTo6UGx1Z2luVmlldzo6aW52YWxpZGF0
ZVJlZ2lvbik6CisgICAgICAgIChXZWJDb3JlOjpQbHVnaW5WaWV3Ojpmb3JjZVJlZHJhdyk6Cisg
ICAgICAgIChXZWJDb3JlOjpQbHVnaW5WaWV3OjpwbGF0Zm9ybVN0YXJ0KToKKyAgICAgICAgKFdl
YkNvcmU6OlBsdWdpblZpZXc6OnBsYXRmb3JtRGVzdHJveSk6CisKIDIwMTEtMTEtMTQgIFBhdmVs
IEZlbGRtYW4gIDxwZmVsZG1hbkBnb29nbGUuY29tPgogCiAgICAgICAgIFdlYiBJbnNwZWN0b3I6
IGNvbnNvbGUncyBwcm90b2NvbCBwYXlsb2FkIGRvZXMgbm90IGhhdmUgdXJsIGFuZCBsaW5lIHBy
b3BlcnRpZXMuCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9QbGF0Zm9ybUVmbC5jbWFrZSBi
L1NvdXJjZS9XZWJDb3JlL1BsYXRmb3JtRWZsLmNtYWtlCmluZGV4IDY2NWFkNjIuLmY1ZDQxZWYg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL1BsYXRmb3JtRWZsLmNtYWtlCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL1BsYXRmb3JtRWZsLmNtYWtlCkBAIC01LDE0ICs1LDE0IEBAIExJU1QoQVBQRU5E
IFdlYkNvcmVfTElOS19GTEFHUwogCiBMSVNUKEFQUEVORCBXZWJDb3JlX0lOQ0xVREVfRElSRUNU
T1JJRVMKICAgIiR7SkFWQVNDUklQVENPUkVfRElSfS93dGYvZ29iamVjdCIKKyAgIiR7V0VCQ09S
RV9ESVJ9L2FjY2Vzc2liaWxpdHkvZWZsIgorICAiJHtXRUJDT1JFX0RJUn0vcGFnZS9lZmwiCiAg
ICIke1dFQkNPUkVfRElSfS9wbGF0Zm9ybS9lZmwiCi0gICIke1dFQkNPUkVfRElSfS9wbGF0Zm9y
bS90ZXh0L2VmbCIKICAgIiR7V0VCQ09SRV9ESVJ9L3BsYXRmb3JtL2dyYXBoaWNzL2VmbCIKLSAg
IiR7V0VCQ09SRV9ESVJ9L3BhZ2UvZWZsIgotICAiJHtXRUJDT1JFX0RJUn0vYWNjZXNzaWJpbGl0
eS9lZmwiCisgICIke1dFQkNPUkVfRElSfS9wbGF0Zm9ybS90ZXh0L2VmbCIKKyAgIiR7V0VCQ09S
RV9ESVJ9L3BsdWdpbnMvZWZsIgogICAiJHtXRUJLSVRfRElSfS9lZmwvV2ViQ29yZVN1cHBvcnQi
CiAgICIke1dFQktJVF9ESVJ9L2VmbC9ld2siCi0gICIke0RFUklWRURfU09VUkNFU19ESVJ9Igog
KQogCiBMSVNUKEFQUEVORCBXZWJDb3JlX1NPVVJDRVMKQEAgLTcwLDExICs3MCwyOCBAQCBMSVNU
KEFQUEVORCBXZWJDb3JlX1NPVVJDRVMKICAgcGxhdGZvcm0vaW1hZ2UtZGVjb2RlcnMvd2VicC9X
RUJQSW1hZ2VEZWNvZGVyLmNwcAogICBwbGF0Zm9ybS9wb3NpeC9GaWxlU3lzdGVtUE9TSVguY3Bw
CiAgIHBsYXRmb3JtL3RleHQvZWZsL1RleHRCcmVha0l0ZXJhdG9ySW50ZXJuYWxJQ1VFZmwuY3Bw
Ci0gIHBsdWdpbnMvUGx1Z2luRGF0YU5vbmUuY3BwCi0gIHBsdWdpbnMvUGx1Z2luUGFja2FnZU5v
bmUuY3BwCi0gIHBsdWdpbnMvUGx1Z2luVmlld05vbmUuY3BwCiApCiAKK0lGIChFTkFCTEVfTkVU
U0NBUEVfUExVR0lOX0FQSSkKKyAgTElTVChBUFBFTkQgV2ViQ29yZV9TT1VSQ0VTCisgICAgcGx1
Z2lucy9QbHVnaW5EYXRhYmFzZS5jcHAKKyAgICBwbHVnaW5zL1BsdWdpbkRlYnVnLmNwcAorICAg
IHBsdWdpbnMvUGx1Z2luUGFja2FnZS5jcHAKKyAgICBwbHVnaW5zL1BsdWdpblN0cmVhbS5jcHAK
KyAgICBwbHVnaW5zL1BsdWdpblZpZXcuY3BwCisKKyAgICBwbHVnaW5zL2VmbC9QbHVnaW5EYXRh
RWZsLmNwcAorICAgIHBsdWdpbnMvZWZsL1BsdWdpblBhY2thZ2VFZmwuY3BwCisgICAgcGx1Z2lu
cy9lZmwvUGx1Z2luVmlld0VmbC5jcHAKKyAgKQorRUxTRSAoKQorICBMSVNUKEFQUEVORCBXZWJD
b3JlX1NPVVJDRVMKKyAgICBwbHVnaW5zL1BsdWdpbkRhdGFOb25lLmNwcAorICAgIHBsdWdpbnMv
UGx1Z2luUGFja2FnZU5vbmUuY3BwCisgICAgcGx1Z2lucy9QbHVnaW5WaWV3Tm9uZS5jcHAKKyAg
KQorRU5ESUYgKCkKKwogTElTVChBUFBFTkQgV2ViQ29yZV9VU0VSX0FHRU5UX1NUWUxFX1NIRUVU
UwogICAgICR7V0VCQ09SRV9ESVJ9L2Nzcy9tZWRpYUNvbnRyb2xzRWZsLmNzcwogKQpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvcGx1Z2lucy9QbHVnaW5WaWV3LmggYi9Tb3VyY2UvV2ViQ29y
ZS9wbHVnaW5zL1BsdWdpblZpZXcuaAppbmRleCA0NTNhY2JkLi45OTY4YjkwIDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9wbHVnaW5zL1BsdWdpblZpZXcuaAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9wbHVnaW5zL1BsdWdpblZpZXcuaApAQCAtMzczLDcgKzM3Myw3IEBAIG5hbWVzcGFjZSBXZWJD
b3JlIHsKICAgICAgICAgYm9vbCBtX2hhdmVVcGRhdGVkUGx1Z2luV2lkZ2V0OwogI2VuZGlmCiAK
LSNpZiAoKFBMQVRGT1JNKFFUKSB8fCBQTEFURk9STShXWCkpICYmIE9TKFdJTkRPV1MpKSB8fCBk
ZWZpbmVkKFhQX01BQ09TWCkKKyNpZiAoKFBMQVRGT1JNKFFUKSB8fCBQTEFURk9STShXWCkpICYm
IE9TKFdJTkRPV1MpKSB8fCBkZWZpbmVkKFhQX01BQ09TWCkgfHwgUExBVEZPUk0oRUZMKQogICAg
ICAgICAvLyBPbiBNYWMgT1NYIGFuZCBRdC9XaW5kb3dzIHRoZSBwbHVnaW4gZG9lcyBub3QgaGF2
ZSBpdHMgb3duIG5hdGl2ZSB3aWRnZXQsCiAgICAgICAgIC8vIGJ1dCBpcyB1c2luZyB0aGUgY29u
dGFpbmluZyB3aW5kb3cgYXMgaXRzIHJlZmVyZW5jZSBmb3IgcG9zaXRpb25pbmcvcGFpbnRpbmcu
CiAgICAgICAgIFBsYXRmb3JtUGx1Z2luV2lkZ2V0IG1fd2luZG93OwpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvcGx1Z2lucy9lZmwvUGx1Z2luRGF0YUVmbC5jcHAgYi9Tb3VyY2UvV2ViQ29y
ZS9wbHVnaW5zL2VmbC9QbHVnaW5EYXRhRWZsLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRl
eCAwMDAwMDAwLi5jMjFkNTFiCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvcGx1
Z2lucy9lZmwvUGx1Z2luRGF0YUVmbC5jcHAKQEAgLTAsMCArMSw2NiBAQAorLyoKKyAgICBDb3B5
cmlnaHQgKEMpIDIwMDYsIDIwMDcgQXBwbGUgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAg
ICBDb3B5cmlnaHQgKEMpIDIwMDggVHJvbGx0ZWNoIEFTQQorICAgIENvcHlyaWdodCAoQykgMjAw
OCBDb2xsYWJvcmEgTHRkLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICAgIENvcHlyaWdodCAoQykg
MjAwOCBJTmRUIC0gSW5zdGl0dXRvIE5va2lhIGRlIFRlY25vbG9naWEKKyAgICBDb3B5cmlnaHQg
KEMpIDIwMDktMjAxMCBQcm9GVVNJT04gZW1iZWRkZWQgc3lzdGVtcworICAgIENvcHlyaWdodCAo
QykgMjAwOS0yMDExIFNhbXN1bmcgRWxlY3Ryb25pY3MKKworICAgIFRoaXMgbGlicmFyeSBpcyBm
cmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAgICBtb2RpZnkg
aXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworICAg
IExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVp
dGhlcgorICAgIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBh
bnkgbGF0ZXIgdmVyc2lvbi4KKworICAgIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0
aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICAgIGJ1dCBXSVRIT1VUIEFOWSBXQVJS
QU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgICAgTUVSQ0hBTlRB
QklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUK
KyAgICBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKwor
ICAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdl
bmVyYWwgUHVibGljIExpY2Vuc2UKKyAgICBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRo
ZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bworICAgIHRoZSBGcmVlIFNvZnR3
YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCisg
ICAgQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisqLworCisjaW5jbHVkZSAiY29uZmlnLmgi
CisjaW5jbHVkZSAiUGx1Z2luRGF0YS5oIgorCisjaW5jbHVkZSAiUGx1Z2luRGF0YWJhc2UuaCIK
KyNpbmNsdWRlICJQbHVnaW5QYWNrYWdlLmgiCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKwordm9p
ZCBQbHVnaW5EYXRhOjppbml0UGx1Z2lucyhjb25zdCBQYWdlKikKK3sKKyAgICBjb25zdCBWZWN0
b3I8UGx1Z2luUGFja2FnZSo+JiBwbHVnaW5zID0gUGx1Z2luRGF0YWJhc2U6Omluc3RhbGxlZFBs
dWdpbnMoKS0+cGx1Z2lucygpOworCisgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBwbHVnaW5z
LnNpemUoKTsgKytpKSB7CisgICAgICAgIFBsdWdpblBhY2thZ2UqIHBhY2thZ2UgPSBwbHVnaW5z
W2ldOworICAgICAgICBQbHVnaW5JbmZvIGluZm87CisKKyAgICAgICAgaW5mby5uYW1lID0gcGFj
a2FnZS0+bmFtZSgpOworICAgICAgICBpbmZvLmZpbGUgPSBwYWNrYWdlLT5maWxlTmFtZSgpOwor
ICAgICAgICBpbmZvLmRlc2MgPSBwYWNrYWdlLT5kZXNjcmlwdGlvbigpOworCisgICAgICAgIGNv
bnN0IE1JTUVUb0Rlc2NyaXB0aW9uc01hcCYgbWltZVRvRGVzY3JpcHRpb25zID0gcGFja2FnZS0+
bWltZVRvRGVzY3JpcHRpb25zKCk7CisgICAgICAgIE1JTUVUb0Rlc2NyaXB0aW9uc01hcDo6Y29u
c3RfaXRlcmF0b3IgZW5kID0gbWltZVRvRGVzY3JpcHRpb25zLmVuZCgpOworICAgICAgICBmb3Ig
KE1JTUVUb0Rlc2NyaXB0aW9uc01hcDo6Y29uc3RfaXRlcmF0b3IgaXQgPSBtaW1lVG9EZXNjcmlw
dGlvbnMuYmVnaW4oKTsgaXQgIT0gZW5kOyArK2l0KSB7CisgICAgICAgICAgICBNaW1lQ2xhc3NJ
bmZvIG1pbWU7CisKKyAgICAgICAgICAgIG1pbWUudHlwZSA9IGl0LT5maXJzdDsKKyAgICAgICAg
ICAgIG1pbWUuZGVzYyA9IGl0LT5zZWNvbmQ7CisgICAgICAgICAgICBtaW1lLmV4dGVuc2lvbnMg
PSBwYWNrYWdlLT5taW1lVG9FeHRlbnNpb25zKCkuZ2V0KG1pbWUudHlwZSk7CisKKyAgICAgICAg
ICAgIGluZm8ubWltZXMuYXBwZW5kKG1pbWUpOworICAgICAgICB9CisKKyAgICAgICAgbV9wbHVn
aW5zLmFwcGVuZChpbmZvKTsKKyAgICB9Cit9CisKK3ZvaWQgUGx1Z2luRGF0YTo6cmVmcmVzaCgp
Cit7CisgICAgUGx1Z2luRGF0YWJhc2U6Omluc3RhbGxlZFBsdWdpbnMoKS0+cmVmcmVzaCgpOwor
fQorCit9OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGx1Z2lucy9lZmwvUGx1Z2luUGFj
a2FnZUVmbC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbHVnaW5zL2VmbC9QbHVnaW5QYWNrYWdlRWZs
LmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hN2IwYTBiCi0tLSAvZGV2
L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvcGx1Z2lucy9lZmwvUGx1Z2luUGFja2FnZUVmbC5j
cHAKQEAgLTAsMCArMSwxNjggQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDYsIDIwMDcgQXBw
bGUgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAwOCBDb2xs
YWJvcmEgTHRkLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDA4IE51
YW50aSBMdGQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDggSU5kVCAtIEluc3RpdHV0byBOb2tpYSBk
ZSBUZWNub2xvZ2lhCisgKiBDb3B5cmlnaHQgKEMpIDIwMDktMjAxMCBQcm9GVVNJT04gZW1iZWRk
ZWQgc3lzdGVtcworICogQ29weXJpZ2h0IChDKSAyMDA5LTIwMTEgU2Ftc3VuZyBFbGVjdHJvbmlj
cworICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9y
bXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3Zp
ZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVk
aXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0
IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBk
b2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlz
dHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQ09N
UFVURVIsIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJS
QU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdB
UlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIK
KyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBDT01Q
VVRFUiwgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwg
SU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVF
TlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJF
TUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwg
T1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQg
QU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwg
U1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9U
SEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNP
RlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdF
LgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJQbHVnaW5QYWNrYWdlLmgi
CisKKyNpbmNsdWRlICJNSU1FVHlwZVJlZ2lzdHJ5LmgiCisjaW5jbHVkZSAiTm90SW1wbGVtZW50
ZWQuaCIKKyNpbmNsdWRlICJQbHVnaW5EYXRhYmFzZS5oIgorI2luY2x1ZGUgIlBsdWdpbkRlYnVn
LmgiCisjaW5jbHVkZSAibnBydW50aW1lX2ltcGwuaCIKKworI2luY2x1ZGUgPEVpbmEuaD4KKyNp
bmNsdWRlIDxkbGZjbi5oPgorI2luY2x1ZGUgPHd0Zi90ZXh0L0NTdHJpbmcuaD4KKworbmFtZXNw
YWNlIFdlYkNvcmUgeworCit0eXBlZGVmIGNoYXIqICgqTlBQX0dldE1JTUVEZXNjcmlwdGlvblBy
b2NQdHIpKCk7CisKK2Jvb2wgUGx1Z2luUGFja2FnZTo6ZmV0Y2hJbmZvKCkKK3sKKyAgICBjb25z
dCBjaGFyICplcnJtc2c7CisKKyAgICBpZiAoIWxvYWQoKSkKKyAgICAgICAgcmV0dXJuIGZhbHNl
OworCisgICAgTlBQX0dldFZhbHVlUHJvY1B0ciBnZXRWYWx1ZSA9IDA7CisgICAgTlBQX0dldE1J
TUVEZXNjcmlwdGlvblByb2NQdHIgZ2V0TUlNRURlc2NyaXB0aW9uID0gMDsKKworICAgIGdldFZh
bHVlID0gcmVpbnRlcnByZXRfY2FzdDxOUFBfR2V0VmFsdWVQcm9jUHRyPihkbHN5bShtX21vZHVs
ZSwgIk5QX0dldFZhbHVlIikpOworICAgIGlmICgoZXJybXNnID0gZGxlcnJvcigpKSkgeworICAg
ICAgICBFSU5BX0xPR19FUlIoIkNvdWxkIG5vdCBnZXQgc3ltYm9sIE5QX0dldFZhbHVlOiAlcyIs
IGVycm1zZyk7CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisKKyAgICBnZXRNSU1FRGVz
Y3JpcHRpb24gPSByZWludGVycHJldF9jYXN0PE5QUF9HZXRNSU1FRGVzY3JpcHRpb25Qcm9jUHRy
PihkbHN5bShtX21vZHVsZSwgIk5QX0dldE1JTUVEZXNjcmlwdGlvbiIpKTsKKyAgICBpZiAoKGVy
cm1zZyA9IGRsZXJyb3IoKSkpIHsKKyAgICAgICAgRUlOQV9MT0dfRVJSKCJDb3VsZCBub3QgZ2V0
IHN5bWJvbCBOUF9HZXRNSU1FRGVzY3JpcHRpb246ICVzIiwgZXJybXNnKTsKKyAgICAgICAgcmV0
dXJuIGZhbHNlOworICAgIH0KKworICAgIGNoYXIqIGJ1ZmZlciA9IDA7CisgICAgTlBFcnJvciBl
cnIgPSBnZXRWYWx1ZSgwLCBOUFBWcGx1Z2luTmFtZVN0cmluZywgc3RhdGljX2Nhc3Q8dm9pZCo+
KCZidWZmZXIpKTsKKyAgICBpZiAoZXJyICE9IE5QRVJSX05PX0VSUk9SKQorICAgICAgICByZXR1
cm4gZmFsc2U7CisgICAgbV9uYW1lID0gYnVmZmVyOworCisgICAgYnVmZmVyID0gMDsKKyAgICBl
cnIgPSBnZXRWYWx1ZSgwLCBOUFBWcGx1Z2luRGVzY3JpcHRpb25TdHJpbmcsIHN0YXRpY19jYXN0
PHZvaWQqPigmYnVmZmVyKSk7CisgICAgaWYgKGVyciAhPSBOUEVSUl9OT19FUlJPUikKKyAgICAg
ICAgcmV0dXJuIGZhbHNlOworICAgIG1fZGVzY3JpcHRpb24gPSBidWZmZXI7CisgICAgZGV0ZXJt
aW5lTW9kdWxlVmVyc2lvbkZyb21EZXNjcmlwdGlvbigpOworCisgICAgU3RyaW5nIGRlc2NyaXB0
aW9uID0gZ2V0TUlNRURlc2NyaXB0aW9uKCk7CisKKyAgICBWZWN0b3I8U3RyaW5nPiB0eXBlczsK
KyAgICBkZXNjcmlwdGlvbi5zcGxpdChVQ2hhcignOycpLCBmYWxzZSwgdHlwZXMpOworCisgICAg
Zm9yIChzaXplX3QgaSA9IDA7IGkgPCB0eXBlcy5zaXplKCk7ICsraSkgeworICAgICAgICBWZWN0
b3I8U3RyaW5nPiBtaW1lOworICAgICAgICB0eXBlc1tpXS5zcGxpdChVQ2hhcignOicpLCB0cnVl
LCBtaW1lKTsKKworICAgICAgICBpZiAoIW1pbWUuaXNFbXB0eSgpID4gMCkgeworICAgICAgICAg
ICAgVmVjdG9yPFN0cmluZz4gZXh0czsKKworICAgICAgICAgICAgaWYgKG1pbWUuc2l6ZSgpID4g
MSkKKyAgICAgICAgICAgICAgICBtaW1lWzFdLnNwbGl0KFVDaGFyKCcsJyksIGZhbHNlLCBleHRz
KTsKKworICAgICAgICAgICAgZGV0ZXJtaW5lUXVpcmtzKG1pbWVbMF0pOworICAgICAgICAgICAg
bV9taW1lVG9FeHRlbnNpb25zLmFkZChtaW1lWzBdLCBleHRzKTsKKworICAgICAgICAgICAgaWYg
KG1pbWUuc2l6ZSgpID4gMikKKyAgICAgICAgICAgICAgICBtX21pbWVUb0Rlc2NyaXB0aW9ucy5h
ZGQobWltZVswXSwgbWltZVsyXSk7CisgICAgICAgIH0KKyAgICB9CisKKyAgICByZXR1cm4gdHJ1
ZTsKK30KKwordWludDE2X3QgUGx1Z2luUGFja2FnZTo6TlBWZXJzaW9uKCkgY29uc3QKK3sKKyAg
ICByZXR1cm4gTlBWRVJTX0hBU19QTFVHSU5fVEhSRUFEX0FTWU5DX0NBTEw7Cit9CisKK2Jvb2wg
UGx1Z2luUGFja2FnZTo6bG9hZCgpCit7CisgICAgY2hhciogZXJybXNnOworCisgICAgaWYgKG1f
aXNMb2FkZWQpIHsKKyAgICAgICAgbV9sb2FkQ291bnQrKzsKKyAgICAgICAgcmV0dXJuIHRydWU7
CisgICAgfQorCisgICAgbV9tb2R1bGUgPSBkbG9wZW4obV9wYXRoLnV0ZjgoKS5kYXRhKCksIFJU
TERfTEFaWSB8IFJUTERfTE9DQUwpOworICAgIGlmICgoZXJybXNnID0gZGxlcnJvcigpKSkgewor
ICAgICAgICBFSU5BX0xPR19XQVJOKCIlcyBub3QgbG9hZGVkOiAlcyIsIG1fcGF0aC51dGY4KCku
ZGF0YSgpLCBlcnJtc2cpOworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorCisgICAgbV9p
c0xvYWRlZCA9IHRydWU7CisKKyAgICBOUF9Jbml0aWFsaXplRnVuY1B0ciBpbml0aWFsaXplOwor
ICAgIE5QRXJyb3IgZXJyOworCisgICAgaW5pdGlhbGl6ZSA9IHJlaW50ZXJwcmV0X2Nhc3Q8TlBf
SW5pdGlhbGl6ZUZ1bmNQdHI+KGRsc3ltKG1fbW9kdWxlLCAiTlBfSW5pdGlhbGl6ZSIpKTsKKyAg
ICBpZiAoKGVycm1zZyA9IGRsZXJyb3IoKSkpIHsKKyAgICAgICAgRUlOQV9MT0dfRVJSKCJDb3Vs
ZCBub3QgZ2V0IHN5bWJvbCBOUF9Jbml0aWFsaXplOiAlcyIsIGVycm1zZyk7CisgICAgICAgIGdv
dG8gYWJvcnQ7CisgICAgfQorCisgICAgbV9OUFBfU2h1dGRvd24gPSByZWludGVycHJldF9jYXN0
PE5QUF9TaHV0ZG93blByb2NQdHI+KGRsc3ltKG1fbW9kdWxlLCAiTlBfU2h1dGRvd24iKSk7Cisg
ICAgaWYgKChlcnJtc2cgPSBkbGVycm9yKCkpKSB7CisgICAgICAgIEVJTkFfTE9HX0VSUigiQ291
bGQgbm90IGdldCBzeW1ib2wgTlBfU2h1dGRvd246ICVzIiwgZXJybXNnKTsKKyAgICAgICAgZ290
byBhYm9ydDsKKyAgICB9CisKKyAgICBtZW1zZXQoJm1fcGx1Z2luRnVuY3MsIDAsIHNpemVvZiht
X3BsdWdpbkZ1bmNzKSk7CisgICAgbV9wbHVnaW5GdW5jcy5zaXplID0gc2l6ZW9mKG1fcGx1Z2lu
RnVuY3MpOworCisgICAgaW5pdGlhbGl6ZUJyb3dzZXJGdW5jcygpOworCisjaWYgZGVmaW5lZChY
UF9VTklYKQorICAgIGVyciA9IGluaXRpYWxpemUoJm1fYnJvd3NlckZ1bmNzLCAmbV9wbHVnaW5G
dW5jcyk7CisjZWxzZQorICAgIGVyciA9IGluaXRpYWxpemUoJm1fYnJvd3NlckZ1bmNzKTsKKyNl
bmRpZgorICAgIGlmIChlcnIgIT0gTlBFUlJfTk9fRVJST1IpCisgICAgICAgIGdvdG8gYWJvcnQ7
CisKKyAgICBtX2xvYWRDb3VudCsrOworICAgIHJldHVybiB0cnVlOworCithYm9ydDoKKyAgICBF
SU5BX0xPR19EQkcoImZhaWxlZCB0byBsb2FkIHBsdWdpbiwgdW5sb2FkIGl0IHdpdGhvdXQgc2h1
dHRpbmcgaXQgZG93bi4iKTsKKyAgICB1bmxvYWRXaXRob3V0U2h1dGRvd24oKTsKKyAgICByZXR1
cm4gZmFsc2U7Cit9CisKK30KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsdWdpbnMvZWZs
L1BsdWdpblZpZXdFZmwuY3BwIGIvU291cmNlL1dlYkNvcmUvcGx1Z2lucy9lZmwvUGx1Z2luVmll
d0VmbC5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTg2ODAyYwotLS0g
L2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsdWdpbnMvZWZsL1BsdWdpblZpZXdFZmwu
Y3BwCkBAIC0wLDAgKzEsMzQzIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA2LCAyMDA3IEFw
cGxlIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDggQ29s
bGFib3JhIEx0ZC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAwOCBJ
TmRUIC0gSW5zdGl0dXRvIE5va2lhIGRlIFRlY25vbG9naWEKKyAqIENvcHlyaWdodCAoQykgMjAw
OS0yMDEwIFByb0ZVU0lPTiBlbWJlZGRlZCBzeXN0ZW1zCisgKiBDb3B5cmlnaHQgKEMpIDIwMDkt
MjAxMSBTYW1zdW5nIEVsZWN0cm9uaWNzCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBp
biBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRp
b24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMK
KyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCBy
ZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRp
b25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFs
cyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJ
UyBQUk9WSURFRCBCWSBBUFBMRSBDT01QVVRFUiwgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICog
RVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJ
VE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5P
IEVWRU5UIFNIQUxMIEFQUExFIENPTVBVVEVSLCBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUg
TElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAq
IEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklD
RVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJS
VVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZ
LCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5D
TFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9G
IFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9T
U0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2lu
Y2x1ZGUgIlBsdWdpblZpZXcuaCIKKworI2luY2x1ZGUgIkZyYW1lLmgiCisjaW5jbHVkZSAiRnJh
bWVWaWV3LmgiCisjaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0LmgiCisjaW5jbHVkZSAiSFRNTE5h
bWVzLmgiCisjaW5jbHVkZSAiSFRNTFBsdWdJbkVsZW1lbnQuaCIKKyNpbmNsdWRlICJIb3N0V2lu
ZG93LmgiCisjaW5jbHVkZSAiTW91c2VFdmVudC5oIgorI2luY2x1ZGUgIk5vdEltcGxlbWVudGVk
LmgiCisjaW5jbHVkZSAiUGx1Z2luUGFja2FnZS5oIgorI2luY2x1ZGUgIm5wcnVudGltZV9pbXBs
LmgiCisjaW5jbHVkZSAicnVudGltZS9KU0xvY2suaCIKKyNpbmNsdWRlIDxFY29yZV9FdmFzLmg+
CisjaW5jbHVkZSA8RWNvcmVfWC5oPgorI2luY2x1ZGUgPEV2YXMuaD4KKworbmFtZXNwYWNlIFdl
YkNvcmUgeworCit1c2luZyBuYW1lc3BhY2UgSFRNTE5hbWVzOworCitib29sIFBsdWdpblZpZXc6
OmRpc3BhdGNoTlBFdmVudChOUEV2ZW50JiBldmVudCkKK3sKKyAgICBpZiAoIW1fcGx1Z2luLT5w
bHVnaW5GdW5jcygpLT5ldmVudCkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgUGx1Z2lu
Vmlldzo6c2V0Q3VycmVudFBsdWdpblZpZXcodGhpcyk7CisgICAgSlNDOjpKU0xvY2s6OkRyb3BB
bGxMb2NrcyBkcm9wQWxsTG9ja3MoZmFsc2UpOworICAgIHNldENhbGxpbmdQbHVnaW4odHJ1ZSk7
CisKKyAgICBib29sIGFjY2VwdGVkID0gbV9wbHVnaW4tPnBsdWdpbkZ1bmNzKCktPmV2ZW50KG1f
aW5zdGFuY2UsICZldmVudCk7CisKKyAgICBzZXRDYWxsaW5nUGx1Z2luKGZhbHNlKTsKKyAgICBQ
bHVnaW5WaWV3OjpzZXRDdXJyZW50UGx1Z2luVmlldygwKTsKKyAgICByZXR1cm4gYWNjZXB0ZWQ7
Cit9CisKKyNpZiBkZWZpbmVkKFhQX1VOSVgpCit2b2lkIFBsdWdpblZpZXc6OmhhbmRsZUZvY3Vz
SW5FdmVudCgpCit7CisgICAgbm90SW1wbGVtZW50ZWQoKTsKK30KKwordm9pZCBQbHVnaW5WaWV3
OjpoYW5kbGVGb2N1c091dEV2ZW50KCkKK3sKKyAgICBub3RJbXBsZW1lbnRlZCgpOworfQorI2Vu
ZGlmCisKK3ZvaWQgUGx1Z2luVmlldzo6aGFuZGxlS2V5Ym9hcmRFdmVudChLZXlib2FyZEV2ZW50
KikKK3sKKyAgICBub3RJbXBsZW1lbnRlZCgpOworfQorCit2b2lkIFBsdWdpblZpZXc6OmhhbmRs
ZU1vdXNlRXZlbnQoTW91c2VFdmVudCogZXZlbnQpCit7CisgICAgTlBFdmVudCB4RXZlbnQ7CisK
KyNpZiBkZWZpbmVkKFhQX1VOSVgpCisgICAgY29uc3QgSW50UmVjdCByZWN0ID0gcGFyZW50KCkt
PmNvbnRlbnRzVG9TY3JlZW4oSW50UmVjdCgwLCAwLCBldmVudC0+b2Zmc2V0WCgpLCBldmVudC0+
b2Zmc2V0WSgpKSk7CisgICAgY29uc3QgaW50IGV2ZW50WCA9IHJlY3Qud2lkdGgoKTsKKyAgICBj
b25zdCBpbnQgZXZlbnRZID0gcmVjdC5oZWlnaHQoKTsKKyAgICBpZiAoZXZlbnQtPnR5cGUoKSA9
PSBldmVudE5hbWVzKCkubW91c2Vtb3ZlRXZlbnQKKyAgICAgICAgICAgIHx8IGV2ZW50LT50eXBl
KCkgPT0gZXZlbnROYW1lcygpLm1vdXNlb3V0RXZlbnQKKyAgICAgICAgICAgIHx8IGV2ZW50LT50
eXBlKCkgPT0gZXZlbnROYW1lcygpLm1vdXNlb3ZlckV2ZW50KSB7CisgICAgICAgIHhFdmVudC50
eXBlID0gTW90aW9uTm90aWZ5OworICAgICAgICB4RXZlbnQueG1vdGlvbi54ID0gZXZlbnRYOwor
ICAgICAgICB4RXZlbnQueG1vdGlvbi55ID0gZXZlbnRZOworICAgIH0gZWxzZSBpZiAoZXZlbnQt
PnR5cGUoKSA9PSBldmVudE5hbWVzKCkubW91c2Vkb3duRXZlbnQpIHsKKyAgICAgICAgeEV2ZW50
LnR5cGUgPSBCdXR0b25QcmVzczsKKyAgICAgICAgeEV2ZW50LnhidXR0b24ueCA9IGV2ZW50WDsK
KyAgICAgICAgeEV2ZW50LnhidXR0b24ueSA9IGV2ZW50WTsKKyAgICAgICAgeEV2ZW50LnhidXR0
b24uYnV0dG9uID0gZXZlbnQtPmJ1dHRvbigpICsgMTsgLy8gRE9NIE1vdXNlRXZlbnQgY291bnRz
IGZyb20gMCwgYW5kIFhCdXR0b25FdmVudCBmcm9tIDEuCisgICAgfSBlbHNlIGlmIChldmVudC0+
dHlwZSgpID09IGV2ZW50TmFtZXMoKS5tb3VzZXVwRXZlbnQpIHsKKyAgICAgICAgeEV2ZW50LnR5
cGUgPSBCdXR0b25SZWxlYXNlOworICAgICAgICB4RXZlbnQueGJ1dHRvbi54ID0gZXZlbnRYOwor
ICAgICAgICB4RXZlbnQueGJ1dHRvbi55ID0gZXZlbnRZOworICAgICAgICB4RXZlbnQueGJ1dHRv
bi5idXR0b24gPSBldmVudC0+YnV0dG9uKCkgKyAxOworICAgIH0gZWxzZQorICAgICAgICByZXR1
cm47CisjZW5kaWYKKworICAgIGlmIChkaXNwYXRjaE5QRXZlbnQoeEV2ZW50KSkKKyAgICAgICAg
ZXZlbnQtPnNldERlZmF1bHRIYW5kbGVkKCk7Cit9CisKK3ZvaWQgUGx1Z2luVmlldzo6dXBkYXRl
UGx1Z2luV2lkZ2V0KCkKK3sKKyAgICBub3RJbXBsZW1lbnRlZCgpOworfQorCit2b2lkIFBsdWdp
blZpZXc6OnNldEZvY3VzKGJvb2wgZm9jdXNlZCkKK3sKKyAgICBpZiAoZm9jdXNlZCkKKyAgICAg
ICAgbV9lbGVtZW50LT5kb2N1bWVudCgpLT5zZXRGb2N1c2VkTm9kZShtX2VsZW1lbnQpOworCisg
ICAgV2lkZ2V0OjpzZXRGb2N1cyhmb2N1c2VkKTsKK30KKwordm9pZCBQbHVnaW5WaWV3OjpzaG93
KCkKK3sKKyAgICBzZXRTZWxmVmlzaWJsZSh0cnVlKTsKKworICAgIFdpZGdldDo6c2hvdygpOwor
fQorCit2b2lkIFBsdWdpblZpZXc6OmhpZGUoKQoreworICAgIHNldFNlbGZWaXNpYmxlKGZhbHNl
KTsKKworICAgIFdpZGdldDo6aGlkZSgpOworfQorCit2b2lkIFBsdWdpblZpZXc6OnBhaW50KEdy
YXBoaWNzQ29udGV4dCogY29udGV4dCwgY29uc3QgSW50UmVjdCYgcmVjdCkKK3sKKyAgICBpZiAo
IW1faXNTdGFydGVkKQorICAgICAgICBwYWludE1pc3NpbmdQbHVnaW5JY29uKGNvbnRleHQsIHJl
Y3QpOworfQorCit2b2lkIFBsdWdpblZpZXc6OnNldFBhcmVudChTY3JvbGxWaWV3KiBwYXJlbnQp
Cit7CisgICAgV2lkZ2V0OjpzZXRQYXJlbnQocGFyZW50KTsKKworICAgIGlmIChwYXJlbnQpCisg
ICAgICAgIGluaXQoKTsKK30KKwordm9pZCBQbHVnaW5WaWV3OjpzZXROUFdpbmRvd1JlY3QoY29u
c3QgSW50UmVjdCYgcmVjdCkKK3sKKyAgICBub3RJbXBsZW1lbnRlZCgpOworfQorCit2b2lkIFBs
dWdpblZpZXc6OnNldE5QV2luZG93SWZOZWVkZWQoKQoreworfQorCit2b2lkIFBsdWdpblZpZXc6
OnNldFBhcmVudFZpc2libGUoYm9vbCB2aXNpYmxlKQoreworICAgIFdpZGdldDo6c2V0UGFyZW50
VmlzaWJsZSh2aXNpYmxlKTsKK30KKworTlBFcnJvciBQbHVnaW5WaWV3OjpoYW5kbGVQb3N0UmVh
ZEZpbGUoVmVjdG9yPGNoYXI+JiBidWZmZXIsIHVpbnQzMl90IGxlbiwgY29uc3QgY2hhciogYnVm
KQoreworICAgIFN0cmluZyBmaWxlbmFtZShidWYsIGxlbik7CisKKyAgICBpZiAoZmlsZW5hbWUu
c3RhcnRzV2l0aCgiZmlsZTovLy8iKSkKKyNpZiBkZWZpbmVkKFhQX1VOSVgpCisgICAgICAgIGZp
bGVuYW1lID0gZmlsZW5hbWUuc3Vic3RyaW5nKDcpOworI2Vsc2UKKyAgICAgICAgZmlsZW5hbWUg
PSBmaWxlbmFtZS5zdWJzdHJpbmcoOCk7CisjZW5kaWYKKworICAgIGxvbmcgbG9uZyBzaXplOwor
ICAgIGlmICghZ2V0RmlsZVNpemUoZmlsZW5hbWUsIHNpemUpKQorICAgICAgICByZXR1cm4gTlBF
UlJfRklMRV9OT1RfRk9VTkQ7CisKKyAgICBGSUxFKiBmaWxlSGFuZGxlID0gZm9wZW4oZmlsZW5h
bWUudXRmOCgpLmRhdGEoKSwgInIiKTsKKyAgICBpZiAoIWZpbGVIYW5kbGUpCisgICAgICAgIHJl
dHVybiBOUEVSUl9GSUxFX05PVF9GT1VORDsKKworICAgIGJ1ZmZlci5yZXNpemUoc2l6ZSk7Cisg
ICAgaW50IGJ5dGVzUmVhZCA9IGZyZWFkKGJ1ZmZlci5kYXRhKCksIDEsIHNpemUsIGZpbGVIYW5k
bGUpOworCisgICAgZmNsb3NlKGZpbGVIYW5kbGUpOworCisgICAgaWYgKGJ5dGVzUmVhZCA8PSAw
KQorICAgICAgICByZXR1cm4gTlBFUlJfRklMRV9OT1RfRk9VTkQ7CisKKyAgICByZXR1cm4gTlBF
UlJfTk9fRVJST1I7Cit9CisKK2Jvb2wgUGx1Z2luVmlldzo6cGxhdGZvcm1HZXRWYWx1ZVN0YXRp
YyhOUE5WYXJpYWJsZSB2YXJpYWJsZSwgdm9pZCogdmFsdWUsIE5QRXJyb3IqIHJlc3VsdCkKK3sK
KyAgICBzd2l0Y2ggKHZhcmlhYmxlKSB7CisgICAgY2FzZSBOUE5WVG9vbGtpdDoKKyAgICAgICAg
KnN0YXRpY19jYXN0PHVpbnQzMl90Kj4odmFsdWUpID0gMDsKKyAgICAgICAgKnJlc3VsdCA9IE5Q
RVJSX05PX0VSUk9SOworICAgICAgICByZXR1cm4gdHJ1ZTsKKworICAgIGNhc2UgTlBOVlN1cHBv
cnRzWEVtYmVkQm9vbDoKKyAgICAgICAgKnN0YXRpY19jYXN0PE5QQm9vbCo+KHZhbHVlKSA9IGZh
bHNlOworICAgICAgICAqcmVzdWx0ID0gTlBFUlJfTk9fRVJST1I7CisgICAgICAgIHJldHVybiB0
cnVlOworCisgICAgY2FzZSBOUE5WamF2YXNjcmlwdEVuYWJsZWRCb29sOgorICAgICAgICAqc3Rh
dGljX2Nhc3Q8TlBCb29sKj4odmFsdWUpID0gdHJ1ZTsKKyAgICAgICAgKnJlc3VsdCA9IE5QRVJS
X05PX0VSUk9SOworICAgICAgICByZXR1cm4gdHJ1ZTsKKworICAgIGNhc2UgTlBOVlN1cHBvcnRz
V2luZG93bGVzczoKKyAgICAgICAgKnN0YXRpY19jYXN0PE5QQm9vbCo+KHZhbHVlKSA9IGZhbHNl
OworICAgICAgICAqcmVzdWx0ID0gTlBFUlJfTk9fRVJST1I7CisgICAgICAgIHJldHVybiB0cnVl
OworCisgICAgZGVmYXVsdDoKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KK30KKworYm9v
bCBQbHVnaW5WaWV3OjpwbGF0Zm9ybUdldFZhbHVlKE5QTlZhcmlhYmxlIHZhcmlhYmxlLCB2b2lk
KiB2YWx1ZSwgTlBFcnJvciogcmVzdWx0KQoreworICAgIGlmICghdmFsdWUgfHwgIXJlc3VsdCkK
KyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgc3dpdGNoICh2YXJpYWJsZSkgeworICAgIGNh
c2UgTlBOVnhEaXNwbGF5OgorICAgICAgICAqc3RhdGljX2Nhc3Q8dm9pZCoqPih2YWx1ZSkgPSBz
dGF0aWNfY2FzdDxEaXNwbGF5Kj4oZWNvcmVfeF9kaXNwbGF5X2dldCgpKTsKKyAgICAgICAgKnJl
c3VsdCA9IE5QRVJSX05PX0VSUk9SOworICAgICAgICByZXR1cm4gdHJ1ZTsKKworICAgIGNhc2Ug
TlBOVnh0QXBwQ29udGV4dDoKKyAgICAgICAgKnJlc3VsdCA9IE5QRVJSX0dFTkVSSUNfRVJST1I7
CisgICAgICAgIHJldHVybiB0cnVlOworCisgICAgY2FzZSBOUE5WV2luZG93TlBPYmplY3Q6IHsK
KyAgICAgICAgaWYgKG1faXNKYXZhU2NyaXB0UGF1c2VkKSB7CisgICAgICAgICAgICAqcmVzdWx0
ID0gTlBFUlJfR0VORVJJQ19FUlJPUjsKKyAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAg
ICB9CisKKyAgICAgICAgTlBPYmplY3QqIHdpbmRvd1NjcmlwdE9iamVjdCA9IG1fcGFyZW50RnJh
bWUtPnNjcmlwdCgpLT53aW5kb3dTY3JpcHROUE9iamVjdCgpOworCisgICAgICAgIC8vIFJldHVy
biB2YWx1ZSBpcyBleHBlY3RlZCB0byBiZSByZXRhaW5lZCwgYXMgZGVzY3JpYmVkIGhlcmU6IDxo
dHRwOi8vd3d3Lm1vemlsbGEub3JnL3Byb2plY3RzL3BsdWdpbi9ucHJ1bnRpbWUuaHRtbD4KKyAg
ICAgICAgaWYgKHdpbmRvd1NjcmlwdE9iamVjdCkKKyAgICAgICAgICAgIF9OUE5fUmV0YWluT2Jq
ZWN0KHdpbmRvd1NjcmlwdE9iamVjdCk7CisKKyAgICAgICAgKnN0YXRpY19jYXN0PHZvaWQqKj4o
dmFsdWUpID0gd2luZG93U2NyaXB0T2JqZWN0OworCisgICAgICAgICpyZXN1bHQgPSBOUEVSUl9O
T19FUlJPUjsKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgfQorCisgICAgY2FzZSBOUE5WUGx1
Z2luRWxlbWVudE5QT2JqZWN0OiB7CisgICAgICAgIGlmIChtX2lzSmF2YVNjcmlwdFBhdXNlZCkg
eworICAgICAgICAgICAgKnJlc3VsdCA9IE5QRVJSX0dFTkVSSUNfRVJST1I7CisgICAgICAgICAg
ICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgfQorCisgICAgICAgIE5QT2JqZWN0KiBwbHVnaW5TY3Jp
cHRPYmplY3QgPSAwOworCisgICAgICAgIGlmIChtX2VsZW1lbnQtPmhhc1RhZ05hbWUoYXBwbGV0
VGFnKSB8fCBtX2VsZW1lbnQtPmhhc1RhZ05hbWUoZW1iZWRUYWcpIHx8IG1fZWxlbWVudC0+aGFz
VGFnTmFtZShvYmplY3RUYWcpKQorICAgICAgICAgICAgcGx1Z2luU2NyaXB0T2JqZWN0ID0gc3Rh
dGljX2Nhc3Q8SFRNTFBsdWdJbkVsZW1lbnQqPihtX2VsZW1lbnQpLT5nZXROUE9iamVjdCgpOwor
CisgICAgICAgIC8vIFJldHVybiB2YWx1ZSBpcyBleHBlY3RlZCB0byBiZSByZXRhaW5lZCwgYXMg
ZGVzY3JpYmVkIGhlcmU6IDxodHRwOi8vd3d3Lm1vemlsbGEub3JnL3Byb2plY3RzL3BsdWdpbi9u
cHJ1bnRpbWUuaHRtbD4KKyAgICAgICAgaWYgKHBsdWdpblNjcmlwdE9iamVjdCkKKyAgICAgICAg
ICAgIF9OUE5fUmV0YWluT2JqZWN0KHBsdWdpblNjcmlwdE9iamVjdCk7CisKKyAgICAgICAgKnN0
YXRpY19jYXN0PHZvaWQqKj4odmFsdWUpID0gcGx1Z2luU2NyaXB0T2JqZWN0OworCisgICAgICAg
ICpyZXN1bHQgPSBOUEVSUl9OT19FUlJPUjsKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgfQor
CisgICAgY2FzZSBOUE5WbmV0c2NhcGVXaW5kb3c6IHsKKyAgICAgICAgRXZhc19PYmplY3QqIHdp
ZGdldCA9IG1fcGFyZW50RnJhbWUtPnZpZXcoKS0+aG9zdFdpbmRvdygpLT5wbGF0Zm9ybVBhZ2VD
bGllbnQoKTsKKyAgICAgICAgRXZhcyogZXZhcyA9IGV2YXNfb2JqZWN0X2V2YXNfZ2V0KHdpZGdl
dCk7CisgICAgICAgIEVjb3JlX0V2YXMqIGVjb3JlRXZhcyA9IGVjb3JlX2V2YXNfZWNvcmVfZXZh
c19nZXQoZXZhcyk7CisgICAgICAgICpzdGF0aWNfY2FzdDxYSUQqPih2YWx1ZSkgPSBzdGF0aWNf
Y2FzdDxXaW5kb3c+KGVjb3JlX2V2YXNfd2luZG93X2dldChlY29yZUV2YXMpKTsKKyAgICAgICAg
KnJlc3VsdCA9IE5QRVJSX05PX0VSUk9SOworICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CisK
KyAgICBjYXNlIE5QTlZUb29sa2l0OgorICAgICAgICBpZiAobV9wbHVnaW4tPnF1aXJrcygpLmNv
bnRhaW5zKFBsdWdpblF1aXJrUmVxdWlyZXNHdGtUb29sS2l0KSkgeworICAgICAgICAgICAgKnN0
YXRpY19jYXN0PHVpbnQzMl90Kj4odmFsdWUpID0gMjsKKyAgICAgICAgICAgICpyZXN1bHQgPSBO
UEVSUl9OT19FUlJPUjsKKyAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICB9CisgICAg
ICAgIHJldHVybiBmYWxzZTsKKyAgICBkZWZhdWx0OgorICAgICAgICByZXR1cm4gZmFsc2U7Cisg
ICAgfQorfQorCit2b2lkIFBsdWdpblZpZXc6OmludmFsaWRhdGVSZWN0KGNvbnN0IEludFJlY3Qm
IHJlY3QpCit7CisgICAgaW52YWxpZGF0ZVdpbmRvd2xlc3NQbHVnaW5SZWN0KHJlY3QpOworfQor
Cit2b2lkIFBsdWdpblZpZXc6OmludmFsaWRhdGVSZWN0KE5QUmVjdCogcmVjdCkKK3sKKyAgICBp
ZiAoIXJlY3QpIHsKKyAgICAgICAgaW52YWxpZGF0ZSgpOworICAgICAgICByZXR1cm47CisgICAg
fQorCisgICAgaW52YWxpZGF0ZVJlY3QoSW50UmVjdChyZWN0LT5sZWZ0LCByZWN0LT50b3AsIHJl
Y3QtPnJpZ2h0IC0gcmVjdC0+bGVmdCwgcmVjdC0+Ym90dG9tIC0gcmVjdC0+dG9wKSk7Cit9CisK
K3ZvaWQgUGx1Z2luVmlldzo6aW52YWxpZGF0ZVJlZ2lvbihOUFJlZ2lvbiByZWdpb24pCit7Cisg
ICAgbm90SW1wbGVtZW50ZWQoKTsKK30KKwordm9pZCBQbHVnaW5WaWV3Ojpmb3JjZVJlZHJhdygp
Cit7CisgICAgbm90SW1wbGVtZW50ZWQoKTsKK30KKworYm9vbCBQbHVnaW5WaWV3OjpwbGF0Zm9y
bVN0YXJ0KCkKK3sKKyAgICBBU1NFUlQobV9pc1N0YXJ0ZWQpOworICAgIEFTU0VSVChtX3N0YXR1
cyA9PSBQbHVnaW5TdGF0dXNMb2FkZWRTdWNjZXNzZnVsbHkpOworCisgICAgbm90SW1wbGVtZW50
ZWQoKTsKKyAgICByZXR1cm4gdHJ1ZTsKK30KKwordm9pZCBQbHVnaW5WaWV3OjpwbGF0Zm9ybURl
c3Ryb3koKQoreworfQorCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViS2l0L2VmbC9DaGFuZ2VMb2cgYi9Tb3VyY2UvV2ViS2l0L2VmbC9DaGFuZ2VMb2cKaW5k
ZXggNTEyMDdkNi4uOGYzMDQxZSAxMDA3NTUKLS0tIGEvU291cmNlL1dlYktpdC9lZmwvQ2hhbmdl
TG9nCisrKyBiL1NvdXJjZS9XZWJLaXQvZWZsL0NoYW5nZUxvZwpAQCAtMSwzICsxLDE1IEBACisy
MDExLTExLTE0ICBNYXJpdXN6IEdyemVnb3JjenlrICA8bWFyaXVzei5nQHNhbXN1bmcuY29tPgor
CisgICAgICAgIEJ1ZyA0NDUwNSAtIFtFRkxdIE1pc3NpbmcgcGx1Z2lucyBzdXBwb3J0IGZvciBl
ZmwgcG9ydAorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9
NDQ1MDUKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBJ
bXBsZW1lbnRhdGlvbiBvZiBld2tfZnJhbWVfcGx1Z2luX2NyZWF0ZSgpIC0gY3JlYXRpbmcgUGx1
Z2luVmlldy4KKworICAgICAgICAqIGV3ay9ld2tfZnJhbWUuY3BwOgorICAgICAgICAoZXdrX2Zy
YW1lX3BsdWdpbl9jcmVhdGUpOgorCiAyMDExLTExLTEzICBSYXBoYWVsIEt1Ym8gZGEgQ29zdGEg
IDxrdWJvQHByb2Z1c2lvbi5tb2JpPgogCiAgICAgICAgIFtFRkxdIEltcHJvdmUgdGhlIGRvY3Vt
ZW50YXRpb24gb2YgZXdrX3ZpZXdfc2V0dGluZ19sb2NhbF9zdG9yYWdlXyouCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViS2l0L2VmbC9ld2svZXdrX2ZyYW1lLmNwcCBiL1NvdXJjZS9XZWJLaXQvZWZs
L2V3ay9ld2tfZnJhbWUuY3BwCmluZGV4IDQ4M2E4ODAuLjBkMjE4MzUgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJLaXQvZWZsL2V3ay9ld2tfZnJhbWUuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvZWZs
L2V3ay9ld2tfZnJhbWUuY3BwCkBAIC0xNjIwLDYgKzE2MjAsMjQgQEAgdm9pZCBld2tfZnJhbWVf
Zm9yY2VfbGF5b3V0KEV2YXNfT2JqZWN0KiBld2tGcmFtZSkKICAqLwogV1RGOjpQYXNzUmVmUHRy
PFdlYkNvcmU6OldpZGdldD4gZXdrX2ZyYW1lX3BsdWdpbl9jcmVhdGUoRXZhc19PYmplY3QqIGV3
a0ZyYW1lLCBjb25zdCBXZWJDb3JlOjpJbnRTaXplJiBwbHVnaW5TaXplLCBXZWJDb3JlOjpIVE1M
UGx1Z0luRWxlbWVudCogZWxlbWVudCwgY29uc3QgV2ViQ29yZTo6S1VSTCYgdXJsLCBjb25zdCBX
VEY6OlZlY3RvcjxXVEY6OlN0cmluZz4mIHBhcmFtTmFtZXMsIGNvbnN0IFdURjo6VmVjdG9yPFdU
Rjo6U3RyaW5nPiYgcGFyYW1WYWx1ZXMsIGNvbnN0IFdURjo6U3RyaW5nJiBtaW1lVHlwZSwgYm9v
bCBsb2FkTWFudWFsbHkpCiB7CisjaWYgRU5BQkxFKE5FVFNDQVBFX1BMVUdJTl9BUEkpCisgICAg
REJHKCJld2tGcmFtZT0lcCwgc2l6ZT0lZHglZCwgZWxlbWVudD0lcCwgdXJsPSVzLCBtaW1lVHlw
ZT0lcyIsCisgICAgICAgIGV3a0ZyYW1lLCBwbHVnaW5TaXplLndpZHRoKCksIHBsdWdpblNpemUu
aGVpZ2h0KCksIGVsZW1lbnQsCisgICAgICAgIHVybC5zdHJpbmcoKS51dGY4KCkuZGF0YSgpLCBt
aW1lVHlwZS51dGY4KCkuZGF0YSgpKTsKKworICAgIEVXS19GUkFNRV9TRF9HRVRfT1JfUkVUVVJO
KGV3a0ZyYW1lLCBzZCwgMCk7CisKKyAgICAvLyBUT0RPOiBlbWl0IHNpZ25hbCBhbmQgYXNrIHdl
YmtpdCB1c2VycyBpZiBzb21ldGhpbmcgZWxzZSBzaG91bGQgYmUgZG9uZS4KKyAgICAvLyBsaWtl
IGNyZWF0aW5nIGFub3RoZXIgeCB3aW5kb3cgKHNlZSBndGssIGl0IGFsbG93cyB1c2VycyB0byBj
cmVhdGUKKyAgICAvLyBHdGtQbHVnaW5XaWRnZXQuCisKKyAgICBXVEY6OlJlZlB0cjxXZWJDb3Jl
OjpQbHVnaW5WaWV3PiBwbHVnaW5WaWV3ID0gV2ViQ29yZTo6UGx1Z2luVmlldzo6Y3JlYXRlCisg
ICAgICAgIChzZC0+ZnJhbWUsIHBsdWdpblNpemUsIGVsZW1lbnQsIHVybCwgcGFyYW1OYW1lcywg
cGFyYW1WYWx1ZXMsCisgICAgICAgIG1pbWVUeXBlLCBsb2FkTWFudWFsbHkpOworCisgICAgaWYg
KHBsdWdpblZpZXctPnN0YXR1cygpID09IFdlYkNvcmU6OlBsdWdpblN0YXR1c0xvYWRlZFN1Y2Nl
c3NmdWxseSkKKyAgICAgICAgcmV0dXJuIHBsdWdpblZpZXc7CisjZW5kaWYgLy8gI2lmIEVOQUJM
RShORVRTQ0FQRV9QTFVHSU5fQVBJKQogICAgIHJldHVybiAwOwogfQogCg==
</data>
<flag name="review"
          id="113727"
          type_id="1"
          status="+"
          setter="andersca"
    />
    <flag name="commit-queue"
          id="120448"
          type_id="3"
          status="-"
          setter="webkit.review.bot"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>120300</attachid>
            <date>2011-12-22 03:10:59 -0800</date>
            <delta_ts>2011-12-22 03:15:34 -0800</delta_ts>
            <desc>EFL&apos;s plugin support</desc>
            <filename>efl_plugins.patch</filename>
            <type>text/plain</type>
            <size>25975</size>
            <attacher name="Mariusz Grzegorczyk">mariusz.g</attacher>
            
              <data encoding="base64">Y29tbWl0IDk1ZGViZTU3Mzc3NDQ5MzEzYmIzNzY2ZTk0YWNkN2NlODk3ODZlODIKQXV0aG9yOiBN
YXJpdXN6IEdyemVnb3JjenlrIDxtYXJpdXN6LmdAc2Ftc3VuZy5jb20+CkRhdGU6ICAgVGh1IERl
YyAyMiAxMjowNjo0OCAyMDExICswMTAwCgogICAgW0VGTF0gTWlzc2luZyBwbHVnaW5zIHN1cHBv
cnQgZm9yIGVmbCBwb3J0CgpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5n
ZUxvZyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKaW5kZXggNDA1MGViMy4uYzU3
ZWQ4OCAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZworKysgYi9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTQgQEAKKzIwMTEtMTIt
MjIgIE1hcml1c3ogR3J6ZWdvcmN6eWsgIDxtYXJpdXN6LmdAc2Ftc3VuZy5jb20+CisKKyAgICAg
ICAgQnVnIDQ0NTA1IC0gW0VGTF0gTWlzc2luZyBwbHVnaW5zIHN1cHBvcnQgZm9yIGVmbCBwb3J0
CisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD00NDUwNQor
CisgICAgICAgIFJldmlld2VkIGJ5IEFuZGVycyBDYXJsc3Nvbi4KKworICAgICAgICBBZGQgZGVm
aW5lIG9mIEVOQUJMRV9QTFVHSU5fUEFDS0FHRV9TSU1QTEVfSEFTSCBmb3IgZWZsIHBvcnQuCisK
KyAgICAgICAgKiB3dGYvUGxhdGZvcm0uaDoKKwogMjAxMS0xMi0yMSAgRGFuIEJlcm5zdGVpbiAg
PG1pdHpAYXBwbGUuY29tPgogCiAgICAgICAgIE9TIFggYnVpbGQgZml4IGFmdGVyIHIxMDM0ODgu
CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd3RmL1BsYXRmb3JtLmggYi9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvd3RmL1BsYXRmb3JtLmgKaW5kZXggOTI2MmM2ZS4uYmIxNDYyZSAx
MDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3d0Zi9QbGF0Zm9ybS5oCisrKyBiL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS93dGYvUGxhdGZvcm0uaApAQCAtMTA1OSw3ICsxMDU5LDcgQEAK
ICNkZWZpbmUgV1RGX1VTRV9QUk9URUNUSU9OX1NQQUNFX0FVVEhfQ0FMTEJBQ0sgMQogI2VuZGlm
CiAKLSNpZiAhRU5BQkxFKE5FVFNDQVBFX1BMVUdJTl9BUEkpIHx8IChFTkFCTEUoTkVUU0NBUEVf
UExVR0lOX0FQSSkgJiYgKChPUyhVTklYKSAmJiAoUExBVEZPUk0oUVQpIHx8IFBMQVRGT1JNKFdY
KSkpIHx8IFBMQVRGT1JNKEdUSykpKQorI2lmICFFTkFCTEUoTkVUU0NBUEVfUExVR0lOX0FQSSkg
fHwgKEVOQUJMRShORVRTQ0FQRV9QTFVHSU5fQVBJKSAmJiAoKE9TKFVOSVgpICYmIChQTEFURk9S
TShRVCkgfHwgUExBVEZPUk0oV1gpKSkgfHwgUExBVEZPUk0oR1RLKSB8fCBQTEFURk9STShFRkwp
KSkKICNkZWZpbmUgRU5BQkxFX1BMVUdJTl9QQUNLQUdFX1NJTVBMRV9IQVNIIDEKICNlbmRpZgog
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cKaW5kZXggMDgwMDk1Zi4uMzdmM2FhZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNv
cmUvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDQ3
IEBACisyMDExLTEyLTIyICBNYXJpdXN6IEdyemVnb3JjenlrICA8bWFyaXVzei5nQHNhbXN1bmcu
Y29tPgorCisgICAgICAgIEJ1ZyA0NDUwNSAtIFtFRkxdIE1pc3NpbmcgcGx1Z2lucyBzdXBwb3J0
IGZvciBlZmwgcG9ydAorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5j
Z2k/aWQ9NDQ1MDUKKworICAgICAgICBSZXZpZXdlZCBieSBBbmRlcnMgQ2FybHNzb24uCisKKyAg
ICAgICAgQmFzaWMgZnVuY3Rpb25hbGl0eSBvZiBwbHVnaW5zIGZvciBlZmwgcG9ydC4KKworICAg
ICAgICBUZW1wbGF0ZSB2ZXJzaW9uLCBzbyBubyBuZXcgdGVzdHMgYXJlIG5lZWRlZC4KKworICAg
ICAgICAqIFBsYXRmb3JtRWZsLmNtYWtlOgorICAgICAgICAqIHBsdWdpbnMvUGx1Z2luVmlldy5o
OgorICAgICAgICAqIHBsdWdpbnMvZWZsL1BsdWdpbkRhdGFFZmwuY3BwOiBBZGRlZC4gQ29waWVk
IGZyb20gcGx1Z2lucy9ndGsvUGx1Z2luRGF0YUd0ay5jcHAuCisgICAgICAgIChXZWJDb3JlOjpQ
bHVnaW5EYXRhOjppbml0UGx1Z2lucyk6IEZpbGwgbWltZS9kZXNjcmlwdGlvbi9leHRlbnNpb24g
bWFwcyBmb3IgcGx1Z2lucy4KKyAgICAgICAgKFdlYkNvcmU6OlBsdWdpbkRhdGE6OnJlZnJlc2gp
OiBSZWZyZXNoIHBsdWdpbidzIGRhdGFiYXNlLgorICAgICAgICAqIHBsdWdpbnMvZWZsL1BsdWdp
blBhY2thZ2VFZmwuY3BwOiBBZGRlZC4gQ29waWVkIGZyb20gcGx1Z2lucy9ndGsvUGx1Z2luUGFj
a2FnZUd0ay5jcHAuCisgICAgICAgIChXZWJDb3JlOjpQbHVnaW5QYWNrYWdlOjpmZXRjaEluZm8p
OiBHZXQgaW5mbyBmcm9tIHBsdWdpbidzIGxpYnJhcnkgYWJvdXQgbmFtZSBhbmQgbWltZSBzdXBw
b3J0ZWQuCisgICAgICAgIChXZWJDb3JlOjpQbHVnaW5QYWNrYWdlOjpOUFZlcnNpb24pOgorICAg
ICAgICAoV2ViQ29yZTo6UGx1Z2luUGFja2FnZTo6bG9hZCk6IExvYWQgcGx1Z2luLgorICAgICAg
ICAqIHBsdWdpbnMvZWZsL1BsdWdpblZpZXdFZmwuY3BwOiBBZGRlZC4gQ29waWVkIGZyb20gcGx1
Z2lucy9ndGsvUGx1Z2luVmlld0d0ay5jcHAuCisgICAgICAgIChXZWJDb3JlOjpQbHVnaW5WaWV3
OjpkaXNwYXRjaE5QRXZlbnQpOgorICAgICAgICAoV2ViQ29yZTo6UGx1Z2luVmlldzo6aGFuZGxl
Rm9jdXNJbkV2ZW50KToKKyAgICAgICAgKFdlYkNvcmU6OlBsdWdpblZpZXc6OmhhbmRsZUZvY3Vz
T3V0RXZlbnQpOgorICAgICAgICAoV2ViQ29yZTo6UGx1Z2luVmlldzo6aGFuZGxlS2V5Ym9hcmRF
dmVudCk6CisgICAgICAgIChXZWJDb3JlOjpQbHVnaW5WaWV3OjpoYW5kbGVNb3VzZUV2ZW50KToK
KyAgICAgICAgKFdlYkNvcmU6OlBsdWdpblZpZXc6OnVwZGF0ZVBsdWdpbldpZGdldCk6CisgICAg
ICAgIChXZWJDb3JlOjpQbHVnaW5WaWV3OjpzZXRGb2N1cyk6CisgICAgICAgIChXZWJDb3JlOjpQ
bHVnaW5WaWV3OjpzaG93KToKKyAgICAgICAgKFdlYkNvcmU6OlBsdWdpblZpZXc6OmhpZGUpOgor
ICAgICAgICAoV2ViQ29yZTo6UGx1Z2luVmlldzo6cGFpbnQpOgorICAgICAgICAoV2ViQ29yZTo6
UGx1Z2luVmlldzo6c2V0UGFyZW50KToKKyAgICAgICAgKFdlYkNvcmU6OlBsdWdpblZpZXc6OnNl
dE5QV2luZG93UmVjdCk6CisgICAgICAgIChXZWJDb3JlOjpQbHVnaW5WaWV3OjpzZXROUFdpbmRv
d0lmTmVlZGVkKToKKyAgICAgICAgKFdlYkNvcmU6OlBsdWdpblZpZXc6OnNldFBhcmVudFZpc2li
bGUpOgorICAgICAgICAoV2ViQ29yZTo6UGx1Z2luVmlldzo6aGFuZGxlUG9zdFJlYWRGaWxlKToK
KyAgICAgICAgKFdlYkNvcmU6OlBsdWdpblZpZXc6OnBsYXRmb3JtR2V0VmFsdWVTdGF0aWMpOgor
ICAgICAgICAoV2ViQ29yZTo6UGx1Z2luVmlldzo6cGxhdGZvcm1HZXRWYWx1ZSk6CisgICAgICAg
IChXZWJDb3JlOjpQbHVnaW5WaWV3OjppbnZhbGlkYXRlUmVjdCk6CisgICAgICAgIChXZWJDb3Jl
OjpQbHVnaW5WaWV3OjppbnZhbGlkYXRlUmVnaW9uKToKKyAgICAgICAgKFdlYkNvcmU6OlBsdWdp
blZpZXc6OmZvcmNlUmVkcmF3KToKKyAgICAgICAgKFdlYkNvcmU6OlBsdWdpblZpZXc6OnBsYXRm
b3JtU3RhcnQpOgorICAgICAgICAoV2ViQ29yZTo6UGx1Z2luVmlldzo6cGxhdGZvcm1EZXN0cm95
KToKKwogMjAxMS0xMi0yMiAgSGFucyBNdWxsZXIgIDxobXVsbGVyQGFkb2JlLmNvbT4KIAogICAg
ICAgICBPbmxvYWRlbmQgZXZlbnQgaXMgbm90IHN1cHBvcnRlZCBpbiBYTUxIdHRwUmVxdWVzdApk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvUGxhdGZvcm1FZmwuY21ha2UgYi9Tb3VyY2UvV2Vi
Q29yZS9QbGF0Zm9ybUVmbC5jbWFrZQppbmRleCAxZTYzYjAyLi5iYzIzNWQ3IDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9QbGF0Zm9ybUVmbC5jbWFrZQorKysgYi9Tb3VyY2UvV2ViQ29yZS9Q
bGF0Zm9ybUVmbC5jbWFrZQpAQCAtNSwxNCArNSwxNCBAQCBMSVNUKEFQUEVORCBXZWJDb3JlX0xJ
TktfRkxBR1MKIAogTElTVChBUFBFTkQgV2ViQ29yZV9JTkNMVURFX0RJUkVDVE9SSUVTCiAgICIk
e0pBVkFTQ1JJUFRDT1JFX0RJUn0vd3RmL2dvYmplY3QiCisgICIke1dFQkNPUkVfRElSfS9hY2Nl
c3NpYmlsaXR5L2VmbCIKKyAgIiR7V0VCQ09SRV9ESVJ9L3BhZ2UvZWZsIgogICAiJHtXRUJDT1JF
X0RJUn0vcGxhdGZvcm0vZWZsIgotICAiJHtXRUJDT1JFX0RJUn0vcGxhdGZvcm0vdGV4dC9lZmwi
CiAgICIke1dFQkNPUkVfRElSfS9wbGF0Zm9ybS9ncmFwaGljcy9lZmwiCi0gICIke1dFQkNPUkVf
RElSfS9wYWdlL2VmbCIKLSAgIiR7V0VCQ09SRV9ESVJ9L2FjY2Vzc2liaWxpdHkvZWZsIgorICAi
JHtXRUJDT1JFX0RJUn0vcGxhdGZvcm0vdGV4dC9lZmwiCisgICIke1dFQkNPUkVfRElSfS9wbHVn
aW5zL2VmbCIKICAgIiR7V0VCS0lUX0RJUn0vZWZsL1dlYkNvcmVTdXBwb3J0IgogICAiJHtXRUJL
SVRfRElSfS9lZmwvZXdrIgotICAiJHtERVJJVkVEX1NPVVJDRVNfRElSfSIKICkKIAogTElTVChB
UFBFTkQgV2ViQ29yZV9TT1VSQ0VTCkBAIC03MiwxMSArNzIsMjggQEAgTElTVChBUFBFTkQgV2Vi
Q29yZV9TT1VSQ0VTCiAgIHBsYXRmb3JtL2ltYWdlLWRlY29kZXJzL3dlYnAvV0VCUEltYWdlRGVj
b2Rlci5jcHAKICAgcGxhdGZvcm0vcG9zaXgvRmlsZVN5c3RlbVBPU0lYLmNwcAogICBwbGF0Zm9y
bS90ZXh0L2VmbC9UZXh0QnJlYWtJdGVyYXRvckludGVybmFsSUNVRWZsLmNwcAotICBwbHVnaW5z
L1BsdWdpbkRhdGFOb25lLmNwcAotICBwbHVnaW5zL1BsdWdpblBhY2thZ2VOb25lLmNwcAotICBw
bHVnaW5zL1BsdWdpblZpZXdOb25lLmNwcAogKQogCitJRiAoRU5BQkxFX05FVFNDQVBFX1BMVUdJ
Tl9BUEkpCisgIExJU1QoQVBQRU5EIFdlYkNvcmVfU09VUkNFUworICAgIHBsdWdpbnMvUGx1Z2lu
RGF0YWJhc2UuY3BwCisgICAgcGx1Z2lucy9QbHVnaW5EZWJ1Zy5jcHAKKyAgICBwbHVnaW5zL1Bs
dWdpblBhY2thZ2UuY3BwCisgICAgcGx1Z2lucy9QbHVnaW5TdHJlYW0uY3BwCisgICAgcGx1Z2lu
cy9QbHVnaW5WaWV3LmNwcAorCisgICAgcGx1Z2lucy9lZmwvUGx1Z2luRGF0YUVmbC5jcHAKKyAg
ICBwbHVnaW5zL2VmbC9QbHVnaW5QYWNrYWdlRWZsLmNwcAorICAgIHBsdWdpbnMvZWZsL1BsdWdp
blZpZXdFZmwuY3BwCisgICkKK0VMU0UgKCkKKyAgTElTVChBUFBFTkQgV2ViQ29yZV9TT1VSQ0VT
CisgICAgcGx1Z2lucy9QbHVnaW5EYXRhTm9uZS5jcHAKKyAgICBwbHVnaW5zL1BsdWdpblBhY2th
Z2VOb25lLmNwcAorICAgIHBsdWdpbnMvUGx1Z2luVmlld05vbmUuY3BwCisgICkKK0VORElGICgp
CisKIExJU1QoQVBQRU5EIFdlYkNvcmVfVVNFUl9BR0VOVF9TVFlMRV9TSEVFVFMKICAgICAke1dF
QkNPUkVfRElSfS9jc3MvbWVkaWFDb250cm9sc0VmbC5jc3MKICkKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL3BsdWdpbnMvUGx1Z2luVmlldy5oIGIvU291cmNlL1dlYkNvcmUvcGx1Z2lucy9Q
bHVnaW5WaWV3LmgKaW5kZXggNDY0NWUwYi4uZDliZjYxYSAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YkNvcmUvcGx1Z2lucy9QbHVnaW5WaWV3LmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGx1Z2lucy9Q
bHVnaW5WaWV3LmgKQEAgLTM3OCw3ICszNzgsNyBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAgICAg
ICAgIGJvb2wgbV9oYXZlVXBkYXRlZFBsdWdpbldpZGdldDsKICNlbmRpZgogCi0jaWYgKChQTEFU
Rk9STShRVCkgfHwgUExBVEZPUk0oV1gpKSAmJiBPUyhXSU5ET1dTKSkgfHwgZGVmaW5lZChYUF9N
QUNPU1gpCisjaWYgKChQTEFURk9STShRVCkgfHwgUExBVEZPUk0oV1gpKSAmJiBPUyhXSU5ET1dT
KSkgfHwgZGVmaW5lZChYUF9NQUNPU1gpIHx8IFBMQVRGT1JNKEVGTCkKICAgICAgICAgLy8gT24g
TWFjIE9TWCBhbmQgUXQvV2luZG93cyB0aGUgcGx1Z2luIGRvZXMgbm90IGhhdmUgaXRzIG93biBu
YXRpdmUgd2lkZ2V0LAogICAgICAgICAvLyBidXQgaXMgdXNpbmcgdGhlIGNvbnRhaW5pbmcgd2lu
ZG93IGFzIGl0cyByZWZlcmVuY2UgZm9yIHBvc2l0aW9uaW5nL3BhaW50aW5nLgogICAgICAgICBQ
bGF0Zm9ybVBsdWdpbldpZGdldCBtX3dpbmRvdzsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L3BsdWdpbnMvZWZsL1BsdWdpbkRhdGFFZmwuY3BwIGIvU291cmNlL1dlYkNvcmUvcGx1Z2lucy9l
ZmwvUGx1Z2luRGF0YUVmbC5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4u
YzIxZDUxYgotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsdWdpbnMvZWZsL1Bs
dWdpbkRhdGFFZmwuY3BwCkBAIC0wLDAgKzEsNjYgQEAKKy8qCisgICAgQ29weXJpZ2h0IChDKSAy
MDA2LCAyMDA3IEFwcGxlIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgICAgQ29weXJpZ2h0
IChDKSAyMDA4IFRyb2xsdGVjaCBBU0EKKyAgICBDb3B5cmlnaHQgKEMpIDIwMDggQ29sbGFib3Jh
IEx0ZC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAgICBDb3B5cmlnaHQgKEMpIDIwMDggSU5kVCAt
IEluc3RpdHV0byBOb2tpYSBkZSBUZWNub2xvZ2lhCisgICAgQ29weXJpZ2h0IChDKSAyMDA5LTIw
MTAgUHJvRlVTSU9OIGVtYmVkZGVkIHN5c3RlbXMKKyAgICBDb3B5cmlnaHQgKEMpIDIwMDktMjAx
MSBTYW1zdW5nIEVsZWN0cm9uaWNzCisKKyAgICBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2Fy
ZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgICAgbW9kaWZ5IGl0IHVuZGVyIHRo
ZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAgICBMaWNlbnNlIGFz
IHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAgICB2
ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZl
cnNpb24uCisKKyAgICBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhh
dCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAgICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhv
dXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICAgIE1FUkNIQU5UQUJJTElUWSBvciBG
SVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgICAgTGlicmFy
eSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisKKyAgICBZb3Ugc2hv
dWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1Ymxp
YyBMaWNlbnNlCisgICAgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZ
SU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KKyAgICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0
aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAorICAgIEJvc3Rvbiwg
TUEgMDIxMTAtMTMwMSwgVVNBLgorKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUg
IlBsdWdpbkRhdGEuaCIKKworI2luY2x1ZGUgIlBsdWdpbkRhdGFiYXNlLmgiCisjaW5jbHVkZSAi
UGx1Z2luUGFja2FnZS5oIgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK3ZvaWQgUGx1Z2luRGF0
YTo6aW5pdFBsdWdpbnMoY29uc3QgUGFnZSopCit7CisgICAgY29uc3QgVmVjdG9yPFBsdWdpblBh
Y2thZ2UqPiYgcGx1Z2lucyA9IFBsdWdpbkRhdGFiYXNlOjppbnN0YWxsZWRQbHVnaW5zKCktPnBs
dWdpbnMoKTsKKworICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgcGx1Z2lucy5zaXplKCk7ICsr
aSkgeworICAgICAgICBQbHVnaW5QYWNrYWdlKiBwYWNrYWdlID0gcGx1Z2luc1tpXTsKKyAgICAg
ICAgUGx1Z2luSW5mbyBpbmZvOworCisgICAgICAgIGluZm8ubmFtZSA9IHBhY2thZ2UtPm5hbWUo
KTsKKyAgICAgICAgaW5mby5maWxlID0gcGFja2FnZS0+ZmlsZU5hbWUoKTsKKyAgICAgICAgaW5m
by5kZXNjID0gcGFja2FnZS0+ZGVzY3JpcHRpb24oKTsKKworICAgICAgICBjb25zdCBNSU1FVG9E
ZXNjcmlwdGlvbnNNYXAmIG1pbWVUb0Rlc2NyaXB0aW9ucyA9IHBhY2thZ2UtPm1pbWVUb0Rlc2Ny
aXB0aW9ucygpOworICAgICAgICBNSU1FVG9EZXNjcmlwdGlvbnNNYXA6OmNvbnN0X2l0ZXJhdG9y
IGVuZCA9IG1pbWVUb0Rlc2NyaXB0aW9ucy5lbmQoKTsKKyAgICAgICAgZm9yIChNSU1FVG9EZXNj
cmlwdGlvbnNNYXA6OmNvbnN0X2l0ZXJhdG9yIGl0ID0gbWltZVRvRGVzY3JpcHRpb25zLmJlZ2lu
KCk7IGl0ICE9IGVuZDsgKytpdCkgeworICAgICAgICAgICAgTWltZUNsYXNzSW5mbyBtaW1lOwor
CisgICAgICAgICAgICBtaW1lLnR5cGUgPSBpdC0+Zmlyc3Q7CisgICAgICAgICAgICBtaW1lLmRl
c2MgPSBpdC0+c2Vjb25kOworICAgICAgICAgICAgbWltZS5leHRlbnNpb25zID0gcGFja2FnZS0+
bWltZVRvRXh0ZW5zaW9ucygpLmdldChtaW1lLnR5cGUpOworCisgICAgICAgICAgICBpbmZvLm1p
bWVzLmFwcGVuZChtaW1lKTsKKyAgICAgICAgfQorCisgICAgICAgIG1fcGx1Z2lucy5hcHBlbmQo
aW5mbyk7CisgICAgfQorfQorCit2b2lkIFBsdWdpbkRhdGE6OnJlZnJlc2goKQoreworICAgIFBs
dWdpbkRhdGFiYXNlOjppbnN0YWxsZWRQbHVnaW5zKCktPnJlZnJlc2goKTsKK30KKworfTsKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsdWdpbnMvZWZsL1BsdWdpblBhY2thZ2VFZmwuY3Bw
IGIvU291cmNlL1dlYkNvcmUvcGx1Z2lucy9lZmwvUGx1Z2luUGFja2FnZUVmbC5jcHAKbmV3IGZp
bGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTdiMGEwYgotLS0gL2Rldi9udWxsCisrKyBi
L1NvdXJjZS9XZWJDb3JlL3BsdWdpbnMvZWZsL1BsdWdpblBhY2thZ2VFZmwuY3BwCkBAIC0wLDAg
KzEsMTY4IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA2LCAyMDA3IEFwcGxlIEluYy4gIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDggQ29sbGFib3JhIEx0ZC4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAwOCBOdWFudGkgTHRkLgor
ICogQ29weXJpZ2h0IChDKSAyMDA4IElOZFQgLSBJbnN0aXR1dG8gTm9raWEgZGUgVGVjbm9sb2dp
YQorICogQ29weXJpZ2h0IChDKSAyMDA5LTIwMTAgUHJvRlVTSU9OIGVtYmVkZGVkIHN5c3RlbXMK
KyAqIENvcHlyaWdodCAoQykgMjAwOS0yMDExIFNhbXN1bmcgRWxlY3Ryb25pY3MKKyAqCisgKiBS
ZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9y
IHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRo
ZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9u
cyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2Ug
dGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlv
biBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4K
KyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIENPTVBVVEVSLCBJTkMu
IGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9G
IE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NF
IEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgQ09NUFVURVIsIElOQy4g
T1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJ
TkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFH
RVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VC
U1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9G
SVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkg
VEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFC
SUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFS
SVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZF
TiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisj
aW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiUGx1Z2luUGFja2FnZS5oIgorCisjaW5jbHVk
ZSAiTUlNRVR5cGVSZWdpc3RyeS5oIgorI2luY2x1ZGUgIk5vdEltcGxlbWVudGVkLmgiCisjaW5j
bHVkZSAiUGx1Z2luRGF0YWJhc2UuaCIKKyNpbmNsdWRlICJQbHVnaW5EZWJ1Zy5oIgorI2luY2x1
ZGUgIm5wcnVudGltZV9pbXBsLmgiCisKKyNpbmNsdWRlIDxFaW5hLmg+CisjaW5jbHVkZSA8ZGxm
Y24uaD4KKyNpbmNsdWRlIDx3dGYvdGV4dC9DU3RyaW5nLmg+CisKK25hbWVzcGFjZSBXZWJDb3Jl
IHsKKwordHlwZWRlZiBjaGFyKiAoKk5QUF9HZXRNSU1FRGVzY3JpcHRpb25Qcm9jUHRyKSgpOwor
Citib29sIFBsdWdpblBhY2thZ2U6OmZldGNoSW5mbygpCit7CisgICAgY29uc3QgY2hhciAqZXJy
bXNnOworCisgICAgaWYgKCFsb2FkKCkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIE5Q
UF9HZXRWYWx1ZVByb2NQdHIgZ2V0VmFsdWUgPSAwOworICAgIE5QUF9HZXRNSU1FRGVzY3JpcHRp
b25Qcm9jUHRyIGdldE1JTUVEZXNjcmlwdGlvbiA9IDA7CisKKyAgICBnZXRWYWx1ZSA9IHJlaW50
ZXJwcmV0X2Nhc3Q8TlBQX0dldFZhbHVlUHJvY1B0cj4oZGxzeW0obV9tb2R1bGUsICJOUF9HZXRW
YWx1ZSIpKTsKKyAgICBpZiAoKGVycm1zZyA9IGRsZXJyb3IoKSkpIHsKKyAgICAgICAgRUlOQV9M
T0dfRVJSKCJDb3VsZCBub3QgZ2V0IHN5bWJvbCBOUF9HZXRWYWx1ZTogJXMiLCBlcnJtc2cpOwor
ICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorCisgICAgZ2V0TUlNRURlc2NyaXB0aW9uID0g
cmVpbnRlcnByZXRfY2FzdDxOUFBfR2V0TUlNRURlc2NyaXB0aW9uUHJvY1B0cj4oZGxzeW0obV9t
b2R1bGUsICJOUF9HZXRNSU1FRGVzY3JpcHRpb24iKSk7CisgICAgaWYgKChlcnJtc2cgPSBkbGVy
cm9yKCkpKSB7CisgICAgICAgIEVJTkFfTE9HX0VSUigiQ291bGQgbm90IGdldCBzeW1ib2wgTlBf
R2V0TUlNRURlc2NyaXB0aW9uOiAlcyIsIGVycm1zZyk7CisgICAgICAgIHJldHVybiBmYWxzZTsK
KyAgICB9CisKKyAgICBjaGFyKiBidWZmZXIgPSAwOworICAgIE5QRXJyb3IgZXJyID0gZ2V0VmFs
dWUoMCwgTlBQVnBsdWdpbk5hbWVTdHJpbmcsIHN0YXRpY19jYXN0PHZvaWQqPigmYnVmZmVyKSk7
CisgICAgaWYgKGVyciAhPSBOUEVSUl9OT19FUlJPUikKKyAgICAgICAgcmV0dXJuIGZhbHNlOwor
ICAgIG1fbmFtZSA9IGJ1ZmZlcjsKKworICAgIGJ1ZmZlciA9IDA7CisgICAgZXJyID0gZ2V0VmFs
dWUoMCwgTlBQVnBsdWdpbkRlc2NyaXB0aW9uU3RyaW5nLCBzdGF0aWNfY2FzdDx2b2lkKj4oJmJ1
ZmZlcikpOworICAgIGlmIChlcnIgIT0gTlBFUlJfTk9fRVJST1IpCisgICAgICAgIHJldHVybiBm
YWxzZTsKKyAgICBtX2Rlc2NyaXB0aW9uID0gYnVmZmVyOworICAgIGRldGVybWluZU1vZHVsZVZl
cnNpb25Gcm9tRGVzY3JpcHRpb24oKTsKKworICAgIFN0cmluZyBkZXNjcmlwdGlvbiA9IGdldE1J
TUVEZXNjcmlwdGlvbigpOworCisgICAgVmVjdG9yPFN0cmluZz4gdHlwZXM7CisgICAgZGVzY3Jp
cHRpb24uc3BsaXQoVUNoYXIoJzsnKSwgZmFsc2UsIHR5cGVzKTsKKworICAgIGZvciAoc2l6ZV90
IGkgPSAwOyBpIDwgdHlwZXMuc2l6ZSgpOyArK2kpIHsKKyAgICAgICAgVmVjdG9yPFN0cmluZz4g
bWltZTsKKyAgICAgICAgdHlwZXNbaV0uc3BsaXQoVUNoYXIoJzonKSwgdHJ1ZSwgbWltZSk7CisK
KyAgICAgICAgaWYgKCFtaW1lLmlzRW1wdHkoKSA+IDApIHsKKyAgICAgICAgICAgIFZlY3RvcjxT
dHJpbmc+IGV4dHM7CisKKyAgICAgICAgICAgIGlmIChtaW1lLnNpemUoKSA+IDEpCisgICAgICAg
ICAgICAgICAgbWltZVsxXS5zcGxpdChVQ2hhcignLCcpLCBmYWxzZSwgZXh0cyk7CisKKyAgICAg
ICAgICAgIGRldGVybWluZVF1aXJrcyhtaW1lWzBdKTsKKyAgICAgICAgICAgIG1fbWltZVRvRXh0
ZW5zaW9ucy5hZGQobWltZVswXSwgZXh0cyk7CisKKyAgICAgICAgICAgIGlmIChtaW1lLnNpemUo
KSA+IDIpCisgICAgICAgICAgICAgICAgbV9taW1lVG9EZXNjcmlwdGlvbnMuYWRkKG1pbWVbMF0s
IG1pbWVbMl0pOworICAgICAgICB9CisgICAgfQorCisgICAgcmV0dXJuIHRydWU7Cit9CisKK3Vp
bnQxNl90IFBsdWdpblBhY2thZ2U6Ok5QVmVyc2lvbigpIGNvbnN0Cit7CisgICAgcmV0dXJuIE5Q
VkVSU19IQVNfUExVR0lOX1RIUkVBRF9BU1lOQ19DQUxMOworfQorCitib29sIFBsdWdpblBhY2th
Z2U6OmxvYWQoKQoreworICAgIGNoYXIqIGVycm1zZzsKKworICAgIGlmIChtX2lzTG9hZGVkKSB7
CisgICAgICAgIG1fbG9hZENvdW50Kys7CisgICAgICAgIHJldHVybiB0cnVlOworICAgIH0KKwor
ICAgIG1fbW9kdWxlID0gZGxvcGVuKG1fcGF0aC51dGY4KCkuZGF0YSgpLCBSVExEX0xBWlkgfCBS
VExEX0xPQ0FMKTsKKyAgICBpZiAoKGVycm1zZyA9IGRsZXJyb3IoKSkpIHsKKyAgICAgICAgRUlO
QV9MT0dfV0FSTigiJXMgbm90IGxvYWRlZDogJXMiLCBtX3BhdGgudXRmOCgpLmRhdGEoKSwgZXJy
bXNnKTsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKworICAgIG1faXNMb2FkZWQgPSB0
cnVlOworCisgICAgTlBfSW5pdGlhbGl6ZUZ1bmNQdHIgaW5pdGlhbGl6ZTsKKyAgICBOUEVycm9y
IGVycjsKKworICAgIGluaXRpYWxpemUgPSByZWludGVycHJldF9jYXN0PE5QX0luaXRpYWxpemVG
dW5jUHRyPihkbHN5bShtX21vZHVsZSwgIk5QX0luaXRpYWxpemUiKSk7CisgICAgaWYgKChlcnJt
c2cgPSBkbGVycm9yKCkpKSB7CisgICAgICAgIEVJTkFfTE9HX0VSUigiQ291bGQgbm90IGdldCBz
eW1ib2wgTlBfSW5pdGlhbGl6ZTogJXMiLCBlcnJtc2cpOworICAgICAgICBnb3RvIGFib3J0Owor
ICAgIH0KKworICAgIG1fTlBQX1NodXRkb3duID0gcmVpbnRlcnByZXRfY2FzdDxOUFBfU2h1dGRv
d25Qcm9jUHRyPihkbHN5bShtX21vZHVsZSwgIk5QX1NodXRkb3duIikpOworICAgIGlmICgoZXJy
bXNnID0gZGxlcnJvcigpKSkgeworICAgICAgICBFSU5BX0xPR19FUlIoIkNvdWxkIG5vdCBnZXQg
c3ltYm9sIE5QX1NodXRkb3duOiAlcyIsIGVycm1zZyk7CisgICAgICAgIGdvdG8gYWJvcnQ7Cisg
ICAgfQorCisgICAgbWVtc2V0KCZtX3BsdWdpbkZ1bmNzLCAwLCBzaXplb2YobV9wbHVnaW5GdW5j
cykpOworICAgIG1fcGx1Z2luRnVuY3Muc2l6ZSA9IHNpemVvZihtX3BsdWdpbkZ1bmNzKTsKKwor
ICAgIGluaXRpYWxpemVCcm93c2VyRnVuY3MoKTsKKworI2lmIGRlZmluZWQoWFBfVU5JWCkKKyAg
ICBlcnIgPSBpbml0aWFsaXplKCZtX2Jyb3dzZXJGdW5jcywgJm1fcGx1Z2luRnVuY3MpOworI2Vs
c2UKKyAgICBlcnIgPSBpbml0aWFsaXplKCZtX2Jyb3dzZXJGdW5jcyk7CisjZW5kaWYKKyAgICBp
ZiAoZXJyICE9IE5QRVJSX05PX0VSUk9SKQorICAgICAgICBnb3RvIGFib3J0OworCisgICAgbV9s
b2FkQ291bnQrKzsKKyAgICByZXR1cm4gdHJ1ZTsKKworYWJvcnQ6CisgICAgRUlOQV9MT0dfREJH
KCJmYWlsZWQgdG8gbG9hZCBwbHVnaW4sIHVubG9hZCBpdCB3aXRob3V0IHNodXR0aW5nIGl0IGRv
d24uIik7CisgICAgdW5sb2FkV2l0aG91dFNodXRkb3duKCk7CisgICAgcmV0dXJuIGZhbHNlOwor
fQorCit9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbHVnaW5zL2VmbC9QbHVnaW5WaWV3
RWZsLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsdWdpbnMvZWZsL1BsdWdpblZpZXdFZmwuY3BwCm5l
dyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjU4NjgwMmMKLS0tIC9kZXYvbnVsbAor
KysgYi9Tb3VyY2UvV2ViQ29yZS9wbHVnaW5zL2VmbC9QbHVnaW5WaWV3RWZsLmNwcApAQCAtMCww
ICsxLDM0MyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwNiwgMjAwNyBBcHBsZSBJbmMuICBB
bGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDA4IENvbGxhYm9yYSBMdGQu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDggSU5kVCAtIEluc3Rp
dHV0byBOb2tpYSBkZSBUZWNub2xvZ2lhCisgKiBDb3B5cmlnaHQgKEMpIDIwMDktMjAxMCBQcm9G
VVNJT04gZW1iZWRkZWQgc3lzdGVtcworICogQ29weXJpZ2h0IChDKSAyMDA5LTIwMTEgU2Ftc3Vu
ZyBFbGVjdHJvbmljcworICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFu
ZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVy
bWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0
OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5h
cnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4g
dGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQg
d2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQg
QlkgQVBQTEUgQ09NUFVURVIsIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1Ig
SU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisg
KiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBB
IFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFM
TCBBUFBMRSBDT01QVVRFUiwgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1Ig
QU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlks
IE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
CisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9G
IFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9X
RVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJ
TiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdM
SUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisg
KiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9G
IFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJQbHVn
aW5WaWV3LmgiCisKKyNpbmNsdWRlICJGcmFtZS5oIgorI2luY2x1ZGUgIkZyYW1lVmlldy5oIgor
I2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dC5oIgorI2luY2x1ZGUgIkhUTUxOYW1lcy5oIgorI2lu
Y2x1ZGUgIkhUTUxQbHVnSW5FbGVtZW50LmgiCisjaW5jbHVkZSAiSG9zdFdpbmRvdy5oIgorI2lu
Y2x1ZGUgIk1vdXNlRXZlbnQuaCIKKyNpbmNsdWRlICJOb3RJbXBsZW1lbnRlZC5oIgorI2luY2x1
ZGUgIlBsdWdpblBhY2thZ2UuaCIKKyNpbmNsdWRlICJucHJ1bnRpbWVfaW1wbC5oIgorI2luY2x1
ZGUgInJ1bnRpbWUvSlNMb2NrLmgiCisjaW5jbHVkZSA8RWNvcmVfRXZhcy5oPgorI2luY2x1ZGUg
PEVjb3JlX1guaD4KKyNpbmNsdWRlIDxFdmFzLmg+CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKwor
dXNpbmcgbmFtZXNwYWNlIEhUTUxOYW1lczsKKworYm9vbCBQbHVnaW5WaWV3OjpkaXNwYXRjaE5Q
RXZlbnQoTlBFdmVudCYgZXZlbnQpCit7CisgICAgaWYgKCFtX3BsdWdpbi0+cGx1Z2luRnVuY3Mo
KS0+ZXZlbnQpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIFBsdWdpblZpZXc6OnNldEN1
cnJlbnRQbHVnaW5WaWV3KHRoaXMpOworICAgIEpTQzo6SlNMb2NrOjpEcm9wQWxsTG9ja3MgZHJv
cEFsbExvY2tzKGZhbHNlKTsKKyAgICBzZXRDYWxsaW5nUGx1Z2luKHRydWUpOworCisgICAgYm9v
bCBhY2NlcHRlZCA9IG1fcGx1Z2luLT5wbHVnaW5GdW5jcygpLT5ldmVudChtX2luc3RhbmNlLCAm
ZXZlbnQpOworCisgICAgc2V0Q2FsbGluZ1BsdWdpbihmYWxzZSk7CisgICAgUGx1Z2luVmlldzo6
c2V0Q3VycmVudFBsdWdpblZpZXcoMCk7CisgICAgcmV0dXJuIGFjY2VwdGVkOworfQorCisjaWYg
ZGVmaW5lZChYUF9VTklYKQordm9pZCBQbHVnaW5WaWV3OjpoYW5kbGVGb2N1c0luRXZlbnQoKQor
eworICAgIG5vdEltcGxlbWVudGVkKCk7Cit9CisKK3ZvaWQgUGx1Z2luVmlldzo6aGFuZGxlRm9j
dXNPdXRFdmVudCgpCit7CisgICAgbm90SW1wbGVtZW50ZWQoKTsKK30KKyNlbmRpZgorCit2b2lk
IFBsdWdpblZpZXc6OmhhbmRsZUtleWJvYXJkRXZlbnQoS2V5Ym9hcmRFdmVudCopCit7CisgICAg
bm90SW1wbGVtZW50ZWQoKTsKK30KKwordm9pZCBQbHVnaW5WaWV3OjpoYW5kbGVNb3VzZUV2ZW50
KE1vdXNlRXZlbnQqIGV2ZW50KQoreworICAgIE5QRXZlbnQgeEV2ZW50OworCisjaWYgZGVmaW5l
ZChYUF9VTklYKQorICAgIGNvbnN0IEludFJlY3QgcmVjdCA9IHBhcmVudCgpLT5jb250ZW50c1Rv
U2NyZWVuKEludFJlY3QoMCwgMCwgZXZlbnQtPm9mZnNldFgoKSwgZXZlbnQtPm9mZnNldFkoKSkp
OworICAgIGNvbnN0IGludCBldmVudFggPSByZWN0LndpZHRoKCk7CisgICAgY29uc3QgaW50IGV2
ZW50WSA9IHJlY3QuaGVpZ2h0KCk7CisgICAgaWYgKGV2ZW50LT50eXBlKCkgPT0gZXZlbnROYW1l
cygpLm1vdXNlbW92ZUV2ZW50CisgICAgICAgICAgICB8fCBldmVudC0+dHlwZSgpID09IGV2ZW50
TmFtZXMoKS5tb3VzZW91dEV2ZW50CisgICAgICAgICAgICB8fCBldmVudC0+dHlwZSgpID09IGV2
ZW50TmFtZXMoKS5tb3VzZW92ZXJFdmVudCkgeworICAgICAgICB4RXZlbnQudHlwZSA9IE1vdGlv
bk5vdGlmeTsKKyAgICAgICAgeEV2ZW50Lnhtb3Rpb24ueCA9IGV2ZW50WDsKKyAgICAgICAgeEV2
ZW50Lnhtb3Rpb24ueSA9IGV2ZW50WTsKKyAgICB9IGVsc2UgaWYgKGV2ZW50LT50eXBlKCkgPT0g
ZXZlbnROYW1lcygpLm1vdXNlZG93bkV2ZW50KSB7CisgICAgICAgIHhFdmVudC50eXBlID0gQnV0
dG9uUHJlc3M7CisgICAgICAgIHhFdmVudC54YnV0dG9uLnggPSBldmVudFg7CisgICAgICAgIHhF
dmVudC54YnV0dG9uLnkgPSBldmVudFk7CisgICAgICAgIHhFdmVudC54YnV0dG9uLmJ1dHRvbiA9
IGV2ZW50LT5idXR0b24oKSArIDE7IC8vIERPTSBNb3VzZUV2ZW50IGNvdW50cyBmcm9tIDAsIGFu
ZCBYQnV0dG9uRXZlbnQgZnJvbSAxLgorICAgIH0gZWxzZSBpZiAoZXZlbnQtPnR5cGUoKSA9PSBl
dmVudE5hbWVzKCkubW91c2V1cEV2ZW50KSB7CisgICAgICAgIHhFdmVudC50eXBlID0gQnV0dG9u
UmVsZWFzZTsKKyAgICAgICAgeEV2ZW50LnhidXR0b24ueCA9IGV2ZW50WDsKKyAgICAgICAgeEV2
ZW50LnhidXR0b24ueSA9IGV2ZW50WTsKKyAgICAgICAgeEV2ZW50LnhidXR0b24uYnV0dG9uID0g
ZXZlbnQtPmJ1dHRvbigpICsgMTsKKyAgICB9IGVsc2UKKyAgICAgICAgcmV0dXJuOworI2VuZGlm
CisKKyAgICBpZiAoZGlzcGF0Y2hOUEV2ZW50KHhFdmVudCkpCisgICAgICAgIGV2ZW50LT5zZXRE
ZWZhdWx0SGFuZGxlZCgpOworfQorCit2b2lkIFBsdWdpblZpZXc6OnVwZGF0ZVBsdWdpbldpZGdl
dCgpCit7CisgICAgbm90SW1wbGVtZW50ZWQoKTsKK30KKwordm9pZCBQbHVnaW5WaWV3OjpzZXRG
b2N1cyhib29sIGZvY3VzZWQpCit7CisgICAgaWYgKGZvY3VzZWQpCisgICAgICAgIG1fZWxlbWVu
dC0+ZG9jdW1lbnQoKS0+c2V0Rm9jdXNlZE5vZGUobV9lbGVtZW50KTsKKworICAgIFdpZGdldDo6
c2V0Rm9jdXMoZm9jdXNlZCk7Cit9CisKK3ZvaWQgUGx1Z2luVmlldzo6c2hvdygpCit7CisgICAg
c2V0U2VsZlZpc2libGUodHJ1ZSk7CisKKyAgICBXaWRnZXQ6OnNob3coKTsKK30KKwordm9pZCBQ
bHVnaW5WaWV3OjpoaWRlKCkKK3sKKyAgICBzZXRTZWxmVmlzaWJsZShmYWxzZSk7CisKKyAgICBX
aWRnZXQ6OmhpZGUoKTsKK30KKwordm9pZCBQbHVnaW5WaWV3OjpwYWludChHcmFwaGljc0NvbnRl
eHQqIGNvbnRleHQsIGNvbnN0IEludFJlY3QmIHJlY3QpCit7CisgICAgaWYgKCFtX2lzU3RhcnRl
ZCkKKyAgICAgICAgcGFpbnRNaXNzaW5nUGx1Z2luSWNvbihjb250ZXh0LCByZWN0KTsKK30KKwor
dm9pZCBQbHVnaW5WaWV3OjpzZXRQYXJlbnQoU2Nyb2xsVmlldyogcGFyZW50KQoreworICAgIFdp
ZGdldDo6c2V0UGFyZW50KHBhcmVudCk7CisKKyAgICBpZiAocGFyZW50KQorICAgICAgICBpbml0
KCk7Cit9CisKK3ZvaWQgUGx1Z2luVmlldzo6c2V0TlBXaW5kb3dSZWN0KGNvbnN0IEludFJlY3Qm
IHJlY3QpCit7CisgICAgbm90SW1wbGVtZW50ZWQoKTsKK30KKwordm9pZCBQbHVnaW5WaWV3Ojpz
ZXROUFdpbmRvd0lmTmVlZGVkKCkKK3sKK30KKwordm9pZCBQbHVnaW5WaWV3OjpzZXRQYXJlbnRW
aXNpYmxlKGJvb2wgdmlzaWJsZSkKK3sKKyAgICBXaWRnZXQ6OnNldFBhcmVudFZpc2libGUodmlz
aWJsZSk7Cit9CisKK05QRXJyb3IgUGx1Z2luVmlldzo6aGFuZGxlUG9zdFJlYWRGaWxlKFZlY3Rv
cjxjaGFyPiYgYnVmZmVyLCB1aW50MzJfdCBsZW4sIGNvbnN0IGNoYXIqIGJ1ZikKK3sKKyAgICBT
dHJpbmcgZmlsZW5hbWUoYnVmLCBsZW4pOworCisgICAgaWYgKGZpbGVuYW1lLnN0YXJ0c1dpdGgo
ImZpbGU6Ly8vIikpCisjaWYgZGVmaW5lZChYUF9VTklYKQorICAgICAgICBmaWxlbmFtZSA9IGZp
bGVuYW1lLnN1YnN0cmluZyg3KTsKKyNlbHNlCisgICAgICAgIGZpbGVuYW1lID0gZmlsZW5hbWUu
c3Vic3RyaW5nKDgpOworI2VuZGlmCisKKyAgICBsb25nIGxvbmcgc2l6ZTsKKyAgICBpZiAoIWdl
dEZpbGVTaXplKGZpbGVuYW1lLCBzaXplKSkKKyAgICAgICAgcmV0dXJuIE5QRVJSX0ZJTEVfTk9U
X0ZPVU5EOworCisgICAgRklMRSogZmlsZUhhbmRsZSA9IGZvcGVuKGZpbGVuYW1lLnV0ZjgoKS5k
YXRhKCksICJyIik7CisgICAgaWYgKCFmaWxlSGFuZGxlKQorICAgICAgICByZXR1cm4gTlBFUlJf
RklMRV9OT1RfRk9VTkQ7CisKKyAgICBidWZmZXIucmVzaXplKHNpemUpOworICAgIGludCBieXRl
c1JlYWQgPSBmcmVhZChidWZmZXIuZGF0YSgpLCAxLCBzaXplLCBmaWxlSGFuZGxlKTsKKworICAg
IGZjbG9zZShmaWxlSGFuZGxlKTsKKworICAgIGlmIChieXRlc1JlYWQgPD0gMCkKKyAgICAgICAg
cmV0dXJuIE5QRVJSX0ZJTEVfTk9UX0ZPVU5EOworCisgICAgcmV0dXJuIE5QRVJSX05PX0VSUk9S
OworfQorCitib29sIFBsdWdpblZpZXc6OnBsYXRmb3JtR2V0VmFsdWVTdGF0aWMoTlBOVmFyaWFi
bGUgdmFyaWFibGUsIHZvaWQqIHZhbHVlLCBOUEVycm9yKiByZXN1bHQpCit7CisgICAgc3dpdGNo
ICh2YXJpYWJsZSkgeworICAgIGNhc2UgTlBOVlRvb2xraXQ6CisgICAgICAgICpzdGF0aWNfY2Fz
dDx1aW50MzJfdCo+KHZhbHVlKSA9IDA7CisgICAgICAgICpyZXN1bHQgPSBOUEVSUl9OT19FUlJP
UjsKKyAgICAgICAgcmV0dXJuIHRydWU7CisKKyAgICBjYXNlIE5QTlZTdXBwb3J0c1hFbWJlZEJv
b2w6CisgICAgICAgICpzdGF0aWNfY2FzdDxOUEJvb2wqPih2YWx1ZSkgPSBmYWxzZTsKKyAgICAg
ICAgKnJlc3VsdCA9IE5QRVJSX05PX0VSUk9SOworICAgICAgICByZXR1cm4gdHJ1ZTsKKworICAg
IGNhc2UgTlBOVmphdmFzY3JpcHRFbmFibGVkQm9vbDoKKyAgICAgICAgKnN0YXRpY19jYXN0PE5Q
Qm9vbCo+KHZhbHVlKSA9IHRydWU7CisgICAgICAgICpyZXN1bHQgPSBOUEVSUl9OT19FUlJPUjsK
KyAgICAgICAgcmV0dXJuIHRydWU7CisKKyAgICBjYXNlIE5QTlZTdXBwb3J0c1dpbmRvd2xlc3M6
CisgICAgICAgICpzdGF0aWNfY2FzdDxOUEJvb2wqPih2YWx1ZSkgPSBmYWxzZTsKKyAgICAgICAg
KnJlc3VsdCA9IE5QRVJSX05PX0VSUk9SOworICAgICAgICByZXR1cm4gdHJ1ZTsKKworICAgIGRl
ZmF1bHQ6CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9Cit9CisKK2Jvb2wgUGx1Z2luVmll
dzo6cGxhdGZvcm1HZXRWYWx1ZShOUE5WYXJpYWJsZSB2YXJpYWJsZSwgdm9pZCogdmFsdWUsIE5Q
RXJyb3IqIHJlc3VsdCkKK3sKKyAgICBpZiAoIXZhbHVlIHx8ICFyZXN1bHQpCisgICAgICAgIHJl
dHVybiBmYWxzZTsKKworICAgIHN3aXRjaCAodmFyaWFibGUpIHsKKyAgICBjYXNlIE5QTlZ4RGlz
cGxheToKKyAgICAgICAgKnN0YXRpY19jYXN0PHZvaWQqKj4odmFsdWUpID0gc3RhdGljX2Nhc3Q8
RGlzcGxheSo+KGVjb3JlX3hfZGlzcGxheV9nZXQoKSk7CisgICAgICAgICpyZXN1bHQgPSBOUEVS
Ul9OT19FUlJPUjsKKyAgICAgICAgcmV0dXJuIHRydWU7CisKKyAgICBjYXNlIE5QTlZ4dEFwcENv
bnRleHQ6CisgICAgICAgICpyZXN1bHQgPSBOUEVSUl9HRU5FUklDX0VSUk9SOworICAgICAgICBy
ZXR1cm4gdHJ1ZTsKKworICAgIGNhc2UgTlBOVldpbmRvd05QT2JqZWN0OiB7CisgICAgICAgIGlm
IChtX2lzSmF2YVNjcmlwdFBhdXNlZCkgeworICAgICAgICAgICAgKnJlc3VsdCA9IE5QRVJSX0dF
TkVSSUNfRVJST1I7CisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgfQorCisgICAg
ICAgIE5QT2JqZWN0KiB3aW5kb3dTY3JpcHRPYmplY3QgPSBtX3BhcmVudEZyYW1lLT5zY3JpcHQo
KS0+d2luZG93U2NyaXB0TlBPYmplY3QoKTsKKworICAgICAgICAvLyBSZXR1cm4gdmFsdWUgaXMg
ZXhwZWN0ZWQgdG8gYmUgcmV0YWluZWQsIGFzIGRlc2NyaWJlZCBoZXJlOiA8aHR0cDovL3d3dy5t
b3ppbGxhLm9yZy9wcm9qZWN0cy9wbHVnaW4vbnBydW50aW1lLmh0bWw+CisgICAgICAgIGlmICh3
aW5kb3dTY3JpcHRPYmplY3QpCisgICAgICAgICAgICBfTlBOX1JldGFpbk9iamVjdCh3aW5kb3dT
Y3JpcHRPYmplY3QpOworCisgICAgICAgICpzdGF0aWNfY2FzdDx2b2lkKio+KHZhbHVlKSA9IHdp
bmRvd1NjcmlwdE9iamVjdDsKKworICAgICAgICAqcmVzdWx0ID0gTlBFUlJfTk9fRVJST1I7Cisg
ICAgICAgIHJldHVybiB0cnVlOworICAgIH0KKworICAgIGNhc2UgTlBOVlBsdWdpbkVsZW1lbnRO
UE9iamVjdDogeworICAgICAgICBpZiAobV9pc0phdmFTY3JpcHRQYXVzZWQpIHsKKyAgICAgICAg
ICAgICpyZXN1bHQgPSBOUEVSUl9HRU5FUklDX0VSUk9SOworICAgICAgICAgICAgcmV0dXJuIHRy
dWU7CisgICAgICAgIH0KKworICAgICAgICBOUE9iamVjdCogcGx1Z2luU2NyaXB0T2JqZWN0ID0g
MDsKKworICAgICAgICBpZiAobV9lbGVtZW50LT5oYXNUYWdOYW1lKGFwcGxldFRhZykgfHwgbV9l
bGVtZW50LT5oYXNUYWdOYW1lKGVtYmVkVGFnKSB8fCBtX2VsZW1lbnQtPmhhc1RhZ05hbWUob2Jq
ZWN0VGFnKSkKKyAgICAgICAgICAgIHBsdWdpblNjcmlwdE9iamVjdCA9IHN0YXRpY19jYXN0PEhU
TUxQbHVnSW5FbGVtZW50Kj4obV9lbGVtZW50KS0+Z2V0TlBPYmplY3QoKTsKKworICAgICAgICAv
LyBSZXR1cm4gdmFsdWUgaXMgZXhwZWN0ZWQgdG8gYmUgcmV0YWluZWQsIGFzIGRlc2NyaWJlZCBo
ZXJlOiA8aHR0cDovL3d3dy5tb3ppbGxhLm9yZy9wcm9qZWN0cy9wbHVnaW4vbnBydW50aW1lLmh0
bWw+CisgICAgICAgIGlmIChwbHVnaW5TY3JpcHRPYmplY3QpCisgICAgICAgICAgICBfTlBOX1Jl
dGFpbk9iamVjdChwbHVnaW5TY3JpcHRPYmplY3QpOworCisgICAgICAgICpzdGF0aWNfY2FzdDx2
b2lkKio+KHZhbHVlKSA9IHBsdWdpblNjcmlwdE9iamVjdDsKKworICAgICAgICAqcmVzdWx0ID0g
TlBFUlJfTk9fRVJST1I7CisgICAgICAgIHJldHVybiB0cnVlOworICAgIH0KKworICAgIGNhc2Ug
TlBOVm5ldHNjYXBlV2luZG93OiB7CisgICAgICAgIEV2YXNfT2JqZWN0KiB3aWRnZXQgPSBtX3Bh
cmVudEZyYW1lLT52aWV3KCktPmhvc3RXaW5kb3coKS0+cGxhdGZvcm1QYWdlQ2xpZW50KCk7Cisg
ICAgICAgIEV2YXMqIGV2YXMgPSBldmFzX29iamVjdF9ldmFzX2dldCh3aWRnZXQpOworICAgICAg
ICBFY29yZV9FdmFzKiBlY29yZUV2YXMgPSBlY29yZV9ldmFzX2Vjb3JlX2V2YXNfZ2V0KGV2YXMp
OworICAgICAgICAqc3RhdGljX2Nhc3Q8WElEKj4odmFsdWUpID0gc3RhdGljX2Nhc3Q8V2luZG93
PihlY29yZV9ldmFzX3dpbmRvd19nZXQoZWNvcmVFdmFzKSk7CisgICAgICAgICpyZXN1bHQgPSBO
UEVSUl9OT19FUlJPUjsKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgfQorCisgICAgY2FzZSBO
UE5WVG9vbGtpdDoKKyAgICAgICAgaWYgKG1fcGx1Z2luLT5xdWlya3MoKS5jb250YWlucyhQbHVn
aW5RdWlya1JlcXVpcmVzR3RrVG9vbEtpdCkpIHsKKyAgICAgICAgICAgICpzdGF0aWNfY2FzdDx1
aW50MzJfdCo+KHZhbHVlKSA9IDI7CisgICAgICAgICAgICAqcmVzdWx0ID0gTlBFUlJfTk9fRVJS
T1I7CisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgfQorICAgICAgICByZXR1cm4g
ZmFsc2U7CisgICAgZGVmYXVsdDoKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KK30KKwor
dm9pZCBQbHVnaW5WaWV3OjppbnZhbGlkYXRlUmVjdChjb25zdCBJbnRSZWN0JiByZWN0KQorewor
ICAgIGludmFsaWRhdGVXaW5kb3dsZXNzUGx1Z2luUmVjdChyZWN0KTsKK30KKwordm9pZCBQbHVn
aW5WaWV3OjppbnZhbGlkYXRlUmVjdChOUFJlY3QqIHJlY3QpCit7CisgICAgaWYgKCFyZWN0KSB7
CisgICAgICAgIGludmFsaWRhdGUoKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIGlu
dmFsaWRhdGVSZWN0KEludFJlY3QocmVjdC0+bGVmdCwgcmVjdC0+dG9wLCByZWN0LT5yaWdodCAt
IHJlY3QtPmxlZnQsIHJlY3QtPmJvdHRvbSAtIHJlY3QtPnRvcCkpOworfQorCit2b2lkIFBsdWdp
blZpZXc6OmludmFsaWRhdGVSZWdpb24oTlBSZWdpb24gcmVnaW9uKQoreworICAgIG5vdEltcGxl
bWVudGVkKCk7Cit9CisKK3ZvaWQgUGx1Z2luVmlldzo6Zm9yY2VSZWRyYXcoKQoreworICAgIG5v
dEltcGxlbWVudGVkKCk7Cit9CisKK2Jvb2wgUGx1Z2luVmlldzo6cGxhdGZvcm1TdGFydCgpCit7
CisgICAgQVNTRVJUKG1faXNTdGFydGVkKTsKKyAgICBBU1NFUlQobV9zdGF0dXMgPT0gUGx1Z2lu
U3RhdHVzTG9hZGVkU3VjY2Vzc2Z1bGx5KTsKKworICAgIG5vdEltcGxlbWVudGVkKCk7CisgICAg
cmV0dXJuIHRydWU7Cit9CisKK3ZvaWQgUGx1Z2luVmlldzo6cGxhdGZvcm1EZXN0cm95KCkKK3sK
K30KKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9l
ZmwvQ2hhbmdlTG9nIGIvU291cmNlL1dlYktpdC9lZmwvQ2hhbmdlTG9nCmluZGV4IGM0ZDRmYzYu
LmY2ZWQ1MjQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvZWZsL0NoYW5nZUxvZworKysgYi9T
b3VyY2UvV2ViS2l0L2VmbC9DaGFuZ2VMb2cKQEAgLTEsMyArMSwxNSBAQAorMjAxMS0xMi0yMiAg
TWFyaXVzeiBHcnplZ29yY3p5ayAgPG1hcml1c3ouZ0BzYW1zdW5nLmNvbT4KKworICAgICAgICBC
dWcgNDQ1MDUgLSBbRUZMXSBNaXNzaW5nIHBsdWdpbnMgc3VwcG9ydCBmb3IgZWZsIHBvcnQKKyAg
ICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTQ0NTA1CisKKyAg
ICAgICAgUmV2aWV3ZWQgYnkgQW5kZXJzIENhbHNzb24uCisKKyAgICAgICAgSW1wbGVtZW50YXRp
b24gb2YgZXdrX2ZyYW1lX3BsdWdpbl9jcmVhdGUoKSAtIGNyZWF0aW5nIFBsdWdpblZpZXcuCisK
KyAgICAgICAgKiBld2svZXdrX2ZyYW1lLmNwcDoKKyAgICAgICAgKGV3a19mcmFtZV9wbHVnaW5f
Y3JlYXRlKToKKwogMjAxMS0xMi0yMSAgTWljaGHFgiBQYWt1xYJhIHZlbCBSdXRrYSAgPG0ucGFr
dWxhQHNhbXN1bmcuY29tPgogCiAgICAgICAgIFtFRkxdIEFkZCAnU2VsZWN0IEFsbCcgb3B0aW9u
IHRvIGNvbnRleHQgbWVudXMgaW4gV2ViS2l0LUVGTC4KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJL
aXQvZWZsL2V3ay9ld2tfZnJhbWUuY3BwIGIvU291cmNlL1dlYktpdC9lZmwvZXdrL2V3a19mcmFt
ZS5jcHAKaW5kZXggY2UyMDgxMS4uYzNmNGVjNyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9l
ZmwvZXdrL2V3a19mcmFtZS5jcHAKKysrIGIvU291cmNlL1dlYktpdC9lZmwvZXdrL2V3a19mcmFt
ZS5jcHAKQEAgLTE2NzUsNiArMTY3NSwyNCBAQCB2b2lkIGV3a19mcmFtZV9mb3JjZV9sYXlvdXQo
RXZhc19PYmplY3QqIGV3a0ZyYW1lKQogICovCiBXVEY6OlBhc3NSZWZQdHI8V2ViQ29yZTo6V2lk
Z2V0PiBld2tfZnJhbWVfcGx1Z2luX2NyZWF0ZShFdmFzX09iamVjdCogZXdrRnJhbWUsIGNvbnN0
IFdlYkNvcmU6OkludFNpemUmIHBsdWdpblNpemUsIFdlYkNvcmU6OkhUTUxQbHVnSW5FbGVtZW50
KiBlbGVtZW50LCBjb25zdCBXZWJDb3JlOjpLVVJMJiB1cmwsIGNvbnN0IFdURjo6VmVjdG9yPFdU
Rjo6U3RyaW5nPiYgcGFyYW1OYW1lcywgY29uc3QgV1RGOjpWZWN0b3I8V1RGOjpTdHJpbmc+JiBw
YXJhbVZhbHVlcywgY29uc3QgV1RGOjpTdHJpbmcmIG1pbWVUeXBlLCBib29sIGxvYWRNYW51YWxs
eSkKIHsKKyNpZiBFTkFCTEUoTkVUU0NBUEVfUExVR0lOX0FQSSkKKyAgICBEQkcoImV3a0ZyYW1l
PSVwLCBzaXplPSVkeCVkLCBlbGVtZW50PSVwLCB1cmw9JXMsIG1pbWVUeXBlPSVzIiwKKyAgICAg
ICAgZXdrRnJhbWUsIHBsdWdpblNpemUud2lkdGgoKSwgcGx1Z2luU2l6ZS5oZWlnaHQoKSwgZWxl
bWVudCwKKyAgICAgICAgdXJsLnN0cmluZygpLnV0ZjgoKS5kYXRhKCksIG1pbWVUeXBlLnV0Zjgo
KS5kYXRhKCkpOworCisgICAgRVdLX0ZSQU1FX1NEX0dFVF9PUl9SRVRVUk4oZXdrRnJhbWUsIHNk
LCAwKTsKKworICAgIC8vIFRPRE86IGVtaXQgc2lnbmFsIGFuZCBhc2sgd2Via2l0IHVzZXJzIGlm
IHNvbWV0aGluZyBlbHNlIHNob3VsZCBiZSBkb25lLgorICAgIC8vIGxpa2UgY3JlYXRpbmcgYW5v
dGhlciB4IHdpbmRvdyAoc2VlIGd0aywgaXQgYWxsb3dzIHVzZXJzIHRvIGNyZWF0ZQorICAgIC8v
IEd0a1BsdWdpbldpZGdldC4KKworICAgIFdURjo6UmVmUHRyPFdlYkNvcmU6OlBsdWdpblZpZXc+
IHBsdWdpblZpZXcgPSBXZWJDb3JlOjpQbHVnaW5WaWV3OjpjcmVhdGUKKyAgICAgICAgKHNkLT5m
cmFtZSwgcGx1Z2luU2l6ZSwgZWxlbWVudCwgdXJsLCBwYXJhbU5hbWVzLCBwYXJhbVZhbHVlcywK
KyAgICAgICAgbWltZVR5cGUsIGxvYWRNYW51YWxseSk7CisKKyAgICBpZiAocGx1Z2luVmlldy0+
c3RhdHVzKCkgPT0gV2ViQ29yZTo6UGx1Z2luU3RhdHVzTG9hZGVkU3VjY2Vzc2Z1bGx5KQorICAg
ICAgICByZXR1cm4gcGx1Z2luVmlldy5yZWxlYXNlKCk7CisjZW5kaWYgLy8gI2lmIEVOQUJMRShO
RVRTQ0FQRV9QTFVHSU5fQVBJKQogICAgIHJldHVybiAwOwogfQogCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>120301</attachid>
            <date>2011-12-22 03:15:34 -0800</date>
            <delta_ts>2011-12-22 04:46:07 -0800</delta_ts>
            <desc>EFL&apos;s plugin support</desc>
            <filename>efl_plugins.patch</filename>
            <type>text/plain</type>
            <size>25787</size>
            <attacher name="Mariusz Grzegorczyk">mariusz.g</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cgYi9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvQ2hhbmdlTG9nCmluZGV4IDQwNTBlYjMuLmM1N2VkODggMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKKysrIGIvU291cmNlL0phdmFTY3JpcHRD
b3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDE0IEBACisyMDExLTEyLTIyICBNYXJpdXN6IEdyemVn
b3JjenlrICA8bWFyaXVzei5nQHNhbXN1bmcuY29tPgorCisgICAgICAgIEJ1ZyA0NDUwNSAtIFtF
RkxdIE1pc3NpbmcgcGx1Z2lucyBzdXBwb3J0IGZvciBlZmwgcG9ydAorICAgICAgICBodHRwczov
L2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NDQ1MDUKKworICAgICAgICBSZXZpZXdl
ZCBieSBBbmRlcnMgQ2FybHNzb24uCisKKyAgICAgICAgQWRkIGRlZmluZSBvZiBFTkFCTEVfUExV
R0lOX1BBQ0tBR0VfU0lNUExFX0hBU0ggZm9yIGVmbCBwb3J0LgorCisgICAgICAgICogd3RmL1Bs
YXRmb3JtLmg6CisKIDIwMTEtMTItMjEgIERhbiBCZXJuc3RlaW4gIDxtaXR6QGFwcGxlLmNvbT4K
IAogICAgICAgICBPUyBYIGJ1aWxkIGZpeCBhZnRlciByMTAzNDg4LgpkaWZmIC0tZ2l0IGEvU291
cmNlL0phdmFTY3JpcHRDb3JlL3d0Zi9QbGF0Zm9ybS5oIGIvU291cmNlL0phdmFTY3JpcHRDb3Jl
L3d0Zi9QbGF0Zm9ybS5oCmluZGV4IDkyNjJjNmUuLmJiMTQ2MmUgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS93dGYvUGxhdGZvcm0uaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvd3RmL1BsYXRmb3JtLmgKQEAgLTEwNTksNyArMTA1OSw3IEBACiAjZGVmaW5lIFdURl9VU0Vf
UFJPVEVDVElPTl9TUEFDRV9BVVRIX0NBTExCQUNLIDEKICNlbmRpZgogCi0jaWYgIUVOQUJMRShO
RVRTQ0FQRV9QTFVHSU5fQVBJKSB8fCAoRU5BQkxFKE5FVFNDQVBFX1BMVUdJTl9BUEkpICYmICgo
T1MoVU5JWCkgJiYgKFBMQVRGT1JNKFFUKSB8fCBQTEFURk9STShXWCkpKSB8fCBQTEFURk9STShH
VEspKSkKKyNpZiAhRU5BQkxFKE5FVFNDQVBFX1BMVUdJTl9BUEkpIHx8IChFTkFCTEUoTkVUU0NB
UEVfUExVR0lOX0FQSSkgJiYgKChPUyhVTklYKSAmJiAoUExBVEZPUk0oUVQpIHx8IFBMQVRGT1JN
KFdYKSkpIHx8IFBMQVRGT1JNKEdUSykgfHwgUExBVEZPUk0oRUZMKSkpCiAjZGVmaW5lIEVOQUJM
RV9QTFVHSU5fUEFDS0FHRV9TSU1QTEVfSEFTSCAxCiAjZW5kaWYKIApkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvQ2hhbmdlTG9nIGIvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCmluZGV4IDA4
MDA5NWYuLjM3ZjNhYWQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZworKysg
Yi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKQEAgLTEsMyArMSw0NyBAQAorMjAxMS0xMi0yMiAg
TWFyaXVzeiBHcnplZ29yY3p5ayAgPG1hcml1c3ouZ0BzYW1zdW5nLmNvbT4KKworICAgICAgICBC
dWcgNDQ1MDUgLSBbRUZMXSBNaXNzaW5nIHBsdWdpbnMgc3VwcG9ydCBmb3IgZWZsIHBvcnQKKyAg
ICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTQ0NTA1CisKKyAg
ICAgICAgUmV2aWV3ZWQgYnkgQW5kZXJzIENhcmxzc29uLgorCisgICAgICAgIEJhc2ljIGZ1bmN0
aW9uYWxpdHkgb2YgcGx1Z2lucyBmb3IgZWZsIHBvcnQuCisKKyAgICAgICAgVGVtcGxhdGUgdmVy
c2lvbiwgc28gbm8gbmV3IHRlc3RzIGFyZSBuZWVkZWQuCisKKyAgICAgICAgKiBQbGF0Zm9ybUVm
bC5jbWFrZToKKyAgICAgICAgKiBwbHVnaW5zL1BsdWdpblZpZXcuaDoKKyAgICAgICAgKiBwbHVn
aW5zL2VmbC9QbHVnaW5EYXRhRWZsLmNwcDogQWRkZWQuIENvcGllZCBmcm9tIHBsdWdpbnMvZ3Rr
L1BsdWdpbkRhdGFHdGsuY3BwLgorICAgICAgICAoV2ViQ29yZTo6UGx1Z2luRGF0YTo6aW5pdFBs
dWdpbnMpOiBGaWxsIG1pbWUvZGVzY3JpcHRpb24vZXh0ZW5zaW9uIG1hcHMgZm9yIHBsdWdpbnMu
CisgICAgICAgIChXZWJDb3JlOjpQbHVnaW5EYXRhOjpyZWZyZXNoKTogUmVmcmVzaCBwbHVnaW4n
cyBkYXRhYmFzZS4KKyAgICAgICAgKiBwbHVnaW5zL2VmbC9QbHVnaW5QYWNrYWdlRWZsLmNwcDog
QWRkZWQuIENvcGllZCBmcm9tIHBsdWdpbnMvZ3RrL1BsdWdpblBhY2thZ2VHdGsuY3BwLgorICAg
ICAgICAoV2ViQ29yZTo6UGx1Z2luUGFja2FnZTo6ZmV0Y2hJbmZvKTogR2V0IGluZm8gZnJvbSBw
bHVnaW4ncyBsaWJyYXJ5IGFib3V0IG5hbWUgYW5kIG1pbWUgc3VwcG9ydGVkLgorICAgICAgICAo
V2ViQ29yZTo6UGx1Z2luUGFja2FnZTo6TlBWZXJzaW9uKToKKyAgICAgICAgKFdlYkNvcmU6OlBs
dWdpblBhY2thZ2U6OmxvYWQpOiBMb2FkIHBsdWdpbi4KKyAgICAgICAgKiBwbHVnaW5zL2VmbC9Q
bHVnaW5WaWV3RWZsLmNwcDogQWRkZWQuIENvcGllZCBmcm9tIHBsdWdpbnMvZ3RrL1BsdWdpblZp
ZXdHdGsuY3BwLgorICAgICAgICAoV2ViQ29yZTo6UGx1Z2luVmlldzo6ZGlzcGF0Y2hOUEV2ZW50
KToKKyAgICAgICAgKFdlYkNvcmU6OlBsdWdpblZpZXc6OmhhbmRsZUZvY3VzSW5FdmVudCk6Cisg
ICAgICAgIChXZWJDb3JlOjpQbHVnaW5WaWV3OjpoYW5kbGVGb2N1c091dEV2ZW50KToKKyAgICAg
ICAgKFdlYkNvcmU6OlBsdWdpblZpZXc6OmhhbmRsZUtleWJvYXJkRXZlbnQpOgorICAgICAgICAo
V2ViQ29yZTo6UGx1Z2luVmlldzo6aGFuZGxlTW91c2VFdmVudCk6CisgICAgICAgIChXZWJDb3Jl
OjpQbHVnaW5WaWV3Ojp1cGRhdGVQbHVnaW5XaWRnZXQpOgorICAgICAgICAoV2ViQ29yZTo6UGx1
Z2luVmlldzo6c2V0Rm9jdXMpOgorICAgICAgICAoV2ViQ29yZTo6UGx1Z2luVmlldzo6c2hvdyk6
CisgICAgICAgIChXZWJDb3JlOjpQbHVnaW5WaWV3OjpoaWRlKToKKyAgICAgICAgKFdlYkNvcmU6
OlBsdWdpblZpZXc6OnBhaW50KToKKyAgICAgICAgKFdlYkNvcmU6OlBsdWdpblZpZXc6OnNldFBh
cmVudCk6CisgICAgICAgIChXZWJDb3JlOjpQbHVnaW5WaWV3OjpzZXROUFdpbmRvd1JlY3QpOgor
ICAgICAgICAoV2ViQ29yZTo6UGx1Z2luVmlldzo6c2V0TlBXaW5kb3dJZk5lZWRlZCk6CisgICAg
ICAgIChXZWJDb3JlOjpQbHVnaW5WaWV3OjpzZXRQYXJlbnRWaXNpYmxlKToKKyAgICAgICAgKFdl
YkNvcmU6OlBsdWdpblZpZXc6OmhhbmRsZVBvc3RSZWFkRmlsZSk6CisgICAgICAgIChXZWJDb3Jl
OjpQbHVnaW5WaWV3OjpwbGF0Zm9ybUdldFZhbHVlU3RhdGljKToKKyAgICAgICAgKFdlYkNvcmU6
OlBsdWdpblZpZXc6OnBsYXRmb3JtR2V0VmFsdWUpOgorICAgICAgICAoV2ViQ29yZTo6UGx1Z2lu
Vmlldzo6aW52YWxpZGF0ZVJlY3QpOgorICAgICAgICAoV2ViQ29yZTo6UGx1Z2luVmlldzo6aW52
YWxpZGF0ZVJlZ2lvbik6CisgICAgICAgIChXZWJDb3JlOjpQbHVnaW5WaWV3Ojpmb3JjZVJlZHJh
dyk6CisgICAgICAgIChXZWJDb3JlOjpQbHVnaW5WaWV3OjpwbGF0Zm9ybVN0YXJ0KToKKyAgICAg
ICAgKFdlYkNvcmU6OlBsdWdpblZpZXc6OnBsYXRmb3JtRGVzdHJveSk6CisKIDIwMTEtMTItMjIg
IEhhbnMgTXVsbGVyICA8aG11bGxlckBhZG9iZS5jb20+CiAKICAgICAgICAgT25sb2FkZW5kIGV2
ZW50IGlzIG5vdCBzdXBwb3J0ZWQgaW4gWE1MSHR0cFJlcXVlc3QKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL1BsYXRmb3JtRWZsLmNtYWtlIGIvU291cmNlL1dlYkNvcmUvUGxhdGZvcm1FZmwu
Y21ha2UKaW5kZXggMWU2M2IwMi4uYmMyMzVkNyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUv
UGxhdGZvcm1FZmwuY21ha2UKKysrIGIvU291cmNlL1dlYkNvcmUvUGxhdGZvcm1FZmwuY21ha2UK
QEAgLTUsMTQgKzUsMTQgQEAgTElTVChBUFBFTkQgV2ViQ29yZV9MSU5LX0ZMQUdTCiAKIExJU1Qo
QVBQRU5EIFdlYkNvcmVfSU5DTFVERV9ESVJFQ1RPUklFUwogICAiJHtKQVZBU0NSSVBUQ09SRV9E
SVJ9L3d0Zi9nb2JqZWN0IgorICAiJHtXRUJDT1JFX0RJUn0vYWNjZXNzaWJpbGl0eS9lZmwiCisg
ICIke1dFQkNPUkVfRElSfS9wYWdlL2VmbCIKICAgIiR7V0VCQ09SRV9ESVJ9L3BsYXRmb3JtL2Vm
bCIKLSAgIiR7V0VCQ09SRV9ESVJ9L3BsYXRmb3JtL3RleHQvZWZsIgogICAiJHtXRUJDT1JFX0RJ
Un0vcGxhdGZvcm0vZ3JhcGhpY3MvZWZsIgotICAiJHtXRUJDT1JFX0RJUn0vcGFnZS9lZmwiCi0g
ICIke1dFQkNPUkVfRElSfS9hY2Nlc3NpYmlsaXR5L2VmbCIKKyAgIiR7V0VCQ09SRV9ESVJ9L3Bs
YXRmb3JtL3RleHQvZWZsIgorICAiJHtXRUJDT1JFX0RJUn0vcGx1Z2lucy9lZmwiCiAgICIke1dF
QktJVF9ESVJ9L2VmbC9XZWJDb3JlU3VwcG9ydCIKICAgIiR7V0VCS0lUX0RJUn0vZWZsL2V3ayIK
LSAgIiR7REVSSVZFRF9TT1VSQ0VTX0RJUn0iCiApCiAKIExJU1QoQVBQRU5EIFdlYkNvcmVfU09V
UkNFUwpAQCAtNzIsMTEgKzcyLDI4IEBAIExJU1QoQVBQRU5EIFdlYkNvcmVfU09VUkNFUwogICBw
bGF0Zm9ybS9pbWFnZS1kZWNvZGVycy93ZWJwL1dFQlBJbWFnZURlY29kZXIuY3BwCiAgIHBsYXRm
b3JtL3Bvc2l4L0ZpbGVTeXN0ZW1QT1NJWC5jcHAKICAgcGxhdGZvcm0vdGV4dC9lZmwvVGV4dEJy
ZWFrSXRlcmF0b3JJbnRlcm5hbElDVUVmbC5jcHAKLSAgcGx1Z2lucy9QbHVnaW5EYXRhTm9uZS5j
cHAKLSAgcGx1Z2lucy9QbHVnaW5QYWNrYWdlTm9uZS5jcHAKLSAgcGx1Z2lucy9QbHVnaW5WaWV3
Tm9uZS5jcHAKICkKIAorSUYgKEVOQUJMRV9ORVRTQ0FQRV9QTFVHSU5fQVBJKQorICBMSVNUKEFQ
UEVORCBXZWJDb3JlX1NPVVJDRVMKKyAgICBwbHVnaW5zL1BsdWdpbkRhdGFiYXNlLmNwcAorICAg
IHBsdWdpbnMvUGx1Z2luRGVidWcuY3BwCisgICAgcGx1Z2lucy9QbHVnaW5QYWNrYWdlLmNwcAor
ICAgIHBsdWdpbnMvUGx1Z2luU3RyZWFtLmNwcAorICAgIHBsdWdpbnMvUGx1Z2luVmlldy5jcHAK
KworICAgIHBsdWdpbnMvZWZsL1BsdWdpbkRhdGFFZmwuY3BwCisgICAgcGx1Z2lucy9lZmwvUGx1
Z2luUGFja2FnZUVmbC5jcHAKKyAgICBwbHVnaW5zL2VmbC9QbHVnaW5WaWV3RWZsLmNwcAorICAp
CitFTFNFICgpCisgIExJU1QoQVBQRU5EIFdlYkNvcmVfU09VUkNFUworICAgIHBsdWdpbnMvUGx1
Z2luRGF0YU5vbmUuY3BwCisgICAgcGx1Z2lucy9QbHVnaW5QYWNrYWdlTm9uZS5jcHAKKyAgICBw
bHVnaW5zL1BsdWdpblZpZXdOb25lLmNwcAorICApCitFTkRJRiAoKQorCiBMSVNUKEFQUEVORCBX
ZWJDb3JlX1VTRVJfQUdFTlRfU1RZTEVfU0hFRVRTCiAgICAgJHtXRUJDT1JFX0RJUn0vY3NzL21l
ZGlhQ29udHJvbHNFZmwuY3NzCiApCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbHVnaW5z
L1BsdWdpblZpZXcuaCBiL1NvdXJjZS9XZWJDb3JlL3BsdWdpbnMvUGx1Z2luVmlldy5oCmluZGV4
IDQ2NDVlMGIuLmQ5YmY2MWEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsdWdpbnMvUGx1
Z2luVmlldy5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsdWdpbnMvUGx1Z2luVmlldy5oCkBAIC0z
NzgsNyArMzc4LDcgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogICAgICAgICBib29sIG1faGF2ZVVw
ZGF0ZWRQbHVnaW5XaWRnZXQ7CiAjZW5kaWYKIAotI2lmICgoUExBVEZPUk0oUVQpIHx8IFBMQVRG
T1JNKFdYKSkgJiYgT1MoV0lORE9XUykpIHx8IGRlZmluZWQoWFBfTUFDT1NYKQorI2lmICgoUExB
VEZPUk0oUVQpIHx8IFBMQVRGT1JNKFdYKSkgJiYgT1MoV0lORE9XUykpIHx8IGRlZmluZWQoWFBf
TUFDT1NYKSB8fCBQTEFURk9STShFRkwpCiAgICAgICAgIC8vIE9uIE1hYyBPU1ggYW5kIFF0L1dp
bmRvd3MgdGhlIHBsdWdpbiBkb2VzIG5vdCBoYXZlIGl0cyBvd24gbmF0aXZlIHdpZGdldCwKICAg
ICAgICAgLy8gYnV0IGlzIHVzaW5nIHRoZSBjb250YWluaW5nIHdpbmRvdyBhcyBpdHMgcmVmZXJl
bmNlIGZvciBwb3NpdGlvbmluZy9wYWludGluZy4KICAgICAgICAgUGxhdGZvcm1QbHVnaW5XaWRn
ZXQgbV93aW5kb3c7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbHVnaW5zL2VmbC9QbHVn
aW5EYXRhRWZsLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsdWdpbnMvZWZsL1BsdWdpbkRhdGFFZmwu
Y3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmMyMWQ1MWIKLS0tIC9kZXYv
bnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbHVnaW5zL2VmbC9QbHVnaW5EYXRhRWZsLmNwcApA
QCAtMCwwICsxLDY2IEBACisvKgorICAgIENvcHlyaWdodCAoQykgMjAwNiwgMjAwNyBBcHBsZSBJ
bmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICAgIENvcHlyaWdodCAoQykgMjAwOCBUcm9sbHRl
Y2ggQVNBCisgICAgQ29weXJpZ2h0IChDKSAyMDA4IENvbGxhYm9yYSBMdGQuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCisgICAgQ29weXJpZ2h0IChDKSAyMDA4IElOZFQgLSBJbnN0aXR1dG8gTm9raWEg
ZGUgVGVjbm9sb2dpYQorICAgIENvcHlyaWdodCAoQykgMjAwOS0yMDEwIFByb0ZVU0lPTiBlbWJl
ZGRlZCBzeXN0ZW1zCisgICAgQ29weXJpZ2h0IChDKSAyMDA5LTIwMTEgU2Ftc3VuZyBFbGVjdHJv
bmljcworCisgICAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0
cmlidXRlIGl0IGFuZC9vcgorICAgIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdO
VSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgICAgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhl
IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgICAgdmVyc2lvbiAyIG9mIHRoZSBM
aWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorCisgICAgVGhp
cyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2Vm
dWwsCisgICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxp
ZWQgd2FycmFudHkgb2YKKyAgICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJU
SUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICAgIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMg
TGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorCisgICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVk
IGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICAgIGFs
b25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3Qs
IHdyaXRlIHRvCisgICAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJh
bmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKKyAgICBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVT
QS4KKyovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJQbHVnaW5EYXRhLmgiCisK
KyNpbmNsdWRlICJQbHVnaW5EYXRhYmFzZS5oIgorI2luY2x1ZGUgIlBsdWdpblBhY2thZ2UuaCIK
KworbmFtZXNwYWNlIFdlYkNvcmUgeworCit2b2lkIFBsdWdpbkRhdGE6OmluaXRQbHVnaW5zKGNv
bnN0IFBhZ2UqKQoreworICAgIGNvbnN0IFZlY3RvcjxQbHVnaW5QYWNrYWdlKj4mIHBsdWdpbnMg
PSBQbHVnaW5EYXRhYmFzZTo6aW5zdGFsbGVkUGx1Z2lucygpLT5wbHVnaW5zKCk7CisKKyAgICBm
b3IgKHNpemVfdCBpID0gMDsgaSA8IHBsdWdpbnMuc2l6ZSgpOyArK2kpIHsKKyAgICAgICAgUGx1
Z2luUGFja2FnZSogcGFja2FnZSA9IHBsdWdpbnNbaV07CisgICAgICAgIFBsdWdpbkluZm8gaW5m
bzsKKworICAgICAgICBpbmZvLm5hbWUgPSBwYWNrYWdlLT5uYW1lKCk7CisgICAgICAgIGluZm8u
ZmlsZSA9IHBhY2thZ2UtPmZpbGVOYW1lKCk7CisgICAgICAgIGluZm8uZGVzYyA9IHBhY2thZ2Ut
PmRlc2NyaXB0aW9uKCk7CisKKyAgICAgICAgY29uc3QgTUlNRVRvRGVzY3JpcHRpb25zTWFwJiBt
aW1lVG9EZXNjcmlwdGlvbnMgPSBwYWNrYWdlLT5taW1lVG9EZXNjcmlwdGlvbnMoKTsKKyAgICAg
ICAgTUlNRVRvRGVzY3JpcHRpb25zTWFwOjpjb25zdF9pdGVyYXRvciBlbmQgPSBtaW1lVG9EZXNj
cmlwdGlvbnMuZW5kKCk7CisgICAgICAgIGZvciAoTUlNRVRvRGVzY3JpcHRpb25zTWFwOjpjb25z
dF9pdGVyYXRvciBpdCA9IG1pbWVUb0Rlc2NyaXB0aW9ucy5iZWdpbigpOyBpdCAhPSBlbmQ7ICsr
aXQpIHsKKyAgICAgICAgICAgIE1pbWVDbGFzc0luZm8gbWltZTsKKworICAgICAgICAgICAgbWlt
ZS50eXBlID0gaXQtPmZpcnN0OworICAgICAgICAgICAgbWltZS5kZXNjID0gaXQtPnNlY29uZDsK
KyAgICAgICAgICAgIG1pbWUuZXh0ZW5zaW9ucyA9IHBhY2thZ2UtPm1pbWVUb0V4dGVuc2lvbnMo
KS5nZXQobWltZS50eXBlKTsKKworICAgICAgICAgICAgaW5mby5taW1lcy5hcHBlbmQobWltZSk7
CisgICAgICAgIH0KKworICAgICAgICBtX3BsdWdpbnMuYXBwZW5kKGluZm8pOworICAgIH0KK30K
Kwordm9pZCBQbHVnaW5EYXRhOjpyZWZyZXNoKCkKK3sKKyAgICBQbHVnaW5EYXRhYmFzZTo6aW5z
dGFsbGVkUGx1Z2lucygpLT5yZWZyZXNoKCk7Cit9CisKK307CmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9wbHVnaW5zL2VmbC9QbHVnaW5QYWNrYWdlRWZsLmNwcCBiL1NvdXJjZS9XZWJDb3Jl
L3BsdWdpbnMvZWZsL1BsdWdpblBhY2thZ2VFZmwuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0Cmlu
ZGV4IDAwMDAwMDAuLmE3YjBhMGIKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9w
bHVnaW5zL2VmbC9QbHVnaW5QYWNrYWdlRWZsLmNwcApAQCAtMCwwICsxLDE2OCBAQAorLyoKKyAq
IENvcHlyaWdodCAoQykgMjAwNiwgMjAwNyBBcHBsZSBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVk
LgorICogQ29weXJpZ2h0IChDKSAyMDA4IENvbGxhYm9yYSBMdGQuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDggTnVhbnRpIEx0ZC4KKyAqIENvcHlyaWdodCAoQykg
MjAwOCBJTmRUIC0gSW5zdGl0dXRvIE5va2lhIGRlIFRlY25vbG9naWEKKyAqIENvcHlyaWdodCAo
QykgMjAwOS0yMDEwIFByb0ZVU0lPTiBlbWJlZGRlZCBzeXN0ZW1zCisgKiBDb3B5cmlnaHQgKEMp
IDIwMDktMjAxMSBTYW1zdW5nIEVsZWN0cm9uaWNzCisgKgorICogUmVkaXN0cmlidXRpb24gYW5k
IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2Rp
ZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRp
dGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUg
bXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0
cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1h
dGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZU
V0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBDT01QVVRFUiwgSU5DLiBgYEFTIElTJycgQU5EIEFO
WQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkg
QU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4g
IElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIENPTVBVVEVSLCBJTkMuIE9SCisgKiBDT05UUklCVVRP
UlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lB
TCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1Ig
U0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1Mg
SU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElB
QklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisg
KiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkg
T1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBU
SEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5o
IgorI2luY2x1ZGUgIlBsdWdpblBhY2thZ2UuaCIKKworI2luY2x1ZGUgIk1JTUVUeXBlUmVnaXN0
cnkuaCIKKyNpbmNsdWRlICJOb3RJbXBsZW1lbnRlZC5oIgorI2luY2x1ZGUgIlBsdWdpbkRhdGFi
YXNlLmgiCisjaW5jbHVkZSAiUGx1Z2luRGVidWcuaCIKKyNpbmNsdWRlICJucHJ1bnRpbWVfaW1w
bC5oIgorCisjaW5jbHVkZSA8RWluYS5oPgorI2luY2x1ZGUgPGRsZmNuLmg+CisjaW5jbHVkZSA8
d3RmL3RleHQvQ1N0cmluZy5oPgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK3R5cGVkZWYgY2hh
ciogKCpOUFBfR2V0TUlNRURlc2NyaXB0aW9uUHJvY1B0cikoKTsKKworYm9vbCBQbHVnaW5QYWNr
YWdlOjpmZXRjaEluZm8oKQoreworICAgIGNvbnN0IGNoYXIgKmVycm1zZzsKKworICAgIGlmICgh
bG9hZCgpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBOUFBfR2V0VmFsdWVQcm9jUHRy
IGdldFZhbHVlID0gMDsKKyAgICBOUFBfR2V0TUlNRURlc2NyaXB0aW9uUHJvY1B0ciBnZXRNSU1F
RGVzY3JpcHRpb24gPSAwOworCisgICAgZ2V0VmFsdWUgPSByZWludGVycHJldF9jYXN0PE5QUF9H
ZXRWYWx1ZVByb2NQdHI+KGRsc3ltKG1fbW9kdWxlLCAiTlBfR2V0VmFsdWUiKSk7CisgICAgaWYg
KChlcnJtc2cgPSBkbGVycm9yKCkpKSB7CisgICAgICAgIEVJTkFfTE9HX0VSUigiQ291bGQgbm90
IGdldCBzeW1ib2wgTlBfR2V0VmFsdWU6ICVzIiwgZXJybXNnKTsKKyAgICAgICAgcmV0dXJuIGZh
bHNlOworICAgIH0KKworICAgIGdldE1JTUVEZXNjcmlwdGlvbiA9IHJlaW50ZXJwcmV0X2Nhc3Q8
TlBQX0dldE1JTUVEZXNjcmlwdGlvblByb2NQdHI+KGRsc3ltKG1fbW9kdWxlLCAiTlBfR2V0TUlN
RURlc2NyaXB0aW9uIikpOworICAgIGlmICgoZXJybXNnID0gZGxlcnJvcigpKSkgeworICAgICAg
ICBFSU5BX0xPR19FUlIoIkNvdWxkIG5vdCBnZXQgc3ltYm9sIE5QX0dldE1JTUVEZXNjcmlwdGlv
bjogJXMiLCBlcnJtc2cpOworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorCisgICAgY2hh
ciogYnVmZmVyID0gMDsKKyAgICBOUEVycm9yIGVyciA9IGdldFZhbHVlKDAsIE5QUFZwbHVnaW5O
YW1lU3RyaW5nLCBzdGF0aWNfY2FzdDx2b2lkKj4oJmJ1ZmZlcikpOworICAgIGlmIChlcnIgIT0g
TlBFUlJfTk9fRVJST1IpCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICBtX25hbWUgPSBidWZm
ZXI7CisKKyAgICBidWZmZXIgPSAwOworICAgIGVyciA9IGdldFZhbHVlKDAsIE5QUFZwbHVnaW5E
ZXNjcmlwdGlvblN0cmluZywgc3RhdGljX2Nhc3Q8dm9pZCo+KCZidWZmZXIpKTsKKyAgICBpZiAo
ZXJyICE9IE5QRVJSX05PX0VSUk9SKQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgbV9kZXNj
cmlwdGlvbiA9IGJ1ZmZlcjsKKyAgICBkZXRlcm1pbmVNb2R1bGVWZXJzaW9uRnJvbURlc2NyaXB0
aW9uKCk7CisKKyAgICBTdHJpbmcgZGVzY3JpcHRpb24gPSBnZXRNSU1FRGVzY3JpcHRpb24oKTsK
KworICAgIFZlY3RvcjxTdHJpbmc+IHR5cGVzOworICAgIGRlc2NyaXB0aW9uLnNwbGl0KFVDaGFy
KCc7JyksIGZhbHNlLCB0eXBlcyk7CisKKyAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IHR5cGVz
LnNpemUoKTsgKytpKSB7CisgICAgICAgIFZlY3RvcjxTdHJpbmc+IG1pbWU7CisgICAgICAgIHR5
cGVzW2ldLnNwbGl0KFVDaGFyKCc6JyksIHRydWUsIG1pbWUpOworCisgICAgICAgIGlmICghbWlt
ZS5pc0VtcHR5KCkgPiAwKSB7CisgICAgICAgICAgICBWZWN0b3I8U3RyaW5nPiBleHRzOworCisg
ICAgICAgICAgICBpZiAobWltZS5zaXplKCkgPiAxKQorICAgICAgICAgICAgICAgIG1pbWVbMV0u
c3BsaXQoVUNoYXIoJywnKSwgZmFsc2UsIGV4dHMpOworCisgICAgICAgICAgICBkZXRlcm1pbmVR
dWlya3MobWltZVswXSk7CisgICAgICAgICAgICBtX21pbWVUb0V4dGVuc2lvbnMuYWRkKG1pbWVb
MF0sIGV4dHMpOworCisgICAgICAgICAgICBpZiAobWltZS5zaXplKCkgPiAyKQorICAgICAgICAg
ICAgICAgIG1fbWltZVRvRGVzY3JpcHRpb25zLmFkZChtaW1lWzBdLCBtaW1lWzJdKTsKKyAgICAg
ICAgfQorICAgIH0KKworICAgIHJldHVybiB0cnVlOworfQorCit1aW50MTZfdCBQbHVnaW5QYWNr
YWdlOjpOUFZlcnNpb24oKSBjb25zdAoreworICAgIHJldHVybiBOUFZFUlNfSEFTX1BMVUdJTl9U
SFJFQURfQVNZTkNfQ0FMTDsKK30KKworYm9vbCBQbHVnaW5QYWNrYWdlOjpsb2FkKCkKK3sKKyAg
ICBjaGFyKiBlcnJtc2c7CisKKyAgICBpZiAobV9pc0xvYWRlZCkgeworICAgICAgICBtX2xvYWRD
b3VudCsrOworICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CisKKyAgICBtX21vZHVsZSA9IGRs
b3BlbihtX3BhdGgudXRmOCgpLmRhdGEoKSwgUlRMRF9MQVpZIHwgUlRMRF9MT0NBTCk7CisgICAg
aWYgKChlcnJtc2cgPSBkbGVycm9yKCkpKSB7CisgICAgICAgIEVJTkFfTE9HX1dBUk4oIiVzIG5v
dCBsb2FkZWQ6ICVzIiwgbV9wYXRoLnV0ZjgoKS5kYXRhKCksIGVycm1zZyk7CisgICAgICAgIHJl
dHVybiBmYWxzZTsKKyAgICB9CisKKyAgICBtX2lzTG9hZGVkID0gdHJ1ZTsKKworICAgIE5QX0lu
aXRpYWxpemVGdW5jUHRyIGluaXRpYWxpemU7CisgICAgTlBFcnJvciBlcnI7CisKKyAgICBpbml0
aWFsaXplID0gcmVpbnRlcnByZXRfY2FzdDxOUF9Jbml0aWFsaXplRnVuY1B0cj4oZGxzeW0obV9t
b2R1bGUsICJOUF9Jbml0aWFsaXplIikpOworICAgIGlmICgoZXJybXNnID0gZGxlcnJvcigpKSkg
eworICAgICAgICBFSU5BX0xPR19FUlIoIkNvdWxkIG5vdCBnZXQgc3ltYm9sIE5QX0luaXRpYWxp
emU6ICVzIiwgZXJybXNnKTsKKyAgICAgICAgZ290byBhYm9ydDsKKyAgICB9CisKKyAgICBtX05Q
UF9TaHV0ZG93biA9IHJlaW50ZXJwcmV0X2Nhc3Q8TlBQX1NodXRkb3duUHJvY1B0cj4oZGxzeW0o
bV9tb2R1bGUsICJOUF9TaHV0ZG93biIpKTsKKyAgICBpZiAoKGVycm1zZyA9IGRsZXJyb3IoKSkp
IHsKKyAgICAgICAgRUlOQV9MT0dfRVJSKCJDb3VsZCBub3QgZ2V0IHN5bWJvbCBOUF9TaHV0ZG93
bjogJXMiLCBlcnJtc2cpOworICAgICAgICBnb3RvIGFib3J0OworICAgIH0KKworICAgIG1lbXNl
dCgmbV9wbHVnaW5GdW5jcywgMCwgc2l6ZW9mKG1fcGx1Z2luRnVuY3MpKTsKKyAgICBtX3BsdWdp
bkZ1bmNzLnNpemUgPSBzaXplb2YobV9wbHVnaW5GdW5jcyk7CisKKyAgICBpbml0aWFsaXplQnJv
d3NlckZ1bmNzKCk7CisKKyNpZiBkZWZpbmVkKFhQX1VOSVgpCisgICAgZXJyID0gaW5pdGlhbGl6
ZSgmbV9icm93c2VyRnVuY3MsICZtX3BsdWdpbkZ1bmNzKTsKKyNlbHNlCisgICAgZXJyID0gaW5p
dGlhbGl6ZSgmbV9icm93c2VyRnVuY3MpOworI2VuZGlmCisgICAgaWYgKGVyciAhPSBOUEVSUl9O
T19FUlJPUikKKyAgICAgICAgZ290byBhYm9ydDsKKworICAgIG1fbG9hZENvdW50Kys7CisgICAg
cmV0dXJuIHRydWU7CisKK2Fib3J0OgorICAgIEVJTkFfTE9HX0RCRygiZmFpbGVkIHRvIGxvYWQg
cGx1Z2luLCB1bmxvYWQgaXQgd2l0aG91dCBzaHV0dGluZyBpdCBkb3duLiIpOworICAgIHVubG9h
ZFdpdGhvdXRTaHV0ZG93bigpOworICAgIHJldHVybiBmYWxzZTsKK30KKworfQpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvcGx1Z2lucy9lZmwvUGx1Z2luVmlld0VmbC5jcHAgYi9Tb3VyY2Uv
V2ViQ29yZS9wbHVnaW5zL2VmbC9QbHVnaW5WaWV3RWZsLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0
NAppbmRleCAwMDAwMDAwLi41ODY4MDJjCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNv
cmUvcGx1Z2lucy9lZmwvUGx1Z2luVmlld0VmbC5jcHAKQEAgLTAsMCArMSwzNDMgQEAKKy8qCisg
KiBDb3B5cmlnaHQgKEMpIDIwMDYsIDIwMDcgQXBwbGUgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KKyAqIENvcHlyaWdodCAoQykgMjAwOCBDb2xsYWJvcmEgTHRkLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgorICogQ29weXJpZ2h0IChDKSAyMDA4IElOZFQgLSBJbnN0aXR1dG8gTm9raWEgZGUgVGVj
bm9sb2dpYQorICogQ29weXJpZ2h0IChDKSAyMDA5LTIwMTAgUHJvRlVTSU9OIGVtYmVkZGVkIHN5
c3RlbXMKKyAqIENvcHlyaWdodCAoQykgMjAwOS0yMDExIFNhbXN1bmcgRWxlY3Ryb25pY3MKKyAq
CisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3
aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0
aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJp
YnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Cisg
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXBy
b2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1l
bnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1
dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIENPTVBVVEVS
LCBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElF
UywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5U
SUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQ
VVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgQ09NUFVURVIs
IElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElS
RUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFM
IERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQg
T0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisg
KiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBP
TiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklD
VCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJ
U0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FS
RSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAq
LworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiUGx1Z2luVmlldy5oIgorCisjaW5j
bHVkZSAiRnJhbWUuaCIKKyNpbmNsdWRlICJGcmFtZVZpZXcuaCIKKyNpbmNsdWRlICJHcmFwaGlj
c0NvbnRleHQuaCIKKyNpbmNsdWRlICJIVE1MTmFtZXMuaCIKKyNpbmNsdWRlICJIVE1MUGx1Z0lu
RWxlbWVudC5oIgorI2luY2x1ZGUgIkhvc3RXaW5kb3cuaCIKKyNpbmNsdWRlICJNb3VzZUV2ZW50
LmgiCisjaW5jbHVkZSAiTm90SW1wbGVtZW50ZWQuaCIKKyNpbmNsdWRlICJQbHVnaW5QYWNrYWdl
LmgiCisjaW5jbHVkZSAibnBydW50aW1lX2ltcGwuaCIKKyNpbmNsdWRlICJydW50aW1lL0pTTG9j
ay5oIgorI2luY2x1ZGUgPEVjb3JlX0V2YXMuaD4KKyNpbmNsdWRlIDxFY29yZV9YLmg+CisjaW5j
bHVkZSA8RXZhcy5oPgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK3VzaW5nIG5hbWVzcGFjZSBI
VE1MTmFtZXM7CisKK2Jvb2wgUGx1Z2luVmlldzo6ZGlzcGF0Y2hOUEV2ZW50KE5QRXZlbnQmIGV2
ZW50KQoreworICAgIGlmICghbV9wbHVnaW4tPnBsdWdpbkZ1bmNzKCktPmV2ZW50KQorICAgICAg
ICByZXR1cm4gZmFsc2U7CisKKyAgICBQbHVnaW5WaWV3OjpzZXRDdXJyZW50UGx1Z2luVmlldyh0
aGlzKTsKKyAgICBKU0M6OkpTTG9jazo6RHJvcEFsbExvY2tzIGRyb3BBbGxMb2NrcyhmYWxzZSk7
CisgICAgc2V0Q2FsbGluZ1BsdWdpbih0cnVlKTsKKworICAgIGJvb2wgYWNjZXB0ZWQgPSBtX3Bs
dWdpbi0+cGx1Z2luRnVuY3MoKS0+ZXZlbnQobV9pbnN0YW5jZSwgJmV2ZW50KTsKKworICAgIHNl
dENhbGxpbmdQbHVnaW4oZmFsc2UpOworICAgIFBsdWdpblZpZXc6OnNldEN1cnJlbnRQbHVnaW5W
aWV3KDApOworICAgIHJldHVybiBhY2NlcHRlZDsKK30KKworI2lmIGRlZmluZWQoWFBfVU5JWCkK
K3ZvaWQgUGx1Z2luVmlldzo6aGFuZGxlRm9jdXNJbkV2ZW50KCkKK3sKKyAgICBub3RJbXBsZW1l
bnRlZCgpOworfQorCit2b2lkIFBsdWdpblZpZXc6OmhhbmRsZUZvY3VzT3V0RXZlbnQoKQorewor
ICAgIG5vdEltcGxlbWVudGVkKCk7Cit9CisjZW5kaWYKKwordm9pZCBQbHVnaW5WaWV3OjpoYW5k
bGVLZXlib2FyZEV2ZW50KEtleWJvYXJkRXZlbnQqKQoreworICAgIG5vdEltcGxlbWVudGVkKCk7
Cit9CisKK3ZvaWQgUGx1Z2luVmlldzo6aGFuZGxlTW91c2VFdmVudChNb3VzZUV2ZW50KiBldmVu
dCkKK3sKKyAgICBOUEV2ZW50IHhFdmVudDsKKworI2lmIGRlZmluZWQoWFBfVU5JWCkKKyAgICBj
b25zdCBJbnRSZWN0IHJlY3QgPSBwYXJlbnQoKS0+Y29udGVudHNUb1NjcmVlbihJbnRSZWN0KDAs
IDAsIGV2ZW50LT5vZmZzZXRYKCksIGV2ZW50LT5vZmZzZXRZKCkpKTsKKyAgICBjb25zdCBpbnQg
ZXZlbnRYID0gcmVjdC53aWR0aCgpOworICAgIGNvbnN0IGludCBldmVudFkgPSByZWN0LmhlaWdo
dCgpOworICAgIGlmIChldmVudC0+dHlwZSgpID09IGV2ZW50TmFtZXMoKS5tb3VzZW1vdmVFdmVu
dAorICAgICAgICAgICAgfHwgZXZlbnQtPnR5cGUoKSA9PSBldmVudE5hbWVzKCkubW91c2VvdXRF
dmVudAorICAgICAgICAgICAgfHwgZXZlbnQtPnR5cGUoKSA9PSBldmVudE5hbWVzKCkubW91c2Vv
dmVyRXZlbnQpIHsKKyAgICAgICAgeEV2ZW50LnR5cGUgPSBNb3Rpb25Ob3RpZnk7CisgICAgICAg
IHhFdmVudC54bW90aW9uLnggPSBldmVudFg7CisgICAgICAgIHhFdmVudC54bW90aW9uLnkgPSBl
dmVudFk7CisgICAgfSBlbHNlIGlmIChldmVudC0+dHlwZSgpID09IGV2ZW50TmFtZXMoKS5tb3Vz
ZWRvd25FdmVudCkgeworICAgICAgICB4RXZlbnQudHlwZSA9IEJ1dHRvblByZXNzOworICAgICAg
ICB4RXZlbnQueGJ1dHRvbi54ID0gZXZlbnRYOworICAgICAgICB4RXZlbnQueGJ1dHRvbi55ID0g
ZXZlbnRZOworICAgICAgICB4RXZlbnQueGJ1dHRvbi5idXR0b24gPSBldmVudC0+YnV0dG9uKCkg
KyAxOyAvLyBET00gTW91c2VFdmVudCBjb3VudHMgZnJvbSAwLCBhbmQgWEJ1dHRvbkV2ZW50IGZy
b20gMS4KKyAgICB9IGVsc2UgaWYgKGV2ZW50LT50eXBlKCkgPT0gZXZlbnROYW1lcygpLm1vdXNl
dXBFdmVudCkgeworICAgICAgICB4RXZlbnQudHlwZSA9IEJ1dHRvblJlbGVhc2U7CisgICAgICAg
IHhFdmVudC54YnV0dG9uLnggPSBldmVudFg7CisgICAgICAgIHhFdmVudC54YnV0dG9uLnkgPSBl
dmVudFk7CisgICAgICAgIHhFdmVudC54YnV0dG9uLmJ1dHRvbiA9IGV2ZW50LT5idXR0b24oKSAr
IDE7CisgICAgfSBlbHNlCisgICAgICAgIHJldHVybjsKKyNlbmRpZgorCisgICAgaWYgKGRpc3Bh
dGNoTlBFdmVudCh4RXZlbnQpKQorICAgICAgICBldmVudC0+c2V0RGVmYXVsdEhhbmRsZWQoKTsK
K30KKwordm9pZCBQbHVnaW5WaWV3Ojp1cGRhdGVQbHVnaW5XaWRnZXQoKQoreworICAgIG5vdElt
cGxlbWVudGVkKCk7Cit9CisKK3ZvaWQgUGx1Z2luVmlldzo6c2V0Rm9jdXMoYm9vbCBmb2N1c2Vk
KQoreworICAgIGlmIChmb2N1c2VkKQorICAgICAgICBtX2VsZW1lbnQtPmRvY3VtZW50KCktPnNl
dEZvY3VzZWROb2RlKG1fZWxlbWVudCk7CisKKyAgICBXaWRnZXQ6OnNldEZvY3VzKGZvY3VzZWQp
OworfQorCit2b2lkIFBsdWdpblZpZXc6OnNob3coKQoreworICAgIHNldFNlbGZWaXNpYmxlKHRy
dWUpOworCisgICAgV2lkZ2V0OjpzaG93KCk7Cit9CisKK3ZvaWQgUGx1Z2luVmlldzo6aGlkZSgp
Cit7CisgICAgc2V0U2VsZlZpc2libGUoZmFsc2UpOworCisgICAgV2lkZ2V0OjpoaWRlKCk7Cit9
CisKK3ZvaWQgUGx1Z2luVmlldzo6cGFpbnQoR3JhcGhpY3NDb250ZXh0KiBjb250ZXh0LCBjb25z
dCBJbnRSZWN0JiByZWN0KQoreworICAgIGlmICghbV9pc1N0YXJ0ZWQpCisgICAgICAgIHBhaW50
TWlzc2luZ1BsdWdpbkljb24oY29udGV4dCwgcmVjdCk7Cit9CisKK3ZvaWQgUGx1Z2luVmlldzo6
c2V0UGFyZW50KFNjcm9sbFZpZXcqIHBhcmVudCkKK3sKKyAgICBXaWRnZXQ6OnNldFBhcmVudChw
YXJlbnQpOworCisgICAgaWYgKHBhcmVudCkKKyAgICAgICAgaW5pdCgpOworfQorCit2b2lkIFBs
dWdpblZpZXc6OnNldE5QV2luZG93UmVjdChjb25zdCBJbnRSZWN0JiByZWN0KQoreworICAgIG5v
dEltcGxlbWVudGVkKCk7Cit9CisKK3ZvaWQgUGx1Z2luVmlldzo6c2V0TlBXaW5kb3dJZk5lZWRl
ZCgpCit7Cit9CisKK3ZvaWQgUGx1Z2luVmlldzo6c2V0UGFyZW50VmlzaWJsZShib29sIHZpc2li
bGUpCit7CisgICAgV2lkZ2V0OjpzZXRQYXJlbnRWaXNpYmxlKHZpc2libGUpOworfQorCitOUEVy
cm9yIFBsdWdpblZpZXc6OmhhbmRsZVBvc3RSZWFkRmlsZShWZWN0b3I8Y2hhcj4mIGJ1ZmZlciwg
dWludDMyX3QgbGVuLCBjb25zdCBjaGFyKiBidWYpCit7CisgICAgU3RyaW5nIGZpbGVuYW1lKGJ1
ZiwgbGVuKTsKKworICAgIGlmIChmaWxlbmFtZS5zdGFydHNXaXRoKCJmaWxlOi8vLyIpKQorI2lm
IGRlZmluZWQoWFBfVU5JWCkKKyAgICAgICAgZmlsZW5hbWUgPSBmaWxlbmFtZS5zdWJzdHJpbmco
Nyk7CisjZWxzZQorICAgICAgICBmaWxlbmFtZSA9IGZpbGVuYW1lLnN1YnN0cmluZyg4KTsKKyNl
bmRpZgorCisgICAgbG9uZyBsb25nIHNpemU7CisgICAgaWYgKCFnZXRGaWxlU2l6ZShmaWxlbmFt
ZSwgc2l6ZSkpCisgICAgICAgIHJldHVybiBOUEVSUl9GSUxFX05PVF9GT1VORDsKKworICAgIEZJ
TEUqIGZpbGVIYW5kbGUgPSBmb3BlbihmaWxlbmFtZS51dGY4KCkuZGF0YSgpLCAiciIpOworICAg
IGlmICghZmlsZUhhbmRsZSkKKyAgICAgICAgcmV0dXJuIE5QRVJSX0ZJTEVfTk9UX0ZPVU5EOwor
CisgICAgYnVmZmVyLnJlc2l6ZShzaXplKTsKKyAgICBpbnQgYnl0ZXNSZWFkID0gZnJlYWQoYnVm
ZmVyLmRhdGEoKSwgMSwgc2l6ZSwgZmlsZUhhbmRsZSk7CisKKyAgICBmY2xvc2UoZmlsZUhhbmRs
ZSk7CisKKyAgICBpZiAoYnl0ZXNSZWFkIDw9IDApCisgICAgICAgIHJldHVybiBOUEVSUl9GSUxF
X05PVF9GT1VORDsKKworICAgIHJldHVybiBOUEVSUl9OT19FUlJPUjsKK30KKworYm9vbCBQbHVn
aW5WaWV3OjpwbGF0Zm9ybUdldFZhbHVlU3RhdGljKE5QTlZhcmlhYmxlIHZhcmlhYmxlLCB2b2lk
KiB2YWx1ZSwgTlBFcnJvciogcmVzdWx0KQoreworICAgIHN3aXRjaCAodmFyaWFibGUpIHsKKyAg
ICBjYXNlIE5QTlZUb29sa2l0OgorICAgICAgICAqc3RhdGljX2Nhc3Q8dWludDMyX3QqPih2YWx1
ZSkgPSAwOworICAgICAgICAqcmVzdWx0ID0gTlBFUlJfTk9fRVJST1I7CisgICAgICAgIHJldHVy
biB0cnVlOworCisgICAgY2FzZSBOUE5WU3VwcG9ydHNYRW1iZWRCb29sOgorICAgICAgICAqc3Rh
dGljX2Nhc3Q8TlBCb29sKj4odmFsdWUpID0gZmFsc2U7CisgICAgICAgICpyZXN1bHQgPSBOUEVS
Ul9OT19FUlJPUjsKKyAgICAgICAgcmV0dXJuIHRydWU7CisKKyAgICBjYXNlIE5QTlZqYXZhc2Ny
aXB0RW5hYmxlZEJvb2w6CisgICAgICAgICpzdGF0aWNfY2FzdDxOUEJvb2wqPih2YWx1ZSkgPSB0
cnVlOworICAgICAgICAqcmVzdWx0ID0gTlBFUlJfTk9fRVJST1I7CisgICAgICAgIHJldHVybiB0
cnVlOworCisgICAgY2FzZSBOUE5WU3VwcG9ydHNXaW5kb3dsZXNzOgorICAgICAgICAqc3RhdGlj
X2Nhc3Q8TlBCb29sKj4odmFsdWUpID0gZmFsc2U7CisgICAgICAgICpyZXN1bHQgPSBOUEVSUl9O
T19FUlJPUjsKKyAgICAgICAgcmV0dXJuIHRydWU7CisKKyAgICBkZWZhdWx0OgorICAgICAgICBy
ZXR1cm4gZmFsc2U7CisgICAgfQorfQorCitib29sIFBsdWdpblZpZXc6OnBsYXRmb3JtR2V0VmFs
dWUoTlBOVmFyaWFibGUgdmFyaWFibGUsIHZvaWQqIHZhbHVlLCBOUEVycm9yKiByZXN1bHQpCit7
CisgICAgaWYgKCF2YWx1ZSB8fCAhcmVzdWx0KQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAg
ICBzd2l0Y2ggKHZhcmlhYmxlKSB7CisgICAgY2FzZSBOUE5WeERpc3BsYXk6CisgICAgICAgICpz
dGF0aWNfY2FzdDx2b2lkKio+KHZhbHVlKSA9IHN0YXRpY19jYXN0PERpc3BsYXkqPihlY29yZV94
X2Rpc3BsYXlfZ2V0KCkpOworICAgICAgICAqcmVzdWx0ID0gTlBFUlJfTk9fRVJST1I7CisgICAg
ICAgIHJldHVybiB0cnVlOworCisgICAgY2FzZSBOUE5WeHRBcHBDb250ZXh0OgorICAgICAgICAq
cmVzdWx0ID0gTlBFUlJfR0VORVJJQ19FUlJPUjsKKyAgICAgICAgcmV0dXJuIHRydWU7CisKKyAg
ICBjYXNlIE5QTlZXaW5kb3dOUE9iamVjdDogeworICAgICAgICBpZiAobV9pc0phdmFTY3JpcHRQ
YXVzZWQpIHsKKyAgICAgICAgICAgICpyZXN1bHQgPSBOUEVSUl9HRU5FUklDX0VSUk9SOworICAg
ICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgIH0KKworICAgICAgICBOUE9iamVjdCogd2lu
ZG93U2NyaXB0T2JqZWN0ID0gbV9wYXJlbnRGcmFtZS0+c2NyaXB0KCktPndpbmRvd1NjcmlwdE5Q
T2JqZWN0KCk7CisKKyAgICAgICAgLy8gUmV0dXJuIHZhbHVlIGlzIGV4cGVjdGVkIHRvIGJlIHJl
dGFpbmVkLCBhcyBkZXNjcmliZWQgaGVyZTogPGh0dHA6Ly93d3cubW96aWxsYS5vcmcvcHJvamVj
dHMvcGx1Z2luL25wcnVudGltZS5odG1sPgorICAgICAgICBpZiAod2luZG93U2NyaXB0T2JqZWN0
KQorICAgICAgICAgICAgX05QTl9SZXRhaW5PYmplY3Qod2luZG93U2NyaXB0T2JqZWN0KTsKKwor
ICAgICAgICAqc3RhdGljX2Nhc3Q8dm9pZCoqPih2YWx1ZSkgPSB3aW5kb3dTY3JpcHRPYmplY3Q7
CisKKyAgICAgICAgKnJlc3VsdCA9IE5QRVJSX05PX0VSUk9SOworICAgICAgICByZXR1cm4gdHJ1
ZTsKKyAgICB9CisKKyAgICBjYXNlIE5QTlZQbHVnaW5FbGVtZW50TlBPYmplY3Q6IHsKKyAgICAg
ICAgaWYgKG1faXNKYXZhU2NyaXB0UGF1c2VkKSB7CisgICAgICAgICAgICAqcmVzdWx0ID0gTlBF
UlJfR0VORVJJQ19FUlJPUjsKKyAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICB9CisK
KyAgICAgICAgTlBPYmplY3QqIHBsdWdpblNjcmlwdE9iamVjdCA9IDA7CisKKyAgICAgICAgaWYg
KG1fZWxlbWVudC0+aGFzVGFnTmFtZShhcHBsZXRUYWcpIHx8IG1fZWxlbWVudC0+aGFzVGFnTmFt
ZShlbWJlZFRhZykgfHwgbV9lbGVtZW50LT5oYXNUYWdOYW1lKG9iamVjdFRhZykpCisgICAgICAg
ICAgICBwbHVnaW5TY3JpcHRPYmplY3QgPSBzdGF0aWNfY2FzdDxIVE1MUGx1Z0luRWxlbWVudCo+
KG1fZWxlbWVudCktPmdldE5QT2JqZWN0KCk7CisKKyAgICAgICAgLy8gUmV0dXJuIHZhbHVlIGlz
IGV4cGVjdGVkIHRvIGJlIHJldGFpbmVkLCBhcyBkZXNjcmliZWQgaGVyZTogPGh0dHA6Ly93d3cu
bW96aWxsYS5vcmcvcHJvamVjdHMvcGx1Z2luL25wcnVudGltZS5odG1sPgorICAgICAgICBpZiAo
cGx1Z2luU2NyaXB0T2JqZWN0KQorICAgICAgICAgICAgX05QTl9SZXRhaW5PYmplY3QocGx1Z2lu
U2NyaXB0T2JqZWN0KTsKKworICAgICAgICAqc3RhdGljX2Nhc3Q8dm9pZCoqPih2YWx1ZSkgPSBw
bHVnaW5TY3JpcHRPYmplY3Q7CisKKyAgICAgICAgKnJlc3VsdCA9IE5QRVJSX05PX0VSUk9SOwor
ICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CisKKyAgICBjYXNlIE5QTlZuZXRzY2FwZVdpbmRv
dzogeworICAgICAgICBFdmFzX09iamVjdCogd2lkZ2V0ID0gbV9wYXJlbnRGcmFtZS0+dmlldygp
LT5ob3N0V2luZG93KCktPnBsYXRmb3JtUGFnZUNsaWVudCgpOworICAgICAgICBFdmFzKiBldmFz
ID0gZXZhc19vYmplY3RfZXZhc19nZXQod2lkZ2V0KTsKKyAgICAgICAgRWNvcmVfRXZhcyogZWNv
cmVFdmFzID0gZWNvcmVfZXZhc19lY29yZV9ldmFzX2dldChldmFzKTsKKyAgICAgICAgKnN0YXRp
Y19jYXN0PFhJRCo+KHZhbHVlKSA9IHN0YXRpY19jYXN0PFdpbmRvdz4oZWNvcmVfZXZhc193aW5k
b3dfZ2V0KGVjb3JlRXZhcykpOworICAgICAgICAqcmVzdWx0ID0gTlBFUlJfTk9fRVJST1I7Cisg
ICAgICAgIHJldHVybiB0cnVlOworICAgIH0KKworICAgIGNhc2UgTlBOVlRvb2xraXQ6CisgICAg
ICAgIGlmIChtX3BsdWdpbi0+cXVpcmtzKCkuY29udGFpbnMoUGx1Z2luUXVpcmtSZXF1aXJlc0d0
a1Rvb2xLaXQpKSB7CisgICAgICAgICAgICAqc3RhdGljX2Nhc3Q8dWludDMyX3QqPih2YWx1ZSkg
PSAyOworICAgICAgICAgICAgKnJlc3VsdCA9IE5QRVJSX05PX0VSUk9SOworICAgICAgICAgICAg
cmV0dXJuIHRydWU7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIGRlZmF1
bHQ6CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9Cit9CisKK3ZvaWQgUGx1Z2luVmlldzo6
aW52YWxpZGF0ZVJlY3QoY29uc3QgSW50UmVjdCYgcmVjdCkKK3sKKyAgICBpbnZhbGlkYXRlV2lu
ZG93bGVzc1BsdWdpblJlY3QocmVjdCk7Cit9CisKK3ZvaWQgUGx1Z2luVmlldzo6aW52YWxpZGF0
ZVJlY3QoTlBSZWN0KiByZWN0KQoreworICAgIGlmICghcmVjdCkgeworICAgICAgICBpbnZhbGlk
YXRlKCk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBpbnZhbGlkYXRlUmVjdChJbnRS
ZWN0KHJlY3QtPmxlZnQsIHJlY3QtPnRvcCwgcmVjdC0+cmlnaHQgLSByZWN0LT5sZWZ0LCByZWN0
LT5ib3R0b20gLSByZWN0LT50b3ApKTsKK30KKwordm9pZCBQbHVnaW5WaWV3OjppbnZhbGlkYXRl
UmVnaW9uKE5QUmVnaW9uIHJlZ2lvbikKK3sKKyAgICBub3RJbXBsZW1lbnRlZCgpOworfQorCit2
b2lkIFBsdWdpblZpZXc6OmZvcmNlUmVkcmF3KCkKK3sKKyAgICBub3RJbXBsZW1lbnRlZCgpOwor
fQorCitib29sIFBsdWdpblZpZXc6OnBsYXRmb3JtU3RhcnQoKQoreworICAgIEFTU0VSVChtX2lz
U3RhcnRlZCk7CisgICAgQVNTRVJUKG1fc3RhdHVzID09IFBsdWdpblN0YXR1c0xvYWRlZFN1Y2Nl
c3NmdWxseSk7CisKKyAgICBub3RJbXBsZW1lbnRlZCgpOworICAgIHJldHVybiB0cnVlOworfQor
Cit2b2lkIFBsdWdpblZpZXc6OnBsYXRmb3JtRGVzdHJveSgpCit7Cit9CisKK30gLy8gbmFtZXNw
YWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvZWZsL0NoYW5nZUxvZyBiL1Nv
dXJjZS9XZWJLaXQvZWZsL0NoYW5nZUxvZwppbmRleCBjNGQ0ZmM2Li5mNmVkNTI0IDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViS2l0L2VmbC9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYktpdC9lZmwv
Q2hhbmdlTG9nCkBAIC0xLDMgKzEsMTUgQEAKKzIwMTEtMTItMjIgIE1hcml1c3ogR3J6ZWdvcmN6
eWsgIDxtYXJpdXN6LmdAc2Ftc3VuZy5jb20+CisKKyAgICAgICAgQnVnIDQ0NTA1IC0gW0VGTF0g
TWlzc2luZyBwbHVnaW5zIHN1cHBvcnQgZm9yIGVmbCBwb3J0CisgICAgICAgIGh0dHBzOi8vYnVn
cy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD00NDUwNQorCisgICAgICAgIFJldmlld2VkIGJ5
IEFuZGVycyBDYWxzc29uLgorCisgICAgICAgIEltcGxlbWVudGF0aW9uIG9mIGV3a19mcmFtZV9w
bHVnaW5fY3JlYXRlKCkgLSBjcmVhdGluZyBQbHVnaW5WaWV3LgorCisgICAgICAgICogZXdrL2V3
a19mcmFtZS5jcHA6CisgICAgICAgIChld2tfZnJhbWVfcGx1Z2luX2NyZWF0ZSk6CisKIDIwMTEt
MTItMjEgIE1pY2hhxYIgUGFrdcWCYSB2ZWwgUnV0a2EgIDxtLnBha3VsYUBzYW1zdW5nLmNvbT4K
IAogICAgICAgICBbRUZMXSBBZGQgJ1NlbGVjdCBBbGwnIG9wdGlvbiB0byBjb250ZXh0IG1lbnVz
IGluIFdlYktpdC1FRkwuCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L2VmbC9ld2svZXdrX2Zy
YW1lLmNwcCBiL1NvdXJjZS9XZWJLaXQvZWZsL2V3ay9ld2tfZnJhbWUuY3BwCmluZGV4IGNlMjA4
MTEuLmMzZjRlYzcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvZWZsL2V3ay9ld2tfZnJhbWUu
Y3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvZWZsL2V3ay9ld2tfZnJhbWUuY3BwCkBAIC0xNjc1LDYg
KzE2NzUsMjQgQEAgdm9pZCBld2tfZnJhbWVfZm9yY2VfbGF5b3V0KEV2YXNfT2JqZWN0KiBld2tG
cmFtZSkKICAqLwogV1RGOjpQYXNzUmVmUHRyPFdlYkNvcmU6OldpZGdldD4gZXdrX2ZyYW1lX3Bs
dWdpbl9jcmVhdGUoRXZhc19PYmplY3QqIGV3a0ZyYW1lLCBjb25zdCBXZWJDb3JlOjpJbnRTaXpl
JiBwbHVnaW5TaXplLCBXZWJDb3JlOjpIVE1MUGx1Z0luRWxlbWVudCogZWxlbWVudCwgY29uc3Qg
V2ViQ29yZTo6S1VSTCYgdXJsLCBjb25zdCBXVEY6OlZlY3RvcjxXVEY6OlN0cmluZz4mIHBhcmFt
TmFtZXMsIGNvbnN0IFdURjo6VmVjdG9yPFdURjo6U3RyaW5nPiYgcGFyYW1WYWx1ZXMsIGNvbnN0
IFdURjo6U3RyaW5nJiBtaW1lVHlwZSwgYm9vbCBsb2FkTWFudWFsbHkpCiB7CisjaWYgRU5BQkxF
KE5FVFNDQVBFX1BMVUdJTl9BUEkpCisgICAgREJHKCJld2tGcmFtZT0lcCwgc2l6ZT0lZHglZCwg
ZWxlbWVudD0lcCwgdXJsPSVzLCBtaW1lVHlwZT0lcyIsCisgICAgICAgIGV3a0ZyYW1lLCBwbHVn
aW5TaXplLndpZHRoKCksIHBsdWdpblNpemUuaGVpZ2h0KCksIGVsZW1lbnQsCisgICAgICAgIHVy
bC5zdHJpbmcoKS51dGY4KCkuZGF0YSgpLCBtaW1lVHlwZS51dGY4KCkuZGF0YSgpKTsKKworICAg
IEVXS19GUkFNRV9TRF9HRVRfT1JfUkVUVVJOKGV3a0ZyYW1lLCBzZCwgMCk7CisKKyAgICAvLyBU
T0RPOiBlbWl0IHNpZ25hbCBhbmQgYXNrIHdlYmtpdCB1c2VycyBpZiBzb21ldGhpbmcgZWxzZSBz
aG91bGQgYmUgZG9uZS4KKyAgICAvLyBsaWtlIGNyZWF0aW5nIGFub3RoZXIgeCB3aW5kb3cgKHNl
ZSBndGssIGl0IGFsbG93cyB1c2VycyB0byBjcmVhdGUKKyAgICAvLyBHdGtQbHVnaW5XaWRnZXQu
CisKKyAgICBXVEY6OlJlZlB0cjxXZWJDb3JlOjpQbHVnaW5WaWV3PiBwbHVnaW5WaWV3ID0gV2Vi
Q29yZTo6UGx1Z2luVmlldzo6Y3JlYXRlCisgICAgICAgIChzZC0+ZnJhbWUsIHBsdWdpblNpemUs
IGVsZW1lbnQsIHVybCwgcGFyYW1OYW1lcywgcGFyYW1WYWx1ZXMsCisgICAgICAgIG1pbWVUeXBl
LCBsb2FkTWFudWFsbHkpOworCisgICAgaWYgKHBsdWdpblZpZXctPnN0YXR1cygpID09IFdlYkNv
cmU6OlBsdWdpblN0YXR1c0xvYWRlZFN1Y2Nlc3NmdWxseSkKKyAgICAgICAgcmV0dXJuIHBsdWdp
blZpZXcucmVsZWFzZSgpOworI2VuZGlmIC8vICNpZiBFTkFCTEUoTkVUU0NBUEVfUExVR0lOX0FQ
SSkKICAgICByZXR1cm4gMDsKIH0KIAo=
</data>
<flag name="commit-queue"
          id="120542"
          type_id="3"
          status="-"
          setter="webkit.review.bot"
    />
          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>120306</attachid>
            <date>2011-12-22 04:46:07 -0800</date>
            <delta_ts>2011-12-22 07:39:02 -0800</delta_ts>
            <desc>EFL&apos;s plugin support</desc>
            <filename>efl_plugins.patch</filename>
            <type>text/plain</type>
            <size>25752</size>
            <attacher name="Mariusz Grzegorczyk">mariusz.g</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cgYi9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvQ2hhbmdlTG9nCmluZGV4IDQwNTBlYjMuLmVlYzI5ZGIgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKKysrIGIvU291cmNlL0phdmFTY3JpcHRD
b3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDE0IEBACisyMDExLTEyLTIyICBNYXJpdXN6IEdyemVn
b3JjenlrICA8bWFyaXVzei5nQHNhbXN1bmcuY29tPgorCisgICAgICAgIFtFRkxdIE1pc3Npbmcg
cGx1Z2lucyBzdXBwb3J0IGZvciBlZmwgcG9ydAorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0
Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NDQ1MDUKKworICAgICAgICBSZXZpZXdlZCBieSBBbmRlcnMg
Q2FybHNzb24uCisKKyAgICAgICAgQWRkIGRlZmluZSBvZiBFTkFCTEVfUExVR0lOX1BBQ0tBR0Vf
U0lNUExFX0hBU0ggZm9yIGVmbCBwb3J0LgorCisgICAgICAgICogd3RmL1BsYXRmb3JtLmg6CisK
IDIwMTEtMTItMjEgIERhbiBCZXJuc3RlaW4gIDxtaXR6QGFwcGxlLmNvbT4KIAogICAgICAgICBP
UyBYIGJ1aWxkIGZpeCBhZnRlciByMTAzNDg4LgpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3Jp
cHRDb3JlL3d0Zi9QbGF0Zm9ybS5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3d0Zi9QbGF0Zm9y
bS5oCmluZGV4IDkyNjJjNmUuLmJiMTQ2MmUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS93dGYvUGxhdGZvcm0uaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd3RmL1BsYXRm
b3JtLmgKQEAgLTEwNTksNyArMTA1OSw3IEBACiAjZGVmaW5lIFdURl9VU0VfUFJPVEVDVElPTl9T
UEFDRV9BVVRIX0NBTExCQUNLIDEKICNlbmRpZgogCi0jaWYgIUVOQUJMRShORVRTQ0FQRV9QTFVH
SU5fQVBJKSB8fCAoRU5BQkxFKE5FVFNDQVBFX1BMVUdJTl9BUEkpICYmICgoT1MoVU5JWCkgJiYg
KFBMQVRGT1JNKFFUKSB8fCBQTEFURk9STShXWCkpKSB8fCBQTEFURk9STShHVEspKSkKKyNpZiAh
RU5BQkxFKE5FVFNDQVBFX1BMVUdJTl9BUEkpIHx8IChFTkFCTEUoTkVUU0NBUEVfUExVR0lOX0FQ
SSkgJiYgKChPUyhVTklYKSAmJiAoUExBVEZPUk0oUVQpIHx8IFBMQVRGT1JNKFdYKSkpIHx8IFBM
QVRGT1JNKEdUSykgfHwgUExBVEZPUk0oRUZMKSkpCiAjZGVmaW5lIEVOQUJMRV9QTFVHSU5fUEFD
S0FHRV9TSU1QTEVfSEFTSCAxCiAjZW5kaWYKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
Q2hhbmdlTG9nIGIvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCmluZGV4IDA4MDA5NWYuLjI4MWI0
YjUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZworKysgYi9Tb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cKQEAgLTEsMyArMSw0NyBAQAorMjAxMS0xMi0yMiAgTWFyaXVzeiBHcnpl
Z29yY3p5ayAgPG1hcml1c3ouZ0BzYW1zdW5nLmNvbT4KKworICAgICAgICBbRUZMXSBNaXNzaW5n
IHBsdWdpbnMgc3VwcG9ydCBmb3IgZWZsIHBvcnQKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtp
dC5vcmcvc2hvd19idWcuY2dpP2lkPTQ0NTA1CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgQW5kZXJz
IENhcmxzc29uLgorCisgICAgICAgIEJhc2ljIGZ1bmN0aW9uYWxpdHkgb2YgcGx1Z2lucyBmb3Ig
ZWZsIHBvcnQuCisKKyAgICAgICAgVGVtcGxhdGUgdmVyc2lvbiwgc28gbm8gbmV3IHRlc3RzIGFy
ZSBuZWVkZWQuCisKKyAgICAgICAgKiBQbGF0Zm9ybUVmbC5jbWFrZToKKyAgICAgICAgKiBwbHVn
aW5zL1BsdWdpblZpZXcuaDoKKyAgICAgICAgKiBwbHVnaW5zL2VmbC9QbHVnaW5EYXRhRWZsLmNw
cDogQWRkZWQuIENvcGllZCBmcm9tIHBsdWdpbnMvZ3RrL1BsdWdpbkRhdGFHdGsuY3BwLgorICAg
ICAgICAoV2ViQ29yZTo6UGx1Z2luRGF0YTo6aW5pdFBsdWdpbnMpOiBGaWxsIG1pbWUvZGVzY3Jp
cHRpb24vZXh0ZW5zaW9uIG1hcHMgZm9yIHBsdWdpbnMuCisgICAgICAgIChXZWJDb3JlOjpQbHVn
aW5EYXRhOjpyZWZyZXNoKTogUmVmcmVzaCBwbHVnaW4ncyBkYXRhYmFzZS4KKyAgICAgICAgKiBw
bHVnaW5zL2VmbC9QbHVnaW5QYWNrYWdlRWZsLmNwcDogQWRkZWQuIENvcGllZCBmcm9tIHBsdWdp
bnMvZ3RrL1BsdWdpblBhY2thZ2VHdGsuY3BwLgorICAgICAgICAoV2ViQ29yZTo6UGx1Z2luUGFj
a2FnZTo6ZmV0Y2hJbmZvKTogR2V0IGluZm8gZnJvbSBwbHVnaW4ncyBsaWJyYXJ5IGFib3V0IG5h
bWUgYW5kIG1pbWUgc3VwcG9ydGVkLgorICAgICAgICAoV2ViQ29yZTo6UGx1Z2luUGFja2FnZTo6
TlBWZXJzaW9uKToKKyAgICAgICAgKFdlYkNvcmU6OlBsdWdpblBhY2thZ2U6OmxvYWQpOiBMb2Fk
IHBsdWdpbi4KKyAgICAgICAgKiBwbHVnaW5zL2VmbC9QbHVnaW5WaWV3RWZsLmNwcDogQWRkZWQu
IENvcGllZCBmcm9tIHBsdWdpbnMvZ3RrL1BsdWdpblZpZXdHdGsuY3BwLgorICAgICAgICAoV2Vi
Q29yZTo6UGx1Z2luVmlldzo6ZGlzcGF0Y2hOUEV2ZW50KToKKyAgICAgICAgKFdlYkNvcmU6OlBs
dWdpblZpZXc6OmhhbmRsZUZvY3VzSW5FdmVudCk6CisgICAgICAgIChXZWJDb3JlOjpQbHVnaW5W
aWV3OjpoYW5kbGVGb2N1c091dEV2ZW50KToKKyAgICAgICAgKFdlYkNvcmU6OlBsdWdpblZpZXc6
OmhhbmRsZUtleWJvYXJkRXZlbnQpOgorICAgICAgICAoV2ViQ29yZTo6UGx1Z2luVmlldzo6aGFu
ZGxlTW91c2VFdmVudCk6CisgICAgICAgIChXZWJDb3JlOjpQbHVnaW5WaWV3Ojp1cGRhdGVQbHVn
aW5XaWRnZXQpOgorICAgICAgICAoV2ViQ29yZTo6UGx1Z2luVmlldzo6c2V0Rm9jdXMpOgorICAg
ICAgICAoV2ViQ29yZTo6UGx1Z2luVmlldzo6c2hvdyk6CisgICAgICAgIChXZWJDb3JlOjpQbHVn
aW5WaWV3OjpoaWRlKToKKyAgICAgICAgKFdlYkNvcmU6OlBsdWdpblZpZXc6OnBhaW50KToKKyAg
ICAgICAgKFdlYkNvcmU6OlBsdWdpblZpZXc6OnNldFBhcmVudCk6CisgICAgICAgIChXZWJDb3Jl
OjpQbHVnaW5WaWV3OjpzZXROUFdpbmRvd1JlY3QpOgorICAgICAgICAoV2ViQ29yZTo6UGx1Z2lu
Vmlldzo6c2V0TlBXaW5kb3dJZk5lZWRlZCk6CisgICAgICAgIChXZWJDb3JlOjpQbHVnaW5WaWV3
OjpzZXRQYXJlbnRWaXNpYmxlKToKKyAgICAgICAgKFdlYkNvcmU6OlBsdWdpblZpZXc6OmhhbmRs
ZVBvc3RSZWFkRmlsZSk6CisgICAgICAgIChXZWJDb3JlOjpQbHVnaW5WaWV3OjpwbGF0Zm9ybUdl
dFZhbHVlU3RhdGljKToKKyAgICAgICAgKFdlYkNvcmU6OlBsdWdpblZpZXc6OnBsYXRmb3JtR2V0
VmFsdWUpOgorICAgICAgICAoV2ViQ29yZTo6UGx1Z2luVmlldzo6aW52YWxpZGF0ZVJlY3QpOgor
ICAgICAgICAoV2ViQ29yZTo6UGx1Z2luVmlldzo6aW52YWxpZGF0ZVJlZ2lvbik6CisgICAgICAg
IChXZWJDb3JlOjpQbHVnaW5WaWV3Ojpmb3JjZVJlZHJhdyk6CisgICAgICAgIChXZWJDb3JlOjpQ
bHVnaW5WaWV3OjpwbGF0Zm9ybVN0YXJ0KToKKyAgICAgICAgKFdlYkNvcmU6OlBsdWdpblZpZXc6
OnBsYXRmb3JtRGVzdHJveSk6CisKIDIwMTEtMTItMjIgIEhhbnMgTXVsbGVyICA8aG11bGxlckBh
ZG9iZS5jb20+CiAKICAgICAgICAgT25sb2FkZW5kIGV2ZW50IGlzIG5vdCBzdXBwb3J0ZWQgaW4g
WE1MSHR0cFJlcXVlc3QKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL1BsYXRmb3JtRWZsLmNt
YWtlIGIvU291cmNlL1dlYkNvcmUvUGxhdGZvcm1FZmwuY21ha2UKaW5kZXggMWU2M2IwMi4uYmMy
MzVkNyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvUGxhdGZvcm1FZmwuY21ha2UKKysrIGIv
U291cmNlL1dlYkNvcmUvUGxhdGZvcm1FZmwuY21ha2UKQEAgLTUsMTQgKzUsMTQgQEAgTElTVChB
UFBFTkQgV2ViQ29yZV9MSU5LX0ZMQUdTCiAKIExJU1QoQVBQRU5EIFdlYkNvcmVfSU5DTFVERV9E
SVJFQ1RPUklFUwogICAiJHtKQVZBU0NSSVBUQ09SRV9ESVJ9L3d0Zi9nb2JqZWN0IgorICAiJHtX
RUJDT1JFX0RJUn0vYWNjZXNzaWJpbGl0eS9lZmwiCisgICIke1dFQkNPUkVfRElSfS9wYWdlL2Vm
bCIKICAgIiR7V0VCQ09SRV9ESVJ9L3BsYXRmb3JtL2VmbCIKLSAgIiR7V0VCQ09SRV9ESVJ9L3Bs
YXRmb3JtL3RleHQvZWZsIgogICAiJHtXRUJDT1JFX0RJUn0vcGxhdGZvcm0vZ3JhcGhpY3MvZWZs
IgotICAiJHtXRUJDT1JFX0RJUn0vcGFnZS9lZmwiCi0gICIke1dFQkNPUkVfRElSfS9hY2Nlc3Np
YmlsaXR5L2VmbCIKKyAgIiR7V0VCQ09SRV9ESVJ9L3BsYXRmb3JtL3RleHQvZWZsIgorICAiJHtX
RUJDT1JFX0RJUn0vcGx1Z2lucy9lZmwiCiAgICIke1dFQktJVF9ESVJ9L2VmbC9XZWJDb3JlU3Vw
cG9ydCIKICAgIiR7V0VCS0lUX0RJUn0vZWZsL2V3ayIKLSAgIiR7REVSSVZFRF9TT1VSQ0VTX0RJ
Un0iCiApCiAKIExJU1QoQVBQRU5EIFdlYkNvcmVfU09VUkNFUwpAQCAtNzIsMTEgKzcyLDI4IEBA
IExJU1QoQVBQRU5EIFdlYkNvcmVfU09VUkNFUwogICBwbGF0Zm9ybS9pbWFnZS1kZWNvZGVycy93
ZWJwL1dFQlBJbWFnZURlY29kZXIuY3BwCiAgIHBsYXRmb3JtL3Bvc2l4L0ZpbGVTeXN0ZW1QT1NJ
WC5jcHAKICAgcGxhdGZvcm0vdGV4dC9lZmwvVGV4dEJyZWFrSXRlcmF0b3JJbnRlcm5hbElDVUVm
bC5jcHAKLSAgcGx1Z2lucy9QbHVnaW5EYXRhTm9uZS5jcHAKLSAgcGx1Z2lucy9QbHVnaW5QYWNr
YWdlTm9uZS5jcHAKLSAgcGx1Z2lucy9QbHVnaW5WaWV3Tm9uZS5jcHAKICkKIAorSUYgKEVOQUJM
RV9ORVRTQ0FQRV9QTFVHSU5fQVBJKQorICBMSVNUKEFQUEVORCBXZWJDb3JlX1NPVVJDRVMKKyAg
ICBwbHVnaW5zL1BsdWdpbkRhdGFiYXNlLmNwcAorICAgIHBsdWdpbnMvUGx1Z2luRGVidWcuY3Bw
CisgICAgcGx1Z2lucy9QbHVnaW5QYWNrYWdlLmNwcAorICAgIHBsdWdpbnMvUGx1Z2luU3RyZWFt
LmNwcAorICAgIHBsdWdpbnMvUGx1Z2luVmlldy5jcHAKKworICAgIHBsdWdpbnMvZWZsL1BsdWdp
bkRhdGFFZmwuY3BwCisgICAgcGx1Z2lucy9lZmwvUGx1Z2luUGFja2FnZUVmbC5jcHAKKyAgICBw
bHVnaW5zL2VmbC9QbHVnaW5WaWV3RWZsLmNwcAorICApCitFTFNFICgpCisgIExJU1QoQVBQRU5E
IFdlYkNvcmVfU09VUkNFUworICAgIHBsdWdpbnMvUGx1Z2luRGF0YU5vbmUuY3BwCisgICAgcGx1
Z2lucy9QbHVnaW5QYWNrYWdlTm9uZS5jcHAKKyAgICBwbHVnaW5zL1BsdWdpblZpZXdOb25lLmNw
cAorICApCitFTkRJRiAoKQorCiBMSVNUKEFQUEVORCBXZWJDb3JlX1VTRVJfQUdFTlRfU1RZTEVf
U0hFRVRTCiAgICAgJHtXRUJDT1JFX0RJUn0vY3NzL21lZGlhQ29udHJvbHNFZmwuY3NzCiApCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbHVnaW5zL1BsdWdpblZpZXcuaCBiL1NvdXJjZS9X
ZWJDb3JlL3BsdWdpbnMvUGx1Z2luVmlldy5oCmluZGV4IDQ2NDVlMGIuLmQ5YmY2MWEgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsdWdpbnMvUGx1Z2luVmlldy5oCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL3BsdWdpbnMvUGx1Z2luVmlldy5oCkBAIC0zNzgsNyArMzc4LDcgQEAgbmFtZXNwYWNl
IFdlYkNvcmUgewogICAgICAgICBib29sIG1faGF2ZVVwZGF0ZWRQbHVnaW5XaWRnZXQ7CiAjZW5k
aWYKIAotI2lmICgoUExBVEZPUk0oUVQpIHx8IFBMQVRGT1JNKFdYKSkgJiYgT1MoV0lORE9XUykp
IHx8IGRlZmluZWQoWFBfTUFDT1NYKQorI2lmICgoUExBVEZPUk0oUVQpIHx8IFBMQVRGT1JNKFdY
KSkgJiYgT1MoV0lORE9XUykpIHx8IGRlZmluZWQoWFBfTUFDT1NYKSB8fCBQTEFURk9STShFRkwp
CiAgICAgICAgIC8vIE9uIE1hYyBPU1ggYW5kIFF0L1dpbmRvd3MgdGhlIHBsdWdpbiBkb2VzIG5v
dCBoYXZlIGl0cyBvd24gbmF0aXZlIHdpZGdldCwKICAgICAgICAgLy8gYnV0IGlzIHVzaW5nIHRo
ZSBjb250YWluaW5nIHdpbmRvdyBhcyBpdHMgcmVmZXJlbmNlIGZvciBwb3NpdGlvbmluZy9wYWlu
dGluZy4KICAgICAgICAgUGxhdGZvcm1QbHVnaW5XaWRnZXQgbV93aW5kb3c7CmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9wbHVnaW5zL2VmbC9QbHVnaW5EYXRhRWZsLmNwcCBiL1NvdXJjZS9X
ZWJDb3JlL3BsdWdpbnMvZWZsL1BsdWdpbkRhdGFFZmwuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0
CmluZGV4IDAwMDAwMDAuLmMyMWQ1MWIKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9wbHVnaW5zL2VmbC9QbHVnaW5EYXRhRWZsLmNwcApAQCAtMCwwICsxLDY2IEBACisvKgorICAg
IENvcHlyaWdodCAoQykgMjAwNiwgMjAwNyBBcHBsZSBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVk
LgorICAgIENvcHlyaWdodCAoQykgMjAwOCBUcm9sbHRlY2ggQVNBCisgICAgQ29weXJpZ2h0IChD
KSAyMDA4IENvbGxhYm9yYSBMdGQuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgICAgQ29weXJpZ2h0
IChDKSAyMDA4IElOZFQgLSBJbnN0aXR1dG8gTm9raWEgZGUgVGVjbm9sb2dpYQorICAgIENvcHly
aWdodCAoQykgMjAwOS0yMDEwIFByb0ZVU0lPTiBlbWJlZGRlZCBzeXN0ZW1zCisgICAgQ29weXJp
Z2h0IChDKSAyMDA5LTIwMTEgU2Ftc3VuZyBFbGVjdHJvbmljcworCisgICAgVGhpcyBsaWJyYXJ5
IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICAgIG1v
ZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGlj
CisgICAgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlv
bjsgZWl0aGVyCisgICAgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRp
b24pIGFueSBsYXRlciB2ZXJzaW9uLgorCisgICAgVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVk
IGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgICAgYnV0IFdJVEhPVVQgQU5Z
IFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAgICBNRVJD
SEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhl
IEdOVQorICAgIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxz
LgorCisgICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJh
cnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICAgIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBz
ZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCisgICAgdGhlIEZyZWUg
U29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9v
ciwKKyAgICBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKyovCisKKyNpbmNsdWRlICJjb25m
aWcuaCIKKyNpbmNsdWRlICJQbHVnaW5EYXRhLmgiCisKKyNpbmNsdWRlICJQbHVnaW5EYXRhYmFz
ZS5oIgorI2luY2x1ZGUgIlBsdWdpblBhY2thZ2UuaCIKKworbmFtZXNwYWNlIFdlYkNvcmUgewor
Cit2b2lkIFBsdWdpbkRhdGE6OmluaXRQbHVnaW5zKGNvbnN0IFBhZ2UqKQoreworICAgIGNvbnN0
IFZlY3RvcjxQbHVnaW5QYWNrYWdlKj4mIHBsdWdpbnMgPSBQbHVnaW5EYXRhYmFzZTo6aW5zdGFs
bGVkUGx1Z2lucygpLT5wbHVnaW5zKCk7CisKKyAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IHBs
dWdpbnMuc2l6ZSgpOyArK2kpIHsKKyAgICAgICAgUGx1Z2luUGFja2FnZSogcGFja2FnZSA9IHBs
dWdpbnNbaV07CisgICAgICAgIFBsdWdpbkluZm8gaW5mbzsKKworICAgICAgICBpbmZvLm5hbWUg
PSBwYWNrYWdlLT5uYW1lKCk7CisgICAgICAgIGluZm8uZmlsZSA9IHBhY2thZ2UtPmZpbGVOYW1l
KCk7CisgICAgICAgIGluZm8uZGVzYyA9IHBhY2thZ2UtPmRlc2NyaXB0aW9uKCk7CisKKyAgICAg
ICAgY29uc3QgTUlNRVRvRGVzY3JpcHRpb25zTWFwJiBtaW1lVG9EZXNjcmlwdGlvbnMgPSBwYWNr
YWdlLT5taW1lVG9EZXNjcmlwdGlvbnMoKTsKKyAgICAgICAgTUlNRVRvRGVzY3JpcHRpb25zTWFw
Ojpjb25zdF9pdGVyYXRvciBlbmQgPSBtaW1lVG9EZXNjcmlwdGlvbnMuZW5kKCk7CisgICAgICAg
IGZvciAoTUlNRVRvRGVzY3JpcHRpb25zTWFwOjpjb25zdF9pdGVyYXRvciBpdCA9IG1pbWVUb0Rl
c2NyaXB0aW9ucy5iZWdpbigpOyBpdCAhPSBlbmQ7ICsraXQpIHsKKyAgICAgICAgICAgIE1pbWVD
bGFzc0luZm8gbWltZTsKKworICAgICAgICAgICAgbWltZS50eXBlID0gaXQtPmZpcnN0OworICAg
ICAgICAgICAgbWltZS5kZXNjID0gaXQtPnNlY29uZDsKKyAgICAgICAgICAgIG1pbWUuZXh0ZW5z
aW9ucyA9IHBhY2thZ2UtPm1pbWVUb0V4dGVuc2lvbnMoKS5nZXQobWltZS50eXBlKTsKKworICAg
ICAgICAgICAgaW5mby5taW1lcy5hcHBlbmQobWltZSk7CisgICAgICAgIH0KKworICAgICAgICBt
X3BsdWdpbnMuYXBwZW5kKGluZm8pOworICAgIH0KK30KKwordm9pZCBQbHVnaW5EYXRhOjpyZWZy
ZXNoKCkKK3sKKyAgICBQbHVnaW5EYXRhYmFzZTo6aW5zdGFsbGVkUGx1Z2lucygpLT5yZWZyZXNo
KCk7Cit9CisKK307CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbHVnaW5zL2VmbC9QbHVn
aW5QYWNrYWdlRWZsLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsdWdpbnMvZWZsL1BsdWdpblBhY2th
Z2VFZmwuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmE3YjBhMGIKLS0t
IC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbHVnaW5zL2VmbC9QbHVnaW5QYWNrYWdl
RWZsLmNwcApAQCAtMCwwICsxLDE2OCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwNiwgMjAw
NyBBcHBsZSBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDA4
IENvbGxhYm9yYSBMdGQuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIw
MDggTnVhbnRpIEx0ZC4KKyAqIENvcHlyaWdodCAoQykgMjAwOCBJTmRUIC0gSW5zdGl0dXRvIE5v
a2lhIGRlIFRlY25vbG9naWEKKyAqIENvcHlyaWdodCAoQykgMjAwOS0yMDEwIFByb0ZVU0lPTiBl
bWJlZGRlZCBzeXN0ZW1zCisgKiBDb3B5cmlnaHQgKEMpIDIwMDktMjAxMSBTYW1zdW5nIEVsZWN0
cm9uaWNzCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFy
eSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQg
cHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAx
LiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNv
cHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3Jt
IG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAq
ICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRo
ZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBM
RSBDT01QVVRFUiwgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVE
IFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJ
RUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElD
VUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExF
IENPTVBVVEVSLCBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElS
RUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09O
U0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBS
T0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBE
QVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENB
VVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRS
QUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0Ug
T1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRI
SVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBE
QU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIlBsdWdpblBhY2th
Z2UuaCIKKworI2luY2x1ZGUgIk1JTUVUeXBlUmVnaXN0cnkuaCIKKyNpbmNsdWRlICJOb3RJbXBs
ZW1lbnRlZC5oIgorI2luY2x1ZGUgIlBsdWdpbkRhdGFiYXNlLmgiCisjaW5jbHVkZSAiUGx1Z2lu
RGVidWcuaCIKKyNpbmNsdWRlICJucHJ1bnRpbWVfaW1wbC5oIgorCisjaW5jbHVkZSA8RWluYS5o
PgorI2luY2x1ZGUgPGRsZmNuLmg+CisjaW5jbHVkZSA8d3RmL3RleHQvQ1N0cmluZy5oPgorCitu
YW1lc3BhY2UgV2ViQ29yZSB7CisKK3R5cGVkZWYgY2hhciogKCpOUFBfR2V0TUlNRURlc2NyaXB0
aW9uUHJvY1B0cikoKTsKKworYm9vbCBQbHVnaW5QYWNrYWdlOjpmZXRjaEluZm8oKQoreworICAg
IGNvbnN0IGNoYXIgKmVycm1zZzsKKworICAgIGlmICghbG9hZCgpKQorICAgICAgICByZXR1cm4g
ZmFsc2U7CisKKyAgICBOUFBfR2V0VmFsdWVQcm9jUHRyIGdldFZhbHVlID0gMDsKKyAgICBOUFBf
R2V0TUlNRURlc2NyaXB0aW9uUHJvY1B0ciBnZXRNSU1FRGVzY3JpcHRpb24gPSAwOworCisgICAg
Z2V0VmFsdWUgPSByZWludGVycHJldF9jYXN0PE5QUF9HZXRWYWx1ZVByb2NQdHI+KGRsc3ltKG1f
bW9kdWxlLCAiTlBfR2V0VmFsdWUiKSk7CisgICAgaWYgKChlcnJtc2cgPSBkbGVycm9yKCkpKSB7
CisgICAgICAgIEVJTkFfTE9HX0VSUigiQ291bGQgbm90IGdldCBzeW1ib2wgTlBfR2V0VmFsdWU6
ICVzIiwgZXJybXNnKTsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKworICAgIGdldE1J
TUVEZXNjcmlwdGlvbiA9IHJlaW50ZXJwcmV0X2Nhc3Q8TlBQX0dldE1JTUVEZXNjcmlwdGlvblBy
b2NQdHI+KGRsc3ltKG1fbW9kdWxlLCAiTlBfR2V0TUlNRURlc2NyaXB0aW9uIikpOworICAgIGlm
ICgoZXJybXNnID0gZGxlcnJvcigpKSkgeworICAgICAgICBFSU5BX0xPR19FUlIoIkNvdWxkIG5v
dCBnZXQgc3ltYm9sIE5QX0dldE1JTUVEZXNjcmlwdGlvbjogJXMiLCBlcnJtc2cpOworICAgICAg
ICByZXR1cm4gZmFsc2U7CisgICAgfQorCisgICAgY2hhciogYnVmZmVyID0gMDsKKyAgICBOUEVy
cm9yIGVyciA9IGdldFZhbHVlKDAsIE5QUFZwbHVnaW5OYW1lU3RyaW5nLCBzdGF0aWNfY2FzdDx2
b2lkKj4oJmJ1ZmZlcikpOworICAgIGlmIChlcnIgIT0gTlBFUlJfTk9fRVJST1IpCisgICAgICAg
IHJldHVybiBmYWxzZTsKKyAgICBtX25hbWUgPSBidWZmZXI7CisKKyAgICBidWZmZXIgPSAwOwor
ICAgIGVyciA9IGdldFZhbHVlKDAsIE5QUFZwbHVnaW5EZXNjcmlwdGlvblN0cmluZywgc3RhdGlj
X2Nhc3Q8dm9pZCo+KCZidWZmZXIpKTsKKyAgICBpZiAoZXJyICE9IE5QRVJSX05PX0VSUk9SKQor
ICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgbV9kZXNjcmlwdGlvbiA9IGJ1ZmZlcjsKKyAgICBk
ZXRlcm1pbmVNb2R1bGVWZXJzaW9uRnJvbURlc2NyaXB0aW9uKCk7CisKKyAgICBTdHJpbmcgZGVz
Y3JpcHRpb24gPSBnZXRNSU1FRGVzY3JpcHRpb24oKTsKKworICAgIFZlY3RvcjxTdHJpbmc+IHR5
cGVzOworICAgIGRlc2NyaXB0aW9uLnNwbGl0KFVDaGFyKCc7JyksIGZhbHNlLCB0eXBlcyk7CisK
KyAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IHR5cGVzLnNpemUoKTsgKytpKSB7CisgICAgICAg
IFZlY3RvcjxTdHJpbmc+IG1pbWU7CisgICAgICAgIHR5cGVzW2ldLnNwbGl0KFVDaGFyKCc6Jyks
IHRydWUsIG1pbWUpOworCisgICAgICAgIGlmICghbWltZS5pc0VtcHR5KCkgPiAwKSB7CisgICAg
ICAgICAgICBWZWN0b3I8U3RyaW5nPiBleHRzOworCisgICAgICAgICAgICBpZiAobWltZS5zaXpl
KCkgPiAxKQorICAgICAgICAgICAgICAgIG1pbWVbMV0uc3BsaXQoVUNoYXIoJywnKSwgZmFsc2Us
IGV4dHMpOworCisgICAgICAgICAgICBkZXRlcm1pbmVRdWlya3MobWltZVswXSk7CisgICAgICAg
ICAgICBtX21pbWVUb0V4dGVuc2lvbnMuYWRkKG1pbWVbMF0sIGV4dHMpOworCisgICAgICAgICAg
ICBpZiAobWltZS5zaXplKCkgPiAyKQorICAgICAgICAgICAgICAgIG1fbWltZVRvRGVzY3JpcHRp
b25zLmFkZChtaW1lWzBdLCBtaW1lWzJdKTsKKyAgICAgICAgfQorICAgIH0KKworICAgIHJldHVy
biB0cnVlOworfQorCit1aW50MTZfdCBQbHVnaW5QYWNrYWdlOjpOUFZlcnNpb24oKSBjb25zdAor
eworICAgIHJldHVybiBOUFZFUlNfSEFTX1BMVUdJTl9USFJFQURfQVNZTkNfQ0FMTDsKK30KKwor
Ym9vbCBQbHVnaW5QYWNrYWdlOjpsb2FkKCkKK3sKKyAgICBjaGFyKiBlcnJtc2c7CisKKyAgICBp
ZiAobV9pc0xvYWRlZCkgeworICAgICAgICBtX2xvYWRDb3VudCsrOworICAgICAgICByZXR1cm4g
dHJ1ZTsKKyAgICB9CisKKyAgICBtX21vZHVsZSA9IGRsb3BlbihtX3BhdGgudXRmOCgpLmRhdGEo
KSwgUlRMRF9MQVpZIHwgUlRMRF9MT0NBTCk7CisgICAgaWYgKChlcnJtc2cgPSBkbGVycm9yKCkp
KSB7CisgICAgICAgIEVJTkFfTE9HX1dBUk4oIiVzIG5vdCBsb2FkZWQ6ICVzIiwgbV9wYXRoLnV0
ZjgoKS5kYXRhKCksIGVycm1zZyk7CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisKKyAg
ICBtX2lzTG9hZGVkID0gdHJ1ZTsKKworICAgIE5QX0luaXRpYWxpemVGdW5jUHRyIGluaXRpYWxp
emU7CisgICAgTlBFcnJvciBlcnI7CisKKyAgICBpbml0aWFsaXplID0gcmVpbnRlcnByZXRfY2Fz
dDxOUF9Jbml0aWFsaXplRnVuY1B0cj4oZGxzeW0obV9tb2R1bGUsICJOUF9Jbml0aWFsaXplIikp
OworICAgIGlmICgoZXJybXNnID0gZGxlcnJvcigpKSkgeworICAgICAgICBFSU5BX0xPR19FUlIo
IkNvdWxkIG5vdCBnZXQgc3ltYm9sIE5QX0luaXRpYWxpemU6ICVzIiwgZXJybXNnKTsKKyAgICAg
ICAgZ290byBhYm9ydDsKKyAgICB9CisKKyAgICBtX05QUF9TaHV0ZG93biA9IHJlaW50ZXJwcmV0
X2Nhc3Q8TlBQX1NodXRkb3duUHJvY1B0cj4oZGxzeW0obV9tb2R1bGUsICJOUF9TaHV0ZG93biIp
KTsKKyAgICBpZiAoKGVycm1zZyA9IGRsZXJyb3IoKSkpIHsKKyAgICAgICAgRUlOQV9MT0dfRVJS
KCJDb3VsZCBub3QgZ2V0IHN5bWJvbCBOUF9TaHV0ZG93bjogJXMiLCBlcnJtc2cpOworICAgICAg
ICBnb3RvIGFib3J0OworICAgIH0KKworICAgIG1lbXNldCgmbV9wbHVnaW5GdW5jcywgMCwgc2l6
ZW9mKG1fcGx1Z2luRnVuY3MpKTsKKyAgICBtX3BsdWdpbkZ1bmNzLnNpemUgPSBzaXplb2YobV9w
bHVnaW5GdW5jcyk7CisKKyAgICBpbml0aWFsaXplQnJvd3NlckZ1bmNzKCk7CisKKyNpZiBkZWZp
bmVkKFhQX1VOSVgpCisgICAgZXJyID0gaW5pdGlhbGl6ZSgmbV9icm93c2VyRnVuY3MsICZtX3Bs
dWdpbkZ1bmNzKTsKKyNlbHNlCisgICAgZXJyID0gaW5pdGlhbGl6ZSgmbV9icm93c2VyRnVuY3Mp
OworI2VuZGlmCisgICAgaWYgKGVyciAhPSBOUEVSUl9OT19FUlJPUikKKyAgICAgICAgZ290byBh
Ym9ydDsKKworICAgIG1fbG9hZENvdW50Kys7CisgICAgcmV0dXJuIHRydWU7CisKK2Fib3J0Ogor
ICAgIEVJTkFfTE9HX0RCRygiZmFpbGVkIHRvIGxvYWQgcGx1Z2luLCB1bmxvYWQgaXQgd2l0aG91
dCBzaHV0dGluZyBpdCBkb3duLiIpOworICAgIHVubG9hZFdpdGhvdXRTaHV0ZG93bigpOworICAg
IHJldHVybiBmYWxzZTsKK30KKworfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGx1Z2lu
cy9lZmwvUGx1Z2luVmlld0VmbC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbHVnaW5zL2VmbC9QbHVn
aW5WaWV3RWZsLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41ODY4MDJj
Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvcGx1Z2lucy9lZmwvUGx1Z2luVmll
d0VmbC5jcHAKQEAgLTAsMCArMSwzNDMgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDYsIDIw
MDcgQXBwbGUgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAw
OCBDb2xsYWJvcmEgTHRkLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAy
MDA4IElOZFQgLSBJbnN0aXR1dG8gTm9raWEgZGUgVGVjbm9sb2dpYQorICogQ29weXJpZ2h0IChD
KSAyMDA5LTIwMTAgUHJvRlVTSU9OIGVtYmVkZGVkIHN5c3RlbXMKKyAqIENvcHlyaWdodCAoQykg
MjAwOS0yMDExIFNhbXN1bmcgRWxlY3Ryb25pY3MKKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQg
dXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlm
aWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0
aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBt
dXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3Ry
aWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdo
dAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0
ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRX
QVJFIElTIFBST1ZJREVEIEJZIEFQUExFIENPTVBVVEVSLCBJTkMuIGBgQVMgSVMnJyBBTkQgQU5Z
CisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBB
TkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAg
SU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgQ09NUFVURVIsIElOQy4gT1IKKyAqIENPTlRSSUJVVE9S
UyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFM
LAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBT
RVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJ
TlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFC
SUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAq
IChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBP
VVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRI
RSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgi
CisjaW5jbHVkZSAiUGx1Z2luVmlldy5oIgorCisjaW5jbHVkZSAiRnJhbWUuaCIKKyNpbmNsdWRl
ICJGcmFtZVZpZXcuaCIKKyNpbmNsdWRlICJHcmFwaGljc0NvbnRleHQuaCIKKyNpbmNsdWRlICJI
VE1MTmFtZXMuaCIKKyNpbmNsdWRlICJIVE1MUGx1Z0luRWxlbWVudC5oIgorI2luY2x1ZGUgIkhv
c3RXaW5kb3cuaCIKKyNpbmNsdWRlICJNb3VzZUV2ZW50LmgiCisjaW5jbHVkZSAiTm90SW1wbGVt
ZW50ZWQuaCIKKyNpbmNsdWRlICJQbHVnaW5QYWNrYWdlLmgiCisjaW5jbHVkZSAibnBydW50aW1l
X2ltcGwuaCIKKyNpbmNsdWRlICJydW50aW1lL0pTTG9jay5oIgorI2luY2x1ZGUgPEVjb3JlX0V2
YXMuaD4KKyNpbmNsdWRlIDxFY29yZV9YLmg+CisjaW5jbHVkZSA8RXZhcy5oPgorCituYW1lc3Bh
Y2UgV2ViQ29yZSB7CisKK3VzaW5nIG5hbWVzcGFjZSBIVE1MTmFtZXM7CisKK2Jvb2wgUGx1Z2lu
Vmlldzo6ZGlzcGF0Y2hOUEV2ZW50KE5QRXZlbnQmIGV2ZW50KQoreworICAgIGlmICghbV9wbHVn
aW4tPnBsdWdpbkZ1bmNzKCktPmV2ZW50KQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBQ
bHVnaW5WaWV3OjpzZXRDdXJyZW50UGx1Z2luVmlldyh0aGlzKTsKKyAgICBKU0M6OkpTTG9jazo6
RHJvcEFsbExvY2tzIGRyb3BBbGxMb2NrcyhmYWxzZSk7CisgICAgc2V0Q2FsbGluZ1BsdWdpbih0
cnVlKTsKKworICAgIGJvb2wgYWNjZXB0ZWQgPSBtX3BsdWdpbi0+cGx1Z2luRnVuY3MoKS0+ZXZl
bnQobV9pbnN0YW5jZSwgJmV2ZW50KTsKKworICAgIHNldENhbGxpbmdQbHVnaW4oZmFsc2UpOwor
ICAgIFBsdWdpblZpZXc6OnNldEN1cnJlbnRQbHVnaW5WaWV3KDApOworICAgIHJldHVybiBhY2Nl
cHRlZDsKK30KKworI2lmIGRlZmluZWQoWFBfVU5JWCkKK3ZvaWQgUGx1Z2luVmlldzo6aGFuZGxl
Rm9jdXNJbkV2ZW50KCkKK3sKKyAgICBub3RJbXBsZW1lbnRlZCgpOworfQorCit2b2lkIFBsdWdp
blZpZXc6OmhhbmRsZUZvY3VzT3V0RXZlbnQoKQoreworICAgIG5vdEltcGxlbWVudGVkKCk7Cit9
CisjZW5kaWYKKwordm9pZCBQbHVnaW5WaWV3OjpoYW5kbGVLZXlib2FyZEV2ZW50KEtleWJvYXJk
RXZlbnQqKQoreworICAgIG5vdEltcGxlbWVudGVkKCk7Cit9CisKK3ZvaWQgUGx1Z2luVmlldzo6
aGFuZGxlTW91c2VFdmVudChNb3VzZUV2ZW50KiBldmVudCkKK3sKKyAgICBOUEV2ZW50IHhFdmVu
dDsKKworI2lmIGRlZmluZWQoWFBfVU5JWCkKKyAgICBjb25zdCBJbnRSZWN0IHJlY3QgPSBwYXJl
bnQoKS0+Y29udGVudHNUb1NjcmVlbihJbnRSZWN0KDAsIDAsIGV2ZW50LT5vZmZzZXRYKCksIGV2
ZW50LT5vZmZzZXRZKCkpKTsKKyAgICBjb25zdCBpbnQgZXZlbnRYID0gcmVjdC53aWR0aCgpOwor
ICAgIGNvbnN0IGludCBldmVudFkgPSByZWN0LmhlaWdodCgpOworICAgIGlmIChldmVudC0+dHlw
ZSgpID09IGV2ZW50TmFtZXMoKS5tb3VzZW1vdmVFdmVudAorICAgICAgICAgICAgfHwgZXZlbnQt
PnR5cGUoKSA9PSBldmVudE5hbWVzKCkubW91c2VvdXRFdmVudAorICAgICAgICAgICAgfHwgZXZl
bnQtPnR5cGUoKSA9PSBldmVudE5hbWVzKCkubW91c2VvdmVyRXZlbnQpIHsKKyAgICAgICAgeEV2
ZW50LnR5cGUgPSBNb3Rpb25Ob3RpZnk7CisgICAgICAgIHhFdmVudC54bW90aW9uLnggPSBldmVu
dFg7CisgICAgICAgIHhFdmVudC54bW90aW9uLnkgPSBldmVudFk7CisgICAgfSBlbHNlIGlmIChl
dmVudC0+dHlwZSgpID09IGV2ZW50TmFtZXMoKS5tb3VzZWRvd25FdmVudCkgeworICAgICAgICB4
RXZlbnQudHlwZSA9IEJ1dHRvblByZXNzOworICAgICAgICB4RXZlbnQueGJ1dHRvbi54ID0gZXZl
bnRYOworICAgICAgICB4RXZlbnQueGJ1dHRvbi55ID0gZXZlbnRZOworICAgICAgICB4RXZlbnQu
eGJ1dHRvbi5idXR0b24gPSBldmVudC0+YnV0dG9uKCkgKyAxOyAvLyBET00gTW91c2VFdmVudCBj
b3VudHMgZnJvbSAwLCBhbmQgWEJ1dHRvbkV2ZW50IGZyb20gMS4KKyAgICB9IGVsc2UgaWYgKGV2
ZW50LT50eXBlKCkgPT0gZXZlbnROYW1lcygpLm1vdXNldXBFdmVudCkgeworICAgICAgICB4RXZl
bnQudHlwZSA9IEJ1dHRvblJlbGVhc2U7CisgICAgICAgIHhFdmVudC54YnV0dG9uLnggPSBldmVu
dFg7CisgICAgICAgIHhFdmVudC54YnV0dG9uLnkgPSBldmVudFk7CisgICAgICAgIHhFdmVudC54
YnV0dG9uLmJ1dHRvbiA9IGV2ZW50LT5idXR0b24oKSArIDE7CisgICAgfSBlbHNlCisgICAgICAg
IHJldHVybjsKKyNlbmRpZgorCisgICAgaWYgKGRpc3BhdGNoTlBFdmVudCh4RXZlbnQpKQorICAg
ICAgICBldmVudC0+c2V0RGVmYXVsdEhhbmRsZWQoKTsKK30KKwordm9pZCBQbHVnaW5WaWV3Ojp1
cGRhdGVQbHVnaW5XaWRnZXQoKQoreworICAgIG5vdEltcGxlbWVudGVkKCk7Cit9CisKK3ZvaWQg
UGx1Z2luVmlldzo6c2V0Rm9jdXMoYm9vbCBmb2N1c2VkKQoreworICAgIGlmIChmb2N1c2VkKQor
ICAgICAgICBtX2VsZW1lbnQtPmRvY3VtZW50KCktPnNldEZvY3VzZWROb2RlKG1fZWxlbWVudCk7
CisKKyAgICBXaWRnZXQ6OnNldEZvY3VzKGZvY3VzZWQpOworfQorCit2b2lkIFBsdWdpblZpZXc6
OnNob3coKQoreworICAgIHNldFNlbGZWaXNpYmxlKHRydWUpOworCisgICAgV2lkZ2V0OjpzaG93
KCk7Cit9CisKK3ZvaWQgUGx1Z2luVmlldzo6aGlkZSgpCit7CisgICAgc2V0U2VsZlZpc2libGUo
ZmFsc2UpOworCisgICAgV2lkZ2V0OjpoaWRlKCk7Cit9CisKK3ZvaWQgUGx1Z2luVmlldzo6cGFp
bnQoR3JhcGhpY3NDb250ZXh0KiBjb250ZXh0LCBjb25zdCBJbnRSZWN0JiByZWN0KQoreworICAg
IGlmICghbV9pc1N0YXJ0ZWQpCisgICAgICAgIHBhaW50TWlzc2luZ1BsdWdpbkljb24oY29udGV4
dCwgcmVjdCk7Cit9CisKK3ZvaWQgUGx1Z2luVmlldzo6c2V0UGFyZW50KFNjcm9sbFZpZXcqIHBh
cmVudCkKK3sKKyAgICBXaWRnZXQ6OnNldFBhcmVudChwYXJlbnQpOworCisgICAgaWYgKHBhcmVu
dCkKKyAgICAgICAgaW5pdCgpOworfQorCit2b2lkIFBsdWdpblZpZXc6OnNldE5QV2luZG93UmVj
dChjb25zdCBJbnRSZWN0JiByZWN0KQoreworICAgIG5vdEltcGxlbWVudGVkKCk7Cit9CisKK3Zv
aWQgUGx1Z2luVmlldzo6c2V0TlBXaW5kb3dJZk5lZWRlZCgpCit7Cit9CisKK3ZvaWQgUGx1Z2lu
Vmlldzo6c2V0UGFyZW50VmlzaWJsZShib29sIHZpc2libGUpCit7CisgICAgV2lkZ2V0OjpzZXRQ
YXJlbnRWaXNpYmxlKHZpc2libGUpOworfQorCitOUEVycm9yIFBsdWdpblZpZXc6OmhhbmRsZVBv
c3RSZWFkRmlsZShWZWN0b3I8Y2hhcj4mIGJ1ZmZlciwgdWludDMyX3QgbGVuLCBjb25zdCBjaGFy
KiBidWYpCit7CisgICAgU3RyaW5nIGZpbGVuYW1lKGJ1ZiwgbGVuKTsKKworICAgIGlmIChmaWxl
bmFtZS5zdGFydHNXaXRoKCJmaWxlOi8vLyIpKQorI2lmIGRlZmluZWQoWFBfVU5JWCkKKyAgICAg
ICAgZmlsZW5hbWUgPSBmaWxlbmFtZS5zdWJzdHJpbmcoNyk7CisjZWxzZQorICAgICAgICBmaWxl
bmFtZSA9IGZpbGVuYW1lLnN1YnN0cmluZyg4KTsKKyNlbmRpZgorCisgICAgbG9uZyBsb25nIHNp
emU7CisgICAgaWYgKCFnZXRGaWxlU2l6ZShmaWxlbmFtZSwgc2l6ZSkpCisgICAgICAgIHJldHVy
biBOUEVSUl9GSUxFX05PVF9GT1VORDsKKworICAgIEZJTEUqIGZpbGVIYW5kbGUgPSBmb3Blbihm
aWxlbmFtZS51dGY4KCkuZGF0YSgpLCAiciIpOworICAgIGlmICghZmlsZUhhbmRsZSkKKyAgICAg
ICAgcmV0dXJuIE5QRVJSX0ZJTEVfTk9UX0ZPVU5EOworCisgICAgYnVmZmVyLnJlc2l6ZShzaXpl
KTsKKyAgICBpbnQgYnl0ZXNSZWFkID0gZnJlYWQoYnVmZmVyLmRhdGEoKSwgMSwgc2l6ZSwgZmls
ZUhhbmRsZSk7CisKKyAgICBmY2xvc2UoZmlsZUhhbmRsZSk7CisKKyAgICBpZiAoYnl0ZXNSZWFk
IDw9IDApCisgICAgICAgIHJldHVybiBOUEVSUl9GSUxFX05PVF9GT1VORDsKKworICAgIHJldHVy
biBOUEVSUl9OT19FUlJPUjsKK30KKworYm9vbCBQbHVnaW5WaWV3OjpwbGF0Zm9ybUdldFZhbHVl
U3RhdGljKE5QTlZhcmlhYmxlIHZhcmlhYmxlLCB2b2lkKiB2YWx1ZSwgTlBFcnJvciogcmVzdWx0
KQoreworICAgIHN3aXRjaCAodmFyaWFibGUpIHsKKyAgICBjYXNlIE5QTlZUb29sa2l0OgorICAg
ICAgICAqc3RhdGljX2Nhc3Q8dWludDMyX3QqPih2YWx1ZSkgPSAwOworICAgICAgICAqcmVzdWx0
ID0gTlBFUlJfTk9fRVJST1I7CisgICAgICAgIHJldHVybiB0cnVlOworCisgICAgY2FzZSBOUE5W
U3VwcG9ydHNYRW1iZWRCb29sOgorICAgICAgICAqc3RhdGljX2Nhc3Q8TlBCb29sKj4odmFsdWUp
ID0gZmFsc2U7CisgICAgICAgICpyZXN1bHQgPSBOUEVSUl9OT19FUlJPUjsKKyAgICAgICAgcmV0
dXJuIHRydWU7CisKKyAgICBjYXNlIE5QTlZqYXZhc2NyaXB0RW5hYmxlZEJvb2w6CisgICAgICAg
ICpzdGF0aWNfY2FzdDxOUEJvb2wqPih2YWx1ZSkgPSB0cnVlOworICAgICAgICAqcmVzdWx0ID0g
TlBFUlJfTk9fRVJST1I7CisgICAgICAgIHJldHVybiB0cnVlOworCisgICAgY2FzZSBOUE5WU3Vw
cG9ydHNXaW5kb3dsZXNzOgorICAgICAgICAqc3RhdGljX2Nhc3Q8TlBCb29sKj4odmFsdWUpID0g
ZmFsc2U7CisgICAgICAgICpyZXN1bHQgPSBOUEVSUl9OT19FUlJPUjsKKyAgICAgICAgcmV0dXJu
IHRydWU7CisKKyAgICBkZWZhdWx0OgorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorfQor
Citib29sIFBsdWdpblZpZXc6OnBsYXRmb3JtR2V0VmFsdWUoTlBOVmFyaWFibGUgdmFyaWFibGUs
IHZvaWQqIHZhbHVlLCBOUEVycm9yKiByZXN1bHQpCit7CisgICAgaWYgKCF2YWx1ZSB8fCAhcmVz
dWx0KQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBzd2l0Y2ggKHZhcmlhYmxlKSB7Cisg
ICAgY2FzZSBOUE5WeERpc3BsYXk6CisgICAgICAgICpzdGF0aWNfY2FzdDx2b2lkKio+KHZhbHVl
KSA9IHN0YXRpY19jYXN0PERpc3BsYXkqPihlY29yZV94X2Rpc3BsYXlfZ2V0KCkpOworICAgICAg
ICAqcmVzdWx0ID0gTlBFUlJfTk9fRVJST1I7CisgICAgICAgIHJldHVybiB0cnVlOworCisgICAg
Y2FzZSBOUE5WeHRBcHBDb250ZXh0OgorICAgICAgICAqcmVzdWx0ID0gTlBFUlJfR0VORVJJQ19F
UlJPUjsKKyAgICAgICAgcmV0dXJuIHRydWU7CisKKyAgICBjYXNlIE5QTlZXaW5kb3dOUE9iamVj
dDogeworICAgICAgICBpZiAobV9pc0phdmFTY3JpcHRQYXVzZWQpIHsKKyAgICAgICAgICAgICpy
ZXN1bHQgPSBOUEVSUl9HRU5FUklDX0VSUk9SOworICAgICAgICAgICAgcmV0dXJuIHRydWU7Cisg
ICAgICAgIH0KKworICAgICAgICBOUE9iamVjdCogd2luZG93U2NyaXB0T2JqZWN0ID0gbV9wYXJl
bnRGcmFtZS0+c2NyaXB0KCktPndpbmRvd1NjcmlwdE5QT2JqZWN0KCk7CisKKyAgICAgICAgLy8g
UmV0dXJuIHZhbHVlIGlzIGV4cGVjdGVkIHRvIGJlIHJldGFpbmVkLCBhcyBkZXNjcmliZWQgaGVy
ZTogPGh0dHA6Ly93d3cubW96aWxsYS5vcmcvcHJvamVjdHMvcGx1Z2luL25wcnVudGltZS5odG1s
PgorICAgICAgICBpZiAod2luZG93U2NyaXB0T2JqZWN0KQorICAgICAgICAgICAgX05QTl9SZXRh
aW5PYmplY3Qod2luZG93U2NyaXB0T2JqZWN0KTsKKworICAgICAgICAqc3RhdGljX2Nhc3Q8dm9p
ZCoqPih2YWx1ZSkgPSB3aW5kb3dTY3JpcHRPYmplY3Q7CisKKyAgICAgICAgKnJlc3VsdCA9IE5Q
RVJSX05PX0VSUk9SOworICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CisKKyAgICBjYXNlIE5Q
TlZQbHVnaW5FbGVtZW50TlBPYmplY3Q6IHsKKyAgICAgICAgaWYgKG1faXNKYXZhU2NyaXB0UGF1
c2VkKSB7CisgICAgICAgICAgICAqcmVzdWx0ID0gTlBFUlJfR0VORVJJQ19FUlJPUjsKKyAgICAg
ICAgICAgIHJldHVybiB0cnVlOworICAgICAgICB9CisKKyAgICAgICAgTlBPYmplY3QqIHBsdWdp
blNjcmlwdE9iamVjdCA9IDA7CisKKyAgICAgICAgaWYgKG1fZWxlbWVudC0+aGFzVGFnTmFtZShh
cHBsZXRUYWcpIHx8IG1fZWxlbWVudC0+aGFzVGFnTmFtZShlbWJlZFRhZykgfHwgbV9lbGVtZW50
LT5oYXNUYWdOYW1lKG9iamVjdFRhZykpCisgICAgICAgICAgICBwbHVnaW5TY3JpcHRPYmplY3Qg
PSBzdGF0aWNfY2FzdDxIVE1MUGx1Z0luRWxlbWVudCo+KG1fZWxlbWVudCktPmdldE5QT2JqZWN0
KCk7CisKKyAgICAgICAgLy8gUmV0dXJuIHZhbHVlIGlzIGV4cGVjdGVkIHRvIGJlIHJldGFpbmVk
LCBhcyBkZXNjcmliZWQgaGVyZTogPGh0dHA6Ly93d3cubW96aWxsYS5vcmcvcHJvamVjdHMvcGx1
Z2luL25wcnVudGltZS5odG1sPgorICAgICAgICBpZiAocGx1Z2luU2NyaXB0T2JqZWN0KQorICAg
ICAgICAgICAgX05QTl9SZXRhaW5PYmplY3QocGx1Z2luU2NyaXB0T2JqZWN0KTsKKworICAgICAg
ICAqc3RhdGljX2Nhc3Q8dm9pZCoqPih2YWx1ZSkgPSBwbHVnaW5TY3JpcHRPYmplY3Q7CisKKyAg
ICAgICAgKnJlc3VsdCA9IE5QRVJSX05PX0VSUk9SOworICAgICAgICByZXR1cm4gdHJ1ZTsKKyAg
ICB9CisKKyAgICBjYXNlIE5QTlZuZXRzY2FwZVdpbmRvdzogeworICAgICAgICBFdmFzX09iamVj
dCogd2lkZ2V0ID0gbV9wYXJlbnRGcmFtZS0+dmlldygpLT5ob3N0V2luZG93KCktPnBsYXRmb3Jt
UGFnZUNsaWVudCgpOworICAgICAgICBFdmFzKiBldmFzID0gZXZhc19vYmplY3RfZXZhc19nZXQo
d2lkZ2V0KTsKKyAgICAgICAgRWNvcmVfRXZhcyogZWNvcmVFdmFzID0gZWNvcmVfZXZhc19lY29y
ZV9ldmFzX2dldChldmFzKTsKKyAgICAgICAgKnN0YXRpY19jYXN0PFhJRCo+KHZhbHVlKSA9IHN0
YXRpY19jYXN0PFdpbmRvdz4oZWNvcmVfZXZhc193aW5kb3dfZ2V0KGVjb3JlRXZhcykpOworICAg
ICAgICAqcmVzdWx0ID0gTlBFUlJfTk9fRVJST1I7CisgICAgICAgIHJldHVybiB0cnVlOworICAg
IH0KKworICAgIGNhc2UgTlBOVlRvb2xraXQ6CisgICAgICAgIGlmIChtX3BsdWdpbi0+cXVpcmtz
KCkuY29udGFpbnMoUGx1Z2luUXVpcmtSZXF1aXJlc0d0a1Rvb2xLaXQpKSB7CisgICAgICAgICAg
ICAqc3RhdGljX2Nhc3Q8dWludDMyX3QqPih2YWx1ZSkgPSAyOworICAgICAgICAgICAgKnJlc3Vs
dCA9IE5QRVJSX05PX0VSUk9SOworICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgIH0K
KyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIGRlZmF1bHQ6CisgICAgICAgIHJldHVybiBmYWxz
ZTsKKyAgICB9Cit9CisKK3ZvaWQgUGx1Z2luVmlldzo6aW52YWxpZGF0ZVJlY3QoY29uc3QgSW50
UmVjdCYgcmVjdCkKK3sKKyAgICBpbnZhbGlkYXRlV2luZG93bGVzc1BsdWdpblJlY3QocmVjdCk7
Cit9CisKK3ZvaWQgUGx1Z2luVmlldzo6aW52YWxpZGF0ZVJlY3QoTlBSZWN0KiByZWN0KQorewor
ICAgIGlmICghcmVjdCkgeworICAgICAgICBpbnZhbGlkYXRlKCk7CisgICAgICAgIHJldHVybjsK
KyAgICB9CisKKyAgICBpbnZhbGlkYXRlUmVjdChJbnRSZWN0KHJlY3QtPmxlZnQsIHJlY3QtPnRv
cCwgcmVjdC0+cmlnaHQgLSByZWN0LT5sZWZ0LCByZWN0LT5ib3R0b20gLSByZWN0LT50b3ApKTsK
K30KKwordm9pZCBQbHVnaW5WaWV3OjppbnZhbGlkYXRlUmVnaW9uKE5QUmVnaW9uIHJlZ2lvbikK
K3sKKyAgICBub3RJbXBsZW1lbnRlZCgpOworfQorCit2b2lkIFBsdWdpblZpZXc6OmZvcmNlUmVk
cmF3KCkKK3sKKyAgICBub3RJbXBsZW1lbnRlZCgpOworfQorCitib29sIFBsdWdpblZpZXc6OnBs
YXRmb3JtU3RhcnQoKQoreworICAgIEFTU0VSVChtX2lzU3RhcnRlZCk7CisgICAgQVNTRVJUKG1f
c3RhdHVzID09IFBsdWdpblN0YXR1c0xvYWRlZFN1Y2Nlc3NmdWxseSk7CisKKyAgICBub3RJbXBs
ZW1lbnRlZCgpOworICAgIHJldHVybiB0cnVlOworfQorCit2b2lkIFBsdWdpblZpZXc6OnBsYXRm
b3JtRGVzdHJveSgpCit7Cit9CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJLaXQvZWZsL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJLaXQvZWZsL0NoYW5nZUxv
ZwppbmRleCBjNGQ0ZmM2Li45MzMwNDE4IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L2VmbC9D
aGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYktpdC9lZmwvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTUg
QEAKKzIwMTEtMTItMjIgIE1hcml1c3ogR3J6ZWdvcmN6eWsgIDxtYXJpdXN6LmdAc2Ftc3VuZy5j
b20+CisKKyAgICAgICAgW0VGTF0gTWlzc2luZyBwbHVnaW5zIHN1cHBvcnQgZm9yIGVmbCBwb3J0
CisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD00NDUwNQor
CisgICAgICAgIFJldmlld2VkIGJ5IEFuZGVycyBDYXJsc3Nvbi4KKworICAgICAgICBJbXBsZW1l
bnRhdGlvbiBvZiBld2tfZnJhbWVfcGx1Z2luX2NyZWF0ZSgpIC0gY3JlYXRpbmcgUGx1Z2luVmll
dy4KKworICAgICAgICAqIGV3ay9ld2tfZnJhbWUuY3BwOgorICAgICAgICAoZXdrX2ZyYW1lX3Bs
dWdpbl9jcmVhdGUpOgorCiAyMDExLTEyLTIxICBNaWNoYcWCIFBha3XFgmEgdmVsIFJ1dGthICA8
bS5wYWt1bGFAc2Ftc3VuZy5jb20+CiAKICAgICAgICAgW0VGTF0gQWRkICdTZWxlY3QgQWxsJyBv
cHRpb24gdG8gY29udGV4dCBtZW51cyBpbiBXZWJLaXQtRUZMLgpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYktpdC9lZmwvZXdrL2V3a19mcmFtZS5jcHAgYi9Tb3VyY2UvV2ViS2l0L2VmbC9ld2svZXdr
X2ZyYW1lLmNwcAppbmRleCBjZTIwODExLi5jM2Y0ZWM3IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
S2l0L2VmbC9ld2svZXdrX2ZyYW1lLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0L2VmbC9ld2svZXdr
X2ZyYW1lLmNwcApAQCAtMTY3NSw2ICsxNjc1LDI0IEBAIHZvaWQgZXdrX2ZyYW1lX2ZvcmNlX2xh
eW91dChFdmFzX09iamVjdCogZXdrRnJhbWUpCiAgKi8KIFdURjo6UGFzc1JlZlB0cjxXZWJDb3Jl
OjpXaWRnZXQ+IGV3a19mcmFtZV9wbHVnaW5fY3JlYXRlKEV2YXNfT2JqZWN0KiBld2tGcmFtZSwg
Y29uc3QgV2ViQ29yZTo6SW50U2l6ZSYgcGx1Z2luU2l6ZSwgV2ViQ29yZTo6SFRNTFBsdWdJbkVs
ZW1lbnQqIGVsZW1lbnQsIGNvbnN0IFdlYkNvcmU6OktVUkwmIHVybCwgY29uc3QgV1RGOjpWZWN0
b3I8V1RGOjpTdHJpbmc+JiBwYXJhbU5hbWVzLCBjb25zdCBXVEY6OlZlY3RvcjxXVEY6OlN0cmlu
Zz4mIHBhcmFtVmFsdWVzLCBjb25zdCBXVEY6OlN0cmluZyYgbWltZVR5cGUsIGJvb2wgbG9hZE1h
bnVhbGx5KQogeworI2lmIEVOQUJMRShORVRTQ0FQRV9QTFVHSU5fQVBJKQorICAgIERCRygiZXdr
RnJhbWU9JXAsIHNpemU9JWR4JWQsIGVsZW1lbnQ9JXAsIHVybD0lcywgbWltZVR5cGU9JXMiLAor
ICAgICAgICBld2tGcmFtZSwgcGx1Z2luU2l6ZS53aWR0aCgpLCBwbHVnaW5TaXplLmhlaWdodCgp
LCBlbGVtZW50LAorICAgICAgICB1cmwuc3RyaW5nKCkudXRmOCgpLmRhdGEoKSwgbWltZVR5cGUu
dXRmOCgpLmRhdGEoKSk7CisKKyAgICBFV0tfRlJBTUVfU0RfR0VUX09SX1JFVFVSTihld2tGcmFt
ZSwgc2QsIDApOworCisgICAgLy8gVE9ETzogZW1pdCBzaWduYWwgYW5kIGFzayB3ZWJraXQgdXNl
cnMgaWYgc29tZXRoaW5nIGVsc2Ugc2hvdWxkIGJlIGRvbmUuCisgICAgLy8gbGlrZSBjcmVhdGlu
ZyBhbm90aGVyIHggd2luZG93IChzZWUgZ3RrLCBpdCBhbGxvd3MgdXNlcnMgdG8gY3JlYXRlCisg
ICAgLy8gR3RrUGx1Z2luV2lkZ2V0LgorCisgICAgV1RGOjpSZWZQdHI8V2ViQ29yZTo6UGx1Z2lu
Vmlldz4gcGx1Z2luVmlldyA9IFdlYkNvcmU6OlBsdWdpblZpZXc6OmNyZWF0ZQorICAgICAgICAo
c2QtPmZyYW1lLCBwbHVnaW5TaXplLCBlbGVtZW50LCB1cmwsIHBhcmFtTmFtZXMsIHBhcmFtVmFs
dWVzLAorICAgICAgICBtaW1lVHlwZSwgbG9hZE1hbnVhbGx5KTsKKworICAgIGlmIChwbHVnaW5W
aWV3LT5zdGF0dXMoKSA9PSBXZWJDb3JlOjpQbHVnaW5TdGF0dXNMb2FkZWRTdWNjZXNzZnVsbHkp
CisgICAgICAgIHJldHVybiBwbHVnaW5WaWV3LnJlbGVhc2UoKTsKKyNlbmRpZiAvLyAjaWYgRU5B
QkxFKE5FVFNDQVBFX1BMVUdJTl9BUEkpCiAgICAgcmV0dXJuIDA7CiB9CiAK
</data>

          </attachment>
      

    </bug>

</bugzilla>