<?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>92345</bug_id>
          
          <creation_ts>2012-07-26 00:39:08 -0700</creation_ts>
          <short_desc>[EFL][WK2] Add back forward list API</short_desc>
          <delta_ts>2012-08-07 03:46:38 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>WebKit EFL</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</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>61838</blocked>
    
    <blocked>92617</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Mikhail Pozdnyakov">mikhail.pozdnyakov</reporter>
          <assigned_to name="Mikhail Pozdnyakov">mikhail.pozdnyakov</assigned_to>
          <cc>cdumez</cc>
    
    <cc>gyuyoung.kim</cc>
    
    <cc>hausmann</cc>
    
    <cc>kenneth</cc>
    
    <cc>lucas.de.marchi</cc>
    
    <cc>rakuco</cc>
    
    <cc>tonikitoo</cc>
    
    <cc>webkit.review.bot</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>678960</commentid>
    <comment_count>0</comment_count>
    <who name="Mikhail Pozdnyakov">mikhail.pozdnyakov</who>
    <bug_when>2012-07-26 00:39:08 -0700</bug_when>
    <thetext>Back forward list API is missing in EFL WK2 and should be added.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>680442</commentid>
    <comment_count>1</comment_count>
      <attachid>154905</attachid>
    <who name="Mikhail Pozdnyakov">mikhail.pozdnyakov</who>
    <bug_when>2012-07-27 04:35:53 -0700</bug_when>
    <thetext>Created attachment 154905
patch

Does not contain yet wrappers around 
WK_EXPORT WKArrayRef WKBackForwardListCopyBackListWithLimit(WKBackForwardListRef list, unsigned limit);
WK_EXPORT WKArrayRef WKBackForwardListCopyForwardListWithLimit(WKBackForwardListRef list, unsigned limit);

would upload a separate patch for it.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>680488</commentid>
    <comment_count>2</comment_count>
      <attachid>154905</attachid>
    <who name="Chris Dumez">cdumez</who>
    <bug_when>2012-07-27 05:24:27 -0700</bug_when>
    <thetext>Comment on attachment 154905
patch

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

&gt; Source/WebKit2/ChangeLog:3
&gt; +        bug92345

Needs to be removed.

&gt; Source/WebKit2/PlatformEfl.cmake:186
&gt; +    &quot;${CMAKE_CURRENT_SOURCE_DIR}/UIProcess/API/efl/ewk_back_forward_list.h&quot;

These 2 headers need to be added to EWebKit2.h as well.

&gt; Source/WebKit2/UIProcess/API/efl/ewk_back_forward_list.cpp:38
&gt; +typedef HashMap&lt;WKBackForwardListItemRef, Ewk_Back_Forward_List_Item* &gt; ItemsCache;

extra space before &gt;

&gt; Source/WebKit2/UIProcess/API/efl/ewk_back_forward_list.cpp:46
&gt; +    ItemsCache itemsCache;

Minor, but I prefer *Map than *Cache.

&gt; Source/WebKit2/UIProcess/API/efl/ewk_back_forward_list.cpp:50
&gt; +    { }

Missing destructor. You need to unref all the values in the map.

&gt; Source/WebKit2/UIProcess/API/efl/ewk_back_forward_list.cpp:68
&gt; +

EINA SAFETY for wkItem?

&gt; Source/WebKit2/UIProcess/API/efl/ewk_back_forward_list.cpp:72
&gt; +        ewk_back_forward_list_item_ref(item); // increase ref count for stored items.

ref count is already 1 after the new, which is enough for storing. If the client wants to keep a reference, it should ref it by itself.

&gt; Source/WebKit2/UIProcess/API/efl/ewk_back_forward_list.cpp:82
&gt; +    return getOrCreateItem(list, WKBackForwardListGetCurrentItem(wkList));

We try to use blank line before return statements (same below).

&gt; Source/WebKit2/UIProcess/API/efl/ewk_back_forward_list.cpp:91
&gt; +Ewk_Back_Forward_List_Item* webkit_back_forward_list_forward_item_get(Ewk_Back_Forward_List* list)

How about ewk_back_forward_list_next_item_get() and ewk_back_forward_list_previous_item_get() ? While correct, the current naming looks weird ewk_back_forward_list_forward_item_get.

&gt; Source/WebKit2/UIProcess/API/efl/ewk_back_forward_list.cpp:94
&gt; +    return getOrCreateItem(list, WKBackForwardListGetForwardItem(wkList));

What if WKBackForwardListGetForwardItem(wkList) returns 0? This needs to be handled.

&gt; Source/WebKit2/UIProcess/API/efl/ewk_back_forward_list.cpp:100
&gt; +    return getOrCreateItem(list, WKBackForwardListGetItemAtIndex(wkList, index));

Need to handle when WKBackForwardListGetItemAtIndex returns NULL.

&gt; Source/WebKit2/UIProcess/API/efl/ewk_back_forward_list.cpp:144
&gt; +    delete list;

I would add an EINA SAFETY on list even if it won&apos;t crash.

&gt; Source/WebKit2/UIProcess/API/efl/ewk_back_forward_list.h:50
&gt; +EAPI Ewk_Back_Forward_List_Item *webkit_back_forward_list_current_item_get(Ewk_Back_Forward_List *list);

wrong naming: ewk_*
list argument should be const since it is a getter.

&gt; Source/WebKit2/UIProcess/API/efl/ewk_back_forward_list.h:59
&gt; +EAPI Ewk_Back_Forward_List_Item *webkit_back_forward_list_back_item_get(Ewk_Back_Forward_List *list);

Ditto.

&gt; Source/WebKit2/UIProcess/API/efl/ewk_back_forward_list.h:68
&gt; +EAPI Ewk_Back_Forward_List_Item *webkit_back_forward_list_forward_item_get(Ewk_Back_Forward_List *list);

Ditto.

&gt; Source/WebKit2/UIProcess/API/efl/ewk_back_forward_list.h:78
&gt; +EAPI Ewk_Back_Forward_List_Item *webkit_back_forward_list_item_at_index_get(Ewk_Back_Forward_List *list, int index);

Ditto.

&gt; Source/WebKit2/UIProcess/API/efl/ewk_back_forward_list.h:87
&gt; +EAPI unsigned webkit_back_forward_list_length_get(Ewk_Back_Forward_List *list);

wrong naming: ewk_*
Based on Eina_List API, I would call this ewk_back_forward_list_count().
Argument should be const.

&gt; Source/WebKit2/UIProcess/API/efl/ewk_back_forward_list_item.cpp:39
&gt; +inline const char* getItemProperty(WKBackForwardListItemRef ref, const WKRefType&amp; val)

Ref types are not usually passed by const reference in WebKit2 I believe.

&gt; Source/WebKit2/UIProcess/API/efl/ewk_back_forward_list_item.cpp:84
&gt; +    if (!--item-&gt;__ref)

We usually prefer the opposite in WebKit (return early).

if (--item-&gt;__ref)
  return;

delete item;

&gt; Source/WebKit2/UIProcess/API/efl/ewk_back_forward_list_item.cpp:91
&gt; +    return item-&gt;uri;

Blank line before return statements are preferred.

&gt; Source/WebKit2/UIProcess/API/efl/ewk_back_forward_list_item.cpp:109
&gt; +    return ewk_back_forward_list_item_new(backForwardListItemData);

Infinite loop?

&gt; Source/WebKit2/UIProcess/API/efl/ewk_back_forward_list_item.h:60
&gt; + * Retuns URI of the item.

&quot;Returns&quot;

&gt; Source/WebKit2/UIProcess/API/efl/ewk_back_forward_list_item.h:62
&gt; + * The returned URI may differ from the original URI.

Why? Maybe we can improve the doc here by explaining.

&gt; Source/WebKit2/UIProcess/API/efl/ewk_back_forward_list_item.h:63
&gt; + * @sa ewk_back_forward_list_item_original_uri_get().

I think we use @see in the other files.

&gt; Source/WebKit2/UIProcess/API/efl/ewk_back_forward_list_item.h:67
&gt; + * @return the URI of the @a item or @c NULL in case of error.

It should be indicated that the returned value is guaranteed to be stringshared. See other files for examples.

&gt; Source/WebKit2/UIProcess/API/efl/ewk_back_forward_list_item.h:72
&gt; + * Retuns title of the item.

&quot;Returns&quot;

&gt; Source/WebKit2/UIProcess/API/efl/ewk_back_forward_list_item.h:81
&gt; + * Retuns original URI of the item.

&quot;Returns&quot;

&gt; Source/WebKit2/UIProcess/API/efl/ewk_view.cpp:84
&gt; +        ASSERT(backForwardList); // Cannot be 0

Useless comment</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>680545</commentid>
    <comment_count>3</comment_count>
      <attachid>154928</attachid>
    <who name="Mikhail Pozdnyakov">mikhail.pozdnyakov</who>
    <bug_when>2012-07-27 06:34:39 -0700</bug_when>
    <thetext>Created attachment 154928
patch v2

Chris, thanks for careful review.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>680578</commentid>
    <comment_count>4</comment_count>
      <attachid>154928</attachid>
    <who name="Mikhail Pozdnyakov">mikhail.pozdnyakov</who>
    <bug_when>2012-07-27 06:56:43 -0700</bug_when>
    <thetext>Comment on attachment 154928
patch v2

need rebase</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>680644</commentid>
    <comment_count>5</comment_count>
      <attachid>154948</attachid>
    <who name="Mikhail Pozdnyakov">mikhail.pozdnyakov</who>
    <bug_when>2012-07-27 07:49:43 -0700</bug_when>
    <thetext>Created attachment 154948
patch v3</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>680658</commentid>
    <comment_count>6</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-07-27 08:05:08 -0700</bug_when>
    <thetext>Attachment 154948 did not pass style-queue:

Failed to run &quot;[&apos;Tools/Scripts/check-webkit-style&apos;, &apos;--diff-files&apos;, u&apos;Source/WebKit2/ChangeLog&apos;, u&apos;Source/WebKit...&quot; exit_code: 1
Source/WebKit2/UIProcess/API/efl/ewk_view_loader_client.cpp:34:  Found header this file implements after other header. Should be: config.h, primary header, blank line, and then alphabetically sorted.  [build/include_order] [4]
Source/WebKit2/UIProcess/API/efl/ewk_view.cpp:669:  Tab found; better to use spaces  [whitespace/tab] [1]
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>680659</commentid>
    <comment_count>7</comment_count>
    <who name="Chris Dumez">cdumez</who>
    <bug_when>2012-07-27 08:06:54 -0700</bug_when>
    <thetext>(In reply to comment #6)
&gt; Attachment 154948 [details] did not pass style-queue:
&gt; 
&gt; Failed to run &quot;[&apos;Tools/Scripts/check-webkit-style&apos;, &apos;--diff-files&apos;, u&apos;Source/WebKit2/ChangeLog&apos;, u&apos;Source/WebKit...&quot; exit_code: 1
&gt; Source/WebKit2/UIProcess/API/efl/ewk_view_loader_client.cpp:34:  Found header this file implements after other header. Should be: config.h, primary header, blank line, and then alphabetically sorted.  [build/include_order] [4]
&gt; Source/WebKit2/UIProcess/API/efl/ewk_view.cpp:669:  Tab found; better to use spaces  [whitespace/tab] [1]
&gt; Total errors found: 2 in 12 files
&gt; 
&gt; 
&gt; If any of these errors are false positives, please file a bug against check-webkit-style.

False style warning to be addressed in Bug 92491.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>680740</commentid>
    <comment_count>8</comment_count>
      <attachid>154948</attachid>
    <who name="Gyuyoung Kim">gyuyoung.kim</who>
    <bug_when>2012-07-27 09:41:39 -0700</bug_when>
    <thetext>Comment on attachment 154948
patch v3

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

&gt; Source/WebKit2/UIProcess/API/efl/ewk_back_forward_list.cpp:88
&gt; +Ewk_Back_Forward_List_Item* ewk_back_forward_list_current_item_get(const Ewk_Back_Forward_List *list)

Nit : Move &apos;*&apos; to variable type side.

&gt; Source/WebKit2/UIProcess/API/efl/ewk_back_forward_list.cpp:132
&gt; +    (void)getOrCreateItem(list, wkAddedItem); // Puts new item to the cache.

Could you explain why you need to add *(void)* casting ?

&gt; Source/WebKit2/UIProcess/API/efl/ewk_back_forward_list_item.h:62
&gt; + * The returned URI may differ from the original URI (For example if the page was redirected).

Nit : Generally, we have added an empty line below description.

&gt; Source/WebKit2/UIProcess/API/efl/ewk_back_forward_list_item.h:68
&gt; + *         guaranteed to be eina_stringshare, so whenever possible

Nit : Adhere indentation. New line is placed at the beginning of description of first line.

&gt; Source/WebKit2/UIProcess/API/efl/ewk_back_forward_list_item.h:71
&gt; + *         strdup().

Nit : We don&apos;t use . at the end of line in doxyzen.

&gt; Source/WebKit2/UIProcess/API/efl/ewk_back_forward_list_item.h:81
&gt; + *         guaranteed to be eina_stringshare, so whenever possible

ditto.

&gt; Source/WebKit2/UIProcess/API/efl/ewk_back_forward_list_item.h:84
&gt; + *         strdup().

ditto.

&gt; Source/WebKit2/UIProcess/API/efl/ewk_back_forward_list_item.h:99
&gt; + *         strdup().

ditto.

&gt; Source/WebKit2/UIProcess/API/efl/ewk_view.h:334
&gt; + *         view.

ditto.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>681735</commentid>
    <comment_count>9</comment_count>
      <attachid>154948</attachid>
    <who name="Mikhail Pozdnyakov">mikhail.pozdnyakov</who>
    <bug_when>2012-07-30 00:17:00 -0700</bug_when>
    <thetext>Comment on attachment 154948
patch v3

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

&gt;&gt; Source/WebKit2/UIProcess/API/efl/ewk_back_forward_list.cpp:132
&gt;&gt; +    (void)getOrCreateItem(list, wkAddedItem); // Puts new item to the cache.
&gt; 
&gt; Could you explain why you need to add *(void)* casting ?

This is done to 1) say explicitly that the function has return value which is not going to be used; 2) avoid possible compiler warnings

&gt;&gt; Source/WebKit2/UIProcess/API/efl/ewk_back_forward_list_item.h:68
&gt;&gt; + *         guaranteed to be eina_stringshare, so whenever possible
&gt; 
&gt; Nit : Adhere indentation. New line is placed at the beginning of description of first line.

this comment is not quite clear for me. Could you please clarify how it should look? I can see the similar formatted return value descriptiop in many other ewk_ headers.

&gt;&gt; Source/WebKit2/UIProcess/API/efl/ewk_view_loader_client.cpp:34
&gt;&gt; +#include &quot;ewk_view.h&quot;
&gt; 
&gt; Found header this file implements after other header. Should be: config.h, primary header, blank line, and then alphabetically sorted.  [build/include_order] [4]

This file does not have primary header. This is script issue described at bug92491</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>681739</commentid>
    <comment_count>10</comment_count>
      <attachid>155223</attachid>
    <who name="Mikhail Pozdnyakov">mikhail.pozdnyakov</who>
    <bug_when>2012-07-30 00:24:18 -0700</bug_when>
    <thetext>Created attachment 155223
patch v4

Gyuyoung, thanks for review!</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>681740</commentid>
    <comment_count>11</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-07-30 00:26:28 -0700</bug_when>
    <thetext>Attachment 155223 did not pass style-queue:

Failed to run &quot;[&apos;Tools/Scripts/check-webkit-style&apos;, &apos;--diff-files&apos;, u&apos;Source/WebKit2/ChangeLog&apos;, u&apos;Source/WebKit...&quot; exit_code: 1
Source/WebKit2/UIProcess/API/efl/ewk_view_loader_client.cpp:34:  Found header this file implements after other header. Should be: config.h, primary header, blank line, and then alphabetically sorted.  [build/include_order] [4]
Total errors found: 1 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>686628</commentid>
    <comment_count>12</comment_count>
      <attachid>155223</attachid>
    <who name="Kenneth Rohde Christiansen">kenneth</who>
    <bug_when>2012-08-03 06:12:23 -0700</bug_when>
    <thetext>Comment on attachment 155223
patch v4

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

&gt; Source/WebKit2/UIProcess/API/efl/ewk_back_forward_list.cpp:63
&gt; +    if (!(list)) {                                             \

why the () around list?

&gt; Source/WebKit2/UIProcess/API/efl/ewk_back_forward_list.cpp:74
&gt; +static inline Ewk_Back_Forward_List_Item* getOrCreateItem(const Ewk_Back_Forward_List* list, WKBackForwardListItemRef wkItem)

I find the naming confusing. Or the way of doing this. It has like the wrong level of abstraction. I understand that you are wrapping the items and then caching them as this in itself is a kind of wasteful operation.

I guess I would just call this addItemToWrapperCache() or so. That makes it pretty obvious what it is doing. Add methods normally return the item inserted.

&gt; Source/WebKit2/UIProcess/API/efl/ewk_back_forward_list.cpp:132
&gt; +    (void)getOrCreateItem(list, wkAddedItem); // Puts new item to the cache.

I dont think the void cast is needed

&gt; Source/WebKit2/UIProcess/API/efl/ewk_back_forward_list_item.cpp:53
&gt; +template &lt;typename WKRefType&gt;
&gt; +inline const char* getItemProperty(WKBackForwardListItemRef ref, WKRefType val)
&gt; +{
&gt; +    ASSERT(ref);
&gt; +    WKRetainPtr&lt;WKRefType&gt; wkProp(AdoptWK, val);
&gt; +    return eina_stringshare_add(toImpl(wkProp.get())-&gt;string().utf8().data());
&gt; +}
&gt; +
&gt; +/**
&gt; + * \struct  _Ewk_Back_Forward_List
&gt; + * @brief   Contains the Back Forward List data.
&gt; + */
&gt; +struct _Ewk_Back_Forward_List_Item {
&gt; +    unsigned int __ref; /**&lt; the reference count of the object */
&gt; +    WKRetainPtr&lt;WKBackForwardListItemRef&gt; wkItem;
&gt; +    const char* uri;

Wouldn&apos;t it be smarter to make a EinaStringShare&lt;const char*&gt; &quot;smart pointer&quot; like class:

class EinaStringShare&lt; .... {
   EinaStringShare(T string) { value = eina_stringshare_add(string) };
   ~EinaStringShare() { eina_stringshare_del(value) };
   T data() { return value; }
private:
   T value;
}</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>686629</commentid>
    <comment_count>13</comment_count>
    <who name="Kenneth Rohde Christiansen">kenneth</who>
    <bug_when>2012-08-03 06:13:59 -0700</bug_when>
    <thetext>

&gt; class EinaStringShare&lt; .... {
&gt;    EinaStringShare(T string) { value = eina_stringshare_add(string) };
&gt;    ~EinaStringShare() { eina_stringshare_del(value) };
&gt;    T data() { return value; }
&gt; private:
&gt;    T value;
&gt; }

You could make something like this work with char*, const char*, WKString etc</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>686640</commentid>
    <comment_count>14</comment_count>
      <attachid>155223</attachid>
    <who name="Mikhail Pozdnyakov">mikhail.pozdnyakov</who>
    <bug_when>2012-08-03 06:34:05 -0700</bug_when>
    <thetext>Comment on attachment 155223
patch v4

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

&gt;&gt; Source/WebKit2/UIProcess/API/efl/ewk_back_forward_list.cpp:63
&gt;&gt; +    if (!(list)) {                                             \
&gt; 
&gt; why the () around list?

Theoretically &apos;list&apos; here can be some expression, so missing () could lead to erroneous usage of operator &apos;!&apos;.
As far as I remember macro args are always treated like this..

&gt;&gt; Source/WebKit2/UIProcess/API/efl/ewk_back_forward_list_item.cpp:53
&gt;&gt; +    const char* uri;
&gt; 
&gt; Wouldn&apos;t it be smarter to make a EinaStringShare&lt;const char*&gt; &quot;smart pointer&quot; like class:
&gt; 
&gt; class EinaStringShare&lt; .... {
&gt;    EinaStringShare(T string) { value = eina_stringshare_add(string) };
&gt;    ~EinaStringShare() { eina_stringshare_del(value) };
&gt;    T data() { return value; }
&gt; private:
&gt;    T value;
&gt; }

Yeah, that&apos;s great idea :) such class could be re-used in many places..</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>686718</commentid>
    <comment_count>15</comment_count>
      <attachid>156375</attachid>
    <who name="Mikhail Pozdnyakov">mikhail.pozdnyakov</who>
    <bug_when>2012-08-03 07:27:29 -0700</bug_when>
    <thetext>Created attachment 156375
patch v5

Kenneth, thanks for great review!</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>686724</commentid>
    <comment_count>16</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-08-03 07:32:59 -0700</bug_when>
    <thetext>Attachment 156375 did not pass style-queue:

Failed to run &quot;[&apos;Tools/Scripts/check-webkit-style&apos;, &apos;--diff-files&apos;, u&apos;Source/WebKit2/ChangeLog&apos;, u&apos;Source/WebKit...&quot; exit_code: 1
Source/WebKit2/UIProcess/API/efl/ewk_view_loader_client.cpp:34:  Found header this file implements after other header. Should be: config.h, primary header, blank line, and then alphabetically sorted.  [build/include_order] [4]
Total errors found: 1 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>686736</commentid>
    <comment_count>17</comment_count>
      <attachid>156375</attachid>
    <who name="Kenneth Rohde Christiansen">kenneth</who>
    <bug_when>2012-08-03 07:38:41 -0700</bug_when>
    <thetext>Comment on attachment 156375
patch v5

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

&gt; Source/WebKit2/UIProcess/API/efl/ewk_back_forward_list.cpp:55
&gt; +        ItemsMap::iterator end = itemsCache.begin();

end = begin??? that wont leave much work

&gt; Source/WebKit2/UIProcess/API/efl/ewk_back_forward_list.cpp:59
&gt; +            ewk_back_forward_list_item_unref(it-&gt;second);
&gt; +
&gt; +    }

one newline too many

&gt; Source/WebKit2/UIProcess/API/efl/ewk_back_forward_list_item.cpp:38
&gt; +class EinaStringShare {

We probably want to move this somewhere else, maybe a separate patch?

&gt; Source/WebKit2/UIProcess/API/efl/ewk_back_forward_list_item.cpp:43
&gt; +    EinaStringShare(const WKRetainPtr&lt;WKRefType&gt;&amp; strRef)
&gt; +        : m_str(eina_stringshare_add(toImpl(strRef.get())-&gt;string().utf8().data()))
&gt; +    {

It is probably nicer making this take a WKURLRef or a WKStringRef directly. You can retain the ref inside the constructor.

&gt; Source/WebKit2/UIProcess/API/efl/ewk_back_forward_list_item.cpp:60
&gt; +    EinaStringShare uri;

Maybe EinaSharedString makes more sense in WebKit</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>686782</commentid>
    <comment_count>18</comment_count>
      <attachid>156375</attachid>
    <who name="Raphael Kubo da Costa (:rakuco)">rakuco</who>
    <bug_when>2012-08-03 08:45:12 -0700</bug_when>
    <thetext>Comment on attachment 156375
patch v5

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

&gt;&gt; Source/WebKit2/UIProcess/API/efl/ewk_back_forward_list_item.cpp:38
&gt;&gt; +class EinaStringShare {
&gt; 
&gt; We probably want to move this somewhere else, maybe a separate patch?

Yes, please do so in a separate patch (and mind that depending where you put it you should follow WebKit&apos;s or EFL&apos;s naming style -- for example, if this was really declared here it should be called Eina_String_Share).

I wouldn&apos;t necessarily make this bug depend on the other implementing this class, though, as all places can be changed at once later.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>686795</commentid>
    <comment_count>19</comment_count>
    <who name="Kenneth Rohde Christiansen">kenneth</who>
    <bug_when>2012-08-03 08:54:08 -0700</bug_when>
    <thetext>(In reply to comment #18)
&gt; (From update of attachment 156375 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=156375&amp;action=review
&gt; 
&gt; &gt;&gt; Source/WebKit2/UIProcess/API/efl/ewk_back_forward_list_item.cpp:38
&gt; &gt;&gt; +class EinaStringShare {
&gt; &gt; 
&gt; &gt; We probably want to move this somewhere else, maybe a separate patch?
&gt; 
&gt; Yes, please do so in a separate patch (and mind that depending where you put it you should follow WebKit&apos;s or EFL&apos;s naming style -- for example, if this was really declared here it should be called Eina_String_Share).

It is not really an EFL API offering, just like the WKRetainPtr&apos;s are not Apple WK2 C api offerings, but they are there to be more useful when coding C++ in WebKit. Thus it makes sense to make this follow WebKit style

&gt; I wouldn&apos;t necessarily make this bug depend on the other implementing this class, though, as all places can be changed at once later.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>686802</commentid>
    <comment_count>20</comment_count>
    <who name="Kenneth Rohde Christiansen">kenneth</who>
    <bug_when>2012-08-03 08:58:21 -0700</bug_when>
    <thetext>(In reply to comment #19)
&gt; (In reply to comment #18)
&gt; &gt; (From update of attachment 156375 [details] [details])
&gt; &gt; View in context: https://bugs.webkit.org/attachment.cgi?id=156375&amp;action=review
&gt; &gt; 
&gt; &gt; &gt;&gt; Source/WebKit2/UIProcess/API/efl/ewk_back_forward_list_item.cpp:38
&gt; &gt; &gt;&gt; +class EinaStringShare {
&gt; &gt; &gt; 
&gt; &gt; &gt; We probably want to move this somewhere else, maybe a separate patch?
&gt; &gt; 
&gt; &gt; Yes, please do so in a separate patch (and mind that depending where you put it you should follow WebKit&apos;s or EFL&apos;s naming style -- for example, if this was really declared here it should be called Eina_String_Share).
&gt; 
&gt; It is not really an EFL API offering, just like the WKRetainPtr&apos;s are not Apple WK2 C api offerings, but they are there to be more useful when coding C++ in WebKit. Thus it makes sense to make this follow WebKit style
&gt; 
&gt; &gt; I wouldn&apos;t necessarily make this bug depend on the other implementing this class, though, as all places can be changed at once later.

Maybe WKEinaSharedString</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>687835</commentid>
    <comment_count>21</comment_count>
    <who name="Mikhail Pozdnyakov">mikhail.pozdnyakov</who>
    <bug_when>2012-08-06 01:00:33 -0700</bug_when>
    <thetext>(In reply to comment #20)
&gt; (In reply to comment #19)
&gt; &gt; (In reply to comment #18)
&gt; &gt; &gt; (From update of attachment 156375 [details] [details] [details])
&gt; &gt; &gt; View in context: https://bugs.webkit.org/attachment.cgi?id=156375&amp;action=review
&gt; &gt; &gt; 
&gt; &gt; &gt; &gt;&gt; Source/WebKit2/UIProcess/API/efl/ewk_back_forward_list_item.cpp:38
&gt; &gt; &gt; &gt;&gt; +class EinaStringShare {
&gt; &gt; &gt; &gt; 
&gt; &gt; &gt; &gt; We probably want to move this somewhere else, maybe a separate patch?
&gt; &gt; &gt; 
&gt; &gt; &gt; Yes, please do so in a separate patch (and mind that depending where you put it you should follow WebKit&apos;s or EFL&apos;s naming style -- for example, if this was really declared here it should be called Eina_String_Share).
&gt; &gt; 
&gt; &gt; It is not really an EFL API offering, just like the WKRetainPtr&apos;s are not Apple WK2 C api offerings, but they are there to be more useful when coding C++ in WebKit. Thus it makes sense to make this follow WebKit style
&gt; &gt; 
&gt; &gt; &gt; I wouldn&apos;t necessarily make this bug depend on the other implementing this class, though, as all places can be changed at once later.
&gt; 
&gt; Maybe WKEinaSharedString

This issue will be addressed at bug93229, however can I yet proceed with a local helper class here for back-forward list implementation and substitute it later with a generic wrapper class that appears in bug93229 ?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>687838</commentid>
    <comment_count>22</comment_count>
    <who name="Kenneth Rohde Christiansen">kenneth</who>
    <bug_when>2012-08-06 01:02:39 -0700</bug_when>
    <thetext>Sure but I think you need to rebase this patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>687843</commentid>
    <comment_count>23</comment_count>
      <attachid>156375</attachid>
    <who name="Mikhail Pozdnyakov">mikhail.pozdnyakov</who>
    <bug_when>2012-08-06 01:11:48 -0700</bug_when>
    <thetext>Comment on attachment 156375
patch v5

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

&gt;&gt; Source/WebKit2/UIProcess/API/efl/ewk_back_forward_list.cpp:55
&gt;&gt; +        ItemsMap::iterator end = itemsCache.begin();
&gt; 
&gt; end = begin??? that wont leave much work

Ouch!.. Thanks for noticing it!

&gt;&gt; Source/WebKit2/UIProcess/API/efl/ewk_back_forward_list.cpp:59
&gt;&gt; +    }
&gt; 
&gt; one newline too many

Agree

&gt;&gt; Source/WebKit2/UIProcess/API/efl/ewk_back_forward_list_item.cpp:43
&gt;&gt; +    {
&gt; 
&gt; It is probably nicer making this take a WKURLRef or a WKStringRef directly. You can retain the ref inside the constructor.

This class does not know whether the WKSmthRef it is given was copied before (and hence shall be adopted) or not, so I would keep it like this..</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>687847</commentid>
    <comment_count>24</comment_count>
      <attachid>156617</attachid>
    <who name="Mikhail Pozdnyakov">mikhail.pozdnyakov</who>
    <bug_when>2012-08-06 01:22:57 -0700</bug_when>
    <thetext>Created attachment 156617
patch v6

Kenneth, thanks for review</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>687848</commentid>
    <comment_count>25</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-08-06 01:26:00 -0700</bug_when>
    <thetext>Attachment 156617 did not pass style-queue:

Failed to run &quot;[&apos;Tools/Scripts/check-webkit-style&apos;, &apos;--diff-files&apos;, u&apos;Source/WebKit2/ChangeLog&apos;, u&apos;Source/WebKit...&quot; exit_code: 1
Source/WebKit2/UIProcess/API/efl/ewk_view_loader_client.cpp:34:  Found header this file implements after other header. Should be: config.h, primary header, blank line, and then alphabetically sorted.  [build/include_order] [4]
Total errors found: 1 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>687851</commentid>
    <comment_count>26</comment_count>
      <attachid>156617</attachid>
    <who name="Kenneth Rohde Christiansen">kenneth</who>
    <bug_when>2012-08-06 01:29:58 -0700</bug_when>
    <thetext>Comment on attachment 156617
patch v6

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

&gt; Source/WebKit2/UIProcess/API/efl/ewk_back_forward_list.cpp:45
&gt; +    WKRetainPtr&lt;WKBackForwardListRef&gt; wkList;

wkImpl?

&gt; Source/WebKit2/UIProcess/API/efl/ewk_back_forward_list.cpp:46
&gt; +    mutable ItemsMap itemsCache;

wrapperCache?

&gt; Source/WebKit2/UIProcess/API/efl/ewk_back_forward_list.cpp:61
&gt; +#define EWK_BACK_FORWARD_LIST_WK_GET_OR_RETURN(list, wkList_, ...)  \

Maybe IMPL instead of WK ? or 

#define EWK_BACK_FORWARD_LIST_IMPL_GET_OR_RETURN(list, impl, ...)

That is at least easy to understand</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>687855</commentid>
    <comment_count>27</comment_count>
    <who name="Kenneth Rohde Christiansen">kenneth</who>
    <bug_when>2012-08-06 01:31:09 -0700</bug_when>
    <thetext>
&gt; &gt; 
&gt; &gt; It is probably nicer making this take a WKURLRef or a WKStringRef directly. You can retain the ref inside the constructor.
&gt; 
&gt; This class does not know whether the WKSmthRef it is given was copied before (and hence shall be adopted) or not, so I would keep it like this..

You could give it the AdoptWK argument :-)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>687885</commentid>
    <comment_count>28</comment_count>
      <attachid>156617</attachid>
    <who name="Gyuyoung Kim">gyuyoung.kim</who>
    <bug_when>2012-08-06 02:15:57 -0700</bug_when>
    <thetext>Comment on attachment 156617
patch v6

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

&gt;&gt; Source/WebKit2/UIProcess/API/efl/ewk_view_loader_client.cpp:34
&gt;&gt; +#include &quot;ewk_view.h&quot;
&gt; 
&gt; Found header this file implements after other header. Should be: config.h, primary header, blank line, and then alphabetically sorted.  [build/include_order] [4]

IMO, this file is to expand ewk_view.cpp features. So, it seems ewk_view.h can be moved to below config.h.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>687945</commentid>
    <comment_count>29</comment_count>
    <who name="Mikhail Pozdnyakov">mikhail.pozdnyakov</who>
    <bug_when>2012-08-06 03:02:34 -0700</bug_when>
    <thetext>(In reply to comment #26)
&gt; (From update of attachment 156617 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=156617&amp;action=review
&gt; 
&gt; &gt; Source/WebKit2/UIProcess/API/efl/ewk_back_forward_list.cpp:45
&gt; &gt; +    WKRetainPtr&lt;WKBackForwardListRef&gt; wkList;
&gt; 
&gt; wkImpl?
&gt; 
&gt; &gt; Source/WebKit2/UIProcess/API/efl/ewk_back_forward_list.cpp:46
&gt; &gt; +    mutable ItemsMap itemsCache;
&gt; 
&gt; wrapperCache?
&gt; 
&gt; &gt; Source/WebKit2/UIProcess/API/efl/ewk_back_forward_list.cpp:61
&gt; &gt; +#define EWK_BACK_FORWARD_LIST_WK_GET_OR_RETURN(list, wkList_, ...)  \
&gt; 
&gt; Maybe IMPL instead of WK ? or 
&gt; 
&gt; #define EWK_BACK_FORWARD_LIST_IMPL_GET_OR_RETURN(list, impl, ...)
&gt; 
&gt; That is at least easy to understand

I do not mind, but we have naming like this everywhere in EFL WK2 APIs implementation. Should I do Back-forward list implementation  differently?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>687967</commentid>
    <comment_count>30</comment_count>
    <who name="Kenneth Rohde Christiansen">kenneth</who>
    <bug_when>2012-08-06 03:37:30 -0700</bug_when>
    <thetext>no just follow what you are doing elsewhere... it was just a suggestion</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>687988</commentid>
    <comment_count>31</comment_count>
      <attachid>156654</attachid>
    <who name="Mikhail Pozdnyakov">mikhail.pozdnyakov</who>
    <bug_when>2012-08-06 04:13:17 -0700</bug_when>
    <thetext>Created attachment 156654
patch v7

Considered comments from Kenneth and Gyuyoung.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>688916</commentid>
    <comment_count>32</comment_count>
      <attachid>156654</attachid>
    <who name="Gyuyoung Kim">gyuyoung.kim</who>
    <bug_when>2012-08-07 00:37:02 -0700</bug_when>
    <thetext>Comment on attachment 156654
patch v7

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

Looks good to me except for trivial nit.

&gt; Source/WebKit2/UIProcess/API/efl/ewk_back_forward_list_item.cpp:65
&gt; +    const char* m_str;

I think we need to use full name for variable. At least, m_string is better than m_str.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>688989</commentid>
    <comment_count>33</comment_count>
      <attachid>156900</attachid>
    <who name="Mikhail Pozdnyakov">mikhail.pozdnyakov</who>
    <bug_when>2012-08-07 02:38:47 -0700</bug_when>
    <thetext>Created attachment 156900
patch v8

m_str -&gt; m_string</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>689016</commentid>
    <comment_count>34</comment_count>
      <attachid>156900</attachid>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-08-07 03:46:30 -0700</bug_when>
    <thetext>Comment on attachment 156900
patch v8

Clearing flags on attachment: 156900

Committed r124875: &lt;http://trac.webkit.org/changeset/124875&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>689017</commentid>
    <comment_count>35</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-08-07 03:46:38 -0700</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>154905</attachid>
            <date>2012-07-27 04:35:53 -0700</date>
            <delta_ts>2012-07-27 06:26:18 -0700</delta_ts>
            <desc>patch</desc>
            <filename>bug92345</filename>
            <type>text/plain</type>
            <size>30960</size>
            <attacher name="Mikhail Pozdnyakov">mikhail.pozdnyakov</attacher>
            
              <data encoding="base64">Y29tbWl0IGUxMjNjMTlmODZlOTQ4NmM0OTU1M2Q3ZWJmOTI1NGExMDJmNWJjNDkKQXV0aG9yOiBN
aWtoYWlsIFBvemRueWFrb3YgPG1pa2hhaWwucG96ZG55YWtvdkBpbnRlbC5jb20+CkRhdGU6ICAg
RnJpIEp1bCAyNyAxMzowOToyOSAyMDEyICswMzAwCgogICAgYnVnOTIzNDUKCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViS2l0Mi9DaGFuZ2VMb2cgYi9Tb3VyY2UvV2ViS2l0Mi9DaGFuZ2VMb2cKaW5k
ZXggZTkzZjhmNC4uMTZiZjkyMiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvQ2hhbmdlTG9n
CisrKyBiL1NvdXJjZS9XZWJLaXQyL0NoYW5nZUxvZwpAQCAtMSwzICsxLDU0IEBACisyMDEyLTA3
LTI3ICBNaWtoYWlsIFBvemRueWFrb3YgIDxtaWtoYWlsLnBvemRueWFrb3ZAaW50ZWwuY29tPgor
CisgICAgICAgIGJ1ZzkyMzQ1CisKKyAgICAgICAgW0VGTF1bV0syXSBBZGQgYmFjayBmb3J3YXJk
IGxpc3QgQVBJCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9p
ZD05MjM0NQorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAg
IEFkZGVkIG5ldyBCYWNrIEZvcndhcmQgbGlzdCBBUEkgdG8gRUZMIFdLMi4gRXdrX0JhY2tfRm9y
d2FyZF9MaXN0IGFuZAorICAgICAgICBFd2tfQmFja19Gb3J3YXJkX0xpc3RfSXRlbSBzdHJ1Y3R1
cmVzIHdlcmUgYWRkZWQuIFRoZSBuZXcgQVBJIGlzCisgICAgICAgIG1vc3RseSB0aGUgc2FtZSBh
cyBvbmUgZnJvbSBVSVByb2Nlc3MvQVBJL0MveyBXS0JhY2tGb3J3YXJkTGlzdC5oLCBXS0JhY2tG
b3J3YXJkTGlzdEl0ZW0uaCB9LgorCisgICAgICAgICogUGxhdGZvcm1FZmwuY21ha2U6CisgICAg
ICAgICogVUlQcm9jZXNzL0FQSS9lZmwvZXdrX2JhY2tfZm9yd2FyZF9saXN0LmNwcDogQWRkZWQu
CisgICAgICAgIChfRXdrX0JhY2tfRm9yd2FyZF9MaXN0KToKKyAgICAgICAgKF9Fd2tfQmFja19G
b3J3YXJkX0xpc3Q6Ol9Fd2tfQmFja19Gb3J3YXJkX0xpc3QpOgorICAgICAgICAoZ2V0T3JDcmVh
dGVJdGVtKToKKyAgICAgICAgKHdlYmtpdF9iYWNrX2ZvcndhcmRfbGlzdF9jdXJyZW50X2l0ZW1f
Z2V0KToKKyAgICAgICAgKHdlYmtpdF9iYWNrX2ZvcndhcmRfbGlzdF9iYWNrX2l0ZW1fZ2V0KToK
KyAgICAgICAgKHdlYmtpdF9iYWNrX2ZvcndhcmRfbGlzdF9mb3J3YXJkX2l0ZW1fZ2V0KToKKyAg
ICAgICAgKHdlYmtpdF9iYWNrX2ZvcndhcmRfbGlzdF9pdGVtX2F0X2luZGV4X2dldCk6CisgICAg
ICAgICh3ZWJraXRfYmFja19mb3J3YXJkX2xpc3RfbGVuZ3RoX2dldCk6CisgICAgICAgIChld2tf
YmFja19mb3J3YXJkX2xpc3RfY2hhbmdlZCk6CisgICAgICAgIChld2tfYmFja19mb3J3YXJkX2xp
c3RfbmV3KToKKyAgICAgICAgKGV3a19iYWNrX2ZvcndhcmRfbGlzdF9mcmVlKToKKyAgICAgICAg
KiBVSVByb2Nlc3MvQVBJL2VmbC9ld2tfYmFja19mb3J3YXJkX2xpc3QuaDogQWRkZWQuCisgICAg
ICAgICogVUlQcm9jZXNzL0FQSS9lZmwvZXdrX2JhY2tfZm9yd2FyZF9saXN0X2l0ZW0uY3BwOiBB
ZGRlZC4KKyAgICAgICAgKGdldEl0ZW1Qcm9wZXJ0eSk6CisgICAgICAgIChfRXdrX0JhY2tfRm9y
d2FyZF9MaXN0X0l0ZW0pOgorICAgICAgICAoX0V3a19CYWNrX0ZvcndhcmRfTGlzdF9JdGVtOjpf
RXdrX0JhY2tfRm9yd2FyZF9MaXN0X0l0ZW0pOgorICAgICAgICAoX0V3a19CYWNrX0ZvcndhcmRf
TGlzdF9JdGVtOjp+X0V3a19CYWNrX0ZvcndhcmRfTGlzdF9JdGVtKToKKyAgICAgICAgKGV3a19i
YWNrX2ZvcndhcmRfbGlzdF9pdGVtX3JlZik6CisgICAgICAgIChld2tfYmFja19mb3J3YXJkX2xp
c3RfaXRlbV91bnJlZik6CisgICAgICAgIChld2tfYmFja19mb3J3YXJkX2xpc3RfaXRlbV91cmlf
Z2V0KToKKyAgICAgICAgKGV3a19iYWNrX2ZvcndhcmRfbGlzdF9pdGVtX3RpdGxlX2dldCk6Cisg
ICAgICAgIChld2tfYmFja19mb3J3YXJkX2xpc3RfaXRlbV9vcmlnaW5hbF91cmlfZ2V0KToKKyAg
ICAgICAgKGV3a19iYWNrX2ZvcndhcmRfbGlzdF9pdGVtX25ldyk6CisgICAgICAgICogVUlQcm9j
ZXNzL0FQSS9lZmwvZXdrX2JhY2tfZm9yd2FyZF9saXN0X2l0ZW0uaDogQWRkZWQuCisgICAgICAg
ICogVUlQcm9jZXNzL0FQSS9lZmwvZXdrX2JhY2tfZm9yd2FyZF9saXN0X2l0ZW1fcHJpdmF0ZS5o
OiBBZGRlZC4KKyAgICAgICAgKiBVSVByb2Nlc3MvQVBJL2VmbC9ld2tfYmFja19mb3J3YXJkX2xp
c3RfcHJpdmF0ZS5oOiBBZGRlZC4KKyAgICAgICAgKiBVSVByb2Nlc3MvQVBJL2VmbC9ld2tfdmll
dy5jcHA6CisgICAgICAgIChfRXdrX1ZpZXdfUHJpdmF0ZV9EYXRhKToKKyAgICAgICAgKF9Fd2tf
Vmlld19Qcml2YXRlX0RhdGE6Ol9Fd2tfVmlld19Qcml2YXRlX0RhdGEpOgorICAgICAgICAoX0V3
a19WaWV3X1ByaXZhdGVfRGF0YTo6fl9Fd2tfVmlld19Qcml2YXRlX0RhdGEpOgorICAgICAgICAo
ZXdrX3ZpZXdfYmFja19mb3J3YXJkX2xpc3RfZ2V0KTogTmV3IGZ1bmN0aW9uIHRvIGdldCBiYWNr
LWZvcndhcmQgbGlzdC4KKyAgICAgICAgKiBVSVByb2Nlc3MvQVBJL2VmbC9ld2tfdmlldy5oOgor
ICAgICAgICAqIFVJUHJvY2Vzcy9BUEkvZWZsL2V3a192aWV3X2xvYWRlcl9jbGllbnQuY3BwOgor
ICAgICAgICAoZGlkQ2hhbmdlQmFja0ZvcndhcmRMaXN0KTogVGhlIGNhbGxiYWNrIGFkZGVkIHRv
IHVwZGF0ZSBiYWNrLWZvcndhcmQgbGlzdCBpdGVtcyBjYWNoZS4KKyAgICAgICAgKGV3a192aWV3
X2xvYWRlcl9jbGllbnRfYXR0YWNoKToKKwogMjAxMi0wNy0yNiAgTWlraGFpbCBQb3pkbnlha292
ICA8bWlraGFpbC5wb3pkbnlha292QGludGVsLmNvbT4KIAogICAgICAgICBbV0syXSBXZWJQYWdl
OjpoYW5kbGVFZGl0aW5nS2V5Ym9hcmRFdmVudCBkb2VzIG5vdCBjaGVjayB3aGV0aGVyIHRoZSBu
b2RlIGFsbG93cyBlZGl0aW5nLgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvUGxhdGZvcm1F
ZmwuY21ha2UgYi9Tb3VyY2UvV2ViS2l0Mi9QbGF0Zm9ybUVmbC5jbWFrZQppbmRleCBmOGYzMGM2
Li4yOTEyMzNkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9QbGF0Zm9ybUVmbC5jbWFrZQor
KysgYi9Tb3VyY2UvV2ViS2l0Mi9QbGF0Zm9ybUVmbC5jbWFrZQpAQCAtNDAsNiArNDAsOCBAQCBM
SVNUKEFQUEVORCBXZWJLaXQyX1NPVVJDRVMKICAgICBVSVByb2Nlc3MvQVBJL2VmbC9CYXR0ZXJ5
UHJvdmlkZXIuY3BwCiAgICAgVUlQcm9jZXNzL0FQSS9lZmwvUGFnZUNsaWVudEltcGwuY3BwCiAg
ICAgVUlQcm9jZXNzL0FQSS9lZmwvVmlicmF0aW9uUHJvdmlkZXIuY3BwCisgICAgVUlQcm9jZXNz
L0FQSS9lZmwvZXdrX2JhY2tfZm9yd2FyZF9saXN0LmNwcAorICAgIFVJUHJvY2Vzcy9BUEkvZWZs
L2V3a19iYWNrX2ZvcndhcmRfbGlzdF9pdGVtLmNwcAogICAgIFVJUHJvY2Vzcy9BUEkvZWZsL2V3
a19jb250ZXh0LmNwcAogICAgIFVJUHJvY2Vzcy9BUEkvZWZsL2V3a19jb250ZXh0X3JlcXVlc3Rf
bWFuYWdlcl9jbGllbnQuY3BwCiAgICAgVUlQcm9jZXNzL0FQSS9lZmwvZXdrX2Nvb2tpZV9tYW5h
Z2VyLmNwcApAQCAtMTgxLDYgKzE4Myw4IEBAIFNFVChGb3J3YXJkaW5nTmV0d29ya0hlYWRlcnNf
TkFNRSBmb3J3YXJkaW5nLWhlYWRlclNvdXApCiBDT05GSUdVUkVfRklMRShlZmwvZXdlYmtpdDIu
cGMuaW4gJHtDTUFLRV9CSU5BUllfRElSfS9XZWJLaXQyL2VmbC9ld2Via2l0Mi5wYyBAT05MWSkK
IFNFVCAoRVdlYktpdDJfSEVBREVSUwogICAgICIke0NNQUtFX0NVUlJFTlRfU09VUkNFX0RJUn0v
VUlQcm9jZXNzL0FQSS9lZmwvRVdlYktpdDIuaCIKKyAgICAiJHtDTUFLRV9DVVJSRU5UX1NPVVJD
RV9ESVJ9L1VJUHJvY2Vzcy9BUEkvZWZsL2V3a19iYWNrX2ZvcndhcmRfbGlzdC5oIgorICAgICIk
e0NNQUtFX0NVUlJFTlRfU09VUkNFX0RJUn0vVUlQcm9jZXNzL0FQSS9lZmwvZXdrX2JhY2tfZm9y
d2FyZF9saXN0X2l0ZW0uaCIKICAgICAiJHtDTUFLRV9DVVJSRU5UX1NPVVJDRV9ESVJ9L1VJUHJv
Y2Vzcy9BUEkvZWZsL2V3a19jb250ZXh0LmgiCiAgICAgIiR7Q01BS0VfQ1VSUkVOVF9TT1VSQ0Vf
RElSfS9VSVByb2Nlc3MvQVBJL2VmbC9ld2tfY29va2llX21hbmFnZXIuaCIKICAgICAiJHtDTUFL
RV9DVVJSRU5UX1NPVVJDRV9ESVJ9L1VJUHJvY2Vzcy9BUEkvZWZsL2V3a19pbnRlbnQuaCIKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZWZsL2V3a19iYWNrX2Zvcndh
cmRfbGlzdC5jcHAgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2VmbC9ld2tfYmFja19m
b3J3YXJkX2xpc3QuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjEwNmVl
YzYKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2VmbC9l
d2tfYmFja19mb3J3YXJkX2xpc3QuY3BwCkBAIC0wLDAgKzEsMTQ1IEBACisvKgorICogQ29weXJp
Z2h0IChDKSAyMDEyIEludGVsIENvcnBvcmF0aW9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoK
KyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdp
dGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRo
YXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmli
dXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJv
ZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVu
dGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0
aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQg
SVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVE
IFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJ
RUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElD
VUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUg
SU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElO
RElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5U
SUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBP
RgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9S
IFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFO
RCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNU
UklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lT
RSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJF
LCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4K
KyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiZXdrX2JhY2tfZm9yd2FyZF9s
aXN0LmgiCisKKyNpbmNsdWRlICJXS0FQSUNhc3QuaCIKKyNpbmNsdWRlICJXS0FycmF5LmgiCisj
aW5jbHVkZSAiV0tCYWNrRm9yd2FyZExpc3QuaCIKKyNpbmNsdWRlICJXS1JldGFpblB0ci5oIgor
I2luY2x1ZGUgImV3a19iYWNrX2ZvcndhcmRfbGlzdF9pdGVtX3ByaXZhdGUuaCIKKyNpbmNsdWRl
IDx3dGYvdGV4dC9DU3RyaW5nLmg+CisKK3VzaW5nIG5hbWVzcGFjZSBXZWJLaXQ7CisKK3R5cGVk
ZWYgSGFzaE1hcDxXS0JhY2tGb3J3YXJkTGlzdEl0ZW1SZWYsIEV3a19CYWNrX0ZvcndhcmRfTGlz
dF9JdGVtKiA+IEl0ZW1zQ2FjaGU7CisKKy8qKgorICogXHN0cnVjdCAgX0V3a19CYWNrX0Zvcndh
cmRfTGlzdAorICogQGJyaWVmICAgQ29udGFpbnMgdGhlIEJhY2sgRm9yd2FyZCBMaXN0IGRhdGEu
CisgKi8KK3N0cnVjdCBfRXdrX0JhY2tfRm9yd2FyZF9MaXN0IHsKKyAgICBXS1JldGFpblB0cjxX
S0JhY2tGb3J3YXJkTGlzdFJlZj4gd2tMaXN0OworICAgIEl0ZW1zQ2FjaGUgaXRlbXNDYWNoZTsK
KworICAgIF9Fd2tfQmFja19Gb3J3YXJkX0xpc3QoV0tCYWNrRm9yd2FyZExpc3RSZWYgbGlzdFJl
ZikKKyAgICAgICAgOiB3a0xpc3QobGlzdFJlZikKKyAgICB7IH0KK307CisKKyNkZWZpbmUgRVdL
X0JBQ0tfRk9SV0FSRF9MSVNUX1dLX0dFVF9PUl9SRVRVUk4obGlzdCwgd2tMaXN0XywgLi4uKSAg
XAorICAgIGlmICghKGxpc3QpKSB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgXAorICAgICAgICBFSU5BX0xPR19DUklUKCJsaXN0IGlzIE5VTEwuIik7ICAgICAg
ICAgICAgICAgICAgICAgICAgXAorICAgICAgICByZXR1cm4gX19WQV9BUkdTX187ICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIH0gICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIGlmICghKGxpc3QpLT53
a0xpc3QpIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICBF
SU5BX0xPR19DUklUKCJsaXN0LT53a0xpc3QgaXMgTlVMTC4iKTsgICAgICAgICAgICAgICAgXAor
ICAgICAgICByZXR1cm4gX19WQV9BUkdTX187ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgXAorICAgIH0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgXAorICAgIFdLQmFja0ZvcndhcmRMaXN0UmVmIHdrTGlzdF8gPSAobGlz
dCktPndrTGlzdC5nZXQoKQorCisKK3N0YXRpYyBpbmxpbmUgRXdrX0JhY2tfRm9yd2FyZF9MaXN0
X0l0ZW0qIGdldE9yQ3JlYXRlSXRlbShFd2tfQmFja19Gb3J3YXJkX0xpc3QqIGxpc3QsIFdLQmFj
a0ZvcndhcmRMaXN0SXRlbVJlZiB3a0l0ZW0pCit7CisgICAgRUlOQV9TQUZFVFlfT05fTlVMTF9S
RVRVUk5fVkFMKGxpc3QsIDApOworCisgICAgRXdrX0JhY2tfRm9yd2FyZF9MaXN0X0l0ZW0qIGl0
ZW0gPSBsaXN0LT5pdGVtc0NhY2hlLmdldCh3a0l0ZW0pOworICAgIGlmICghaXRlbSkgeworICAg
ICAgICBpdGVtID0gZXdrX2JhY2tfZm9yd2FyZF9saXN0X2l0ZW1fbmV3KHdrSXRlbSk7CisgICAg
ICAgIGV3a19iYWNrX2ZvcndhcmRfbGlzdF9pdGVtX3JlZihpdGVtKTsgLy8gaW5jcmVhc2UgcmVm
IGNvdW50IGZvciBzdG9yZWQgaXRlbXMuCisgICAgICAgIGxpc3QtPml0ZW1zQ2FjaGUuc2V0KHdr
SXRlbSwgaXRlbSk7CisgICAgfQorCisgICAgcmV0dXJuIGl0ZW07Cit9CisKK0V3a19CYWNrX0Zv
cndhcmRfTGlzdF9JdGVtKiB3ZWJraXRfYmFja19mb3J3YXJkX2xpc3RfY3VycmVudF9pdGVtX2dl
dChFd2tfQmFja19Gb3J3YXJkX0xpc3QqIGxpc3QpCit7CisgICAgRVdLX0JBQ0tfRk9SV0FSRF9M
SVNUX1dLX0dFVF9PUl9SRVRVUk4obGlzdCwgd2tMaXN0LCAwKTsKKyAgICByZXR1cm4gZ2V0T3JD
cmVhdGVJdGVtKGxpc3QsIFdLQmFja0ZvcndhcmRMaXN0R2V0Q3VycmVudEl0ZW0od2tMaXN0KSk7
Cit9CisKK0V3a19CYWNrX0ZvcndhcmRfTGlzdF9JdGVtKiB3ZWJraXRfYmFja19mb3J3YXJkX2xp
c3RfYmFja19pdGVtX2dldChFd2tfQmFja19Gb3J3YXJkX0xpc3QqIGxpc3QpCit7CisgICAgRVdL
X0JBQ0tfRk9SV0FSRF9MSVNUX1dLX0dFVF9PUl9SRVRVUk4obGlzdCwgd2tMaXN0LCAwKTsKKyAg
ICByZXR1cm4gZ2V0T3JDcmVhdGVJdGVtKGxpc3QsIFdLQmFja0ZvcndhcmRMaXN0R2V0QmFja0l0
ZW0od2tMaXN0KSk7Cit9CisKK0V3a19CYWNrX0ZvcndhcmRfTGlzdF9JdGVtKiB3ZWJraXRfYmFj
a19mb3J3YXJkX2xpc3RfZm9yd2FyZF9pdGVtX2dldChFd2tfQmFja19Gb3J3YXJkX0xpc3QqIGxp
c3QpCit7CisgICAgRVdLX0JBQ0tfRk9SV0FSRF9MSVNUX1dLX0dFVF9PUl9SRVRVUk4obGlzdCwg
d2tMaXN0LCAwKTsKKyAgICByZXR1cm4gZ2V0T3JDcmVhdGVJdGVtKGxpc3QsIFdLQmFja0Zvcndh
cmRMaXN0R2V0Rm9yd2FyZEl0ZW0od2tMaXN0KSk7Cit9CisKK0V3a19CYWNrX0ZvcndhcmRfTGlz
dF9JdGVtKiB3ZWJraXRfYmFja19mb3J3YXJkX2xpc3RfaXRlbV9hdF9pbmRleF9nZXQoRXdrX0Jh
Y2tfRm9yd2FyZF9MaXN0KiBsaXN0LCBpbnQgaW5kZXgpCit7CisgICAgRVdLX0JBQ0tfRk9SV0FS
RF9MSVNUX1dLX0dFVF9PUl9SRVRVUk4obGlzdCwgd2tMaXN0LCAwKTsKKyAgICByZXR1cm4gZ2V0
T3JDcmVhdGVJdGVtKGxpc3QsIFdLQmFja0ZvcndhcmRMaXN0R2V0SXRlbUF0SW5kZXgod2tMaXN0
LCBpbmRleCkpOworfQorCit1bnNpZ25lZCB3ZWJraXRfYmFja19mb3J3YXJkX2xpc3RfbGVuZ3Ro
X2dldChFd2tfQmFja19Gb3J3YXJkX0xpc3QqIGxpc3QpCit7CisgICAgRVdLX0JBQ0tfRk9SV0FS
RF9MSVNUX1dLX0dFVF9PUl9SRVRVUk4obGlzdCwgd2tMaXN0LCAwKTsKKyAgICBjb25zdCB1bnNp
Z25lZCBjdXJyZW50SXRlbSA9IHdlYmtpdF9iYWNrX2ZvcndhcmRfbGlzdF9jdXJyZW50X2l0ZW1f
Z2V0KGxpc3QpID8gMSA6IDA7CisgICAgcmV0dXJuIFdLQmFja0ZvcndhcmRMaXN0R2V0QmFja0xp
c3RDb3VudCh3a0xpc3QpICsgV0tCYWNrRm9yd2FyZExpc3RHZXRGb3J3YXJkTGlzdENvdW50KHdr
TGlzdCkgKyBjdXJyZW50SXRlbTsKK30KKworCisvKioKKyAqIEBpbnRlcm5hbAorICogVXBkYXRl
cyBpdGVtcyBjYWNoZS4KKyAqLwordm9pZCBld2tfYmFja19mb3J3YXJkX2xpc3RfY2hhbmdlZChF
d2tfQmFja19Gb3J3YXJkX0xpc3QqIGxpc3QsIFdLQmFja0ZvcndhcmRMaXN0SXRlbVJlZiB3a0Fk
ZGVkSXRlbSwgV0tBcnJheVJlZiB3a1JlbW92ZWRJdGVtcykKK3sKKyAgICAodm9pZClnZXRPckNy
ZWF0ZUl0ZW0obGlzdCwgd2tBZGRlZEl0ZW0pOyAvLyBQdXRzIG5ldyBpdGVtIHRvIHRoZSBjYWNo
ZS4KKworICAgIGNvbnN0IHNpemVfdCByZW1vdmVkSXRlbXNTaXplID0gd2tSZW1vdmVkSXRlbXMg
PyBXS0FycmF5R2V0U2l6ZSh3a1JlbW92ZWRJdGVtcykgOiAwOworICAgIGZvciAoc2l6ZV90IGkg
PSAwOyBpIDwgcmVtb3ZlZEl0ZW1zU2l6ZTsgKytpKSB7CisgICAgICAgIFdLQmFja0ZvcndhcmRM
aXN0SXRlbVJlZiB3a0l0ZW0gPSBzdGF0aWNfY2FzdDxXS0JhY2tGb3J3YXJkTGlzdEl0ZW1SZWY+
KFdLQXJyYXlHZXRJdGVtQXRJbmRleCh3a1JlbW92ZWRJdGVtcywgaSkpOworICAgICAgICBpZiAo
RXdrX0JhY2tfRm9yd2FyZF9MaXN0X0l0ZW0qIGl0ZW0gPSBsaXN0LT5pdGVtc0NhY2hlLnRha2Uo
d2tJdGVtKSkKKyAgICAgICAgICAgIGV3a19iYWNrX2ZvcndhcmRfbGlzdF9pdGVtX3VucmVmKGl0
ZW0pOworICAgIH0KK30KKworLyoqCisgKiBAaW50ZXJuYWwKKyAqIENvbnN0cnVjdHMgYSBFd2tf
QmFja19Gb3J3YXJkX0xpc3QgZnJvbSBhIFdLQmFja0ZvcndhcmRMaXN0UmVmLgorICovCitFd2tf
QmFja19Gb3J3YXJkX0xpc3QqIGV3a19iYWNrX2ZvcndhcmRfbGlzdF9uZXcoV0tCYWNrRm9yd2Fy
ZExpc3RSZWYgd2tCYWNrRm9yd2FyZExpc3RSZWYpCit7CisgICAgRUlOQV9TQUZFVFlfT05fTlVM
TF9SRVRVUk5fVkFMKHdrQmFja0ZvcndhcmRMaXN0UmVmLCAwKTsKKworICAgIHJldHVybiBuZXcg
RXdrX0JhY2tfRm9yd2FyZF9MaXN0KHdrQmFja0ZvcndhcmRMaXN0UmVmKTsKK30KKworLyoqCisg
KiBAaW50ZXJuYWwKKyAqIEZyZWVzIGEgRXdrX0JhY2tfRm9yd2FyZF9MaXN0IG9iamVjdC4KKyAq
Lwordm9pZCBld2tfYmFja19mb3J3YXJkX2xpc3RfZnJlZShFd2tfQmFja19Gb3J3YXJkX0xpc3Qq
IGxpc3QpCit7CisgICAgZGVsZXRlIGxpc3Q7Cit9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0
Mi9VSVByb2Nlc3MvQVBJL2VmbC9ld2tfYmFja19mb3J3YXJkX2xpc3QuaCBiL1NvdXJjZS9XZWJL
aXQyL1VJUHJvY2Vzcy9BUEkvZWZsL2V3a19iYWNrX2ZvcndhcmRfbGlzdC5oCm5ldyBmaWxlIG1v
ZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjA3YzAyZTcKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3Vy
Y2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2VmbC9ld2tfYmFja19mb3J3YXJkX2xpc3QuaApAQCAt
MCwwICsxLDkyIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEyIEludGVsIENvcnBvcmF0aW9u
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4g
c291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9u
LCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisg
KiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0
YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9u
cyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMg
cHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMg
UFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAq
IEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJ
VFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1F
RC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBC
RSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBF
WEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJW
SUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRF
UlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwg
V0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xV
RElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQg
T0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQ
T1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisvKioKKyAqIEBmaWxlICAgIGV3a19i
YWNrX2ZvcndhcmRfbGlzdC5oCisgKiBAYnJpZWYgICBEZXNjcmliZXMgdGhlIEV3ayBCYWNrIEZv
cndhcmQgTGlzdCBBUEkuCisgKi8KKworI2lmbmRlZiBld2tfYmFja19mb3J3YXJkX2xpc3RfaAor
I2RlZmluZSBld2tfYmFja19mb3J3YXJkX2xpc3RfaAorCisjaW5jbHVkZSAiZXdrX2JhY2tfZm9y
d2FyZF9saXN0X2l0ZW0uaCIKKworI2lmZGVmIF9fY3BsdXNwbHVzCitleHRlcm4gIkMiIHsKKyNl
bmRpZgorCisvKiogQ3JlYXRlcyBhIHR5cGUgbmFtZSBmb3IgX0V3a19CYWNrX0ZvcndhcmRfTGlz
dCAqLwordHlwZWRlZiBzdHJ1Y3QgX0V3a19CYWNrX0ZvcndhcmRfTGlzdCBFd2tfQmFja19Gb3J3
YXJkX0xpc3Q7CisKKy8qKgorICogUmV0dXJucyB0aGUgY3VycmVudCBpdGVtIGluIHRoZSBAYSBs
aXN0LgorICoKKyAqIEBwYXJhbSBsaXN0IHRoZSBiYWNrLWZvcndhcmQgbGlzdCBpbnN0YW5jZQor
ICoKKyAqIEByZXR1cm4gdGhlIGN1cnJlbnQgaXRlbSBpbiB0aGUgQGEgbGlzdCBvciBAYyBOVUxM
IGluIGNhc2Ugb2YgZXJyb3IuCisgKi8KK0VBUEkgRXdrX0JhY2tfRm9yd2FyZF9MaXN0X0l0ZW0g
KndlYmtpdF9iYWNrX2ZvcndhcmRfbGlzdF9jdXJyZW50X2l0ZW1fZ2V0KEV3a19CYWNrX0Zvcndh
cmRfTGlzdCAqbGlzdCk7CisKKy8qKgorICogUmV0dXJucyB0aGUgaXRlbSB0aGF0IHByZWNlZGVz
IHRoZSBjdXJyZW50IGl0ZW0gaW4gdGhlIEBhIGxpc3QuCisgKgorICogQHBhcmFtIGxpc3QgdGhl
IGJhY2stZm9yd2FyZCBsaXN0IGluc3RhbmNlCisgKgorICogQHJldHVybiB0aGUgaXRlbSB0aGF0
IHByZWNlZGVzIHRoZSBjdXJyZW50IGl0ZW0gdGhlIEBhIGxpc3Qgb3IgQGMgTlVMTCBpbiBjYXNl
IG9mIGVycm9yLgorICovCitFQVBJIEV3a19CYWNrX0ZvcndhcmRfTGlzdF9JdGVtICp3ZWJraXRf
YmFja19mb3J3YXJkX2xpc3RfYmFja19pdGVtX2dldChFd2tfQmFja19Gb3J3YXJkX0xpc3QgKmxp
c3QpOworCisvKioKKyAqIFJldHVybnMgdGhlIGl0ZW0gdGhhdCBmb2xsb3dzIHRoZSBjdXJyZW50
IGl0ZW0gaW4gdGhlIEBhIGxpc3QuCisgKgorICogQHBhcmFtIGxpc3QgdGhlIGJhY2stZm9yd2Fy
ZCBsaXN0IGluc3RhbmNlCisgKgorICogQHJldHVybiB0aGUgaXRlbSB0aGF0IGZvbGxvd3MgdGhl
IGN1cnJlbnQgaXRlbSBpbiB0aGUgQGEgbGlzdCBvciBAYyBOVUxMIGluIGNhc2Ugb2YgZXJyb3Iu
CisgKi8KK0VBUEkgRXdrX0JhY2tfRm9yd2FyZF9MaXN0X0l0ZW0gKndlYmtpdF9iYWNrX2Zvcndh
cmRfbGlzdF9mb3J3YXJkX2l0ZW1fZ2V0KEV3a19CYWNrX0ZvcndhcmRfTGlzdCAqbGlzdCk7CisK
Ky8qKgorICogUmV0dXJucyB0aGUgaXRlbSBhdCBhIGdpdmVuIEBhIGluZGV4IHJlbGF0aXZlIHRv
IHRoZSBjdXJyZW50IGl0ZW0uCisgKgorICogQHBhcmFtIGxpc3QgdGhlIGJhY2stZm9yd2FyZCBs
aXN0IGluc3RhbmNlCisgKiBAcGFyYW0gaW5kZXggdGhlIGluZGV4IG9mIHRoZSBpdGVtCisgKgor
ICogQHJldHVybiB0aGUgaXRlbSBhdCBhIGdpdmVuIEBhIGluZGV4IHJlbGF0aXZlIHRvIHRoZSBj
dXJyZW50IGl0ZW0gb3IgQGMgTlVMTCBpbiBjYXNlIG9mIGVycm9yLgorICovCitFQVBJIEV3a19C
YWNrX0ZvcndhcmRfTGlzdF9JdGVtICp3ZWJraXRfYmFja19mb3J3YXJkX2xpc3RfaXRlbV9hdF9p
bmRleF9nZXQoRXdrX0JhY2tfRm9yd2FyZF9MaXN0ICpsaXN0LCBpbnQgaW5kZXgpOworCisvKioK
KyAqIFJldHVybnMgdGhlIGxlbmd0aCBvZiB0aGUgYmFjay1mb3J3YXJkIGxpc3QgaW5jbHVkaW5n
IGN1cnJlbnQgaXRlbS4KKyAqCisgKiBAcGFyYW0gbGlzdCB0aGUgYmFjay1mb3J3YXJkIGxpc3Qg
aW5zdGFuY2UKKyAqCisgKiBAcmV0dXJuIHRoZSBsZW5ndGggb2YgdGhlIGJhY2stZm9yd2FyZCBs
aXN0IGluY2x1ZGluZyBjdXJyZW50IGl0ZW0gb3IgQGMgMCBpbiBjYXNlIG9mIGVycm9yLgorICov
CitFQVBJIHVuc2lnbmVkIHdlYmtpdF9iYWNrX2ZvcndhcmRfbGlzdF9sZW5ndGhfZ2V0KEV3a19C
YWNrX0ZvcndhcmRfTGlzdCAqbGlzdCk7CisKKyNpZmRlZiBfX2NwbHVzcGx1cworfQorI2VuZGlm
CisjZW5kaWYgLy8gZXdrX2JhY2tfZm9yd2FyZF9saXN0X2gKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZWZsL2V3a19iYWNrX2ZvcndhcmRfbGlzdF9pdGVtLmNwcCBi
L1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZWZsL2V3a19iYWNrX2ZvcndhcmRfbGlzdF9p
dGVtLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iZjcxM2VmCi0tLSAv
ZGV2L251bGwKKysrIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9lZmwvZXdrX2JhY2tf
Zm9yd2FyZF9saXN0X2l0ZW0uY3BwCkBAIC0wLDAgKzEsMTEwIEBACisvKgorICogQ29weXJpZ2h0
IChDKSAyMDEyIEludGVsIENvcnBvcmF0aW9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAq
IFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGgg
b3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQg
dGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRp
b25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAg
IG5vdGljZSwgdGhpcyBpdGVtIG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVj
ZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgaXRlbSBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0
aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9u
LgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRT
IENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdB
UlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQg
V0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxB
UgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5D
LiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElS
RUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFM
IERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgor
ICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBS
T0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBP
TiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklD
VCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkK
KyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBF
VkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAq
LworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiZXdrX2JhY2tfZm9yd2FyZF9saXN0
X2l0ZW0uaCIKKworI2luY2x1ZGUgIldLQVBJQ2FzdC5oIgorI2luY2x1ZGUgIldLQmFja0Zvcndh
cmRMaXN0SXRlbS5oIgorI2luY2x1ZGUgIldLUmV0YWluUHRyLmgiCisjaW5jbHVkZSAiV0tTdHJp
bmcuaCIKKyNpbmNsdWRlICJXS1VSTC5oIgorI2luY2x1ZGUgPHd0Zi90ZXh0L0NTdHJpbmcuaD4K
KwordXNpbmcgbmFtZXNwYWNlIFdlYktpdDsKKwordGVtcGxhdGUgPHR5cGVuYW1lIFdLUmVmVHlw
ZT4KK2lubGluZSBjb25zdCBjaGFyKiBnZXRJdGVtUHJvcGVydHkoV0tCYWNrRm9yd2FyZExpc3RJ
dGVtUmVmIHJlZiwgY29uc3QgV0tSZWZUeXBlJiB2YWwpCit7CisgICAgQVNTRVJUKHJlZik7Cisg
ICAgV0tSZXRhaW5QdHI8V0tSZWZUeXBlPiB3a1Byb3AoQWRvcHRXSywgdmFsKTsKKyAgICByZXR1
cm4gZWluYV9zdHJpbmdzaGFyZV9hZGQodG9JbXBsKHdrUHJvcC5nZXQoKSktPnN0cmluZygpLnV0
ZjgoKS5kYXRhKCkpOworfQorCisvKioKKyAqIFxzdHJ1Y3QgIF9Fd2tfQmFja19Gb3J3YXJkX0xp
c3QKKyAqIEBicmllZiAgIENvbnRhaW5zIHRoZSBCYWNrIEZvcndhcmQgTGlzdCBkYXRhLgorICov
CitzdHJ1Y3QgX0V3a19CYWNrX0ZvcndhcmRfTGlzdF9JdGVtIHsKKyAgICB1bnNpZ25lZCBpbnQg
X19yZWY7IC8qKjwgdGhlIHJlZmVyZW5jZSBjb3VudCBvZiB0aGUgb2JqZWN0ICovCisgICAgV0tS
ZXRhaW5QdHI8V0tCYWNrRm9yd2FyZExpc3RJdGVtUmVmPiB3a0l0ZW07CisgICAgY29uc3QgY2hh
ciogdXJpOworICAgIGNvbnN0IGNoYXIqIHRpdGxlOworICAgIGNvbnN0IGNoYXIqIG9yaWdpbmFs
VXJpOworCisgICAgX0V3a19CYWNrX0ZvcndhcmRfTGlzdF9JdGVtKFdLQmFja0ZvcndhcmRMaXN0
SXRlbVJlZiBpdGVtUmVmKQorICAgICAgICA6IF9fcmVmKDEpCisgICAgICAgICwgd2tJdGVtKGl0
ZW1SZWYpCisgICAgICAgICwgdXJpKGdldEl0ZW1Qcm9wZXJ0eTxXS1VSTFJlZj4oaXRlbVJlZiwg
V0tCYWNrRm9yd2FyZExpc3RJdGVtQ29weVVSTChpdGVtUmVmKSkpCisgICAgICAgICwgdGl0bGUo
Z2V0SXRlbVByb3BlcnR5PFdLU3RyaW5nUmVmPihpdGVtUmVmLCBXS0JhY2tGb3J3YXJkTGlzdEl0
ZW1Db3B5VGl0bGUoaXRlbVJlZikpKQorICAgICAgICAsIG9yaWdpbmFsVXJpKGdldEl0ZW1Qcm9w
ZXJ0eTxXS1VSTFJlZj4oaXRlbVJlZiwgV0tCYWNrRm9yd2FyZExpc3RJdGVtQ29weU9yaWdpbmFs
VVJMKGl0ZW1SZWYpKSkKKyAgICB7IH0KKworICAgIH5fRXdrX0JhY2tfRm9yd2FyZF9MaXN0X0l0
ZW0oKQorICAgIHsKKyAgICAgICAgQVNTRVJUKCFfX3JlZik7CisgICAgICAgIGVpbmFfc3RyaW5n
c2hhcmVfZGVsKHVyaSk7CisgICAgICAgIGVpbmFfc3RyaW5nc2hhcmVfZGVsKHRpdGxlKTsKKyAg
ICAgICAgZWluYV9zdHJpbmdzaGFyZV9kZWwob3JpZ2luYWxVcmkpOworICAgIH0KK307CisKK3Zv
aWQgZXdrX2JhY2tfZm9yd2FyZF9saXN0X2l0ZW1fcmVmKEV3a19CYWNrX0ZvcndhcmRfTGlzdF9J
dGVtKiBpdGVtKQoreworICAgIEVJTkFfU0FGRVRZX09OX05VTExfUkVUVVJOKGl0ZW0pOworICAg
ICsraXRlbS0+X19yZWY7Cit9CisKK3ZvaWQgZXdrX2JhY2tfZm9yd2FyZF9saXN0X2l0ZW1fdW5y
ZWYoRXdrX0JhY2tfRm9yd2FyZF9MaXN0X0l0ZW0qIGl0ZW0pCit7CisgICAgRUlOQV9TQUZFVFlf
T05fTlVMTF9SRVRVUk4oaXRlbSk7CisKKyAgICBpZiAoIS0taXRlbS0+X19yZWYpCisgICAgICAg
IGRlbGV0ZSBpdGVtOworfQorCitjb25zdCBjaGFyKiBld2tfYmFja19mb3J3YXJkX2xpc3RfaXRl
bV91cmlfZ2V0KGNvbnN0IEV3a19CYWNrX0ZvcndhcmRfTGlzdF9JdGVtKiBpdGVtKQoreworICAg
IEVJTkFfU0FGRVRZX09OX05VTExfUkVUVVJOX1ZBTChpdGVtLCAwKTsKKyAgICByZXR1cm4gaXRl
bS0+dXJpOworfQorCitjb25zdCBjaGFyKiBld2tfYmFja19mb3J3YXJkX2xpc3RfaXRlbV90aXRs
ZV9nZXQoY29uc3QgRXdrX0JhY2tfRm9yd2FyZF9MaXN0X0l0ZW0qIGl0ZW0pCit7CisgICAgRUlO
QV9TQUZFVFlfT05fTlVMTF9SRVRVUk5fVkFMKGl0ZW0sIDApOworICAgIHJldHVybiBpdGVtLT50
aXRsZTsKK30KKworY29uc3QgY2hhciogZXdrX2JhY2tfZm9yd2FyZF9saXN0X2l0ZW1fb3JpZ2lu
YWxfdXJpX2dldChjb25zdCBFd2tfQmFja19Gb3J3YXJkX0xpc3RfSXRlbSogaXRlbSkKK3sKKyAg
ICBFSU5BX1NBRkVUWV9PTl9OVUxMX1JFVFVSTl9WQUwoaXRlbSwgMCk7CisgICAgcmV0dXJuIGl0
ZW0tPm9yaWdpbmFsVXJpOworfQorCitFd2tfQmFja19Gb3J3YXJkX0xpc3RfSXRlbSogZXdrX2Jh
Y2tfZm9yd2FyZF9saXN0X2l0ZW1fbmV3KFdLQmFja0ZvcndhcmRMaXN0SXRlbVJlZiBiYWNrRm9y
d2FyZExpc3RJdGVtRGF0YSkKK3sKKyAgICBFSU5BX1NBRkVUWV9PTl9OVUxMX1JFVFVSTl9WQUwo
YmFja0ZvcndhcmRMaXN0SXRlbURhdGEsIDApOworICAgIHJldHVybiBld2tfYmFja19mb3J3YXJk
X2xpc3RfaXRlbV9uZXcoYmFja0ZvcndhcmRMaXN0SXRlbURhdGEpOworfQpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9lZmwvZXdrX2JhY2tfZm9yd2FyZF9saXN0X2l0
ZW0uaCBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZWZsL2V3a19iYWNrX2ZvcndhcmRf
bGlzdF9pdGVtLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjcyZTAxOAot
LS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZWZsL2V3a19i
YWNrX2ZvcndhcmRfbGlzdF9pdGVtLmgKQEAgLTAsMCArMSw5NCBAQAorLyoKKyAqIENvcHlyaWdo
dCAoQykgMjAxMiBJbnRlbCBDb3Jwb3JhdGlvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisg
KiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRo
IG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0
IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0
aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1
Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRh
dGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlv
bi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElU
UyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBX
QVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVE
IFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VM
QVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElO
Qy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJ
UkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElB
TCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YK
KyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQ
Uk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQg
T04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJ
Q1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0Up
CisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwg
RVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisg
Ki8KKworLyoqCisgKiBAZmlsZSAgICBld2tfYmFja19mb3J3YXJkX2xpc3RfaXRlbS5oCisgKiBA
YnJpZWYgICBEZXNjcmliZXMgdGhlIEV3ayBCYWNrIEZvcndhcmQgTGlzdCBJdGVtIEFQSS4KKyAq
LworCisjaWZuZGVmIGV3a19iYWNrX2ZvcndhcmRfbGlzdF9pdGVtX2gKKyNkZWZpbmUgZXdrX2Jh
Y2tfZm9yd2FyZF9saXN0X2l0ZW1faAorCisjaW5jbHVkZSA8RWluYS5oPgorCisjaWZkZWYgX19j
cGx1c3BsdXMKK2V4dGVybiAiQyIgeworI2VuZGlmCisKKy8qKiBDcmVhdGVzIGEgdHlwZSBuYW1l
IGZvciBfRXdrX0JhY2tfRm9yd2FyZF9MaXN0X0l0ZW0gKi8KK3R5cGVkZWYgc3RydWN0IF9Fd2tf
QmFja19Gb3J3YXJkX0xpc3RfSXRlbSBFd2tfQmFja19Gb3J3YXJkX0xpc3RfSXRlbTsKKworLyoq
CisgKiBJbmNyZWFzZXMgdGhlIHJlZmVyZW5jZSBjb3VudCBvZiB0aGUgZ2l2ZW4gb2JqZWN0Lgor
ICoKKyAqIEBwYXJhbSBpdGVtIHRoZSBiYWNrLWZvcndhcmQgbGlzdCBpdGVtIGluc3RhbmNlIHRv
IGluY3JlYXNlIHRoZSByZWZlcmVuY2UgY291bnQKKyAqLworRUFQSSB2b2lkIGV3a19iYWNrX2Zv
cndhcmRfbGlzdF9pdGVtX3JlZihFd2tfQmFja19Gb3J3YXJkX0xpc3RfSXRlbSAqaXRlbSk7CisK
Ky8qKgorICogRGVjcmVhc2VzIHRoZSByZWZlcmVuY2UgY291bnQgb2YgdGhlIGdpdmVuIG9iamVj
dCwgcG9zc2libHkgZnJlZWluZyBpdC4KKyAqCisgKiBXaGVuIHRoZSByZWZlcmVuY2UgY291bnQg
cmVhY2hlcyAwLCB0aGUgaXRlbSBpcyBmcmVlZC4KKyAqCisgKiBAcGFyYW0gaXRlbSB0aGUgYmFj
ay1mb3J3YXJkIGxpc3QgaXRlbSBpbnN0YW5jZSB0byBkZWNyZWFzZSB0aGUgcmVmZXJlbmNlIGNv
dW50CisgKi8KK0VBUEkgdm9pZCBld2tfYmFja19mb3J3YXJkX2xpc3RfaXRlbV91bnJlZihFd2tf
QmFja19Gb3J3YXJkX0xpc3RfSXRlbSAqaXRlbSk7CisKKy8qKgorICogUmV0dW5zIFVSSSBvZiB0
aGUgaXRlbS4KKyAqCisgKiBUaGUgcmV0dXJuZWQgVVJJIG1heSBkaWZmZXIgZnJvbSB0aGUgb3Jp
Z2luYWwgVVJJLgorICogQHNhIGV3a19iYWNrX2ZvcndhcmRfbGlzdF9pdGVtX29yaWdpbmFsX3Vy
aV9nZXQoKS4KKyAqCisgKiBAcGFyYW0gaXRlbSB0aGUgYmFjay1mb3J3YXJkIGxpc3QgaXRlbSBp
bnN0YW5jZQorICoKKyAqIEByZXR1cm4gdGhlIFVSSSBvZiB0aGUgQGEgaXRlbSBvciBAYyBOVUxM
IGluIGNhc2Ugb2YgZXJyb3IuCisgKi8KK0VBUEkgY29uc3QgY2hhciAqZXdrX2JhY2tfZm9yd2Fy
ZF9saXN0X2l0ZW1fdXJpX2dldChjb25zdCBFd2tfQmFja19Gb3J3YXJkX0xpc3RfSXRlbSAqaXRl
bSk7CisKKy8qKgorICogUmV0dW5zIHRpdGxlIG9mIHRoZSBpdGVtLgorICoKKyAqIEBwYXJhbSBp
dGVtIHRoZSBiYWNrLWZvcndhcmQgbGlzdCBpdGVtIGluc3RhbmNlCisgKgorICogQHJldHVybiB0
aGUgdGl0bGUgb2YgdGhlIEBhIGl0ZW0gb3IgQGMgTlVMTCBpbiBjYXNlIG9mIGVycm9yLgorICov
CitFQVBJIGNvbnN0IGNoYXIgKmV3a19iYWNrX2ZvcndhcmRfbGlzdF9pdGVtX3RpdGxlX2dldChj
b25zdCBFd2tfQmFja19Gb3J3YXJkX0xpc3RfSXRlbSAqaXRlbSk7CisKKy8qKgorICogUmV0dW5z
IG9yaWdpbmFsIFVSSSBvZiB0aGUgaXRlbS4KKyAqCisgKiBAc2EgZXdrX2JhY2tfZm9yd2FyZF9s
aXN0X2l0ZW1fdXJpX2dldCgpLgorICoKKyAqIEBwYXJhbSBpdGVtIHRoZSBiYWNrLWZvcndhcmQg
bGlzdCBpdGVtIGluc3RhbmNlCisgKgorICogQHJldHVybiB0aGUgb3JpZ2luYWwgVVJJIG9mIHRo
ZSBAYSBpdGVtIG9yIEBjIE5VTEwgaW4gY2FzZSBvZiBlcnJvci4KKyAqLworRUFQSSBjb25zdCBj
aGFyICpld2tfYmFja19mb3J3YXJkX2xpc3RfaXRlbV9vcmlnaW5hbF91cmlfZ2V0KGNvbnN0IEV3
a19CYWNrX0ZvcndhcmRfTGlzdF9JdGVtICppdGVtKTsKKworI2lmZGVmIF9fY3BsdXNwbHVzCit9
CisjZW5kaWYKKyNlbmRpZiAvLyBld2tfYmFja19mb3J3YXJkX2xpc3RfaXRlbV9oCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2VmbC9ld2tfYmFja19mb3J3YXJkX2xp
c3RfaXRlbV9wcml2YXRlLmggYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2VmbC9ld2tf
YmFja19mb3J3YXJkX2xpc3RfaXRlbV9wcml2YXRlLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5k
ZXggMDAwMDAwMC4uOGMyYzY4NAotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJLaXQyL1VJ
UHJvY2Vzcy9BUEkvZWZsL2V3a19iYWNrX2ZvcndhcmRfbGlzdF9pdGVtX3ByaXZhdGUuaApAQCAt
MCwwICsxLDM1IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEyIEludGVsIENvcnBvcmF0aW9u
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4g
c291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9u
LCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisg
KiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0
YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBpdGVtIG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9u
cyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAg
ICBub3RpY2UsIHRoaXMgaXRlbSBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMg
cHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMg
UFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAq
IEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJ
VFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1F
RC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBC
RSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBF
WEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJW
SUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRF
UlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwg
V0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xV
RElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQg
T0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQ
T1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaWZuZGVmIGV3a19iYWNrX2Zvcndh
cmRfbGlzdF9pdGVtX3ByaXZhdGVfaAorI2RlZmluZSBld2tfYmFja19mb3J3YXJkX2xpc3RfaXRl
bV9wcml2YXRlX2gKKworI2luY2x1ZGUgPFdlYktpdDIvV0tCYXNlLmg+CisKK3R5cGVkZWYgc3Ry
dWN0IF9Fd2tfQmFja19Gb3J3YXJkX0xpc3RfSXRlbSBFd2tfQmFja19Gb3J3YXJkX0xpc3RfSXRl
bTsKKworRXdrX0JhY2tfRm9yd2FyZF9MaXN0X0l0ZW0qIGV3a19iYWNrX2ZvcndhcmRfbGlzdF9p
dGVtX25ldyhXS0JhY2tGb3J3YXJkTGlzdEl0ZW1SZWYgd2tCYWNrRm9yd2FyZExpc3RJdGVtUmVm
KTsKKworI2VuZGlmIC8vIGV3a19iYWNrX2ZvcndhcmRfbGlzdF9wcml2YXRlX2gKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZWZsL2V3a19iYWNrX2ZvcndhcmRfbGlz
dF9wcml2YXRlLmggYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2VmbC9ld2tfYmFja19m
b3J3YXJkX2xpc3RfcHJpdmF0ZS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAu
LjU5MmE0ZjQKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJ
L2VmbC9ld2tfYmFja19mb3J3YXJkX2xpc3RfcHJpdmF0ZS5oCkBAIC0wLDAgKzEsMzcgQEAKKy8q
CisgKiBDb3B5cmlnaHQgKEMpIDIwMTIgSW50ZWwgQ29ycG9yYXRpb24uIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFy
eSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQg
cHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAx
LiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNv
cHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3Jt
IG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAq
ICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRo
ZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBM
RSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNT
IE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisg
KiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBG
T1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBT
SEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5Z
IERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAq
IENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBS
T0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVT
RSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZF
UiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBD
T05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0Ug
T1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRI
SVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNV
Q0ggREFNQUdFLgorICovCisKKyNpZm5kZWYgZXdrX2JhY2tfZm9yd2FyZF9saXN0X3ByaXZhdGVf
aAorI2RlZmluZSBld2tfYmFja19mb3J3YXJkX2xpc3RfcHJpdmF0ZV9oCisKKyNpbmNsdWRlIDxX
ZWJLaXQyL1dLQmFzZS5oPgorCit0eXBlZGVmIHN0cnVjdCBfRXdrX0JhY2tfRm9yd2FyZF9MaXN0
IEV3a19CYWNrX0ZvcndhcmRfTGlzdDsKKwordm9pZCBld2tfYmFja19mb3J3YXJkX2xpc3RfY2hh
bmdlZChFd2tfQmFja19Gb3J3YXJkX0xpc3QqLCBXS0JhY2tGb3J3YXJkTGlzdEl0ZW1SZWYgd2tB
ZGRlZEl0ZW0sIFdLQXJyYXlSZWYgd2tSZW1vdmVkSXRlbXMpOworRXdrX0JhY2tfRm9yd2FyZF9M
aXN0KiBld2tfYmFja19mb3J3YXJkX2xpc3RfbmV3KFdLQmFja0ZvcndhcmRMaXN0UmVmIHdrQmFj
a0ZvcndhcmRMaXN0UmVmKTsKK3ZvaWQgZXdrX2JhY2tfZm9yd2FyZF9saXN0X2ZyZWUoRXdrX0Jh
Y2tfRm9yd2FyZF9MaXN0KiBsaXN0KTsKKworI2VuZGlmIC8vIGV3a19iYWNrX2ZvcndhcmRfbGlz
dF9wcml2YXRlX2gKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZWZs
L2V3a192aWV3LmNwcCBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZWZsL2V3a192aWV3
LmNwcAppbmRleCBlZDJmYTE5Li5jYTM0MTY3IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9V
SVByb2Nlc3MvQVBJL2VmbC9ld2tfdmlldy5jcHAKKysrIGIvU291cmNlL1dlYktpdDIvVUlQcm9j
ZXNzL0FQSS9lZmwvZXdrX3ZpZXcuY3BwCkBAIC0yOSw2ICsyOSw3IEBACiAjaW5jbHVkZSAiV0tS
ZXRhaW5QdHIuaCIKICNpbmNsdWRlICJXS1N0cmluZy5oIgogI2luY2x1ZGUgIldLVVJMLmgiCisj
aW5jbHVkZSAiZXdrX2JhY2tfZm9yd2FyZF9saXN0X3ByaXZhdGUuaCIKICNpbmNsdWRlICJld2tf
Y29udGV4dC5oIgogI2luY2x1ZGUgImV3a19jb250ZXh0X3ByaXZhdGUuaCIKICNpbmNsdWRlICJl
d2tfaW50ZW50X3ByaXZhdGUuaCIKQEAgLTYyLDYgKzYzLDcgQEAgc3RydWN0IF9Fd2tfVmlld19Q
cml2YXRlX0RhdGEgewogICAgIGNvbnN0IGNoYXIqIGN1cnNvckdyb3VwOwogICAgIEV2YXNfT2Jq
ZWN0KiBjdXJzb3JPYmplY3Q7CiAgICAgTG9hZGluZ1Jlc291cmNlc01hcCBsb2FkaW5nUmVzb3Vy
Y2VzTWFwOworICAgIEV3a19CYWNrX0ZvcndhcmRfTGlzdCogYmFja0ZvcndhcmRMaXN0OwogCiAj
aWZkZWYgSEFWRV9FQ09SRV9YCiAgICAgYm9vbCBpc1VzaW5nRWNvcmVYOwpAQCAtNzQsMTAgKzc2
LDEzIEBAIHN0cnVjdCBfRXdrX1ZpZXdfUHJpdmF0ZV9EYXRhIHsKICAgICAgICAgLCBjdXN0b21F
bmNvZGluZygwKQogICAgICAgICAsIGN1cnNvckdyb3VwKDApCiAgICAgICAgICwgY3Vyc29yT2Jq
ZWN0KDApCisgICAgICAgICwgYmFja0ZvcndhcmRMaXN0KGV3a19iYWNrX2ZvcndhcmRfbGlzdF9u
ZXcodG9BUEkocGFnZUNsaWVudC0+cGFnZSgpLT5iYWNrRm9yd2FyZExpc3QoKSkpKQogI2lmZGVm
IEhBVkVfRUNPUkVfWAogICAgICAgICAsIGlzVXNpbmdFY29yZVgoZmFsc2UpCiAjZW5kaWYKLSAg
ICB7IH0KKyAgICB7CisgICAgICAgIEFTU0VSVChiYWNrRm9yd2FyZExpc3QpOyAvLyBDYW5ub3Qg
YmUgMAorICAgIH0KIAogICAgIH5fRXdrX1ZpZXdfUHJpdmF0ZV9EYXRhKCkKICAgICB7CkBAIC04
OSw2ICs5NCw4IEBAIHN0cnVjdCBfRXdrX1ZpZXdfUHJpdmF0ZV9EYXRhIHsKIAogICAgICAgICBp
ZiAoY3Vyc29yT2JqZWN0KQogICAgICAgICAgICAgZXZhc19vYmplY3RfZGVsKGN1cnNvck9iamVj
dCk7CisKKyAgICAgICAgZXdrX2JhY2tfZm9yd2FyZF9saXN0X2ZyZWUoYmFja0ZvcndhcmRMaXN0
KTsKICAgICB9CiB9OwogCkBAIC05NDEsNiArOTQ4LDE0IEBAIEVpbmFfQm9vbCBld2tfdmlld19m
b3J3YXJkX3Bvc3NpYmxlKEV2YXNfT2JqZWN0KiBld2tWaWV3KQogICAgIHJldHVybiBXS1BhZ2VD
YW5Hb0ZvcndhcmQodG9BUEkocHJpdi0+cGFnZUNsaWVudC0+cGFnZSgpKSk7CiB9CiAKK0V3a19C
YWNrX0ZvcndhcmRfTGlzdCogZXdrX3ZpZXdfYmFja19mb3J3YXJkX2xpc3RfZ2V0KGNvbnN0IEV2
YXNfT2JqZWN0KiBld2tWaWV3KQoreworICAgIEVXS19WSUVXX1NEX0dFVF9PUl9SRVRVUk4oZXdr
Vmlldywgc21hcnREYXRhLCBmYWxzZSk7CisgICAgRVdLX1ZJRVdfUFJJVl9HRVRfT1JfUkVUVVJO
KHNtYXJ0RGF0YSwgcHJpdiwgZmFsc2UpOworCisgICAgcmV0dXJuIHByaXYtPmJhY2tGb3J3YXJk
TGlzdDsKK30KKwogdm9pZCBld2tfdmlld19pbWFnZV9kYXRhX3NldChFdmFzX09iamVjdCogZXdr
Vmlldywgdm9pZCogaW1hZ2VEYXRhLCBjb25zdCBJbnRTaXplJiBzaXplKQogewogICAgIEVXS19W
SUVXX1NEX0dFVF9PUl9SRVRVUk4oZXdrVmlldywgc21hcnREYXRhKTsKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZWZsL2V3a192aWV3LmggYi9Tb3VyY2UvV2ViS2l0
Mi9VSVByb2Nlc3MvQVBJL2VmbC9ld2tfdmlldy5oCmluZGV4IDVkNjlkZjQuLjJiMjQ3ZWYgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZWZsL2V3a192aWV3LmgKKysr
IGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9lZmwvZXdrX3ZpZXcuaApAQCAtNTIsNiAr
NTIsNyBAQAogI2lmbmRlZiBld2tfdmlld19oCiAjZGVmaW5lIGV3a192aWV3X2gKIAorI2luY2x1
ZGUgImV3a19iYWNrX2ZvcndhcmRfbGlzdC5oIgogI2luY2x1ZGUgImV3a19jb250ZXh0LmgiCiAj
aW5jbHVkZSAiZXdrX2ludGVudC5oIgogI2luY2x1ZGUgImV3a191cmxfcmVxdWVzdC5oIgpAQCAt
MzA5LDYgKzMxMCwyMiBAQCBFQVBJIEVpbmFfQm9vbCAgICBld2tfdmlld19iYWNrX3Bvc3NpYmxl
KEV2YXNfT2JqZWN0ICpvKTsKIEVBUEkgRWluYV9Cb29sICAgIGV3a192aWV3X2ZvcndhcmRfcG9z
c2libGUoRXZhc19PYmplY3QgKm8pOwogCiAvKioKKyAqIEdldHMgdGhlIGJhY2stZm9yd2FyZCBs
aXN0IGFzc29jaWF0ZWQgd2l0aCB0aGlzIHZpZXcuCisgKgorICogVGhlIHJldHVybmVkIGluc3Rh
bmNlIGlzIHVuaXF1ZSBmb3IgdGhpcyB2aWV3IGFuZCB0aHVzIG11bHRpcGxlIGNhbGxzCisgKiB0
byB0aGlzIGZ1bmN0aW9uIHdpdGggdGhlIHNhbWUgdmlldyBhcyBwYXJhbWV0ZXIgcmV0dXJucyB0
aGUgc2FtZQorICogaGFuZGxlLiBUaGlzIGhhbmRsZSBpcyBhbGl2ZSB3aGlsZSB2aWV3IGlzIGFs
aXZlLCB0aHVzIG9uZQorICogbWlnaHQgd2FudCB0byBsaXN0ZW4gZm9yIEVWQVNfQ0FMTEJBQ0tf
REVMIG9uIGdpdmVuIHZpZXcKKyAqIChAYSBvKSB0byBrbm93IHdoZW4gdG8gc3RvcCB1c2luZyBy
ZXR1cm5lZCBoYW5kbGUuCisgKgorICogQHBhcmFtIG8gdmlldyBvYmplY3QgdG8gZ2V0IG5hdmln
YXRpb24gYmFjay1mb3J3YXJkIGxpc3QKKyAqCisgKiBAcmV0dXJuIHRoZSBiYWNrLWZvcndhcmQg
bGlzdCBpbnN0YW5jZSBoYW5kbGUgYXNzb2NpYXRlZCB3aXRoIHRoaXMKKyAqICAgICAgICAgdmll
dy4KKyAqLworRUFQSSBFd2tfQmFja19Gb3J3YXJkX0xpc3QgKmV3a192aWV3X2JhY2tfZm9yd2Fy
ZF9saXN0X2dldChjb25zdCBFdmFzX09iamVjdCAqbyk7CisKKy8qKgogICogR2V0cyB0aGUgY3Vy
cmVudCB0aXRsZSBvZiB0aGUgbWFpbiBmcmFtZS4KICAqCiAgKiBJdCByZXR1cm5zIGFuIGludGVy
bmFsIHN0cmluZyBhbmQgc2hvdWxkIG5vdApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvVUlQ
cm9jZXNzL0FQSS9lZmwvZXdrX3ZpZXdfbG9hZGVyX2NsaWVudC5jcHAgYi9Tb3VyY2UvV2ViS2l0
Mi9VSVByb2Nlc3MvQVBJL2VmbC9ld2tfdmlld19sb2FkZXJfY2xpZW50LmNwcAppbmRleCBjYzhi
MTIwLi5lNzdkNjEzIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2Vm
bC9ld2tfdmlld19sb2FkZXJfY2xpZW50LmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nl
c3MvQVBJL2VmbC9ld2tfdmlld19sb2FkZXJfY2xpZW50LmNwcApAQCAtMjYsMTAgKzI2LDEyIEBA
CiAjaW5jbHVkZSAiY29uZmlnLmgiCiAKICNpbmNsdWRlICJXS0ZyYW1lLmgiCisjaW5jbHVkZSAi
ZXdrX2JhY2tfZm9yd2FyZF9saXN0X3ByaXZhdGUuaCIKICNpbmNsdWRlICJld2tfaW50ZW50Lmgi
CiAjaW5jbHVkZSAiZXdrX2ludGVudF9wcml2YXRlLmgiCiAjaW5jbHVkZSAiZXdrX2ludGVudF9z
ZXJ2aWNlLmgiCiAjaW5jbHVkZSAiZXdrX2ludGVudF9zZXJ2aWNlX3ByaXZhdGUuaCIKKyNpbmNs
dWRlICJld2tfdmlldy5oIgogI2luY2x1ZGUgImV3a192aWV3X2xvYWRlcl9jbGllbnRfcHJpdmF0
ZS5oIgogI2luY2x1ZGUgImV3a192aWV3X3ByaXZhdGUuaCIKICNpbmNsdWRlICJld2tfd2ViX2Vy
cm9yLmgiCkBAIC0xMjMsNiArMTI1LDE0IEBAIHN0YXRpYyB2b2lkIGRpZEZhaWxQcm92aXNpb25h
bExvYWRXaXRoRXJyb3JGb3JGcmFtZShXS1BhZ2VSZWYgcGFnZSwgV0tGcmFtZVJlZiBmCiAgICAg
ZXdrX3dlYl9lcnJvcl9mcmVlKGV3a0Vycm9yKTsKIH0KIAorc3RhdGljIHZvaWQgZGlkQ2hhbmdl
QmFja0ZvcndhcmRMaXN0KFdLUGFnZVJlZiBwYWdlLCBXS0JhY2tGb3J3YXJkTGlzdEl0ZW1SZWYg
YWRkZWRJdGVtLCBXS0FycmF5UmVmIHJlbW92ZWRJdGVtcywgY29uc3Qgdm9pZCogY2xpZW50SW5m
bykKK3sKKyAgICBFdmFzX09iamVjdCogZXdrVmlldyA9IHN0YXRpY19jYXN0PEV2YXNfT2JqZWN0
Kj4oY29uc3RfY2FzdDx2b2lkKj4oY2xpZW50SW5mbykpOworICAgIEFTU0VSVChld2tWaWV3KTsK
KworICAgIGV3a19iYWNrX2ZvcndhcmRfbGlzdF9jaGFuZ2VkKGV3a192aWV3X2JhY2tfZm9yd2Fy
ZF9saXN0X2dldChld2tWaWV3KSwgYWRkZWRJdGVtLCByZW1vdmVkSXRlbXMpOworfQorCiB2b2lk
IGV3a192aWV3X2xvYWRlcl9jbGllbnRfYXR0YWNoKFdLUGFnZVJlZiBwYWdlUmVmLCBFdmFzX09i
amVjdCogZXdrVmlldykKIHsKICAgICBXS1BhZ2VMb2FkZXJDbGllbnQgbG9hZENsaWVudDsKQEAg
LTE0NCw1ICsxNTQsNiBAQCB2b2lkIGV3a192aWV3X2xvYWRlcl9jbGllbnRfYXR0YWNoKFdLUGFn
ZVJlZiBwYWdlUmVmLCBFdmFzX09iamVjdCogZXdrVmlldykKICAgICBsb2FkQ2xpZW50LmRpZFN0
YXJ0UHJvdmlzaW9uYWxMb2FkRm9yRnJhbWUgPSBkaWRTdGFydFByb3Zpc2lvbmFsTG9hZEZvckZy
YW1lOwogICAgIGxvYWRDbGllbnQuZGlkUmVjZWl2ZVNlcnZlclJlZGlyZWN0Rm9yUHJvdmlzaW9u
YWxMb2FkRm9yRnJhbWUgPSBkaWRSZWNlaXZlU2VydmVyUmVkaXJlY3RGb3JQcm92aXNpb25hbExv
YWRGb3JGcmFtZTsKICAgICBsb2FkQ2xpZW50LmRpZEZhaWxQcm92aXNpb25hbExvYWRXaXRoRXJy
b3JGb3JGcmFtZSA9IGRpZEZhaWxQcm92aXNpb25hbExvYWRXaXRoRXJyb3JGb3JGcmFtZTsKKyAg
ICBsb2FkQ2xpZW50LmRpZENoYW5nZUJhY2tGb3J3YXJkTGlzdCA9IGRpZENoYW5nZUJhY2tGb3J3
YXJkTGlzdDsKICAgICBXS1BhZ2VTZXRQYWdlTG9hZGVyQ2xpZW50KHBhZ2VSZWYsICZsb2FkQ2xp
ZW50KTsKIH0K
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>154928</attachid>
            <date>2012-07-27 06:34:39 -0700</date>
            <delta_ts>2012-07-27 06:56:43 -0700</delta_ts>
            <desc>patch v2</desc>
            <filename>bug92345_v2</filename>
            <type>text/plain</type>
            <size>32792</size>
            <attacher name="Mikhail Pozdnyakov">mikhail.pozdnyakov</attacher>
            
              <data encoding="base64">Y29tbWl0IGYxYjY0M2I3ZTc4YzJkOTE4MjllY2NiYmIxM2U0ODRlM2I5NGJhMDYKQXV0aG9yOiBN
aWtoYWlsIFBvemRueWFrb3YgPG1pa2hhaWwucG96ZG55YWtvdkBpbnRlbC5jb20+CkRhdGU6ICAg
RnJpIEp1bCAyNyAxMzowOToyOSAyMDEyICswMzAwCgogICAgYnVnOTIzNDUKCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViS2l0Mi9DaGFuZ2VMb2cgYi9Tb3VyY2UvV2ViS2l0Mi9DaGFuZ2VMb2cKaW5k
ZXggZTkzZjhmNC4uZmY3MmU5MyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvQ2hhbmdlTG9n
CisrKyBiL1NvdXJjZS9XZWJLaXQyL0NoYW5nZUxvZwpAQCAtMSwzICsxLDUyIEBACisyMDEyLTA3
LTI3ICBNaWtoYWlsIFBvemRueWFrb3YgIDxtaWtoYWlsLnBvemRueWFrb3ZAaW50ZWwuY29tPgor
CisgICAgICAgIFtFRkxdW1dLMl0gQWRkIGJhY2sgZm9yd2FyZCBsaXN0IEFQSQorICAgICAgICBo
dHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9OTIzNDUKKworICAgICAgICBS
ZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBBZGRlZCBuZXcgQmFjayBGb3J3
YXJkIGxpc3QgQVBJIHRvIEVGTCBXSzIuIEV3a19CYWNrX0ZvcndhcmRfTGlzdCBhbmQKKyAgICAg
ICAgRXdrX0JhY2tfRm9yd2FyZF9MaXN0X0l0ZW0gc3RydWN0dXJlcyB3ZXJlIGFkZGVkLiBUaGUg
bmV3IEFQSSBpcworICAgICAgICBtb3N0bHkgdGhlIHNhbWUgYXMgb25lIGZyb20gVUlQcm9jZXNz
L0FQSS9DL3sgV0tCYWNrRm9yd2FyZExpc3QuaCwgV0tCYWNrRm9yd2FyZExpc3RJdGVtLmggfS4K
KworICAgICAgICAqIFBsYXRmb3JtRWZsLmNtYWtlOgorICAgICAgICAqIFVJUHJvY2Vzcy9BUEkv
ZWZsL2V3a19iYWNrX2ZvcndhcmRfbGlzdC5jcHA6IEFkZGVkLgorICAgICAgICAoX0V3a19CYWNr
X0ZvcndhcmRfTGlzdCk6CisgICAgICAgIChfRXdrX0JhY2tfRm9yd2FyZF9MaXN0OjpfRXdrX0Jh
Y2tfRm9yd2FyZF9MaXN0KToKKyAgICAgICAgKGdldE9yQ3JlYXRlSXRlbSk6CisgICAgICAgICh3
ZWJraXRfYmFja19mb3J3YXJkX2xpc3RfY3VycmVudF9pdGVtX2dldCk6CisgICAgICAgICh3ZWJr
aXRfYmFja19mb3J3YXJkX2xpc3RfYmFja19pdGVtX2dldCk6CisgICAgICAgICh3ZWJraXRfYmFj
a19mb3J3YXJkX2xpc3RfZm9yd2FyZF9pdGVtX2dldCk6CisgICAgICAgICh3ZWJraXRfYmFja19m
b3J3YXJkX2xpc3RfaXRlbV9hdF9pbmRleF9nZXQpOgorICAgICAgICAod2Via2l0X2JhY2tfZm9y
d2FyZF9saXN0X2xlbmd0aF9nZXQpOgorICAgICAgICAoZXdrX2JhY2tfZm9yd2FyZF9saXN0X2No
YW5nZWQpOgorICAgICAgICAoZXdrX2JhY2tfZm9yd2FyZF9saXN0X25ldyk6CisgICAgICAgIChl
d2tfYmFja19mb3J3YXJkX2xpc3RfZnJlZSk6CisgICAgICAgICogVUlQcm9jZXNzL0FQSS9lZmwv
ZXdrX2JhY2tfZm9yd2FyZF9saXN0Lmg6IEFkZGVkLgorICAgICAgICAqIFVJUHJvY2Vzcy9BUEkv
ZWZsL2V3a19iYWNrX2ZvcndhcmRfbGlzdF9pdGVtLmNwcDogQWRkZWQuCisgICAgICAgIChnZXRJ
dGVtUHJvcGVydHkpOgorICAgICAgICAoX0V3a19CYWNrX0ZvcndhcmRfTGlzdF9JdGVtKToKKyAg
ICAgICAgKF9Fd2tfQmFja19Gb3J3YXJkX0xpc3RfSXRlbTo6X0V3a19CYWNrX0ZvcndhcmRfTGlz
dF9JdGVtKToKKyAgICAgICAgKF9Fd2tfQmFja19Gb3J3YXJkX0xpc3RfSXRlbTo6fl9Fd2tfQmFj
a19Gb3J3YXJkX0xpc3RfSXRlbSk6CisgICAgICAgIChld2tfYmFja19mb3J3YXJkX2xpc3RfaXRl
bV9yZWYpOgorICAgICAgICAoZXdrX2JhY2tfZm9yd2FyZF9saXN0X2l0ZW1fdW5yZWYpOgorICAg
ICAgICAoZXdrX2JhY2tfZm9yd2FyZF9saXN0X2l0ZW1fdXJpX2dldCk6CisgICAgICAgIChld2tf
YmFja19mb3J3YXJkX2xpc3RfaXRlbV90aXRsZV9nZXQpOgorICAgICAgICAoZXdrX2JhY2tfZm9y
d2FyZF9saXN0X2l0ZW1fb3JpZ2luYWxfdXJpX2dldCk6CisgICAgICAgIChld2tfYmFja19mb3J3
YXJkX2xpc3RfaXRlbV9uZXcpOgorICAgICAgICAqIFVJUHJvY2Vzcy9BUEkvZWZsL2V3a19iYWNr
X2ZvcndhcmRfbGlzdF9pdGVtLmg6IEFkZGVkLgorICAgICAgICAqIFVJUHJvY2Vzcy9BUEkvZWZs
L2V3a19iYWNrX2ZvcndhcmRfbGlzdF9pdGVtX3ByaXZhdGUuaDogQWRkZWQuCisgICAgICAgICog
VUlQcm9jZXNzL0FQSS9lZmwvZXdrX2JhY2tfZm9yd2FyZF9saXN0X3ByaXZhdGUuaDogQWRkZWQu
CisgICAgICAgICogVUlQcm9jZXNzL0FQSS9lZmwvZXdrX3ZpZXcuY3BwOgorICAgICAgICAoX0V3
a19WaWV3X1ByaXZhdGVfRGF0YSk6CisgICAgICAgIChfRXdrX1ZpZXdfUHJpdmF0ZV9EYXRhOjpf
RXdrX1ZpZXdfUHJpdmF0ZV9EYXRhKToKKyAgICAgICAgKF9Fd2tfVmlld19Qcml2YXRlX0RhdGE6
On5fRXdrX1ZpZXdfUHJpdmF0ZV9EYXRhKToKKyAgICAgICAgKGV3a192aWV3X2JhY2tfZm9yd2Fy
ZF9saXN0X2dldCk6IE5ldyBmdW5jdGlvbiB0byBnZXQgYmFjay1mb3J3YXJkIGxpc3QuCisgICAg
ICAgICogVUlQcm9jZXNzL0FQSS9lZmwvZXdrX3ZpZXcuaDoKKyAgICAgICAgKiBVSVByb2Nlc3Mv
QVBJL2VmbC9ld2tfdmlld19sb2FkZXJfY2xpZW50LmNwcDoKKyAgICAgICAgKGRpZENoYW5nZUJh
Y2tGb3J3YXJkTGlzdCk6IFRoZSBjYWxsYmFjayBhZGRlZCB0byB1cGRhdGUgYmFjay1mb3J3YXJk
IGxpc3QgaXRlbXMgY2FjaGUuCisgICAgICAgIChld2tfdmlld19sb2FkZXJfY2xpZW50X2F0dGFj
aCk6CisKIDIwMTItMDctMjYgIE1pa2hhaWwgUG96ZG55YWtvdiAgPG1pa2hhaWwucG96ZG55YWtv
dkBpbnRlbC5jb20+CiAKICAgICAgICAgW1dLMl0gV2ViUGFnZTo6aGFuZGxlRWRpdGluZ0tleWJv
YXJkRXZlbnQgZG9lcyBub3QgY2hlY2sgd2hldGhlciB0aGUgbm9kZSBhbGxvd3MgZWRpdGluZy4K
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1BsYXRmb3JtRWZsLmNtYWtlIGIvU291cmNlL1dl
YktpdDIvUGxhdGZvcm1FZmwuY21ha2UKaW5kZXggZjhmMzBjNi4uMjkxMjMzZCAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYktpdDIvUGxhdGZvcm1FZmwuY21ha2UKKysrIGIvU291cmNlL1dlYktpdDIv
UGxhdGZvcm1FZmwuY21ha2UKQEAgLTQwLDYgKzQwLDggQEAgTElTVChBUFBFTkQgV2ViS2l0Ml9T
T1VSQ0VTCiAgICAgVUlQcm9jZXNzL0FQSS9lZmwvQmF0dGVyeVByb3ZpZGVyLmNwcAogICAgIFVJ
UHJvY2Vzcy9BUEkvZWZsL1BhZ2VDbGllbnRJbXBsLmNwcAogICAgIFVJUHJvY2Vzcy9BUEkvZWZs
L1ZpYnJhdGlvblByb3ZpZGVyLmNwcAorICAgIFVJUHJvY2Vzcy9BUEkvZWZsL2V3a19iYWNrX2Zv
cndhcmRfbGlzdC5jcHAKKyAgICBVSVByb2Nlc3MvQVBJL2VmbC9ld2tfYmFja19mb3J3YXJkX2xp
c3RfaXRlbS5jcHAKICAgICBVSVByb2Nlc3MvQVBJL2VmbC9ld2tfY29udGV4dC5jcHAKICAgICBV
SVByb2Nlc3MvQVBJL2VmbC9ld2tfY29udGV4dF9yZXF1ZXN0X21hbmFnZXJfY2xpZW50LmNwcAog
ICAgIFVJUHJvY2Vzcy9BUEkvZWZsL2V3a19jb29raWVfbWFuYWdlci5jcHAKQEAgLTE4MSw2ICsx
ODMsOCBAQCBTRVQoRm9yd2FyZGluZ05ldHdvcmtIZWFkZXJzX05BTUUgZm9yd2FyZGluZy1oZWFk
ZXJTb3VwKQogQ09ORklHVVJFX0ZJTEUoZWZsL2V3ZWJraXQyLnBjLmluICR7Q01BS0VfQklOQVJZ
X0RJUn0vV2ViS2l0Mi9lZmwvZXdlYmtpdDIucGMgQE9OTFkpCiBTRVQgKEVXZWJLaXQyX0hFQURF
UlMKICAgICAiJHtDTUFLRV9DVVJSRU5UX1NPVVJDRV9ESVJ9L1VJUHJvY2Vzcy9BUEkvZWZsL0VX
ZWJLaXQyLmgiCisgICAgIiR7Q01BS0VfQ1VSUkVOVF9TT1VSQ0VfRElSfS9VSVByb2Nlc3MvQVBJ
L2VmbC9ld2tfYmFja19mb3J3YXJkX2xpc3QuaCIKKyAgICAiJHtDTUFLRV9DVVJSRU5UX1NPVVJD
RV9ESVJ9L1VJUHJvY2Vzcy9BUEkvZWZsL2V3a19iYWNrX2ZvcndhcmRfbGlzdF9pdGVtLmgiCiAg
ICAgIiR7Q01BS0VfQ1VSUkVOVF9TT1VSQ0VfRElSfS9VSVByb2Nlc3MvQVBJL2VmbC9ld2tfY29u
dGV4dC5oIgogICAgICIke0NNQUtFX0NVUlJFTlRfU09VUkNFX0RJUn0vVUlQcm9jZXNzL0FQSS9l
ZmwvZXdrX2Nvb2tpZV9tYW5hZ2VyLmgiCiAgICAgIiR7Q01BS0VfQ1VSUkVOVF9TT1VSQ0VfRElS
fS9VSVByb2Nlc3MvQVBJL2VmbC9ld2tfaW50ZW50LmgiCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
S2l0Mi9VSVByb2Nlc3MvQVBJL2VmbC9FV2ViS2l0Mi5oIGIvU291cmNlL1dlYktpdDIvVUlQcm9j
ZXNzL0FQSS9lZmwvRVdlYktpdDIuaAppbmRleCBmYjYzYWM1Li4wMTUyZGE3IDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2VmbC9FV2ViS2l0Mi5oCisrKyBiL1NvdXJj
ZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZWZsL0VXZWJLaXQyLmgKQEAgLTI3LDYgKzI3LDggQEAK
ICNpZm5kZWYgRVdlYktpdDJfaAogI2RlZmluZSBFV2ViS2l0Ml9oCiAKKyNpbmNsdWRlICJld2tf
YmFja19mb3J3YXJkX2xpc3QuaCIKKyNpbmNsdWRlICJld2tfYmFja19mb3J3YXJkX2xpc3RfaXRl
bS5oIgogI2luY2x1ZGUgImV3a19jb250ZXh0LmgiCiAjaW5jbHVkZSAiZXdrX2Nvb2tpZV9tYW5h
Z2VyLmgiCiAjaW5jbHVkZSAiZXdrX2ludGVudC5oIgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktp
dDIvVUlQcm9jZXNzL0FQSS9lZmwvZXdrX2JhY2tfZm9yd2FyZF9saXN0LmNwcCBiL1NvdXJjZS9X
ZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZWZsL2V3a19iYWNrX2ZvcndhcmRfbGlzdC5jcHAKbmV3IGZp
bGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZGNiN2RhYQotLS0gL2Rldi9udWxsCisrKyBi
L1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZWZsL2V3a19iYWNrX2ZvcndhcmRfbGlzdC5j
cHAKQEAgLTAsMCArMSwxNjIgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTIgSW50ZWwgQ29y
cG9yYXRpb24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5k
IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2Rp
ZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRp
dGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUg
bXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0
cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1h
dGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZU
V0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMg
SVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNI
QU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBE
SVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRP
UlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQ
RUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RT
IE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MK
KyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElB
QklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9S
VCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkg
V0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgor
ICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25m
aWcuaCIKKyNpbmNsdWRlICJld2tfYmFja19mb3J3YXJkX2xpc3QuaCIKKworI2luY2x1ZGUgIldL
QVBJQ2FzdC5oIgorI2luY2x1ZGUgIldLQXJyYXkuaCIKKyNpbmNsdWRlICJXS0JhY2tGb3J3YXJk
TGlzdC5oIgorI2luY2x1ZGUgIldLUmV0YWluUHRyLmgiCisjaW5jbHVkZSAiZXdrX2JhY2tfZm9y
d2FyZF9saXN0X2l0ZW1fcHJpdmF0ZS5oIgorI2luY2x1ZGUgPHd0Zi90ZXh0L0NTdHJpbmcuaD4K
KwordXNpbmcgbmFtZXNwYWNlIFdlYktpdDsKKwordHlwZWRlZiBIYXNoTWFwPFdLQmFja0Zvcndh
cmRMaXN0SXRlbVJlZiwgRXdrX0JhY2tfRm9yd2FyZF9MaXN0X0l0ZW0qPiBJdGVtc01hcDsKKwor
LyoqCisgKiBcc3RydWN0ICBfRXdrX0JhY2tfRm9yd2FyZF9MaXN0CisgKiBAYnJpZWYgICBDb250
YWlucyB0aGUgQmFjayBGb3J3YXJkIExpc3QgZGF0YS4KKyAqLworc3RydWN0IF9Fd2tfQmFja19G
b3J3YXJkX0xpc3QgeworICAgIFdLUmV0YWluUHRyPFdLQmFja0ZvcndhcmRMaXN0UmVmPiB3a0xp
c3Q7CisgICAgbXV0YWJsZSBJdGVtc01hcCBpdGVtc0NhY2hlOworCisgICAgX0V3a19CYWNrX0Zv
cndhcmRfTGlzdChXS0JhY2tGb3J3YXJkTGlzdFJlZiBsaXN0UmVmKQorICAgICAgICA6IHdrTGlz
dChsaXN0UmVmKQorICAgIHsgfQorCisgICAgfl9Fd2tfQmFja19Gb3J3YXJkX0xpc3QoKQorICAg
IHsKKyAgICAgICAgSXRlbXNNYXA6Oml0ZXJhdG9yIGl0ID0gaXRlbXNDYWNoZS5iZWdpbigpOwor
ICAgICAgICBJdGVtc01hcDo6aXRlcmF0b3IgZW5kID0gaXRlbXNDYWNoZS5iZWdpbigpOworICAg
ICAgICBmb3IgKDsgaXQgIT0gZW5kOyArK2l0KQorICAgICAgICAgICAgZXdrX2JhY2tfZm9yd2Fy
ZF9saXN0X2l0ZW1fdW5yZWYoaXQtPnNlY29uZCk7CisKKyAgICB9Cit9OworCisjZGVmaW5lIEVX
S19CQUNLX0ZPUldBUkRfTElTVF9XS19HRVRfT1JfUkVUVVJOKGxpc3QsIHdrTGlzdF8sIC4uLikg
IFwKKyAgICBpZiAoIShsaXN0KSkgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIFwKKyAgICAgICAgRUlOQV9MT0dfQ1JJVCgibGlzdCBpcyBOVUxMLiIpOyAgICAg
ICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgcmV0dXJuIF9fVkFfQVJHU19fOyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICB9ICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICBpZiAoIShsaXN0KS0+
d2tMaXN0KSB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAg
RUlOQV9MT0dfQ1JJVCgibGlzdC0+d2tMaXN0IGlzIE5VTEwuIik7ICAgICAgICAgICAgICAgIFwK
KyAgICAgICAgcmV0dXJuIF9fVkFfQVJHU19fOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIFwKKyAgICB9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIFwKKyAgICBXS0JhY2tGb3J3YXJkTGlzdFJlZiB3a0xpc3RfID0gKGxp
c3QpLT53a0xpc3QuZ2V0KCkKKworCitzdGF0aWMgaW5saW5lIEV3a19CYWNrX0ZvcndhcmRfTGlz
dF9JdGVtKiBnZXRPckNyZWF0ZUl0ZW0oY29uc3QgRXdrX0JhY2tfRm9yd2FyZF9MaXN0KiBsaXN0
LCBXS0JhY2tGb3J3YXJkTGlzdEl0ZW1SZWYgd2tJdGVtKQoreworICAgIEVJTkFfU0FGRVRZX09O
X05VTExfUkVUVVJOX1ZBTChsaXN0LCAwKTsKKyAgICBFSU5BX1NBRkVUWV9PTl9OVUxMX1JFVFVS
Tl9WQUwod2tJdGVtLCAwKTsKKworICAgIEV3a19CYWNrX0ZvcndhcmRfTGlzdF9JdGVtKiBpdGVt
ID0gbGlzdC0+aXRlbXNDYWNoZS5nZXQod2tJdGVtKTsKKyAgICBpZiAoIWl0ZW0pIHsKKyAgICAg
ICAgaXRlbSA9IGV3a19iYWNrX2ZvcndhcmRfbGlzdF9pdGVtX25ldyh3a0l0ZW0pOworICAgICAg
ICBsaXN0LT5pdGVtc0NhY2hlLnNldCh3a0l0ZW0sIGl0ZW0pOworICAgIH0KKworICAgIHJldHVy
biBpdGVtOworfQorCitFd2tfQmFja19Gb3J3YXJkX0xpc3RfSXRlbSogZXdrX2JhY2tfZm9yd2Fy
ZF9saXN0X2N1cnJlbnRfaXRlbV9nZXQoY29uc3QgRXdrX0JhY2tfRm9yd2FyZF9MaXN0ICpsaXN0
KQoreworICAgIEVXS19CQUNLX0ZPUldBUkRfTElTVF9XS19HRVRfT1JfUkVUVVJOKGxpc3QsIHdr
TGlzdCwgMCk7CisKKyAgICByZXR1cm4gZ2V0T3JDcmVhdGVJdGVtKGxpc3QsIFdLQmFja0Zvcndh
cmRMaXN0R2V0Q3VycmVudEl0ZW0od2tMaXN0KSk7Cit9CisKK0V3a19CYWNrX0ZvcndhcmRfTGlz
dF9JdGVtKiBld2tfYmFja19mb3J3YXJkX2xpc3RfYmFja19pdGVtX2dldChjb25zdCBFd2tfQmFj
a19Gb3J3YXJkX0xpc3QqIGxpc3QpCit7CisgICAgRVdLX0JBQ0tfRk9SV0FSRF9MSVNUX1dLX0dF
VF9PUl9SRVRVUk4obGlzdCwgd2tMaXN0LCAwKTsKKworICAgIHJldHVybiBnZXRPckNyZWF0ZUl0
ZW0obGlzdCwgV0tCYWNrRm9yd2FyZExpc3RHZXRCYWNrSXRlbSh3a0xpc3QpKTsKK30KKworRXdr
X0JhY2tfRm9yd2FyZF9MaXN0X0l0ZW0qIGV3a19iYWNrX2ZvcndhcmRfbGlzdF9mb3J3YXJkX2l0
ZW1fZ2V0KGNvbnN0IEV3a19CYWNrX0ZvcndhcmRfTGlzdCogbGlzdCkKK3sKKyAgICBFV0tfQkFD
S19GT1JXQVJEX0xJU1RfV0tfR0VUX09SX1JFVFVSTihsaXN0LCB3a0xpc3QsIDApOworCisgICAg
cmV0dXJuIGdldE9yQ3JlYXRlSXRlbShsaXN0LCBXS0JhY2tGb3J3YXJkTGlzdEdldEZvcndhcmRJ
dGVtKHdrTGlzdCkpOworfQorCitFd2tfQmFja19Gb3J3YXJkX0xpc3RfSXRlbSogZXdrX2JhY2tf
Zm9yd2FyZF9saXN0X2l0ZW1fYXRfaW5kZXhfZ2V0KGNvbnN0IEV3a19CYWNrX0ZvcndhcmRfTGlz
dCogbGlzdCwgaW50IGluZGV4KQoreworICAgIEVXS19CQUNLX0ZPUldBUkRfTElTVF9XS19HRVRf
T1JfUkVUVVJOKGxpc3QsIHdrTGlzdCwgMCk7CisKKyAgICByZXR1cm4gZ2V0T3JDcmVhdGVJdGVt
KGxpc3QsIFdLQmFja0ZvcndhcmRMaXN0R2V0SXRlbUF0SW5kZXgod2tMaXN0LCBpbmRleCkpOwor
fQorCit1bnNpZ25lZCBld2tfYmFja19mb3J3YXJkX2xpc3RfY291bnQoRXdrX0JhY2tfRm9yd2Fy
ZF9MaXN0KiBsaXN0KQoreworICAgIEVXS19CQUNLX0ZPUldBUkRfTElTVF9XS19HRVRfT1JfUkVU
VVJOKGxpc3QsIHdrTGlzdCwgMCk7CisKKyAgICBjb25zdCB1bnNpZ25lZCBjdXJyZW50SXRlbSA9
IGV3a19iYWNrX2ZvcndhcmRfbGlzdF9jdXJyZW50X2l0ZW1fZ2V0KGxpc3QpID8gMSA6IDA7CisK
KyAgICByZXR1cm4gV0tCYWNrRm9yd2FyZExpc3RHZXRCYWNrTGlzdENvdW50KHdrTGlzdCkgKyBX
S0JhY2tGb3J3YXJkTGlzdEdldEZvcndhcmRMaXN0Q291bnQod2tMaXN0KSArIGN1cnJlbnRJdGVt
OworfQorCisKKy8qKgorICogQGludGVybmFsCisgKiBVcGRhdGVzIGl0ZW1zIGNhY2hlLgorICov
Cit2b2lkIGV3a19iYWNrX2ZvcndhcmRfbGlzdF9jaGFuZ2VkKEV3a19CYWNrX0ZvcndhcmRfTGlz
dCogbGlzdCwgV0tCYWNrRm9yd2FyZExpc3RJdGVtUmVmIHdrQWRkZWRJdGVtLCBXS0FycmF5UmVm
IHdrUmVtb3ZlZEl0ZW1zKQoreworICAgICh2b2lkKWdldE9yQ3JlYXRlSXRlbShsaXN0LCB3a0Fk
ZGVkSXRlbSk7IC8vIFB1dHMgbmV3IGl0ZW0gdG8gdGhlIGNhY2hlLgorCisgICAgY29uc3Qgc2l6
ZV90IHJlbW92ZWRJdGVtc1NpemUgPSB3a1JlbW92ZWRJdGVtcyA/IFdLQXJyYXlHZXRTaXplKHdr
UmVtb3ZlZEl0ZW1zKSA6IDA7CisgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCByZW1vdmVkSXRl
bXNTaXplOyArK2kpIHsKKyAgICAgICAgV0tCYWNrRm9yd2FyZExpc3RJdGVtUmVmIHdrSXRlbSA9
IHN0YXRpY19jYXN0PFdLQmFja0ZvcndhcmRMaXN0SXRlbVJlZj4oV0tBcnJheUdldEl0ZW1BdElu
ZGV4KHdrUmVtb3ZlZEl0ZW1zLCBpKSk7CisgICAgICAgIGlmIChFd2tfQmFja19Gb3J3YXJkX0xp
c3RfSXRlbSogaXRlbSA9IGxpc3QtPml0ZW1zQ2FjaGUudGFrZSh3a0l0ZW0pKQorICAgICAgICAg
ICAgZXdrX2JhY2tfZm9yd2FyZF9saXN0X2l0ZW1fdW5yZWYoaXRlbSk7CisgICAgfQorfQorCisv
KioKKyAqIEBpbnRlcm5hbAorICogQ29uc3RydWN0cyBhIEV3a19CYWNrX0ZvcndhcmRfTGlzdCBm
cm9tIGEgV0tCYWNrRm9yd2FyZExpc3RSZWYuCisgKi8KK0V3a19CYWNrX0ZvcndhcmRfTGlzdCog
ZXdrX2JhY2tfZm9yd2FyZF9saXN0X25ldyhXS0JhY2tGb3J3YXJkTGlzdFJlZiB3a0JhY2tGb3J3
YXJkTGlzdFJlZikKK3sKKyAgICBFSU5BX1NBRkVUWV9PTl9OVUxMX1JFVFVSTl9WQUwod2tCYWNr
Rm9yd2FyZExpc3RSZWYsIDApOworCisgICAgcmV0dXJuIG5ldyBFd2tfQmFja19Gb3J3YXJkX0xp
c3Qod2tCYWNrRm9yd2FyZExpc3RSZWYpOworfQorCisvKioKKyAqIEBpbnRlcm5hbAorICogRnJl
ZXMgYSBFd2tfQmFja19Gb3J3YXJkX0xpc3Qgb2JqZWN0LgorICovCit2b2lkIGV3a19iYWNrX2Zv
cndhcmRfbGlzdF9mcmVlKEV3a19CYWNrX0ZvcndhcmRfTGlzdCogbGlzdCkKK3sKKyAgICBFSU5B
X1NBRkVUWV9PTl9OVUxMX1JFVFVSTihsaXN0KTsKKworICAgIGRlbGV0ZSBsaXN0OworfQpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9lZmwvZXdrX2JhY2tfZm9yd2Fy
ZF9saXN0LmggYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2VmbC9ld2tfYmFja19mb3J3
YXJkX2xpc3QuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zNTRiMGNlCi0t
LSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9lZmwvZXdrX2Jh
Y2tfZm9yd2FyZF9saXN0LmgKQEAgLTAsMCArMSw5MiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykg
MjAxMiBJbnRlbCBDb3Jwb3JhdGlvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRp
c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp
dGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBm
b2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBv
ZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIu
CisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhl
IGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBh
bmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAq
CisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05U
UklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5U
SUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJB
TlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAq
IFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1Ig
SVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwg
SU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1B
R0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNV
QlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRT
OyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5Z
IFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElB
QklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBB
UklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJ
RiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKwor
LyoqCisgKiBAZmlsZSAgICBld2tfYmFja19mb3J3YXJkX2xpc3QuaAorICogQGJyaWVmICAgRGVz
Y3JpYmVzIHRoZSBFd2sgQmFjayBGb3J3YXJkIExpc3QgQVBJLgorICovCisKKyNpZm5kZWYgZXdr
X2JhY2tfZm9yd2FyZF9saXN0X2gKKyNkZWZpbmUgZXdrX2JhY2tfZm9yd2FyZF9saXN0X2gKKwor
I2luY2x1ZGUgImV3a19iYWNrX2ZvcndhcmRfbGlzdF9pdGVtLmgiCisKKyNpZmRlZiBfX2NwbHVz
cGx1cworZXh0ZXJuICJDIiB7CisjZW5kaWYKKworLyoqIENyZWF0ZXMgYSB0eXBlIG5hbWUgZm9y
IF9Fd2tfQmFja19Gb3J3YXJkX0xpc3QgKi8KK3R5cGVkZWYgc3RydWN0IF9Fd2tfQmFja19Gb3J3
YXJkX0xpc3QgRXdrX0JhY2tfRm9yd2FyZF9MaXN0OworCisvKioKKyAqIFJldHVybnMgdGhlIGN1
cnJlbnQgaXRlbSBpbiB0aGUgQGEgbGlzdC4KKyAqCisgKiBAcGFyYW0gbGlzdCB0aGUgYmFjay1m
b3J3YXJkIGxpc3QgaW5zdGFuY2UKKyAqCisgKiBAcmV0dXJuIHRoZSBjdXJyZW50IGl0ZW0gaW4g
dGhlIEBhIGxpc3Qgb3IgQGMgTlVMTCBpbiBjYXNlIG9mIGVycm9yLgorICovCitFQVBJIEV3a19C
YWNrX0ZvcndhcmRfTGlzdF9JdGVtICpld2tfYmFja19mb3J3YXJkX2xpc3RfY3VycmVudF9pdGVt
X2dldChjb25zdCBFd2tfQmFja19Gb3J3YXJkX0xpc3QgKmxpc3QpOworCisvKioKKyAqIFJldHVy
bnMgdGhlIGl0ZW0gdGhhdCBwcmVjZWRlcyB0aGUgY3VycmVudCBpdGVtIGluIHRoZSBAYSBsaXN0
LgorICoKKyAqIEBwYXJhbSBsaXN0IHRoZSBiYWNrLWZvcndhcmQgbGlzdCBpbnN0YW5jZQorICoK
KyAqIEByZXR1cm4gdGhlIGl0ZW0gdGhhdCBwcmVjZWRlcyB0aGUgY3VycmVudCBpdGVtIHRoZSBA
YSBsaXN0IG9yIEBjIE5VTEwgaW4gY2FzZSBvZiBlcnJvci4KKyAqLworRUFQSSBFd2tfQmFja19G
b3J3YXJkX0xpc3RfSXRlbSAqZXdrX2JhY2tfZm9yd2FyZF9saXN0X2JhY2tfaXRlbV9nZXQoY29u
c3QgRXdrX0JhY2tfRm9yd2FyZF9MaXN0ICpsaXN0KTsKKworLyoqCisgKiBSZXR1cm5zIHRoZSBp
dGVtIHRoYXQgZm9sbG93cyB0aGUgY3VycmVudCBpdGVtIGluIHRoZSBAYSBsaXN0LgorICoKKyAq
IEBwYXJhbSBsaXN0IHRoZSBiYWNrLWZvcndhcmQgbGlzdCBpbnN0YW5jZQorICoKKyAqIEByZXR1
cm4gdGhlIGl0ZW0gdGhhdCBmb2xsb3dzIHRoZSBjdXJyZW50IGl0ZW0gaW4gdGhlIEBhIGxpc3Qg
b3IgQGMgTlVMTCBpbiBjYXNlIG9mIGVycm9yLgorICovCitFQVBJIEV3a19CYWNrX0ZvcndhcmRf
TGlzdF9JdGVtICpld2tfYmFja19mb3J3YXJkX2xpc3RfZm9yd2FyZF9pdGVtX2dldChjb25zdCBF
d2tfQmFja19Gb3J3YXJkX0xpc3QgKmxpc3QpOworCisvKioKKyAqIFJldHVybnMgdGhlIGl0ZW0g
YXQgYSBnaXZlbiBAYSBpbmRleCByZWxhdGl2ZSB0byB0aGUgY3VycmVudCBpdGVtLgorICoKKyAq
IEBwYXJhbSBsaXN0IHRoZSBiYWNrLWZvcndhcmQgbGlzdCBpbnN0YW5jZQorICogQHBhcmFtIGlu
ZGV4IHRoZSBpbmRleCBvZiB0aGUgaXRlbQorICoKKyAqIEByZXR1cm4gdGhlIGl0ZW0gYXQgYSBn
aXZlbiBAYSBpbmRleCByZWxhdGl2ZSB0byB0aGUgY3VycmVudCBpdGVtIG9yIEBjIE5VTEwgaW4g
Y2FzZSBvZiBlcnJvci4KKyAqLworRUFQSSBFd2tfQmFja19Gb3J3YXJkX0xpc3RfSXRlbSAqZXdr
X2JhY2tfZm9yd2FyZF9saXN0X2l0ZW1fYXRfaW5kZXhfZ2V0KGNvbnN0IEV3a19CYWNrX0Zvcndh
cmRfTGlzdCAqbGlzdCwgaW50IGluZGV4KTsKKworLyoqCisgKiBSZXR1cm5zIHRoZSBsZW5ndGgg
b2YgdGhlIGJhY2stZm9yd2FyZCBsaXN0IGluY2x1ZGluZyBjdXJyZW50IGl0ZW0uCisgKgorICog
QHBhcmFtIGxpc3QgdGhlIGJhY2stZm9yd2FyZCBsaXN0IGluc3RhbmNlCisgKgorICogQHJldHVy
biB0aGUgbGVuZ3RoIG9mIHRoZSBiYWNrLWZvcndhcmQgbGlzdCBpbmNsdWRpbmcgY3VycmVudCBp
dGVtIG9yIEBjIDAgaW4gY2FzZSBvZiBlcnJvci4KKyAqLworRUFQSSB1bnNpZ25lZCBld2tfYmFj
a19mb3J3YXJkX2xpc3RfY291bnQoRXdrX0JhY2tfRm9yd2FyZF9MaXN0ICpsaXN0KTsKKworI2lm
ZGVmIF9fY3BsdXNwbHVzCit9CisjZW5kaWYKKyNlbmRpZiAvLyBld2tfYmFja19mb3J3YXJkX2xp
c3RfaApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9lZmwvZXdrX2Jh
Y2tfZm9yd2FyZF9saXN0X2l0ZW0uY3BwIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9l
ZmwvZXdrX2JhY2tfZm9yd2FyZF9saXN0X2l0ZW0uY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0Cmlu
ZGV4IDAwMDAwMDAuLjYzZWMzNDMKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9V
SVByb2Nlc3MvQVBJL2VmbC9ld2tfYmFja19mb3J3YXJkX2xpc3RfaXRlbS5jcHAKQEAgLTAsMCAr
MSwxMTYgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTIgSW50ZWwgQ29ycG9yYXRpb24uIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3Vy
Y2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFy
ZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFy
ZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4g
dGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGl0ZW0gb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGlu
IGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5v
dGljZSwgdGhpcyBpdGVtIG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92
aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9W
SURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5E
IEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBB
TkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJ
TiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJ
QUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1Q
TEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VT
OyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQ
VElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVU
SEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5H
IE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBU
SEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJ
QklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNs
dWRlICJld2tfYmFja19mb3J3YXJkX2xpc3RfaXRlbS5oIgorCisjaW5jbHVkZSAiV0tBUElDYXN0
LmgiCisjaW5jbHVkZSAiV0tCYWNrRm9yd2FyZExpc3RJdGVtLmgiCisjaW5jbHVkZSAiV0tSZXRh
aW5QdHIuaCIKKyNpbmNsdWRlICJXS1N0cmluZy5oIgorI2luY2x1ZGUgIldLVVJMLmgiCisjaW5j
bHVkZSA8d3RmL3RleHQvQ1N0cmluZy5oPgorCit1c2luZyBuYW1lc3BhY2UgV2ViS2l0OworCit0
ZW1wbGF0ZSA8dHlwZW5hbWUgV0tSZWZUeXBlPgoraW5saW5lIGNvbnN0IGNoYXIqIGdldEl0ZW1Q
cm9wZXJ0eShXS0JhY2tGb3J3YXJkTGlzdEl0ZW1SZWYgcmVmLCBXS1JlZlR5cGUgdmFsKQorewor
ICAgIEFTU0VSVChyZWYpOworICAgIFdLUmV0YWluUHRyPFdLUmVmVHlwZT4gd2tQcm9wKEFkb3B0
V0ssIHZhbCk7CisgICAgcmV0dXJuIGVpbmFfc3RyaW5nc2hhcmVfYWRkKHRvSW1wbCh3a1Byb3Au
Z2V0KCkpLT5zdHJpbmcoKS51dGY4KCkuZGF0YSgpKTsKK30KKworLyoqCisgKiBcc3RydWN0ICBf
RXdrX0JhY2tfRm9yd2FyZF9MaXN0CisgKiBAYnJpZWYgICBDb250YWlucyB0aGUgQmFjayBGb3J3
YXJkIExpc3QgZGF0YS4KKyAqLworc3RydWN0IF9Fd2tfQmFja19Gb3J3YXJkX0xpc3RfSXRlbSB7
CisgICAgdW5zaWduZWQgaW50IF9fcmVmOyAvKio8IHRoZSByZWZlcmVuY2UgY291bnQgb2YgdGhl
IG9iamVjdCAqLworICAgIFdLUmV0YWluUHRyPFdLQmFja0ZvcndhcmRMaXN0SXRlbVJlZj4gd2tJ
dGVtOworICAgIGNvbnN0IGNoYXIqIHVyaTsKKyAgICBjb25zdCBjaGFyKiB0aXRsZTsKKyAgICBj
b25zdCBjaGFyKiBvcmlnaW5hbFVyaTsKKworICAgIF9Fd2tfQmFja19Gb3J3YXJkX0xpc3RfSXRl
bShXS0JhY2tGb3J3YXJkTGlzdEl0ZW1SZWYgaXRlbVJlZikKKyAgICAgICAgOiBfX3JlZigxKQor
ICAgICAgICAsIHdrSXRlbShpdGVtUmVmKQorICAgICAgICAsIHVyaShnZXRJdGVtUHJvcGVydHk8
V0tVUkxSZWY+KGl0ZW1SZWYsIFdLQmFja0ZvcndhcmRMaXN0SXRlbUNvcHlVUkwoaXRlbVJlZikp
KQorICAgICAgICAsIHRpdGxlKGdldEl0ZW1Qcm9wZXJ0eTxXS1N0cmluZ1JlZj4oaXRlbVJlZiwg
V0tCYWNrRm9yd2FyZExpc3RJdGVtQ29weVRpdGxlKGl0ZW1SZWYpKSkKKyAgICAgICAgLCBvcmln
aW5hbFVyaShnZXRJdGVtUHJvcGVydHk8V0tVUkxSZWY+KGl0ZW1SZWYsIFdLQmFja0ZvcndhcmRM
aXN0SXRlbUNvcHlPcmlnaW5hbFVSTChpdGVtUmVmKSkpCisgICAgeyB9CisKKyAgICB+X0V3a19C
YWNrX0ZvcndhcmRfTGlzdF9JdGVtKCkKKyAgICB7CisgICAgICAgIEFTU0VSVCghX19yZWYpOwor
ICAgICAgICBlaW5hX3N0cmluZ3NoYXJlX2RlbCh1cmkpOworICAgICAgICBlaW5hX3N0cmluZ3No
YXJlX2RlbCh0aXRsZSk7CisgICAgICAgIGVpbmFfc3RyaW5nc2hhcmVfZGVsKG9yaWdpbmFsVXJp
KTsKKyAgICB9Cit9OworCit2b2lkIGV3a19iYWNrX2ZvcndhcmRfbGlzdF9pdGVtX3JlZihFd2tf
QmFja19Gb3J3YXJkX0xpc3RfSXRlbSogaXRlbSkKK3sKKyAgICBFSU5BX1NBRkVUWV9PTl9OVUxM
X1JFVFVSTihpdGVtKTsKKyAgICArK2l0ZW0tPl9fcmVmOworfQorCit2b2lkIGV3a19iYWNrX2Zv
cndhcmRfbGlzdF9pdGVtX3VucmVmKEV3a19CYWNrX0ZvcndhcmRfTGlzdF9JdGVtKiBpdGVtKQor
eworICAgIEVJTkFfU0FGRVRZX09OX05VTExfUkVUVVJOKGl0ZW0pOworCisgICAgaWYgKC0taXRl
bS0+X19yZWYpCisgICAgICAgIHJldHVybjsKKworICAgIGRlbGV0ZSBpdGVtOworfQorCitjb25z
dCBjaGFyKiBld2tfYmFja19mb3J3YXJkX2xpc3RfaXRlbV91cmlfZ2V0KGNvbnN0IEV3a19CYWNr
X0ZvcndhcmRfTGlzdF9JdGVtKiBpdGVtKQoreworICAgIEVJTkFfU0FGRVRZX09OX05VTExfUkVU
VVJOX1ZBTChpdGVtLCAwKTsKKworICAgIHJldHVybiBpdGVtLT51cmk7Cit9CisKK2NvbnN0IGNo
YXIqIGV3a19iYWNrX2ZvcndhcmRfbGlzdF9pdGVtX3RpdGxlX2dldChjb25zdCBFd2tfQmFja19G
b3J3YXJkX0xpc3RfSXRlbSogaXRlbSkKK3sKKyAgICBFSU5BX1NBRkVUWV9PTl9OVUxMX1JFVFVS
Tl9WQUwoaXRlbSwgMCk7CisKKyAgICByZXR1cm4gaXRlbS0+dGl0bGU7Cit9CisKK2NvbnN0IGNo
YXIqIGV3a19iYWNrX2ZvcndhcmRfbGlzdF9pdGVtX29yaWdpbmFsX3VyaV9nZXQoY29uc3QgRXdr
X0JhY2tfRm9yd2FyZF9MaXN0X0l0ZW0qIGl0ZW0pCit7CisgICAgRUlOQV9TQUZFVFlfT05fTlVM
TF9SRVRVUk5fVkFMKGl0ZW0sIDApOworCisgICAgcmV0dXJuIGl0ZW0tPm9yaWdpbmFsVXJpOwor
fQorCitFd2tfQmFja19Gb3J3YXJkX0xpc3RfSXRlbSogZXdrX2JhY2tfZm9yd2FyZF9saXN0X2l0
ZW1fbmV3KFdLQmFja0ZvcndhcmRMaXN0SXRlbVJlZiBiYWNrRm9yd2FyZExpc3RJdGVtRGF0YSkK
K3sKKyAgICBFSU5BX1NBRkVUWV9PTl9OVUxMX1JFVFVSTl9WQUwoYmFja0ZvcndhcmRMaXN0SXRl
bURhdGEsIDApOworCisgICAgcmV0dXJuIG5ldyBFd2tfQmFja19Gb3J3YXJkX0xpc3RfSXRlbShi
YWNrRm9yd2FyZExpc3RJdGVtRGF0YSk7Cit9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9V
SVByb2Nlc3MvQVBJL2VmbC9ld2tfYmFja19mb3J3YXJkX2xpc3RfaXRlbS5oIGIvU291cmNlL1dl
YktpdDIvVUlQcm9jZXNzL0FQSS9lZmwvZXdrX2JhY2tfZm9yd2FyZF9saXN0X2l0ZW0uaApuZXcg
ZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43YmUwNjU3Ci0tLSAvZGV2L251bGwKKysr
IGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9lZmwvZXdrX2JhY2tfZm9yd2FyZF9saXN0
X2l0ZW0uaApAQCAtMCwwICsxLDEwNiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMiBJbnRl
bCBDb3Jwb3JhdGlvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlv
biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAq
IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcg
Y29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2Ug
Y29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBS
ZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNv
cHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3Ro
ZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElT
IFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMg
YGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0Yg
TUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0Ug
QVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRS
SUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRB
TCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUg
R09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJ
TkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBP
RiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBP
UiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElO
IEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VE
IE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworLyoqCisgKiBA
ZmlsZSAgICBld2tfYmFja19mb3J3YXJkX2xpc3RfaXRlbS5oCisgKiBAYnJpZWYgICBEZXNjcmli
ZXMgdGhlIEV3ayBCYWNrIEZvcndhcmQgTGlzdCBJdGVtIEFQSS4KKyAqLworCisjaWZuZGVmIGV3
a19iYWNrX2ZvcndhcmRfbGlzdF9pdGVtX2gKKyNkZWZpbmUgZXdrX2JhY2tfZm9yd2FyZF9saXN0
X2l0ZW1faAorCisjaW5jbHVkZSA8RWluYS5oPgorCisjaWZkZWYgX19jcGx1c3BsdXMKK2V4dGVy
biAiQyIgeworI2VuZGlmCisKKy8qKiBDcmVhdGVzIGEgdHlwZSBuYW1lIGZvciBfRXdrX0JhY2tf
Rm9yd2FyZF9MaXN0X0l0ZW0gKi8KK3R5cGVkZWYgc3RydWN0IF9Fd2tfQmFja19Gb3J3YXJkX0xp
c3RfSXRlbSBFd2tfQmFja19Gb3J3YXJkX0xpc3RfSXRlbTsKKworLyoqCisgKiBJbmNyZWFzZXMg
dGhlIHJlZmVyZW5jZSBjb3VudCBvZiB0aGUgZ2l2ZW4gb2JqZWN0LgorICoKKyAqIEBwYXJhbSBp
dGVtIHRoZSBiYWNrLWZvcndhcmQgbGlzdCBpdGVtIGluc3RhbmNlIHRvIGluY3JlYXNlIHRoZSBy
ZWZlcmVuY2UgY291bnQKKyAqLworRUFQSSB2b2lkIGV3a19iYWNrX2ZvcndhcmRfbGlzdF9pdGVt
X3JlZihFd2tfQmFja19Gb3J3YXJkX0xpc3RfSXRlbSAqaXRlbSk7CisKKy8qKgorICogRGVjcmVh
c2VzIHRoZSByZWZlcmVuY2UgY291bnQgb2YgdGhlIGdpdmVuIG9iamVjdCwgcG9zc2libHkgZnJl
ZWluZyBpdC4KKyAqCisgKiBXaGVuIHRoZSByZWZlcmVuY2UgY291bnQgcmVhY2hlcyAwLCB0aGUg
aXRlbSBpcyBmcmVlZC4KKyAqCisgKiBAcGFyYW0gaXRlbSB0aGUgYmFjay1mb3J3YXJkIGxpc3Qg
aXRlbSBpbnN0YW5jZSB0byBkZWNyZWFzZSB0aGUgcmVmZXJlbmNlIGNvdW50CisgKi8KK0VBUEkg
dm9pZCBld2tfYmFja19mb3J3YXJkX2xpc3RfaXRlbV91bnJlZihFd2tfQmFja19Gb3J3YXJkX0xp
c3RfSXRlbSAqaXRlbSk7CisKKy8qKgorICogUmV0dXJucyBVUkkgb2YgdGhlIGl0ZW0uCisgKgor
ICogVGhlIHJldHVybmVkIFVSSSBtYXkgZGlmZmVyIGZyb20gdGhlIG9yaWdpbmFsIFVSSSAoRm9y
IGV4YW1wbGUgaWYgdGhlIHBhZ2Ugd2FzIHJlZGlyZWN0ZWQpLgorICogQHNlZSBld2tfYmFja19m
b3J3YXJkX2xpc3RfaXRlbV9vcmlnaW5hbF91cmlfZ2V0KCkuCisgKgorICogQHBhcmFtIGl0ZW0g
dGhlIGJhY2stZm9yd2FyZCBsaXN0IGl0ZW0gaW5zdGFuY2UKKyAqCisgKiBAcmV0dXJuIHRoZSBV
Ukkgb2YgdGhlIEBhIGl0ZW0gb3IgQGMgTlVMTCBpbiBjYXNlIG9mIGVycm9yLiBUaGlzIHBvaW50
ZXIgaXMKKyAqICAgICAgICAgZ3VhcmFudGVlZCB0byBiZSBlaW5hX3N0cmluZ3NoYXJlLCBzbyB3
aGVuZXZlciBwb3NzaWJsZQorICogICAgICAgICBzYXZlIHlvdXJzZWxmIHNvbWUgY3B1IGN5Y2xl
cyBhbmQgdXNlCisgKiAgICAgICAgIGVpbmFfc3RyaW5nc2hhcmVfcmVmKCkgaW5zdGVhZCBvZiBl
aW5hX3N0cmluZ3NoYXJlX2FkZCgpIG9yCisgKiAgICAgICAgIHN0cmR1cCgpLgorICovCitFQVBJ
IGNvbnN0IGNoYXIgKmV3a19iYWNrX2ZvcndhcmRfbGlzdF9pdGVtX3VyaV9nZXQoY29uc3QgRXdr
X0JhY2tfRm9yd2FyZF9MaXN0X0l0ZW0gKml0ZW0pOworCisvKioKKyAqIFJldHVybnMgdGl0bGUg
b2YgdGhlIGl0ZW0uCisgKgorICogQHBhcmFtIGl0ZW0gdGhlIGJhY2stZm9yd2FyZCBsaXN0IGl0
ZW0gaW5zdGFuY2UKKyAqCisgKiBAcmV0dXJuIHRoZSB0aXRsZSBvZiB0aGUgQGEgaXRlbSBvciBA
YyBOVUxMIGluIGNhc2Ugb2YgZXJyb3IuIFRoaXMgcG9pbnRlciBpcworICogICAgICAgICBndWFy
YW50ZWVkIHRvIGJlIGVpbmFfc3RyaW5nc2hhcmUsIHNvIHdoZW5ldmVyIHBvc3NpYmxlCisgKiAg
ICAgICAgIHNhdmUgeW91cnNlbGYgc29tZSBjcHUgY3ljbGVzIGFuZCB1c2UKKyAqICAgICAgICAg
ZWluYV9zdHJpbmdzaGFyZV9yZWYoKSBpbnN0ZWFkIG9mIGVpbmFfc3RyaW5nc2hhcmVfYWRkKCkg
b3IKKyAqICAgICAgICAgc3RyZHVwKCkuCisgKi8KK0VBUEkgY29uc3QgY2hhciAqZXdrX2JhY2tf
Zm9yd2FyZF9saXN0X2l0ZW1fdGl0bGVfZ2V0KGNvbnN0IEV3a19CYWNrX0ZvcndhcmRfTGlzdF9J
dGVtICppdGVtKTsKKworLyoqCisgKiBSZXR1cm5zIG9yaWdpbmFsIFVSSSBvZiB0aGUgaXRlbS4K
KyAqCisgKiBAc2VlIGV3a19iYWNrX2ZvcndhcmRfbGlzdF9pdGVtX3VyaV9nZXQoKS4KKyAqCisg
KiBAcGFyYW0gaXRlbSB0aGUgYmFjay1mb3J3YXJkIGxpc3QgaXRlbSBpbnN0YW5jZQorICoKKyAq
IEByZXR1cm4gdGhlIG9yaWdpbmFsIFVSSSBvZiB0aGUgQGEgaXRlbSBvciBAYyBOVUxMIGluIGNh
c2Ugb2YgZXJyb3IuIFRoaXMgcG9pbnRlciBpcworICogICAgICAgICBndWFyYW50ZWVkIHRvIGJl
IGVpbmFfc3RyaW5nc2hhcmUsIHNvIHdoZW5ldmVyIHBvc3NpYmxlCisgKiAgICAgICAgIHNhdmUg
eW91cnNlbGYgc29tZSBjcHUgY3ljbGVzIGFuZCB1c2UKKyAqICAgICAgICAgZWluYV9zdHJpbmdz
aGFyZV9yZWYoKSBpbnN0ZWFkIG9mIGVpbmFfc3RyaW5nc2hhcmVfYWRkKCkgb3IKKyAqICAgICAg
ICAgc3RyZHVwKCkuCisgKi8KK0VBUEkgY29uc3QgY2hhciAqZXdrX2JhY2tfZm9yd2FyZF9saXN0
X2l0ZW1fb3JpZ2luYWxfdXJpX2dldChjb25zdCBFd2tfQmFja19Gb3J3YXJkX0xpc3RfSXRlbSAq
aXRlbSk7CisKKyNpZmRlZiBfX2NwbHVzcGx1cworfQorI2VuZGlmCisjZW5kaWYgLy8gZXdrX2Jh
Y2tfZm9yd2FyZF9saXN0X2l0ZW1faApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvVUlQcm9j
ZXNzL0FQSS9lZmwvZXdrX2JhY2tfZm9yd2FyZF9saXN0X2l0ZW1fcHJpdmF0ZS5oIGIvU291cmNl
L1dlYktpdDIvVUlQcm9jZXNzL0FQSS9lZmwvZXdrX2JhY2tfZm9yd2FyZF9saXN0X2l0ZW1fcHJp
dmF0ZS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjhjMmM2ODQKLS0tIC9k
ZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2VmbC9ld2tfYmFja19m
b3J3YXJkX2xpc3RfaXRlbV9wcml2YXRlLmgKQEAgLTAsMCArMSwzNSBAQAorLyoKKyAqIENvcHly
aWdodCAoQykgMjAxMiBJbnRlbCBDb3Jwb3JhdGlvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAq
CisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3
aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0
aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJp
YnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Cisg
KiAgICBub3RpY2UsIHRoaXMgaXRlbSBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXBy
b2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGl0ZW0gb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1l
bnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1
dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5E
IElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElF
RCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBM
SUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJ
Q1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExF
IElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJ
TkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVO
VElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQg
T0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBP
UiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBB
TkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBT
VFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJ
U0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FS
RSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0Uu
CisgKi8KKworI2lmbmRlZiBld2tfYmFja19mb3J3YXJkX2xpc3RfaXRlbV9wcml2YXRlX2gKKyNk
ZWZpbmUgZXdrX2JhY2tfZm9yd2FyZF9saXN0X2l0ZW1fcHJpdmF0ZV9oCisKKyNpbmNsdWRlIDxX
ZWJLaXQyL1dLQmFzZS5oPgorCit0eXBlZGVmIHN0cnVjdCBfRXdrX0JhY2tfRm9yd2FyZF9MaXN0
X0l0ZW0gRXdrX0JhY2tfRm9yd2FyZF9MaXN0X0l0ZW07CisKK0V3a19CYWNrX0ZvcndhcmRfTGlz
dF9JdGVtKiBld2tfYmFja19mb3J3YXJkX2xpc3RfaXRlbV9uZXcoV0tCYWNrRm9yd2FyZExpc3RJ
dGVtUmVmIHdrQmFja0ZvcndhcmRMaXN0SXRlbVJlZik7CisKKyNlbmRpZiAvLyBld2tfYmFja19m
b3J3YXJkX2xpc3RfcHJpdmF0ZV9oCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nl
c3MvQVBJL2VmbC9ld2tfYmFja19mb3J3YXJkX2xpc3RfcHJpdmF0ZS5oIGIvU291cmNlL1dlYktp
dDIvVUlQcm9jZXNzL0FQSS9lZmwvZXdrX2JhY2tfZm9yd2FyZF9saXN0X3ByaXZhdGUuaApuZXcg
ZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41OTJhNGY0Ci0tLSAvZGV2L251bGwKKysr
IGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9lZmwvZXdrX2JhY2tfZm9yd2FyZF9saXN0
X3ByaXZhdGUuaApAQCAtMCwwICsxLDM3IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEyIElu
dGVsIENvcnBvcmF0aW9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0
aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAor
ICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2lu
ZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJj
ZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIu
IFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUg
Y29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBv
dGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRI
SVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9S
UyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBP
RiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9T
RSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09O
VFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVO
VEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVU
RSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJV
U0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZ
IE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFks
IE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcg
SU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklT
RUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaWZuZGVm
IGV3a19iYWNrX2ZvcndhcmRfbGlzdF9wcml2YXRlX2gKKyNkZWZpbmUgZXdrX2JhY2tfZm9yd2Fy
ZF9saXN0X3ByaXZhdGVfaAorCisjaW5jbHVkZSA8V2ViS2l0Mi9XS0Jhc2UuaD4KKwordHlwZWRl
ZiBzdHJ1Y3QgX0V3a19CYWNrX0ZvcndhcmRfTGlzdCBFd2tfQmFja19Gb3J3YXJkX0xpc3Q7CisK
K3ZvaWQgZXdrX2JhY2tfZm9yd2FyZF9saXN0X2NoYW5nZWQoRXdrX0JhY2tfRm9yd2FyZF9MaXN0
KiwgV0tCYWNrRm9yd2FyZExpc3RJdGVtUmVmIHdrQWRkZWRJdGVtLCBXS0FycmF5UmVmIHdrUmVt
b3ZlZEl0ZW1zKTsKK0V3a19CYWNrX0ZvcndhcmRfTGlzdCogZXdrX2JhY2tfZm9yd2FyZF9saXN0
X25ldyhXS0JhY2tGb3J3YXJkTGlzdFJlZiB3a0JhY2tGb3J3YXJkTGlzdFJlZik7Cit2b2lkIGV3
a19iYWNrX2ZvcndhcmRfbGlzdF9mcmVlKEV3a19CYWNrX0ZvcndhcmRfTGlzdCogbGlzdCk7CisK
KyNlbmRpZiAvLyBld2tfYmFja19mb3J3YXJkX2xpc3RfcHJpdmF0ZV9oCmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2VmbC9ld2tfdmlldy5jcHAgYi9Tb3VyY2UvV2Vi
S2l0Mi9VSVByb2Nlc3MvQVBJL2VmbC9ld2tfdmlldy5jcHAKaW5kZXggZWQyZmExOS4uMzM3N2Nh
MSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9lZmwvZXdrX3ZpZXcu
Y3BwCisrKyBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZWZsL2V3a192aWV3LmNwcApA
QCAtMjksNiArMjksNyBAQAogI2luY2x1ZGUgIldLUmV0YWluUHRyLmgiCiAjaW5jbHVkZSAiV0tT
dHJpbmcuaCIKICNpbmNsdWRlICJXS1VSTC5oIgorI2luY2x1ZGUgImV3a19iYWNrX2ZvcndhcmRf
bGlzdF9wcml2YXRlLmgiCiAjaW5jbHVkZSAiZXdrX2NvbnRleHQuaCIKICNpbmNsdWRlICJld2tf
Y29udGV4dF9wcml2YXRlLmgiCiAjaW5jbHVkZSAiZXdrX2ludGVudF9wcml2YXRlLmgiCkBAIC02
Miw2ICs2Myw3IEBAIHN0cnVjdCBfRXdrX1ZpZXdfUHJpdmF0ZV9EYXRhIHsKICAgICBjb25zdCBj
aGFyKiBjdXJzb3JHcm91cDsKICAgICBFdmFzX09iamVjdCogY3Vyc29yT2JqZWN0OwogICAgIExv
YWRpbmdSZXNvdXJjZXNNYXAgbG9hZGluZ1Jlc291cmNlc01hcDsKKyAgICBFd2tfQmFja19Gb3J3
YXJkX0xpc3QqIGJhY2tGb3J3YXJkTGlzdDsKIAogI2lmZGVmIEhBVkVfRUNPUkVfWAogICAgIGJv
b2wgaXNVc2luZ0Vjb3JlWDsKQEAgLTc0LDYgKzc2LDcgQEAgc3RydWN0IF9Fd2tfVmlld19Qcml2
YXRlX0RhdGEgewogICAgICAgICAsIGN1c3RvbUVuY29kaW5nKDApCiAgICAgICAgICwgY3Vyc29y
R3JvdXAoMCkKICAgICAgICAgLCBjdXJzb3JPYmplY3QoMCkKKyAgICAgICAgLCBiYWNrRm9yd2Fy
ZExpc3QoMCkKICNpZmRlZiBIQVZFX0VDT1JFX1gKICAgICAgICAgLCBpc1VzaW5nRWNvcmVYKGZh
bHNlKQogI2VuZGlmCkBAIC04OSw2ICs5Miw4IEBAIHN0cnVjdCBfRXdrX1ZpZXdfUHJpdmF0ZV9E
YXRhIHsKIAogICAgICAgICBpZiAoY3Vyc29yT2JqZWN0KQogICAgICAgICAgICAgZXZhc19vYmpl
Y3RfZGVsKGN1cnNvck9iamVjdCk7CisKKyAgICAgICAgZXdrX2JhY2tfZm9yd2FyZF9saXN0X2Zy
ZWUoYmFja0ZvcndhcmRMaXN0KTsKICAgICB9CiB9OwogCkBAIC01NDcsNiArNTUyLDggQEAgRXZh
c19PYmplY3QqIGV3a192aWV3X2Jhc2VfYWRkKEV2YXMqIGNhbnZhcywgV0tDb250ZXh0UmVmIGNv
bnRleHRSZWYsIFdLUGFnZUdyb3UKICAgICB9CiAKICAgICBwcml2LT5wYWdlQ2xpZW50ID0gUGFn
ZUNsaWVudEltcGw6OmNyZWF0ZSh0b0ltcGwoY29udGV4dFJlZiksIHRvSW1wbChwYWdlR3JvdXBS
ZWYpLCBld2tWaWV3KTsKKyAgICBwcml2LT5iYWNrRm9yd2FyZExpc3QgPSBld2tfYmFja19mb3J3
YXJkX2xpc3RfbmV3KHRvQVBJKHByaXYtPnBhZ2VDbGllbnQtPnBhZ2UoKS0+YmFja0ZvcndhcmRM
aXN0KCkpKTsKKwogICAgIGV3a192aWV3X2xvYWRlcl9jbGllbnRfYXR0YWNoKHRvQVBJKHByaXYt
PnBhZ2VDbGllbnQtPnBhZ2UoKSksIGV3a1ZpZXcpOwogICAgIGV3a192aWV3X3BvbGljeV9jbGll
bnRfYXR0YWNoKHRvQVBJKHByaXYtPnBhZ2VDbGllbnQtPnBhZ2UoKSksIGV3a1ZpZXcpOwogICAg
IGV3a192aWV3X3Jlc291cmNlX2xvYWRfY2xpZW50X2F0dGFjaCh0b0FQSShwcml2LT5wYWdlQ2xp
ZW50LT5wYWdlKCkpLCBld2tWaWV3KTsKQEAgLTk0MSw2ICs5NDgsMTQgQEAgRWluYV9Cb29sIGV3
a192aWV3X2ZvcndhcmRfcG9zc2libGUoRXZhc19PYmplY3QqIGV3a1ZpZXcpCiAgICAgcmV0dXJu
IFdLUGFnZUNhbkdvRm9yd2FyZCh0b0FQSShwcml2LT5wYWdlQ2xpZW50LT5wYWdlKCkpKTsKIH0K
IAorRXdrX0JhY2tfRm9yd2FyZF9MaXN0KiBld2tfdmlld19iYWNrX2ZvcndhcmRfbGlzdF9nZXQo
Y29uc3QgRXZhc19PYmplY3QqIGV3a1ZpZXcpCit7CisgICAgRVdLX1ZJRVdfU0RfR0VUX09SX1JF
VFVSTihld2tWaWV3LCBzbWFydERhdGEsIGZhbHNlKTsKKyAgICBFV0tfVklFV19QUklWX0dFVF9P
Ul9SRVRVUk4oc21hcnREYXRhLCBwcml2LCBmYWxzZSk7CisKKyAgICByZXR1cm4gcHJpdi0+YmFj
a0ZvcndhcmRMaXN0OworfQorCiB2b2lkIGV3a192aWV3X2ltYWdlX2RhdGFfc2V0KEV2YXNfT2Jq
ZWN0KiBld2tWaWV3LCB2b2lkKiBpbWFnZURhdGEsIGNvbnN0IEludFNpemUmIHNpemUpCiB7CiAg
ICAgRVdLX1ZJRVdfU0RfR0VUX09SX1JFVFVSTihld2tWaWV3LCBzbWFydERhdGEpOwpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9lZmwvZXdrX3ZpZXcuaCBiL1NvdXJj
ZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZWZsL2V3a192aWV3LmgKaW5kZXggNWQ2OWRmNC4uMmIy
NDdlZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9lZmwvZXdrX3Zp
ZXcuaAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2VmbC9ld2tfdmlldy5oCkBA
IC01Miw2ICs1Miw3IEBACiAjaWZuZGVmIGV3a192aWV3X2gKICNkZWZpbmUgZXdrX3ZpZXdfaAog
CisjaW5jbHVkZSAiZXdrX2JhY2tfZm9yd2FyZF9saXN0LmgiCiAjaW5jbHVkZSAiZXdrX2NvbnRl
eHQuaCIKICNpbmNsdWRlICJld2tfaW50ZW50LmgiCiAjaW5jbHVkZSAiZXdrX3VybF9yZXF1ZXN0
LmgiCkBAIC0zMDksNiArMzEwLDIyIEBAIEVBUEkgRWluYV9Cb29sICAgIGV3a192aWV3X2JhY2tf
cG9zc2libGUoRXZhc19PYmplY3QgKm8pOwogRUFQSSBFaW5hX0Jvb2wgICAgZXdrX3ZpZXdfZm9y
d2FyZF9wb3NzaWJsZShFdmFzX09iamVjdCAqbyk7CiAKIC8qKgorICogR2V0cyB0aGUgYmFjay1m
b3J3YXJkIGxpc3QgYXNzb2NpYXRlZCB3aXRoIHRoaXMgdmlldy4KKyAqCisgKiBUaGUgcmV0dXJu
ZWQgaW5zdGFuY2UgaXMgdW5pcXVlIGZvciB0aGlzIHZpZXcgYW5kIHRodXMgbXVsdGlwbGUgY2Fs
bHMKKyAqIHRvIHRoaXMgZnVuY3Rpb24gd2l0aCB0aGUgc2FtZSB2aWV3IGFzIHBhcmFtZXRlciBy
ZXR1cm5zIHRoZSBzYW1lCisgKiBoYW5kbGUuIFRoaXMgaGFuZGxlIGlzIGFsaXZlIHdoaWxlIHZp
ZXcgaXMgYWxpdmUsIHRodXMgb25lCisgKiBtaWdodCB3YW50IHRvIGxpc3RlbiBmb3IgRVZBU19D
QUxMQkFDS19ERUwgb24gZ2l2ZW4gdmlldworICogKEBhIG8pIHRvIGtub3cgd2hlbiB0byBzdG9w
IHVzaW5nIHJldHVybmVkIGhhbmRsZS4KKyAqCisgKiBAcGFyYW0gbyB2aWV3IG9iamVjdCB0byBn
ZXQgbmF2aWdhdGlvbiBiYWNrLWZvcndhcmQgbGlzdAorICoKKyAqIEByZXR1cm4gdGhlIGJhY2st
Zm9yd2FyZCBsaXN0IGluc3RhbmNlIGhhbmRsZSBhc3NvY2lhdGVkIHdpdGggdGhpcworICogICAg
ICAgICB2aWV3LgorICovCitFQVBJIEV3a19CYWNrX0ZvcndhcmRfTGlzdCAqZXdrX3ZpZXdfYmFj
a19mb3J3YXJkX2xpc3RfZ2V0KGNvbnN0IEV2YXNfT2JqZWN0ICpvKTsKKworLyoqCiAgKiBHZXRz
IHRoZSBjdXJyZW50IHRpdGxlIG9mIHRoZSBtYWluIGZyYW1lLgogICoKICAqIEl0IHJldHVybnMg
YW4gaW50ZXJuYWwgc3RyaW5nIGFuZCBzaG91bGQgbm90CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
S2l0Mi9VSVByb2Nlc3MvQVBJL2VmbC9ld2tfdmlld19sb2FkZXJfY2xpZW50LmNwcCBiL1NvdXJj
ZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZWZsL2V3a192aWV3X2xvYWRlcl9jbGllbnQuY3BwCmlu
ZGV4IGNjOGIxMjAuLmU3N2Q2MTMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vz
cy9BUEkvZWZsL2V3a192aWV3X2xvYWRlcl9jbGllbnQuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQy
L1VJUHJvY2Vzcy9BUEkvZWZsL2V3a192aWV3X2xvYWRlcl9jbGllbnQuY3BwCkBAIC0yNiwxMCAr
MjYsMTIgQEAKICNpbmNsdWRlICJjb25maWcuaCIKIAogI2luY2x1ZGUgIldLRnJhbWUuaCIKKyNp
bmNsdWRlICJld2tfYmFja19mb3J3YXJkX2xpc3RfcHJpdmF0ZS5oIgogI2luY2x1ZGUgImV3a19p
bnRlbnQuaCIKICNpbmNsdWRlICJld2tfaW50ZW50X3ByaXZhdGUuaCIKICNpbmNsdWRlICJld2tf
aW50ZW50X3NlcnZpY2UuaCIKICNpbmNsdWRlICJld2tfaW50ZW50X3NlcnZpY2VfcHJpdmF0ZS5o
IgorI2luY2x1ZGUgImV3a192aWV3LmgiCiAjaW5jbHVkZSAiZXdrX3ZpZXdfbG9hZGVyX2NsaWVu
dF9wcml2YXRlLmgiCiAjaW5jbHVkZSAiZXdrX3ZpZXdfcHJpdmF0ZS5oIgogI2luY2x1ZGUgImV3
a193ZWJfZXJyb3IuaCIKQEAgLTEyMyw2ICsxMjUsMTQgQEAgc3RhdGljIHZvaWQgZGlkRmFpbFBy
b3Zpc2lvbmFsTG9hZFdpdGhFcnJvckZvckZyYW1lKFdLUGFnZVJlZiBwYWdlLCBXS0ZyYW1lUmVm
IGYKICAgICBld2tfd2ViX2Vycm9yX2ZyZWUoZXdrRXJyb3IpOwogfQogCitzdGF0aWMgdm9pZCBk
aWRDaGFuZ2VCYWNrRm9yd2FyZExpc3QoV0tQYWdlUmVmIHBhZ2UsIFdLQmFja0ZvcndhcmRMaXN0
SXRlbVJlZiBhZGRlZEl0ZW0sIFdLQXJyYXlSZWYgcmVtb3ZlZEl0ZW1zLCBjb25zdCB2b2lkKiBj
bGllbnRJbmZvKQoreworICAgIEV2YXNfT2JqZWN0KiBld2tWaWV3ID0gc3RhdGljX2Nhc3Q8RXZh
c19PYmplY3QqPihjb25zdF9jYXN0PHZvaWQqPihjbGllbnRJbmZvKSk7CisgICAgQVNTRVJUKGV3
a1ZpZXcpOworCisgICAgZXdrX2JhY2tfZm9yd2FyZF9saXN0X2NoYW5nZWQoZXdrX3ZpZXdfYmFj
a19mb3J3YXJkX2xpc3RfZ2V0KGV3a1ZpZXcpLCBhZGRlZEl0ZW0sIHJlbW92ZWRJdGVtcyk7Cit9
CisKIHZvaWQgZXdrX3ZpZXdfbG9hZGVyX2NsaWVudF9hdHRhY2goV0tQYWdlUmVmIHBhZ2VSZWYs
IEV2YXNfT2JqZWN0KiBld2tWaWV3KQogewogICAgIFdLUGFnZUxvYWRlckNsaWVudCBsb2FkQ2xp
ZW50OwpAQCAtMTQ0LDUgKzE1NCw2IEBAIHZvaWQgZXdrX3ZpZXdfbG9hZGVyX2NsaWVudF9hdHRh
Y2goV0tQYWdlUmVmIHBhZ2VSZWYsIEV2YXNfT2JqZWN0KiBld2tWaWV3KQogICAgIGxvYWRDbGll
bnQuZGlkU3RhcnRQcm92aXNpb25hbExvYWRGb3JGcmFtZSA9IGRpZFN0YXJ0UHJvdmlzaW9uYWxM
b2FkRm9yRnJhbWU7CiAgICAgbG9hZENsaWVudC5kaWRSZWNlaXZlU2VydmVyUmVkaXJlY3RGb3JQ
cm92aXNpb25hbExvYWRGb3JGcmFtZSA9IGRpZFJlY2VpdmVTZXJ2ZXJSZWRpcmVjdEZvclByb3Zp
c2lvbmFsTG9hZEZvckZyYW1lOwogICAgIGxvYWRDbGllbnQuZGlkRmFpbFByb3Zpc2lvbmFsTG9h
ZFdpdGhFcnJvckZvckZyYW1lID0gZGlkRmFpbFByb3Zpc2lvbmFsTG9hZFdpdGhFcnJvckZvckZy
YW1lOworICAgIGxvYWRDbGllbnQuZGlkQ2hhbmdlQmFja0ZvcndhcmRMaXN0ID0gZGlkQ2hhbmdl
QmFja0ZvcndhcmRMaXN0OwogICAgIFdLUGFnZVNldFBhZ2VMb2FkZXJDbGllbnQocGFnZVJlZiwg
JmxvYWRDbGllbnQpOwogfQo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>154948</attachid>
            <date>2012-07-27 07:49:43 -0700</date>
            <delta_ts>2012-07-30 00:24:18 -0700</delta_ts>
            <desc>patch v3</desc>
            <filename>bug92345_v3</filename>
            <type>text/plain</type>
            <size>32660</size>
            <attacher name="Mikhail Pozdnyakov">mikhail.pozdnyakov</attacher>
            
              <data encoding="base64">Y29tbWl0IGQ0ODBhMzhiNjdlNTg2ZDk5NmYzYjUzY2UyOTIxZTljZWJlYzk1OTgKQXV0aG9yOiBN
aWtoYWlsIFBvemRueWFrb3YgPG1pa2hhaWwucG96ZG55YWtvdkBpbnRlbC5jb20+CkRhdGU6ICAg
RnJpIEp1bCAyNyAxMzowOToyOSAyMDEyICswMzAwCgogICAgYnVnOTIzNDUKCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViS2l0Mi9DaGFuZ2VMb2cgYi9Tb3VyY2UvV2ViS2l0Mi9DaGFuZ2VMb2cKaW5k
ZXggMjE5MDE0My4uZWQxMDBkNCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvQ2hhbmdlTG9n
CisrKyBiL1NvdXJjZS9XZWJLaXQyL0NoYW5nZUxvZwpAQCAtMSwzICsxLDUyIEBACisyMDEyLTA3
LTI3ICBNaWtoYWlsIFBvemRueWFrb3YgIDxtaWtoYWlsLnBvemRueWFrb3ZAaW50ZWwuY29tPgor
CisgICAgICAgIFtFRkxdW1dLMl0gQWRkIGJhY2sgZm9yd2FyZCBsaXN0IEFQSQorICAgICAgICBo
dHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9OTIzNDUKKworICAgICAgICBS
ZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBBZGRlZCBuZXcgQmFjayBGb3J3
YXJkIGxpc3QgQVBJIHRvIEVGTCBXSzIuIEV3a19CYWNrX0ZvcndhcmRfTGlzdCBhbmQKKyAgICAg
ICAgRXdrX0JhY2tfRm9yd2FyZF9MaXN0X0l0ZW0gc3RydWN0dXJlcyB3ZXJlIGFkZGVkLiBUaGUg
bmV3IEFQSSBpcworICAgICAgICBtb3N0bHkgdGhlIHNhbWUgYXMgb25lIGZyb20gVUlQcm9jZXNz
L0FQSS9DL3sgV0tCYWNrRm9yd2FyZExpc3QuaCwgV0tCYWNrRm9yd2FyZExpc3RJdGVtLmggfS4K
KworICAgICAgICAqIFBsYXRmb3JtRWZsLmNtYWtlOgorICAgICAgICAqIFVJUHJvY2Vzcy9BUEkv
ZWZsL2V3a19iYWNrX2ZvcndhcmRfbGlzdC5jcHA6IEFkZGVkLgorICAgICAgICAoX0V3a19CYWNr
X0ZvcndhcmRfTGlzdCk6CisgICAgICAgIChfRXdrX0JhY2tfRm9yd2FyZF9MaXN0OjpfRXdrX0Jh
Y2tfRm9yd2FyZF9MaXN0KToKKyAgICAgICAgKGdldE9yQ3JlYXRlSXRlbSk6CisgICAgICAgICh3
ZWJraXRfYmFja19mb3J3YXJkX2xpc3RfY3VycmVudF9pdGVtX2dldCk6CisgICAgICAgICh3ZWJr
aXRfYmFja19mb3J3YXJkX2xpc3RfYmFja19pdGVtX2dldCk6CisgICAgICAgICh3ZWJraXRfYmFj
a19mb3J3YXJkX2xpc3RfZm9yd2FyZF9pdGVtX2dldCk6CisgICAgICAgICh3ZWJraXRfYmFja19m
b3J3YXJkX2xpc3RfaXRlbV9hdF9pbmRleF9nZXQpOgorICAgICAgICAod2Via2l0X2JhY2tfZm9y
d2FyZF9saXN0X2xlbmd0aF9nZXQpOgorICAgICAgICAoZXdrX2JhY2tfZm9yd2FyZF9saXN0X2No
YW5nZWQpOgorICAgICAgICAoZXdrX2JhY2tfZm9yd2FyZF9saXN0X25ldyk6CisgICAgICAgIChl
d2tfYmFja19mb3J3YXJkX2xpc3RfZnJlZSk6CisgICAgICAgICogVUlQcm9jZXNzL0FQSS9lZmwv
ZXdrX2JhY2tfZm9yd2FyZF9saXN0Lmg6IEFkZGVkLgorICAgICAgICAqIFVJUHJvY2Vzcy9BUEkv
ZWZsL2V3a19iYWNrX2ZvcndhcmRfbGlzdF9pdGVtLmNwcDogQWRkZWQuCisgICAgICAgIChnZXRJ
dGVtUHJvcGVydHkpOgorICAgICAgICAoX0V3a19CYWNrX0ZvcndhcmRfTGlzdF9JdGVtKToKKyAg
ICAgICAgKF9Fd2tfQmFja19Gb3J3YXJkX0xpc3RfSXRlbTo6X0V3a19CYWNrX0ZvcndhcmRfTGlz
dF9JdGVtKToKKyAgICAgICAgKF9Fd2tfQmFja19Gb3J3YXJkX0xpc3RfSXRlbTo6fl9Fd2tfQmFj
a19Gb3J3YXJkX0xpc3RfSXRlbSk6CisgICAgICAgIChld2tfYmFja19mb3J3YXJkX2xpc3RfaXRl
bV9yZWYpOgorICAgICAgICAoZXdrX2JhY2tfZm9yd2FyZF9saXN0X2l0ZW1fdW5yZWYpOgorICAg
ICAgICAoZXdrX2JhY2tfZm9yd2FyZF9saXN0X2l0ZW1fdXJpX2dldCk6CisgICAgICAgIChld2tf
YmFja19mb3J3YXJkX2xpc3RfaXRlbV90aXRsZV9nZXQpOgorICAgICAgICAoZXdrX2JhY2tfZm9y
d2FyZF9saXN0X2l0ZW1fb3JpZ2luYWxfdXJpX2dldCk6CisgICAgICAgIChld2tfYmFja19mb3J3
YXJkX2xpc3RfaXRlbV9uZXcpOgorICAgICAgICAqIFVJUHJvY2Vzcy9BUEkvZWZsL2V3a19iYWNr
X2ZvcndhcmRfbGlzdF9pdGVtLmg6IEFkZGVkLgorICAgICAgICAqIFVJUHJvY2Vzcy9BUEkvZWZs
L2V3a19iYWNrX2ZvcndhcmRfbGlzdF9pdGVtX3ByaXZhdGUuaDogQWRkZWQuCisgICAgICAgICog
VUlQcm9jZXNzL0FQSS9lZmwvZXdrX2JhY2tfZm9yd2FyZF9saXN0X3ByaXZhdGUuaDogQWRkZWQu
CisgICAgICAgICogVUlQcm9jZXNzL0FQSS9lZmwvZXdrX3ZpZXcuY3BwOgorICAgICAgICAoX0V3
a19WaWV3X1ByaXZhdGVfRGF0YSk6CisgICAgICAgIChfRXdrX1ZpZXdfUHJpdmF0ZV9EYXRhOjpf
RXdrX1ZpZXdfUHJpdmF0ZV9EYXRhKToKKyAgICAgICAgKF9Fd2tfVmlld19Qcml2YXRlX0RhdGE6
On5fRXdrX1ZpZXdfUHJpdmF0ZV9EYXRhKToKKyAgICAgICAgKGV3a192aWV3X2JhY2tfZm9yd2Fy
ZF9saXN0X2dldCk6IE5ldyBmdW5jdGlvbiB0byBnZXQgYmFjay1mb3J3YXJkIGxpc3QuCisgICAg
ICAgICogVUlQcm9jZXNzL0FQSS9lZmwvZXdrX3ZpZXcuaDoKKyAgICAgICAgKiBVSVByb2Nlc3Mv
QVBJL2VmbC9ld2tfdmlld19sb2FkZXJfY2xpZW50LmNwcDoKKyAgICAgICAgKGRpZENoYW5nZUJh
Y2tGb3J3YXJkTGlzdCk6IFRoZSBjYWxsYmFjayBhZGRlZCB0byB1cGRhdGUgYmFjay1mb3J3YXJk
IGxpc3QgaXRlbXMgY2FjaGUuCisgICAgICAgIChld2tfdmlld19sb2FkZXJfY2xpZW50X2F0dGFj
aCk6CisKIDIwMTItMDctMjcgIFlvdW5nVGFlY2sgU29uZyAgPHlvdW5ndGFlY2suc29uZ0BzYW1z
dW5nLmNvbT4KIAogICAgICAgICBbV0syXVtFRkxdIEFkZCBhbiBBQ0NFTEVSQVRFRF9DT01QT1NJ
VElORyBpbXBsZW1lbnRhdGlvbiBmb3IgRWZsIFdlYktpdDIKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJLaXQyL1BsYXRmb3JtRWZsLmNtYWtlIGIvU291cmNlL1dlYktpdDIvUGxhdGZvcm1FZmwuY21h
a2UKaW5kZXggMjMyN2FmNS4uNmE2ZWYzNSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvUGxh
dGZvcm1FZmwuY21ha2UKKysrIGIvU291cmNlL1dlYktpdDIvUGxhdGZvcm1FZmwuY21ha2UKQEAg
LTQxLDYgKzQxLDggQEAgTElTVChBUFBFTkQgV2ViS2l0Ml9TT1VSQ0VTCiAgICAgVUlQcm9jZXNz
L0FQSS9lZmwvTmV0d29ya0luZm9Qcm92aWRlci5jcHAKICAgICBVSVByb2Nlc3MvQVBJL2VmbC9Q
YWdlQ2xpZW50SW1wbC5jcHAKICAgICBVSVByb2Nlc3MvQVBJL2VmbC9WaWJyYXRpb25Qcm92aWRl
ci5jcHAKKyAgICBVSVByb2Nlc3MvQVBJL2VmbC9ld2tfYmFja19mb3J3YXJkX2xpc3QuY3BwCisg
ICAgVUlQcm9jZXNzL0FQSS9lZmwvZXdrX2JhY2tfZm9yd2FyZF9saXN0X2l0ZW0uY3BwCiAgICAg
VUlQcm9jZXNzL0FQSS9lZmwvZXdrX2NvbnRleHQuY3BwCiAgICAgVUlQcm9jZXNzL0FQSS9lZmwv
ZXdrX2NvbnRleHRfcmVxdWVzdF9tYW5hZ2VyX2NsaWVudC5jcHAKICAgICBVSVByb2Nlc3MvQVBJ
L2VmbC9ld2tfY29va2llX21hbmFnZXIuY3BwCkBAIC0xODQsNiArMTg2LDggQEAgU0VUKEZvcndh
cmRpbmdOZXR3b3JrSGVhZGVyc19OQU1FIGZvcndhcmRpbmctaGVhZGVyU291cCkKIENPTkZJR1VS
RV9GSUxFKGVmbC9ld2Via2l0Mi5wYy5pbiAke0NNQUtFX0JJTkFSWV9ESVJ9L1dlYktpdDIvZWZs
L2V3ZWJraXQyLnBjIEBPTkxZKQogU0VUIChFV2ViS2l0Ml9IRUFERVJTCiAgICAgIiR7Q01BS0Vf
Q1VSUkVOVF9TT1VSQ0VfRElSfS9VSVByb2Nlc3MvQVBJL2VmbC9FV2ViS2l0Mi5oIgorICAgICIk
e0NNQUtFX0NVUlJFTlRfU09VUkNFX0RJUn0vVUlQcm9jZXNzL0FQSS9lZmwvZXdrX2JhY2tfZm9y
d2FyZF9saXN0LmgiCisgICAgIiR7Q01BS0VfQ1VSUkVOVF9TT1VSQ0VfRElSfS9VSVByb2Nlc3Mv
QVBJL2VmbC9ld2tfYmFja19mb3J3YXJkX2xpc3RfaXRlbS5oIgogICAgICIke0NNQUtFX0NVUlJF
TlRfU09VUkNFX0RJUn0vVUlQcm9jZXNzL0FQSS9lZmwvZXdrX2NvbnRleHQuaCIKICAgICAiJHtD
TUFLRV9DVVJSRU5UX1NPVVJDRV9ESVJ9L1VJUHJvY2Vzcy9BUEkvZWZsL2V3a19jb29raWVfbWFu
YWdlci5oIgogICAgICIke0NNQUtFX0NVUlJFTlRfU09VUkNFX0RJUn0vVUlQcm9jZXNzL0FQSS9l
ZmwvZXdrX2Zvcm1fc3VibWlzc2lvbl9yZXF1ZXN0LmgiCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
S2l0Mi9VSVByb2Nlc3MvQVBJL2VmbC9FV2ViS2l0Mi5oIGIvU291cmNlL1dlYktpdDIvVUlQcm9j
ZXNzL0FQSS9lZmwvRVdlYktpdDIuaAppbmRleCA3NDRmYzE2Li4zNzliZGNkIDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2VmbC9FV2ViS2l0Mi5oCisrKyBiL1NvdXJj
ZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZWZsL0VXZWJLaXQyLmgKQEAgLTI3LDYgKzI3LDggQEAK
ICNpZm5kZWYgRVdlYktpdDJfaAogI2RlZmluZSBFV2ViS2l0Ml9oCiAKKyNpbmNsdWRlICJld2tf
YmFja19mb3J3YXJkX2xpc3QuaCIKKyNpbmNsdWRlICJld2tfYmFja19mb3J3YXJkX2xpc3RfaXRl
bS5oIgogI2luY2x1ZGUgImV3a19jb250ZXh0LmgiCiAjaW5jbHVkZSAiZXdrX2Nvb2tpZV9tYW5h
Z2VyLmgiCiAjaW5jbHVkZSAiZXdrX2Zvcm1fc3VibWlzc2lvbl9yZXF1ZXN0LmgiCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2VmbC9ld2tfYmFja19mb3J3YXJkX2xp
c3QuY3BwIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9lZmwvZXdrX2JhY2tfZm9yd2Fy
ZF9saXN0LmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42ZjIxYWJiCi0t
LSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9lZmwvZXdrX2Jh
Y2tfZm9yd2FyZF9saXN0LmNwcApAQCAtMCwwICsxLDE2MiBAQAorLyoKKyAqIENvcHlyaWdodCAo
QykgMjAxMiBJbnRlbCBDb3Jwb3JhdGlvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBS
ZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9y
IHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRo
ZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9u
cyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2Ug
dGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlv
biBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4K
KyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBD
T05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJS
QU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdB
UlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIK
KyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4g
T1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVD
VCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBE
QU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAq
IFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9G
SVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04g
QU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1Qg
TElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisg
KiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZF
TiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8K
KworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgImV3a19iYWNrX2ZvcndhcmRfbGlzdC5o
IgorCisjaW5jbHVkZSAiV0tBUElDYXN0LmgiCisjaW5jbHVkZSAiV0tBcnJheS5oIgorI2luY2x1
ZGUgIldLQmFja0ZvcndhcmRMaXN0LmgiCisjaW5jbHVkZSAiV0tSZXRhaW5QdHIuaCIKKyNpbmNs
dWRlICJld2tfYmFja19mb3J3YXJkX2xpc3RfaXRlbV9wcml2YXRlLmgiCisjaW5jbHVkZSA8d3Rm
L3RleHQvQ1N0cmluZy5oPgorCit1c2luZyBuYW1lc3BhY2UgV2ViS2l0OworCit0eXBlZGVmIEhh
c2hNYXA8V0tCYWNrRm9yd2FyZExpc3RJdGVtUmVmLCBFd2tfQmFja19Gb3J3YXJkX0xpc3RfSXRl
bSo+IEl0ZW1zTWFwOworCisvKioKKyAqIFxzdHJ1Y3QgIF9Fd2tfQmFja19Gb3J3YXJkX0xpc3QK
KyAqIEBicmllZiAgIENvbnRhaW5zIHRoZSBCYWNrIEZvcndhcmQgTGlzdCBkYXRhLgorICovCitz
dHJ1Y3QgX0V3a19CYWNrX0ZvcndhcmRfTGlzdCB7CisgICAgV0tSZXRhaW5QdHI8V0tCYWNrRm9y
d2FyZExpc3RSZWY+IHdrTGlzdDsKKyAgICBtdXRhYmxlIEl0ZW1zTWFwIGl0ZW1zQ2FjaGU7CisK
KyAgICBfRXdrX0JhY2tfRm9yd2FyZF9MaXN0KFdLQmFja0ZvcndhcmRMaXN0UmVmIGxpc3RSZWYp
CisgICAgICAgIDogd2tMaXN0KGxpc3RSZWYpCisgICAgeyB9CisKKyAgICB+X0V3a19CYWNrX0Zv
cndhcmRfTGlzdCgpCisgICAgeworICAgICAgICBJdGVtc01hcDo6aXRlcmF0b3IgaXQgPSBpdGVt
c0NhY2hlLmJlZ2luKCk7CisgICAgICAgIEl0ZW1zTWFwOjppdGVyYXRvciBlbmQgPSBpdGVtc0Nh
Y2hlLmJlZ2luKCk7CisgICAgICAgIGZvciAoOyBpdCAhPSBlbmQ7ICsraXQpCisgICAgICAgICAg
ICBld2tfYmFja19mb3J3YXJkX2xpc3RfaXRlbV91bnJlZihpdC0+c2Vjb25kKTsKKworICAgIH0K
K307CisKKyNkZWZpbmUgRVdLX0JBQ0tfRk9SV0FSRF9MSVNUX1dLX0dFVF9PUl9SRVRVUk4obGlz
dCwgd2tMaXN0XywgLi4uKSAgXAorICAgIGlmICghKGxpc3QpKSB7ICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICBFSU5BX0xPR19DUklUKCJsaXN0
IGlzIE5VTEwuIik7ICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICByZXR1cm4gX19W
QV9BUkdTX187ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIH0gICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAor
ICAgIGlmICghKGxpc3QpLT53a0xpc3QpIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgXAorICAgICAgICBFSU5BX0xPR19DUklUKCJsaXN0LT53a0xpc3QgaXMgTlVMTC4iKTsg
ICAgICAgICAgICAgICAgXAorICAgICAgICByZXR1cm4gX19WQV9BUkdTX187ICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIH0gICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIFdLQmFja0ZvcndhcmRMaXN0
UmVmIHdrTGlzdF8gPSAobGlzdCktPndrTGlzdC5nZXQoKQorCisKK3N0YXRpYyBpbmxpbmUgRXdr
X0JhY2tfRm9yd2FyZF9MaXN0X0l0ZW0qIGdldE9yQ3JlYXRlSXRlbShjb25zdCBFd2tfQmFja19G
b3J3YXJkX0xpc3QqIGxpc3QsIFdLQmFja0ZvcndhcmRMaXN0SXRlbVJlZiB3a0l0ZW0pCit7Cisg
ICAgRUlOQV9TQUZFVFlfT05fTlVMTF9SRVRVUk5fVkFMKGxpc3QsIDApOworICAgIEVJTkFfU0FG
RVRZX09OX05VTExfUkVUVVJOX1ZBTCh3a0l0ZW0sIDApOworCisgICAgRXdrX0JhY2tfRm9yd2Fy
ZF9MaXN0X0l0ZW0qIGl0ZW0gPSBsaXN0LT5pdGVtc0NhY2hlLmdldCh3a0l0ZW0pOworICAgIGlm
ICghaXRlbSkgeworICAgICAgICBpdGVtID0gZXdrX2JhY2tfZm9yd2FyZF9saXN0X2l0ZW1fbmV3
KHdrSXRlbSk7CisgICAgICAgIGxpc3QtPml0ZW1zQ2FjaGUuc2V0KHdrSXRlbSwgaXRlbSk7Cisg
ICAgfQorCisgICAgcmV0dXJuIGl0ZW07Cit9CisKK0V3a19CYWNrX0ZvcndhcmRfTGlzdF9JdGVt
KiBld2tfYmFja19mb3J3YXJkX2xpc3RfY3VycmVudF9pdGVtX2dldChjb25zdCBFd2tfQmFja19G
b3J3YXJkX0xpc3QgKmxpc3QpCit7CisgICAgRVdLX0JBQ0tfRk9SV0FSRF9MSVNUX1dLX0dFVF9P
Ul9SRVRVUk4obGlzdCwgd2tMaXN0LCAwKTsKKworICAgIHJldHVybiBnZXRPckNyZWF0ZUl0ZW0o
bGlzdCwgV0tCYWNrRm9yd2FyZExpc3RHZXRDdXJyZW50SXRlbSh3a0xpc3QpKTsKK30KKworRXdr
X0JhY2tfRm9yd2FyZF9MaXN0X0l0ZW0qIGV3a19iYWNrX2ZvcndhcmRfbGlzdF9wcmV2aW91c19p
dGVtX2dldChjb25zdCBFd2tfQmFja19Gb3J3YXJkX0xpc3QqIGxpc3QpCit7CisgICAgRVdLX0JB
Q0tfRk9SV0FSRF9MSVNUX1dLX0dFVF9PUl9SRVRVUk4obGlzdCwgd2tMaXN0LCAwKTsKKworICAg
IHJldHVybiBnZXRPckNyZWF0ZUl0ZW0obGlzdCwgV0tCYWNrRm9yd2FyZExpc3RHZXRCYWNrSXRl
bSh3a0xpc3QpKTsKK30KKworRXdrX0JhY2tfRm9yd2FyZF9MaXN0X0l0ZW0qIGV3a19iYWNrX2Zv
cndhcmRfbGlzdF9uZXh0X2l0ZW1fZ2V0KGNvbnN0IEV3a19CYWNrX0ZvcndhcmRfTGlzdCogbGlz
dCkKK3sKKyAgICBFV0tfQkFDS19GT1JXQVJEX0xJU1RfV0tfR0VUX09SX1JFVFVSTihsaXN0LCB3
a0xpc3QsIDApOworCisgICAgcmV0dXJuIGdldE9yQ3JlYXRlSXRlbShsaXN0LCBXS0JhY2tGb3J3
YXJkTGlzdEdldEZvcndhcmRJdGVtKHdrTGlzdCkpOworfQorCitFd2tfQmFja19Gb3J3YXJkX0xp
c3RfSXRlbSogZXdrX2JhY2tfZm9yd2FyZF9saXN0X2l0ZW1fYXRfaW5kZXhfZ2V0KGNvbnN0IEV3
a19CYWNrX0ZvcndhcmRfTGlzdCogbGlzdCwgaW50IGluZGV4KQoreworICAgIEVXS19CQUNLX0ZP
UldBUkRfTElTVF9XS19HRVRfT1JfUkVUVVJOKGxpc3QsIHdrTGlzdCwgMCk7CisKKyAgICByZXR1
cm4gZ2V0T3JDcmVhdGVJdGVtKGxpc3QsIFdLQmFja0ZvcndhcmRMaXN0R2V0SXRlbUF0SW5kZXgo
d2tMaXN0LCBpbmRleCkpOworfQorCit1bnNpZ25lZCBld2tfYmFja19mb3J3YXJkX2xpc3RfY291
bnQoRXdrX0JhY2tfRm9yd2FyZF9MaXN0KiBsaXN0KQoreworICAgIEVXS19CQUNLX0ZPUldBUkRf
TElTVF9XS19HRVRfT1JfUkVUVVJOKGxpc3QsIHdrTGlzdCwgMCk7CisKKyAgICBjb25zdCB1bnNp
Z25lZCBjdXJyZW50SXRlbSA9IGV3a19iYWNrX2ZvcndhcmRfbGlzdF9jdXJyZW50X2l0ZW1fZ2V0
KGxpc3QpID8gMSA6IDA7CisKKyAgICByZXR1cm4gV0tCYWNrRm9yd2FyZExpc3RHZXRCYWNrTGlz
dENvdW50KHdrTGlzdCkgKyBXS0JhY2tGb3J3YXJkTGlzdEdldEZvcndhcmRMaXN0Q291bnQod2tM
aXN0KSArIGN1cnJlbnRJdGVtOworfQorCisKKy8qKgorICogQGludGVybmFsCisgKiBVcGRhdGVz
IGl0ZW1zIGNhY2hlLgorICovCit2b2lkIGV3a19iYWNrX2ZvcndhcmRfbGlzdF9jaGFuZ2VkKEV3
a19CYWNrX0ZvcndhcmRfTGlzdCogbGlzdCwgV0tCYWNrRm9yd2FyZExpc3RJdGVtUmVmIHdrQWRk
ZWRJdGVtLCBXS0FycmF5UmVmIHdrUmVtb3ZlZEl0ZW1zKQoreworICAgICh2b2lkKWdldE9yQ3Jl
YXRlSXRlbShsaXN0LCB3a0FkZGVkSXRlbSk7IC8vIFB1dHMgbmV3IGl0ZW0gdG8gdGhlIGNhY2hl
LgorCisgICAgY29uc3Qgc2l6ZV90IHJlbW92ZWRJdGVtc1NpemUgPSB3a1JlbW92ZWRJdGVtcyA/
IFdLQXJyYXlHZXRTaXplKHdrUmVtb3ZlZEl0ZW1zKSA6IDA7CisgICAgZm9yIChzaXplX3QgaSA9
IDA7IGkgPCByZW1vdmVkSXRlbXNTaXplOyArK2kpIHsKKyAgICAgICAgV0tCYWNrRm9yd2FyZExp
c3RJdGVtUmVmIHdrSXRlbSA9IHN0YXRpY19jYXN0PFdLQmFja0ZvcndhcmRMaXN0SXRlbVJlZj4o
V0tBcnJheUdldEl0ZW1BdEluZGV4KHdrUmVtb3ZlZEl0ZW1zLCBpKSk7CisgICAgICAgIGlmIChF
d2tfQmFja19Gb3J3YXJkX0xpc3RfSXRlbSogaXRlbSA9IGxpc3QtPml0ZW1zQ2FjaGUudGFrZSh3
a0l0ZW0pKQorICAgICAgICAgICAgZXdrX2JhY2tfZm9yd2FyZF9saXN0X2l0ZW1fdW5yZWYoaXRl
bSk7CisgICAgfQorfQorCisvKioKKyAqIEBpbnRlcm5hbAorICogQ29uc3RydWN0cyBhIEV3a19C
YWNrX0ZvcndhcmRfTGlzdCBmcm9tIGEgV0tCYWNrRm9yd2FyZExpc3RSZWYuCisgKi8KK0V3a19C
YWNrX0ZvcndhcmRfTGlzdCogZXdrX2JhY2tfZm9yd2FyZF9saXN0X25ldyhXS0JhY2tGb3J3YXJk
TGlzdFJlZiB3a0JhY2tGb3J3YXJkTGlzdFJlZikKK3sKKyAgICBFSU5BX1NBRkVUWV9PTl9OVUxM
X1JFVFVSTl9WQUwod2tCYWNrRm9yd2FyZExpc3RSZWYsIDApOworCisgICAgcmV0dXJuIG5ldyBF
d2tfQmFja19Gb3J3YXJkX0xpc3Qod2tCYWNrRm9yd2FyZExpc3RSZWYpOworfQorCisvKioKKyAq
IEBpbnRlcm5hbAorICogRnJlZXMgYSBFd2tfQmFja19Gb3J3YXJkX0xpc3Qgb2JqZWN0LgorICov
Cit2b2lkIGV3a19iYWNrX2ZvcndhcmRfbGlzdF9mcmVlKEV3a19CYWNrX0ZvcndhcmRfTGlzdCog
bGlzdCkKK3sKKyAgICBFSU5BX1NBRkVUWV9PTl9OVUxMX1JFVFVSTihsaXN0KTsKKworICAgIGRl
bGV0ZSBsaXN0OworfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9l
ZmwvZXdrX2JhY2tfZm9yd2FyZF9saXN0LmggYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJ
L2VmbC9ld2tfYmFja19mb3J3YXJkX2xpc3QuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAw
MDAwMDAwLi40MzkwZDEzCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYktpdDIvVUlQcm9j
ZXNzL0FQSS9lZmwvZXdrX2JhY2tfZm9yd2FyZF9saXN0LmgKQEAgLTAsMCArMSw5MiBAQAorLyoK
KyAqIENvcHlyaWdodCAoQykgMjAxMiBJbnRlbCBDb3Jwb3JhdGlvbi4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5
IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBw
cm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEu
IFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29w
eXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0g
bXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICog
ICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhl
IGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExF
IElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1Mg
T1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAq
IFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZP
UiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNI
QUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkg
RElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICog
Q09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJP
Q1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNF
LCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVS
IENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENP
TlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBP
UiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJ
UyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VD
SCBEQU1BR0UuCisgKi8KKworLyoqCisgKiBAZmlsZSAgICBld2tfYmFja19mb3J3YXJkX2xpc3Qu
aAorICogQGJyaWVmICAgRGVzY3JpYmVzIHRoZSBFd2sgQmFjayBGb3J3YXJkIExpc3QgQVBJLgor
ICovCisKKyNpZm5kZWYgZXdrX2JhY2tfZm9yd2FyZF9saXN0X2gKKyNkZWZpbmUgZXdrX2JhY2tf
Zm9yd2FyZF9saXN0X2gKKworI2luY2x1ZGUgImV3a19iYWNrX2ZvcndhcmRfbGlzdF9pdGVtLmgi
CisKKyNpZmRlZiBfX2NwbHVzcGx1cworZXh0ZXJuICJDIiB7CisjZW5kaWYKKworLyoqIENyZWF0
ZXMgYSB0eXBlIG5hbWUgZm9yIF9Fd2tfQmFja19Gb3J3YXJkX0xpc3QgKi8KK3R5cGVkZWYgc3Ry
dWN0IF9Fd2tfQmFja19Gb3J3YXJkX0xpc3QgRXdrX0JhY2tfRm9yd2FyZF9MaXN0OworCisvKioK
KyAqIFJldHVybnMgdGhlIGN1cnJlbnQgaXRlbSBpbiB0aGUgQGEgbGlzdC4KKyAqCisgKiBAcGFy
YW0gbGlzdCB0aGUgYmFjay1mb3J3YXJkIGxpc3QgaW5zdGFuY2UKKyAqCisgKiBAcmV0dXJuIHRo
ZSBjdXJyZW50IGl0ZW0gaW4gdGhlIEBhIGxpc3Qgb3IgQGMgTlVMTCBpbiBjYXNlIG9mIGVycm9y
LgorICovCitFQVBJIEV3a19CYWNrX0ZvcndhcmRfTGlzdF9JdGVtICpld2tfYmFja19mb3J3YXJk
X2xpc3RfY3VycmVudF9pdGVtX2dldChjb25zdCBFd2tfQmFja19Gb3J3YXJkX0xpc3QgKmxpc3Qp
OworCisvKioKKyAqIFJldHVybnMgdGhlIGl0ZW0gdGhhdCBwcmVjZWRlcyB0aGUgY3VycmVudCBp
dGVtIGluIHRoZSBAYSBsaXN0LgorICoKKyAqIEBwYXJhbSBsaXN0IHRoZSBiYWNrLWZvcndhcmQg
bGlzdCBpbnN0YW5jZQorICoKKyAqIEByZXR1cm4gdGhlIGl0ZW0gdGhhdCBwcmVjZWRlcyB0aGUg
Y3VycmVudCBpdGVtIHRoZSBAYSBsaXN0IG9yIEBjIE5VTEwgaW4gY2FzZSBvZiBlcnJvci4KKyAq
LworRUFQSSBFd2tfQmFja19Gb3J3YXJkX0xpc3RfSXRlbSAqZXdrX2JhY2tfZm9yd2FyZF9saXN0
X3ByZXZpb3VzX2l0ZW1fZ2V0KGNvbnN0IEV3a19CYWNrX0ZvcndhcmRfTGlzdCAqbGlzdCk7CisK
Ky8qKgorICogUmV0dXJucyB0aGUgaXRlbSB0aGF0IGZvbGxvd3MgdGhlIGN1cnJlbnQgaXRlbSBp
biB0aGUgQGEgbGlzdC4KKyAqCisgKiBAcGFyYW0gbGlzdCB0aGUgYmFjay1mb3J3YXJkIGxpc3Qg
aW5zdGFuY2UKKyAqCisgKiBAcmV0dXJuIHRoZSBpdGVtIHRoYXQgZm9sbG93cyB0aGUgY3VycmVu
dCBpdGVtIGluIHRoZSBAYSBsaXN0IG9yIEBjIE5VTEwgaW4gY2FzZSBvZiBlcnJvci4KKyAqLwor
RUFQSSBFd2tfQmFja19Gb3J3YXJkX0xpc3RfSXRlbSAqZXdrX2JhY2tfZm9yd2FyZF9saXN0X25l
eHRfaXRlbV9nZXQoY29uc3QgRXdrX0JhY2tfRm9yd2FyZF9MaXN0ICpsaXN0KTsKKworLyoqCisg
KiBSZXR1cm5zIHRoZSBpdGVtIGF0IGEgZ2l2ZW4gQGEgaW5kZXggcmVsYXRpdmUgdG8gdGhlIGN1
cnJlbnQgaXRlbS4KKyAqCisgKiBAcGFyYW0gbGlzdCB0aGUgYmFjay1mb3J3YXJkIGxpc3QgaW5z
dGFuY2UKKyAqIEBwYXJhbSBpbmRleCB0aGUgaW5kZXggb2YgdGhlIGl0ZW0KKyAqCisgKiBAcmV0
dXJuIHRoZSBpdGVtIGF0IGEgZ2l2ZW4gQGEgaW5kZXggcmVsYXRpdmUgdG8gdGhlIGN1cnJlbnQg
aXRlbSBvciBAYyBOVUxMIGluIGNhc2Ugb2YgZXJyb3IuCisgKi8KK0VBUEkgRXdrX0JhY2tfRm9y
d2FyZF9MaXN0X0l0ZW0gKmV3a19iYWNrX2ZvcndhcmRfbGlzdF9pdGVtX2F0X2luZGV4X2dldChj
b25zdCBFd2tfQmFja19Gb3J3YXJkX0xpc3QgKmxpc3QsIGludCBpbmRleCk7CisKKy8qKgorICog
UmV0dXJucyB0aGUgbGVuZ3RoIG9mIHRoZSBiYWNrLWZvcndhcmQgbGlzdCBpbmNsdWRpbmcgY3Vy
cmVudCBpdGVtLgorICoKKyAqIEBwYXJhbSBsaXN0IHRoZSBiYWNrLWZvcndhcmQgbGlzdCBpbnN0
YW5jZQorICoKKyAqIEByZXR1cm4gdGhlIGxlbmd0aCBvZiB0aGUgYmFjay1mb3J3YXJkIGxpc3Qg
aW5jbHVkaW5nIGN1cnJlbnQgaXRlbSBvciBAYyAwIGluIGNhc2Ugb2YgZXJyb3IuCisgKi8KK0VB
UEkgdW5zaWduZWQgZXdrX2JhY2tfZm9yd2FyZF9saXN0X2NvdW50KEV3a19CYWNrX0ZvcndhcmRf
TGlzdCAqbGlzdCk7CisKKyNpZmRlZiBfX2NwbHVzcGx1cworfQorI2VuZGlmCisjZW5kaWYgLy8g
ZXdrX2JhY2tfZm9yd2FyZF9saXN0X2gKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1VJUHJv
Y2Vzcy9BUEkvZWZsL2V3a19iYWNrX2ZvcndhcmRfbGlzdF9pdGVtLmNwcCBiL1NvdXJjZS9XZWJL
aXQyL1VJUHJvY2Vzcy9BUEkvZWZsL2V3a19iYWNrX2ZvcndhcmRfbGlzdF9pdGVtLmNwcApuZXcg
ZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42M2VjMzQzCi0tLSAvZGV2L251bGwKKysr
IGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9lZmwvZXdrX2JhY2tfZm9yd2FyZF9saXN0
X2l0ZW0uY3BwCkBAIC0wLDAgKzEsMTE2IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEyIElu
dGVsIENvcnBvcmF0aW9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0
aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAor
ICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2lu
ZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJj
ZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhp
cyBpdGVtIG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIu
IFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUg
Y29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgaXRlbSBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBv
dGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRI
SVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9S
UyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBP
RiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9T
RSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09O
VFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVO
VEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVU
RSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJV
U0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZ
IE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFks
IE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcg
SU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklT
RUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVk
ZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiZXdrX2JhY2tfZm9yd2FyZF9saXN0X2l0ZW0uaCIKKwor
I2luY2x1ZGUgIldLQVBJQ2FzdC5oIgorI2luY2x1ZGUgIldLQmFja0ZvcndhcmRMaXN0SXRlbS5o
IgorI2luY2x1ZGUgIldLUmV0YWluUHRyLmgiCisjaW5jbHVkZSAiV0tTdHJpbmcuaCIKKyNpbmNs
dWRlICJXS1VSTC5oIgorI2luY2x1ZGUgPHd0Zi90ZXh0L0NTdHJpbmcuaD4KKwordXNpbmcgbmFt
ZXNwYWNlIFdlYktpdDsKKwordGVtcGxhdGUgPHR5cGVuYW1lIFdLUmVmVHlwZT4KK2lubGluZSBj
b25zdCBjaGFyKiBnZXRJdGVtUHJvcGVydHkoV0tCYWNrRm9yd2FyZExpc3RJdGVtUmVmIHJlZiwg
V0tSZWZUeXBlIHZhbCkKK3sKKyAgICBBU1NFUlQocmVmKTsKKyAgICBXS1JldGFpblB0cjxXS1Jl
ZlR5cGU+IHdrUHJvcChBZG9wdFdLLCB2YWwpOworICAgIHJldHVybiBlaW5hX3N0cmluZ3NoYXJl
X2FkZCh0b0ltcGwod2tQcm9wLmdldCgpKS0+c3RyaW5nKCkudXRmOCgpLmRhdGEoKSk7Cit9CisK
Ky8qKgorICogXHN0cnVjdCAgX0V3a19CYWNrX0ZvcndhcmRfTGlzdAorICogQGJyaWVmICAgQ29u
dGFpbnMgdGhlIEJhY2sgRm9yd2FyZCBMaXN0IGRhdGEuCisgKi8KK3N0cnVjdCBfRXdrX0JhY2tf
Rm9yd2FyZF9MaXN0X0l0ZW0geworICAgIHVuc2lnbmVkIGludCBfX3JlZjsgLyoqPCB0aGUgcmVm
ZXJlbmNlIGNvdW50IG9mIHRoZSBvYmplY3QgKi8KKyAgICBXS1JldGFpblB0cjxXS0JhY2tGb3J3
YXJkTGlzdEl0ZW1SZWY+IHdrSXRlbTsKKyAgICBjb25zdCBjaGFyKiB1cmk7CisgICAgY29uc3Qg
Y2hhciogdGl0bGU7CisgICAgY29uc3QgY2hhciogb3JpZ2luYWxVcmk7CisKKyAgICBfRXdrX0Jh
Y2tfRm9yd2FyZF9MaXN0X0l0ZW0oV0tCYWNrRm9yd2FyZExpc3RJdGVtUmVmIGl0ZW1SZWYpCisg
ICAgICAgIDogX19yZWYoMSkKKyAgICAgICAgLCB3a0l0ZW0oaXRlbVJlZikKKyAgICAgICAgLCB1
cmkoZ2V0SXRlbVByb3BlcnR5PFdLVVJMUmVmPihpdGVtUmVmLCBXS0JhY2tGb3J3YXJkTGlzdEl0
ZW1Db3B5VVJMKGl0ZW1SZWYpKSkKKyAgICAgICAgLCB0aXRsZShnZXRJdGVtUHJvcGVydHk8V0tT
dHJpbmdSZWY+KGl0ZW1SZWYsIFdLQmFja0ZvcndhcmRMaXN0SXRlbUNvcHlUaXRsZShpdGVtUmVm
KSkpCisgICAgICAgICwgb3JpZ2luYWxVcmkoZ2V0SXRlbVByb3BlcnR5PFdLVVJMUmVmPihpdGVt
UmVmLCBXS0JhY2tGb3J3YXJkTGlzdEl0ZW1Db3B5T3JpZ2luYWxVUkwoaXRlbVJlZikpKQorICAg
IHsgfQorCisgICAgfl9Fd2tfQmFja19Gb3J3YXJkX0xpc3RfSXRlbSgpCisgICAgeworICAgICAg
ICBBU1NFUlQoIV9fcmVmKTsKKyAgICAgICAgZWluYV9zdHJpbmdzaGFyZV9kZWwodXJpKTsKKyAg
ICAgICAgZWluYV9zdHJpbmdzaGFyZV9kZWwodGl0bGUpOworICAgICAgICBlaW5hX3N0cmluZ3No
YXJlX2RlbChvcmlnaW5hbFVyaSk7CisgICAgfQorfTsKKwordm9pZCBld2tfYmFja19mb3J3YXJk
X2xpc3RfaXRlbV9yZWYoRXdrX0JhY2tfRm9yd2FyZF9MaXN0X0l0ZW0qIGl0ZW0pCit7CisgICAg
RUlOQV9TQUZFVFlfT05fTlVMTF9SRVRVUk4oaXRlbSk7CisgICAgKytpdGVtLT5fX3JlZjsKK30K
Kwordm9pZCBld2tfYmFja19mb3J3YXJkX2xpc3RfaXRlbV91bnJlZihFd2tfQmFja19Gb3J3YXJk
X0xpc3RfSXRlbSogaXRlbSkKK3sKKyAgICBFSU5BX1NBRkVUWV9PTl9OVUxMX1JFVFVSTihpdGVt
KTsKKworICAgIGlmICgtLWl0ZW0tPl9fcmVmKQorICAgICAgICByZXR1cm47CisKKyAgICBkZWxl
dGUgaXRlbTsKK30KKworY29uc3QgY2hhciogZXdrX2JhY2tfZm9yd2FyZF9saXN0X2l0ZW1fdXJp
X2dldChjb25zdCBFd2tfQmFja19Gb3J3YXJkX0xpc3RfSXRlbSogaXRlbSkKK3sKKyAgICBFSU5B
X1NBRkVUWV9PTl9OVUxMX1JFVFVSTl9WQUwoaXRlbSwgMCk7CisKKyAgICByZXR1cm4gaXRlbS0+
dXJpOworfQorCitjb25zdCBjaGFyKiBld2tfYmFja19mb3J3YXJkX2xpc3RfaXRlbV90aXRsZV9n
ZXQoY29uc3QgRXdrX0JhY2tfRm9yd2FyZF9MaXN0X0l0ZW0qIGl0ZW0pCit7CisgICAgRUlOQV9T
QUZFVFlfT05fTlVMTF9SRVRVUk5fVkFMKGl0ZW0sIDApOworCisgICAgcmV0dXJuIGl0ZW0tPnRp
dGxlOworfQorCitjb25zdCBjaGFyKiBld2tfYmFja19mb3J3YXJkX2xpc3RfaXRlbV9vcmlnaW5h
bF91cmlfZ2V0KGNvbnN0IEV3a19CYWNrX0ZvcndhcmRfTGlzdF9JdGVtKiBpdGVtKQoreworICAg
IEVJTkFfU0FGRVRZX09OX05VTExfUkVUVVJOX1ZBTChpdGVtLCAwKTsKKworICAgIHJldHVybiBp
dGVtLT5vcmlnaW5hbFVyaTsKK30KKworRXdrX0JhY2tfRm9yd2FyZF9MaXN0X0l0ZW0qIGV3a19i
YWNrX2ZvcndhcmRfbGlzdF9pdGVtX25ldyhXS0JhY2tGb3J3YXJkTGlzdEl0ZW1SZWYgYmFja0Zv
cndhcmRMaXN0SXRlbURhdGEpCit7CisgICAgRUlOQV9TQUZFVFlfT05fTlVMTF9SRVRVUk5fVkFM
KGJhY2tGb3J3YXJkTGlzdEl0ZW1EYXRhLCAwKTsKKworICAgIHJldHVybiBuZXcgRXdrX0JhY2tf
Rm9yd2FyZF9MaXN0X0l0ZW0oYmFja0ZvcndhcmRMaXN0SXRlbURhdGEpOworfQpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9lZmwvZXdrX2JhY2tfZm9yd2FyZF9saXN0
X2l0ZW0uaCBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZWZsL2V3a19iYWNrX2Zvcndh
cmRfbGlzdF9pdGVtLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uN2JlMDY1
NwotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZWZsL2V3
a19iYWNrX2ZvcndhcmRfbGlzdF9pdGVtLmgKQEAgLTAsMCArMSwxMDYgQEAKKy8qCisgKiBDb3B5
cmlnaHQgKEMpIDIwMTIgSW50ZWwgQ29ycG9yYXRpb24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisg
KgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywg
d2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQg
dGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3Ry
aWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAor
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVw
cm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3Vt
ZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmli
dXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFO
RCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJ
RUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1Q
TElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJU
SUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBM
RSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwg
SU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVF
TlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5U
IE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwg
T1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQg
QU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwg
U1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJX
SVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdB
UkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdF
LgorICovCisKKy8qKgorICogQGZpbGUgICAgZXdrX2JhY2tfZm9yd2FyZF9saXN0X2l0ZW0uaAor
ICogQGJyaWVmICAgRGVzY3JpYmVzIHRoZSBFd2sgQmFjayBGb3J3YXJkIExpc3QgSXRlbSBBUEku
CisgKi8KKworI2lmbmRlZiBld2tfYmFja19mb3J3YXJkX2xpc3RfaXRlbV9oCisjZGVmaW5lIGV3
a19iYWNrX2ZvcndhcmRfbGlzdF9pdGVtX2gKKworI2luY2x1ZGUgPEVpbmEuaD4KKworI2lmZGVm
IF9fY3BsdXNwbHVzCitleHRlcm4gIkMiIHsKKyNlbmRpZgorCisvKiogQ3JlYXRlcyBhIHR5cGUg
bmFtZSBmb3IgX0V3a19CYWNrX0ZvcndhcmRfTGlzdF9JdGVtICovCit0eXBlZGVmIHN0cnVjdCBf
RXdrX0JhY2tfRm9yd2FyZF9MaXN0X0l0ZW0gRXdrX0JhY2tfRm9yd2FyZF9MaXN0X0l0ZW07CisK
Ky8qKgorICogSW5jcmVhc2VzIHRoZSByZWZlcmVuY2UgY291bnQgb2YgdGhlIGdpdmVuIG9iamVj
dC4KKyAqCisgKiBAcGFyYW0gaXRlbSB0aGUgYmFjay1mb3J3YXJkIGxpc3QgaXRlbSBpbnN0YW5j
ZSB0byBpbmNyZWFzZSB0aGUgcmVmZXJlbmNlIGNvdW50CisgKi8KK0VBUEkgdm9pZCBld2tfYmFj
a19mb3J3YXJkX2xpc3RfaXRlbV9yZWYoRXdrX0JhY2tfRm9yd2FyZF9MaXN0X0l0ZW0gKml0ZW0p
OworCisvKioKKyAqIERlY3JlYXNlcyB0aGUgcmVmZXJlbmNlIGNvdW50IG9mIHRoZSBnaXZlbiBv
YmplY3QsIHBvc3NpYmx5IGZyZWVpbmcgaXQuCisgKgorICogV2hlbiB0aGUgcmVmZXJlbmNlIGNv
dW50IHJlYWNoZXMgMCwgdGhlIGl0ZW0gaXMgZnJlZWQuCisgKgorICogQHBhcmFtIGl0ZW0gdGhl
IGJhY2stZm9yd2FyZCBsaXN0IGl0ZW0gaW5zdGFuY2UgdG8gZGVjcmVhc2UgdGhlIHJlZmVyZW5j
ZSBjb3VudAorICovCitFQVBJIHZvaWQgZXdrX2JhY2tfZm9yd2FyZF9saXN0X2l0ZW1fdW5yZWYo
RXdrX0JhY2tfRm9yd2FyZF9MaXN0X0l0ZW0gKml0ZW0pOworCisvKioKKyAqIFJldHVybnMgVVJJ
IG9mIHRoZSBpdGVtLgorICoKKyAqIFRoZSByZXR1cm5lZCBVUkkgbWF5IGRpZmZlciBmcm9tIHRo
ZSBvcmlnaW5hbCBVUkkgKEZvciBleGFtcGxlIGlmIHRoZSBwYWdlIHdhcyByZWRpcmVjdGVkKS4K
KyAqIEBzZWUgZXdrX2JhY2tfZm9yd2FyZF9saXN0X2l0ZW1fb3JpZ2luYWxfdXJpX2dldCgpLgor
ICoKKyAqIEBwYXJhbSBpdGVtIHRoZSBiYWNrLWZvcndhcmQgbGlzdCBpdGVtIGluc3RhbmNlCisg
KgorICogQHJldHVybiB0aGUgVVJJIG9mIHRoZSBAYSBpdGVtIG9yIEBjIE5VTEwgaW4gY2FzZSBv
ZiBlcnJvci4gVGhpcyBwb2ludGVyIGlzCisgKiAgICAgICAgIGd1YXJhbnRlZWQgdG8gYmUgZWlu
YV9zdHJpbmdzaGFyZSwgc28gd2hlbmV2ZXIgcG9zc2libGUKKyAqICAgICAgICAgc2F2ZSB5b3Vy
c2VsZiBzb21lIGNwdSBjeWNsZXMgYW5kIHVzZQorICogICAgICAgICBlaW5hX3N0cmluZ3NoYXJl
X3JlZigpIGluc3RlYWQgb2YgZWluYV9zdHJpbmdzaGFyZV9hZGQoKSBvcgorICogICAgICAgICBz
dHJkdXAoKS4KKyAqLworRUFQSSBjb25zdCBjaGFyICpld2tfYmFja19mb3J3YXJkX2xpc3RfaXRl
bV91cmlfZ2V0KGNvbnN0IEV3a19CYWNrX0ZvcndhcmRfTGlzdF9JdGVtICppdGVtKTsKKworLyoq
CisgKiBSZXR1cm5zIHRpdGxlIG9mIHRoZSBpdGVtLgorICoKKyAqIEBwYXJhbSBpdGVtIHRoZSBi
YWNrLWZvcndhcmQgbGlzdCBpdGVtIGluc3RhbmNlCisgKgorICogQHJldHVybiB0aGUgdGl0bGUg
b2YgdGhlIEBhIGl0ZW0gb3IgQGMgTlVMTCBpbiBjYXNlIG9mIGVycm9yLiBUaGlzIHBvaW50ZXIg
aXMKKyAqICAgICAgICAgZ3VhcmFudGVlZCB0byBiZSBlaW5hX3N0cmluZ3NoYXJlLCBzbyB3aGVu
ZXZlciBwb3NzaWJsZQorICogICAgICAgICBzYXZlIHlvdXJzZWxmIHNvbWUgY3B1IGN5Y2xlcyBh
bmQgdXNlCisgKiAgICAgICAgIGVpbmFfc3RyaW5nc2hhcmVfcmVmKCkgaW5zdGVhZCBvZiBlaW5h
X3N0cmluZ3NoYXJlX2FkZCgpIG9yCisgKiAgICAgICAgIHN0cmR1cCgpLgorICovCitFQVBJIGNv
bnN0IGNoYXIgKmV3a19iYWNrX2ZvcndhcmRfbGlzdF9pdGVtX3RpdGxlX2dldChjb25zdCBFd2tf
QmFja19Gb3J3YXJkX0xpc3RfSXRlbSAqaXRlbSk7CisKKy8qKgorICogUmV0dXJucyBvcmlnaW5h
bCBVUkkgb2YgdGhlIGl0ZW0uCisgKgorICogQHNlZSBld2tfYmFja19mb3J3YXJkX2xpc3RfaXRl
bV91cmlfZ2V0KCkuCisgKgorICogQHBhcmFtIGl0ZW0gdGhlIGJhY2stZm9yd2FyZCBsaXN0IGl0
ZW0gaW5zdGFuY2UKKyAqCisgKiBAcmV0dXJuIHRoZSBvcmlnaW5hbCBVUkkgb2YgdGhlIEBhIGl0
ZW0gb3IgQGMgTlVMTCBpbiBjYXNlIG9mIGVycm9yLiBUaGlzIHBvaW50ZXIgaXMKKyAqICAgICAg
ICAgZ3VhcmFudGVlZCB0byBiZSBlaW5hX3N0cmluZ3NoYXJlLCBzbyB3aGVuZXZlciBwb3NzaWJs
ZQorICogICAgICAgICBzYXZlIHlvdXJzZWxmIHNvbWUgY3B1IGN5Y2xlcyBhbmQgdXNlCisgKiAg
ICAgICAgIGVpbmFfc3RyaW5nc2hhcmVfcmVmKCkgaW5zdGVhZCBvZiBlaW5hX3N0cmluZ3NoYXJl
X2FkZCgpIG9yCisgKiAgICAgICAgIHN0cmR1cCgpLgorICovCitFQVBJIGNvbnN0IGNoYXIgKmV3
a19iYWNrX2ZvcndhcmRfbGlzdF9pdGVtX29yaWdpbmFsX3VyaV9nZXQoY29uc3QgRXdrX0JhY2tf
Rm9yd2FyZF9MaXN0X0l0ZW0gKml0ZW0pOworCisjaWZkZWYgX19jcGx1c3BsdXMKK30KKyNlbmRp
ZgorI2VuZGlmIC8vIGV3a19iYWNrX2ZvcndhcmRfbGlzdF9pdGVtX2gKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZWZsL2V3a19iYWNrX2ZvcndhcmRfbGlzdF9pdGVt
X3ByaXZhdGUuaCBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZWZsL2V3a19iYWNrX2Zv
cndhcmRfbGlzdF9pdGVtX3ByaXZhdGUuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAw
MDAwLi44YzJjNjg0Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNz
L0FQSS9lZmwvZXdrX2JhY2tfZm9yd2FyZF9saXN0X2l0ZW1fcHJpdmF0ZS5oCkBAIC0wLDAgKzEs
MzUgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTIgSW50ZWwgQ29ycG9yYXRpb24uIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2Ug
YW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBw
ZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBt
ZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhl
IGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGl0ZW0gb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJp
bmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGlj
ZSwgdGhpcyBpdGVtIG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBp
biB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRl
ZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURF
RCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFO
WSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQg
RklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBO
TyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJM
RSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFS
WSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBM
T1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElP
TikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVS
IElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5F
R0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUg
VVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklM
SVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpZm5kZWYgZXdrX2JhY2tfZm9yd2FyZF9saXN0
X2l0ZW1fcHJpdmF0ZV9oCisjZGVmaW5lIGV3a19iYWNrX2ZvcndhcmRfbGlzdF9pdGVtX3ByaXZh
dGVfaAorCisjaW5jbHVkZSA8V2ViS2l0Mi9XS0Jhc2UuaD4KKwordHlwZWRlZiBzdHJ1Y3QgX0V3
a19CYWNrX0ZvcndhcmRfTGlzdF9JdGVtIEV3a19CYWNrX0ZvcndhcmRfTGlzdF9JdGVtOworCitF
d2tfQmFja19Gb3J3YXJkX0xpc3RfSXRlbSogZXdrX2JhY2tfZm9yd2FyZF9saXN0X2l0ZW1fbmV3
KFdLQmFja0ZvcndhcmRMaXN0SXRlbVJlZiB3a0JhY2tGb3J3YXJkTGlzdEl0ZW1SZWYpOworCisj
ZW5kaWYgLy8gZXdrX2JhY2tfZm9yd2FyZF9saXN0X3ByaXZhdGVfaApkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9lZmwvZXdrX2JhY2tfZm9yd2FyZF9saXN0X3ByaXZh
dGUuaCBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZWZsL2V3a19iYWNrX2ZvcndhcmRf
bGlzdF9wcml2YXRlLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTkyYTRm
NAotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZWZsL2V3
a19iYWNrX2ZvcndhcmRfbGlzdF9wcml2YXRlLmgKQEAgLTAsMCArMSwzNyBAQAorLyoKKyAqIENv
cHlyaWdodCAoQykgMjAxMiBJbnRlbCBDb3Jwb3JhdGlvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
KyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1z
LCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRl
ZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlz
dHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0
CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCBy
ZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9j
dW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3Ry
aWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4g
QU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1Q
TElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJ
TVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBB
UlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQ
UExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNU
LCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VR
VUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1F
TlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRB
LCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNF
RCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNU
LCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhF
UldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZU
V0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1B
R0UuCisgKi8KKworI2lmbmRlZiBld2tfYmFja19mb3J3YXJkX2xpc3RfcHJpdmF0ZV9oCisjZGVm
aW5lIGV3a19iYWNrX2ZvcndhcmRfbGlzdF9wcml2YXRlX2gKKworI2luY2x1ZGUgPFdlYktpdDIv
V0tCYXNlLmg+CisKK3R5cGVkZWYgc3RydWN0IF9Fd2tfQmFja19Gb3J3YXJkX0xpc3QgRXdrX0Jh
Y2tfRm9yd2FyZF9MaXN0OworCit2b2lkIGV3a19iYWNrX2ZvcndhcmRfbGlzdF9jaGFuZ2VkKEV3
a19CYWNrX0ZvcndhcmRfTGlzdCosIFdLQmFja0ZvcndhcmRMaXN0SXRlbVJlZiB3a0FkZGVkSXRl
bSwgV0tBcnJheVJlZiB3a1JlbW92ZWRJdGVtcyk7CitFd2tfQmFja19Gb3J3YXJkX0xpc3QqIGV3
a19iYWNrX2ZvcndhcmRfbGlzdF9uZXcoV0tCYWNrRm9yd2FyZExpc3RSZWYgd2tCYWNrRm9yd2Fy
ZExpc3RSZWYpOwordm9pZCBld2tfYmFja19mb3J3YXJkX2xpc3RfZnJlZShFd2tfQmFja19Gb3J3
YXJkX0xpc3QqIGxpc3QpOworCisjZW5kaWYgLy8gZXdrX2JhY2tfZm9yd2FyZF9saXN0X3ByaXZh
dGVfaApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9lZmwvZXdrX3Zp
ZXcuY3BwIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9lZmwvZXdrX3ZpZXcuY3BwCmlu
ZGV4IDI3ZDQwYzEuLjJlMGYzOTggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vz
cy9BUEkvZWZsL2V3a192aWV3LmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJ
L2VmbC9ld2tfdmlldy5jcHAKQEAgLTI5LDYgKzI5LDcgQEAKICNpbmNsdWRlICJXS1JldGFpblB0
ci5oIgogI2luY2x1ZGUgIldLU3RyaW5nLmgiCiAjaW5jbHVkZSAiV0tVUkwuaCIKKyNpbmNsdWRl
ICJld2tfYmFja19mb3J3YXJkX2xpc3RfcHJpdmF0ZS5oIgogI2luY2x1ZGUgImV3a19jb250ZXh0
LmgiCiAjaW5jbHVkZSAiZXdrX2NvbnRleHRfcHJpdmF0ZS5oIgogI2luY2x1ZGUgImV3a19pbnRl
bnRfcHJpdmF0ZS5oIgpAQCAtNjcsNiArNjgsNyBAQCBzdHJ1Y3QgX0V3a19WaWV3X1ByaXZhdGVf
RGF0YSB7CiAgICAgY29uc3QgY2hhciogY3Vyc29yR3JvdXA7CiAgICAgRXZhc19PYmplY3QqIGN1
cnNvck9iamVjdDsKICAgICBMb2FkaW5nUmVzb3VyY2VzTWFwIGxvYWRpbmdSZXNvdXJjZXNNYXA7
CisgICAgRXdrX0JhY2tfRm9yd2FyZF9MaXN0KiBiYWNrRm9yd2FyZExpc3Q7CiAKICNpZmRlZiBI
QVZFX0VDT1JFX1gKICAgICBib29sIGlzVXNpbmdFY29yZVg7CkBAIC04NSw2ICs4Nyw3IEBAIHN0
cnVjdCBfRXdrX1ZpZXdfUHJpdmF0ZV9EYXRhIHsKICAgICAgICAgLCBjdXN0b21FbmNvZGluZygw
KQogICAgICAgICAsIGN1cnNvckdyb3VwKDApCiAgICAgICAgICwgY3Vyc29yT2JqZWN0KDApCisg
ICAgICAgICwgYmFja0ZvcndhcmRMaXN0KDApCiAjaWZkZWYgSEFWRV9FQ09SRV9YCiAgICAgICAg
ICwgaXNVc2luZ0Vjb3JlWChmYWxzZSkKICNlbmRpZgpAQCAtMTA1LDYgKzEwOCw4IEBAIHN0cnVj
dCBfRXdrX1ZpZXdfUHJpdmF0ZV9EYXRhIHsKIAogICAgICAgICBpZiAoY3Vyc29yT2JqZWN0KQog
ICAgICAgICAgICAgZXZhc19vYmplY3RfZGVsKGN1cnNvck9iamVjdCk7CisKKyAgICAgICAgZXdr
X2JhY2tfZm9yd2FyZF9saXN0X2ZyZWUoYmFja0ZvcndhcmRMaXN0KTsKICAgICB9CiB9OwogCkBA
IC02NjEsNiArNjY2LDcgQEAgRXZhc19PYmplY3QqIGV3a192aWV3X2Jhc2VfYWRkKEV2YXMqIGNh
bnZhcywgV0tDb250ZXh0UmVmIGNvbnRleHRSZWYsIFdLUGFnZUdyb3UKICAgICB9CiAKICAgICBw
cml2LT5wYWdlQ2xpZW50ID0gUGFnZUNsaWVudEltcGw6OmNyZWF0ZSh0b0ltcGwoY29udGV4dFJl
ZiksIHRvSW1wbChwYWdlR3JvdXBSZWYpLCBld2tWaWV3KTsKKwlwcml2LT5iYWNrRm9yd2FyZExp
c3QgPSBld2tfYmFja19mb3J3YXJkX2xpc3RfbmV3KHRvQVBJKHByaXYtPnBhZ2VDbGllbnQtPnBh
Z2UoKS0+YmFja0ZvcndhcmRMaXN0KCkpKTsKIAogICAgIFdLUGFnZVJlZiB3a1BhZ2UgPSB0b0FQ
SShwcml2LT5wYWdlQ2xpZW50LT5wYWdlKCkpOwogICAgIGV3a192aWV3X2Zvcm1fY2xpZW50X2F0
dGFjaCh3a1BhZ2UsIGV3a1ZpZXcpOwpAQCAtMTA2Niw2ICsxMDcyLDE0IEBAIEVpbmFfQm9vbCBl
d2tfdmlld19mb3J3YXJkX3Bvc3NpYmxlKEV2YXNfT2JqZWN0KiBld2tWaWV3KQogICAgIHJldHVy
biBwcml2LT5wYWdlQ2xpZW50LT5wYWdlKCktPmNhbkdvRm9yd2FyZCgpOwogfQogCitFd2tfQmFj
a19Gb3J3YXJkX0xpc3QqIGV3a192aWV3X2JhY2tfZm9yd2FyZF9saXN0X2dldChjb25zdCBFdmFz
X09iamVjdCogZXdrVmlldykKK3sKKyAgICBFV0tfVklFV19TRF9HRVRfT1JfUkVUVVJOKGV3a1Zp
ZXcsIHNtYXJ0RGF0YSwgMCk7CisgICAgRVdLX1ZJRVdfUFJJVl9HRVRfT1JfUkVUVVJOKHNtYXJ0
RGF0YSwgcHJpdiwgMCk7CisKKyAgICByZXR1cm4gcHJpdi0+YmFja0ZvcndhcmRMaXN0OworfQor
CiB2b2lkIGV3a192aWV3X2ltYWdlX2RhdGFfc2V0KEV2YXNfT2JqZWN0KiBld2tWaWV3LCB2b2lk
KiBpbWFnZURhdGEsIGNvbnN0IEludFNpemUmIHNpemUpCiB7CiAgICAgRVdLX1ZJRVdfU0RfR0VU
X09SX1JFVFVSTihld2tWaWV3LCBzbWFydERhdGEpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktp
dDIvVUlQcm9jZXNzL0FQSS9lZmwvZXdrX3ZpZXcuaCBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vz
cy9BUEkvZWZsL2V3a192aWV3LmgKaW5kZXggYTE4ZWE3OC4uMjY4YzE4NiAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9lZmwvZXdrX3ZpZXcuaAorKysgYi9Tb3VyY2Uv
V2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2VmbC9ld2tfdmlldy5oCkBAIC02MSw2ICs2MSw3IEBACiAj
aWZuZGVmIGV3a192aWV3X2gKICNkZWZpbmUgZXdrX3ZpZXdfaAogCisjaW5jbHVkZSAiZXdrX2Jh
Y2tfZm9yd2FyZF9saXN0LmgiCiAjaW5jbHVkZSAiZXdrX2NvbnRleHQuaCIKICNpbmNsdWRlICJl
d2tfaW50ZW50LmgiCiAjaW5jbHVkZSAiZXdrX3VybF9yZXF1ZXN0LmgiCkBAIC0zMTksNiArMzIw
LDIyIEBAIEVBUEkgRWluYV9Cb29sICAgIGV3a192aWV3X2JhY2tfcG9zc2libGUoRXZhc19PYmpl
Y3QgKm8pOwogRUFQSSBFaW5hX0Jvb2wgICAgZXdrX3ZpZXdfZm9yd2FyZF9wb3NzaWJsZShFdmFz
X09iamVjdCAqbyk7CiAKIC8qKgorICogR2V0cyB0aGUgYmFjay1mb3J3YXJkIGxpc3QgYXNzb2Np
YXRlZCB3aXRoIHRoaXMgdmlldy4KKyAqCisgKiBUaGUgcmV0dXJuZWQgaW5zdGFuY2UgaXMgdW5p
cXVlIGZvciB0aGlzIHZpZXcgYW5kIHRodXMgbXVsdGlwbGUgY2FsbHMKKyAqIHRvIHRoaXMgZnVu
Y3Rpb24gd2l0aCB0aGUgc2FtZSB2aWV3IGFzIHBhcmFtZXRlciByZXR1cm5zIHRoZSBzYW1lCisg
KiBoYW5kbGUuIFRoaXMgaGFuZGxlIGlzIGFsaXZlIHdoaWxlIHZpZXcgaXMgYWxpdmUsIHRodXMg
b25lCisgKiBtaWdodCB3YW50IHRvIGxpc3RlbiBmb3IgRVZBU19DQUxMQkFDS19ERUwgb24gZ2l2
ZW4gdmlldworICogKEBhIG8pIHRvIGtub3cgd2hlbiB0byBzdG9wIHVzaW5nIHJldHVybmVkIGhh
bmRsZS4KKyAqCisgKiBAcGFyYW0gbyB2aWV3IG9iamVjdCB0byBnZXQgbmF2aWdhdGlvbiBiYWNr
LWZvcndhcmQgbGlzdAorICoKKyAqIEByZXR1cm4gdGhlIGJhY2stZm9yd2FyZCBsaXN0IGluc3Rh
bmNlIGhhbmRsZSBhc3NvY2lhdGVkIHdpdGggdGhpcworICogICAgICAgICB2aWV3LgorICovCitF
QVBJIEV3a19CYWNrX0ZvcndhcmRfTGlzdCAqZXdrX3ZpZXdfYmFja19mb3J3YXJkX2xpc3RfZ2V0
KGNvbnN0IEV2YXNfT2JqZWN0ICpvKTsKKworLyoqCiAgKiBHZXRzIHRoZSBjdXJyZW50IHRpdGxl
IG9mIHRoZSBtYWluIGZyYW1lLgogICoKICAqIEl0IHJldHVybnMgYW4gaW50ZXJuYWwgc3RyaW5n
IGFuZCBzaG91bGQgbm90CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJ
L2VmbC9ld2tfdmlld19sb2FkZXJfY2xpZW50LmNwcCBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vz
cy9BUEkvZWZsL2V3a192aWV3X2xvYWRlcl9jbGllbnQuY3BwCmluZGV4IGNjOGIxMjAuLmU3N2Q2
MTMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZWZsL2V3a192aWV3
X2xvYWRlcl9jbGllbnQuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZWZs
L2V3a192aWV3X2xvYWRlcl9jbGllbnQuY3BwCkBAIC0yNiwxMCArMjYsMTIgQEAKICNpbmNsdWRl
ICJjb25maWcuaCIKIAogI2luY2x1ZGUgIldLRnJhbWUuaCIKKyNpbmNsdWRlICJld2tfYmFja19m
b3J3YXJkX2xpc3RfcHJpdmF0ZS5oIgogI2luY2x1ZGUgImV3a19pbnRlbnQuaCIKICNpbmNsdWRl
ICJld2tfaW50ZW50X3ByaXZhdGUuaCIKICNpbmNsdWRlICJld2tfaW50ZW50X3NlcnZpY2UuaCIK
ICNpbmNsdWRlICJld2tfaW50ZW50X3NlcnZpY2VfcHJpdmF0ZS5oIgorI2luY2x1ZGUgImV3a192
aWV3LmgiCiAjaW5jbHVkZSAiZXdrX3ZpZXdfbG9hZGVyX2NsaWVudF9wcml2YXRlLmgiCiAjaW5j
bHVkZSAiZXdrX3ZpZXdfcHJpdmF0ZS5oIgogI2luY2x1ZGUgImV3a193ZWJfZXJyb3IuaCIKQEAg
LTEyMyw2ICsxMjUsMTQgQEAgc3RhdGljIHZvaWQgZGlkRmFpbFByb3Zpc2lvbmFsTG9hZFdpdGhF
cnJvckZvckZyYW1lKFdLUGFnZVJlZiBwYWdlLCBXS0ZyYW1lUmVmIGYKICAgICBld2tfd2ViX2Vy
cm9yX2ZyZWUoZXdrRXJyb3IpOwogfQogCitzdGF0aWMgdm9pZCBkaWRDaGFuZ2VCYWNrRm9yd2Fy
ZExpc3QoV0tQYWdlUmVmIHBhZ2UsIFdLQmFja0ZvcndhcmRMaXN0SXRlbVJlZiBhZGRlZEl0ZW0s
IFdLQXJyYXlSZWYgcmVtb3ZlZEl0ZW1zLCBjb25zdCB2b2lkKiBjbGllbnRJbmZvKQoreworICAg
IEV2YXNfT2JqZWN0KiBld2tWaWV3ID0gc3RhdGljX2Nhc3Q8RXZhc19PYmplY3QqPihjb25zdF9j
YXN0PHZvaWQqPihjbGllbnRJbmZvKSk7CisgICAgQVNTRVJUKGV3a1ZpZXcpOworCisgICAgZXdr
X2JhY2tfZm9yd2FyZF9saXN0X2NoYW5nZWQoZXdrX3ZpZXdfYmFja19mb3J3YXJkX2xpc3RfZ2V0
KGV3a1ZpZXcpLCBhZGRlZEl0ZW0sIHJlbW92ZWRJdGVtcyk7Cit9CisKIHZvaWQgZXdrX3ZpZXdf
bG9hZGVyX2NsaWVudF9hdHRhY2goV0tQYWdlUmVmIHBhZ2VSZWYsIEV2YXNfT2JqZWN0KiBld2tW
aWV3KQogewogICAgIFdLUGFnZUxvYWRlckNsaWVudCBsb2FkQ2xpZW50OwpAQCAtMTQ0LDUgKzE1
NCw2IEBAIHZvaWQgZXdrX3ZpZXdfbG9hZGVyX2NsaWVudF9hdHRhY2goV0tQYWdlUmVmIHBhZ2VS
ZWYsIEV2YXNfT2JqZWN0KiBld2tWaWV3KQogICAgIGxvYWRDbGllbnQuZGlkU3RhcnRQcm92aXNp
b25hbExvYWRGb3JGcmFtZSA9IGRpZFN0YXJ0UHJvdmlzaW9uYWxMb2FkRm9yRnJhbWU7CiAgICAg
bG9hZENsaWVudC5kaWRSZWNlaXZlU2VydmVyUmVkaXJlY3RGb3JQcm92aXNpb25hbExvYWRGb3JG
cmFtZSA9IGRpZFJlY2VpdmVTZXJ2ZXJSZWRpcmVjdEZvclByb3Zpc2lvbmFsTG9hZEZvckZyYW1l
OwogICAgIGxvYWRDbGllbnQuZGlkRmFpbFByb3Zpc2lvbmFsTG9hZFdpdGhFcnJvckZvckZyYW1l
ID0gZGlkRmFpbFByb3Zpc2lvbmFsTG9hZFdpdGhFcnJvckZvckZyYW1lOworICAgIGxvYWRDbGll
bnQuZGlkQ2hhbmdlQmFja0ZvcndhcmRMaXN0ID0gZGlkQ2hhbmdlQmFja0ZvcndhcmRMaXN0Owog
ICAgIFdLUGFnZVNldFBhZ2VMb2FkZXJDbGllbnQocGFnZVJlZiwgJmxvYWRDbGllbnQpOwogfQo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>155223</attachid>
            <date>2012-07-30 00:24:18 -0700</date>
            <delta_ts>2012-08-03 07:27:29 -0700</delta_ts>
            <desc>patch v4</desc>
            <filename>bug92345_v4</filename>
            <type>text/plain</type>
            <size>32644</size>
            <attacher name="Mikhail Pozdnyakov">mikhail.pozdnyakov</attacher>
            
              <data encoding="base64">Y29tbWl0IDQ1YWE4MzFhZmNlMTBhOWU0ZGFjOGQ0NmRkYmUyYTQzYWU4YzNlNTQKQXV0aG9yOiBN
aWtoYWlsIFBvemRueWFrb3YgPG1pa2hhaWwucG96ZG55YWtvdkBpbnRlbC5jb20+CkRhdGU6ICAg
RnJpIEp1bCAyNyAxMzowOToyOSAyMDEyICswMzAwCgogICAgYnVnOTIzNDUKCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViS2l0Mi9DaGFuZ2VMb2cgYi9Tb3VyY2UvV2ViS2l0Mi9DaGFuZ2VMb2cKaW5k
ZXggMjE5MDE0My4uZWQxMDBkNCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvQ2hhbmdlTG9n
CisrKyBiL1NvdXJjZS9XZWJLaXQyL0NoYW5nZUxvZwpAQCAtMSwzICsxLDUyIEBACisyMDEyLTA3
LTI3ICBNaWtoYWlsIFBvemRueWFrb3YgIDxtaWtoYWlsLnBvemRueWFrb3ZAaW50ZWwuY29tPgor
CisgICAgICAgIFtFRkxdW1dLMl0gQWRkIGJhY2sgZm9yd2FyZCBsaXN0IEFQSQorICAgICAgICBo
dHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9OTIzNDUKKworICAgICAgICBS
ZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBBZGRlZCBuZXcgQmFjayBGb3J3
YXJkIGxpc3QgQVBJIHRvIEVGTCBXSzIuIEV3a19CYWNrX0ZvcndhcmRfTGlzdCBhbmQKKyAgICAg
ICAgRXdrX0JhY2tfRm9yd2FyZF9MaXN0X0l0ZW0gc3RydWN0dXJlcyB3ZXJlIGFkZGVkLiBUaGUg
bmV3IEFQSSBpcworICAgICAgICBtb3N0bHkgdGhlIHNhbWUgYXMgb25lIGZyb20gVUlQcm9jZXNz
L0FQSS9DL3sgV0tCYWNrRm9yd2FyZExpc3QuaCwgV0tCYWNrRm9yd2FyZExpc3RJdGVtLmggfS4K
KworICAgICAgICAqIFBsYXRmb3JtRWZsLmNtYWtlOgorICAgICAgICAqIFVJUHJvY2Vzcy9BUEkv
ZWZsL2V3a19iYWNrX2ZvcndhcmRfbGlzdC5jcHA6IEFkZGVkLgorICAgICAgICAoX0V3a19CYWNr
X0ZvcndhcmRfTGlzdCk6CisgICAgICAgIChfRXdrX0JhY2tfRm9yd2FyZF9MaXN0OjpfRXdrX0Jh
Y2tfRm9yd2FyZF9MaXN0KToKKyAgICAgICAgKGdldE9yQ3JlYXRlSXRlbSk6CisgICAgICAgICh3
ZWJraXRfYmFja19mb3J3YXJkX2xpc3RfY3VycmVudF9pdGVtX2dldCk6CisgICAgICAgICh3ZWJr
aXRfYmFja19mb3J3YXJkX2xpc3RfYmFja19pdGVtX2dldCk6CisgICAgICAgICh3ZWJraXRfYmFj
a19mb3J3YXJkX2xpc3RfZm9yd2FyZF9pdGVtX2dldCk6CisgICAgICAgICh3ZWJraXRfYmFja19m
b3J3YXJkX2xpc3RfaXRlbV9hdF9pbmRleF9nZXQpOgorICAgICAgICAod2Via2l0X2JhY2tfZm9y
d2FyZF9saXN0X2xlbmd0aF9nZXQpOgorICAgICAgICAoZXdrX2JhY2tfZm9yd2FyZF9saXN0X2No
YW5nZWQpOgorICAgICAgICAoZXdrX2JhY2tfZm9yd2FyZF9saXN0X25ldyk6CisgICAgICAgIChl
d2tfYmFja19mb3J3YXJkX2xpc3RfZnJlZSk6CisgICAgICAgICogVUlQcm9jZXNzL0FQSS9lZmwv
ZXdrX2JhY2tfZm9yd2FyZF9saXN0Lmg6IEFkZGVkLgorICAgICAgICAqIFVJUHJvY2Vzcy9BUEkv
ZWZsL2V3a19iYWNrX2ZvcndhcmRfbGlzdF9pdGVtLmNwcDogQWRkZWQuCisgICAgICAgIChnZXRJ
dGVtUHJvcGVydHkpOgorICAgICAgICAoX0V3a19CYWNrX0ZvcndhcmRfTGlzdF9JdGVtKToKKyAg
ICAgICAgKF9Fd2tfQmFja19Gb3J3YXJkX0xpc3RfSXRlbTo6X0V3a19CYWNrX0ZvcndhcmRfTGlz
dF9JdGVtKToKKyAgICAgICAgKF9Fd2tfQmFja19Gb3J3YXJkX0xpc3RfSXRlbTo6fl9Fd2tfQmFj
a19Gb3J3YXJkX0xpc3RfSXRlbSk6CisgICAgICAgIChld2tfYmFja19mb3J3YXJkX2xpc3RfaXRl
bV9yZWYpOgorICAgICAgICAoZXdrX2JhY2tfZm9yd2FyZF9saXN0X2l0ZW1fdW5yZWYpOgorICAg
ICAgICAoZXdrX2JhY2tfZm9yd2FyZF9saXN0X2l0ZW1fdXJpX2dldCk6CisgICAgICAgIChld2tf
YmFja19mb3J3YXJkX2xpc3RfaXRlbV90aXRsZV9nZXQpOgorICAgICAgICAoZXdrX2JhY2tfZm9y
d2FyZF9saXN0X2l0ZW1fb3JpZ2luYWxfdXJpX2dldCk6CisgICAgICAgIChld2tfYmFja19mb3J3
YXJkX2xpc3RfaXRlbV9uZXcpOgorICAgICAgICAqIFVJUHJvY2Vzcy9BUEkvZWZsL2V3a19iYWNr
X2ZvcndhcmRfbGlzdF9pdGVtLmg6IEFkZGVkLgorICAgICAgICAqIFVJUHJvY2Vzcy9BUEkvZWZs
L2V3a19iYWNrX2ZvcndhcmRfbGlzdF9pdGVtX3ByaXZhdGUuaDogQWRkZWQuCisgICAgICAgICog
VUlQcm9jZXNzL0FQSS9lZmwvZXdrX2JhY2tfZm9yd2FyZF9saXN0X3ByaXZhdGUuaDogQWRkZWQu
CisgICAgICAgICogVUlQcm9jZXNzL0FQSS9lZmwvZXdrX3ZpZXcuY3BwOgorICAgICAgICAoX0V3
a19WaWV3X1ByaXZhdGVfRGF0YSk6CisgICAgICAgIChfRXdrX1ZpZXdfUHJpdmF0ZV9EYXRhOjpf
RXdrX1ZpZXdfUHJpdmF0ZV9EYXRhKToKKyAgICAgICAgKF9Fd2tfVmlld19Qcml2YXRlX0RhdGE6
On5fRXdrX1ZpZXdfUHJpdmF0ZV9EYXRhKToKKyAgICAgICAgKGV3a192aWV3X2JhY2tfZm9yd2Fy
ZF9saXN0X2dldCk6IE5ldyBmdW5jdGlvbiB0byBnZXQgYmFjay1mb3J3YXJkIGxpc3QuCisgICAg
ICAgICogVUlQcm9jZXNzL0FQSS9lZmwvZXdrX3ZpZXcuaDoKKyAgICAgICAgKiBVSVByb2Nlc3Mv
QVBJL2VmbC9ld2tfdmlld19sb2FkZXJfY2xpZW50LmNwcDoKKyAgICAgICAgKGRpZENoYW5nZUJh
Y2tGb3J3YXJkTGlzdCk6IFRoZSBjYWxsYmFjayBhZGRlZCB0byB1cGRhdGUgYmFjay1mb3J3YXJk
IGxpc3QgaXRlbXMgY2FjaGUuCisgICAgICAgIChld2tfdmlld19sb2FkZXJfY2xpZW50X2F0dGFj
aCk6CisKIDIwMTItMDctMjcgIFlvdW5nVGFlY2sgU29uZyAgPHlvdW5ndGFlY2suc29uZ0BzYW1z
dW5nLmNvbT4KIAogICAgICAgICBbV0syXVtFRkxdIEFkZCBhbiBBQ0NFTEVSQVRFRF9DT01QT1NJ
VElORyBpbXBsZW1lbnRhdGlvbiBmb3IgRWZsIFdlYktpdDIKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJLaXQyL1BsYXRmb3JtRWZsLmNtYWtlIGIvU291cmNlL1dlYktpdDIvUGxhdGZvcm1FZmwuY21h
a2UKaW5kZXggMjMyN2FmNS4uNmE2ZWYzNSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvUGxh
dGZvcm1FZmwuY21ha2UKKysrIGIvU291cmNlL1dlYktpdDIvUGxhdGZvcm1FZmwuY21ha2UKQEAg
LTQxLDYgKzQxLDggQEAgTElTVChBUFBFTkQgV2ViS2l0Ml9TT1VSQ0VTCiAgICAgVUlQcm9jZXNz
L0FQSS9lZmwvTmV0d29ya0luZm9Qcm92aWRlci5jcHAKICAgICBVSVByb2Nlc3MvQVBJL2VmbC9Q
YWdlQ2xpZW50SW1wbC5jcHAKICAgICBVSVByb2Nlc3MvQVBJL2VmbC9WaWJyYXRpb25Qcm92aWRl
ci5jcHAKKyAgICBVSVByb2Nlc3MvQVBJL2VmbC9ld2tfYmFja19mb3J3YXJkX2xpc3QuY3BwCisg
ICAgVUlQcm9jZXNzL0FQSS9lZmwvZXdrX2JhY2tfZm9yd2FyZF9saXN0X2l0ZW0uY3BwCiAgICAg
VUlQcm9jZXNzL0FQSS9lZmwvZXdrX2NvbnRleHQuY3BwCiAgICAgVUlQcm9jZXNzL0FQSS9lZmwv
ZXdrX2NvbnRleHRfcmVxdWVzdF9tYW5hZ2VyX2NsaWVudC5jcHAKICAgICBVSVByb2Nlc3MvQVBJ
L2VmbC9ld2tfY29va2llX21hbmFnZXIuY3BwCkBAIC0xODQsNiArMTg2LDggQEAgU0VUKEZvcndh
cmRpbmdOZXR3b3JrSGVhZGVyc19OQU1FIGZvcndhcmRpbmctaGVhZGVyU291cCkKIENPTkZJR1VS
RV9GSUxFKGVmbC9ld2Via2l0Mi5wYy5pbiAke0NNQUtFX0JJTkFSWV9ESVJ9L1dlYktpdDIvZWZs
L2V3ZWJraXQyLnBjIEBPTkxZKQogU0VUIChFV2ViS2l0Ml9IRUFERVJTCiAgICAgIiR7Q01BS0Vf
Q1VSUkVOVF9TT1VSQ0VfRElSfS9VSVByb2Nlc3MvQVBJL2VmbC9FV2ViS2l0Mi5oIgorICAgICIk
e0NNQUtFX0NVUlJFTlRfU09VUkNFX0RJUn0vVUlQcm9jZXNzL0FQSS9lZmwvZXdrX2JhY2tfZm9y
d2FyZF9saXN0LmgiCisgICAgIiR7Q01BS0VfQ1VSUkVOVF9TT1VSQ0VfRElSfS9VSVByb2Nlc3Mv
QVBJL2VmbC9ld2tfYmFja19mb3J3YXJkX2xpc3RfaXRlbS5oIgogICAgICIke0NNQUtFX0NVUlJF
TlRfU09VUkNFX0RJUn0vVUlQcm9jZXNzL0FQSS9lZmwvZXdrX2NvbnRleHQuaCIKICAgICAiJHtD
TUFLRV9DVVJSRU5UX1NPVVJDRV9ESVJ9L1VJUHJvY2Vzcy9BUEkvZWZsL2V3a19jb29raWVfbWFu
YWdlci5oIgogICAgICIke0NNQUtFX0NVUlJFTlRfU09VUkNFX0RJUn0vVUlQcm9jZXNzL0FQSS9l
ZmwvZXdrX2Zvcm1fc3VibWlzc2lvbl9yZXF1ZXN0LmgiCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
S2l0Mi9VSVByb2Nlc3MvQVBJL2VmbC9FV2ViS2l0Mi5oIGIvU291cmNlL1dlYktpdDIvVUlQcm9j
ZXNzL0FQSS9lZmwvRVdlYktpdDIuaAppbmRleCA3NDRmYzE2Li4zNzliZGNkIDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2VmbC9FV2ViS2l0Mi5oCisrKyBiL1NvdXJj
ZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZWZsL0VXZWJLaXQyLmgKQEAgLTI3LDYgKzI3LDggQEAK
ICNpZm5kZWYgRVdlYktpdDJfaAogI2RlZmluZSBFV2ViS2l0Ml9oCiAKKyNpbmNsdWRlICJld2tf
YmFja19mb3J3YXJkX2xpc3QuaCIKKyNpbmNsdWRlICJld2tfYmFja19mb3J3YXJkX2xpc3RfaXRl
bS5oIgogI2luY2x1ZGUgImV3a19jb250ZXh0LmgiCiAjaW5jbHVkZSAiZXdrX2Nvb2tpZV9tYW5h
Z2VyLmgiCiAjaW5jbHVkZSAiZXdrX2Zvcm1fc3VibWlzc2lvbl9yZXF1ZXN0LmgiCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2VmbC9ld2tfYmFja19mb3J3YXJkX2xp
c3QuY3BwIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9lZmwvZXdrX2JhY2tfZm9yd2Fy
ZF9saXN0LmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xY2ViZWMyCi0t
LSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9lZmwvZXdrX2Jh
Y2tfZm9yd2FyZF9saXN0LmNwcApAQCAtMCwwICsxLDE2MiBAQAorLyoKKyAqIENvcHlyaWdodCAo
QykgMjAxMiBJbnRlbCBDb3Jwb3JhdGlvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBS
ZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9y
IHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRo
ZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9u
cyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2Ug
dGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlv
biBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4K
KyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBD
T05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJS
QU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdB
UlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIK
KyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4g
T1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVD
VCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBE
QU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAq
IFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9G
SVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04g
QU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1Qg
TElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisg
KiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZF
TiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8K
KworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgImV3a19iYWNrX2ZvcndhcmRfbGlzdC5o
IgorCisjaW5jbHVkZSAiV0tBUElDYXN0LmgiCisjaW5jbHVkZSAiV0tBcnJheS5oIgorI2luY2x1
ZGUgIldLQmFja0ZvcndhcmRMaXN0LmgiCisjaW5jbHVkZSAiV0tSZXRhaW5QdHIuaCIKKyNpbmNs
dWRlICJld2tfYmFja19mb3J3YXJkX2xpc3RfaXRlbV9wcml2YXRlLmgiCisjaW5jbHVkZSA8d3Rm
L3RleHQvQ1N0cmluZy5oPgorCit1c2luZyBuYW1lc3BhY2UgV2ViS2l0OworCit0eXBlZGVmIEhh
c2hNYXA8V0tCYWNrRm9yd2FyZExpc3RJdGVtUmVmLCBFd2tfQmFja19Gb3J3YXJkX0xpc3RfSXRl
bSo+IEl0ZW1zTWFwOworCisvKioKKyAqIFxzdHJ1Y3QgIF9Fd2tfQmFja19Gb3J3YXJkX0xpc3QK
KyAqIEBicmllZiAgIENvbnRhaW5zIHRoZSBCYWNrIEZvcndhcmQgTGlzdCBkYXRhLgorICovCitz
dHJ1Y3QgX0V3a19CYWNrX0ZvcndhcmRfTGlzdCB7CisgICAgV0tSZXRhaW5QdHI8V0tCYWNrRm9y
d2FyZExpc3RSZWY+IHdrTGlzdDsKKyAgICBtdXRhYmxlIEl0ZW1zTWFwIGl0ZW1zQ2FjaGU7CisK
KyAgICBfRXdrX0JhY2tfRm9yd2FyZF9MaXN0KFdLQmFja0ZvcndhcmRMaXN0UmVmIGxpc3RSZWYp
CisgICAgICAgIDogd2tMaXN0KGxpc3RSZWYpCisgICAgeyB9CisKKyAgICB+X0V3a19CYWNrX0Zv
cndhcmRfTGlzdCgpCisgICAgeworICAgICAgICBJdGVtc01hcDo6aXRlcmF0b3IgaXQgPSBpdGVt
c0NhY2hlLmJlZ2luKCk7CisgICAgICAgIEl0ZW1zTWFwOjppdGVyYXRvciBlbmQgPSBpdGVtc0Nh
Y2hlLmJlZ2luKCk7CisgICAgICAgIGZvciAoOyBpdCAhPSBlbmQ7ICsraXQpCisgICAgICAgICAg
ICBld2tfYmFja19mb3J3YXJkX2xpc3RfaXRlbV91bnJlZihpdC0+c2Vjb25kKTsKKworICAgIH0K
K307CisKKyNkZWZpbmUgRVdLX0JBQ0tfRk9SV0FSRF9MSVNUX1dLX0dFVF9PUl9SRVRVUk4obGlz
dCwgd2tMaXN0XywgLi4uKSAgXAorICAgIGlmICghKGxpc3QpKSB7ICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICBFSU5BX0xPR19DUklUKCJsaXN0
IGlzIE5VTEwuIik7ICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICByZXR1cm4gX19W
QV9BUkdTX187ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIH0gICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAor
ICAgIGlmICghKGxpc3QpLT53a0xpc3QpIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgXAorICAgICAgICBFSU5BX0xPR19DUklUKCJsaXN0LT53a0xpc3QgaXMgTlVMTC4iKTsg
ICAgICAgICAgICAgICAgXAorICAgICAgICByZXR1cm4gX19WQV9BUkdTX187ICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIH0gICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIFdLQmFja0ZvcndhcmRMaXN0
UmVmIHdrTGlzdF8gPSAobGlzdCktPndrTGlzdC5nZXQoKQorCisKK3N0YXRpYyBpbmxpbmUgRXdr
X0JhY2tfRm9yd2FyZF9MaXN0X0l0ZW0qIGdldE9yQ3JlYXRlSXRlbShjb25zdCBFd2tfQmFja19G
b3J3YXJkX0xpc3QqIGxpc3QsIFdLQmFja0ZvcndhcmRMaXN0SXRlbVJlZiB3a0l0ZW0pCit7Cisg
ICAgRUlOQV9TQUZFVFlfT05fTlVMTF9SRVRVUk5fVkFMKGxpc3QsIDApOworICAgIEVJTkFfU0FG
RVRZX09OX05VTExfUkVUVVJOX1ZBTCh3a0l0ZW0sIDApOworCisgICAgRXdrX0JhY2tfRm9yd2Fy
ZF9MaXN0X0l0ZW0qIGl0ZW0gPSBsaXN0LT5pdGVtc0NhY2hlLmdldCh3a0l0ZW0pOworICAgIGlm
ICghaXRlbSkgeworICAgICAgICBpdGVtID0gZXdrX2JhY2tfZm9yd2FyZF9saXN0X2l0ZW1fbmV3
KHdrSXRlbSk7CisgICAgICAgIGxpc3QtPml0ZW1zQ2FjaGUuc2V0KHdrSXRlbSwgaXRlbSk7Cisg
ICAgfQorCisgICAgcmV0dXJuIGl0ZW07Cit9CisKK0V3a19CYWNrX0ZvcndhcmRfTGlzdF9JdGVt
KiBld2tfYmFja19mb3J3YXJkX2xpc3RfY3VycmVudF9pdGVtX2dldChjb25zdCBFd2tfQmFja19G
b3J3YXJkX0xpc3QqIGxpc3QpCit7CisgICAgRVdLX0JBQ0tfRk9SV0FSRF9MSVNUX1dLX0dFVF9P
Ul9SRVRVUk4obGlzdCwgd2tMaXN0LCAwKTsKKworICAgIHJldHVybiBnZXRPckNyZWF0ZUl0ZW0o
bGlzdCwgV0tCYWNrRm9yd2FyZExpc3RHZXRDdXJyZW50SXRlbSh3a0xpc3QpKTsKK30KKworRXdr
X0JhY2tfRm9yd2FyZF9MaXN0X0l0ZW0qIGV3a19iYWNrX2ZvcndhcmRfbGlzdF9wcmV2aW91c19p
dGVtX2dldChjb25zdCBFd2tfQmFja19Gb3J3YXJkX0xpc3QqIGxpc3QpCit7CisgICAgRVdLX0JB
Q0tfRk9SV0FSRF9MSVNUX1dLX0dFVF9PUl9SRVRVUk4obGlzdCwgd2tMaXN0LCAwKTsKKworICAg
IHJldHVybiBnZXRPckNyZWF0ZUl0ZW0obGlzdCwgV0tCYWNrRm9yd2FyZExpc3RHZXRCYWNrSXRl
bSh3a0xpc3QpKTsKK30KKworRXdrX0JhY2tfRm9yd2FyZF9MaXN0X0l0ZW0qIGV3a19iYWNrX2Zv
cndhcmRfbGlzdF9uZXh0X2l0ZW1fZ2V0KGNvbnN0IEV3a19CYWNrX0ZvcndhcmRfTGlzdCogbGlz
dCkKK3sKKyAgICBFV0tfQkFDS19GT1JXQVJEX0xJU1RfV0tfR0VUX09SX1JFVFVSTihsaXN0LCB3
a0xpc3QsIDApOworCisgICAgcmV0dXJuIGdldE9yQ3JlYXRlSXRlbShsaXN0LCBXS0JhY2tGb3J3
YXJkTGlzdEdldEZvcndhcmRJdGVtKHdrTGlzdCkpOworfQorCitFd2tfQmFja19Gb3J3YXJkX0xp
c3RfSXRlbSogZXdrX2JhY2tfZm9yd2FyZF9saXN0X2l0ZW1fYXRfaW5kZXhfZ2V0KGNvbnN0IEV3
a19CYWNrX0ZvcndhcmRfTGlzdCogbGlzdCwgaW50IGluZGV4KQoreworICAgIEVXS19CQUNLX0ZP
UldBUkRfTElTVF9XS19HRVRfT1JfUkVUVVJOKGxpc3QsIHdrTGlzdCwgMCk7CisKKyAgICByZXR1
cm4gZ2V0T3JDcmVhdGVJdGVtKGxpc3QsIFdLQmFja0ZvcndhcmRMaXN0R2V0SXRlbUF0SW5kZXgo
d2tMaXN0LCBpbmRleCkpOworfQorCit1bnNpZ25lZCBld2tfYmFja19mb3J3YXJkX2xpc3RfY291
bnQoRXdrX0JhY2tfRm9yd2FyZF9MaXN0KiBsaXN0KQoreworICAgIEVXS19CQUNLX0ZPUldBUkRf
TElTVF9XS19HRVRfT1JfUkVUVVJOKGxpc3QsIHdrTGlzdCwgMCk7CisKKyAgICBjb25zdCB1bnNp
Z25lZCBjdXJyZW50SXRlbSA9IGV3a19iYWNrX2ZvcndhcmRfbGlzdF9jdXJyZW50X2l0ZW1fZ2V0
KGxpc3QpID8gMSA6IDA7CisKKyAgICByZXR1cm4gV0tCYWNrRm9yd2FyZExpc3RHZXRCYWNrTGlz
dENvdW50KHdrTGlzdCkgKyBXS0JhY2tGb3J3YXJkTGlzdEdldEZvcndhcmRMaXN0Q291bnQod2tM
aXN0KSArIGN1cnJlbnRJdGVtOworfQorCisKKy8qKgorICogQGludGVybmFsCisgKiBVcGRhdGVz
IGl0ZW1zIGNhY2hlLgorICovCit2b2lkIGV3a19iYWNrX2ZvcndhcmRfbGlzdF9jaGFuZ2VkKEV3
a19CYWNrX0ZvcndhcmRfTGlzdCogbGlzdCwgV0tCYWNrRm9yd2FyZExpc3RJdGVtUmVmIHdrQWRk
ZWRJdGVtLCBXS0FycmF5UmVmIHdrUmVtb3ZlZEl0ZW1zKQoreworICAgICh2b2lkKWdldE9yQ3Jl
YXRlSXRlbShsaXN0LCB3a0FkZGVkSXRlbSk7IC8vIFB1dHMgbmV3IGl0ZW0gdG8gdGhlIGNhY2hl
LgorCisgICAgY29uc3Qgc2l6ZV90IHJlbW92ZWRJdGVtc1NpemUgPSB3a1JlbW92ZWRJdGVtcyA/
IFdLQXJyYXlHZXRTaXplKHdrUmVtb3ZlZEl0ZW1zKSA6IDA7CisgICAgZm9yIChzaXplX3QgaSA9
IDA7IGkgPCByZW1vdmVkSXRlbXNTaXplOyArK2kpIHsKKyAgICAgICAgV0tCYWNrRm9yd2FyZExp
c3RJdGVtUmVmIHdrSXRlbSA9IHN0YXRpY19jYXN0PFdLQmFja0ZvcndhcmRMaXN0SXRlbVJlZj4o
V0tBcnJheUdldEl0ZW1BdEluZGV4KHdrUmVtb3ZlZEl0ZW1zLCBpKSk7CisgICAgICAgIGlmIChF
d2tfQmFja19Gb3J3YXJkX0xpc3RfSXRlbSogaXRlbSA9IGxpc3QtPml0ZW1zQ2FjaGUudGFrZSh3
a0l0ZW0pKQorICAgICAgICAgICAgZXdrX2JhY2tfZm9yd2FyZF9saXN0X2l0ZW1fdW5yZWYoaXRl
bSk7CisgICAgfQorfQorCisvKioKKyAqIEBpbnRlcm5hbAorICogQ29uc3RydWN0cyBhIEV3a19C
YWNrX0ZvcndhcmRfTGlzdCBmcm9tIGEgV0tCYWNrRm9yd2FyZExpc3RSZWYuCisgKi8KK0V3a19C
YWNrX0ZvcndhcmRfTGlzdCogZXdrX2JhY2tfZm9yd2FyZF9saXN0X25ldyhXS0JhY2tGb3J3YXJk
TGlzdFJlZiB3a0JhY2tGb3J3YXJkTGlzdFJlZikKK3sKKyAgICBFSU5BX1NBRkVUWV9PTl9OVUxM
X1JFVFVSTl9WQUwod2tCYWNrRm9yd2FyZExpc3RSZWYsIDApOworCisgICAgcmV0dXJuIG5ldyBF
d2tfQmFja19Gb3J3YXJkX0xpc3Qod2tCYWNrRm9yd2FyZExpc3RSZWYpOworfQorCisvKioKKyAq
IEBpbnRlcm5hbAorICogRnJlZXMgYSBFd2tfQmFja19Gb3J3YXJkX0xpc3Qgb2JqZWN0LgorICov
Cit2b2lkIGV3a19iYWNrX2ZvcndhcmRfbGlzdF9mcmVlKEV3a19CYWNrX0ZvcndhcmRfTGlzdCog
bGlzdCkKK3sKKyAgICBFSU5BX1NBRkVUWV9PTl9OVUxMX1JFVFVSTihsaXN0KTsKKworICAgIGRl
bGV0ZSBsaXN0OworfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9l
ZmwvZXdrX2JhY2tfZm9yd2FyZF9saXN0LmggYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJ
L2VmbC9ld2tfYmFja19mb3J3YXJkX2xpc3QuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAw
MDAwMDAwLi41YjljY2E3Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYktpdDIvVUlQcm9j
ZXNzL0FQSS9lZmwvZXdrX2JhY2tfZm9yd2FyZF9saXN0LmgKQEAgLTAsMCArMSw5MiBAQAorLyoK
KyAqIENvcHlyaWdodCAoQykgMjAxMiBJbnRlbCBDb3Jwb3JhdGlvbi4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5
IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBw
cm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEu
IFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29w
eXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0g
bXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICog
ICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhl
IGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExF
IElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1Mg
T1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAq
IFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZP
UiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNI
QUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkg
RElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICog
Q09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJP
Q1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNF
LCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVS
IENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENP
TlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBP
UiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJ
UyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VD
SCBEQU1BR0UuCisgKi8KKworLyoqCisgKiBAZmlsZSAgICBld2tfYmFja19mb3J3YXJkX2xpc3Qu
aAorICogQGJyaWVmICAgRGVzY3JpYmVzIHRoZSBFd2sgQmFjayBGb3J3YXJkIExpc3QgQVBJLgor
ICovCisKKyNpZm5kZWYgZXdrX2JhY2tfZm9yd2FyZF9saXN0X2gKKyNkZWZpbmUgZXdrX2JhY2tf
Zm9yd2FyZF9saXN0X2gKKworI2luY2x1ZGUgImV3a19iYWNrX2ZvcndhcmRfbGlzdF9pdGVtLmgi
CisKKyNpZmRlZiBfX2NwbHVzcGx1cworZXh0ZXJuICJDIiB7CisjZW5kaWYKKworLyoqIENyZWF0
ZXMgYSB0eXBlIG5hbWUgZm9yIF9Fd2tfQmFja19Gb3J3YXJkX0xpc3QgKi8KK3R5cGVkZWYgc3Ry
dWN0IF9Fd2tfQmFja19Gb3J3YXJkX0xpc3QgRXdrX0JhY2tfRm9yd2FyZF9MaXN0OworCisvKioK
KyAqIFJldHVybnMgdGhlIGN1cnJlbnQgaXRlbSBpbiB0aGUgQGEgbGlzdC4KKyAqCisgKiBAcGFy
YW0gbGlzdCB0aGUgYmFjay1mb3J3YXJkIGxpc3QgaW5zdGFuY2UKKyAqCisgKiBAcmV0dXJuIHRo
ZSBjdXJyZW50IGl0ZW0gaW4gdGhlIEBhIGxpc3Qgb3IgQGMgTlVMTCBpbiBjYXNlIG9mIGVycm9y
CisgKi8KK0VBUEkgRXdrX0JhY2tfRm9yd2FyZF9MaXN0X0l0ZW0gKmV3a19iYWNrX2ZvcndhcmRf
bGlzdF9jdXJyZW50X2l0ZW1fZ2V0KGNvbnN0IEV3a19CYWNrX0ZvcndhcmRfTGlzdCAqbGlzdCk7
CisKKy8qKgorICogUmV0dXJucyB0aGUgaXRlbSB0aGF0IHByZWNlZGVzIHRoZSBjdXJyZW50IGl0
ZW0gaW4gdGhlIEBhIGxpc3QuCisgKgorICogQHBhcmFtIGxpc3QgdGhlIGJhY2stZm9yd2FyZCBs
aXN0IGluc3RhbmNlCisgKgorICogQHJldHVybiB0aGUgaXRlbSB0aGF0IHByZWNlZGVzIHRoZSBj
dXJyZW50IGl0ZW0gdGhlIEBhIGxpc3Qgb3IgQGMgTlVMTCBpbiBjYXNlIG9mIGVycm9yCisgKi8K
K0VBUEkgRXdrX0JhY2tfRm9yd2FyZF9MaXN0X0l0ZW0gKmV3a19iYWNrX2ZvcndhcmRfbGlzdF9w
cmV2aW91c19pdGVtX2dldChjb25zdCBFd2tfQmFja19Gb3J3YXJkX0xpc3QgKmxpc3QpOworCisv
KioKKyAqIFJldHVybnMgdGhlIGl0ZW0gdGhhdCBmb2xsb3dzIHRoZSBjdXJyZW50IGl0ZW0gaW4g
dGhlIEBhIGxpc3QuCisgKgorICogQHBhcmFtIGxpc3QgdGhlIGJhY2stZm9yd2FyZCBsaXN0IGlu
c3RhbmNlCisgKgorICogQHJldHVybiB0aGUgaXRlbSB0aGF0IGZvbGxvd3MgdGhlIGN1cnJlbnQg
aXRlbSBpbiB0aGUgQGEgbGlzdCBvciBAYyBOVUxMIGluIGNhc2Ugb2YgZXJyb3IKKyAqLworRUFQ
SSBFd2tfQmFja19Gb3J3YXJkX0xpc3RfSXRlbSAqZXdrX2JhY2tfZm9yd2FyZF9saXN0X25leHRf
aXRlbV9nZXQoY29uc3QgRXdrX0JhY2tfRm9yd2FyZF9MaXN0ICpsaXN0KTsKKworLyoqCisgKiBS
ZXR1cm5zIHRoZSBpdGVtIGF0IGEgZ2l2ZW4gQGEgaW5kZXggcmVsYXRpdmUgdG8gdGhlIGN1cnJl
bnQgaXRlbS4KKyAqCisgKiBAcGFyYW0gbGlzdCB0aGUgYmFjay1mb3J3YXJkIGxpc3QgaW5zdGFu
Y2UKKyAqIEBwYXJhbSBpbmRleCB0aGUgaW5kZXggb2YgdGhlIGl0ZW0KKyAqCisgKiBAcmV0dXJu
IHRoZSBpdGVtIGF0IGEgZ2l2ZW4gQGEgaW5kZXggcmVsYXRpdmUgdG8gdGhlIGN1cnJlbnQgaXRl
bSBvciBAYyBOVUxMIGluIGNhc2Ugb2YgZXJyb3IKKyAqLworRUFQSSBFd2tfQmFja19Gb3J3YXJk
X0xpc3RfSXRlbSAqZXdrX2JhY2tfZm9yd2FyZF9saXN0X2l0ZW1fYXRfaW5kZXhfZ2V0KGNvbnN0
IEV3a19CYWNrX0ZvcndhcmRfTGlzdCAqbGlzdCwgaW50IGluZGV4KTsKKworLyoqCisgKiBSZXR1
cm5zIHRoZSBsZW5ndGggb2YgdGhlIGJhY2stZm9yd2FyZCBsaXN0IGluY2x1ZGluZyBjdXJyZW50
IGl0ZW0uCisgKgorICogQHBhcmFtIGxpc3QgdGhlIGJhY2stZm9yd2FyZCBsaXN0IGluc3RhbmNl
CisgKgorICogQHJldHVybiB0aGUgbGVuZ3RoIG9mIHRoZSBiYWNrLWZvcndhcmQgbGlzdCBpbmNs
dWRpbmcgY3VycmVudCBpdGVtIG9yIEBjIDAgaW4gY2FzZSBvZiBlcnJvcgorICovCitFQVBJIHVu
c2lnbmVkIGV3a19iYWNrX2ZvcndhcmRfbGlzdF9jb3VudChFd2tfQmFja19Gb3J3YXJkX0xpc3Qg
Kmxpc3QpOworCisjaWZkZWYgX19jcGx1c3BsdXMKK30KKyNlbmRpZgorI2VuZGlmIC8vIGV3a19i
YWNrX2ZvcndhcmRfbGlzdF9oCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3Mv
QVBJL2VmbC9ld2tfYmFja19mb3J3YXJkX2xpc3RfaXRlbS5jcHAgYi9Tb3VyY2UvV2ViS2l0Mi9V
SVByb2Nlc3MvQVBJL2VmbC9ld2tfYmFja19mb3J3YXJkX2xpc3RfaXRlbS5jcHAKbmV3IGZpbGUg
bW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjNlYzM0MwotLS0gL2Rldi9udWxsCisrKyBiL1Nv
dXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZWZsL2V3a19iYWNrX2ZvcndhcmRfbGlzdF9pdGVt
LmNwcApAQCAtMCwwICsxLDExNiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMiBJbnRlbCBD
b3Jwb3JhdGlvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBh
bmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1v
ZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29u
ZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29k
ZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgaXRl
bSBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRp
c3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHly
aWdodAorICogICAgbm90aWNlLCB0aGlzIGl0ZW0gb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIg
bWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNP
RlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBB
UyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVS
Q0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJF
IERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJV
VE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwg
U1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09P
RFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVT
UworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBM
SUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBU
T1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFO
WSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9G
CisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNv
bmZpZy5oIgorI2luY2x1ZGUgImV3a19iYWNrX2ZvcndhcmRfbGlzdF9pdGVtLmgiCisKKyNpbmNs
dWRlICJXS0FQSUNhc3QuaCIKKyNpbmNsdWRlICJXS0JhY2tGb3J3YXJkTGlzdEl0ZW0uaCIKKyNp
bmNsdWRlICJXS1JldGFpblB0ci5oIgorI2luY2x1ZGUgIldLU3RyaW5nLmgiCisjaW5jbHVkZSAi
V0tVUkwuaCIKKyNpbmNsdWRlIDx3dGYvdGV4dC9DU3RyaW5nLmg+CisKK3VzaW5nIG5hbWVzcGFj
ZSBXZWJLaXQ7CisKK3RlbXBsYXRlIDx0eXBlbmFtZSBXS1JlZlR5cGU+CitpbmxpbmUgY29uc3Qg
Y2hhciogZ2V0SXRlbVByb3BlcnR5KFdLQmFja0ZvcndhcmRMaXN0SXRlbVJlZiByZWYsIFdLUmVm
VHlwZSB2YWwpCit7CisgICAgQVNTRVJUKHJlZik7CisgICAgV0tSZXRhaW5QdHI8V0tSZWZUeXBl
PiB3a1Byb3AoQWRvcHRXSywgdmFsKTsKKyAgICByZXR1cm4gZWluYV9zdHJpbmdzaGFyZV9hZGQo
dG9JbXBsKHdrUHJvcC5nZXQoKSktPnN0cmluZygpLnV0ZjgoKS5kYXRhKCkpOworfQorCisvKioK
KyAqIFxzdHJ1Y3QgIF9Fd2tfQmFja19Gb3J3YXJkX0xpc3QKKyAqIEBicmllZiAgIENvbnRhaW5z
IHRoZSBCYWNrIEZvcndhcmQgTGlzdCBkYXRhLgorICovCitzdHJ1Y3QgX0V3a19CYWNrX0Zvcndh
cmRfTGlzdF9JdGVtIHsKKyAgICB1bnNpZ25lZCBpbnQgX19yZWY7IC8qKjwgdGhlIHJlZmVyZW5j
ZSBjb3VudCBvZiB0aGUgb2JqZWN0ICovCisgICAgV0tSZXRhaW5QdHI8V0tCYWNrRm9yd2FyZExp
c3RJdGVtUmVmPiB3a0l0ZW07CisgICAgY29uc3QgY2hhciogdXJpOworICAgIGNvbnN0IGNoYXIq
IHRpdGxlOworICAgIGNvbnN0IGNoYXIqIG9yaWdpbmFsVXJpOworCisgICAgX0V3a19CYWNrX0Zv
cndhcmRfTGlzdF9JdGVtKFdLQmFja0ZvcndhcmRMaXN0SXRlbVJlZiBpdGVtUmVmKQorICAgICAg
ICA6IF9fcmVmKDEpCisgICAgICAgICwgd2tJdGVtKGl0ZW1SZWYpCisgICAgICAgICwgdXJpKGdl
dEl0ZW1Qcm9wZXJ0eTxXS1VSTFJlZj4oaXRlbVJlZiwgV0tCYWNrRm9yd2FyZExpc3RJdGVtQ29w
eVVSTChpdGVtUmVmKSkpCisgICAgICAgICwgdGl0bGUoZ2V0SXRlbVByb3BlcnR5PFdLU3RyaW5n
UmVmPihpdGVtUmVmLCBXS0JhY2tGb3J3YXJkTGlzdEl0ZW1Db3B5VGl0bGUoaXRlbVJlZikpKQor
ICAgICAgICAsIG9yaWdpbmFsVXJpKGdldEl0ZW1Qcm9wZXJ0eTxXS1VSTFJlZj4oaXRlbVJlZiwg
V0tCYWNrRm9yd2FyZExpc3RJdGVtQ29weU9yaWdpbmFsVVJMKGl0ZW1SZWYpKSkKKyAgICB7IH0K
KworICAgIH5fRXdrX0JhY2tfRm9yd2FyZF9MaXN0X0l0ZW0oKQorICAgIHsKKyAgICAgICAgQVNT
RVJUKCFfX3JlZik7CisgICAgICAgIGVpbmFfc3RyaW5nc2hhcmVfZGVsKHVyaSk7CisgICAgICAg
IGVpbmFfc3RyaW5nc2hhcmVfZGVsKHRpdGxlKTsKKyAgICAgICAgZWluYV9zdHJpbmdzaGFyZV9k
ZWwob3JpZ2luYWxVcmkpOworICAgIH0KK307CisKK3ZvaWQgZXdrX2JhY2tfZm9yd2FyZF9saXN0
X2l0ZW1fcmVmKEV3a19CYWNrX0ZvcndhcmRfTGlzdF9JdGVtKiBpdGVtKQoreworICAgIEVJTkFf
U0FGRVRZX09OX05VTExfUkVUVVJOKGl0ZW0pOworICAgICsraXRlbS0+X19yZWY7Cit9CisKK3Zv
aWQgZXdrX2JhY2tfZm9yd2FyZF9saXN0X2l0ZW1fdW5yZWYoRXdrX0JhY2tfRm9yd2FyZF9MaXN0
X0l0ZW0qIGl0ZW0pCit7CisgICAgRUlOQV9TQUZFVFlfT05fTlVMTF9SRVRVUk4oaXRlbSk7CisK
KyAgICBpZiAoLS1pdGVtLT5fX3JlZikKKyAgICAgICAgcmV0dXJuOworCisgICAgZGVsZXRlIGl0
ZW07Cit9CisKK2NvbnN0IGNoYXIqIGV3a19iYWNrX2ZvcndhcmRfbGlzdF9pdGVtX3VyaV9nZXQo
Y29uc3QgRXdrX0JhY2tfRm9yd2FyZF9MaXN0X0l0ZW0qIGl0ZW0pCit7CisgICAgRUlOQV9TQUZF
VFlfT05fTlVMTF9SRVRVUk5fVkFMKGl0ZW0sIDApOworCisgICAgcmV0dXJuIGl0ZW0tPnVyaTsK
K30KKworY29uc3QgY2hhciogZXdrX2JhY2tfZm9yd2FyZF9saXN0X2l0ZW1fdGl0bGVfZ2V0KGNv
bnN0IEV3a19CYWNrX0ZvcndhcmRfTGlzdF9JdGVtKiBpdGVtKQoreworICAgIEVJTkFfU0FGRVRZ
X09OX05VTExfUkVUVVJOX1ZBTChpdGVtLCAwKTsKKworICAgIHJldHVybiBpdGVtLT50aXRsZTsK
K30KKworY29uc3QgY2hhciogZXdrX2JhY2tfZm9yd2FyZF9saXN0X2l0ZW1fb3JpZ2luYWxfdXJp
X2dldChjb25zdCBFd2tfQmFja19Gb3J3YXJkX0xpc3RfSXRlbSogaXRlbSkKK3sKKyAgICBFSU5B
X1NBRkVUWV9PTl9OVUxMX1JFVFVSTl9WQUwoaXRlbSwgMCk7CisKKyAgICByZXR1cm4gaXRlbS0+
b3JpZ2luYWxVcmk7Cit9CisKK0V3a19CYWNrX0ZvcndhcmRfTGlzdF9JdGVtKiBld2tfYmFja19m
b3J3YXJkX2xpc3RfaXRlbV9uZXcoV0tCYWNrRm9yd2FyZExpc3RJdGVtUmVmIGJhY2tGb3J3YXJk
TGlzdEl0ZW1EYXRhKQoreworICAgIEVJTkFfU0FGRVRZX09OX05VTExfUkVUVVJOX1ZBTChiYWNr
Rm9yd2FyZExpc3RJdGVtRGF0YSwgMCk7CisKKyAgICByZXR1cm4gbmV3IEV3a19CYWNrX0Zvcndh
cmRfTGlzdF9JdGVtKGJhY2tGb3J3YXJkTGlzdEl0ZW1EYXRhKTsKK30KZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZWZsL2V3a19iYWNrX2ZvcndhcmRfbGlzdF9pdGVt
LmggYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2VmbC9ld2tfYmFja19mb3J3YXJkX2xp
c3RfaXRlbS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjgxMWYwZTEKLS0t
IC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2VmbC9ld2tfYmFj
a19mb3J3YXJkX2xpc3RfaXRlbS5oCkBAIC0wLDAgKzEsMTA3IEBACisvKgorICogQ29weXJpZ2h0
IChDKSAyMDEyIEludGVsIENvcnBvcmF0aW9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAq
IFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGgg
b3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQg
dGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRp
b25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVj
ZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0
aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9u
LgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRT
IENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdB
UlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQg
V0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxB
UgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5D
LiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElS
RUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFM
IERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgor
ICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBS
T0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBP
TiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklD
VCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkK
KyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBF
VkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAq
LworCisvKioKKyAqIEBmaWxlICAgIGV3a19iYWNrX2ZvcndhcmRfbGlzdF9pdGVtLmgKKyAqIEBi
cmllZiAgIERlc2NyaWJlcyB0aGUgRXdrIEJhY2sgRm9yd2FyZCBMaXN0IEl0ZW0gQVBJLgorICov
CisKKyNpZm5kZWYgZXdrX2JhY2tfZm9yd2FyZF9saXN0X2l0ZW1faAorI2RlZmluZSBld2tfYmFj
a19mb3J3YXJkX2xpc3RfaXRlbV9oCisKKyNpbmNsdWRlIDxFaW5hLmg+CisKKyNpZmRlZiBfX2Nw
bHVzcGx1cworZXh0ZXJuICJDIiB7CisjZW5kaWYKKworLyoqIENyZWF0ZXMgYSB0eXBlIG5hbWUg
Zm9yIF9Fd2tfQmFja19Gb3J3YXJkX0xpc3RfSXRlbSAqLwordHlwZWRlZiBzdHJ1Y3QgX0V3a19C
YWNrX0ZvcndhcmRfTGlzdF9JdGVtIEV3a19CYWNrX0ZvcndhcmRfTGlzdF9JdGVtOworCisvKioK
KyAqIEluY3JlYXNlcyB0aGUgcmVmZXJlbmNlIGNvdW50IG9mIHRoZSBnaXZlbiBvYmplY3QuCisg
KgorICogQHBhcmFtIGl0ZW0gdGhlIGJhY2stZm9yd2FyZCBsaXN0IGl0ZW0gaW5zdGFuY2UgdG8g
aW5jcmVhc2UgdGhlIHJlZmVyZW5jZSBjb3VudAorICovCitFQVBJIHZvaWQgZXdrX2JhY2tfZm9y
d2FyZF9saXN0X2l0ZW1fcmVmKEV3a19CYWNrX0ZvcndhcmRfTGlzdF9JdGVtICppdGVtKTsKKwor
LyoqCisgKiBEZWNyZWFzZXMgdGhlIHJlZmVyZW5jZSBjb3VudCBvZiB0aGUgZ2l2ZW4gb2JqZWN0
LCBwb3NzaWJseSBmcmVlaW5nIGl0LgorICoKKyAqIFdoZW4gdGhlIHJlZmVyZW5jZSBjb3VudCBy
ZWFjaGVzIDAsIHRoZSBpdGVtIGlzIGZyZWVkLgorICoKKyAqIEBwYXJhbSBpdGVtIHRoZSBiYWNr
LWZvcndhcmQgbGlzdCBpdGVtIGluc3RhbmNlIHRvIGRlY3JlYXNlIHRoZSByZWZlcmVuY2UgY291
bnQKKyAqLworRUFQSSB2b2lkIGV3a19iYWNrX2ZvcndhcmRfbGlzdF9pdGVtX3VucmVmKEV3a19C
YWNrX0ZvcndhcmRfTGlzdF9JdGVtICppdGVtKTsKKworLyoqCisgKiBSZXR1cm5zIFVSSSBvZiB0
aGUgaXRlbS4KKyAqCisgKiBUaGUgcmV0dXJuZWQgVVJJIG1heSBkaWZmZXIgZnJvbSB0aGUgb3Jp
Z2luYWwgVVJJIChGb3IgZXhhbXBsZSBpZiB0aGUgcGFnZSB3YXMgcmVkaXJlY3RlZCkuCisgKgor
ICogQHNlZSBld2tfYmFja19mb3J3YXJkX2xpc3RfaXRlbV9vcmlnaW5hbF91cmlfZ2V0KCkKKyAq
CisgKiBAcGFyYW0gaXRlbSB0aGUgYmFjay1mb3J3YXJkIGxpc3QgaXRlbSBpbnN0YW5jZQorICoK
KyAqIEByZXR1cm4gdGhlIFVSSSBvZiB0aGUgQGEgaXRlbSBvciBAYyBOVUxMIGluIGNhc2Ugb2Yg
ZXJyb3IuIFRoaXMgcG9pbnRlciBpcworICogICAgICAgICBndWFyYW50ZWVkIHRvIGJlIGVpbmFf
c3RyaW5nc2hhcmUsIHNvIHdoZW5ldmVyIHBvc3NpYmxlCisgKiAgICAgICAgIHNhdmUgeW91cnNl
bGYgc29tZSBjcHUgY3ljbGVzIGFuZCB1c2UKKyAqICAgICAgICAgZWluYV9zdHJpbmdzaGFyZV9y
ZWYoKSBpbnN0ZWFkIG9mIGVpbmFfc3RyaW5nc2hhcmVfYWRkKCkgb3IKKyAqICAgICAgICAgc3Ry
ZHVwKCkKKyAqLworRUFQSSBjb25zdCBjaGFyICpld2tfYmFja19mb3J3YXJkX2xpc3RfaXRlbV91
cmlfZ2V0KGNvbnN0IEV3a19CYWNrX0ZvcndhcmRfTGlzdF9JdGVtICppdGVtKTsKKworLyoqCisg
KiBSZXR1cm5zIHRpdGxlIG9mIHRoZSBpdGVtLgorICoKKyAqIEBwYXJhbSBpdGVtIHRoZSBiYWNr
LWZvcndhcmQgbGlzdCBpdGVtIGluc3RhbmNlCisgKgorICogQHJldHVybiB0aGUgdGl0bGUgb2Yg
dGhlIEBhIGl0ZW0gb3IgQGMgTlVMTCBpbiBjYXNlIG9mIGVycm9yLiBUaGlzIHBvaW50ZXIgaXMK
KyAqICAgICAgICAgZ3VhcmFudGVlZCB0byBiZSBlaW5hX3N0cmluZ3NoYXJlLCBzbyB3aGVuZXZl
ciBwb3NzaWJsZQorICogICAgICAgICBzYXZlIHlvdXJzZWxmIHNvbWUgY3B1IGN5Y2xlcyBhbmQg
dXNlCisgKiAgICAgICAgIGVpbmFfc3RyaW5nc2hhcmVfcmVmKCkgaW5zdGVhZCBvZiBlaW5hX3N0
cmluZ3NoYXJlX2FkZCgpIG9yCisgKiAgICAgICAgIHN0cmR1cCgpCisgKi8KK0VBUEkgY29uc3Qg
Y2hhciAqZXdrX2JhY2tfZm9yd2FyZF9saXN0X2l0ZW1fdGl0bGVfZ2V0KGNvbnN0IEV3a19CYWNr
X0ZvcndhcmRfTGlzdF9JdGVtICppdGVtKTsKKworLyoqCisgKiBSZXR1cm5zIG9yaWdpbmFsIFVS
SSBvZiB0aGUgaXRlbS4KKyAqCisgKiBAc2VlIGV3a19iYWNrX2ZvcndhcmRfbGlzdF9pdGVtX3Vy
aV9nZXQoKQorICoKKyAqIEBwYXJhbSBpdGVtIHRoZSBiYWNrLWZvcndhcmQgbGlzdCBpdGVtIGlu
c3RhbmNlCisgKgorICogQHJldHVybiB0aGUgb3JpZ2luYWwgVVJJIG9mIHRoZSBAYSBpdGVtIG9y
IEBjIE5VTEwgaW4gY2FzZSBvZiBlcnJvci4gVGhpcyBwb2ludGVyIGlzCisgKiAgICAgICAgIGd1
YXJhbnRlZWQgdG8gYmUgZWluYV9zdHJpbmdzaGFyZSwgc28gd2hlbmV2ZXIgcG9zc2libGUKKyAq
ICAgICAgICAgc2F2ZSB5b3Vyc2VsZiBzb21lIGNwdSBjeWNsZXMgYW5kIHVzZQorICogICAgICAg
ICBlaW5hX3N0cmluZ3NoYXJlX3JlZigpIGluc3RlYWQgb2YgZWluYV9zdHJpbmdzaGFyZV9hZGQo
KSBvcgorICogICAgICAgICBzdHJkdXAoKQorICovCitFQVBJIGNvbnN0IGNoYXIgKmV3a19iYWNr
X2ZvcndhcmRfbGlzdF9pdGVtX29yaWdpbmFsX3VyaV9nZXQoY29uc3QgRXdrX0JhY2tfRm9yd2Fy
ZF9MaXN0X0l0ZW0gKml0ZW0pOworCisjaWZkZWYgX19jcGx1c3BsdXMKK30KKyNlbmRpZgorI2Vu
ZGlmIC8vIGV3a19iYWNrX2ZvcndhcmRfbGlzdF9pdGVtX2gKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZWZsL2V3a19iYWNrX2ZvcndhcmRfbGlzdF9pdGVtX3ByaXZh
dGUuaCBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZWZsL2V3a19iYWNrX2ZvcndhcmRf
bGlzdF9pdGVtX3ByaXZhdGUuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44
YzJjNjg0Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9l
ZmwvZXdrX2JhY2tfZm9yd2FyZF9saXN0X2l0ZW1fcHJpdmF0ZS5oCkBAIC0wLDAgKzEsMzUgQEAK
Ky8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTIgSW50ZWwgQ29ycG9yYXRpb24uIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJp
bmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0
ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6Cisg
KiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3Zl
IGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGl0ZW0gb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBm
b3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhp
cyBpdGVtIG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUK
KyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRo
IHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBB
UFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBS
RVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
CisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVT
UyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVO
VCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1Ig
QU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IK
KyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
IFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9G
IFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9X
RVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisg
KiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VO
Q0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9G
IFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9G
IFNVQ0ggREFNQUdFLgorICovCisKKyNpZm5kZWYgZXdrX2JhY2tfZm9yd2FyZF9saXN0X2l0ZW1f
cHJpdmF0ZV9oCisjZGVmaW5lIGV3a19iYWNrX2ZvcndhcmRfbGlzdF9pdGVtX3ByaXZhdGVfaAor
CisjaW5jbHVkZSA8V2ViS2l0Mi9XS0Jhc2UuaD4KKwordHlwZWRlZiBzdHJ1Y3QgX0V3a19CYWNr
X0ZvcndhcmRfTGlzdF9JdGVtIEV3a19CYWNrX0ZvcndhcmRfTGlzdF9JdGVtOworCitFd2tfQmFj
a19Gb3J3YXJkX0xpc3RfSXRlbSogZXdrX2JhY2tfZm9yd2FyZF9saXN0X2l0ZW1fbmV3KFdLQmFj
a0ZvcndhcmRMaXN0SXRlbVJlZiB3a0JhY2tGb3J3YXJkTGlzdEl0ZW1SZWYpOworCisjZW5kaWYg
Ly8gZXdrX2JhY2tfZm9yd2FyZF9saXN0X3ByaXZhdGVfaApkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YktpdDIvVUlQcm9jZXNzL0FQSS9lZmwvZXdrX2JhY2tfZm9yd2FyZF9saXN0X3ByaXZhdGUuaCBi
L1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZWZsL2V3a19iYWNrX2ZvcndhcmRfbGlzdF9w
cml2YXRlLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTkyYTRmNAotLS0g
L2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZWZsL2V3a19iYWNr
X2ZvcndhcmRfbGlzdF9wcml2YXRlLmgKQEAgLTAsMCArMSwzNyBAQAorLyoKKyAqIENvcHlyaWdo
dCAoQykgMjAxMiBJbnRlbCBDb3Jwb3JhdGlvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisg
KiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRo
IG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0
IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0
aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1
Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRh
dGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlv
bi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElU
UyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBX
QVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVE
IFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VM
QVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElO
Qy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJ
UkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElB
TCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YK
KyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQ
Uk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQg
T04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJ
Q1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0Up
CisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwg
RVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisg
Ki8KKworI2lmbmRlZiBld2tfYmFja19mb3J3YXJkX2xpc3RfcHJpdmF0ZV9oCisjZGVmaW5lIGV3
a19iYWNrX2ZvcndhcmRfbGlzdF9wcml2YXRlX2gKKworI2luY2x1ZGUgPFdlYktpdDIvV0tCYXNl
Lmg+CisKK3R5cGVkZWYgc3RydWN0IF9Fd2tfQmFja19Gb3J3YXJkX0xpc3QgRXdrX0JhY2tfRm9y
d2FyZF9MaXN0OworCit2b2lkIGV3a19iYWNrX2ZvcndhcmRfbGlzdF9jaGFuZ2VkKEV3a19CYWNr
X0ZvcndhcmRfTGlzdCosIFdLQmFja0ZvcndhcmRMaXN0SXRlbVJlZiB3a0FkZGVkSXRlbSwgV0tB
cnJheVJlZiB3a1JlbW92ZWRJdGVtcyk7CitFd2tfQmFja19Gb3J3YXJkX0xpc3QqIGV3a19iYWNr
X2ZvcndhcmRfbGlzdF9uZXcoV0tCYWNrRm9yd2FyZExpc3RSZWYgd2tCYWNrRm9yd2FyZExpc3RS
ZWYpOwordm9pZCBld2tfYmFja19mb3J3YXJkX2xpc3RfZnJlZShFd2tfQmFja19Gb3J3YXJkX0xp
c3QqIGxpc3QpOworCisjZW5kaWYgLy8gZXdrX2JhY2tfZm9yd2FyZF9saXN0X3ByaXZhdGVfaApk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9lZmwvZXdrX3ZpZXcuY3Bw
IGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9lZmwvZXdrX3ZpZXcuY3BwCmluZGV4IDI3
ZDQwYzEuLjdhMWE5MjEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkv
ZWZsL2V3a192aWV3LmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2VmbC9l
d2tfdmlldy5jcHAKQEAgLTI5LDYgKzI5LDcgQEAKICNpbmNsdWRlICJXS1JldGFpblB0ci5oIgog
I2luY2x1ZGUgIldLU3RyaW5nLmgiCiAjaW5jbHVkZSAiV0tVUkwuaCIKKyNpbmNsdWRlICJld2tf
YmFja19mb3J3YXJkX2xpc3RfcHJpdmF0ZS5oIgogI2luY2x1ZGUgImV3a19jb250ZXh0LmgiCiAj
aW5jbHVkZSAiZXdrX2NvbnRleHRfcHJpdmF0ZS5oIgogI2luY2x1ZGUgImV3a19pbnRlbnRfcHJp
dmF0ZS5oIgpAQCAtNjcsNiArNjgsNyBAQCBzdHJ1Y3QgX0V3a19WaWV3X1ByaXZhdGVfRGF0YSB7
CiAgICAgY29uc3QgY2hhciogY3Vyc29yR3JvdXA7CiAgICAgRXZhc19PYmplY3QqIGN1cnNvck9i
amVjdDsKICAgICBMb2FkaW5nUmVzb3VyY2VzTWFwIGxvYWRpbmdSZXNvdXJjZXNNYXA7CisgICAg
RXdrX0JhY2tfRm9yd2FyZF9MaXN0KiBiYWNrRm9yd2FyZExpc3Q7CiAKICNpZmRlZiBIQVZFX0VD
T1JFX1gKICAgICBib29sIGlzVXNpbmdFY29yZVg7CkBAIC04NSw2ICs4Nyw3IEBAIHN0cnVjdCBf
RXdrX1ZpZXdfUHJpdmF0ZV9EYXRhIHsKICAgICAgICAgLCBjdXN0b21FbmNvZGluZygwKQogICAg
ICAgICAsIGN1cnNvckdyb3VwKDApCiAgICAgICAgICwgY3Vyc29yT2JqZWN0KDApCisgICAgICAg
ICwgYmFja0ZvcndhcmRMaXN0KDApCiAjaWZkZWYgSEFWRV9FQ09SRV9YCiAgICAgICAgICwgaXNV
c2luZ0Vjb3JlWChmYWxzZSkKICNlbmRpZgpAQCAtMTA1LDYgKzEwOCw4IEBAIHN0cnVjdCBfRXdr
X1ZpZXdfUHJpdmF0ZV9EYXRhIHsKIAogICAgICAgICBpZiAoY3Vyc29yT2JqZWN0KQogICAgICAg
ICAgICAgZXZhc19vYmplY3RfZGVsKGN1cnNvck9iamVjdCk7CisKKyAgICAgICAgZXdrX2JhY2tf
Zm9yd2FyZF9saXN0X2ZyZWUoYmFja0ZvcndhcmRMaXN0KTsKICAgICB9CiB9OwogCkBAIC02NjEs
NiArNjY2LDcgQEAgRXZhc19PYmplY3QqIGV3a192aWV3X2Jhc2VfYWRkKEV2YXMqIGNhbnZhcywg
V0tDb250ZXh0UmVmIGNvbnRleHRSZWYsIFdLUGFnZUdyb3UKICAgICB9CiAKICAgICBwcml2LT5w
YWdlQ2xpZW50ID0gUGFnZUNsaWVudEltcGw6OmNyZWF0ZSh0b0ltcGwoY29udGV4dFJlZiksIHRv
SW1wbChwYWdlR3JvdXBSZWYpLCBld2tWaWV3KTsKKyAgICBwcml2LT5iYWNrRm9yd2FyZExpc3Qg
PSBld2tfYmFja19mb3J3YXJkX2xpc3RfbmV3KHRvQVBJKHByaXYtPnBhZ2VDbGllbnQtPnBhZ2Uo
KS0+YmFja0ZvcndhcmRMaXN0KCkpKTsKIAogICAgIFdLUGFnZVJlZiB3a1BhZ2UgPSB0b0FQSShw
cml2LT5wYWdlQ2xpZW50LT5wYWdlKCkpOwogICAgIGV3a192aWV3X2Zvcm1fY2xpZW50X2F0dGFj
aCh3a1BhZ2UsIGV3a1ZpZXcpOwpAQCAtMTA2Niw2ICsxMDcyLDE0IEBAIEVpbmFfQm9vbCBld2tf
dmlld19mb3J3YXJkX3Bvc3NpYmxlKEV2YXNfT2JqZWN0KiBld2tWaWV3KQogICAgIHJldHVybiBw
cml2LT5wYWdlQ2xpZW50LT5wYWdlKCktPmNhbkdvRm9yd2FyZCgpOwogfQogCitFd2tfQmFja19G
b3J3YXJkX0xpc3QqIGV3a192aWV3X2JhY2tfZm9yd2FyZF9saXN0X2dldChjb25zdCBFdmFzX09i
amVjdCogZXdrVmlldykKK3sKKyAgICBFV0tfVklFV19TRF9HRVRfT1JfUkVUVVJOKGV3a1ZpZXcs
IHNtYXJ0RGF0YSwgMCk7CisgICAgRVdLX1ZJRVdfUFJJVl9HRVRfT1JfUkVUVVJOKHNtYXJ0RGF0
YSwgcHJpdiwgMCk7CisKKyAgICByZXR1cm4gcHJpdi0+YmFja0ZvcndhcmRMaXN0OworfQorCiB2
b2lkIGV3a192aWV3X2ltYWdlX2RhdGFfc2V0KEV2YXNfT2JqZWN0KiBld2tWaWV3LCB2b2lkKiBp
bWFnZURhdGEsIGNvbnN0IEludFNpemUmIHNpemUpCiB7CiAgICAgRVdLX1ZJRVdfU0RfR0VUX09S
X1JFVFVSTihld2tWaWV3LCBzbWFydERhdGEpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIv
VUlQcm9jZXNzL0FQSS9lZmwvZXdrX3ZpZXcuaCBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9B
UEkvZWZsL2V3a192aWV3LmgKaW5kZXggYTE4ZWE3OC4uNTlmZmZlNyAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9lZmwvZXdrX3ZpZXcuaAorKysgYi9Tb3VyY2UvV2Vi
S2l0Mi9VSVByb2Nlc3MvQVBJL2VmbC9ld2tfdmlldy5oCkBAIC02MSw2ICs2MSw3IEBACiAjaWZu
ZGVmIGV3a192aWV3X2gKICNkZWZpbmUgZXdrX3ZpZXdfaAogCisjaW5jbHVkZSAiZXdrX2JhY2tf
Zm9yd2FyZF9saXN0LmgiCiAjaW5jbHVkZSAiZXdrX2NvbnRleHQuaCIKICNpbmNsdWRlICJld2tf
aW50ZW50LmgiCiAjaW5jbHVkZSAiZXdrX3VybF9yZXF1ZXN0LmgiCkBAIC0zMTksNiArMzIwLDIx
IEBAIEVBUEkgRWluYV9Cb29sICAgIGV3a192aWV3X2JhY2tfcG9zc2libGUoRXZhc19PYmplY3Qg
Km8pOwogRUFQSSBFaW5hX0Jvb2wgICAgZXdrX3ZpZXdfZm9yd2FyZF9wb3NzaWJsZShFdmFzX09i
amVjdCAqbyk7CiAKIC8qKgorICogR2V0cyB0aGUgYmFjay1mb3J3YXJkIGxpc3QgYXNzb2NpYXRl
ZCB3aXRoIHRoaXMgdmlldy4KKyAqCisgKiBUaGUgcmV0dXJuZWQgaW5zdGFuY2UgaXMgdW5pcXVl
IGZvciB0aGlzIHZpZXcgYW5kIHRodXMgbXVsdGlwbGUgY2FsbHMKKyAqIHRvIHRoaXMgZnVuY3Rp
b24gd2l0aCB0aGUgc2FtZSB2aWV3IGFzIHBhcmFtZXRlciByZXR1cm5zIHRoZSBzYW1lCisgKiBo
YW5kbGUuIFRoaXMgaGFuZGxlIGlzIGFsaXZlIHdoaWxlIHZpZXcgaXMgYWxpdmUsIHRodXMgb25l
CisgKiBtaWdodCB3YW50IHRvIGxpc3RlbiBmb3IgRVZBU19DQUxMQkFDS19ERUwgb24gZ2l2ZW4g
dmlldworICogKEBhIG8pIHRvIGtub3cgd2hlbiB0byBzdG9wIHVzaW5nIHJldHVybmVkIGhhbmRs
ZS4KKyAqCisgKiBAcGFyYW0gbyB2aWV3IG9iamVjdCB0byBnZXQgbmF2aWdhdGlvbiBiYWNrLWZv
cndhcmQgbGlzdAorICoKKyAqIEByZXR1cm4gdGhlIGJhY2stZm9yd2FyZCBsaXN0IGluc3RhbmNl
IGhhbmRsZSBhc3NvY2lhdGVkIHdpdGggdGhpcyB2aWV3CisgKi8KK0VBUEkgRXdrX0JhY2tfRm9y
d2FyZF9MaXN0ICpld2tfdmlld19iYWNrX2ZvcndhcmRfbGlzdF9nZXQoY29uc3QgRXZhc19PYmpl
Y3QgKm8pOworCisvKioKICAqIEdldHMgdGhlIGN1cnJlbnQgdGl0bGUgb2YgdGhlIG1haW4gZnJh
bWUuCiAgKgogICogSXQgcmV0dXJucyBhbiBpbnRlcm5hbCBzdHJpbmcgYW5kIHNob3VsZCBub3QK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZWZsL2V3a192aWV3X2xv
YWRlcl9jbGllbnQuY3BwIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9lZmwvZXdrX3Zp
ZXdfbG9hZGVyX2NsaWVudC5jcHAKaW5kZXggY2M4YjEyMC4uZTc3ZDYxMyAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9lZmwvZXdrX3ZpZXdfbG9hZGVyX2NsaWVudC5j
cHAKKysrIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9lZmwvZXdrX3ZpZXdfbG9hZGVy
X2NsaWVudC5jcHAKQEAgLTI2LDEwICsyNiwxMiBAQAogI2luY2x1ZGUgImNvbmZpZy5oIgogCiAj
aW5jbHVkZSAiV0tGcmFtZS5oIgorI2luY2x1ZGUgImV3a19iYWNrX2ZvcndhcmRfbGlzdF9wcml2
YXRlLmgiCiAjaW5jbHVkZSAiZXdrX2ludGVudC5oIgogI2luY2x1ZGUgImV3a19pbnRlbnRfcHJp
dmF0ZS5oIgogI2luY2x1ZGUgImV3a19pbnRlbnRfc2VydmljZS5oIgogI2luY2x1ZGUgImV3a19p
bnRlbnRfc2VydmljZV9wcml2YXRlLmgiCisjaW5jbHVkZSAiZXdrX3ZpZXcuaCIKICNpbmNsdWRl
ICJld2tfdmlld19sb2FkZXJfY2xpZW50X3ByaXZhdGUuaCIKICNpbmNsdWRlICJld2tfdmlld19w
cml2YXRlLmgiCiAjaW5jbHVkZSAiZXdrX3dlYl9lcnJvci5oIgpAQCAtMTIzLDYgKzEyNSwxNCBA
QCBzdGF0aWMgdm9pZCBkaWRGYWlsUHJvdmlzaW9uYWxMb2FkV2l0aEVycm9yRm9yRnJhbWUoV0tQ
YWdlUmVmIHBhZ2UsIFdLRnJhbWVSZWYgZgogICAgIGV3a193ZWJfZXJyb3JfZnJlZShld2tFcnJv
cik7CiB9CiAKK3N0YXRpYyB2b2lkIGRpZENoYW5nZUJhY2tGb3J3YXJkTGlzdChXS1BhZ2VSZWYg
cGFnZSwgV0tCYWNrRm9yd2FyZExpc3RJdGVtUmVmIGFkZGVkSXRlbSwgV0tBcnJheVJlZiByZW1v
dmVkSXRlbXMsIGNvbnN0IHZvaWQqIGNsaWVudEluZm8pCit7CisgICAgRXZhc19PYmplY3QqIGV3
a1ZpZXcgPSBzdGF0aWNfY2FzdDxFdmFzX09iamVjdCo+KGNvbnN0X2Nhc3Q8dm9pZCo+KGNsaWVu
dEluZm8pKTsKKyAgICBBU1NFUlQoZXdrVmlldyk7CisKKyAgICBld2tfYmFja19mb3J3YXJkX2xp
c3RfY2hhbmdlZChld2tfdmlld19iYWNrX2ZvcndhcmRfbGlzdF9nZXQoZXdrVmlldyksIGFkZGVk
SXRlbSwgcmVtb3ZlZEl0ZW1zKTsKK30KKwogdm9pZCBld2tfdmlld19sb2FkZXJfY2xpZW50X2F0
dGFjaChXS1BhZ2VSZWYgcGFnZVJlZiwgRXZhc19PYmplY3QqIGV3a1ZpZXcpCiB7CiAgICAgV0tQ
YWdlTG9hZGVyQ2xpZW50IGxvYWRDbGllbnQ7CkBAIC0xNDQsNSArMTU0LDYgQEAgdm9pZCBld2tf
dmlld19sb2FkZXJfY2xpZW50X2F0dGFjaChXS1BhZ2VSZWYgcGFnZVJlZiwgRXZhc19PYmplY3Qq
IGV3a1ZpZXcpCiAgICAgbG9hZENsaWVudC5kaWRTdGFydFByb3Zpc2lvbmFsTG9hZEZvckZyYW1l
ID0gZGlkU3RhcnRQcm92aXNpb25hbExvYWRGb3JGcmFtZTsKICAgICBsb2FkQ2xpZW50LmRpZFJl
Y2VpdmVTZXJ2ZXJSZWRpcmVjdEZvclByb3Zpc2lvbmFsTG9hZEZvckZyYW1lID0gZGlkUmVjZWl2
ZVNlcnZlclJlZGlyZWN0Rm9yUHJvdmlzaW9uYWxMb2FkRm9yRnJhbWU7CiAgICAgbG9hZENsaWVu
dC5kaWRGYWlsUHJvdmlzaW9uYWxMb2FkV2l0aEVycm9yRm9yRnJhbWUgPSBkaWRGYWlsUHJvdmlz
aW9uYWxMb2FkV2l0aEVycm9yRm9yRnJhbWU7CisgICAgbG9hZENsaWVudC5kaWRDaGFuZ2VCYWNr
Rm9yd2FyZExpc3QgPSBkaWRDaGFuZ2VCYWNrRm9yd2FyZExpc3Q7CiAgICAgV0tQYWdlU2V0UGFn
ZUxvYWRlckNsaWVudChwYWdlUmVmLCAmbG9hZENsaWVudCk7CiB9Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>156375</attachid>
            <date>2012-08-03 07:27:29 -0700</date>
            <delta_ts>2012-08-06 01:22:57 -0700</delta_ts>
            <desc>patch v5</desc>
            <filename>bug92345_v5</filename>
            <type>text/plain</type>
            <size>32684</size>
            <attacher name="Mikhail Pozdnyakov">mikhail.pozdnyakov</attacher>
            
              <data encoding="base64">Y29tbWl0IGVmYzU1Y2MwODBjNTMyMWM4NDQ4YWNhZjUzM2RkMTk3OTdhN2Q0ZmQKQXV0aG9yOiBN
aWtoYWlsIFBvemRueWFrb3YgPG1pa2hhaWwucG96ZG55YWtvdkBpbnRlbC5jb20+CkRhdGU6ICAg
RnJpIEp1bCAyNyAxMzowOToyOSAyMDEyICswMzAwCgogICAgYnVnOTIzNDUKCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViS2l0Mi9DaGFuZ2VMb2cgYi9Tb3VyY2UvV2ViS2l0Mi9DaGFuZ2VMb2cKaW5k
ZXggNzM2YWUxZS4uYTcxM2JiYyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvQ2hhbmdlTG9n
CisrKyBiL1NvdXJjZS9XZWJLaXQyL0NoYW5nZUxvZwpAQCAtMSwzICsxLDUyIEBACisyMDEyLTA3
LTI3ICBNaWtoYWlsIFBvemRueWFrb3YgIDxtaWtoYWlsLnBvemRueWFrb3ZAaW50ZWwuY29tPgor
CisgICAgICAgIFtFRkxdW1dLMl0gQWRkIGJhY2sgZm9yd2FyZCBsaXN0IEFQSQorICAgICAgICBo
dHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9OTIzNDUKKworICAgICAgICBS
ZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBBZGRlZCBuZXcgQmFjayBGb3J3
YXJkIGxpc3QgQVBJIHRvIEVGTCBXSzIuIEV3a19CYWNrX0ZvcndhcmRfTGlzdCBhbmQKKyAgICAg
ICAgRXdrX0JhY2tfRm9yd2FyZF9MaXN0X0l0ZW0gc3RydWN0dXJlcyB3ZXJlIGFkZGVkLiBUaGUg
bmV3IEFQSSBpcworICAgICAgICBtb3N0bHkgdGhlIHNhbWUgYXMgb25lIGZyb20gVUlQcm9jZXNz
L0FQSS9DL3sgV0tCYWNrRm9yd2FyZExpc3QuaCwgV0tCYWNrRm9yd2FyZExpc3RJdGVtLmggfS4K
KworICAgICAgICAqIFBsYXRmb3JtRWZsLmNtYWtlOgorICAgICAgICAqIFVJUHJvY2Vzcy9BUEkv
ZWZsL2V3a19iYWNrX2ZvcndhcmRfbGlzdC5jcHA6IEFkZGVkLgorICAgICAgICAoX0V3a19CYWNr
X0ZvcndhcmRfTGlzdCk6CisgICAgICAgIChfRXdrX0JhY2tfRm9yd2FyZF9MaXN0OjpfRXdrX0Jh
Y2tfRm9yd2FyZF9MaXN0KToKKyAgICAgICAgKGdldE9yQ3JlYXRlSXRlbSk6CisgICAgICAgICh3
ZWJraXRfYmFja19mb3J3YXJkX2xpc3RfY3VycmVudF9pdGVtX2dldCk6CisgICAgICAgICh3ZWJr
aXRfYmFja19mb3J3YXJkX2xpc3RfYmFja19pdGVtX2dldCk6CisgICAgICAgICh3ZWJraXRfYmFj
a19mb3J3YXJkX2xpc3RfZm9yd2FyZF9pdGVtX2dldCk6CisgICAgICAgICh3ZWJraXRfYmFja19m
b3J3YXJkX2xpc3RfaXRlbV9hdF9pbmRleF9nZXQpOgorICAgICAgICAod2Via2l0X2JhY2tfZm9y
d2FyZF9saXN0X2xlbmd0aF9nZXQpOgorICAgICAgICAoZXdrX2JhY2tfZm9yd2FyZF9saXN0X2No
YW5nZWQpOgorICAgICAgICAoZXdrX2JhY2tfZm9yd2FyZF9saXN0X25ldyk6CisgICAgICAgIChl
d2tfYmFja19mb3J3YXJkX2xpc3RfZnJlZSk6CisgICAgICAgICogVUlQcm9jZXNzL0FQSS9lZmwv
ZXdrX2JhY2tfZm9yd2FyZF9saXN0Lmg6IEFkZGVkLgorICAgICAgICAqIFVJUHJvY2Vzcy9BUEkv
ZWZsL2V3a19iYWNrX2ZvcndhcmRfbGlzdF9pdGVtLmNwcDogQWRkZWQuCisgICAgICAgIChnZXRJ
dGVtUHJvcGVydHkpOgorICAgICAgICAoX0V3a19CYWNrX0ZvcndhcmRfTGlzdF9JdGVtKToKKyAg
ICAgICAgKF9Fd2tfQmFja19Gb3J3YXJkX0xpc3RfSXRlbTo6X0V3a19CYWNrX0ZvcndhcmRfTGlz
dF9JdGVtKToKKyAgICAgICAgKF9Fd2tfQmFja19Gb3J3YXJkX0xpc3RfSXRlbTo6fl9Fd2tfQmFj
a19Gb3J3YXJkX0xpc3RfSXRlbSk6CisgICAgICAgIChld2tfYmFja19mb3J3YXJkX2xpc3RfaXRl
bV9yZWYpOgorICAgICAgICAoZXdrX2JhY2tfZm9yd2FyZF9saXN0X2l0ZW1fdW5yZWYpOgorICAg
ICAgICAoZXdrX2JhY2tfZm9yd2FyZF9saXN0X2l0ZW1fdXJpX2dldCk6CisgICAgICAgIChld2tf
YmFja19mb3J3YXJkX2xpc3RfaXRlbV90aXRsZV9nZXQpOgorICAgICAgICAoZXdrX2JhY2tfZm9y
d2FyZF9saXN0X2l0ZW1fb3JpZ2luYWxfdXJpX2dldCk6CisgICAgICAgIChld2tfYmFja19mb3J3
YXJkX2xpc3RfaXRlbV9uZXcpOgorICAgICAgICAqIFVJUHJvY2Vzcy9BUEkvZWZsL2V3a19iYWNr
X2ZvcndhcmRfbGlzdF9pdGVtLmg6IEFkZGVkLgorICAgICAgICAqIFVJUHJvY2Vzcy9BUEkvZWZs
L2V3a19iYWNrX2ZvcndhcmRfbGlzdF9pdGVtX3ByaXZhdGUuaDogQWRkZWQuCisgICAgICAgICog
VUlQcm9jZXNzL0FQSS9lZmwvZXdrX2JhY2tfZm9yd2FyZF9saXN0X3ByaXZhdGUuaDogQWRkZWQu
CisgICAgICAgICogVUlQcm9jZXNzL0FQSS9lZmwvZXdrX3ZpZXcuY3BwOgorICAgICAgICAoX0V3
a19WaWV3X1ByaXZhdGVfRGF0YSk6CisgICAgICAgIChfRXdrX1ZpZXdfUHJpdmF0ZV9EYXRhOjpf
RXdrX1ZpZXdfUHJpdmF0ZV9EYXRhKToKKyAgICAgICAgKF9Fd2tfVmlld19Qcml2YXRlX0RhdGE6
On5fRXdrX1ZpZXdfUHJpdmF0ZV9EYXRhKToKKyAgICAgICAgKGV3a192aWV3X2JhY2tfZm9yd2Fy
ZF9saXN0X2dldCk6IE5ldyBmdW5jdGlvbiB0byBnZXQgYmFjay1mb3J3YXJkIGxpc3QuCisgICAg
ICAgICogVUlQcm9jZXNzL0FQSS9lZmwvZXdrX3ZpZXcuaDoKKyAgICAgICAgKiBVSVByb2Nlc3Mv
QVBJL2VmbC9ld2tfdmlld19sb2FkZXJfY2xpZW50LmNwcDoKKyAgICAgICAgKGRpZENoYW5nZUJh
Y2tGb3J3YXJkTGlzdCk6IFRoZSBjYWxsYmFjayBhZGRlZCB0byB1cGRhdGUgYmFjay1mb3J3YXJk
IGxpc3QgaXRlbXMgY2FjaGUuCisgICAgICAgIChld2tfdmlld19sb2FkZXJfY2xpZW50X2F0dGFj
aCk6CisKIDIwMTItMDgtMDIgIENhcmxvcyBHYXJjaWEgQ2FtcG9zICA8Y2dhcmNpYUBpZ2FsaWEu
Y29tPgogCiAgICAgICAgIFtHVEtdIEluc3BlY3RvciBzaG91bGQgc2V0IGEgZGVmYXVsdCBhdHRh
Y2hlZCBoZWlnaHQgYmVmb3JlIGJlaW5nIGF0dGFjaGVkCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
S2l0Mi9QbGF0Zm9ybUVmbC5jbWFrZSBiL1NvdXJjZS9XZWJLaXQyL1BsYXRmb3JtRWZsLmNtYWtl
CmluZGV4IDliY2JkYjAuLmY3Yjg0MGIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1BsYXRm
b3JtRWZsLmNtYWtlCisrKyBiL1NvdXJjZS9XZWJLaXQyL1BsYXRmb3JtRWZsLmNtYWtlCkBAIC00
MSw2ICs0MSw4IEBAIExJU1QoQVBQRU5EIFdlYktpdDJfU09VUkNFUwogICAgIFVJUHJvY2Vzcy9B
UEkvZWZsL05ldHdvcmtJbmZvUHJvdmlkZXIuY3BwCiAgICAgVUlQcm9jZXNzL0FQSS9lZmwvUGFn
ZUNsaWVudEltcGwuY3BwCiAgICAgVUlQcm9jZXNzL0FQSS9lZmwvVmlicmF0aW9uUHJvdmlkZXIu
Y3BwCisgICAgVUlQcm9jZXNzL0FQSS9lZmwvZXdrX2JhY2tfZm9yd2FyZF9saXN0LmNwcAorICAg
IFVJUHJvY2Vzcy9BUEkvZWZsL2V3a19iYWNrX2ZvcndhcmRfbGlzdF9pdGVtLmNwcAogICAgIFVJ
UHJvY2Vzcy9BUEkvZWZsL2V3a19jb250ZXh0LmNwcAogICAgIFVJUHJvY2Vzcy9BUEkvZWZsL2V3
a19jb250ZXh0X2Rvd25sb2FkX2NsaWVudC5jcHAKICAgICBVSVByb2Nlc3MvQVBJL2VmbC9ld2tf
Y29udGV4dF9yZXF1ZXN0X21hbmFnZXJfY2xpZW50LmNwcApAQCAtMTg3LDYgKzE4OSw4IEBAIFNF
VChGb3J3YXJkaW5nTmV0d29ya0hlYWRlcnNfTkFNRSBmb3J3YXJkaW5nLWhlYWRlclNvdXApCiBD
T05GSUdVUkVfRklMRShlZmwvZXdlYmtpdDIucGMuaW4gJHtDTUFLRV9CSU5BUllfRElSfS9XZWJL
aXQyL2VmbC9ld2Via2l0Mi5wYyBAT05MWSkKIFNFVCAoRVdlYktpdDJfSEVBREVSUwogICAgICIk
e0NNQUtFX0NVUlJFTlRfU09VUkNFX0RJUn0vVUlQcm9jZXNzL0FQSS9lZmwvRVdlYktpdDIuaCIK
KyAgICAiJHtDTUFLRV9DVVJSRU5UX1NPVVJDRV9ESVJ9L1VJUHJvY2Vzcy9BUEkvZWZsL2V3a19i
YWNrX2ZvcndhcmRfbGlzdC5oIgorICAgICIke0NNQUtFX0NVUlJFTlRfU09VUkNFX0RJUn0vVUlQ
cm9jZXNzL0FQSS9lZmwvZXdrX2JhY2tfZm9yd2FyZF9saXN0X2l0ZW0uaCIKICAgICAiJHtDTUFL
RV9DVVJSRU5UX1NPVVJDRV9ESVJ9L1VJUHJvY2Vzcy9BUEkvZWZsL2V3a19jb250ZXh0LmgiCiAg
ICAgIiR7Q01BS0VfQ1VSUkVOVF9TT1VSQ0VfRElSfS9VSVByb2Nlc3MvQVBJL2VmbC9ld2tfY29v
a2llX21hbmFnZXIuaCIKICAgICAiJHtDTUFLRV9DVVJSRU5UX1NPVVJDRV9ESVJ9L1VJUHJvY2Vz
cy9BUEkvZWZsL2V3a19kb3dubG9hZF9qb2IuaCIKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQy
L1VJUHJvY2Vzcy9BUEkvZWZsL0VXZWJLaXQyLmggYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3Mv
QVBJL2VmbC9FV2ViS2l0Mi5oCmluZGV4IDlhMDUyZGEuLmQ5ODAyM2QgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZWZsL0VXZWJLaXQyLmgKKysrIGIvU291cmNlL1dl
YktpdDIvVUlQcm9jZXNzL0FQSS9lZmwvRVdlYktpdDIuaApAQCAtMjgsNiArMjgsOCBAQAogI2lm
bmRlZiBFV2ViS2l0Ml9oCiAjZGVmaW5lIEVXZWJLaXQyX2gKIAorI2luY2x1ZGUgImV3a19iYWNr
X2ZvcndhcmRfbGlzdC5oIgorI2luY2x1ZGUgImV3a19iYWNrX2ZvcndhcmRfbGlzdF9pdGVtLmgi
CiAjaW5jbHVkZSAiZXdrX2NvbnRleHQuaCIKICNpbmNsdWRlICJld2tfY29va2llX21hbmFnZXIu
aCIKICNpbmNsdWRlICJld2tfZG93bmxvYWRfam9iLmgiCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
S2l0Mi9VSVByb2Nlc3MvQVBJL2VmbC9ld2tfYmFja19mb3J3YXJkX2xpc3QuY3BwIGIvU291cmNl
L1dlYktpdDIvVUlQcm9jZXNzL0FQSS9lZmwvZXdrX2JhY2tfZm9yd2FyZF9saXN0LmNwcApuZXcg
ZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45YmVmMWIwCi0tLSAvZGV2L251bGwKKysr
IGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9lZmwvZXdrX2JhY2tfZm9yd2FyZF9saXN0
LmNwcApAQCAtMCwwICsxLDE2MiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMiBJbnRlbCBD
b3Jwb3JhdGlvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBh
bmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1v
ZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29u
ZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29k
ZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRp
c3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHly
aWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIg
bWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNP
RlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBB
UyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVS
Q0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJF
IERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJV
VE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwg
U1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09P
RFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVT
UworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBM
SUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBU
T1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFO
WSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9G
CisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNv
bmZpZy5oIgorI2luY2x1ZGUgImV3a19iYWNrX2ZvcndhcmRfbGlzdC5oIgorCisjaW5jbHVkZSAi
V0tBUElDYXN0LmgiCisjaW5jbHVkZSAiV0tBcnJheS5oIgorI2luY2x1ZGUgIldLQmFja0Zvcndh
cmRMaXN0LmgiCisjaW5jbHVkZSAiV0tSZXRhaW5QdHIuaCIKKyNpbmNsdWRlICJld2tfYmFja19m
b3J3YXJkX2xpc3RfaXRlbV9wcml2YXRlLmgiCisjaW5jbHVkZSA8d3RmL3RleHQvQ1N0cmluZy5o
PgorCit1c2luZyBuYW1lc3BhY2UgV2ViS2l0OworCit0eXBlZGVmIEhhc2hNYXA8V0tCYWNrRm9y
d2FyZExpc3RJdGVtUmVmLCBFd2tfQmFja19Gb3J3YXJkX0xpc3RfSXRlbSo+IEl0ZW1zTWFwOwor
CisvKioKKyAqIFxzdHJ1Y3QgIF9Fd2tfQmFja19Gb3J3YXJkX0xpc3QKKyAqIEBicmllZiAgIENv
bnRhaW5zIHRoZSBCYWNrIEZvcndhcmQgTGlzdCBkYXRhLgorICovCitzdHJ1Y3QgX0V3a19CYWNr
X0ZvcndhcmRfTGlzdCB7CisgICAgV0tSZXRhaW5QdHI8V0tCYWNrRm9yd2FyZExpc3RSZWY+IHdr
TGlzdDsKKyAgICBtdXRhYmxlIEl0ZW1zTWFwIGl0ZW1zQ2FjaGU7CisKKyAgICBfRXdrX0JhY2tf
Rm9yd2FyZF9MaXN0KFdLQmFja0ZvcndhcmRMaXN0UmVmIGxpc3RSZWYpCisgICAgICAgIDogd2tM
aXN0KGxpc3RSZWYpCisgICAgeyB9CisKKyAgICB+X0V3a19CYWNrX0ZvcndhcmRfTGlzdCgpCisg
ICAgeworICAgICAgICBJdGVtc01hcDo6aXRlcmF0b3IgaXQgPSBpdGVtc0NhY2hlLmJlZ2luKCk7
CisgICAgICAgIEl0ZW1zTWFwOjppdGVyYXRvciBlbmQgPSBpdGVtc0NhY2hlLmJlZ2luKCk7Cisg
ICAgICAgIGZvciAoOyBpdCAhPSBlbmQ7ICsraXQpCisgICAgICAgICAgICBld2tfYmFja19mb3J3
YXJkX2xpc3RfaXRlbV91bnJlZihpdC0+c2Vjb25kKTsKKworICAgIH0KK307CisKKyNkZWZpbmUg
RVdLX0JBQ0tfRk9SV0FSRF9MSVNUX1dLX0dFVF9PUl9SRVRVUk4obGlzdCwgd2tMaXN0XywgLi4u
KSAgXAorICAgIGlmICghKGxpc3QpKSB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgXAorICAgICAgICBFSU5BX0xPR19DUklUKCJsaXN0IGlzIE5VTEwuIik7ICAg
ICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICByZXR1cm4gX19WQV9BUkdTX187ICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIH0gICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIGlmICghKGxpc3Qp
LT53a0xpc3QpIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAg
ICBFSU5BX0xPR19DUklUKCJsaXN0LT53a0xpc3QgaXMgTlVMTC4iKTsgICAgICAgICAgICAgICAg
XAorICAgICAgICByZXR1cm4gX19WQV9BUkdTX187ICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgXAorICAgIH0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgXAorICAgIFdLQmFja0ZvcndhcmRMaXN0UmVmIHdrTGlzdF8gPSAo
bGlzdCktPndrTGlzdC5nZXQoKQorCisKK3N0YXRpYyBpbmxpbmUgRXdrX0JhY2tfRm9yd2FyZF9M
aXN0X0l0ZW0qIGFkZEl0ZW1Ub1dyYXBwZXJDYWNoZShjb25zdCBFd2tfQmFja19Gb3J3YXJkX0xp
c3QqIGxpc3QsIFdLQmFja0ZvcndhcmRMaXN0SXRlbVJlZiB3a0l0ZW0pCit7CisgICAgRUlOQV9T
QUZFVFlfT05fTlVMTF9SRVRVUk5fVkFMKGxpc3QsIDApOworICAgIEVJTkFfU0FGRVRZX09OX05V
TExfUkVUVVJOX1ZBTCh3a0l0ZW0sIDApOworCisgICAgRXdrX0JhY2tfRm9yd2FyZF9MaXN0X0l0
ZW0qIGl0ZW0gPSBsaXN0LT5pdGVtc0NhY2hlLmdldCh3a0l0ZW0pOworICAgIGlmICghaXRlbSkg
eworICAgICAgICBpdGVtID0gZXdrX2JhY2tfZm9yd2FyZF9saXN0X2l0ZW1fbmV3KHdrSXRlbSk7
CisgICAgICAgIGxpc3QtPml0ZW1zQ2FjaGUuc2V0KHdrSXRlbSwgaXRlbSk7CisgICAgfQorCisg
ICAgcmV0dXJuIGl0ZW07Cit9CisKK0V3a19CYWNrX0ZvcndhcmRfTGlzdF9JdGVtKiBld2tfYmFj
a19mb3J3YXJkX2xpc3RfY3VycmVudF9pdGVtX2dldChjb25zdCBFd2tfQmFja19Gb3J3YXJkX0xp
c3QqIGxpc3QpCit7CisgICAgRVdLX0JBQ0tfRk9SV0FSRF9MSVNUX1dLX0dFVF9PUl9SRVRVUk4o
bGlzdCwgd2tMaXN0LCAwKTsKKworICAgIHJldHVybiBhZGRJdGVtVG9XcmFwcGVyQ2FjaGUobGlz
dCwgV0tCYWNrRm9yd2FyZExpc3RHZXRDdXJyZW50SXRlbSh3a0xpc3QpKTsKK30KKworRXdrX0Jh
Y2tfRm9yd2FyZF9MaXN0X0l0ZW0qIGV3a19iYWNrX2ZvcndhcmRfbGlzdF9wcmV2aW91c19pdGVt
X2dldChjb25zdCBFd2tfQmFja19Gb3J3YXJkX0xpc3QqIGxpc3QpCit7CisgICAgRVdLX0JBQ0tf
Rk9SV0FSRF9MSVNUX1dLX0dFVF9PUl9SRVRVUk4obGlzdCwgd2tMaXN0LCAwKTsKKworICAgIHJl
dHVybiBhZGRJdGVtVG9XcmFwcGVyQ2FjaGUobGlzdCwgV0tCYWNrRm9yd2FyZExpc3RHZXRCYWNr
SXRlbSh3a0xpc3QpKTsKK30KKworRXdrX0JhY2tfRm9yd2FyZF9MaXN0X0l0ZW0qIGV3a19iYWNr
X2ZvcndhcmRfbGlzdF9uZXh0X2l0ZW1fZ2V0KGNvbnN0IEV3a19CYWNrX0ZvcndhcmRfTGlzdCog
bGlzdCkKK3sKKyAgICBFV0tfQkFDS19GT1JXQVJEX0xJU1RfV0tfR0VUX09SX1JFVFVSTihsaXN0
LCB3a0xpc3QsIDApOworCisgICAgcmV0dXJuIGFkZEl0ZW1Ub1dyYXBwZXJDYWNoZShsaXN0LCBX
S0JhY2tGb3J3YXJkTGlzdEdldEZvcndhcmRJdGVtKHdrTGlzdCkpOworfQorCitFd2tfQmFja19G
b3J3YXJkX0xpc3RfSXRlbSogZXdrX2JhY2tfZm9yd2FyZF9saXN0X2l0ZW1fYXRfaW5kZXhfZ2V0
KGNvbnN0IEV3a19CYWNrX0ZvcndhcmRfTGlzdCogbGlzdCwgaW50IGluZGV4KQoreworICAgIEVX
S19CQUNLX0ZPUldBUkRfTElTVF9XS19HRVRfT1JfUkVUVVJOKGxpc3QsIHdrTGlzdCwgMCk7CisK
KyAgICByZXR1cm4gYWRkSXRlbVRvV3JhcHBlckNhY2hlKGxpc3QsIFdLQmFja0ZvcndhcmRMaXN0
R2V0SXRlbUF0SW5kZXgod2tMaXN0LCBpbmRleCkpOworfQorCit1bnNpZ25lZCBld2tfYmFja19m
b3J3YXJkX2xpc3RfY291bnQoRXdrX0JhY2tfRm9yd2FyZF9MaXN0KiBsaXN0KQoreworICAgIEVX
S19CQUNLX0ZPUldBUkRfTElTVF9XS19HRVRfT1JfUkVUVVJOKGxpc3QsIHdrTGlzdCwgMCk7CisK
KyAgICBjb25zdCB1bnNpZ25lZCBjdXJyZW50SXRlbSA9IGV3a19iYWNrX2ZvcndhcmRfbGlzdF9j
dXJyZW50X2l0ZW1fZ2V0KGxpc3QpID8gMSA6IDA7CisKKyAgICByZXR1cm4gV0tCYWNrRm9yd2Fy
ZExpc3RHZXRCYWNrTGlzdENvdW50KHdrTGlzdCkgKyBXS0JhY2tGb3J3YXJkTGlzdEdldEZvcndh
cmRMaXN0Q291bnQod2tMaXN0KSArIGN1cnJlbnRJdGVtOworfQorCisKKy8qKgorICogQGludGVy
bmFsCisgKiBVcGRhdGVzIGl0ZW1zIGNhY2hlLgorICovCit2b2lkIGV3a19iYWNrX2ZvcndhcmRf
bGlzdF9jaGFuZ2VkKEV3a19CYWNrX0ZvcndhcmRfTGlzdCogbGlzdCwgV0tCYWNrRm9yd2FyZExp
c3RJdGVtUmVmIHdrQWRkZWRJdGVtLCBXS0FycmF5UmVmIHdrUmVtb3ZlZEl0ZW1zKQoreworICAg
IGFkZEl0ZW1Ub1dyYXBwZXJDYWNoZShsaXN0LCB3a0FkZGVkSXRlbSk7IC8vIFB1dHMgbmV3IGl0
ZW0gdG8gdGhlIGNhY2hlLgorCisgICAgY29uc3Qgc2l6ZV90IHJlbW92ZWRJdGVtc1NpemUgPSB3
a1JlbW92ZWRJdGVtcyA/IFdLQXJyYXlHZXRTaXplKHdrUmVtb3ZlZEl0ZW1zKSA6IDA7CisgICAg
Zm9yIChzaXplX3QgaSA9IDA7IGkgPCByZW1vdmVkSXRlbXNTaXplOyArK2kpIHsKKyAgICAgICAg
V0tCYWNrRm9yd2FyZExpc3RJdGVtUmVmIHdrSXRlbSA9IHN0YXRpY19jYXN0PFdLQmFja0Zvcndh
cmRMaXN0SXRlbVJlZj4oV0tBcnJheUdldEl0ZW1BdEluZGV4KHdrUmVtb3ZlZEl0ZW1zLCBpKSk7
CisgICAgICAgIGlmIChFd2tfQmFja19Gb3J3YXJkX0xpc3RfSXRlbSogaXRlbSA9IGxpc3QtPml0
ZW1zQ2FjaGUudGFrZSh3a0l0ZW0pKQorICAgICAgICAgICAgZXdrX2JhY2tfZm9yd2FyZF9saXN0
X2l0ZW1fdW5yZWYoaXRlbSk7CisgICAgfQorfQorCisvKioKKyAqIEBpbnRlcm5hbAorICogQ29u
c3RydWN0cyBhIEV3a19CYWNrX0ZvcndhcmRfTGlzdCBmcm9tIGEgV0tCYWNrRm9yd2FyZExpc3RS
ZWYuCisgKi8KK0V3a19CYWNrX0ZvcndhcmRfTGlzdCogZXdrX2JhY2tfZm9yd2FyZF9saXN0X25l
dyhXS0JhY2tGb3J3YXJkTGlzdFJlZiB3a0JhY2tGb3J3YXJkTGlzdFJlZikKK3sKKyAgICBFSU5B
X1NBRkVUWV9PTl9OVUxMX1JFVFVSTl9WQUwod2tCYWNrRm9yd2FyZExpc3RSZWYsIDApOworCisg
ICAgcmV0dXJuIG5ldyBFd2tfQmFja19Gb3J3YXJkX0xpc3Qod2tCYWNrRm9yd2FyZExpc3RSZWYp
OworfQorCisvKioKKyAqIEBpbnRlcm5hbAorICogRnJlZXMgYSBFd2tfQmFja19Gb3J3YXJkX0xp
c3Qgb2JqZWN0LgorICovCit2b2lkIGV3a19iYWNrX2ZvcndhcmRfbGlzdF9mcmVlKEV3a19CYWNr
X0ZvcndhcmRfTGlzdCogbGlzdCkKK3sKKyAgICBFSU5BX1NBRkVUWV9PTl9OVUxMX1JFVFVSTihs
aXN0KTsKKworICAgIGRlbGV0ZSBsaXN0OworfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIv
VUlQcm9jZXNzL0FQSS9lZmwvZXdrX2JhY2tfZm9yd2FyZF9saXN0LmggYi9Tb3VyY2UvV2ViS2l0
Mi9VSVByb2Nlc3MvQVBJL2VmbC9ld2tfYmFja19mb3J3YXJkX2xpc3QuaApuZXcgZmlsZSBtb2Rl
IDEwMDY0NAppbmRleCAwMDAwMDAwLi41YjljY2E3Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNl
L1dlYktpdDIvVUlQcm9jZXNzL0FQSS9lZmwvZXdrX2JhY2tfZm9yd2FyZF9saXN0LmgKQEAgLTAs
MCArMSw5MiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMiBJbnRlbCBDb3Jwb3JhdGlvbi4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNv
dXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwg
YXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICog
YXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFp
biB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMg
aW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHBy
b3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBS
T1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBB
TkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZ
IEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQu
IElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUg
TElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhF
TVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklD
RVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJS
VVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdI
RVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJ
TkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9G
IFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9T
U0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworLyoqCisgKiBAZmlsZSAgICBld2tfYmFj
a19mb3J3YXJkX2xpc3QuaAorICogQGJyaWVmICAgRGVzY3JpYmVzIHRoZSBFd2sgQmFjayBGb3J3
YXJkIExpc3QgQVBJLgorICovCisKKyNpZm5kZWYgZXdrX2JhY2tfZm9yd2FyZF9saXN0X2gKKyNk
ZWZpbmUgZXdrX2JhY2tfZm9yd2FyZF9saXN0X2gKKworI2luY2x1ZGUgImV3a19iYWNrX2Zvcndh
cmRfbGlzdF9pdGVtLmgiCisKKyNpZmRlZiBfX2NwbHVzcGx1cworZXh0ZXJuICJDIiB7CisjZW5k
aWYKKworLyoqIENyZWF0ZXMgYSB0eXBlIG5hbWUgZm9yIF9Fd2tfQmFja19Gb3J3YXJkX0xpc3Qg
Ki8KK3R5cGVkZWYgc3RydWN0IF9Fd2tfQmFja19Gb3J3YXJkX0xpc3QgRXdrX0JhY2tfRm9yd2Fy
ZF9MaXN0OworCisvKioKKyAqIFJldHVybnMgdGhlIGN1cnJlbnQgaXRlbSBpbiB0aGUgQGEgbGlz
dC4KKyAqCisgKiBAcGFyYW0gbGlzdCB0aGUgYmFjay1mb3J3YXJkIGxpc3QgaW5zdGFuY2UKKyAq
CisgKiBAcmV0dXJuIHRoZSBjdXJyZW50IGl0ZW0gaW4gdGhlIEBhIGxpc3Qgb3IgQGMgTlVMTCBp
biBjYXNlIG9mIGVycm9yCisgKi8KK0VBUEkgRXdrX0JhY2tfRm9yd2FyZF9MaXN0X0l0ZW0gKmV3
a19iYWNrX2ZvcndhcmRfbGlzdF9jdXJyZW50X2l0ZW1fZ2V0KGNvbnN0IEV3a19CYWNrX0Zvcndh
cmRfTGlzdCAqbGlzdCk7CisKKy8qKgorICogUmV0dXJucyB0aGUgaXRlbSB0aGF0IHByZWNlZGVz
IHRoZSBjdXJyZW50IGl0ZW0gaW4gdGhlIEBhIGxpc3QuCisgKgorICogQHBhcmFtIGxpc3QgdGhl
IGJhY2stZm9yd2FyZCBsaXN0IGluc3RhbmNlCisgKgorICogQHJldHVybiB0aGUgaXRlbSB0aGF0
IHByZWNlZGVzIHRoZSBjdXJyZW50IGl0ZW0gdGhlIEBhIGxpc3Qgb3IgQGMgTlVMTCBpbiBjYXNl
IG9mIGVycm9yCisgKi8KK0VBUEkgRXdrX0JhY2tfRm9yd2FyZF9MaXN0X0l0ZW0gKmV3a19iYWNr
X2ZvcndhcmRfbGlzdF9wcmV2aW91c19pdGVtX2dldChjb25zdCBFd2tfQmFja19Gb3J3YXJkX0xp
c3QgKmxpc3QpOworCisvKioKKyAqIFJldHVybnMgdGhlIGl0ZW0gdGhhdCBmb2xsb3dzIHRoZSBj
dXJyZW50IGl0ZW0gaW4gdGhlIEBhIGxpc3QuCisgKgorICogQHBhcmFtIGxpc3QgdGhlIGJhY2st
Zm9yd2FyZCBsaXN0IGluc3RhbmNlCisgKgorICogQHJldHVybiB0aGUgaXRlbSB0aGF0IGZvbGxv
d3MgdGhlIGN1cnJlbnQgaXRlbSBpbiB0aGUgQGEgbGlzdCBvciBAYyBOVUxMIGluIGNhc2Ugb2Yg
ZXJyb3IKKyAqLworRUFQSSBFd2tfQmFja19Gb3J3YXJkX0xpc3RfSXRlbSAqZXdrX2JhY2tfZm9y
d2FyZF9saXN0X25leHRfaXRlbV9nZXQoY29uc3QgRXdrX0JhY2tfRm9yd2FyZF9MaXN0ICpsaXN0
KTsKKworLyoqCisgKiBSZXR1cm5zIHRoZSBpdGVtIGF0IGEgZ2l2ZW4gQGEgaW5kZXggcmVsYXRp
dmUgdG8gdGhlIGN1cnJlbnQgaXRlbS4KKyAqCisgKiBAcGFyYW0gbGlzdCB0aGUgYmFjay1mb3J3
YXJkIGxpc3QgaW5zdGFuY2UKKyAqIEBwYXJhbSBpbmRleCB0aGUgaW5kZXggb2YgdGhlIGl0ZW0K
KyAqCisgKiBAcmV0dXJuIHRoZSBpdGVtIGF0IGEgZ2l2ZW4gQGEgaW5kZXggcmVsYXRpdmUgdG8g
dGhlIGN1cnJlbnQgaXRlbSBvciBAYyBOVUxMIGluIGNhc2Ugb2YgZXJyb3IKKyAqLworRUFQSSBF
d2tfQmFja19Gb3J3YXJkX0xpc3RfSXRlbSAqZXdrX2JhY2tfZm9yd2FyZF9saXN0X2l0ZW1fYXRf
aW5kZXhfZ2V0KGNvbnN0IEV3a19CYWNrX0ZvcndhcmRfTGlzdCAqbGlzdCwgaW50IGluZGV4KTsK
KworLyoqCisgKiBSZXR1cm5zIHRoZSBsZW5ndGggb2YgdGhlIGJhY2stZm9yd2FyZCBsaXN0IGlu
Y2x1ZGluZyBjdXJyZW50IGl0ZW0uCisgKgorICogQHBhcmFtIGxpc3QgdGhlIGJhY2stZm9yd2Fy
ZCBsaXN0IGluc3RhbmNlCisgKgorICogQHJldHVybiB0aGUgbGVuZ3RoIG9mIHRoZSBiYWNrLWZv
cndhcmQgbGlzdCBpbmNsdWRpbmcgY3VycmVudCBpdGVtIG9yIEBjIDAgaW4gY2FzZSBvZiBlcnJv
cgorICovCitFQVBJIHVuc2lnbmVkIGV3a19iYWNrX2ZvcndhcmRfbGlzdF9jb3VudChFd2tfQmFj
a19Gb3J3YXJkX0xpc3QgKmxpc3QpOworCisjaWZkZWYgX19jcGx1c3BsdXMKK30KKyNlbmRpZgor
I2VuZGlmIC8vIGV3a19iYWNrX2ZvcndhcmRfbGlzdF9oCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
S2l0Mi9VSVByb2Nlc3MvQVBJL2VmbC9ld2tfYmFja19mb3J3YXJkX2xpc3RfaXRlbS5jcHAgYi9T
b3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2VmbC9ld2tfYmFja19mb3J3YXJkX2xpc3RfaXRl
bS5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDk0ZDZiNAotLS0gL2Rl
di9udWxsCisrKyBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZWZsL2V3a19iYWNrX2Zv
cndhcmRfbGlzdF9pdGVtLmNwcApAQCAtMCwwICsxLDEyMCBAQAorLyoKKyAqIENvcHlyaWdodCAo
QykgMjAxMiBJbnRlbCBDb3Jwb3JhdGlvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBS
ZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9y
IHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRo
ZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9u
cyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBu
b3RpY2UsIHRoaXMgaXRlbSBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2Ug
dGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGl0ZW0gb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlv
biBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4K
KyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBD
T05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJS
QU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdB
UlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIK
KyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4g
T1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVD
VCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBE
QU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAq
IFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9G
SVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04g
QU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1Qg
TElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisg
KiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZF
TiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8K
KworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgImV3a19iYWNrX2ZvcndhcmRfbGlzdF9p
dGVtLmgiCisKKyNpbmNsdWRlICJXS0FQSUNhc3QuaCIKKyNpbmNsdWRlICJXS0JhY2tGb3J3YXJk
TGlzdEl0ZW0uaCIKKyNpbmNsdWRlICJXS1JldGFpblB0ci5oIgorI2luY2x1ZGUgIldLU3RyaW5n
LmgiCisjaW5jbHVkZSAiV0tVUkwuaCIKKyNpbmNsdWRlIDx3dGYvdGV4dC9DU3RyaW5nLmg+CisK
K3VzaW5nIG5hbWVzcGFjZSBXZWJLaXQ7CisKK2NsYXNzIEVpbmFTdHJpbmdTaGFyZSB7CitwdWJs
aWM6CisgICAgdGVtcGxhdGUgPHR5cGVuYW1lIFdLUmVmVHlwZT4KKyAgICBFaW5hU3RyaW5nU2hh
cmUoY29uc3QgV0tSZXRhaW5QdHI8V0tSZWZUeXBlPiYgc3RyUmVmKQorICAgICAgICA6IG1fc3Ry
KGVpbmFfc3RyaW5nc2hhcmVfYWRkKHRvSW1wbChzdHJSZWYuZ2V0KCkpLT5zdHJpbmcoKS51dGY4
KCkuZGF0YSgpKSkKKyAgICB7CisgICAgICAgIEFTU0VSVChtX3N0cik7CisgICAgfQorICAgIH5F
aW5hU3RyaW5nU2hhcmUoKSB7IGVpbmFfc3RyaW5nc2hhcmVfZGVsKG1fc3RyKTsgfQorICAgIGlu
bGluZSBvcGVyYXRvciBjb25zdCBjaGFyKiAoKSBjb25zdCB7IHJldHVybiBtX3N0cjsgfQorCitw
cml2YXRlOgorICAgIGNvbnN0IGNoYXIqIG1fc3RyOworfTsKKworLyoqCisgKiBcc3RydWN0ICBf
RXdrX0JhY2tfRm9yd2FyZF9MaXN0CisgKiBAYnJpZWYgICBDb250YWlucyB0aGUgQmFjayBGb3J3
YXJkIExpc3QgZGF0YS4KKyAqLworc3RydWN0IF9Fd2tfQmFja19Gb3J3YXJkX0xpc3RfSXRlbSB7
CisgICAgdW5zaWduZWQgaW50IF9fcmVmOyAvKio8IHRoZSByZWZlcmVuY2UgY291bnQgb2YgdGhl
IG9iamVjdCAqLworICAgIFdLUmV0YWluUHRyPFdLQmFja0ZvcndhcmRMaXN0SXRlbVJlZj4gd2tJ
dGVtOworICAgIEVpbmFTdHJpbmdTaGFyZSB1cmk7CisgICAgRWluYVN0cmluZ1NoYXJlIHRpdGxl
OworICAgIEVpbmFTdHJpbmdTaGFyZSBvcmlnaW5hbFVyaTsKKworICAgIF9Fd2tfQmFja19Gb3J3
YXJkX0xpc3RfSXRlbShXS0JhY2tGb3J3YXJkTGlzdEl0ZW1SZWYgaXRlbVJlZikKKyAgICAgICAg
OiBfX3JlZigxKQorICAgICAgICAsIHdrSXRlbShpdGVtUmVmKQorICAgICAgICAsIHVyaShXS1Jl
dGFpblB0cjxXS1VSTFJlZj4oQWRvcHRXSywgV0tCYWNrRm9yd2FyZExpc3RJdGVtQ29weVVSTChp
dGVtUmVmKSkpCisgICAgICAgICwgdGl0bGUoV0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+KEFkb3B0
V0ssIFdLQmFja0ZvcndhcmRMaXN0SXRlbUNvcHlUaXRsZShpdGVtUmVmKSkpCisgICAgICAgICwg
b3JpZ2luYWxVcmkoV0tSZXRhaW5QdHI8V0tVUkxSZWY+KEFkb3B0V0ssIFdLQmFja0ZvcndhcmRM
aXN0SXRlbUNvcHlPcmlnaW5hbFVSTChpdGVtUmVmKSkpCisgICAgeyB9CisKKyAgICB+X0V3a19C
YWNrX0ZvcndhcmRfTGlzdF9JdGVtKCkKKyAgICB7CisgICAgICAgIEFTU0VSVCghX19yZWYpOwor
ICAgIH0KK307CisKK3ZvaWQgZXdrX2JhY2tfZm9yd2FyZF9saXN0X2l0ZW1fcmVmKEV3a19CYWNr
X0ZvcndhcmRfTGlzdF9JdGVtKiBpdGVtKQoreworICAgIEVJTkFfU0FGRVRZX09OX05VTExfUkVU
VVJOKGl0ZW0pOworICAgICsraXRlbS0+X19yZWY7Cit9CisKK3ZvaWQgZXdrX2JhY2tfZm9yd2Fy
ZF9saXN0X2l0ZW1fdW5yZWYoRXdrX0JhY2tfRm9yd2FyZF9MaXN0X0l0ZW0qIGl0ZW0pCit7Cisg
ICAgRUlOQV9TQUZFVFlfT05fTlVMTF9SRVRVUk4oaXRlbSk7CisKKyAgICBpZiAoLS1pdGVtLT5f
X3JlZikKKyAgICAgICAgcmV0dXJuOworCisgICAgZGVsZXRlIGl0ZW07Cit9CisKK2NvbnN0IGNo
YXIqIGV3a19iYWNrX2ZvcndhcmRfbGlzdF9pdGVtX3VyaV9nZXQoY29uc3QgRXdrX0JhY2tfRm9y
d2FyZF9MaXN0X0l0ZW0qIGl0ZW0pCit7CisgICAgRUlOQV9TQUZFVFlfT05fTlVMTF9SRVRVUk5f
VkFMKGl0ZW0sIDApOworCisgICAgcmV0dXJuIGl0ZW0tPnVyaTsKK30KKworY29uc3QgY2hhciog
ZXdrX2JhY2tfZm9yd2FyZF9saXN0X2l0ZW1fdGl0bGVfZ2V0KGNvbnN0IEV3a19CYWNrX0Zvcndh
cmRfTGlzdF9JdGVtKiBpdGVtKQoreworICAgIEVJTkFfU0FGRVRZX09OX05VTExfUkVUVVJOX1ZB
TChpdGVtLCAwKTsKKworICAgIHJldHVybiBpdGVtLT50aXRsZTsKK30KKworY29uc3QgY2hhciog
ZXdrX2JhY2tfZm9yd2FyZF9saXN0X2l0ZW1fb3JpZ2luYWxfdXJpX2dldChjb25zdCBFd2tfQmFj
a19Gb3J3YXJkX0xpc3RfSXRlbSogaXRlbSkKK3sKKyAgICBFSU5BX1NBRkVUWV9PTl9OVUxMX1JF
VFVSTl9WQUwoaXRlbSwgMCk7CisKKyAgICByZXR1cm4gaXRlbS0+b3JpZ2luYWxVcmk7Cit9CisK
K0V3a19CYWNrX0ZvcndhcmRfTGlzdF9JdGVtKiBld2tfYmFja19mb3J3YXJkX2xpc3RfaXRlbV9u
ZXcoV0tCYWNrRm9yd2FyZExpc3RJdGVtUmVmIGJhY2tGb3J3YXJkTGlzdEl0ZW1EYXRhKQorewor
ICAgIEVJTkFfU0FGRVRZX09OX05VTExfUkVUVVJOX1ZBTChiYWNrRm9yd2FyZExpc3RJdGVtRGF0
YSwgMCk7CisKKyAgICByZXR1cm4gbmV3IEV3a19CYWNrX0ZvcndhcmRfTGlzdF9JdGVtKGJhY2tG
b3J3YXJkTGlzdEl0ZW1EYXRhKTsKK30KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1VJUHJv
Y2Vzcy9BUEkvZWZsL2V3a19iYWNrX2ZvcndhcmRfbGlzdF9pdGVtLmggYi9Tb3VyY2UvV2ViS2l0
Mi9VSVByb2Nlc3MvQVBJL2VmbC9ld2tfYmFja19mb3J3YXJkX2xpc3RfaXRlbS5oCm5ldyBmaWxl
IG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjgxMWYwZTEKLS0tIC9kZXYvbnVsbAorKysgYi9T
b3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2VmbC9ld2tfYmFja19mb3J3YXJkX2xpc3RfaXRl
bS5oCkBAIC0wLDAgKzEsMTA3IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEyIEludGVsIENv
cnBvcmF0aW9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFu
ZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9k
aWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25k
aXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2Rl
IG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlz
dHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJp
Z2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBt
YXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09G
VFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFT
IElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJD
SEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUg
RElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVU
T1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBT
UEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09E
UyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNT
CisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJ
QUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRP
UlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5Z
IFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YK
KyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisvKioKKyAqIEBmaWxl
ICAgIGV3a19iYWNrX2ZvcndhcmRfbGlzdF9pdGVtLmgKKyAqIEBicmllZiAgIERlc2NyaWJlcyB0
aGUgRXdrIEJhY2sgRm9yd2FyZCBMaXN0IEl0ZW0gQVBJLgorICovCisKKyNpZm5kZWYgZXdrX2Jh
Y2tfZm9yd2FyZF9saXN0X2l0ZW1faAorI2RlZmluZSBld2tfYmFja19mb3J3YXJkX2xpc3RfaXRl
bV9oCisKKyNpbmNsdWRlIDxFaW5hLmg+CisKKyNpZmRlZiBfX2NwbHVzcGx1cworZXh0ZXJuICJD
IiB7CisjZW5kaWYKKworLyoqIENyZWF0ZXMgYSB0eXBlIG5hbWUgZm9yIF9Fd2tfQmFja19Gb3J3
YXJkX0xpc3RfSXRlbSAqLwordHlwZWRlZiBzdHJ1Y3QgX0V3a19CYWNrX0ZvcndhcmRfTGlzdF9J
dGVtIEV3a19CYWNrX0ZvcndhcmRfTGlzdF9JdGVtOworCisvKioKKyAqIEluY3JlYXNlcyB0aGUg
cmVmZXJlbmNlIGNvdW50IG9mIHRoZSBnaXZlbiBvYmplY3QuCisgKgorICogQHBhcmFtIGl0ZW0g
dGhlIGJhY2stZm9yd2FyZCBsaXN0IGl0ZW0gaW5zdGFuY2UgdG8gaW5jcmVhc2UgdGhlIHJlZmVy
ZW5jZSBjb3VudAorICovCitFQVBJIHZvaWQgZXdrX2JhY2tfZm9yd2FyZF9saXN0X2l0ZW1fcmVm
KEV3a19CYWNrX0ZvcndhcmRfTGlzdF9JdGVtICppdGVtKTsKKworLyoqCisgKiBEZWNyZWFzZXMg
dGhlIHJlZmVyZW5jZSBjb3VudCBvZiB0aGUgZ2l2ZW4gb2JqZWN0LCBwb3NzaWJseSBmcmVlaW5n
IGl0LgorICoKKyAqIFdoZW4gdGhlIHJlZmVyZW5jZSBjb3VudCByZWFjaGVzIDAsIHRoZSBpdGVt
IGlzIGZyZWVkLgorICoKKyAqIEBwYXJhbSBpdGVtIHRoZSBiYWNrLWZvcndhcmQgbGlzdCBpdGVt
IGluc3RhbmNlIHRvIGRlY3JlYXNlIHRoZSByZWZlcmVuY2UgY291bnQKKyAqLworRUFQSSB2b2lk
IGV3a19iYWNrX2ZvcndhcmRfbGlzdF9pdGVtX3VucmVmKEV3a19CYWNrX0ZvcndhcmRfTGlzdF9J
dGVtICppdGVtKTsKKworLyoqCisgKiBSZXR1cm5zIFVSSSBvZiB0aGUgaXRlbS4KKyAqCisgKiBU
aGUgcmV0dXJuZWQgVVJJIG1heSBkaWZmZXIgZnJvbSB0aGUgb3JpZ2luYWwgVVJJIChGb3IgZXhh
bXBsZSBpZiB0aGUgcGFnZSB3YXMgcmVkaXJlY3RlZCkuCisgKgorICogQHNlZSBld2tfYmFja19m
b3J3YXJkX2xpc3RfaXRlbV9vcmlnaW5hbF91cmlfZ2V0KCkKKyAqCisgKiBAcGFyYW0gaXRlbSB0
aGUgYmFjay1mb3J3YXJkIGxpc3QgaXRlbSBpbnN0YW5jZQorICoKKyAqIEByZXR1cm4gdGhlIFVS
SSBvZiB0aGUgQGEgaXRlbSBvciBAYyBOVUxMIGluIGNhc2Ugb2YgZXJyb3IuIFRoaXMgcG9pbnRl
ciBpcworICogICAgICAgICBndWFyYW50ZWVkIHRvIGJlIGVpbmFfc3RyaW5nc2hhcmUsIHNvIHdo
ZW5ldmVyIHBvc3NpYmxlCisgKiAgICAgICAgIHNhdmUgeW91cnNlbGYgc29tZSBjcHUgY3ljbGVz
IGFuZCB1c2UKKyAqICAgICAgICAgZWluYV9zdHJpbmdzaGFyZV9yZWYoKSBpbnN0ZWFkIG9mIGVp
bmFfc3RyaW5nc2hhcmVfYWRkKCkgb3IKKyAqICAgICAgICAgc3RyZHVwKCkKKyAqLworRUFQSSBj
b25zdCBjaGFyICpld2tfYmFja19mb3J3YXJkX2xpc3RfaXRlbV91cmlfZ2V0KGNvbnN0IEV3a19C
YWNrX0ZvcndhcmRfTGlzdF9JdGVtICppdGVtKTsKKworLyoqCisgKiBSZXR1cm5zIHRpdGxlIG9m
IHRoZSBpdGVtLgorICoKKyAqIEBwYXJhbSBpdGVtIHRoZSBiYWNrLWZvcndhcmQgbGlzdCBpdGVt
IGluc3RhbmNlCisgKgorICogQHJldHVybiB0aGUgdGl0bGUgb2YgdGhlIEBhIGl0ZW0gb3IgQGMg
TlVMTCBpbiBjYXNlIG9mIGVycm9yLiBUaGlzIHBvaW50ZXIgaXMKKyAqICAgICAgICAgZ3VhcmFu
dGVlZCB0byBiZSBlaW5hX3N0cmluZ3NoYXJlLCBzbyB3aGVuZXZlciBwb3NzaWJsZQorICogICAg
ICAgICBzYXZlIHlvdXJzZWxmIHNvbWUgY3B1IGN5Y2xlcyBhbmQgdXNlCisgKiAgICAgICAgIGVp
bmFfc3RyaW5nc2hhcmVfcmVmKCkgaW5zdGVhZCBvZiBlaW5hX3N0cmluZ3NoYXJlX2FkZCgpIG9y
CisgKiAgICAgICAgIHN0cmR1cCgpCisgKi8KK0VBUEkgY29uc3QgY2hhciAqZXdrX2JhY2tfZm9y
d2FyZF9saXN0X2l0ZW1fdGl0bGVfZ2V0KGNvbnN0IEV3a19CYWNrX0ZvcndhcmRfTGlzdF9JdGVt
ICppdGVtKTsKKworLyoqCisgKiBSZXR1cm5zIG9yaWdpbmFsIFVSSSBvZiB0aGUgaXRlbS4KKyAq
CisgKiBAc2VlIGV3a19iYWNrX2ZvcndhcmRfbGlzdF9pdGVtX3VyaV9nZXQoKQorICoKKyAqIEBw
YXJhbSBpdGVtIHRoZSBiYWNrLWZvcndhcmQgbGlzdCBpdGVtIGluc3RhbmNlCisgKgorICogQHJl
dHVybiB0aGUgb3JpZ2luYWwgVVJJIG9mIHRoZSBAYSBpdGVtIG9yIEBjIE5VTEwgaW4gY2FzZSBv
ZiBlcnJvci4gVGhpcyBwb2ludGVyIGlzCisgKiAgICAgICAgIGd1YXJhbnRlZWQgdG8gYmUgZWlu
YV9zdHJpbmdzaGFyZSwgc28gd2hlbmV2ZXIgcG9zc2libGUKKyAqICAgICAgICAgc2F2ZSB5b3Vy
c2VsZiBzb21lIGNwdSBjeWNsZXMgYW5kIHVzZQorICogICAgICAgICBlaW5hX3N0cmluZ3NoYXJl
X3JlZigpIGluc3RlYWQgb2YgZWluYV9zdHJpbmdzaGFyZV9hZGQoKSBvcgorICogICAgICAgICBz
dHJkdXAoKQorICovCitFQVBJIGNvbnN0IGNoYXIgKmV3a19iYWNrX2ZvcndhcmRfbGlzdF9pdGVt
X29yaWdpbmFsX3VyaV9nZXQoY29uc3QgRXdrX0JhY2tfRm9yd2FyZF9MaXN0X0l0ZW0gKml0ZW0p
OworCisjaWZkZWYgX19jcGx1c3BsdXMKK30KKyNlbmRpZgorI2VuZGlmIC8vIGV3a19iYWNrX2Zv
cndhcmRfbGlzdF9pdGVtX2gKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9B
UEkvZWZsL2V3a19iYWNrX2ZvcndhcmRfbGlzdF9pdGVtX3ByaXZhdGUuaCBiL1NvdXJjZS9XZWJL
aXQyL1VJUHJvY2Vzcy9BUEkvZWZsL2V3a19iYWNrX2ZvcndhcmRfbGlzdF9pdGVtX3ByaXZhdGUu
aApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44YzJjNjg0Ci0tLSAvZGV2L251
bGwKKysrIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9lZmwvZXdrX2JhY2tfZm9yd2Fy
ZF9saXN0X2l0ZW1fcHJpdmF0ZS5oCkBAIC0wLDAgKzEsMzUgQEAKKy8qCisgKiBDb3B5cmlnaHQg
KEMpIDIwMTIgSW50ZWwgQ29ycG9yYXRpb24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICog
UmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBv
ciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0
aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlv
bnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAg
bm90aWNlLCB0aGlzIGl0ZW0gb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNl
IHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBpdGVtIG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRp
b24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24u
CisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMg
Q09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FS
UkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBX
QVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFS
CisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMu
IE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJF
Q1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwg
REFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisg
KiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJP
RklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9O
IEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNU
IExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQor
ICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVW
RU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICov
CisKKyNpZm5kZWYgZXdrX2JhY2tfZm9yd2FyZF9saXN0X2l0ZW1fcHJpdmF0ZV9oCisjZGVmaW5l
IGV3a19iYWNrX2ZvcndhcmRfbGlzdF9pdGVtX3ByaXZhdGVfaAorCisjaW5jbHVkZSA8V2ViS2l0
Mi9XS0Jhc2UuaD4KKwordHlwZWRlZiBzdHJ1Y3QgX0V3a19CYWNrX0ZvcndhcmRfTGlzdF9JdGVt
IEV3a19CYWNrX0ZvcndhcmRfTGlzdF9JdGVtOworCitFd2tfQmFja19Gb3J3YXJkX0xpc3RfSXRl
bSogZXdrX2JhY2tfZm9yd2FyZF9saXN0X2l0ZW1fbmV3KFdLQmFja0ZvcndhcmRMaXN0SXRlbVJl
ZiB3a0JhY2tGb3J3YXJkTGlzdEl0ZW1SZWYpOworCisjZW5kaWYgLy8gZXdrX2JhY2tfZm9yd2Fy
ZF9saXN0X3ByaXZhdGVfaApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQ
SS9lZmwvZXdrX2JhY2tfZm9yd2FyZF9saXN0X3ByaXZhdGUuaCBiL1NvdXJjZS9XZWJLaXQyL1VJ
UHJvY2Vzcy9BUEkvZWZsL2V3a19iYWNrX2ZvcndhcmRfbGlzdF9wcml2YXRlLmgKbmV3IGZpbGUg
bW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTkyYTRmNAotLS0gL2Rldi9udWxsCisrKyBiL1Nv
dXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZWZsL2V3a19iYWNrX2ZvcndhcmRfbGlzdF9wcml2
YXRlLmgKQEAgLTAsMCArMSwzNyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMiBJbnRlbCBD
b3Jwb3JhdGlvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBh
bmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1v
ZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29u
ZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29k
ZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRp
c3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHly
aWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIg
bWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNP
RlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBB
UyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVS
Q0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJF
IERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJV
VE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwg
U1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09P
RFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVT
UworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBM
SUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBU
T1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFO
WSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9G
CisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2lmbmRlZiBld2tf
YmFja19mb3J3YXJkX2xpc3RfcHJpdmF0ZV9oCisjZGVmaW5lIGV3a19iYWNrX2ZvcndhcmRfbGlz
dF9wcml2YXRlX2gKKworI2luY2x1ZGUgPFdlYktpdDIvV0tCYXNlLmg+CisKK3R5cGVkZWYgc3Ry
dWN0IF9Fd2tfQmFja19Gb3J3YXJkX0xpc3QgRXdrX0JhY2tfRm9yd2FyZF9MaXN0OworCit2b2lk
IGV3a19iYWNrX2ZvcndhcmRfbGlzdF9jaGFuZ2VkKEV3a19CYWNrX0ZvcndhcmRfTGlzdCosIFdL
QmFja0ZvcndhcmRMaXN0SXRlbVJlZiB3a0FkZGVkSXRlbSwgV0tBcnJheVJlZiB3a1JlbW92ZWRJ
dGVtcyk7CitFd2tfQmFja19Gb3J3YXJkX0xpc3QqIGV3a19iYWNrX2ZvcndhcmRfbGlzdF9uZXco
V0tCYWNrRm9yd2FyZExpc3RSZWYgd2tCYWNrRm9yd2FyZExpc3RSZWYpOwordm9pZCBld2tfYmFj
a19mb3J3YXJkX2xpc3RfZnJlZShFd2tfQmFja19Gb3J3YXJkX0xpc3QqIGxpc3QpOworCisjZW5k
aWYgLy8gZXdrX2JhY2tfZm9yd2FyZF9saXN0X3ByaXZhdGVfaApkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYktpdDIvVUlQcm9jZXNzL0FQSS9lZmwvZXdrX3ZpZXcuY3BwIGIvU291cmNlL1dlYktpdDIv
VUlQcm9jZXNzL0FQSS9lZmwvZXdrX3ZpZXcuY3BwCmluZGV4IDhiYzExMjEuLmM4Mjk4NGEgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZWZsL2V3a192aWV3LmNwcAor
KysgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2VmbC9ld2tfdmlldy5jcHAKQEAgLTI5
LDYgKzI5LDcgQEAKICNpbmNsdWRlICJXS1JldGFpblB0ci5oIgogI2luY2x1ZGUgIldLU3RyaW5n
LmgiCiAjaW5jbHVkZSAiV0tVUkwuaCIKKyNpbmNsdWRlICJld2tfYmFja19mb3J3YXJkX2xpc3Rf
cHJpdmF0ZS5oIgogI2luY2x1ZGUgImV3a19jb250ZXh0LmgiCiAjaW5jbHVkZSAiZXdrX2NvbnRl
eHRfcHJpdmF0ZS5oIgogI2luY2x1ZGUgImV3a19pbnRlbnRfcHJpdmF0ZS5oIgpAQCAtNjgsNiAr
NjksNyBAQCBzdHJ1Y3QgX0V3a19WaWV3X1ByaXZhdGVfRGF0YSB7CiAgICAgY29uc3QgY2hhciog
Y3Vyc29yR3JvdXA7CiAgICAgRXZhc19PYmplY3QqIGN1cnNvck9iamVjdDsKICAgICBMb2FkaW5n
UmVzb3VyY2VzTWFwIGxvYWRpbmdSZXNvdXJjZXNNYXA7CisgICAgRXdrX0JhY2tfRm9yd2FyZF9M
aXN0KiBiYWNrRm9yd2FyZExpc3Q7CiAKICNpZmRlZiBIQVZFX0VDT1JFX1gKICAgICBib29sIGlz
VXNpbmdFY29yZVg7CkBAIC04Niw2ICs4OCw3IEBAIHN0cnVjdCBfRXdrX1ZpZXdfUHJpdmF0ZV9E
YXRhIHsKICAgICAgICAgLCBjdXN0b21FbmNvZGluZygwKQogICAgICAgICAsIGN1cnNvckdyb3Vw
KDApCiAgICAgICAgICwgY3Vyc29yT2JqZWN0KDApCisgICAgICAgICwgYmFja0ZvcndhcmRMaXN0
KDApCiAjaWZkZWYgSEFWRV9FQ09SRV9YCiAgICAgICAgICwgaXNVc2luZ0Vjb3JlWChmYWxzZSkK
ICNlbmRpZgpAQCAtMTA2LDYgKzEwOSw4IEBAIHN0cnVjdCBfRXdrX1ZpZXdfUHJpdmF0ZV9EYXRh
IHsKIAogICAgICAgICBpZiAoY3Vyc29yT2JqZWN0KQogICAgICAgICAgICAgZXZhc19vYmplY3Rf
ZGVsKGN1cnNvck9iamVjdCk7CisKKyAgICAgICAgZXdrX2JhY2tfZm9yd2FyZF9saXN0X2ZyZWUo
YmFja0ZvcndhcmRMaXN0KTsKICAgICB9CiB9OwogCkBAIC02NjIsNiArNjY3LDcgQEAgRXZhc19P
YmplY3QqIGV3a192aWV3X2Jhc2VfYWRkKEV2YXMqIGNhbnZhcywgV0tDb250ZXh0UmVmIGNvbnRl
eHRSZWYsIFdLUGFnZUdyb3UKICAgICB9CiAKICAgICBwcml2LT5wYWdlQ2xpZW50ID0gUGFnZUNs
aWVudEltcGw6OmNyZWF0ZSh0b0ltcGwoY29udGV4dFJlZiksIHRvSW1wbChwYWdlR3JvdXBSZWYp
LCBld2tWaWV3KTsKKyAgICBwcml2LT5iYWNrRm9yd2FyZExpc3QgPSBld2tfYmFja19mb3J3YXJk
X2xpc3RfbmV3KHRvQVBJKHByaXYtPnBhZ2VDbGllbnQtPnBhZ2UoKS0+YmFja0ZvcndhcmRMaXN0
KCkpKTsKIAogICAgIFdLUGFnZVJlZiB3a1BhZ2UgPSB0b0FQSShwcml2LT5wYWdlQ2xpZW50LT5w
YWdlKCkpOwogICAgIGV3a192aWV3X2Zvcm1fY2xpZW50X2F0dGFjaCh3a1BhZ2UsIGV3a1ZpZXcp
OwpAQCAtMTEzMCw2ICsxMTM2LDE0IEBAIEVpbmFfQm9vbCBld2tfdmlld19mb3J3YXJkX3Bvc3Np
YmxlKEV2YXNfT2JqZWN0KiBld2tWaWV3KQogICAgIHJldHVybiBwcml2LT5wYWdlQ2xpZW50LT5w
YWdlKCktPmNhbkdvRm9yd2FyZCgpOwogfQogCitFd2tfQmFja19Gb3J3YXJkX0xpc3QqIGV3a192
aWV3X2JhY2tfZm9yd2FyZF9saXN0X2dldChjb25zdCBFdmFzX09iamVjdCogZXdrVmlldykKK3sK
KyAgICBFV0tfVklFV19TRF9HRVRfT1JfUkVUVVJOKGV3a1ZpZXcsIHNtYXJ0RGF0YSwgMCk7Cisg
ICAgRVdLX1ZJRVdfUFJJVl9HRVRfT1JfUkVUVVJOKHNtYXJ0RGF0YSwgcHJpdiwgMCk7CisKKyAg
ICByZXR1cm4gcHJpdi0+YmFja0ZvcndhcmRMaXN0OworfQorCiB2b2lkIGV3a192aWV3X2ltYWdl
X2RhdGFfc2V0KEV2YXNfT2JqZWN0KiBld2tWaWV3LCB2b2lkKiBpbWFnZURhdGEsIGNvbnN0IElu
dFNpemUmIHNpemUpCiB7CiAgICAgRVdLX1ZJRVdfU0RfR0VUX09SX1JFVFVSTihld2tWaWV3LCBz
bWFydERhdGEpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9lZmwv
ZXdrX3ZpZXcuaCBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZWZsL2V3a192aWV3LmgK
aW5kZXggM2IwMzQxOS4uNjA3ZDAwZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvVUlQcm9j
ZXNzL0FQSS9lZmwvZXdrX3ZpZXcuaAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJ
L2VmbC9ld2tfdmlldy5oCkBAIC02OCw2ICs2OCw3IEBACiAjaWZuZGVmIGV3a192aWV3X2gKICNk
ZWZpbmUgZXdrX3ZpZXdfaAogCisjaW5jbHVkZSAiZXdrX2JhY2tfZm9yd2FyZF9saXN0LmgiCiAj
aW5jbHVkZSAiZXdrX2NvbnRleHQuaCIKICNpbmNsdWRlICJld2tfZG93bmxvYWRfam9iLmgiCiAj
aW5jbHVkZSAiZXdrX2ludGVudC5oIgpAQCAtMzM4LDYgKzMzOSwyMSBAQCBFQVBJIEVpbmFfQm9v
bCAgICBld2tfdmlld19iYWNrX3Bvc3NpYmxlKEV2YXNfT2JqZWN0ICpvKTsKIEVBUEkgRWluYV9C
b29sICAgIGV3a192aWV3X2ZvcndhcmRfcG9zc2libGUoRXZhc19PYmplY3QgKm8pOwogCiAvKioK
KyAqIEdldHMgdGhlIGJhY2stZm9yd2FyZCBsaXN0IGFzc29jaWF0ZWQgd2l0aCB0aGlzIHZpZXcu
CisgKgorICogVGhlIHJldHVybmVkIGluc3RhbmNlIGlzIHVuaXF1ZSBmb3IgdGhpcyB2aWV3IGFu
ZCB0aHVzIG11bHRpcGxlIGNhbGxzCisgKiB0byB0aGlzIGZ1bmN0aW9uIHdpdGggdGhlIHNhbWUg
dmlldyBhcyBwYXJhbWV0ZXIgcmV0dXJucyB0aGUgc2FtZQorICogaGFuZGxlLiBUaGlzIGhhbmRs
ZSBpcyBhbGl2ZSB3aGlsZSB2aWV3IGlzIGFsaXZlLCB0aHVzIG9uZQorICogbWlnaHQgd2FudCB0
byBsaXN0ZW4gZm9yIEVWQVNfQ0FMTEJBQ0tfREVMIG9uIGdpdmVuIHZpZXcKKyAqIChAYSBvKSB0
byBrbm93IHdoZW4gdG8gc3RvcCB1c2luZyByZXR1cm5lZCBoYW5kbGUuCisgKgorICogQHBhcmFt
IG8gdmlldyBvYmplY3QgdG8gZ2V0IG5hdmlnYXRpb24gYmFjay1mb3J3YXJkIGxpc3QKKyAqCisg
KiBAcmV0dXJuIHRoZSBiYWNrLWZvcndhcmQgbGlzdCBpbnN0YW5jZSBoYW5kbGUgYXNzb2NpYXRl
ZCB3aXRoIHRoaXMgdmlldworICovCitFQVBJIEV3a19CYWNrX0ZvcndhcmRfTGlzdCAqZXdrX3Zp
ZXdfYmFja19mb3J3YXJkX2xpc3RfZ2V0KGNvbnN0IEV2YXNfT2JqZWN0ICpvKTsKKworLyoqCiAg
KiBHZXRzIHRoZSBjdXJyZW50IHRpdGxlIG9mIHRoZSBtYWluIGZyYW1lLgogICoKICAqIEl0IHJl
dHVybnMgYW4gaW50ZXJuYWwgc3RyaW5nIGFuZCBzaG91bGQgbm90CmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2VmbC9ld2tfdmlld19sb2FkZXJfY2xpZW50LmNwcCBi
L1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZWZsL2V3a192aWV3X2xvYWRlcl9jbGllbnQu
Y3BwCmluZGV4IGNjOGIxMjAuLmU3N2Q2MTMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1VJ
UHJvY2Vzcy9BUEkvZWZsL2V3a192aWV3X2xvYWRlcl9jbGllbnQuY3BwCisrKyBiL1NvdXJjZS9X
ZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZWZsL2V3a192aWV3X2xvYWRlcl9jbGllbnQuY3BwCkBAIC0y
NiwxMCArMjYsMTIgQEAKICNpbmNsdWRlICJjb25maWcuaCIKIAogI2luY2x1ZGUgIldLRnJhbWUu
aCIKKyNpbmNsdWRlICJld2tfYmFja19mb3J3YXJkX2xpc3RfcHJpdmF0ZS5oIgogI2luY2x1ZGUg
ImV3a19pbnRlbnQuaCIKICNpbmNsdWRlICJld2tfaW50ZW50X3ByaXZhdGUuaCIKICNpbmNsdWRl
ICJld2tfaW50ZW50X3NlcnZpY2UuaCIKICNpbmNsdWRlICJld2tfaW50ZW50X3NlcnZpY2VfcHJp
dmF0ZS5oIgorI2luY2x1ZGUgImV3a192aWV3LmgiCiAjaW5jbHVkZSAiZXdrX3ZpZXdfbG9hZGVy
X2NsaWVudF9wcml2YXRlLmgiCiAjaW5jbHVkZSAiZXdrX3ZpZXdfcHJpdmF0ZS5oIgogI2luY2x1
ZGUgImV3a193ZWJfZXJyb3IuaCIKQEAgLTEyMyw2ICsxMjUsMTQgQEAgc3RhdGljIHZvaWQgZGlk
RmFpbFByb3Zpc2lvbmFsTG9hZFdpdGhFcnJvckZvckZyYW1lKFdLUGFnZVJlZiBwYWdlLCBXS0Zy
YW1lUmVmIGYKICAgICBld2tfd2ViX2Vycm9yX2ZyZWUoZXdrRXJyb3IpOwogfQogCitzdGF0aWMg
dm9pZCBkaWRDaGFuZ2VCYWNrRm9yd2FyZExpc3QoV0tQYWdlUmVmIHBhZ2UsIFdLQmFja0Zvcndh
cmRMaXN0SXRlbVJlZiBhZGRlZEl0ZW0sIFdLQXJyYXlSZWYgcmVtb3ZlZEl0ZW1zLCBjb25zdCB2
b2lkKiBjbGllbnRJbmZvKQoreworICAgIEV2YXNfT2JqZWN0KiBld2tWaWV3ID0gc3RhdGljX2Nh
c3Q8RXZhc19PYmplY3QqPihjb25zdF9jYXN0PHZvaWQqPihjbGllbnRJbmZvKSk7CisgICAgQVNT
RVJUKGV3a1ZpZXcpOworCisgICAgZXdrX2JhY2tfZm9yd2FyZF9saXN0X2NoYW5nZWQoZXdrX3Zp
ZXdfYmFja19mb3J3YXJkX2xpc3RfZ2V0KGV3a1ZpZXcpLCBhZGRlZEl0ZW0sIHJlbW92ZWRJdGVt
cyk7Cit9CisKIHZvaWQgZXdrX3ZpZXdfbG9hZGVyX2NsaWVudF9hdHRhY2goV0tQYWdlUmVmIHBh
Z2VSZWYsIEV2YXNfT2JqZWN0KiBld2tWaWV3KQogewogICAgIFdLUGFnZUxvYWRlckNsaWVudCBs
b2FkQ2xpZW50OwpAQCAtMTQ0LDUgKzE1NCw2IEBAIHZvaWQgZXdrX3ZpZXdfbG9hZGVyX2NsaWVu
dF9hdHRhY2goV0tQYWdlUmVmIHBhZ2VSZWYsIEV2YXNfT2JqZWN0KiBld2tWaWV3KQogICAgIGxv
YWRDbGllbnQuZGlkU3RhcnRQcm92aXNpb25hbExvYWRGb3JGcmFtZSA9IGRpZFN0YXJ0UHJvdmlz
aW9uYWxMb2FkRm9yRnJhbWU7CiAgICAgbG9hZENsaWVudC5kaWRSZWNlaXZlU2VydmVyUmVkaXJl
Y3RGb3JQcm92aXNpb25hbExvYWRGb3JGcmFtZSA9IGRpZFJlY2VpdmVTZXJ2ZXJSZWRpcmVjdEZv
clByb3Zpc2lvbmFsTG9hZEZvckZyYW1lOwogICAgIGxvYWRDbGllbnQuZGlkRmFpbFByb3Zpc2lv
bmFsTG9hZFdpdGhFcnJvckZvckZyYW1lID0gZGlkRmFpbFByb3Zpc2lvbmFsTG9hZFdpdGhFcnJv
ckZvckZyYW1lOworICAgIGxvYWRDbGllbnQuZGlkQ2hhbmdlQmFja0ZvcndhcmRMaXN0ID0gZGlk
Q2hhbmdlQmFja0ZvcndhcmRMaXN0OwogICAgIFdLUGFnZVNldFBhZ2VMb2FkZXJDbGllbnQocGFn
ZVJlZiwgJmxvYWRDbGllbnQpOwogfQo=
</data>
<flag name="review"
          id="166056"
          type_id="1"
          status="-"
          setter="kenneth"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>156617</attachid>
            <date>2012-08-06 01:22:57 -0700</date>
            <delta_ts>2012-08-06 04:13:17 -0700</delta_ts>
            <desc>patch v6</desc>
            <filename>bug92345_v6</filename>
            <type>text/plain</type>
            <size>32757</size>
            <attacher name="Mikhail Pozdnyakov">mikhail.pozdnyakov</attacher>
            
              <data encoding="base64">Y29tbWl0IDcyZGFhYjZhNWUxYWU3ZTY0ZGZmYWQwMTI0OTM1MzFjZWUxNjM3OTAKQXV0aG9yOiBN
aWtoYWlsIFBvemRueWFrb3YgPG1pa2hhaWwucG96ZG55YWtvdkBpbnRlbC5jb20+CkRhdGU6ICAg
RnJpIEp1bCAyNyAxMzowOToyOSAyMDEyICswMzAwCgogICAgYnVnOTIzNDUKCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViS2l0Mi9DaGFuZ2VMb2cgYi9Tb3VyY2UvV2ViS2l0Mi9DaGFuZ2VMb2cKaW5k
ZXggNTFjMDdjZS4uMGI4M2EyYyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvQ2hhbmdlTG9n
CisrKyBiL1NvdXJjZS9XZWJLaXQyL0NoYW5nZUxvZwpAQCAtMSwzICsxLDUyIEBACisyMDEyLTA3
LTI3ICBNaWtoYWlsIFBvemRueWFrb3YgIDxtaWtoYWlsLnBvemRueWFrb3ZAaW50ZWwuY29tPgor
CisgICAgICAgIFtFRkxdW1dLMl0gQWRkIGJhY2sgZm9yd2FyZCBsaXN0IEFQSQorICAgICAgICBo
dHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9OTIzNDUKKworICAgICAgICBS
ZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBBZGRlZCBuZXcgQmFjayBGb3J3
YXJkIGxpc3QgQVBJIHRvIEVGTCBXSzIuIEV3a19CYWNrX0ZvcndhcmRfTGlzdCBhbmQKKyAgICAg
ICAgRXdrX0JhY2tfRm9yd2FyZF9MaXN0X0l0ZW0gc3RydWN0dXJlcyB3ZXJlIGFkZGVkLiBUaGUg
bmV3IEFQSSBpcworICAgICAgICBtb3N0bHkgdGhlIHNhbWUgYXMgb25lIGZyb20gVUlQcm9jZXNz
L0FQSS9DL3sgV0tCYWNrRm9yd2FyZExpc3QuaCwgV0tCYWNrRm9yd2FyZExpc3RJdGVtLmggfS4K
KworICAgICAgICAqIFBsYXRmb3JtRWZsLmNtYWtlOgorICAgICAgICAqIFVJUHJvY2Vzcy9BUEkv
ZWZsL2V3a19iYWNrX2ZvcndhcmRfbGlzdC5jcHA6IEFkZGVkLgorICAgICAgICAoX0V3a19CYWNr
X0ZvcndhcmRfTGlzdCk6CisgICAgICAgIChfRXdrX0JhY2tfRm9yd2FyZF9MaXN0OjpfRXdrX0Jh
Y2tfRm9yd2FyZF9MaXN0KToKKyAgICAgICAgKGdldE9yQ3JlYXRlSXRlbSk6CisgICAgICAgICh3
ZWJraXRfYmFja19mb3J3YXJkX2xpc3RfY3VycmVudF9pdGVtX2dldCk6CisgICAgICAgICh3ZWJr
aXRfYmFja19mb3J3YXJkX2xpc3RfYmFja19pdGVtX2dldCk6CisgICAgICAgICh3ZWJraXRfYmFj
a19mb3J3YXJkX2xpc3RfZm9yd2FyZF9pdGVtX2dldCk6CisgICAgICAgICh3ZWJraXRfYmFja19m
b3J3YXJkX2xpc3RfaXRlbV9hdF9pbmRleF9nZXQpOgorICAgICAgICAod2Via2l0X2JhY2tfZm9y
d2FyZF9saXN0X2xlbmd0aF9nZXQpOgorICAgICAgICAoZXdrX2JhY2tfZm9yd2FyZF9saXN0X2No
YW5nZWQpOgorICAgICAgICAoZXdrX2JhY2tfZm9yd2FyZF9saXN0X25ldyk6CisgICAgICAgIChl
d2tfYmFja19mb3J3YXJkX2xpc3RfZnJlZSk6CisgICAgICAgICogVUlQcm9jZXNzL0FQSS9lZmwv
ZXdrX2JhY2tfZm9yd2FyZF9saXN0Lmg6IEFkZGVkLgorICAgICAgICAqIFVJUHJvY2Vzcy9BUEkv
ZWZsL2V3a19iYWNrX2ZvcndhcmRfbGlzdF9pdGVtLmNwcDogQWRkZWQuCisgICAgICAgIChnZXRJ
dGVtUHJvcGVydHkpOgorICAgICAgICAoX0V3a19CYWNrX0ZvcndhcmRfTGlzdF9JdGVtKToKKyAg
ICAgICAgKF9Fd2tfQmFja19Gb3J3YXJkX0xpc3RfSXRlbTo6X0V3a19CYWNrX0ZvcndhcmRfTGlz
dF9JdGVtKToKKyAgICAgICAgKF9Fd2tfQmFja19Gb3J3YXJkX0xpc3RfSXRlbTo6fl9Fd2tfQmFj
a19Gb3J3YXJkX0xpc3RfSXRlbSk6CisgICAgICAgIChld2tfYmFja19mb3J3YXJkX2xpc3RfaXRl
bV9yZWYpOgorICAgICAgICAoZXdrX2JhY2tfZm9yd2FyZF9saXN0X2l0ZW1fdW5yZWYpOgorICAg
ICAgICAoZXdrX2JhY2tfZm9yd2FyZF9saXN0X2l0ZW1fdXJpX2dldCk6CisgICAgICAgIChld2tf
YmFja19mb3J3YXJkX2xpc3RfaXRlbV90aXRsZV9nZXQpOgorICAgICAgICAoZXdrX2JhY2tfZm9y
d2FyZF9saXN0X2l0ZW1fb3JpZ2luYWxfdXJpX2dldCk6CisgICAgICAgIChld2tfYmFja19mb3J3
YXJkX2xpc3RfaXRlbV9uZXcpOgorICAgICAgICAqIFVJUHJvY2Vzcy9BUEkvZWZsL2V3a19iYWNr
X2ZvcndhcmRfbGlzdF9pdGVtLmg6IEFkZGVkLgorICAgICAgICAqIFVJUHJvY2Vzcy9BUEkvZWZs
L2V3a19iYWNrX2ZvcndhcmRfbGlzdF9pdGVtX3ByaXZhdGUuaDogQWRkZWQuCisgICAgICAgICog
VUlQcm9jZXNzL0FQSS9lZmwvZXdrX2JhY2tfZm9yd2FyZF9saXN0X3ByaXZhdGUuaDogQWRkZWQu
CisgICAgICAgICogVUlQcm9jZXNzL0FQSS9lZmwvZXdrX3ZpZXcuY3BwOgorICAgICAgICAoX0V3
a19WaWV3X1ByaXZhdGVfRGF0YSk6CisgICAgICAgIChfRXdrX1ZpZXdfUHJpdmF0ZV9EYXRhOjpf
RXdrX1ZpZXdfUHJpdmF0ZV9EYXRhKToKKyAgICAgICAgKF9Fd2tfVmlld19Qcml2YXRlX0RhdGE6
On5fRXdrX1ZpZXdfUHJpdmF0ZV9EYXRhKToKKyAgICAgICAgKGV3a192aWV3X2JhY2tfZm9yd2Fy
ZF9saXN0X2dldCk6IE5ldyBmdW5jdGlvbiB0byBnZXQgYmFjay1mb3J3YXJkIGxpc3QuCisgICAg
ICAgICogVUlQcm9jZXNzL0FQSS9lZmwvZXdrX3ZpZXcuaDoKKyAgICAgICAgKiBVSVByb2Nlc3Mv
QVBJL2VmbC9ld2tfdmlld19sb2FkZXJfY2xpZW50LmNwcDoKKyAgICAgICAgKGRpZENoYW5nZUJh
Y2tGb3J3YXJkTGlzdCk6IFRoZSBjYWxsYmFjayBhZGRlZCB0byB1cGRhdGUgYmFjay1mb3J3YXJk
IGxpc3QgaXRlbXMgY2FjaGUuCisgICAgICAgIChld2tfdmlld19sb2FkZXJfY2xpZW50X2F0dGFj
aCk6CisKIDIwMTItMDgtMDUgIEJlbmphbWluIFBvdWxhaW4gIDxicG91bGFpbkBhcHBsZS5jb20+
CiAKICAgICAgICAgQXNzZXJ0IGluIGNoZWNrVmFsaWRpdHkoKSBpbiBoYXNodGFibGUuaCBmcm9t
IFdlYkdlb2xvY2F0aW9uTWFuYWdlcjo6ZGlkRmFpbFRvRGV0ZXJtaW5lUG9zaXRpb24oKSB3aGVu
IGZldGNoaW5nIGh0dHA6Ly9odG1sNWRlbW9zLmNvbS9nZW8KZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJLaXQyL1BsYXRmb3JtRWZsLmNtYWtlIGIvU291cmNlL1dlYktpdDIvUGxhdGZvcm1FZmwuY21h
a2UKaW5kZXggOWJjYmRiMC4uZjdiODQwYiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvUGxh
dGZvcm1FZmwuY21ha2UKKysrIGIvU291cmNlL1dlYktpdDIvUGxhdGZvcm1FZmwuY21ha2UKQEAg
LTQxLDYgKzQxLDggQEAgTElTVChBUFBFTkQgV2ViS2l0Ml9TT1VSQ0VTCiAgICAgVUlQcm9jZXNz
L0FQSS9lZmwvTmV0d29ya0luZm9Qcm92aWRlci5jcHAKICAgICBVSVByb2Nlc3MvQVBJL2VmbC9Q
YWdlQ2xpZW50SW1wbC5jcHAKICAgICBVSVByb2Nlc3MvQVBJL2VmbC9WaWJyYXRpb25Qcm92aWRl
ci5jcHAKKyAgICBVSVByb2Nlc3MvQVBJL2VmbC9ld2tfYmFja19mb3J3YXJkX2xpc3QuY3BwCisg
ICAgVUlQcm9jZXNzL0FQSS9lZmwvZXdrX2JhY2tfZm9yd2FyZF9saXN0X2l0ZW0uY3BwCiAgICAg
VUlQcm9jZXNzL0FQSS9lZmwvZXdrX2NvbnRleHQuY3BwCiAgICAgVUlQcm9jZXNzL0FQSS9lZmwv
ZXdrX2NvbnRleHRfZG93bmxvYWRfY2xpZW50LmNwcAogICAgIFVJUHJvY2Vzcy9BUEkvZWZsL2V3
a19jb250ZXh0X3JlcXVlc3RfbWFuYWdlcl9jbGllbnQuY3BwCkBAIC0xODcsNiArMTg5LDggQEAg
U0VUKEZvcndhcmRpbmdOZXR3b3JrSGVhZGVyc19OQU1FIGZvcndhcmRpbmctaGVhZGVyU291cCkK
IENPTkZJR1VSRV9GSUxFKGVmbC9ld2Via2l0Mi5wYy5pbiAke0NNQUtFX0JJTkFSWV9ESVJ9L1dl
YktpdDIvZWZsL2V3ZWJraXQyLnBjIEBPTkxZKQogU0VUIChFV2ViS2l0Ml9IRUFERVJTCiAgICAg
IiR7Q01BS0VfQ1VSUkVOVF9TT1VSQ0VfRElSfS9VSVByb2Nlc3MvQVBJL2VmbC9FV2ViS2l0Mi5o
IgorICAgICIke0NNQUtFX0NVUlJFTlRfU09VUkNFX0RJUn0vVUlQcm9jZXNzL0FQSS9lZmwvZXdr
X2JhY2tfZm9yd2FyZF9saXN0LmgiCisgICAgIiR7Q01BS0VfQ1VSUkVOVF9TT1VSQ0VfRElSfS9V
SVByb2Nlc3MvQVBJL2VmbC9ld2tfYmFja19mb3J3YXJkX2xpc3RfaXRlbS5oIgogICAgICIke0NN
QUtFX0NVUlJFTlRfU09VUkNFX0RJUn0vVUlQcm9jZXNzL0FQSS9lZmwvZXdrX2NvbnRleHQuaCIK
ICAgICAiJHtDTUFLRV9DVVJSRU5UX1NPVVJDRV9ESVJ9L1VJUHJvY2Vzcy9BUEkvZWZsL2V3a19j
b29raWVfbWFuYWdlci5oIgogICAgICIke0NNQUtFX0NVUlJFTlRfU09VUkNFX0RJUn0vVUlQcm9j
ZXNzL0FQSS9lZmwvZXdrX2Rvd25sb2FkX2pvYi5oIgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktp
dDIvVUlQcm9jZXNzL0FQSS9lZmwvRVdlYktpdDIuaCBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vz
cy9BUEkvZWZsL0VXZWJLaXQyLmgKaW5kZXggOWEwNTJkYS4uZDk4MDIzZCAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9lZmwvRVdlYktpdDIuaAorKysgYi9Tb3VyY2Uv
V2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2VmbC9FV2ViS2l0Mi5oCkBAIC0yOCw2ICsyOCw4IEBACiAj
aWZuZGVmIEVXZWJLaXQyX2gKICNkZWZpbmUgRVdlYktpdDJfaAogCisjaW5jbHVkZSAiZXdrX2Jh
Y2tfZm9yd2FyZF9saXN0LmgiCisjaW5jbHVkZSAiZXdrX2JhY2tfZm9yd2FyZF9saXN0X2l0ZW0u
aCIKICNpbmNsdWRlICJld2tfY29udGV4dC5oIgogI2luY2x1ZGUgImV3a19jb29raWVfbWFuYWdl
ci5oIgogI2luY2x1ZGUgImV3a19kb3dubG9hZF9qb2IuaCIKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZWZsL2V3a19iYWNrX2ZvcndhcmRfbGlzdC5jcHAgYi9Tb3Vy
Y2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2VmbC9ld2tfYmFja19mb3J3YXJkX2xpc3QuY3BwCm5l
dyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmNmYzI3OTEKLS0tIC9kZXYvbnVsbAor
KysgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2VmbC9ld2tfYmFja19mb3J3YXJkX2xp
c3QuY3BwCkBAIC0wLDAgKzEsMTYxIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEyIEludGVs
IENvcnBvcmF0aW9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9u
IGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICog
bW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBj
b25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBj
b2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJl
ZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29w
eXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhl
ciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMg
U09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBg
YEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBN
RVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBB
UkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJ
QlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFM
LCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBH
T09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lO
RVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9G
IExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9S
IFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4g
QU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQg
T0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAi
Y29uZmlnLmgiCisjaW5jbHVkZSAiZXdrX2JhY2tfZm9yd2FyZF9saXN0LmgiCisKKyNpbmNsdWRl
ICJXS0FQSUNhc3QuaCIKKyNpbmNsdWRlICJXS0FycmF5LmgiCisjaW5jbHVkZSAiV0tCYWNrRm9y
d2FyZExpc3QuaCIKKyNpbmNsdWRlICJXS1JldGFpblB0ci5oIgorI2luY2x1ZGUgImV3a19iYWNr
X2ZvcndhcmRfbGlzdF9pdGVtX3ByaXZhdGUuaCIKKyNpbmNsdWRlIDx3dGYvdGV4dC9DU3RyaW5n
Lmg+CisKK3VzaW5nIG5hbWVzcGFjZSBXZWJLaXQ7CisKK3R5cGVkZWYgSGFzaE1hcDxXS0JhY2tG
b3J3YXJkTGlzdEl0ZW1SZWYsIEV3a19CYWNrX0ZvcndhcmRfTGlzdF9JdGVtKj4gSXRlbXNNYXA7
CisKKy8qKgorICogXHN0cnVjdCAgX0V3a19CYWNrX0ZvcndhcmRfTGlzdAorICogQGJyaWVmICAg
Q29udGFpbnMgdGhlIEJhY2sgRm9yd2FyZCBMaXN0IGRhdGEuCisgKi8KK3N0cnVjdCBfRXdrX0Jh
Y2tfRm9yd2FyZF9MaXN0IHsKKyAgICBXS1JldGFpblB0cjxXS0JhY2tGb3J3YXJkTGlzdFJlZj4g
d2tMaXN0OworICAgIG11dGFibGUgSXRlbXNNYXAgaXRlbXNDYWNoZTsKKworICAgIF9Fd2tfQmFj
a19Gb3J3YXJkX0xpc3QoV0tCYWNrRm9yd2FyZExpc3RSZWYgbGlzdFJlZikKKyAgICAgICAgOiB3
a0xpc3QobGlzdFJlZikKKyAgICB7IH0KKworICAgIH5fRXdrX0JhY2tfRm9yd2FyZF9MaXN0KCkK
KyAgICB7CisgICAgICAgIEl0ZW1zTWFwOjppdGVyYXRvciBpdCA9IGl0ZW1zQ2FjaGUuYmVnaW4o
KTsKKyAgICAgICAgSXRlbXNNYXA6Oml0ZXJhdG9yIGVuZCA9IGl0ZW1zQ2FjaGUuZW5kKCk7Cisg
ICAgICAgIGZvciAoOyBpdCAhPSBlbmQ7ICsraXQpCisgICAgICAgICAgICBld2tfYmFja19mb3J3
YXJkX2xpc3RfaXRlbV91bnJlZihpdC0+c2Vjb25kKTsKKyAgICB9Cit9OworCisjZGVmaW5lIEVX
S19CQUNLX0ZPUldBUkRfTElTVF9XS19HRVRfT1JfUkVUVVJOKGxpc3QsIHdrTGlzdF8sIC4uLikg
IFwKKyAgICBpZiAoIShsaXN0KSkgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIFwKKyAgICAgICAgRUlOQV9MT0dfQ1JJVCgibGlzdCBpcyBOVUxMLiIpOyAgICAg
ICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgcmV0dXJuIF9fVkFfQVJHU19fOyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICB9ICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICBpZiAoIShsaXN0KS0+
d2tMaXN0KSB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAg
RUlOQV9MT0dfQ1JJVCgibGlzdC0+d2tMaXN0IGlzIE5VTEwuIik7ICAgICAgICAgICAgICAgIFwK
KyAgICAgICAgcmV0dXJuIF9fVkFfQVJHU19fOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIFwKKyAgICB9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIFwKKyAgICBXS0JhY2tGb3J3YXJkTGlzdFJlZiB3a0xpc3RfID0gKGxp
c3QpLT53a0xpc3QuZ2V0KCkKKworCitzdGF0aWMgaW5saW5lIEV3a19CYWNrX0ZvcndhcmRfTGlz
dF9JdGVtKiBhZGRJdGVtVG9XcmFwcGVyQ2FjaGUoY29uc3QgRXdrX0JhY2tfRm9yd2FyZF9MaXN0
KiBsaXN0LCBXS0JhY2tGb3J3YXJkTGlzdEl0ZW1SZWYgd2tJdGVtKQoreworICAgIEVJTkFfU0FG
RVRZX09OX05VTExfUkVUVVJOX1ZBTChsaXN0LCAwKTsKKyAgICBFSU5BX1NBRkVUWV9PTl9OVUxM
X1JFVFVSTl9WQUwod2tJdGVtLCAwKTsKKworICAgIEV3a19CYWNrX0ZvcndhcmRfTGlzdF9JdGVt
KiBpdGVtID0gbGlzdC0+aXRlbXNDYWNoZS5nZXQod2tJdGVtKTsKKyAgICBpZiAoIWl0ZW0pIHsK
KyAgICAgICAgaXRlbSA9IGV3a19iYWNrX2ZvcndhcmRfbGlzdF9pdGVtX25ldyh3a0l0ZW0pOwor
ICAgICAgICBsaXN0LT5pdGVtc0NhY2hlLnNldCh3a0l0ZW0sIGl0ZW0pOworICAgIH0KKworICAg
IHJldHVybiBpdGVtOworfQorCitFd2tfQmFja19Gb3J3YXJkX0xpc3RfSXRlbSogZXdrX2JhY2tf
Zm9yd2FyZF9saXN0X2N1cnJlbnRfaXRlbV9nZXQoY29uc3QgRXdrX0JhY2tfRm9yd2FyZF9MaXN0
KiBsaXN0KQoreworICAgIEVXS19CQUNLX0ZPUldBUkRfTElTVF9XS19HRVRfT1JfUkVUVVJOKGxp
c3QsIHdrTGlzdCwgMCk7CisKKyAgICByZXR1cm4gYWRkSXRlbVRvV3JhcHBlckNhY2hlKGxpc3Qs
IFdLQmFja0ZvcndhcmRMaXN0R2V0Q3VycmVudEl0ZW0od2tMaXN0KSk7Cit9CisKK0V3a19CYWNr
X0ZvcndhcmRfTGlzdF9JdGVtKiBld2tfYmFja19mb3J3YXJkX2xpc3RfcHJldmlvdXNfaXRlbV9n
ZXQoY29uc3QgRXdrX0JhY2tfRm9yd2FyZF9MaXN0KiBsaXN0KQoreworICAgIEVXS19CQUNLX0ZP
UldBUkRfTElTVF9XS19HRVRfT1JfUkVUVVJOKGxpc3QsIHdrTGlzdCwgMCk7CisKKyAgICByZXR1
cm4gYWRkSXRlbVRvV3JhcHBlckNhY2hlKGxpc3QsIFdLQmFja0ZvcndhcmRMaXN0R2V0QmFja0l0
ZW0od2tMaXN0KSk7Cit9CisKK0V3a19CYWNrX0ZvcndhcmRfTGlzdF9JdGVtKiBld2tfYmFja19m
b3J3YXJkX2xpc3RfbmV4dF9pdGVtX2dldChjb25zdCBFd2tfQmFja19Gb3J3YXJkX0xpc3QqIGxp
c3QpCit7CisgICAgRVdLX0JBQ0tfRk9SV0FSRF9MSVNUX1dLX0dFVF9PUl9SRVRVUk4obGlzdCwg
d2tMaXN0LCAwKTsKKworICAgIHJldHVybiBhZGRJdGVtVG9XcmFwcGVyQ2FjaGUobGlzdCwgV0tC
YWNrRm9yd2FyZExpc3RHZXRGb3J3YXJkSXRlbSh3a0xpc3QpKTsKK30KKworRXdrX0JhY2tfRm9y
d2FyZF9MaXN0X0l0ZW0qIGV3a19iYWNrX2ZvcndhcmRfbGlzdF9pdGVtX2F0X2luZGV4X2dldChj
b25zdCBFd2tfQmFja19Gb3J3YXJkX0xpc3QqIGxpc3QsIGludCBpbmRleCkKK3sKKyAgICBFV0tf
QkFDS19GT1JXQVJEX0xJU1RfV0tfR0VUX09SX1JFVFVSTihsaXN0LCB3a0xpc3QsIDApOworCisg
ICAgcmV0dXJuIGFkZEl0ZW1Ub1dyYXBwZXJDYWNoZShsaXN0LCBXS0JhY2tGb3J3YXJkTGlzdEdl
dEl0ZW1BdEluZGV4KHdrTGlzdCwgaW5kZXgpKTsKK30KKwordW5zaWduZWQgZXdrX2JhY2tfZm9y
d2FyZF9saXN0X2NvdW50KEV3a19CYWNrX0ZvcndhcmRfTGlzdCogbGlzdCkKK3sKKyAgICBFV0tf
QkFDS19GT1JXQVJEX0xJU1RfV0tfR0VUX09SX1JFVFVSTihsaXN0LCB3a0xpc3QsIDApOworCisg
ICAgY29uc3QgdW5zaWduZWQgY3VycmVudEl0ZW0gPSBld2tfYmFja19mb3J3YXJkX2xpc3RfY3Vy
cmVudF9pdGVtX2dldChsaXN0KSA/IDEgOiAwOworCisgICAgcmV0dXJuIFdLQmFja0ZvcndhcmRM
aXN0R2V0QmFja0xpc3RDb3VudCh3a0xpc3QpICsgV0tCYWNrRm9yd2FyZExpc3RHZXRGb3J3YXJk
TGlzdENvdW50KHdrTGlzdCkgKyBjdXJyZW50SXRlbTsKK30KKworCisvKioKKyAqIEBpbnRlcm5h
bAorICogVXBkYXRlcyBpdGVtcyBjYWNoZS4KKyAqLwordm9pZCBld2tfYmFja19mb3J3YXJkX2xp
c3RfY2hhbmdlZChFd2tfQmFja19Gb3J3YXJkX0xpc3QqIGxpc3QsIFdLQmFja0ZvcndhcmRMaXN0
SXRlbVJlZiB3a0FkZGVkSXRlbSwgV0tBcnJheVJlZiB3a1JlbW92ZWRJdGVtcykKK3sKKyAgICBh
ZGRJdGVtVG9XcmFwcGVyQ2FjaGUobGlzdCwgd2tBZGRlZEl0ZW0pOyAvLyBQdXRzIG5ldyBpdGVt
IHRvIHRoZSBjYWNoZS4KKworICAgIGNvbnN0IHNpemVfdCByZW1vdmVkSXRlbXNTaXplID0gd2tS
ZW1vdmVkSXRlbXMgPyBXS0FycmF5R2V0U2l6ZSh3a1JlbW92ZWRJdGVtcykgOiAwOworICAgIGZv
ciAoc2l6ZV90IGkgPSAwOyBpIDwgcmVtb3ZlZEl0ZW1zU2l6ZTsgKytpKSB7CisgICAgICAgIFdL
QmFja0ZvcndhcmRMaXN0SXRlbVJlZiB3a0l0ZW0gPSBzdGF0aWNfY2FzdDxXS0JhY2tGb3J3YXJk
TGlzdEl0ZW1SZWY+KFdLQXJyYXlHZXRJdGVtQXRJbmRleCh3a1JlbW92ZWRJdGVtcywgaSkpOwor
ICAgICAgICBpZiAoRXdrX0JhY2tfRm9yd2FyZF9MaXN0X0l0ZW0qIGl0ZW0gPSBsaXN0LT5pdGVt
c0NhY2hlLnRha2Uod2tJdGVtKSkKKyAgICAgICAgICAgIGV3a19iYWNrX2ZvcndhcmRfbGlzdF9p
dGVtX3VucmVmKGl0ZW0pOworICAgIH0KK30KKworLyoqCisgKiBAaW50ZXJuYWwKKyAqIENvbnN0
cnVjdHMgYSBFd2tfQmFja19Gb3J3YXJkX0xpc3QgZnJvbSBhIFdLQmFja0ZvcndhcmRMaXN0UmVm
LgorICovCitFd2tfQmFja19Gb3J3YXJkX0xpc3QqIGV3a19iYWNrX2ZvcndhcmRfbGlzdF9uZXco
V0tCYWNrRm9yd2FyZExpc3RSZWYgd2tCYWNrRm9yd2FyZExpc3RSZWYpCit7CisgICAgRUlOQV9T
QUZFVFlfT05fTlVMTF9SRVRVUk5fVkFMKHdrQmFja0ZvcndhcmRMaXN0UmVmLCAwKTsKKworICAg
IHJldHVybiBuZXcgRXdrX0JhY2tfRm9yd2FyZF9MaXN0KHdrQmFja0ZvcndhcmRMaXN0UmVmKTsK
K30KKworLyoqCisgKiBAaW50ZXJuYWwKKyAqIEZyZWVzIGEgRXdrX0JhY2tfRm9yd2FyZF9MaXN0
IG9iamVjdC4KKyAqLwordm9pZCBld2tfYmFja19mb3J3YXJkX2xpc3RfZnJlZShFd2tfQmFja19G
b3J3YXJkX0xpc3QqIGxpc3QpCit7CisgICAgRUlOQV9TQUZFVFlfT05fTlVMTF9SRVRVUk4obGlz
dCk7CisKKyAgICBkZWxldGUgbGlzdDsKK30KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1VJ
UHJvY2Vzcy9BUEkvZWZsL2V3a19iYWNrX2ZvcndhcmRfbGlzdC5oIGIvU291cmNlL1dlYktpdDIv
VUlQcm9jZXNzL0FQSS9lZmwvZXdrX2JhY2tfZm9yd2FyZF9saXN0LmgKbmV3IGZpbGUgbW9kZSAx
MDA2NDQKaW5kZXggMDAwMDAwMC4uNWI5Y2NhNwotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9X
ZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZWZsL2V3a19iYWNrX2ZvcndhcmRfbGlzdC5oCkBAIC0wLDAg
KzEsOTIgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTIgSW50ZWwgQ29ycG9yYXRpb24uIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3Vy
Y2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFy
ZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFy
ZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4g
dGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGlu
IGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92
aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9W
SURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5E
IEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBB
TkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJ
TiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJ
QUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1Q
TEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VT
OyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQ
VElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVU
SEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5H
IE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBU
SEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJ
QklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKy8qKgorICogQGZpbGUgICAgZXdrX2JhY2tf
Zm9yd2FyZF9saXN0LmgKKyAqIEBicmllZiAgIERlc2NyaWJlcyB0aGUgRXdrIEJhY2sgRm9yd2Fy
ZCBMaXN0IEFQSS4KKyAqLworCisjaWZuZGVmIGV3a19iYWNrX2ZvcndhcmRfbGlzdF9oCisjZGVm
aW5lIGV3a19iYWNrX2ZvcndhcmRfbGlzdF9oCisKKyNpbmNsdWRlICJld2tfYmFja19mb3J3YXJk
X2xpc3RfaXRlbS5oIgorCisjaWZkZWYgX19jcGx1c3BsdXMKK2V4dGVybiAiQyIgeworI2VuZGlm
CisKKy8qKiBDcmVhdGVzIGEgdHlwZSBuYW1lIGZvciBfRXdrX0JhY2tfRm9yd2FyZF9MaXN0ICov
Cit0eXBlZGVmIHN0cnVjdCBfRXdrX0JhY2tfRm9yd2FyZF9MaXN0IEV3a19CYWNrX0ZvcndhcmRf
TGlzdDsKKworLyoqCisgKiBSZXR1cm5zIHRoZSBjdXJyZW50IGl0ZW0gaW4gdGhlIEBhIGxpc3Qu
CisgKgorICogQHBhcmFtIGxpc3QgdGhlIGJhY2stZm9yd2FyZCBsaXN0IGluc3RhbmNlCisgKgor
ICogQHJldHVybiB0aGUgY3VycmVudCBpdGVtIGluIHRoZSBAYSBsaXN0IG9yIEBjIE5VTEwgaW4g
Y2FzZSBvZiBlcnJvcgorICovCitFQVBJIEV3a19CYWNrX0ZvcndhcmRfTGlzdF9JdGVtICpld2tf
YmFja19mb3J3YXJkX2xpc3RfY3VycmVudF9pdGVtX2dldChjb25zdCBFd2tfQmFja19Gb3J3YXJk
X0xpc3QgKmxpc3QpOworCisvKioKKyAqIFJldHVybnMgdGhlIGl0ZW0gdGhhdCBwcmVjZWRlcyB0
aGUgY3VycmVudCBpdGVtIGluIHRoZSBAYSBsaXN0LgorICoKKyAqIEBwYXJhbSBsaXN0IHRoZSBi
YWNrLWZvcndhcmQgbGlzdCBpbnN0YW5jZQorICoKKyAqIEByZXR1cm4gdGhlIGl0ZW0gdGhhdCBw
cmVjZWRlcyB0aGUgY3VycmVudCBpdGVtIHRoZSBAYSBsaXN0IG9yIEBjIE5VTEwgaW4gY2FzZSBv
ZiBlcnJvcgorICovCitFQVBJIEV3a19CYWNrX0ZvcndhcmRfTGlzdF9JdGVtICpld2tfYmFja19m
b3J3YXJkX2xpc3RfcHJldmlvdXNfaXRlbV9nZXQoY29uc3QgRXdrX0JhY2tfRm9yd2FyZF9MaXN0
ICpsaXN0KTsKKworLyoqCisgKiBSZXR1cm5zIHRoZSBpdGVtIHRoYXQgZm9sbG93cyB0aGUgY3Vy
cmVudCBpdGVtIGluIHRoZSBAYSBsaXN0LgorICoKKyAqIEBwYXJhbSBsaXN0IHRoZSBiYWNrLWZv
cndhcmQgbGlzdCBpbnN0YW5jZQorICoKKyAqIEByZXR1cm4gdGhlIGl0ZW0gdGhhdCBmb2xsb3dz
IHRoZSBjdXJyZW50IGl0ZW0gaW4gdGhlIEBhIGxpc3Qgb3IgQGMgTlVMTCBpbiBjYXNlIG9mIGVy
cm9yCisgKi8KK0VBUEkgRXdrX0JhY2tfRm9yd2FyZF9MaXN0X0l0ZW0gKmV3a19iYWNrX2Zvcndh
cmRfbGlzdF9uZXh0X2l0ZW1fZ2V0KGNvbnN0IEV3a19CYWNrX0ZvcndhcmRfTGlzdCAqbGlzdCk7
CisKKy8qKgorICogUmV0dXJucyB0aGUgaXRlbSBhdCBhIGdpdmVuIEBhIGluZGV4IHJlbGF0aXZl
IHRvIHRoZSBjdXJyZW50IGl0ZW0uCisgKgorICogQHBhcmFtIGxpc3QgdGhlIGJhY2stZm9yd2Fy
ZCBsaXN0IGluc3RhbmNlCisgKiBAcGFyYW0gaW5kZXggdGhlIGluZGV4IG9mIHRoZSBpdGVtCisg
KgorICogQHJldHVybiB0aGUgaXRlbSBhdCBhIGdpdmVuIEBhIGluZGV4IHJlbGF0aXZlIHRvIHRo
ZSBjdXJyZW50IGl0ZW0gb3IgQGMgTlVMTCBpbiBjYXNlIG9mIGVycm9yCisgKi8KK0VBUEkgRXdr
X0JhY2tfRm9yd2FyZF9MaXN0X0l0ZW0gKmV3a19iYWNrX2ZvcndhcmRfbGlzdF9pdGVtX2F0X2lu
ZGV4X2dldChjb25zdCBFd2tfQmFja19Gb3J3YXJkX0xpc3QgKmxpc3QsIGludCBpbmRleCk7CisK
Ky8qKgorICogUmV0dXJucyB0aGUgbGVuZ3RoIG9mIHRoZSBiYWNrLWZvcndhcmQgbGlzdCBpbmNs
dWRpbmcgY3VycmVudCBpdGVtLgorICoKKyAqIEBwYXJhbSBsaXN0IHRoZSBiYWNrLWZvcndhcmQg
bGlzdCBpbnN0YW5jZQorICoKKyAqIEByZXR1cm4gdGhlIGxlbmd0aCBvZiB0aGUgYmFjay1mb3J3
YXJkIGxpc3QgaW5jbHVkaW5nIGN1cnJlbnQgaXRlbSBvciBAYyAwIGluIGNhc2Ugb2YgZXJyb3IK
KyAqLworRUFQSSB1bnNpZ25lZCBld2tfYmFja19mb3J3YXJkX2xpc3RfY291bnQoRXdrX0JhY2tf
Rm9yd2FyZF9MaXN0ICpsaXN0KTsKKworI2lmZGVmIF9fY3BsdXNwbHVzCit9CisjZW5kaWYKKyNl
bmRpZiAvLyBld2tfYmFja19mb3J3YXJkX2xpc3RfaApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktp
dDIvVUlQcm9jZXNzL0FQSS9lZmwvZXdrX2JhY2tfZm9yd2FyZF9saXN0X2l0ZW0uY3BwIGIvU291
cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9lZmwvZXdrX2JhY2tfZm9yd2FyZF9saXN0X2l0ZW0u
Y3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjJlZDk0NjIKLS0tIC9kZXYv
bnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2VmbC9ld2tfYmFja19mb3J3
YXJkX2xpc3RfaXRlbS5jcHAKQEAgLTAsMCArMSwxMjAgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMp
IDIwMTIgSW50ZWwgQ29ycG9yYXRpb24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVk
aXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3
aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUg
Zm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMg
b2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90
aWNlLCB0aGlzIGl0ZW0gb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
LgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBpdGVtIG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24g
YW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisg
KgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09O
VFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFO
VElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJS
QU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisg
KiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9S
IElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1Qs
IElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFN
QUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBT
VUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklU
UzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFO
WSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJ
QUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICog
QVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4g
SUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisK
KyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJld2tfYmFja19mb3J3YXJkX2xpc3RfaXRl
bS5oIgorCisjaW5jbHVkZSAiV0tBUElDYXN0LmgiCisjaW5jbHVkZSAiV0tCYWNrRm9yd2FyZExp
c3RJdGVtLmgiCisjaW5jbHVkZSAiV0tSZXRhaW5QdHIuaCIKKyNpbmNsdWRlICJXS1N0cmluZy5o
IgorI2luY2x1ZGUgIldLVVJMLmgiCisjaW5jbHVkZSA8d3RmL3RleHQvQ1N0cmluZy5oPgorCit1
c2luZyBuYW1lc3BhY2UgV2ViS2l0OworCitjbGFzcyBXS0VpbmFTaGFyZWRTdHJpbmcgeworcHVi
bGljOgorICAgIHRlbXBsYXRlIDx0eXBlbmFtZSBXS1JlZlR5cGU+CisgICAgV0tFaW5hU2hhcmVk
U3RyaW5nKGNvbnN0IFdLUmV0YWluUHRyPFdLUmVmVHlwZT4mIHN0clJlZikKKyAgICAgICAgOiBt
X3N0cihlaW5hX3N0cmluZ3NoYXJlX2FkZCh0b0ltcGwoc3RyUmVmLmdldCgpKS0+c3RyaW5nKCku
dXRmOCgpLmRhdGEoKSkpCisgICAgeworICAgICAgICBBU1NFUlQobV9zdHIpOworICAgIH0KKyAg
ICB+V0tFaW5hU2hhcmVkU3RyaW5nKCkgeyBlaW5hX3N0cmluZ3NoYXJlX2RlbChtX3N0cik7IH0K
KyAgICBpbmxpbmUgb3BlcmF0b3IgY29uc3QgY2hhciogKCkgY29uc3QgeyByZXR1cm4gbV9zdHI7
IH0KKworcHJpdmF0ZToKKyAgICBjb25zdCBjaGFyKiBtX3N0cjsKK307CisKKy8qKgorICogXHN0
cnVjdCAgX0V3a19CYWNrX0ZvcndhcmRfTGlzdAorICogQGJyaWVmICAgQ29udGFpbnMgdGhlIEJh
Y2sgRm9yd2FyZCBMaXN0IGRhdGEuCisgKi8KK3N0cnVjdCBfRXdrX0JhY2tfRm9yd2FyZF9MaXN0
X0l0ZW0geworICAgIHVuc2lnbmVkIGludCBfX3JlZjsgLyoqPCB0aGUgcmVmZXJlbmNlIGNvdW50
IG9mIHRoZSBvYmplY3QgKi8KKyAgICBXS1JldGFpblB0cjxXS0JhY2tGb3J3YXJkTGlzdEl0ZW1S
ZWY+IHdrSXRlbTsKKyAgICBXS0VpbmFTaGFyZWRTdHJpbmcgdXJpOworICAgIFdLRWluYVNoYXJl
ZFN0cmluZyB0aXRsZTsKKyAgICBXS0VpbmFTaGFyZWRTdHJpbmcgb3JpZ2luYWxVcmk7CisKKyAg
ICBfRXdrX0JhY2tfRm9yd2FyZF9MaXN0X0l0ZW0oV0tCYWNrRm9yd2FyZExpc3RJdGVtUmVmIGl0
ZW1SZWYpCisgICAgICAgIDogX19yZWYoMSkKKyAgICAgICAgLCB3a0l0ZW0oaXRlbVJlZikKKyAg
ICAgICAgLCB1cmkoV0tSZXRhaW5QdHI8V0tVUkxSZWY+KEFkb3B0V0ssIFdLQmFja0ZvcndhcmRM
aXN0SXRlbUNvcHlVUkwoaXRlbVJlZikpKQorICAgICAgICAsIHRpdGxlKFdLUmV0YWluUHRyPFdL
U3RyaW5nUmVmPihBZG9wdFdLLCBXS0JhY2tGb3J3YXJkTGlzdEl0ZW1Db3B5VGl0bGUoaXRlbVJl
ZikpKQorICAgICAgICAsIG9yaWdpbmFsVXJpKFdLUmV0YWluUHRyPFdLVVJMUmVmPihBZG9wdFdL
LCBXS0JhY2tGb3J3YXJkTGlzdEl0ZW1Db3B5T3JpZ2luYWxVUkwoaXRlbVJlZikpKQorICAgIHsg
fQorCisgICAgfl9Fd2tfQmFja19Gb3J3YXJkX0xpc3RfSXRlbSgpCisgICAgeworICAgICAgICBB
U1NFUlQoIV9fcmVmKTsKKyAgICB9Cit9OworCit2b2lkIGV3a19iYWNrX2ZvcndhcmRfbGlzdF9p
dGVtX3JlZihFd2tfQmFja19Gb3J3YXJkX0xpc3RfSXRlbSogaXRlbSkKK3sKKyAgICBFSU5BX1NB
RkVUWV9PTl9OVUxMX1JFVFVSTihpdGVtKTsKKyAgICArK2l0ZW0tPl9fcmVmOworfQorCit2b2lk
IGV3a19iYWNrX2ZvcndhcmRfbGlzdF9pdGVtX3VucmVmKEV3a19CYWNrX0ZvcndhcmRfTGlzdF9J
dGVtKiBpdGVtKQoreworICAgIEVJTkFfU0FGRVRZX09OX05VTExfUkVUVVJOKGl0ZW0pOworCisg
ICAgaWYgKC0taXRlbS0+X19yZWYpCisgICAgICAgIHJldHVybjsKKworICAgIGRlbGV0ZSBpdGVt
OworfQorCitjb25zdCBjaGFyKiBld2tfYmFja19mb3J3YXJkX2xpc3RfaXRlbV91cmlfZ2V0KGNv
bnN0IEV3a19CYWNrX0ZvcndhcmRfTGlzdF9JdGVtKiBpdGVtKQoreworICAgIEVJTkFfU0FGRVRZ
X09OX05VTExfUkVUVVJOX1ZBTChpdGVtLCAwKTsKKworICAgIHJldHVybiBpdGVtLT51cmk7Cit9
CisKK2NvbnN0IGNoYXIqIGV3a19iYWNrX2ZvcndhcmRfbGlzdF9pdGVtX3RpdGxlX2dldChjb25z
dCBFd2tfQmFja19Gb3J3YXJkX0xpc3RfSXRlbSogaXRlbSkKK3sKKyAgICBFSU5BX1NBRkVUWV9P
Tl9OVUxMX1JFVFVSTl9WQUwoaXRlbSwgMCk7CisKKyAgICByZXR1cm4gaXRlbS0+dGl0bGU7Cit9
CisKK2NvbnN0IGNoYXIqIGV3a19iYWNrX2ZvcndhcmRfbGlzdF9pdGVtX29yaWdpbmFsX3VyaV9n
ZXQoY29uc3QgRXdrX0JhY2tfRm9yd2FyZF9MaXN0X0l0ZW0qIGl0ZW0pCit7CisgICAgRUlOQV9T
QUZFVFlfT05fTlVMTF9SRVRVUk5fVkFMKGl0ZW0sIDApOworCisgICAgcmV0dXJuIGl0ZW0tPm9y
aWdpbmFsVXJpOworfQorCitFd2tfQmFja19Gb3J3YXJkX0xpc3RfSXRlbSogZXdrX2JhY2tfZm9y
d2FyZF9saXN0X2l0ZW1fbmV3KFdLQmFja0ZvcndhcmRMaXN0SXRlbVJlZiBiYWNrRm9yd2FyZExp
c3RJdGVtRGF0YSkKK3sKKyAgICBFSU5BX1NBRkVUWV9PTl9OVUxMX1JFVFVSTl9WQUwoYmFja0Zv
cndhcmRMaXN0SXRlbURhdGEsIDApOworCisgICAgcmV0dXJuIG5ldyBFd2tfQmFja19Gb3J3YXJk
X0xpc3RfSXRlbShiYWNrRm9yd2FyZExpc3RJdGVtRGF0YSk7Cit9CmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2VmbC9ld2tfYmFja19mb3J3YXJkX2xpc3RfaXRlbS5o
IGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9lZmwvZXdrX2JhY2tfZm9yd2FyZF9saXN0
X2l0ZW0uaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44MTFmMGUxCi0tLSAv
ZGV2L251bGwKKysrIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9lZmwvZXdrX2JhY2tf
Zm9yd2FyZF9saXN0X2l0ZW0uaApAQCAtMCwwICsxLDEwNyBAQAorLyoKKyAqIENvcHlyaWdodCAo
QykgMjAxMiBJbnRlbCBDb3Jwb3JhdGlvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBS
ZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9y
IHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRo
ZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9u
cyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2Ug
dGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlv
biBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4K
KyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBD
T05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJS
QU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdB
UlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIK
KyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4g
T1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVD
VCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBE
QU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAq
IFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9G
SVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04g
QU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1Qg
TElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisg
KiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZF
TiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8K
KworLyoqCisgKiBAZmlsZSAgICBld2tfYmFja19mb3J3YXJkX2xpc3RfaXRlbS5oCisgKiBAYnJp
ZWYgICBEZXNjcmliZXMgdGhlIEV3ayBCYWNrIEZvcndhcmQgTGlzdCBJdGVtIEFQSS4KKyAqLwor
CisjaWZuZGVmIGV3a19iYWNrX2ZvcndhcmRfbGlzdF9pdGVtX2gKKyNkZWZpbmUgZXdrX2JhY2tf
Zm9yd2FyZF9saXN0X2l0ZW1faAorCisjaW5jbHVkZSA8RWluYS5oPgorCisjaWZkZWYgX19jcGx1
c3BsdXMKK2V4dGVybiAiQyIgeworI2VuZGlmCisKKy8qKiBDcmVhdGVzIGEgdHlwZSBuYW1lIGZv
ciBfRXdrX0JhY2tfRm9yd2FyZF9MaXN0X0l0ZW0gKi8KK3R5cGVkZWYgc3RydWN0IF9Fd2tfQmFj
a19Gb3J3YXJkX0xpc3RfSXRlbSBFd2tfQmFja19Gb3J3YXJkX0xpc3RfSXRlbTsKKworLyoqCisg
KiBJbmNyZWFzZXMgdGhlIHJlZmVyZW5jZSBjb3VudCBvZiB0aGUgZ2l2ZW4gb2JqZWN0LgorICoK
KyAqIEBwYXJhbSBpdGVtIHRoZSBiYWNrLWZvcndhcmQgbGlzdCBpdGVtIGluc3RhbmNlIHRvIGlu
Y3JlYXNlIHRoZSByZWZlcmVuY2UgY291bnQKKyAqLworRUFQSSB2b2lkIGV3a19iYWNrX2Zvcndh
cmRfbGlzdF9pdGVtX3JlZihFd2tfQmFja19Gb3J3YXJkX0xpc3RfSXRlbSAqaXRlbSk7CisKKy8q
KgorICogRGVjcmVhc2VzIHRoZSByZWZlcmVuY2UgY291bnQgb2YgdGhlIGdpdmVuIG9iamVjdCwg
cG9zc2libHkgZnJlZWluZyBpdC4KKyAqCisgKiBXaGVuIHRoZSByZWZlcmVuY2UgY291bnQgcmVh
Y2hlcyAwLCB0aGUgaXRlbSBpcyBmcmVlZC4KKyAqCisgKiBAcGFyYW0gaXRlbSB0aGUgYmFjay1m
b3J3YXJkIGxpc3QgaXRlbSBpbnN0YW5jZSB0byBkZWNyZWFzZSB0aGUgcmVmZXJlbmNlIGNvdW50
CisgKi8KK0VBUEkgdm9pZCBld2tfYmFja19mb3J3YXJkX2xpc3RfaXRlbV91bnJlZihFd2tfQmFj
a19Gb3J3YXJkX0xpc3RfSXRlbSAqaXRlbSk7CisKKy8qKgorICogUmV0dXJucyBVUkkgb2YgdGhl
IGl0ZW0uCisgKgorICogVGhlIHJldHVybmVkIFVSSSBtYXkgZGlmZmVyIGZyb20gdGhlIG9yaWdp
bmFsIFVSSSAoRm9yIGV4YW1wbGUgaWYgdGhlIHBhZ2Ugd2FzIHJlZGlyZWN0ZWQpLgorICoKKyAq
IEBzZWUgZXdrX2JhY2tfZm9yd2FyZF9saXN0X2l0ZW1fb3JpZ2luYWxfdXJpX2dldCgpCisgKgor
ICogQHBhcmFtIGl0ZW0gdGhlIGJhY2stZm9yd2FyZCBsaXN0IGl0ZW0gaW5zdGFuY2UKKyAqCisg
KiBAcmV0dXJuIHRoZSBVUkkgb2YgdGhlIEBhIGl0ZW0gb3IgQGMgTlVMTCBpbiBjYXNlIG9mIGVy
cm9yLiBUaGlzIHBvaW50ZXIgaXMKKyAqICAgICAgICAgZ3VhcmFudGVlZCB0byBiZSBlaW5hX3N0
cmluZ3NoYXJlLCBzbyB3aGVuZXZlciBwb3NzaWJsZQorICogICAgICAgICBzYXZlIHlvdXJzZWxm
IHNvbWUgY3B1IGN5Y2xlcyBhbmQgdXNlCisgKiAgICAgICAgIGVpbmFfc3RyaW5nc2hhcmVfcmVm
KCkgaW5zdGVhZCBvZiBlaW5hX3N0cmluZ3NoYXJlX2FkZCgpIG9yCisgKiAgICAgICAgIHN0cmR1
cCgpCisgKi8KK0VBUEkgY29uc3QgY2hhciAqZXdrX2JhY2tfZm9yd2FyZF9saXN0X2l0ZW1fdXJp
X2dldChjb25zdCBFd2tfQmFja19Gb3J3YXJkX0xpc3RfSXRlbSAqaXRlbSk7CisKKy8qKgorICog
UmV0dXJucyB0aXRsZSBvZiB0aGUgaXRlbS4KKyAqCisgKiBAcGFyYW0gaXRlbSB0aGUgYmFjay1m
b3J3YXJkIGxpc3QgaXRlbSBpbnN0YW5jZQorICoKKyAqIEByZXR1cm4gdGhlIHRpdGxlIG9mIHRo
ZSBAYSBpdGVtIG9yIEBjIE5VTEwgaW4gY2FzZSBvZiBlcnJvci4gVGhpcyBwb2ludGVyIGlzCisg
KiAgICAgICAgIGd1YXJhbnRlZWQgdG8gYmUgZWluYV9zdHJpbmdzaGFyZSwgc28gd2hlbmV2ZXIg
cG9zc2libGUKKyAqICAgICAgICAgc2F2ZSB5b3Vyc2VsZiBzb21lIGNwdSBjeWNsZXMgYW5kIHVz
ZQorICogICAgICAgICBlaW5hX3N0cmluZ3NoYXJlX3JlZigpIGluc3RlYWQgb2YgZWluYV9zdHJp
bmdzaGFyZV9hZGQoKSBvcgorICogICAgICAgICBzdHJkdXAoKQorICovCitFQVBJIGNvbnN0IGNo
YXIgKmV3a19iYWNrX2ZvcndhcmRfbGlzdF9pdGVtX3RpdGxlX2dldChjb25zdCBFd2tfQmFja19G
b3J3YXJkX0xpc3RfSXRlbSAqaXRlbSk7CisKKy8qKgorICogUmV0dXJucyBvcmlnaW5hbCBVUkkg
b2YgdGhlIGl0ZW0uCisgKgorICogQHNlZSBld2tfYmFja19mb3J3YXJkX2xpc3RfaXRlbV91cmlf
Z2V0KCkKKyAqCisgKiBAcGFyYW0gaXRlbSB0aGUgYmFjay1mb3J3YXJkIGxpc3QgaXRlbSBpbnN0
YW5jZQorICoKKyAqIEByZXR1cm4gdGhlIG9yaWdpbmFsIFVSSSBvZiB0aGUgQGEgaXRlbSBvciBA
YyBOVUxMIGluIGNhc2Ugb2YgZXJyb3IuIFRoaXMgcG9pbnRlciBpcworICogICAgICAgICBndWFy
YW50ZWVkIHRvIGJlIGVpbmFfc3RyaW5nc2hhcmUsIHNvIHdoZW5ldmVyIHBvc3NpYmxlCisgKiAg
ICAgICAgIHNhdmUgeW91cnNlbGYgc29tZSBjcHUgY3ljbGVzIGFuZCB1c2UKKyAqICAgICAgICAg
ZWluYV9zdHJpbmdzaGFyZV9yZWYoKSBpbnN0ZWFkIG9mIGVpbmFfc3RyaW5nc2hhcmVfYWRkKCkg
b3IKKyAqICAgICAgICAgc3RyZHVwKCkKKyAqLworRUFQSSBjb25zdCBjaGFyICpld2tfYmFja19m
b3J3YXJkX2xpc3RfaXRlbV9vcmlnaW5hbF91cmlfZ2V0KGNvbnN0IEV3a19CYWNrX0ZvcndhcmRf
TGlzdF9JdGVtICppdGVtKTsKKworI2lmZGVmIF9fY3BsdXNwbHVzCit9CisjZW5kaWYKKyNlbmRp
ZiAvLyBld2tfYmFja19mb3J3YXJkX2xpc3RfaXRlbV9oCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
S2l0Mi9VSVByb2Nlc3MvQVBJL2VmbC9ld2tfYmFja19mb3J3YXJkX2xpc3RfaXRlbV9wcml2YXRl
LmggYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2VmbC9ld2tfYmFja19mb3J3YXJkX2xp
c3RfaXRlbV9wcml2YXRlLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOGMy
YzY4NAotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZWZs
L2V3a19iYWNrX2ZvcndhcmRfbGlzdF9pdGVtX3ByaXZhdGUuaApAQCAtMCwwICsxLDM1IEBACisv
KgorICogQ29weXJpZ2h0IChDKSAyMDEyIEludGVsIENvcnBvcmF0aW9uLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5h
cnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVk
IHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICog
MS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBpdGVtIG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9y
bSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMg
aXRlbSBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisg
KiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0
aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQ
TEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVT
UyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAor
ICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1Mg
Rk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQg
U0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFO
WSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisg
KiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQ
Uk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBV
U0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VW
RVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICog
Q09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNF
IE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBU
SElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBT
VUNIIERBTUFHRS4KKyAqLworCisjaWZuZGVmIGV3a19iYWNrX2ZvcndhcmRfbGlzdF9pdGVtX3By
aXZhdGVfaAorI2RlZmluZSBld2tfYmFja19mb3J3YXJkX2xpc3RfaXRlbV9wcml2YXRlX2gKKwor
I2luY2x1ZGUgPFdlYktpdDIvV0tCYXNlLmg+CisKK3R5cGVkZWYgc3RydWN0IF9Fd2tfQmFja19G
b3J3YXJkX0xpc3RfSXRlbSBFd2tfQmFja19Gb3J3YXJkX0xpc3RfSXRlbTsKKworRXdrX0JhY2tf
Rm9yd2FyZF9MaXN0X0l0ZW0qIGV3a19iYWNrX2ZvcndhcmRfbGlzdF9pdGVtX25ldyhXS0JhY2tG
b3J3YXJkTGlzdEl0ZW1SZWYgd2tCYWNrRm9yd2FyZExpc3RJdGVtUmVmKTsKKworI2VuZGlmIC8v
IGV3a19iYWNrX2ZvcndhcmRfbGlzdF9wcml2YXRlX2gKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJL
aXQyL1VJUHJvY2Vzcy9BUEkvZWZsL2V3a19iYWNrX2ZvcndhcmRfbGlzdF9wcml2YXRlLmggYi9T
b3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2VmbC9ld2tfYmFja19mb3J3YXJkX2xpc3RfcHJp
dmF0ZS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjU5MmE0ZjQKLS0tIC9k
ZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2VmbC9ld2tfYmFja19m
b3J3YXJkX2xpc3RfcHJpdmF0ZS5oCkBAIC0wLDAgKzEsMzcgQEAKKy8qCisgKiBDb3B5cmlnaHQg
KEMpIDIwMTIgSW50ZWwgQ29ycG9yYXRpb24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICog
UmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBv
ciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0
aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlv
bnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNl
IHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRp
b24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24u
CisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMg
Q09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FS
UkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBX
QVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFS
CisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMu
IE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJF
Q1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwg
REFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisg
KiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJP
RklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9O
IEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNU
IExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQor
ICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVW
RU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICov
CisKKyNpZm5kZWYgZXdrX2JhY2tfZm9yd2FyZF9saXN0X3ByaXZhdGVfaAorI2RlZmluZSBld2tf
YmFja19mb3J3YXJkX2xpc3RfcHJpdmF0ZV9oCisKKyNpbmNsdWRlIDxXZWJLaXQyL1dLQmFzZS5o
PgorCit0eXBlZGVmIHN0cnVjdCBfRXdrX0JhY2tfRm9yd2FyZF9MaXN0IEV3a19CYWNrX0Zvcndh
cmRfTGlzdDsKKwordm9pZCBld2tfYmFja19mb3J3YXJkX2xpc3RfY2hhbmdlZChFd2tfQmFja19G
b3J3YXJkX0xpc3QqLCBXS0JhY2tGb3J3YXJkTGlzdEl0ZW1SZWYgd2tBZGRlZEl0ZW0sIFdLQXJy
YXlSZWYgd2tSZW1vdmVkSXRlbXMpOworRXdrX0JhY2tfRm9yd2FyZF9MaXN0KiBld2tfYmFja19m
b3J3YXJkX2xpc3RfbmV3KFdLQmFja0ZvcndhcmRMaXN0UmVmIHdrQmFja0ZvcndhcmRMaXN0UmVm
KTsKK3ZvaWQgZXdrX2JhY2tfZm9yd2FyZF9saXN0X2ZyZWUoRXdrX0JhY2tfRm9yd2FyZF9MaXN0
KiBsaXN0KTsKKworI2VuZGlmIC8vIGV3a19iYWNrX2ZvcndhcmRfbGlzdF9wcml2YXRlX2gKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZWZsL2V3a192aWV3LmNwcCBi
L1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZWZsL2V3a192aWV3LmNwcAppbmRleCA4YmMx
MTIxLi5jODI5ODRhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2Vm
bC9ld2tfdmlldy5jcHAKKysrIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9lZmwvZXdr
X3ZpZXcuY3BwCkBAIC0yOSw2ICsyOSw3IEBACiAjaW5jbHVkZSAiV0tSZXRhaW5QdHIuaCIKICNp
bmNsdWRlICJXS1N0cmluZy5oIgogI2luY2x1ZGUgIldLVVJMLmgiCisjaW5jbHVkZSAiZXdrX2Jh
Y2tfZm9yd2FyZF9saXN0X3ByaXZhdGUuaCIKICNpbmNsdWRlICJld2tfY29udGV4dC5oIgogI2lu
Y2x1ZGUgImV3a19jb250ZXh0X3ByaXZhdGUuaCIKICNpbmNsdWRlICJld2tfaW50ZW50X3ByaXZh
dGUuaCIKQEAgLTY4LDYgKzY5LDcgQEAgc3RydWN0IF9Fd2tfVmlld19Qcml2YXRlX0RhdGEgewog
ICAgIGNvbnN0IGNoYXIqIGN1cnNvckdyb3VwOwogICAgIEV2YXNfT2JqZWN0KiBjdXJzb3JPYmpl
Y3Q7CiAgICAgTG9hZGluZ1Jlc291cmNlc01hcCBsb2FkaW5nUmVzb3VyY2VzTWFwOworICAgIEV3
a19CYWNrX0ZvcndhcmRfTGlzdCogYmFja0ZvcndhcmRMaXN0OwogCiAjaWZkZWYgSEFWRV9FQ09S
RV9YCiAgICAgYm9vbCBpc1VzaW5nRWNvcmVYOwpAQCAtODYsNiArODgsNyBAQCBzdHJ1Y3QgX0V3
a19WaWV3X1ByaXZhdGVfRGF0YSB7CiAgICAgICAgICwgY3VzdG9tRW5jb2RpbmcoMCkKICAgICAg
ICAgLCBjdXJzb3JHcm91cCgwKQogICAgICAgICAsIGN1cnNvck9iamVjdCgwKQorICAgICAgICAs
IGJhY2tGb3J3YXJkTGlzdCgwKQogI2lmZGVmIEhBVkVfRUNPUkVfWAogICAgICAgICAsIGlzVXNp
bmdFY29yZVgoZmFsc2UpCiAjZW5kaWYKQEAgLTEwNiw2ICsxMDksOCBAQCBzdHJ1Y3QgX0V3a19W
aWV3X1ByaXZhdGVfRGF0YSB7CiAKICAgICAgICAgaWYgKGN1cnNvck9iamVjdCkKICAgICAgICAg
ICAgIGV2YXNfb2JqZWN0X2RlbChjdXJzb3JPYmplY3QpOworCisgICAgICAgIGV3a19iYWNrX2Zv
cndhcmRfbGlzdF9mcmVlKGJhY2tGb3J3YXJkTGlzdCk7CiAgICAgfQogfTsKIApAQCAtNjYyLDYg
KzY2Nyw3IEBAIEV2YXNfT2JqZWN0KiBld2tfdmlld19iYXNlX2FkZChFdmFzKiBjYW52YXMsIFdL
Q29udGV4dFJlZiBjb250ZXh0UmVmLCBXS1BhZ2VHcm91CiAgICAgfQogCiAgICAgcHJpdi0+cGFn
ZUNsaWVudCA9IFBhZ2VDbGllbnRJbXBsOjpjcmVhdGUodG9JbXBsKGNvbnRleHRSZWYpLCB0b0lt
cGwocGFnZUdyb3VwUmVmKSwgZXdrVmlldyk7CisgICAgcHJpdi0+YmFja0ZvcndhcmRMaXN0ID0g
ZXdrX2JhY2tfZm9yd2FyZF9saXN0X25ldyh0b0FQSShwcml2LT5wYWdlQ2xpZW50LT5wYWdlKCkt
PmJhY2tGb3J3YXJkTGlzdCgpKSk7CiAKICAgICBXS1BhZ2VSZWYgd2tQYWdlID0gdG9BUEkocHJp
di0+cGFnZUNsaWVudC0+cGFnZSgpKTsKICAgICBld2tfdmlld19mb3JtX2NsaWVudF9hdHRhY2go
d2tQYWdlLCBld2tWaWV3KTsKQEAgLTExMzAsNiArMTEzNiwxNCBAQCBFaW5hX0Jvb2wgZXdrX3Zp
ZXdfZm9yd2FyZF9wb3NzaWJsZShFdmFzX09iamVjdCogZXdrVmlldykKICAgICByZXR1cm4gcHJp
di0+cGFnZUNsaWVudC0+cGFnZSgpLT5jYW5Hb0ZvcndhcmQoKTsKIH0KIAorRXdrX0JhY2tfRm9y
d2FyZF9MaXN0KiBld2tfdmlld19iYWNrX2ZvcndhcmRfbGlzdF9nZXQoY29uc3QgRXZhc19PYmpl
Y3QqIGV3a1ZpZXcpCit7CisgICAgRVdLX1ZJRVdfU0RfR0VUX09SX1JFVFVSTihld2tWaWV3LCBz
bWFydERhdGEsIDApOworICAgIEVXS19WSUVXX1BSSVZfR0VUX09SX1JFVFVSTihzbWFydERhdGEs
IHByaXYsIDApOworCisgICAgcmV0dXJuIHByaXYtPmJhY2tGb3J3YXJkTGlzdDsKK30KKwogdm9p
ZCBld2tfdmlld19pbWFnZV9kYXRhX3NldChFdmFzX09iamVjdCogZXdrVmlldywgdm9pZCogaW1h
Z2VEYXRhLCBjb25zdCBJbnRTaXplJiBzaXplKQogewogICAgIEVXS19WSUVXX1NEX0dFVF9PUl9S
RVRVUk4oZXdrVmlldywgc21hcnREYXRhKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1VJ
UHJvY2Vzcy9BUEkvZWZsL2V3a192aWV3LmggYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJ
L2VmbC9ld2tfdmlldy5oCmluZGV4IDNiMDM0MTkuLjYwN2QwMGQgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZWZsL2V3a192aWV3LmgKKysrIGIvU291cmNlL1dlYktp
dDIvVUlQcm9jZXNzL0FQSS9lZmwvZXdrX3ZpZXcuaApAQCAtNjgsNiArNjgsNyBAQAogI2lmbmRl
ZiBld2tfdmlld19oCiAjZGVmaW5lIGV3a192aWV3X2gKIAorI2luY2x1ZGUgImV3a19iYWNrX2Zv
cndhcmRfbGlzdC5oIgogI2luY2x1ZGUgImV3a19jb250ZXh0LmgiCiAjaW5jbHVkZSAiZXdrX2Rv
d25sb2FkX2pvYi5oIgogI2luY2x1ZGUgImV3a19pbnRlbnQuaCIKQEAgLTMzOCw2ICszMzksMjEg
QEAgRUFQSSBFaW5hX0Jvb2wgICAgZXdrX3ZpZXdfYmFja19wb3NzaWJsZShFdmFzX09iamVjdCAq
byk7CiBFQVBJIEVpbmFfQm9vbCAgICBld2tfdmlld19mb3J3YXJkX3Bvc3NpYmxlKEV2YXNfT2Jq
ZWN0ICpvKTsKIAogLyoqCisgKiBHZXRzIHRoZSBiYWNrLWZvcndhcmQgbGlzdCBhc3NvY2lhdGVk
IHdpdGggdGhpcyB2aWV3LgorICoKKyAqIFRoZSByZXR1cm5lZCBpbnN0YW5jZSBpcyB1bmlxdWUg
Zm9yIHRoaXMgdmlldyBhbmQgdGh1cyBtdWx0aXBsZSBjYWxscworICogdG8gdGhpcyBmdW5jdGlv
biB3aXRoIHRoZSBzYW1lIHZpZXcgYXMgcGFyYW1ldGVyIHJldHVybnMgdGhlIHNhbWUKKyAqIGhh
bmRsZS4gVGhpcyBoYW5kbGUgaXMgYWxpdmUgd2hpbGUgdmlldyBpcyBhbGl2ZSwgdGh1cyBvbmUK
KyAqIG1pZ2h0IHdhbnQgdG8gbGlzdGVuIGZvciBFVkFTX0NBTExCQUNLX0RFTCBvbiBnaXZlbiB2
aWV3CisgKiAoQGEgbykgdG8ga25vdyB3aGVuIHRvIHN0b3AgdXNpbmcgcmV0dXJuZWQgaGFuZGxl
LgorICoKKyAqIEBwYXJhbSBvIHZpZXcgb2JqZWN0IHRvIGdldCBuYXZpZ2F0aW9uIGJhY2stZm9y
d2FyZCBsaXN0CisgKgorICogQHJldHVybiB0aGUgYmFjay1mb3J3YXJkIGxpc3QgaW5zdGFuY2Ug
aGFuZGxlIGFzc29jaWF0ZWQgd2l0aCB0aGlzIHZpZXcKKyAqLworRUFQSSBFd2tfQmFja19Gb3J3
YXJkX0xpc3QgKmV3a192aWV3X2JhY2tfZm9yd2FyZF9saXN0X2dldChjb25zdCBFdmFzX09iamVj
dCAqbyk7CisKKy8qKgogICogR2V0cyB0aGUgY3VycmVudCB0aXRsZSBvZiB0aGUgbWFpbiBmcmFt
ZS4KICAqCiAgKiBJdCByZXR1cm5zIGFuIGludGVybmFsIHN0cmluZyBhbmQgc2hvdWxkIG5vdApk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9lZmwvZXdrX3ZpZXdfbG9h
ZGVyX2NsaWVudC5jcHAgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2VmbC9ld2tfdmll
d19sb2FkZXJfY2xpZW50LmNwcAppbmRleCBjYzhiMTIwLi5lNzdkNjEzIDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2VmbC9ld2tfdmlld19sb2FkZXJfY2xpZW50LmNw
cAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2VmbC9ld2tfdmlld19sb2FkZXJf
Y2xpZW50LmNwcApAQCAtMjYsMTAgKzI2LDEyIEBACiAjaW5jbHVkZSAiY29uZmlnLmgiCiAKICNp
bmNsdWRlICJXS0ZyYW1lLmgiCisjaW5jbHVkZSAiZXdrX2JhY2tfZm9yd2FyZF9saXN0X3ByaXZh
dGUuaCIKICNpbmNsdWRlICJld2tfaW50ZW50LmgiCiAjaW5jbHVkZSAiZXdrX2ludGVudF9wcml2
YXRlLmgiCiAjaW5jbHVkZSAiZXdrX2ludGVudF9zZXJ2aWNlLmgiCiAjaW5jbHVkZSAiZXdrX2lu
dGVudF9zZXJ2aWNlX3ByaXZhdGUuaCIKKyNpbmNsdWRlICJld2tfdmlldy5oIgogI2luY2x1ZGUg
ImV3a192aWV3X2xvYWRlcl9jbGllbnRfcHJpdmF0ZS5oIgogI2luY2x1ZGUgImV3a192aWV3X3By
aXZhdGUuaCIKICNpbmNsdWRlICJld2tfd2ViX2Vycm9yLmgiCkBAIC0xMjMsNiArMTI1LDE0IEBA
IHN0YXRpYyB2b2lkIGRpZEZhaWxQcm92aXNpb25hbExvYWRXaXRoRXJyb3JGb3JGcmFtZShXS1Bh
Z2VSZWYgcGFnZSwgV0tGcmFtZVJlZiBmCiAgICAgZXdrX3dlYl9lcnJvcl9mcmVlKGV3a0Vycm9y
KTsKIH0KIAorc3RhdGljIHZvaWQgZGlkQ2hhbmdlQmFja0ZvcndhcmRMaXN0KFdLUGFnZVJlZiBw
YWdlLCBXS0JhY2tGb3J3YXJkTGlzdEl0ZW1SZWYgYWRkZWRJdGVtLCBXS0FycmF5UmVmIHJlbW92
ZWRJdGVtcywgY29uc3Qgdm9pZCogY2xpZW50SW5mbykKK3sKKyAgICBFdmFzX09iamVjdCogZXdr
VmlldyA9IHN0YXRpY19jYXN0PEV2YXNfT2JqZWN0Kj4oY29uc3RfY2FzdDx2b2lkKj4oY2xpZW50
SW5mbykpOworICAgIEFTU0VSVChld2tWaWV3KTsKKworICAgIGV3a19iYWNrX2ZvcndhcmRfbGlz
dF9jaGFuZ2VkKGV3a192aWV3X2JhY2tfZm9yd2FyZF9saXN0X2dldChld2tWaWV3KSwgYWRkZWRJ
dGVtLCByZW1vdmVkSXRlbXMpOworfQorCiB2b2lkIGV3a192aWV3X2xvYWRlcl9jbGllbnRfYXR0
YWNoKFdLUGFnZVJlZiBwYWdlUmVmLCBFdmFzX09iamVjdCogZXdrVmlldykKIHsKICAgICBXS1Bh
Z2VMb2FkZXJDbGllbnQgbG9hZENsaWVudDsKQEAgLTE0NCw1ICsxNTQsNiBAQCB2b2lkIGV3a192
aWV3X2xvYWRlcl9jbGllbnRfYXR0YWNoKFdLUGFnZVJlZiBwYWdlUmVmLCBFdmFzX09iamVjdCog
ZXdrVmlldykKICAgICBsb2FkQ2xpZW50LmRpZFN0YXJ0UHJvdmlzaW9uYWxMb2FkRm9yRnJhbWUg
PSBkaWRTdGFydFByb3Zpc2lvbmFsTG9hZEZvckZyYW1lOwogICAgIGxvYWRDbGllbnQuZGlkUmVj
ZWl2ZVNlcnZlclJlZGlyZWN0Rm9yUHJvdmlzaW9uYWxMb2FkRm9yRnJhbWUgPSBkaWRSZWNlaXZl
U2VydmVyUmVkaXJlY3RGb3JQcm92aXNpb25hbExvYWRGb3JGcmFtZTsKICAgICBsb2FkQ2xpZW50
LmRpZEZhaWxQcm92aXNpb25hbExvYWRXaXRoRXJyb3JGb3JGcmFtZSA9IGRpZEZhaWxQcm92aXNp
b25hbExvYWRXaXRoRXJyb3JGb3JGcmFtZTsKKyAgICBsb2FkQ2xpZW50LmRpZENoYW5nZUJhY2tG
b3J3YXJkTGlzdCA9IGRpZENoYW5nZUJhY2tGb3J3YXJkTGlzdDsKICAgICBXS1BhZ2VTZXRQYWdl
TG9hZGVyQ2xpZW50KHBhZ2VSZWYsICZsb2FkQ2xpZW50KTsKIH0K
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>156654</attachid>
            <date>2012-08-06 04:13:17 -0700</date>
            <delta_ts>2012-08-07 02:38:47 -0700</delta_ts>
            <desc>patch v7</desc>
            <filename>bug92345_v7</filename>
            <type>text/plain</type>
            <size>32971</size>
            <attacher name="Mikhail Pozdnyakov">mikhail.pozdnyakov</attacher>
            
              <data encoding="base64">Y29tbWl0IGY0MTlmNGU5MDgxYjkwNjliZjY1YzJmZmQ1MzJkZGZkMWFkYTE3YzYKQXV0aG9yOiBN
aWtoYWlsIFBvemRueWFrb3YgPG1pa2hhaWwucG96ZG55YWtvdkBpbnRlbC5jb20+CkRhdGU6ICAg
RnJpIEp1bCAyNyAxMzowOToyOSAyMDEyICswMzAwCgogICAgYnVnOTIzNDUKCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViS2l0Mi9DaGFuZ2VMb2cgYi9Tb3VyY2UvV2ViS2l0Mi9DaGFuZ2VMb2cKaW5k
ZXggNTFjMDdjZS4uMGI4M2EyYyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvQ2hhbmdlTG9n
CisrKyBiL1NvdXJjZS9XZWJLaXQyL0NoYW5nZUxvZwpAQCAtMSwzICsxLDUyIEBACisyMDEyLTA3
LTI3ICBNaWtoYWlsIFBvemRueWFrb3YgIDxtaWtoYWlsLnBvemRueWFrb3ZAaW50ZWwuY29tPgor
CisgICAgICAgIFtFRkxdW1dLMl0gQWRkIGJhY2sgZm9yd2FyZCBsaXN0IEFQSQorICAgICAgICBo
dHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9OTIzNDUKKworICAgICAgICBS
ZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBBZGRlZCBuZXcgQmFjayBGb3J3
YXJkIGxpc3QgQVBJIHRvIEVGTCBXSzIuIEV3a19CYWNrX0ZvcndhcmRfTGlzdCBhbmQKKyAgICAg
ICAgRXdrX0JhY2tfRm9yd2FyZF9MaXN0X0l0ZW0gc3RydWN0dXJlcyB3ZXJlIGFkZGVkLiBUaGUg
bmV3IEFQSSBpcworICAgICAgICBtb3N0bHkgdGhlIHNhbWUgYXMgb25lIGZyb20gVUlQcm9jZXNz
L0FQSS9DL3sgV0tCYWNrRm9yd2FyZExpc3QuaCwgV0tCYWNrRm9yd2FyZExpc3RJdGVtLmggfS4K
KworICAgICAgICAqIFBsYXRmb3JtRWZsLmNtYWtlOgorICAgICAgICAqIFVJUHJvY2Vzcy9BUEkv
ZWZsL2V3a19iYWNrX2ZvcndhcmRfbGlzdC5jcHA6IEFkZGVkLgorICAgICAgICAoX0V3a19CYWNr
X0ZvcndhcmRfTGlzdCk6CisgICAgICAgIChfRXdrX0JhY2tfRm9yd2FyZF9MaXN0OjpfRXdrX0Jh
Y2tfRm9yd2FyZF9MaXN0KToKKyAgICAgICAgKGdldE9yQ3JlYXRlSXRlbSk6CisgICAgICAgICh3
ZWJraXRfYmFja19mb3J3YXJkX2xpc3RfY3VycmVudF9pdGVtX2dldCk6CisgICAgICAgICh3ZWJr
aXRfYmFja19mb3J3YXJkX2xpc3RfYmFja19pdGVtX2dldCk6CisgICAgICAgICh3ZWJraXRfYmFj
a19mb3J3YXJkX2xpc3RfZm9yd2FyZF9pdGVtX2dldCk6CisgICAgICAgICh3ZWJraXRfYmFja19m
b3J3YXJkX2xpc3RfaXRlbV9hdF9pbmRleF9nZXQpOgorICAgICAgICAod2Via2l0X2JhY2tfZm9y
d2FyZF9saXN0X2xlbmd0aF9nZXQpOgorICAgICAgICAoZXdrX2JhY2tfZm9yd2FyZF9saXN0X2No
YW5nZWQpOgorICAgICAgICAoZXdrX2JhY2tfZm9yd2FyZF9saXN0X25ldyk6CisgICAgICAgIChl
d2tfYmFja19mb3J3YXJkX2xpc3RfZnJlZSk6CisgICAgICAgICogVUlQcm9jZXNzL0FQSS9lZmwv
ZXdrX2JhY2tfZm9yd2FyZF9saXN0Lmg6IEFkZGVkLgorICAgICAgICAqIFVJUHJvY2Vzcy9BUEkv
ZWZsL2V3a19iYWNrX2ZvcndhcmRfbGlzdF9pdGVtLmNwcDogQWRkZWQuCisgICAgICAgIChnZXRJ
dGVtUHJvcGVydHkpOgorICAgICAgICAoX0V3a19CYWNrX0ZvcndhcmRfTGlzdF9JdGVtKToKKyAg
ICAgICAgKF9Fd2tfQmFja19Gb3J3YXJkX0xpc3RfSXRlbTo6X0V3a19CYWNrX0ZvcndhcmRfTGlz
dF9JdGVtKToKKyAgICAgICAgKF9Fd2tfQmFja19Gb3J3YXJkX0xpc3RfSXRlbTo6fl9Fd2tfQmFj
a19Gb3J3YXJkX0xpc3RfSXRlbSk6CisgICAgICAgIChld2tfYmFja19mb3J3YXJkX2xpc3RfaXRl
bV9yZWYpOgorICAgICAgICAoZXdrX2JhY2tfZm9yd2FyZF9saXN0X2l0ZW1fdW5yZWYpOgorICAg
ICAgICAoZXdrX2JhY2tfZm9yd2FyZF9saXN0X2l0ZW1fdXJpX2dldCk6CisgICAgICAgIChld2tf
YmFja19mb3J3YXJkX2xpc3RfaXRlbV90aXRsZV9nZXQpOgorICAgICAgICAoZXdrX2JhY2tfZm9y
d2FyZF9saXN0X2l0ZW1fb3JpZ2luYWxfdXJpX2dldCk6CisgICAgICAgIChld2tfYmFja19mb3J3
YXJkX2xpc3RfaXRlbV9uZXcpOgorICAgICAgICAqIFVJUHJvY2Vzcy9BUEkvZWZsL2V3a19iYWNr
X2ZvcndhcmRfbGlzdF9pdGVtLmg6IEFkZGVkLgorICAgICAgICAqIFVJUHJvY2Vzcy9BUEkvZWZs
L2V3a19iYWNrX2ZvcndhcmRfbGlzdF9pdGVtX3ByaXZhdGUuaDogQWRkZWQuCisgICAgICAgICog
VUlQcm9jZXNzL0FQSS9lZmwvZXdrX2JhY2tfZm9yd2FyZF9saXN0X3ByaXZhdGUuaDogQWRkZWQu
CisgICAgICAgICogVUlQcm9jZXNzL0FQSS9lZmwvZXdrX3ZpZXcuY3BwOgorICAgICAgICAoX0V3
a19WaWV3X1ByaXZhdGVfRGF0YSk6CisgICAgICAgIChfRXdrX1ZpZXdfUHJpdmF0ZV9EYXRhOjpf
RXdrX1ZpZXdfUHJpdmF0ZV9EYXRhKToKKyAgICAgICAgKF9Fd2tfVmlld19Qcml2YXRlX0RhdGE6
On5fRXdrX1ZpZXdfUHJpdmF0ZV9EYXRhKToKKyAgICAgICAgKGV3a192aWV3X2JhY2tfZm9yd2Fy
ZF9saXN0X2dldCk6IE5ldyBmdW5jdGlvbiB0byBnZXQgYmFjay1mb3J3YXJkIGxpc3QuCisgICAg
ICAgICogVUlQcm9jZXNzL0FQSS9lZmwvZXdrX3ZpZXcuaDoKKyAgICAgICAgKiBVSVByb2Nlc3Mv
QVBJL2VmbC9ld2tfdmlld19sb2FkZXJfY2xpZW50LmNwcDoKKyAgICAgICAgKGRpZENoYW5nZUJh
Y2tGb3J3YXJkTGlzdCk6IFRoZSBjYWxsYmFjayBhZGRlZCB0byB1cGRhdGUgYmFjay1mb3J3YXJk
IGxpc3QgaXRlbXMgY2FjaGUuCisgICAgICAgIChld2tfdmlld19sb2FkZXJfY2xpZW50X2F0dGFj
aCk6CisKIDIwMTItMDgtMDUgIEJlbmphbWluIFBvdWxhaW4gIDxicG91bGFpbkBhcHBsZS5jb20+
CiAKICAgICAgICAgQXNzZXJ0IGluIGNoZWNrVmFsaWRpdHkoKSBpbiBoYXNodGFibGUuaCBmcm9t
IFdlYkdlb2xvY2F0aW9uTWFuYWdlcjo6ZGlkRmFpbFRvRGV0ZXJtaW5lUG9zaXRpb24oKSB3aGVu
IGZldGNoaW5nIGh0dHA6Ly9odG1sNWRlbW9zLmNvbS9nZW8KZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJLaXQyL1BsYXRmb3JtRWZsLmNtYWtlIGIvU291cmNlL1dlYktpdDIvUGxhdGZvcm1FZmwuY21h
a2UKaW5kZXggOWJjYmRiMC4uZjdiODQwYiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvUGxh
dGZvcm1FZmwuY21ha2UKKysrIGIvU291cmNlL1dlYktpdDIvUGxhdGZvcm1FZmwuY21ha2UKQEAg
LTQxLDYgKzQxLDggQEAgTElTVChBUFBFTkQgV2ViS2l0Ml9TT1VSQ0VTCiAgICAgVUlQcm9jZXNz
L0FQSS9lZmwvTmV0d29ya0luZm9Qcm92aWRlci5jcHAKICAgICBVSVByb2Nlc3MvQVBJL2VmbC9Q
YWdlQ2xpZW50SW1wbC5jcHAKICAgICBVSVByb2Nlc3MvQVBJL2VmbC9WaWJyYXRpb25Qcm92aWRl
ci5jcHAKKyAgICBVSVByb2Nlc3MvQVBJL2VmbC9ld2tfYmFja19mb3J3YXJkX2xpc3QuY3BwCisg
ICAgVUlQcm9jZXNzL0FQSS9lZmwvZXdrX2JhY2tfZm9yd2FyZF9saXN0X2l0ZW0uY3BwCiAgICAg
VUlQcm9jZXNzL0FQSS9lZmwvZXdrX2NvbnRleHQuY3BwCiAgICAgVUlQcm9jZXNzL0FQSS9lZmwv
ZXdrX2NvbnRleHRfZG93bmxvYWRfY2xpZW50LmNwcAogICAgIFVJUHJvY2Vzcy9BUEkvZWZsL2V3
a19jb250ZXh0X3JlcXVlc3RfbWFuYWdlcl9jbGllbnQuY3BwCkBAIC0xODcsNiArMTg5LDggQEAg
U0VUKEZvcndhcmRpbmdOZXR3b3JrSGVhZGVyc19OQU1FIGZvcndhcmRpbmctaGVhZGVyU291cCkK
IENPTkZJR1VSRV9GSUxFKGVmbC9ld2Via2l0Mi5wYy5pbiAke0NNQUtFX0JJTkFSWV9ESVJ9L1dl
YktpdDIvZWZsL2V3ZWJraXQyLnBjIEBPTkxZKQogU0VUIChFV2ViS2l0Ml9IRUFERVJTCiAgICAg
IiR7Q01BS0VfQ1VSUkVOVF9TT1VSQ0VfRElSfS9VSVByb2Nlc3MvQVBJL2VmbC9FV2ViS2l0Mi5o
IgorICAgICIke0NNQUtFX0NVUlJFTlRfU09VUkNFX0RJUn0vVUlQcm9jZXNzL0FQSS9lZmwvZXdr
X2JhY2tfZm9yd2FyZF9saXN0LmgiCisgICAgIiR7Q01BS0VfQ1VSUkVOVF9TT1VSQ0VfRElSfS9V
SVByb2Nlc3MvQVBJL2VmbC9ld2tfYmFja19mb3J3YXJkX2xpc3RfaXRlbS5oIgogICAgICIke0NN
QUtFX0NVUlJFTlRfU09VUkNFX0RJUn0vVUlQcm9jZXNzL0FQSS9lZmwvZXdrX2NvbnRleHQuaCIK
ICAgICAiJHtDTUFLRV9DVVJSRU5UX1NPVVJDRV9ESVJ9L1VJUHJvY2Vzcy9BUEkvZWZsL2V3a19j
b29raWVfbWFuYWdlci5oIgogICAgICIke0NNQUtFX0NVUlJFTlRfU09VUkNFX0RJUn0vVUlQcm9j
ZXNzL0FQSS9lZmwvZXdrX2Rvd25sb2FkX2pvYi5oIgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktp
dDIvVUlQcm9jZXNzL0FQSS9lZmwvRVdlYktpdDIuaCBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vz
cy9BUEkvZWZsL0VXZWJLaXQyLmgKaW5kZXggOWEwNTJkYS4uZDk4MDIzZCAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9lZmwvRVdlYktpdDIuaAorKysgYi9Tb3VyY2Uv
V2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2VmbC9FV2ViS2l0Mi5oCkBAIC0yOCw2ICsyOCw4IEBACiAj
aWZuZGVmIEVXZWJLaXQyX2gKICNkZWZpbmUgRVdlYktpdDJfaAogCisjaW5jbHVkZSAiZXdrX2Jh
Y2tfZm9yd2FyZF9saXN0LmgiCisjaW5jbHVkZSAiZXdrX2JhY2tfZm9yd2FyZF9saXN0X2l0ZW0u
aCIKICNpbmNsdWRlICJld2tfY29udGV4dC5oIgogI2luY2x1ZGUgImV3a19jb29raWVfbWFuYWdl
ci5oIgogI2luY2x1ZGUgImV3a19kb3dubG9hZF9qb2IuaCIKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZWZsL2V3a19iYWNrX2ZvcndhcmRfbGlzdC5jcHAgYi9Tb3Vy
Y2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2VmbC9ld2tfYmFja19mb3J3YXJkX2xpc3QuY3BwCm5l
dyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjViOGUyZDcKLS0tIC9kZXYvbnVsbAor
KysgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2VmbC9ld2tfYmFja19mb3J3YXJkX2xp
c3QuY3BwCkBAIC0wLDAgKzEsMTYxIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEyIEludGVs
IENvcnBvcmF0aW9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9u
IGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICog
bW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBj
b25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBj
b2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJl
ZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29w
eXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhl
ciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMg
U09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBg
YEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBN
RVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBB
UkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJ
QlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFM
LCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBH
T09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lO
RVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9G
IExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9S
IFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4g
QU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQg
T0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAi
Y29uZmlnLmgiCisjaW5jbHVkZSAiZXdrX2JhY2tfZm9yd2FyZF9saXN0LmgiCisKKyNpbmNsdWRl
ICJXS0FQSUNhc3QuaCIKKyNpbmNsdWRlICJXS0FycmF5LmgiCisjaW5jbHVkZSAiV0tCYWNrRm9y
d2FyZExpc3QuaCIKKyNpbmNsdWRlICJXS1JldGFpblB0ci5oIgorI2luY2x1ZGUgImV3a19iYWNr
X2ZvcndhcmRfbGlzdF9pdGVtX3ByaXZhdGUuaCIKKyNpbmNsdWRlIDx3dGYvdGV4dC9DU3RyaW5n
Lmg+CisKK3VzaW5nIG5hbWVzcGFjZSBXZWJLaXQ7CisKK3R5cGVkZWYgSGFzaE1hcDxXS0JhY2tG
b3J3YXJkTGlzdEl0ZW1SZWYsIEV3a19CYWNrX0ZvcndhcmRfTGlzdF9JdGVtKj4gSXRlbXNNYXA7
CisKKy8qKgorICogXHN0cnVjdCAgX0V3a19CYWNrX0ZvcndhcmRfTGlzdAorICogQGJyaWVmICAg
Q29udGFpbnMgdGhlIEJhY2sgRm9yd2FyZCBMaXN0IGRhdGEuCisgKi8KK3N0cnVjdCBfRXdrX0Jh
Y2tfRm9yd2FyZF9MaXN0IHsKKyAgICBXS1JldGFpblB0cjxXS0JhY2tGb3J3YXJkTGlzdFJlZj4g
d2tMaXN0OworICAgIG11dGFibGUgSXRlbXNNYXAgd3JhcHBlckNhY2hlOworCisgICAgX0V3a19C
YWNrX0ZvcndhcmRfTGlzdChXS0JhY2tGb3J3YXJkTGlzdFJlZiBsaXN0UmVmKQorICAgICAgICA6
IHdrTGlzdChsaXN0UmVmKQorICAgIHsgfQorCisgICAgfl9Fd2tfQmFja19Gb3J3YXJkX0xpc3Qo
KQorICAgIHsKKyAgICAgICAgSXRlbXNNYXA6Oml0ZXJhdG9yIGl0ID0gd3JhcHBlckNhY2hlLmJl
Z2luKCk7CisgICAgICAgIEl0ZW1zTWFwOjppdGVyYXRvciBlbmQgPSB3cmFwcGVyQ2FjaGUuZW5k
KCk7CisgICAgICAgIGZvciAoOyBpdCAhPSBlbmQ7ICsraXQpCisgICAgICAgICAgICBld2tfYmFj
a19mb3J3YXJkX2xpc3RfaXRlbV91bnJlZihpdC0+c2Vjb25kKTsKKyAgICB9Cit9OworCisjZGVm
aW5lIEVXS19CQUNLX0ZPUldBUkRfTElTVF9XS19HRVRfT1JfUkVUVVJOKGxpc3QsIHdrTGlzdF8s
IC4uLikgIFwKKyAgICBpZiAoIShsaXN0KSkgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIFwKKyAgICAgICAgRUlOQV9MT0dfQ1JJVCgibGlzdCBpcyBOVUxMLiIp
OyAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgcmV0dXJuIF9fVkFfQVJHU19fOyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICB9ICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICBpZiAoIShs
aXN0KS0+d2tMaXN0KSB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAg
ICAgICAgRUlOQV9MT0dfQ1JJVCgibGlzdC0+d2tMaXN0IGlzIE5VTEwuIik7ICAgICAgICAgICAg
ICAgIFwKKyAgICAgICAgcmV0dXJuIF9fVkFfQVJHU19fOyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIFwKKyAgICB9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICBXS0JhY2tGb3J3YXJkTGlzdFJlZiB3a0xpc3Rf
ID0gKGxpc3QpLT53a0xpc3QuZ2V0KCkKKworCitzdGF0aWMgaW5saW5lIEV3a19CYWNrX0Zvcndh
cmRfTGlzdF9JdGVtKiBhZGRJdGVtVG9XcmFwcGVyQ2FjaGUoY29uc3QgRXdrX0JhY2tfRm9yd2Fy
ZF9MaXN0KiBsaXN0LCBXS0JhY2tGb3J3YXJkTGlzdEl0ZW1SZWYgd2tJdGVtKQoreworICAgIEVJ
TkFfU0FGRVRZX09OX05VTExfUkVUVVJOX1ZBTChsaXN0LCAwKTsKKyAgICBFSU5BX1NBRkVUWV9P
Tl9OVUxMX1JFVFVSTl9WQUwod2tJdGVtLCAwKTsKKworICAgIEV3a19CYWNrX0ZvcndhcmRfTGlz
dF9JdGVtKiBpdGVtID0gbGlzdC0+d3JhcHBlckNhY2hlLmdldCh3a0l0ZW0pOworICAgIGlmICgh
aXRlbSkgeworICAgICAgICBpdGVtID0gZXdrX2JhY2tfZm9yd2FyZF9saXN0X2l0ZW1fbmV3KHdr
SXRlbSk7CisgICAgICAgIGxpc3QtPndyYXBwZXJDYWNoZS5zZXQod2tJdGVtLCBpdGVtKTsKKyAg
ICB9CisKKyAgICByZXR1cm4gaXRlbTsKK30KKworRXdrX0JhY2tfRm9yd2FyZF9MaXN0X0l0ZW0q
IGV3a19iYWNrX2ZvcndhcmRfbGlzdF9jdXJyZW50X2l0ZW1fZ2V0KGNvbnN0IEV3a19CYWNrX0Zv
cndhcmRfTGlzdCogbGlzdCkKK3sKKyAgICBFV0tfQkFDS19GT1JXQVJEX0xJU1RfV0tfR0VUX09S
X1JFVFVSTihsaXN0LCB3a0xpc3QsIDApOworCisgICAgcmV0dXJuIGFkZEl0ZW1Ub1dyYXBwZXJD
YWNoZShsaXN0LCBXS0JhY2tGb3J3YXJkTGlzdEdldEN1cnJlbnRJdGVtKHdrTGlzdCkpOworfQor
CitFd2tfQmFja19Gb3J3YXJkX0xpc3RfSXRlbSogZXdrX2JhY2tfZm9yd2FyZF9saXN0X3ByZXZp
b3VzX2l0ZW1fZ2V0KGNvbnN0IEV3a19CYWNrX0ZvcndhcmRfTGlzdCogbGlzdCkKK3sKKyAgICBF
V0tfQkFDS19GT1JXQVJEX0xJU1RfV0tfR0VUX09SX1JFVFVSTihsaXN0LCB3a0xpc3QsIDApOwor
CisgICAgcmV0dXJuIGFkZEl0ZW1Ub1dyYXBwZXJDYWNoZShsaXN0LCBXS0JhY2tGb3J3YXJkTGlz
dEdldEJhY2tJdGVtKHdrTGlzdCkpOworfQorCitFd2tfQmFja19Gb3J3YXJkX0xpc3RfSXRlbSog
ZXdrX2JhY2tfZm9yd2FyZF9saXN0X25leHRfaXRlbV9nZXQoY29uc3QgRXdrX0JhY2tfRm9yd2Fy
ZF9MaXN0KiBsaXN0KQoreworICAgIEVXS19CQUNLX0ZPUldBUkRfTElTVF9XS19HRVRfT1JfUkVU
VVJOKGxpc3QsIHdrTGlzdCwgMCk7CisKKyAgICByZXR1cm4gYWRkSXRlbVRvV3JhcHBlckNhY2hl
KGxpc3QsIFdLQmFja0ZvcndhcmRMaXN0R2V0Rm9yd2FyZEl0ZW0od2tMaXN0KSk7Cit9CisKK0V3
a19CYWNrX0ZvcndhcmRfTGlzdF9JdGVtKiBld2tfYmFja19mb3J3YXJkX2xpc3RfaXRlbV9hdF9p
bmRleF9nZXQoY29uc3QgRXdrX0JhY2tfRm9yd2FyZF9MaXN0KiBsaXN0LCBpbnQgaW5kZXgpCit7
CisgICAgRVdLX0JBQ0tfRk9SV0FSRF9MSVNUX1dLX0dFVF9PUl9SRVRVUk4obGlzdCwgd2tMaXN0
LCAwKTsKKworICAgIHJldHVybiBhZGRJdGVtVG9XcmFwcGVyQ2FjaGUobGlzdCwgV0tCYWNrRm9y
d2FyZExpc3RHZXRJdGVtQXRJbmRleCh3a0xpc3QsIGluZGV4KSk7Cit9CisKK3Vuc2lnbmVkIGV3
a19iYWNrX2ZvcndhcmRfbGlzdF9jb3VudChFd2tfQmFja19Gb3J3YXJkX0xpc3QqIGxpc3QpCit7
CisgICAgRVdLX0JBQ0tfRk9SV0FSRF9MSVNUX1dLX0dFVF9PUl9SRVRVUk4obGlzdCwgd2tMaXN0
LCAwKTsKKworICAgIGNvbnN0IHVuc2lnbmVkIGN1cnJlbnRJdGVtID0gZXdrX2JhY2tfZm9yd2Fy
ZF9saXN0X2N1cnJlbnRfaXRlbV9nZXQobGlzdCkgPyAxIDogMDsKKworICAgIHJldHVybiBXS0Jh
Y2tGb3J3YXJkTGlzdEdldEJhY2tMaXN0Q291bnQod2tMaXN0KSArIFdLQmFja0ZvcndhcmRMaXN0
R2V0Rm9yd2FyZExpc3RDb3VudCh3a0xpc3QpICsgY3VycmVudEl0ZW07Cit9CisKKworLyoqCisg
KiBAaW50ZXJuYWwKKyAqIFVwZGF0ZXMgaXRlbXMgY2FjaGUuCisgKi8KK3ZvaWQgZXdrX2JhY2tf
Zm9yd2FyZF9saXN0X2NoYW5nZWQoRXdrX0JhY2tfRm9yd2FyZF9MaXN0KiBsaXN0LCBXS0JhY2tG
b3J3YXJkTGlzdEl0ZW1SZWYgd2tBZGRlZEl0ZW0sIFdLQXJyYXlSZWYgd2tSZW1vdmVkSXRlbXMp
Cit7CisgICAgYWRkSXRlbVRvV3JhcHBlckNhY2hlKGxpc3QsIHdrQWRkZWRJdGVtKTsgLy8gUHV0
cyBuZXcgaXRlbSB0byB0aGUgY2FjaGUuCisKKyAgICBjb25zdCBzaXplX3QgcmVtb3ZlZEl0ZW1z
U2l6ZSA9IHdrUmVtb3ZlZEl0ZW1zID8gV0tBcnJheUdldFNpemUod2tSZW1vdmVkSXRlbXMpIDog
MDsKKyAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IHJlbW92ZWRJdGVtc1NpemU7ICsraSkgewor
ICAgICAgICBXS0JhY2tGb3J3YXJkTGlzdEl0ZW1SZWYgd2tJdGVtID0gc3RhdGljX2Nhc3Q8V0tC
YWNrRm9yd2FyZExpc3RJdGVtUmVmPihXS0FycmF5R2V0SXRlbUF0SW5kZXgod2tSZW1vdmVkSXRl
bXMsIGkpKTsKKyAgICAgICAgaWYgKEV3a19CYWNrX0ZvcndhcmRfTGlzdF9JdGVtKiBpdGVtID0g
bGlzdC0+d3JhcHBlckNhY2hlLnRha2Uod2tJdGVtKSkKKyAgICAgICAgICAgIGV3a19iYWNrX2Zv
cndhcmRfbGlzdF9pdGVtX3VucmVmKGl0ZW0pOworICAgIH0KK30KKworLyoqCisgKiBAaW50ZXJu
YWwKKyAqIENvbnN0cnVjdHMgYSBFd2tfQmFja19Gb3J3YXJkX0xpc3QgZnJvbSBhIFdLQmFja0Zv
cndhcmRMaXN0UmVmLgorICovCitFd2tfQmFja19Gb3J3YXJkX0xpc3QqIGV3a19iYWNrX2Zvcndh
cmRfbGlzdF9uZXcoV0tCYWNrRm9yd2FyZExpc3RSZWYgd2tCYWNrRm9yd2FyZExpc3RSZWYpCit7
CisgICAgRUlOQV9TQUZFVFlfT05fTlVMTF9SRVRVUk5fVkFMKHdrQmFja0ZvcndhcmRMaXN0UmVm
LCAwKTsKKworICAgIHJldHVybiBuZXcgRXdrX0JhY2tfRm9yd2FyZF9MaXN0KHdrQmFja0Zvcndh
cmRMaXN0UmVmKTsKK30KKworLyoqCisgKiBAaW50ZXJuYWwKKyAqIEZyZWVzIGEgRXdrX0JhY2tf
Rm9yd2FyZF9MaXN0IG9iamVjdC4KKyAqLwordm9pZCBld2tfYmFja19mb3J3YXJkX2xpc3RfZnJl
ZShFd2tfQmFja19Gb3J3YXJkX0xpc3QqIGxpc3QpCit7CisgICAgRUlOQV9TQUZFVFlfT05fTlVM
TF9SRVRVUk4obGlzdCk7CisKKyAgICBkZWxldGUgbGlzdDsKK30KZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZWZsL2V3a19iYWNrX2ZvcndhcmRfbGlzdC5oIGIvU291
cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9lZmwvZXdrX2JhY2tfZm9yd2FyZF9saXN0LmgKbmV3
IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNWI5Y2NhNwotLS0gL2Rldi9udWxsCisr
KyBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZWZsL2V3a19iYWNrX2ZvcndhcmRfbGlz
dC5oCkBAIC0wLDAgKzEsOTIgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTIgSW50ZWwgQ29y
cG9yYXRpb24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5k
IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2Rp
ZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRp
dGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUg
bXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0
cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1h
dGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZU
V0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMg
SVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNI
QU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBE
SVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRP
UlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQ
RUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RT
IE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MK
KyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElB
QklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9S
VCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkg
V0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgor
ICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKy8qKgorICogQGZpbGUg
ICAgZXdrX2JhY2tfZm9yd2FyZF9saXN0LmgKKyAqIEBicmllZiAgIERlc2NyaWJlcyB0aGUgRXdr
IEJhY2sgRm9yd2FyZCBMaXN0IEFQSS4KKyAqLworCisjaWZuZGVmIGV3a19iYWNrX2ZvcndhcmRf
bGlzdF9oCisjZGVmaW5lIGV3a19iYWNrX2ZvcndhcmRfbGlzdF9oCisKKyNpbmNsdWRlICJld2tf
YmFja19mb3J3YXJkX2xpc3RfaXRlbS5oIgorCisjaWZkZWYgX19jcGx1c3BsdXMKK2V4dGVybiAi
QyIgeworI2VuZGlmCisKKy8qKiBDcmVhdGVzIGEgdHlwZSBuYW1lIGZvciBfRXdrX0JhY2tfRm9y
d2FyZF9MaXN0ICovCit0eXBlZGVmIHN0cnVjdCBfRXdrX0JhY2tfRm9yd2FyZF9MaXN0IEV3a19C
YWNrX0ZvcndhcmRfTGlzdDsKKworLyoqCisgKiBSZXR1cm5zIHRoZSBjdXJyZW50IGl0ZW0gaW4g
dGhlIEBhIGxpc3QuCisgKgorICogQHBhcmFtIGxpc3QgdGhlIGJhY2stZm9yd2FyZCBsaXN0IGlu
c3RhbmNlCisgKgorICogQHJldHVybiB0aGUgY3VycmVudCBpdGVtIGluIHRoZSBAYSBsaXN0IG9y
IEBjIE5VTEwgaW4gY2FzZSBvZiBlcnJvcgorICovCitFQVBJIEV3a19CYWNrX0ZvcndhcmRfTGlz
dF9JdGVtICpld2tfYmFja19mb3J3YXJkX2xpc3RfY3VycmVudF9pdGVtX2dldChjb25zdCBFd2tf
QmFja19Gb3J3YXJkX0xpc3QgKmxpc3QpOworCisvKioKKyAqIFJldHVybnMgdGhlIGl0ZW0gdGhh
dCBwcmVjZWRlcyB0aGUgY3VycmVudCBpdGVtIGluIHRoZSBAYSBsaXN0LgorICoKKyAqIEBwYXJh
bSBsaXN0IHRoZSBiYWNrLWZvcndhcmQgbGlzdCBpbnN0YW5jZQorICoKKyAqIEByZXR1cm4gdGhl
IGl0ZW0gdGhhdCBwcmVjZWRlcyB0aGUgY3VycmVudCBpdGVtIHRoZSBAYSBsaXN0IG9yIEBjIE5V
TEwgaW4gY2FzZSBvZiBlcnJvcgorICovCitFQVBJIEV3a19CYWNrX0ZvcndhcmRfTGlzdF9JdGVt
ICpld2tfYmFja19mb3J3YXJkX2xpc3RfcHJldmlvdXNfaXRlbV9nZXQoY29uc3QgRXdrX0JhY2tf
Rm9yd2FyZF9MaXN0ICpsaXN0KTsKKworLyoqCisgKiBSZXR1cm5zIHRoZSBpdGVtIHRoYXQgZm9s
bG93cyB0aGUgY3VycmVudCBpdGVtIGluIHRoZSBAYSBsaXN0LgorICoKKyAqIEBwYXJhbSBsaXN0
IHRoZSBiYWNrLWZvcndhcmQgbGlzdCBpbnN0YW5jZQorICoKKyAqIEByZXR1cm4gdGhlIGl0ZW0g
dGhhdCBmb2xsb3dzIHRoZSBjdXJyZW50IGl0ZW0gaW4gdGhlIEBhIGxpc3Qgb3IgQGMgTlVMTCBp
biBjYXNlIG9mIGVycm9yCisgKi8KK0VBUEkgRXdrX0JhY2tfRm9yd2FyZF9MaXN0X0l0ZW0gKmV3
a19iYWNrX2ZvcndhcmRfbGlzdF9uZXh0X2l0ZW1fZ2V0KGNvbnN0IEV3a19CYWNrX0ZvcndhcmRf
TGlzdCAqbGlzdCk7CisKKy8qKgorICogUmV0dXJucyB0aGUgaXRlbSBhdCBhIGdpdmVuIEBhIGlu
ZGV4IHJlbGF0aXZlIHRvIHRoZSBjdXJyZW50IGl0ZW0uCisgKgorICogQHBhcmFtIGxpc3QgdGhl
IGJhY2stZm9yd2FyZCBsaXN0IGluc3RhbmNlCisgKiBAcGFyYW0gaW5kZXggdGhlIGluZGV4IG9m
IHRoZSBpdGVtCisgKgorICogQHJldHVybiB0aGUgaXRlbSBhdCBhIGdpdmVuIEBhIGluZGV4IHJl
bGF0aXZlIHRvIHRoZSBjdXJyZW50IGl0ZW0gb3IgQGMgTlVMTCBpbiBjYXNlIG9mIGVycm9yCisg
Ki8KK0VBUEkgRXdrX0JhY2tfRm9yd2FyZF9MaXN0X0l0ZW0gKmV3a19iYWNrX2ZvcndhcmRfbGlz
dF9pdGVtX2F0X2luZGV4X2dldChjb25zdCBFd2tfQmFja19Gb3J3YXJkX0xpc3QgKmxpc3QsIGlu
dCBpbmRleCk7CisKKy8qKgorICogUmV0dXJucyB0aGUgbGVuZ3RoIG9mIHRoZSBiYWNrLWZvcndh
cmQgbGlzdCBpbmNsdWRpbmcgY3VycmVudCBpdGVtLgorICoKKyAqIEBwYXJhbSBsaXN0IHRoZSBi
YWNrLWZvcndhcmQgbGlzdCBpbnN0YW5jZQorICoKKyAqIEByZXR1cm4gdGhlIGxlbmd0aCBvZiB0
aGUgYmFjay1mb3J3YXJkIGxpc3QgaW5jbHVkaW5nIGN1cnJlbnQgaXRlbSBvciBAYyAwIGluIGNh
c2Ugb2YgZXJyb3IKKyAqLworRUFQSSB1bnNpZ25lZCBld2tfYmFja19mb3J3YXJkX2xpc3RfY291
bnQoRXdrX0JhY2tfRm9yd2FyZF9MaXN0ICpsaXN0KTsKKworI2lmZGVmIF9fY3BsdXNwbHVzCit9
CisjZW5kaWYKKyNlbmRpZiAvLyBld2tfYmFja19mb3J3YXJkX2xpc3RfaApkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9lZmwvZXdrX2JhY2tfZm9yd2FyZF9saXN0X2l0
ZW0uY3BwIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9lZmwvZXdrX2JhY2tfZm9yd2Fy
ZF9saXN0X2l0ZW0uY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjg1N2Fi
OWYKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2VmbC9l
d2tfYmFja19mb3J3YXJkX2xpc3RfaXRlbS5jcHAKQEAgLTAsMCArMSwxMzUgQEAKKy8qCisgKiBD
b3B5cmlnaHQgKEMpIDIwMTIgSW50ZWwgQ29ycG9yYXRpb24uIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jt
cywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlk
ZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRp
c3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdo
dAorICogICAgbm90aWNlLCB0aGlzIGl0ZW0gb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3Qg
cmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBpdGVtIG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRv
Y3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0
cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMu
IEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElN
UExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUg
SU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQ
QVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBB
UFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVD
VCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNF
UVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVN
RU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFU
QSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVT
RUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFD
VCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RI
RVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09G
VFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFN
QUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJld2tfYmFja19mb3J3
YXJkX2xpc3RfaXRlbS5oIgorCisjaW5jbHVkZSAiV0tBUElDYXN0LmgiCisjaW5jbHVkZSAiV0tC
YWNrRm9yd2FyZExpc3RJdGVtLmgiCisjaW5jbHVkZSAiV0tSZXRhaW5QdHIuaCIKKyNpbmNsdWRl
ICJXS1N0cmluZy5oIgorI2luY2x1ZGUgIldLVVJMLmgiCisjaW5jbHVkZSA8d3RmL3RleHQvQ1N0
cmluZy5oPgorCit1c2luZyBuYW1lc3BhY2UgV2ViS2l0OworCitjbGFzcyBXS0VpbmFTaGFyZWRT
dHJpbmcgeworcHVibGljOgorICAgIHRlbXBsYXRlIDx0eXBlbmFtZSBXS1JlZlR5cGU+CisgICAg
V0tFaW5hU2hhcmVkU3RyaW5nKFdLQWRvcHRUYWcsIFdLUmVmVHlwZSBzdHJSZWYpCisgICAgICAg
IDogbV9zdHIoMCkKKyAgICB7CisgICAgICAgIGlmIChzdHJSZWYpIHsKKyAgICAgICAgICAgIG1f
c3RyID0gZWluYV9zdHJpbmdzaGFyZV9hZGQodG9JbXBsKHN0clJlZiktPnN0cmluZygpLnV0Zjgo
KS5kYXRhKCkpOworICAgICAgICAgICAgQVNTRVJUKG1fc3RyKTsKKyAgICAgICAgICAgIFdLUmVs
ZWFzZShzdHJSZWYpOyAvLyBIYXZlIHN0b3JlZCBhIGNvcHkgaW50byBlaW5hX3N0cmluZ3NoYXJl
LCBkbyBub3QgbmVlZCBhZG9wdGVkIHN0clJlZi4KKyAgICAgICAgfQorICAgIH0KKworICAgIHRl
bXBsYXRlIDx0eXBlbmFtZSBXS1JlZlR5cGU+CisgICAgV0tFaW5hU2hhcmVkU3RyaW5nKFdLUmVm
VHlwZSBzdHJSZWYpCisgICAgICAgIDogbV9zdHIoMCkKKyAgICB7CisgICAgICAgIGlmIChzdHJS
ZWYpIHsKKyAgICAgICAgICAgIG1fc3RyID0gZWluYV9zdHJpbmdzaGFyZV9hZGQodG9JbXBsKHN0
clJlZiktPnN0cmluZygpLnV0ZjgoKS5kYXRhKCkpOworICAgICAgICAgICAgQVNTRVJUKG1fc3Ry
KTsKKyAgICAgICAgfQorICAgIH0KKworICAgIH5XS0VpbmFTaGFyZWRTdHJpbmcoKSB7IGVpbmFf
c3RyaW5nc2hhcmVfZGVsKG1fc3RyKTsgfQorICAgIGlubGluZSBvcGVyYXRvciBjb25zdCBjaGFy
KiAoKSBjb25zdCB7IHJldHVybiBtX3N0cjsgfQorCitwcml2YXRlOgorICAgIGNvbnN0IGNoYXIq
IG1fc3RyOworfTsKKworLyoqCisgKiBcc3RydWN0ICBfRXdrX0JhY2tfRm9yd2FyZF9MaXN0Cisg
KiBAYnJpZWYgICBDb250YWlucyB0aGUgQmFjayBGb3J3YXJkIExpc3QgZGF0YS4KKyAqLworc3Ry
dWN0IF9Fd2tfQmFja19Gb3J3YXJkX0xpc3RfSXRlbSB7CisgICAgdW5zaWduZWQgaW50IF9fcmVm
OyAvKio8IHRoZSByZWZlcmVuY2UgY291bnQgb2YgdGhlIG9iamVjdCAqLworICAgIFdLUmV0YWlu
UHRyPFdLQmFja0ZvcndhcmRMaXN0SXRlbVJlZj4gd2tJdGVtOworICAgIFdLRWluYVNoYXJlZFN0
cmluZyB1cmk7CisgICAgV0tFaW5hU2hhcmVkU3RyaW5nIHRpdGxlOworICAgIFdLRWluYVNoYXJl
ZFN0cmluZyBvcmlnaW5hbFVyaTsKKworICAgIF9Fd2tfQmFja19Gb3J3YXJkX0xpc3RfSXRlbShX
S0JhY2tGb3J3YXJkTGlzdEl0ZW1SZWYgaXRlbVJlZikKKyAgICAgICAgOiBfX3JlZigxKQorICAg
ICAgICAsIHdrSXRlbShpdGVtUmVmKQorICAgICAgICAsIHVyaShBZG9wdFdLLCBXS0JhY2tGb3J3
YXJkTGlzdEl0ZW1Db3B5VVJMKGl0ZW1SZWYpKQorICAgICAgICAsIHRpdGxlKEFkb3B0V0ssIFdL
QmFja0ZvcndhcmRMaXN0SXRlbUNvcHlUaXRsZShpdGVtUmVmKSkKKyAgICAgICAgLCBvcmlnaW5h
bFVyaShBZG9wdFdLLCBXS0JhY2tGb3J3YXJkTGlzdEl0ZW1Db3B5T3JpZ2luYWxVUkwoaXRlbVJl
ZikpCisgICAgeyB9CisKKyAgICB+X0V3a19CYWNrX0ZvcndhcmRfTGlzdF9JdGVtKCkKKyAgICB7
CisgICAgICAgIEFTU0VSVCghX19yZWYpOworICAgIH0KK307CisKK3ZvaWQgZXdrX2JhY2tfZm9y
d2FyZF9saXN0X2l0ZW1fcmVmKEV3a19CYWNrX0ZvcndhcmRfTGlzdF9JdGVtKiBpdGVtKQorewor
ICAgIEVJTkFfU0FGRVRZX09OX05VTExfUkVUVVJOKGl0ZW0pOworICAgICsraXRlbS0+X19yZWY7
Cit9CisKK3ZvaWQgZXdrX2JhY2tfZm9yd2FyZF9saXN0X2l0ZW1fdW5yZWYoRXdrX0JhY2tfRm9y
d2FyZF9MaXN0X0l0ZW0qIGl0ZW0pCit7CisgICAgRUlOQV9TQUZFVFlfT05fTlVMTF9SRVRVUk4o
aXRlbSk7CisKKyAgICBpZiAoLS1pdGVtLT5fX3JlZikKKyAgICAgICAgcmV0dXJuOworCisgICAg
ZGVsZXRlIGl0ZW07Cit9CisKK2NvbnN0IGNoYXIqIGV3a19iYWNrX2ZvcndhcmRfbGlzdF9pdGVt
X3VyaV9nZXQoY29uc3QgRXdrX0JhY2tfRm9yd2FyZF9MaXN0X0l0ZW0qIGl0ZW0pCit7CisgICAg
RUlOQV9TQUZFVFlfT05fTlVMTF9SRVRVUk5fVkFMKGl0ZW0sIDApOworCisgICAgcmV0dXJuIGl0
ZW0tPnVyaTsKK30KKworY29uc3QgY2hhciogZXdrX2JhY2tfZm9yd2FyZF9saXN0X2l0ZW1fdGl0
bGVfZ2V0KGNvbnN0IEV3a19CYWNrX0ZvcndhcmRfTGlzdF9JdGVtKiBpdGVtKQoreworICAgIEVJ
TkFfU0FGRVRZX09OX05VTExfUkVUVVJOX1ZBTChpdGVtLCAwKTsKKworICAgIHJldHVybiBpdGVt
LT50aXRsZTsKK30KKworY29uc3QgY2hhciogZXdrX2JhY2tfZm9yd2FyZF9saXN0X2l0ZW1fb3Jp
Z2luYWxfdXJpX2dldChjb25zdCBFd2tfQmFja19Gb3J3YXJkX0xpc3RfSXRlbSogaXRlbSkKK3sK
KyAgICBFSU5BX1NBRkVUWV9PTl9OVUxMX1JFVFVSTl9WQUwoaXRlbSwgMCk7CisKKyAgICByZXR1
cm4gaXRlbS0+b3JpZ2luYWxVcmk7Cit9CisKK0V3a19CYWNrX0ZvcndhcmRfTGlzdF9JdGVtKiBl
d2tfYmFja19mb3J3YXJkX2xpc3RfaXRlbV9uZXcoV0tCYWNrRm9yd2FyZExpc3RJdGVtUmVmIGJh
Y2tGb3J3YXJkTGlzdEl0ZW1EYXRhKQoreworICAgIEVJTkFfU0FGRVRZX09OX05VTExfUkVUVVJO
X1ZBTChiYWNrRm9yd2FyZExpc3RJdGVtRGF0YSwgMCk7CisKKyAgICByZXR1cm4gbmV3IEV3a19C
YWNrX0ZvcndhcmRfTGlzdF9JdGVtKGJhY2tGb3J3YXJkTGlzdEl0ZW1EYXRhKTsKK30KZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZWZsL2V3a19iYWNrX2ZvcndhcmRf
bGlzdF9pdGVtLmggYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2VmbC9ld2tfYmFja19m
b3J3YXJkX2xpc3RfaXRlbS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjgx
MWYwZTEKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2Vm
bC9ld2tfYmFja19mb3J3YXJkX2xpc3RfaXRlbS5oCkBAIC0wLDAgKzEsMTA3IEBACisvKgorICog
Q29weXJpZ2h0IChDKSAyMDEyIEludGVsIENvcnBvcmF0aW9uLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9y
bXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3Zp
ZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVk
aXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0
IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBk
b2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlz
dHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5D
LiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJ
TVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhF
IElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEg
UEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwg
QVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJF
Q1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05T
RVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJF
TUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERB
VEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FV
U0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJB
Q1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9U
SEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNP
RlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERB
TUFHRS4KKyAqLworCisvKioKKyAqIEBmaWxlICAgIGV3a19iYWNrX2ZvcndhcmRfbGlzdF9pdGVt
LmgKKyAqIEBicmllZiAgIERlc2NyaWJlcyB0aGUgRXdrIEJhY2sgRm9yd2FyZCBMaXN0IEl0ZW0g
QVBJLgorICovCisKKyNpZm5kZWYgZXdrX2JhY2tfZm9yd2FyZF9saXN0X2l0ZW1faAorI2RlZmlu
ZSBld2tfYmFja19mb3J3YXJkX2xpc3RfaXRlbV9oCisKKyNpbmNsdWRlIDxFaW5hLmg+CisKKyNp
ZmRlZiBfX2NwbHVzcGx1cworZXh0ZXJuICJDIiB7CisjZW5kaWYKKworLyoqIENyZWF0ZXMgYSB0
eXBlIG5hbWUgZm9yIF9Fd2tfQmFja19Gb3J3YXJkX0xpc3RfSXRlbSAqLwordHlwZWRlZiBzdHJ1
Y3QgX0V3a19CYWNrX0ZvcndhcmRfTGlzdF9JdGVtIEV3a19CYWNrX0ZvcndhcmRfTGlzdF9JdGVt
OworCisvKioKKyAqIEluY3JlYXNlcyB0aGUgcmVmZXJlbmNlIGNvdW50IG9mIHRoZSBnaXZlbiBv
YmplY3QuCisgKgorICogQHBhcmFtIGl0ZW0gdGhlIGJhY2stZm9yd2FyZCBsaXN0IGl0ZW0gaW5z
dGFuY2UgdG8gaW5jcmVhc2UgdGhlIHJlZmVyZW5jZSBjb3VudAorICovCitFQVBJIHZvaWQgZXdr
X2JhY2tfZm9yd2FyZF9saXN0X2l0ZW1fcmVmKEV3a19CYWNrX0ZvcndhcmRfTGlzdF9JdGVtICpp
dGVtKTsKKworLyoqCisgKiBEZWNyZWFzZXMgdGhlIHJlZmVyZW5jZSBjb3VudCBvZiB0aGUgZ2l2
ZW4gb2JqZWN0LCBwb3NzaWJseSBmcmVlaW5nIGl0LgorICoKKyAqIFdoZW4gdGhlIHJlZmVyZW5j
ZSBjb3VudCByZWFjaGVzIDAsIHRoZSBpdGVtIGlzIGZyZWVkLgorICoKKyAqIEBwYXJhbSBpdGVt
IHRoZSBiYWNrLWZvcndhcmQgbGlzdCBpdGVtIGluc3RhbmNlIHRvIGRlY3JlYXNlIHRoZSByZWZl
cmVuY2UgY291bnQKKyAqLworRUFQSSB2b2lkIGV3a19iYWNrX2ZvcndhcmRfbGlzdF9pdGVtX3Vu
cmVmKEV3a19CYWNrX0ZvcndhcmRfTGlzdF9JdGVtICppdGVtKTsKKworLyoqCisgKiBSZXR1cm5z
IFVSSSBvZiB0aGUgaXRlbS4KKyAqCisgKiBUaGUgcmV0dXJuZWQgVVJJIG1heSBkaWZmZXIgZnJv
bSB0aGUgb3JpZ2luYWwgVVJJIChGb3IgZXhhbXBsZSBpZiB0aGUgcGFnZSB3YXMgcmVkaXJlY3Rl
ZCkuCisgKgorICogQHNlZSBld2tfYmFja19mb3J3YXJkX2xpc3RfaXRlbV9vcmlnaW5hbF91cmlf
Z2V0KCkKKyAqCisgKiBAcGFyYW0gaXRlbSB0aGUgYmFjay1mb3J3YXJkIGxpc3QgaXRlbSBpbnN0
YW5jZQorICoKKyAqIEByZXR1cm4gdGhlIFVSSSBvZiB0aGUgQGEgaXRlbSBvciBAYyBOVUxMIGlu
IGNhc2Ugb2YgZXJyb3IuIFRoaXMgcG9pbnRlciBpcworICogICAgICAgICBndWFyYW50ZWVkIHRv
IGJlIGVpbmFfc3RyaW5nc2hhcmUsIHNvIHdoZW5ldmVyIHBvc3NpYmxlCisgKiAgICAgICAgIHNh
dmUgeW91cnNlbGYgc29tZSBjcHUgY3ljbGVzIGFuZCB1c2UKKyAqICAgICAgICAgZWluYV9zdHJp
bmdzaGFyZV9yZWYoKSBpbnN0ZWFkIG9mIGVpbmFfc3RyaW5nc2hhcmVfYWRkKCkgb3IKKyAqICAg
ICAgICAgc3RyZHVwKCkKKyAqLworRUFQSSBjb25zdCBjaGFyICpld2tfYmFja19mb3J3YXJkX2xp
c3RfaXRlbV91cmlfZ2V0KGNvbnN0IEV3a19CYWNrX0ZvcndhcmRfTGlzdF9JdGVtICppdGVtKTsK
KworLyoqCisgKiBSZXR1cm5zIHRpdGxlIG9mIHRoZSBpdGVtLgorICoKKyAqIEBwYXJhbSBpdGVt
IHRoZSBiYWNrLWZvcndhcmQgbGlzdCBpdGVtIGluc3RhbmNlCisgKgorICogQHJldHVybiB0aGUg
dGl0bGUgb2YgdGhlIEBhIGl0ZW0gb3IgQGMgTlVMTCBpbiBjYXNlIG9mIGVycm9yLiBUaGlzIHBv
aW50ZXIgaXMKKyAqICAgICAgICAgZ3VhcmFudGVlZCB0byBiZSBlaW5hX3N0cmluZ3NoYXJlLCBz
byB3aGVuZXZlciBwb3NzaWJsZQorICogICAgICAgICBzYXZlIHlvdXJzZWxmIHNvbWUgY3B1IGN5
Y2xlcyBhbmQgdXNlCisgKiAgICAgICAgIGVpbmFfc3RyaW5nc2hhcmVfcmVmKCkgaW5zdGVhZCBv
ZiBlaW5hX3N0cmluZ3NoYXJlX2FkZCgpIG9yCisgKiAgICAgICAgIHN0cmR1cCgpCisgKi8KK0VB
UEkgY29uc3QgY2hhciAqZXdrX2JhY2tfZm9yd2FyZF9saXN0X2l0ZW1fdGl0bGVfZ2V0KGNvbnN0
IEV3a19CYWNrX0ZvcndhcmRfTGlzdF9JdGVtICppdGVtKTsKKworLyoqCisgKiBSZXR1cm5zIG9y
aWdpbmFsIFVSSSBvZiB0aGUgaXRlbS4KKyAqCisgKiBAc2VlIGV3a19iYWNrX2ZvcndhcmRfbGlz
dF9pdGVtX3VyaV9nZXQoKQorICoKKyAqIEBwYXJhbSBpdGVtIHRoZSBiYWNrLWZvcndhcmQgbGlz
dCBpdGVtIGluc3RhbmNlCisgKgorICogQHJldHVybiB0aGUgb3JpZ2luYWwgVVJJIG9mIHRoZSBA
YSBpdGVtIG9yIEBjIE5VTEwgaW4gY2FzZSBvZiBlcnJvci4gVGhpcyBwb2ludGVyIGlzCisgKiAg
ICAgICAgIGd1YXJhbnRlZWQgdG8gYmUgZWluYV9zdHJpbmdzaGFyZSwgc28gd2hlbmV2ZXIgcG9z
c2libGUKKyAqICAgICAgICAgc2F2ZSB5b3Vyc2VsZiBzb21lIGNwdSBjeWNsZXMgYW5kIHVzZQor
ICogICAgICAgICBlaW5hX3N0cmluZ3NoYXJlX3JlZigpIGluc3RlYWQgb2YgZWluYV9zdHJpbmdz
aGFyZV9hZGQoKSBvcgorICogICAgICAgICBzdHJkdXAoKQorICovCitFQVBJIGNvbnN0IGNoYXIg
KmV3a19iYWNrX2ZvcndhcmRfbGlzdF9pdGVtX29yaWdpbmFsX3VyaV9nZXQoY29uc3QgRXdrX0Jh
Y2tfRm9yd2FyZF9MaXN0X0l0ZW0gKml0ZW0pOworCisjaWZkZWYgX19jcGx1c3BsdXMKK30KKyNl
bmRpZgorI2VuZGlmIC8vIGV3a19iYWNrX2ZvcndhcmRfbGlzdF9pdGVtX2gKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZWZsL2V3a19iYWNrX2ZvcndhcmRfbGlzdF9p
dGVtX3ByaXZhdGUuaCBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZWZsL2V3a19iYWNr
X2ZvcndhcmRfbGlzdF9pdGVtX3ByaXZhdGUuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAw
MDAwMDAwLi44YzJjNjg0Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYktpdDIvVUlQcm9j
ZXNzL0FQSS9lZmwvZXdrX2JhY2tfZm9yd2FyZF9saXN0X2l0ZW1fcHJpdmF0ZS5oCkBAIC0wLDAg
KzEsMzUgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTIgSW50ZWwgQ29ycG9yYXRpb24uIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3Vy
Y2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFy
ZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFy
ZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4g
dGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGl0ZW0gb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGlu
IGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5v
dGljZSwgdGhpcyBpdGVtIG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92
aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9W
SURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5E
IEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBB
TkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJ
TiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJ
QUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1Q
TEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VT
OyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQ
VElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVU
SEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5H
IE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBU
SEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJ
QklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpZm5kZWYgZXdrX2JhY2tfZm9yd2FyZF9s
aXN0X2l0ZW1fcHJpdmF0ZV9oCisjZGVmaW5lIGV3a19iYWNrX2ZvcndhcmRfbGlzdF9pdGVtX3By
aXZhdGVfaAorCisjaW5jbHVkZSA8V2ViS2l0Mi9XS0Jhc2UuaD4KKwordHlwZWRlZiBzdHJ1Y3Qg
X0V3a19CYWNrX0ZvcndhcmRfTGlzdF9JdGVtIEV3a19CYWNrX0ZvcndhcmRfTGlzdF9JdGVtOwor
CitFd2tfQmFja19Gb3J3YXJkX0xpc3RfSXRlbSogZXdrX2JhY2tfZm9yd2FyZF9saXN0X2l0ZW1f
bmV3KFdLQmFja0ZvcndhcmRMaXN0SXRlbVJlZiB3a0JhY2tGb3J3YXJkTGlzdEl0ZW1SZWYpOwor
CisjZW5kaWYgLy8gZXdrX2JhY2tfZm9yd2FyZF9saXN0X3ByaXZhdGVfaApkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9lZmwvZXdrX2JhY2tfZm9yd2FyZF9saXN0X3By
aXZhdGUuaCBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZWZsL2V3a19iYWNrX2Zvcndh
cmRfbGlzdF9wcml2YXRlLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTky
YTRmNAotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZWZs
L2V3a19iYWNrX2ZvcndhcmRfbGlzdF9wcml2YXRlLmgKQEAgLTAsMCArMSwzNyBAQAorLyoKKyAq
IENvcHlyaWdodCAoQykgMjAxMiBJbnRlbCBDb3Jwb3JhdGlvbi4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv
cm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92
aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJl
ZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJp
Z2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVz
dCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAg
ZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRp
c3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElO
Qy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1Ig
SU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRI
RSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBB
IFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxM
IEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElS
RUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09O
U0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VS
RU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBE
QVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENB
VVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRS
QUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBP
VEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBT
T0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBE
QU1BR0UuCisgKi8KKworI2lmbmRlZiBld2tfYmFja19mb3J3YXJkX2xpc3RfcHJpdmF0ZV9oCisj
ZGVmaW5lIGV3a19iYWNrX2ZvcndhcmRfbGlzdF9wcml2YXRlX2gKKworI2luY2x1ZGUgPFdlYktp
dDIvV0tCYXNlLmg+CisKK3R5cGVkZWYgc3RydWN0IF9Fd2tfQmFja19Gb3J3YXJkX0xpc3QgRXdr
X0JhY2tfRm9yd2FyZF9MaXN0OworCit2b2lkIGV3a19iYWNrX2ZvcndhcmRfbGlzdF9jaGFuZ2Vk
KEV3a19CYWNrX0ZvcndhcmRfTGlzdCosIFdLQmFja0ZvcndhcmRMaXN0SXRlbVJlZiB3a0FkZGVk
SXRlbSwgV0tBcnJheVJlZiB3a1JlbW92ZWRJdGVtcyk7CitFd2tfQmFja19Gb3J3YXJkX0xpc3Qq
IGV3a19iYWNrX2ZvcndhcmRfbGlzdF9uZXcoV0tCYWNrRm9yd2FyZExpc3RSZWYgd2tCYWNrRm9y
d2FyZExpc3RSZWYpOwordm9pZCBld2tfYmFja19mb3J3YXJkX2xpc3RfZnJlZShFd2tfQmFja19G
b3J3YXJkX0xpc3QqIGxpc3QpOworCisjZW5kaWYgLy8gZXdrX2JhY2tfZm9yd2FyZF9saXN0X3By
aXZhdGVfaApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9lZmwvZXdr
X3ZpZXcuY3BwIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9lZmwvZXdrX3ZpZXcuY3Bw
CmluZGV4IDhiYzExMjEuLmM4Mjk4NGEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1VJUHJv
Y2Vzcy9BUEkvZWZsL2V3a192aWV3LmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3Mv
QVBJL2VmbC9ld2tfdmlldy5jcHAKQEAgLTI5LDYgKzI5LDcgQEAKICNpbmNsdWRlICJXS1JldGFp
blB0ci5oIgogI2luY2x1ZGUgIldLU3RyaW5nLmgiCiAjaW5jbHVkZSAiV0tVUkwuaCIKKyNpbmNs
dWRlICJld2tfYmFja19mb3J3YXJkX2xpc3RfcHJpdmF0ZS5oIgogI2luY2x1ZGUgImV3a19jb250
ZXh0LmgiCiAjaW5jbHVkZSAiZXdrX2NvbnRleHRfcHJpdmF0ZS5oIgogI2luY2x1ZGUgImV3a19p
bnRlbnRfcHJpdmF0ZS5oIgpAQCAtNjgsNiArNjksNyBAQCBzdHJ1Y3QgX0V3a19WaWV3X1ByaXZh
dGVfRGF0YSB7CiAgICAgY29uc3QgY2hhciogY3Vyc29yR3JvdXA7CiAgICAgRXZhc19PYmplY3Qq
IGN1cnNvck9iamVjdDsKICAgICBMb2FkaW5nUmVzb3VyY2VzTWFwIGxvYWRpbmdSZXNvdXJjZXNN
YXA7CisgICAgRXdrX0JhY2tfRm9yd2FyZF9MaXN0KiBiYWNrRm9yd2FyZExpc3Q7CiAKICNpZmRl
ZiBIQVZFX0VDT1JFX1gKICAgICBib29sIGlzVXNpbmdFY29yZVg7CkBAIC04Niw2ICs4OCw3IEBA
IHN0cnVjdCBfRXdrX1ZpZXdfUHJpdmF0ZV9EYXRhIHsKICAgICAgICAgLCBjdXN0b21FbmNvZGlu
ZygwKQogICAgICAgICAsIGN1cnNvckdyb3VwKDApCiAgICAgICAgICwgY3Vyc29yT2JqZWN0KDAp
CisgICAgICAgICwgYmFja0ZvcndhcmRMaXN0KDApCiAjaWZkZWYgSEFWRV9FQ09SRV9YCiAgICAg
ICAgICwgaXNVc2luZ0Vjb3JlWChmYWxzZSkKICNlbmRpZgpAQCAtMTA2LDYgKzEwOSw4IEBAIHN0
cnVjdCBfRXdrX1ZpZXdfUHJpdmF0ZV9EYXRhIHsKIAogICAgICAgICBpZiAoY3Vyc29yT2JqZWN0
KQogICAgICAgICAgICAgZXZhc19vYmplY3RfZGVsKGN1cnNvck9iamVjdCk7CisKKyAgICAgICAg
ZXdrX2JhY2tfZm9yd2FyZF9saXN0X2ZyZWUoYmFja0ZvcndhcmRMaXN0KTsKICAgICB9CiB9Owog
CkBAIC02NjIsNiArNjY3LDcgQEAgRXZhc19PYmplY3QqIGV3a192aWV3X2Jhc2VfYWRkKEV2YXMq
IGNhbnZhcywgV0tDb250ZXh0UmVmIGNvbnRleHRSZWYsIFdLUGFnZUdyb3UKICAgICB9CiAKICAg
ICBwcml2LT5wYWdlQ2xpZW50ID0gUGFnZUNsaWVudEltcGw6OmNyZWF0ZSh0b0ltcGwoY29udGV4
dFJlZiksIHRvSW1wbChwYWdlR3JvdXBSZWYpLCBld2tWaWV3KTsKKyAgICBwcml2LT5iYWNrRm9y
d2FyZExpc3QgPSBld2tfYmFja19mb3J3YXJkX2xpc3RfbmV3KHRvQVBJKHByaXYtPnBhZ2VDbGll
bnQtPnBhZ2UoKS0+YmFja0ZvcndhcmRMaXN0KCkpKTsKIAogICAgIFdLUGFnZVJlZiB3a1BhZ2Ug
PSB0b0FQSShwcml2LT5wYWdlQ2xpZW50LT5wYWdlKCkpOwogICAgIGV3a192aWV3X2Zvcm1fY2xp
ZW50X2F0dGFjaCh3a1BhZ2UsIGV3a1ZpZXcpOwpAQCAtMTEzMCw2ICsxMTM2LDE0IEBAIEVpbmFf
Qm9vbCBld2tfdmlld19mb3J3YXJkX3Bvc3NpYmxlKEV2YXNfT2JqZWN0KiBld2tWaWV3KQogICAg
IHJldHVybiBwcml2LT5wYWdlQ2xpZW50LT5wYWdlKCktPmNhbkdvRm9yd2FyZCgpOwogfQogCitF
d2tfQmFja19Gb3J3YXJkX0xpc3QqIGV3a192aWV3X2JhY2tfZm9yd2FyZF9saXN0X2dldChjb25z
dCBFdmFzX09iamVjdCogZXdrVmlldykKK3sKKyAgICBFV0tfVklFV19TRF9HRVRfT1JfUkVUVVJO
KGV3a1ZpZXcsIHNtYXJ0RGF0YSwgMCk7CisgICAgRVdLX1ZJRVdfUFJJVl9HRVRfT1JfUkVUVVJO
KHNtYXJ0RGF0YSwgcHJpdiwgMCk7CisKKyAgICByZXR1cm4gcHJpdi0+YmFja0ZvcndhcmRMaXN0
OworfQorCiB2b2lkIGV3a192aWV3X2ltYWdlX2RhdGFfc2V0KEV2YXNfT2JqZWN0KiBld2tWaWV3
LCB2b2lkKiBpbWFnZURhdGEsIGNvbnN0IEludFNpemUmIHNpemUpCiB7CiAgICAgRVdLX1ZJRVdf
U0RfR0VUX09SX1JFVFVSTihld2tWaWV3LCBzbWFydERhdGEpOwpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYktpdDIvVUlQcm9jZXNzL0FQSS9lZmwvZXdrX3ZpZXcuaCBiL1NvdXJjZS9XZWJLaXQyL1VJ
UHJvY2Vzcy9BUEkvZWZsL2V3a192aWV3LmgKaW5kZXggM2IwMzQxOS4uNjA3ZDAwZCAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9lZmwvZXdrX3ZpZXcuaAorKysgYi9T
b3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2VmbC9ld2tfdmlldy5oCkBAIC02OCw2ICs2OCw3
IEBACiAjaWZuZGVmIGV3a192aWV3X2gKICNkZWZpbmUgZXdrX3ZpZXdfaAogCisjaW5jbHVkZSAi
ZXdrX2JhY2tfZm9yd2FyZF9saXN0LmgiCiAjaW5jbHVkZSAiZXdrX2NvbnRleHQuaCIKICNpbmNs
dWRlICJld2tfZG93bmxvYWRfam9iLmgiCiAjaW5jbHVkZSAiZXdrX2ludGVudC5oIgpAQCAtMzM4
LDYgKzMzOSwyMSBAQCBFQVBJIEVpbmFfQm9vbCAgICBld2tfdmlld19iYWNrX3Bvc3NpYmxlKEV2
YXNfT2JqZWN0ICpvKTsKIEVBUEkgRWluYV9Cb29sICAgIGV3a192aWV3X2ZvcndhcmRfcG9zc2li
bGUoRXZhc19PYmplY3QgKm8pOwogCiAvKioKKyAqIEdldHMgdGhlIGJhY2stZm9yd2FyZCBsaXN0
IGFzc29jaWF0ZWQgd2l0aCB0aGlzIHZpZXcuCisgKgorICogVGhlIHJldHVybmVkIGluc3RhbmNl
IGlzIHVuaXF1ZSBmb3IgdGhpcyB2aWV3IGFuZCB0aHVzIG11bHRpcGxlIGNhbGxzCisgKiB0byB0
aGlzIGZ1bmN0aW9uIHdpdGggdGhlIHNhbWUgdmlldyBhcyBwYXJhbWV0ZXIgcmV0dXJucyB0aGUg
c2FtZQorICogaGFuZGxlLiBUaGlzIGhhbmRsZSBpcyBhbGl2ZSB3aGlsZSB2aWV3IGlzIGFsaXZl
LCB0aHVzIG9uZQorICogbWlnaHQgd2FudCB0byBsaXN0ZW4gZm9yIEVWQVNfQ0FMTEJBQ0tfREVM
IG9uIGdpdmVuIHZpZXcKKyAqIChAYSBvKSB0byBrbm93IHdoZW4gdG8gc3RvcCB1c2luZyByZXR1
cm5lZCBoYW5kbGUuCisgKgorICogQHBhcmFtIG8gdmlldyBvYmplY3QgdG8gZ2V0IG5hdmlnYXRp
b24gYmFjay1mb3J3YXJkIGxpc3QKKyAqCisgKiBAcmV0dXJuIHRoZSBiYWNrLWZvcndhcmQgbGlz
dCBpbnN0YW5jZSBoYW5kbGUgYXNzb2NpYXRlZCB3aXRoIHRoaXMgdmlldworICovCitFQVBJIEV3
a19CYWNrX0ZvcndhcmRfTGlzdCAqZXdrX3ZpZXdfYmFja19mb3J3YXJkX2xpc3RfZ2V0KGNvbnN0
IEV2YXNfT2JqZWN0ICpvKTsKKworLyoqCiAgKiBHZXRzIHRoZSBjdXJyZW50IHRpdGxlIG9mIHRo
ZSBtYWluIGZyYW1lLgogICoKICAqIEl0IHJldHVybnMgYW4gaW50ZXJuYWwgc3RyaW5nIGFuZCBz
aG91bGQgbm90CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2VmbC9l
d2tfdmlld19sb2FkZXJfY2xpZW50LmNwcCBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkv
ZWZsL2V3a192aWV3X2xvYWRlcl9jbGllbnQuY3BwCmluZGV4IGNjOGIxMjAuLjJkZWIzOGUgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZWZsL2V3a192aWV3X2xvYWRl
cl9jbGllbnQuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZWZsL2V3a192
aWV3X2xvYWRlcl9jbGllbnQuY3BwCkBAIC0yNCw4ICsyNCwxMCBAQAogICovCiAKICNpbmNsdWRl
ICJjb25maWcuaCIKKyNpbmNsdWRlICJld2tfdmlldy5oIgogCiAjaW5jbHVkZSAiV0tGcmFtZS5o
IgorI2luY2x1ZGUgImV3a19iYWNrX2ZvcndhcmRfbGlzdF9wcml2YXRlLmgiCiAjaW5jbHVkZSAi
ZXdrX2ludGVudC5oIgogI2luY2x1ZGUgImV3a19pbnRlbnRfcHJpdmF0ZS5oIgogI2luY2x1ZGUg
ImV3a19pbnRlbnRfc2VydmljZS5oIgpAQCAtMTIzLDYgKzEyNSwxNCBAQCBzdGF0aWMgdm9pZCBk
aWRGYWlsUHJvdmlzaW9uYWxMb2FkV2l0aEVycm9yRm9yRnJhbWUoV0tQYWdlUmVmIHBhZ2UsIFdL
RnJhbWVSZWYgZgogICAgIGV3a193ZWJfZXJyb3JfZnJlZShld2tFcnJvcik7CiB9CiAKK3N0YXRp
YyB2b2lkIGRpZENoYW5nZUJhY2tGb3J3YXJkTGlzdChXS1BhZ2VSZWYgcGFnZSwgV0tCYWNrRm9y
d2FyZExpc3RJdGVtUmVmIGFkZGVkSXRlbSwgV0tBcnJheVJlZiByZW1vdmVkSXRlbXMsIGNvbnN0
IHZvaWQqIGNsaWVudEluZm8pCit7CisgICAgRXZhc19PYmplY3QqIGV3a1ZpZXcgPSBzdGF0aWNf
Y2FzdDxFdmFzX09iamVjdCo+KGNvbnN0X2Nhc3Q8dm9pZCo+KGNsaWVudEluZm8pKTsKKyAgICBB
U1NFUlQoZXdrVmlldyk7CisKKyAgICBld2tfYmFja19mb3J3YXJkX2xpc3RfY2hhbmdlZChld2tf
dmlld19iYWNrX2ZvcndhcmRfbGlzdF9nZXQoZXdrVmlldyksIGFkZGVkSXRlbSwgcmVtb3ZlZEl0
ZW1zKTsKK30KKwogdm9pZCBld2tfdmlld19sb2FkZXJfY2xpZW50X2F0dGFjaChXS1BhZ2VSZWYg
cGFnZVJlZiwgRXZhc19PYmplY3QqIGV3a1ZpZXcpCiB7CiAgICAgV0tQYWdlTG9hZGVyQ2xpZW50
IGxvYWRDbGllbnQ7CkBAIC0xNDQsNSArMTU0LDYgQEAgdm9pZCBld2tfdmlld19sb2FkZXJfY2xp
ZW50X2F0dGFjaChXS1BhZ2VSZWYgcGFnZVJlZiwgRXZhc19PYmplY3QqIGV3a1ZpZXcpCiAgICAg
bG9hZENsaWVudC5kaWRTdGFydFByb3Zpc2lvbmFsTG9hZEZvckZyYW1lID0gZGlkU3RhcnRQcm92
aXNpb25hbExvYWRGb3JGcmFtZTsKICAgICBsb2FkQ2xpZW50LmRpZFJlY2VpdmVTZXJ2ZXJSZWRp
cmVjdEZvclByb3Zpc2lvbmFsTG9hZEZvckZyYW1lID0gZGlkUmVjZWl2ZVNlcnZlclJlZGlyZWN0
Rm9yUHJvdmlzaW9uYWxMb2FkRm9yRnJhbWU7CiAgICAgbG9hZENsaWVudC5kaWRGYWlsUHJvdmlz
aW9uYWxMb2FkV2l0aEVycm9yRm9yRnJhbWUgPSBkaWRGYWlsUHJvdmlzaW9uYWxMb2FkV2l0aEVy
cm9yRm9yRnJhbWU7CisgICAgbG9hZENsaWVudC5kaWRDaGFuZ2VCYWNrRm9yd2FyZExpc3QgPSBk
aWRDaGFuZ2VCYWNrRm9yd2FyZExpc3Q7CiAgICAgV0tQYWdlU2V0UGFnZUxvYWRlckNsaWVudChw
YWdlUmVmLCAmbG9hZENsaWVudCk7CiB9Cg==
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>156900</attachid>
            <date>2012-08-07 02:38:47 -0700</date>
            <delta_ts>2012-08-07 03:46:30 -0700</delta_ts>
            <desc>patch v8</desc>
            <filename>bug92345_v8</filename>
            <type>text/plain</type>
            <size>32942</size>
            <attacher name="Mikhail Pozdnyakov">mikhail.pozdnyakov</attacher>
            
              <data encoding="base64">Y29tbWl0IDM2ODkxOTE1ZDI5NDM1YjcxODZkOTRmODIyNDljYmRkNDUzYWU3NmMKQXV0aG9yOiBN
aWtoYWlsIFBvemRueWFrb3YgPG1pa2hhaWwucG96ZG55YWtvdkBpbnRlbC5jb20+CkRhdGU6ICAg
RnJpIEp1bCAyNyAxMzowOToyOSAyMDEyICswMzAwCgogICAgYnVnOTIzNDUKCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViS2l0Mi9DaGFuZ2VMb2cgYi9Tb3VyY2UvV2ViS2l0Mi9DaGFuZ2VMb2cKaW5k
ZXggMmJlZmQ2OS4uZmI0MGU2NCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvQ2hhbmdlTG9n
CisrKyBiL1NvdXJjZS9XZWJLaXQyL0NoYW5nZUxvZwpAQCAtMSwzICsxLDUyIEBACisyMDEyLTA3
LTI3ICBNaWtoYWlsIFBvemRueWFrb3YgIDxtaWtoYWlsLnBvemRueWFrb3ZAaW50ZWwuY29tPgor
CisgICAgICAgIFtFRkxdW1dLMl0gQWRkIGJhY2sgZm9yd2FyZCBsaXN0IEFQSQorICAgICAgICBo
dHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9OTIzNDUKKworICAgICAgICBS
ZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBBZGRlZCBuZXcgQmFjayBGb3J3
YXJkIGxpc3QgQVBJIHRvIEVGTCBXSzIuIEV3a19CYWNrX0ZvcndhcmRfTGlzdCBhbmQKKyAgICAg
ICAgRXdrX0JhY2tfRm9yd2FyZF9MaXN0X0l0ZW0gc3RydWN0dXJlcyB3ZXJlIGFkZGVkLiBUaGUg
bmV3IEFQSSBpcworICAgICAgICBtb3N0bHkgdGhlIHNhbWUgYXMgb25lIGZyb20gVUlQcm9jZXNz
L0FQSS9DL3sgV0tCYWNrRm9yd2FyZExpc3QuaCwgV0tCYWNrRm9yd2FyZExpc3RJdGVtLmggfS4K
KworICAgICAgICAqIFBsYXRmb3JtRWZsLmNtYWtlOgorICAgICAgICAqIFVJUHJvY2Vzcy9BUEkv
ZWZsL2V3a19iYWNrX2ZvcndhcmRfbGlzdC5jcHA6IEFkZGVkLgorICAgICAgICAoX0V3a19CYWNr
X0ZvcndhcmRfTGlzdCk6CisgICAgICAgIChfRXdrX0JhY2tfRm9yd2FyZF9MaXN0OjpfRXdrX0Jh
Y2tfRm9yd2FyZF9MaXN0KToKKyAgICAgICAgKGdldE9yQ3JlYXRlSXRlbSk6CisgICAgICAgICh3
ZWJraXRfYmFja19mb3J3YXJkX2xpc3RfY3VycmVudF9pdGVtX2dldCk6CisgICAgICAgICh3ZWJr
aXRfYmFja19mb3J3YXJkX2xpc3RfYmFja19pdGVtX2dldCk6CisgICAgICAgICh3ZWJraXRfYmFj
a19mb3J3YXJkX2xpc3RfZm9yd2FyZF9pdGVtX2dldCk6CisgICAgICAgICh3ZWJraXRfYmFja19m
b3J3YXJkX2xpc3RfaXRlbV9hdF9pbmRleF9nZXQpOgorICAgICAgICAod2Via2l0X2JhY2tfZm9y
d2FyZF9saXN0X2xlbmd0aF9nZXQpOgorICAgICAgICAoZXdrX2JhY2tfZm9yd2FyZF9saXN0X2No
YW5nZWQpOgorICAgICAgICAoZXdrX2JhY2tfZm9yd2FyZF9saXN0X25ldyk6CisgICAgICAgIChl
d2tfYmFja19mb3J3YXJkX2xpc3RfZnJlZSk6CisgICAgICAgICogVUlQcm9jZXNzL0FQSS9lZmwv
ZXdrX2JhY2tfZm9yd2FyZF9saXN0Lmg6IEFkZGVkLgorICAgICAgICAqIFVJUHJvY2Vzcy9BUEkv
ZWZsL2V3a19iYWNrX2ZvcndhcmRfbGlzdF9pdGVtLmNwcDogQWRkZWQuCisgICAgICAgIChnZXRJ
dGVtUHJvcGVydHkpOgorICAgICAgICAoX0V3a19CYWNrX0ZvcndhcmRfTGlzdF9JdGVtKToKKyAg
ICAgICAgKF9Fd2tfQmFja19Gb3J3YXJkX0xpc3RfSXRlbTo6X0V3a19CYWNrX0ZvcndhcmRfTGlz
dF9JdGVtKToKKyAgICAgICAgKF9Fd2tfQmFja19Gb3J3YXJkX0xpc3RfSXRlbTo6fl9Fd2tfQmFj
a19Gb3J3YXJkX0xpc3RfSXRlbSk6CisgICAgICAgIChld2tfYmFja19mb3J3YXJkX2xpc3RfaXRl
bV9yZWYpOgorICAgICAgICAoZXdrX2JhY2tfZm9yd2FyZF9saXN0X2l0ZW1fdW5yZWYpOgorICAg
ICAgICAoZXdrX2JhY2tfZm9yd2FyZF9saXN0X2l0ZW1fdXJpX2dldCk6CisgICAgICAgIChld2tf
YmFja19mb3J3YXJkX2xpc3RfaXRlbV90aXRsZV9nZXQpOgorICAgICAgICAoZXdrX2JhY2tfZm9y
d2FyZF9saXN0X2l0ZW1fb3JpZ2luYWxfdXJpX2dldCk6CisgICAgICAgIChld2tfYmFja19mb3J3
YXJkX2xpc3RfaXRlbV9uZXcpOgorICAgICAgICAqIFVJUHJvY2Vzcy9BUEkvZWZsL2V3a19iYWNr
X2ZvcndhcmRfbGlzdF9pdGVtLmg6IEFkZGVkLgorICAgICAgICAqIFVJUHJvY2Vzcy9BUEkvZWZs
L2V3a19iYWNrX2ZvcndhcmRfbGlzdF9pdGVtX3ByaXZhdGUuaDogQWRkZWQuCisgICAgICAgICog
VUlQcm9jZXNzL0FQSS9lZmwvZXdrX2JhY2tfZm9yd2FyZF9saXN0X3ByaXZhdGUuaDogQWRkZWQu
CisgICAgICAgICogVUlQcm9jZXNzL0FQSS9lZmwvZXdrX3ZpZXcuY3BwOgorICAgICAgICAoX0V3
a19WaWV3X1ByaXZhdGVfRGF0YSk6CisgICAgICAgIChfRXdrX1ZpZXdfUHJpdmF0ZV9EYXRhOjpf
RXdrX1ZpZXdfUHJpdmF0ZV9EYXRhKToKKyAgICAgICAgKF9Fd2tfVmlld19Qcml2YXRlX0RhdGE6
On5fRXdrX1ZpZXdfUHJpdmF0ZV9EYXRhKToKKyAgICAgICAgKGV3a192aWV3X2JhY2tfZm9yd2Fy
ZF9saXN0X2dldCk6IE5ldyBmdW5jdGlvbiB0byBnZXQgYmFjay1mb3J3YXJkIGxpc3QuCisgICAg
ICAgICogVUlQcm9jZXNzL0FQSS9lZmwvZXdrX3ZpZXcuaDoKKyAgICAgICAgKiBVSVByb2Nlc3Mv
QVBJL2VmbC9ld2tfdmlld19sb2FkZXJfY2xpZW50LmNwcDoKKyAgICAgICAgKGRpZENoYW5nZUJh
Y2tGb3J3YXJkTGlzdCk6IFRoZSBjYWxsYmFjayBhZGRlZCB0byB1cGRhdGUgYmFjay1mb3J3YXJk
IGxpc3QgaXRlbXMgY2FjaGUuCisgICAgICAgIChld2tfdmlld19sb2FkZXJfY2xpZW50X2F0dGFj
aCk6CisKIDIwMTItMDgtMDcgIE1pa2hhaWwgUG96ZG55YWtvdiAgPG1pa2hhaWwucG96ZG55YWtv
dkBpbnRlbC5jb20+CiAKICAgICAgICAgQ1VTVE9NX1NDSEVNRV9IQU5ETEVSIGZsYWcgc2hvdWxk
IGRlcGVuZCBvbiBSRUdJU1RFUl9QUk9UT0NPTF9IQU5ETEVSCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViS2l0Mi9QbGF0Zm9ybUVmbC5jbWFrZSBiL1NvdXJjZS9XZWJLaXQyL1BsYXRmb3JtRWZsLmNt
YWtlCmluZGV4IDA4YWFhY2UuLjcxNWUxMTcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1Bs
YXRmb3JtRWZsLmNtYWtlCisrKyBiL1NvdXJjZS9XZWJLaXQyL1BsYXRmb3JtRWZsLmNtYWtlCkBA
IC00MSw2ICs0MSw4IEBAIExJU1QoQVBQRU5EIFdlYktpdDJfU09VUkNFUwogICAgIFVJUHJvY2Vz
cy9BUEkvZWZsL05ldHdvcmtJbmZvUHJvdmlkZXIuY3BwCiAgICAgVUlQcm9jZXNzL0FQSS9lZmwv
UGFnZUNsaWVudEltcGwuY3BwCiAgICAgVUlQcm9jZXNzL0FQSS9lZmwvVmlicmF0aW9uUHJvdmlk
ZXIuY3BwCisgICAgVUlQcm9jZXNzL0FQSS9lZmwvZXdrX2JhY2tfZm9yd2FyZF9saXN0LmNwcAor
ICAgIFVJUHJvY2Vzcy9BUEkvZWZsL2V3a19iYWNrX2ZvcndhcmRfbGlzdF9pdGVtLmNwcAogICAg
IFVJUHJvY2Vzcy9BUEkvZWZsL2V3a19jb250ZXh0LmNwcAogICAgIFVJUHJvY2Vzcy9BUEkvZWZs
L2V3a19jb250ZXh0X2Rvd25sb2FkX2NsaWVudC5jcHAKICAgICBVSVByb2Nlc3MvQVBJL2VmbC9l
d2tfY29udGV4dF9yZXF1ZXN0X21hbmFnZXJfY2xpZW50LmNwcApAQCAtMTg4LDYgKzE5MCw4IEBA
IFNFVChGb3J3YXJkaW5nTmV0d29ya0hlYWRlcnNfTkFNRSBmb3J3YXJkaW5nLWhlYWRlclNvdXAp
CiBDT05GSUdVUkVfRklMRShlZmwvZXdlYmtpdDIucGMuaW4gJHtDTUFLRV9CSU5BUllfRElSfS9X
ZWJLaXQyL2VmbC9ld2Via2l0Mi5wYyBAT05MWSkKIFNFVCAoRVdlYktpdDJfSEVBREVSUwogICAg
ICIke0NNQUtFX0NVUlJFTlRfU09VUkNFX0RJUn0vVUlQcm9jZXNzL0FQSS9lZmwvRVdlYktpdDIu
aCIKKyAgICAiJHtDTUFLRV9DVVJSRU5UX1NPVVJDRV9ESVJ9L1VJUHJvY2Vzcy9BUEkvZWZsL2V3
a19iYWNrX2ZvcndhcmRfbGlzdC5oIgorICAgICIke0NNQUtFX0NVUlJFTlRfU09VUkNFX0RJUn0v
VUlQcm9jZXNzL0FQSS9lZmwvZXdrX2JhY2tfZm9yd2FyZF9saXN0X2l0ZW0uaCIKICAgICAiJHtD
TUFLRV9DVVJSRU5UX1NPVVJDRV9ESVJ9L1VJUHJvY2Vzcy9BUEkvZWZsL2V3a19jb250ZXh0Lmgi
CiAgICAgIiR7Q01BS0VfQ1VSUkVOVF9TT1VSQ0VfRElSfS9VSVByb2Nlc3MvQVBJL2VmbC9ld2tf
Y29va2llX21hbmFnZXIuaCIKICAgICAiJHtDTUFLRV9DVVJSRU5UX1NPVVJDRV9ESVJ9L1VJUHJv
Y2Vzcy9BUEkvZWZsL2V3a19kb3dubG9hZF9qb2IuaCIKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJL
aXQyL1VJUHJvY2Vzcy9BUEkvZWZsL0VXZWJLaXQyLmggYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nl
c3MvQVBJL2VmbC9FV2ViS2l0Mi5oCmluZGV4IDlhMDUyZGEuLmQ5ODAyM2QgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZWZsL0VXZWJLaXQyLmgKKysrIGIvU291cmNl
L1dlYktpdDIvVUlQcm9jZXNzL0FQSS9lZmwvRVdlYktpdDIuaApAQCAtMjgsNiArMjgsOCBAQAog
I2lmbmRlZiBFV2ViS2l0Ml9oCiAjZGVmaW5lIEVXZWJLaXQyX2gKIAorI2luY2x1ZGUgImV3a19i
YWNrX2ZvcndhcmRfbGlzdC5oIgorI2luY2x1ZGUgImV3a19iYWNrX2ZvcndhcmRfbGlzdF9pdGVt
LmgiCiAjaW5jbHVkZSAiZXdrX2NvbnRleHQuaCIKICNpbmNsdWRlICJld2tfY29va2llX21hbmFn
ZXIuaCIKICNpbmNsdWRlICJld2tfZG93bmxvYWRfam9iLmgiCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2VmbC9ld2tfYmFja19mb3J3YXJkX2xpc3QuY3BwIGIvU291
cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9lZmwvZXdrX2JhY2tfZm9yd2FyZF9saXN0LmNwcApu
ZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41YjhlMmQ3Ci0tLSAvZGV2L251bGwK
KysrIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9lZmwvZXdrX2JhY2tfZm9yd2FyZF9s
aXN0LmNwcApAQCAtMCwwICsxLDE2MSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMiBJbnRl
bCBDb3Jwb3JhdGlvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlv
biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAq
IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcg
Y29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2Ug
Y29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBS
ZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNv
cHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3Ro
ZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElT
IFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMg
YGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0Yg
TUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0Ug
QVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRS
SUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRB
TCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUg
R09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJ
TkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBP
RiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBP
UiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElO
IEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VE
IE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUg
ImNvbmZpZy5oIgorI2luY2x1ZGUgImV3a19iYWNrX2ZvcndhcmRfbGlzdC5oIgorCisjaW5jbHVk
ZSAiV0tBUElDYXN0LmgiCisjaW5jbHVkZSAiV0tBcnJheS5oIgorI2luY2x1ZGUgIldLQmFja0Zv
cndhcmRMaXN0LmgiCisjaW5jbHVkZSAiV0tSZXRhaW5QdHIuaCIKKyNpbmNsdWRlICJld2tfYmFj
a19mb3J3YXJkX2xpc3RfaXRlbV9wcml2YXRlLmgiCisjaW5jbHVkZSA8d3RmL3RleHQvQ1N0cmlu
Zy5oPgorCit1c2luZyBuYW1lc3BhY2UgV2ViS2l0OworCit0eXBlZGVmIEhhc2hNYXA8V0tCYWNr
Rm9yd2FyZExpc3RJdGVtUmVmLCBFd2tfQmFja19Gb3J3YXJkX0xpc3RfSXRlbSo+IEl0ZW1zTWFw
OworCisvKioKKyAqIFxzdHJ1Y3QgIF9Fd2tfQmFja19Gb3J3YXJkX0xpc3QKKyAqIEBicmllZiAg
IENvbnRhaW5zIHRoZSBCYWNrIEZvcndhcmQgTGlzdCBkYXRhLgorICovCitzdHJ1Y3QgX0V3a19C
YWNrX0ZvcndhcmRfTGlzdCB7CisgICAgV0tSZXRhaW5QdHI8V0tCYWNrRm9yd2FyZExpc3RSZWY+
IHdrTGlzdDsKKyAgICBtdXRhYmxlIEl0ZW1zTWFwIHdyYXBwZXJDYWNoZTsKKworICAgIF9Fd2tf
QmFja19Gb3J3YXJkX0xpc3QoV0tCYWNrRm9yd2FyZExpc3RSZWYgbGlzdFJlZikKKyAgICAgICAg
OiB3a0xpc3QobGlzdFJlZikKKyAgICB7IH0KKworICAgIH5fRXdrX0JhY2tfRm9yd2FyZF9MaXN0
KCkKKyAgICB7CisgICAgICAgIEl0ZW1zTWFwOjppdGVyYXRvciBpdCA9IHdyYXBwZXJDYWNoZS5i
ZWdpbigpOworICAgICAgICBJdGVtc01hcDo6aXRlcmF0b3IgZW5kID0gd3JhcHBlckNhY2hlLmVu
ZCgpOworICAgICAgICBmb3IgKDsgaXQgIT0gZW5kOyArK2l0KQorICAgICAgICAgICAgZXdrX2Jh
Y2tfZm9yd2FyZF9saXN0X2l0ZW1fdW5yZWYoaXQtPnNlY29uZCk7CisgICAgfQorfTsKKworI2Rl
ZmluZSBFV0tfQkFDS19GT1JXQVJEX0xJU1RfV0tfR0VUX09SX1JFVFVSTihsaXN0LCB3a0xpc3Rf
LCAuLi4pICBcCisgICAgaWYgKCEobGlzdCkpIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBcCisgICAgICAgIEVJTkFfTE9HX0NSSVQoImxpc3QgaXMgTlVMTC4i
KTsgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgIHJldHVybiBfX1ZBX0FSR1NfXzsg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgfSAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgaWYgKCEo
bGlzdCktPndrTGlzdCkgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisg
ICAgICAgIEVJTkFfTE9HX0NSSVQoImxpc3QtPndrTGlzdCBpcyBOVUxMLiIpOyAgICAgICAgICAg
ICAgICBcCisgICAgICAgIHJldHVybiBfX1ZBX0FSR1NfXzsgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBcCisgICAgfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgV0tCYWNrRm9yd2FyZExpc3RSZWYgd2tMaXN0
XyA9IChsaXN0KS0+d2tMaXN0LmdldCgpCisKKworc3RhdGljIGlubGluZSBFd2tfQmFja19Gb3J3
YXJkX0xpc3RfSXRlbSogYWRkSXRlbVRvV3JhcHBlckNhY2hlKGNvbnN0IEV3a19CYWNrX0Zvcndh
cmRfTGlzdCogbGlzdCwgV0tCYWNrRm9yd2FyZExpc3RJdGVtUmVmIHdrSXRlbSkKK3sKKyAgICBF
SU5BX1NBRkVUWV9PTl9OVUxMX1JFVFVSTl9WQUwobGlzdCwgMCk7CisgICAgRUlOQV9TQUZFVFlf
T05fTlVMTF9SRVRVUk5fVkFMKHdrSXRlbSwgMCk7CisKKyAgICBFd2tfQmFja19Gb3J3YXJkX0xp
c3RfSXRlbSogaXRlbSA9IGxpc3QtPndyYXBwZXJDYWNoZS5nZXQod2tJdGVtKTsKKyAgICBpZiAo
IWl0ZW0pIHsKKyAgICAgICAgaXRlbSA9IGV3a19iYWNrX2ZvcndhcmRfbGlzdF9pdGVtX25ldyh3
a0l0ZW0pOworICAgICAgICBsaXN0LT53cmFwcGVyQ2FjaGUuc2V0KHdrSXRlbSwgaXRlbSk7Cisg
ICAgfQorCisgICAgcmV0dXJuIGl0ZW07Cit9CisKK0V3a19CYWNrX0ZvcndhcmRfTGlzdF9JdGVt
KiBld2tfYmFja19mb3J3YXJkX2xpc3RfY3VycmVudF9pdGVtX2dldChjb25zdCBFd2tfQmFja19G
b3J3YXJkX0xpc3QqIGxpc3QpCit7CisgICAgRVdLX0JBQ0tfRk9SV0FSRF9MSVNUX1dLX0dFVF9P
Ul9SRVRVUk4obGlzdCwgd2tMaXN0LCAwKTsKKworICAgIHJldHVybiBhZGRJdGVtVG9XcmFwcGVy
Q2FjaGUobGlzdCwgV0tCYWNrRm9yd2FyZExpc3RHZXRDdXJyZW50SXRlbSh3a0xpc3QpKTsKK30K
KworRXdrX0JhY2tfRm9yd2FyZF9MaXN0X0l0ZW0qIGV3a19iYWNrX2ZvcndhcmRfbGlzdF9wcmV2
aW91c19pdGVtX2dldChjb25zdCBFd2tfQmFja19Gb3J3YXJkX0xpc3QqIGxpc3QpCit7CisgICAg
RVdLX0JBQ0tfRk9SV0FSRF9MSVNUX1dLX0dFVF9PUl9SRVRVUk4obGlzdCwgd2tMaXN0LCAwKTsK
KworICAgIHJldHVybiBhZGRJdGVtVG9XcmFwcGVyQ2FjaGUobGlzdCwgV0tCYWNrRm9yd2FyZExp
c3RHZXRCYWNrSXRlbSh3a0xpc3QpKTsKK30KKworRXdrX0JhY2tfRm9yd2FyZF9MaXN0X0l0ZW0q
IGV3a19iYWNrX2ZvcndhcmRfbGlzdF9uZXh0X2l0ZW1fZ2V0KGNvbnN0IEV3a19CYWNrX0Zvcndh
cmRfTGlzdCogbGlzdCkKK3sKKyAgICBFV0tfQkFDS19GT1JXQVJEX0xJU1RfV0tfR0VUX09SX1JF
VFVSTihsaXN0LCB3a0xpc3QsIDApOworCisgICAgcmV0dXJuIGFkZEl0ZW1Ub1dyYXBwZXJDYWNo
ZShsaXN0LCBXS0JhY2tGb3J3YXJkTGlzdEdldEZvcndhcmRJdGVtKHdrTGlzdCkpOworfQorCitF
d2tfQmFja19Gb3J3YXJkX0xpc3RfSXRlbSogZXdrX2JhY2tfZm9yd2FyZF9saXN0X2l0ZW1fYXRf
aW5kZXhfZ2V0KGNvbnN0IEV3a19CYWNrX0ZvcndhcmRfTGlzdCogbGlzdCwgaW50IGluZGV4KQor
eworICAgIEVXS19CQUNLX0ZPUldBUkRfTElTVF9XS19HRVRfT1JfUkVUVVJOKGxpc3QsIHdrTGlz
dCwgMCk7CisKKyAgICByZXR1cm4gYWRkSXRlbVRvV3JhcHBlckNhY2hlKGxpc3QsIFdLQmFja0Zv
cndhcmRMaXN0R2V0SXRlbUF0SW5kZXgod2tMaXN0LCBpbmRleCkpOworfQorCit1bnNpZ25lZCBl
d2tfYmFja19mb3J3YXJkX2xpc3RfY291bnQoRXdrX0JhY2tfRm9yd2FyZF9MaXN0KiBsaXN0KQor
eworICAgIEVXS19CQUNLX0ZPUldBUkRfTElTVF9XS19HRVRfT1JfUkVUVVJOKGxpc3QsIHdrTGlz
dCwgMCk7CisKKyAgICBjb25zdCB1bnNpZ25lZCBjdXJyZW50SXRlbSA9IGV3a19iYWNrX2Zvcndh
cmRfbGlzdF9jdXJyZW50X2l0ZW1fZ2V0KGxpc3QpID8gMSA6IDA7CisKKyAgICByZXR1cm4gV0tC
YWNrRm9yd2FyZExpc3RHZXRCYWNrTGlzdENvdW50KHdrTGlzdCkgKyBXS0JhY2tGb3J3YXJkTGlz
dEdldEZvcndhcmRMaXN0Q291bnQod2tMaXN0KSArIGN1cnJlbnRJdGVtOworfQorCisKKy8qKgor
ICogQGludGVybmFsCisgKiBVcGRhdGVzIGl0ZW1zIGNhY2hlLgorICovCit2b2lkIGV3a19iYWNr
X2ZvcndhcmRfbGlzdF9jaGFuZ2VkKEV3a19CYWNrX0ZvcndhcmRfTGlzdCogbGlzdCwgV0tCYWNr
Rm9yd2FyZExpc3RJdGVtUmVmIHdrQWRkZWRJdGVtLCBXS0FycmF5UmVmIHdrUmVtb3ZlZEl0ZW1z
KQoreworICAgIGFkZEl0ZW1Ub1dyYXBwZXJDYWNoZShsaXN0LCB3a0FkZGVkSXRlbSk7IC8vIFB1
dHMgbmV3IGl0ZW0gdG8gdGhlIGNhY2hlLgorCisgICAgY29uc3Qgc2l6ZV90IHJlbW92ZWRJdGVt
c1NpemUgPSB3a1JlbW92ZWRJdGVtcyA/IFdLQXJyYXlHZXRTaXplKHdrUmVtb3ZlZEl0ZW1zKSA6
IDA7CisgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCByZW1vdmVkSXRlbXNTaXplOyArK2kpIHsK
KyAgICAgICAgV0tCYWNrRm9yd2FyZExpc3RJdGVtUmVmIHdrSXRlbSA9IHN0YXRpY19jYXN0PFdL
QmFja0ZvcndhcmRMaXN0SXRlbVJlZj4oV0tBcnJheUdldEl0ZW1BdEluZGV4KHdrUmVtb3ZlZEl0
ZW1zLCBpKSk7CisgICAgICAgIGlmIChFd2tfQmFja19Gb3J3YXJkX0xpc3RfSXRlbSogaXRlbSA9
IGxpc3QtPndyYXBwZXJDYWNoZS50YWtlKHdrSXRlbSkpCisgICAgICAgICAgICBld2tfYmFja19m
b3J3YXJkX2xpc3RfaXRlbV91bnJlZihpdGVtKTsKKyAgICB9Cit9CisKKy8qKgorICogQGludGVy
bmFsCisgKiBDb25zdHJ1Y3RzIGEgRXdrX0JhY2tfRm9yd2FyZF9MaXN0IGZyb20gYSBXS0JhY2tG
b3J3YXJkTGlzdFJlZi4KKyAqLworRXdrX0JhY2tfRm9yd2FyZF9MaXN0KiBld2tfYmFja19mb3J3
YXJkX2xpc3RfbmV3KFdLQmFja0ZvcndhcmRMaXN0UmVmIHdrQmFja0ZvcndhcmRMaXN0UmVmKQor
eworICAgIEVJTkFfU0FGRVRZX09OX05VTExfUkVUVVJOX1ZBTCh3a0JhY2tGb3J3YXJkTGlzdFJl
ZiwgMCk7CisKKyAgICByZXR1cm4gbmV3IEV3a19CYWNrX0ZvcndhcmRfTGlzdCh3a0JhY2tGb3J3
YXJkTGlzdFJlZik7Cit9CisKKy8qKgorICogQGludGVybmFsCisgKiBGcmVlcyBhIEV3a19CYWNr
X0ZvcndhcmRfTGlzdCBvYmplY3QuCisgKi8KK3ZvaWQgZXdrX2JhY2tfZm9yd2FyZF9saXN0X2Zy
ZWUoRXdrX0JhY2tfRm9yd2FyZF9MaXN0KiBsaXN0KQoreworICAgIEVJTkFfU0FGRVRZX09OX05V
TExfUkVUVVJOKGxpc3QpOworCisgICAgZGVsZXRlIGxpc3Q7Cit9CmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2VmbC9ld2tfYmFja19mb3J3YXJkX2xpc3QuaCBiL1Nv
dXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZWZsL2V3a19iYWNrX2ZvcndhcmRfbGlzdC5oCm5l
dyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjViOWNjYTcKLS0tIC9kZXYvbnVsbAor
KysgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2VmbC9ld2tfYmFja19mb3J3YXJkX2xp
c3QuaApAQCAtMCwwICsxLDkyIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEyIEludGVsIENv
cnBvcmF0aW9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFu
ZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9k
aWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25k
aXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2Rl
IG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlz
dHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJp
Z2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBt
YXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09G
VFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFT
IElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJD
SEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUg
RElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVU
T1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBT
UEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09E
UyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNT
CisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJ
QUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRP
UlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5Z
IFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YK
KyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisvKioKKyAqIEBmaWxl
ICAgIGV3a19iYWNrX2ZvcndhcmRfbGlzdC5oCisgKiBAYnJpZWYgICBEZXNjcmliZXMgdGhlIEV3
ayBCYWNrIEZvcndhcmQgTGlzdCBBUEkuCisgKi8KKworI2lmbmRlZiBld2tfYmFja19mb3J3YXJk
X2xpc3RfaAorI2RlZmluZSBld2tfYmFja19mb3J3YXJkX2xpc3RfaAorCisjaW5jbHVkZSAiZXdr
X2JhY2tfZm9yd2FyZF9saXN0X2l0ZW0uaCIKKworI2lmZGVmIF9fY3BsdXNwbHVzCitleHRlcm4g
IkMiIHsKKyNlbmRpZgorCisvKiogQ3JlYXRlcyBhIHR5cGUgbmFtZSBmb3IgX0V3a19CYWNrX0Zv
cndhcmRfTGlzdCAqLwordHlwZWRlZiBzdHJ1Y3QgX0V3a19CYWNrX0ZvcndhcmRfTGlzdCBFd2tf
QmFja19Gb3J3YXJkX0xpc3Q7CisKKy8qKgorICogUmV0dXJucyB0aGUgY3VycmVudCBpdGVtIGlu
IHRoZSBAYSBsaXN0LgorICoKKyAqIEBwYXJhbSBsaXN0IHRoZSBiYWNrLWZvcndhcmQgbGlzdCBp
bnN0YW5jZQorICoKKyAqIEByZXR1cm4gdGhlIGN1cnJlbnQgaXRlbSBpbiB0aGUgQGEgbGlzdCBv
ciBAYyBOVUxMIGluIGNhc2Ugb2YgZXJyb3IKKyAqLworRUFQSSBFd2tfQmFja19Gb3J3YXJkX0xp
c3RfSXRlbSAqZXdrX2JhY2tfZm9yd2FyZF9saXN0X2N1cnJlbnRfaXRlbV9nZXQoY29uc3QgRXdr
X0JhY2tfRm9yd2FyZF9MaXN0ICpsaXN0KTsKKworLyoqCisgKiBSZXR1cm5zIHRoZSBpdGVtIHRo
YXQgcHJlY2VkZXMgdGhlIGN1cnJlbnQgaXRlbSBpbiB0aGUgQGEgbGlzdC4KKyAqCisgKiBAcGFy
YW0gbGlzdCB0aGUgYmFjay1mb3J3YXJkIGxpc3QgaW5zdGFuY2UKKyAqCisgKiBAcmV0dXJuIHRo
ZSBpdGVtIHRoYXQgcHJlY2VkZXMgdGhlIGN1cnJlbnQgaXRlbSB0aGUgQGEgbGlzdCBvciBAYyBO
VUxMIGluIGNhc2Ugb2YgZXJyb3IKKyAqLworRUFQSSBFd2tfQmFja19Gb3J3YXJkX0xpc3RfSXRl
bSAqZXdrX2JhY2tfZm9yd2FyZF9saXN0X3ByZXZpb3VzX2l0ZW1fZ2V0KGNvbnN0IEV3a19CYWNr
X0ZvcndhcmRfTGlzdCAqbGlzdCk7CisKKy8qKgorICogUmV0dXJucyB0aGUgaXRlbSB0aGF0IGZv
bGxvd3MgdGhlIGN1cnJlbnQgaXRlbSBpbiB0aGUgQGEgbGlzdC4KKyAqCisgKiBAcGFyYW0gbGlz
dCB0aGUgYmFjay1mb3J3YXJkIGxpc3QgaW5zdGFuY2UKKyAqCisgKiBAcmV0dXJuIHRoZSBpdGVt
IHRoYXQgZm9sbG93cyB0aGUgY3VycmVudCBpdGVtIGluIHRoZSBAYSBsaXN0IG9yIEBjIE5VTEwg
aW4gY2FzZSBvZiBlcnJvcgorICovCitFQVBJIEV3a19CYWNrX0ZvcndhcmRfTGlzdF9JdGVtICpl
d2tfYmFja19mb3J3YXJkX2xpc3RfbmV4dF9pdGVtX2dldChjb25zdCBFd2tfQmFja19Gb3J3YXJk
X0xpc3QgKmxpc3QpOworCisvKioKKyAqIFJldHVybnMgdGhlIGl0ZW0gYXQgYSBnaXZlbiBAYSBp
bmRleCByZWxhdGl2ZSB0byB0aGUgY3VycmVudCBpdGVtLgorICoKKyAqIEBwYXJhbSBsaXN0IHRo
ZSBiYWNrLWZvcndhcmQgbGlzdCBpbnN0YW5jZQorICogQHBhcmFtIGluZGV4IHRoZSBpbmRleCBv
ZiB0aGUgaXRlbQorICoKKyAqIEByZXR1cm4gdGhlIGl0ZW0gYXQgYSBnaXZlbiBAYSBpbmRleCBy
ZWxhdGl2ZSB0byB0aGUgY3VycmVudCBpdGVtIG9yIEBjIE5VTEwgaW4gY2FzZSBvZiBlcnJvcgor
ICovCitFQVBJIEV3a19CYWNrX0ZvcndhcmRfTGlzdF9JdGVtICpld2tfYmFja19mb3J3YXJkX2xp
c3RfaXRlbV9hdF9pbmRleF9nZXQoY29uc3QgRXdrX0JhY2tfRm9yd2FyZF9MaXN0ICpsaXN0LCBp
bnQgaW5kZXgpOworCisvKioKKyAqIFJldHVybnMgdGhlIGxlbmd0aCBvZiB0aGUgYmFjay1mb3J3
YXJkIGxpc3QgaW5jbHVkaW5nIGN1cnJlbnQgaXRlbS4KKyAqCisgKiBAcGFyYW0gbGlzdCB0aGUg
YmFjay1mb3J3YXJkIGxpc3QgaW5zdGFuY2UKKyAqCisgKiBAcmV0dXJuIHRoZSBsZW5ndGggb2Yg
dGhlIGJhY2stZm9yd2FyZCBsaXN0IGluY2x1ZGluZyBjdXJyZW50IGl0ZW0gb3IgQGMgMCBpbiBj
YXNlIG9mIGVycm9yCisgKi8KK0VBUEkgdW5zaWduZWQgZXdrX2JhY2tfZm9yd2FyZF9saXN0X2Nv
dW50KEV3a19CYWNrX0ZvcndhcmRfTGlzdCAqbGlzdCk7CisKKyNpZmRlZiBfX2NwbHVzcGx1cwor
fQorI2VuZGlmCisjZW5kaWYgLy8gZXdrX2JhY2tfZm9yd2FyZF9saXN0X2gKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZWZsL2V3a19iYWNrX2ZvcndhcmRfbGlzdF9p
dGVtLmNwcCBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZWZsL2V3a19iYWNrX2Zvcndh
cmRfbGlzdF9pdGVtLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zMDRh
ZGI1Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9lZmwv
ZXdrX2JhY2tfZm9yd2FyZF9saXN0X2l0ZW0uY3BwCkBAIC0wLDAgKzEsMTM1IEBACisvKgorICog
Q29weXJpZ2h0IChDKSAyMDEyIEludGVsIENvcnBvcmF0aW9uLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9y
bXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3Zp
ZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVk
aXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqICAgIG5vdGljZSwgdGhpcyBpdGVtIG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0
IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgaXRlbSBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBk
b2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlz
dHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5D
LiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJ
TVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhF
IElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEg
UEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwg
QVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJF
Q1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05T
RVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJF
TUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERB
VEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FV
U0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJB
Q1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9U
SEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNP
RlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERB
TUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiZXdrX2JhY2tfZm9y
d2FyZF9saXN0X2l0ZW0uaCIKKworI2luY2x1ZGUgIldLQVBJQ2FzdC5oIgorI2luY2x1ZGUgIldL
QmFja0ZvcndhcmRMaXN0SXRlbS5oIgorI2luY2x1ZGUgIldLUmV0YWluUHRyLmgiCisjaW5jbHVk
ZSAiV0tTdHJpbmcuaCIKKyNpbmNsdWRlICJXS1VSTC5oIgorI2luY2x1ZGUgPHd0Zi90ZXh0L0NT
dHJpbmcuaD4KKwordXNpbmcgbmFtZXNwYWNlIFdlYktpdDsKKworY2xhc3MgV0tFaW5hU2hhcmVk
U3RyaW5nIHsKK3B1YmxpYzoKKyAgICB0ZW1wbGF0ZSA8dHlwZW5hbWUgV0tSZWZUeXBlPgorICAg
IFdLRWluYVNoYXJlZFN0cmluZyhXS0Fkb3B0VGFnLCBXS1JlZlR5cGUgc3RyUmVmKQorICAgICAg
ICA6IG1fc3RyaW5nKDApCisgICAgeworICAgICAgICBpZiAoc3RyUmVmKSB7CisgICAgICAgICAg
ICBtX3N0cmluZyA9IGVpbmFfc3RyaW5nc2hhcmVfYWRkKHRvSW1wbChzdHJSZWYpLT5zdHJpbmco
KS51dGY4KCkuZGF0YSgpKTsKKyAgICAgICAgICAgIEFTU0VSVChtX3N0cmluZyk7CisgICAgICAg
ICAgICBXS1JlbGVhc2Uoc3RyUmVmKTsgLy8gSGF2ZSBzdG9yZWQgYSBjb3B5IGludG8gZWluYV9z
dHJpbmdzaGFyZSwgZG8gbm90IG5lZWQgYWRvcHRlZCBzdHJSZWYuCisgICAgICAgIH0KKyAgICB9
CisKKyAgICB0ZW1wbGF0ZSA8dHlwZW5hbWUgV0tSZWZUeXBlPgorICAgIFdLRWluYVNoYXJlZFN0
cmluZyhXS1JlZlR5cGUgc3RyUmVmKQorICAgICAgICA6IG1fc3RyaW5nKDApCisgICAgeworICAg
ICAgICBpZiAoc3RyUmVmKSB7CisgICAgICAgICAgICBtX3N0cmluZyA9IGVpbmFfc3RyaW5nc2hh
cmVfYWRkKHRvSW1wbChzdHJSZWYpLT5zdHJpbmcoKS51dGY4KCkuZGF0YSgpKTsKKyAgICAgICAg
ICAgIEFTU0VSVChtX3N0cmluZyk7CisgICAgICAgIH0KKyAgICB9CisKKyAgICB+V0tFaW5hU2hh
cmVkU3RyaW5nKCkgeyBlaW5hX3N0cmluZ3NoYXJlX2RlbChtX3N0cmluZyk7IH0KKyAgICBpbmxp
bmUgb3BlcmF0b3IgY29uc3QgY2hhciogKCkgY29uc3QgeyByZXR1cm4gbV9zdHJpbmc7IH0KKwor
cHJpdmF0ZToKKyAgICBjb25zdCBjaGFyKiBtX3N0cmluZzsKK307CisKKy8qKgorICogXHN0cnVj
dCAgX0V3a19CYWNrX0ZvcndhcmRfTGlzdAorICogQGJyaWVmICAgQ29udGFpbnMgdGhlIEJhY2sg
Rm9yd2FyZCBMaXN0IGRhdGEuCisgKi8KK3N0cnVjdCBfRXdrX0JhY2tfRm9yd2FyZF9MaXN0X0l0
ZW0geworICAgIHVuc2lnbmVkIGludCBfX3JlZjsgLyoqPCB0aGUgcmVmZXJlbmNlIGNvdW50IG9m
IHRoZSBvYmplY3QgKi8KKyAgICBXS1JldGFpblB0cjxXS0JhY2tGb3J3YXJkTGlzdEl0ZW1SZWY+
IHdrSXRlbTsKKyAgICBXS0VpbmFTaGFyZWRTdHJpbmcgdXJpOworICAgIFdLRWluYVNoYXJlZFN0
cmluZyB0aXRsZTsKKyAgICBXS0VpbmFTaGFyZWRTdHJpbmcgb3JpZ2luYWxVcmk7CisKKyAgICBf
RXdrX0JhY2tfRm9yd2FyZF9MaXN0X0l0ZW0oV0tCYWNrRm9yd2FyZExpc3RJdGVtUmVmIGl0ZW1S
ZWYpCisgICAgICAgIDogX19yZWYoMSkKKyAgICAgICAgLCB3a0l0ZW0oaXRlbVJlZikKKyAgICAg
ICAgLCB1cmkoQWRvcHRXSywgV0tCYWNrRm9yd2FyZExpc3RJdGVtQ29weVVSTChpdGVtUmVmKSkK
KyAgICAgICAgLCB0aXRsZShBZG9wdFdLLCBXS0JhY2tGb3J3YXJkTGlzdEl0ZW1Db3B5VGl0bGUo
aXRlbVJlZikpCisgICAgICAgICwgb3JpZ2luYWxVcmkoQWRvcHRXSywgV0tCYWNrRm9yd2FyZExp
c3RJdGVtQ29weU9yaWdpbmFsVVJMKGl0ZW1SZWYpKQorICAgIHsgfQorCisgICAgfl9Fd2tfQmFj
a19Gb3J3YXJkX0xpc3RfSXRlbSgpCisgICAgeworICAgICAgICBBU1NFUlQoIV9fcmVmKTsKKyAg
ICB9Cit9OworCit2b2lkIGV3a19iYWNrX2ZvcndhcmRfbGlzdF9pdGVtX3JlZihFd2tfQmFja19G
b3J3YXJkX0xpc3RfSXRlbSogaXRlbSkKK3sKKyAgICBFSU5BX1NBRkVUWV9PTl9OVUxMX1JFVFVS
TihpdGVtKTsKKyAgICArK2l0ZW0tPl9fcmVmOworfQorCit2b2lkIGV3a19iYWNrX2ZvcndhcmRf
bGlzdF9pdGVtX3VucmVmKEV3a19CYWNrX0ZvcndhcmRfTGlzdF9JdGVtKiBpdGVtKQoreworICAg
IEVJTkFfU0FGRVRZX09OX05VTExfUkVUVVJOKGl0ZW0pOworCisgICAgaWYgKC0taXRlbS0+X19y
ZWYpCisgICAgICAgIHJldHVybjsKKworICAgIGRlbGV0ZSBpdGVtOworfQorCitjb25zdCBjaGFy
KiBld2tfYmFja19mb3J3YXJkX2xpc3RfaXRlbV91cmlfZ2V0KGNvbnN0IEV3a19CYWNrX0Zvcndh
cmRfTGlzdF9JdGVtKiBpdGVtKQoreworICAgIEVJTkFfU0FGRVRZX09OX05VTExfUkVUVVJOX1ZB
TChpdGVtLCAwKTsKKworICAgIHJldHVybiBpdGVtLT51cmk7Cit9CisKK2NvbnN0IGNoYXIqIGV3
a19iYWNrX2ZvcndhcmRfbGlzdF9pdGVtX3RpdGxlX2dldChjb25zdCBFd2tfQmFja19Gb3J3YXJk
X0xpc3RfSXRlbSogaXRlbSkKK3sKKyAgICBFSU5BX1NBRkVUWV9PTl9OVUxMX1JFVFVSTl9WQUwo
aXRlbSwgMCk7CisKKyAgICByZXR1cm4gaXRlbS0+dGl0bGU7Cit9CisKK2NvbnN0IGNoYXIqIGV3
a19iYWNrX2ZvcndhcmRfbGlzdF9pdGVtX29yaWdpbmFsX3VyaV9nZXQoY29uc3QgRXdrX0JhY2tf
Rm9yd2FyZF9MaXN0X0l0ZW0qIGl0ZW0pCit7CisgICAgRUlOQV9TQUZFVFlfT05fTlVMTF9SRVRV
Uk5fVkFMKGl0ZW0sIDApOworCisgICAgcmV0dXJuIGl0ZW0tPm9yaWdpbmFsVXJpOworfQorCitF
d2tfQmFja19Gb3J3YXJkX0xpc3RfSXRlbSogZXdrX2JhY2tfZm9yd2FyZF9saXN0X2l0ZW1fbmV3
KFdLQmFja0ZvcndhcmRMaXN0SXRlbVJlZiBiYWNrRm9yd2FyZExpc3RJdGVtRGF0YSkKK3sKKyAg
ICBFSU5BX1NBRkVUWV9PTl9OVUxMX1JFVFVSTl9WQUwoYmFja0ZvcndhcmRMaXN0SXRlbURhdGEs
IDApOworCisgICAgcmV0dXJuIG5ldyBFd2tfQmFja19Gb3J3YXJkX0xpc3RfSXRlbShiYWNrRm9y
d2FyZExpc3RJdGVtRGF0YSk7Cit9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nl
c3MvQVBJL2VmbC9ld2tfYmFja19mb3J3YXJkX2xpc3RfaXRlbS5oIGIvU291cmNlL1dlYktpdDIv
VUlQcm9jZXNzL0FQSS9lZmwvZXdrX2JhY2tfZm9yd2FyZF9saXN0X2l0ZW0uaApuZXcgZmlsZSBt
b2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44MTFmMGUxCi0tLSAvZGV2L251bGwKKysrIGIvU291
cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9lZmwvZXdrX2JhY2tfZm9yd2FyZF9saXN0X2l0ZW0u
aApAQCAtMCwwICsxLDEwNyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMiBJbnRlbCBDb3Jw
b3JhdGlvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQg
dXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlm
aWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0
aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBt
dXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3Ry
aWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdo
dAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0
ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRX
QVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJ
UycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hB
TlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJ
U0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9S
UworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BF
Q0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMg
T1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwor
ICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFC
SUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JU
IChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBX
QVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisg
KiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworLyoqCisgKiBAZmlsZSAg
ICBld2tfYmFja19mb3J3YXJkX2xpc3RfaXRlbS5oCisgKiBAYnJpZWYgICBEZXNjcmliZXMgdGhl
IEV3ayBCYWNrIEZvcndhcmQgTGlzdCBJdGVtIEFQSS4KKyAqLworCisjaWZuZGVmIGV3a19iYWNr
X2ZvcndhcmRfbGlzdF9pdGVtX2gKKyNkZWZpbmUgZXdrX2JhY2tfZm9yd2FyZF9saXN0X2l0ZW1f
aAorCisjaW5jbHVkZSA8RWluYS5oPgorCisjaWZkZWYgX19jcGx1c3BsdXMKK2V4dGVybiAiQyIg
eworI2VuZGlmCisKKy8qKiBDcmVhdGVzIGEgdHlwZSBuYW1lIGZvciBfRXdrX0JhY2tfRm9yd2Fy
ZF9MaXN0X0l0ZW0gKi8KK3R5cGVkZWYgc3RydWN0IF9Fd2tfQmFja19Gb3J3YXJkX0xpc3RfSXRl
bSBFd2tfQmFja19Gb3J3YXJkX0xpc3RfSXRlbTsKKworLyoqCisgKiBJbmNyZWFzZXMgdGhlIHJl
ZmVyZW5jZSBjb3VudCBvZiB0aGUgZ2l2ZW4gb2JqZWN0LgorICoKKyAqIEBwYXJhbSBpdGVtIHRo
ZSBiYWNrLWZvcndhcmQgbGlzdCBpdGVtIGluc3RhbmNlIHRvIGluY3JlYXNlIHRoZSByZWZlcmVu
Y2UgY291bnQKKyAqLworRUFQSSB2b2lkIGV3a19iYWNrX2ZvcndhcmRfbGlzdF9pdGVtX3JlZihF
d2tfQmFja19Gb3J3YXJkX0xpc3RfSXRlbSAqaXRlbSk7CisKKy8qKgorICogRGVjcmVhc2VzIHRo
ZSByZWZlcmVuY2UgY291bnQgb2YgdGhlIGdpdmVuIG9iamVjdCwgcG9zc2libHkgZnJlZWluZyBp
dC4KKyAqCisgKiBXaGVuIHRoZSByZWZlcmVuY2UgY291bnQgcmVhY2hlcyAwLCB0aGUgaXRlbSBp
cyBmcmVlZC4KKyAqCisgKiBAcGFyYW0gaXRlbSB0aGUgYmFjay1mb3J3YXJkIGxpc3QgaXRlbSBp
bnN0YW5jZSB0byBkZWNyZWFzZSB0aGUgcmVmZXJlbmNlIGNvdW50CisgKi8KK0VBUEkgdm9pZCBl
d2tfYmFja19mb3J3YXJkX2xpc3RfaXRlbV91bnJlZihFd2tfQmFja19Gb3J3YXJkX0xpc3RfSXRl
bSAqaXRlbSk7CisKKy8qKgorICogUmV0dXJucyBVUkkgb2YgdGhlIGl0ZW0uCisgKgorICogVGhl
IHJldHVybmVkIFVSSSBtYXkgZGlmZmVyIGZyb20gdGhlIG9yaWdpbmFsIFVSSSAoRm9yIGV4YW1w
bGUgaWYgdGhlIHBhZ2Ugd2FzIHJlZGlyZWN0ZWQpLgorICoKKyAqIEBzZWUgZXdrX2JhY2tfZm9y
d2FyZF9saXN0X2l0ZW1fb3JpZ2luYWxfdXJpX2dldCgpCisgKgorICogQHBhcmFtIGl0ZW0gdGhl
IGJhY2stZm9yd2FyZCBsaXN0IGl0ZW0gaW5zdGFuY2UKKyAqCisgKiBAcmV0dXJuIHRoZSBVUkkg
b2YgdGhlIEBhIGl0ZW0gb3IgQGMgTlVMTCBpbiBjYXNlIG9mIGVycm9yLiBUaGlzIHBvaW50ZXIg
aXMKKyAqICAgICAgICAgZ3VhcmFudGVlZCB0byBiZSBlaW5hX3N0cmluZ3NoYXJlLCBzbyB3aGVu
ZXZlciBwb3NzaWJsZQorICogICAgICAgICBzYXZlIHlvdXJzZWxmIHNvbWUgY3B1IGN5Y2xlcyBh
bmQgdXNlCisgKiAgICAgICAgIGVpbmFfc3RyaW5nc2hhcmVfcmVmKCkgaW5zdGVhZCBvZiBlaW5h
X3N0cmluZ3NoYXJlX2FkZCgpIG9yCisgKiAgICAgICAgIHN0cmR1cCgpCisgKi8KK0VBUEkgY29u
c3QgY2hhciAqZXdrX2JhY2tfZm9yd2FyZF9saXN0X2l0ZW1fdXJpX2dldChjb25zdCBFd2tfQmFj
a19Gb3J3YXJkX0xpc3RfSXRlbSAqaXRlbSk7CisKKy8qKgorICogUmV0dXJucyB0aXRsZSBvZiB0
aGUgaXRlbS4KKyAqCisgKiBAcGFyYW0gaXRlbSB0aGUgYmFjay1mb3J3YXJkIGxpc3QgaXRlbSBp
bnN0YW5jZQorICoKKyAqIEByZXR1cm4gdGhlIHRpdGxlIG9mIHRoZSBAYSBpdGVtIG9yIEBjIE5V
TEwgaW4gY2FzZSBvZiBlcnJvci4gVGhpcyBwb2ludGVyIGlzCisgKiAgICAgICAgIGd1YXJhbnRl
ZWQgdG8gYmUgZWluYV9zdHJpbmdzaGFyZSwgc28gd2hlbmV2ZXIgcG9zc2libGUKKyAqICAgICAg
ICAgc2F2ZSB5b3Vyc2VsZiBzb21lIGNwdSBjeWNsZXMgYW5kIHVzZQorICogICAgICAgICBlaW5h
X3N0cmluZ3NoYXJlX3JlZigpIGluc3RlYWQgb2YgZWluYV9zdHJpbmdzaGFyZV9hZGQoKSBvcgor
ICogICAgICAgICBzdHJkdXAoKQorICovCitFQVBJIGNvbnN0IGNoYXIgKmV3a19iYWNrX2Zvcndh
cmRfbGlzdF9pdGVtX3RpdGxlX2dldChjb25zdCBFd2tfQmFja19Gb3J3YXJkX0xpc3RfSXRlbSAq
aXRlbSk7CisKKy8qKgorICogUmV0dXJucyBvcmlnaW5hbCBVUkkgb2YgdGhlIGl0ZW0uCisgKgor
ICogQHNlZSBld2tfYmFja19mb3J3YXJkX2xpc3RfaXRlbV91cmlfZ2V0KCkKKyAqCisgKiBAcGFy
YW0gaXRlbSB0aGUgYmFjay1mb3J3YXJkIGxpc3QgaXRlbSBpbnN0YW5jZQorICoKKyAqIEByZXR1
cm4gdGhlIG9yaWdpbmFsIFVSSSBvZiB0aGUgQGEgaXRlbSBvciBAYyBOVUxMIGluIGNhc2Ugb2Yg
ZXJyb3IuIFRoaXMgcG9pbnRlciBpcworICogICAgICAgICBndWFyYW50ZWVkIHRvIGJlIGVpbmFf
c3RyaW5nc2hhcmUsIHNvIHdoZW5ldmVyIHBvc3NpYmxlCisgKiAgICAgICAgIHNhdmUgeW91cnNl
bGYgc29tZSBjcHUgY3ljbGVzIGFuZCB1c2UKKyAqICAgICAgICAgZWluYV9zdHJpbmdzaGFyZV9y
ZWYoKSBpbnN0ZWFkIG9mIGVpbmFfc3RyaW5nc2hhcmVfYWRkKCkgb3IKKyAqICAgICAgICAgc3Ry
ZHVwKCkKKyAqLworRUFQSSBjb25zdCBjaGFyICpld2tfYmFja19mb3J3YXJkX2xpc3RfaXRlbV9v
cmlnaW5hbF91cmlfZ2V0KGNvbnN0IEV3a19CYWNrX0ZvcndhcmRfTGlzdF9JdGVtICppdGVtKTsK
KworI2lmZGVmIF9fY3BsdXNwbHVzCit9CisjZW5kaWYKKyNlbmRpZiAvLyBld2tfYmFja19mb3J3
YXJkX2xpc3RfaXRlbV9oCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJ
L2VmbC9ld2tfYmFja19mb3J3YXJkX2xpc3RfaXRlbV9wcml2YXRlLmggYi9Tb3VyY2UvV2ViS2l0
Mi9VSVByb2Nlc3MvQVBJL2VmbC9ld2tfYmFja19mb3J3YXJkX2xpc3RfaXRlbV9wcml2YXRlLmgK
bmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOGMyYzY4NAotLS0gL2Rldi9udWxs
CisrKyBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZWZsL2V3a19iYWNrX2ZvcndhcmRf
bGlzdF9pdGVtX3ByaXZhdGUuaApAQCAtMCwwICsxLDM1IEBACisvKgorICogQ29weXJpZ2h0IChD
KSAyMDEyIEludGVsIENvcnBvcmF0aW9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJl
ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig
d2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl
IGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25z
IG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5v
dGljZSwgdGhpcyBpdGVtIG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0
aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgaXRlbSBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9u
IGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgor
ICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENP
TlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJB
TlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FS
UkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgor
ICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBP
UiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNU
LCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERB
TUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICog
U1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJ
VFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBB
TlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBM
SUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAq
IEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVO
IElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLwor
CisjaWZuZGVmIGV3a19iYWNrX2ZvcndhcmRfbGlzdF9pdGVtX3ByaXZhdGVfaAorI2RlZmluZSBl
d2tfYmFja19mb3J3YXJkX2xpc3RfaXRlbV9wcml2YXRlX2gKKworI2luY2x1ZGUgPFdlYktpdDIv
V0tCYXNlLmg+CisKK3R5cGVkZWYgc3RydWN0IF9Fd2tfQmFja19Gb3J3YXJkX0xpc3RfSXRlbSBF
d2tfQmFja19Gb3J3YXJkX0xpc3RfSXRlbTsKKworRXdrX0JhY2tfRm9yd2FyZF9MaXN0X0l0ZW0q
IGV3a19iYWNrX2ZvcndhcmRfbGlzdF9pdGVtX25ldyhXS0JhY2tGb3J3YXJkTGlzdEl0ZW1SZWYg
d2tCYWNrRm9yd2FyZExpc3RJdGVtUmVmKTsKKworI2VuZGlmIC8vIGV3a19iYWNrX2ZvcndhcmRf
bGlzdF9wcml2YXRlX2gKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkv
ZWZsL2V3a19iYWNrX2ZvcndhcmRfbGlzdF9wcml2YXRlLmggYi9Tb3VyY2UvV2ViS2l0Mi9VSVBy
b2Nlc3MvQVBJL2VmbC9ld2tfYmFja19mb3J3YXJkX2xpc3RfcHJpdmF0ZS5oCm5ldyBmaWxlIG1v
ZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjU5MmE0ZjQKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3Vy
Y2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2VmbC9ld2tfYmFja19mb3J3YXJkX2xpc3RfcHJpdmF0
ZS5oCkBAIC0wLDAgKzEsMzcgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTIgSW50ZWwgQ29y
cG9yYXRpb24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5k
IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2Rp
ZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRp
dGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUg
bXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0
cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1h
dGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZU
V0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMg
SVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNI
QU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBE
SVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRP
UlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQ
RUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RT
IE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MK
KyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElB
QklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9S
VCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkg
V0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgor
ICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpZm5kZWYgZXdrX2Jh
Y2tfZm9yd2FyZF9saXN0X3ByaXZhdGVfaAorI2RlZmluZSBld2tfYmFja19mb3J3YXJkX2xpc3Rf
cHJpdmF0ZV9oCisKKyNpbmNsdWRlIDxXZWJLaXQyL1dLQmFzZS5oPgorCit0eXBlZGVmIHN0cnVj
dCBfRXdrX0JhY2tfRm9yd2FyZF9MaXN0IEV3a19CYWNrX0ZvcndhcmRfTGlzdDsKKwordm9pZCBl
d2tfYmFja19mb3J3YXJkX2xpc3RfY2hhbmdlZChFd2tfQmFja19Gb3J3YXJkX0xpc3QqLCBXS0Jh
Y2tGb3J3YXJkTGlzdEl0ZW1SZWYgd2tBZGRlZEl0ZW0sIFdLQXJyYXlSZWYgd2tSZW1vdmVkSXRl
bXMpOworRXdrX0JhY2tfRm9yd2FyZF9MaXN0KiBld2tfYmFja19mb3J3YXJkX2xpc3RfbmV3KFdL
QmFja0ZvcndhcmRMaXN0UmVmIHdrQmFja0ZvcndhcmRMaXN0UmVmKTsKK3ZvaWQgZXdrX2JhY2tf
Zm9yd2FyZF9saXN0X2ZyZWUoRXdrX0JhY2tfRm9yd2FyZF9MaXN0KiBsaXN0KTsKKworI2VuZGlm
IC8vIGV3a19iYWNrX2ZvcndhcmRfbGlzdF9wcml2YXRlX2gKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZWZsL2V3a192aWV3LmNwcCBiL1NvdXJjZS9XZWJLaXQyL1VJ
UHJvY2Vzcy9BUEkvZWZsL2V3a192aWV3LmNwcAppbmRleCA1NGRkNjVhLi4xOWE3MjU5IDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2VmbC9ld2tfdmlldy5jcHAKKysr
IGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9lZmwvZXdrX3ZpZXcuY3BwCkBAIC0zMCw2
ICszMCw3IEBACiAjaW5jbHVkZSAiV0tSZXRhaW5QdHIuaCIKICNpbmNsdWRlICJXS1N0cmluZy5o
IgogI2luY2x1ZGUgIldLVVJMLmgiCisjaW5jbHVkZSAiZXdrX2JhY2tfZm9yd2FyZF9saXN0X3By
aXZhdGUuaCIKICNpbmNsdWRlICJld2tfY29udGV4dC5oIgogI2luY2x1ZGUgImV3a19jb250ZXh0
X3ByaXZhdGUuaCIKICNpbmNsdWRlICJld2tfaW50ZW50X3ByaXZhdGUuaCIKQEAgLTcxLDYgKzcy
LDcgQEAgc3RydWN0IF9Fd2tfVmlld19Qcml2YXRlX0RhdGEgewogICAgIGNvbnN0IGNoYXIqIGN1
cnNvckdyb3VwOwogICAgIEV2YXNfT2JqZWN0KiBjdXJzb3JPYmplY3Q7CiAgICAgTG9hZGluZ1Jl
c291cmNlc01hcCBsb2FkaW5nUmVzb3VyY2VzTWFwOworICAgIEV3a19CYWNrX0ZvcndhcmRfTGlz
dCogYmFja0ZvcndhcmRMaXN0OwogCiAjaWZkZWYgSEFWRV9FQ09SRV9YCiAgICAgYm9vbCBpc1Vz
aW5nRWNvcmVYOwpAQCAtODksNiArOTEsNyBAQCBzdHJ1Y3QgX0V3a19WaWV3X1ByaXZhdGVfRGF0
YSB7CiAgICAgICAgICwgY3VzdG9tRW5jb2RpbmcoMCkKICAgICAgICAgLCBjdXJzb3JHcm91cCgw
KQogICAgICAgICAsIGN1cnNvck9iamVjdCgwKQorICAgICAgICAsIGJhY2tGb3J3YXJkTGlzdCgw
KQogI2lmZGVmIEhBVkVfRUNPUkVfWAogICAgICAgICAsIGlzVXNpbmdFY29yZVgoZmFsc2UpCiAj
ZW5kaWYKQEAgLTEwOSw2ICsxMTIsOCBAQCBzdHJ1Y3QgX0V3a19WaWV3X1ByaXZhdGVfRGF0YSB7
CiAKICAgICAgICAgaWYgKGN1cnNvck9iamVjdCkKICAgICAgICAgICAgIGV2YXNfb2JqZWN0X2Rl
bChjdXJzb3JPYmplY3QpOworCisgICAgICAgIGV3a19iYWNrX2ZvcndhcmRfbGlzdF9mcmVlKGJh
Y2tGb3J3YXJkTGlzdCk7CiAgICAgfQogfTsKIApAQCAtNjY1LDYgKzY3MCw3IEBAIEV2YXNfT2Jq
ZWN0KiBld2tfdmlld19iYXNlX2FkZChFdmFzKiBjYW52YXMsIFdLQ29udGV4dFJlZiBjb250ZXh0
UmVmLCBXS1BhZ2VHcm91CiAgICAgfQogCiAgICAgcHJpdi0+cGFnZUNsaWVudCA9IFBhZ2VDbGll
bnRJbXBsOjpjcmVhdGUodG9JbXBsKGNvbnRleHRSZWYpLCB0b0ltcGwocGFnZUdyb3VwUmVmKSwg
ZXdrVmlldyk7CisgICAgcHJpdi0+YmFja0ZvcndhcmRMaXN0ID0gZXdrX2JhY2tfZm9yd2FyZF9s
aXN0X25ldyh0b0FQSShwcml2LT5wYWdlQ2xpZW50LT5wYWdlKCktPmJhY2tGb3J3YXJkTGlzdCgp
KSk7CiAKICAgICBXS1BhZ2VSZWYgd2tQYWdlID0gdG9BUEkocHJpdi0+cGFnZUNsaWVudC0+cGFn
ZSgpKTsKICAgICBld2tfdmlld19maW5kX2NsaWVudF9hdHRhY2god2tQYWdlLCBld2tWaWV3KTsK
QEAgLTExNDUsNiArMTE1MSwxNCBAQCBFaW5hX0Jvb2wgZXdrX3ZpZXdfZm9yd2FyZF9wb3NzaWJs
ZShFdmFzX09iamVjdCogZXdrVmlldykKICAgICByZXR1cm4gcHJpdi0+cGFnZUNsaWVudC0+cGFn
ZSgpLT5jYW5Hb0ZvcndhcmQoKTsKIH0KIAorRXdrX0JhY2tfRm9yd2FyZF9MaXN0KiBld2tfdmll
d19iYWNrX2ZvcndhcmRfbGlzdF9nZXQoY29uc3QgRXZhc19PYmplY3QqIGV3a1ZpZXcpCit7Cisg
ICAgRVdLX1ZJRVdfU0RfR0VUX09SX1JFVFVSTihld2tWaWV3LCBzbWFydERhdGEsIDApOworICAg
IEVXS19WSUVXX1BSSVZfR0VUX09SX1JFVFVSTihzbWFydERhdGEsIHByaXYsIDApOworCisgICAg
cmV0dXJuIHByaXYtPmJhY2tGb3J3YXJkTGlzdDsKK30KKwogdm9pZCBld2tfdmlld19pbWFnZV9k
YXRhX3NldChFdmFzX09iamVjdCogZXdrVmlldywgdm9pZCogaW1hZ2VEYXRhLCBjb25zdCBJbnRT
aXplJiBzaXplKQogewogICAgIEVXS19WSUVXX1NEX0dFVF9PUl9SRVRVUk4oZXdrVmlldywgc21h
cnREYXRhKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZWZsL2V3
a192aWV3LmggYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2VmbC9ld2tfdmlldy5oCmlu
ZGV4IDQ3MDYyZWMuLjVkZmIwZjQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vz
cy9BUEkvZWZsL2V3a192aWV3LmgKKysrIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9l
ZmwvZXdrX3ZpZXcuaApAQCAtNjksNiArNjksNyBAQAogI2lmbmRlZiBld2tfdmlld19oCiAjZGVm
aW5lIGV3a192aWV3X2gKIAorI2luY2x1ZGUgImV3a19iYWNrX2ZvcndhcmRfbGlzdC5oIgogI2lu
Y2x1ZGUgImV3a19jb250ZXh0LmgiCiAjaW5jbHVkZSAiZXdrX2Rvd25sb2FkX2pvYi5oIgogI2lu
Y2x1ZGUgImV3a19pbnRlbnQuaCIKQEAgLTM1Nyw2ICszNTgsMjEgQEAgRUFQSSBFaW5hX0Jvb2wg
ICAgZXdrX3ZpZXdfYmFja19wb3NzaWJsZShFdmFzX09iamVjdCAqbyk7CiBFQVBJIEVpbmFfQm9v
bCAgICBld2tfdmlld19mb3J3YXJkX3Bvc3NpYmxlKEV2YXNfT2JqZWN0ICpvKTsKIAogLyoqCisg
KiBHZXRzIHRoZSBiYWNrLWZvcndhcmQgbGlzdCBhc3NvY2lhdGVkIHdpdGggdGhpcyB2aWV3Lgor
ICoKKyAqIFRoZSByZXR1cm5lZCBpbnN0YW5jZSBpcyB1bmlxdWUgZm9yIHRoaXMgdmlldyBhbmQg
dGh1cyBtdWx0aXBsZSBjYWxscworICogdG8gdGhpcyBmdW5jdGlvbiB3aXRoIHRoZSBzYW1lIHZp
ZXcgYXMgcGFyYW1ldGVyIHJldHVybnMgdGhlIHNhbWUKKyAqIGhhbmRsZS4gVGhpcyBoYW5kbGUg
aXMgYWxpdmUgd2hpbGUgdmlldyBpcyBhbGl2ZSwgdGh1cyBvbmUKKyAqIG1pZ2h0IHdhbnQgdG8g
bGlzdGVuIGZvciBFVkFTX0NBTExCQUNLX0RFTCBvbiBnaXZlbiB2aWV3CisgKiAoQGEgbykgdG8g
a25vdyB3aGVuIHRvIHN0b3AgdXNpbmcgcmV0dXJuZWQgaGFuZGxlLgorICoKKyAqIEBwYXJhbSBv
IHZpZXcgb2JqZWN0IHRvIGdldCBuYXZpZ2F0aW9uIGJhY2stZm9yd2FyZCBsaXN0CisgKgorICog
QHJldHVybiB0aGUgYmFjay1mb3J3YXJkIGxpc3QgaW5zdGFuY2UgaGFuZGxlIGFzc29jaWF0ZWQg
d2l0aCB0aGlzIHZpZXcKKyAqLworRUFQSSBFd2tfQmFja19Gb3J3YXJkX0xpc3QgKmV3a192aWV3
X2JhY2tfZm9yd2FyZF9saXN0X2dldChjb25zdCBFdmFzX09iamVjdCAqbyk7CisKKy8qKgogICog
R2V0cyB0aGUgY3VycmVudCB0aXRsZSBvZiB0aGUgbWFpbiBmcmFtZS4KICAqCiAgKiBJdCByZXR1
cm5zIGFuIGludGVybmFsIHN0cmluZyBhbmQgc2hvdWxkIG5vdApkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYktpdDIvVUlQcm9jZXNzL0FQSS9lZmwvZXdrX3ZpZXdfbG9hZGVyX2NsaWVudC5jcHAgYi9T
b3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2VmbC9ld2tfdmlld19sb2FkZXJfY2xpZW50LmNw
cAppbmRleCBjYzhiMTIwLi4yZGViMzhlIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9VSVBy
b2Nlc3MvQVBJL2VmbC9ld2tfdmlld19sb2FkZXJfY2xpZW50LmNwcAorKysgYi9Tb3VyY2UvV2Vi
S2l0Mi9VSVByb2Nlc3MvQVBJL2VmbC9ld2tfdmlld19sb2FkZXJfY2xpZW50LmNwcApAQCAtMjQs
OCArMjQsMTAgQEAKICAqLwogCiAjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiZXdrX3Zp
ZXcuaCIKIAogI2luY2x1ZGUgIldLRnJhbWUuaCIKKyNpbmNsdWRlICJld2tfYmFja19mb3J3YXJk
X2xpc3RfcHJpdmF0ZS5oIgogI2luY2x1ZGUgImV3a19pbnRlbnQuaCIKICNpbmNsdWRlICJld2tf
aW50ZW50X3ByaXZhdGUuaCIKICNpbmNsdWRlICJld2tfaW50ZW50X3NlcnZpY2UuaCIKQEAgLTEy
Myw2ICsxMjUsMTQgQEAgc3RhdGljIHZvaWQgZGlkRmFpbFByb3Zpc2lvbmFsTG9hZFdpdGhFcnJv
ckZvckZyYW1lKFdLUGFnZVJlZiBwYWdlLCBXS0ZyYW1lUmVmIGYKICAgICBld2tfd2ViX2Vycm9y
X2ZyZWUoZXdrRXJyb3IpOwogfQogCitzdGF0aWMgdm9pZCBkaWRDaGFuZ2VCYWNrRm9yd2FyZExp
c3QoV0tQYWdlUmVmIHBhZ2UsIFdLQmFja0ZvcndhcmRMaXN0SXRlbVJlZiBhZGRlZEl0ZW0sIFdL
QXJyYXlSZWYgcmVtb3ZlZEl0ZW1zLCBjb25zdCB2b2lkKiBjbGllbnRJbmZvKQoreworICAgIEV2
YXNfT2JqZWN0KiBld2tWaWV3ID0gc3RhdGljX2Nhc3Q8RXZhc19PYmplY3QqPihjb25zdF9jYXN0
PHZvaWQqPihjbGllbnRJbmZvKSk7CisgICAgQVNTRVJUKGV3a1ZpZXcpOworCisgICAgZXdrX2Jh
Y2tfZm9yd2FyZF9saXN0X2NoYW5nZWQoZXdrX3ZpZXdfYmFja19mb3J3YXJkX2xpc3RfZ2V0KGV3
a1ZpZXcpLCBhZGRlZEl0ZW0sIHJlbW92ZWRJdGVtcyk7Cit9CisKIHZvaWQgZXdrX3ZpZXdfbG9h
ZGVyX2NsaWVudF9hdHRhY2goV0tQYWdlUmVmIHBhZ2VSZWYsIEV2YXNfT2JqZWN0KiBld2tWaWV3
KQogewogICAgIFdLUGFnZUxvYWRlckNsaWVudCBsb2FkQ2xpZW50OwpAQCAtMTQ0LDUgKzE1NCw2
IEBAIHZvaWQgZXdrX3ZpZXdfbG9hZGVyX2NsaWVudF9hdHRhY2goV0tQYWdlUmVmIHBhZ2VSZWYs
IEV2YXNfT2JqZWN0KiBld2tWaWV3KQogICAgIGxvYWRDbGllbnQuZGlkU3RhcnRQcm92aXNpb25h
bExvYWRGb3JGcmFtZSA9IGRpZFN0YXJ0UHJvdmlzaW9uYWxMb2FkRm9yRnJhbWU7CiAgICAgbG9h
ZENsaWVudC5kaWRSZWNlaXZlU2VydmVyUmVkaXJlY3RGb3JQcm92aXNpb25hbExvYWRGb3JGcmFt
ZSA9IGRpZFJlY2VpdmVTZXJ2ZXJSZWRpcmVjdEZvclByb3Zpc2lvbmFsTG9hZEZvckZyYW1lOwog
ICAgIGxvYWRDbGllbnQuZGlkRmFpbFByb3Zpc2lvbmFsTG9hZFdpdGhFcnJvckZvckZyYW1lID0g
ZGlkRmFpbFByb3Zpc2lvbmFsTG9hZFdpdGhFcnJvckZvckZyYW1lOworICAgIGxvYWRDbGllbnQu
ZGlkQ2hhbmdlQmFja0ZvcndhcmRMaXN0ID0gZGlkQ2hhbmdlQmFja0ZvcndhcmRMaXN0OwogICAg
IFdLUGFnZVNldFBhZ2VMb2FkZXJDbGllbnQocGFnZVJlZiwgJmxvYWRDbGllbnQpOwogfQo=
</data>

          </attachment>
      

    </bug>

</bugzilla>