<?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>227379</bug_id>
          
          <creation_ts>2021-06-24 16:47:19 -0700</creation_ts>
          <short_desc>[macOS] Add logging and clean up AppSSO flows</short_desc>
          <delta_ts>2021-06-28 10:45:04 -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>WebKit Nightly Build</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords>InRadar</keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Brent Fulgham">bfulgham</reporter>
          <assigned_to name="Brent Fulgham">bfulgham</assigned_to>
          <cc>ehutchison</cc>
    
    <cc>ews-watchlist</cc>
    
    <cc>jiewen_tan</cc>
    
    <cc>katherine_cheney</cc>
    
    <cc>kkinnunen</cc>
    
    <cc>webkit-bug-importer</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1772485</commentid>
    <comment_count>0</comment_count>
    <who name="Brent Fulgham">bfulgham</who>
    <bug_when>2021-06-24 16:47:19 -0700</bug_when>
    <thetext>We continue to experience some hangs when using AppSSO to authenticate users. This patch adds copious logging to understand the flows through this code, and adds clean-up code in more places to ensure that the modal sheet used by AppSSO is dismissed in cases where the authentication has completed (or failed).</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1772758</commentid>
    <comment_count>1</comment_count>
      <attachid>432290</attachid>
    <who name="Brent Fulgham">bfulgham</who>
    <bug_when>2021-06-25 14:01:41 -0700</bug_when>
    <thetext>Created attachment 432290
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1772764</commentid>
    <comment_count>2</comment_count>
      <attachid>432290</attachid>
    <who name="Kate Cheney">katherine_cheney</who>
    <bug_when>2021-06-25 14:46:05 -0700</bug_when>
    <thetext>Comment on attachment 432290
Patch

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

&gt; Source/WebKit/UIProcess/Cocoa/SOAuthorization/SOAuthorizationSession.mm:153
&gt; +    AUTHORIZATIONSESSION_RELEASE_LOG(&quot;shouldStart: m_page=%p&quot;, m_page.get());

If m_page is a weakPtr, could that cause issues trying to log if it is destroyed?

&gt; Source/WebKit/UIProcess/Cocoa/SOAuthorization/SOAuthorizationSession.mm:172
&gt; +            WTFLogAlways(&quot;SOAuthorizationSession::start (getAuthorizationHintsWithURL completion handler): Returning early because weakThis is now null.&quot;);

Why WTFLogAlways instead of AUTHORIZATIONSESSION_RELEASE_LOG?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1772774</commentid>
    <comment_count>3</comment_count>
      <attachid>432297</attachid>
    <who name="Brent Fulgham">bfulgham</who>
    <bug_when>2021-06-25 15:24:44 -0700</bug_when>
    <thetext>Created attachment 432297
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1772779</commentid>
    <comment_count>4</comment_count>
      <attachid>432297</attachid>
    <who name="Kate Cheney">katherine_cheney</who>
    <bug_when>2021-06-25 15:36:51 -0700</bug_when>
    <thetext>Comment on attachment 432297
Patch

r=me</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1772848</commentid>
    <comment_count>5</comment_count>
    <who name="EWS">ews-feeder</who>
    <bug_when>2021-06-25 18:47:34 -0700</bug_when>
    <thetext>Committed r279305 (239181@main): &lt;https://commits.webkit.org/239181@main&gt;

All reviewed patches have been landed. Closing bug and clearing flags on attachment 432297.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1772849</commentid>
    <comment_count>6</comment_count>
    <who name="Radar WebKit Bug Importer">webkit-bug-importer</who>
    <bug_when>2021-06-25 18:48:16 -0700</bug_when>
    <thetext>&lt;rdar://problem/79805243&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1773128</commentid>
    <comment_count>7</comment_count>
    <who name="Eric Hutchison">ehutchison</who>
    <bug_when>2021-06-28 10:45:04 -0700</bug_when>
    <thetext>It looks like the assert added in https://trac.webkit.org/changeset/279305/webkit

caused 4 API test crashes. Tracking in: https://bugs.webkit.org/show_bug.cgi?id=227454</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>432290</attachid>
            <date>2021-06-25 14:01:41 -0700</date>
            <delta_ts>2021-06-25 15:24:42 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-227379-20210625140140.patch</filename>
            <type>text/plain</type>
            <size>39930</size>
            <attacher name="Brent Fulgham">bfulgham</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjc5MjQzCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L0No
