<?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>172905</bug_id>
          
          <creation_ts>2017-06-04 08:01:03 -0700</creation_ts>
          <short_desc>[GTK] Add API to allow overriding popup menus</short_desc>
          <delta_ts>2017-06-15 11:47:23 -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>WebKitGTK</component>
          <version>WebKit 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>Gtk</keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Carlos Garcia Campos">cgarcia</reporter>
          <assigned_to name="Nobody">webkit-unassigned</assigned_to>
          <cc>bugs-noreply</cc>
    
    <cc>buildbot</cc>
    
    <cc>mcatanzaro</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1315533</commentid>
    <comment_count>0</comment_count>
    <who name="Carlos Garcia Campos">cgarcia</who>
    <bug_when>2017-06-04 08:01:03 -0700</bug_when>
    <thetext>Our API uses GTK+ as the default implementation of several UI elements like the file chooser, print dialog, color picker, context menu, etc. but in all those cases it allows to override the default implementation. It&apos;s not possible to override the popup menu used for select elements.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1315538</commentid>
    <comment_count>1</comment_count>
      <attachid>311960</attachid>
    <who name="Carlos Garcia Campos">cgarcia</who>
    <bug_when>2017-06-04 08:11:08 -0700</bug_when>
    <thetext>Created attachment 311960
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1315539</commentid>
    <comment_count>2</comment_count>
    <who name="Build Bot">buildbot</who>
    <bug_when>2017-06-04 08:13:12 -0700</bug_when>
    <thetext>Attachment 311960 did not pass style-queue:


