<?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>118720</bug_id>
          
          <creation_ts>2013-07-16 01:31:35 -0700</creation_ts>
          <short_desc>Remove PDFViewController and WKView &quot;custom representations&quot;</short_desc>
          <delta_ts>2013-07-18 02:33:59 -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>WebKit2</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Tim Horton">thorton</reporter>
          <assigned_to name="Tim Horton">thorton</assigned_to>
          <cc>abecsi</cc>
    
    <cc>andersca</cc>
    
    <cc>ap</cc>
    
    <cc>cgarcia</cc>
    
    <cc>cmarcelo</cc>
    
    <cc>commit-queue</cc>
    
    <cc>gustavo</cc>
    
    <cc>luiz</cc>
    
    <cc>menard</cc>
    
    <cc>mrobinson</cc>
    
    <cc>noam</cc>
    
    <cc>zeno</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>908737</commentid>
    <comment_count>0</comment_count>
    <who name="Tim Horton">thorton</who>
    <bug_when>2013-07-16 01:31:35 -0700</bug_when>
    <thetext>They&apos;re no longer needed in light of PDFPlugin. None of the other ports use them at all.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>908739</commentid>
    <comment_count>1</comment_count>
      <attachid>206739</attachid>
    <who name="Tim Horton">thorton</who>
    <bug_when>2013-07-16 01:36:09 -0700</bug_when>
    <thetext>Created attachment 206739
patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>908741</commentid>
    <comment_count>2</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2013-07-16 01:36:56 -0700</bug_when>
    <thetext>Thanks for the patch. If this patch contains new public API please make sure it follows the guidelines for new WebKit2 GTK+ API. See http://trac.webkit.org/wiki/WebKitGTK/AddingNewWebKit2API</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>909010</commentid>
    <comment_count>3</comment_count>
      <attachid>206739</attachid>
    <who name="Alexey Proskuryakov">ap</who>
    <bug_when>2013-07-16 14:11:15 -0700</bug_when>
    <thetext>Comment on attachment 206739
patch

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