YW5nZUxvZyBiL1NvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nCmluZGV4IGVhZTczZjRmYmYwZjQ1NWJh
Y2JjYjNmOWQzMjYzNDZlNjg3YTE2NWYuLjUyMjljNGVhNjU3MGEyODllMzEwZDVlODNhYjY4ZjFm
YmY2Yzg5MDMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nCisrKyBiL1NvdXJj
ZS9XZWJLaXQvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsNjUgQEAKKzIwMjEtMDYtMjQgIEJyZW50IEZ1
bGdoYW0gIDxiZnVsZ2hhbUBhcHBsZS5jb20+CisKKyAgICAgICAgW21hY09TXSBBZGQgbG9nZ2lu
ZyBhbmQgY2xlYW4gdXAgQXBwU1NPIGZsb3dzIAorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0
Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjI3Mzc5CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZ
IChPT1BTISkuCisKKyAgICAgICAgVGhpcyBwYXRjaCBhZGRzIGRldGFpbGVkIGxvZ2dpbmcgdG8g
dW5kZXJzdGFuZCB0aGUgZmxvd3MgdGhyb3VnaCB0aGUgQXBwU1NPIGF1dGhlbnRpY2F0aW9uIGNv
ZGUsCisgICAgICAgIGFuZCBhZGRzIGNsZWFuLXVwIGNvZGUgaW4gbW9yZSBwbGFjZXMgdG8gZW5z
dXJlIHRoYXQgdGhlIG1vZGFsIHNoZWV0IHVzZWQgYnkgQXBwU1NPIGlzIGRpc21pc3NlZAorICAg
ICAgICBpbiBjYXNlcyB3aGVyZSB0aGUgYXV0aGVudGljYXRpb24gaGFzIGNvbXBsZXRlZCAob3Ig
ZmFpbGVkKS4KKworICAgICAgICAqIFVJUHJvY2Vzcy9Db2NvYS9TT0F1dGhvcml6YXRpb24vTmF2
aWdhdGlvblNPQXV0aG9yaXphdGlvblNlc3Npb24ubW06CisgICAgICAgIChXZWJLaXQ6Ok5hdmln
YXRpb25TT0F1dGhvcml6YXRpb25TZXNzaW9uOjpzaG91bGRTdGFydEludGVybmFsKTogQWRkcyBu
ZXcgbG9nZ2luZy4KKyAgICAgICAgKFdlYktpdDo6TmF2aWdhdGlvblNPQXV0aG9yaXphdGlvblNl
c3Npb246OndlYlZpZXdEaWRNb3ZlVG9XaW5kb3cpOiBEaXR0by4KKyAgICAgICAgKFdlYktpdDo6
TmF2aWdhdGlvblNPQXV0aG9yaXphdGlvblNlc3Npb246OnBhZ2VBY3RpdmVVUkxEaWRDaGFuZ2VE
dXJpbmdXYWl0aW5nIGNvbnN0KTogRGl0dG8uCisgICAgICAgICogVUlQcm9jZXNzL0NvY29hL1NP
QXV0aG9yaXphdGlvbi9Qb3BVcFNPQXV0aG9yaXphdGlvblNlc3Npb24ubW06CisgICAgICAgIChX
ZWJLaXQ6OlBvcFVwU09BdXRob3JpemF0aW9uU2Vzc2lvbjo6c2hvdWxkU3RhcnRJbnRlcm5hbCk6
IEFkZHMgbmV3IGxvZ2dpbmcuCisgICAgICAgIChXZWJLaXQ6OlBvcFVwU09BdXRob3JpemF0aW9u
U2Vzc2lvbjo6ZmFsbEJhY2tUb1dlYlBhdGhJbnRlcm5hbCk6IERpdHRvLgorICAgICAgICAoV2Vi
S2l0OjpQb3BVcFNPQXV0aG9yaXphdGlvblNlc3Npb246OmFib3J0SW50ZXJuYWwpOiBEaXR0by4K
KyAgICAgICAgKFdlYktpdDo6UG9wVXBTT0F1dGhvcml6YXRpb25TZXNzaW9uOjpjb21wbGV0ZUlu
dGVybmFsKTogRGl0dG8uCisgICAgICAgIChXZWJLaXQ6OlBvcFVwU09BdXRob3JpemF0aW9uU2Vz
c2lvbjo6Y2xvc2UpOiBEaXR0by4KKyAgICAgICAgKFdlYktpdDo6UG9wVXBTT0F1dGhvcml6YXRp
b25TZXNzaW9uOjppbml0U2VjcmV0V2ViVmlldyk6IERpdHRvLgorICAgICAgICAqIFVJUHJvY2Vz
cy9Db2NvYS9TT0F1dGhvcml6YXRpb24vUmVkaXJlY3RTT0F1dGhvcml6YXRpb25TZXNzaW9uLm1t
OgorICAgICAgICAoV2ViS2l0OjpSZWRpcmVjdFNPQXV0aG9yaXphdGlvblNlc3Npb246OmZhbGxC
YWNrVG9XZWJQYXRoSW50ZXJuYWwpOiBBZGRzIG5ldyBsb2dnaW5nLgorICAgICAgICAoV2ViS2l0
OjpSZWRpcmVjdFNPQXV0aG9yaXphdGlvblNlc3Npb246OmFib3J0SW50ZXJuYWwpOiBEaXR0by4K
KyAgICAgICAgKFdlYktpdDo6UmVkaXJlY3RTT0F1dGhvcml6YXRpb25TZXNzaW9uOjpjb21wbGV0
ZUludGVybmFsKTogRGl0dG8uCisgICAgICAgIChXZWJLaXQ6OlJlZGlyZWN0U09BdXRob3JpemF0
aW9uU2Vzc2lvbjo6YmVmb3JlU3RhcnQpOiBEaXR0by4KKyAgICAgICAgKiBVSVByb2Nlc3MvQ29j
b2EvU09BdXRob3JpemF0aW9uL1NPQXV0aG9yaXphdGlvbkNvb3JkaW5hdG9yLm1tOgorICAgICAg
ICAoV2ViS2l0OjpTT0F1dGhvcml6YXRpb25Db29yZGluYXRvcjo6dHJ5QXV0aG9yaXplKTogQWRk
cyBuZXcgbG9nZ2luZy4KKyAgICAgICAgKiBVSVByb2Nlc3MvQ29jb2EvU09BdXRob3JpemF0aW9u
L1NPQXV0aG9yaXphdGlvblNlc3Npb24uaDoKKyAgICAgICAgKiBVSVByb2Nlc3MvQ29jb2EvU09B
dXRob3JpemF0aW9uL1NPQXV0aG9yaXphdGlvblNlc3Npb24ubW06CisgICAgICAgIChXZWJLaXQ6
OlNPQXV0aG9yaXphdGlvblNlc3Npb246OnN0YXRlU3RyaW5nIGNvbnN0KTogQWRkZWQuCisgICAg
ICAgIChXZWJLaXQ6OlNPQXV0aG9yaXphdGlvblNlc3Npb246On5TT0F1dGhvcml6YXRpb25TZXNz
aW9uKTogQWRkIG5ldyBsb2dnaW5nLCBhbmQgZW5zdXJlIG1vZGFsIHNoZWV0IGlzIGRpc21pc3Nl
ZC4KKyAgICAgICAgKFdlYktpdDo6U09BdXRob3JpemF0aW9uU2Vzc2lvbjo6YmVjb21lQ29tcGxl
dGVkKTogQWRkZWQgbmV3IGxvZ2dpbmcuCisgICAgICAgIChXZWJLaXQ6OlNPQXV0aG9yaXphdGlv
blNlc3Npb246OnNob3VsZFN0YXJ0KTogRGl0dG8uCisgICAgICAgIChXZWJLaXQ6OlNPQXV0aG9y
aXphdGlvblNlc3Npb246OnN0YXJ0KTogRGl0dG8uCisgICAgICAgIChXZWJLaXQ6OlNPQXV0aG9y
aXphdGlvblNlc3Npb246OmNvbnRpbnVlU3RhcnRBZnRlckdldEF1dGhvcml6YXRpb25IaW50cyk6
IERpdHRvLgorICAgICAgICAoV2ViS2l0OjpTT0F1dGhvcml6YXRpb25TZXNzaW9uOjpjb250aW51
ZVN0YXJ0QWZ0ZXJEZWNpZGVQb2xpY3kpOiBEaXR0by4KKyAgICAgICAgKFdlYktpdDo6U09BdXRo
b3JpemF0aW9uU2Vzc2lvbjo6ZmFsbEJhY2tUb1dlYlBhdGgpOiBBZGQgbmV3IGxvZ2dpbmcsIGFu
ZCBlbnN1cmUgbW9kYWwgc2hlZXQgaXMgZGlzbWlzc2VkLgorICAgICAgICAoV2ViS2l0OjpTT0F1
dGhvcml6YXRpb25TZXNzaW9uOjphYm9ydCk6IERpdHRvLgorICAgICAgICAoV2ViS2l0OjpTT0F1
dGhvcml6YXRpb25TZXNzaW9uOjpjb21wbGV0ZSk6IERpdHRvLgorICAgICAgICAoV2ViS2l0OjpT
T0F1dGhvcml6YXRpb25TZXNzaW9uOjpwcmVzZW50Vmlld0NvbnRyb2xsZXIpOiBBZGRlZCBuZXcg
bG9nZ2luZywgYW5kIGRpc21pc3MgbW9kYWwgaWYgYW4gZXhpc3RpbmcKKyAgICAgICAgdmlldyBp
cyBpbiBwbGFjZS4KKyAgICAgICAgKFdlYktpdDo6U09BdXRob3JpemF0aW9uU2Vzc2lvbjo6ZGlz
bWlzc01vZGFsU2hlZXRJZk5lY2Vzc2FyeSk6IEFkZGVkLgorICAgICAgICAoV2ViS2l0OjpTT0F1
dGhvcml6YXRpb25TZXNzaW9uOjpkaXNtaXNzVmlld0NvbnRyb2xsZXIpOiBVc2UgbmV3IGhlbHBl
ciBmdW5jdGlvbi4KKyAgICAgICAgKiBVSVByb2Nlc3MvQ29jb2EvU09BdXRob3JpemF0aW9uL1N1
YkZyYW1lU09BdXRob3JpemF0aW9uU2Vzc2lvbi5tbToKKyAgICAgICAgKFdlYktpdDo6U3ViRnJh
bWVTT0F1dGhvcml6YXRpb25TZXNzaW9uOjpmYWxsQmFja1RvV2ViUGF0aEludGVybmFsKTogQWRk
cyBuZXcgbG9nZ2luZy4KKyAgICAgICAgKFdlYktpdDo6U3ViRnJhbWVTT0F1dGhvcml6YXRpb25T
ZXNzaW9uOjphYm9ydEludGVybmFsKTogRGl0dG8uCisgICAgICAgIChXZWJLaXQ6OlN1YkZyYW1l
U09BdXRob3JpemF0aW9uU2Vzc2lvbjo6Y29tcGxldGVJbnRlcm5hbCk6IERpdHRvLgorICAgICAg
ICAoV2ViS2l0OjpTdWJGcmFtZVNPQXV0aG9yaXphdGlvblNlc3Npb246OmJlZm9yZVN0YXJ0KTog
RGl0dG8uCisgICAgICAgIChXZWJLaXQ6OlN1YkZyYW1lU09BdXRob3JpemF0aW9uU2Vzc2lvbjo6
ZGlkRmluaXNoTG9hZCk6IERpdHRvLgorICAgICAgICAoV2ViS2l0OjpTdWJGcmFtZVNPQXV0aG9y
aXphdGlvblNlc3Npb246OmxvYWRSZXF1ZXN0VG9GcmFtZSk6IERpdHRvLgorICAgICAgICAqIFVJ
UHJvY2Vzcy9Db2NvYS9TT0F1dGhvcml6YXRpb24vV0tTT0F1dGhvcml6YXRpb25EZWxlZ2F0ZS5t
bToKKyAgICAgICAgKC1bV0tTT0F1dGhvcml6YXRpb25EZWxlZ2F0ZSBhdXRob3JpemF0aW9uOnBy
ZXNlbnRWaWV3Q29udHJvbGxlcjp3aXRoQ29tcGxldGlvbjpdKTogQWRkcyBuZXcgbG9nZ2luZy4K
KyAgICAgICAgKC1bV0tTT0F1dGhvcml6YXRpb25EZWxlZ2F0ZSBhdXRob3JpemF0aW9uRGlkTm90
SGFuZGxlOl0pOiBEaXR0by4KKyAgICAgICAgKC1bV0tTT0F1dGhvcml6YXRpb25EZWxlZ2F0ZSBh
dXRob3JpemF0aW9uRGlkQ2FuY2VsOl0pOiBEaXR0by4KKyAgICAgICAgKC1bV0tTT0F1dGhvcml6
YXRpb25EZWxlZ2F0ZSBhdXRob3JpemF0aW9uRGlkQ29tcGxldGU6XSk6IERpdHRvLgorICAgICAg
ICAoLVtXS1NPQXV0aG9yaXphdGlvbkRlbGVnYXRlIGF1dGhvcml6YXRpb246ZGlkQ29tcGxldGVX
aXRoSFRUUEF1dGhvcml6YXRpb25IZWFkZXJzOl0pOiBEaXR0by4KKyAgICAgICAgKC1bV0tTT0F1
dGhvcml6YXRpb25EZWxlZ2F0ZSBhdXRob3JpemF0aW9uOmRpZENvbXBsZXRlV2l0aEhUVFBSZXNw
b25zZTpodHRwQm9keTpdKTogRGl0dG8uCisgICAgICAgICgtW1dLU09BdXRob3JpemF0aW9uRGVs
ZWdhdGUgYXV0aG9yaXphdGlvbjpkaWRDb21wbGV0ZVdpdGhFcnJvcjpdKTogRGl0dG8uCisgICAg
ICAgICgtW1dLU09BdXRob3JpemF0aW9uRGVsZWdhdGUgc2V0U2Vzc2lvbjpdKTogRGl0dG8uCisK
IDIwMjEtMDYtMjQgIENocmlzIER1bWV6ICA8Y2R1bWV6QGFwcGxlLmNvbT4KIAogICAgICAgICBB
ZGQgcmVsZWFzZSBsb2dnaW5nIGluIHRoZSBXZWJQYWdlIGNvbnN0cnVjdG9yIC8gZGVzdHJ1Y3Rv
cgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQ29jb2EvU09BdXRob3JpemF0
aW9uL05hdmlnYXRpb25TT0F1dGhvcml6YXRpb25TZXNzaW9uLm1tIGIvU291cmNlL1dlYktpdC9V
SVByb2Nlc3MvQ29jb2EvU09BdXRob3JpemF0aW9uL05hdmlnYXRpb25TT0F1dGhvcml6YXRpb25T
ZXNzaW9uLm1tCmluZGV4IGZjNzdlMzU0ZTY1MmVlZTgxN2M5OTVlYmNmYjA0ODFhZmE5NTk3MWQu
LjIyNGIwZDAyYWFmZDQ0YTRhZWY4YjQwNmM0YjlkNmQwOTVkNWQxY2IgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJLaXQvVUlQcm9jZXNzL0NvY29hL1NPQXV0aG9yaXphdGlvbi9OYXZpZ2F0aW9uU09B
dXRob3JpemF0aW9uU2Vzc2lvbi5tbQorKysgYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9Db2Nv
YS9TT0F1dGhvcml6YXRpb24vTmF2aWdhdGlvblNPQXV0aG9yaXphdGlvblNlc3Npb24ubW0KQEAg
LTMxLDYgKzMxLDggQEAKICNpbXBvcnQgIldlYlBhZ2VQcm94eS5oIgogI2ltcG9ydCA8V2ViQ29y
ZS9SZXNvdXJjZVJlc3BvbnNlLmg+CiAKKyNkZWZpbmUgQVVUSE9SSVpBVElPTlNFU1NJT05fUkVM
RUFTRV9MT0coZm10LCAuLi4pIFJFTEVBU0VfTE9HKEFwcFNTTywgIiVwIC0gW0luaXRpYXRpbmdB
Y3Rpb249JXNdW1N0YXRlPSVzXSBOYXZpZ2F0aW9uU09BdXRob3JpemF0aW9uU2Vzc2lvbjo6IiBm
bXQsIHRoaXMsIGluaXRpYXRpbmdBY3Rpb25TdHJpbmcoKSwgc3RhdGVTdHJpbmcoKSwgIyNfX1ZB
X0FSR1NfXykKKwogbmFtZXNwYWNlIFdlYktpdCB7CiAKIE5hdmlnYXRpb25TT0F1dGhvcml6YXRp
b25TZXNzaW9uOjpOYXZpZ2F0aW9uU09BdXRob3JpemF0aW9uU2Vzc2lvbihTT0F1dGhvcml6YXRp
b24gKnNvQXV0aG9yaXphdGlvbiwgUmVmPEFQSTo6TmF2aWdhdGlvbkFjdGlvbj4mJiBuYXZpZ2F0
aW9uQWN0aW9uLCBXZWJQYWdlUHJveHkmIHBhZ2UsIEluaXRpYXRpbmdBY3Rpb24gYWN0aW9uLCBD
YWxsYmFjayYmIGNvbXBsZXRpb25IYW5kbGVyKQpAQCAtNDksNiArNTEsOCBAQCBOYXZpZ2F0aW9u
U09BdXRob3JpemF0aW9uU2Vzc2lvbjo6fk5hdmlnYXRpb25TT0F1dGhvcml6YXRpb25TZXNzaW9u
KCkKIAogdm9pZCBOYXZpZ2F0aW9uU09BdXRob3JpemF0aW9uU2Vzc2lvbjo6c2hvdWxkU3RhcnRJ
bnRlcm5hbCgpCiB7CisgICAgQVVUSE9SSVpBVElPTlNFU1NJT05fUkVMRUFTRV9MT0coInNob3Vs
ZFN0YXJ0SW50ZXJuYWw6IG1fcGFnZT0lcCIsIHBhZ2UoKSk7CisKICAgICBhdXRvKiBwYWdlID0g
dGhpcy0+cGFnZSgpOwogICAgIEFTU0VSVChwYWdlKTsKICAgICBiZWZvcmVTdGFydCgpOwpAQCAt
NjQsNiArNjgsNyBAQCB2b2lkIE5hdmlnYXRpb25TT0F1dGhvcml6YXRpb25TZXNzaW9uOjpzaG91
bGRTdGFydEludGVybmFsKCkKIAogdm9pZCBOYXZpZ2F0aW9uU09BdXRob3JpemF0aW9uU2Vzc2lv
bjo6d2ViVmlld0RpZE1vdmVUb1dpbmRvdygpCiB7CisgICAgQVVUSE9SSVpBVElPTlNFU1NJT05f
UkVMRUFTRV9MT0coIndlYlZpZXdEaWRNb3ZlVG9XaW5kb3ciKTsKICAgICBhdXRvKiBwYWdlID0g
dGhpcy0+cGFnZSgpOwogICAgIGlmIChzdGF0ZSgpICE9IFN0YXRlOjpXYWl0aW5nIHx8ICFwYWdl
IHx8ICFwYWdlLT5pc0luV2luZG93KCkpCiAgICAgICAgIHJldHVybjsKQEAgLTc4LDEwICs4Mywx
MyBAQCB2b2lkIE5hdmlnYXRpb25TT0F1dGhvcml6YXRpb25TZXNzaW9uOjp3ZWJWaWV3RGlkTW92
ZVRvV2luZG93KCkKIAogYm9vbCBOYXZpZ2F0aW9uU09BdXRob3JpemF0aW9uU2Vzc2lvbjo6cGFn
ZUFjdGl2ZVVSTERpZENoYW5nZUR1cmluZ1dhaXRpbmcoKSBjb25zdAogeworICAgIEFVVEhPUkla
QVRJT05TRVNTSU9OX1JFTEVBU0VfTE9HKCJwYWdlQWN0aXZlVVJMRGlkQ2hhbmdlRHVyaW5nV2Fp
dGluZyIpOwogICAgIGF1dG8qIHBhZ2UgPSB0aGlzLT5wYWdlKCk7CiAgICAgcmV0dXJuICFwYWdl
IHx8IHBhZ2UtPnBhZ2VMb2FkU3RhdGUoKS5hY3RpdmVVUkwoKSAhPSBtX3dhaXRpbmdQYWdlQWN0
aXZlVVJMOwogfQogCiB9IC8vIG5hbWVzcGFjZSBXZWJLaXQKIAorI3VuZGVmIEFVVEhPUklaQVRJ
T05TRVNTSU9OX1JFTEVBU0VfTE9HCisKICNlbmRpZgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktp
dC9VSVByb2Nlc3MvQ29jb2EvU09BdXRob3JpemF0aW9uL1BvcFVwU09BdXRob3JpemF0aW9uU2Vz
c2lvbi5tbSBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0NvY29hL1NPQXV0aG9yaXphdGlvbi9Q
b3BVcFNPQXV0aG9yaXphdGlvblNlc3Npb24ubW0KaW5kZXggYzZiNDc5MjEwNzU2ZDMzODZmY2Rm
MDRkMTZhNjBlMTI1YjI3MjBkMi4uZGYyZjcxNmMzZjk3YmMwNGYxYWQ3MTViMjk3YjZkOThmODhm
N2Q1ZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQ29jb2EvU09BdXRob3Jp
emF0aW9uL1BvcFVwU09BdXRob3JpemF0aW9uU2Vzc2lvbi5tbQorKysgYi9Tb3VyY2UvV2ViS2l0
L1VJUHJvY2Vzcy9Db2NvYS9TT0F1dGhvcml6YXRpb24vUG9wVXBTT0F1dGhvcml6YXRpb25TZXNz
aW9uLm1tCkBAIC04OSw2ICs4OSw4IEBACiAKIEBlbmQKIAorI2RlZmluZSBBVVRIT1JJWkFUSU9O
U0VTU0lPTl9SRUxFQVNFX0xPRyhmbXQsIC4uLikgUkVMRUFTRV9MT0coQXBwU1NPLCAiJXAgLSBb
SW5pdGlhdGluZ0FjdGlvbj0lc11bU3RhdGU9JXNdIFBvcFVwU09BdXRob3JpemF0aW9uU2Vzc2lv
bjo6IiBmbXQsIHRoaXMsIGluaXRpYXRpbmdBY3Rpb25TdHJpbmcoKSwgc3RhdGVTdHJpbmcoKSwg
IyNfX1ZBX0FSR1NfXykKKwogbmFtZXNwYWNlIFdlYktpdCB7CiAKIFJlZjxTT0F1dGhvcml6YXRp
b25TZXNzaW9uPiBQb3BVcFNPQXV0aG9yaXphdGlvblNlc3Npb246OmNyZWF0ZShTT0F1dGhvcml6
YXRpb24gKnNvQXV0aG9yaXphdGlvbiwgV2ViUGFnZVByb3h5JiBwYWdlLCBSZWY8QVBJOjpOYXZp
Z2F0aW9uQWN0aW9uPiYmIG5hdmlnYXRpb25BY3Rpb24sIE5ld1BhZ2VDYWxsYmFjayYmIG5ld1Bh
Z2VDYWxsYmFjaywgVUlDbGllbnRDYWxsYmFjayYmIHVpQ2xpZW50Q2FsbGJhY2spCkBAIC0xMTIs
MTcgKzExNCwyMCBAQCBQb3BVcFNPQXV0aG9yaXphdGlvblNlc3Npb246On5Qb3BVcFNPQXV0aG9y
aXphdGlvblNlc3Npb24oKQogCiB2b2lkIFBvcFVwU09BdXRob3JpemF0aW9uU2Vzc2lvbjo6c2hv
dWxkU3RhcnRJbnRlcm5hbCgpCiB7CisgICAgQVVUSE9SSVpBVElPTlNFU1NJT05fUkVMRUFTRV9M
T0coInNob3VsZFN0YXJ0SW50ZXJuYWw6IG1fcGFnZT0lcCIsIHBhZ2UoKSk7CiAgICAgQVNTRVJU
KHBhZ2UoKSAmJiBwYWdlKCktPmlzSW5XaW5kb3coKSk7CiAgICAgc3RhcnQoKTsKIH0KIAogdm9p
ZCBQb3BVcFNPQXV0aG9yaXphdGlvblNlc3Npb246OmZhbGxCYWNrVG9XZWJQYXRoSW50ZXJuYWwo
KQogeworICAgIEFVVEhPUklaQVRJT05TRVNTSU9OX1JFTEVBU0VfTE9HKCJmYWxsQmFja1RvV2Vi
UGF0aEludGVybmFsIik7CiAgICAgbV91aUNsaWVudENhbGxiYWNrKHJlbGVhc2VOYXZpZ2F0aW9u
QWN0aW9uKCksIFdURk1vdmUobV9uZXdQYWdlQ2FsbGJhY2spKTsKIH0KIAogdm9pZCBQb3BVcFNP
QXV0aG9yaXphdGlvblNlc3Npb246OmFib3J0SW50ZXJuYWwoKQogeworICAgIEFVVEhPUklaQVRJ
T05TRVNTSU9OX1JFTEVBU0VfTE9HKCJhYm9ydEludGVybmFsOiBtX3BhZ2U9JXAiLCBwYWdlKCkp
OwogICAgIGlmICghcGFnZSgpKSB7CiAgICAgICAgIG1fbmV3UGFnZUNhbGxiYWNrKG51bGxwdHIp
OwogICAgICAgICByZXR1cm47CkBAIC0xNDAsNiArMTQ1LDggQEAgdm9pZCBQb3BVcFNPQXV0aG9y
aXphdGlvblNlc3Npb246OmFib3J0SW50ZXJuYWwoKQogCiB2b2lkIFBvcFVwU09BdXRob3JpemF0
aW9uU2Vzc2lvbjo6Y29tcGxldGVJbnRlcm5hbChjb25zdCBXZWJDb3JlOjpSZXNvdXJjZVJlc3Bv
bnNlJiByZXNwb25zZSwgTlNEYXRhICpkYXRhKQogeworICAgIEFVVEhPUklaQVRJT05TRVNTSU9O
X1JFTEVBU0VfTE9HKCJjb21wbGV0ZUludGVybmFsOiBodHRwU3RhdGU9JWQiLCByZXNwb25zZS5o
dHRwU3RhdHVzQ29kZSgpKTsKKwogICAgIGlmIChyZXNwb25zZS5odHRwU3RhdHVzQ29kZSgpICE9
IDIwMCB8fCAhcGFnZSgpKSB7CiAgICAgICAgIGZhbGxCYWNrVG9XZWJQYXRoSW50ZXJuYWwoKTsK
ICAgICAgICAgcmV0dXJuOwpAQCAtMTU3LDYgKzE2NCw3IEBAIHZvaWQgUG9wVXBTT0F1dGhvcml6
YXRpb25TZXNzaW9uOjpjb21wbGV0ZUludGVybmFsKGNvbnN0IFdlYkNvcmU6OlJlc291cmNlUmVz
cG9uCiAKIHZvaWQgUG9wVXBTT0F1dGhvcml6YXRpb25TZXNzaW9uOjpjbG9zZShXS1dlYlZpZXcg
KndlYlZpZXcpCiB7CisgICAgQVVUSE9SSVpBVElPTlNFU1NJT05fUkVMRUFTRV9MT0coImNsb3Nl
Iik7CiAgICAgaWYgKCFtX3NlY3JldFdlYlZpZXcpCiAgICAgICAgIHJldHVybjsKICAgICBpZiAo
c3RhdGUoKSAhPSBTdGF0ZTo6Q29tcGxldGVkIHx8IHdlYlZpZXcgIT0gbV9zZWNyZXRXZWJWaWV3
LmdldCgpKSB7CkBAIC0xNjksNiArMTc3LDcgQEAgdm9pZCBQb3BVcFNPQXV0aG9yaXphdGlvblNl
c3Npb246OmNsb3NlKFdLV2ViVmlldyAqd2ViVmlldykKIAogdm9pZCBQb3BVcFNPQXV0aG9yaXph
dGlvblNlc3Npb246OmluaXRTZWNyZXRXZWJWaWV3KCkKIHsKKyAgICBBVVRIT1JJWkFUSU9OU0VT
U0lPTl9SRUxFQVNFX0xPRygiaW5pdFNlY3JldFdlYlZpZXciKTsKICAgICBBU1NFUlQocGFnZSgp
KTsKICAgICBhdXRvIGluaXRpYXRvcldlYlZpZXcgPSBwYWdlKCktPmNvY29hVmlldygpOwogICAg
IGlmICghaW5pdGlhdG9yV2ViVmlldykKQEAgLTE4Nyw0ICsxOTYsNiBAQCB2b2lkIFBvcFVwU09B
dXRob3JpemF0aW9uU2Vzc2lvbjo6aW5pdFNlY3JldFdlYlZpZXcoKQogCiB9IC8vIG5hbWVzcGFj
ZSBXZWJLaXQKIAorI3VuZGVmIEFVVEhPUklaQVRJT05TRVNTSU9OX1JFTEVBU0VfTE9HCisKICNl
bmRpZgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQ29jb2EvU09BdXRob3Jp
emF0aW9uL1JlZGlyZWN0U09BdXRob3JpemF0aW9uU2Vzc2lvbi5tbSBiL1NvdXJjZS9XZWJLaXQv
VUlQcm9jZXNzL0NvY29hL1NPQXV0aG9yaXphdGlvbi9SZWRpcmVjdFNPQXV0aG9yaXphdGlvblNl
c3Npb24ubW0KaW5kZXggOTgzOGY2YTExMGQ5MWYwNTRmZTI4NDU4ZTg2ZWEzY2ZlNzA1ZWNlNC4u
NDg1ZWFiMDNiNjYzOTkzMDI5MGFjNTdjNjYyMGY1ODEzNGVmY2QyZCAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYktpdC9VSVByb2Nlc3MvQ29jb2EvU09BdXRob3JpemF0aW9uL1JlZGlyZWN0U09BdXRo
b3JpemF0aW9uU2Vzc2lvbi5tbQorKysgYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9Db2NvYS9T
T0F1dGhvcml6YXRpb24vUmVkaXJlY3RTT0F1dGhvcml6YXRpb25TZXNzaW9uLm1tCkBAIC0zMyw2
ICszMyw4IEBACiAjaW1wb3J0ICJXZWJQYWdlUHJveHkuaCIKICNpbXBvcnQgPFdlYkNvcmUvUmVz
b3VyY2VSZXNwb25zZS5oPgogCisjZGVmaW5lIEFVVEhPUklaQVRJT05TRVNTSU9OX1JFTEVBU0Vf
TE9HKGZtdCwgLi4uKSBSRUxFQVNFX0xPRyhBcHBTU08sICIlcCAtIFtJbml0aWF0aW5nQWN0aW9u
PSVzXVtTdGF0ZT0lc10gUmVkaXJlY3RTT0F1dGhvcml6YXRpb25TZXNzaW9uOjoiIGZtdCwgdGhp
cywgaW5pdGlhdGluZ0FjdGlvblN0cmluZygpLCBzdGF0ZVN0cmluZygpLCAjI19fVkFfQVJHU19f
KQorCiBuYW1lc3BhY2UgV2ViS2l0IHsKIHVzaW5nIG5hbWVzcGFjZSBXZWJDb3JlOwogCkBAIC00
OCwyMCArNTAsMjUgQEAgUmVkaXJlY3RTT0F1dGhvcml6YXRpb25TZXNzaW9uOjpSZWRpcmVjdFNP
QXV0aG9yaXphdGlvblNlc3Npb24oU09BdXRob3JpemF0aW9uICoKIAogdm9pZCBSZWRpcmVjdFNP
QXV0aG9yaXphdGlvblNlc3Npb246OmZhbGxCYWNrVG9XZWJQYXRoSW50ZXJuYWwoKQogeworICAg
IEFVVEhPUklaQVRJT05TRVNTSU9OX1JFTEVBU0VfTE9HKCJmYWxsQmFja1RvV2ViUGF0aEludGVy
bmFsOiBuYXZpZ2F0aW9uQWN0aW9uPSVwIiwgbmF2aWdhdGlvbkFjdGlvbigpKTsKICAgICBpbnZv
a2VDYWxsYmFjayhmYWxzZSk7CiB9CiAKIHZvaWQgUmVkaXJlY3RTT0F1dGhvcml6YXRpb25TZXNz
aW9uOjphYm9ydEludGVybmFsKCkKIHsKKyAgICBBVVRIT1JJWkFUSU9OU0VTU0lPTl9SRUxFQVNF
X0xPRygiYWJvcnRJbnRlcm5hbCIpOwogICAgIGludm9rZUNhbGxiYWNrKHRydWUpOwogfQogCiB2
b2lkIFJlZGlyZWN0U09BdXRob3JpemF0aW9uU2Vzc2lvbjo6Y29tcGxldGVJbnRlcm5hbChjb25z
dCBSZXNvdXJjZVJlc3BvbnNlJiByZXNwb25zZSwgTlNEYXRhICpkYXRhKQogeworICAgIEFVVEhP
UklaQVRJT05TRVNTSU9OX1JFTEVBU0VfTE9HKCJjb21wbGV0ZUludGVybmFsOiBodHRwU3RhdGU9
JWQsIG5hdmlnYXRpb25BY3Rpb249JXAiLCByZXNwb25zZS5odHRwU3RhdHVzQ29kZSgpLCBuYXZp
Z2F0aW9uQWN0aW9uKCkpOworCiAgICAgYXV0byogbmF2aWdhdGlvbkFjdGlvbiA9IHRoaXMtPm5h
dmlnYXRpb25BY3Rpb24oKTsKICAgICBBU1NFUlQobmF2aWdhdGlvbkFjdGlvbik7CiAgICAgYXV0
byogcGFnZSA9IHRoaXMtPnBhZ2UoKTsKICAgICBpZiAoKHJlc3BvbnNlLmh0dHBTdGF0dXNDb2Rl
KCkgIT0gMzAyICYmIHJlc3BvbnNlLmh0dHBTdGF0dXNDb2RlKCkgIT0gMjAwKSB8fCAhcGFnZSkg
eworICAgICAgICBBVVRIT1JJWkFUSU9OU0VTU0lPTl9SRUxFQVNFX0xPRygiY29tcGxldGVJbnRl
cm5hbDogaHR0cFN0YXRlPSVkIHBhZ2U9JWQsIHNvIGZhbGxpbmcgYmFjayB0byB3ZWIgcGF0aC4i
LCByZXNwb25zZS5odHRwU3RhdHVzQ29kZSgpLCAhIXBhZ2UpOwogICAgICAgICBmYWxsQmFja1Rv
V2ViUGF0aEludGVybmFsKCk7CiAgICAgICAgIHJldHVybjsKICAgICB9CkBAIC05Miw4ICs5OSwx
MSBAQCB2b2lkIFJlZGlyZWN0U09BdXRob3JpemF0aW9uU2Vzc2lvbjo6Y29tcGxldGVJbnRlcm5h
bChjb25zdCBSZXNvdXJjZVJlc3BvbnNlJiByZQogCiB2b2lkIFJlZGlyZWN0U09BdXRob3JpemF0
aW9uU2Vzc2lvbjo6YmVmb3JlU3RhcnQoKQogeworICAgIEFVVEhPUklaQVRJT05TRVNTSU9OX1JF
TEVBU0VfTE9HKCJiZWZvcmVTdGFydCIpOwogfQogCiB9IC8vIG5hbWVzcGFjZSBXZWJLaXQKIAor
I3VuZGVmIEFVVEhPUklaQVRJT05TRVNTSU9OX1JFTEVBU0VfTE9HCisKICNlbmRpZgpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQ29jb2EvU09BdXRob3JpemF0aW9uL1NPQXV0
aG9yaXphdGlvbkNvb3JkaW5hdG9yLm1tIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQ29jb2Ev
U09BdXRob3JpemF0aW9uL1NPQXV0aG9yaXphdGlvbkNvb3JkaW5hdG9yLm1tCmluZGV4IDBlMDJh
MWEwMTlkZmU2NGM4ODE4YWQxZmJmYzgyMjgwYjFlZTQyMGYuLjRhNjcyZDNjMGZkYTZiNjUwODNj
ODlhZTNkZmIyOGIyMzhmZDIyMTEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNz
L0NvY29hL1NPQXV0aG9yaXphdGlvbi9TT0F1dGhvcml6YXRpb25Db29yZGluYXRvci5tbQorKysg
Yi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9Db2NvYS9TT0F1dGhvcml6YXRpb24vU09BdXRob3Jp
emF0aW9uQ29vcmRpbmF0b3IubW0KQEAgLTQxLDYgKzQxLDggQEAKICNpbXBvcnQgPHBhbC9zcGkv
Y29jb2EvQXV0aEtpdFNQSS5oPgogI2ltcG9ydCA8d3RmL0Z1bmN0aW9uLmg+CiAKKyNkZWZpbmUg
QVVUSE9SSVpBVElPTkNPT1JESU5BVE9SX1JFTEVBU0VfTE9HKGZtdCwgLi4uKSBSRUxFQVNFX0xP
RyhBcHBTU08sICIlcCAtIFNPQXV0aG9yaXphdGlvbkNvb3JkaW5hdG9yOjoiIGZtdCwgdGhpcywg
IyNfX1ZBX0FSR1NfXykKKwogbmFtZXNwYWNlIFdlYktpdCB7CiAKIFNPQXV0aG9yaXphdGlvbkNv
b3JkaW5hdG9yOjpTT0F1dGhvcml6YXRpb25Db29yZGluYXRvcigpCkBAIC02Myw3ICs2NSw5IEBA
IGJvb2wgU09BdXRob3JpemF0aW9uQ29vcmRpbmF0b3I6OmNhbkF1dGhvcml6ZShjb25zdCBVUkwm
IHVybCkgY29uc3QKIAogdm9pZCBTT0F1dGhvcml6YXRpb25Db29yZGluYXRvcjo6dHJ5QXV0aG9y
aXplKFJlZjxBUEk6Ok5hdmlnYXRpb25BY3Rpb24+JiYgbmF2aWdhdGlvbkFjdGlvbiwgV2ViUGFn
ZVByb3h5JiBwYWdlLCBGdW5jdGlvbjx2b2lkKGJvb2wpPiYmIGNvbXBsZXRpb25IYW5kbGVyKQog
eworICAgIEFVVEhPUklaQVRJT05DT09SRElOQVRPUl9SRUxFQVNFX0xPRygidHJ5QXV0aG9yaXpl
Iik7CiAgICAgaWYgKCFjYW5BdXRob3JpemUobmF2aWdhdGlvbkFjdGlvbi0+cmVxdWVzdCgpLnVy
bCgpKSkgeworICAgICAgICBBVVRIT1JJWkFUSU9OQ09PUkRJTkFUT1JfUkVMRUFTRV9MT0coInRy
eUF1dGhvcml6ZTogQ2Fubm90IGF1dGhvcml6ZSB0aGUgcmVxdWVzdGVkIFVSTC4iKTsKICAgICAg
ICAgY29tcGxldGlvbkhhbmRsZXIoZmFsc2UpOwogICAgICAgICByZXR1cm47CiAgICAgfQpAQCAt
NzIsNiArNzYsNyBAQCB2b2lkIFNPQXV0aG9yaXphdGlvbkNvb3JkaW5hdG9yOjp0cnlBdXRob3Jp
emUoUmVmPEFQSTo6TmF2aWdhdGlvbkFjdGlvbj4mJiBuYXZpZwogICAgIGF1dG8qIHRhcmdldEZy
YW1lID0gbmF2aWdhdGlvbkFjdGlvbi0+dGFyZ2V0RnJhbWUoKTsKICAgICBib29sIHN1YmZyYW1l
TmF2aWdhdGlvbiA9IHRhcmdldEZyYW1lICYmICF0YXJnZXRGcmFtZS0+aXNNYWluRnJhbWUoKTsK
ICAgICBpZiAoc3ViZnJhbWVOYXZpZ2F0aW9uICYmICghcGFnZS5tYWluRnJhbWUoKSB8fCAhW0FL
QXV0aG9yaXphdGlvbkNvbnRyb2xsZXIgaXNVUkxGcm9tQXBwbGVPd25lZERvbWFpbjpwYWdlLm1h
aW5GcmFtZSgpLT51cmwoKV0pKSB7CisgICAgICAgIEFVVEhPUklaQVRJT05DT09SRElOQVRPUl9S
RUxFQVNFX0xPRygidHJ5QXV0aG9yaXplOiBBdHRlbXB0aW5nIHRvIHBlcmZvcm0gc3ViZnJhbWUg
bmF2aWdhdGlvbiBmb3Igbm9uLUFwcGxlIGF1dGhvcml6YXRpb24gVVJMLiIpOwogICAgICAgICBj
b21wbGV0aW9uSGFuZGxlcihmYWxzZSk7CiAgICAgICAgIHJldHVybjsKICAgICB9CkBAIC04Miw4
ICs4NywxMCBAQCB2b2lkIFNPQXV0aG9yaXphdGlvbkNvb3JkaW5hdG9yOjp0cnlBdXRob3JpemUo
UmVmPEFQSTo6TmF2aWdhdGlvbkFjdGlvbj4mJiBuYXZpZwogCiB2b2lkIFNPQXV0aG9yaXphdGlv
bkNvb3JkaW5hdG9yOjp0cnlBdXRob3JpemUoUmVmPEFQSTo6TmF2aWdhdGlvbkFjdGlvbj4mJiBu
YXZpZ2F0aW9uQWN0aW9uLCBXZWJQYWdlUHJveHkmIHBhZ2UsIE5ld1BhZ2VDYWxsYmFjayYmIG5l
d1BhZ2VDYWxsYmFjaywgVUlDbGllbnRDYWxsYmFjayYmIHVpQ2xpZW50Q2FsbGJhY2spCiB7Cisg
ICAgQVVUSE9SSVpBVElPTkNPT1JESU5BVE9SX1JFTEVBU0VfTE9HKCJ0cnlBdXRob3JpemUgKDIp
Iik7CiAgICAgYm9vbCBzdWJmcmFtZU5hdmlnYXRpb24gPSBuYXZpZ2F0aW9uQWN0aW9uLT5zb3Vy
Y2VGcmFtZSgpICYmICFuYXZpZ2F0aW9uQWN0aW9uLT5zb3VyY2VGcmFtZSgpLT5pc01haW5GcmFt
ZSgpOwogICAgIGlmIChzdWJmcmFtZU5hdmlnYXRpb24gfHwgIW5hdmlnYXRpb25BY3Rpb24tPmlz
UHJvY2Vzc2luZ1VzZXJHZXN0dXJlKCkgfHwgIWNhbkF1dGhvcml6ZShuYXZpZ2F0aW9uQWN0aW9u
LT5yZXF1ZXN0KCkudXJsKCkpKSB7CisgICAgICAgIEFVVEhPUklaQVRJT05DT09SRElOQVRPUl9S
RUxFQVNFX0xPRygidHJ5QXV0aG9yaXplICgyKTogQXR0ZW1wdGluZyB0byBwZXJmb3JtIGludmFs
aWQgYXV0aC4iKTsKICAgICAgICAgdWlDbGllbnRDYWxsYmFjayhXVEZNb3ZlKG5hdmlnYXRpb25B
Y3Rpb24pLCBXVEZNb3ZlKG5ld1BhZ2VDYWxsYmFjaykpOwogICAgICAgICByZXR1cm47CiAgICAg
fQpAQCAtOTQsNCArMTAxLDYgQEAgdm9pZCBTT0F1dGhvcml6YXRpb25Db29yZGluYXRvcjo6dHJ5
QXV0aG9yaXplKFJlZjxBUEk6Ok5hdmlnYXRpb25BY3Rpb24+JiYgbmF2aWcKIAogfSAvLyBuYW1l
c3BhY2UgV2ViS2l0CiAKKyN1bmRlZiBBVVRIT1JJWkFUSU9OQ09PUkRJTkFUT1JfUkVMRUFTRV9M
T0cKKwogI2VuZGlmCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9Db2NvYS9T
T0F1dGhvcml6YXRpb24vU09BdXRob3JpemF0aW9uU2Vzc2lvbi5oIGIvU291cmNlL1dlYktpdC9V
SVByb2Nlc3MvQ29jb2EvU09BdXRob3JpemF0aW9uL1NPQXV0aG9yaXphdGlvblNlc3Npb24uaApp
bmRleCA5OTJiNWYzMzczZWY4MjcwYWNlMDQxOWI4M2JkMGQyNWJhNDQ0ZTNiLi5lOGI2YzcxNzFh
Y2E0ZjgzMDc0OWZjZjA3ZTMwNDAzYjI3MTlkYmExIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0
L1VJUHJvY2Vzcy9Db2NvYS9TT0F1dGhvcml6YXRpb24vU09BdXRob3JpemF0aW9uU2Vzc2lvbi5o
CisrKyBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0NvY29hL1NPQXV0aG9yaXphdGlvbi9TT0F1
dGhvcml6YXRpb25TZXNzaW9uLmgKQEAgLTkyLDYgKzkyLDggQEAgcHJvdGVjdGVkOgogICAgIHZv
aWQgc3RhcnQoKTsKICAgICBXZWJQYWdlUHJveHkqIHBhZ2UoKSBjb25zdCB7IHJldHVybiBtX3Bh
Z2UuZ2V0KCk7IH0KICAgICBTdGF0ZSBzdGF0ZSgpIGNvbnN0IHsgcmV0dXJuIG1fc3RhdGU7IH0K
KyAgICBjb25zdCBjaGFyKiBzdGF0ZVN0cmluZygpIGNvbnN0OworICAgIGNvbnN0IGNoYXIqIGlu
aXRpYXRpbmdBY3Rpb25TdHJpbmcoKSBjb25zdDsKICAgICB2b2lkIHNldFN0YXRlKFN0YXRlIHN0
YXRlKSB7IG1fc3RhdGUgPSBzdGF0ZTsgfQogICAgIGNvbnN0IEFQSTo6TmF2aWdhdGlvbkFjdGlv
biogbmF2aWdhdGlvbkFjdGlvbigpIHsgcmV0dXJuIG1fbmF2aWdhdGlvbkFjdGlvbi5nZXQoKTsg
fQogICAgIFJlZjxBUEk6Ok5hdmlnYXRpb25BY3Rpb24+IHJlbGVhc2VOYXZpZ2F0aW9uQWN0aW9u
KCk7CkBAIC0xMDQsNiArMTA2LDkgQEAgcHJpdmF0ZToKIAogICAgIHZvaWQgYmVjb21lQ29tcGxl
dGVkKCk7CiAgICAgdm9pZCBkaXNtaXNzVmlld0NvbnRyb2xsZXIoKTsKKyNpZiBQTEFURk9STShN
QUMpCisgICAgdm9pZCBkaXNtaXNzTW9kYWxTaGVldElmTmVjZXNzYXJ5KCk7CisjZW5kaWYKICAg
ICB2b2lkIGNvbnRpbnVlU3RhcnRBZnRlckdldEF1dGhvcml6YXRpb25IaW50cyhjb25zdCBTdHJp
bmcmKTsKICAgICB2b2lkIGNvbnRpbnVlU3RhcnRBZnRlckRlY2lkZVBvbGljeShjb25zdCBTT0F1
dGhvcml6YXRpb25Mb2FkUG9saWN5Jik7CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvVUlQ
cm9jZXNzL0NvY29hL1NPQXV0aG9yaXphdGlvbi9TT0F1dGhvcml6YXRpb25TZXNzaW9uLm1tIGIv
U291cmNlL1dlYktpdC9VSVByb2Nlc3MvQ29jb2EvU09BdXRob3JpemF0aW9uL1NPQXV0aG9yaXph
dGlvblNlc3Npb24ubW0KaW5kZXggNzc0MTM0NWExYmQ4YjEwNThhMGY5ZjJkMTNkOTczYTZkMzk3
ODI1OS4uNjU2OTk5NzNmYmVjODk0NGZmZjM5NTRiMWE4MGI3MjY3N2FlZWMxYyAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQ29jb2EvU09BdXRob3JpemF0aW9uL1NPQXV0aG9y
aXphdGlvblNlc3Npb24ubW0KKysrIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQ29jb2EvU09B
dXRob3JpemF0aW9uL1NPQXV0aG9yaXphdGlvblNlc3Npb24ubW0KQEAgLTQ0LDcgKzQ0LDcgQEAK
ICNpbXBvcnQgPHd0Zi9CbG9ja1B0ci5oPgogI2ltcG9ydCA8d3RmL1ZlY3Rvci5oPgogCi0jZGVm
aW5lIEFVVEhPUklaQVRJT05TRVNTSU9OX1JFTEVBU0VfTE9HKGZtdCwgLi4uKSBSRUxFQVNFX0xP
RyhBcHBTU08sICIlcCAtIFtJbml0aWF0aW5nQWN0aW9uPSVzXSBTT0F1dGhvcml6YXRpb25TZXNz
aW9uOjoiIGZtdCwgdGhpcywgdG9TdHJpbmcobV9hY3Rpb24pLCAjI19fVkFfQVJHU19fKQorI2Rl
ZmluZSBBVVRIT1JJWkFUSU9OU0VTU0lPTl9SRUxFQVNFX0xPRyhmbXQsIC4uLikgUkVMRUFTRV9M
T0coQXBwU1NPLCAiJXAgLSBbSW5pdGlhdGluZ0FjdGlvbj0lc11bU3RhdGU9JXNdIFNPQXV0aG9y
aXphdGlvblNlc3Npb246OiIgZm10LCB0aGlzLCB0b1N0cmluZyhtX2FjdGlvbiksIHN0YXRlU3Ry
aW5nKCksICMjX19WQV9BUkdTX18pCiAKIG5hbWVzcGFjZSBXZWJLaXQgewogCkBAIC05NiwxMiAr
OTYsNDMgQEAgU09BdXRob3JpemF0aW9uU2Vzc2lvbjo6U09BdXRob3JpemF0aW9uU2Vzc2lvbihT
T0F1dGhvcml6YXRpb24gKnNvQXV0aG9yaXphdGlvbiwKIAogU09BdXRob3JpemF0aW9uU2Vzc2lv
bjo6flNPQXV0aG9yaXphdGlvblNlc3Npb24oKQogeworICAgIEFVVEhPUklaQVRJT05TRVNTSU9O
X1JFTEVBU0VfTE9HKCJ+U09BdXRob3JpemF0aW9uU2Vzc2lvbjogbV92aWV3Q29udHJvbGxlcj0l
cCwgbV9zaGVldFdpbmRvdz0lcCIsIG1fdmlld0NvbnRyb2xsZXIuZ2V0KCksIG1fc2hlZXRXaW5k
b3cuZ2V0KCkpOwogICAgIGlmIChtX3N0YXRlID09IFN0YXRlOjpBY3RpdmUgJiYgISFtX3NvQXV0
aG9yaXphdGlvbikKICAgICAgICAgW21fc29BdXRob3JpemF0aW9uIGNhbmNlbEF1dGhvcml6YXRp
b25dOwogICAgIGlmIChtX3N0YXRlICE9IFN0YXRlOjpJZGxlICYmIG1fc3RhdGUgIT0gU3RhdGU6
OkNvbXBsZXRlZCkKICAgICAgICAgYmVjb21lQ29tcGxldGVkKCk7CisgICAgZWxzZQorICAgICAg
ICBkaXNtaXNzVmlld0NvbnRyb2xsZXIoKTsKK30KKworY29uc3QgY2hhciogU09BdXRob3JpemF0
aW9uU2Vzc2lvbjo6aW5pdGlhdGluZ0FjdGlvblN0cmluZygpIGNvbnN0Cit7CisgICAgcmV0dXJu
IHRvU3RyaW5nKG1fYWN0aW9uKTsKIH0KIAorY29uc3QgY2hhciogU09BdXRob3JpemF0aW9uU2Vz
c2lvbjo6c3RhdGVTdHJpbmcoKSBjb25zdAoreworICAgIHN0YXRpYyBjb25zdCBjaGFyKiBJZGxl
ID0gIklkbGUiOworICAgIHN0YXRpYyBjb25zdCBjaGFyKiBBY3RpdmUgPSAiQWN0aXZlIjsKKyAg
ICBzdGF0aWMgY29uc3QgY2hhciogV2FpdGluZyA9ICJXYWl0aW5nIjsKKyAgICBzdGF0aWMgY29u
c3QgY2hhciogQ29tcGxldGVkID0gIkNvbXBsZXRlZCI7CisKKyAgICBzd2l0Y2ggKG1fc3RhdGUp
IHsKKyAgICBjYXNlIFN0YXRlOjpJZGxlOgorICAgICAgICByZXR1cm4gSWRsZTsKKyAgICBjYXNl
IFN0YXRlOjpBY3RpdmU6CisgICAgICAgIHJldHVybiBBY3RpdmU7CisgICAgY2FzZSBTdGF0ZTo6
V2FpdGluZzoKKyAgICAgICAgcmV0dXJuIFdhaXRpbmc7CisgICAgY2FzZSBTdGF0ZTo6Q29tcGxl
dGVkOgorICAgICAgICByZXR1cm4gQ29tcGxldGVkOworICAgIH0KKworICAgIEFTU0VSVF9OT1Rf
UkVBQ0hFRCgpOworICAgIHJldHVybiBudWxscHRyOworfQorCisKIFJlZjxBUEk6Ok5hdmlnYXRp
b25BY3Rpb24+IFNPQXV0aG9yaXphdGlvblNlc3Npb246OnJlbGVhc2VOYXZpZ2F0aW9uQWN0aW9u
KCkKIHsKICAgICByZXR1cm4gbV9uYXZpZ2F0aW9uQWN0aW9uLnJlbGVhc2VOb25OdWxsKCk7CkBA
IC0xMDksMTUgKzE0MCwxNyBAQCBSZWY8QVBJOjpOYXZpZ2F0aW9uQWN0aW9uPiBTT0F1dGhvcml6
YXRpb25TZXNzaW9uOjpyZWxlYXNlTmF2aWdhdGlvbkFjdGlvbigpCiAKIHZvaWQgU09BdXRob3Jp
emF0aW9uU2Vzc2lvbjo6YmVjb21lQ29tcGxldGVkKCkKIHsKKyAgICBBVVRIT1JJWkFUSU9OU0VT
U0lPTl9SRUxFQVNFX0xPRygiYmVjb21lQ29tcGxldGVkOiBtX3ZpZXdDb250cm9sbGVyPSVwIiwg
bV92aWV3Q29udHJvbGxlci5nZXQoKSk7CisKICAgICBBU1NFUlQobV9zdGF0ZSA9PSBTdGF0ZTo6
QWN0aXZlIHx8IG1fc3RhdGUgPT0gU3RhdGU6OldhaXRpbmcpOwogICAgIG1fc3RhdGUgPSBTdGF0
ZTo6Q29tcGxldGVkOwotICAgIGlmIChtX3ZpZXdDb250cm9sbGVyKQotICAgICAgICBkaXNtaXNz
Vmlld0NvbnRyb2xsZXIoKTsKKyAgICBkaXNtaXNzVmlld0NvbnRyb2xsZXIoKTsKKyAgICBBU1NF
UlQoIW1fc2hlZXRXaW5kb3cpOwogfQogCiB2b2lkIFNPQXV0aG9yaXphdGlvblNlc3Npb246OnNo
b3VsZFN0YXJ0KCkKIHsKLSAgICBBVVRIT1JJWkFUSU9OU0VTU0lPTl9SRUxFQVNFX0xPRygic2hv
dWxkU3RhcnQ6Iik7CisgICAgQVVUSE9SSVpBVElPTlNFU1NJT05fUkVMRUFTRV9MT0coInNob3Vs
ZFN0YXJ0OiBtX3BhZ2U9JXAiLCBtX3BhZ2UuZ2V0KCkpOwogCiAgICAgQVNTRVJUKG1fc3RhdGUg
PT0gU3RhdGU6OklkbGUpOwogICAgIGlmICghbV9wYWdlKQpAQCAtMTI3LDE1ICsxNjAsMjUgQEAg
dm9pZCBTT0F1dGhvcml6YXRpb25TZXNzaW9uOjpzaG91bGRTdGFydCgpCiAKIHZvaWQgU09BdXRo
b3JpemF0aW9uU2Vzc2lvbjo6c3RhcnQoKQogewotICAgIEFVVEhPUklaQVRJT05TRVNTSU9OX1JF
TEVBU0VfTE9HKCJzdGFydDoiKTsKKyAgICBBVVRIT1JJWkFUSU9OU0VTU0lPTl9SRUxFQVNFX0xP
Rygic3RhcnQ6IG5hdmlnYXRpb25BY3Rpb249JXAiLCBuYXZpZ2F0aW9uQWN0aW9uKCkpOwogCiAg
ICAgQVNTRVJUKChtX3N0YXRlID09IFN0YXRlOjpJZGxlIHx8IG1fc3RhdGUgPT0gU3RhdGU6Oldh
aXRpbmcpICYmIG1fbmF2aWdhdGlvbkFjdGlvbik7CiAgICAgbV9zdGF0ZSA9IFN0YXRlOjpBY3Rp
dmU7CisgICAgQVVUSE9SSVpBVElPTlNFU1NJT05fUkVMRUFTRV9MT0coInN0YXJ0OiBNb3Zpbmcg
bV9zdGF0ZSB0byBBY3RpdmUuIik7CiAgICAgW21fc29BdXRob3JpemF0aW9uIGdldEF1dGhvcml6
YXRpb25IaW50c1dpdGhVUkw6bV9uYXZpZ2F0aW9uQWN0aW9uLT5yZXF1ZXN0KCkudXJsKCkgcmVz
cG9uc2VDb2RlOjAgY29tcGxldGlvbjptYWtlQmxvY2tQdHIoW3RoaXMsIHdlYWtUaGlzID0gbWFr
ZVdlYWtQdHIoKnRoaXMpXSAoU09BdXRob3JpemF0aW9uSGludHMgKmF1dGhvcml6YXRpb25IaW50
cywgTlNFcnJvciAqZXJyb3IpIHsKICAgICAgICAgQVVUSE9SSVpBVElPTlNFU1NJT05fUkVMRUFT
RV9MT0coInN0YXJ0OiBSZWNlaXZlIFNPQXV0aG9yaXphdGlvbkhpbnRzIChlcnJvcj0lbGQpIiwg
ZXJyb3IgPyBlcnJvci5jb2RlIDogMCk7CiAKLSAgICAgICAgaWYgKCF3ZWFrVGhpcyB8fCBlcnJv
ciB8fCAhYXV0aG9yaXphdGlvbkhpbnRzKQorICAgICAgICBpZiAoIXdlYWtUaGlzKSB7CisgICAg
ICAgICAgICBXVEZMb2dBbHdheXMoIlNPQXV0aG9yaXphdGlvblNlc3Npb246OnN0YXJ0IChnZXRB
dXRob3JpemF0aW9uSGludHNXaXRoVVJMIGNvbXBsZXRpb24gaGFuZGxlcik6IFJldHVybmluZyBl
YXJseSBiZWNhdXNlIHdlYWtUaGlzIGlzIG5vdyBudWxsLiIpOwogICAgICAgICAgICAgcmV0dXJu
OworICAgICAgICB9CisKKyAgICAgICAgaWYgKGVycm9yIHx8ICFhdXRob3JpemF0aW9uSGludHMp
IHsKKyAgICAgICAgICAgIEFVVEhPUklaQVRJT05TRVNTSU9OX1JFTEVBU0VfTE9HKCJzdGFydCAo
Z2V0QXV0aG9yaXphdGlvbkhpbnRzV2l0aFVSTCBjb21wbGV0aW9uIGhhbmRsZXIpOiBSZXR1cm5p
bmcgZWFybHkgZHVlIHRvIGVycm9yIG9yIGxhY2sgb2YgaGludHMuIik7CisgICAgICAgICAgICBy
ZXR1cm47CisgICAgICAgIH0KKworICAgICAgICBBVVRIT1JJWkFUSU9OU0VTU0lPTl9SRUxFQVNF
X0xPRygic3RhcnQgKGdldEF1dGhvcml6YXRpb25IaW50c1dpdGhVUkwgY29tcGxldGlvbiBoYW5k
bGVyKTogUmVjZWl2ZSBTT0F1dGhvcml6YXRpb25IaW50cy4iKTsKICAgICAgICAgY29udGludWVT
dGFydEFmdGVyR2V0QXV0aG9yaXphdGlvbkhpbnRzKGF1dGhvcml6YXRpb25IaW50cy5sb2NhbGl6
ZWRFeHRlbnNpb25CdW5kbGVEaXNwbGF5TmFtZSk7CiAgICAgfSkuZ2V0KCldOwogfQpAQCAtMTQ1
LDkgKzE4OCwxMiBAQCB2b2lkIFNPQXV0aG9yaXphdGlvblNlc3Npb246OmNvbnRpbnVlU3RhcnRB
ZnRlckdldEF1dGhvcml6YXRpb25IaW50cyhjb25zdCBTdHJpbgogICAgIEFVVEhPUklaQVRJT05T
RVNTSU9OX1JFTEVBU0VfTE9HKCJjb250aW51ZVN0YXJ0QWZ0ZXJHZXRBdXRob3JpemF0aW9uSGlu
dHM6IChoaW50cz0lcykiLCBoaW50cy51dGY4KCkuZGF0YSgpKTsKIAogICAgIEFTU0VSVChtX3N0
YXRlID09IFN0YXRlOjpBY3RpdmUpOwotICAgIGlmICghbV9wYWdlKQorICAgIGlmICghbV9wYWdl
KSB7CisgICAgICAgIEFVVEhPUklaQVRJT05TRVNTSU9OX1JFTEVBU0VfTE9HKCJjb250aW51ZVN0
YXJ0QWZ0ZXJHZXRBdXRob3JpemF0aW9uSGludHM6IEVhcmx5IHJldHVybiBkdWUgdG8gbnVsbCBt
X3BhZ2UiKTsKICAgICAgICAgcmV0dXJuOworICAgIH0KIAorICAgIEFVVEhPUklaQVRJT05TRVNT
SU9OX1JFTEVBU0VfTE9HKCJjb250aW51ZVN0YXJ0QWZ0ZXJHZXRBdXRob3JpemF0aW9uSGludHM6
IENoZWNraW5nIHBhZ2UgZm9yIHBvbGljeSBjaG9pY2UuIik7CiAgICAgbV9wYWdlLT5kZWNpZGVQ
b2xpY3lGb3JTT0F1dGhvcml6YXRpb25Mb2FkKGhpbnRzLCBbdGhpcywgd2Vha1RoaXMgPSBtYWtl
V2Vha1B0cigqdGhpcyldIChTT0F1dGhvcml6YXRpb25Mb2FkUG9saWN5IHBvbGljeSkgewogICAg
ICAgICBpZiAoIXdlYWtUaGlzKQogICAgICAgICAgICAgcmV0dXJuOwpAQCAtMTU4LDE2ICsyMDQs
MTcgQEAgdm9pZCBTT0F1dGhvcml6YXRpb25TZXNzaW9uOjpjb250aW51ZVN0YXJ0QWZ0ZXJHZXRB
dXRob3JpemF0aW9uSGludHMoY29uc3QgU3RyaW4KIHZvaWQgU09BdXRob3JpemF0aW9uU2Vzc2lv
bjo6Y29udGludWVTdGFydEFmdGVyRGVjaWRlUG9saWN5KGNvbnN0IFNPQXV0aG9yaXphdGlvbkxv
YWRQb2xpY3kmIHBvbGljeSkKIHsKICAgICBpZiAocG9saWN5ID09IFNPQXV0aG9yaXphdGlvbkxv
YWRQb2xpY3k6Oklnbm9yZSkgewotICAgICAgICBBVVRIT1JJWkFUSU9OU0VTU0lPTl9SRUxFQVNF
X0xPRygiY29udGludWVTdGFydEFmdGVyRGVjaWRlUG9saWN5OiBSZWNlaXZlIFNPQXV0aG9yaXph
dGlvbkxvYWRQb2xpY3k6Oklnbm9yZSIpOwotCisgICAgICAgIEFVVEhPUklaQVRJT05TRVNTSU9O
X1JFTEVBU0VfTE9HKCJjb250aW51ZVN0YXJ0QWZ0ZXJEZWNpZGVQb2xpY3k6IFJlY2VpdmUgU09B
dXRob3JpemF0aW9uTG9hZFBvbGljeTo6SWdub3JlLiBGYWxsaW5nIGJhY2sgdG8gd2ViIHBhdGgu
Iik7CiAgICAgICAgIGZhbGxCYWNrVG9XZWJQYXRoKCk7CiAgICAgICAgIHJldHVybjsKICAgICB9
CiAKICAgICBBVVRIT1JJWkFUSU9OU0VTU0lPTl9SRUxFQVNFX0xPRygiY29udGludWVTdGFydEFm
dGVyRGVjaWRlUG9saWN5OiBSZWNlaXZlIFNPQXV0aG9yaXphdGlvbkxvYWRQb2xpY3k6OkFsbG93
Iik7CiAKLSAgICBpZiAoIW1fc29BdXRob3JpemF0aW9uIHx8ICFtX3BhZ2UgfHwgIW1fbmF2aWdh
dGlvbkFjdGlvbikKKyAgICBpZiAoIW1fc29BdXRob3JpemF0aW9uIHx8ICFtX3BhZ2UgfHwgIW1f
bmF2aWdhdGlvbkFjdGlvbikgeworICAgICAgICBBVVRIT1JJWkFUSU9OU0VTU0lPTl9SRUxFQVNF
X0xPRygiY29udGludWVTdGFydEFmdGVyR2V0QXV0aG9yaXphdGlvbkhpbnRzOiBFYXJseSByZXR1
cm4gbV9zb0F1dGhvcml6YXRpb249JWQsIG1fcGFnZT0lZCwgbV9uYXZpZ2F0aW9uPSVkLiIsICEh
bV9zb0F1dGhvcml6YXRpb24sICEhbV9wYWdlLCAhIW1fbmF2aWdhdGlvbkFjdGlvbik7CiAgICAg
ICAgIHJldHVybjsKKyAgICB9CiAKICAgICBhdXRvIGluaXRpYXRvck9yaWdpbiA9IGVtcHR5U3Ry
aW5nKCk7CiAgICAgaWYgKG1fbmF2aWdhdGlvbkFjdGlvbi0+c291cmNlRnJhbWUoKSkKQEAgLTE4
NywzOCArMjM0LDUzIEBAIHZvaWQgU09BdXRob3JpemF0aW9uU2Vzc2lvbjo6Y29udGludWVTdGFy
dEFmdGVyRGVjaWRlUG9saWN5KGNvbnN0IFNPQXV0aG9yaXphdGlvCiAjZW5kaWYKIAogICAgIGF1
dG8gKm5zUmVxdWVzdCA9IG1fbmF2aWdhdGlvbkFjdGlvbi0+cmVxdWVzdCgpLm5zVVJMUmVxdWVz
dChXZWJDb3JlOjpIVFRQQm9keVVwZGF0ZVBvbGljeTo6VXBkYXRlSFRUUEJvZHkpOworICAgIEFV
VEhPUklaQVRJT05TRVNTSU9OX1JFTEVBU0VfTE9HKCJjb250aW51ZVN0YXJ0QWZ0ZXJHZXRBdXRo
b3JpemF0aW9uSGludHM6IEJlZ2lubmluZyBhdXRob3JpemF0aW9uIHdpdGggQXBwU1NPLiIpOwog
ICAgIFttX3NvQXV0aG9yaXphdGlvbiBiZWdpbkF1dGhvcml6YXRpb25XaXRoVVJMOm5zUmVxdWVz
dC5VUkwgaHR0cEhlYWRlcnM6bnNSZXF1ZXN0LmFsbEhUVFBIZWFkZXJGaWVsZHMgaHR0cEJvZHk6
bnNSZXF1ZXN0LkhUVFBCb2R5XTsKIH0KIAogdm9pZCBTT0F1dGhvcml6YXRpb25TZXNzaW9uOjpm
YWxsQmFja1RvV2ViUGF0aCgpCiB7Ci0gICAgQVVUSE9SSVpBVElPTlNFU1NJT05fUkVMRUFTRV9M
T0coImZhbGxCYWNrVG9XZWJQYXRoOiIpOworICAgIEFVVEhPUklaQVRJT05TRVNTSU9OX1JFTEVB
U0VfTE9HKCJmYWxsQmFja1RvV2ViUGF0aCIpOwogCi0gICAgaWYgKG1fc3RhdGUgIT0gU3RhdGU6
OkFjdGl2ZSkKKyAgICBpZiAobV9zdGF0ZSAhPSBTdGF0ZTo6QWN0aXZlKSB7CisgICAgICAgIEFV
VEhPUklaQVRJT05TRVNTSU9OX1JFTEVBU0VfTE9HKCJmYWxsQmFja1RvV2ViUGF0aDogUmV0dXJu
aW5nIGVhcmx5IHNpbmNlIG5vdCBhY3RpdmUuIik7CisgICAgICAgIGRpc21pc3NWaWV3Q29udHJv
bGxlcigpOwogICAgICAgICByZXR1cm47CisgICAgfQorCiAgICAgYmVjb21lQ29tcGxldGVkKCk7
CiAgICAgZmFsbEJhY2tUb1dlYlBhdGhJbnRlcm5hbCgpOwogfQogCiB2b2lkIFNPQXV0aG9yaXph
dGlvblNlc3Npb246OmFib3J0KCkKIHsKLSAgICBBVVRIT1JJWkFUSU9OU0VTU0lPTl9SRUxFQVNF
X0xPRygiYWJvcnQ6Iik7CisgICAgQVVUSE9SSVpBVElPTlNFU1NJT05fUkVMRUFTRV9MT0coImFi
b3J0OiBtX3ZpZXdDb250cm9sbGVyPSVwLCBtX3NoZWV0V2luZG93PSVwIiwgbV92aWV3Q29udHJv
bGxlci5nZXQoKSwgbV9zaGVldFdpbmRvdy5nZXQoKSk7CiAKLSAgICBpZiAobV9zdGF0ZSA9PSBT
dGF0ZTo6SWRsZSB8fCBtX3N0YXRlID09IFN0YXRlOjpDb21wbGV0ZWQpCisgICAgaWYgKG1fc3Rh
dGUgPT0gU3RhdGU6OklkbGUgfHwgbV9zdGF0ZSA9PSBTdGF0ZTo6Q29tcGxldGVkKSB7CisgICAg
ICAgIEFVVEhPUklaQVRJT05TRVNTSU9OX1JFTEVBU0VfTE9HKCJhYm9ydDogUmV0dXJuaW5nIGVh
cmx5IHNpbmNlIGlkbGUgb3IgYWxyZWFkeSBjb21wbGV0ZWQuIik7CisgICAgICAgIGRpc21pc3NW
aWV3Q29udHJvbGxlcigpOwogICAgICAgICByZXR1cm47CisgICAgfQorCiAgICAgYmVjb21lQ29t
cGxldGVkKCk7CiAgICAgYWJvcnRJbnRlcm5hbCgpOwogfQogCiB2b2lkIFNPQXV0aG9yaXphdGlv
blNlc3Npb246OmNvbXBsZXRlKE5TSFRUUFVSTFJlc3BvbnNlICpodHRwUmVzcG9uc2UsIE5TRGF0
YSAqZGF0YSkKIHsKLSAgICBpZiAobV9zdGF0ZSAhPSBTdGF0ZTo6QWN0aXZlKQorICAgIEFVVEhP
UklaQVRJT05TRVNTSU9OX1JFTEVBU0VfTE9HKCJjb21wbGV0ZTogaHR0cFN0YXRlPSVkLCBtX3Zp
ZXdDb250cm9sbGVyPSVwLCBtX3NoZWV0V2luZG93PSVwIiwgc3RhdGljX2Nhc3Q8aW50PihodHRw
UmVzcG9uc2Uuc3RhdHVzQ29kZSksIG1fdmlld0NvbnRyb2xsZXIuZ2V0KCksIG1fc2hlZXRXaW5k
b3cuZ2V0KCkpOworICAgIGlmIChtX3N0YXRlICE9IFN0YXRlOjpBY3RpdmUpIHsKKyAgICAgICAg
QVVUSE9SSVpBVElPTlNFU1NJT05fUkVMRUFTRV9MT0coImNvbXBsZXRlOiBSZXR1cm5pbmcgZWFy
bHkgc2luY2Ugbm90IGFjdGl2ZS4iKTsKKyAgICAgICAgZGlzbWlzc1ZpZXdDb250cm9sbGVyKCk7
CiAgICAgICAgIHJldHVybjsKKyAgICB9CisKICAgICBBU1NFUlQobV9uYXZpZ2F0aW9uQWN0aW9u
KTsKICAgICBiZWNvbWVDb21wbGV0ZWQoKTsKIAogICAgIGF1dG8gcmVzcG9uc2UgPSBXZWJDb3Jl
OjpSZXNvdXJjZVJlc3BvbnNlKGh0dHBSZXNwb25zZSk7CiAgICAgaWYgKCFpc1NhbWVPcmlnaW4o
bV9uYXZpZ2F0aW9uQWN0aW9uLT5yZXF1ZXN0KCksIHJlc3BvbnNlKSkgeworICAgICAgICBBVVRI
T1JJWkFUSU9OU0VTU0lPTl9SRUxFQVNFX0xPRygiY29tcGxldGU6ICBPcmlnaW5zIGRvbid0IG1h
dGNoLiBGYWxsaW5nIGJhY2sgdG8gd2ViIHBhdGguIik7CiAgICAgICAgIGZhbGxCYWNrVG9XZWJQ
YXRoSW50ZXJuYWwoKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KQEAgLTIyOSwxMiArMjkxLDE2
IEBAIHZvaWQgU09BdXRob3JpemF0aW9uU2Vzc2lvbjo6Y29tcGxldGUoTlNIVFRQVVJMUmVzcG9u
c2UgKmh0dHBSZXNwb25zZSwgTlNEYXRhICpkCiAgICAgQVVUSE9SSVpBVElPTlNFU1NJT05fUkVM
RUFTRV9MT0coImNvbXBsZXRlOiAoaHR0cFN0YXR1c0NvZGU9JWQsIGhhc0Nvb2tpZXM9JWQsIGhh
c0RhdGE9JWQpIiwgcmVzcG9uc2UuaHR0cFN0YXR1c0NvZGUoKSwgIWNvb2tpZXMuaXNFbXB0eSgp
LCAhIWRhdGEubGVuZ3RoKTsKIAogICAgIGlmIChjb29raWVzLmlzRW1wdHkoKSkgeworICAgICAg
ICBBVVRIT1JJWkFUSU9OU0VTU0lPTl9SRUxFQVNFX0xPRygiY29tcGxldGU6ICBObyBjb29raWVz
IHRvIHNldC4gQ29tcGxldGluZyAoaW50ZXJuYWwpLiIpOwogICAgICAgICBjb21wbGV0ZUludGVy
bmFsKHJlc3BvbnNlLCBkYXRhKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KIAotICAgIGlmICgh
bV9wYWdlKQorICAgIGlmICghbV9wYWdlKSB7CisgICAgICAgIEFVVEhPUklaQVRJT05TRVNTSU9O
X1JFTEVBU0VfTE9HKCJjb21wbGV0ZTogIFJldHVybmluZyBlYXJseSBiZWNhdXNlIG1fcGFnZSBp
cyBudWxsLiIpOwogICAgICAgICByZXR1cm47CisgICAgfQorCiAgICAgbV9wYWdlLT53ZWJzaXRl
RGF0YVN0b3JlKCkuY29va2llU3RvcmUoKS5zZXRDb29raWVzKFdURk1vdmUoY29va2llcyksIFt0
aGlzLCB3ZWFrVGhpcyA9IG1ha2VXZWFrUHRyKCp0aGlzKSwgcmVzcG9uc2UgPSBXVEZNb3ZlKHJl
c3BvbnNlKSwgZGF0YSA9IGFkb3B0TlMoW1tOU0RhdGEgYWxsb2NdIGluaXRXaXRoRGF0YTpkYXRh
XSldICgpIG11dGFibGUgewogICAgICAgICBpZiAoIXdlYWtUaGlzKQogICAgICAgICAgICAgcmV0
dXJuOwpAQCAtMjQ3LDExICszMTMsMTIgQEAgdm9pZCBTT0F1dGhvcml6YXRpb25TZXNzaW9uOjpj
b21wbGV0ZShOU0hUVFBVUkxSZXNwb25zZSAqaHR0cFJlc3BvbnNlLCBOU0RhdGEgKmQKIAogdm9p
ZCBTT0F1dGhvcml6YXRpb25TZXNzaW9uOjpwcmVzZW50Vmlld0NvbnRyb2xsZXIoU09BdXRob3Jp
emF0aW9uVmlld0NvbnRyb2xsZXIgdmlld0NvbnRyb2xsZXIsIFVJQ2FsbGJhY2sgdWlDYWxsYmFj
aykKIHsKLSAgICBBVVRIT1JJWkFUSU9OU0VTU0lPTl9SRUxFQVNFX0xPRygicHJlc2VudFZpZXdD
b250cm9sbGVyOiIpOworICAgIEFVVEhPUklaQVRJT05TRVNTSU9OX1JFTEVBU0VfTE9HKCJwcmVz
ZW50Vmlld0NvbnRyb2xsZXI6IG1fdmlld0NvbnRyb2xsZXI9JXAsIG1fc2hlZXRXaW5kb3c9JXAi
LCBtX3ZpZXdDb250cm9sbGVyLmdldCgpLCBtX3NoZWV0V2luZG93LmdldCgpKTsKIAogICAgIEFT
U0VSVChtX3N0YXRlID09IFN0YXRlOjpBY3RpdmUpOwogICAgIC8vIE9ubHkgZXhwZWN0IGF0IG1v
c3Qgb25lIFVJIHNlc3Npb24gZm9yIHRoZSB3aG9sZSBhdXRob3JpemF0aW9uIHNlc3Npb24uCiAg
ICAgaWYgKCFtX3BhZ2UgfHwgbV9wYWdlLT5pc0Nsb3NlZCgpIHx8IG1fdmlld0NvbnRyb2xsZXIp
IHsKKyAgICAgICAgQVVUSE9SSVpBVElPTlNFU1NJT05fUkVMRUFTRV9MT0coInByZXNlbnRWaWV3
Q29udHJvbGxlcjogbV9wYWdlPSVkLCBtX3BhZ2UtPmlzQ2xvc2VkPSVkLCBtX3ZpZXdDb250cm9s
bGVyPSVkIiwgISFtX3BhZ2UsIG1fcGFnZSA/IG1fcGFnZS0+aXNDbG9zZWQoKSA6IDAsICEhbV92
aWV3Q29udHJvbGxlcik7CiAgICAgICAgIHVpQ2FsbGJhY2soTk8sIGFkb3B0TlMoW1tOU0Vycm9y
IGFsbG9jXSBpbml0V2l0aERvbWFpbjpTT0Vycm9yRG9tYWluIGNvZGU6a1NPRXJyb3JBdXRob3Jp
emF0aW9uUHJlc2VudGF0aW9uRmFpbGVkIHVzZXJJbmZvOm5pbF0pLmdldCgpKTsKICAgICAgICAg
cmV0dXJuOwogICAgIH0KQEAgLTI1OSwxOCArMzI2LDIzIEBAIHZvaWQgU09BdXRob3JpemF0aW9u
U2Vzc2lvbjo6cHJlc2VudFZpZXdDb250cm9sbGVyKFNPQXV0aG9yaXphdGlvblZpZXdDb250cm9s
bGVyCiAgICAgbV92aWV3Q29udHJvbGxlciA9IHZpZXdDb250cm9sbGVyOwogI2lmIFBMQVRGT1JN
KE1BQykKICAgICBBU1NFUlQoIW1fc2hlZXRXaW5kb3cpOworICAgIEFTU0VSVCghbV9zaGVldFdp
bmRvd1dpbGxDbG9zZU9ic2VydmVyKTsKKworICAgIGRpc21pc3NNb2RhbFNoZWV0SWZOZWNlc3Nh
cnkoKTsKKwogICAgIG1fc2hlZXRXaW5kb3cgPSBbTlNXaW5kb3cgd2luZG93V2l0aENvbnRlbnRW
aWV3Q29udHJvbGxlcjptX3ZpZXdDb250cm9sbGVyLmdldCgpXTsKIAotICAgIEFTU0VSVCghbV9z
aGVldFdpbmRvd1dpbGxDbG9zZU9ic2VydmVyKTsKICAgICBtX3NoZWV0V2luZG93V2lsbENsb3Nl
T2JzZXJ2ZXIgPSBbW05TTm90aWZpY2F0aW9uQ2VudGVyIGRlZmF1bHRDZW50ZXJdIGFkZE9ic2Vy
dmVyRm9yTmFtZTpOU1dpbmRvd1dpbGxDbG9zZU5vdGlmaWNhdGlvbiBvYmplY3Q6bV9zaGVldFdp
bmRvdy5nZXQoKSBxdWV1ZTpuaWwgdXNpbmdCbG9jazpbd2Vha1RoaXMgPSBtYWtlV2Vha1B0cigq
dGhpcyldIChOU05vdGlmaWNhdGlvbiAqKSB7CiAgICAgICAgIGlmICghd2Vha1RoaXMpCiAgICAg
ICAgICAgICByZXR1cm47CiAgICAgICAgIFJFTEVBU0VfTE9HKEFwcFNTTywgInByZXNlbnRWaWV3
Q29udHJvbGxlcjogUmVjZWl2ZWQgTlNXaW5kb3dXaWxsQ2xvc2VOb3RpZmljYXRpb24uIERpc21p
c3NpbmcgdGhlIHZpZXcgY29udHJvbGxlci4iKTsKICAgICAgICAgd2Vha1RoaXMtPmRpc21pc3NW
aWV3Q29udHJvbGxlcigpOwogICAgIH1dOworICAgIEFVVEhPUklaQVRJT05TRVNTSU9OX1JFTEVB
U0VfTE9HKCJwcmVzZW50Vmlld0NvbnRyb2xsZXI6IEFkZGVkIG1fc2hlZXRXaW5kb3dXaWxsQ2xv
c2VPYnNlcnZlciAoJXApIiwgbV9zaGVldFdpbmRvd1dpbGxDbG9zZU9ic2VydmVyLmdldCgpKTsK
IAogICAgIE5TV2luZG93ICpwcmVzZW50aW5nV2luZG93ID0gbV9wYWdlLT5wbGF0Zm9ybVdpbmRv
dygpOwogICAgIGlmICghcHJlc2VudGluZ1dpbmRvdykgeworICAgICAgICBBVVRIT1JJWkFUSU9O
U0VTU0lPTl9SRUxFQVNFX0xPRygicHJlc2VudFZpZXdDb250cm9sbGVyOiBObyBwcmVzZW50aW5n
IHdpbmRvdy4gUmV0dXJuaW5nIGVhcmx5LiIpOwogICAgICAgICB1aUNhbGxiYWNrKE5PLCBhZG9w
dE5TKFtbTlNFcnJvciBhbGxvY10gaW5pdFdpdGhEb21haW46U09FcnJvckRvbWFpbiBjb2RlOmtT
T0Vycm9yQXV0aG9yaXphdGlvblByZXNlbnRhdGlvbkZhaWxlZCB1c2VySW5mbzpuaWxdKS5nZXQo
KSk7CiAgICAgICAgIHJldHVybjsKICAgICB9CkBAIC0yOTAsMTMgKzM2MiwzOSBAQCB2b2lkIFNP
QXV0aG9yaXphdGlvblNlc3Npb246OnByZXNlbnRWaWV3Q29udHJvbGxlcihTT0F1dGhvcml6YXRp
b25WaWV3Q29udHJvbGxlcgogICAgIHVpQ2FsbGJhY2soWUVTLCBuaWwpOwogfQogCisjaWYgUExB
VEZPUk0oTUFDKQordm9pZCBTT0F1dGhvcml6YXRpb25TZXNzaW9uOjpkaXNtaXNzTW9kYWxTaGVl
dElmTmVjZXNzYXJ5KCkKK3sKKyAgICBpZiAoYXV0byAqcHJlc2VudGluZ1dpbmRvdyA9IG1fc2hl
ZXRXaW5kb3cuZ2V0KCkuc2hlZXRQYXJlbnQpIHsKKyAgICAgICAgQVVUSE9SSVpBVElPTlNFU1NJ
T05fUkVMRUFTRV9MT0coImRpc21pc3NNb2RhbFNoZWV0SWZOZWNlc3Nhcnk6IENhbGxpbmcgZW5k
U2hlZXQgb24gJXAgZm9yIHNoZWV0ICVwLiIsIHByZXNlbnRpbmdXaW5kb3csIG1fc2hlZXRXaW5k
b3cuZ2V0KCkpOworICAgICAgICBbcHJlc2VudGluZ1dpbmRvdyBlbmRTaGVldDptX3NoZWV0V2lu
ZG93LmdldCgpXTsKKyAgICB9CisgICAgbV9zaGVldFdpbmRvdyA9IG51bGxwdHI7CisKKyAgICBp
ZiAobV9zaGVldFdpbmRvd1dpbGxDbG9zZU9ic2VydmVyLmdldCgpKSB7CisgICAgICAgIEFVVEhP
UklaQVRJT05TRVNTSU9OX1JFTEVBU0VfTE9HKCJkaXNtaXNzTW9kYWxTaGVldElmTmVjZXNzYXJ5
OiBSZW1vdmluZyBtX3NoZWV0V2luZG93V2lsbENsb3NlT2JzZXJ2ZXIgKCVwKSIsIG1fc2hlZXRX
aW5kb3dXaWxsQ2xvc2VPYnNlcnZlci5nZXQoKSk7CisgICAgICAgIFtbTlNOb3RpZmljYXRpb25D
ZW50ZXIgZGVmYXVsdENlbnRlcl0gcmVtb3ZlT2JzZXJ2ZXI6bV9zaGVldFdpbmRvd1dpbGxDbG9z
ZU9ic2VydmVyLmdldCgpXTsKKyAgICB9CisgICAgbV9zaGVldFdpbmRvd1dpbGxDbG9zZU9ic2Vy
dmVyID0gbnVsbHB0cjsKK30KKyNlbmRpZgorCiB2b2lkIFNPQXV0aG9yaXphdGlvblNlc3Npb246
OmRpc21pc3NWaWV3Q29udHJvbGxlcigpCiB7Ci0gICAgQVVUSE9SSVpBVElPTlNFU1NJT05fUkVM
RUFTRV9MT0coImRpc21pc3NWaWV3Q29udHJvbGxlcjoiKTsKKyAgICBBVVRIT1JJWkFUSU9OU0VT
U0lPTl9SRUxFQVNFX0xPRygiZGlzbWlzc1ZpZXdDb250cm9sbGVyOiBtX3ZpZXdDb250cm9sbGVy
PSVwIiwgbV92aWV3Q29udHJvbGxlci5nZXQoKSk7CisgICAgaWYgKCFtX3ZpZXdDb250cm9sbGVy
KSB7CisgICAgICAgIEFVVEhPUklaQVRJT05TRVNTSU9OX1JFTEVBU0VfTE9HKCJkaXNtaXNzVmll
d0NvbnRyb2xsZXI6IE5vIHZpZXcgY29udHJvbGxlciwgc28gcmV0dXJuaW5nIGVhcmx5LiIpOwor
ICAgICAgICByZXR1cm47CisgICAgfQogCi0gICAgQVNTRVJUKG1fdmlld0NvbnRyb2xsZXIpOwog
I2lmIFBMQVRGT1JNKE1BQykKLSAgICBBU1NFUlQobV9zaGVldFdpbmRvdyAmJiBtX3NoZWV0V2lu
ZG93V2lsbENsb3NlT2JzZXJ2ZXIpOworICAgIGlmICghbV9zaGVldFdpbmRvdykgeworICAgICAg
ICBBU1NFUlQoIW1fc2hlZXRXaW5kb3dXaWxsQ2xvc2VPYnNlcnZlcik7CisgICAgICAgIEFVVEhP
UklaQVRJT05TRVNTSU9OX1JFTEVBU0VfTE9HKCJkaXNtaXNzVmlld0NvbnRyb2xsZXI6IE5vIHZp
ZXcgY29udHJvbGxlciBvciBzaGVldCB3aW5kb3csIHNvIHJldHVybmluZyBlYXJseS4iKTsKKyAg
ICAgICAgcmV0dXJuOworICAgIH0KKworICAgIEFTU0VSVChtX3NoZWV0V2luZG93V2lsbENsb3Nl
T2JzZXJ2ZXIpOwogCiAgICAgLy8gVGhpcyBpcyBhIHdvcmthcm91bmQgZm9yIGFuIEFwcEtpdCBp
c3N1ZTogPHJkYXI6Ly9wcm9ibGVtLzU5MTI1MzI5Pi4KICAgICAvLyBbbV9zaGVldFdpbmRvdyBz
aGVldFBhcmVudF0gaXMgbnVsbCBpZiB0aGUgcGFyZW50IGlzIG1pbmltaXplZCBvciB0aGUgaG9z
dCBhcHAgaXMgaGlkZGVuLgpAQCAtMzMzLDEzICs0MzEsNyBAQCB2b2lkIFNPQXV0aG9yaXphdGlv
blNlc3Npb246OmRpc21pc3NWaWV3Q29udHJvbGxlcigpCiAgICAgICAgIHJldHVybjsKICAgICB9
CiAKLSAgICBbW05TTm90aWZpY2F0aW9uQ2VudGVyIGRlZmF1bHRDZW50ZXJdIHJlbW92ZU9ic2Vy
dmVyOm1fc2hlZXRXaW5kb3dXaWxsQ2xvc2VPYnNlcnZlci5nZXQoKV07Ci0gICAgbV9zaGVldFdp
bmRvd1dpbGxDbG9zZU9ic2VydmVyID0gbnVsbHB0cjsKLQotICAgIGF1dG8gKnByZXNlbnRpbmdX
aW5kb3cgPSBtX3NoZWV0V2luZG93LmdldCgpLnNoZWV0UGFyZW50OwotICAgIEFVVEhPUklaQVRJ
T05TRVNTSU9OX1JFTEVBU0VfTE9HKCJkaXNtaXNzVmlld0NvbnRyb2xsZXI6IENhbGxpbmcgZW5k
U2hlZXQgb24gJXAgZm9yIHNoZWV0ICVwLiIsIHByZXNlbnRpbmdXaW5kb3csIG1fc2hlZXRXaW5k
b3cuZ2V0KCkpOwotICAgIFtwcmVzZW50aW5nV2luZG93IGVuZFNoZWV0Om1fc2hlZXRXaW5kb3cu
Z2V0KCldOwotICAgIG1fc2hlZXRXaW5kb3cgPSBudWxscHRyOworICAgIGRpc21pc3NNb2RhbFNo
ZWV0SWZOZWNlc3NhcnkoKTsKICAgICBBVVRIT1JJWkFUSU9OU0VTU0lPTl9SRUxFQVNFX0xPRygi
ZGlzbWlzc1ZpZXdDb250cm9sbGVyOiBGaW5pc2hlZCBjYWxsIHdpdGggZGVtaW5pYXR1cml6ZWQg
b2JzZXJ2ZXIgKCVwKSBhbmQgSGlkZGVuIG9ic2VydmVyICglcCkiLCBtX3ByZXNlbnRpbmdXaW5k
b3dEaWREZW1pbmlhdHVyaXplT2JzZXJ2ZXIuZ2V0KCksIG1fYXBwbGljYXRpb25EaWRVbmhpZGVP
YnNlcnZlci5nZXQoKSk7CiAjZWxpZiBQTEFURk9STShJT1MpCiAgICAgW1ttX3ZpZXdDb250cm9s
bGVyIHByZXNlbnRpbmdWaWV3Q29udHJvbGxlcl0gZGlzbWlzc1ZpZXdDb250cm9sbGVyQW5pbWF0
ZWQ6WUVTIGNvbXBsZXRpb246bmlsXTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvVUlQcm9j
ZXNzL0NvY29hL1NPQXV0aG9yaXphdGlvbi9TdWJGcmFtZVNPQXV0aG9yaXphdGlvblNlc3Npb24u
bW0gYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9Db2NvYS9TT0F1dGhvcml6YXRpb24vU3ViRnJh
bWVTT0F1dGhvcml6YXRpb25TZXNzaW9uLm1tCmluZGV4IDIwMTM1YWQ4ODY0Njc5YTYzMDIzMGIw
MmU5NjFiZGRlZGUyYTA3NjIuLjY5YzkyNjU1NDBkNzNkNzBkMmNlMmRkYTFjZDNmMjMxZDUxNGM4
MTkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0NvY29hL1NPQXV0aG9yaXph
dGlvbi9TdWJGcmFtZVNPQXV0aG9yaXphdGlvblNlc3Npb24ubW0KKysrIGIvU291cmNlL1dlYktp
dC9VSVByb2Nlc3MvQ29jb2EvU09BdXRob3JpemF0aW9uL1N1YkZyYW1lU09BdXRob3JpemF0aW9u
U2Vzc2lvbi5tbQpAQCAtMzgsNiArMzgsOCBAQAogbmFtZXNwYWNlIFdlYktpdCB7CiB1c2luZyBu
YW1lc3BhY2UgV2ViQ29yZTsKIAorI2RlZmluZSBBVVRIT1JJWkFUSU9OU0VTU0lPTl9SRUxFQVNF
X0xPRyhmbXQsIC4uLikgUkVMRUFTRV9MT0coQXBwU1NPLCAiJXAgLSBbSW5pdGlhdGluZ0FjdGlv
bj0lc11bU3RhdGU9JXNdIFN1YkZyYW1lU09BdXRob3JpemF0aW9uU2Vzc2lvbjo6IiBmbXQsIHRo
aXMsIGluaXRpYXRpbmdBY3Rpb25TdHJpbmcoKSwgc3RhdGVTdHJpbmcoKSwgIyNfX1ZBX0FSR1Nf
XykKKwogbmFtZXNwYWNlIHsKIAogY29uc3QgY2hhciogc29BdXRob3JpemF0aW9uUG9zdERpZFN0
YXJ0TWVzc2FnZVRvUGFyZW50ID0gIjxzY3JpcHQ+cGFyZW50LnBvc3RNZXNzYWdlKCdTT0F1dGhv
cml6YXRpb25EaWRTdGFydCcsICcqJyk7PC9zY3JpcHQ+IjsKQEAgLTY5LDYgKzcxLDcgQEAgU3Vi
RnJhbWVTT0F1dGhvcml6YXRpb25TZXNzaW9uOjp+U3ViRnJhbWVTT0F1dGhvcml6YXRpb25TZXNz
aW9uKCkKIAogdm9pZCBTdWJGcmFtZVNPQXV0aG9yaXphdGlvblNlc3Npb246OmZhbGxCYWNrVG9X
ZWJQYXRoSW50ZXJuYWwoKQogeworICAgIEFVVEhPUklaQVRJT05TRVNTSU9OX1JFTEVBU0VfTE9H
KCJmYWxsQmFja1RvV2ViUGF0aEludGVybmFsOiBuYXZpZ2F0aW9uQWN0aW9uPSVwIiwgbmF2aWdh
dGlvbkFjdGlvbigpKTsKICAgICBBU1NFUlQobmF2aWdhdGlvbkFjdGlvbigpKTsKICAgICBhcHBl
bmRSZXF1ZXN0VG9Mb2FkKFVSTChuYXZpZ2F0aW9uQWN0aW9uKCktPnJlcXVlc3QoKS51cmwoKSks
IFZlY3RvciB7IHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgdWludDhfdCo+KHNvQXV0aG9yaXphdGlv
blBvc3REaWRDYW5jZWxNZXNzYWdlVG9QYXJlbnQpLCBzdHJsZW4oc29BdXRob3JpemF0aW9uUG9z
dERpZENhbmNlbE1lc3NhZ2VUb1BhcmVudCkgfSk7CiAgICAgYXBwZW5kUmVxdWVzdFRvTG9hZChV
UkwobmF2aWdhdGlvbkFjdGlvbigpLT5yZXF1ZXN0KCkudXJsKCkpLCBTdHJpbmcobmF2aWdhdGlv
bkFjdGlvbigpLT5yZXF1ZXN0KCkuaHR0cFJlZmVycmVyKCkpKTsKQEAgLTc2LDExICs3OSwxMyBA
QCB2b2lkIFN1YkZyYW1lU09BdXRob3JpemF0aW9uU2Vzc2lvbjo6ZmFsbEJhY2tUb1dlYlBhdGhJ
bnRlcm5hbCgpCiAKIHZvaWQgU3ViRnJhbWVTT0F1dGhvcml6YXRpb25TZXNzaW9uOjphYm9ydElu
dGVybmFsKCkKIHsKKyAgICBBVVRIT1JJWkFUSU9OU0VTU0lPTl9SRUxFQVNFX0xPRygiYWJvcnRJ
bnRlcm5hbCIpOwogICAgIGZhbGxCYWNrVG9XZWJQYXRoSW50ZXJuYWwoKTsKIH0KIAogdm9pZCBT
dWJGcmFtZVNPQXV0aG9yaXphdGlvblNlc3Npb246OmNvbXBsZXRlSW50ZXJuYWwoY29uc3QgV2Vi
Q29yZTo6UmVzb3VyY2VSZXNwb25zZSYgcmVzcG9uc2UsIE5TRGF0YSAqZGF0YSkKIHsKKyAgICBB
VVRIT1JJWkFUSU9OU0VTU0lPTl9SRUxFQVNFX0xPRygiY29tcGxldGVJbnRlcm5hbDogaHR0cFN0
YXRlPSVkIiwgcmVzcG9uc2UuaHR0cFN0YXR1c0NvZGUoKSk7CiAgICAgaWYgKHJlc3BvbnNlLmh0
dHBTdGF0dXNDb2RlKCkgIT0gMjAwKSB7CiAgICAgICAgIGZhbGxCYWNrVG9XZWJQYXRoSW50ZXJu
YWwoKTsKICAgICAgICAgcmV0dXJuOwpAQCAtOTAsNiArOTUsNyBAQCB2b2lkIFN1YkZyYW1lU09B
dXRob3JpemF0aW9uU2Vzc2lvbjo6Y29tcGxldGVJbnRlcm5hbChjb25zdCBXZWJDb3JlOjpSZXNv
dXJjZVJlcwogCiB2b2lkIFN1YkZyYW1lU09BdXRob3JpemF0aW9uU2Vzc2lvbjo6YmVmb3JlU3Rh
cnQoKQogeworICAgIEFVVEhPUklaQVRJT05TRVNTSU9OX1JFTEVBU0VfTE9HKCJiZWZvcmVTdGFy
dCIpOwogICAgIC8vIENhbmNlbGxlZCB0aGUgY3VycmVudCBsb2FkIGJlZm9yZSBsb2FkaW5nIHRo
ZSBkYXRhIHRvIHBvc3QgU09BdXRob3JpemF0aW9uRGlkU3RhcnQgdG8gdGhlIHBhcmVudCBmcmFt
ZS4KICAgICBpbnZva2VDYWxsYmFjayh0cnVlKTsKICAgICBBU1NFUlQobmF2aWdhdGlvbkFjdGlv
bigpKTsKQEAgLTk4LDYgKzEwNCw3IEBAIHZvaWQgU3ViRnJhbWVTT0F1dGhvcml6YXRpb25TZXNz
aW9uOjpiZWZvcmVTdGFydCgpCiAKIHZvaWQgU3ViRnJhbWVTT0F1dGhvcml6YXRpb25TZXNzaW9u
OjpkaWRGaW5pc2hMb2FkKCkKIHsKKyAgICBBVVRIT1JJWkFUSU9OU0VTU0lPTl9SRUxFQVNFX0xP
RygiZGlkRmluaXNoTG9hZCIpOwogICAgIGF1dG8qIHBhZ2UgPSB0aGlzLT5wYWdlKCk7CiAgICAg
aWYgKCFwYWdlKQogICAgICAgICByZXR1cm47CkBAIC0xMTgsNiArMTI1LDcgQEAgdm9pZCBTdWJG
cmFtZVNPQXV0aG9yaXphdGlvblNlc3Npb246OmFwcGVuZFJlcXVlc3RUb0xvYWQoVVJMJiYgdXJs
LCBTdXBwbGVtZW50JiYKIAogdm9pZCBTdWJGcmFtZVNPQXV0aG9yaXphdGlvblNlc3Npb246Omxv
YWRSZXF1ZXN0VG9GcmFtZSgpCiB7CisgICAgQVVUSE9SSVpBVElPTlNFU1NJT05fUkVMRUFTRV9M
T0coImxvYWRSZXF1ZXN0VG9GcmFtZSIpOwogICAgIGF1dG8qIHBhZ2UgPSB0aGlzLT5wYWdlKCk7
CiAgICAgaWYgKCFwYWdlIHx8IG1fcmVxdWVzdHNUb0xvYWQuaXNFbXB0eSgpKQogICAgICAgICBy
ZXR1cm47CkBAIC0xMzUsNCArMTQzLDYgQEAgdm9pZCBTdWJGcmFtZVNPQXV0aG9yaXphdGlvblNl
c3Npb246OmxvYWRSZXF1ZXN0VG9GcmFtZSgpCiAKIH0gLy8gbmFtZXNwYWNlIFdlYktpdAogCisj
dW5kZWYgQVVUSE9SSVpBVElPTlNFU1NJT05fUkVMRUFTRV9MT0cKKwogI2VuZGlmCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9Db2NvYS9TT0F1dGhvcml6YXRpb24vV0tTT0F1
dGhvcml6YXRpb25EZWxlZ2F0ZS5tbSBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0NvY29hL1NP
QXV0aG9yaXphdGlvbi9XS1NPQXV0aG9yaXphdGlvbkRlbGVnYXRlLm1tCmluZGV4IDU4ODRmMWE5
NzY2Y2M0MmI0NTgxMGUzMzBkOWEzYTI3NmI4ZjhlYTUuLjc3MzY3YzdlOGE1NjZhYTY1ZTFhMzI2
ZWY5YzY1MTJmNGU0MTE3YzEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0Nv
Y29hL1NPQXV0aG9yaXphdGlvbi9XS1NPQXV0aG9yaXphdGlvbkRlbGVnYXRlLm1tCisrKyBiL1Nv
dXJjZS9XZWJLaXQvVUlQcm9jZXNzL0NvY29hL1NPQXV0aG9yaXphdGlvbi9XS1NPQXV0aG9yaXph
dGlvbkRlbGVnYXRlLm1tCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAx
OSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTkt
MjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRp
b24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAg
KiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5n
IGNvbmRpdGlvbnMKQEAgLTMyLDkwICszMiwxMTYgQEAKICNpbXBvcnQgIldlYlBhZ2VQcm94eS5o
IgogI2ltcG9ydCA8d3RmL1J1bkxvb3AuaD4KIAorI2RlZmluZSBXS1NPQVVUSE9SSVpBVElPTkRF
TEVHQVRFX1JFTEVBU0VfTE9HKGZtdCwgLi4uKSBSRUxFQVNFX0xPRyhBcHBTU08sICIlcCAtIFdL
U09BdXRob3JpemF0aW9uRGVsZWdhdGU6OiIgZm10LCAmc2VsZiwgIyNfX1ZBX0FSR1NfXykKKwog
QGltcGxlbWVudGF0aW9uIFdLU09BdXRob3JpemF0aW9uRGVsZWdhdGUKIAogLSAodm9pZClhdXRo
b3JpemF0aW9uOihTT0F1dGhvcml6YXRpb24gKilhdXRob3JpemF0aW9uIHByZXNlbnRWaWV3Q29u
dHJvbGxlcjooU09BdXRob3JpemF0aW9uVmlld0NvbnRyb2xsZXIpdmlld0NvbnRyb2xsZXIgd2l0
aENvbXBsZXRpb246KHZvaWQgKF4pKEJPT0wgc3VjY2VzcywgTlNFcnJvciAqZXJyb3IpKWNvbXBs
ZXRpb24KIHsKICAgICBBU1NFUlQoUnVuTG9vcDo6aXNNYWluKCkgJiYgY29tcGxldGlvbik7Cisg
ICAgV0tTT0FVVEhPUklaQVRJT05ERUxFR0FURV9SRUxFQVNFX0xPRygiYXV0aG9yaXphdGlvbiAo
YXV0aG9yaXphdGlvbiA9ICVwLCBfc2Vzc2lvbiA9ICVwKSIsIGF1dGhvcml6YXRpb24sIF9zZXNz
aW9uLmdldCgpKTsKICAgICBpZiAoIV9zZXNzaW9uKSB7CisgICAgICAgIFdLU09BVVRIT1JJWkFU
SU9OREVMRUdBVEVfUkVMRUFTRV9MT0coImF1dGhvcml6YXRpb246IE5vIHNlc3Npb24sIHNvIGNv
bXBsZXRpbmcgd2l0aCBOTyBhcyBzdWNjZXNzIHN0YXRlLiIpOwogICAgICAgICBBU1NFUlRfTk9U
X1JFQUNIRUQoKTsKICAgICAgICAgY29tcGxldGlvbihOTywgbmlsKTsKICAgICAgICAgcmV0dXJu
OwogICAgIH0KKyAgICBXS1NPQVVUSE9SSVpBVElPTkRFTEVHQVRFX1JFTEVBU0VfTE9HKCJhdXRo
b3JpemF0aW9uOiBwcmVzZW50aW5nVmlld0NvbnRyb2xsZXIgJXAiLCB2aWV3Q29udHJvbGxlcik7
CiAgICAgX3Nlc3Npb24tPnByZXNlbnRWaWV3Q29udHJvbGxlcih2aWV3Q29udHJvbGxlciwgY29t
cGxldGlvbik7CiB9CiAKIC0gKHZvaWQpYXV0aG9yaXphdGlvbkRpZE5vdEhhbmRsZTooU09BdXRo
b3JpemF0aW9uICopYXV0aG9yaXphdGlvbgogewogICAgIEFTU0VSVChSdW5Mb29wOjppc01haW4o
KSk7CisgICAgV0tTT0FVVEhPUklaQVRJT05ERUxFR0FURV9SRUxFQVNFX0xPRygiYXV0aG9yaXph
dGlvbkRpZE5vdEhhbmRsZTogKGF1dGhvcml6YXRpb24gPSAlcCwgX3Nlc3Npb24gPSAlcCkiLCBh
dXRob3JpemF0aW9uLCBfc2Vzc2lvbi5nZXQoKSk7CiAgICAgTE9HX0VSUk9SKCJDb3VsZCBub3Qg
aGFuZGxlIEFwcFNTTy4iKTsKICAgICBpZiAoIV9zZXNzaW9uKSB7CisgICAgICAgIFdLU09BVVRI
T1JJWkFUSU9OREVMRUdBVEVfUkVMRUFTRV9MT0coImF1dGhvcml6YXRpb25EaWROb3RIYW5kbGU6
IE5vIHNlc3Npb24sIHNvIHJldHVybmluZyBlYXJseS4iKTsKICAgICAgICAgQVNTRVJUX05PVF9S
RUFDSEVEKCk7CiAgICAgICAgIHJldHVybjsKICAgICB9CisgICAgV0tTT0FVVEhPUklaQVRJT05E
RUxFR0FURV9SRUxFQVNFX0xPRygiYXV0aG9yaXphdGlvbkRpZE5vdEhhbmRsZTogRmFsbGluZyBi
YWNrIHRvIHdlYiBwYXRoLiIpOwogICAgIF9zZXNzaW9uLT5mYWxsQmFja1RvV2ViUGF0aCgpOwog
fQogCiAtICh2b2lkKWF1dGhvcml6YXRpb25EaWRDYW5jZWw6KFNPQXV0aG9yaXphdGlvbiAqKWF1
dGhvcml6YXRpb24KIHsKICAgICBBU1NFUlQoUnVuTG9vcDo6aXNNYWluKCkpOworICAgIFdLU09B
VVRIT1JJWkFUSU9OREVMRUdBVEVfUkVMRUFTRV9MT0coImF1dGhvcml6YXRpb25EaWRDYW5jZWw6
IChhdXRob3JpemF0aW9uID0gJXAsIF9zZXNzaW9uID0gJXApIiwgYXV0aG9yaXphdGlvbiwgX3Nl
c3Npb24uZ2V0KCkpOwogICAgIGlmICghX3Nlc3Npb24pIHsKKyAgICAgICAgV0tTT0FVVEhPUkla
QVRJT05ERUxFR0FURV9SRUxFQVNFX0xPRygiYXV0aG9yaXphdGlvbkRpZENhbmNlbDogTm8gc2Vz
c2lvbiwgc28gcmV0dXJuaW5nIGVhcmx5LiIpOwogICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQo
KTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KKyAgICBXS1NPQVVUSE9SSVpBVElPTkRFTEVHQVRF
X1JFTEVBU0VfTE9HKCJhdXRob3JpemF0aW9uRGlkQ2FuY2VsOiBBYm9ydGluZyBzZXNzaW9uLiIp
OwogICAgIF9zZXNzaW9uLT5hYm9ydCgpOwogfQogCiAtICh2b2lkKWF1dGhvcml6YXRpb25EaWRD
b21wbGV0ZTooU09BdXRob3JpemF0aW9uICopYXV0aG9yaXphdGlvbgogewogICAgIEFTU0VSVChS
dW5Mb29wOjppc01haW4oKSk7CisgICAgV0tTT0FVVEhPUklaQVRJT05ERUxFR0FURV9SRUxFQVNF
X0xPRygiYXV0aG9yaXphdGlvbkRpZENvbXBsZXRlOiAoYXV0aG9yaXphdGlvbiA9ICVwLCBfc2Vz
c2lvbiA9ICVwKSIsIGF1dGhvcml6YXRpb24sIF9zZXNzaW9uLmdldCgpKTsKICAgICBMT0dfRVJS
T1IoIkNvbXBsZXRlIEFwcFNTTyB3aXRob3V0IGFueSBkYXRhLiIpOwogICAgIGlmICghX3Nlc3Np
b24pIHsKKyAgICAgICAgV0tTT0FVVEhPUklaQVRJT05ERUxFR0FURV9SRUxFQVNFX0xPRygiYXV0
aG9yaXphdGlvbkRpZENvbXBsZXRlOiBObyBzZXNzaW9uLCBzbyByZXR1cm5pbmcgZWFybHkuIik7
CiAgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwogICAgICAgICByZXR1cm47CiAgICAgfQor
ICAgIFdLU09BVVRIT1JJWkFUSU9OREVMRUdBVEVfUkVMRUFTRV9MT0coImF1dGhvcml6YXRpb25E
aWRDb21wbGV0ZTogRmFsbGluZyBiYWNrIHRvIHdlYiBwYXRoLiIpOwogICAgIF9zZXNzaW9uLT5m
YWxsQmFja1RvV2ViUGF0aCgpOwogfQogCiAtICh2b2lkKWF1dGhvcml6YXRpb246KFNPQXV0aG9y
aXphdGlvbiAqKWF1dGhvcml6YXRpb24gZGlkQ29tcGxldGVXaXRoSFRUUEF1dGhvcml6YXRpb25I
ZWFkZXJzOihOU0RpY3Rpb25hcnkgKilodHRwQXV0aG9yaXphdGlvbkhlYWRlcnMKIHsKICAgICBB
U1NFUlQoUnVuTG9vcDo6aXNNYWluKCkpOworICAgIFdLU09BVVRIT1JJWkFUSU9OREVMRUdBVEVf
UkVMRUFTRV9MT0coImF1dGhvcml6YXRpb246ZGlkQ29tcGxldGVXaXRoSFRUUEF1dGhvcml6YXRp
b25IZWFkZXJzOiAoYXV0aG9yaXphdGlvbiA9ICVwLCBfc2Vzc2lvbiA9ICVwKSIsIGF1dGhvcml6
YXRpb24sIF9zZXNzaW9uLmdldCgpKTsKICAgICBMT0dfRVJST1IoIkNvbXBsZXRlIEFwcFNTTyB3
aXRoIHVuZXhwZWN0ZWQgY2FsbGJhY2suIik7CiAgICAgaWYgKCFfc2Vzc2lvbikgeworICAgICAg
ICBXS1NPQVVUSE9SSVpBVElPTkRFTEVHQVRFX1JFTEVBU0VfTE9HKCJhdXRob3JpemF0aW9uOmRp
ZENvbXBsZXRlV2l0aEhUVFBBdXRob3JpemF0aW9uSGVhZGVyczogTm8gc2Vzc2lvbiwgc28gcmV0
dXJuaW5nIGVhcmx5LiIpOwogICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKICAgICAgICAg
cmV0dXJuOwogICAgIH0KKyAgICBXS1NPQVVUSE9SSVpBVElPTkRFTEVHQVRFX1JFTEVBU0VfTE9H
KCJhdXRob3JpemF0aW9uOmRpZENvbXBsZXRlV2l0aEhUVFBBdXRob3JpemF0aW9uSGVhZGVyczog
RmFsbGluZyBiYWNrIHRvIHdlYiBwYXRoLiIpOwogICAgIF9zZXNzaW9uLT5mYWxsQmFja1RvV2Vi
UGF0aCgpOwogfQogCiAtICh2b2lkKWF1dGhvcml6YXRpb246KFNPQXV0aG9yaXphdGlvbiAqKWF1
dGhvcml6YXRpb24gZGlkQ29tcGxldGVXaXRoSFRUUFJlc3BvbnNlOihOU0hUVFBVUkxSZXNwb25z
ZSAqKWh0dHBSZXNwb25zZSBodHRwQm9keTooTlNEYXRhICopaHR0cEJvZHkKIHsKICAgICBBU1NF
UlQoUnVuTG9vcDo6aXNNYWluKCkpOworICAgIFdLU09BVVRIT1JJWkFUSU9OREVMRUdBVEVfUkVM
RUFTRV9MT0coImF1dGhvcml6YXRpb246ZGlkQ29tcGxldGVXaXRoSFRUUFJlc3BvbnNlOiAoYXV0
aG9yaXphdGlvbiA9ICVwLCBfc2Vzc2lvbiA9ICVwKSIsIGF1dGhvcml6YXRpb24sIF9zZXNzaW9u
LmdldCgpKTsKICAgICBpZiAoIV9zZXNzaW9uKSB7CisgICAgICAgIFdLU09BVVRIT1JJWkFUSU9O
REVMRUdBVEVfUkVMRUFTRV9MT0coImF1dGhvcml6YXRpb246ZGlkQ29tcGxldGVXaXRoSFRUUFJl
c3BvbnNlOiBObyBzZXNzaW9uLCBzbyByZXR1cm5pbmcgZWFybHkuIik7CiAgICAgICAgIEFTU0VS
VF9OT1RfUkVBQ0hFRCgpOwogICAgICAgICByZXR1cm47CiAgICAgfQorICAgIFdLU09BVVRIT1JJ
WkFUSU9OREVMRUdBVEVfUkVMRUFTRV9MT0coImF1dGhvcml6YXRpb246ZGlkQ29tcGxldGVXaXRo
SFRUUFJlc3BvbnNlOiBDb21wbGV0aW5nLiIpOwogICAgIF9zZXNzaW9uLT5jb21wbGV0ZShodHRw
UmVzcG9uc2UsIGh0dHBCb2R5KTsKIH0KIAogLSAodm9pZClhdXRob3JpemF0aW9uOihTT0F1dGhv
cml6YXRpb24gKilhdXRob3JpemF0aW9uIGRpZENvbXBsZXRlV2l0aEVycm9yOihOU0Vycm9yICop
ZXJyb3IKIHsKICAgICBBU1NFUlQoUnVuTG9vcDo6aXNNYWluKCkpOworICAgIFdLU09BVVRIT1JJ
WkFUSU9OREVMRUdBVEVfUkVMRUFTRV9MT0coImF1dGhvcml6YXRpb246ZGlkQ29tcGxldGVXaXRo
RXJyb3I6IChhdXRob3JpemF0aW9uID0gJXAsIF9zZXNzaW9uID0gJXApIiwgYXV0aG9yaXphdGlv
biwgX3Nlc3Npb24uZ2V0KCkpOwogICAgIExPR19FUlJPUigiQ291bGQgbm90IGNvbXBsZXRlIEFw
cFNTTzogJWQiLCBlcnJvci5jb2RlKTsKICAgICBpZiAoIV9zZXNzaW9uKSB7CisgICAgICAgIFdL
U09BVVRIT1JJWkFUSU9OREVMRUdBVEVfUkVMRUFTRV9MT0coImF1dGhvcml6YXRpb246ZGlkQ29t
cGxldGVXaXRoRXJyb3I6IE5vIHNlc3Npb24sIHNvIHJldHVybmluZyBlYXJseS4iKTsKICAgICAg
ICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CiAgICAgICAgIHJldHVybjsKICAgICB9CisgICAgV0tT
T0FVVEhPUklaQVRJT05ERUxFR0FURV9SRUxFQVNFX0xPRygiYXV0aG9yaXphdGlvbjpkaWRDb21w
bGV0ZVdpdGhFcnJvcjogRmFsbGluZyBiYWNrIHRvIHdlYiBwYXRoLiIpOwogICAgIF9zZXNzaW9u
LT5mYWxsQmFja1RvV2ViUGF0aCgpOwogfQogCiAtICh2b2lkKXNldFNlc3Npb246KFJlZlB0cjxX
ZWJLaXQ6OlNPQXV0aG9yaXphdGlvblNlc3Npb24+JiYpc2Vzc2lvbgogeworICAgIFJFTEVBU0Vf
QVNTRVJUKFJ1bkxvb3A6OmlzTWFpbigpKTsKKyAgICBXS1NPQVVUSE9SSVpBVElPTkRFTEVHQVRF
X1JFTEVBU0VfTE9HKCJzZXRTZXNzaW9uOiAoZXhpc3Rpbmcgc2Vzc2lvbiA9ICVwLCBuZXcgc2Vz
c2lvbiA9ICVwKSIsIF9zZXNzaW9uLmdldCgpLCBzZXNzaW9uLmdldCgpKTsKICAgICBfc2Vzc2lv
biA9IFdURk1vdmUoc2Vzc2lvbik7CiAgICAgaWYgKF9zZXNzaW9uKQogICAgICAgICBfc2Vzc2lv
bi0+c2hvdWxkU3RhcnQoKTsKIH0KLQogQGVuZAogCisjdW5kZWYgV0tTT0FVVEhPUklaQVRJT05E
RUxFR0FURV9SRUxFQVNFX0xPRworCiAjZW5kaWYK
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>432297</attachid>
            <date>2021-06-25 15:24:44 -0700</date>
            <delta_ts>2021-06-25 18:47:35 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-227379-20210625152443.patch</filename>
            <type>text/plain</type>
            <size>42278</size>
            <attacher name="Brent Fulgham">bfulgham</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjc5MjQzCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L0No