WARNING: File exempt from style guide. Skipping: &quot;Source/WebKit2/UIProcess/API/gtk/WebKitWebView.h&quot;
WARNING: File exempt from style guide. Skipping: &quot;Source/WebKit2/UIProcess/API/gtk/WebKitOptionMenu.h&quot;
ERROR: Source/WebKit2/PlatformGTK.cmake:222:  Alphabetical sorting problem. &quot;UIProcess/API/gtk/WebKitOptionMenuItem.cpp&quot; should be before &quot;UIProcess/API/gtk/WebKitOptionMenuPrivate.h&quot;.  [list/order] [5]
WARNING: File exempt from style guide. Skipping: &quot;Source/WebKit2/UIProcess/API/gtk/WebKitOptionMenuItem.h&quot;
WARNING: File exempt from style guide. Skipping: &quot;Source/WebKit2/UIProcess/API/gtk/WebKitPopupMenu.h&quot;
WARNING: File exempt from style guide. Skipping: &quot;Source/WebKit2/UIProcess/API/gtk/webkit2.h&quot;
Total errors found: 1 in 23 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>1317962</commentid>
    <comment_count>3</comment_count>
    <who name="Carlos Garcia Campos">cgarcia</who>
    <bug_when>2017-06-10 23:28:12 -0700</bug_when>
    <thetext>Michael?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1317993</commentid>
    <comment_count>4</comment_count>
    <who name="Michael Catanzaro">mcatanzaro</who>
    <bug_when>2017-06-11 08:08:00 -0700</bug_when>
    <thetext>I&apos;ve been meaning to review your combo box patch for a while but haven&apos;t gotten to it yet... can you briefly describe the advantages to using your custom treeview implementation over what we have now? They look similar to me.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1318115</commentid>
    <comment_count>5</comment_count>
    <who name="Carlos Garcia Campos">cgarcia</who>
    <bug_when>2017-06-11 22:38:24 -0700</bug_when>
    <thetext>(In reply to Michael Catanzaro from comment #4)
&gt; I&apos;ve been meaning to review your combo box patch for a while but haven&apos;t
&gt; gotten to it yet... can you briefly describe the advantages to using your
&gt; custom treeview implementation over what we have now? They look similar to
&gt; me.

You are mixing bugs here. This is the WebKit bug to provide API to override popup menus. We needs this to allow users to override the default GTK+ menu, but not because our current implementation is not good enough. Popup menus is the only thing where we expose GTK+ unconditionally, so it has always been in my TODO, to provide API to be able to override it.

To make sure the API is good to implement your own menu, I implemented a new custom menu in epiphany using the new API, not because it has any advantages, but just to try the API. However, it indeed has advantages:

 - It scales much better, because it has a maximum size and context are scrollable, instead of the current menu that takes the whole work area and has scroll button on top/bottom.

 - It uses a tree view which allows us to better format group labels, making them bold instead of current menu that just makes them insensitive, like any other disabled item.

 - It behaves like other browsers (chromium/firefox). When you hover the items, they are selected in the tree view, but the combo text doesn&apos;t change. In case of typeahead find, the matched element is selected in the tree view and the combo box text is also updated.

All this is specially noticeable with long menus, that&apos;s why I included a screenshot of the redhat bugzilla products menu, just open that menu in you current ephy to see the differences.

As I said in ephy bug, there&apos;s actually no reason why that implementation couldn&apos;t be the default, but I think we can test it for a while this cycle in ephy, and move it to WebKit during the next cycle if we all are happy with it.

I&apos;m sorry this was not briefly in the end.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1319158</commentid>
    <comment_count>6</comment_count>
      <attachid>311960</attachid>
    <who name="Michael Catanzaro">mcatanzaro</who>
    <bug_when>2017-06-14 09:35:58 -0700</bug_when>
    <thetext>Comment on attachment 311960
Patch

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

Nice patch! Here is the first half of your review. I still need to review the second half of the patch.

I don&apos;t think I like the names you chose here. The terminology used in GTK+ is combo box. The terminology used in HTML is select element, though I suppose that refers to the entire element and not just the menu. You could have named it, for example, WebKitSelectMenu with WebKitWebView::show-select-menu, but you&apos;ve chosen WebKitOptionMenu, which matches neither GTK+ nor HTML. What are your thoughts on this? Perhaps it needs to be discussed on the mailing list.

&gt; Source/WebKit2/ChangeLog:12
&gt; +        contains WebKitOptionMenuItem elements representng the items to be displayed.

representing

&gt; Source/WebKit2/UIProcess/API/gtk/WebKitOptionMenu.h:29
&gt; +#include &lt;webkit2/WebKitOptionMenuItem.h&gt;
&gt; +#include &lt;webkit2/WebKitDefines.h&gt;

Alphabetize

&gt; Source/WebKit2/UIProcess/API/gtk/WebKitOptionMenuItem.cpp:27
&gt; +G_DEFINE_BOXED_TYPE(WebKitOptionMenuItem, webkit_option_menu_item, webkit_option_menu_item_copy, webkit_option_menu_item_free)

You&apos;re missing all the class documentation for WebKitOptionMenuItem. I think that&apos;s important, even if it doesn&apos;t need to be a lot for such a simple class.

&gt; Source/WebKit2/UIProcess/API/gtk/WebKitOptionMenuItem.cpp:102
&gt; + * Whether a#WebKitOptionMenuItem is a group label.

Missing space

&gt; Source/WebKit2/UIProcess/API/gtk/WebKitOptionMenuItem.cpp:119
&gt; + * Whether a#WebKitOptionMenuItem is a group child.

Missing space

&gt; Source/WebKit2/UIProcess/API/gtk/WebKitOptionMenuItem.cpp:136
&gt; + * Whether a#WebKitOptionMenuItem is enabled.

Missing space

&gt; Source/WebKit2/UIProcess/API/gtk/WebKitOptionMenuItem.cpp:153
&gt; + * Whether a#WebKitOptionMenuItem is the currently selected one.

Missing space

&gt; Source/WebKit2/UIProcess/API/gtk/WebKitOptionMenuItemPrivate.h:32
&gt; +        , isGroupChild(item.m_text.startsWith(&quot;    &quot;))

This seems really fragile. I know this is probably hard, but please find a way to determine if it&apos;s a group child that doesn&apos;t depend on the amount of whitespace in a user-visible string.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1319164</commentid>
    <comment_count>7</comment_count>
    <who name="Carlos Garcia Campos">cgarcia</who>
    <bug_when>2017-06-14 09:42:12 -0700</bug_when>
    <thetext>(In reply to Michael Catanzaro from comment #6)
&gt; Comment on attachment 311960 [details]
&gt; Patch
&gt; 
&gt; View in context:
&gt; https://bugs.webkit.org/attachment.cgi?id=311960&amp;action=review
&gt; 
&gt; Nice patch! Here is the first half of your review. I still need to review
&gt; the second half of the patch.
&gt; 
&gt; I don&apos;t think I like the names you chose here. The terminology used in GTK+
&gt; is combo box. The terminology used in HTML is select element, though I
&gt; suppose that refers to the entire element and not just the menu. You could
&gt; have named it, for example, WebKitSelectMenu with
&gt; WebKitWebView::show-select-menu, but you&apos;ve chosen WebKitOptionMenu, which
&gt; matches neither GTK+ nor HTML. What are your thoughts on this? Perhaps it
&gt; needs to be discussed on the mailing list.

Yes, this is the dropdown menu part of the combobox. I used option menu on purpose, as a more generic name, just in case we ever implement datalist and maybe we could reuse this same class. But I&apos;m open to any change in the names in any case.

&gt; &gt; Source/WebKit2/ChangeLog:12
&gt; &gt; +        contains WebKitOptionMenuItem elements representng the items to be displayed.
&gt; 
&gt; representing
&gt; 
&gt; &gt; Source/WebKit2/UIProcess/API/gtk/WebKitOptionMenu.h:29
&gt; &gt; +#include &lt;webkit2/WebKitOptionMenuItem.h&gt;
&gt; &gt; +#include &lt;webkit2/WebKitDefines.h&gt;
&gt; 
&gt; Alphabetize
&gt; 
&gt; &gt; Source/WebKit2/UIProcess/API/gtk/WebKitOptionMenuItem.cpp:27
&gt; &gt; +G_DEFINE_BOXED_TYPE(WebKitOptionMenuItem, webkit_option_menu_item, webkit_option_menu_item_copy, webkit_option_menu_item_free)
&gt; 
&gt; You&apos;re missing all the class documentation for WebKitOptionMenuItem. I think
&gt; that&apos;s important, even if it doesn&apos;t need to be a lot for such a simple
&gt; class.
&gt; 
&gt; &gt; Source/WebKit2/UIProcess/API/gtk/WebKitOptionMenuItem.cpp:102
&gt; &gt; + * Whether a#WebKitOptionMenuItem is a group label.
&gt; 
&gt; Missing space
&gt; 
&gt; &gt; Source/WebKit2/UIProcess/API/gtk/WebKitOptionMenuItem.cpp:119
&gt; &gt; + * Whether a#WebKitOptionMenuItem is a group child.
&gt; 
&gt; Missing space
&gt; 
&gt; &gt; Source/WebKit2/UIProcess/API/gtk/WebKitOptionMenuItem.cpp:136
&gt; &gt; + * Whether a#WebKitOptionMenuItem is enabled.
&gt; 
&gt; Missing space
&gt; 
&gt; &gt; Source/WebKit2/UIProcess/API/gtk/WebKitOptionMenuItem.cpp:153
&gt; &gt; + * Whether a#WebKitOptionMenuItem is the currently selected one.
&gt; 
&gt; Missing space
&gt; 
&gt; &gt; Source/WebKit2/UIProcess/API/gtk/WebKitOptionMenuItemPrivate.h:32
&gt; &gt; +        , isGroupChild(item.m_text.startsWith(&quot;    &quot;))
&gt; 
&gt; This seems really fragile. I know this is probably hard, but please find a
&gt; way to determine if it&apos;s a group child that doesn&apos;t depend on the amount of
&gt; whitespace in a user-visible string.

I don&apos;t know a batter way. We have unit tests checking this, anyway, so a change in this would be caught by the tests.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1319447</commentid>
    <comment_count>8</comment_count>
      <attachid>311960</attachid>
    <who name="Michael Catanzaro">mcatanzaro</who>
    <bug_when>2017-06-14 21:15:18 -0700</bug_when>
    <thetext>Comment on attachment 311960
Patch

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

Nice work, as usual.

&gt; Source/WebKit2/UIProcess/API/gtk/WebKitPopupMenu.h:29
&gt; +class WebKitPopupMenu final : public WebPopupMenuProxyGtk {

I&apos;m confused by your decision to make a subclass of WebPopupMenuProxyGtk, and especially by your decision to not include &quot;Proxy&quot; in the name of the class. It&apos;s quite unclear that this object is a UI proxy for a web process object. Can you elaborate on why you chose this design?

Would it be better for WebKitPopupMenu to contain a WebPopupMenuProxyGtk member variable rather than to inherit from it, as I suspect, or would this require too much extra code and indirection?

&gt; Source/WebKit2/UIProcess/API/gtk/WebKitWebView.h:-256
&gt; -    void (*_webkit_reserved3) (void);

Running out of space for more virtual signals... I think we&apos;ll be hitting our limit within the next couple of years. Oh well.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1319515</commentid>
    <comment_count>9</comment_count>
    <who name="Carlos Garcia Campos">cgarcia</who>
    <bug_when>2017-06-15 02:22:59 -0700</bug_when>
    <thetext>(In reply to Michael Catanzaro from comment #8)
&gt; Comment on attachment 311960 [details]
&gt; Patch
&gt; 
&gt; View in context:
&gt; https://bugs.webkit.org/attachment.cgi?id=311960&amp;action=review
&gt; 
&gt; Nice work, as usual.

Thanks.

&gt; &gt; Source/WebKit2/UIProcess/API/gtk/WebKitPopupMenu.h:29
&gt; &gt; +class WebKitPopupMenu final : public WebPopupMenuProxyGtk {
&gt; 
&gt; I&apos;m confused by your decision to make a subclass of WebPopupMenuProxyGtk,
&gt; and especially by your decision to not include &quot;Proxy&quot; in the name of the
&gt; class. It&apos;s quite unclear that this object is a UI proxy for a web process
&gt; object. Can you elaborate on why you chose this design?

I just followed what we already do for the context menu, I don&apos;t remember why i did it that way for the context menu, though.

&gt; Would it be better for WebKitPopupMenu to contain a WebPopupMenuProxyGtk
&gt; member variable rather than to inherit from it, as I suspect, or would this
&gt; require too much extra code and indirection?

I don&apos;t see why it would be better, but worse neither.

&gt; &gt; Source/WebKit2/UIProcess/API/gtk/WebKitWebView.h:-256
&gt; &gt; -    void (*_webkit_reserved3) (void);
&gt; 
&gt; Running out of space for more virtual signals... I think we&apos;ll be hitting
&gt; our limit within the next couple of years. Oh well.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1319519</commentid>
    <comment_count>10</comment_count>
    <who name="Carlos Garcia Campos">cgarcia</who>
    <bug_when>2017-06-15 02:41:41 -0700</bug_when>
    <thetext>Committed r218325: &lt;http://trac.webkit.org/changeset/218325&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1319638</commentid>
    <comment_count>11</comment_count>
    <who name="Michael Catanzaro">mcatanzaro</who>
    <bug_when>2017-06-15 11:47:23 -0700</bug_when>
    <thetext>(In reply to Carlos Garcia Campos from comment #9) 
&gt; I don&apos;t see why it would be better, but worse neither.

It would make the inheritance less confusing.

Of course, matching the context menu is valuable, but perhaps that should be changed too.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>311960</attachid>
            <date>2017-06-04 08:11:08 -0700</date>
            <delta_ts>2017-06-14 21:15:18 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>wk2-option-menu-api.diff</filename>
            <type>text/plain</type>
            <size>59021</size>
            <attacher name="Carlos Garcia Campos">cgarcia</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJLaXQyL0No
YW5nZUxvZwppbmRleCA4YzI3ZTU5ZjdkMi4uNDM2YzU1YmE3NTUgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJLaXQyL0NoYW5nZUxvZworKysgYi9Tb3VyY2UvV2ViS2l0Mi9DaGFuZ2VMb2cKQEAgLTEs
MyArMSw2NSBAQAorMjAxNy0wNi0wNCAgQ2FybG9zIEdhcmNpYSBDYW1wb3MgIDxjZ2FyY2lhQGln
YWxpYS5jb20+CisKKyAgICAgICAgW0dUS10gQWRkIEFQSSB0byBhbGxvdyBvdmVycmlkaW5nIHBv
cHVwIG1lbnVzCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9p
ZD0xNzI5MDUKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAg
ICBUaGUgR1RLKyBBUEkgdXNlcyBHVEsrIGZvciB0aGUgZGVmYXVsdCBpbXBsZW1lbnRhdGlvbiBv
ZiBzZXZlcmFsIFVJIGVsZW1lbnRzIGxpa2UgdGhlIGZpbGUgY2hvb3NlciwgcHJpbnQgZGlhbG9n
LAorICAgICAgICBjb2xvciBwaWNrZXIsIGNvbnRleHQgbWVudSwgZXRjLiBidXQgaW4gYWxsIHRo
b3NlIGNhc2VzIGl0IGFsbG93cyB0byBvdmVycmlkZSB0aGUgZGVmYXVsdCBpbXBsZW1lbnRhdGlv
bi4gSXQncworICAgICAgICBub3QgcG9zc2libGUgdG8gb3ZlcnJpZGUgdGhlIHBvcHVwIG1lbnUg
dXNlZCBmb3Igc2VsZWN0IGVsZW1lbnRzLiBUaGlzIHBhdGNoIGFkZHMgV2ViS2l0T3B0aW9uTWVu
dSB0byByZXByZXNlbnQKKyAgICAgICAgYSBzZWxlY3QgZHJvcGRvd24gbWVudS4gSXQncyBwYXNz
ZWQgYXMgYW4gYXJndW1lbnQgb2YgdGhlIG5ldyBzaWduYWwgV2ViS2l0V2ViVmlldzo6c2hvdy1v
cHRpb24tbWVudSwgYW5kCisgICAgICAgIGNvbnRhaW5zIFdlYktpdE9wdGlvbk1lbnVJdGVtIGVs
ZW1lbnRzIHJlcHJlc2VudG5nIHRoZSBpdGVtcyB0byBiZSBkaXNwbGF5ZWQuCisKKyAgICAgICAg
KiBQbGF0Zm9ybUdUSy5jbWFrZToKKyAgICAgICAgKiBVSVByb2Nlc3MvQVBJL2d0ay9QYWdlQ2xp
ZW50SW1wbC5jcHA6CisgICAgICAgIChXZWJLaXQ6OlBhZ2VDbGllbnRJbXBsOjpjcmVhdGVQb3B1
cE1lbnVQcm94eSk6IENyZWF0ZSBhIFdlYktpdFBvcHVwTWVudS4KKyAgICAgICAgKiBVSVByb2Nl
c3MvQVBJL2d0ay9XZWJLaXRPcHRpb25NZW51LmNwcDogQWRkZWQuCisgICAgICAgICh3ZWJraXRP
cHRpb25NZW51Q3JlYXRlKToKKyAgICAgICAgKHdlYmtpdF9vcHRpb25fbWVudV9nZXRfbl9pdGVt
cyk6CisgICAgICAgICh3ZWJraXRfb3B0aW9uX21lbnVfZ2V0X2l0ZW0pOgorICAgICAgICAod2Vi
a2l0X29wdGlvbl9tZW51X3NlbGVjdF9pdGVtKToKKyAgICAgICAgKHdlYmtpdF9vcHRpb25fbWVu
dV9hY3RpdmF0ZV9pdGVtKToKKyAgICAgICAgKHdlYmtpdF9vcHRpb25fbWVudV9jbG9zZSk6Cisg
ICAgICAgICogVUlQcm9jZXNzL0FQSS9ndGsvV2ViS2l0T3B0aW9uTWVudS5oOiBBZGRlZC4KKyAg
ICAgICAgKiBVSVByb2Nlc3MvQVBJL2d0ay9XZWJLaXRPcHRpb25NZW51SXRlbS5jcHA6IEFkZGVk
LgorICAgICAgICAod2Via2l0X29wdGlvbl9tZW51X2l0ZW1fY29weSk6CisgICAgICAgICh3ZWJr
aXRfb3B0aW9uX21lbnVfaXRlbV9mcmVlKToKKyAgICAgICAgKHdlYmtpdF9vcHRpb25fbWVudV9p
dGVtX2dldF9sYWJlbCk6CisgICAgICAgICh3ZWJraXRfb3B0aW9uX21lbnVfaXRlbV9nZXRfdG9v
bHRpcCk6CisgICAgICAgICh3ZWJraXRfb3B0aW9uX21lbnVfaXRlbV9pc19ncm91cF9sYWJlbCk6
CisgICAgICAgICh3ZWJraXRfb3B0aW9uX21lbnVfaXRlbV9pc19ncm91cF9jaGlsZCk6CisgICAg
ICAgICh3ZWJraXRfb3B0aW9uX21lbnVfaXRlbV9pc19lbmFibGVkKToKKyAgICAgICAgKHdlYmtp
dF9vcHRpb25fbWVudV9pdGVtX2lzX3NlbGVjdGVkKToKKyAgICAgICAgKiBVSVByb2Nlc3MvQVBJ
L2d0ay9XZWJLaXRPcHRpb25NZW51SXRlbS5oOiBBZGRlZC4KKyAgICAgICAgKiBVSVByb2Nlc3Mv
QVBJL2d0ay9XZWJLaXRPcHRpb25NZW51SXRlbVByaXZhdGUuaDogQWRkZWQuCisgICAgICAgIChf
V2ViS2l0T3B0aW9uTWVudUl0ZW06Ol9XZWJLaXRPcHRpb25NZW51SXRlbSk6CisgICAgICAgICog
VUlQcm9jZXNzL0FQSS9ndGsvV2ViS2l0T3B0aW9uTWVudVByaXZhdGUuaDogQWRkZWQuCisgICAg
ICAgICogVUlQcm9jZXNzL0FQSS9ndGsvV2ViS2l0UG9wdXBNZW51LmNwcDogQWRkZWQuCisgICAg
ICAgIChXZWJLaXQ6OldlYktpdFBvcHVwTWVudTo6V2ViS2l0UG9wdXBNZW51KToKKyAgICAgICAg
KFdlYktpdDo6bWVudUNsb3NlQ2FsbGJhY2spOgorICAgICAgICAoV2ViS2l0OjpXZWJLaXRQb3B1
cE1lbnU6OnNob3dQb3B1cE1lbnUpOiBDYWxsIHdlYmtpdFdlYlZpZXdTaG93T3B0aW9uTWVudSgp
IGZhbGxpbmcgYmFjayB0byBkZWZhdWx0CisgICAgICAgIGltcGxlbWVudGF0aW9uIGlmIHRoZSB1
c2VyIGRpZG4ndCBoYW5kbGUgdGhlIHNpZ25hbC4KKyAgICAgICAgKFdlYktpdDo6V2ViS2l0UG9w
dXBNZW51OjpoaWRlUG9wdXBNZW51KToKKyAgICAgICAgKFdlYktpdDo6V2ViS2l0UG9wdXBNZW51
OjpjYW5jZWxUcmFja2luZyk6CisgICAgICAgIChXZWJLaXQ6OldlYktpdFBvcHVwTWVudTo6c2Vs
ZWN0SXRlbSk6CisgICAgICAgIChXZWJLaXQ6OldlYktpdFBvcHVwTWVudTo6YWN0aXZhdGVJdGVt
KToKKyAgICAgICAgKiBVSVByb2Nlc3MvQVBJL2d0ay9XZWJLaXRQb3B1cE1lbnUuaDogQWRkZWQu
CisgICAgICAgICogVUlQcm9jZXNzL0FQSS9ndGsvV2ViS2l0V2ViVmlldy5jcHA6CisgICAgICAg
ICh3ZWJraXRfd2ViX3ZpZXdfY2xhc3NfaW5pdCk6CisgICAgICAgICh3ZWJraXRXZWJWaWV3U2hv
d09wdGlvbk1lbnUpOiBFbWl0IFdlYktpdFdlYlZpZXc6OnNob3ctb3B0aW9uLW1lbnUuCisgICAg
ICAgICogVUlQcm9jZXNzL0FQSS9ndGsvV2ViS2l0V2ViVmlldy5oOgorICAgICAgICAqIFVJUHJv
Y2Vzcy9BUEkvZ3RrL1dlYktpdFdlYlZpZXdQcml2YXRlLmg6CisgICAgICAgICogVUlQcm9jZXNz
L0FQSS9ndGsvZG9jcy93ZWJraXQyZ3RrLTQuMC1zZWN0aW9ucy50eHQ6IEFkZCBuZXcgc3ltYm9s
cy4KKyAgICAgICAgKiBVSVByb2Nlc3MvQVBJL2d0ay9kb2NzL3dlYmtpdDJndGstNC4wLnR5cGVz
OiBBZGQgbmV3IGdldF90eXBlIGZ1bmN0aW9ucy4KKyAgICAgICAgKiBVSVByb2Nlc3MvQVBJL2d0
ay9kb2NzL3dlYmtpdDJndGstZG9jcy5zZ21sOiBBZGQgbmV3IHNlY3Rpb25zLgorICAgICAgICAq
IFVJUHJvY2Vzcy9BUEkvZ3RrL3dlYmtpdDIuaDogQWRkIG5ldyBwdWJsaWMgaGVhZGVycy4KKyAg
ICAgICAgKiBVSVByb2Nlc3MvZ3RrL1dlYlBvcHVwTWVudVByb3h5R3RrLmNwcDoKKyAgICAgICAg
KFdlYktpdDo6V2ViUG9wdXBNZW51UHJveHlHdGs6OldlYlBvcHVwTWVudVByb3h5R3RrKTogRG8g
bm90IGNyZWF0ZSB0aGUgR3RrTWVudSBpbiBjb25zdHJ1Y3Rvci4KKyAgICAgICAgKFdlYktpdDo6
V2ViUG9wdXBNZW51UHJveHlHdGs6OnNob3dQb3B1cE1lbnUpOiBDcmVhdGUgdGhlIEd0a01lbnUg
YW5kIGNvbm5lY3QgdG8gdGhlIHNpZ25hbHMgaGVyZS4KKyAgICAgICAgKFdlYktpdDo6V2ViUG9w
dXBNZW51UHJveHlHdGs6OmhpZGVQb3B1cE1lbnUpOiBSZXR1cm4gZWFybHkgaWYgdGhlIEd0ayBo
YXNuJ3QgYmVlbiBzaG93bi4KKyAgICAgICAgKiBVSVByb2Nlc3MvZ3RrL1dlYlBvcHVwTWVudVBy
b3h5R3RrLmg6IE1ha2UgY29uc3RydWN0b3IgYW5kIHdlYnZpZXcgcHJvdGVjdGVkLgorCiAyMDE3
LTA2LTAxICBBbmRyZWFzIEtsaW5nICA8YWtsaW5nQGFwcGxlLmNvbT4KIAogICAgICAgICBbTWFj
XSBSZW1vdmUgYmFja2luZyBzdG9yZSBmb3IgbGF5ZXJzIHRoYXQgYXJlIG91dHNpZGUgdGhlIHZp
ZXdwb3J0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9QbGF0Zm9ybUdUSy5jbWFrZSBiL1Nv
dXJjZS9XZWJLaXQyL1BsYXRmb3JtR1RLLmNtYWtlCmluZGV4IGEyYjgwZTNkZWYyLi4wYzdjMzg3
MmQzYSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvUGxhdGZvcm1HVEsuY21ha2UKKysrIGIv
U291cmNlL1dlYktpdDIvUGxhdGZvcm1HVEsuY21ha2UKQEAgLTIxNiw2ICsyMTYsMTIgQEAgbGlz
dChBUFBFTkQgV2ViS2l0Ml9TT1VSQ0VTCiAgICAgVUlQcm9jZXNzL0FQSS9ndGsvV2ViS2l0Tm90
aWZpY2F0aW9uUHJpdmF0ZS5oCiAgICAgVUlQcm9jZXNzL0FQSS9ndGsvV2ViS2l0Tm90aWZpY2F0
aW9uUHJvdmlkZXIuY3BwCiAgICAgVUlQcm9jZXNzL0FQSS9ndGsvV2ViS2l0Tm90aWZpY2F0aW9u
UHJvdmlkZXIuaAorICAgIFVJUHJvY2Vzcy9BUEkvZ3RrL1dlYktpdE9wdGlvbk1lbnUuY3BwCisg
ICAgVUlQcm9jZXNzL0FQSS9ndGsvV2ViS2l0T3B0aW9uTWVudS5oCisgICAgVUlQcm9jZXNzL0FQ
SS9ndGsvV2ViS2l0T3B0aW9uTWVudVByaXZhdGUuaAorICAgIFVJUHJvY2Vzcy9BUEkvZ3RrL1dl
YktpdE9wdGlvbk1lbnVJdGVtLmNwcAorICAgIFVJUHJvY2Vzcy9BUEkvZ3RrL1dlYktpdE9wdGlv
bk1lbnVJdGVtLmgKKyAgICBVSVByb2Nlc3MvQVBJL2d0ay9XZWJLaXRPcHRpb25NZW51SXRlbVBy
aXZhdGUuaAogICAgIFVJUHJvY2Vzcy9BUEkvZ3RrL1dlYktpdFBlcm1pc3Npb25SZXF1ZXN0LmNw
cAogICAgIFVJUHJvY2Vzcy9BUEkvZ3RrL1dlYktpdFBlcm1pc3Npb25SZXF1ZXN0LmgKICAgICBV
SVByb2Nlc3MvQVBJL2d0ay9XZWJLaXRQbHVnaW4uY3BwCkBAIC0yMjYsNiArMjMyLDcgQEAgbGlz
dChBUFBFTkQgV2ViS2l0Ml9TT1VSQ0VTCiAgICAgVUlQcm9jZXNzL0FQSS9ndGsvV2ViS2l0UG9s
aWN5RGVjaXNpb24uY3BwCiAgICAgVUlQcm9jZXNzL0FQSS9ndGsvV2ViS2l0UG9saWN5RGVjaXNp
b24uaAogICAgIFVJUHJvY2Vzcy9BUEkvZ3RrL1dlYktpdFBvbGljeURlY2lzaW9uUHJpdmF0ZS5o
CisgICAgVUlQcm9jZXNzL0FQSS9ndGsvV2ViS2l0UG9wdXBNZW51LmNwcAogICAgIFVJUHJvY2Vz
cy9BUEkvZ3RrL1dlYktpdFByaW50Q3VzdG9tV2lkZ2V0LmNwcAogICAgIFVJUHJvY2Vzcy9BUEkv
Z3RrL1dlYktpdFByaW50Q3VzdG9tV2lkZ2V0LmgKICAgICBVSVByb2Nlc3MvQVBJL2d0ay9XZWJL
aXRQcmludEN1c3RvbVdpZGdldFByaXZhdGUuaApAQCAtNTY3LDYgKzU3NCw4IEBAIHNldChXZWJL
aXQyR1RLX0lOU1RBTExFRF9IRUFERVJTCiAgICAgJHtXRUJLSVQyX0RJUn0vVUlQcm9jZXNzL0FQ
SS9ndGsvV2ViS2l0TmV0d29ya1Byb3h5U2V0dGluZ3MuaAogICAgICR7V0VCS0lUMl9ESVJ9L1VJ
UHJvY2Vzcy9BUEkvZ3RrL1dlYktpdE5vdGlmaWNhdGlvblBlcm1pc3Npb25SZXF1ZXN0LmgKICAg
ICAke1dFQktJVDJfRElSfS9VSVByb2Nlc3MvQVBJL2d0ay9XZWJLaXROb3RpZmljYXRpb24uaAor
ICAgICR7V0VCS0lUMl9ESVJ9L1VJUHJvY2Vzcy9BUEkvZ3RrL1dlYktpdE9wdGlvbk1lbnUuaAor
ICAgICR7V0VCS0lUMl9ESVJ9L1VJUHJvY2Vzcy9BUEkvZ3RrL1dlYktpdE9wdGlvbk1lbnVJdGVt
LmgKICAgICAke1dFQktJVDJfRElSfS9VSVByb2Nlc3MvQVBJL2d0ay9XZWJLaXRQZXJtaXNzaW9u
UmVxdWVzdC5oCiAgICAgJHtXRUJLSVQyX0RJUn0vVUlQcm9jZXNzL0FQSS9ndGsvV2ViS2l0UGx1
Z2luLmgKICAgICAke1dFQktJVDJfRElSfS9VSVByb2Nlc3MvQVBJL2d0ay9XZWJLaXRQb2xpY3lE
ZWNpc2lvbi5oCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay9Q
YWdlQ2xpZW50SW1wbC5jcHAgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay9QYWdl
Q2xpZW50SW1wbC5jcHAKaW5kZXggYjZmYjliOGU3M2EuLmEyMzRjNTQzZDlhIDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay9QYWdlQ2xpZW50SW1wbC5jcHAKKysr
IGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvUGFnZUNsaWVudEltcGwuY3BwCkBA
IC0zNywxMCArMzcsMTAgQEAKICNpbmNsdWRlICJXZWJDb250ZXh0TWVudVByb3h5R3RrLmgiCiAj
aW5jbHVkZSAiV2ViRXZlbnRGYWN0b3J5LmgiCiAjaW5jbHVkZSAiV2ViS2l0Q29sb3JDaG9vc2Vy
LmgiCisjaW5jbHVkZSAiV2ViS2l0UG9wdXBNZW51LmgiCiAjaW5jbHVkZSAiV2ViS2l0V2ViVmll
d0Jhc2VQcml2YXRlLmgiCiAjaW5jbHVkZSAiV2ViS2l0V2ViVmlld1ByaXZhdGUuaCIKICNpbmNs
dWRlICJXZWJQYWdlUHJveHkuaCIKLSNpbmNsdWRlICJXZWJQb3B1cE1lbnVQcm94eUd0ay5oIgog
I2luY2x1ZGUgIldlYlByb2Nlc3NQb29sLmgiCiAjaW5jbHVkZSA8V2ViQ29yZS9DYWlyb1V0aWxp
dGllcy5oPgogI2luY2x1ZGUgPFdlYkNvcmUvQ3Vyc29yLmg+CkBAIC0yMDYsNyArMjA2LDcgQEAg
dm9pZCBQYWdlQ2xpZW50SW1wbDo6ZG9uZVdpdGhLZXlFdmVudChjb25zdCBOYXRpdmVXZWJLZXli
b2FyZEV2ZW50JiBldmVudCwgYm9vbAogCiBSZWZQdHI8V2ViUG9wdXBNZW51UHJveHk+IFBhZ2VD
bGllbnRJbXBsOjpjcmVhdGVQb3B1cE1lbnVQcm94eShXZWJQYWdlUHJveHkmIHBhZ2UpCiB7Ci0g
ICAgcmV0dXJuIFdlYlBvcHVwTWVudVByb3h5R3RrOjpjcmVhdGUobV92aWV3V2lkZ2V0LCBwYWdl
KTsKKyAgICByZXR1cm4gV2ViS2l0UG9wdXBNZW51OjpjcmVhdGUobV92aWV3V2lkZ2V0LCBwYWdl
KTsKIH0KIAogUmVmUHRyPFdlYkNvbnRleHRNZW51UHJveHk+IFBhZ2VDbGllbnRJbXBsOjpjcmVh
dGVDb250ZXh0TWVudVByb3h5KFdlYlBhZ2VQcm94eSYgcGFnZSwgY29uc3QgQ29udGV4dE1lbnVD
b250ZXh0RGF0YSYgY29udGV4dCwgY29uc3QgVXNlckRhdGEmIHVzZXJEYXRhKQpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvV2ViS2l0T3B0aW9uTWVudS5jcHAg
Yi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay9XZWJLaXRPcHRpb25NZW51LmNwcApu
ZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMC4uYWZjZjgxMWY3OTMKLS0tIC9k
ZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay9XZWJLaXRPcHRp
b25NZW51LmNwcApAQCAtMCwwICsxLDE4NiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNyBJ
Z2FsaWEgUy5MLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2Fu
IHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2Yg
dGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBi
eSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqIHZlcnNpb24gMiBvZiB0
aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisg
KiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJl
IHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBp
bXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQ
QVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogTGlicmFyeSBHZW5lcmFsIFB1Ymxp
YyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2Vp
dmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICog
YWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5v
dCwgd3JpdGUgdG8KKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZy
YW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCisgKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVT
QS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiV2ViS2l0T3B0aW9uTWVu
dS5oIgorCisjaW5jbHVkZSAiV2ViS2l0T3B0aW9uTWVudUl0ZW1Qcml2YXRlLmgiCisjaW5jbHVk
ZSAiV2ViS2l0T3B0aW9uTWVudVByaXZhdGUuaCIKKyNpbmNsdWRlICJXZWJLaXRQcml2YXRlLmgi
CisKK3VzaW5nIG5hbWVzcGFjZSBXZWJLaXQ7CisKKy8qKgorICogU0VDVElPTjogV2ViS2l0T3B0
aW9uTWVudQorICogQFNob3J0X2Rlc2NyaXB0aW9uOgorICogQFRpdGxlOiBXZWJLaXRPcHRpb25N
ZW51CisgKgorICogV2ViS2l0T3B0aW9uTWVudSByZXByZXNlbnRzIHRoZSBkcm9wZG93biBtZW51
IG9mIGEgc2VsZWN0IGVsZW1lbnQgaW4gYSAjV2ViS2l0V2ViVmlldy4KKyAqCisgKiBXaGVuIGEg
c2VsZWN0IGVsZW1lbnQgaW4gYSAjV2ViS2l0V2ViVmlldyBuZWVkcyB0byBkaXNwbGF5IGEgZHJv
cGRvd24gbWVudSwgdGhlIHNpZ25hbAorICogI1dlYktpdFdlYlZpZXc6OnNob3ctb3B0aW9uLW1l
bnUgaXMgZW1pdHRlZCwgcHJvdmlkaW5nIGEgV2ViS2l0T3B0aW9uTWVudSB3aXRoIHRoZQorICog
I1dlYktpdE9wdGlvbk1lbnVJdGVtPCEtLSAtLT5zIHRoYXQgc2hvdWxkIGJlIGRpc3BsYXllZC4K
KyAqCisgKiBTaW5jZTogMi4xOAorICovCisKK3N0cnVjdCBfV2ViS2l0T3B0aW9uTWVudVByaXZh
dGUgeworICAgIFZlY3RvcjxXZWJLaXRPcHRpb25NZW51SXRlbT4gaXRlbXM7CisgICAgUmVmUHRy
PFdlYktpdFBvcHVwTWVudT4gcG9wdXBNZW51OworfTsKKworZW51bSB7CisgICAgQ0xPU0UsCisK
KyAgICBMQVNUX1NJR05BTAorfTsKKworc3RhdGljIGd1aW50IHNpZ25hbHNbTEFTVF9TSUdOQUxd
ID0geyAwLCB9OworCitXRUJLSVRfREVGSU5FX1RZUEUoV2ViS2l0T3B0aW9uTWVudSwgd2Via2l0
X29wdGlvbl9tZW51LCBHX1RZUEVfT0JKRUNUKQorCitzdGF0aWMgdm9pZCB3ZWJraXRfb3B0aW9u
X21lbnVfY2xhc3NfaW5pdChXZWJLaXRPcHRpb25NZW51Q2xhc3MqIG9wdGlvbk1lbnVDbGFzcykK
K3sKKyAgICAvKioKKyAgICAgKiBXZWJLaXRPcHRpb25NZW51OjpjbG9zZToKKyAgICAgKiBAbWVu
dTogdGhlICNXZWJLaXRPcHRpb25NZW51IG9uIHdoaWNoIHRoZSBzaWduYWwgaXMgZW1pdHRlZAor
ICAgICAqCisgICAgICogRW1pdHRlZCB3aGVuIGNsb3NpbmcgYSAjV2ViS2l0T3B0aW9uTWVudSBp
cyByZXF1ZXN0ZWQuIFRoaXMgY2FuIGhhcHBlbgorICAgICAqIHdoZW4gdGhlIHVzZXIgZXhwbGlj
aXRseSBjYWxscyB3ZWJraXRfb3B0aW9uX21lbnVfY2xvc2UoKSBvciB3aGVuIHRoZQorICAgICAq
IGVsZW1lbnQgaXMgZGV0YWNoZWQgZnJvbSB0aGUgY3VycmVudCBwYWdlLgorICAgICAqCisgICAg
ICogU2luY2U6IDIuMTgKKyAgICAgKi8KKyAgICBzaWduYWxzW0NMT1NFXSA9CisgICAgICAgIGdf
c2lnbmFsX25ldygiY2xvc2UiLAorICAgICAgICAgICAgR19UWVBFX0ZST01fQ0xBU1Mob3B0aW9u
TWVudUNsYXNzKSwKKyAgICAgICAgICAgIEdfU0lHTkFMX1JVTl9MQVNULAorICAgICAgICAgICAg
MCwgbnVsbHB0ciwgbnVsbHB0ciwKKyAgICAgICAgICAgIGdfY2Nsb3N1cmVfbWFyc2hhbF9WT0lE
X19WT0lELAorICAgICAgICAgICAgR19UWVBFX05PTkUsIDApOworfQorCitXZWJLaXRPcHRpb25N
ZW51KiB3ZWJraXRPcHRpb25NZW51Q3JlYXRlKFdlYktpdFBvcHVwTWVudSYgcG9wdXBNZW51LCBj
b25zdCBWZWN0b3I8V2ViUG9wdXBJdGVtPiYgaXRlbXMsIGludDMyX3Qgc2VsZWN0ZWRJbmRleCkK
K3sKKyAgICBhdXRvKiBtZW51ID0gV0VCS0lUX09QVElPTl9NRU5VKGdfb2JqZWN0X25ldyhXRUJL
SVRfVFlQRV9PUFRJT05fTUVOVSwgbnVsbHB0cikpOworICAgIG1lbnUtPnByaXYtPnBvcHVwTWVu
dSA9ICZwb3B1cE1lbnU7CisgICAgbWVudS0+cHJpdi0+aXRlbXMucmVzZXJ2ZUluaXRpYWxDYXBh
Y2l0eShpdGVtcy5zaXplKCkpOworICAgIGZvciAoY29uc3QgYXV0byYgaXRlbSA6IGl0ZW1zKQor
ICAgICAgICBtZW51LT5wcml2LT5pdGVtcy51bmNoZWNrZWRBcHBlbmQoV2ViS2l0T3B0aW9uTWVu
dUl0ZW0oaXRlbSkpOworICAgIGlmIChzZWxlY3RlZEluZGV4ID49IDApIHsKKyAgICAgICAgQVNT
RVJUKHN0YXRpY19jYXN0PHVuc2lnbmVkPihzZWxlY3RlZEluZGV4KSA8IG1lbnUtPnByaXYtPml0
ZW1zLnNpemUoKSk7CisgICAgICAgIG1lbnUtPnByaXYtPml0ZW1zW3NlbGVjdGVkSW5kZXhdLmlz
U2VsZWN0ZWQgPSB0cnVlOworICAgIH0KKyAgICByZXR1cm4gbWVudTsKK30KKworLyoqCisgKiB3
ZWJraXRfb3B0aW9uX21lbnVfZ2V0X25faXRlbXM6CisgKiBAbWVudTogYSAjV2ViS2l0T3B0aW9u
TWVudQorICoKKyAqIEdldHMgdGhlIGxlbmd0aCBvZiB0aGUgQG1lbnUuCisgKgorICogUmV0dXJu
czogdGhlIG51bWJlciBvZiAjV2ViS2l0T3B0aW9uTWVudUl0ZW08IS0tIC0tPnMgaW4gQG1lbnUK
KyAqCisgKiBTaW5jZTogMi4xOAorICovCitndWludCB3ZWJraXRfb3B0aW9uX21lbnVfZ2V0X25f
aXRlbXMoV2ViS2l0T3B0aW9uTWVudSogbWVudSkKK3sKKyAgICBnX3JldHVybl92YWxfaWZfZmFp
bChXRUJLSVRfSVNfT1BUSU9OX01FTlUobWVudSksIDApOworCisgICAgcmV0dXJuIG1lbnUtPnBy
aXYtPml0ZW1zLnNpemUoKTsKK30KKworLyoqCisgKiB3ZWJraXRfb3B0aW9uX21lbnVfZ2V0X2l0
ZW06CisgKiBAbWVudTogYSAjV2ViS2l0T3B0aW9uTWVudQorICogQGluZGV4OiB0aGUgaW5kZXgg
b2YgdGhlIGl0ZW0KKyAqCisgKiBSZXR1cm5zIHRoZSAjV2ViS2l0T3B0aW9uTWVudUl0ZW0gYXQg
QGluZGV4IGluIEBtZW51LgorICoKKyAqIFJldHVybnM6ICh0cmFuc2ZlciBub25lKTogYSAjV2Vi
S2l0T3B0aW9uTWVudUl0ZW0gb2YgQG1lbnUuCisgKgorICogU2luY2U6IDIuMTgKKyAqLworV2Vi
S2l0T3B0aW9uTWVudUl0ZW0qIHdlYmtpdF9vcHRpb25fbWVudV9nZXRfaXRlbShXZWJLaXRPcHRp
b25NZW51KiBtZW51LCBndWludCBpbmRleCkKK3sKKyAgICBnX3JldHVybl92YWxfaWZfZmFpbChX
RUJLSVRfSVNfT1BUSU9OX01FTlUobWVudSksIG51bGxwdHIpOworICAgIGdfcmV0dXJuX3ZhbF9p
Zl9mYWlsKGluZGV4IDwgbWVudS0+cHJpdi0+aXRlbXMuc2l6ZSgpLCBudWxscHRyKTsKKworICAg
IHJldHVybiAmbWVudS0+cHJpdi0+aXRlbXNbaW5kZXhdOworfQorCisvKioKKyAqIHdlYmtpdF9v
cHRpb25fbWVudV9zZWxlY3RfaXRlbToKKyAqIEBtZW51OiBhICNXZWJLaXRPcHRpb25NZW51Cisg
KiBAaW5kZXg6IHRoZSBpbmRleCBvZiB0aGUgaXRlbQorICoKKyAqIFNlbGVjdHMgdGhlICNXZWJL
aXRPcHRpb25NZW51SXRlbSBhdCBAaW5kZXggaW4gQG1lbnUuIFNlbGVjdGluZyBhbiBpdGVtIGNo
YW5nZXMgdGhlCisgKiB0ZXh0IHNob3duIGJ5IHRoZSBjb21ibyBidXR0b24sIGJ1dCBpdCBkb2Vz
bid0IGNoYW5nZSB0aGUgdmFsdWUgb2YgdGhlIGVsZW1lbnQuIFlvdSBuZWVkIHRvCisgKiBleHBs
aWNpdGx5IGFjdGl2YXRlIHRoZSBpdGVtIHdpdGggd2Via2l0X29wdGlvbl9tZW51X3NlbGVjdF9p
dGVtKCkgb3IgY2xvc2UgdGhlIG1lbnUgd2l0aAorICogd2Via2l0X29wdGlvbl9tZW51X2Nsb3Nl
KCkgaW4gd2hpY2ggY2FzZSB0aGUgY3VycmVudGx5IHNlbGVjdGVkIGl0ZW0gd2lsbCBiZSBhY3Rp
dmF0ZWQuCisgKgorICogU2luY2U6IDIuMTgKKyAqLwordm9pZCB3ZWJraXRfb3B0aW9uX21lbnVf
c2VsZWN0X2l0ZW0oV2ViS2l0T3B0aW9uTWVudSogbWVudSwgZ3VpbnQgaW5kZXgpCit7CisgICAg
Z19yZXR1cm5faWZfZmFpbChXRUJLSVRfSVNfT1BUSU9OX01FTlUobWVudSkpOworICAgIGdfcmV0
dXJuX2lmX2ZhaWwoaW5kZXggPCBtZW51LT5wcml2LT5pdGVtcy5zaXplKCkpOworCisgICAgbWVu
dS0+cHJpdi0+cG9wdXBNZW51LT5zZWxlY3RJdGVtKGluZGV4KTsKK30KKworLyoqCisgKiB3ZWJr
aXRfb3B0aW9uX21lbnVfYWN0aXZhdGVfaXRlbToKKyAqIEBtZW51OiBhICNXZWJLaXRPcHRpb25N
ZW51CisgKiBAaW5kZXg6IHRoZSBpbmRleCBvZiB0aGUgaXRlbQorICoKKyAqIEFjdGl2YXRlcyB0
aGUgI1dlYktpdE9wdGlvbk1lbnVJdGVtIGF0IEBpbmRleCBpbiBAbWVudS4gQWN0aXZhdGluZyBh
biBpdGVtIGNoYW5nZXMgdGhlIHZhbHVlCisgKiBvZiB0aGUgZWxlbWVudCBtYWtpbmcgdGhlIGl0
ZW0gdGhlIGFjdGl2ZSBvbmUuIFlvdSBhcmUgZXhwZWN0ZWQgdG8gY2xvc2UgdGhlIG1lbnUgd2l0
aAorICogd2Via2l0X29wdGlvbl9tZW51X2Nsb3NlKCkgYWZ0ZXIgYWN0aXZhdGluZyBhbiBpdGVt
LCBjYWxsaW5nIHRoaXMgZnVuY3Rpb24gYWdhaW4gd2lsbCBoYXZlIG5vCisgKiBlZmZlY3QuCisg
KgorICogU2luY2U6IDIuMTgKKyAqLwordm9pZCB3ZWJraXRfb3B0aW9uX21lbnVfYWN0aXZhdGVf
aXRlbShXZWJLaXRPcHRpb25NZW51KiBtZW51LCBndWludCBpbmRleCkKK3sKKyAgICBnX3JldHVy
bl9pZl9mYWlsKFdFQktJVF9JU19PUFRJT05fTUVOVShtZW51KSk7CisgICAgZ19yZXR1cm5faWZf
ZmFpbChpbmRleCA8IG1lbnUtPnByaXYtPml0ZW1zLnNpemUoKSk7CisKKyAgICBtZW51LT5wcml2
LT5wb3B1cE1lbnUtPmFjdGl2YXRlSXRlbShpbmRleCk7Cit9CisKKy8qKgorICogd2Via2l0X29w
dGlvbl9tZW51X2Nsb3NlOgorICogQG1lbnU6IGEgI1dlYktpdE9wdGlvbk1lbnUKKyAqCisgKiBS
ZXF1ZXN0IHRvIGNsb3NlIGEgI1dlYktpdE9wdGlvbk1lbnUuIFRoaXMgZW1pdHMgV2ViS2l0T3B0
aW9uTWVudTo6Y2xvc2Ugc2lnbmFsLgorICogVGhpcyBmdW5jdGlvbiBzaG91bGQgYWx3YXlzIGJl
IGNhbGxlZCB0byBub3RpZnkgV2ViS2l0IHRoYXQgdGhlIGFzc29jaWF0ZWQKKyAqIG1lbnUgaGFz
IGJlZW4gY2xvc2VkLiBJZiB0aGUgbWVudSBpcyBjbG9zZWQgYW5kIG5laXRoZXIgd2Via2l0X29w
dGlvbl9tZW51X3NlbGVjdF9pdGVtKCkKKyAqIG5vciB3ZWJraXRfb3B0aW9uX21lbnVfYWN0aXZh
dGVfaXRlbSgpIGhhdmUgYmVlbiBjYWxsZWQsIHRoZSBlbGVtZW50IHZhbHVlIHJlbWFpbnMKKyAq
IHVuY2hhbmdlZC4KKyAqCisgKiBTaW5jZTogMi4xOAorICovCit2b2lkIHdlYmtpdF9vcHRpb25f
bWVudV9jbG9zZShXZWJLaXRPcHRpb25NZW51KiBtZW51KQoreworICAgIGdfcmV0dXJuX2lmX2Zh
aWwoV0VCS0lUX0lTX09QVElPTl9NRU5VKG1lbnUpKTsKKworICAgIGdfc2lnbmFsX2VtaXQobWVu
dSwgc2lnbmFsc1tDTE9TRV0sIDAsIG51bGxwdHIpOworfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvV2ViS2l0T3B0aW9uTWVudS5oIGIvU291cmNlL1dlYktp
dDIvVUlQcm9jZXNzL0FQSS9ndGsvV2ViS2l0T3B0aW9uTWVudS5oCm5ldyBmaWxlIG1vZGUgMTAw
NjQ0CmluZGV4IDAwMDAwMDAwMDAwLi45MDdlZDIzNzQzOQotLS0gL2Rldi9udWxsCisrKyBiL1Nv
dXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL1dlYktpdE9wdGlvbk1lbnUuaApAQCAtMCww
ICsxLDgyIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE3IElnYWxpYSBTLkwuCisgKgorICog
VGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFu
ZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2Vu
ZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJl
IEZvdW5kYXRpb247IGVpdGhlcgorICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQg
eW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBk
aXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJ
VEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YK
KyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4g
IFNlZSB0aGUgR05VCisgKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUg
ZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBH
TlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgbGli
cmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bworICogdGhl
IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0
aCBGbG9vciwKKyAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgorICovCisKKyNpZiAhZGVm
aW5lZChfX1dFQktJVDJfSF9JTlNJREVfXykgJiYgIWRlZmluZWQoV0VCS0lUMl9DT01QSUxBVElP
TikgJiYgIWRlZmluZWQoX19XRUJLSVRfV0VCX0VYVEVOU0lPTl9IX0lOU0lERV9fKQorI2Vycm9y
ICJPbmx5IDx3ZWJraXQyL3dlYmtpdDIuaD4gY2FuIGJlIGluY2x1ZGVkIGRpcmVjdGx5LiIKKyNl
bmRpZgorCisjaWZuZGVmIFdlYktpdE9wdGlvbk1lbnVfaAorI2RlZmluZSBXZWJLaXRPcHRpb25N
ZW51X2gKKworI2luY2x1ZGUgPGdsaWItb2JqZWN0Lmg+CisjaW5jbHVkZSA8d2Via2l0Mi9XZWJL
aXRPcHRpb25NZW51SXRlbS5oPgorI2luY2x1ZGUgPHdlYmtpdDIvV2ViS2l0RGVmaW5lcy5oPgor
CitHX0JFR0lOX0RFQ0xTCisKKyNkZWZpbmUgV0VCS0lUX1RZUEVfT1BUSU9OX01FTlUgICAgICAg
ICAgICAod2Via2l0X29wdGlvbl9tZW51X2dldF90eXBlKCkpCisjZGVmaW5lIFdFQktJVF9PUFRJ
T05fTUVOVShvYmopICAgICAgICAgICAgKEdfVFlQRV9DSEVDS19JTlNUQU5DRV9DQVNUKChvYmop
LCBXRUJLSVRfVFlQRV9PUFRJT05fTUVOVSwgV2ViS2l0T3B0aW9uTWVudSkpCisjZGVmaW5lIFdF
QktJVF9JU19PUFRJT05fTUVOVShvYmopICAgICAgICAgKEdfVFlQRV9DSEVDS19JTlNUQU5DRV9U
WVBFKChvYmopLCBXRUJLSVRfVFlQRV9PUFRJT05fTUVOVSkpCisjZGVmaW5lIFdFQktJVF9PUFRJ
T05fTUVOVV9DTEFTUyhrbGFzcykgICAgKEdfVFlQRV9DSEVDS19DTEFTU19DQVNUKChrbGFzcyks
ICBXRUJLSVRfVFlQRV9PUFRJT05fTUVOVSwgV2ViS2l0T3B0aW9uTWVudUNsYXNzKSkKKyNkZWZp
bmUgV0VCS0lUX0lTX09QVElPTl9NRU5VX0NMQVNTKGtsYXNzKSAoR19UWVBFX0NIRUNLX0NMQVNT
X1RZUEUoKGtsYXNzKSwgIFdFQktJVF9UWVBFX09QVElPTl9NRU5VKSkKKyNkZWZpbmUgV0VCS0lU
X09QVElPTl9NRU5VX0dFVF9DTEFTUyhvYmopICAoR19UWVBFX0lOU1RBTkNFX0dFVF9DTEFTUygo
b2JqKSwgIFdFQktJVF9UWVBFX09QVElPTl9NRU5VLCBXZWJLaXRPcHRpb25NZW51Q2xhc3MpKQor
Cit0eXBlZGVmIHN0cnVjdCBfV2ViS2l0T3B0aW9uTWVudSAgICAgICAgV2ViS2l0T3B0aW9uTWVu
dTsKK3R5cGVkZWYgc3RydWN0IF9XZWJLaXRPcHRpb25NZW51Q2xhc3MgICBXZWJLaXRPcHRpb25N
ZW51Q2xhc3M7Cit0eXBlZGVmIHN0cnVjdCBfV2ViS2l0T3B0aW9uTWVudVByaXZhdGUgV2ViS2l0
T3B0aW9uTWVudVByaXZhdGU7CisKK3N0cnVjdCBfV2ViS2l0T3B0aW9uTWVudSB7CisgICAgR09i
amVjdCBwYXJlbnQ7CisKKyAgICBXZWJLaXRPcHRpb25NZW51UHJpdmF0ZSAqcHJpdjsKK307CisK
K3N0cnVjdCBfV2ViS2l0T3B0aW9uTWVudUNsYXNzIHsKKyAgICBHT2JqZWN0Q2xhc3MgcGFyZW50
X2NsYXNzOworCisgICAgdm9pZCAoKl93ZWJraXRfcmVzZXJ2ZWQwKSAodm9pZCk7CisgICAgdm9p
ZCAoKl93ZWJraXRfcmVzZXJ2ZWQxKSAodm9pZCk7CisgICAgdm9pZCAoKl93ZWJraXRfcmVzZXJ2
ZWQyKSAodm9pZCk7CisgICAgdm9pZCAoKl93ZWJraXRfcmVzZXJ2ZWQzKSAodm9pZCk7Cit9Owor
CitXRUJLSVRfQVBJIEdUeXBlCit3ZWJraXRfb3B0aW9uX21lbnVfZ2V0X3R5cGUgICAgICAgKHZv
aWQpOworCitXRUJLSVRfQVBJIGd1aW50Cit3ZWJraXRfb3B0aW9uX21lbnVfZ2V0X25faXRlbXMg
ICAgKFdlYktpdE9wdGlvbk1lbnUgKm1lbnUpOworCitXRUJLSVRfQVBJIFdlYktpdE9wdGlvbk1l
bnVJdGVtICoKK3dlYmtpdF9vcHRpb25fbWVudV9nZXRfaXRlbSAgICAgICAoV2ViS2l0T3B0aW9u
TWVudSAqbWVudSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ3VpbnQgICAg
ICAgICAgICAgaW5kZXgpOworCitXRUJLSVRfQVBJIHZvaWQKK3dlYmtpdF9vcHRpb25fbWVudV9z
ZWxlY3RfaXRlbSAgICAoV2ViS2l0T3B0aW9uTWVudSAqbWVudSwKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgZ3VpbnQgICAgICAgICAgICAgaW5kZXgpOworCitXRUJLSVRfQVBJ
IHZvaWQKK3dlYmtpdF9vcHRpb25fbWVudV9hY3RpdmF0ZV9pdGVtICAoV2ViS2l0T3B0aW9uTWVu
dSAqbWVudSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ3VpbnQgICAgICAg
ICAgICAgaW5kZXgpOworCitXRUJLSVRfQVBJIHZvaWQKK3dlYmtpdF9vcHRpb25fbWVudV9jbG9z
ZSAgICAgICAgICAoV2ViS2l0T3B0aW9uTWVudSAqbWVudSk7CisKK0dfRU5EX0RFQ0xTCisKKyNl
bmRpZgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvV2ViS2l0
T3B0aW9uTWVudUl0ZW0uY3BwIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvV2Vi
S2l0T3B0aW9uTWVudUl0ZW0uY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAw
MDAwLi44YWRmNGM4Y2U4OQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJLaXQyL1VJUHJv
Y2Vzcy9BUEkvZ3RrL1dlYktpdE9wdGlvbk1lbnVJdGVtLmNwcApAQCAtMCwwICsxLDE2NCBAQAor
LyoKKyAqIENvcHlyaWdodCAoQykgMjAxNyBJZ2FsaWEgUy5MLgorICoKKyAqIFRoaXMgbGlicmFy
eSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1v
ZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGlj
CisgKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9u
OyBlaXRoZXIKKyAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9u
KSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQg
aW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBX
QVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFO
VEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdO
VQorICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisg
KgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkg
R2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0
aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KKyAqIHRoZSBGcmVlIFNvZnR3
YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCisg
KiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgi
CisjaW5jbHVkZSAiV2ViS2l0T3B0aW9uTWVudUl0ZW0uaCIKKworI2luY2x1ZGUgIldlYktpdE9w
dGlvbk1lbnVJdGVtUHJpdmF0ZS5oIgorCit1c2luZyBuYW1lc3BhY2UgV2ViS2l0OworCitHX0RF
RklORV9CT1hFRF9UWVBFKFdlYktpdE9wdGlvbk1lbnVJdGVtLCB3ZWJraXRfb3B0aW9uX21lbnVf
aXRlbSwgd2Via2l0X29wdGlvbl9tZW51X2l0ZW1fY29weSwgd2Via2l0X29wdGlvbl9tZW51X2l0
ZW1fZnJlZSkKKworLyoqCisgKiB3ZWJraXRfb3B0aW9uX21lbnVfaXRlbV9jb3B5OgorICogQGl0
ZW06IGEgI1dlYktpdE9wdGlvbk1lbnVJdGVtCisgKgorICogTWFrZSBhIGNvcHkgb2YgdGhlICNX
ZWJLaXRPcHRpb25NZW51SXRlbS4KKyAqCisgKiBSZXR1cm5zOiAodHJhbnNmZXIgZnVsbCk6IEEg
Y29weSBvZiBwYXNzZWQgaW4gI1dlYktpdE9wdGlvbk1lbnVJdGVtCisgKgorICogU2luY2U6IDIu
MTgKKyAqLworV2ViS2l0T3B0aW9uTWVudUl0ZW0qIHdlYmtpdF9vcHRpb25fbWVudV9pdGVtX2Nv
cHkoV2ViS2l0T3B0aW9uTWVudUl0ZW0qIGl0ZW0pCit7CisgICAgZ19yZXR1cm5fdmFsX2lmX2Zh
aWwoaXRlbSwgbnVsbHB0cik7CisKKyAgICBhdXRvKiBjb3B5SXRlbSA9IHN0YXRpY19jYXN0PFdl
YktpdE9wdGlvbk1lbnVJdGVtKj4oZmFzdE1hbGxvYyhzaXplb2YoV2ViS2l0T3B0aW9uTWVudUl0
ZW0pKSk7CisgICAgbmV3IChjb3B5SXRlbSkgV2ViS2l0T3B0aW9uTWVudUl0ZW0oaXRlbSk7Cisg
ICAgcmV0dXJuIGNvcHlJdGVtOworfQorCisvKioKKyAqIHdlYmtpdF9vcHRpb25fbWVudV9pdGVt
X2ZyZWU6CisgKiBAaXRlbTogQSAjV2ViS2l0T3B0aW9uTWVudUl0ZW0KKyAqCisgKiBGcmVlIHRo
ZSAjV2ViS2l0T3B0aW9uTWVudUl0ZW0uCisgKgorICogU2luY2U6IDIuMTgKKyAqLwordm9pZCB3
ZWJraXRfb3B0aW9uX21lbnVfaXRlbV9mcmVlKFdlYktpdE9wdGlvbk1lbnVJdGVtKiBpdGVtKQor
eworICAgIGdfcmV0dXJuX2lmX2ZhaWwoaXRlbSk7CisKKyAgICBpdGVtLT5+V2ViS2l0T3B0aW9u
TWVudUl0ZW0oKTsKKyAgICBmYXN0RnJlZShpdGVtKTsKK30KKworLyoqCisgKiB3ZWJraXRfb3B0
aW9uX21lbnVfaXRlbV9nZXRfbGFiZWw6CisgKiBAaXRlbTogYSAjV2ViS2l0T3B0aW9uTWVudUl0
ZW0KKyAqCisgKiBHZXQgdGhlIGxhYmVsIG9mIGEgI1dlYktpdE9wdGlvbk1lbnVJdGVtLgorICoK
KyAqIFJldHVybnM6IFRoZSBsYWJlbCBvZiBAaXRlbS4KKyAqCisgKiBTaW5jZTogMi4xOAorICov
Citjb25zdCBnY2hhciogd2Via2l0X29wdGlvbl9tZW51X2l0ZW1fZ2V0X2xhYmVsKFdlYktpdE9w
dGlvbk1lbnVJdGVtKiBpdGVtKQoreworICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsKGl0ZW0sIG51
bGxwdHIpOworCisgICAgcmV0dXJuIGl0ZW0tPmxhYmVsLmRhdGEoKTsKK30KKworLyoqCisgKiB3
ZWJraXRfb3B0aW9uX21lbnVfaXRlbV9nZXRfdG9vbHRpcDoKKyAqIEBpdGVtOiBhICNXZWJLaXRP
cHRpb25NZW51SXRlbQorICoKKyAqIEdldCB0aGUgdG9vbHRpcCBvZiBhICNXZWJLaXRPcHRpb25N
ZW51SXRlbS4KKyAqCisgKiBSZXR1cm5zOiBUaGUgdG9vbHRpcCBvZiBAaXRlbSwgb3IgJU5VTEwu
CisgKgorICogU2luY2U6IDIuMTgKKyAqLworY29uc3QgZ2NoYXIqIHdlYmtpdF9vcHRpb25fbWVu
dV9pdGVtX2dldF90b29sdGlwKFdlYktpdE9wdGlvbk1lbnVJdGVtKiBpdGVtKQoreworICAgIGdf
cmV0dXJuX3ZhbF9pZl9mYWlsKGl0ZW0sIG51bGxwdHIpOworCisgICAgcmV0dXJuIGl0ZW0tPnRv
b2x0aXAuaXNOdWxsKCkgPyBudWxscHRyIDogaXRlbS0+dG9vbHRpcC5kYXRhKCk7Cit9CisKKy8q
KgorICogd2Via2l0X29wdGlvbl9tZW51X2l0ZW1faXNfZ3JvdXBfbGFiZWw6CisgKiBAaXRlbTog
YSAjV2ViS2l0T3B0aW9uTWVudUl0ZW0KKyAqCisgKiBXaGV0aGVyIGEjV2ViS2l0T3B0aW9uTWVu
dUl0ZW0gaXMgYSBncm91cCBsYWJlbC4KKyAqCisgKiBSZXR1cm5zOiAlVFJVRSBpZiB0aGUgQGl0
ZW0gaXMgYSBncm91cCBsYWJlbCBvciAlRkFMU0Ugb3RoZXJ3aXNlLgorICoKKyAqIFNpbmNlOiAy
LjE4CisgKi8KK2dib29sZWFuIHdlYmtpdF9vcHRpb25fbWVudV9pdGVtX2lzX2dyb3VwX2xhYmVs
KFdlYktpdE9wdGlvbk1lbnVJdGVtKiBpdGVtKQoreworICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWls
KGl0ZW0sIEZBTFNFKTsKKworICAgIHJldHVybiBpdGVtLT5pc0dyb3VwTGFiZWw7Cit9CisKKy8q
KgorICogd2Via2l0X29wdGlvbl9tZW51X2l0ZW1faXNfZ3JvdXBfY2hpbGQ6CisgKiBAaXRlbTog
YSAjV2ViS2l0T3B0aW9uTWVudUl0ZW0KKyAqCisgKiBXaGV0aGVyIGEjV2ViS2l0T3B0aW9uTWVu
dUl0ZW0gaXMgYSBncm91cCBjaGlsZC4KKyAqCisgKiBSZXR1cm5zOiAlVFJVRSBpZiB0aGUgQGl0
ZW0gaXMgYSBncm91cCBjaGlsZCBvciAlRkFMU0Ugb3RoZXJ3aXNlLgorICoKKyAqIFNpbmNlOiAy
LjE4CisgKi8KK2dib29sZWFuIHdlYmtpdF9vcHRpb25fbWVudV9pdGVtX2lzX2dyb3VwX2NoaWxk
KFdlYktpdE9wdGlvbk1lbnVJdGVtKiBpdGVtKQoreworICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWls
KGl0ZW0sIEZBTFNFKTsKKworICAgIHJldHVybiBpdGVtLT5pc0dyb3VwQ2hpbGQ7Cit9CisKKy8q
KgorICogd2Via2l0X29wdGlvbl9tZW51X2l0ZW1faXNfZW5hYmxlZDoKKyAqIEBpdGVtOiBhICNX
ZWJLaXRPcHRpb25NZW51SXRlbQorICoKKyAqIFdoZXRoZXIgYSNXZWJLaXRPcHRpb25NZW51SXRl
bSBpcyBlbmFibGVkLgorICoKKyAqIFJldHVybnM6ICVUUlVFIGlmIHRoZSBAaXRlbSBpcyBlbmFi
bGVkIG9yICVGQUxTRSBvdGhlcndpc2UuCisgKgorICogU2luY2U6IDIuMTgKKyAqLworZ2Jvb2xl
YW4gd2Via2l0X29wdGlvbl9tZW51X2l0ZW1faXNfZW5hYmxlZChXZWJLaXRPcHRpb25NZW51SXRl
bSogaXRlbSkKK3sKKyAgICBnX3JldHVybl92YWxfaWZfZmFpbChpdGVtLCBGQUxTRSk7CisKKyAg
ICByZXR1cm4gaXRlbS0+aXNFbmFibGVkOworfQorCisvKioKKyAqIHdlYmtpdF9vcHRpb25fbWVu
dV9pdGVtX2lzX3NlbGVjdGVkOgorICogQGl0ZW06IGEgI1dlYktpdE9wdGlvbk1lbnVJdGVtCisg
KgorICogV2hldGhlciBhI1dlYktpdE9wdGlvbk1lbnVJdGVtIGlzIHRoZSBjdXJyZW50bHkgc2Vs
ZWN0ZWQgb25lLgorICoKKyAqIFJldHVybnM6ICVUUlVFIGlmIHRoZSBAaXRlbSBpcyBzZWxlY3Rl
ZCBvciAlRkFMU0Ugb3RoZXJ3aXNlLgorICoKKyAqIFNpbmNlOiAyLjE4CisgKi8KK2dib29sZWFu
IHdlYmtpdF9vcHRpb25fbWVudV9pdGVtX2lzX3NlbGVjdGVkKFdlYktpdE9wdGlvbk1lbnVJdGVt
KiBpdGVtKQoreworICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsKGl0ZW0sIEZBTFNFKTsKKworICAg
IHJldHVybiBpdGVtLT5pc1NlbGVjdGVkOworfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIv
VUlQcm9jZXNzL0FQSS9ndGsvV2ViS2l0T3B0aW9uTWVudUl0ZW0uaCBiL1NvdXJjZS9XZWJLaXQy
L1VJUHJvY2Vzcy9BUEkvZ3RrL1dlYktpdE9wdGlvbk1lbnVJdGVtLmgKbmV3IGZpbGUgbW9kZSAx
MDA2NDQKaW5kZXggMDAwMDAwMDAwMDAuLmRlZDI2ZjFlOWUwCi0tLSAvZGV2L251bGwKKysrIGIv
U291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvV2ViS2l0T3B0aW9uTWVudUl0ZW0uaApA
QCAtMCwwICsxLDY1IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE3IElnYWxpYSBTLkwuCisg
KgorICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRl
IGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJh
cnkgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNv
ZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBv
ciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgbGlicmFy
eSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICog
YnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFu
dHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVS
UE9TRS4gIFNlZSB0aGUgR05VCisgKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9y
IG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9m
IHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRo
aXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bwor
ICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0
LCBGaWZ0aCBGbG9vciwKKyAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgorICovCisKKyNp
ZiAhZGVmaW5lZChfX1dFQktJVDJfSF9JTlNJREVfXykgJiYgIWRlZmluZWQoV0VCS0lUMl9DT01Q
SUxBVElPTikKKyNlcnJvciAiT25seSA8d2Via2l0Mi93ZWJraXQyLmg+IGNhbiBiZSBpbmNsdWRl
ZCBkaXJlY3RseS4iCisjZW5kaWYKKworI2lmbmRlZiBXZWJLaXRPcHRpb25NZW51SXRlbV9oCisj
ZGVmaW5lIFdlYktpdE9wdGlvbk1lbnVJdGVtX2gKKworI2luY2x1ZGUgPGdsaWItb2JqZWN0Lmg+
CisjaW5jbHVkZSA8d2Via2l0Mi9XZWJLaXREZWZpbmVzLmg+CisKK0dfQkVHSU5fREVDTFMKKwor
I2RlZmluZSBXRUJLSVRfVFlQRV9PUFRJT05fTUVOVV9JVEVNICh3ZWJraXRfb3B0aW9uX21lbnVf
aXRlbV9nZXRfdHlwZSgpKQorCit0eXBlZGVmIHN0cnVjdCBfV2ViS2l0T3B0aW9uTWVudUl0ZW0g
V2ViS2l0T3B0aW9uTWVudUl0ZW07CisKK1dFQktJVF9BUEkgR1R5cGUKK3dlYmtpdF9vcHRpb25f
bWVudV9pdGVtX2dldF90eXBlICAgICAgICh2b2lkKTsKKworV0VCS0lUX0FQSSBXZWJLaXRPcHRp
b25NZW51SXRlbSAqCit3ZWJraXRfb3B0aW9uX21lbnVfaXRlbV9jb3B5ICAgICAgICAgICAoV2Vi
S2l0T3B0aW9uTWVudUl0ZW0gKml0ZW0pOworCitXRUJLSVRfQVBJIHZvaWQKK3dlYmtpdF9vcHRp
b25fbWVudV9pdGVtX2ZyZWUgICAgICAgICAgIChXZWJLaXRPcHRpb25NZW51SXRlbSAqaXRlbSk7
CisKK1dFQktJVF9BUEkgY29uc3QgZ2NoYXIgKgord2Via2l0X29wdGlvbl9tZW51X2l0ZW1fZ2V0
X2xhYmVsICAgICAgKFdlYktpdE9wdGlvbk1lbnVJdGVtICppdGVtKTsKKworV0VCS0lUX0FQSSBj
b25zdCBnY2hhciAqCit3ZWJraXRfb3B0aW9uX21lbnVfaXRlbV9nZXRfdG9vbHRpcCAgICAoV2Vi
S2l0T3B0aW9uTWVudUl0ZW0gKml0ZW0pOworCitXRUJLSVRfQVBJIGdib29sZWFuCit3ZWJraXRf
b3B0aW9uX21lbnVfaXRlbV9pc19ncm91cF9sYWJlbCAoV2ViS2l0T3B0aW9uTWVudUl0ZW0gKml0
ZW0pOworCitXRUJLSVRfQVBJIGdib29sZWFuCit3ZWJraXRfb3B0aW9uX21lbnVfaXRlbV9pc19n
cm91cF9jaGlsZCAoV2ViS2l0T3B0aW9uTWVudUl0ZW0gKml0ZW0pOworCitXRUJLSVRfQVBJIGdi
b29sZWFuCit3ZWJraXRfb3B0aW9uX21lbnVfaXRlbV9pc19lbmFibGVkICAgICAoV2ViS2l0T3B0
aW9uTWVudUl0ZW0gKml0ZW0pOworCitXRUJLSVRfQVBJIGdib29sZWFuCit3ZWJraXRfb3B0aW9u
X21lbnVfaXRlbV9pc19zZWxlY3RlZCAgICAoV2ViS2l0T3B0aW9uTWVudUl0ZW0gKml0ZW0pOwor
CitHX0VORF9ERUNMUworCisjZW5kaWYKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1VJUHJv
Y2Vzcy9BUEkvZ3RrL1dlYktpdE9wdGlvbk1lbnVJdGVtUHJpdmF0ZS5oIGIvU291cmNlL1dlYktp
dDIvVUlQcm9jZXNzL0FQSS9ndGsvV2ViS2l0T3B0aW9uTWVudUl0ZW1Qcml2YXRlLmgKbmV3IGZp
bGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAuLmI1ODVlN2I2MmJhCi0tLSAvZGV2L251
bGwKKysrIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvV2ViS2l0T3B0aW9uTWVu
dUl0ZW1Qcml2YXRlLmgKQEAgLTAsMCArMSw1NSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAx
NyBJZ2FsaWEgUy5MLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3Ug
Y2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMg
b2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlIGFzIHB1Ymxpc2hl
ZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqIHZlcnNpb24gMiBv
ZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAq
CisgKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxs
IGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRo
ZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1Ig
QSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogTGlicmFyeSBHZW5lcmFsIFB1
YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJl
Y2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQor
ICogYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElm
IG5vdCwgd3JpdGUgdG8KKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUx
IEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCisgKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEs
IFVTQS4KKyAqLworCisjcHJhZ21hIG9uY2UKKworI2luY2x1ZGUgIldlYktpdE9wdGlvbk1lbnVJ
dGVtLmgiCisjaW5jbHVkZSAiV2ViUG9wdXBJdGVtLmgiCisjaW5jbHVkZSA8d3RmL3RleHQvQ1N0
cmluZy5oPgorCitzdHJ1Y3QgX1dlYktpdE9wdGlvbk1lbnVJdGVtIHsKKyAgICBfV2ViS2l0T3B0
aW9uTWVudUl0ZW0oKSA9IGRlZmF1bHQ7CisKKyAgICBfV2ViS2l0T3B0aW9uTWVudUl0ZW0oY29u
c3QgV2ViS2l0OjpXZWJQb3B1cEl0ZW0mIGl0ZW0pCisgICAgICAgIDogbGFiZWwoaXRlbS5tX3Rl
eHQuc3RyaXBXaGl0ZVNwYWNlKCkudXRmOCgpKQorICAgICAgICAsIGlzR3JvdXBMYWJlbChpdGVt
Lm1faXNMYWJlbCkKKyAgICAgICAgLCBpc0dyb3VwQ2hpbGQoaXRlbS5tX3RleHQuc3RhcnRzV2l0
aCgiICAgICIpKQorICAgICAgICAsIGlzRW5hYmxlZChpdGVtLm1faXNFbmFibGVkKQorICAgIHsK
KyAgICAgICAgaWYgKCFpdGVtLm1fdG9vbFRpcC5pc0VtcHR5KCkpCisgICAgICAgICAgICB0b29s
dGlwID0gaXRlbS5tX3Rvb2xUaXAudXRmOCgpOworICAgIH0KKworICAgIGV4cGxpY2l0IF9XZWJL
aXRPcHRpb25NZW51SXRlbShfV2ViS2l0T3B0aW9uTWVudUl0ZW0qIG90aGVyKQorICAgICAgICA6
IGxhYmVsKG90aGVyLT5sYWJlbCkKKyAgICAgICAgLCB0b29sdGlwKG90aGVyLT50b29sdGlwKQor
ICAgICAgICAsIGlzR3JvdXBMYWJlbChvdGhlci0+aXNHcm91cExhYmVsKQorICAgICAgICAsIGlz
R3JvdXBDaGlsZChvdGhlci0+aXNHcm91cENoaWxkKQorICAgICAgICAsIGlzRW5hYmxlZChvdGhl
ci0+aXNFbmFibGVkKQorICAgICAgICAsIGlzU2VsZWN0ZWQob3RoZXItPmlzU2VsZWN0ZWQpCisg
ICAgeworICAgIH0KKworICAgIENTdHJpbmcgbGFiZWw7CisgICAgQ1N0cmluZyB0b29sdGlwOwor
ICAgIGJvb2wgaXNHcm91cExhYmVsIHsgZmFsc2UgfTsKKyAgICBib29sIGlzR3JvdXBDaGlsZCB7
IGZhbHNlIH07CisgICAgYm9vbCBpc0VuYWJsZWQgeyB0cnVlIH07CisgICAgYm9vbCBpc1NlbGVj
dGVkIHsgZmFsc2UgfTsKK307CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3Mv
QVBJL2d0ay9XZWJLaXRPcHRpb25NZW51UHJpdmF0ZS5oIGIvU291cmNlL1dlYktpdDIvVUlQcm9j
ZXNzL0FQSS9ndGsvV2ViS2l0T3B0aW9uTWVudVByaXZhdGUuaApuZXcgZmlsZSBtb2RlIDEwMDY0
NAppbmRleCAwMDAwMDAwMDAwMC4uMmQ0YjhjNmE0NWMKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3Vy
Y2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay9XZWJLaXRPcHRpb25NZW51UHJpdmF0ZS5oCkBA
IC0wLDAgKzEsMjUgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTcgSWdhbGlhIFMuTC4KKyAq
CisgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUg
aXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFy
eSBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29m
dHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9y
IChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBsaWJyYXJ5
IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBi
dXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50
eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQ
T1NFLiAgU2VlIHRoZSBHTlUKKyAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3Ig
bW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2Yg
dGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhp
cyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCisg
KiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQs
IEZpZnRoIEZsb29yLAorICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisgKi8KKworI3By
YWdtYSBvbmNlCisKKyNpbmNsdWRlICJXZWJLaXRPcHRpb25NZW51LmgiCisjaW5jbHVkZSAiV2Vi
S2l0UG9wdXBNZW51LmgiCisKK1dlYktpdE9wdGlvbk1lbnUqIHdlYmtpdE9wdGlvbk1lbnVDcmVh
dGUoV2ViS2l0OjpXZWJLaXRQb3B1cE1lbnUmLCBjb25zdCBWZWN0b3I8V2ViS2l0OjpXZWJQb3B1
cEl0ZW0+JiwgaW50MzJfdCBzZWxlY3RlZEluZGV4KTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJL
aXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL1dlYktpdFBvcHVwTWVudS5jcHAgYi9Tb3VyY2UvV2ViS2l0
Mi9VSVByb2Nlc3MvQVBJL2d0ay9XZWJLaXRQb3B1cE1lbnUuY3BwCm5ldyBmaWxlIG1vZGUgMTAw
NjQ0CmluZGV4IDAwMDAwMDAwMDAwLi5jNGQ4YTY3ZDZhMgotLS0gL2Rldi9udWxsCisrKyBiL1Nv
dXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL1dlYktpdFBvcHVwTWVudS5jcHAKQEAgLTAs
MCArMSw4OSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNyBJZ2FsaWEgUy5MLgorICoKKyAq
IFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBh
bmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdl
bmVyYWwgUHVibGljCisgKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2Fy
ZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0
IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMg
ZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBX
SVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9m
CisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0Uu
ICBTZWUgdGhlIEdOVQorICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3Jl
IGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUg
R05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIGxp
YnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KKyAqIHRo
ZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlm
dGggRmxvb3IsCisgKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKyAqLworCisjaW5jbHVk
ZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiV2ViS2l0UG9wdXBNZW51LmgiCisKKyNpbmNsdWRlICJO
YXRpdmVXZWJNb3VzZUV2ZW50LmgiCisjaW5jbHVkZSAiV2ViS2l0T3B0aW9uTWVudVByaXZhdGUu
aCIKKyNpbmNsdWRlICJXZWJLaXRXZWJWaWV3UHJpdmF0ZS5oIgorCit1c2luZyBuYW1lc3BhY2Ug
V2ViQ29yZTsKKworbmFtZXNwYWNlIFdlYktpdCB7CisKK1dlYktpdFBvcHVwTWVudTo6V2ViS2l0
UG9wdXBNZW51KEd0a1dpZGdldCogd2ViVmlldywgV2ViUG9wdXBNZW51UHJveHk6OkNsaWVudCYg
Y2xpZW50KQorICAgIDogV2ViUG9wdXBNZW51UHJveHlHdGsod2ViVmlldywgY2xpZW50KQorewor
fQorCitzdGF0aWMgdm9pZCBtZW51Q2xvc2VDYWxsYmFjayhXZWJLaXRQb3B1cE1lbnUqIHBvcHVw
TWVudSkKK3sKKyAgICBwb3B1cE1lbnUtPmFjdGl2YXRlSXRlbSgtMSk7Cit9CisKK3ZvaWQgV2Vi
S2l0UG9wdXBNZW51OjpzaG93UG9wdXBNZW51KGNvbnN0IEludFJlY3QmIHJlY3QsIFRleHREaXJl
Y3Rpb24gZGlyZWN0aW9uLCBkb3VibGUgcGFnZVNjYWxlRmFjdG9yLCBjb25zdCBWZWN0b3I8V2Vi
UG9wdXBJdGVtPiYgaXRlbXMsIGNvbnN0IFBsYXRmb3JtUG9wdXBNZW51RGF0YSYgcGxhdGZvcm1E
YXRhLCBpbnQzMl90IHNlbGVjdGVkSW5kZXgpCit7CisgICAgR1JlZlB0cjxXZWJLaXRPcHRpb25N
ZW51PiBtZW51ID0gYWRvcHRHUmVmKHdlYmtpdE9wdGlvbk1lbnVDcmVhdGUoKnRoaXMsIGl0ZW1z
LCBzZWxlY3RlZEluZGV4KSk7CisgICAgY29uc3QgR2RrRXZlbnQqIGV2ZW50ID0gbV9jbGllbnQt
PmN1cnJlbnRseVByb2Nlc3NlZE1vdXNlRG93bkV2ZW50KCkgPyBtX2NsaWVudC0+Y3VycmVudGx5
UHJvY2Vzc2VkTW91c2VEb3duRXZlbnQoKS0+bmF0aXZlRXZlbnQoKSA6IG51bGxwdHI7CisgICAg
aWYgKHdlYmtpdFdlYlZpZXdTaG93T3B0aW9uTWVudShXRUJLSVRfV0VCX1ZJRVcobV93ZWJWaWV3
KSwgcmVjdCwgbWVudS5nZXQoKSwgZXZlbnQpKSB7CisgICAgICAgIG1fbWVudSA9IFdURk1vdmUo
bWVudSk7CisgICAgICAgIGdfc2lnbmFsX2Nvbm5lY3Rfc3dhcHBlZChtX21lbnUuZ2V0KCksICJj
bG9zZSIsIEdfQ0FMTEJBQ0sobWVudUNsb3NlQ2FsbGJhY2spLCB0aGlzKTsKKyAgICB9IGVsc2UK
KyAgICAgICAgV2ViUG9wdXBNZW51UHJveHlHdGs6OnNob3dQb3B1cE1lbnUocmVjdCwgZGlyZWN0
aW9uLCBwYWdlU2NhbGVGYWN0b3IsIGl0ZW1zLCBwbGF0Zm9ybURhdGEsIHNlbGVjdGVkSW5kZXgp
OworfQorCit2b2lkIFdlYktpdFBvcHVwTWVudTo6aGlkZVBvcHVwTWVudSgpCit7CisgICAgaWYg
KCFtX21lbnUpIHsKKyAgICAgICAgV2ViUG9wdXBNZW51UHJveHlHdGs6OmhpZGVQb3B1cE1lbnUo
KTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICBnX3NpZ25hbF9oYW5kbGVyc19kaXNjb25u
ZWN0X21hdGNoZWQobV9tZW51LmdldCgpLCBHX1NJR05BTF9NQVRDSF9EQVRBLCAwLCAwLCBudWxs
cHRyLCBudWxscHRyLCB0aGlzKTsKKyAgICB3ZWJraXRfb3B0aW9uX21lbnVfY2xvc2UobV9tZW51
LmdldCgpKTsKK30KKwordm9pZCBXZWJLaXRQb3B1cE1lbnU6OmNhbmNlbFRyYWNraW5nKCkKK3sK
KyAgICBpZiAoIW1fbWVudSkgeworICAgICAgICBXZWJQb3B1cE1lbnVQcm94eUd0azo6Y2FuY2Vs
VHJhY2tpbmcoKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICBoaWRlUG9wdXBNZW51KCk7
CisgICAgbV9tZW51ID0gbnVsbHB0cjsKK30KKwordm9pZCBXZWJLaXRQb3B1cE1lbnU6OnNlbGVj
dEl0ZW0odW5zaWduZWQgaXRlbUluZGV4KQoreworICAgIGlmICghbV9tZW51KQorICAgICAgICBy
ZXR1cm47CisgICAgbV9jbGllbnQtPnNldFRleHRGcm9tSXRlbUZvclBvcHVwTWVudSh0aGlzLCBp
dGVtSW5kZXgpOworICAgIG1fc2VsZWN0ZWRJdGVtID0gaXRlbUluZGV4OworfQorCit2b2lkIFdl
YktpdFBvcHVwTWVudTo6YWN0aXZhdGVJdGVtKGludDMyX3QgaXRlbUluZGV4KQoreworICAgIGlm
ICghbV9tZW51KQorICAgICAgICByZXR1cm47CisgICAgbV9jbGllbnQtPnZhbHVlQ2hhbmdlZEZv
clBvcHVwTWVudSh0aGlzLCBpdGVtSW5kZXggPT0gLTEgPyBtX3NlbGVjdGVkSXRlbS52YWx1ZV9v
cigtMSkgOiBpdGVtSW5kZXgpOworICAgIGdfc2lnbmFsX2hhbmRsZXJzX2Rpc2Nvbm5lY3RfbWF0
Y2hlZChtX21lbnUuZ2V0KCksIEdfU0lHTkFMX01BVENIX0RBVEEsIDAsIDAsIG51bGxwdHIsIG51
bGxwdHIsIHRoaXMpOworICAgIG1fbWVudSA9IG51bGxwdHI7Cit9CisKK30gLy8gbmFtZXNwYWNl
IFdlYktpdApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvV2Vi
S2l0UG9wdXBNZW51LmggYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay9XZWJLaXRQ
b3B1cE1lbnUuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMC4uYTQ4YzE3
ZWRkYTMKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0
ay9XZWJLaXRQb3B1cE1lbnUuaApAQCAtMCwwICsxLDUxIEBACisvKgorICogQ29weXJpZ2h0IChD
KSAyMDE3IElnYWxpYSBTLkwuCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7
IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0
ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgYXMgcHVi
bGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICogdmVyc2lv
biAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9u
LgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0
IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2
ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNT
IEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiBMaWJyYXJ5IEdlbmVy
YWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhh
dmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNl
bnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElC
LiAgSWYgbm90LCB3cml0ZSB0bworICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5j
LiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKKyAqIEJvc3RvbiwgTUEgMDIxMTAt
MTMwMSwgVVNBLgorICovCisKKyNwcmFnbWEgb25jZQorCisjaW5jbHVkZSAiV2ViUG9wdXBNZW51
UHJveHlHdGsuaCIKKyNpbmNsdWRlIDx3dGYvZ2xpYi9HUmVmUHRyLmg+CisKK3R5cGVkZWYgc3Ry
dWN0IF9XZWJLaXRPcHRpb25NZW51IFdlYktpdE9wdGlvbk1lbnU7CisKK25hbWVzcGFjZSBXZWJL
aXQgeworCitjbGFzcyBXZWJLaXRQb3B1cE1lbnUgZmluYWwgOiBwdWJsaWMgV2ViUG9wdXBNZW51
UHJveHlHdGsgeworcHVibGljOgorICAgIHN0YXRpYyBSZWY8V2ViS2l0UG9wdXBNZW51PiBjcmVh
dGUoR3RrV2lkZ2V0KiB3ZWJWaWV3LCBXZWJQb3B1cE1lbnVQcm94eTo6Q2xpZW50JiBjbGllbnQp
CisgICAgeworICAgICAgICByZXR1cm4gYWRvcHRSZWYoKm5ldyBXZWJLaXRQb3B1cE1lbnUod2Vi
VmlldywgY2xpZW50KSk7CisgICAgfQorICAgIH5XZWJLaXRQb3B1cE1lbnUoKSA9IGRlZmF1bHQ7
CisKKyAgICB2b2lkIHNlbGVjdEl0ZW0odW5zaWduZWQpOworICAgIHZvaWQgYWN0aXZhdGVJdGVt
KGludDMyX3QpOworCitwcml2YXRlOgorICAgIFdlYktpdFBvcHVwTWVudShHdGtXaWRnZXQqLCBX
ZWJQb3B1cE1lbnVQcm94eTo6Q2xpZW50Jik7CisKKyAgICB2b2lkIHNob3dQb3B1cE1lbnUoY29u
c3QgV2ViQ29yZTo6SW50UmVjdCYsIFdlYkNvcmU6OlRleHREaXJlY3Rpb24sIGRvdWJsZSBwYWdl
U2NhbGVGYWN0b3IsIGNvbnN0IFZlY3RvcjxXZWJQb3B1cEl0ZW0+JiwgY29uc3QgUGxhdGZvcm1Q
b3B1cE1lbnVEYXRhJiwgaW50MzJfdCBzZWxlY3RlZEluZGV4KSBvdmVycmlkZTsKKyAgICB2b2lk
IGhpZGVQb3B1cE1lbnUoKSBvdmVycmlkZTsKKyAgICB2b2lkIGNhbmNlbFRyYWNraW5nKCkgb3Zl
cnJpZGU7CisKKyAgICBHUmVmUHRyPFdlYktpdE9wdGlvbk1lbnU+IG1fbWVudTsKKyAgICBzdGQ6
Om9wdGlvbmFsPHVuc2lnbmVkPiBtX3NlbGVjdGVkSXRlbTsKK307CisKK30gLy8gbmFtZXNwYWNl
IFdlYktpdApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvV2Vi
S2l0V2ViVmlldy5jcHAgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay9XZWJLaXRX
ZWJWaWV3LmNwcAppbmRleCBjOGIxODcyMTE0NC4uZDk5YmVhYTQ2YzAgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL1dlYktpdFdlYlZpZXcuY3BwCisrKyBiL1Nv
dXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL1dlYktpdFdlYlZpZXcuY3BwCkBAIC0xMzks
NiArMTM5LDggQEAgZW51bSB7CiAKICAgICBSVU5fQ09MT1JfQ0hPT1NFUiwKIAorICAgIFNIT1df
T1BUSU9OX01FTlUsCisKICAgICBMQVNUX1NJR05BTAogfTsKIApAQCAtMTg4Myw2ICsxODg1LDQw
IEBAIHN0YXRpYyB2b2lkIHdlYmtpdF93ZWJfdmlld19jbGFzc19pbml0KFdlYktpdFdlYlZpZXdD
bGFzcyogd2ViVmlld0NsYXNzKQogICAgICAgICAgICAgd2Via2l0X21hcnNoYWxfQk9PTEVBTl9f
T0JKRUNULAogICAgICAgICAgICAgR19UWVBFX0JPT0xFQU4sIDEsCiAgICAgICAgICAgICBXRUJL
SVRfVFlQRV9DT0xPUl9DSE9PU0VSX1JFUVVFU1QpOworCisgICAgLyoqCisgICAgICogV2ViS2l0
V2ViVmlldzo6c2hvdy1vcHRpb24tbWVudToKKyAgICAgKiBAd2ViX3ZpZXc6IHRoZSAjV2ViS2l0
V2ViVmlldyBvbiB3aGljaCB0aGUgc2lnbmFsIGlzIGVtaXR0ZWQKKyAgICAgKiBAbWVudTogdGhl
ICNXZWJLaXRPcHRpb25NZW51CisgICAgICogQGV2ZW50OiB0aGUgI0dka0V2ZW50IHRoYXQgdHJp
Z2dlcmVkIHRoZSBtZW51LCBvciAlTlVMTAorICAgICAqIEByZWN0YW5nbGU6IHRoZSBvcHRpb24g
ZWxlbWVudCBhcmVhCisgICAgICoKKyAgICAgKiBUaGlzIHNpZ25hbCBpcyBlbWl0dGVkIHdoZW4g
YSBzZWxlY3QgZWxlbWVudCBpbiBAd2ViX3ZpZXcgbmVlZHMgdG8gZGlzcGxheSBhCisgICAgICog
ZHJvcGRvd24gbWVudS4gVGhpcyBzaWduYWwgY2FuIGJlIHVzZWQgdG8gc2hvdyBhIGN1c3RvbSBt
ZW51LCB1c2luZyBAbWVudSB0byBnZXQKKyAgICAgKiB0aGUgZGV0YWlscyBvZiBhbGwgaXRlbXMg
dGhhdCBzaG91bGQgYmUgZGlzcGxheWVkLiBUaGUgYXJlYSBvZiB0aGUgZWxlbWVudCBpbiB0aGUK
KyAgICAgKiAjV2ViS2l0V2ViVmlldyBpcyBnaXZlbiBhcyBAcmVjdGFuZ2xlIHBhcmFtZXRlciwg
aXQgY2FuIGJlIHVzZWQgdG8gcG9zaXRpb24gdGhlCisgICAgICogbWVudS4gSWYgdGhpcyB3YXMg
dHJpZ2dlcmVkIGJ5IGEgdXNlciBpbnRlcmFjdGlvbiwgbGlrZSBhIG1vdXNlIGNsaWNrLAorICAg
ICAqIEBldmVudCBwYXJhbWV0ZXIgcHJvdmlkZXMgdGhlICNHZGtFdmVudC4KKyAgICAgKiBUbyBo
YW5kbGUgdGhpcyBzaWduYWwgYXN5bmNocm9ub3VzbHkgeW91IHNob3VsZCBrZWVwIGEgcmVmIG9m
IHRoZSBAbWVudS4KKyAgICAgKgorICAgICAqIFRoZSBkZWZhdWx0IHNpZ25hbCBoYW5kbGVyIHdp
bGwgcG9wIHVwIGEgI0d0a01lbnUuCisgICAgICoKKyAgICAgKiBSZXR1cm5zOiAlVFJVRSB0byBz
dG9wIG90aGVyIGhhbmRsZXJzIGZyb20gYmVpbmcgaW52b2tlZCBmb3IgdGhlIGV2ZW50LgorICAg
ICAqICAgJUZBTFNFIHRvIHByb3BhZ2F0ZSB0aGUgZXZlbnQgZnVydGhlci4KKyAgICAgKgorICAg
ICAqIFNpbmNlOiAyLjE4LgorICAgICAqLworICAgIHNpZ25hbHNbU0hPV19PUFRJT05fTUVOVV0g
PQorICAgICAgICBnX3NpZ25hbF9uZXcoInNob3ctb3B0aW9uLW1lbnUiLAorICAgICAgICAgICAg
R19UWVBFX0ZST01fQ0xBU1Mod2ViVmlld0NsYXNzKSwKKyAgICAgICAgICAgIEdfU0lHTkFMX1JV
Tl9MQVNULAorICAgICAgICAgICAgR19TVFJVQ1RfT0ZGU0VUKFdlYktpdFdlYlZpZXdDbGFzcywg
c2hvd19vcHRpb25fbWVudSksCisgICAgICAgICAgICBnX3NpZ25hbF9hY2N1bXVsYXRvcl90cnVl
X2hhbmRsZWQsIG51bGxwdHIsCisgICAgICAgICAgICBnX2NjbG9zdXJlX21hcnNoYWxfZ2VuZXJp
YywKKyAgICAgICAgICAgIEdfVFlQRV9CT09MRUFOLCAzLAorICAgICAgICAgICAgV0VCS0lUX1RZ
UEVfT1BUSU9OX01FTlUsCisgICAgICAgICAgICBHREtfVFlQRV9FVkVOVCB8IEdfU0lHTkFMX1RZ
UEVfU1RBVElDX1NDT1BFLAorICAgICAgICAgICAgR0RLX1RZUEVfUkVDVEFOR0xFIHwgR19TSUdO
QUxfVFlQRV9TVEFUSUNfU0NPUEUpOwogfQogCiBzdGF0aWMgdm9pZCB3ZWJraXRXZWJWaWV3Q2Fu
Y2VsQXV0aGVudGljYXRpb25SZXF1ZXN0KFdlYktpdFdlYlZpZXcqIHdlYlZpZXcpCkBAIC0yMTg5
LDYgKzIyMjUsMTQgQEAgV2ViS2l0V2Vic2l0ZURhdGFNYW5hZ2VyKiB3ZWJraXRXZWJWaWV3R2V0
V2Vic2l0ZURhdGFNYW5hZ2VyKFdlYktpdFdlYlZpZXcqIHdlYlYKICAgICByZXR1cm4gd2ViVmll
dy0+cHJpdi0+d2Vic2l0ZURhdGFNYW5hZ2VyLmdldCgpOwogfQogCitib29sIHdlYmtpdFdlYlZp
ZXdTaG93T3B0aW9uTWVudShXZWJLaXRXZWJWaWV3KiB3ZWJWaWV3LCBjb25zdCBJbnRSZWN0JiBy
ZWN0LCBXZWJLaXRPcHRpb25NZW51KiBtZW51LCBjb25zdCBHZGtFdmVudCogZXZlbnQpCit7Cisg
ICAgR2RrUmVjdGFuZ2xlIG1lbnVSZWN0ID0gcmVjdDsKKyAgICBnYm9vbGVhbiBoYW5kbGVkOwor
ICAgIGdfc2lnbmFsX2VtaXQod2ViVmlldywgc2lnbmFsc1tTSE9XX09QVElPTl9NRU5VXSwgMCwg
bWVudSwgZXZlbnQsICZtZW51UmVjdCwgJmhhbmRsZWQpOworICAgIHJldHVybiBoYW5kbGVkOwor
fQorCiAvKioKICAqIHdlYmtpdF93ZWJfdmlld19uZXc6CiAgKgpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvV2ViS2l0V2ViVmlldy5oIGIvU291cmNlL1dlYktp
dDIvVUlQcm9jZXNzL0FQSS9ndGsvV2ViS2l0V2ViVmlldy5oCmluZGV4IDRjM2JjNmE3Y2ZlLi4y
NmQyMWYwOWM2ZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsv
V2ViS2l0V2ViVmlldy5oCisrKyBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL1dl
YktpdFdlYlZpZXcuaApAQCAtNDIsNiArNDIsNyBAQAogI2luY2x1ZGUgPHdlYmtpdDIvV2ViS2l0
SmF2YXNjcmlwdFJlc3VsdC5oPgogI2luY2x1ZGUgPHdlYmtpdDIvV2ViS2l0TmF2aWdhdGlvbkFj
dGlvbi5oPgogI2luY2x1ZGUgPHdlYmtpdDIvV2ViS2l0Tm90aWZpY2F0aW9uLmg+CisjaW5jbHVk
ZSA8d2Via2l0Mi9XZWJLaXRPcHRpb25NZW51Lmg+CiAjaW5jbHVkZSA8d2Via2l0Mi9XZWJLaXRQ
ZXJtaXNzaW9uUmVxdWVzdC5oPgogI2luY2x1ZGUgPHdlYmtpdDIvV2ViS2l0UG9saWN5RGVjaXNp
b24uaD4KICNpbmNsdWRlIDx3ZWJraXQyL1dlYktpdFNjcmlwdERpYWxvZy5oPgpAQCAtMjQ5LDEx
ICsyNTAsMTMgQEAgc3RydWN0IF9XZWJLaXRXZWJWaWV3Q2xhc3MgewogICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgV2ViS2l0Tm90aWZpY2F0aW9uICAgICAg
ICAgICpub3RpZmljYXRpb24pOwogICAgIGdib29sZWFuICAgKCogcnVuX2NvbG9yX2Nob29zZXIp
ICAgICAgICAgICAoV2ViS2l0V2ViVmlldyAgICAgICAgICAgICAgICp3ZWJfdmlldywKICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFdlYktpdENvbG9yQ2hv
b3NlclJlcXVlc3QgICAqcmVxdWVzdCk7CisgICAgZ2Jvb2xlYW4gICAoKiBzaG93X29wdGlvbl9t
ZW51KSAgICAgICAgICAgIChXZWJLaXRXZWJWaWV3ICAgICAgICAgICAgICAgKndlYl92aWV3LAor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR2RrUmVjdGFu
Z2xlICAgICAgICAgICAgICAgICpyZWN0YW5nbGUsCisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBXZWJLaXRPcHRpb25NZW51ICAgICAgICAgICAgKm1lbnUp
OwogCiAgICAgdm9pZCAoKl93ZWJraXRfcmVzZXJ2ZWQwKSAodm9pZCk7CiAgICAgdm9pZCAoKl93
ZWJraXRfcmVzZXJ2ZWQxKSAodm9pZCk7CiAgICAgdm9pZCAoKl93ZWJraXRfcmVzZXJ2ZWQyKSAo
dm9pZCk7Ci0gICAgdm9pZCAoKl93ZWJraXRfcmVzZXJ2ZWQzKSAodm9pZCk7CiB9OwogCiBXRUJL
SVRfQVBJIEdUeXBlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0
ay9XZWJLaXRXZWJWaWV3UHJpdmF0ZS5oIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9n
dGsvV2ViS2l0V2ViVmlld1ByaXZhdGUuaAppbmRleCAyNDBkNzMwODg0OS4uODA2N2U0MTI1ZjUg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL1dlYktpdFdlYlZp
ZXdQcml2YXRlLmgKKysrIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvV2ViS2l0
V2ViVmlld1ByaXZhdGUuaApAQCAtMzEsNyArMzEsOSBAQAogI2luY2x1ZGUgIldlYkNvbnRleHRN
ZW51SXRlbURhdGEuaCIKICNpbmNsdWRlICJXZWJIaXRUZXN0UmVzdWx0RGF0YS5oIgogI2luY2x1
ZGUgIldlYkltYWdlLmgiCisjaW5jbHVkZSAiV2ViS2l0UHJpdmF0ZS5oIgogI2luY2x1ZGUgIldl
YktpdFdlYlZpZXcuaCIKKyNpbmNsdWRlIDxXZWJDb3JlL0ludFJlY3QuaD4KICNpbmNsdWRlIDx3
dGYvdGV4dC9DU3RyaW5nLmg+CiAKIHZvaWQgd2Via2l0V2ViVmlld0xvYWRDaGFuZ2VkKFdlYktp
dFdlYlZpZXcqLCBXZWJLaXRMb2FkRXZlbnQpOwpAQCAtNjcsNSArNjksNiBAQCB2b2lkIHdlYmtp
dFdlYlZpZXdJc1BsYXlpbmdBdWRpb0NoYW5nZWQoV2ViS2l0V2ViVmlldyopOwogdm9pZCB3ZWJr
aXRXZWJWaWV3U2VsZWN0aW9uRGlkQ2hhbmdlKFdlYktpdFdlYlZpZXcqKTsKIHZvaWQgd2Via2l0
V2ViVmlld1JlcXVlc3RJbnN0YWxsTWlzc2luZ01lZGlhUGx1Z2lucyhXZWJLaXRXZWJWaWV3Kiwg
V2ViS2l0OjpJbnN0YWxsTWlzc2luZ01lZGlhUGx1Z2luc1Blcm1pc3Npb25SZXF1ZXN0Jik7CiBX
ZWJLaXRXZWJzaXRlRGF0YU1hbmFnZXIqIHdlYmtpdFdlYlZpZXdHZXRXZWJzaXRlRGF0YU1hbmFn
ZXIoV2ViS2l0V2ViVmlldyopOworYm9vbCB3ZWJraXRXZWJWaWV3U2hvd09wdGlvbk1lbnUoV2Vi
S2l0V2ViVmlldyosIGNvbnN0IFdlYkNvcmU6OkludFJlY3QmLCBXZWJLaXRPcHRpb25NZW51Kiwg
Y29uc3QgR2RrRXZlbnQqKTsKIAogI2VuZGlmIC8vIFdlYktpdFdlYlZpZXdQcml2YXRlX2gKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL2RvY3Mvd2Via2l0Mmd0
ay00LjAtc2VjdGlvbnMudHh0IGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvZG9j
cy93ZWJraXQyZ3RrLTQuMC1zZWN0aW9ucy50eHQKaW5kZXggMmEyZTJiNWQ0OTguLmMyYjBhMmQw
MGQ5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay9kb2NzL3dl
YmtpdDJndGstNC4wLXNlY3Rpb25zLnR4dAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3Mv
QVBJL2d0ay9kb2NzL3dlYmtpdDJndGstNC4wLXNlY3Rpb25zLnR4dApAQCAtMTE3Niw2ICsxMTc2
LDQ4IEBAIHdlYmtpdF9jb250ZXh0X21lbnVfaXRlbV9nZXRfdHlwZQogPC9TRUNUSU9OPgogCiA8
U0VDVElPTj4KKzxGSUxFPldlYktpdE9wdGlvbk1lbnU8L0ZJTEU+CitXZWJLaXRPcHRpb25NZW51
Cit3ZWJraXRfb3B0aW9uX21lbnVfZ2V0X25faXRlbXMKK3dlYmtpdF9vcHRpb25fbWVudV9nZXRf
aXRlbQord2Via2l0X29wdGlvbl9tZW51X3NlbGVjdF9pdGVtCit3ZWJraXRfb3B0aW9uX21lbnVf
YWN0aXZhdGVfaXRlbQord2Via2l0X29wdGlvbl9tZW51X2Nsb3NlCisKKzxTVUJTRUNUSU9OIFN0
YW5kYXJkPgorV2ViS2l0T3B0aW9uTWVudUNsYXNzCitXRUJLSVRfVFlQRV9PUFRJT05fTUVOVQor
V0VCS0lUX09QVElPTl9NRU5VCitXRUJLSVRfSVNfT1BUSU9OX01FTlUKK1dFQktJVF9PUFRJT05f
TUVOVV9DTEFTUworV0VCS0lUX0lTX09QVElPTl9NRU5VX0NMQVNTCitXRUJLSVRfT1BUSU9OX01F
TlVfR0VUX0NMQVNTCisKKzxTVUJTRUNUSU9OIFByaXZhdGU+CitXZWJLaXRPcHRpb25NZW51UHJp
dmF0ZQord2Via2l0X29wdGlvbl9tZW51X2dldF90eXBlCis8L1NFQ1RJT04+CisKKzxTRUNUSU9O
PgorPEZJTEU+V2ViS2l0T3B0aW9uTWVudUl0ZW08L0ZJTEU+CitXZWJLaXRPcHRpb25NZW51SXRl
bQord2Via2l0X29wdGlvbl9tZW51X2l0ZW1fY29weQord2Via2l0X29wdGlvbl9tZW51X2l0ZW1f
ZnJlZQord2Via2l0X29wdGlvbl9tZW51X2l0ZW1fZ2V0X2xhYmVsCit3ZWJraXRfb3B0aW9uX21l
bnVfaXRlbV9nZXRfdG9vbHRpcAord2Via2l0X29wdGlvbl9tZW51X2l0ZW1faXNfZ3JvdXBfbGFi
ZWwKK3dlYmtpdF9vcHRpb25fbWVudV9pdGVtX2lzX2dyb3VwX2NoaWxkCit3ZWJraXRfb3B0aW9u
X21lbnVfaXRlbV9pc19lbmFibGVkCit3ZWJraXRfb3B0aW9uX21lbnVfaXRlbV9pc19zZWxlY3Rl
ZAorCis8U1VCU0VDVElPTiBTdGFuZGFyZD4KK1dFQktJVF9UWVBFX09QVElPTl9NRU5VX0lURU0K
KworPFNVQlNFQ1RJT04gUHJpdmF0ZT4KK3dlYmtpdF9vcHRpb25fbWVudV9pdGVtX2dldF90eXBl
Cis8L1NFQ1RJT04+CisKKzxTRUNUSU9OPgogPEZJTEU+V2ViS2l0Rm9ybVN1Ym1pc3Npb25SZXF1
ZXN0PC9GSUxFPgogV2ViS2l0Rm9ybVN1Ym1pc3Npb25SZXF1ZXN0CiB3ZWJraXRfZm9ybV9zdWJt
aXNzaW9uX3JlcXVlc3RfZ2V0X3RleHRfZmllbGRzCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0
Mi9VSVByb2Nlc3MvQVBJL2d0ay9kb2NzL3dlYmtpdDJndGstNC4wLnR5cGVzIGIvU291cmNlL1dl
YktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvZG9jcy93ZWJraXQyZ3RrLTQuMC50eXBlcwppbmRleCA5
ZGZkZTI3NTFlNi4uODRlZDgyNzJhZTcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1VJUHJv
Y2Vzcy9BUEkvZ3RrL2RvY3Mvd2Via2l0Mmd0ay00LjAudHlwZXMKKysrIGIvU291cmNlL1dlYktp
dDIvVUlQcm9jZXNzL0FQSS9ndGsvZG9jcy93ZWJraXQyZ3RrLTQuMC50eXBlcwpAQCAtMzYsMyAr
MzYsNSBAQCB3ZWJraXRfY29uc29sZV9tZXNzYWdlX2dldF90eXBlCiB3ZWJraXRfd2ViX3ZpZXdf
c2Vzc2lvbl9zdGF0ZV9nZXRfdHlwZQogd2Via2l0X3ByaW50X2N1c3RvbV93aWRnZXRfZ2V0X3R5
cGUKIHdlYmtpdF9hdXRvbWF0aW9uX3Nlc3Npb25fZ2V0X3R5cGUKK3dlYmtpdF9vcHRpb25fbWVu
dV9nZXRfdHlwZQord2Via2l0X29wdGlvbl9tZW51X2l0ZW1fZ2V0X3R5cGUKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL2RvY3Mvd2Via2l0Mmd0ay1kb2NzLnNn
bWwgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay9kb2NzL3dlYmtpdDJndGstZG9j
cy5zZ21sCmluZGV4IDVmOTNkOTU3Mjg2Li5lMzE5ZGNhNDI5NyAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvZG9jcy93ZWJraXQyZ3RrLWRvY3Muc2dtbAorKysg
Yi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay9kb2NzL3dlYmtpdDJndGstZG9jcy5z
Z21sCkBAIC00Niw2ICs0Niw4IEBACiAgICAgPHhpOmluY2x1ZGUgaHJlZj0ieG1sL1dlYktpdFZl
cnNpb24ueG1sIi8+CiAgICAgPHhpOmluY2x1ZGUgaHJlZj0ieG1sL1dlYktpdENvbnRleHRNZW51
LnhtbCIvPgogICAgIDx4aTppbmNsdWRlIGhyZWY9InhtbC9XZWJLaXRDb250ZXh0TWVudUl0ZW0u
eG1sIi8+CisgICAgPHhpOmluY2x1ZGUgaHJlZj0ieG1sL1dlYktpdE9wdGlvbk1lbnUueG1sIi8+
CisgICAgPHhpOmluY2x1ZGUgaHJlZj0ieG1sL1dlYktpdE9wdGlvbk1lbnVJdGVtLnhtbCIvPgog
ICAgIDx4aTppbmNsdWRlIGhyZWY9InhtbC9XZWJLaXRGb3JtU3VibWlzc2lvblJlcXVlc3QueG1s
Ii8+CiAgICAgPHhpOmluY2x1ZGUgaHJlZj0ieG1sL1dlYktpdFNlY3VyaXR5TWFuYWdlci54bWwi
Lz4KICAgICA8eGk6aW5jbHVkZSBocmVmPSJ4bWwvV2ViS2l0VXNlckNvbnRlbnRNYW5hZ2VyLnht
bCIvPgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvd2Via2l0
Mi5oIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvd2Via2l0Mi5oCmluZGV4IDIy
OTgyMmNmM2FhLi5hZTUwYjM1MDVmNiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvVUlQcm9j
ZXNzL0FQSS9ndGsvd2Via2l0Mi5oCisrKyBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkv
Z3RrL3dlYmtpdDIuaApAQCAtNTcsNiArNTcsOCBAQAogI2luY2x1ZGUgPHdlYmtpdDIvV2ViS2l0
TmV0d29ya1Byb3h5U2V0dGluZ3MuaD4KICNpbmNsdWRlIDx3ZWJraXQyL1dlYktpdE5vdGlmaWNh
dGlvbi5oPgogI2luY2x1ZGUgPHdlYmtpdDIvV2ViS2l0Tm90aWZpY2F0aW9uUGVybWlzc2lvblJl
cXVlc3QuaD4KKyNpbmNsdWRlIDx3ZWJraXQyL1dlYktpdE9wdGlvbk1lbnUuaD4KKyNpbmNsdWRl
IDx3ZWJraXQyL1dlYktpdE9wdGlvbk1lbnVJdGVtLmg+CiAjaW5jbHVkZSA8d2Via2l0Mi9XZWJL
aXRQZXJtaXNzaW9uUmVxdWVzdC5oPgogI2luY2x1ZGUgPHdlYmtpdDIvV2ViS2l0UGx1Z2luLmg+
CiAjaW5jbHVkZSA8d2Via2l0Mi9XZWJLaXRQcmludEN1c3RvbVdpZGdldC5oPgpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL2d0ay9XZWJQb3B1cE1lbnVQcm94eUd0ay5jcHAg
Yi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvZ3RrL1dlYlBvcHVwTWVudVByb3h5R3RrLmNwcApp
bmRleCBkMTJmYWYxYWIwNS4uZWM3NzMyNTcyMGUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQy
L1VJUHJvY2Vzcy9ndGsvV2ViUG9wdXBNZW51UHJveHlHdGsuY3BwCisrKyBiL1NvdXJjZS9XZWJL
aXQyL1VJUHJvY2Vzcy9ndGsvV2ViUG9wdXBNZW51UHJveHlHdGsuY3BwCkBAIC00MSwxMSArNDEs
OCBAQCBuYW1lc3BhY2UgV2ViS2l0IHsKIFdlYlBvcHVwTWVudVByb3h5R3RrOjpXZWJQb3B1cE1l
bnVQcm94eUd0ayhHdGtXaWRnZXQqIHdlYlZpZXcsIFdlYlBvcHVwTWVudVByb3h5OjpDbGllbnQm
IGNsaWVudCkKICAgICA6IFdlYlBvcHVwTWVudVByb3h5KGNsaWVudCkKICAgICAsIG1fd2ViVmll
dyh3ZWJWaWV3KQotICAgICwgbV9wb3B1cChndGtfbWVudV9uZXcoKSkKICAgICAsIG1fZGlzbWlz
c01lbnVUaW1lcihSdW5Mb29wOjptYWluKCksIHRoaXMsICZXZWJQb3B1cE1lbnVQcm94eUd0azo6
ZGlzbWlzc01lbnVUaW1lckZpcmVkKQogewotICAgIGdfc2lnbmFsX2Nvbm5lY3QobV9wb3B1cCwg
ImtleS1wcmVzcy1ldmVudCIsIEdfQ0FMTEJBQ0soa2V5UHJlc3NFdmVudENhbGxiYWNrKSwgdGhp
cyk7Ci0gICAgZ19zaWduYWxfY29ubmVjdChtX3BvcHVwLCAidW5tYXAiLCBHX0NBTExCQUNLKG1l
bnVVbm1hcHBlZENhbGxiYWNrKSwgdGhpcyk7CiB9CiAKIFdlYlBvcHVwTWVudVByb3h5R3RrOjp+
V2ViUG9wdXBNZW51UHJveHlHdGsoKQpAQCAtODgsNyArODUsMTAgQEAgdm9pZCBXZWJQb3B1cE1l
bnVQcm94eUd0azo6cG9wdWxhdGVQb3B1cE1lbnUoY29uc3QgVmVjdG9yPFdlYlBvcHVwSXRlbT4m
IGl0ZW1zKQogCiB2b2lkIFdlYlBvcHVwTWVudVByb3h5R3RrOjpzaG93UG9wdXBNZW51KGNvbnN0
IEludFJlY3QmIHJlY3QsIFRleHREaXJlY3Rpb24sIGRvdWJsZSAvKiBwYWdlU2NhbGVGYWN0b3Ig
Ki8sIGNvbnN0IFZlY3RvcjxXZWJQb3B1cEl0ZW0+JiBpdGVtcywgY29uc3QgUGxhdGZvcm1Qb3B1
cE1lbnVEYXRhJiwgaW50MzJfdCBzZWxlY3RlZEluZGV4KQogewotICAgIG1fZGlzbWlzc01lbnVU
aW1lci5zdG9wKCk7CisgICAgQVNTRVJUKCFtX3BvcHVwKTsKKyAgICBtX3BvcHVwID0gZ3RrX21l
bnVfbmV3KCk7CisgICAgZ19zaWduYWxfY29ubmVjdChtX3BvcHVwLCAia2V5LXByZXNzLWV2ZW50
IiwgR19DQUxMQkFDSyhrZXlQcmVzc0V2ZW50Q2FsbGJhY2spLCB0aGlzKTsKKyAgICBnX3NpZ25h
bF9jb25uZWN0KG1fcG9wdXAsICJ1bm1hcCIsIEdfQ0FMTEJBQ0sobWVudVVubWFwcGVkQ2FsbGJh
Y2spLCB0aGlzKTsKIAogICAgIHBvcHVsYXRlUG9wdXBNZW51KGl0ZW1zKTsKICAgICBndGtfbWVu
dV9zZXRfYWN0aXZlKEdUS19NRU5VKG1fcG9wdXApLCBzZWxlY3RlZEluZGV4KTsKQEAgLTE3OCw2
ICsxNzgsOSBAQCB2b2lkIFdlYlBvcHVwTWVudVByb3h5R3RrOjpzaG93UG9wdXBNZW51KGNvbnN0
IEludFJlY3QmIHJlY3QsIFRleHREaXJlY3Rpb24sIGRvdQogCiB2b2lkIFdlYlBvcHVwTWVudVBy
b3h5R3RrOjpoaWRlUG9wdXBNZW51KCkKIHsKKyAgICBpZiAoIW1fcG9wdXApCisgICAgICAgIHJl
dHVybjsKKwogICAgIGd0a19tZW51X3BvcGRvd24oR1RLX01FTlUobV9wb3B1cCkpOwogICAgIHJl
c2V0VHlwZUFoZWFkRmluZFN0YXRlKCk7CiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9V
SVByb2Nlc3MvZ3RrL1dlYlBvcHVwTWVudVByb3h5R3RrLmggYi9Tb3VyY2UvV2ViS2l0Mi9VSVBy
b2Nlc3MvZ3RrL1dlYlBvcHVwTWVudVByb3h5R3RrLmgKaW5kZXggYzljZWI2OTg4MWMuLmVkZDhl
OGYzYzVjIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvZ3RrL1dlYlBvcHVw
TWVudVByb3h5R3RrLmgKKysrIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL2d0ay9XZWJQb3B1
cE1lbnVQcm94eUd0ay5oCkBAIC00OCw5ICs0OCwxMiBAQCBwdWJsaWM6CiAgICAgdm9pZCBoaWRl
UG9wdXBNZW51KCkgb3ZlcnJpZGU7CiAgICAgdm9pZCBjYW5jZWxUcmFja2luZygpIG92ZXJyaWRl
OwogCi1wcml2YXRlOgorcHJvdGVjdGVkOgogICAgIFdlYlBvcHVwTWVudVByb3h5R3RrKEd0a1dp
ZGdldCosIFdlYlBvcHVwTWVudVByb3h5OjpDbGllbnQmKTsKIAorICAgIEd0a1dpZGdldCogbV93
ZWJWaWV3IHsgbnVsbHB0ciB9OworCitwcml2YXRlOgogICAgIHZvaWQgc2V0Q3VycmVudGx5U2Vs
ZWN0ZWRNZW51SXRlbShHdGtXaWRnZXQqIGl0ZW0pIHsgbV9jdXJyZW50bHlTZWxlY3RlZE1lbnVJ
dGVtID0gaXRlbTsgfQogICAgIEd0a0FjdGlvbiogY3JlYXRlR3RrQWN0aW9uRm9yTWVudUl0ZW0o
Y29uc3QgV2ViUG9wdXBJdGVtJiwgaW50IGl0ZW1JbmRleCk7CiAgICAgdm9pZCBwb3B1bGF0ZVBv
cHVwTWVudShjb25zdCBWZWN0b3I8V2ViUG9wdXBJdGVtPiYpOwpAQCAtNjQsNyArNjcsNiBAQCBw
cml2YXRlOgogICAgIHN0YXRpYyBnYm9vbGVhbiBrZXlQcmVzc0V2ZW50Q2FsbGJhY2soR3RrV2lk
Z2V0KiwgR2RrRXZlbnRLZXkqLCBXZWJQb3B1cE1lbnVQcm94eUd0ayopOwogICAgIHN0YXRpYyB2
b2lkIG1lbnVVbm1hcHBlZENhbGxiYWNrKEd0a1dpZGdldCosIFdlYlBvcHVwTWVudVByb3h5R3Rr
Kik7CiAKLSAgICBHdGtXaWRnZXQqIG1fd2ViVmlldyB7IG51bGxwdHIgfTsKICAgICBHdGtXaWRn
ZXQqIG1fcG9wdXAgeyBudWxscHRyIH07CiAKICAgICBSdW5Mb29wOjpUaW1lcjxXZWJQb3B1cE1l
bnVQcm94eUd0az4gbV9kaXNtaXNzTWVudVRpbWVyOwpkaWZmIC0tZ2l0IGEvVG9vbHMvQ2hhbmdl
TG9nIGIvVG9vbHMvQ2hhbmdlTG9nCmluZGV4IDRiMDNhNTEzNjFmLi45YThhMTNhMTcwMiAxMDA2
NDQKLS0tIGEvVG9vbHMvQ2hhbmdlTG9nCisrKyBiL1Rvb2xzL0NoYW5nZUxvZwpAQCAtMSwzICsx
LDMxIEBACisyMDE3LTA2LTA0ICBDYXJsb3MgR2FyY2lhIENhbXBvcyAgPGNnYXJjaWFAaWdhbGlh
LmNvbT4KKworICAgICAgICBbR1RLXSBBZGQgQVBJIHRvIGFsbG93IG92ZXJyaWRpbmcgcG9wdXAg
bWVudXMKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE3
MjkwNQorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIEFk
ZCBhIHVuaXQgdGVzdCB0byBjaGVjayB0aGUgbmV3IEFQSS4KKworICAgICAgICAqIFRlc3RXZWJL
aXRBUEkvVGVzdHMvV2ViS2l0Mkd0ay9DTWFrZUxpc3RzLnR4dDoKKyAgICAgICAgKiBUZXN0V2Vi
S2l0QVBJL1Rlc3RzL1dlYktpdDJHdGsvVGVzdE9wdGlvbk1lbnUuY3BwOiBBZGRlZC4KKyAgICAg
ICAgKE9wdGlvbk1lbnVUZXN0OjpPcHRpb25NZW51VGVzdCk6CisgICAgICAgIChPcHRpb25NZW51
VGVzdDo6fk9wdGlvbk1lbnVUZXN0KToKKyAgICAgICAgKE9wdGlvbk1lbnVUZXN0OjpkZXN0cm95
TWVudSk6CisgICAgICAgIChPcHRpb25NZW51VGVzdDo6c2hvd09wdGlvbk1lbnVDYWxsYmFjayk6
CisgICAgICAgIChPcHRpb25NZW51VGVzdDo6bWVudUNsb3NlQ2FsbGJhY2spOgorICAgICAgICAo
T3B0aW9uTWVudVRlc3Q6OnNob3dPcHRpb25NZW51KToKKyAgICAgICAgKE9wdGlvbk1lbnVUZXN0
OjpjbGlja0F0UG9zaXRpb25BbmRXYWl0VW50aWxPcHRpb25NZW51U2hvd24pOgorICAgICAgICAo
T3B0aW9uTWVudVRlc3Q6OmNsb3NlKToKKyAgICAgICAgKE9wdGlvbk1lbnVUZXN0OjphY3RpdmF0
ZUl0ZW0pOgorICAgICAgICAoT3B0aW9uTWVudVRlc3Q6OnNlbGVjdEl0ZW0pOgorICAgICAgICAo
dGVzdE9wdGlvbk1lbnVTaW1wbGUpOgorICAgICAgICAodGVzdE9wdGlvbk1lbnVHcm91cHMpOgor
ICAgICAgICAodGVzdE9wdGlvbk1lbnVBY3RpdmF0ZSk6CisgICAgICAgICh0ZXN0T3B0aW9uTWVu
dVNlbGVjdCk6CisgICAgICAgIChiZWZvcmVBbGwpOgorICAgICAgICAoYWZ0ZXJBbGwpOgorCiAy
MDE3LTA2LTAxICBDYXJsb3MgR2FyY2lhIENhbXBvcyAgPGNnYXJjaWFAaWdhbGlhLmNvbT4KIAog
ICAgICAgICBbR1RLXSBCdW1wIEdUSysgYW5kIGl0cyBkZXBlbmRlbmNpZXMgaW4gamhidWlsZApk
aWZmIC0tZ2l0IGEvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXQyR3RrL0NNYWtlTGlz
dHMudHh0IGIvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXQyR3RrL0NNYWtlTGlzdHMu
dHh0CmluZGV4IDYzNzY3M2UyYjllLi5iZTU5NjgzMjQ4NyAxMDA2NDQKLS0tIGEvVG9vbHMvVGVz
dFdlYktpdEFQSS9UZXN0cy9XZWJLaXQyR3RrL0NNYWtlTGlzdHMudHh0CisrKyBiL1Rvb2xzL1Rl
c3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0Mkd0ay9DTWFrZUxpc3RzLnR4dApAQCAtMTE0LDYgKzEx
NCw3IEBAIEFERF9XSzJfVEVTVChUZXN0SW5zcGVjdG9yIFRlc3RJbnNwZWN0b3IuY3BwKQogQURE
X1dLMl9URVNUKFRlc3RJbnNwZWN0b3JTZXJ2ZXIgVGVzdEluc3BlY3RvclNlcnZlci5jcHApCiBB
RERfV0syX1RFU1QoVGVzdExvYWRlckNsaWVudCBUZXN0TG9hZGVyQ2xpZW50LmNwcCkKIEFERF9X
SzJfVEVTVChUZXN0TXVsdGlwcm9jZXNzIFRlc3RNdWx0aXByb2Nlc3MuY3BwKQorQUREX1dLMl9U
RVNUKFRlc3RPcHRpb25NZW51IFRlc3RPcHRpb25NZW51LmNwcCkKIEFERF9XSzJfVEVTVChUZXN0
UHJpbnRpbmcgVGVzdFByaW50aW5nLmNwcCkKIEFERF9XSzJfVEVTVChUZXN0UmVzb3VyY2VzIFRl
c3RSZXNvdXJjZXMuY3BwKQogQUREX1dLMl9URVNUKFRlc3RTU0wgVGVzdFNTTC5jcHApCmRpZmYg
LS1naXQgYS9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdDJHdGsvVGVzdE9wdGlvbk1l
bnUuY3BwIGIvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXQyR3RrL1Rlc3RPcHRpb25N
ZW51LmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMC4uZWE2MWJjNGQy
YTQKLS0tIC9kZXYvbnVsbAorKysgYi9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdDJH
dGsvVGVzdE9wdGlvbk1lbnUuY3BwCkBAIC0wLDAgKzEsMzA1IEBACisvKgorICogQ29weXJpZ2h0
IChDKSAyMDE3IElnYWxpYSBTLkwuCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdh
cmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRo
ZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZSBhcyBw
dWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiB2ZXJz
aW9uIDIsMSBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVy
c2lvbi4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhh
dCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91
dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklU
TkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogTGlicmFyeSBH
ZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3Vs
ZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMg
TGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5H
LkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24s
IEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCisgKiBCb3N0b24sIE1BIDAy
MTEwLTEzMDEsIFVTQS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiV2Vi
Vmlld1Rlc3QuaCIKKworI2luY2x1ZGUgPHd0Zi9SdW5Mb29wLmg+CisKK2NsYXNzIE9wdGlvbk1l
bnVUZXN0IDogcHVibGljIFdlYlZpZXdUZXN0IHsKK3B1YmxpYzoKKyAgICBNQUtFX0dMSUJfVEVT
VF9GSVhUVVJFKE9wdGlvbk1lbnVUZXN0KTsKKworICAgIE9wdGlvbk1lbnVUZXN0KCkKKyAgICB7
CisgICAgICAgIGdfc2lnbmFsX2Nvbm5lY3QobV93ZWJWaWV3LCAic2hvdy1vcHRpb24tbWVudSIs
IEdfQ0FMTEJBQ0soc2hvd09wdGlvbk1lbnVDYWxsYmFjayksIHRoaXMpOworICAgIH0KKworICAg
IH5PcHRpb25NZW51VGVzdCgpCisgICAgeworICAgICAgICBnX3NpZ25hbF9oYW5kbGVyc19kaXNj
b25uZWN0X21hdGNoZWQobV93ZWJWaWV3LCBHX1NJR05BTF9NQVRDSF9EQVRBLCAwLCAwLCAwLCAw
LCB0aGlzKTsKKyAgICAgICAgaWYgKG1fbWVudSkKKyAgICAgICAgICAgIGNsb3NlKCk7CisgICAg
fQorCisgICAgdm9pZCBkZXN0cm95TWVudSgpCisgICAgeworICAgICAgICBpZiAoIW1fbWVudSkK
KyAgICAgICAgICAgIHJldHVybjsKKworICAgICAgICBnX3NpZ25hbF9oYW5kbGVyc19kaXNjb25u
ZWN0X21hdGNoZWQobV9tZW51LmdldCgpLCBHX1NJR05BTF9NQVRDSF9EQVRBLCAwLCAwLCAwLCAw
LCB0aGlzKTsKKyAgICAgICAgbV9tZW51ID0gbnVsbHB0cjsKKyAgICB9CisKKyAgICBzdGF0aWMg
Z2Jvb2xlYW4gc2hvd09wdGlvbk1lbnVDYWxsYmFjayhXZWJLaXRXZWJWaWV3KiB3ZWJWaWV3LCBX
ZWJLaXRPcHRpb25NZW51KiBtZW51LCBHZGtFdmVudCogZXZlbnQsIEdka1JlY3RhbmdsZSogcmVj
dCwgT3B0aW9uTWVudVRlc3QqIHRlc3QpCisgICAgeworICAgICAgICBnX2Fzc2VydCh0ZXN0LT5t
X3dlYlZpZXcgPT0gd2ViVmlldyk7CisgICAgICAgIGdfYXNzZXJ0KHJlY3QpOworICAgICAgICBn
X2Fzc2VydChXRUJLSVRfSVNfT1BUSU9OX01FTlUobWVudSkpOworICAgICAgICB0ZXN0LT5hc3Nl
cnRPYmplY3RJc0RlbGV0ZWRXaGVuVGVzdEZpbmlzaGVzKEdfT0JKRUNUKG1lbnUpKTsKKyAgICAg
ICAgdGVzdC0+c2hvd09wdGlvbk1lbnUobWVudSwgcmVjdCk7CisgICAgICAgIHJldHVybiBUUlVF
OworICAgIH0KKworICAgIHN0YXRpYyB2b2lkIG1lbnVDbG9zZUNhbGxiYWNrKFdlYktpdE9wdGlv
bk1lbnUqIG1lbnUsIE9wdGlvbk1lbnVUZXN0KiB0ZXN0KQorICAgIHsKKyAgICAgICAgZ19hc3Nl
cnQodGVzdC0+bV9tZW51LmdldCgpID09IG1lbnUpOworICAgICAgICB0ZXN0LT5kZXN0cm95TWVu
dSgpOworICAgIH0KKworICAgIHZvaWQgc2hvd09wdGlvbk1lbnUoV2ViS2l0T3B0aW9uTWVudSog
bWVudSwgR2RrUmVjdGFuZ2xlKiByZWN0KQorICAgIHsKKyAgICAgICAgbV9yZWN0YW5nbGUgPSAq
cmVjdDsKKyAgICAgICAgbV9tZW51ID0gbWVudTsKKyAgICAgICAgZ19zaWduYWxfY29ubmVjdCht
X21lbnUuZ2V0KCksICJjbG9zZSIsIEdfQ0FMTEJBQ0sobWVudUNsb3NlQ2FsbGJhY2spLCB0aGlz
KTsKKyAgICAgICAgZ19tYWluX2xvb3BfcXVpdChtX21haW5Mb29wKTsKKyAgICB9CisKKyAgICB2
b2lkIGNsaWNrQXRQb3NpdGlvbkFuZFdhaXRVbnRpbE9wdGlvbk1lbnVTaG93bihpbnQgeCwgaW50
IHkpCisgICAgeworICAgICAgICBtX21lbnUgPSBudWxscHRyOworICAgICAgICBSdW5Mb29wOjpt
YWluKCkuZGlzcGF0Y2goW3RoaXMsIHgsIHldIHsgY2xpY2tNb3VzZUJ1dHRvbih4LCB5KTsgfSk7
CisgICAgICAgIGdfbWFpbl9sb29wX3J1bihtX21haW5Mb29wKTsKKyAgICB9CisKKyAgICB2b2lk
IGNsb3NlKCkKKyAgICB7CisgICAgICAgIGdfYXNzZXJ0KG1fbWVudS5nZXQoKSk7CisgICAgICAg
IHdlYmtpdF9vcHRpb25fbWVudV9jbG9zZShtX21lbnUuZ2V0KCkpOworICAgICAgICBnX2Fzc2Vy
dCghbV9tZW51LmdldCgpKTsKKyAgICB9CisKKyAgICB2b2lkIGFjdGl2YXRlSXRlbSh1bnNpZ25l
ZCBpdGVtKQorICAgIHsKKyAgICAgICAgZ19hc3NlcnQobV9tZW51LmdldCgpKTsKKyAgICAgICAg
d2Via2l0X29wdGlvbl9tZW51X2FjdGl2YXRlX2l0ZW0obV9tZW51LmdldCgpLCBpdGVtKTsKKyAg
ICAgICAgZ19hc3NlcnQobV9tZW51LmdldCgpKTsKKyAgICB9CisKKyAgICB2b2lkIHNlbGVjdEl0
ZW0odW5zaWduZWQgaXRlbSkKKyAgICB7CisgICAgICAgIGdfYXNzZXJ0KG1fbWVudS5nZXQoKSk7
CisgICAgICAgIHdlYmtpdF9vcHRpb25fbWVudV9zZWxlY3RfaXRlbShtX21lbnUuZ2V0KCksIGl0
ZW0pOworICAgICAgICBnX2Fzc2VydChtX21lbnUuZ2V0KCkpOworICAgIH0KKworICAgIEdSZWZQ
dHI8V2ViS2l0T3B0aW9uTWVudT4gbV9tZW51OworICAgIEdka1JlY3RhbmdsZSBtX3JlY3Rhbmds
ZTsKK307CisKK3N0YXRpYyB2b2lkIHRlc3RPcHRpb25NZW51U2ltcGxlKE9wdGlvbk1lbnVUZXN0
KiB0ZXN0LCBnY29uc3Rwb2ludGVyKQoreworICAgIHN0YXRpYyBjb25zdCBjaGFyIGh0bWxbXSA9
CisgICAgICAgICI8aHRtbD48Ym9keT4iCisgICAgICAgICIgIDxzZWxlY3Qgc3R5bGU9J3Bvc2l0
aW9uOmFic29sdXRlOyBsZWZ0OjE7IHRvcDoxMCc+IgorICAgICAgICAiICAgIDxvcHRpb24gdGl0
bGU9J1RoZSBGb28gT3B0aW9uJz5Gb288L29wdGlvbj4iCisgICAgICAgICIgICAgPG9wdGlvbiBz
ZWxlY3RlZD5CYXI8L29wdGlvbj4iCisgICAgICAgICIgICAgPG9wdGlvbiBkaXNhYmxlZD5CYXo8
L29wdGlvbj4iCisgICAgICAgICIgIDwvc2VsZWN0PjwvYm9keT48L2h0bWw+IjsKKyAgICB0ZXN0
LT5zaG93SW5XaW5kb3dBbmRXYWl0VW50aWxNYXBwZWQoKTsKKyAgICB0ZXN0LT5sb2FkSHRtbCho
dG1sLCBudWxscHRyKTsKKyAgICB0ZXN0LT53YWl0VW50aWxMb2FkRmluaXNoZWQoKTsKKworICAg
IHRlc3QtPmNsaWNrQXRQb3NpdGlvbkFuZFdhaXRVbnRpbE9wdGlvbk1lbnVTaG93big1LCAxNSk7
CisgICAgZ19hc3NlcnQoV0VCS0lUX0lTX09QVElPTl9NRU5VKHRlc3QtPm1fbWVudS5nZXQoKSkp
OworICAgIGdfYXNzZXJ0X2NtcGludCh3ZWJraXRfb3B0aW9uX21lbnVfZ2V0X25faXRlbXModGVz
dC0+bV9tZW51LmdldCgpKSwgPT0sIDMpOworICAgIGF1dG8qIGl0ZW0gPSB3ZWJraXRfb3B0aW9u
X21lbnVfZ2V0X2l0ZW0odGVzdC0+bV9tZW51LmdldCgpLCAwKTsKKyAgICBnX2Fzc2VydF9jbXBz
dHIod2Via2l0X29wdGlvbl9tZW51X2l0ZW1fZ2V0X2xhYmVsKGl0ZW0pLCA9PSwgIkZvbyIpOwor
ICAgIGdfYXNzZXJ0X2NtcHN0cih3ZWJraXRfb3B0aW9uX21lbnVfaXRlbV9nZXRfdG9vbHRpcChp
dGVtKSwgPT0sICJUaGUgRm9vIE9wdGlvbiIpOworICAgIGdfYXNzZXJ0KCF3ZWJraXRfb3B0aW9u
X21lbnVfaXRlbV9pc19ncm91cF9sYWJlbChpdGVtKSk7CisgICAgZ19hc3NlcnQoIXdlYmtpdF9v
cHRpb25fbWVudV9pdGVtX2lzX2dyb3VwX2NoaWxkKGl0ZW0pKTsKKyAgICBnX2Fzc2VydCh3ZWJr
aXRfb3B0aW9uX21lbnVfaXRlbV9pc19lbmFibGVkKGl0ZW0pKTsKKyAgICBnX2Fzc2VydCghd2Vi
a2l0X29wdGlvbl9tZW51X2l0ZW1faXNfc2VsZWN0ZWQoaXRlbSkpOworICAgIGl0ZW0gPSB3ZWJr
aXRfb3B0aW9uX21lbnVfZ2V0X2l0ZW0odGVzdC0+bV9tZW51LmdldCgpLCAxKTsKKyAgICBnX2Fz
c2VydF9jbXBzdHIod2Via2l0X29wdGlvbl9tZW51X2l0ZW1fZ2V0X2xhYmVsKGl0ZW0pLCA9PSwg
IkJhciIpOworICAgIGdfYXNzZXJ0KCF3ZWJraXRfb3B0aW9uX21lbnVfaXRlbV9nZXRfdG9vbHRp
cChpdGVtKSk7CisgICAgZ19hc3NlcnQoIXdlYmtpdF9vcHRpb25fbWVudV9pdGVtX2lzX2dyb3Vw
X2xhYmVsKGl0ZW0pKTsKKyAgICBnX2Fzc2VydCghd2Via2l0X29wdGlvbl9tZW51X2l0ZW1faXNf
Z3JvdXBfY2hpbGQoaXRlbSkpOworICAgIGdfYXNzZXJ0KHdlYmtpdF9vcHRpb25fbWVudV9pdGVt
X2lzX2VuYWJsZWQoaXRlbSkpOworICAgIGdfYXNzZXJ0KHdlYmtpdF9vcHRpb25fbWVudV9pdGVt
X2lzX3NlbGVjdGVkKGl0ZW0pKTsKKyAgICBpdGVtID0gd2Via2l0X29wdGlvbl9tZW51X2dldF9p
dGVtKHRlc3QtPm1fbWVudS5nZXQoKSwgMik7CisgICAgZ19hc3NlcnRfY21wc3RyKHdlYmtpdF9v
cHRpb25fbWVudV9pdGVtX2dldF9sYWJlbChpdGVtKSwgPT0sICJCYXoiKTsKKyAgICBnX2Fzc2Vy
dCghd2Via2l0X29wdGlvbl9tZW51X2l0ZW1fZ2V0X3Rvb2x0aXAoaXRlbSkpOworICAgIGdfYXNz
ZXJ0KCF3ZWJraXRfb3B0aW9uX21lbnVfaXRlbV9pc19ncm91cF9sYWJlbChpdGVtKSk7CisgICAg
Z19hc3NlcnQoIXdlYmtpdF9vcHRpb25fbWVudV9pdGVtX2lzX2dyb3VwX2NoaWxkKGl0ZW0pKTsK
KyAgICBnX2Fzc2VydCghd2Via2l0X29wdGlvbl9tZW51X2l0ZW1faXNfZW5hYmxlZChpdGVtKSk7
CisgICAgZ19hc3NlcnQoIXdlYmtpdF9vcHRpb25fbWVudV9pdGVtX2lzX3NlbGVjdGVkKGl0ZW0p
KTsKKworICAgIHRlc3QtPmNsb3NlKCk7CisgICAgZ19hc3NlcnQoIXRlc3QtPm1fbWVudS5nZXQo
KSk7Cit9CisKK3N0YXRpYyB2b2lkIHRlc3RPcHRpb25NZW51R3JvdXBzKE9wdGlvbk1lbnVUZXN0
KiB0ZXN0LCBnY29uc3Rwb2ludGVyKQoreworICAgIHN0YXRpYyBjb25zdCBjaGFyIGh0bWxbXSA9
CisgICAgICAgICI8aHRtbD48Ym9keT4iCisgICAgICAgICIgIDxzZWxlY3Qgc3R5bGU9J3Bvc2l0
aW9uOmFic29sdXRlOyBsZWZ0OjE7IHRvcDoxMCc+IgorICAgICAgICAiICAgIDxvcHRpb24+Um9v
dDwvb3B0aW9uPiIKKyAgICAgICAgIiAgICA8b3B0Z3JvdXAgbGFiZWw9J0dyb3VwIDEnPiIKKyAg
ICAgICAgIiAgICAgIDxvcHRpb24+Q2hpbGQgMS0xPC9vcHRpb24+IgorICAgICAgICAiICAgICAg
PG9wdGlvbiBkaXNhYmxlZD5DaGlsZCAxLTI8L29wdGlvbj4iCisgICAgICAgICIgICAgPC9vcHRn
cm91cD4iCisgICAgICAgICIgICAgPG9wdGdyb3VwIGxhYmVsPSdHcm91cCAyJz4iCisgICAgICAg
ICIgICAgICA8b3B0aW9uIHNlbGVjdGVkPkNoaWxkIDItMTwvb3B0aW9uPiIKKyAgICAgICAgIiAg
ICAgIDxvcHRpb24+Q2hpbGQgMi0yPC9vcHRpb24+IgorICAgICAgICAiICAgIDwvb3B0Z3JvdXA+
IgorICAgICAgICAiICAgIDxvcHRpb24+VGFpbDwvb3B0aW9uPiIKKyAgICAgICAgIiAgPC9zZWxl
Y3Q+PC9ib2R5PjwvaHRtbD4iOworICAgIHRlc3QtPnNob3dJbldpbmRvd0FuZFdhaXRVbnRpbE1h
cHBlZCgpOworICAgIHRlc3QtPmxvYWRIdG1sKGh0bWwsIG51bGxwdHIpOworICAgIHRlc3QtPndh
aXRVbnRpbExvYWRGaW5pc2hlZCgpOworCisgICAgdGVzdC0+Y2xpY2tBdFBvc2l0aW9uQW5kV2Fp
dFVudGlsT3B0aW9uTWVudVNob3duKDUsIDE1KTsKKyAgICBnX2Fzc2VydChXRUJLSVRfSVNfT1BU
SU9OX01FTlUodGVzdC0+bV9tZW51LmdldCgpKSk7CisgICAgZ19hc3NlcnRfY21waW50KHdlYmtp
dF9vcHRpb25fbWVudV9nZXRfbl9pdGVtcyh0ZXN0LT5tX21lbnUuZ2V0KCkpLCA9PSwgOCk7Cisg
ICAgYXV0byogaXRlbSA9IHdlYmtpdF9vcHRpb25fbWVudV9nZXRfaXRlbSh0ZXN0LT5tX21lbnUu
Z2V0KCksIDApOworICAgIGdfYXNzZXJ0X2NtcHN0cih3ZWJraXRfb3B0aW9uX21lbnVfaXRlbV9n
ZXRfbGFiZWwoaXRlbSksID09LCAiUm9vdCIpOworICAgIGdfYXNzZXJ0KCF3ZWJraXRfb3B0aW9u
X21lbnVfaXRlbV9nZXRfdG9vbHRpcChpdGVtKSk7CisgICAgZ19hc3NlcnQoIXdlYmtpdF9vcHRp
b25fbWVudV9pdGVtX2lzX2dyb3VwX2xhYmVsKGl0ZW0pKTsKKyAgICBnX2Fzc2VydCghd2Via2l0
X29wdGlvbl9tZW51X2l0ZW1faXNfZ3JvdXBfY2hpbGQoaXRlbSkpOworICAgIGdfYXNzZXJ0KHdl
YmtpdF9vcHRpb25fbWVudV9pdGVtX2lzX2VuYWJsZWQoaXRlbSkpOworICAgIGdfYXNzZXJ0KCF3
ZWJraXRfb3B0aW9uX21lbnVfaXRlbV9pc19zZWxlY3RlZChpdGVtKSk7CisgICAgaXRlbSA9IHdl
YmtpdF9vcHRpb25fbWVudV9nZXRfaXRlbSh0ZXN0LT5tX21lbnUuZ2V0KCksIDEpOworICAgIGdf
YXNzZXJ0X2NtcHN0cih3ZWJraXRfb3B0aW9uX21lbnVfaXRlbV9nZXRfbGFiZWwoaXRlbSksID09
LCAiR3JvdXAgMSIpOworICAgIGdfYXNzZXJ0KCF3ZWJraXRfb3B0aW9uX21lbnVfaXRlbV9nZXRf
dG9vbHRpcChpdGVtKSk7CisgICAgZ19hc3NlcnQod2Via2l0X29wdGlvbl9tZW51X2l0ZW1faXNf
Z3JvdXBfbGFiZWwoaXRlbSkpOworICAgIGdfYXNzZXJ0KCF3ZWJraXRfb3B0aW9uX21lbnVfaXRl
bV9pc19ncm91cF9jaGlsZChpdGVtKSk7CisgICAgZ19hc3NlcnQoIXdlYmtpdF9vcHRpb25fbWVu
dV9pdGVtX2lzX2VuYWJsZWQoaXRlbSkpOworICAgIGdfYXNzZXJ0KCF3ZWJraXRfb3B0aW9uX21l
bnVfaXRlbV9pc19zZWxlY3RlZChpdGVtKSk7CisgICAgaXRlbSA9IHdlYmtpdF9vcHRpb25fbWVu
dV9nZXRfaXRlbSh0ZXN0LT5tX21lbnUuZ2V0KCksIDIpOworICAgIGdfYXNzZXJ0X2NtcHN0cih3
ZWJraXRfb3B0aW9uX21lbnVfaXRlbV9nZXRfbGFiZWwoaXRlbSksID09LCAiQ2hpbGQgMS0xIik7
CisgICAgZ19hc3NlcnQoIXdlYmtpdF9vcHRpb25fbWVudV9pdGVtX2dldF90b29sdGlwKGl0ZW0p
KTsKKyAgICBnX2Fzc2VydCghd2Via2l0X29wdGlvbl9tZW51X2l0ZW1faXNfZ3JvdXBfbGFiZWwo
aXRlbSkpOworICAgIGdfYXNzZXJ0KHdlYmtpdF9vcHRpb25fbWVudV9pdGVtX2lzX2dyb3VwX2No
aWxkKGl0ZW0pKTsKKyAgICBnX2Fzc2VydCh3ZWJraXRfb3B0aW9uX21lbnVfaXRlbV9pc19lbmFi
bGVkKGl0ZW0pKTsKKyAgICBnX2Fzc2VydCghd2Via2l0X29wdGlvbl9tZW51X2l0ZW1faXNfc2Vs
ZWN0ZWQoaXRlbSkpOworICAgIGl0ZW0gPSB3ZWJraXRfb3B0aW9uX21lbnVfZ2V0X2l0ZW0odGVz
dC0+bV9tZW51LmdldCgpLCAzKTsKKyAgICBnX2Fzc2VydF9jbXBzdHIod2Via2l0X29wdGlvbl9t
ZW51X2l0ZW1fZ2V0X2xhYmVsKGl0ZW0pLCA9PSwgIkNoaWxkIDEtMiIpOworICAgIGdfYXNzZXJ0
KCF3ZWJraXRfb3B0aW9uX21lbnVfaXRlbV9nZXRfdG9vbHRpcChpdGVtKSk7CisgICAgZ19hc3Nl
cnQoIXdlYmtpdF9vcHRpb25fbWVudV9pdGVtX2lzX2dyb3VwX2xhYmVsKGl0ZW0pKTsKKyAgICBn
X2Fzc2VydCh3ZWJraXRfb3B0aW9uX21lbnVfaXRlbV9pc19ncm91cF9jaGlsZChpdGVtKSk7Cisg
ICAgZ19hc3NlcnQoIXdlYmtpdF9vcHRpb25fbWVudV9pdGVtX2lzX2VuYWJsZWQoaXRlbSkpOwor
ICAgIGdfYXNzZXJ0KCF3ZWJraXRfb3B0aW9uX21lbnVfaXRlbV9pc19zZWxlY3RlZChpdGVtKSk7
CisgICAgaXRlbSA9IHdlYmtpdF9vcHRpb25fbWVudV9nZXRfaXRlbSh0ZXN0LT5tX21lbnUuZ2V0
KCksIDQpOworICAgIGdfYXNzZXJ0X2NtcHN0cih3ZWJraXRfb3B0aW9uX21lbnVfaXRlbV9nZXRf
bGFiZWwoaXRlbSksID09LCAiR3JvdXAgMiIpOworICAgIGdfYXNzZXJ0KCF3ZWJraXRfb3B0aW9u
X21lbnVfaXRlbV9nZXRfdG9vbHRpcChpdGVtKSk7CisgICAgZ19hc3NlcnQod2Via2l0X29wdGlv
bl9tZW51X2l0ZW1faXNfZ3JvdXBfbGFiZWwoaXRlbSkpOworICAgIGdfYXNzZXJ0KCF3ZWJraXRf
b3B0aW9uX21lbnVfaXRlbV9pc19ncm91cF9jaGlsZChpdGVtKSk7CisgICAgZ19hc3NlcnQoIXdl
YmtpdF9vcHRpb25fbWVudV9pdGVtX2lzX2VuYWJsZWQoaXRlbSkpOworICAgIGdfYXNzZXJ0KCF3
ZWJraXRfb3B0aW9uX21lbnVfaXRlbV9pc19zZWxlY3RlZChpdGVtKSk7CisgICAgaXRlbSA9IHdl
YmtpdF9vcHRpb25fbWVudV9nZXRfaXRlbSh0ZXN0LT5tX21lbnUuZ2V0KCksIDUpOworICAgIGdf
YXNzZXJ0X2NtcHN0cih3ZWJraXRfb3B0aW9uX21lbnVfaXRlbV9nZXRfbGFiZWwoaXRlbSksID09
LCAiQ2hpbGQgMi0xIik7CisgICAgZ19hc3NlcnQoIXdlYmtpdF9vcHRpb25fbWVudV9pdGVtX2dl
dF90b29sdGlwKGl0ZW0pKTsKKyAgICBnX2Fzc2VydCghd2Via2l0X29wdGlvbl9tZW51X2l0ZW1f
aXNfZ3JvdXBfbGFiZWwoaXRlbSkpOworICAgIGdfYXNzZXJ0KHdlYmtpdF9vcHRpb25fbWVudV9p
dGVtX2lzX2dyb3VwX2NoaWxkKGl0ZW0pKTsKKyAgICBnX2Fzc2VydCh3ZWJraXRfb3B0aW9uX21l
bnVfaXRlbV9pc19lbmFibGVkKGl0ZW0pKTsKKyAgICBnX2Fzc2VydCh3ZWJraXRfb3B0aW9uX21l
bnVfaXRlbV9pc19zZWxlY3RlZChpdGVtKSk7CisgICAgaXRlbSA9IHdlYmtpdF9vcHRpb25fbWVu
dV9nZXRfaXRlbSh0ZXN0LT5tX21lbnUuZ2V0KCksIDYpOworICAgIGdfYXNzZXJ0X2NtcHN0cih3
ZWJraXRfb3B0aW9uX21lbnVfaXRlbV9nZXRfbGFiZWwoaXRlbSksID09LCAiQ2hpbGQgMi0yIik7
CisgICAgZ19hc3NlcnQoIXdlYmtpdF9vcHRpb25fbWVudV9pdGVtX2dldF90b29sdGlwKGl0ZW0p
KTsKKyAgICBnX2Fzc2VydCghd2Via2l0X29wdGlvbl9tZW51X2l0ZW1faXNfZ3JvdXBfbGFiZWwo
aXRlbSkpOworICAgIGdfYXNzZXJ0KHdlYmtpdF9vcHRpb25fbWVudV9pdGVtX2lzX2dyb3VwX2No
aWxkKGl0ZW0pKTsKKyAgICBnX2Fzc2VydCh3ZWJraXRfb3B0aW9uX21lbnVfaXRlbV9pc19lbmFi
bGVkKGl0ZW0pKTsKKyAgICBnX2Fzc2VydCghd2Via2l0X29wdGlvbl9tZW51X2l0ZW1faXNfc2Vs
ZWN0ZWQoaXRlbSkpOworICAgIGl0ZW0gPSB3ZWJraXRfb3B0aW9uX21lbnVfZ2V0X2l0ZW0odGVz
dC0+bV9tZW51LmdldCgpLCA3KTsKKyAgICBnX2Fzc2VydF9jbXBzdHIod2Via2l0X29wdGlvbl9t
ZW51X2l0ZW1fZ2V0X2xhYmVsKGl0ZW0pLCA9PSwgIlRhaWwiKTsKKyAgICBnX2Fzc2VydCghd2Vi
a2l0X29wdGlvbl9tZW51X2l0ZW1fZ2V0X3Rvb2x0aXAoaXRlbSkpOworICAgIGdfYXNzZXJ0KCF3
ZWJraXRfb3B0aW9uX21lbnVfaXRlbV9pc19ncm91cF9sYWJlbChpdGVtKSk7CisgICAgZ19hc3Nl
cnQoIXdlYmtpdF9vcHRpb25fbWVudV9pdGVtX2lzX2dyb3VwX2NoaWxkKGl0ZW0pKTsKKyAgICBn
X2Fzc2VydCh3ZWJraXRfb3B0aW9uX21lbnVfaXRlbV9pc19lbmFibGVkKGl0ZW0pKTsKKyAgICBn
X2Fzc2VydCghd2Via2l0X29wdGlvbl9tZW51X2l0ZW1faXNfc2VsZWN0ZWQoaXRlbSkpOworfQor
CitzdGF0aWMgdm9pZCB0ZXN0T3B0aW9uTWVudUFjdGl2YXRlKE9wdGlvbk1lbnVUZXN0KiB0ZXN0
LCBnY29uc3Rwb2ludGVyKQoreworICAgIHN0YXRpYyBjb25zdCBjaGFyIGh0bWxbXSA9CisgICAg
ICAgICI8aHRtbD48Ym9keT4iCisgICAgICAgICIgIDxzZWxlY3QgaWQ9J2NvbWJvJyBzdHlsZT0n
cG9zaXRpb246YWJzb2x1dGU7IGxlZnQ6MTsgdG9wOjEwJz4iCisgICAgICAgICIgICAgPG9wdGlv
bj5Gb288L29wdGlvbj4iCisgICAgICAgICIgICAgPG9wdGlvbj5CYXI8L29wdGlvbj4iCisgICAg
ICAgICIgICAgPG9wdGlvbj5CYXo8L29wdGlvbj4iCisgICAgICAgICIgIDwvc2VsZWN0PjwvYm9k
eT48L2h0bWw+IjsKKyAgICB0ZXN0LT5zaG93SW5XaW5kb3dBbmRXYWl0VW50aWxNYXBwZWQoKTsK
KyAgICB0ZXN0LT5sb2FkSHRtbChodG1sLCBudWxscHRyKTsKKyAgICB0ZXN0LT53YWl0VW50aWxM
b2FkRmluaXNoZWQoKTsKKworICAgIHRlc3QtPmNsaWNrQXRQb3NpdGlvbkFuZFdhaXRVbnRpbE9w
dGlvbk1lbnVTaG93big1LCAxNSk7CisgICAgZ19hc3NlcnQoV0VCS0lUX0lTX09QVElPTl9NRU5V
KHRlc3QtPm1fbWVudS5nZXQoKSkpOworICAgIGdfYXNzZXJ0X2NtcGludCh3ZWJraXRfb3B0aW9u
X21lbnVfZ2V0X25faXRlbXModGVzdC0+bV9tZW51LmdldCgpKSwgPT0sIDMpOworICAgIHRlc3Qt
PmFjdGl2YXRlSXRlbSgxKTsKKyAgICBhdXRvKiByZXN1bHQgPSB0ZXN0LT5ydW5KYXZhU2NyaXB0
QW5kV2FpdFVudGlsRmluaXNoZWQoImRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdjb21ibycpLnNl
bGVjdGVkSW5kZXgiLCBudWxscHRyKTsKKyAgICBnX2Fzc2VydChyZXN1bHQpOworICAgIGdfYXNz
ZXJ0X2NtcGZsb2F0KFdlYlZpZXdUZXN0OjpqYXZhc2NyaXB0UmVzdWx0VG9OdW1iZXIocmVzdWx0
KSwgPT0sIDEpOworCisgICAgLy8gV2Ugc2hvdWxkIGNsb3NlIHRoZSBtZW51IGFmdGVyIGFjdGl2
YXRlLCBmdXJ0aGVyIGFjdGl2YXRlcyB3aWxsIGJlIGlnbm9yZWQuCisgICAgdGVzdC0+YWN0aXZh
dGVJdGVtKDIpOworICAgIHJlc3VsdCA9IHRlc3QtPnJ1bkphdmFTY3JpcHRBbmRXYWl0VW50aWxG
aW5pc2hlZCgiZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2NvbWJvJykuc2VsZWN0ZWRJbmRleCIs
IG51bGxwdHIpOworICAgIGdfYXNzZXJ0KHJlc3VsdCk7CisgICAgZ19hc3NlcnRfY21wZmxvYXQo
V2ViVmlld1Rlc3Q6OmphdmFzY3JpcHRSZXN1bHRUb051bWJlcihyZXN1bHQpLCA9PSwgMSk7CisK
KyAgICB0ZXN0LT5jbG9zZSgpOworfQorCitzdGF0aWMgdm9pZCB0ZXN0T3B0aW9uTWVudVNlbGVj
dChPcHRpb25NZW51VGVzdCogdGVzdCwgZ2NvbnN0cG9pbnRlcikKK3sKKyAgICBzdGF0aWMgY29u
c3QgY2hhciBodG1sW10gPQorICAgICAgICAiPGh0bWw+PGJvZHk+IgorICAgICAgICAiICA8c2Vs
ZWN0IGlkPSdjb21ibycgc3R5bGU9J3Bvc2l0aW9uOmFic29sdXRlOyBsZWZ0OjE7IHRvcDoxMCc+
IgorICAgICAgICAiICAgIDxvcHRpb24+Rm9vPC9vcHRpb24+IgorICAgICAgICAiICAgIDxvcHRp
b24+QmFyPC9vcHRpb24+IgorICAgICAgICAiICAgIDxvcHRpb24+QmF6PC9vcHRpb24+IgorICAg
ICAgICAiICA8L3NlbGVjdD48L2JvZHk+PC9odG1sPiI7CisgICAgdGVzdC0+c2hvd0luV2luZG93
QW5kV2FpdFVudGlsTWFwcGVkKCk7CisgICAgdGVzdC0+bG9hZEh0bWwoaHRtbCwgbnVsbHB0cik7
CisgICAgdGVzdC0+d2FpdFVudGlsTG9hZEZpbmlzaGVkKCk7CisKKyAgICB0ZXN0LT5jbGlja0F0
UG9zaXRpb25BbmRXYWl0VW50aWxPcHRpb25NZW51U2hvd24oNSwgMTUpOworICAgIGdfYXNzZXJ0
KFdFQktJVF9JU19PUFRJT05fTUVOVSh0ZXN0LT5tX21lbnUuZ2V0KCkpKTsKKyAgICBnX2Fzc2Vy
dF9jbXBpbnQod2Via2l0X29wdGlvbl9tZW51X2dldF9uX2l0ZW1zKHRlc3QtPm1fbWVudS5nZXQo
KSksID09LCAzKTsKKworICAgIC8vIFNlbGVjdCBpdGVtIGNoYW5nZXMgdGhlIGNvbWJvIHRleHQs
IGJ1dCBub3QgdGhlIGN1cnJlbnRseSBzZWxlY3RlZCBpdGVtLgorICAgIHRlc3QtPnNlbGVjdEl0
ZW0oMik7CisgICAgYXV0byogcmVzdWx0ID0gdGVzdC0+cnVuSmF2YVNjcmlwdEFuZFdhaXRVbnRp
bEZpbmlzaGVkKCJkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnY29tYm8nKS5zZWxlY3RlZEluZGV4
IiwgbnVsbHB0cik7CisgICAgZ19hc3NlcnQocmVzdWx0KTsKKyAgICBnX2Fzc2VydF9jbXBmbG9h
dChXZWJWaWV3VGVzdDo6amF2YXNjcmlwdFJlc3VsdFRvTnVtYmVyKHJlc3VsdCksID09LCAwKTsK
KworICAgIC8vIEl0IGNhbiBiZSBjYWxsZWQgbXVsdGlwbGUgdGltZXMuCisgICAgdGVzdC0+c2Vs
ZWN0SXRlbSgxKTsKKyAgICByZXN1bHQgPSB0ZXN0LT5ydW5KYXZhU2NyaXB0QW5kV2FpdFVudGls
RmluaXNoZWQoImRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdjb21ibycpLnNlbGVjdGVkSW5kZXgi
LCBudWxscHRyKTsKKyAgICBnX2Fzc2VydChyZXN1bHQpOworICAgIGdfYXNzZXJ0X2NtcGZsb2F0
KFdlYlZpZXdUZXN0OjpqYXZhc2NyaXB0UmVzdWx0VG9OdW1iZXIocmVzdWx0KSwgPT0sIDApOwor
CisgICAgLy8gQW5kIGNsb3NpbmcgdGhlIG1lbnUgYWN0aXZhdGVzIHRoZSBjdXJyZW50bHkgc2Vs
ZWN0ZWQgaXRlbS4KKyAgICB0ZXN0LT5jbG9zZSgpOworICAgIHJlc3VsdCA9IHRlc3QtPnJ1bkph
dmFTY3JpcHRBbmRXYWl0VW50aWxGaW5pc2hlZCgiZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2Nv
bWJvJykuc2VsZWN0ZWRJbmRleCIsIG51bGxwdHIpOworICAgIGdfYXNzZXJ0KHJlc3VsdCk7Cisg
ICAgZ19hc3NlcnRfY21wZmxvYXQoV2ViVmlld1Rlc3Q6OmphdmFzY3JpcHRSZXN1bHRUb051bWJl
cihyZXN1bHQpLCA9PSwgMSk7Cit9CisKK3ZvaWQgYmVmb3JlQWxsKCkKK3sKKyAgICBPcHRpb25N
ZW51VGVzdDo6YWRkKCJXZWJLaXRXZWJWaWV3IiwgIm9wdGlvbi1tZW51LXNpbXBsZSIsIHRlc3RP
cHRpb25NZW51U2ltcGxlKTsKKyAgICBPcHRpb25NZW51VGVzdDo6YWRkKCJXZWJLaXRXZWJWaWV3
IiwgIm9wdGlvbi1tZW51LWdyb3VwcyIsIHRlc3RPcHRpb25NZW51R3JvdXBzKTsKKyAgICBPcHRp
b25NZW51VGVzdDo6YWRkKCJXZWJLaXRXZWJWaWV3IiwgIm9wdGlvbi1tZW51LWFjdGl2YXRlIiwg
dGVzdE9wdGlvbk1lbnVBY3RpdmF0ZSk7CisgICAgT3B0aW9uTWVudVRlc3Q6OmFkZCgiV2ViS2l0
V2ViVmlldyIsICJvcHRpb24tbWVudS1zZWxlY3QiLCB0ZXN0T3B0aW9uTWVudVNlbGVjdCk7Cit9
CisKK3ZvaWQgYWZ0ZXJBbGwoKQoreworfQo=
</data>
<flag name="review"
          id="332901"
          type_id="1"
          status="+"
          setter="mcatanzaro"
    />
          </attachment>
      

    </bug>

</bugzilla>