&gt; Source/WebKit2/UIProcess/WebPageProxy.cpp:1636
&gt;  bool WebPageProxy::supportsTextEncoding() const
&gt;  {
&gt; -    return !m_mainFrameHasCustomRepresentation &amp;&amp; m_mainFrame &amp;&amp; !m_mainFrame-&gt;isDisplayingStandaloneImageDocument();
&gt; +    return m_mainFrame &amp;&amp; !m_mainFrame-&gt;isDisplayingStandaloneImageDocument();

This looks wrong, image documents are not the only ones that don&apos;t support text encoding. Before PDFPlugin, this code did the same for PDFs, and really, shouldn&apos;t it be all non-text documents?

Could you file a bug and add a FIXME here?

&gt; Source/WebKit2/UIProcess/WebPageProxy.cpp:-1678
&gt;  bool WebPageProxy::supportsTextZoom() const
&gt;  {
&gt; -    if (m_mainFrameHasCustomRepresentation)
&gt; -        return false;

Ditto.

&gt; Source/WebKit2/UIProcess/WebPageProxy.cpp:-1693
&gt; -    if (m_mainFrameHasCustomRepresentation)
&gt; -        return;

Ditto?

&gt; Source/WebKit2/UIProcess/WebPageProxy.cpp:-1715
&gt; -    if (m_mainFrameHasCustomRepresentation) {
&gt; -        m_pageClient-&gt;setCustomRepresentationZoomFactor(zoomFactor);
&gt; -        return;
&gt; -    }

Hmm.

&gt; Source/WebKit2/UIProcess/WebPageProxy.cpp:-1732
&gt; -    if (m_mainFrameHasCustomRepresentation) {
&gt; -        m_pageClient-&gt;setCustomRepresentationZoomFactor(pageZoomFactor);
&gt; -        return;
&gt; -    }

Hmm!

&gt; Source/WebKit2/UIProcess/WebPageProxy.cpp:-2314
&gt; -            m_mainFrameIsPinnedToLeftSide = true;
&gt; -            m_mainFrameIsPinnedToRightSide = true;
&gt; -            m_mainFrameIsPinnedToTopSide = true;
&gt; -            m_mainFrameIsPinnedToBottomSide = true;

Can all associated code be deleted now, too?

&gt; Source/WebKit2/WebProcess/WebCoreSupport/WebFrameLoaderClient.h:47
&gt; +    virtual bool hasHTMLView() const OVERRIDE { return true; }
&gt;      virtual bool hasWebView() const OVERRIDE;

This is confusing. Not sure how to unconfuse.

&gt; Source/WebKit2/WebProcess/WebPage/mac/WebPageMac.mm:120
&gt;  bool WebPage::shouldUsePDFPlugin() const

When will be the right time to delete this?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>909673</commentid>
    <comment_count>4</comment_count>
      <attachid>206739</attachid>
    <who name="Tim Horton">thorton</who>
    <bug_when>2013-07-18 02:16:08 -0700</bug_when>
    <thetext>Comment on attachment 206739
patch

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

&gt;&gt; Source/WebKit2/UIProcess/WebPageProxy.cpp:-2314
&gt;&gt; -            m_mainFrameIsPinnedToBottomSide = true;
&gt; 
&gt; Can all associated code be deleted now, too?

No, it&apos;s used for things that are still important in normal web views.

&gt;&gt; Source/WebKit2/WebProcess/WebCoreSupport/WebFrameLoaderClient.h:47
&gt;&gt;      virtual bool hasWebView() const OVERRIDE;
&gt; 
&gt; This is confusing. Not sure how to unconfuse.

Could remove the override… the base class implementation just returns true. Wasn&apos;t sure that was sufficiently explicit.

&gt;&gt; Source/WebKit2/WebProcess/WebPage/mac/WebPageMac.mm:120
&gt;&gt;  bool WebPage::shouldUsePDFPlugin() const
&gt; 
&gt; When will be the right time to delete this?

Soon! There are more patches in this vein coming.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>909677</commentid>
    <comment_count>5</comment_count>
    <who name="Tim Horton">thorton</who>
    <bug_when>2013-07-18 02:33:59 -0700</bug_when>
    <thetext>http://trac.webkit.org/changeset/152841</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>206739</attachid>
            <date>2013-07-16 01:36:09 -0700</date>
            <delta_ts>2013-07-18 02:16:08 -0700</delta_ts>
            <desc>patch</desc>
            <filename>remove-pdfviewcontroller.diff</filename>
            <type>text/plain</type>
            <size>83096</size>
            <attacher name="Tim Horton">thorton</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJLaXQyL0No
YW5nZUxvZwppbmRleCA3YTAyNWM4Li5mM2JiNjk4IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0
Mi9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYktpdDIvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsNzMg
QEAKKzIwMTMtMDctMTYgIFRpbSBIb3J0b24gIDx0aW1vdGh5X2hvcnRvbkBhcHBsZS5jb20+CisK
KyAgICAgICAgUmVtb3ZlIFBERlZpZXdDb250cm9sbGVyIGFuZCBXS1ZpZXcgImN1c3RvbSByZXBy
ZXNlbnRhdGlvbnMiCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNn
aT9pZD0xMTg3MjAKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAg
ICAgICBQREZWaWV3Q29udHJvbGxlciB3YXMgdGhlIG9ubHkgaW1wbGVtZW50YXRpb24gb2YKKyAg
ICAgICAgYSAiY3VzdG9tIHJlcHJlc2VudGF0aW9uIiBmb3IgYSBXS1ZpZXcuIEFzIGl0IGhhcwor
ICAgICAgICBiZWVuIHN1cGVyY2VkZWQgYnkgUERGUGx1Z2luLCB3ZSBjYW4gcmVtb3ZlIGJvdGgK
KyAgICAgICAgUERGVmlld0NvbnRyb2xsZXIgYW5kIHRoZSBub3Rpb24gb2YgYSBXS1ZpZXcgY3Vz
dG9tCisgICAgICAgIHJlcHJlc2VudGF0aW9uLgorCisgICAgICAgICogVUlQcm9jZXNzL0FQSS9n
dGsvUGFnZUNsaWVudEltcGwuY3BwOgorICAgICAgICAqIFVJUHJvY2Vzcy9BUEkvZ3RrL1BhZ2VD
bGllbnRJbXBsLmg6CisgICAgICAgICogVUlQcm9jZXNzL0FQSS9tYWMvUERGVmlld0NvbnRyb2xs
ZXIuaDogUmVtb3ZlZC4KKyAgICAgICAgKiBVSVByb2Nlc3MvQVBJL21hYy9QREZWaWV3Q29udHJv
bGxlci5tbTogUmVtb3ZlZC4KKyAgICAgICAgKiBVSVByb2Nlc3MvQVBJL21hYy9QYWdlQ2xpZW50
SW1wbC5oOgorICAgICAgICAqIFVJUHJvY2Vzcy9BUEkvbWFjL1BhZ2VDbGllbnRJbXBsLm1tOgor
ICAgICAgICAqIFVJUHJvY2Vzcy9BUEkvbWFjL1dLVmlldy5tbToKKyAgICAgICAgKC1bV0tWaWV3
IGFjY2Vzc2liaWxpdHlGb2N1c2VkVUlFbGVtZW50XSk6CisgICAgICAgICgtW1dLVmlldyBhY2Nl
c3NpYmlsaXR5SGl0VGVzdDpdKToKKyAgICAgICAgKC1bV0tWaWV3IGFjY2Vzc2liaWxpdHlBdHRy
aWJ1dGVWYWx1ZTpdKToKKyAgICAgICAgKC1bV0tWaWV3IHByaW50T3BlcmF0aW9uV2l0aFByaW50
SW5mbzpmb3JGcmFtZTpdKToKKyAgICAgICAgKiBVSVByb2Nlc3MvQVBJL21hYy9XS1ZpZXdJbnRl
cm5hbC5oOgorICAgICAgICAqIFVJUHJvY2Vzcy9BUEkvcXQvcmF3L3FyYXd3ZWJ2aWV3X3BfcC5o
OgorICAgICAgICAqIFVJUHJvY2Vzcy9Db29yZGluYXRlZEdyYXBoaWNzL1dlYlZpZXcuY3BwOgor
ICAgICAgICAqIFVJUHJvY2Vzcy9Db29yZGluYXRlZEdyYXBoaWNzL1dlYlZpZXcuaDoKKyAgICAg
ICAgKiBVSVByb2Nlc3MvRHJhd2luZ0FyZWFQcm94eS5oOgorICAgICAgICAqIFVJUHJvY2Vzcy9E
cmF3aW5nQXJlYVByb3h5SW1wbC5jcHA6CisgICAgICAgICogVUlQcm9jZXNzL0RyYXdpbmdBcmVh
UHJveHlJbXBsLmg6CisgICAgICAgICogVUlQcm9jZXNzL1BhZ2VDbGllbnQuaDoKKyAgICAgICAg
KiBVSVByb2Nlc3MvV2ViUGFnZVByb3h5LmNwcDoKKyAgICAgICAgKFdlYktpdDo6V2ViUGFnZVBy
b3h5OjpXZWJQYWdlUHJveHkpOgorICAgICAgICAoV2ViS2l0OjpXZWJQYWdlUHJveHk6OnN1cHBv
cnRzVGV4dEVuY29kaW5nKToKKyAgICAgICAgKFdlYktpdDo6V2ViUGFnZVByb3h5OjpzdXBwb3J0
c1RleHRab29tKToKKyAgICAgICAgKFdlYktpdDo6V2ViUGFnZVByb3h5OjpzZXRUZXh0Wm9vbUZh
Y3Rvcik6CisgICAgICAgIChXZWJLaXQ6OldlYlBhZ2VQcm94eTo6c2V0UGFnZVpvb21GYWN0b3Ip
OgorICAgICAgICAoV2ViS2l0OjpXZWJQYWdlUHJveHk6OnNldFBhZ2VBbmRUZXh0Wm9vbUZhY3Rv
cnMpOgorICAgICAgICAoV2ViS2l0OjpXZWJQYWdlUHJveHk6OmZpbmRTdHJpbmcpOgorICAgICAg
ICAoV2ViS2l0OjpXZWJQYWdlUHJveHk6OmNvdW50U3RyaW5nTWF0Y2hlcyk6CisgICAgICAgIChX
ZWJLaXQ6OldlYlBhZ2VQcm94eTo6ZGlkQ29tbWl0TG9hZEZvckZyYW1lKToKKyAgICAgICAgKiBV
SVByb2Nlc3MvV2ViUGFnZVByb3h5Lmg6CisgICAgICAgIChXZWJLaXQ6OldlYlBhZ2VQcm94eTo6
dGV4dFpvb21GYWN0b3IpOgorICAgICAgICAoV2ViS2l0OjpXZWJQYWdlUHJveHk6OnBhZ2Vab29t
RmFjdG9yKToKKyAgICAgICAgKiBVSVByb2Nlc3MvV2ViUGFnZVByb3h5Lm1lc3NhZ2VzLmluOgor
ICAgICAgICAqIFVJUHJvY2Vzcy9xdC9RdFBhZ2VDbGllbnQuaDoKKyAgICAgICAgKiBXZWJLaXQy
Lnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2o6CisgICAgICAgICogV2ViUHJvY2Vzcy9XZWJDb3Jl
U3VwcG9ydC9XZWJGcmFtZUxvYWRlckNsaWVudC5jcHA6CisgICAgICAgIChXZWJLaXQ6OldlYkZy
YW1lTG9hZGVyQ2xpZW50OjpXZWJGcmFtZUxvYWRlckNsaWVudCk6CisgICAgICAgIChXZWJLaXQ6
OldlYkZyYW1lTG9hZGVyQ2xpZW50OjpkaXNwYXRjaERpZENvbW1pdExvYWQpOgorICAgICAgICAo
V2ViS2l0OjpXZWJGcmFtZUxvYWRlckNsaWVudDo6Y29tbWl0dGVkTG9hZCk6CisgICAgICAgIChX
ZWJLaXQ6OldlYkZyYW1lTG9hZGVyQ2xpZW50OjpmaW5pc2hlZExvYWRpbmcpOgorICAgICAgICAo
V2ViS2l0OjpXZWJGcmFtZUxvYWRlckNsaWVudDo6dHJhbnNpdGlvblRvQ29tbWl0dGVkRnJvbUNh
Y2hlZEZyYW1lKToKKyAgICAgICAgKFdlYktpdDo6V2ViRnJhbWVMb2FkZXJDbGllbnQ6OnRyYW5z
aXRpb25Ub0NvbW1pdHRlZEZvck5ld1BhZ2UpOgorICAgICAgICAqIFdlYlByb2Nlc3MvV2ViQ29y
ZVN1cHBvcnQvV2ViRnJhbWVMb2FkZXJDbGllbnQuaDoKKyAgICAgICAgKiBXZWJQcm9jZXNzL1dl
YlBhZ2UvRHJhd2luZ0FyZWEuaDoKKyAgICAgICAgKiBXZWJQcm9jZXNzL1dlYlBhZ2UvRHJhd2lu
Z0FyZWEubWVzc2FnZXMuaW46CisgICAgICAgICogV2ViUHJvY2Vzcy9XZWJQYWdlL0RyYXdpbmdB
cmVhSW1wbC5jcHA6CisgICAgICAgIChXZWJLaXQ6OkRyYXdpbmdBcmVhSW1wbDo6c2V0TmVlZHNE
aXNwbGF5SW5SZWN0KToKKyAgICAgICAgKFdlYktpdDo6RHJhd2luZ0FyZWFJbXBsOjpzY3JvbGwp
OgorICAgICAgICAoV2ViS2l0OjpEcmF3aW5nQXJlYUltcGw6OmV4aXRBY2NlbGVyYXRlZENvbXBv
c2l0aW5nTW9kZSk6CisgICAgICAgIChXZWJLaXQ6OkRyYXdpbmdBcmVhSW1wbDo6ZGlzcGxheSk6
CisgICAgICAgICogV2ViUHJvY2Vzcy9XZWJQYWdlL0RyYXdpbmdBcmVhSW1wbC5oOgorICAgICAg
ICAqIFdlYlByb2Nlc3MvV2ViUGFnZS9XZWJQYWdlLmNwcDoKKyAgICAgICAgKiBXZWJQcm9jZXNz
L1dlYlBhZ2UvV2ViUGFnZS5oOgorICAgICAgICAqIFdlYlByb2Nlc3MvV2ViUGFnZS9tYWMvV2Vi
UGFnZU1hYy5tbToKKyAgICAgICAgKFdlYktpdDo6V2ViUGFnZTo6cGxhdGZvcm1QcmVmZXJlbmNl
c0RpZENoYW5nZSk6CisgICAgICAgICogbWFjL1dlYktpdDIub3JkZXI6CisKIDIwMTMtMDctMTUg
IEthbmdpbCBIYW4gIDxrYW5naWwuaGFuQHNhbXN1bmcuY29tPgogCiAgICAgICAgIEludHJvZHVj
ZSB0b0hUTUxJRnJhbWVFbGVtZW50CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nl
c3MvQVBJL2d0ay9QYWdlQ2xpZW50SW1wbC5jcHAgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3Mv
QVBJL2d0ay9QYWdlQ2xpZW50SW1wbC5jcHAKaW5kZXggMGM2ZmEwMi4uOTM3YTllZiAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvUGFnZUNsaWVudEltcGwuY3Bw
CisrKyBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL1BhZ2VDbGllbnRJbXBsLmNw
cApAQCAtMjYwLDI1ICsyNjAsNiBAQCB2b2lkIFBhZ2VDbGllbnRJbXBsOjp1cGRhdGVBY2NlbGVy
YXRlZENvbXBvc2l0aW5nTW9kZShjb25zdCBMYXllclRyZWVDb250ZXh0JikKIH0KICNlbmRpZiAv
LyBVU0UoQUNDRUxFUkFURURfQ09NUE9TSVRJTkcpCiAKLXZvaWQgUGFnZUNsaWVudEltcGw6OmRp
ZENvbW1pdExvYWRGb3JNYWluRnJhbWUoYm9vbCB1c2VDdXN0b21SZXByZXNlbnRhdGlvbikKLXsK
LX0KLQotdm9pZCBQYWdlQ2xpZW50SW1wbDo6ZGlkRmluaXNoTG9hZGluZ0RhdGFGb3JDdXN0b21S
ZXByZXNlbnRhdGlvbihjb25zdCBTdHJpbmcmIHN1Z2dlc3RlZEZpbGVuYW1lLCBjb25zdCBDb3Jl
SVBDOjpEYXRhUmVmZXJlbmNlJikKLXsKLX0KLQotZG91YmxlIFBhZ2VDbGllbnRJbXBsOjpjdXN0
b21SZXByZXNlbnRhdGlvblpvb21GYWN0b3IoKQotewotICAgIG5vdEltcGxlbWVudGVkKCk7Ci0g
ICAgcmV0dXJuIDA7Ci19Ci0KLXZvaWQgUGFnZUNsaWVudEltcGw6OnNldEN1c3RvbVJlcHJlc2Vu
dGF0aW9uWm9vbUZhY3Rvcihkb3VibGUpCi17Ci0gICAgbm90SW1wbGVtZW50ZWQoKTsKLX0KLQog
dm9pZCBQYWdlQ2xpZW50SW1wbDo6cGFnZUNsb3NlZCgpCiB7CiAgICAgbm90SW1wbGVtZW50ZWQo
KTsKQEAgLTI5NCwxNiArMjc1LDYgQEAgdm9pZCBQYWdlQ2xpZW50SW1wbDo6Zmxhc2hCYWNraW5n
U3RvcmVVcGRhdGVzKGNvbnN0IFZlY3RvcjxJbnRSZWN0PiYpCiAgICAgbm90SW1wbGVtZW50ZWQo
KTsKIH0KIAotdm9pZCBQYWdlQ2xpZW50SW1wbDo6ZmluZFN0cmluZ0luQ3VzdG9tUmVwcmVzZW50
YXRpb24oY29uc3QgU3RyaW5nJiwgRmluZE9wdGlvbnMsIHVuc2lnbmVkKQotewotICAgIG5vdElt
cGxlbWVudGVkKCk7Ci19Ci0KLXZvaWQgUGFnZUNsaWVudEltcGw6OmNvdW50U3RyaW5nTWF0Y2hl
c0luQ3VzdG9tUmVwcmVzZW50YXRpb24oY29uc3QgU3RyaW5nJiwgRmluZE9wdGlvbnMsIHVuc2ln
bmVkKQotewotICAgIG5vdEltcGxlbWVudGVkKCk7Ci19Ci0KIHZvaWQgUGFnZUNsaWVudEltcGw6
OnVwZGF0ZVRleHRJbnB1dFN0YXRlKCkKIHsKICAgICB3ZWJraXRXZWJWaWV3QmFzZVVwZGF0ZVRl
eHRJbnB1dFN0YXRlKFdFQktJVF9XRUJfVklFV19CQVNFKG1fdmlld1dpZGdldCkpOwpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvUGFnZUNsaWVudEltcGwuaCBi
L1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL1BhZ2VDbGllbnRJbXBsLmgKaW5kZXgg
OWI4ZTkyZC4uZDllMDA3OCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQ
SS9ndGsvUGFnZUNsaWVudEltcGwuaAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJ
L2d0ay9QYWdlQ2xpZW50SW1wbC5oCkBAIC04OSw4ICs4OSw2IEBAIHByaXZhdGU6CiAgICAgdmly
dHVhbCB2b2lkIHNldEZpbmRJbmRpY2F0b3IoUGFzc1JlZlB0cjxGaW5kSW5kaWNhdG9yPiwgYm9v
bCBmYWRlT3V0LCBib29sIGFuaW1hdGUpOwogICAgIHZpcnR1YWwgdm9pZCBmbGFzaEJhY2tpbmdT
dG9yZVVwZGF0ZXMoY29uc3QgVmVjdG9yPFdlYkNvcmU6OkludFJlY3Q+JiB1cGRhdGVSZWN0cyk7
CiAgICAgdmlydHVhbCB2b2lkIGdldEVkaXRvckNvbW1hbmRzRm9yS2V5RXZlbnQoY29uc3QgTmF0
aXZlV2ViS2V5Ym9hcmRFdmVudCYsIGNvbnN0IEF0b21pY1N0cmluZyYsIFZlY3RvcjxXVEY6OlN0
cmluZz4mKTsKLSAgICB2aXJ0dWFsIHZvaWQgZmluZFN0cmluZ0luQ3VzdG9tUmVwcmVzZW50YXRp
b24oY29uc3QgU3RyaW5nJiwgRmluZE9wdGlvbnMsIHVuc2lnbmVkKTsKLSAgICB2aXJ0dWFsIHZv
aWQgY291bnRTdHJpbmdNYXRjaGVzSW5DdXN0b21SZXByZXNlbnRhdGlvbihjb25zdCBTdHJpbmcm
LCBGaW5kT3B0aW9ucywgdW5zaWduZWQpOwogICAgIHZpcnR1YWwgdm9pZCB1cGRhdGVUZXh0SW5w
dXRTdGF0ZSgpOwogICAgIHZpcnR1YWwgdm9pZCBzdGFydERyYWcoY29uc3QgV2ViQ29yZTo6RHJh
Z0RhdGEmLCBQYXNzUmVmUHRyPFNoYXJlYWJsZUJpdG1hcD4gZHJhZ0ltYWdlKTsKIApAQCAtMTAw
LDExICs5OCw2IEBAIHByaXZhdGU6CiAgICAgdmlydHVhbCB2b2lkIHVwZGF0ZUFjY2VsZXJhdGVk
Q29tcG9zaXRpbmdNb2RlKGNvbnN0IExheWVyVHJlZUNvbnRleHQmKTsKICNlbmRpZgogCi0gICAg
dmlydHVhbCB2b2lkIGRpZENvbW1pdExvYWRGb3JNYWluRnJhbWUoYm9vbCB1c2VDdXN0b21SZXBy
ZXNlbnRhdGlvbik7Ci0gICAgdmlydHVhbCB2b2lkIGRpZEZpbmlzaExvYWRpbmdEYXRhRm9yQ3Vz
dG9tUmVwcmVzZW50YXRpb24oY29uc3QgU3RyaW5nJiBzdWdnZXN0ZWRGaWxlbmFtZSwgY29uc3Qg
Q29yZUlQQzo6RGF0YVJlZmVyZW5jZSYpOwotICAgIHZpcnR1YWwgZG91YmxlIGN1c3RvbVJlcHJl
c2VudGF0aW9uWm9vbUZhY3RvcigpOwotICAgIHZpcnR1YWwgdm9pZCBzZXRDdXN0b21SZXByZXNl
bnRhdGlvblpvb21GYWN0b3IoZG91YmxlKTsKLQogICAgIHZpcnR1YWwgdm9pZCBoYW5kbGVEb3du
bG9hZFJlcXVlc3QoRG93bmxvYWRQcm94eSopOwogCiAgICAgLy8gTWVtYmVycyBvZiBQYWdlQ2xp
ZW50SW1wbCBjbGFzcwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9t
YWMvUERGVmlld0NvbnRyb2xsZXIuaCBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvbWFj
L1BERlZpZXdDb250cm9sbGVyLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDI2NWQ3
ZDYuLjAwMDAwMDAKLS0tIGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9tYWMvUERGVmll
d0NvbnRyb2xsZXIuaAorKysgL2Rldi9udWxsCkBAIC0xLDk2ICswLDAgQEAKLS8qCi0gKiBDb3B5
cmlnaHQgKEMpIDIwMTAsIDIwMTEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoK
LSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdp
dGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRo
YXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmli
dXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJv
ZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVu
dGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0
aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQg
SVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKLSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVE
IFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogVEhFIElNUExJ
RUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElD
VUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUg
SU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElO
RElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBDT05TRVFVRU5U
SUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBP
RgotICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9S
IFBST0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFO
RCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09OVFJBQ1QsIFNU
UklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lT
RSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJF
LCBFVkVOIElGIEFEVklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4K
LSAqLwotCi0jaWZuZGVmIFBERlZpZXdDb250cm9sbGVyX2gKLSNkZWZpbmUgUERGVmlld0NvbnRy
b2xsZXJfaAotCi0jaW5jbHVkZSAiV2ViRmluZE9wdGlvbnMuaCIKLSNpbmNsdWRlIDx3dGYvRm9y
d2FyZC5oPgotI2luY2x1ZGUgPHd0Zi9Ob25jb3B5YWJsZS5oPgotI2luY2x1ZGUgPHd0Zi9QYXNz
T3duUHRyLmg+Ci0jaW5jbHVkZSA8d3RmL1JldGFpblB0ci5oPgotI2luY2x1ZGUgPHd0Zi90ZXh0
L1dURlN0cmluZy5oPgotCi1AY2xhc3MgUERGVmlldzsKLUBjbGFzcyBXS1ZpZXc7Ci1AY2xhc3Mg
V0tQREZWaWV3OwotCi1uYW1lc3BhY2UgQ29yZUlQQyB7Ci0gICAgY2xhc3MgRGF0YVJlZmVyZW5j
ZTsKLX0KLQotbmFtZXNwYWNlIFdlYktpdCB7Ci0KLWNsYXNzIFdlYlBhZ2VQcm94eTsKLQotY2xh
c3MgUERGVmlld0NvbnRyb2xsZXIgewotICAgIFdURl9NQUtFX05PTkNPUFlBQkxFKFBERlZpZXdD
b250cm9sbGVyKTsKLQotcHVibGljOgotICAgIHN0YXRpYyBQYXNzT3duUHRyPFBERlZpZXdDb250
cm9sbGVyPiBjcmVhdGUoV0tWaWV3ICopOwotICAgIH5QREZWaWV3Q29udHJvbGxlcigpOwotCi0g
ICAgV0tWaWV3KiB3a1ZpZXcoKSBjb25zdCB7IHJldHVybiBtX3drVmlldzsgfQotICAgIFdlYlBh
Z2VQcm94eSogcGFnZSgpIGNvbnN0OwotICAgIE5TVmlldyogcGRmVmlldygpIGNvbnN0OwotICAg
IAotICAgIHZvaWQgc2V0UERGRG9jdW1lbnREYXRhKGNvbnN0IFN0cmluZyYgbWltZVR5cGUsIGNv
bnN0IFN0cmluZyYgc3VnZ2VzdGVkRmlsZW5hbWUsIGNvbnN0IENvcmVJUEM6OkRhdGFSZWZlcmVu
Y2UmKTsKLQotICAgIGRvdWJsZSB6b29tRmFjdG9yKCkgY29uc3Q7Ci0gICAgdm9pZCBzZXRab29t
RmFjdG9yKGRvdWJsZSk7Ci0KLSAgICBzdGF0aWMgQ2xhc3MgcGRmUHJldmlld1ZpZXdDbGFzcygp
OwotCi0gICAgYm9vbCBmb3J3YXJkU2Nyb2xsV2hlZWxFdmVudChOU0V2ZW50ICopOwotCi0gICAg
TlNQcmludE9wZXJhdGlvbiAqbWFrZVByaW50T3BlcmF0aW9uKE5TUHJpbnRJbmZvICopOwotICAg
IHZvaWQgb3BlblBERkluRmluZGVyKCk7Ci0gICAgdm9pZCBzYXZlUERGVG9Eb3dubG9hZHNGb2xk
ZXIoKTsKLSAgICB2b2lkIGxpbmtDbGlja2VkKGNvbnN0IFN0cmluZyYgdXJsKTsKLSAgICB2b2lk
IHByaW50KCk7Ci0KLSAgICB2b2lkIGZpbmRTdHJpbmcoY29uc3QgU3RyaW5nJiwgRmluZE9wdGlv
bnMsIHVuc2lnbmVkIG1heE1hdGNoQ291bnQpOwotICAgIHZvaWQgY291bnRTdHJpbmdNYXRjaGVz
KGNvbnN0IFN0cmluZyYsIEZpbmRPcHRpb25zLCB1bnNpZ25lZCBtYXhNYXRjaENvdW50KTsKLQot
cHJpdmF0ZToKLSAgICBleHBsaWNpdCBQREZWaWV3Q29udHJvbGxlcihXS1ZpZXcgKndrVmlldyk7
Ci0KLSAgICBzdGF0aWMgQ2xhc3MgcGRmRG9jdW1lbnRDbGFzcygpOwotICAgIHN0YXRpYyBOU0J1
bmRsZSogcGRmS2l0QnVuZGxlKCk7Ci0KLSAgICBXS1ZpZXcqIG1fd2tWaWV3OwotCi0gICAgUmV0
YWluUHRyPFdLUERGVmlldz4gbV93a1BERlZpZXc7Ci0gICAgUERGVmlldyogbV9wZGZWaWV3Owot
Ci0gICAgUmV0YWluUHRyPE5TU3RyaW5nPiBtX3N1Z2dlc3RlZEZpbGVuYW1lOwotICAgIFJldGFp
blB0cjxDRkRhdGFSZWY+IG1fcGRmRGF0YTsKLQotICAgIFN0cmluZyBtX3RlbXBvcmFyeVBERlVV
SUQ7Ci19OwotCi19IC8vIG5hbWVzcGFjZSBXZWJLaXQKLQotI2VuZGlmIC8vIFBERlZpZXdDb250
cm9sbGVyX2gKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvbWFjL1BE
RlZpZXdDb250cm9sbGVyLm1tIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9tYWMvUERG
Vmlld0NvbnRyb2xsZXIubW0KZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDg0MzZjNWQu
LjAwMDAwMDAKLS0tIGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9tYWMvUERGVmlld0Nv
bnRyb2xsZXIubW0KKysrIC9kZXYvbnVsbApAQCAtMSw2NzggKzAsMCBAQAotLyoKLSAqIENvcHly
aWdodCAoQykgMjAxMCwgMjAxMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgot
ICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0
aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhh
dCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1
dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9k
dWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50
YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRp
b24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJ
VFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwotICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQg
V0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBUSEUgSU1QTElF
RCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNV
TEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJ
TkMuIE9SIElUUyBDT05UUklCVVRPUlMKLSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5E
SVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJ
QUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9G
Ci0gKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1Ig
UFJPRklUUzsgT1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5E
IE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCi0gKiBDT05UUkFDVCwgU1RS
SUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNF
KQotICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUs
IEVWRU4gSUYgQURWSVNFRCBPRgotICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgot
ICovCi0KLSNpbXBvcnQgImNvbmZpZy5oIgotI2ltcG9ydCAiUERGVmlld0NvbnRyb2xsZXIuaCIK
LQotI2ltcG9ydCAiRGF0YVJlZmVyZW5jZS5oIgotI2ltcG9ydCAiV0tBUElDYXN0LmgiCi0jaW1w
b3J0ICJXS1ZpZXdQcml2YXRlLmgiCi0jaW1wb3J0ICJXZWJEYXRhLmgiCi0jaW1wb3J0ICJXZWJF
dmVudEZhY3RvcnkuaCIKLSNpbXBvcnQgIldlYlBhZ2VHcm91cC5oIgotI2ltcG9ydCAiV2ViUGFn
ZVByb3h5LmgiCi0jaW1wb3J0ICJXZWJQcmVmZXJlbmNlcy5oIgotI2ltcG9ydCA8UERGS2l0L1BE
RktpdC5oPgotI2ltcG9ydCA8V2ViQ29yZS9Mb2NhbGl6ZWRTdHJpbmdzLmg+Ci0jaW1wb3J0IDxX
ZWJDb3JlL1VVSUQuaD4KLSNpbXBvcnQgPHd0Zi9PYmpjUnVudGltZUV4dHJhcy5oPgotI2ltcG9y
dCA8d3RmL3RleHQvQ1N0cmluZy5oPgotI2ltcG9ydCA8d3RmL3RleHQvV1RGU3RyaW5nLmg+Ci0K
LS8vIFJlZGVjbGFyYXRpb25zIG9mIFBERktpdCBub3RpZmljYXRpb25zLiBXZSBjYW4ndCB1c2Ug
dGhlIEFQSSBzaW5jZSB3ZSB1c2UgYSB3ZWFrIGxpbmsgdG8gdGhlIGZyYW1ld29yay4KLSNkZWZp
bmUgX3dlYmtpdF9QREZWaWV3RGlzcGxheU1vZGVDaGFuZ2VkTm90aWZpY2F0aW9uIEAiUERGVmll
d0Rpc3BsYXlNb2RlQ2hhbmdlZCIKLSNkZWZpbmUgX3dlYmtpdF9QREZWaWV3U2NhbGVDaGFuZ2Vk
Tm90aWZpY2F0aW9uIEAiUERGVmlld1NjYWxlQ2hhbmdlZCIKLSNkZWZpbmUgX3dlYmtpdF9QREZW
aWV3UGFnZUNoYW5nZWROb3RpZmljYXRpb24gQCJQREZWaWV3Q2hhbmdlZFBhZ2UiCi0KLXVzaW5n
IG5hbWVzcGFjZSBXZWJDb3JlOwotdXNpbmcgbmFtZXNwYWNlIFdlYktpdDsKLQotQGNsYXNzIFBE
RkRvY3VtZW50OwotQGNsYXNzIFBERlZpZXc7Ci0KLUBpbnRlcmZhY2UgUERGRG9jdW1lbnQgKFBE
RkRvY3VtZW50RGV0YWlscykKLS0gKE5TUHJpbnRPcGVyYXRpb24gKilnZXRQcmludE9wZXJhdGlv
bkZvclByaW50SW5mbzooTlNQcmludEluZm8gKilwcmludEluZm8gYXV0b1JvdGF0ZTooQk9PTClk
b1JvdGF0ZTsKLUBlbmQKLQotZXh0ZXJuICJDIiBOU1N0cmluZyAqX05TUGF0aEZvclN5c3RlbUZy
YW1ld29yayhOU1N0cmluZyAqZnJhbWV3b3JrKTsKLQotLy8gTUFSSzogQyBVVElMSVRZIEZVTkNU
SU9OUwotCi1zdGF0aWMgdm9pZCBfYXBwbGljYXRpb25JbmZvRm9yTUlNRVR5cGUoTlNTdHJpbmcg
KnR5cGUsIE5TU3RyaW5nICoqbmFtZSwgTlNJbWFnZSAqKmltYWdlKQotewotICAgIEFTU0VSVChu
YW1lKTsKLSAgICBBU1NFUlQoaW1hZ2UpOwotICAgIAotICAgIENGVVJMUmVmIGFwcFVSTCA9IDA7
Ci0KLSAgICBPU1N0YXR1cyBlcnJvciA9IExTQ29weUFwcGxpY2F0aW9uRm9yTUlNRVR5cGUoKENG
U3RyaW5nUmVmKXR5cGUsIGtMU1JvbGVzQWxsLCAmYXBwVVJMKTsKLSAgICBpZiAoZXJyb3IgIT0g
bm9FcnIpCi0gICAgICAgIHJldHVybjsKLQotICAgIE5TU3RyaW5nICphcHBQYXRoID0gWyhOU1VS
TCAqKWFwcFVSTCBwYXRoXTsKLSAgICBpZiAoYXBwVVJMKQotICAgICAgICBDRlJlbGVhc2UoYXBw
VVJMKTsKLQotICAgICppbWFnZSA9IFtbTlNXb3Jrc3BhY2Ugc2hhcmVkV29ya3NwYWNlXSBpY29u
Rm9yRmlsZTphcHBQYXRoXTsKLSAgICBbKmltYWdlIHNldFNpemU6TlNNYWtlU2l6ZSgxNiwgMTYp
XTsKLQotICAgICpuYW1lID0gW1tOU0ZpbGVNYW5hZ2VyIGRlZmF1bHRNYW5hZ2VyXSBkaXNwbGF5
TmFtZUF0UGF0aDphcHBQYXRoXTsKLX0KLQotLy8gRklYTUUgNDE4Mjg3NjogV2UgY2FuIGVsaW1p
bmF0ZSB0aGlzIGZ1bmN0aW9uIGluIGZhdm9yIGlmIC1pc0VxdWFsOiBpZiBbUERGU2VsZWN0aW9u
IGlzRXF1YWw6XSBpcyBvdmVycmlkZGVuCi0vLyB0byBjb21wYXJlIGNvbnRlbnRzLgotc3RhdGlj
IEJPT0wgX1BERlNlbGVjdGlvbnNBcmVFcXVhbChQREZTZWxlY3Rpb24gKnNlbGVjdGlvbkEsIFBE
RlNlbGVjdGlvbiAqc2VsZWN0aW9uQikKLXsKLSAgICBOU0FycmF5ICphUGFnZXMgPSBbc2VsZWN0
aW9uQSBwYWdlc107Ci0gICAgTlNBcnJheSAqYlBhZ2VzID0gW3NlbGVjdGlvbkIgcGFnZXNdOwot
Ci0gICAgaWYgKCFbYVBhZ2VzIGlzRXF1YWw6YlBhZ2VzXSkKLSAgICAgICAgcmV0dXJuIE5POwot
Ci0gICAgTlNVSW50ZWdlciBjb3VudCA9IFthUGFnZXMgY291bnRdOwotICAgIGZvciAoTlNVSW50
ZWdlciBpID0gMDsgaSA8IGNvdW50OyArK2kpIHsKLSAgICAgICAgTlNSZWN0IGFCb3VuZHMgPSBb
c2VsZWN0aW9uQSBib3VuZHNGb3JQYWdlOlthUGFnZXMgb2JqZWN0QXRJbmRleDppXV07Ci0gICAg
ICAgIE5TUmVjdCBiQm91bmRzID0gW3NlbGVjdGlvbkIgYm91bmRzRm9yUGFnZTpbYlBhZ2VzIG9i
amVjdEF0SW5kZXg6aV1dOwotICAgICAgICBpZiAoIU5TRXF1YWxSZWN0cyhhQm91bmRzLCBiQm91
bmRzKSkKLSAgICAgICAgICAgIHJldHVybiBOTzsKLSAgICB9Ci0KLSAgICByZXR1cm4gWUVTOwot
fQotCi1AaW50ZXJmYWNlIFdLUERGVmlldyA6IE5TVmlldwotewotICAgIFBERlZpZXdDb250cm9s
bGVyKiBfcGRmVmlld0NvbnRyb2xsZXI7Ci0KLSAgICBSZXRhaW5QdHI8TlNWaWV3PiBfcGRmUHJl
dmlld1ZpZXc7Ci0gICAgUERGVmlldyAqX3BkZlZpZXc7Ci0gICAgQk9PTCBfaWdub3JlU2NhbGVB
bmREaXNwbGF5TW9kZUFuZFBhZ2VOb3RpZmljYXRpb25zOwotICAgIEJPT0wgX3dpbGxVcGRhdGVQ
cmVmZXJlbmNlc1Nvb247Ci19Ci0KLS0gKGlkKWluaXRXaXRoRnJhbWU6KE5TUmVjdClmcmFtZSBQ
REZWaWV3Q29udHJvbGxlcjooUERGVmlld0NvbnRyb2xsZXIqKXBkZlZpZXdDb250cm9sbGVyOwot
LSAodm9pZClpbnZhbGlkYXRlOwotLSAoUERGVmlldyAqKXBkZlZpZXc7Ci0tICh2b2lkKXNldERv
Y3VtZW50OihQREZEb2N1bWVudCAqKXBkZkRvY3VtZW50OwotCi0tIChCT09MKWZvcndhcmRTY3Jv
bGxXaGVlbEV2ZW50OihOU0V2ZW50ICopd2hlZWxFdmVudDsKLS0gKHZvaWQpX2FwcGx5UERGUHJl
ZmVyZW5jZXM7Ci0tIChQREZTZWxlY3Rpb24gKilfbmV4dE1hdGNoRm9yOihOU1N0cmluZyAqKXN0
cmluZyBkaXJlY3Rpb246KEJPT0wpZm9yd2FyZCBjYXNlU2Vuc2l0aXZlOihCT09MKWNhc2VGbGFn
IHdyYXA6KEJPT0wpd3JhcEZsYWcgZnJvbVNlbGVjdGlvbjooUERGU2VsZWN0aW9uICopaW5pdGlh
bFNlbGVjdGlvbiBzdGFydEluU2VsZWN0aW9uOihCT09MKXN0YXJ0SW5TZWxlY3Rpb247Ci1AZW5k
Ci0KLUBpbXBsZW1lbnRhdGlvbiBXS1BERlZpZXcKLQotLSAoaWQpaW5pdFdpdGhGcmFtZTooTlNS
ZWN0KWZyYW1lIFBERlZpZXdDb250cm9sbGVyOihQREZWaWV3Q29udHJvbGxlciopcGRmVmlld0Nv
bnRyb2xsZXIKLXsKLSAgICBpZiAoKHNlbGYgPSBbc3VwZXIgaW5pdFdpdGhGcmFtZTpmcmFtZV0p
KSB7Ci0gICAgICAgIF9wZGZWaWV3Q29udHJvbGxlciA9IHBkZlZpZXdDb250cm9sbGVyOwotCi0g
ICAgICAgIFtzZWxmIHNldEF1dG9yZXNpemluZ01hc2s6TlNWaWV3V2lkdGhTaXphYmxlIHwgTlNW
aWV3SGVpZ2h0U2l6YWJsZV07Ci0KLSAgICAgICAgQ2xhc3MgcHJldmlld1ZpZXdDbGFzcyA9IFBE
RlZpZXdDb250cm9sbGVyOjpwZGZQcmV2aWV3Vmlld0NsYXNzKCk7Ci0gICAgICAgIEFTU0VSVChw
cmV2aWV3Vmlld0NsYXNzKTsKLQotICAgICAgICBfcGRmUHJldmlld1ZpZXcgPSBhZG9wdE5TKFtb
cHJldmlld1ZpZXdDbGFzcyBhbGxvY10gaW5pdFdpdGhGcmFtZTpmcmFtZV0pOwotICAgICAgICBb
X3BkZlByZXZpZXdWaWV3LmdldCgpIHNldEF1dG9yZXNpemluZ01hc2s6TlNWaWV3V2lkdGhTaXph
YmxlIHwgTlNWaWV3SGVpZ2h0U2l6YWJsZV07Ci0gICAgICAgIFtzZWxmIGFkZFN1YnZpZXc6X3Bk
ZlByZXZpZXdWaWV3LmdldCgpXTsKLQotICAgICAgICBfcGRmVmlldyA9IFtfcGRmUHJldmlld1Zp
ZXcuZ2V0KCkgcGVyZm9ybVNlbGVjdG9yOkBzZWxlY3RvcihwZGZWaWV3KV07Ci0gICAgICAgIFtf
cGRmVmlldyBzZXREZWxlZ2F0ZTpzZWxmXTsKLSAgICB9Ci0KLSAgICByZXR1cm4gc2VsZjsKLX0K
LQotLSAodm9pZClpbnZhbGlkYXRlCi17Ci0gICAgX3BkZlZpZXdDb250cm9sbGVyID0gMDsKLX0K
LQotLSAoUERGVmlldyAqKXBkZlZpZXcKLXsKLSAgICByZXR1cm4gX3BkZlZpZXc7Ci19Ci0KLS0g
KHZvaWQpc2V0RG9jdW1lbnQ6KFBERkRvY3VtZW50ICopcGRmRG9jdW1lbnQKLXsKLSAgICBfaWdu
b3JlU2NhbGVBbmREaXNwbGF5TW9kZUFuZFBhZ2VOb3RpZmljYXRpb25zID0gWUVTOwotICAgIFtf
cGRmVmlldyBzZXREb2N1bWVudDpwZGZEb2N1bWVudF07Ci0gICAgW3NlbGYgX2FwcGx5UERGUHJl
ZmVyZW5jZXNdOwotICAgIF9pZ25vcmVTY2FsZUFuZERpc3BsYXlNb2RlQW5kUGFnZU5vdGlmaWNh
dGlvbnMgPSBOTzsKLX0KLQotLSAodm9pZClfYXBwbHlQREZQcmVmZXJlbmNlcwotewotICAgIGlm
ICghX3BkZlZpZXdDb250cm9sbGVyKQotICAgICAgICByZXR1cm47Ci0KLSAgICBXZWJQcmVmZXJl
bmNlcyAqcHJlZmVyZW5jZXMgPSBfcGRmVmlld0NvbnRyb2xsZXItPnBhZ2UoKS0+cGFnZUdyb3Vw
KCktPnByZWZlcmVuY2VzKCk7Ci0KLSAgICBDR0Zsb2F0IHNjYWxlRmFjdG9yID0gcHJlZmVyZW5j
ZXMtPnBkZlNjYWxlRmFjdG9yKCk7Ci0gICAgaWYgKCFzY2FsZUZhY3RvcikKLSAgICAgICAgW19w
ZGZWaWV3IHNldEF1dG9TY2FsZXM6WUVTXTsKLSAgICBlbHNlIHsKLSAgICAgICAgW19wZGZWaWV3
IHNldEF1dG9TY2FsZXM6Tk9dOwotICAgICAgICBbX3BkZlZpZXcgc2V0U2NhbGVGYWN0b3I6c2Nh
bGVGYWN0b3JdOwotICAgIH0KLSAgICBbX3BkZlZpZXcgc2V0RGlzcGxheU1vZGU6cHJlZmVyZW5j
ZXMtPnBkZkRpc3BsYXlNb2RlKCldOwotfQotCi0tICh2b2lkKV91cGRhdGVQcmVmZXJlbmNlczoo
aWQpaWdub3JlZAotewotICAgIF93aWxsVXBkYXRlUHJlZmVyZW5jZXNTb29uID0gTk87Ci0KLSAg
ICBpZiAoIV9wZGZWaWV3Q29udHJvbGxlcikKLSAgICAgICAgcmV0dXJuOwotCi0gICAgV2ViUHJl
ZmVyZW5jZXMqIHByZWZlcmVuY2VzID0gX3BkZlZpZXdDb250cm9sbGVyLT5wYWdlKCktPnBhZ2VH
cm91cCgpLT5wcmVmZXJlbmNlcygpOwotCi0gICAgQ0dGbG9hdCBzY2FsZUZhY3RvciA9IFtfcGRm
VmlldyBhdXRvU2NhbGVzXSA/IDAgOiBbX3BkZlZpZXcgc2NhbGVGYWN0b3JdOwotICAgIHByZWZl
cmVuY2VzLT5zZXRQREZTY2FsZUZhY3RvcihzY2FsZUZhY3Rvcik7Ci0gICAgcHJlZmVyZW5jZXMt
PnNldFBERkRpc3BsYXlNb2RlKFtfcGRmVmlldyBkaXNwbGF5TW9kZV0pOwotfQotCi0tICh2b2lk
KV91cGRhdGVQcmVmZXJlbmNlc1Nvb24KLXsgICAKLSAgICBpZiAoX3dpbGxVcGRhdGVQcmVmZXJl
bmNlc1Nvb24pCi0gICAgICAgIHJldHVybjsKLQotICAgIFtzZWxmIHBlcmZvcm1TZWxlY3RvcjpA
c2VsZWN0b3IoX3VwZGF0ZVByZWZlcmVuY2VzOikgd2l0aE9iamVjdDpuaWwgYWZ0ZXJEZWxheTow
XTsKLSAgICBfd2lsbFVwZGF0ZVByZWZlcmVuY2VzU29vbiA9IFlFUzsKLX0KLQotLSAodm9pZClf
c2NhbGVPckRpc3BsYXlNb2RlT3JQYWdlQ2hhbmdlZDooTlNOb3RpZmljYXRpb24gKilub3RpZmlj
YXRpb24KLXsKLSAgICBBU1NFUlRfQVJHKG5vdGlmaWNhdGlvbiwgW25vdGlmaWNhdGlvbiBvYmpl
Y3RdID09IF9wZGZWaWV3KTsKLSAgICBpZiAoIV9pZ25vcmVTY2FsZUFuZERpc3BsYXlNb2RlQW5k
UGFnZU5vdGlmaWNhdGlvbnMpCi0gICAgICAgIFtzZWxmIF91cGRhdGVQcmVmZXJlbmNlc1Nvb25d
OwotfQotCi0tICh2b2lkKV9vcGVuV2l0aEZpbmRlcjooaWQpc2VuZGVyCi17Ci0gICAgX3BkZlZp
ZXdDb250cm9sbGVyLT5vcGVuUERGSW5GaW5kZXIoKTsKLX0KLQotLSAoUERGU2VsZWN0aW9uICop
X25leHRNYXRjaEZvcjooTlNTdHJpbmcgKilzdHJpbmcgZGlyZWN0aW9uOihCT09MKWZvcndhcmQg
Y2FzZVNlbnNpdGl2ZTooQk9PTCljYXNlRmxhZyB3cmFwOihCT09MKXdyYXBGbGFnIGZyb21TZWxl
Y3Rpb246KFBERlNlbGVjdGlvbiAqKWluaXRpYWxTZWxlY3Rpb24gc3RhcnRJblNlbGVjdGlvbjoo
Qk9PTClzdGFydEluU2VsZWN0aW9uCi17Ci0gICAgaWYgKCFbc3RyaW5nIGxlbmd0aF0pCi0gICAg
ICAgIHJldHVybiBuaWw7Ci0KLSAgICBpbnQgb3B0aW9ucyA9IDA7Ci0gICAgaWYgKCFmb3J3YXJk
KQotICAgICAgICBvcHRpb25zIHw9IE5TQmFja3dhcmRzU2VhcmNoOwotCi0gICAgaWYgKCFjYXNl
RmxhZykKLSAgICAgICAgb3B0aW9ucyB8PSBOU0Nhc2VJbnNlbnNpdGl2ZVNlYXJjaDsKLQotICAg
IFBERkRvY3VtZW50ICpkb2N1bWVudCA9IFtfcGRmVmlldyBkb2N1bWVudF07Ci0KLSAgICBQREZT
ZWxlY3Rpb24gKnNlbGVjdGlvbkZvckluaXRpYWxTZWFyY2ggPSBbaW5pdGlhbFNlbGVjdGlvbiBj
b3B5XTsKLSAgICBpZiAoc3RhcnRJblNlbGVjdGlvbikgewotICAgICAgICAvLyBJbml0aWFsbHkg
d2Ugd2FudCB0byBpbmNsdWRlIHRoZSBzZWxlY3RlZCB0ZXh0IGluIHRoZSBzZWFyY2guICBTbyB3
ZSBtdXN0IG1vZGlmeSB0aGUgc3RhcnRpbmcgc2VhcmNoIAotICAgICAgICAvLyBzZWxlY3Rpb24g
dG8gZml0IFBERkRvY3VtZW50J3Mgc2VhcmNoIHJlcXVpcmVtZW50czogc2VsZWN0aW9uIG11c3Qg
aGF2ZSBhIGxlbmd0aCA+PSAxLCBiZWdpbiBiZWZvcmUgCi0gICAgICAgIC8vIHRoZSBjdXJyZW50
IHNlbGVjdGlvbiAoaWYgc2VhcmNoaW5nIGZvcndhcmRzKSBvciBhZnRlciAoaWYgc2VhcmNoaW5n
IGJhY2t3YXJkcykuCi0gICAgICAgIGludCBpbml0aWFsU2VsZWN0aW9uTGVuZ3RoID0gW1tpbml0
aWFsU2VsZWN0aW9uIHN0cmluZ10gbGVuZ3RoXTsKLSAgICAgICAgaWYgKGZvcndhcmQpIHsKLSAg
ICAgICAgICAgIFtzZWxlY3Rpb25Gb3JJbml0aWFsU2VhcmNoIGV4dGVuZFNlbGVjdGlvbkF0U3Rh
cnQ6MV07Ci0gICAgICAgICAgICBbc2VsZWN0aW9uRm9ySW5pdGlhbFNlYXJjaCBleHRlbmRTZWxl
Y3Rpb25BdEVuZDotaW5pdGlhbFNlbGVjdGlvbkxlbmd0aF07Ci0gICAgICAgIH0gZWxzZSB7Ci0g
ICAgICAgICAgICBbc2VsZWN0aW9uRm9ySW5pdGlhbFNlYXJjaCBleHRlbmRTZWxlY3Rpb25BdEVu
ZDoxXTsKLSAgICAgICAgICAgIFtzZWxlY3Rpb25Gb3JJbml0aWFsU2VhcmNoIGV4dGVuZFNlbGVj
dGlvbkF0U3RhcnQ6LWluaXRpYWxTZWxlY3Rpb25MZW5ndGhdOwotICAgICAgICB9Ci0gICAgfQot
ICAgIFBERlNlbGVjdGlvbiAqZm91bmRTZWxlY3Rpb24gPSBbZG9jdW1lbnQgZmluZFN0cmluZzpz
dHJpbmcgZnJvbVNlbGVjdGlvbjpzZWxlY3Rpb25Gb3JJbml0aWFsU2VhcmNoIHdpdGhPcHRpb25z
Om9wdGlvbnNdOwotICAgIFtzZWxlY3Rpb25Gb3JJbml0aWFsU2VhcmNoIHJlbGVhc2VdOwotCi0g
ICAgLy8gSWYgd2UgZmlyc3Qgc2VhcmNoZWQgaW4gdGhlIHNlbGVjdGlvbiwgYW5kIHdlIGZvdW5k
IHRoZSBzZWxlY3Rpb24sIHNlYXJjaCBhZ2FpbiBmcm9tIGp1c3QgcGFzdCB0aGUgc2VsZWN0aW9u
Ci0gICAgaWYgKHN0YXJ0SW5TZWxlY3Rpb24gJiYgX1BERlNlbGVjdGlvbnNBcmVFcXVhbChmb3Vu
ZFNlbGVjdGlvbiwgaW5pdGlhbFNlbGVjdGlvbikpCi0gICAgICAgIGZvdW5kU2VsZWN0aW9uID0g
W2RvY3VtZW50IGZpbmRTdHJpbmc6c3RyaW5nIGZyb21TZWxlY3Rpb246aW5pdGlhbFNlbGVjdGlv
biB3aXRoT3B0aW9uczpvcHRpb25zXTsKLQotICAgIGlmICghZm91bmRTZWxlY3Rpb24gJiYgd3Jh
cEZsYWcpCi0gICAgICAgIGZvdW5kU2VsZWN0aW9uID0gW2RvY3VtZW50IGZpbmRTdHJpbmc6c3Ry
aW5nIGZyb21TZWxlY3Rpb246bmlsIHdpdGhPcHRpb25zOm9wdGlvbnNdOwotCi0gICAgcmV0dXJu
IGZvdW5kU2VsZWN0aW9uOwotfQotCi0tIChOU1VJbnRlZ2VyKV9jb3VudE1hdGNoZXM6KE5TU3Ry
aW5nICopc3RyaW5nIGNhc2VTZW5zaXRpdmU6KEJPT0wpY2FzZUZsYWcKLXsKLSAgICBpZiAoIVtz
dHJpbmcgbGVuZ3RoXSkKLSAgICAgICAgcmV0dXJuIDA7Ci0KLSAgICBpbnQgb3B0aW9ucyA9IGNh
c2VGbGFnID8gMCA6IE5TQ2FzZUluc2Vuc2l0aXZlU2VhcmNoOwotCi0gICAgcmV0dXJuIFtbW19w
ZGZWaWV3IGRvY3VtZW50XSBmaW5kU3RyaW5nOnN0cmluZyB3aXRoT3B0aW9uczpvcHRpb25zXSBj
b3VudF07Ci19Ci0KLS8vIE1BUks6IE5TVmlldyBvdmVycmlkZXMKLQotLSAodm9pZCl2aWV3RGlk
TW92ZVRvV2luZG93Ci17Ci0gICAgaWYgKCFbc2VsZiB3aW5kb3ddKQotICAgICAgICByZXR1cm47
Ci0KLSAgICBOU05vdGlmaWNhdGlvbkNlbnRlciAqbm90aWZpY2F0aW9uQ2VudGVyID0gW05TTm90
aWZpY2F0aW9uQ2VudGVyIGRlZmF1bHRDZW50ZXJdOwotICAgIFtub3RpZmljYXRpb25DZW50ZXIg
YWRkT2JzZXJ2ZXI6c2VsZiBzZWxlY3RvcjpAc2VsZWN0b3IoX3NjYWxlT3JEaXNwbGF5TW9kZU9y
UGFnZUNoYW5nZWQ6KSBuYW1lOl93ZWJraXRfUERGVmlld1NjYWxlQ2hhbmdlZE5vdGlmaWNhdGlv
biBvYmplY3Q6X3BkZlZpZXddOwotICAgIFtub3RpZmljYXRpb25DZW50ZXIgYWRkT2JzZXJ2ZXI6
c2VsZiBzZWxlY3RvcjpAc2VsZWN0b3IoX3NjYWxlT3JEaXNwbGF5TW9kZU9yUGFnZUNoYW5nZWQ6
KSBuYW1lOl93ZWJraXRfUERGVmlld0Rpc3BsYXlNb2RlQ2hhbmdlZE5vdGlmaWNhdGlvbiBvYmpl
Y3Q6X3BkZlZpZXddOwotICAgIFtub3RpZmljYXRpb25DZW50ZXIgYWRkT2JzZXJ2ZXI6c2VsZiBz
ZWxlY3RvcjpAc2VsZWN0b3IoX3NjYWxlT3JEaXNwbGF5TW9kZU9yUGFnZUNoYW5nZWQ6KSBuYW1l
Ol93ZWJraXRfUERGVmlld1BhZ2VDaGFuZ2VkTm90aWZpY2F0aW9uIG9iamVjdDpfcGRmVmlld107
Ci19Ci0KLS0gKHZvaWQpdmlld1dpbGxNb3ZlVG9XaW5kb3c6KE5TV2luZG93ICopbmV3V2luZG93
Ci17Ci0gICAgaWYgKCFbc2VsZiB3aW5kb3ddKQotICAgICAgICByZXR1cm47Ci0KLSAgICBOU05v
dGlmaWNhdGlvbkNlbnRlciAqbm90aWZpY2F0aW9uQ2VudGVyID0gW05TTm90aWZpY2F0aW9uQ2Vu
dGVyIGRlZmF1bHRDZW50ZXJdOwotICAgIFtub3RpZmljYXRpb25DZW50ZXIgcmVtb3ZlT2JzZXJ2
ZXI6c2VsZiBuYW1lOl93ZWJraXRfUERGVmlld1NjYWxlQ2hhbmdlZE5vdGlmaWNhdGlvbiBvYmpl
Y3Q6X3BkZlZpZXddOwotICAgIFtub3RpZmljYXRpb25DZW50ZXIgcmVtb3ZlT2JzZXJ2ZXI6c2Vs
ZiBuYW1lOl93ZWJraXRfUERGVmlld0Rpc3BsYXlNb2RlQ2hhbmdlZE5vdGlmaWNhdGlvbiBvYmpl
Y3Q6X3BkZlZpZXddOwotICAgIFtub3RpZmljYXRpb25DZW50ZXIgcmVtb3ZlT2JzZXJ2ZXI6c2Vs
ZiBuYW1lOl93ZWJraXRfUERGVmlld1BhZ2VDaGFuZ2VkTm90aWZpY2F0aW9uIG9iamVjdDpfcGRm
Vmlld107Ci19Ci0KLS0gKE5TVmlldyAqKWhpdFRlc3Q6KE5TUG9pbnQpcG9pbnQKLXsKLSAgICAv
LyBPdmVycmlkZSBoaXRUZXN0IHNvIHdlIGNhbiBvdmVycmlkZSBtZW51Rm9yRXZlbnQuCi0gICAg
TlNFdmVudCAqZXZlbnQgPSBbTlNBcHAgY3VycmVudEV2ZW50XTsKLSAgICBOU0V2ZW50VHlwZSB0
eXBlID0gW2V2ZW50IHR5cGVdOwotICAgIGlmICh0eXBlID09IE5TUmlnaHRNb3VzZURvd24gfHwg
KHR5cGUgPT0gTlNMZWZ0TW91c2VEb3duICYmIChbZXZlbnQgbW9kaWZpZXJGbGFnc10gJiBOU0Nv
bnRyb2xLZXlNYXNrKSkpCi0gICAgICAgIHJldHVybiBzZWxmOwotCi0gICAgcmV0dXJuIFtzdXBl
ciBoaXRUZXN0OnBvaW50XTsKLX0KLQotc3RhdGljIHZvaWQgaW5zZXJ0T3BlbldpdGhEZWZhdWx0
UERGTWVudUl0ZW0oTlNNZW51ICptZW51LCBOU1VJbnRlZ2VyIGluZGV4KQotewotICAgIC8vIEFk
ZCBpbiBhbiAiT3BlbiB3aXRoIDxkZWZhdWx0IFBERiB2aWV3ZXI+IiBpdGVtCi0gICAgTlNTdHJp
bmcgKmFwcE5hbWUgPSBuaWw7Ci0gICAgTlNJbWFnZSAqYXBwSWNvbiA9IG5pbDsKLSAgICAKLSAg
ICBfYXBwbGljYXRpb25JbmZvRm9yTUlNRVR5cGUoQCJhcHBsaWNhdGlvbi9wZGYiLCAmYXBwTmFt
ZSwgJmFwcEljb24pOwotICAgIGlmICghYXBwTmFtZSkKLSAgICAgICAgYXBwTmFtZSA9IFdFQl9V
SV9TVFJJTkcoIkZpbmRlciIsICJEZWZhdWx0IGFwcGxpY2F0aW9uIG5hbWUgZm9yIE9wZW4gV2l0
aCBjb250ZXh0IG1lbnUiKTsKLSAgICAKLSAgICAvLyBUbyBtYXRjaCB0aGUgUERGS2l0IHN0eWxl
LCB3ZSdsbCBhZGQgT3BlbiB3aXRoIFByZXZpZXcgZXZlbiB3aGVuIHRoZXJlJ3Mgbm8gZG9jdW1l
bnQgeWV0IHRvIHZpZXcsIGFuZAotICAgIC8vIGRpc2FibGUgaXQgdXNpbmcgdmFsaWRhdGVVc2Vy
SW50ZXJmYWNlSXRlbS4KLSAgICBOU1N0cmluZyAqdGl0bGUgPSBbTlNTdHJpbmcgc3RyaW5nV2l0
aEZvcm1hdDpXRUJfVUlfU1RSSU5HKCJPcGVuIHdpdGggJUAiLCAiY29udGV4dCBtZW51IGl0ZW0g
Zm9yIFBERiIpLCBhcHBOYW1lXTsKLSAgICAKLSAgICBOU01lbnVJdGVtICppdGVtID0gW1tOU01l
bnVJdGVtIGFsbG9jXSBpbml0V2l0aFRpdGxlOnRpdGxlIGFjdGlvbjpAc2VsZWN0b3IoX29wZW5X
aXRoRmluZGVyOikga2V5RXF1aXZhbGVudDpAIiJdOwotICAgIGlmIChhcHBJY29uKQotICAgICAg
ICBbaXRlbSBzZXRJbWFnZTphcHBJY29uXTsKLSAgICBbbWVudSBpbnNlcnRJdGVtOml0ZW0gYXRJ
bmRleDppbmRleF07Ci0gICAgW2l0ZW0gcmVsZWFzZV07Ci19Ci0KLS0gKE5TTWVudSAqKW1lbnVG
b3JFdmVudDooTlNFdmVudCAqKXRoZUV2ZW50Ci17Ci0gICAgTlNNZW51ICptZW51ID0gW1tOU01l
bnUgYWxsb2NdIGluaXRXaXRoVGl0bGU6QCIiXTsKLQotICAgIGJvb2wgaW5zZXJ0ZWRPcGVuV2l0
aEl0ZW0gPSBmYWxzZTsKLSAgICAKLSAgICBOU0VudW1lcmF0b3IgKm1lbnVJdGVtRW51bWVyYXRv
ciA9IFtbW19wZGZWaWV3IG1lbnVGb3JFdmVudDp0aGVFdmVudF0gaXRlbUFycmF5XSBvYmplY3RF
bnVtZXJhdG9yXTsKLSAgICB3aGlsZSAoTlNNZW51SXRlbSAqaXRlbSA9IFttZW51SXRlbUVudW1l
cmF0b3IgbmV4dE9iamVjdF0pIHsKLSAgICAgICAgTlNNZW51SXRlbSAqaXRlbUNvcHkgPSBbaXRl
bSBjb3B5XTsKLSAgICAgICAgW21lbnUgYWRkSXRlbTppdGVtQ29weV07Ci0gICAgICAgIFtpdGVt
Q29weSByZWxlYXNlXTsKLQotICAgICAgICBpZiAoaW5zZXJ0ZWRPcGVuV2l0aEl0ZW0pCi0gICAg
ICAgICAgICBjb250aW51ZTsKLSAgICAgICAgCi0gICAgICAgIC8vIElmIGEgIkNvcHkiIGl0ZW0g
aXMgcHJlc2VudCwgcGxhY2UgdGhlICJPcGVuIFdpdGgiIGl0ZW0ganVzdCBhZnRlciBpdCwgd2l0
aCBhbiBpbnRlcnZlbmluZyBzZXBhcmF0b3IuCi0gICAgICAgIGlmIChbaXRlbSBhY3Rpb25dICE9
IEBzZWxlY3Rvcihjb3B5OikpCi0gICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgCi0gICAg
ICAgIFttZW51IGFkZEl0ZW06W05TTWVudUl0ZW0gc2VwYXJhdG9ySXRlbV1dOwotICAgICAgICBp
bnNlcnRPcGVuV2l0aERlZmF1bHRQREZNZW51SXRlbShtZW51LCBbbWVudSBudW1iZXJPZkl0ZW1z
XSk7Ci0gICAgICAgIGluc2VydGVkT3BlbldpdGhJdGVtID0gdHJ1ZTsKLSAgICB9Ci0gICAgCi0g
ICAgaWYgKCFpbnNlcnRlZE9wZW5XaXRoSXRlbSkgewotICAgICAgICAvLyBObyAiQ29weSIgaXRl
bSB3YXMgZm91bmQ7IHBsYWNlIHRoZSAiT3BlbiBXaXRoIiBpdGVtIGF0IHRoZSB0b3Agb2YgdGhl
IG1lbnUsIHdpdGggYSB0cmFpbGluZyBzZXBhcmF0b3IuCi0gICAgICAgIGluc2VydE9wZW5XaXRo
RGVmYXVsdFBERk1lbnVJdGVtKG1lbnUsIDApOwotICAgICAgICBbbWVudSBpbnNlcnRJdGVtOltO
U01lbnVJdGVtIHNlcGFyYXRvckl0ZW1dIGF0SW5kZXg6MV07Ci0gICAgfQotCi0gICAgcmV0dXJu
IFttZW51IGF1dG9yZWxlYXNlXTsKLX0KLQotLy8gTUFSSzogTlNVc2VySW50ZXJmYWNlVmFsaWRh
dGlvbnMgUFJPVE9DT0wgSU1QTEVNRU5UQVRJT04KLQotLSAoQk9PTCl2YWxpZGF0ZVVzZXJJbnRl
cmZhY2VJdGVtOihpZCA8TlNWYWxpZGF0ZWRVc2VySW50ZXJmYWNlSXRlbT4paXRlbQotewotICAg
IFNFTCBhY3Rpb24gPSBbaXRlbSBhY3Rpb25dOwotICAgIGlmIChhY3Rpb24gPT0gQHNlbGVjdG9y
KF9vcGVuV2l0aEZpbmRlcjopKQotICAgICAgICByZXR1cm4gW19wZGZWaWV3IGRvY3VtZW50XSAh
PSBuaWw7Ci0gICAgcmV0dXJuIFlFUzsKLX0KLQotLy8gTUFSSzogUERGVmlldyBkZWxlZ2F0ZSBt
ZXRob2RzCi0KLS0gKHZvaWQpUERGVmlld1dpbGxDbGlja09uTGluazooUERGVmlldyAqKXNlbmRl
ciB3aXRoVVJMOihOU1VSTCAqKVVSTAotewotICAgIF9wZGZWaWV3Q29udHJvbGxlci0+bGlua0Ns
aWNrZWQoW1VSTCBhYnNvbHV0ZVN0cmluZ10pOwotfQotCi0tICh2b2lkKVBERlZpZXdPcGVuUERG
SW5OYXRpdmVBcHBsaWNhdGlvbjooUERGVmlldyAqKXNlbmRlcgotewotICAgIF9wZGZWaWV3Q29u
dHJvbGxlci0+b3BlblBERkluRmluZGVyKCk7Ci19Ci0KLS0gKHZvaWQpUERGVmlld1NhdmVQREZU
b0Rvd25sb2FkRm9sZGVyOihQREZWaWV3ICopc2VuZGVyCi17Ci0gICAgX3BkZlZpZXdDb250cm9s
bGVyLT5zYXZlUERGVG9Eb3dubG9hZHNGb2xkZXIoKTsKLX0KLQotLSAodm9pZClQREZWaWV3UGVy
Zm9ybVByaW50OihQREZWaWV3ICopc2VuZGVyCi17Ci0gICAgX3BkZlZpZXdDb250cm9sbGVyLT5w
cmludCgpOwotfQotCi0tIChCT09MKWZvcndhcmRTY3JvbGxXaGVlbEV2ZW50OihOU0V2ZW50ICop
d2hlZWxFdmVudAotewotICAgIHJldHVybiBfcGRmVmlld0NvbnRyb2xsZXItPmZvcndhcmRTY3Jv
bGxXaGVlbEV2ZW50KHdoZWVsRXZlbnQpOwotfQotCi1AZW5kCi0KLW5hbWVzcGFjZSBXZWJLaXQg
ewotCi1QYXNzT3duUHRyPFBERlZpZXdDb250cm9sbGVyPiBQREZWaWV3Q29udHJvbGxlcjo6Y3Jl
YXRlKFdLVmlldyAqd2tWaWV3KQotewotICAgIHJldHVybiBhZG9wdFB0cihuZXcgUERGVmlld0Nv
bnRyb2xsZXIod2tWaWV3KSk7Ci19Ci0KLVBERlZpZXdDb250cm9sbGVyOjpQREZWaWV3Q29udHJv
bGxlcihXS1ZpZXcgKndrVmlldykKLSAgICA6IG1fd2tWaWV3KHdrVmlldykKLSAgICAsIG1fd2tQ
REZWaWV3KGFkb3B0TlMoW1tXS1BERlZpZXcgYWxsb2NdIGluaXRXaXRoRnJhbWU6W21fd2tWaWV3
IGJvdW5kc10gUERGVmlld0NvbnRyb2xsZXI6dGhpc10pKQotICAgICwgbV9wZGZWaWV3KFttX3dr
UERGVmlldy5nZXQoKSBwZGZWaWV3XSkKLXsKLSAgICBbbV93a1ZpZXcgYWRkU3VidmlldzptX3dr
UERGVmlldy5nZXQoKV07Ci19Ci0KLVBERlZpZXdDb250cm9sbGVyOjp+UERGVmlld0NvbnRyb2xs
ZXIoKQotewotICAgIFttX3drUERGVmlldy5nZXQoKSByZW1vdmVGcm9tU3VwZXJ2aWV3XTsKLSAg
ICBbbV93a1BERlZpZXcuZ2V0KCkgaW52YWxpZGF0ZV07Ci0gICAgbV93a1BERlZpZXcgPSBudWxs
cHRyOwotfQotCi1XZWJQYWdlUHJveHkqIFBERlZpZXdDb250cm9sbGVyOjpwYWdlKCkgY29uc3QK
LXsKLSAgICByZXR1cm4gdG9JbXBsKFttX3drVmlldyBwYWdlUmVmXSk7Ci19Ci0KLU5TVmlldyog
UERGVmlld0NvbnRyb2xsZXI6OnBkZlZpZXcoKSBjb25zdAoteyAKLSAgICByZXR1cm4gbV93a1BE
RlZpZXcuZ2V0KCk7IAotfQotICAgIAotc3RhdGljIFJldGFpblB0cjxDRkRhdGFSZWY+IGNvbnZl
cnRQb3N0U2NyaXB0RGF0YVNvdXJjZVRvUERGKGNvbnN0IENvcmVJUEM6OkRhdGFSZWZlcmVuY2Um
IGRhdGFSZWZlcmVuY2UpCi17Ci0gICAgLy8gQ29udmVydCBQb3N0U2NyaXB0IHRvIFBERiB1c2lu
ZyBRdWFydHogMkQgQVBJCi0gICAgLy8gaHR0cDovL2RldmVsb3Blci5hcHBsZS5jb20vZG9jdW1l
bnRhdGlvbi9HcmFwaGljc0ltYWdpbmcvQ29uY2VwdHVhbC9kcmF3aW5nd2l0aHF1YXJ0ejJkL2Rx
X3BzX2NvbnZlcnQvY2hhcHRlcl8xNl9zZWN0aW9uXzEuaHRtbAotICAgIAotICAgIENHUFNDb252
ZXJ0ZXJDYWxsYmFja3MgY2FsbGJhY2tzID0geyAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwIH07ICAg
IAotICAgIFJldGFpblB0cjxDR1BTQ29udmVydGVyUmVmPiBjb252ZXJ0ZXIgPSBhZG9wdENGKENH
UFNDb252ZXJ0ZXJDcmVhdGUoMCwgJmNhbGxiYWNrcywgMCkpOwotICAgIEFTU0VSVChjb252ZXJ0
ZXIpOwotCi0gICAgUmV0YWluUHRyPE5TRGF0YT4gbnNEYXRhID0gYWRvcHROUyhbW05TRGF0YSBh
bGxvY10gaW5pdFdpdGhCeXRlc05vQ29weTpjb25zdF9jYXN0PHVpbnQ4X3QqPihkYXRhUmVmZXJl
bmNlLmRhdGEoKSkgbGVuZ3RoOmRhdGFSZWZlcmVuY2Uuc2l6ZSgpIGZyZWVXaGVuRG9uZTpOT10p
OyAgIAotCi0gICAgUmV0YWluUHRyPENHRGF0YVByb3ZpZGVyUmVmPiBwcm92aWRlciA9IGFkb3B0
Q0YoQ0dEYXRhUHJvdmlkZXJDcmVhdGVXaXRoQ0ZEYXRhKChDRkRhdGFSZWYpbnNEYXRhLmdldCgp
KSk7Ci0gICAgQVNTRVJUKHByb3ZpZGVyKTsKLQotICAgIFJldGFpblB0cjxDRk11dGFibGVEYXRh
UmVmPiByZXN1bHQgPSBhZG9wdENGKENGRGF0YUNyZWF0ZU11dGFibGUoa0NGQWxsb2NhdG9yRGVm
YXVsdCwgMCkpOwotICAgIEFTU0VSVChyZXN1bHQpOwotICAgIAotICAgIFJldGFpblB0cjxDR0Rh
dGFDb25zdW1lclJlZj4gY29uc3VtZXIgPSBhZG9wdENGKENHRGF0YUNvbnN1bWVyQ3JlYXRlV2l0
aENGRGF0YShyZXN1bHQuZ2V0KCkpKTsKLSAgICBBU1NFUlQoY29uc3VtZXIpOwotICAgIAotICAg
IENHUFNDb252ZXJ0ZXJDb252ZXJ0KGNvbnZlcnRlci5nZXQoKSwgcHJvdmlkZXIuZ2V0KCksIGNv
bnN1bWVyLmdldCgpLCAwKTsKLQotICAgIGlmICghcmVzdWx0KQotICAgICAgICByZXR1cm4gMDsK
LQotICAgIHJldHVybiByZXN1bHQ7Ci19Ci0KLXZvaWQgUERGVmlld0NvbnRyb2xsZXI6OnNldFBE
RkRvY3VtZW50RGF0YShjb25zdCBTdHJpbmcmIG1pbWVUeXBlLCBjb25zdCBTdHJpbmcmIHN1Z2dl
c3RlZEZpbGVuYW1lLCBjb25zdCBDb3JlSVBDOjpEYXRhUmVmZXJlbmNlJiBkYXRhUmVmZXJlbmNl
KQotewotICAgIGlmIChlcXVhbElnbm9yaW5nQ2FzZShtaW1lVHlwZSwgImFwcGxpY2F0aW9uL3Bv
c3RzY3JpcHQiKSkgewotICAgICAgICBtX3BkZkRhdGEgPSBjb252ZXJ0UG9zdFNjcmlwdERhdGFT
b3VyY2VUb1BERihkYXRhUmVmZXJlbmNlKTsKLSAgICAgICAgaWYgKCFtX3BkZkRhdGEpCi0gICAg
ICAgICAgICByZXR1cm47Ci0gICAgICAgIG1fc3VnZ2VzdGVkRmlsZW5hbWUgPSBTdHJpbmcoc3Vn
Z2VzdGVkRmlsZW5hbWUgKyAiLnBkZiIpOwotICAgIH0gZWxzZSB7Ci0gICAgICAgIC8vIE1ha2Ug
c3VyZSB0byBjb3B5IHRoZSBkYXRhLgotICAgICAgICBtX3BkZkRhdGEgPSBhZG9wdENGKENGRGF0
YUNyZWF0ZSgwLCBkYXRhUmVmZXJlbmNlLmRhdGEoKSwgZGF0YVJlZmVyZW5jZS5zaXplKCkpKTsK
LSAgICAgICAgbV9zdWdnZXN0ZWRGaWxlbmFtZSA9IHN1Z2dlc3RlZEZpbGVuYW1lOwotICAgIH0K
LQotICAgIFJldGFpblB0cjxQREZEb2N1bWVudD4gcGRmRG9jdW1lbnQgPSBhZG9wdE5TKFtbcGRm
RG9jdW1lbnRDbGFzcygpIGFsbG9jXSBpbml0V2l0aERhdGE6KE5TRGF0YSAqKW1fcGRmRGF0YS5n
ZXQoKV0pOwotICAgIFttX3drUERGVmlldy5nZXQoKSBzZXREb2N1bWVudDpwZGZEb2N1bWVudC5n
ZXQoKV07Ci19Ci0KLWRvdWJsZSBQREZWaWV3Q29udHJvbGxlcjo6em9vbUZhY3RvcigpIGNvbnN0
Ci17Ci0gICAgcmV0dXJuIFttX3BkZlZpZXcgc2NhbGVGYWN0b3JdOwotfQotCi12b2lkIFBERlZp
ZXdDb250cm9sbGVyOjpzZXRab29tRmFjdG9yKGRvdWJsZSB6b29tRmFjdG9yKQotewotICAgIFtt
X3BkZlZpZXcgc2V0U2NhbGVGYWN0b3I6em9vbUZhY3Rvcl07Ci19Ci0KLUNsYXNzIFBERlZpZXdD
b250cm9sbGVyOjpwZGZEb2N1bWVudENsYXNzKCkKLXsKLSAgICBzdGF0aWMgQ2xhc3MgcGRmRG9j
dW1lbnRDbGFzcyA9IFtwZGZLaXRCdW5kbGUoKSBjbGFzc05hbWVkOkAiUERGRG9jdW1lbnQiXTsK
LSAgICAKLSAgICByZXR1cm4gcGRmRG9jdW1lbnRDbGFzczsKLX0KLQotQ2xhc3MgUERGVmlld0Nv
bnRyb2xsZXI6OnBkZlByZXZpZXdWaWV3Q2xhc3MoKQotewotICAgIHN0YXRpYyBDbGFzcyBwZGZQ
cmV2aWV3Vmlld0NsYXNzID0gW3BkZktpdEJ1bmRsZSgpIGNsYXNzTmFtZWQ6QCJQREZQcmV2aWV3
VmlldyJdOwotICAgIAotICAgIHJldHVybiBwZGZQcmV2aWV3Vmlld0NsYXNzOwotfQotCi1ib29s
IFBERlZpZXdDb250cm9sbGVyOjpmb3J3YXJkU2Nyb2xsV2hlZWxFdmVudChOU0V2ZW50ICp3aGVl
bEV2ZW50KQotewotICAgIENHRmxvYXQgZGVsdGFYID0gW3doZWVsRXZlbnQgZGVsdGFYXTsKLSAg
ICBpZiAoKGRlbHRhWCA+IDAgJiYgIXBhZ2UoKS0+Y2FuR29CYWNrKCkpIHx8IChkZWx0YVggPCAw
ICYmICFwYWdlKCktPmNhbkdvRm9yd2FyZCgpKSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0g
ICAgW21fd2tWaWV3IHNjcm9sbFdoZWVsOndoZWVsRXZlbnRdOwotICAgIHJldHVybiB0cnVlOwot
fQotCi1zdGF0aWMgSU1QIG9sZFBERlZpZXdTY3JvbGxWaWV3X3Njcm9sbFdoZWVsOwotCi1zdGF0
aWMgV0tQREZWaWV3ICpmaW5kRW5jbG9zaW5nV0tQREZWaWV3KE5TVmlldyAqdmlldykKLXsKLSAg
ICBmb3IgKE5TVmlldyAqc3VwZXJ2aWV3ID0gW3ZpZXcgc3VwZXJ2aWV3XTsgc3VwZXJ2aWV3OyBz
dXBlcnZpZXcgPSBbc3VwZXJ2aWV3IHN1cGVydmlld10pIHsKLSAgICAgICAgaWYgKFtzdXBlcnZp
ZXcgaXNLaW5kT2ZDbGFzczpbV0tQREZWaWV3IGNsYXNzXV0pCi0gICAgICAgICAgICByZXR1cm4g
c3RhdGljX2Nhc3Q8V0tQREZWaWV3ICo+KHN1cGVydmlldyk7Ci0gICAgfQotCi0gICAgcmV0dXJu
IG5pbDsKLX0KLQotc3RhdGljIHZvaWQgUERGVmlld1Njcm9sbFZpZXdfc2Nyb2xsV2hlZWwoTlNT
Y3JvbGxWaWV3KiBzZWxmLCBTRUwgX2NtZCwgTlNFdmVudCAqd2hlZWxFdmVudCkKLXsKLSAgICBD
R0Zsb2F0IGRlbHRhWCA9IFt3aGVlbEV2ZW50IGRlbHRhWF07Ci0gICAgQ0dGbG9hdCBkZWx0YVkg
PSBbd2hlZWxFdmVudCBkZWx0YVldOwotCi0gICAgTlNTaXplIGNvbnRlbnRzU2l6ZSA9IFtbc2Vs
ZiBkb2N1bWVudFZpZXddIGJvdW5kc10uc2l6ZTsKLSAgICBOU1JlY3QgdmlzaWJsZVJlY3QgPSBb
c2VsZiBkb2N1bWVudFZpc2libGVSZWN0XTsKLQotICAgIC8vIFdlIG9ubHkgd2FudCB0byBmb3J3
YXJkIHRoZSB3aGVlbCBldmVudHMgaWYgdGhlIGhvcml6b250YWwgZGVsdGEgaXMgbm9uLXplcm8s
Ci0gICAgLy8gYW5kIG9ubHkgaWYgd2UncmUgcGlubmVkIHRvIGVpdGhlciB0aGUgbGVmdCBvciBy
aWdodCBzaWRlLgotICAgIC8vIFdlIGFsc28gbmV2ZXIgd2FudCB0byBmb3J3YXJkIG1vbWVudHVt
IHNjcm9sbCBldmVudHMuCi0gICAgaWYgKFt3aGVlbEV2ZW50IG1vbWVudHVtUGhhc2VdID09IE5T
RXZlbnRQaGFzZU5vbmUgJiYgZGVsdGFYICYmIGZhYnNmKGRlbHRhWSkgPCBmYWJzZihkZWx0YVgp
Ci0gICAgICAgICYmICgoZGVsdGFYID4gMCAmJiB2aXNpYmxlUmVjdC5vcmlnaW4ueCA8PSAwKSB8
fCAoZGVsdGFYIDwgMCAmJiBjb250ZW50c1NpemUud2lkdGggPD0gTlNNYXhYKHZpc2libGVSZWN0
KSkpKSB7Ci0gICAgCi0gICAgICAgIGlmIChXS1BERlZpZXcgKnBkZlZpZXcgPSBmaW5kRW5jbG9z
aW5nV0tQREZWaWV3KHNlbGYpKSB7Ci0gICAgICAgICAgICBpZiAoW3BkZlZpZXcgZm9yd2FyZFNj
cm9sbFdoZWVsRXZlbnQ6d2hlZWxFdmVudF0pCi0gICAgICAgICAgICAgICAgcmV0dXJuOwotICAg
ICAgICB9Ci0gICAgfQotCi0gICAgd3RmQ2FsbElNUDx2b2lkPihvbGRQREZWaWV3U2Nyb2xsVmll
d19zY3JvbGxXaGVlbCwgc2VsZiwgX2NtZCwgd2hlZWxFdmVudCk7Ci19Ci0KLU5TQnVuZGxlKiBQ
REZWaWV3Q29udHJvbGxlcjo6cGRmS2l0QnVuZGxlKCkKLXsKLSAgICBzdGF0aWMgTlNCdW5kbGUg
KnBkZktpdEJ1bmRsZTsKLSAgICBpZiAocGRmS2l0QnVuZGxlKQotICAgICAgICByZXR1cm4gcGRm
S2l0QnVuZGxlOwotCi0gICAgTlNTdHJpbmcgKnBkZktpdFBhdGggPSBbX05TUGF0aEZvclN5c3Rl
bUZyYW1ld29yayhAIlF1YXJ0ei5mcmFtZXdvcmsiKSBzdHJpbmdCeUFwcGVuZGluZ1N0cmluZzpA
Ii9GcmFtZXdvcmtzL1BERktpdC5mcmFtZXdvcmsiXTsKLSAgICBpZiAoIXBkZktpdFBhdGgpIHsK
LSAgICAgICAgTE9HX0VSUk9SKCJDb3VsZG4ndCBmaW5kIFBERktpdC5mcmFtZXdvcmsiKTsKLSAg
ICAgICAgcmV0dXJuIG5pbDsKLSAgICB9Ci0KLSAgICBwZGZLaXRCdW5kbGUgPSBbTlNCdW5kbGUg
YnVuZGxlV2l0aFBhdGg6cGRmS2l0UGF0aF07Ci0gICAgaWYgKCFbcGRmS2l0QnVuZGxlIGxvYWRd
KQotICAgICAgICBMT0dfRVJST1IoIkNvdWxkbid0IGxvYWQgUERGS2l0LmZyYW1ld29yayIpOwot
Ci0gICAgaWYgKENsYXNzIHBkZlZpZXdTY3JvbGxWaWV3Q2xhc3MgPSBbcGRmS2l0QnVuZGxlIGNs
YXNzTmFtZWQ6QCJQREZWaWV3U2Nyb2xsVmlldyJdKSB7Ci0gICAgICAgIGlmIChNZXRob2Qgc2Ny
b2xsV2hlZWwgPSBjbGFzc19nZXRJbnN0YW5jZU1ldGhvZChwZGZWaWV3U2Nyb2xsVmlld0NsYXNz
LCBAc2VsZWN0b3Ioc2Nyb2xsV2hlZWw6KSkpCi0gICAgICAgICAgICBvbGRQREZWaWV3U2Nyb2xs
Vmlld19zY3JvbGxXaGVlbCA9IG1ldGhvZF9zZXRJbXBsZW1lbnRhdGlvbihzY3JvbGxXaGVlbCwg
cmVpbnRlcnByZXRfY2FzdDxJTVA+KFBERlZpZXdTY3JvbGxWaWV3X3Njcm9sbFdoZWVsKSk7Ci0g
ICAgfQotCi0gICAgcmV0dXJuIHBkZktpdEJ1bmRsZTsKLX0KLQotTlNQcmludE9wZXJhdGlvbiAq
UERGVmlld0NvbnRyb2xsZXI6Om1ha2VQcmludE9wZXJhdGlvbihOU1ByaW50SW5mbyAqcHJpbnRJ
bmZvKQotewotICAgIHJldHVybiBbW21fcGRmVmlldyBkb2N1bWVudF0gZ2V0UHJpbnRPcGVyYXRp
b25Gb3JQcmludEluZm86cHJpbnRJbmZvIGF1dG9Sb3RhdGU6WUVTXTsKLX0KLQotdm9pZCBQREZW
aWV3Q29udHJvbGxlcjo6b3BlblBERkluRmluZGVyKCkKLXsKLSAgICAvLyBXZSBkb24ndCB3YW50
IHRvIG9wZW4gdGhlIFBERiB1bnRpbCB3ZSBoYXZlIGEgZG9jdW1lbnQgdG8gd3JpdGUuIChzZWUg
NDg5MjUyNSkuCi0gICAgaWYgKCFbbV9wZGZWaWV3IGRvY3VtZW50XSkgewotICAgICAgICBOU0Jl
ZXAoKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIGlmICghbV90ZW1wb3JhcnlQREZV
VUlEKSB7Ci0gICAgICAgIEFTU0VSVChtX3BkZkRhdGEpOwotICAgICAgICBtX3RlbXBvcmFyeVBE
RlVVSUQgPSBjcmVhdGVDYW5vbmljYWxVVUlEU3RyaW5nKCk7Ci0gICAgICAgIHBhZ2UoKS0+c2F2
ZVBERlRvVGVtcG9yYXJ5Rm9sZGVyQW5kT3BlbldpdGhOYXRpdmVBcHBsaWNhdGlvblJhdyhtX3N1
Z2dlc3RlZEZpbGVuYW1lLmdldCgpLCBwYWdlKCktPm1haW5GcmFtZSgpLT51cmwoKSwgQ0ZEYXRh
R2V0Qnl0ZVB0cihtX3BkZkRhdGEuZ2V0KCkpLCBDRkRhdGFHZXRMZW5ndGgobV9wZGZEYXRhLmdl
dCgpKSwgbV90ZW1wb3JhcnlQREZVVUlEKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAg
IHBhZ2UoKS0+b3BlblBERkZyb21UZW1wb3JhcnlGb2xkZXJXaXRoTmF0aXZlQXBwbGljYXRpb24o
bV90ZW1wb3JhcnlQREZVVUlEKTsKLX0KLQotc3RhdGljIHZvaWQgcmVsZWFzZUNGRGF0YSh1bnNp
Z25lZCBjaGFyKiwgY29uc3Qgdm9pZCogZGF0YSkKLXsKLSAgICBBU1NFUlQoQ0ZHZXRUeXBlSUQo
ZGF0YSkgPT0gQ0ZEYXRhR2V0VHlwZUlEKCkpOwotCi0gICAgLy8gQmFsYW5jZWQgYnkgQ0ZSZXRh
aW4gaW4gc2F2ZVBERlRvRG93bmxvYWRzRm9sZGVyLgotICAgIENGUmVsZWFzZShkYXRhKTsKLX0K
LQotdm9pZCBQREZWaWV3Q29udHJvbGxlcjo6c2F2ZVBERlRvRG93bmxvYWRzRm9sZGVyKCkKLXsK
LSAgICAvLyBXZSBkb24ndCB3YW50IHRvIHdyaXRlIHRoZSBmaWxlIHVudGlsIHdlIGhhdmUgYSBk
b2N1bWVudCB0byB3cml0ZS4gKHNlZSA1MjY3NjA3KS4KLSAgICBpZiAoIVttX3BkZlZpZXcgZG9j
dW1lbnRdKSB7Ci0gICAgICAgIE5TQmVlcCgpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0g
ICAgQVNTRVJUKG1fcGRmRGF0YSk7Ci0KLSAgICAvLyBCYWxhbmNlZCBieSBDRlJlbGVhc2UgaW4g
cmVsZWFzZUNGRGF0YS4KLSAgICBDRlJldGFpbihtX3BkZkRhdGEuZ2V0KCkpOwotCi0gICAgUmVm
UHRyPFdlYkRhdGE+IGRhdGEgPSBXZWJEYXRhOjpjcmVhdGVXaXRob3V0Q29weWluZyhDRkRhdGFH
ZXRCeXRlUHRyKG1fcGRmRGF0YS5nZXQoKSksIENGRGF0YUdldExlbmd0aChtX3BkZkRhdGEuZ2V0
KCkpLCByZWxlYXNlQ0ZEYXRhLCBtX3BkZkRhdGEuZ2V0KCkpOwotCi0gICAgcGFnZSgpLT5zYXZl
RGF0YVRvRmlsZUluRG93bmxvYWRzRm9sZGVyKG1fc3VnZ2VzdGVkRmlsZW5hbWUuZ2V0KCksIHBh
Z2UoKS0+bWFpbkZyYW1lKCktPm1pbWVUeXBlKCksIHBhZ2UoKS0+bWFpbkZyYW1lKCktPnVybCgp
LCBkYXRhLmdldCgpKTsKLX0KLQotdm9pZCBQREZWaWV3Q29udHJvbGxlcjo6bGlua0NsaWNrZWQo
Y29uc3QgU3RyaW5nJiB1cmwpCi17Ci0gICAgTlNFdmVudCogbnNFdmVudCA9IFtOU0FwcCBjdXJy
ZW50RXZlbnRdOwotICAgIFdlYk1vdXNlRXZlbnQgZXZlbnQ7Ci0gICAgc3dpdGNoIChbbnNFdmVu
dCB0eXBlXSkgewotICAgIGNhc2UgTlNMZWZ0TW91c2VVcDoKLSAgICBjYXNlIE5TUmlnaHRNb3Vz
ZVVwOgotICAgIGNhc2UgTlNPdGhlck1vdXNlVXA6Ci0gICAgICAgIGV2ZW50ID0gV2ViRXZlbnRG
YWN0b3J5OjpjcmVhdGVXZWJNb3VzZUV2ZW50KG5zRXZlbnQsIG1fcGRmVmlldyk7Ci0gICAgZGVm
YXVsdDoKLSAgICAgICAgLy8gRm9yIG5vbiBtb3VzZS1jbGlja3Mgb3IgZm9yIGtleWJvYXJkIGV2
ZW50cywgcGFzcyBhbiBlbXB0eSBXZWJNb3VzZUV2ZW50Ci0gICAgICAgIC8vIHRocm91Z2guICBU
aGUgZXZlbnQgaXMgb25seSB1c2VkIGJ5IHRoZSBXZWJGcmFtZUxvYWRlckNsaWVudCB0byBkZXRl
cm1pbmUKLSAgICAgICAgLy8gdGhlIG1vZGlmaWVyIGtleXMgYW5kIHdoaWNoIG1vdXNlIGJ1dHRv
biBpcyBkb3duLiAgVGhlc2UgcXVlcmllcyB3aWxsIGJlCi0gICAgICAgIC8vIHZhbGlkIHdpdGgg
YW4gZW1wdHkgZXZlbnQuCi0gICAgICAgIGJyZWFrOwotICAgIH0KLSAgICAKLSAgICBwYWdlKCkt
PmxpbmtDbGlja2VkKHVybCwgZXZlbnQpOwotfQotCi12b2lkIFBERlZpZXdDb250cm9sbGVyOjpw
cmludCgpCi17Ci0gICAgcGFnZSgpLT5wcmludE1haW5GcmFtZSgpOwotfQotCi12b2lkIFBERlZp
ZXdDb250cm9sbGVyOjpmaW5kU3RyaW5nKGNvbnN0IFN0cmluZyYgc3RyaW5nLCBGaW5kT3B0aW9u
cyBvcHRpb25zLCB1bnNpZ25lZCBtYXhNYXRjaENvdW50KQotewotICAgIEJPT0wgZm9yd2FyZCA9
ICEob3B0aW9ucyAmIEZpbmRPcHRpb25zQmFja3dhcmRzKTsKLSAgICBCT09MIGNhc2VGbGFnID0g
IShvcHRpb25zICYgRmluZE9wdGlvbnNDYXNlSW5zZW5zaXRpdmUpOwotICAgIEJPT0wgd3JhcEZs
YWcgPSBvcHRpb25zICYgRmluZE9wdGlvbnNXcmFwQXJvdW5kOwotCi0gICAgUERGU2VsZWN0aW9u
ICpzZWxlY3Rpb24gPSBbbV93a1BERlZpZXcuZ2V0KCkgX25leHRNYXRjaEZvcjpzdHJpbmcgZGly
ZWN0aW9uOmZvcndhcmQgY2FzZVNlbnNpdGl2ZTpjYXNlRmxhZyB3cmFwOndyYXBGbGFnIGZyb21T
ZWxlY3Rpb246W21fcGRmVmlldyBjdXJyZW50U2VsZWN0aW9uXSBzdGFydEluU2VsZWN0aW9uOk5P
XTsKLSAgICBpZiAoIXNlbGVjdGlvbikgewotICAgICAgICBwYWdlKCktPmRpZEZhaWxUb0ZpbmRT
dHJpbmcoc3RyaW5nKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIE5TVUludGVnZXIg
bWF0Y2hDb3VudDsKLSAgICBpZiAoIW1heE1hdGNoQ291bnQpIHsKLSAgICAgICAgLy8gSWYgdGhl
IG1heCB3YXMgemVybywgYW55IHJlc3VsdCBtZWFucyB3ZSBleGNlZWRlZCB0aGUgbWF4LiBXZSBj
YW4gc2tpcCBjb21wdXRpbmcgdGhlIGFjdHVhbCBjb3VudC4KLSAgICAgICAgbWF0Y2hDb3VudCA9
IHN0YXRpY19jYXN0PHVuc2lnbmVkPihrV0tNb3JlVGhhbk1heGltdW1NYXRjaENvdW50KTsKLSAg
ICB9IGVsc2UgewotICAgICAgICBtYXRjaENvdW50ID0gW21fd2tQREZWaWV3LmdldCgpIF9jb3Vu
dE1hdGNoZXM6c3RyaW5nIGNhc2VTZW5zaXRpdmU6Y2FzZUZsYWddOwotICAgICAgICBpZiAobWF0
Y2hDb3VudCA+IG1heE1hdGNoQ291bnQpCi0gICAgICAgICAgICBtYXRjaENvdW50ID0gc3RhdGlj
X2Nhc3Q8dW5zaWduZWQ+KGtXS01vcmVUaGFuTWF4aW11bU1hdGNoQ291bnQpOwotICAgIH0KLQot
ICAgIFttX3BkZlZpZXcgc2V0Q3VycmVudFNlbGVjdGlvbjpzZWxlY3Rpb25dOwotICAgIFttX3Bk
ZlZpZXcgc2Nyb2xsU2VsZWN0aW9uVG9WaXNpYmxlOm5pbF07Ci0gICAgcGFnZSgpLT5kaWRGaW5k
U3RyaW5nKHN0cmluZywgbWF0Y2hDb3VudCk7Ci19Ci0KLXZvaWQgUERGVmlld0NvbnRyb2xsZXI6
OmNvdW50U3RyaW5nTWF0Y2hlcyhjb25zdCBTdHJpbmcmIHN0cmluZywgRmluZE9wdGlvbnMgb3B0
aW9ucywgdW5zaWduZWQgbWF4TWF0Y2hDb3VudCkKLXsKLSAgICBCT09MIGNhc2VGbGFnID0gIShv
cHRpb25zICYgRmluZE9wdGlvbnNDYXNlSW5zZW5zaXRpdmUpOwotCi0gICAgTlNVSW50ZWdlciBt
YXRjaENvdW50ID0gW21fd2tQREZWaWV3LmdldCgpIF9jb3VudE1hdGNoZXM6c3RyaW5nIGNhc2VT
ZW5zaXRpdmU6Y2FzZUZsYWddOwotICAgIGlmIChtYXRjaENvdW50ID4gbWF4TWF0Y2hDb3VudCkK
LSAgICAgICAgbWF0Y2hDb3VudCA9IG1heE1hdGNoQ291bnQ7Ci0gICAgcGFnZSgpLT5kaWRDb3Vu
dFN0cmluZ01hdGNoZXMoc3RyaW5nLCBtYXRjaENvdW50KTsKLX0KLQotfSAvLyBuYW1lc3BhY2Ug
V2ViS2l0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL21hYy9QYWdl
Q2xpZW50SW1wbC5oIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9tYWMvUGFnZUNsaWVu
dEltcGwuaAppbmRleCAwZGQzNmQ5Li4zMGQyNGI5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0
Mi9VSVByb2Nlc3MvQVBJL21hYy9QYWdlQ2xpZW50SW1wbC5oCisrKyBiL1NvdXJjZS9XZWJLaXQy
L1VJUHJvY2Vzcy9BUEkvbWFjL1BhZ2VDbGllbnRJbXBsLmgKQEAgLTExOSwxNCArMTE5LDYgQEAg
cHJpdmF0ZToKICAgICAKICAgICB2aXJ0dWFsIENHQ29udGV4dFJlZiBjb250YWluaW5nV2luZG93
R3JhcGhpY3NDb250ZXh0KCk7CiAKLSAgICB2aXJ0dWFsIHZvaWQgZGlkQ29tbWl0TG9hZEZvck1h
aW5GcmFtZShib29sIHVzZUN1c3RvbVJlcHJlc2VudGF0aW9uKTsKLSAgICB2aXJ0dWFsIHZvaWQg
ZGlkRmluaXNoTG9hZGluZ0RhdGFGb3JDdXN0b21SZXByZXNlbnRhdGlvbihjb25zdCBTdHJpbmcm
IHN1Z2dlc3RlZEZpbGVuYW1lLCBjb25zdCBDb3JlSVBDOjpEYXRhUmVmZXJlbmNlJik7Ci0KLSAg
ICB2aXJ0dWFsIGRvdWJsZSBjdXN0b21SZXByZXNlbnRhdGlvblpvb21GYWN0b3IoKTsKLSAgICB2
aXJ0dWFsIHZvaWQgc2V0Q3VzdG9tUmVwcmVzZW50YXRpb25ab29tRmFjdG9yKGRvdWJsZSk7Ci0g
ICAgdmlydHVhbCB2b2lkIGZpbmRTdHJpbmdJbkN1c3RvbVJlcHJlc2VudGF0aW9uKGNvbnN0IFN0
cmluZyYsIEZpbmRPcHRpb25zLCB1bnNpZ25lZCBtYXhNYXRjaENvdW50KTsKLSAgICB2aXJ0dWFs
IHZvaWQgY291bnRTdHJpbmdNYXRjaGVzSW5DdXN0b21SZXByZXNlbnRhdGlvbihjb25zdCBTdHJp
bmcmLCBGaW5kT3B0aW9ucywgdW5zaWduZWQgbWF4TWF0Y2hDb3VudCk7Ci0KICAgICB2aXJ0dWFs
IHZvaWQgZmxhc2hCYWNraW5nU3RvcmVVcGRhdGVzKGNvbnN0IFZlY3RvcjxXZWJDb3JlOjpJbnRS
ZWN0PiYgdXBkYXRlUmVjdHMpOwogCiAgICAgdmlydHVhbCB2b2lkIGRpZFBlcmZvcm1EaWN0aW9u
YXJ5TG9va3VwKGNvbnN0IEF0dHJpYnV0ZWRTdHJpbmcmLCBjb25zdCBEaWN0aW9uYXJ5UG9wdXBJ
bmZvJik7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL21hYy9QYWdl
Q2xpZW50SW1wbC5tbSBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvbWFjL1BhZ2VDbGll
bnRJbXBsLm1tCmluZGV4IDlkNzdmZjEuLjg1OGExYmYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJL
aXQyL1VJUHJvY2Vzcy9BUEkvbWFjL1BhZ2VDbGllbnRJbXBsLm1tCisrKyBiL1NvdXJjZS9XZWJL
aXQyL1VJUHJvY2Vzcy9BUEkvbWFjL1BhZ2VDbGllbnRJbXBsLm1tCkBAIC00NTgsMzYgKzQ1OCw2
IEBAIENHQ29udGV4dFJlZiBQYWdlQ2xpZW50SW1wbDo6Y29udGFpbmluZ1dpbmRvd0dyYXBoaWNz
Q29udGV4dCgpCiAgICAgcmV0dXJuIHN0YXRpY19jYXN0PENHQ29udGV4dFJlZj4oW1t3aW5kb3cg
Z3JhcGhpY3NDb250ZXh0XSBncmFwaGljc1BvcnRdKTsKIH0KIAotdm9pZCBQYWdlQ2xpZW50SW1w
bDo6ZGlkQ29tbWl0TG9hZEZvck1haW5GcmFtZShib29sIHVzZUN1c3RvbVJlcHJlc2VudGF0aW9u
KQotewotICAgIFttX3drVmlldyBfc2V0UGFnZUhhc0N1c3RvbVJlcHJlc2VudGF0aW9uOnVzZUN1
c3RvbVJlcHJlc2VudGF0aW9uXTsKLX0KLQotdm9pZCBQYWdlQ2xpZW50SW1wbDo6ZGlkRmluaXNo
TG9hZGluZ0RhdGFGb3JDdXN0b21SZXByZXNlbnRhdGlvbihjb25zdCBTdHJpbmcmIHN1Z2dlc3Rl
ZEZpbGVuYW1lLCBjb25zdCBDb3JlSVBDOjpEYXRhUmVmZXJlbmNlJiBkYXRhUmVmZXJlbmNlKQot
ewotICAgIFttX3drVmlldyBfZGlkRmluaXNoTG9hZGluZ0RhdGFGb3JDdXN0b21SZXByZXNlbnRh
dGlvbldpdGhTdWdnZXN0ZWRGaWxlbmFtZTpzdWdnZXN0ZWRGaWxlbmFtZSBkYXRhUmVmZXJlbmNl
OmRhdGFSZWZlcmVuY2VdOwotfQotCi1kb3VibGUgUGFnZUNsaWVudEltcGw6OmN1c3RvbVJlcHJl
c2VudGF0aW9uWm9vbUZhY3RvcigpCi17Ci0gICAgcmV0dXJuIFttX3drVmlldyBfY3VzdG9tUmVw
cmVzZW50YXRpb25ab29tRmFjdG9yXTsKLX0KLQotdm9pZCBQYWdlQ2xpZW50SW1wbDo6c2V0Q3Vz
dG9tUmVwcmVzZW50YXRpb25ab29tRmFjdG9yKGRvdWJsZSB6b29tRmFjdG9yKQotewotICAgIFtt
X3drVmlldyBfc2V0Q3VzdG9tUmVwcmVzZW50YXRpb25ab29tRmFjdG9yOnpvb21GYWN0b3JdOwot
fQotCi12b2lkIFBhZ2VDbGllbnRJbXBsOjpmaW5kU3RyaW5nSW5DdXN0b21SZXByZXNlbnRhdGlv
bihjb25zdCBTdHJpbmcmIHN0cmluZywgRmluZE9wdGlvbnMgb3B0aW9ucywgdW5zaWduZWQgbWF4
TWF0Y2hDb3VudCkKLXsKLSAgICBbbV93a1ZpZXcgX2ZpbmRTdHJpbmdJbkN1c3RvbVJlcHJlc2Vu
dGF0aW9uOnN0cmluZyB3aXRoRmluZE9wdGlvbnM6b3B0aW9ucyBtYXhNYXRjaENvdW50Om1heE1h
dGNoQ291bnRdOwotfQotCi12b2lkIFBhZ2VDbGllbnRJbXBsOjpjb3VudFN0cmluZ01hdGNoZXNJ
bkN1c3RvbVJlcHJlc2VudGF0aW9uKGNvbnN0IFN0cmluZyYgc3RyaW5nLCBGaW5kT3B0aW9ucyBv
cHRpb25zLCB1bnNpZ25lZCBtYXhNYXRjaENvdW50KQotewotICAgIFttX3drVmlldyBfY291bnRT
dHJpbmdNYXRjaGVzSW5DdXN0b21SZXByZXNlbnRhdGlvbjpzdHJpbmcgd2l0aEZpbmRPcHRpb25z
Om9wdGlvbnMgbWF4TWF0Y2hDb3VudDptYXhNYXRjaENvdW50XTsKLX0KLQogdm9pZCBQYWdlQ2xp
ZW50SW1wbDo6Zmxhc2hCYWNraW5nU3RvcmVVcGRhdGVzKGNvbnN0IFZlY3RvcjxJbnRSZWN0PiYp
CiB7CiAgICAgbm90SW1wbGVtZW50ZWQoKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1VJ
UHJvY2Vzcy9BUEkvbWFjL1dLVmlldy5tbSBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkv
bWFjL1dLVmlldy5tbQppbmRleCBlMWE4YjIzLi4xZDg3NjA5IDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViS2l0Mi9VSVByb2Nlc3MvQVBJL21hYy9XS1ZpZXcubW0KKysrIGIvU291cmNlL1dlYktpdDIv
VUlQcm9jZXNzL0FQSS9tYWMvV0tWaWV3Lm1tCkBAIC00Myw3ICs0Myw2IEBACiAjaW1wb3J0ICJO
YXRpdmVXZWJLZXlib2FyZEV2ZW50LmgiCiAjaW1wb3J0ICJOYXRpdmVXZWJNb3VzZUV2ZW50Lmgi
CiAjaW1wb3J0ICJOYXRpdmVXZWJXaGVlbEV2ZW50LmgiCi0jaW1wb3J0ICJQREZWaWV3Q29udHJv
bGxlci5oIgogI2ltcG9ydCAiUGFnZUNsaWVudEltcGwuaCIKICNpbXBvcnQgIlBhc3RlYm9hcmRU
eXBlcy5oIgogI2ltcG9ydCAiUmVtb3RlTGF5ZXJUcmVlRHJhd2luZ0FyZWFQcm94eS5oIgpAQCAt
MTc1LDggKzE3NCw2IEBAIHN0cnVjdCBXS1ZpZXdJbnRlcnByZXRLZXlFdmVudHNQYXJhbWV0ZXJz
IHsKICAgICAvLyBGb3IgYXN5bmNocm9ub3VzIHZhbGlkYXRpb24uCiAgICAgVmFsaWRhdGlvbk1h
cCBfdmFsaWRhdGlvbk1hcDsKIAotICAgIE93blB0cjxQREZWaWV3Q29udHJvbGxlcj4gX3BkZlZp
ZXdDb250cm9sbGVyOwotCiAgICAgT3duUHRyPEZpbmRJbmRpY2F0b3JXaW5kb3c+IF9maW5kSW5k
aWNhdG9yV2luZG93OwogICAgIC8vIFdlIGtlZXAgaGVyZSB0aGUgZXZlbnQgd2hlbiByZXNlbmRp
bmcgaXQgdG8KICAgICAvLyB0aGUgYXBwbGljYXRpb24gdG8gZGlzdGluZ3Vpc2ggdGhlIGNhc2Ug
b2YgYSBuZXcgZXZlbnQgZnJvbSBvbmUgCkBAIC0yMjU3LDEwICsyMjU0LDYgQEAgc3RhdGljIHZv
aWQgZHJhd1BhZ2VCYWNrZ3JvdW5kKENHQ29udGV4dFJlZiBjb250ZXh0LCBXZWJQYWdlUHJveHkq
IHBhZ2UsIGNvbnN0IEkKIC0gKGlkKWFjY2Vzc2liaWxpdHlGb2N1c2VkVUlFbGVtZW50CiB7CiAg
ICAgW3NlbGYgZW5hYmxlQWNjZXNzaWJpbGl0eUlmTmVjZXNzYXJ5XTsKLSAgICAKLSAgICBpZiAo
X2RhdGEtPl9wZGZWaWV3Q29udHJvbGxlcikKLSAgICAgICAgcmV0dXJuIE5TQWNjZXNzaWJpbGl0
eVVuaWdub3JlZERlc2NlbmRhbnQoX2RhdGEtPl9wZGZWaWV3Q29udHJvbGxlci0+cGRmVmlldygp
KTsKLQogICAgIHJldHVybiBfZGF0YS0+X3JlbW90ZUFjY2Vzc2liaWxpdHlDaGlsZC5nZXQoKTsK
IH0KIApAQCAtMjI3MiwxMCArMjI2NSw2IEBAIHN0YXRpYyB2b2lkIGRyYXdQYWdlQmFja2dyb3Vu
ZChDR0NvbnRleHRSZWYgY29udGV4dCwgV2ViUGFnZVByb3h5KiBwYWdlLCBjb25zdCBJCiAtIChp
ZClhY2Nlc3NpYmlsaXR5SGl0VGVzdDooTlNQb2ludClwb2ludAogewogICAgIFtzZWxmIGVuYWJs
ZUFjY2Vzc2liaWxpdHlJZk5lY2Vzc2FyeV07Ci0KLSAgICBpZiAoX2RhdGEtPl9wZGZWaWV3Q29u
dHJvbGxlcikKLSAgICAgICAgcmV0dXJuIFtfZGF0YS0+X3BkZlZpZXdDb250cm9sbGVyLT5wZGZW
aWV3KCkgYWNjZXNzaWJpbGl0eUhpdFRlc3Q6cG9pbnRdOwotICAgIAogICAgIHJldHVybiBfZGF0
YS0+X3JlbW90ZUFjY2Vzc2liaWxpdHlDaGlsZC5nZXQoKTsKIH0KIApAQCAtMjI4Niw5ICsyMjc1
LDcgQEAgc3RhdGljIHZvaWQgZHJhd1BhZ2VCYWNrZ3JvdW5kKENHQ29udGV4dFJlZiBjb250ZXh0
LCBXZWJQYWdlUHJveHkqIHBhZ2UsIGNvbnN0IEkKICAgICBpZiAoW2F0dHJpYnV0ZSBpc0VxdWFs
VG9TdHJpbmc6TlNBY2Nlc3NpYmlsaXR5Q2hpbGRyZW5BdHRyaWJ1dGVdKSB7CiAKICAgICAgICAg
aWQgY2hpbGQgPSBuaWw7Ci0gICAgICAgIGlmIChfZGF0YS0+X3BkZlZpZXdDb250cm9sbGVyKQot
ICAgICAgICAgICAgY2hpbGQgPSBOU0FjY2Vzc2liaWxpdHlVbmlnbm9yZWREZXNjZW5kYW50KF9k
YXRhLT5fcGRmVmlld0NvbnRyb2xsZXItPnBkZlZpZXcoKSk7Ci0gICAgICAgIGVsc2UgaWYgKF9k
YXRhLT5fcmVtb3RlQWNjZXNzaWJpbGl0eUNoaWxkKQorICAgICAgICBpZiAoX2RhdGEtPl9yZW1v
dGVBY2Nlc3NpYmlsaXR5Q2hpbGQpCiAgICAgICAgICAgICBjaGlsZCA9IF9kYXRhLT5fcmVtb3Rl
QWNjZXNzaWJpbGl0eUNoaWxkLmdldCgpOwogICAgICAgICAKICAgICAgICAgaWYgKCFjaGlsZCkK
QEAgLTI3NjQsNTcgKzI3NTEsNiBAQCBzdGF0aWMgdm9pZCBkcmF3UGFnZUJhY2tncm91bmQoQ0dD
b250ZXh0UmVmIGNvbnRleHQsIFdlYlBhZ2VQcm94eSogcGFnZSwgY29uc3QgSQogICAgIFtzZWxm
IF9zZXRQbHVnaW5Db21wbGV4VGV4dElucHV0U3RhdGU6cGx1Z2luQ29tcGxleFRleHRJbnB1dFN0
YXRlXTsKIH0KIAotLSAodm9pZClfc2V0UGFnZUhhc0N1c3RvbVJlcHJlc2VudGF0aW9uOihCT09M
KXBhZ2VIYXNDdXN0b21SZXByZXNlbnRhdGlvbgotewotICAgIGJvb2wgaGFkUERGVmlldyA9IF9k
YXRhLT5fcGRmVmlld0NvbnRyb2xsZXI7Ci0gICAgX2RhdGEtPl9wZGZWaWV3Q29udHJvbGxlciA9
IG51bGxwdHI7Ci0KLSAgICBpZiAocGFnZUhhc0N1c3RvbVJlcHJlc2VudGF0aW9uKQotICAgICAg
ICBfZGF0YS0+X3BkZlZpZXdDb250cm9sbGVyID0gUERGVmlld0NvbnRyb2xsZXI6OmNyZWF0ZShz
ZWxmKTsKLQotICAgIGlmIChwYWdlSGFzQ3VzdG9tUmVwcmVzZW50YXRpb24gIT0gaGFkUERGVmll
dykKLSAgICAgICAgX2RhdGEtPl9wYWdlLT5kcmF3aW5nQXJlYSgpLT5wYWdlQ3VzdG9tUmVwcmVz
ZW50YXRpb25DaGFuZ2VkKCk7Ci19Ci0KLS0gKHZvaWQpX2RpZEZpbmlzaExvYWRpbmdEYXRhRm9y
Q3VzdG9tUmVwcmVzZW50YXRpb25XaXRoU3VnZ2VzdGVkRmlsZW5hbWU6KGNvbnN0IFN0cmluZyYp
c3VnZ2VzdGVkRmlsZW5hbWUgZGF0YVJlZmVyZW5jZTooY29uc3QgQ29yZUlQQzo6RGF0YVJlZmVy
ZW5jZSYpZGF0YVJlZmVyZW5jZQotewotICAgIEFTU0VSVChfZGF0YS0+X3BkZlZpZXdDb250cm9s
bGVyKTsKLQotICAgIF9kYXRhLT5fcGRmVmlld0NvbnRyb2xsZXItPnNldFBERkRvY3VtZW50RGF0
YShfZGF0YS0+X3BhZ2UtPm1haW5GcmFtZSgpLT5taW1lVHlwZSgpLCBzdWdnZXN0ZWRGaWxlbmFt
ZSwgZGF0YVJlZmVyZW5jZSk7Ci19Ci0KLS0gKGRvdWJsZSlfY3VzdG9tUmVwcmVzZW50YXRpb25a
b29tRmFjdG9yCi17Ci0gICAgaWYgKCFfZGF0YS0+X3BkZlZpZXdDb250cm9sbGVyKQotICAgICAg
ICByZXR1cm4gMTsKLQotICAgIHJldHVybiBfZGF0YS0+X3BkZlZpZXdDb250cm9sbGVyLT56b29t
RmFjdG9yKCk7Ci19Ci0KLS0gKHZvaWQpX3NldEN1c3RvbVJlcHJlc2VudGF0aW9uWm9vbUZhY3Rv
cjooZG91YmxlKXpvb21GYWN0b3IKLXsKLSAgICBpZiAoIV9kYXRhLT5fcGRmVmlld0NvbnRyb2xs
ZXIpCi0gICAgICAgIHJldHVybjsKLQotICAgIF9kYXRhLT5fcGRmVmlld0NvbnRyb2xsZXItPnNl
dFpvb21GYWN0b3Ioem9vbUZhY3Rvcik7Ci19Ci0KLS0gKHZvaWQpX2ZpbmRTdHJpbmdJbkN1c3Rv
bVJlcHJlc2VudGF0aW9uOihOU1N0cmluZyAqKXN0cmluZyB3aXRoRmluZE9wdGlvbnM6KFdlYktp
dDo6RmluZE9wdGlvbnMpb3B0aW9ucyBtYXhNYXRjaENvdW50OihOU1VJbnRlZ2VyKWNvdW50Ci17
Ci0gICAgaWYgKCFfZGF0YS0+X3BkZlZpZXdDb250cm9sbGVyKQotICAgICAgICByZXR1cm47Ci0K
LSAgICBfZGF0YS0+X3BkZlZpZXdDb250cm9sbGVyLT5maW5kU3RyaW5nKHN0cmluZywgb3B0aW9u
cywgY291bnQpOwotfQotCi0tICh2b2lkKV9jb3VudFN0cmluZ01hdGNoZXNJbkN1c3RvbVJlcHJl
c2VudGF0aW9uOihOU1N0cmluZyAqKXN0cmluZyB3aXRoRmluZE9wdGlvbnM6KFdlYktpdDo6Rmlu
ZE9wdGlvbnMpb3B0aW9ucyBtYXhNYXRjaENvdW50OihOU1VJbnRlZ2VyKWNvdW50Ci17Ci0gICAg
aWYgKCFfZGF0YS0+X3BkZlZpZXdDb250cm9sbGVyKQotICAgICAgICByZXR1cm47Ci0KLSAgICBf
ZGF0YS0+X3BkZlZpZXdDb250cm9sbGVyLT5jb3VudFN0cmluZ01hdGNoZXMoc3RyaW5nLCBvcHRp
b25zLCBjb3VudCk7Ci19Ci0KIC0gKHZvaWQpX3NldERyYWdJbWFnZTooTlNJbWFnZSAqKWltYWdl
IGF0OihOU1BvaW50KWNsaWVudFBvaW50IGxpbmtEcmFnOihCT09MKWxpbmtEcmFnCiB7CiAgICAg
SW50U2l6ZSBzaXplKFtpbWFnZSBzaXplXSk7CkBAIC0zMjEyLDIyICszMTQ4LDE1IEBAIHN0YXRp
YyBOU1N0cmluZyAqcGF0aFdpdGhVbmlxdWVGaWxlbmFtZUZvclBhdGgoTlNTdHJpbmcgKnBhdGgp
CiB7CiAgICAgTE9HKFZpZXcsICJDcmVhdGluZyBhbiBOU1ByaW50T3BlcmF0aW9uIGZvciBmcmFt
ZSAnJXMnIiwgdG9JbXBsKGZyYW1lUmVmKS0+dXJsKCkudXRmOCgpLmRhdGEoKSk7CiAKLSAgICAv
LyBPbmx5IHRoZSB0b3AgZnJhbWUgY2FuIGN1cnJlbnRseSBjb250YWluIGEgUERGIHZpZXcuCi0g
ICAgaWYgKF9kYXRhLT5fcGRmVmlld0NvbnRyb2xsZXIpIHsKLSAgICAgICAgaWYgKCF0b0ltcGwo
ZnJhbWVSZWYpLT5pc01haW5GcmFtZSgpKQotICAgICAgICAgICAgcmV0dXJuIDA7Ci0gICAgICAg
IHJldHVybiBfZGF0YS0+X3BkZlZpZXdDb250cm9sbGVyLT5tYWtlUHJpbnRPcGVyYXRpb24ocHJp
bnRJbmZvKTsKLSAgICB9IGVsc2UgewotICAgICAgICAvLyBGSVhNRTogSWYgdGhlIGZyYW1lIGNh
bm5vdCBiZSBwcmludGVkIChlLmcuIGlmIGl0IGNvbnRhaW5zIGFuIGVuY3J5cHRlZCBQREYgdGhh
dCBkaXNhbGxvd3MKLSAgICAgICAgLy8gcHJpbnRpbmcpLCB0aGlzIGZ1bmN0aW9uIHNob3VsZCBy
ZXR1cm4gbmlsLgotICAgICAgICBSZXRhaW5QdHI8V0tQcmludGluZ1ZpZXc+IHByaW50aW5nVmll
dyA9IGFkb3B0TlMoW1tXS1ByaW50aW5nVmlldyBhbGxvY10gaW5pdFdpdGhGcmFtZVByb3h5OnRv
SW1wbChmcmFtZVJlZikgdmlldzpzZWxmXSk7Ci0gICAgICAgIC8vIE5TUHJpbnRPcGVyYXRpb24g
dGFrZXMgb3duZXJzaGlwIG9mIHRoZSB2aWV3LgotICAgICAgICBOU1ByaW50T3BlcmF0aW9uICpw
cmludE9wZXJhdGlvbiA9IFtOU1ByaW50T3BlcmF0aW9uIHByaW50T3BlcmF0aW9uV2l0aFZpZXc6
cHJpbnRpbmdWaWV3LmdldCgpIHByaW50SW5mbzpwcmludEluZm9dOwotICAgICAgICBbcHJpbnRP
cGVyYXRpb24gc2V0Q2FuU3Bhd25TZXBhcmF0ZVRocmVhZDpZRVNdOwotICAgICAgICBbcHJpbnRP
cGVyYXRpb24gc2V0Sm9iVGl0bGU6dG9JbXBsKGZyYW1lUmVmKS0+dGl0bGUoKV07Ci0gICAgICAg
IHByaW50aW5nVmlldy0+X3ByaW50T3BlcmF0aW9uID0gcHJpbnRPcGVyYXRpb247Ci0gICAgICAg
IHJldHVybiBwcmludE9wZXJhdGlvbjsKLSAgICB9CisgICAgLy8gRklYTUU6IElmIHRoZSBmcmFt
ZSBjYW5ub3QgYmUgcHJpbnRlZCAoZS5nLiBpZiBpdCBjb250YWlucyBhbiBlbmNyeXB0ZWQgUERG
IHRoYXQgZGlzYWxsb3dzCisgICAgLy8gcHJpbnRpbmcpLCB0aGlzIGZ1bmN0aW9uIHNob3VsZCBy
ZXR1cm4gbmlsLgorICAgIFJldGFpblB0cjxXS1ByaW50aW5nVmlldz4gcHJpbnRpbmdWaWV3ID0g
YWRvcHROUyhbW1dLUHJpbnRpbmdWaWV3IGFsbG9jXSBpbml0V2l0aEZyYW1lUHJveHk6dG9JbXBs
KGZyYW1lUmVmKSB2aWV3OnNlbGZdKTsKKyAgICAvLyBOU1ByaW50T3BlcmF0aW9uIHRha2VzIG93
bmVyc2hpcCBvZiB0aGUgdmlldy4KKyAgICBOU1ByaW50T3BlcmF0aW9uICpwcmludE9wZXJhdGlv
biA9IFtOU1ByaW50T3BlcmF0aW9uIHByaW50T3BlcmF0aW9uV2l0aFZpZXc6cHJpbnRpbmdWaWV3
LmdldCgpIHByaW50SW5mbzpwcmludEluZm9dOworICAgIFtwcmludE9wZXJhdGlvbiBzZXRDYW5T
cGF3blNlcGFyYXRlVGhyZWFkOllFU107CisgICAgW3ByaW50T3BlcmF0aW9uIHNldEpvYlRpdGxl
OnRvSW1wbChmcmFtZVJlZiktPnRpdGxlKCldOworICAgIHByaW50aW5nVmlldy0+X3ByaW50T3Bl
cmF0aW9uID0gcHJpbnRPcGVyYXRpb247CisgICAgcmV0dXJuIHByaW50T3BlcmF0aW9uOwogfQog
CiAtICh2b2lkKXNldEZyYW1lOihOU1JlY3QpcmVjdCBhbmRTY3JvbGxCeTooTlNTaXplKW9mZnNl
dApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9tYWMvV0tWaWV3SW50
ZXJuYWwuaCBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvbWFjL1dLVmlld0ludGVybmFs
LmgKaW5kZXggN2Q3ZjYyYi4uOGU2MmM1NyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvVUlQ
cm9jZXNzL0FQSS9tYWMvV0tWaWV3SW50ZXJuYWwuaAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9VSVBy
b2Nlc3MvQVBJL21hYy9XS1ZpZXdJbnRlcm5hbC5oCkBAIC03NCwxMiArNzQsNiBAQCBuYW1lc3Bh
Y2UgV2ViS2l0IHsKIC0gKHZvaWQpX3BsdWdpbkZvY3VzT3JXaW5kb3dGb2N1c0NoYW5nZWQ6KEJP
T0wpcGx1Z2luSGFzRm9jdXNBbmRXaW5kb3dIYXNGb2N1cyBwbHVnaW5Db21wbGV4VGV4dElucHV0
SWRlbnRpZmllcjoodWludDY0X3QpcGx1Z2luQ29tcGxleFRleHRJbnB1dElkZW50aWZpZXI7CiAt
ICh2b2lkKV9zZXRQbHVnaW5Db21wbGV4VGV4dElucHV0U3RhdGU6KFdlYktpdDo6UGx1Z2luQ29t
cGxleFRleHRJbnB1dFN0YXRlKXBsdWdpbkNvbXBsZXhUZXh0SW5wdXRTdGF0ZSBwbHVnaW5Db21w
bGV4VGV4dElucHV0SWRlbnRpZmllcjoodWludDY0X3QpcGx1Z2luQ29tcGxleFRleHRJbnB1dElk
ZW50aWZpZXI7CiAKLS0gKHZvaWQpX3NldFBhZ2VIYXNDdXN0b21SZXByZXNlbnRhdGlvbjooQk9P
TClwYWdlSGFzQ3VzdG9tUmVwcmVzZW50YXRpb247Ci0tICh2b2lkKV9kaWRGaW5pc2hMb2FkaW5n
RGF0YUZvckN1c3RvbVJlcHJlc2VudGF0aW9uV2l0aFN1Z2dlc3RlZEZpbGVuYW1lOihjb25zdCBT
dHJpbmcmKXN1Z2dlc3RlZEZpbGVuYW1lIGRhdGFSZWZlcmVuY2U6KGNvbnN0IENvcmVJUEM6OkRh
dGFSZWZlcmVuY2UmKWRhdGFSZWZlcmVuY2U7Ci0tIChkb3VibGUpX2N1c3RvbVJlcHJlc2VudGF0
aW9uWm9vbUZhY3RvcjsKLS0gKHZvaWQpX3NldEN1c3RvbVJlcHJlc2VudGF0aW9uWm9vbUZhY3Rv
cjooZG91YmxlKXpvb21GYWN0b3I7Ci0tICh2b2lkKV9maW5kU3RyaW5nSW5DdXN0b21SZXByZXNl
bnRhdGlvbjooTlNTdHJpbmcgKilzdHJpbmcgd2l0aEZpbmRPcHRpb25zOihXZWJLaXQ6OkZpbmRP
cHRpb25zKW9wdGlvbnMgbWF4TWF0Y2hDb3VudDooTlNVSW50ZWdlciljb3VudDsKLS0gKHZvaWQp
X2NvdW50U3RyaW5nTWF0Y2hlc0luQ3VzdG9tUmVwcmVzZW50YXRpb246KE5TU3RyaW5nICopc3Ry
aW5nIHdpdGhGaW5kT3B0aW9uczooV2ViS2l0OjpGaW5kT3B0aW9ucylvcHRpb25zIG1heE1hdGNo
Q291bnQ6KE5TVUludGVnZXIpY291bnQ7CiAtICh2b2lkKV9zZXREcmFnSW1hZ2U6KE5TSW1hZ2Ug
KilpbWFnZSBhdDooTlNQb2ludCljbGllbnRQb2ludCBsaW5rRHJhZzooQk9PTClsaW5rRHJhZzsK
IC0gKHZvaWQpX3NldFByb21pc2VkRGF0YTooV2ViQ29yZTo6SW1hZ2UgKilpbWFnZSB3aXRoRmls
ZU5hbWU6KE5TU3RyaW5nICopZmlsZW5hbWUgd2l0aEV4dGVuc2lvbjooTlNTdHJpbmcgKilleHRl
bnNpb24gd2l0aFRpdGxlOihOU1N0cmluZyAqKXRpdGxlIHdpdGhVUkw6KE5TU3RyaW5nICopdXJs
IHdpdGhWaXNpYmxlVVJMOihOU1N0cmluZyAqKXZpc2libGVVcmwgd2l0aEFyY2hpdmU6KFdlYkNv
cmU6OlNoYXJlZEJ1ZmZlciopIGFyY2hpdmVCdWZmZXIgZm9yUGFzdGVib2FyZDooTlNTdHJpbmcg
KilwYXN0ZWJvYXJkTmFtZTsKIC0gKHZvaWQpX3VwZGF0ZVNlY3VyZUlucHV0U3RhdGU7CmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL3F0L3Jhdy9xcmF3d2Vidmlld19w
X3AuaCBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvcXQvcmF3L3FyYXd3ZWJ2aWV3X3Bf
cC5oCmluZGV4IGJhOTllMWEuLjdiYWNlOGIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1VJ
UHJvY2Vzcy9BUEkvcXQvcmF3L3FyYXd3ZWJ2aWV3X3BfcC5oCisrKyBiL1NvdXJjZS9XZWJLaXQy
L1VJUHJvY2Vzcy9BUEkvcXQvcmF3L3FyYXd3ZWJ2aWV3X3BfcC5oCkBAIC00MCwxMiArNDAsNiBA
QCBwdWJsaWM6CiAgICAgdmlydHVhbCB2b2lkIHByZWZlcmVuY2VzRGlkQ2hhbmdlKCkgeyB9CiAK
ICAgICB2aXJ0dWFsIHZvaWQgc2V0RmluZEluZGljYXRvcihQYXNzUmVmUHRyPFdlYktpdDo6Rmlu
ZEluZGljYXRvcj4sIGJvb2wgZmFkZU91dCwgYm9vbCBhbmltYXRlKSB7IH0KLSAgICB2aXJ0dWFs
IHZvaWQgZGlkQ29tbWl0TG9hZEZvck1haW5GcmFtZShib29sIHVzZUN1c3RvbVJlcHJlc2VudGF0
aW9uKSB7IH0KLSAgICB2aXJ0dWFsIHZvaWQgZGlkRmluaXNoTG9hZGluZ0RhdGFGb3JDdXN0b21S
ZXByZXNlbnRhdGlvbihjb25zdCBTdHJpbmcmIHN1Z2dlc3RlZEZpbGVuYW1lLCBjb25zdCBDb3Jl
SVBDOjpEYXRhUmVmZXJlbmNlJikgeyB9Ci0gICAgdmlydHVhbCBkb3VibGUgY3VzdG9tUmVwcmVz
ZW50YXRpb25ab29tRmFjdG9yKCkgeyByZXR1cm4gMTsgfQotICAgIHZpcnR1YWwgdm9pZCBzZXRD
dXN0b21SZXByZXNlbnRhdGlvblpvb21GYWN0b3IoZG91YmxlKSB7IH0KLSAgICB2aXJ0dWFsIHZv
aWQgZmluZFN0cmluZ0luQ3VzdG9tUmVwcmVzZW50YXRpb24oY29uc3QgU3RyaW5nJiwgV2ViS2l0
OjpGaW5kT3B0aW9ucywgdW5zaWduZWQgbWF4TWF0Y2hDb3VudCkgeyB9Ci0gICAgdmlydHVhbCB2
b2lkIGNvdW50U3RyaW5nTWF0Y2hlc0luQ3VzdG9tUmVwcmVzZW50YXRpb24oY29uc3QgU3RyaW5n
JiwgV2ViS2l0OjpGaW5kT3B0aW9ucywgdW5zaWduZWQgbWF4TWF0Y2hDb3VudCkgeyB9CiAgICAg
dmlydHVhbCB2b2lkIGNsZWFyQWxsRWRpdENvbW1hbmRzKCkgeyB9CiAKICAgICB2aXJ0dWFsIHZv
aWQgZGlkQ2hhbmdlVmlld3BvcnRQcm9wZXJ0aWVzKGNvbnN0IFdlYkNvcmU6OlZpZXdwb3J0QXR0
cmlidXRlcyYgYXR0cik7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQ29v
cmRpbmF0ZWRHcmFwaGljcy9XZWJWaWV3LmNwcCBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9D
b29yZGluYXRlZEdyYXBoaWNzL1dlYlZpZXcuY3BwCmluZGV4IGUxYjQ0ZTAuLjA0MGNlMWIgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9Db29yZGluYXRlZEdyYXBoaWNzL1dl
YlZpZXcuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9Db29yZGluYXRlZEdyYXBo
aWNzL1dlYlZpZXcuY3BwCkBAIC00MzYsNDIgKzQzNiwxMSBAQCB2b2lkIFdlYlZpZXc6OnVwZGF0
ZUFjY2VsZXJhdGVkQ29tcG9zaXRpbmdNb2RlKGNvbnN0IExheWVyVHJlZUNvbnRleHQmKQogICAg
IG5vdEltcGxlbWVudGVkKCk7CiB9CiAKLXZvaWQgV2ViVmlldzo6ZGlkQ29tbWl0TG9hZEZvck1h
aW5GcmFtZShib29sKQotewotICAgIG5vdEltcGxlbWVudGVkKCk7Ci19Ci0KLXZvaWQgV2ViVmll
dzo6ZGlkRmluaXNoTG9hZGluZ0RhdGFGb3JDdXN0b21SZXByZXNlbnRhdGlvbihjb25zdCBTdHJp
bmcmLCBjb25zdCBDb3JlSVBDOjpEYXRhUmVmZXJlbmNlJikKLXsKLSAgICBub3RJbXBsZW1lbnRl
ZCgpOwotfQotCi1kb3VibGUgV2ViVmlldzo6Y3VzdG9tUmVwcmVzZW50YXRpb25ab29tRmFjdG9y
KCkKLXsKLSAgICBub3RJbXBsZW1lbnRlZCgpOwotICAgIHJldHVybiAwOwotfQotCi12b2lkIFdl
YlZpZXc6OnNldEN1c3RvbVJlcHJlc2VudGF0aW9uWm9vbUZhY3Rvcihkb3VibGUpCi17Ci0gICAg
bm90SW1wbGVtZW50ZWQoKTsKLX0KLQogdm9pZCBXZWJWaWV3OjpmbGFzaEJhY2tpbmdTdG9yZVVw
ZGF0ZXMoY29uc3QgVmVjdG9yPEludFJlY3Q+JikKIHsKICAgICBub3RJbXBsZW1lbnRlZCgpOwog
fQogCi12b2lkIFdlYlZpZXc6OmZpbmRTdHJpbmdJbkN1c3RvbVJlcHJlc2VudGF0aW9uKGNvbnN0
IFN0cmluZyYsIEZpbmRPcHRpb25zLCB1bnNpZ25lZCkKLXsKLSAgICBub3RJbXBsZW1lbnRlZCgp
OwotfQotCi12b2lkIFdlYlZpZXc6OmNvdW50U3RyaW5nTWF0Y2hlc0luQ3VzdG9tUmVwcmVzZW50
YXRpb24oY29uc3QgU3RyaW5nJiwgRmluZE9wdGlvbnMsIHVuc2lnbmVkKQotewotICAgIG5vdElt
cGxlbWVudGVkKCk7Ci19Ci0KIHZvaWQgV2ViVmlldzo6dXBkYXRlVGV4dElucHV0U3RhdGUoKQog
ewogICAgIG5vdEltcGxlbWVudGVkKCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVBy
b2Nlc3MvQ29vcmRpbmF0ZWRHcmFwaGljcy9XZWJWaWV3LmggYi9Tb3VyY2UvV2ViS2l0Mi9VSVBy
b2Nlc3MvQ29vcmRpbmF0ZWRHcmFwaGljcy9XZWJWaWV3LmgKaW5kZXggN2NhM2M2Mi4uYmI1ZTcy
ZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0Nvb3JkaW5hdGVkR3JhcGhp
Y3MvV2ViVmlldy5oCisrKyBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9Db29yZGluYXRlZEdy
YXBoaWNzL1dlYlZpZXcuaApAQCAtMTgwLDE1ICsxODAsNyBAQCBwcm90ZWN0ZWQ6CiAgICAgdmly
dHVhbCB2b2lkIGV4aXRBY2NlbGVyYXRlZENvbXBvc2l0aW5nTW9kZSgpIE9WRVJSSURFOwogICAg
IHZpcnR1YWwgdm9pZCB1cGRhdGVBY2NlbGVyYXRlZENvbXBvc2l0aW5nTW9kZShjb25zdCBMYXll
clRyZWVDb250ZXh0JikgT1ZFUlJJREU7CiAKLSAgICB2aXJ0dWFsIHZvaWQgZGlkQ29tbWl0TG9h
ZEZvck1haW5GcmFtZShib29sKSBPVkVSUklERTsKLSAgICB2aXJ0dWFsIHZvaWQgZGlkRmluaXNo
TG9hZGluZ0RhdGFGb3JDdXN0b21SZXByZXNlbnRhdGlvbihjb25zdCBTdHJpbmcmLCBjb25zdCBD
b3JlSVBDOjpEYXRhUmVmZXJlbmNlJikgT1ZFUlJJREU7Ci0KLSAgICB2aXJ0dWFsIGRvdWJsZSBj
dXN0b21SZXByZXNlbnRhdGlvblpvb21GYWN0b3IoKSBPVkVSUklERTsKLSAgICB2aXJ0dWFsIHZv
aWQgc2V0Q3VzdG9tUmVwcmVzZW50YXRpb25ab29tRmFjdG9yKGRvdWJsZSkgT1ZFUlJJREU7Ci0K
ICAgICB2aXJ0dWFsIHZvaWQgZmxhc2hCYWNraW5nU3RvcmVVcGRhdGVzKGNvbnN0IFZlY3RvcjxX
ZWJDb3JlOjpJbnRSZWN0PiYpIE9WRVJSSURFOwotICAgIHZpcnR1YWwgdm9pZCBmaW5kU3RyaW5n
SW5DdXN0b21SZXByZXNlbnRhdGlvbihjb25zdCBTdHJpbmcmLCBGaW5kT3B0aW9ucywgdW5zaWdu
ZWQpIE9WRVJSSURFOwotICAgIHZpcnR1YWwgdm9pZCBjb3VudFN0cmluZ01hdGNoZXNJbkN1c3Rv
bVJlcHJlc2VudGF0aW9uKGNvbnN0IFN0cmluZyYsIEZpbmRPcHRpb25zLCB1bnNpZ25lZCkgT1ZF
UlJJREU7CiAKIHByb3RlY3RlZDoKICAgICBXZWJWaWV3Q2xpZW50IG1fY2xpZW50OwpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0RyYXdpbmdBcmVhUHJveHkuaCBiL1NvdXJj
ZS9XZWJLaXQyL1VJUHJvY2Vzcy9EcmF3aW5nQXJlYVByb3h5LmgKaW5kZXggZTI2MGRiYy4uOTNi
OWYwYiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0RyYXdpbmdBcmVhUHJv
eHkuaAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvRHJhd2luZ0FyZWFQcm94eS5oCkBA
IC02Nyw3ICs2Nyw2IEBAIHB1YmxpYzoKICAgICAvLyBUaGUgdGltZW91dCwgaW4gc2Vjb25kcywg
d2UgdXNlIHdoZW4gd2FpdGluZyBmb3IgYSBEaWRVcGRhdGVHZW9tZXRyeSBtZXNzYWdlLgogICAg
IHN0YXRpYyBjb25zdCBkb3VibGUgZGlkVXBkYXRlQmFja2luZ1N0b3JlU3RhdGVUaW1lb3V0Owog
Ci0gICAgdmlydHVhbCB2b2lkIHBhZ2VDdXN0b21SZXByZXNlbnRhdGlvbkNoYW5nZWQoKSB7IH0K
ICAgICB2aXJ0dWFsIHZvaWQgd2FpdEZvclBvc3NpYmxlR2VvbWV0cnlVcGRhdGUoZG91YmxlID0g
ZGlkVXBkYXRlQmFja2luZ1N0b3JlU3RhdGVUaW1lb3V0KSB7IH0KIAogICAgIHZpcnR1YWwgdm9p
ZCBjb2xvclNwYWNlRGlkQ2hhbmdlKCkgeyB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9V
SVByb2Nlc3MvRHJhd2luZ0FyZWFQcm94eUltcGwuY3BwIGIvU291cmNlL1dlYktpdDIvVUlQcm9j
ZXNzL0RyYXdpbmdBcmVhUHJveHlJbXBsLmNwcAppbmRleCA0ZGMwY2VmLi43OTBjOGE5IDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvRHJhd2luZ0FyZWFQcm94eUltcGwuY3Bw
CisrKyBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9EcmF3aW5nQXJlYVByb3h5SW1wbC5jcHAK
QEAgLTM5NiwxMSArMzk2LDYgQEAgdm9pZCBEcmF3aW5nQXJlYVByb3h5SW1wbDo6dXBkYXRlQWNj
ZWxlcmF0ZWRDb21wb3NpdGluZ01vZGUoY29uc3QgTGF5ZXJUcmVlQ29udGUKIH0KICNlbmRpZgog
Ci12b2lkIERyYXdpbmdBcmVhUHJveHlJbXBsOjpwYWdlQ3VzdG9tUmVwcmVzZW50YXRpb25DaGFu
Z2VkKCkKLXsKLSAgICBtX3dlYlBhZ2VQcm94eS0+cHJvY2VzcygpLT5zZW5kKE1lc3NhZ2VzOjpE
cmF3aW5nQXJlYTo6UGFnZUN1c3RvbVJlcHJlc2VudGF0aW9uQ2hhbmdlZCgpLCBtX3dlYlBhZ2VQ
cm94eS0+cGFnZUlEKCkpOwotfQotCiB2b2lkIERyYXdpbmdBcmVhUHJveHlJbXBsOjpkaXNjYXJk
QmFja2luZ1N0b3JlU29vbigpCiB7CiAgICAgaWYgKCFtX2lzQmFja2luZ1N0b3JlRGlzY2FyZGFi
bGUgfHwgbV9kaXNjYXJkQmFja2luZ1N0b3JlVGltZXIuaXNBY3RpdmUoKSkKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9EcmF3aW5nQXJlYVByb3h5SW1wbC5oIGIvU291cmNl
L1dlYktpdDIvVUlQcm9jZXNzL0RyYXdpbmdBcmVhUHJveHlJbXBsLmgKaW5kZXggOWE0MTEzZC4u
MjdiYzE0MyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0RyYXdpbmdBcmVh
UHJveHlJbXBsLmgKKysrIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0RyYXdpbmdBcmVhUHJv
eHlJbXBsLmgKQEAgLTkxLDggKzkxLDYgQEAgcHJpdmF0ZToKICAgICBib29sIGlzSW5BY2NlbGVy
YXRlZENvbXBvc2l0aW5nTW9kZSgpIGNvbnN0IHsgcmV0dXJuIGZhbHNlOyB9CiAjZW5kaWYKIAot
ICAgIHZpcnR1YWwgdm9pZCBwYWdlQ3VzdG9tUmVwcmVzZW50YXRpb25DaGFuZ2VkKCk7Ci0KICAg
ICB2b2lkIGRpc2NhcmRCYWNraW5nU3RvcmVTb29uKCk7CiAgICAgdm9pZCBkaXNjYXJkQmFja2lu
Z1N0b3JlKCk7CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9QYWdlQ2xp
ZW50LmggYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvUGFnZUNsaWVudC5oCmluZGV4IDk1ZjY2
OTYuLmY4NmYxZGUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9QYWdlQ2xp
ZW50LmgKKysrIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL1BhZ2VDbGllbnQuaApAQCAtMjIz
LDE1ICsyMjMsNyBAQCBwdWJsaWM6CiAjZW5kaWYgLy8gVVNFKEFQUEtJVCkKICNlbmRpZiAvLyBQ
TEFURk9STShNQUMpCiAKLSAgICAvLyBDdXN0b20gcmVwcmVzZW50YXRpb25zLgotICAgIHZpcnR1
YWwgdm9pZCBkaWRDb21taXRMb2FkRm9yTWFpbkZyYW1lKGJvb2wgdXNlQ3VzdG9tUmVwcmVzZW50
YXRpb24pID0gMDsKLSAgICB2aXJ0dWFsIHZvaWQgZGlkRmluaXNoTG9hZGluZ0RhdGFGb3JDdXN0
b21SZXByZXNlbnRhdGlvbihjb25zdCBTdHJpbmcmIHN1Z2dlc3RlZEZpbGVuYW1lLCBjb25zdCBD
b3JlSVBDOjpEYXRhUmVmZXJlbmNlJikgPSAwOwotICAgIHZpcnR1YWwgZG91YmxlIGN1c3RvbVJl
cHJlc2VudGF0aW9uWm9vbUZhY3RvcigpID0gMDsKLSAgICB2aXJ0dWFsIHZvaWQgc2V0Q3VzdG9t
UmVwcmVzZW50YXRpb25ab29tRmFjdG9yKGRvdWJsZSkgPSAwOwotCiAgICAgdmlydHVhbCB2b2lk
IGZsYXNoQmFja2luZ1N0b3JlVXBkYXRlcyhjb25zdCBWZWN0b3I8V2ViQ29yZTo6SW50UmVjdD4m
IHVwZGF0ZVJlY3RzKSA9IDA7Ci0gICAgdmlydHVhbCB2b2lkIGZpbmRTdHJpbmdJbkN1c3RvbVJl
cHJlc2VudGF0aW9uKGNvbnN0IFN0cmluZyYsIEZpbmRPcHRpb25zLCB1bnNpZ25lZCBtYXhNYXRj
aENvdW50KSA9IDA7Ci0gICAgdmlydHVhbCB2b2lkIGNvdW50U3RyaW5nTWF0Y2hlc0luQ3VzdG9t
UmVwcmVzZW50YXRpb24oY29uc3QgU3RyaW5nJiwgRmluZE9wdGlvbnMsIHVuc2lnbmVkIG1heE1h
dGNoQ291bnQpID0gMDsKIH07CiAKIH0gLy8gbmFtZXNwYWNlIFdlYktpdApkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYktpdDIvVUlQcm9jZXNzL1dlYlBhZ2VQcm94eS5jcHAgYi9Tb3VyY2UvV2ViS2l0
Mi9VSVByb2Nlc3MvV2ViUGFnZVByb3h5LmNwcAppbmRleCA3NTVjMGZlLi4yMjA5YjBmIDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvV2ViUGFnZVByb3h5LmNwcAorKysgYi9T
b3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvV2ViUGFnZVByb3h5LmNwcApAQCAtMjkyLDcgKzI5Miw2
IEBAIFdlYlBhZ2VQcm94eTo6V2ViUGFnZVByb3h5KFBhZ2VDbGllbnQqIHBhZ2VDbGllbnQsIFBh
c3NSZWZQdHI8V2ViUHJvY2Vzc1Byb3h5PiBwCiAgICAgLCBtX3NwZWxsRG9jdW1lbnRUYWcoMCkK
ICAgICAsIG1faGFzU3BlbGxEb2N1bWVudFRhZyhmYWxzZSkKICAgICAsIG1fcGVuZGluZ0xlYXJu
T3JJZ25vcmVXb3JkTWVzc2FnZUNvdW50KDApCi0gICAgLCBtX21haW5GcmFtZUhhc0N1c3RvbVJl
cHJlc2VudGF0aW9uKGZhbHNlKQogICAgICwgbV9tYWluRnJhbWVIYXNIb3Jpem9udGFsU2Nyb2xs
YmFyKGZhbHNlKQogICAgICwgbV9tYWluRnJhbWVIYXNWZXJ0aWNhbFNjcm9sbGJhcihmYWxzZSkK
ICAgICAsIG1fY2FuU2hvcnRDaXJjdWl0SG9yaXpvbnRhbFdoZWVsRXZlbnRzKHRydWUpCkBAIC0x
NjM0LDcgKzE2MzMsNyBAQCB2b2lkIFdlYlBhZ2VQcm94eTo6c3VzcGVuZEFjdGl2ZURPTU9iamVj
dHNBbmRBbmltYXRpb25zKCkKIAogYm9vbCBXZWJQYWdlUHJveHk6OnN1cHBvcnRzVGV4dEVuY29k
aW5nKCkgY29uc3QKIHsKLSAgICByZXR1cm4gIW1fbWFpbkZyYW1lSGFzQ3VzdG9tUmVwcmVzZW50
YXRpb24gJiYgbV9tYWluRnJhbWUgJiYgIW1fbWFpbkZyYW1lLT5pc0Rpc3BsYXlpbmdTdGFuZGFs
b25lSW1hZ2VEb2N1bWVudCgpOworICAgIHJldHVybiBtX21haW5GcmFtZSAmJiAhbV9tYWluRnJh
bWUtPmlzRGlzcGxheWluZ1N0YW5kYWxvbmVJbWFnZURvY3VtZW50KCk7CiB9CiAKIHZvaWQgV2Vi
UGFnZVByb3h5OjpzZXRDdXN0b21UZXh0RW5jb2RpbmdOYW1lKGNvbnN0IFN0cmluZyYgZW5jb2Rp
bmdOYW1lKQpAQCAtMTY3NCw5ICsxNjczLDYgQEAgdm9pZCBXZWJQYWdlUHJveHk6OnJlc3RvcmVG
cm9tU2Vzc2lvblN0YXRlRGF0YShXZWJEYXRhKikKIAogYm9vbCBXZWJQYWdlUHJveHk6OnN1cHBv
cnRzVGV4dFpvb20oKSBjb25zdAogewotICAgIGlmIChtX21haW5GcmFtZUhhc0N1c3RvbVJlcHJl
c2VudGF0aW9uKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KICAgICAvLyBGSVhNRTogVGhpcyBz
aG91bGQgYWxzbyByZXR1cm4gZmFsc2UgZm9yIHN0YW5kYWxvbmUgbWVkaWEgYW5kIHBsdWctaW4g
ZG9jdW1lbnRzLgogICAgIGlmICghbV9tYWluRnJhbWUgfHwgbV9tYWluRnJhbWUtPmlzRGlzcGxh
eWluZ1N0YW5kYWxvbmVJbWFnZURvY3VtZW50KCkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKQEAg
LTE2ODksOSArMTY4NSw2IEBAIHZvaWQgV2ViUGFnZVByb3h5OjpzZXRUZXh0Wm9vbUZhY3Rvcihk
b3VibGUgem9vbUZhY3RvcikKICAgICBpZiAoIWlzVmFsaWQoKSkKICAgICAgICAgcmV0dXJuOwog
Ci0gICAgaWYgKG1fbWFpbkZyYW1lSGFzQ3VzdG9tUmVwcmVzZW50YXRpb24pCi0gICAgICAgIHJl
dHVybjsKLQogICAgIGlmIChtX3RleHRab29tRmFjdG9yID09IHpvb21GYWN0b3IpCiAgICAgICAg
IHJldHVybjsKIApAQCAtMTY5OSwyMSArMTY5MiwxMSBAQCB2b2lkIFdlYlBhZ2VQcm94eTo6c2V0
VGV4dFpvb21GYWN0b3IoZG91YmxlIHpvb21GYWN0b3IpCiAgICAgbV9wcm9jZXNzLT5zZW5kKE1l
c3NhZ2VzOjpXZWJQYWdlOjpTZXRUZXh0Wm9vbUZhY3RvcihtX3RleHRab29tRmFjdG9yKSwgbV9w
YWdlSUQpOyAKIH0KIAotZG91YmxlIFdlYlBhZ2VQcm94eTo6cGFnZVpvb21GYWN0b3IoKSBjb25z
dAotewotICAgIHJldHVybiBtX21haW5GcmFtZUhhc0N1c3RvbVJlcHJlc2VudGF0aW9uID8gbV9w
YWdlQ2xpZW50LT5jdXN0b21SZXByZXNlbnRhdGlvblpvb21GYWN0b3IoKSA6IG1fcGFnZVpvb21G
YWN0b3I7Ci19Ci0KIHZvaWQgV2ViUGFnZVByb3h5OjpzZXRQYWdlWm9vbUZhY3Rvcihkb3VibGUg
em9vbUZhY3RvcikKIHsKICAgICBpZiAoIWlzVmFsaWQoKSkKICAgICAgICAgcmV0dXJuOwogCi0g
ICAgaWYgKG1fbWFpbkZyYW1lSGFzQ3VzdG9tUmVwcmVzZW50YXRpb24pIHsKLSAgICAgICAgbV9w
YWdlQ2xpZW50LT5zZXRDdXN0b21SZXByZXNlbnRhdGlvblpvb21GYWN0b3Ioem9vbUZhY3Rvcik7
Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KICAgICBpZiAobV9wYWdlWm9vbUZhY3RvciA9PSB6
b29tRmFjdG9yKQogICAgICAgICByZXR1cm47CiAKQEAgLTE3MjYsMTEgKzE3MDksNiBAQCB2b2lk
IFdlYlBhZ2VQcm94eTo6c2V0UGFnZUFuZFRleHRab29tRmFjdG9ycyhkb3VibGUgcGFnZVpvb21G
YWN0b3IsIGRvdWJsZSB0ZXh0WgogICAgIGlmICghaXNWYWxpZCgpKQogICAgICAgICByZXR1cm47
CiAKLSAgICBpZiAobV9tYWluRnJhbWVIYXNDdXN0b21SZXByZXNlbnRhdGlvbikgewotICAgICAg
ICBtX3BhZ2VDbGllbnQtPnNldEN1c3RvbVJlcHJlc2VudGF0aW9uWm9vbUZhY3RvcihwYWdlWm9v
bUZhY3Rvcik7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KICAgICBpZiAobV9wYWdlWm9vbUZh
Y3RvciA9PSBwYWdlWm9vbUZhY3RvciAmJiBtX3RleHRab29tRmFjdG9yID09IHRleHRab29tRmFj
dG9yKQogICAgICAgICByZXR1cm47CiAKQEAgLTE5NTgsMTAgKzE5MzYsNyBAQCB2b2lkIFdlYlBh
Z2VQcm94eTo6ZmluZFN0cmluZ01hdGNoZXMoY29uc3QgU3RyaW5nJiBzdHJpbmcsIEZpbmRPcHRp
b25zIG9wdGlvbnMsCiAKIHZvaWQgV2ViUGFnZVByb3h5OjpmaW5kU3RyaW5nKGNvbnN0IFN0cmlu
ZyYgc3RyaW5nLCBGaW5kT3B0aW9ucyBvcHRpb25zLCB1bnNpZ25lZCBtYXhNYXRjaENvdW50KQog
ewotICAgIGlmIChtX21haW5GcmFtZUhhc0N1c3RvbVJlcHJlc2VudGF0aW9uKQotICAgICAgICBt
X3BhZ2VDbGllbnQtPmZpbmRTdHJpbmdJbkN1c3RvbVJlcHJlc2VudGF0aW9uKHN0cmluZywgb3B0
aW9ucywgbWF4TWF0Y2hDb3VudCk7Ci0gICAgZWxzZQotICAgICAgICBtX3Byb2Nlc3MtPnNlbmQo
TWVzc2FnZXM6OldlYlBhZ2U6OkZpbmRTdHJpbmcoc3RyaW5nLCBvcHRpb25zLCBtYXhNYXRjaENv
dW50KSwgbV9wYWdlSUQpOworICAgIG1fcHJvY2Vzcy0+c2VuZChNZXNzYWdlczo6V2ViUGFnZTo6
RmluZFN0cmluZyhzdHJpbmcsIG9wdGlvbnMsIG1heE1hdGNoQ291bnQpLCBtX3BhZ2VJRCk7CiB9
CiAKIHZvaWQgV2ViUGFnZVByb3h5OjpnZXRJbWFnZUZvckZpbmRNYXRjaChpbnQzMl90IG1hdGNo
SW5kZXgpCkBAIC0xOTgxLDExICsxOTU2LDYgQEAgdm9pZCBXZWJQYWdlUHJveHk6OmhpZGVGaW5k
VUkoKQogCiB2b2lkIFdlYlBhZ2VQcm94eTo6Y291bnRTdHJpbmdNYXRjaGVzKGNvbnN0IFN0cmlu
ZyYgc3RyaW5nLCBGaW5kT3B0aW9ucyBvcHRpb25zLCB1bnNpZ25lZCBtYXhNYXRjaENvdW50KQog
ewotICAgIGlmIChtX21haW5GcmFtZUhhc0N1c3RvbVJlcHJlc2VudGF0aW9uKSB7Ci0gICAgICAg
IG1fcGFnZUNsaWVudC0+Y291bnRTdHJpbmdNYXRjaGVzSW5DdXN0b21SZXByZXNlbnRhdGlvbihz
dHJpbmcsIG9wdGlvbnMsIG1heE1hdGNoQ291bnQpOwotICAgICAgICByZXR1cm47Ci0gICAgfQot
CiAgICAgaWYgKCFpc1ZhbGlkKCkpCiAgICAgICAgIHJldHVybjsKIApAQCAtMjI4MCw3ICsyMjUw
LDcgQEAgdm9pZCBXZWJQYWdlUHJveHk6OmNsZWFyTG9hZERlcGVuZGVudENhbGxiYWNrcygpCiAg
ICAgfQogfQogCi12b2lkIFdlYlBhZ2VQcm94eTo6ZGlkQ29tbWl0TG9hZEZvckZyYW1lKHVpbnQ2
NF90IGZyYW1lSUQsIGNvbnN0IFN0cmluZyYgbWltZVR5cGUsIGJvb2wgZnJhbWVIYXNDdXN0b21S
ZXByZXNlbnRhdGlvbiwgdWludDMyX3Qgb3BhcXVlRnJhbWVMb2FkVHlwZSwgY29uc3QgUGxhdGZv
cm1DZXJ0aWZpY2F0ZUluZm8mIGNlcnRpZmljYXRlSW5mbywgQ29yZUlQQzo6TWVzc2FnZURlY29k
ZXImIGRlY29kZXIpCit2b2lkIFdlYlBhZ2VQcm94eTo6ZGlkQ29tbWl0TG9hZEZvckZyYW1lKHVp
bnQ2NF90IGZyYW1lSUQsIGNvbnN0IFN0cmluZyYgbWltZVR5cGUsIHVpbnQzMl90IG9wYXF1ZUZy
YW1lTG9hZFR5cGUsIGNvbnN0IFBsYXRmb3JtQ2VydGlmaWNhdGVJbmZvJiBjZXJ0aWZpY2F0ZUlu
Zm8sIENvcmVJUEM6Ok1lc3NhZ2VEZWNvZGVyJiBkZWNvZGVyKQogewogICAgIFJlZlB0cjxBUElP
YmplY3Q+IHVzZXJEYXRhOwogICAgIFdlYkNvbnRleHRVc2VyTWVzc2FnZURlY29kZXIgbWVzc2Fn
ZURlY29kZXIodXNlckRhdGEsIG1fcHJvY2Vzcy5nZXQoKSk7CkBAIC0yMzAyLDIwICsyMjcyLDYg
QEAgdm9pZCBXZWJQYWdlUHJveHk6OmRpZENvbW1pdExvYWRGb3JGcmFtZSh1aW50NjRfdCBmcmFt
ZUlELCBjb25zdCBTdHJpbmcmIG1pbWVUeXAKIAogICAgIGZyYW1lLT5kaWRDb21taXRMb2FkKG1p
bWVUeXBlLCBjZXJ0aWZpY2F0ZUluZm8pOwogCi0gICAgaWYgKGZyYW1lLT5pc01haW5GcmFtZSgp
KSB7Ci0gICAgICAgIG1fbWFpbkZyYW1lSGFzQ3VzdG9tUmVwcmVzZW50YXRpb24gPSBmcmFtZUhh
c0N1c3RvbVJlcHJlc2VudGF0aW9uOwotCi0gICAgICAgIGlmIChtX21haW5GcmFtZUhhc0N1c3Rv
bVJlcHJlc2VudGF0aW9uKSB7Ci0gICAgICAgICAgICAvLyBBbHdheXMgYXNzdW1lIHRoYXQgdGhl
IG1haW4gZnJhbWUgaXMgcGlubmVkIGhlcmUsIHNpbmNlIHRoZSBjdXN0b20gcmVwcmVzZW50YXRp
b24gdmlldyB3aWxsIGhhbmRsZQotICAgICAgICAgICAgLy8gYW55IHdoZWVsIGV2ZW50cyBhbmQg
ZGlzcGF0Y2ggdGhlbSB0byB0aGUgV0tWaWV3IHdoZW4gbmVjZXNzYXJ5LgotICAgICAgICAgICAg
bV9tYWluRnJhbWVJc1Bpbm5lZFRvTGVmdFNpZGUgPSB0cnVlOwotICAgICAgICAgICAgbV9tYWlu
RnJhbWVJc1Bpbm5lZFRvUmlnaHRTaWRlID0gdHJ1ZTsKLSAgICAgICAgICAgIG1fbWFpbkZyYW1l
SXNQaW5uZWRUb1RvcFNpZGUgPSB0cnVlOwotICAgICAgICAgICAgbV9tYWluRnJhbWVJc1Bpbm5l
ZFRvQm90dG9tU2lkZSA9IHRydWU7Ci0gICAgICAgIH0KLSAgICAgICAgbV9wYWdlQ2xpZW50LT5k
aWRDb21taXRMb2FkRm9yTWFpbkZyYW1lKGZyYW1lSGFzQ3VzdG9tUmVwcmVzZW50YXRpb24pOwot
ICAgIH0KLQogICAgIC8vIEV2ZW4gaWYgV2ViUGFnZSBoYXMgdGhlIGRlZmF1bHQgcGFnZVNjYWxl
RmFjdG9yIChhbmQgdGhlcmVmb3JlIGRvZXNuJ3QgcmVzZXQgaXQpLAogICAgIC8vIFdlYlBhZ2VQ
cm94eSdzIGNhY2hlIG9mIHRoZSB2YWx1ZSBjYW4gZ2V0IG91dCBvZiBzeW5jIChlLmcuIGluIHRo
ZSBjYXNlIHdoZXJlIGEKICAgICAvLyBwbHVnaW4gaXMgaGFuZGxpbmcgcGFnZSBzY2FsaW5nIGl0
c2VsZikgc28gd2Ugc2hvdWxkIHJlc2V0IGl0IHRvIHRoZSBkZWZhdWx0CkBAIC00MjI5LDExICs0
MTg1LDYgQEAgYm9vbCBXZWJQYWdlUHJveHk6OndpbGxIYW5kbGVIb3Jpem9udGFsU2Nyb2xsRXZl
bnRzKCkgY29uc3QKICAgICByZXR1cm4gIW1fY2FuU2hvcnRDaXJjdWl0SG9yaXpvbnRhbFdoZWVs
RXZlbnRzOwogfQogCi12b2lkIFdlYlBhZ2VQcm94eTo6ZGlkRmluaXNoTG9hZGluZ0RhdGFGb3JD
dXN0b21SZXByZXNlbnRhdGlvbihjb25zdCBTdHJpbmcmIHN1Z2dlc3RlZEZpbGVuYW1lLCBjb25z
dCBDb3JlSVBDOjpEYXRhUmVmZXJlbmNlJiBkYXRhUmVmZXJlbmNlKQotewotICAgIG1fcGFnZUNs
aWVudC0+ZGlkRmluaXNoTG9hZGluZ0RhdGFGb3JDdXN0b21SZXByZXNlbnRhdGlvbihzdWdnZXN0
ZWRGaWxlbmFtZSwgZGF0YVJlZmVyZW5jZSk7Ci19Ci0KIHZvaWQgV2ViUGFnZVByb3h5OjpiYWNr
Rm9yd2FyZFJlbW92ZWRJdGVtKHVpbnQ2NF90IGl0ZW1JRCkKIHsKICAgICBtX3Byb2Nlc3MtPnNl
bmQoTWVzc2FnZXM6OldlYlBhZ2U6OkRpZFJlbW92ZUJhY2tGb3J3YXJkSXRlbShpdGVtSUQpLCBt
X3BhZ2VJRCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvV2ViUGFnZVBy
b3h5LmggYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvV2ViUGFnZVByb3h5LmgKaW5kZXggN2Vl
OTM5ZS4uMjYxOTljMSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL1dlYlBh
Z2VQcm94eS5oCisrKyBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9XZWJQYWdlUHJveHkuaApA
QCAtNDc0LDkgKzQ3NCw5IEBAIHB1YmxpYzoKICAgICB2b2lkIHJlc3RvcmVGcm9tU2Vzc2lvblN0
YXRlRGF0YShXZWJEYXRhKik7CiAKICAgICBib29sIHN1cHBvcnRzVGV4dFpvb20oKSBjb25zdDsK
LSAgICBkb3VibGUgdGV4dFpvb21GYWN0b3IoKSBjb25zdCB7IHJldHVybiBtX21haW5GcmFtZUhh
c0N1c3RvbVJlcHJlc2VudGF0aW9uID8gMSA6IG1fdGV4dFpvb21GYWN0b3I7IH0KKyAgICBkb3Vi
bGUgdGV4dFpvb21GYWN0b3IoKSBjb25zdCB7IHJldHVybiBtX3RleHRab29tRmFjdG9yOyB9CiAg
ICAgdm9pZCBzZXRUZXh0Wm9vbUZhY3Rvcihkb3VibGUpOwotICAgIGRvdWJsZSBwYWdlWm9vbUZh
Y3RvcigpIGNvbnN0OworICAgIGRvdWJsZSBwYWdlWm9vbUZhY3RvcigpIGNvbnN0IHsgcmV0dXJu
IG1fcGFnZVpvb21GYWN0b3I7IH0KICAgICB2b2lkIHNldFBhZ2Vab29tRmFjdG9yKGRvdWJsZSk7
CiAgICAgdm9pZCBzZXRQYWdlQW5kVGV4dFpvb21GYWN0b3JzKGRvdWJsZSBwYWdlWm9vbUZhY3Rv
ciwgZG91YmxlIHRleHRab29tRmFjdG9yKTsKIApAQCAtODA3LDcgKzgwNyw3IEBAIHByaXZhdGU6
CiAgICAgdm9pZCBkaWRTdGFydFByb3Zpc2lvbmFsTG9hZEZvckZyYW1lKHVpbnQ2NF90IGZyYW1l
SUQsIGNvbnN0IFN0cmluZyYgdXJsLCBjb25zdCBTdHJpbmcmIHVucmVhY2hhYmxlVVJMLCBDb3Jl
SVBDOjpNZXNzYWdlRGVjb2RlciYpOwogICAgIHZvaWQgZGlkUmVjZWl2ZVNlcnZlclJlZGlyZWN0
Rm9yUHJvdmlzaW9uYWxMb2FkRm9yRnJhbWUodWludDY0X3QgZnJhbWVJRCwgY29uc3QgU3RyaW5n
JiwgQ29yZUlQQzo6TWVzc2FnZURlY29kZXImKTsKICAgICB2b2lkIGRpZEZhaWxQcm92aXNpb25h
bExvYWRGb3JGcmFtZSh1aW50NjRfdCBmcmFtZUlELCBjb25zdCBXZWJDb3JlOjpSZXNvdXJjZUVy
cm9yJiwgQ29yZUlQQzo6TWVzc2FnZURlY29kZXImKTsKLSAgICB2b2lkIGRpZENvbW1pdExvYWRG
b3JGcmFtZSh1aW50NjRfdCBmcmFtZUlELCBjb25zdCBTdHJpbmcmIG1pbWVUeXBlLCBib29sIGZy
YW1lSGFzQ3VzdG9tUmVwcmVzZW50YXRpb24sIHVpbnQzMl90IGZyYW1lTG9hZFR5cGUsIGNvbnN0
IFBsYXRmb3JtQ2VydGlmaWNhdGVJbmZvJiwgQ29yZUlQQzo6TWVzc2FnZURlY29kZXImKTsKKyAg
ICB2b2lkIGRpZENvbW1pdExvYWRGb3JGcmFtZSh1aW50NjRfdCBmcmFtZUlELCBjb25zdCBTdHJp
bmcmIG1pbWVUeXBlLCB1aW50MzJfdCBmcmFtZUxvYWRUeXBlLCBjb25zdCBQbGF0Zm9ybUNlcnRp
ZmljYXRlSW5mbyYsIENvcmVJUEM6Ok1lc3NhZ2VEZWNvZGVyJik7CiAgICAgdm9pZCBkaWRGaW5p
c2hEb2N1bWVudExvYWRGb3JGcmFtZSh1aW50NjRfdCBmcmFtZUlELCBDb3JlSVBDOjpNZXNzYWdl
RGVjb2RlciYpOwogICAgIHZvaWQgZGlkRmluaXNoTG9hZEZvckZyYW1lKHVpbnQ2NF90IGZyYW1l
SUQsIENvcmVJUEM6Ok1lc3NhZ2VEZWNvZGVyJik7CiAgICAgdm9pZCBkaWRGYWlsTG9hZEZvckZy
YW1lKHVpbnQ2NF90IGZyYW1lSUQsIGNvbnN0IFdlYkNvcmU6OlJlc291cmNlRXJyb3ImLCBDb3Jl
SVBDOjpNZXNzYWdlRGVjb2RlciYpOwpAQCAtMTAwNyw4ICsxMDA3LDYgQEAgcHJpdmF0ZToKICAg
ICB2b2lkIGNhbkF1dGhlbnRpY2F0ZUFnYWluc3RQcm90ZWN0aW9uU3BhY2VJbkZyYW1lKHVpbnQ2
NF90IGZyYW1lSUQsIGNvbnN0IFdlYkNvcmU6OlByb3RlY3Rpb25TcGFjZSYsIGJvb2wmIGNhbkF1
dGhlbnRpY2F0ZSk7CiAgICAgdm9pZCBkaWRSZWNlaXZlQXV0aGVudGljYXRpb25DaGFsbGVuZ2Uo
dWludDY0X3QgZnJhbWVJRCwgY29uc3QgV2ViQ29yZTo6QXV0aGVudGljYXRpb25DaGFsbGVuZ2Um
LCB1aW50NjRfdCBjaGFsbGVuZ2VJRCk7CiAKLSAgICB2b2lkIGRpZEZpbmlzaExvYWRpbmdEYXRh
Rm9yQ3VzdG9tUmVwcmVzZW50YXRpb24oY29uc3QgU3RyaW5nJiBzdWdnZXN0ZWRGaWxlbmFtZSwg
Y29uc3QgQ29yZUlQQzo6RGF0YVJlZmVyZW5jZSYpOwotCiAjaWYgUExBVEZPUk0oTUFDKQogICAg
IHZvaWQgcGx1Z2luRm9jdXNPcldpbmRvd0ZvY3VzQ2hhbmdlZCh1aW50NjRfdCBwbHVnaW5Db21w
bGV4VGV4dElucHV0SWRlbnRpZmllciwgYm9vbCBwbHVnaW5IYXNGb2N1c0FuZFdpbmRvd0hhc0Zv
Y3VzKTsKICAgICB2b2lkIHNldFBsdWdpbkNvbXBsZXhUZXh0SW5wdXRTdGF0ZSh1aW50NjRfdCBw
bHVnaW5Db21wbGV4VGV4dElucHV0SWRlbnRpZmllciwgdWludDY0X3QgY29tcGxleFRleHRJbnB1
dFN0YXRlKTsKQEAgLTEyMjksOCArMTIyNyw2IEBAIHByaXZhdGU6CiAgICAgYm9vbCBtX2hhc1Nw
ZWxsRG9jdW1lbnRUYWc7CiAgICAgdW5zaWduZWQgbV9wZW5kaW5nTGVhcm5Pcklnbm9yZVdvcmRN
ZXNzYWdlQ291bnQ7CiAKLSAgICBib29sIG1fbWFpbkZyYW1lSGFzQ3VzdG9tUmVwcmVzZW50YXRp
b247Ci0KICNpZiBFTkFCTEUoRFJBR19TVVBQT1JUKQogICAgIFdlYkNvcmU6OkRyYWdTZXNzaW9u
IG1fY3VycmVudERyYWdTZXNzaW9uOwogI2VuZGlmCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0
Mi9VSVByb2Nlc3MvV2ViUGFnZVByb3h5Lm1lc3NhZ2VzLmluIGIvU291cmNlL1dlYktpdDIvVUlQ
cm9jZXNzL1dlYlBhZ2VQcm94eS5tZXNzYWdlcy5pbgppbmRleCAxZDg2OTlmLi44YTExZGQ3IDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvV2ViUGFnZVByb3h5Lm1lc3NhZ2Vz
LmluCisrKyBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9XZWJQYWdlUHJveHkubWVzc2FnZXMu
aW4KQEAgLTExNCw3ICsxMTQsNyBAQCBtZXNzYWdlcyAtPiBXZWJQYWdlUHJveHkgewogICAgIERp
ZENyZWF0ZVN1YmZyYW1lKHVpbnQ2NF90IGZyYW1lSUQpCiAKICAgICAjIEZyYW1lIGxvYWQgbWVz
c2FnZXMKLSAgICBEaWRDb21taXRMb2FkRm9yRnJhbWUodWludDY0X3QgZnJhbWVJRCwgV1RGOjpT
dHJpbmcgbWltZVR5cGUsIGJvb2wgaGFzQ3VzdG9tUmVwcmVzZW50YXRpb24sIHVpbnQzMl90IGxv
YWRUeXBlLCBXZWJLaXQ6OlBsYXRmb3JtQ2VydGlmaWNhdGVJbmZvIGNlcnRpZmljYXRlSW5mbywg
V2ViS2l0OjpJbmplY3RlZEJ1bmRsZVVzZXJNZXNzYWdlRW5jb2RlciB1c2VyRGF0YSkgVmFyaWFk
aWMKKyAgICBEaWRDb21taXRMb2FkRm9yRnJhbWUodWludDY0X3QgZnJhbWVJRCwgV1RGOjpTdHJp
bmcgbWltZVR5cGUsIHVpbnQzMl90IGxvYWRUeXBlLCBXZWJLaXQ6OlBsYXRmb3JtQ2VydGlmaWNh
dGVJbmZvIGNlcnRpZmljYXRlSW5mbywgV2ViS2l0OjpJbmplY3RlZEJ1bmRsZVVzZXJNZXNzYWdl
RW5jb2RlciB1c2VyRGF0YSkgVmFyaWFkaWMKICAgICBEaWRGYWlsTG9hZEZvckZyYW1lKHVpbnQ2
NF90IGZyYW1lSUQsIFdlYkNvcmU6OlJlc291cmNlRXJyb3IgZXJyb3IsIFdlYktpdDo6SW5qZWN0
ZWRCdW5kbGVVc2VyTWVzc2FnZUVuY29kZXIgdXNlckRhdGEpIFZhcmlhZGljCiAgICAgRGlkRmFp
bFByb3Zpc2lvbmFsTG9hZEZvckZyYW1lKHVpbnQ2NF90IGZyYW1lSUQsIFdlYkNvcmU6OlJlc291
cmNlRXJyb3IgZXJyb3IsIFdlYktpdDo6SW5qZWN0ZWRCdW5kbGVVc2VyTWVzc2FnZUVuY29kZXIg
dXNlckRhdGEpIFZhcmlhZGljCiAgICAgRGlkRmluaXNoRG9jdW1lbnRMb2FkRm9yRnJhbWUodWlu
dDY0X3QgZnJhbWVJRCwgV2ViS2l0OjpJbmplY3RlZEJ1bmRsZVVzZXJNZXNzYWdlRW5jb2RlciB1
c2VyRGF0YSkgVmFyaWFkaWMKQEAgLTEzOCw5ICsxMzgsNiBAQCBtZXNzYWdlcyAtPiBXZWJQYWdl
UHJveHkgewogICAgIFJlc29sdmVBcHBsaWNhdGlvblNjaGVtZVJlcXVlc3QoV2ViS2l0OjpRdE5l
dHdvcmtSZXF1ZXN0RGF0YSByZXF1ZXN0KQogI2VuZGlmCiAKLSAgICAjIEN1c3RvbSByZXByZXNl
bnRhdGlvbnMKLSAgICBEaWRGaW5pc2hMb2FkaW5nRGF0YUZvckN1c3RvbVJlcHJlc2VudGF0aW9u
KFdURjo6U3RyaW5nIHN1Z2dlc3RlZEZpbGVuYW1lLCBDb3JlSVBDOjpEYXRhUmVmZXJlbmNlIGRh
dGEpCi0KICAgICAjIEZvcm1zIG1lc3NhZ2VzCiAgICAgV2lsbFN1Ym1pdEZvcm0odWludDY0X3Qg
ZnJhbWVJRCwgdWludDY0X3Qgc291cmNlRnJhbWVJRCwgV1RGOjpWZWN0b3I8c3RkOjpwYWlyPFdU
Rjo6U3RyaW5nLCBXVEY6OlN0cmluZz4+IHRleHRGaWVsZFZhbHVlcywgdWludDY0X3QgbGlzdGVu
ZXJJRCwgV2ViS2l0OjpJbmplY3RlZEJ1bmRsZVVzZXJNZXNzYWdlRW5jb2RlciB1c2VyRGF0YSkg
VmFyaWFkaWMKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL3F0L1F0UGFn
ZUNsaWVudC5oIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL3F0L1F0UGFnZUNsaWVudC5oCmlu
ZGV4IGYxY2IyMjIuLmVkYWM1MTEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vz
cy9xdC9RdFBhZ2VDbGllbnQuaAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvcXQvUXRQ
YWdlQ2xpZW50LmgKQEAgLTkzLDEzICs5Myw3IEBAIHB1YmxpYzoKICAgICB2aXJ0dWFsIFBhc3NS
ZWZQdHI8V2ViQ29sb3JDaG9vc2VyUHJveHk+IGNyZWF0ZUNvbG9yQ2hvb3NlclByb3h5KFdlYlBh
Z2VQcm94eSosIGNvbnN0IFdlYkNvcmU6OkNvbG9yJiBpbml0aWFsQ29sb3IsIGNvbnN0IFdlYkNv
cmU6OkludFJlY3QmKTsKICNlbmRpZgogICAgIHZpcnR1YWwgdm9pZCBzZXRGaW5kSW5kaWNhdG9y
KFBhc3NSZWZQdHI8RmluZEluZGljYXRvcj4sIGJvb2wgZmFkZU91dCwgYm9vbCBhbmltYXRlKSB7
IH0KLSAgICB2aXJ0dWFsIHZvaWQgZGlkQ29tbWl0TG9hZEZvck1haW5GcmFtZShib29sIHVzZUN1
c3RvbVJlcHJlc2VudGF0aW9uKSB7IH0KLSAgICB2aXJ0dWFsIHZvaWQgZGlkRmluaXNoTG9hZGlu
Z0RhdGFGb3JDdXN0b21SZXByZXNlbnRhdGlvbihjb25zdCBTdHJpbmcmIHN1Z2dlc3RlZEZpbGVu
YW1lLCBjb25zdCBDb3JlSVBDOjpEYXRhUmVmZXJlbmNlJikgeyB9Ci0gICAgdmlydHVhbCBkb3Vi
bGUgY3VzdG9tUmVwcmVzZW50YXRpb25ab29tRmFjdG9yKCkgeyByZXR1cm4gMTsgfQotICAgIHZp
cnR1YWwgdm9pZCBzZXRDdXN0b21SZXByZXNlbnRhdGlvblpvb21GYWN0b3IoZG91YmxlKSB7IH0K
ICAgICB2aXJ0dWFsIHZvaWQgZmxhc2hCYWNraW5nU3RvcmVVcGRhdGVzKGNvbnN0IFZlY3RvcjxX
ZWJDb3JlOjpJbnRSZWN0PiYgdXBkYXRlUmVjdHMpOwotICAgIHZpcnR1YWwgdm9pZCBmaW5kU3Ry
aW5nSW5DdXN0b21SZXByZXNlbnRhdGlvbihjb25zdCBTdHJpbmcmLCBXZWJLaXQ6OkZpbmRPcHRp
b25zLCB1bnNpZ25lZCBtYXhNYXRjaENvdW50KSB7IH0KLSAgICB2aXJ0dWFsIHZvaWQgY291bnRT
dHJpbmdNYXRjaGVzSW5DdXN0b21SZXByZXNlbnRhdGlvbihjb25zdCBTdHJpbmcmLCBXZWJLaXQ6
OkZpbmRPcHRpb25zLCB1bnNpZ25lZCBtYXhNYXRjaENvdW50KSB7IH0KICAgICB2aXJ0dWFsIHZv
aWQgcGFnZVRyYW5zaXRpb25WaWV3cG9ydFJlYWR5KCk7CiAgICAgdmlydHVhbCB2b2lkIGRpZEZp
bmRab29tYWJsZUFyZWEoY29uc3QgV2ViQ29yZTo6SW50UG9pbnQmLCBjb25zdCBXZWJDb3JlOjpJ
bnRSZWN0Jik7CiAgICAgdmlydHVhbCB2b2lkIHVwZGF0ZVRleHRJbnB1dFN0YXRlKCk7CmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9XZWJLaXQyLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2og
Yi9Tb3VyY2UvV2ViS2l0Mi9XZWJLaXQyLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKaW5kZXgg
M2Y3Mzk3MC4uYTRmYmIwNyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvV2ViS2l0Mi54Y29k
ZXByb2ovcHJvamVjdC5wYnhwcm9qCisrKyBiL1NvdXJjZS9XZWJLaXQyL1dlYktpdDIueGNvZGVw
cm9qL3Byb2plY3QucGJ4cHJvagpAQCAtMjMwLDggKzIzMCw2IEBACiAJCTFBQTU4ODkzMTFFRTcw
NDAwMDYxQjg4MiAvKiBOZXRzY2FwZVBsdWdpblN0cmVhbS5jcHAgaW4gU291cmNlcyAqLyA9IHtp
c2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAxQUE1ODg5MTExRUU3MDQwMDA2MUI4ODIgLyog
TmV0c2NhcGVQbHVnaW5TdHJlYW0uY3BwICovOyB9OwogCQkxQUFCNEE4RDEyOTZGMEEyMDAyMzk1
MkYgLyogU2FuZGJveEV4dGVuc2lvbi5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gMUFBQjRBOEMxMjk2RjBBMjAwMjM5NTJGIC8qIFNhbmRib3hFeHRlbnNp
b24uaCAqLzsgfTsKIAkJMUFBQjRBQUExMjk2RjE1NDAwMjM5NTJGIC8qIFNhbmRib3hFeHRlbnNp
b25NYWMubW0gaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAx
QUFCNEFBOTEyOTZGMTU0MDAyMzk1MkYgLyogU2FuZGJveEV4dGVuc2lvbk1hYy5tbSAqLzsgfTsK
LQkJMUFBRjA2MTQxMkIwMTEzMTAwOEU0OUUyIC8qIFBERlZpZXdDb250cm9sbGVyLmggaW4gSGVh
ZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAxQUFGMDYxMjEyQjAxMTMx
MDA4RTQ5RTIgLyogUERGVmlld0NvbnRyb2xsZXIuaCAqLzsgfTsKLQkJMUFBRjA2MTUxMkIwMTEz
MTAwOEU0OUUyIC8qIFBERlZpZXdDb250cm9sbGVyLm1tIGluIFNvdXJjZXMgKi8gPSB7aXNhID0g
UEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMUFBRjA2MTMxMkIwMTEzMTAwOEU0OUUyIC8qIFBERlZp
ZXdDb250cm9sbGVyLm1tICovOyB9OwogCQkxQUFGMEM0QTEyQjE2MzM0MDA4RTQ5RTIgLyogQXJn
dW1lbnRDb2RlcnNDRi5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxl
UmVmID0gMUFBRjBDNDgxMkIxNjMzNDAwOEU0OUUyIC8qIEFyZ3VtZW50Q29kZXJzQ0YuaCAqLzsg
fTsKIAkJMUFBRjBDNEIxMkIxNjMzNDAwOEU0OUUyIC8qIEFyZ3VtZW50Q29kZXJzQ0YuY3BwIGlu
IFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMUFBRjBDNDkxMkIx
NjMzNDAwOEU0OUUyIC8qIEFyZ3VtZW50Q29kZXJzQ0YuY3BwICovOyB9OwogCQkxQUFGMjYzODE0
Njg3QzM5MDA0QTFFOEEgLyogVGlsZWRDb3JlQW5pbWF0aW9uRHJhd2luZ0FyZWEubW0gaW4gU291
cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAxQUFGMjYzNjE0Njg3QzM5
MDA0QTFFOEEgLyogVGlsZWRDb3JlQW5pbWF0aW9uRHJhd2luZ0FyZWEubW0gKi87IH07CkBAIC0x
NjczLDggKzE2NzEsNiBAQAogCQkxQUFCNEE4QzEyOTZGMEEyMDAyMzk1MkYgLyogU2FuZGJveEV4
dGVuc2lvbi5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBTYW5kYm94RXh0ZW5z
aW9uLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTFBQUI0QUE5MTI5NkYxNTQwMDIz
OTUyRiAvKiBTYW5kYm94RXh0ZW5zaW9uTWFjLm1tICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAu
b2JqY3BwOyBwYXRoID0gU2FuZGJveEV4dGVuc2lvbk1hYy5tbTsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKIAkJMUFBREU2RkUxMEQ4NTVGQzAwRDNENjNEIC8qIEFwcGxpY2F0aW9uU2Vydmlj
ZXMuZnJhbWV3b3JrICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVU
eXBlID0gd3JhcHBlci5mcmFtZXdvcms7IG5hbWUgPSBBcHBsaWNhdGlvblNlcnZpY2VzLmZyYW1l
d29yazsgcGF0aCA9IFN5c3RlbS9MaWJyYXJ5L0ZyYW1ld29ya3MvQXBwbGljYXRpb25TZXJ2aWNl
cy5mcmFtZXdvcms7IHNvdXJjZVRyZWUgPSBTREtST09UOyB9OwotCQkxQUFGMDYxMjEyQjAxMTMx
MDA4RTQ5RTIgLyogUERGVmlld0NvbnRyb2xsZXIuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5o
OyBwYXRoID0gUERGVmlld0NvbnRyb2xsZXIuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
LQkJMUFBRjA2MTMxMkIwMTEzMTAwOEU0OUUyIC8qIFBERlZpZXdDb250cm9sbGVyLm1tICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jcHAub2JqY3BwOyBwYXRoID0gUERGVmlld0NvbnRyb2xsZXIubW07
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTFBQUYwQzQ4MTJCMTYzMzQwMDhFNDlFMiAv
KiBBcmd1bWVudENvZGVyc0NGLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVu
Y29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEFy
Z3VtZW50Q29kZXJzQ0YuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMUFBRjBDNDkx
MkIxNjMzNDAwOEU0OUUyIC8qIEFyZ3VtZW50Q29kZXJzQ0YuY3BwICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGV4cGxpY2l0RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5vYmpjcHA7IGZp
bGVFbmNvZGluZyA9IDQ7IHBhdGggPSBBcmd1bWVudENvZGVyc0NGLmNwcDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKIAkJMUFBRjI2MzYxNDY4N0MzOTAwNEExRThBIC8qIFRpbGVkQ29yZUFu
aW1hdGlvbkRyYXdpbmdBcmVhLm1tICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVF
bmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAub2JqY3BwOyBw
YXRoID0gVGlsZWRDb3JlQW5pbWF0aW9uRHJhd2luZ0FyZWEubW07IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CkBAIC00ODcxLDggKzQ4NjcsNiBAQAogCQkJCTFBOTEwMTA5MTI2OEM4Q0EwMDE4
NDJGNSAvKiBGaW5kSW5kaWNhdG9yV2luZG93Lm1tICovLAogCQkJCUJDMTExQjRCMTEyRjYxOTIw
MDMzN0JBQiAvKiBQYWdlQ2xpZW50SW1wbC5oICovLAogCQkJCUJDMTExQjRDMTEyRjYxOTIwMDMz
N0JBQiAvKiBQYWdlQ2xpZW50SW1wbC5tbSAqLywKLQkJCQkxQUFGMDYxMjEyQjAxMTMxMDA4RTQ5
RTIgLyogUERGVmlld0NvbnRyb2xsZXIuaCAqLywKLQkJCQkxQUFGMDYxMzEyQjAxMTMxMDA4RTQ5
RTIgLyogUERGVmlld0NvbnRyb2xsZXIubW0gKi8sCiAJCQkJRTEzNEYwMTUxMkVBNUQxMTAwNEVD
NThEIC8qIFdLUHJpbnRpbmdWaWV3LmggKi8sCiAJCQkJRTEzNEYwMTkxMkVBNUQ5OTAwNEVDNThE
IC8qIFdLUHJpbnRpbmdWaWV3Lm1tICovLAogCQkJCTFBNEE5QUE2MTJCN0U3OTYwMDhGRTk4NCAv
KiBXS1RleHRJbnB1dFdpbmRvd0NvbnRyb2xsZXIuaCAqLywKQEAgLTU0NTQsNyArNTQ0OCw2IEBA
CiAJCQkJMUE5MEMyMzcxMjY1MDcxNzAwM0U0NEQ0IC8qIFBhZ2VPdmVybGF5LmggaW4gSGVhZGVy
cyAqLywKIAkJCQlDNTc0QTU4MTEyRTY2NjgxMDAyREZFOTggLyogUGFzdGVib2FyZFR5cGVzLmgg
aW4gSGVhZGVycyAqLywKIAkJCQlFMTk1ODJEMzE1M0NCRkQ3MDBCNjA4NzUgLyogUERGS2l0SW1w
b3J0cy5oIGluIEhlYWRlcnMgKi8sCi0JCQkJMUFBRjA2MTQxMkIwMTEzMTAwOEU0OUUyIC8qIFBE
RlZpZXdDb250cm9sbGVyLmggaW4gSGVhZGVycyAqLywKIAkJCQlCQ0Y1MDVFNzEyNDMwNDdCMDA1
OTU1QUUgLyogUGxhdGZvcm1DZXJ0aWZpY2F0ZUluZm8uaCBpbiBIZWFkZXJzICovLAogCQkJCUJD
QzQzQUJCMTI3Qjk1REMwMDMxN0YxNiAvKiBQbGF0Zm9ybVBvcHVwTWVudURhdGEuaCBpbiBIZWFk
ZXJzICovLAogCQkJCUJDODc4MEZDMTE2MUMyQjgwMENDMjc2OCAvKiBQbGF0Zm9ybVByb2Nlc3NJ
ZGVudGlmaWVyLmggaW4gSGVhZGVycyAqLywKQEAgLTY3MTgsNyArNjcxMSw2IEBACiAJCQkJMkQy
QURGMTAxNjM2NEQ4MjAwMTk3RTQ3IC8qIFBERlBsdWdpbkNob2ljZUFubm90YXRpb24ubW0gaW4g
U291cmNlcyAqLywKIAkJCQkyRDQyOUJGRDE3MjFFMkM3MDBFQzY4MUYgLyogUERGUGx1Z2luUGFz
c3dvcmRGaWVsZC5tbSBpbiBTb3VyY2VzICovLAogCQkJCTJEMkFERjA5MTYzNjJERDUwMDE5N0U0
NyAvKiBQREZQbHVnaW5UZXh0QW5ub3RhdGlvbi5tbSBpbiBTb3VyY2VzICovLAotCQkJCTFBQUYw
NjE1MTJCMDExMzEwMDhFNDlFMiAvKiBQREZWaWV3Q29udHJvbGxlci5tbSBpbiBTb3VyY2VzICov
LAogCQkJCUJDRjUwNUU4MTI0MzA0N0IwMDU5NTVBRSAvKiBQbGF0Zm9ybUNlcnRpZmljYXRlSW5m
by5tbSBpbiBTb3VyY2VzICovLAogCQkJCUJDQzQzQUJBMTI3Qjk1REMwMDMxN0YxNiAvKiBQbGF0
Zm9ybVBvcHVwTWVudURhdGEuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMUE2RkI3RDIxMUU2NTFF
MjAwREIxMzcxIC8qIFBsdWdpbi5jcHAgaW4gU291cmNlcyAqLywKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViQ29yZVN1cHBvcnQvV2ViRnJhbWVMb2FkZXJDbGllbnQu
Y3BwIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJDb3JlU3VwcG9ydC9XZWJGcmFtZUxv
YWRlckNsaWVudC5jcHAKaW5kZXggYzFkN2RlNC4uM2JjODVkYiAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJDb3JlU3VwcG9ydC9XZWJGcmFtZUxvYWRlckNsaWVudC5j
cHAKKysrIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJDb3JlU3VwcG9ydC9XZWJGcmFt
ZUxvYWRlckNsaWVudC5jcHAKQEAgLTg1LDcgKzg1LDYgQEAgV2ViRnJhbWVMb2FkZXJDbGllbnQ6
OldlYkZyYW1lTG9hZGVyQ2xpZW50KFdlYkZyYW1lKiBmcmFtZSkKICAgICA6IG1fZnJhbWUoZnJh
bWUpCiAgICAgLCBtX2hhc1NlbnRSZXNwb25zZVRvUGx1Z2luVmlldyhmYWxzZSkKICAgICAsIG1f
ZGlkQ29tcGxldGVQYWdlVHJhbnNpdGlvbkFscmVhZHkoZmFsc2UpCi0gICAgLCBtX2ZyYW1lSGFz
Q3VzdG9tUmVwcmVzZW50YXRpb24oZmFsc2UpCiAgICAgLCBtX2ZyYW1lQ2FtZUZyb21QYWdlQ2Fj
aGUoZmFsc2UpCiB7CiB9CkBAIC0xMDIsMTEgKzEwMSw2IEBAIHZvaWQgV2ViRnJhbWVMb2FkZXJD
bGllbnQ6OmZyYW1lTG9hZGVyRGVzdHJveWVkKCkKICAgICBtX2ZyYW1lLT5kZXJlZigpOwogfQog
Ci1ib29sIFdlYkZyYW1lTG9hZGVyQ2xpZW50OjpoYXNIVE1MVmlldygpIGNvbnN0Ci17Ci0gICAg
cmV0dXJuICFtX2ZyYW1lSGFzQ3VzdG9tUmVwcmVzZW50YXRpb247Ci19Ci0KIGJvb2wgV2ViRnJh
bWVMb2FkZXJDbGllbnQ6Omhhc1dlYlZpZXcoKSBjb25zdAogewogICAgIHJldHVybiBtX2ZyYW1l
LT5wYWdlKCk7CkBAIC00NDMsNyArNDM3LDcgQEAgdm9pZCBXZWJGcmFtZUxvYWRlckNsaWVudDo6
ZGlzcGF0Y2hEaWRDb21taXRMb2FkKCkKIAogICAgIC8vIE5vdGlmeSB0aGUgVUlQcm9jZXNzLgog
Ci0gICAgd2ViUGFnZS0+c2VuZChNZXNzYWdlczo6V2ViUGFnZVByb3h5OjpEaWRDb21taXRMb2Fk
Rm9yRnJhbWUobV9mcmFtZS0+ZnJhbWVJRCgpLCByZXNwb25zZS5taW1lVHlwZSgpLCBtX2ZyYW1l
SGFzQ3VzdG9tUmVwcmVzZW50YXRpb24sIG1fZnJhbWUtPmNvcmVGcmFtZSgpLT5sb2FkZXIoKS0+
bG9hZFR5cGUoKSwgUGxhdGZvcm1DZXJ0aWZpY2F0ZUluZm8ocmVzcG9uc2UpLCBJbmplY3RlZEJ1
bmRsZVVzZXJNZXNzYWdlRW5jb2Rlcih1c2VyRGF0YS5nZXQoKSkpKTsKKyAgICB3ZWJQYWdlLT5z
ZW5kKE1lc3NhZ2VzOjpXZWJQYWdlUHJveHk6OkRpZENvbW1pdExvYWRGb3JGcmFtZShtX2ZyYW1l
LT5mcmFtZUlEKCksIHJlc3BvbnNlLm1pbWVUeXBlKCksIG1fZnJhbWUtPmNvcmVGcmFtZSgpLT5s
b2FkZXIoKS0+bG9hZFR5cGUoKSwgUGxhdGZvcm1DZXJ0aWZpY2F0ZUluZm8ocmVzcG9uc2UpLCBJ
bmplY3RlZEJ1bmRsZVVzZXJNZXNzYWdlRW5jb2Rlcih1c2VyRGF0YS5nZXQoKSkpKTsKIAogICAg
IHdlYlBhZ2UtPmRpZENvbW1pdExvYWQobV9mcmFtZSk7CiB9CkBAIC04NTksMTAgKzg1Myw2IEBA
IHZvaWQgV2ViRnJhbWVMb2FkZXJDbGllbnQ6OmRpZENoYW5nZVRpdGxlKERvY3VtZW50TG9hZGVy
KikKIAogdm9pZCBXZWJGcmFtZUxvYWRlckNsaWVudDo6Y29tbWl0dGVkTG9hZChEb2N1bWVudExv
YWRlciogbG9hZGVyLCBjb25zdCBjaGFyKiBkYXRhLCBpbnQgbGVuZ3RoKQogewotICAgIC8vIElm
IHdlJ3JlIGxvYWRpbmcgYSBjdXN0b20gcmVwcmVzZW50YXRpb24sIHdlIGRvbid0IHdhbnQgdG8g
aGFuZCBvZmYgdGhlIGRhdGEgdG8gV2ViQ29yZS4KLSAgICBpZiAobV9mcmFtZUhhc0N1c3RvbVJl
cHJlc2VudGF0aW9uKQotICAgICAgICByZXR1cm47Ci0KICAgICBpZiAoIW1fcGx1Z2luVmlldykK
ICAgICAgICAgbG9hZGVyLT5jb21taXREYXRhKGRhdGEsIGxlbmd0aCk7CiAKQEAgLTg4OSwzNCAr
ODc5LDIyIEBAIHZvaWQgV2ViRnJhbWVMb2FkZXJDbGllbnQ6OmNvbW1pdHRlZExvYWQoRG9jdW1l
bnRMb2FkZXIqIGxvYWRlciwgY29uc3QgY2hhciogZGF0CiAKIHZvaWQgV2ViRnJhbWVMb2FkZXJD
bGllbnQ6OmZpbmlzaGVkTG9hZGluZyhEb2N1bWVudExvYWRlciogbG9hZGVyKQogewotICAgIGlm
ICghbV9wbHVnaW5WaWV3KSB7Ci0gICAgICAgIGlmIChtX2ZyYW1lSGFzQ3VzdG9tUmVwcmVzZW50
YXRpb24pIHsKLSAgICAgICAgICAgIFdlYlBhZ2UqIHdlYlBhZ2UgPSBtX2ZyYW1lLT5wYWdlKCk7
Ci0gICAgICAgICAgICBpZiAoIXdlYlBhZ2UpCi0gICAgICAgICAgICAgICAgcmV0dXJuOwotCi0g
ICAgICAgICAgICBSZWZQdHI8UmVzb3VyY2VCdWZmZXI+IG1haW5SZXNvdXJjZURhdGEgPSBsb2Fk
ZXItPm1haW5SZXNvdXJjZURhdGEoKTsKLSAgICAgICAgICAgIENvcmVJUEM6OkRhdGFSZWZlcmVu
Y2UgZGF0YVJlZmVyZW5jZShyZWludGVycHJldF9jYXN0PGNvbnN0IHVpbnQ4X3QqPihtYWluUmVz
b3VyY2VEYXRhID8gbWFpblJlc291cmNlRGF0YS0+ZGF0YSgpIDogMCksIG1haW5SZXNvdXJjZURh
dGEgPyBtYWluUmVzb3VyY2VEYXRhLT5zaXplKCkgOiAwKTsKLSAgICAgICAgICAgIAotICAgICAg
ICAgICAgd2ViUGFnZS0+c2VuZChNZXNzYWdlczo6V2ViUGFnZVByb3h5OjpEaWRGaW5pc2hMb2Fk
aW5nRGF0YUZvckN1c3RvbVJlcHJlc2VudGF0aW9uKGxvYWRlci0+cmVzcG9uc2UoKS5zdWdnZXN0
ZWRGaWxlbmFtZSgpLCBkYXRhUmVmZXJlbmNlKSk7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICBp
ZiAobV9wbHVnaW5WaWV3KSB7Ci0gICAgICAgIC8vIElmIHdlIGp1c3QgcmVjZWl2ZWQgYW4gZW1w
dHkgcmVzcG9uc2Ugd2l0aG91dCBhbnkgZGF0YSwgd2Ugd29uJ3QgaGF2ZSBzZW50IGEgcmVzcG9u
c2UgdG8gdGhlIHBsdWctaW4gdmlldy4KLSAgICAgICAgLy8gTWFrZSBzdXJlIHRvIGRvIHRoaXMg
YmVmb3JlIGNhbGxpbmcgbWFudWFsTG9hZERpZEZpbmlzaExvYWRpbmcuCi0gICAgICAgIGlmICgh
bV9oYXNTZW50UmVzcG9uc2VUb1BsdWdpblZpZXcpIHsKLSAgICAgICAgICAgIG1fcGx1Z2luVmll
dy0+bWFudWFsTG9hZERpZFJlY2VpdmVSZXNwb25zZShsb2FkZXItPnJlc3BvbnNlKCkpOworICAg
IGlmICghbV9wbHVnaW5WaWV3KQorICAgICAgICByZXR1cm47CiAKLSAgICAgICAgICAgIC8vIFBy
b3RlY3QgYWdhaW5zdCB0aGUgYWJvdmUgY2FsbCBudWxsaW5nIG91dCB0aGUgcGx1Zy1pbiAoYnkg
dHJ5aW5nIHRvIGNhbmNlbCB0aGUgbG9hZCBmb3IgZXhhbXBsZSkuCi0gICAgICAgICAgICBpZiAo
IW1fcGx1Z2luVmlldykKLSAgICAgICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIH0KKyAgICAv
LyBJZiB3ZSBqdXN0IHJlY2VpdmVkIGFuIGVtcHR5IHJlc3BvbnNlIHdpdGhvdXQgYW55IGRhdGEs
IHdlIHdvbid0IGhhdmUgc2VudCBhIHJlc3BvbnNlIHRvIHRoZSBwbHVnLWluIHZpZXcuCisgICAg
Ly8gTWFrZSBzdXJlIHRvIGRvIHRoaXMgYmVmb3JlIGNhbGxpbmcgbWFudWFsTG9hZERpZEZpbmlz
aExvYWRpbmcuCisgICAgaWYgKCFtX2hhc1NlbnRSZXNwb25zZVRvUGx1Z2luVmlldykgeworICAg
ICAgICBtX3BsdWdpblZpZXctPm1hbnVhbExvYWREaWRSZWNlaXZlUmVzcG9uc2UobG9hZGVyLT5y
ZXNwb25zZSgpKTsKIAotICAgICAgICBtX3BsdWdpblZpZXctPm1hbnVhbExvYWREaWRGaW5pc2hM
b2FkaW5nKCk7Ci0gICAgICAgIG1fcGx1Z2luVmlldyA9IDA7Ci0gICAgICAgIG1faGFzU2VudFJl
c3BvbnNlVG9QbHVnaW5WaWV3ID0gZmFsc2U7CisgICAgICAgIC8vIFByb3RlY3QgYWdhaW5zdCB0
aGUgYWJvdmUgY2FsbCBudWxsaW5nIG91dCB0aGUgcGx1Zy1pbiAoYnkgdHJ5aW5nIHRvIGNhbmNl
bCB0aGUgbG9hZCBmb3IgZXhhbXBsZSkuCisgICAgICAgIGlmICghbV9wbHVnaW5WaWV3KQorICAg
ICAgICAgICAgcmV0dXJuOwogICAgIH0KKworICAgIG1fcGx1Z2luVmlldy0+bWFudWFsTG9hZERp
ZEZpbmlzaExvYWRpbmcoKTsKKyAgICBtX3BsdWdpblZpZXcgPSAwOworICAgIG1faGFzU2VudFJl
c3BvbnNlVG9QbHVnaW5WaWV3ID0gZmFsc2U7CiB9CiAKIHZvaWQgV2ViRnJhbWVMb2FkZXJDbGll
bnQ6OnVwZGF0ZUdsb2JhbEhpc3RvcnkoKQpAQCAtMTIwNywxMSArMTE4NSw2IEBAIHZvaWQgV2Vi
RnJhbWVMb2FkZXJDbGllbnQ6OnNhdmVQbGF0Zm9ybURhdGFUb0NhY2hlZEZyYW1lKENhY2hlZEZy
YW1lKikKIAogdm9pZCBXZWJGcmFtZUxvYWRlckNsaWVudDo6dHJhbnNpdGlvblRvQ29tbWl0dGVk
RnJvbUNhY2hlZEZyYW1lKENhY2hlZEZyYW1lKikKIHsKLSAgICBXZWJQYWdlKiB3ZWJQYWdlID0g
bV9mcmFtZS0+cGFnZSgpOwotICAgIGJvb2wgaXNNYWluRnJhbWUgPSB3ZWJQYWdlLT5tYWluV2Vi
RnJhbWUoKSA9PSBtX2ZyYW1lOwotICAgIAotICAgIGNvbnN0IFJlc291cmNlUmVzcG9uc2UmIHJl
c3BvbnNlID0gbV9mcmFtZS0+Y29yZUZyYW1lKCktPmxvYWRlcigpLT5kb2N1bWVudExvYWRlcigp
LT5yZXNwb25zZSgpOwotICAgIG1fZnJhbWVIYXNDdXN0b21SZXByZXNlbnRhdGlvbiA9IGlzTWFp
bkZyYW1lICYmIHdlYlBhZ2UtPnNob3VsZFVzZUN1c3RvbVJlcHJlc2VudGF0aW9uRm9yUmVzcG9u
c2UocmVzcG9uc2UpOwogICAgIG1fZnJhbWVDYW1lRnJvbVBhZ2VDYWNoZSA9IHRydWU7CiB9CiAK
QEAgLTEyMjcsOCArMTIwMCw2IEBAIHZvaWQgV2ViRnJhbWVMb2FkZXJDbGllbnQ6OnRyYW5zaXRp
b25Ub0NvbW1pdHRlZEZvck5ld1BhZ2UoKQogICAgIGJvb2wgc2hvdWxkSGlkZVNjcm9sbGJhcnMg
PSBzaG91bGRVc2VGaXhlZExheW91dCB8fCBzaG91bGREaXNhYmxlU2Nyb2xsaW5nOwogICAgIElu
dFJlY3QgY3VycmVudEZpeGVkVmlzaWJsZUNvbnRlbnRSZWN0ID0gbV9mcmFtZS0+Y29yZUZyYW1l
KCktPnZpZXcoKSA/IG1fZnJhbWUtPmNvcmVGcmFtZSgpLT52aWV3KCktPmZpeGVkVmlzaWJsZUNv
bnRlbnRSZWN0KCkgOiBJbnRSZWN0KCk7CiAKLSAgICBjb25zdCBSZXNvdXJjZVJlc3BvbnNlJiBy
ZXNwb25zZSA9IG1fZnJhbWUtPmNvcmVGcmFtZSgpLT5sb2FkZXIoKS0+ZG9jdW1lbnRMb2FkZXIo
KS0+cmVzcG9uc2UoKTsKLSAgICBtX2ZyYW1lSGFzQ3VzdG9tUmVwcmVzZW50YXRpb24gPSBpc01h
aW5GcmFtZSAmJiB3ZWJQYWdlLT5zaG91bGRVc2VDdXN0b21SZXByZXNlbnRhdGlvbkZvclJlc3Bv
bnNlKHJlc3BvbnNlKTsKICAgICBtX2ZyYW1lQ2FtZUZyb21QYWdlQ2FjaGUgPSBmYWxzZTsKIAog
ICAgIFNjcm9sbGJhck1vZGUgZGVmYXVsdFNjcm9sbGJhck1vZGUgPSBzaG91bGRIaWRlU2Nyb2xs
YmFycyA/IFNjcm9sbGJhckFsd2F5c09mZiA6IFNjcm9sbGJhckF1dG87CkBAIC0xMjgwLDEzICsx
MjUxLDYgQEAgdm9pZCBXZWJGcmFtZUxvYWRlckNsaWVudDo6ZGlzcGF0Y2hEaWRCZWNvbWVGcmFt
ZXNldChib29sIHZhbHVlKQogICAgIHdlYlBhZ2UtPnNlbmQoTWVzc2FnZXM6OldlYlBhZ2VQcm94
eTo6RnJhbWVEaWRCZWNvbWVGcmFtZVNldChtX2ZyYW1lLT5mcmFtZUlEKCksIHZhbHVlKSk7CiB9
CiAKLWJvb2wgV2ViRnJhbWVMb2FkZXJDbGllbnQ6OmNhbkNhY2hlUGFnZSgpIGNvbnN0Ci17Ci0g
ICAgLy8gV2UgY2Fubm90IGNhY2hlIGZyYW1lcyB0aGF0IGhhdmUgY3VzdG9tIHJlcHJlc2VudGF0
aW9ucyBiZWNhdXNlIHRoZXkgYXJlCi0gICAgLy8gcmVuZGVyZWQgaW4gdGhlIFVJUHJvY2Vzcy4g
Ci0gICAgcmV0dXJuICFtX2ZyYW1lSGFzQ3VzdG9tUmVwcmVzZW50YXRpb247Ci19Ci0KIHZvaWQg
V2ViRnJhbWVMb2FkZXJDbGllbnQ6OmNvbnZlcnRNYWluUmVzb3VyY2VMb2FkVG9Eb3dubG9hZChE
b2N1bWVudExvYWRlciAqZG9jdW1lbnRMb2FkZXIsIGNvbnN0IFJlc291cmNlUmVxdWVzdCYgcmVx
dWVzdCwgY29uc3QgUmVzb3VyY2VSZXNwb25zZSYgcmVzcG9uc2UpCiB7CiAgICAgbV9mcmFtZS0+
Y29udmVydE1haW5SZXNvdXJjZUxvYWRUb0Rvd25sb2FkKGRvY3VtZW50TG9hZGVyLCByZXF1ZXN0
LCByZXNwb25zZSk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYkNv
cmVTdXBwb3J0L1dlYkZyYW1lTG9hZGVyQ2xpZW50LmggYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9j
ZXNzL1dlYkNvcmVTdXBwb3J0L1dlYkZyYW1lTG9hZGVyQ2xpZW50LmgKaW5kZXggMDNkNWUxMC4u
ZTAwZDNmZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJDb3JlU3Vw
cG9ydC9XZWJGcmFtZUxvYWRlckNsaWVudC5oCisrKyBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nl
c3MvV2ViQ29yZVN1cHBvcnQvV2ViRnJhbWVMb2FkZXJDbGllbnQuaApAQCAtNDAsMTIgKzQwLDEw
IEBAIHB1YmxpYzoKIAogICAgIFdlYkZyYW1lKiB3ZWJGcmFtZSgpIGNvbnN0IHsgcmV0dXJuIG1f
ZnJhbWU7IH0KIAotICAgIGJvb2wgZnJhbWVIYXNDdXN0b21SZXByZXNlbnRhdGlvbigpIGNvbnN0
IHsgcmV0dXJuIG1fZnJhbWVIYXNDdXN0b21SZXByZXNlbnRhdGlvbjsgfQotCiBwcml2YXRlOgog
ICAgIHZpcnR1YWwgdm9pZCBmcmFtZUxvYWRlckRlc3Ryb3llZCgpIE9WRVJSSURFOwogCi0gICAg
dmlydHVhbCBib29sIGhhc0hUTUxWaWV3KCkgY29uc3QgT1ZFUlJJREU7CisgICAgdmlydHVhbCBi
b29sIGhhc0hUTUxWaWV3KCkgY29uc3QgT1ZFUlJJREUgeyByZXR1cm4gdHJ1ZTsgfQogICAgIHZp
cnR1YWwgYm9vbCBoYXNXZWJWaWV3KCkgY29uc3QgT1ZFUlJJREU7CiAgICAgCiAgICAgdmlydHVh
bCB2b2lkIG1ha2VSZXByZXNlbnRhdGlvbihXZWJDb3JlOjpEb2N1bWVudExvYWRlciopIE9WRVJS
SURFOwpAQCAtMTc1LDcgKzE3Myw3IEBAIHByaXZhdGU6CiAKICAgICB2aXJ0dWFsIHZvaWQgZGlz
cGF0Y2hEaWRCZWNvbWVGcmFtZXNldChib29sKSBPVkVSUklERTsKIAotICAgIHZpcnR1YWwgYm9v
bCBjYW5DYWNoZVBhZ2UoKSBjb25zdCBPVkVSUklERTsKKyAgICB2aXJ0dWFsIGJvb2wgY2FuQ2Fj
aGVQYWdlKCkgY29uc3QgT1ZFUlJJREUgeyByZXR1cm4gdHJ1ZTsgfQogICAgIHZpcnR1YWwgdm9p
ZCBjb252ZXJ0TWFpblJlc291cmNlTG9hZFRvRG93bmxvYWQoV2ViQ29yZTo6RG9jdW1lbnRMb2Fk
ZXIqLCBjb25zdCBXZWJDb3JlOjpSZXNvdXJjZVJlcXVlc3QmLCBjb25zdCBXZWJDb3JlOjpSZXNv
dXJjZVJlc3BvbnNlJikgT1ZFUlJJREU7CiAgICAgCiAgICAgdmlydHVhbCBQYXNzUmVmUHRyPFdl
YkNvcmU6OkZyYW1lPiBjcmVhdGVGcmFtZShjb25zdCBXZWJDb3JlOjpLVVJMJiB1cmwsIGNvbnN0
IFN0cmluZyYgbmFtZSwgV2ViQ29yZTo6SFRNTEZyYW1lT3duZXJFbGVtZW50KiBvd25lckVsZW1l
bnQsCkBAIC0yMzAsNyArMjI4LDYgQEAgcHJpdmF0ZToKICAgICBSZWZQdHI8UGx1Z2luVmlldz4g
bV9wbHVnaW5WaWV3OwogICAgIGJvb2wgbV9oYXNTZW50UmVzcG9uc2VUb1BsdWdpblZpZXc7CiAg
ICAgYm9vbCBtX2RpZENvbXBsZXRlUGFnZVRyYW5zaXRpb25BbHJlYWR5OwotICAgIGJvb2wgbV9m
cmFtZUhhc0N1c3RvbVJlcHJlc2VudGF0aW9uOwogICAgIGJvb2wgbV9mcmFtZUNhbWVGcm9tUGFn
ZUNhY2hlOwogfTsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQ
YWdlL0RyYXdpbmdBcmVhLmggYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvRHJh
d2luZ0FyZWEuaAppbmRleCA2M2ExZmFiLi5jM2ZkNDhmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
S2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvRHJhd2luZ0FyZWEuaAorKysgYi9Tb3VyY2UvV2ViS2l0
Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvRHJhd2luZ0FyZWEuaApAQCAtNzksNyArNzksNiBAQCBwdWJs
aWM6CiAgICAgdmlydHVhbCB2b2lkIHNldFBhZ2VPdmVybGF5T3BhY2l0eShQYWdlT3ZlcmxheSos
IGZsb2F0KSB7IH0KICAgICAvLyBJZiB0aGlzIGZ1bmN0aW9uIHJldHVybnMgZmFsc2UsIFBhZ2VP
dmVybGF5IHNob3VsZCBhcHBseSBvcGFjaXR5IHdoZW4gcGFpbnRpbmcuCiAgICAgdmlydHVhbCBi
b29sIHBhZ2VPdmVybGF5U2hvdWxkQXBwbHlGYWRlV2hlblBhaW50aW5nKCkgY29uc3QgeyByZXR1
cm4gdHJ1ZTsgfQotICAgIHZpcnR1YWwgdm9pZCBwYWdlQ3VzdG9tUmVwcmVzZW50YXRpb25DaGFu
Z2VkKCkgeyB9CiAKICAgICB2aXJ0dWFsIHZvaWQgc2V0UGFpbnRpbmdFbmFibGVkKGJvb2wpIHsg
fQogICAgIHZpcnR1YWwgdm9pZCB1cGRhdGVQcmVmZXJlbmNlcyhjb25zdCBXZWJQcmVmZXJlbmNl
c1N0b3JlJikgeyB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBh
Z2UvRHJhd2luZ0FyZWEubWVzc2FnZXMuaW4gYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dl
YlBhZ2UvRHJhd2luZ0FyZWEubWVzc2FnZXMuaW4KaW5kZXggZjc4M2RjZi4uZTZhY2JjYiAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL0RyYXdpbmdBcmVhLm1l
c3NhZ2VzLmluCisrKyBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9EcmF3aW5n
QXJlYS5tZXNzYWdlcy5pbgpAQCAtMjUsNyArMjUsNiBAQCBtZXNzYWdlcyAtPiBEcmF3aW5nQXJl
YSBMZWdhY3lSZWNlaXZlciB7CiAgICAgRGlkVXBkYXRlKCkKICAgICBTdXNwZW5kUGFpbnRpbmco
KQogICAgIFJlc3VtZVBhaW50aW5nKCkKLSAgICBQYWdlQ3VzdG9tUmVwcmVzZW50YXRpb25DaGFu
Z2VkKCkKICAgICBTZXRMYXllckhvc3RpbmdNb2RlKHVpbnQzMl90IGxheWVySG9zdGluZ01vZGUp
CiAKICNpZiBQTEFURk9STShNQUMpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9j
ZXNzL1dlYlBhZ2UvRHJhd2luZ0FyZWFJbXBsLmNwcCBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nl
c3MvV2ViUGFnZS9EcmF3aW5nQXJlYUltcGwuY3BwCmluZGV4IDZlZTNhZjUuLmJjMThhNzYgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9EcmF3aW5nQXJlYUlt
cGwuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9EcmF3aW5nQXJl
YUltcGwuY3BwCkBAIC0xMDksOSArMTA5LDYgQEAgdm9pZCBEcmF3aW5nQXJlYUltcGw6OnNldE5l
ZWRzRGlzcGxheUluUmVjdChjb25zdCBJbnRSZWN0JiByZWN0KQogICAgIGlmIChkaXJ0eVJlY3Qu
aXNFbXB0eSgpKQogICAgICAgICByZXR1cm47CiAKLSAgICBpZiAobV93ZWJQYWdlLT5tYWluRnJh
bWVIYXNDdXN0b21SZXByZXNlbnRhdGlvbigpKQotICAgICAgICByZXR1cm47Ci0KICAgICBtX2Rp
cnR5UmVnaW9uLnVuaXRlKGRpcnR5UmVjdCk7CiAgICAgc2NoZWR1bGVEaXNwbGF5KCk7CiB9CkBA
IC0xMzAsOSArMTI3LDYgQEAgdm9pZCBEcmF3aW5nQXJlYUltcGw6OnNjcm9sbChjb25zdCBJbnRS
ZWN0JiBzY3JvbGxSZWN0LCBjb25zdCBJbnRTaXplJiBzY3JvbGxEZWwKICAgICAgICAgcmV0dXJu
OwogICAgIH0KIAotICAgIGlmIChtX3dlYlBhZ2UtPm1haW5GcmFtZUhhc0N1c3RvbVJlcHJlc2Vu
dGF0aW9uKCkpCi0gICAgICAgIHJldHVybjsKLQogICAgIGlmIChzY3JvbGxSZWN0LmlzRW1wdHko
KSkKICAgICAgICAgcmV0dXJuOwogCkBAIC0yNjcsMTggKzI2MSw2IEBAIGJvb2wgRHJhd2luZ0Fy
ZWFJbXBsOjpwYWdlT3ZlcmxheVNob3VsZEFwcGx5RmFkZVdoZW5QYWludGluZygpIGNvbnN0CiAg
ICAgcmV0dXJuIHRydWU7CiB9CiAKLXZvaWQgRHJhd2luZ0FyZWFJbXBsOjpwYWdlQ3VzdG9tUmVw
cmVzZW50YXRpb25DaGFuZ2VkKCkKLXsKLSAgICBpZiAoIW1fYWx3YXlzVXNlQ29tcG9zaXRpbmcp
Ci0gICAgICAgIHJldHVybjsKLQotICAgIGlmIChtX3dlYlBhZ2UtPm1haW5GcmFtZUhhc0N1c3Rv
bVJlcHJlc2VudGF0aW9uKCkpIHsKLSAgICAgICAgaWYgKG1fbGF5ZXJUcmVlSG9zdCkKLSAgICAg
ICAgICAgIGV4aXRBY2NlbGVyYXRlZENvbXBvc2l0aW5nTW9kZSgpOwotICAgIH0gZWxzZSBpZiAo
IW1fbGF5ZXJUcmVlSG9zdCkKLSAgICAgICAgZW50ZXJBY2NlbGVyYXRlZENvbXBvc2l0aW5nTW9k
ZSgwKTsKLX0KLQogdm9pZCBEcmF3aW5nQXJlYUltcGw6OnNldFBhaW50aW5nRW5hYmxlZChib29s
IHBhaW50aW5nRW5hYmxlZCkKIHsKICAgICBtX2lzUGFpbnRpbmdFbmFibGVkID0gcGFpbnRpbmdF
bmFibGVkOwpAQCAtNTQwLDcgKzUyMiw3IEBAIHZvaWQgRHJhd2luZ0FyZWFJbXBsOjplbnRlckFj
Y2VsZXJhdGVkQ29tcG9zaXRpbmdNb2RlKEdyYXBoaWNzTGF5ZXIqIGdyYXBoaWNzTGF5CiAKIHZv
aWQgRHJhd2luZ0FyZWFJbXBsOjpleGl0QWNjZWxlcmF0ZWRDb21wb3NpdGluZ01vZGUoKQogewot
ICAgIGlmIChtX2Fsd2F5c1VzZUNvbXBvc2l0aW5nICYmICFtX3dlYlBhZ2UtPm1haW5GcmFtZUhh
c0N1c3RvbVJlcHJlc2VudGF0aW9uKCkpCisgICAgaWYgKG1fYWx3YXlzVXNlQ29tcG9zaXRpbmcp
CiAgICAgICAgIHJldHVybjsKIAogICAgIEFTU0VSVCghbV9sYXllclRyZWVTdGF0ZUlzRnJvemVu
KTsKQEAgLTY3NywxMyArNjU5LDYgQEAgdm9pZCBEcmF3aW5nQXJlYUltcGw6OmRpc3BsYXkoVXBk
YXRlSW5mbyYgdXBkYXRlSW5mbykKICAgICBBU1NFUlQoIW1fbGF5ZXJUcmVlSG9zdCk7CiAgICAg
QVNTRVJUKCFtX3dlYlBhZ2UtPnNpemUoKS5pc0VtcHR5KCkpOwogCi0gICAgLy8gRklYTUU6IEl0
IHdvdWxkIGJlIGJldHRlciBpZiB3ZSBjb3VsZCBhdm9pZCBwYWludGluZyBhbHRvZ2V0aGVyIHdo
ZW4gdGhlcmUgaXMgYSBjdXN0b20gcmVwcmVzZW50YXRpb24uCi0gICAgaWYgKG1fd2ViUGFnZS0+
bWFpbkZyYW1lSGFzQ3VzdG9tUmVwcmVzZW50YXRpb24oKSkgewotICAgICAgICAvLyBBU1NVTVBU
SU9OOiB0aGUgY3VzdG9tIHJlcHJlc2VudGF0aW9uIHdpbGwgYmUgcGFpbnRpbmcgdGhlIGRpcnR5
IHJlZ2lvbiBmb3IgdXMuCi0gICAgICAgIG1fZGlydHlSZWdpb24gPSBSZWdpb24oKTsKLSAgICAg
ICAgcmV0dXJuOwotICAgIH0KLQogICAgIG1fd2ViUGFnZS0+bGF5b3V0SWZOZWVkZWQoKTsKIAog
ICAgIC8vIFRoZSBsYXlvdXQgbWF5IGhhdmUgcHV0IHRoZSBwYWdlIGludG8gYWNjZWxlcmF0ZWQg
Y29tcG9zaXRpbmcgbW9kZS4gSWYgdGhlIExheWVyVHJlZUhvc3QgaXMKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9EcmF3aW5nQXJlYUltcGwuaCBiL1NvdXJj
ZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9EcmF3aW5nQXJlYUltcGwuaAppbmRleCA3ODkz
MDA5Li4xYTU2MTRlIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBh
Z2UvRHJhd2luZ0FyZWFJbXBsLmgKKysrIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQ
YWdlL0RyYXdpbmdBcmVhSW1wbC5oCkBAIC05MCw4ICs5MCw2IEBAIHByaXZhdGU6CiAgICAgdmly
dHVhbCB2b2lkIHN1c3BlbmRQYWludGluZygpOwogICAgIHZpcnR1YWwgdm9pZCByZXN1bWVQYWlu
dGluZygpOwogICAgIAotICAgIHZpcnR1YWwgdm9pZCBwYWdlQ3VzdG9tUmVwcmVzZW50YXRpb25D
aGFuZ2VkKCk7Ci0KICAgICB2b2lkIHNlbmREaWRVcGRhdGVCYWNraW5nU3RvcmVTdGF0ZSgpOwog
CiAgICAgdm9pZCBlbnRlckFjY2VsZXJhdGVkQ29tcG9zaXRpbmdNb2RlKFdlYkNvcmU6OkdyYXBo
aWNzTGF5ZXIqKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFn
ZS9XZWJQYWdlLmNwcCBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9XZWJQYWdl
LmNwcAppbmRleCBhZTJkMjVkLi5mYWZjNGVhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9X
ZWJQcm9jZXNzL1dlYlBhZ2UvV2ViUGFnZS5jcHAKKysrIGIvU291cmNlL1dlYktpdDIvV2ViUHJv
Y2Vzcy9XZWJQYWdlL1dlYlBhZ2UuY3BwCkBAIC0zMDEyLDE3ICszMDEyLDYgQEAgdm9pZCBXZWJQ
YWdlOjpjbGVhclNlbGVjdGlvbigpCiAgICAgbV9wYWdlLT5mb2N1c0NvbnRyb2xsZXIoKS0+Zm9j
dXNlZE9yTWFpbkZyYW1lKCktPnNlbGVjdGlvbigpLT5jbGVhcigpOwogfQogCi1ib29sIFdlYlBh
Z2U6Om1haW5GcmFtZUhhc0N1c3RvbVJlcHJlc2VudGF0aW9uKCkgY29uc3QKLXsKLSAgICBpZiAo
RnJhbWUqIGZyYW1lID0gbWFpbkZyYW1lKCkpIHsKLSAgICAgICAgV2ViRnJhbWVMb2FkZXJDbGll
bnQqIHdlYkZyYW1lTG9hZGVyQ2xpZW50ID0gdG9XZWJGcmFtZUxvYWRlckNsaWVudChmcmFtZS0+
bG9hZGVyKCktPmNsaWVudCgpKTsKLSAgICAgICAgQVNTRVJUKHdlYkZyYW1lTG9hZGVyQ2xpZW50
KTsKLSAgICAgICAgcmV0dXJuIHdlYkZyYW1lTG9hZGVyQ2xpZW50LT5mcmFtZUhhc0N1c3RvbVJl
cHJlc2VudGF0aW9uKCk7Ci0gICAgfQotCi0gICAgcmV0dXJuIGZhbHNlOwotfQotCiB2b2lkIFdl
YlBhZ2U6OmRpZENoYW5nZVNjcm9sbE9mZnNldEZvck1haW5GcmFtZSgpCiB7CiAgICAgRnJhbWUq
IGZyYW1lID0gbV9wYWdlLT5tYWluRnJhbWUoKTsKQEAgLTM4NjUsMTUgKzM4NTQsNiBAQCBib29s
IFdlYlBhZ2U6OmNhblBsdWdpbkhhbmRsZVJlc3BvbnNlKGNvbnN0IFJlc291cmNlUmVzcG9uc2Um
IHJlc3BvbnNlKQogI2VuZGlmCiB9CiAKLWJvb2wgV2ViUGFnZTo6c2hvdWxkVXNlQ3VzdG9tUmVw
cmVzZW50YXRpb25Gb3JSZXNwb25zZShjb25zdCBSZXNvdXJjZVJlc3BvbnNlJiByZXNwb25zZSkK
LXsKLSAgICBpZiAoIW1fbWltZVR5cGVzV2l0aEN1c3RvbVJlcHJlc2VudGF0aW9ucy5jb250YWlu
cyhyZXNwb25zZS5taW1lVHlwZSgpKSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgLy8g
SWYgYSBwbHVnLWluIGV4aXN0cyB0aGF0IGNsYWltcyB0byBzdXBwb3J0IHRoaXMgcmVzcG9uc2Us
IGl0IHNob3VsZCB0YWtlIHByZWNlZGVuY2Ugb3ZlciB0aGUgY3VzdG9tIHJlcHJlc2VudGF0aW9u
LgotICAgIHJldHVybiAhY2FuUGx1Z2luSGFuZGxlUmVzcG9uc2UocmVzcG9uc2UpOwotfQotCiAj
aWYgUExBVEZPUk0oUVQpIHx8IFBMQVRGT1JNKEdUSykKIHN0YXRpYyBGcmFtZSogdGFyZ2V0RnJh
bWVGb3JFZGl0aW5nKFdlYlBhZ2UqIHBhZ2UpCiB7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0
Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvV2ViUGFnZS5oIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vz
cy9XZWJQYWdlL1dlYlBhZ2UuaAppbmRleCBlZjU5ZmY5Li45ZDk0YTJkIDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvV2ViUGFnZS5oCisrKyBiL1NvdXJjZS9X
ZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9XZWJQYWdlLmgKQEAgLTU1Miw4ICs1NTIsNiBAQCBw
dWJsaWM6CiAgICAgdm9pZCBzZXRNZWRpYVZvbHVtZShmbG9hdCk7CiAgICAgdm9pZCBzZXRNYXlT
dGFydE1lZGlhV2hlbkluV2luZG93KGJvb2wpOwogCi0gICAgYm9vbCBtYWluRnJhbWVIYXNDdXN0
b21SZXByZXNlbnRhdGlvbigpIGNvbnN0OwotCiAgICAgdm9pZCBkaWRDaGFuZ2VTY3JvbGxPZmZz
ZXRGb3JNYWluRnJhbWUoKTsKIAogICAgIHZvaWQgbWFpbkZyYW1lRGlkTGF5b3V0KCk7CkBAIC02
MTMsNyArNjExLDYgQEAgcHVibGljOgogICAgIHVpbnQ2NF90IG5hdGl2ZVdpbmRvd0hhbmRsZSgp
IHsgcmV0dXJuIG1fbmF0aXZlV2luZG93SGFuZGxlOyB9CiAjZW5kaWYKIAotICAgIGJvb2wgc2hv
dWxkVXNlQ3VzdG9tUmVwcmVzZW50YXRpb25Gb3JSZXNwb25zZShjb25zdCBXZWJDb3JlOjpSZXNv
dXJjZVJlc3BvbnNlJik7CiAgICAgYm9vbCBjYW5QbHVnaW5IYW5kbGVSZXNwb25zZShjb25zdCBX
ZWJDb3JlOjpSZXNvdXJjZVJlc3BvbnNlJiByZXNwb25zZSk7CiAKICAgICBib29sIGFzeW5jaHJv
bm91c1BsdWdpbkluaXRpYWxpemF0aW9uRW5hYmxlZCgpIGNvbnN0IHsgcmV0dXJuIG1fYXN5bmNo
cm9ub3VzUGx1Z2luSW5pdGlhbGl6YXRpb25FbmFibGVkOyB9CkBAIC0xMDIzLDcgKzEwMjAsNiBA
QCBwcml2YXRlOgogI2VuZGlmCiAgICAgV2ViSW5zcGVjdG9yQ2xpZW50KiBtX2luc3BlY3RvckNs
aWVudDsKIAotICAgIEhhc2hTZXQ8U3RyaW5nLCBDYXNlRm9sZGluZ0hhc2g+IG1fbWltZVR5cGVz
V2l0aEN1c3RvbVJlcHJlc2VudGF0aW9uczsKICAgICBXZWJDb3JlOjpDb2xvciBtX2JhY2tncm91
bmRDb2xvcjsKIAogICAgIEhhc2hTZXQ8dW5zaWduZWQ+IG1fYWN0aXZlUmVuZGVyaW5nU3VwcHJl
c3Npb25Ub2tlbnM7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBh
Z2UvbWFjL1dlYlBhZ2VNYWMubW0gYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2Uv
bWFjL1dlYlBhZ2VNYWMubW0KaW5kZXggMzc2NmRkZS4uM2M2ODI1MiAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL21hYy9XZWJQYWdlTWFjLm1tCisrKyBiL1Nv
dXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9tYWMvV2ViUGFnZU1hYy5tbQpAQCAtMTE1
LDE0ICsxMTUsNiBAQCB2b2lkIFdlYlBhZ2U6OnBsYXRmb3JtUHJlZmVyZW5jZXNEaWRDaGFuZ2Uo
Y29uc3QgV2ViUHJlZmVyZW5jZXNTdG9yZSYgc3RvcmUpCiB7CiAgICAgaWYgKFdlYkluc3BlY3Rv
ciogaW5zcGVjdG9yID0gdGhpcy0+aW5zcGVjdG9yKCkpCiAgICAgICAgIGluc3BlY3Rvci0+c2V0
SW5zcGVjdG9yVXNlc1dlYktpdFVzZXJJbnRlcmZhY2Uoc3RvcmUuZ2V0Qm9vbFZhbHVlRm9yS2V5
KFdlYlByZWZlcmVuY2VzS2V5OjppbnNwZWN0b3JVc2VzV2ViS2l0VXNlckludGVyZmFjZUtleSgp
KSk7Ci0KLSAgICBCT09MIG9taXRQREZTdXBwb3J0ID0gW1tOU1VzZXJEZWZhdWx0cyBzdGFuZGFy
ZFVzZXJEZWZhdWx0c10gYm9vbEZvcktleTpAIldlYktpdE9taXRQREZTdXBwb3J0Il07Ci0gICAg
aWYgKCFzaG91bGRVc2VQREZQbHVnaW4oKSAmJiAhb21pdFBERlN1cHBvcnQpIHsKLSAgICAgICAg
Ly8gSWYgd2UgZG9uJ3QgaGF2ZSBQREZQbHVnaW4sIHdlIHdpbGwgdXNlIGEgUERGIHZpZXcgaW4g
dGhlIFVJIHByb2Nlc3MgZm9yIFBERiBhbmQgUG9zdFNjcmlwdCBNSU1FIHR5cGVzLgotICAgICAg
ICBIYXNoU2V0PFN0cmluZz4gbWltZVR5cGVzID0gTUlNRVR5cGVSZWdpc3RyeTo6Z2V0UERGQW5k
UG9zdFNjcmlwdE1JTUVUeXBlcygpOwotICAgICAgICBmb3IgKEhhc2hTZXQ8U3RyaW5nPjo6aXRl
cmF0b3IgaXQgPSBtaW1lVHlwZXMuYmVnaW4oKTsgaXQgIT0gbWltZVR5cGVzLmVuZCgpOyArK2l0
KQotICAgICAgICAgICAgbV9taW1lVHlwZXNXaXRoQ3VzdG9tUmVwcmVzZW50YXRpb25zLmFkZCgq
aXQpOwotICAgIH0KIH0KIAogYm9vbCBXZWJQYWdlOjpzaG91bGRVc2VQREZQbHVnaW4oKSBjb25z
dApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvbWFjL1dlYktpdDIub3JkZXIgYi9Tb3VyY2Uv
V2ViS2l0Mi9tYWMvV2ViS2l0Mi5vcmRlcgppbmRleCAwYzJjNTM1Li5jNTEzNzVkIDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViS2l0Mi9tYWMvV2ViS2l0Mi5vcmRlcgorKysgYi9Tb3VyY2UvV2ViS2l0
Mi9tYWMvV2ViS2l0Mi5vcmRlcgpAQCAtMTEzMiw3ICsxMTMyLDYgQEAgX19aTjZXZWJLaXQxMldl
YlBhZ2VQcm94eTI3Y2xlYXJMb2FkRGVwZW5kZW50Q2FsbGJhY2tzRXYKIF9fWk42V2ViS2l0MTNX
ZWJGcmFtZVByb3h5MTNkaWRDb21taXRMb2FkRVJLTjNXVEY2U3RyaW5nRVJLTlNfMjNQbGF0Zm9y
bUNlcnRpZmljYXRlSW5mb0UKIF9fWk42V2ViS2l0MThXZWJDZXJ0aWZpY2F0ZUluZm82Y3JlYXRl
RVJLTlNfMjNQbGF0Zm9ybUNlcnRpZmljYXRlSW5mb0UKIF9fWk42V2ViS2l0MTRQYWdlQ2xpZW50
SW1wbDI1ZGlkQ29tbWl0TG9hZEZvck1haW5GcmFtZUViCi0tW1dLVmlldyhJbnRlcm5hbCkgX3Nl
dFBhZ2VIYXNDdXN0b21SZXByZXNlbnRhdGlvbjpdCiBfX1pOM1dURjZPd25QdHJJTjZXZWJLaXQx
N1BERlZpZXdDb250cm9sbGVyRUVhU0VTdDludWxscHRyX3QKIF9fWk42V2ViS2l0MTVXZWJMb2Fk
ZXJDbGllbnQyMWRpZENvbW1pdExvYWRGb3JGcmFtZUVQTlNfMTJXZWJQYWdlUHJveHlFUE5TXzEz
V2ViRnJhbWVQcm94eUVQTlNfOUFQSU9iamVjdEUKIF9XS0ZyYW1lR2V0UGFnZQo=
</data>
<flag name="review"
          id="228449"
          type_id="1"
          status="+"
          setter="ap"
    />
          </attachment>
      

    </bug>

</bugzilla>