<?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>198726</bug_id>
          
          <creation_ts>2019-06-10 12:42:20 -0700</creation_ts>
          <short_desc>Roll out PAC cage</short_desc>
          <delta_ts>2019-08-22 13:21:42 -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>JavaScriptCore</component>
          <version>WebKit Nightly Build</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>WONTFIX</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>
          <dependson>198796</dependson>
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Saam Barati">saam</reporter>
          <assigned_to name="Saam Barati">saam</assigned_to>
          <cc>benjamin</cc>
    
    <cc>commit-queue</cc>
    
    <cc>ews-watchlist</cc>
    
    <cc>fpizlo</cc>
    
    <cc>ggaren</cc>
    
    <cc>gskachkov</cc>
    
    <cc>guijemont</cc>
    
    <cc>keith_miller</cc>
    
    <cc>mark.lam</cc>
    
    <cc>msaboff</cc>
    
    <cc>rmorisset</cc>
    
    <cc>ticaiolima</cc>
    
    <cc>tzagallo</cc>
    
    <cc>webkit-bug-importer</cc>
    
    <cc>ysuzuki</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1543424</commentid>
    <comment_count>0</comment_count>
    <who name="Saam Barati">saam</who>
    <bug_when>2019-06-10 12:42:20 -0700</bug_when>
    <thetext>...</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1543425</commentid>
    <comment_count>1</comment_count>
    <who name="Saam Barati">saam</who>
    <bug_when>2019-06-10 12:43:16 -0700</bug_when>
    <thetext>This will leave us with how things were, with Gigacage enabled, but no PAC cage.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1543472</commentid>
    <comment_count>2</comment_count>
      <attachid>371779</attachid>
    <who name="Saam Barati">saam</who>
    <bug_when>2019-06-10 14:40:11 -0700</bug_when>
    <thetext>Created attachment 371779
WIP

testing</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1543484</commentid>
    <comment_count>3</comment_count>
    <who name="EWS Watchlist">ews-watchlist</who>
    <bug_when>2019-06-10 15:01:44 -0700</bug_when>
    <thetext>Attachment 371779 did not pass style-queue:


ERROR: Source/JavaScriptCore/runtime/GenericTypedArrayViewInlines.h:36:  Code inside a namespace should not be indented.  [whitespace/indent] [4]
ERROR: Source/JavaScriptCore/runtime/GenericTypedArrayViewInlines.h:36:  Wrong number of spaces before statement. (expected: 8)  [whitespace/indent] [4]
ERROR: Source/JavaScriptCore/runtime/GenericTypedArrayViewInlines.h:37:  Wrong number of spaces before statement. (expected: 8)  [whitespace/indent] [4]
ERROR: Source/JavaScriptCore/runtime/ArrayBufferView.h:179:  Please replace ASSERT_WITH_SECURITY_IMPLICATION() with RELEASE_ASSERT_WITH_SECURITY_IMPLICATION().  [security/assertion] [5]
ERROR: Source/JavaScriptCore/runtime/ArrayBufferView.h:195:  Please replace ASSERT_WITH_SECURITY_IMPLICATION() with RELEASE_ASSERT_WITH_SECURITY_IMPLICATION().  [security/assertion] [5]
ERROR: Source/JavaScriptCore/runtime/JSArrayBufferView.cpp:53:  Wrong number of spaces before statement. (expected: 8)  [whitespace/indent] [4]
ERROR: Source/WTF/wtf/CagedPtr.h:39:  Should be indented on a separate line, with the colon or comma first on that line.  [whitespace/indent] [4]
ERROR: Source/WTF/wtf/CagedPtr.h:101:  Should be indented on a separate line, with the colon or comma first on that line.  [whitespace/indent] [4]
ERROR: Source/WTF/wtf/CagedPtr.h:102:  Should be indented on a separate line, with the colon or comma first on that line.  [whitespace/indent] [4]
ERROR: Source/WTF/wtf/CagedUniquePtr.h:84:  Should be indented on a separate line, with the colon or comma first on that line.  [whitespace/indent] [4]
ERROR: Source/WTF/wtf/CagedUniquePtr.h:135:  Should be indented on a separate line, with the colon or comma first on that line.  [whitespace/indent] [4]
ERROR: Source/JavaScriptCore/runtime/Options.h:496:  Code inside a namespace should not be indented.  [whitespace/indent] [4]
ERROR: Source/JavaScriptCore/runtime/Options.h:495:  One space before end of line comments  [whitespace/comments] [5]
ERROR: Source/JavaScriptCore/runtime/Options.h:495:  Should have a space between // and comment  [whitespace/comments] [4]
Total errors found: 14 in 44 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1543514</commentid>
    <comment_count>4</comment_count>
      <attachid>371790</attachid>
    <who name="Saam Barati">saam</who>
    <bug_when>2019-06-10 16:20:29 -0700</bug_when>
    <thetext>Created attachment 371790
patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1543515</commentid>
    <comment_count>5</comment_count>
    <who name="EWS Watchlist">ews-watchlist</who>
    <bug_when>2019-06-10 16:24:06 -0700</bug_when>
    <thetext>Attachment 371790 did not pass style-queue:


ERROR: Source/JavaScriptCore/ChangeLog:15:  Line contains tab character.  [whitespace/tab] [5]
ERROR: Source/JavaScriptCore/runtime/GenericTypedArrayViewInlines.h:36:  Code inside a namespace should not be indented.  [whitespace/indent] [4]
ERROR: Source/JavaScriptCore/runtime/GenericTypedArrayViewInlines.h:36:  Wrong number of spaces before statement. (expected: 8)  [whitespace/indent] [4]
ERROR: Source/JavaScriptCore/runtime/GenericTypedArrayViewInlines.h:37:  Wrong number of spaces before statement. (expected: 8)  [whitespace/indent] [4]
ERROR: Source/JavaScriptCore/runtime/ArrayBufferView.h:179:  Please replace ASSERT_WITH_SECURITY_IMPLICATION() with RELEASE_ASSERT_WITH_SECURITY_IMPLICATION().  [security/assertion] [5]
ERROR: Source/JavaScriptCore/runtime/ArrayBufferView.h:195:  Please replace ASSERT_WITH_SECURITY_IMPLICATION() with RELEASE_ASSERT_WITH_SECURITY_IMPLICATION().  [security/assertion] [5]
ERROR: Source/JavaScriptCore/runtime/JSArrayBufferView.cpp:53:  Wrong number of spaces before statement. (expected: 8)  [whitespace/indent] [4]
ERROR: Source/WTF/wtf/CagedPtr.h:39:  Should be indented on a separate line, with the colon or comma first on that line.  [whitespace/indent] [4]
ERROR: Source/WTF/wtf/CagedPtr.h:101:  Should be indented on a separate line, with the colon or comma first on that line.  [whitespace/indent] [4]
ERROR: Source/WTF/wtf/CagedPtr.h:102:  Should be indented on a separate line, with the colon or comma first on that line.  [whitespace/indent] [4]
ERROR: Source/WTF/wtf/CagedUniquePtr.h:84:  Should be indented on a separate line, with the colon or comma first on that line.  [whitespace/indent] [4]
ERROR: Source/WTF/wtf/CagedUniquePtr.h:135:  Should be indented on a separate line, with the colon or comma first on that line.  [whitespace/indent] [4]
ERROR: Source/JavaScriptCore/runtime/Options.h:496:  Code inside a namespace should not be indented.  [whitespace/indent] [4]
ERROR: Source/JavaScriptCore/runtime/Options.h:495:  One space before end of line comments  [whitespace/comments] [5]
ERROR: Source/JavaScriptCore/runtime/Options.h:495:  Should have a space between // and comment  [whitespace/comments] [4]
Total errors found: 15 in 47 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1543646</commentid>
    <comment_count>6</comment_count>
    <who name="Keith Miller">keith_miller</who>
    <bug_when>2019-06-11 01:29:15 -0700</bug_when>
    <thetext>Is this just a revert?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1543704</commentid>
    <comment_count>7</comment_count>
    <who name="Saam Barati">saam</who>
    <bug_when>2019-06-11 08:11:18 -0700</bug_when>
    <thetext>(In reply to Keith Miller from comment #6)
&gt; Is this just a revert?

Yes. See the changelog</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1543715</commentid>
    <comment_count>8</comment_count>
      <attachid>371790</attachid>
    <who name="Keith Miller">keith_miller</who>
    <bug_when>2019-06-11 08:44:15 -0700</bug_when>
    <thetext>Comment on attachment 371790
patch

r=me</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1543716</commentid>
    <comment_count>9</comment_count>
    <who name="Saam Barati">saam</who>
    <bug_when>2019-06-11 08:46:25 -0700</bug_when>
    <thetext>(In reply to Saam Barati from comment #7)
&gt; (In reply to Keith Miller from comment #6)
&gt; &gt; Is this just a revert?
&gt; 
&gt; Yes. See the changelog

Specifically, this rolls out:
r245064, r245145, r245168, r245313, r245432, r245622</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1543717</commentid>
    <comment_count>10</comment_count>
      <attachid>371848</attachid>
    <who name="Saam Barati">saam</who>
    <bug_when>2019-06-11 08:53:21 -0700</bug_when>
    <thetext>Created attachment 371848
patch for landing

Thanks for the review.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1543743</commentid>
    <comment_count>11</comment_count>
      <attachid>371848</attachid>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2019-06-11 10:18:54 -0700</bug_when>
    <thetext>Comment on attachment 371848
patch for landing

Clearing flags on attachment: 371848

Committed r246322: &lt;https://trac.webkit.org/changeset/246322&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1543744</commentid>
    <comment_count>12</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2019-06-11 10:18:56 -0700</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1543745</commentid>
    <comment_count>13</comment_count>
    <who name="Radar WebKit Bug Importer">webkit-bug-importer</who>
    <bug_when>2019-06-11 10:19:16 -0700</bug_when>
    <thetext>&lt;rdar://problem/51628704&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1544177</commentid>
    <comment_count>14</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2019-06-12 11:37:17 -0700</bug_when>
    <thetext>Re-opened since this is blocked by bug 198796</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>371779</attachid>
            <date>2019-06-10 14:40:11 -0700</date>
            <delta_ts>2019-06-10 16:20:29 -0700</delta_ts>
            <desc>WIP</desc>
            <filename>a-backup.diff</filename>
            <type>text/plain</type>
            <size>113126</size>
            <attacher name="Saam Barati">saam</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9hc3NlbWJsZXIvQ1BVLmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Fzc2VtYmxlci9DUFUuaAkocmV2aXNpb24gMjQ2Mjcx
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2Fzc2VtYmxlci9DUFUuaAkod29ya2luZyBjb3B5
KQpAQCAtNTYsMTUgKzU2LDYgQEAgY29uc3RleHByIGJvb2wgaXNBUk02NCgpCiAjZW5kaWYKIH0K
IAotY29uc3RleHByIGJvb2wgaXNBUk02NEUoKQotewotI2lmIENQVShBUk02NEUpCi0gICAgcmV0
dXJuIHRydWU7Ci0jZWxzZQotICAgIHJldHVybiBmYWxzZTsKLSNlbmRpZgotfQotCiBjb25zdGV4
cHIgYm9vbCBpc1g4NigpCiB7CiAjaWYgQ1BVKFg4Nl82NCkgfHwgQ1BVKFg4NikKSW5kZXg6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9hc3NlbWJsZXIvTWFjcm9Bc3NlbWJsZXJBUk02NEUuaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYXNzZW1ibGVyL01hY3JvQXNzZW1ibGVy
QVJNNjRFLmgJKHJldmlzaW9uIDI0NjI3MSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9hc3Nl
bWJsZXIvTWFjcm9Bc3NlbWJsZXJBUk02NEUuaAkod29ya2luZyBjb3B5KQpAQCAtODIsMjggKzgy
LDYgQEAgcHVibGljOgogICAgICAgICBtX2Fzc2VtYmxlci54cGFjaSh0YXJnZXQpOwogICAgIH0K
IAotICAgIEFMV0FZU19JTkxJTkUgdm9pZCB0YWdBcnJheVB0cihSZWdpc3RlcklEIGxlbmd0aCwg
UmVnaXN0ZXJJRCB0YXJnZXQpCi0gICAgewotICAgICAgICBtX2Fzc2VtYmxlci5wYWNkYih0YXJn
ZXQsIGxlbmd0aCk7Ci0gICAgfQotCi0gICAgQUxXQVlTX0lOTElORSB2b2lkIHVudGFnQXJyYXlQ
dHIoUmVnaXN0ZXJJRCBsZW5ndGgsIFJlZ2lzdGVySUQgdGFyZ2V0KQotICAgIHsKLSAgICAgICAg
bV9hc3NlbWJsZXIuYXV0ZGIodGFyZ2V0LCBsZW5ndGgpOwotICAgIH0KLQotICAgIEFMV0FZU19J
TkxJTkUgdm9pZCB1bnRhZ0FycmF5UHRyKEFkZHJlc3MgbGVuZ3RoLCBSZWdpc3RlcklEIHRhcmdl
dCkKLSAgICB7Ci0gICAgICAgIGF1dG8gbGVuZ3RoR1BSID0gZ2V0Q2FjaGVkRGF0YVRlbXBSZWdp
c3RlcklEQW5kSW52YWxpZGF0ZSgpOwotICAgICAgICBsb2FkMzIobGVuZ3RoLCBsZW5ndGhHUFIp
OwotICAgICAgICBtX2Fzc2VtYmxlci5hdXRkYih0YXJnZXQsIGxlbmd0aEdQUik7Ci0gICAgfQot
Ci0gICAgQUxXQVlTX0lOTElORSB2b2lkIHJlbW92ZUFycmF5UHRyVGFnKFJlZ2lzdGVySUQgdGFy
Z2V0KQotICAgIHsKLSAgICAgICAgbV9hc3NlbWJsZXIueHBhY2QodGFyZ2V0KTsKLSAgICB9Ci0K
ICAgICBzdGF0aWMgY29uc3QgUmVnaXN0ZXJJRCBJbnZhbGlkR1BSICA9IHN0YXRpY19jYXN0PFJl
Z2lzdGVySUQ+KC0xKTsKIAogICAgIGVudW0gY2xhc3MgQ2FsbFNpZ25hdHVyZVR5cGUgewpJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzTG93ZXJUb0Fpci5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzTG93ZXJUb0Fpci5jcHAJKHJldmlzaW9uIDI0
NjI3MSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0xvd2VyVG9BaXIuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC0xMjc0LDcgKzEyNzQsNiBAQCBwcml2YXRlOgogICAgICAgICAgICAgICAg
ICAgICBhcmcgPSB0bXAodmFsdWUudmFsdWUoKSk7CiAgICAgICAgICAgICAgICAgYnJlYWs7CiAg
ICAgICAgICAgICBjYXNlIFZhbHVlUmVwOjpTb21lUmVnaXN0ZXI6Ci0gICAgICAgICAgICBjYXNl
IFZhbHVlUmVwOjpTb21lTGF0ZVJlZ2lzdGVyOgogICAgICAgICAgICAgICAgIGFyZyA9IHRtcCh2
YWx1ZS52YWx1ZSgpKTsKICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgIGNhc2Ug
VmFsdWVSZXA6OlNvbWVSZWdpc3RlcldpdGhDbG9iYmVyOiB7CkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvYjMvQjNQYXRjaHBvaW50U3BlY2lhbC5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL2IzL0IzUGF0Y2hwb2ludFNwZWNpYWwuY3BwCShyZXZpc2lvbiAyNDYy
NzEpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNQYXRjaHBvaW50U3BlY2lhbC5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTEyMCw3ICsxMjAsNiBAQCBib29sIFBhdGNocG9pbnRTcGVjaWFs
OjphZG1pdHNTdGFjayhJbnN0CiAgICAgICAgIGNhc2UgVmFsdWVSZXA6OlNvbWVSZWdpc3RlcjoK
ICAgICAgICAgY2FzZSBWYWx1ZVJlcDo6U29tZVJlZ2lzdGVyV2l0aENsb2JiZXI6CiAgICAgICAg
IGNhc2UgVmFsdWVSZXA6OlNvbWVFYXJseVJlZ2lzdGVyOgotICAgICAgICBjYXNlIFZhbHVlUmVw
OjpTb21lTGF0ZVJlZ2lzdGVyOgogICAgICAgICBjYXNlIFZhbHVlUmVwOjpSZWdpc3RlcjoKICAg
ICAgICAgY2FzZSBWYWx1ZVJlcDo6TGF0ZVJlZ2lzdGVyOgogICAgICAgICAgICAgcmV0dXJuIGZh
bHNlOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzU3RhY2ttYXBTcGVjaWFsLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNTdGFja21hcFNwZWNp
YWwuY3BwCShyZXZpc2lvbiAyNDYyNzEpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNT
dGFja21hcFNwZWNpYWwuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMTMsNyArMTEzLDYgQEAgdm9p
ZCBTdGFja21hcFNwZWNpYWw6OmZvckVhY2hBcmdJbXBsKAogICAgICAgICAgICAgY2FzZSBWYWx1
ZVJlcDo6U29tZVJlZ2lzdGVyV2l0aENsb2JiZXI6CiAgICAgICAgICAgICAgICAgcm9sZSA9IEFy
Zzo6VXNlRGVmOwogICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgY2FzZSBWYWx1
ZVJlcDo6U29tZUxhdGVSZWdpc3RlcjoKICAgICAgICAgICAgIGNhc2UgVmFsdWVSZXA6OkxhdGVS
ZWdpc3RlcjoKICAgICAgICAgICAgICAgICByb2xlID0gQXJnOjpMYXRlVXNlOwogICAgICAgICAg
ICAgICAgIGJyZWFrOwpAQCAtMjU1LDcgKzI1NCw2IEBAIGJvb2wgU3RhY2ttYXBTcGVjaWFsOjpp
c0FyZ1ZhbGlkRm9yUmVwKEEKICAgICBjYXNlIFZhbHVlUmVwOjpTb21lUmVnaXN0ZXI6CiAgICAg
Y2FzZSBWYWx1ZVJlcDo6U29tZVJlZ2lzdGVyV2l0aENsb2JiZXI6CiAgICAgY2FzZSBWYWx1ZVJl
cDo6U29tZUVhcmx5UmVnaXN0ZXI6Ci0gICAgY2FzZSBWYWx1ZVJlcDo6U29tZUxhdGVSZWdpc3Rl
cjoKICAgICAgICAgcmV0dXJuIGFyZy5pc1RtcCgpOwogICAgIGNhc2UgVmFsdWVSZXA6OkxhdGVS
ZWdpc3RlcjoKICAgICBjYXNlIFZhbHVlUmVwOjpSZWdpc3RlcjoKSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9iMy9CM1ZhbGlkYXRlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvYjMvQjNWYWxpZGF0ZS5jcHAJKHJldmlzaW9uIDI0NjI3MSkKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9iMy9CM1ZhbGlkYXRlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNTgwLDcg
KzU4MCw2IEBAIHByaXZhdGU6CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgY2FzZSBWYWx1
ZVJlcDo6UmVnaXN0ZXI6CiAgICAgICAgIGNhc2UgVmFsdWVSZXA6OkxhdGVSZWdpc3RlcjoKLSAg
ICAgICAgY2FzZSBWYWx1ZVJlcDo6U29tZUxhdGVSZWdpc3RlcjoKICAgICAgICAgICAgIGlmICh2
YWx1ZS5yZXAoKS5raW5kKCkgPT0gVmFsdWVSZXA6OkxhdGVSZWdpc3RlcikKICAgICAgICAgICAg
ICAgICBWQUxJREFURShyb2xlID09IENvbnN0cmFpbnRSb2xlOjpVc2UsICgiQXQgIiwgKmNvbnRl
eHQsICI6ICIsIHZhbHVlKSk7CiAgICAgICAgICAgICBpZiAodmFsdWUucmVwKCkucmVnKCkuaXNH
UFIoKSkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1ZhbHVlUmVwLmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNWYWx1ZVJlcC5jcHAJKHJldmlz
aW9uIDI0NjI3MSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1ZhbHVlUmVwLmNwcAko
d29ya2luZyBjb3B5KQpAQCAtNDIsNyArNDIsNiBAQCB2b2lkIFZhbHVlUmVwOjphZGRVc2VkUmVn
aXN0ZXJzVG8oUmVnaXN0CiAgICAgY2FzZSBTb21lUmVnaXN0ZXI6CiAgICAgY2FzZSBTb21lUmVn
aXN0ZXJXaXRoQ2xvYmJlcjoKICAgICBjYXNlIFNvbWVFYXJseVJlZ2lzdGVyOgotICAgIGNhc2Ug
U29tZUxhdGVSZWdpc3RlcjoKICAgICBjYXNlIENvbnN0YW50OgogICAgICAgICByZXR1cm47CiAg
ICAgY2FzZSBMYXRlUmVnaXN0ZXI6CkBAIC03NSw3ICs3NCw2IEBAIHZvaWQgVmFsdWVSZXA6OmR1
bXAoUHJpbnRTdHJlYW0mIG91dCkgY28KICAgICBjYXNlIFNvbWVSZWdpc3RlcjoKICAgICBjYXNl
IFNvbWVSZWdpc3RlcldpdGhDbG9iYmVyOgogICAgIGNhc2UgU29tZUVhcmx5UmVnaXN0ZXI6Ci0g
ICAgY2FzZSBTb21lTGF0ZVJlZ2lzdGVyOgogICAgICAgICByZXR1cm47CiAgICAgY2FzZSBMYXRl
UmVnaXN0ZXI6CiAgICAgY2FzZSBSZWdpc3RlcjoKQEAgLTE4NSw5ICsxODMsNiBAQCB2b2lkIHBy
aW50SW50ZXJuYWwoUHJpbnRTdHJlYW0mIG91dCwgVmFsCiAgICAgY2FzZSBWYWx1ZVJlcDo6U29t
ZUVhcmx5UmVnaXN0ZXI6CiAgICAgICAgIG91dC5wcmludCgiU29tZUVhcmx5UmVnaXN0ZXIiKTsK
ICAgICAgICAgcmV0dXJuOwotICAgIGNhc2UgVmFsdWVSZXA6OlNvbWVMYXRlUmVnaXN0ZXI6Ci0g
ICAgICAgIG91dC5wcmludCgiU29tZUxhdGVSZWdpc3RlciIpOwotICAgICAgICByZXR1cm47CiAg
ICAgY2FzZSBWYWx1ZVJlcDo6UmVnaXN0ZXI6CiAgICAgICAgIG91dC5wcmludCgiUmVnaXN0ZXIi
KTsKICAgICAgICAgcmV0dXJuOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzVmFs
dWVSZXAuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNWYWx1ZVJl
cC5oCShyZXZpc2lvbiAyNDYyNzEpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNWYWx1
ZVJlcC5oCSh3b3JraW5nIGNvcHkpCkBAIC03NCwxMSArNzQsNyBAQCBwdWJsaWM6CiAgICAgICAg
IC8vIHRoYXQgdGhlIGRlZiBoYXBwZW5zIGJlZm9yZSBhbnkgb2YgdGhlIGVmZmVjdHMgb2YgdGhl
IHN0YWNrbWFwLiBUaGlzIGlzIG9ubHkgdmFsaWQgZm9yCiAgICAgICAgIC8vIHRoZSByZXN1bHQg
Y29uc3RyYWludCBvZiBhIFBhdGNocG9pbnQuCiAgICAgICAgIFNvbWVFYXJseVJlZ2lzdGVyLAot
Ci0gICAgICAgIC8vIEFzIGFuIGlucHV0IHJlcHJlc2VudGF0aW9uLCB0aGlzIHRlbGxzIHVzIHRo
YXQgQjMgc2hvdWxkIHBpY2sgc29tZSByZWdpc3RlciwgYnV0IGltcGxpZXMKLSAgICAgICAgLy8g
dGhlIHVzZSBoYXBwZW5zIGFmdGVyIGFueSBkZWZzLiBUaGlzIGlzIG9ubHkgd29ya3MgZm9yIHBh
dGNocG9pbnRzLgotICAgICAgICBTb21lTGF0ZVJlZ2lzdGVyLAotCisgICAgICAgIAogICAgICAg
ICAvLyBBcyBhbiBpbnB1dCByZXByZXNlbnRhdGlvbiwgdGhpcyBmb3JjZXMgYSBwYXJ0aWN1bGFy
IHJlZ2lzdGVyLiBBcyBhbiBvdXRwdXQKICAgICAgICAgLy8gcmVwcmVzZW50YXRpb24sIHRoaXMg
dGVsbHMgdXMgd2hhdCByZWdpc3RlciBCMyBwaWNrZWQuCiAgICAgICAgIFJlZ2lzdGVyLApAQCAt
MTE1LDcgKzExMSw3IEBAIHB1YmxpYzoKICAgICBWYWx1ZVJlcChLaW5kIGtpbmQpCiAgICAgICAg
IDogbV9raW5kKGtpbmQpCiAgICAgewotICAgICAgICBBU1NFUlQoa2luZCA9PSBXYXJtQW55IHx8
IGtpbmQgPT0gQ29sZEFueSB8fCBraW5kID09IExhdGVDb2xkQW55IHx8IGtpbmQgPT0gU29tZVJl
Z2lzdGVyIHx8IGtpbmQgPT0gU29tZVJlZ2lzdGVyV2l0aENsb2JiZXIgfHwga2luZCA9PSBTb21l
RWFybHlSZWdpc3RlciB8fCBraW5kID09IFNvbWVMYXRlUmVnaXN0ZXIpOworICAgICAgICBBU1NF
UlQoa2luZCA9PSBXYXJtQW55IHx8IGtpbmQgPT0gQ29sZEFueSB8fCBraW5kID09IExhdGVDb2xk
QW55IHx8IGtpbmQgPT0gU29tZVJlZ2lzdGVyIHx8IGtpbmQgPT0gU29tZVJlZ2lzdGVyV2l0aENs
b2JiZXIgfHwga2luZCA9PSBTb21lRWFybHlSZWdpc3Rlcik7CiAgICAgfQogCiAgICAgc3RhdGlj
IFZhbHVlUmVwIHJlZyhSZWcgcmVnKQpAQCAtMTg5LDcgKzE4NSw3IEBAIHB1YmxpYzoKIAogICAg
IGJvb2wgaXNBbnkoKSBjb25zdCB7IHJldHVybiBraW5kKCkgPT0gV2FybUFueSB8fCBraW5kKCkg
PT0gQ29sZEFueSB8fCBraW5kKCkgPT0gTGF0ZUNvbGRBbnk7IH0KIAotICAgIGJvb2wgaXNSZWco
KSBjb25zdCB7IHJldHVybiBraW5kKCkgPT0gUmVnaXN0ZXIgfHwga2luZCgpID09IExhdGVSZWdp
c3RlciB8fCBraW5kKCkgPT0gU29tZUxhdGVSZWdpc3RlcjsgfQorICAgIGJvb2wgaXNSZWcoKSBj
b25zdCB7IHJldHVybiBraW5kKCkgPT0gUmVnaXN0ZXIgfHwga2luZCgpID09IExhdGVSZWdpc3Rl
cjsgfQogICAgIAogICAgIFJlZyByZWcoKSBjb25zdAogICAgIHsKSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9kZmcvREZHT3BlcmF0aW9ucy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL2RmZy9ERkdPcGVyYXRpb25zLmNwcAkocmV2aXNpb24gMjQ2MjcxKQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdPcGVyYXRpb25zLmNwcAkod29ya2luZyBjb3B5
KQpAQCAtMTk4LDcgKzE5OCw3IEBAIGNoYXIqIG5ld1R5cGVkQXJyYXlXaXRoU2l6ZShFeGVjU3Rh
dGUqIGUKICAgICB9CiAgICAgCiAgICAgaWYgKHZlY3RvcikKLSAgICAgICAgcmV0dXJuIGJpdHdp
c2VfY2FzdDxjaGFyKj4oVmlld0NsYXNzOjpjcmVhdGVXaXRoRmFzdFZlY3RvcihleGVjLCBzdHJ1
Y3R1cmUsIHNpemUsIHVudGFnQXJyYXlQdHIodmVjdG9yLCBzaXplKSkpOworICAgICAgICByZXR1
cm4gYml0d2lzZV9jYXN0PGNoYXIqPihWaWV3Q2xhc3M6OmNyZWF0ZVdpdGhGYXN0VmVjdG9yKGV4
ZWMsIHN0cnVjdHVyZSwgc2l6ZSwgdmVjdG9yKSk7CiAKICAgICBSRUxFQVNFX0FORF9SRVRVUk4o
c2NvcGUsIGJpdHdpc2VfY2FzdDxjaGFyKj4oVmlld0NsYXNzOjpjcmVhdGUoZXhlYywgc3RydWN0
dXJlLCBzaXplKSkpOwogfQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVj
dWxhdGl2ZUpJVDY0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZn
L0RGR1NwZWN1bGF0aXZlSklUNjQuY3BwCShyZXZpc2lvbiAyNDYyNzEpCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklUNjQuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC00NjgyLDcgKzQ2ODIsNyBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlKE5vZGUqIG5v
ZGUpCiAgICAgICAgICAgICBtX2ppdC5icmFuY2g2NChNYWNyb0Fzc2VtYmxlcjo6QWJvdmVPckVx
dWFsLCB0MiwgdDEpKTsKIAogICAgICAgICBtX2ppdC5sb2FkUHRyKEpJVENvbXBpbGVyOjpBZGRy
ZXNzKGRhdGFWaWV3R1BSLCBKU0FycmF5QnVmZmVyVmlldzo6b2Zmc2V0T2ZWZWN0b3IoKSksIHQy
KTsKLSAgICAgICAgY2FnZVR5cGVkQXJyYXlTdG9yYWdlKGRhdGFWaWV3R1BSLCB0Mik7CisgICAg
ICAgIGNhZ2VUeXBlZEFycmF5U3RvcmFnZSh0Mik7CiAKICAgICAgICAgbV9qaXQuemVyb0V4dGVu
ZDMyVG9QdHIoaW5kZXhHUFIsIHQxKTsKICAgICAgICAgYXV0byBiYXNlSW5kZXggPSBKSVRDb21w
aWxlcjo6QmFzZUluZGV4KHQyLCB0MSwgTWFjcm9Bc3NlbWJsZXI6OlRpbWVzT25lKTsKQEAgLTQ4
NzgsNyArNDg3OCw3IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGUoTm9kZSogbm9kZSkK
ICAgICAgICAgICAgIG1faml0LmJyYW5jaDY0KE1hY3JvQXNzZW1ibGVyOjpBYm92ZU9yRXF1YWws
IHQyLCB0MSkpOwogCiAgICAgICAgIG1faml0LmxvYWRQdHIoSklUQ29tcGlsZXI6OkFkZHJlc3Mo
ZGF0YVZpZXdHUFIsIEpTQXJyYXlCdWZmZXJWaWV3OjpvZmZzZXRPZlZlY3RvcigpKSwgdDIpOwot
ICAgICAgICBjYWdlVHlwZWRBcnJheVN0b3JhZ2UoZGF0YVZpZXdHUFIsIHQyKTsKKyAgICAgICAg
Y2FnZVR5cGVkQXJyYXlTdG9yYWdlKHQyKTsKIAogICAgICAgICBtX2ppdC56ZXJvRXh0ZW5kMzJU
b1B0cihpbmRleEdQUiwgdDEpOwogICAgICAgICBhdXRvIGJhc2VJbmRleCA9IEpJVENvbXBpbGVy
OjpCYXNlSW5kZXgodDIsIHQxLCBNYWNyb0Fzc2VtYmxlcjo6VGltZXNPbmUpOwpJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVC5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVC5jcHAJKHJldmlz
aW9uIDI0NjI3MSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVK
SVQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00MCw3ICs0MCw2IEBACiAjaW5jbHVkZSAiREZHU2xv
d1BhdGhHZW5lcmF0b3IuaCIKICNpbmNsdWRlICJERkdTbmlwcGV0UGFyYW1zLmgiCiAjaW5jbHVk
ZSAiRGlyZWN0QXJndW1lbnRzLmgiCi0jaW5jbHVkZSAiRGlzYWxsb3dNYWNyb1NjcmF0Y2hSZWdp
c3RlclVzYWdlLmgiCiAjaW5jbHVkZSAiSklUQWRkR2VuZXJhdG9yLmgiCiAjaW5jbHVkZSAiSklU
Qml0QW5kR2VuZXJhdG9yLmgiCiAjaW5jbHVkZSAiSklUQml0T3JHZW5lcmF0b3IuaCIKQEAgLTI4
NzIsMjEgKzI4NzEsOSBAQCBKSVRDb21waWxlcjo6SnVtcCBTcGVjdWxhdGl2ZUpJVDo6anVtcEZv
CiAgICAgICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3MoYmFzZSwgSlNBcnJheUJ1
ZmZlclZpZXc6Om9mZnNldE9mTW9kZSgpKSwKICAgICAgICAgICAgICAgICBUcnVzdGVkSW1tMzIo
V2FzdGVmdWxUeXBlZEFycmF5KSk7CiAKLSAgICAgICAgICAgIEpJVENvbXBpbGVyOjpKdW1wIGhh
c051bGxWZWN0b3I7Ci0jaWYgIUdJR0FDQUdFX0VOQUJMRUQgJiYgQ1BVKEFSTTY0RSkKLSAgICAg
ICAgICAgIHsKLSAgICAgICAgICAgICAgICBHUFJSZWcgc2NyYXRjaCA9IG1faml0LnNjcmF0Y2hS
ZWdpc3RlcigpOwotICAgICAgICAgICAgICAgIERpc2FsbG93TWFjcm9TY3JhdGNoUmVnaXN0ZXJV
c2FnZSBkaXNhbGxvd1NjcmF0Y2gobV9qaXQpOwotCi0gICAgICAgICAgICAgICAgbV9qaXQubG9h
ZFB0cihNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhiYXNlLCBKU0FycmF5QnVmZmVyVmlldzo6b2Zm
c2V0T2ZWZWN0b3IoKSksIHNjcmF0Y2gpOwotICAgICAgICAgICAgICAgIG1faml0LnJlbW92ZUFy
cmF5UHRyVGFnKHNjcmF0Y2gpOwotICAgICAgICAgICAgICAgIGhhc051bGxWZWN0b3IgPSBtX2pp
dC5icmFuY2hUZXN0UHRyKE1hY3JvQXNzZW1ibGVyOjpaZXJvLCBzY3JhdGNoKTsKLSAgICAgICAg
ICAgIH0KLSNlbHNlIC8vICFHSUdBQ0FHRV9FTkFCTEVEICYmIENQVShBUk02NEUpCi0gICAgICAg
ICAgICBoYXNOdWxsVmVjdG9yID0gbV9qaXQuYnJhbmNoVGVzdFB0cigKKyAgICAgICAgICAgIEpJ
VENvbXBpbGVyOjpKdW1wIGhhc051bGxWZWN0b3IgPSBtX2ppdC5icmFuY2hUZXN0UHRyKAogICAg
ICAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpaZXJvLAogICAgICAgICAgICAgICAgIE1hY3Jv
QXNzZW1ibGVyOjpBZGRyZXNzKGJhc2UsIEpTQXJyYXlCdWZmZXJWaWV3OjpvZmZzZXRPZlZlY3Rv
cigpKSk7Ci0jZW5kaWYKICAgICAgICAgICAgIHNwZWN1bGF0aW9uQ2hlY2soVW5jb3VudGFibGUs
IEpTVmFsdWVTb3VyY2UoKSwgbm9kZSwgaGFzTnVsbFZlY3Rvcik7CiAgICAgICAgICAgICBub3RX
YXN0ZWZ1bC5saW5rKCZtX2ppdCk7CiAgICAgICAgIH0KQEAgLTY3NTgsMTAgKzY3NDUsOSBAQCB2
b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlQ29uc3RhbnRTdG9yCiAgICAgc3RvcmFnZVJlc3Vs
dChzdG9yYWdlR1BSLCBub2RlKTsKIH0KIAotdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y2FnZVR5cGVk
QXJyYXlTdG9yYWdlKEdQUlJlZyBiYXNlUmVnLCBHUFJSZWcgc3RvcmFnZVJlZykKK3ZvaWQgU3Bl
Y3VsYXRpdmVKSVQ6OmNhZ2VUeXBlZEFycmF5U3RvcmFnZShHUFJSZWcgc3RvcmFnZVJlZykKIHsK
ICNpZiBHSUdBQ0FHRV9FTkFCTEVECi0gICAgVU5VU0VEX1BBUkFNKGJhc2VSZWcpOwogICAgIGlm
ICghR2lnYWNhZ2U6OnNob3VsZEJlRW5hYmxlZCgpKQogICAgICAgICByZXR1cm47CiAgICAgCkBA
IC02NzczLDEwICs2NzU5LDcgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y2FnZVR5cGVkQXJyYXlT
dG9yYQogICAgIH0KICAgICAKICAgICBtX2ppdC5jYWdlKEdpZ2FjYWdlOjpQcmltaXRpdmUsIHN0
b3JhZ2VSZWcpOwotI2VsaWYgQ1BVKEFSTTY0RSkKLSAgICBtX2ppdC51bnRhZ0FycmF5UHRyKE1h
Y3JvQXNzZW1ibGVyOjpBZGRyZXNzKGJhc2VSZWcsIEpTQXJyYXlCdWZmZXJWaWV3OjpvZmZzZXRP
Zkxlbmd0aCgpKSwgc3RvcmFnZVJlZyk7CiAjZWxzZQotICAgIFVOVVNFRF9QQVJBTShiYXNlUmVn
KTsKICAgICBVTlVTRURfUEFSQU0oc3RvcmFnZVJlZyk7CiAjZW5kaWYKIH0KQEAgLTY4MDAsMTcg
KzY3ODMsMTYgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZUdldEluZGV4ZWRQcgogCiAg
ICAgICAgIG1faml0LmxvYWRQdHIoTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3Moc3RvcmFnZVJlZywg
U3RyaW5nSW1wbDo6ZGF0YU9mZnNldCgpKSwgc3RvcmFnZVJlZyk7CiAgICAgICAgIGJyZWFrOwot
Ci0gICAgZGVmYXVsdDogeworICAgICAgICAKKyAgICBkZWZhdWx0OgogICAgICAgICBhdXRvIHR5
cGVkQXJyYXlUeXBlID0gbm9kZS0+YXJyYXlNb2RlKCkudHlwZWRBcnJheVR5cGUoKTsKICAgICAg
ICAgQVNTRVJUX1VOVVNFRCh0eXBlZEFycmF5VHlwZSwgaXNUeXBlZFZpZXcodHlwZWRBcnJheVR5
cGUpKTsKIAogICAgICAgICBtX2ppdC5sb2FkUHRyKEpJVENvbXBpbGVyOjpBZGRyZXNzKGJhc2VS
ZWcsIEpTQXJyYXlCdWZmZXJWaWV3OjpvZmZzZXRPZlZlY3RvcigpKSwgc3RvcmFnZVJlZyk7Ci0g
ICAgICAgIGNhZ2VUeXBlZEFycmF5U3RvcmFnZShiYXNlUmVnLCBzdG9yYWdlUmVnKTsKKyAgICAg
ICAgY2FnZVR5cGVkQXJyYXlTdG9yYWdlKHN0b3JhZ2VSZWcpOwogICAgICAgICBicmVhazsKICAg
ICB9Ci0gICAgfQotCisgICAgCiAgICAgc3RvcmFnZVJlc3VsdChzdG9yYWdlUmVnLCBub2RlKTsK
IH0KIApAQCAtNjgzNSwyNCArNjgxNywxNyBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxl
R2V0VHlwZWRBcnJhCiAgICAgICAgIFRydXN0ZWRJbW0zMihXYXN0ZWZ1bFR5cGVkQXJyYXkpKTsK
IAogICAgIG1faml0LmxvYWRQdHIoTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3MoYmFzZUdQUiwgSlNB
cnJheUJ1ZmZlclZpZXc6Om9mZnNldE9mVmVjdG9yKCkpLCB2ZWN0b3JHUFIpOwotCi0gICAgLy8g
RklYTUU6IFRoaXMgc2hvdWxkIG1hc2sgdGhlIFBBQyBiaXRzCi0gICAgLy8gaHR0cHM6Ly9idWdz
LndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE5NzcwMQogICAgIEpJVENvbXBpbGVyOjpKdW1w
IG51bGxWZWN0b3IgPSBtX2ppdC5icmFuY2hUZXN0UHRyKEpJVENvbXBpbGVyOjpaZXJvLCB2ZWN0
b3JHUFIpOwogCiAgICAgbV9qaXQubG9hZFB0cihNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhiYXNl
R1BSLCBKU09iamVjdDo6YnV0dGVyZmx5T2Zmc2V0KCkpLCBkYXRhR1BSKTsKICAgICBtX2ppdC5j
YWdlKEdpZ2FjYWdlOjpKU1ZhbHVlLCBkYXRhR1BSKTsKIAotICAgIGNhZ2VUeXBlZEFycmF5U3Rv
cmFnZShiYXNlR1BSLCB2ZWN0b3JHUFIpOworICAgIGNhZ2VUeXBlZEFycmF5U3RvcmFnZSh2ZWN0
b3JHUFIpOwogCiAgICAgbV9qaXQubG9hZFB0cihNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhkYXRh
R1BSLCBCdXR0ZXJmbHk6Om9mZnNldE9mQXJyYXlCdWZmZXIoKSksIGFycmF5QnVmZmVyR1BSKTsK
ICAgICAvLyBGSVhNRTogVGhpcyBuZWVkcyBjYWdpbmcuCiAgICAgLy8gaHR0cHM6Ly9idWdzLndl
YmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE3NTUxNQogICAgIG1faml0LmxvYWRQdHIoTWFjcm9B
c3NlbWJsZXI6OkFkZHJlc3MoYXJyYXlCdWZmZXJHUFIsIEFycmF5QnVmZmVyOjpvZmZzZXRPZkRh
dGEoKSksIGRhdGFHUFIpOwotI2lmIENQVShBUk02NEUpCi0gICAgbV9qaXQucmVtb3ZlQXJyYXlQ
dHJUYWcoZGF0YUdQUik7Ci0jZW5kaWYKLQogICAgIG1faml0LnN1YlB0cihkYXRhR1BSLCB2ZWN0
b3JHUFIpOwogICAgIAogICAgIEpJVENvbXBpbGVyOjpKdW1wIGRvbmUgPSBtX2ppdC5qdW1wKCk7
CkBAIC05ODQ1LDExICs5ODIwLDYgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZU5ld1R5
cGVkQXJyYQogICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6QmFzZUluZGV4KHN0b3JhZ2VHUFIsIHNj
cmF0Y2hHUFIsIE1hY3JvQXNzZW1ibGVyOjpUaW1lc0ZvdXIpKTsKICAgICBtX2ppdC5icmFuY2hU
ZXN0MzIoTWFjcm9Bc3NlbWJsZXI6Ok5vblplcm8sIHNjcmF0Y2hHUFIpLmxpbmtUbyhsb29wLCAm
bV9qaXQpOwogICAgIGRvbmUubGluaygmbV9qaXQpOwotI2lmICFHSUdBQ0FHRV9FTkFCTEVEICYm
IENQVShBUk02NEUpCi0gICAgLy8gc2l6ZUdQUiBpcyBzdGlsbCBib3hlZCBhcyBhIG51bWJlciBh
bmQgdGhlcmUgaXMgbm8gMzItYml0IHZhcmlhbnQgb2YgdGhlIFBBQyBpbnN0cnVjdGlvbnMuCi0g
ICAgbV9qaXQuemVyb0V4dGVuZDMyVG9QdHIoc2l6ZUdQUiwgc2NyYXRjaEdQUik7Ci0gICAgbV9q
aXQudGFnQXJyYXlQdHIoc2NyYXRjaEdQUiwgc3RvcmFnZUdQUik7Ci0jZW5kaWYKIAogICAgIGF1
dG8gYnV0dGVyZmx5ID0gVHJ1c3RlZEltbVB0cihudWxscHRyKTsKICAgICBlbWl0QWxsb2NhdGVK
U09iamVjdDxKU0FycmF5QnVmZmVyVmlldz4oCkBAIC05ODcxLDcgKzk4NDEsNyBAQCB2b2lkIFNw
ZWN1bGF0aXZlSklUOjpjb21waWxlTmV3VHlwZWRBcnJhCiAgICAgYWRkU2xvd1BhdGhHZW5lcmF0
b3Ioc2xvd1BhdGhDYWxsKAogICAgICAgICBzbG93Q2FzZXMsIHRoaXMsIG9wZXJhdGlvbk5ld1R5
cGVkQXJyYXlXaXRoU2l6ZUZvclR5cGUodHlwZWRBcnJheVR5cGUpLAogICAgICAgICByZXN1bHRH
UFIsIHN0cnVjdHVyZSwgc2l6ZUdQUiwgc3RvcmFnZUdQUikpOwotCisgICAgCiAgICAgY2VsbFJl
c3VsdChyZXN1bHRHUFIsIG5vZGUpOwogfQogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZGZnL0RGR1NwZWN1bGF0aXZlSklULmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVC5oCShyZXZpc2lvbiAyNDYyNzEpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklULmgJKHdvcmtpbmcgY29weSkKQEAg
LTE2NTIsNyArMTY1Miw3IEBAIHB1YmxpYzoKICAgICB0ZW1wbGF0ZTxib29sIHN0cmljdD4KICAg
ICBHUFJSZWcgZmlsbFNwZWN1bGF0ZUludDMySW50ZXJuYWwoRWRnZSwgRGF0YUZvcm1hdCYgcmV0
dXJuRm9ybWF0KTsKICAgICAKLSAgICB2b2lkIGNhZ2VUeXBlZEFycmF5U3RvcmFnZShHUFJSZWcs
IEdQUlJlZyk7CisgICAgdm9pZCBjYWdlVHlwZWRBcnJheVN0b3JhZ2UoR1BSUmVnKTsKICAgICAK
ICAgICB2b2lkIHJlY29yZFNldExvY2FsKAogICAgICAgICBWaXJ0dWFsUmVnaXN0ZXIgYnl0ZWNv
ZGVSZWcsIFZpcnR1YWxSZWdpc3RlciBtYWNoaW5lUmVnLCBEYXRhRm9ybWF0IGZvcm1hdCkKSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMTG93ZXJERkdUb0IzLmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTExvd2VyREZHVG9CMy5jcHAJKHJl
dmlzaW9uIDI0NjI3MSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMTG93ZXJERkdU
b0IzLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzg4Myw3ICszODgzLDcgQEAgcHJpdmF0ZToKIAog
ICAgICAgICBERkdfQVNTRVJUKG1fZ3JhcGgsIG1fbm9kZSwgaXNUeXBlZFZpZXcobV9ub2RlLT5h
cnJheU1vZGUoKS50eXBlZEFycmF5VHlwZSgpKSwgbV9ub2RlLT5hcnJheU1vZGUoKS50eXBlZEFy
cmF5VHlwZSgpKTsKICAgICAgICAgTFZhbHVlIHZlY3RvciA9IG1fb3V0LmxvYWRQdHIoY2VsbCwg
bV9oZWFwcy5KU0FycmF5QnVmZmVyVmlld192ZWN0b3IpOwotICAgICAgICBzZXRTdG9yYWdlKGNh
Z2VkKEdpZ2FjYWdlOjpQcmltaXRpdmUsIHZlY3RvciwgY2VsbCkpOworICAgICAgICBzZXRTdG9y
YWdlKGNhZ2VkKEdpZ2FjYWdlOjpQcmltaXRpdmUsIHZlY3RvcikpOwogICAgIH0KICAgICAKICAg
ICB2b2lkIGNvbXBpbGVDaGVja0FycmF5KCkKQEAgLTM5MjcsMTUgKzM5MjcsMTQgQEAgcHJpdmF0
ZToKIAogICAgICAgICBtX291dC5hcHBlbmRUbyhub3ROdWxsLCBjb250aW51YXRpb24pOwogCi0g
ICAgICAgIExWYWx1ZSBidXR0ZXJmbHlQdHIgPSBjYWdlZChHaWdhY2FnZTo6SlNWYWx1ZSwgbV9v
dXQubG9hZFB0cihiYXNlUHRyLCBtX2hlYXBzLkpTT2JqZWN0X2J1dHRlcmZseSksIGJhc2VQdHIp
OworICAgICAgICBMVmFsdWUgYnV0dGVyZmx5UHRyID0gY2FnZWQoR2lnYWNhZ2U6OkpTVmFsdWUs
IG1fb3V0LmxvYWRQdHIoYmFzZVB0ciwgbV9oZWFwcy5KU09iamVjdF9idXR0ZXJmbHkpKTsKICAg
ICAgICAgTFZhbHVlIGFycmF5QnVmZmVyUHRyID0gbV9vdXQubG9hZFB0cihidXR0ZXJmbHlQdHIs
IG1faGVhcHMuQnV0dGVyZmx5X2FycmF5QnVmZmVyKTsKIAotICAgICAgICBMVmFsdWUgdmVjdG9y
UHRyID0gY2FnZWQoR2lnYWNhZ2U6OlByaW1pdGl2ZSwgdmVjdG9yLCBiYXNlUHRyKTsKKyAgICAg
ICAgTFZhbHVlIHZlY3RvclB0ciA9IGNhZ2VkKEdpZ2FjYWdlOjpQcmltaXRpdmUsIHZlY3Rvcik7
CiAKICAgICAgICAgLy8gRklYTUU6IFRoaXMgbmVlZHMgY2FnaW5nLgogICAgICAgICAvLyBodHRw
czovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTc1NTE1CiAgICAgICAgIExWYWx1
ZSBkYXRhUHRyID0gbV9vdXQubG9hZFB0cihhcnJheUJ1ZmZlclB0ciwgbV9oZWFwcy5BcnJheUJ1
ZmZlcl9kYXRhKTsKLSAgICAgICAgZGF0YVB0ciA9IHJlbW92ZUFycmF5UHRyVGFnKGRhdGFQdHIp
OwogCiAgICAgICAgIFZhbHVlRnJvbUJsb2NrIHdhc3RlZnVsT3V0ID0gbV9vdXQuYW5jaG9yKG1f
b3V0LnN1Yih2ZWN0b3JQdHIsIGRhdGFQdHIpKTsKIApAQCAtNjQ4NSwyMCArNjQ4NCw2IEBAIHBy
aXZhdGU6CiAgICAgICAgICAgICAgICAgbV9vdXQuaW50NjRaZXJvLAogICAgICAgICAgICAgICAg
IG1faGVhcHMudHlwZWRBcnJheVByb3BlcnRpZXMpOwogCi0jaWYgIUdJR0FDQUdFX0VOQUJMRUQg
JiYgQ1BVKEFSTTY0RSkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBMVmFsdWUgc2l6
ZVB0ciA9IG1fb3V0Lnplcm9FeHRQdHIoc2l6ZSk7Ci0gICAgICAgICAgICAgICAgUGF0Y2hwb2lu
dFZhbHVlKiBhdXRoZW50aWNhdGUgPSBtX291dC5wYXRjaHBvaW50KHBvaW50ZXJUeXBlKCkpOwot
ICAgICAgICAgICAgICAgIGF1dGhlbnRpY2F0ZS0+YXBwZW5kU29tZVJlZ2lzdGVyKHN0b3JhZ2Up
OwotICAgICAgICAgICAgICAgIGF1dGhlbnRpY2F0ZS0+YXBwZW5kKHNpemVQdHIsIEIzOjpWYWx1
ZVJlcChCMzo6VmFsdWVSZXA6OlNvbWVMYXRlUmVnaXN0ZXIpKTsKLSAgICAgICAgICAgICAgICBh
dXRoZW50aWNhdGUtPnNldEdlbmVyYXRvcihbPV0gKENDYWxsSGVscGVycyYgaml0LCBjb25zdCBT
dGFja21hcEdlbmVyYXRpb25QYXJhbXMmIHBhcmFtcykgewotICAgICAgICAgICAgICAgICAgICBq
aXQubW92ZShwYXJhbXNbMV0uZ3ByKCksIHBhcmFtc1swXS5ncHIoKSk7Ci0gICAgICAgICAgICAg
ICAgICAgIGppdC50YWdBcnJheVB0cihwYXJhbXNbMl0uZ3ByKCksIHBhcmFtc1swXS5ncHIoKSk7
Ci0gICAgICAgICAgICAgICAgfSk7Ci0gICAgICAgICAgICAgICAgc3RvcmFnZSA9IGF1dGhlbnRp
Y2F0ZTsKLSAgICAgICAgICAgIH0KLSNlbmRpZgotCiAgICAgICAgICAgICBWYWx1ZUZyb21CbG9j
ayBoYXZlU3RvcmFnZSA9IG1fb3V0LmFuY2hvcihzdG9yYWdlKTsKIAogICAgICAgICAgICAgTFZh
bHVlIGZhc3RSZXN1bHRWYWx1ZSA9CkBAIC0xMjcxNyw3ICsxMjcwMiw3IEBAIHByaXZhdGU6CiAg
ICAgICAgICAgICBpbmRleFRvQ2hlY2sgPSBtX291dC5hZGQoaW5kZXhUb0NoZWNrLCBtX291dC5j
b25zdEludDY0KGRhdGEuYnl0ZVNpemUgLSAxKSk7CiAgICAgICAgIHNwZWN1bGF0ZShPdXRPZkJv
dW5kcywgbm9WYWx1ZSgpLCBudWxscHRyLCBtX291dC5hYm92ZU9yRXF1YWwoaW5kZXhUb0NoZWNr
LCBsZW5ndGgpKTsKIAotICAgICAgICBMVmFsdWUgdmVjdG9yID0gY2FnZWQoR2lnYWNhZ2U6OlBy
aW1pdGl2ZSwgbV9vdXQubG9hZFB0cihkYXRhVmlldywgbV9oZWFwcy5KU0FycmF5QnVmZmVyVmll
d192ZWN0b3IpLCBkYXRhVmlldyk7CisgICAgICAgIExWYWx1ZSB2ZWN0b3IgPSBjYWdlZChHaWdh
Y2FnZTo6UHJpbWl0aXZlLCBtX291dC5sb2FkUHRyKGRhdGFWaWV3LCBtX2hlYXBzLkpTQXJyYXlC
dWZmZXJWaWV3X3ZlY3RvcikpOwogCiAgICAgICAgIFR5cGVkUG9pbnRlciBwb2ludGVyKG1faGVh
cHMudHlwZWRBcnJheVByb3BlcnRpZXMsIG1fb3V0LmFkZCh2ZWN0b3IsIG1fb3V0Lnplcm9FeHRQ
dHIoaW5kZXgpKSk7CiAKQEAgLTEyODc2LDcgKzEyODYxLDcgQEAgcHJpdmF0ZToKICAgICAgICAg
ICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CiAgICAgICAgIH0KIAotICAgICAgICBM
VmFsdWUgdmVjdG9yID0gY2FnZWQoR2lnYWNhZ2U6OlByaW1pdGl2ZSwgbV9vdXQubG9hZFB0cihk
YXRhVmlldywgbV9oZWFwcy5KU0FycmF5QnVmZmVyVmlld192ZWN0b3IpLCBkYXRhVmlldyk7Cisg
ICAgICAgIExWYWx1ZSB2ZWN0b3IgPSBjYWdlZChHaWdhY2FnZTo6UHJpbWl0aXZlLCBtX291dC5s
b2FkUHRyKGRhdGFWaWV3LCBtX2hlYXBzLkpTQXJyYXlCdWZmZXJWaWV3X3ZlY3RvcikpOwogICAg
ICAgICBUeXBlZFBvaW50ZXIgcG9pbnRlcihtX2hlYXBzLnR5cGVkQXJyYXlQcm9wZXJ0aWVzLCBt
X291dC5hZGQodmVjdG9yLCBtX291dC56ZXJvRXh0UHRyKGluZGV4KSkpOwogCiAgICAgICAgIGlm
IChkYXRhLmlzRmxvYXRpbmdQb2ludCkgewpAQCAtMTQxMjMsNDIgKzE0MTA4LDEwIEBAIHByaXZh
dGU6CiAgICAgICAgICAgICBtX291dC5hcHBlbmRUbyhwZXJmb3JtU3RvcmUsIGxhc3ROZXh0KTsK
ICAgICAgICAgfQogICAgIH0KLQotICAgIExWYWx1ZSB1bnRhZ0FycmF5UHRyKExWYWx1ZSBwdHIs
IExWYWx1ZSBzaXplKQotICAgIHsKLSNpZiBDUFUoQVJNNjRFKQotICAgICAgICBQYXRjaHBvaW50
VmFsdWUqIGF1dGhlbnRpY2F0ZSA9IG1fb3V0LnBhdGNocG9pbnQocG9pbnRlclR5cGUoKSk7Ci0g
ICAgICAgIGF1dGhlbnRpY2F0ZS0+YXBwZW5kU29tZVJlZ2lzdGVyKHB0cik7Ci0gICAgICAgIGF1
dGhlbnRpY2F0ZS0+YXBwZW5kKHNpemUsIEIzOjpWYWx1ZVJlcChCMzo6VmFsdWVSZXA6OlNvbWVM
YXRlUmVnaXN0ZXIpKTsKLSAgICAgICAgYXV0aGVudGljYXRlLT5zZXRHZW5lcmF0b3IoWz1dIChD
Q2FsbEhlbHBlcnMmIGppdCwgY29uc3QgU3RhY2ttYXBHZW5lcmF0aW9uUGFyYW1zJiBwYXJhbXMp
IHsKLSAgICAgICAgICAgIGppdC5tb3ZlKHBhcmFtc1sxXS5ncHIoKSwgcGFyYW1zWzBdLmdwcigp
KTsKLSAgICAgICAgICAgIGppdC51bnRhZ0FycmF5UHRyKHBhcmFtc1syXS5ncHIoKSwgcGFyYW1z
WzBdLmdwcigpKTsKLSAgICAgICAgfSk7Ci0gICAgICAgIHJldHVybiBhdXRoZW50aWNhdGU7Ci0j
ZWxzZQotICAgICAgICBVTlVTRURfUEFSQU0oc2l6ZSk7Ci0gICAgICAgIHJldHVybiBwdHI7Ci0j
ZW5kaWYKLSAgICB9Ci0KLSAgICBMVmFsdWUgcmVtb3ZlQXJyYXlQdHJUYWcoTFZhbHVlIHB0cikK
LSAgICB7Ci0jaWYgQ1BVKEFSTTY0RSkKLSAgICAgICAgUGF0Y2hwb2ludFZhbHVlKiBhdXRoZW50
aWNhdGUgPSBtX291dC5wYXRjaHBvaW50KHBvaW50ZXJUeXBlKCkpOwotICAgICAgICBhdXRoZW50
aWNhdGUtPmFwcGVuZFNvbWVSZWdpc3RlcihwdHIpOwotICAgICAgICBhdXRoZW50aWNhdGUtPnNl
dEdlbmVyYXRvcihbPV0gKENDYWxsSGVscGVycyYgaml0LCBjb25zdCBTdGFja21hcEdlbmVyYXRp
b25QYXJhbXMmIHBhcmFtcykgewotICAgICAgICAgICAgaml0Lm1vdmUocGFyYW1zWzFdLmdwcigp
LCBwYXJhbXNbMF0uZ3ByKCkpOwotICAgICAgICAgICAgaml0LnJlbW92ZUFycmF5UHRyVGFnKHBh
cmFtc1swXS5ncHIoKSk7Ci0gICAgICAgIH0pOwotICAgICAgICByZXR1cm4gYXV0aGVudGljYXRl
OwotI2VuZGlmCi0gICAgICAgIHJldHVybiBwdHI7Ci0gICAgfQotCi0gICAgTFZhbHVlIGNhZ2Vk
KEdpZ2FjYWdlOjpLaW5kIGtpbmQsIExWYWx1ZSBwdHIsIExWYWx1ZSBiYXNlKQorICAgIAorICAg
IExWYWx1ZSBjYWdlZChHaWdhY2FnZTo6S2luZCBraW5kLCBMVmFsdWUgcHRyKQogICAgIHsKICNp
ZiBHSUdBQ0FHRV9FTkFCTEVECi0gICAgICAgIFVOVVNFRF9QQVJBTShiYXNlKTsKICAgICAgICAg
aWYgKCFHaWdhY2FnZTo6aXNFbmFibGVkKGtpbmQpKQogICAgICAgICAgICAgcmV0dXJuIHB0cjsK
ICAgICAgICAgCkBAIC0xNDE4NywxNiArMTQxNDAsOCBAQCBwcml2YXRlOgogICAgICAgICAvLyBh
bmQgcG9zc2libHkgb3RoZXIgc21hcnQgdGhpbmdzIGlmIHdlIHdhbnQgdG8gYmUgYWJsZSB0byBy
ZW1vdmUgdGhpcyBvcGFxdWUuCiAgICAgICAgIC8vIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3No
b3dfYnVnLmNnaT9pZD0xNzU0OTMKICAgICAgICAgcmV0dXJuIG1fb3V0Lm9wYXF1ZShyZXN1bHQp
OwotI2VsaWYgQ1BVKEFSTTY0RSkKLSAgICAgICAgaWYgKGtpbmQgPT0gR2lnYWNhZ2U6OlByaW1p
dGl2ZSkgewotICAgICAgICAgICAgTFZhbHVlIHNpemUgPSBtX291dC5sb2FkMzIoYmFzZSwgbV9o
ZWFwcy5KU0FycmF5QnVmZmVyVmlld19sZW5ndGgpOwotICAgICAgICAgICAgcmV0dXJuIHVudGFn
QXJyYXlQdHIocHRyLCBzaXplKTsKLSAgICAgICAgfQotCi0gICAgICAgIHJldHVybiBwdHI7CiAj
ZWxzZQogICAgICAgICBVTlVTRURfUEFSQU0oa2luZCk7Ci0gICAgICAgIFVOVVNFRF9QQVJBTShi
YXNlKTsKICAgICAgICAgcmV0dXJuIHB0cjsKICNlbmRpZgogICAgIH0KQEAgLTE2NjEwLDkgKzE2
NTU1LDYgQEAgcHJpdmF0ZToKIAogICAgICAgICBMQmFzaWNCbG9jayBsYXN0TmV4dCA9IG1fb3V0
LmFwcGVuZFRvKGlzV2FzdGVmdWwsIGNvbnRpbnVhdGlvbik7CiAgICAgICAgIExWYWx1ZSB2ZWN0
b3IgPSBtX291dC5sb2FkUHRyKGJhc2UsIG1faGVhcHMuSlNBcnJheUJ1ZmZlclZpZXdfdmVjdG9y
KTsKLSAgICAgICAgLy8gRklYTUU6IFdlIGNvdWxkIHByb2JhYmx5IG1ha2UgdGhpcyBhIG1hc2su
Ci0gICAgICAgIC8vIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xOTc3
MDEKLSAgICAgICAgdmVjdG9yID0gcmVtb3ZlQXJyYXlQdHJUYWcodmVjdG9yKTsKICAgICAgICAg
c3BlY3VsYXRlKFVuY291bnRhYmxlLCBqc1ZhbHVlVmFsdWUodmVjdG9yKSwgbV9ub2RlLCBtX291
dC5pc1plcm82NCh2ZWN0b3IpKTsKICAgICAgICAgbV9vdXQuanVtcChjb250aW51YXRpb24pOwog
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9Db25zZXJ2YXRpdmVSb290cy5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvQ29uc2VydmF0aXZlUm9v
dHMuY3BwCShyZXZpc2lvbiAyNDYyNzEpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9D
b25zZXJ2YXRpdmVSb290cy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTY4LDcgKzY4LDYgQEAgdm9p
ZCBDb25zZXJ2YXRpdmVSb290czo6Z3JvdygpCiB0ZW1wbGF0ZTx0eXBlbmFtZSBNYXJrSG9vaz4K
IGlubGluZSB2b2lkIENvbnNlcnZhdGl2ZVJvb3RzOjpnZW5lcmljQWRkUG9pbnRlcih2b2lkKiBw
LCBIZWFwVmVyc2lvbiBtYXJraW5nVmVyc2lvbiwgSGVhcFZlcnNpb24gbmV3bHlBbGxvY2F0ZWRW
ZXJzaW9uLCBUaW55Qmxvb21GaWx0ZXIgZmlsdGVyLCBNYXJrSG9vayYgbWFya0hvb2spCiB7Ci0g
ICAgcCA9IHJlbW92ZUFycmF5UHRyVGFnKHApOwogICAgIG1hcmtIb29rLm1hcmsocCk7CiAKICAg
ICBIZWFwVXRpbDo6ZmluZEdDT2JqZWN0UG9pbnRlcnNGb3JNYXJraW5nKApJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL2ppdC9Bc3NlbWJseUhlbHBlcnMuaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvaml0L0Fzc2VtYmx5SGVscGVycy5oCShyZXZpc2lvbiAyNDYyNzEp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0Fzc2VtYmx5SGVscGVycy5oCSh3b3JraW5n
IGNvcHkpCkBAIC0xNTY5LDcgKzE1NjksNyBAQCBwdWJsaWM6CiAjZW5kaWYKICAgICB9CiAgICAg
Ci0gICAgdm9pZCBjYWdlQ29uZGl0aW9uYWxseShHaWdhY2FnZTo6S2luZCBraW5kLCBHUFJSZWcg
c3RvcmFnZSwgR1BSUmVnIHNjcmF0Y2hPckxlbmd0aCkKKyAgICB2b2lkIGNhZ2VDb25kaXRpb25h
bGx5KEdpZ2FjYWdlOjpLaW5kIGtpbmQsIEdQUlJlZyBzdG9yYWdlLCBHUFJSZWcgc2NyYXRjaCkK
ICAgICB7CiAjaWYgR0lHQUNBR0VfRU5BQkxFRAogICAgICAgICBpZiAoIUdpZ2FjYWdlOjppc0Vu
YWJsZWQoa2luZCkpCkBAIC0xNTc4LDE4ICsxNTc4LDE1IEBAIHB1YmxpYzoKICAgICAgICAgaWYg
KGtpbmQgIT0gR2lnYWNhZ2U6OlByaW1pdGl2ZSB8fCBHaWdhY2FnZTo6aXNEaXNhYmxpbmdQcmlt
aXRpdmVHaWdhY2FnZURpc2FibGVkKCkpCiAgICAgICAgICAgICByZXR1cm4gY2FnZShraW5kLCBz
dG9yYWdlKTsKICAgICAgICAgCi0gICAgICAgIGxvYWRQdHIoJkdpZ2FjYWdlOjpiYXNlUHRyKGtp
bmQpLCBzY3JhdGNoT3JMZW5ndGgpOwotICAgICAgICBKdW1wIGRvbmUgPSBicmFuY2hUZXN0UHRy
KFplcm8sIHNjcmF0Y2hPckxlbmd0aCk7CisgICAgICAgIGxvYWRQdHIoJkdpZ2FjYWdlOjpiYXNl
UHRyKGtpbmQpLCBzY3JhdGNoKTsKKyAgICAgICAgSnVtcCBkb25lID0gYnJhbmNoVGVzdFB0ciha
ZXJvLCBzY3JhdGNoKTsKICAgICAgICAgYW5kUHRyKFRydXN0ZWRJbW1QdHIoR2lnYWNhZ2U6Om1h
c2soa2luZCkpLCBzdG9yYWdlKTsKLSAgICAgICAgYWRkUHRyKHNjcmF0Y2hPckxlbmd0aCwgc3Rv
cmFnZSk7CisgICAgICAgIGFkZFB0cihzY3JhdGNoLCBzdG9yYWdlKTsKICAgICAgICAgZG9uZS5s
aW5rKHRoaXMpOwotI2VsaWYgQ1BVKEFSTTY0RSkKLSAgICAgICAgaWYgKGtpbmQgPT0gR2lnYWNh
Z2U6OlByaW1pdGl2ZSkKLSAgICAgICAgICAgIHVudGFnQXJyYXlQdHIoc2NyYXRjaE9yTGVuZ3Ro
LCBzdG9yYWdlKTsKICNlbHNlCiAgICAgICAgIFVOVVNFRF9QQVJBTShraW5kKTsKICAgICAgICAg
VU5VU0VEX1BBUkFNKHN0b3JhZ2UpOwotICAgICAgICBVTlVTRURfUEFSQU0oc2NyYXRjaE9yTGVu
Z3RoKTsKKyAgICAgICAgVU5VU0VEX1BBUkFNKHNjcmF0Y2gpOwogI2VuZGlmCiAgICAgfQogCklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0ludHJpbnNpY0VtaXR0ZXIuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSW50cmluc2ljRW1pdHRlci5jcHAJ
KHJldmlzaW9uIDI0NjI3MSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSW50cmluc2lj
RW1pdHRlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTExNCwxNCArMTE0LDggQEAgdm9pZCBJbnRy
aW5zaWNHZXR0ZXJBY2Nlc3NDYXNlOjplbWl0SW50cgogCiAgICAgICAgIGppdC5sb2FkUHRyKE1h
Y3JvQXNzZW1ibGVyOjpBZGRyZXNzKGJhc2VHUFIsIEpTT2JqZWN0OjpidXR0ZXJmbHlPZmZzZXQo
KSksIHNjcmF0Y2hHUFIpOwogICAgICAgICBqaXQubG9hZFB0cihNYWNyb0Fzc2VtYmxlcjo6QWRk
cmVzcyhiYXNlR1BSLCBKU0FycmF5QnVmZmVyVmlldzo6b2Zmc2V0T2ZWZWN0b3IoKSksIHZhbHVl
R1BSKTsKLSNpZiBDUFUoQVJNNjRFKQotICAgICAgICBqaXQucmVtb3ZlQXJyYXlQdHJUYWcodmFs
dWVHUFIpOwotI2VuZGlmCiAgICAgICAgIGppdC5sb2FkUHRyKE1hY3JvQXNzZW1ibGVyOjpBZGRy
ZXNzKHNjcmF0Y2hHUFIsIEJ1dHRlcmZseTo6b2Zmc2V0T2ZBcnJheUJ1ZmZlcigpKSwgc2NyYXRj
aEdQUik7CiAgICAgICAgIGppdC5sb2FkUHRyKE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKHNjcmF0
Y2hHUFIsIEFycmF5QnVmZmVyOjpvZmZzZXRPZkRhdGEoKSksIHNjcmF0Y2hHUFIpOwotI2lmIENQ
VShBUk02NEUpCi0gICAgICAgIGppdC5yZW1vdmVBcnJheVB0clRhZyhzY3JhdGNoR1BSKTsKLSNl
bmRpZgogICAgICAgICBqaXQuc3ViUHRyKHNjcmF0Y2hHUFIsIHZhbHVlR1BSKTsKIAogICAgICAg
ICBDQ2FsbEhlbHBlcnM6Okp1bXAgZG9uZSA9IGppdC5qdW1wKCk7CkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvaml0L0pJVFByb3BlcnR5QWNjZXNzLmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVFByb3BlcnR5QWNjZXNzLmNwcAkocmV2aXNpb24gMjQ2
MjcxKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRQcm9wZXJ0eUFjY2Vzcy5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTE1ODksNyArMTU4OSw3IEBAIEpJVDo6SnVtcExpc3QgSklUOjpl
bWl0RGlyZWN0QXJndW1lbnRzR2UKICAgICBsb2FkMzIoQWRkcmVzcyhiYXNlLCBEaXJlY3RBcmd1
bWVudHM6Om9mZnNldE9mTGVuZ3RoKCkpLCBzY3JhdGNoMik7CiAgICAgc2xvd0Nhc2VzLmFwcGVu
ZChicmFuY2gzMihBYm92ZU9yRXF1YWwsIHByb3BlcnR5LCBzY3JhdGNoMikpOwogICAgIHNsb3dD
YXNlcy5hcHBlbmQoYnJhbmNoVGVzdFB0cihOb25aZXJvLCBBZGRyZXNzKGJhc2UsIERpcmVjdEFy
Z3VtZW50czo6b2Zmc2V0T2ZNYXBwZWRBcmd1bWVudHMoKSkpKTsKLQorICAgIAogICAgIGxvYWRW
YWx1ZShCYXNlSW5kZXgoYmFzZSwgcHJvcGVydHksIFRpbWVzRWlnaHQsIERpcmVjdEFyZ3VtZW50
czo6c3RvcmFnZU9mZnNldCgpKSwgcmVzdWx0KTsKICAgICAKICAgICByZXR1cm4gc2xvd0Nhc2Vz
OwpAQCAtMTY2OSw4ICsxNjY5LDcgQEAgSklUOjpKdW1wTGlzdCBKSVQ6OmVtaXRJbnRUeXBlZEFy
cmF5R2V0QgogICAgIAogICAgIGxvYWQ4KEFkZHJlc3MoYmFzZSwgSlNDZWxsOjp0eXBlSW5mb1R5
cGVPZmZzZXQoKSksIHNjcmF0Y2gpOwogICAgIGJhZFR5cGUgPSBwYXRjaGFibGVCcmFuY2gzMihO
b3RFcXVhbCwgc2NyYXRjaCwgVHJ1c3RlZEltbTMyKHR5cGVGb3JUeXBlZEFycmF5VHlwZSh0eXBl
KSkpOwotICAgIGxvYWQzMihBZGRyZXNzKGJhc2UsIEpTQXJyYXlCdWZmZXJWaWV3OjpvZmZzZXRP
Zkxlbmd0aCgpKSwgc2NyYXRjaDIpOwotICAgIHNsb3dDYXNlcy5hcHBlbmQoYnJhbmNoMzIoQWJv
dmVPckVxdWFsLCBwcm9wZXJ0eSwgc2NyYXRjaDIpKTsKKyAgICBzbG93Q2FzZXMuYXBwZW5kKGJy
YW5jaDMyKEFib3ZlT3JFcXVhbCwgcHJvcGVydHksIEFkZHJlc3MoYmFzZSwgSlNBcnJheUJ1ZmZl
clZpZXc6Om9mZnNldE9mTGVuZ3RoKCkpKSk7CiAgICAgbG9hZFB0cihBZGRyZXNzKGJhc2UsIEpT
QXJyYXlCdWZmZXJWaWV3OjpvZmZzZXRPZlZlY3RvcigpKSwgc2NyYXRjaCk7CiAgICAgY2FnZUNv
bmRpdGlvbmFsbHkoR2lnYWNhZ2U6OlByaW1pdGl2ZSwgc2NyYXRjaCwgc2NyYXRjaDIpOwogCkBA
IC0xNzMzLDggKzE3MzIsNyBAQCBKSVQ6Okp1bXBMaXN0IEpJVDo6ZW1pdEZsb2F0VHlwZWRBcnJh
eUdlCiAKICAgICBsb2FkOChBZGRyZXNzKGJhc2UsIEpTQ2VsbDo6dHlwZUluZm9UeXBlT2Zmc2V0
KCkpLCBzY3JhdGNoKTsKICAgICBiYWRUeXBlID0gcGF0Y2hhYmxlQnJhbmNoMzIoTm90RXF1YWws
IHNjcmF0Y2gsIFRydXN0ZWRJbW0zMih0eXBlRm9yVHlwZWRBcnJheVR5cGUodHlwZSkpKTsKLSAg
ICBsb2FkMzIoQWRkcmVzcyhiYXNlLCBKU0FycmF5QnVmZmVyVmlldzo6b2Zmc2V0T2ZMZW5ndGgo
KSksIHNjcmF0Y2gyKTsKLSAgICBzbG93Q2FzZXMuYXBwZW5kKGJyYW5jaDMyKEFib3ZlT3JFcXVh
bCwgcHJvcGVydHksIHNjcmF0Y2gyKSk7CisgICAgc2xvd0Nhc2VzLmFwcGVuZChicmFuY2gzMihB
Ym92ZU9yRXF1YWwsIHByb3BlcnR5LCBBZGRyZXNzKGJhc2UsIEpTQXJyYXlCdWZmZXJWaWV3Ojpv
ZmZzZXRPZkxlbmd0aCgpKSkpOwogICAgIGxvYWRQdHIoQWRkcmVzcyhiYXNlLCBKU0FycmF5QnVm
ZmVyVmlldzo6b2Zmc2V0T2ZWZWN0b3IoKSksIHNjcmF0Y2gpOwogICAgIGNhZ2VDb25kaXRpb25h
bGx5KEdpZ2FjYWdlOjpQcmltaXRpdmUsIHNjcmF0Y2gsIHNjcmF0Y2gyKTsKICAgICAKQEAgLTE3
ODQsOCArMTc4Miw3IEBAIEpJVDo6SnVtcExpc3QgSklUOjplbWl0SW50VHlwZWRBcnJheVB1dEIK
ICAgICAKICAgICBsb2FkOChBZGRyZXNzKGJhc2UsIEpTQ2VsbDo6dHlwZUluZm9UeXBlT2Zmc2V0
KCkpLCBlYXJseVNjcmF0Y2gpOwogICAgIGJhZFR5cGUgPSBwYXRjaGFibGVCcmFuY2gzMihOb3RF
cXVhbCwgZWFybHlTY3JhdGNoLCBUcnVzdGVkSW1tMzIodHlwZUZvclR5cGVkQXJyYXlUeXBlKHR5
cGUpKSk7Ci0gICAgbG9hZDMyKEFkZHJlc3MoYmFzZSwgSlNBcnJheUJ1ZmZlclZpZXc6Om9mZnNl
dE9mTGVuZ3RoKCkpLCBsYXRlU2NyYXRjaDIpOwotICAgIEp1bXAgaW5Cb3VuZHMgPSBicmFuY2gz
MihCZWxvdywgcHJvcGVydHksIGxhdGVTY3JhdGNoMik7CisgICAgSnVtcCBpbkJvdW5kcyA9IGJy
YW5jaDMyKEJlbG93LCBwcm9wZXJ0eSwgQWRkcmVzcyhiYXNlLCBKU0FycmF5QnVmZmVyVmlldzo6
b2Zmc2V0T2ZMZW5ndGgoKSkpOwogICAgIGVtaXRBcnJheVByb2ZpbGVPdXRPZkJvdW5kc1NwZWNp
YWxDYXNlKHByb2ZpbGUpOwogICAgIHNsb3dDYXNlcy5hcHBlbmQoanVtcCgpKTsKICAgICBpbkJv
dW5kcy5saW5rKHRoaXMpOwpAQCAtMTg2MCw4ICsxODU3LDcgQEAgSklUOjpKdW1wTGlzdCBKSVQ6
OmVtaXRGbG9hdFR5cGVkQXJyYXlQdQogICAgIAogICAgIGxvYWQ4KEFkZHJlc3MoYmFzZSwgSlND
ZWxsOjp0eXBlSW5mb1R5cGVPZmZzZXQoKSksIGVhcmx5U2NyYXRjaCk7CiAgICAgYmFkVHlwZSA9
IHBhdGNoYWJsZUJyYW5jaDMyKE5vdEVxdWFsLCBlYXJseVNjcmF0Y2gsIFRydXN0ZWRJbW0zMih0
eXBlRm9yVHlwZWRBcnJheVR5cGUodHlwZSkpKTsKLSAgICBsb2FkMzIoQWRkcmVzcyhiYXNlLCBK
U0FycmF5QnVmZmVyVmlldzo6b2Zmc2V0T2ZMZW5ndGgoKSksIGxhdGVTY3JhdGNoMik7Ci0gICAg
SnVtcCBpbkJvdW5kcyA9IGJyYW5jaDMyKEJlbG93LCBwcm9wZXJ0eSwgbGF0ZVNjcmF0Y2gyKTsK
KyAgICBKdW1wIGluQm91bmRzID0gYnJhbmNoMzIoQmVsb3csIHByb3BlcnR5LCBBZGRyZXNzKGJh
c2UsIEpTQXJyYXlCdWZmZXJWaWV3OjpvZmZzZXRPZkxlbmd0aCgpKSk7CiAgICAgZW1pdEFycmF5
UHJvZmlsZU91dE9mQm91bmRzU3BlY2lhbENhc2UocHJvZmlsZSk7CiAgICAgc2xvd0Nhc2VzLmFw
cGVuZChqdW1wKCkpOwogICAgIGluQm91bmRzLmxpbmsodGhpcyk7CkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvaml0L1BvbHltb3JwaGljQ2FsbFN0dWJSb3V0aW5lLmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L1BvbHltb3JwaGljQ2FsbFN0dWJSb3V0aW5l
LmNwcAkocmV2aXNpb24gMjQ2MjcxKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9Qb2x5
bW9ycGhpY0NhbGxTdHViUm91dGluZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTU3LDYgKzU3LDkg
QEAgdm9pZCBQb2x5bW9ycGhpY0NhbGxOb2RlOjp1bmxpbmsoVk0mIHZtKQogCiB2b2lkIFBvbHlt
b3JwaGljQ2FsbE5vZGU6OmNsZWFyQ2FsbExpbmtJbmZvKCkKIHsKKyAgICBpZiAoT3B0aW9uczo6
ZHVtcERpc2Fzc2VtYmx5KCkpCisgICAgICAgIGRhdGFMb2coIkNsZWFyaW5nIGNhbGwgbGluayBp
bmZvIGZvciBwb2x5bW9ycGhpYyBjYWxsIGF0ICIsIG1fY2FsbExpbmtJbmZvLT5jYWxsUmV0dXJu
TG9jYXRpb24oKSwgIiwgIiwgbV9jYWxsTGlua0luZm8tPmNvZGVPcmlnaW4oKSwgIlxuIik7CisK
ICAgICBtX2NhbGxMaW5rSW5mbyA9IG51bGxwdHI7CiB9CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9qaXQvUmVnaXN0ZXJTZXQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvaml0L1JlZ2lzdGVyU2V0LmgJKHJldmlzaW9uIDI0NjI3MSkKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9qaXQvUmVnaXN0ZXJTZXQuaAkod29ya2luZyBjb3B5KQpAQCAtODQsOSArODQs
NyBAQCBwdWJsaWM6CiAgICAgICAgICAgICBzZXQocmVncy50YWdHUFIoKSwgdmFsdWUpOwogICAg
ICAgICBzZXQocmVncy5wYXlsb2FkR1BSKCksIHZhbHVlKTsKICAgICB9Ci0KLSAgICB2b2lkIHNl
dChjb25zdCBSZWdpc3RlclNldCYgb3RoZXIsIGJvb2wgdmFsdWUgPSB0cnVlKSB7IHZhbHVlID8g
bWVyZ2Uob3RoZXIpIDogZXhjbHVkZShvdGhlcik7IH0KLQorICAgIAogICAgIHZvaWQgY2xlYXIo
UmVnIHJlZykKICAgICB7CiAgICAgICAgIEFTU0VSVCghIXJlZyk7CkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvbGxpbnQvTG93TGV2ZWxJbnRlcnByZXRlcjY0LmFzbQo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvbGxpbnQvTG93TGV2ZWxJbnRlcnByZXRlcjY0LmFzbQko
cmV2aXNpb24gMjQ2MjcxKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2xsaW50L0xvd0xldmVs
SW50ZXJwcmV0ZXI2NC5hc20JKHdvcmtpbmcgY29weSkKQEAgLTQyMiwyOSArNDIyLDIwIEBAIG1h
Y3JvIGNoZWNrU3dpdGNoVG9KSVRGb3JMb29wKCkKICAgICAgICAgZW5kKQogZW5kCiAKLW1hY3Jv
IHVuY2FnZShiYXNlUHRyLCBtYXNrLCBwdHIsIHNjcmF0Y2hPckxlbmd0aCkKLSAgICBpZiBHSUdB
Q0FHRV9FTkFCTEVEIGFuZCBub3QgKENfTE9PUCBvciBDX0xPT1BfV0lOKQotICAgICAgICBsb2Fk
cCBiYXNlUHRyLCBzY3JhdGNoT3JMZW5ndGgKLSAgICAgICAgYnRweiBzY3JhdGNoT3JMZW5ndGgs
IC5kb25lCittYWNybyB1bmNhZ2UoYmFzZVB0ciwgbWFzaywgcHRyLCBzY3JhdGNoKQorICAgIGlm
IEdJR0FDQUdFX0VOQUJMRUQgYW5kIG5vdCBDX0xPT1AKKyAgICAgICAgbG9hZHAgYmFzZVB0ciwg
c2NyYXRjaAorICAgICAgICBidHB6IHNjcmF0Y2gsIC5kb25lCiAgICAgICAgIGFuZHAgbWFzaywg
cHRyCi0gICAgICAgIGFkZHAgc2NyYXRjaE9yTGVuZ3RoLCBwdHIKLSAgICAuZG9uZToKLSAgICBl
bmQKLWVuZAotCi1tYWNybyBsb2FkQ2FnZWRQcmltaXRpdmUoc291cmNlLCBkZXN0LCBzY3JhdGNo
T3JMZW5ndGgpCi0gICAgbG9hZHAgc291cmNlLCBkZXN0Ci0gICAgaWYgR0lHQUNBR0VfRU5BQkxF
RAotICAgICAgICB1bmNhZ2UoX2dfZ2lnYWNhZ2VCYXNlUHRycyArIEdpZ2FjYWdlOjpCYXNlUHRy
czo6cHJpbWl0aXZlLCBjb25zdGV4cHIgR2lnYWNhZ2U6OnByaW1pdGl2ZUdpZ2FjYWdlTWFzaywg
ZGVzdCwgc2NyYXRjaE9yTGVuZ3RoKQotICAgIGVsc2lmIEFSTTY0RQotICAgICAgICB1bnRhZ0Fy
cmF5UHRyIHNjcmF0Y2hPckxlbmd0aCwgZGVzdAorICAgICAgICBhZGRwIHNjcmF0Y2gsIHB0cgor
ICAgICAgICAuZG9uZToKICAgICBlbmQKIGVuZAogCi1tYWNybyBsb2FkQ2FnZWRKU1ZhbHVlKHNv
dXJjZSwgZGVzdCwgc2NyYXRjaE9yTGVuZ3RoKQorbWFjcm8gbG9hZENhZ2VkKGJhc2VQdHIsIG1h
c2ssIHNvdXJjZSwgZGVzdCwgc2NyYXRjaCkKICAgICBsb2FkcCBzb3VyY2UsIGRlc3QKLSAgICB1
bmNhZ2UoX2dfZ2lnYWNhZ2VCYXNlUHRycyArIEdpZ2FjYWdlOjpCYXNlUHRyczo6anNWYWx1ZSwg
Y29uc3RleHByIEdpZ2FjYWdlOjpqc1ZhbHVlR2lnYWNhZ2VNYXNrLCBkZXN0LCBzY3JhdGNoT3JM
ZW5ndGgpCi1lbmQKKyAgICB1bmNhZ2UoYmFzZVB0ciwgbWFzaywgZGVzdCwgc2NyYXRjaCkKKyBl
bmQKIAogbWFjcm8gbG9hZFZhcmlhYmxlKGdldCwgZmllbGROYW1lLCB2YWx1ZVJlZykKICAgICBn
ZXQoZmllbGROYW1lLCB2YWx1ZVJlZykKQEAgLTEzNDQsNyArMTMzNSw3IEBAIGxsaW50T3BXaXRo
TWV0YWRhdGEob3BfZ2V0X2J5X2lkLCBPcEdldEIKICAgICBhcnJheVByb2ZpbGUoT3BHZXRCeUlk
OjpNZXRhZGF0YTo6bV9tb2RlTWV0YWRhdGEuYXJyYXlMZW5ndGhNb2RlLmFycmF5UHJvZmlsZSwg
dDAsIHQyLCB0NSkKICAgICBidGl6IHQwLCBJc0FycmF5LCAub3BHZXRCeUlkU2xvdwogICAgIGJ0
aXogdDAsIEluZGV4aW5nU2hhcGVNYXNrLCAub3BHZXRCeUlkU2xvdwotICAgIGxvYWRDYWdlZEpT
VmFsdWUoSlNPYmplY3Q6Om1fYnV0dGVyZmx5W3QzXSwgdDAsIHQxKQorICAgIGxvYWRDYWdlZChf
Z19naWdhY2FnZUJhc2VQdHJzICsgR2lnYWNhZ2U6OkJhc2VQdHJzOjpqc1ZhbHVlLCBjb25zdGV4
cHIgR2lnYWNhZ2U6OmpzVmFsdWVHaWdhY2FnZU1hc2ssIEpTT2JqZWN0OjptX2J1dHRlcmZseVt0
M10sIHQwLCB0MSkKICAgICBsb2FkaSAtc2l6ZW9mIEluZGV4aW5nSGVhZGVyICsgSW5kZXhpbmdI
ZWFkZXI6OnUubGVuZ3Rocy5wdWJsaWNMZW5ndGhbdDBdLCB0MAogICAgIGJpbHQgdDAsIDAsIC5v
cEdldEJ5SWRTbG93CiAgICAgb3JxIHRhZ1R5cGVOdW1iZXIsIHQwCkBAIC0xNDY3LDcgKzE0NTgs
NyBAQCBsbGludE9wV2l0aE1ldGFkYXRhKG9wX2dldF9ieV92YWwsIE9wR2V0CiAgICAgbG9hZENv
bnN0YW50T3JWYXJpYWJsZUludDMyKHNpemUsIHQzLCB0MSwgLm9wR2V0QnlWYWxTbG93KQogICAg
IHN4aTJxIHQxLCB0MQogCi0gICAgbG9hZENhZ2VkSlNWYWx1ZShKU09iamVjdDo6bV9idXR0ZXJm
bHlbdDBdLCB0MywgdGFnVHlwZU51bWJlcikKKyAgICBsb2FkQ2FnZWQoX2dfZ2lnYWNhZ2VCYXNl
UHRycyArIEdpZ2FjYWdlOjpCYXNlUHRyczo6anNWYWx1ZSwgY29uc3RleHByIEdpZ2FjYWdlOjpq
c1ZhbHVlR2lnYWNhZ2VNYXNrLCBKU09iamVjdDo6bV9idXR0ZXJmbHlbdDBdLCB0MywgdGFnVHlw
ZU51bWJlcikKICAgICBtb3ZlIFRhZ1R5cGVOdW1iZXIsIHRhZ1R5cGVOdW1iZXIKIAogICAgIGFu
ZGkgSW5kZXhpbmdTaGFwZU1hc2ssIHQyCkBAIC0xNTExLDE3ICsxNTAyLDcgQEAgbGxpbnRPcFdp
dGhNZXRhZGF0YShvcF9nZXRfYnlfdmFsLCBPcEdldAogICAgIGJpYWVxIHQyLCBOdW1iZXJPZlR5
cGVkQXJyYXlUeXBlc0V4Y2x1ZGluZ0RhdGFWaWV3LCAub3BHZXRCeVZhbFNsb3cKICAgICAKICAg
ICAjIFN3ZWV0LCBub3cgd2Uga25vdyB0aGF0IHdlIGhhdmUgYSB0eXBlZCBhcnJheS4gRG8gc29t
ZSBiYXNpYyB0aGluZ3Mgbm93LgotCi0gICAgaWYgQVJNNjRFCi0gICAgICAgIGNvbnN0IHNjcmF0
Y2hPckxlbmd0aCA9IHQ2Ci0gICAgICAgIGxvYWRpIEpTQXJyYXlCdWZmZXJWaWV3OjptX2xlbmd0
aFt0MF0sIHNjcmF0Y2hPckxlbmd0aAotICAgICAgICBiaWFlcSB0MSwgc2NyYXRjaE9yTGVuZ3Ro
LCAub3BHZXRCeVZhbFNsb3cKLSAgICBlbHNlCi0gICAgICAgIGNvbnN0IHNjcmF0Y2hPckxlbmd0
aCA9IHQwCi0gICAgICAgIGJpYWVxIHQxLCBKU0FycmF5QnVmZmVyVmlldzo6bV9sZW5ndGhbdDBd
LCAub3BHZXRCeVZhbFNsb3cKLSAgICBlbmQKLQotICAgIGxvYWRDYWdlZFByaW1pdGl2ZShKU0Fy
cmF5QnVmZmVyVmlldzo6bV92ZWN0b3JbdDBdLCB0Mywgc2NyYXRjaE9yTGVuZ3RoKQorICAgIGJp
YWVxIHQxLCBKU0FycmF5QnVmZmVyVmlldzo6bV9sZW5ndGhbdDBdLCAub3BHZXRCeVZhbFNsb3cK
IAogICAgICMgTm93IGJpc2VjdCB0aHJvdWdoIHRoZSB2YXJpb3VzIHR5cGVzOgogICAgICMgICAg
SW50OEFycmF5VHlwZSwKQEAgLTE1NDMsNiArMTUyNCw3IEBAIGxsaW50T3BXaXRoTWV0YWRhdGEo
b3BfZ2V0X2J5X3ZhbCwgT3BHZXQKICAgICBiaWEgdDIsIEludDhBcnJheVR5cGUgLSBGaXJzdFR5
cGVkQXJyYXlUeXBlLCAub3BHZXRCeVZhbFVpbnQ4QXJyYXlPclVpbnQ4Q2xhbXBlZEFycmF5CiAK
ICAgICAjIFdlIGhhdmUgSW50OEFycmF5VHlwZS4KKyAgICBsb2FkQ2FnZWQoX2dfZ2lnYWNhZ2VC
YXNlUHRycyArIEdpZ2FjYWdlOjpCYXNlUHRyczo6cHJpbWl0aXZlLCBjb25zdGV4cHIgR2lnYWNh
Z2U6OnByaW1pdGl2ZUdpZ2FjYWdlTWFzaywgSlNBcnJheUJ1ZmZlclZpZXc6Om1fdmVjdG9yW3Qw
XSwgdDMsIHQyKQogICAgIGxvYWRic2kgW3QzLCB0MV0sIHQwCiAgICAgZmluaXNoSW50R2V0QnlW
YWwodDAsIHQxKQogCkBAIC0xNTUwLDExICsxNTMyLDEzIEBAIGxsaW50T3BXaXRoTWV0YWRhdGEo
b3BfZ2V0X2J5X3ZhbCwgT3BHZXQKICAgICBiaWEgdDIsIFVpbnQ4QXJyYXlUeXBlIC0gRmlyc3RU
eXBlZEFycmF5VHlwZSwgLm9wR2V0QnlWYWxVaW50OENsYW1wZWRBcnJheQogCiAgICAgIyBXZSBo
YXZlIFVpbnQ4QXJyYXlUeXBlLgorICAgIGxvYWRDYWdlZChfZ19naWdhY2FnZUJhc2VQdHJzICsg
R2lnYWNhZ2U6OkJhc2VQdHJzOjpwcmltaXRpdmUsIGNvbnN0ZXhwciBHaWdhY2FnZTo6cHJpbWl0
aXZlR2lnYWNhZ2VNYXNrLCBKU0FycmF5QnVmZmVyVmlldzo6bV92ZWN0b3JbdDBdLCB0MywgdDIp
CiAgICAgbG9hZGIgW3QzLCB0MV0sIHQwCiAgICAgZmluaXNoSW50R2V0QnlWYWwodDAsIHQxKQog
CiAub3BHZXRCeVZhbFVpbnQ4Q2xhbXBlZEFycmF5OgogICAgICMgV2UgaGF2ZSBVaW50OENsYW1w
ZWRBcnJheVR5cGUuCisgICAgbG9hZENhZ2VkKF9nX2dpZ2FjYWdlQmFzZVB0cnMgKyBHaWdhY2Fn
ZTo6QmFzZVB0cnM6OnByaW1pdGl2ZSwgY29uc3RleHByIEdpZ2FjYWdlOjpwcmltaXRpdmVHaWdh
Y2FnZU1hc2ssIEpTQXJyYXlCdWZmZXJWaWV3OjptX3ZlY3Rvclt0MF0sIHQzLCB0MikKICAgICBs
b2FkYiBbdDMsIHQxXSwgdDAKICAgICBmaW5pc2hJbnRHZXRCeVZhbCh0MCwgdDEpCiAKQEAgLTE1
NjMsMTEgKzE1NDcsMTMgQEAgbGxpbnRPcFdpdGhNZXRhZGF0YShvcF9nZXRfYnlfdmFsLCBPcEdl
dAogICAgIGJpYSB0MiwgSW50MTZBcnJheVR5cGUgLSBGaXJzdFR5cGVkQXJyYXlUeXBlLCAub3BH
ZXRCeVZhbFVpbnQxNkFycmF5CiAKICAgICAjIFdlIGhhdmUgSW50MTZBcnJheVR5cGUuCisgICAg
bG9hZENhZ2VkKF9nX2dpZ2FjYWdlQmFzZVB0cnMgKyBHaWdhY2FnZTo6QmFzZVB0cnM6OnByaW1p
dGl2ZSwgY29uc3RleHByIEdpZ2FjYWdlOjpwcmltaXRpdmVHaWdhY2FnZU1hc2ssIEpTQXJyYXlC
dWZmZXJWaWV3OjptX3ZlY3Rvclt0MF0sIHQzLCB0MikKICAgICBsb2FkaHNpIFt0MywgdDEsIDJd
LCB0MAogICAgIGZpbmlzaEludEdldEJ5VmFsKHQwLCB0MSkKIAogLm9wR2V0QnlWYWxVaW50MTZB
cnJheToKICAgICAjIFdlIGhhdmUgVWludDE2QXJyYXlUeXBlLgorICAgIGxvYWRDYWdlZChfZ19n
aWdhY2FnZUJhc2VQdHJzICsgR2lnYWNhZ2U6OkJhc2VQdHJzOjpwcmltaXRpdmUsIGNvbnN0ZXhw
ciBHaWdhY2FnZTo6cHJpbWl0aXZlR2lnYWNhZ2VNYXNrLCBKU0FycmF5QnVmZmVyVmlldzo6bV92
ZWN0b3JbdDBdLCB0MywgdDIpCiAgICAgbG9hZGggW3QzLCB0MSwgMl0sIHQwCiAgICAgZmluaXNo
SW50R2V0QnlWYWwodDAsIHQxKQogCkBAIC0xNTc5LDExICsxNTY1LDEzIEBAIGxsaW50T3BXaXRo
TWV0YWRhdGEob3BfZ2V0X2J5X3ZhbCwgT3BHZXQKICAgICBiaWEgdDIsIEludDMyQXJyYXlUeXBl
IC0gRmlyc3RUeXBlZEFycmF5VHlwZSwgLm9wR2V0QnlWYWxVaW50MzJBcnJheQogCiAgICAgIyBX
ZSBoYXZlIEludDMyQXJyYXlUeXBlLgorICAgIGxvYWRDYWdlZChfZ19naWdhY2FnZUJhc2VQdHJz
ICsgR2lnYWNhZ2U6OkJhc2VQdHJzOjpwcmltaXRpdmUsIGNvbnN0ZXhwciBHaWdhY2FnZTo6cHJp
bWl0aXZlR2lnYWNhZ2VNYXNrLCBKU0FycmF5QnVmZmVyVmlldzo6bV92ZWN0b3JbdDBdLCB0Mywg
dDIpCiAgICAgbG9hZGkgW3QzLCB0MSwgNF0sIHQwCiAgICAgZmluaXNoSW50R2V0QnlWYWwodDAs
IHQxKQogCiAub3BHZXRCeVZhbFVpbnQzMkFycmF5OgogICAgICMgV2UgaGF2ZSBVaW50MzJBcnJh
eVR5cGUuCisgICAgbG9hZENhZ2VkKF9nX2dpZ2FjYWdlQmFzZVB0cnMgKyBHaWdhY2FnZTo6QmFz
ZVB0cnM6OnByaW1pdGl2ZSwgY29uc3RleHByIEdpZ2FjYWdlOjpwcmltaXRpdmVHaWdhY2FnZU1h
c2ssIEpTQXJyYXlCdWZmZXJWaWV3OjptX3ZlY3Rvclt0MF0sIHQzLCB0MikKICAgICAjIFRoaXMg
aXMgdGhlIGhhcmRlc3QgcGFydCBiZWNhdXNlIG9mIGxhcmdlIHVuc2lnbmVkIHZhbHVlcy4KICAg
ICBsb2FkaSBbdDMsIHQxLCA0XSwgdDAKICAgICBiaWx0IHQwLCAwLCAub3BHZXRCeVZhbFNsb3cg
IyBUaGlzIGNhc2UgaXMgc3RpbGwgYXdrd2FyZCB0byBpbXBsZW1lbnQgaW4gTExJbnQuCkBAIC0x
NTk1LDYgKzE1ODMsNyBAQCBsbGludE9wV2l0aE1ldGFkYXRhKG9wX2dldF9ieV92YWwsIE9wR2V0
CiAgICAgYmllcSB0MiwgRmxvYXQzMkFycmF5VHlwZSAtIEZpcnN0VHlwZWRBcnJheVR5cGUsIC5v
cEdldEJ5VmFsU2xvdwogCiAgICAgIyBXZSBoYXZlIEZsb2F0NjRBcnJheVR5cGUuCisgICAgbG9h
ZENhZ2VkKF9nX2dpZ2FjYWdlQmFzZVB0cnMgKyBHaWdhY2FnZTo6QmFzZVB0cnM6OnByaW1pdGl2
ZSwgY29uc3RleHByIEdpZ2FjYWdlOjpwcmltaXRpdmVHaWdhY2FnZU1hc2ssIEpTQXJyYXlCdWZm
ZXJWaWV3OjptX3ZlY3Rvclt0MF0sIHQzLCB0MikKICAgICBsb2FkZCBbdDMsIHQxLCA4XSwgZnQw
CiAgICAgYmRuZXF1biBmdDAsIGZ0MCwgLm9wR2V0QnlWYWxTbG93CiAgICAgZmluaXNoRG91Ymxl
R2V0QnlWYWwoZnQwLCB0MCwgdDEpCkBAIC0xNjMwLDcgKzE2MTksNyBAQCBtYWNybyBwdXRCeVZh
bE9wKG9wY29kZU5hbWUsIG9wY29kZVN0cnVjCiAgICAgICAgIGdldChtX3Byb3BlcnR5LCB0MCkK
ICAgICAgICAgbG9hZENvbnN0YW50T3JWYXJpYWJsZUludDMyKHNpemUsIHQwLCB0MywgLm9wUHV0
QnlWYWxTbG93KQogICAgICAgICBzeGkycSB0MywgdDMKLSAgICAgICAgbG9hZENhZ2VkSlNWYWx1
ZShKU09iamVjdDo6bV9idXR0ZXJmbHlbdDFdLCB0MCwgdGFnVHlwZU51bWJlcikKKyAgICAgICAg
bG9hZENhZ2VkKF9nX2dpZ2FjYWdlQmFzZVB0cnMgKyBHaWdhY2FnZTo6QmFzZVB0cnM6OmpzVmFs
dWUsIGNvbnN0ZXhwciBHaWdhY2FnZTo6anNWYWx1ZUdpZ2FjYWdlTWFzaywgSlNPYmplY3Q6Om1f
YnV0dGVyZmx5W3QxXSwgdDAsIHRhZ1R5cGVOdW1iZXIpCiAgICAgICAgIG1vdmUgVGFnVHlwZU51
bWJlciwgdGFnVHlwZU51bWJlcgogICAgICAgICBidGlueiB0MiwgQ29weU9uV3JpdGUsIC5vcFB1
dEJ5VmFsU2xvdwogICAgICAgICBhbmRpIEluZGV4aW5nU2hhcGVNYXNrLCB0MgpJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQXJyYXlCdWZmZXIuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0FycmF5QnVmZmVyLmNwcAkocmV2aXNpb24g
MjQ2MjcxKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQXJyYXlCdWZmZXIuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC0zMywxNyArMzMsMTUgQEAKIAogbmFtZXNwYWNlIEpTQyB7CiAK
LVNoYXJlZEFycmF5QnVmZmVyQ29udGVudHM6OlNoYXJlZEFycmF5QnVmZmVyQ29udGVudHModm9p
ZCogZGF0YSwgdW5zaWduZWQgc2l6ZSwgQXJyYXlCdWZmZXJEZXN0cnVjdG9yRnVuY3Rpb24mJiBk
ZXN0cnVjdG9yKQotICAgIDogbV9kYXRhKGRhdGEsIHNpemUpCitTaGFyZWRBcnJheUJ1ZmZlckNv
bnRlbnRzOjpTaGFyZWRBcnJheUJ1ZmZlckNvbnRlbnRzKHZvaWQqIGRhdGEsIEFycmF5QnVmZmVy
RGVzdHJ1Y3RvckZ1bmN0aW9uJiYgZGVzdHJ1Y3RvcikKKyAgICA6IG1fZGF0YShkYXRhKQogICAg
ICwgbV9kZXN0cnVjdG9yKFdURk1vdmUoZGVzdHJ1Y3RvcikpCi0gICAgLCBtX3NpemVJbkJ5dGVz
KHNpemUpCiB7CiB9CiAKIFNoYXJlZEFycmF5QnVmZmVyQ29udGVudHM6On5TaGFyZWRBcnJheUJ1
ZmZlckNvbnRlbnRzKCkKIHsKLSAgICAvLyBGSVhNRTogd2Ugc2hvdWxkbid0IHVzZSBnZXRVbnNh
ZmUgaGVyZSBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTk3Njk4Ci0g
ICAgbV9kZXN0cnVjdG9yKG1fZGF0YS5nZXRVbnNhZmUoKSk7CisgICAgbV9kZXN0cnVjdG9yKG1f
ZGF0YS5nZXRNYXlCZU51bGwoKSk7CiB9CiAKIEFycmF5QnVmZmVyQ29udGVudHM6OkFycmF5QnVm
ZmVyQ29udGVudHMoKQpAQCAtNTgsNyArNTYsNyBAQCBBcnJheUJ1ZmZlckNvbnRlbnRzOjpBcnJh
eUJ1ZmZlckNvbnRlbnRzCiB9CiAKIEFycmF5QnVmZmVyQ29udGVudHM6OkFycmF5QnVmZmVyQ29u
dGVudHModm9pZCogZGF0YSwgdW5zaWduZWQgc2l6ZUluQnl0ZXMsIEFycmF5QnVmZmVyRGVzdHJ1
Y3RvckZ1bmN0aW9uJiYgZGVzdHJ1Y3RvcikKLSAgICA6IG1fZGF0YShkYXRhLCBzaXplSW5CeXRl
cykKKyAgICA6IG1fZGF0YShkYXRhKQogICAgICwgbV9zaXplSW5CeXRlcyhzaXplSW5CeXRlcykK
IHsKICAgICBSRUxFQVNFX0FTU0VSVChtX3NpemVJbkJ5dGVzIDw9IE1BWF9BUlJBWV9CVUZGRVJf
U0laRSk7CkBAIC04NCw4ICs4Miw3IEBAIHZvaWQgQXJyYXlCdWZmZXJDb250ZW50czo6Y2xlYXIo
KQogCiB2b2lkIEFycmF5QnVmZmVyQ29udGVudHM6OmRlc3Ryb3koKQogewotICAgIC8vIEZJWE1F
OiBXZSBzaG91bGRuJ3QgdXNlIGdldFVuc2FmZSBoZXJlOiBodHRwczovL2J1Z3Mud2Via2l0Lm9y
Zy9zaG93X2J1Zy5jZ2k/aWQ9MTk3Njk4Ci0gICAgbV9kZXN0cnVjdG9yKG1fZGF0YS5nZXRVbnNh
ZmUoKSk7CisgICAgbV9kZXN0cnVjdG9yKG1fZGF0YS5nZXRNYXlCZU51bGwoKSk7CiB9CiAKIHZv
aWQgQXJyYXlCdWZmZXJDb250ZW50czo6cmVzZXQoKQpAQCAtMTA2LDI5ICsxMDMsMjYgQEAgdm9p
ZCBBcnJheUJ1ZmZlckNvbnRlbnRzOjp0cnlBbGxvY2F0ZSh1bgogICAgICAgICAgICAgcmV0dXJu
OwogICAgICAgICB9CiAgICAgfQotICAgIHNpemVfdCBzaXplSW5CeXRlcyA9IHN0YXRpY19jYXN0
PHNpemVfdD4obnVtRWxlbWVudHMpICogc3RhdGljX2Nhc3Q8c2l6ZV90PihlbGVtZW50Qnl0ZVNp
emUpOwotICAgIHNpemVfdCBhbGxvY2F0aW9uU2l6ZSA9IHNpemVJbkJ5dGVzOwotICAgIGlmICgh
YWxsb2NhdGlvblNpemUpCi0gICAgICAgIGFsbG9jYXRpb25TaXplID0gMTsgLy8gTWFrZSBzdXJl
IG1hbGxvYyBhY3R1YWxseSBhbGxvY2F0ZXMgc29tZXRoaW5nLCBidXQgbm90IHRvbyBtdWNoLiBX
ZSB1c2UgbnVsbCB0byBtZWFuIHRoYXQgdGhlIGJ1ZmZlciBpcyBuZXV0ZXJlZC4KLQotICAgIHZv
aWQqIGRhdGEgPSBHaWdhY2FnZTo6dHJ5TWFsbG9jKEdpZ2FjYWdlOjpQcmltaXRpdmUsIGFsbG9j
YXRpb25TaXplKTsKLSAgICBtX2RhdGEgPSBEYXRhVHlwZShkYXRhLCBzaXplSW5CeXRlcyk7Ci0g
ICAgaWYgKCFkYXRhKSB7CisgICAgc2l6ZV90IHNpemUgPSBzdGF0aWNfY2FzdDxzaXplX3Q+KG51
bUVsZW1lbnRzKSAqIHN0YXRpY19jYXN0PHNpemVfdD4oZWxlbWVudEJ5dGVTaXplKTsKKyAgICBp
ZiAoIXNpemUpCisgICAgICAgIHNpemUgPSAxOyAvLyBNYWtlIHN1cmUgbWFsbG9jIGFjdHVhbGx5
IGFsbG9jYXRlcyBzb21ldGhpbmcsIGJ1dCBub3QgdG9vIG11Y2guIFdlIHVzZSBudWxsIHRvIG1l
YW4gdGhhdCB0aGUgYnVmZmVyIGlzIG5ldXRlcmVkLgorICAgIG1fZGF0YSA9IEdpZ2FjYWdlOjp0
cnlNYWxsb2MoR2lnYWNhZ2U6OlByaW1pdGl2ZSwgc2l6ZSk7CisgICAgaWYgKCFtX2RhdGEpIHsK
ICAgICAgICAgcmVzZXQoKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KICAgICAKICAgICBpZiAo
cG9saWN5ID09IFplcm9Jbml0aWFsaXplKQotICAgICAgICBtZW1zZXQoZGF0YSwgMCwgYWxsb2Nh
dGlvblNpemUpOworICAgICAgICBtZW1zZXQobV9kYXRhLmdldCgpLCAwLCBzaXplKTsKIAotICAg
IG1fc2l6ZUluQnl0ZXMgPSBzaXplSW5CeXRlczsKKyAgICBtX3NpemVJbkJ5dGVzID0gbnVtRWxl
bWVudHMgKiBlbGVtZW50Qnl0ZVNpemU7CiAgICAgUkVMRUFTRV9BU1NFUlQobV9zaXplSW5CeXRl
cyA8PSBNQVhfQVJSQVlfQlVGRkVSX1NJWkUpOwogICAgIG1fZGVzdHJ1Y3RvciA9IFtdICh2b2lk
KiBwKSB7IEdpZ2FjYWdlOjpmcmVlKEdpZ2FjYWdlOjpQcmltaXRpdmUsIHApOyB9OwogfQogCiB2
b2lkIEFycmF5QnVmZmVyQ29udGVudHM6Om1ha2VTaGFyZWQoKQogewotICAgIG1fc2hhcmVkID0g
YWRvcHRSZWYobmV3IFNoYXJlZEFycmF5QnVmZmVyQ29udGVudHMoZGF0YSgpLCBzaXplSW5CeXRl
cygpLCBXVEZNb3ZlKG1fZGVzdHJ1Y3RvcikpKTsKKyAgICBtX3NoYXJlZCA9IGFkb3B0UmVmKG5l
dyBTaGFyZWRBcnJheUJ1ZmZlckNvbnRlbnRzKG1fZGF0YS5nZXRNYXlCZU51bGwoKSwgV1RGTW92
ZShtX2Rlc3RydWN0b3IpKSk7CiAgICAgbV9kZXN0cnVjdG9yID0gW10gKHZvaWQqKSB7IH07CiB9
CiAKQEAgLTE0OSw3ICsxNDMsNyBAQCB2b2lkIEFycmF5QnVmZmVyQ29udGVudHM6OmNvcHlUbyhB
cnJheUJ1CiAgICAgb3RoZXIudHJ5QWxsb2NhdGUobV9zaXplSW5CeXRlcywgc2l6ZW9mKGNoYXIp
LCBBcnJheUJ1ZmZlckNvbnRlbnRzOjpEb250SW5pdGlhbGl6ZSk7CiAgICAgaWYgKCFvdGhlci5t
X2RhdGEpCiAgICAgICAgIHJldHVybjsKLSAgICBtZW1jcHkob3RoZXIuZGF0YSgpLCBkYXRhKCks
IG1fc2l6ZUluQnl0ZXMpOworICAgIG1lbWNweShvdGhlci5tX2RhdGEuZ2V0KCksIG1fZGF0YS5n
ZXQoKSwgbV9zaXplSW5CeXRlcyk7CiAgICAgb3RoZXIubV9zaXplSW5CeXRlcyA9IG1fc2l6ZUlu
Qnl0ZXM7CiAgICAgUkVMRUFTRV9BU1NFUlQob3RoZXIubV9zaXplSW5CeXRlcyA8PSBNQVhfQVJS
QVlfQlVGRkVSX1NJWkUpOwogfQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUv
QXJyYXlCdWZmZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGlt
ZS9BcnJheUJ1ZmZlci5oCShyZXZpc2lvbiAyNDYyNzEpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvcnVudGltZS9BcnJheUJ1ZmZlci5oCSh3b3JraW5nIGNvcHkpCkBAIC00OCwxNiArNDgsMTQg
QEAgdHlwZWRlZiBGdW5jdGlvbjx2b2lkKHZvaWQqKT4gQXJyYXlCdWZmZQogCiBjbGFzcyBTaGFy
ZWRBcnJheUJ1ZmZlckNvbnRlbnRzIDogcHVibGljIFRocmVhZFNhZmVSZWZDb3VudGVkPFNoYXJl
ZEFycmF5QnVmZmVyQ29udGVudHM+IHsKIHB1YmxpYzoKLSAgICBTaGFyZWRBcnJheUJ1ZmZlckNv
bnRlbnRzKHZvaWQqIGRhdGEsIHVuc2lnbmVkIHNpemUsIEFycmF5QnVmZmVyRGVzdHJ1Y3RvckZ1
bmN0aW9uJiYpOworICAgIFNoYXJlZEFycmF5QnVmZmVyQ29udGVudHModm9pZCogZGF0YSwgQXJy
YXlCdWZmZXJEZXN0cnVjdG9yRnVuY3Rpb24mJik7CiAgICAgflNoYXJlZEFycmF5QnVmZmVyQ29u
dGVudHMoKTsKICAgICAKLSAgICB2b2lkKiBkYXRhKCkgY29uc3QgeyByZXR1cm4gbV9kYXRhLmdl
dE1heUJlTnVsbChtX3NpemVJbkJ5dGVzKTsgfQorICAgIHZvaWQqIGRhdGEoKSBjb25zdCB7IHJl
dHVybiBtX2RhdGEuZ2V0TWF5QmVOdWxsKCk7IH0KICAgICAKIHByaXZhdGU6Ci0gICAgdXNpbmcg
RGF0YVR5cGUgPSBDYWdlZFB0cjxHaWdhY2FnZTo6UHJpbWl0aXZlLCB2b2lkLCB0YWdDYWdlZFB0
cj47Ci0gICAgRGF0YVR5cGUgbV9kYXRhOworICAgIENhZ2VkUHRyPEdpZ2FjYWdlOjpQcmltaXRp
dmUsIHZvaWQ+IG1fZGF0YTsKICAgICBBcnJheUJ1ZmZlckRlc3RydWN0b3JGdW5jdGlvbiBtX2Rl
c3RydWN0b3I7Ci0gICAgdW5zaWduZWQgbV9zaXplSW5CeXRlczsKIH07CiAKIGNsYXNzIEFycmF5
QnVmZmVyQ29udGVudHMgewpAQCAtNzUsNyArNzMsNyBAQCBwdWJsaWM6CiAgICAgCiAgICAgZXhw
bGljaXQgb3BlcmF0b3IgYm9vbCgpIHsgcmV0dXJuICEhbV9kYXRhOyB9CiAgICAgCi0gICAgdm9p
ZCogZGF0YSgpIGNvbnN0IHsgcmV0dXJuIG1fZGF0YS5nZXRNYXlCZU51bGwoc2l6ZUluQnl0ZXMo
KSk7IH0KKyAgICB2b2lkKiBkYXRhKCkgY29uc3QgeyByZXR1cm4gbV9kYXRhLmdldE1heUJlTnVs
bCgpOyB9CiAgICAgdW5zaWduZWQgc2l6ZUluQnl0ZXMoKSBjb25zdCB7IHJldHVybiBtX3NpemVJ
bkJ5dGVzOyB9CiAgICAgCiAgICAgYm9vbCBpc1NoYXJlZCgpIGNvbnN0IHsgcmV0dXJuIG1fc2hh
cmVkOyB9CkBAIC0xMDAsOCArOTgsNyBAQCBwcml2YXRlOgogCiAgICAgQXJyYXlCdWZmZXJEZXN0
cnVjdG9yRnVuY3Rpb24gbV9kZXN0cnVjdG9yOwogICAgIFJlZlB0cjxTaGFyZWRBcnJheUJ1ZmZl
ckNvbnRlbnRzPiBtX3NoYXJlZDsKLSAgICB1c2luZyBEYXRhVHlwZSA9IENhZ2VkUHRyPEdpZ2Fj
YWdlOjpQcmltaXRpdmUsIHZvaWQsIHRhZ0NhZ2VkUHRyPjsKLSAgICBEYXRhVHlwZSBtX2RhdGE7
CisgICAgQ2FnZWRQdHI8R2lnYWNhZ2U6OlByaW1pdGl2ZSwgdm9pZD4gbV9kYXRhOwogICAgIHVu
c2lnbmVkIG1fc2l6ZUluQnl0ZXM7CiB9OwogCkBAIC0xNzcsMTcgKzE3NCwxNyBAQCBwdWJsaWM6
CiAKIHZvaWQqIEFycmF5QnVmZmVyOjpkYXRhKCkKIHsKLSAgICByZXR1cm4gbV9jb250ZW50cy5k
YXRhKCk7CisgICAgcmV0dXJuIG1fY29udGVudHMubV9kYXRhLmdldE1heUJlTnVsbCgpOwogfQog
CiBjb25zdCB2b2lkKiBBcnJheUJ1ZmZlcjo6ZGF0YSgpIGNvbnN0CiB7Ci0gICAgcmV0dXJuIG1f
Y29udGVudHMuZGF0YSgpOworICAgIHJldHVybiBtX2NvbnRlbnRzLm1fZGF0YS5nZXRNYXlCZU51
bGwoKTsKIH0KIAogdW5zaWduZWQgQXJyYXlCdWZmZXI6OmJ5dGVMZW5ndGgoKSBjb25zdAogewot
ICAgIHJldHVybiBtX2NvbnRlbnRzLnNpemVJbkJ5dGVzKCk7CisgICAgcmV0dXJuIG1fY29udGVu
dHMubV9zaXplSW5CeXRlczsKIH0KIAogYm9vbCBBcnJheUJ1ZmZlcjo6aXNTaGFyZWQoKSBjb25z
dApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQXJyYXlCdWZmZXJWaWV3LmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9BcnJheUJ1ZmZl
clZpZXcuY3BwCShyZXZpc2lvbiAyNDYyNzEpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9BcnJheUJ1ZmZlclZpZXcuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yNSwyMiArMjUsMTcg
QEAKIAogI2luY2x1ZGUgImNvbmZpZy5oIgogI2luY2x1ZGUgIkFycmF5QnVmZmVyVmlldy5oIgot
I2luY2x1ZGUgPHd0Zi9DaGVja2VkQXJpdGhtZXRpYy5oPgogCiBuYW1lc3BhY2UgSlNDIHsKIAog
QXJyYXlCdWZmZXJWaWV3OjpBcnJheUJ1ZmZlclZpZXcoCi0gICAgUmVmUHRyPEFycmF5QnVmZmVy
PiYmIGJ1ZmZlciwgdW5zaWduZWQgYnl0ZU9mZnNldCwgdW5zaWduZWQgYnl0ZUxlbmd0aCkKKyAg
ICBSZWZQdHI8QXJyYXlCdWZmZXI+JiYgYnVmZmVyLAorICAgIHVuc2lnbmVkIGJ5dGVPZmZzZXQp
CiAgICAgICAgIDogbV9ieXRlT2Zmc2V0KGJ5dGVPZmZzZXQpCiAgICAgICAgICwgbV9pc05ldXRl
cmFibGUodHJ1ZSkKLSAgICAgICAgLCBtX2J5dGVMZW5ndGgoYnl0ZUxlbmd0aCkKICAgICAgICAg
LCBtX2J1ZmZlcihXVEZNb3ZlKGJ1ZmZlcikpCiB7Ci0gICAgQ2hlY2tlZDx1bnNpZ25lZCwgQ3Jh
c2hPbk92ZXJmbG93PiBsZW5ndGgoYnl0ZU9mZnNldCk7Ci0gICAgbGVuZ3RoICs9IGJ5dGVMZW5n
dGg7Ci0gICAgUkVMRUFTRV9BU1NFUlRfV0lUSF9TRUNVUklUWV9JTVBMSUNBVElPTihsZW5ndGgg
PD0gbV9idWZmZXItPmJ5dGVMZW5ndGgoKSk7Ci0gICAgaWYgKG1fYnVmZmVyKQotICAgICAgICBt
X2Jhc2VBZGRyZXNzID0gQmFzZUFkZHJlc3Moc3RhdGljX2Nhc3Q8Y2hhcio+KG1fYnVmZmVyLT5k
YXRhKCkpICsgbV9ieXRlT2Zmc2V0LCBieXRlTGVuZ3RoKTsKKyAgICBtX2Jhc2VBZGRyZXNzID0g
bV9idWZmZXIgPyAoc3RhdGljX2Nhc3Q8Y2hhcio+KG1fYnVmZmVyLT5kYXRhKCkpICsgbV9ieXRl
T2Zmc2V0KSA6IDA7CiB9CiAKIEFycmF5QnVmZmVyVmlldzo6fkFycmF5QnVmZmVyVmlldygpCklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9BcnJheUJ1ZmZlclZpZXcuaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9BcnJheUJ1ZmZlclZpZXcu
aAkocmV2aXNpb24gMjQ2MjcxKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQXJy
YXlCdWZmZXJWaWV3LmgJKHdvcmtpbmcgY29weSkKQEAgLTcxLDggKzcxLDggQEAgcHVibGljOgog
ICAgIHZvaWQqIGJhc2VBZGRyZXNzKCkgY29uc3QKICAgICB7CiAgICAgICAgIGlmIChpc05ldXRl
cmVkKCkpCi0gICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsKLSAgICAgICAgcmV0dXJuIG1fYmFz
ZUFkZHJlc3MuZ2V0TWF5QmVOdWxsKGJ5dGVMZW5ndGgoKSk7CisgICAgICAgICAgICByZXR1cm4g
MDsKKyAgICAgICAgcmV0dXJuIG1fYmFzZUFkZHJlc3MuZ2V0TWF5QmVOdWxsKCk7CiAgICAgfQog
CiAgICAgdm9pZCogZGF0YSgpIGNvbnN0IHsgcmV0dXJuIGJhc2VBZGRyZXNzKCk7IH0KQEAgLTg0
LDcgKzg0LDcgQEAgcHVibGljOgogICAgICAgICByZXR1cm4gbV9ieXRlT2Zmc2V0OwogICAgIH0K
IAotICAgIHVuc2lnbmVkIGJ5dGVMZW5ndGgoKSBjb25zdCB7IHJldHVybiBtX2J5dGVMZW5ndGg7
IH0KKyAgICB2aXJ0dWFsIHVuc2lnbmVkIGJ5dGVMZW5ndGgoKSBjb25zdCA9IDA7CiAKICAgICBK
U19FWFBPUlRfUFJJVkFURSB2b2lkIHNldE5ldXRlcmFibGUoYm9vbCBmbGFnKTsKICAgICBib29s
IGlzTmV1dGVyYWJsZSgpIGNvbnN0IHsgcmV0dXJuIG1faXNOZXV0ZXJhYmxlOyB9CkBAIC0xMTMs
MTIgKzExMywxMyBAQCBwdWJsaWM6CiAgICAgdmlydHVhbCBKU0FycmF5QnVmZmVyVmlldyogd3Jh
cChFeGVjU3RhdGUqLCBKU0dsb2JhbE9iamVjdCopID0gMDsKICAgICAKIHByb3RlY3RlZDoKLSAg
ICBKU19FWFBPUlRfUFJJVkFURSBBcnJheUJ1ZmZlclZpZXcoUmVmUHRyPEFycmF5QnVmZmVyPiYm
LCB1bnNpZ25lZCBieXRlT2Zmc2V0LCB1bnNpZ25lZCBieXRlTGVuZ3RoKTsKKyAgICBKU19FWFBP
UlRfUFJJVkFURSBBcnJheUJ1ZmZlclZpZXcoUmVmUHRyPEFycmF5QnVmZmVyPiYmLCB1bnNpZ25l
ZCBieXRlT2Zmc2V0KTsKIAogICAgIGlubGluZSBib29sIHNldEltcGwoQXJyYXlCdWZmZXJWaWV3
KiwgdW5zaWduZWQgYnl0ZU9mZnNldCk7CiAKLSAgICBpbmxpbmUgYm9vbCBzZXRSYW5nZUltcGwo
Y29uc3Qgdm9pZCogZGF0YSwgc2l6ZV90IGRhdGFCeXRlTGVuZ3RoLCB1bnNpZ25lZCBieXRlT2Zm
c2V0KTsKLSAgICBpbmxpbmUgYm9vbCBnZXRSYW5nZUltcGwodm9pZCogZGVzdGluYXRpb24sIHNp
emVfdCBkYXRhQnl0ZUxlbmd0aCwgdW5zaWduZWQgYnl0ZU9mZnNldCk7CisgICAgLy8gQ2FsbGVy
IHBhc3NlcyBpbiBidWZmZXJCeXRlTGVuZ3RoIHRvIGF2b2lkIGEgdmlydHVhbCBmdW5jdGlvbiBj
YWxsLgorICAgIGlubGluZSBib29sIHNldFJhbmdlSW1wbChjb25zdCB2b2lkKiBkYXRhLCBzaXpl
X3QgZGF0YUJ5dGVMZW5ndGgsIHVuc2lnbmVkIGJ5dGVPZmZzZXQsIHVuc2lnbmVkIGJ1ZmZlckJ5
dGVMZW5ndGgpOworICAgIGlubGluZSBib29sIGdldFJhbmdlSW1wbCh2b2lkKiBkZXN0aW5hdGlv
biwgc2l6ZV90IGRhdGFCeXRlTGVuZ3RoLCB1bnNpZ25lZCBieXRlT2Zmc2V0LCB1bnNpZ25lZCBi
dWZmZXJCeXRlTGVuZ3RoKTsKIAogICAgIGlubGluZSBib29sIHplcm9SYW5nZUltcGwodW5zaWdu
ZWQgYnl0ZU9mZnNldCwgc2l6ZV90IHJhbmdlQnl0ZUxlbmd0aCk7CiAKQEAgLTE0OSwxMSArMTUw
LDkgQEAgcHJvdGVjdGVkOgogCiAgICAgdW5zaWduZWQgbV9ieXRlT2Zmc2V0IDogMzE7CiAgICAg
Ym9vbCBtX2lzTmV1dGVyYWJsZSA6IDE7Ci0gICAgdW5zaWduZWQgbV9ieXRlTGVuZ3RoOwogCi0g
ICAgdXNpbmcgQmFzZUFkZHJlc3MgPSBDYWdlZFB0cjxHaWdhY2FnZTo6UHJpbWl0aXZlLCB2b2lk
LCB0YWdDYWdlZFB0cj47CiAgICAgLy8gVGhpcyBpcyB0aGUgYWRkcmVzcyBvZiB0aGUgQXJyYXlC
dWZmZXIncyBzdG9yYWdlLCBwbHVzIHRoZSBieXRlIG9mZnNldC4KLSAgICBCYXNlQWRkcmVzcyBt
X2Jhc2VBZGRyZXNzOworICAgIENhZ2VkUHRyPEdpZ2FjYWdlOjpQcmltaXRpdmUsIHZvaWQ+IG1f
YmFzZUFkZHJlc3M7CiAKIHByaXZhdGU6CiAgICAgZnJpZW5kIGNsYXNzIEFycmF5QnVmZmVyOwpA
QCAtMTc0LDEwICsxNzMsMTIgQEAgYm9vbCBBcnJheUJ1ZmZlclZpZXc6OnNldEltcGwoQXJyYXlC
dWZmZQogICAgIHJldHVybiB0cnVlOwogfQogCi1ib29sIEFycmF5QnVmZmVyVmlldzo6c2V0UmFu
Z2VJbXBsKGNvbnN0IHZvaWQqIGRhdGEsIHNpemVfdCBkYXRhQnl0ZUxlbmd0aCwgdW5zaWduZWQg
Ynl0ZU9mZnNldCkKK2Jvb2wgQXJyYXlCdWZmZXJWaWV3OjpzZXRSYW5nZUltcGwoY29uc3Qgdm9p
ZCogZGF0YSwgc2l6ZV90IGRhdGFCeXRlTGVuZ3RoLCB1bnNpZ25lZCBieXRlT2Zmc2V0LCB1bnNp
Z25lZCBidWZmZXJCeXRlTGVuZ3RoKQogewotICAgIGlmIChieXRlT2Zmc2V0ID4gYnl0ZUxlbmd0
aCgpCi0gICAgICAgIHx8IGJ5dGVPZmZzZXQgKyBkYXRhQnl0ZUxlbmd0aCA+IGJ5dGVMZW5ndGgo
KQorICAgIC8vIERvIG5vdCByZXBsYWNlIHdpdGggUkVMRUFTRV9BU1NFUlQ7IHdlIHdhbnQgdG8g
YXZvaWQgdGhlIHZpcnR1YWwgYnl0ZUxlbmd0aCgpIGZ1bmN0aW9uIGNhbGwgaW4gcmVsZWFzZS4K
KyAgICBBU1NFUlRfV0lUSF9TRUNVUklUWV9JTVBMSUNBVElPTihidWZmZXJCeXRlTGVuZ3RoID09
IGJ5dGVMZW5ndGgoKSk7CisgICAgaWYgKGJ5dGVPZmZzZXQgPiBidWZmZXJCeXRlTGVuZ3RoCisg
ICAgICAgIHx8IGJ5dGVPZmZzZXQgKyBkYXRhQnl0ZUxlbmd0aCA+IGJ1ZmZlckJ5dGVMZW5ndGgK
ICAgICAgICAgfHwgYnl0ZU9mZnNldCArIGRhdGFCeXRlTGVuZ3RoIDwgYnl0ZU9mZnNldCkgewog
ICAgICAgICAvLyBPdXQgb2YgcmFuZ2Ugb2Zmc2V0IG9yIG92ZXJmbG93CiAgICAgICAgIHJldHVy
biBmYWxzZTsKQEAgLTE4OCwxMCArMTg5LDEyIEBAIGJvb2wgQXJyYXlCdWZmZXJWaWV3OjpzZXRS
YW5nZUltcGwoY29uc3QKICAgICByZXR1cm4gdHJ1ZTsKIH0KIAotYm9vbCBBcnJheUJ1ZmZlclZp
ZXc6OmdldFJhbmdlSW1wbCh2b2lkKiBkZXN0aW5hdGlvbiwgc2l6ZV90IGRhdGFCeXRlTGVuZ3Ro
LCB1bnNpZ25lZCBieXRlT2Zmc2V0KQorYm9vbCBBcnJheUJ1ZmZlclZpZXc6OmdldFJhbmdlSW1w
bCh2b2lkKiBkZXN0aW5hdGlvbiwgc2l6ZV90IGRhdGFCeXRlTGVuZ3RoLCB1bnNpZ25lZCBieXRl
T2Zmc2V0LCB1bnNpZ25lZCBidWZmZXJCeXRlTGVuZ3RoKQogewotICAgIGlmIChieXRlT2Zmc2V0
ID4gYnl0ZUxlbmd0aCgpCi0gICAgICAgIHx8IGJ5dGVPZmZzZXQgKyBkYXRhQnl0ZUxlbmd0aCA+
IGJ5dGVMZW5ndGgoKQorICAgIC8vIERvIG5vdCByZXBsYWNlIHdpdGggUkVMRUFTRV9BU1NFUlQ7
IHdlIHdhbnQgdG8gYXZvaWQgdGhlIHZpcnR1YWwgYnl0ZUxlbmd0aCgpIGZ1bmN0aW9uIGNhbGwg
aW4gcmVsZWFzZS4KKyAgICBBU1NFUlRfV0lUSF9TRUNVUklUWV9JTVBMSUNBVElPTihidWZmZXJC
eXRlTGVuZ3RoID09IGJ5dGVMZW5ndGgoKSk7CisgICAgaWYgKGJ5dGVPZmZzZXQgPiBidWZmZXJC
eXRlTGVuZ3RoCisgICAgICAgIHx8IGJ5dGVPZmZzZXQgKyBkYXRhQnl0ZUxlbmd0aCA+IGJ1ZmZl
ckJ5dGVMZW5ndGgKICAgICAgICAgfHwgYnl0ZU9mZnNldCArIGRhdGFCeXRlTGVuZ3RoIDwgYnl0
ZU9mZnNldCkgewogICAgICAgICAvLyBPdXQgb2YgcmFuZ2Ugb2Zmc2V0IG9yIG92ZXJmbG93CiAg
ICAgICAgIHJldHVybiBmYWxzZTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1l
L0NhY2hlZFR5cGVzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9DYWNoZWRUeXBlcy5jcHAJKHJldmlzaW9uIDI0NjI3MSkKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ydW50aW1lL0NhY2hlZFR5cGVzLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTA4OCwx
MyArMTA4OCwxMyBAQCBwdWJsaWM6CiAgICAgdm9pZCBlbmNvZGUoRW5jb2RlciYgZW5jb2Rlciwg
Y29uc3QgU2NvcGVkQXJndW1lbnRzVGFibGUmIHNjb3BlZEFyZ3VtZW50c1RhYmxlKQogICAgIHsK
ICAgICAgICAgbV9sZW5ndGggPSBzY29wZWRBcmd1bWVudHNUYWJsZS5tX2xlbmd0aDsKLSAgICAg
ICAgbV9hcmd1bWVudHMuZW5jb2RlKGVuY29kZXIsIHNjb3BlZEFyZ3VtZW50c1RhYmxlLm1fYXJn
dW1lbnRzLmdldChtX2xlbmd0aCksIG1fbGVuZ3RoKTsKKyAgICAgICAgbV9hcmd1bWVudHMuZW5j
b2RlKGVuY29kZXIsIHNjb3BlZEFyZ3VtZW50c1RhYmxlLm1fYXJndW1lbnRzLmdldCgpLCBtX2xl
bmd0aCk7CiAgICAgfQogCiAgICAgU2NvcGVkQXJndW1lbnRzVGFibGUqIGRlY29kZShEZWNvZGVy
JiBkZWNvZGVyKSBjb25zdAogICAgIHsKICAgICAgICAgU2NvcGVkQXJndW1lbnRzVGFibGUqIHNj
b3BlZEFyZ3VtZW50c1RhYmxlID0gU2NvcGVkQXJndW1lbnRzVGFibGU6OmNyZWF0ZShkZWNvZGVy
LnZtKCksIG1fbGVuZ3RoKTsKLSAgICAgICAgbV9hcmd1bWVudHMuZGVjb2RlKGRlY29kZXIsIHNj
b3BlZEFyZ3VtZW50c1RhYmxlLT5tX2FyZ3VtZW50cy5nZXQobV9sZW5ndGgpLCBtX2xlbmd0aCk7
CisgICAgICAgIG1fYXJndW1lbnRzLmRlY29kZShkZWNvZGVyLCBzY29wZWRBcmd1bWVudHNUYWJs
ZS0+bV9hcmd1bWVudHMuZ2V0KCksIG1fbGVuZ3RoKTsKICAgICAgICAgcmV0dXJuIHNjb3BlZEFy
Z3VtZW50c1RhYmxlOwogICAgIH0KIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRp
bWUvQ2FnZWRCYXJyaWVyUHRyLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L3J1bnRpbWUvQ2FnZWRCYXJyaWVyUHRyLmgJKHJldmlzaW9uIDI0NjI3MSkKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ydW50aW1lL0NhZ2VkQmFycmllclB0ci5oCSh3b3JraW5nIGNvcHkpCkBA
IC0zNSw0MSArMzUsODcgQEAgY2xhc3MgVk07CiAKIC8vIFRoaXMgaXMgYSBjb252ZW5pZW50IGNv
bWJvIG9mIEF1eGlsaWFyeUJhcnJpZXIgYW5kIENhZ2VkUHRyLgogCi10ZW1wbGF0ZTxHaWdhY2Fn
ZTo6S2luZCBwYXNzZWRLaW5kLCB0eXBlbmFtZSBULCBib29sIHNob3VsZFRhZyA9IGZhbHNlPgor
dGVtcGxhdGU8R2lnYWNhZ2U6OktpbmQgcGFzc2VkS2luZCwgdHlwZW5hbWUgVD4KIGNsYXNzIENh
Z2VkQmFycmllclB0ciB7CiBwdWJsaWM6CiAgICAgc3RhdGljIGNvbnN0ZXhwciBHaWdhY2FnZTo6
S2luZCBraW5kID0gcGFzc2VkS2luZDsKLSAgICB1c2luZyBUeXBlID0gVDsKLSAgICB1c2luZyBD
YWdlZFR5cGUgPSBDYWdlZFB0cjxraW5kLCBUeXBlLCBzaG91bGRUYWc+OworICAgIHR5cGVkZWYg
VCBUeXBlOwogICAgIAotICAgIENhZ2VkQmFycmllclB0cigpID0gZGVmYXVsdDsKKyAgICBDYWdl
ZEJhcnJpZXJQdHIoKSB7IH0KICAgICAKICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBVPgotICAgIENh
Z2VkQmFycmllclB0cihWTSYgdm0sIEpTQ2VsbCogY2VsbCwgVSYmIHZhbHVlLCB1bnNpZ25lZCBz
aXplKQorICAgIENhZ2VkQmFycmllclB0cihWTSYgdm0sIEpTQ2VsbCogY2VsbCwgVSYmIHZhbHVl
KQogICAgIHsKLSAgICAgICAgbV9iYXJyaWVyLnNldCh2bSwgY2VsbCwgQ2FnZWRUeXBlKHN0ZDo6
Zm9yd2FyZDxVPih2YWx1ZSksIHNpemUpKTsKKyAgICAgICAgbV9iYXJyaWVyLnNldCh2bSwgY2Vs
bCwgc3RkOjpmb3J3YXJkPFU+KHZhbHVlKSk7CiAgICAgfQogICAgIAogICAgIHZvaWQgY2xlYXIo
KSB7IG1fYmFycmllci5jbGVhcigpOyB9CiAgICAgCiAgICAgdGVtcGxhdGU8dHlwZW5hbWUgVT4K
LSAgICB2b2lkIHNldChWTSYgdm0sIEpTQ2VsbCogY2VsbCwgVSYmIHZhbHVlLCB1bnNpZ25lZCBz
aXplKQorICAgIHZvaWQgc2V0KFZNJiB2bSwgSlNDZWxsKiBjZWxsLCBVJiYgdmFsdWUpCiAgICAg
ewotICAgICAgICBtX2JhcnJpZXIuc2V0KHZtLCBjZWxsLCBDYWdlZFR5cGUoc3RkOjpmb3J3YXJk
PFU+KHZhbHVlKSwgc2l6ZSkpOworICAgICAgICBtX2JhcnJpZXIuc2V0KHZtLCBjZWxsLCBzdGQ6
OmZvcndhcmQ8VT4odmFsdWUpKTsKICAgICB9CiAgICAgCi0gICAgVCogZ2V0KHVuc2lnbmVkIHNp
emUpIGNvbnN0IHsgcmV0dXJuIG1fYmFycmllci5nZXQoKS5nZXQoc2l6ZSk7IH0KLSAgICBUKiBn
ZXRNYXlCZU51bGwodW5zaWduZWQgc2l6ZSkgY29uc3QgeyByZXR1cm4gbV9iYXJyaWVyLmdldCgp
LmdldE1heUJlTnVsbChzaXplKTsgfQotICAgIFQqIGdldFVuc2FmZSgpIGNvbnN0IHsgcmV0dXJu
IG1fYmFycmllci5nZXQoKS5nZXRVbnNhZmUoKTsgfQotCi0gICAgLy8gV2UgbmVlZCB0aGUgdGVt
cGxhdGUgaGVyZSBzbyB0aGF0IHRoZSB0eXBlIG9mIFUgaXMgZGVkdWNlZCBhdCB1c2FnZSB0aW1l
IHJhdGhlciB0aGFuIGNsYXNzIHRpbWUuIFUgc2hvdWxkIGFsd2F5cyBiZSBULgotICAgIHRlbXBs
YXRlPHR5cGVuYW1lIFUgPSBUPgotICAgIHR5cGVuYW1lIHN0ZDo6ZW5hYmxlX2lmPCFzdGQ6Omlz
X3NhbWU8dm9pZCwgVT46OnZhbHVlLCBUPjo6dHlwZSYKLSAgICAvKiBUJiAqLyBhdCh1bnNpZ25l
ZCBpbmRleCwgdW5zaWduZWQgc2l6ZSkgY29uc3QgeyByZXR1cm4gZ2V0KHNpemUpW2luZGV4XTsg
fQorICAgIFQqIGdldCgpIGNvbnN0IHsgcmV0dXJuIG1fYmFycmllci5nZXQoKS5nZXQoKTsgfQor
ICAgIFQqIGdldE1heUJlTnVsbCgpIGNvbnN0IHsgcmV0dXJuIG1fYmFycmllci5nZXQoKS5nZXRN
YXlCZU51bGwoKTsgfQorICAgIAorICAgIGJvb2wgb3BlcmF0b3I9PShjb25zdCBDYWdlZEJhcnJp
ZXJQdHImIG90aGVyKSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuIGdldE1heUJlTnVsbCgp
ID09IG90aGVyLmdldE1heUJlTnVsbCgpOworICAgIH0KKyAgICAKKyAgICBib29sIG9wZXJhdG9y
IT0oY29uc3QgQ2FnZWRCYXJyaWVyUHRyJiBvdGhlcikgY29uc3QKKyAgICB7CisgICAgICAgIHJl
dHVybiAhKCp0aGlzID09IG90aGVyKTsKKyAgICB9CisgICAgCisgICAgZXhwbGljaXQgb3BlcmF0
b3IgYm9vbCgpIGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4gKnRoaXMgIT0gQ2FnZWRCYXJy
aWVyUHRyKCk7CisgICAgfQorICAgIAorICAgIHRlbXBsYXRlPHR5cGVuYW1lIFU+CisgICAgdm9p
ZCBzZXRXaXRob3V0QmFycmllcihVJiYgdmFsdWUpIHsgbV9iYXJyaWVyLnNldFdpdGhvdXRCYXJy
aWVyKHN0ZDo6Zm9yd2FyZDxVPih2YWx1ZSkpOyB9CisgICAgCisgICAgVCYgb3BlcmF0b3IqKCkg
Y29uc3QgeyByZXR1cm4gKmdldCgpOyB9CisgICAgVCogb3BlcmF0b3ItPigpIGNvbnN0IHsgcmV0
dXJuIGdldCgpOyB9CisgICAgCisgICAgdGVtcGxhdGU8dHlwZW5hbWUgSW5kZXhUeXBlPgorICAg
IFQmIG9wZXJhdG9yW10oSW5kZXhUeXBlIGluZGV4KSBjb25zdCB7IHJldHVybiBnZXQoKVtpbmRl
eF07IH0KKyAgICAKK3ByaXZhdGU6CisgICAgQXV4aWxpYXJ5QmFycmllcjxDYWdlZFB0cjxraW5k
LCBUPj4gbV9iYXJyaWVyOworfTsKIAordGVtcGxhdGU8R2lnYWNhZ2U6OktpbmQgcGFzc2VkS2lu
ZD4KK2NsYXNzIENhZ2VkQmFycmllclB0cjxwYXNzZWRLaW5kLCB2b2lkPiB7CitwdWJsaWM6Cisg
ICAgc3RhdGljIGNvbnN0ZXhwciBHaWdhY2FnZTo6S2luZCBraW5kID0gcGFzc2VkS2luZDsKKyAg
ICB0eXBlZGVmIHZvaWQgVHlwZTsKKyAgICAKKyAgICBDYWdlZEJhcnJpZXJQdHIoKSB7IH0KKyAg
ICAKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBVPgorICAgIENhZ2VkQmFycmllclB0cihWTSYgdm0s
IEpTQ2VsbCogY2VsbCwgVSYmIHZhbHVlKQorICAgIHsKKyAgICAgICAgbV9iYXJyaWVyLnNldCh2
bSwgY2VsbCwgc3RkOjpmb3J3YXJkPFU+KHZhbHVlKSk7CisgICAgfQorICAgIAorICAgIHZvaWQg
Y2xlYXIoKSB7IG1fYmFycmllci5jbGVhcigpOyB9CisgICAgCisgICAgdGVtcGxhdGU8dHlwZW5h
bWUgVT4KKyAgICB2b2lkIHNldChWTSYgdm0sIEpTQ2VsbCogY2VsbCwgVSYmIHZhbHVlKQorICAg
IHsKKyAgICAgICAgbV9iYXJyaWVyLnNldCh2bSwgY2VsbCwgc3RkOjpmb3J3YXJkPFU+KHZhbHVl
KSk7CisgICAgfQorICAgIAorICAgIHZvaWQqIGdldCgpIGNvbnN0IHsgcmV0dXJuIG1fYmFycmll
ci5nZXQoKS5nZXQoKTsgfQorICAgIHZvaWQqIGdldE1heUJlTnVsbCgpIGNvbnN0IHsgcmV0dXJu
IG1fYmFycmllci5nZXQoKS5nZXRNYXlCZU51bGwoKTsgfQorICAgIAogICAgIGJvb2wgb3BlcmF0
b3I9PShjb25zdCBDYWdlZEJhcnJpZXJQdHImIG90aGVyKSBjb25zdAogICAgIHsKLSAgICAgICAg
cmV0dXJuIG1fYmFycmllci5nZXQoKSA9PSBvdGhlci5tX2JhcnJpZXIuZ2V0KCk7CisgICAgICAg
IHJldHVybiBnZXRNYXlCZU51bGwoKSA9PSBvdGhlci5nZXRNYXlCZU51bGwoKTsKICAgICB9CiAg
ICAgCiAgICAgYm9vbCBvcGVyYXRvciE9KGNvbnN0IENhZ2VkQmFycmllclB0ciYgb3RoZXIpIGNv
bnN0CkBAIC03OSwxNCArMTI1LDE0IEBAIHB1YmxpYzoKICAgICAKICAgICBleHBsaWNpdCBvcGVy
YXRvciBib29sKCkgY29uc3QKICAgICB7Ci0gICAgICAgIHJldHVybiAhIW1fYmFycmllci5nZXQo
KTsKKyAgICAgICAgcmV0dXJuICp0aGlzICE9IENhZ2VkQmFycmllclB0cigpOwogICAgIH0KICAg
ICAKICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBVPgotICAgIHZvaWQgc2V0V2l0aG91dEJhcnJpZXIo
VSYmIHZhbHVlLCB1bnNpZ25lZCBzaXplKSB7IG1fYmFycmllci5zZXRXaXRob3V0QmFycmllcihD
YWdlZFR5cGUoc3RkOjpmb3J3YXJkPFU+KHZhbHVlKSwgc2l6ZSkpOyB9CisgICAgdm9pZCBzZXRX
aXRob3V0QmFycmllcihVJiYgdmFsdWUpIHsgbV9iYXJyaWVyLnNldFdpdGhvdXRCYXJyaWVyKHN0
ZDo6Zm9yd2FyZDxVPih2YWx1ZSkpOyB9CiAgICAgCiBwcml2YXRlOgotICAgIEF1eGlsaWFyeUJh
cnJpZXI8Q2FnZWRUeXBlPiBtX2JhcnJpZXI7CisgICAgQXV4aWxpYXJ5QmFycmllcjxDYWdlZFB0
cjxraW5kLCB2b2lkPj4gbV9iYXJyaWVyOwogfTsKIAogfSAvLyBuYW1lc3BhY2UgSlNDCkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9EYXRhVmlldy5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvRGF0YVZpZXcuY3BwCShyZXZpc2lvbiAy
NDYyNzEpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9EYXRhVmlldy5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTMzLDcgKzMzLDggQEAKIG5hbWVzcGFjZSBKU0MgewogCiBEYXRhVmll
dzo6RGF0YVZpZXcoUmVmUHRyPEFycmF5QnVmZmVyPiYmIGJ1ZmZlciwgdW5zaWduZWQgYnl0ZU9m
ZnNldCwgdW5zaWduZWQgYnl0ZUxlbmd0aCkKLSAgICA6IEFycmF5QnVmZmVyVmlldyhXVEZNb3Zl
KGJ1ZmZlciksIGJ5dGVPZmZzZXQsIGJ5dGVMZW5ndGgpCisgICAgOiBBcnJheUJ1ZmZlclZpZXco
V1RGTW92ZShidWZmZXIpLCBieXRlT2Zmc2V0KQorICAgICwgbV9ieXRlTGVuZ3RoKGJ5dGVMZW5n
dGgpCiB7CiB9CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0RhdGFWaWV3
LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvRGF0YVZpZXcu
aAkocmV2aXNpb24gMjQ2MjcxKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvRGF0
YVZpZXcuaAkod29ya2luZyBjb3B5KQpAQCAtMzgsNiArMzgsMTEgQEAgcHVibGljOgogICAgIEpT
X0VYUE9SVF9QUklWQVRFIHN0YXRpYyBSZWY8RGF0YVZpZXc+IGNyZWF0ZShSZWZQdHI8QXJyYXlC
dWZmZXI+JiYsIHVuc2lnbmVkIGJ5dGVPZmZzZXQsIHVuc2lnbmVkIGxlbmd0aCk7CiAgICAgc3Rh
dGljIFJlZjxEYXRhVmlldz4gY3JlYXRlKFJlZlB0cjxBcnJheUJ1ZmZlcj4mJik7CiAgICAgCisg
ICAgdW5zaWduZWQgYnl0ZUxlbmd0aCgpIGNvbnN0IG92ZXJyaWRlCisgICAgeworICAgICAgICBy
ZXR1cm4gbV9ieXRlTGVuZ3RoOworICAgIH0KKyAgICAKICAgICBUeXBlZEFycmF5VHlwZSBnZXRU
eXBlKCkgY29uc3Qgb3ZlcnJpZGUKICAgICB7CiAgICAgICAgIHJldHVybiBUeXBlRGF0YVZpZXc7
CkBAIC01Nyw3ICs2Miw3IEBAIHB1YmxpYzoKICAgICAgICAgfSBlbHNlCiAgICAgICAgICAgICBS
RUxFQVNFX0FTU0VSVChvZmZzZXQgKyBzaXplb2YoVCkgPD0gYnl0ZUxlbmd0aCgpKTsKICAgICAg
ICAgcmV0dXJuIGZsaXBCeXRlc0lmTGl0dGxlRW5kaWFuKAotICAgICAgICAgICAgKnJlaW50ZXJw
cmV0X2Nhc3Q8VCo+KHN0YXRpY19jYXN0PHVpbnQ4X3QqPihtX2Jhc2VBZGRyZXNzLmdldChieXRl
TGVuZ3RoKCkpKSArIG9mZnNldCksCisgICAgICAgICAgICAqcmVpbnRlcnByZXRfY2FzdDxUKj4o
c3RhdGljX2Nhc3Q8dWludDhfdCo+KG1fYmFzZUFkZHJlc3MuZ2V0KCkpICsgb2Zmc2V0KSwKICAg
ICAgICAgICAgIGxpdHRsZUVuZGlhbik7CiAgICAgfQogICAgIApAQCAtODEsOSArODYsMTIgQEAg
cHVibGljOgogICAgICAgICAgICAgKnN0YXR1cyA9IHRydWU7CiAgICAgICAgIH0gZWxzZQogICAg
ICAgICAgICAgUkVMRUFTRV9BU1NFUlQob2Zmc2V0ICsgc2l6ZW9mKFQpIDw9IGJ5dGVMZW5ndGgo
KSk7Ci0gICAgICAgICpyZWludGVycHJldF9jYXN0PFQqPihzdGF0aWNfY2FzdDx1aW50OF90Kj4o
bV9iYXNlQWRkcmVzcy5nZXQoYnl0ZUxlbmd0aCgpKSkgKyBvZmZzZXQpID0KKyAgICAgICAgKnJl
aW50ZXJwcmV0X2Nhc3Q8VCo+KHN0YXRpY19jYXN0PHVpbnQ4X3QqPihtX2Jhc2VBZGRyZXNzLmdl
dCgpKSArIG9mZnNldCkgPQogICAgICAgICAgICAgZmxpcEJ5dGVzSWZMaXR0bGVFbmRpYW4odmFs
dWUsIGxpdHRsZUVuZGlhbik7CiAgICAgfQorCitwcml2YXRlOgorICAgIHVuc2lnbmVkIG1fYnl0
ZUxlbmd0aDsKIH07CiAKIH0gLy8gbmFtZXNwYWNlIEpTQwpJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvRGlyZWN0QXJndW1lbnRzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcnVudGltZS9EaXJlY3RBcmd1bWVudHMuY3BwCShyZXZpc2lvbiAyNDYy
NzEpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9EaXJlY3RBcmd1bWVudHMuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC0xMDEsNyArMTAxLDcgQEAgdm9pZCBEaXJlY3RBcmd1bWVudHM6
OnZpc2l0Q2hpbGRyZW4oSlNDZQogICAgIHZpc2l0b3IuYXBwZW5kKHRoaXNPYmplY3QtPm1fY2Fs
bGVlKTsKIAogICAgIGlmICh0aGlzT2JqZWN0LT5tX21hcHBlZEFyZ3VtZW50cykKLSAgICAgICAg
dmlzaXRvci5tYXJrQXV4aWxpYXJ5KHRoaXNPYmplY3QtPm1fbWFwcGVkQXJndW1lbnRzLmdldCh0
aGlzT2JqZWN0LT5pbnRlcm5hbExlbmd0aCgpKSk7CisgICAgICAgIHZpc2l0b3IubWFya0F1eGls
aWFyeSh0aGlzT2JqZWN0LT5tX21hcHBlZEFyZ3VtZW50cy5nZXQoKSk7CiAgICAgR2VuZXJpY0Fy
Z3VtZW50czxEaXJlY3RBcmd1bWVudHM+Ojp2aXNpdENoaWxkcmVuKHRoaXNDZWxsLCB2aXNpdG9y
KTsKIH0KIApAQCAtMTIwLDggKzEyMCw4IEBAIHZvaWQgRGlyZWN0QXJndW1lbnRzOjpvdmVycmlk
ZVRoaW5ncyhWTSYKICAgICAKICAgICB2b2lkKiBiYWNraW5nU3RvcmUgPSB2bS5naWdhY2FnZUF1
eGlsaWFyeVNwYWNlKG1fbWFwcGVkQXJndW1lbnRzLmtpbmQpLmFsbG9jYXRlTm9uVmlydHVhbCh2
bSwgbWFwcGVkQXJndW1lbnRzU2l6ZSgpLCBudWxscHRyLCBBbGxvY2F0aW9uRmFpbHVyZU1vZGU6
OkFzc2VydCk7CiAgICAgYm9vbCogb3ZlcnJpZGVzID0gc3RhdGljX2Nhc3Q8Ym9vbCo+KGJhY2tp
bmdTdG9yZSk7Ci0gICAgbV9tYXBwZWRBcmd1bWVudHMuc2V0KHZtLCB0aGlzLCBvdmVycmlkZXMs
IGludGVybmFsTGVuZ3RoKCkpOwotICAgIGZvciAodW5zaWduZWQgaSA9IGludGVybmFsTGVuZ3Ro
KCk7IGktLTspCisgICAgbV9tYXBwZWRBcmd1bWVudHMuc2V0KHZtLCB0aGlzLCBvdmVycmlkZXMp
OworICAgIGZvciAodW5zaWduZWQgaSA9IG1fbGVuZ3RoOyBpLS07KQogICAgICAgICBvdmVycmlk
ZXNbaV0gPSBmYWxzZTsKIH0KIApAQCAtMTM0LDcgKzEzNCw3IEBAIHZvaWQgRGlyZWN0QXJndW1l
bnRzOjpvdmVycmlkZVRoaW5nc0lmTmUKIHZvaWQgRGlyZWN0QXJndW1lbnRzOjp1bm1hcEFyZ3Vt
ZW50KFZNJiB2bSwgdW5zaWduZWQgaW5kZXgpCiB7CiAgICAgb3ZlcnJpZGVUaGluZ3NJZk5lY2Vz
c2FyeSh2bSk7Ci0gICAgbV9tYXBwZWRBcmd1bWVudHMuYXQoaW5kZXgsIGludGVybmFsTGVuZ3Ro
KCkpID0gdHJ1ZTsKKyAgICBtX21hcHBlZEFyZ3VtZW50c1tpbmRleF0gPSB0cnVlOwogfQogCiB2
b2lkIERpcmVjdEFyZ3VtZW50czo6Y29weVRvQXJndW1lbnRzKEV4ZWNTdGF0ZSogZXhlYywgVmly
dHVhbFJlZ2lzdGVyIGZpcnN0RWxlbWVudERlc3QsIHVuc2lnbmVkIG9mZnNldCwgdW5zaWduZWQg
bGVuZ3RoKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvRGlyZWN0QXJndW1l
bnRzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvRGlyZWN0
QXJndW1lbnRzLmgJKHJldmlzaW9uIDI0NjI3MSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9y
dW50aW1lL0RpcmVjdEFyZ3VtZW50cy5oCSh3b3JraW5nIGNvcHkpCkBAIC04Niw3ICs4Niw3IEBA
IHB1YmxpYzoKICAgICAKICAgICBib29sIGlzTWFwcGVkQXJndW1lbnQodWludDMyX3QgaSkgY29u
c3QKICAgICB7Ci0gICAgICAgIHJldHVybiBpIDwgbV9sZW5ndGggJiYgKCFtX21hcHBlZEFyZ3Vt
ZW50cyB8fCAhbV9tYXBwZWRBcmd1bWVudHMuYXQoaSwgbV9sZW5ndGgpKTsKKyAgICAgICAgcmV0
dXJuIGkgPCBtX2xlbmd0aCAmJiAoIW1fbWFwcGVkQXJndW1lbnRzIHx8ICFtX21hcHBlZEFyZ3Vt
ZW50c1tpXSk7CiAgICAgfQogCiAgICAgYm9vbCBpc01hcHBlZEFyZ3VtZW50SW5ERkcodWludDMy
X3QgaSkgY29uc3QKQEAgLTE4Miw4ICsxODIsNyBAQCBwcml2YXRlOgogICAgIFdyaXRlQmFycmll
cjxKU0Z1bmN0aW9uPiBtX2NhbGxlZTsKICAgICB1aW50MzJfdCBtX2xlbmd0aDsgLy8gQWx3YXlz
IHRoZSBhY3R1YWwgbGVuZ3RoIG9mIGNhcHR1cmVkIGFyZ3VtZW50cyBhbmQgbmV2ZXIgd2hhdCB3
YXMgc3RvcmVkIGludG8gdGhlIGxlbmd0aCBwcm9wZXJ0eS4KICAgICB1aW50MzJfdCBtX21pbkNh
cGFjaXR5OyAvLyBUaGUgbWF4IG9mIHRoaXMgYW5kIGxlbmd0aCBkZXRlcm1pbmVzIHRoZSBjYXBh
Y2l0eSBvZiB0aGlzIG9iamVjdC4gSXQgbWF5IGJlIHRoZSBhY3R1YWwgY2FwYWNpdHksIG9yIG1h
eWJlIHNvbWV0aGluZyBzbWFsbGVyLiBXZSBhcnJhbmdlIGl0IHRoaXMgd2F5IHRvIGJlIGtpbmQg
dG8gdGhlIEpJVHMuCi0gICAgdXNpbmcgTWFwcGVkQXJndW1lbnRzID0gQ2FnZWRCYXJyaWVyUHRy
PEdpZ2FjYWdlOjpQcmltaXRpdmUsIGJvb2w+OwotICAgIE1hcHBlZEFyZ3VtZW50cyBtX21hcHBl
ZEFyZ3VtZW50czsgLy8gSWYgbm9uLW51bGwsIGl0IG1lYW5zIHRoYXQgbGVuZ3RoLCBjYWxsZWUs
IGFuZCBjYWxsZXIgYXJlIGZ1bGx5IG1hdGVyaWFsaXplZCBwcm9wZXJ0aWVzLgorICAgIENhZ2Vk
QmFycmllclB0cjxHaWdhY2FnZTo6UHJpbWl0aXZlLCBib29sPiBtX21hcHBlZEFyZ3VtZW50czsg
Ly8gSWYgbm9uLW51bGwsIGl0IG1lYW5zIHRoYXQgbGVuZ3RoLCBjYWxsZWUsIGFuZCBjYWxsZXIg
YXJlIGZ1bGx5IG1hdGVyaWFsaXplZCBwcm9wZXJ0aWVzLgogfTsKIAogfSAvLyBuYW1lc3BhY2Ug
SlNDCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9HZW5lcmljQXJndW1lbnRz
LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvR2VuZXJpY0Fy
Z3VtZW50cy5oCShyZXZpc2lvbiAyNDYyNzEpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9HZW5lcmljQXJndW1lbnRzLmgJKHdvcmtpbmcgY29weSkKQEAgLTYwLDkgKzYwLDggQEAg
cHJvdGVjdGVkOgogICAgIGJvb2wgaXNNb2RpZmllZEFyZ3VtZW50RGVzY3JpcHRvcih1bnNpZ25l
ZCBpbmRleCwgdW5zaWduZWQgbGVuZ3RoKTsKIAogICAgIHZvaWQgY29weVRvQXJndW1lbnRzKEV4
ZWNTdGF0ZSosIFZpcnR1YWxSZWdpc3RlciBmaXJzdEVsZW1lbnREZXN0LCB1bnNpZ25lZCBvZmZz
ZXQsIHVuc2lnbmVkIGxlbmd0aCk7Ci0KLSAgICB1c2luZyBNb2RpZmllZEFyZ3VtZW50c1B0ciA9
IENhZ2VkQmFycmllclB0cjxHaWdhY2FnZTo6UHJpbWl0aXZlLCBib29sPjsKLSAgICBNb2RpZmll
ZEFyZ3VtZW50c1B0ciBtX21vZGlmaWVkQXJndW1lbnRzRGVzY3JpcHRvcjsKKyAgICAKKyAgICBD
YWdlZEJhcnJpZXJQdHI8R2lnYWNhZ2U6OlByaW1pdGl2ZSwgYm9vbD4gbV9tb2RpZmllZEFyZ3Vt
ZW50c0Rlc2NyaXB0b3I7CiB9OwogCiB9IC8vIG5hbWVzcGFjZSBKU0MKSW5kZXg6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ydW50aW1lL0dlbmVyaWNBcmd1bWVudHNJbmxpbmVzLmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvR2VuZXJpY0FyZ3VtZW50c0lubGlu
ZXMuaAkocmV2aXNpb24gMjQ2MjcxKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUv
R2VuZXJpY0FyZ3VtZW50c0lubGluZXMuaAkod29ya2luZyBjb3B5KQpAQCAtMzgsNyArMzgsNyBA
QCB2b2lkIEdlbmVyaWNBcmd1bWVudHM8VHlwZT46OnZpc2l0Q2hpbGRyCiAgICAgQmFzZTo6dmlz
aXRDaGlsZHJlbih0aGlzQ2VsbCwgdmlzaXRvcik7CiAgICAgCiAgICAgaWYgKHRoaXNPYmplY3Qt
Pm1fbW9kaWZpZWRBcmd1bWVudHNEZXNjcmlwdG9yKQotICAgICAgICB2aXNpdG9yLm1hcmtBdXhp
bGlhcnkodGhpc09iamVjdC0+bV9tb2RpZmllZEFyZ3VtZW50c0Rlc2NyaXB0b3IuZ2V0VW5zYWZl
KCkpOworICAgICAgICB2aXNpdG9yLm1hcmtBdXhpbGlhcnkodGhpc09iamVjdC0+bV9tb2RpZmll
ZEFyZ3VtZW50c0Rlc2NyaXB0b3IuZ2V0KCkpOwogfQogCiB0ZW1wbGF0ZTx0eXBlbmFtZSBUeXBl
PgpAQCAtMjY1LDcgKzI2NSw3IEBAIHZvaWQgR2VuZXJpY0FyZ3VtZW50czxUeXBlPjo6aW5pdE1v
ZGlmaWUKICAgICBpZiAoYXJnc0xlbmd0aCkgewogICAgICAgICB2b2lkKiBiYWNraW5nU3RvcmUg
PSB2bS5naWdhY2FnZUF1eGlsaWFyeVNwYWNlKG1fbW9kaWZpZWRBcmd1bWVudHNEZXNjcmlwdG9y
LmtpbmQpLmFsbG9jYXRlTm9uVmlydHVhbCh2bSwgV1RGOjpyb3VuZFVwVG9NdWx0aXBsZU9mPDg+
KGFyZ3NMZW5ndGgpLCBudWxscHRyLCBBbGxvY2F0aW9uRmFpbHVyZU1vZGU6OkFzc2VydCk7CiAg
ICAgICAgIGJvb2wqIG1vZGlmaWVkQXJndW1lbnRzID0gc3RhdGljX2Nhc3Q8Ym9vbCo+KGJhY2tp
bmdTdG9yZSk7Ci0gICAgICAgIG1fbW9kaWZpZWRBcmd1bWVudHNEZXNjcmlwdG9yLnNldCh2bSwg
dGhpcywgbW9kaWZpZWRBcmd1bWVudHMsIGFyZ3NMZW5ndGgpOworICAgICAgICBtX21vZGlmaWVk
QXJndW1lbnRzRGVzY3JpcHRvci5zZXQodm0sIHRoaXMsIG1vZGlmaWVkQXJndW1lbnRzKTsKICAg
ICAgICAgZm9yICh1bnNpZ25lZCBpID0gYXJnc0xlbmd0aDsgaS0tOykKICAgICAgICAgICAgIG1v
ZGlmaWVkQXJndW1lbnRzW2ldID0gZmFsc2U7CiAgICAgfQpAQCAtMjgzLDcgKzI4Myw3IEBAIHZv
aWQgR2VuZXJpY0FyZ3VtZW50czxUeXBlPjo6c2V0TW9kaWZpZWQKIHsKICAgICBpbml0TW9kaWZp
ZWRBcmd1bWVudHNEZXNjcmlwdG9ySWZOZWNlc3Nhcnkodm0sIGxlbmd0aCk7CiAgICAgaWYgKGlu
ZGV4IDwgbGVuZ3RoKQotICAgICAgICBtX21vZGlmaWVkQXJndW1lbnRzRGVzY3JpcHRvci5hdChp
bmRleCwgbGVuZ3RoKSA9IHRydWU7CisgICAgICAgIG1fbW9kaWZpZWRBcmd1bWVudHNEZXNjcmlw
dG9yW2luZGV4XSA9IHRydWU7CiB9CiAKIHRlbXBsYXRlPHR5cGVuYW1lIFR5cGU+CkBAIC0yOTIs
NyArMjkyLDcgQEAgYm9vbCBHZW5lcmljQXJndW1lbnRzPFR5cGU+Ojppc01vZGlmaWVkQQogICAg
IGlmICghbV9tb2RpZmllZEFyZ3VtZW50c0Rlc2NyaXB0b3IpCiAgICAgICAgIHJldHVybiBmYWxz
ZTsKICAgICBpZiAoaW5kZXggPCBsZW5ndGgpCi0gICAgICAgIHJldHVybiBtX21vZGlmaWVkQXJn
dW1lbnRzRGVzY3JpcHRvci5hdChpbmRleCwgbGVuZ3RoKTsKKyAgICAgICAgcmV0dXJuIG1fbW9k
aWZpZWRBcmd1bWVudHNEZXNjcmlwdG9yW2luZGV4XTsKICAgICByZXR1cm4gZmFsc2U7CiB9CiAK
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0dlbmVyaWNUeXBlZEFycmF5Vmll
dy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0dlbmVyaWNU
eXBlZEFycmF5Vmlldy5oCShyZXZpc2lvbiAyNDYyNzEpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvcnVudGltZS9HZW5lcmljVHlwZWRBcnJheVZpZXcuaAkod29ya2luZyBjb3B5KQpAQCAtNTgs
NyArNTgsOCBAQCBwdWJsaWM6CiAgICAgICAgIHJldHVybiBzZXRSYW5nZUltcGwoCiAgICAgICAg
ICAgICByZWludGVycHJldF9jYXN0PGNvbnN0IGNoYXIqPihkYXRhKSwKICAgICAgICAgICAgIGNv
dW50ICogc2l6ZW9mKHR5cGVuYW1lIEFkYXB0b3I6OlR5cGUpLAotICAgICAgICAgICAgb2Zmc2V0
ICogc2l6ZW9mKHR5cGVuYW1lIEFkYXB0b3I6OlR5cGUpKTsKKyAgICAgICAgICAgIG9mZnNldCAq
IHNpemVvZih0eXBlbmFtZSBBZGFwdG9yOjpUeXBlKSwKKyAgICAgICAgICAgIGludGVybmFsQnl0
ZUxlbmd0aCgpKTsKICAgICB9CiAgICAgCiAgICAgYm9vbCB6ZXJvUmFuZ2UodW5zaWduZWQgb2Zm
c2V0LCBzaXplX3QgY291bnQpCkBAIC03Miw3ICs3MywxMiBAQCBwdWJsaWM6CiAgICAgewogICAg
ICAgICBpZiAoaXNOZXV0ZXJlZCgpKQogICAgICAgICAgICAgcmV0dXJuIDA7Ci0gICAgICAgIHJl
dHVybiBieXRlTGVuZ3RoKCkgLyBzaXplb2YodHlwZW5hbWUgQWRhcHRvcjo6VHlwZSk7CisgICAg
ICAgIHJldHVybiBtX2xlbmd0aDsKKyAgICB9CisgICAgCisgICAgdW5zaWduZWQgYnl0ZUxlbmd0
aCgpIGNvbnN0IG92ZXJyaWRlCisgICAgeworICAgICAgICByZXR1cm4gaW50ZXJuYWxCeXRlTGVu
Z3RoKCk7CiAgICAgfQogCiAgICAgdHlwZW5hbWUgQWRhcHRvcjo6VHlwZSBpdGVtKHVuc2lnbmVk
IGluZGV4KSBjb25zdApAQCAtOTgsNyArMTA0LDggQEAgcHVibGljOgogICAgICAgICByZXR1cm4g
Z2V0UmFuZ2VJbXBsKAogICAgICAgICAgICAgcmVpbnRlcnByZXRfY2FzdDxjaGFyKj4oZGF0YSks
CiAgICAgICAgICAgICBjb3VudCAqIHNpemVvZih0eXBlbmFtZSBBZGFwdG9yOjpUeXBlKSwKLSAg
ICAgICAgICAgIG9mZnNldCAqIHNpemVvZih0eXBlbmFtZSBBZGFwdG9yOjpUeXBlKSk7CisgICAg
ICAgICAgICBvZmZzZXQgKiBzaXplb2YodHlwZW5hbWUgQWRhcHRvcjo6VHlwZSksCisgICAgICAg
ICAgICBpbnRlcm5hbEJ5dGVMZW5ndGgoKSk7CiAgICAgfQogCiAgICAgYm9vbCBjaGVja0luYm91
bmREYXRhKHVuc2lnbmVkIG9mZnNldCwgc2l6ZV90IGNvdW50KSBjb25zdApAQCAtMTE5LDYgKzEy
NiwxNCBAQCBwdWJsaWM6CiAgICAgfQogCiAgICAgSlNBcnJheUJ1ZmZlclZpZXcqIHdyYXAoRXhl
Y1N0YXRlKiwgSlNHbG9iYWxPYmplY3QqKSBvdmVycmlkZTsKKworcHJpdmF0ZToKKyAgICB1bnNp
Z25lZCBpbnRlcm5hbEJ5dGVMZW5ndGgoKSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuIGxl
bmd0aCgpICogc2l6ZW9mKHR5cGVuYW1lIEFkYXB0b3I6OlR5cGUpOworICAgIH0KKworICAgIHVu
c2lnbmVkIG1fbGVuZ3RoOwogfTsKIAogfSAvLyBuYW1lc3BhY2UgSlNDCkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcnVudGltZS9HZW5lcmljVHlwZWRBcnJheVZpZXdJbmxpbmVzLmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvR2VuZXJpY1R5cGVkQXJy
YXlWaWV3SW5saW5lcy5oCShyZXZpc2lvbiAyNDYyNzEpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvcnVudGltZS9HZW5lcmljVHlwZWRBcnJheVZpZXdJbmxpbmVzLmgJKHdvcmtpbmcgY29weSkK
QEAgLTMyLDggKzMyLDkgQEAgbmFtZXNwYWNlIEpTQyB7CiAKIHRlbXBsYXRlPHR5cGVuYW1lIEFk
YXB0b3I+CiBHZW5lcmljVHlwZWRBcnJheVZpZXc8QWRhcHRvcj46OkdlbmVyaWNUeXBlZEFycmF5
VmlldygKLVJlZlB0cjxBcnJheUJ1ZmZlcj4mJiBidWZmZXIsIHVuc2lnbmVkIGJ5dGVPZmZzZXQs
IHVuc2lnbmVkIGxlbmd0aCkKLSAgICA6IEFycmF5QnVmZmVyVmlldyhXVEZNb3ZlKGJ1ZmZlciks
IGJ5dGVPZmZzZXQsIGxlbmd0aCAqIHNpemVvZih0eXBlbmFtZSBBZGFwdG9yOjpUeXBlKSkKKyAg
ICBSZWZQdHI8QXJyYXlCdWZmZXI+JiYgYnVmZmVyLCB1bnNpZ25lZCBieXRlT2Zmc2V0LCB1bnNp
Z25lZCBsZW5ndGgpCisgICAgOiBBcnJheUJ1ZmZlclZpZXcoV1RGTW92ZShidWZmZXIpLCBieXRl
T2Zmc2V0KQorICAgICwgbV9sZW5ndGgobGVuZ3RoKQogewogfQogCkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvcnVudGltZS9KU0FycmF5QnVmZmVyVmlldy5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNBcnJheUJ1ZmZlclZpZXcuY3BwCShyZXZp
c2lvbiAyNDYyNzEpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0FycmF5QnVm
ZmVyVmlldy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJp
Z2h0IChDKSAyMDEzLTIwMTkgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29w
eXJpZ2h0IChDKSAyMDEzLTIwMTggQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoK
ICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdp
dGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRo
YXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC01MCwxMiArNTAsMTEgQEAgU3RyaW5nIEpT
QXJyYXlCdWZmZXJWaWV3Ojp0b1N0cmluZ05hbWUoYwogSlNBcnJheUJ1ZmZlclZpZXc6OkNvbnN0
cnVjdGlvbkNvbnRleHQ6OkNvbnN0cnVjdGlvbkNvbnRleHQoCiAgICAgU3RydWN0dXJlKiBzdHJ1
Y3R1cmUsIHVpbnQzMl90IGxlbmd0aCwgdm9pZCogdmVjdG9yKQogICAgIDogbV9zdHJ1Y3R1cmUo
c3RydWN0dXJlKQotICAgICwgbV92ZWN0b3IodmVjdG9yLCBsZW5ndGgpCisgICAgLCBtX3ZlY3Rv
cih2ZWN0b3IpCiAgICAgLCBtX2xlbmd0aChsZW5ndGgpCiAgICAgLCBtX21vZGUoRmFzdFR5cGVk
QXJyYXkpCiAgICAgLCBtX2J1dHRlcmZseShudWxscHRyKQogewotICAgIEFTU0VSVCh2ZWN0b3Ig
PT0gcmVtb3ZlQXJyYXlQdHJUYWcodmVjdG9yKSk7CiAgICAgUkVMRUFTRV9BU1NFUlQobGVuZ3Ro
IDw9IGZhc3RTaXplTGltaXQpOwogfQogCkBAIC03NSwxMSArNzQsMTEgQEAgSlNBcnJheUJ1ZmZl
clZpZXc6OkNvbnN0cnVjdGlvbkNvbnRleHQ6OgogICAgICAgICAgICAgcmV0dXJuOwogCiAgICAg
ICAgIG1fc3RydWN0dXJlID0gc3RydWN0dXJlOwotICAgICAgICBtX3ZlY3RvciA9IFZlY3RvclR5
cGUodGVtcCwgbGVuZ3RoKTsKKyAgICAgICAgbV92ZWN0b3IgPSB0ZW1wOwogICAgICAgICBtX21v
ZGUgPSBGYXN0VHlwZWRBcnJheTsKIAogICAgICAgICBpZiAobW9kZSA9PSBaZXJvRmlsbCkgewot
ICAgICAgICAgICAgdWludDY0X3QqIGFzV29yZHMgPSBzdGF0aWNfY2FzdDx1aW50NjRfdCo+KHZl
Y3RvcigpKTsKKyAgICAgICAgICAgIHVpbnQ2NF90KiBhc1dvcmRzID0gc3RhdGljX2Nhc3Q8dWlu
dDY0X3QqPihtX3ZlY3Rvci5nZXRNYXlCZU51bGwoKSk7CiAgICAgICAgICAgICBmb3IgKHVuc2ln
bmVkIGkgPSBzaXplIC8gc2l6ZW9mKHVpbnQ2NF90KTsgaS0tOykKICAgICAgICAgICAgICAgICBh
c1dvcmRzW2ldID0gMDsKICAgICAgICAgfQpAQCAtOTIsMTEgKzkxLDExIEBAIEpTQXJyYXlCdWZm
ZXJWaWV3OjpDb25zdHJ1Y3Rpb25Db250ZXh0OjoKICAgICAgICAgcmV0dXJuOwogICAgIAogICAg
IHNpemVfdCBzaXplID0gc3RhdGljX2Nhc3Q8c2l6ZV90PihsZW5ndGgpICogc3RhdGljX2Nhc3Q8
c2l6ZV90PihlbGVtZW50U2l6ZSk7Ci0gICAgbV92ZWN0b3IgPSBWZWN0b3JUeXBlKEdpZ2FjYWdl
Ojp0cnlNYWxsb2MoR2lnYWNhZ2U6OlByaW1pdGl2ZSwgc2l6ZSksIGxlbmd0aCk7CisgICAgbV92
ZWN0b3IgPSBHaWdhY2FnZTo6dHJ5TWFsbG9jKEdpZ2FjYWdlOjpQcmltaXRpdmUsIHNpemUpOwog
ICAgIGlmICghbV92ZWN0b3IpCiAgICAgICAgIHJldHVybjsKICAgICBpZiAobW9kZSA9PSBaZXJv
RmlsbCkKLSAgICAgICAgbWVtc2V0KHZlY3RvcigpLCAwLCBzaXplKTsKKyAgICAgICAgbWVtc2V0
KG1fdmVjdG9yLmdldCgpLCAwLCBzaXplKTsKICAgICAKICAgICB2bS5oZWFwLnJlcG9ydEV4dHJh
TWVtb3J5QWxsb2NhdGVkKHN0YXRpY19jYXN0PHNpemVfdD4obGVuZ3RoKSAqIGVsZW1lbnRTaXpl
KTsKICAgICAKQEAgLTExMSw4ICsxMTAsNyBAQCBKU0FycmF5QnVmZmVyVmlldzo6Q29uc3RydWN0
aW9uQ29udGV4dDo6CiAgICAgLCBtX2xlbmd0aChsZW5ndGgpCiAgICAgLCBtX21vZGUoV2FzdGVm
dWxUeXBlZEFycmF5KQogewotICAgIEFTU0VSVChhcnJheUJ1ZmZlci0+ZGF0YSgpID09IHJlbW92
ZUFycmF5UHRyVGFnKGFycmF5QnVmZmVyLT5kYXRhKCkpKTsKLSAgICBtX3ZlY3RvciA9IFZlY3Rv
clR5cGUoc3RhdGljX2Nhc3Q8dWludDhfdCo+KGFycmF5QnVmZmVyLT5kYXRhKCkpICsgYnl0ZU9m
ZnNldCwgbGVuZ3RoKTsKKyAgICBtX3ZlY3RvciA9IHN0YXRpY19jYXN0PHVpbnQ4X3QqPihhcnJh
eUJ1ZmZlci0+ZGF0YSgpKSArIGJ5dGVPZmZzZXQ7CiAgICAgSW5kZXhpbmdIZWFkZXIgaW5kZXhp
bmdIZWFkZXI7CiAgICAgaW5kZXhpbmdIZWFkZXIuc2V0QXJyYXlCdWZmZXIoYXJyYXlCdWZmZXIu
Z2V0KCkpOwogICAgIG1fYnV0dGVyZmx5ID0gQnV0dGVyZmx5OjpjcmVhdGUodm0sIDAsIDAsIDAs
IHRydWUsIGluZGV4aW5nSGVhZGVyLCAwKTsKQEAgLTEyNiw4ICsxMjQsNyBAQCBKU0FycmF5QnVm
ZmVyVmlldzo6Q29uc3RydWN0aW9uQ29udGV4dDo6CiAgICAgLCBtX21vZGUoRGF0YVZpZXdNb2Rl
KQogICAgICwgbV9idXR0ZXJmbHkoMCkKIHsKLSAgICBBU1NFUlQoYXJyYXlCdWZmZXItPmRhdGEo
KSA9PSByZW1vdmVBcnJheVB0clRhZyhhcnJheUJ1ZmZlci0+ZGF0YSgpKSk7Ci0gICAgbV92ZWN0
b3IgPSBWZWN0b3JUeXBlKHN0YXRpY19jYXN0PHVpbnQ4X3QqPihhcnJheUJ1ZmZlci0+ZGF0YSgp
KSArIGJ5dGVPZmZzZXQsIGxlbmd0aCk7CisgICAgbV92ZWN0b3IgPSBzdGF0aWNfY2FzdDx1aW50
OF90Kj4oYXJyYXlCdWZmZXItPmRhdGEoKSkgKyBieXRlT2Zmc2V0OwogfQogCiBKU0FycmF5QnVm
ZmVyVmlldzo6SlNBcnJheUJ1ZmZlclZpZXcoVk0mIHZtLCBDb25zdHJ1Y3Rpb25Db250ZXh0JiBj
b250ZXh0KQpAQCAtMTM2LDggKzEzMyw3IEBAIEpTQXJyYXlCdWZmZXJWaWV3OjpKU0FycmF5QnVm
ZmVyVmlldyhWTSYKICAgICAsIG1fbW9kZShjb250ZXh0Lm1vZGUoKSkKIHsKICAgICBzZXRCdXR0
ZXJmbHkodm0sIGNvbnRleHQuYnV0dGVyZmx5KCkpOwotICAgIEFTU0VSVChjb250ZXh0LnZlY3Rv
cigpID09IHJlbW92ZUFycmF5UHRyVGFnKGNvbnRleHQudmVjdG9yKCkpKTsKLSAgICBtX3ZlY3Rv
ci5zZXRXaXRob3V0QmFycmllcihjb250ZXh0LnZlY3RvcigpLCBtX2xlbmd0aCk7CisgICAgbV92
ZWN0b3Iuc2V0V2l0aG91dEJhcnJpZXIoY29udGV4dC52ZWN0b3IoKSk7CiB9CiAKIHZvaWQgSlNB
cnJheUJ1ZmZlclZpZXc6OmZpbmlzaENyZWF0aW9uKFZNJiB2bSkKQEAgLTE5OCw3ICsxOTQsNyBA
QCB2b2lkIEpTQXJyYXlCdWZmZXJWaWV3OjpmaW5hbGl6ZShKU0NlbGwqCiAgICAgSlNBcnJheUJ1
ZmZlclZpZXcqIHRoaXNPYmplY3QgPSBzdGF0aWNfY2FzdDxKU0FycmF5QnVmZmVyVmlldyo+KGNl
bGwpOwogICAgIEFTU0VSVCh0aGlzT2JqZWN0LT5tX21vZGUgPT0gT3ZlcnNpemVUeXBlZEFycmF5
IHx8IHRoaXNPYmplY3QtPm1fbW9kZSA9PSBXYXN0ZWZ1bFR5cGVkQXJyYXkpOwogICAgIGlmICh0
aGlzT2JqZWN0LT5tX21vZGUgPT0gT3ZlcnNpemVUeXBlZEFycmF5KQotICAgICAgICBHaWdhY2Fn
ZTo6ZnJlZShHaWdhY2FnZTo6UHJpbWl0aXZlLCB0aGlzT2JqZWN0LT52ZWN0b3IoKSk7CisgICAg
ICAgIEdpZ2FjYWdlOjpmcmVlKEdpZ2FjYWdlOjpQcmltaXRpdmUsIHRoaXNPYmplY3QtPm1fdmVj
dG9yLmdldCgpKTsKIH0KIAogSlNBcnJheUJ1ZmZlciogSlNBcnJheUJ1ZmZlclZpZXc6OnVuc2hh
cmVkSlNCdWZmZXIoRXhlY1N0YXRlKiBleGVjKQpAQCAtMjg3LDcgKzI4Myw3IEBAIEFycmF5QnVm
ZmVyKiBKU0FycmF5QnVmZmVyVmlldzo6c2xvd0Rvd24KICAgICB7CiAgICAgICAgIGF1dG8gbG9j
a2VyID0gaG9sZExvY2soY2VsbExvY2soKSk7CiAgICAgICAgIGJ1dHRlcmZseSgpLT5pbmRleGlu
Z0hlYWRlcigpLT5zZXRBcnJheUJ1ZmZlcihidWZmZXIuZ2V0KCkpOwotICAgICAgICBtX3ZlY3Rv
ci5zZXRXaXRob3V0QmFycmllcihidWZmZXItPmRhdGEoKSwgbV9sZW5ndGgpOworICAgICAgICBt
X3ZlY3Rvci5zZXRXaXRob3V0QmFycmllcihidWZmZXItPmRhdGEoKSk7CiAgICAgICAgIFdURjo6
c3RvcmVTdG9yZUZlbmNlKCk7CiAgICAgICAgIG1fbW9kZSA9IFdhc3RlZnVsVHlwZWRBcnJheTsK
ICAgICB9CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0FycmF5QnVmZmVy
Vmlldy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTQXJy
YXlCdWZmZXJWaWV3LmgJKHJldmlzaW9uIDI0NjI3MSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL0pTQXJyYXlCdWZmZXJWaWV3LmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1
IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTkgQXBwbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEzLCAyMDE2IEFwcGxlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBh
bmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBl
cm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMjcsNyAr
MjcsNiBAQAogCiAjaW5jbHVkZSAiQXV4aWxpYXJ5QmFycmllci5oIgogI2luY2x1ZGUgIkpTT2Jq
ZWN0LmgiCi0jaW5jbHVkZSA8d3RmL1RhZ2dlZEFycmF5U3RvcmFnZVB0ci5oPgogCiBuYW1lc3Bh
Y2UgSlNDIHsKIApAQCAtOTcsNyArOTYsNiBAQCBjbGFzcyBKU0FycmF5QnVmZmVyVmlldyA6IHB1
YmxpYyBKU05vbkZpCiBwdWJsaWM6CiAgICAgdHlwZWRlZiBKU05vbkZpbmFsT2JqZWN0IEJhc2U7
CiAgICAgc3RhdGljIGNvbnN0IHVuc2lnbmVkIGZhc3RTaXplTGltaXQgPSAxMDAwOwotICAgIHVz
aW5nIFZlY3RvclB0ciA9IENhZ2VkQmFycmllclB0cjxHaWdhY2FnZTo6UHJpbWl0aXZlLCB2b2lk
LCB0YWdDYWdlZFB0cj47CiAgICAgCiAgICAgc3RhdGljIHNpemVfdCBzaXplT2YodWludDMyX3Qg
bGVuZ3RoLCB1aW50MzJfdCBlbGVtZW50U2l6ZSkKICAgICB7CkBAIC0xMzUsMTUgKzEzMywxNCBA
QCBwcm90ZWN0ZWQ6CiAgICAgICAgIGJvb2wgb3BlcmF0b3IhKCkgY29uc3QgeyByZXR1cm4gIW1f
c3RydWN0dXJlOyB9CiAgICAgICAgIAogICAgICAgICBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSgpIGNv
bnN0IHsgcmV0dXJuIG1fc3RydWN0dXJlOyB9Ci0gICAgICAgIHZvaWQqIHZlY3RvcigpIGNvbnN0
IHsgcmV0dXJuIG1fdmVjdG9yLmdldE1heUJlTnVsbChtX2xlbmd0aCk7IH0KKyAgICAgICAgdm9p
ZCogdmVjdG9yKCkgY29uc3QgeyByZXR1cm4gbV92ZWN0b3IuZ2V0TWF5QmVOdWxsKCk7IH0KICAg
ICAgICAgdWludDMyX3QgbGVuZ3RoKCkgY29uc3QgeyByZXR1cm4gbV9sZW5ndGg7IH0KICAgICAg
ICAgVHlwZWRBcnJheU1vZGUgbW9kZSgpIGNvbnN0IHsgcmV0dXJuIG1fbW9kZTsgfQogICAgICAg
ICBCdXR0ZXJmbHkqIGJ1dHRlcmZseSgpIGNvbnN0IHsgcmV0dXJuIG1fYnV0dGVyZmx5OyB9CiAg
ICAgICAgIAogICAgIHByaXZhdGU6CiAgICAgICAgIFN0cnVjdHVyZSogbV9zdHJ1Y3R1cmU7Ci0g
ICAgICAgIHVzaW5nIFZlY3RvclR5cGUgPSBDYWdlZFB0cjxHaWdhY2FnZTo6UHJpbWl0aXZlLCB2
b2lkLCB0YWdDYWdlZFB0cj47Ci0gICAgICAgIFZlY3RvclR5cGUgbV92ZWN0b3I7CisgICAgICAg
IENhZ2VkUHRyPEdpZ2FjYWdlOjpQcmltaXRpdmUsIHZvaWQ+IG1fdmVjdG9yOwogICAgICAgICB1
aW50MzJfdCBtX2xlbmd0aDsKICAgICAgICAgVHlwZWRBcnJheU1vZGUgbV9tb2RlOwogICAgICAg
ICBCdXR0ZXJmbHkqIG1fYnV0dGVyZmx5OwpAQCAtMTY3LDExICsxNjQsMTAgQEAgcHVibGljOgog
ICAgIEpTQXJyYXlCdWZmZXIqIHBvc3NpYmx5U2hhcmVkSlNCdWZmZXIoRXhlY1N0YXRlKiBleGVj
KTsKICAgICBSZWZQdHI8QXJyYXlCdWZmZXJWaWV3PiB1bnNoYXJlZEltcGwoKTsKICAgICBKU19F
WFBPUlRfUFJJVkFURSBSZWZQdHI8QXJyYXlCdWZmZXJWaWV3PiBwb3NzaWJseVNoYXJlZEltcGwo
KTsKLSAgICBib29sIGlzTmV1dGVyZWQoKSB7IHJldHVybiBoYXNBcnJheUJ1ZmZlcigpICYmICFo
YXNWZWN0b3IoKTsgfQorICAgIGJvb2wgaXNOZXV0ZXJlZCgpIHsgcmV0dXJuIGhhc0FycmF5QnVm
ZmVyKCkgJiYgIXZlY3RvcigpOyB9CiAgICAgdm9pZCBuZXV0ZXIoKTsKLQotICAgIGJvb2wgaGFz
VmVjdG9yKCkgY29uc3QgeyByZXR1cm4gISFtX3ZlY3RvcjsgfQotICAgIHZvaWQqIHZlY3Rvcigp
IGNvbnN0IHsgcmV0dXJuIG1fdmVjdG9yLmdldE1heUJlTnVsbChsZW5ndGgoKSk7IH0KKyAgICAK
KyAgICB2b2lkKiB2ZWN0b3IoKSBjb25zdCB7IHJldHVybiBtX3ZlY3Rvci5nZXRNYXlCZU51bGwo
KTsgfQogICAgIAogICAgIHVuc2lnbmVkIGJ5dGVPZmZzZXQoKTsKICAgICB1bnNpZ25lZCBsZW5n
dGgoKSBjb25zdCB7IHJldHVybiBtX2xlbmd0aDsgfQpAQCAtMTk1LDcgKzE5MSw3IEBAIHByb3Rl
Y3RlZDoKIAogICAgIHN0YXRpYyBTdHJpbmcgdG9TdHJpbmdOYW1lKGNvbnN0IEpTT2JqZWN0Kiwg
RXhlY1N0YXRlKik7CiAKLSAgICBWZWN0b3JQdHIgbV92ZWN0b3I7CisgICAgQ2FnZWRCYXJyaWVy
UHRyPEdpZ2FjYWdlOjpQcmltaXRpdmUsIHZvaWQ+IG1fdmVjdG9yOwogICAgIHVpbnQzMl90IG1f
bGVuZ3RoOwogICAgIFR5cGVkQXJyYXlNb2RlIG1fbW9kZTsKIH07CkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvcnVudGltZS9KU0dlbmVyaWNUeXBlZEFycmF5Vmlld0lubGluZXMuaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0dlbmVyaWNUeXBlZEFy
cmF5Vmlld0lubGluZXMuaAkocmV2aXNpb24gMjQ2MjcxKQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL3J1bnRpbWUvSlNHZW5lcmljVHlwZWRBcnJheVZpZXdJbmxpbmVzLmgJKHdvcmtpbmcgY29w
eSkKQEAgLTc3LDcgKzc3LDggQEAgSlNHZW5lcmljVHlwZWRBcnJheVZpZXc8QWRhcHRvcj4qIEpT
R2VuZQogfQogCiB0ZW1wbGF0ZTx0eXBlbmFtZSBBZGFwdG9yPgotSlNHZW5lcmljVHlwZWRBcnJh
eVZpZXc8QWRhcHRvcj4qIEpTR2VuZXJpY1R5cGVkQXJyYXlWaWV3PEFkYXB0b3I+OjpjcmVhdGVV
bmluaXRpYWxpemVkKEV4ZWNTdGF0ZSogZXhlYywgU3RydWN0dXJlKiBzdHJ1Y3R1cmUsIHVuc2ln
bmVkIGxlbmd0aCkKK0pTR2VuZXJpY1R5cGVkQXJyYXlWaWV3PEFkYXB0b3I+KiBKU0dlbmVyaWNU
eXBlZEFycmF5VmlldzxBZGFwdG9yPjo6Y3JlYXRlVW5pbml0aWFsaXplZCgKKyAgICBFeGVjU3Rh
dGUqIGV4ZWMsIFN0cnVjdHVyZSogc3RydWN0dXJlLCB1bnNpZ25lZCBsZW5ndGgpCiB7CiAgICAg
Vk0mIHZtID0gZXhlYy0+dm0oKTsKICAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09Q
RSh2bSk7CkBAIC01MDYsNyArNTA3LDcgQEAgc2l6ZV90IEpTR2VuZXJpY1R5cGVkQXJyYXlWaWV3
PEFkYXB0b3I+OgogCiAgICAgaWYgKHRoaXNPYmplY3QtPm1fbW9kZSA9PSBPdmVyc2l6ZVR5cGVk
QXJyYXkpCiAgICAgICAgIHJldHVybiBCYXNlOjplc3RpbWF0ZWRTaXplKHRoaXNPYmplY3QsIHZt
KSArIHRoaXNPYmplY3QtPmJ5dGVTaXplKCk7Ci0gICAgaWYgKHRoaXNPYmplY3QtPm1fbW9kZSA9
PSBGYXN0VHlwZWRBcnJheSAmJiB0aGlzT2JqZWN0LT5oYXNWZWN0b3IoKSkKKyAgICBpZiAodGhp
c09iamVjdC0+bV9tb2RlID09IEZhc3RUeXBlZEFycmF5ICYmIHRoaXNPYmplY3QtPm1fdmVjdG9y
KQogICAgICAgICByZXR1cm4gQmFzZTo6ZXN0aW1hdGVkU2l6ZSh0aGlzT2JqZWN0LCB2bSkgKyB0
aGlzT2JqZWN0LT5ieXRlU2l6ZSgpOwogCiAgICAgcmV0dXJuIEJhc2U6OmVzdGltYXRlZFNpemUo
dGhpc09iamVjdCwgdm0pOwpAQCAtNTI1LDcgKzUyNiw3IEBAIHZvaWQgSlNHZW5lcmljVHlwZWRB
cnJheVZpZXc8QWRhcHRvcj46OnYKICAgICB7CiAgICAgICAgIGF1dG8gbG9ja2VyID0gaG9sZExv
Y2sodGhpc09iamVjdC0+Y2VsbExvY2soKSk7CiAgICAgICAgIG1vZGUgPSB0aGlzT2JqZWN0LT5t
X21vZGU7Ci0gICAgICAgIHZlY3RvciA9IHRoaXNPYmplY3QtPnZlY3RvcigpOworICAgICAgICB2
ZWN0b3IgPSB0aGlzT2JqZWN0LT5tX3ZlY3Rvci5nZXRNYXlCZU51bGwoKTsKICAgICAgICAgYnl0
ZVNpemUgPSB0aGlzT2JqZWN0LT5ieXRlU2l6ZSgpOwogICAgIH0KICAgICAKSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL09wdGlvbnMuaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcnVudGltZS9PcHRpb25zLmgJKHJldmlzaW9uIDI0NjI3MSkKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL09wdGlvbnMuaAkod29ya2luZyBjb3B5KQpAQCAt
NDkyLDcgKzQ5Miw4IEBAIGNvbnN0ZXhwciBib29sIGVuYWJsZVdlYkFzc2VtYmx5U3RyZWFtaW4K
ICAgICB2KHVuc2lnbmVkLCB3ZWJBc3NlbWJseUxvb3BEZWNyZW1lbnQsIDE1LCBOb3JtYWwsICJU
aGUgYW1vdW50IHRoZSB0aWVyIHVwIGNvdW50ZG93biBpcyBkZWNyZW1lbnRlZCBvbiBlYWNoIGxv
b3AgYmFja2VkZ2UuIikgXAogICAgIHYodW5zaWduZWQsIHdlYkFzc2VtYmx5RnVuY3Rpb25FbnRy
eURlY3JlbWVudCwgMSwgTm9ybWFsLCAiVGhlIGFtb3VudCB0aGUgdGllciB1cCBjb3VudGRvd24g
aXMgZGVjcmVtZW50ZWQgb24gZWFjaCBmdW5jdGlvbiBlbnRyeS4iKSBcCiAgICAgXAotICAgIHYo
Ym9vbCwgdXNlV2ViQXNzZW1ibHlGYXN0TWVtb3J5LCB0cnVlLCBOb3JtYWwsICJJZiB0cnVlLCB3
ZSB3aWxsIHRyeSB0byB1c2UgYSAzMi1iaXQgYWRkcmVzcyBzcGFjZSB3aXRoIGEgc2lnbmFsIGhh
bmRsZXIgdG8gYm91bmRzIGNoZWNrIHdhc20gbWVtb3J5LiIpIFwKKyAgICAvKiBGSVhNRTogZW5h
YmxlIGZhc3QgbWVtb3JpZXMgb24gaU9TIGFuZCBwcmUtYWxsb2NhdGUgdGhlbS4gaHR0cHM6Ly9i
dWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE3MDc3NCAqLyBcCisgICAgdihib29sLCB1
c2VXZWJBc3NlbWJseUZhc3RNZW1vcnksICFpc0lPUygpLCBOb3JtYWwsICJJZiB0cnVlLCB3ZSB3
aWxsIHRyeSB0byB1c2UgYSAzMi1iaXQgYWRkcmVzcyBzcGFjZSB3aXRoIGEgc2lnbmFsIGhhbmRs
ZXIgdG8gYm91bmRzIGNoZWNrIHdhc20gbWVtb3J5LiIpIFwKICAgICB2KGJvb2wsIGxvZ1dlYkFz
c2VtYmx5TWVtb3J5LCBmYWxzZSwgTm9ybWFsLCBudWxscHRyKSBcCiAgICAgdih1bnNpZ25lZCwg
d2ViQXNzZW1ibHlGYXN0TWVtb3J5UmVkem9uZVBhZ2VzLCAxMjgsIE5vcm1hbCwgIldlYkFzc2Vt
Ymx5IGZhc3QgbWVtb3JpZXMgdXNlIDRHaUIgdmlydHVhbCBhbGxvY2F0aW9ucywgcGx1cyBhIHJl
ZHpvbmUgKGNvdW50ZWQgYXMgbXVsdGlwbGUgb2YgNjRLaUIgV2ViQXNzZW1ibHkgcGFnZXMpIGF0
IHRoZSBlbmQgdG8gY2F0Y2ggcmVnK2ltbSBhY2Nlc3NlcyB3aGljaCBleGNlZWQgMzItYml0LCBh
bnl0aGluZyBiZXlvbmQgdGhlIHJlZHpvbmUgaXMgZXhwbGljaXRseSBib3VuZHMtY2hlY2tlZCIp
IFwKICAgICB2KGJvb2wsIGNyYXNoSWZXZWJBc3NlbWJseUNhbnRGYXN0TWVtb3J5LCBmYWxzZSwg
Tm9ybWFsLCAiSWYgdHJ1ZSwgd2Ugd2lsbCBjcmFzaCBpZiB3ZSBjYW4ndCBvYnRhaW4gZmFzdCBt
ZW1vcnkgZm9yIHdhc20uIikgXApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUv
U2NvcGVkQXJndW1lbnRzVGFibGUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ydW50aW1lL1Njb3BlZEFyZ3VtZW50c1RhYmxlLmNwcAkocmV2aXNpb24gMjQ2MjcxKQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU2NvcGVkQXJndW1lbnRzVGFibGUuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC02OCwxNiArNjgsMTYgQEAgU2NvcGVkQXJndW1lbnRzVGFibGUq
IFNjb3BlZEFyZ3VtZW50c1RhYgogewogICAgIFNjb3BlZEFyZ3VtZW50c1RhYmxlKiByZXN1bHQg
PSBjcmVhdGUodm0sIG1fbGVuZ3RoKTsKICAgICBmb3IgKHVuc2lnbmVkIGkgPSBtX2xlbmd0aDsg
aS0tOykKLSAgICAgICAgcmVzdWx0LT5hdChpKSA9IHRoaXMtPmF0KGkpOworICAgICAgICByZXN1
bHQtPm1fYXJndW1lbnRzW2ldID0gbV9hcmd1bWVudHNbaV07CiAgICAgcmV0dXJuIHJlc3VsdDsK
IH0KIAogU2NvcGVkQXJndW1lbnRzVGFibGUqIFNjb3BlZEFyZ3VtZW50c1RhYmxlOjpzZXRMZW5n
dGgoVk0mIHZtLCB1aW50MzJfdCBuZXdMZW5ndGgpCiB7CiAgICAgaWYgKExJS0VMWSghbV9sb2Nr
ZWQpKSB7Ci0gICAgICAgIEFyZ3VtZW50c1B0ciBuZXdBcmd1bWVudHMgPSBBcmd1bWVudHNQdHI6
OmNyZWF0ZShuZXdMZW5ndGgsIG5ld0xlbmd0aCk7CisgICAgICAgIEFyZ3VtZW50c1B0ciBuZXdB
cmd1bWVudHMgPSBBcmd1bWVudHNQdHI6OmNyZWF0ZShuZXdMZW5ndGgpOwogICAgICAgICBmb3Ig
KHVuc2lnbmVkIGkgPSBzdGQ6Om1pbihtX2xlbmd0aCwgbmV3TGVuZ3RoKTsgaS0tOykKLSAgICAg
ICAgICAgIG5ld0FyZ3VtZW50cy5hdChpLCBuZXdMZW5ndGgpID0gdGhpcy0+YXQoaSk7CisgICAg
ICAgICAgICBuZXdBcmd1bWVudHNbaV0gPSBtX2FyZ3VtZW50c1tpXTsKICAgICAgICAgbV9sZW5n
dGggPSBuZXdMZW5ndGg7CiAgICAgICAgIG1fYXJndW1lbnRzID0gV1RGTW92ZShuZXdBcmd1bWVu
dHMpOwogICAgICAgICByZXR1cm4gdGhpczsKQEAgLTg1LDEyICs4NSwxMCBAQCBTY29wZWRBcmd1
bWVudHNUYWJsZSogU2NvcGVkQXJndW1lbnRzVGFiCiAgICAgCiAgICAgU2NvcGVkQXJndW1lbnRz
VGFibGUqIHJlc3VsdCA9IGNyZWF0ZSh2bSwgbmV3TGVuZ3RoKTsKICAgICBmb3IgKHVuc2lnbmVk
IGkgPSBzdGQ6Om1pbihtX2xlbmd0aCwgbmV3TGVuZ3RoKTsgaS0tOykKLSAgICAgICAgcmVzdWx0
LT5hdChpKSA9IHRoaXMtPmF0KGkpOworICAgICAgICByZXN1bHQtPm1fYXJndW1lbnRzW2ldID0g
bV9hcmd1bWVudHNbaV07CiAgICAgcmV0dXJuIHJlc3VsdDsKIH0KIAotc3RhdGljX2Fzc2VydChz
dGQ6OmlzX3RyaXZpYWxseV9kZXN0cnVjdGlibGU8U2NvcGVPZmZzZXQ+Ojp2YWx1ZSwgIiIpOwot
CiBTY29wZWRBcmd1bWVudHNUYWJsZSogU2NvcGVkQXJndW1lbnRzVGFibGU6OnNldChWTSYgdm0s
IHVpbnQzMl90IGksIFNjb3BlT2Zmc2V0IHZhbHVlKQogewogICAgIFNjb3BlZEFyZ3VtZW50c1Rh
YmxlKiByZXN1bHQ7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TY29wZWRB
cmd1bWVudHNUYWJsZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50
aW1lL1Njb3BlZEFyZ3VtZW50c1RhYmxlLmgJKHJldmlzaW9uIDI0NjI3MSkKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ydW50aW1lL1Njb3BlZEFyZ3VtZW50c1RhYmxlLmgJKHdvcmtpbmcgY29w
eSkKQEAgLTYxLDcgKzYxLDEwIEBAIHB1YmxpYzoKICAgICB1aW50MzJfdCBsZW5ndGgoKSBjb25z
dCB7IHJldHVybiBtX2xlbmd0aDsgfQogICAgIFNjb3BlZEFyZ3VtZW50c1RhYmxlKiBzZXRMZW5n
dGgoVk0mLCB1aW50MzJfdCBuZXdMZW5ndGgpOwogICAgIAotICAgIFNjb3BlT2Zmc2V0IGdldCh1
aW50MzJfdCBpKSBjb25zdCB7IHJldHVybiBhdChpKTsgfQorICAgIFNjb3BlT2Zmc2V0IGdldCh1
aW50MzJfdCBpKSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuIGNvbnN0X2Nhc3Q8U2NvcGVk
QXJndW1lbnRzVGFibGUqPih0aGlzKS0+YXQoaSk7CisgICAgfQogICAgIAogICAgIHZvaWQgbG9j
aygpCiAgICAgewpAQCAtNzcsMTMgKzgwLDEzIEBAIHB1YmxpYzoKICAgICBzdGF0aWMgcHRyZGlm
Zl90IG9mZnNldE9mTGVuZ3RoKCkgeyByZXR1cm4gT0JKRUNUX09GRlNFVE9GKFNjb3BlZEFyZ3Vt
ZW50c1RhYmxlLCBtX2xlbmd0aCk7IH0KICAgICBzdGF0aWMgcHRyZGlmZl90IG9mZnNldE9mQXJn
dW1lbnRzKCkgeyByZXR1cm4gT0JKRUNUX09GRlNFVE9GKFNjb3BlZEFyZ3VtZW50c1RhYmxlLCBt
X2FyZ3VtZW50cyk7IH0KIAotICAgIHR5cGVkZWYgQ2FnZWRVbmlxdWVQdHI8R2lnYWNhZ2U6OlBy
aW1pdGl2ZSwgU2NvcGVPZmZzZXQ+IEFyZ3VtZW50c1B0cjsKKyAgICB0eXBlZGVmIENhZ2VkVW5p
cXVlUHRyPEdpZ2FjYWdlOjpQcmltaXRpdmUsIFNjb3BlT2Zmc2V0W10+IEFyZ3VtZW50c1B0cjsK
IAogcHJpdmF0ZToKLSAgICBTY29wZU9mZnNldCYgYXQodWludDMyX3QgaSkgY29uc3QKKyAgICBT
Y29wZU9mZnNldCYgYXQodWludDMyX3QgaSkKICAgICB7CiAgICAgICAgIEFTU0VSVF9XSVRIX1NF
Q1VSSVRZX0lNUExJQ0FUSU9OKGkgPCBtX2xlbmd0aCk7Ci0gICAgICAgIHJldHVybiBtX2FyZ3Vt
ZW50cy5nZXQobGVuZ3RoKCkpW2ldOworICAgICAgICByZXR1cm4gbV9hcmd1bWVudHNbaV07CiAg
ICAgfQogICAgIAogICAgIHVpbnQzMl90IG1fbGVuZ3RoOwpJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvU3ltYm9sVGFibGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvcnVudGltZS9TeW1ib2xUYWJsZS5oCShyZXZpc2lvbiAyNDYyNzEpCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TeW1ib2xUYWJsZS5oCSh3b3JraW5nIGNvcHkpCkBA
IC02MzYsOSArNjM2LDggQEAgcHVibGljOgogICAgIHZvaWQgc2V0QXJndW1lbnRzTGVuZ3RoKFZN
JiB2bSwgdWludDMyX3QgbGVuZ3RoKQogICAgIHsKICAgICAgICAgaWYgKFVOTElLRUxZKCFtX2Fy
Z3VtZW50cykpCi0gICAgICAgICAgICBtX2FyZ3VtZW50cy5zZXQodm0sIHRoaXMsIFNjb3BlZEFy
Z3VtZW50c1RhYmxlOjpjcmVhdGUodm0sIGxlbmd0aCkpOwotICAgICAgICBlbHNlCi0gICAgICAg
ICAgICBtX2FyZ3VtZW50cy5zZXQodm0sIHRoaXMsIG1fYXJndW1lbnRzLT5zZXRMZW5ndGgodm0s
IGxlbmd0aCkpOworICAgICAgICAgICAgbV9hcmd1bWVudHMuc2V0KHZtLCB0aGlzLCBTY29wZWRB
cmd1bWVudHNUYWJsZTo6Y3JlYXRlKHZtKSk7CisgICAgICAgIG1fYXJndW1lbnRzLnNldCh2bSwg
dGhpcywgbV9hcmd1bWVudHMtPnNldExlbmd0aCh2bSwgbGVuZ3RoKSk7CiAgICAgfQogICAgIAog
ICAgIFNjb3BlT2Zmc2V0IGFyZ3VtZW50T2Zmc2V0KHVpbnQzMl90IGkpIGNvbnN0CkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtQWlySVJHZW5lcmF0b3IuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21BaXJJUkdlbmVyYXRvci5jcHAJ
KHJldmlzaW9uIDI0NjI3MSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21BaXJJ
UkdlbmVyYXRvci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTgzNiw4ICs4MzYsNiBAQCB2b2lkIEFp
cklSR2VuZXJhdG9yOjpyZXN0b3JlV2ViQXNzZW1ibHlHCiAgICAgICAgIFJlZ2lzdGVyU2V0IGNs
b2JiZXJzOwogICAgICAgICBjbG9iYmVycy5zZXQocGlubmVkUmVncy0+YmFzZU1lbW9yeVBvaW50
ZXIpOwogICAgICAgICBjbG9iYmVycy5zZXQocGlubmVkUmVncy0+c2l6ZVJlZ2lzdGVyKTsKLSAg
ICAgICAgaWYgKCFpc0FSTTY0KCkpCi0gICAgICAgICAgICBjbG9iYmVycy5zZXQoUmVnaXN0ZXJT
ZXQ6Om1hY3JvU2NyYXRjaFJlZ2lzdGVycygpKTsKIAogICAgICAgICBhdXRvKiBwYXRjaHBvaW50
ID0gYWRkUGF0Y2hwb2ludChCMzo6Vm9pZCk7CiAgICAgICAgIEIzOjpFZmZlY3RzIGVmZmVjdHMg
PSBCMzo6RWZmZWN0czo6bm9uZSgpOwpAQCAtODQ1LDE4ICs4NDMsMTAgQEAgdm9pZCBBaXJJUkdl
bmVyYXRvcjo6cmVzdG9yZVdlYkFzc2VtYmx5RwogICAgICAgICBlZmZlY3RzLnJlYWRzID0gQjM6
OkhlYXBSYW5nZTo6dG9wKCk7CiAgICAgICAgIHBhdGNocG9pbnQtPmVmZmVjdHMgPSBlZmZlY3Rz
OwogICAgICAgICBwYXRjaHBvaW50LT5jbG9iYmVyKGNsb2JiZXJzKTsKLSAgICAgICAgcGF0Y2hw
b2ludC0+bnVtR1BTY3JhdGNoUmVnaXN0ZXJzID0gR2lnYWNhZ2U6OmlzRW5hYmxlZChHaWdhY2Fn
ZTo6UHJpbWl0aXZlKSA/IDEgOiAwOwogCiAgICAgICAgIHBhdGNocG9pbnQtPnNldEdlbmVyYXRv
cihbcGlubmVkUmVnc10gKENDYWxsSGVscGVycyYgaml0LCBjb25zdCBCMzo6U3RhY2ttYXBHZW5l
cmF0aW9uUGFyYW1zJiBwYXJhbXMpIHsKLSAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUKCFHaWdh
Y2FnZTo6aXNFbmFibGVkKEdpZ2FjYWdlOjpQcmltaXRpdmUpIHx8ICFpc0FSTTY0KCkpOwotICAg
ICAgICAgICAgQWxsb3dNYWNyb1NjcmF0Y2hSZWdpc3RlclVzYWdlSWYgYWxsb3dTY3JhdGNoKGpp
dCwgIWlzQVJNNjQoKSk7Ci0gICAgICAgICAgICBHUFJSZWcgYmFzZU1lbW9yeSA9IHBpbm5lZFJl
Z3MtPmJhc2VNZW1vcnlQb2ludGVyOwotICAgICAgICAgICAgR1BSUmVnIHNjcmF0Y2hPclNpemUg
PSBHaWdhY2FnZTo6aXNFbmFibGVkKEdpZ2FjYWdlOjpQcmltaXRpdmUpID8gcGFyYW1zLmdwU2Ny
YXRjaCgwKSA6IHBpbm5lZFJlZ3MtPnNpemVSZWdpc3RlcjsKLQogICAgICAgICAgICAgaml0Lmxv
YWRQdHIoQ0NhbGxIZWxwZXJzOjpBZGRyZXNzKHBhcmFtc1swXS5ncHIoKSwgSW5zdGFuY2U6Om9m
ZnNldE9mQ2FjaGVkTWVtb3J5U2l6ZSgpKSwgcGlubmVkUmVncy0+c2l6ZVJlZ2lzdGVyKTsKLSAg
ICAgICAgICAgIGppdC5sb2FkUHRyKENDYWxsSGVscGVyczo6QWRkcmVzcyhwYXJhbXNbMF0uZ3By
KCksIEluc3RhbmNlOjpvZmZzZXRPZkNhY2hlZE1lbW9yeSgpKSwgYmFzZU1lbW9yeSk7Ci0KLSAg
ICAgICAgICAgIGppdC5jYWdlQ29uZGl0aW9uYWxseShHaWdhY2FnZTo6UHJpbWl0aXZlLCBiYXNl
TWVtb3J5LCBzY3JhdGNoT3JTaXplKTsKKyAgICAgICAgICAgIGppdC5sb2FkUHRyKENDYWxsSGVs
cGVyczo6QWRkcmVzcyhwYXJhbXNbMF0uZ3ByKCksIEluc3RhbmNlOjpvZmZzZXRPZkNhY2hlZE1l
bW9yeSgpKSwgcGlubmVkUmVncy0+YmFzZU1lbW9yeVBvaW50ZXIpOwogICAgICAgICB9KTsKIAog
ICAgICAgICBlbWl0UGF0Y2hwb2ludChibG9jaywgcGF0Y2hwb2ludCwgVG1wKCksIGluc3RhbmNl
KTsKQEAgLTE5NjgsOCArMTk1OCw2IEBAIGF1dG8gQWlySVJHZW5lcmF0b3I6OmFkZENhbGxJbmRp
cmVjdChjb24KICAgICAgICAgLy8gRklYTUU6IFdlIHNob3VsZG4ndCBoYXZlIHRvIGRvIHRoaXM6
IGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNzIxODEKICAgICAgICAg
cGF0Y2hwb2ludC0+Y2xvYmJlcihQaW5uZWRSZWdpc3RlckluZm86OmdldCgpLnRvU2F2ZShNZW1v
cnlNb2RlOjpCb3VuZHNDaGVja2luZykpOwogICAgICAgICBwYXRjaHBvaW50LT5jbG9iYmVyKFJl
Z2lzdGVyU2V0OjptYWNyb1NjcmF0Y2hSZWdpc3RlcnMoKSk7Ci0gICAgICAgIHBhdGNocG9pbnQt
Pm51bUdQU2NyYXRjaFJlZ2lzdGVycyA9IEdpZ2FjYWdlOjppc0VuYWJsZWQoR2lnYWNhZ2U6OlBy
aW1pdGl2ZSkgPyAxIDogMDsKLQogICAgICAgICBwYXRjaHBvaW50LT5zZXRHZW5lcmF0b3IoWz1d
IChDQ2FsbEhlbHBlcnMmIGppdCwgY29uc3QgQjM6OlN0YWNrbWFwR2VuZXJhdGlvblBhcmFtcyYg
cGFyYW1zKSB7CiAgICAgICAgICAgICBBbGxvd01hY3JvU2NyYXRjaFJlZ2lzdGVyVXNhZ2UgYWxs
b3dTY3JhdGNoKGppdCk7CiAgICAgICAgICAgICBHUFJSZWcgbmV3Q29udGV4dEluc3RhbmNlID0g
cGFyYW1zWzBdLmdwcigpOwpAQCAtMTk4MywxMiArMTk3MSw4IEBAIGF1dG8gQWlySVJHZW5lcmF0
b3I6OmFkZENhbGxJbmRpcmVjdChjb24KICAgICAgICAgICAgIC8vIEZJWE1FOiBXZSBzaG91bGQg
c3VwcG9ydCBtb3JlIHRoYW4gb25lIG1lbW9yeSBzaXplIHJlZ2lzdGVyCiAgICAgICAgICAgICAv
LyAgIHNlZTogaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE2Mjk1Mgog
ICAgICAgICAgICAgQVNTRVJUKHBpbm5lZFJlZ3Muc2l6ZVJlZ2lzdGVyICE9IG5ld0NvbnRleHRJ
bnN0YW5jZSk7Ci0gICAgICAgICAgICBHUFJSZWcgc2NyYXRjaE9yU2l6ZSA9IEdpZ2FjYWdlOjpp
c0VuYWJsZWQoR2lnYWNhZ2U6OlByaW1pdGl2ZSkgPyBwYXJhbXMuZ3BTY3JhdGNoKDApIDogcGlu
bmVkUmVncy5zaXplUmVnaXN0ZXI7Ci0KICAgICAgICAgICAgIGppdC5sb2FkUHRyKENDYWxsSGVs
cGVyczo6QWRkcmVzcyhuZXdDb250ZXh0SW5zdGFuY2UsIEluc3RhbmNlOjpvZmZzZXRPZkNhY2hl
ZE1lbW9yeVNpemUoKSksIHBpbm5lZFJlZ3Muc2l6ZVJlZ2lzdGVyKTsgLy8gTWVtb3J5IHNpemUu
CiAgICAgICAgICAgICBqaXQubG9hZFB0cihDQ2FsbEhlbHBlcnM6OkFkZHJlc3MobmV3Q29udGV4
dEluc3RhbmNlLCBJbnN0YW5jZTo6b2Zmc2V0T2ZDYWNoZWRNZW1vcnkoKSksIGJhc2VNZW1vcnkp
OyAvLyBNZW1vcnk6OnZvaWQqLgotCi0gICAgICAgICAgICBqaXQuY2FnZUNvbmRpdGlvbmFsbHko
R2lnYWNhZ2U6OlByaW1pdGl2ZSwgYmFzZU1lbW9yeSwgc2NyYXRjaE9yU2l6ZSk7CiAgICAgICAg
IH0pOwogCiAgICAgICAgIGVtaXRQYXRjaHBvaW50KGRvQ29udGV4dFN3aXRjaCwgcGF0Y2hwb2lu
dCwgVG1wKCksIG5ld0NvbnRleHRJbnN0YW5jZSwgaW5zdGFuY2VWYWx1ZSgpKTsKSW5kZXg6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21CM0lSR2VuZXJhdG9yLmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtQjNJUkdlbmVyYXRvci5jcHAJKHJl
dmlzaW9uIDI0NjI3MSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21CM0lSR2Vu
ZXJhdG9yLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDcsNyArNDcsNiBAQAogI2luY2x1ZGUgIkIz
VmFyaWFibGVWYWx1ZS5oIgogI2luY2x1ZGUgIkIzV2FzbUFkZHJlc3NWYWx1ZS5oIgogI2luY2x1
ZGUgIkIzV2FzbUJvdW5kc0NoZWNrVmFsdWUuaCIKLSNpbmNsdWRlICJEaXNhbGxvd01hY3JvU2Ny
YXRjaFJlZ2lzdGVyVXNhZ2UuaCIKICNpbmNsdWRlICJKU0NJbmxpbmVzLmgiCiAjaW5jbHVkZSAi
SlNXZWJBc3NlbWJseUluc3RhbmNlLmgiCiAjaW5jbHVkZSAiU2NyYXRjaFJlZ2lzdGVyQWxsb2Nh
dG9yLmgiCkBAIC00NzgsOCArNDc3LDYgQEAgdm9pZCBCM0lSR2VuZXJhdG9yOjpyZXN0b3JlV2Vi
QXNzZW1ibHlHbAogICAgICAgICBSZWdpc3RlclNldCBjbG9iYmVyczsKICAgICAgICAgY2xvYmJl
cnMuc2V0KHBpbm5lZFJlZ3MtPmJhc2VNZW1vcnlQb2ludGVyKTsKICAgICAgICAgY2xvYmJlcnMu
c2V0KHBpbm5lZFJlZ3MtPnNpemVSZWdpc3Rlcik7Ci0gICAgICAgIGlmICghaXNBUk02NCgpKQot
ICAgICAgICAgICAgY2xvYmJlcnMuc2V0KFJlZ2lzdGVyU2V0OjptYWNyb1NjcmF0Y2hSZWdpc3Rl
cnMoKSk7CiAKICAgICAgICAgQjM6OlBhdGNocG9pbnRWYWx1ZSogcGF0Y2hwb2ludCA9IGJsb2Nr
LT5hcHBlbmROZXc8QjM6OlBhdGNocG9pbnRWYWx1ZT4ocHJvYywgQjM6OlZvaWQsIG9yaWdpbigp
KTsKICAgICAgICAgRWZmZWN0cyBlZmZlY3RzID0gRWZmZWN0czo6bm9uZSgpOwpAQCAtNDg3LDE5
ICs0ODQsMTMgQEAgdm9pZCBCM0lSR2VuZXJhdG9yOjpyZXN0b3JlV2ViQXNzZW1ibHlHbAogICAg
ICAgICBlZmZlY3RzLnJlYWRzID0gQjM6OkhlYXBSYW5nZTo6dG9wKCk7CiAgICAgICAgIHBhdGNo
cG9pbnQtPmVmZmVjdHMgPSBlZmZlY3RzOwogICAgICAgICBwYXRjaHBvaW50LT5jbG9iYmVyKGNs
b2JiZXJzKTsKLSAgICAgICAgcGF0Y2hwb2ludC0+bnVtR1BTY3JhdGNoUmVnaXN0ZXJzID0gR2ln
YWNhZ2U6OmlzRW5hYmxlZChHaWdhY2FnZTo6UHJpbWl0aXZlKSA/IDEgOiAwOwogCiAgICAgICAg
IHBhdGNocG9pbnQtPmFwcGVuZChpbnN0YW5jZSwgVmFsdWVSZXA6OlNvbWVSZWdpc3Rlcik7CisK
ICAgICAgICAgcGF0Y2hwb2ludC0+c2V0R2VuZXJhdG9yKFtwaW5uZWRSZWdzXSAoQ0NhbGxIZWxw
ZXJzJiBqaXQsIGNvbnN0IEIzOjpTdGFja21hcEdlbmVyYXRpb25QYXJhbXMmIHBhcmFtcykgewot
ICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlQoIUdpZ2FjYWdlOjppc0VuYWJsZWQoR2lnYWNhZ2U6
OlByaW1pdGl2ZSkgfHwgIWlzQVJNNjQoKSk7Ci0gICAgICAgICAgICBBbGxvd01hY3JvU2NyYXRj
aFJlZ2lzdGVyVXNhZ2VJZiBhbGxvd1NjcmF0Y2goaml0LCAhaXNBUk02NCgpKTsKICAgICAgICAg
ICAgIEdQUlJlZyBiYXNlTWVtb3J5ID0gcGlubmVkUmVncy0+YmFzZU1lbW9yeVBvaW50ZXI7Ci0g
ICAgICAgICAgICBHUFJSZWcgc2NyYXRjaE9yU2l6ZSA9IEdpZ2FjYWdlOjppc0VuYWJsZWQoR2ln
YWNhZ2U6OlByaW1pdGl2ZSkgPyBwYXJhbXMuZ3BTY3JhdGNoKDApIDogcGlubmVkUmVncy0+c2l6
ZVJlZ2lzdGVyOwotCiAgICAgICAgICAgICBqaXQubG9hZFB0cihDQ2FsbEhlbHBlcnM6OkFkZHJl
c3MocGFyYW1zWzBdLmdwcigpLCBJbnN0YW5jZTo6b2Zmc2V0T2ZDYWNoZWRNZW1vcnlTaXplKCkp
LCBwaW5uZWRSZWdzLT5zaXplUmVnaXN0ZXIpOwogICAgICAgICAgICAgaml0LmxvYWRQdHIoQ0Nh
bGxIZWxwZXJzOjpBZGRyZXNzKHBhcmFtc1swXS5ncHIoKSwgSW5zdGFuY2U6Om9mZnNldE9mQ2Fj
aGVkTWVtb3J5KCkpLCBiYXNlTWVtb3J5KTsKLQotICAgICAgICAgICAgaml0LmNhZ2VDb25kaXRp
b25hbGx5KEdpZ2FjYWdlOjpQcmltaXRpdmUsIGJhc2VNZW1vcnksIHNjcmF0Y2hPclNpemUpOwog
ICAgICAgICB9KTsKICAgICB9CiB9CkBAIC0xMzgwLDggKzEzNzEsNiBAQCBhdXRvIEIzSVJHZW5l
cmF0b3I6OmFkZENhbGxJbmRpcmVjdChjb25zCiAgICAgICAgIHBhdGNocG9pbnQtPmNsb2JiZXIo
UmVnaXN0ZXJTZXQ6Om1hY3JvU2NyYXRjaFJlZ2lzdGVycygpKTsKICAgICAgICAgcGF0Y2hwb2lu
dC0+YXBwZW5kKG5ld0NvbnRleHRJbnN0YW5jZSwgVmFsdWVSZXA6OlNvbWVSZWdpc3Rlcik7CiAg
ICAgICAgIHBhdGNocG9pbnQtPmFwcGVuZChpbnN0YW5jZVZhbHVlKCksIFZhbHVlUmVwOjpTb21l
UmVnaXN0ZXIpOwotICAgICAgICBwYXRjaHBvaW50LT5udW1HUFNjcmF0Y2hSZWdpc3RlcnMgPSBH
aWdhY2FnZTo6aXNFbmFibGVkKEdpZ2FjYWdlOjpQcmltaXRpdmUpID8gMSA6IDA7Ci0KICAgICAg
ICAgcGF0Y2hwb2ludC0+c2V0R2VuZXJhdG9yKFs9XSAoQ0NhbGxIZWxwZXJzJiBqaXQsIGNvbnN0
IEIzOjpTdGFja21hcEdlbmVyYXRpb25QYXJhbXMmIHBhcmFtcykgewogICAgICAgICAgICAgQWxs
b3dNYWNyb1NjcmF0Y2hSZWdpc3RlclVzYWdlIGFsbG93U2NyYXRjaChqaXQpOwogICAgICAgICAg
ICAgR1BSUmVnIG5ld0NvbnRleHRJbnN0YW5jZSA9IHBhcmFtc1swXS5ncHIoKTsKQEAgLTEzOTYs
MTIgKzEzODUsOCBAQCBhdXRvIEIzSVJHZW5lcmF0b3I6OmFkZENhbGxJbmRpcmVjdChjb25zCiAg
ICAgICAgICAgICAvLyBGSVhNRTogV2Ugc2hvdWxkIHN1cHBvcnQgbW9yZSB0aGFuIG9uZSBtZW1v
cnkgc2l6ZSByZWdpc3RlcgogICAgICAgICAgICAgLy8gICBzZWU6IGh0dHBzOi8vYnVncy53ZWJr
aXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNjI5NTIKICAgICAgICAgICAgIEFTU0VSVChwaW5uZWRS
ZWdzLnNpemVSZWdpc3RlciAhPSBuZXdDb250ZXh0SW5zdGFuY2UpOwotICAgICAgICAgICAgR1BS
UmVnIHNjcmF0Y2hPclNpemUgPSBHaWdhY2FnZTo6aXNFbmFibGVkKEdpZ2FjYWdlOjpQcmltaXRp
dmUpID8gcGFyYW1zLmdwU2NyYXRjaCgwKSA6IHBpbm5lZFJlZ3Muc2l6ZVJlZ2lzdGVyOwotCiAg
ICAgICAgICAgICBqaXQubG9hZFB0cihDQ2FsbEhlbHBlcnM6OkFkZHJlc3MobmV3Q29udGV4dElu
c3RhbmNlLCBJbnN0YW5jZTo6b2Zmc2V0T2ZDYWNoZWRNZW1vcnlTaXplKCkpLCBwaW5uZWRSZWdz
LnNpemVSZWdpc3Rlcik7IC8vIE1lbW9yeSBzaXplLgogICAgICAgICAgICAgaml0LmxvYWRQdHIo
Q0NhbGxIZWxwZXJzOjpBZGRyZXNzKG5ld0NvbnRleHRJbnN0YW5jZSwgSW5zdGFuY2U6Om9mZnNl
dE9mQ2FjaGVkTWVtb3J5KCkpLCBiYXNlTWVtb3J5KTsgLy8gTWVtb3J5Ojp2b2lkKi4KLQotICAg
ICAgICAgICAgaml0LmNhZ2VDb25kaXRpb25hbGx5KEdpZ2FjYWdlOjpQcmltaXRpdmUsIGJhc2VN
ZW1vcnksIHNjcmF0Y2hPclNpemUpOwogICAgICAgICB9KTsKICAgICAgICAgZG9Db250ZXh0U3dp
dGNoLT5hcHBlbmROZXdDb250cm9sVmFsdWUobV9wcm9jLCBKdW1wLCBvcmlnaW4oKSwgY29udGlu
dWF0aW9uKTsKIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbUJCUVBsYW4u
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21CQlFQbGFu
LmNwcAkocmV2aXNpb24gMjQ2MjcxKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2Fz
bUJCUVBsYW4uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMTQsNyArMzE0LDcgQEAgdm9pZCBCQlFQ
bGFuOjpjb21wbGV0ZShjb25zdCBBYnN0cmFjdExvYwogICAgICAgICAgICAgICAgIH0KIAogICAg
ICAgICAgICAgICAgIG1fd2FzbUludGVybmFsRnVuY3Rpb25zW2Z1bmN0aW9uSW5kZXhdLT5lbnRy
eXBvaW50LmNvbXBpbGF0aW9uID0gc3RkOjptYWtlX3VuaXF1ZTxCMzo6Q29tcGlsYXRpb24+KAot
ICAgICAgICAgICAgICAgICAgICBGSU5BTElaRV9DT0RFKGxpbmtCdWZmZXIsIEIzQ29tcGlsYXRp
b25QdHJUYWcsICJXZWJBc3NlbWJseSBCQlEgZnVuY3Rpb25bJWldICVzIiwgZnVuY3Rpb25JbmRl
eCwgc2lnbmF0dXJlLnRvU3RyaW5nKCkuYXNjaWkoKS5kYXRhKCkpLAorICAgICAgICAgICAgICAg
ICAgICBGSU5BTElaRV9DT0RFKGxpbmtCdWZmZXIsIEIzQ29tcGlsYXRpb25QdHJUYWcsICJXZWJB
c3NlbWJseSBmdW5jdGlvblslaV0gJXMiLCBmdW5jdGlvbkluZGV4LCBzaWduYXR1cmUudG9TdHJp
bmcoKS5hc2NpaSgpLmRhdGEoKSksCiAgICAgICAgICAgICAgICAgICAgIFdURk1vdmUoY29udGV4
dC53YXNtRW50cnlwb2ludEJ5cHJvZHVjdHMpKTsKICAgICAgICAgICAgIH0KIApJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbUJpbmRpbmcuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21CaW5kaW5nLmNwcAkocmV2aXNpb24gMjQ2Mjcx
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbUJpbmRpbmcuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC00Niw3ICs0Niw3IEBAIEV4cGVjdGVkPE1hY3JvQXNzZW1ibGVyQ29kZVJlZjxX
YXNtRW50cnkKICAgICBjb25zdCBQaW5uZWRSZWdpc3RlckluZm8mIHBpbm5lZFJlZ3MgPSBQaW5u
ZWRSZWdpc3RlckluZm86OmdldCgpOwogICAgIEpJVCBqaXQ7CiAKLSAgICBHUFJSZWcgc2NyYXRj
aCA9IHdhc21DYWxsaW5nQ29udmVudGlvbkFpcigpLnByb2xvZ3VlU2NyYXRjaCgwKTsKKyAgICBH
UFJSZWcgc2NyYXRjaCA9IEdQUkluZm86Om5vblByZXNlcnZlZE5vbkFyZ3VtZW50R1BSMDsKICAg
ICBHUFJSZWcgYmFzZU1lbW9yeSA9IHBpbm5lZFJlZ3MuYmFzZU1lbW9yeVBvaW50ZXI7CiAgICAg
QVNTRVJUKGJhc2VNZW1vcnkgIT0gc2NyYXRjaCk7CiAgICAgQVNTRVJUKHBpbm5lZFJlZ3Muc2l6
ZVJlZ2lzdGVyICE9IGJhc2VNZW1vcnkpOwpAQCAtNjYsMTMgKzY2LDggQEAgRXhwZWN0ZWQ8TWFj
cm9Bc3NlbWJsZXJDb2RlUmVmPFdhc21FbnRyeQogCiAgICAgLy8gRklYTUUgdGhlIGZvbGxvd2lu
ZyBjb2RlIGFzc3VtZXMgdGhhdCBhbGwgV2FzbTo6SW5zdGFuY2UgaGF2ZSB0aGUgc2FtZSBwaW5u
ZWQgcmVnaXN0ZXJzLiBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTYy
OTUyCiAgICAgLy8gU2V0IHVwIHRoZSBjYWxsZWUncyBiYXNlTWVtb3J5IHJlZ2lzdGVyIGFzIHdl
bGwgYXMgdGhlIG1lbW9yeSBzaXplIHJlZ2lzdGVycy4KLSAgICB7Ci0gICAgICAgIEdQUlJlZyBz
Y3JhdGNoT3JTaXplID0gaXNBUk02NEUoKSA/IHBpbm5lZFJlZ3Muc2l6ZVJlZ2lzdGVyIDogd2Fz
bUNhbGxpbmdDb252ZW50aW9uQWlyKCkucHJvbG9ndWVTY3JhdGNoKDEpOwotCi0gICAgICAgIGpp
dC5sb2FkUHRyKEpJVDo6QWRkcmVzcyhiYXNlTWVtb3J5LCBXYXNtOjpJbnN0YW5jZTo6b2Zmc2V0
T2ZDYWNoZWRNZW1vcnlTaXplKCkpLCBwaW5uZWRSZWdzLnNpemVSZWdpc3Rlcik7IC8vIE1lbW9y
eSBzaXplLgotICAgICAgICBqaXQubG9hZFB0cihKSVQ6OkFkZHJlc3MoYmFzZU1lbW9yeSwgV2Fz
bTo6SW5zdGFuY2U6Om9mZnNldE9mQ2FjaGVkTWVtb3J5KCkpLCBiYXNlTWVtb3J5KTsgLy8gV2Fz
bTo6TWVtb3J5OjpUYWdnZWRBcnJheVN0b3JhZ2VQdHI8dm9pZD4gKHZvaWQqKS4KLSAgICAgICAg
aml0LmNhZ2VDb25kaXRpb25hbGx5KEdpZ2FjYWdlOjpQcmltaXRpdmUsIGJhc2VNZW1vcnksIHNj
cmF0Y2hPclNpemUpOwotICAgIH0KKyAgICBqaXQubG9hZFB0cihKSVQ6OkFkZHJlc3MoYmFzZU1l
bW9yeSwgV2FzbTo6SW5zdGFuY2U6Om9mZnNldE9mQ2FjaGVkTWVtb3J5U2l6ZSgpKSwgcGlubmVk
UmVncy5zaXplUmVnaXN0ZXIpOyAvLyBNZW1vcnkgc2l6ZS4KKyAgICBqaXQubG9hZFB0cihKSVQ6
OkFkZHJlc3MoYmFzZU1lbW9yeSwgV2FzbTo6SW5zdGFuY2U6Om9mZnNldE9mQ2FjaGVkTWVtb3J5
KCkpLCBiYXNlTWVtb3J5KTsgLy8gV2FzbTo6TWVtb3J5Ojp2b2lkKi4KIAogICAgIC8vIFRhaWwg
Y2FsbCBpbnRvIHRoZSBjYWxsZWUgV2ViQXNzZW1ibHkgZnVuY3Rpb24uCiAgICAgaml0LmxvYWRQ
dHIoc2NyYXRjaCwgc2NyYXRjaCk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9X
YXNtSW5zdGFuY2UuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9X
YXNtSW5zdGFuY2UuaAkocmV2aXNpb24gMjQ2MjcxKQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L3dhc20vV2FzbUluc3RhbmNlLmgJKHdvcmtpbmcgY29weSkKQEAgLTY2LDcgKzY2LDcgQEAgcHVi
bGljOgogICAgIE1lbW9yeSogbWVtb3J5KCkgeyByZXR1cm4gbV9tZW1vcnkuZ2V0KCk7IH0KICAg
ICBUYWJsZSogdGFibGUoKSB7IHJldHVybiBtX3RhYmxlLmdldCgpOyB9CiAKLSAgICB2b2lkKiBj
YWNoZWRNZW1vcnkoKSBjb25zdCB7IHJldHVybiBtX2NhY2hlZE1lbW9yeS5nZXRNYXlCZU51bGwo
Y2FjaGVkTWVtb3J5U2l6ZSgpKTsgfQorICAgIHZvaWQqIGNhY2hlZE1lbW9yeSgpIGNvbnN0IHsg
cmV0dXJuIG1fY2FjaGVkTWVtb3J5OyB9CiAgICAgc2l6ZV90IGNhY2hlZE1lbW9yeVNpemUoKSBj
b25zdCB7IHJldHVybiBtX2NhY2hlZE1lbW9yeVNpemU7IH0KIAogICAgIHZvaWQgc2V0TWVtb3J5
KFJlZjxNZW1vcnk+JiYgbWVtb3J5KQpAQCAtNzgsNyArNzgsNyBAQCBwdWJsaWM6CiAgICAgdm9p
ZCB1cGRhdGVDYWNoZWRNZW1vcnkoKQogICAgIHsKICAgICAgICAgaWYgKG1fbWVtb3J5ICE9IG51
bGxwdHIpIHsKLSAgICAgICAgICAgIG1fY2FjaGVkTWVtb3J5ID0gQ2FnZWRQdHI8R2lnYWNhZ2U6
OlByaW1pdGl2ZSwgdm9pZCwgdGFnQ2FnZWRQdHI+KG1lbW9yeSgpLT5tZW1vcnkoKSwgbWVtb3J5
KCktPnNpemUoKSk7CisgICAgICAgICAgICBtX2NhY2hlZE1lbW9yeSA9IG1lbW9yeSgpLT5tZW1v
cnkoKTsKICAgICAgICAgICAgIG1fY2FjaGVkTWVtb3J5U2l6ZSA9IG1lbW9yeSgpLT5zaXplKCk7
CiAgICAgICAgIH0KICAgICB9CkBAIC0xNDcsNyArMTQ3LDcgQEAgcHJpdmF0ZToKICAgICB9CiAg
ICAgdm9pZCogbV9vd25lciB7IG51bGxwdHIgfTsgLy8gSW4gYSBKUyBlbWJlZGRpbmcsIHRoaXMg
aXMgYSBKU1dlYkFzc2VtYmx5SW5zdGFuY2UqLgogICAgIENvbnRleHQqIG1fY29udGV4dCB7IG51
bGxwdHIgfTsKLSAgICBDYWdlZFB0cjxHaWdhY2FnZTo6UHJpbWl0aXZlLCB2b2lkLCB0YWdDYWdl
ZFB0cj4gbV9jYWNoZWRNZW1vcnk7CisgICAgdm9pZCogbV9jYWNoZWRNZW1vcnkgeyBudWxscHRy
IH07CiAgICAgc2l6ZV90IG1fY2FjaGVkTWVtb3J5U2l6ZSB7IDAgfTsKICAgICBSZWY8TW9kdWxl
PiBtX21vZHVsZTsKICAgICBSZWZQdHI8Q29kZUJsb2NrPiBtX2NvZGVCbG9jazsKSW5kZXg6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21NZW1vcnkuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21NZW1vcnkuY3BwCShyZXZpc2lvbiAyNDYyNzEp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtTWVtb3J5LmNwcAkod29ya2luZyBj
b3B5KQpAQCAtMjUzLDExICsyNTMsMTAgQEAgTWVtb3J5OjpNZW1vcnkoUGFnZUNvdW50IGluaXRp
YWwsIFBhZ2VDbwogICAgIEFTU0VSVCghaW5pdGlhbC5ieXRlcygpKTsKICAgICBBU1NFUlQobV9t
b2RlID09IE1lbW9yeU1vZGU6OkJvdW5kc0NoZWNraW5nKTsKICAgICBkYXRhTG9nTG5JZih2ZXJi
b3NlLCAiTWVtb3J5OjpNZW1vcnkgYWxsb2NhdGluZyAiLCAqdGhpcyk7Ci0gICAgQVNTRVJUKCFt
ZW1vcnkoKSk7CiB9CiAKIE1lbW9yeTo6TWVtb3J5KHZvaWQqIG1lbW9yeSwgUGFnZUNvdW50IGlu
aXRpYWwsIFBhZ2VDb3VudCBtYXhpbXVtLCBzaXplX3QgbWFwcGVkQ2FwYWNpdHksIE1lbW9yeU1v
ZGUgbW9kZSwgRnVuY3Rpb248dm9pZChOb3RpZnlQcmVzc3VyZSk+JiYgbm90aWZ5TWVtb3J5UHJl
c3N1cmUsIEZ1bmN0aW9uPHZvaWQoU3luY1RyeVRvUmVjbGFpbSk+JiYgc3luY1RyeVRvUmVjbGFp
bU1lbW9yeSwgV1RGOjpGdW5jdGlvbjx2b2lkKEdyb3dTdWNjZXNzLCBQYWdlQ291bnQsIFBhZ2VD
b3VudCk+JiYgZ3Jvd1N1Y2Nlc3NDYWxsYmFjaykKLSAgICA6IG1fbWVtb3J5KG1lbW9yeSwgaW5p
dGlhbC5ieXRlcygpKQorICAgIDogbV9tZW1vcnkobWVtb3J5KQogICAgICwgbV9zaXplKGluaXRp
YWwuYnl0ZXMoKSkKICAgICAsIG1faW5pdGlhbChpbml0aWFsKQogICAgICwgbV9tYXhpbXVtKG1h
eGltdW0pCkBAIC0zMzksMTQgKzMzOCwxNCBAQCBNZW1vcnk6On5NZW1vcnkoKQogICAgICAgICBt
ZW1vcnlNYW5hZ2VyKCkuZnJlZVBoeXNpY2FsQnl0ZXMobV9zaXplKTsKICAgICAgICAgc3dpdGNo
IChtX21vZGUpIHsKICAgICAgICAgY2FzZSBNZW1vcnlNb2RlOjpTaWduYWxpbmc6Ci0gICAgICAg
ICAgICBpZiAobXByb3RlY3QobWVtb3J5KCksIE1lbW9yeTo6ZmFzdE1hcHBlZEJ5dGVzKCksIFBS
T1RfUkVBRCB8IFBST1RfV1JJVEUpKSB7CisgICAgICAgICAgICBpZiAobXByb3RlY3QobV9tZW1v
cnksIE1lbW9yeTo6ZmFzdE1hcHBlZEJ5dGVzKCksIFBST1RfUkVBRCB8IFBST1RfV1JJVEUpKSB7
CiAgICAgICAgICAgICAgICAgZGF0YUxvZygibXByb3RlY3QgZmFpbGVkOiAiLCBzdHJlcnJvcihl
cnJubyksICJcbiIpOwogICAgICAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVE
KCk7CiAgICAgICAgICAgICB9Ci0gICAgICAgICAgICBtZW1vcnlNYW5hZ2VyKCkuZnJlZUZhc3RN
ZW1vcnkobWVtb3J5KCkpOworICAgICAgICAgICAgbWVtb3J5TWFuYWdlcigpLmZyZWVGYXN0TWVt
b3J5KG1fbWVtb3J5KTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICBjYXNlIE1lbW9yeU1v
ZGU6OkJvdW5kc0NoZWNraW5nOgotICAgICAgICAgICAgR2lnYWNhZ2U6OmZyZWVWaXJ0dWFsUGFn
ZXMoR2lnYWNhZ2U6OlByaW1pdGl2ZSwgbWVtb3J5KCksIG1fc2l6ZSk7CisgICAgICAgICAgICBH
aWdhY2FnZTo6ZnJlZVZpcnR1YWxQYWdlcyhHaWdhY2FnZTo6UHJpbWl0aXZlLCBtX21lbW9yeSwg
bV9zaXplKTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CiAgICAgfQpAQCAtNDIwLDI2
ICs0MTksMjQgQEAgRXhwZWN0ZWQ8UGFnZUNvdW50LCBNZW1vcnk6Okdyb3dGYWlsUmVhcwogICAg
ICAgICBpZiAoIW5ld01lbW9yeSkKICAgICAgICAgICAgIHJldHVybiBtYWtlVW5leHBlY3RlZChH
cm93RmFpbFJlYXNvbjo6T3V0T2ZNZW1vcnkpOwogCi0gICAgICAgIG1lbWNweShuZXdNZW1vcnks
IG1lbW9yeSgpLCBtX3NpemUpOworICAgICAgICBtZW1jcHkobmV3TWVtb3J5LCBtX21lbW9yeSwg
bV9zaXplKTsKICAgICAgICAgaWYgKG1fbWVtb3J5KQotICAgICAgICAgICAgR2lnYWNhZ2U6OmZy
ZWVWaXJ0dWFsUGFnZXMoR2lnYWNhZ2U6OlByaW1pdGl2ZSwgbWVtb3J5KCksIG1fc2l6ZSk7Ci0g
ICAgICAgIG1fbWVtb3J5ID0gQ2FnZWRNZW1vcnkobmV3TWVtb3J5LCBkZXNpcmVkU2l6ZSk7Cisg
ICAgICAgICAgICBHaWdhY2FnZTo6ZnJlZVZpcnR1YWxQYWdlcyhHaWdhY2FnZTo6UHJpbWl0aXZl
LCBtX21lbW9yeSwgbV9zaXplKTsKKyAgICAgICAgbV9tZW1vcnkgPSBuZXdNZW1vcnk7CiAgICAg
ICAgIG1fbWFwcGVkQ2FwYWNpdHkgPSBkZXNpcmVkU2l6ZTsKICAgICAgICAgbV9zaXplID0gZGVz
aXJlZFNpemU7Ci0gICAgICAgIEFTU0VSVChtZW1vcnkoKSA9PSBuZXdNZW1vcnkpOwogICAgICAg
ICByZXR1cm4gc3VjY2VzcygpOwogICAgIH0KICAgICBjYXNlIE1lbW9yeU1vZGU6OlNpZ25hbGlu
ZzogewotICAgICAgICBSRUxFQVNFX0FTU0VSVChtZW1vcnkoKSk7CisgICAgICAgIFJFTEVBU0Vf
QVNTRVJUKG1fbWVtb3J5KTsKICAgICAgICAgLy8gU2lnbmFsaW5nIG1lbW9yeSBtdXN0IGhhdmUg
YmVlbiBwcmUtYWxsb2NhdGVkIHZpcnR1YWxseS4KLSAgICAgICAgdWludDhfdCogc3RhcnRBZGRy
ZXNzID0gc3RhdGljX2Nhc3Q8dWludDhfdCo+KG1lbW9yeSgpKSArIG1fc2l6ZTsKKyAgICAgICAg
dWludDhfdCogc3RhcnRBZGRyZXNzID0gc3RhdGljX2Nhc3Q8dWludDhfdCo+KG1fbWVtb3J5KSAr
IG1fc2l6ZTsKICAgICAgICAgCi0gICAgICAgIGRhdGFMb2dMbklmKHZlcmJvc2UsICJNYXJraW5n
IFdlYkFzc2VtYmx5IG1lbW9yeSdzICIsIFJhd1BvaW50ZXIobWVtb3J5KCkpLCAiIGFzIHJlYWQr
d3JpdGUgaW4gcmFuZ2UgWyIsIFJhd1BvaW50ZXIoc3RhcnRBZGRyZXNzKSwgIiwgIiwgUmF3UG9p
bnRlcihzdGFydEFkZHJlc3MgKyBleHRyYUJ5dGVzKSwgIikiKTsKKyAgICAgICAgZGF0YUxvZ0xu
SWYodmVyYm9zZSwgIk1hcmtpbmcgV2ViQXNzZW1ibHkgbWVtb3J5J3MgIiwgUmF3UG9pbnRlciht
X21lbW9yeSksICIgYXMgcmVhZCt3cml0ZSBpbiByYW5nZSBbIiwgUmF3UG9pbnRlcihzdGFydEFk
ZHJlc3MpLCAiLCAiLCBSYXdQb2ludGVyKHN0YXJ0QWRkcmVzcyArIGV4dHJhQnl0ZXMpLCAiKSIp
OwogICAgICAgICBpZiAobXByb3RlY3Qoc3RhcnRBZGRyZXNzLCBleHRyYUJ5dGVzLCBQUk9UX1JF
QUQgfCBQUk9UX1dSSVRFKSkgewogICAgICAgICAgICAgZGF0YUxvZygibXByb3RlY3QgZmFpbGVk
OiAiLCBzdHJlcnJvcihlcnJubyksICJcbiIpOwogICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlRf
Tk9UX1JFQUNIRUQoKTsKICAgICAgICAgfQotICAgICAgICBtX21lbW9yeS5yZWNhZ2UobV9zaXpl
LCBkZXNpcmVkU2l6ZSk7CiAgICAgICAgIG1fc2l6ZSA9IGRlc2lyZWRTaXplOwogICAgICAgICBy
ZXR1cm4gc3VjY2VzcygpOwogICAgIH0KQEAgLTQ2Myw3ICs0NjAsNyBAQCB2b2lkIE1lbW9yeTo6
cmVnaXN0ZXJJbnN0YW5jZShJbnN0YW5jZSogCiAKIHZvaWQgTWVtb3J5OjpkdW1wKFByaW50U3Ry
ZWFtJiBvdXQpIGNvbnN0CiB7Ci0gICAgb3V0LnByaW50KCJNZW1vcnkgYXQgIiwgUmF3UG9pbnRl
cihtZW1vcnkoKSksICIsIHNpemUgIiwgbV9zaXplLCAiQiBjYXBhY2l0eSAiLCBtX21hcHBlZENh
cGFjaXR5LCAiQiwgaW5pdGlhbCAiLCBtX2luaXRpYWwsICIgbWF4aW11bSAiLCBtX21heGltdW0s
ICIgbW9kZSAiLCBtYWtlU3RyaW5nKG1fbW9kZSkpOworICAgIG91dC5wcmludCgiTWVtb3J5IGF0
ICIsIFJhd1BvaW50ZXIobV9tZW1vcnkpLCAiLCBzaXplICIsIG1fc2l6ZSwgIkIgY2FwYWNpdHkg
IiwgbV9tYXBwZWRDYXBhY2l0eSwgIkIsIGluaXRpYWwgIiwgbV9pbml0aWFsLCAiIG1heGltdW0g
IiwgbV9tYXhpbXVtLCAiIG1vZGUgIiwgbWFrZVN0cmluZyhtX21vZGUpKTsKIH0KIAogfSAvLyBu
YW1lc3BhY2UgSlNDCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtTWVtb3J5
LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbU1lbW9yeS5o
CShyZXZpc2lvbiAyNDYyNzEpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtTWVt
b3J5LmgJKHdvcmtpbmcgY29weSkKQEAgLTMwLDcgKzMwLDYgQEAKICNpbmNsdWRlICJXYXNtTWVt
b3J5TW9kZS5oIgogI2luY2x1ZGUgIldhc21QYWdlQ291bnQuaCIKIAotI2luY2x1ZGUgPHd0Zi9D
YWdlZFB0ci5oPgogI2luY2x1ZGUgPHd0Zi9FeHBlY3RlZC5oPgogI2luY2x1ZGUgPHd0Zi9GdW5j
dGlvbi5oPgogI2luY2x1ZGUgPHd0Zi9SZWZDb3VudGVkLmg+CkBAIC02OSw3ICs2OCw3IEBAIHB1
YmxpYzoKICAgICBzdGF0aWMgc2l6ZV90IGZhc3RNYXBwZWRCeXRlcygpOyAvLyBJbmNsdWRlcyBy
ZWR6b25lLgogICAgIHN0YXRpYyBib29sIGFkZHJlc3NJc0luQWN0aXZlRmFzdE1lbW9yeSh2b2lk
Kik7CiAKLSAgICB2b2lkKiBtZW1vcnkoKSBjb25zdCB7IEFTU0VSVChtX21lbW9yeS5nZXRNYXlC
ZU51bGwoc2l6ZSgpKSA9PSBtX21lbW9yeS5nZXRVbnNhZmUoKSk7IHJldHVybiBtX21lbW9yeS5n
ZXRNYXlCZU51bGwoc2l6ZSgpKTsgfQorICAgIHZvaWQqIG1lbW9yeSgpIGNvbnN0IHsgcmV0dXJu
IG1fbWVtb3J5OyB9CiAgICAgc2l6ZV90IHNpemUoKSBjb25zdCB7IHJldHVybiBtX3NpemU7IH0K
ICAgICBQYWdlQ291bnQgc2l6ZUluUGFnZXMoKSBjb25zdCB7IHJldHVybiBQYWdlQ291bnQ6OmZy
b21CeXRlcyhtX3NpemUpOyB9CiAKQEAgLTk3LDggKzk2LDcgQEAgcHJpdmF0ZToKICAgICBNZW1v
cnkodm9pZCogbWVtb3J5LCBQYWdlQ291bnQgaW5pdGlhbCwgUGFnZUNvdW50IG1heGltdW0sIHNp
emVfdCBtYXBwZWRDYXBhY2l0eSwgTWVtb3J5TW9kZSwgV1RGOjpGdW5jdGlvbjx2b2lkKE5vdGlm
eVByZXNzdXJlKT4mJiBub3RpZnlNZW1vcnlQcmVzc3VyZSwgV1RGOjpGdW5jdGlvbjx2b2lkKFN5
bmNUcnlUb1JlY2xhaW0pPiYmIHN5bmNUcnlUb1JlY2xhaW1NZW1vcnksIFdURjo6RnVuY3Rpb248
dm9pZChHcm93U3VjY2VzcywgUGFnZUNvdW50LCBQYWdlQ291bnQpPiYmIGdyb3dTdWNjZXNzQ2Fs
bGJhY2spOwogICAgIE1lbW9yeShQYWdlQ291bnQgaW5pdGlhbCwgUGFnZUNvdW50IG1heGltdW0s
IFdURjo6RnVuY3Rpb248dm9pZChOb3RpZnlQcmVzc3VyZSk+JiYgbm90aWZ5TWVtb3J5UHJlc3N1
cmUsIFdURjo6RnVuY3Rpb248dm9pZChTeW5jVHJ5VG9SZWNsYWltKT4mJiBzeW5jVHJ5VG9SZWNs
YWltTWVtb3J5LCBXVEY6OkZ1bmN0aW9uPHZvaWQoR3Jvd1N1Y2Nlc3MsIFBhZ2VDb3VudCwgUGFn
ZUNvdW50KT4mJiBncm93U3VjY2Vzc0NhbGxiYWNrKTsKIAotICAgIHVzaW5nIENhZ2VkTWVtb3J5
ID0gQ2FnZWRQdHI8R2lnYWNhZ2U6OlByaW1pdGl2ZSwgdm9pZCwgdGFnQ2FnZWRQdHI+OwotICAg
IENhZ2VkTWVtb3J5IG1fbWVtb3J5OworICAgIHZvaWQqIG1fbWVtb3J5IHsgbnVsbHB0ciB9Owog
ICAgIHNpemVfdCBtX3NpemUgeyAwIH07CiAgICAgUGFnZUNvdW50IG1faW5pdGlhbDsKICAgICBQ
YWdlQ291bnQgbV9tYXhpbXVtOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMv
SlNUb1dhc20uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pz
L0pTVG9XYXNtLmNwcAkocmV2aXNpb24gMjQ2MjcxKQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L3dhc20vanMvSlNUb1dhc20uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yOSw3ICsyOSw2IEBACiAj
aWYgRU5BQkxFKFdFQkFTU0VNQkxZKQogCiAjaW5jbHVkZSAiQ0NhbGxIZWxwZXJzLmgiCi0jaW5j
bHVkZSAiRGlzYWxsb3dNYWNyb1NjcmF0Y2hSZWdpc3RlclVzYWdlLmgiCiAjaW5jbHVkZSAiSlND
SW5saW5lcy5oIgogI2luY2x1ZGUgIkpTV2ViQXNzZW1ibHlJbnN0YW5jZS5oIgogI2luY2x1ZGUg
IkpTV2ViQXNzZW1ibHlSdW50aW1lRXJyb3IuaCIKQEAgLTIxMiwyMyArMjExLDE1IEBAIHN0ZDo6
dW5pcXVlX3B0cjxJbnRlcm5hbEZ1bmN0aW9uPiBjcmVhdGUKIAogICAgIGlmICghIWluZm8ubWVt
b3J5KSB7CiAgICAgICAgIEdQUlJlZyBiYXNlTWVtb3J5ID0gcGlubmVkUmVncy5iYXNlTWVtb3J5
UG9pbnRlcjsKLSAgICAgICAgR1BSUmVnIHNjcmF0Y2hPclNpemUgPSB3YXNtQ2FsbGluZ0NvbnZl
bnRpb25BaXIoKS5wcm9sb2d1ZVNjcmF0Y2goMCk7CiAKICAgICAgICAgaWYgKENvbnRleHQ6OnVz
ZUZhc3RUTFMoKSkKICAgICAgICAgICAgIGppdC5sb2FkV2FzbUNvbnRleHRJbnN0YW5jZShiYXNl
TWVtb3J5KTsKIAogICAgICAgICBHUFJSZWcgY3VycmVudEluc3RhbmNlR1BSID0gQ29udGV4dDo6
dXNlRmFzdFRMUygpID8gYmFzZU1lbW9yeSA6IHdhc21Db250ZXh0SW5zdGFuY2VHUFI7Ci0gICAg
ICAgIGlmIChpc0FSTTY0RSgpKSB7Ci0gICAgICAgICAgICBpZiAobW9kZSAhPSBXYXNtOjpNZW1v
cnlNb2RlOjpTaWduYWxpbmcpCi0gICAgICAgICAgICAgICAgc2NyYXRjaE9yU2l6ZSA9IHBpbm5l
ZFJlZ3Muc2l6ZVJlZ2lzdGVyOwotICAgICAgICAgICAgaml0LmxvYWRQdHIoQ0NhbGxIZWxwZXJz
OjpBZGRyZXNzKGN1cnJlbnRJbnN0YW5jZUdQUiwgV2FzbTo6SW5zdGFuY2U6Om9mZnNldE9mQ2Fj
aGVkTWVtb3J5U2l6ZSgpKSwgc2NyYXRjaE9yU2l6ZSk7Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAg
ICAgICAgICBpZiAobW9kZSAhPSBXYXNtOjpNZW1vcnlNb2RlOjpTaWduYWxpbmcpCi0gICAgICAg
ICAgICAgICAgaml0LmxvYWRQdHIoQ0NhbGxIZWxwZXJzOjpBZGRyZXNzKGN1cnJlbnRJbnN0YW5j
ZUdQUiwgV2FzbTo6SW5zdGFuY2U6Om9mZnNldE9mQ2FjaGVkTWVtb3J5U2l6ZSgpKSwgcGlubmVk
UmVncy5zaXplUmVnaXN0ZXIpOwotICAgICAgICB9CisgICAgICAgIGlmIChtb2RlICE9IE1lbW9y
eU1vZGU6OlNpZ25hbGluZykKKyAgICAgICAgICAgIGppdC5sb2FkUHRyKENDYWxsSGVscGVyczo6
QWRkcmVzcyhjdXJyZW50SW5zdGFuY2VHUFIsIFdhc206Okluc3RhbmNlOjpvZmZzZXRPZkNhY2hl
ZE1lbW9yeVNpemUoKSksIHBpbm5lZFJlZ3Muc2l6ZVJlZ2lzdGVyKTsKIAogICAgICAgICBqaXQu
bG9hZFB0cihDQ2FsbEhlbHBlcnM6OkFkZHJlc3MoY3VycmVudEluc3RhbmNlR1BSLCBXYXNtOjpJ
bnN0YW5jZTo6b2Zmc2V0T2ZDYWNoZWRNZW1vcnkoKSksIGJhc2VNZW1vcnkpOwotICAgICAgICBq
aXQuY2FnZUNvbmRpdGlvbmFsbHkoR2lnYWNhZ2U6OlByaW1pdGl2ZSwgYmFzZU1lbW9yeSwgc2Ny
YXRjaE9yU2l6ZSk7CiAgICAgfQogCiAgICAgQ0NhbGxIZWxwZXJzOjpDYWxsIGNhbGwgPSBqaXQu
dGhyZWFkU2FmZVBhdGNoYWJsZU5lYXJDYWxsKCk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvd2FzbS9qcy9XZWJBc3NlbWJseUZ1bmN0aW9uLmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvd2FzbS9qcy9XZWJBc3NlbWJseUZ1bmN0aW9uLmNwcAkocmV2aXNpb24g
MjQ2MjcxKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMvV2ViQXNzZW1ibHlGdW5j
dGlvbi5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQxMCwyMCArNDEwLDEzIEBAIE1hY3JvQXNzZW1i
bGVyQ29kZVB0cjxKU0VudHJ5UHRyVGFnPiBXZWIKIAogICAgIGlmICghIW1vZHVsZUluZm9ybWF0
aW9uLm1lbW9yeSkgewogICAgICAgICBHUFJSZWcgYmFzZU1lbW9yeSA9IHBpbm5lZFJlZ3MuYmFz
ZU1lbW9yeVBvaW50ZXI7Ci0gICAgICAgIEdQUlJlZyBzY3JhdGNoT3JTaXplID0gc2NyYXRjaDJH
UFI7Ci0gICAgICAgIGF1dG8gbW9kZSA9IGluc3RhbmNlKCktPm1lbW9yeU1vZGUoKTsKIAotICAg
ICAgICBpZiAoaXNBUk02NEUoKSkgewotICAgICAgICAgICAgaWYgKG1vZGUgIT0gV2FzbTo6TWVt
b3J5TW9kZTo6U2lnbmFsaW5nKQotICAgICAgICAgICAgICAgIHNjcmF0Y2hPclNpemUgPSBwaW5u
ZWRSZWdzLnNpemVSZWdpc3RlcjsKLSAgICAgICAgICAgIGppdC5sb2FkUHRyKENDYWxsSGVscGVy
czo6QWRkcmVzcyhzY3JhdGNoR1BSLCBXYXNtOjpJbnN0YW5jZTo6b2Zmc2V0T2ZDYWNoZWRNZW1v
cnlTaXplKCkpLCBzY3JhdGNoT3JTaXplKTsKLSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAg
IGlmIChtb2RlICE9IFdhc206Ok1lbW9yeU1vZGU6OlNpZ25hbGluZykKLSAgICAgICAgICAgICAg
ICBqaXQubG9hZFB0cihDQ2FsbEhlbHBlcnM6OkFkZHJlc3Moc2NyYXRjaEdQUiwgV2FzbTo6SW5z
dGFuY2U6Om9mZnNldE9mQ2FjaGVkTWVtb3J5U2l6ZSgpKSwgcGlubmVkUmVncy5zaXplUmVnaXN0
ZXIpOworICAgICAgICBpZiAoaW5zdGFuY2UoKS0+bWVtb3J5TW9kZSgpICE9IFdhc206Ok1lbW9y
eU1vZGU6OlNpZ25hbGluZykgeworICAgICAgICAgICAgQVNTRVJUKHBpbm5lZFJlZ3Muc2l6ZVJl
Z2lzdGVyICE9IHNjcmF0Y2hHUFIpOworICAgICAgICAgICAgaml0LmxvYWRQdHIoQ0NhbGxIZWxw
ZXJzOjpBZGRyZXNzKHNjcmF0Y2hHUFIsIFdhc206Okluc3RhbmNlOjpvZmZzZXRPZkNhY2hlZE1l
bW9yeVNpemUoKSksIHBpbm5lZFJlZ3Muc2l6ZVJlZ2lzdGVyKTsKICAgICAgICAgfQogCiAgICAg
ICAgIGppdC5sb2FkUHRyKENDYWxsSGVscGVyczo6QWRkcmVzcyhzY3JhdGNoR1BSLCBXYXNtOjpJ
bnN0YW5jZTo6b2Zmc2V0T2ZDYWNoZWRNZW1vcnkoKSksIGJhc2VNZW1vcnkpOwotICAgICAgICBq
aXQuY2FnZUNvbmRpdGlvbmFsbHkoR2lnYWNhZ2U6OlByaW1pdGl2ZSwgYmFzZU1lbW9yeSwgc2Ny
YXRjaE9yU2l6ZSk7CiAgICAgfQogCiAgICAgLy8gV2UgdXNlIHRoaXMgY2FsbGVlIHRvIGluZGlj
YXRlIGhvdyB0byB1bndpbmQgcGFzdCB0aGVzZSB0eXBlcyBvZiBmcmFtZXM6CkluZGV4OiBTb3Vy
Y2UvV1RGL1dURi54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9XVEYvV1RGLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oJKHJldmlzaW9uIDI0NjI3MSkKKysr
IFNvdXJjZS9XVEYvV1RGLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oJKHdvcmtpbmcgY29weSkK
QEAgLTY1MSw3ICs2NTEsNiBAQAogCQlEQ0VFMjFGQzFDRUE3NTUxMDAwQzIzOTYgLyogQmxvY2tP
YmpDRXhjZXB0aW9ucy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGlu
ZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBCbG9ja09i
akNFeGNlcHRpb25zLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCURDRUUyMUZEMUNF
QTc1NTEwMDBDMjM5NiAvKiBCbG9ja09iakNFeGNlcHRpb25zLm1tICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jcHAub2JqY3BwOyBwYXRoID0gQmxvY2tPYmpDRXhjZXB0aW9ucy5tbTsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKIAkJRENFRTIyMDQxQ0VCOTg2OTAwMEMyMzk2IC8qIEJhY2t3YXJk
c0dyYXBoLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEJhY2t3YXJkc0dyYXBo
Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCURFRjdGRTVGMjI1ODFBQzgwMEMxNTEy
OSAvKiBUYWdnZWRBcnJheVN0b3JhZ2VQdHIuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBw
YXRoID0gVGFnZ2VkQXJyYXlTdG9yYWdlUHRyLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CiAJCUUxNTU1NkYzMThBMENDMTgwMDZGNDhGQiAvKiBDcnlwdG9ncmFwaGljVXRpbGl0aWVzLmNw
cCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IENyeXB0b2dyYXBoaWNVdGls
aXRpZXMuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlFMTU1NTZGNDE4QTBDQzE4
MDA2RjQ4RkIgLyogQ3J5cHRvZ3JhcGhpY1V0aWxpdGllcy5oICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jLmg7IHBhdGggPSBDcnlwdG9ncmFwaGljVXRpbGl0aWVzLmg7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CiAJCUUzMDBFNTIxMjAzRDY0NUYwMERBNzlCRSAvKiBVbmlxdWVBcnJheS5oICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBVbmlxdWVBcnJheS5oOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OwpAQCAtMTE1OCw3ICsxMTU3LDYgQEAKIAkJCQk1NTk3RjgyQzFEOTRC
OTk3MDA2NkJDMjEgLyogU3luY2hyb25pemVkRml4ZWRRdWV1ZS5oICovLAogCQkJCUUzRTE1ODI1
MUVBREE1M0MwMDRBMDc5RCAvKiBTeXN0ZW1GcmVlLmggKi8sCiAJCQkJMEZCMzE3QzMxQzQ4ODAw
MTAwN0UzOTVBIC8qIFN5c3RlbVRyYWNpbmcuaCAqLywKLQkJCQlERUY3RkU1RjIyNTgxQUM4MDBD
MTUxMjkgLyogVGFnZ2VkQXJyYXlTdG9yYWdlUHRyLmggKi8sCiAJCQkJRTMxMUZCMTUxRjBBNTY4
QjAwM0MwOERFIC8qIFRocmVhZEdyb3VwLmNwcCAqLywKIAkJCQlFMzExRkIxNjFGMEE1NjhCMDAz
QzA4REUgLyogVGhyZWFkR3JvdXAuaCAqLywKIAkJCQlBOEE0NzMzMjE1MUE4MjVCMDA0MTIzRkYg
LyogVGhyZWFkaW5nLmNwcCAqLywKSW5kZXg6IFNvdXJjZS9XVEYvd3RmL0NNYWtlTGlzdHMudHh0
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9XVEYvd3RmL0NNYWtlTGlzdHMudHh0CShyZXZpc2lvbiAy
NDYyNzEpCisrKyBTb3VyY2UvV1RGL3d0Zi9DTWFrZUxpc3RzLnR4dAkod29ya2luZyBjb3B5KQpA
QCAtMjMwLDcgKzIzMCw2IEBAIHNldChXVEZfUFVCTElDX0hFQURFUlMKICAgICBTeW5jaHJvbml6
ZWRGaXhlZFF1ZXVlLmgKICAgICBTeXN0ZW1GcmVlLmgKICAgICBTeXN0ZW1UcmFjaW5nLmgKLSAg
ICBUYWdnZWRBcnJheVN0b3JhZ2VQdHIuaAogICAgIFRocmVhZEdyb3VwLmgKICAgICBUaHJlYWRN
ZXNzYWdlLmgKICAgICBUaHJlYWRTYWZlUmVmQ291bnRlZC5oCkluZGV4OiBTb3VyY2UvV1RGL3d0
Zi9DYWdlZFB0ci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XVEYvd3RmL0NhZ2VkUHRyLmgJKHJl
dmlzaW9uIDI0NjI3MSkKKysrIFNvdXJjZS9XVEYvd3RmL0NhZ2VkUHRyLmgJKHdvcmtpbmcgY29w
eSkKQEAgLTI3LDkxICsyNywxMDcgQEAKIAogI2luY2x1ZGUgPHd0Zi9EdW1iUHRyVHJhaXRzLmg+
CiAjaW5jbHVkZSA8d3RmL0dpZ2FjYWdlLmg+Ci0jaW5jbHVkZSA8d3RmL1B0clRhZy5oPgogCiBu
YW1lc3BhY2UgV1RGIHsKIAotY29uc3RleHByIGJvb2wgdGFnQ2FnZWRQdHIgPSB0cnVlOwotCi10
ZW1wbGF0ZTxHaWdhY2FnZTo6S2luZCBwYXNzZWRLaW5kLCB0eXBlbmFtZSBULCBib29sIHNob3Vs
ZFRhZyA9IGZhbHNlLCB0eXBlbmFtZSBQdHJUcmFpdHMgPSBEdW1iUHRyVHJhaXRzPFQ+PgordGVt
cGxhdGU8R2lnYWNhZ2U6OktpbmQgcGFzc2VkS2luZCwgdHlwZW5hbWUgVCwgdHlwZW5hbWUgUHRy
VHJhaXRzID0gRHVtYlB0clRyYWl0czxUPj4KIGNsYXNzIENhZ2VkUHRyIHsKIHB1YmxpYzoKICAg
ICBzdGF0aWMgY29uc3RleHByIEdpZ2FjYWdlOjpLaW5kIGtpbmQgPSBwYXNzZWRLaW5kOwogCiAg
ICAgQ2FnZWRQdHIoKSA6IENhZ2VkUHRyKG51bGxwdHIpIHsgfQotICAgIENhZ2VkUHRyKHN0ZDo6
bnVsbHB0cl90KQotICAgICAgICA6IG1fcHRyKHNob3VsZFRhZyA/IHRhZ0FycmF5UHRyPFQ+KG51
bGxwdHIsIDApIDogbnVsbHB0cikKLSAgICB7IH0KLQotICAgIENhZ2VkUHRyKFQqIHB0ciwgdW5z
aWduZWQgc2l6ZSkKLSAgICAgICAgOiBtX3B0cihzaG91bGRUYWcgPyB0YWdBcnJheVB0cihwdHIs
IHNpemUpIDogcHRyKQotICAgIHsgfQotCisgICAgQ2FnZWRQdHIoc3RkOjpudWxscHRyX3QpIDog
bV9wdHIobnVsbHB0cikgeyB9CiAKLSAgICBUKiBnZXQodW5zaWduZWQgc2l6ZSkgY29uc3QKKyAg
ICBleHBsaWNpdCBDYWdlZFB0cihUKiBwdHIpCisgICAgICAgIDogbV9wdHIocHRyKQorICAgIHsK
KyAgICB9CisgICAgCisgICAgVCogZ2V0KCkgY29uc3QKICAgICB7CiAgICAgICAgIEFTU0VSVCht
X3B0cik7Ci0gICAgICAgIFQqIHB0ciA9IFB0clRyYWl0czo6dW53cmFwKG1fcHRyKTsKLSAgICAg
ICAgaWYgKHNob3VsZFRhZykKLSAgICAgICAgICAgIHB0ciA9IHVudGFnQXJyYXlQdHIocHRyLCBz
aXplKTsKLSAgICAgICAgcmV0dXJuIEdpZ2FjYWdlOjpjYWdlZChraW5kLCBwdHIpOworICAgICAg
ICByZXR1cm4gR2lnYWNhZ2U6OmNhZ2VkKGtpbmQsIFB0clRyYWl0czo6dW53cmFwKG1fcHRyKSk7
CiAgICAgfQotCi0gICAgVCogZ2V0TWF5QmVOdWxsKHVuc2lnbmVkIHNpemUpIGNvbnN0CisgICAg
CisgICAgVCogZ2V0TWF5QmVOdWxsKCkgY29uc3QKICAgICB7Ci0gICAgICAgIFQqIHB0ciA9IFB0
clRyYWl0czo6dW53cmFwKG1fcHRyKTsKLSAgICAgICAgaWYgKHNob3VsZFRhZykKLSAgICAgICAg
ICAgIHB0ciA9IHVudGFnQXJyYXlQdHIocHRyLCBzaXplKTsKLSAgICAgICAgcmV0dXJuIEdpZ2Fj
YWdlOjpjYWdlZE1heUJlTnVsbChraW5kLCBwdHIpOworICAgICAgICBpZiAoIW1fcHRyKQorICAg
ICAgICAgICAgcmV0dXJuIG51bGxwdHI7CisgICAgICAgIHJldHVybiBnZXQoKTsKICAgICB9CiAK
LSAgICBUKiBnZXRVbnNhZmUoKSBjb25zdAorICAgIENhZ2VkUHRyJiBvcGVyYXRvcj0oVCogcHRy
KQogICAgIHsKLSAgICAgICAgVCogcHRyID0gUHRyVHJhaXRzOjp1bndyYXAobV9wdHIpOwotICAg
ICAgICBpZiAoc2hvdWxkVGFnKQotICAgICAgICAgICAgcHRyID0gcmVtb3ZlQXJyYXlQdHJUYWco
cHRyKTsKLSAgICAgICAgcmV0dXJuIEdpZ2FjYWdlOjpjYWdlZE1heUJlTnVsbChraW5kLCBwdHIp
OworICAgICAgICBtX3B0ciA9IHB0cjsKKyAgICAgICAgcmV0dXJuICp0aGlzOwogICAgIH0KIAot
ICAgIC8vIFdlIG5lZWQgdGhlIHRlbXBsYXRlIGhlcmUgc28gdGhhdCB0aGUgdHlwZSBvZiBVIGlz
IGRlZHVjZWQgYXQgdXNhZ2UgdGltZSByYXRoZXIgdGhhbiBjbGFzcyB0aW1lLiBVIHNob3VsZCBh
bHdheXMgYmUgVC4KLSAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBVID0gVD4KLSAgICB0eXBlbmFtZSBz
dGQ6OmVuYWJsZV9pZjwhc3RkOjppc19zYW1lPHZvaWQsIFU+Ojp2YWx1ZSwgVD46OnR5cGUmCi0g
ICAgLyogVCYgKi8gYXQodW5zaWduZWQgaW5kZXgsIHVuc2lnbmVkIHNpemUpIGNvbnN0IHsgcmV0
dXJuIGdldChzaXplKVtpbmRleF07IH0KLQotICAgIHZvaWQgcmVjYWdlKHVuc2lnbmVkIG9sZFNp
emUsIHVuc2lnbmVkIG5ld1NpemUpCisgICAgQ2FnZWRQdHImIG9wZXJhdG9yPShUKiYmIHB0cikK
ICAgICB7Ci0gICAgICAgIGF1dG8gcHRyID0gZ2V0KG9sZFNpemUpOwotICAgICAgICBBU1NFUlQo
cHRyID09IGdldFVuc2FmZSgpKTsKLSAgICAgICAgKnRoaXMgPSBDYWdlZFB0cihwdHIsIG5ld1Np
emUpOworICAgICAgICBtX3B0ciA9IFdURk1vdmUocHRyKTsKKyAgICAgICAgcmV0dXJuICp0aGlz
OwogICAgIH0KIAotICAgIENhZ2VkUHRyKENhZ2VkUHRyJiBvdGhlcikKLSAgICAgICAgOiBtX3B0
cihvdGhlci5tX3B0cikKKyAgICBib29sIG9wZXJhdG9yPT0oY29uc3QgQ2FnZWRQdHImIG90aGVy
KSBjb25zdAogICAgIHsKKyAgICAgICAgcmV0dXJuIGdldE1heUJlTnVsbCgpID09IG90aGVyLmdl
dE1heUJlTnVsbCgpOwogICAgIH0KLQotICAgIENhZ2VkUHRyJiBvcGVyYXRvcj0oY29uc3QgQ2Fn
ZWRQdHImIHB0cikKKyAgICAKKyAgICBib29sIG9wZXJhdG9yIT0oY29uc3QgQ2FnZWRQdHImIG90
aGVyKSBjb25zdAogICAgIHsKLSAgICAgICAgbV9wdHIgPSBwdHIubV9wdHI7Ci0gICAgICAgIHJl
dHVybiAqdGhpczsKKyAgICAgICAgcmV0dXJuICEoKnRoaXMgPT0gb3RoZXIpOwogICAgIH0KKyAg
ICAKKyAgICBleHBsaWNpdCBvcGVyYXRvciBib29sKCkgY29uc3QKKyAgICB7CisgICAgICAgIHJl
dHVybiAqdGhpcyAhPSBDYWdlZFB0cigpOworICAgIH0KKyAgICAKKyAgICBUJiBvcGVyYXRvcioo
KSBjb25zdCB7IHJldHVybiAqZ2V0KCk7IH0KKyAgICBUKiBvcGVyYXRvci0+KCkgY29uc3QgeyBy
ZXR1cm4gZ2V0KCk7IH0KKworICAgIHRlbXBsYXRlPHR5cGVuYW1lIEluZGV4VHlwZT4KKyAgICBU
JiBvcGVyYXRvcltdKEluZGV4VHlwZSBpbmRleCkgY29uc3QgeyByZXR1cm4gZ2V0KClbaW5kZXhd
OyB9CisgICAgCitwcm90ZWN0ZWQ6CisgICAgdHlwZW5hbWUgUHRyVHJhaXRzOjpTdG9yYWdlVHlw
ZSBtX3B0cjsKK307CisKK3RlbXBsYXRlPEdpZ2FjYWdlOjpLaW5kIHBhc3NlZEtpbmQsIHR5cGVu
YW1lIFB0clRyYWl0cz4KK2NsYXNzIENhZ2VkUHRyPHBhc3NlZEtpbmQsIHZvaWQsIFB0clRyYWl0
cz4geworcHVibGljOgorICAgIHN0YXRpYyBjb25zdGV4cHIgR2lnYWNhZ2U6OktpbmQga2luZCA9
IHBhc3NlZEtpbmQ7CiAKLSAgICBDYWdlZFB0cihDYWdlZFB0ciYmIG90aGVyKQotICAgICAgICA6
IG1fcHRyKFB0clRyYWl0czo6ZXhjaGFuZ2Uob3RoZXIubV9wdHIsIG51bGxwdHIpKQorICAgIENh
Z2VkUHRyKCkgOiBDYWdlZFB0cihudWxscHRyKSB7IH0KKyAgICBDYWdlZFB0cihzdGQ6Om51bGxw
dHJfdCkgOiBtX3B0cihudWxscHRyKSB7IH0KKworICAgIGV4cGxpY2l0IENhZ2VkUHRyKHZvaWQq
IHB0cikKKyAgICAgICAgOiBtX3B0cihwdHIpCisgICAgeworICAgIH0KKyAgICAKKyAgICB2b2lk
KiBnZXQoKSBjb25zdAorICAgIHsKKyAgICAgICAgQVNTRVJUKG1fcHRyKTsKKyAgICAgICAgcmV0
dXJuIEdpZ2FjYWdlOjpjYWdlZChraW5kLCBQdHJUcmFpdHM6OnVud3JhcChtX3B0cikpOworICAg
IH0KKyAgICAKKyAgICB2b2lkKiBnZXRNYXlCZU51bGwoKSBjb25zdAogICAgIHsKKyAgICAgICAg
aWYgKCFtX3B0cikKKyAgICAgICAgICAgIHJldHVybiBudWxscHRyOworICAgICAgICByZXR1cm4g
Z2V0KCk7CiAgICAgfQogCi0gICAgQ2FnZWRQdHImIG9wZXJhdG9yPShDYWdlZFB0ciYmIHB0cikK
KyAgICBDYWdlZFB0ciYgb3BlcmF0b3I9KHZvaWQqIHB0cikKICAgICB7Ci0gICAgICAgIG1fcHRy
ID0gUHRyVHJhaXRzOjpleGNoYW5nZShwdHIubV9wdHIsIG51bGxwdHIpOworICAgICAgICBtX3B0
ciA9IHB0cjsKICAgICAgICAgcmV0dXJuICp0aGlzOwogICAgIH0KIAogICAgIGJvb2wgb3BlcmF0
b3I9PShjb25zdCBDYWdlZFB0ciYgb3RoZXIpIGNvbnN0CiAgICAgewotICAgICAgICBib29sIHJl
c3VsdCA9IG1fcHRyID09IG90aGVyLm1fcHRyOwotICAgICAgICBBU1NFUlQocmVzdWx0ID09IChn
ZXRVbnNhZmUoKSA9PSBvdGhlci5nZXRVbnNhZmUoKSkpOwotICAgICAgICByZXR1cm4gcmVzdWx0
OworICAgICAgICByZXR1cm4gZ2V0TWF5QmVOdWxsKCkgPT0gb3RoZXIuZ2V0TWF5QmVOdWxsKCk7
CiAgICAgfQogICAgIAogICAgIGJvb2wgb3BlcmF0b3IhPShjb25zdCBDYWdlZFB0ciYgb3RoZXIp
IGNvbnN0CkBAIC0xMjEsNyArMTM3LDcgQEAgcHVibGljOgogICAgIAogICAgIGV4cGxpY2l0IG9w
ZXJhdG9yIGJvb2woKSBjb25zdAogICAgIHsKLSAgICAgICAgcmV0dXJuIGdldFVuc2FmZSgpICE9
IG51bGxwdHI7CisgICAgICAgIHJldHVybiAqdGhpcyAhPSBDYWdlZFB0cigpOwogICAgIH0KICAg
ICAKIHByb3RlY3RlZDoKQEAgLTEzMSw1ICsxNDcsNCBAQCBwcm90ZWN0ZWQ6CiB9IC8vIG5hbWVz
cGFjZSBXVEYKIAogdXNpbmcgV1RGOjpDYWdlZFB0cjsKLXVzaW5nIFdURjo6dGFnQ2FnZWRQdHI7
CiAKSW5kZXg6IFNvdXJjZS9XVEYvd3RmL0NhZ2VkVW5pcXVlUHRyLmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1dURi93dGYvQ2FnZWRVbmlxdWVQdHIuaAkocmV2aXNpb24gMjQ2MjcxKQorKysgU291
cmNlL1dURi93dGYvQ2FnZWRVbmlxdWVQdHIuaAkod29ya2luZyBjb3B5KQpAQCAtMjksMzAgKzI5
LDgwIEBACiAKIG5hbWVzcGFjZSBXVEYgewogCi10ZW1wbGF0ZTxHaWdhY2FnZTo6S2luZCBraW5k
LCB0eXBlbmFtZSBULCBib29sIHNob3VsZFRhZyA9IGZhbHNlPgotY2xhc3MgQ2FnZWRVbmlxdWVQ
dHIgOiBwdWJsaWMgQ2FnZWRQdHI8a2luZCwgVCwgc2hvdWxkVGFnPiB7Ci0gICAgc3RhdGljX2Fz
c2VydChzdGQ6OmlzX3RyaXZpYWxseV9kZXN0cnVjdGlibGU8VD46OnZhbHVlLCAiV2UgZXhwZWN0
IHRoZSBjb250ZW50cyBvZiBhIGNhZ2VkIHBvaW50ZXIgdG8gYmUgdHJpdmlhbGx5IGRlc3RydWN0
YWJsZS4iKTsKK3RlbXBsYXRlPEdpZ2FjYWdlOjpLaW5kIGtpbmQsIHR5cGVuYW1lIFQsIHR5cGVu
YW1lIEVuYWJsZSA9IHZvaWQ+CitjbGFzcyBDYWdlZFVuaXF1ZVB0ciA6IHB1YmxpYyBDYWdlZFB0
cjxraW5kLCBUPiB7CiBwdWJsaWM6Ci0gICAgdXNpbmcgQmFzZSA9IENhZ2VkUHRyPGtpbmQsIFQs
IHNob3VsZFRhZz47Ci0gICAgQ2FnZWRVbmlxdWVQdHIoKSA9IGRlZmF1bHQ7Ci0KLSAgICBDYWdl
ZFVuaXF1ZVB0cihUKiBwdHIsIHVuc2lnbmVkIHNpemUpCi0gICAgICAgIDogQmFzZShwdHIsIHNp
emUpCi0gICAgeyB9CisgICAgQ2FnZWRVbmlxdWVQdHIoVCogcHRyID0gbnVsbHB0cikKKyAgICAg
ICAgOiBDYWdlZFB0cjxraW5kLCBUPihwdHIpCisgICAgeworICAgIH0KKyAgICAKKyAgICBDYWdl
ZFVuaXF1ZVB0cihDYWdlZFVuaXF1ZVB0ciYmIHB0cikKKyAgICAgICAgOiBDYWdlZFB0cjxraW5k
LCBUPihwdHIubV9wdHIpCisgICAgeworICAgICAgICBwdHIubV9wdHIgPSBudWxscHRyOworICAg
IH0KKyAgICAKKyAgICBDYWdlZFVuaXF1ZVB0cihjb25zdCBDYWdlZFVuaXF1ZVB0ciYpID0gZGVs
ZXRlOworICAgIAorICAgIHRlbXBsYXRlPHR5cGVuYW1lLi4uIEFyZ3VtZW50cz4KKyAgICBzdGF0
aWMgQ2FnZWRVbmlxdWVQdHIgY3JlYXRlKEFyZ3VtZW50cyYmLi4uIGFyZ3VtZW50cykKKyAgICB7
CisgICAgICAgIFQqIHJlc3VsdCA9IHN0YXRpY19jYXN0PFQqPihHaWdhY2FnZTo6bWFsbG9jKGtp
bmQsIHNpemVvZihUKSkpOworICAgICAgICBuZXcgKHJlc3VsdCkgVChzdGQ6OmZvcndhcmQ8QXJn
dW1lbnRzPihhcmd1bWVudHMpLi4uKTsKKyAgICAgICAgcmV0dXJuIENhZ2VkVW5pcXVlUHRyKHJl
c3VsdCk7CisgICAgfQorICAgIAorICAgIENhZ2VkVW5pcXVlUHRyJiBvcGVyYXRvcj0oQ2FnZWRV
bmlxdWVQdHImJiBwdHIpCisgICAgeworICAgICAgICBkZXN0cm95KCk7CisgICAgICAgIHRoaXMt
Pm1fcHRyID0gcHRyLm1fcHRyOworICAgICAgICBwdHIubV9wdHIgPSBudWxscHRyOworICAgICAg
ICByZXR1cm4gKnRoaXM7CisgICAgfQorICAgIAorICAgIENhZ2VkVW5pcXVlUHRyJiBvcGVyYXRv
cj0oY29uc3QgQ2FnZWRVbmlxdWVQdHImKSA9IGRlbGV0ZTsKKyAgICAKKyAgICB+Q2FnZWRVbmlx
dWVQdHIoKQorICAgIHsKKyAgICAgICAgZGVzdHJveSgpOworICAgIH0KKyAgICAKK3ByaXZhdGU6
CisgICAgdm9pZCBkZXN0cm95KCkKKyAgICB7CisgICAgICAgIGlmICghdGhpcy0+bV9wdHIpCisg
ICAgICAgICAgICByZXR1cm47CisgICAgICAgIHRoaXMtPm1fcHRyLT5+VCgpOworICAgICAgICBH
aWdhY2FnZTo6ZnJlZShraW5kLCB0aGlzLT5tX3B0cik7CisgICAgfQorfTsKIAordGVtcGxhdGU8
R2lnYWNhZ2U6OktpbmQga2luZCwgdHlwZW5hbWUgVD4KK2NsYXNzIENhZ2VkVW5pcXVlUHRyPGtp
bmQsIFRbXSwgdHlwZW5hbWUgc3RkOjplbmFibGVfaWY8c3RkOjppc190cml2aWFsbHlfZGVzdHJ1
Y3RpYmxlPFQ+Ojp2YWx1ZT46OnR5cGU+IDogcHVibGljIENhZ2VkUHRyPGtpbmQsIFQ+IHsKK3B1
YmxpYzoKKyAgICBDYWdlZFVuaXF1ZVB0cigpIDogQ2FnZWRQdHI8a2luZCwgVD4oKSB7IH0KKyAg
ICAKKyAgICBDYWdlZFVuaXF1ZVB0cihUKiBwdHIpCisgICAgICAgIDogQ2FnZWRQdHI8a2luZCwg
VD4ocHRyKQorICAgIHsKKyAgICB9CisgICAgCiAgICAgQ2FnZWRVbmlxdWVQdHIoQ2FnZWRVbmlx
dWVQdHImJiBwdHIpCi0gICAgICAgIDogQmFzZShzdGQ6OmZvcndhcmQ8Q2FnZWRVbmlxdWVQdHIm
Jj4ocHRyKSkKLSAgICB7IH0KKyAgICAgICAgOiBDYWdlZFB0cjxraW5kLCBUPihwdHIubV9wdHIp
CisgICAgeworICAgICAgICBwdHIubV9wdHIgPSBudWxscHRyOworICAgIH0KICAgICAKICAgICBD
YWdlZFVuaXF1ZVB0cihjb25zdCBDYWdlZFVuaXF1ZVB0ciYpID0gZGVsZXRlOwogICAgIAogICAg
IHRlbXBsYXRlPHR5cGVuYW1lLi4uIEFyZ3VtZW50cz4KLSAgICBzdGF0aWMgQ2FnZWRVbmlxdWVQ
dHIgY3JlYXRlKHVuc2lnbmVkIGxlbmd0aCwgQXJndW1lbnRzJiYuLi4gYXJndW1lbnRzKQorICAg
IHN0YXRpYyBDYWdlZFVuaXF1ZVB0ciBjcmVhdGUoc2l6ZV90IGNvdW50LCBBcmd1bWVudHMmJi4u
LiBhcmd1bWVudHMpCiAgICAgewotICAgICAgICBUKiByZXN1bHQgPSBzdGF0aWNfY2FzdDxUKj4o
R2lnYWNhZ2U6Om1hbGxvYyhraW5kLCBzaXplb2YoVCkgKiBsZW5ndGgpKTsKLSAgICAgICAgd2hp
bGUgKGxlbmd0aC0tKQotICAgICAgICAgICAgbmV3IChyZXN1bHQgKyBsZW5ndGgpIFQoYXJndW1l
bnRzLi4uKTsKLSAgICAgICAgcmV0dXJuIENhZ2VkVW5pcXVlUHRyKHJlc3VsdCwgbGVuZ3RoKTsK
KyAgICAgICAgVCogcmVzdWx0ID0gc3RhdGljX2Nhc3Q8VCo+KEdpZ2FjYWdlOjptYWxsb2NBcnJh
eShraW5kLCBjb3VudCwgc2l6ZW9mKFQpKSk7CisgICAgICAgIHdoaWxlIChjb3VudC0tKQorICAg
ICAgICAgICAgbmV3IChyZXN1bHQgKyBjb3VudCkgVChzdGQ6OmZvcndhcmQ8QXJndW1lbnRzPihh
cmd1bWVudHMpLi4uKTsKKyAgICAgICAgcmV0dXJuIENhZ2VkVW5pcXVlUHRyKHJlc3VsdCk7CiAg
ICAgfQogICAgIAogICAgIENhZ2VkVW5pcXVlUHRyJiBvcGVyYXRvcj0oQ2FnZWRVbmlxdWVQdHIm
JiBwdHIpCkBAIC02OSwxNiArMTE5LDgzIEBAIHB1YmxpYzoKICAgICB7CiAgICAgICAgIGRlc3Ry
b3koKTsKICAgICB9CisgICAgCitwcml2YXRlOgorICAgIHZvaWQgZGVzdHJveSgpCisgICAgewor
ICAgICAgICBpZiAoIXRoaXMtPm1fcHRyKQorICAgICAgICAgICAgcmV0dXJuOworICAgICAgICBH
aWdhY2FnZTo6ZnJlZShraW5kLCB0aGlzLT5tX3B0cik7CisgICAgfQorfTsKIAordGVtcGxhdGU8
R2lnYWNhZ2U6OktpbmQga2luZCwgdHlwZW5hbWUgVD4KK2NsYXNzIENhZ2VkVW5pcXVlUHRyPGtp
bmQsIFRbXSwgdHlwZW5hbWUgc3RkOjplbmFibGVfaWY8IXN0ZDo6aXNfdHJpdmlhbGx5X2Rlc3Ry
dWN0aWJsZTxUPjo6dmFsdWU+Ojp0eXBlPiA6IHB1YmxpYyBDYWdlZFB0cjxraW5kLCBUPiB7Citw
dWJsaWM6CisgICAgQ2FnZWRVbmlxdWVQdHIoKSA6IENhZ2VkUHRyPGtpbmQsIFQ+KCkgeyB9Cisg
ICAgCisgICAgQ2FnZWRVbmlxdWVQdHIoVCogcHRyLCBzaXplX3QgY291bnQpCisgICAgICAgIDog
Q2FnZWRQdHI8a2luZCwgVD4ocHRyKQorICAgICAgICAsIG1fY291bnQoY291bnQpCisgICAgewor
ICAgIH0KKyAgICAKKyAgICBDYWdlZFVuaXF1ZVB0cihDYWdlZFVuaXF1ZVB0ciYmIHB0cikKKyAg
ICAgICAgOiBDYWdlZFB0cjxraW5kLCBUPihwdHIubV9wdHIpCisgICAgICAgICwgbV9jb3VudChw
dHIubV9jb3VudCkKKyAgICB7CisgICAgICAgIHB0ci5jbGVhcigpOworICAgIH0KKyAgICAKKyAg
ICBDYWdlZFVuaXF1ZVB0cihjb25zdCBDYWdlZFVuaXF1ZVB0ciYpID0gZGVsZXRlOworICAgIAor
ICAgIHRlbXBsYXRlPHR5cGVuYW1lLi4uIEFyZ3VtZW50cz4KKyAgICBzdGF0aWMgQ2FnZWRVbmlx
dWVQdHIgY3JlYXRlKHNpemVfdCBjb3VudCwgQXJndW1lbnRzJiYuLi4gYXJndW1lbnRzKQorICAg
IHsKKyAgICAgICAgVCogcmVzdWx0ID0gc3RhdGljX2Nhc3Q8VCo+KEdpZ2FjYWdlOjptYWxsb2NB
cnJheShraW5kLCBjb3VudCwgc2l6ZW9mKFQpKSk7CisgICAgICAgIHdoaWxlIChjb3VudC0tKQor
ICAgICAgICAgICAgbmV3IChyZXN1bHQgKyBjb3VudCkgVChzdGQ6OmZvcndhcmQ8QXJndW1lbnRz
Pihhcmd1bWVudHMpLi4uKTsKKyAgICAgICAgcmV0dXJuIENhZ2VkVW5pcXVlUHRyKHJlc3VsdCwg
Y291bnQpOworICAgIH0KKyAgICAKKyAgICBDYWdlZFVuaXF1ZVB0ciYgb3BlcmF0b3I9KENhZ2Vk
VW5pcXVlUHRyJiYgcHRyKQorICAgIHsKKyAgICAgICAgZGVzdHJveSgpOworICAgICAgICB0aGlz
LT5tX3B0ciA9IHB0ci5tX3B0cjsKKyAgICAgICAgbV9jb3VudCA9IHB0ci5tX2NvdW50OworICAg
ICAgICBwdHIuY2xlYXIoKTsKKyAgICAgICAgcmV0dXJuICp0aGlzOworICAgIH0KKyAgICAKKyAg
ICBDYWdlZFVuaXF1ZVB0ciYgb3BlcmF0b3I9KGNvbnN0IENhZ2VkVW5pcXVlUHRyJikgPSBkZWxl
dGU7CisgICAgCisgICAgfkNhZ2VkVW5pcXVlUHRyKCkKKyAgICB7CisgICAgICAgIGRlc3Ryb3ko
KTsKKyAgICB9CisgICAgCisgICAgLy8gRklYTUU6IEl0J3Mgd2VpcmQgdGhhdCB3ZSBpbmhlcml0
IENhZ2VkUHRyOjpvcGVyYXRvcj09IGFuZCBmcmllbmRzLCB3aGljaCBkb24ndCBkbyBhbnl0aGlu
ZworICAgIC8vIGFib3V0IG1fY291bnQuIEl0ICJ3b3JrcyIgYmVjYXVzZSBwb2ludGVyIGVxdWFs
aXR5IGlzIGVub3VnaCBzbyBsb25nIGFzIGV2ZXJ5dGhpbmcgaXMgc2FuZSwgYnV0CisgICAgLy8g
aXQgc2VlbXMgbGlrZSBhIG1pc3NlZCBvcHBvcnR1bml0eSB0byBhc3NlcnQgdGhpbmdzLgorICAg
IC8vIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNzU1NDEKKyAgICAK
IHByaXZhdGU6CiAgICAgdm9pZCBkZXN0cm95KCkKICAgICB7Ci0gICAgICAgIFQqIHB0ciA9IEJh
c2U6OmdldFVuc2FmZSgpOwotICAgICAgICBpZiAoIXB0cikKKyAgICAgICAgaWYgKCF0aGlzLT5t
X3B0cikKICAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgcHRyLT5+VCgpOwotICAgICAgICBH
aWdhY2FnZTo6ZnJlZShraW5kLCBwdHIpOworICAgICAgICB3aGlsZSAobV9jb3VudC0tKQorICAg
ICAgICAgICAgdGhpcy0+bV9wdHJbbV9jb3VudF0uflQoKTsKKyAgICAgICAgR2lnYWNhZ2U6OmZy
ZWUoa2luZCwgdGhpcy0+bV9wdHIpOwogICAgIH0KKyAgICAKKyAgICB2b2lkIGNsZWFyKCkKKyAg
ICB7CisgICAgICAgIHRoaXMtPm1fcHRyID0gbnVsbHB0cjsKKyAgICAgICAgbV9jb3VudCA9IDA7
CisgICAgfQorICAgIAorICAgIHNpemVfdCBtX2NvdW50IHsgMCB9OwogfTsKIAogfSAvLyBuYW1l
c3BhY2UgV1RGCkluZGV4OiBTb3VyY2UvV1RGL3d0Zi9HaWdhY2FnZS5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9XVEYvd3RmL0dpZ2FjYWdlLmgJKHJldmlzaW9uIDI0NjI3MSkKKysrIFNvdXJjZS9X
VEYvd3RmL0dpZ2FjYWdlLmgJKHdvcmtpbmcgY29weSkKQEAgLTExNCw4ICsxMTQsNiBAQCBBTFdB
WVNfSU5MSU5FIHNpemVfdCBtYXNrKEtpbmQpIHsgcmV0dXJuCiAKIHRlbXBsYXRlPHR5cGVuYW1l
IFQ+CiBpbmxpbmUgVCogY2FnZWQoS2luZCwgVCogcHRyKSB7IHJldHVybiBwdHI7IH0KLXRlbXBs
YXRlPHR5cGVuYW1lIFQ+Ci1pbmxpbmUgVCogY2FnZWRNYXlCZU51bGwoS2luZCwgVCogcHRyKSB7
IHJldHVybiBwdHI7IH0KIAogaW5saW5lIGJvb2wgaXNDYWdlZChLaW5kLCBjb25zdCB2b2lkKikg
eyByZXR1cm4gZmFsc2U7IH0KIApJbmRleDogU291cmNlL1dURi93dGYvUHRyVGFnLmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1dURi93dGYvUHRyVGFnLmgJKHJldmlzaW9uIDI0NjI3MSkKKysrIFNv
dXJjZS9XVEYvd3RmL1B0clRhZy5oCSh3b3JraW5nIGNvcHkpCkBAIC0xMjIsMzggKzEyMiw2IEBA
IGNvbnN0ZXhwciBib29sIGVuYWJsZVB0clRhZ0RlYnVnQXNzZXJ0ID0KICAgICB9IHdoaWxlIChm
YWxzZSkKIAogCi10ZW1wbGF0ZTx0eXBlbmFtZSBUPgotaW5saW5lIFQqIHRhZ0FycmF5UHRyKHN0
ZDo6bnVsbHB0cl90IHB0ciwgc2l6ZV90IGxlbmd0aCkKLXsKLSAgICBBU1NFUlQoIWxlbmd0aCk7
Ci0gICAgcmV0dXJuIHB0cmF1dGhfc2lnbl91bmF1dGhlbnRpY2F0ZWQoc3RhdGljX2Nhc3Q8VCo+
KHB0ciksIHB0cmF1dGhfa2V5X3Byb2Nlc3NfZGVwZW5kZW50X2RhdGEsIGxlbmd0aCk7Ci19Ci0K
LQotdGVtcGxhdGU8dHlwZW5hbWUgVD4KLWlubGluZSBUKiB0YWdBcnJheVB0cihUKiBwdHIsIHNp
emVfdCBsZW5ndGgpCi17Ci0gICAgcmV0dXJuIHB0cmF1dGhfc2lnbl91bmF1dGhlbnRpY2F0ZWQo
cHRyLCBwdHJhdXRoX2tleV9wcm9jZXNzX2RlcGVuZGVudF9kYXRhLCBsZW5ndGgpOwotfQotCi10
ZW1wbGF0ZTx0eXBlbmFtZSBUPgotaW5saW5lIFQqIHVudGFnQXJyYXlQdHIoVCogcHRyLCBzaXpl
X3QgbGVuZ3RoKQotewotICAgIHJldHVybiBwdHJhdXRoX2F1dGhfZGF0YShwdHIsIHB0cmF1dGhf
a2V5X3Byb2Nlc3NfZGVwZW5kZW50X2RhdGEsIGxlbmd0aCk7Ci19Ci0KLXRlbXBsYXRlPHR5cGVu
YW1lIFQ+Ci1pbmxpbmUgVCogcmVtb3ZlQXJyYXlQdHJUYWcoVCogcHRyKQotewotICAgIHJldHVy
biBwdHJhdXRoX3N0cmlwKHB0ciwgcHRyYXV0aF9rZXlfcHJvY2Vzc19kZXBlbmRlbnRfZGF0YSk7
Ci19Ci0KLXRlbXBsYXRlPHR5cGVuYW1lIFQ+Ci1pbmxpbmUgVCogcmV0YWdBcnJheVB0cihUKiBw
dHIsIHNpemVfdCBvbGRMZW5ndGgsIHNpemVfdCBuZXdMZW5ndGgpCi17Ci0gICAgcmV0dXJuIHB0
cmF1dGhfYXV0aF9hbmRfcmVzaWduKHB0ciwgcHRyYXV0aF9rZXlfcHJvY2Vzc19kZXBlbmRlbnRf
ZGF0YSwgb2xkTGVuZ3RoLCBwdHJhdXRoX2tleV9wcm9jZXNzX2RlcGVuZGVudF9kYXRhLCBuZXdM
ZW5ndGgpOwotfQotCiB0ZW1wbGF0ZTx0eXBlbmFtZSBULCB0eXBlbmFtZSBQdHJUeXBlLCB0eXBl
bmFtZSA9IHN0ZDo6ZW5hYmxlX2lmX3Q8c3RkOjppc19wb2ludGVyPFB0clR5cGU+Ojp2YWx1ZSAm
JiAhc3RkOjppc19zYW1lPFQsIFB0clR5cGU+Ojp2YWx1ZT4+CiBpbmxpbmUgY29uc3RleHByIFQg
cmVtb3ZlQ29kZVB0clRhZyhQdHJUeXBlIHB0cikKIHsKQEAgLTQyNywzOCArMzk1LDYgQEAgaW5s
aW5lIGJvb2wgdXNlc1BvaW50ZXJUYWdnaW5nKCkgeyByZXR1cgogaW5saW5lIHZvaWQgcmVnaXN0
ZXJQdHJUYWdMb29rdXAoUHRyVGFnTG9va3VwKikgeyB9CiBpbmxpbmUgdm9pZCByZXBvcnRCYWRU
YWcoY29uc3Qgdm9pZCosIFB0clRhZykgeyB9CiAKLXRlbXBsYXRlPHR5cGVuYW1lIFQ+Ci1pbmxp
bmUgVCogdGFnQXJyYXlQdHIoc3RkOjpudWxscHRyX3QsIHNpemVfdCBzaXplKQotewotICAgIEFT
U0VSVF9VTlVTRUQoc2l6ZSwgIXNpemUpOwotICAgIHJldHVybiBudWxscHRyOwotfQotCi10ZW1w
bGF0ZTx0eXBlbmFtZSBUPgotaW5saW5lIFQqIHRhZ0FycmF5UHRyKFQqIHB0ciwgc2l6ZV90KQot
ewotICAgIHJldHVybiBwdHI7Ci19Ci0KLXRlbXBsYXRlPHR5cGVuYW1lIFQ+Ci1pbmxpbmUgVCog
dW50YWdBcnJheVB0cihUKiBwdHIsIHNpemVfdCkKLXsKLSAgICByZXR1cm4gcHRyOwotfQotCi10
ZW1wbGF0ZTx0eXBlbmFtZSBUPgotaW5saW5lIFQqIHJlbW92ZUFycmF5UHRyVGFnKFQqIHB0cikK
LXsKLSAgICByZXR1cm4gcHRyOwotfQotCi10ZW1wbGF0ZTx0eXBlbmFtZSBUPgotaW5saW5lIFQq
IHJldGFnQXJyYXlQdHIoVCogcHRyLCBzaXplX3QsIHNpemVfdCkKLXsKLSAgICByZXR1cm4gcHRy
OwotfQotCi0KIHRlbXBsYXRlPHR5cGVuYW1lIFQsIHR5cGVuYW1lIFB0clR5cGUsIHR5cGVuYW1l
ID0gc3RkOjplbmFibGVfaWZfdDxzdGQ6OmlzX3BvaW50ZXI8UHRyVHlwZT46OnZhbHVlICYmICFz
dGQ6OmlzX3NhbWU8VCwgUHRyVHlwZT46OnZhbHVlPj4KIGNvbnN0ZXhwciBUIHRhZ0NvZGVQdHIo
UHRyVHlwZSBwdHIsIFB0clRhZykgeyByZXR1cm4gYml0d2lzZV9jYXN0PFQ+KHB0cik7IH0KIApA
QCAtNTU4LDExICs0OTQsNiBAQCB1c2luZyBXVEY6OlB0clRhZzsKIAogdXNpbmcgV1RGOjpyZXBv
cnRCYWRUYWc7CiAKLXVzaW5nIFdURjo6dGFnQXJyYXlQdHI7Ci11c2luZyBXVEY6OnVudGFnQXJy
YXlQdHI7Ci11c2luZyBXVEY6OnJldGFnQXJyYXlQdHI7Ci11c2luZyBXVEY6OnJlbW92ZUFycmF5
UHRyVGFnOwotCiB1c2luZyBXVEY6OnRhZ0NvZGVQdHI7CiB1c2luZyBXVEY6OnVudGFnQ29kZVB0
cjsKIHVzaW5nIFdURjo6cmV0YWdDb2RlUHRyOwpJbmRleDogU291cmNlL1dURi93dGYvVGFnZ2Vk
QXJyYXlTdG9yYWdlUHRyLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dURi93dGYvVGFnZ2VkQXJy
YXlTdG9yYWdlUHRyLmgJKHJldmlzaW9uIDI0NjI3MSkKKysrIFNvdXJjZS9XVEYvd3RmL1RhZ2dl
ZEFycmF5U3RvcmFnZVB0ci5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDU5ICswLDAgQEAKLS8qCi0g
KiBDb3B5cmlnaHQgKEMpIDIwMTkgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoK
LSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdp
dGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRo
YXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmli
dXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJv
ZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVu
dGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0
aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFT
IElTJycgQU5EIEFOWQotICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKLSAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJD
SEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUg
RElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKLSAqIENPTlRSSUJV
VE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVD
SUFMLAotICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLAotICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBP
UiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCi0gKiBQUk9GSVRTOyBPUiBCVVNJTkVT
UyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCi0gKiBPRiBM
SUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQK
LSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdB
WSBPVVQgT0YgVEhFIFVTRQotICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9G
IFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0jcHJhZ21hIG9uY2UKLQot
I2luY2x1ZGUgPHd0Zi9QdHJUYWcuaD4KLQotbmFtZXNwYWNlIFdURiB7Ci0KLXRlbXBsYXRlPHR5
cGVuYW1lIFB0clR5cGU+Ci1jbGFzcyBUYWdnZWRBcnJheVN0b3JhZ2VQdHIgewotcHVibGljOgot
ICAgIFRhZ2dlZEFycmF5U3RvcmFnZVB0cigpCi0gICAgICAgIDogbV9wdHIodGFnQXJyYXlQdHI8
UHRyVHlwZT4obnVsbHB0ciwgMCkpCi0gICAgeyB9Ci0KLSAgICBUYWdnZWRBcnJheVN0b3JhZ2VQ
dHIoUHRyVHlwZSogcHRyLCB1bnNpZ25lZCBsZW5ndGgpCi0gICAgICAgIDogbV9wdHIodGFnQXJy
YXlQdHIocHRyLCBsZW5ndGgpKQotICAgIHsgfQotCi0gICAgUHRyVHlwZSogZ2V0KHVuc2lnbmVk
IGxlbmd0aCkgY29uc3QgeyByZXR1cm4gdW50YWdBcnJheVB0cihtX3B0ciwgbGVuZ3RoKTsgfSAK
LSAgICBQdHJUeXBlKiBnZXRVbnNhZmUoKSBjb25zdCB7IHJldHVybiByZW1vdmVBcnJheVB0clRh
ZyhtX3B0cik7IH0KLQotICAgIHZvaWQgcmVzaXplKHVuc2lnbmVkIG9sZExlbmd0aCwgdW5zaWdu
ZWQgbmV3TGVuZ3RoKQotICAgIHsKLSAgICAgICAgbV9wdHIgPSByZXRhZ0FycmF5UHRyKG1fcHRy
LCBvbGRMZW5ndGgsIG5ld0xlbmd0aCk7Ci0gICAgfQotICAgIAotICAgIGV4cGxpY2l0IG9wZXJh
dG9yIGJvb2woKSBjb25zdCB7IHJldHVybiAhIWdldFVuc2FmZSgpOyB9Ci0KLXByaXZhdGU6Ci0g
ICAgUHRyVHlwZSogbV9wdHI7Ci19OwotCi19Ci0KLXVzaW5nIFdURjo6VGFnZ2VkQXJyYXlTdG9y
YWdlUHRyOwpJbmRleDogU291cmNlL2JtYWxsb2MvYm1hbGxvYy9HaWdhY2FnZS5oCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9ibWFsbG9jL2JtYWxsb2MvR2lnYWNhZ2UuaAkocmV2aXNpb24gMjQ2Mjcx
KQorKysgU291cmNlL2JtYWxsb2MvYm1hbGxvYy9HaWdhY2FnZS5oCSh3b3JraW5nIGNvcHkpCkBA
IC0zNCw3ICszNCw4IEBACiAjaW5jbHVkZSA8Y3N0ZGRlZj4KICNpbmNsdWRlIDxpbnR0eXBlcy5o
PgogCi0jaWYgKChCT1MoREFSV0lOKSB8fCBCT1MoTElOVVgpKSAmJiBCQ1BVKFg4Nl82NCkpCisj
aWYgKChCT1MoREFSV0lOKSB8fCBCT1MoTElOVVgpKSAmJiBcCisoQkNQVShYODZfNjQpIHx8IChC
Q1BVKEFSTTY0KSAmJiAhZGVmaW5lZChfX0lMUDMyX18pICYmICghQlBMQVRGT1JNKElPU19GQU1J
TFkpIHx8IEJQTEFURk9STShJT1MpKSkpKQogI2RlZmluZSBHSUdBQ0FHRV9FTkFCTEVEIDEKICNl
bHNlCiAjZGVmaW5lIEdJR0FDQUdFX0VOQUJMRUQgMApAQCAtMTk5LDE0ICsyMDAsNiBAQCBCSU5M
SU5FIFQqIGNhZ2VkKEtpbmQga2luZCwgVCogcHRyKQogICAgICAgICAgICAgcmVpbnRlcnByZXRf
Y2FzdDx1aW50cHRyX3Q+KHB0cikgJiBtYXNrKGtpbmQpKSk7CiB9CiAKLXRlbXBsYXRlPHR5cGVu
YW1lIFQ+Ci1CSU5MSU5FIFQqIGNhZ2VkTWF5QmVOdWxsKEtpbmQga2luZCwgVCogcHRyKQotewot
ICAgIGlmICghcHRyKQotICAgICAgICByZXR1cm4gcHRyOwotICAgIHJldHVybiBjYWdlZChraW5k
LCBwdHIpOwotfQotCiBCSU5MSU5FIGJvb2wgaXNDYWdlZChLaW5kIGtpbmQsIGNvbnN0IHZvaWQq
IHB0cikKIHsKICAgICByZXR1cm4gY2FnZWQoa2luZCwgcHRyKSA9PSBwdHI7CkBAIC0yMjYsOSAr
MjE5LDggQEAgQklOTElORSBzaXplX3Qgc2l6ZShLaW5kKSB7IEJDUkFTSCgpOyByZQogQklOTElO
RSB2b2lkIGVuc3VyZUdpZ2FjYWdlKCkgeyB9CiBCSU5MSU5FIGJvb2wgd2FzRW5hYmxlZCgpIHsg
cmV0dXJuIGZhbHNlOyB9CiBCSU5MSU5FIGJvb2wgaXNDYWdlZChLaW5kLCBjb25zdCB2b2lkKikg
eyByZXR1cm4gdHJ1ZTsgfQotQklOTElORSBib29sIGlzRW5hYmxlZChLaW5kKSB7IHJldHVybiBm
YWxzZTsgfQorQklOTElORSBib29sIGlzRW5hYmxlZCgpIHsgcmV0dXJuIGZhbHNlOyB9CiB0ZW1w
bGF0ZTx0eXBlbmFtZSBUPiBCSU5MSU5FIFQqIGNhZ2VkKEtpbmQsIFQqIHB0cikgeyByZXR1cm4g
cHRyOyB9Ci10ZW1wbGF0ZTx0eXBlbmFtZSBUPiBCSU5MSU5FIFQqIGNhZ2VkTWF5QmVOdWxsKEtp
bmQsIFQqIHB0cikgeyByZXR1cm4gcHRyOyB9CiBCSU5MSU5FIHZvaWQgZGlzYWJsZURpc2FibGlu
Z1ByaW1pdGl2ZUdpZ2FjYWdlSWZTaG91bGRCZUVuYWJsZWQoKSB7IH0KIEJJTkxJTkUgYm9vbCBj
YW5QcmltaXRpdmVHaWdhY2FnZUJlRGlzYWJsZWQoKSB7IHJldHVybiBmYWxzZTsgfQogQklOTElO
RSB2b2lkIGRpc2FibGVQcmltaXRpdmVHaWdhY2FnZSgpIHsgfQo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>371790</attachid>
            <date>2019-06-10 16:20:29 -0700</date>
            <delta_ts>2019-06-11 08:53:21 -0700</delta_ts>
            <desc>patch</desc>
            <filename>a-backup.diff</filename>
            <type>text/plain</type>
            <size>124289</size>
            <attacher name="Saam Barati">saam</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMjQ2MjcxKQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDE3NyBA
QAorMjAxOS0wNi0xMCAgU2FhbSBCYXJhdGkgIDxzYmFyYXRpQGFwcGxlLmNvbT4KKworICAgICAg
ICBSb2xsIG91dCBQQUMgY2FnZQorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93
X2J1Zy5jZ2k/aWQ9MTk4NzI2CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISku
CisKKyAgICAgICAgVGhpcyBwYXRjaCByb2xscyBvdXQ6IHIyNDUwNjQsIHIyNDUxNDUsIHIyNDUx
NjgsIHIyNDUzMTMsIHIyNDU0MzIsIHIyNDU2MjIuCisgICAgICAgIAorICAgICAgICBUaGUgcmVz
dWx0aW5nIHN0YXRlIHdlJ3JlIGluIGlzIHdlIGhhdmUgR2lnYWNhZ2UgZW5hYmxlZCBvbiBhcm02
NC4KKyAgICAgICAgVGhlcmUgaXMgbm8gbW9yZSBQQUMgY2FnaW5nLgorCisgICAgICAgIFdlJ3Jl
IGRvaW5nIHRoaXMgYmVjYXVzZSB0aGVyZSBhcmUgcGVyZm9ybWFuY2UgaXNzdWVzIHdpdGggUEFD
IGNhZ2luZworICAgICAgICB0aGF0IHdlIGhhdmVuJ3QgcmVzb2x2ZWQgeWV0LgorCQorICAgICAg
ICAqIGFzc2VtYmxlci9DUFUuaDoKKyAgICAgICAgKEpTQzo6aXNBUk02NEUpOiBEZWxldGVkLgor
ICAgICAgICAqIGFzc2VtYmxlci9NYWNyb0Fzc2VtYmxlckFSTTY0RS5oOgorICAgICAgICAoSlND
OjpNYWNyb0Fzc2VtYmxlckFSTTY0RTo6dGFnQXJyYXlQdHIpOiBEZWxldGVkLgorICAgICAgICAo
SlNDOjpNYWNyb0Fzc2VtYmxlckFSTTY0RTo6dW50YWdBcnJheVB0cik6IERlbGV0ZWQuCisgICAg
ICAgIChKU0M6Ok1hY3JvQXNzZW1ibGVyQVJNNjRFOjpyZW1vdmVBcnJheVB0clRhZyk6IERlbGV0
ZWQuCisgICAgICAgICogYjMvQjNMb3dlclRvQWlyLmNwcDoKKyAgICAgICAgKiBiMy9CM1BhdGNo
cG9pbnRTcGVjaWFsLmNwcDoKKyAgICAgICAgKEpTQzo6QjM6OlBhdGNocG9pbnRTcGVjaWFsOjph
ZG1pdHNTdGFjayk6CisgICAgICAgICogYjMvQjNTdGFja21hcFNwZWNpYWwuY3BwOgorICAgICAg
ICAoSlNDOjpCMzo6U3RhY2ttYXBTcGVjaWFsOjpmb3JFYWNoQXJnSW1wbCk6CisgICAgICAgIChK
U0M6OkIzOjpTdGFja21hcFNwZWNpYWw6OmlzQXJnVmFsaWRGb3JSZXApOgorICAgICAgICAqIGIz
L0IzVmFsaWRhdGUuY3BwOgorICAgICAgICAqIGIzL0IzVmFsdWVSZXAuY3BwOgorICAgICAgICAo
SlNDOjpCMzo6VmFsdWVSZXA6OmFkZFVzZWRSZWdpc3RlcnNUbyBjb25zdCk6CisgICAgICAgIChK
U0M6OkIzOjpWYWx1ZVJlcDo6ZHVtcCBjb25zdCk6CisgICAgICAgIChXVEY6OnByaW50SW50ZXJu
YWwpOgorICAgICAgICAqIGIzL0IzVmFsdWVSZXAuaDoKKyAgICAgICAgKEpTQzo6QjM6OlZhbHVl
UmVwOjpWYWx1ZVJlcCk6CisgICAgICAgIChKU0M6OkIzOjpWYWx1ZVJlcDo6aXNSZWcgY29uc3Qp
OgorICAgICAgICAqIGRmZy9ERkdPcGVyYXRpb25zLmNwcDoKKyAgICAgICAgKEpTQzo6REZHOjpu
ZXdUeXBlZEFycmF5V2l0aFNpemUpOgorICAgICAgICAqIGRmZy9ERkdTcGVjdWxhdGl2ZUpJVC5j
cHA6CisgICAgICAgIChKU0M6OkRGRzo6U3BlY3VsYXRpdmVKSVQ6Omp1bXBGb3JUeXBlZEFycmF5
SXNOZXV0ZXJlZElmT3V0T2ZCb3VuZHMpOgorICAgICAgICAoSlNDOjpERkc6OlNwZWN1bGF0aXZl
SklUOjpjYWdlVHlwZWRBcnJheVN0b3JhZ2UpOgorICAgICAgICAoSlNDOjpERkc6OlNwZWN1bGF0
aXZlSklUOjpjb21waWxlR2V0SW5kZXhlZFByb3BlcnR5U3RvcmFnZSk6CisgICAgICAgIChKU0M6
OkRGRzo6U3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVHZXRUeXBlZEFycmF5Qnl0ZU9mZnNldCk6Cisg
ICAgICAgIChKU0M6OkRGRzo6U3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVOZXdUeXBlZEFycmF5V2l0
aFNpemUpOgorICAgICAgICAqIGRmZy9ERkdTcGVjdWxhdGl2ZUpJVC5oOgorICAgICAgICAqIGRm
Zy9ERkdTcGVjdWxhdGl2ZUpJVDY0LmNwcDoKKyAgICAgICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2
ZUpJVDo6Y29tcGlsZSk6CisgICAgICAgICogZnRsL0ZUTExvd2VyREZHVG9CMy5jcHA6CisgICAg
ICAgIChKU0M6OkZUTDo6REZHOjpMb3dlckRGR1RvQjM6OmNvbXBpbGVHZXRJbmRleGVkUHJvcGVy
dHlTdG9yYWdlKToKKyAgICAgICAgKEpTQzo6RlRMOjpERkc6Okxvd2VyREZHVG9CMzo6Y29tcGls
ZUdldFR5cGVkQXJyYXlCeXRlT2Zmc2V0KToKKyAgICAgICAgKEpTQzo6RlRMOjpERkc6Okxvd2Vy
REZHVG9CMzo6Y29tcGlsZU5ld1R5cGVkQXJyYXkpOgorICAgICAgICAoSlNDOjpGVEw6OkRGRzo6
TG93ZXJERkdUb0IzOjpjb21waWxlRGF0YVZpZXdHZXQpOgorICAgICAgICAoSlNDOjpGVEw6OkRG
Rzo6TG93ZXJERkdUb0IzOjpjb21waWxlRGF0YVZpZXdTZXQpOgorICAgICAgICAoSlNDOjpGVEw6
OkRGRzo6TG93ZXJERkdUb0IzOjpjYWdlZCk6CisgICAgICAgIChKU0M6OkZUTDo6REZHOjpMb3dl
ckRGR1RvQjM6OnNwZWN1bGF0ZVR5cGVkQXJyYXlJc05vdE5ldXRlcmVkKToKKyAgICAgICAgKEpT
Qzo6RlRMOjpERkc6Okxvd2VyREZHVG9CMzo6dW50YWdBcnJheVB0cik6IERlbGV0ZWQuCisgICAg
ICAgIChKU0M6OkZUTDo6REZHOjpMb3dlckRGR1RvQjM6OnJlbW92ZUFycmF5UHRyVGFnKTogRGVs
ZXRlZC4KKyAgICAgICAgKiBoZWFwL0NvbnNlcnZhdGl2ZVJvb3RzLmNwcDoKKyAgICAgICAgKEpT
Qzo6Q29uc2VydmF0aXZlUm9vdHM6OmdlbmVyaWNBZGRQb2ludGVyKToKKyAgICAgICAgKiBqaXQv
QXNzZW1ibHlIZWxwZXJzLmg6CisgICAgICAgIChKU0M6OkFzc2VtYmx5SGVscGVyczo6Y2FnZUNv
bmRpdGlvbmFsbHkpOgorICAgICAgICAqIGppdC9JbnRyaW5zaWNFbWl0dGVyLmNwcDoKKyAgICAg
ICAgKEpTQzo6SW50cmluc2ljR2V0dGVyQWNjZXNzQ2FzZTo6ZW1pdEludHJpbnNpY0dldHRlcik6
CisgICAgICAgICogaml0L0pJVFByb3BlcnR5QWNjZXNzLmNwcDoKKyAgICAgICAgKEpTQzo6SklU
OjplbWl0RGlyZWN0QXJndW1lbnRzR2V0QnlWYWwpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRJ
bnRUeXBlZEFycmF5R2V0QnlWYWwpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRGbG9hdFR5cGVk
QXJyYXlHZXRCeVZhbCk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdEludFR5cGVkQXJyYXlQdXRC
eVZhbCk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdEZsb2F0VHlwZWRBcnJheVB1dEJ5VmFsKToK
KyAgICAgICAgKiBqaXQvUG9seW1vcnBoaWNDYWxsU3R1YlJvdXRpbmUuY3BwOgorICAgICAgICAo
SlNDOjpQb2x5bW9ycGhpY0NhbGxOb2RlOjpjbGVhckNhbGxMaW5rSW5mbyk6CisgICAgICAgICog
aml0L1JlZ2lzdGVyU2V0Lmg6CisgICAgICAgICogbGxpbnQvTG93TGV2ZWxJbnRlcnByZXRlcjY0
LmFzbToKKyAgICAgICAgKiBydW50aW1lL0FycmF5QnVmZmVyLmNwcDoKKyAgICAgICAgKEpTQzo6
U2hhcmVkQXJyYXlCdWZmZXJDb250ZW50czo6U2hhcmVkQXJyYXlCdWZmZXJDb250ZW50cyk6Cisg
ICAgICAgIChKU0M6OlNoYXJlZEFycmF5QnVmZmVyQ29udGVudHM6On5TaGFyZWRBcnJheUJ1ZmZl
ckNvbnRlbnRzKToKKyAgICAgICAgKEpTQzo6QXJyYXlCdWZmZXJDb250ZW50czo6QXJyYXlCdWZm
ZXJDb250ZW50cyk6CisgICAgICAgIChKU0M6OkFycmF5QnVmZmVyQ29udGVudHM6OmRlc3Ryb3kp
OgorICAgICAgICAoSlNDOjpBcnJheUJ1ZmZlckNvbnRlbnRzOjp0cnlBbGxvY2F0ZSk6CisgICAg
ICAgIChKU0M6OkFycmF5QnVmZmVyQ29udGVudHM6Om1ha2VTaGFyZWQpOgorICAgICAgICAoSlND
OjpBcnJheUJ1ZmZlckNvbnRlbnRzOjpjb3B5VG8pOgorICAgICAgICAqIHJ1bnRpbWUvQXJyYXlC
dWZmZXIuaDoKKyAgICAgICAgKEpTQzo6U2hhcmVkQXJyYXlCdWZmZXJDb250ZW50czo6ZGF0YSBj
b25zdCk6CisgICAgICAgIChKU0M6OkFycmF5QnVmZmVyQ29udGVudHM6OmRhdGEgY29uc3QpOgor
ICAgICAgICAoSlNDOjpBcnJheUJ1ZmZlcjo6ZGF0YSk6CisgICAgICAgIChKU0M6OkFycmF5QnVm
ZmVyOjpkYXRhIGNvbnN0KToKKyAgICAgICAgKEpTQzo6QXJyYXlCdWZmZXI6OmJ5dGVMZW5ndGgg
Y29uc3QpOgorICAgICAgICAqIHJ1bnRpbWUvQXJyYXlCdWZmZXJWaWV3LmNwcDoKKyAgICAgICAg
KEpTQzo6QXJyYXlCdWZmZXJWaWV3OjpBcnJheUJ1ZmZlclZpZXcpOgorICAgICAgICAqIHJ1bnRp
bWUvQXJyYXlCdWZmZXJWaWV3Lmg6CisgICAgICAgIChKU0M6OkFycmF5QnVmZmVyVmlldzo6YmFz
ZUFkZHJlc3MgY29uc3QpOgorICAgICAgICAoSlNDOjpBcnJheUJ1ZmZlclZpZXc6OnNldFJhbmdl
SW1wbCk6CisgICAgICAgIChKU0M6OkFycmF5QnVmZmVyVmlldzo6Z2V0UmFuZ2VJbXBsKToKKyAg
ICAgICAgKEpTQzo6QXJyYXlCdWZmZXJWaWV3OjpieXRlTGVuZ3RoIGNvbnN0KTogRGVsZXRlZC4K
KyAgICAgICAgKiBydW50aW1lL0NhY2hlZFR5cGVzLmNwcDoKKyAgICAgICAgKEpTQzo6Q2FjaGVk
U2NvcGVkQXJndW1lbnRzVGFibGU6OmVuY29kZSk6CisgICAgICAgIChKU0M6OkNhY2hlZFNjb3Bl
ZEFyZ3VtZW50c1RhYmxlOjpkZWNvZGUgY29uc3QpOgorICAgICAgICAqIHJ1bnRpbWUvQ2FnZWRC
YXJyaWVyUHRyLmg6CisgICAgICAgIChKU0M6OkNhZ2VkQmFycmllclB0cjo6Q2FnZWRCYXJyaWVy
UHRyKToKKyAgICAgICAgKEpTQzo6Q2FnZWRCYXJyaWVyUHRyOjpzZXQpOgorICAgICAgICAoSlND
OjpDYWdlZEJhcnJpZXJQdHI6OmdldCBjb25zdCk6CisgICAgICAgIChKU0M6OkNhZ2VkQmFycmll
clB0cjo6Z2V0TWF5QmVOdWxsIGNvbnN0KToKKyAgICAgICAgKEpTQzo6Q2FnZWRCYXJyaWVyUHRy
OjpvcGVyYXRvcj09IGNvbnN0KToKKyAgICAgICAgKEpTQzo6Q2FnZWRCYXJyaWVyUHRyOjpvcGVy
YXRvciE9IGNvbnN0KToKKyAgICAgICAgKEpTQzo6Q2FnZWRCYXJyaWVyUHRyOjpvcGVyYXRvciBi
b29sIGNvbnN0KToKKyAgICAgICAgKEpTQzo6Q2FnZWRCYXJyaWVyUHRyOjpzZXRXaXRob3V0QmFy
cmllcik6CisgICAgICAgIChKU0M6OkNhZ2VkQmFycmllclB0cjo6b3BlcmF0b3IqIGNvbnN0KToK
KyAgICAgICAgKEpTQzo6Q2FnZWRCYXJyaWVyUHRyOjpvcGVyYXRvci0+IGNvbnN0KToKKyAgICAg
ICAgKEpTQzo6Q2FnZWRCYXJyaWVyUHRyOjpvcGVyYXRvcltdIGNvbnN0KToKKyAgICAgICAgKEpT
Qzo6Q2FnZWRCYXJyaWVyUHRyOjpnZXRVbnNhZmUgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAo
SlNDOjpDYWdlZEJhcnJpZXJQdHI6OmF0IGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKiBydW50
aW1lL0RhdGFWaWV3LmNwcDoKKyAgICAgICAgKEpTQzo6RGF0YVZpZXc6OkRhdGFWaWV3KToKKyAg
ICAgICAgKiBydW50aW1lL0RhdGFWaWV3Lmg6CisgICAgICAgIChKU0M6OkRhdGFWaWV3OjpnZXQp
OgorICAgICAgICAoSlNDOjpEYXRhVmlldzo6c2V0KToKKyAgICAgICAgKiBydW50aW1lL0RpcmVj
dEFyZ3VtZW50cy5jcHA6CisgICAgICAgIChKU0M6OkRpcmVjdEFyZ3VtZW50czo6dmlzaXRDaGls
ZHJlbik6CisgICAgICAgIChKU0M6OkRpcmVjdEFyZ3VtZW50czo6b3ZlcnJpZGVUaGluZ3MpOgor
ICAgICAgICAoSlNDOjpEaXJlY3RBcmd1bWVudHM6OnVubWFwQXJndW1lbnQpOgorICAgICAgICAq
IHJ1bnRpbWUvRGlyZWN0QXJndW1lbnRzLmg6CisgICAgICAgICogcnVudGltZS9HZW5lcmljQXJn
dW1lbnRzLmg6CisgICAgICAgICogcnVudGltZS9HZW5lcmljQXJndW1lbnRzSW5saW5lcy5oOgor
ICAgICAgICAoSlNDOjpHZW5lcmljQXJndW1lbnRzPFR5cGU+Ojp2aXNpdENoaWxkcmVuKToKKyAg
ICAgICAgKEpTQzo6R2VuZXJpY0FyZ3VtZW50czxUeXBlPjo6aW5pdE1vZGlmaWVkQXJndW1lbnRz
RGVzY3JpcHRvcik6CisgICAgICAgIChKU0M6OkdlbmVyaWNBcmd1bWVudHM8VHlwZT46OnNldE1v
ZGlmaWVkQXJndW1lbnREZXNjcmlwdG9yKToKKyAgICAgICAgKEpTQzo6R2VuZXJpY0FyZ3VtZW50
czxUeXBlPjo6aXNNb2RpZmllZEFyZ3VtZW50RGVzY3JpcHRvcik6CisgICAgICAgICogcnVudGlt
ZS9HZW5lcmljVHlwZWRBcnJheVZpZXcuaDoKKyAgICAgICAgKiBydW50aW1lL0dlbmVyaWNUeXBl
ZEFycmF5Vmlld0lubGluZXMuaDoKKyAgICAgICAgKEpTQzo6R2VuZXJpY1R5cGVkQXJyYXlWaWV3
PEFkYXB0b3I+OjpHZW5lcmljVHlwZWRBcnJheVZpZXcpOgorICAgICAgICAqIHJ1bnRpbWUvSlNB
cnJheUJ1ZmZlclZpZXcuY3BwOgorICAgICAgICAoSlNDOjpKU0FycmF5QnVmZmVyVmlldzo6Q29u
c3RydWN0aW9uQ29udGV4dDo6Q29uc3RydWN0aW9uQ29udGV4dCk6CisgICAgICAgIChKU0M6OkpT
QXJyYXlCdWZmZXJWaWV3OjpKU0FycmF5QnVmZmVyVmlldyk6CisgICAgICAgIChKU0M6OkpTQXJy
YXlCdWZmZXJWaWV3OjpmaW5hbGl6ZSk6CisgICAgICAgIChKU0M6OkpTQXJyYXlCdWZmZXJWaWV3
OjpzbG93RG93bkFuZFdhc3RlTWVtb3J5KToKKyAgICAgICAgKiBydW50aW1lL0pTQXJyYXlCdWZm
ZXJWaWV3Lmg6CisgICAgICAgIChKU0M6OkpTQXJyYXlCdWZmZXJWaWV3OjpDb25zdHJ1Y3Rpb25D
b250ZXh0Ojp2ZWN0b3IgY29uc3QpOgorICAgICAgICAoSlNDOjpKU0FycmF5QnVmZmVyVmlldzo6
aXNOZXV0ZXJlZCk6CisgICAgICAgIChKU0M6OkpTQXJyYXlCdWZmZXJWaWV3Ojp2ZWN0b3IgY29u
c3QpOgorICAgICAgICAoSlNDOjpKU0FycmF5QnVmZmVyVmlldzo6aGFzVmVjdG9yIGNvbnN0KTog
RGVsZXRlZC4KKyAgICAgICAgKiBydW50aW1lL0pTR2VuZXJpY1R5cGVkQXJyYXlWaWV3SW5saW5l
cy5oOgorICAgICAgICAoSlNDOjpKU0dlbmVyaWNUeXBlZEFycmF5VmlldzxBZGFwdG9yPjo6Y3Jl
YXRlVW5pbml0aWFsaXplZCk6CisgICAgICAgIChKU0M6OkpTR2VuZXJpY1R5cGVkQXJyYXlWaWV3
PEFkYXB0b3I+Ojplc3RpbWF0ZWRTaXplKToKKyAgICAgICAgKEpTQzo6SlNHZW5lcmljVHlwZWRB
cnJheVZpZXc8QWRhcHRvcj46OnZpc2l0Q2hpbGRyZW4pOgorICAgICAgICAqIHJ1bnRpbWUvT3B0
aW9ucy5oOgorICAgICAgICAqIHJ1bnRpbWUvU2NvcGVkQXJndW1lbnRzVGFibGUuY3BwOgorICAg
ICAgICAoSlNDOjpTY29wZWRBcmd1bWVudHNUYWJsZTo6Y2xvbmUpOgorICAgICAgICAoSlNDOjpT
Y29wZWRBcmd1bWVudHNUYWJsZTo6c2V0TGVuZ3RoKToKKyAgICAgICAgKiBydW50aW1lL1Njb3Bl
ZEFyZ3VtZW50c1RhYmxlLmg6CisgICAgICAgICogcnVudGltZS9TeW1ib2xUYWJsZS5oOgorICAg
ICAgICAqIHdhc20vV2FzbUFpcklSR2VuZXJhdG9yLmNwcDoKKyAgICAgICAgKEpTQzo6V2FzbTo6
QWlySVJHZW5lcmF0b3I6OnJlc3RvcmVXZWJBc3NlbWJseUdsb2JhbFN0YXRlKToKKyAgICAgICAg
KEpTQzo6V2FzbTo6QWlySVJHZW5lcmF0b3I6OmFkZENhbGxJbmRpcmVjdCk6CisgICAgICAgICog
d2FzbS9XYXNtQjNJUkdlbmVyYXRvci5jcHA6CisgICAgICAgIChKU0M6Oldhc206OkIzSVJHZW5l
cmF0b3I6OnJlc3RvcmVXZWJBc3NlbWJseUdsb2JhbFN0YXRlKToKKyAgICAgICAgKEpTQzo6V2Fz
bTo6QjNJUkdlbmVyYXRvcjo6YWRkQ2FsbEluZGlyZWN0KToKKyAgICAgICAgKiB3YXNtL1dhc21C
QlFQbGFuLmNwcDoKKyAgICAgICAgKEpTQzo6V2FzbTo6QkJRUGxhbjo6Y29tcGxldGUpOgorICAg
ICAgICAqIHdhc20vV2FzbUJpbmRpbmcuY3BwOgorICAgICAgICAoSlNDOjpXYXNtOjp3YXNtVG9X
YXNtKToKKyAgICAgICAgKiB3YXNtL1dhc21JbnN0YW5jZS5oOgorICAgICAgICAoSlNDOjpXYXNt
OjpJbnN0YW5jZTo6Y2FjaGVkTWVtb3J5IGNvbnN0KToKKyAgICAgICAgKEpTQzo6V2FzbTo6SW5z
dGFuY2U6OnVwZGF0ZUNhY2hlZE1lbW9yeSk6CisgICAgICAgICogd2FzbS9XYXNtTWVtb3J5LmNw
cDoKKyAgICAgICAgKEpTQzo6V2FzbTo6TWVtb3J5OjpNZW1vcnkpOgorICAgICAgICAoSlNDOjpX
YXNtOjpNZW1vcnk6On5NZW1vcnkpOgorICAgICAgICAoSlNDOjpXYXNtOjpNZW1vcnk6Omdyb3cp
OgorICAgICAgICAoSlNDOjpXYXNtOjpNZW1vcnk6OmR1bXAgY29uc3QpOgorICAgICAgICAqIHdh
c20vV2FzbU1lbW9yeS5oOgorICAgICAgICAoSlNDOjpXYXNtOjpNZW1vcnk6Om1lbW9yeSBjb25z
dCk6CisgICAgICAgICogd2FzbS9qcy9KU1RvV2FzbS5jcHA6CisgICAgICAgIChKU0M6Oldhc206
OmNyZWF0ZUpTVG9XYXNtV3JhcHBlcik6CisgICAgICAgICogd2FzbS9qcy9XZWJBc3NlbWJseUZ1
bmN0aW9uLmNwcDoKKyAgICAgICAgKEpTQzo6V2ViQXNzZW1ibHlGdW5jdGlvbjo6anNDYWxsRW50
cnlwb2ludFNsb3cpOgorCiAyMDE5LTA2LTEwICBUaW1vdGh5IEhhdGNoZXIgIDx0aW1vdGh5QGFw
cGxlLmNvbT4KIAogICAgICAgICBJbnRlZ3JhdGUgZGFyayBtb2RlIHN1cHBvcnQgZm9yIGlPUy4K
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9hc3NlbWJsZXIvQ1BVLmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Fzc2VtYmxlci9DUFUuaAkocmV2aXNpb24gMjQ2Mjcx
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2Fzc2VtYmxlci9DUFUuaAkod29ya2luZyBjb3B5
KQpAQCAtNTYsMTUgKzU2LDYgQEAgY29uc3RleHByIGJvb2wgaXNBUk02NCgpCiAjZW5kaWYKIH0K
IAotY29uc3RleHByIGJvb2wgaXNBUk02NEUoKQotewotI2lmIENQVShBUk02NEUpCi0gICAgcmV0
dXJuIHRydWU7Ci0jZWxzZQotICAgIHJldHVybiBmYWxzZTsKLSNlbmRpZgotfQotCiBjb25zdGV4
cHIgYm9vbCBpc1g4NigpCiB7CiAjaWYgQ1BVKFg4Nl82NCkgfHwgQ1BVKFg4NikKSW5kZXg6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9hc3NlbWJsZXIvTWFjcm9Bc3NlbWJsZXJBUk02NEUuaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYXNzZW1ibGVyL01hY3JvQXNzZW1ibGVy
QVJNNjRFLmgJKHJldmlzaW9uIDI0NjI3MSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9hc3Nl
bWJsZXIvTWFjcm9Bc3NlbWJsZXJBUk02NEUuaAkod29ya2luZyBjb3B5KQpAQCAtODIsMjggKzgy
LDYgQEAgcHVibGljOgogICAgICAgICBtX2Fzc2VtYmxlci54cGFjaSh0YXJnZXQpOwogICAgIH0K
IAotICAgIEFMV0FZU19JTkxJTkUgdm9pZCB0YWdBcnJheVB0cihSZWdpc3RlcklEIGxlbmd0aCwg
UmVnaXN0ZXJJRCB0YXJnZXQpCi0gICAgewotICAgICAgICBtX2Fzc2VtYmxlci5wYWNkYih0YXJn
ZXQsIGxlbmd0aCk7Ci0gICAgfQotCi0gICAgQUxXQVlTX0lOTElORSB2b2lkIHVudGFnQXJyYXlQ
dHIoUmVnaXN0ZXJJRCBsZW5ndGgsIFJlZ2lzdGVySUQgdGFyZ2V0KQotICAgIHsKLSAgICAgICAg
bV9hc3NlbWJsZXIuYXV0ZGIodGFyZ2V0LCBsZW5ndGgpOwotICAgIH0KLQotICAgIEFMV0FZU19J
TkxJTkUgdm9pZCB1bnRhZ0FycmF5UHRyKEFkZHJlc3MgbGVuZ3RoLCBSZWdpc3RlcklEIHRhcmdl
dCkKLSAgICB7Ci0gICAgICAgIGF1dG8gbGVuZ3RoR1BSID0gZ2V0Q2FjaGVkRGF0YVRlbXBSZWdp
c3RlcklEQW5kSW52YWxpZGF0ZSgpOwotICAgICAgICBsb2FkMzIobGVuZ3RoLCBsZW5ndGhHUFIp
OwotICAgICAgICBtX2Fzc2VtYmxlci5hdXRkYih0YXJnZXQsIGxlbmd0aEdQUik7Ci0gICAgfQot
Ci0gICAgQUxXQVlTX0lOTElORSB2b2lkIHJlbW92ZUFycmF5UHRyVGFnKFJlZ2lzdGVySUQgdGFy
Z2V0KQotICAgIHsKLSAgICAgICAgbV9hc3NlbWJsZXIueHBhY2QodGFyZ2V0KTsKLSAgICB9Ci0K
ICAgICBzdGF0aWMgY29uc3QgUmVnaXN0ZXJJRCBJbnZhbGlkR1BSICA9IHN0YXRpY19jYXN0PFJl
Z2lzdGVySUQ+KC0xKTsKIAogICAgIGVudW0gY2xhc3MgQ2FsbFNpZ25hdHVyZVR5cGUgewpJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzTG93ZXJUb0Fpci5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzTG93ZXJUb0Fpci5jcHAJKHJldmlzaW9uIDI0
NjI3MSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0xvd2VyVG9BaXIuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC0xMjc0LDcgKzEyNzQsNiBAQCBwcml2YXRlOgogICAgICAgICAgICAgICAg
ICAgICBhcmcgPSB0bXAodmFsdWUudmFsdWUoKSk7CiAgICAgICAgICAgICAgICAgYnJlYWs7CiAg
ICAgICAgICAgICBjYXNlIFZhbHVlUmVwOjpTb21lUmVnaXN0ZXI6Ci0gICAgICAgICAgICBjYXNl
IFZhbHVlUmVwOjpTb21lTGF0ZVJlZ2lzdGVyOgogICAgICAgICAgICAgICAgIGFyZyA9IHRtcCh2
YWx1ZS52YWx1ZSgpKTsKICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgIGNhc2Ug
VmFsdWVSZXA6OlNvbWVSZWdpc3RlcldpdGhDbG9iYmVyOiB7CkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvYjMvQjNQYXRjaHBvaW50U3BlY2lhbC5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL2IzL0IzUGF0Y2hwb2ludFNwZWNpYWwuY3BwCShyZXZpc2lvbiAyNDYy
NzEpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNQYXRjaHBvaW50U3BlY2lhbC5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTEyMCw3ICsxMjAsNiBAQCBib29sIFBhdGNocG9pbnRTcGVjaWFs
OjphZG1pdHNTdGFjayhJbnN0CiAgICAgICAgIGNhc2UgVmFsdWVSZXA6OlNvbWVSZWdpc3RlcjoK
ICAgICAgICAgY2FzZSBWYWx1ZVJlcDo6U29tZVJlZ2lzdGVyV2l0aENsb2JiZXI6CiAgICAgICAg
IGNhc2UgVmFsdWVSZXA6OlNvbWVFYXJseVJlZ2lzdGVyOgotICAgICAgICBjYXNlIFZhbHVlUmVw
OjpTb21lTGF0ZVJlZ2lzdGVyOgogICAgICAgICBjYXNlIFZhbHVlUmVwOjpSZWdpc3RlcjoKICAg
ICAgICAgY2FzZSBWYWx1ZVJlcDo6TGF0ZVJlZ2lzdGVyOgogICAgICAgICAgICAgcmV0dXJuIGZh
bHNlOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzU3RhY2ttYXBTcGVjaWFsLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNTdGFja21hcFNwZWNp
YWwuY3BwCShyZXZpc2lvbiAyNDYyNzEpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNT
dGFja21hcFNwZWNpYWwuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMTMsNyArMTEzLDYgQEAgdm9p
ZCBTdGFja21hcFNwZWNpYWw6OmZvckVhY2hBcmdJbXBsKAogICAgICAgICAgICAgY2FzZSBWYWx1
ZVJlcDo6U29tZVJlZ2lzdGVyV2l0aENsb2JiZXI6CiAgICAgICAgICAgICAgICAgcm9sZSA9IEFy
Zzo6VXNlRGVmOwogICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgY2FzZSBWYWx1
ZVJlcDo6U29tZUxhdGVSZWdpc3RlcjoKICAgICAgICAgICAgIGNhc2UgVmFsdWVSZXA6OkxhdGVS
ZWdpc3RlcjoKICAgICAgICAgICAgICAgICByb2xlID0gQXJnOjpMYXRlVXNlOwogICAgICAgICAg
ICAgICAgIGJyZWFrOwpAQCAtMjU1LDcgKzI1NCw2IEBAIGJvb2wgU3RhY2ttYXBTcGVjaWFsOjpp
c0FyZ1ZhbGlkRm9yUmVwKEEKICAgICBjYXNlIFZhbHVlUmVwOjpTb21lUmVnaXN0ZXI6CiAgICAg
Y2FzZSBWYWx1ZVJlcDo6U29tZVJlZ2lzdGVyV2l0aENsb2JiZXI6CiAgICAgY2FzZSBWYWx1ZVJl
cDo6U29tZUVhcmx5UmVnaXN0ZXI6Ci0gICAgY2FzZSBWYWx1ZVJlcDo6U29tZUxhdGVSZWdpc3Rl
cjoKICAgICAgICAgcmV0dXJuIGFyZy5pc1RtcCgpOwogICAgIGNhc2UgVmFsdWVSZXA6OkxhdGVS
ZWdpc3RlcjoKICAgICBjYXNlIFZhbHVlUmVwOjpSZWdpc3RlcjoKSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9iMy9CM1ZhbGlkYXRlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvYjMvQjNWYWxpZGF0ZS5jcHAJKHJldmlzaW9uIDI0NjI3MSkKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9iMy9CM1ZhbGlkYXRlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNTgwLDcg
KzU4MCw2IEBAIHByaXZhdGU6CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgY2FzZSBWYWx1
ZVJlcDo6UmVnaXN0ZXI6CiAgICAgICAgIGNhc2UgVmFsdWVSZXA6OkxhdGVSZWdpc3RlcjoKLSAg
ICAgICAgY2FzZSBWYWx1ZVJlcDo6U29tZUxhdGVSZWdpc3RlcjoKICAgICAgICAgICAgIGlmICh2
YWx1ZS5yZXAoKS5raW5kKCkgPT0gVmFsdWVSZXA6OkxhdGVSZWdpc3RlcikKICAgICAgICAgICAg
ICAgICBWQUxJREFURShyb2xlID09IENvbnN0cmFpbnRSb2xlOjpVc2UsICgiQXQgIiwgKmNvbnRl
eHQsICI6ICIsIHZhbHVlKSk7CiAgICAgICAgICAgICBpZiAodmFsdWUucmVwKCkucmVnKCkuaXNH
UFIoKSkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1ZhbHVlUmVwLmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNWYWx1ZVJlcC5jcHAJKHJldmlz
aW9uIDI0NjI3MSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1ZhbHVlUmVwLmNwcAko
d29ya2luZyBjb3B5KQpAQCAtNDIsNyArNDIsNiBAQCB2b2lkIFZhbHVlUmVwOjphZGRVc2VkUmVn
aXN0ZXJzVG8oUmVnaXN0CiAgICAgY2FzZSBTb21lUmVnaXN0ZXI6CiAgICAgY2FzZSBTb21lUmVn
aXN0ZXJXaXRoQ2xvYmJlcjoKICAgICBjYXNlIFNvbWVFYXJseVJlZ2lzdGVyOgotICAgIGNhc2Ug
U29tZUxhdGVSZWdpc3RlcjoKICAgICBjYXNlIENvbnN0YW50OgogICAgICAgICByZXR1cm47CiAg
ICAgY2FzZSBMYXRlUmVnaXN0ZXI6CkBAIC03NSw3ICs3NCw2IEBAIHZvaWQgVmFsdWVSZXA6OmR1
bXAoUHJpbnRTdHJlYW0mIG91dCkgY28KICAgICBjYXNlIFNvbWVSZWdpc3RlcjoKICAgICBjYXNl
IFNvbWVSZWdpc3RlcldpdGhDbG9iYmVyOgogICAgIGNhc2UgU29tZUVhcmx5UmVnaXN0ZXI6Ci0g
ICAgY2FzZSBTb21lTGF0ZVJlZ2lzdGVyOgogICAgICAgICByZXR1cm47CiAgICAgY2FzZSBMYXRl
UmVnaXN0ZXI6CiAgICAgY2FzZSBSZWdpc3RlcjoKQEAgLTE4NSw5ICsxODMsNiBAQCB2b2lkIHBy
aW50SW50ZXJuYWwoUHJpbnRTdHJlYW0mIG91dCwgVmFsCiAgICAgY2FzZSBWYWx1ZVJlcDo6U29t
ZUVhcmx5UmVnaXN0ZXI6CiAgICAgICAgIG91dC5wcmludCgiU29tZUVhcmx5UmVnaXN0ZXIiKTsK
ICAgICAgICAgcmV0dXJuOwotICAgIGNhc2UgVmFsdWVSZXA6OlNvbWVMYXRlUmVnaXN0ZXI6Ci0g
ICAgICAgIG91dC5wcmludCgiU29tZUxhdGVSZWdpc3RlciIpOwotICAgICAgICByZXR1cm47CiAg
ICAgY2FzZSBWYWx1ZVJlcDo6UmVnaXN0ZXI6CiAgICAgICAgIG91dC5wcmludCgiUmVnaXN0ZXIi
KTsKICAgICAgICAgcmV0dXJuOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzVmFs
dWVSZXAuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNWYWx1ZVJl
cC5oCShyZXZpc2lvbiAyNDYyNzEpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNWYWx1
ZVJlcC5oCSh3b3JraW5nIGNvcHkpCkBAIC03NCwxMSArNzQsNyBAQCBwdWJsaWM6CiAgICAgICAg
IC8vIHRoYXQgdGhlIGRlZiBoYXBwZW5zIGJlZm9yZSBhbnkgb2YgdGhlIGVmZmVjdHMgb2YgdGhl
IHN0YWNrbWFwLiBUaGlzIGlzIG9ubHkgdmFsaWQgZm9yCiAgICAgICAgIC8vIHRoZSByZXN1bHQg
Y29uc3RyYWludCBvZiBhIFBhdGNocG9pbnQuCiAgICAgICAgIFNvbWVFYXJseVJlZ2lzdGVyLAot
Ci0gICAgICAgIC8vIEFzIGFuIGlucHV0IHJlcHJlc2VudGF0aW9uLCB0aGlzIHRlbGxzIHVzIHRo
YXQgQjMgc2hvdWxkIHBpY2sgc29tZSByZWdpc3RlciwgYnV0IGltcGxpZXMKLSAgICAgICAgLy8g
dGhlIHVzZSBoYXBwZW5zIGFmdGVyIGFueSBkZWZzLiBUaGlzIGlzIG9ubHkgd29ya3MgZm9yIHBh
dGNocG9pbnRzLgotICAgICAgICBTb21lTGF0ZVJlZ2lzdGVyLAotCisgICAgICAgIAogICAgICAg
ICAvLyBBcyBhbiBpbnB1dCByZXByZXNlbnRhdGlvbiwgdGhpcyBmb3JjZXMgYSBwYXJ0aWN1bGFy
IHJlZ2lzdGVyLiBBcyBhbiBvdXRwdXQKICAgICAgICAgLy8gcmVwcmVzZW50YXRpb24sIHRoaXMg
dGVsbHMgdXMgd2hhdCByZWdpc3RlciBCMyBwaWNrZWQuCiAgICAgICAgIFJlZ2lzdGVyLApAQCAt
MTE1LDcgKzExMSw3IEBAIHB1YmxpYzoKICAgICBWYWx1ZVJlcChLaW5kIGtpbmQpCiAgICAgICAg
IDogbV9raW5kKGtpbmQpCiAgICAgewotICAgICAgICBBU1NFUlQoa2luZCA9PSBXYXJtQW55IHx8
IGtpbmQgPT0gQ29sZEFueSB8fCBraW5kID09IExhdGVDb2xkQW55IHx8IGtpbmQgPT0gU29tZVJl
Z2lzdGVyIHx8IGtpbmQgPT0gU29tZVJlZ2lzdGVyV2l0aENsb2JiZXIgfHwga2luZCA9PSBTb21l
RWFybHlSZWdpc3RlciB8fCBraW5kID09IFNvbWVMYXRlUmVnaXN0ZXIpOworICAgICAgICBBU1NF
UlQoa2luZCA9PSBXYXJtQW55IHx8IGtpbmQgPT0gQ29sZEFueSB8fCBraW5kID09IExhdGVDb2xk
QW55IHx8IGtpbmQgPT0gU29tZVJlZ2lzdGVyIHx8IGtpbmQgPT0gU29tZVJlZ2lzdGVyV2l0aENs
b2JiZXIgfHwga2luZCA9PSBTb21lRWFybHlSZWdpc3Rlcik7CiAgICAgfQogCiAgICAgc3RhdGlj
IFZhbHVlUmVwIHJlZyhSZWcgcmVnKQpAQCAtMTg5LDcgKzE4NSw3IEBAIHB1YmxpYzoKIAogICAg
IGJvb2wgaXNBbnkoKSBjb25zdCB7IHJldHVybiBraW5kKCkgPT0gV2FybUFueSB8fCBraW5kKCkg
PT0gQ29sZEFueSB8fCBraW5kKCkgPT0gTGF0ZUNvbGRBbnk7IH0KIAotICAgIGJvb2wgaXNSZWco
KSBjb25zdCB7IHJldHVybiBraW5kKCkgPT0gUmVnaXN0ZXIgfHwga2luZCgpID09IExhdGVSZWdp
c3RlciB8fCBraW5kKCkgPT0gU29tZUxhdGVSZWdpc3RlcjsgfQorICAgIGJvb2wgaXNSZWcoKSBj
b25zdCB7IHJldHVybiBraW5kKCkgPT0gUmVnaXN0ZXIgfHwga2luZCgpID09IExhdGVSZWdpc3Rl
cjsgfQogICAgIAogICAgIFJlZyByZWcoKSBjb25zdAogICAgIHsKSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9kZmcvREZHT3BlcmF0aW9ucy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL2RmZy9ERkdPcGVyYXRpb25zLmNwcAkocmV2aXNpb24gMjQ2MjcxKQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdPcGVyYXRpb25zLmNwcAkod29ya2luZyBjb3B5
KQpAQCAtMTk4LDcgKzE5OCw3IEBAIGNoYXIqIG5ld1R5cGVkQXJyYXlXaXRoU2l6ZShFeGVjU3Rh
dGUqIGUKICAgICB9CiAgICAgCiAgICAgaWYgKHZlY3RvcikKLSAgICAgICAgcmV0dXJuIGJpdHdp
c2VfY2FzdDxjaGFyKj4oVmlld0NsYXNzOjpjcmVhdGVXaXRoRmFzdFZlY3RvcihleGVjLCBzdHJ1
Y3R1cmUsIHNpemUsIHVudGFnQXJyYXlQdHIodmVjdG9yLCBzaXplKSkpOworICAgICAgICByZXR1
cm4gYml0d2lzZV9jYXN0PGNoYXIqPihWaWV3Q2xhc3M6OmNyZWF0ZVdpdGhGYXN0VmVjdG9yKGV4
ZWMsIHN0cnVjdHVyZSwgc2l6ZSwgdmVjdG9yKSk7CiAKICAgICBSRUxFQVNFX0FORF9SRVRVUk4o
c2NvcGUsIGJpdHdpc2VfY2FzdDxjaGFyKj4oVmlld0NsYXNzOjpjcmVhdGUoZXhlYywgc3RydWN0
dXJlLCBzaXplKSkpOwogfQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVj
dWxhdGl2ZUpJVDY0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZn
L0RGR1NwZWN1bGF0aXZlSklUNjQuY3BwCShyZXZpc2lvbiAyNDYyNzEpCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklUNjQuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC00NjgyLDcgKzQ2ODIsNyBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlKE5vZGUqIG5v
ZGUpCiAgICAgICAgICAgICBtX2ppdC5icmFuY2g2NChNYWNyb0Fzc2VtYmxlcjo6QWJvdmVPckVx
dWFsLCB0MiwgdDEpKTsKIAogICAgICAgICBtX2ppdC5sb2FkUHRyKEpJVENvbXBpbGVyOjpBZGRy
ZXNzKGRhdGFWaWV3R1BSLCBKU0FycmF5QnVmZmVyVmlldzo6b2Zmc2V0T2ZWZWN0b3IoKSksIHQy
KTsKLSAgICAgICAgY2FnZVR5cGVkQXJyYXlTdG9yYWdlKGRhdGFWaWV3R1BSLCB0Mik7CisgICAg
ICAgIGNhZ2VUeXBlZEFycmF5U3RvcmFnZSh0Mik7CiAKICAgICAgICAgbV9qaXQuemVyb0V4dGVu
ZDMyVG9QdHIoaW5kZXhHUFIsIHQxKTsKICAgICAgICAgYXV0byBiYXNlSW5kZXggPSBKSVRDb21w
aWxlcjo6QmFzZUluZGV4KHQyLCB0MSwgTWFjcm9Bc3NlbWJsZXI6OlRpbWVzT25lKTsKQEAgLTQ4
NzgsNyArNDg3OCw3IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGUoTm9kZSogbm9kZSkK
ICAgICAgICAgICAgIG1faml0LmJyYW5jaDY0KE1hY3JvQXNzZW1ibGVyOjpBYm92ZU9yRXF1YWws
IHQyLCB0MSkpOwogCiAgICAgICAgIG1faml0LmxvYWRQdHIoSklUQ29tcGlsZXI6OkFkZHJlc3Mo
ZGF0YVZpZXdHUFIsIEpTQXJyYXlCdWZmZXJWaWV3OjpvZmZzZXRPZlZlY3RvcigpKSwgdDIpOwot
ICAgICAgICBjYWdlVHlwZWRBcnJheVN0b3JhZ2UoZGF0YVZpZXdHUFIsIHQyKTsKKyAgICAgICAg
Y2FnZVR5cGVkQXJyYXlTdG9yYWdlKHQyKTsKIAogICAgICAgICBtX2ppdC56ZXJvRXh0ZW5kMzJU
b1B0cihpbmRleEdQUiwgdDEpOwogICAgICAgICBhdXRvIGJhc2VJbmRleCA9IEpJVENvbXBpbGVy
OjpCYXNlSW5kZXgodDIsIHQxLCBNYWNyb0Fzc2VtYmxlcjo6VGltZXNPbmUpOwpJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVC5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVC5jcHAJKHJldmlz
aW9uIDI0NjI3MSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVK
SVQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00MCw3ICs0MCw2IEBACiAjaW5jbHVkZSAiREZHU2xv
d1BhdGhHZW5lcmF0b3IuaCIKICNpbmNsdWRlICJERkdTbmlwcGV0UGFyYW1zLmgiCiAjaW5jbHVk
ZSAiRGlyZWN0QXJndW1lbnRzLmgiCi0jaW5jbHVkZSAiRGlzYWxsb3dNYWNyb1NjcmF0Y2hSZWdp
c3RlclVzYWdlLmgiCiAjaW5jbHVkZSAiSklUQWRkR2VuZXJhdG9yLmgiCiAjaW5jbHVkZSAiSklU
Qml0QW5kR2VuZXJhdG9yLmgiCiAjaW5jbHVkZSAiSklUQml0T3JHZW5lcmF0b3IuaCIKQEAgLTI4
NzIsMjEgKzI4NzEsOSBAQCBKSVRDb21waWxlcjo6SnVtcCBTcGVjdWxhdGl2ZUpJVDo6anVtcEZv
CiAgICAgICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3MoYmFzZSwgSlNBcnJheUJ1
ZmZlclZpZXc6Om9mZnNldE9mTW9kZSgpKSwKICAgICAgICAgICAgICAgICBUcnVzdGVkSW1tMzIo
V2FzdGVmdWxUeXBlZEFycmF5KSk7CiAKLSAgICAgICAgICAgIEpJVENvbXBpbGVyOjpKdW1wIGhh
c051bGxWZWN0b3I7Ci0jaWYgIUdJR0FDQUdFX0VOQUJMRUQgJiYgQ1BVKEFSTTY0RSkKLSAgICAg
ICAgICAgIHsKLSAgICAgICAgICAgICAgICBHUFJSZWcgc2NyYXRjaCA9IG1faml0LnNjcmF0Y2hS
ZWdpc3RlcigpOwotICAgICAgICAgICAgICAgIERpc2FsbG93TWFjcm9TY3JhdGNoUmVnaXN0ZXJV
c2FnZSBkaXNhbGxvd1NjcmF0Y2gobV9qaXQpOwotCi0gICAgICAgICAgICAgICAgbV9qaXQubG9h
ZFB0cihNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhiYXNlLCBKU0FycmF5QnVmZmVyVmlldzo6b2Zm
c2V0T2ZWZWN0b3IoKSksIHNjcmF0Y2gpOwotICAgICAgICAgICAgICAgIG1faml0LnJlbW92ZUFy
cmF5UHRyVGFnKHNjcmF0Y2gpOwotICAgICAgICAgICAgICAgIGhhc051bGxWZWN0b3IgPSBtX2pp
dC5icmFuY2hUZXN0UHRyKE1hY3JvQXNzZW1ibGVyOjpaZXJvLCBzY3JhdGNoKTsKLSAgICAgICAg
ICAgIH0KLSNlbHNlIC8vICFHSUdBQ0FHRV9FTkFCTEVEICYmIENQVShBUk02NEUpCi0gICAgICAg
ICAgICBoYXNOdWxsVmVjdG9yID0gbV9qaXQuYnJhbmNoVGVzdFB0cigKKyAgICAgICAgICAgIEpJ
VENvbXBpbGVyOjpKdW1wIGhhc051bGxWZWN0b3IgPSBtX2ppdC5icmFuY2hUZXN0UHRyKAogICAg
ICAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpaZXJvLAogICAgICAgICAgICAgICAgIE1hY3Jv
QXNzZW1ibGVyOjpBZGRyZXNzKGJhc2UsIEpTQXJyYXlCdWZmZXJWaWV3OjpvZmZzZXRPZlZlY3Rv
cigpKSk7Ci0jZW5kaWYKICAgICAgICAgICAgIHNwZWN1bGF0aW9uQ2hlY2soVW5jb3VudGFibGUs
IEpTVmFsdWVTb3VyY2UoKSwgbm9kZSwgaGFzTnVsbFZlY3Rvcik7CiAgICAgICAgICAgICBub3RX
YXN0ZWZ1bC5saW5rKCZtX2ppdCk7CiAgICAgICAgIH0KQEAgLTY3NTgsMTAgKzY3NDUsOSBAQCB2
b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlQ29uc3RhbnRTdG9yCiAgICAgc3RvcmFnZVJlc3Vs
dChzdG9yYWdlR1BSLCBub2RlKTsKIH0KIAotdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y2FnZVR5cGVk
QXJyYXlTdG9yYWdlKEdQUlJlZyBiYXNlUmVnLCBHUFJSZWcgc3RvcmFnZVJlZykKK3ZvaWQgU3Bl
Y3VsYXRpdmVKSVQ6OmNhZ2VUeXBlZEFycmF5U3RvcmFnZShHUFJSZWcgc3RvcmFnZVJlZykKIHsK
ICNpZiBHSUdBQ0FHRV9FTkFCTEVECi0gICAgVU5VU0VEX1BBUkFNKGJhc2VSZWcpOwogICAgIGlm
ICghR2lnYWNhZ2U6OnNob3VsZEJlRW5hYmxlZCgpKQogICAgICAgICByZXR1cm47CiAgICAgCkBA
IC02NzczLDEwICs2NzU5LDcgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y2FnZVR5cGVkQXJyYXlT
dG9yYQogICAgIH0KICAgICAKICAgICBtX2ppdC5jYWdlKEdpZ2FjYWdlOjpQcmltaXRpdmUsIHN0
b3JhZ2VSZWcpOwotI2VsaWYgQ1BVKEFSTTY0RSkKLSAgICBtX2ppdC51bnRhZ0FycmF5UHRyKE1h
Y3JvQXNzZW1ibGVyOjpBZGRyZXNzKGJhc2VSZWcsIEpTQXJyYXlCdWZmZXJWaWV3OjpvZmZzZXRP
Zkxlbmd0aCgpKSwgc3RvcmFnZVJlZyk7CiAjZWxzZQotICAgIFVOVVNFRF9QQVJBTShiYXNlUmVn
KTsKICAgICBVTlVTRURfUEFSQU0oc3RvcmFnZVJlZyk7CiAjZW5kaWYKIH0KQEAgLTY4MDAsMTcg
KzY3ODMsMTYgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZUdldEluZGV4ZWRQcgogCiAg
ICAgICAgIG1faml0LmxvYWRQdHIoTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3Moc3RvcmFnZVJlZywg
U3RyaW5nSW1wbDo6ZGF0YU9mZnNldCgpKSwgc3RvcmFnZVJlZyk7CiAgICAgICAgIGJyZWFrOwot
Ci0gICAgZGVmYXVsdDogeworICAgICAgICAKKyAgICBkZWZhdWx0OgogICAgICAgICBhdXRvIHR5
cGVkQXJyYXlUeXBlID0gbm9kZS0+YXJyYXlNb2RlKCkudHlwZWRBcnJheVR5cGUoKTsKICAgICAg
ICAgQVNTRVJUX1VOVVNFRCh0eXBlZEFycmF5VHlwZSwgaXNUeXBlZFZpZXcodHlwZWRBcnJheVR5
cGUpKTsKIAogICAgICAgICBtX2ppdC5sb2FkUHRyKEpJVENvbXBpbGVyOjpBZGRyZXNzKGJhc2VS
ZWcsIEpTQXJyYXlCdWZmZXJWaWV3OjpvZmZzZXRPZlZlY3RvcigpKSwgc3RvcmFnZVJlZyk7Ci0g
ICAgICAgIGNhZ2VUeXBlZEFycmF5U3RvcmFnZShiYXNlUmVnLCBzdG9yYWdlUmVnKTsKKyAgICAg
ICAgY2FnZVR5cGVkQXJyYXlTdG9yYWdlKHN0b3JhZ2VSZWcpOwogICAgICAgICBicmVhazsKICAg
ICB9Ci0gICAgfQotCisgICAgCiAgICAgc3RvcmFnZVJlc3VsdChzdG9yYWdlUmVnLCBub2RlKTsK
IH0KIApAQCAtNjgzNSwyNCArNjgxNywxNyBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxl
R2V0VHlwZWRBcnJhCiAgICAgICAgIFRydXN0ZWRJbW0zMihXYXN0ZWZ1bFR5cGVkQXJyYXkpKTsK
IAogICAgIG1faml0LmxvYWRQdHIoTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3MoYmFzZUdQUiwgSlNB
cnJheUJ1ZmZlclZpZXc6Om9mZnNldE9mVmVjdG9yKCkpLCB2ZWN0b3JHUFIpOwotCi0gICAgLy8g
RklYTUU6IFRoaXMgc2hvdWxkIG1hc2sgdGhlIFBBQyBiaXRzCi0gICAgLy8gaHR0cHM6Ly9idWdz
LndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE5NzcwMQogICAgIEpJVENvbXBpbGVyOjpKdW1w
IG51bGxWZWN0b3IgPSBtX2ppdC5icmFuY2hUZXN0UHRyKEpJVENvbXBpbGVyOjpaZXJvLCB2ZWN0
b3JHUFIpOwogCiAgICAgbV9qaXQubG9hZFB0cihNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhiYXNl
R1BSLCBKU09iamVjdDo6YnV0dGVyZmx5T2Zmc2V0KCkpLCBkYXRhR1BSKTsKICAgICBtX2ppdC5j
YWdlKEdpZ2FjYWdlOjpKU1ZhbHVlLCBkYXRhR1BSKTsKIAotICAgIGNhZ2VUeXBlZEFycmF5U3Rv
cmFnZShiYXNlR1BSLCB2ZWN0b3JHUFIpOworICAgIGNhZ2VUeXBlZEFycmF5U3RvcmFnZSh2ZWN0
b3JHUFIpOwogCiAgICAgbV9qaXQubG9hZFB0cihNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhkYXRh
R1BSLCBCdXR0ZXJmbHk6Om9mZnNldE9mQXJyYXlCdWZmZXIoKSksIGFycmF5QnVmZmVyR1BSKTsK
ICAgICAvLyBGSVhNRTogVGhpcyBuZWVkcyBjYWdpbmcuCiAgICAgLy8gaHR0cHM6Ly9idWdzLndl
YmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE3NTUxNQogICAgIG1faml0LmxvYWRQdHIoTWFjcm9B
c3NlbWJsZXI6OkFkZHJlc3MoYXJyYXlCdWZmZXJHUFIsIEFycmF5QnVmZmVyOjpvZmZzZXRPZkRh
dGEoKSksIGRhdGFHUFIpOwotI2lmIENQVShBUk02NEUpCi0gICAgbV9qaXQucmVtb3ZlQXJyYXlQ
dHJUYWcoZGF0YUdQUik7Ci0jZW5kaWYKLQogICAgIG1faml0LnN1YlB0cihkYXRhR1BSLCB2ZWN0
b3JHUFIpOwogICAgIAogICAgIEpJVENvbXBpbGVyOjpKdW1wIGRvbmUgPSBtX2ppdC5qdW1wKCk7
CkBAIC05ODQ1LDExICs5ODIwLDYgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZU5ld1R5
cGVkQXJyYQogICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6QmFzZUluZGV4KHN0b3JhZ2VHUFIsIHNj
cmF0Y2hHUFIsIE1hY3JvQXNzZW1ibGVyOjpUaW1lc0ZvdXIpKTsKICAgICBtX2ppdC5icmFuY2hU
ZXN0MzIoTWFjcm9Bc3NlbWJsZXI6Ok5vblplcm8sIHNjcmF0Y2hHUFIpLmxpbmtUbyhsb29wLCAm
bV9qaXQpOwogICAgIGRvbmUubGluaygmbV9qaXQpOwotI2lmICFHSUdBQ0FHRV9FTkFCTEVEICYm
IENQVShBUk02NEUpCi0gICAgLy8gc2l6ZUdQUiBpcyBzdGlsbCBib3hlZCBhcyBhIG51bWJlciBh
bmQgdGhlcmUgaXMgbm8gMzItYml0IHZhcmlhbnQgb2YgdGhlIFBBQyBpbnN0cnVjdGlvbnMuCi0g
ICAgbV9qaXQuemVyb0V4dGVuZDMyVG9QdHIoc2l6ZUdQUiwgc2NyYXRjaEdQUik7Ci0gICAgbV9q
aXQudGFnQXJyYXlQdHIoc2NyYXRjaEdQUiwgc3RvcmFnZUdQUik7Ci0jZW5kaWYKIAogICAgIGF1
dG8gYnV0dGVyZmx5ID0gVHJ1c3RlZEltbVB0cihudWxscHRyKTsKICAgICBlbWl0QWxsb2NhdGVK
U09iamVjdDxKU0FycmF5QnVmZmVyVmlldz4oCkBAIC05ODcxLDcgKzk4NDEsNyBAQCB2b2lkIFNw
ZWN1bGF0aXZlSklUOjpjb21waWxlTmV3VHlwZWRBcnJhCiAgICAgYWRkU2xvd1BhdGhHZW5lcmF0
b3Ioc2xvd1BhdGhDYWxsKAogICAgICAgICBzbG93Q2FzZXMsIHRoaXMsIG9wZXJhdGlvbk5ld1R5
cGVkQXJyYXlXaXRoU2l6ZUZvclR5cGUodHlwZWRBcnJheVR5cGUpLAogICAgICAgICByZXN1bHRH
UFIsIHN0cnVjdHVyZSwgc2l6ZUdQUiwgc3RvcmFnZUdQUikpOwotCisgICAgCiAgICAgY2VsbFJl
c3VsdChyZXN1bHRHUFIsIG5vZGUpOwogfQogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZGZnL0RGR1NwZWN1bGF0aXZlSklULmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVC5oCShyZXZpc2lvbiAyNDYyNzEpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklULmgJKHdvcmtpbmcgY29weSkKQEAg
LTE2NTIsNyArMTY1Miw3IEBAIHB1YmxpYzoKICAgICB0ZW1wbGF0ZTxib29sIHN0cmljdD4KICAg
ICBHUFJSZWcgZmlsbFNwZWN1bGF0ZUludDMySW50ZXJuYWwoRWRnZSwgRGF0YUZvcm1hdCYgcmV0
dXJuRm9ybWF0KTsKICAgICAKLSAgICB2b2lkIGNhZ2VUeXBlZEFycmF5U3RvcmFnZShHUFJSZWcs
IEdQUlJlZyk7CisgICAgdm9pZCBjYWdlVHlwZWRBcnJheVN0b3JhZ2UoR1BSUmVnKTsKICAgICAK
ICAgICB2b2lkIHJlY29yZFNldExvY2FsKAogICAgICAgICBWaXJ0dWFsUmVnaXN0ZXIgYnl0ZWNv
ZGVSZWcsIFZpcnR1YWxSZWdpc3RlciBtYWNoaW5lUmVnLCBEYXRhRm9ybWF0IGZvcm1hdCkKSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMTG93ZXJERkdUb0IzLmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTExvd2VyREZHVG9CMy5jcHAJKHJl
dmlzaW9uIDI0NjI3MSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMTG93ZXJERkdU
b0IzLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzg4Myw3ICszODgzLDcgQEAgcHJpdmF0ZToKIAog
ICAgICAgICBERkdfQVNTRVJUKG1fZ3JhcGgsIG1fbm9kZSwgaXNUeXBlZFZpZXcobV9ub2RlLT5h
cnJheU1vZGUoKS50eXBlZEFycmF5VHlwZSgpKSwgbV9ub2RlLT5hcnJheU1vZGUoKS50eXBlZEFy
cmF5VHlwZSgpKTsKICAgICAgICAgTFZhbHVlIHZlY3RvciA9IG1fb3V0LmxvYWRQdHIoY2VsbCwg
bV9oZWFwcy5KU0FycmF5QnVmZmVyVmlld192ZWN0b3IpOwotICAgICAgICBzZXRTdG9yYWdlKGNh
Z2VkKEdpZ2FjYWdlOjpQcmltaXRpdmUsIHZlY3RvciwgY2VsbCkpOworICAgICAgICBzZXRTdG9y
YWdlKGNhZ2VkKEdpZ2FjYWdlOjpQcmltaXRpdmUsIHZlY3RvcikpOwogICAgIH0KICAgICAKICAg
ICB2b2lkIGNvbXBpbGVDaGVja0FycmF5KCkKQEAgLTM5MjcsMTUgKzM5MjcsMTQgQEAgcHJpdmF0
ZToKIAogICAgICAgICBtX291dC5hcHBlbmRUbyhub3ROdWxsLCBjb250aW51YXRpb24pOwogCi0g
ICAgICAgIExWYWx1ZSBidXR0ZXJmbHlQdHIgPSBjYWdlZChHaWdhY2FnZTo6SlNWYWx1ZSwgbV9v
dXQubG9hZFB0cihiYXNlUHRyLCBtX2hlYXBzLkpTT2JqZWN0X2J1dHRlcmZseSksIGJhc2VQdHIp
OworICAgICAgICBMVmFsdWUgYnV0dGVyZmx5UHRyID0gY2FnZWQoR2lnYWNhZ2U6OkpTVmFsdWUs
IG1fb3V0LmxvYWRQdHIoYmFzZVB0ciwgbV9oZWFwcy5KU09iamVjdF9idXR0ZXJmbHkpKTsKICAg
ICAgICAgTFZhbHVlIGFycmF5QnVmZmVyUHRyID0gbV9vdXQubG9hZFB0cihidXR0ZXJmbHlQdHIs
IG1faGVhcHMuQnV0dGVyZmx5X2FycmF5QnVmZmVyKTsKIAotICAgICAgICBMVmFsdWUgdmVjdG9y
UHRyID0gY2FnZWQoR2lnYWNhZ2U6OlByaW1pdGl2ZSwgdmVjdG9yLCBiYXNlUHRyKTsKKyAgICAg
ICAgTFZhbHVlIHZlY3RvclB0ciA9IGNhZ2VkKEdpZ2FjYWdlOjpQcmltaXRpdmUsIHZlY3Rvcik7
CiAKICAgICAgICAgLy8gRklYTUU6IFRoaXMgbmVlZHMgY2FnaW5nLgogICAgICAgICAvLyBodHRw
czovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTc1NTE1CiAgICAgICAgIExWYWx1
ZSBkYXRhUHRyID0gbV9vdXQubG9hZFB0cihhcnJheUJ1ZmZlclB0ciwgbV9oZWFwcy5BcnJheUJ1
ZmZlcl9kYXRhKTsKLSAgICAgICAgZGF0YVB0ciA9IHJlbW92ZUFycmF5UHRyVGFnKGRhdGFQdHIp
OwogCiAgICAgICAgIFZhbHVlRnJvbUJsb2NrIHdhc3RlZnVsT3V0ID0gbV9vdXQuYW5jaG9yKG1f
b3V0LnN1Yih2ZWN0b3JQdHIsIGRhdGFQdHIpKTsKIApAQCAtNjQ4NSwyMCArNjQ4NCw2IEBAIHBy
aXZhdGU6CiAgICAgICAgICAgICAgICAgbV9vdXQuaW50NjRaZXJvLAogICAgICAgICAgICAgICAg
IG1faGVhcHMudHlwZWRBcnJheVByb3BlcnRpZXMpOwogCi0jaWYgIUdJR0FDQUdFX0VOQUJMRUQg
JiYgQ1BVKEFSTTY0RSkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBMVmFsdWUgc2l6
ZVB0ciA9IG1fb3V0Lnplcm9FeHRQdHIoc2l6ZSk7Ci0gICAgICAgICAgICAgICAgUGF0Y2hwb2lu
dFZhbHVlKiBhdXRoZW50aWNhdGUgPSBtX291dC5wYXRjaHBvaW50KHBvaW50ZXJUeXBlKCkpOwot
ICAgICAgICAgICAgICAgIGF1dGhlbnRpY2F0ZS0+YXBwZW5kU29tZVJlZ2lzdGVyKHN0b3JhZ2Up
OwotICAgICAgICAgICAgICAgIGF1dGhlbnRpY2F0ZS0+YXBwZW5kKHNpemVQdHIsIEIzOjpWYWx1
ZVJlcChCMzo6VmFsdWVSZXA6OlNvbWVMYXRlUmVnaXN0ZXIpKTsKLSAgICAgICAgICAgICAgICBh
dXRoZW50aWNhdGUtPnNldEdlbmVyYXRvcihbPV0gKENDYWxsSGVscGVycyYgaml0LCBjb25zdCBT
dGFja21hcEdlbmVyYXRpb25QYXJhbXMmIHBhcmFtcykgewotICAgICAgICAgICAgICAgICAgICBq
aXQubW92ZShwYXJhbXNbMV0uZ3ByKCksIHBhcmFtc1swXS5ncHIoKSk7Ci0gICAgICAgICAgICAg
ICAgICAgIGppdC50YWdBcnJheVB0cihwYXJhbXNbMl0uZ3ByKCksIHBhcmFtc1swXS5ncHIoKSk7
Ci0gICAgICAgICAgICAgICAgfSk7Ci0gICAgICAgICAgICAgICAgc3RvcmFnZSA9IGF1dGhlbnRp
Y2F0ZTsKLSAgICAgICAgICAgIH0KLSNlbmRpZgotCiAgICAgICAgICAgICBWYWx1ZUZyb21CbG9j
ayBoYXZlU3RvcmFnZSA9IG1fb3V0LmFuY2hvcihzdG9yYWdlKTsKIAogICAgICAgICAgICAgTFZh
bHVlIGZhc3RSZXN1bHRWYWx1ZSA9CkBAIC0xMjcxNyw3ICsxMjcwMiw3IEBAIHByaXZhdGU6CiAg
ICAgICAgICAgICBpbmRleFRvQ2hlY2sgPSBtX291dC5hZGQoaW5kZXhUb0NoZWNrLCBtX291dC5j
b25zdEludDY0KGRhdGEuYnl0ZVNpemUgLSAxKSk7CiAgICAgICAgIHNwZWN1bGF0ZShPdXRPZkJv
dW5kcywgbm9WYWx1ZSgpLCBudWxscHRyLCBtX291dC5hYm92ZU9yRXF1YWwoaW5kZXhUb0NoZWNr
LCBsZW5ndGgpKTsKIAotICAgICAgICBMVmFsdWUgdmVjdG9yID0gY2FnZWQoR2lnYWNhZ2U6OlBy
aW1pdGl2ZSwgbV9vdXQubG9hZFB0cihkYXRhVmlldywgbV9oZWFwcy5KU0FycmF5QnVmZmVyVmll
d192ZWN0b3IpLCBkYXRhVmlldyk7CisgICAgICAgIExWYWx1ZSB2ZWN0b3IgPSBjYWdlZChHaWdh
Y2FnZTo6UHJpbWl0aXZlLCBtX291dC5sb2FkUHRyKGRhdGFWaWV3LCBtX2hlYXBzLkpTQXJyYXlC
dWZmZXJWaWV3X3ZlY3RvcikpOwogCiAgICAgICAgIFR5cGVkUG9pbnRlciBwb2ludGVyKG1faGVh
cHMudHlwZWRBcnJheVByb3BlcnRpZXMsIG1fb3V0LmFkZCh2ZWN0b3IsIG1fb3V0Lnplcm9FeHRQ
dHIoaW5kZXgpKSk7CiAKQEAgLTEyODc2LDcgKzEyODYxLDcgQEAgcHJpdmF0ZToKICAgICAgICAg
ICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CiAgICAgICAgIH0KIAotICAgICAgICBM
VmFsdWUgdmVjdG9yID0gY2FnZWQoR2lnYWNhZ2U6OlByaW1pdGl2ZSwgbV9vdXQubG9hZFB0cihk
YXRhVmlldywgbV9oZWFwcy5KU0FycmF5QnVmZmVyVmlld192ZWN0b3IpLCBkYXRhVmlldyk7Cisg
ICAgICAgIExWYWx1ZSB2ZWN0b3IgPSBjYWdlZChHaWdhY2FnZTo6UHJpbWl0aXZlLCBtX291dC5s
b2FkUHRyKGRhdGFWaWV3LCBtX2hlYXBzLkpTQXJyYXlCdWZmZXJWaWV3X3ZlY3RvcikpOwogICAg
ICAgICBUeXBlZFBvaW50ZXIgcG9pbnRlcihtX2hlYXBzLnR5cGVkQXJyYXlQcm9wZXJ0aWVzLCBt
X291dC5hZGQodmVjdG9yLCBtX291dC56ZXJvRXh0UHRyKGluZGV4KSkpOwogCiAgICAgICAgIGlm
IChkYXRhLmlzRmxvYXRpbmdQb2ludCkgewpAQCAtMTQxMjMsNDIgKzE0MTA4LDEwIEBAIHByaXZh
dGU6CiAgICAgICAgICAgICBtX291dC5hcHBlbmRUbyhwZXJmb3JtU3RvcmUsIGxhc3ROZXh0KTsK
ICAgICAgICAgfQogICAgIH0KLQotICAgIExWYWx1ZSB1bnRhZ0FycmF5UHRyKExWYWx1ZSBwdHIs
IExWYWx1ZSBzaXplKQotICAgIHsKLSNpZiBDUFUoQVJNNjRFKQotICAgICAgICBQYXRjaHBvaW50
VmFsdWUqIGF1dGhlbnRpY2F0ZSA9IG1fb3V0LnBhdGNocG9pbnQocG9pbnRlclR5cGUoKSk7Ci0g
ICAgICAgIGF1dGhlbnRpY2F0ZS0+YXBwZW5kU29tZVJlZ2lzdGVyKHB0cik7Ci0gICAgICAgIGF1
dGhlbnRpY2F0ZS0+YXBwZW5kKHNpemUsIEIzOjpWYWx1ZVJlcChCMzo6VmFsdWVSZXA6OlNvbWVM
YXRlUmVnaXN0ZXIpKTsKLSAgICAgICAgYXV0aGVudGljYXRlLT5zZXRHZW5lcmF0b3IoWz1dIChD
Q2FsbEhlbHBlcnMmIGppdCwgY29uc3QgU3RhY2ttYXBHZW5lcmF0aW9uUGFyYW1zJiBwYXJhbXMp
IHsKLSAgICAgICAgICAgIGppdC5tb3ZlKHBhcmFtc1sxXS5ncHIoKSwgcGFyYW1zWzBdLmdwcigp
KTsKLSAgICAgICAgICAgIGppdC51bnRhZ0FycmF5UHRyKHBhcmFtc1syXS5ncHIoKSwgcGFyYW1z
WzBdLmdwcigpKTsKLSAgICAgICAgfSk7Ci0gICAgICAgIHJldHVybiBhdXRoZW50aWNhdGU7Ci0j
ZWxzZQotICAgICAgICBVTlVTRURfUEFSQU0oc2l6ZSk7Ci0gICAgICAgIHJldHVybiBwdHI7Ci0j
ZW5kaWYKLSAgICB9Ci0KLSAgICBMVmFsdWUgcmVtb3ZlQXJyYXlQdHJUYWcoTFZhbHVlIHB0cikK
LSAgICB7Ci0jaWYgQ1BVKEFSTTY0RSkKLSAgICAgICAgUGF0Y2hwb2ludFZhbHVlKiBhdXRoZW50
aWNhdGUgPSBtX291dC5wYXRjaHBvaW50KHBvaW50ZXJUeXBlKCkpOwotICAgICAgICBhdXRoZW50
aWNhdGUtPmFwcGVuZFNvbWVSZWdpc3RlcihwdHIpOwotICAgICAgICBhdXRoZW50aWNhdGUtPnNl
dEdlbmVyYXRvcihbPV0gKENDYWxsSGVscGVycyYgaml0LCBjb25zdCBTdGFja21hcEdlbmVyYXRp
b25QYXJhbXMmIHBhcmFtcykgewotICAgICAgICAgICAgaml0Lm1vdmUocGFyYW1zWzFdLmdwcigp
LCBwYXJhbXNbMF0uZ3ByKCkpOwotICAgICAgICAgICAgaml0LnJlbW92ZUFycmF5UHRyVGFnKHBh
cmFtc1swXS5ncHIoKSk7Ci0gICAgICAgIH0pOwotICAgICAgICByZXR1cm4gYXV0aGVudGljYXRl
OwotI2VuZGlmCi0gICAgICAgIHJldHVybiBwdHI7Ci0gICAgfQotCi0gICAgTFZhbHVlIGNhZ2Vk
KEdpZ2FjYWdlOjpLaW5kIGtpbmQsIExWYWx1ZSBwdHIsIExWYWx1ZSBiYXNlKQorICAgIAorICAg
IExWYWx1ZSBjYWdlZChHaWdhY2FnZTo6S2luZCBraW5kLCBMVmFsdWUgcHRyKQogICAgIHsKICNp
ZiBHSUdBQ0FHRV9FTkFCTEVECi0gICAgICAgIFVOVVNFRF9QQVJBTShiYXNlKTsKICAgICAgICAg
aWYgKCFHaWdhY2FnZTo6aXNFbmFibGVkKGtpbmQpKQogICAgICAgICAgICAgcmV0dXJuIHB0cjsK
ICAgICAgICAgCkBAIC0xNDE4NywxNiArMTQxNDAsOCBAQCBwcml2YXRlOgogICAgICAgICAvLyBh
bmQgcG9zc2libHkgb3RoZXIgc21hcnQgdGhpbmdzIGlmIHdlIHdhbnQgdG8gYmUgYWJsZSB0byBy
ZW1vdmUgdGhpcyBvcGFxdWUuCiAgICAgICAgIC8vIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3No
b3dfYnVnLmNnaT9pZD0xNzU0OTMKICAgICAgICAgcmV0dXJuIG1fb3V0Lm9wYXF1ZShyZXN1bHQp
OwotI2VsaWYgQ1BVKEFSTTY0RSkKLSAgICAgICAgaWYgKGtpbmQgPT0gR2lnYWNhZ2U6OlByaW1p
dGl2ZSkgewotICAgICAgICAgICAgTFZhbHVlIHNpemUgPSBtX291dC5sb2FkMzIoYmFzZSwgbV9o
ZWFwcy5KU0FycmF5QnVmZmVyVmlld19sZW5ndGgpOwotICAgICAgICAgICAgcmV0dXJuIHVudGFn
QXJyYXlQdHIocHRyLCBzaXplKTsKLSAgICAgICAgfQotCi0gICAgICAgIHJldHVybiBwdHI7CiAj
ZWxzZQogICAgICAgICBVTlVTRURfUEFSQU0oa2luZCk7Ci0gICAgICAgIFVOVVNFRF9QQVJBTShi
YXNlKTsKICAgICAgICAgcmV0dXJuIHB0cjsKICNlbmRpZgogICAgIH0KQEAgLTE2NjEwLDkgKzE2
NTU1LDYgQEAgcHJpdmF0ZToKIAogICAgICAgICBMQmFzaWNCbG9jayBsYXN0TmV4dCA9IG1fb3V0
LmFwcGVuZFRvKGlzV2FzdGVmdWwsIGNvbnRpbnVhdGlvbik7CiAgICAgICAgIExWYWx1ZSB2ZWN0
b3IgPSBtX291dC5sb2FkUHRyKGJhc2UsIG1faGVhcHMuSlNBcnJheUJ1ZmZlclZpZXdfdmVjdG9y
KTsKLSAgICAgICAgLy8gRklYTUU6IFdlIGNvdWxkIHByb2JhYmx5IG1ha2UgdGhpcyBhIG1hc2su
Ci0gICAgICAgIC8vIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xOTc3
MDEKLSAgICAgICAgdmVjdG9yID0gcmVtb3ZlQXJyYXlQdHJUYWcodmVjdG9yKTsKICAgICAgICAg
c3BlY3VsYXRlKFVuY291bnRhYmxlLCBqc1ZhbHVlVmFsdWUodmVjdG9yKSwgbV9ub2RlLCBtX291
dC5pc1plcm82NCh2ZWN0b3IpKTsKICAgICAgICAgbV9vdXQuanVtcChjb250aW51YXRpb24pOwog
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9Db25zZXJ2YXRpdmVSb290cy5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvQ29uc2VydmF0aXZlUm9v
dHMuY3BwCShyZXZpc2lvbiAyNDYyNzEpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9D
b25zZXJ2YXRpdmVSb290cy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTY4LDcgKzY4LDYgQEAgdm9p
ZCBDb25zZXJ2YXRpdmVSb290czo6Z3JvdygpCiB0ZW1wbGF0ZTx0eXBlbmFtZSBNYXJrSG9vaz4K
IGlubGluZSB2b2lkIENvbnNlcnZhdGl2ZVJvb3RzOjpnZW5lcmljQWRkUG9pbnRlcih2b2lkKiBw
LCBIZWFwVmVyc2lvbiBtYXJraW5nVmVyc2lvbiwgSGVhcFZlcnNpb24gbmV3bHlBbGxvY2F0ZWRW
ZXJzaW9uLCBUaW55Qmxvb21GaWx0ZXIgZmlsdGVyLCBNYXJrSG9vayYgbWFya0hvb2spCiB7Ci0g
ICAgcCA9IHJlbW92ZUFycmF5UHRyVGFnKHApOwogICAgIG1hcmtIb29rLm1hcmsocCk7CiAKICAg
ICBIZWFwVXRpbDo6ZmluZEdDT2JqZWN0UG9pbnRlcnNGb3JNYXJraW5nKApJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL2ppdC9Bc3NlbWJseUhlbHBlcnMuaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvaml0L0Fzc2VtYmx5SGVscGVycy5oCShyZXZpc2lvbiAyNDYyNzEp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0Fzc2VtYmx5SGVscGVycy5oCSh3b3JraW5n
IGNvcHkpCkBAIC0xNTY5LDcgKzE1NjksNyBAQCBwdWJsaWM6CiAjZW5kaWYKICAgICB9CiAgICAg
Ci0gICAgdm9pZCBjYWdlQ29uZGl0aW9uYWxseShHaWdhY2FnZTo6S2luZCBraW5kLCBHUFJSZWcg
c3RvcmFnZSwgR1BSUmVnIHNjcmF0Y2hPckxlbmd0aCkKKyAgICB2b2lkIGNhZ2VDb25kaXRpb25h
bGx5KEdpZ2FjYWdlOjpLaW5kIGtpbmQsIEdQUlJlZyBzdG9yYWdlLCBHUFJSZWcgc2NyYXRjaCkK
ICAgICB7CiAjaWYgR0lHQUNBR0VfRU5BQkxFRAogICAgICAgICBpZiAoIUdpZ2FjYWdlOjppc0Vu
YWJsZWQoa2luZCkpCkBAIC0xNTc4LDE4ICsxNTc4LDE1IEBAIHB1YmxpYzoKICAgICAgICAgaWYg
KGtpbmQgIT0gR2lnYWNhZ2U6OlByaW1pdGl2ZSB8fCBHaWdhY2FnZTo6aXNEaXNhYmxpbmdQcmlt
aXRpdmVHaWdhY2FnZURpc2FibGVkKCkpCiAgICAgICAgICAgICByZXR1cm4gY2FnZShraW5kLCBz
dG9yYWdlKTsKICAgICAgICAgCi0gICAgICAgIGxvYWRQdHIoJkdpZ2FjYWdlOjpiYXNlUHRyKGtp
bmQpLCBzY3JhdGNoT3JMZW5ndGgpOwotICAgICAgICBKdW1wIGRvbmUgPSBicmFuY2hUZXN0UHRy
KFplcm8sIHNjcmF0Y2hPckxlbmd0aCk7CisgICAgICAgIGxvYWRQdHIoJkdpZ2FjYWdlOjpiYXNl
UHRyKGtpbmQpLCBzY3JhdGNoKTsKKyAgICAgICAgSnVtcCBkb25lID0gYnJhbmNoVGVzdFB0ciha
ZXJvLCBzY3JhdGNoKTsKICAgICAgICAgYW5kUHRyKFRydXN0ZWRJbW1QdHIoR2lnYWNhZ2U6Om1h
c2soa2luZCkpLCBzdG9yYWdlKTsKLSAgICAgICAgYWRkUHRyKHNjcmF0Y2hPckxlbmd0aCwgc3Rv
cmFnZSk7CisgICAgICAgIGFkZFB0cihzY3JhdGNoLCBzdG9yYWdlKTsKICAgICAgICAgZG9uZS5s
aW5rKHRoaXMpOwotI2VsaWYgQ1BVKEFSTTY0RSkKLSAgICAgICAgaWYgKGtpbmQgPT0gR2lnYWNh
Z2U6OlByaW1pdGl2ZSkKLSAgICAgICAgICAgIHVudGFnQXJyYXlQdHIoc2NyYXRjaE9yTGVuZ3Ro
LCBzdG9yYWdlKTsKICNlbHNlCiAgICAgICAgIFVOVVNFRF9QQVJBTShraW5kKTsKICAgICAgICAg
VU5VU0VEX1BBUkFNKHN0b3JhZ2UpOwotICAgICAgICBVTlVTRURfUEFSQU0oc2NyYXRjaE9yTGVu
Z3RoKTsKKyAgICAgICAgVU5VU0VEX1BBUkFNKHNjcmF0Y2gpOwogI2VuZGlmCiAgICAgfQogCklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0ludHJpbnNpY0VtaXR0ZXIuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSW50cmluc2ljRW1pdHRlci5jcHAJ
KHJldmlzaW9uIDI0NjI3MSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSW50cmluc2lj
RW1pdHRlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTExNCwxNCArMTE0LDggQEAgdm9pZCBJbnRy
aW5zaWNHZXR0ZXJBY2Nlc3NDYXNlOjplbWl0SW50cgogCiAgICAgICAgIGppdC5sb2FkUHRyKE1h
Y3JvQXNzZW1ibGVyOjpBZGRyZXNzKGJhc2VHUFIsIEpTT2JqZWN0OjpidXR0ZXJmbHlPZmZzZXQo
KSksIHNjcmF0Y2hHUFIpOwogICAgICAgICBqaXQubG9hZFB0cihNYWNyb0Fzc2VtYmxlcjo6QWRk
cmVzcyhiYXNlR1BSLCBKU0FycmF5QnVmZmVyVmlldzo6b2Zmc2V0T2ZWZWN0b3IoKSksIHZhbHVl
R1BSKTsKLSNpZiBDUFUoQVJNNjRFKQotICAgICAgICBqaXQucmVtb3ZlQXJyYXlQdHJUYWcodmFs
dWVHUFIpOwotI2VuZGlmCiAgICAgICAgIGppdC5sb2FkUHRyKE1hY3JvQXNzZW1ibGVyOjpBZGRy
ZXNzKHNjcmF0Y2hHUFIsIEJ1dHRlcmZseTo6b2Zmc2V0T2ZBcnJheUJ1ZmZlcigpKSwgc2NyYXRj
aEdQUik7CiAgICAgICAgIGppdC5sb2FkUHRyKE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKHNjcmF0
Y2hHUFIsIEFycmF5QnVmZmVyOjpvZmZzZXRPZkRhdGEoKSksIHNjcmF0Y2hHUFIpOwotI2lmIENQ
VShBUk02NEUpCi0gICAgICAgIGppdC5yZW1vdmVBcnJheVB0clRhZyhzY3JhdGNoR1BSKTsKLSNl
bmRpZgogICAgICAgICBqaXQuc3ViUHRyKHNjcmF0Y2hHUFIsIHZhbHVlR1BSKTsKIAogICAgICAg
ICBDQ2FsbEhlbHBlcnM6Okp1bXAgZG9uZSA9IGppdC5qdW1wKCk7CkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvaml0L0pJVFByb3BlcnR5QWNjZXNzLmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVFByb3BlcnR5QWNjZXNzLmNwcAkocmV2aXNpb24gMjQ2
MjcxKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRQcm9wZXJ0eUFjY2Vzcy5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTE1ODksNyArMTU4OSw3IEBAIEpJVDo6SnVtcExpc3QgSklUOjpl
bWl0RGlyZWN0QXJndW1lbnRzR2UKICAgICBsb2FkMzIoQWRkcmVzcyhiYXNlLCBEaXJlY3RBcmd1
bWVudHM6Om9mZnNldE9mTGVuZ3RoKCkpLCBzY3JhdGNoMik7CiAgICAgc2xvd0Nhc2VzLmFwcGVu
ZChicmFuY2gzMihBYm92ZU9yRXF1YWwsIHByb3BlcnR5LCBzY3JhdGNoMikpOwogICAgIHNsb3dD
YXNlcy5hcHBlbmQoYnJhbmNoVGVzdFB0cihOb25aZXJvLCBBZGRyZXNzKGJhc2UsIERpcmVjdEFy
Z3VtZW50czo6b2Zmc2V0T2ZNYXBwZWRBcmd1bWVudHMoKSkpKTsKLQorICAgIAogICAgIGxvYWRW
YWx1ZShCYXNlSW5kZXgoYmFzZSwgcHJvcGVydHksIFRpbWVzRWlnaHQsIERpcmVjdEFyZ3VtZW50
czo6c3RvcmFnZU9mZnNldCgpKSwgcmVzdWx0KTsKICAgICAKICAgICByZXR1cm4gc2xvd0Nhc2Vz
OwpAQCAtMTY2OSw4ICsxNjY5LDcgQEAgSklUOjpKdW1wTGlzdCBKSVQ6OmVtaXRJbnRUeXBlZEFy
cmF5R2V0QgogICAgIAogICAgIGxvYWQ4KEFkZHJlc3MoYmFzZSwgSlNDZWxsOjp0eXBlSW5mb1R5
cGVPZmZzZXQoKSksIHNjcmF0Y2gpOwogICAgIGJhZFR5cGUgPSBwYXRjaGFibGVCcmFuY2gzMihO
b3RFcXVhbCwgc2NyYXRjaCwgVHJ1c3RlZEltbTMyKHR5cGVGb3JUeXBlZEFycmF5VHlwZSh0eXBl
KSkpOwotICAgIGxvYWQzMihBZGRyZXNzKGJhc2UsIEpTQXJyYXlCdWZmZXJWaWV3OjpvZmZzZXRP
Zkxlbmd0aCgpKSwgc2NyYXRjaDIpOwotICAgIHNsb3dDYXNlcy5hcHBlbmQoYnJhbmNoMzIoQWJv
dmVPckVxdWFsLCBwcm9wZXJ0eSwgc2NyYXRjaDIpKTsKKyAgICBzbG93Q2FzZXMuYXBwZW5kKGJy
YW5jaDMyKEFib3ZlT3JFcXVhbCwgcHJvcGVydHksIEFkZHJlc3MoYmFzZSwgSlNBcnJheUJ1ZmZl
clZpZXc6Om9mZnNldE9mTGVuZ3RoKCkpKSk7CiAgICAgbG9hZFB0cihBZGRyZXNzKGJhc2UsIEpT
QXJyYXlCdWZmZXJWaWV3OjpvZmZzZXRPZlZlY3RvcigpKSwgc2NyYXRjaCk7CiAgICAgY2FnZUNv
bmRpdGlvbmFsbHkoR2lnYWNhZ2U6OlByaW1pdGl2ZSwgc2NyYXRjaCwgc2NyYXRjaDIpOwogCkBA
IC0xNzMzLDggKzE3MzIsNyBAQCBKSVQ6Okp1bXBMaXN0IEpJVDo6ZW1pdEZsb2F0VHlwZWRBcnJh
eUdlCiAKICAgICBsb2FkOChBZGRyZXNzKGJhc2UsIEpTQ2VsbDo6dHlwZUluZm9UeXBlT2Zmc2V0
KCkpLCBzY3JhdGNoKTsKICAgICBiYWRUeXBlID0gcGF0Y2hhYmxlQnJhbmNoMzIoTm90RXF1YWws
IHNjcmF0Y2gsIFRydXN0ZWRJbW0zMih0eXBlRm9yVHlwZWRBcnJheVR5cGUodHlwZSkpKTsKLSAg
ICBsb2FkMzIoQWRkcmVzcyhiYXNlLCBKU0FycmF5QnVmZmVyVmlldzo6b2Zmc2V0T2ZMZW5ndGgo
KSksIHNjcmF0Y2gyKTsKLSAgICBzbG93Q2FzZXMuYXBwZW5kKGJyYW5jaDMyKEFib3ZlT3JFcXVh
bCwgcHJvcGVydHksIHNjcmF0Y2gyKSk7CisgICAgc2xvd0Nhc2VzLmFwcGVuZChicmFuY2gzMihB
Ym92ZU9yRXF1YWwsIHByb3BlcnR5LCBBZGRyZXNzKGJhc2UsIEpTQXJyYXlCdWZmZXJWaWV3Ojpv
ZmZzZXRPZkxlbmd0aCgpKSkpOwogICAgIGxvYWRQdHIoQWRkcmVzcyhiYXNlLCBKU0FycmF5QnVm
ZmVyVmlldzo6b2Zmc2V0T2ZWZWN0b3IoKSksIHNjcmF0Y2gpOwogICAgIGNhZ2VDb25kaXRpb25h
bGx5KEdpZ2FjYWdlOjpQcmltaXRpdmUsIHNjcmF0Y2gsIHNjcmF0Y2gyKTsKICAgICAKQEAgLTE3
ODQsOCArMTc4Miw3IEBAIEpJVDo6SnVtcExpc3QgSklUOjplbWl0SW50VHlwZWRBcnJheVB1dEIK
ICAgICAKICAgICBsb2FkOChBZGRyZXNzKGJhc2UsIEpTQ2VsbDo6dHlwZUluZm9UeXBlT2Zmc2V0
KCkpLCBlYXJseVNjcmF0Y2gpOwogICAgIGJhZFR5cGUgPSBwYXRjaGFibGVCcmFuY2gzMihOb3RF
cXVhbCwgZWFybHlTY3JhdGNoLCBUcnVzdGVkSW1tMzIodHlwZUZvclR5cGVkQXJyYXlUeXBlKHR5
cGUpKSk7Ci0gICAgbG9hZDMyKEFkZHJlc3MoYmFzZSwgSlNBcnJheUJ1ZmZlclZpZXc6Om9mZnNl
dE9mTGVuZ3RoKCkpLCBsYXRlU2NyYXRjaDIpOwotICAgIEp1bXAgaW5Cb3VuZHMgPSBicmFuY2gz
MihCZWxvdywgcHJvcGVydHksIGxhdGVTY3JhdGNoMik7CisgICAgSnVtcCBpbkJvdW5kcyA9IGJy
YW5jaDMyKEJlbG93LCBwcm9wZXJ0eSwgQWRkcmVzcyhiYXNlLCBKU0FycmF5QnVmZmVyVmlldzo6
b2Zmc2V0T2ZMZW5ndGgoKSkpOwogICAgIGVtaXRBcnJheVByb2ZpbGVPdXRPZkJvdW5kc1NwZWNp
YWxDYXNlKHByb2ZpbGUpOwogICAgIHNsb3dDYXNlcy5hcHBlbmQoanVtcCgpKTsKICAgICBpbkJv
dW5kcy5saW5rKHRoaXMpOwpAQCAtMTg2MCw4ICsxODU3LDcgQEAgSklUOjpKdW1wTGlzdCBKSVQ6
OmVtaXRGbG9hdFR5cGVkQXJyYXlQdQogICAgIAogICAgIGxvYWQ4KEFkZHJlc3MoYmFzZSwgSlND
ZWxsOjp0eXBlSW5mb1R5cGVPZmZzZXQoKSksIGVhcmx5U2NyYXRjaCk7CiAgICAgYmFkVHlwZSA9
IHBhdGNoYWJsZUJyYW5jaDMyKE5vdEVxdWFsLCBlYXJseVNjcmF0Y2gsIFRydXN0ZWRJbW0zMih0
eXBlRm9yVHlwZWRBcnJheVR5cGUodHlwZSkpKTsKLSAgICBsb2FkMzIoQWRkcmVzcyhiYXNlLCBK
U0FycmF5QnVmZmVyVmlldzo6b2Zmc2V0T2ZMZW5ndGgoKSksIGxhdGVTY3JhdGNoMik7Ci0gICAg
SnVtcCBpbkJvdW5kcyA9IGJyYW5jaDMyKEJlbG93LCBwcm9wZXJ0eSwgbGF0ZVNjcmF0Y2gyKTsK
KyAgICBKdW1wIGluQm91bmRzID0gYnJhbmNoMzIoQmVsb3csIHByb3BlcnR5LCBBZGRyZXNzKGJh
c2UsIEpTQXJyYXlCdWZmZXJWaWV3OjpvZmZzZXRPZkxlbmd0aCgpKSk7CiAgICAgZW1pdEFycmF5
UHJvZmlsZU91dE9mQm91bmRzU3BlY2lhbENhc2UocHJvZmlsZSk7CiAgICAgc2xvd0Nhc2VzLmFw
cGVuZChqdW1wKCkpOwogICAgIGluQm91bmRzLmxpbmsodGhpcyk7CkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvaml0L1BvbHltb3JwaGljQ2FsbFN0dWJSb3V0aW5lLmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L1BvbHltb3JwaGljQ2FsbFN0dWJSb3V0aW5l
LmNwcAkocmV2aXNpb24gMjQ2MjcxKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9Qb2x5
bW9ycGhpY0NhbGxTdHViUm91dGluZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTU3LDYgKzU3LDkg
QEAgdm9pZCBQb2x5bW9ycGhpY0NhbGxOb2RlOjp1bmxpbmsoVk0mIHZtKQogCiB2b2lkIFBvbHlt
b3JwaGljQ2FsbE5vZGU6OmNsZWFyQ2FsbExpbmtJbmZvKCkKIHsKKyAgICBpZiAoT3B0aW9uczo6
ZHVtcERpc2Fzc2VtYmx5KCkpCisgICAgICAgIGRhdGFMb2coIkNsZWFyaW5nIGNhbGwgbGluayBp
bmZvIGZvciBwb2x5bW9ycGhpYyBjYWxsIGF0ICIsIG1fY2FsbExpbmtJbmZvLT5jYWxsUmV0dXJu
TG9jYXRpb24oKSwgIiwgIiwgbV9jYWxsTGlua0luZm8tPmNvZGVPcmlnaW4oKSwgIlxuIik7CisK
ICAgICBtX2NhbGxMaW5rSW5mbyA9IG51bGxwdHI7CiB9CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9qaXQvUmVnaXN0ZXJTZXQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvaml0L1JlZ2lzdGVyU2V0LmgJKHJldmlzaW9uIDI0NjI3MSkKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9qaXQvUmVnaXN0ZXJTZXQuaAkod29ya2luZyBjb3B5KQpAQCAtODQsOSArODQs
NyBAQCBwdWJsaWM6CiAgICAgICAgICAgICBzZXQocmVncy50YWdHUFIoKSwgdmFsdWUpOwogICAg
ICAgICBzZXQocmVncy5wYXlsb2FkR1BSKCksIHZhbHVlKTsKICAgICB9Ci0KLSAgICB2b2lkIHNl
dChjb25zdCBSZWdpc3RlclNldCYgb3RoZXIsIGJvb2wgdmFsdWUgPSB0cnVlKSB7IHZhbHVlID8g
bWVyZ2Uob3RoZXIpIDogZXhjbHVkZShvdGhlcik7IH0KLQorICAgIAogICAgIHZvaWQgY2xlYXIo
UmVnIHJlZykKICAgICB7CiAgICAgICAgIEFTU0VSVCghIXJlZyk7CkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvbGxpbnQvTG93TGV2ZWxJbnRlcnByZXRlcjY0LmFzbQo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvbGxpbnQvTG93TGV2ZWxJbnRlcnByZXRlcjY0LmFzbQko
cmV2aXNpb24gMjQ2MjcxKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2xsaW50L0xvd0xldmVs
SW50ZXJwcmV0ZXI2NC5hc20JKHdvcmtpbmcgY29weSkKQEAgLTQyMiwyOSArNDIyLDIwIEBAIG1h
Y3JvIGNoZWNrU3dpdGNoVG9KSVRGb3JMb29wKCkKICAgICAgICAgZW5kKQogZW5kCiAKLW1hY3Jv
IHVuY2FnZShiYXNlUHRyLCBtYXNrLCBwdHIsIHNjcmF0Y2hPckxlbmd0aCkKLSAgICBpZiBHSUdB
Q0FHRV9FTkFCTEVEIGFuZCBub3QgKENfTE9PUCBvciBDX0xPT1BfV0lOKQotICAgICAgICBsb2Fk
cCBiYXNlUHRyLCBzY3JhdGNoT3JMZW5ndGgKLSAgICAgICAgYnRweiBzY3JhdGNoT3JMZW5ndGgs
IC5kb25lCittYWNybyB1bmNhZ2UoYmFzZVB0ciwgbWFzaywgcHRyLCBzY3JhdGNoKQorICAgIGlm
IEdJR0FDQUdFX0VOQUJMRUQgYW5kIG5vdCBDX0xPT1AKKyAgICAgICAgbG9hZHAgYmFzZVB0ciwg
c2NyYXRjaAorICAgICAgICBidHB6IHNjcmF0Y2gsIC5kb25lCiAgICAgICAgIGFuZHAgbWFzaywg
cHRyCi0gICAgICAgIGFkZHAgc2NyYXRjaE9yTGVuZ3RoLCBwdHIKLSAgICAuZG9uZToKLSAgICBl
bmQKLWVuZAotCi1tYWNybyBsb2FkQ2FnZWRQcmltaXRpdmUoc291cmNlLCBkZXN0LCBzY3JhdGNo
T3JMZW5ndGgpCi0gICAgbG9hZHAgc291cmNlLCBkZXN0Ci0gICAgaWYgR0lHQUNBR0VfRU5BQkxF
RAotICAgICAgICB1bmNhZ2UoX2dfZ2lnYWNhZ2VCYXNlUHRycyArIEdpZ2FjYWdlOjpCYXNlUHRy
czo6cHJpbWl0aXZlLCBjb25zdGV4cHIgR2lnYWNhZ2U6OnByaW1pdGl2ZUdpZ2FjYWdlTWFzaywg
ZGVzdCwgc2NyYXRjaE9yTGVuZ3RoKQotICAgIGVsc2lmIEFSTTY0RQotICAgICAgICB1bnRhZ0Fy
cmF5UHRyIHNjcmF0Y2hPckxlbmd0aCwgZGVzdAorICAgICAgICBhZGRwIHNjcmF0Y2gsIHB0cgor
ICAgICAgICAuZG9uZToKICAgICBlbmQKIGVuZAogCi1tYWNybyBsb2FkQ2FnZWRKU1ZhbHVlKHNv
dXJjZSwgZGVzdCwgc2NyYXRjaE9yTGVuZ3RoKQorbWFjcm8gbG9hZENhZ2VkKGJhc2VQdHIsIG1h
c2ssIHNvdXJjZSwgZGVzdCwgc2NyYXRjaCkKICAgICBsb2FkcCBzb3VyY2UsIGRlc3QKLSAgICB1
bmNhZ2UoX2dfZ2lnYWNhZ2VCYXNlUHRycyArIEdpZ2FjYWdlOjpCYXNlUHRyczo6anNWYWx1ZSwg
Y29uc3RleHByIEdpZ2FjYWdlOjpqc1ZhbHVlR2lnYWNhZ2VNYXNrLCBkZXN0LCBzY3JhdGNoT3JM
ZW5ndGgpCi1lbmQKKyAgICB1bmNhZ2UoYmFzZVB0ciwgbWFzaywgZGVzdCwgc2NyYXRjaCkKKyBl
bmQKIAogbWFjcm8gbG9hZFZhcmlhYmxlKGdldCwgZmllbGROYW1lLCB2YWx1ZVJlZykKICAgICBn
ZXQoZmllbGROYW1lLCB2YWx1ZVJlZykKQEAgLTEzNDQsNyArMTMzNSw3IEBAIGxsaW50T3BXaXRo
TWV0YWRhdGEob3BfZ2V0X2J5X2lkLCBPcEdldEIKICAgICBhcnJheVByb2ZpbGUoT3BHZXRCeUlk
OjpNZXRhZGF0YTo6bV9tb2RlTWV0YWRhdGEuYXJyYXlMZW5ndGhNb2RlLmFycmF5UHJvZmlsZSwg
dDAsIHQyLCB0NSkKICAgICBidGl6IHQwLCBJc0FycmF5LCAub3BHZXRCeUlkU2xvdwogICAgIGJ0
aXogdDAsIEluZGV4aW5nU2hhcGVNYXNrLCAub3BHZXRCeUlkU2xvdwotICAgIGxvYWRDYWdlZEpT
VmFsdWUoSlNPYmplY3Q6Om1fYnV0dGVyZmx5W3QzXSwgdDAsIHQxKQorICAgIGxvYWRDYWdlZChf
Z19naWdhY2FnZUJhc2VQdHJzICsgR2lnYWNhZ2U6OkJhc2VQdHJzOjpqc1ZhbHVlLCBjb25zdGV4
cHIgR2lnYWNhZ2U6OmpzVmFsdWVHaWdhY2FnZU1hc2ssIEpTT2JqZWN0OjptX2J1dHRlcmZseVt0
M10sIHQwLCB0MSkKICAgICBsb2FkaSAtc2l6ZW9mIEluZGV4aW5nSGVhZGVyICsgSW5kZXhpbmdI
ZWFkZXI6OnUubGVuZ3Rocy5wdWJsaWNMZW5ndGhbdDBdLCB0MAogICAgIGJpbHQgdDAsIDAsIC5v
cEdldEJ5SWRTbG93CiAgICAgb3JxIHRhZ1R5cGVOdW1iZXIsIHQwCkBAIC0xNDY3LDcgKzE0NTgs
NyBAQCBsbGludE9wV2l0aE1ldGFkYXRhKG9wX2dldF9ieV92YWwsIE9wR2V0CiAgICAgbG9hZENv
bnN0YW50T3JWYXJpYWJsZUludDMyKHNpemUsIHQzLCB0MSwgLm9wR2V0QnlWYWxTbG93KQogICAg
IHN4aTJxIHQxLCB0MQogCi0gICAgbG9hZENhZ2VkSlNWYWx1ZShKU09iamVjdDo6bV9idXR0ZXJm
bHlbdDBdLCB0MywgdGFnVHlwZU51bWJlcikKKyAgICBsb2FkQ2FnZWQoX2dfZ2lnYWNhZ2VCYXNl
UHRycyArIEdpZ2FjYWdlOjpCYXNlUHRyczo6anNWYWx1ZSwgY29uc3RleHByIEdpZ2FjYWdlOjpq
c1ZhbHVlR2lnYWNhZ2VNYXNrLCBKU09iamVjdDo6bV9idXR0ZXJmbHlbdDBdLCB0MywgdGFnVHlw
ZU51bWJlcikKICAgICBtb3ZlIFRhZ1R5cGVOdW1iZXIsIHRhZ1R5cGVOdW1iZXIKIAogICAgIGFu
ZGkgSW5kZXhpbmdTaGFwZU1hc2ssIHQyCkBAIC0xNTExLDE3ICsxNTAyLDcgQEAgbGxpbnRPcFdp
dGhNZXRhZGF0YShvcF9nZXRfYnlfdmFsLCBPcEdldAogICAgIGJpYWVxIHQyLCBOdW1iZXJPZlR5
cGVkQXJyYXlUeXBlc0V4Y2x1ZGluZ0RhdGFWaWV3LCAub3BHZXRCeVZhbFNsb3cKICAgICAKICAg
ICAjIFN3ZWV0LCBub3cgd2Uga25vdyB0aGF0IHdlIGhhdmUgYSB0eXBlZCBhcnJheS4gRG8gc29t
ZSBiYXNpYyB0aGluZ3Mgbm93LgotCi0gICAgaWYgQVJNNjRFCi0gICAgICAgIGNvbnN0IHNjcmF0
Y2hPckxlbmd0aCA9IHQ2Ci0gICAgICAgIGxvYWRpIEpTQXJyYXlCdWZmZXJWaWV3OjptX2xlbmd0
aFt0MF0sIHNjcmF0Y2hPckxlbmd0aAotICAgICAgICBiaWFlcSB0MSwgc2NyYXRjaE9yTGVuZ3Ro
LCAub3BHZXRCeVZhbFNsb3cKLSAgICBlbHNlCi0gICAgICAgIGNvbnN0IHNjcmF0Y2hPckxlbmd0
aCA9IHQwCi0gICAgICAgIGJpYWVxIHQxLCBKU0FycmF5QnVmZmVyVmlldzo6bV9sZW5ndGhbdDBd
LCAub3BHZXRCeVZhbFNsb3cKLSAgICBlbmQKLQotICAgIGxvYWRDYWdlZFByaW1pdGl2ZShKU0Fy
cmF5QnVmZmVyVmlldzo6bV92ZWN0b3JbdDBdLCB0Mywgc2NyYXRjaE9yTGVuZ3RoKQorICAgIGJp
YWVxIHQxLCBKU0FycmF5QnVmZmVyVmlldzo6bV9sZW5ndGhbdDBdLCAub3BHZXRCeVZhbFNsb3cK
IAogICAgICMgTm93IGJpc2VjdCB0aHJvdWdoIHRoZSB2YXJpb3VzIHR5cGVzOgogICAgICMgICAg
SW50OEFycmF5VHlwZSwKQEAgLTE1NDMsNiArMTUyNCw3IEBAIGxsaW50T3BXaXRoTWV0YWRhdGEo
b3BfZ2V0X2J5X3ZhbCwgT3BHZXQKICAgICBiaWEgdDIsIEludDhBcnJheVR5cGUgLSBGaXJzdFR5
cGVkQXJyYXlUeXBlLCAub3BHZXRCeVZhbFVpbnQ4QXJyYXlPclVpbnQ4Q2xhbXBlZEFycmF5CiAK
ICAgICAjIFdlIGhhdmUgSW50OEFycmF5VHlwZS4KKyAgICBsb2FkQ2FnZWQoX2dfZ2lnYWNhZ2VC
YXNlUHRycyArIEdpZ2FjYWdlOjpCYXNlUHRyczo6cHJpbWl0aXZlLCBjb25zdGV4cHIgR2lnYWNh
Z2U6OnByaW1pdGl2ZUdpZ2FjYWdlTWFzaywgSlNBcnJheUJ1ZmZlclZpZXc6Om1fdmVjdG9yW3Qw
XSwgdDMsIHQyKQogICAgIGxvYWRic2kgW3QzLCB0MV0sIHQwCiAgICAgZmluaXNoSW50R2V0QnlW
YWwodDAsIHQxKQogCkBAIC0xNTUwLDExICsxNTMyLDEzIEBAIGxsaW50T3BXaXRoTWV0YWRhdGEo
b3BfZ2V0X2J5X3ZhbCwgT3BHZXQKICAgICBiaWEgdDIsIFVpbnQ4QXJyYXlUeXBlIC0gRmlyc3RU
eXBlZEFycmF5VHlwZSwgLm9wR2V0QnlWYWxVaW50OENsYW1wZWRBcnJheQogCiAgICAgIyBXZSBo
YXZlIFVpbnQ4QXJyYXlUeXBlLgorICAgIGxvYWRDYWdlZChfZ19naWdhY2FnZUJhc2VQdHJzICsg
R2lnYWNhZ2U6OkJhc2VQdHJzOjpwcmltaXRpdmUsIGNvbnN0ZXhwciBHaWdhY2FnZTo6cHJpbWl0
aXZlR2lnYWNhZ2VNYXNrLCBKU0FycmF5QnVmZmVyVmlldzo6bV92ZWN0b3JbdDBdLCB0MywgdDIp
CiAgICAgbG9hZGIgW3QzLCB0MV0sIHQwCiAgICAgZmluaXNoSW50R2V0QnlWYWwodDAsIHQxKQog
CiAub3BHZXRCeVZhbFVpbnQ4Q2xhbXBlZEFycmF5OgogICAgICMgV2UgaGF2ZSBVaW50OENsYW1w
ZWRBcnJheVR5cGUuCisgICAgbG9hZENhZ2VkKF9nX2dpZ2FjYWdlQmFzZVB0cnMgKyBHaWdhY2Fn
ZTo6QmFzZVB0cnM6OnByaW1pdGl2ZSwgY29uc3RleHByIEdpZ2FjYWdlOjpwcmltaXRpdmVHaWdh
Y2FnZU1hc2ssIEpTQXJyYXlCdWZmZXJWaWV3OjptX3ZlY3Rvclt0MF0sIHQzLCB0MikKICAgICBs
b2FkYiBbdDMsIHQxXSwgdDAKICAgICBmaW5pc2hJbnRHZXRCeVZhbCh0MCwgdDEpCiAKQEAgLTE1
NjMsMTEgKzE1NDcsMTMgQEAgbGxpbnRPcFdpdGhNZXRhZGF0YShvcF9nZXRfYnlfdmFsLCBPcEdl
dAogICAgIGJpYSB0MiwgSW50MTZBcnJheVR5cGUgLSBGaXJzdFR5cGVkQXJyYXlUeXBlLCAub3BH
ZXRCeVZhbFVpbnQxNkFycmF5CiAKICAgICAjIFdlIGhhdmUgSW50MTZBcnJheVR5cGUuCisgICAg
bG9hZENhZ2VkKF9nX2dpZ2FjYWdlQmFzZVB0cnMgKyBHaWdhY2FnZTo6QmFzZVB0cnM6OnByaW1p
dGl2ZSwgY29uc3RleHByIEdpZ2FjYWdlOjpwcmltaXRpdmVHaWdhY2FnZU1hc2ssIEpTQXJyYXlC
dWZmZXJWaWV3OjptX3ZlY3Rvclt0MF0sIHQzLCB0MikKICAgICBsb2FkaHNpIFt0MywgdDEsIDJd
LCB0MAogICAgIGZpbmlzaEludEdldEJ5VmFsKHQwLCB0MSkKIAogLm9wR2V0QnlWYWxVaW50MTZB
cnJheToKICAgICAjIFdlIGhhdmUgVWludDE2QXJyYXlUeXBlLgorICAgIGxvYWRDYWdlZChfZ19n
aWdhY2FnZUJhc2VQdHJzICsgR2lnYWNhZ2U6OkJhc2VQdHJzOjpwcmltaXRpdmUsIGNvbnN0ZXhw
ciBHaWdhY2FnZTo6cHJpbWl0aXZlR2lnYWNhZ2VNYXNrLCBKU0FycmF5QnVmZmVyVmlldzo6bV92
ZWN0b3JbdDBdLCB0MywgdDIpCiAgICAgbG9hZGggW3QzLCB0MSwgMl0sIHQwCiAgICAgZmluaXNo
SW50R2V0QnlWYWwodDAsIHQxKQogCkBAIC0xNTc5LDExICsxNTY1LDEzIEBAIGxsaW50T3BXaXRo
TWV0YWRhdGEob3BfZ2V0X2J5X3ZhbCwgT3BHZXQKICAgICBiaWEgdDIsIEludDMyQXJyYXlUeXBl
IC0gRmlyc3RUeXBlZEFycmF5VHlwZSwgLm9wR2V0QnlWYWxVaW50MzJBcnJheQogCiAgICAgIyBX
ZSBoYXZlIEludDMyQXJyYXlUeXBlLgorICAgIGxvYWRDYWdlZChfZ19naWdhY2FnZUJhc2VQdHJz
ICsgR2lnYWNhZ2U6OkJhc2VQdHJzOjpwcmltaXRpdmUsIGNvbnN0ZXhwciBHaWdhY2FnZTo6cHJp
bWl0aXZlR2lnYWNhZ2VNYXNrLCBKU0FycmF5QnVmZmVyVmlldzo6bV92ZWN0b3JbdDBdLCB0Mywg
dDIpCiAgICAgbG9hZGkgW3QzLCB0MSwgNF0sIHQwCiAgICAgZmluaXNoSW50R2V0QnlWYWwodDAs
IHQxKQogCiAub3BHZXRCeVZhbFVpbnQzMkFycmF5OgogICAgICMgV2UgaGF2ZSBVaW50MzJBcnJh
eVR5cGUuCisgICAgbG9hZENhZ2VkKF9nX2dpZ2FjYWdlQmFzZVB0cnMgKyBHaWdhY2FnZTo6QmFz
ZVB0cnM6OnByaW1pdGl2ZSwgY29uc3RleHByIEdpZ2FjYWdlOjpwcmltaXRpdmVHaWdhY2FnZU1h
c2ssIEpTQXJyYXlCdWZmZXJWaWV3OjptX3ZlY3Rvclt0MF0sIHQzLCB0MikKICAgICAjIFRoaXMg
aXMgdGhlIGhhcmRlc3QgcGFydCBiZWNhdXNlIG9mIGxhcmdlIHVuc2lnbmVkIHZhbHVlcy4KICAg
ICBsb2FkaSBbdDMsIHQxLCA0XSwgdDAKICAgICBiaWx0IHQwLCAwLCAub3BHZXRCeVZhbFNsb3cg
IyBUaGlzIGNhc2UgaXMgc3RpbGwgYXdrd2FyZCB0byBpbXBsZW1lbnQgaW4gTExJbnQuCkBAIC0x
NTk1LDYgKzE1ODMsNyBAQCBsbGludE9wV2l0aE1ldGFkYXRhKG9wX2dldF9ieV92YWwsIE9wR2V0
CiAgICAgYmllcSB0MiwgRmxvYXQzMkFycmF5VHlwZSAtIEZpcnN0VHlwZWRBcnJheVR5cGUsIC5v
cEdldEJ5VmFsU2xvdwogCiAgICAgIyBXZSBoYXZlIEZsb2F0NjRBcnJheVR5cGUuCisgICAgbG9h
ZENhZ2VkKF9nX2dpZ2FjYWdlQmFzZVB0cnMgKyBHaWdhY2FnZTo6QmFzZVB0cnM6OnByaW1pdGl2
ZSwgY29uc3RleHByIEdpZ2FjYWdlOjpwcmltaXRpdmVHaWdhY2FnZU1hc2ssIEpTQXJyYXlCdWZm
ZXJWaWV3OjptX3ZlY3Rvclt0MF0sIHQzLCB0MikKICAgICBsb2FkZCBbdDMsIHQxLCA4XSwgZnQw
CiAgICAgYmRuZXF1biBmdDAsIGZ0MCwgLm9wR2V0QnlWYWxTbG93CiAgICAgZmluaXNoRG91Ymxl
R2V0QnlWYWwoZnQwLCB0MCwgdDEpCkBAIC0xNjMwLDcgKzE2MTksNyBAQCBtYWNybyBwdXRCeVZh
bE9wKG9wY29kZU5hbWUsIG9wY29kZVN0cnVjCiAgICAgICAgIGdldChtX3Byb3BlcnR5LCB0MCkK
ICAgICAgICAgbG9hZENvbnN0YW50T3JWYXJpYWJsZUludDMyKHNpemUsIHQwLCB0MywgLm9wUHV0
QnlWYWxTbG93KQogICAgICAgICBzeGkycSB0MywgdDMKLSAgICAgICAgbG9hZENhZ2VkSlNWYWx1
ZShKU09iamVjdDo6bV9idXR0ZXJmbHlbdDFdLCB0MCwgdGFnVHlwZU51bWJlcikKKyAgICAgICAg
bG9hZENhZ2VkKF9nX2dpZ2FjYWdlQmFzZVB0cnMgKyBHaWdhY2FnZTo6QmFzZVB0cnM6OmpzVmFs
dWUsIGNvbnN0ZXhwciBHaWdhY2FnZTo6anNWYWx1ZUdpZ2FjYWdlTWFzaywgSlNPYmplY3Q6Om1f
YnV0dGVyZmx5W3QxXSwgdDAsIHRhZ1R5cGVOdW1iZXIpCiAgICAgICAgIG1vdmUgVGFnVHlwZU51
bWJlciwgdGFnVHlwZU51bWJlcgogICAgICAgICBidGlueiB0MiwgQ29weU9uV3JpdGUsIC5vcFB1
dEJ5VmFsU2xvdwogICAgICAgICBhbmRpIEluZGV4aW5nU2hhcGVNYXNrLCB0MgpJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQXJyYXlCdWZmZXIuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0FycmF5QnVmZmVyLmNwcAkocmV2aXNpb24g
MjQ2MjcxKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQXJyYXlCdWZmZXIuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC0zMywxNyArMzMsMTUgQEAKIAogbmFtZXNwYWNlIEpTQyB7CiAK
LVNoYXJlZEFycmF5QnVmZmVyQ29udGVudHM6OlNoYXJlZEFycmF5QnVmZmVyQ29udGVudHModm9p
ZCogZGF0YSwgdW5zaWduZWQgc2l6ZSwgQXJyYXlCdWZmZXJEZXN0cnVjdG9yRnVuY3Rpb24mJiBk
ZXN0cnVjdG9yKQotICAgIDogbV9kYXRhKGRhdGEsIHNpemUpCitTaGFyZWRBcnJheUJ1ZmZlckNv
bnRlbnRzOjpTaGFyZWRBcnJheUJ1ZmZlckNvbnRlbnRzKHZvaWQqIGRhdGEsIEFycmF5QnVmZmVy
RGVzdHJ1Y3RvckZ1bmN0aW9uJiYgZGVzdHJ1Y3RvcikKKyAgICA6IG1fZGF0YShkYXRhKQogICAg
ICwgbV9kZXN0cnVjdG9yKFdURk1vdmUoZGVzdHJ1Y3RvcikpCi0gICAgLCBtX3NpemVJbkJ5dGVz
KHNpemUpCiB7CiB9CiAKIFNoYXJlZEFycmF5QnVmZmVyQ29udGVudHM6On5TaGFyZWRBcnJheUJ1
ZmZlckNvbnRlbnRzKCkKIHsKLSAgICAvLyBGSVhNRTogd2Ugc2hvdWxkbid0IHVzZSBnZXRVbnNh
ZmUgaGVyZSBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTk3Njk4Ci0g
ICAgbV9kZXN0cnVjdG9yKG1fZGF0YS5nZXRVbnNhZmUoKSk7CisgICAgbV9kZXN0cnVjdG9yKG1f
ZGF0YS5nZXRNYXlCZU51bGwoKSk7CiB9CiAKIEFycmF5QnVmZmVyQ29udGVudHM6OkFycmF5QnVm
ZmVyQ29udGVudHMoKQpAQCAtNTgsNyArNTYsNyBAQCBBcnJheUJ1ZmZlckNvbnRlbnRzOjpBcnJh
eUJ1ZmZlckNvbnRlbnRzCiB9CiAKIEFycmF5QnVmZmVyQ29udGVudHM6OkFycmF5QnVmZmVyQ29u
dGVudHModm9pZCogZGF0YSwgdW5zaWduZWQgc2l6ZUluQnl0ZXMsIEFycmF5QnVmZmVyRGVzdHJ1
Y3RvckZ1bmN0aW9uJiYgZGVzdHJ1Y3RvcikKLSAgICA6IG1fZGF0YShkYXRhLCBzaXplSW5CeXRl
cykKKyAgICA6IG1fZGF0YShkYXRhKQogICAgICwgbV9zaXplSW5CeXRlcyhzaXplSW5CeXRlcykK
IHsKICAgICBSRUxFQVNFX0FTU0VSVChtX3NpemVJbkJ5dGVzIDw9IE1BWF9BUlJBWV9CVUZGRVJf
U0laRSk7CkBAIC04NCw4ICs4Miw3IEBAIHZvaWQgQXJyYXlCdWZmZXJDb250ZW50czo6Y2xlYXIo
KQogCiB2b2lkIEFycmF5QnVmZmVyQ29udGVudHM6OmRlc3Ryb3koKQogewotICAgIC8vIEZJWE1F
OiBXZSBzaG91bGRuJ3QgdXNlIGdldFVuc2FmZSBoZXJlOiBodHRwczovL2J1Z3Mud2Via2l0Lm9y
Zy9zaG93X2J1Zy5jZ2k/aWQ9MTk3Njk4Ci0gICAgbV9kZXN0cnVjdG9yKG1fZGF0YS5nZXRVbnNh
ZmUoKSk7CisgICAgbV9kZXN0cnVjdG9yKG1fZGF0YS5nZXRNYXlCZU51bGwoKSk7CiB9CiAKIHZv
aWQgQXJyYXlCdWZmZXJDb250ZW50czo6cmVzZXQoKQpAQCAtMTA2LDI5ICsxMDMsMjYgQEAgdm9p
ZCBBcnJheUJ1ZmZlckNvbnRlbnRzOjp0cnlBbGxvY2F0ZSh1bgogICAgICAgICAgICAgcmV0dXJu
OwogICAgICAgICB9CiAgICAgfQotICAgIHNpemVfdCBzaXplSW5CeXRlcyA9IHN0YXRpY19jYXN0
PHNpemVfdD4obnVtRWxlbWVudHMpICogc3RhdGljX2Nhc3Q8c2l6ZV90PihlbGVtZW50Qnl0ZVNp
emUpOwotICAgIHNpemVfdCBhbGxvY2F0aW9uU2l6ZSA9IHNpemVJbkJ5dGVzOwotICAgIGlmICgh
YWxsb2NhdGlvblNpemUpCi0gICAgICAgIGFsbG9jYXRpb25TaXplID0gMTsgLy8gTWFrZSBzdXJl
IG1hbGxvYyBhY3R1YWxseSBhbGxvY2F0ZXMgc29tZXRoaW5nLCBidXQgbm90IHRvbyBtdWNoLiBX
ZSB1c2UgbnVsbCB0byBtZWFuIHRoYXQgdGhlIGJ1ZmZlciBpcyBuZXV0ZXJlZC4KLQotICAgIHZv
aWQqIGRhdGEgPSBHaWdhY2FnZTo6dHJ5TWFsbG9jKEdpZ2FjYWdlOjpQcmltaXRpdmUsIGFsbG9j
YXRpb25TaXplKTsKLSAgICBtX2RhdGEgPSBEYXRhVHlwZShkYXRhLCBzaXplSW5CeXRlcyk7Ci0g
ICAgaWYgKCFkYXRhKSB7CisgICAgc2l6ZV90IHNpemUgPSBzdGF0aWNfY2FzdDxzaXplX3Q+KG51
bUVsZW1lbnRzKSAqIHN0YXRpY19jYXN0PHNpemVfdD4oZWxlbWVudEJ5dGVTaXplKTsKKyAgICBp
ZiAoIXNpemUpCisgICAgICAgIHNpemUgPSAxOyAvLyBNYWtlIHN1cmUgbWFsbG9jIGFjdHVhbGx5
IGFsbG9jYXRlcyBzb21ldGhpbmcsIGJ1dCBub3QgdG9vIG11Y2guIFdlIHVzZSBudWxsIHRvIG1l
YW4gdGhhdCB0aGUgYnVmZmVyIGlzIG5ldXRlcmVkLgorICAgIG1fZGF0YSA9IEdpZ2FjYWdlOjp0
cnlNYWxsb2MoR2lnYWNhZ2U6OlByaW1pdGl2ZSwgc2l6ZSk7CisgICAgaWYgKCFtX2RhdGEpIHsK
ICAgICAgICAgcmVzZXQoKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KICAgICAKICAgICBpZiAo
cG9saWN5ID09IFplcm9Jbml0aWFsaXplKQotICAgICAgICBtZW1zZXQoZGF0YSwgMCwgYWxsb2Nh
dGlvblNpemUpOworICAgICAgICBtZW1zZXQobV9kYXRhLmdldCgpLCAwLCBzaXplKTsKIAotICAg
IG1fc2l6ZUluQnl0ZXMgPSBzaXplSW5CeXRlczsKKyAgICBtX3NpemVJbkJ5dGVzID0gbnVtRWxl
bWVudHMgKiBlbGVtZW50Qnl0ZVNpemU7CiAgICAgUkVMRUFTRV9BU1NFUlQobV9zaXplSW5CeXRl
cyA8PSBNQVhfQVJSQVlfQlVGRkVSX1NJWkUpOwogICAgIG1fZGVzdHJ1Y3RvciA9IFtdICh2b2lk
KiBwKSB7IEdpZ2FjYWdlOjpmcmVlKEdpZ2FjYWdlOjpQcmltaXRpdmUsIHApOyB9OwogfQogCiB2
b2lkIEFycmF5QnVmZmVyQ29udGVudHM6Om1ha2VTaGFyZWQoKQogewotICAgIG1fc2hhcmVkID0g
YWRvcHRSZWYobmV3IFNoYXJlZEFycmF5QnVmZmVyQ29udGVudHMoZGF0YSgpLCBzaXplSW5CeXRl
cygpLCBXVEZNb3ZlKG1fZGVzdHJ1Y3RvcikpKTsKKyAgICBtX3NoYXJlZCA9IGFkb3B0UmVmKG5l
dyBTaGFyZWRBcnJheUJ1ZmZlckNvbnRlbnRzKG1fZGF0YS5nZXRNYXlCZU51bGwoKSwgV1RGTW92
ZShtX2Rlc3RydWN0b3IpKSk7CiAgICAgbV9kZXN0cnVjdG9yID0gW10gKHZvaWQqKSB7IH07CiB9
CiAKQEAgLTE0OSw3ICsxNDMsNyBAQCB2b2lkIEFycmF5QnVmZmVyQ29udGVudHM6OmNvcHlUbyhB
cnJheUJ1CiAgICAgb3RoZXIudHJ5QWxsb2NhdGUobV9zaXplSW5CeXRlcywgc2l6ZW9mKGNoYXIp
LCBBcnJheUJ1ZmZlckNvbnRlbnRzOjpEb250SW5pdGlhbGl6ZSk7CiAgICAgaWYgKCFvdGhlci5t
X2RhdGEpCiAgICAgICAgIHJldHVybjsKLSAgICBtZW1jcHkob3RoZXIuZGF0YSgpLCBkYXRhKCks
IG1fc2l6ZUluQnl0ZXMpOworICAgIG1lbWNweShvdGhlci5tX2RhdGEuZ2V0KCksIG1fZGF0YS5n
ZXQoKSwgbV9zaXplSW5CeXRlcyk7CiAgICAgb3RoZXIubV9zaXplSW5CeXRlcyA9IG1fc2l6ZUlu
Qnl0ZXM7CiAgICAgUkVMRUFTRV9BU1NFUlQob3RoZXIubV9zaXplSW5CeXRlcyA8PSBNQVhfQVJS
QVlfQlVGRkVSX1NJWkUpOwogfQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUv
QXJyYXlCdWZmZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGlt
ZS9BcnJheUJ1ZmZlci5oCShyZXZpc2lvbiAyNDYyNzEpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvcnVudGltZS9BcnJheUJ1ZmZlci5oCSh3b3JraW5nIGNvcHkpCkBAIC00OCwxNiArNDgsMTQg
QEAgdHlwZWRlZiBGdW5jdGlvbjx2b2lkKHZvaWQqKT4gQXJyYXlCdWZmZQogCiBjbGFzcyBTaGFy
ZWRBcnJheUJ1ZmZlckNvbnRlbnRzIDogcHVibGljIFRocmVhZFNhZmVSZWZDb3VudGVkPFNoYXJl
ZEFycmF5QnVmZmVyQ29udGVudHM+IHsKIHB1YmxpYzoKLSAgICBTaGFyZWRBcnJheUJ1ZmZlckNv
bnRlbnRzKHZvaWQqIGRhdGEsIHVuc2lnbmVkIHNpemUsIEFycmF5QnVmZmVyRGVzdHJ1Y3RvckZ1
bmN0aW9uJiYpOworICAgIFNoYXJlZEFycmF5QnVmZmVyQ29udGVudHModm9pZCogZGF0YSwgQXJy
YXlCdWZmZXJEZXN0cnVjdG9yRnVuY3Rpb24mJik7CiAgICAgflNoYXJlZEFycmF5QnVmZmVyQ29u
dGVudHMoKTsKICAgICAKLSAgICB2b2lkKiBkYXRhKCkgY29uc3QgeyByZXR1cm4gbV9kYXRhLmdl
dE1heUJlTnVsbChtX3NpemVJbkJ5dGVzKTsgfQorICAgIHZvaWQqIGRhdGEoKSBjb25zdCB7IHJl
dHVybiBtX2RhdGEuZ2V0TWF5QmVOdWxsKCk7IH0KICAgICAKIHByaXZhdGU6Ci0gICAgdXNpbmcg
RGF0YVR5cGUgPSBDYWdlZFB0cjxHaWdhY2FnZTo6UHJpbWl0aXZlLCB2b2lkLCB0YWdDYWdlZFB0
cj47Ci0gICAgRGF0YVR5cGUgbV9kYXRhOworICAgIENhZ2VkUHRyPEdpZ2FjYWdlOjpQcmltaXRp
dmUsIHZvaWQ+IG1fZGF0YTsKICAgICBBcnJheUJ1ZmZlckRlc3RydWN0b3JGdW5jdGlvbiBtX2Rl
c3RydWN0b3I7Ci0gICAgdW5zaWduZWQgbV9zaXplSW5CeXRlczsKIH07CiAKIGNsYXNzIEFycmF5
QnVmZmVyQ29udGVudHMgewpAQCAtNzUsNyArNzMsNyBAQCBwdWJsaWM6CiAgICAgCiAgICAgZXhw
bGljaXQgb3BlcmF0b3IgYm9vbCgpIHsgcmV0dXJuICEhbV9kYXRhOyB9CiAgICAgCi0gICAgdm9p
ZCogZGF0YSgpIGNvbnN0IHsgcmV0dXJuIG1fZGF0YS5nZXRNYXlCZU51bGwoc2l6ZUluQnl0ZXMo
KSk7IH0KKyAgICB2b2lkKiBkYXRhKCkgY29uc3QgeyByZXR1cm4gbV9kYXRhLmdldE1heUJlTnVs
bCgpOyB9CiAgICAgdW5zaWduZWQgc2l6ZUluQnl0ZXMoKSBjb25zdCB7IHJldHVybiBtX3NpemVJ
bkJ5dGVzOyB9CiAgICAgCiAgICAgYm9vbCBpc1NoYXJlZCgpIGNvbnN0IHsgcmV0dXJuIG1fc2hh
cmVkOyB9CkBAIC0xMDAsOCArOTgsNyBAQCBwcml2YXRlOgogCiAgICAgQXJyYXlCdWZmZXJEZXN0
cnVjdG9yRnVuY3Rpb24gbV9kZXN0cnVjdG9yOwogICAgIFJlZlB0cjxTaGFyZWRBcnJheUJ1ZmZl
ckNvbnRlbnRzPiBtX3NoYXJlZDsKLSAgICB1c2luZyBEYXRhVHlwZSA9IENhZ2VkUHRyPEdpZ2Fj
YWdlOjpQcmltaXRpdmUsIHZvaWQsIHRhZ0NhZ2VkUHRyPjsKLSAgICBEYXRhVHlwZSBtX2RhdGE7
CisgICAgQ2FnZWRQdHI8R2lnYWNhZ2U6OlByaW1pdGl2ZSwgdm9pZD4gbV9kYXRhOwogICAgIHVu
c2lnbmVkIG1fc2l6ZUluQnl0ZXM7CiB9OwogCkBAIC0xNzcsMTcgKzE3NCwxNyBAQCBwdWJsaWM6
CiAKIHZvaWQqIEFycmF5QnVmZmVyOjpkYXRhKCkKIHsKLSAgICByZXR1cm4gbV9jb250ZW50cy5k
YXRhKCk7CisgICAgcmV0dXJuIG1fY29udGVudHMubV9kYXRhLmdldE1heUJlTnVsbCgpOwogfQog
CiBjb25zdCB2b2lkKiBBcnJheUJ1ZmZlcjo6ZGF0YSgpIGNvbnN0CiB7Ci0gICAgcmV0dXJuIG1f
Y29udGVudHMuZGF0YSgpOworICAgIHJldHVybiBtX2NvbnRlbnRzLm1fZGF0YS5nZXRNYXlCZU51
bGwoKTsKIH0KIAogdW5zaWduZWQgQXJyYXlCdWZmZXI6OmJ5dGVMZW5ndGgoKSBjb25zdAogewot
ICAgIHJldHVybiBtX2NvbnRlbnRzLnNpemVJbkJ5dGVzKCk7CisgICAgcmV0dXJuIG1fY29udGVu
dHMubV9zaXplSW5CeXRlczsKIH0KIAogYm9vbCBBcnJheUJ1ZmZlcjo6aXNTaGFyZWQoKSBjb25z
dApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQXJyYXlCdWZmZXJWaWV3LmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9BcnJheUJ1ZmZl
clZpZXcuY3BwCShyZXZpc2lvbiAyNDYyNzEpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9BcnJheUJ1ZmZlclZpZXcuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yNSwyMiArMjUsMTcg
QEAKIAogI2luY2x1ZGUgImNvbmZpZy5oIgogI2luY2x1ZGUgIkFycmF5QnVmZmVyVmlldy5oIgot
I2luY2x1ZGUgPHd0Zi9DaGVja2VkQXJpdGhtZXRpYy5oPgogCiBuYW1lc3BhY2UgSlNDIHsKIAog
QXJyYXlCdWZmZXJWaWV3OjpBcnJheUJ1ZmZlclZpZXcoCi0gICAgUmVmUHRyPEFycmF5QnVmZmVy
PiYmIGJ1ZmZlciwgdW5zaWduZWQgYnl0ZU9mZnNldCwgdW5zaWduZWQgYnl0ZUxlbmd0aCkKKyAg
ICBSZWZQdHI8QXJyYXlCdWZmZXI+JiYgYnVmZmVyLAorICAgIHVuc2lnbmVkIGJ5dGVPZmZzZXQp
CiAgICAgICAgIDogbV9ieXRlT2Zmc2V0KGJ5dGVPZmZzZXQpCiAgICAgICAgICwgbV9pc05ldXRl
cmFibGUodHJ1ZSkKLSAgICAgICAgLCBtX2J5dGVMZW5ndGgoYnl0ZUxlbmd0aCkKICAgICAgICAg
LCBtX2J1ZmZlcihXVEZNb3ZlKGJ1ZmZlcikpCiB7Ci0gICAgQ2hlY2tlZDx1bnNpZ25lZCwgQ3Jh
c2hPbk92ZXJmbG93PiBsZW5ndGgoYnl0ZU9mZnNldCk7Ci0gICAgbGVuZ3RoICs9IGJ5dGVMZW5n
dGg7Ci0gICAgUkVMRUFTRV9BU1NFUlRfV0lUSF9TRUNVUklUWV9JTVBMSUNBVElPTihsZW5ndGgg
PD0gbV9idWZmZXItPmJ5dGVMZW5ndGgoKSk7Ci0gICAgaWYgKG1fYnVmZmVyKQotICAgICAgICBt
X2Jhc2VBZGRyZXNzID0gQmFzZUFkZHJlc3Moc3RhdGljX2Nhc3Q8Y2hhcio+KG1fYnVmZmVyLT5k
YXRhKCkpICsgbV9ieXRlT2Zmc2V0LCBieXRlTGVuZ3RoKTsKKyAgICBtX2Jhc2VBZGRyZXNzID0g
bV9idWZmZXIgPyAoc3RhdGljX2Nhc3Q8Y2hhcio+KG1fYnVmZmVyLT5kYXRhKCkpICsgbV9ieXRl
T2Zmc2V0KSA6IDA7CiB9CiAKIEFycmF5QnVmZmVyVmlldzo6fkFycmF5QnVmZmVyVmlldygpCklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9BcnJheUJ1ZmZlclZpZXcuaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9BcnJheUJ1ZmZlclZpZXcu
aAkocmV2aXNpb24gMjQ2MjcxKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQXJy
YXlCdWZmZXJWaWV3LmgJKHdvcmtpbmcgY29weSkKQEAgLTcxLDggKzcxLDggQEAgcHVibGljOgog
ICAgIHZvaWQqIGJhc2VBZGRyZXNzKCkgY29uc3QKICAgICB7CiAgICAgICAgIGlmIChpc05ldXRl
cmVkKCkpCi0gICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsKLSAgICAgICAgcmV0dXJuIG1fYmFz
ZUFkZHJlc3MuZ2V0TWF5QmVOdWxsKGJ5dGVMZW5ndGgoKSk7CisgICAgICAgICAgICByZXR1cm4g
MDsKKyAgICAgICAgcmV0dXJuIG1fYmFzZUFkZHJlc3MuZ2V0TWF5QmVOdWxsKCk7CiAgICAgfQog
CiAgICAgdm9pZCogZGF0YSgpIGNvbnN0IHsgcmV0dXJuIGJhc2VBZGRyZXNzKCk7IH0KQEAgLTg0
LDcgKzg0LDcgQEAgcHVibGljOgogICAgICAgICByZXR1cm4gbV9ieXRlT2Zmc2V0OwogICAgIH0K
IAotICAgIHVuc2lnbmVkIGJ5dGVMZW5ndGgoKSBjb25zdCB7IHJldHVybiBtX2J5dGVMZW5ndGg7
IH0KKyAgICB2aXJ0dWFsIHVuc2lnbmVkIGJ5dGVMZW5ndGgoKSBjb25zdCA9IDA7CiAKICAgICBK
U19FWFBPUlRfUFJJVkFURSB2b2lkIHNldE5ldXRlcmFibGUoYm9vbCBmbGFnKTsKICAgICBib29s
IGlzTmV1dGVyYWJsZSgpIGNvbnN0IHsgcmV0dXJuIG1faXNOZXV0ZXJhYmxlOyB9CkBAIC0xMTMs
MTIgKzExMywxMyBAQCBwdWJsaWM6CiAgICAgdmlydHVhbCBKU0FycmF5QnVmZmVyVmlldyogd3Jh
cChFeGVjU3RhdGUqLCBKU0dsb2JhbE9iamVjdCopID0gMDsKICAgICAKIHByb3RlY3RlZDoKLSAg
ICBKU19FWFBPUlRfUFJJVkFURSBBcnJheUJ1ZmZlclZpZXcoUmVmUHRyPEFycmF5QnVmZmVyPiYm
LCB1bnNpZ25lZCBieXRlT2Zmc2V0LCB1bnNpZ25lZCBieXRlTGVuZ3RoKTsKKyAgICBKU19FWFBP
UlRfUFJJVkFURSBBcnJheUJ1ZmZlclZpZXcoUmVmUHRyPEFycmF5QnVmZmVyPiYmLCB1bnNpZ25l
ZCBieXRlT2Zmc2V0KTsKIAogICAgIGlubGluZSBib29sIHNldEltcGwoQXJyYXlCdWZmZXJWaWV3
KiwgdW5zaWduZWQgYnl0ZU9mZnNldCk7CiAKLSAgICBpbmxpbmUgYm9vbCBzZXRSYW5nZUltcGwo
Y29uc3Qgdm9pZCogZGF0YSwgc2l6ZV90IGRhdGFCeXRlTGVuZ3RoLCB1bnNpZ25lZCBieXRlT2Zm
c2V0KTsKLSAgICBpbmxpbmUgYm9vbCBnZXRSYW5nZUltcGwodm9pZCogZGVzdGluYXRpb24sIHNp
emVfdCBkYXRhQnl0ZUxlbmd0aCwgdW5zaWduZWQgYnl0ZU9mZnNldCk7CisgICAgLy8gQ2FsbGVy
IHBhc3NlcyBpbiBidWZmZXJCeXRlTGVuZ3RoIHRvIGF2b2lkIGEgdmlydHVhbCBmdW5jdGlvbiBj
YWxsLgorICAgIGlubGluZSBib29sIHNldFJhbmdlSW1wbChjb25zdCB2b2lkKiBkYXRhLCBzaXpl
X3QgZGF0YUJ5dGVMZW5ndGgsIHVuc2lnbmVkIGJ5dGVPZmZzZXQsIHVuc2lnbmVkIGJ1ZmZlckJ5
dGVMZW5ndGgpOworICAgIGlubGluZSBib29sIGdldFJhbmdlSW1wbCh2b2lkKiBkZXN0aW5hdGlv
biwgc2l6ZV90IGRhdGFCeXRlTGVuZ3RoLCB1bnNpZ25lZCBieXRlT2Zmc2V0LCB1bnNpZ25lZCBi
dWZmZXJCeXRlTGVuZ3RoKTsKIAogICAgIGlubGluZSBib29sIHplcm9SYW5nZUltcGwodW5zaWdu
ZWQgYnl0ZU9mZnNldCwgc2l6ZV90IHJhbmdlQnl0ZUxlbmd0aCk7CiAKQEAgLTE0OSwxMSArMTUw
LDkgQEAgcHJvdGVjdGVkOgogCiAgICAgdW5zaWduZWQgbV9ieXRlT2Zmc2V0IDogMzE7CiAgICAg
Ym9vbCBtX2lzTmV1dGVyYWJsZSA6IDE7Ci0gICAgdW5zaWduZWQgbV9ieXRlTGVuZ3RoOwogCi0g
ICAgdXNpbmcgQmFzZUFkZHJlc3MgPSBDYWdlZFB0cjxHaWdhY2FnZTo6UHJpbWl0aXZlLCB2b2lk
LCB0YWdDYWdlZFB0cj47CiAgICAgLy8gVGhpcyBpcyB0aGUgYWRkcmVzcyBvZiB0aGUgQXJyYXlC
dWZmZXIncyBzdG9yYWdlLCBwbHVzIHRoZSBieXRlIG9mZnNldC4KLSAgICBCYXNlQWRkcmVzcyBt
X2Jhc2VBZGRyZXNzOworICAgIENhZ2VkUHRyPEdpZ2FjYWdlOjpQcmltaXRpdmUsIHZvaWQ+IG1f
YmFzZUFkZHJlc3M7CiAKIHByaXZhdGU6CiAgICAgZnJpZW5kIGNsYXNzIEFycmF5QnVmZmVyOwpA
QCAtMTc0LDEwICsxNzMsMTIgQEAgYm9vbCBBcnJheUJ1ZmZlclZpZXc6OnNldEltcGwoQXJyYXlC
dWZmZQogICAgIHJldHVybiB0cnVlOwogfQogCi1ib29sIEFycmF5QnVmZmVyVmlldzo6c2V0UmFu
Z2VJbXBsKGNvbnN0IHZvaWQqIGRhdGEsIHNpemVfdCBkYXRhQnl0ZUxlbmd0aCwgdW5zaWduZWQg
Ynl0ZU9mZnNldCkKK2Jvb2wgQXJyYXlCdWZmZXJWaWV3OjpzZXRSYW5nZUltcGwoY29uc3Qgdm9p
ZCogZGF0YSwgc2l6ZV90IGRhdGFCeXRlTGVuZ3RoLCB1bnNpZ25lZCBieXRlT2Zmc2V0LCB1bnNp
Z25lZCBidWZmZXJCeXRlTGVuZ3RoKQogewotICAgIGlmIChieXRlT2Zmc2V0ID4gYnl0ZUxlbmd0
aCgpCi0gICAgICAgIHx8IGJ5dGVPZmZzZXQgKyBkYXRhQnl0ZUxlbmd0aCA+IGJ5dGVMZW5ndGgo
KQorICAgIC8vIERvIG5vdCByZXBsYWNlIHdpdGggUkVMRUFTRV9BU1NFUlQ7IHdlIHdhbnQgdG8g
YXZvaWQgdGhlIHZpcnR1YWwgYnl0ZUxlbmd0aCgpIGZ1bmN0aW9uIGNhbGwgaW4gcmVsZWFzZS4K
KyAgICBBU1NFUlRfV0lUSF9TRUNVUklUWV9JTVBMSUNBVElPTihidWZmZXJCeXRlTGVuZ3RoID09
IGJ5dGVMZW5ndGgoKSk7CisgICAgaWYgKGJ5dGVPZmZzZXQgPiBidWZmZXJCeXRlTGVuZ3RoCisg
ICAgICAgIHx8IGJ5dGVPZmZzZXQgKyBkYXRhQnl0ZUxlbmd0aCA+IGJ1ZmZlckJ5dGVMZW5ndGgK
ICAgICAgICAgfHwgYnl0ZU9mZnNldCArIGRhdGFCeXRlTGVuZ3RoIDwgYnl0ZU9mZnNldCkgewog
ICAgICAgICAvLyBPdXQgb2YgcmFuZ2Ugb2Zmc2V0IG9yIG92ZXJmbG93CiAgICAgICAgIHJldHVy
biBmYWxzZTsKQEAgLTE4OCwxMCArMTg5LDEyIEBAIGJvb2wgQXJyYXlCdWZmZXJWaWV3OjpzZXRS
YW5nZUltcGwoY29uc3QKICAgICByZXR1cm4gdHJ1ZTsKIH0KIAotYm9vbCBBcnJheUJ1ZmZlclZp
ZXc6OmdldFJhbmdlSW1wbCh2b2lkKiBkZXN0aW5hdGlvbiwgc2l6ZV90IGRhdGFCeXRlTGVuZ3Ro
LCB1bnNpZ25lZCBieXRlT2Zmc2V0KQorYm9vbCBBcnJheUJ1ZmZlclZpZXc6OmdldFJhbmdlSW1w
bCh2b2lkKiBkZXN0aW5hdGlvbiwgc2l6ZV90IGRhdGFCeXRlTGVuZ3RoLCB1bnNpZ25lZCBieXRl
T2Zmc2V0LCB1bnNpZ25lZCBidWZmZXJCeXRlTGVuZ3RoKQogewotICAgIGlmIChieXRlT2Zmc2V0
ID4gYnl0ZUxlbmd0aCgpCi0gICAgICAgIHx8IGJ5dGVPZmZzZXQgKyBkYXRhQnl0ZUxlbmd0aCA+
IGJ5dGVMZW5ndGgoKQorICAgIC8vIERvIG5vdCByZXBsYWNlIHdpdGggUkVMRUFTRV9BU1NFUlQ7
IHdlIHdhbnQgdG8gYXZvaWQgdGhlIHZpcnR1YWwgYnl0ZUxlbmd0aCgpIGZ1bmN0aW9uIGNhbGwg
aW4gcmVsZWFzZS4KKyAgICBBU1NFUlRfV0lUSF9TRUNVUklUWV9JTVBMSUNBVElPTihidWZmZXJC
eXRlTGVuZ3RoID09IGJ5dGVMZW5ndGgoKSk7CisgICAgaWYgKGJ5dGVPZmZzZXQgPiBidWZmZXJC
eXRlTGVuZ3RoCisgICAgICAgIHx8IGJ5dGVPZmZzZXQgKyBkYXRhQnl0ZUxlbmd0aCA+IGJ1ZmZl
ckJ5dGVMZW5ndGgKICAgICAgICAgfHwgYnl0ZU9mZnNldCArIGRhdGFCeXRlTGVuZ3RoIDwgYnl0
ZU9mZnNldCkgewogICAgICAgICAvLyBPdXQgb2YgcmFuZ2Ugb2Zmc2V0IG9yIG92ZXJmbG93CiAg
ICAgICAgIHJldHVybiBmYWxzZTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1l
L0NhY2hlZFR5cGVzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9DYWNoZWRUeXBlcy5jcHAJKHJldmlzaW9uIDI0NjI3MSkKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ydW50aW1lL0NhY2hlZFR5cGVzLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTA4OCwx
MyArMTA4OCwxMyBAQCBwdWJsaWM6CiAgICAgdm9pZCBlbmNvZGUoRW5jb2RlciYgZW5jb2Rlciwg
Y29uc3QgU2NvcGVkQXJndW1lbnRzVGFibGUmIHNjb3BlZEFyZ3VtZW50c1RhYmxlKQogICAgIHsK
ICAgICAgICAgbV9sZW5ndGggPSBzY29wZWRBcmd1bWVudHNUYWJsZS5tX2xlbmd0aDsKLSAgICAg
ICAgbV9hcmd1bWVudHMuZW5jb2RlKGVuY29kZXIsIHNjb3BlZEFyZ3VtZW50c1RhYmxlLm1fYXJn
dW1lbnRzLmdldChtX2xlbmd0aCksIG1fbGVuZ3RoKTsKKyAgICAgICAgbV9hcmd1bWVudHMuZW5j
b2RlKGVuY29kZXIsIHNjb3BlZEFyZ3VtZW50c1RhYmxlLm1fYXJndW1lbnRzLmdldCgpLCBtX2xl
bmd0aCk7CiAgICAgfQogCiAgICAgU2NvcGVkQXJndW1lbnRzVGFibGUqIGRlY29kZShEZWNvZGVy
JiBkZWNvZGVyKSBjb25zdAogICAgIHsKICAgICAgICAgU2NvcGVkQXJndW1lbnRzVGFibGUqIHNj
b3BlZEFyZ3VtZW50c1RhYmxlID0gU2NvcGVkQXJndW1lbnRzVGFibGU6OmNyZWF0ZShkZWNvZGVy
LnZtKCksIG1fbGVuZ3RoKTsKLSAgICAgICAgbV9hcmd1bWVudHMuZGVjb2RlKGRlY29kZXIsIHNj
b3BlZEFyZ3VtZW50c1RhYmxlLT5tX2FyZ3VtZW50cy5nZXQobV9sZW5ndGgpLCBtX2xlbmd0aCk7
CisgICAgICAgIG1fYXJndW1lbnRzLmRlY29kZShkZWNvZGVyLCBzY29wZWRBcmd1bWVudHNUYWJs
ZS0+bV9hcmd1bWVudHMuZ2V0KCksIG1fbGVuZ3RoKTsKICAgICAgICAgcmV0dXJuIHNjb3BlZEFy
Z3VtZW50c1RhYmxlOwogICAgIH0KIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRp
bWUvQ2FnZWRCYXJyaWVyUHRyLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L3J1bnRpbWUvQ2FnZWRCYXJyaWVyUHRyLmgJKHJldmlzaW9uIDI0NjI3MSkKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ydW50aW1lL0NhZ2VkQmFycmllclB0ci5oCSh3b3JraW5nIGNvcHkpCkBA
IC0zNSw0MSArMzUsODcgQEAgY2xhc3MgVk07CiAKIC8vIFRoaXMgaXMgYSBjb252ZW5pZW50IGNv
bWJvIG9mIEF1eGlsaWFyeUJhcnJpZXIgYW5kIENhZ2VkUHRyLgogCi10ZW1wbGF0ZTxHaWdhY2Fn
ZTo6S2luZCBwYXNzZWRLaW5kLCB0eXBlbmFtZSBULCBib29sIHNob3VsZFRhZyA9IGZhbHNlPgor
dGVtcGxhdGU8R2lnYWNhZ2U6OktpbmQgcGFzc2VkS2luZCwgdHlwZW5hbWUgVD4KIGNsYXNzIENh
Z2VkQmFycmllclB0ciB7CiBwdWJsaWM6CiAgICAgc3RhdGljIGNvbnN0ZXhwciBHaWdhY2FnZTo6
S2luZCBraW5kID0gcGFzc2VkS2luZDsKLSAgICB1c2luZyBUeXBlID0gVDsKLSAgICB1c2luZyBD
YWdlZFR5cGUgPSBDYWdlZFB0cjxraW5kLCBUeXBlLCBzaG91bGRUYWc+OworICAgIHR5cGVkZWYg
VCBUeXBlOwogICAgIAotICAgIENhZ2VkQmFycmllclB0cigpID0gZGVmYXVsdDsKKyAgICBDYWdl
ZEJhcnJpZXJQdHIoKSB7IH0KICAgICAKICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBVPgotICAgIENh
Z2VkQmFycmllclB0cihWTSYgdm0sIEpTQ2VsbCogY2VsbCwgVSYmIHZhbHVlLCB1bnNpZ25lZCBz
aXplKQorICAgIENhZ2VkQmFycmllclB0cihWTSYgdm0sIEpTQ2VsbCogY2VsbCwgVSYmIHZhbHVl
KQogICAgIHsKLSAgICAgICAgbV9iYXJyaWVyLnNldCh2bSwgY2VsbCwgQ2FnZWRUeXBlKHN0ZDo6
Zm9yd2FyZDxVPih2YWx1ZSksIHNpemUpKTsKKyAgICAgICAgbV9iYXJyaWVyLnNldCh2bSwgY2Vs
bCwgc3RkOjpmb3J3YXJkPFU+KHZhbHVlKSk7CiAgICAgfQogICAgIAogICAgIHZvaWQgY2xlYXIo
KSB7IG1fYmFycmllci5jbGVhcigpOyB9CiAgICAgCiAgICAgdGVtcGxhdGU8dHlwZW5hbWUgVT4K
LSAgICB2b2lkIHNldChWTSYgdm0sIEpTQ2VsbCogY2VsbCwgVSYmIHZhbHVlLCB1bnNpZ25lZCBz
aXplKQorICAgIHZvaWQgc2V0KFZNJiB2bSwgSlNDZWxsKiBjZWxsLCBVJiYgdmFsdWUpCiAgICAg
ewotICAgICAgICBtX2JhcnJpZXIuc2V0KHZtLCBjZWxsLCBDYWdlZFR5cGUoc3RkOjpmb3J3YXJk
PFU+KHZhbHVlKSwgc2l6ZSkpOworICAgICAgICBtX2JhcnJpZXIuc2V0KHZtLCBjZWxsLCBzdGQ6
OmZvcndhcmQ8VT4odmFsdWUpKTsKICAgICB9CiAgICAgCi0gICAgVCogZ2V0KHVuc2lnbmVkIHNp
emUpIGNvbnN0IHsgcmV0dXJuIG1fYmFycmllci5nZXQoKS5nZXQoc2l6ZSk7IH0KLSAgICBUKiBn
ZXRNYXlCZU51bGwodW5zaWduZWQgc2l6ZSkgY29uc3QgeyByZXR1cm4gbV9iYXJyaWVyLmdldCgp
LmdldE1heUJlTnVsbChzaXplKTsgfQotICAgIFQqIGdldFVuc2FmZSgpIGNvbnN0IHsgcmV0dXJu
IG1fYmFycmllci5nZXQoKS5nZXRVbnNhZmUoKTsgfQotCi0gICAgLy8gV2UgbmVlZCB0aGUgdGVt
cGxhdGUgaGVyZSBzbyB0aGF0IHRoZSB0eXBlIG9mIFUgaXMgZGVkdWNlZCBhdCB1c2FnZSB0aW1l
IHJhdGhlciB0aGFuIGNsYXNzIHRpbWUuIFUgc2hvdWxkIGFsd2F5cyBiZSBULgotICAgIHRlbXBs
YXRlPHR5cGVuYW1lIFUgPSBUPgotICAgIHR5cGVuYW1lIHN0ZDo6ZW5hYmxlX2lmPCFzdGQ6Omlz
X3NhbWU8dm9pZCwgVT46OnZhbHVlLCBUPjo6dHlwZSYKLSAgICAvKiBUJiAqLyBhdCh1bnNpZ25l
ZCBpbmRleCwgdW5zaWduZWQgc2l6ZSkgY29uc3QgeyByZXR1cm4gZ2V0KHNpemUpW2luZGV4XTsg
fQorICAgIFQqIGdldCgpIGNvbnN0IHsgcmV0dXJuIG1fYmFycmllci5nZXQoKS5nZXQoKTsgfQor
ICAgIFQqIGdldE1heUJlTnVsbCgpIGNvbnN0IHsgcmV0dXJuIG1fYmFycmllci5nZXQoKS5nZXRN
YXlCZU51bGwoKTsgfQorICAgIAorICAgIGJvb2wgb3BlcmF0b3I9PShjb25zdCBDYWdlZEJhcnJp
ZXJQdHImIG90aGVyKSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuIGdldE1heUJlTnVsbCgp
ID09IG90aGVyLmdldE1heUJlTnVsbCgpOworICAgIH0KKyAgICAKKyAgICBib29sIG9wZXJhdG9y
IT0oY29uc3QgQ2FnZWRCYXJyaWVyUHRyJiBvdGhlcikgY29uc3QKKyAgICB7CisgICAgICAgIHJl
dHVybiAhKCp0aGlzID09IG90aGVyKTsKKyAgICB9CisgICAgCisgICAgZXhwbGljaXQgb3BlcmF0
b3IgYm9vbCgpIGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4gKnRoaXMgIT0gQ2FnZWRCYXJy
aWVyUHRyKCk7CisgICAgfQorICAgIAorICAgIHRlbXBsYXRlPHR5cGVuYW1lIFU+CisgICAgdm9p
ZCBzZXRXaXRob3V0QmFycmllcihVJiYgdmFsdWUpIHsgbV9iYXJyaWVyLnNldFdpdGhvdXRCYXJy
aWVyKHN0ZDo6Zm9yd2FyZDxVPih2YWx1ZSkpOyB9CisgICAgCisgICAgVCYgb3BlcmF0b3IqKCkg
Y29uc3QgeyByZXR1cm4gKmdldCgpOyB9CisgICAgVCogb3BlcmF0b3ItPigpIGNvbnN0IHsgcmV0
dXJuIGdldCgpOyB9CisgICAgCisgICAgdGVtcGxhdGU8dHlwZW5hbWUgSW5kZXhUeXBlPgorICAg
IFQmIG9wZXJhdG9yW10oSW5kZXhUeXBlIGluZGV4KSBjb25zdCB7IHJldHVybiBnZXQoKVtpbmRl
eF07IH0KKyAgICAKK3ByaXZhdGU6CisgICAgQXV4aWxpYXJ5QmFycmllcjxDYWdlZFB0cjxraW5k
LCBUPj4gbV9iYXJyaWVyOworfTsKIAordGVtcGxhdGU8R2lnYWNhZ2U6OktpbmQgcGFzc2VkS2lu
ZD4KK2NsYXNzIENhZ2VkQmFycmllclB0cjxwYXNzZWRLaW5kLCB2b2lkPiB7CitwdWJsaWM6Cisg
ICAgc3RhdGljIGNvbnN0ZXhwciBHaWdhY2FnZTo6S2luZCBraW5kID0gcGFzc2VkS2luZDsKKyAg
ICB0eXBlZGVmIHZvaWQgVHlwZTsKKyAgICAKKyAgICBDYWdlZEJhcnJpZXJQdHIoKSB7IH0KKyAg
ICAKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBVPgorICAgIENhZ2VkQmFycmllclB0cihWTSYgdm0s
IEpTQ2VsbCogY2VsbCwgVSYmIHZhbHVlKQorICAgIHsKKyAgICAgICAgbV9iYXJyaWVyLnNldCh2
bSwgY2VsbCwgc3RkOjpmb3J3YXJkPFU+KHZhbHVlKSk7CisgICAgfQorICAgIAorICAgIHZvaWQg
Y2xlYXIoKSB7IG1fYmFycmllci5jbGVhcigpOyB9CisgICAgCisgICAgdGVtcGxhdGU8dHlwZW5h
bWUgVT4KKyAgICB2b2lkIHNldChWTSYgdm0sIEpTQ2VsbCogY2VsbCwgVSYmIHZhbHVlKQorICAg
IHsKKyAgICAgICAgbV9iYXJyaWVyLnNldCh2bSwgY2VsbCwgc3RkOjpmb3J3YXJkPFU+KHZhbHVl
KSk7CisgICAgfQorICAgIAorICAgIHZvaWQqIGdldCgpIGNvbnN0IHsgcmV0dXJuIG1fYmFycmll
ci5nZXQoKS5nZXQoKTsgfQorICAgIHZvaWQqIGdldE1heUJlTnVsbCgpIGNvbnN0IHsgcmV0dXJu
IG1fYmFycmllci5nZXQoKS5nZXRNYXlCZU51bGwoKTsgfQorICAgIAogICAgIGJvb2wgb3BlcmF0
b3I9PShjb25zdCBDYWdlZEJhcnJpZXJQdHImIG90aGVyKSBjb25zdAogICAgIHsKLSAgICAgICAg
cmV0dXJuIG1fYmFycmllci5nZXQoKSA9PSBvdGhlci5tX2JhcnJpZXIuZ2V0KCk7CisgICAgICAg
IHJldHVybiBnZXRNYXlCZU51bGwoKSA9PSBvdGhlci5nZXRNYXlCZU51bGwoKTsKICAgICB9CiAg
ICAgCiAgICAgYm9vbCBvcGVyYXRvciE9KGNvbnN0IENhZ2VkQmFycmllclB0ciYgb3RoZXIpIGNv
bnN0CkBAIC03OSwxNCArMTI1LDE0IEBAIHB1YmxpYzoKICAgICAKICAgICBleHBsaWNpdCBvcGVy
YXRvciBib29sKCkgY29uc3QKICAgICB7Ci0gICAgICAgIHJldHVybiAhIW1fYmFycmllci5nZXQo
KTsKKyAgICAgICAgcmV0dXJuICp0aGlzICE9IENhZ2VkQmFycmllclB0cigpOwogICAgIH0KICAg
ICAKICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBVPgotICAgIHZvaWQgc2V0V2l0aG91dEJhcnJpZXIo
VSYmIHZhbHVlLCB1bnNpZ25lZCBzaXplKSB7IG1fYmFycmllci5zZXRXaXRob3V0QmFycmllcihD
YWdlZFR5cGUoc3RkOjpmb3J3YXJkPFU+KHZhbHVlKSwgc2l6ZSkpOyB9CisgICAgdm9pZCBzZXRX
aXRob3V0QmFycmllcihVJiYgdmFsdWUpIHsgbV9iYXJyaWVyLnNldFdpdGhvdXRCYXJyaWVyKHN0
ZDo6Zm9yd2FyZDxVPih2YWx1ZSkpOyB9CiAgICAgCiBwcml2YXRlOgotICAgIEF1eGlsaWFyeUJh
cnJpZXI8Q2FnZWRUeXBlPiBtX2JhcnJpZXI7CisgICAgQXV4aWxpYXJ5QmFycmllcjxDYWdlZFB0
cjxraW5kLCB2b2lkPj4gbV9iYXJyaWVyOwogfTsKIAogfSAvLyBuYW1lc3BhY2UgSlNDCkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9EYXRhVmlldy5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvRGF0YVZpZXcuY3BwCShyZXZpc2lvbiAy
NDYyNzEpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9EYXRhVmlldy5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTMzLDcgKzMzLDggQEAKIG5hbWVzcGFjZSBKU0MgewogCiBEYXRhVmll
dzo6RGF0YVZpZXcoUmVmUHRyPEFycmF5QnVmZmVyPiYmIGJ1ZmZlciwgdW5zaWduZWQgYnl0ZU9m
ZnNldCwgdW5zaWduZWQgYnl0ZUxlbmd0aCkKLSAgICA6IEFycmF5QnVmZmVyVmlldyhXVEZNb3Zl
KGJ1ZmZlciksIGJ5dGVPZmZzZXQsIGJ5dGVMZW5ndGgpCisgICAgOiBBcnJheUJ1ZmZlclZpZXco
V1RGTW92ZShidWZmZXIpLCBieXRlT2Zmc2V0KQorICAgICwgbV9ieXRlTGVuZ3RoKGJ5dGVMZW5n
dGgpCiB7CiB9CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0RhdGFWaWV3
LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvRGF0YVZpZXcu
aAkocmV2aXNpb24gMjQ2MjcxKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvRGF0
YVZpZXcuaAkod29ya2luZyBjb3B5KQpAQCAtMzgsNiArMzgsMTEgQEAgcHVibGljOgogICAgIEpT
X0VYUE9SVF9QUklWQVRFIHN0YXRpYyBSZWY8RGF0YVZpZXc+IGNyZWF0ZShSZWZQdHI8QXJyYXlC
dWZmZXI+JiYsIHVuc2lnbmVkIGJ5dGVPZmZzZXQsIHVuc2lnbmVkIGxlbmd0aCk7CiAgICAgc3Rh
dGljIFJlZjxEYXRhVmlldz4gY3JlYXRlKFJlZlB0cjxBcnJheUJ1ZmZlcj4mJik7CiAgICAgCisg
ICAgdW5zaWduZWQgYnl0ZUxlbmd0aCgpIGNvbnN0IG92ZXJyaWRlCisgICAgeworICAgICAgICBy
ZXR1cm4gbV9ieXRlTGVuZ3RoOworICAgIH0KKyAgICAKICAgICBUeXBlZEFycmF5VHlwZSBnZXRU
eXBlKCkgY29uc3Qgb3ZlcnJpZGUKICAgICB7CiAgICAgICAgIHJldHVybiBUeXBlRGF0YVZpZXc7
CkBAIC01Nyw3ICs2Miw3IEBAIHB1YmxpYzoKICAgICAgICAgfSBlbHNlCiAgICAgICAgICAgICBS
RUxFQVNFX0FTU0VSVChvZmZzZXQgKyBzaXplb2YoVCkgPD0gYnl0ZUxlbmd0aCgpKTsKICAgICAg
ICAgcmV0dXJuIGZsaXBCeXRlc0lmTGl0dGxlRW5kaWFuKAotICAgICAgICAgICAgKnJlaW50ZXJw
cmV0X2Nhc3Q8VCo+KHN0YXRpY19jYXN0PHVpbnQ4X3QqPihtX2Jhc2VBZGRyZXNzLmdldChieXRl
TGVuZ3RoKCkpKSArIG9mZnNldCksCisgICAgICAgICAgICAqcmVpbnRlcnByZXRfY2FzdDxUKj4o
c3RhdGljX2Nhc3Q8dWludDhfdCo+KG1fYmFzZUFkZHJlc3MuZ2V0KCkpICsgb2Zmc2V0KSwKICAg
ICAgICAgICAgIGxpdHRsZUVuZGlhbik7CiAgICAgfQogICAgIApAQCAtODEsOSArODYsMTIgQEAg
cHVibGljOgogICAgICAgICAgICAgKnN0YXR1cyA9IHRydWU7CiAgICAgICAgIH0gZWxzZQogICAg
ICAgICAgICAgUkVMRUFTRV9BU1NFUlQob2Zmc2V0ICsgc2l6ZW9mKFQpIDw9IGJ5dGVMZW5ndGgo
KSk7Ci0gICAgICAgICpyZWludGVycHJldF9jYXN0PFQqPihzdGF0aWNfY2FzdDx1aW50OF90Kj4o
bV9iYXNlQWRkcmVzcy5nZXQoYnl0ZUxlbmd0aCgpKSkgKyBvZmZzZXQpID0KKyAgICAgICAgKnJl
aW50ZXJwcmV0X2Nhc3Q8VCo+KHN0YXRpY19jYXN0PHVpbnQ4X3QqPihtX2Jhc2VBZGRyZXNzLmdl
dCgpKSArIG9mZnNldCkgPQogICAgICAgICAgICAgZmxpcEJ5dGVzSWZMaXR0bGVFbmRpYW4odmFs
dWUsIGxpdHRsZUVuZGlhbik7CiAgICAgfQorCitwcml2YXRlOgorICAgIHVuc2lnbmVkIG1fYnl0
ZUxlbmd0aDsKIH07CiAKIH0gLy8gbmFtZXNwYWNlIEpTQwpJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvRGlyZWN0QXJndW1lbnRzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcnVudGltZS9EaXJlY3RBcmd1bWVudHMuY3BwCShyZXZpc2lvbiAyNDYy
NzEpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9EaXJlY3RBcmd1bWVudHMuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC0xMDEsNyArMTAxLDcgQEAgdm9pZCBEaXJlY3RBcmd1bWVudHM6
OnZpc2l0Q2hpbGRyZW4oSlNDZQogICAgIHZpc2l0b3IuYXBwZW5kKHRoaXNPYmplY3QtPm1fY2Fs
bGVlKTsKIAogICAgIGlmICh0aGlzT2JqZWN0LT5tX21hcHBlZEFyZ3VtZW50cykKLSAgICAgICAg
dmlzaXRvci5tYXJrQXV4aWxpYXJ5KHRoaXNPYmplY3QtPm1fbWFwcGVkQXJndW1lbnRzLmdldCh0
aGlzT2JqZWN0LT5pbnRlcm5hbExlbmd0aCgpKSk7CisgICAgICAgIHZpc2l0b3IubWFya0F1eGls
aWFyeSh0aGlzT2JqZWN0LT5tX21hcHBlZEFyZ3VtZW50cy5nZXQoKSk7CiAgICAgR2VuZXJpY0Fy
Z3VtZW50czxEaXJlY3RBcmd1bWVudHM+Ojp2aXNpdENoaWxkcmVuKHRoaXNDZWxsLCB2aXNpdG9y
KTsKIH0KIApAQCAtMTIwLDggKzEyMCw4IEBAIHZvaWQgRGlyZWN0QXJndW1lbnRzOjpvdmVycmlk
ZVRoaW5ncyhWTSYKICAgICAKICAgICB2b2lkKiBiYWNraW5nU3RvcmUgPSB2bS5naWdhY2FnZUF1
eGlsaWFyeVNwYWNlKG1fbWFwcGVkQXJndW1lbnRzLmtpbmQpLmFsbG9jYXRlTm9uVmlydHVhbCh2
bSwgbWFwcGVkQXJndW1lbnRzU2l6ZSgpLCBudWxscHRyLCBBbGxvY2F0aW9uRmFpbHVyZU1vZGU6
OkFzc2VydCk7CiAgICAgYm9vbCogb3ZlcnJpZGVzID0gc3RhdGljX2Nhc3Q8Ym9vbCo+KGJhY2tp
bmdTdG9yZSk7Ci0gICAgbV9tYXBwZWRBcmd1bWVudHMuc2V0KHZtLCB0aGlzLCBvdmVycmlkZXMs
IGludGVybmFsTGVuZ3RoKCkpOwotICAgIGZvciAodW5zaWduZWQgaSA9IGludGVybmFsTGVuZ3Ro
KCk7IGktLTspCisgICAgbV9tYXBwZWRBcmd1bWVudHMuc2V0KHZtLCB0aGlzLCBvdmVycmlkZXMp
OworICAgIGZvciAodW5zaWduZWQgaSA9IG1fbGVuZ3RoOyBpLS07KQogICAgICAgICBvdmVycmlk
ZXNbaV0gPSBmYWxzZTsKIH0KIApAQCAtMTM0LDcgKzEzNCw3IEBAIHZvaWQgRGlyZWN0QXJndW1l
bnRzOjpvdmVycmlkZVRoaW5nc0lmTmUKIHZvaWQgRGlyZWN0QXJndW1lbnRzOjp1bm1hcEFyZ3Vt
ZW50KFZNJiB2bSwgdW5zaWduZWQgaW5kZXgpCiB7CiAgICAgb3ZlcnJpZGVUaGluZ3NJZk5lY2Vz
c2FyeSh2bSk7Ci0gICAgbV9tYXBwZWRBcmd1bWVudHMuYXQoaW5kZXgsIGludGVybmFsTGVuZ3Ro
KCkpID0gdHJ1ZTsKKyAgICBtX21hcHBlZEFyZ3VtZW50c1tpbmRleF0gPSB0cnVlOwogfQogCiB2
b2lkIERpcmVjdEFyZ3VtZW50czo6Y29weVRvQXJndW1lbnRzKEV4ZWNTdGF0ZSogZXhlYywgVmly
dHVhbFJlZ2lzdGVyIGZpcnN0RWxlbWVudERlc3QsIHVuc2lnbmVkIG9mZnNldCwgdW5zaWduZWQg
bGVuZ3RoKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvRGlyZWN0QXJndW1l
bnRzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvRGlyZWN0
QXJndW1lbnRzLmgJKHJldmlzaW9uIDI0NjI3MSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9y
dW50aW1lL0RpcmVjdEFyZ3VtZW50cy5oCSh3b3JraW5nIGNvcHkpCkBAIC04Niw3ICs4Niw3IEBA
IHB1YmxpYzoKICAgICAKICAgICBib29sIGlzTWFwcGVkQXJndW1lbnQodWludDMyX3QgaSkgY29u
c3QKICAgICB7Ci0gICAgICAgIHJldHVybiBpIDwgbV9sZW5ndGggJiYgKCFtX21hcHBlZEFyZ3Vt
ZW50cyB8fCAhbV9tYXBwZWRBcmd1bWVudHMuYXQoaSwgbV9sZW5ndGgpKTsKKyAgICAgICAgcmV0
dXJuIGkgPCBtX2xlbmd0aCAmJiAoIW1fbWFwcGVkQXJndW1lbnRzIHx8ICFtX21hcHBlZEFyZ3Vt
ZW50c1tpXSk7CiAgICAgfQogCiAgICAgYm9vbCBpc01hcHBlZEFyZ3VtZW50SW5ERkcodWludDMy
X3QgaSkgY29uc3QKQEAgLTE4Miw4ICsxODIsNyBAQCBwcml2YXRlOgogICAgIFdyaXRlQmFycmll
cjxKU0Z1bmN0aW9uPiBtX2NhbGxlZTsKICAgICB1aW50MzJfdCBtX2xlbmd0aDsgLy8gQWx3YXlz
IHRoZSBhY3R1YWwgbGVuZ3RoIG9mIGNhcHR1cmVkIGFyZ3VtZW50cyBhbmQgbmV2ZXIgd2hhdCB3
YXMgc3RvcmVkIGludG8gdGhlIGxlbmd0aCBwcm9wZXJ0eS4KICAgICB1aW50MzJfdCBtX21pbkNh
cGFjaXR5OyAvLyBUaGUgbWF4IG9mIHRoaXMgYW5kIGxlbmd0aCBkZXRlcm1pbmVzIHRoZSBjYXBh
Y2l0eSBvZiB0aGlzIG9iamVjdC4gSXQgbWF5IGJlIHRoZSBhY3R1YWwgY2FwYWNpdHksIG9yIG1h
eWJlIHNvbWV0aGluZyBzbWFsbGVyLiBXZSBhcnJhbmdlIGl0IHRoaXMgd2F5IHRvIGJlIGtpbmQg
dG8gdGhlIEpJVHMuCi0gICAgdXNpbmcgTWFwcGVkQXJndW1lbnRzID0gQ2FnZWRCYXJyaWVyUHRy
PEdpZ2FjYWdlOjpQcmltaXRpdmUsIGJvb2w+OwotICAgIE1hcHBlZEFyZ3VtZW50cyBtX21hcHBl
ZEFyZ3VtZW50czsgLy8gSWYgbm9uLW51bGwsIGl0IG1lYW5zIHRoYXQgbGVuZ3RoLCBjYWxsZWUs
IGFuZCBjYWxsZXIgYXJlIGZ1bGx5IG1hdGVyaWFsaXplZCBwcm9wZXJ0aWVzLgorICAgIENhZ2Vk
QmFycmllclB0cjxHaWdhY2FnZTo6UHJpbWl0aXZlLCBib29sPiBtX21hcHBlZEFyZ3VtZW50czsg
Ly8gSWYgbm9uLW51bGwsIGl0IG1lYW5zIHRoYXQgbGVuZ3RoLCBjYWxsZWUsIGFuZCBjYWxsZXIg
YXJlIGZ1bGx5IG1hdGVyaWFsaXplZCBwcm9wZXJ0aWVzLgogfTsKIAogfSAvLyBuYW1lc3BhY2Ug
SlNDCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9HZW5lcmljQXJndW1lbnRz
LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvR2VuZXJpY0Fy
Z3VtZW50cy5oCShyZXZpc2lvbiAyNDYyNzEpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9HZW5lcmljQXJndW1lbnRzLmgJKHdvcmtpbmcgY29weSkKQEAgLTYwLDkgKzYwLDggQEAg
cHJvdGVjdGVkOgogICAgIGJvb2wgaXNNb2RpZmllZEFyZ3VtZW50RGVzY3JpcHRvcih1bnNpZ25l
ZCBpbmRleCwgdW5zaWduZWQgbGVuZ3RoKTsKIAogICAgIHZvaWQgY29weVRvQXJndW1lbnRzKEV4
ZWNTdGF0ZSosIFZpcnR1YWxSZWdpc3RlciBmaXJzdEVsZW1lbnREZXN0LCB1bnNpZ25lZCBvZmZz
ZXQsIHVuc2lnbmVkIGxlbmd0aCk7Ci0KLSAgICB1c2luZyBNb2RpZmllZEFyZ3VtZW50c1B0ciA9
IENhZ2VkQmFycmllclB0cjxHaWdhY2FnZTo6UHJpbWl0aXZlLCBib29sPjsKLSAgICBNb2RpZmll
ZEFyZ3VtZW50c1B0ciBtX21vZGlmaWVkQXJndW1lbnRzRGVzY3JpcHRvcjsKKyAgICAKKyAgICBD
YWdlZEJhcnJpZXJQdHI8R2lnYWNhZ2U6OlByaW1pdGl2ZSwgYm9vbD4gbV9tb2RpZmllZEFyZ3Vt
ZW50c0Rlc2NyaXB0b3I7CiB9OwogCiB9IC8vIG5hbWVzcGFjZSBKU0MKSW5kZXg6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ydW50aW1lL0dlbmVyaWNBcmd1bWVudHNJbmxpbmVzLmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvR2VuZXJpY0FyZ3VtZW50c0lubGlu
ZXMuaAkocmV2aXNpb24gMjQ2MjcxKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUv
R2VuZXJpY0FyZ3VtZW50c0lubGluZXMuaAkod29ya2luZyBjb3B5KQpAQCAtMzgsNyArMzgsNyBA
QCB2b2lkIEdlbmVyaWNBcmd1bWVudHM8VHlwZT46OnZpc2l0Q2hpbGRyCiAgICAgQmFzZTo6dmlz
aXRDaGlsZHJlbih0aGlzQ2VsbCwgdmlzaXRvcik7CiAgICAgCiAgICAgaWYgKHRoaXNPYmplY3Qt
Pm1fbW9kaWZpZWRBcmd1bWVudHNEZXNjcmlwdG9yKQotICAgICAgICB2aXNpdG9yLm1hcmtBdXhp
bGlhcnkodGhpc09iamVjdC0+bV9tb2RpZmllZEFyZ3VtZW50c0Rlc2NyaXB0b3IuZ2V0VW5zYWZl
KCkpOworICAgICAgICB2aXNpdG9yLm1hcmtBdXhpbGlhcnkodGhpc09iamVjdC0+bV9tb2RpZmll
ZEFyZ3VtZW50c0Rlc2NyaXB0b3IuZ2V0KCkpOwogfQogCiB0ZW1wbGF0ZTx0eXBlbmFtZSBUeXBl
PgpAQCAtMjY1LDcgKzI2NSw3IEBAIHZvaWQgR2VuZXJpY0FyZ3VtZW50czxUeXBlPjo6aW5pdE1v
ZGlmaWUKICAgICBpZiAoYXJnc0xlbmd0aCkgewogICAgICAgICB2b2lkKiBiYWNraW5nU3RvcmUg
PSB2bS5naWdhY2FnZUF1eGlsaWFyeVNwYWNlKG1fbW9kaWZpZWRBcmd1bWVudHNEZXNjcmlwdG9y
LmtpbmQpLmFsbG9jYXRlTm9uVmlydHVhbCh2bSwgV1RGOjpyb3VuZFVwVG9NdWx0aXBsZU9mPDg+
KGFyZ3NMZW5ndGgpLCBudWxscHRyLCBBbGxvY2F0aW9uRmFpbHVyZU1vZGU6OkFzc2VydCk7CiAg
ICAgICAgIGJvb2wqIG1vZGlmaWVkQXJndW1lbnRzID0gc3RhdGljX2Nhc3Q8Ym9vbCo+KGJhY2tp
bmdTdG9yZSk7Ci0gICAgICAgIG1fbW9kaWZpZWRBcmd1bWVudHNEZXNjcmlwdG9yLnNldCh2bSwg
dGhpcywgbW9kaWZpZWRBcmd1bWVudHMsIGFyZ3NMZW5ndGgpOworICAgICAgICBtX21vZGlmaWVk
QXJndW1lbnRzRGVzY3JpcHRvci5zZXQodm0sIHRoaXMsIG1vZGlmaWVkQXJndW1lbnRzKTsKICAg
ICAgICAgZm9yICh1bnNpZ25lZCBpID0gYXJnc0xlbmd0aDsgaS0tOykKICAgICAgICAgICAgIG1v
ZGlmaWVkQXJndW1lbnRzW2ldID0gZmFsc2U7CiAgICAgfQpAQCAtMjgzLDcgKzI4Myw3IEBAIHZv
aWQgR2VuZXJpY0FyZ3VtZW50czxUeXBlPjo6c2V0TW9kaWZpZWQKIHsKICAgICBpbml0TW9kaWZp
ZWRBcmd1bWVudHNEZXNjcmlwdG9ySWZOZWNlc3Nhcnkodm0sIGxlbmd0aCk7CiAgICAgaWYgKGlu
ZGV4IDwgbGVuZ3RoKQotICAgICAgICBtX21vZGlmaWVkQXJndW1lbnRzRGVzY3JpcHRvci5hdChp
bmRleCwgbGVuZ3RoKSA9IHRydWU7CisgICAgICAgIG1fbW9kaWZpZWRBcmd1bWVudHNEZXNjcmlw
dG9yW2luZGV4XSA9IHRydWU7CiB9CiAKIHRlbXBsYXRlPHR5cGVuYW1lIFR5cGU+CkBAIC0yOTIs
NyArMjkyLDcgQEAgYm9vbCBHZW5lcmljQXJndW1lbnRzPFR5cGU+Ojppc01vZGlmaWVkQQogICAg
IGlmICghbV9tb2RpZmllZEFyZ3VtZW50c0Rlc2NyaXB0b3IpCiAgICAgICAgIHJldHVybiBmYWxz
ZTsKICAgICBpZiAoaW5kZXggPCBsZW5ndGgpCi0gICAgICAgIHJldHVybiBtX21vZGlmaWVkQXJn
dW1lbnRzRGVzY3JpcHRvci5hdChpbmRleCwgbGVuZ3RoKTsKKyAgICAgICAgcmV0dXJuIG1fbW9k
aWZpZWRBcmd1bWVudHNEZXNjcmlwdG9yW2luZGV4XTsKICAgICByZXR1cm4gZmFsc2U7CiB9CiAK
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0dlbmVyaWNUeXBlZEFycmF5Vmll
dy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0dlbmVyaWNU
eXBlZEFycmF5Vmlldy5oCShyZXZpc2lvbiAyNDYyNzEpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvcnVudGltZS9HZW5lcmljVHlwZWRBcnJheVZpZXcuaAkod29ya2luZyBjb3B5KQpAQCAtNTgs
NyArNTgsOCBAQCBwdWJsaWM6CiAgICAgICAgIHJldHVybiBzZXRSYW5nZUltcGwoCiAgICAgICAg
ICAgICByZWludGVycHJldF9jYXN0PGNvbnN0IGNoYXIqPihkYXRhKSwKICAgICAgICAgICAgIGNv
dW50ICogc2l6ZW9mKHR5cGVuYW1lIEFkYXB0b3I6OlR5cGUpLAotICAgICAgICAgICAgb2Zmc2V0
ICogc2l6ZW9mKHR5cGVuYW1lIEFkYXB0b3I6OlR5cGUpKTsKKyAgICAgICAgICAgIG9mZnNldCAq
IHNpemVvZih0eXBlbmFtZSBBZGFwdG9yOjpUeXBlKSwKKyAgICAgICAgICAgIGludGVybmFsQnl0
ZUxlbmd0aCgpKTsKICAgICB9CiAgICAgCiAgICAgYm9vbCB6ZXJvUmFuZ2UodW5zaWduZWQgb2Zm
c2V0LCBzaXplX3QgY291bnQpCkBAIC03Miw3ICs3MywxMiBAQCBwdWJsaWM6CiAgICAgewogICAg
ICAgICBpZiAoaXNOZXV0ZXJlZCgpKQogICAgICAgICAgICAgcmV0dXJuIDA7Ci0gICAgICAgIHJl
dHVybiBieXRlTGVuZ3RoKCkgLyBzaXplb2YodHlwZW5hbWUgQWRhcHRvcjo6VHlwZSk7CisgICAg
ICAgIHJldHVybiBtX2xlbmd0aDsKKyAgICB9CisgICAgCisgICAgdW5zaWduZWQgYnl0ZUxlbmd0
aCgpIGNvbnN0IG92ZXJyaWRlCisgICAgeworICAgICAgICByZXR1cm4gaW50ZXJuYWxCeXRlTGVu
Z3RoKCk7CiAgICAgfQogCiAgICAgdHlwZW5hbWUgQWRhcHRvcjo6VHlwZSBpdGVtKHVuc2lnbmVk
IGluZGV4KSBjb25zdApAQCAtOTgsNyArMTA0LDggQEAgcHVibGljOgogICAgICAgICByZXR1cm4g
Z2V0UmFuZ2VJbXBsKAogICAgICAgICAgICAgcmVpbnRlcnByZXRfY2FzdDxjaGFyKj4oZGF0YSks
CiAgICAgICAgICAgICBjb3VudCAqIHNpemVvZih0eXBlbmFtZSBBZGFwdG9yOjpUeXBlKSwKLSAg
ICAgICAgICAgIG9mZnNldCAqIHNpemVvZih0eXBlbmFtZSBBZGFwdG9yOjpUeXBlKSk7CisgICAg
ICAgICAgICBvZmZzZXQgKiBzaXplb2YodHlwZW5hbWUgQWRhcHRvcjo6VHlwZSksCisgICAgICAg
ICAgICBpbnRlcm5hbEJ5dGVMZW5ndGgoKSk7CiAgICAgfQogCiAgICAgYm9vbCBjaGVja0luYm91
bmREYXRhKHVuc2lnbmVkIG9mZnNldCwgc2l6ZV90IGNvdW50KSBjb25zdApAQCAtMTE5LDYgKzEy
NiwxNCBAQCBwdWJsaWM6CiAgICAgfQogCiAgICAgSlNBcnJheUJ1ZmZlclZpZXcqIHdyYXAoRXhl
Y1N0YXRlKiwgSlNHbG9iYWxPYmplY3QqKSBvdmVycmlkZTsKKworcHJpdmF0ZToKKyAgICB1bnNp
Z25lZCBpbnRlcm5hbEJ5dGVMZW5ndGgoKSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuIGxl
bmd0aCgpICogc2l6ZW9mKHR5cGVuYW1lIEFkYXB0b3I6OlR5cGUpOworICAgIH0KKworICAgIHVu
c2lnbmVkIG1fbGVuZ3RoOwogfTsKIAogfSAvLyBuYW1lc3BhY2UgSlNDCkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcnVudGltZS9HZW5lcmljVHlwZWRBcnJheVZpZXdJbmxpbmVzLmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvR2VuZXJpY1R5cGVkQXJy
YXlWaWV3SW5saW5lcy5oCShyZXZpc2lvbiAyNDYyNzEpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvcnVudGltZS9HZW5lcmljVHlwZWRBcnJheVZpZXdJbmxpbmVzLmgJKHdvcmtpbmcgY29weSkK
QEAgLTMyLDggKzMyLDkgQEAgbmFtZXNwYWNlIEpTQyB7CiAKIHRlbXBsYXRlPHR5cGVuYW1lIEFk
YXB0b3I+CiBHZW5lcmljVHlwZWRBcnJheVZpZXc8QWRhcHRvcj46OkdlbmVyaWNUeXBlZEFycmF5
VmlldygKLVJlZlB0cjxBcnJheUJ1ZmZlcj4mJiBidWZmZXIsIHVuc2lnbmVkIGJ5dGVPZmZzZXQs
IHVuc2lnbmVkIGxlbmd0aCkKLSAgICA6IEFycmF5QnVmZmVyVmlldyhXVEZNb3ZlKGJ1ZmZlciks
IGJ5dGVPZmZzZXQsIGxlbmd0aCAqIHNpemVvZih0eXBlbmFtZSBBZGFwdG9yOjpUeXBlKSkKKyAg
ICBSZWZQdHI8QXJyYXlCdWZmZXI+JiYgYnVmZmVyLCB1bnNpZ25lZCBieXRlT2Zmc2V0LCB1bnNp
Z25lZCBsZW5ndGgpCisgICAgOiBBcnJheUJ1ZmZlclZpZXcoV1RGTW92ZShidWZmZXIpLCBieXRl
T2Zmc2V0KQorICAgICwgbV9sZW5ndGgobGVuZ3RoKQogewogfQogCkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvcnVudGltZS9KU0FycmF5QnVmZmVyVmlldy5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNBcnJheUJ1ZmZlclZpZXcuY3BwCShyZXZp
c2lvbiAyNDYyNzEpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0FycmF5QnVm
ZmVyVmlldy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJp
Z2h0IChDKSAyMDEzLTIwMTkgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29w
eXJpZ2h0IChDKSAyMDEzLTIwMTggQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoK
ICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdp
dGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRo
YXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC01MCwxMiArNTAsMTEgQEAgU3RyaW5nIEpT
QXJyYXlCdWZmZXJWaWV3Ojp0b1N0cmluZ05hbWUoYwogSlNBcnJheUJ1ZmZlclZpZXc6OkNvbnN0
cnVjdGlvbkNvbnRleHQ6OkNvbnN0cnVjdGlvbkNvbnRleHQoCiAgICAgU3RydWN0dXJlKiBzdHJ1
Y3R1cmUsIHVpbnQzMl90IGxlbmd0aCwgdm9pZCogdmVjdG9yKQogICAgIDogbV9zdHJ1Y3R1cmUo
c3RydWN0dXJlKQotICAgICwgbV92ZWN0b3IodmVjdG9yLCBsZW5ndGgpCisgICAgLCBtX3ZlY3Rv
cih2ZWN0b3IpCiAgICAgLCBtX2xlbmd0aChsZW5ndGgpCiAgICAgLCBtX21vZGUoRmFzdFR5cGVk
QXJyYXkpCiAgICAgLCBtX2J1dHRlcmZseShudWxscHRyKQogewotICAgIEFTU0VSVCh2ZWN0b3Ig
PT0gcmVtb3ZlQXJyYXlQdHJUYWcodmVjdG9yKSk7CiAgICAgUkVMRUFTRV9BU1NFUlQobGVuZ3Ro
IDw9IGZhc3RTaXplTGltaXQpOwogfQogCkBAIC03NSwxMSArNzQsMTEgQEAgSlNBcnJheUJ1ZmZl
clZpZXc6OkNvbnN0cnVjdGlvbkNvbnRleHQ6OgogICAgICAgICAgICAgcmV0dXJuOwogCiAgICAg
ICAgIG1fc3RydWN0dXJlID0gc3RydWN0dXJlOwotICAgICAgICBtX3ZlY3RvciA9IFZlY3RvclR5
cGUodGVtcCwgbGVuZ3RoKTsKKyAgICAgICAgbV92ZWN0b3IgPSB0ZW1wOwogICAgICAgICBtX21v
ZGUgPSBGYXN0VHlwZWRBcnJheTsKIAogICAgICAgICBpZiAobW9kZSA9PSBaZXJvRmlsbCkgewot
ICAgICAgICAgICAgdWludDY0X3QqIGFzV29yZHMgPSBzdGF0aWNfY2FzdDx1aW50NjRfdCo+KHZl
Y3RvcigpKTsKKyAgICAgICAgICAgIHVpbnQ2NF90KiBhc1dvcmRzID0gc3RhdGljX2Nhc3Q8dWlu
dDY0X3QqPihtX3ZlY3Rvci5nZXRNYXlCZU51bGwoKSk7CiAgICAgICAgICAgICBmb3IgKHVuc2ln
bmVkIGkgPSBzaXplIC8gc2l6ZW9mKHVpbnQ2NF90KTsgaS0tOykKICAgICAgICAgICAgICAgICBh
c1dvcmRzW2ldID0gMDsKICAgICAgICAgfQpAQCAtOTIsMTEgKzkxLDExIEBAIEpTQXJyYXlCdWZm
ZXJWaWV3OjpDb25zdHJ1Y3Rpb25Db250ZXh0OjoKICAgICAgICAgcmV0dXJuOwogICAgIAogICAg
IHNpemVfdCBzaXplID0gc3RhdGljX2Nhc3Q8c2l6ZV90PihsZW5ndGgpICogc3RhdGljX2Nhc3Q8
c2l6ZV90PihlbGVtZW50U2l6ZSk7Ci0gICAgbV92ZWN0b3IgPSBWZWN0b3JUeXBlKEdpZ2FjYWdl
Ojp0cnlNYWxsb2MoR2lnYWNhZ2U6OlByaW1pdGl2ZSwgc2l6ZSksIGxlbmd0aCk7CisgICAgbV92
ZWN0b3IgPSBHaWdhY2FnZTo6dHJ5TWFsbG9jKEdpZ2FjYWdlOjpQcmltaXRpdmUsIHNpemUpOwog
ICAgIGlmICghbV92ZWN0b3IpCiAgICAgICAgIHJldHVybjsKICAgICBpZiAobW9kZSA9PSBaZXJv
RmlsbCkKLSAgICAgICAgbWVtc2V0KHZlY3RvcigpLCAwLCBzaXplKTsKKyAgICAgICAgbWVtc2V0
KG1fdmVjdG9yLmdldCgpLCAwLCBzaXplKTsKICAgICAKICAgICB2bS5oZWFwLnJlcG9ydEV4dHJh
TWVtb3J5QWxsb2NhdGVkKHN0YXRpY19jYXN0PHNpemVfdD4obGVuZ3RoKSAqIGVsZW1lbnRTaXpl
KTsKICAgICAKQEAgLTExMSw4ICsxMTAsNyBAQCBKU0FycmF5QnVmZmVyVmlldzo6Q29uc3RydWN0
aW9uQ29udGV4dDo6CiAgICAgLCBtX2xlbmd0aChsZW5ndGgpCiAgICAgLCBtX21vZGUoV2FzdGVm
dWxUeXBlZEFycmF5KQogewotICAgIEFTU0VSVChhcnJheUJ1ZmZlci0+ZGF0YSgpID09IHJlbW92
ZUFycmF5UHRyVGFnKGFycmF5QnVmZmVyLT5kYXRhKCkpKTsKLSAgICBtX3ZlY3RvciA9IFZlY3Rv
clR5cGUoc3RhdGljX2Nhc3Q8dWludDhfdCo+KGFycmF5QnVmZmVyLT5kYXRhKCkpICsgYnl0ZU9m
ZnNldCwgbGVuZ3RoKTsKKyAgICBtX3ZlY3RvciA9IHN0YXRpY19jYXN0PHVpbnQ4X3QqPihhcnJh
eUJ1ZmZlci0+ZGF0YSgpKSArIGJ5dGVPZmZzZXQ7CiAgICAgSW5kZXhpbmdIZWFkZXIgaW5kZXhp
bmdIZWFkZXI7CiAgICAgaW5kZXhpbmdIZWFkZXIuc2V0QXJyYXlCdWZmZXIoYXJyYXlCdWZmZXIu
Z2V0KCkpOwogICAgIG1fYnV0dGVyZmx5ID0gQnV0dGVyZmx5OjpjcmVhdGUodm0sIDAsIDAsIDAs
IHRydWUsIGluZGV4aW5nSGVhZGVyLCAwKTsKQEAgLTEyNiw4ICsxMjQsNyBAQCBKU0FycmF5QnVm
ZmVyVmlldzo6Q29uc3RydWN0aW9uQ29udGV4dDo6CiAgICAgLCBtX21vZGUoRGF0YVZpZXdNb2Rl
KQogICAgICwgbV9idXR0ZXJmbHkoMCkKIHsKLSAgICBBU1NFUlQoYXJyYXlCdWZmZXItPmRhdGEo
KSA9PSByZW1vdmVBcnJheVB0clRhZyhhcnJheUJ1ZmZlci0+ZGF0YSgpKSk7Ci0gICAgbV92ZWN0
b3IgPSBWZWN0b3JUeXBlKHN0YXRpY19jYXN0PHVpbnQ4X3QqPihhcnJheUJ1ZmZlci0+ZGF0YSgp
KSArIGJ5dGVPZmZzZXQsIGxlbmd0aCk7CisgICAgbV92ZWN0b3IgPSBzdGF0aWNfY2FzdDx1aW50
OF90Kj4oYXJyYXlCdWZmZXItPmRhdGEoKSkgKyBieXRlT2Zmc2V0OwogfQogCiBKU0FycmF5QnVm
ZmVyVmlldzo6SlNBcnJheUJ1ZmZlclZpZXcoVk0mIHZtLCBDb25zdHJ1Y3Rpb25Db250ZXh0JiBj
b250ZXh0KQpAQCAtMTM2LDggKzEzMyw3IEBAIEpTQXJyYXlCdWZmZXJWaWV3OjpKU0FycmF5QnVm
ZmVyVmlldyhWTSYKICAgICAsIG1fbW9kZShjb250ZXh0Lm1vZGUoKSkKIHsKICAgICBzZXRCdXR0
ZXJmbHkodm0sIGNvbnRleHQuYnV0dGVyZmx5KCkpOwotICAgIEFTU0VSVChjb250ZXh0LnZlY3Rv
cigpID09IHJlbW92ZUFycmF5UHRyVGFnKGNvbnRleHQudmVjdG9yKCkpKTsKLSAgICBtX3ZlY3Rv
ci5zZXRXaXRob3V0QmFycmllcihjb250ZXh0LnZlY3RvcigpLCBtX2xlbmd0aCk7CisgICAgbV92
ZWN0b3Iuc2V0V2l0aG91dEJhcnJpZXIoY29udGV4dC52ZWN0b3IoKSk7CiB9CiAKIHZvaWQgSlNB
cnJheUJ1ZmZlclZpZXc6OmZpbmlzaENyZWF0aW9uKFZNJiB2bSkKQEAgLTE5OCw3ICsxOTQsNyBA
QCB2b2lkIEpTQXJyYXlCdWZmZXJWaWV3OjpmaW5hbGl6ZShKU0NlbGwqCiAgICAgSlNBcnJheUJ1
ZmZlclZpZXcqIHRoaXNPYmplY3QgPSBzdGF0aWNfY2FzdDxKU0FycmF5QnVmZmVyVmlldyo+KGNl
bGwpOwogICAgIEFTU0VSVCh0aGlzT2JqZWN0LT5tX21vZGUgPT0gT3ZlcnNpemVUeXBlZEFycmF5
IHx8IHRoaXNPYmplY3QtPm1fbW9kZSA9PSBXYXN0ZWZ1bFR5cGVkQXJyYXkpOwogICAgIGlmICh0
aGlzT2JqZWN0LT5tX21vZGUgPT0gT3ZlcnNpemVUeXBlZEFycmF5KQotICAgICAgICBHaWdhY2Fn
ZTo6ZnJlZShHaWdhY2FnZTo6UHJpbWl0aXZlLCB0aGlzT2JqZWN0LT52ZWN0b3IoKSk7CisgICAg
ICAgIEdpZ2FjYWdlOjpmcmVlKEdpZ2FjYWdlOjpQcmltaXRpdmUsIHRoaXNPYmplY3QtPm1fdmVj
dG9yLmdldCgpKTsKIH0KIAogSlNBcnJheUJ1ZmZlciogSlNBcnJheUJ1ZmZlclZpZXc6OnVuc2hh
cmVkSlNCdWZmZXIoRXhlY1N0YXRlKiBleGVjKQpAQCAtMjg3LDcgKzI4Myw3IEBAIEFycmF5QnVm
ZmVyKiBKU0FycmF5QnVmZmVyVmlldzo6c2xvd0Rvd24KICAgICB7CiAgICAgICAgIGF1dG8gbG9j
a2VyID0gaG9sZExvY2soY2VsbExvY2soKSk7CiAgICAgICAgIGJ1dHRlcmZseSgpLT5pbmRleGlu
Z0hlYWRlcigpLT5zZXRBcnJheUJ1ZmZlcihidWZmZXIuZ2V0KCkpOwotICAgICAgICBtX3ZlY3Rv
ci5zZXRXaXRob3V0QmFycmllcihidWZmZXItPmRhdGEoKSwgbV9sZW5ndGgpOworICAgICAgICBt
X3ZlY3Rvci5zZXRXaXRob3V0QmFycmllcihidWZmZXItPmRhdGEoKSk7CiAgICAgICAgIFdURjo6
c3RvcmVTdG9yZUZlbmNlKCk7CiAgICAgICAgIG1fbW9kZSA9IFdhc3RlZnVsVHlwZWRBcnJheTsK
ICAgICB9CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0FycmF5QnVmZmVy
Vmlldy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTQXJy
YXlCdWZmZXJWaWV3LmgJKHJldmlzaW9uIDI0NjI3MSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL0pTQXJyYXlCdWZmZXJWaWV3LmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1
IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTkgQXBwbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEzLCAyMDE2IEFwcGxlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBh
bmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBl
cm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMjcsNyAr
MjcsNiBAQAogCiAjaW5jbHVkZSAiQXV4aWxpYXJ5QmFycmllci5oIgogI2luY2x1ZGUgIkpTT2Jq
ZWN0LmgiCi0jaW5jbHVkZSA8d3RmL1RhZ2dlZEFycmF5U3RvcmFnZVB0ci5oPgogCiBuYW1lc3Bh
Y2UgSlNDIHsKIApAQCAtOTcsNyArOTYsNiBAQCBjbGFzcyBKU0FycmF5QnVmZmVyVmlldyA6IHB1
YmxpYyBKU05vbkZpCiBwdWJsaWM6CiAgICAgdHlwZWRlZiBKU05vbkZpbmFsT2JqZWN0IEJhc2U7
CiAgICAgc3RhdGljIGNvbnN0IHVuc2lnbmVkIGZhc3RTaXplTGltaXQgPSAxMDAwOwotICAgIHVz
aW5nIFZlY3RvclB0ciA9IENhZ2VkQmFycmllclB0cjxHaWdhY2FnZTo6UHJpbWl0aXZlLCB2b2lk
LCB0YWdDYWdlZFB0cj47CiAgICAgCiAgICAgc3RhdGljIHNpemVfdCBzaXplT2YodWludDMyX3Qg
bGVuZ3RoLCB1aW50MzJfdCBlbGVtZW50U2l6ZSkKICAgICB7CkBAIC0xMzUsMTUgKzEzMywxNCBA
QCBwcm90ZWN0ZWQ6CiAgICAgICAgIGJvb2wgb3BlcmF0b3IhKCkgY29uc3QgeyByZXR1cm4gIW1f
c3RydWN0dXJlOyB9CiAgICAgICAgIAogICAgICAgICBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSgpIGNv
bnN0IHsgcmV0dXJuIG1fc3RydWN0dXJlOyB9Ci0gICAgICAgIHZvaWQqIHZlY3RvcigpIGNvbnN0
IHsgcmV0dXJuIG1fdmVjdG9yLmdldE1heUJlTnVsbChtX2xlbmd0aCk7IH0KKyAgICAgICAgdm9p
ZCogdmVjdG9yKCkgY29uc3QgeyByZXR1cm4gbV92ZWN0b3IuZ2V0TWF5QmVOdWxsKCk7IH0KICAg
ICAgICAgdWludDMyX3QgbGVuZ3RoKCkgY29uc3QgeyByZXR1cm4gbV9sZW5ndGg7IH0KICAgICAg
ICAgVHlwZWRBcnJheU1vZGUgbW9kZSgpIGNvbnN0IHsgcmV0dXJuIG1fbW9kZTsgfQogICAgICAg
ICBCdXR0ZXJmbHkqIGJ1dHRlcmZseSgpIGNvbnN0IHsgcmV0dXJuIG1fYnV0dGVyZmx5OyB9CiAg
ICAgICAgIAogICAgIHByaXZhdGU6CiAgICAgICAgIFN0cnVjdHVyZSogbV9zdHJ1Y3R1cmU7Ci0g
ICAgICAgIHVzaW5nIFZlY3RvclR5cGUgPSBDYWdlZFB0cjxHaWdhY2FnZTo6UHJpbWl0aXZlLCB2
b2lkLCB0YWdDYWdlZFB0cj47Ci0gICAgICAgIFZlY3RvclR5cGUgbV92ZWN0b3I7CisgICAgICAg
IENhZ2VkUHRyPEdpZ2FjYWdlOjpQcmltaXRpdmUsIHZvaWQ+IG1fdmVjdG9yOwogICAgICAgICB1
aW50MzJfdCBtX2xlbmd0aDsKICAgICAgICAgVHlwZWRBcnJheU1vZGUgbV9tb2RlOwogICAgICAg
ICBCdXR0ZXJmbHkqIG1fYnV0dGVyZmx5OwpAQCAtMTY3LDExICsxNjQsMTAgQEAgcHVibGljOgog
ICAgIEpTQXJyYXlCdWZmZXIqIHBvc3NpYmx5U2hhcmVkSlNCdWZmZXIoRXhlY1N0YXRlKiBleGVj
KTsKICAgICBSZWZQdHI8QXJyYXlCdWZmZXJWaWV3PiB1bnNoYXJlZEltcGwoKTsKICAgICBKU19F
WFBPUlRfUFJJVkFURSBSZWZQdHI8QXJyYXlCdWZmZXJWaWV3PiBwb3NzaWJseVNoYXJlZEltcGwo
KTsKLSAgICBib29sIGlzTmV1dGVyZWQoKSB7IHJldHVybiBoYXNBcnJheUJ1ZmZlcigpICYmICFo
YXNWZWN0b3IoKTsgfQorICAgIGJvb2wgaXNOZXV0ZXJlZCgpIHsgcmV0dXJuIGhhc0FycmF5QnVm
ZmVyKCkgJiYgIXZlY3RvcigpOyB9CiAgICAgdm9pZCBuZXV0ZXIoKTsKLQotICAgIGJvb2wgaGFz
VmVjdG9yKCkgY29uc3QgeyByZXR1cm4gISFtX3ZlY3RvcjsgfQotICAgIHZvaWQqIHZlY3Rvcigp
IGNvbnN0IHsgcmV0dXJuIG1fdmVjdG9yLmdldE1heUJlTnVsbChsZW5ndGgoKSk7IH0KKyAgICAK
KyAgICB2b2lkKiB2ZWN0b3IoKSBjb25zdCB7IHJldHVybiBtX3ZlY3Rvci5nZXRNYXlCZU51bGwo
KTsgfQogICAgIAogICAgIHVuc2lnbmVkIGJ5dGVPZmZzZXQoKTsKICAgICB1bnNpZ25lZCBsZW5n
dGgoKSBjb25zdCB7IHJldHVybiBtX2xlbmd0aDsgfQpAQCAtMTk1LDcgKzE5MSw3IEBAIHByb3Rl
Y3RlZDoKIAogICAgIHN0YXRpYyBTdHJpbmcgdG9TdHJpbmdOYW1lKGNvbnN0IEpTT2JqZWN0Kiwg
RXhlY1N0YXRlKik7CiAKLSAgICBWZWN0b3JQdHIgbV92ZWN0b3I7CisgICAgQ2FnZWRCYXJyaWVy
UHRyPEdpZ2FjYWdlOjpQcmltaXRpdmUsIHZvaWQ+IG1fdmVjdG9yOwogICAgIHVpbnQzMl90IG1f
bGVuZ3RoOwogICAgIFR5cGVkQXJyYXlNb2RlIG1fbW9kZTsKIH07CkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvcnVudGltZS9KU0dlbmVyaWNUeXBlZEFycmF5Vmlld0lubGluZXMuaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0dlbmVyaWNUeXBlZEFy
cmF5Vmlld0lubGluZXMuaAkocmV2aXNpb24gMjQ2MjcxKQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL3J1bnRpbWUvSlNHZW5lcmljVHlwZWRBcnJheVZpZXdJbmxpbmVzLmgJKHdvcmtpbmcgY29w
eSkKQEAgLTc3LDcgKzc3LDggQEAgSlNHZW5lcmljVHlwZWRBcnJheVZpZXc8QWRhcHRvcj4qIEpT
R2VuZQogfQogCiB0ZW1wbGF0ZTx0eXBlbmFtZSBBZGFwdG9yPgotSlNHZW5lcmljVHlwZWRBcnJh
eVZpZXc8QWRhcHRvcj4qIEpTR2VuZXJpY1R5cGVkQXJyYXlWaWV3PEFkYXB0b3I+OjpjcmVhdGVV
bmluaXRpYWxpemVkKEV4ZWNTdGF0ZSogZXhlYywgU3RydWN0dXJlKiBzdHJ1Y3R1cmUsIHVuc2ln
bmVkIGxlbmd0aCkKK0pTR2VuZXJpY1R5cGVkQXJyYXlWaWV3PEFkYXB0b3I+KiBKU0dlbmVyaWNU
eXBlZEFycmF5VmlldzxBZGFwdG9yPjo6Y3JlYXRlVW5pbml0aWFsaXplZCgKKyAgICBFeGVjU3Rh
dGUqIGV4ZWMsIFN0cnVjdHVyZSogc3RydWN0dXJlLCB1bnNpZ25lZCBsZW5ndGgpCiB7CiAgICAg
Vk0mIHZtID0gZXhlYy0+dm0oKTsKICAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09Q
RSh2bSk7CkBAIC01MDYsNyArNTA3LDcgQEAgc2l6ZV90IEpTR2VuZXJpY1R5cGVkQXJyYXlWaWV3
PEFkYXB0b3I+OgogCiAgICAgaWYgKHRoaXNPYmplY3QtPm1fbW9kZSA9PSBPdmVyc2l6ZVR5cGVk
QXJyYXkpCiAgICAgICAgIHJldHVybiBCYXNlOjplc3RpbWF0ZWRTaXplKHRoaXNPYmplY3QsIHZt
KSArIHRoaXNPYmplY3QtPmJ5dGVTaXplKCk7Ci0gICAgaWYgKHRoaXNPYmplY3QtPm1fbW9kZSA9
PSBGYXN0VHlwZWRBcnJheSAmJiB0aGlzT2JqZWN0LT5oYXNWZWN0b3IoKSkKKyAgICBpZiAodGhp
c09iamVjdC0+bV9tb2RlID09IEZhc3RUeXBlZEFycmF5ICYmIHRoaXNPYmplY3QtPm1fdmVjdG9y
KQogICAgICAgICByZXR1cm4gQmFzZTo6ZXN0aW1hdGVkU2l6ZSh0aGlzT2JqZWN0LCB2bSkgKyB0
aGlzT2JqZWN0LT5ieXRlU2l6ZSgpOwogCiAgICAgcmV0dXJuIEJhc2U6OmVzdGltYXRlZFNpemUo
dGhpc09iamVjdCwgdm0pOwpAQCAtNTI1LDcgKzUyNiw3IEBAIHZvaWQgSlNHZW5lcmljVHlwZWRB
cnJheVZpZXc8QWRhcHRvcj46OnYKICAgICB7CiAgICAgICAgIGF1dG8gbG9ja2VyID0gaG9sZExv
Y2sodGhpc09iamVjdC0+Y2VsbExvY2soKSk7CiAgICAgICAgIG1vZGUgPSB0aGlzT2JqZWN0LT5t
X21vZGU7Ci0gICAgICAgIHZlY3RvciA9IHRoaXNPYmplY3QtPnZlY3RvcigpOworICAgICAgICB2
ZWN0b3IgPSB0aGlzT2JqZWN0LT5tX3ZlY3Rvci5nZXRNYXlCZU51bGwoKTsKICAgICAgICAgYnl0
ZVNpemUgPSB0aGlzT2JqZWN0LT5ieXRlU2l6ZSgpOwogICAgIH0KICAgICAKSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL09wdGlvbnMuaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcnVudGltZS9PcHRpb25zLmgJKHJldmlzaW9uIDI0NjI3MSkKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL09wdGlvbnMuaAkod29ya2luZyBjb3B5KQpAQCAt
NDkyLDcgKzQ5Miw4IEBAIGNvbnN0ZXhwciBib29sIGVuYWJsZVdlYkFzc2VtYmx5U3RyZWFtaW4K
ICAgICB2KHVuc2lnbmVkLCB3ZWJBc3NlbWJseUxvb3BEZWNyZW1lbnQsIDE1LCBOb3JtYWwsICJU
aGUgYW1vdW50IHRoZSB0aWVyIHVwIGNvdW50ZG93biBpcyBkZWNyZW1lbnRlZCBvbiBlYWNoIGxv
b3AgYmFja2VkZ2UuIikgXAogICAgIHYodW5zaWduZWQsIHdlYkFzc2VtYmx5RnVuY3Rpb25FbnRy
eURlY3JlbWVudCwgMSwgTm9ybWFsLCAiVGhlIGFtb3VudCB0aGUgdGllciB1cCBjb3VudGRvd24g
aXMgZGVjcmVtZW50ZWQgb24gZWFjaCBmdW5jdGlvbiBlbnRyeS4iKSBcCiAgICAgXAotICAgIHYo
Ym9vbCwgdXNlV2ViQXNzZW1ibHlGYXN0TWVtb3J5LCB0cnVlLCBOb3JtYWwsICJJZiB0cnVlLCB3
ZSB3aWxsIHRyeSB0byB1c2UgYSAzMi1iaXQgYWRkcmVzcyBzcGFjZSB3aXRoIGEgc2lnbmFsIGhh
bmRsZXIgdG8gYm91bmRzIGNoZWNrIHdhc20gbWVtb3J5LiIpIFwKKyAgICAvKiBGSVhNRTogZW5h
YmxlIGZhc3QgbWVtb3JpZXMgb24gaU9TIGFuZCBwcmUtYWxsb2NhdGUgdGhlbS4gaHR0cHM6Ly9i
dWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE3MDc3NCAqLyBcCisgICAgdihib29sLCB1
c2VXZWJBc3NlbWJseUZhc3RNZW1vcnksICFpc0lPUygpLCBOb3JtYWwsICJJZiB0cnVlLCB3ZSB3
aWxsIHRyeSB0byB1c2UgYSAzMi1iaXQgYWRkcmVzcyBzcGFjZSB3aXRoIGEgc2lnbmFsIGhhbmRs
ZXIgdG8gYm91bmRzIGNoZWNrIHdhc20gbWVtb3J5LiIpIFwKICAgICB2KGJvb2wsIGxvZ1dlYkFz
c2VtYmx5TWVtb3J5LCBmYWxzZSwgTm9ybWFsLCBudWxscHRyKSBcCiAgICAgdih1bnNpZ25lZCwg
d2ViQXNzZW1ibHlGYXN0TWVtb3J5UmVkem9uZVBhZ2VzLCAxMjgsIE5vcm1hbCwgIldlYkFzc2Vt
Ymx5IGZhc3QgbWVtb3JpZXMgdXNlIDRHaUIgdmlydHVhbCBhbGxvY2F0aW9ucywgcGx1cyBhIHJl
ZHpvbmUgKGNvdW50ZWQgYXMgbXVsdGlwbGUgb2YgNjRLaUIgV2ViQXNzZW1ibHkgcGFnZXMpIGF0
IHRoZSBlbmQgdG8gY2F0Y2ggcmVnK2ltbSBhY2Nlc3NlcyB3aGljaCBleGNlZWQgMzItYml0LCBh
bnl0aGluZyBiZXlvbmQgdGhlIHJlZHpvbmUgaXMgZXhwbGljaXRseSBib3VuZHMtY2hlY2tlZCIp
IFwKICAgICB2KGJvb2wsIGNyYXNoSWZXZWJBc3NlbWJseUNhbnRGYXN0TWVtb3J5LCBmYWxzZSwg
Tm9ybWFsLCAiSWYgdHJ1ZSwgd2Ugd2lsbCBjcmFzaCBpZiB3ZSBjYW4ndCBvYnRhaW4gZmFzdCBt
ZW1vcnkgZm9yIHdhc20uIikgXApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUv
U2NvcGVkQXJndW1lbnRzVGFibGUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ydW50aW1lL1Njb3BlZEFyZ3VtZW50c1RhYmxlLmNwcAkocmV2aXNpb24gMjQ2MjcxKQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU2NvcGVkQXJndW1lbnRzVGFibGUuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC02OCwxNiArNjgsMTYgQEAgU2NvcGVkQXJndW1lbnRzVGFibGUq
IFNjb3BlZEFyZ3VtZW50c1RhYgogewogICAgIFNjb3BlZEFyZ3VtZW50c1RhYmxlKiByZXN1bHQg
PSBjcmVhdGUodm0sIG1fbGVuZ3RoKTsKICAgICBmb3IgKHVuc2lnbmVkIGkgPSBtX2xlbmd0aDsg
aS0tOykKLSAgICAgICAgcmVzdWx0LT5hdChpKSA9IHRoaXMtPmF0KGkpOworICAgICAgICByZXN1
bHQtPm1fYXJndW1lbnRzW2ldID0gbV9hcmd1bWVudHNbaV07CiAgICAgcmV0dXJuIHJlc3VsdDsK
IH0KIAogU2NvcGVkQXJndW1lbnRzVGFibGUqIFNjb3BlZEFyZ3VtZW50c1RhYmxlOjpzZXRMZW5n
dGgoVk0mIHZtLCB1aW50MzJfdCBuZXdMZW5ndGgpCiB7CiAgICAgaWYgKExJS0VMWSghbV9sb2Nr
ZWQpKSB7Ci0gICAgICAgIEFyZ3VtZW50c1B0ciBuZXdBcmd1bWVudHMgPSBBcmd1bWVudHNQdHI6
OmNyZWF0ZShuZXdMZW5ndGgsIG5ld0xlbmd0aCk7CisgICAgICAgIEFyZ3VtZW50c1B0ciBuZXdB
cmd1bWVudHMgPSBBcmd1bWVudHNQdHI6OmNyZWF0ZShuZXdMZW5ndGgpOwogICAgICAgICBmb3Ig
KHVuc2lnbmVkIGkgPSBzdGQ6Om1pbihtX2xlbmd0aCwgbmV3TGVuZ3RoKTsgaS0tOykKLSAgICAg
ICAgICAgIG5ld0FyZ3VtZW50cy5hdChpLCBuZXdMZW5ndGgpID0gdGhpcy0+YXQoaSk7CisgICAg
ICAgICAgICBuZXdBcmd1bWVudHNbaV0gPSBtX2FyZ3VtZW50c1tpXTsKICAgICAgICAgbV9sZW5n
dGggPSBuZXdMZW5ndGg7CiAgICAgICAgIG1fYXJndW1lbnRzID0gV1RGTW92ZShuZXdBcmd1bWVu
dHMpOwogICAgICAgICByZXR1cm4gdGhpczsKQEAgLTg1LDEyICs4NSwxMCBAQCBTY29wZWRBcmd1
bWVudHNUYWJsZSogU2NvcGVkQXJndW1lbnRzVGFiCiAgICAgCiAgICAgU2NvcGVkQXJndW1lbnRz
VGFibGUqIHJlc3VsdCA9IGNyZWF0ZSh2bSwgbmV3TGVuZ3RoKTsKICAgICBmb3IgKHVuc2lnbmVk
IGkgPSBzdGQ6Om1pbihtX2xlbmd0aCwgbmV3TGVuZ3RoKTsgaS0tOykKLSAgICAgICAgcmVzdWx0
LT5hdChpKSA9IHRoaXMtPmF0KGkpOworICAgICAgICByZXN1bHQtPm1fYXJndW1lbnRzW2ldID0g
bV9hcmd1bWVudHNbaV07CiAgICAgcmV0dXJuIHJlc3VsdDsKIH0KIAotc3RhdGljX2Fzc2VydChz
dGQ6OmlzX3RyaXZpYWxseV9kZXN0cnVjdGlibGU8U2NvcGVPZmZzZXQ+Ojp2YWx1ZSwgIiIpOwot
CiBTY29wZWRBcmd1bWVudHNUYWJsZSogU2NvcGVkQXJndW1lbnRzVGFibGU6OnNldChWTSYgdm0s
IHVpbnQzMl90IGksIFNjb3BlT2Zmc2V0IHZhbHVlKQogewogICAgIFNjb3BlZEFyZ3VtZW50c1Rh
YmxlKiByZXN1bHQ7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TY29wZWRB
cmd1bWVudHNUYWJsZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50
aW1lL1Njb3BlZEFyZ3VtZW50c1RhYmxlLmgJKHJldmlzaW9uIDI0NjI3MSkKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ydW50aW1lL1Njb3BlZEFyZ3VtZW50c1RhYmxlLmgJKHdvcmtpbmcgY29w
eSkKQEAgLTYxLDcgKzYxLDEwIEBAIHB1YmxpYzoKICAgICB1aW50MzJfdCBsZW5ndGgoKSBjb25z
dCB7IHJldHVybiBtX2xlbmd0aDsgfQogICAgIFNjb3BlZEFyZ3VtZW50c1RhYmxlKiBzZXRMZW5n
dGgoVk0mLCB1aW50MzJfdCBuZXdMZW5ndGgpOwogICAgIAotICAgIFNjb3BlT2Zmc2V0IGdldCh1
aW50MzJfdCBpKSBjb25zdCB7IHJldHVybiBhdChpKTsgfQorICAgIFNjb3BlT2Zmc2V0IGdldCh1
aW50MzJfdCBpKSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuIGNvbnN0X2Nhc3Q8U2NvcGVk
QXJndW1lbnRzVGFibGUqPih0aGlzKS0+YXQoaSk7CisgICAgfQogICAgIAogICAgIHZvaWQgbG9j
aygpCiAgICAgewpAQCAtNzcsMTMgKzgwLDEzIEBAIHB1YmxpYzoKICAgICBzdGF0aWMgcHRyZGlm
Zl90IG9mZnNldE9mTGVuZ3RoKCkgeyByZXR1cm4gT0JKRUNUX09GRlNFVE9GKFNjb3BlZEFyZ3Vt
ZW50c1RhYmxlLCBtX2xlbmd0aCk7IH0KICAgICBzdGF0aWMgcHRyZGlmZl90IG9mZnNldE9mQXJn
dW1lbnRzKCkgeyByZXR1cm4gT0JKRUNUX09GRlNFVE9GKFNjb3BlZEFyZ3VtZW50c1RhYmxlLCBt
X2FyZ3VtZW50cyk7IH0KIAotICAgIHR5cGVkZWYgQ2FnZWRVbmlxdWVQdHI8R2lnYWNhZ2U6OlBy
aW1pdGl2ZSwgU2NvcGVPZmZzZXQ+IEFyZ3VtZW50c1B0cjsKKyAgICB0eXBlZGVmIENhZ2VkVW5p
cXVlUHRyPEdpZ2FjYWdlOjpQcmltaXRpdmUsIFNjb3BlT2Zmc2V0W10+IEFyZ3VtZW50c1B0cjsK
IAogcHJpdmF0ZToKLSAgICBTY29wZU9mZnNldCYgYXQodWludDMyX3QgaSkgY29uc3QKKyAgICBT
Y29wZU9mZnNldCYgYXQodWludDMyX3QgaSkKICAgICB7CiAgICAgICAgIEFTU0VSVF9XSVRIX1NF
Q1VSSVRZX0lNUExJQ0FUSU9OKGkgPCBtX2xlbmd0aCk7Ci0gICAgICAgIHJldHVybiBtX2FyZ3Vt
ZW50cy5nZXQobGVuZ3RoKCkpW2ldOworICAgICAgICByZXR1cm4gbV9hcmd1bWVudHNbaV07CiAg
ICAgfQogICAgIAogICAgIHVpbnQzMl90IG1fbGVuZ3RoOwpJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvU3ltYm9sVGFibGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvcnVudGltZS9TeW1ib2xUYWJsZS5oCShyZXZpc2lvbiAyNDYyNzEpCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TeW1ib2xUYWJsZS5oCSh3b3JraW5nIGNvcHkpCkBA
IC02MzYsOSArNjM2LDggQEAgcHVibGljOgogICAgIHZvaWQgc2V0QXJndW1lbnRzTGVuZ3RoKFZN
JiB2bSwgdWludDMyX3QgbGVuZ3RoKQogICAgIHsKICAgICAgICAgaWYgKFVOTElLRUxZKCFtX2Fy
Z3VtZW50cykpCi0gICAgICAgICAgICBtX2FyZ3VtZW50cy5zZXQodm0sIHRoaXMsIFNjb3BlZEFy
Z3VtZW50c1RhYmxlOjpjcmVhdGUodm0sIGxlbmd0aCkpOwotICAgICAgICBlbHNlCi0gICAgICAg
ICAgICBtX2FyZ3VtZW50cy5zZXQodm0sIHRoaXMsIG1fYXJndW1lbnRzLT5zZXRMZW5ndGgodm0s
IGxlbmd0aCkpOworICAgICAgICAgICAgbV9hcmd1bWVudHMuc2V0KHZtLCB0aGlzLCBTY29wZWRB
cmd1bWVudHNUYWJsZTo6Y3JlYXRlKHZtKSk7CisgICAgICAgIG1fYXJndW1lbnRzLnNldCh2bSwg
dGhpcywgbV9hcmd1bWVudHMtPnNldExlbmd0aCh2bSwgbGVuZ3RoKSk7CiAgICAgfQogICAgIAog
ICAgIFNjb3BlT2Zmc2V0IGFyZ3VtZW50T2Zmc2V0KHVpbnQzMl90IGkpIGNvbnN0CkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtQWlySVJHZW5lcmF0b3IuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21BaXJJUkdlbmVyYXRvci5jcHAJ
KHJldmlzaW9uIDI0NjI3MSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21BaXJJ
UkdlbmVyYXRvci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTgzNiw4ICs4MzYsNiBAQCB2b2lkIEFp
cklSR2VuZXJhdG9yOjpyZXN0b3JlV2ViQXNzZW1ibHlHCiAgICAgICAgIFJlZ2lzdGVyU2V0IGNs
b2JiZXJzOwogICAgICAgICBjbG9iYmVycy5zZXQocGlubmVkUmVncy0+YmFzZU1lbW9yeVBvaW50
ZXIpOwogICAgICAgICBjbG9iYmVycy5zZXQocGlubmVkUmVncy0+c2l6ZVJlZ2lzdGVyKTsKLSAg
ICAgICAgaWYgKCFpc0FSTTY0KCkpCi0gICAgICAgICAgICBjbG9iYmVycy5zZXQoUmVnaXN0ZXJT
ZXQ6Om1hY3JvU2NyYXRjaFJlZ2lzdGVycygpKTsKIAogICAgICAgICBhdXRvKiBwYXRjaHBvaW50
ID0gYWRkUGF0Y2hwb2ludChCMzo6Vm9pZCk7CiAgICAgICAgIEIzOjpFZmZlY3RzIGVmZmVjdHMg
PSBCMzo6RWZmZWN0czo6bm9uZSgpOwpAQCAtODQ1LDE4ICs4NDMsMTAgQEAgdm9pZCBBaXJJUkdl
bmVyYXRvcjo6cmVzdG9yZVdlYkFzc2VtYmx5RwogICAgICAgICBlZmZlY3RzLnJlYWRzID0gQjM6
OkhlYXBSYW5nZTo6dG9wKCk7CiAgICAgICAgIHBhdGNocG9pbnQtPmVmZmVjdHMgPSBlZmZlY3Rz
OwogICAgICAgICBwYXRjaHBvaW50LT5jbG9iYmVyKGNsb2JiZXJzKTsKLSAgICAgICAgcGF0Y2hw
b2ludC0+bnVtR1BTY3JhdGNoUmVnaXN0ZXJzID0gR2lnYWNhZ2U6OmlzRW5hYmxlZChHaWdhY2Fn
ZTo6UHJpbWl0aXZlKSA/IDEgOiAwOwogCiAgICAgICAgIHBhdGNocG9pbnQtPnNldEdlbmVyYXRv
cihbcGlubmVkUmVnc10gKENDYWxsSGVscGVycyYgaml0LCBjb25zdCBCMzo6U3RhY2ttYXBHZW5l
cmF0aW9uUGFyYW1zJiBwYXJhbXMpIHsKLSAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUKCFHaWdh
Y2FnZTo6aXNFbmFibGVkKEdpZ2FjYWdlOjpQcmltaXRpdmUpIHx8ICFpc0FSTTY0KCkpOwotICAg
ICAgICAgICAgQWxsb3dNYWNyb1NjcmF0Y2hSZWdpc3RlclVzYWdlSWYgYWxsb3dTY3JhdGNoKGpp
dCwgIWlzQVJNNjQoKSk7Ci0gICAgICAgICAgICBHUFJSZWcgYmFzZU1lbW9yeSA9IHBpbm5lZFJl
Z3MtPmJhc2VNZW1vcnlQb2ludGVyOwotICAgICAgICAgICAgR1BSUmVnIHNjcmF0Y2hPclNpemUg
PSBHaWdhY2FnZTo6aXNFbmFibGVkKEdpZ2FjYWdlOjpQcmltaXRpdmUpID8gcGFyYW1zLmdwU2Ny
YXRjaCgwKSA6IHBpbm5lZFJlZ3MtPnNpemVSZWdpc3RlcjsKLQogICAgICAgICAgICAgaml0Lmxv
YWRQdHIoQ0NhbGxIZWxwZXJzOjpBZGRyZXNzKHBhcmFtc1swXS5ncHIoKSwgSW5zdGFuY2U6Om9m
ZnNldE9mQ2FjaGVkTWVtb3J5U2l6ZSgpKSwgcGlubmVkUmVncy0+c2l6ZVJlZ2lzdGVyKTsKLSAg
ICAgICAgICAgIGppdC5sb2FkUHRyKENDYWxsSGVscGVyczo6QWRkcmVzcyhwYXJhbXNbMF0uZ3By
KCksIEluc3RhbmNlOjpvZmZzZXRPZkNhY2hlZE1lbW9yeSgpKSwgYmFzZU1lbW9yeSk7Ci0KLSAg
ICAgICAgICAgIGppdC5jYWdlQ29uZGl0aW9uYWxseShHaWdhY2FnZTo6UHJpbWl0aXZlLCBiYXNl
TWVtb3J5LCBzY3JhdGNoT3JTaXplKTsKKyAgICAgICAgICAgIGppdC5sb2FkUHRyKENDYWxsSGVs
cGVyczo6QWRkcmVzcyhwYXJhbXNbMF0uZ3ByKCksIEluc3RhbmNlOjpvZmZzZXRPZkNhY2hlZE1l
bW9yeSgpKSwgcGlubmVkUmVncy0+YmFzZU1lbW9yeVBvaW50ZXIpOwogICAgICAgICB9KTsKIAog
ICAgICAgICBlbWl0UGF0Y2hwb2ludChibG9jaywgcGF0Y2hwb2ludCwgVG1wKCksIGluc3RhbmNl
KTsKQEAgLTE5NjgsOCArMTk1OCw2IEBAIGF1dG8gQWlySVJHZW5lcmF0b3I6OmFkZENhbGxJbmRp
cmVjdChjb24KICAgICAgICAgLy8gRklYTUU6IFdlIHNob3VsZG4ndCBoYXZlIHRvIGRvIHRoaXM6
IGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNzIxODEKICAgICAgICAg
cGF0Y2hwb2ludC0+Y2xvYmJlcihQaW5uZWRSZWdpc3RlckluZm86OmdldCgpLnRvU2F2ZShNZW1v
cnlNb2RlOjpCb3VuZHNDaGVja2luZykpOwogICAgICAgICBwYXRjaHBvaW50LT5jbG9iYmVyKFJl
Z2lzdGVyU2V0OjptYWNyb1NjcmF0Y2hSZWdpc3RlcnMoKSk7Ci0gICAgICAgIHBhdGNocG9pbnQt
Pm51bUdQU2NyYXRjaFJlZ2lzdGVycyA9IEdpZ2FjYWdlOjppc0VuYWJsZWQoR2lnYWNhZ2U6OlBy
aW1pdGl2ZSkgPyAxIDogMDsKLQogICAgICAgICBwYXRjaHBvaW50LT5zZXRHZW5lcmF0b3IoWz1d
IChDQ2FsbEhlbHBlcnMmIGppdCwgY29uc3QgQjM6OlN0YWNrbWFwR2VuZXJhdGlvblBhcmFtcyYg
cGFyYW1zKSB7CiAgICAgICAgICAgICBBbGxvd01hY3JvU2NyYXRjaFJlZ2lzdGVyVXNhZ2UgYWxs
b3dTY3JhdGNoKGppdCk7CiAgICAgICAgICAgICBHUFJSZWcgbmV3Q29udGV4dEluc3RhbmNlID0g
cGFyYW1zWzBdLmdwcigpOwpAQCAtMTk4MywxMiArMTk3MSw4IEBAIGF1dG8gQWlySVJHZW5lcmF0
b3I6OmFkZENhbGxJbmRpcmVjdChjb24KICAgICAgICAgICAgIC8vIEZJWE1FOiBXZSBzaG91bGQg
c3VwcG9ydCBtb3JlIHRoYW4gb25lIG1lbW9yeSBzaXplIHJlZ2lzdGVyCiAgICAgICAgICAgICAv
LyAgIHNlZTogaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE2Mjk1Mgog
ICAgICAgICAgICAgQVNTRVJUKHBpbm5lZFJlZ3Muc2l6ZVJlZ2lzdGVyICE9IG5ld0NvbnRleHRJ
bnN0YW5jZSk7Ci0gICAgICAgICAgICBHUFJSZWcgc2NyYXRjaE9yU2l6ZSA9IEdpZ2FjYWdlOjpp
c0VuYWJsZWQoR2lnYWNhZ2U6OlByaW1pdGl2ZSkgPyBwYXJhbXMuZ3BTY3JhdGNoKDApIDogcGlu
bmVkUmVncy5zaXplUmVnaXN0ZXI7Ci0KICAgICAgICAgICAgIGppdC5sb2FkUHRyKENDYWxsSGVs
cGVyczo6QWRkcmVzcyhuZXdDb250ZXh0SW5zdGFuY2UsIEluc3RhbmNlOjpvZmZzZXRPZkNhY2hl
ZE1lbW9yeVNpemUoKSksIHBpbm5lZFJlZ3Muc2l6ZVJlZ2lzdGVyKTsgLy8gTWVtb3J5IHNpemUu
CiAgICAgICAgICAgICBqaXQubG9hZFB0cihDQ2FsbEhlbHBlcnM6OkFkZHJlc3MobmV3Q29udGV4
dEluc3RhbmNlLCBJbnN0YW5jZTo6b2Zmc2V0T2ZDYWNoZWRNZW1vcnkoKSksIGJhc2VNZW1vcnkp
OyAvLyBNZW1vcnk6OnZvaWQqLgotCi0gICAgICAgICAgICBqaXQuY2FnZUNvbmRpdGlvbmFsbHko
R2lnYWNhZ2U6OlByaW1pdGl2ZSwgYmFzZU1lbW9yeSwgc2NyYXRjaE9yU2l6ZSk7CiAgICAgICAg
IH0pOwogCiAgICAgICAgIGVtaXRQYXRjaHBvaW50KGRvQ29udGV4dFN3aXRjaCwgcGF0Y2hwb2lu
dCwgVG1wKCksIG5ld0NvbnRleHRJbnN0YW5jZSwgaW5zdGFuY2VWYWx1ZSgpKTsKSW5kZXg6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21CM0lSR2VuZXJhdG9yLmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtQjNJUkdlbmVyYXRvci5jcHAJKHJl
dmlzaW9uIDI0NjI3MSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21CM0lSR2Vu
ZXJhdG9yLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDcsNyArNDcsNiBAQAogI2luY2x1ZGUgIkIz
VmFyaWFibGVWYWx1ZS5oIgogI2luY2x1ZGUgIkIzV2FzbUFkZHJlc3NWYWx1ZS5oIgogI2luY2x1
ZGUgIkIzV2FzbUJvdW5kc0NoZWNrVmFsdWUuaCIKLSNpbmNsdWRlICJEaXNhbGxvd01hY3JvU2Ny
YXRjaFJlZ2lzdGVyVXNhZ2UuaCIKICNpbmNsdWRlICJKU0NJbmxpbmVzLmgiCiAjaW5jbHVkZSAi
SlNXZWJBc3NlbWJseUluc3RhbmNlLmgiCiAjaW5jbHVkZSAiU2NyYXRjaFJlZ2lzdGVyQWxsb2Nh
dG9yLmgiCkBAIC00NzgsOCArNDc3LDYgQEAgdm9pZCBCM0lSR2VuZXJhdG9yOjpyZXN0b3JlV2Vi
QXNzZW1ibHlHbAogICAgICAgICBSZWdpc3RlclNldCBjbG9iYmVyczsKICAgICAgICAgY2xvYmJl
cnMuc2V0KHBpbm5lZFJlZ3MtPmJhc2VNZW1vcnlQb2ludGVyKTsKICAgICAgICAgY2xvYmJlcnMu
c2V0KHBpbm5lZFJlZ3MtPnNpemVSZWdpc3Rlcik7Ci0gICAgICAgIGlmICghaXNBUk02NCgpKQot
ICAgICAgICAgICAgY2xvYmJlcnMuc2V0KFJlZ2lzdGVyU2V0OjptYWNyb1NjcmF0Y2hSZWdpc3Rl
cnMoKSk7CiAKICAgICAgICAgQjM6OlBhdGNocG9pbnRWYWx1ZSogcGF0Y2hwb2ludCA9IGJsb2Nr
LT5hcHBlbmROZXc8QjM6OlBhdGNocG9pbnRWYWx1ZT4ocHJvYywgQjM6OlZvaWQsIG9yaWdpbigp
KTsKICAgICAgICAgRWZmZWN0cyBlZmZlY3RzID0gRWZmZWN0czo6bm9uZSgpOwpAQCAtNDg3LDE5
ICs0ODQsMTMgQEAgdm9pZCBCM0lSR2VuZXJhdG9yOjpyZXN0b3JlV2ViQXNzZW1ibHlHbAogICAg
ICAgICBlZmZlY3RzLnJlYWRzID0gQjM6OkhlYXBSYW5nZTo6dG9wKCk7CiAgICAgICAgIHBhdGNo
cG9pbnQtPmVmZmVjdHMgPSBlZmZlY3RzOwogICAgICAgICBwYXRjaHBvaW50LT5jbG9iYmVyKGNs
b2JiZXJzKTsKLSAgICAgICAgcGF0Y2hwb2ludC0+bnVtR1BTY3JhdGNoUmVnaXN0ZXJzID0gR2ln
YWNhZ2U6OmlzRW5hYmxlZChHaWdhY2FnZTo6UHJpbWl0aXZlKSA/IDEgOiAwOwogCiAgICAgICAg
IHBhdGNocG9pbnQtPmFwcGVuZChpbnN0YW5jZSwgVmFsdWVSZXA6OlNvbWVSZWdpc3Rlcik7CisK
ICAgICAgICAgcGF0Y2hwb2ludC0+c2V0R2VuZXJhdG9yKFtwaW5uZWRSZWdzXSAoQ0NhbGxIZWxw
ZXJzJiBqaXQsIGNvbnN0IEIzOjpTdGFja21hcEdlbmVyYXRpb25QYXJhbXMmIHBhcmFtcykgewot
ICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlQoIUdpZ2FjYWdlOjppc0VuYWJsZWQoR2lnYWNhZ2U6
OlByaW1pdGl2ZSkgfHwgIWlzQVJNNjQoKSk7Ci0gICAgICAgICAgICBBbGxvd01hY3JvU2NyYXRj
aFJlZ2lzdGVyVXNhZ2VJZiBhbGxvd1NjcmF0Y2goaml0LCAhaXNBUk02NCgpKTsKICAgICAgICAg
ICAgIEdQUlJlZyBiYXNlTWVtb3J5ID0gcGlubmVkUmVncy0+YmFzZU1lbW9yeVBvaW50ZXI7Ci0g
ICAgICAgICAgICBHUFJSZWcgc2NyYXRjaE9yU2l6ZSA9IEdpZ2FjYWdlOjppc0VuYWJsZWQoR2ln
YWNhZ2U6OlByaW1pdGl2ZSkgPyBwYXJhbXMuZ3BTY3JhdGNoKDApIDogcGlubmVkUmVncy0+c2l6
ZVJlZ2lzdGVyOwotCiAgICAgICAgICAgICBqaXQubG9hZFB0cihDQ2FsbEhlbHBlcnM6OkFkZHJl
c3MocGFyYW1zWzBdLmdwcigpLCBJbnN0YW5jZTo6b2Zmc2V0T2ZDYWNoZWRNZW1vcnlTaXplKCkp
LCBwaW5uZWRSZWdzLT5zaXplUmVnaXN0ZXIpOwogICAgICAgICAgICAgaml0LmxvYWRQdHIoQ0Nh
bGxIZWxwZXJzOjpBZGRyZXNzKHBhcmFtc1swXS5ncHIoKSwgSW5zdGFuY2U6Om9mZnNldE9mQ2Fj
aGVkTWVtb3J5KCkpLCBiYXNlTWVtb3J5KTsKLQotICAgICAgICAgICAgaml0LmNhZ2VDb25kaXRp
b25hbGx5KEdpZ2FjYWdlOjpQcmltaXRpdmUsIGJhc2VNZW1vcnksIHNjcmF0Y2hPclNpemUpOwog
ICAgICAgICB9KTsKICAgICB9CiB9CkBAIC0xMzgwLDggKzEzNzEsNiBAQCBhdXRvIEIzSVJHZW5l
cmF0b3I6OmFkZENhbGxJbmRpcmVjdChjb25zCiAgICAgICAgIHBhdGNocG9pbnQtPmNsb2JiZXIo
UmVnaXN0ZXJTZXQ6Om1hY3JvU2NyYXRjaFJlZ2lzdGVycygpKTsKICAgICAgICAgcGF0Y2hwb2lu
dC0+YXBwZW5kKG5ld0NvbnRleHRJbnN0YW5jZSwgVmFsdWVSZXA6OlNvbWVSZWdpc3Rlcik7CiAg
ICAgICAgIHBhdGNocG9pbnQtPmFwcGVuZChpbnN0YW5jZVZhbHVlKCksIFZhbHVlUmVwOjpTb21l
UmVnaXN0ZXIpOwotICAgICAgICBwYXRjaHBvaW50LT5udW1HUFNjcmF0Y2hSZWdpc3RlcnMgPSBH
aWdhY2FnZTo6aXNFbmFibGVkKEdpZ2FjYWdlOjpQcmltaXRpdmUpID8gMSA6IDA7Ci0KICAgICAg
ICAgcGF0Y2hwb2ludC0+c2V0R2VuZXJhdG9yKFs9XSAoQ0NhbGxIZWxwZXJzJiBqaXQsIGNvbnN0
IEIzOjpTdGFja21hcEdlbmVyYXRpb25QYXJhbXMmIHBhcmFtcykgewogICAgICAgICAgICAgQWxs
b3dNYWNyb1NjcmF0Y2hSZWdpc3RlclVzYWdlIGFsbG93U2NyYXRjaChqaXQpOwogICAgICAgICAg
ICAgR1BSUmVnIG5ld0NvbnRleHRJbnN0YW5jZSA9IHBhcmFtc1swXS5ncHIoKTsKQEAgLTEzOTYs
MTIgKzEzODUsOCBAQCBhdXRvIEIzSVJHZW5lcmF0b3I6OmFkZENhbGxJbmRpcmVjdChjb25zCiAg
ICAgICAgICAgICAvLyBGSVhNRTogV2Ugc2hvdWxkIHN1cHBvcnQgbW9yZSB0aGFuIG9uZSBtZW1v
cnkgc2l6ZSByZWdpc3RlcgogICAgICAgICAgICAgLy8gICBzZWU6IGh0dHBzOi8vYnVncy53ZWJr
aXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNjI5NTIKICAgICAgICAgICAgIEFTU0VSVChwaW5uZWRS
ZWdzLnNpemVSZWdpc3RlciAhPSBuZXdDb250ZXh0SW5zdGFuY2UpOwotICAgICAgICAgICAgR1BS
UmVnIHNjcmF0Y2hPclNpemUgPSBHaWdhY2FnZTo6aXNFbmFibGVkKEdpZ2FjYWdlOjpQcmltaXRp
dmUpID8gcGFyYW1zLmdwU2NyYXRjaCgwKSA6IHBpbm5lZFJlZ3Muc2l6ZVJlZ2lzdGVyOwotCiAg
ICAgICAgICAgICBqaXQubG9hZFB0cihDQ2FsbEhlbHBlcnM6OkFkZHJlc3MobmV3Q29udGV4dElu
c3RhbmNlLCBJbnN0YW5jZTo6b2Zmc2V0T2ZDYWNoZWRNZW1vcnlTaXplKCkpLCBwaW5uZWRSZWdz
LnNpemVSZWdpc3Rlcik7IC8vIE1lbW9yeSBzaXplLgogICAgICAgICAgICAgaml0LmxvYWRQdHIo
Q0NhbGxIZWxwZXJzOjpBZGRyZXNzKG5ld0NvbnRleHRJbnN0YW5jZSwgSW5zdGFuY2U6Om9mZnNl
dE9mQ2FjaGVkTWVtb3J5KCkpLCBiYXNlTWVtb3J5KTsgLy8gTWVtb3J5Ojp2b2lkKi4KLQotICAg
ICAgICAgICAgaml0LmNhZ2VDb25kaXRpb25hbGx5KEdpZ2FjYWdlOjpQcmltaXRpdmUsIGJhc2VN
ZW1vcnksIHNjcmF0Y2hPclNpemUpOwogICAgICAgICB9KTsKICAgICAgICAgZG9Db250ZXh0U3dp
dGNoLT5hcHBlbmROZXdDb250cm9sVmFsdWUobV9wcm9jLCBKdW1wLCBvcmlnaW4oKSwgY29udGlu
dWF0aW9uKTsKIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbUJCUVBsYW4u
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21CQlFQbGFu
LmNwcAkocmV2aXNpb24gMjQ2MjcxKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2Fz
bUJCUVBsYW4uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMTQsNyArMzE0LDcgQEAgdm9pZCBCQlFQ
bGFuOjpjb21wbGV0ZShjb25zdCBBYnN0cmFjdExvYwogICAgICAgICAgICAgICAgIH0KIAogICAg
ICAgICAgICAgICAgIG1fd2FzbUludGVybmFsRnVuY3Rpb25zW2Z1bmN0aW9uSW5kZXhdLT5lbnRy
eXBvaW50LmNvbXBpbGF0aW9uID0gc3RkOjptYWtlX3VuaXF1ZTxCMzo6Q29tcGlsYXRpb24+KAot
ICAgICAgICAgICAgICAgICAgICBGSU5BTElaRV9DT0RFKGxpbmtCdWZmZXIsIEIzQ29tcGlsYXRp
b25QdHJUYWcsICJXZWJBc3NlbWJseSBCQlEgZnVuY3Rpb25bJWldICVzIiwgZnVuY3Rpb25JbmRl
eCwgc2lnbmF0dXJlLnRvU3RyaW5nKCkuYXNjaWkoKS5kYXRhKCkpLAorICAgICAgICAgICAgICAg
ICAgICBGSU5BTElaRV9DT0RFKGxpbmtCdWZmZXIsIEIzQ29tcGlsYXRpb25QdHJUYWcsICJXZWJB
c3NlbWJseSBmdW5jdGlvblslaV0gJXMiLCBmdW5jdGlvbkluZGV4LCBzaWduYXR1cmUudG9TdHJp
bmcoKS5hc2NpaSgpLmRhdGEoKSksCiAgICAgICAgICAgICAgICAgICAgIFdURk1vdmUoY29udGV4
dC53YXNtRW50cnlwb2ludEJ5cHJvZHVjdHMpKTsKICAgICAgICAgICAgIH0KIApJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbUJpbmRpbmcuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21CaW5kaW5nLmNwcAkocmV2aXNpb24gMjQ2Mjcx
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbUJpbmRpbmcuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC00Niw3ICs0Niw3IEBAIEV4cGVjdGVkPE1hY3JvQXNzZW1ibGVyQ29kZVJlZjxX
YXNtRW50cnkKICAgICBjb25zdCBQaW5uZWRSZWdpc3RlckluZm8mIHBpbm5lZFJlZ3MgPSBQaW5u
ZWRSZWdpc3RlckluZm86OmdldCgpOwogICAgIEpJVCBqaXQ7CiAKLSAgICBHUFJSZWcgc2NyYXRj
aCA9IHdhc21DYWxsaW5nQ29udmVudGlvbkFpcigpLnByb2xvZ3VlU2NyYXRjaCgwKTsKKyAgICBH
UFJSZWcgc2NyYXRjaCA9IEdQUkluZm86Om5vblByZXNlcnZlZE5vbkFyZ3VtZW50R1BSMDsKICAg
ICBHUFJSZWcgYmFzZU1lbW9yeSA9IHBpbm5lZFJlZ3MuYmFzZU1lbW9yeVBvaW50ZXI7CiAgICAg
QVNTRVJUKGJhc2VNZW1vcnkgIT0gc2NyYXRjaCk7CiAgICAgQVNTRVJUKHBpbm5lZFJlZ3Muc2l6
ZVJlZ2lzdGVyICE9IGJhc2VNZW1vcnkpOwpAQCAtNjYsMTMgKzY2LDggQEAgRXhwZWN0ZWQ8TWFj
cm9Bc3NlbWJsZXJDb2RlUmVmPFdhc21FbnRyeQogCiAgICAgLy8gRklYTUUgdGhlIGZvbGxvd2lu
ZyBjb2RlIGFzc3VtZXMgdGhhdCBhbGwgV2FzbTo6SW5zdGFuY2UgaGF2ZSB0aGUgc2FtZSBwaW5u
ZWQgcmVnaXN0ZXJzLiBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTYy
OTUyCiAgICAgLy8gU2V0IHVwIHRoZSBjYWxsZWUncyBiYXNlTWVtb3J5IHJlZ2lzdGVyIGFzIHdl
bGwgYXMgdGhlIG1lbW9yeSBzaXplIHJlZ2lzdGVycy4KLSAgICB7Ci0gICAgICAgIEdQUlJlZyBz
Y3JhdGNoT3JTaXplID0gaXNBUk02NEUoKSA/IHBpbm5lZFJlZ3Muc2l6ZVJlZ2lzdGVyIDogd2Fz
bUNhbGxpbmdDb252ZW50aW9uQWlyKCkucHJvbG9ndWVTY3JhdGNoKDEpOwotCi0gICAgICAgIGpp
dC5sb2FkUHRyKEpJVDo6QWRkcmVzcyhiYXNlTWVtb3J5LCBXYXNtOjpJbnN0YW5jZTo6b2Zmc2V0
T2ZDYWNoZWRNZW1vcnlTaXplKCkpLCBwaW5uZWRSZWdzLnNpemVSZWdpc3Rlcik7IC8vIE1lbW9y
eSBzaXplLgotICAgICAgICBqaXQubG9hZFB0cihKSVQ6OkFkZHJlc3MoYmFzZU1lbW9yeSwgV2Fz
bTo6SW5zdGFuY2U6Om9mZnNldE9mQ2FjaGVkTWVtb3J5KCkpLCBiYXNlTWVtb3J5KTsgLy8gV2Fz
bTo6TWVtb3J5OjpUYWdnZWRBcnJheVN0b3JhZ2VQdHI8dm9pZD4gKHZvaWQqKS4KLSAgICAgICAg
aml0LmNhZ2VDb25kaXRpb25hbGx5KEdpZ2FjYWdlOjpQcmltaXRpdmUsIGJhc2VNZW1vcnksIHNj
cmF0Y2hPclNpemUpOwotICAgIH0KKyAgICBqaXQubG9hZFB0cihKSVQ6OkFkZHJlc3MoYmFzZU1l
bW9yeSwgV2FzbTo6SW5zdGFuY2U6Om9mZnNldE9mQ2FjaGVkTWVtb3J5U2l6ZSgpKSwgcGlubmVk
UmVncy5zaXplUmVnaXN0ZXIpOyAvLyBNZW1vcnkgc2l6ZS4KKyAgICBqaXQubG9hZFB0cihKSVQ6
OkFkZHJlc3MoYmFzZU1lbW9yeSwgV2FzbTo6SW5zdGFuY2U6Om9mZnNldE9mQ2FjaGVkTWVtb3J5
KCkpLCBiYXNlTWVtb3J5KTsgLy8gV2FzbTo6TWVtb3J5Ojp2b2lkKi4KIAogICAgIC8vIFRhaWwg
Y2FsbCBpbnRvIHRoZSBjYWxsZWUgV2ViQXNzZW1ibHkgZnVuY3Rpb24uCiAgICAgaml0LmxvYWRQ
dHIoc2NyYXRjaCwgc2NyYXRjaCk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9X
YXNtSW5zdGFuY2UuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9X
YXNtSW5zdGFuY2UuaAkocmV2aXNpb24gMjQ2MjcxKQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L3dhc20vV2FzbUluc3RhbmNlLmgJKHdvcmtpbmcgY29weSkKQEAgLTY2LDcgKzY2LDcgQEAgcHVi
bGljOgogICAgIE1lbW9yeSogbWVtb3J5KCkgeyByZXR1cm4gbV9tZW1vcnkuZ2V0KCk7IH0KICAg
ICBUYWJsZSogdGFibGUoKSB7IHJldHVybiBtX3RhYmxlLmdldCgpOyB9CiAKLSAgICB2b2lkKiBj
YWNoZWRNZW1vcnkoKSBjb25zdCB7IHJldHVybiBtX2NhY2hlZE1lbW9yeS5nZXRNYXlCZU51bGwo
Y2FjaGVkTWVtb3J5U2l6ZSgpKTsgfQorICAgIHZvaWQqIGNhY2hlZE1lbW9yeSgpIGNvbnN0IHsg
cmV0dXJuIG1fY2FjaGVkTWVtb3J5OyB9CiAgICAgc2l6ZV90IGNhY2hlZE1lbW9yeVNpemUoKSBj
b25zdCB7IHJldHVybiBtX2NhY2hlZE1lbW9yeVNpemU7IH0KIAogICAgIHZvaWQgc2V0TWVtb3J5
KFJlZjxNZW1vcnk+JiYgbWVtb3J5KQpAQCAtNzgsNyArNzgsNyBAQCBwdWJsaWM6CiAgICAgdm9p
ZCB1cGRhdGVDYWNoZWRNZW1vcnkoKQogICAgIHsKICAgICAgICAgaWYgKG1fbWVtb3J5ICE9IG51
bGxwdHIpIHsKLSAgICAgICAgICAgIG1fY2FjaGVkTWVtb3J5ID0gQ2FnZWRQdHI8R2lnYWNhZ2U6
OlByaW1pdGl2ZSwgdm9pZCwgdGFnQ2FnZWRQdHI+KG1lbW9yeSgpLT5tZW1vcnkoKSwgbWVtb3J5
KCktPnNpemUoKSk7CisgICAgICAgICAgICBtX2NhY2hlZE1lbW9yeSA9IG1lbW9yeSgpLT5tZW1v
cnkoKTsKICAgICAgICAgICAgIG1fY2FjaGVkTWVtb3J5U2l6ZSA9IG1lbW9yeSgpLT5zaXplKCk7
CiAgICAgICAgIH0KICAgICB9CkBAIC0xNDcsNyArMTQ3LDcgQEAgcHJpdmF0ZToKICAgICB9CiAg
ICAgdm9pZCogbV9vd25lciB7IG51bGxwdHIgfTsgLy8gSW4gYSBKUyBlbWJlZGRpbmcsIHRoaXMg
aXMgYSBKU1dlYkFzc2VtYmx5SW5zdGFuY2UqLgogICAgIENvbnRleHQqIG1fY29udGV4dCB7IG51
bGxwdHIgfTsKLSAgICBDYWdlZFB0cjxHaWdhY2FnZTo6UHJpbWl0aXZlLCB2b2lkLCB0YWdDYWdl
ZFB0cj4gbV9jYWNoZWRNZW1vcnk7CisgICAgdm9pZCogbV9jYWNoZWRNZW1vcnkgeyBudWxscHRy
IH07CiAgICAgc2l6ZV90IG1fY2FjaGVkTWVtb3J5U2l6ZSB7IDAgfTsKICAgICBSZWY8TW9kdWxl
PiBtX21vZHVsZTsKICAgICBSZWZQdHI8Q29kZUJsb2NrPiBtX2NvZGVCbG9jazsKSW5kZXg6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21NZW1vcnkuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21NZW1vcnkuY3BwCShyZXZpc2lvbiAyNDYyNzEp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtTWVtb3J5LmNwcAkod29ya2luZyBj
b3B5KQpAQCAtMjUzLDExICsyNTMsMTAgQEAgTWVtb3J5OjpNZW1vcnkoUGFnZUNvdW50IGluaXRp
YWwsIFBhZ2VDbwogICAgIEFTU0VSVCghaW5pdGlhbC5ieXRlcygpKTsKICAgICBBU1NFUlQobV9t
b2RlID09IE1lbW9yeU1vZGU6OkJvdW5kc0NoZWNraW5nKTsKICAgICBkYXRhTG9nTG5JZih2ZXJi
b3NlLCAiTWVtb3J5OjpNZW1vcnkgYWxsb2NhdGluZyAiLCAqdGhpcyk7Ci0gICAgQVNTRVJUKCFt
ZW1vcnkoKSk7CiB9CiAKIE1lbW9yeTo6TWVtb3J5KHZvaWQqIG1lbW9yeSwgUGFnZUNvdW50IGlu
aXRpYWwsIFBhZ2VDb3VudCBtYXhpbXVtLCBzaXplX3QgbWFwcGVkQ2FwYWNpdHksIE1lbW9yeU1v
ZGUgbW9kZSwgRnVuY3Rpb248dm9pZChOb3RpZnlQcmVzc3VyZSk+JiYgbm90aWZ5TWVtb3J5UHJl
c3N1cmUsIEZ1bmN0aW9uPHZvaWQoU3luY1RyeVRvUmVjbGFpbSk+JiYgc3luY1RyeVRvUmVjbGFp
bU1lbW9yeSwgV1RGOjpGdW5jdGlvbjx2b2lkKEdyb3dTdWNjZXNzLCBQYWdlQ291bnQsIFBhZ2VD
b3VudCk+JiYgZ3Jvd1N1Y2Nlc3NDYWxsYmFjaykKLSAgICA6IG1fbWVtb3J5KG1lbW9yeSwgaW5p
dGlhbC5ieXRlcygpKQorICAgIDogbV9tZW1vcnkobWVtb3J5KQogICAgICwgbV9zaXplKGluaXRp
YWwuYnl0ZXMoKSkKICAgICAsIG1faW5pdGlhbChpbml0aWFsKQogICAgICwgbV9tYXhpbXVtKG1h
eGltdW0pCkBAIC0zMzksMTQgKzMzOCwxNCBAQCBNZW1vcnk6On5NZW1vcnkoKQogICAgICAgICBt
ZW1vcnlNYW5hZ2VyKCkuZnJlZVBoeXNpY2FsQnl0ZXMobV9zaXplKTsKICAgICAgICAgc3dpdGNo
IChtX21vZGUpIHsKICAgICAgICAgY2FzZSBNZW1vcnlNb2RlOjpTaWduYWxpbmc6Ci0gICAgICAg
ICAgICBpZiAobXByb3RlY3QobWVtb3J5KCksIE1lbW9yeTo6ZmFzdE1hcHBlZEJ5dGVzKCksIFBS
T1RfUkVBRCB8IFBST1RfV1JJVEUpKSB7CisgICAgICAgICAgICBpZiAobXByb3RlY3QobV9tZW1v
cnksIE1lbW9yeTo6ZmFzdE1hcHBlZEJ5dGVzKCksIFBST1RfUkVBRCB8IFBST1RfV1JJVEUpKSB7
CiAgICAgICAgICAgICAgICAgZGF0YUxvZygibXByb3RlY3QgZmFpbGVkOiAiLCBzdHJlcnJvcihl
cnJubyksICJcbiIpOwogICAgICAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVE
KCk7CiAgICAgICAgICAgICB9Ci0gICAgICAgICAgICBtZW1vcnlNYW5hZ2VyKCkuZnJlZUZhc3RN
ZW1vcnkobWVtb3J5KCkpOworICAgICAgICAgICAgbWVtb3J5TWFuYWdlcigpLmZyZWVGYXN0TWVt
b3J5KG1fbWVtb3J5KTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICBjYXNlIE1lbW9yeU1v
ZGU6OkJvdW5kc0NoZWNraW5nOgotICAgICAgICAgICAgR2lnYWNhZ2U6OmZyZWVWaXJ0dWFsUGFn
ZXMoR2lnYWNhZ2U6OlByaW1pdGl2ZSwgbWVtb3J5KCksIG1fc2l6ZSk7CisgICAgICAgICAgICBH
aWdhY2FnZTo6ZnJlZVZpcnR1YWxQYWdlcyhHaWdhY2FnZTo6UHJpbWl0aXZlLCBtX21lbW9yeSwg
bV9zaXplKTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CiAgICAgfQpAQCAtNDIwLDI2
ICs0MTksMjQgQEAgRXhwZWN0ZWQ8UGFnZUNvdW50LCBNZW1vcnk6Okdyb3dGYWlsUmVhcwogICAg
ICAgICBpZiAoIW5ld01lbW9yeSkKICAgICAgICAgICAgIHJldHVybiBtYWtlVW5leHBlY3RlZChH
cm93RmFpbFJlYXNvbjo6T3V0T2ZNZW1vcnkpOwogCi0gICAgICAgIG1lbWNweShuZXdNZW1vcnks
IG1lbW9yeSgpLCBtX3NpemUpOworICAgICAgICBtZW1jcHkobmV3TWVtb3J5LCBtX21lbW9yeSwg
bV9zaXplKTsKICAgICAgICAgaWYgKG1fbWVtb3J5KQotICAgICAgICAgICAgR2lnYWNhZ2U6OmZy
ZWVWaXJ0dWFsUGFnZXMoR2lnYWNhZ2U6OlByaW1pdGl2ZSwgbWVtb3J5KCksIG1fc2l6ZSk7Ci0g
ICAgICAgIG1fbWVtb3J5ID0gQ2FnZWRNZW1vcnkobmV3TWVtb3J5LCBkZXNpcmVkU2l6ZSk7Cisg
ICAgICAgICAgICBHaWdhY2FnZTo6ZnJlZVZpcnR1YWxQYWdlcyhHaWdhY2FnZTo6UHJpbWl0aXZl
LCBtX21lbW9yeSwgbV9zaXplKTsKKyAgICAgICAgbV9tZW1vcnkgPSBuZXdNZW1vcnk7CiAgICAg
ICAgIG1fbWFwcGVkQ2FwYWNpdHkgPSBkZXNpcmVkU2l6ZTsKICAgICAgICAgbV9zaXplID0gZGVz
aXJlZFNpemU7Ci0gICAgICAgIEFTU0VSVChtZW1vcnkoKSA9PSBuZXdNZW1vcnkpOwogICAgICAg
ICByZXR1cm4gc3VjY2VzcygpOwogICAgIH0KICAgICBjYXNlIE1lbW9yeU1vZGU6OlNpZ25hbGlu
ZzogewotICAgICAgICBSRUxFQVNFX0FTU0VSVChtZW1vcnkoKSk7CisgICAgICAgIFJFTEVBU0Vf
QVNTRVJUKG1fbWVtb3J5KTsKICAgICAgICAgLy8gU2lnbmFsaW5nIG1lbW9yeSBtdXN0IGhhdmUg
YmVlbiBwcmUtYWxsb2NhdGVkIHZpcnR1YWxseS4KLSAgICAgICAgdWludDhfdCogc3RhcnRBZGRy
ZXNzID0gc3RhdGljX2Nhc3Q8dWludDhfdCo+KG1lbW9yeSgpKSArIG1fc2l6ZTsKKyAgICAgICAg
dWludDhfdCogc3RhcnRBZGRyZXNzID0gc3RhdGljX2Nhc3Q8dWludDhfdCo+KG1fbWVtb3J5KSAr
IG1fc2l6ZTsKICAgICAgICAgCi0gICAgICAgIGRhdGFMb2dMbklmKHZlcmJvc2UsICJNYXJraW5n
IFdlYkFzc2VtYmx5IG1lbW9yeSdzICIsIFJhd1BvaW50ZXIobWVtb3J5KCkpLCAiIGFzIHJlYWQr
d3JpdGUgaW4gcmFuZ2UgWyIsIFJhd1BvaW50ZXIoc3RhcnRBZGRyZXNzKSwgIiwgIiwgUmF3UG9p
bnRlcihzdGFydEFkZHJlc3MgKyBleHRyYUJ5dGVzKSwgIikiKTsKKyAgICAgICAgZGF0YUxvZ0xu
SWYodmVyYm9zZSwgIk1hcmtpbmcgV2ViQXNzZW1ibHkgbWVtb3J5J3MgIiwgUmF3UG9pbnRlciht
X21lbW9yeSksICIgYXMgcmVhZCt3cml0ZSBpbiByYW5nZSBbIiwgUmF3UG9pbnRlcihzdGFydEFk
ZHJlc3MpLCAiLCAiLCBSYXdQb2ludGVyKHN0YXJ0QWRkcmVzcyArIGV4dHJhQnl0ZXMpLCAiKSIp
OwogICAgICAgICBpZiAobXByb3RlY3Qoc3RhcnRBZGRyZXNzLCBleHRyYUJ5dGVzLCBQUk9UX1JF
QUQgfCBQUk9UX1dSSVRFKSkgewogICAgICAgICAgICAgZGF0YUxvZygibXByb3RlY3QgZmFpbGVk
OiAiLCBzdHJlcnJvcihlcnJubyksICJcbiIpOwogICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlRf
Tk9UX1JFQUNIRUQoKTsKICAgICAgICAgfQotICAgICAgICBtX21lbW9yeS5yZWNhZ2UobV9zaXpl
LCBkZXNpcmVkU2l6ZSk7CiAgICAgICAgIG1fc2l6ZSA9IGRlc2lyZWRTaXplOwogICAgICAgICBy
ZXR1cm4gc3VjY2VzcygpOwogICAgIH0KQEAgLTQ2Myw3ICs0NjAsNyBAQCB2b2lkIE1lbW9yeTo6
cmVnaXN0ZXJJbnN0YW5jZShJbnN0YW5jZSogCiAKIHZvaWQgTWVtb3J5OjpkdW1wKFByaW50U3Ry
ZWFtJiBvdXQpIGNvbnN0CiB7Ci0gICAgb3V0LnByaW50KCJNZW1vcnkgYXQgIiwgUmF3UG9pbnRl
cihtZW1vcnkoKSksICIsIHNpemUgIiwgbV9zaXplLCAiQiBjYXBhY2l0eSAiLCBtX21hcHBlZENh
cGFjaXR5LCAiQiwgaW5pdGlhbCAiLCBtX2luaXRpYWwsICIgbWF4aW11bSAiLCBtX21heGltdW0s
ICIgbW9kZSAiLCBtYWtlU3RyaW5nKG1fbW9kZSkpOworICAgIG91dC5wcmludCgiTWVtb3J5IGF0
ICIsIFJhd1BvaW50ZXIobV9tZW1vcnkpLCAiLCBzaXplICIsIG1fc2l6ZSwgIkIgY2FwYWNpdHkg
IiwgbV9tYXBwZWRDYXBhY2l0eSwgIkIsIGluaXRpYWwgIiwgbV9pbml0aWFsLCAiIG1heGltdW0g
IiwgbV9tYXhpbXVtLCAiIG1vZGUgIiwgbWFrZVN0cmluZyhtX21vZGUpKTsKIH0KIAogfSAvLyBu
YW1lc3BhY2UgSlNDCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtTWVtb3J5
LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbU1lbW9yeS5o
CShyZXZpc2lvbiAyNDYyNzEpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtTWVt
b3J5LmgJKHdvcmtpbmcgY29weSkKQEAgLTMwLDcgKzMwLDYgQEAKICNpbmNsdWRlICJXYXNtTWVt
b3J5TW9kZS5oIgogI2luY2x1ZGUgIldhc21QYWdlQ291bnQuaCIKIAotI2luY2x1ZGUgPHd0Zi9D
YWdlZFB0ci5oPgogI2luY2x1ZGUgPHd0Zi9FeHBlY3RlZC5oPgogI2luY2x1ZGUgPHd0Zi9GdW5j
dGlvbi5oPgogI2luY2x1ZGUgPHd0Zi9SZWZDb3VudGVkLmg+CkBAIC02OSw3ICs2OCw3IEBAIHB1
YmxpYzoKICAgICBzdGF0aWMgc2l6ZV90IGZhc3RNYXBwZWRCeXRlcygpOyAvLyBJbmNsdWRlcyBy
ZWR6b25lLgogICAgIHN0YXRpYyBib29sIGFkZHJlc3NJc0luQWN0aXZlRmFzdE1lbW9yeSh2b2lk
Kik7CiAKLSAgICB2b2lkKiBtZW1vcnkoKSBjb25zdCB7IEFTU0VSVChtX21lbW9yeS5nZXRNYXlC
ZU51bGwoc2l6ZSgpKSA9PSBtX21lbW9yeS5nZXRVbnNhZmUoKSk7IHJldHVybiBtX21lbW9yeS5n
ZXRNYXlCZU51bGwoc2l6ZSgpKTsgfQorICAgIHZvaWQqIG1lbW9yeSgpIGNvbnN0IHsgcmV0dXJu
IG1fbWVtb3J5OyB9CiAgICAgc2l6ZV90IHNpemUoKSBjb25zdCB7IHJldHVybiBtX3NpemU7IH0K
ICAgICBQYWdlQ291bnQgc2l6ZUluUGFnZXMoKSBjb25zdCB7IHJldHVybiBQYWdlQ291bnQ6OmZy
b21CeXRlcyhtX3NpemUpOyB9CiAKQEAgLTk3LDggKzk2LDcgQEAgcHJpdmF0ZToKICAgICBNZW1v
cnkodm9pZCogbWVtb3J5LCBQYWdlQ291bnQgaW5pdGlhbCwgUGFnZUNvdW50IG1heGltdW0sIHNp
emVfdCBtYXBwZWRDYXBhY2l0eSwgTWVtb3J5TW9kZSwgV1RGOjpGdW5jdGlvbjx2b2lkKE5vdGlm
eVByZXNzdXJlKT4mJiBub3RpZnlNZW1vcnlQcmVzc3VyZSwgV1RGOjpGdW5jdGlvbjx2b2lkKFN5
bmNUcnlUb1JlY2xhaW0pPiYmIHN5bmNUcnlUb1JlY2xhaW1NZW1vcnksIFdURjo6RnVuY3Rpb248
dm9pZChHcm93U3VjY2VzcywgUGFnZUNvdW50LCBQYWdlQ291bnQpPiYmIGdyb3dTdWNjZXNzQ2Fs
bGJhY2spOwogICAgIE1lbW9yeShQYWdlQ291bnQgaW5pdGlhbCwgUGFnZUNvdW50IG1heGltdW0s
IFdURjo6RnVuY3Rpb248dm9pZChOb3RpZnlQcmVzc3VyZSk+JiYgbm90aWZ5TWVtb3J5UHJlc3N1
cmUsIFdURjo6RnVuY3Rpb248dm9pZChTeW5jVHJ5VG9SZWNsYWltKT4mJiBzeW5jVHJ5VG9SZWNs
YWltTWVtb3J5LCBXVEY6OkZ1bmN0aW9uPHZvaWQoR3Jvd1N1Y2Nlc3MsIFBhZ2VDb3VudCwgUGFn
ZUNvdW50KT4mJiBncm93U3VjY2Vzc0NhbGxiYWNrKTsKIAotICAgIHVzaW5nIENhZ2VkTWVtb3J5
ID0gQ2FnZWRQdHI8R2lnYWNhZ2U6OlByaW1pdGl2ZSwgdm9pZCwgdGFnQ2FnZWRQdHI+OwotICAg
IENhZ2VkTWVtb3J5IG1fbWVtb3J5OworICAgIHZvaWQqIG1fbWVtb3J5IHsgbnVsbHB0ciB9Owog
ICAgIHNpemVfdCBtX3NpemUgeyAwIH07CiAgICAgUGFnZUNvdW50IG1faW5pdGlhbDsKICAgICBQ
YWdlQ291bnQgbV9tYXhpbXVtOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMv
SlNUb1dhc20uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pz
L0pTVG9XYXNtLmNwcAkocmV2aXNpb24gMjQ2MjcxKQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L3dhc20vanMvSlNUb1dhc20uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yOSw3ICsyOSw2IEBACiAj
aWYgRU5BQkxFKFdFQkFTU0VNQkxZKQogCiAjaW5jbHVkZSAiQ0NhbGxIZWxwZXJzLmgiCi0jaW5j
bHVkZSAiRGlzYWxsb3dNYWNyb1NjcmF0Y2hSZWdpc3RlclVzYWdlLmgiCiAjaW5jbHVkZSAiSlND
SW5saW5lcy5oIgogI2luY2x1ZGUgIkpTV2ViQXNzZW1ibHlJbnN0YW5jZS5oIgogI2luY2x1ZGUg
IkpTV2ViQXNzZW1ibHlSdW50aW1lRXJyb3IuaCIKQEAgLTIxMiwyMyArMjExLDE1IEBAIHN0ZDo6
dW5pcXVlX3B0cjxJbnRlcm5hbEZ1bmN0aW9uPiBjcmVhdGUKIAogICAgIGlmICghIWluZm8ubWVt
b3J5KSB7CiAgICAgICAgIEdQUlJlZyBiYXNlTWVtb3J5ID0gcGlubmVkUmVncy5iYXNlTWVtb3J5
UG9pbnRlcjsKLSAgICAgICAgR1BSUmVnIHNjcmF0Y2hPclNpemUgPSB3YXNtQ2FsbGluZ0NvbnZl
bnRpb25BaXIoKS5wcm9sb2d1ZVNjcmF0Y2goMCk7CiAKICAgICAgICAgaWYgKENvbnRleHQ6OnVz
ZUZhc3RUTFMoKSkKICAgICAgICAgICAgIGppdC5sb2FkV2FzbUNvbnRleHRJbnN0YW5jZShiYXNl
TWVtb3J5KTsKIAogICAgICAgICBHUFJSZWcgY3VycmVudEluc3RhbmNlR1BSID0gQ29udGV4dDo6
dXNlRmFzdFRMUygpID8gYmFzZU1lbW9yeSA6IHdhc21Db250ZXh0SW5zdGFuY2VHUFI7Ci0gICAg
ICAgIGlmIChpc0FSTTY0RSgpKSB7Ci0gICAgICAgICAgICBpZiAobW9kZSAhPSBXYXNtOjpNZW1v
cnlNb2RlOjpTaWduYWxpbmcpCi0gICAgICAgICAgICAgICAgc2NyYXRjaE9yU2l6ZSA9IHBpbm5l
ZFJlZ3Muc2l6ZVJlZ2lzdGVyOwotICAgICAgICAgICAgaml0LmxvYWRQdHIoQ0NhbGxIZWxwZXJz
OjpBZGRyZXNzKGN1cnJlbnRJbnN0YW5jZUdQUiwgV2FzbTo6SW5zdGFuY2U6Om9mZnNldE9mQ2Fj
aGVkTWVtb3J5U2l6ZSgpKSwgc2NyYXRjaE9yU2l6ZSk7Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAg
ICAgICAgICBpZiAobW9kZSAhPSBXYXNtOjpNZW1vcnlNb2RlOjpTaWduYWxpbmcpCi0gICAgICAg
ICAgICAgICAgaml0LmxvYWRQdHIoQ0NhbGxIZWxwZXJzOjpBZGRyZXNzKGN1cnJlbnRJbnN0YW5j
ZUdQUiwgV2FzbTo6SW5zdGFuY2U6Om9mZnNldE9mQ2FjaGVkTWVtb3J5U2l6ZSgpKSwgcGlubmVk
UmVncy5zaXplUmVnaXN0ZXIpOwotICAgICAgICB9CisgICAgICAgIGlmIChtb2RlICE9IE1lbW9y
eU1vZGU6OlNpZ25hbGluZykKKyAgICAgICAgICAgIGppdC5sb2FkUHRyKENDYWxsSGVscGVyczo6
QWRkcmVzcyhjdXJyZW50SW5zdGFuY2VHUFIsIFdhc206Okluc3RhbmNlOjpvZmZzZXRPZkNhY2hl
ZE1lbW9yeVNpemUoKSksIHBpbm5lZFJlZ3Muc2l6ZVJlZ2lzdGVyKTsKIAogICAgICAgICBqaXQu
bG9hZFB0cihDQ2FsbEhlbHBlcnM6OkFkZHJlc3MoY3VycmVudEluc3RhbmNlR1BSLCBXYXNtOjpJ
bnN0YW5jZTo6b2Zmc2V0T2ZDYWNoZWRNZW1vcnkoKSksIGJhc2VNZW1vcnkpOwotICAgICAgICBq
aXQuY2FnZUNvbmRpdGlvbmFsbHkoR2lnYWNhZ2U6OlByaW1pdGl2ZSwgYmFzZU1lbW9yeSwgc2Ny
YXRjaE9yU2l6ZSk7CiAgICAgfQogCiAgICAgQ0NhbGxIZWxwZXJzOjpDYWxsIGNhbGwgPSBqaXQu
dGhyZWFkU2FmZVBhdGNoYWJsZU5lYXJDYWxsKCk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvd2FzbS9qcy9XZWJBc3NlbWJseUZ1bmN0aW9uLmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvd2FzbS9qcy9XZWJBc3NlbWJseUZ1bmN0aW9uLmNwcAkocmV2aXNpb24g
MjQ2MjcxKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMvV2ViQXNzZW1ibHlGdW5j
dGlvbi5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQxMCwyMCArNDEwLDEzIEBAIE1hY3JvQXNzZW1i
bGVyQ29kZVB0cjxKU0VudHJ5UHRyVGFnPiBXZWIKIAogICAgIGlmICghIW1vZHVsZUluZm9ybWF0
aW9uLm1lbW9yeSkgewogICAgICAgICBHUFJSZWcgYmFzZU1lbW9yeSA9IHBpbm5lZFJlZ3MuYmFz
ZU1lbW9yeVBvaW50ZXI7Ci0gICAgICAgIEdQUlJlZyBzY3JhdGNoT3JTaXplID0gc2NyYXRjaDJH
UFI7Ci0gICAgICAgIGF1dG8gbW9kZSA9IGluc3RhbmNlKCktPm1lbW9yeU1vZGUoKTsKIAotICAg
ICAgICBpZiAoaXNBUk02NEUoKSkgewotICAgICAgICAgICAgaWYgKG1vZGUgIT0gV2FzbTo6TWVt
b3J5TW9kZTo6U2lnbmFsaW5nKQotICAgICAgICAgICAgICAgIHNjcmF0Y2hPclNpemUgPSBwaW5u
ZWRSZWdzLnNpemVSZWdpc3RlcjsKLSAgICAgICAgICAgIGppdC5sb2FkUHRyKENDYWxsSGVscGVy
czo6QWRkcmVzcyhzY3JhdGNoR1BSLCBXYXNtOjpJbnN0YW5jZTo6b2Zmc2V0T2ZDYWNoZWRNZW1v
cnlTaXplKCkpLCBzY3JhdGNoT3JTaXplKTsKLSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAg
IGlmIChtb2RlICE9IFdhc206Ok1lbW9yeU1vZGU6OlNpZ25hbGluZykKLSAgICAgICAgICAgICAg
ICBqaXQubG9hZFB0cihDQ2FsbEhlbHBlcnM6OkFkZHJlc3Moc2NyYXRjaEdQUiwgV2FzbTo6SW5z
dGFuY2U6Om9mZnNldE9mQ2FjaGVkTWVtb3J5U2l6ZSgpKSwgcGlubmVkUmVncy5zaXplUmVnaXN0
ZXIpOworICAgICAgICBpZiAoaW5zdGFuY2UoKS0+bWVtb3J5TW9kZSgpICE9IFdhc206Ok1lbW9y
eU1vZGU6OlNpZ25hbGluZykgeworICAgICAgICAgICAgQVNTRVJUKHBpbm5lZFJlZ3Muc2l6ZVJl
Z2lzdGVyICE9IHNjcmF0Y2hHUFIpOworICAgICAgICAgICAgaml0LmxvYWRQdHIoQ0NhbGxIZWxw
ZXJzOjpBZGRyZXNzKHNjcmF0Y2hHUFIsIFdhc206Okluc3RhbmNlOjpvZmZzZXRPZkNhY2hlZE1l
bW9yeVNpemUoKSksIHBpbm5lZFJlZ3Muc2l6ZVJlZ2lzdGVyKTsKICAgICAgICAgfQogCiAgICAg
ICAgIGppdC5sb2FkUHRyKENDYWxsSGVscGVyczo6QWRkcmVzcyhzY3JhdGNoR1BSLCBXYXNtOjpJ
bnN0YW5jZTo6b2Zmc2V0T2ZDYWNoZWRNZW1vcnkoKSksIGJhc2VNZW1vcnkpOwotICAgICAgICBq
aXQuY2FnZUNvbmRpdGlvbmFsbHkoR2lnYWNhZ2U6OlByaW1pdGl2ZSwgYmFzZU1lbW9yeSwgc2Ny
YXRjaE9yU2l6ZSk7CiAgICAgfQogCiAgICAgLy8gV2UgdXNlIHRoaXMgY2FsbGVlIHRvIGluZGlj
YXRlIGhvdyB0byB1bndpbmQgcGFzdCB0aGVzZSB0eXBlcyBvZiBmcmFtZXM6CkluZGV4OiBTb3Vy
Y2UvV1RGL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV1RGL0NoYW5nZUxvZwkocmV2
aXNpb24gMjQ2MjcxKQorKysgU291cmNlL1dURi9DaGFuZ2VMb2cJKHdvcmtpbmcgY29weSkKQEAg
LTEsMyArMSw0NyBAQAorMjAxOS0wNi0xMCAgU2FhbSBCYXJhdGkgIDxzYmFyYXRpQGFwcGxlLmNv
bT4KKworICAgICAgICBSb2xsIG91dCBQQUMgY2FnZQorICAgICAgICBodHRwczovL2J1Z3Mud2Vi
a2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTk4NzI2CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9C
T0RZIChPT1BTISkuCisKKyAgICAgICAgKiBXVEYueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvajoK
KyAgICAgICAgKiB3dGYvQ01ha2VMaXN0cy50eHQ6CisgICAgICAgICogd3RmL0NhZ2VkUHRyLmg6
CisgICAgICAgIChXVEY6OkNhZ2VkUHRyOjpDYWdlZFB0cik6CisgICAgICAgIChXVEY6OkNhZ2Vk
UHRyOjpnZXQgY29uc3QpOgorICAgICAgICAoV1RGOjpDYWdlZFB0cjo6Z2V0TWF5QmVOdWxsIGNv
bnN0KToKKyAgICAgICAgKFdURjo6Q2FnZWRQdHI6Om9wZXJhdG9yPSk6CisgICAgICAgIChXVEY6
OkNhZ2VkUHRyOjpvcGVyYXRvcj09IGNvbnN0KToKKyAgICAgICAgKFdURjo6Q2FnZWRQdHI6Om9w
ZXJhdG9yIT0gY29uc3QpOgorICAgICAgICAoV1RGOjpDYWdlZFB0cjo6b3BlcmF0b3IgYm9vbCBj
b25zdCk6CisgICAgICAgIChXVEY6OkNhZ2VkUHRyOjpvcGVyYXRvciogY29uc3QpOgorICAgICAg
ICAoV1RGOjpDYWdlZFB0cjo6b3BlcmF0b3ItPiBjb25zdCk6CisgICAgICAgIChXVEY6OkNhZ2Vk
UHRyOjpvcGVyYXRvcltdIGNvbnN0KToKKyAgICAgICAgKFdURjo6Q2FnZWRQdHI6OmdldFVuc2Fm
ZSBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChXVEY6OkNhZ2VkUHRyOjphdCBjb25zdCk6IERl
bGV0ZWQuCisgICAgICAgIChXVEY6OkNhZ2VkUHRyOjpyZWNhZ2UpOiBEZWxldGVkLgorICAgICAg
ICAqIHd0Zi9DYWdlZFVuaXF1ZVB0ci5oOgorICAgICAgICAoV1RGOjpDYWdlZFVuaXF1ZVB0cjo6
Q2FnZWRVbmlxdWVQdHIpOgorICAgICAgICAoV1RGOjpDYWdlZFVuaXF1ZVB0cjo6Y3JlYXRlKToK
KyAgICAgICAgKFdURjo6Q2FnZWRVbmlxdWVQdHI6Om9wZXJhdG9yPSk6CisgICAgICAgIChXVEY6
OkNhZ2VkVW5pcXVlUHRyOjp+Q2FnZWRVbmlxdWVQdHIpOgorICAgICAgICAoV1RGOjpDYWdlZFVu
aXF1ZVB0cjo6ZGVzdHJveSk6CisgICAgICAgICogd3RmL0dpZ2FjYWdlLmg6CisgICAgICAgIChH
aWdhY2FnZTo6Y2FnZWQpOgorICAgICAgICAoR2lnYWNhZ2U6OmNhZ2VkTWF5QmVOdWxsKTogRGVs
ZXRlZC4KKyAgICAgICAgKiB3dGYvUHRyVGFnLmg6CisgICAgICAgIChXVEY6OnRhZ0FycmF5UHRy
KTogRGVsZXRlZC4KKyAgICAgICAgKFdURjo6dW50YWdBcnJheVB0cik6IERlbGV0ZWQuCisgICAg
ICAgIChXVEY6OnJlbW92ZUFycmF5UHRyVGFnKTogRGVsZXRlZC4KKyAgICAgICAgKFdURjo6cmV0
YWdBcnJheVB0cik6IERlbGV0ZWQuCisgICAgICAgICogd3RmL1RhZ2dlZEFycmF5U3RvcmFnZVB0
ci5oOgorICAgICAgICAoV1RGOjpUYWdnZWRBcnJheVN0b3JhZ2VQdHI6OlRhZ2dlZEFycmF5U3Rv
cmFnZVB0cik6IERlbGV0ZWQuCisgICAgICAgIChXVEY6OlRhZ2dlZEFycmF5U3RvcmFnZVB0cjo6
Z2V0IGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdURjo6VGFnZ2VkQXJyYXlTdG9yYWdlUHRy
OjpnZXRVbnNhZmUgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAoV1RGOjpUYWdnZWRBcnJheVN0
b3JhZ2VQdHI6OnJlc2l6ZSk6IERlbGV0ZWQuCisgICAgICAgIChXVEY6OlRhZ2dlZEFycmF5U3Rv
cmFnZVB0cjo6b3BlcmF0b3IgYm9vbCBjb25zdCk6IERlbGV0ZWQuCisKIDIwMTktMDYtMTAgIFRp
bW90aHkgSGF0Y2hlciAgPHRpbW90aHlAYXBwbGUuY29tPgogCiAgICAgICAgIEludGVncmF0ZSBk
YXJrIG1vZGUgc3VwcG9ydCBmb3IgaU9TLgpJbmRleDogU291cmNlL1dURi9XVEYueGNvZGVwcm9q
L3Byb2plY3QucGJ4cHJvago9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV1RGL1dURi54Y29kZXByb2ov
cHJvamVjdC5wYnhwcm9qCShyZXZpc2lvbiAyNDYyNzEpCisrKyBTb3VyY2UvV1RGL1dURi54Y29k
ZXByb2ovcHJvamVjdC5wYnhwcm9qCSh3b3JraW5nIGNvcHkpCkBAIC02NTEsNyArNjUxLDYgQEAK
IAkJRENFRTIxRkMxQ0VBNzU1MTAwMEMyMzk2IC8qIEJsb2NrT2JqQ0V4Y2VwdGlvbnMuaCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gQmxvY2tPYmpDRXhjZXB0aW9ucy5oOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlEQ0VFMjFGRDFDRUE3NTUxMDAwQzIzOTYgLyogQmxv
Y2tPYmpDRXhjZXB0aW9ucy5tbSAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLm9iamNwcDsgcGF0
aCA9IEJsb2NrT2JqQ0V4Y2VwdGlvbnMubW07IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJ
CURDRUUyMjA0MUNFQjk4NjkwMDBDMjM5NiAvKiBCYWNrd2FyZHNHcmFwaC5oICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jLmg7IHBhdGggPSBCYWNrd2FyZHNHcmFwaC5oOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OwotCQlERUY3RkU1RjIyNTgxQUM4MDBDMTUxMjkgLyogVGFnZ2VkQXJyYXlTdG9y
YWdlUHRyLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFRhZ2dlZEFycmF5U3Rv
cmFnZVB0ci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlFMTU1NTZGMzE4QTBDQzE4
MDA2RjQ4RkIgLyogQ3J5cHRvZ3JhcGhpY1V0aWxpdGllcy5jcHAgKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmNwcC5jcHA7IHBhdGggPSBDcnlwdG9ncmFwaGljVXRpbGl0aWVzLmNwcDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKIAkJRTE1NTU2RjQxOEEwQ0MxODAwNkY0OEZCIC8qIENyeXB0b2dy
YXBoaWNVdGlsaXRpZXMuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gQ3J5cHRv
Z3JhcGhpY1V0aWxpdGllcy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlFMzAwRTUy
MTIwM0Q2NDVGMDBEQTc5QkUgLyogVW5pcXVlQXJyYXkuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Yy5oOyBwYXRoID0gVW5pcXVlQXJyYXkuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAg
LTExNTgsNyArMTE1Nyw2IEBACiAJCQkJNTU5N0Y4MkMxRDk0Qjk5NzAwNjZCQzIxIC8qIFN5bmNo
cm9uaXplZEZpeGVkUXVldWUuaCAqLywKIAkJCQlFM0UxNTgyNTFFQURBNTNDMDA0QTA3OUQgLyog
U3lzdGVtRnJlZS5oICovLAogCQkJCTBGQjMxN0MzMUM0ODgwMDEwMDdFMzk1QSAvKiBTeXN0ZW1U
cmFjaW5nLmggKi8sCi0JCQkJREVGN0ZFNUYyMjU4MUFDODAwQzE1MTI5IC8qIFRhZ2dlZEFycmF5
U3RvcmFnZVB0ci5oICovLAogCQkJCUUzMTFGQjE1MUYwQTU2OEIwMDNDMDhERSAvKiBUaHJlYWRH
cm91cC5jcHAgKi8sCiAJCQkJRTMxMUZCMTYxRjBBNTY4QjAwM0MwOERFIC8qIFRocmVhZEdyb3Vw
LmggKi8sCiAJCQkJQThBNDczMzIxNTFBODI1QjAwNDEyM0ZGIC8qIFRocmVhZGluZy5jcHAgKi8s
CkluZGV4OiBTb3VyY2UvV1RGL3d0Zi9DTWFrZUxpc3RzLnR4dAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvV1RGL3d0Zi9DTWFrZUxpc3RzLnR4dAkocmV2aXNpb24gMjQ2MjcxKQorKysgU291cmNlL1dU
Ri93dGYvQ01ha2VMaXN0cy50eHQJKHdvcmtpbmcgY29weSkKQEAgLTIzMCw3ICsyMzAsNiBAQCBz
ZXQoV1RGX1BVQkxJQ19IRUFERVJTCiAgICAgU3luY2hyb25pemVkRml4ZWRRdWV1ZS5oCiAgICAg
U3lzdGVtRnJlZS5oCiAgICAgU3lzdGVtVHJhY2luZy5oCi0gICAgVGFnZ2VkQXJyYXlTdG9yYWdl
UHRyLmgKICAgICBUaHJlYWRHcm91cC5oCiAgICAgVGhyZWFkTWVzc2FnZS5oCiAgICAgVGhyZWFk
U2FmZVJlZkNvdW50ZWQuaApJbmRleDogU291cmNlL1dURi93dGYvQ2FnZWRQdHIuaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvV1RGL3d0Zi9DYWdlZFB0ci5oCShyZXZpc2lvbiAyNDYyNzEpCisrKyBT
b3VyY2UvV1RGL3d0Zi9DYWdlZFB0ci5oCSh3b3JraW5nIGNvcHkpCkBAIC0yNyw5MSArMjcsMTA3
IEBACiAKICNpbmNsdWRlIDx3dGYvRHVtYlB0clRyYWl0cy5oPgogI2luY2x1ZGUgPHd0Zi9HaWdh
Y2FnZS5oPgotI2luY2x1ZGUgPHd0Zi9QdHJUYWcuaD4KIAogbmFtZXNwYWNlIFdURiB7CiAKLWNv
bnN0ZXhwciBib29sIHRhZ0NhZ2VkUHRyID0gdHJ1ZTsKLQotdGVtcGxhdGU8R2lnYWNhZ2U6Oktp
bmQgcGFzc2VkS2luZCwgdHlwZW5hbWUgVCwgYm9vbCBzaG91bGRUYWcgPSBmYWxzZSwgdHlwZW5h
bWUgUHRyVHJhaXRzID0gRHVtYlB0clRyYWl0czxUPj4KK3RlbXBsYXRlPEdpZ2FjYWdlOjpLaW5k
IHBhc3NlZEtpbmQsIHR5cGVuYW1lIFQsIHR5cGVuYW1lIFB0clRyYWl0cyA9IER1bWJQdHJUcmFp
dHM8VD4+CiBjbGFzcyBDYWdlZFB0ciB7CiBwdWJsaWM6CiAgICAgc3RhdGljIGNvbnN0ZXhwciBH
aWdhY2FnZTo6S2luZCBraW5kID0gcGFzc2VkS2luZDsKIAogICAgIENhZ2VkUHRyKCkgOiBDYWdl
ZFB0cihudWxscHRyKSB7IH0KLSAgICBDYWdlZFB0cihzdGQ6Om51bGxwdHJfdCkKLSAgICAgICAg
OiBtX3B0cihzaG91bGRUYWcgPyB0YWdBcnJheVB0cjxUPihudWxscHRyLCAwKSA6IG51bGxwdHIp
Ci0gICAgeyB9Ci0KLSAgICBDYWdlZFB0cihUKiBwdHIsIHVuc2lnbmVkIHNpemUpCi0gICAgICAg
IDogbV9wdHIoc2hvdWxkVGFnID8gdGFnQXJyYXlQdHIocHRyLCBzaXplKSA6IHB0cikKLSAgICB7
IH0KLQorICAgIENhZ2VkUHRyKHN0ZDo6bnVsbHB0cl90KSA6IG1fcHRyKG51bGxwdHIpIHsgfQog
Ci0gICAgVCogZ2V0KHVuc2lnbmVkIHNpemUpIGNvbnN0CisgICAgZXhwbGljaXQgQ2FnZWRQdHIo
VCogcHRyKQorICAgICAgICA6IG1fcHRyKHB0cikKKyAgICB7CisgICAgfQorICAgIAorICAgIFQq
IGdldCgpIGNvbnN0CiAgICAgewogICAgICAgICBBU1NFUlQobV9wdHIpOwotICAgICAgICBUKiBw
dHIgPSBQdHJUcmFpdHM6OnVud3JhcChtX3B0cik7Ci0gICAgICAgIGlmIChzaG91bGRUYWcpCi0g
ICAgICAgICAgICBwdHIgPSB1bnRhZ0FycmF5UHRyKHB0ciwgc2l6ZSk7Ci0gICAgICAgIHJldHVy
biBHaWdhY2FnZTo6Y2FnZWQoa2luZCwgcHRyKTsKKyAgICAgICAgcmV0dXJuIEdpZ2FjYWdlOjpj
YWdlZChraW5kLCBQdHJUcmFpdHM6OnVud3JhcChtX3B0cikpOwogICAgIH0KLQotICAgIFQqIGdl
dE1heUJlTnVsbCh1bnNpZ25lZCBzaXplKSBjb25zdAorICAgIAorICAgIFQqIGdldE1heUJlTnVs
bCgpIGNvbnN0CiAgICAgewotICAgICAgICBUKiBwdHIgPSBQdHJUcmFpdHM6OnVud3JhcChtX3B0
cik7Ci0gICAgICAgIGlmIChzaG91bGRUYWcpCi0gICAgICAgICAgICBwdHIgPSB1bnRhZ0FycmF5
UHRyKHB0ciwgc2l6ZSk7Ci0gICAgICAgIHJldHVybiBHaWdhY2FnZTo6Y2FnZWRNYXlCZU51bGwo
a2luZCwgcHRyKTsKKyAgICAgICAgaWYgKCFtX3B0cikKKyAgICAgICAgICAgIHJldHVybiBudWxs
cHRyOworICAgICAgICByZXR1cm4gZ2V0KCk7CiAgICAgfQogCi0gICAgVCogZ2V0VW5zYWZlKCkg
Y29uc3QKKyAgICBDYWdlZFB0ciYgb3BlcmF0b3I9KFQqIHB0cikKICAgICB7Ci0gICAgICAgIFQq
IHB0ciA9IFB0clRyYWl0czo6dW53cmFwKG1fcHRyKTsKLSAgICAgICAgaWYgKHNob3VsZFRhZykK
LSAgICAgICAgICAgIHB0ciA9IHJlbW92ZUFycmF5UHRyVGFnKHB0cik7Ci0gICAgICAgIHJldHVy
biBHaWdhY2FnZTo6Y2FnZWRNYXlCZU51bGwoa2luZCwgcHRyKTsKKyAgICAgICAgbV9wdHIgPSBw
dHI7CisgICAgICAgIHJldHVybiAqdGhpczsKICAgICB9CiAKLSAgICAvLyBXZSBuZWVkIHRoZSB0
ZW1wbGF0ZSBoZXJlIHNvIHRoYXQgdGhlIHR5cGUgb2YgVSBpcyBkZWR1Y2VkIGF0IHVzYWdlIHRp
bWUgcmF0aGVyIHRoYW4gY2xhc3MgdGltZS4gVSBzaG91bGQgYWx3YXlzIGJlIFQuCi0gICAgdGVt
cGxhdGU8dHlwZW5hbWUgVSA9IFQ+Ci0gICAgdHlwZW5hbWUgc3RkOjplbmFibGVfaWY8IXN0ZDo6
aXNfc2FtZTx2b2lkLCBVPjo6dmFsdWUsIFQ+Ojp0eXBlJgotICAgIC8qIFQmICovIGF0KHVuc2ln
bmVkIGluZGV4LCB1bnNpZ25lZCBzaXplKSBjb25zdCB7IHJldHVybiBnZXQoc2l6ZSlbaW5kZXhd
OyB9Ci0KLSAgICB2b2lkIHJlY2FnZSh1bnNpZ25lZCBvbGRTaXplLCB1bnNpZ25lZCBuZXdTaXpl
KQorICAgIENhZ2VkUHRyJiBvcGVyYXRvcj0oVComJiBwdHIpCiAgICAgewotICAgICAgICBhdXRv
IHB0ciA9IGdldChvbGRTaXplKTsKLSAgICAgICAgQVNTRVJUKHB0ciA9PSBnZXRVbnNhZmUoKSk7
Ci0gICAgICAgICp0aGlzID0gQ2FnZWRQdHIocHRyLCBuZXdTaXplKTsKKyAgICAgICAgbV9wdHIg
PSBXVEZNb3ZlKHB0cik7CisgICAgICAgIHJldHVybiAqdGhpczsKICAgICB9CiAKLSAgICBDYWdl
ZFB0cihDYWdlZFB0ciYgb3RoZXIpCi0gICAgICAgIDogbV9wdHIob3RoZXIubV9wdHIpCisgICAg
Ym9vbCBvcGVyYXRvcj09KGNvbnN0IENhZ2VkUHRyJiBvdGhlcikgY29uc3QKICAgICB7CisgICAg
ICAgIHJldHVybiBnZXRNYXlCZU51bGwoKSA9PSBvdGhlci5nZXRNYXlCZU51bGwoKTsKICAgICB9
Ci0KLSAgICBDYWdlZFB0ciYgb3BlcmF0b3I9KGNvbnN0IENhZ2VkUHRyJiBwdHIpCisgICAgCisg
ICAgYm9vbCBvcGVyYXRvciE9KGNvbnN0IENhZ2VkUHRyJiBvdGhlcikgY29uc3QKICAgICB7Ci0g
ICAgICAgIG1fcHRyID0gcHRyLm1fcHRyOwotICAgICAgICByZXR1cm4gKnRoaXM7CisgICAgICAg
IHJldHVybiAhKCp0aGlzID09IG90aGVyKTsKICAgICB9CisgICAgCisgICAgZXhwbGljaXQgb3Bl
cmF0b3IgYm9vbCgpIGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4gKnRoaXMgIT0gQ2FnZWRQ
dHIoKTsKKyAgICB9CisgICAgCisgICAgVCYgb3BlcmF0b3IqKCkgY29uc3QgeyByZXR1cm4gKmdl
dCgpOyB9CisgICAgVCogb3BlcmF0b3ItPigpIGNvbnN0IHsgcmV0dXJuIGdldCgpOyB9CisKKyAg
ICB0ZW1wbGF0ZTx0eXBlbmFtZSBJbmRleFR5cGU+CisgICAgVCYgb3BlcmF0b3JbXShJbmRleFR5
cGUgaW5kZXgpIGNvbnN0IHsgcmV0dXJuIGdldCgpW2luZGV4XTsgfQorICAgIAorcHJvdGVjdGVk
OgorICAgIHR5cGVuYW1lIFB0clRyYWl0czo6U3RvcmFnZVR5cGUgbV9wdHI7Cit9OworCit0ZW1w
bGF0ZTxHaWdhY2FnZTo6S2luZCBwYXNzZWRLaW5kLCB0eXBlbmFtZSBQdHJUcmFpdHM+CitjbGFz
cyBDYWdlZFB0cjxwYXNzZWRLaW5kLCB2b2lkLCBQdHJUcmFpdHM+IHsKK3B1YmxpYzoKKyAgICBz
dGF0aWMgY29uc3RleHByIEdpZ2FjYWdlOjpLaW5kIGtpbmQgPSBwYXNzZWRLaW5kOwogCi0gICAg
Q2FnZWRQdHIoQ2FnZWRQdHImJiBvdGhlcikKLSAgICAgICAgOiBtX3B0cihQdHJUcmFpdHM6OmV4
Y2hhbmdlKG90aGVyLm1fcHRyLCBudWxscHRyKSkKKyAgICBDYWdlZFB0cigpIDogQ2FnZWRQdHIo
bnVsbHB0cikgeyB9CisgICAgQ2FnZWRQdHIoc3RkOjpudWxscHRyX3QpIDogbV9wdHIobnVsbHB0
cikgeyB9CisKKyAgICBleHBsaWNpdCBDYWdlZFB0cih2b2lkKiBwdHIpCisgICAgICAgIDogbV9w
dHIocHRyKQorICAgIHsKKyAgICB9CisgICAgCisgICAgdm9pZCogZ2V0KCkgY29uc3QKKyAgICB7
CisgICAgICAgIEFTU0VSVChtX3B0cik7CisgICAgICAgIHJldHVybiBHaWdhY2FnZTo6Y2FnZWQo
a2luZCwgUHRyVHJhaXRzOjp1bndyYXAobV9wdHIpKTsKKyAgICB9CisgICAgCisgICAgdm9pZCog
Z2V0TWF5QmVOdWxsKCkgY29uc3QKICAgICB7CisgICAgICAgIGlmICghbV9wdHIpCisgICAgICAg
ICAgICByZXR1cm4gbnVsbHB0cjsKKyAgICAgICAgcmV0dXJuIGdldCgpOwogICAgIH0KIAotICAg
IENhZ2VkUHRyJiBvcGVyYXRvcj0oQ2FnZWRQdHImJiBwdHIpCisgICAgQ2FnZWRQdHImIG9wZXJh
dG9yPSh2b2lkKiBwdHIpCiAgICAgewotICAgICAgICBtX3B0ciA9IFB0clRyYWl0czo6ZXhjaGFu
Z2UocHRyLm1fcHRyLCBudWxscHRyKTsKKyAgICAgICAgbV9wdHIgPSBwdHI7CiAgICAgICAgIHJl
dHVybiAqdGhpczsKICAgICB9CiAKICAgICBib29sIG9wZXJhdG9yPT0oY29uc3QgQ2FnZWRQdHIm
IG90aGVyKSBjb25zdAogICAgIHsKLSAgICAgICAgYm9vbCByZXN1bHQgPSBtX3B0ciA9PSBvdGhl
ci5tX3B0cjsKLSAgICAgICAgQVNTRVJUKHJlc3VsdCA9PSAoZ2V0VW5zYWZlKCkgPT0gb3RoZXIu
Z2V0VW5zYWZlKCkpKTsKLSAgICAgICAgcmV0dXJuIHJlc3VsdDsKKyAgICAgICAgcmV0dXJuIGdl
dE1heUJlTnVsbCgpID09IG90aGVyLmdldE1heUJlTnVsbCgpOwogICAgIH0KICAgICAKICAgICBi
b29sIG9wZXJhdG9yIT0oY29uc3QgQ2FnZWRQdHImIG90aGVyKSBjb25zdApAQCAtMTIxLDcgKzEz
Nyw3IEBAIHB1YmxpYzoKICAgICAKICAgICBleHBsaWNpdCBvcGVyYXRvciBib29sKCkgY29uc3QK
ICAgICB7Ci0gICAgICAgIHJldHVybiBnZXRVbnNhZmUoKSAhPSBudWxscHRyOworICAgICAgICBy
ZXR1cm4gKnRoaXMgIT0gQ2FnZWRQdHIoKTsKICAgICB9CiAgICAgCiBwcm90ZWN0ZWQ6CkBAIC0x
MzEsNSArMTQ3LDQgQEAgcHJvdGVjdGVkOgogfSAvLyBuYW1lc3BhY2UgV1RGCiAKIHVzaW5nIFdU
Rjo6Q2FnZWRQdHI7Ci11c2luZyBXVEY6OnRhZ0NhZ2VkUHRyOwogCkluZGV4OiBTb3VyY2UvV1RG
L3d0Zi9DYWdlZFVuaXF1ZVB0ci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XVEYvd3RmL0NhZ2Vk
VW5pcXVlUHRyLmgJKHJldmlzaW9uIDI0NjI3MSkKKysrIFNvdXJjZS9XVEYvd3RmL0NhZ2VkVW5p
cXVlUHRyLmgJKHdvcmtpbmcgY29weSkKQEAgLTI5LDMwICsyOSw4MCBAQAogCiBuYW1lc3BhY2Ug
V1RGIHsKIAotdGVtcGxhdGU8R2lnYWNhZ2U6OktpbmQga2luZCwgdHlwZW5hbWUgVCwgYm9vbCBz
aG91bGRUYWcgPSBmYWxzZT4KLWNsYXNzIENhZ2VkVW5pcXVlUHRyIDogcHVibGljIENhZ2VkUHRy
PGtpbmQsIFQsIHNob3VsZFRhZz4gewotICAgIHN0YXRpY19hc3NlcnQoc3RkOjppc190cml2aWFs
bHlfZGVzdHJ1Y3RpYmxlPFQ+Ojp2YWx1ZSwgIldlIGV4cGVjdCB0aGUgY29udGVudHMgb2YgYSBj
YWdlZCBwb2ludGVyIHRvIGJlIHRyaXZpYWxseSBkZXN0cnVjdGFibGUuIik7Cit0ZW1wbGF0ZTxH
aWdhY2FnZTo6S2luZCBraW5kLCB0eXBlbmFtZSBULCB0eXBlbmFtZSBFbmFibGUgPSB2b2lkPgor
Y2xhc3MgQ2FnZWRVbmlxdWVQdHIgOiBwdWJsaWMgQ2FnZWRQdHI8a2luZCwgVD4gewogcHVibGlj
OgotICAgIHVzaW5nIEJhc2UgPSBDYWdlZFB0cjxraW5kLCBULCBzaG91bGRUYWc+OwotICAgIENh
Z2VkVW5pcXVlUHRyKCkgPSBkZWZhdWx0OwotCi0gICAgQ2FnZWRVbmlxdWVQdHIoVCogcHRyLCB1
bnNpZ25lZCBzaXplKQotICAgICAgICA6IEJhc2UocHRyLCBzaXplKQotICAgIHsgfQorICAgIENh
Z2VkVW5pcXVlUHRyKFQqIHB0ciA9IG51bGxwdHIpCisgICAgICAgIDogQ2FnZWRQdHI8a2luZCwg
VD4ocHRyKQorICAgIHsKKyAgICB9CisgICAgCisgICAgQ2FnZWRVbmlxdWVQdHIoQ2FnZWRVbmlx
dWVQdHImJiBwdHIpCisgICAgICAgIDogQ2FnZWRQdHI8a2luZCwgVD4ocHRyLm1fcHRyKQorICAg
IHsKKyAgICAgICAgcHRyLm1fcHRyID0gbnVsbHB0cjsKKyAgICB9CisgICAgCisgICAgQ2FnZWRV
bmlxdWVQdHIoY29uc3QgQ2FnZWRVbmlxdWVQdHImKSA9IGRlbGV0ZTsKKyAgICAKKyAgICB0ZW1w
bGF0ZTx0eXBlbmFtZS4uLiBBcmd1bWVudHM+CisgICAgc3RhdGljIENhZ2VkVW5pcXVlUHRyIGNy
ZWF0ZShBcmd1bWVudHMmJi4uLiBhcmd1bWVudHMpCisgICAgeworICAgICAgICBUKiByZXN1bHQg
PSBzdGF0aWNfY2FzdDxUKj4oR2lnYWNhZ2U6Om1hbGxvYyhraW5kLCBzaXplb2YoVCkpKTsKKyAg
ICAgICAgbmV3IChyZXN1bHQpIFQoc3RkOjpmb3J3YXJkPEFyZ3VtZW50cz4oYXJndW1lbnRzKS4u
Lik7CisgICAgICAgIHJldHVybiBDYWdlZFVuaXF1ZVB0cihyZXN1bHQpOworICAgIH0KKyAgICAK
KyAgICBDYWdlZFVuaXF1ZVB0ciYgb3BlcmF0b3I9KENhZ2VkVW5pcXVlUHRyJiYgcHRyKQorICAg
IHsKKyAgICAgICAgZGVzdHJveSgpOworICAgICAgICB0aGlzLT5tX3B0ciA9IHB0ci5tX3B0cjsK
KyAgICAgICAgcHRyLm1fcHRyID0gbnVsbHB0cjsKKyAgICAgICAgcmV0dXJuICp0aGlzOworICAg
IH0KKyAgICAKKyAgICBDYWdlZFVuaXF1ZVB0ciYgb3BlcmF0b3I9KGNvbnN0IENhZ2VkVW5pcXVl
UHRyJikgPSBkZWxldGU7CisgICAgCisgICAgfkNhZ2VkVW5pcXVlUHRyKCkKKyAgICB7CisgICAg
ICAgIGRlc3Ryb3koKTsKKyAgICB9CisgICAgCitwcml2YXRlOgorICAgIHZvaWQgZGVzdHJveSgp
CisgICAgeworICAgICAgICBpZiAoIXRoaXMtPm1fcHRyKQorICAgICAgICAgICAgcmV0dXJuOwor
ICAgICAgICB0aGlzLT5tX3B0ci0+flQoKTsKKyAgICAgICAgR2lnYWNhZ2U6OmZyZWUoa2luZCwg
dGhpcy0+bV9wdHIpOworICAgIH0KK307CiAKK3RlbXBsYXRlPEdpZ2FjYWdlOjpLaW5kIGtpbmQs
IHR5cGVuYW1lIFQ+CitjbGFzcyBDYWdlZFVuaXF1ZVB0cjxraW5kLCBUW10sIHR5cGVuYW1lIHN0
ZDo6ZW5hYmxlX2lmPHN0ZDo6aXNfdHJpdmlhbGx5X2Rlc3RydWN0aWJsZTxUPjo6dmFsdWU+Ojp0
eXBlPiA6IHB1YmxpYyBDYWdlZFB0cjxraW5kLCBUPiB7CitwdWJsaWM6CisgICAgQ2FnZWRVbmlx
dWVQdHIoKSA6IENhZ2VkUHRyPGtpbmQsIFQ+KCkgeyB9CisgICAgCisgICAgQ2FnZWRVbmlxdWVQ
dHIoVCogcHRyKQorICAgICAgICA6IENhZ2VkUHRyPGtpbmQsIFQ+KHB0cikKKyAgICB7CisgICAg
fQorICAgIAogICAgIENhZ2VkVW5pcXVlUHRyKENhZ2VkVW5pcXVlUHRyJiYgcHRyKQotICAgICAg
ICA6IEJhc2Uoc3RkOjpmb3J3YXJkPENhZ2VkVW5pcXVlUHRyJiY+KHB0cikpCi0gICAgeyB9Cisg
ICAgICAgIDogQ2FnZWRQdHI8a2luZCwgVD4ocHRyLm1fcHRyKQorICAgIHsKKyAgICAgICAgcHRy
Lm1fcHRyID0gbnVsbHB0cjsKKyAgICB9CiAgICAgCiAgICAgQ2FnZWRVbmlxdWVQdHIoY29uc3Qg
Q2FnZWRVbmlxdWVQdHImKSA9IGRlbGV0ZTsKICAgICAKICAgICB0ZW1wbGF0ZTx0eXBlbmFtZS4u
LiBBcmd1bWVudHM+Ci0gICAgc3RhdGljIENhZ2VkVW5pcXVlUHRyIGNyZWF0ZSh1bnNpZ25lZCBs
ZW5ndGgsIEFyZ3VtZW50cyYmLi4uIGFyZ3VtZW50cykKKyAgICBzdGF0aWMgQ2FnZWRVbmlxdWVQ
dHIgY3JlYXRlKHNpemVfdCBjb3VudCwgQXJndW1lbnRzJiYuLi4gYXJndW1lbnRzKQogICAgIHsK
LSAgICAgICAgVCogcmVzdWx0ID0gc3RhdGljX2Nhc3Q8VCo+KEdpZ2FjYWdlOjptYWxsb2Moa2lu
ZCwgc2l6ZW9mKFQpICogbGVuZ3RoKSk7Ci0gICAgICAgIHdoaWxlIChsZW5ndGgtLSkKLSAgICAg
ICAgICAgIG5ldyAocmVzdWx0ICsgbGVuZ3RoKSBUKGFyZ3VtZW50cy4uLik7Ci0gICAgICAgIHJl
dHVybiBDYWdlZFVuaXF1ZVB0cihyZXN1bHQsIGxlbmd0aCk7CisgICAgICAgIFQqIHJlc3VsdCA9
IHN0YXRpY19jYXN0PFQqPihHaWdhY2FnZTo6bWFsbG9jQXJyYXkoa2luZCwgY291bnQsIHNpemVv
ZihUKSkpOworICAgICAgICB3aGlsZSAoY291bnQtLSkKKyAgICAgICAgICAgIG5ldyAocmVzdWx0
ICsgY291bnQpIFQoc3RkOjpmb3J3YXJkPEFyZ3VtZW50cz4oYXJndW1lbnRzKS4uLik7CisgICAg
ICAgIHJldHVybiBDYWdlZFVuaXF1ZVB0cihyZXN1bHQpOwogICAgIH0KICAgICAKICAgICBDYWdl
ZFVuaXF1ZVB0ciYgb3BlcmF0b3I9KENhZ2VkVW5pcXVlUHRyJiYgcHRyKQpAQCAtNjksMTYgKzEx
OSw4MyBAQCBwdWJsaWM6CiAgICAgewogICAgICAgICBkZXN0cm95KCk7CiAgICAgfQorICAgIAor
cHJpdmF0ZToKKyAgICB2b2lkIGRlc3Ryb3koKQorICAgIHsKKyAgICAgICAgaWYgKCF0aGlzLT5t
X3B0cikKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgR2lnYWNhZ2U6OmZyZWUoa2luZCwg
dGhpcy0+bV9wdHIpOworICAgIH0KK307CiAKK3RlbXBsYXRlPEdpZ2FjYWdlOjpLaW5kIGtpbmQs
IHR5cGVuYW1lIFQ+CitjbGFzcyBDYWdlZFVuaXF1ZVB0cjxraW5kLCBUW10sIHR5cGVuYW1lIHN0
ZDo6ZW5hYmxlX2lmPCFzdGQ6OmlzX3RyaXZpYWxseV9kZXN0cnVjdGlibGU8VD46OnZhbHVlPjo6
dHlwZT4gOiBwdWJsaWMgQ2FnZWRQdHI8a2luZCwgVD4geworcHVibGljOgorICAgIENhZ2VkVW5p
cXVlUHRyKCkgOiBDYWdlZFB0cjxraW5kLCBUPigpIHsgfQorICAgIAorICAgIENhZ2VkVW5pcXVl
UHRyKFQqIHB0ciwgc2l6ZV90IGNvdW50KQorICAgICAgICA6IENhZ2VkUHRyPGtpbmQsIFQ+KHB0
cikKKyAgICAgICAgLCBtX2NvdW50KGNvdW50KQorICAgIHsKKyAgICB9CisgICAgCisgICAgQ2Fn
ZWRVbmlxdWVQdHIoQ2FnZWRVbmlxdWVQdHImJiBwdHIpCisgICAgICAgIDogQ2FnZWRQdHI8a2lu
ZCwgVD4ocHRyLm1fcHRyKQorICAgICAgICAsIG1fY291bnQocHRyLm1fY291bnQpCisgICAgewor
ICAgICAgICBwdHIuY2xlYXIoKTsKKyAgICB9CisgICAgCisgICAgQ2FnZWRVbmlxdWVQdHIoY29u
c3QgQ2FnZWRVbmlxdWVQdHImKSA9IGRlbGV0ZTsKKyAgICAKKyAgICB0ZW1wbGF0ZTx0eXBlbmFt
ZS4uLiBBcmd1bWVudHM+CisgICAgc3RhdGljIENhZ2VkVW5pcXVlUHRyIGNyZWF0ZShzaXplX3Qg
Y291bnQsIEFyZ3VtZW50cyYmLi4uIGFyZ3VtZW50cykKKyAgICB7CisgICAgICAgIFQqIHJlc3Vs
dCA9IHN0YXRpY19jYXN0PFQqPihHaWdhY2FnZTo6bWFsbG9jQXJyYXkoa2luZCwgY291bnQsIHNp
emVvZihUKSkpOworICAgICAgICB3aGlsZSAoY291bnQtLSkKKyAgICAgICAgICAgIG5ldyAocmVz
dWx0ICsgY291bnQpIFQoc3RkOjpmb3J3YXJkPEFyZ3VtZW50cz4oYXJndW1lbnRzKS4uLik7Cisg
ICAgICAgIHJldHVybiBDYWdlZFVuaXF1ZVB0cihyZXN1bHQsIGNvdW50KTsKKyAgICB9CisgICAg
CisgICAgQ2FnZWRVbmlxdWVQdHImIG9wZXJhdG9yPShDYWdlZFVuaXF1ZVB0ciYmIHB0cikKKyAg
ICB7CisgICAgICAgIGRlc3Ryb3koKTsKKyAgICAgICAgdGhpcy0+bV9wdHIgPSBwdHIubV9wdHI7
CisgICAgICAgIG1fY291bnQgPSBwdHIubV9jb3VudDsKKyAgICAgICAgcHRyLmNsZWFyKCk7Cisg
ICAgICAgIHJldHVybiAqdGhpczsKKyAgICB9CisgICAgCisgICAgQ2FnZWRVbmlxdWVQdHImIG9w
ZXJhdG9yPShjb25zdCBDYWdlZFVuaXF1ZVB0ciYpID0gZGVsZXRlOworICAgIAorICAgIH5DYWdl
ZFVuaXF1ZVB0cigpCisgICAgeworICAgICAgICBkZXN0cm95KCk7CisgICAgfQorICAgIAorICAg
IC8vIEZJWE1FOiBJdCdzIHdlaXJkIHRoYXQgd2UgaW5oZXJpdCBDYWdlZFB0cjo6b3BlcmF0b3I9
PSBhbmQgZnJpZW5kcywgd2hpY2ggZG9uJ3QgZG8gYW55dGhpbmcKKyAgICAvLyBhYm91dCBtX2Nv
dW50LiBJdCAid29ya3MiIGJlY2F1c2UgcG9pbnRlciBlcXVhbGl0eSBpcyBlbm91Z2ggc28gbG9u
ZyBhcyBldmVyeXRoaW5nIGlzIHNhbmUsIGJ1dAorICAgIC8vIGl0IHNlZW1zIGxpa2UgYSBtaXNz
ZWQgb3Bwb3J0dW5pdHkgdG8gYXNzZXJ0IHRoaW5ncy4KKyAgICAvLyBodHRwczovL2J1Z3Mud2Vi
a2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTc1NTQxCisgICAgCiBwcml2YXRlOgogICAgIHZvaWQg
ZGVzdHJveSgpCiAgICAgewotICAgICAgICBUKiBwdHIgPSBCYXNlOjpnZXRVbnNhZmUoKTsKLSAg
ICAgICAgaWYgKCFwdHIpCisgICAgICAgIGlmICghdGhpcy0+bV9wdHIpCiAgICAgICAgICAgICBy
ZXR1cm47Ci0gICAgICAgIHB0ci0+flQoKTsKLSAgICAgICAgR2lnYWNhZ2U6OmZyZWUoa2luZCwg
cHRyKTsKKyAgICAgICAgd2hpbGUgKG1fY291bnQtLSkKKyAgICAgICAgICAgIHRoaXMtPm1fcHRy
W21fY291bnRdLn5UKCk7CisgICAgICAgIEdpZ2FjYWdlOjpmcmVlKGtpbmQsIHRoaXMtPm1fcHRy
KTsKICAgICB9CisgICAgCisgICAgdm9pZCBjbGVhcigpCisgICAgeworICAgICAgICB0aGlzLT5t
X3B0ciA9IG51bGxwdHI7CisgICAgICAgIG1fY291bnQgPSAwOworICAgIH0KKyAgICAKKyAgICBz
aXplX3QgbV9jb3VudCB7IDAgfTsKIH07CiAKIH0gLy8gbmFtZXNwYWNlIFdURgpJbmRleDogU291
cmNlL1dURi93dGYvR2lnYWNhZ2UuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV1RGL3d0Zi9HaWdh
Y2FnZS5oCShyZXZpc2lvbiAyNDYyNzEpCisrKyBTb3VyY2UvV1RGL3d0Zi9HaWdhY2FnZS5oCSh3
b3JraW5nIGNvcHkpCkBAIC0xMTQsOCArMTE0LDYgQEAgQUxXQVlTX0lOTElORSBzaXplX3QgbWFz
ayhLaW5kKSB7IHJldHVybgogCiB0ZW1wbGF0ZTx0eXBlbmFtZSBUPgogaW5saW5lIFQqIGNhZ2Vk
KEtpbmQsIFQqIHB0cikgeyByZXR1cm4gcHRyOyB9Ci10ZW1wbGF0ZTx0eXBlbmFtZSBUPgotaW5s
aW5lIFQqIGNhZ2VkTWF5QmVOdWxsKEtpbmQsIFQqIHB0cikgeyByZXR1cm4gcHRyOyB9CiAKIGlu
bGluZSBib29sIGlzQ2FnZWQoS2luZCwgY29uc3Qgdm9pZCopIHsgcmV0dXJuIGZhbHNlOyB9CiAK
SW5kZXg6IFNvdXJjZS9XVEYvd3RmL1B0clRhZy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XVEYv
d3RmL1B0clRhZy5oCShyZXZpc2lvbiAyNDYyNzEpCisrKyBTb3VyY2UvV1RGL3d0Zi9QdHJUYWcu
aAkod29ya2luZyBjb3B5KQpAQCAtMTIyLDM4ICsxMjIsNiBAQCBjb25zdGV4cHIgYm9vbCBlbmFi
bGVQdHJUYWdEZWJ1Z0Fzc2VydCA9CiAgICAgfSB3aGlsZSAoZmFsc2UpCiAKIAotdGVtcGxhdGU8
dHlwZW5hbWUgVD4KLWlubGluZSBUKiB0YWdBcnJheVB0cihzdGQ6Om51bGxwdHJfdCBwdHIsIHNp
emVfdCBsZW5ndGgpCi17Ci0gICAgQVNTRVJUKCFsZW5ndGgpOwotICAgIHJldHVybiBwdHJhdXRo
X3NpZ25fdW5hdXRoZW50aWNhdGVkKHN0YXRpY19jYXN0PFQqPihwdHIpLCBwdHJhdXRoX2tleV9w
cm9jZXNzX2RlcGVuZGVudF9kYXRhLCBsZW5ndGgpOwotfQotCi0KLXRlbXBsYXRlPHR5cGVuYW1l
IFQ+Ci1pbmxpbmUgVCogdGFnQXJyYXlQdHIoVCogcHRyLCBzaXplX3QgbGVuZ3RoKQotewotICAg
IHJldHVybiBwdHJhdXRoX3NpZ25fdW5hdXRoZW50aWNhdGVkKHB0ciwgcHRyYXV0aF9rZXlfcHJv
Y2Vzc19kZXBlbmRlbnRfZGF0YSwgbGVuZ3RoKTsKLX0KLQotdGVtcGxhdGU8dHlwZW5hbWUgVD4K
LWlubGluZSBUKiB1bnRhZ0FycmF5UHRyKFQqIHB0ciwgc2l6ZV90IGxlbmd0aCkKLXsKLSAgICBy
ZXR1cm4gcHRyYXV0aF9hdXRoX2RhdGEocHRyLCBwdHJhdXRoX2tleV9wcm9jZXNzX2RlcGVuZGVu
dF9kYXRhLCBsZW5ndGgpOwotfQotCi10ZW1wbGF0ZTx0eXBlbmFtZSBUPgotaW5saW5lIFQqIHJl
bW92ZUFycmF5UHRyVGFnKFQqIHB0cikKLXsKLSAgICByZXR1cm4gcHRyYXV0aF9zdHJpcChwdHIs
IHB0cmF1dGhfa2V5X3Byb2Nlc3NfZGVwZW5kZW50X2RhdGEpOwotfQotCi10ZW1wbGF0ZTx0eXBl
bmFtZSBUPgotaW5saW5lIFQqIHJldGFnQXJyYXlQdHIoVCogcHRyLCBzaXplX3Qgb2xkTGVuZ3Ro
LCBzaXplX3QgbmV3TGVuZ3RoKQotewotICAgIHJldHVybiBwdHJhdXRoX2F1dGhfYW5kX3Jlc2ln
bihwdHIsIHB0cmF1dGhfa2V5X3Byb2Nlc3NfZGVwZW5kZW50X2RhdGEsIG9sZExlbmd0aCwgcHRy
YXV0aF9rZXlfcHJvY2Vzc19kZXBlbmRlbnRfZGF0YSwgbmV3TGVuZ3RoKTsKLX0KLQogdGVtcGxh
dGU8dHlwZW5hbWUgVCwgdHlwZW5hbWUgUHRyVHlwZSwgdHlwZW5hbWUgPSBzdGQ6OmVuYWJsZV9p
Zl90PHN0ZDo6aXNfcG9pbnRlcjxQdHJUeXBlPjo6dmFsdWUgJiYgIXN0ZDo6aXNfc2FtZTxULCBQ
dHJUeXBlPjo6dmFsdWU+PgogaW5saW5lIGNvbnN0ZXhwciBUIHJlbW92ZUNvZGVQdHJUYWcoUHRy
VHlwZSBwdHIpCiB7CkBAIC00MjcsMzggKzM5NSw2IEBAIGlubGluZSBib29sIHVzZXNQb2ludGVy
VGFnZ2luZygpIHsgcmV0dXIKIGlubGluZSB2b2lkIHJlZ2lzdGVyUHRyVGFnTG9va3VwKFB0clRh
Z0xvb2t1cCopIHsgfQogaW5saW5lIHZvaWQgcmVwb3J0QmFkVGFnKGNvbnN0IHZvaWQqLCBQdHJU
YWcpIHsgfQogCi10ZW1wbGF0ZTx0eXBlbmFtZSBUPgotaW5saW5lIFQqIHRhZ0FycmF5UHRyKHN0
ZDo6bnVsbHB0cl90LCBzaXplX3Qgc2l6ZSkKLXsKLSAgICBBU1NFUlRfVU5VU0VEKHNpemUsICFz
aXplKTsKLSAgICByZXR1cm4gbnVsbHB0cjsKLX0KLQotdGVtcGxhdGU8dHlwZW5hbWUgVD4KLWlu
bGluZSBUKiB0YWdBcnJheVB0cihUKiBwdHIsIHNpemVfdCkKLXsKLSAgICByZXR1cm4gcHRyOwot
fQotCi10ZW1wbGF0ZTx0eXBlbmFtZSBUPgotaW5saW5lIFQqIHVudGFnQXJyYXlQdHIoVCogcHRy
LCBzaXplX3QpCi17Ci0gICAgcmV0dXJuIHB0cjsKLX0KLQotdGVtcGxhdGU8dHlwZW5hbWUgVD4K
LWlubGluZSBUKiByZW1vdmVBcnJheVB0clRhZyhUKiBwdHIpCi17Ci0gICAgcmV0dXJuIHB0cjsK
LX0KLQotdGVtcGxhdGU8dHlwZW5hbWUgVD4KLWlubGluZSBUKiByZXRhZ0FycmF5UHRyKFQqIHB0
ciwgc2l6ZV90LCBzaXplX3QpCi17Ci0gICAgcmV0dXJuIHB0cjsKLX0KLQotCiB0ZW1wbGF0ZTx0
eXBlbmFtZSBULCB0eXBlbmFtZSBQdHJUeXBlLCB0eXBlbmFtZSA9IHN0ZDo6ZW5hYmxlX2lmX3Q8
c3RkOjppc19wb2ludGVyPFB0clR5cGU+Ojp2YWx1ZSAmJiAhc3RkOjppc19zYW1lPFQsIFB0clR5
cGU+Ojp2YWx1ZT4+CiBjb25zdGV4cHIgVCB0YWdDb2RlUHRyKFB0clR5cGUgcHRyLCBQdHJUYWcp
IHsgcmV0dXJuIGJpdHdpc2VfY2FzdDxUPihwdHIpOyB9CiAKQEAgLTU1OCwxMSArNDk0LDYgQEAg
dXNpbmcgV1RGOjpQdHJUYWc7CiAKIHVzaW5nIFdURjo6cmVwb3J0QmFkVGFnOwogCi11c2luZyBX
VEY6OnRhZ0FycmF5UHRyOwotdXNpbmcgV1RGOjp1bnRhZ0FycmF5UHRyOwotdXNpbmcgV1RGOjpy
ZXRhZ0FycmF5UHRyOwotdXNpbmcgV1RGOjpyZW1vdmVBcnJheVB0clRhZzsKLQogdXNpbmcgV1RG
Ojp0YWdDb2RlUHRyOwogdXNpbmcgV1RGOjp1bnRhZ0NvZGVQdHI7CiB1c2luZyBXVEY6OnJldGFn
Q29kZVB0cjsKSW5kZXg6IFNvdXJjZS9XVEYvd3RmL1RhZ2dlZEFycmF5U3RvcmFnZVB0ci5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9XVEYvd3RmL1RhZ2dlZEFycmF5U3RvcmFnZVB0ci5oCShyZXZp
c2lvbiAyNDYyNzEpCisrKyBTb3VyY2UvV1RGL3d0Zi9UYWdnZWRBcnJheVN0b3JhZ2VQdHIuaAko
d29ya2luZyBjb3B5KQpAQCAtMSw1OSArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDE5
IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBh
bmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1v
ZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29u
ZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29k
ZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRp
c3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHly
aWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIg
bWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNP
RlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKLSAqIEVY
UFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywgVEhFCi0gKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRO
RVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBF
VkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCi0gKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBB
TlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKLSAqIEVYRU1QTEFSWSwg
T1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywK
LSAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0Yg
VVNFLCBEQVRBLCBPUgotICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dF
VkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQotICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElO
IENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJ
R0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLSAq
IE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0Yg
U1VDSCBEQU1BR0UuCi0gKi8KLQotI3ByYWdtYSBvbmNlCi0KLSNpbmNsdWRlIDx3dGYvUHRyVGFn
Lmg+Ci0KLW5hbWVzcGFjZSBXVEYgewotCi10ZW1wbGF0ZTx0eXBlbmFtZSBQdHJUeXBlPgotY2xh
c3MgVGFnZ2VkQXJyYXlTdG9yYWdlUHRyIHsKLXB1YmxpYzoKLSAgICBUYWdnZWRBcnJheVN0b3Jh
Z2VQdHIoKQotICAgICAgICA6IG1fcHRyKHRhZ0FycmF5UHRyPFB0clR5cGU+KG51bGxwdHIsIDAp
KQotICAgIHsgfQotCi0gICAgVGFnZ2VkQXJyYXlTdG9yYWdlUHRyKFB0clR5cGUqIHB0ciwgdW5z
aWduZWQgbGVuZ3RoKQotICAgICAgICA6IG1fcHRyKHRhZ0FycmF5UHRyKHB0ciwgbGVuZ3RoKSkK
LSAgICB7IH0KLQotICAgIFB0clR5cGUqIGdldCh1bnNpZ25lZCBsZW5ndGgpIGNvbnN0IHsgcmV0
dXJuIHVudGFnQXJyYXlQdHIobV9wdHIsIGxlbmd0aCk7IH0gCi0gICAgUHRyVHlwZSogZ2V0VW5z
YWZlKCkgY29uc3QgeyByZXR1cm4gcmVtb3ZlQXJyYXlQdHJUYWcobV9wdHIpOyB9Ci0KLSAgICB2
b2lkIHJlc2l6ZSh1bnNpZ25lZCBvbGRMZW5ndGgsIHVuc2lnbmVkIG5ld0xlbmd0aCkKLSAgICB7
Ci0gICAgICAgIG1fcHRyID0gcmV0YWdBcnJheVB0cihtX3B0ciwgb2xkTGVuZ3RoLCBuZXdMZW5n
dGgpOwotICAgIH0KLSAgICAKLSAgICBleHBsaWNpdCBvcGVyYXRvciBib29sKCkgY29uc3QgeyBy
ZXR1cm4gISFnZXRVbnNhZmUoKTsgfQotCi1wcml2YXRlOgotICAgIFB0clR5cGUqIG1fcHRyOwot
fTsKLQotfQotCi11c2luZyBXVEY6OlRhZ2dlZEFycmF5U3RvcmFnZVB0cjsKSW5kZXg6IFNvdXJj
ZS9ibWFsbG9jL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvYm1hbGxvYy9DaGFuZ2VM
b2cJKHJldmlzaW9uIDI0NjI4OCkKKysrIFNvdXJjZS9ibWFsbG9jL0NoYW5nZUxvZwkod29ya2lu
ZyBjb3B5KQpAQCAtMSwzICsxLDE1IEBACisyMDE5LTA2LTEwICBTYWFtIEJhcmF0aSAgPHNiYXJh
dGlAYXBwbGUuY29tPgorCisgICAgICAgIFJvbGwgb3V0IFBBQyBjYWdlCisgICAgICAgIGh0dHBz
Oi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xOTg3MjYKKworICAgICAgICBSZXZp
ZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICAqIGJtYWxsb2MvR2lnYWNhZ2UuaDoK
KyAgICAgICAgKEdpZ2FjYWdlOjppc0VuYWJsZWQpOgorICAgICAgICAoR2lnYWNhZ2U6OmNhZ2Vk
KToKKyAgICAgICAgKEdpZ2FjYWdlOjpjYWdlZE1heUJlTnVsbCk6IERlbGV0ZWQuCisKIDIwMTkt
MDYtMDkgIENvbW1pdCBRdWV1ZSAgPGNvbW1pdC1xdWV1ZUB3ZWJraXQub3JnPgogCiAgICAgICAg
IFVucmV2aWV3ZWQsIHJvbGxpbmcgb3V0IHIyNDYxNTAsIHIyNDYxNjAsIGFuZCByMjQ2MTY2LgpJ
bmRleDogU291cmNlL2JtYWxsb2MvYm1hbGxvYy9HaWdhY2FnZS5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9ibWFsbG9jL2JtYWxsb2MvR2lnYWNhZ2UuaAkocmV2aXNpb24gMjQ2MjcxKQorKysgU291
cmNlL2JtYWxsb2MvYm1hbGxvYy9HaWdhY2FnZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0zNCw3ICsz
NCw4IEBACiAjaW5jbHVkZSA8Y3N0ZGRlZj4KICNpbmNsdWRlIDxpbnR0eXBlcy5oPgogCi0jaWYg
KChCT1MoREFSV0lOKSB8fCBCT1MoTElOVVgpKSAmJiBCQ1BVKFg4Nl82NCkpCisjaWYgKChCT1Mo
REFSV0lOKSB8fCBCT1MoTElOVVgpKSAmJiBcCisoQkNQVShYODZfNjQpIHx8IChCQ1BVKEFSTTY0
KSAmJiAhZGVmaW5lZChfX0lMUDMyX18pICYmICghQlBMQVRGT1JNKElPU19GQU1JTFkpIHx8IEJQ
TEFURk9STShJT1MpKSkpKQogI2RlZmluZSBHSUdBQ0FHRV9FTkFCTEVEIDEKICNlbHNlCiAjZGVm
aW5lIEdJR0FDQUdFX0VOQUJMRUQgMApAQCAtMTk5LDE0ICsyMDAsNiBAQCBCSU5MSU5FIFQqIGNh
Z2VkKEtpbmQga2luZCwgVCogcHRyKQogICAgICAgICAgICAgcmVpbnRlcnByZXRfY2FzdDx1aW50
cHRyX3Q+KHB0cikgJiBtYXNrKGtpbmQpKSk7CiB9CiAKLXRlbXBsYXRlPHR5cGVuYW1lIFQ+Ci1C
SU5MSU5FIFQqIGNhZ2VkTWF5QmVOdWxsKEtpbmQga2luZCwgVCogcHRyKQotewotICAgIGlmICgh
cHRyKQotICAgICAgICByZXR1cm4gcHRyOwotICAgIHJldHVybiBjYWdlZChraW5kLCBwdHIpOwot
fQotCiBCSU5MSU5FIGJvb2wgaXNDYWdlZChLaW5kIGtpbmQsIGNvbnN0IHZvaWQqIHB0cikKIHsK
ICAgICByZXR1cm4gY2FnZWQoa2luZCwgcHRyKSA9PSBwdHI7CkBAIC0yMjYsOSArMjE5LDggQEAg
QklOTElORSBzaXplX3Qgc2l6ZShLaW5kKSB7IEJDUkFTSCgpOyByZQogQklOTElORSB2b2lkIGVu
c3VyZUdpZ2FjYWdlKCkgeyB9CiBCSU5MSU5FIGJvb2wgd2FzRW5hYmxlZCgpIHsgcmV0dXJuIGZh
bHNlOyB9CiBCSU5MSU5FIGJvb2wgaXNDYWdlZChLaW5kLCBjb25zdCB2b2lkKikgeyByZXR1cm4g
dHJ1ZTsgfQotQklOTElORSBib29sIGlzRW5hYmxlZChLaW5kKSB7IHJldHVybiBmYWxzZTsgfQor
QklOTElORSBib29sIGlzRW5hYmxlZCgpIHsgcmV0dXJuIGZhbHNlOyB9CiB0ZW1wbGF0ZTx0eXBl
bmFtZSBUPiBCSU5MSU5FIFQqIGNhZ2VkKEtpbmQsIFQqIHB0cikgeyByZXR1cm4gcHRyOyB9Ci10
ZW1wbGF0ZTx0eXBlbmFtZSBUPiBCSU5MSU5FIFQqIGNhZ2VkTWF5QmVOdWxsKEtpbmQsIFQqIHB0
cikgeyByZXR1cm4gcHRyOyB9CiBCSU5MSU5FIHZvaWQgZGlzYWJsZURpc2FibGluZ1ByaW1pdGl2
ZUdpZ2FjYWdlSWZTaG91bGRCZUVuYWJsZWQoKSB7IH0KIEJJTkxJTkUgYm9vbCBjYW5QcmltaXRp
dmVHaWdhY2FnZUJlRGlzYWJsZWQoKSB7IHJldHVybiBmYWxzZTsgfQogQklOTElORSB2b2lkIGRp
c2FibGVQcmltaXRpdmVHaWdhY2FnZSgpIHsgfQo=
</data>
<flag name="review"
          id="387605"
          type_id="1"
          status="+"
          setter="keith_miller"
    />
          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>371848</attachid>
            <date>2019-06-11 08:53:21 -0700</date>
            <delta_ts>2019-06-11 10:18:54 -0700</delta_ts>
            <desc>patch for landing</desc>
            <filename>patch.diff</filename>
            <type>text/plain</type>
            <size>124282</size>
            <attacher name="Saam Barati">saam</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMjQ2MjcxKQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDE3NyBA
QAorMjAxOS0wNi0xMCAgU2FhbSBCYXJhdGkgIDxzYmFyYXRpQGFwcGxlLmNvbT4KKworICAgICAg
ICBSb2xsIG91dCBQQUMgY2FnZQorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93
X2J1Zy5jZ2k/aWQ9MTk4NzI2CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgS2VpdGggTWlsbGVyLgor
CisgICAgICAgIFRoaXMgcGF0Y2ggcm9sbHMgb3V0OiByMjQ1MDY0LCByMjQ1MTQ1LCByMjQ1MTY4
LCByMjQ1MzEzLCByMjQ1NDMyLCByMjQ1NjIyLgorICAgICAgICAKKyAgICAgICAgVGhlIHJlc3Vs
dGluZyBzdGF0ZSB3ZSdyZSBpbiBpcyB3ZSBoYXZlIEdpZ2FjYWdlIGVuYWJsZWQgb24gYXJtNjQu
CisgICAgICAgIFRoZXJlIGlzIG5vIG1vcmUgUEFDIGNhZ2luZy4KKworICAgICAgICBXZSdyZSBk
b2luZyB0aGlzIGJlY2F1c2UgdGhlcmUgYXJlIHBlcmZvcm1hbmNlIGlzc3VlcyB3aXRoIFBBQyBj
YWdpbmcKKyAgICAgICAgdGhhdCB3ZSBoYXZlbid0IHJlc29sdmVkIHlldC4KKworICAgICAgICAq
IGFzc2VtYmxlci9DUFUuaDoKKyAgICAgICAgKEpTQzo6aXNBUk02NEUpOiBEZWxldGVkLgorICAg
ICAgICAqIGFzc2VtYmxlci9NYWNyb0Fzc2VtYmxlckFSTTY0RS5oOgorICAgICAgICAoSlNDOjpN
YWNyb0Fzc2VtYmxlckFSTTY0RTo6dGFnQXJyYXlQdHIpOiBEZWxldGVkLgorICAgICAgICAoSlND
OjpNYWNyb0Fzc2VtYmxlckFSTTY0RTo6dW50YWdBcnJheVB0cik6IERlbGV0ZWQuCisgICAgICAg
IChKU0M6Ok1hY3JvQXNzZW1ibGVyQVJNNjRFOjpyZW1vdmVBcnJheVB0clRhZyk6IERlbGV0ZWQu
CisgICAgICAgICogYjMvQjNMb3dlclRvQWlyLmNwcDoKKyAgICAgICAgKiBiMy9CM1BhdGNocG9p
bnRTcGVjaWFsLmNwcDoKKyAgICAgICAgKEpTQzo6QjM6OlBhdGNocG9pbnRTcGVjaWFsOjphZG1p
dHNTdGFjayk6CisgICAgICAgICogYjMvQjNTdGFja21hcFNwZWNpYWwuY3BwOgorICAgICAgICAo
SlNDOjpCMzo6U3RhY2ttYXBTcGVjaWFsOjpmb3JFYWNoQXJnSW1wbCk6CisgICAgICAgIChKU0M6
OkIzOjpTdGFja21hcFNwZWNpYWw6OmlzQXJnVmFsaWRGb3JSZXApOgorICAgICAgICAqIGIzL0Iz
VmFsaWRhdGUuY3BwOgorICAgICAgICAqIGIzL0IzVmFsdWVSZXAuY3BwOgorICAgICAgICAoSlND
OjpCMzo6VmFsdWVSZXA6OmFkZFVzZWRSZWdpc3RlcnNUbyBjb25zdCk6CisgICAgICAgIChKU0M6
OkIzOjpWYWx1ZVJlcDo6ZHVtcCBjb25zdCk6CisgICAgICAgIChXVEY6OnByaW50SW50ZXJuYWwp
OgorICAgICAgICAqIGIzL0IzVmFsdWVSZXAuaDoKKyAgICAgICAgKEpTQzo6QjM6OlZhbHVlUmVw
OjpWYWx1ZVJlcCk6CisgICAgICAgIChKU0M6OkIzOjpWYWx1ZVJlcDo6aXNSZWcgY29uc3QpOgor
ICAgICAgICAqIGRmZy9ERkdPcGVyYXRpb25zLmNwcDoKKyAgICAgICAgKEpTQzo6REZHOjpuZXdU
eXBlZEFycmF5V2l0aFNpemUpOgorICAgICAgICAqIGRmZy9ERkdTcGVjdWxhdGl2ZUpJVC5jcHA6
CisgICAgICAgIChKU0M6OkRGRzo6U3BlY3VsYXRpdmVKSVQ6Omp1bXBGb3JUeXBlZEFycmF5SXNO
ZXV0ZXJlZElmT3V0T2ZCb3VuZHMpOgorICAgICAgICAoSlNDOjpERkc6OlNwZWN1bGF0aXZlSklU
OjpjYWdlVHlwZWRBcnJheVN0b3JhZ2UpOgorICAgICAgICAoSlNDOjpERkc6OlNwZWN1bGF0aXZl
SklUOjpjb21waWxlR2V0SW5kZXhlZFByb3BlcnR5U3RvcmFnZSk6CisgICAgICAgIChKU0M6OkRG
Rzo6U3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVHZXRUeXBlZEFycmF5Qnl0ZU9mZnNldCk6CisgICAg
ICAgIChKU0M6OkRGRzo6U3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVOZXdUeXBlZEFycmF5V2l0aFNp
emUpOgorICAgICAgICAqIGRmZy9ERkdTcGVjdWxhdGl2ZUpJVC5oOgorICAgICAgICAqIGRmZy9E
RkdTcGVjdWxhdGl2ZUpJVDY0LmNwcDoKKyAgICAgICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJ
VDo6Y29tcGlsZSk6CisgICAgICAgICogZnRsL0ZUTExvd2VyREZHVG9CMy5jcHA6CisgICAgICAg
IChKU0M6OkZUTDo6REZHOjpMb3dlckRGR1RvQjM6OmNvbXBpbGVHZXRJbmRleGVkUHJvcGVydHlT
dG9yYWdlKToKKyAgICAgICAgKEpTQzo6RlRMOjpERkc6Okxvd2VyREZHVG9CMzo6Y29tcGlsZUdl
dFR5cGVkQXJyYXlCeXRlT2Zmc2V0KToKKyAgICAgICAgKEpTQzo6RlRMOjpERkc6Okxvd2VyREZH
VG9CMzo6Y29tcGlsZU5ld1R5cGVkQXJyYXkpOgorICAgICAgICAoSlNDOjpGVEw6OkRGRzo6TG93
ZXJERkdUb0IzOjpjb21waWxlRGF0YVZpZXdHZXQpOgorICAgICAgICAoSlNDOjpGVEw6OkRGRzo6
TG93ZXJERkdUb0IzOjpjb21waWxlRGF0YVZpZXdTZXQpOgorICAgICAgICAoSlNDOjpGVEw6OkRG
Rzo6TG93ZXJERkdUb0IzOjpjYWdlZCk6CisgICAgICAgIChKU0M6OkZUTDo6REZHOjpMb3dlckRG
R1RvQjM6OnNwZWN1bGF0ZVR5cGVkQXJyYXlJc05vdE5ldXRlcmVkKToKKyAgICAgICAgKEpTQzo6
RlRMOjpERkc6Okxvd2VyREZHVG9CMzo6dW50YWdBcnJheVB0cik6IERlbGV0ZWQuCisgICAgICAg
IChKU0M6OkZUTDo6REZHOjpMb3dlckRGR1RvQjM6OnJlbW92ZUFycmF5UHRyVGFnKTogRGVsZXRl
ZC4KKyAgICAgICAgKiBoZWFwL0NvbnNlcnZhdGl2ZVJvb3RzLmNwcDoKKyAgICAgICAgKEpTQzo6
Q29uc2VydmF0aXZlUm9vdHM6OmdlbmVyaWNBZGRQb2ludGVyKToKKyAgICAgICAgKiBqaXQvQXNz
ZW1ibHlIZWxwZXJzLmg6CisgICAgICAgIChKU0M6OkFzc2VtYmx5SGVscGVyczo6Y2FnZUNvbmRp
dGlvbmFsbHkpOgorICAgICAgICAqIGppdC9JbnRyaW5zaWNFbWl0dGVyLmNwcDoKKyAgICAgICAg
KEpTQzo6SW50cmluc2ljR2V0dGVyQWNjZXNzQ2FzZTo6ZW1pdEludHJpbnNpY0dldHRlcik6Cisg
ICAgICAgICogaml0L0pJVFByb3BlcnR5QWNjZXNzLmNwcDoKKyAgICAgICAgKEpTQzo6SklUOjpl
bWl0RGlyZWN0QXJndW1lbnRzR2V0QnlWYWwpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRJbnRU
eXBlZEFycmF5R2V0QnlWYWwpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRGbG9hdFR5cGVkQXJy
YXlHZXRCeVZhbCk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdEludFR5cGVkQXJyYXlQdXRCeVZh
bCk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdEZsb2F0VHlwZWRBcnJheVB1dEJ5VmFsKToKKyAg
ICAgICAgKiBqaXQvUG9seW1vcnBoaWNDYWxsU3R1YlJvdXRpbmUuY3BwOgorICAgICAgICAoSlND
OjpQb2x5bW9ycGhpY0NhbGxOb2RlOjpjbGVhckNhbGxMaW5rSW5mbyk6CisgICAgICAgICogaml0
L1JlZ2lzdGVyU2V0Lmg6CisgICAgICAgICogbGxpbnQvTG93TGV2ZWxJbnRlcnByZXRlcjY0LmFz
bToKKyAgICAgICAgKiBydW50aW1lL0FycmF5QnVmZmVyLmNwcDoKKyAgICAgICAgKEpTQzo6U2hh
cmVkQXJyYXlCdWZmZXJDb250ZW50czo6U2hhcmVkQXJyYXlCdWZmZXJDb250ZW50cyk6CisgICAg
ICAgIChKU0M6OlNoYXJlZEFycmF5QnVmZmVyQ29udGVudHM6On5TaGFyZWRBcnJheUJ1ZmZlckNv
bnRlbnRzKToKKyAgICAgICAgKEpTQzo6QXJyYXlCdWZmZXJDb250ZW50czo6QXJyYXlCdWZmZXJD
b250ZW50cyk6CisgICAgICAgIChKU0M6OkFycmF5QnVmZmVyQ29udGVudHM6OmRlc3Ryb3kpOgor
ICAgICAgICAoSlNDOjpBcnJheUJ1ZmZlckNvbnRlbnRzOjp0cnlBbGxvY2F0ZSk6CisgICAgICAg
IChKU0M6OkFycmF5QnVmZmVyQ29udGVudHM6Om1ha2VTaGFyZWQpOgorICAgICAgICAoSlNDOjpB
cnJheUJ1ZmZlckNvbnRlbnRzOjpjb3B5VG8pOgorICAgICAgICAqIHJ1bnRpbWUvQXJyYXlCdWZm
ZXIuaDoKKyAgICAgICAgKEpTQzo6U2hhcmVkQXJyYXlCdWZmZXJDb250ZW50czo6ZGF0YSBjb25z
dCk6CisgICAgICAgIChKU0M6OkFycmF5QnVmZmVyQ29udGVudHM6OmRhdGEgY29uc3QpOgorICAg
ICAgICAoSlNDOjpBcnJheUJ1ZmZlcjo6ZGF0YSk6CisgICAgICAgIChKU0M6OkFycmF5QnVmZmVy
OjpkYXRhIGNvbnN0KToKKyAgICAgICAgKEpTQzo6QXJyYXlCdWZmZXI6OmJ5dGVMZW5ndGggY29u
c3QpOgorICAgICAgICAqIHJ1bnRpbWUvQXJyYXlCdWZmZXJWaWV3LmNwcDoKKyAgICAgICAgKEpT
Qzo6QXJyYXlCdWZmZXJWaWV3OjpBcnJheUJ1ZmZlclZpZXcpOgorICAgICAgICAqIHJ1bnRpbWUv
QXJyYXlCdWZmZXJWaWV3Lmg6CisgICAgICAgIChKU0M6OkFycmF5QnVmZmVyVmlldzo6YmFzZUFk
ZHJlc3MgY29uc3QpOgorICAgICAgICAoSlNDOjpBcnJheUJ1ZmZlclZpZXc6OnNldFJhbmdlSW1w
bCk6CisgICAgICAgIChKU0M6OkFycmF5QnVmZmVyVmlldzo6Z2V0UmFuZ2VJbXBsKToKKyAgICAg
ICAgKEpTQzo6QXJyYXlCdWZmZXJWaWV3OjpieXRlTGVuZ3RoIGNvbnN0KTogRGVsZXRlZC4KKyAg
ICAgICAgKiBydW50aW1lL0NhY2hlZFR5cGVzLmNwcDoKKyAgICAgICAgKEpTQzo6Q2FjaGVkU2Nv
cGVkQXJndW1lbnRzVGFibGU6OmVuY29kZSk6CisgICAgICAgIChKU0M6OkNhY2hlZFNjb3BlZEFy
Z3VtZW50c1RhYmxlOjpkZWNvZGUgY29uc3QpOgorICAgICAgICAqIHJ1bnRpbWUvQ2FnZWRCYXJy
aWVyUHRyLmg6CisgICAgICAgIChKU0M6OkNhZ2VkQmFycmllclB0cjo6Q2FnZWRCYXJyaWVyUHRy
KToKKyAgICAgICAgKEpTQzo6Q2FnZWRCYXJyaWVyUHRyOjpzZXQpOgorICAgICAgICAoSlNDOjpD
YWdlZEJhcnJpZXJQdHI6OmdldCBjb25zdCk6CisgICAgICAgIChKU0M6OkNhZ2VkQmFycmllclB0
cjo6Z2V0TWF5QmVOdWxsIGNvbnN0KToKKyAgICAgICAgKEpTQzo6Q2FnZWRCYXJyaWVyUHRyOjpv
cGVyYXRvcj09IGNvbnN0KToKKyAgICAgICAgKEpTQzo6Q2FnZWRCYXJyaWVyUHRyOjpvcGVyYXRv
ciE9IGNvbnN0KToKKyAgICAgICAgKEpTQzo6Q2FnZWRCYXJyaWVyUHRyOjpvcGVyYXRvciBib29s
IGNvbnN0KToKKyAgICAgICAgKEpTQzo6Q2FnZWRCYXJyaWVyUHRyOjpzZXRXaXRob3V0QmFycmll
cik6CisgICAgICAgIChKU0M6OkNhZ2VkQmFycmllclB0cjo6b3BlcmF0b3IqIGNvbnN0KToKKyAg
ICAgICAgKEpTQzo6Q2FnZWRCYXJyaWVyUHRyOjpvcGVyYXRvci0+IGNvbnN0KToKKyAgICAgICAg
KEpTQzo6Q2FnZWRCYXJyaWVyUHRyOjpvcGVyYXRvcltdIGNvbnN0KToKKyAgICAgICAgKEpTQzo6
Q2FnZWRCYXJyaWVyUHRyOjpnZXRVbnNhZmUgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAoSlND
OjpDYWdlZEJhcnJpZXJQdHI6OmF0IGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKiBydW50aW1l
L0RhdGFWaWV3LmNwcDoKKyAgICAgICAgKEpTQzo6RGF0YVZpZXc6OkRhdGFWaWV3KToKKyAgICAg
ICAgKiBydW50aW1lL0RhdGFWaWV3Lmg6CisgICAgICAgIChKU0M6OkRhdGFWaWV3OjpnZXQpOgor
ICAgICAgICAoSlNDOjpEYXRhVmlldzo6c2V0KToKKyAgICAgICAgKiBydW50aW1lL0RpcmVjdEFy
Z3VtZW50cy5jcHA6CisgICAgICAgIChKU0M6OkRpcmVjdEFyZ3VtZW50czo6dmlzaXRDaGlsZHJl
bik6CisgICAgICAgIChKU0M6OkRpcmVjdEFyZ3VtZW50czo6b3ZlcnJpZGVUaGluZ3MpOgorICAg
ICAgICAoSlNDOjpEaXJlY3RBcmd1bWVudHM6OnVubWFwQXJndW1lbnQpOgorICAgICAgICAqIHJ1
bnRpbWUvRGlyZWN0QXJndW1lbnRzLmg6CisgICAgICAgICogcnVudGltZS9HZW5lcmljQXJndW1l
bnRzLmg6CisgICAgICAgICogcnVudGltZS9HZW5lcmljQXJndW1lbnRzSW5saW5lcy5oOgorICAg
ICAgICAoSlNDOjpHZW5lcmljQXJndW1lbnRzPFR5cGU+Ojp2aXNpdENoaWxkcmVuKToKKyAgICAg
ICAgKEpTQzo6R2VuZXJpY0FyZ3VtZW50czxUeXBlPjo6aW5pdE1vZGlmaWVkQXJndW1lbnRzRGVz
Y3JpcHRvcik6CisgICAgICAgIChKU0M6OkdlbmVyaWNBcmd1bWVudHM8VHlwZT46OnNldE1vZGlm
aWVkQXJndW1lbnREZXNjcmlwdG9yKToKKyAgICAgICAgKEpTQzo6R2VuZXJpY0FyZ3VtZW50czxU
eXBlPjo6aXNNb2RpZmllZEFyZ3VtZW50RGVzY3JpcHRvcik6CisgICAgICAgICogcnVudGltZS9H
ZW5lcmljVHlwZWRBcnJheVZpZXcuaDoKKyAgICAgICAgKiBydW50aW1lL0dlbmVyaWNUeXBlZEFy
cmF5Vmlld0lubGluZXMuaDoKKyAgICAgICAgKEpTQzo6R2VuZXJpY1R5cGVkQXJyYXlWaWV3PEFk
YXB0b3I+OjpHZW5lcmljVHlwZWRBcnJheVZpZXcpOgorICAgICAgICAqIHJ1bnRpbWUvSlNBcnJh
eUJ1ZmZlclZpZXcuY3BwOgorICAgICAgICAoSlNDOjpKU0FycmF5QnVmZmVyVmlldzo6Q29uc3Ry
dWN0aW9uQ29udGV4dDo6Q29uc3RydWN0aW9uQ29udGV4dCk6CisgICAgICAgIChKU0M6OkpTQXJy
YXlCdWZmZXJWaWV3OjpKU0FycmF5QnVmZmVyVmlldyk6CisgICAgICAgIChKU0M6OkpTQXJyYXlC
dWZmZXJWaWV3OjpmaW5hbGl6ZSk6CisgICAgICAgIChKU0M6OkpTQXJyYXlCdWZmZXJWaWV3Ojpz
bG93RG93bkFuZFdhc3RlTWVtb3J5KToKKyAgICAgICAgKiBydW50aW1lL0pTQXJyYXlCdWZmZXJW
aWV3Lmg6CisgICAgICAgIChKU0M6OkpTQXJyYXlCdWZmZXJWaWV3OjpDb25zdHJ1Y3Rpb25Db250
ZXh0Ojp2ZWN0b3IgY29uc3QpOgorICAgICAgICAoSlNDOjpKU0FycmF5QnVmZmVyVmlldzo6aXNO
ZXV0ZXJlZCk6CisgICAgICAgIChKU0M6OkpTQXJyYXlCdWZmZXJWaWV3Ojp2ZWN0b3IgY29uc3Qp
OgorICAgICAgICAoSlNDOjpKU0FycmF5QnVmZmVyVmlldzo6aGFzVmVjdG9yIGNvbnN0KTogRGVs
ZXRlZC4KKyAgICAgICAgKiBydW50aW1lL0pTR2VuZXJpY1R5cGVkQXJyYXlWaWV3SW5saW5lcy5o
OgorICAgICAgICAoSlNDOjpKU0dlbmVyaWNUeXBlZEFycmF5VmlldzxBZGFwdG9yPjo6Y3JlYXRl
VW5pbml0aWFsaXplZCk6CisgICAgICAgIChKU0M6OkpTR2VuZXJpY1R5cGVkQXJyYXlWaWV3PEFk
YXB0b3I+Ojplc3RpbWF0ZWRTaXplKToKKyAgICAgICAgKEpTQzo6SlNHZW5lcmljVHlwZWRBcnJh
eVZpZXc8QWRhcHRvcj46OnZpc2l0Q2hpbGRyZW4pOgorICAgICAgICAqIHJ1bnRpbWUvT3B0aW9u
cy5oOgorICAgICAgICAqIHJ1bnRpbWUvU2NvcGVkQXJndW1lbnRzVGFibGUuY3BwOgorICAgICAg
ICAoSlNDOjpTY29wZWRBcmd1bWVudHNUYWJsZTo6Y2xvbmUpOgorICAgICAgICAoSlNDOjpTY29w
ZWRBcmd1bWVudHNUYWJsZTo6c2V0TGVuZ3RoKToKKyAgICAgICAgKiBydW50aW1lL1Njb3BlZEFy
Z3VtZW50c1RhYmxlLmg6CisgICAgICAgICogcnVudGltZS9TeW1ib2xUYWJsZS5oOgorICAgICAg
ICAqIHdhc20vV2FzbUFpcklSR2VuZXJhdG9yLmNwcDoKKyAgICAgICAgKEpTQzo6V2FzbTo6QWly
SVJHZW5lcmF0b3I6OnJlc3RvcmVXZWJBc3NlbWJseUdsb2JhbFN0YXRlKToKKyAgICAgICAgKEpT
Qzo6V2FzbTo6QWlySVJHZW5lcmF0b3I6OmFkZENhbGxJbmRpcmVjdCk6CisgICAgICAgICogd2Fz
bS9XYXNtQjNJUkdlbmVyYXRvci5jcHA6CisgICAgICAgIChKU0M6Oldhc206OkIzSVJHZW5lcmF0
b3I6OnJlc3RvcmVXZWJBc3NlbWJseUdsb2JhbFN0YXRlKToKKyAgICAgICAgKEpTQzo6V2FzbTo6
QjNJUkdlbmVyYXRvcjo6YWRkQ2FsbEluZGlyZWN0KToKKyAgICAgICAgKiB3YXNtL1dhc21CQlFQ
bGFuLmNwcDoKKyAgICAgICAgKEpTQzo6V2FzbTo6QkJRUGxhbjo6Y29tcGxldGUpOgorICAgICAg
ICAqIHdhc20vV2FzbUJpbmRpbmcuY3BwOgorICAgICAgICAoSlNDOjpXYXNtOjp3YXNtVG9XYXNt
KToKKyAgICAgICAgKiB3YXNtL1dhc21JbnN0YW5jZS5oOgorICAgICAgICAoSlNDOjpXYXNtOjpJ
bnN0YW5jZTo6Y2FjaGVkTWVtb3J5IGNvbnN0KToKKyAgICAgICAgKEpTQzo6V2FzbTo6SW5zdGFu
Y2U6OnVwZGF0ZUNhY2hlZE1lbW9yeSk6CisgICAgICAgICogd2FzbS9XYXNtTWVtb3J5LmNwcDoK
KyAgICAgICAgKEpTQzo6V2FzbTo6TWVtb3J5OjpNZW1vcnkpOgorICAgICAgICAoSlNDOjpXYXNt
OjpNZW1vcnk6On5NZW1vcnkpOgorICAgICAgICAoSlNDOjpXYXNtOjpNZW1vcnk6Omdyb3cpOgor
ICAgICAgICAoSlNDOjpXYXNtOjpNZW1vcnk6OmR1bXAgY29uc3QpOgorICAgICAgICAqIHdhc20v
V2FzbU1lbW9yeS5oOgorICAgICAgICAoSlNDOjpXYXNtOjpNZW1vcnk6Om1lbW9yeSBjb25zdCk6
CisgICAgICAgICogd2FzbS9qcy9KU1RvV2FzbS5jcHA6CisgICAgICAgIChKU0M6Oldhc206OmNy
ZWF0ZUpTVG9XYXNtV3JhcHBlcik6CisgICAgICAgICogd2FzbS9qcy9XZWJBc3NlbWJseUZ1bmN0
aW9uLmNwcDoKKyAgICAgICAgKEpTQzo6V2ViQXNzZW1ibHlGdW5jdGlvbjo6anNDYWxsRW50cnlw
b2ludFNsb3cpOgorCiAyMDE5LTA2LTEwICBUaW1vdGh5IEhhdGNoZXIgIDx0aW1vdGh5QGFwcGxl
LmNvbT4KIAogICAgICAgICBJbnRlZ3JhdGUgZGFyayBtb2RlIHN1cHBvcnQgZm9yIGlPUy4KSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9hc3NlbWJsZXIvQ1BVLmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL2Fzc2VtYmxlci9DUFUuaAkocmV2aXNpb24gMjQ2MjcxKQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL2Fzc2VtYmxlci9DUFUuaAkod29ya2luZyBjb3B5KQpA
QCAtNTYsMTUgKzU2LDYgQEAgY29uc3RleHByIGJvb2wgaXNBUk02NCgpCiAjZW5kaWYKIH0KIAot
Y29uc3RleHByIGJvb2wgaXNBUk02NEUoKQotewotI2lmIENQVShBUk02NEUpCi0gICAgcmV0dXJu
IHRydWU7Ci0jZWxzZQotICAgIHJldHVybiBmYWxzZTsKLSNlbmRpZgotfQotCiBjb25zdGV4cHIg
Ym9vbCBpc1g4NigpCiB7CiAjaWYgQ1BVKFg4Nl82NCkgfHwgQ1BVKFg4NikKSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9hc3NlbWJsZXIvTWFjcm9Bc3NlbWJsZXJBUk02NEUuaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYXNzZW1ibGVyL01hY3JvQXNzZW1ibGVyQVJN
NjRFLmgJKHJldmlzaW9uIDI0NjI3MSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9hc3NlbWJs
ZXIvTWFjcm9Bc3NlbWJsZXJBUk02NEUuaAkod29ya2luZyBjb3B5KQpAQCAtODIsMjggKzgyLDYg
QEAgcHVibGljOgogICAgICAgICBtX2Fzc2VtYmxlci54cGFjaSh0YXJnZXQpOwogICAgIH0KIAot
ICAgIEFMV0FZU19JTkxJTkUgdm9pZCB0YWdBcnJheVB0cihSZWdpc3RlcklEIGxlbmd0aCwgUmVn
aXN0ZXJJRCB0YXJnZXQpCi0gICAgewotICAgICAgICBtX2Fzc2VtYmxlci5wYWNkYih0YXJnZXQs
IGxlbmd0aCk7Ci0gICAgfQotCi0gICAgQUxXQVlTX0lOTElORSB2b2lkIHVudGFnQXJyYXlQdHIo
UmVnaXN0ZXJJRCBsZW5ndGgsIFJlZ2lzdGVySUQgdGFyZ2V0KQotICAgIHsKLSAgICAgICAgbV9h
c3NlbWJsZXIuYXV0ZGIodGFyZ2V0LCBsZW5ndGgpOwotICAgIH0KLQotICAgIEFMV0FZU19JTkxJ
TkUgdm9pZCB1bnRhZ0FycmF5UHRyKEFkZHJlc3MgbGVuZ3RoLCBSZWdpc3RlcklEIHRhcmdldCkK
LSAgICB7Ci0gICAgICAgIGF1dG8gbGVuZ3RoR1BSID0gZ2V0Q2FjaGVkRGF0YVRlbXBSZWdpc3Rl
cklEQW5kSW52YWxpZGF0ZSgpOwotICAgICAgICBsb2FkMzIobGVuZ3RoLCBsZW5ndGhHUFIpOwot
ICAgICAgICBtX2Fzc2VtYmxlci5hdXRkYih0YXJnZXQsIGxlbmd0aEdQUik7Ci0gICAgfQotCi0g
ICAgQUxXQVlTX0lOTElORSB2b2lkIHJlbW92ZUFycmF5UHRyVGFnKFJlZ2lzdGVySUQgdGFyZ2V0
KQotICAgIHsKLSAgICAgICAgbV9hc3NlbWJsZXIueHBhY2QodGFyZ2V0KTsKLSAgICB9Ci0KICAg
ICBzdGF0aWMgY29uc3QgUmVnaXN0ZXJJRCBJbnZhbGlkR1BSICA9IHN0YXRpY19jYXN0PFJlZ2lz
dGVySUQ+KC0xKTsKIAogICAgIGVudW0gY2xhc3MgQ2FsbFNpZ25hdHVyZVR5cGUgewpJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzTG93ZXJUb0Fpci5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzTG93ZXJUb0Fpci5jcHAJKHJldmlzaW9uIDI0NjI3
MSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0xvd2VyVG9BaXIuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC0xMjc0LDcgKzEyNzQsNiBAQCBwcml2YXRlOgogICAgICAgICAgICAgICAgICAg
ICBhcmcgPSB0bXAodmFsdWUudmFsdWUoKSk7CiAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAg
ICAgICAgICBjYXNlIFZhbHVlUmVwOjpTb21lUmVnaXN0ZXI6Ci0gICAgICAgICAgICBjYXNlIFZh
bHVlUmVwOjpTb21lTGF0ZVJlZ2lzdGVyOgogICAgICAgICAgICAgICAgIGFyZyA9IHRtcCh2YWx1
ZS52YWx1ZSgpKTsKICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgIGNhc2UgVmFs
dWVSZXA6OlNvbWVSZWdpc3RlcldpdGhDbG9iYmVyOiB7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvYjMvQjNQYXRjaHBvaW50U3BlY2lhbC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL2IzL0IzUGF0Y2hwb2ludFNwZWNpYWwuY3BwCShyZXZpc2lvbiAyNDYyNzEp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNQYXRjaHBvaW50U3BlY2lhbC5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTEyMCw3ICsxMjAsNiBAQCBib29sIFBhdGNocG9pbnRTcGVjaWFsOjph
ZG1pdHNTdGFjayhJbnN0CiAgICAgICAgIGNhc2UgVmFsdWVSZXA6OlNvbWVSZWdpc3RlcjoKICAg
ICAgICAgY2FzZSBWYWx1ZVJlcDo6U29tZVJlZ2lzdGVyV2l0aENsb2JiZXI6CiAgICAgICAgIGNh
c2UgVmFsdWVSZXA6OlNvbWVFYXJseVJlZ2lzdGVyOgotICAgICAgICBjYXNlIFZhbHVlUmVwOjpT
b21lTGF0ZVJlZ2lzdGVyOgogICAgICAgICBjYXNlIFZhbHVlUmVwOjpSZWdpc3RlcjoKICAgICAg
ICAgY2FzZSBWYWx1ZVJlcDo6TGF0ZVJlZ2lzdGVyOgogICAgICAgICAgICAgcmV0dXJuIGZhbHNl
OwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzU3RhY2ttYXBTcGVjaWFsLmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNTdGFja21hcFNwZWNpYWwu
Y3BwCShyZXZpc2lvbiAyNDYyNzEpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNTdGFj
a21hcFNwZWNpYWwuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMTMsNyArMTEzLDYgQEAgdm9pZCBT
dGFja21hcFNwZWNpYWw6OmZvckVhY2hBcmdJbXBsKAogICAgICAgICAgICAgY2FzZSBWYWx1ZVJl
cDo6U29tZVJlZ2lzdGVyV2l0aENsb2JiZXI6CiAgICAgICAgICAgICAgICAgcm9sZSA9IEFyZzo6
VXNlRGVmOwogICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgY2FzZSBWYWx1ZVJl
cDo6U29tZUxhdGVSZWdpc3RlcjoKICAgICAgICAgICAgIGNhc2UgVmFsdWVSZXA6OkxhdGVSZWdp
c3RlcjoKICAgICAgICAgICAgICAgICByb2xlID0gQXJnOjpMYXRlVXNlOwogICAgICAgICAgICAg
ICAgIGJyZWFrOwpAQCAtMjU1LDcgKzI1NCw2IEBAIGJvb2wgU3RhY2ttYXBTcGVjaWFsOjppc0Fy
Z1ZhbGlkRm9yUmVwKEEKICAgICBjYXNlIFZhbHVlUmVwOjpTb21lUmVnaXN0ZXI6CiAgICAgY2Fz
ZSBWYWx1ZVJlcDo6U29tZVJlZ2lzdGVyV2l0aENsb2JiZXI6CiAgICAgY2FzZSBWYWx1ZVJlcDo6
U29tZUVhcmx5UmVnaXN0ZXI6Ci0gICAgY2FzZSBWYWx1ZVJlcDo6U29tZUxhdGVSZWdpc3RlcjoK
ICAgICAgICAgcmV0dXJuIGFyZy5pc1RtcCgpOwogICAgIGNhc2UgVmFsdWVSZXA6OkxhdGVSZWdp
c3RlcjoKICAgICBjYXNlIFZhbHVlUmVwOjpSZWdpc3RlcjoKSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9iMy9CM1ZhbGlkYXRlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvYjMvQjNWYWxpZGF0ZS5jcHAJKHJldmlzaW9uIDI0NjI3MSkKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9iMy9CM1ZhbGlkYXRlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNTgwLDcgKzU4
MCw2IEBAIHByaXZhdGU6CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgY2FzZSBWYWx1ZVJl
cDo6UmVnaXN0ZXI6CiAgICAgICAgIGNhc2UgVmFsdWVSZXA6OkxhdGVSZWdpc3RlcjoKLSAgICAg
ICAgY2FzZSBWYWx1ZVJlcDo6U29tZUxhdGVSZWdpc3RlcjoKICAgICAgICAgICAgIGlmICh2YWx1
ZS5yZXAoKS5raW5kKCkgPT0gVmFsdWVSZXA6OkxhdGVSZWdpc3RlcikKICAgICAgICAgICAgICAg
ICBWQUxJREFURShyb2xlID09IENvbnN0cmFpbnRSb2xlOjpVc2UsICgiQXQgIiwgKmNvbnRleHQs
ICI6ICIsIHZhbHVlKSk7CiAgICAgICAgICAgICBpZiAodmFsdWUucmVwKCkucmVnKCkuaXNHUFIo
KSkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1ZhbHVlUmVwLmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNWYWx1ZVJlcC5jcHAJKHJldmlzaW9u
IDI0NjI3MSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1ZhbHVlUmVwLmNwcAkod29y
a2luZyBjb3B5KQpAQCAtNDIsNyArNDIsNiBAQCB2b2lkIFZhbHVlUmVwOjphZGRVc2VkUmVnaXN0
ZXJzVG8oUmVnaXN0CiAgICAgY2FzZSBTb21lUmVnaXN0ZXI6CiAgICAgY2FzZSBTb21lUmVnaXN0
ZXJXaXRoQ2xvYmJlcjoKICAgICBjYXNlIFNvbWVFYXJseVJlZ2lzdGVyOgotICAgIGNhc2UgU29t
ZUxhdGVSZWdpc3RlcjoKICAgICBjYXNlIENvbnN0YW50OgogICAgICAgICByZXR1cm47CiAgICAg
Y2FzZSBMYXRlUmVnaXN0ZXI6CkBAIC03NSw3ICs3NCw2IEBAIHZvaWQgVmFsdWVSZXA6OmR1bXAo
UHJpbnRTdHJlYW0mIG91dCkgY28KICAgICBjYXNlIFNvbWVSZWdpc3RlcjoKICAgICBjYXNlIFNv
bWVSZWdpc3RlcldpdGhDbG9iYmVyOgogICAgIGNhc2UgU29tZUVhcmx5UmVnaXN0ZXI6Ci0gICAg
Y2FzZSBTb21lTGF0ZVJlZ2lzdGVyOgogICAgICAgICByZXR1cm47CiAgICAgY2FzZSBMYXRlUmVn
aXN0ZXI6CiAgICAgY2FzZSBSZWdpc3RlcjoKQEAgLTE4NSw5ICsxODMsNiBAQCB2b2lkIHByaW50
SW50ZXJuYWwoUHJpbnRTdHJlYW0mIG91dCwgVmFsCiAgICAgY2FzZSBWYWx1ZVJlcDo6U29tZUVh
cmx5UmVnaXN0ZXI6CiAgICAgICAgIG91dC5wcmludCgiU29tZUVhcmx5UmVnaXN0ZXIiKTsKICAg
ICAgICAgcmV0dXJuOwotICAgIGNhc2UgVmFsdWVSZXA6OlNvbWVMYXRlUmVnaXN0ZXI6Ci0gICAg
ICAgIG91dC5wcmludCgiU29tZUxhdGVSZWdpc3RlciIpOwotICAgICAgICByZXR1cm47CiAgICAg
Y2FzZSBWYWx1ZVJlcDo6UmVnaXN0ZXI6CiAgICAgICAgIG91dC5wcmludCgiUmVnaXN0ZXIiKTsK
ICAgICAgICAgcmV0dXJuOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzVmFsdWVS
ZXAuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNWYWx1ZVJlcC5o
CShyZXZpc2lvbiAyNDYyNzEpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNWYWx1ZVJl
cC5oCSh3b3JraW5nIGNvcHkpCkBAIC03NCwxMSArNzQsNyBAQCBwdWJsaWM6CiAgICAgICAgIC8v
IHRoYXQgdGhlIGRlZiBoYXBwZW5zIGJlZm9yZSBhbnkgb2YgdGhlIGVmZmVjdHMgb2YgdGhlIHN0
YWNrbWFwLiBUaGlzIGlzIG9ubHkgdmFsaWQgZm9yCiAgICAgICAgIC8vIHRoZSByZXN1bHQgY29u
c3RyYWludCBvZiBhIFBhdGNocG9pbnQuCiAgICAgICAgIFNvbWVFYXJseVJlZ2lzdGVyLAotCi0g
ICAgICAgIC8vIEFzIGFuIGlucHV0IHJlcHJlc2VudGF0aW9uLCB0aGlzIHRlbGxzIHVzIHRoYXQg
QjMgc2hvdWxkIHBpY2sgc29tZSByZWdpc3RlciwgYnV0IGltcGxpZXMKLSAgICAgICAgLy8gdGhl
IHVzZSBoYXBwZW5zIGFmdGVyIGFueSBkZWZzLiBUaGlzIGlzIG9ubHkgd29ya3MgZm9yIHBhdGNo
cG9pbnRzLgotICAgICAgICBTb21lTGF0ZVJlZ2lzdGVyLAotCisgICAgICAgIAogICAgICAgICAv
LyBBcyBhbiBpbnB1dCByZXByZXNlbnRhdGlvbiwgdGhpcyBmb3JjZXMgYSBwYXJ0aWN1bGFyIHJl
Z2lzdGVyLiBBcyBhbiBvdXRwdXQKICAgICAgICAgLy8gcmVwcmVzZW50YXRpb24sIHRoaXMgdGVs
bHMgdXMgd2hhdCByZWdpc3RlciBCMyBwaWNrZWQuCiAgICAgICAgIFJlZ2lzdGVyLApAQCAtMTE1
LDcgKzExMSw3IEBAIHB1YmxpYzoKICAgICBWYWx1ZVJlcChLaW5kIGtpbmQpCiAgICAgICAgIDog
bV9raW5kKGtpbmQpCiAgICAgewotICAgICAgICBBU1NFUlQoa2luZCA9PSBXYXJtQW55IHx8IGtp
bmQgPT0gQ29sZEFueSB8fCBraW5kID09IExhdGVDb2xkQW55IHx8IGtpbmQgPT0gU29tZVJlZ2lz
dGVyIHx8IGtpbmQgPT0gU29tZVJlZ2lzdGVyV2l0aENsb2JiZXIgfHwga2luZCA9PSBTb21lRWFy
bHlSZWdpc3RlciB8fCBraW5kID09IFNvbWVMYXRlUmVnaXN0ZXIpOworICAgICAgICBBU1NFUlQo
a2luZCA9PSBXYXJtQW55IHx8IGtpbmQgPT0gQ29sZEFueSB8fCBraW5kID09IExhdGVDb2xkQW55
IHx8IGtpbmQgPT0gU29tZVJlZ2lzdGVyIHx8IGtpbmQgPT0gU29tZVJlZ2lzdGVyV2l0aENsb2Ji
ZXIgfHwga2luZCA9PSBTb21lRWFybHlSZWdpc3Rlcik7CiAgICAgfQogCiAgICAgc3RhdGljIFZh
bHVlUmVwIHJlZyhSZWcgcmVnKQpAQCAtMTg5LDcgKzE4NSw3IEBAIHB1YmxpYzoKIAogICAgIGJv
b2wgaXNBbnkoKSBjb25zdCB7IHJldHVybiBraW5kKCkgPT0gV2FybUFueSB8fCBraW5kKCkgPT0g
Q29sZEFueSB8fCBraW5kKCkgPT0gTGF0ZUNvbGRBbnk7IH0KIAotICAgIGJvb2wgaXNSZWcoKSBj
b25zdCB7IHJldHVybiBraW5kKCkgPT0gUmVnaXN0ZXIgfHwga2luZCgpID09IExhdGVSZWdpc3Rl
ciB8fCBraW5kKCkgPT0gU29tZUxhdGVSZWdpc3RlcjsgfQorICAgIGJvb2wgaXNSZWcoKSBjb25z
dCB7IHJldHVybiBraW5kKCkgPT0gUmVnaXN0ZXIgfHwga2luZCgpID09IExhdGVSZWdpc3Rlcjsg
fQogICAgIAogICAgIFJlZyByZWcoKSBjb25zdAogICAgIHsKSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9kZmcvREZHT3BlcmF0aW9ucy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL2RmZy9ERkdPcGVyYXRpb25zLmNwcAkocmV2aXNpb24gMjQ2MjcxKQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdPcGVyYXRpb25zLmNwcAkod29ya2luZyBjb3B5KQpA
QCAtMTk4LDcgKzE5OCw3IEBAIGNoYXIqIG5ld1R5cGVkQXJyYXlXaXRoU2l6ZShFeGVjU3RhdGUq
IGUKICAgICB9CiAgICAgCiAgICAgaWYgKHZlY3RvcikKLSAgICAgICAgcmV0dXJuIGJpdHdpc2Vf
Y2FzdDxjaGFyKj4oVmlld0NsYXNzOjpjcmVhdGVXaXRoRmFzdFZlY3RvcihleGVjLCBzdHJ1Y3R1
cmUsIHNpemUsIHVudGFnQXJyYXlQdHIodmVjdG9yLCBzaXplKSkpOworICAgICAgICByZXR1cm4g
Yml0d2lzZV9jYXN0PGNoYXIqPihWaWV3Q2xhc3M6OmNyZWF0ZVdpdGhGYXN0VmVjdG9yKGV4ZWMs
IHN0cnVjdHVyZSwgc2l6ZSwgdmVjdG9yKSk7CiAKICAgICBSRUxFQVNFX0FORF9SRVRVUk4oc2Nv
cGUsIGJpdHdpc2VfY2FzdDxjaGFyKj4oVmlld0NsYXNzOjpjcmVhdGUoZXhlYywgc3RydWN0dXJl
LCBzaXplKSkpOwogfQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxh
dGl2ZUpJVDY0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RG
R1NwZWN1bGF0aXZlSklUNjQuY3BwCShyZXZpc2lvbiAyNDYyNzEpCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklUNjQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00
NjgyLDcgKzQ2ODIsNyBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlKE5vZGUqIG5vZGUp
CiAgICAgICAgICAgICBtX2ppdC5icmFuY2g2NChNYWNyb0Fzc2VtYmxlcjo6QWJvdmVPckVxdWFs
LCB0MiwgdDEpKTsKIAogICAgICAgICBtX2ppdC5sb2FkUHRyKEpJVENvbXBpbGVyOjpBZGRyZXNz
KGRhdGFWaWV3R1BSLCBKU0FycmF5QnVmZmVyVmlldzo6b2Zmc2V0T2ZWZWN0b3IoKSksIHQyKTsK
LSAgICAgICAgY2FnZVR5cGVkQXJyYXlTdG9yYWdlKGRhdGFWaWV3R1BSLCB0Mik7CisgICAgICAg
IGNhZ2VUeXBlZEFycmF5U3RvcmFnZSh0Mik7CiAKICAgICAgICAgbV9qaXQuemVyb0V4dGVuZDMy
VG9QdHIoaW5kZXhHUFIsIHQxKTsKICAgICAgICAgYXV0byBiYXNlSW5kZXggPSBKSVRDb21waWxl
cjo6QmFzZUluZGV4KHQyLCB0MSwgTWFjcm9Bc3NlbWJsZXI6OlRpbWVzT25lKTsKQEAgLTQ4Nzgs
NyArNDg3OCw3IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGUoTm9kZSogbm9kZSkKICAg
ICAgICAgICAgIG1faml0LmJyYW5jaDY0KE1hY3JvQXNzZW1ibGVyOjpBYm92ZU9yRXF1YWwsIHQy
LCB0MSkpOwogCiAgICAgICAgIG1faml0LmxvYWRQdHIoSklUQ29tcGlsZXI6OkFkZHJlc3MoZGF0
YVZpZXdHUFIsIEpTQXJyYXlCdWZmZXJWaWV3OjpvZmZzZXRPZlZlY3RvcigpKSwgdDIpOwotICAg
ICAgICBjYWdlVHlwZWRBcnJheVN0b3JhZ2UoZGF0YVZpZXdHUFIsIHQyKTsKKyAgICAgICAgY2Fn
ZVR5cGVkQXJyYXlTdG9yYWdlKHQyKTsKIAogICAgICAgICBtX2ppdC56ZXJvRXh0ZW5kMzJUb1B0
cihpbmRleEdQUiwgdDEpOwogICAgICAgICBhdXRvIGJhc2VJbmRleCA9IEpJVENvbXBpbGVyOjpC
YXNlSW5kZXgodDIsIHQxLCBNYWNyb0Fzc2VtYmxlcjo6VGltZXNPbmUpOwpJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVC5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVC5jcHAJKHJldmlzaW9u
IDI0NjI3MSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC00MCw3ICs0MCw2IEBACiAjaW5jbHVkZSAiREZHU2xvd1Bh
dGhHZW5lcmF0b3IuaCIKICNpbmNsdWRlICJERkdTbmlwcGV0UGFyYW1zLmgiCiAjaW5jbHVkZSAi
RGlyZWN0QXJndW1lbnRzLmgiCi0jaW5jbHVkZSAiRGlzYWxsb3dNYWNyb1NjcmF0Y2hSZWdpc3Rl
clVzYWdlLmgiCiAjaW5jbHVkZSAiSklUQWRkR2VuZXJhdG9yLmgiCiAjaW5jbHVkZSAiSklUQml0
QW5kR2VuZXJhdG9yLmgiCiAjaW5jbHVkZSAiSklUQml0T3JHZW5lcmF0b3IuaCIKQEAgLTI4NzIs
MjEgKzI4NzEsOSBAQCBKSVRDb21waWxlcjo6SnVtcCBTcGVjdWxhdGl2ZUpJVDo6anVtcEZvCiAg
ICAgICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3MoYmFzZSwgSlNBcnJheUJ1ZmZl
clZpZXc6Om9mZnNldE9mTW9kZSgpKSwKICAgICAgICAgICAgICAgICBUcnVzdGVkSW1tMzIoV2Fz
dGVmdWxUeXBlZEFycmF5KSk7CiAKLSAgICAgICAgICAgIEpJVENvbXBpbGVyOjpKdW1wIGhhc051
bGxWZWN0b3I7Ci0jaWYgIUdJR0FDQUdFX0VOQUJMRUQgJiYgQ1BVKEFSTTY0RSkKLSAgICAgICAg
ICAgIHsKLSAgICAgICAgICAgICAgICBHUFJSZWcgc2NyYXRjaCA9IG1faml0LnNjcmF0Y2hSZWdp
c3RlcigpOwotICAgICAgICAgICAgICAgIERpc2FsbG93TWFjcm9TY3JhdGNoUmVnaXN0ZXJVc2Fn
ZSBkaXNhbGxvd1NjcmF0Y2gobV9qaXQpOwotCi0gICAgICAgICAgICAgICAgbV9qaXQubG9hZFB0
cihNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhiYXNlLCBKU0FycmF5QnVmZmVyVmlldzo6b2Zmc2V0
T2ZWZWN0b3IoKSksIHNjcmF0Y2gpOwotICAgICAgICAgICAgICAgIG1faml0LnJlbW92ZUFycmF5
UHRyVGFnKHNjcmF0Y2gpOwotICAgICAgICAgICAgICAgIGhhc051bGxWZWN0b3IgPSBtX2ppdC5i
cmFuY2hUZXN0UHRyKE1hY3JvQXNzZW1ibGVyOjpaZXJvLCBzY3JhdGNoKTsKLSAgICAgICAgICAg
IH0KLSNlbHNlIC8vICFHSUdBQ0FHRV9FTkFCTEVEICYmIENQVShBUk02NEUpCi0gICAgICAgICAg
ICBoYXNOdWxsVmVjdG9yID0gbV9qaXQuYnJhbmNoVGVzdFB0cigKKyAgICAgICAgICAgIEpJVENv
bXBpbGVyOjpKdW1wIGhhc051bGxWZWN0b3IgPSBtX2ppdC5icmFuY2hUZXN0UHRyKAogICAgICAg
ICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpaZXJvLAogICAgICAgICAgICAgICAgIE1hY3JvQXNz
ZW1ibGVyOjpBZGRyZXNzKGJhc2UsIEpTQXJyYXlCdWZmZXJWaWV3OjpvZmZzZXRPZlZlY3Rvcigp
KSk7Ci0jZW5kaWYKICAgICAgICAgICAgIHNwZWN1bGF0aW9uQ2hlY2soVW5jb3VudGFibGUsIEpT
VmFsdWVTb3VyY2UoKSwgbm9kZSwgaGFzTnVsbFZlY3Rvcik7CiAgICAgICAgICAgICBub3RXYXN0
ZWZ1bC5saW5rKCZtX2ppdCk7CiAgICAgICAgIH0KQEAgLTY3NTgsMTAgKzY3NDUsOSBAQCB2b2lk
IFNwZWN1bGF0aXZlSklUOjpjb21waWxlQ29uc3RhbnRTdG9yCiAgICAgc3RvcmFnZVJlc3VsdChz
dG9yYWdlR1BSLCBub2RlKTsKIH0KIAotdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y2FnZVR5cGVkQXJy
YXlTdG9yYWdlKEdQUlJlZyBiYXNlUmVnLCBHUFJSZWcgc3RvcmFnZVJlZykKK3ZvaWQgU3BlY3Vs
YXRpdmVKSVQ6OmNhZ2VUeXBlZEFycmF5U3RvcmFnZShHUFJSZWcgc3RvcmFnZVJlZykKIHsKICNp
ZiBHSUdBQ0FHRV9FTkFCTEVECi0gICAgVU5VU0VEX1BBUkFNKGJhc2VSZWcpOwogICAgIGlmICgh
R2lnYWNhZ2U6OnNob3VsZEJlRW5hYmxlZCgpKQogICAgICAgICByZXR1cm47CiAgICAgCkBAIC02
NzczLDEwICs2NzU5LDcgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y2FnZVR5cGVkQXJyYXlTdG9y
YQogICAgIH0KICAgICAKICAgICBtX2ppdC5jYWdlKEdpZ2FjYWdlOjpQcmltaXRpdmUsIHN0b3Jh
Z2VSZWcpOwotI2VsaWYgQ1BVKEFSTTY0RSkKLSAgICBtX2ppdC51bnRhZ0FycmF5UHRyKE1hY3Jv
QXNzZW1ibGVyOjpBZGRyZXNzKGJhc2VSZWcsIEpTQXJyYXlCdWZmZXJWaWV3OjpvZmZzZXRPZkxl
bmd0aCgpKSwgc3RvcmFnZVJlZyk7CiAjZWxzZQotICAgIFVOVVNFRF9QQVJBTShiYXNlUmVnKTsK
ICAgICBVTlVTRURfUEFSQU0oc3RvcmFnZVJlZyk7CiAjZW5kaWYKIH0KQEAgLTY4MDAsMTcgKzY3
ODMsMTYgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZUdldEluZGV4ZWRQcgogCiAgICAg
ICAgIG1faml0LmxvYWRQdHIoTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3Moc3RvcmFnZVJlZywgU3Ry
aW5nSW1wbDo6ZGF0YU9mZnNldCgpKSwgc3RvcmFnZVJlZyk7CiAgICAgICAgIGJyZWFrOwotCi0g
ICAgZGVmYXVsdDogeworICAgICAgICAKKyAgICBkZWZhdWx0OgogICAgICAgICBhdXRvIHR5cGVk
QXJyYXlUeXBlID0gbm9kZS0+YXJyYXlNb2RlKCkudHlwZWRBcnJheVR5cGUoKTsKICAgICAgICAg
QVNTRVJUX1VOVVNFRCh0eXBlZEFycmF5VHlwZSwgaXNUeXBlZFZpZXcodHlwZWRBcnJheVR5cGUp
KTsKIAogICAgICAgICBtX2ppdC5sb2FkUHRyKEpJVENvbXBpbGVyOjpBZGRyZXNzKGJhc2VSZWcs
IEpTQXJyYXlCdWZmZXJWaWV3OjpvZmZzZXRPZlZlY3RvcigpKSwgc3RvcmFnZVJlZyk7Ci0gICAg
ICAgIGNhZ2VUeXBlZEFycmF5U3RvcmFnZShiYXNlUmVnLCBzdG9yYWdlUmVnKTsKKyAgICAgICAg
Y2FnZVR5cGVkQXJyYXlTdG9yYWdlKHN0b3JhZ2VSZWcpOwogICAgICAgICBicmVhazsKICAgICB9
Ci0gICAgfQotCisgICAgCiAgICAgc3RvcmFnZVJlc3VsdChzdG9yYWdlUmVnLCBub2RlKTsKIH0K
IApAQCAtNjgzNSwyNCArNjgxNywxNyBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlR2V0
VHlwZWRBcnJhCiAgICAgICAgIFRydXN0ZWRJbW0zMihXYXN0ZWZ1bFR5cGVkQXJyYXkpKTsKIAog
ICAgIG1faml0LmxvYWRQdHIoTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3MoYmFzZUdQUiwgSlNBcnJh
eUJ1ZmZlclZpZXc6Om9mZnNldE9mVmVjdG9yKCkpLCB2ZWN0b3JHUFIpOwotCi0gICAgLy8gRklY
TUU6IFRoaXMgc2hvdWxkIG1hc2sgdGhlIFBBQyBiaXRzCi0gICAgLy8gaHR0cHM6Ly9idWdzLndl
YmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE5NzcwMQogICAgIEpJVENvbXBpbGVyOjpKdW1wIG51
bGxWZWN0b3IgPSBtX2ppdC5icmFuY2hUZXN0UHRyKEpJVENvbXBpbGVyOjpaZXJvLCB2ZWN0b3JH
UFIpOwogCiAgICAgbV9qaXQubG9hZFB0cihNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhiYXNlR1BS
LCBKU09iamVjdDo6YnV0dGVyZmx5T2Zmc2V0KCkpLCBkYXRhR1BSKTsKICAgICBtX2ppdC5jYWdl
KEdpZ2FjYWdlOjpKU1ZhbHVlLCBkYXRhR1BSKTsKIAotICAgIGNhZ2VUeXBlZEFycmF5U3RvcmFn
ZShiYXNlR1BSLCB2ZWN0b3JHUFIpOworICAgIGNhZ2VUeXBlZEFycmF5U3RvcmFnZSh2ZWN0b3JH
UFIpOwogCiAgICAgbV9qaXQubG9hZFB0cihNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhkYXRhR1BS
LCBCdXR0ZXJmbHk6Om9mZnNldE9mQXJyYXlCdWZmZXIoKSksIGFycmF5QnVmZmVyR1BSKTsKICAg
ICAvLyBGSVhNRTogVGhpcyBuZWVkcyBjYWdpbmcuCiAgICAgLy8gaHR0cHM6Ly9idWdzLndlYmtp
dC5vcmcvc2hvd19idWcuY2dpP2lkPTE3NTUxNQogICAgIG1faml0LmxvYWRQdHIoTWFjcm9Bc3Nl
bWJsZXI6OkFkZHJlc3MoYXJyYXlCdWZmZXJHUFIsIEFycmF5QnVmZmVyOjpvZmZzZXRPZkRhdGEo
KSksIGRhdGFHUFIpOwotI2lmIENQVShBUk02NEUpCi0gICAgbV9qaXQucmVtb3ZlQXJyYXlQdHJU
YWcoZGF0YUdQUik7Ci0jZW5kaWYKLQogICAgIG1faml0LnN1YlB0cihkYXRhR1BSLCB2ZWN0b3JH
UFIpOwogICAgIAogICAgIEpJVENvbXBpbGVyOjpKdW1wIGRvbmUgPSBtX2ppdC5qdW1wKCk7CkBA
IC05ODQ1LDExICs5ODIwLDYgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZU5ld1R5cGVk
QXJyYQogICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6QmFzZUluZGV4KHN0b3JhZ2VHUFIsIHNjcmF0
Y2hHUFIsIE1hY3JvQXNzZW1ibGVyOjpUaW1lc0ZvdXIpKTsKICAgICBtX2ppdC5icmFuY2hUZXN0
MzIoTWFjcm9Bc3NlbWJsZXI6Ok5vblplcm8sIHNjcmF0Y2hHUFIpLmxpbmtUbyhsb29wLCAmbV9q
aXQpOwogICAgIGRvbmUubGluaygmbV9qaXQpOwotI2lmICFHSUdBQ0FHRV9FTkFCTEVEICYmIENQ
VShBUk02NEUpCi0gICAgLy8gc2l6ZUdQUiBpcyBzdGlsbCBib3hlZCBhcyBhIG51bWJlciBhbmQg
dGhlcmUgaXMgbm8gMzItYml0IHZhcmlhbnQgb2YgdGhlIFBBQyBpbnN0cnVjdGlvbnMuCi0gICAg
bV9qaXQuemVyb0V4dGVuZDMyVG9QdHIoc2l6ZUdQUiwgc2NyYXRjaEdQUik7Ci0gICAgbV9qaXQu
dGFnQXJyYXlQdHIoc2NyYXRjaEdQUiwgc3RvcmFnZUdQUik7Ci0jZW5kaWYKIAogICAgIGF1dG8g
YnV0dGVyZmx5ID0gVHJ1c3RlZEltbVB0cihudWxscHRyKTsKICAgICBlbWl0QWxsb2NhdGVKU09i
amVjdDxKU0FycmF5QnVmZmVyVmlldz4oCkBAIC05ODcxLDcgKzk4NDEsNyBAQCB2b2lkIFNwZWN1
bGF0aXZlSklUOjpjb21waWxlTmV3VHlwZWRBcnJhCiAgICAgYWRkU2xvd1BhdGhHZW5lcmF0b3Io
c2xvd1BhdGhDYWxsKAogICAgICAgICBzbG93Q2FzZXMsIHRoaXMsIG9wZXJhdGlvbk5ld1R5cGVk
QXJyYXlXaXRoU2l6ZUZvclR5cGUodHlwZWRBcnJheVR5cGUpLAogICAgICAgICByZXN1bHRHUFIs
IHN0cnVjdHVyZSwgc2l6ZUdQUiwgc3RvcmFnZUdQUikpOwotCisgICAgCiAgICAgY2VsbFJlc3Vs
dChyZXN1bHRHUFIsIG5vZGUpOwogfQogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZn
L0RGR1NwZWN1bGF0aXZlSklULmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L2RmZy9ERkdTcGVjdWxhdGl2ZUpJVC5oCShyZXZpc2lvbiAyNDYyNzEpCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklULmgJKHdvcmtpbmcgY29weSkKQEAgLTE2
NTIsNyArMTY1Miw3IEBAIHB1YmxpYzoKICAgICB0ZW1wbGF0ZTxib29sIHN0cmljdD4KICAgICBH
UFJSZWcgZmlsbFNwZWN1bGF0ZUludDMySW50ZXJuYWwoRWRnZSwgRGF0YUZvcm1hdCYgcmV0dXJu
Rm9ybWF0KTsKICAgICAKLSAgICB2b2lkIGNhZ2VUeXBlZEFycmF5U3RvcmFnZShHUFJSZWcsIEdQ
UlJlZyk7CisgICAgdm9pZCBjYWdlVHlwZWRBcnJheVN0b3JhZ2UoR1BSUmVnKTsKICAgICAKICAg
ICB2b2lkIHJlY29yZFNldExvY2FsKAogICAgICAgICBWaXJ0dWFsUmVnaXN0ZXIgYnl0ZWNvZGVS
ZWcsIFZpcnR1YWxSZWdpc3RlciBtYWNoaW5lUmVnLCBEYXRhRm9ybWF0IGZvcm1hdCkKSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMTG93ZXJERkdUb0IzLmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTExvd2VyREZHVG9CMy5jcHAJKHJldmlz
aW9uIDI0NjI3MSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMTG93ZXJERkdUb0Iz
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzg4Myw3ICszODgzLDcgQEAgcHJpdmF0ZToKIAogICAg
ICAgICBERkdfQVNTRVJUKG1fZ3JhcGgsIG1fbm9kZSwgaXNUeXBlZFZpZXcobV9ub2RlLT5hcnJh
eU1vZGUoKS50eXBlZEFycmF5VHlwZSgpKSwgbV9ub2RlLT5hcnJheU1vZGUoKS50eXBlZEFycmF5
VHlwZSgpKTsKICAgICAgICAgTFZhbHVlIHZlY3RvciA9IG1fb3V0LmxvYWRQdHIoY2VsbCwgbV9o
ZWFwcy5KU0FycmF5QnVmZmVyVmlld192ZWN0b3IpOwotICAgICAgICBzZXRTdG9yYWdlKGNhZ2Vk
KEdpZ2FjYWdlOjpQcmltaXRpdmUsIHZlY3RvciwgY2VsbCkpOworICAgICAgICBzZXRTdG9yYWdl
KGNhZ2VkKEdpZ2FjYWdlOjpQcmltaXRpdmUsIHZlY3RvcikpOwogICAgIH0KICAgICAKICAgICB2
b2lkIGNvbXBpbGVDaGVja0FycmF5KCkKQEAgLTM5MjcsMTUgKzM5MjcsMTQgQEAgcHJpdmF0ZToK
IAogICAgICAgICBtX291dC5hcHBlbmRUbyhub3ROdWxsLCBjb250aW51YXRpb24pOwogCi0gICAg
ICAgIExWYWx1ZSBidXR0ZXJmbHlQdHIgPSBjYWdlZChHaWdhY2FnZTo6SlNWYWx1ZSwgbV9vdXQu
bG9hZFB0cihiYXNlUHRyLCBtX2hlYXBzLkpTT2JqZWN0X2J1dHRlcmZseSksIGJhc2VQdHIpOwor
ICAgICAgICBMVmFsdWUgYnV0dGVyZmx5UHRyID0gY2FnZWQoR2lnYWNhZ2U6OkpTVmFsdWUsIG1f
b3V0LmxvYWRQdHIoYmFzZVB0ciwgbV9oZWFwcy5KU09iamVjdF9idXR0ZXJmbHkpKTsKICAgICAg
ICAgTFZhbHVlIGFycmF5QnVmZmVyUHRyID0gbV9vdXQubG9hZFB0cihidXR0ZXJmbHlQdHIsIG1f
aGVhcHMuQnV0dGVyZmx5X2FycmF5QnVmZmVyKTsKIAotICAgICAgICBMVmFsdWUgdmVjdG9yUHRy
ID0gY2FnZWQoR2lnYWNhZ2U6OlByaW1pdGl2ZSwgdmVjdG9yLCBiYXNlUHRyKTsKKyAgICAgICAg
TFZhbHVlIHZlY3RvclB0ciA9IGNhZ2VkKEdpZ2FjYWdlOjpQcmltaXRpdmUsIHZlY3Rvcik7CiAK
ICAgICAgICAgLy8gRklYTUU6IFRoaXMgbmVlZHMgY2FnaW5nLgogICAgICAgICAvLyBodHRwczov
L2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTc1NTE1CiAgICAgICAgIExWYWx1ZSBk
YXRhUHRyID0gbV9vdXQubG9hZFB0cihhcnJheUJ1ZmZlclB0ciwgbV9oZWFwcy5BcnJheUJ1ZmZl
cl9kYXRhKTsKLSAgICAgICAgZGF0YVB0ciA9IHJlbW92ZUFycmF5UHRyVGFnKGRhdGFQdHIpOwog
CiAgICAgICAgIFZhbHVlRnJvbUJsb2NrIHdhc3RlZnVsT3V0ID0gbV9vdXQuYW5jaG9yKG1fb3V0
LnN1Yih2ZWN0b3JQdHIsIGRhdGFQdHIpKTsKIApAQCAtNjQ4NSwyMCArNjQ4NCw2IEBAIHByaXZh
dGU6CiAgICAgICAgICAgICAgICAgbV9vdXQuaW50NjRaZXJvLAogICAgICAgICAgICAgICAgIG1f
aGVhcHMudHlwZWRBcnJheVByb3BlcnRpZXMpOwogCi0jaWYgIUdJR0FDQUdFX0VOQUJMRUQgJiYg
Q1BVKEFSTTY0RSkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBMVmFsdWUgc2l6ZVB0
ciA9IG1fb3V0Lnplcm9FeHRQdHIoc2l6ZSk7Ci0gICAgICAgICAgICAgICAgUGF0Y2hwb2ludFZh
bHVlKiBhdXRoZW50aWNhdGUgPSBtX291dC5wYXRjaHBvaW50KHBvaW50ZXJUeXBlKCkpOwotICAg
ICAgICAgICAgICAgIGF1dGhlbnRpY2F0ZS0+YXBwZW5kU29tZVJlZ2lzdGVyKHN0b3JhZ2UpOwot
ICAgICAgICAgICAgICAgIGF1dGhlbnRpY2F0ZS0+YXBwZW5kKHNpemVQdHIsIEIzOjpWYWx1ZVJl
cChCMzo6VmFsdWVSZXA6OlNvbWVMYXRlUmVnaXN0ZXIpKTsKLSAgICAgICAgICAgICAgICBhdXRo
ZW50aWNhdGUtPnNldEdlbmVyYXRvcihbPV0gKENDYWxsSGVscGVycyYgaml0LCBjb25zdCBTdGFj
a21hcEdlbmVyYXRpb25QYXJhbXMmIHBhcmFtcykgewotICAgICAgICAgICAgICAgICAgICBqaXQu
bW92ZShwYXJhbXNbMV0uZ3ByKCksIHBhcmFtc1swXS5ncHIoKSk7Ci0gICAgICAgICAgICAgICAg
ICAgIGppdC50YWdBcnJheVB0cihwYXJhbXNbMl0uZ3ByKCksIHBhcmFtc1swXS5ncHIoKSk7Ci0g
ICAgICAgICAgICAgICAgfSk7Ci0gICAgICAgICAgICAgICAgc3RvcmFnZSA9IGF1dGhlbnRpY2F0
ZTsKLSAgICAgICAgICAgIH0KLSNlbmRpZgotCiAgICAgICAgICAgICBWYWx1ZUZyb21CbG9jayBo
YXZlU3RvcmFnZSA9IG1fb3V0LmFuY2hvcihzdG9yYWdlKTsKIAogICAgICAgICAgICAgTFZhbHVl
IGZhc3RSZXN1bHRWYWx1ZSA9CkBAIC0xMjcxNyw3ICsxMjcwMiw3IEBAIHByaXZhdGU6CiAgICAg
ICAgICAgICBpbmRleFRvQ2hlY2sgPSBtX291dC5hZGQoaW5kZXhUb0NoZWNrLCBtX291dC5jb25z
dEludDY0KGRhdGEuYnl0ZVNpemUgLSAxKSk7CiAgICAgICAgIHNwZWN1bGF0ZShPdXRPZkJvdW5k
cywgbm9WYWx1ZSgpLCBudWxscHRyLCBtX291dC5hYm92ZU9yRXF1YWwoaW5kZXhUb0NoZWNrLCBs
ZW5ndGgpKTsKIAotICAgICAgICBMVmFsdWUgdmVjdG9yID0gY2FnZWQoR2lnYWNhZ2U6OlByaW1p
dGl2ZSwgbV9vdXQubG9hZFB0cihkYXRhVmlldywgbV9oZWFwcy5KU0FycmF5QnVmZmVyVmlld192
ZWN0b3IpLCBkYXRhVmlldyk7CisgICAgICAgIExWYWx1ZSB2ZWN0b3IgPSBjYWdlZChHaWdhY2Fn
ZTo6UHJpbWl0aXZlLCBtX291dC5sb2FkUHRyKGRhdGFWaWV3LCBtX2hlYXBzLkpTQXJyYXlCdWZm
ZXJWaWV3X3ZlY3RvcikpOwogCiAgICAgICAgIFR5cGVkUG9pbnRlciBwb2ludGVyKG1faGVhcHMu
dHlwZWRBcnJheVByb3BlcnRpZXMsIG1fb3V0LmFkZCh2ZWN0b3IsIG1fb3V0Lnplcm9FeHRQdHIo
aW5kZXgpKSk7CiAKQEAgLTEyODc2LDcgKzEyODYxLDcgQEAgcHJpdmF0ZToKICAgICAgICAgICAg
IFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CiAgICAgICAgIH0KIAotICAgICAgICBMVmFs
dWUgdmVjdG9yID0gY2FnZWQoR2lnYWNhZ2U6OlByaW1pdGl2ZSwgbV9vdXQubG9hZFB0cihkYXRh
VmlldywgbV9oZWFwcy5KU0FycmF5QnVmZmVyVmlld192ZWN0b3IpLCBkYXRhVmlldyk7CisgICAg
ICAgIExWYWx1ZSB2ZWN0b3IgPSBjYWdlZChHaWdhY2FnZTo6UHJpbWl0aXZlLCBtX291dC5sb2Fk
UHRyKGRhdGFWaWV3LCBtX2hlYXBzLkpTQXJyYXlCdWZmZXJWaWV3X3ZlY3RvcikpOwogICAgICAg
ICBUeXBlZFBvaW50ZXIgcG9pbnRlcihtX2hlYXBzLnR5cGVkQXJyYXlQcm9wZXJ0aWVzLCBtX291
dC5hZGQodmVjdG9yLCBtX291dC56ZXJvRXh0UHRyKGluZGV4KSkpOwogCiAgICAgICAgIGlmIChk
YXRhLmlzRmxvYXRpbmdQb2ludCkgewpAQCAtMTQxMjMsNDIgKzE0MTA4LDEwIEBAIHByaXZhdGU6
CiAgICAgICAgICAgICBtX291dC5hcHBlbmRUbyhwZXJmb3JtU3RvcmUsIGxhc3ROZXh0KTsKICAg
ICAgICAgfQogICAgIH0KLQotICAgIExWYWx1ZSB1bnRhZ0FycmF5UHRyKExWYWx1ZSBwdHIsIExW
YWx1ZSBzaXplKQotICAgIHsKLSNpZiBDUFUoQVJNNjRFKQotICAgICAgICBQYXRjaHBvaW50VmFs
dWUqIGF1dGhlbnRpY2F0ZSA9IG1fb3V0LnBhdGNocG9pbnQocG9pbnRlclR5cGUoKSk7Ci0gICAg
ICAgIGF1dGhlbnRpY2F0ZS0+YXBwZW5kU29tZVJlZ2lzdGVyKHB0cik7Ci0gICAgICAgIGF1dGhl
bnRpY2F0ZS0+YXBwZW5kKHNpemUsIEIzOjpWYWx1ZVJlcChCMzo6VmFsdWVSZXA6OlNvbWVMYXRl
UmVnaXN0ZXIpKTsKLSAgICAgICAgYXV0aGVudGljYXRlLT5zZXRHZW5lcmF0b3IoWz1dIChDQ2Fs
bEhlbHBlcnMmIGppdCwgY29uc3QgU3RhY2ttYXBHZW5lcmF0aW9uUGFyYW1zJiBwYXJhbXMpIHsK
LSAgICAgICAgICAgIGppdC5tb3ZlKHBhcmFtc1sxXS5ncHIoKSwgcGFyYW1zWzBdLmdwcigpKTsK
LSAgICAgICAgICAgIGppdC51bnRhZ0FycmF5UHRyKHBhcmFtc1syXS5ncHIoKSwgcGFyYW1zWzBd
LmdwcigpKTsKLSAgICAgICAgfSk7Ci0gICAgICAgIHJldHVybiBhdXRoZW50aWNhdGU7Ci0jZWxz
ZQotICAgICAgICBVTlVTRURfUEFSQU0oc2l6ZSk7Ci0gICAgICAgIHJldHVybiBwdHI7Ci0jZW5k
aWYKLSAgICB9Ci0KLSAgICBMVmFsdWUgcmVtb3ZlQXJyYXlQdHJUYWcoTFZhbHVlIHB0cikKLSAg
ICB7Ci0jaWYgQ1BVKEFSTTY0RSkKLSAgICAgICAgUGF0Y2hwb2ludFZhbHVlKiBhdXRoZW50aWNh
dGUgPSBtX291dC5wYXRjaHBvaW50KHBvaW50ZXJUeXBlKCkpOwotICAgICAgICBhdXRoZW50aWNh
dGUtPmFwcGVuZFNvbWVSZWdpc3RlcihwdHIpOwotICAgICAgICBhdXRoZW50aWNhdGUtPnNldEdl
bmVyYXRvcihbPV0gKENDYWxsSGVscGVycyYgaml0LCBjb25zdCBTdGFja21hcEdlbmVyYXRpb25Q
YXJhbXMmIHBhcmFtcykgewotICAgICAgICAgICAgaml0Lm1vdmUocGFyYW1zWzFdLmdwcigpLCBw
YXJhbXNbMF0uZ3ByKCkpOwotICAgICAgICAgICAgaml0LnJlbW92ZUFycmF5UHRyVGFnKHBhcmFt
c1swXS5ncHIoKSk7Ci0gICAgICAgIH0pOwotICAgICAgICByZXR1cm4gYXV0aGVudGljYXRlOwot
I2VuZGlmCi0gICAgICAgIHJldHVybiBwdHI7Ci0gICAgfQotCi0gICAgTFZhbHVlIGNhZ2VkKEdp
Z2FjYWdlOjpLaW5kIGtpbmQsIExWYWx1ZSBwdHIsIExWYWx1ZSBiYXNlKQorICAgIAorICAgIExW
YWx1ZSBjYWdlZChHaWdhY2FnZTo6S2luZCBraW5kLCBMVmFsdWUgcHRyKQogICAgIHsKICNpZiBH
SUdBQ0FHRV9FTkFCTEVECi0gICAgICAgIFVOVVNFRF9QQVJBTShiYXNlKTsKICAgICAgICAgaWYg
KCFHaWdhY2FnZTo6aXNFbmFibGVkKGtpbmQpKQogICAgICAgICAgICAgcmV0dXJuIHB0cjsKICAg
ICAgICAgCkBAIC0xNDE4NywxNiArMTQxNDAsOCBAQCBwcml2YXRlOgogICAgICAgICAvLyBhbmQg
cG9zc2libHkgb3RoZXIgc21hcnQgdGhpbmdzIGlmIHdlIHdhbnQgdG8gYmUgYWJsZSB0byByZW1v
dmUgdGhpcyBvcGFxdWUuCiAgICAgICAgIC8vIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3df
YnVnLmNnaT9pZD0xNzU0OTMKICAgICAgICAgcmV0dXJuIG1fb3V0Lm9wYXF1ZShyZXN1bHQpOwot
I2VsaWYgQ1BVKEFSTTY0RSkKLSAgICAgICAgaWYgKGtpbmQgPT0gR2lnYWNhZ2U6OlByaW1pdGl2
ZSkgewotICAgICAgICAgICAgTFZhbHVlIHNpemUgPSBtX291dC5sb2FkMzIoYmFzZSwgbV9oZWFw
cy5KU0FycmF5QnVmZmVyVmlld19sZW5ndGgpOwotICAgICAgICAgICAgcmV0dXJuIHVudGFnQXJy
YXlQdHIocHRyLCBzaXplKTsKLSAgICAgICAgfQotCi0gICAgICAgIHJldHVybiBwdHI7CiAjZWxz
ZQogICAgICAgICBVTlVTRURfUEFSQU0oa2luZCk7Ci0gICAgICAgIFVOVVNFRF9QQVJBTShiYXNl
KTsKICAgICAgICAgcmV0dXJuIHB0cjsKICNlbmRpZgogICAgIH0KQEAgLTE2NjEwLDkgKzE2NTU1
LDYgQEAgcHJpdmF0ZToKIAogICAgICAgICBMQmFzaWNCbG9jayBsYXN0TmV4dCA9IG1fb3V0LmFw
cGVuZFRvKGlzV2FzdGVmdWwsIGNvbnRpbnVhdGlvbik7CiAgICAgICAgIExWYWx1ZSB2ZWN0b3Ig
PSBtX291dC5sb2FkUHRyKGJhc2UsIG1faGVhcHMuSlNBcnJheUJ1ZmZlclZpZXdfdmVjdG9yKTsK
LSAgICAgICAgLy8gRklYTUU6IFdlIGNvdWxkIHByb2JhYmx5IG1ha2UgdGhpcyBhIG1hc2suCi0g
ICAgICAgIC8vIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xOTc3MDEK
LSAgICAgICAgdmVjdG9yID0gcmVtb3ZlQXJyYXlQdHJUYWcodmVjdG9yKTsKICAgICAgICAgc3Bl
Y3VsYXRlKFVuY291bnRhYmxlLCBqc1ZhbHVlVmFsdWUodmVjdG9yKSwgbV9ub2RlLCBtX291dC5p
c1plcm82NCh2ZWN0b3IpKTsKICAgICAgICAgbV9vdXQuanVtcChjb250aW51YXRpb24pOwogCklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9Db25zZXJ2YXRpdmVSb290cy5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvQ29uc2VydmF0aXZlUm9vdHMu
Y3BwCShyZXZpc2lvbiAyNDYyNzEpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9Db25z
ZXJ2YXRpdmVSb290cy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTY4LDcgKzY4LDYgQEAgdm9pZCBD
b25zZXJ2YXRpdmVSb290czo6Z3JvdygpCiB0ZW1wbGF0ZTx0eXBlbmFtZSBNYXJrSG9vaz4KIGlu
bGluZSB2b2lkIENvbnNlcnZhdGl2ZVJvb3RzOjpnZW5lcmljQWRkUG9pbnRlcih2b2lkKiBwLCBI
ZWFwVmVyc2lvbiBtYXJraW5nVmVyc2lvbiwgSGVhcFZlcnNpb24gbmV3bHlBbGxvY2F0ZWRWZXJz
aW9uLCBUaW55Qmxvb21GaWx0ZXIgZmlsdGVyLCBNYXJrSG9vayYgbWFya0hvb2spCiB7Ci0gICAg
cCA9IHJlbW92ZUFycmF5UHRyVGFnKHApOwogICAgIG1hcmtIb29rLm1hcmsocCk7CiAKICAgICBI
ZWFwVXRpbDo6ZmluZEdDT2JqZWN0UG9pbnRlcnNGb3JNYXJraW5nKApJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL2ppdC9Bc3NlbWJseUhlbHBlcnMuaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvaml0L0Fzc2VtYmx5SGVscGVycy5oCShyZXZpc2lvbiAyNDYyNzEpCisr
KyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0Fzc2VtYmx5SGVscGVycy5oCSh3b3JraW5nIGNv
cHkpCkBAIC0xNTY5LDcgKzE1NjksNyBAQCBwdWJsaWM6CiAjZW5kaWYKICAgICB9CiAgICAgCi0g
ICAgdm9pZCBjYWdlQ29uZGl0aW9uYWxseShHaWdhY2FnZTo6S2luZCBraW5kLCBHUFJSZWcgc3Rv
cmFnZSwgR1BSUmVnIHNjcmF0Y2hPckxlbmd0aCkKKyAgICB2b2lkIGNhZ2VDb25kaXRpb25hbGx5
KEdpZ2FjYWdlOjpLaW5kIGtpbmQsIEdQUlJlZyBzdG9yYWdlLCBHUFJSZWcgc2NyYXRjaCkKICAg
ICB7CiAjaWYgR0lHQUNBR0VfRU5BQkxFRAogICAgICAgICBpZiAoIUdpZ2FjYWdlOjppc0VuYWJs
ZWQoa2luZCkpCkBAIC0xNTc4LDE4ICsxNTc4LDE1IEBAIHB1YmxpYzoKICAgICAgICAgaWYgKGtp
bmQgIT0gR2lnYWNhZ2U6OlByaW1pdGl2ZSB8fCBHaWdhY2FnZTo6aXNEaXNhYmxpbmdQcmltaXRp
dmVHaWdhY2FnZURpc2FibGVkKCkpCiAgICAgICAgICAgICByZXR1cm4gY2FnZShraW5kLCBzdG9y
YWdlKTsKICAgICAgICAgCi0gICAgICAgIGxvYWRQdHIoJkdpZ2FjYWdlOjpiYXNlUHRyKGtpbmQp
LCBzY3JhdGNoT3JMZW5ndGgpOwotICAgICAgICBKdW1wIGRvbmUgPSBicmFuY2hUZXN0UHRyKFpl
cm8sIHNjcmF0Y2hPckxlbmd0aCk7CisgICAgICAgIGxvYWRQdHIoJkdpZ2FjYWdlOjpiYXNlUHRy
KGtpbmQpLCBzY3JhdGNoKTsKKyAgICAgICAgSnVtcCBkb25lID0gYnJhbmNoVGVzdFB0cihaZXJv
LCBzY3JhdGNoKTsKICAgICAgICAgYW5kUHRyKFRydXN0ZWRJbW1QdHIoR2lnYWNhZ2U6Om1hc2so
a2luZCkpLCBzdG9yYWdlKTsKLSAgICAgICAgYWRkUHRyKHNjcmF0Y2hPckxlbmd0aCwgc3RvcmFn
ZSk7CisgICAgICAgIGFkZFB0cihzY3JhdGNoLCBzdG9yYWdlKTsKICAgICAgICAgZG9uZS5saW5r
KHRoaXMpOwotI2VsaWYgQ1BVKEFSTTY0RSkKLSAgICAgICAgaWYgKGtpbmQgPT0gR2lnYWNhZ2U6
OlByaW1pdGl2ZSkKLSAgICAgICAgICAgIHVudGFnQXJyYXlQdHIoc2NyYXRjaE9yTGVuZ3RoLCBz
dG9yYWdlKTsKICNlbHNlCiAgICAgICAgIFVOVVNFRF9QQVJBTShraW5kKTsKICAgICAgICAgVU5V
U0VEX1BBUkFNKHN0b3JhZ2UpOwotICAgICAgICBVTlVTRURfUEFSQU0oc2NyYXRjaE9yTGVuZ3Ro
KTsKKyAgICAgICAgVU5VU0VEX1BBUkFNKHNjcmF0Y2gpOwogI2VuZGlmCiAgICAgfQogCkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0ludHJpbnNpY0VtaXR0ZXIuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSW50cmluc2ljRW1pdHRlci5jcHAJKHJl
dmlzaW9uIDI0NjI3MSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSW50cmluc2ljRW1p
dHRlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTExNCwxNCArMTE0LDggQEAgdm9pZCBJbnRyaW5z
aWNHZXR0ZXJBY2Nlc3NDYXNlOjplbWl0SW50cgogCiAgICAgICAgIGppdC5sb2FkUHRyKE1hY3Jv
QXNzZW1ibGVyOjpBZGRyZXNzKGJhc2VHUFIsIEpTT2JqZWN0OjpidXR0ZXJmbHlPZmZzZXQoKSks
IHNjcmF0Y2hHUFIpOwogICAgICAgICBqaXQubG9hZFB0cihNYWNyb0Fzc2VtYmxlcjo6QWRkcmVz
cyhiYXNlR1BSLCBKU0FycmF5QnVmZmVyVmlldzo6b2Zmc2V0T2ZWZWN0b3IoKSksIHZhbHVlR1BS
KTsKLSNpZiBDUFUoQVJNNjRFKQotICAgICAgICBqaXQucmVtb3ZlQXJyYXlQdHJUYWcodmFsdWVH
UFIpOwotI2VuZGlmCiAgICAgICAgIGppdC5sb2FkUHRyKE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNz
KHNjcmF0Y2hHUFIsIEJ1dHRlcmZseTo6b2Zmc2V0T2ZBcnJheUJ1ZmZlcigpKSwgc2NyYXRjaEdQ
Uik7CiAgICAgICAgIGppdC5sb2FkUHRyKE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKHNjcmF0Y2hH
UFIsIEFycmF5QnVmZmVyOjpvZmZzZXRPZkRhdGEoKSksIHNjcmF0Y2hHUFIpOwotI2lmIENQVShB
Uk02NEUpCi0gICAgICAgIGppdC5yZW1vdmVBcnJheVB0clRhZyhzY3JhdGNoR1BSKTsKLSNlbmRp
ZgogICAgICAgICBqaXQuc3ViUHRyKHNjcmF0Y2hHUFIsIHZhbHVlR1BSKTsKIAogICAgICAgICBD
Q2FsbEhlbHBlcnM6Okp1bXAgZG9uZSA9IGppdC5qdW1wKCk7CkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvaml0L0pJVFByb3BlcnR5QWNjZXNzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvaml0L0pJVFByb3BlcnR5QWNjZXNzLmNwcAkocmV2aXNpb24gMjQ2Mjcx
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRQcm9wZXJ0eUFjY2Vzcy5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTE1ODksNyArMTU4OSw3IEBAIEpJVDo6SnVtcExpc3QgSklUOjplbWl0
RGlyZWN0QXJndW1lbnRzR2UKICAgICBsb2FkMzIoQWRkcmVzcyhiYXNlLCBEaXJlY3RBcmd1bWVu
dHM6Om9mZnNldE9mTGVuZ3RoKCkpLCBzY3JhdGNoMik7CiAgICAgc2xvd0Nhc2VzLmFwcGVuZChi
cmFuY2gzMihBYm92ZU9yRXF1YWwsIHByb3BlcnR5LCBzY3JhdGNoMikpOwogICAgIHNsb3dDYXNl
cy5hcHBlbmQoYnJhbmNoVGVzdFB0cihOb25aZXJvLCBBZGRyZXNzKGJhc2UsIERpcmVjdEFyZ3Vt
ZW50czo6b2Zmc2V0T2ZNYXBwZWRBcmd1bWVudHMoKSkpKTsKLQorICAgIAogICAgIGxvYWRWYWx1
ZShCYXNlSW5kZXgoYmFzZSwgcHJvcGVydHksIFRpbWVzRWlnaHQsIERpcmVjdEFyZ3VtZW50czo6
c3RvcmFnZU9mZnNldCgpKSwgcmVzdWx0KTsKICAgICAKICAgICByZXR1cm4gc2xvd0Nhc2VzOwpA
QCAtMTY2OSw4ICsxNjY5LDcgQEAgSklUOjpKdW1wTGlzdCBKSVQ6OmVtaXRJbnRUeXBlZEFycmF5
R2V0QgogICAgIAogICAgIGxvYWQ4KEFkZHJlc3MoYmFzZSwgSlNDZWxsOjp0eXBlSW5mb1R5cGVP
ZmZzZXQoKSksIHNjcmF0Y2gpOwogICAgIGJhZFR5cGUgPSBwYXRjaGFibGVCcmFuY2gzMihOb3RF
cXVhbCwgc2NyYXRjaCwgVHJ1c3RlZEltbTMyKHR5cGVGb3JUeXBlZEFycmF5VHlwZSh0eXBlKSkp
OwotICAgIGxvYWQzMihBZGRyZXNzKGJhc2UsIEpTQXJyYXlCdWZmZXJWaWV3OjpvZmZzZXRPZkxl
bmd0aCgpKSwgc2NyYXRjaDIpOwotICAgIHNsb3dDYXNlcy5hcHBlbmQoYnJhbmNoMzIoQWJvdmVP
ckVxdWFsLCBwcm9wZXJ0eSwgc2NyYXRjaDIpKTsKKyAgICBzbG93Q2FzZXMuYXBwZW5kKGJyYW5j
aDMyKEFib3ZlT3JFcXVhbCwgcHJvcGVydHksIEFkZHJlc3MoYmFzZSwgSlNBcnJheUJ1ZmZlclZp
ZXc6Om9mZnNldE9mTGVuZ3RoKCkpKSk7CiAgICAgbG9hZFB0cihBZGRyZXNzKGJhc2UsIEpTQXJy
YXlCdWZmZXJWaWV3OjpvZmZzZXRPZlZlY3RvcigpKSwgc2NyYXRjaCk7CiAgICAgY2FnZUNvbmRp
dGlvbmFsbHkoR2lnYWNhZ2U6OlByaW1pdGl2ZSwgc2NyYXRjaCwgc2NyYXRjaDIpOwogCkBAIC0x
NzMzLDggKzE3MzIsNyBAQCBKSVQ6Okp1bXBMaXN0IEpJVDo6ZW1pdEZsb2F0VHlwZWRBcnJheUdl
CiAKICAgICBsb2FkOChBZGRyZXNzKGJhc2UsIEpTQ2VsbDo6dHlwZUluZm9UeXBlT2Zmc2V0KCkp
LCBzY3JhdGNoKTsKICAgICBiYWRUeXBlID0gcGF0Y2hhYmxlQnJhbmNoMzIoTm90RXF1YWwsIHNj
cmF0Y2gsIFRydXN0ZWRJbW0zMih0eXBlRm9yVHlwZWRBcnJheVR5cGUodHlwZSkpKTsKLSAgICBs
b2FkMzIoQWRkcmVzcyhiYXNlLCBKU0FycmF5QnVmZmVyVmlldzo6b2Zmc2V0T2ZMZW5ndGgoKSks
IHNjcmF0Y2gyKTsKLSAgICBzbG93Q2FzZXMuYXBwZW5kKGJyYW5jaDMyKEFib3ZlT3JFcXVhbCwg
cHJvcGVydHksIHNjcmF0Y2gyKSk7CisgICAgc2xvd0Nhc2VzLmFwcGVuZChicmFuY2gzMihBYm92
ZU9yRXF1YWwsIHByb3BlcnR5LCBBZGRyZXNzKGJhc2UsIEpTQXJyYXlCdWZmZXJWaWV3OjpvZmZz
ZXRPZkxlbmd0aCgpKSkpOwogICAgIGxvYWRQdHIoQWRkcmVzcyhiYXNlLCBKU0FycmF5QnVmZmVy
Vmlldzo6b2Zmc2V0T2ZWZWN0b3IoKSksIHNjcmF0Y2gpOwogICAgIGNhZ2VDb25kaXRpb25hbGx5
KEdpZ2FjYWdlOjpQcmltaXRpdmUsIHNjcmF0Y2gsIHNjcmF0Y2gyKTsKICAgICAKQEAgLTE3ODQs
OCArMTc4Miw3IEBAIEpJVDo6SnVtcExpc3QgSklUOjplbWl0SW50VHlwZWRBcnJheVB1dEIKICAg
ICAKICAgICBsb2FkOChBZGRyZXNzKGJhc2UsIEpTQ2VsbDo6dHlwZUluZm9UeXBlT2Zmc2V0KCkp
LCBlYXJseVNjcmF0Y2gpOwogICAgIGJhZFR5cGUgPSBwYXRjaGFibGVCcmFuY2gzMihOb3RFcXVh
bCwgZWFybHlTY3JhdGNoLCBUcnVzdGVkSW1tMzIodHlwZUZvclR5cGVkQXJyYXlUeXBlKHR5cGUp
KSk7Ci0gICAgbG9hZDMyKEFkZHJlc3MoYmFzZSwgSlNBcnJheUJ1ZmZlclZpZXc6Om9mZnNldE9m
TGVuZ3RoKCkpLCBsYXRlU2NyYXRjaDIpOwotICAgIEp1bXAgaW5Cb3VuZHMgPSBicmFuY2gzMihC
ZWxvdywgcHJvcGVydHksIGxhdGVTY3JhdGNoMik7CisgICAgSnVtcCBpbkJvdW5kcyA9IGJyYW5j
aDMyKEJlbG93LCBwcm9wZXJ0eSwgQWRkcmVzcyhiYXNlLCBKU0FycmF5QnVmZmVyVmlldzo6b2Zm
c2V0T2ZMZW5ndGgoKSkpOwogICAgIGVtaXRBcnJheVByb2ZpbGVPdXRPZkJvdW5kc1NwZWNpYWxD
YXNlKHByb2ZpbGUpOwogICAgIHNsb3dDYXNlcy5hcHBlbmQoanVtcCgpKTsKICAgICBpbkJvdW5k
cy5saW5rKHRoaXMpOwpAQCAtMTg2MCw4ICsxODU3LDcgQEAgSklUOjpKdW1wTGlzdCBKSVQ6OmVt
aXRGbG9hdFR5cGVkQXJyYXlQdQogICAgIAogICAgIGxvYWQ4KEFkZHJlc3MoYmFzZSwgSlNDZWxs
Ojp0eXBlSW5mb1R5cGVPZmZzZXQoKSksIGVhcmx5U2NyYXRjaCk7CiAgICAgYmFkVHlwZSA9IHBh
dGNoYWJsZUJyYW5jaDMyKE5vdEVxdWFsLCBlYXJseVNjcmF0Y2gsIFRydXN0ZWRJbW0zMih0eXBl
Rm9yVHlwZWRBcnJheVR5cGUodHlwZSkpKTsKLSAgICBsb2FkMzIoQWRkcmVzcyhiYXNlLCBKU0Fy
cmF5QnVmZmVyVmlldzo6b2Zmc2V0T2ZMZW5ndGgoKSksIGxhdGVTY3JhdGNoMik7Ci0gICAgSnVt
cCBpbkJvdW5kcyA9IGJyYW5jaDMyKEJlbG93LCBwcm9wZXJ0eSwgbGF0ZVNjcmF0Y2gyKTsKKyAg
ICBKdW1wIGluQm91bmRzID0gYnJhbmNoMzIoQmVsb3csIHByb3BlcnR5LCBBZGRyZXNzKGJhc2Us
IEpTQXJyYXlCdWZmZXJWaWV3OjpvZmZzZXRPZkxlbmd0aCgpKSk7CiAgICAgZW1pdEFycmF5UHJv
ZmlsZU91dE9mQm91bmRzU3BlY2lhbENhc2UocHJvZmlsZSk7CiAgICAgc2xvd0Nhc2VzLmFwcGVu
ZChqdW1wKCkpOwogICAgIGluQm91bmRzLmxpbmsodGhpcyk7CkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvaml0L1BvbHltb3JwaGljQ2FsbFN0dWJSb3V0aW5lLmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L1BvbHltb3JwaGljQ2FsbFN0dWJSb3V0aW5lLmNw
cAkocmV2aXNpb24gMjQ2MjcxKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9Qb2x5bW9y
cGhpY0NhbGxTdHViUm91dGluZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTU3LDYgKzU3LDkgQEAg
dm9pZCBQb2x5bW9ycGhpY0NhbGxOb2RlOjp1bmxpbmsoVk0mIHZtKQogCiB2b2lkIFBvbHltb3Jw
aGljQ2FsbE5vZGU6OmNsZWFyQ2FsbExpbmtJbmZvKCkKIHsKKyAgICBpZiAoT3B0aW9uczo6ZHVt
cERpc2Fzc2VtYmx5KCkpCisgICAgICAgIGRhdGFMb2coIkNsZWFyaW5nIGNhbGwgbGluayBpbmZv
IGZvciBwb2x5bW9ycGhpYyBjYWxsIGF0ICIsIG1fY2FsbExpbmtJbmZvLT5jYWxsUmV0dXJuTG9j
YXRpb24oKSwgIiwgIiwgbV9jYWxsTGlua0luZm8tPmNvZGVPcmlnaW4oKSwgIlxuIik7CisKICAg
ICBtX2NhbGxMaW5rSW5mbyA9IG51bGxwdHI7CiB9CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9qaXQvUmVnaXN0ZXJTZXQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvaml0L1JlZ2lzdGVyU2V0LmgJKHJldmlzaW9uIDI0NjI3MSkKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9qaXQvUmVnaXN0ZXJTZXQuaAkod29ya2luZyBjb3B5KQpAQCAtODQsOSArODQsNyBA
QCBwdWJsaWM6CiAgICAgICAgICAgICBzZXQocmVncy50YWdHUFIoKSwgdmFsdWUpOwogICAgICAg
ICBzZXQocmVncy5wYXlsb2FkR1BSKCksIHZhbHVlKTsKICAgICB9Ci0KLSAgICB2b2lkIHNldChj
b25zdCBSZWdpc3RlclNldCYgb3RoZXIsIGJvb2wgdmFsdWUgPSB0cnVlKSB7IHZhbHVlID8gbWVy
Z2Uob3RoZXIpIDogZXhjbHVkZShvdGhlcik7IH0KLQorICAgIAogICAgIHZvaWQgY2xlYXIoUmVn
IHJlZykKICAgICB7CiAgICAgICAgIEFTU0VSVCghIXJlZyk7CkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvbGxpbnQvTG93TGV2ZWxJbnRlcnByZXRlcjY0LmFzbQo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvbGxpbnQvTG93TGV2ZWxJbnRlcnByZXRlcjY0LmFzbQkocmV2
aXNpb24gMjQ2MjcxKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2xsaW50L0xvd0xldmVsSW50
ZXJwcmV0ZXI2NC5hc20JKHdvcmtpbmcgY29weSkKQEAgLTQyMiwyOSArNDIyLDIwIEBAIG1hY3Jv
IGNoZWNrU3dpdGNoVG9KSVRGb3JMb29wKCkKICAgICAgICAgZW5kKQogZW5kCiAKLW1hY3JvIHVu
Y2FnZShiYXNlUHRyLCBtYXNrLCBwdHIsIHNjcmF0Y2hPckxlbmd0aCkKLSAgICBpZiBHSUdBQ0FH
RV9FTkFCTEVEIGFuZCBub3QgKENfTE9PUCBvciBDX0xPT1BfV0lOKQotICAgICAgICBsb2FkcCBi
YXNlUHRyLCBzY3JhdGNoT3JMZW5ndGgKLSAgICAgICAgYnRweiBzY3JhdGNoT3JMZW5ndGgsIC5k
b25lCittYWNybyB1bmNhZ2UoYmFzZVB0ciwgbWFzaywgcHRyLCBzY3JhdGNoKQorICAgIGlmIEdJ
R0FDQUdFX0VOQUJMRUQgYW5kIG5vdCBDX0xPT1AKKyAgICAgICAgbG9hZHAgYmFzZVB0ciwgc2Ny
YXRjaAorICAgICAgICBidHB6IHNjcmF0Y2gsIC5kb25lCiAgICAgICAgIGFuZHAgbWFzaywgcHRy
Ci0gICAgICAgIGFkZHAgc2NyYXRjaE9yTGVuZ3RoLCBwdHIKLSAgICAuZG9uZToKLSAgICBlbmQK
LWVuZAotCi1tYWNybyBsb2FkQ2FnZWRQcmltaXRpdmUoc291cmNlLCBkZXN0LCBzY3JhdGNoT3JM
ZW5ndGgpCi0gICAgbG9hZHAgc291cmNlLCBkZXN0Ci0gICAgaWYgR0lHQUNBR0VfRU5BQkxFRAot
ICAgICAgICB1bmNhZ2UoX2dfZ2lnYWNhZ2VCYXNlUHRycyArIEdpZ2FjYWdlOjpCYXNlUHRyczo6
cHJpbWl0aXZlLCBjb25zdGV4cHIgR2lnYWNhZ2U6OnByaW1pdGl2ZUdpZ2FjYWdlTWFzaywgZGVz
dCwgc2NyYXRjaE9yTGVuZ3RoKQotICAgIGVsc2lmIEFSTTY0RQotICAgICAgICB1bnRhZ0FycmF5
UHRyIHNjcmF0Y2hPckxlbmd0aCwgZGVzdAorICAgICAgICBhZGRwIHNjcmF0Y2gsIHB0cgorICAg
ICAgICAuZG9uZToKICAgICBlbmQKIGVuZAogCi1tYWNybyBsb2FkQ2FnZWRKU1ZhbHVlKHNvdXJj
ZSwgZGVzdCwgc2NyYXRjaE9yTGVuZ3RoKQorbWFjcm8gbG9hZENhZ2VkKGJhc2VQdHIsIG1hc2ss
IHNvdXJjZSwgZGVzdCwgc2NyYXRjaCkKICAgICBsb2FkcCBzb3VyY2UsIGRlc3QKLSAgICB1bmNh
Z2UoX2dfZ2lnYWNhZ2VCYXNlUHRycyArIEdpZ2FjYWdlOjpCYXNlUHRyczo6anNWYWx1ZSwgY29u
c3RleHByIEdpZ2FjYWdlOjpqc1ZhbHVlR2lnYWNhZ2VNYXNrLCBkZXN0LCBzY3JhdGNoT3JMZW5n
dGgpCi1lbmQKKyAgICB1bmNhZ2UoYmFzZVB0ciwgbWFzaywgZGVzdCwgc2NyYXRjaCkKKyBlbmQK
IAogbWFjcm8gbG9hZFZhcmlhYmxlKGdldCwgZmllbGROYW1lLCB2YWx1ZVJlZykKICAgICBnZXQo
ZmllbGROYW1lLCB2YWx1ZVJlZykKQEAgLTEzNDQsNyArMTMzNSw3IEBAIGxsaW50T3BXaXRoTWV0
YWRhdGEob3BfZ2V0X2J5X2lkLCBPcEdldEIKICAgICBhcnJheVByb2ZpbGUoT3BHZXRCeUlkOjpN
ZXRhZGF0YTo6bV9tb2RlTWV0YWRhdGEuYXJyYXlMZW5ndGhNb2RlLmFycmF5UHJvZmlsZSwgdDAs
IHQyLCB0NSkKICAgICBidGl6IHQwLCBJc0FycmF5LCAub3BHZXRCeUlkU2xvdwogICAgIGJ0aXog
dDAsIEluZGV4aW5nU2hhcGVNYXNrLCAub3BHZXRCeUlkU2xvdwotICAgIGxvYWRDYWdlZEpTVmFs
dWUoSlNPYmplY3Q6Om1fYnV0dGVyZmx5W3QzXSwgdDAsIHQxKQorICAgIGxvYWRDYWdlZChfZ19n
aWdhY2FnZUJhc2VQdHJzICsgR2lnYWNhZ2U6OkJhc2VQdHJzOjpqc1ZhbHVlLCBjb25zdGV4cHIg
R2lnYWNhZ2U6OmpzVmFsdWVHaWdhY2FnZU1hc2ssIEpTT2JqZWN0OjptX2J1dHRlcmZseVt0M10s
IHQwLCB0MSkKICAgICBsb2FkaSAtc2l6ZW9mIEluZGV4aW5nSGVhZGVyICsgSW5kZXhpbmdIZWFk
ZXI6OnUubGVuZ3Rocy5wdWJsaWNMZW5ndGhbdDBdLCB0MAogICAgIGJpbHQgdDAsIDAsIC5vcEdl
dEJ5SWRTbG93CiAgICAgb3JxIHRhZ1R5cGVOdW1iZXIsIHQwCkBAIC0xNDY3LDcgKzE0NTgsNyBA
QCBsbGludE9wV2l0aE1ldGFkYXRhKG9wX2dldF9ieV92YWwsIE9wR2V0CiAgICAgbG9hZENvbnN0
YW50T3JWYXJpYWJsZUludDMyKHNpemUsIHQzLCB0MSwgLm9wR2V0QnlWYWxTbG93KQogICAgIHN4
aTJxIHQxLCB0MQogCi0gICAgbG9hZENhZ2VkSlNWYWx1ZShKU09iamVjdDo6bV9idXR0ZXJmbHlb
dDBdLCB0MywgdGFnVHlwZU51bWJlcikKKyAgICBsb2FkQ2FnZWQoX2dfZ2lnYWNhZ2VCYXNlUHRy
cyArIEdpZ2FjYWdlOjpCYXNlUHRyczo6anNWYWx1ZSwgY29uc3RleHByIEdpZ2FjYWdlOjpqc1Zh
bHVlR2lnYWNhZ2VNYXNrLCBKU09iamVjdDo6bV9idXR0ZXJmbHlbdDBdLCB0MywgdGFnVHlwZU51
bWJlcikKICAgICBtb3ZlIFRhZ1R5cGVOdW1iZXIsIHRhZ1R5cGVOdW1iZXIKIAogICAgIGFuZGkg
SW5kZXhpbmdTaGFwZU1hc2ssIHQyCkBAIC0xNTExLDE3ICsxNTAyLDcgQEAgbGxpbnRPcFdpdGhN
ZXRhZGF0YShvcF9nZXRfYnlfdmFsLCBPcEdldAogICAgIGJpYWVxIHQyLCBOdW1iZXJPZlR5cGVk
QXJyYXlUeXBlc0V4Y2x1ZGluZ0RhdGFWaWV3LCAub3BHZXRCeVZhbFNsb3cKICAgICAKICAgICAj
IFN3ZWV0LCBub3cgd2Uga25vdyB0aGF0IHdlIGhhdmUgYSB0eXBlZCBhcnJheS4gRG8gc29tZSBi
YXNpYyB0aGluZ3Mgbm93LgotCi0gICAgaWYgQVJNNjRFCi0gICAgICAgIGNvbnN0IHNjcmF0Y2hP
ckxlbmd0aCA9IHQ2Ci0gICAgICAgIGxvYWRpIEpTQXJyYXlCdWZmZXJWaWV3OjptX2xlbmd0aFt0
MF0sIHNjcmF0Y2hPckxlbmd0aAotICAgICAgICBiaWFlcSB0MSwgc2NyYXRjaE9yTGVuZ3RoLCAu
b3BHZXRCeVZhbFNsb3cKLSAgICBlbHNlCi0gICAgICAgIGNvbnN0IHNjcmF0Y2hPckxlbmd0aCA9
IHQwCi0gICAgICAgIGJpYWVxIHQxLCBKU0FycmF5QnVmZmVyVmlldzo6bV9sZW5ndGhbdDBdLCAu
b3BHZXRCeVZhbFNsb3cKLSAgICBlbmQKLQotICAgIGxvYWRDYWdlZFByaW1pdGl2ZShKU0FycmF5
QnVmZmVyVmlldzo6bV92ZWN0b3JbdDBdLCB0Mywgc2NyYXRjaE9yTGVuZ3RoKQorICAgIGJpYWVx
IHQxLCBKU0FycmF5QnVmZmVyVmlldzo6bV9sZW5ndGhbdDBdLCAub3BHZXRCeVZhbFNsb3cKIAog
ICAgICMgTm93IGJpc2VjdCB0aHJvdWdoIHRoZSB2YXJpb3VzIHR5cGVzOgogICAgICMgICAgSW50
OEFycmF5VHlwZSwKQEAgLTE1NDMsNiArMTUyNCw3IEBAIGxsaW50T3BXaXRoTWV0YWRhdGEob3Bf
Z2V0X2J5X3ZhbCwgT3BHZXQKICAgICBiaWEgdDIsIEludDhBcnJheVR5cGUgLSBGaXJzdFR5cGVk
QXJyYXlUeXBlLCAub3BHZXRCeVZhbFVpbnQ4QXJyYXlPclVpbnQ4Q2xhbXBlZEFycmF5CiAKICAg
ICAjIFdlIGhhdmUgSW50OEFycmF5VHlwZS4KKyAgICBsb2FkQ2FnZWQoX2dfZ2lnYWNhZ2VCYXNl
UHRycyArIEdpZ2FjYWdlOjpCYXNlUHRyczo6cHJpbWl0aXZlLCBjb25zdGV4cHIgR2lnYWNhZ2U6
OnByaW1pdGl2ZUdpZ2FjYWdlTWFzaywgSlNBcnJheUJ1ZmZlclZpZXc6Om1fdmVjdG9yW3QwXSwg
dDMsIHQyKQogICAgIGxvYWRic2kgW3QzLCB0MV0sIHQwCiAgICAgZmluaXNoSW50R2V0QnlWYWwo
dDAsIHQxKQogCkBAIC0xNTUwLDExICsxNTMyLDEzIEBAIGxsaW50T3BXaXRoTWV0YWRhdGEob3Bf
Z2V0X2J5X3ZhbCwgT3BHZXQKICAgICBiaWEgdDIsIFVpbnQ4QXJyYXlUeXBlIC0gRmlyc3RUeXBl
ZEFycmF5VHlwZSwgLm9wR2V0QnlWYWxVaW50OENsYW1wZWRBcnJheQogCiAgICAgIyBXZSBoYXZl
IFVpbnQ4QXJyYXlUeXBlLgorICAgIGxvYWRDYWdlZChfZ19naWdhY2FnZUJhc2VQdHJzICsgR2ln
YWNhZ2U6OkJhc2VQdHJzOjpwcmltaXRpdmUsIGNvbnN0ZXhwciBHaWdhY2FnZTo6cHJpbWl0aXZl
R2lnYWNhZ2VNYXNrLCBKU0FycmF5QnVmZmVyVmlldzo6bV92ZWN0b3JbdDBdLCB0MywgdDIpCiAg
ICAgbG9hZGIgW3QzLCB0MV0sIHQwCiAgICAgZmluaXNoSW50R2V0QnlWYWwodDAsIHQxKQogCiAu
b3BHZXRCeVZhbFVpbnQ4Q2xhbXBlZEFycmF5OgogICAgICMgV2UgaGF2ZSBVaW50OENsYW1wZWRB
cnJheVR5cGUuCisgICAgbG9hZENhZ2VkKF9nX2dpZ2FjYWdlQmFzZVB0cnMgKyBHaWdhY2FnZTo6
QmFzZVB0cnM6OnByaW1pdGl2ZSwgY29uc3RleHByIEdpZ2FjYWdlOjpwcmltaXRpdmVHaWdhY2Fn
ZU1hc2ssIEpTQXJyYXlCdWZmZXJWaWV3OjptX3ZlY3Rvclt0MF0sIHQzLCB0MikKICAgICBsb2Fk
YiBbdDMsIHQxXSwgdDAKICAgICBmaW5pc2hJbnRHZXRCeVZhbCh0MCwgdDEpCiAKQEAgLTE1NjMs
MTEgKzE1NDcsMTMgQEAgbGxpbnRPcFdpdGhNZXRhZGF0YShvcF9nZXRfYnlfdmFsLCBPcEdldAog
ICAgIGJpYSB0MiwgSW50MTZBcnJheVR5cGUgLSBGaXJzdFR5cGVkQXJyYXlUeXBlLCAub3BHZXRC
eVZhbFVpbnQxNkFycmF5CiAKICAgICAjIFdlIGhhdmUgSW50MTZBcnJheVR5cGUuCisgICAgbG9h
ZENhZ2VkKF9nX2dpZ2FjYWdlQmFzZVB0cnMgKyBHaWdhY2FnZTo6QmFzZVB0cnM6OnByaW1pdGl2
ZSwgY29uc3RleHByIEdpZ2FjYWdlOjpwcmltaXRpdmVHaWdhY2FnZU1hc2ssIEpTQXJyYXlCdWZm
ZXJWaWV3OjptX3ZlY3Rvclt0MF0sIHQzLCB0MikKICAgICBsb2FkaHNpIFt0MywgdDEsIDJdLCB0
MAogICAgIGZpbmlzaEludEdldEJ5VmFsKHQwLCB0MSkKIAogLm9wR2V0QnlWYWxVaW50MTZBcnJh
eToKICAgICAjIFdlIGhhdmUgVWludDE2QXJyYXlUeXBlLgorICAgIGxvYWRDYWdlZChfZ19naWdh
Y2FnZUJhc2VQdHJzICsgR2lnYWNhZ2U6OkJhc2VQdHJzOjpwcmltaXRpdmUsIGNvbnN0ZXhwciBH
aWdhY2FnZTo6cHJpbWl0aXZlR2lnYWNhZ2VNYXNrLCBKU0FycmF5QnVmZmVyVmlldzo6bV92ZWN0
b3JbdDBdLCB0MywgdDIpCiAgICAgbG9hZGggW3QzLCB0MSwgMl0sIHQwCiAgICAgZmluaXNoSW50
R2V0QnlWYWwodDAsIHQxKQogCkBAIC0xNTc5LDExICsxNTY1LDEzIEBAIGxsaW50T3BXaXRoTWV0
YWRhdGEob3BfZ2V0X2J5X3ZhbCwgT3BHZXQKICAgICBiaWEgdDIsIEludDMyQXJyYXlUeXBlIC0g
Rmlyc3RUeXBlZEFycmF5VHlwZSwgLm9wR2V0QnlWYWxVaW50MzJBcnJheQogCiAgICAgIyBXZSBo
YXZlIEludDMyQXJyYXlUeXBlLgorICAgIGxvYWRDYWdlZChfZ19naWdhY2FnZUJhc2VQdHJzICsg
R2lnYWNhZ2U6OkJhc2VQdHJzOjpwcmltaXRpdmUsIGNvbnN0ZXhwciBHaWdhY2FnZTo6cHJpbWl0
aXZlR2lnYWNhZ2VNYXNrLCBKU0FycmF5QnVmZmVyVmlldzo6bV92ZWN0b3JbdDBdLCB0MywgdDIp
CiAgICAgbG9hZGkgW3QzLCB0MSwgNF0sIHQwCiAgICAgZmluaXNoSW50R2V0QnlWYWwodDAsIHQx
KQogCiAub3BHZXRCeVZhbFVpbnQzMkFycmF5OgogICAgICMgV2UgaGF2ZSBVaW50MzJBcnJheVR5
cGUuCisgICAgbG9hZENhZ2VkKF9nX2dpZ2FjYWdlQmFzZVB0cnMgKyBHaWdhY2FnZTo6QmFzZVB0
cnM6OnByaW1pdGl2ZSwgY29uc3RleHByIEdpZ2FjYWdlOjpwcmltaXRpdmVHaWdhY2FnZU1hc2ss
IEpTQXJyYXlCdWZmZXJWaWV3OjptX3ZlY3Rvclt0MF0sIHQzLCB0MikKICAgICAjIFRoaXMgaXMg
dGhlIGhhcmRlc3QgcGFydCBiZWNhdXNlIG9mIGxhcmdlIHVuc2lnbmVkIHZhbHVlcy4KICAgICBs
b2FkaSBbdDMsIHQxLCA0XSwgdDAKICAgICBiaWx0IHQwLCAwLCAub3BHZXRCeVZhbFNsb3cgIyBU
aGlzIGNhc2UgaXMgc3RpbGwgYXdrd2FyZCB0byBpbXBsZW1lbnQgaW4gTExJbnQuCkBAIC0xNTk1
LDYgKzE1ODMsNyBAQCBsbGludE9wV2l0aE1ldGFkYXRhKG9wX2dldF9ieV92YWwsIE9wR2V0CiAg
ICAgYmllcSB0MiwgRmxvYXQzMkFycmF5VHlwZSAtIEZpcnN0VHlwZWRBcnJheVR5cGUsIC5vcEdl
dEJ5VmFsU2xvdwogCiAgICAgIyBXZSBoYXZlIEZsb2F0NjRBcnJheVR5cGUuCisgICAgbG9hZENh
Z2VkKF9nX2dpZ2FjYWdlQmFzZVB0cnMgKyBHaWdhY2FnZTo6QmFzZVB0cnM6OnByaW1pdGl2ZSwg
Y29uc3RleHByIEdpZ2FjYWdlOjpwcmltaXRpdmVHaWdhY2FnZU1hc2ssIEpTQXJyYXlCdWZmZXJW
aWV3OjptX3ZlY3Rvclt0MF0sIHQzLCB0MikKICAgICBsb2FkZCBbdDMsIHQxLCA4XSwgZnQwCiAg
ICAgYmRuZXF1biBmdDAsIGZ0MCwgLm9wR2V0QnlWYWxTbG93CiAgICAgZmluaXNoRG91YmxlR2V0
QnlWYWwoZnQwLCB0MCwgdDEpCkBAIC0xNjMwLDcgKzE2MTksNyBAQCBtYWNybyBwdXRCeVZhbE9w
KG9wY29kZU5hbWUsIG9wY29kZVN0cnVjCiAgICAgICAgIGdldChtX3Byb3BlcnR5LCB0MCkKICAg
ICAgICAgbG9hZENvbnN0YW50T3JWYXJpYWJsZUludDMyKHNpemUsIHQwLCB0MywgLm9wUHV0QnlW
YWxTbG93KQogICAgICAgICBzeGkycSB0MywgdDMKLSAgICAgICAgbG9hZENhZ2VkSlNWYWx1ZShK
U09iamVjdDo6bV9idXR0ZXJmbHlbdDFdLCB0MCwgdGFnVHlwZU51bWJlcikKKyAgICAgICAgbG9h
ZENhZ2VkKF9nX2dpZ2FjYWdlQmFzZVB0cnMgKyBHaWdhY2FnZTo6QmFzZVB0cnM6OmpzVmFsdWUs
IGNvbnN0ZXhwciBHaWdhY2FnZTo6anNWYWx1ZUdpZ2FjYWdlTWFzaywgSlNPYmplY3Q6Om1fYnV0
dGVyZmx5W3QxXSwgdDAsIHRhZ1R5cGVOdW1iZXIpCiAgICAgICAgIG1vdmUgVGFnVHlwZU51bWJl
ciwgdGFnVHlwZU51bWJlcgogICAgICAgICBidGlueiB0MiwgQ29weU9uV3JpdGUsIC5vcFB1dEJ5
VmFsU2xvdwogICAgICAgICBhbmRpIEluZGV4aW5nU2hhcGVNYXNrLCB0MgpJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQXJyYXlCdWZmZXIuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0FycmF5QnVmZmVyLmNwcAkocmV2aXNpb24gMjQ2
MjcxKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQXJyYXlCdWZmZXIuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC0zMywxNyArMzMsMTUgQEAKIAogbmFtZXNwYWNlIEpTQyB7CiAKLVNo
YXJlZEFycmF5QnVmZmVyQ29udGVudHM6OlNoYXJlZEFycmF5QnVmZmVyQ29udGVudHModm9pZCog
ZGF0YSwgdW5zaWduZWQgc2l6ZSwgQXJyYXlCdWZmZXJEZXN0cnVjdG9yRnVuY3Rpb24mJiBkZXN0
cnVjdG9yKQotICAgIDogbV9kYXRhKGRhdGEsIHNpemUpCitTaGFyZWRBcnJheUJ1ZmZlckNvbnRl
bnRzOjpTaGFyZWRBcnJheUJ1ZmZlckNvbnRlbnRzKHZvaWQqIGRhdGEsIEFycmF5QnVmZmVyRGVz
dHJ1Y3RvckZ1bmN0aW9uJiYgZGVzdHJ1Y3RvcikKKyAgICA6IG1fZGF0YShkYXRhKQogICAgICwg
bV9kZXN0cnVjdG9yKFdURk1vdmUoZGVzdHJ1Y3RvcikpCi0gICAgLCBtX3NpemVJbkJ5dGVzKHNp
emUpCiB7CiB9CiAKIFNoYXJlZEFycmF5QnVmZmVyQ29udGVudHM6On5TaGFyZWRBcnJheUJ1ZmZl
ckNvbnRlbnRzKCkKIHsKLSAgICAvLyBGSVhNRTogd2Ugc2hvdWxkbid0IHVzZSBnZXRVbnNhZmUg
aGVyZSBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTk3Njk4Ci0gICAg
bV9kZXN0cnVjdG9yKG1fZGF0YS5nZXRVbnNhZmUoKSk7CisgICAgbV9kZXN0cnVjdG9yKG1fZGF0
YS5nZXRNYXlCZU51bGwoKSk7CiB9CiAKIEFycmF5QnVmZmVyQ29udGVudHM6OkFycmF5QnVmZmVy
Q29udGVudHMoKQpAQCAtNTgsNyArNTYsNyBAQCBBcnJheUJ1ZmZlckNvbnRlbnRzOjpBcnJheUJ1
ZmZlckNvbnRlbnRzCiB9CiAKIEFycmF5QnVmZmVyQ29udGVudHM6OkFycmF5QnVmZmVyQ29udGVu
dHModm9pZCogZGF0YSwgdW5zaWduZWQgc2l6ZUluQnl0ZXMsIEFycmF5QnVmZmVyRGVzdHJ1Y3Rv
ckZ1bmN0aW9uJiYgZGVzdHJ1Y3RvcikKLSAgICA6IG1fZGF0YShkYXRhLCBzaXplSW5CeXRlcykK
KyAgICA6IG1fZGF0YShkYXRhKQogICAgICwgbV9zaXplSW5CeXRlcyhzaXplSW5CeXRlcykKIHsK
ICAgICBSRUxFQVNFX0FTU0VSVChtX3NpemVJbkJ5dGVzIDw9IE1BWF9BUlJBWV9CVUZGRVJfU0la
RSk7CkBAIC04NCw4ICs4Miw3IEBAIHZvaWQgQXJyYXlCdWZmZXJDb250ZW50czo6Y2xlYXIoKQog
CiB2b2lkIEFycmF5QnVmZmVyQ29udGVudHM6OmRlc3Ryb3koKQogewotICAgIC8vIEZJWE1FOiBX
ZSBzaG91bGRuJ3QgdXNlIGdldFVuc2FmZSBoZXJlOiBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9z
aG93X2J1Zy5jZ2k/aWQ9MTk3Njk4Ci0gICAgbV9kZXN0cnVjdG9yKG1fZGF0YS5nZXRVbnNhZmUo
KSk7CisgICAgbV9kZXN0cnVjdG9yKG1fZGF0YS5nZXRNYXlCZU51bGwoKSk7CiB9CiAKIHZvaWQg
QXJyYXlCdWZmZXJDb250ZW50czo6cmVzZXQoKQpAQCAtMTA2LDI5ICsxMDMsMjYgQEAgdm9pZCBB
cnJheUJ1ZmZlckNvbnRlbnRzOjp0cnlBbGxvY2F0ZSh1bgogICAgICAgICAgICAgcmV0dXJuOwog
ICAgICAgICB9CiAgICAgfQotICAgIHNpemVfdCBzaXplSW5CeXRlcyA9IHN0YXRpY19jYXN0PHNp
emVfdD4obnVtRWxlbWVudHMpICogc3RhdGljX2Nhc3Q8c2l6ZV90PihlbGVtZW50Qnl0ZVNpemUp
OwotICAgIHNpemVfdCBhbGxvY2F0aW9uU2l6ZSA9IHNpemVJbkJ5dGVzOwotICAgIGlmICghYWxs
b2NhdGlvblNpemUpCi0gICAgICAgIGFsbG9jYXRpb25TaXplID0gMTsgLy8gTWFrZSBzdXJlIG1h
bGxvYyBhY3R1YWxseSBhbGxvY2F0ZXMgc29tZXRoaW5nLCBidXQgbm90IHRvbyBtdWNoLiBXZSB1
c2UgbnVsbCB0byBtZWFuIHRoYXQgdGhlIGJ1ZmZlciBpcyBuZXV0ZXJlZC4KLQotICAgIHZvaWQq
IGRhdGEgPSBHaWdhY2FnZTo6dHJ5TWFsbG9jKEdpZ2FjYWdlOjpQcmltaXRpdmUsIGFsbG9jYXRp
b25TaXplKTsKLSAgICBtX2RhdGEgPSBEYXRhVHlwZShkYXRhLCBzaXplSW5CeXRlcyk7Ci0gICAg
aWYgKCFkYXRhKSB7CisgICAgc2l6ZV90IHNpemUgPSBzdGF0aWNfY2FzdDxzaXplX3Q+KG51bUVs
ZW1lbnRzKSAqIHN0YXRpY19jYXN0PHNpemVfdD4oZWxlbWVudEJ5dGVTaXplKTsKKyAgICBpZiAo
IXNpemUpCisgICAgICAgIHNpemUgPSAxOyAvLyBNYWtlIHN1cmUgbWFsbG9jIGFjdHVhbGx5IGFs
bG9jYXRlcyBzb21ldGhpbmcsIGJ1dCBub3QgdG9vIG11Y2guIFdlIHVzZSBudWxsIHRvIG1lYW4g
dGhhdCB0aGUgYnVmZmVyIGlzIG5ldXRlcmVkLgorICAgIG1fZGF0YSA9IEdpZ2FjYWdlOjp0cnlN
YWxsb2MoR2lnYWNhZ2U6OlByaW1pdGl2ZSwgc2l6ZSk7CisgICAgaWYgKCFtX2RhdGEpIHsKICAg
ICAgICAgcmVzZXQoKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KICAgICAKICAgICBpZiAocG9s
aWN5ID09IFplcm9Jbml0aWFsaXplKQotICAgICAgICBtZW1zZXQoZGF0YSwgMCwgYWxsb2NhdGlv
blNpemUpOworICAgICAgICBtZW1zZXQobV9kYXRhLmdldCgpLCAwLCBzaXplKTsKIAotICAgIG1f
c2l6ZUluQnl0ZXMgPSBzaXplSW5CeXRlczsKKyAgICBtX3NpemVJbkJ5dGVzID0gbnVtRWxlbWVu
dHMgKiBlbGVtZW50Qnl0ZVNpemU7CiAgICAgUkVMRUFTRV9BU1NFUlQobV9zaXplSW5CeXRlcyA8
PSBNQVhfQVJSQVlfQlVGRkVSX1NJWkUpOwogICAgIG1fZGVzdHJ1Y3RvciA9IFtdICh2b2lkKiBw
KSB7IEdpZ2FjYWdlOjpmcmVlKEdpZ2FjYWdlOjpQcmltaXRpdmUsIHApOyB9OwogfQogCiB2b2lk
IEFycmF5QnVmZmVyQ29udGVudHM6Om1ha2VTaGFyZWQoKQogewotICAgIG1fc2hhcmVkID0gYWRv
cHRSZWYobmV3IFNoYXJlZEFycmF5QnVmZmVyQ29udGVudHMoZGF0YSgpLCBzaXplSW5CeXRlcygp
LCBXVEZNb3ZlKG1fZGVzdHJ1Y3RvcikpKTsKKyAgICBtX3NoYXJlZCA9IGFkb3B0UmVmKG5ldyBT
aGFyZWRBcnJheUJ1ZmZlckNvbnRlbnRzKG1fZGF0YS5nZXRNYXlCZU51bGwoKSwgV1RGTW92ZSht
X2Rlc3RydWN0b3IpKSk7CiAgICAgbV9kZXN0cnVjdG9yID0gW10gKHZvaWQqKSB7IH07CiB9CiAK
QEAgLTE0OSw3ICsxNDMsNyBAQCB2b2lkIEFycmF5QnVmZmVyQ29udGVudHM6OmNvcHlUbyhBcnJh
eUJ1CiAgICAgb3RoZXIudHJ5QWxsb2NhdGUobV9zaXplSW5CeXRlcywgc2l6ZW9mKGNoYXIpLCBB
cnJheUJ1ZmZlckNvbnRlbnRzOjpEb250SW5pdGlhbGl6ZSk7CiAgICAgaWYgKCFvdGhlci5tX2Rh
dGEpCiAgICAgICAgIHJldHVybjsKLSAgICBtZW1jcHkob3RoZXIuZGF0YSgpLCBkYXRhKCksIG1f
c2l6ZUluQnl0ZXMpOworICAgIG1lbWNweShvdGhlci5tX2RhdGEuZ2V0KCksIG1fZGF0YS5nZXQo
KSwgbV9zaXplSW5CeXRlcyk7CiAgICAgb3RoZXIubV9zaXplSW5CeXRlcyA9IG1fc2l6ZUluQnl0
ZXM7CiAgICAgUkVMRUFTRV9BU1NFUlQob3RoZXIubV9zaXplSW5CeXRlcyA8PSBNQVhfQVJSQVlf
QlVGRkVSX1NJWkUpOwogfQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQXJy
YXlCdWZmZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9B
cnJheUJ1ZmZlci5oCShyZXZpc2lvbiAyNDYyNzEpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
cnVudGltZS9BcnJheUJ1ZmZlci5oCSh3b3JraW5nIGNvcHkpCkBAIC00OCwxNiArNDgsMTQgQEAg
dHlwZWRlZiBGdW5jdGlvbjx2b2lkKHZvaWQqKT4gQXJyYXlCdWZmZQogCiBjbGFzcyBTaGFyZWRB
cnJheUJ1ZmZlckNvbnRlbnRzIDogcHVibGljIFRocmVhZFNhZmVSZWZDb3VudGVkPFNoYXJlZEFy
cmF5QnVmZmVyQ29udGVudHM+IHsKIHB1YmxpYzoKLSAgICBTaGFyZWRBcnJheUJ1ZmZlckNvbnRl
bnRzKHZvaWQqIGRhdGEsIHVuc2lnbmVkIHNpemUsIEFycmF5QnVmZmVyRGVzdHJ1Y3RvckZ1bmN0
aW9uJiYpOworICAgIFNoYXJlZEFycmF5QnVmZmVyQ29udGVudHModm9pZCogZGF0YSwgQXJyYXlC
dWZmZXJEZXN0cnVjdG9yRnVuY3Rpb24mJik7CiAgICAgflNoYXJlZEFycmF5QnVmZmVyQ29udGVu
dHMoKTsKICAgICAKLSAgICB2b2lkKiBkYXRhKCkgY29uc3QgeyByZXR1cm4gbV9kYXRhLmdldE1h
eUJlTnVsbChtX3NpemVJbkJ5dGVzKTsgfQorICAgIHZvaWQqIGRhdGEoKSBjb25zdCB7IHJldHVy
biBtX2RhdGEuZ2V0TWF5QmVOdWxsKCk7IH0KICAgICAKIHByaXZhdGU6Ci0gICAgdXNpbmcgRGF0
YVR5cGUgPSBDYWdlZFB0cjxHaWdhY2FnZTo6UHJpbWl0aXZlLCB2b2lkLCB0YWdDYWdlZFB0cj47
Ci0gICAgRGF0YVR5cGUgbV9kYXRhOworICAgIENhZ2VkUHRyPEdpZ2FjYWdlOjpQcmltaXRpdmUs
IHZvaWQ+IG1fZGF0YTsKICAgICBBcnJheUJ1ZmZlckRlc3RydWN0b3JGdW5jdGlvbiBtX2Rlc3Ry
dWN0b3I7Ci0gICAgdW5zaWduZWQgbV9zaXplSW5CeXRlczsKIH07CiAKIGNsYXNzIEFycmF5QnVm
ZmVyQ29udGVudHMgewpAQCAtNzUsNyArNzMsNyBAQCBwdWJsaWM6CiAgICAgCiAgICAgZXhwbGlj
aXQgb3BlcmF0b3IgYm9vbCgpIHsgcmV0dXJuICEhbV9kYXRhOyB9CiAgICAgCi0gICAgdm9pZCog
ZGF0YSgpIGNvbnN0IHsgcmV0dXJuIG1fZGF0YS5nZXRNYXlCZU51bGwoc2l6ZUluQnl0ZXMoKSk7
IH0KKyAgICB2b2lkKiBkYXRhKCkgY29uc3QgeyByZXR1cm4gbV9kYXRhLmdldE1heUJlTnVsbCgp
OyB9CiAgICAgdW5zaWduZWQgc2l6ZUluQnl0ZXMoKSBjb25zdCB7IHJldHVybiBtX3NpemVJbkJ5
dGVzOyB9CiAgICAgCiAgICAgYm9vbCBpc1NoYXJlZCgpIGNvbnN0IHsgcmV0dXJuIG1fc2hhcmVk
OyB9CkBAIC0xMDAsOCArOTgsNyBAQCBwcml2YXRlOgogCiAgICAgQXJyYXlCdWZmZXJEZXN0cnVj
dG9yRnVuY3Rpb24gbV9kZXN0cnVjdG9yOwogICAgIFJlZlB0cjxTaGFyZWRBcnJheUJ1ZmZlckNv
bnRlbnRzPiBtX3NoYXJlZDsKLSAgICB1c2luZyBEYXRhVHlwZSA9IENhZ2VkUHRyPEdpZ2FjYWdl
OjpQcmltaXRpdmUsIHZvaWQsIHRhZ0NhZ2VkUHRyPjsKLSAgICBEYXRhVHlwZSBtX2RhdGE7Cisg
ICAgQ2FnZWRQdHI8R2lnYWNhZ2U6OlByaW1pdGl2ZSwgdm9pZD4gbV9kYXRhOwogICAgIHVuc2ln
bmVkIG1fc2l6ZUluQnl0ZXM7CiB9OwogCkBAIC0xNzcsMTcgKzE3NCwxNyBAQCBwdWJsaWM6CiAK
IHZvaWQqIEFycmF5QnVmZmVyOjpkYXRhKCkKIHsKLSAgICByZXR1cm4gbV9jb250ZW50cy5kYXRh
KCk7CisgICAgcmV0dXJuIG1fY29udGVudHMubV9kYXRhLmdldE1heUJlTnVsbCgpOwogfQogCiBj
b25zdCB2b2lkKiBBcnJheUJ1ZmZlcjo6ZGF0YSgpIGNvbnN0CiB7Ci0gICAgcmV0dXJuIG1fY29u
dGVudHMuZGF0YSgpOworICAgIHJldHVybiBtX2NvbnRlbnRzLm1fZGF0YS5nZXRNYXlCZU51bGwo
KTsKIH0KIAogdW5zaWduZWQgQXJyYXlCdWZmZXI6OmJ5dGVMZW5ndGgoKSBjb25zdAogewotICAg
IHJldHVybiBtX2NvbnRlbnRzLnNpemVJbkJ5dGVzKCk7CisgICAgcmV0dXJuIG1fY29udGVudHMu
bV9zaXplSW5CeXRlczsKIH0KIAogYm9vbCBBcnJheUJ1ZmZlcjo6aXNTaGFyZWQoKSBjb25zdApJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQXJyYXlCdWZmZXJWaWV3LmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9BcnJheUJ1ZmZlclZp
ZXcuY3BwCShyZXZpc2lvbiAyNDYyNzEpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGlt
ZS9BcnJheUJ1ZmZlclZpZXcuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yNSwyMiArMjUsMTcgQEAK
IAogI2luY2x1ZGUgImNvbmZpZy5oIgogI2luY2x1ZGUgIkFycmF5QnVmZmVyVmlldy5oIgotI2lu
Y2x1ZGUgPHd0Zi9DaGVja2VkQXJpdGhtZXRpYy5oPgogCiBuYW1lc3BhY2UgSlNDIHsKIAogQXJy
YXlCdWZmZXJWaWV3OjpBcnJheUJ1ZmZlclZpZXcoCi0gICAgUmVmUHRyPEFycmF5QnVmZmVyPiYm
IGJ1ZmZlciwgdW5zaWduZWQgYnl0ZU9mZnNldCwgdW5zaWduZWQgYnl0ZUxlbmd0aCkKKyAgICBS
ZWZQdHI8QXJyYXlCdWZmZXI+JiYgYnVmZmVyLAorICAgIHVuc2lnbmVkIGJ5dGVPZmZzZXQpCiAg
ICAgICAgIDogbV9ieXRlT2Zmc2V0KGJ5dGVPZmZzZXQpCiAgICAgICAgICwgbV9pc05ldXRlcmFi
bGUodHJ1ZSkKLSAgICAgICAgLCBtX2J5dGVMZW5ndGgoYnl0ZUxlbmd0aCkKICAgICAgICAgLCBt
X2J1ZmZlcihXVEZNb3ZlKGJ1ZmZlcikpCiB7Ci0gICAgQ2hlY2tlZDx1bnNpZ25lZCwgQ3Jhc2hP
bk92ZXJmbG93PiBsZW5ndGgoYnl0ZU9mZnNldCk7Ci0gICAgbGVuZ3RoICs9IGJ5dGVMZW5ndGg7
Ci0gICAgUkVMRUFTRV9BU1NFUlRfV0lUSF9TRUNVUklUWV9JTVBMSUNBVElPTihsZW5ndGggPD0g
bV9idWZmZXItPmJ5dGVMZW5ndGgoKSk7Ci0gICAgaWYgKG1fYnVmZmVyKQotICAgICAgICBtX2Jh
c2VBZGRyZXNzID0gQmFzZUFkZHJlc3Moc3RhdGljX2Nhc3Q8Y2hhcio+KG1fYnVmZmVyLT5kYXRh
KCkpICsgbV9ieXRlT2Zmc2V0LCBieXRlTGVuZ3RoKTsKKyAgICBtX2Jhc2VBZGRyZXNzID0gbV9i
dWZmZXIgPyAoc3RhdGljX2Nhc3Q8Y2hhcio+KG1fYnVmZmVyLT5kYXRhKCkpICsgbV9ieXRlT2Zm
c2V0KSA6IDA7CiB9CiAKIEFycmF5QnVmZmVyVmlldzo6fkFycmF5QnVmZmVyVmlldygpCkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9BcnJheUJ1ZmZlclZpZXcuaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9BcnJheUJ1ZmZlclZpZXcuaAko
cmV2aXNpb24gMjQ2MjcxKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQXJyYXlC
dWZmZXJWaWV3LmgJKHdvcmtpbmcgY29weSkKQEAgLTcxLDggKzcxLDggQEAgcHVibGljOgogICAg
IHZvaWQqIGJhc2VBZGRyZXNzKCkgY29uc3QKICAgICB7CiAgICAgICAgIGlmIChpc05ldXRlcmVk
KCkpCi0gICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsKLSAgICAgICAgcmV0dXJuIG1fYmFzZUFk
ZHJlc3MuZ2V0TWF5QmVOdWxsKGJ5dGVMZW5ndGgoKSk7CisgICAgICAgICAgICByZXR1cm4gMDsK
KyAgICAgICAgcmV0dXJuIG1fYmFzZUFkZHJlc3MuZ2V0TWF5QmVOdWxsKCk7CiAgICAgfQogCiAg
ICAgdm9pZCogZGF0YSgpIGNvbnN0IHsgcmV0dXJuIGJhc2VBZGRyZXNzKCk7IH0KQEAgLTg0LDcg
Kzg0LDcgQEAgcHVibGljOgogICAgICAgICByZXR1cm4gbV9ieXRlT2Zmc2V0OwogICAgIH0KIAot
ICAgIHVuc2lnbmVkIGJ5dGVMZW5ndGgoKSBjb25zdCB7IHJldHVybiBtX2J5dGVMZW5ndGg7IH0K
KyAgICB2aXJ0dWFsIHVuc2lnbmVkIGJ5dGVMZW5ndGgoKSBjb25zdCA9IDA7CiAKICAgICBKU19F
WFBPUlRfUFJJVkFURSB2b2lkIHNldE5ldXRlcmFibGUoYm9vbCBmbGFnKTsKICAgICBib29sIGlz
TmV1dGVyYWJsZSgpIGNvbnN0IHsgcmV0dXJuIG1faXNOZXV0ZXJhYmxlOyB9CkBAIC0xMTMsMTIg
KzExMywxMyBAQCBwdWJsaWM6CiAgICAgdmlydHVhbCBKU0FycmF5QnVmZmVyVmlldyogd3JhcChF
eGVjU3RhdGUqLCBKU0dsb2JhbE9iamVjdCopID0gMDsKICAgICAKIHByb3RlY3RlZDoKLSAgICBK
U19FWFBPUlRfUFJJVkFURSBBcnJheUJ1ZmZlclZpZXcoUmVmUHRyPEFycmF5QnVmZmVyPiYmLCB1
bnNpZ25lZCBieXRlT2Zmc2V0LCB1bnNpZ25lZCBieXRlTGVuZ3RoKTsKKyAgICBKU19FWFBPUlRf
UFJJVkFURSBBcnJheUJ1ZmZlclZpZXcoUmVmUHRyPEFycmF5QnVmZmVyPiYmLCB1bnNpZ25lZCBi
eXRlT2Zmc2V0KTsKIAogICAgIGlubGluZSBib29sIHNldEltcGwoQXJyYXlCdWZmZXJWaWV3Kiwg
dW5zaWduZWQgYnl0ZU9mZnNldCk7CiAKLSAgICBpbmxpbmUgYm9vbCBzZXRSYW5nZUltcGwoY29u
c3Qgdm9pZCogZGF0YSwgc2l6ZV90IGRhdGFCeXRlTGVuZ3RoLCB1bnNpZ25lZCBieXRlT2Zmc2V0
KTsKLSAgICBpbmxpbmUgYm9vbCBnZXRSYW5nZUltcGwodm9pZCogZGVzdGluYXRpb24sIHNpemVf
dCBkYXRhQnl0ZUxlbmd0aCwgdW5zaWduZWQgYnl0ZU9mZnNldCk7CisgICAgLy8gQ2FsbGVyIHBh
c3NlcyBpbiBidWZmZXJCeXRlTGVuZ3RoIHRvIGF2b2lkIGEgdmlydHVhbCBmdW5jdGlvbiBjYWxs
LgorICAgIGlubGluZSBib29sIHNldFJhbmdlSW1wbChjb25zdCB2b2lkKiBkYXRhLCBzaXplX3Qg
ZGF0YUJ5dGVMZW5ndGgsIHVuc2lnbmVkIGJ5dGVPZmZzZXQsIHVuc2lnbmVkIGJ1ZmZlckJ5dGVM
ZW5ndGgpOworICAgIGlubGluZSBib29sIGdldFJhbmdlSW1wbCh2b2lkKiBkZXN0aW5hdGlvbiwg
c2l6ZV90IGRhdGFCeXRlTGVuZ3RoLCB1bnNpZ25lZCBieXRlT2Zmc2V0LCB1bnNpZ25lZCBidWZm
ZXJCeXRlTGVuZ3RoKTsKIAogICAgIGlubGluZSBib29sIHplcm9SYW5nZUltcGwodW5zaWduZWQg
Ynl0ZU9mZnNldCwgc2l6ZV90IHJhbmdlQnl0ZUxlbmd0aCk7CiAKQEAgLTE0OSwxMSArMTUwLDkg
QEAgcHJvdGVjdGVkOgogCiAgICAgdW5zaWduZWQgbV9ieXRlT2Zmc2V0IDogMzE7CiAgICAgYm9v
bCBtX2lzTmV1dGVyYWJsZSA6IDE7Ci0gICAgdW5zaWduZWQgbV9ieXRlTGVuZ3RoOwogCi0gICAg
dXNpbmcgQmFzZUFkZHJlc3MgPSBDYWdlZFB0cjxHaWdhY2FnZTo6UHJpbWl0aXZlLCB2b2lkLCB0
YWdDYWdlZFB0cj47CiAgICAgLy8gVGhpcyBpcyB0aGUgYWRkcmVzcyBvZiB0aGUgQXJyYXlCdWZm
ZXIncyBzdG9yYWdlLCBwbHVzIHRoZSBieXRlIG9mZnNldC4KLSAgICBCYXNlQWRkcmVzcyBtX2Jh
c2VBZGRyZXNzOworICAgIENhZ2VkUHRyPEdpZ2FjYWdlOjpQcmltaXRpdmUsIHZvaWQ+IG1fYmFz
ZUFkZHJlc3M7CiAKIHByaXZhdGU6CiAgICAgZnJpZW5kIGNsYXNzIEFycmF5QnVmZmVyOwpAQCAt
MTc0LDEwICsxNzMsMTIgQEAgYm9vbCBBcnJheUJ1ZmZlclZpZXc6OnNldEltcGwoQXJyYXlCdWZm
ZQogICAgIHJldHVybiB0cnVlOwogfQogCi1ib29sIEFycmF5QnVmZmVyVmlldzo6c2V0UmFuZ2VJ
bXBsKGNvbnN0IHZvaWQqIGRhdGEsIHNpemVfdCBkYXRhQnl0ZUxlbmd0aCwgdW5zaWduZWQgYnl0
ZU9mZnNldCkKK2Jvb2wgQXJyYXlCdWZmZXJWaWV3OjpzZXRSYW5nZUltcGwoY29uc3Qgdm9pZCog
ZGF0YSwgc2l6ZV90IGRhdGFCeXRlTGVuZ3RoLCB1bnNpZ25lZCBieXRlT2Zmc2V0LCB1bnNpZ25l
ZCBidWZmZXJCeXRlTGVuZ3RoKQogewotICAgIGlmIChieXRlT2Zmc2V0ID4gYnl0ZUxlbmd0aCgp
Ci0gICAgICAgIHx8IGJ5dGVPZmZzZXQgKyBkYXRhQnl0ZUxlbmd0aCA+IGJ5dGVMZW5ndGgoKQor
ICAgIC8vIERvIG5vdCByZXBsYWNlIHdpdGggUkVMRUFTRV9BU1NFUlQ7IHdlIHdhbnQgdG8gYXZv
aWQgdGhlIHZpcnR1YWwgYnl0ZUxlbmd0aCgpIGZ1bmN0aW9uIGNhbGwgaW4gcmVsZWFzZS4KKyAg
ICBBU1NFUlRfV0lUSF9TRUNVUklUWV9JTVBMSUNBVElPTihidWZmZXJCeXRlTGVuZ3RoID09IGJ5
dGVMZW5ndGgoKSk7CisgICAgaWYgKGJ5dGVPZmZzZXQgPiBidWZmZXJCeXRlTGVuZ3RoCisgICAg
ICAgIHx8IGJ5dGVPZmZzZXQgKyBkYXRhQnl0ZUxlbmd0aCA+IGJ1ZmZlckJ5dGVMZW5ndGgKICAg
ICAgICAgfHwgYnl0ZU9mZnNldCArIGRhdGFCeXRlTGVuZ3RoIDwgYnl0ZU9mZnNldCkgewogICAg
ICAgICAvLyBPdXQgb2YgcmFuZ2Ugb2Zmc2V0IG9yIG92ZXJmbG93CiAgICAgICAgIHJldHVybiBm
YWxzZTsKQEAgLTE4OCwxMCArMTg5LDEyIEBAIGJvb2wgQXJyYXlCdWZmZXJWaWV3OjpzZXRSYW5n
ZUltcGwoY29uc3QKICAgICByZXR1cm4gdHJ1ZTsKIH0KIAotYm9vbCBBcnJheUJ1ZmZlclZpZXc6
OmdldFJhbmdlSW1wbCh2b2lkKiBkZXN0aW5hdGlvbiwgc2l6ZV90IGRhdGFCeXRlTGVuZ3RoLCB1
bnNpZ25lZCBieXRlT2Zmc2V0KQorYm9vbCBBcnJheUJ1ZmZlclZpZXc6OmdldFJhbmdlSW1wbCh2
b2lkKiBkZXN0aW5hdGlvbiwgc2l6ZV90IGRhdGFCeXRlTGVuZ3RoLCB1bnNpZ25lZCBieXRlT2Zm
c2V0LCB1bnNpZ25lZCBidWZmZXJCeXRlTGVuZ3RoKQogewotICAgIGlmIChieXRlT2Zmc2V0ID4g
Ynl0ZUxlbmd0aCgpCi0gICAgICAgIHx8IGJ5dGVPZmZzZXQgKyBkYXRhQnl0ZUxlbmd0aCA+IGJ5
dGVMZW5ndGgoKQorICAgIC8vIERvIG5vdCByZXBsYWNlIHdpdGggUkVMRUFTRV9BU1NFUlQ7IHdl
IHdhbnQgdG8gYXZvaWQgdGhlIHZpcnR1YWwgYnl0ZUxlbmd0aCgpIGZ1bmN0aW9uIGNhbGwgaW4g
cmVsZWFzZS4KKyAgICBBU1NFUlRfV0lUSF9TRUNVUklUWV9JTVBMSUNBVElPTihidWZmZXJCeXRl
TGVuZ3RoID09IGJ5dGVMZW5ndGgoKSk7CisgICAgaWYgKGJ5dGVPZmZzZXQgPiBidWZmZXJCeXRl
TGVuZ3RoCisgICAgICAgIHx8IGJ5dGVPZmZzZXQgKyBkYXRhQnl0ZUxlbmd0aCA+IGJ1ZmZlckJ5
dGVMZW5ndGgKICAgICAgICAgfHwgYnl0ZU9mZnNldCArIGRhdGFCeXRlTGVuZ3RoIDwgYnl0ZU9m
ZnNldCkgewogICAgICAgICAvLyBPdXQgb2YgcmFuZ2Ugb2Zmc2V0IG9yIG92ZXJmbG93CiAgICAg
ICAgIHJldHVybiBmYWxzZTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0Nh
Y2hlZFR5cGVzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGlt
ZS9DYWNoZWRUeXBlcy5jcHAJKHJldmlzaW9uIDI0NjI3MSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ydW50aW1lL0NhY2hlZFR5cGVzLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTA4OCwxMyAr
MTA4OCwxMyBAQCBwdWJsaWM6CiAgICAgdm9pZCBlbmNvZGUoRW5jb2RlciYgZW5jb2RlciwgY29u
c3QgU2NvcGVkQXJndW1lbnRzVGFibGUmIHNjb3BlZEFyZ3VtZW50c1RhYmxlKQogICAgIHsKICAg
ICAgICAgbV9sZW5ndGggPSBzY29wZWRBcmd1bWVudHNUYWJsZS5tX2xlbmd0aDsKLSAgICAgICAg
bV9hcmd1bWVudHMuZW5jb2RlKGVuY29kZXIsIHNjb3BlZEFyZ3VtZW50c1RhYmxlLm1fYXJndW1l
bnRzLmdldChtX2xlbmd0aCksIG1fbGVuZ3RoKTsKKyAgICAgICAgbV9hcmd1bWVudHMuZW5jb2Rl
KGVuY29kZXIsIHNjb3BlZEFyZ3VtZW50c1RhYmxlLm1fYXJndW1lbnRzLmdldCgpLCBtX2xlbmd0
aCk7CiAgICAgfQogCiAgICAgU2NvcGVkQXJndW1lbnRzVGFibGUqIGRlY29kZShEZWNvZGVyJiBk
ZWNvZGVyKSBjb25zdAogICAgIHsKICAgICAgICAgU2NvcGVkQXJndW1lbnRzVGFibGUqIHNjb3Bl
ZEFyZ3VtZW50c1RhYmxlID0gU2NvcGVkQXJndW1lbnRzVGFibGU6OmNyZWF0ZShkZWNvZGVyLnZt
KCksIG1fbGVuZ3RoKTsKLSAgICAgICAgbV9hcmd1bWVudHMuZGVjb2RlKGRlY29kZXIsIHNjb3Bl
ZEFyZ3VtZW50c1RhYmxlLT5tX2FyZ3VtZW50cy5nZXQobV9sZW5ndGgpLCBtX2xlbmd0aCk7Cisg
ICAgICAgIG1fYXJndW1lbnRzLmRlY29kZShkZWNvZGVyLCBzY29wZWRBcmd1bWVudHNUYWJsZS0+
bV9hcmd1bWVudHMuZ2V0KCksIG1fbGVuZ3RoKTsKICAgICAgICAgcmV0dXJuIHNjb3BlZEFyZ3Vt
ZW50c1RhYmxlOwogICAgIH0KIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUv
Q2FnZWRCYXJyaWVyUHRyLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1
bnRpbWUvQ2FnZWRCYXJyaWVyUHRyLmgJKHJldmlzaW9uIDI0NjI3MSkKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ydW50aW1lL0NhZ2VkQmFycmllclB0ci5oCSh3b3JraW5nIGNvcHkpCkBAIC0z
NSw0MSArMzUsODcgQEAgY2xhc3MgVk07CiAKIC8vIFRoaXMgaXMgYSBjb252ZW5pZW50IGNvbWJv
IG9mIEF1eGlsaWFyeUJhcnJpZXIgYW5kIENhZ2VkUHRyLgogCi10ZW1wbGF0ZTxHaWdhY2FnZTo6
S2luZCBwYXNzZWRLaW5kLCB0eXBlbmFtZSBULCBib29sIHNob3VsZFRhZyA9IGZhbHNlPgordGVt
cGxhdGU8R2lnYWNhZ2U6OktpbmQgcGFzc2VkS2luZCwgdHlwZW5hbWUgVD4KIGNsYXNzIENhZ2Vk
QmFycmllclB0ciB7CiBwdWJsaWM6CiAgICAgc3RhdGljIGNvbnN0ZXhwciBHaWdhY2FnZTo6S2lu
ZCBraW5kID0gcGFzc2VkS2luZDsKLSAgICB1c2luZyBUeXBlID0gVDsKLSAgICB1c2luZyBDYWdl
ZFR5cGUgPSBDYWdlZFB0cjxraW5kLCBUeXBlLCBzaG91bGRUYWc+OworICAgIHR5cGVkZWYgVCBU
eXBlOwogICAgIAotICAgIENhZ2VkQmFycmllclB0cigpID0gZGVmYXVsdDsKKyAgICBDYWdlZEJh
cnJpZXJQdHIoKSB7IH0KICAgICAKICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBVPgotICAgIENhZ2Vk
QmFycmllclB0cihWTSYgdm0sIEpTQ2VsbCogY2VsbCwgVSYmIHZhbHVlLCB1bnNpZ25lZCBzaXpl
KQorICAgIENhZ2VkQmFycmllclB0cihWTSYgdm0sIEpTQ2VsbCogY2VsbCwgVSYmIHZhbHVlKQog
ICAgIHsKLSAgICAgICAgbV9iYXJyaWVyLnNldCh2bSwgY2VsbCwgQ2FnZWRUeXBlKHN0ZDo6Zm9y
d2FyZDxVPih2YWx1ZSksIHNpemUpKTsKKyAgICAgICAgbV9iYXJyaWVyLnNldCh2bSwgY2VsbCwg
c3RkOjpmb3J3YXJkPFU+KHZhbHVlKSk7CiAgICAgfQogICAgIAogICAgIHZvaWQgY2xlYXIoKSB7
IG1fYmFycmllci5jbGVhcigpOyB9CiAgICAgCiAgICAgdGVtcGxhdGU8dHlwZW5hbWUgVT4KLSAg
ICB2b2lkIHNldChWTSYgdm0sIEpTQ2VsbCogY2VsbCwgVSYmIHZhbHVlLCB1bnNpZ25lZCBzaXpl
KQorICAgIHZvaWQgc2V0KFZNJiB2bSwgSlNDZWxsKiBjZWxsLCBVJiYgdmFsdWUpCiAgICAgewot
ICAgICAgICBtX2JhcnJpZXIuc2V0KHZtLCBjZWxsLCBDYWdlZFR5cGUoc3RkOjpmb3J3YXJkPFU+
KHZhbHVlKSwgc2l6ZSkpOworICAgICAgICBtX2JhcnJpZXIuc2V0KHZtLCBjZWxsLCBzdGQ6OmZv
cndhcmQ8VT4odmFsdWUpKTsKICAgICB9CiAgICAgCi0gICAgVCogZ2V0KHVuc2lnbmVkIHNpemUp
IGNvbnN0IHsgcmV0dXJuIG1fYmFycmllci5nZXQoKS5nZXQoc2l6ZSk7IH0KLSAgICBUKiBnZXRN
YXlCZU51bGwodW5zaWduZWQgc2l6ZSkgY29uc3QgeyByZXR1cm4gbV9iYXJyaWVyLmdldCgpLmdl
dE1heUJlTnVsbChzaXplKTsgfQotICAgIFQqIGdldFVuc2FmZSgpIGNvbnN0IHsgcmV0dXJuIG1f
YmFycmllci5nZXQoKS5nZXRVbnNhZmUoKTsgfQotCi0gICAgLy8gV2UgbmVlZCB0aGUgdGVtcGxh
dGUgaGVyZSBzbyB0aGF0IHRoZSB0eXBlIG9mIFUgaXMgZGVkdWNlZCBhdCB1c2FnZSB0aW1lIHJh
dGhlciB0aGFuIGNsYXNzIHRpbWUuIFUgc2hvdWxkIGFsd2F5cyBiZSBULgotICAgIHRlbXBsYXRl
PHR5cGVuYW1lIFUgPSBUPgotICAgIHR5cGVuYW1lIHN0ZDo6ZW5hYmxlX2lmPCFzdGQ6OmlzX3Nh
bWU8dm9pZCwgVT46OnZhbHVlLCBUPjo6dHlwZSYKLSAgICAvKiBUJiAqLyBhdCh1bnNpZ25lZCBp
bmRleCwgdW5zaWduZWQgc2l6ZSkgY29uc3QgeyByZXR1cm4gZ2V0KHNpemUpW2luZGV4XTsgfQor
ICAgIFQqIGdldCgpIGNvbnN0IHsgcmV0dXJuIG1fYmFycmllci5nZXQoKS5nZXQoKTsgfQorICAg
IFQqIGdldE1heUJlTnVsbCgpIGNvbnN0IHsgcmV0dXJuIG1fYmFycmllci5nZXQoKS5nZXRNYXlC
ZU51bGwoKTsgfQorICAgIAorICAgIGJvb2wgb3BlcmF0b3I9PShjb25zdCBDYWdlZEJhcnJpZXJQ
dHImIG90aGVyKSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuIGdldE1heUJlTnVsbCgpID09
IG90aGVyLmdldE1heUJlTnVsbCgpOworICAgIH0KKyAgICAKKyAgICBib29sIG9wZXJhdG9yIT0o
Y29uc3QgQ2FnZWRCYXJyaWVyUHRyJiBvdGhlcikgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVy
biAhKCp0aGlzID09IG90aGVyKTsKKyAgICB9CisgICAgCisgICAgZXhwbGljaXQgb3BlcmF0b3Ig
Ym9vbCgpIGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4gKnRoaXMgIT0gQ2FnZWRCYXJyaWVy
UHRyKCk7CisgICAgfQorICAgIAorICAgIHRlbXBsYXRlPHR5cGVuYW1lIFU+CisgICAgdm9pZCBz
ZXRXaXRob3V0QmFycmllcihVJiYgdmFsdWUpIHsgbV9iYXJyaWVyLnNldFdpdGhvdXRCYXJyaWVy
KHN0ZDo6Zm9yd2FyZDxVPih2YWx1ZSkpOyB9CisgICAgCisgICAgVCYgb3BlcmF0b3IqKCkgY29u
c3QgeyByZXR1cm4gKmdldCgpOyB9CisgICAgVCogb3BlcmF0b3ItPigpIGNvbnN0IHsgcmV0dXJu
IGdldCgpOyB9CisgICAgCisgICAgdGVtcGxhdGU8dHlwZW5hbWUgSW5kZXhUeXBlPgorICAgIFQm
IG9wZXJhdG9yW10oSW5kZXhUeXBlIGluZGV4KSBjb25zdCB7IHJldHVybiBnZXQoKVtpbmRleF07
IH0KKyAgICAKK3ByaXZhdGU6CisgICAgQXV4aWxpYXJ5QmFycmllcjxDYWdlZFB0cjxraW5kLCBU
Pj4gbV9iYXJyaWVyOworfTsKIAordGVtcGxhdGU8R2lnYWNhZ2U6OktpbmQgcGFzc2VkS2luZD4K
K2NsYXNzIENhZ2VkQmFycmllclB0cjxwYXNzZWRLaW5kLCB2b2lkPiB7CitwdWJsaWM6CisgICAg
c3RhdGljIGNvbnN0ZXhwciBHaWdhY2FnZTo6S2luZCBraW5kID0gcGFzc2VkS2luZDsKKyAgICB0
eXBlZGVmIHZvaWQgVHlwZTsKKyAgICAKKyAgICBDYWdlZEJhcnJpZXJQdHIoKSB7IH0KKyAgICAK
KyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBVPgorICAgIENhZ2VkQmFycmllclB0cihWTSYgdm0sIEpT
Q2VsbCogY2VsbCwgVSYmIHZhbHVlKQorICAgIHsKKyAgICAgICAgbV9iYXJyaWVyLnNldCh2bSwg
Y2VsbCwgc3RkOjpmb3J3YXJkPFU+KHZhbHVlKSk7CisgICAgfQorICAgIAorICAgIHZvaWQgY2xl
YXIoKSB7IG1fYmFycmllci5jbGVhcigpOyB9CisgICAgCisgICAgdGVtcGxhdGU8dHlwZW5hbWUg
VT4KKyAgICB2b2lkIHNldChWTSYgdm0sIEpTQ2VsbCogY2VsbCwgVSYmIHZhbHVlKQorICAgIHsK
KyAgICAgICAgbV9iYXJyaWVyLnNldCh2bSwgY2VsbCwgc3RkOjpmb3J3YXJkPFU+KHZhbHVlKSk7
CisgICAgfQorICAgIAorICAgIHZvaWQqIGdldCgpIGNvbnN0IHsgcmV0dXJuIG1fYmFycmllci5n
ZXQoKS5nZXQoKTsgfQorICAgIHZvaWQqIGdldE1heUJlTnVsbCgpIGNvbnN0IHsgcmV0dXJuIG1f
YmFycmllci5nZXQoKS5nZXRNYXlCZU51bGwoKTsgfQorICAgIAogICAgIGJvb2wgb3BlcmF0b3I9
PShjb25zdCBDYWdlZEJhcnJpZXJQdHImIG90aGVyKSBjb25zdAogICAgIHsKLSAgICAgICAgcmV0
dXJuIG1fYmFycmllci5nZXQoKSA9PSBvdGhlci5tX2JhcnJpZXIuZ2V0KCk7CisgICAgICAgIHJl
dHVybiBnZXRNYXlCZU51bGwoKSA9PSBvdGhlci5nZXRNYXlCZU51bGwoKTsKICAgICB9CiAgICAg
CiAgICAgYm9vbCBvcGVyYXRvciE9KGNvbnN0IENhZ2VkQmFycmllclB0ciYgb3RoZXIpIGNvbnN0
CkBAIC03OSwxNCArMTI1LDE0IEBAIHB1YmxpYzoKICAgICAKICAgICBleHBsaWNpdCBvcGVyYXRv
ciBib29sKCkgY29uc3QKICAgICB7Ci0gICAgICAgIHJldHVybiAhIW1fYmFycmllci5nZXQoKTsK
KyAgICAgICAgcmV0dXJuICp0aGlzICE9IENhZ2VkQmFycmllclB0cigpOwogICAgIH0KICAgICAK
ICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBVPgotICAgIHZvaWQgc2V0V2l0aG91dEJhcnJpZXIoVSYm
IHZhbHVlLCB1bnNpZ25lZCBzaXplKSB7IG1fYmFycmllci5zZXRXaXRob3V0QmFycmllcihDYWdl
ZFR5cGUoc3RkOjpmb3J3YXJkPFU+KHZhbHVlKSwgc2l6ZSkpOyB9CisgICAgdm9pZCBzZXRXaXRo
b3V0QmFycmllcihVJiYgdmFsdWUpIHsgbV9iYXJyaWVyLnNldFdpdGhvdXRCYXJyaWVyKHN0ZDo6
Zm9yd2FyZDxVPih2YWx1ZSkpOyB9CiAgICAgCiBwcml2YXRlOgotICAgIEF1eGlsaWFyeUJhcnJp
ZXI8Q2FnZWRUeXBlPiBtX2JhcnJpZXI7CisgICAgQXV4aWxpYXJ5QmFycmllcjxDYWdlZFB0cjxr
aW5kLCB2b2lkPj4gbV9iYXJyaWVyOwogfTsKIAogfSAvLyBuYW1lc3BhY2UgSlNDCkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9EYXRhVmlldy5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvRGF0YVZpZXcuY3BwCShyZXZpc2lvbiAyNDYy
NzEpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9EYXRhVmlldy5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTMzLDcgKzMzLDggQEAKIG5hbWVzcGFjZSBKU0MgewogCiBEYXRhVmlldzo6
RGF0YVZpZXcoUmVmUHRyPEFycmF5QnVmZmVyPiYmIGJ1ZmZlciwgdW5zaWduZWQgYnl0ZU9mZnNl
dCwgdW5zaWduZWQgYnl0ZUxlbmd0aCkKLSAgICA6IEFycmF5QnVmZmVyVmlldyhXVEZNb3ZlKGJ1
ZmZlciksIGJ5dGVPZmZzZXQsIGJ5dGVMZW5ndGgpCisgICAgOiBBcnJheUJ1ZmZlclZpZXcoV1RG
TW92ZShidWZmZXIpLCBieXRlT2Zmc2V0KQorICAgICwgbV9ieXRlTGVuZ3RoKGJ5dGVMZW5ndGgp
CiB7CiB9CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0RhdGFWaWV3LmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvRGF0YVZpZXcuaAko
cmV2aXNpb24gMjQ2MjcxKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvRGF0YVZp
ZXcuaAkod29ya2luZyBjb3B5KQpAQCAtMzgsNiArMzgsMTEgQEAgcHVibGljOgogICAgIEpTX0VY
UE9SVF9QUklWQVRFIHN0YXRpYyBSZWY8RGF0YVZpZXc+IGNyZWF0ZShSZWZQdHI8QXJyYXlCdWZm
ZXI+JiYsIHVuc2lnbmVkIGJ5dGVPZmZzZXQsIHVuc2lnbmVkIGxlbmd0aCk7CiAgICAgc3RhdGlj
IFJlZjxEYXRhVmlldz4gY3JlYXRlKFJlZlB0cjxBcnJheUJ1ZmZlcj4mJik7CiAgICAgCisgICAg
dW5zaWduZWQgYnl0ZUxlbmd0aCgpIGNvbnN0IG92ZXJyaWRlCisgICAgeworICAgICAgICByZXR1
cm4gbV9ieXRlTGVuZ3RoOworICAgIH0KKyAgICAKICAgICBUeXBlZEFycmF5VHlwZSBnZXRUeXBl
KCkgY29uc3Qgb3ZlcnJpZGUKICAgICB7CiAgICAgICAgIHJldHVybiBUeXBlRGF0YVZpZXc7CkBA
IC01Nyw3ICs2Miw3IEBAIHB1YmxpYzoKICAgICAgICAgfSBlbHNlCiAgICAgICAgICAgICBSRUxF
QVNFX0FTU0VSVChvZmZzZXQgKyBzaXplb2YoVCkgPD0gYnl0ZUxlbmd0aCgpKTsKICAgICAgICAg
cmV0dXJuIGZsaXBCeXRlc0lmTGl0dGxlRW5kaWFuKAotICAgICAgICAgICAgKnJlaW50ZXJwcmV0
X2Nhc3Q8VCo+KHN0YXRpY19jYXN0PHVpbnQ4X3QqPihtX2Jhc2VBZGRyZXNzLmdldChieXRlTGVu
Z3RoKCkpKSArIG9mZnNldCksCisgICAgICAgICAgICAqcmVpbnRlcnByZXRfY2FzdDxUKj4oc3Rh
dGljX2Nhc3Q8dWludDhfdCo+KG1fYmFzZUFkZHJlc3MuZ2V0KCkpICsgb2Zmc2V0KSwKICAgICAg
ICAgICAgIGxpdHRsZUVuZGlhbik7CiAgICAgfQogICAgIApAQCAtODEsOSArODYsMTIgQEAgcHVi
bGljOgogICAgICAgICAgICAgKnN0YXR1cyA9IHRydWU7CiAgICAgICAgIH0gZWxzZQogICAgICAg
ICAgICAgUkVMRUFTRV9BU1NFUlQob2Zmc2V0ICsgc2l6ZW9mKFQpIDw9IGJ5dGVMZW5ndGgoKSk7
Ci0gICAgICAgICpyZWludGVycHJldF9jYXN0PFQqPihzdGF0aWNfY2FzdDx1aW50OF90Kj4obV9i
YXNlQWRkcmVzcy5nZXQoYnl0ZUxlbmd0aCgpKSkgKyBvZmZzZXQpID0KKyAgICAgICAgKnJlaW50
ZXJwcmV0X2Nhc3Q8VCo+KHN0YXRpY19jYXN0PHVpbnQ4X3QqPihtX2Jhc2VBZGRyZXNzLmdldCgp
KSArIG9mZnNldCkgPQogICAgICAgICAgICAgZmxpcEJ5dGVzSWZMaXR0bGVFbmRpYW4odmFsdWUs
IGxpdHRsZUVuZGlhbik7CiAgICAgfQorCitwcml2YXRlOgorICAgIHVuc2lnbmVkIG1fYnl0ZUxl
bmd0aDsKIH07CiAKIH0gLy8gbmFtZXNwYWNlIEpTQwpJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL3J1bnRpbWUvRGlyZWN0QXJndW1lbnRzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvcnVudGltZS9EaXJlY3RBcmd1bWVudHMuY3BwCShyZXZpc2lvbiAyNDYyNzEp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9EaXJlY3RBcmd1bWVudHMuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC0xMDEsNyArMTAxLDcgQEAgdm9pZCBEaXJlY3RBcmd1bWVudHM6OnZp
c2l0Q2hpbGRyZW4oSlNDZQogICAgIHZpc2l0b3IuYXBwZW5kKHRoaXNPYmplY3QtPm1fY2FsbGVl
KTsKIAogICAgIGlmICh0aGlzT2JqZWN0LT5tX21hcHBlZEFyZ3VtZW50cykKLSAgICAgICAgdmlz
aXRvci5tYXJrQXV4aWxpYXJ5KHRoaXNPYmplY3QtPm1fbWFwcGVkQXJndW1lbnRzLmdldCh0aGlz
T2JqZWN0LT5pbnRlcm5hbExlbmd0aCgpKSk7CisgICAgICAgIHZpc2l0b3IubWFya0F1eGlsaWFy
eSh0aGlzT2JqZWN0LT5tX21hcHBlZEFyZ3VtZW50cy5nZXQoKSk7CiAgICAgR2VuZXJpY0FyZ3Vt
ZW50czxEaXJlY3RBcmd1bWVudHM+Ojp2aXNpdENoaWxkcmVuKHRoaXNDZWxsLCB2aXNpdG9yKTsK
IH0KIApAQCAtMTIwLDggKzEyMCw4IEBAIHZvaWQgRGlyZWN0QXJndW1lbnRzOjpvdmVycmlkZVRo
aW5ncyhWTSYKICAgICAKICAgICB2b2lkKiBiYWNraW5nU3RvcmUgPSB2bS5naWdhY2FnZUF1eGls
aWFyeVNwYWNlKG1fbWFwcGVkQXJndW1lbnRzLmtpbmQpLmFsbG9jYXRlTm9uVmlydHVhbCh2bSwg
bWFwcGVkQXJndW1lbnRzU2l6ZSgpLCBudWxscHRyLCBBbGxvY2F0aW9uRmFpbHVyZU1vZGU6OkFz
c2VydCk7CiAgICAgYm9vbCogb3ZlcnJpZGVzID0gc3RhdGljX2Nhc3Q8Ym9vbCo+KGJhY2tpbmdT
dG9yZSk7Ci0gICAgbV9tYXBwZWRBcmd1bWVudHMuc2V0KHZtLCB0aGlzLCBvdmVycmlkZXMsIGlu
dGVybmFsTGVuZ3RoKCkpOwotICAgIGZvciAodW5zaWduZWQgaSA9IGludGVybmFsTGVuZ3RoKCk7
IGktLTspCisgICAgbV9tYXBwZWRBcmd1bWVudHMuc2V0KHZtLCB0aGlzLCBvdmVycmlkZXMpOwor
ICAgIGZvciAodW5zaWduZWQgaSA9IG1fbGVuZ3RoOyBpLS07KQogICAgICAgICBvdmVycmlkZXNb
aV0gPSBmYWxzZTsKIH0KIApAQCAtMTM0LDcgKzEzNCw3IEBAIHZvaWQgRGlyZWN0QXJndW1lbnRz
OjpvdmVycmlkZVRoaW5nc0lmTmUKIHZvaWQgRGlyZWN0QXJndW1lbnRzOjp1bm1hcEFyZ3VtZW50
KFZNJiB2bSwgdW5zaWduZWQgaW5kZXgpCiB7CiAgICAgb3ZlcnJpZGVUaGluZ3NJZk5lY2Vzc2Fy
eSh2bSk7Ci0gICAgbV9tYXBwZWRBcmd1bWVudHMuYXQoaW5kZXgsIGludGVybmFsTGVuZ3RoKCkp
ID0gdHJ1ZTsKKyAgICBtX21hcHBlZEFyZ3VtZW50c1tpbmRleF0gPSB0cnVlOwogfQogCiB2b2lk
IERpcmVjdEFyZ3VtZW50czo6Y29weVRvQXJndW1lbnRzKEV4ZWNTdGF0ZSogZXhlYywgVmlydHVh
bFJlZ2lzdGVyIGZpcnN0RWxlbWVudERlc3QsIHVuc2lnbmVkIG9mZnNldCwgdW5zaWduZWQgbGVu
Z3RoKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvRGlyZWN0QXJndW1lbnRz
LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvRGlyZWN0QXJn
dW1lbnRzLmgJKHJldmlzaW9uIDI0NjI3MSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50
aW1lL0RpcmVjdEFyZ3VtZW50cy5oCSh3b3JraW5nIGNvcHkpCkBAIC04Niw3ICs4Niw3IEBAIHB1
YmxpYzoKICAgICAKICAgICBib29sIGlzTWFwcGVkQXJndW1lbnQodWludDMyX3QgaSkgY29uc3QK
ICAgICB7Ci0gICAgICAgIHJldHVybiBpIDwgbV9sZW5ndGggJiYgKCFtX21hcHBlZEFyZ3VtZW50
cyB8fCAhbV9tYXBwZWRBcmd1bWVudHMuYXQoaSwgbV9sZW5ndGgpKTsKKyAgICAgICAgcmV0dXJu
IGkgPCBtX2xlbmd0aCAmJiAoIW1fbWFwcGVkQXJndW1lbnRzIHx8ICFtX21hcHBlZEFyZ3VtZW50
c1tpXSk7CiAgICAgfQogCiAgICAgYm9vbCBpc01hcHBlZEFyZ3VtZW50SW5ERkcodWludDMyX3Qg
aSkgY29uc3QKQEAgLTE4Miw4ICsxODIsNyBAQCBwcml2YXRlOgogICAgIFdyaXRlQmFycmllcjxK
U0Z1bmN0aW9uPiBtX2NhbGxlZTsKICAgICB1aW50MzJfdCBtX2xlbmd0aDsgLy8gQWx3YXlzIHRo
ZSBhY3R1YWwgbGVuZ3RoIG9mIGNhcHR1cmVkIGFyZ3VtZW50cyBhbmQgbmV2ZXIgd2hhdCB3YXMg
c3RvcmVkIGludG8gdGhlIGxlbmd0aCBwcm9wZXJ0eS4KICAgICB1aW50MzJfdCBtX21pbkNhcGFj
aXR5OyAvLyBUaGUgbWF4IG9mIHRoaXMgYW5kIGxlbmd0aCBkZXRlcm1pbmVzIHRoZSBjYXBhY2l0
eSBvZiB0aGlzIG9iamVjdC4gSXQgbWF5IGJlIHRoZSBhY3R1YWwgY2FwYWNpdHksIG9yIG1heWJl
IHNvbWV0aGluZyBzbWFsbGVyLiBXZSBhcnJhbmdlIGl0IHRoaXMgd2F5IHRvIGJlIGtpbmQgdG8g
dGhlIEpJVHMuCi0gICAgdXNpbmcgTWFwcGVkQXJndW1lbnRzID0gQ2FnZWRCYXJyaWVyUHRyPEdp
Z2FjYWdlOjpQcmltaXRpdmUsIGJvb2w+OwotICAgIE1hcHBlZEFyZ3VtZW50cyBtX21hcHBlZEFy
Z3VtZW50czsgLy8gSWYgbm9uLW51bGwsIGl0IG1lYW5zIHRoYXQgbGVuZ3RoLCBjYWxsZWUsIGFu
ZCBjYWxsZXIgYXJlIGZ1bGx5IG1hdGVyaWFsaXplZCBwcm9wZXJ0aWVzLgorICAgIENhZ2VkQmFy
cmllclB0cjxHaWdhY2FnZTo6UHJpbWl0aXZlLCBib29sPiBtX21hcHBlZEFyZ3VtZW50czsgLy8g
SWYgbm9uLW51bGwsIGl0IG1lYW5zIHRoYXQgbGVuZ3RoLCBjYWxsZWUsIGFuZCBjYWxsZXIgYXJl
IGZ1bGx5IG1hdGVyaWFsaXplZCBwcm9wZXJ0aWVzLgogfTsKIAogfSAvLyBuYW1lc3BhY2UgSlND
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9HZW5lcmljQXJndW1lbnRzLmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvR2VuZXJpY0FyZ3Vt
ZW50cy5oCShyZXZpc2lvbiAyNDYyNzEpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGlt
ZS9HZW5lcmljQXJndW1lbnRzLmgJKHdvcmtpbmcgY29weSkKQEAgLTYwLDkgKzYwLDggQEAgcHJv
dGVjdGVkOgogICAgIGJvb2wgaXNNb2RpZmllZEFyZ3VtZW50RGVzY3JpcHRvcih1bnNpZ25lZCBp
bmRleCwgdW5zaWduZWQgbGVuZ3RoKTsKIAogICAgIHZvaWQgY29weVRvQXJndW1lbnRzKEV4ZWNT
dGF0ZSosIFZpcnR1YWxSZWdpc3RlciBmaXJzdEVsZW1lbnREZXN0LCB1bnNpZ25lZCBvZmZzZXQs
IHVuc2lnbmVkIGxlbmd0aCk7Ci0KLSAgICB1c2luZyBNb2RpZmllZEFyZ3VtZW50c1B0ciA9IENh
Z2VkQmFycmllclB0cjxHaWdhY2FnZTo6UHJpbWl0aXZlLCBib29sPjsKLSAgICBNb2RpZmllZEFy
Z3VtZW50c1B0ciBtX21vZGlmaWVkQXJndW1lbnRzRGVzY3JpcHRvcjsKKyAgICAKKyAgICBDYWdl
ZEJhcnJpZXJQdHI8R2lnYWNhZ2U6OlByaW1pdGl2ZSwgYm9vbD4gbV9tb2RpZmllZEFyZ3VtZW50
c0Rlc2NyaXB0b3I7CiB9OwogCiB9IC8vIG5hbWVzcGFjZSBKU0MKSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ydW50aW1lL0dlbmVyaWNBcmd1bWVudHNJbmxpbmVzLmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvR2VuZXJpY0FyZ3VtZW50c0lubGluZXMu
aAkocmV2aXNpb24gMjQ2MjcxKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvR2Vu
ZXJpY0FyZ3VtZW50c0lubGluZXMuaAkod29ya2luZyBjb3B5KQpAQCAtMzgsNyArMzgsNyBAQCB2
b2lkIEdlbmVyaWNBcmd1bWVudHM8VHlwZT46OnZpc2l0Q2hpbGRyCiAgICAgQmFzZTo6dmlzaXRD
aGlsZHJlbih0aGlzQ2VsbCwgdmlzaXRvcik7CiAgICAgCiAgICAgaWYgKHRoaXNPYmplY3QtPm1f
bW9kaWZpZWRBcmd1bWVudHNEZXNjcmlwdG9yKQotICAgICAgICB2aXNpdG9yLm1hcmtBdXhpbGlh
cnkodGhpc09iamVjdC0+bV9tb2RpZmllZEFyZ3VtZW50c0Rlc2NyaXB0b3IuZ2V0VW5zYWZlKCkp
OworICAgICAgICB2aXNpdG9yLm1hcmtBdXhpbGlhcnkodGhpc09iamVjdC0+bV9tb2RpZmllZEFy
Z3VtZW50c0Rlc2NyaXB0b3IuZ2V0KCkpOwogfQogCiB0ZW1wbGF0ZTx0eXBlbmFtZSBUeXBlPgpA
QCAtMjY1LDcgKzI2NSw3IEBAIHZvaWQgR2VuZXJpY0FyZ3VtZW50czxUeXBlPjo6aW5pdE1vZGlm
aWUKICAgICBpZiAoYXJnc0xlbmd0aCkgewogICAgICAgICB2b2lkKiBiYWNraW5nU3RvcmUgPSB2
bS5naWdhY2FnZUF1eGlsaWFyeVNwYWNlKG1fbW9kaWZpZWRBcmd1bWVudHNEZXNjcmlwdG9yLmtp
bmQpLmFsbG9jYXRlTm9uVmlydHVhbCh2bSwgV1RGOjpyb3VuZFVwVG9NdWx0aXBsZU9mPDg+KGFy
Z3NMZW5ndGgpLCBudWxscHRyLCBBbGxvY2F0aW9uRmFpbHVyZU1vZGU6OkFzc2VydCk7CiAgICAg
ICAgIGJvb2wqIG1vZGlmaWVkQXJndW1lbnRzID0gc3RhdGljX2Nhc3Q8Ym9vbCo+KGJhY2tpbmdT
dG9yZSk7Ci0gICAgICAgIG1fbW9kaWZpZWRBcmd1bWVudHNEZXNjcmlwdG9yLnNldCh2bSwgdGhp
cywgbW9kaWZpZWRBcmd1bWVudHMsIGFyZ3NMZW5ndGgpOworICAgICAgICBtX21vZGlmaWVkQXJn
dW1lbnRzRGVzY3JpcHRvci5zZXQodm0sIHRoaXMsIG1vZGlmaWVkQXJndW1lbnRzKTsKICAgICAg
ICAgZm9yICh1bnNpZ25lZCBpID0gYXJnc0xlbmd0aDsgaS0tOykKICAgICAgICAgICAgIG1vZGlm
aWVkQXJndW1lbnRzW2ldID0gZmFsc2U7CiAgICAgfQpAQCAtMjgzLDcgKzI4Myw3IEBAIHZvaWQg
R2VuZXJpY0FyZ3VtZW50czxUeXBlPjo6c2V0TW9kaWZpZWQKIHsKICAgICBpbml0TW9kaWZpZWRB
cmd1bWVudHNEZXNjcmlwdG9ySWZOZWNlc3Nhcnkodm0sIGxlbmd0aCk7CiAgICAgaWYgKGluZGV4
IDwgbGVuZ3RoKQotICAgICAgICBtX21vZGlmaWVkQXJndW1lbnRzRGVzY3JpcHRvci5hdChpbmRl
eCwgbGVuZ3RoKSA9IHRydWU7CisgICAgICAgIG1fbW9kaWZpZWRBcmd1bWVudHNEZXNjcmlwdG9y
W2luZGV4XSA9IHRydWU7CiB9CiAKIHRlbXBsYXRlPHR5cGVuYW1lIFR5cGU+CkBAIC0yOTIsNyAr
MjkyLDcgQEAgYm9vbCBHZW5lcmljQXJndW1lbnRzPFR5cGU+Ojppc01vZGlmaWVkQQogICAgIGlm
ICghbV9tb2RpZmllZEFyZ3VtZW50c0Rlc2NyaXB0b3IpCiAgICAgICAgIHJldHVybiBmYWxzZTsK
ICAgICBpZiAoaW5kZXggPCBsZW5ndGgpCi0gICAgICAgIHJldHVybiBtX21vZGlmaWVkQXJndW1l
bnRzRGVzY3JpcHRvci5hdChpbmRleCwgbGVuZ3RoKTsKKyAgICAgICAgcmV0dXJuIG1fbW9kaWZp
ZWRBcmd1bWVudHNEZXNjcmlwdG9yW2luZGV4XTsKICAgICByZXR1cm4gZmFsc2U7CiB9CiAKSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0dlbmVyaWNUeXBlZEFycmF5Vmlldy5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0dlbmVyaWNUeXBl
ZEFycmF5Vmlldy5oCShyZXZpc2lvbiAyNDYyNzEpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
cnVudGltZS9HZW5lcmljVHlwZWRBcnJheVZpZXcuaAkod29ya2luZyBjb3B5KQpAQCAtNTgsNyAr
NTgsOCBAQCBwdWJsaWM6CiAgICAgICAgIHJldHVybiBzZXRSYW5nZUltcGwoCiAgICAgICAgICAg
ICByZWludGVycHJldF9jYXN0PGNvbnN0IGNoYXIqPihkYXRhKSwKICAgICAgICAgICAgIGNvdW50
ICogc2l6ZW9mKHR5cGVuYW1lIEFkYXB0b3I6OlR5cGUpLAotICAgICAgICAgICAgb2Zmc2V0ICog
c2l6ZW9mKHR5cGVuYW1lIEFkYXB0b3I6OlR5cGUpKTsKKyAgICAgICAgICAgIG9mZnNldCAqIHNp
emVvZih0eXBlbmFtZSBBZGFwdG9yOjpUeXBlKSwKKyAgICAgICAgICAgIGludGVybmFsQnl0ZUxl
bmd0aCgpKTsKICAgICB9CiAgICAgCiAgICAgYm9vbCB6ZXJvUmFuZ2UodW5zaWduZWQgb2Zmc2V0
LCBzaXplX3QgY291bnQpCkBAIC03Miw3ICs3MywxMiBAQCBwdWJsaWM6CiAgICAgewogICAgICAg
ICBpZiAoaXNOZXV0ZXJlZCgpKQogICAgICAgICAgICAgcmV0dXJuIDA7Ci0gICAgICAgIHJldHVy
biBieXRlTGVuZ3RoKCkgLyBzaXplb2YodHlwZW5hbWUgQWRhcHRvcjo6VHlwZSk7CisgICAgICAg
IHJldHVybiBtX2xlbmd0aDsKKyAgICB9CisgICAgCisgICAgdW5zaWduZWQgYnl0ZUxlbmd0aCgp
IGNvbnN0IG92ZXJyaWRlCisgICAgeworICAgICAgICByZXR1cm4gaW50ZXJuYWxCeXRlTGVuZ3Ro
KCk7CiAgICAgfQogCiAgICAgdHlwZW5hbWUgQWRhcHRvcjo6VHlwZSBpdGVtKHVuc2lnbmVkIGlu
ZGV4KSBjb25zdApAQCAtOTgsNyArMTA0LDggQEAgcHVibGljOgogICAgICAgICByZXR1cm4gZ2V0
UmFuZ2VJbXBsKAogICAgICAgICAgICAgcmVpbnRlcnByZXRfY2FzdDxjaGFyKj4oZGF0YSksCiAg
ICAgICAgICAgICBjb3VudCAqIHNpemVvZih0eXBlbmFtZSBBZGFwdG9yOjpUeXBlKSwKLSAgICAg
ICAgICAgIG9mZnNldCAqIHNpemVvZih0eXBlbmFtZSBBZGFwdG9yOjpUeXBlKSk7CisgICAgICAg
ICAgICBvZmZzZXQgKiBzaXplb2YodHlwZW5hbWUgQWRhcHRvcjo6VHlwZSksCisgICAgICAgICAg
ICBpbnRlcm5hbEJ5dGVMZW5ndGgoKSk7CiAgICAgfQogCiAgICAgYm9vbCBjaGVja0luYm91bmRE
YXRhKHVuc2lnbmVkIG9mZnNldCwgc2l6ZV90IGNvdW50KSBjb25zdApAQCAtMTE5LDYgKzEyNiwx
NCBAQCBwdWJsaWM6CiAgICAgfQogCiAgICAgSlNBcnJheUJ1ZmZlclZpZXcqIHdyYXAoRXhlY1N0
YXRlKiwgSlNHbG9iYWxPYmplY3QqKSBvdmVycmlkZTsKKworcHJpdmF0ZToKKyAgICB1bnNpZ25l
ZCBpbnRlcm5hbEJ5dGVMZW5ndGgoKSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuIGxlbmd0
aCgpICogc2l6ZW9mKHR5cGVuYW1lIEFkYXB0b3I6OlR5cGUpOworICAgIH0KKworICAgIHVuc2ln
bmVkIG1fbGVuZ3RoOwogfTsKIAogfSAvLyBuYW1lc3BhY2UgSlNDCkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvcnVudGltZS9HZW5lcmljVHlwZWRBcnJheVZpZXdJbmxpbmVzLmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvR2VuZXJpY1R5cGVkQXJyYXlW
aWV3SW5saW5lcy5oCShyZXZpc2lvbiAyNDYyNzEpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
cnVudGltZS9HZW5lcmljVHlwZWRBcnJheVZpZXdJbmxpbmVzLmgJKHdvcmtpbmcgY29weSkKQEAg
LTMyLDggKzMyLDkgQEAgbmFtZXNwYWNlIEpTQyB7CiAKIHRlbXBsYXRlPHR5cGVuYW1lIEFkYXB0
b3I+CiBHZW5lcmljVHlwZWRBcnJheVZpZXc8QWRhcHRvcj46OkdlbmVyaWNUeXBlZEFycmF5Vmll
dygKLVJlZlB0cjxBcnJheUJ1ZmZlcj4mJiBidWZmZXIsIHVuc2lnbmVkIGJ5dGVPZmZzZXQsIHVu
c2lnbmVkIGxlbmd0aCkKLSAgICA6IEFycmF5QnVmZmVyVmlldyhXVEZNb3ZlKGJ1ZmZlciksIGJ5
dGVPZmZzZXQsIGxlbmd0aCAqIHNpemVvZih0eXBlbmFtZSBBZGFwdG9yOjpUeXBlKSkKKyAgICBS
ZWZQdHI8QXJyYXlCdWZmZXI+JiYgYnVmZmVyLCB1bnNpZ25lZCBieXRlT2Zmc2V0LCB1bnNpZ25l
ZCBsZW5ndGgpCisgICAgOiBBcnJheUJ1ZmZlclZpZXcoV1RGTW92ZShidWZmZXIpLCBieXRlT2Zm
c2V0KQorICAgICwgbV9sZW5ndGgobGVuZ3RoKQogewogfQogCkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvcnVudGltZS9KU0FycmF5QnVmZmVyVmlldy5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNBcnJheUJ1ZmZlclZpZXcuY3BwCShyZXZpc2lv
biAyNDYyNzEpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0FycmF5QnVmZmVy
Vmlldy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0
IChDKSAyMDEzLTIwMTkgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJp
Z2h0IChDKSAyMDEzLTIwMTggQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAq
IFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGgg
b3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQg
dGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC01MCwxMiArNTAsMTEgQEAgU3RyaW5nIEpTQXJy
YXlCdWZmZXJWaWV3Ojp0b1N0cmluZ05hbWUoYwogSlNBcnJheUJ1ZmZlclZpZXc6OkNvbnN0cnVj
dGlvbkNvbnRleHQ6OkNvbnN0cnVjdGlvbkNvbnRleHQoCiAgICAgU3RydWN0dXJlKiBzdHJ1Y3R1
cmUsIHVpbnQzMl90IGxlbmd0aCwgdm9pZCogdmVjdG9yKQogICAgIDogbV9zdHJ1Y3R1cmUoc3Ry
dWN0dXJlKQotICAgICwgbV92ZWN0b3IodmVjdG9yLCBsZW5ndGgpCisgICAgLCBtX3ZlY3Rvcih2
ZWN0b3IpCiAgICAgLCBtX2xlbmd0aChsZW5ndGgpCiAgICAgLCBtX21vZGUoRmFzdFR5cGVkQXJy
YXkpCiAgICAgLCBtX2J1dHRlcmZseShudWxscHRyKQogewotICAgIEFTU0VSVCh2ZWN0b3IgPT0g
cmVtb3ZlQXJyYXlQdHJUYWcodmVjdG9yKSk7CiAgICAgUkVMRUFTRV9BU1NFUlQobGVuZ3RoIDw9
IGZhc3RTaXplTGltaXQpOwogfQogCkBAIC03NSwxMSArNzQsMTEgQEAgSlNBcnJheUJ1ZmZlclZp
ZXc6OkNvbnN0cnVjdGlvbkNvbnRleHQ6OgogICAgICAgICAgICAgcmV0dXJuOwogCiAgICAgICAg
IG1fc3RydWN0dXJlID0gc3RydWN0dXJlOwotICAgICAgICBtX3ZlY3RvciA9IFZlY3RvclR5cGUo
dGVtcCwgbGVuZ3RoKTsKKyAgICAgICAgbV92ZWN0b3IgPSB0ZW1wOwogICAgICAgICBtX21vZGUg
PSBGYXN0VHlwZWRBcnJheTsKIAogICAgICAgICBpZiAobW9kZSA9PSBaZXJvRmlsbCkgewotICAg
ICAgICAgICAgdWludDY0X3QqIGFzV29yZHMgPSBzdGF0aWNfY2FzdDx1aW50NjRfdCo+KHZlY3Rv
cigpKTsKKyAgICAgICAgICAgIHVpbnQ2NF90KiBhc1dvcmRzID0gc3RhdGljX2Nhc3Q8dWludDY0
X3QqPihtX3ZlY3Rvci5nZXRNYXlCZU51bGwoKSk7CiAgICAgICAgICAgICBmb3IgKHVuc2lnbmVk
IGkgPSBzaXplIC8gc2l6ZW9mKHVpbnQ2NF90KTsgaS0tOykKICAgICAgICAgICAgICAgICBhc1dv
cmRzW2ldID0gMDsKICAgICAgICAgfQpAQCAtOTIsMTEgKzkxLDExIEBAIEpTQXJyYXlCdWZmZXJW
aWV3OjpDb25zdHJ1Y3Rpb25Db250ZXh0OjoKICAgICAgICAgcmV0dXJuOwogICAgIAogICAgIHNp
emVfdCBzaXplID0gc3RhdGljX2Nhc3Q8c2l6ZV90PihsZW5ndGgpICogc3RhdGljX2Nhc3Q8c2l6
ZV90PihlbGVtZW50U2l6ZSk7Ci0gICAgbV92ZWN0b3IgPSBWZWN0b3JUeXBlKEdpZ2FjYWdlOjp0
cnlNYWxsb2MoR2lnYWNhZ2U6OlByaW1pdGl2ZSwgc2l6ZSksIGxlbmd0aCk7CisgICAgbV92ZWN0
b3IgPSBHaWdhY2FnZTo6dHJ5TWFsbG9jKEdpZ2FjYWdlOjpQcmltaXRpdmUsIHNpemUpOwogICAg
IGlmICghbV92ZWN0b3IpCiAgICAgICAgIHJldHVybjsKICAgICBpZiAobW9kZSA9PSBaZXJvRmls
bCkKLSAgICAgICAgbWVtc2V0KHZlY3RvcigpLCAwLCBzaXplKTsKKyAgICAgICAgbWVtc2V0KG1f
dmVjdG9yLmdldCgpLCAwLCBzaXplKTsKICAgICAKICAgICB2bS5oZWFwLnJlcG9ydEV4dHJhTWVt
b3J5QWxsb2NhdGVkKHN0YXRpY19jYXN0PHNpemVfdD4obGVuZ3RoKSAqIGVsZW1lbnRTaXplKTsK
ICAgICAKQEAgLTExMSw4ICsxMTAsNyBAQCBKU0FycmF5QnVmZmVyVmlldzo6Q29uc3RydWN0aW9u
Q29udGV4dDo6CiAgICAgLCBtX2xlbmd0aChsZW5ndGgpCiAgICAgLCBtX21vZGUoV2FzdGVmdWxU
eXBlZEFycmF5KQogewotICAgIEFTU0VSVChhcnJheUJ1ZmZlci0+ZGF0YSgpID09IHJlbW92ZUFy
cmF5UHRyVGFnKGFycmF5QnVmZmVyLT5kYXRhKCkpKTsKLSAgICBtX3ZlY3RvciA9IFZlY3RvclR5
cGUoc3RhdGljX2Nhc3Q8dWludDhfdCo+KGFycmF5QnVmZmVyLT5kYXRhKCkpICsgYnl0ZU9mZnNl
dCwgbGVuZ3RoKTsKKyAgICBtX3ZlY3RvciA9IHN0YXRpY19jYXN0PHVpbnQ4X3QqPihhcnJheUJ1
ZmZlci0+ZGF0YSgpKSArIGJ5dGVPZmZzZXQ7CiAgICAgSW5kZXhpbmdIZWFkZXIgaW5kZXhpbmdI
ZWFkZXI7CiAgICAgaW5kZXhpbmdIZWFkZXIuc2V0QXJyYXlCdWZmZXIoYXJyYXlCdWZmZXIuZ2V0
KCkpOwogICAgIG1fYnV0dGVyZmx5ID0gQnV0dGVyZmx5OjpjcmVhdGUodm0sIDAsIDAsIDAsIHRy
dWUsIGluZGV4aW5nSGVhZGVyLCAwKTsKQEAgLTEyNiw4ICsxMjQsNyBAQCBKU0FycmF5QnVmZmVy
Vmlldzo6Q29uc3RydWN0aW9uQ29udGV4dDo6CiAgICAgLCBtX21vZGUoRGF0YVZpZXdNb2RlKQog
ICAgICwgbV9idXR0ZXJmbHkoMCkKIHsKLSAgICBBU1NFUlQoYXJyYXlCdWZmZXItPmRhdGEoKSA9
PSByZW1vdmVBcnJheVB0clRhZyhhcnJheUJ1ZmZlci0+ZGF0YSgpKSk7Ci0gICAgbV92ZWN0b3Ig
PSBWZWN0b3JUeXBlKHN0YXRpY19jYXN0PHVpbnQ4X3QqPihhcnJheUJ1ZmZlci0+ZGF0YSgpKSAr
IGJ5dGVPZmZzZXQsIGxlbmd0aCk7CisgICAgbV92ZWN0b3IgPSBzdGF0aWNfY2FzdDx1aW50OF90
Kj4oYXJyYXlCdWZmZXItPmRhdGEoKSkgKyBieXRlT2Zmc2V0OwogfQogCiBKU0FycmF5QnVmZmVy
Vmlldzo6SlNBcnJheUJ1ZmZlclZpZXcoVk0mIHZtLCBDb25zdHJ1Y3Rpb25Db250ZXh0JiBjb250
ZXh0KQpAQCAtMTM2LDggKzEzMyw3IEBAIEpTQXJyYXlCdWZmZXJWaWV3OjpKU0FycmF5QnVmZmVy
VmlldyhWTSYKICAgICAsIG1fbW9kZShjb250ZXh0Lm1vZGUoKSkKIHsKICAgICBzZXRCdXR0ZXJm
bHkodm0sIGNvbnRleHQuYnV0dGVyZmx5KCkpOwotICAgIEFTU0VSVChjb250ZXh0LnZlY3Rvcigp
ID09IHJlbW92ZUFycmF5UHRyVGFnKGNvbnRleHQudmVjdG9yKCkpKTsKLSAgICBtX3ZlY3Rvci5z
ZXRXaXRob3V0QmFycmllcihjb250ZXh0LnZlY3RvcigpLCBtX2xlbmd0aCk7CisgICAgbV92ZWN0
b3Iuc2V0V2l0aG91dEJhcnJpZXIoY29udGV4dC52ZWN0b3IoKSk7CiB9CiAKIHZvaWQgSlNBcnJh
eUJ1ZmZlclZpZXc6OmZpbmlzaENyZWF0aW9uKFZNJiB2bSkKQEAgLTE5OCw3ICsxOTQsNyBAQCB2
b2lkIEpTQXJyYXlCdWZmZXJWaWV3OjpmaW5hbGl6ZShKU0NlbGwqCiAgICAgSlNBcnJheUJ1ZmZl
clZpZXcqIHRoaXNPYmplY3QgPSBzdGF0aWNfY2FzdDxKU0FycmF5QnVmZmVyVmlldyo+KGNlbGwp
OwogICAgIEFTU0VSVCh0aGlzT2JqZWN0LT5tX21vZGUgPT0gT3ZlcnNpemVUeXBlZEFycmF5IHx8
IHRoaXNPYmplY3QtPm1fbW9kZSA9PSBXYXN0ZWZ1bFR5cGVkQXJyYXkpOwogICAgIGlmICh0aGlz
T2JqZWN0LT5tX21vZGUgPT0gT3ZlcnNpemVUeXBlZEFycmF5KQotICAgICAgICBHaWdhY2FnZTo6
ZnJlZShHaWdhY2FnZTo6UHJpbWl0aXZlLCB0aGlzT2JqZWN0LT52ZWN0b3IoKSk7CisgICAgICAg
IEdpZ2FjYWdlOjpmcmVlKEdpZ2FjYWdlOjpQcmltaXRpdmUsIHRoaXNPYmplY3QtPm1fdmVjdG9y
LmdldCgpKTsKIH0KIAogSlNBcnJheUJ1ZmZlciogSlNBcnJheUJ1ZmZlclZpZXc6OnVuc2hhcmVk
SlNCdWZmZXIoRXhlY1N0YXRlKiBleGVjKQpAQCAtMjg3LDcgKzI4Myw3IEBAIEFycmF5QnVmZmVy
KiBKU0FycmF5QnVmZmVyVmlldzo6c2xvd0Rvd24KICAgICB7CiAgICAgICAgIGF1dG8gbG9ja2Vy
ID0gaG9sZExvY2soY2VsbExvY2soKSk7CiAgICAgICAgIGJ1dHRlcmZseSgpLT5pbmRleGluZ0hl
YWRlcigpLT5zZXRBcnJheUJ1ZmZlcihidWZmZXIuZ2V0KCkpOwotICAgICAgICBtX3ZlY3Rvci5z
ZXRXaXRob3V0QmFycmllcihidWZmZXItPmRhdGEoKSwgbV9sZW5ndGgpOworICAgICAgICBtX3Zl
Y3Rvci5zZXRXaXRob3V0QmFycmllcihidWZmZXItPmRhdGEoKSk7CiAgICAgICAgIFdURjo6c3Rv
cmVTdG9yZUZlbmNlKCk7CiAgICAgICAgIG1fbW9kZSA9IFdhc3RlZnVsVHlwZWRBcnJheTsKICAg
ICB9CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0FycmF5QnVmZmVyVmll
dy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTQXJyYXlC
dWZmZXJWaWV3LmgJKHJldmlzaW9uIDI0NjI3MSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9y
dW50aW1lL0pTQXJyYXlCdWZmZXJWaWV3LmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBA
CiAvKgotICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTkgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEzLCAyMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQg
YmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1p
dHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMjcsNyArMjcs
NiBAQAogCiAjaW5jbHVkZSAiQXV4aWxpYXJ5QmFycmllci5oIgogI2luY2x1ZGUgIkpTT2JqZWN0
LmgiCi0jaW5jbHVkZSA8d3RmL1RhZ2dlZEFycmF5U3RvcmFnZVB0ci5oPgogCiBuYW1lc3BhY2Ug
SlNDIHsKIApAQCAtOTcsNyArOTYsNiBAQCBjbGFzcyBKU0FycmF5QnVmZmVyVmlldyA6IHB1Ymxp
YyBKU05vbkZpCiBwdWJsaWM6CiAgICAgdHlwZWRlZiBKU05vbkZpbmFsT2JqZWN0IEJhc2U7CiAg
ICAgc3RhdGljIGNvbnN0IHVuc2lnbmVkIGZhc3RTaXplTGltaXQgPSAxMDAwOwotICAgIHVzaW5n
IFZlY3RvclB0ciA9IENhZ2VkQmFycmllclB0cjxHaWdhY2FnZTo6UHJpbWl0aXZlLCB2b2lkLCB0
YWdDYWdlZFB0cj47CiAgICAgCiAgICAgc3RhdGljIHNpemVfdCBzaXplT2YodWludDMyX3QgbGVu
Z3RoLCB1aW50MzJfdCBlbGVtZW50U2l6ZSkKICAgICB7CkBAIC0xMzUsMTUgKzEzMywxNCBAQCBw
cm90ZWN0ZWQ6CiAgICAgICAgIGJvb2wgb3BlcmF0b3IhKCkgY29uc3QgeyByZXR1cm4gIW1fc3Ry
dWN0dXJlOyB9CiAgICAgICAgIAogICAgICAgICBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSgpIGNvbnN0
IHsgcmV0dXJuIG1fc3RydWN0dXJlOyB9Ci0gICAgICAgIHZvaWQqIHZlY3RvcigpIGNvbnN0IHsg
cmV0dXJuIG1fdmVjdG9yLmdldE1heUJlTnVsbChtX2xlbmd0aCk7IH0KKyAgICAgICAgdm9pZCog
dmVjdG9yKCkgY29uc3QgeyByZXR1cm4gbV92ZWN0b3IuZ2V0TWF5QmVOdWxsKCk7IH0KICAgICAg
ICAgdWludDMyX3QgbGVuZ3RoKCkgY29uc3QgeyByZXR1cm4gbV9sZW5ndGg7IH0KICAgICAgICAg
VHlwZWRBcnJheU1vZGUgbW9kZSgpIGNvbnN0IHsgcmV0dXJuIG1fbW9kZTsgfQogICAgICAgICBC
dXR0ZXJmbHkqIGJ1dHRlcmZseSgpIGNvbnN0IHsgcmV0dXJuIG1fYnV0dGVyZmx5OyB9CiAgICAg
ICAgIAogICAgIHByaXZhdGU6CiAgICAgICAgIFN0cnVjdHVyZSogbV9zdHJ1Y3R1cmU7Ci0gICAg
ICAgIHVzaW5nIFZlY3RvclR5cGUgPSBDYWdlZFB0cjxHaWdhY2FnZTo6UHJpbWl0aXZlLCB2b2lk
LCB0YWdDYWdlZFB0cj47Ci0gICAgICAgIFZlY3RvclR5cGUgbV92ZWN0b3I7CisgICAgICAgIENh
Z2VkUHRyPEdpZ2FjYWdlOjpQcmltaXRpdmUsIHZvaWQ+IG1fdmVjdG9yOwogICAgICAgICB1aW50
MzJfdCBtX2xlbmd0aDsKICAgICAgICAgVHlwZWRBcnJheU1vZGUgbV9tb2RlOwogICAgICAgICBC
dXR0ZXJmbHkqIG1fYnV0dGVyZmx5OwpAQCAtMTY3LDExICsxNjQsMTAgQEAgcHVibGljOgogICAg
IEpTQXJyYXlCdWZmZXIqIHBvc3NpYmx5U2hhcmVkSlNCdWZmZXIoRXhlY1N0YXRlKiBleGVjKTsK
ICAgICBSZWZQdHI8QXJyYXlCdWZmZXJWaWV3PiB1bnNoYXJlZEltcGwoKTsKICAgICBKU19FWFBP
UlRfUFJJVkFURSBSZWZQdHI8QXJyYXlCdWZmZXJWaWV3PiBwb3NzaWJseVNoYXJlZEltcGwoKTsK
LSAgICBib29sIGlzTmV1dGVyZWQoKSB7IHJldHVybiBoYXNBcnJheUJ1ZmZlcigpICYmICFoYXNW
ZWN0b3IoKTsgfQorICAgIGJvb2wgaXNOZXV0ZXJlZCgpIHsgcmV0dXJuIGhhc0FycmF5QnVmZmVy
KCkgJiYgIXZlY3RvcigpOyB9CiAgICAgdm9pZCBuZXV0ZXIoKTsKLQotICAgIGJvb2wgaGFzVmVj
dG9yKCkgY29uc3QgeyByZXR1cm4gISFtX3ZlY3RvcjsgfQotICAgIHZvaWQqIHZlY3RvcigpIGNv
bnN0IHsgcmV0dXJuIG1fdmVjdG9yLmdldE1heUJlTnVsbChsZW5ndGgoKSk7IH0KKyAgICAKKyAg
ICB2b2lkKiB2ZWN0b3IoKSBjb25zdCB7IHJldHVybiBtX3ZlY3Rvci5nZXRNYXlCZU51bGwoKTsg
fQogICAgIAogICAgIHVuc2lnbmVkIGJ5dGVPZmZzZXQoKTsKICAgICB1bnNpZ25lZCBsZW5ndGgo
KSBjb25zdCB7IHJldHVybiBtX2xlbmd0aDsgfQpAQCAtMTk1LDcgKzE5MSw3IEBAIHByb3RlY3Rl
ZDoKIAogICAgIHN0YXRpYyBTdHJpbmcgdG9TdHJpbmdOYW1lKGNvbnN0IEpTT2JqZWN0KiwgRXhl
Y1N0YXRlKik7CiAKLSAgICBWZWN0b3JQdHIgbV92ZWN0b3I7CisgICAgQ2FnZWRCYXJyaWVyUHRy
PEdpZ2FjYWdlOjpQcmltaXRpdmUsIHZvaWQ+IG1fdmVjdG9yOwogICAgIHVpbnQzMl90IG1fbGVu
Z3RoOwogICAgIFR5cGVkQXJyYXlNb2RlIG1fbW9kZTsKIH07CkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvcnVudGltZS9KU0dlbmVyaWNUeXBlZEFycmF5Vmlld0lubGluZXMuaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0dlbmVyaWNUeXBlZEFycmF5
Vmlld0lubGluZXMuaAkocmV2aXNpb24gMjQ2MjcxKQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L3J1bnRpbWUvSlNHZW5lcmljVHlwZWRBcnJheVZpZXdJbmxpbmVzLmgJKHdvcmtpbmcgY29weSkK
QEAgLTc3LDcgKzc3LDggQEAgSlNHZW5lcmljVHlwZWRBcnJheVZpZXc8QWRhcHRvcj4qIEpTR2Vu
ZQogfQogCiB0ZW1wbGF0ZTx0eXBlbmFtZSBBZGFwdG9yPgotSlNHZW5lcmljVHlwZWRBcnJheVZp
ZXc8QWRhcHRvcj4qIEpTR2VuZXJpY1R5cGVkQXJyYXlWaWV3PEFkYXB0b3I+OjpjcmVhdGVVbmlu
aXRpYWxpemVkKEV4ZWNTdGF0ZSogZXhlYywgU3RydWN0dXJlKiBzdHJ1Y3R1cmUsIHVuc2lnbmVk
IGxlbmd0aCkKK0pTR2VuZXJpY1R5cGVkQXJyYXlWaWV3PEFkYXB0b3I+KiBKU0dlbmVyaWNUeXBl
ZEFycmF5VmlldzxBZGFwdG9yPjo6Y3JlYXRlVW5pbml0aWFsaXplZCgKKyAgICBFeGVjU3RhdGUq
IGV4ZWMsIFN0cnVjdHVyZSogc3RydWN0dXJlLCB1bnNpZ25lZCBsZW5ndGgpCiB7CiAgICAgVk0m
IHZtID0gZXhlYy0+dm0oKTsKICAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2
bSk7CkBAIC01MDYsNyArNTA3LDcgQEAgc2l6ZV90IEpTR2VuZXJpY1R5cGVkQXJyYXlWaWV3PEFk
YXB0b3I+OgogCiAgICAgaWYgKHRoaXNPYmplY3QtPm1fbW9kZSA9PSBPdmVyc2l6ZVR5cGVkQXJy
YXkpCiAgICAgICAgIHJldHVybiBCYXNlOjplc3RpbWF0ZWRTaXplKHRoaXNPYmplY3QsIHZtKSAr
IHRoaXNPYmplY3QtPmJ5dGVTaXplKCk7Ci0gICAgaWYgKHRoaXNPYmplY3QtPm1fbW9kZSA9PSBG
YXN0VHlwZWRBcnJheSAmJiB0aGlzT2JqZWN0LT5oYXNWZWN0b3IoKSkKKyAgICBpZiAodGhpc09i
amVjdC0+bV9tb2RlID09IEZhc3RUeXBlZEFycmF5ICYmIHRoaXNPYmplY3QtPm1fdmVjdG9yKQog
ICAgICAgICByZXR1cm4gQmFzZTo6ZXN0aW1hdGVkU2l6ZSh0aGlzT2JqZWN0LCB2bSkgKyB0aGlz
T2JqZWN0LT5ieXRlU2l6ZSgpOwogCiAgICAgcmV0dXJuIEJhc2U6OmVzdGltYXRlZFNpemUodGhp
c09iamVjdCwgdm0pOwpAQCAtNTI1LDcgKzUyNiw3IEBAIHZvaWQgSlNHZW5lcmljVHlwZWRBcnJh
eVZpZXc8QWRhcHRvcj46OnYKICAgICB7CiAgICAgICAgIGF1dG8gbG9ja2VyID0gaG9sZExvY2so
dGhpc09iamVjdC0+Y2VsbExvY2soKSk7CiAgICAgICAgIG1vZGUgPSB0aGlzT2JqZWN0LT5tX21v
ZGU7Ci0gICAgICAgIHZlY3RvciA9IHRoaXNPYmplY3QtPnZlY3RvcigpOworICAgICAgICB2ZWN0
b3IgPSB0aGlzT2JqZWN0LT5tX3ZlY3Rvci5nZXRNYXlCZU51bGwoKTsKICAgICAgICAgYnl0ZVNp
emUgPSB0aGlzT2JqZWN0LT5ieXRlU2l6ZSgpOwogICAgIH0KICAgICAKSW5kZXg6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ydW50aW1lL09wdGlvbnMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvcnVudGltZS9PcHRpb25zLmgJKHJldmlzaW9uIDI0NjI3MSkKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL09wdGlvbnMuaAkod29ya2luZyBjb3B5KQpAQCAtNDky
LDcgKzQ5Miw4IEBAIGNvbnN0ZXhwciBib29sIGVuYWJsZVdlYkFzc2VtYmx5U3RyZWFtaW4KICAg
ICB2KHVuc2lnbmVkLCB3ZWJBc3NlbWJseUxvb3BEZWNyZW1lbnQsIDE1LCBOb3JtYWwsICJUaGUg
YW1vdW50IHRoZSB0aWVyIHVwIGNvdW50ZG93biBpcyBkZWNyZW1lbnRlZCBvbiBlYWNoIGxvb3Ag
YmFja2VkZ2UuIikgXAogICAgIHYodW5zaWduZWQsIHdlYkFzc2VtYmx5RnVuY3Rpb25FbnRyeURl
Y3JlbWVudCwgMSwgTm9ybWFsLCAiVGhlIGFtb3VudCB0aGUgdGllciB1cCBjb3VudGRvd24gaXMg
ZGVjcmVtZW50ZWQgb24gZWFjaCBmdW5jdGlvbiBlbnRyeS4iKSBcCiAgICAgXAotICAgIHYoYm9v
bCwgdXNlV2ViQXNzZW1ibHlGYXN0TWVtb3J5LCB0cnVlLCBOb3JtYWwsICJJZiB0cnVlLCB3ZSB3
aWxsIHRyeSB0byB1c2UgYSAzMi1iaXQgYWRkcmVzcyBzcGFjZSB3aXRoIGEgc2lnbmFsIGhhbmRs
ZXIgdG8gYm91bmRzIGNoZWNrIHdhc20gbWVtb3J5LiIpIFwKKyAgICAvKiBGSVhNRTogZW5hYmxl
IGZhc3QgbWVtb3JpZXMgb24gaU9TIGFuZCBwcmUtYWxsb2NhdGUgdGhlbS4gaHR0cHM6Ly9idWdz
LndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE3MDc3NCAqLyBcCisgICAgdihib29sLCB1c2VX
ZWJBc3NlbWJseUZhc3RNZW1vcnksICFpc0lPUygpLCBOb3JtYWwsICJJZiB0cnVlLCB3ZSB3aWxs
IHRyeSB0byB1c2UgYSAzMi1iaXQgYWRkcmVzcyBzcGFjZSB3aXRoIGEgc2lnbmFsIGhhbmRsZXIg
dG8gYm91bmRzIGNoZWNrIHdhc20gbWVtb3J5LiIpIFwKICAgICB2KGJvb2wsIGxvZ1dlYkFzc2Vt
Ymx5TWVtb3J5LCBmYWxzZSwgTm9ybWFsLCBudWxscHRyKSBcCiAgICAgdih1bnNpZ25lZCwgd2Vi
QXNzZW1ibHlGYXN0TWVtb3J5UmVkem9uZVBhZ2VzLCAxMjgsIE5vcm1hbCwgIldlYkFzc2VtYmx5
IGZhc3QgbWVtb3JpZXMgdXNlIDRHaUIgdmlydHVhbCBhbGxvY2F0aW9ucywgcGx1cyBhIHJlZHpv
bmUgKGNvdW50ZWQgYXMgbXVsdGlwbGUgb2YgNjRLaUIgV2ViQXNzZW1ibHkgcGFnZXMpIGF0IHRo
ZSBlbmQgdG8gY2F0Y2ggcmVnK2ltbSBhY2Nlc3NlcyB3aGljaCBleGNlZWQgMzItYml0LCBhbnl0
aGluZyBiZXlvbmQgdGhlIHJlZHpvbmUgaXMgZXhwbGljaXRseSBib3VuZHMtY2hlY2tlZCIpIFwK
ICAgICB2KGJvb2wsIGNyYXNoSWZXZWJBc3NlbWJseUNhbnRGYXN0TWVtb3J5LCBmYWxzZSwgTm9y
bWFsLCAiSWYgdHJ1ZSwgd2Ugd2lsbCBjcmFzaCBpZiB3ZSBjYW4ndCBvYnRhaW4gZmFzdCBtZW1v
cnkgZm9yIHdhc20uIikgXApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU2Nv
cGVkQXJndW1lbnRzVGFibGUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL1Njb3BlZEFyZ3VtZW50c1RhYmxlLmNwcAkocmV2aXNpb24gMjQ2MjcxKQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU2NvcGVkQXJndW1lbnRzVGFibGUuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC02OCwxNiArNjgsMTYgQEAgU2NvcGVkQXJndW1lbnRzVGFibGUqIFNj
b3BlZEFyZ3VtZW50c1RhYgogewogICAgIFNjb3BlZEFyZ3VtZW50c1RhYmxlKiByZXN1bHQgPSBj
cmVhdGUodm0sIG1fbGVuZ3RoKTsKICAgICBmb3IgKHVuc2lnbmVkIGkgPSBtX2xlbmd0aDsgaS0t
OykKLSAgICAgICAgcmVzdWx0LT5hdChpKSA9IHRoaXMtPmF0KGkpOworICAgICAgICByZXN1bHQt
Pm1fYXJndW1lbnRzW2ldID0gbV9hcmd1bWVudHNbaV07CiAgICAgcmV0dXJuIHJlc3VsdDsKIH0K
IAogU2NvcGVkQXJndW1lbnRzVGFibGUqIFNjb3BlZEFyZ3VtZW50c1RhYmxlOjpzZXRMZW5ndGgo
Vk0mIHZtLCB1aW50MzJfdCBuZXdMZW5ndGgpCiB7CiAgICAgaWYgKExJS0VMWSghbV9sb2NrZWQp
KSB7Ci0gICAgICAgIEFyZ3VtZW50c1B0ciBuZXdBcmd1bWVudHMgPSBBcmd1bWVudHNQdHI6OmNy
ZWF0ZShuZXdMZW5ndGgsIG5ld0xlbmd0aCk7CisgICAgICAgIEFyZ3VtZW50c1B0ciBuZXdBcmd1
bWVudHMgPSBBcmd1bWVudHNQdHI6OmNyZWF0ZShuZXdMZW5ndGgpOwogICAgICAgICBmb3IgKHVu
c2lnbmVkIGkgPSBzdGQ6Om1pbihtX2xlbmd0aCwgbmV3TGVuZ3RoKTsgaS0tOykKLSAgICAgICAg
ICAgIG5ld0FyZ3VtZW50cy5hdChpLCBuZXdMZW5ndGgpID0gdGhpcy0+YXQoaSk7CisgICAgICAg
ICAgICBuZXdBcmd1bWVudHNbaV0gPSBtX2FyZ3VtZW50c1tpXTsKICAgICAgICAgbV9sZW5ndGgg
PSBuZXdMZW5ndGg7CiAgICAgICAgIG1fYXJndW1lbnRzID0gV1RGTW92ZShuZXdBcmd1bWVudHMp
OwogICAgICAgICByZXR1cm4gdGhpczsKQEAgLTg1LDEyICs4NSwxMCBAQCBTY29wZWRBcmd1bWVu
dHNUYWJsZSogU2NvcGVkQXJndW1lbnRzVGFiCiAgICAgCiAgICAgU2NvcGVkQXJndW1lbnRzVGFi
bGUqIHJlc3VsdCA9IGNyZWF0ZSh2bSwgbmV3TGVuZ3RoKTsKICAgICBmb3IgKHVuc2lnbmVkIGkg
PSBzdGQ6Om1pbihtX2xlbmd0aCwgbmV3TGVuZ3RoKTsgaS0tOykKLSAgICAgICAgcmVzdWx0LT5h
dChpKSA9IHRoaXMtPmF0KGkpOworICAgICAgICByZXN1bHQtPm1fYXJndW1lbnRzW2ldID0gbV9h
cmd1bWVudHNbaV07CiAgICAgcmV0dXJuIHJlc3VsdDsKIH0KIAotc3RhdGljX2Fzc2VydChzdGQ6
OmlzX3RyaXZpYWxseV9kZXN0cnVjdGlibGU8U2NvcGVPZmZzZXQ+Ojp2YWx1ZSwgIiIpOwotCiBT
Y29wZWRBcmd1bWVudHNUYWJsZSogU2NvcGVkQXJndW1lbnRzVGFibGU6OnNldChWTSYgdm0sIHVp
bnQzMl90IGksIFNjb3BlT2Zmc2V0IHZhbHVlKQogewogICAgIFNjb3BlZEFyZ3VtZW50c1RhYmxl
KiByZXN1bHQ7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TY29wZWRBcmd1
bWVudHNUYWJsZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1l
L1Njb3BlZEFyZ3VtZW50c1RhYmxlLmgJKHJldmlzaW9uIDI0NjI3MSkKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ydW50aW1lL1Njb3BlZEFyZ3VtZW50c1RhYmxlLmgJKHdvcmtpbmcgY29weSkK
QEAgLTYxLDcgKzYxLDEwIEBAIHB1YmxpYzoKICAgICB1aW50MzJfdCBsZW5ndGgoKSBjb25zdCB7
IHJldHVybiBtX2xlbmd0aDsgfQogICAgIFNjb3BlZEFyZ3VtZW50c1RhYmxlKiBzZXRMZW5ndGgo
Vk0mLCB1aW50MzJfdCBuZXdMZW5ndGgpOwogICAgIAotICAgIFNjb3BlT2Zmc2V0IGdldCh1aW50
MzJfdCBpKSBjb25zdCB7IHJldHVybiBhdChpKTsgfQorICAgIFNjb3BlT2Zmc2V0IGdldCh1aW50
MzJfdCBpKSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuIGNvbnN0X2Nhc3Q8U2NvcGVkQXJn
dW1lbnRzVGFibGUqPih0aGlzKS0+YXQoaSk7CisgICAgfQogICAgIAogICAgIHZvaWQgbG9jaygp
CiAgICAgewpAQCAtNzcsMTMgKzgwLDEzIEBAIHB1YmxpYzoKICAgICBzdGF0aWMgcHRyZGlmZl90
IG9mZnNldE9mTGVuZ3RoKCkgeyByZXR1cm4gT0JKRUNUX09GRlNFVE9GKFNjb3BlZEFyZ3VtZW50
c1RhYmxlLCBtX2xlbmd0aCk7IH0KICAgICBzdGF0aWMgcHRyZGlmZl90IG9mZnNldE9mQXJndW1l
bnRzKCkgeyByZXR1cm4gT0JKRUNUX09GRlNFVE9GKFNjb3BlZEFyZ3VtZW50c1RhYmxlLCBtX2Fy
Z3VtZW50cyk7IH0KIAotICAgIHR5cGVkZWYgQ2FnZWRVbmlxdWVQdHI8R2lnYWNhZ2U6OlByaW1p
dGl2ZSwgU2NvcGVPZmZzZXQ+IEFyZ3VtZW50c1B0cjsKKyAgICB0eXBlZGVmIENhZ2VkVW5pcXVl
UHRyPEdpZ2FjYWdlOjpQcmltaXRpdmUsIFNjb3BlT2Zmc2V0W10+IEFyZ3VtZW50c1B0cjsKIAog
cHJpdmF0ZToKLSAgICBTY29wZU9mZnNldCYgYXQodWludDMyX3QgaSkgY29uc3QKKyAgICBTY29w
ZU9mZnNldCYgYXQodWludDMyX3QgaSkKICAgICB7CiAgICAgICAgIEFTU0VSVF9XSVRIX1NFQ1VS
SVRZX0lNUExJQ0FUSU9OKGkgPCBtX2xlbmd0aCk7Ci0gICAgICAgIHJldHVybiBtX2FyZ3VtZW50
cy5nZXQobGVuZ3RoKCkpW2ldOworICAgICAgICByZXR1cm4gbV9hcmd1bWVudHNbaV07CiAgICAg
fQogICAgIAogICAgIHVpbnQzMl90IG1fbGVuZ3RoOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL3J1bnRpbWUvU3ltYm9sVGFibGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvcnVudGltZS9TeW1ib2xUYWJsZS5oCShyZXZpc2lvbiAyNDYyNzEpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcnVudGltZS9TeW1ib2xUYWJsZS5oCSh3b3JraW5nIGNvcHkpCkBAIC02
MzYsOSArNjM2LDggQEAgcHVibGljOgogICAgIHZvaWQgc2V0QXJndW1lbnRzTGVuZ3RoKFZNJiB2
bSwgdWludDMyX3QgbGVuZ3RoKQogICAgIHsKICAgICAgICAgaWYgKFVOTElLRUxZKCFtX2FyZ3Vt
ZW50cykpCi0gICAgICAgICAgICBtX2FyZ3VtZW50cy5zZXQodm0sIHRoaXMsIFNjb3BlZEFyZ3Vt
ZW50c1RhYmxlOjpjcmVhdGUodm0sIGxlbmd0aCkpOwotICAgICAgICBlbHNlCi0gICAgICAgICAg
ICBtX2FyZ3VtZW50cy5zZXQodm0sIHRoaXMsIG1fYXJndW1lbnRzLT5zZXRMZW5ndGgodm0sIGxl
bmd0aCkpOworICAgICAgICAgICAgbV9hcmd1bWVudHMuc2V0KHZtLCB0aGlzLCBTY29wZWRBcmd1
bWVudHNUYWJsZTo6Y3JlYXRlKHZtKSk7CisgICAgICAgIG1fYXJndW1lbnRzLnNldCh2bSwgdGhp
cywgbV9hcmd1bWVudHMtPnNldExlbmd0aCh2bSwgbGVuZ3RoKSk7CiAgICAgfQogICAgIAogICAg
IFNjb3BlT2Zmc2V0IGFyZ3VtZW50T2Zmc2V0KHVpbnQzMl90IGkpIGNvbnN0CkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtQWlySVJHZW5lcmF0b3IuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21BaXJJUkdlbmVyYXRvci5jcHAJKHJl
dmlzaW9uIDI0NjI3MSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21BaXJJUkdl
bmVyYXRvci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTgzNiw4ICs4MzYsNiBAQCB2b2lkIEFpcklS
R2VuZXJhdG9yOjpyZXN0b3JlV2ViQXNzZW1ibHlHCiAgICAgICAgIFJlZ2lzdGVyU2V0IGNsb2Ji
ZXJzOwogICAgICAgICBjbG9iYmVycy5zZXQocGlubmVkUmVncy0+YmFzZU1lbW9yeVBvaW50ZXIp
OwogICAgICAgICBjbG9iYmVycy5zZXQocGlubmVkUmVncy0+c2l6ZVJlZ2lzdGVyKTsKLSAgICAg
ICAgaWYgKCFpc0FSTTY0KCkpCi0gICAgICAgICAgICBjbG9iYmVycy5zZXQoUmVnaXN0ZXJTZXQ6
Om1hY3JvU2NyYXRjaFJlZ2lzdGVycygpKTsKIAogICAgICAgICBhdXRvKiBwYXRjaHBvaW50ID0g
YWRkUGF0Y2hwb2ludChCMzo6Vm9pZCk7CiAgICAgICAgIEIzOjpFZmZlY3RzIGVmZmVjdHMgPSBC
Mzo6RWZmZWN0czo6bm9uZSgpOwpAQCAtODQ1LDE4ICs4NDMsMTAgQEAgdm9pZCBBaXJJUkdlbmVy
YXRvcjo6cmVzdG9yZVdlYkFzc2VtYmx5RwogICAgICAgICBlZmZlY3RzLnJlYWRzID0gQjM6Okhl
YXBSYW5nZTo6dG9wKCk7CiAgICAgICAgIHBhdGNocG9pbnQtPmVmZmVjdHMgPSBlZmZlY3RzOwog
ICAgICAgICBwYXRjaHBvaW50LT5jbG9iYmVyKGNsb2JiZXJzKTsKLSAgICAgICAgcGF0Y2hwb2lu
dC0+bnVtR1BTY3JhdGNoUmVnaXN0ZXJzID0gR2lnYWNhZ2U6OmlzRW5hYmxlZChHaWdhY2FnZTo6
UHJpbWl0aXZlKSA/IDEgOiAwOwogCiAgICAgICAgIHBhdGNocG9pbnQtPnNldEdlbmVyYXRvcihb
cGlubmVkUmVnc10gKENDYWxsSGVscGVycyYgaml0LCBjb25zdCBCMzo6U3RhY2ttYXBHZW5lcmF0
aW9uUGFyYW1zJiBwYXJhbXMpIHsKLSAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUKCFHaWdhY2Fn
ZTo6aXNFbmFibGVkKEdpZ2FjYWdlOjpQcmltaXRpdmUpIHx8ICFpc0FSTTY0KCkpOwotICAgICAg
ICAgICAgQWxsb3dNYWNyb1NjcmF0Y2hSZWdpc3RlclVzYWdlSWYgYWxsb3dTY3JhdGNoKGppdCwg
IWlzQVJNNjQoKSk7Ci0gICAgICAgICAgICBHUFJSZWcgYmFzZU1lbW9yeSA9IHBpbm5lZFJlZ3Mt
PmJhc2VNZW1vcnlQb2ludGVyOwotICAgICAgICAgICAgR1BSUmVnIHNjcmF0Y2hPclNpemUgPSBH
aWdhY2FnZTo6aXNFbmFibGVkKEdpZ2FjYWdlOjpQcmltaXRpdmUpID8gcGFyYW1zLmdwU2NyYXRj
aCgwKSA6IHBpbm5lZFJlZ3MtPnNpemVSZWdpc3RlcjsKLQogICAgICAgICAgICAgaml0LmxvYWRQ
dHIoQ0NhbGxIZWxwZXJzOjpBZGRyZXNzKHBhcmFtc1swXS5ncHIoKSwgSW5zdGFuY2U6Om9mZnNl
dE9mQ2FjaGVkTWVtb3J5U2l6ZSgpKSwgcGlubmVkUmVncy0+c2l6ZVJlZ2lzdGVyKTsKLSAgICAg
ICAgICAgIGppdC5sb2FkUHRyKENDYWxsSGVscGVyczo6QWRkcmVzcyhwYXJhbXNbMF0uZ3ByKCks
IEluc3RhbmNlOjpvZmZzZXRPZkNhY2hlZE1lbW9yeSgpKSwgYmFzZU1lbW9yeSk7Ci0KLSAgICAg
ICAgICAgIGppdC5jYWdlQ29uZGl0aW9uYWxseShHaWdhY2FnZTo6UHJpbWl0aXZlLCBiYXNlTWVt
b3J5LCBzY3JhdGNoT3JTaXplKTsKKyAgICAgICAgICAgIGppdC5sb2FkUHRyKENDYWxsSGVscGVy
czo6QWRkcmVzcyhwYXJhbXNbMF0uZ3ByKCksIEluc3RhbmNlOjpvZmZzZXRPZkNhY2hlZE1lbW9y
eSgpKSwgcGlubmVkUmVncy0+YmFzZU1lbW9yeVBvaW50ZXIpOwogICAgICAgICB9KTsKIAogICAg
ICAgICBlbWl0UGF0Y2hwb2ludChibG9jaywgcGF0Y2hwb2ludCwgVG1wKCksIGluc3RhbmNlKTsK
QEAgLTE5NjgsOCArMTk1OCw2IEBAIGF1dG8gQWlySVJHZW5lcmF0b3I6OmFkZENhbGxJbmRpcmVj
dChjb24KICAgICAgICAgLy8gRklYTUU6IFdlIHNob3VsZG4ndCBoYXZlIHRvIGRvIHRoaXM6IGh0
dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNzIxODEKICAgICAgICAgcGF0
Y2hwb2ludC0+Y2xvYmJlcihQaW5uZWRSZWdpc3RlckluZm86OmdldCgpLnRvU2F2ZShNZW1vcnlN
b2RlOjpCb3VuZHNDaGVja2luZykpOwogICAgICAgICBwYXRjaHBvaW50LT5jbG9iYmVyKFJlZ2lz
dGVyU2V0OjptYWNyb1NjcmF0Y2hSZWdpc3RlcnMoKSk7Ci0gICAgICAgIHBhdGNocG9pbnQtPm51
bUdQU2NyYXRjaFJlZ2lzdGVycyA9IEdpZ2FjYWdlOjppc0VuYWJsZWQoR2lnYWNhZ2U6OlByaW1p
dGl2ZSkgPyAxIDogMDsKLQogICAgICAgICBwYXRjaHBvaW50LT5zZXRHZW5lcmF0b3IoWz1dIChD
Q2FsbEhlbHBlcnMmIGppdCwgY29uc3QgQjM6OlN0YWNrbWFwR2VuZXJhdGlvblBhcmFtcyYgcGFy
YW1zKSB7CiAgICAgICAgICAgICBBbGxvd01hY3JvU2NyYXRjaFJlZ2lzdGVyVXNhZ2UgYWxsb3dT
Y3JhdGNoKGppdCk7CiAgICAgICAgICAgICBHUFJSZWcgbmV3Q29udGV4dEluc3RhbmNlID0gcGFy
YW1zWzBdLmdwcigpOwpAQCAtMTk4MywxMiArMTk3MSw4IEBAIGF1dG8gQWlySVJHZW5lcmF0b3I6
OmFkZENhbGxJbmRpcmVjdChjb24KICAgICAgICAgICAgIC8vIEZJWE1FOiBXZSBzaG91bGQgc3Vw
cG9ydCBtb3JlIHRoYW4gb25lIG1lbW9yeSBzaXplIHJlZ2lzdGVyCiAgICAgICAgICAgICAvLyAg
IHNlZTogaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE2Mjk1MgogICAg
ICAgICAgICAgQVNTRVJUKHBpbm5lZFJlZ3Muc2l6ZVJlZ2lzdGVyICE9IG5ld0NvbnRleHRJbnN0
YW5jZSk7Ci0gICAgICAgICAgICBHUFJSZWcgc2NyYXRjaE9yU2l6ZSA9IEdpZ2FjYWdlOjppc0Vu
YWJsZWQoR2lnYWNhZ2U6OlByaW1pdGl2ZSkgPyBwYXJhbXMuZ3BTY3JhdGNoKDApIDogcGlubmVk
UmVncy5zaXplUmVnaXN0ZXI7Ci0KICAgICAgICAgICAgIGppdC5sb2FkUHRyKENDYWxsSGVscGVy
czo6QWRkcmVzcyhuZXdDb250ZXh0SW5zdGFuY2UsIEluc3RhbmNlOjpvZmZzZXRPZkNhY2hlZE1l
bW9yeVNpemUoKSksIHBpbm5lZFJlZ3Muc2l6ZVJlZ2lzdGVyKTsgLy8gTWVtb3J5IHNpemUuCiAg
ICAgICAgICAgICBqaXQubG9hZFB0cihDQ2FsbEhlbHBlcnM6OkFkZHJlc3MobmV3Q29udGV4dElu
c3RhbmNlLCBJbnN0YW5jZTo6b2Zmc2V0T2ZDYWNoZWRNZW1vcnkoKSksIGJhc2VNZW1vcnkpOyAv
LyBNZW1vcnk6OnZvaWQqLgotCi0gICAgICAgICAgICBqaXQuY2FnZUNvbmRpdGlvbmFsbHkoR2ln
YWNhZ2U6OlByaW1pdGl2ZSwgYmFzZU1lbW9yeSwgc2NyYXRjaE9yU2l6ZSk7CiAgICAgICAgIH0p
OwogCiAgICAgICAgIGVtaXRQYXRjaHBvaW50KGRvQ29udGV4dFN3aXRjaCwgcGF0Y2hwb2ludCwg
VG1wKCksIG5ld0NvbnRleHRJbnN0YW5jZSwgaW5zdGFuY2VWYWx1ZSgpKTsKSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21CM0lSR2VuZXJhdG9yLmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtQjNJUkdlbmVyYXRvci5jcHAJKHJldmlz
aW9uIDI0NjI3MSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21CM0lSR2VuZXJh
dG9yLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDcsNyArNDcsNiBAQAogI2luY2x1ZGUgIkIzVmFy
aWFibGVWYWx1ZS5oIgogI2luY2x1ZGUgIkIzV2FzbUFkZHJlc3NWYWx1ZS5oIgogI2luY2x1ZGUg
IkIzV2FzbUJvdW5kc0NoZWNrVmFsdWUuaCIKLSNpbmNsdWRlICJEaXNhbGxvd01hY3JvU2NyYXRj
aFJlZ2lzdGVyVXNhZ2UuaCIKICNpbmNsdWRlICJKU0NJbmxpbmVzLmgiCiAjaW5jbHVkZSAiSlNX
ZWJBc3NlbWJseUluc3RhbmNlLmgiCiAjaW5jbHVkZSAiU2NyYXRjaFJlZ2lzdGVyQWxsb2NhdG9y
LmgiCkBAIC00NzgsOCArNDc3LDYgQEAgdm9pZCBCM0lSR2VuZXJhdG9yOjpyZXN0b3JlV2ViQXNz
ZW1ibHlHbAogICAgICAgICBSZWdpc3RlclNldCBjbG9iYmVyczsKICAgICAgICAgY2xvYmJlcnMu
c2V0KHBpbm5lZFJlZ3MtPmJhc2VNZW1vcnlQb2ludGVyKTsKICAgICAgICAgY2xvYmJlcnMuc2V0
KHBpbm5lZFJlZ3MtPnNpemVSZWdpc3Rlcik7Ci0gICAgICAgIGlmICghaXNBUk02NCgpKQotICAg
ICAgICAgICAgY2xvYmJlcnMuc2V0KFJlZ2lzdGVyU2V0OjptYWNyb1NjcmF0Y2hSZWdpc3RlcnMo
KSk7CiAKICAgICAgICAgQjM6OlBhdGNocG9pbnRWYWx1ZSogcGF0Y2hwb2ludCA9IGJsb2NrLT5h
cHBlbmROZXc8QjM6OlBhdGNocG9pbnRWYWx1ZT4ocHJvYywgQjM6OlZvaWQsIG9yaWdpbigpKTsK
ICAgICAgICAgRWZmZWN0cyBlZmZlY3RzID0gRWZmZWN0czo6bm9uZSgpOwpAQCAtNDg3LDE5ICs0
ODQsMTMgQEAgdm9pZCBCM0lSR2VuZXJhdG9yOjpyZXN0b3JlV2ViQXNzZW1ibHlHbAogICAgICAg
ICBlZmZlY3RzLnJlYWRzID0gQjM6OkhlYXBSYW5nZTo6dG9wKCk7CiAgICAgICAgIHBhdGNocG9p
bnQtPmVmZmVjdHMgPSBlZmZlY3RzOwogICAgICAgICBwYXRjaHBvaW50LT5jbG9iYmVyKGNsb2Ji
ZXJzKTsKLSAgICAgICAgcGF0Y2hwb2ludC0+bnVtR1BTY3JhdGNoUmVnaXN0ZXJzID0gR2lnYWNh
Z2U6OmlzRW5hYmxlZChHaWdhY2FnZTo6UHJpbWl0aXZlKSA/IDEgOiAwOwogCiAgICAgICAgIHBh
dGNocG9pbnQtPmFwcGVuZChpbnN0YW5jZSwgVmFsdWVSZXA6OlNvbWVSZWdpc3Rlcik7CisKICAg
ICAgICAgcGF0Y2hwb2ludC0+c2V0R2VuZXJhdG9yKFtwaW5uZWRSZWdzXSAoQ0NhbGxIZWxwZXJz
JiBqaXQsIGNvbnN0IEIzOjpTdGFja21hcEdlbmVyYXRpb25QYXJhbXMmIHBhcmFtcykgewotICAg
ICAgICAgICAgUkVMRUFTRV9BU1NFUlQoIUdpZ2FjYWdlOjppc0VuYWJsZWQoR2lnYWNhZ2U6OlBy
aW1pdGl2ZSkgfHwgIWlzQVJNNjQoKSk7Ci0gICAgICAgICAgICBBbGxvd01hY3JvU2NyYXRjaFJl
Z2lzdGVyVXNhZ2VJZiBhbGxvd1NjcmF0Y2goaml0LCAhaXNBUk02NCgpKTsKICAgICAgICAgICAg
IEdQUlJlZyBiYXNlTWVtb3J5ID0gcGlubmVkUmVncy0+YmFzZU1lbW9yeVBvaW50ZXI7Ci0gICAg
ICAgICAgICBHUFJSZWcgc2NyYXRjaE9yU2l6ZSA9IEdpZ2FjYWdlOjppc0VuYWJsZWQoR2lnYWNh
Z2U6OlByaW1pdGl2ZSkgPyBwYXJhbXMuZ3BTY3JhdGNoKDApIDogcGlubmVkUmVncy0+c2l6ZVJl
Z2lzdGVyOwotCiAgICAgICAgICAgICBqaXQubG9hZFB0cihDQ2FsbEhlbHBlcnM6OkFkZHJlc3Mo
cGFyYW1zWzBdLmdwcigpLCBJbnN0YW5jZTo6b2Zmc2V0T2ZDYWNoZWRNZW1vcnlTaXplKCkpLCBw
aW5uZWRSZWdzLT5zaXplUmVnaXN0ZXIpOwogICAgICAgICAgICAgaml0LmxvYWRQdHIoQ0NhbGxI
ZWxwZXJzOjpBZGRyZXNzKHBhcmFtc1swXS5ncHIoKSwgSW5zdGFuY2U6Om9mZnNldE9mQ2FjaGVk
TWVtb3J5KCkpLCBiYXNlTWVtb3J5KTsKLQotICAgICAgICAgICAgaml0LmNhZ2VDb25kaXRpb25h
bGx5KEdpZ2FjYWdlOjpQcmltaXRpdmUsIGJhc2VNZW1vcnksIHNjcmF0Y2hPclNpemUpOwogICAg
ICAgICB9KTsKICAgICB9CiB9CkBAIC0xMzgwLDggKzEzNzEsNiBAQCBhdXRvIEIzSVJHZW5lcmF0
b3I6OmFkZENhbGxJbmRpcmVjdChjb25zCiAgICAgICAgIHBhdGNocG9pbnQtPmNsb2JiZXIoUmVn
aXN0ZXJTZXQ6Om1hY3JvU2NyYXRjaFJlZ2lzdGVycygpKTsKICAgICAgICAgcGF0Y2hwb2ludC0+
YXBwZW5kKG5ld0NvbnRleHRJbnN0YW5jZSwgVmFsdWVSZXA6OlNvbWVSZWdpc3Rlcik7CiAgICAg
ICAgIHBhdGNocG9pbnQtPmFwcGVuZChpbnN0YW5jZVZhbHVlKCksIFZhbHVlUmVwOjpTb21lUmVn
aXN0ZXIpOwotICAgICAgICBwYXRjaHBvaW50LT5udW1HUFNjcmF0Y2hSZWdpc3RlcnMgPSBHaWdh
Y2FnZTo6aXNFbmFibGVkKEdpZ2FjYWdlOjpQcmltaXRpdmUpID8gMSA6IDA7Ci0KICAgICAgICAg
cGF0Y2hwb2ludC0+c2V0R2VuZXJhdG9yKFs9XSAoQ0NhbGxIZWxwZXJzJiBqaXQsIGNvbnN0IEIz
OjpTdGFja21hcEdlbmVyYXRpb25QYXJhbXMmIHBhcmFtcykgewogICAgICAgICAgICAgQWxsb3dN
YWNyb1NjcmF0Y2hSZWdpc3RlclVzYWdlIGFsbG93U2NyYXRjaChqaXQpOwogICAgICAgICAgICAg
R1BSUmVnIG5ld0NvbnRleHRJbnN0YW5jZSA9IHBhcmFtc1swXS5ncHIoKTsKQEAgLTEzOTYsMTIg
KzEzODUsOCBAQCBhdXRvIEIzSVJHZW5lcmF0b3I6OmFkZENhbGxJbmRpcmVjdChjb25zCiAgICAg
ICAgICAgICAvLyBGSVhNRTogV2Ugc2hvdWxkIHN1cHBvcnQgbW9yZSB0aGFuIG9uZSBtZW1vcnkg
c2l6ZSByZWdpc3RlcgogICAgICAgICAgICAgLy8gICBzZWU6IGh0dHBzOi8vYnVncy53ZWJraXQu
b3JnL3Nob3dfYnVnLmNnaT9pZD0xNjI5NTIKICAgICAgICAgICAgIEFTU0VSVChwaW5uZWRSZWdz
LnNpemVSZWdpc3RlciAhPSBuZXdDb250ZXh0SW5zdGFuY2UpOwotICAgICAgICAgICAgR1BSUmVn
IHNjcmF0Y2hPclNpemUgPSBHaWdhY2FnZTo6aXNFbmFibGVkKEdpZ2FjYWdlOjpQcmltaXRpdmUp
ID8gcGFyYW1zLmdwU2NyYXRjaCgwKSA6IHBpbm5lZFJlZ3Muc2l6ZVJlZ2lzdGVyOwotCiAgICAg
ICAgICAgICBqaXQubG9hZFB0cihDQ2FsbEhlbHBlcnM6OkFkZHJlc3MobmV3Q29udGV4dEluc3Rh
bmNlLCBJbnN0YW5jZTo6b2Zmc2V0T2ZDYWNoZWRNZW1vcnlTaXplKCkpLCBwaW5uZWRSZWdzLnNp
emVSZWdpc3Rlcik7IC8vIE1lbW9yeSBzaXplLgogICAgICAgICAgICAgaml0LmxvYWRQdHIoQ0Nh
bGxIZWxwZXJzOjpBZGRyZXNzKG5ld0NvbnRleHRJbnN0YW5jZSwgSW5zdGFuY2U6Om9mZnNldE9m
Q2FjaGVkTWVtb3J5KCkpLCBiYXNlTWVtb3J5KTsgLy8gTWVtb3J5Ojp2b2lkKi4KLQotICAgICAg
ICAgICAgaml0LmNhZ2VDb25kaXRpb25hbGx5KEdpZ2FjYWdlOjpQcmltaXRpdmUsIGJhc2VNZW1v
cnksIHNjcmF0Y2hPclNpemUpOwogICAgICAgICB9KTsKICAgICAgICAgZG9Db250ZXh0U3dpdGNo
LT5hcHBlbmROZXdDb250cm9sVmFsdWUobV9wcm9jLCBKdW1wLCBvcmlnaW4oKSwgY29udGludWF0
aW9uKTsKIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbUJCUVBsYW4uY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21CQlFQbGFuLmNw
cAkocmV2aXNpb24gMjQ2MjcxKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbUJC
UVBsYW4uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMTQsNyArMzE0LDcgQEAgdm9pZCBCQlFQbGFu
Ojpjb21wbGV0ZShjb25zdCBBYnN0cmFjdExvYwogICAgICAgICAgICAgICAgIH0KIAogICAgICAg
ICAgICAgICAgIG1fd2FzbUludGVybmFsRnVuY3Rpb25zW2Z1bmN0aW9uSW5kZXhdLT5lbnRyeXBv
aW50LmNvbXBpbGF0aW9uID0gc3RkOjptYWtlX3VuaXF1ZTxCMzo6Q29tcGlsYXRpb24+KAotICAg
ICAgICAgICAgICAgICAgICBGSU5BTElaRV9DT0RFKGxpbmtCdWZmZXIsIEIzQ29tcGlsYXRpb25Q
dHJUYWcsICJXZWJBc3NlbWJseSBCQlEgZnVuY3Rpb25bJWldICVzIiwgZnVuY3Rpb25JbmRleCwg
c2lnbmF0dXJlLnRvU3RyaW5nKCkuYXNjaWkoKS5kYXRhKCkpLAorICAgICAgICAgICAgICAgICAg
ICBGSU5BTElaRV9DT0RFKGxpbmtCdWZmZXIsIEIzQ29tcGlsYXRpb25QdHJUYWcsICJXZWJBc3Nl
bWJseSBmdW5jdGlvblslaV0gJXMiLCBmdW5jdGlvbkluZGV4LCBzaWduYXR1cmUudG9TdHJpbmco
KS5hc2NpaSgpLmRhdGEoKSksCiAgICAgICAgICAgICAgICAgICAgIFdURk1vdmUoY29udGV4dC53
YXNtRW50cnlwb2ludEJ5cHJvZHVjdHMpKTsKICAgICAgICAgICAgIH0KIApJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbUJpbmRpbmcuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21CaW5kaW5nLmNwcAkocmV2aXNpb24gMjQ2MjcxKQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbUJpbmRpbmcuY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC00Niw3ICs0Niw3IEBAIEV4cGVjdGVkPE1hY3JvQXNzZW1ibGVyQ29kZVJlZjxXYXNt
RW50cnkKICAgICBjb25zdCBQaW5uZWRSZWdpc3RlckluZm8mIHBpbm5lZFJlZ3MgPSBQaW5uZWRS
ZWdpc3RlckluZm86OmdldCgpOwogICAgIEpJVCBqaXQ7CiAKLSAgICBHUFJSZWcgc2NyYXRjaCA9
IHdhc21DYWxsaW5nQ29udmVudGlvbkFpcigpLnByb2xvZ3VlU2NyYXRjaCgwKTsKKyAgICBHUFJS
ZWcgc2NyYXRjaCA9IEdQUkluZm86Om5vblByZXNlcnZlZE5vbkFyZ3VtZW50R1BSMDsKICAgICBH
UFJSZWcgYmFzZU1lbW9yeSA9IHBpbm5lZFJlZ3MuYmFzZU1lbW9yeVBvaW50ZXI7CiAgICAgQVNT
RVJUKGJhc2VNZW1vcnkgIT0gc2NyYXRjaCk7CiAgICAgQVNTRVJUKHBpbm5lZFJlZ3Muc2l6ZVJl
Z2lzdGVyICE9IGJhc2VNZW1vcnkpOwpAQCAtNjYsMTMgKzY2LDggQEAgRXhwZWN0ZWQ8TWFjcm9B
c3NlbWJsZXJDb2RlUmVmPFdhc21FbnRyeQogCiAgICAgLy8gRklYTUUgdGhlIGZvbGxvd2luZyBj
b2RlIGFzc3VtZXMgdGhhdCBhbGwgV2FzbTo6SW5zdGFuY2UgaGF2ZSB0aGUgc2FtZSBwaW5uZWQg
cmVnaXN0ZXJzLiBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTYyOTUy
CiAgICAgLy8gU2V0IHVwIHRoZSBjYWxsZWUncyBiYXNlTWVtb3J5IHJlZ2lzdGVyIGFzIHdlbGwg
YXMgdGhlIG1lbW9yeSBzaXplIHJlZ2lzdGVycy4KLSAgICB7Ci0gICAgICAgIEdQUlJlZyBzY3Jh
dGNoT3JTaXplID0gaXNBUk02NEUoKSA/IHBpbm5lZFJlZ3Muc2l6ZVJlZ2lzdGVyIDogd2FzbUNh
bGxpbmdDb252ZW50aW9uQWlyKCkucHJvbG9ndWVTY3JhdGNoKDEpOwotCi0gICAgICAgIGppdC5s
b2FkUHRyKEpJVDo6QWRkcmVzcyhiYXNlTWVtb3J5LCBXYXNtOjpJbnN0YW5jZTo6b2Zmc2V0T2ZD
YWNoZWRNZW1vcnlTaXplKCkpLCBwaW5uZWRSZWdzLnNpemVSZWdpc3Rlcik7IC8vIE1lbW9yeSBz
aXplLgotICAgICAgICBqaXQubG9hZFB0cihKSVQ6OkFkZHJlc3MoYmFzZU1lbW9yeSwgV2FzbTo6
SW5zdGFuY2U6Om9mZnNldE9mQ2FjaGVkTWVtb3J5KCkpLCBiYXNlTWVtb3J5KTsgLy8gV2FzbTo6
TWVtb3J5OjpUYWdnZWRBcnJheVN0b3JhZ2VQdHI8dm9pZD4gKHZvaWQqKS4KLSAgICAgICAgaml0
LmNhZ2VDb25kaXRpb25hbGx5KEdpZ2FjYWdlOjpQcmltaXRpdmUsIGJhc2VNZW1vcnksIHNjcmF0
Y2hPclNpemUpOwotICAgIH0KKyAgICBqaXQubG9hZFB0cihKSVQ6OkFkZHJlc3MoYmFzZU1lbW9y
eSwgV2FzbTo6SW5zdGFuY2U6Om9mZnNldE9mQ2FjaGVkTWVtb3J5U2l6ZSgpKSwgcGlubmVkUmVn
cy5zaXplUmVnaXN0ZXIpOyAvLyBNZW1vcnkgc2l6ZS4KKyAgICBqaXQubG9hZFB0cihKSVQ6OkFk
ZHJlc3MoYmFzZU1lbW9yeSwgV2FzbTo6SW5zdGFuY2U6Om9mZnNldE9mQ2FjaGVkTWVtb3J5KCkp
LCBiYXNlTWVtb3J5KTsgLy8gV2FzbTo6TWVtb3J5Ojp2b2lkKi4KIAogICAgIC8vIFRhaWwgY2Fs
bCBpbnRvIHRoZSBjYWxsZWUgV2ViQXNzZW1ibHkgZnVuY3Rpb24uCiAgICAgaml0LmxvYWRQdHIo
c2NyYXRjaCwgc2NyYXRjaCk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNt
SW5zdGFuY2UuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNt
SW5zdGFuY2UuaAkocmV2aXNpb24gMjQ2MjcxKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3dh
c20vV2FzbUluc3RhbmNlLmgJKHdvcmtpbmcgY29weSkKQEAgLTY2LDcgKzY2LDcgQEAgcHVibGlj
OgogICAgIE1lbW9yeSogbWVtb3J5KCkgeyByZXR1cm4gbV9tZW1vcnkuZ2V0KCk7IH0KICAgICBU
YWJsZSogdGFibGUoKSB7IHJldHVybiBtX3RhYmxlLmdldCgpOyB9CiAKLSAgICB2b2lkKiBjYWNo
ZWRNZW1vcnkoKSBjb25zdCB7IHJldHVybiBtX2NhY2hlZE1lbW9yeS5nZXRNYXlCZU51bGwoY2Fj
aGVkTWVtb3J5U2l6ZSgpKTsgfQorICAgIHZvaWQqIGNhY2hlZE1lbW9yeSgpIGNvbnN0IHsgcmV0
dXJuIG1fY2FjaGVkTWVtb3J5OyB9CiAgICAgc2l6ZV90IGNhY2hlZE1lbW9yeVNpemUoKSBjb25z
dCB7IHJldHVybiBtX2NhY2hlZE1lbW9yeVNpemU7IH0KIAogICAgIHZvaWQgc2V0TWVtb3J5KFJl
ZjxNZW1vcnk+JiYgbWVtb3J5KQpAQCAtNzgsNyArNzgsNyBAQCBwdWJsaWM6CiAgICAgdm9pZCB1
cGRhdGVDYWNoZWRNZW1vcnkoKQogICAgIHsKICAgICAgICAgaWYgKG1fbWVtb3J5ICE9IG51bGxw
dHIpIHsKLSAgICAgICAgICAgIG1fY2FjaGVkTWVtb3J5ID0gQ2FnZWRQdHI8R2lnYWNhZ2U6OlBy
aW1pdGl2ZSwgdm9pZCwgdGFnQ2FnZWRQdHI+KG1lbW9yeSgpLT5tZW1vcnkoKSwgbWVtb3J5KCkt
PnNpemUoKSk7CisgICAgICAgICAgICBtX2NhY2hlZE1lbW9yeSA9IG1lbW9yeSgpLT5tZW1vcnko
KTsKICAgICAgICAgICAgIG1fY2FjaGVkTWVtb3J5U2l6ZSA9IG1lbW9yeSgpLT5zaXplKCk7CiAg
ICAgICAgIH0KICAgICB9CkBAIC0xNDcsNyArMTQ3LDcgQEAgcHJpdmF0ZToKICAgICB9CiAgICAg
dm9pZCogbV9vd25lciB7IG51bGxwdHIgfTsgLy8gSW4gYSBKUyBlbWJlZGRpbmcsIHRoaXMgaXMg
YSBKU1dlYkFzc2VtYmx5SW5zdGFuY2UqLgogICAgIENvbnRleHQqIG1fY29udGV4dCB7IG51bGxw
dHIgfTsKLSAgICBDYWdlZFB0cjxHaWdhY2FnZTo6UHJpbWl0aXZlLCB2b2lkLCB0YWdDYWdlZFB0
cj4gbV9jYWNoZWRNZW1vcnk7CisgICAgdm9pZCogbV9jYWNoZWRNZW1vcnkgeyBudWxscHRyIH07
CiAgICAgc2l6ZV90IG1fY2FjaGVkTWVtb3J5U2l6ZSB7IDAgfTsKICAgICBSZWY8TW9kdWxlPiBt
X21vZHVsZTsKICAgICBSZWZQdHI8Q29kZUJsb2NrPiBtX2NvZGVCbG9jazsKSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21NZW1vcnkuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21NZW1vcnkuY3BwCShyZXZpc2lvbiAyNDYyNzEpCisr
KyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtTWVtb3J5LmNwcAkod29ya2luZyBjb3B5
KQpAQCAtMjUzLDExICsyNTMsMTAgQEAgTWVtb3J5OjpNZW1vcnkoUGFnZUNvdW50IGluaXRpYWws
IFBhZ2VDbwogICAgIEFTU0VSVCghaW5pdGlhbC5ieXRlcygpKTsKICAgICBBU1NFUlQobV9tb2Rl
ID09IE1lbW9yeU1vZGU6OkJvdW5kc0NoZWNraW5nKTsKICAgICBkYXRhTG9nTG5JZih2ZXJib3Nl
LCAiTWVtb3J5OjpNZW1vcnkgYWxsb2NhdGluZyAiLCAqdGhpcyk7Ci0gICAgQVNTRVJUKCFtZW1v
cnkoKSk7CiB9CiAKIE1lbW9yeTo6TWVtb3J5KHZvaWQqIG1lbW9yeSwgUGFnZUNvdW50IGluaXRp
YWwsIFBhZ2VDb3VudCBtYXhpbXVtLCBzaXplX3QgbWFwcGVkQ2FwYWNpdHksIE1lbW9yeU1vZGUg
bW9kZSwgRnVuY3Rpb248dm9pZChOb3RpZnlQcmVzc3VyZSk+JiYgbm90aWZ5TWVtb3J5UHJlc3N1
cmUsIEZ1bmN0aW9uPHZvaWQoU3luY1RyeVRvUmVjbGFpbSk+JiYgc3luY1RyeVRvUmVjbGFpbU1l
bW9yeSwgV1RGOjpGdW5jdGlvbjx2b2lkKEdyb3dTdWNjZXNzLCBQYWdlQ291bnQsIFBhZ2VDb3Vu
dCk+JiYgZ3Jvd1N1Y2Nlc3NDYWxsYmFjaykKLSAgICA6IG1fbWVtb3J5KG1lbW9yeSwgaW5pdGlh
bC5ieXRlcygpKQorICAgIDogbV9tZW1vcnkobWVtb3J5KQogICAgICwgbV9zaXplKGluaXRpYWwu
Ynl0ZXMoKSkKICAgICAsIG1faW5pdGlhbChpbml0aWFsKQogICAgICwgbV9tYXhpbXVtKG1heGlt
dW0pCkBAIC0zMzksMTQgKzMzOCwxNCBAQCBNZW1vcnk6On5NZW1vcnkoKQogICAgICAgICBtZW1v
cnlNYW5hZ2VyKCkuZnJlZVBoeXNpY2FsQnl0ZXMobV9zaXplKTsKICAgICAgICAgc3dpdGNoICht
X21vZGUpIHsKICAgICAgICAgY2FzZSBNZW1vcnlNb2RlOjpTaWduYWxpbmc6Ci0gICAgICAgICAg
ICBpZiAobXByb3RlY3QobWVtb3J5KCksIE1lbW9yeTo6ZmFzdE1hcHBlZEJ5dGVzKCksIFBST1Rf
UkVBRCB8IFBST1RfV1JJVEUpKSB7CisgICAgICAgICAgICBpZiAobXByb3RlY3QobV9tZW1vcnks
IE1lbW9yeTo6ZmFzdE1hcHBlZEJ5dGVzKCksIFBST1RfUkVBRCB8IFBST1RfV1JJVEUpKSB7CiAg
ICAgICAgICAgICAgICAgZGF0YUxvZygibXByb3RlY3QgZmFpbGVkOiAiLCBzdHJlcnJvcihlcnJu
byksICJcbiIpOwogICAgICAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7
CiAgICAgICAgICAgICB9Ci0gICAgICAgICAgICBtZW1vcnlNYW5hZ2VyKCkuZnJlZUZhc3RNZW1v
cnkobWVtb3J5KCkpOworICAgICAgICAgICAgbWVtb3J5TWFuYWdlcigpLmZyZWVGYXN0TWVtb3J5
KG1fbWVtb3J5KTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICBjYXNlIE1lbW9yeU1vZGU6
OkJvdW5kc0NoZWNraW5nOgotICAgICAgICAgICAgR2lnYWNhZ2U6OmZyZWVWaXJ0dWFsUGFnZXMo
R2lnYWNhZ2U6OlByaW1pdGl2ZSwgbWVtb3J5KCksIG1fc2l6ZSk7CisgICAgICAgICAgICBHaWdh
Y2FnZTo6ZnJlZVZpcnR1YWxQYWdlcyhHaWdhY2FnZTo6UHJpbWl0aXZlLCBtX21lbW9yeSwgbV9z
aXplKTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CiAgICAgfQpAQCAtNDIwLDI2ICs0
MTksMjQgQEAgRXhwZWN0ZWQ8UGFnZUNvdW50LCBNZW1vcnk6Okdyb3dGYWlsUmVhcwogICAgICAg
ICBpZiAoIW5ld01lbW9yeSkKICAgICAgICAgICAgIHJldHVybiBtYWtlVW5leHBlY3RlZChHcm93
RmFpbFJlYXNvbjo6T3V0T2ZNZW1vcnkpOwogCi0gICAgICAgIG1lbWNweShuZXdNZW1vcnksIG1l
bW9yeSgpLCBtX3NpemUpOworICAgICAgICBtZW1jcHkobmV3TWVtb3J5LCBtX21lbW9yeSwgbV9z
aXplKTsKICAgICAgICAgaWYgKG1fbWVtb3J5KQotICAgICAgICAgICAgR2lnYWNhZ2U6OmZyZWVW
aXJ0dWFsUGFnZXMoR2lnYWNhZ2U6OlByaW1pdGl2ZSwgbWVtb3J5KCksIG1fc2l6ZSk7Ci0gICAg
ICAgIG1fbWVtb3J5ID0gQ2FnZWRNZW1vcnkobmV3TWVtb3J5LCBkZXNpcmVkU2l6ZSk7CisgICAg
ICAgICAgICBHaWdhY2FnZTo6ZnJlZVZpcnR1YWxQYWdlcyhHaWdhY2FnZTo6UHJpbWl0aXZlLCBt
X21lbW9yeSwgbV9zaXplKTsKKyAgICAgICAgbV9tZW1vcnkgPSBuZXdNZW1vcnk7CiAgICAgICAg
IG1fbWFwcGVkQ2FwYWNpdHkgPSBkZXNpcmVkU2l6ZTsKICAgICAgICAgbV9zaXplID0gZGVzaXJl
ZFNpemU7Ci0gICAgICAgIEFTU0VSVChtZW1vcnkoKSA9PSBuZXdNZW1vcnkpOwogICAgICAgICBy
ZXR1cm4gc3VjY2VzcygpOwogICAgIH0KICAgICBjYXNlIE1lbW9yeU1vZGU6OlNpZ25hbGluZzog
ewotICAgICAgICBSRUxFQVNFX0FTU0VSVChtZW1vcnkoKSk7CisgICAgICAgIFJFTEVBU0VfQVNT
RVJUKG1fbWVtb3J5KTsKICAgICAgICAgLy8gU2lnbmFsaW5nIG1lbW9yeSBtdXN0IGhhdmUgYmVl
biBwcmUtYWxsb2NhdGVkIHZpcnR1YWxseS4KLSAgICAgICAgdWludDhfdCogc3RhcnRBZGRyZXNz
ID0gc3RhdGljX2Nhc3Q8dWludDhfdCo+KG1lbW9yeSgpKSArIG1fc2l6ZTsKKyAgICAgICAgdWlu
dDhfdCogc3RhcnRBZGRyZXNzID0gc3RhdGljX2Nhc3Q8dWludDhfdCo+KG1fbWVtb3J5KSArIG1f
c2l6ZTsKICAgICAgICAgCi0gICAgICAgIGRhdGFMb2dMbklmKHZlcmJvc2UsICJNYXJraW5nIFdl
YkFzc2VtYmx5IG1lbW9yeSdzICIsIFJhd1BvaW50ZXIobWVtb3J5KCkpLCAiIGFzIHJlYWQrd3Jp
dGUgaW4gcmFuZ2UgWyIsIFJhd1BvaW50ZXIoc3RhcnRBZGRyZXNzKSwgIiwgIiwgUmF3UG9pbnRl
cihzdGFydEFkZHJlc3MgKyBleHRyYUJ5dGVzKSwgIikiKTsKKyAgICAgICAgZGF0YUxvZ0xuSWYo
dmVyYm9zZSwgIk1hcmtpbmcgV2ViQXNzZW1ibHkgbWVtb3J5J3MgIiwgUmF3UG9pbnRlcihtX21l
bW9yeSksICIgYXMgcmVhZCt3cml0ZSBpbiByYW5nZSBbIiwgUmF3UG9pbnRlcihzdGFydEFkZHJl
c3MpLCAiLCAiLCBSYXdQb2ludGVyKHN0YXJ0QWRkcmVzcyArIGV4dHJhQnl0ZXMpLCAiKSIpOwog
ICAgICAgICBpZiAobXByb3RlY3Qoc3RhcnRBZGRyZXNzLCBleHRyYUJ5dGVzLCBQUk9UX1JFQUQg
fCBQUk9UX1dSSVRFKSkgewogICAgICAgICAgICAgZGF0YUxvZygibXByb3RlY3QgZmFpbGVkOiAi
LCBzdHJlcnJvcihlcnJubyksICJcbiIpOwogICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9U
X1JFQUNIRUQoKTsKICAgICAgICAgfQotICAgICAgICBtX21lbW9yeS5yZWNhZ2UobV9zaXplLCBk
ZXNpcmVkU2l6ZSk7CiAgICAgICAgIG1fc2l6ZSA9IGRlc2lyZWRTaXplOwogICAgICAgICByZXR1
cm4gc3VjY2VzcygpOwogICAgIH0KQEAgLTQ2Myw3ICs0NjAsNyBAQCB2b2lkIE1lbW9yeTo6cmVn
aXN0ZXJJbnN0YW5jZShJbnN0YW5jZSogCiAKIHZvaWQgTWVtb3J5OjpkdW1wKFByaW50U3RyZWFt
JiBvdXQpIGNvbnN0CiB7Ci0gICAgb3V0LnByaW50KCJNZW1vcnkgYXQgIiwgUmF3UG9pbnRlciht
ZW1vcnkoKSksICIsIHNpemUgIiwgbV9zaXplLCAiQiBjYXBhY2l0eSAiLCBtX21hcHBlZENhcGFj
aXR5LCAiQiwgaW5pdGlhbCAiLCBtX2luaXRpYWwsICIgbWF4aW11bSAiLCBtX21heGltdW0sICIg
bW9kZSAiLCBtYWtlU3RyaW5nKG1fbW9kZSkpOworICAgIG91dC5wcmludCgiTWVtb3J5IGF0ICIs
IFJhd1BvaW50ZXIobV9tZW1vcnkpLCAiLCBzaXplICIsIG1fc2l6ZSwgIkIgY2FwYWNpdHkgIiwg
bV9tYXBwZWRDYXBhY2l0eSwgIkIsIGluaXRpYWwgIiwgbV9pbml0aWFsLCAiIG1heGltdW0gIiwg
bV9tYXhpbXVtLCAiIG1vZGUgIiwgbWFrZVN0cmluZyhtX21vZGUpKTsKIH0KIAogfSAvLyBuYW1l
c3BhY2UgSlNDCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtTWVtb3J5LmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbU1lbW9yeS5oCShy
ZXZpc2lvbiAyNDYyNzEpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtTWVtb3J5
LmgJKHdvcmtpbmcgY29weSkKQEAgLTMwLDcgKzMwLDYgQEAKICNpbmNsdWRlICJXYXNtTWVtb3J5
TW9kZS5oIgogI2luY2x1ZGUgIldhc21QYWdlQ291bnQuaCIKIAotI2luY2x1ZGUgPHd0Zi9DYWdl
ZFB0ci5oPgogI2luY2x1ZGUgPHd0Zi9FeHBlY3RlZC5oPgogI2luY2x1ZGUgPHd0Zi9GdW5jdGlv
bi5oPgogI2luY2x1ZGUgPHd0Zi9SZWZDb3VudGVkLmg+CkBAIC02OSw3ICs2OCw3IEBAIHB1Ymxp
YzoKICAgICBzdGF0aWMgc2l6ZV90IGZhc3RNYXBwZWRCeXRlcygpOyAvLyBJbmNsdWRlcyByZWR6
b25lLgogICAgIHN0YXRpYyBib29sIGFkZHJlc3NJc0luQWN0aXZlRmFzdE1lbW9yeSh2b2lkKik7
CiAKLSAgICB2b2lkKiBtZW1vcnkoKSBjb25zdCB7IEFTU0VSVChtX21lbW9yeS5nZXRNYXlCZU51
bGwoc2l6ZSgpKSA9PSBtX21lbW9yeS5nZXRVbnNhZmUoKSk7IHJldHVybiBtX21lbW9yeS5nZXRN
YXlCZU51bGwoc2l6ZSgpKTsgfQorICAgIHZvaWQqIG1lbW9yeSgpIGNvbnN0IHsgcmV0dXJuIG1f
bWVtb3J5OyB9CiAgICAgc2l6ZV90IHNpemUoKSBjb25zdCB7IHJldHVybiBtX3NpemU7IH0KICAg
ICBQYWdlQ291bnQgc2l6ZUluUGFnZXMoKSBjb25zdCB7IHJldHVybiBQYWdlQ291bnQ6OmZyb21C
eXRlcyhtX3NpemUpOyB9CiAKQEAgLTk3LDggKzk2LDcgQEAgcHJpdmF0ZToKICAgICBNZW1vcnko
dm9pZCogbWVtb3J5LCBQYWdlQ291bnQgaW5pdGlhbCwgUGFnZUNvdW50IG1heGltdW0sIHNpemVf
dCBtYXBwZWRDYXBhY2l0eSwgTWVtb3J5TW9kZSwgV1RGOjpGdW5jdGlvbjx2b2lkKE5vdGlmeVBy
ZXNzdXJlKT4mJiBub3RpZnlNZW1vcnlQcmVzc3VyZSwgV1RGOjpGdW5jdGlvbjx2b2lkKFN5bmNU
cnlUb1JlY2xhaW0pPiYmIHN5bmNUcnlUb1JlY2xhaW1NZW1vcnksIFdURjo6RnVuY3Rpb248dm9p
ZChHcm93U3VjY2VzcywgUGFnZUNvdW50LCBQYWdlQ291bnQpPiYmIGdyb3dTdWNjZXNzQ2FsbGJh
Y2spOwogICAgIE1lbW9yeShQYWdlQ291bnQgaW5pdGlhbCwgUGFnZUNvdW50IG1heGltdW0sIFdU
Rjo6RnVuY3Rpb248dm9pZChOb3RpZnlQcmVzc3VyZSk+JiYgbm90aWZ5TWVtb3J5UHJlc3N1cmUs
IFdURjo6RnVuY3Rpb248dm9pZChTeW5jVHJ5VG9SZWNsYWltKT4mJiBzeW5jVHJ5VG9SZWNsYWlt
TWVtb3J5LCBXVEY6OkZ1bmN0aW9uPHZvaWQoR3Jvd1N1Y2Nlc3MsIFBhZ2VDb3VudCwgUGFnZUNv
dW50KT4mJiBncm93U3VjY2Vzc0NhbGxiYWNrKTsKIAotICAgIHVzaW5nIENhZ2VkTWVtb3J5ID0g
Q2FnZWRQdHI8R2lnYWNhZ2U6OlByaW1pdGl2ZSwgdm9pZCwgdGFnQ2FnZWRQdHI+OwotICAgIENh
Z2VkTWVtb3J5IG1fbWVtb3J5OworICAgIHZvaWQqIG1fbWVtb3J5IHsgbnVsbHB0ciB9OwogICAg
IHNpemVfdCBtX3NpemUgeyAwIH07CiAgICAgUGFnZUNvdW50IG1faW5pdGlhbDsKICAgICBQYWdl
Q291bnQgbV9tYXhpbXVtOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMvSlNU
b1dhc20uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL0pT
VG9XYXNtLmNwcAkocmV2aXNpb24gMjQ2MjcxKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3dh
c20vanMvSlNUb1dhc20uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yOSw3ICsyOSw2IEBACiAjaWYg
RU5BQkxFKFdFQkFTU0VNQkxZKQogCiAjaW5jbHVkZSAiQ0NhbGxIZWxwZXJzLmgiCi0jaW5jbHVk
ZSAiRGlzYWxsb3dNYWNyb1NjcmF0Y2hSZWdpc3RlclVzYWdlLmgiCiAjaW5jbHVkZSAiSlNDSW5s
aW5lcy5oIgogI2luY2x1ZGUgIkpTV2ViQXNzZW1ibHlJbnN0YW5jZS5oIgogI2luY2x1ZGUgIkpT
V2ViQXNzZW1ibHlSdW50aW1lRXJyb3IuaCIKQEAgLTIxMiwyMyArMjExLDE1IEBAIHN0ZDo6dW5p
cXVlX3B0cjxJbnRlcm5hbEZ1bmN0aW9uPiBjcmVhdGUKIAogICAgIGlmICghIWluZm8ubWVtb3J5
KSB7CiAgICAgICAgIEdQUlJlZyBiYXNlTWVtb3J5ID0gcGlubmVkUmVncy5iYXNlTWVtb3J5UG9p
bnRlcjsKLSAgICAgICAgR1BSUmVnIHNjcmF0Y2hPclNpemUgPSB3YXNtQ2FsbGluZ0NvbnZlbnRp
b25BaXIoKS5wcm9sb2d1ZVNjcmF0Y2goMCk7CiAKICAgICAgICAgaWYgKENvbnRleHQ6OnVzZUZh
c3RUTFMoKSkKICAgICAgICAgICAgIGppdC5sb2FkV2FzbUNvbnRleHRJbnN0YW5jZShiYXNlTWVt
b3J5KTsKIAogICAgICAgICBHUFJSZWcgY3VycmVudEluc3RhbmNlR1BSID0gQ29udGV4dDo6dXNl
RmFzdFRMUygpID8gYmFzZU1lbW9yeSA6IHdhc21Db250ZXh0SW5zdGFuY2VHUFI7Ci0gICAgICAg
IGlmIChpc0FSTTY0RSgpKSB7Ci0gICAgICAgICAgICBpZiAobW9kZSAhPSBXYXNtOjpNZW1vcnlN
b2RlOjpTaWduYWxpbmcpCi0gICAgICAgICAgICAgICAgc2NyYXRjaE9yU2l6ZSA9IHBpbm5lZFJl
Z3Muc2l6ZVJlZ2lzdGVyOwotICAgICAgICAgICAgaml0LmxvYWRQdHIoQ0NhbGxIZWxwZXJzOjpB
ZGRyZXNzKGN1cnJlbnRJbnN0YW5jZUdQUiwgV2FzbTo6SW5zdGFuY2U6Om9mZnNldE9mQ2FjaGVk
TWVtb3J5U2l6ZSgpKSwgc2NyYXRjaE9yU2l6ZSk7Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAg
ICAgICBpZiAobW9kZSAhPSBXYXNtOjpNZW1vcnlNb2RlOjpTaWduYWxpbmcpCi0gICAgICAgICAg
ICAgICAgaml0LmxvYWRQdHIoQ0NhbGxIZWxwZXJzOjpBZGRyZXNzKGN1cnJlbnRJbnN0YW5jZUdQ
UiwgV2FzbTo6SW5zdGFuY2U6Om9mZnNldE9mQ2FjaGVkTWVtb3J5U2l6ZSgpKSwgcGlubmVkUmVn
cy5zaXplUmVnaXN0ZXIpOwotICAgICAgICB9CisgICAgICAgIGlmIChtb2RlICE9IE1lbW9yeU1v
ZGU6OlNpZ25hbGluZykKKyAgICAgICAgICAgIGppdC5sb2FkUHRyKENDYWxsSGVscGVyczo6QWRk
cmVzcyhjdXJyZW50SW5zdGFuY2VHUFIsIFdhc206Okluc3RhbmNlOjpvZmZzZXRPZkNhY2hlZE1l
bW9yeVNpemUoKSksIHBpbm5lZFJlZ3Muc2l6ZVJlZ2lzdGVyKTsKIAogICAgICAgICBqaXQubG9h
ZFB0cihDQ2FsbEhlbHBlcnM6OkFkZHJlc3MoY3VycmVudEluc3RhbmNlR1BSLCBXYXNtOjpJbnN0
YW5jZTo6b2Zmc2V0T2ZDYWNoZWRNZW1vcnkoKSksIGJhc2VNZW1vcnkpOwotICAgICAgICBqaXQu
Y2FnZUNvbmRpdGlvbmFsbHkoR2lnYWNhZ2U6OlByaW1pdGl2ZSwgYmFzZU1lbW9yeSwgc2NyYXRj
aE9yU2l6ZSk7CiAgICAgfQogCiAgICAgQ0NhbGxIZWxwZXJzOjpDYWxsIGNhbGwgPSBqaXQudGhy
ZWFkU2FmZVBhdGNoYWJsZU5lYXJDYWxsKCk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
d2FzbS9qcy9XZWJBc3NlbWJseUZ1bmN0aW9uLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvd2FzbS9qcy9XZWJBc3NlbWJseUZ1bmN0aW9uLmNwcAkocmV2aXNpb24gMjQ2
MjcxKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMvV2ViQXNzZW1ibHlGdW5jdGlv
bi5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQxMCwyMCArNDEwLDEzIEBAIE1hY3JvQXNzZW1ibGVy
Q29kZVB0cjxKU0VudHJ5UHRyVGFnPiBXZWIKIAogICAgIGlmICghIW1vZHVsZUluZm9ybWF0aW9u
Lm1lbW9yeSkgewogICAgICAgICBHUFJSZWcgYmFzZU1lbW9yeSA9IHBpbm5lZFJlZ3MuYmFzZU1l
bW9yeVBvaW50ZXI7Ci0gICAgICAgIEdQUlJlZyBzY3JhdGNoT3JTaXplID0gc2NyYXRjaDJHUFI7
Ci0gICAgICAgIGF1dG8gbW9kZSA9IGluc3RhbmNlKCktPm1lbW9yeU1vZGUoKTsKIAotICAgICAg
ICBpZiAoaXNBUk02NEUoKSkgewotICAgICAgICAgICAgaWYgKG1vZGUgIT0gV2FzbTo6TWVtb3J5
TW9kZTo6U2lnbmFsaW5nKQotICAgICAgICAgICAgICAgIHNjcmF0Y2hPclNpemUgPSBwaW5uZWRS
ZWdzLnNpemVSZWdpc3RlcjsKLSAgICAgICAgICAgIGppdC5sb2FkUHRyKENDYWxsSGVscGVyczo6
QWRkcmVzcyhzY3JhdGNoR1BSLCBXYXNtOjpJbnN0YW5jZTo6b2Zmc2V0T2ZDYWNoZWRNZW1vcnlT
aXplKCkpLCBzY3JhdGNoT3JTaXplKTsKLSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIGlm
IChtb2RlICE9IFdhc206Ok1lbW9yeU1vZGU6OlNpZ25hbGluZykKLSAgICAgICAgICAgICAgICBq
aXQubG9hZFB0cihDQ2FsbEhlbHBlcnM6OkFkZHJlc3Moc2NyYXRjaEdQUiwgV2FzbTo6SW5zdGFu
Y2U6Om9mZnNldE9mQ2FjaGVkTWVtb3J5U2l6ZSgpKSwgcGlubmVkUmVncy5zaXplUmVnaXN0ZXIp
OworICAgICAgICBpZiAoaW5zdGFuY2UoKS0+bWVtb3J5TW9kZSgpICE9IFdhc206Ok1lbW9yeU1v
ZGU6OlNpZ25hbGluZykgeworICAgICAgICAgICAgQVNTRVJUKHBpbm5lZFJlZ3Muc2l6ZVJlZ2lz
dGVyICE9IHNjcmF0Y2hHUFIpOworICAgICAgICAgICAgaml0LmxvYWRQdHIoQ0NhbGxIZWxwZXJz
OjpBZGRyZXNzKHNjcmF0Y2hHUFIsIFdhc206Okluc3RhbmNlOjpvZmZzZXRPZkNhY2hlZE1lbW9y
eVNpemUoKSksIHBpbm5lZFJlZ3Muc2l6ZVJlZ2lzdGVyKTsKICAgICAgICAgfQogCiAgICAgICAg
IGppdC5sb2FkUHRyKENDYWxsSGVscGVyczo6QWRkcmVzcyhzY3JhdGNoR1BSLCBXYXNtOjpJbnN0
YW5jZTo6b2Zmc2V0T2ZDYWNoZWRNZW1vcnkoKSksIGJhc2VNZW1vcnkpOwotICAgICAgICBqaXQu
Y2FnZUNvbmRpdGlvbmFsbHkoR2lnYWNhZ2U6OlByaW1pdGl2ZSwgYmFzZU1lbW9yeSwgc2NyYXRj
aE9yU2l6ZSk7CiAgICAgfQogCiAgICAgLy8gV2UgdXNlIHRoaXMgY2FsbGVlIHRvIGluZGljYXRl
IGhvdyB0byB1bndpbmQgcGFzdCB0aGVzZSB0eXBlcyBvZiBmcmFtZXM6CkluZGV4OiBTb3VyY2Uv
V1RGL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV1RGL0NoYW5nZUxvZwkocmV2aXNp
b24gMjQ2MjcxKQorKysgU291cmNlL1dURi9DaGFuZ2VMb2cJKHdvcmtpbmcgY29weSkKQEAgLTEs
MyArMSw0NyBAQAorMjAxOS0wNi0xMCAgU2FhbSBCYXJhdGkgIDxzYmFyYXRpQGFwcGxlLmNvbT4K
KworICAgICAgICBSb2xsIG91dCBQQUMgY2FnZQorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0
Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTk4NzI2CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgS2VpdGgg
TWlsbGVyLgorCisgICAgICAgICogV1RGLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2o6CisgICAg
ICAgICogd3RmL0NNYWtlTGlzdHMudHh0OgorICAgICAgICAqIHd0Zi9DYWdlZFB0ci5oOgorICAg
ICAgICAoV1RGOjpDYWdlZFB0cjo6Q2FnZWRQdHIpOgorICAgICAgICAoV1RGOjpDYWdlZFB0cjo6
Z2V0IGNvbnN0KToKKyAgICAgICAgKFdURjo6Q2FnZWRQdHI6OmdldE1heUJlTnVsbCBjb25zdCk6
CisgICAgICAgIChXVEY6OkNhZ2VkUHRyOjpvcGVyYXRvcj0pOgorICAgICAgICAoV1RGOjpDYWdl
ZFB0cjo6b3BlcmF0b3I9PSBjb25zdCk6CisgICAgICAgIChXVEY6OkNhZ2VkUHRyOjpvcGVyYXRv
ciE9IGNvbnN0KToKKyAgICAgICAgKFdURjo6Q2FnZWRQdHI6Om9wZXJhdG9yIGJvb2wgY29uc3Qp
OgorICAgICAgICAoV1RGOjpDYWdlZFB0cjo6b3BlcmF0b3IqIGNvbnN0KToKKyAgICAgICAgKFdU
Rjo6Q2FnZWRQdHI6Om9wZXJhdG9yLT4gY29uc3QpOgorICAgICAgICAoV1RGOjpDYWdlZFB0cjo6
b3BlcmF0b3JbXSBjb25zdCk6CisgICAgICAgIChXVEY6OkNhZ2VkUHRyOjpnZXRVbnNhZmUgY29u
c3QpOiBEZWxldGVkLgorICAgICAgICAoV1RGOjpDYWdlZFB0cjo6YXQgY29uc3QpOiBEZWxldGVk
LgorICAgICAgICAoV1RGOjpDYWdlZFB0cjo6cmVjYWdlKTogRGVsZXRlZC4KKyAgICAgICAgKiB3
dGYvQ2FnZWRVbmlxdWVQdHIuaDoKKyAgICAgICAgKFdURjo6Q2FnZWRVbmlxdWVQdHI6OkNhZ2Vk
VW5pcXVlUHRyKToKKyAgICAgICAgKFdURjo6Q2FnZWRVbmlxdWVQdHI6OmNyZWF0ZSk6CisgICAg
ICAgIChXVEY6OkNhZ2VkVW5pcXVlUHRyOjpvcGVyYXRvcj0pOgorICAgICAgICAoV1RGOjpDYWdl
ZFVuaXF1ZVB0cjo6fkNhZ2VkVW5pcXVlUHRyKToKKyAgICAgICAgKFdURjo6Q2FnZWRVbmlxdWVQ
dHI6OmRlc3Ryb3kpOgorICAgICAgICAqIHd0Zi9HaWdhY2FnZS5oOgorICAgICAgICAoR2lnYWNh
Z2U6OmNhZ2VkKToKKyAgICAgICAgKEdpZ2FjYWdlOjpjYWdlZE1heUJlTnVsbCk6IERlbGV0ZWQu
CisgICAgICAgICogd3RmL1B0clRhZy5oOgorICAgICAgICAoV1RGOjp0YWdBcnJheVB0cik6IERl
bGV0ZWQuCisgICAgICAgIChXVEY6OnVudGFnQXJyYXlQdHIpOiBEZWxldGVkLgorICAgICAgICAo
V1RGOjpyZW1vdmVBcnJheVB0clRhZyk6IERlbGV0ZWQuCisgICAgICAgIChXVEY6OnJldGFnQXJy
YXlQdHIpOiBEZWxldGVkLgorICAgICAgICAqIHd0Zi9UYWdnZWRBcnJheVN0b3JhZ2VQdHIuaDoK
KyAgICAgICAgKFdURjo6VGFnZ2VkQXJyYXlTdG9yYWdlUHRyOjpUYWdnZWRBcnJheVN0b3JhZ2VQ
dHIpOiBEZWxldGVkLgorICAgICAgICAoV1RGOjpUYWdnZWRBcnJheVN0b3JhZ2VQdHI6OmdldCBj
b25zdCk6IERlbGV0ZWQuCisgICAgICAgIChXVEY6OlRhZ2dlZEFycmF5U3RvcmFnZVB0cjo6Z2V0
VW5zYWZlIGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdURjo6VGFnZ2VkQXJyYXlTdG9yYWdl
UHRyOjpyZXNpemUpOiBEZWxldGVkLgorICAgICAgICAoV1RGOjpUYWdnZWRBcnJheVN0b3JhZ2VQ
dHI6Om9wZXJhdG9yIGJvb2wgY29uc3QpOiBEZWxldGVkLgorCiAyMDE5LTA2LTEwICBUaW1vdGh5
IEhhdGNoZXIgIDx0aW1vdGh5QGFwcGxlLmNvbT4KIAogICAgICAgICBJbnRlZ3JhdGUgZGFyayBt
b2RlIHN1cHBvcnQgZm9yIGlPUy4KSW5kZXg6IFNvdXJjZS9XVEYvV1RGLnhjb2RlcHJvai9wcm9q
ZWN0LnBieHByb2oKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dURi9XVEYueGNvZGVwcm9qL3Byb2pl
Y3QucGJ4cHJvagkocmV2aXNpb24gMjQ2MjcxKQorKysgU291cmNlL1dURi9XVEYueGNvZGVwcm9q
L3Byb2plY3QucGJ4cHJvagkod29ya2luZyBjb3B5KQpAQCAtNjUxLDcgKzY1MSw2IEBACiAJCURD
RUUyMUZDMUNFQTc1NTEwMDBDMjM5NiAvKiBCbG9ja09iakNFeGNlcHRpb25zLmggKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEJsb2NrT2JqQ0V4Y2VwdGlvbnMuaDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKIAkJRENFRTIxRkQxQ0VBNzU1MTAwMEMyMzk2IC8qIEJsb2NrT2Jq
Q0V4Y2VwdGlvbnMubW0gKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5vYmpjcHA7IHBhdGggPSBC
bG9ja09iakNFeGNlcHRpb25zLm1tOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlEQ0VF
MjIwNDFDRUI5ODY5MDAwQzIzOTYgLyogQmFja3dhcmRzR3JhcGguaCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuYy5oOyBwYXRoID0gQmFja3dhcmRzR3JhcGguaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKLQkJREVGN0ZFNUYyMjU4MUFDODAwQzE1MTI5IC8qIFRhZ2dlZEFycmF5U3RvcmFnZVB0
ci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBUYWdnZWRBcnJheVN0b3JhZ2VQ
dHIuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJRTE1NTU2RjMxOEEwQ0MxODAwNkY0
OEZCIC8qIENyeXB0b2dyYXBoaWNVdGlsaXRpZXMuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
cHAuY3BwOyBwYXRoID0gQ3J5cHRvZ3JhcGhpY1V0aWxpdGllcy5jcHA7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07CiAJCUUxNTU1NkY0MThBMENDMTgwMDZGNDhGQiAvKiBDcnlwdG9ncmFwaGlj
VXRpbGl0aWVzLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
NDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IENyeXB0b2dyYXBo
aWNVdGlsaXRpZXMuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJRTMwMEU1MjEyMDNE
NjQ1RjAwREE3OUJFIC8qIFVuaXF1ZUFycmF5LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsg
cGF0aCA9IFVuaXF1ZUFycmF5Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC0xMTU4
LDcgKzExNTcsNiBAQAogCQkJCTU1OTdGODJDMUQ5NEI5OTcwMDY2QkMyMSAvKiBTeW5jaHJvbml6
ZWRGaXhlZFF1ZXVlLmggKi8sCiAJCQkJRTNFMTU4MjUxRUFEQTUzQzAwNEEwNzlEIC8qIFN5c3Rl
bUZyZWUuaCAqLywKIAkJCQkwRkIzMTdDMzFDNDg4MDAxMDA3RTM5NUEgLyogU3lzdGVtVHJhY2lu
Zy5oICovLAotCQkJCURFRjdGRTVGMjI1ODFBQzgwMEMxNTEyOSAvKiBUYWdnZWRBcnJheVN0b3Jh
Z2VQdHIuaCAqLywKIAkJCQlFMzExRkIxNTFGMEE1NjhCMDAzQzA4REUgLyogVGhyZWFkR3JvdXAu
Y3BwICovLAogCQkJCUUzMTFGQjE2MUYwQTU2OEIwMDNDMDhERSAvKiBUaHJlYWRHcm91cC5oICov
LAogCQkJCUE4QTQ3MzMyMTUxQTgyNUIwMDQxMjNGRiAvKiBUaHJlYWRpbmcuY3BwICovLApJbmRl
eDogU291cmNlL1dURi93dGYvQ01ha2VMaXN0cy50eHQKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dU
Ri93dGYvQ01ha2VMaXN0cy50eHQJKHJldmlzaW9uIDI0NjI3MSkKKysrIFNvdXJjZS9XVEYvd3Rm
L0NNYWtlTGlzdHMudHh0CSh3b3JraW5nIGNvcHkpCkBAIC0yMzAsNyArMjMwLDYgQEAgc2V0KFdU
Rl9QVUJMSUNfSEVBREVSUwogICAgIFN5bmNocm9uaXplZEZpeGVkUXVldWUuaAogICAgIFN5c3Rl
bUZyZWUuaAogICAgIFN5c3RlbVRyYWNpbmcuaAotICAgIFRhZ2dlZEFycmF5U3RvcmFnZVB0ci5o
CiAgICAgVGhyZWFkR3JvdXAuaAogICAgIFRocmVhZE1lc3NhZ2UuaAogICAgIFRocmVhZFNhZmVS
ZWZDb3VudGVkLmgKSW5kZXg6IFNvdXJjZS9XVEYvd3RmL0NhZ2VkUHRyLmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1dURi93dGYvQ2FnZWRQdHIuaAkocmV2aXNpb24gMjQ2MjcxKQorKysgU291cmNl
L1dURi93dGYvQ2FnZWRQdHIuaAkod29ya2luZyBjb3B5KQpAQCAtMjcsOTEgKzI3LDEwNyBAQAog
CiAjaW5jbHVkZSA8d3RmL0R1bWJQdHJUcmFpdHMuaD4KICNpbmNsdWRlIDx3dGYvR2lnYWNhZ2Uu
aD4KLSNpbmNsdWRlIDx3dGYvUHRyVGFnLmg+CiAKIG5hbWVzcGFjZSBXVEYgewogCi1jb25zdGV4
cHIgYm9vbCB0YWdDYWdlZFB0ciA9IHRydWU7Ci0KLXRlbXBsYXRlPEdpZ2FjYWdlOjpLaW5kIHBh
c3NlZEtpbmQsIHR5cGVuYW1lIFQsIGJvb2wgc2hvdWxkVGFnID0gZmFsc2UsIHR5cGVuYW1lIFB0
clRyYWl0cyA9IER1bWJQdHJUcmFpdHM8VD4+Cit0ZW1wbGF0ZTxHaWdhY2FnZTo6S2luZCBwYXNz
ZWRLaW5kLCB0eXBlbmFtZSBULCB0eXBlbmFtZSBQdHJUcmFpdHMgPSBEdW1iUHRyVHJhaXRzPFQ+
PgogY2xhc3MgQ2FnZWRQdHIgewogcHVibGljOgogICAgIHN0YXRpYyBjb25zdGV4cHIgR2lnYWNh
Z2U6OktpbmQga2luZCA9IHBhc3NlZEtpbmQ7CiAKICAgICBDYWdlZFB0cigpIDogQ2FnZWRQdHIo
bnVsbHB0cikgeyB9Ci0gICAgQ2FnZWRQdHIoc3RkOjpudWxscHRyX3QpCi0gICAgICAgIDogbV9w
dHIoc2hvdWxkVGFnID8gdGFnQXJyYXlQdHI8VD4obnVsbHB0ciwgMCkgOiBudWxscHRyKQotICAg
IHsgfQotCi0gICAgQ2FnZWRQdHIoVCogcHRyLCB1bnNpZ25lZCBzaXplKQotICAgICAgICA6IG1f
cHRyKHNob3VsZFRhZyA/IHRhZ0FycmF5UHRyKHB0ciwgc2l6ZSkgOiBwdHIpCi0gICAgeyB9Ci0K
KyAgICBDYWdlZFB0cihzdGQ6Om51bGxwdHJfdCkgOiBtX3B0cihudWxscHRyKSB7IH0KIAotICAg
IFQqIGdldCh1bnNpZ25lZCBzaXplKSBjb25zdAorICAgIGV4cGxpY2l0IENhZ2VkUHRyKFQqIHB0
cikKKyAgICAgICAgOiBtX3B0cihwdHIpCisgICAgeworICAgIH0KKyAgICAKKyAgICBUKiBnZXQo
KSBjb25zdAogICAgIHsKICAgICAgICAgQVNTRVJUKG1fcHRyKTsKLSAgICAgICAgVCogcHRyID0g
UHRyVHJhaXRzOjp1bndyYXAobV9wdHIpOwotICAgICAgICBpZiAoc2hvdWxkVGFnKQotICAgICAg
ICAgICAgcHRyID0gdW50YWdBcnJheVB0cihwdHIsIHNpemUpOwotICAgICAgICByZXR1cm4gR2ln
YWNhZ2U6OmNhZ2VkKGtpbmQsIHB0cik7CisgICAgICAgIHJldHVybiBHaWdhY2FnZTo6Y2FnZWQo
a2luZCwgUHRyVHJhaXRzOjp1bndyYXAobV9wdHIpKTsKICAgICB9Ci0KLSAgICBUKiBnZXRNYXlC
ZU51bGwodW5zaWduZWQgc2l6ZSkgY29uc3QKKyAgICAKKyAgICBUKiBnZXRNYXlCZU51bGwoKSBj
b25zdAogICAgIHsKLSAgICAgICAgVCogcHRyID0gUHRyVHJhaXRzOjp1bndyYXAobV9wdHIpOwot
ICAgICAgICBpZiAoc2hvdWxkVGFnKQotICAgICAgICAgICAgcHRyID0gdW50YWdBcnJheVB0cihw
dHIsIHNpemUpOwotICAgICAgICByZXR1cm4gR2lnYWNhZ2U6OmNhZ2VkTWF5QmVOdWxsKGtpbmQs
IHB0cik7CisgICAgICAgIGlmICghbV9wdHIpCisgICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsK
KyAgICAgICAgcmV0dXJuIGdldCgpOwogICAgIH0KIAotICAgIFQqIGdldFVuc2FmZSgpIGNvbnN0
CisgICAgQ2FnZWRQdHImIG9wZXJhdG9yPShUKiBwdHIpCiAgICAgewotICAgICAgICBUKiBwdHIg
PSBQdHJUcmFpdHM6OnVud3JhcChtX3B0cik7Ci0gICAgICAgIGlmIChzaG91bGRUYWcpCi0gICAg
ICAgICAgICBwdHIgPSByZW1vdmVBcnJheVB0clRhZyhwdHIpOwotICAgICAgICByZXR1cm4gR2ln
YWNhZ2U6OmNhZ2VkTWF5QmVOdWxsKGtpbmQsIHB0cik7CisgICAgICAgIG1fcHRyID0gcHRyOwor
ICAgICAgICByZXR1cm4gKnRoaXM7CiAgICAgfQogCi0gICAgLy8gV2UgbmVlZCB0aGUgdGVtcGxh
dGUgaGVyZSBzbyB0aGF0IHRoZSB0eXBlIG9mIFUgaXMgZGVkdWNlZCBhdCB1c2FnZSB0aW1lIHJh
dGhlciB0aGFuIGNsYXNzIHRpbWUuIFUgc2hvdWxkIGFsd2F5cyBiZSBULgotICAgIHRlbXBsYXRl
PHR5cGVuYW1lIFUgPSBUPgotICAgIHR5cGVuYW1lIHN0ZDo6ZW5hYmxlX2lmPCFzdGQ6OmlzX3Nh
bWU8dm9pZCwgVT46OnZhbHVlLCBUPjo6dHlwZSYKLSAgICAvKiBUJiAqLyBhdCh1bnNpZ25lZCBp
bmRleCwgdW5zaWduZWQgc2l6ZSkgY29uc3QgeyByZXR1cm4gZ2V0KHNpemUpW2luZGV4XTsgfQot
Ci0gICAgdm9pZCByZWNhZ2UodW5zaWduZWQgb2xkU2l6ZSwgdW5zaWduZWQgbmV3U2l6ZSkKKyAg
ICBDYWdlZFB0ciYgb3BlcmF0b3I9KFQqJiYgcHRyKQogICAgIHsKLSAgICAgICAgYXV0byBwdHIg
PSBnZXQob2xkU2l6ZSk7Ci0gICAgICAgIEFTU0VSVChwdHIgPT0gZ2V0VW5zYWZlKCkpOwotICAg
ICAgICAqdGhpcyA9IENhZ2VkUHRyKHB0ciwgbmV3U2l6ZSk7CisgICAgICAgIG1fcHRyID0gV1RG
TW92ZShwdHIpOworICAgICAgICByZXR1cm4gKnRoaXM7CiAgICAgfQogCi0gICAgQ2FnZWRQdHIo
Q2FnZWRQdHImIG90aGVyKQotICAgICAgICA6IG1fcHRyKG90aGVyLm1fcHRyKQorICAgIGJvb2wg
b3BlcmF0b3I9PShjb25zdCBDYWdlZFB0ciYgb3RoZXIpIGNvbnN0CiAgICAgeworICAgICAgICBy
ZXR1cm4gZ2V0TWF5QmVOdWxsKCkgPT0gb3RoZXIuZ2V0TWF5QmVOdWxsKCk7CiAgICAgfQotCi0g
ICAgQ2FnZWRQdHImIG9wZXJhdG9yPShjb25zdCBDYWdlZFB0ciYgcHRyKQorICAgIAorICAgIGJv
b2wgb3BlcmF0b3IhPShjb25zdCBDYWdlZFB0ciYgb3RoZXIpIGNvbnN0CiAgICAgewotICAgICAg
ICBtX3B0ciA9IHB0ci5tX3B0cjsKLSAgICAgICAgcmV0dXJuICp0aGlzOworICAgICAgICByZXR1
cm4gISgqdGhpcyA9PSBvdGhlcik7CiAgICAgfQorICAgIAorICAgIGV4cGxpY2l0IG9wZXJhdG9y
IGJvb2woKSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuICp0aGlzICE9IENhZ2VkUHRyKCk7
CisgICAgfQorICAgIAorICAgIFQmIG9wZXJhdG9yKigpIGNvbnN0IHsgcmV0dXJuICpnZXQoKTsg
fQorICAgIFQqIG9wZXJhdG9yLT4oKSBjb25zdCB7IHJldHVybiBnZXQoKTsgfQorCisgICAgdGVt
cGxhdGU8dHlwZW5hbWUgSW5kZXhUeXBlPgorICAgIFQmIG9wZXJhdG9yW10oSW5kZXhUeXBlIGlu
ZGV4KSBjb25zdCB7IHJldHVybiBnZXQoKVtpbmRleF07IH0KKyAgICAKK3Byb3RlY3RlZDoKKyAg
ICB0eXBlbmFtZSBQdHJUcmFpdHM6OlN0b3JhZ2VUeXBlIG1fcHRyOworfTsKKwordGVtcGxhdGU8
R2lnYWNhZ2U6OktpbmQgcGFzc2VkS2luZCwgdHlwZW5hbWUgUHRyVHJhaXRzPgorY2xhc3MgQ2Fn
ZWRQdHI8cGFzc2VkS2luZCwgdm9pZCwgUHRyVHJhaXRzPiB7CitwdWJsaWM6CisgICAgc3RhdGlj
IGNvbnN0ZXhwciBHaWdhY2FnZTo6S2luZCBraW5kID0gcGFzc2VkS2luZDsKIAotICAgIENhZ2Vk
UHRyKENhZ2VkUHRyJiYgb3RoZXIpCi0gICAgICAgIDogbV9wdHIoUHRyVHJhaXRzOjpleGNoYW5n
ZShvdGhlci5tX3B0ciwgbnVsbHB0cikpCisgICAgQ2FnZWRQdHIoKSA6IENhZ2VkUHRyKG51bGxw
dHIpIHsgfQorICAgIENhZ2VkUHRyKHN0ZDo6bnVsbHB0cl90KSA6IG1fcHRyKG51bGxwdHIpIHsg
fQorCisgICAgZXhwbGljaXQgQ2FnZWRQdHIodm9pZCogcHRyKQorICAgICAgICA6IG1fcHRyKHB0
cikKKyAgICB7CisgICAgfQorICAgIAorICAgIHZvaWQqIGdldCgpIGNvbnN0CisgICAgeworICAg
ICAgICBBU1NFUlQobV9wdHIpOworICAgICAgICByZXR1cm4gR2lnYWNhZ2U6OmNhZ2VkKGtpbmQs
IFB0clRyYWl0czo6dW53cmFwKG1fcHRyKSk7CisgICAgfQorICAgIAorICAgIHZvaWQqIGdldE1h
eUJlTnVsbCgpIGNvbnN0CiAgICAgeworICAgICAgICBpZiAoIW1fcHRyKQorICAgICAgICAgICAg
cmV0dXJuIG51bGxwdHI7CisgICAgICAgIHJldHVybiBnZXQoKTsKICAgICB9CiAKLSAgICBDYWdl
ZFB0ciYgb3BlcmF0b3I9KENhZ2VkUHRyJiYgcHRyKQorICAgIENhZ2VkUHRyJiBvcGVyYXRvcj0o
dm9pZCogcHRyKQogICAgIHsKLSAgICAgICAgbV9wdHIgPSBQdHJUcmFpdHM6OmV4Y2hhbmdlKHB0
ci5tX3B0ciwgbnVsbHB0cik7CisgICAgICAgIG1fcHRyID0gcHRyOwogICAgICAgICByZXR1cm4g
KnRoaXM7CiAgICAgfQogCiAgICAgYm9vbCBvcGVyYXRvcj09KGNvbnN0IENhZ2VkUHRyJiBvdGhl
cikgY29uc3QKICAgICB7Ci0gICAgICAgIGJvb2wgcmVzdWx0ID0gbV9wdHIgPT0gb3RoZXIubV9w
dHI7Ci0gICAgICAgIEFTU0VSVChyZXN1bHQgPT0gKGdldFVuc2FmZSgpID09IG90aGVyLmdldFVu
c2FmZSgpKSk7Ci0gICAgICAgIHJldHVybiByZXN1bHQ7CisgICAgICAgIHJldHVybiBnZXRNYXlC
ZU51bGwoKSA9PSBvdGhlci5nZXRNYXlCZU51bGwoKTsKICAgICB9CiAgICAgCiAgICAgYm9vbCBv
cGVyYXRvciE9KGNvbnN0IENhZ2VkUHRyJiBvdGhlcikgY29uc3QKQEAgLTEyMSw3ICsxMzcsNyBA
QCBwdWJsaWM6CiAgICAgCiAgICAgZXhwbGljaXQgb3BlcmF0b3IgYm9vbCgpIGNvbnN0CiAgICAg
ewotICAgICAgICByZXR1cm4gZ2V0VW5zYWZlKCkgIT0gbnVsbHB0cjsKKyAgICAgICAgcmV0dXJu
ICp0aGlzICE9IENhZ2VkUHRyKCk7CiAgICAgfQogICAgIAogcHJvdGVjdGVkOgpAQCAtMTMxLDUg
KzE0Nyw0IEBAIHByb3RlY3RlZDoKIH0gLy8gbmFtZXNwYWNlIFdURgogCiB1c2luZyBXVEY6OkNh
Z2VkUHRyOwotdXNpbmcgV1RGOjp0YWdDYWdlZFB0cjsKIApJbmRleDogU291cmNlL1dURi93dGYv
Q2FnZWRVbmlxdWVQdHIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV1RGL3d0Zi9DYWdlZFVuaXF1
ZVB0ci5oCShyZXZpc2lvbiAyNDYyNzEpCisrKyBTb3VyY2UvV1RGL3d0Zi9DYWdlZFVuaXF1ZVB0
ci5oCSh3b3JraW5nIGNvcHkpCkBAIC0yOSwzMCArMjksODAgQEAKIAogbmFtZXNwYWNlIFdURiB7
CiAKLXRlbXBsYXRlPEdpZ2FjYWdlOjpLaW5kIGtpbmQsIHR5cGVuYW1lIFQsIGJvb2wgc2hvdWxk
VGFnID0gZmFsc2U+Ci1jbGFzcyBDYWdlZFVuaXF1ZVB0ciA6IHB1YmxpYyBDYWdlZFB0cjxraW5k
LCBULCBzaG91bGRUYWc+IHsKLSAgICBzdGF0aWNfYXNzZXJ0KHN0ZDo6aXNfdHJpdmlhbGx5X2Rl
c3RydWN0aWJsZTxUPjo6dmFsdWUsICJXZSBleHBlY3QgdGhlIGNvbnRlbnRzIG9mIGEgY2FnZWQg
cG9pbnRlciB0byBiZSB0cml2aWFsbHkgZGVzdHJ1Y3RhYmxlLiIpOwordGVtcGxhdGU8R2lnYWNh
Z2U6OktpbmQga2luZCwgdHlwZW5hbWUgVCwgdHlwZW5hbWUgRW5hYmxlID0gdm9pZD4KK2NsYXNz
IENhZ2VkVW5pcXVlUHRyIDogcHVibGljIENhZ2VkUHRyPGtpbmQsIFQ+IHsKIHB1YmxpYzoKLSAg
ICB1c2luZyBCYXNlID0gQ2FnZWRQdHI8a2luZCwgVCwgc2hvdWxkVGFnPjsKLSAgICBDYWdlZFVu
aXF1ZVB0cigpID0gZGVmYXVsdDsKLQotICAgIENhZ2VkVW5pcXVlUHRyKFQqIHB0ciwgdW5zaWdu
ZWQgc2l6ZSkKLSAgICAgICAgOiBCYXNlKHB0ciwgc2l6ZSkKLSAgICB7IH0KKyAgICBDYWdlZFVu
aXF1ZVB0cihUKiBwdHIgPSBudWxscHRyKQorICAgICAgICA6IENhZ2VkUHRyPGtpbmQsIFQ+KHB0
cikKKyAgICB7CisgICAgfQorICAgIAorICAgIENhZ2VkVW5pcXVlUHRyKENhZ2VkVW5pcXVlUHRy
JiYgcHRyKQorICAgICAgICA6IENhZ2VkUHRyPGtpbmQsIFQ+KHB0ci5tX3B0cikKKyAgICB7Cisg
ICAgICAgIHB0ci5tX3B0ciA9IG51bGxwdHI7CisgICAgfQorICAgIAorICAgIENhZ2VkVW5pcXVl
UHRyKGNvbnN0IENhZ2VkVW5pcXVlUHRyJikgPSBkZWxldGU7CisgICAgCisgICAgdGVtcGxhdGU8
dHlwZW5hbWUuLi4gQXJndW1lbnRzPgorICAgIHN0YXRpYyBDYWdlZFVuaXF1ZVB0ciBjcmVhdGUo
QXJndW1lbnRzJiYuLi4gYXJndW1lbnRzKQorICAgIHsKKyAgICAgICAgVCogcmVzdWx0ID0gc3Rh
dGljX2Nhc3Q8VCo+KEdpZ2FjYWdlOjptYWxsb2Moa2luZCwgc2l6ZW9mKFQpKSk7CisgICAgICAg
IG5ldyAocmVzdWx0KSBUKHN0ZDo6Zm9yd2FyZDxBcmd1bWVudHM+KGFyZ3VtZW50cykuLi4pOwor
ICAgICAgICByZXR1cm4gQ2FnZWRVbmlxdWVQdHIocmVzdWx0KTsKKyAgICB9CisgICAgCisgICAg
Q2FnZWRVbmlxdWVQdHImIG9wZXJhdG9yPShDYWdlZFVuaXF1ZVB0ciYmIHB0cikKKyAgICB7Cisg
ICAgICAgIGRlc3Ryb3koKTsKKyAgICAgICAgdGhpcy0+bV9wdHIgPSBwdHIubV9wdHI7CisgICAg
ICAgIHB0ci5tX3B0ciA9IG51bGxwdHI7CisgICAgICAgIHJldHVybiAqdGhpczsKKyAgICB9Cisg
ICAgCisgICAgQ2FnZWRVbmlxdWVQdHImIG9wZXJhdG9yPShjb25zdCBDYWdlZFVuaXF1ZVB0ciYp
ID0gZGVsZXRlOworICAgIAorICAgIH5DYWdlZFVuaXF1ZVB0cigpCisgICAgeworICAgICAgICBk
ZXN0cm95KCk7CisgICAgfQorICAgIAorcHJpdmF0ZToKKyAgICB2b2lkIGRlc3Ryb3koKQorICAg
IHsKKyAgICAgICAgaWYgKCF0aGlzLT5tX3B0cikKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAg
ICAgdGhpcy0+bV9wdHItPn5UKCk7CisgICAgICAgIEdpZ2FjYWdlOjpmcmVlKGtpbmQsIHRoaXMt
Pm1fcHRyKTsKKyAgICB9Cit9OwogCit0ZW1wbGF0ZTxHaWdhY2FnZTo6S2luZCBraW5kLCB0eXBl
bmFtZSBUPgorY2xhc3MgQ2FnZWRVbmlxdWVQdHI8a2luZCwgVFtdLCB0eXBlbmFtZSBzdGQ6OmVu
YWJsZV9pZjxzdGQ6OmlzX3RyaXZpYWxseV9kZXN0cnVjdGlibGU8VD46OnZhbHVlPjo6dHlwZT4g
OiBwdWJsaWMgQ2FnZWRQdHI8a2luZCwgVD4geworcHVibGljOgorICAgIENhZ2VkVW5pcXVlUHRy
KCkgOiBDYWdlZFB0cjxraW5kLCBUPigpIHsgfQorICAgIAorICAgIENhZ2VkVW5pcXVlUHRyKFQq
IHB0cikKKyAgICAgICAgOiBDYWdlZFB0cjxraW5kLCBUPihwdHIpCisgICAgeworICAgIH0KKyAg
ICAKICAgICBDYWdlZFVuaXF1ZVB0cihDYWdlZFVuaXF1ZVB0ciYmIHB0cikKLSAgICAgICAgOiBC
YXNlKHN0ZDo6Zm9yd2FyZDxDYWdlZFVuaXF1ZVB0ciYmPihwdHIpKQotICAgIHsgfQorICAgICAg
ICA6IENhZ2VkUHRyPGtpbmQsIFQ+KHB0ci5tX3B0cikKKyAgICB7CisgICAgICAgIHB0ci5tX3B0
ciA9IG51bGxwdHI7CisgICAgfQogICAgIAogICAgIENhZ2VkVW5pcXVlUHRyKGNvbnN0IENhZ2Vk
VW5pcXVlUHRyJikgPSBkZWxldGU7CiAgICAgCiAgICAgdGVtcGxhdGU8dHlwZW5hbWUuLi4gQXJn
dW1lbnRzPgotICAgIHN0YXRpYyBDYWdlZFVuaXF1ZVB0ciBjcmVhdGUodW5zaWduZWQgbGVuZ3Ro
LCBBcmd1bWVudHMmJi4uLiBhcmd1bWVudHMpCisgICAgc3RhdGljIENhZ2VkVW5pcXVlUHRyIGNy
ZWF0ZShzaXplX3QgY291bnQsIEFyZ3VtZW50cyYmLi4uIGFyZ3VtZW50cykKICAgICB7Ci0gICAg
ICAgIFQqIHJlc3VsdCA9IHN0YXRpY19jYXN0PFQqPihHaWdhY2FnZTo6bWFsbG9jKGtpbmQsIHNp
emVvZihUKSAqIGxlbmd0aCkpOwotICAgICAgICB3aGlsZSAobGVuZ3RoLS0pCi0gICAgICAgICAg
ICBuZXcgKHJlc3VsdCArIGxlbmd0aCkgVChhcmd1bWVudHMuLi4pOwotICAgICAgICByZXR1cm4g
Q2FnZWRVbmlxdWVQdHIocmVzdWx0LCBsZW5ndGgpOworICAgICAgICBUKiByZXN1bHQgPSBzdGF0
aWNfY2FzdDxUKj4oR2lnYWNhZ2U6Om1hbGxvY0FycmF5KGtpbmQsIGNvdW50LCBzaXplb2YoVCkp
KTsKKyAgICAgICAgd2hpbGUgKGNvdW50LS0pCisgICAgICAgICAgICBuZXcgKHJlc3VsdCArIGNv
dW50KSBUKHN0ZDo6Zm9yd2FyZDxBcmd1bWVudHM+KGFyZ3VtZW50cykuLi4pOworICAgICAgICBy
ZXR1cm4gQ2FnZWRVbmlxdWVQdHIocmVzdWx0KTsKICAgICB9CiAgICAgCiAgICAgQ2FnZWRVbmlx
dWVQdHImIG9wZXJhdG9yPShDYWdlZFVuaXF1ZVB0ciYmIHB0cikKQEAgLTY5LDE2ICsxMTksODMg
QEAgcHVibGljOgogICAgIHsKICAgICAgICAgZGVzdHJveSgpOwogICAgIH0KKyAgICAKK3ByaXZh
dGU6CisgICAgdm9pZCBkZXN0cm95KCkKKyAgICB7CisgICAgICAgIGlmICghdGhpcy0+bV9wdHIp
CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIEdpZ2FjYWdlOjpmcmVlKGtpbmQsIHRoaXMt
Pm1fcHRyKTsKKyAgICB9Cit9OwogCit0ZW1wbGF0ZTxHaWdhY2FnZTo6S2luZCBraW5kLCB0eXBl
bmFtZSBUPgorY2xhc3MgQ2FnZWRVbmlxdWVQdHI8a2luZCwgVFtdLCB0eXBlbmFtZSBzdGQ6OmVu
YWJsZV9pZjwhc3RkOjppc190cml2aWFsbHlfZGVzdHJ1Y3RpYmxlPFQ+Ojp2YWx1ZT46OnR5cGU+
IDogcHVibGljIENhZ2VkUHRyPGtpbmQsIFQ+IHsKK3B1YmxpYzoKKyAgICBDYWdlZFVuaXF1ZVB0
cigpIDogQ2FnZWRQdHI8a2luZCwgVD4oKSB7IH0KKyAgICAKKyAgICBDYWdlZFVuaXF1ZVB0cihU
KiBwdHIsIHNpemVfdCBjb3VudCkKKyAgICAgICAgOiBDYWdlZFB0cjxraW5kLCBUPihwdHIpCisg
ICAgICAgICwgbV9jb3VudChjb3VudCkKKyAgICB7CisgICAgfQorICAgIAorICAgIENhZ2VkVW5p
cXVlUHRyKENhZ2VkVW5pcXVlUHRyJiYgcHRyKQorICAgICAgICA6IENhZ2VkUHRyPGtpbmQsIFQ+
KHB0ci5tX3B0cikKKyAgICAgICAgLCBtX2NvdW50KHB0ci5tX2NvdW50KQorICAgIHsKKyAgICAg
ICAgcHRyLmNsZWFyKCk7CisgICAgfQorICAgIAorICAgIENhZ2VkVW5pcXVlUHRyKGNvbnN0IENh
Z2VkVW5pcXVlUHRyJikgPSBkZWxldGU7CisgICAgCisgICAgdGVtcGxhdGU8dHlwZW5hbWUuLi4g
QXJndW1lbnRzPgorICAgIHN0YXRpYyBDYWdlZFVuaXF1ZVB0ciBjcmVhdGUoc2l6ZV90IGNvdW50
LCBBcmd1bWVudHMmJi4uLiBhcmd1bWVudHMpCisgICAgeworICAgICAgICBUKiByZXN1bHQgPSBz
dGF0aWNfY2FzdDxUKj4oR2lnYWNhZ2U6Om1hbGxvY0FycmF5KGtpbmQsIGNvdW50LCBzaXplb2Yo
VCkpKTsKKyAgICAgICAgd2hpbGUgKGNvdW50LS0pCisgICAgICAgICAgICBuZXcgKHJlc3VsdCAr
IGNvdW50KSBUKHN0ZDo6Zm9yd2FyZDxBcmd1bWVudHM+KGFyZ3VtZW50cykuLi4pOworICAgICAg
ICByZXR1cm4gQ2FnZWRVbmlxdWVQdHIocmVzdWx0LCBjb3VudCk7CisgICAgfQorICAgIAorICAg
IENhZ2VkVW5pcXVlUHRyJiBvcGVyYXRvcj0oQ2FnZWRVbmlxdWVQdHImJiBwdHIpCisgICAgewor
ICAgICAgICBkZXN0cm95KCk7CisgICAgICAgIHRoaXMtPm1fcHRyID0gcHRyLm1fcHRyOworICAg
ICAgICBtX2NvdW50ID0gcHRyLm1fY291bnQ7CisgICAgICAgIHB0ci5jbGVhcigpOworICAgICAg
ICByZXR1cm4gKnRoaXM7CisgICAgfQorICAgIAorICAgIENhZ2VkVW5pcXVlUHRyJiBvcGVyYXRv
cj0oY29uc3QgQ2FnZWRVbmlxdWVQdHImKSA9IGRlbGV0ZTsKKyAgICAKKyAgICB+Q2FnZWRVbmlx
dWVQdHIoKQorICAgIHsKKyAgICAgICAgZGVzdHJveSgpOworICAgIH0KKyAgICAKKyAgICAvLyBG
SVhNRTogSXQncyB3ZWlyZCB0aGF0IHdlIGluaGVyaXQgQ2FnZWRQdHI6Om9wZXJhdG9yPT0gYW5k
IGZyaWVuZHMsIHdoaWNoIGRvbid0IGRvIGFueXRoaW5nCisgICAgLy8gYWJvdXQgbV9jb3VudC4g
SXQgIndvcmtzIiBiZWNhdXNlIHBvaW50ZXIgZXF1YWxpdHkgaXMgZW5vdWdoIHNvIGxvbmcgYXMg
ZXZlcnl0aGluZyBpcyBzYW5lLCBidXQKKyAgICAvLyBpdCBzZWVtcyBsaWtlIGEgbWlzc2VkIG9w
cG9ydHVuaXR5IHRvIGFzc2VydCB0aGluZ3MuCisgICAgLy8gaHR0cHM6Ly9idWdzLndlYmtpdC5v
cmcvc2hvd19idWcuY2dpP2lkPTE3NTU0MQorICAgIAogcHJpdmF0ZToKICAgICB2b2lkIGRlc3Ry
b3koKQogICAgIHsKLSAgICAgICAgVCogcHRyID0gQmFzZTo6Z2V0VW5zYWZlKCk7Ci0gICAgICAg
IGlmICghcHRyKQorICAgICAgICBpZiAoIXRoaXMtPm1fcHRyKQogICAgICAgICAgICAgcmV0dXJu
OwotICAgICAgICBwdHItPn5UKCk7Ci0gICAgICAgIEdpZ2FjYWdlOjpmcmVlKGtpbmQsIHB0cik7
CisgICAgICAgIHdoaWxlIChtX2NvdW50LS0pCisgICAgICAgICAgICB0aGlzLT5tX3B0clttX2Nv
dW50XS5+VCgpOworICAgICAgICBHaWdhY2FnZTo6ZnJlZShraW5kLCB0aGlzLT5tX3B0cik7CiAg
ICAgfQorICAgIAorICAgIHZvaWQgY2xlYXIoKQorICAgIHsKKyAgICAgICAgdGhpcy0+bV9wdHIg
PSBudWxscHRyOworICAgICAgICBtX2NvdW50ID0gMDsKKyAgICB9CisgICAgCisgICAgc2l6ZV90
IG1fY291bnQgeyAwIH07CiB9OwogCiB9IC8vIG5hbWVzcGFjZSBXVEYKSW5kZXg6IFNvdXJjZS9X
VEYvd3RmL0dpZ2FjYWdlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dURi93dGYvR2lnYWNhZ2Uu
aAkocmV2aXNpb24gMjQ2MjcxKQorKysgU291cmNlL1dURi93dGYvR2lnYWNhZ2UuaAkod29ya2lu
ZyBjb3B5KQpAQCAtMTE0LDggKzExNCw2IEBAIEFMV0FZU19JTkxJTkUgc2l6ZV90IG1hc2soS2lu
ZCkgeyByZXR1cm4KIAogdGVtcGxhdGU8dHlwZW5hbWUgVD4KIGlubGluZSBUKiBjYWdlZChLaW5k
LCBUKiBwdHIpIHsgcmV0dXJuIHB0cjsgfQotdGVtcGxhdGU8dHlwZW5hbWUgVD4KLWlubGluZSBU
KiBjYWdlZE1heUJlTnVsbChLaW5kLCBUKiBwdHIpIHsgcmV0dXJuIHB0cjsgfQogCiBpbmxpbmUg
Ym9vbCBpc0NhZ2VkKEtpbmQsIGNvbnN0IHZvaWQqKSB7IHJldHVybiBmYWxzZTsgfQogCkluZGV4
OiBTb3VyY2UvV1RGL3d0Zi9QdHJUYWcuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV1RGL3d0Zi9Q
dHJUYWcuaAkocmV2aXNpb24gMjQ2MjcxKQorKysgU291cmNlL1dURi93dGYvUHRyVGFnLmgJKHdv
cmtpbmcgY29weSkKQEAgLTEyMiwzOCArMTIyLDYgQEAgY29uc3RleHByIGJvb2wgZW5hYmxlUHRy
VGFnRGVidWdBc3NlcnQgPQogICAgIH0gd2hpbGUgKGZhbHNlKQogCiAKLXRlbXBsYXRlPHR5cGVu
YW1lIFQ+Ci1pbmxpbmUgVCogdGFnQXJyYXlQdHIoc3RkOjpudWxscHRyX3QgcHRyLCBzaXplX3Qg
bGVuZ3RoKQotewotICAgIEFTU0VSVCghbGVuZ3RoKTsKLSAgICByZXR1cm4gcHRyYXV0aF9zaWdu
X3VuYXV0aGVudGljYXRlZChzdGF0aWNfY2FzdDxUKj4ocHRyKSwgcHRyYXV0aF9rZXlfcHJvY2Vz
c19kZXBlbmRlbnRfZGF0YSwgbGVuZ3RoKTsKLX0KLQotCi10ZW1wbGF0ZTx0eXBlbmFtZSBUPgot
aW5saW5lIFQqIHRhZ0FycmF5UHRyKFQqIHB0ciwgc2l6ZV90IGxlbmd0aCkKLXsKLSAgICByZXR1
cm4gcHRyYXV0aF9zaWduX3VuYXV0aGVudGljYXRlZChwdHIsIHB0cmF1dGhfa2V5X3Byb2Nlc3Nf
ZGVwZW5kZW50X2RhdGEsIGxlbmd0aCk7Ci19Ci0KLXRlbXBsYXRlPHR5cGVuYW1lIFQ+Ci1pbmxp
bmUgVCogdW50YWdBcnJheVB0cihUKiBwdHIsIHNpemVfdCBsZW5ndGgpCi17Ci0gICAgcmV0dXJu
IHB0cmF1dGhfYXV0aF9kYXRhKHB0ciwgcHRyYXV0aF9rZXlfcHJvY2Vzc19kZXBlbmRlbnRfZGF0
YSwgbGVuZ3RoKTsKLX0KLQotdGVtcGxhdGU8dHlwZW5hbWUgVD4KLWlubGluZSBUKiByZW1vdmVB
cnJheVB0clRhZyhUKiBwdHIpCi17Ci0gICAgcmV0dXJuIHB0cmF1dGhfc3RyaXAocHRyLCBwdHJh
dXRoX2tleV9wcm9jZXNzX2RlcGVuZGVudF9kYXRhKTsKLX0KLQotdGVtcGxhdGU8dHlwZW5hbWUg
VD4KLWlubGluZSBUKiByZXRhZ0FycmF5UHRyKFQqIHB0ciwgc2l6ZV90IG9sZExlbmd0aCwgc2l6
ZV90IG5ld0xlbmd0aCkKLXsKLSAgICByZXR1cm4gcHRyYXV0aF9hdXRoX2FuZF9yZXNpZ24ocHRy
LCBwdHJhdXRoX2tleV9wcm9jZXNzX2RlcGVuZGVudF9kYXRhLCBvbGRMZW5ndGgsIHB0cmF1dGhf
a2V5X3Byb2Nlc3NfZGVwZW5kZW50X2RhdGEsIG5ld0xlbmd0aCk7Ci19Ci0KIHRlbXBsYXRlPHR5
cGVuYW1lIFQsIHR5cGVuYW1lIFB0clR5cGUsIHR5cGVuYW1lID0gc3RkOjplbmFibGVfaWZfdDxz
dGQ6OmlzX3BvaW50ZXI8UHRyVHlwZT46OnZhbHVlICYmICFzdGQ6OmlzX3NhbWU8VCwgUHRyVHlw
ZT46OnZhbHVlPj4KIGlubGluZSBjb25zdGV4cHIgVCByZW1vdmVDb2RlUHRyVGFnKFB0clR5cGUg
cHRyKQogewpAQCAtNDI3LDM4ICszOTUsNiBAQCBpbmxpbmUgYm9vbCB1c2VzUG9pbnRlclRhZ2dp
bmcoKSB7IHJldHVyCiBpbmxpbmUgdm9pZCByZWdpc3RlclB0clRhZ0xvb2t1cChQdHJUYWdMb29r
dXAqKSB7IH0KIGlubGluZSB2b2lkIHJlcG9ydEJhZFRhZyhjb25zdCB2b2lkKiwgUHRyVGFnKSB7
IH0KIAotdGVtcGxhdGU8dHlwZW5hbWUgVD4KLWlubGluZSBUKiB0YWdBcnJheVB0cihzdGQ6Om51
bGxwdHJfdCwgc2l6ZV90IHNpemUpCi17Ci0gICAgQVNTRVJUX1VOVVNFRChzaXplLCAhc2l6ZSk7
Ci0gICAgcmV0dXJuIG51bGxwdHI7Ci19Ci0KLXRlbXBsYXRlPHR5cGVuYW1lIFQ+Ci1pbmxpbmUg
VCogdGFnQXJyYXlQdHIoVCogcHRyLCBzaXplX3QpCi17Ci0gICAgcmV0dXJuIHB0cjsKLX0KLQot
dGVtcGxhdGU8dHlwZW5hbWUgVD4KLWlubGluZSBUKiB1bnRhZ0FycmF5UHRyKFQqIHB0ciwgc2l6
ZV90KQotewotICAgIHJldHVybiBwdHI7Ci19Ci0KLXRlbXBsYXRlPHR5cGVuYW1lIFQ+Ci1pbmxp
bmUgVCogcmVtb3ZlQXJyYXlQdHJUYWcoVCogcHRyKQotewotICAgIHJldHVybiBwdHI7Ci19Ci0K
LXRlbXBsYXRlPHR5cGVuYW1lIFQ+Ci1pbmxpbmUgVCogcmV0YWdBcnJheVB0cihUKiBwdHIsIHNp
emVfdCwgc2l6ZV90KQotewotICAgIHJldHVybiBwdHI7Ci19Ci0KLQogdGVtcGxhdGU8dHlwZW5h
bWUgVCwgdHlwZW5hbWUgUHRyVHlwZSwgdHlwZW5hbWUgPSBzdGQ6OmVuYWJsZV9pZl90PHN0ZDo6
aXNfcG9pbnRlcjxQdHJUeXBlPjo6dmFsdWUgJiYgIXN0ZDo6aXNfc2FtZTxULCBQdHJUeXBlPjo6
dmFsdWU+PgogY29uc3RleHByIFQgdGFnQ29kZVB0cihQdHJUeXBlIHB0ciwgUHRyVGFnKSB7IHJl
dHVybiBiaXR3aXNlX2Nhc3Q8VD4ocHRyKTsgfQogCkBAIC01NTgsMTEgKzQ5NCw2IEBAIHVzaW5n
IFdURjo6UHRyVGFnOwogCiB1c2luZyBXVEY6OnJlcG9ydEJhZFRhZzsKIAotdXNpbmcgV1RGOjp0
YWdBcnJheVB0cjsKLXVzaW5nIFdURjo6dW50YWdBcnJheVB0cjsKLXVzaW5nIFdURjo6cmV0YWdB
cnJheVB0cjsKLXVzaW5nIFdURjo6cmVtb3ZlQXJyYXlQdHJUYWc7Ci0KIHVzaW5nIFdURjo6dGFn
Q29kZVB0cjsKIHVzaW5nIFdURjo6dW50YWdDb2RlUHRyOwogdXNpbmcgV1RGOjpyZXRhZ0NvZGVQ
dHI7CkluZGV4OiBTb3VyY2UvV1RGL3d0Zi9UYWdnZWRBcnJheVN0b3JhZ2VQdHIuaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvV1RGL3d0Zi9UYWdnZWRBcnJheVN0b3JhZ2VQdHIuaAkocmV2aXNpb24g
MjQ2MjcxKQorKysgU291cmNlL1dURi93dGYvVGFnZ2VkQXJyYXlTdG9yYWdlUHRyLmgJKHdvcmtp
bmcgY29weSkKQEAgLTEsNTkgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxOSBBcHBs
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVz
ZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmlj
YXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlv
bnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVz
dCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmli
dXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQK
LSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVy
aWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FS
RSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCi0gKiBFWFBSRVNT
IE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRI
RQotICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBG
T1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQg
U0hBTEwgQVBQTEUgSU5DLiBPUgotICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJ
UkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCi0gKiBFWEVNUExBUlksIE9SIENP
TlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBQ
Uk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwg
REFUQSwgT1IKLSAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBD
QVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKLSAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05U
UkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xVRElORyBORUdMSUdFTkNF
IE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0gKiBPRiBU
SElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0gg
REFNQUdFLgotICovCi0KLSNwcmFnbWEgb25jZQotCi0jaW5jbHVkZSA8d3RmL1B0clRhZy5oPgot
Ci1uYW1lc3BhY2UgV1RGIHsKLQotdGVtcGxhdGU8dHlwZW5hbWUgUHRyVHlwZT4KLWNsYXNzIFRh
Z2dlZEFycmF5U3RvcmFnZVB0ciB7Ci1wdWJsaWM6Ci0gICAgVGFnZ2VkQXJyYXlTdG9yYWdlUHRy
KCkKLSAgICAgICAgOiBtX3B0cih0YWdBcnJheVB0cjxQdHJUeXBlPihudWxscHRyLCAwKSkKLSAg
ICB7IH0KLQotICAgIFRhZ2dlZEFycmF5U3RvcmFnZVB0cihQdHJUeXBlKiBwdHIsIHVuc2lnbmVk
IGxlbmd0aCkKLSAgICAgICAgOiBtX3B0cih0YWdBcnJheVB0cihwdHIsIGxlbmd0aCkpCi0gICAg
eyB9Ci0KLSAgICBQdHJUeXBlKiBnZXQodW5zaWduZWQgbGVuZ3RoKSBjb25zdCB7IHJldHVybiB1
bnRhZ0FycmF5UHRyKG1fcHRyLCBsZW5ndGgpOyB9IAotICAgIFB0clR5cGUqIGdldFVuc2FmZSgp
IGNvbnN0IHsgcmV0dXJuIHJlbW92ZUFycmF5UHRyVGFnKG1fcHRyKTsgfQotCi0gICAgdm9pZCBy
ZXNpemUodW5zaWduZWQgb2xkTGVuZ3RoLCB1bnNpZ25lZCBuZXdMZW5ndGgpCi0gICAgewotICAg
ICAgICBtX3B0ciA9IHJldGFnQXJyYXlQdHIobV9wdHIsIG9sZExlbmd0aCwgbmV3TGVuZ3RoKTsK
LSAgICB9Ci0gICAgCi0gICAgZXhwbGljaXQgb3BlcmF0b3IgYm9vbCgpIGNvbnN0IHsgcmV0dXJu
ICEhZ2V0VW5zYWZlKCk7IH0KLQotcHJpdmF0ZToKLSAgICBQdHJUeXBlKiBtX3B0cjsKLX07Ci0K
LX0KLQotdXNpbmcgV1RGOjpUYWdnZWRBcnJheVN0b3JhZ2VQdHI7CkluZGV4OiBTb3VyY2UvYm1h
bGxvYy9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL2JtYWxsb2MvQ2hhbmdlTG9nCShy
ZXZpc2lvbiAyNDYyODgpCisrKyBTb3VyY2UvYm1hbGxvYy9DaGFuZ2VMb2cJKHdvcmtpbmcgY29w
eSkKQEAgLTEsMyArMSwxNSBAQAorMjAxOS0wNi0xMCAgU2FhbSBCYXJhdGkgIDxzYmFyYXRpQGFw
cGxlLmNvbT4KKworICAgICAgICBSb2xsIG91dCBQQUMgY2FnZQorICAgICAgICBodHRwczovL2J1
Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTk4NzI2CisKKyAgICAgICAgUmV2aWV3ZWQg
YnkgS2VpdGggTWlsbGVyLgorCisgICAgICAgICogYm1hbGxvYy9HaWdhY2FnZS5oOgorICAgICAg
ICAoR2lnYWNhZ2U6OmlzRW5hYmxlZCk6CisgICAgICAgIChHaWdhY2FnZTo6Y2FnZWQpOgorICAg
ICAgICAoR2lnYWNhZ2U6OmNhZ2VkTWF5QmVOdWxsKTogRGVsZXRlZC4KKwogMjAxOS0wNi0wOSAg
Q29tbWl0IFF1ZXVlICA8Y29tbWl0LXF1ZXVlQHdlYmtpdC5vcmc+CiAKICAgICAgICAgVW5yZXZp
ZXdlZCwgcm9sbGluZyBvdXQgcjI0NjE1MCwgcjI0NjE2MCwgYW5kIHIyNDYxNjYuCkluZGV4OiBT
b3VyY2UvYm1hbGxvYy9ibWFsbG9jL0dpZ2FjYWdlLmgKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL2Jt
YWxsb2MvYm1hbGxvYy9HaWdhY2FnZS5oCShyZXZpc2lvbiAyNDYyNzEpCisrKyBTb3VyY2UvYm1h
bGxvYy9ibWFsbG9jL0dpZ2FjYWdlLmgJKHdvcmtpbmcgY29weSkKQEAgLTM0LDcgKzM0LDggQEAK
ICNpbmNsdWRlIDxjc3RkZGVmPgogI2luY2x1ZGUgPGludHR5cGVzLmg+CiAKLSNpZiAoKEJPUyhE
QVJXSU4pIHx8IEJPUyhMSU5VWCkpICYmIEJDUFUoWDg2XzY0KSkKKyNpZiAoKEJPUyhEQVJXSU4p
IHx8IEJPUyhMSU5VWCkpICYmIFwKKyhCQ1BVKFg4Nl82NCkgfHwgKEJDUFUoQVJNNjQpICYmICFk
ZWZpbmVkKF9fSUxQMzJfXykgJiYgKCFCUExBVEZPUk0oSU9TX0ZBTUlMWSkgfHwgQlBMQVRGT1JN
KElPUykpKSkpCiAjZGVmaW5lIEdJR0FDQUdFX0VOQUJMRUQgMQogI2Vsc2UKICNkZWZpbmUgR0lH
QUNBR0VfRU5BQkxFRCAwCkBAIC0xOTksMTQgKzIwMCw2IEBAIEJJTkxJTkUgVCogY2FnZWQoS2lu
ZCBraW5kLCBUKiBwdHIpCiAgICAgICAgICAgICByZWludGVycHJldF9jYXN0PHVpbnRwdHJfdD4o
cHRyKSAmIG1hc2soa2luZCkpKTsKIH0KIAotdGVtcGxhdGU8dHlwZW5hbWUgVD4KLUJJTkxJTkUg
VCogY2FnZWRNYXlCZU51bGwoS2luZCBraW5kLCBUKiBwdHIpCi17Ci0gICAgaWYgKCFwdHIpCi0g
ICAgICAgIHJldHVybiBwdHI7Ci0gICAgcmV0dXJuIGNhZ2VkKGtpbmQsIHB0cik7Ci19Ci0KIEJJ
TkxJTkUgYm9vbCBpc0NhZ2VkKEtpbmQga2luZCwgY29uc3Qgdm9pZCogcHRyKQogewogICAgIHJl
dHVybiBjYWdlZChraW5kLCBwdHIpID09IHB0cjsKQEAgLTIyNiw5ICsyMTksOCBAQCBCSU5MSU5F
IHNpemVfdCBzaXplKEtpbmQpIHsgQkNSQVNIKCk7IHJlCiBCSU5MSU5FIHZvaWQgZW5zdXJlR2ln
YWNhZ2UoKSB7IH0KIEJJTkxJTkUgYm9vbCB3YXNFbmFibGVkKCkgeyByZXR1cm4gZmFsc2U7IH0K
IEJJTkxJTkUgYm9vbCBpc0NhZ2VkKEtpbmQsIGNvbnN0IHZvaWQqKSB7IHJldHVybiB0cnVlOyB9
Ci1CSU5MSU5FIGJvb2wgaXNFbmFibGVkKEtpbmQpIHsgcmV0dXJuIGZhbHNlOyB9CitCSU5MSU5F
IGJvb2wgaXNFbmFibGVkKCkgeyByZXR1cm4gZmFsc2U7IH0KIHRlbXBsYXRlPHR5cGVuYW1lIFQ+
IEJJTkxJTkUgVCogY2FnZWQoS2luZCwgVCogcHRyKSB7IHJldHVybiBwdHI7IH0KLXRlbXBsYXRl
PHR5cGVuYW1lIFQ+IEJJTkxJTkUgVCogY2FnZWRNYXlCZU51bGwoS2luZCwgVCogcHRyKSB7IHJl
dHVybiBwdHI7IH0KIEJJTkxJTkUgdm9pZCBkaXNhYmxlRGlzYWJsaW5nUHJpbWl0aXZlR2lnYWNh
Z2VJZlNob3VsZEJlRW5hYmxlZCgpIHsgfQogQklOTElORSBib29sIGNhblByaW1pdGl2ZUdpZ2Fj
YWdlQmVEaXNhYmxlZCgpIHsgcmV0dXJuIGZhbHNlOyB9CiBCSU5MSU5FIHZvaWQgZGlzYWJsZVBy
aW1pdGl2ZUdpZ2FjYWdlKCkgeyB9Cg==
</data>

          </attachment>
      

    </bug>

</bugzilla>