YW5nZUxvZyBiL1NvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nCmluZGV4IGVhZTczZjRmYmYwZjQ1NWJh
Y2JjYjNmOWQzMjYzNDZlNjg3YTE2NWYuLjUyMjljNGVhNjU3MGEyODllMzEwZDVlODNhYjY4ZjFm
YmY2Yzg5MDMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nCisrKyBiL1NvdXJj
ZS9XZWJLaXQvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsNjUgQEAKKzIwMjEtMDYtMjQgIEJyZW50IEZ1
bGdoYW0gIDxiZnVsZ2hhbUBhcHBsZS5jb20+CisKKyAgICAgICAgW21hY09TXSBBZGQgbG9nZ2lu
ZyBhbmQgY2xlYW4gdXAgQXBwU1NPIGZsb3dzIAorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0
Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjI3Mzc5CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZ
IChPT1BTISkuCisKKyAgICAgICAgVGhpcyBwYXRjaCBhZGRzIGRldGFpbGVkIGxvZ2dpbmcgdG8g
dW5kZXJzdGFuZCB0aGUgZmxvd3MgdGhyb3VnaCB0aGUgQXBwU1NPIGF1dGhlbnRpY2F0aW9uIGNv
ZGUsCisgICAgICAgIGFuZCBhZGRzIGNsZWFuLXVwIGNvZGUgaW4gbW9yZSBwbGFjZXMgdG8gZW5z
dXJlIHRoYXQgdGhlIG1vZGFsIHNoZWV0IHVzZWQgYnkgQXBwU1NPIGlzIGRpc21pc3NlZAorICAg
ICAgICBpbiBjYXNlcyB3aGVyZSB0aGUgYXV0aGVudGljYXRpb24gaGFzIGNvbXBsZXRlZCAob3Ig
ZmFpbGVkKS4KKworICAgICAgICAqIFVJUHJvY2Vzcy9Db2NvYS9TT0F1dGhvcml6YXRpb24vTmF2
aWdhdGlvblNPQXV0aG9yaXphdGlvblNlc3Npb24ubW06CisgICAgICAgIChXZWJLaXQ6Ok5hdmln
YXRpb25TT0F1dGhvcml6YXRpb25TZXNzaW9uOjpzaG91bGRTdGFydEludGVybmFsKTogQWRkcyBu
ZXcgbG9nZ2luZy4KKyAgICAgICAgKFdlYktpdDo6TmF2aWdhdGlvblNPQXV0aG9yaXphdGlvblNl
c3Npb246OndlYlZpZXdEaWRNb3ZlVG9XaW5kb3cpOiBEaXR0by4KKyAgICAgICAgKFdlYktpdDo6
TmF2aWdhdGlvblNPQXV0aG9yaXphdGlvblNlc3Npb246OnBhZ2VBY3RpdmVVUkxEaWRDaGFuZ2VE
dXJpbmdXYWl0aW5nIGNvbnN0KTogRGl0dG8uCisgICAgICAgICogVUlQcm9jZXNzL0NvY29hL1NP
QXV0aG9yaXphdGlvbi9Qb3BVcFNPQXV0aG9yaXphdGlvblNlc3Npb24ubW06CisgICAgICAgIChX
ZWJLaXQ6OlBvcFVwU09BdXRob3JpemF0aW9uU2Vzc2lvbjo6c2hvdWxkU3RhcnRJbnRlcm5hbCk6
IEFkZHMgbmV3IGxvZ2dpbmcuCisgICAgICAgIChXZWJLaXQ6OlBvcFVwU09BdXRob3JpemF0aW9u
U2Vzc2lvbjo6ZmFsbEJhY2tUb1dlYlBhdGhJbnRlcm5hbCk6IERpdHRvLgorICAgICAgICAoV2Vi
S2l0OjpQb3BVcFNPQXV0aG9yaXphdGlvblNlc3Npb246OmFib3J0SW50ZXJuYWwpOiBEaXR0by4K
KyAgICAgICAgKFdlYktpdDo6UG9wVXBTT0F1dGhvcml6YXRpb25TZXNzaW9uOjpjb21wbGV0ZUlu
dGVybmFsKTogRGl0dG8uCisgICAgICAgIChXZWJLaXQ6OlBvcFVwU09BdXRob3JpemF0aW9uU2Vz
c2lvbjo6Y2xvc2UpOiBEaXR0by4KKyAgICAgICAgKFdlYktpdDo6UG9wVXBTT0F1dGhvcml6YXRp
b25TZXNzaW9uOjppbml0U2VjcmV0V2ViVmlldyk6IERpdHRvLgorICAgICAgICAqIFVJUHJvY2Vz
cy9Db2NvYS9TT0F1dGhvcml6YXRpb24vUmVkaXJlY3RTT0F1dGhvcml6YXRpb25TZXNzaW9uLm1t
OgorICAgICAgICAoV2ViS2l0OjpSZWRpcmVjdFNPQXV0aG9yaXphdGlvblNlc3Npb246OmZhbGxC
YWNrVG9XZWJQYXRoSW50ZXJuYWwpOiBBZGRzIG5ldyBsb2dnaW5nLgorICAgICAgICAoV2ViS2l0
OjpSZWRpcmVjdFNPQXV0aG9yaXphdGlvblNlc3Npb246OmFib3J0SW50ZXJuYWwpOiBEaXR0by4K
KyAgICAgICAgKFdlYktpdDo6UmVkaXJlY3RTT0F1dGhvcml6YXRpb25TZXNzaW9uOjpjb21wbGV0
ZUludGVybmFsKTogRGl0dG8uCisgICAgICAgIChXZWJLaXQ6OlJlZGlyZWN0U09BdXRob3JpemF0
aW9uU2Vzc2lvbjo6YmVmb3JlU3RhcnQpOiBEaXR0by4KKyAgICAgICAgKiBVSVByb2Nlc3MvQ29j
b2EvU09BdXRob3JpemF0aW9uL1NPQXV0aG9yaXphdGlvbkNvb3JkaW5hdG9yLm1tOgorICAgICAg
ICAoV2ViS2l0OjpTT0F1dGhvcml6YXRpb25Db29yZGluYXRvcjo6dHJ5QXV0aG9yaXplKTogQWRk
cyBuZXcgbG9nZ2luZy4KKyAgICAgICAgKiBVSVByb2Nlc3MvQ29jb2EvU09BdXRob3JpemF0aW9u
L1NPQXV0aG9yaXphdGlvblNlc3Npb24uaDoKKyAgICAgICAgKiBVSVByb2Nlc3MvQ29jb2EvU09B
dXRob3JpemF0aW9uL1NPQXV0aG9yaXphdGlvblNlc3Npb24ubW06CisgICAgICAgIChXZWJLaXQ6
OlNPQXV0aG9yaXphdGlvblNlc3Npb246OnN0YXRlU3RyaW5nIGNvbnN0KTogQWRkZWQuCisgICAg
ICAgIChXZWJLaXQ6OlNPQXV0aG9yaXphdGlvblNlc3Npb246On5TT0F1dGhvcml6YXRpb25TZXNz
aW9uKTogQWRkIG5ldyBsb2dnaW5nLCBhbmQgZW5zdXJlIG1vZGFsIHNoZWV0IGlzIGRpc21pc3Nl
ZC4KKyAgICAgICAgKFdlYktpdDo6U09BdXRob3JpemF0aW9uU2Vzc2lvbjo6YmVjb21lQ29tcGxl
dGVkKTogQWRkZWQgbmV3IGxvZ2dpbmcuCisgICAgICAgIChXZWJLaXQ6OlNPQXV0aG9yaXphdGlv
blNlc3Npb246OnNob3VsZFN0YXJ0KTogRGl0dG8uCisgICAgICAgIChXZWJLaXQ6OlNPQXV0aG9y
aXphdGlvblNlc3Npb246OnN0YXJ0KTogRGl0dG8uCisgICAgICAgIChXZWJLaXQ6OlNPQXV0aG9y
aXphdGlvblNlc3Npb246OmNvbnRpbnVlU3RhcnRBZnRlckdldEF1dGhvcml6YXRpb25IaW50cyk6
IERpdHRvLgorICAgICAgICAoV2ViS2l0OjpTT0F1dGhvcml6YXRpb25TZXNzaW9uOjpjb250aW51
ZVN0YXJ0QWZ0ZXJEZWNpZGVQb2xpY3kpOiBEaXR0by4KKyAgICAgICAgKFdlYktpdDo6U09BdXRo
b3JpemF0aW9uU2Vzc2lvbjo6ZmFsbEJhY2tUb1dlYlBhdGgpOiBBZGQgbmV3IGxvZ2dpbmcsIGFu
ZCBlbnN1cmUgbW9kYWwgc2hlZXQgaXMgZGlzbWlzc2VkLgorICAgICAgICAoV2ViS2l0OjpTT0F1
dGhvcml6YXRpb25TZXNzaW9uOjphYm9ydCk6IERpdHRvLgorICAgICAgICAoV2ViS2l0OjpTT0F1
dGhvcml6YXRpb25TZXNzaW9uOjpjb21wbGV0ZSk6IERpdHRvLgorICAgICAgICAoV2ViS2l0OjpT
T0F1dGhvcml6YXRpb25TZXNzaW9uOjpwcmVzZW50Vmlld0NvbnRyb2xsZXIpOiBBZGRlZCBuZXcg
bG9nZ2luZywgYW5kIGRpc21pc3MgbW9kYWwgaWYgYW4gZXhpc3RpbmcKKyAgICAgICAgdmlldyBp
cyBpbiBwbGFjZS4KKyAgICAgICAgKFdlYktpdDo6U09BdXRob3JpemF0aW9uU2Vzc2lvbjo6ZGlz
bWlzc01vZGFsU2hlZXRJZk5lY2Vzc2FyeSk6IEFkZGVkLgorICAgICAgICAoV2ViS2l0OjpTT0F1
dGhvcml6YXRpb25TZXNzaW9uOjpkaXNtaXNzVmlld0NvbnRyb2xsZXIpOiBVc2UgbmV3IGhlbHBl
ciBmdW5jdGlvbi4KKyAgICAgICAgKiBVSVByb2Nlc3MvQ29jb2EvU09BdXRob3JpemF0aW9uL1N1
YkZyYW1lU09BdXRob3JpemF0aW9uU2Vzc2lvbi5tbToKKyAgICAgICAgKFdlYktpdDo6U3ViRnJh
bWVTT0F1dGhvcml6YXRpb25TZXNzaW9uOjpmYWxsQmFja1RvV2ViUGF0aEludGVybmFsKTogQWRk
cyBuZXcgbG9nZ2luZy4KKyAgICAgICAgKFdlYktpdDo6U3ViRnJhbWVTT0F1dGhvcml6YXRpb25T
ZXNzaW9uOjphYm9ydEludGVybmFsKTogRGl0dG8uCisgICAgICAgIChXZWJLaXQ6OlN1YkZyYW1l
U09BdXRob3JpemF0aW9uU2Vzc2lvbjo6Y29tcGxldGVJbnRlcm5hbCk6IERpdHRvLgorICAgICAg
ICAoV2ViS2l0OjpTdWJGcmFtZVNPQXV0aG9yaXphdGlvblNlc3Npb246OmJlZm9yZVN0YXJ0KTog
RGl0dG8uCisgICAgICAgIChXZWJLaXQ6OlN1YkZyYW1lU09BdXRob3JpemF0aW9uU2Vzc2lvbjo6
ZGlkRmluaXNoTG9hZCk6IERpdHRvLgorICAgICAgICAoV2ViS2l0OjpTdWJGcmFtZVNPQXV0aG9y
aXphdGlvblNlc3Npb246OmxvYWRSZXF1ZXN0VG9GcmFtZSk6IERpdHRvLgorICAgICAgICAqIFVJ
UHJvY2Vzcy9Db2NvYS9TT0F1dGhvcml6YXRpb24vV0tTT0F1dGhvcml6YXRpb25EZWxlZ2F0ZS5t
bToKKyAgICAgICAgKC1bV0tTT0F1dGhvcml6YXRpb25EZWxlZ2F0ZSBhdXRob3JpemF0aW9uOnBy
ZXNlbnRWaWV3Q29udHJvbGxlcjp3aXRoQ29tcGxldGlvbjpdKTogQWRkcyBuZXcgbG9nZ2luZy4K
KyAgICAgICAgKC1bV0tTT0F1dGhvcml6YXRpb25EZWxlZ2F0ZSBhdXRob3JpemF0aW9uRGlkTm90
SGFuZGxlOl0pOiBEaXR0by4KKyAgICAgICAgKC1bV0tTT0F1dGhvcml6YXRpb25EZWxlZ2F0ZSBh
dXRob3JpemF0aW9uRGlkQ2FuY2VsOl0pOiBEaXR0by4KKyAgICAgICAgKC1bV0tTT0F1dGhvcml6
YXRpb25EZWxlZ2F0ZSBhdXRob3JpemF0aW9uRGlkQ29tcGxldGU6XSk6IERpdHRvLgorICAgICAg
ICAoLVtXS1NPQXV0aG9yaXphdGlvbkRlbGVnYXRlIGF1dGhvcml6YXRpb246ZGlkQ29tcGxldGVX
aXRoSFRUUEF1dGhvcml6YXRpb25IZWFkZXJzOl0pOiBEaXR0by4KKyAgICAgICAgKC1bV0tTT0F1
dGhvcml6YXRpb25EZWxlZ2F0ZSBhdXRob3JpemF0aW9uOmRpZENvbXBsZXRlV2l0aEhUVFBSZXNw
b25zZTpodHRwQm9keTpdKTogRGl0dG8uCisgICAgICAgICgtW1dLU09BdXRob3JpemF0aW9uRGVs
ZWdhdGUgYXV0aG9yaXphdGlvbjpkaWRDb21wbGV0ZVdpdGhFcnJvcjpdKTogRGl0dG8uCisgICAg
ICAgICgtW1dLU09BdXRob3JpemF0aW9uRGVsZWdhdGUgc2V0U2Vzc2lvbjpdKTogRGl0dG8uCisK
IDIwMjEtMDYtMjQgIENocmlzIER1bWV6ICA8Y2R1bWV6QGFwcGxlLmNvbT4KIAogICAgICAgICBB
ZGQgcmVsZWFzZSBsb2dnaW5nIGluIHRoZSBXZWJQYWdlIGNvbnN0cnVjdG9yIC8gZGVzdHJ1Y3Rv
cgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQ29jb2EvU09BdXRob3JpemF0
aW9uL05hdmlnYXRpb25TT0F1dGhvcml6YXRpb25TZXNzaW9uLm1tIGIvU291cmNlL1dlYktpdC9V
SVByb2Nlc3MvQ29jb2EvU09BdXRob3JpemF0aW9uL05hdmlnYXRpb25TT0F1dGhvcml6YXRpb25T
ZXNzaW9uLm1tCmluZGV4IGZjNzdlMzU0ZTY1MmVlZTgxN2M5OTVlYmNmYjA0ODFhZmE5NTk3MWQu
LmQyMzdmM2EwOWRjM2RjODE1MWRlMzM4Mjk0NzZhNDY1OTRlNmViZGMgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJLaXQvVUlQcm9jZXNzL0NvY29hL1NPQXV0aG9yaXphdGlvbi9OYXZpZ2F0aW9uU09B
dXRob3JpemF0aW9uU2Vzc2lvbi5tbQorKysgYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9Db2Nv
YS9TT0F1dGhvcml6YXRpb24vTmF2aWdhdGlvblNPQXV0aG9yaXphdGlvblNlc3Npb24ubW0KQEAg
LTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDE5IEFwcGxlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxOS0yMDIxIEFwcGxlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJj
ZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJl
IHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMzEs
NiArMzEsOCBAQAogI2ltcG9ydCAiV2ViUGFnZVByb3h5LmgiCiAjaW1wb3J0IDxXZWJDb3JlL1Jl
c291cmNlUmVzcG9uc2UuaD4KIAorI2RlZmluZSBBVVRIT1JJWkFUSU9OU0VTU0lPTl9SRUxFQVNF
X0xPRyhmbXQsIC4uLikgUkVMRUFTRV9MT0coQXBwU1NPLCAiJXAgLSBbSW5pdGlhdGluZ0FjdGlv
bj0lc11bU3RhdGU9JXNdIE5hdmlnYXRpb25TT0F1dGhvcml6YXRpb25TZXNzaW9uOjoiIGZtdCwg
dGhpcywgaW5pdGlhdGluZ0FjdGlvblN0cmluZygpLCBzdGF0ZVN0cmluZygpLCAjI19fVkFfQVJH
U19fKQorCiBuYW1lc3BhY2UgV2ViS2l0IHsKIAogTmF2aWdhdGlvblNPQXV0aG9yaXphdGlvblNl
c3Npb246Ok5hdmlnYXRpb25TT0F1dGhvcml6YXRpb25TZXNzaW9uKFNPQXV0aG9yaXphdGlvbiAq
c29BdXRob3JpemF0aW9uLCBSZWY8QVBJOjpOYXZpZ2F0aW9uQWN0aW9uPiYmIG5hdmlnYXRpb25B
Y3Rpb24sIFdlYlBhZ2VQcm94eSYgcGFnZSwgSW5pdGlhdGluZ0FjdGlvbiBhY3Rpb24sIENhbGxi
YWNrJiYgY29tcGxldGlvbkhhbmRsZXIpCkBAIC00OSw2ICs1MSw4IEBAIE5hdmlnYXRpb25TT0F1
dGhvcml6YXRpb25TZXNzaW9uOjp+TmF2aWdhdGlvblNPQXV0aG9yaXphdGlvblNlc3Npb24oKQog
CiB2b2lkIE5hdmlnYXRpb25TT0F1dGhvcml6YXRpb25TZXNzaW9uOjpzaG91bGRTdGFydEludGVy
bmFsKCkKIHsKKyAgICBBVVRIT1JJWkFUSU9OU0VTU0lPTl9SRUxFQVNFX0xPRygic2hvdWxkU3Rh
cnRJbnRlcm5hbDogbV9wYWdlPSVwIiwgcGFnZSgpKTsKKwogICAgIGF1dG8qIHBhZ2UgPSB0aGlz
LT5wYWdlKCk7CiAgICAgQVNTRVJUKHBhZ2UpOwogICAgIGJlZm9yZVN0YXJ0KCk7CkBAIC02NCw2
ICs2OCw3IEBAIHZvaWQgTmF2aWdhdGlvblNPQXV0aG9yaXphdGlvblNlc3Npb246OnNob3VsZFN0
YXJ0SW50ZXJuYWwoKQogCiB2b2lkIE5hdmlnYXRpb25TT0F1dGhvcml6YXRpb25TZXNzaW9uOjp3
ZWJWaWV3RGlkTW92ZVRvV2luZG93KCkKIHsKKyAgICBBVVRIT1JJWkFUSU9OU0VTU0lPTl9SRUxF
QVNFX0xPRygid2ViVmlld0RpZE1vdmVUb1dpbmRvdyIpOwogICAgIGF1dG8qIHBhZ2UgPSB0aGlz
LT5wYWdlKCk7CiAgICAgaWYgKHN0YXRlKCkgIT0gU3RhdGU6OldhaXRpbmcgfHwgIXBhZ2UgfHwg
IXBhZ2UtPmlzSW5XaW5kb3coKSkKICAgICAgICAgcmV0dXJuOwpAQCAtNzgsMTAgKzgzLDEzIEBA
IHZvaWQgTmF2aWdhdGlvblNPQXV0aG9yaXphdGlvblNlc3Npb246OndlYlZpZXdEaWRNb3ZlVG9X
aW5kb3coKQogCiBib29sIE5hdmlnYXRpb25TT0F1dGhvcml6YXRpb25TZXNzaW9uOjpwYWdlQWN0
aXZlVVJMRGlkQ2hhbmdlRHVyaW5nV2FpdGluZygpIGNvbnN0CiB7CisgICAgQVVUSE9SSVpBVElP
TlNFU1NJT05fUkVMRUFTRV9MT0coInBhZ2VBY3RpdmVVUkxEaWRDaGFuZ2VEdXJpbmdXYWl0aW5n
Iik7CiAgICAgYXV0byogcGFnZSA9IHRoaXMtPnBhZ2UoKTsKICAgICByZXR1cm4gIXBhZ2UgfHwg
cGFnZS0+cGFnZUxvYWRTdGF0ZSgpLmFjdGl2ZVVSTCgpICE9IG1fd2FpdGluZ1BhZ2VBY3RpdmVV
Ukw7CiB9CiAKIH0gLy8gbmFtZXNwYWNlIFdlYktpdAogCisjdW5kZWYgQVVUSE9SSVpBVElPTlNF
U1NJT05fUkVMRUFTRV9MT0cKKwogI2VuZGlmCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1VJ
UHJvY2Vzcy9Db2NvYS9TT0F1dGhvcml6YXRpb24vUG9wVXBTT0F1dGhvcml6YXRpb25TZXNzaW9u
Lm1tIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQ29jb2EvU09BdXRob3JpemF0aW9uL1BvcFVw
U09BdXRob3JpemF0aW9uU2Vzc2lvbi5tbQppbmRleCBjNmI0NzkyMTA3NTZkMzM4NmZjZGYwNGQx
NmE2MGUxMjViMjcyMGQyLi5mOTkyNzhlNjQ5OWQwYjIxMDZiN2QyZjJhNWEwNzJiNDdlYjlhN2Mx
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9Db2NvYS9TT0F1dGhvcml6YXRp
b24vUG9wVXBTT0F1dGhvcml6YXRpb25TZXNzaW9uLm1tCisrKyBiL1NvdXJjZS9XZWJLaXQvVUlQ
cm9jZXNzL0NvY29hL1NPQXV0aG9yaXphdGlvbi9Qb3BVcFNPQXV0aG9yaXphdGlvblNlc3Npb24u
bW0KQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDE5IEFwcGxlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxOS0yMDIxIEFwcGxlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGlu
IHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlv
biwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpA
QCAtODksNiArODksOCBAQAogCiBAZW5kCiAKKyNkZWZpbmUgQVVUSE9SSVpBVElPTlNFU1NJT05f
UkVMRUFTRV9MT0coZm10LCAuLi4pIFJFTEVBU0VfTE9HKEFwcFNTTywgIiVwIC0gW0luaXRpYXRp
bmdBY3Rpb249JXNdW1N0YXRlPSVzXSBQb3BVcFNPQXV0aG9yaXphdGlvblNlc3Npb246OiIgZm10
LCB0aGlzLCBpbml0aWF0aW5nQWN0aW9uU3RyaW5nKCksIHN0YXRlU3RyaW5nKCksICMjX19WQV9B
UkdTX18pCisKIG5hbWVzcGFjZSBXZWJLaXQgewogCiBSZWY8U09BdXRob3JpemF0aW9uU2Vzc2lv
bj4gUG9wVXBTT0F1dGhvcml6YXRpb25TZXNzaW9uOjpjcmVhdGUoU09BdXRob3JpemF0aW9uICpz
b0F1dGhvcml6YXRpb24sIFdlYlBhZ2VQcm94eSYgcGFnZSwgUmVmPEFQSTo6TmF2aWdhdGlvbkFj
dGlvbj4mJiBuYXZpZ2F0aW9uQWN0aW9uLCBOZXdQYWdlQ2FsbGJhY2smJiBuZXdQYWdlQ2FsbGJh
Y2ssIFVJQ2xpZW50Q2FsbGJhY2smJiB1aUNsaWVudENhbGxiYWNrKQpAQCAtMTEyLDE3ICsxMTQs
MjAgQEAgUG9wVXBTT0F1dGhvcml6YXRpb25TZXNzaW9uOjp+UG9wVXBTT0F1dGhvcml6YXRpb25T
ZXNzaW9uKCkKIAogdm9pZCBQb3BVcFNPQXV0aG9yaXphdGlvblNlc3Npb246OnNob3VsZFN0YXJ0
SW50ZXJuYWwoKQogeworICAgIEFVVEhPUklaQVRJT05TRVNTSU9OX1JFTEVBU0VfTE9HKCJzaG91
bGRTdGFydEludGVybmFsOiBtX3BhZ2U9JXAiLCBwYWdlKCkpOwogICAgIEFTU0VSVChwYWdlKCkg
JiYgcGFnZSgpLT5pc0luV2luZG93KCkpOwogICAgIHN0YXJ0KCk7CiB9CiAKIHZvaWQgUG9wVXBT
T0F1dGhvcml6YXRpb25TZXNzaW9uOjpmYWxsQmFja1RvV2ViUGF0aEludGVybmFsKCkKIHsKKyAg
ICBBVVRIT1JJWkFUSU9OU0VTU0lPTl9SRUxFQVNFX0xPRygiZmFsbEJhY2tUb1dlYlBhdGhJbnRl
cm5hbCIpOwogICAgIG1fdWlDbGllbnRDYWxsYmFjayhyZWxlYXNlTmF2aWdhdGlvbkFjdGlvbigp
LCBXVEZNb3ZlKG1fbmV3UGFnZUNhbGxiYWNrKSk7CiB9CiAKIHZvaWQgUG9wVXBTT0F1dGhvcml6
YXRpb25TZXNzaW9uOjphYm9ydEludGVybmFsKCkKIHsKKyAgICBBVVRIT1JJWkFUSU9OU0VTU0lP
Tl9SRUxFQVNFX0xPRygiYWJvcnRJbnRlcm5hbDogbV9wYWdlPSVwIiwgcGFnZSgpKTsKICAgICBp
ZiAoIXBhZ2UoKSkgewogICAgICAgICBtX25ld1BhZ2VDYWxsYmFjayhudWxscHRyKTsKICAgICAg
ICAgcmV0dXJuOwpAQCAtMTQwLDYgKzE0NSw3IEBAIHZvaWQgUG9wVXBTT0F1dGhvcml6YXRpb25T
ZXNzaW9uOjphYm9ydEludGVybmFsKCkKIAogdm9pZCBQb3BVcFNPQXV0aG9yaXphdGlvblNlc3Np
b246OmNvbXBsZXRlSW50ZXJuYWwoY29uc3QgV2ViQ29yZTo6UmVzb3VyY2VSZXNwb25zZSYgcmVz
cG9uc2UsIE5TRGF0YSAqZGF0YSkKIHsKKyAgICBBVVRIT1JJWkFUSU9OU0VTU0lPTl9SRUxFQVNF
X0xPRygiY29tcGxldGVJbnRlcm5hbDogaHR0cFN0YXRlPSVkIiwgcmVzcG9uc2UuaHR0cFN0YXR1
c0NvZGUoKSk7CiAgICAgaWYgKHJlc3BvbnNlLmh0dHBTdGF0dXNDb2RlKCkgIT0gMjAwIHx8ICFw
YWdlKCkpIHsKICAgICAgICAgZmFsbEJhY2tUb1dlYlBhdGhJbnRlcm5hbCgpOwogICAgICAgICBy
ZXR1cm47CkBAIC0xNTcsNiArMTYzLDcgQEAgdm9pZCBQb3BVcFNPQXV0aG9yaXphdGlvblNlc3Np
b246OmNvbXBsZXRlSW50ZXJuYWwoY29uc3QgV2ViQ29yZTo6UmVzb3VyY2VSZXNwb24KIAogdm9p
ZCBQb3BVcFNPQXV0aG9yaXphdGlvblNlc3Npb246OmNsb3NlKFdLV2ViVmlldyAqd2ViVmlldykK
IHsKKyAgICBBVVRIT1JJWkFUSU9OU0VTU0lPTl9SRUxFQVNFX0xPRygiY2xvc2UiKTsKICAgICBp
ZiAoIW1fc2VjcmV0V2ViVmlldykKICAgICAgICAgcmV0dXJuOwogICAgIGlmIChzdGF0ZSgpICE9
IFN0YXRlOjpDb21wbGV0ZWQgfHwgd2ViVmlldyAhPSBtX3NlY3JldFdlYlZpZXcuZ2V0KCkpIHsK
QEAgLTE2OSw2ICsxNzYsNyBAQCB2b2lkIFBvcFVwU09BdXRob3JpemF0aW9uU2Vzc2lvbjo6Y2xv
c2UoV0tXZWJWaWV3ICp3ZWJWaWV3KQogCiB2b2lkIFBvcFVwU09BdXRob3JpemF0aW9uU2Vzc2lv
bjo6aW5pdFNlY3JldFdlYlZpZXcoKQogeworICAgIEFVVEhPUklaQVRJT05TRVNTSU9OX1JFTEVB
U0VfTE9HKCJpbml0U2VjcmV0V2ViVmlldyIpOwogICAgIEFTU0VSVChwYWdlKCkpOwogICAgIGF1
dG8gaW5pdGlhdG9yV2ViVmlldyA9IHBhZ2UoKS0+Y29jb2FWaWV3KCk7CiAgICAgaWYgKCFpbml0
aWF0b3JXZWJWaWV3KQpAQCAtMTg3LDQgKzE5NSw2IEBAIHZvaWQgUG9wVXBTT0F1dGhvcml6YXRp
b25TZXNzaW9uOjppbml0U2VjcmV0V2ViVmlldygpCiAKIH0gLy8gbmFtZXNwYWNlIFdlYktpdAog
CisjdW5kZWYgQVVUSE9SSVpBVElPTlNFU1NJT05fUkVMRUFTRV9MT0cKKwogI2VuZGlmCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9Db2NvYS9TT0F1dGhvcml6YXRpb24vUmVk
aXJlY3RTT0F1dGhvcml6YXRpb25TZXNzaW9uLm1tIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3Mv
Q29jb2EvU09BdXRob3JpemF0aW9uL1JlZGlyZWN0U09BdXRob3JpemF0aW9uU2Vzc2lvbi5tbQpp
bmRleCA5ODM4ZjZhMTEwZDkxZjA1NGZlMjg0NThlODZlYTNjZmU3MDVlY2U0Li45MWFlN2MwMzcz
NjljNzc3MGNlYjRhNjRhNzBkMTBlOWRhMDI4YWE3IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0
L1VJUHJvY2Vzcy9Db2NvYS9TT0F1dGhvcml6YXRpb24vUmVkaXJlY3RTT0F1dGhvcml6YXRpb25T
ZXNzaW9uLm1tCisrKyBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0NvY29hL1NPQXV0aG9yaXph
dGlvbi9SZWRpcmVjdFNPQXV0aG9yaXphdGlvblNlc3Npb24ubW0KQEAgLTEsNSArMSw1IEBACiAv
KgotICogQ29weXJpZ2h0IChDKSAyMDE5IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
KyAqIENvcHlyaWdodCAoQykgMjAxOS0yMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv
cm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92
aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMzMsNiArMzMsOCBAQAogI2lt
cG9ydCAiV2ViUGFnZVByb3h5LmgiCiAjaW1wb3J0IDxXZWJDb3JlL1Jlc291cmNlUmVzcG9uc2Uu
aD4KIAorI2RlZmluZSBBVVRIT1JJWkFUSU9OU0VTU0lPTl9SRUxFQVNFX0xPRyhmbXQsIC4uLikg
UkVMRUFTRV9MT0coQXBwU1NPLCAiJXAgLSBbSW5pdGlhdGluZ0FjdGlvbj0lc11bU3RhdGU9JXNd
IFJlZGlyZWN0U09BdXRob3JpemF0aW9uU2Vzc2lvbjo6IiBmbXQsIHRoaXMsIGluaXRpYXRpbmdB
Y3Rpb25TdHJpbmcoKSwgc3RhdGVTdHJpbmcoKSwgIyNfX1ZBX0FSR1NfXykKKwogbmFtZXNwYWNl
IFdlYktpdCB7CiB1c2luZyBuYW1lc3BhY2UgV2ViQ29yZTsKIApAQCAtNDgsMjAgKzUwLDI1IEBA
IFJlZGlyZWN0U09BdXRob3JpemF0aW9uU2Vzc2lvbjo6UmVkaXJlY3RTT0F1dGhvcml6YXRpb25T
ZXNzaW9uKFNPQXV0aG9yaXphdGlvbiAqCiAKIHZvaWQgUmVkaXJlY3RTT0F1dGhvcml6YXRpb25T
ZXNzaW9uOjpmYWxsQmFja1RvV2ViUGF0aEludGVybmFsKCkKIHsKKyAgICBBVVRIT1JJWkFUSU9O
U0VTU0lPTl9SRUxFQVNFX0xPRygiZmFsbEJhY2tUb1dlYlBhdGhJbnRlcm5hbDogbmF2aWdhdGlv
bkFjdGlvbj0lcCIsIG5hdmlnYXRpb25BY3Rpb24oKSk7CiAgICAgaW52b2tlQ2FsbGJhY2soZmFs
c2UpOwogfQogCiB2b2lkIFJlZGlyZWN0U09BdXRob3JpemF0aW9uU2Vzc2lvbjo6YWJvcnRJbnRl
cm5hbCgpCiB7CisgICAgQVVUSE9SSVpBVElPTlNFU1NJT05fUkVMRUFTRV9MT0coImFib3J0SW50
ZXJuYWwiKTsKICAgICBpbnZva2VDYWxsYmFjayh0cnVlKTsKIH0KIAogdm9pZCBSZWRpcmVjdFNP
QXV0aG9yaXphdGlvblNlc3Npb246OmNvbXBsZXRlSW50ZXJuYWwoY29uc3QgUmVzb3VyY2VSZXNw
b25zZSYgcmVzcG9uc2UsIE5TRGF0YSAqZGF0YSkKIHsKKyAgICBBVVRIT1JJWkFUSU9OU0VTU0lP
Tl9SRUxFQVNFX0xPRygiY29tcGxldGVJbnRlcm5hbDogaHR0cFN0YXRlPSVkLCBuYXZpZ2F0aW9u
QWN0aW9uPSVwIiwgcmVzcG9uc2UuaHR0cFN0YXR1c0NvZGUoKSwgbmF2aWdhdGlvbkFjdGlvbigp
KTsKKwogICAgIGF1dG8qIG5hdmlnYXRpb25BY3Rpb24gPSB0aGlzLT5uYXZpZ2F0aW9uQWN0aW9u
KCk7CiAgICAgQVNTRVJUKG5hdmlnYXRpb25BY3Rpb24pOwogICAgIGF1dG8qIHBhZ2UgPSB0aGlz
LT5wYWdlKCk7CiAgICAgaWYgKChyZXNwb25zZS5odHRwU3RhdHVzQ29kZSgpICE9IDMwMiAmJiBy
ZXNwb25zZS5odHRwU3RhdHVzQ29kZSgpICE9IDIwMCkgfHwgIXBhZ2UpIHsKKyAgICAgICAgQVVU
SE9SSVpBVElPTlNFU1NJT05fUkVMRUFTRV9MT0coImNvbXBsZXRlSW50ZXJuYWw6IGh0dHBTdGF0
ZT0lZCBwYWdlPSVkLCBzbyBmYWxsaW5nIGJhY2sgdG8gd2ViIHBhdGguIiwgcmVzcG9uc2UuaHR0
cFN0YXR1c0NvZGUoKSwgISFwYWdlKTsKICAgICAgICAgZmFsbEJhY2tUb1dlYlBhdGhJbnRlcm5h
bCgpOwogICAgICAgICByZXR1cm47CiAgICAgfQpAQCAtOTIsOCArOTksMTEgQEAgdm9pZCBSZWRp
cmVjdFNPQXV0aG9yaXphdGlvblNlc3Npb246OmNvbXBsZXRlSW50ZXJuYWwoY29uc3QgUmVzb3Vy
Y2VSZXNwb25zZSYgcmUKIAogdm9pZCBSZWRpcmVjdFNPQXV0aG9yaXphdGlvblNlc3Npb246OmJl
Zm9yZVN0YXJ0KCkKIHsKKyAgICBBVVRIT1JJWkFUSU9OU0VTU0lPTl9SRUxFQVNFX0xPRygiYmVm
b3JlU3RhcnQiKTsKIH0KIAogfSAvLyBuYW1lc3BhY2UgV2ViS2l0CiAKKyN1bmRlZiBBVVRIT1JJ
WkFUSU9OU0VTU0lPTl9SRUxFQVNFX0xPRworCiAjZW5kaWYKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJLaXQvVUlQcm9jZXNzL0NvY29hL1NPQXV0aG9yaXphdGlvbi9TT0F1dGhvcml6YXRpb25Db29y
ZGluYXRvci5tbSBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0NvY29hL1NPQXV0aG9yaXphdGlv
bi9TT0F1dGhvcml6YXRpb25Db29yZGluYXRvci5tbQppbmRleCAwZTAyYTFhMDE5ZGZlNjRjODgx
OGFkMWZiZmM4MjI4MGIxZWU0MjBmLi41Zjk1MTNmNTQ3NzBiN2Q0YzQxZWEzZDkyYmY0YmE1ZjVl
MjA4MDE1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9Db2NvYS9TT0F1dGhv
cml6YXRpb24vU09BdXRob3JpemF0aW9uQ29vcmRpbmF0b3IubW0KKysrIGIvU291cmNlL1dlYktp
dC9VSVByb2Nlc3MvQ29jb2EvU09BdXRob3JpemF0aW9uL1NPQXV0aG9yaXphdGlvbkNvb3JkaW5h
dG9yLm1tCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxOSBBcHBsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTktMjAyMSBBcHBs
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVz
ZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmlj
YXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlv
bnMKQEAgLTQxLDYgKzQxLDggQEAKICNpbXBvcnQgPHBhbC9zcGkvY29jb2EvQXV0aEtpdFNQSS5o
PgogI2ltcG9ydCA8d3RmL0Z1bmN0aW9uLmg+CiAKKyNkZWZpbmUgQVVUSE9SSVpBVElPTkNPT1JE
SU5BVE9SX1JFTEVBU0VfTE9HKGZtdCwgLi4uKSBSRUxFQVNFX0xPRyhBcHBTU08sICIlcCAtIFNP
QXV0aG9yaXphdGlvbkNvb3JkaW5hdG9yOjoiIGZtdCwgdGhpcywgIyNfX1ZBX0FSR1NfXykKKwog
bmFtZXNwYWNlIFdlYktpdCB7CiAKIFNPQXV0aG9yaXphdGlvbkNvb3JkaW5hdG9yOjpTT0F1dGhv
cml6YXRpb25Db29yZGluYXRvcigpCkBAIC02Myw3ICs2NSw5IEBAIGJvb2wgU09BdXRob3JpemF0
aW9uQ29vcmRpbmF0b3I6OmNhbkF1dGhvcml6ZShjb25zdCBVUkwmIHVybCkgY29uc3QKIAogdm9p
ZCBTT0F1dGhvcml6YXRpb25Db29yZGluYXRvcjo6dHJ5QXV0aG9yaXplKFJlZjxBUEk6Ok5hdmln
YXRpb25BY3Rpb24+JiYgbmF2aWdhdGlvbkFjdGlvbiwgV2ViUGFnZVByb3h5JiBwYWdlLCBGdW5j
dGlvbjx2b2lkKGJvb2wpPiYmIGNvbXBsZXRpb25IYW5kbGVyKQogeworICAgIEFVVEhPUklaQVRJ
T05DT09SRElOQVRPUl9SRUxFQVNFX0xPRygidHJ5QXV0aG9yaXplIik7CiAgICAgaWYgKCFjYW5B
dXRob3JpemUobmF2aWdhdGlvbkFjdGlvbi0+cmVxdWVzdCgpLnVybCgpKSkgeworICAgICAgICBB
VVRIT1JJWkFUSU9OQ09PUkRJTkFUT1JfUkVMRUFTRV9MT0coInRyeUF1dGhvcml6ZTogQ2Fubm90
IGF1dGhvcml6ZSB0aGUgcmVxdWVzdGVkIFVSTC4iKTsKICAgICAgICAgY29tcGxldGlvbkhhbmRs
ZXIoZmFsc2UpOwogICAgICAgICByZXR1cm47CiAgICAgfQpAQCAtNzIsNiArNzYsNyBAQCB2b2lk
IFNPQXV0aG9yaXphdGlvbkNvb3JkaW5hdG9yOjp0cnlBdXRob3JpemUoUmVmPEFQSTo6TmF2aWdh
dGlvbkFjdGlvbj4mJiBuYXZpZwogICAgIGF1dG8qIHRhcmdldEZyYW1lID0gbmF2aWdhdGlvbkFj
dGlvbi0+dGFyZ2V0RnJhbWUoKTsKICAgICBib29sIHN1YmZyYW1lTmF2aWdhdGlvbiA9IHRhcmdl
dEZyYW1lICYmICF0YXJnZXRGcmFtZS0+aXNNYWluRnJhbWUoKTsKICAgICBpZiAoc3ViZnJhbWVO
YXZpZ2F0aW9uICYmICghcGFnZS5tYWluRnJhbWUoKSB8fCAhW0FLQXV0aG9yaXphdGlvbkNvbnRy
b2xsZXIgaXNVUkxGcm9tQXBwbGVPd25lZERvbWFpbjpwYWdlLm1haW5GcmFtZSgpLT51cmwoKV0p
KSB7CisgICAgICAgIEFVVEhPUklaQVRJT05DT09SRElOQVRPUl9SRUxFQVNFX0xPRygidHJ5QXV0
aG9yaXplOiBBdHRlbXB0aW5nIHRvIHBlcmZvcm0gc3ViZnJhbWUgbmF2aWdhdGlvbiBmb3Igbm9u
LUFwcGxlIGF1dGhvcml6YXRpb24gVVJMLiIpOwogICAgICAgICBjb21wbGV0aW9uSGFuZGxlcihm
YWxzZSk7CiAgICAgICAgIHJldHVybjsKICAgICB9CkBAIC04Miw4ICs4NywxMCBAQCB2b2lkIFNP
QXV0aG9yaXphdGlvbkNvb3JkaW5hdG9yOjp0cnlBdXRob3JpemUoUmVmPEFQSTo6TmF2aWdhdGlv
bkFjdGlvbj4mJiBuYXZpZwogCiB2b2lkIFNPQXV0aG9yaXphdGlvbkNvb3JkaW5hdG9yOjp0cnlB
dXRob3JpemUoUmVmPEFQSTo6TmF2aWdhdGlvbkFjdGlvbj4mJiBuYXZpZ2F0aW9uQWN0aW9uLCBX
ZWJQYWdlUHJveHkmIHBhZ2UsIE5ld1BhZ2VDYWxsYmFjayYmIG5ld1BhZ2VDYWxsYmFjaywgVUlD
bGllbnRDYWxsYmFjayYmIHVpQ2xpZW50Q2FsbGJhY2spCiB7CisgICAgQVVUSE9SSVpBVElPTkNP
T1JESU5BVE9SX1JFTEVBU0VfTE9HKCJ0cnlBdXRob3JpemUgKDIpIik7CiAgICAgYm9vbCBzdWJm
cmFtZU5hdmlnYXRpb24gPSBuYXZpZ2F0aW9uQWN0aW9uLT5zb3VyY2VGcmFtZSgpICYmICFuYXZp
Z2F0aW9uQWN0aW9uLT5zb3VyY2VGcmFtZSgpLT5pc01haW5GcmFtZSgpOwogICAgIGlmIChzdWJm
cmFtZU5hdmlnYXRpb24gfHwgIW5hdmlnYXRpb25BY3Rpb24tPmlzUHJvY2Vzc2luZ1VzZXJHZXN0
dXJlKCkgfHwgIWNhbkF1dGhvcml6ZShuYXZpZ2F0aW9uQWN0aW9uLT5yZXF1ZXN0KCkudXJsKCkp
KSB7CisgICAgICAgIEFVVEhPUklaQVRJT05DT09SRElOQVRPUl9SRUxFQVNFX0xPRygidHJ5QXV0
aG9yaXplICgyKTogQXR0ZW1wdGluZyB0byBwZXJmb3JtIGludmFsaWQgYXV0aC4iKTsKICAgICAg
ICAgdWlDbGllbnRDYWxsYmFjayhXVEZNb3ZlKG5hdmlnYXRpb25BY3Rpb24pLCBXVEZNb3ZlKG5l
d1BhZ2VDYWxsYmFjaykpOwogICAgICAgICByZXR1cm47CiAgICAgfQpAQCAtOTQsNCArMTAxLDYg
QEAgdm9pZCBTT0F1dGhvcml6YXRpb25Db29yZGluYXRvcjo6dHJ5QXV0aG9yaXplKFJlZjxBUEk6
Ok5hdmlnYXRpb25BY3Rpb24+JiYgbmF2aWcKIAogfSAvLyBuYW1lc3BhY2UgV2ViS2l0CiAKKyN1
bmRlZiBBVVRIT1JJWkFUSU9OQ09PUkRJTkFUT1JfUkVMRUFTRV9MT0cKKwogI2VuZGlmCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9Db2NvYS9TT0F1dGhvcml6YXRpb24vU09B
dXRob3JpemF0aW9uU2Vzc2lvbi5oIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQ29jb2EvU09B
dXRob3JpemF0aW9uL1NPQXV0aG9yaXphdGlvblNlc3Npb24uaAppbmRleCA5OTJiNWYzMzczZWY4
MjcwYWNlMDQxOWI4M2JkMGQyNWJhNDQ0ZTNiLi5iNGIwYTkwYzUwODdhZTk5NjVmY2I4ZmFkYmI5
NWQzYWZjYjE2NjhlIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9Db2NvYS9T
T0F1dGhvcml6YXRpb24vU09BdXRob3JpemF0aW9uU2Vzc2lvbi5oCisrKyBiL1NvdXJjZS9XZWJL
aXQvVUlQcm9jZXNzL0NvY29hL1NPQXV0aG9yaXphdGlvbi9TT0F1dGhvcml6YXRpb25TZXNzaW9u
LmgKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDE5IEFwcGxlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxOS0yMDIxIEFwcGxlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGlu
IHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlv
biwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpA
QCAtOTIsNiArOTIsOCBAQCBwcm90ZWN0ZWQ6CiAgICAgdm9pZCBzdGFydCgpOwogICAgIFdlYlBh
Z2VQcm94eSogcGFnZSgpIGNvbnN0IHsgcmV0dXJuIG1fcGFnZS5nZXQoKTsgfQogICAgIFN0YXRl
IHN0YXRlKCkgY29uc3QgeyByZXR1cm4gbV9zdGF0ZTsgfQorICAgIGNvbnN0IGNoYXIqIHN0YXRl
U3RyaW5nKCkgY29uc3Q7CisgICAgY29uc3QgY2hhciogaW5pdGlhdGluZ0FjdGlvblN0cmluZygp
IGNvbnN0OwogICAgIHZvaWQgc2V0U3RhdGUoU3RhdGUgc3RhdGUpIHsgbV9zdGF0ZSA9IHN0YXRl
OyB9CiAgICAgY29uc3QgQVBJOjpOYXZpZ2F0aW9uQWN0aW9uKiBuYXZpZ2F0aW9uQWN0aW9uKCkg
eyByZXR1cm4gbV9uYXZpZ2F0aW9uQWN0aW9uLmdldCgpOyB9CiAgICAgUmVmPEFQSTo6TmF2aWdh
dGlvbkFjdGlvbj4gcmVsZWFzZU5hdmlnYXRpb25BY3Rpb24oKTsKQEAgLTEwNCw2ICsxMDYsOSBA
QCBwcml2YXRlOgogCiAgICAgdm9pZCBiZWNvbWVDb21wbGV0ZWQoKTsKICAgICB2b2lkIGRpc21p
c3NWaWV3Q29udHJvbGxlcigpOworI2lmIFBMQVRGT1JNKE1BQykKKyAgICB2b2lkIGRpc21pc3NN
b2RhbFNoZWV0SWZOZWNlc3NhcnkoKTsKKyNlbmRpZgogICAgIHZvaWQgY29udGludWVTdGFydEFm
dGVyR2V0QXV0aG9yaXphdGlvbkhpbnRzKGNvbnN0IFN0cmluZyYpOwogICAgIHZvaWQgY29udGlu
dWVTdGFydEFmdGVyRGVjaWRlUG9saWN5KGNvbnN0IFNPQXV0aG9yaXphdGlvbkxvYWRQb2xpY3km
KTsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQ29jb2EvU09BdXRob3Jp
emF0aW9uL1NPQXV0aG9yaXphdGlvblNlc3Npb24ubW0gYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vz
cy9Db2NvYS9TT0F1dGhvcml6YXRpb24vU09BdXRob3JpemF0aW9uU2Vzc2lvbi5tbQppbmRleCA3
NzQxMzQ1YTFiZDhiMTA1OGEwZjlmMmQxM2Q5NzNhNmQzOTc4MjU5Li4xOTk0OWZhM2VkODVkZmQy
NTc5ZmY3NmFkZDFjODcwZDdlNmEyMDkwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1VJUHJv
Y2Vzcy9Db2NvYS9TT0F1dGhvcml6YXRpb24vU09BdXRob3JpemF0aW9uU2Vzc2lvbi5tbQorKysg
Yi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9Db2NvYS9TT0F1dGhvcml6YXRpb24vU09BdXRob3Jp
emF0aW9uU2Vzc2lvbi5tbQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIw
MTkgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE5
LTIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0
aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAog
ICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2lu
ZyBjb25kaXRpb25zCkBAIC00NCw3ICs0NCw3IEBACiAjaW1wb3J0IDx3dGYvQmxvY2tQdHIuaD4K
ICNpbXBvcnQgPHd0Zi9WZWN0b3IuaD4KIAotI2RlZmluZSBBVVRIT1JJWkFUSU9OU0VTU0lPTl9S
RUxFQVNFX0xPRyhmbXQsIC4uLikgUkVMRUFTRV9MT0coQXBwU1NPLCAiJXAgLSBbSW5pdGlhdGlu
Z0FjdGlvbj0lc10gU09BdXRob3JpemF0aW9uU2Vzc2lvbjo6IiBmbXQsIHRoaXMsIHRvU3RyaW5n
KG1fYWN0aW9uKSwgIyNfX1ZBX0FSR1NfXykKKyNkZWZpbmUgQVVUSE9SSVpBVElPTlNFU1NJT05f
UkVMRUFTRV9MT0coZm10LCAuLi4pIFJFTEVBU0VfTE9HKEFwcFNTTywgIiVwIC0gW0luaXRpYXRp
bmdBY3Rpb249JXNdW1N0YXRlPSVzXSBTT0F1dGhvcml6YXRpb25TZXNzaW9uOjoiIGZtdCwgdGhp
cywgdG9TdHJpbmcobV9hY3Rpb24pLCBzdGF0ZVN0cmluZygpLCAjI19fVkFfQVJHU19fKQogCiBu
YW1lc3BhY2UgV2ViS2l0IHsKIApAQCAtOTYsMTIgKzk2LDQ3IEBAIFNPQXV0aG9yaXphdGlvblNl
c3Npb246OlNPQXV0aG9yaXphdGlvblNlc3Npb24oU09BdXRob3JpemF0aW9uICpzb0F1dGhvcml6
YXRpb24sCiAKIFNPQXV0aG9yaXphdGlvblNlc3Npb246On5TT0F1dGhvcml6YXRpb25TZXNzaW9u
KCkKIHsKKyAgICBBVVRIT1JJWkFUSU9OU0VTU0lPTl9SRUxFQVNFX0xPRygiflNPQXV0aG9yaXph
dGlvblNlc3Npb246IG1fdmlld0NvbnRyb2xsZXI9JXAiLCBtX3ZpZXdDb250cm9sbGVyLmdldCgp
KTsKKyNpZiBQTEFURk9STShNQUMpCisgICAgQVVUSE9SSVpBVElPTlNFU1NJT05fUkVMRUFTRV9M
T0coIn5TT0F1dGhvcml6YXRpb25TZXNzaW9uOiBtX3NoZWV0V2luZG93PSVwIiwgbV9zaGVldFdp
bmRvdy5nZXQoKSk7CisjZW5kaWYKKwogICAgIGlmIChtX3N0YXRlID09IFN0YXRlOjpBY3RpdmUg
JiYgISFtX3NvQXV0aG9yaXphdGlvbikKICAgICAgICAgW21fc29BdXRob3JpemF0aW9uIGNhbmNl
bEF1dGhvcml6YXRpb25dOwogICAgIGlmIChtX3N0YXRlICE9IFN0YXRlOjpJZGxlICYmIG1fc3Rh
dGUgIT0gU3RhdGU6OkNvbXBsZXRlZCkKICAgICAgICAgYmVjb21lQ29tcGxldGVkKCk7CisgICAg
ZWxzZQorICAgICAgICBkaXNtaXNzVmlld0NvbnRyb2xsZXIoKTsKK30KKworY29uc3QgY2hhciog
U09BdXRob3JpemF0aW9uU2Vzc2lvbjo6aW5pdGlhdGluZ0FjdGlvblN0cmluZygpIGNvbnN0Cit7
CisgICAgcmV0dXJuIHRvU3RyaW5nKG1fYWN0aW9uKTsKK30KKworY29uc3QgY2hhciogU09BdXRo
b3JpemF0aW9uU2Vzc2lvbjo6c3RhdGVTdHJpbmcoKSBjb25zdAoreworICAgIHN0YXRpYyBjb25z
dCBjaGFyKiBJZGxlID0gIklkbGUiOworICAgIHN0YXRpYyBjb25zdCBjaGFyKiBBY3RpdmUgPSAi
QWN0aXZlIjsKKyAgICBzdGF0aWMgY29uc3QgY2hhciogV2FpdGluZyA9ICJXYWl0aW5nIjsKKyAg
ICBzdGF0aWMgY29uc3QgY2hhciogQ29tcGxldGVkID0gIkNvbXBsZXRlZCI7CisKKyAgICBzd2l0
Y2ggKG1fc3RhdGUpIHsKKyAgICBjYXNlIFN0YXRlOjpJZGxlOgorICAgICAgICByZXR1cm4gSWRs
ZTsKKyAgICBjYXNlIFN0YXRlOjpBY3RpdmU6CisgICAgICAgIHJldHVybiBBY3RpdmU7CisgICAg
Y2FzZSBTdGF0ZTo6V2FpdGluZzoKKyAgICAgICAgcmV0dXJuIFdhaXRpbmc7CisgICAgY2FzZSBT
dGF0ZTo6Q29tcGxldGVkOgorICAgICAgICByZXR1cm4gQ29tcGxldGVkOworICAgIH0KKworICAg
IEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgIHJldHVybiBudWxscHRyOwogfQogCisKIFJlZjxB
UEk6Ok5hdmlnYXRpb25BY3Rpb24+IFNPQXV0aG9yaXphdGlvblNlc3Npb246OnJlbGVhc2VOYXZp
Z2F0aW9uQWN0aW9uKCkKIHsKICAgICByZXR1cm4gbV9uYXZpZ2F0aW9uQWN0aW9uLnJlbGVhc2VO
b25OdWxsKCk7CkBAIC0xMDksMTUgKzE0NCwxOSBAQCBSZWY8QVBJOjpOYXZpZ2F0aW9uQWN0aW9u
PiBTT0F1dGhvcml6YXRpb25TZXNzaW9uOjpyZWxlYXNlTmF2aWdhdGlvbkFjdGlvbigpCiAKIHZv
aWQgU09BdXRob3JpemF0aW9uU2Vzc2lvbjo6YmVjb21lQ29tcGxldGVkKCkKIHsKKyAgICBBVVRI
T1JJWkFUSU9OU0VTU0lPTl9SRUxFQVNFX0xPRygiYmVjb21lQ29tcGxldGVkOiBtX3ZpZXdDb250
cm9sbGVyPSVwIiwgbV92aWV3Q29udHJvbGxlci5nZXQoKSk7CisKICAgICBBU1NFUlQobV9zdGF0
ZSA9PSBTdGF0ZTo6QWN0aXZlIHx8IG1fc3RhdGUgPT0gU3RhdGU6OldhaXRpbmcpOwogICAgIG1f
c3RhdGUgPSBTdGF0ZTo6Q29tcGxldGVkOwotICAgIGlmIChtX3ZpZXdDb250cm9sbGVyKQotICAg
ICAgICBkaXNtaXNzVmlld0NvbnRyb2xsZXIoKTsKKyAgICBkaXNtaXNzVmlld0NvbnRyb2xsZXIo
KTsKKyNpZiBQTEFURk9STShNQUMpCisgICAgQVNTRVJUKCFtX3NoZWV0V2luZG93KTsKKyNlbmRp
ZgogfQogCiB2b2lkIFNPQXV0aG9yaXphdGlvblNlc3Npb246OnNob3VsZFN0YXJ0KCkKIHsKLSAg
ICBBVVRIT1JJWkFUSU9OU0VTU0lPTl9SRUxFQVNFX0xPRygic2hvdWxkU3RhcnQ6Iik7CisgICAg
QVVUSE9SSVpBVElPTlNFU1NJT05fUkVMRUFTRV9MT0coInNob3VsZFN0YXJ0OiBtX3BhZ2U9JXAi
LCBwYWdlKCkpOwogCiAgICAgQVNTRVJUKG1fc3RhdGUgPT0gU3RhdGU6OklkbGUpOwogICAgIGlm
ICghbV9wYWdlKQpAQCAtMTI3LDE1ICsxNjYsMjUgQEAgdm9pZCBTT0F1dGhvcml6YXRpb25TZXNz
aW9uOjpzaG91bGRTdGFydCgpCiAKIHZvaWQgU09BdXRob3JpemF0aW9uU2Vzc2lvbjo6c3RhcnQo
KQogewotICAgIEFVVEhPUklaQVRJT05TRVNTSU9OX1JFTEVBU0VfTE9HKCJzdGFydDoiKTsKKyAg
ICBBVVRIT1JJWkFUSU9OU0VTU0lPTl9SRUxFQVNFX0xPRygic3RhcnQ6IG5hdmlnYXRpb25BY3Rp
b249JXAiLCBuYXZpZ2F0aW9uQWN0aW9uKCkpOwogCiAgICAgQVNTRVJUKChtX3N0YXRlID09IFN0
YXRlOjpJZGxlIHx8IG1fc3RhdGUgPT0gU3RhdGU6OldhaXRpbmcpICYmIG1fbmF2aWdhdGlvbkFj
dGlvbik7CiAgICAgbV9zdGF0ZSA9IFN0YXRlOjpBY3RpdmU7CisgICAgQVVUSE9SSVpBVElPTlNF
U1NJT05fUkVMRUFTRV9MT0coInN0YXJ0OiBNb3ZpbmcgbV9zdGF0ZSB0byBBY3RpdmUuIik7CiAg
ICAgW21fc29BdXRob3JpemF0aW9uIGdldEF1dGhvcml6YXRpb25IaW50c1dpdGhVUkw6bV9uYXZp
Z2F0aW9uQWN0aW9uLT5yZXF1ZXN0KCkudXJsKCkgcmVzcG9uc2VDb2RlOjAgY29tcGxldGlvbjpt
YWtlQmxvY2tQdHIoW3RoaXMsIHdlYWtUaGlzID0gbWFrZVdlYWtQdHIoKnRoaXMpXSAoU09BdXRo
b3JpemF0aW9uSGludHMgKmF1dGhvcml6YXRpb25IaW50cywgTlNFcnJvciAqZXJyb3IpIHsKICAg
ICAgICAgQVVUSE9SSVpBVElPTlNFU1NJT05fUkVMRUFTRV9MT0coInN0YXJ0OiBSZWNlaXZlIFNP
QXV0aG9yaXphdGlvbkhpbnRzIChlcnJvcj0lbGQpIiwgZXJyb3IgPyBlcnJvci5jb2RlIDogMCk7
CiAKLSAgICAgICAgaWYgKCF3ZWFrVGhpcyB8fCBlcnJvciB8fCAhYXV0aG9yaXphdGlvbkhpbnRz
KQorICAgICAgICBpZiAoIXdlYWtUaGlzKSB7CisgICAgICAgICAgICBSRUxFQVNFX0xPR19FUlJP
UihBcHBTU08sICJTT0F1dGhvcml6YXRpb25TZXNzaW9uOjpzdGFydCAoZ2V0QXV0aG9yaXphdGlv
bkhpbnRzV2l0aFVSTCBjb21wbGV0aW9uIGhhbmRsZXIpOiBSZXR1cm5pbmcgZWFybHkgYmVjYXVz
ZSB3ZWFrVGhpcyBpcyBub3cgbnVsbC4iKTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAg
fQorCisgICAgICAgIGlmIChlcnJvciB8fCAhYXV0aG9yaXphdGlvbkhpbnRzKSB7CisgICAgICAg
ICAgICBBVVRIT1JJWkFUSU9OU0VTU0lPTl9SRUxFQVNFX0xPRygic3RhcnQgKGdldEF1dGhvcml6
YXRpb25IaW50c1dpdGhVUkwgY29tcGxldGlvbiBoYW5kbGVyKTogUmV0dXJuaW5nIGVhcmx5IGR1
ZSB0byBlcnJvciBvciBsYWNrIG9mIGhpbnRzLiIpOwogICAgICAgICAgICAgcmV0dXJuOworICAg
ICAgICB9CisKKyAgICAgICAgQVVUSE9SSVpBVElPTlNFU1NJT05fUkVMRUFTRV9MT0coInN0YXJ0
IChnZXRBdXRob3JpemF0aW9uSGludHNXaXRoVVJMIGNvbXBsZXRpb24gaGFuZGxlcik6IFJlY2Vp
dmUgU09BdXRob3JpemF0aW9uSGludHMuIik7CiAgICAgICAgIGNvbnRpbnVlU3RhcnRBZnRlckdl
dEF1dGhvcml6YXRpb25IaW50cyhhdXRob3JpemF0aW9uSGludHMubG9jYWxpemVkRXh0ZW5zaW9u
QnVuZGxlRGlzcGxheU5hbWUpOwogICAgIH0pLmdldCgpXTsKIH0KQEAgLTE0NSw5ICsxOTQsMTIg
QEAgdm9pZCBTT0F1dGhvcml6YXRpb25TZXNzaW9uOjpjb250aW51ZVN0YXJ0QWZ0ZXJHZXRBdXRo
b3JpemF0aW9uSGludHMoY29uc3QgU3RyaW4KICAgICBBVVRIT1JJWkFUSU9OU0VTU0lPTl9SRUxF
QVNFX0xPRygiY29udGludWVTdGFydEFmdGVyR2V0QXV0aG9yaXphdGlvbkhpbnRzOiAoaGludHM9
JXMpIiwgaGludHMudXRmOCgpLmRhdGEoKSk7CiAKICAgICBBU1NFUlQobV9zdGF0ZSA9PSBTdGF0
ZTo6QWN0aXZlKTsKLSAgICBpZiAoIW1fcGFnZSkKKyAgICBpZiAoIW1fcGFnZSkgeworICAgICAg
ICBBVVRIT1JJWkFUSU9OU0VTU0lPTl9SRUxFQVNFX0xPRygiY29udGludWVTdGFydEFmdGVyR2V0
QXV0aG9yaXphdGlvbkhpbnRzOiBFYXJseSByZXR1cm4gZHVlIHRvIG51bGwgbV9wYWdlIik7CiAg
ICAgICAgIHJldHVybjsKKyAgICB9CiAKKyAgICBBVVRIT1JJWkFUSU9OU0VTU0lPTl9SRUxFQVNF
X0xPRygiY29udGludWVTdGFydEFmdGVyR2V0QXV0aG9yaXphdGlvbkhpbnRzOiBDaGVja2luZyBw
YWdlIGZvciBwb2xpY3kgY2hvaWNlLiIpOwogICAgIG1fcGFnZS0+ZGVjaWRlUG9saWN5Rm9yU09B
dXRob3JpemF0aW9uTG9hZChoaW50cywgW3RoaXMsIHdlYWtUaGlzID0gbWFrZVdlYWtQdHIoKnRo
aXMpXSAoU09BdXRob3JpemF0aW9uTG9hZFBvbGljeSBwb2xpY3kpIHsKICAgICAgICAgaWYgKCF3
ZWFrVGhpcykKICAgICAgICAgICAgIHJldHVybjsKQEAgLTE1OCwxNiArMjEwLDE3IEBAIHZvaWQg
U09BdXRob3JpemF0aW9uU2Vzc2lvbjo6Y29udGludWVTdGFydEFmdGVyR2V0QXV0aG9yaXphdGlv
bkhpbnRzKGNvbnN0IFN0cmluCiB2b2lkIFNPQXV0aG9yaXphdGlvblNlc3Npb246OmNvbnRpbnVl
U3RhcnRBZnRlckRlY2lkZVBvbGljeShjb25zdCBTT0F1dGhvcml6YXRpb25Mb2FkUG9saWN5JiBw
b2xpY3kpCiB7CiAgICAgaWYgKHBvbGljeSA9PSBTT0F1dGhvcml6YXRpb25Mb2FkUG9saWN5OjpJ
Z25vcmUpIHsKLSAgICAgICAgQVVUSE9SSVpBVElPTlNFU1NJT05fUkVMRUFTRV9MT0coImNvbnRp
bnVlU3RhcnRBZnRlckRlY2lkZVBvbGljeTogUmVjZWl2ZSBTT0F1dGhvcml6YXRpb25Mb2FkUG9s
aWN5OjpJZ25vcmUiKTsKLQorICAgICAgICBBVVRIT1JJWkFUSU9OU0VTU0lPTl9SRUxFQVNFX0xP
RygiY29udGludWVTdGFydEFmdGVyRGVjaWRlUG9saWN5OiBSZWNlaXZlIFNPQXV0aG9yaXphdGlv
bkxvYWRQb2xpY3k6Oklnbm9yZS4gRmFsbGluZyBiYWNrIHRvIHdlYiBwYXRoLiIpOwogICAgICAg
ICBmYWxsQmFja1RvV2ViUGF0aCgpOwogICAgICAgICByZXR1cm47CiAgICAgfQogCiAgICAgQVVU
SE9SSVpBVElPTlNFU1NJT05fUkVMRUFTRV9MT0coImNvbnRpbnVlU3RhcnRBZnRlckRlY2lkZVBv
bGljeTogUmVjZWl2ZSBTT0F1dGhvcml6YXRpb25Mb2FkUG9saWN5OjpBbGxvdyIpOwogCi0gICAg
aWYgKCFtX3NvQXV0aG9yaXphdGlvbiB8fCAhbV9wYWdlIHx8ICFtX25hdmlnYXRpb25BY3Rpb24p
CisgICAgaWYgKCFtX3NvQXV0aG9yaXphdGlvbiB8fCAhbV9wYWdlIHx8ICFtX25hdmlnYXRpb25B
Y3Rpb24pIHsKKyAgICAgICAgQVVUSE9SSVpBVElPTlNFU1NJT05fUkVMRUFTRV9MT0coImNvbnRp
bnVlU3RhcnRBZnRlckdldEF1dGhvcml6YXRpb25IaW50czogRWFybHkgcmV0dXJuIG1fc29BdXRo
b3JpemF0aW9uPSVkLCBtX3BhZ2U9JXAsIG5hdmlnYXRpb25BY3Rpb249JXAuIiwgISFtX3NvQXV0
aG9yaXphdGlvbiwgcGFnZSgpLCBuYXZpZ2F0aW9uQWN0aW9uKCkpOwogICAgICAgICByZXR1cm47
CisgICAgfQogCiAgICAgYXV0byBpbml0aWF0b3JPcmlnaW4gPSBlbXB0eVN0cmluZygpOwogICAg
IGlmIChtX25hdmlnYXRpb25BY3Rpb24tPnNvdXJjZUZyYW1lKCkpCkBAIC0xODcsMzggKzI0MCw2
MCBAQCB2b2lkIFNPQXV0aG9yaXphdGlvblNlc3Npb246OmNvbnRpbnVlU3RhcnRBZnRlckRlY2lk
ZVBvbGljeShjb25zdCBTT0F1dGhvcml6YXRpbwogI2VuZGlmCiAKICAgICBhdXRvICpuc1JlcXVl
c3QgPSBtX25hdmlnYXRpb25BY3Rpb24tPnJlcXVlc3QoKS5uc1VSTFJlcXVlc3QoV2ViQ29yZTo6
SFRUUEJvZHlVcGRhdGVQb2xpY3k6OlVwZGF0ZUhUVFBCb2R5KTsKKyAgICBBVVRIT1JJWkFUSU9O
U0VTU0lPTl9SRUxFQVNFX0xPRygiY29udGludWVTdGFydEFmdGVyR2V0QXV0aG9yaXphdGlvbkhp
bnRzOiBCZWdpbm5pbmcgYXV0aG9yaXphdGlvbiB3aXRoIEFwcFNTTy4iKTsKICAgICBbbV9zb0F1
dGhvcml6YXRpb24gYmVnaW5BdXRob3JpemF0aW9uV2l0aFVSTDpuc1JlcXVlc3QuVVJMIGh0dHBI
ZWFkZXJzOm5zUmVxdWVzdC5hbGxIVFRQSGVhZGVyRmllbGRzIGh0dHBCb2R5Om5zUmVxdWVzdC5I
VFRQQm9keV07CiB9CiAKIHZvaWQgU09BdXRob3JpemF0aW9uU2Vzc2lvbjo6ZmFsbEJhY2tUb1dl
YlBhdGgoKQogewotICAgIEFVVEhPUklaQVRJT05TRVNTSU9OX1JFTEVBU0VfTE9HKCJmYWxsQmFj
a1RvV2ViUGF0aDoiKTsKKyAgICBBVVRIT1JJWkFUSU9OU0VTU0lPTl9SRUxFQVNFX0xPRygiZmFs
bEJhY2tUb1dlYlBhdGgiKTsKIAotICAgIGlmIChtX3N0YXRlICE9IFN0YXRlOjpBY3RpdmUpCisg
ICAgaWYgKG1fc3RhdGUgIT0gU3RhdGU6OkFjdGl2ZSkgeworICAgICAgICBBVVRIT1JJWkFUSU9O
U0VTU0lPTl9SRUxFQVNFX0xPRygiZmFsbEJhY2tUb1dlYlBhdGg6IFJldHVybmluZyBlYXJseSBz
aW5jZSBub3QgYWN0aXZlLiIpOworICAgICAgICBkaXNtaXNzVmlld0NvbnRyb2xsZXIoKTsKICAg
ICAgICAgcmV0dXJuOworICAgIH0KKwogICAgIGJlY29tZUNvbXBsZXRlZCgpOwogICAgIGZhbGxC
YWNrVG9XZWJQYXRoSW50ZXJuYWwoKTsKIH0KIAogdm9pZCBTT0F1dGhvcml6YXRpb25TZXNzaW9u
OjphYm9ydCgpCiB7Ci0gICAgQVVUSE9SSVpBVElPTlNFU1NJT05fUkVMRUFTRV9MT0coImFib3J0
OiIpOworICAgIEFVVEhPUklaQVRJT05TRVNTSU9OX1JFTEVBU0VfTE9HKCJhYm9ydDogbV92aWV3
Q29udHJvbGxlcj0lcCIsIG1fdmlld0NvbnRyb2xsZXIuZ2V0KCkpOworI2lmIFBMQVRGT1JNKE1B
QykKKyAgICBBVVRIT1JJWkFUSU9OU0VTU0lPTl9SRUxFQVNFX0xPRygiYWJvcnQ6IG1fc2hlZXRX
aW5kb3c9JXAiLCBtX3NoZWV0V2luZG93LmdldCgpKTsKKyNlbmRpZgogCi0gICAgaWYgKG1fc3Rh
dGUgPT0gU3RhdGU6OklkbGUgfHwgbV9zdGF0ZSA9PSBTdGF0ZTo6Q29tcGxldGVkKQorICAgIGlm
IChtX3N0YXRlID09IFN0YXRlOjpJZGxlIHx8IG1fc3RhdGUgPT0gU3RhdGU6OkNvbXBsZXRlZCkg
eworICAgICAgICBBVVRIT1JJWkFUSU9OU0VTU0lPTl9SRUxFQVNFX0xPRygiYWJvcnQ6IFJldHVy
bmluZyBlYXJseSBzaW5jZSBpZGxlIG9yIGFscmVhZHkgY29tcGxldGVkLiIpOworICAgICAgICBk
aXNtaXNzVmlld0NvbnRyb2xsZXIoKTsKICAgICAgICAgcmV0dXJuOworICAgIH0KKwogICAgIGJl
Y29tZUNvbXBsZXRlZCgpOwogICAgIGFib3J0SW50ZXJuYWwoKTsKIH0KIAogdm9pZCBTT0F1dGhv
cml6YXRpb25TZXNzaW9uOjpjb21wbGV0ZShOU0hUVFBVUkxSZXNwb25zZSAqaHR0cFJlc3BvbnNl
LCBOU0RhdGEgKmRhdGEpCiB7Ci0gICAgaWYgKG1fc3RhdGUgIT0gU3RhdGU6OkFjdGl2ZSkKKyAg
ICBBVVRIT1JJWkFUSU9OU0VTU0lPTl9SRUxFQVNFX0xPRygiY29tcGxldGU6IGh0dHBTdGF0ZT0l
ZCwgbV92aWV3Q29udHJvbGxlcj0lcCIsIHN0YXRpY19jYXN0PGludD4oaHR0cFJlc3BvbnNlLnN0
YXR1c0NvZGUpLCBtX3ZpZXdDb250cm9sbGVyLmdldCgpKTsKKyNpZiBQTEFURk9STShNQUMpCisg
ICAgQVVUSE9SSVpBVElPTlNFU1NJT05fUkVMRUFTRV9MT0coImNvbXBsZXRlOiBtX3NoZWV0V2lu
ZG93PSVwIiwgbV9zaGVldFdpbmRvdy5nZXQoKSk7CisjZW5kaWYKKworICAgIGlmIChtX3N0YXRl
ICE9IFN0YXRlOjpBY3RpdmUpIHsKKyAgICAgICAgQVVUSE9SSVpBVElPTlNFU1NJT05fUkVMRUFT
RV9MT0coImNvbXBsZXRlOiBSZXR1cm5pbmcgZWFybHkgc2luY2Ugbm90IGFjdGl2ZS4iKTsKKyAg
ICAgICAgZGlzbWlzc1ZpZXdDb250cm9sbGVyKCk7CiAgICAgICAgIHJldHVybjsKKyAgICB9CisK
ICAgICBBU1NFUlQobV9uYXZpZ2F0aW9uQWN0aW9uKTsKICAgICBiZWNvbWVDb21wbGV0ZWQoKTsK
IAogICAgIGF1dG8gcmVzcG9uc2UgPSBXZWJDb3JlOjpSZXNvdXJjZVJlc3BvbnNlKGh0dHBSZXNw
b25zZSk7CiAgICAgaWYgKCFpc1NhbWVPcmlnaW4obV9uYXZpZ2F0aW9uQWN0aW9uLT5yZXF1ZXN0
KCksIHJlc3BvbnNlKSkgeworICAgICAgICBBVVRIT1JJWkFUSU9OU0VTU0lPTl9SRUxFQVNFX0xP
RygiY29tcGxldGU6ICBPcmlnaW5zIGRvbid0IG1hdGNoLiBGYWxsaW5nIGJhY2sgdG8gd2ViIHBh
dGguIik7CiAgICAgICAgIGZhbGxCYWNrVG9XZWJQYXRoSW50ZXJuYWwoKTsKICAgICAgICAgcmV0
dXJuOwogICAgIH0KQEAgLTIyOSwxMiArMzA0LDE2IEBAIHZvaWQgU09BdXRob3JpemF0aW9uU2Vz
c2lvbjo6Y29tcGxldGUoTlNIVFRQVVJMUmVzcG9uc2UgKmh0dHBSZXNwb25zZSwgTlNEYXRhICpk
CiAgICAgQVVUSE9SSVpBVElPTlNFU1NJT05fUkVMRUFTRV9MT0coImNvbXBsZXRlOiAoaHR0cFN0
YXR1c0NvZGU9JWQsIGhhc0Nvb2tpZXM9JWQsIGhhc0RhdGE9JWQpIiwgcmVzcG9uc2UuaHR0cFN0
YXR1c0NvZGUoKSwgIWNvb2tpZXMuaXNFbXB0eSgpLCAhIWRhdGEubGVuZ3RoKTsKIAogICAgIGlm
IChjb29raWVzLmlzRW1wdHkoKSkgeworICAgICAgICBBVVRIT1JJWkFUSU9OU0VTU0lPTl9SRUxF
QVNFX0xPRygiY29tcGxldGU6ICBObyBjb29raWVzIHRvIHNldC4gQ29tcGxldGluZyAoaW50ZXJu
YWwpLiIpOwogICAgICAgICBjb21wbGV0ZUludGVybmFsKHJlc3BvbnNlLCBkYXRhKTsKICAgICAg
ICAgcmV0dXJuOwogICAgIH0KIAotICAgIGlmICghbV9wYWdlKQorICAgIGlmICghbV9wYWdlKSB7
CisgICAgICAgIEFVVEhPUklaQVRJT05TRVNTSU9OX1JFTEVBU0VfTE9HKCJjb21wbGV0ZTogIFJl
dHVybmluZyBlYXJseSBiZWNhdXNlIG1fcGFnZSBpcyBudWxsLiIpOwogICAgICAgICByZXR1cm47
CisgICAgfQorCiAgICAgbV9wYWdlLT53ZWJzaXRlRGF0YVN0b3JlKCkuY29va2llU3RvcmUoKS5z
ZXRDb29raWVzKFdURk1vdmUoY29va2llcyksIFt0aGlzLCB3ZWFrVGhpcyA9IG1ha2VXZWFrUHRy
KCp0aGlzKSwgcmVzcG9uc2UgPSBXVEZNb3ZlKHJlc3BvbnNlKSwgZGF0YSA9IGFkb3B0TlMoW1tO
U0RhdGEgYWxsb2NdIGluaXRXaXRoRGF0YTpkYXRhXSldICgpIG11dGFibGUgewogICAgICAgICBp
ZiAoIXdlYWtUaGlzKQogICAgICAgICAgICAgcmV0dXJuOwpAQCAtMjQ3LDExICszMjYsMTUgQEAg
dm9pZCBTT0F1dGhvcml6YXRpb25TZXNzaW9uOjpjb21wbGV0ZShOU0hUVFBVUkxSZXNwb25zZSAq
aHR0cFJlc3BvbnNlLCBOU0RhdGEgKmQKIAogdm9pZCBTT0F1dGhvcml6YXRpb25TZXNzaW9uOjpw
cmVzZW50Vmlld0NvbnRyb2xsZXIoU09BdXRob3JpemF0aW9uVmlld0NvbnRyb2xsZXIgdmlld0Nv
bnRyb2xsZXIsIFVJQ2FsbGJhY2sgdWlDYWxsYmFjaykKIHsKLSAgICBBVVRIT1JJWkFUSU9OU0VT
U0lPTl9SRUxFQVNFX0xPRygicHJlc2VudFZpZXdDb250cm9sbGVyOiIpOworICAgIEFVVEhPUkla
QVRJT05TRVNTSU9OX1JFTEVBU0VfTE9HKCJwcmVzZW50Vmlld0NvbnRyb2xsZXI6IG1fdmlld0Nv
bnRyb2xsZXI9JXAiLCBtX3ZpZXdDb250cm9sbGVyLmdldCgpKTsKKyNpZiBQTEFURk9STShNQUMp
CisgICAgQVVUSE9SSVpBVElPTlNFU1NJT05fUkVMRUFTRV9MT0coInByZXNlbnRWaWV3Q29udHJv
bGxlcjogbV9zaGVldFdpbmRvdz0lcCIsIG1fc2hlZXRXaW5kb3cuZ2V0KCkpOworI2VuZGlmCiAK
ICAgICBBU1NFUlQobV9zdGF0ZSA9PSBTdGF0ZTo6QWN0aXZlKTsKICAgICAvLyBPbmx5IGV4cGVj
dCBhdCBtb3N0IG9uZSBVSSBzZXNzaW9uIGZvciB0aGUgd2hvbGUgYXV0aG9yaXphdGlvbiBzZXNz
aW9uLgogICAgIGlmICghbV9wYWdlIHx8IG1fcGFnZS0+aXNDbG9zZWQoKSB8fCBtX3ZpZXdDb250
cm9sbGVyKSB7CisgICAgICAgIEFVVEhPUklaQVRJT05TRVNTSU9OX1JFTEVBU0VfTE9HKCJwcmVz
ZW50Vmlld0NvbnRyb2xsZXI6IG1fcGFnZT0lcCwgbV9wYWdlLT5pc0Nsb3NlZD0lZCwgbV92aWV3
Q29udHJvbGxlcj0lcCIsIG1fcGFnZS5nZXQoKSwgbV9wYWdlID8gbV9wYWdlLT5pc0Nsb3NlZCgp
IDogMCwgbV92aWV3Q29udHJvbGxlci5nZXQoKSk7CiAgICAgICAgIHVpQ2FsbGJhY2soTk8sIGFk
b3B0TlMoW1tOU0Vycm9yIGFsbG9jXSBpbml0V2l0aERvbWFpbjpTT0Vycm9yRG9tYWluIGNvZGU6
a1NPRXJyb3JBdXRob3JpemF0aW9uUHJlc2VudGF0aW9uRmFpbGVkIHVzZXJJbmZvOm5pbF0pLmdl
dCgpKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KQEAgLTI1OSwxOCArMzQyLDIzIEBAIHZvaWQg
U09BdXRob3JpemF0aW9uU2Vzc2lvbjo6cHJlc2VudFZpZXdDb250cm9sbGVyKFNPQXV0aG9yaXph
dGlvblZpZXdDb250cm9sbGVyCiAgICAgbV92aWV3Q29udHJvbGxlciA9IHZpZXdDb250cm9sbGVy
OwogI2lmIFBMQVRGT1JNKE1BQykKICAgICBBU1NFUlQoIW1fc2hlZXRXaW5kb3cpOworICAgIEFT
U0VSVCghbV9zaGVldFdpbmRvd1dpbGxDbG9zZU9ic2VydmVyKTsKKworICAgIGRpc21pc3NNb2Rh
bFNoZWV0SWZOZWNlc3NhcnkoKTsKKwogICAgIG1fc2hlZXRXaW5kb3cgPSBbTlNXaW5kb3cgd2lu
ZG93V2l0aENvbnRlbnRWaWV3Q29udHJvbGxlcjptX3ZpZXdDb250cm9sbGVyLmdldCgpXTsKIAot
ICAgIEFTU0VSVCghbV9zaGVldFdpbmRvd1dpbGxDbG9zZU9ic2VydmVyKTsKICAgICBtX3NoZWV0
V2luZG93V2lsbENsb3NlT2JzZXJ2ZXIgPSBbW05TTm90aWZpY2F0aW9uQ2VudGVyIGRlZmF1bHRD
ZW50ZXJdIGFkZE9ic2VydmVyRm9yTmFtZTpOU1dpbmRvd1dpbGxDbG9zZU5vdGlmaWNhdGlvbiBv
YmplY3Q6bV9zaGVldFdpbmRvdy5nZXQoKSBxdWV1ZTpuaWwgdXNpbmdCbG9jazpbd2Vha1RoaXMg
PSBtYWtlV2Vha1B0cigqdGhpcyldIChOU05vdGlmaWNhdGlvbiAqKSB7CiAgICAgICAgIGlmICgh
d2Vha1RoaXMpCiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIFJFTEVBU0VfTE9HKEFwcFNT
TywgInByZXNlbnRWaWV3Q29udHJvbGxlcjogUmVjZWl2ZWQgTlNXaW5kb3dXaWxsQ2xvc2VOb3Rp
ZmljYXRpb24uIERpc21pc3NpbmcgdGhlIHZpZXcgY29udHJvbGxlci4iKTsKICAgICAgICAgd2Vh
a1RoaXMtPmRpc21pc3NWaWV3Q29udHJvbGxlcigpOwogICAgIH1dOworICAgIEFVVEhPUklaQVRJ
T05TRVNTSU9OX1JFTEVBU0VfTE9HKCJwcmVzZW50Vmlld0NvbnRyb2xsZXI6IEFkZGVkIG1fc2hl
ZXRXaW5kb3dXaWxsQ2xvc2VPYnNlcnZlciAoJXApIiwgbV9zaGVldFdpbmRvd1dpbGxDbG9zZU9i
c2VydmVyLmdldCgpKTsKIAogICAgIE5TV2luZG93ICpwcmVzZW50aW5nV2luZG93ID0gbV9wYWdl
LT5wbGF0Zm9ybVdpbmRvdygpOwogICAgIGlmICghcHJlc2VudGluZ1dpbmRvdykgeworICAgICAg
ICBBVVRIT1JJWkFUSU9OU0VTU0lPTl9SRUxFQVNFX0xPRygicHJlc2VudFZpZXdDb250cm9sbGVy
OiBObyBwcmVzZW50aW5nIHdpbmRvdy4gUmV0dXJuaW5nIGVhcmx5LiIpOwogICAgICAgICB1aUNh
bGxiYWNrKE5PLCBhZG9wdE5TKFtbTlNFcnJvciBhbGxvY10gaW5pdFdpdGhEb21haW46U09FcnJv
ckRvbWFpbiBjb2RlOmtTT0Vycm9yQXV0aG9yaXphdGlvblByZXNlbnRhdGlvbkZhaWxlZCB1c2Vy
SW5mbzpuaWxdKS5nZXQoKSk7CiAgICAgICAgIHJldHVybjsKICAgICB9CkBAIC0yOTAsMTMgKzM3
OCwzOSBAQCB2b2lkIFNPQXV0aG9yaXphdGlvblNlc3Npb246OnByZXNlbnRWaWV3Q29udHJvbGxl
cihTT0F1dGhvcml6YXRpb25WaWV3Q29udHJvbGxlcgogICAgIHVpQ2FsbGJhY2soWUVTLCBuaWwp
OwogfQogCisjaWYgUExBVEZPUk0oTUFDKQordm9pZCBTT0F1dGhvcml6YXRpb25TZXNzaW9uOjpk
aXNtaXNzTW9kYWxTaGVldElmTmVjZXNzYXJ5KCkKK3sKKyAgICBpZiAoYXV0byAqcHJlc2VudGlu
Z1dpbmRvdyA9IG1fc2hlZXRXaW5kb3cuZ2V0KCkuc2hlZXRQYXJlbnQpIHsKKyAgICAgICAgQVVU
SE9SSVpBVElPTlNFU1NJT05fUkVMRUFTRV9MT0coImRpc21pc3NNb2RhbFNoZWV0SWZOZWNlc3Nh
cnk6IENhbGxpbmcgZW5kU2hlZXQgb24gJXAgZm9yIHNoZWV0ICVwLiIsIHByZXNlbnRpbmdXaW5k
b3csIG1fc2hlZXRXaW5kb3cuZ2V0KCkpOworICAgICAgICBbcHJlc2VudGluZ1dpbmRvdyBlbmRT
aGVldDptX3NoZWV0V2luZG93LmdldCgpXTsKKyAgICB9CisgICAgbV9zaGVldFdpbmRvdyA9IG51
bGxwdHI7CisKKyAgICBpZiAobV9zaGVldFdpbmRvd1dpbGxDbG9zZU9ic2VydmVyLmdldCgpKSB7
CisgICAgICAgIEFVVEhPUklaQVRJT05TRVNTSU9OX1JFTEVBU0VfTE9HKCJkaXNtaXNzTW9kYWxT
aGVldElmTmVjZXNzYXJ5OiBSZW1vdmluZyBtX3NoZWV0V2luZG93V2lsbENsb3NlT2JzZXJ2ZXIg
KCVwKSIsIG1fc2hlZXRXaW5kb3dXaWxsQ2xvc2VPYnNlcnZlci5nZXQoKSk7CisgICAgICAgIFtb
TlNOb3RpZmljYXRpb25DZW50ZXIgZGVmYXVsdENlbnRlcl0gcmVtb3ZlT2JzZXJ2ZXI6bV9zaGVl
dFdpbmRvd1dpbGxDbG9zZU9ic2VydmVyLmdldCgpXTsKKyAgICB9CisgICAgbV9zaGVldFdpbmRv
d1dpbGxDbG9zZU9ic2VydmVyID0gbnVsbHB0cjsKK30KKyNlbmRpZgorCiB2b2lkIFNPQXV0aG9y
aXphdGlvblNlc3Npb246OmRpc21pc3NWaWV3Q29udHJvbGxlcigpCiB7Ci0gICAgQVVUSE9SSVpB
VElPTlNFU1NJT05fUkVMRUFTRV9MT0coImRpc21pc3NWaWV3Q29udHJvbGxlcjoiKTsKKyAgICBB
VVRIT1JJWkFUSU9OU0VTU0lPTl9SRUxFQVNFX0xPRygiZGlzbWlzc1ZpZXdDb250cm9sbGVyOiBt
X3ZpZXdDb250cm9sbGVyPSVwIiwgbV92aWV3Q29udHJvbGxlci5nZXQoKSk7CisgICAgaWYgKCFt
X3ZpZXdDb250cm9sbGVyKSB7CisgICAgICAgIEFVVEhPUklaQVRJT05TRVNTSU9OX1JFTEVBU0Vf
TE9HKCJkaXNtaXNzVmlld0NvbnRyb2xsZXI6IE5vIHZpZXcgY29udHJvbGxlciwgc28gcmV0dXJu
aW5nIGVhcmx5LiIpOworICAgICAgICByZXR1cm47CisgICAgfQogCi0gICAgQVNTRVJUKG1fdmll
d0NvbnRyb2xsZXIpOwogI2lmIFBMQVRGT1JNKE1BQykKLSAgICBBU1NFUlQobV9zaGVldFdpbmRv
dyAmJiBtX3NoZWV0V2luZG93V2lsbENsb3NlT2JzZXJ2ZXIpOworICAgIGlmICghbV9zaGVldFdp
bmRvdykgeworICAgICAgICBBU1NFUlQoIW1fc2hlZXRXaW5kb3dXaWxsQ2xvc2VPYnNlcnZlcik7
CisgICAgICAgIEFVVEhPUklaQVRJT05TRVNTSU9OX1JFTEVBU0VfTE9HKCJkaXNtaXNzVmlld0Nv
bnRyb2xsZXI6IE5vIHZpZXcgY29udHJvbGxlciBvciBzaGVldCB3aW5kb3csIHNvIHJldHVybmlu
ZyBlYXJseS4iKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIEFTU0VSVChtX3NoZWV0
V2luZG93V2lsbENsb3NlT2JzZXJ2ZXIpOwogCiAgICAgLy8gVGhpcyBpcyBhIHdvcmthcm91bmQg
Zm9yIGFuIEFwcEtpdCBpc3N1ZTogPHJkYXI6Ly9wcm9ibGVtLzU5MTI1MzI5Pi4KICAgICAvLyBb
bV9zaGVldFdpbmRvdyBzaGVldFBhcmVudF0gaXMgbnVsbCBpZiB0aGUgcGFyZW50IGlzIG1pbmlt
aXplZCBvciB0aGUgaG9zdCBhcHAgaXMgaGlkZGVuLgpAQCAtMzMzLDEzICs0NDcsNyBAQCB2b2lk
IFNPQXV0aG9yaXphdGlvblNlc3Npb246OmRpc21pc3NWaWV3Q29udHJvbGxlcigpCiAgICAgICAg
IHJldHVybjsKICAgICB9CiAKLSAgICBbW05TTm90aWZpY2F0aW9uQ2VudGVyIGRlZmF1bHRDZW50
ZXJdIHJlbW92ZU9ic2VydmVyOm1fc2hlZXRXaW5kb3dXaWxsQ2xvc2VPYnNlcnZlci5nZXQoKV07
Ci0gICAgbV9zaGVldFdpbmRvd1dpbGxDbG9zZU9ic2VydmVyID0gbnVsbHB0cjsKLQotICAgIGF1
dG8gKnByZXNlbnRpbmdXaW5kb3cgPSBtX3NoZWV0V2luZG93LmdldCgpLnNoZWV0UGFyZW50Owot
ICAgIEFVVEhPUklaQVRJT05TRVNTSU9OX1JFTEVBU0VfTE9HKCJkaXNtaXNzVmlld0NvbnRyb2xs
ZXI6IENhbGxpbmcgZW5kU2hlZXQgb24gJXAgZm9yIHNoZWV0ICVwLiIsIHByZXNlbnRpbmdXaW5k
b3csIG1fc2hlZXRXaW5kb3cuZ2V0KCkpOwotICAgIFtwcmVzZW50aW5nV2luZG93IGVuZFNoZWV0
Om1fc2hlZXRXaW5kb3cuZ2V0KCldOwotICAgIG1fc2hlZXRXaW5kb3cgPSBudWxscHRyOworICAg
IGRpc21pc3NNb2RhbFNoZWV0SWZOZWNlc3NhcnkoKTsKICAgICBBVVRIT1JJWkFUSU9OU0VTU0lP
Tl9SRUxFQVNFX0xPRygiZGlzbWlzc1ZpZXdDb250cm9sbGVyOiBGaW5pc2hlZCBjYWxsIHdpdGgg
ZGVtaW5pYXR1cml6ZWQgb2JzZXJ2ZXIgKCVwKSBhbmQgSGlkZGVuIG9ic2VydmVyICglcCkiLCBt
X3ByZXNlbnRpbmdXaW5kb3dEaWREZW1pbmlhdHVyaXplT2JzZXJ2ZXIuZ2V0KCksIG1fYXBwbGlj
YXRpb25EaWRVbmhpZGVPYnNlcnZlci5nZXQoKSk7CiAjZWxpZiBQTEFURk9STShJT1MpCiAgICAg
W1ttX3ZpZXdDb250cm9sbGVyIHByZXNlbnRpbmdWaWV3Q29udHJvbGxlcl0gZGlzbWlzc1ZpZXdD
b250cm9sbGVyQW5pbWF0ZWQ6WUVTIGNvbXBsZXRpb246bmlsXTsKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJLaXQvVUlQcm9jZXNzL0NvY29hL1NPQXV0aG9yaXphdGlvbi9TdWJGcmFtZVNPQXV0aG9y
aXphdGlvblNlc3Npb24ubW0gYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9Db2NvYS9TT0F1dGhv
cml6YXRpb24vU3ViRnJhbWVTT0F1dGhvcml6YXRpb25TZXNzaW9uLm1tCmluZGV4IDIwMTM1YWQ4
ODY0Njc5YTYzMDIzMGIwMmU5NjFiZGRlZGUyYTA3NjIuLjYwYzBkOWRhZTBmMGQ2YWRjNTZjZmQx
YzhjZjEwZWY5NDNkNTFkMzUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0Nv
Y29hL1NPQXV0aG9yaXphdGlvbi9TdWJGcmFtZVNPQXV0aG9yaXphdGlvblNlc3Npb24ubW0KKysr
IGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQ29jb2EvU09BdXRob3JpemF0aW9uL1N1YkZyYW1l
U09BdXRob3JpemF0aW9uU2Vzc2lvbi5tbQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmln
aHQgKEMpIDIwMTkgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0
IChDKSAyMDE5LTIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJl
ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig
d2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl
IGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0zOCw2ICszOCw4IEBACiBuYW1lc3BhY2UgV2ViS2l0
IHsKIHVzaW5nIG5hbWVzcGFjZSBXZWJDb3JlOwogCisjZGVmaW5lIEFVVEhPUklaQVRJT05TRVNT
SU9OX1JFTEVBU0VfTE9HKGZtdCwgLi4uKSBSRUxFQVNFX0xPRyhBcHBTU08sICIlcCAtIFtJbml0
aWF0aW5nQWN0aW9uPSVzXVtTdGF0ZT0lc10gU3ViRnJhbWVTT0F1dGhvcml6YXRpb25TZXNzaW9u
OjoiIGZtdCwgdGhpcywgaW5pdGlhdGluZ0FjdGlvblN0cmluZygpLCBzdGF0ZVN0cmluZygpLCAj
I19fVkFfQVJHU19fKQorCiBuYW1lc3BhY2UgewogCiBjb25zdCBjaGFyKiBzb0F1dGhvcml6YXRp
b25Qb3N0RGlkU3RhcnRNZXNzYWdlVG9QYXJlbnQgPSAiPHNjcmlwdD5wYXJlbnQucG9zdE1lc3Nh
Z2UoJ1NPQXV0aG9yaXphdGlvbkRpZFN0YXJ0JywgJyonKTs8L3NjcmlwdD4iOwpAQCAtNjksNiAr
NzEsNyBAQCBTdWJGcmFtZVNPQXV0aG9yaXphdGlvblNlc3Npb246On5TdWJGcmFtZVNPQXV0aG9y
aXphdGlvblNlc3Npb24oKQogCiB2b2lkIFN1YkZyYW1lU09BdXRob3JpemF0aW9uU2Vzc2lvbjo6
ZmFsbEJhY2tUb1dlYlBhdGhJbnRlcm5hbCgpCiB7CisgICAgQVVUSE9SSVpBVElPTlNFU1NJT05f
UkVMRUFTRV9MT0coImZhbGxCYWNrVG9XZWJQYXRoSW50ZXJuYWw6IG5hdmlnYXRpb25BY3Rpb249
JXAiLCBuYXZpZ2F0aW9uQWN0aW9uKCkpOwogICAgIEFTU0VSVChuYXZpZ2F0aW9uQWN0aW9uKCkp
OwogICAgIGFwcGVuZFJlcXVlc3RUb0xvYWQoVVJMKG5hdmlnYXRpb25BY3Rpb24oKS0+cmVxdWVz
dCgpLnVybCgpKSwgVmVjdG9yIHsgcmVpbnRlcnByZXRfY2FzdDxjb25zdCB1aW50OF90Kj4oc29B
dXRob3JpemF0aW9uUG9zdERpZENhbmNlbE1lc3NhZ2VUb1BhcmVudCksIHN0cmxlbihzb0F1dGhv
cml6YXRpb25Qb3N0RGlkQ2FuY2VsTWVzc2FnZVRvUGFyZW50KSB9KTsKICAgICBhcHBlbmRSZXF1
ZXN0VG9Mb2FkKFVSTChuYXZpZ2F0aW9uQWN0aW9uKCktPnJlcXVlc3QoKS51cmwoKSksIFN0cmlu
ZyhuYXZpZ2F0aW9uQWN0aW9uKCktPnJlcXVlc3QoKS5odHRwUmVmZXJyZXIoKSkpOwpAQCAtNzYs
MTEgKzc5LDEzIEBAIHZvaWQgU3ViRnJhbWVTT0F1dGhvcml6YXRpb25TZXNzaW9uOjpmYWxsQmFj
a1RvV2ViUGF0aEludGVybmFsKCkKIAogdm9pZCBTdWJGcmFtZVNPQXV0aG9yaXphdGlvblNlc3Np
b246OmFib3J0SW50ZXJuYWwoKQogeworICAgIEFVVEhPUklaQVRJT05TRVNTSU9OX1JFTEVBU0Vf
TE9HKCJhYm9ydEludGVybmFsIik7CiAgICAgZmFsbEJhY2tUb1dlYlBhdGhJbnRlcm5hbCgpOwog
fQogCiB2b2lkIFN1YkZyYW1lU09BdXRob3JpemF0aW9uU2Vzc2lvbjo6Y29tcGxldGVJbnRlcm5h
bChjb25zdCBXZWJDb3JlOjpSZXNvdXJjZVJlc3BvbnNlJiByZXNwb25zZSwgTlNEYXRhICpkYXRh
KQogeworICAgIEFVVEhPUklaQVRJT05TRVNTSU9OX1JFTEVBU0VfTE9HKCJjb21wbGV0ZUludGVy
bmFsOiBodHRwU3RhdGU9JWQiLCByZXNwb25zZS5odHRwU3RhdHVzQ29kZSgpKTsKICAgICBpZiAo
cmVzcG9uc2UuaHR0cFN0YXR1c0NvZGUoKSAhPSAyMDApIHsKICAgICAgICAgZmFsbEJhY2tUb1dl
YlBhdGhJbnRlcm5hbCgpOwogICAgICAgICByZXR1cm47CkBAIC05MCw2ICs5NSw3IEBAIHZvaWQg
U3ViRnJhbWVTT0F1dGhvcml6YXRpb25TZXNzaW9uOjpjb21wbGV0ZUludGVybmFsKGNvbnN0IFdl
YkNvcmU6OlJlc291cmNlUmVzCiAKIHZvaWQgU3ViRnJhbWVTT0F1dGhvcml6YXRpb25TZXNzaW9u
OjpiZWZvcmVTdGFydCgpCiB7CisgICAgQVVUSE9SSVpBVElPTlNFU1NJT05fUkVMRUFTRV9MT0co
ImJlZm9yZVN0YXJ0Iik7CiAgICAgLy8gQ2FuY2VsbGVkIHRoZSBjdXJyZW50IGxvYWQgYmVmb3Jl
IGxvYWRpbmcgdGhlIGRhdGEgdG8gcG9zdCBTT0F1dGhvcml6YXRpb25EaWRTdGFydCB0byB0aGUg
cGFyZW50IGZyYW1lLgogICAgIGludm9rZUNhbGxiYWNrKHRydWUpOwogICAgIEFTU0VSVChuYXZp
Z2F0aW9uQWN0aW9uKCkpOwpAQCAtOTgsNiArMTA0LDcgQEAgdm9pZCBTdWJGcmFtZVNPQXV0aG9y
aXphdGlvblNlc3Npb246OmJlZm9yZVN0YXJ0KCkKIAogdm9pZCBTdWJGcmFtZVNPQXV0aG9yaXph
dGlvblNlc3Npb246OmRpZEZpbmlzaExvYWQoKQogeworICAgIEFVVEhPUklaQVRJT05TRVNTSU9O
X1JFTEVBU0VfTE9HKCJkaWRGaW5pc2hMb2FkIik7CiAgICAgYXV0byogcGFnZSA9IHRoaXMtPnBh
Z2UoKTsKICAgICBpZiAoIXBhZ2UpCiAgICAgICAgIHJldHVybjsKQEAgLTExOCw2ICsxMjUsNyBA
QCB2b2lkIFN1YkZyYW1lU09BdXRob3JpemF0aW9uU2Vzc2lvbjo6YXBwZW5kUmVxdWVzdFRvTG9h
ZChVUkwmJiB1cmwsIFN1cHBsZW1lbnQmJgogCiB2b2lkIFN1YkZyYW1lU09BdXRob3JpemF0aW9u
U2Vzc2lvbjo6bG9hZFJlcXVlc3RUb0ZyYW1lKCkKIHsKKyAgICBBVVRIT1JJWkFUSU9OU0VTU0lP
Tl9SRUxFQVNFX0xPRygibG9hZFJlcXVlc3RUb0ZyYW1lIik7CiAgICAgYXV0byogcGFnZSA9IHRo
aXMtPnBhZ2UoKTsKICAgICBpZiAoIXBhZ2UgfHwgbV9yZXF1ZXN0c1RvTG9hZC5pc0VtcHR5KCkp
CiAgICAgICAgIHJldHVybjsKQEAgLTEzNSw0ICsxNDMsNiBAQCB2b2lkIFN1YkZyYW1lU09BdXRo
b3JpemF0aW9uU2Vzc2lvbjo6bG9hZFJlcXVlc3RUb0ZyYW1lKCkKIAogfSAvLyBuYW1lc3BhY2Ug
V2ViS2l0CiAKKyN1bmRlZiBBVVRIT1JJWkFUSU9OU0VTU0lPTl9SRUxFQVNFX0xPRworCiAjZW5k
aWYKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0NvY29hL1NPQXV0aG9yaXph
dGlvbi9XS1NPQXV0aG9yaXphdGlvbkRlbGVnYXRlLm1tIGIvU291cmNlL1dlYktpdC9VSVByb2Nl
c3MvQ29jb2EvU09BdXRob3JpemF0aW9uL1dLU09BdXRob3JpemF0aW9uRGVsZWdhdGUubW0KaW5k
ZXggNTg4NGYxYTk3NjZjYzQyYjQ1ODEwZTMzMGQ5YTNhMjc2YjhmOGVhNS4uNzczNjdjN2U4YTU2
NmFhNjVlMWEzMjZlZjljNjUxMmY0ZTQxMTdjMSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9V
SVByb2Nlc3MvQ29jb2EvU09BdXRob3JpemF0aW9uL1dLU09BdXRob3JpemF0aW9uRGVsZWdhdGUu
bW0KKysrIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQ29jb2EvU09BdXRob3JpemF0aW9uL1dL
U09BdXRob3JpemF0aW9uRGVsZWdhdGUubW0KQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJp
Z2h0IChDKSAyMDE5IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdo
dCAoQykgMjAxOS0yMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBS
ZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9y
IHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRo
ZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMzIsOTAgKzMyLDExNiBAQAogI2ltcG9ydCAiV2Vi
UGFnZVByb3h5LmgiCiAjaW1wb3J0IDx3dGYvUnVuTG9vcC5oPgogCisjZGVmaW5lIFdLU09BVVRI
T1JJWkFUSU9OREVMRUdBVEVfUkVMRUFTRV9MT0coZm10LCAuLi4pIFJFTEVBU0VfTE9HKEFwcFNT
TywgIiVwIC0gV0tTT0F1dGhvcml6YXRpb25EZWxlZ2F0ZTo6IiBmbXQsICZzZWxmLCAjI19fVkFf
QVJHU19fKQorCiBAaW1wbGVtZW50YXRpb24gV0tTT0F1dGhvcml6YXRpb25EZWxlZ2F0ZQogCiAt
ICh2b2lkKWF1dGhvcml6YXRpb246KFNPQXV0aG9yaXphdGlvbiAqKWF1dGhvcml6YXRpb24gcHJl
c2VudFZpZXdDb250cm9sbGVyOihTT0F1dGhvcml6YXRpb25WaWV3Q29udHJvbGxlcil2aWV3Q29u
dHJvbGxlciB3aXRoQ29tcGxldGlvbjoodm9pZCAoXikoQk9PTCBzdWNjZXNzLCBOU0Vycm9yICpl
cnJvcikpY29tcGxldGlvbgogewogICAgIEFTU0VSVChSdW5Mb29wOjppc01haW4oKSAmJiBjb21w
bGV0aW9uKTsKKyAgICBXS1NPQVVUSE9SSVpBVElPTkRFTEVHQVRFX1JFTEVBU0VfTE9HKCJhdXRo
b3JpemF0aW9uIChhdXRob3JpemF0aW9uID0gJXAsIF9zZXNzaW9uID0gJXApIiwgYXV0aG9yaXph
dGlvbiwgX3Nlc3Npb24uZ2V0KCkpOwogICAgIGlmICghX3Nlc3Npb24pIHsKKyAgICAgICAgV0tT
T0FVVEhPUklaQVRJT05ERUxFR0FURV9SRUxFQVNFX0xPRygiYXV0aG9yaXphdGlvbjogTm8gc2Vz
c2lvbiwgc28gY29tcGxldGluZyB3aXRoIE5PIGFzIHN1Y2Nlc3Mgc3RhdGUuIik7CiAgICAgICAg
IEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwogICAgICAgICBjb21wbGV0aW9uKE5PLCBuaWwpOwogICAg
ICAgICByZXR1cm47CiAgICAgfQorICAgIFdLU09BVVRIT1JJWkFUSU9OREVMRUdBVEVfUkVMRUFT
RV9MT0coImF1dGhvcml6YXRpb246IHByZXNlbnRpbmdWaWV3Q29udHJvbGxlciAlcCIsIHZpZXdD
b250cm9sbGVyKTsKICAgICBfc2Vzc2lvbi0+cHJlc2VudFZpZXdDb250cm9sbGVyKHZpZXdDb250
cm9sbGVyLCBjb21wbGV0aW9uKTsKIH0KIAogLSAodm9pZClhdXRob3JpemF0aW9uRGlkTm90SGFu
ZGxlOihTT0F1dGhvcml6YXRpb24gKilhdXRob3JpemF0aW9uCiB7CiAgICAgQVNTRVJUKFJ1bkxv
b3A6OmlzTWFpbigpKTsKKyAgICBXS1NPQVVUSE9SSVpBVElPTkRFTEVHQVRFX1JFTEVBU0VfTE9H
KCJhdXRob3JpemF0aW9uRGlkTm90SGFuZGxlOiAoYXV0aG9yaXphdGlvbiA9ICVwLCBfc2Vzc2lv
biA9ICVwKSIsIGF1dGhvcml6YXRpb24sIF9zZXNzaW9uLmdldCgpKTsKICAgICBMT0dfRVJST1Io
IkNvdWxkIG5vdCBoYW5kbGUgQXBwU1NPLiIpOwogICAgIGlmICghX3Nlc3Npb24pIHsKKyAgICAg
ICAgV0tTT0FVVEhPUklaQVRJT05ERUxFR0FURV9SRUxFQVNFX0xPRygiYXV0aG9yaXphdGlvbkRp
ZE5vdEhhbmRsZTogTm8gc2Vzc2lvbiwgc28gcmV0dXJuaW5nIGVhcmx5LiIpOwogICAgICAgICBB
U1NFUlRfTk9UX1JFQUNIRUQoKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KKyAgICBXS1NPQVVU
SE9SSVpBVElPTkRFTEVHQVRFX1JFTEVBU0VfTE9HKCJhdXRob3JpemF0aW9uRGlkTm90SGFuZGxl
OiBGYWxsaW5nIGJhY2sgdG8gd2ViIHBhdGguIik7CiAgICAgX3Nlc3Npb24tPmZhbGxCYWNrVG9X
ZWJQYXRoKCk7CiB9CiAKIC0gKHZvaWQpYXV0aG9yaXphdGlvbkRpZENhbmNlbDooU09BdXRob3Jp
emF0aW9uICopYXV0aG9yaXphdGlvbgogewogICAgIEFTU0VSVChSdW5Mb29wOjppc01haW4oKSk7
CisgICAgV0tTT0FVVEhPUklaQVRJT05ERUxFR0FURV9SRUxFQVNFX0xPRygiYXV0aG9yaXphdGlv
bkRpZENhbmNlbDogKGF1dGhvcml6YXRpb24gPSAlcCwgX3Nlc3Npb24gPSAlcCkiLCBhdXRob3Jp
emF0aW9uLCBfc2Vzc2lvbi5nZXQoKSk7CiAgICAgaWYgKCFfc2Vzc2lvbikgeworICAgICAgICBX
S1NPQVVUSE9SSVpBVElPTkRFTEVHQVRFX1JFTEVBU0VfTE9HKCJhdXRob3JpemF0aW9uRGlkQ2Fu
Y2VsOiBObyBzZXNzaW9uLCBzbyByZXR1cm5pbmcgZWFybHkuIik7CiAgICAgICAgIEFTU0VSVF9O
T1RfUkVBQ0hFRCgpOwogICAgICAgICByZXR1cm47CiAgICAgfQorICAgIFdLU09BVVRIT1JJWkFU
SU9OREVMRUdBVEVfUkVMRUFTRV9MT0coImF1dGhvcml6YXRpb25EaWRDYW5jZWw6IEFib3J0aW5n
IHNlc3Npb24uIik7CiAgICAgX3Nlc3Npb24tPmFib3J0KCk7CiB9CiAKIC0gKHZvaWQpYXV0aG9y
aXphdGlvbkRpZENvbXBsZXRlOihTT0F1dGhvcml6YXRpb24gKilhdXRob3JpemF0aW9uCiB7CiAg
ICAgQVNTRVJUKFJ1bkxvb3A6OmlzTWFpbigpKTsKKyAgICBXS1NPQVVUSE9SSVpBVElPTkRFTEVH
QVRFX1JFTEVBU0VfTE9HKCJhdXRob3JpemF0aW9uRGlkQ29tcGxldGU6IChhdXRob3JpemF0aW9u
ID0gJXAsIF9zZXNzaW9uID0gJXApIiwgYXV0aG9yaXphdGlvbiwgX3Nlc3Npb24uZ2V0KCkpOwog
ICAgIExPR19FUlJPUigiQ29tcGxldGUgQXBwU1NPIHdpdGhvdXQgYW55IGRhdGEuIik7CiAgICAg
aWYgKCFfc2Vzc2lvbikgeworICAgICAgICBXS1NPQVVUSE9SSVpBVElPTkRFTEVHQVRFX1JFTEVB
U0VfTE9HKCJhdXRob3JpemF0aW9uRGlkQ29tcGxldGU6IE5vIHNlc3Npb24sIHNvIHJldHVybmlu
ZyBlYXJseS4iKTsKICAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CiAgICAgICAgIHJldHVy
bjsKICAgICB9CisgICAgV0tTT0FVVEhPUklaQVRJT05ERUxFR0FURV9SRUxFQVNFX0xPRygiYXV0
aG9yaXphdGlvbkRpZENvbXBsZXRlOiBGYWxsaW5nIGJhY2sgdG8gd2ViIHBhdGguIik7CiAgICAg
X3Nlc3Npb24tPmZhbGxCYWNrVG9XZWJQYXRoKCk7CiB9CiAKIC0gKHZvaWQpYXV0aG9yaXphdGlv
bjooU09BdXRob3JpemF0aW9uICopYXV0aG9yaXphdGlvbiBkaWRDb21wbGV0ZVdpdGhIVFRQQXV0
aG9yaXphdGlvbkhlYWRlcnM6KE5TRGljdGlvbmFyeSAqKWh0dHBBdXRob3JpemF0aW9uSGVhZGVy
cwogewogICAgIEFTU0VSVChSdW5Mb29wOjppc01haW4oKSk7CisgICAgV0tTT0FVVEhPUklaQVRJ
T05ERUxFR0FURV9SRUxFQVNFX0xPRygiYXV0aG9yaXphdGlvbjpkaWRDb21wbGV0ZVdpdGhIVFRQ
QXV0aG9yaXphdGlvbkhlYWRlcnM6IChhdXRob3JpemF0aW9uID0gJXAsIF9zZXNzaW9uID0gJXAp
IiwgYXV0aG9yaXphdGlvbiwgX3Nlc3Npb24uZ2V0KCkpOwogICAgIExPR19FUlJPUigiQ29tcGxl
dGUgQXBwU1NPIHdpdGggdW5leHBlY3RlZCBjYWxsYmFjay4iKTsKICAgICBpZiAoIV9zZXNzaW9u
KSB7CisgICAgICAgIFdLU09BVVRIT1JJWkFUSU9OREVMRUdBVEVfUkVMRUFTRV9MT0coImF1dGhv
cml6YXRpb246ZGlkQ29tcGxldGVXaXRoSFRUUEF1dGhvcml6YXRpb25IZWFkZXJzOiBObyBzZXNz
aW9uLCBzbyByZXR1cm5pbmcgZWFybHkuIik7CiAgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgp
OwogICAgICAgICByZXR1cm47CiAgICAgfQorICAgIFdLU09BVVRIT1JJWkFUSU9OREVMRUdBVEVf
UkVMRUFTRV9MT0coImF1dGhvcml6YXRpb246ZGlkQ29tcGxldGVXaXRoSFRUUEF1dGhvcml6YXRp
b25IZWFkZXJzOiBGYWxsaW5nIGJhY2sgdG8gd2ViIHBhdGguIik7CiAgICAgX3Nlc3Npb24tPmZh
bGxCYWNrVG9XZWJQYXRoKCk7CiB9CiAKIC0gKHZvaWQpYXV0aG9yaXphdGlvbjooU09BdXRob3Jp
emF0aW9uICopYXV0aG9yaXphdGlvbiBkaWRDb21wbGV0ZVdpdGhIVFRQUmVzcG9uc2U6KE5TSFRU
UFVSTFJlc3BvbnNlICopaHR0cFJlc3BvbnNlIGh0dHBCb2R5OihOU0RhdGEgKilodHRwQm9keQog
ewogICAgIEFTU0VSVChSdW5Mb29wOjppc01haW4oKSk7CisgICAgV0tTT0FVVEhPUklaQVRJT05E
RUxFR0FURV9SRUxFQVNFX0xPRygiYXV0aG9yaXphdGlvbjpkaWRDb21wbGV0ZVdpdGhIVFRQUmVz
cG9uc2U6IChhdXRob3JpemF0aW9uID0gJXAsIF9zZXNzaW9uID0gJXApIiwgYXV0aG9yaXphdGlv
biwgX3Nlc3Npb24uZ2V0KCkpOwogICAgIGlmICghX3Nlc3Npb24pIHsKKyAgICAgICAgV0tTT0FV
VEhPUklaQVRJT05ERUxFR0FURV9SRUxFQVNFX0xPRygiYXV0aG9yaXphdGlvbjpkaWRDb21wbGV0
ZVdpdGhIVFRQUmVzcG9uc2U6IE5vIHNlc3Npb24sIHNvIHJldHVybmluZyBlYXJseS4iKTsKICAg
ICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CiAgICAgICAgIHJldHVybjsKICAgICB9CisgICAg
V0tTT0FVVEhPUklaQVRJT05ERUxFR0FURV9SRUxFQVNFX0xPRygiYXV0aG9yaXphdGlvbjpkaWRD
b21wbGV0ZVdpdGhIVFRQUmVzcG9uc2U6IENvbXBsZXRpbmcuIik7CiAgICAgX3Nlc3Npb24tPmNv
bXBsZXRlKGh0dHBSZXNwb25zZSwgaHR0cEJvZHkpOwogfQogCiAtICh2b2lkKWF1dGhvcml6YXRp
b246KFNPQXV0aG9yaXphdGlvbiAqKWF1dGhvcml6YXRpb24gZGlkQ29tcGxldGVXaXRoRXJyb3I6
KE5TRXJyb3IgKillcnJvcgogewogICAgIEFTU0VSVChSdW5Mb29wOjppc01haW4oKSk7CisgICAg
V0tTT0FVVEhPUklaQVRJT05ERUxFR0FURV9SRUxFQVNFX0xPRygiYXV0aG9yaXphdGlvbjpkaWRD
b21wbGV0ZVdpdGhFcnJvcjogKGF1dGhvcml6YXRpb24gPSAlcCwgX3Nlc3Npb24gPSAlcCkiLCBh
dXRob3JpemF0aW9uLCBfc2Vzc2lvbi5nZXQoKSk7CiAgICAgTE9HX0VSUk9SKCJDb3VsZCBub3Qg
Y29tcGxldGUgQXBwU1NPOiAlZCIsIGVycm9yLmNvZGUpOwogICAgIGlmICghX3Nlc3Npb24pIHsK
KyAgICAgICAgV0tTT0FVVEhPUklaQVRJT05ERUxFR0FURV9SRUxFQVNFX0xPRygiYXV0aG9yaXph
dGlvbjpkaWRDb21wbGV0ZVdpdGhFcnJvcjogTm8gc2Vzc2lvbiwgc28gcmV0dXJuaW5nIGVhcmx5
LiIpOwogICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKICAgICAgICAgcmV0dXJuOwogICAg
IH0KKyAgICBXS1NPQVVUSE9SSVpBVElPTkRFTEVHQVRFX1JFTEVBU0VfTE9HKCJhdXRob3JpemF0
aW9uOmRpZENvbXBsZXRlV2l0aEVycm9yOiBGYWxsaW5nIGJhY2sgdG8gd2ViIHBhdGguIik7CiAg
ICAgX3Nlc3Npb24tPmZhbGxCYWNrVG9XZWJQYXRoKCk7CiB9CiAKIC0gKHZvaWQpc2V0U2Vzc2lv
bjooUmVmUHRyPFdlYktpdDo6U09BdXRob3JpemF0aW9uU2Vzc2lvbj4mJilzZXNzaW9uCiB7Cisg
ICAgUkVMRUFTRV9BU1NFUlQoUnVuTG9vcDo6aXNNYWluKCkpOworICAgIFdLU09BVVRIT1JJWkFU
SU9OREVMRUdBVEVfUkVMRUFTRV9MT0coInNldFNlc3Npb246IChleGlzdGluZyBzZXNzaW9uID0g
JXAsIG5ldyBzZXNzaW9uID0gJXApIiwgX3Nlc3Npb24uZ2V0KCksIHNlc3Npb24uZ2V0KCkpOwog
ICAgIF9zZXNzaW9uID0gV1RGTW92ZShzZXNzaW9uKTsKICAgICBpZiAoX3Nlc3Npb24pCiAgICAg
ICAgIF9zZXNzaW9uLT5zaG91bGRTdGFydCgpOwogfQotCiBAZW5kCiAKKyN1bmRlZiBXS1NPQVVU
SE9SSVpBVElPTkRFTEVHQVRFX1JFTEVBU0VfTE9HCisKICNlbmRpZgo=
</data>

          </attachment>
      

    </bug>

</bugzilla>