<?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>151743</bug_id>
          
          <creation_ts>2015-12-02 05:04:58 -0800</creation_ts>
          <short_desc>Move ResourceLoadScheduler to WebKit1</short_desc>
          <delta_ts>2015-12-03 04:52:30 -0800</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>Page Loading</component>
          <version>WebKit Nightly Build</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords>InRadar</keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Antti Koivisto">koivisto</reporter>
          <assigned_to name="Nobody">webkit-unassigned</assigned_to>
          <cc>achristensen</cc>
    
    <cc>beidson</cc>
    
    <cc>cdumez</cc>
    
    <cc>commit-queue</cc>
    
    <cc>esprehn+autocc</cc>
    
    <cc>japhet</cc>
    
    <cc>kangil.han</cc>
    
    <cc>sam</cc>
    
    <cc>webkit-bug-importer</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1145550</commentid>
    <comment_count>0</comment_count>
    <who name="Antti Koivisto">koivisto</who>
    <bug_when>2015-12-02 05:04:58 -0800</bug_when>
    <thetext>It is no longer ever used by WebKit2. Simplify the WebKit/WebCore interface.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1145551</commentid>
    <comment_count>1</comment_count>
    <who name="Radar WebKit Bug Importer">webkit-bug-importer</who>
    <bug_when>2015-12-02 05:21:56 -0800</bug_when>
    <thetext>&lt;rdar://problem/23723158&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1145552</commentid>
    <comment_count>2</comment_count>
      <attachid>266437</attachid>
    <who name="Antti Koivisto">koivisto</who>
    <bug_when>2015-12-02 05:22:18 -0800</bug_when>
    <thetext>Created attachment 266437
patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1145553</commentid>
    <comment_count>3</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2015-12-02 05:25:16 -0800</bug_when>
    <thetext>Attachment 266437 did not pass style-queue:


ERROR: Source/WebKit/WebCoreSupport/WebResourceLoadScheduler.cpp:25:  Found header this file implements before WebCore config.h. Should be: config.h, primary header, blank line, and then alphabetically sorted.  [build/include_order] [4]
Total errors found: 1 in 32 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>1145555</commentid>
    <comment_count>4</comment_count>
      <attachid>266438</attachid>
    <who name="Antti Koivisto">koivisto</who>
    <bug_when>2015-12-02 06:16:05 -0800</bug_when>
    <thetext>Created attachment 266438
patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1145556</commentid>
    <comment_count>5</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2015-12-02 06:18:31 -0800</bug_when>
    <thetext>Attachment 266438 did not pass style-queue:


ERROR: Source/WebKit/WebCoreSupport/WebResourceLoadScheduler.cpp:25:  Found header this file implements before WebCore config.h. Should be: config.h, primary header, blank line, and then alphabetically sorted.  [build/include_order] [4]
Total errors found: 1 in 33 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>1145559</commentid>
    <comment_count>6</comment_count>
      <attachid>266440</attachid>
    <who name="Antti Koivisto">koivisto</who>
    <bug_when>2015-12-02 06:47:46 -0800</bug_when>
    <thetext>Created attachment 266440
patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1145560</commentid>
    <comment_count>7</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2015-12-02 06:50:24 -0800</bug_when>
    <thetext>Attachment 266440 did not pass style-queue:


ERROR: Source/WebKit/WebCoreSupport/WebResourceLoadScheduler.cpp:25:  Found header this file implements before WebCore config.h. Should be: config.h, primary header, blank line, and then alphabetically sorted.  [build/include_order] [4]
Total errors found: 1 in 33 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>1145629</commentid>
    <comment_count>8</comment_count>
      <attachid>266456</attachid>
    <who name="Antti Koivisto">koivisto</who>
    <bug_when>2015-12-02 11:11:51 -0800</bug_when>
    <thetext>Created attachment 266456
patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1145630</commentid>
    <comment_count>9</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2015-12-02 11:12:59 -0800</bug_when>
    <thetext>Attachment 266456 did not pass style-queue:


ERROR: Source/WebKit/WebCoreSupport/WebResourceLoadScheduler.cpp:25:  Found header this file implements before WebCore config.h. Should be: config.h, primary header, blank line, and then alphabetically sorted.  [build/include_order] [4]
Total errors found: 1 in 38 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>1145640</commentid>
    <comment_count>10</comment_count>
      <attachid>266456</attachid>
    <who name="Alex Christensen">achristensen</who>
    <bug_when>2015-12-02 11:25:30 -0800</bug_when>
    <thetext>Comment on attachment 266456
patch

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

r=me with comments.

&gt; Source/WebCore/platform/PlatformStrategies.h:90
&gt; +    CookiesStrategy* m_cookiesStrategy { };

Is this the cool new way to say { nullptr }?

&gt; Source/WebKit2/WebProcess/Network/WebResourceLoadScheduler.cpp:294
&gt; +    NetworkResourceLoadParameters loadParameters;

defersLoading, needsCertificateInfo, and maximumBufferingTime seem to be uninitialized.

&gt; Source/WebKit2/WebProcess/WebCoreSupport/WebPlatformStrategies.cpp:92
&gt;  LoaderStrategy* WebPlatformStrategies::createLoaderStrategy()

These could probably be made to return references.

&gt; Source/WebKit/WebCoreSupport/WebResourceLoadScheduler.cpp:64
&gt; +    return static_cast&lt;WebResourceLoadScheduler&amp;&gt;(*platformStrategies()-&gt;loaderStrategy());

Why is it ok to dereference this pointer?  I think this should be done differently.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1145641</commentid>
    <comment_count>11</comment_count>
    <who name="Antti Koivisto">koivisto</who>
    <bug_when>2015-12-02 11:28:01 -0800</bug_when>
    <thetext>I&apos;ll do further cleanups separately.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1145912</commentid>
    <comment_count>12</comment_count>
      <attachid>266525</attachid>
    <who name="Antti Koivisto">koivisto</who>
    <bug_when>2015-12-03 03:23:24 -0800</bug_when>
    <thetext>Created attachment 266525
patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1145913</commentid>
    <comment_count>13</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2015-12-03 03:24:40 -0800</bug_when>
    <thetext>Attachment 266525 did not pass style-queue:


ERROR: Source/WebKit/WebCoreSupport/WebResourceLoadScheduler.cpp:25:  Found header this file implements before WebCore config.h. Should be: config.h, primary header, blank line, and then alphabetically sorted.  [build/include_order] [4]
ERROR: Source/WebKit/CMakeLists.txt:6:  Alphabetical sorting problem. &quot;WebCoreSupport/WebResourceLoadScheduler.cpp&quot; should be before &quot;WebCoreSupport/WebViewGroup.cpp&quot;.  [list/order] [5]
Total errors found: 2 in 40 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>1145917</commentid>
    <comment_count>14</comment_count>
    <who name="Antti Koivisto">koivisto</who>
    <bug_when>2015-12-03 04:52:30 -0800</bug_when>
    <thetext>https://trac.webkit.org/r192995</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>266437</attachid>
            <date>2015-12-02 05:22:18 -0800</date>
            <delta_ts>2015-12-02 06:16:05 -0800</delta_ts>
            <desc>patch</desc>
            <filename>resourceloadscheduler-webkit.patch</filename>
            <type>text/plain</type>
            <size>124971</size>
            <attacher name="Antti Koivisto">koivisto</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDE5Mjg4MCkKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDYzIEBACisyMDE1LTEyLTAyICBBbnR0aSBL
b2l2aXN0byAgPGFudHRpQGFwcGxlLmNvbT4KKworICAgICAgICBNb3ZlIFJlc291cmNlTG9hZFNj
aGVkdWxlciB0byBXZWJLaXQxCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3df
YnVnLmNnaT9pZD0xNTE3NDMKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4K
KworICAgICAgICBJdCBpcyBubyBsb25nZXIgdXNlZCBieSBXZWJLaXQyLiBTaW1wbGlmeSB0aGUg
V2ViS2l0L1dlYkNvcmUgaW50ZXJmYWNlLgorCisgICAgICAgICogV2ViQ29yZS54Y29kZXByb2ov
cHJvamVjdC5wYnhwcm9qOgorICAgICAgICAqIGRvbS9Db250YWluZXJOb2RlLmNwcDoKKyAgICAg
ICAgKiBkb20vRG9jdW1lbnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6RG9jdW1lbnQ6OnN0eWxl
Rm9yRWxlbWVudElnbm9yaW5nUGVuZGluZ1N0eWxlc2hlZXRzKToKKyAgICAgICAgKiBkb20vRG9j
dW1lbnQuaDoKKyAgICAgICAgKiBsb2FkZXIvRG9jdW1lbnRMb2FkZXIuaDoKKyAgICAgICAgKiBs
b2FkZXIvTG9hZGVyU3RyYXRlZ3kuY3BwOgorICAgICAgICAoV2ViQ29yZTo6TG9hZGVyU3RyYXRl
Z3k6On5Mb2FkZXJTdHJhdGVneSk6CisgICAgICAgIChXZWJDb3JlOjpSZXNvdXJjZUxvYWRTdXNw
ZW5kZXI6OlJlc291cmNlTG9hZFN1c3BlbmRlcik6CisgICAgICAgIChXZWJDb3JlOjpSZXNvdXJj
ZUxvYWRTdXNwZW5kZXI6On5SZXNvdXJjZUxvYWRTdXNwZW5kZXIpOgorICAgICAgICAoV2ViQ29y
ZTo6TG9hZGVyU3RyYXRlZ3k6OnJlc291cmNlTG9hZFNjaGVkdWxlcik6IERlbGV0ZWQuCisgICAg
ICAgIChXZWJDb3JlOjpMb2FkZXJTdHJhdGVneTo6bG9hZFJlc291cmNlU3luY2hyb25vdXNseSk6
IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpMb2FkZXJTdHJhdGVneTo6Y3JlYXRlQmxvYlJl
Z2lzdHJ5KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkxvYWRlclN0cmF0ZWd5OjpjcmVh
dGVQaW5nSGFuZGxlKTogRGVsZXRlZC4KKyAgICAgICAgKiBsb2FkZXIvTG9hZGVyU3RyYXRlZ3ku
aDoKKworICAgICAgICAgICAgTG9hZGluZyBmdW5jdGlvbnMgaW1wbGVtZW50ZWQgb24gV2ViS2l0
IHNpZGUgbW92ZSB0byBwdXJlIHZpcnR1YWwgTG9hZGVyU3RyYXRlZ3kuCisKKyAgICAgICAgKiBs
b2FkZXIvUmVzb3VyY2VMb2FkU2NoZWR1bGVyLmNwcDogUmVtb3ZlZC4KKyAgICAgICAgKiBsb2Fk
ZXIvUmVzb3VyY2VMb2FkU2NoZWR1bGVyLmg6IFJlbW92ZWQuCisKKyAgICAgICAgICAgIFJlc291
cmNlTG9hZFNjaGVkdWxlciBtb3ZlcyB0byBXZWJLaXQxIGFzIFdlYlJlc291cmNlTG9hZFNjaGVk
dWxlci4KKworICAgICAgICAqIGxvYWRlci9SZXNvdXJjZUxvYWRlci5jcHA6CisgICAgICAgIChX
ZWJDb3JlOjpSZXNvdXJjZUxvYWRlcjo6ZmluaXNoTmV0d29ya0xvYWQpOgorICAgICAgICAoV2Vi
Q29yZTo6UmVzb3VyY2VMb2FkZXI6OnNldERlZmVyc0xvYWRpbmcpOgorICAgICAgICAoV2ViQ29y
ZTo6UmVzb3VyY2VMb2FkZXI6OmZyYW1lTG9hZGVyKToKKyAgICAgICAgKFdlYkNvcmU6OlJlc291
cmNlTG9hZGVyOjp3aWxsU3dpdGNoVG9TdWJzdGl0dXRlUmVzb3VyY2UpOgorICAgICAgICAoV2Vi
Q29yZTo6UmVzb3VyY2VMb2FkZXI6OndpbGxTZW5kUmVxdWVzdEludGVybmFsKToKKyAgICAgICAg
KiBsb2FkZXIvYXJjaGl2ZS9BcmNoaXZlUmVzb3VyY2VDb2xsZWN0aW9uLmg6CisgICAgICAgICog
bG9hZGVyL2NhY2hlL0NhY2hlZFJlc291cmNlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkNhY2hl
ZFJlc291cmNlOjpsb2FkKToKKyAgICAgICAgKiBsb2FkZXIvY2FjaGUvQ2FjaGVkUmVzb3VyY2VM
b2FkZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Q2FjaGVkUmVzb3VyY2VMb2FkZXI6OnBlcmZv
cm1Qb3N0TG9hZEFjdGlvbnMpOgorICAgICAgICAoV2ViQ29yZTo6Q2FjaGVkUmVzb3VyY2VMb2Fk
ZXI6OmluY3JlbWVudFJlcXVlc3RDb3VudCk6CisgICAgICAgICogcGxhdGZvcm0vUGxhdGZvcm1T
dHJhdGVnaWVzLmg6CisgICAgICAgIChXZWJDb3JlOjpQbGF0Zm9ybVN0cmF0ZWdpZXM6OnBsdWdp
blN0cmF0ZWd5KToKKyAgICAgICAgKFdlYkNvcmU6OlBsYXRmb3JtU3RyYXRlZ2llczo6YmxvYlJl
Z2lzdHJ5KToKKworICAgICAgICAgICAgTW92ZSBCbG9iUmVnaXN0cnkgZmFjdG9yeSBmdW5jdGlv
biBoZXJlIGZyb20gTG9hZGVyU3RyYXRlZ3kgYXMgdGhpcyBhbGxvd3MgbmV0d29yayBwcm9jZXNz
IHRvIGhhdmUgbnVsbCBsb2FkZXJTdHJhdGVneS4KKyAgICAgICAgICAgIChpdCBjb3VsZCBiZSBy
ZW5hbWVkIEJsb2JTdHJhdGVneSBmb3IgY29uc2lzdGVuY3kgbGF0ZXIpLgorCisgICAgICAgIChX
ZWJDb3JlOjpQbGF0Zm9ybVN0cmF0ZWdpZXM6OlBsYXRmb3JtU3RyYXRlZ2llcyk6CisgICAgICAg
ICogcGxhdGZvcm0vbmV0d29yay9CbG9iUmVnaXN0cnkuY3BwOgorICAgICAgICAoV2ViQ29yZTo6
YmxvYlJlZ2lzdHJ5KToKKyAgICAgICAgKFdlYkNvcmU6OkJsb2JSZWdpc3RyeTo6fkJsb2JSZWdp
c3RyeSk6CisgICAgICAgICogcGxhdGZvcm0vbmV0d29yay9SZXNvdXJjZVJlcXVlc3RCYXNlLmg6
CisgICAgICAgICogc3R5bGUvU3R5bGVSZXNvbHZlVHJlZS5jcHA6CisgICAgICAgIChXZWJDb3Jl
OjpTdHlsZTo6UG9zdFJlc29sdXRpb25DYWxsYmFja0Rpc2FibGVyOjpQb3N0UmVzb2x1dGlvbkNh
bGxiYWNrRGlzYWJsZXIpOgorICAgICAgICAoV2ViQ29yZTo6U3R5bGU6OlBvc3RSZXNvbHV0aW9u
Q2FsbGJhY2tEaXNhYmxlcjo6flBvc3RSZXNvbHV0aW9uQ2FsbGJhY2tEaXNhYmxlcik6CisKIDIw
MTUtMTItMDEgIENhcmxvcyBHYXJjaWEgQ2FtcG9zICA8Y2dhcmNpYUBpZ2FsaWEuY29tPgogCiAg
ICAgICAgIFtHVEtdIEFTU0VSVElPTiBGQUlMRUQ6IG1fdGFibGUgcnVubmluZyAvd2Via2l0Mi9C
YWNrRm9yd2FyZExpc3QvbmF2aWdhdGlvbiBpbiBEZWJ1ZyBidWlsZApJbmRleDogU291cmNlL1dl
YkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagkocmV2aXNpb24g
MTkyODgwKQorKysgU291cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhw
cm9qCSh3b3JraW5nIGNvcHkpCkBAIC02MTY5LDggKzYxNjksNiBAQAogCQlEMEJDNTQ0OTE0NDNB
QzRBMDBFMTA1REEgLyogQ2FjaGVkU3R5bGVTaGVldENsaWVudC5oIGluIEhlYWRlcnMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRDBCQzU0NDgxNDQzQUM0QTAwRTEwNURBIC8q
IENhY2hlZFN0eWxlU2hlZXRDbGllbnQuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQ
cml2YXRlLCApOyB9OyB9OwogCQlEMEJENEY1QzE0MDg4NTBGMDA2ODM5QjYgLyogRGljdGF0aW9u
Q29tbWFuZElPUy5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVS
ZWYgPSBEMEJENEY1QTE0MDg4NTBGMDA2ODM5QjYgLyogRGljdGF0aW9uQ29tbWFuZElPUy5jcHAg
Ki87IH07CiAJCUQwQkQ0RjVEMTQwODg1MEYwMDY4MzlCNiAvKiBEaWN0YXRpb25Db21tYW5kSU9T
LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBEMEJENEY1
QjE0MDg4NTBGMDA2ODM5QjYgLyogRGljdGF0aW9uQ29tbWFuZElPUy5oICovOyB9OwotCQlEMENF
NThGODEyNUU0Q0MyMDBGM0YxOTkgLyogUmVzb3VyY2VMb2FkU2NoZWR1bGVyLmNwcCBpbiBTb3Vy
Y2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEQwQ0U1OEY2MTI1RTRDQzIw
MEYzRjE5OSAvKiBSZXNvdXJjZUxvYWRTY2hlZHVsZXIuY3BwICovOyB9OwotCQlEMENFNThGOTEy
NUU0Q0MyMDBGM0YxOTkgLyogUmVzb3VyY2VMb2FkU2NoZWR1bGVyLmggaW4gSGVhZGVycyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBEMENFNThGNzEyNUU0Q0MyMDBGM0YxOTkg
LyogUmVzb3VyY2VMb2FkU2NoZWR1bGVyLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAo
UHJpdmF0ZSwgKTsgfTsgfTsKIAkJRDBFREE3NzQxNDNFMzAzQzAwMjhFMzgzIC8qIENhY2hlZFJh
d1Jlc291cmNlLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJl
ZiA9IEQwRURBNzcyMTQzRTMwM0MwMDI4RTM4MyAvKiBDYWNoZWRSYXdSZXNvdXJjZS5jcHAgKi87
IH07CiAJCUQwRURBNzc1MTQzRTMwM0MwMDI4RTM4MyAvKiBDYWNoZWRSYXdSZXNvdXJjZS5oIGlu
IEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRDBFREE3NzMxNDNF
MzAzQzAwMjhFMzgzIC8qIENhY2hlZFJhd1Jlc291cmNlLmggKi87IHNldHRpbmdzID0ge0FUVFJJ
QlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJRDBGRjJBNUQxMUY4QzQ1QTAwN0U3NEUwIC8q
IFBpbmdMb2FkZXIuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxl
UmVmID0gRDBGRjJBNUIxMUY4QzQ1QTAwN0U3NEUwIC8qIFBpbmdMb2FkZXIuY3BwICovOyB9OwpA
QCAtMTQwNjYsOCArMTQwNjQsNiBAQAogCQlEMEJDNTQ0ODE0NDNBQzRBMDBFMTA1REEgLyogQ2Fj
aGVkU3R5bGVTaGVldENsaWVudC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVF
bmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBD
YWNoZWRTdHlsZVNoZWV0Q2xpZW50Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUQw
QkQ0RjVBMTQwODg1MEYwMDY4MzlCNiAvKiBEaWN0YXRpb25Db21tYW5kSU9TLmNwcCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IERpY3RhdGlvbkNvbW1hbmRJT1MuY3BwOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlEMEJENEY1QjE0MDg4NTBGMDA2ODM5QjYgLyog
RGljdGF0aW9uQ29tbWFuZElPUy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVF
bmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBE
aWN0YXRpb25Db21tYW5kSU9TLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCUQwQ0U1
OEY2MTI1RTRDQzIwMEYzRjE5OSAvKiBSZXNvdXJjZUxvYWRTY2hlZHVsZXIuY3BwICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gUmVzb3VyY2VMb2FkU2NoZWR1bGVyLmNwcDsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJRDBDRTU4RjcxMjVFNENDMjAwRjNGMTk5IC8q
IFJlc291cmNlTG9hZFNjaGVkdWxlci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZp
bGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGgg
PSBSZXNvdXJjZUxvYWRTY2hlZHVsZXIuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJ
RDBFREE3NzIxNDNFMzAzQzAwMjhFMzgzIC8qIENhY2hlZFJhd1Jlc291cmNlLmNwcCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IENhY2hlZFJhd1Jlc291cmNlLmNwcDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJRDBFREE3NzMxNDNFMzAzQzAwMjhFMzgzIC8qIENh
Y2hlZFJhd1Jlc291cmNlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29k
aW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IENhY2hl
ZFJhd1Jlc291cmNlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUQwRkYyQTVCMTFG
OEM0NUEwMDdFNzRFMCAvKiBQaW5nTG9hZGVyLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3Bw
LmNwcDsgcGF0aCA9IFBpbmdMb2FkZXIuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpA
QCAtMjI0NTgsOCArMjI0NTQsNiBAQAogCQkJCTUxRUU3QjM3MUFBNTBCMDUwMEY5MkIyMSAvKiBS
ZXNvdXJjZUxvYWRJbmZvLmggKi8sCiAJCQkJOTczRTMyNTQxMDg4M0I3QzAwNUJDNDkzIC8qIFJl
c291cmNlTG9hZE5vdGlmaWVyLmNwcCAqLywKIAkJCQk5NzNFMzI1NTEwODgzQjdDMDA1QkM0OTMg
LyogUmVzb3VyY2VMb2FkTm90aWZpZXIuaCAqLywKLQkJCQlEMENFNThGNjEyNUU0Q0MyMDBGM0Yx
OTkgLyogUmVzb3VyY2VMb2FkU2NoZWR1bGVyLmNwcCAqLywKLQkJCQlEMENFNThGNzEyNUU0Q0My
MDBGM0YxOTkgLyogUmVzb3VyY2VMb2FkU2NoZWR1bGVyLmggKi8sCiAJCQkJNTEzMjdENUYxMUEz
M0EyQjAwNEY5RDY1IC8qIFNpbmtEb2N1bWVudC5jcHAgKi8sCiAJCQkJNTEzMjdENUUxMUEzM0Ey
QjAwNEY5RDY1IC8qIFNpbmtEb2N1bWVudC5oICovLAogCQkJCUQwMDBFRDI1MTFDMUI5Q0QwMEM0
NzcyNiAvKiBTdWJmcmFtZUxvYWRlci5jcHAgKi8sCkBAIC0yNzI4NCw3ICsyNzI3OCw2IEBACiAJ
CQkJNTFFRTdCMzgxQUE1MEIwNTAwRjkyQjIxIC8qIFJlc291cmNlTG9hZEluZm8uaCBpbiBIZWFk
ZXJzICovLAogCQkJCTk3M0UzMjU3MTA4ODNCN0MwMDVCQzQ5MyAvKiBSZXNvdXJjZUxvYWROb3Rp
Zmllci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJRTQyOTVGQTQxMkIwNjE0RTAwRDFBQ0UwIC8qIFJl
c291cmNlTG9hZFByaW9yaXR5LmggaW4gSGVhZGVycyAqLywKLQkJCQlEMENFNThGOTEyNUU0Q0My
MDBGM0YxOTkgLyogUmVzb3VyY2VMb2FkU2NoZWR1bGVyLmggaW4gSGVhZGVycyAqLywKIAkJCQk4
QTgxQkY4NTExRENGRDkwMDBEQTJCOTggLyogUmVzb3VyY2VMb2FkVGltaW5nLmggaW4gSGVhZGVy
cyAqLywKIAkJCQk3RUU2ODQ2RDEyRDI2RTM4MDBFNzk0MTUgLyogUmVzb3VyY2VSZXF1ZXN0Lmgg
aW4gSGVhZGVycyAqLywKIAkJCQk1MTRDNzY3RDBDRTkyM0ExMDA3RUYzQ0QgLyogUmVzb3VyY2VS
ZXF1ZXN0QmFzZS5oIGluIEhlYWRlcnMgKi8sCkBAIC0zMDg2MSw3ICszMDg1NCw2IEBACiAJCQkJ
NTFBQTNGNkYwQkQ1QUE5RTAwODkyOTcxIC8qIFJlc291cmNlTG9hZGVyTWFjLm1tIGluIFNvdXJj
ZXMgKi8sCiAJCQkJNTFFRTdCM0ExQUE1MTIzMTAwRjkyQjIxIC8qIFJlc291cmNlTG9hZEluZm8u
Y3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJOTczRTMyNTYxMDg4M0I3QzAwNUJDNDkzIC8qIFJlc291
cmNlTG9hZE5vdGlmaWVyLmNwcCBpbiBTb3VyY2VzICovLAotCQkJCUQwQ0U1OEY4MTI1RTRDQzIw
MEYzRjE5OSAvKiBSZXNvdXJjZUxvYWRTY2hlZHVsZXIuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJ
NTE0Qzc2N0MwQ0U5MjNBMTAwN0VGM0NEIC8qIFJlc291cmNlUmVxdWVzdEJhc2UuY3BwIGluIFNv
dXJjZXMgKi8sCiAJCQkJN0VFNjg0NkUxMkQyNkUzODAwRTc5NDE1IC8qIFJlc291cmNlUmVxdWVz
dENGTmV0LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTdFN0RFMUZEMTk1Q0VGMjYwMDM1MzYzQiAv
KiBSZXNvdXJjZVJlcXVlc3RDb2NvYS5tbSBpbiBTb3VyY2VzICovLApJbmRleDogU291cmNlL1dl
YkNvcmUvZG9tL0NvbnRhaW5lck5vZGUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3Jl
L2RvbS9Db250YWluZXJOb2RlLmNwcAkocmV2aXNpb24gMTkyODgwKQorKysgU291cmNlL1dlYkNv
cmUvZG9tL0NvbnRhaW5lck5vZGUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00OSw3ICs0OSw2IEBA
CiAjaW5jbHVkZSAiUmVuZGVyQm94LmgiCiAjaW5jbHVkZSAiUmVuZGVyVGhlbWUuaCIKICNpbmNs
dWRlICJSZW5kZXJXaWRnZXQuaCIKLSNpbmNsdWRlICJSZXNvdXJjZUxvYWRTY2hlZHVsZXIuaCIK
ICNpbmNsdWRlICJSb290SW5saW5lQm94LmgiCiAjaW5jbHVkZSAiU1ZHRG9jdW1lbnRFeHRlbnNp
b25zLmgiCiAjaW5jbHVkZSAiU1ZHRWxlbWVudC5oIgpJbmRleDogU291cmNlL1dlYkNvcmUvZG9t
L0RvY3VtZW50LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9kb20vRG9jdW1lbnQu
Y3BwCShyZXZpc2lvbiAxOTI4ODApCisrKyBTb3VyY2UvV2ViQ29yZS9kb20vRG9jdW1lbnQuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC0xMjYsNyArMTI2LDYgQEAKICNpbmNsdWRlICJSZW5kZXJMYXll
ckNvbXBvc2l0b3IuaCIKICNpbmNsdWRlICJSZW5kZXJWaWV3LmgiCiAjaW5jbHVkZSAiUmVuZGVy
V2lkZ2V0LmgiCi0jaW5jbHVkZSAiUmVzb3VyY2VMb2FkU2NoZWR1bGVyLmgiCiAjaW5jbHVkZSAi
UnVudGltZUVuYWJsZWRGZWF0dXJlcy5oIgogI2luY2x1ZGUgIlNWR0RvY3VtZW50RXh0ZW5zaW9u
cy5oIgogI2luY2x1ZGUgIlNWR0VsZW1lbnQuaCIKQEAgLTE5NTksNyArMTk1OCw3IEBAIFJlZjxS
ZW5kZXJTdHlsZT4gRG9jdW1lbnQ6OnN0eWxlRm9yRWxlbWUKICAgICBBU1NFUlQoJmVsZW1lbnQu
ZG9jdW1lbnQoKSA9PSB0aGlzKTsKIAogICAgIC8vIE9uIGlPUyByZXF1ZXN0IGRlbGVnYXRlcyBj
YWxsZWQgZHVyaW5nIHN0eWxlRm9yRWxlbWVudCBtYXkgcmVzdWx0IGluIHJlLWVudGVyaW5nIFdl
YktpdCBhbmQga2lsbGluZyB0aGUgc3R5bGUgcmVzb2x2ZXIuCi0gICAgUmVzb3VyY2VMb2FkU2No
ZWR1bGVyOjpTdXNwZW5kZXIgc3VzcGVuZGVyKCpwbGF0Zm9ybVN0cmF0ZWdpZXMoKS0+bG9hZGVy
U3RyYXRlZ3koKS0+cmVzb3VyY2VMb2FkU2NoZWR1bGVyKCkpOworICAgIFJlc291cmNlTG9hZFN1
c3BlbmRlciBzdXNwZW5kZXI7CiAKICAgICBUZW1wb3JhcnlDaGFuZ2U8Ym9vbD4gY2hhbmdlKG1f
aWdub3JlUGVuZGluZ1N0eWxlc2hlZXRzLCB0cnVlKTsKICAgICByZXR1cm4gZWxlbWVudC5yZXNv
bHZlU3R5bGUocGFyZW50U3R5bGUpOwpJbmRleDogU291cmNlL1dlYkNvcmUvZG9tL0RvY3VtZW50
LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvZG9tL0RvY3VtZW50LmgJKHJldmlzaW9u
IDE5Mjg4MCkKKysrIFNvdXJjZS9XZWJDb3JlL2RvbS9Eb2N1bWVudC5oCSh3b3JraW5nIGNvcHkp
CkBAIC01MTEsNyArNTExLDcgQEAgcHVibGljOgogCiAgICAgdm9pZCBub3RpZnlSZW1vdmVQZW5k
aW5nU2hlZXRJZk5lZWRlZCgpOwogCi0gICAgYm9vbCBoYXZlU3R5bGVzaGVldHNMb2FkZWQoKSBj
b25zdDsKKyAgICBXRUJDT1JFX0VYUE9SVCBib29sIGhhdmVTdHlsZXNoZWV0c0xvYWRlZCgpIGNv
bnN0OwogCiAgICAgLy8gVGhpcyBpcyBhIERPTSBmdW5jdGlvbi4KICAgICBTdHlsZVNoZWV0TGlz
dCYgc3R5bGVTaGVldHMoKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2xvYWRlci9Eb2N1bWVudExv
YWRlci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2xvYWRlci9Eb2N1bWVudExvYWRl
ci5oCShyZXZpc2lvbiAxOTI4ODApCisrKyBTb3VyY2UvV2ViQ29yZS9sb2FkZXIvRG9jdW1lbnRM
b2FkZXIuaAkod29ya2luZyBjb3B5KQpAQCAtMTYxLDcgKzE2MSw3IEBAIG5hbWVzcGFjZSBXZWJD
b3JlIHsKICAgICAgICAgdm9pZCBzY2hlZHVsZVN1YnN0aXR1dGVSZXNvdXJjZUxvYWQoUmVzb3Vy
Y2VMb2FkZXImLCBTdWJzdGl0dXRlUmVzb3VyY2UmKTsKIAogICAgICAgICAvLyBSZXR1cm4gdGhl
IEFyY2hpdmVSZXNvdXJjZSBmb3IgdGhlIFVSTCBvbmx5IHdoZW4gbG9hZGluZyBhbiBBcmNoaXZl
Ci0gICAgICAgIEFyY2hpdmVSZXNvdXJjZSogYXJjaGl2ZVJlc291cmNlRm9yVVJMKGNvbnN0IFVS
TCYpIGNvbnN0OworICAgICAgICBXRUJDT1JFX0VYUE9SVCBBcmNoaXZlUmVzb3VyY2UqIGFyY2hp
dmVSZXNvdXJjZUZvclVSTChjb25zdCBVUkwmKSBjb25zdDsKIAogICAgICAgICBXRUJDT1JFX0VY
UE9SVCBQYXNzUmVmUHRyPEFyY2hpdmVSZXNvdXJjZT4gbWFpblJlc291cmNlKCkgY29uc3Q7CiAK
SW5kZXg6IFNvdXJjZS9XZWJDb3JlL2xvYWRlci9Mb2FkZXJTdHJhdGVneS5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL1dlYkNvcmUvbG9hZGVyL0xvYWRlclN0cmF0ZWd5LmNwcAkocmV2aXNpb24g
MTkyODgwKQorKysgU291cmNlL1dlYkNvcmUvbG9hZGVyL0xvYWRlclN0cmF0ZWd5LmNwcAkod29y
a2luZyBjb3B5KQpAQCAtMjYsMzIgKzI2LDI0IEBACiAjaW5jbHVkZSAiY29uZmlnLmgiCiAjaW5j
bHVkZSAiTG9hZGVyU3RyYXRlZ3kuaCIKIAotI2luY2x1ZGUgIkJsb2JSZWdpc3RyeUltcGwuaCIK
LSNpbmNsdWRlICJQaW5nSGFuZGxlLmgiCi0jaW5jbHVkZSAiUmVzb3VyY2VIYW5kbGUuaCIKLSNp
bmNsdWRlICJSZXNvdXJjZUxvYWRTY2hlZHVsZXIuaCIKKyNpbmNsdWRlICJQbGF0Zm9ybVN0cmF0
ZWdpZXMuaCIKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi1SZXNvdXJjZUxvYWRTY2hlZHVsZXIq
IExvYWRlclN0cmF0ZWd5OjpyZXNvdXJjZUxvYWRTY2hlZHVsZXIoKQorTG9hZGVyU3RyYXRlZ3k6
On5Mb2FkZXJTdHJhdGVneSgpCiB7Ci0gICAgcmV0dXJuIFdlYkNvcmU6OnJlc291cmNlTG9hZFNj
aGVkdWxlcigpOwogfQogCi12b2lkIExvYWRlclN0cmF0ZWd5Ojpsb2FkUmVzb3VyY2VTeW5jaHJv
bm91c2x5KE5ldHdvcmtpbmdDb250ZXh0KiBjb250ZXh0LCB1bnNpZ25lZCBsb25nLCBjb25zdCBS
ZXNvdXJjZVJlcXVlc3QmIHJlcXVlc3QsIFN0b3JlZENyZWRlbnRpYWxzIHN0b3JlZENyZWRlbnRp
YWxzLCBDbGllbnRDcmVkZW50aWFsUG9saWN5LCBSZXNvdXJjZUVycm9yJiBlcnJvciwgUmVzb3Vy
Y2VSZXNwb25zZSYgcmVzcG9uc2UsIFZlY3RvcjxjaGFyPiYgZGF0YSkKK1Jlc291cmNlTG9hZFN1
c3BlbmRlcjo6UmVzb3VyY2VMb2FkU3VzcGVuZGVyKCkKIHsKLSAgICBSZXNvdXJjZUhhbmRsZTo6
bG9hZFJlc291cmNlU3luY2hyb25vdXNseShjb250ZXh0LCByZXF1ZXN0LCBzdG9yZWRDcmVkZW50
aWFscywgZXJyb3IsIHJlc3BvbnNlLCBkYXRhKTsKKyAgICBwbGF0Zm9ybVN0cmF0ZWdpZXMoKS0+
bG9hZGVyU3RyYXRlZ3koKS0+c3VzcGVuZFBlbmRpbmdSZXF1ZXN0cygpOwogfQogCi1CbG9iUmVn
aXN0cnkqIExvYWRlclN0cmF0ZWd5OjpjcmVhdGVCbG9iUmVnaXN0cnkoKQorUmVzb3VyY2VMb2Fk
U3VzcGVuZGVyOjp+UmVzb3VyY2VMb2FkU3VzcGVuZGVyKCkKIHsKLSAgICByZXR1cm4gbmV3IEJs
b2JSZWdpc3RyeUltcGw7Ci19Ci0KLXZvaWQgTG9hZGVyU3RyYXRlZ3k6OmNyZWF0ZVBpbmdIYW5k
bGUoTmV0d29ya2luZ0NvbnRleHQqIG5ldHdvcmtpbmdDb250ZXh0LCBSZXNvdXJjZVJlcXVlc3Qm
IHJlcXVlc3QsIGJvb2wgc2hvdWxkVXNlQ3JlZGVudGlhbFN0b3JhZ2UpCi17Ci0gICAgLy8gUGlu
Z0hhbmRsZSBtYW5hZ2VzIGl0cyBvd24gbGlmZXRpbWUsIGRlbGV0aW5nIGl0c2VsZiB3aGVuIGl0
cyBwdXJwb3NlIGhhcyBiZWVuIGZ1bGZpbGxlZC4KLSAgICBuZXcgUGluZ0hhbmRsZShuZXR3b3Jr
aW5nQ29udGV4dCwgcmVxdWVzdCwgc2hvdWxkVXNlQ3JlZGVudGlhbFN0b3JhZ2UsIFBpbmdIYW5k
bGU6OlVzZXNBc3luY0NhbGxiYWNrczo6Tm8pOworICAgIHBsYXRmb3JtU3RyYXRlZ2llcygpLT5s
b2FkZXJTdHJhdGVneSgpLT5yZXN1bWVQZW5kaW5nUmVxdWVzdHMoKTsKIH0KIAogfSAvLyBuYW1l
c3BhY2UgV2ViQ29yZQorCisKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2xvYWRlci9Mb2FkZXJTdHJh
dGVneS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2xvYWRlci9Mb2FkZXJTdHJhdGVn
eS5oCShyZXZpc2lvbiAxOTI4ODApCisrKyBTb3VyY2UvV2ViQ29yZS9sb2FkZXIvTG9hZGVyU3Ry
YXRlZ3kuaAkod29ya2luZyBjb3B5KQpAQCAtMjcsMzIgKzI3LDQ4IEBACiAjZGVmaW5lIExvYWRl
clN0cmF0ZWd5X2gKIAogI2luY2x1ZGUgIlJlc291cmNlSGFuZGxlVHlwZXMuaCIKKyNpbmNsdWRl
ICJSZXNvdXJjZUxvYWRQcmlvcml0eS5oIgorI2luY2x1ZGUgIlJlc291cmNlTG9hZGVyT3B0aW9u
cy5oIgogI2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4KIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCiBj
bGFzcyBCbG9iUmVnaXN0cnk7CitjbGFzcyBDYWNoZWRSZXNvdXJjZTsKIGNsYXNzIEZyYW1lOwor
Y2xhc3MgTmV0c2NhcGVQbHVnSW5TdHJlYW1Mb2FkZXI7CitjbGFzcyBOZXRzY2FwZVBsdWdJblN0
cmVhbUxvYWRlckNsaWVudDsKIGNsYXNzIE5ldHdvcmtpbmdDb250ZXh0OwogY2xhc3MgUmVzb3Vy
Y2VFcnJvcjsKLWNsYXNzIFJlc291cmNlTG9hZFNjaGVkdWxlcjsKK2NsYXNzIFJlc291cmNlTG9h
ZGVyOwogY2xhc3MgUmVzb3VyY2VSZXF1ZXN0OwogY2xhc3MgUmVzb3VyY2VSZXNwb25zZTsKK2Ns
YXNzIFN1YnJlc291cmNlTG9hZGVyOworY2xhc3MgVVJMOwogCiBjbGFzcyBXRUJDT1JFX0VYUE9S
VCBMb2FkZXJTdHJhdGVneSB7CiBwdWJsaWM6Ci0gICAgdmlydHVhbCBSZXNvdXJjZUxvYWRTY2hl
ZHVsZXIqIHJlc291cmNlTG9hZFNjaGVkdWxlcigpOworICAgIHZpcnR1YWwgUmVmUHRyPFN1YnJl
c291cmNlTG9hZGVyPiBsb2FkUmVzb3VyY2UoRnJhbWUqLCBDYWNoZWRSZXNvdXJjZSosIGNvbnN0
IFJlc291cmNlUmVxdWVzdCYsIGNvbnN0IFJlc291cmNlTG9hZGVyT3B0aW9ucyYpID0gMDsKKyAg
ICB2aXJ0dWFsIHZvaWQgbG9hZFJlc291cmNlU3luY2hyb25vdXNseShOZXR3b3JraW5nQ29udGV4
dCosIHVuc2lnbmVkIGxvbmcgaWRlbnRpZmllciwgY29uc3QgUmVzb3VyY2VSZXF1ZXN0JiwgU3Rv
cmVkQ3JlZGVudGlhbHMsIENsaWVudENyZWRlbnRpYWxQb2xpY3ksIFJlc291cmNlRXJyb3ImLCBS
ZXNvdXJjZVJlc3BvbnNlJiwgVmVjdG9yPGNoYXI+JiBkYXRhKSA9IDA7CiAKLSAgICB2aXJ0dWFs
IHZvaWQgbG9hZFJlc291cmNlU3luY2hyb25vdXNseShOZXR3b3JraW5nQ29udGV4dCosIHVuc2ln
bmVkIGxvbmcgaWRlbnRpZmllciwgY29uc3QgUmVzb3VyY2VSZXF1ZXN0JiwgU3RvcmVkQ3JlZGVu
dGlhbHMsIENsaWVudENyZWRlbnRpYWxQb2xpY3ksIFJlc291cmNlRXJyb3ImLCBSZXNvdXJjZVJl
c3BvbnNlJiwgVmVjdG9yPGNoYXI+JiBkYXRhKTsKKyAgICB2aXJ0dWFsIHZvaWQgcmVtb3ZlKFJl
c291cmNlTG9hZGVyKikgPSAwOworICAgIHZpcnR1YWwgdm9pZCBzZXREZWZlcnNMb2FkaW5nKFJl
c291cmNlTG9hZGVyKiwgYm9vbCkgPSAwOworICAgIHZpcnR1YWwgdm9pZCBjcm9zc09yaWdpblJl
ZGlyZWN0UmVjZWl2ZWQoUmVzb3VyY2VMb2FkZXIqLCBjb25zdCBVUkwmIHJlZGlyZWN0VVJMKSA9
IDA7CisKKyAgICB2aXJ0dWFsIHZvaWQgc2VydmVQZW5kaW5nUmVxdWVzdHMoUmVzb3VyY2VMb2Fk
UHJpb3JpdHkgbWluaW11bVByaW9yaXR5ID0gUmVzb3VyY2VMb2FkUHJpb3JpdHk6OlZlcnlMb3cp
ID0gMDsKKyAgICB2aXJ0dWFsIHZvaWQgc3VzcGVuZFBlbmRpbmdSZXF1ZXN0cygpID0gMDsKKyAg
ICB2aXJ0dWFsIHZvaWQgcmVzdW1lUGVuZGluZ1JlcXVlc3RzKCkgPSAwOwogCi0gICAgdmlydHVh
bCBCbG9iUmVnaXN0cnkqIGNyZWF0ZUJsb2JSZWdpc3RyeSgpOwotCi0gICAgdmlydHVhbCB2b2lk
IGNyZWF0ZVBpbmdIYW5kbGUoTmV0d29ya2luZ0NvbnRleHQqLCBSZXNvdXJjZVJlcXVlc3QmLCBi
b29sIHNob3VsZFVzZUNyZWRlbnRpYWxTdG9yYWdlKTsKKyAgICB2aXJ0dWFsIHZvaWQgY3JlYXRl
UGluZ0hhbmRsZShOZXR3b3JraW5nQ29udGV4dCosIFJlc291cmNlUmVxdWVzdCYsIGJvb2wgc2hv
dWxkVXNlQ3JlZGVudGlhbFN0b3JhZ2UpID0gMDsKIAogcHJvdGVjdGVkOgotICAgIHZpcnR1YWwg
fkxvYWRlclN0cmF0ZWd5KCkKLSAgICB7Ci0gICAgfQorICAgIHZpcnR1YWwgfkxvYWRlclN0cmF0
ZWd5KCk7Cit9OworCitjbGFzcyBSZXNvdXJjZUxvYWRTdXNwZW5kZXIgeworcHVibGljOgorICAg
IFJlc291cmNlTG9hZFN1c3BlbmRlcigpOworICAgIH5SZXNvdXJjZUxvYWRTdXNwZW5kZXIoKTsK
IH07CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2xvYWRl
ci9SZXNvdXJjZUxvYWRTY2hlZHVsZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3Jl
L2xvYWRlci9SZXNvdXJjZUxvYWRTY2hlZHVsZXIuY3BwCShyZXZpc2lvbiAxOTI4ODApCisrKyBT
b3VyY2UvV2ViQ29yZS9sb2FkZXIvUmVzb3VyY2VMb2FkU2NoZWR1bGVyLmNwcAkod29ya2luZyBj
b3B5KQpAQCAtMSwzOTIgKzAsMCBAQAotLyoKLSAgICBDb3B5cmlnaHQgKEMpIDE5OTggTGFycyBL
bm9sbCAoa25vbGxAbXBpLWhkLm1wZy5kZSkKLSAgICBDb3B5cmlnaHQgKEMpIDIwMDEgRGlyayBN
dWVsbGVyIChtdWVsbGVyQGtkZS5vcmcpCi0gICAgQ29weXJpZ2h0IChDKSAyMDAyIFdhbGRvIEJh
c3RpYW4gKGJhc3RpYW5Aa2RlLm9yZykKLSAgICBDb3B5cmlnaHQgKEMpIDIwMDYgU2FtdWVsIFdl
aW5pZyAoc2FtLndlaW5pZ0BnbWFpbC5jb20pCi0gICAgQ29weXJpZ2h0IChDKSAyMDA0LCAyMDA1
LCAyMDA2LCAyMDA3LCAyMDA4IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAgICBD
b3B5cmlnaHQgKEMpIDIwMTAgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLQotICAg
IFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBh
bmQvb3IKLSAgICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBH
ZW5lcmFsIFB1YmxpYwotICAgIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3
YXJlIEZvdW5kYXRpb247IGVpdGhlcgotICAgIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3Ig
KGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLQotICAgIFRoaXMgbGlicmFyeSBp
cyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICAgIGJ1
dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5
IG9mCi0gICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQ
T1NFLiAgU2VlIHRoZSBHTlUKLSAgICBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9y
IG1vcmUgZGV0YWlscy4KLQotICAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2Yg
dGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKLSAgICBhbG9uZyB3aXRoIHRo
aXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bwot
ICAgIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVl
dCwgRmlmdGggRmxvb3IsCi0gICAgQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCi0gKi8KLQot
I2luY2x1ZGUgImNvbmZpZy5oIgotI2luY2x1ZGUgIlJlc291cmNlTG9hZFNjaGVkdWxlci5oIgot
Ci0jaW5jbHVkZSAiRG9jdW1lbnQuaCIKLSNpbmNsdWRlICJEb2N1bWVudExvYWRlci5oIgotI2lu
Y2x1ZGUgIkZyYW1lLmgiCi0jaW5jbHVkZSAiRnJhbWVMb2FkZXIuaCIKLSNpbmNsdWRlICJMb2Fk
ZXJTdHJhdGVneS5oIgotI2luY2x1ZGUgIkxvZ2dpbmcuaCIKLSNpbmNsdWRlICJOZXRzY2FwZVBs
dWdJblN0cmVhbUxvYWRlci5oIgotI2luY2x1ZGUgIlBsYXRmb3JtU3RyYXRlZ2llcy5oIgotI2lu
Y2x1ZGUgIlJlc291cmNlTG9hZGVyLmgiCi0jaW5jbHVkZSAiUmVzb3VyY2VSZXF1ZXN0LmgiCi0j
aW5jbHVkZSAiU3VicmVzb3VyY2VMb2FkZXIuaCIKLSNpbmNsdWRlICJVUkwuaCIKLSNpbmNsdWRl
IDx3dGYvTWFpblRocmVhZC5oPgotI2luY2x1ZGUgPHd0Zi9UZW1wb3JhcnlDaGFuZ2UuaD4KLSNp
bmNsdWRlIDx3dGYvdGV4dC9DU3RyaW5nLmg+Ci0KLSNpZiBQTEFURk9STShJT1MpCi0jaW5jbHVk
ZSA8UnVudGltZUFwcGxpY2F0aW9uQ2hlY2tzSU9TLmg+Ci0jZW5kaWYKLQotI2lmIFVTRShRVUlD
S19MT09LKQotI2luY2x1ZGUgIlF1aWNrTG9vay5oIgotI2VuZGlmCi0KLW5hbWVzcGFjZSBXZWJD
b3JlIHsKLQotLy8gTWF0Y2ggdGhlIHBhcmFsbGVsIGNvbm5lY3Rpb24gY291bnQgdXNlZCBieSB0
aGUgbmV0d29ya2luZyBsYXllci4KLXN0YXRpYyB1bnNpZ25lZCBtYXhSZXF1ZXN0c0luRmxpZ2h0
UGVySG9zdDsKLSNpZiAhUExBVEZPUk0oSU9TKQotc3RhdGljIGNvbnN0IHVuc2lnbmVkIG1heFJl
cXVlc3RzSW5GbGlnaHRGb3JOb25IVFRQUHJvdG9jb2xzID0gMjA7Ci0jZWxzZQotLy8gTGltaXRp
bmcgdGhpcyBzZWVtcyB0byByZWdyZXNzIHBlcmZvcm1hbmNlIGluIHNvbWUgbG9jYWwgY2FzZXMg
c28gbGV0J3MganVzdCBtYWtlIGl0IGxhcmdlLgotc3RhdGljIGNvbnN0IHVuc2lnbmVkIG1heFJl
cXVlc3RzSW5GbGlnaHRGb3JOb25IVFRQUHJvdG9jb2xzID0gMTAwMDA7Ci0jZW5kaWYKLQotUmVz
b3VyY2VMb2FkU2NoZWR1bGVyOjpIb3N0SW5mb3JtYXRpb24qIFJlc291cmNlTG9hZFNjaGVkdWxl
cjo6aG9zdEZvclVSTChjb25zdCBVUkwmIHVybCwgQ3JlYXRlSG9zdFBvbGljeSBjcmVhdGVIb3N0
UG9saWN5KQotewotICAgIGlmICghdXJsLnByb3RvY29sSXNJbkhUVFBGYW1pbHkoKSkKLSAgICAg
ICAgcmV0dXJuIG1fbm9uSFRUUFByb3RvY29sSG9zdDsKLQotICAgIG1faG9zdHMuY2hlY2tDb25z
aXN0ZW5jeSgpOwotICAgIFN0cmluZyBob3N0TmFtZSA9IHVybC5ob3N0KCk7Ci0gICAgSG9zdElu
Zm9ybWF0aW9uKiBob3N0ID0gbV9ob3N0cy5nZXQoaG9zdE5hbWUpOwotICAgIGlmICghaG9zdCAm
JiBjcmVhdGVIb3N0UG9saWN5ID09IENyZWF0ZUlmTm90Rm91bmQpIHsKLSAgICAgICAgaG9zdCA9
IG5ldyBIb3N0SW5mb3JtYXRpb24oaG9zdE5hbWUsIG1heFJlcXVlc3RzSW5GbGlnaHRQZXJIb3N0
KTsKLSAgICAgICAgbV9ob3N0cy5hZGQoaG9zdE5hbWUsIGhvc3QpOwotICAgIH0KLSAgICByZXR1
cm4gaG9zdDsKLX0KLQotUmVzb3VyY2VMb2FkU2NoZWR1bGVyKiByZXNvdXJjZUxvYWRTY2hlZHVs
ZXIoKQotewotICAgIEFTU0VSVChpc01haW5UaHJlYWQoKSk7Ci0gICAgc3RhdGljIFJlc291cmNl
TG9hZFNjaGVkdWxlciogZ2xvYmFsU2NoZWR1bGVyID0gbnVsbHB0cjsKLSAgICAKLSAgICBpZiAo
IWdsb2JhbFNjaGVkdWxlcikgewotICAgICAgICBzdGF0aWMgYm9vbCBpc0NhbGxpbmdPdXRUb1N0
cmF0ZWd5ID0gZmFsc2U7Ci0gICAgICAgIAotICAgICAgICAvLyBJZiB3ZSdyZSByZS1lbnRlcmlu
ZyByZXNvdXJjZUxvYWRTY2hlZHVsZXIoKSB3aGlsZSBjYWxsaW5nIG91dCB0byB0aGUgTG9hZGVy
U3RyYXRlZ3ksCi0gICAgICAgIC8vIHRoZW4gdGhlIExvYWRlclN0cmF0ZWd5IGlzIHRyeWluZyB0
byB1c2UgdGhlIGRlZmF1bHQgcmVzb3VyY2VMb2FkU2NoZWR1bGVyLgotICAgICAgICAvLyBTbyB3
ZSdsbCBjcmVhdGUgaXQgaGVyZSBhbmQgc3RhcnQgdXNpbmcgaXQuCi0gICAgICAgIGlmIChpc0Nh
bGxpbmdPdXRUb1N0cmF0ZWd5KSB7Ci0gICAgICAgICAgICBnbG9iYWxTY2hlZHVsZXIgPSBuZXcg
UmVzb3VyY2VMb2FkU2NoZWR1bGVyOwotICAgICAgICAgICAgcmV0dXJuIGdsb2JhbFNjaGVkdWxl
cjsKLSAgICAgICAgfQotICAgICAgICAKLSAgICAgICAgVGVtcG9yYXJ5Q2hhbmdlPGJvb2w+IHJl
Y3Vyc2lvbkd1YXJkKGlzQ2FsbGluZ091dFRvU3RyYXRlZ3ksIHRydWUpOwotICAgICAgICBnbG9i
YWxTY2hlZHVsZXIgPSBwbGF0Zm9ybVN0cmF0ZWdpZXMoKS0+bG9hZGVyU3RyYXRlZ3koKS0+cmVz
b3VyY2VMb2FkU2NoZWR1bGVyKCk7Ci0gICAgfQotCi0gICAgcmV0dXJuIGdsb2JhbFNjaGVkdWxl
cjsKLX0KLQotUmVzb3VyY2VMb2FkU2NoZWR1bGVyOjpSZXNvdXJjZUxvYWRTY2hlZHVsZXIoKQot
ICAgIDogbV9ub25IVFRQUHJvdG9jb2xIb3N0KG5ldyBIb3N0SW5mb3JtYXRpb24oU3RyaW5nKCks
IG1heFJlcXVlc3RzSW5GbGlnaHRGb3JOb25IVFRQUHJvdG9jb2xzKSkKLSAgICAsIG1fcmVxdWVz
dFRpbWVyKCp0aGlzLCAmUmVzb3VyY2VMb2FkU2NoZWR1bGVyOjpyZXF1ZXN0VGltZXJGaXJlZCkK
LSAgICAsIG1fc3VzcGVuZFBlbmRpbmdSZXF1ZXN0c0NvdW50KDApCi0gICAgLCBtX2lzU2VyaWFs
TG9hZGluZ0VuYWJsZWQoZmFsc2UpCi17Ci0gICAgbWF4UmVxdWVzdHNJbkZsaWdodFBlckhvc3Qg
PSBpbml0aWFsaXplTWF4aW11bUhUVFBDb25uZWN0aW9uQ291bnRQZXJIb3N0KCk7Ci19Ci0KLVJl
c291cmNlTG9hZFNjaGVkdWxlcjo6flJlc291cmNlTG9hZFNjaGVkdWxlcigpCi17Ci19Ci0KLVJl
ZlB0cjxTdWJyZXNvdXJjZUxvYWRlcj4gUmVzb3VyY2VMb2FkU2NoZWR1bGVyOjpzY2hlZHVsZVN1
YnJlc291cmNlTG9hZChGcmFtZSogZnJhbWUsIENhY2hlZFJlc291cmNlKiByZXNvdXJjZSwgY29u
c3QgUmVzb3VyY2VSZXF1ZXN0JiByZXF1ZXN0LCBjb25zdCBSZXNvdXJjZUxvYWRlck9wdGlvbnMm
IG9wdGlvbnMpCi17Ci0gICAgUmVmUHRyPFN1YnJlc291cmNlTG9hZGVyPiBsb2FkZXIgPSBTdWJy
ZXNvdXJjZUxvYWRlcjo6Y3JlYXRlKGZyYW1lLCByZXNvdXJjZSwgcmVxdWVzdCwgb3B0aW9ucyk7
Ci0gICAgaWYgKGxvYWRlcikKLSAgICAgICAgc2NoZWR1bGVMb2FkKGxvYWRlci5nZXQoKSk7Ci0j
aWYgUExBVEZPUk0oSU9TKQotICAgIC8vIFNpbmNlIHdlIGRlZmVyIGxvYWRlciBpbml0aWFsaXph
dGlvbiB1bnRpbCBzY2hlZHVsaW5nIG9uIGlPUywgdGhlIGZyYW1lCi0gICAgLy8gbG9hZCBkZWxl
Z2F0ZSB0aGF0IHdvdWxkIGJlIGNhbGxlZCBpbiBTdWJyZXNvdXJjZUxvYWRlcjo6Y3JlYXRlKCkg
b24KLSAgICAvLyBvdGhlciBwb3J0cyBtaWdodCBiZSBjYWxsZWQgaW4gc2NoZWR1bGVMb2FkKCkg
aW5zdGVhZC4gT3VyIGNvbnRyYWN0IHRvCi0gICAgLy8gY2FsbGVycyBvZiB0aGlzIG1ldGhvZCBp
cyB0aGF0IGEgbnVsbCBsb2FkZXIgaXMgcmV0dXJuZWQgaWYgdGhlIGxvYWQgd2FzCi0gICAgLy8g
Y2FuY2VsbGVkIGJ5IGEgZnJhbWUgbG9hZCBkZWxlZ2F0ZS4KLSAgICBpZiAoIWxvYWRlciB8fCBs
b2FkZXItPnJlYWNoZWRUZXJtaW5hbFN0YXRlKCkpCi0gICAgICAgIHJldHVybiBudWxscHRyOwot
I2VuZGlmCi0gICAgcmV0dXJuIGxvYWRlcjsKLX0KLQotUmVmUHRyPE5ldHNjYXBlUGx1Z0luU3Ry
ZWFtTG9hZGVyPiBSZXNvdXJjZUxvYWRTY2hlZHVsZXI6OnNjaGVkdWxlUGx1Z2luU3RyZWFtTG9h
ZChGcmFtZSogZnJhbWUsIE5ldHNjYXBlUGx1Z0luU3RyZWFtTG9hZGVyQ2xpZW50KiBjbGllbnQs
IGNvbnN0IFJlc291cmNlUmVxdWVzdCYgcmVxdWVzdCkKLXsKLSAgICBSZWZQdHI8TmV0c2NhcGVQ
bHVnSW5TdHJlYW1Mb2FkZXI+IGxvYWRlciA9IE5ldHNjYXBlUGx1Z0luU3RyZWFtTG9hZGVyOjpj
cmVhdGUoZnJhbWUsIGNsaWVudCwgcmVxdWVzdCk7Ci0gICAgaWYgKGxvYWRlcikKLSAgICAgICAg
c2NoZWR1bGVMb2FkKGxvYWRlci5nZXQoKSk7Ci0gICAgcmV0dXJuIGxvYWRlcjsKLX0KLQotdm9p
ZCBSZXNvdXJjZUxvYWRTY2hlZHVsZXI6OnNjaGVkdWxlTG9hZChSZXNvdXJjZUxvYWRlciogcmVz
b3VyY2VMb2FkZXIpCi17Ci0gICAgQVNTRVJUKHJlc291cmNlTG9hZGVyKTsKLQotICAgIExPRyhS
ZXNvdXJjZUxvYWRpbmcsICJSZXNvdXJjZUxvYWRTY2hlZHVsZXI6OmxvYWQgcmVzb3VyY2UgJXAg
JyVzJyIsIHJlc291cmNlTG9hZGVyLCByZXNvdXJjZUxvYWRlci0+dXJsKCkuc3RyaW5nKCkubGF0
aW4xKCkuZGF0YSgpKTsKLQotI2lmIFBMQVRGT1JNKElPUykKLSAgICAvLyBJZiB0aGVyZSdzIGEg
d2ViIGFyY2hpdmUgcmVzb3VyY2UgZm9yIHRoaXMgVVJMLCB3ZSBkb24ndCBuZWVkIHRvIHNjaGVk
dWxlIHRoZSBsb2FkIHNpbmNlIGl0IHdpbGwgbmV2ZXIgdG91Y2ggdGhlIG5ldHdvcmsuCi0gICAg
aWYgKCFpc1N1c3BlbmRpbmdQZW5kaW5nUmVxdWVzdHMoKSAmJiByZXNvdXJjZUxvYWRlci0+ZG9j
dW1lbnRMb2FkZXIoKS0+YXJjaGl2ZVJlc291cmNlRm9yVVJMKHJlc291cmNlTG9hZGVyLT5pT1NP
cmlnaW5hbFJlcXVlc3QoKS51cmwoKSkpIHsKLSAgICAgICAgcmVzb3VyY2VMb2FkZXItPnN0YXJ0
TG9hZGluZygpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotI2Vsc2UKLSAgICBpZiAocmVzb3Vy
Y2VMb2FkZXItPmRvY3VtZW50TG9hZGVyKCktPmFyY2hpdmVSZXNvdXJjZUZvclVSTChyZXNvdXJj
ZUxvYWRlci0+cmVxdWVzdCgpLnVybCgpKSkgewotICAgICAgICByZXNvdXJjZUxvYWRlci0+c3Rh
cnQoKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLSNlbmRpZgotCi0jaWYgUExBVEZPUk0oSU9T
KQotICAgIEhvc3RJbmZvcm1hdGlvbiogaG9zdCA9IGhvc3RGb3JVUkwocmVzb3VyY2VMb2FkZXIt
PmlPU09yaWdpbmFsUmVxdWVzdCgpLnVybCgpLCBDcmVhdGVJZk5vdEZvdW5kKTsKLSNlbHNlCi0g
ICAgSG9zdEluZm9ybWF0aW9uKiBob3N0ID0gaG9zdEZvclVSTChyZXNvdXJjZUxvYWRlci0+dXJs
KCksIENyZWF0ZUlmTm90Rm91bmQpOwotI2VuZGlmCi0KLSAgICBSZXNvdXJjZUxvYWRQcmlvcml0
eSBwcmlvcml0eSA9IHJlc291cmNlTG9hZGVyLT5yZXF1ZXN0KCkucHJpb3JpdHkoKTsKLQotICAg
IGJvb2wgaGFkUmVxdWVzdHMgPSBob3N0LT5oYXNSZXF1ZXN0cygpOwotICAgIGhvc3QtPnNjaGVk
dWxlKHJlc291cmNlTG9hZGVyLCBwcmlvcml0eSk7Ci0KLSNpZiBQTEFURk9STShDT0NPQSkgfHwg
VVNFKENGTkVUV09SSykKLSAgICBpZiAoUmVzb3VyY2VSZXF1ZXN0OjpyZXNvdXJjZVByaW9yaXRp
ZXNFbmFibGVkKCkgJiYgIWlzU3VzcGVuZGluZ1BlbmRpbmdSZXF1ZXN0cygpKSB7Ci0gICAgICAg
IC8vIFNlcnZlIGFsbCByZXF1ZXN0cyBhdCBvbmNlIHRvIGtlZXAgdGhlIHBpcGVsaW5lIGZ1bGwg
YXQgdGhlIG5ldHdvcmsgbGF5ZXIuCi0gICAgICAgIC8vIEZJWE1FOiBEb2VzIHRoaXMgY29kZSBk
byBhbnl0aGluZyB1c2VmdWwsIGdpdmVuIHRoYXQgd2UgYWxzbyBzZXQgbWF4UmVxdWVzdHNJbkZs
aWdodFBlckhvc3QgdG8gZWZmZWN0aXZlbHkgdW5saW1pdGVkIG9uIHRoZXNlIHBsYXRmb3Jtcz8K
LSAgICAgICAgc2VydmVQZW5kaW5nUmVxdWVzdHMoaG9zdCwgUmVzb3VyY2VMb2FkUHJpb3JpdHk6
OlZlcnlMb3cpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotI2VuZGlmCi0KLSNpZiBQTEFURk9S
TShJT1MpCi0gICAgaWYgKChwcmlvcml0eSA+IFJlc291cmNlTG9hZFByaW9yaXR5OjpMb3cgfHwg
IXJlc291cmNlTG9hZGVyLT5pT1NPcmlnaW5hbFJlcXVlc3QoKS51cmwoKS5wcm90b2NvbElzSW5I
VFRQRmFtaWx5KCkgfHwgKHByaW9yaXR5ID09IFJlc291cmNlTG9hZFByaW9yaXR5OjpMb3cgJiYg
IWhhZFJlcXVlc3RzKSkgJiYgIWlzU3VzcGVuZGluZ1BlbmRpbmdSZXF1ZXN0cygpKSB7Ci0gICAg
ICAgIC8vIFRyeSB0byByZXF1ZXN0IGltcG9ydGFudCByZXNvdXJjZXMgaW1tZWRpYXRlbHkuCi0g
ICAgICAgIHNlcnZlUGVuZGluZ1JlcXVlc3RzKGhvc3QsIHByaW9yaXR5KTsKLSAgICAgICAgcmV0
dXJuOwotICAgIH0KLSNlbHNlCi0gICAgaWYgKHByaW9yaXR5ID4gUmVzb3VyY2VMb2FkUHJpb3Jp
dHk6OkxvdyB8fCAhcmVzb3VyY2VMb2FkZXItPnVybCgpLnByb3RvY29sSXNJbkhUVFBGYW1pbHko
KSB8fCAocHJpb3JpdHkgPT0gUmVzb3VyY2VMb2FkUHJpb3JpdHk6OkxvdyAmJiAhaGFkUmVxdWVz
dHMpKSB7Ci0gICAgICAgIC8vIFRyeSB0byByZXF1ZXN0IGltcG9ydGFudCByZXNvdXJjZXMgaW1t
ZWRpYXRlbHkuCi0gICAgICAgIHNlcnZlUGVuZGluZ1JlcXVlc3RzKGhvc3QsIHByaW9yaXR5KTsK
LSAgICAgICAgcmV0dXJuOwotICAgIH0KLSNlbmRpZgotCi0gICAgLy8gSGFuZGxlIGFzeW5jaHJv
bm91c2x5IHNvIGVhcmx5IGxvdyBwcmlvcml0eSByZXF1ZXN0cyBkb24ndAotICAgIC8vIGdldCBz
Y2hlZHVsZWQgYmVmb3JlIGxhdGVyIGhpZ2ggcHJpb3JpdHkgb25lcy4KLSAgICBzY2hlZHVsZVNl
cnZlUGVuZGluZ1JlcXVlc3RzKCk7Ci19Ci0KLXZvaWQgUmVzb3VyY2VMb2FkU2NoZWR1bGVyOjpy
ZW1vdmUoUmVzb3VyY2VMb2FkZXIqIHJlc291cmNlTG9hZGVyKQotewotICAgIEFTU0VSVChyZXNv
dXJjZUxvYWRlcik7Ci0KLSAgICBIb3N0SW5mb3JtYXRpb24qIGhvc3QgPSBob3N0Rm9yVVJMKHJl
c291cmNlTG9hZGVyLT51cmwoKSk7Ci0gICAgaWYgKGhvc3QpCi0gICAgICAgIGhvc3QtPnJlbW92
ZShyZXNvdXJjZUxvYWRlcik7Ci0jaWYgUExBVEZPUk0oSU9TKQotICAgIC8vIFJlc291cmNlTG9h
ZGVyOjp1cmwoKSBkb2Vzbid0IHN0YXJ0IHJldHVybmluZyB0aGUgY29ycmVjdCB2YWx1ZSB1bnRp
bCB0aGUgbG9hZCBzdGFydHMuIElmIHdlIGdldCBjYW5jZWxlZCBiZWZvcmUgdGhhdCwgd2UgbmVl
ZCB0byBsb29rIGZvciBvcmlnaW5hbFJlcXVlc3QgdXJsIGluc3RlYWQuCi0gICAgLy8gRklYTUU6
IFJlc291cmNlTG9hZGVyOjp1cmwoKSBzaG91bGQgYmUgbWFkZSB0byByZXR1cm4gYSBzZW5zaWJs
ZSB2YWx1ZSBhdCBhbGwgdGltZXMuCi0gICAgaWYgKCFyZXNvdXJjZUxvYWRlci0+aU9TT3JpZ2lu
YWxSZXF1ZXN0KCkuaXNOdWxsKCkpIHsKLSAgICAgICAgSG9zdEluZm9ybWF0aW9uKiBvcmlnaW5h
bEhvc3QgPSBob3N0Rm9yVVJMKHJlc291cmNlTG9hZGVyLT5pT1NPcmlnaW5hbFJlcXVlc3QoKS51
cmwoKSk7Ci0gICAgICAgIGlmIChvcmlnaW5hbEhvc3QgJiYgb3JpZ2luYWxIb3N0ICE9IGhvc3Qp
Ci0gICAgICAgICAgICBvcmlnaW5hbEhvc3QtPnJlbW92ZShyZXNvdXJjZUxvYWRlcik7Ci0gICAg
fQotI2VuZGlmCi0gICAgc2NoZWR1bGVTZXJ2ZVBlbmRpbmdSZXF1ZXN0cygpOwotfQotCi12b2lk
IFJlc291cmNlTG9hZFNjaGVkdWxlcjo6c2V0RGVmZXJzTG9hZGluZyhSZXNvdXJjZUxvYWRlcios
IGJvb2wpCi17Ci19Ci0KLXZvaWQgUmVzb3VyY2VMb2FkU2NoZWR1bGVyOjpjcm9zc09yaWdpblJl
ZGlyZWN0UmVjZWl2ZWQoUmVzb3VyY2VMb2FkZXIqIHJlc291cmNlTG9hZGVyLCBjb25zdCBVUkwm
IHJlZGlyZWN0VVJMKQotewotICAgIEhvc3RJbmZvcm1hdGlvbiogb2xkSG9zdCA9IGhvc3RGb3JV
UkwocmVzb3VyY2VMb2FkZXItPnVybCgpKTsKLSAgICBBU1NFUlQob2xkSG9zdCk7Ci0gICAgaWYg
KCFvbGRIb3N0KQotICAgICAgICByZXR1cm47Ci0KLSAgICBIb3N0SW5mb3JtYXRpb24qIG5ld0hv
c3QgPSBob3N0Rm9yVVJMKHJlZGlyZWN0VVJMLCBDcmVhdGVJZk5vdEZvdW5kKTsKLQotICAgIGlm
IChvbGRIb3N0LT5uYW1lKCkgPT0gbmV3SG9zdC0+bmFtZSgpKQotICAgICAgICByZXR1cm47Ci0K
LSAgICBuZXdIb3N0LT5hZGRMb2FkSW5Qcm9ncmVzcyhyZXNvdXJjZUxvYWRlcik7Ci0gICAgb2xk
SG9zdC0+cmVtb3ZlKHJlc291cmNlTG9hZGVyKTsKLX0KLQotdm9pZCBSZXNvdXJjZUxvYWRTY2hl
ZHVsZXI6OnNlcnZlUGVuZGluZ1JlcXVlc3RzKFJlc291cmNlTG9hZFByaW9yaXR5IG1pbmltdW1Q
cmlvcml0eSkKLXsKLSAgICBMT0coUmVzb3VyY2VMb2FkaW5nLCAiUmVzb3VyY2VMb2FkU2NoZWR1
bGVyOjpzZXJ2ZVBlbmRpbmdSZXF1ZXN0cy4gbV9zdXNwZW5kUGVuZGluZ1JlcXVlc3RzQ291bnQ9
JWQiLCBtX3N1c3BlbmRQZW5kaW5nUmVxdWVzdHNDb3VudCk7IAotICAgIGlmIChpc1N1c3BlbmRp
bmdQZW5kaW5nUmVxdWVzdHMoKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgbV9yZXF1ZXN0VGlt
ZXIuc3RvcCgpOwotICAgIAotICAgIHNlcnZlUGVuZGluZ1JlcXVlc3RzKG1fbm9uSFRUUFByb3Rv
Y29sSG9zdCwgbWluaW11bVByaW9yaXR5KTsKLQotICAgIFZlY3RvcjxIb3N0SW5mb3JtYXRpb24q
PiBob3N0c1RvU2VydmU7Ci0gICAgY29weVZhbHVlc1RvVmVjdG9yKG1faG9zdHMsIGhvc3RzVG9T
ZXJ2ZSk7Ci0KLSAgICBmb3IgKGF1dG8qIGhvc3QgOiBob3N0c1RvU2VydmUpIHsKLSAgICAgICAg
aWYgKGhvc3QtPmhhc1JlcXVlc3RzKCkpCi0gICAgICAgICAgICBzZXJ2ZVBlbmRpbmdSZXF1ZXN0
cyhob3N0LCBtaW5pbXVtUHJpb3JpdHkpOwotICAgICAgICBlbHNlCi0gICAgICAgICAgICBkZWxl
dGUgbV9ob3N0cy50YWtlKGhvc3QtPm5hbWUoKSk7Ci0gICAgfQotfQotCi12b2lkIFJlc291cmNl
TG9hZFNjaGVkdWxlcjo6c2VydmVQZW5kaW5nUmVxdWVzdHMoSG9zdEluZm9ybWF0aW9uKiBob3N0
LCBSZXNvdXJjZUxvYWRQcmlvcml0eSBtaW5pbXVtUHJpb3JpdHkpCi17Ci0gICAgTE9HKFJlc291
cmNlTG9hZGluZywgIlJlc291cmNlTG9hZFNjaGVkdWxlcjo6c2VydmVQZW5kaW5nUmVxdWVzdHMg
SG9zdEluZm9ybWF0aW9uLm1fbmFtZT0nJXMnIiwgaG9zdC0+bmFtZSgpLmxhdGluMSgpLmRhdGEo
KSk7Ci0KLSAgICBhdXRvIHByaW9yaXR5ID0gUmVzb3VyY2VMb2FkUHJpb3JpdHk6OkhpZ2hlc3Q7
Ci0gICAgd2hpbGUgKHRydWUpIHsKLSAgICAgICAgYXV0byYgcmVxdWVzdHNQZW5kaW5nID0gaG9z
dC0+cmVxdWVzdHNQZW5kaW5nKHByaW9yaXR5KTsKLSAgICAgICAgd2hpbGUgKCFyZXF1ZXN0c1Bl
bmRpbmcuaXNFbXB0eSgpKSB7Ci0gICAgICAgICAgICBSZWZQdHI8UmVzb3VyY2VMb2FkZXI+IHJl
c291cmNlTG9hZGVyID0gcmVxdWVzdHNQZW5kaW5nLmZpcnN0KCk7Ci0KLSAgICAgICAgICAgIC8v
IEZvciBuYW1lZCBob3N0cyAtIHdoaWNoIGFyZSBvbmx5IGh0dHAocykgaG9zdHMgLSB3ZSBzaG91
bGQgYWx3YXlzIGVuZm9yY2UgdGhlIGNvbm5lY3Rpb24gbGltaXQuCi0gICAgICAgICAgICAvLyBG
b3Igbm9uLW5hbWVkIGhvc3RzIC0gZXZlcnl0aGluZyBidXQgaHR0cChzKSAtIHdlIHNob3VsZCBv
bmx5IGVuZm9yY2UgdGhlIGxpbWl0IGlmIHRoZSBkb2N1bWVudCBpc24ndCBkb25lIHBhcnNpbmcg
Ci0gICAgICAgICAgICAvLyBhbmQgd2UgZG9uJ3Qga25vdyBhbGwgc3R5bGVzaGVldHMgeWV0Lgot
ICAgICAgICAgICAgRG9jdW1lbnQqIGRvY3VtZW50ID0gcmVzb3VyY2VMb2FkZXItPmZyYW1lTG9h
ZGVyKCkgPyByZXNvdXJjZUxvYWRlci0+ZnJhbWVMb2FkZXIoKS0+ZnJhbWUoKS5kb2N1bWVudCgp
IDogMDsKLSAgICAgICAgICAgIGJvb2wgc2hvdWxkTGltaXRSZXF1ZXN0cyA9ICFob3N0LT5uYW1l
KCkuaXNOdWxsKCkgfHwgKGRvY3VtZW50ICYmIChkb2N1bWVudC0+cGFyc2luZygpIHx8ICFkb2N1
bWVudC0+aGF2ZVN0eWxlc2hlZXRzTG9hZGVkKCkpKTsKLSAgICAgICAgICAgIGlmIChzaG91bGRM
aW1pdFJlcXVlc3RzICYmIGhvc3QtPmxpbWl0UmVxdWVzdHMocHJpb3JpdHkpKQotICAgICAgICAg
ICAgICAgIHJldHVybjsKLQotICAgICAgICAgICAgcmVxdWVzdHNQZW5kaW5nLnJlbW92ZUZpcnN0
KCk7Ci0gICAgICAgICAgICBob3N0LT5hZGRMb2FkSW5Qcm9ncmVzcyhyZXNvdXJjZUxvYWRlci5n
ZXQoKSk7Ci0jaWYgUExBVEZPUk0oSU9TKQotICAgICAgICAgICAgaWYgKCFhcHBsaWNhdGlvbklz
V2ViUHJvY2VzcygpKSB7Ci0gICAgICAgICAgICAgICAgcmVzb3VyY2VMb2FkZXItPnN0YXJ0TG9h
ZGluZygpOwotICAgICAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgICAgIH0KLSNlbmRpZgot
ICAgICAgICAgICAgcmVzb3VyY2VMb2FkZXItPnN0YXJ0KCk7Ci0gICAgICAgIH0KLSAgICAgICAg
aWYgKHByaW9yaXR5ID09IG1pbmltdW1Qcmlvcml0eSkKLSAgICAgICAgICAgIHJldHVybjsKLSAg
ICAgICAgLS1wcmlvcml0eTsKLSAgICB9Ci19Ci0KLXZvaWQgUmVzb3VyY2VMb2FkU2NoZWR1bGVy
OjpzdXNwZW5kUGVuZGluZ1JlcXVlc3RzKCkKLXsKLSAgICArK21fc3VzcGVuZFBlbmRpbmdSZXF1
ZXN0c0NvdW50OwotfQotCi12b2lkIFJlc291cmNlTG9hZFNjaGVkdWxlcjo6cmVzdW1lUGVuZGlu
Z1JlcXVlc3RzKCkKLXsKLSAgICBBU1NFUlQobV9zdXNwZW5kUGVuZGluZ1JlcXVlc3RzQ291bnQp
OwotICAgIC0tbV9zdXNwZW5kUGVuZGluZ1JlcXVlc3RzQ291bnQ7Ci0gICAgaWYgKG1fc3VzcGVu
ZFBlbmRpbmdSZXF1ZXN0c0NvdW50KQotICAgICAgICByZXR1cm47Ci0gICAgaWYgKCFtX2hvc3Rz
LmlzRW1wdHkoKSB8fCBtX25vbkhUVFBQcm90b2NvbEhvc3QtPmhhc1JlcXVlc3RzKCkpCi0gICAg
ICAgIHNjaGVkdWxlU2VydmVQZW5kaW5nUmVxdWVzdHMoKTsKLX0KLSAgICAKLXZvaWQgUmVzb3Vy
Y2VMb2FkU2NoZWR1bGVyOjpzY2hlZHVsZVNlcnZlUGVuZGluZ1JlcXVlc3RzKCkKLXsKLSAgICBM
T0coUmVzb3VyY2VMb2FkaW5nLCAiUmVzb3VyY2VMb2FkU2NoZWR1bGVyOjpzY2hlZHVsZVNlcnZl
UGVuZGluZ1JlcXVlc3RzLCBtX3JlcXVlc3RUaW1lci5pc0FjdGl2ZSgpPSV1IiwgbV9yZXF1ZXN0
VGltZXIuaXNBY3RpdmUoKSk7Ci0gICAgaWYgKCFtX3JlcXVlc3RUaW1lci5pc0FjdGl2ZSgpKQot
ICAgICAgICBtX3JlcXVlc3RUaW1lci5zdGFydE9uZVNob3QoMCk7Ci19Ci0KLXZvaWQgUmVzb3Vy
Y2VMb2FkU2NoZWR1bGVyOjpyZXF1ZXN0VGltZXJGaXJlZCgpCi17Ci0gICAgTE9HKFJlc291cmNl
TG9hZGluZywgIlJlc291cmNlTG9hZFNjaGVkdWxlcjo6cmVxdWVzdFRpbWVyRmlyZWRcbiIpOwot
ICAgIHNlcnZlUGVuZGluZ1JlcXVlc3RzKCk7Ci19Ci0KLVJlc291cmNlTG9hZFNjaGVkdWxlcjo6
SG9zdEluZm9ybWF0aW9uOjpIb3N0SW5mb3JtYXRpb24oY29uc3QgU3RyaW5nJiBuYW1lLCB1bnNp
Z25lZCBtYXhSZXF1ZXN0c0luRmxpZ2h0KQotICAgIDogbV9uYW1lKG5hbWUpCi0gICAgLCBtX21h
eFJlcXVlc3RzSW5GbGlnaHQobWF4UmVxdWVzdHNJbkZsaWdodCkKLXsKLX0KLQotUmVzb3VyY2VM
b2FkU2NoZWR1bGVyOjpIb3N0SW5mb3JtYXRpb246On5Ib3N0SW5mb3JtYXRpb24oKQotewotICAg
IEFTU0VSVCghaGFzUmVxdWVzdHMoKSk7Ci19Ci0KLXVuc2lnbmVkIFJlc291cmNlTG9hZFNjaGVk
dWxlcjo6SG9zdEluZm9ybWF0aW9uOjpwcmlvcml0eVRvSW5kZXgoUmVzb3VyY2VMb2FkUHJpb3Jp
dHkgcHJpb3JpdHkpCi17Ci0gICAgc3dpdGNoIChwcmlvcml0eSkgewotICAgIGNhc2UgUmVzb3Vy
Y2VMb2FkUHJpb3JpdHk6OlZlcnlMb3c6Ci0gICAgICAgIHJldHVybiAwOwotICAgIGNhc2UgUmVz
b3VyY2VMb2FkUHJpb3JpdHk6OkxvdzoKLSAgICAgICAgcmV0dXJuIDE7Ci0gICAgY2FzZSBSZXNv
dXJjZUxvYWRQcmlvcml0eTo6TWVkaXVtOgotICAgICAgICByZXR1cm4gMjsKLSAgICBjYXNlIFJl
c291cmNlTG9hZFByaW9yaXR5OjpIaWdoOgotICAgICAgICByZXR1cm4gMzsKLSAgICBjYXNlIFJl
c291cmNlTG9hZFByaW9yaXR5OjpWZXJ5SGlnaDoKLSAgICAgICAgcmV0dXJuIDQ7Ci0gICAgfQot
ICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwotICAgIHJldHVybiAwOwotfQotCi12b2lkIFJlc291
cmNlTG9hZFNjaGVkdWxlcjo6SG9zdEluZm9ybWF0aW9uOjpzY2hlZHVsZShSZXNvdXJjZUxvYWRl
ciogcmVzb3VyY2VMb2FkZXIsIFJlc291cmNlTG9hZFByaW9yaXR5IHByaW9yaXR5KQotewotICAg
IG1fcmVxdWVzdHNQZW5kaW5nW3ByaW9yaXR5VG9JbmRleChwcmlvcml0eSldLmFwcGVuZChyZXNv
dXJjZUxvYWRlcik7Ci19Ci0gICAgCi12b2lkIFJlc291cmNlTG9hZFNjaGVkdWxlcjo6SG9zdElu
Zm9ybWF0aW9uOjphZGRMb2FkSW5Qcm9ncmVzcyhSZXNvdXJjZUxvYWRlciogcmVzb3VyY2VMb2Fk
ZXIpCi17Ci0gICAgTE9HKFJlc291cmNlTG9hZGluZywgIkhvc3RJbmZvcm1hdGlvbiAnJXMnIGxv
YWRpbmcgJyVzJy4gQ3VycmVudCBjb3VudCAlZCIsIG1fbmFtZS5sYXRpbjEoKS5kYXRhKCksIHJl
c291cmNlTG9hZGVyLT51cmwoKS5zdHJpbmcoKS5sYXRpbjEoKS5kYXRhKCksIG1fcmVxdWVzdHNM
b2FkaW5nLnNpemUoKSk7Ci0gICAgbV9yZXF1ZXN0c0xvYWRpbmcuYWRkKHJlc291cmNlTG9hZGVy
KTsKLX0KLSAgICAKLXZvaWQgUmVzb3VyY2VMb2FkU2NoZWR1bGVyOjpIb3N0SW5mb3JtYXRpb246
OnJlbW92ZShSZXNvdXJjZUxvYWRlciogcmVzb3VyY2VMb2FkZXIpCi17Ci0gICAgaWYgKG1fcmVx
dWVzdHNMb2FkaW5nLnJlbW92ZShyZXNvdXJjZUxvYWRlcikpCi0gICAgICAgIHJldHVybjsKLSAg
ICAKLSAgICBmb3IgKGF1dG8mIHJlcXVlc3RRdWV1ZSA6IG1fcmVxdWVzdHNQZW5kaW5nKSB7Ci0g
ICAgICAgIGZvciAoYXV0byBpdCA9IHJlcXVlc3RRdWV1ZS5iZWdpbigpLCBlbmQgPSByZXF1ZXN0
UXVldWUuZW5kKCk7IGl0ICE9IGVuZDsgKytpdCkgewotICAgICAgICAgICAgaWYgKCppdCA9PSBy
ZXNvdXJjZUxvYWRlcikgewotICAgICAgICAgICAgICAgIHJlcXVlc3RRdWV1ZS5yZW1vdmUoaXQp
OwotICAgICAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAg
IH0KLX0KLQotYm9vbCBSZXNvdXJjZUxvYWRTY2hlZHVsZXI6Okhvc3RJbmZvcm1hdGlvbjo6aGFz
UmVxdWVzdHMoKSBjb25zdAotewotICAgIGlmICghbV9yZXF1ZXN0c0xvYWRpbmcuaXNFbXB0eSgp
KQotICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICBmb3IgKGF1dG8mIHJlcXVlc3RRdWV1ZSA6IG1f
cmVxdWVzdHNQZW5kaW5nKSB7Ci0gICAgICAgIGlmICghcmVxdWVzdFF1ZXVlLmlzRW1wdHkoKSkK
LSAgICAgICAgICAgIHJldHVybiB0cnVlOwotICAgIH0KLSAgICByZXR1cm4gZmFsc2U7Ci19Ci0K
LWJvb2wgUmVzb3VyY2VMb2FkU2NoZWR1bGVyOjpIb3N0SW5mb3JtYXRpb246OmxpbWl0UmVxdWVz
dHMoUmVzb3VyY2VMb2FkUHJpb3JpdHkgcHJpb3JpdHkpIGNvbnN0IAotewotICAgIGlmIChwcmlv
cml0eSA9PSBSZXNvdXJjZUxvYWRQcmlvcml0eTo6VmVyeUxvdyAmJiAhbV9yZXF1ZXN0c0xvYWRp
bmcuaXNFbXB0eSgpKQotICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICByZXR1cm4gbV9yZXF1ZXN0
c0xvYWRpbmcuc2l6ZSgpID49IChyZXNvdXJjZUxvYWRTY2hlZHVsZXIoKS0+aXNTZXJpYWxMb2Fk
aW5nRW5hYmxlZCgpID8gMSA6IG1fbWF4UmVxdWVzdHNJbkZsaWdodCk7Ci19Ci0KLX0gLy8gbmFt
ZXNwYWNlIFdlYkNvcmUKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2xvYWRlci9SZXNvdXJjZUxvYWRT
Y2hlZHVsZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9sb2FkZXIvUmVzb3VyY2VM
b2FkU2NoZWR1bGVyLmgJKHJldmlzaW9uIDE5Mjg4MCkKKysrIFNvdXJjZS9XZWJDb3JlL2xvYWRl
ci9SZXNvdXJjZUxvYWRTY2hlZHVsZXIuaAkod29ya2luZyBjb3B5KQpAQCAtMSwxMzQgKzAsMCBA
QAotLyoKLSAgICBDb3B5cmlnaHQgKEMpIDE5OTggTGFycyBLbm9sbCAoa25vbGxAbXBpLWhkLm1w
Zy5kZSkKLSAgICBDb3B5cmlnaHQgKEMpIDIwMDEgRGlyayBNdWVsbGVyIDxtdWVsbGVyQGtkZS5v
cmc+Ci0gICAgQ29weXJpZ2h0IChDKSAyMDA0LCAyMDA2LCAyMDA3LCAyMDA4IEFwcGxlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAgICBDb3B5cmlnaHQgKEMpIDIwMTAgR29vZ2xlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KLQotICAgIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJl
OyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKLSAgICBtb2RpZnkgaXQgdW5kZXIgdGhl
IHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwotICAgIExpY2Vuc2UgYXMg
cHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgotICAgIHZl
cnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVy
c2lvbi4KLQotICAgIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0
IGl0IHdpbGwgYmUgdXNlZnVsLAotICAgIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91
dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJ
VE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKLSAgICBMaWJyYXJ5
IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLQotICAgIFlvdSBzaG91
bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGlj
IExpY2Vuc2UKLSAgICBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJ
TkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bwotICAgIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRp
b24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCi0gICAgQm9zdG9uLCBN
QSAwMjExMC0xMzAxLCBVU0EuCi0gKi8KLQotI2lmbmRlZiBSZXNvdXJjZUxvYWRTY2hlZHVsZXJf
aAotI2RlZmluZSBSZXNvdXJjZUxvYWRTY2hlZHVsZXJfaAotCi0jaW5jbHVkZSAiRnJhbWVMb2Fk
ZXJUeXBlcy5oIgotI2luY2x1ZGUgIlJlc291cmNlTG9hZGVyT3B0aW9ucy5oIgotI2luY2x1ZGUg
IlJlc291cmNlTG9hZFByaW9yaXR5LmgiCi0jaW5jbHVkZSAiVGltZXIuaCIKLSNpbmNsdWRlIDxh
cnJheT4KLSNpbmNsdWRlIDx3dGYvRGVxdWUuaD4KLSNpbmNsdWRlIDx3dGYvSGFzaE1hcC5oPgot
I2luY2x1ZGUgPHd0Zi9IYXNoU2V0Lmg+Ci0jaW5jbHVkZSA8d3RmL05vbmNvcHlhYmxlLmg+Ci0j
aW5jbHVkZSA8d3RmL3RleHQvU3RyaW5nSGFzaC5oPgotI2luY2x1ZGUgPHd0Zi90ZXh0L1dURlN0
cmluZy5oPgotCi1uYW1lc3BhY2UgV2ViQ29yZSB7Ci0KLWNsYXNzIENhY2hlZFJlc291cmNlOwot
Y2xhc3MgRnJhbWU7Ci1jbGFzcyBVUkw7Ci1jbGFzcyBOZXRzY2FwZVBsdWdJblN0cmVhbUxvYWRl
cjsKLWNsYXNzIE5ldHNjYXBlUGx1Z0luU3RyZWFtTG9hZGVyQ2xpZW50OwotY2xhc3MgUmVzb3Vy
Y2VMb2FkZXI7Ci1jbGFzcyBSZXNvdXJjZVJlcXVlc3Q7Ci1jbGFzcyBTdWJyZXNvdXJjZUxvYWRl
cjsKLQotY2xhc3MgUmVzb3VyY2VMb2FkU2NoZWR1bGVyIHsKLSAgICBXVEZfTUFLRV9OT05DT1BZ
QUJMRShSZXNvdXJjZUxvYWRTY2hlZHVsZXIpOyBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsKLXB1
YmxpYzoKLSAgICBXRUJDT1JFX0VYUE9SVCBmcmllbmQgUmVzb3VyY2VMb2FkU2NoZWR1bGVyKiBy
ZXNvdXJjZUxvYWRTY2hlZHVsZXIoKTsKLQotICAgIFdFQkNPUkVfRVhQT1JUIHZpcnR1YWwgUmVm
UHRyPFN1YnJlc291cmNlTG9hZGVyPiBzY2hlZHVsZVN1YnJlc291cmNlTG9hZChGcmFtZSosIENh
Y2hlZFJlc291cmNlKiwgY29uc3QgUmVzb3VyY2VSZXF1ZXN0JiwgY29uc3QgUmVzb3VyY2VMb2Fk
ZXJPcHRpb25zJik7Ci0gICAgV0VCQ09SRV9FWFBPUlQgdmlydHVhbCBSZWZQdHI8TmV0c2NhcGVQ
bHVnSW5TdHJlYW1Mb2FkZXI+IHNjaGVkdWxlUGx1Z2luU3RyZWFtTG9hZChGcmFtZSosIE5ldHNj
YXBlUGx1Z0luU3RyZWFtTG9hZGVyQ2xpZW50KiwgY29uc3QgUmVzb3VyY2VSZXF1ZXN0Jik7Ci0g
ICAgV0VCQ09SRV9FWFBPUlQgdmlydHVhbCB2b2lkIHJlbW92ZShSZXNvdXJjZUxvYWRlciopOwot
ICAgIHZpcnR1YWwgdm9pZCBzZXREZWZlcnNMb2FkaW5nKFJlc291cmNlTG9hZGVyKiwgYm9vbCk7
Ci0gICAgdmlydHVhbCB2b2lkIGNyb3NzT3JpZ2luUmVkaXJlY3RSZWNlaXZlZChSZXNvdXJjZUxv
YWRlciosIGNvbnN0IFVSTCYgcmVkaXJlY3RVUkwpOwotICAgIAotICAgIFdFQkNPUkVfRVhQT1JU
IHZpcnR1YWwgdm9pZCBzZXJ2ZVBlbmRpbmdSZXF1ZXN0cyhSZXNvdXJjZUxvYWRQcmlvcml0eSBt
aW5pbXVtUHJpb3JpdHkgPSBSZXNvdXJjZUxvYWRQcmlvcml0eTo6VmVyeUxvdyk7Ci0gICAgV0VC
Q09SRV9FWFBPUlQgdmlydHVhbCB2b2lkIHN1c3BlbmRQZW5kaW5nUmVxdWVzdHMoKTsKLSAgICBX
RUJDT1JFX0VYUE9SVCB2aXJ0dWFsIHZvaWQgcmVzdW1lUGVuZGluZ1JlcXVlc3RzKCk7Ci0gICAg
Ci0gICAgYm9vbCBpc1NlcmlhbExvYWRpbmdFbmFibGVkKCkgY29uc3QgeyByZXR1cm4gbV9pc1Nl
cmlhbExvYWRpbmdFbmFibGVkOyB9Ci0gICAgdmlydHVhbCB2b2lkIHNldFNlcmlhbExvYWRpbmdF
bmFibGVkKGJvb2wgYikgeyBtX2lzU2VyaWFsTG9hZGluZ0VuYWJsZWQgPSBiOyB9Ci0KLSAgICBj
bGFzcyBTdXNwZW5kZXIgewotICAgIHB1YmxpYzoKLSAgICAgICAgZXhwbGljaXQgU3VzcGVuZGVy
KFJlc291cmNlTG9hZFNjaGVkdWxlciYgc2NoZWR1bGVyKSA6IG1fc2NoZWR1bGVyKHNjaGVkdWxl
cikgeyBtX3NjaGVkdWxlci5zdXNwZW5kUGVuZGluZ1JlcXVlc3RzKCk7IH0KLSAgICAgICAgflN1
c3BlbmRlcigpIHsgbV9zY2hlZHVsZXIucmVzdW1lUGVuZGluZ1JlcXVlc3RzKCk7IH0KLSAgICBw
cml2YXRlOgotICAgICAgICBSZXNvdXJjZUxvYWRTY2hlZHVsZXImIG1fc2NoZWR1bGVyOwotICAg
IH07Ci0KLXByb3RlY3RlZDoKLSAgICBXRUJDT1JFX0VYUE9SVCBSZXNvdXJjZUxvYWRTY2hlZHVs
ZXIoKTsKLSAgICBXRUJDT1JFX0VYUE9SVCB2aXJ0dWFsIH5SZXNvdXJjZUxvYWRTY2hlZHVsZXIo
KTsKLQotcHJpdmF0ZToKLSAgICB2b2lkIHNjaGVkdWxlTG9hZChSZXNvdXJjZUxvYWRlciopOwot
ICAgIHZvaWQgc2NoZWR1bGVTZXJ2ZVBlbmRpbmdSZXF1ZXN0cygpOwotICAgIHZvaWQgcmVxdWVz
dFRpbWVyRmlyZWQoKTsKLQotICAgIGJvb2wgaXNTdXNwZW5kaW5nUGVuZGluZ1JlcXVlc3RzKCkg
Y29uc3QgeyByZXR1cm4gISFtX3N1c3BlbmRQZW5kaW5nUmVxdWVzdHNDb3VudDsgfQotCi0gICAg
Y2xhc3MgSG9zdEluZm9ybWF0aW9uIHsKLSAgICAgICAgV1RGX01BS0VfTk9OQ09QWUFCTEUoSG9z
dEluZm9ybWF0aW9uKTsgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7Ci0gICAgcHVibGljOgotICAg
ICAgICBIb3N0SW5mb3JtYXRpb24oY29uc3QgU3RyaW5nJiwgdW5zaWduZWQpOwotICAgICAgICB+
SG9zdEluZm9ybWF0aW9uKCk7Ci0gICAgICAgIAotICAgICAgICBjb25zdCBTdHJpbmcmIG5hbWUo
KSBjb25zdCB7IHJldHVybiBtX25hbWU7IH0KLSAgICAgICAgdm9pZCBzY2hlZHVsZShSZXNvdXJj
ZUxvYWRlciosIFJlc291cmNlTG9hZFByaW9yaXR5ID0gUmVzb3VyY2VMb2FkUHJpb3JpdHk6OlZl
cnlMb3cpOwotICAgICAgICB2b2lkIGFkZExvYWRJblByb2dyZXNzKFJlc291cmNlTG9hZGVyKik7
Ci0gICAgICAgIHZvaWQgcmVtb3ZlKFJlc291cmNlTG9hZGVyKik7Ci0gICAgICAgIGJvb2wgaGFz
UmVxdWVzdHMoKSBjb25zdDsKLSAgICAgICAgYm9vbCBsaW1pdFJlcXVlc3RzKFJlc291cmNlTG9h
ZFByaW9yaXR5KSBjb25zdDsKLQotICAgICAgICB0eXBlZGVmIERlcXVlPFJlZlB0cjxSZXNvdXJj
ZUxvYWRlcj4+IFJlcXVlc3RRdWV1ZTsKLSAgICAgICAgUmVxdWVzdFF1ZXVlJiByZXF1ZXN0c1Bl
bmRpbmcoUmVzb3VyY2VMb2FkUHJpb3JpdHkgcHJpb3JpdHkpIHsgcmV0dXJuIG1fcmVxdWVzdHNQ
ZW5kaW5nW3ByaW9yaXR5VG9JbmRleChwcmlvcml0eSldOyB9Ci0KLSAgICBwcml2YXRlOgotICAg
ICAgICBzdGF0aWMgdW5zaWduZWQgcHJpb3JpdHlUb0luZGV4KFJlc291cmNlTG9hZFByaW9yaXR5
KTsKLQotICAgICAgICBzdGQ6OmFycmF5PFJlcXVlc3RRdWV1ZSwgcmVzb3VyY2VMb2FkUHJpb3Jp
dHlDb3VudD4gbV9yZXF1ZXN0c1BlbmRpbmc7Ci0gICAgICAgIHR5cGVkZWYgSGFzaFNldDxSZWZQ
dHI8UmVzb3VyY2VMb2FkZXI+PiBSZXF1ZXN0TWFwOwotICAgICAgICBSZXF1ZXN0TWFwIG1fcmVx
dWVzdHNMb2FkaW5nOwotICAgICAgICBjb25zdCBTdHJpbmcgbV9uYW1lOwotICAgICAgICBjb25z
dCB1bnNpZ25lZCBtX21heFJlcXVlc3RzSW5GbGlnaHQ7Ci0gICAgfTsKLQotICAgIGVudW0gQ3Jl
YXRlSG9zdFBvbGljeSB7Ci0gICAgICAgIENyZWF0ZUlmTm90Rm91bmQsCi0gICAgICAgIEZpbmRP
bmx5Ci0gICAgfTsKLSAgICAKLSAgICBIb3N0SW5mb3JtYXRpb24qIGhvc3RGb3JVUkwoY29uc3Qg
VVJMJiwgQ3JlYXRlSG9zdFBvbGljeSA9IEZpbmRPbmx5KTsKLSAgICBXRUJDT1JFX0VYUE9SVCB2
b2lkIHNlcnZlUGVuZGluZ1JlcXVlc3RzKEhvc3RJbmZvcm1hdGlvbiosIFJlc291cmNlTG9hZFBy
aW9yaXR5KTsKLQotICAgIHR5cGVkZWYgSGFzaE1hcDxTdHJpbmcsIEhvc3RJbmZvcm1hdGlvbios
IFN0cmluZ0hhc2g+IEhvc3RNYXA7Ci0gICAgSG9zdE1hcCBtX2hvc3RzOwotICAgIEhvc3RJbmZv
cm1hdGlvbiogbV9ub25IVFRQUHJvdG9jb2xIb3N0OwotICAgICAgICAKLSAgICBUaW1lciBtX3Jl
cXVlc3RUaW1lcjsKLQotICAgIHVuc2lnbmVkIG1fc3VzcGVuZFBlbmRpbmdSZXF1ZXN0c0NvdW50
OwotICAgIGJvb2wgbV9pc1NlcmlhbExvYWRpbmdFbmFibGVkOwotfTsKLQotV0VCQ09SRV9FWFBP
UlQgUmVzb3VyY2VMb2FkU2NoZWR1bGVyKiByZXNvdXJjZUxvYWRTY2hlZHVsZXIoKTsKLQotfQot
Ci0jZW5kaWYKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2xvYWRlci9SZXNvdXJjZUxvYWRlci5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvbG9hZGVyL1Jlc291cmNlTG9hZGVyLmNwcAko
cmV2aXNpb24gMTkyODgwKQorKysgU291cmNlL1dlYkNvcmUvbG9hZGVyL1Jlc291cmNlTG9hZGVy
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDcsNyArNDcsNiBAQAogI2luY2x1ZGUgIlByb2dyZXNz
VHJhY2tlci5oIgogI2luY2x1ZGUgIlJlc291cmNlRXJyb3IuaCIKICNpbmNsdWRlICJSZXNvdXJj
ZUhhbmRsZS5oIgotI2luY2x1ZGUgIlJlc291cmNlTG9hZFNjaGVkdWxlci5oIgogI2luY2x1ZGUg
IlNlY3VyaXR5T3JpZ2luLmgiCiAjaW5jbHVkZSAiU2V0dGluZ3MuaCIKICNpbmNsdWRlICJTaGFy
ZWRCdWZmZXIuaCIKQEAgLTgzLDcgKzgyLDcgQEAgUmVzb3VyY2VMb2FkZXI6On5SZXNvdXJjZUxv
YWRlcigpCiAKIHZvaWQgUmVzb3VyY2VMb2FkZXI6OmZpbmlzaE5ldHdvcmtMb2FkKCkKIHsKLSAg
ICBwbGF0Zm9ybVN0cmF0ZWdpZXMoKS0+bG9hZGVyU3RyYXRlZ3koKS0+cmVzb3VyY2VMb2FkU2No
ZWR1bGVyKCktPnJlbW92ZSh0aGlzKTsKKyAgICBwbGF0Zm9ybVN0cmF0ZWdpZXMoKS0+bG9hZGVy
U3RyYXRlZ3koKS0+cmVtb3ZlKHRoaXMpOwogCiAgICAgaWYgKG1faGFuZGxlKSB7CiAgICAgICAg
IEFTU0VSVChtX2hhbmRsZS0+Y2xpZW50KCkgPT0gdGhpcyk7CkBAIC0yMzMsNyArMjMyLDcgQEAg
dm9pZCBSZXNvdXJjZUxvYWRlcjo6c2V0RGVmZXJzTG9hZGluZyhibwogICAgICAgICBzdGFydCgp
OwogICAgIH0KIAotICAgIHBsYXRmb3JtU3RyYXRlZ2llcygpLT5sb2FkZXJTdHJhdGVneSgpLT5y
ZXNvdXJjZUxvYWRTY2hlZHVsZXIoKS0+c2V0RGVmZXJzTG9hZGluZyh0aGlzLCBkZWZlcnMpOwor
ICAgIHBsYXRmb3JtU3RyYXRlZ2llcygpLT5sb2FkZXJTdHJhdGVneSgpLT5zZXREZWZlcnNMb2Fk
aW5nKHRoaXMsIGRlZmVycyk7CiB9CiAKIEZyYW1lTG9hZGVyKiBSZXNvdXJjZUxvYWRlcjo6ZnJh
bWVMb2FkZXIoKSBjb25zdApAQCAtMjg5LDcgKzI4OCw3IEBAIHZvaWQgUmVzb3VyY2VMb2FkZXI6
OnNldERhdGFCdWZmZXJpbmdQb2wKIHZvaWQgUmVzb3VyY2VMb2FkZXI6OndpbGxTd2l0Y2hUb1N1
YnN0aXR1dGVSZXNvdXJjZSgpCiB7CiAgICAgQVNTRVJUKCFtX2RvY3VtZW50TG9hZGVyLT5pc1N1
YnN0aXR1dGVMb2FkUGVuZGluZyh0aGlzKSk7Ci0gICAgcGxhdGZvcm1TdHJhdGVnaWVzKCktPmxv
YWRlclN0cmF0ZWd5KCktPnJlc291cmNlTG9hZFNjaGVkdWxlcigpLT5yZW1vdmUodGhpcyk7Cisg
ICAgcGxhdGZvcm1TdHJhdGVnaWVzKCktPmxvYWRlclN0cmF0ZWd5KCktPnJlbW92ZSh0aGlzKTsK
ICAgICBpZiAobV9oYW5kbGUpCiAgICAgICAgIG1faGFuZGxlLT5jYW5jZWwoKTsKIH0KQEAgLTM3
Niw3ICszNzUsNyBAQCB2b2lkIFJlc291cmNlTG9hZGVyOjp3aWxsU2VuZFJlcXVlc3RJbnRlCiAK
ICAgICBib29sIGlzUmVkaXJlY3QgPSAhcmVkaXJlY3RSZXNwb25zZS5pc051bGwoKTsKICAgICBp
ZiAoaXNSZWRpcmVjdCkKLSAgICAgICAgcGxhdGZvcm1TdHJhdGVnaWVzKCktPmxvYWRlclN0cmF0
ZWd5KCktPnJlc291cmNlTG9hZFNjaGVkdWxlcigpLT5jcm9zc09yaWdpblJlZGlyZWN0UmVjZWl2
ZWQodGhpcywgcmVxdWVzdC51cmwoKSk7CisgICAgICAgIHBsYXRmb3JtU3RyYXRlZ2llcygpLT5s
b2FkZXJTdHJhdGVneSgpLT5jcm9zc09yaWdpblJlZGlyZWN0UmVjZWl2ZWQodGhpcywgcmVxdWVz
dC51cmwoKSk7CiAKICAgICBtX3JlcXVlc3QgPSByZXF1ZXN0OwogCkluZGV4OiBTb3VyY2UvV2Vi
Q29yZS9sb2FkZXIvYXJjaGl2ZS9BcmNoaXZlUmVzb3VyY2VDb2xsZWN0aW9uLmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL1dlYkNvcmUvbG9hZGVyL2FyY2hpdmUvQXJjaGl2ZVJlc291cmNlQ29sbGVj
dGlvbi5oCShyZXZpc2lvbiAxOTI4ODApCisrKyBTb3VyY2UvV2ViQ29yZS9sb2FkZXIvYXJjaGl2
ZS9BcmNoaXZlUmVzb3VyY2VDb2xsZWN0aW9uLmgJKHdvcmtpbmcgY29weSkKQEAgLTQ3LDcgKzQ3
LDcgQEAgcHVibGljOgogICAgIHZvaWQgYWRkUmVzb3VyY2UoUGFzc1JlZlB0cjxBcmNoaXZlUmVz
b3VyY2U+KTsKICAgICB2b2lkIGFkZEFsbFJlc291cmNlcyhBcmNoaXZlKik7CiAgICAgCi0gICAg
QXJjaGl2ZVJlc291cmNlKiBhcmNoaXZlUmVzb3VyY2VGb3JVUkwoY29uc3QgVVJMJik7CisgICAg
V0VCQ09SRV9FWFBPUlQgQXJjaGl2ZVJlc291cmNlKiBhcmNoaXZlUmVzb3VyY2VGb3JVUkwoY29u
c3QgVVJMJik7CiAgICAgUGFzc1JlZlB0cjxBcmNoaXZlPiBwb3BTdWJmcmFtZUFyY2hpdmUoY29u
c3QgU3RyaW5nJiBmcmFtZU5hbWUsIGNvbnN0IFVSTCYpOwogICAgIAogcHJpdmF0ZTogICAgCklu
ZGV4OiBTb3VyY2UvV2ViQ29yZS9sb2FkZXIvY2FjaGUvQ2FjaGVkUmVzb3VyY2UuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2xvYWRlci9jYWNoZS9DYWNoZWRSZXNvdXJjZS5jcHAJ
KHJldmlzaW9uIDE5Mjg4MCkKKysrIFNvdXJjZS9XZWJDb3JlL2xvYWRlci9jYWNoZS9DYWNoZWRS
ZXNvdXJjZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQ0LDcgKzQ0LDYgQEAKICNpbmNsdWRlICJN
ZW1vcnlDYWNoZS5oIgogI2luY2x1ZGUgIlBsYXRmb3JtU3RyYXRlZ2llcy5oIgogI2luY2x1ZGUg
IlJlc291cmNlSGFuZGxlLmgiCi0jaW5jbHVkZSAiUmVzb3VyY2VMb2FkU2NoZWR1bGVyLmgiCiAj
aW5jbHVkZSAiU2NoZW1lUmVnaXN0cnkuaCIKICNpbmNsdWRlICJTZWN1cml0eU9yaWdpbi5oIgog
I2luY2x1ZGUgIlNlY3VyaXR5UG9saWN5LmgiCkBAIC0yNzgsNyArMjc3LDcgQEAgdm9pZCBDYWNo
ZWRSZXNvdXJjZTo6bG9hZChDYWNoZWRSZXNvdXJjZQogICAgICAgICBtX2ZyYWdtZW50SWRlbnRp
ZmllckZvclJlcXVlc3QgPSBTdHJpbmcoKTsKICAgICB9CiAKLSAgICBtX2xvYWRlciA9IHBsYXRm
b3JtU3RyYXRlZ2llcygpLT5sb2FkZXJTdHJhdGVneSgpLT5yZXNvdXJjZUxvYWRTY2hlZHVsZXIo
KS0+c2NoZWR1bGVTdWJyZXNvdXJjZUxvYWQoY2FjaGVkUmVzb3VyY2VMb2FkZXIuZnJhbWUoKSwg
dGhpcywgcmVxdWVzdCwgb3B0aW9ucyk7CisgICAgbV9sb2FkZXIgPSBwbGF0Zm9ybVN0cmF0ZWdp
ZXMoKS0+bG9hZGVyU3RyYXRlZ3koKS0+bG9hZFJlc291cmNlKGNhY2hlZFJlc291cmNlTG9hZGVy
LmZyYW1lKCksIHRoaXMsIHJlcXVlc3QsIG9wdGlvbnMpOwogICAgIGlmICghbV9sb2FkZXIpIHsK
ICAgICAgICAgZmFpbEJlZm9yZVN0YXJ0aW5nKCk7CiAgICAgICAgIHJldHVybjsKSW5kZXg6IFNv
dXJjZS9XZWJDb3JlL2xvYWRlci9jYWNoZS9DYWNoZWRSZXNvdXJjZUxvYWRlci5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1dlYkNvcmUvbG9hZGVyL2NhY2hlL0NhY2hlZFJlc291cmNlTG9hZGVy
LmNwcAkocmV2aXNpb24gMTkyODgwKQorKysgU291cmNlL1dlYkNvcmUvbG9hZGVyL2NhY2hlL0Nh
Y2hlZFJlc291cmNlTG9hZGVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNjEsNyArNjEsNiBAQAog
I2luY2x1ZGUgIlBsYXRmb3JtU3RyYXRlZ2llcy5oIgogI2luY2x1ZGUgIlJlbmRlckVsZW1lbnQu
aCIKICNpbmNsdWRlICJSZXNvdXJjZUxvYWRJbmZvLmgiCi0jaW5jbHVkZSAiUmVzb3VyY2VMb2Fk
U2NoZWR1bGVyLmgiCiAjaW5jbHVkZSAiU2NyaXB0Q29udHJvbGxlci5oIgogI2luY2x1ZGUgIlNl
Y3VyaXR5T3JpZ2luLmgiCiAjaW5jbHVkZSAiU2Vzc2lvbklELmgiCkBAIC05NjcsNyArOTY2LDcg
QEAgdm9pZCBDYWNoZWRSZXNvdXJjZUxvYWRlcjo6cGVyZm9ybVBvc3RMbwogewogICAgIGNoZWNr
Rm9yUGVuZGluZ1ByZWxvYWRzKCk7CiAKLSAgICBwbGF0Zm9ybVN0cmF0ZWdpZXMoKS0+bG9hZGVy
U3RyYXRlZ3koKS0+cmVzb3VyY2VMb2FkU2NoZWR1bGVyKCktPnNlcnZlUGVuZGluZ1JlcXVlc3Rz
KCk7CisgICAgcGxhdGZvcm1TdHJhdGVnaWVzKCktPmxvYWRlclN0cmF0ZWd5KCktPnNlcnZlUGVu
ZGluZ1JlcXVlc3RzKCk7CiB9CiAKIHZvaWQgQ2FjaGVkUmVzb3VyY2VMb2FkZXI6OmluY3JlbWVu
dFJlcXVlc3RDb3VudChjb25zdCBDYWNoZWRSZXNvdXJjZSogcmVzKQpJbmRleDogU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vUGxhdGZvcm1TdHJhdGVnaWVzLmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vUGxhdGZvcm1TdHJhdGVnaWVzLmgJKHJldmlzaW9uIDE5Mjg4MCkK
KysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL1BsYXRmb3JtU3RyYXRlZ2llcy5oCSh3b3JraW5n
IGNvcHkpCkBAIC0yOCw2ICsyOCw3IEBACiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAorY2xhc3Mg
QmxvYlJlZ2lzdHJ5OwogY2xhc3MgQ29va2llc1N0cmF0ZWd5OwogY2xhc3MgTG9hZGVyU3RyYXRl
Z3k7CiBjbGFzcyBQYXN0ZWJvYXJkU3RyYXRlZ3k7CkBAIC02MywxMiArNjQsMTUgQEAgcHVibGlj
OgogICAgICAgICByZXR1cm4gbV9wbHVnaW5TdHJhdGVneTsKICAgICB9CiAKKyAgICBCbG9iUmVn
aXN0cnkqIGJsb2JSZWdpc3RyeSgpCisgICAgeworICAgICAgICBpZiAoIW1fYmxvYlJlZ2lzdHJ5
KQorICAgICAgICAgICAgbV9ibG9iUmVnaXN0cnkgPSBjcmVhdGVCbG9iUmVnaXN0cnkoKTsKKyAg
ICAgICAgcmV0dXJuIG1fYmxvYlJlZ2lzdHJ5OworICAgIH0KKwogcHJvdGVjdGVkOgogICAgIFBs
YXRmb3JtU3RyYXRlZ2llcygpCi0gICAgICAgIDogbV9jb29raWVzU3RyYXRlZ3kobnVsbHB0cikK
LSAgICAgICAgLCBtX2xvYWRlclN0cmF0ZWd5KG51bGxwdHIpCi0gICAgICAgICwgbV9wYXN0ZWJv
YXJkU3RyYXRlZ3kobnVsbHB0cikKLSAgICAgICAgLCBtX3BsdWdpblN0cmF0ZWd5KG51bGxwdHIp
CiAgICAgewogICAgIH0KIApAQCAtODEsMTEgKzg1LDEzIEBAIHByaXZhdGU6CiAgICAgdmlydHVh
bCBMb2FkZXJTdHJhdGVneSogY3JlYXRlTG9hZGVyU3RyYXRlZ3koKSA9IDA7CiAgICAgdmlydHVh
bCBQYXN0ZWJvYXJkU3RyYXRlZ3kqIGNyZWF0ZVBhc3RlYm9hcmRTdHJhdGVneSgpID0gMDsKICAg
ICB2aXJ0dWFsIFBsdWdpblN0cmF0ZWd5KiBjcmVhdGVQbHVnaW5TdHJhdGVneSgpID0gMDsKKyAg
ICB2aXJ0dWFsIEJsb2JSZWdpc3RyeSogY3JlYXRlQmxvYlJlZ2lzdHJ5KCkgPSAwOwogCi0gICAg
Q29va2llc1N0cmF0ZWd5KiBtX2Nvb2tpZXNTdHJhdGVneTsKLSAgICBMb2FkZXJTdHJhdGVneSog
bV9sb2FkZXJTdHJhdGVneTsKLSAgICBQYXN0ZWJvYXJkU3RyYXRlZ3kqIG1fcGFzdGVib2FyZFN0
cmF0ZWd5OwotICAgIFBsdWdpblN0cmF0ZWd5KiBtX3BsdWdpblN0cmF0ZWd5OworICAgIENvb2tp
ZXNTdHJhdGVneSogbV9jb29raWVzU3RyYXRlZ3kgeyB9OworICAgIExvYWRlclN0cmF0ZWd5KiBt
X2xvYWRlclN0cmF0ZWd5IHsgfTsKKyAgICBQYXN0ZWJvYXJkU3RyYXRlZ3kqIG1fcGFzdGVib2Fy
ZFN0cmF0ZWd5IHsgfTsKKyAgICBQbHVnaW5TdHJhdGVneSogbV9wbHVnaW5TdHJhdGVneSB7IH07
CisgICAgQmxvYlJlZ2lzdHJ5KiBtX2Jsb2JSZWdpc3RyeSB7IH07CiB9OwogCiBXRUJDT1JFX0VY
UE9SVCBQbGF0Zm9ybVN0cmF0ZWdpZXMqIHBsYXRmb3JtU3RyYXRlZ2llcygpOwpJbmRleDogU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9CbG9iUmVnaXN0cnkuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvQmxvYlJlZ2lzdHJ5LmNwcAkocmV2
aXNpb24gMTkyODgwKQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9CbG9iUmVn
aXN0cnkuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00MCw5ICs0MCw3IEBAIG5hbWVzcGFjZSBXZWJD
b3JlIHsKIEJsb2JSZWdpc3RyeSYgYmxvYlJlZ2lzdHJ5KCkKIHsKICAgICBBU1NFUlQoaXNNYWlu
VGhyZWFkKCkpOwotCi0gICAgc3RhdGljIEJsb2JSZWdpc3RyeSYgaW5zdGFuY2UgPSAqcGxhdGZv
cm1TdHJhdGVnaWVzKCktPmxvYWRlclN0cmF0ZWd5KCktPmNyZWF0ZUJsb2JSZWdpc3RyeSgpOwot
ICAgIHJldHVybiBpbnN0YW5jZTsKKyAgICByZXR1cm4gKnBsYXRmb3JtU3RyYXRlZ2llcygpLT5i
bG9iUmVnaXN0cnkoKTsKIH0KIAogQmxvYlJlZ2lzdHJ5Ojp+QmxvYlJlZ2lzdHJ5KCkKSW5kZXg6
IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvUmVzb3VyY2VSZXF1ZXN0QmFzZS5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvUmVzb3VyY2VSZXF1
ZXN0QmFzZS5oCShyZXZpc2lvbiAxOTI4ODApCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9u
ZXR3b3JrL1Jlc291cmNlUmVxdWVzdEJhc2UuaAkod29ya2luZyBjb3B5KQpAQCAtMjQ0LDcgKzI0
NCw3IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKICAgICAgICAgUmVzb3VyY2VSZXF1ZXN0QmFzZTo6
UmVxdWVzdGVyIHJlcXVlc3RlcjsKICAgICB9OwogICAgIAotICAgIHVuc2lnbmVkIGluaXRpYWxp
emVNYXhpbXVtSFRUUENvbm5lY3Rpb25Db3VudFBlckhvc3QoKTsKKyAgICBXRUJDT1JFX0VYUE9S
VCB1bnNpZ25lZCBpbml0aWFsaXplTWF4aW11bUhUVFBDb25uZWN0aW9uQ291bnRQZXJIb3N0KCk7
CiAjaWYgUExBVEZPUk0oSU9TKQogICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgaW5pdGlhbGl6ZUhU
VFBDb25uZWN0aW9uU2V0dGluZ3NPblN0YXJ0dXAoKTsKICNlbmRpZgpJbmRleDogU291cmNlL1dl
YkNvcmUvc3R5bGUvU3R5bGVSZXNvbHZlVHJlZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dl
YkNvcmUvc3R5bGUvU3R5bGVSZXNvbHZlVHJlZS5jcHAJKHJldmlzaW9uIDE5Mjg4MCkKKysrIFNv
dXJjZS9XZWJDb3JlL3N0eWxlL1N0eWxlUmVzb2x2ZVRyZWUuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC00Nyw3ICs0Nyw2IEBACiAjaW5jbHVkZSAiUmVuZGVyVGV4dC5oIgogI2luY2x1ZGUgIlJlbmRl
clRyZWVQb3NpdGlvbi5oIgogI2luY2x1ZGUgIlJlbmRlcldpZGdldC5oIgotI2luY2x1ZGUgIlJl
c291cmNlTG9hZFNjaGVkdWxlci5oIgogI2luY2x1ZGUgIlNldHRpbmdzLmgiCiAjaW5jbHVkZSAi
U2hhZG93Um9vdC5oIgogI2luY2x1ZGUgIlN0eWxlUmVzb2x2ZUZvckRvY3VtZW50LmgiCkBAIC05
NDQsNyArOTQzLDcgQEAgUG9zdFJlc29sdXRpb25DYWxsYmFja0Rpc2FibGVyOjpQb3N0UmVzbwog
ICAgICsrcmVzb2x1dGlvbk5lc3RpbmdEZXB0aDsKIAogICAgIGlmIChyZXNvbHV0aW9uTmVzdGlu
Z0RlcHRoID09IDEpCi0gICAgICAgIHBsYXRmb3JtU3RyYXRlZ2llcygpLT5sb2FkZXJTdHJhdGVn
eSgpLT5yZXNvdXJjZUxvYWRTY2hlZHVsZXIoKS0+c3VzcGVuZFBlbmRpbmdSZXF1ZXN0cygpOwor
ICAgICAgICBwbGF0Zm9ybVN0cmF0ZWdpZXMoKS0+bG9hZGVyU3RyYXRlZ3koKS0+c3VzcGVuZFBl
bmRpbmdSZXF1ZXN0cygpOwogCiAgICAgLy8gRklYTUU6IEl0J3Mgc3RyYW5nZSB0byBidWlsZCB0
aGlzIGludG8gdGhlIGRpc2FibGVyLgogICAgIHN1c3BlbmRNZW1vcnlDYWNoZUNsaWVudENhbGxz
KGRvY3VtZW50KTsKQEAgLTk1OSw3ICs5NTgsNyBAQCBQb3N0UmVzb2x1dGlvbkNhbGxiYWNrRGlz
YWJsZXI6On5Qb3N0UmVzCiAgICAgICAgICAgICBxdWV1ZVtpXSgpOwogICAgICAgICBxdWV1ZS5j
bGVhcigpOwogCi0gICAgICAgIHBsYXRmb3JtU3RyYXRlZ2llcygpLT5sb2FkZXJTdHJhdGVneSgp
LT5yZXNvdXJjZUxvYWRTY2hlZHVsZXIoKS0+cmVzdW1lUGVuZGluZ1JlcXVlc3RzKCk7CisgICAg
ICAgIHBsYXRmb3JtU3RyYXRlZ2llcygpLT5sb2FkZXJTdHJhdGVneSgpLT5yZXN1bWVQZW5kaW5n
UmVxdWVzdHMoKTsKICAgICB9CiAKICAgICAtLXJlc29sdXRpb25OZXN0aW5nRGVwdGg7CkluZGV4
OiBTb3VyY2UvV2ViS2l0Mi9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdDIv
Q2hhbmdlTG9nCShyZXZpc2lvbiAxOTI4ODApCisrKyBTb3VyY2UvV2ViS2l0Mi9DaGFuZ2VMb2cJ
KHdvcmtpbmcgY29weSkKQEAgLTEsMyArMSw0NyBAQAorMjAxNS0xMi0wMiAgQW50dGkgS29pdmlz
dG8gIDxhbnR0aUBhcHBsZS5jb20+CisKKyAgICAgICAgTW92ZSBSZXNvdXJjZUxvYWRTY2hlZHVs
ZXIgdG8gV2ViS2l0MQorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5j
Z2k/aWQ9MTUxNzQzCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAg
ICAgICAgKiBOZXR3b3JrUHJvY2Vzcy9OZXR3b3JrUHJvY2Vzc1BsYXRmb3JtU3RyYXRlZ2llcy5j
cHA6CisgICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtQcm9jZXNzUGxhdGZvcm1TdHJhdGVnaWVzOjpj
cmVhdGVDb29raWVzU3RyYXRlZ3kpOgorICAgICAgICAoV2ViS2l0OjpOZXR3b3JrUHJvY2Vzc1Bs
YXRmb3JtU3RyYXRlZ2llczo6Y3JlYXRlTG9hZGVyU3RyYXRlZ3kpOgorICAgICAgICAoV2ViS2l0
OjpOZXR3b3JrUHJvY2Vzc1BsYXRmb3JtU3RyYXRlZ2llczo6Y3JlYXRlUGFzdGVib2FyZFN0cmF0
ZWd5KToKKyAgICAgICAgKFdlYktpdDo6TmV0d29ya1Byb2Nlc3NQbGF0Zm9ybVN0cmF0ZWdpZXM6
OmNyZWF0ZVBsdWdpblN0cmF0ZWd5KToKKyAgICAgICAgKFdlYktpdDo6TmV0d29ya1Byb2Nlc3NQ
bGF0Zm9ybVN0cmF0ZWdpZXM6OmNyZWF0ZUJsb2JSZWdpc3RyeSk6CisgICAgICAgIChXZWJLaXQ6
Ok5ldHdvcmtQcm9jZXNzUGxhdGZvcm1TdHJhdGVnaWVzOjpyZXNvdXJjZUxvYWRTY2hlZHVsZXIp
OiBEZWxldGVkLgorICAgICAgICAoV2ViS2l0OjpOZXR3b3JrUHJvY2Vzc1BsYXRmb3JtU3RyYXRl
Z2llczo6bG9hZFJlc291cmNlU3luY2hyb25vdXNseSk6IERlbGV0ZWQuCisgICAgICAgICogTmV0
d29ya1Byb2Nlc3MvTmV0d29ya1Byb2Nlc3NQbGF0Zm9ybVN0cmF0ZWdpZXMuaDoKKyAgICAgICAg
KiBXZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0luamVjdGVkQnVuZGxlLmNwcDoKKyAgICAgICAg
KiBXZWJQcm9jZXNzL05ldHdvcmsvV2ViUmVzb3VyY2VMb2FkU2NoZWR1bGVyLmNwcDoKKyAgICAg
ICAgKFdlYktpdDo6V2ViUmVzb3VyY2VMb2FkU2NoZWR1bGVyOjp+V2ViUmVzb3VyY2VMb2FkU2No
ZWR1bGVyKToKKyAgICAgICAgKFdlYktpdDo6V2ViUmVzb3VyY2VMb2FkU2NoZWR1bGVyOjpsb2Fk
UmVzb3VyY2UpOgorICAgICAgICAoV2ViS2l0OjpXZWJSZXNvdXJjZUxvYWRTY2hlZHVsZXI6OnJl
c3VtZVBlbmRpbmdSZXF1ZXN0cyk6CisgICAgICAgIChXZWJLaXQ6OldlYlJlc291cmNlTG9hZFNj
aGVkdWxlcjo6bmV0d29ya1Byb2Nlc3NDcmFzaGVkKToKKyAgICAgICAgKFdlYktpdDo6V2ViUmVz
b3VyY2VMb2FkU2NoZWR1bGVyOjpsb2FkUmVzb3VyY2VTeW5jaHJvbm91c2x5KToKKyAgICAgICAg
KFdlYktpdDo6V2ViUmVzb3VyY2VMb2FkU2NoZWR1bGVyOjpjcmVhdGVQaW5nSGFuZGxlKToKKyAg
ICAgICAgKFdlYktpdDo6V2ViUmVzb3VyY2VMb2FkU2NoZWR1bGVyOjpzY2hlZHVsZVN1YnJlc291
cmNlTG9hZCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJLaXQ6OldlYlJlc291cmNlTG9hZFNjaGVk
dWxlcjo6c2V0U2VyaWFsTG9hZGluZ0VuYWJsZWQpOiBEZWxldGVkLgorICAgICAgICAqIFdlYlBy
b2Nlc3MvTmV0d29yay9XZWJSZXNvdXJjZUxvYWRTY2hlZHVsZXIuaDoKKyAgICAgICAgKFdlYktp
dDo6V2ViUmVzb3VyY2VMb2FkU2NoZWR1bGVyOjp3ZWJSZXNvdXJjZUxvYWRlckZvcklkZW50aWZp
ZXIpOgorICAgICAgICAqIFdlYlByb2Nlc3MvUGx1Z2lucy9QbHVnaW5WaWV3LmNwcDoKKyAgICAg
ICAgKFdlYktpdDo6UGx1Z2luVmlldzo6U3RyZWFtOjpzdGFydCk6CisgICAgICAgIChXZWJLaXQ6
OlBsdWdpblZpZXc6OlN0cmVhbTo6Y2FuY2VsKToKKyAgICAgICAgKiBXZWJQcm9jZXNzL1dlYkNv
cmVTdXBwb3J0L1dlYlBsYXRmb3JtU3RyYXRlZ2llcy5jcHA6CisgICAgICAgIChXZWJLaXQ6Oldl
YlBsYXRmb3JtU3RyYXRlZ2llczo6Y3JlYXRlTG9hZGVyU3RyYXRlZ3kpOgorICAgICAgICAoV2Vi
S2l0OjpXZWJQbGF0Zm9ybVN0cmF0ZWdpZXM6OmNyZWF0ZVBhc3RlYm9hcmRTdHJhdGVneSk6Cisg
ICAgICAgIChXZWJLaXQ6OldlYlBsYXRmb3JtU3RyYXRlZ2llczo6Y3JlYXRlUGx1Z2luU3RyYXRl
Z3kpOgorICAgICAgICAoV2ViS2l0OjpXZWJQbGF0Zm9ybVN0cmF0ZWdpZXM6OmNyZWF0ZUJsb2JS
ZWdpc3RyeSk6CisgICAgICAgIChXZWJLaXQ6OldlYlBsYXRmb3JtU3RyYXRlZ2llczo6Y29va2ll
c0ZvckRPTSk6CisgICAgICAgIChXZWJLaXQ6OldlYlBsYXRmb3JtU3RyYXRlZ2llczo6ZGVsZXRl
Q29va2llKToKKyAgICAgICAgKFdlYktpdDo6V2ViUGxhdGZvcm1TdHJhdGVnaWVzOjpyZWZyZXNo
UGx1Z2lucyk6CisgICAgICAgIChXZWJLaXQ6OldlYlBsYXRmb3JtU3RyYXRlZ2llczo6cmVzb3Vy
Y2VMb2FkU2NoZWR1bGVyKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYktpdDo6V2ViUGxhdGZvcm1T
dHJhdGVnaWVzOjpsb2FkUmVzb3VyY2VTeW5jaHJvbm91c2x5KTogRGVsZXRlZC4KKyAgICAgICAg
KFdlYktpdDo6V2ViUGxhdGZvcm1TdHJhdGVnaWVzOjpjcmVhdGVQaW5nSGFuZGxlKTogRGVsZXRl
ZC4KKyAgICAgICAgKiBXZWJQcm9jZXNzL1dlYkNvcmVTdXBwb3J0L1dlYlBsYXRmb3JtU3RyYXRl
Z2llcy5oOgorCiAyMDE1LTEyLTAxICBDYXJsb3MgR2FyY2lhIENhbXBvcyAgPGNnYXJjaWFAaWdh
bGlhLmNvbT4KIAogICAgICAgICBVbnJldmlld2VkLiBBZGQgbWlzc2luZyBpbnNwZWN0b3IgZmls
ZXMgdG8gdGhlIEdUSysgYnVpbGQuCkluZGV4OiBTb3VyY2UvV2ViS2l0Mi9OZXR3b3JrUHJvY2Vz
cy9OZXR3b3JrUHJvY2Vzc1BsYXRmb3JtU3RyYXRlZ2llcy5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1dlYktpdDIvTmV0d29ya1Byb2Nlc3MvTmV0d29ya1Byb2Nlc3NQbGF0Zm9ybVN0cmF0ZWdp
ZXMuY3BwCShyZXZpc2lvbiAxOTI4ODApCisrKyBTb3VyY2UvV2ViS2l0Mi9OZXR3b3JrUHJvY2Vz
cy9OZXR3b3JrUHJvY2Vzc1BsYXRmb3JtU3RyYXRlZ2llcy5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTQxLDMzICs0MSwyMiBAQCB2b2lkIE5ldHdvcmtQcm9jZXNzUGxhdGZvcm1TdHJhdGVnaWVzOjpp
CiAKIENvb2tpZXNTdHJhdGVneSogTmV0d29ya1Byb2Nlc3NQbGF0Zm9ybVN0cmF0ZWdpZXM6OmNy
ZWF0ZUNvb2tpZXNTdHJhdGVneSgpCiB7Ci0gICAgcmV0dXJuIDA7CisgICAgcmV0dXJuIG51bGxw
dHI7CiB9CiAKIExvYWRlclN0cmF0ZWd5KiBOZXR3b3JrUHJvY2Vzc1BsYXRmb3JtU3RyYXRlZ2ll
czo6Y3JlYXRlTG9hZGVyU3RyYXRlZ3koKQogewotICAgIHJldHVybiB0aGlzOworICAgIHJldHVy
biBudWxscHRyOwogfQogCiBQYXN0ZWJvYXJkU3RyYXRlZ3kqIE5ldHdvcmtQcm9jZXNzUGxhdGZv
cm1TdHJhdGVnaWVzOjpjcmVhdGVQYXN0ZWJvYXJkU3RyYXRlZ3koKQogewotICAgIHJldHVybiAw
OworICAgIHJldHVybiBudWxscHRyOwogfQogCiBQbHVnaW5TdHJhdGVneSogTmV0d29ya1Byb2Nl
c3NQbGF0Zm9ybVN0cmF0ZWdpZXM6OmNyZWF0ZVBsdWdpblN0cmF0ZWd5KCkKIHsKLSAgICByZXR1
cm4gMDsKLX0KLQotUmVzb3VyY2VMb2FkU2NoZWR1bGVyKiBOZXR3b3JrUHJvY2Vzc1BsYXRmb3Jt
U3RyYXRlZ2llczo6cmVzb3VyY2VMb2FkU2NoZWR1bGVyKCkKLXsKLSAgICBBU1NFUlRfTk9UX1JF
QUNIRUQoKTsKLSAgICByZXR1cm4gMDsKLX0KLQotdm9pZCBOZXR3b3JrUHJvY2Vzc1BsYXRmb3Jt
U3RyYXRlZ2llczo6bG9hZFJlc291cmNlU3luY2hyb25vdXNseShOZXR3b3JraW5nQ29udGV4dCos
IHVuc2lnbmVkIGxvbmcsIGNvbnN0IFJlc291cmNlUmVxdWVzdCYsIFN0b3JlZENyZWRlbnRpYWxz
LCBDbGllbnRDcmVkZW50aWFsUG9saWN5LCBSZXNvdXJjZUVycm9yJiwgUmVzb3VyY2VSZXNwb25z
ZSYsIFZlY3RvcjxjaGFyPiYpCi17Ci0gICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgcmV0
dXJuIG51bGxwdHI7CiB9CiAKIEJsb2JSZWdpc3RyeSogTmV0d29ya1Byb2Nlc3NQbGF0Zm9ybVN0
cmF0ZWdpZXM6OmNyZWF0ZUJsb2JSZWdpc3RyeSgpCkluZGV4OiBTb3VyY2UvV2ViS2l0Mi9OZXR3
b3JrUHJvY2Vzcy9OZXR3b3JrUHJvY2Vzc1BsYXRmb3JtU3RyYXRlZ2llcy5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9XZWJLaXQyL05ldHdvcmtQcm9jZXNzL05ldHdvcmtQcm9jZXNzUGxhdGZvcm1T
dHJhdGVnaWVzLmgJKHJldmlzaW9uIDE5Mjg4MCkKKysrIFNvdXJjZS9XZWJLaXQyL05ldHdvcmtQ
cm9jZXNzL05ldHdvcmtQcm9jZXNzUGxhdGZvcm1TdHJhdGVnaWVzLmgJKHdvcmtpbmcgY29weSkK
QEAgLTMxLDIxICszMSwxNyBAQAogCiBuYW1lc3BhY2UgV2ViS2l0IHsKIAotY2xhc3MgTmV0d29y
a1Byb2Nlc3NQbGF0Zm9ybVN0cmF0ZWdpZXMgOiBwdWJsaWMgV2ViQ29yZTo6UGxhdGZvcm1TdHJh
dGVnaWVzLCBwcml2YXRlIFdlYkNvcmU6OkxvYWRlclN0cmF0ZWd5IHsKK2NsYXNzIE5ldHdvcmtQ
cm9jZXNzUGxhdGZvcm1TdHJhdGVnaWVzIDogcHVibGljIFdlYkNvcmU6OlBsYXRmb3JtU3RyYXRl
Z2llcyB7CiBwdWJsaWM6CiAgICAgc3RhdGljIHZvaWQgaW5pdGlhbGl6ZSgpOwogICAgIAogcHJp
dmF0ZToKICAgICAvLyBXZWJDb3JlOjpQbGF0Zm9ybVN0cmF0ZWdpZXMKLSAgICB2aXJ0dWFsIFdl
YkNvcmU6OkNvb2tpZXNTdHJhdGVneSogY3JlYXRlQ29va2llc1N0cmF0ZWd5KCkgb3ZlcnJpZGU7
Ci0gICAgdmlydHVhbCBXZWJDb3JlOjpMb2FkZXJTdHJhdGVneSogY3JlYXRlTG9hZGVyU3RyYXRl
Z3koKSBvdmVycmlkZTsKLSAgICB2aXJ0dWFsIFdlYkNvcmU6OlBhc3RlYm9hcmRTdHJhdGVneSog
Y3JlYXRlUGFzdGVib2FyZFN0cmF0ZWd5KCkgb3ZlcnJpZGU7Ci0gICAgdmlydHVhbCBXZWJDb3Jl
OjpQbHVnaW5TdHJhdGVneSogY3JlYXRlUGx1Z2luU3RyYXRlZ3koKSBvdmVycmlkZTsKLQotICAg
IC8vIFdlYkNvcmU6OkxvYWRlclN0cmF0ZWd5Ci0gICAgdmlydHVhbCBXZWJDb3JlOjpSZXNvdXJj
ZUxvYWRTY2hlZHVsZXIqIHJlc291cmNlTG9hZFNjaGVkdWxlcigpIG92ZXJyaWRlOwotICAgIHZp
cnR1YWwgdm9pZCBsb2FkUmVzb3VyY2VTeW5jaHJvbm91c2x5KFdlYkNvcmU6Ok5ldHdvcmtpbmdD
b250ZXh0KiwgdW5zaWduZWQgbG9uZyByZXNvdXJjZUxvYWRJZGVudGlmaWVyLCBjb25zdCBXZWJD
b3JlOjpSZXNvdXJjZVJlcXVlc3QmLCBXZWJDb3JlOjpTdG9yZWRDcmVkZW50aWFscywgV2ViQ29y
ZTo6Q2xpZW50Q3JlZGVudGlhbFBvbGljeSwgV2ViQ29yZTo6UmVzb3VyY2VFcnJvciYsIFdlYkNv
cmU6OlJlc291cmNlUmVzcG9uc2UmLCBWZWN0b3I8Y2hhcj4mIGRhdGEpIG92ZXJyaWRlOwotICAg
IHZpcnR1YWwgV2ViQ29yZTo6QmxvYlJlZ2lzdHJ5KiBjcmVhdGVCbG9iUmVnaXN0cnkoKSBvdmVy
cmlkZTsKKyAgICBXZWJDb3JlOjpDb29raWVzU3RyYXRlZ3kqIGNyZWF0ZUNvb2tpZXNTdHJhdGVn
eSgpIG92ZXJyaWRlOworICAgIFdlYkNvcmU6OkxvYWRlclN0cmF0ZWd5KiBjcmVhdGVMb2FkZXJT
dHJhdGVneSgpIG92ZXJyaWRlOworICAgIFdlYkNvcmU6OlBhc3RlYm9hcmRTdHJhdGVneSogY3Jl
YXRlUGFzdGVib2FyZFN0cmF0ZWd5KCkgb3ZlcnJpZGU7CisgICAgV2ViQ29yZTo6UGx1Z2luU3Ry
YXRlZ3kqIGNyZWF0ZVBsdWdpblN0cmF0ZWd5KCkgb3ZlcnJpZGU7CisgICAgV2ViQ29yZTo6Qmxv
YlJlZ2lzdHJ5KiBjcmVhdGVCbG9iUmVnaXN0cnkoKSBvdmVycmlkZTsKIH07CiAKIH0gLy8gbmFt
ZXNwYWNlIFdlYktpdApJbmRleDogU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9JbmplY3RlZEJ1
bmRsZS9JbmplY3RlZEJ1bmRsZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdDIvV2Vi
UHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9JbmplY3RlZEJ1bmRsZS5jcHAJKHJldmlzaW9uIDE5Mjg4
MCkKKysrIFNvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvSW5qZWN0ZWRC
dW5kbGUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC02Niw3ICs2Niw2IEBACiAjaW5jbHVkZSA8V2Vi
Q29yZS9QYWdlR3JvdXAuaD4KICNpbmNsdWRlIDxXZWJDb3JlL1ByaW50Q29udGV4dC5oPgogI2lu
Y2x1ZGUgPFdlYkNvcmUvUmVzb3VyY2VIYW5kbGUuaD4KLSNpbmNsdWRlIDxXZWJDb3JlL1Jlc291
cmNlTG9hZFNjaGVkdWxlci5oPgogI2luY2x1ZGUgPFdlYkNvcmUvU2NyaXB0Q29udHJvbGxlci5o
PgogI2luY2x1ZGUgPFdlYkNvcmUvU2VjdXJpdHlPcmlnaW4uaD4KICNpbmNsdWRlIDxXZWJDb3Jl
L1NlY3VyaXR5UG9saWN5Lmg+CkluZGV4OiBTb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL05ldHdv
cmsvV2ViUmVzb3VyY2VMb2FkU2NoZWR1bGVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
S2l0Mi9XZWJQcm9jZXNzL05ldHdvcmsvV2ViUmVzb3VyY2VMb2FkU2NoZWR1bGVyLmNwcAkocmV2
aXNpb24gMTkyODgwKQorKysgU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9OZXR3b3JrL1dlYlJl
c291cmNlTG9hZFNjaGVkdWxlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI2LDYgKzI2LDcgQEAK
ICNpbmNsdWRlICJjb25maWcuaCIKICNpbmNsdWRlICJXZWJSZXNvdXJjZUxvYWRTY2hlZHVsZXIu
aCIKIAorI2luY2x1ZGUgIkhhbmdEZXRlY3Rpb25EaXNhYmxlci5oIgogI2luY2x1ZGUgIkxvZ2dp
bmcuaCIKICNpbmNsdWRlICJOZXR3b3JrQ29ubmVjdGlvblRvV2ViUHJvY2Vzc01lc3NhZ2VzLmgi
CiAjaW5jbHVkZSAiTmV0d29ya1Byb2Nlc3NDb25uZWN0aW9uLmgiCkBAIC0zNSw2ICszNiw3IEBA
CiAjaW5jbHVkZSAiV2ViRXJyb3JzLmgiCiAjaW5jbHVkZSAiV2ViRnJhbWUuaCIKICNpbmNsdWRl
ICJXZWJGcmFtZUxvYWRlckNsaWVudC5oIgorI2luY2x1ZGUgIldlYkZyYW1lTmV0d29ya2luZ0Nv
bnRleHQuaCIKICNpbmNsdWRlICJXZWJQYWdlLmgiCiAjaW5jbHVkZSAiV2ViUHJvY2Vzcy5oIgog
I2luY2x1ZGUgIldlYlJlc291cmNlTG9hZGVyLmgiCkBAIC00NSw2ICs0Nyw3IEBACiAjaW5jbHVk
ZSA8V2ViQ29yZS9GcmFtZS5oPgogI2luY2x1ZGUgPFdlYkNvcmUvRnJhbWVMb2FkZXIuaD4KICNp
bmNsdWRlIDxXZWJDb3JlL05ldHNjYXBlUGx1Z0luU3RyZWFtTG9hZGVyLmg+CisjaW5jbHVkZSA8
V2ViQ29yZS9QbGF0Zm9ybVN0cmF0ZWdpZXMuaD4KICNpbmNsdWRlIDxXZWJDb3JlL1JlZmVycmVy
UG9saWN5Lmg+CiAjaW5jbHVkZSA8V2ViQ29yZS9SZXNvdXJjZUxvYWRlci5oPgogI2luY2x1ZGUg
PFdlYkNvcmUvU2Vzc2lvbklELmg+CkBAIC02NSw3ICs2OCw3IEBAIFdlYlJlc291cmNlTG9hZFNj
aGVkdWxlcjo6fldlYlJlc291cmNlTG8KIHsKIH0KIAotUmVmUHRyPFN1YnJlc291cmNlTG9hZGVy
PiBXZWJSZXNvdXJjZUxvYWRTY2hlZHVsZXI6OnNjaGVkdWxlU3VicmVzb3VyY2VMb2FkKEZyYW1l
KiBmcmFtZSwgQ2FjaGVkUmVzb3VyY2UqIHJlc291cmNlLCBjb25zdCBSZXNvdXJjZVJlcXVlc3Qm
IHJlcXVlc3QsIGNvbnN0IFJlc291cmNlTG9hZGVyT3B0aW9ucyYgb3B0aW9ucykKK1JlZlB0cjxT
dWJyZXNvdXJjZUxvYWRlcj4gV2ViUmVzb3VyY2VMb2FkU2NoZWR1bGVyOjpsb2FkUmVzb3VyY2Uo
RnJhbWUqIGZyYW1lLCBDYWNoZWRSZXNvdXJjZSogcmVzb3VyY2UsIGNvbnN0IFJlc291cmNlUmVx
dWVzdCYgcmVxdWVzdCwgY29uc3QgUmVzb3VyY2VMb2FkZXJPcHRpb25zJiBvcHRpb25zKQogewog
ICAgIFJlZlB0cjxTdWJyZXNvdXJjZUxvYWRlcj4gbG9hZGVyID0gU3VicmVzb3VyY2VMb2FkZXI6
OmNyZWF0ZShmcmFtZSwgcmVzb3VyY2UsIHJlcXVlc3QsIG9wdGlvbnMpOwogICAgIGlmIChsb2Fk
ZXIpCkBAIC0yNjksMTEgKzI3Miw2IEBAIHZvaWQgV2ViUmVzb3VyY2VMb2FkU2NoZWR1bGVyOjpy
ZXN1bWVQZW4KICAgICAvLyBOZXR3b3JrIHByb2Nlc3MgZG9lcyBrZWVwIHJlcXVlc3RzIGluIHBl
bmRpbmcgc3RhdGUuCiB9CiAKLXZvaWQgV2ViUmVzb3VyY2VMb2FkU2NoZWR1bGVyOjpzZXRTZXJp
YWxMb2FkaW5nRW5hYmxlZChib29sKQotewotICAgIC8vIE5ldHdvcmsgcHJvY2VzcyBkb2VzIG5v
dCByZW9yZGVyIGxvYWRzLgotfQotCiB2b2lkIFdlYlJlc291cmNlTG9hZFNjaGVkdWxlcjo6bmV0
d29ya1Byb2Nlc3NDcmFzaGVkKCkKIHsKICAgICBIYXNoTWFwPHVuc2lnbmVkIGxvbmcsIFJlZlB0
cjxXZWJSZXNvdXJjZUxvYWRlcj4+OjppdGVyYXRvciBlbmQgPSBtX3dlYlJlc291cmNlTG9hZGVy
cy5lbmQoKTsKQEAgLTI4Myw0ICsyODEsNTcgQEAgdm9pZCBXZWJSZXNvdXJjZUxvYWRTY2hlZHVs
ZXI6Om5ldHdvcmtQcgogICAgIG1fd2ViUmVzb3VyY2VMb2FkZXJzLmNsZWFyKCk7CiB9CiAKK3Zv
aWQgV2ViUmVzb3VyY2VMb2FkU2NoZWR1bGVyOjpsb2FkUmVzb3VyY2VTeW5jaHJvbm91c2x5KE5l
dHdvcmtpbmdDb250ZXh0KiBjb250ZXh0LCB1bnNpZ25lZCBsb25nIHJlc291cmNlTG9hZElkZW50
aWZpZXIsIGNvbnN0IFJlc291cmNlUmVxdWVzdCYgcmVxdWVzdCwgU3RvcmVkQ3JlZGVudGlhbHMg
c3RvcmVkQ3JlZGVudGlhbHMsIENsaWVudENyZWRlbnRpYWxQb2xpY3kgY2xpZW50Q3JlZGVudGlh
bFBvbGljeSwgUmVzb3VyY2VFcnJvciYgZXJyb3IsIFJlc291cmNlUmVzcG9uc2UmIHJlc3BvbnNl
LCBWZWN0b3I8Y2hhcj4mIGRhdGEpCit7CisgICAgV2ViRnJhbWVOZXR3b3JraW5nQ29udGV4dCog
d2ViQ29udGV4dCA9IHN0YXRpY19jYXN0PFdlYkZyYW1lTmV0d29ya2luZ0NvbnRleHQqPihjb250
ZXh0KTsKKyAgICAvLyBGSVhNRTogU29tZSBlbnRpdGllcyBpbiBXZWJDb3JlIHVzZSBXZWJDb3Jl
J3MgIkVtcHR5RnJhbWVMb2FkZXJDbGllbnQiIGluc3RlYWQgb2YgaGF2aW5nIGEgcHJvcGVyIFdl
YkZyYW1lTG9hZGVyQ2xpZW50LgorICAgIC8vIEVtcHR5RnJhbWVMb2FkZXJDbGllbnQgc2hvdWxk
bid0IGV4aXN0IGFuZCBldmVyeXRoaW5nIHNob3VsZCBiZSB1c2luZyBhIFdlYkZyYW1lTG9hZGVy
Q2xpZW50LAorICAgIC8vIGJ1dCBpbiB0aGUgbWVhbnRpbWUgd2UgaGF2ZSB0byBtYWtlIHN1cmUg
bm90IHRvIG1pcy1jYXN0LgorICAgIFdlYkZyYW1lTG9hZGVyQ2xpZW50KiB3ZWJGcmFtZUxvYWRl
ckNsaWVudCA9IHdlYkNvbnRleHQtPndlYkZyYW1lTG9hZGVyQ2xpZW50KCk7CisgICAgV2ViRnJh
bWUqIHdlYkZyYW1lID0gd2ViRnJhbWVMb2FkZXJDbGllbnQgPyB3ZWJGcmFtZUxvYWRlckNsaWVu
dC0+d2ViRnJhbWUoKSA6IDA7CisgICAgV2ViUGFnZSogd2ViUGFnZSA9IHdlYkZyYW1lID8gd2Vi
RnJhbWUtPnBhZ2UoKSA6IDA7CisKKyAgICBOZXR3b3JrUmVzb3VyY2VMb2FkUGFyYW1ldGVycyBs
b2FkUGFyYW1ldGVyczsKKyAgICBsb2FkUGFyYW1ldGVycy5pZGVudGlmaWVyID0gcmVzb3VyY2VM
b2FkSWRlbnRpZmllcjsKKyAgICBsb2FkUGFyYW1ldGVycy53ZWJQYWdlSUQgPSB3ZWJQYWdlID8g
d2ViUGFnZS0+cGFnZUlEKCkgOiAwOworICAgIGxvYWRQYXJhbWV0ZXJzLndlYkZyYW1lSUQgPSB3
ZWJGcmFtZSA/IHdlYkZyYW1lLT5mcmFtZUlEKCkgOiAwOworICAgIGxvYWRQYXJhbWV0ZXJzLnNl
c3Npb25JRCA9IHdlYlBhZ2UgPyB3ZWJQYWdlLT5zZXNzaW9uSUQoKSA6IFNlc3Npb25JRDo6ZGVm
YXVsdFNlc3Npb25JRCgpOworICAgIGxvYWRQYXJhbWV0ZXJzLnJlcXVlc3QgPSByZXF1ZXN0Owor
ICAgIGxvYWRQYXJhbWV0ZXJzLmNvbnRlbnRTbmlmZmluZ1BvbGljeSA9IFNuaWZmQ29udGVudDsK
KyAgICBsb2FkUGFyYW1ldGVycy5hbGxvd1N0b3JlZENyZWRlbnRpYWxzID0gc3RvcmVkQ3JlZGVu
dGlhbHM7CisgICAgbG9hZFBhcmFtZXRlcnMuY2xpZW50Q3JlZGVudGlhbFBvbGljeSA9IGNsaWVu
dENyZWRlbnRpYWxQb2xpY3k7CisgICAgbG9hZFBhcmFtZXRlcnMuc2hvdWxkQ2xlYXJSZWZlcnJl
ck9uSFRUUFNUb0hUVFBSZWRpcmVjdCA9IGNvbnRleHQtPnNob3VsZENsZWFyUmVmZXJyZXJPbkhU
VFBTVG9IVFRQUmVkaXJlY3QoKTsKKworICAgIGRhdGEucmVzaXplKDApOworCisgICAgSGFuZ0Rl
dGVjdGlvbkRpc2FibGVyIGhhbmdEZXRlY3Rpb25EaXNhYmxlcjsKKworICAgIGlmICghV2ViUHJv
Y2Vzczo6c2luZ2xldG9uKCkubmV0d29ya0Nvbm5lY3Rpb24oKS0+Y29ubmVjdGlvbigpLT5zZW5k
U3luYyhNZXNzYWdlczo6TmV0d29ya0Nvbm5lY3Rpb25Ub1dlYlByb2Nlc3M6OlBlcmZvcm1TeW5j
aHJvbm91c0xvYWQobG9hZFBhcmFtZXRlcnMpLCBNZXNzYWdlczo6TmV0d29ya0Nvbm5lY3Rpb25U
b1dlYlByb2Nlc3M6OlBlcmZvcm1TeW5jaHJvbm91c0xvYWQ6OlJlcGx5KGVycm9yLCByZXNwb25z
ZSwgZGF0YSksIDApKSB7CisgICAgICAgIHJlc3BvbnNlID0gUmVzb3VyY2VSZXNwb25zZSgpOwor
ICAgICAgICBlcnJvciA9IGludGVybmFsRXJyb3IocmVxdWVzdC51cmwoKSk7CisgICAgfQorfQor
Cit2b2lkIFdlYlJlc291cmNlTG9hZFNjaGVkdWxlcjo6Y3JlYXRlUGluZ0hhbmRsZShOZXR3b3Jr
aW5nQ29udGV4dCogbmV0d29ya2luZ0NvbnRleHQsIFJlc291cmNlUmVxdWVzdCYgcmVxdWVzdCwg
Ym9vbCBzaG91bGRVc2VDcmVkZW50aWFsU3RvcmFnZSkKK3sKKyAgICAvLyBJdCdzIHBvc3NpYmxl
IHRoYXQgY2FsbCB0byBjcmVhdGVQaW5nSGFuZGxlIG1pZ2h0IGJlIG1hZGUgZHVyaW5nIGluaXRp
YWwgZW1wdHkgRG9jdW1lbnQgY3JlYXRpb24gYmVmb3JlIGEgTmV0d29ya2luZ0NvbnRleHQgZXhp
c3RzLgorICAgIC8vIEl0IGlzIG5vdCBjbGVhciB0aGF0IHdlIHNob3VsZCBzZW5kIHBpbmcgbG9h
ZHMgZHVyaW5nIHRoYXQgcHJvY2VzcyBhbnl3YXlzLgorICAgIGlmICghbmV0d29ya2luZ0NvbnRl
eHQpCisgICAgICAgIHJldHVybjsKKworICAgIFdlYkZyYW1lTmV0d29ya2luZ0NvbnRleHQqIHdl
YkNvbnRleHQgPSBzdGF0aWNfY2FzdDxXZWJGcmFtZU5ldHdvcmtpbmdDb250ZXh0Kj4obmV0d29y
a2luZ0NvbnRleHQpOworICAgIFdlYkZyYW1lTG9hZGVyQ2xpZW50KiB3ZWJGcmFtZUxvYWRlckNs
aWVudCA9IHdlYkNvbnRleHQtPndlYkZyYW1lTG9hZGVyQ2xpZW50KCk7CisgICAgV2ViRnJhbWUq
IHdlYkZyYW1lID0gd2ViRnJhbWVMb2FkZXJDbGllbnQgPyB3ZWJGcmFtZUxvYWRlckNsaWVudC0+
d2ViRnJhbWUoKSA6IG51bGxwdHI7CisgICAgV2ViUGFnZSogd2ViUGFnZSA9IHdlYkZyYW1lID8g
d2ViRnJhbWUtPnBhZ2UoKSA6IG51bGxwdHI7CisgICAgCisgICAgTmV0d29ya1Jlc291cmNlTG9h
ZFBhcmFtZXRlcnMgbG9hZFBhcmFtZXRlcnM7CisgICAgbG9hZFBhcmFtZXRlcnMucmVxdWVzdCA9
IHJlcXVlc3Q7CisgICAgbG9hZFBhcmFtZXRlcnMuc2Vzc2lvbklEID0gd2ViUGFnZSA/IHdlYlBh
Z2UtPnNlc3Npb25JRCgpIDogU2Vzc2lvbklEOjpkZWZhdWx0U2Vzc2lvbklEKCk7CisgICAgbG9h
ZFBhcmFtZXRlcnMuYWxsb3dTdG9yZWRDcmVkZW50aWFscyA9IHNob3VsZFVzZUNyZWRlbnRpYWxT
dG9yYWdlID8gQWxsb3dTdG9yZWRDcmVkZW50aWFscyA6IERvTm90QWxsb3dTdG9yZWRDcmVkZW50
aWFsczsKKyAgICBsb2FkUGFyYW1ldGVycy5zaG91bGRDbGVhclJlZmVycmVyT25IVFRQU1RvSFRU
UFJlZGlyZWN0ID0gbmV0d29ya2luZ0NvbnRleHQtPnNob3VsZENsZWFyUmVmZXJyZXJPbkhUVFBT
VG9IVFRQUmVkaXJlY3QoKTsKKworICAgIFdlYlByb2Nlc3M6OnNpbmdsZXRvbigpLm5ldHdvcmtD
b25uZWN0aW9uKCktPmNvbm5lY3Rpb24oKS0+c2VuZChNZXNzYWdlczo6TmV0d29ya0Nvbm5lY3Rp
b25Ub1dlYlByb2Nlc3M6OkxvYWRQaW5nKGxvYWRQYXJhbWV0ZXJzKSwgMCk7Cit9CisKKwogfSAv
LyBuYW1lc3BhY2UgV2ViS2l0CkluZGV4OiBTb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL05ldHdv
cmsvV2ViUmVzb3VyY2VMb2FkU2NoZWR1bGVyLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktp
dDIvV2ViUHJvY2Vzcy9OZXR3b3JrL1dlYlJlc291cmNlTG9hZFNjaGVkdWxlci5oCShyZXZpc2lv
biAxOTI4ODApCisrKyBTb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL05ldHdvcmsvV2ViUmVzb3Vy
Y2VMb2FkU2NoZWR1bGVyLmgJKHdvcmtpbmcgY29weSkKQEAgLTI3LDI1ICsyNywyNiBAQAogI2Rl
ZmluZSBXZWJSZXNvdXJjZUxvYWRTY2hlZHVsZXJfaAogCiAjaW5jbHVkZSAiV2ViUmVzb3VyY2VM
b2FkZXIuaCIKLSNpbmNsdWRlIDxXZWJDb3JlL1Jlc291cmNlTG9hZFByaW9yaXR5Lmg+Ci0jaW5j
bHVkZSA8V2ViQ29yZS9SZXNvdXJjZUxvYWRTY2hlZHVsZXIuaD4KKyNpbmNsdWRlIDxXZWJDb3Jl
L0xvYWRlclN0cmF0ZWd5Lmg+CiAjaW5jbHVkZSA8V2ViQ29yZS9SZXNvdXJjZUxvYWRlci5oPgor
I2luY2x1ZGUgPHd0Zi9IYXNoU2V0Lmg+CiAjaW5jbHVkZSA8d3RmL1J1bkxvb3AuaD4KIAogbmFt
ZXNwYWNlIFdlYktpdCB7CiAKIGNsYXNzIE5ldHdvcmtQcm9jZXNzQ29ubmVjdGlvbjsKK2NsYXNz
IFdlYlJlc291cmNlTG9hZFNjaGVkdWxlcjsKIHR5cGVkZWYgdWludDY0X3QgUmVzb3VyY2VMb2Fk
SWRlbnRpZmllcjsKIAotY2xhc3MgV2ViUmVzb3VyY2VMb2FkU2NoZWR1bGVyIDogcHVibGljIFdl
YkNvcmU6OlJlc291cmNlTG9hZFNjaGVkdWxlciB7CitjbGFzcyBXZWJSZXNvdXJjZUxvYWRTY2hl
ZHVsZXIgOiBwdWJsaWMgV2ViQ29yZTo6TG9hZGVyU3RyYXRlZ3kgewogICAgIFdURl9NQUtFX05P
TkNPUFlBQkxFKFdlYlJlc291cmNlTG9hZFNjaGVkdWxlcik7IFdURl9NQUtFX0ZBU1RfQUxMT0NB
VEVEOwogcHVibGljOgogICAgIFdlYlJlc291cmNlTG9hZFNjaGVkdWxlcigpOwogICAgIHZpcnR1
YWwgfldlYlJlc291cmNlTG9hZFNjaGVkdWxlcigpOwogICAgIAotICAgIHZpcnR1YWwgUmVmUHRy
PFdlYkNvcmU6OlN1YnJlc291cmNlTG9hZGVyPiBzY2hlZHVsZVN1YnJlc291cmNlTG9hZChXZWJD
b3JlOjpGcmFtZSosIFdlYkNvcmU6OkNhY2hlZFJlc291cmNlKiwgY29uc3QgV2ViQ29yZTo6UmVz
b3VyY2VSZXF1ZXN0JiwgY29uc3QgV2ViQ29yZTo6UmVzb3VyY2VMb2FkZXJPcHRpb25zJikgb3Zl
cnJpZGU7Ci0gICAgdmlydHVhbCBSZWZQdHI8V2ViQ29yZTo6TmV0c2NhcGVQbHVnSW5TdHJlYW1M
b2FkZXI+IHNjaGVkdWxlUGx1Z2luU3RyZWFtTG9hZChXZWJDb3JlOjpGcmFtZSosIFdlYkNvcmU6
Ok5ldHNjYXBlUGx1Z0luU3RyZWFtTG9hZGVyQ2xpZW50KiwgY29uc3QgV2ViQ29yZTo6UmVzb3Vy
Y2VSZXF1ZXN0Jikgb3ZlcnJpZGU7Ci0gICAgCisgICAgdmlydHVhbCBSZWZQdHI8V2ViQ29yZTo6
U3VicmVzb3VyY2VMb2FkZXI+IGxvYWRSZXNvdXJjZShXZWJDb3JlOjpGcmFtZSosIFdlYkNvcmU6
OkNhY2hlZFJlc291cmNlKiwgY29uc3QgV2ViQ29yZTo6UmVzb3VyY2VSZXF1ZXN0JiwgY29uc3Qg
V2ViQ29yZTo6UmVzb3VyY2VMb2FkZXJPcHRpb25zJikgb3ZlcnJpZGU7CisgICAgdmlydHVhbCB2
b2lkIGxvYWRSZXNvdXJjZVN5bmNocm9ub3VzbHkoV2ViQ29yZTo6TmV0d29ya2luZ0NvbnRleHQq
LCB1bnNpZ25lZCBsb25nIHJlc291cmNlTG9hZElkZW50aWZpZXIsIGNvbnN0IFdlYkNvcmU6OlJl
c291cmNlUmVxdWVzdCYsIFdlYkNvcmU6OlN0b3JlZENyZWRlbnRpYWxzLCBXZWJDb3JlOjpDbGll
bnRDcmVkZW50aWFsUG9saWN5LCBXZWJDb3JlOjpSZXNvdXJjZUVycm9yJiwgV2ViQ29yZTo6UmVz
b3VyY2VSZXNwb25zZSYsIFZlY3RvcjxjaGFyPiYgZGF0YSkgb3ZlcnJpZGU7CisKICAgICB2aXJ0
dWFsIHZvaWQgcmVtb3ZlKFdlYkNvcmU6OlJlc291cmNlTG9hZGVyKikgb3ZlcnJpZGU7CiAgICAg
dmlydHVhbCB2b2lkIHNldERlZmVyc0xvYWRpbmcoV2ViQ29yZTo6UmVzb3VyY2VMb2FkZXIqLCBi
b29sKSBvdmVycmlkZTsKICAgICB2aXJ0dWFsIHZvaWQgY3Jvc3NPcmlnaW5SZWRpcmVjdFJlY2Vp
dmVkKFdlYkNvcmU6OlJlc291cmNlTG9hZGVyKiwgY29uc3QgV2ViQ29yZTo6VVJMJiByZWRpcmVj
dFVSTCkgb3ZlcnJpZGU7CkBAIC01NSw5ICs1NiwxMCBAQCBwdWJsaWM6CiAgICAgdmlydHVhbCB2
b2lkIHN1c3BlbmRQZW5kaW5nUmVxdWVzdHMoKSBvdmVycmlkZTsKICAgICB2aXJ0dWFsIHZvaWQg
cmVzdW1lUGVuZGluZ1JlcXVlc3RzKCkgb3ZlcnJpZGU7CiAKLSAgICB2aXJ0dWFsIHZvaWQgc2V0
U2VyaWFsTG9hZGluZ0VuYWJsZWQoYm9vbCkgb3ZlcnJpZGU7CisgICAgdmlydHVhbCB2b2lkIGNy
ZWF0ZVBpbmdIYW5kbGUoV2ViQ29yZTo6TmV0d29ya2luZ0NvbnRleHQqLCBXZWJDb3JlOjpSZXNv
dXJjZVJlcXVlc3QmLCBib29sIHNob3VsZFVzZUNyZWRlbnRpYWxTdG9yYWdlKSBvdmVycmlkZTsK
IAogICAgIFdlYlJlc291cmNlTG9hZGVyKiB3ZWJSZXNvdXJjZUxvYWRlckZvcklkZW50aWZpZXIo
UmVzb3VyY2VMb2FkSWRlbnRpZmllciBpZGVudGlmaWVyKSBjb25zdCB7IHJldHVybiBtX3dlYlJl
c291cmNlTG9hZGVycy5nZXQoaWRlbnRpZmllcik7IH0KKyAgICBSZWZQdHI8V2ViQ29yZTo6TmV0
c2NhcGVQbHVnSW5TdHJlYW1Mb2FkZXI+IHNjaGVkdWxlUGx1Z2luU3RyZWFtTG9hZChXZWJDb3Jl
OjpGcmFtZSosIFdlYkNvcmU6Ok5ldHNjYXBlUGx1Z0luU3RyZWFtTG9hZGVyQ2xpZW50KiwgY29u
c3QgV2ViQ29yZTo6UmVzb3VyY2VSZXF1ZXN0Jik7CiAKICAgICB2b2lkIG5ldHdvcmtQcm9jZXNz
Q3Jhc2hlZCgpOwogCkluZGV4OiBTb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1BsdWdpbnMvUGx1
Z2luVmlldy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9QbHVn
aW5zL1BsdWdpblZpZXcuY3BwCShyZXZpc2lvbiAxOTI4ODApCisrKyBTb3VyY2UvV2ViS2l0Mi9X
ZWJQcm9jZXNzL1BsdWdpbnMvUGx1Z2luVmlldy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM0LDYg
KzM0LDcgQEAKICNpbmNsdWRlICJXZWJQYWdlLmgiCiAjaW5jbHVkZSAiV2ViUGFnZVByb3h5TWVz
c2FnZXMuaCIKICNpbmNsdWRlICJXZWJQcm9jZXNzLmgiCisjaW5jbHVkZSAiV2ViUmVzb3VyY2VM
b2FkU2NoZWR1bGVyLmgiCiAjaW5jbHVkZSA8V2ViQ29yZS9CaXRtYXBJbWFnZS5oPgogI2luY2x1
ZGUgPFdlYkNvcmUvQ2hyb21lLmg+CiAjaW5jbHVkZSA8V2ViQ29yZS9Db29raWVKYXIuaD4KQEAg
LTYyLDcgKzYzLDYgQEAKICNpbmNsdWRlIDxXZWJDb3JlL1Byb3RlY3Rpb25TcGFjZS5oPgogI2lu
Y2x1ZGUgPFdlYkNvcmUvUHJveHlTZXJ2ZXIuaD4KICNpbmNsdWRlIDxXZWJDb3JlL1JlbmRlckVt
YmVkZGVkT2JqZWN0Lmg+Ci0jaW5jbHVkZSA8V2ViQ29yZS9SZXNvdXJjZUxvYWRTY2hlZHVsZXIu
aD4KICNpbmNsdWRlIDxXZWJDb3JlL1NjcmlwdENvbnRyb2xsZXIuaD4KICNpbmNsdWRlIDxXZWJD
b3JlL1Njcm9sbFZpZXcuaD4KICNpbmNsdWRlIDxXZWJDb3JlL1NlY3VyaXR5T3JpZ2luLmg+CkBA
IC0xNjAsNyArMTYwLDcgQEAgdm9pZCBQbHVnaW5WaWV3OjpTdHJlYW06OnN0YXJ0KCkKICAgICBG
cmFtZSogZnJhbWUgPSBtX3BsdWdpblZpZXctPm1fcGx1Z2luRWxlbWVudC0+ZG9jdW1lbnQoKS5m
cmFtZSgpOwogICAgIEFTU0VSVChmcmFtZSk7CiAKLSAgICBtX2xvYWRlciA9IHJlc291cmNlTG9h
ZFNjaGVkdWxlcigpLT5zY2hlZHVsZVBsdWdpblN0cmVhbUxvYWQoZnJhbWUsIHRoaXMsIG1fcmVx
dWVzdCk7CisgICAgbV9sb2FkZXIgPSBXZWJQcm9jZXNzOjpzaW5nbGV0b24oKS53ZWJSZXNvdXJj
ZUxvYWRTY2hlZHVsZXIoKS5zY2hlZHVsZVBsdWdpblN0cmVhbUxvYWQoZnJhbWUsIHRoaXMsIG1f
cmVxdWVzdCk7CiB9CiAKIHZvaWQgUGx1Z2luVmlldzo6U3RyZWFtOjpjYW5jZWwoKQpJbmRleDog
U291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJDb3JlU3VwcG9ydC9XZWJQbGF0Zm9ybVN0cmF0
ZWdpZXMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViQ29y
ZVN1cHBvcnQvV2ViUGxhdGZvcm1TdHJhdGVnaWVzLmNwcAkocmV2aXNpb24gMTkyODgwKQorKysg
U291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJDb3JlU3VwcG9ydC9XZWJQbGF0Zm9ybVN0cmF0
ZWdpZXMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00MCw3ICs0MCw2IEBACiAjaW5jbHVkZSAiV2Vi
RXJyb3JzLmgiCiAjaW5jbHVkZSAiV2ViRnJhbWUuaCIKICNpbmNsdWRlICJXZWJGcmFtZUxvYWRl
ckNsaWVudC5oIgotI2luY2x1ZGUgIldlYkZyYW1lTmV0d29ya2luZ0NvbnRleHQuaCIKICNpbmNs
dWRlICJXZWJJREJGYWN0b3J5QmFja2VuZC5oIgogI2luY2x1ZGUgIldlYlBhZ2UuaCIKICNpbmNs
dWRlICJXZWJQYXN0ZWJvYXJkT3ZlcnJpZGVzLmgiCkBAIC05Miw3ICs5MSw3IEBAIENvb2tpZXNT
dHJhdGVneSogV2ViUGxhdGZvcm1TdHJhdGVnaWVzOjoKIAogTG9hZGVyU3RyYXRlZ3kqIFdlYlBs
YXRmb3JtU3RyYXRlZ2llczo6Y3JlYXRlTG9hZGVyU3RyYXRlZ3koKQogewotICAgIHJldHVybiB0
aGlzOworICAgIHJldHVybiAmV2ViUHJvY2Vzczo6c2luZ2xldG9uKCkud2ViUmVzb3VyY2VMb2Fk
U2NoZWR1bGVyKCk7CiB9CiAKIFBhc3RlYm9hcmRTdHJhdGVneSogV2ViUGxhdGZvcm1TdHJhdGVn
aWVzOjpjcmVhdGVQYXN0ZWJvYXJkU3RyYXRlZ3koKQpAQCAtMTA1LDYgKzEwNCwxMSBAQCBQbHVn
aW5TdHJhdGVneSogV2ViUGxhdGZvcm1TdHJhdGVnaWVzOjpjCiAgICAgcmV0dXJuIHRoaXM7CiB9
CiAKK0Jsb2JSZWdpc3RyeSogV2ViUGxhdGZvcm1TdHJhdGVnaWVzOjpjcmVhdGVCbG9iUmVnaXN0
cnkoKQoreworICAgIHJldHVybiBuZXcgQmxvYlJlZ2lzdHJ5UHJveHk7Cit9CisKIC8vIENvb2tp
ZXNTdHJhdGVneQogCiBTdHJpbmcgV2ViUGxhdGZvcm1TdHJhdGVnaWVzOjpjb29raWVzRm9yRE9N
KGNvbnN0IE5ldHdvcmtTdG9yYWdlU2Vzc2lvbiYgc2Vzc2lvbiwgY29uc3QgVVJMJiBmaXJzdFBh
cnR5LCBjb25zdCBVUkwmIHVybCkKQEAgLTE0OCw3MCArMTUyLDYgQEAgdm9pZCBXZWJQbGF0Zm9y
bVN0cmF0ZWdpZXM6OmRlbGV0ZUNvb2tpZQogICAgIFdlYlByb2Nlc3M6OnNpbmdsZXRvbigpLm5l
dHdvcmtDb25uZWN0aW9uKCktPmNvbm5lY3Rpb24oKS0+c2VuZChNZXNzYWdlczo6TmV0d29ya0Nv
bm5lY3Rpb25Ub1dlYlByb2Nlc3M6OkRlbGV0ZUNvb2tpZShTZXNzaW9uVHJhY2tlcjo6c2Vzc2lv
bklEKHNlc3Npb24pLCB1cmwsIGNvb2tpZU5hbWUpLCAwKTsKIH0KIAotLy8gTG9hZGVyU3RyYXRl
Z3kKLQotUmVzb3VyY2VMb2FkU2NoZWR1bGVyKiBXZWJQbGF0Zm9ybVN0cmF0ZWdpZXM6OnJlc291
cmNlTG9hZFNjaGVkdWxlcigpCi17Ci0gICAgcmV0dXJuICZXZWJQcm9jZXNzOjpzaW5nbGV0b24o
KS53ZWJSZXNvdXJjZUxvYWRTY2hlZHVsZXIoKTsKLX0KLQotdm9pZCBXZWJQbGF0Zm9ybVN0cmF0
ZWdpZXM6OmxvYWRSZXNvdXJjZVN5bmNocm9ub3VzbHkoTmV0d29ya2luZ0NvbnRleHQqIGNvbnRl
eHQsIHVuc2lnbmVkIGxvbmcgcmVzb3VyY2VMb2FkSWRlbnRpZmllciwgY29uc3QgUmVzb3VyY2VS
ZXF1ZXN0JiByZXF1ZXN0LCBTdG9yZWRDcmVkZW50aWFscyBzdG9yZWRDcmVkZW50aWFscywgQ2xp
ZW50Q3JlZGVudGlhbFBvbGljeSBjbGllbnRDcmVkZW50aWFsUG9saWN5LCBSZXNvdXJjZUVycm9y
JiBlcnJvciwgUmVzb3VyY2VSZXNwb25zZSYgcmVzcG9uc2UsIFZlY3RvcjxjaGFyPiYgZGF0YSkK
LXsKLSAgICBXZWJGcmFtZU5ldHdvcmtpbmdDb250ZXh0KiB3ZWJDb250ZXh0ID0gc3RhdGljX2Nh
c3Q8V2ViRnJhbWVOZXR3b3JraW5nQ29udGV4dCo+KGNvbnRleHQpOwotICAgIC8vIEZJWE1FOiBT
b21lIGVudGl0aWVzIGluIFdlYkNvcmUgdXNlIFdlYkNvcmUncyAiRW1wdHlGcmFtZUxvYWRlckNs
aWVudCIgaW5zdGVhZCBvZiBoYXZpbmcgYSBwcm9wZXIgV2ViRnJhbWVMb2FkZXJDbGllbnQuCi0g
ICAgLy8gRW1wdHlGcmFtZUxvYWRlckNsaWVudCBzaG91bGRuJ3QgZXhpc3QgYW5kIGV2ZXJ5dGhp
bmcgc2hvdWxkIGJlIHVzaW5nIGEgV2ViRnJhbWVMb2FkZXJDbGllbnQsCi0gICAgLy8gYnV0IGlu
IHRoZSBtZWFudGltZSB3ZSBoYXZlIHRvIG1ha2Ugc3VyZSBub3QgdG8gbWlzLWNhc3QuCi0gICAg
V2ViRnJhbWVMb2FkZXJDbGllbnQqIHdlYkZyYW1lTG9hZGVyQ2xpZW50ID0gd2ViQ29udGV4dC0+
d2ViRnJhbWVMb2FkZXJDbGllbnQoKTsKLSAgICBXZWJGcmFtZSogd2ViRnJhbWUgPSB3ZWJGcmFt
ZUxvYWRlckNsaWVudCA/IHdlYkZyYW1lTG9hZGVyQ2xpZW50LT53ZWJGcmFtZSgpIDogMDsKLSAg
ICBXZWJQYWdlKiB3ZWJQYWdlID0gd2ViRnJhbWUgPyB3ZWJGcmFtZS0+cGFnZSgpIDogMDsKLQot
ICAgIE5ldHdvcmtSZXNvdXJjZUxvYWRQYXJhbWV0ZXJzIGxvYWRQYXJhbWV0ZXJzOwotICAgIGxv
YWRQYXJhbWV0ZXJzLmlkZW50aWZpZXIgPSByZXNvdXJjZUxvYWRJZGVudGlmaWVyOwotICAgIGxv
YWRQYXJhbWV0ZXJzLndlYlBhZ2VJRCA9IHdlYlBhZ2UgPyB3ZWJQYWdlLT5wYWdlSUQoKSA6IDA7
Ci0gICAgbG9hZFBhcmFtZXRlcnMud2ViRnJhbWVJRCA9IHdlYkZyYW1lID8gd2ViRnJhbWUtPmZy
YW1lSUQoKSA6IDA7Ci0gICAgbG9hZFBhcmFtZXRlcnMuc2Vzc2lvbklEID0gd2ViUGFnZSA/IHdl
YlBhZ2UtPnNlc3Npb25JRCgpIDogU2Vzc2lvbklEOjpkZWZhdWx0U2Vzc2lvbklEKCk7Ci0gICAg
bG9hZFBhcmFtZXRlcnMucmVxdWVzdCA9IHJlcXVlc3Q7Ci0gICAgbG9hZFBhcmFtZXRlcnMuY29u
dGVudFNuaWZmaW5nUG9saWN5ID0gU25pZmZDb250ZW50OwotICAgIGxvYWRQYXJhbWV0ZXJzLmFs
bG93U3RvcmVkQ3JlZGVudGlhbHMgPSBzdG9yZWRDcmVkZW50aWFsczsKLSAgICBsb2FkUGFyYW1l
dGVycy5jbGllbnRDcmVkZW50aWFsUG9saWN5ID0gY2xpZW50Q3JlZGVudGlhbFBvbGljeTsKLSAg
ICBsb2FkUGFyYW1ldGVycy5zaG91bGRDbGVhclJlZmVycmVyT25IVFRQU1RvSFRUUFJlZGlyZWN0
ID0gY29udGV4dC0+c2hvdWxkQ2xlYXJSZWZlcnJlck9uSFRUUFNUb0hUVFBSZWRpcmVjdCgpOwot
Ci0gICAgZGF0YS5yZXNpemUoMCk7Ci0KLSAgICBIYW5nRGV0ZWN0aW9uRGlzYWJsZXIgaGFuZ0Rl
dGVjdGlvbkRpc2FibGVyOwotCi0gICAgaWYgKCFXZWJQcm9jZXNzOjpzaW5nbGV0b24oKS5uZXR3
b3JrQ29ubmVjdGlvbigpLT5jb25uZWN0aW9uKCktPnNlbmRTeW5jKE1lc3NhZ2VzOjpOZXR3b3Jr
Q29ubmVjdGlvblRvV2ViUHJvY2Vzczo6UGVyZm9ybVN5bmNocm9ub3VzTG9hZChsb2FkUGFyYW1l
dGVycyksIE1lc3NhZ2VzOjpOZXR3b3JrQ29ubmVjdGlvblRvV2ViUHJvY2Vzczo6UGVyZm9ybVN5
bmNocm9ub3VzTG9hZDo6UmVwbHkoZXJyb3IsIHJlc3BvbnNlLCBkYXRhKSwgMCkpIHsKLSAgICAg
ICAgcmVzcG9uc2UgPSBSZXNvdXJjZVJlc3BvbnNlKCk7Ci0gICAgICAgIGVycm9yID0gaW50ZXJu
YWxFcnJvcihyZXF1ZXN0LnVybCgpKTsKLSAgICB9Ci19Ci0KLXZvaWQgV2ViUGxhdGZvcm1TdHJh
dGVnaWVzOjpjcmVhdGVQaW5nSGFuZGxlKE5ldHdvcmtpbmdDb250ZXh0KiBuZXR3b3JraW5nQ29u
dGV4dCwgUmVzb3VyY2VSZXF1ZXN0JiByZXF1ZXN0LCBib29sIHNob3VsZFVzZUNyZWRlbnRpYWxT
dG9yYWdlKQotewotICAgIC8vIEl0J3MgcG9zc2libGUgdGhhdCBjYWxsIHRvIGNyZWF0ZVBpbmdI
YW5kbGUgbWlnaHQgYmUgbWFkZSBkdXJpbmcgaW5pdGlhbCBlbXB0eSBEb2N1bWVudCBjcmVhdGlv
biBiZWZvcmUgYSBOZXR3b3JraW5nQ29udGV4dCBleGlzdHMuCi0gICAgLy8gSXQgaXMgbm90IGNs
ZWFyIHRoYXQgd2Ugc2hvdWxkIHNlbmQgcGluZyBsb2FkcyBkdXJpbmcgdGhhdCBwcm9jZXNzIGFu
eXdheXMuCi0gICAgaWYgKCFuZXR3b3JraW5nQ29udGV4dCkKLSAgICAgICAgcmV0dXJuOwotCi0g
ICAgV2ViRnJhbWVOZXR3b3JraW5nQ29udGV4dCogd2ViQ29udGV4dCA9IHN0YXRpY19jYXN0PFdl
YkZyYW1lTmV0d29ya2luZ0NvbnRleHQqPihuZXR3b3JraW5nQ29udGV4dCk7Ci0gICAgV2ViRnJh
bWVMb2FkZXJDbGllbnQqIHdlYkZyYW1lTG9hZGVyQ2xpZW50ID0gd2ViQ29udGV4dC0+d2ViRnJh
bWVMb2FkZXJDbGllbnQoKTsKLSAgICBXZWJGcmFtZSogd2ViRnJhbWUgPSB3ZWJGcmFtZUxvYWRl
ckNsaWVudCA/IHdlYkZyYW1lTG9hZGVyQ2xpZW50LT53ZWJGcmFtZSgpIDogbnVsbHB0cjsKLSAg
ICBXZWJQYWdlKiB3ZWJQYWdlID0gd2ViRnJhbWUgPyB3ZWJGcmFtZS0+cGFnZSgpIDogbnVsbHB0
cjsKLSAgICAKLSAgICBOZXR3b3JrUmVzb3VyY2VMb2FkUGFyYW1ldGVycyBsb2FkUGFyYW1ldGVy
czsKLSAgICBsb2FkUGFyYW1ldGVycy5yZXF1ZXN0ID0gcmVxdWVzdDsKLSAgICBsb2FkUGFyYW1l
dGVycy5zZXNzaW9uSUQgPSB3ZWJQYWdlID8gd2ViUGFnZS0+c2Vzc2lvbklEKCkgOiBTZXNzaW9u
SUQ6OmRlZmF1bHRTZXNzaW9uSUQoKTsKLSAgICBsb2FkUGFyYW1ldGVycy5hbGxvd1N0b3JlZENy
ZWRlbnRpYWxzID0gc2hvdWxkVXNlQ3JlZGVudGlhbFN0b3JhZ2UgPyBBbGxvd1N0b3JlZENyZWRl
bnRpYWxzIDogRG9Ob3RBbGxvd1N0b3JlZENyZWRlbnRpYWxzOwotICAgIGxvYWRQYXJhbWV0ZXJz
LnNob3VsZENsZWFyUmVmZXJyZXJPbkhUVFBTVG9IVFRQUmVkaXJlY3QgPSBuZXR3b3JraW5nQ29u
dGV4dC0+c2hvdWxkQ2xlYXJSZWZlcnJlck9uSFRUUFNUb0hUVFBSZWRpcmVjdCgpOwotCi0gICAg
V2ViUHJvY2Vzczo6c2luZ2xldG9uKCkubmV0d29ya0Nvbm5lY3Rpb24oKS0+Y29ubmVjdGlvbigp
LT5zZW5kKE1lc3NhZ2VzOjpOZXR3b3JrQ29ubmVjdGlvblRvV2ViUHJvY2Vzczo6TG9hZFBpbmco
bG9hZFBhcmFtZXRlcnMpLCAwKTsKLX0KLQotQmxvYlJlZ2lzdHJ5KiBXZWJQbGF0Zm9ybVN0cmF0
ZWdpZXM6OmNyZWF0ZUJsb2JSZWdpc3RyeSgpCi17Ci0gICAgcmV0dXJuIG5ldyBCbG9iUmVnaXN0
cnlQcm94eTsKLX0KLQogLy8gUGx1Z2luU3RyYXRlZ3kKIAogdm9pZCBXZWJQbGF0Zm9ybVN0cmF0
ZWdpZXM6OnJlZnJlc2hQbHVnaW5zKCkKSW5kZXg6IFNvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3Mv
V2ViQ29yZVN1cHBvcnQvV2ViUGxhdGZvcm1TdHJhdGVnaWVzLmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJDb3JlU3VwcG9ydC9XZWJQbGF0Zm9ybVN0cmF0ZWdp
ZXMuaAkocmV2aXNpb24gMTkyODgwKQorKysgU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJD
b3JlU3VwcG9ydC9XZWJQbGF0Zm9ybVN0cmF0ZWdpZXMuaAkod29ya2luZyBjb3B5KQpAQCAtMzYs
NyArMzYsNyBAQAogCiBuYW1lc3BhY2UgV2ViS2l0IHsKIAotY2xhc3MgV2ViUGxhdGZvcm1TdHJh
dGVnaWVzIDogcHVibGljIFdlYkNvcmU6OlBsYXRmb3JtU3RyYXRlZ2llcywgcHJpdmF0ZSBXZWJD
b3JlOjpDb29raWVzU3RyYXRlZ3ksIHByaXZhdGUgV2ViQ29yZTo6TG9hZGVyU3RyYXRlZ3ksIHBy
aXZhdGUgV2ViQ29yZTo6UGFzdGVib2FyZFN0cmF0ZWd5LCBwcml2YXRlIFdlYkNvcmU6OlBsdWdp
blN0cmF0ZWd5IHsKK2NsYXNzIFdlYlBsYXRmb3JtU3RyYXRlZ2llcyA6IHB1YmxpYyBXZWJDb3Jl
OjpQbGF0Zm9ybVN0cmF0ZWdpZXMsIHByaXZhdGUgV2ViQ29yZTo6Q29va2llc1N0cmF0ZWd5LCBw
cml2YXRlIFdlYkNvcmU6OlBhc3RlYm9hcmRTdHJhdGVneSwgcHJpdmF0ZSBXZWJDb3JlOjpQbHVn
aW5TdHJhdGVneSB7CiAgICAgZnJpZW5kIGNsYXNzIE5ldmVyRGVzdHJveWVkPFdlYlBsYXRmb3Jt
U3RyYXRlZ2llcz47CiBwdWJsaWM6CiAgICAgc3RhdGljIHZvaWQgaW5pdGlhbGl6ZSgpOwpAQCAt
NDksNiArNDksNyBAQCBwcml2YXRlOgogICAgIHZpcnR1YWwgV2ViQ29yZTo6TG9hZGVyU3RyYXRl
Z3kqIGNyZWF0ZUxvYWRlclN0cmF0ZWd5KCkgb3ZlcnJpZGU7CiAgICAgdmlydHVhbCBXZWJDb3Jl
OjpQYXN0ZWJvYXJkU3RyYXRlZ3kqIGNyZWF0ZVBhc3RlYm9hcmRTdHJhdGVneSgpIG92ZXJyaWRl
OwogICAgIHZpcnR1YWwgV2ViQ29yZTo6UGx1Z2luU3RyYXRlZ3kqIGNyZWF0ZVBsdWdpblN0cmF0
ZWd5KCkgb3ZlcnJpZGU7CisgICAgdmlydHVhbCBXZWJDb3JlOjpCbG9iUmVnaXN0cnkqIGNyZWF0
ZUJsb2JSZWdpc3RyeSgpIG92ZXJyaWRlOwogCiAgICAgLy8gV2ViQ29yZTo6Q29va2llc1N0cmF0
ZWd5CiAgICAgdmlydHVhbCBTdHJpbmcgY29va2llc0ZvckRPTShjb25zdCBXZWJDb3JlOjpOZXR3
b3JrU3RvcmFnZVNlc3Npb24mLCBjb25zdCBXZWJDb3JlOjpVUkwmIGZpcnN0UGFydHksIGNvbnN0
IFdlYkNvcmU6OlVSTCYpIG92ZXJyaWRlOwpAQCAtNTgsMTIgKzU5LDYgQEAgcHJpdmF0ZToKICAg
ICB2aXJ0dWFsIGJvb2wgZ2V0UmF3Q29va2llcyhjb25zdCBXZWJDb3JlOjpOZXR3b3JrU3RvcmFn
ZVNlc3Npb24mLCBjb25zdCBXZWJDb3JlOjpVUkwmIGZpcnN0UGFydHksIGNvbnN0IFdlYkNvcmU6
OlVSTCYsIFZlY3RvcjxXZWJDb3JlOjpDb29raWU+Jikgb3ZlcnJpZGU7CiAgICAgdmlydHVhbCB2
b2lkIGRlbGV0ZUNvb2tpZShjb25zdCBXZWJDb3JlOjpOZXR3b3JrU3RvcmFnZVNlc3Npb24mLCBj
b25zdCBXZWJDb3JlOjpVUkwmLCBjb25zdCBTdHJpbmcmKSBvdmVycmlkZTsKIAotICAgIC8vIFdl
YkNvcmU6OkxvYWRlclN0cmF0ZWd5Ci0gICAgdmlydHVhbCBXZWJDb3JlOjpSZXNvdXJjZUxvYWRT
Y2hlZHVsZXIqIHJlc291cmNlTG9hZFNjaGVkdWxlcigpIG92ZXJyaWRlOwotICAgIHZpcnR1YWwg
dm9pZCBsb2FkUmVzb3VyY2VTeW5jaHJvbm91c2x5KFdlYkNvcmU6Ok5ldHdvcmtpbmdDb250ZXh0
KiwgdW5zaWduZWQgbG9uZyByZXNvdXJjZUxvYWRJZGVudGlmaWVyLCBjb25zdCBXZWJDb3JlOjpS
ZXNvdXJjZVJlcXVlc3QmLCBXZWJDb3JlOjpTdG9yZWRDcmVkZW50aWFscywgV2ViQ29yZTo6Q2xp
ZW50Q3JlZGVudGlhbFBvbGljeSwgV2ViQ29yZTo6UmVzb3VyY2VFcnJvciYsIFdlYkNvcmU6OlJl
c291cmNlUmVzcG9uc2UmLCBWZWN0b3I8Y2hhcj4mIGRhdGEpIG92ZXJyaWRlOwotICAgIHZpcnR1
YWwgV2ViQ29yZTo6QmxvYlJlZ2lzdHJ5KiBjcmVhdGVCbG9iUmVnaXN0cnkoKSBvdmVycmlkZTsK
LSAgICB2aXJ0dWFsIHZvaWQgY3JlYXRlUGluZ0hhbmRsZShXZWJDb3JlOjpOZXR3b3JraW5nQ29u
dGV4dCosIFdlYkNvcmU6OlJlc291cmNlUmVxdWVzdCYsIGJvb2wgc2hvdWxkVXNlQ3JlZGVudGlh
bFN0b3JhZ2UpIG92ZXJyaWRlOwotCiAgICAgLy8gV2ViQ29yZTo6UGx1Z2luU3RyYXRlZ3kKICAg
ICB2aXJ0dWFsIHZvaWQgcmVmcmVzaFBsdWdpbnMoKSBvdmVycmlkZTsKICAgICB2aXJ0dWFsIHZv
aWQgZ2V0UGx1Z2luSW5mbyhjb25zdCBXZWJDb3JlOjpQYWdlKiwgVmVjdG9yPFdlYkNvcmU6OlBs
dWdpbkluZm8+Jikgb3ZlcnJpZGU7CkluZGV4OiBTb3VyY2UvV2ViS2l0L0NoYW5nZUxvZwo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L0NoYW5nZUxvZwkocmV2aXNpb24gMTkyOTQzKQorKysg
U291cmNlL1dlYktpdC9DaGFuZ2VMb2cJKHdvcmtpbmcgY29weSkKQEAgLTEsMyArMSw3MiBAQAor
MjAxNS0xMi0wMiAgQW50dGkgS29pdmlzdG8gIDxhbnR0aUBhcHBsZS5jb20+CisKKyAgICAgICAg
TW92ZSBSZXNvdXJjZUxvYWRTY2hlZHVsZXIgdG8gV2ViS2l0MQorICAgICAgICBodHRwczovL2J1
Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTUxNzQzCisKKyAgICAgICAgUmV2aWV3ZWQg
YnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgKiBXZWJDb3JlU3VwcG9ydC9XZWJSZXNvdXJj
ZUxvYWRTY2hlZHVsZXIuY3BwOiBDb3BpZWQgZnJvbSBTb3VyY2UvV2ViQ29yZS9sb2FkZXIvUmVz
b3VyY2VMb2FkU2NoZWR1bGVyLmNwcC4KKyAgICAgICAgKHdlYlJlc291cmNlTG9hZFNjaGVkdWxl
cik6CisgICAgICAgIChXZWJSZXNvdXJjZUxvYWRTY2hlZHVsZXI6Omhvc3RGb3JVUkwpOgorICAg
ICAgICAoV2ViUmVzb3VyY2VMb2FkU2NoZWR1bGVyOjpXZWJSZXNvdXJjZUxvYWRTY2hlZHVsZXIp
OgorICAgICAgICAoV2ViUmVzb3VyY2VMb2FkU2NoZWR1bGVyOjp+V2ViUmVzb3VyY2VMb2FkU2No
ZWR1bGVyKToKKyAgICAgICAgKFdlYlJlc291cmNlTG9hZFNjaGVkdWxlcjo6c2NoZWR1bGVTdWJy
ZXNvdXJjZUxvYWQpOgorICAgICAgICAoV2ViUmVzb3VyY2VMb2FkU2NoZWR1bGVyOjpsb2FkUmVz
b3VyY2VTeW5jaHJvbm91c2x5KToKKyAgICAgICAgKFdlYlJlc291cmNlTG9hZFNjaGVkdWxlcjo6
c2NoZWR1bGVQbHVnaW5TdHJlYW1Mb2FkKToKKyAgICAgICAgKFdlYlJlc291cmNlTG9hZFNjaGVk
dWxlcjo6c2NoZWR1bGVMb2FkKToKKyAgICAgICAgKFdlYlJlc291cmNlTG9hZFNjaGVkdWxlcjo6
cmVtb3ZlKToKKyAgICAgICAgKFdlYlJlc291cmNlTG9hZFNjaGVkdWxlcjo6c2V0RGVmZXJzTG9h
ZGluZyk6CisgICAgICAgIChXZWJSZXNvdXJjZUxvYWRTY2hlZHVsZXI6OmNyb3NzT3JpZ2luUmVk
aXJlY3RSZWNlaXZlZCk6CisgICAgICAgIChXZWJSZXNvdXJjZUxvYWRTY2hlZHVsZXI6OnNlcnZl
UGVuZGluZ1JlcXVlc3RzKToKKyAgICAgICAgKFdlYlJlc291cmNlTG9hZFNjaGVkdWxlcjo6c3Vz
cGVuZFBlbmRpbmdSZXF1ZXN0cyk6CisgICAgICAgIChXZWJSZXNvdXJjZUxvYWRTY2hlZHVsZXI6
OnJlc3VtZVBlbmRpbmdSZXF1ZXN0cyk6CisgICAgICAgIChXZWJSZXNvdXJjZUxvYWRTY2hlZHVs
ZXI6OnNjaGVkdWxlU2VydmVQZW5kaW5nUmVxdWVzdHMpOgorICAgICAgICAoV2ViUmVzb3VyY2VM
b2FkU2NoZWR1bGVyOjpyZXF1ZXN0VGltZXJGaXJlZCk6CisgICAgICAgIChXZWJSZXNvdXJjZUxv
YWRTY2hlZHVsZXI6Okhvc3RJbmZvcm1hdGlvbjo6SG9zdEluZm9ybWF0aW9uKToKKyAgICAgICAg
KFdlYlJlc291cmNlTG9hZFNjaGVkdWxlcjo6SG9zdEluZm9ybWF0aW9uOjp+SG9zdEluZm9ybWF0
aW9uKToKKyAgICAgICAgKFdlYlJlc291cmNlTG9hZFNjaGVkdWxlcjo6SG9zdEluZm9ybWF0aW9u
Ojpwcmlvcml0eVRvSW5kZXgpOgorICAgICAgICAoV2ViUmVzb3VyY2VMb2FkU2NoZWR1bGVyOjpI
b3N0SW5mb3JtYXRpb246OnNjaGVkdWxlKToKKyAgICAgICAgKFdlYlJlc291cmNlTG9hZFNjaGVk
dWxlcjo6SG9zdEluZm9ybWF0aW9uOjphZGRMb2FkSW5Qcm9ncmVzcyk6CisgICAgICAgIChXZWJS
ZXNvdXJjZUxvYWRTY2hlZHVsZXI6Okhvc3RJbmZvcm1hdGlvbjo6cmVtb3ZlKToKKyAgICAgICAg
KFdlYlJlc291cmNlTG9hZFNjaGVkdWxlcjo6SG9zdEluZm9ybWF0aW9uOjpoYXNSZXF1ZXN0cyk6
CisgICAgICAgIChXZWJSZXNvdXJjZUxvYWRTY2hlZHVsZXI6Okhvc3RJbmZvcm1hdGlvbjo6bGlt
aXRSZXF1ZXN0cyk6CisgICAgICAgIChXZWJSZXNvdXJjZUxvYWRTY2hlZHVsZXI6OmNyZWF0ZVBp
bmdIYW5kbGUpOgorICAgICAgICAoV2ViQ29yZTo6UmVzb3VyY2VMb2FkU2NoZWR1bGVyOjpob3N0
Rm9yVVJMKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OnJlc291cmNlTG9hZFNjaGVkdWxl
cik6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpSZXNvdXJjZUxvYWRTY2hlZHVsZXI6OlJl
c291cmNlTG9hZFNjaGVkdWxlcik6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpSZXNvdXJj
ZUxvYWRTY2hlZHVsZXI6On5SZXNvdXJjZUxvYWRTY2hlZHVsZXIpOiBEZWxldGVkLgorICAgICAg
ICAoV2ViQ29yZTo6UmVzb3VyY2VMb2FkU2NoZWR1bGVyOjpzY2hlZHVsZVN1YnJlc291cmNlTG9h
ZCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpSZXNvdXJjZUxvYWRTY2hlZHVsZXI6OnNj
aGVkdWxlUGx1Z2luU3RyZWFtTG9hZCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpSZXNv
dXJjZUxvYWRTY2hlZHVsZXI6OnNjaGVkdWxlTG9hZCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJD
b3JlOjpSZXNvdXJjZUxvYWRTY2hlZHVsZXI6OnJlbW92ZSk6IERlbGV0ZWQuCisgICAgICAgIChX
ZWJDb3JlOjpSZXNvdXJjZUxvYWRTY2hlZHVsZXI6OnNldERlZmVyc0xvYWRpbmcpOiBEZWxldGVk
LgorICAgICAgICAoV2ViQ29yZTo6UmVzb3VyY2VMb2FkU2NoZWR1bGVyOjpjcm9zc09yaWdpblJl
ZGlyZWN0UmVjZWl2ZWQpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6UmVzb3VyY2VMb2Fk
U2NoZWR1bGVyOjpzZXJ2ZVBlbmRpbmdSZXF1ZXN0cyk6IERlbGV0ZWQuCisgICAgICAgIChXZWJD
b3JlOjpSZXNvdXJjZUxvYWRTY2hlZHVsZXI6OnN1c3BlbmRQZW5kaW5nUmVxdWVzdHMpOiBEZWxl
dGVkLgorICAgICAgICAoV2ViQ29yZTo6UmVzb3VyY2VMb2FkU2NoZWR1bGVyOjpyZXN1bWVQZW5k
aW5nUmVxdWVzdHMpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6UmVzb3VyY2VMb2FkU2No
ZWR1bGVyOjpzY2hlZHVsZVNlcnZlUGVuZGluZ1JlcXVlc3RzKTogRGVsZXRlZC4KKyAgICAgICAg
KFdlYkNvcmU6OlJlc291cmNlTG9hZFNjaGVkdWxlcjo6cmVxdWVzdFRpbWVyRmlyZWQpOiBEZWxl
dGVkLgorICAgICAgICAoV2ViQ29yZTo6UmVzb3VyY2VMb2FkU2NoZWR1bGVyOjpIb3N0SW5mb3Jt
YXRpb246Okhvc3RJbmZvcm1hdGlvbik6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpSZXNv
dXJjZUxvYWRTY2hlZHVsZXI6Okhvc3RJbmZvcm1hdGlvbjo6fkhvc3RJbmZvcm1hdGlvbik6IERl
bGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpSZXNvdXJjZUxvYWRTY2hlZHVsZXI6Okhvc3RJbmZv
cm1hdGlvbjo6cHJpb3JpdHlUb0luZGV4KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OlJl
c291cmNlTG9hZFNjaGVkdWxlcjo6SG9zdEluZm9ybWF0aW9uOjpzY2hlZHVsZSk6IERlbGV0ZWQu
CisgICAgICAgIChXZWJDb3JlOjpSZXNvdXJjZUxvYWRTY2hlZHVsZXI6Okhvc3RJbmZvcm1hdGlv
bjo6YWRkTG9hZEluUHJvZ3Jlc3MpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6UmVzb3Vy
Y2VMb2FkU2NoZWR1bGVyOjpIb3N0SW5mb3JtYXRpb246OnJlbW92ZSk6IERlbGV0ZWQuCisgICAg
ICAgIChXZWJDb3JlOjpSZXNvdXJjZUxvYWRTY2hlZHVsZXI6Okhvc3RJbmZvcm1hdGlvbjo6aGFz
UmVxdWVzdHMpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6UmVzb3VyY2VMb2FkU2NoZWR1
bGVyOjpIb3N0SW5mb3JtYXRpb246OmxpbWl0UmVxdWVzdHMpOiBEZWxldGVkLgorICAgICAgICAq
IFdlYkNvcmVTdXBwb3J0L1dlYlJlc291cmNlTG9hZFNjaGVkdWxlci5oOiBDb3BpZWQgZnJvbSBT
b3VyY2UvV2ViQ29yZS9sb2FkZXIvUmVzb3VyY2VMb2FkU2NoZWR1bGVyLmguCisgICAgICAgIChX
ZWJSZXNvdXJjZUxvYWRTY2hlZHVsZXI6OmlzU2VyaWFsTG9hZGluZ0VuYWJsZWQpOgorICAgICAg
ICAoV2ViUmVzb3VyY2VMb2FkU2NoZWR1bGVyOjpzZXRTZXJpYWxMb2FkaW5nRW5hYmxlZCk6Cisg
ICAgICAgIChXZWJSZXNvdXJjZUxvYWRTY2hlZHVsZXI6Okhvc3RJbmZvcm1hdGlvbjo6bmFtZSk6
CisgICAgICAgIChXZWJSZXNvdXJjZUxvYWRTY2hlZHVsZXI6Okhvc3RJbmZvcm1hdGlvbjo6cmVx
dWVzdHNQZW5kaW5nKToKKyAgICAgICAgKFdlYkNvcmU6OlJlc291cmNlTG9hZFNjaGVkdWxlcjo6
aXNTZXJpYWxMb2FkaW5nRW5hYmxlZCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpSZXNv
dXJjZUxvYWRTY2hlZHVsZXI6OnNldFNlcmlhbExvYWRpbmdFbmFibGVkKTogRGVsZXRlZC4KKyAg
ICAgICAgKFdlYkNvcmU6OlJlc291cmNlTG9hZFNjaGVkdWxlcjo6U3VzcGVuZGVyOjpTdXNwZW5k
ZXIpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6UmVzb3VyY2VMb2FkU2NoZWR1bGVyOjpT
dXNwZW5kZXI6On5TdXNwZW5kZXIpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6UmVzb3Vy
Y2VMb2FkU2NoZWR1bGVyOjpIb3N0SW5mb3JtYXRpb246Om5hbWUpOiBEZWxldGVkLgorICAgICAg
ICAoV2ViQ29yZTo6UmVzb3VyY2VMb2FkU2NoZWR1bGVyOjpIb3N0SW5mb3JtYXRpb246OnJlcXVl
c3RzUGVuZGluZyk6IERlbGV0ZWQuCisgICAgICAgICogV2ViS2l0Lnhjb2RlcHJvai9wcm9qZWN0
LnBieHByb2o6CisKIDIwMTUtMTAtMjkgIEFsZXggQ2hyaXN0ZW5zZW4gIDxhY2hyaXN0ZW5zZW5A
d2Via2l0Lm9yZz4KIAogICAgICAgICBNYWtlIFdlYkNvcmUgYSBmcmFtZXdvcmsgaW4gTWFjIENN
YWtlIGJ1aWxkCkluZGV4OiBTb3VyY2UvV2ViS2l0L1dlYkNvcmVTdXBwb3J0L1dlYlJlc291cmNl
TG9hZFNjaGVkdWxlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9XZWJDb3JlU3Vw
cG9ydC9XZWJSZXNvdXJjZUxvYWRTY2hlZHVsZXIuY3BwCShyZXZpc2lvbiAxOTI4ODApCShmcm9t
IFNvdXJjZS9XZWJDb3JlL2xvYWRlci9SZXNvdXJjZUxvYWRTY2hlZHVsZXIuY3BwOjE5Mjg4MCkK
KysrIFNvdXJjZS9XZWJLaXQvV2ViQ29yZVN1cHBvcnQvV2ViUmVzb3VyY2VMb2FkU2NoZWR1bGVy
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDM5MiBAQAorLyoKKyAgICBDb3B5cmlnaHQg
KEMpIDE5OTggTGFycyBLbm9sbCAoa25vbGxAbXBpLWhkLm1wZy5kZSkKKyAgICBDb3B5cmlnaHQg
KEMpIDIwMDEgRGlyayBNdWVsbGVyIChtdWVsbGVyQGtkZS5vcmcpCisgICAgQ29weXJpZ2h0IChD
KSAyMDAyIFdhbGRvIEJhc3RpYW4gKGJhc3RpYW5Aa2RlLm9yZykKKyAgICBDb3B5cmlnaHQgKEMp
IDIwMDYgU2FtdWVsIFdlaW5pZyAoc2FtLndlaW5pZ0BnbWFpbC5jb20pCisgICAgQ29weXJpZ2h0
IChDKSAyMDA0LCAyMDA1LCAyMDA2LCAyMDA3LCAyMDA4IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KKyAgICBDb3B5cmlnaHQgKEMpIDIwMTAgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KKworICAgIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJl
ZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAgICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRo
ZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworICAgIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5
IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICAgIHZlcnNpb24gMiBvZiB0
aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKworICAg
IFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUg
dXNlZnVsLAorICAgIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBp
bXBsaWVkIHdhcnJhbnR5IG9mCisgICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEg
UEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAgICBMaWJyYXJ5IEdlbmVyYWwgUHVi
bGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKworICAgIFlvdSBzaG91bGQgaGF2ZSByZWNl
aXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAg
ICBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYg
bm90LCB3cml0ZSB0bworICAgIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUx
IEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCisgICAgQm9zdG9uLCBNQSAwMjExMC0xMzAx
LCBVU0EuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIlJlc291cmNlTG9h
ZFNjaGVkdWxlci5oIgorCisjaW5jbHVkZSAiRG9jdW1lbnQuaCIKKyNpbmNsdWRlICJEb2N1bWVu
dExvYWRlci5oIgorI2luY2x1ZGUgIkZyYW1lLmgiCisjaW5jbHVkZSAiRnJhbWVMb2FkZXIuaCIK
KyNpbmNsdWRlICJMb2FkZXJTdHJhdGVneS5oIgorI2luY2x1ZGUgIkxvZ2dpbmcuaCIKKyNpbmNs
dWRlICJOZXRzY2FwZVBsdWdJblN0cmVhbUxvYWRlci5oIgorI2luY2x1ZGUgIlBsYXRmb3JtU3Ry
YXRlZ2llcy5oIgorI2luY2x1ZGUgIlJlc291cmNlTG9hZGVyLmgiCisjaW5jbHVkZSAiUmVzb3Vy
Y2VSZXF1ZXN0LmgiCisjaW5jbHVkZSAiU3VicmVzb3VyY2VMb2FkZXIuaCIKKyNpbmNsdWRlICJV
UkwuaCIKKyNpbmNsdWRlIDx3dGYvTWFpblRocmVhZC5oPgorI2luY2x1ZGUgPHd0Zi9UZW1wb3Jh
cnlDaGFuZ2UuaD4KKyNpbmNsdWRlIDx3dGYvdGV4dC9DU3RyaW5nLmg+CisKKyNpZiBQTEFURk9S
TShJT1MpCisjaW5jbHVkZSA8UnVudGltZUFwcGxpY2F0aW9uQ2hlY2tzSU9TLmg+CisjZW5kaWYK
KworI2lmIFVTRShRVUlDS19MT09LKQorI2luY2x1ZGUgIlF1aWNrTG9vay5oIgorI2VuZGlmCisK
K25hbWVzcGFjZSBXZWJDb3JlIHsKKworLy8gTWF0Y2ggdGhlIHBhcmFsbGVsIGNvbm5lY3Rpb24g
Y291bnQgdXNlZCBieSB0aGUgbmV0d29ya2luZyBsYXllci4KK3N0YXRpYyB1bnNpZ25lZCBtYXhS
ZXF1ZXN0c0luRmxpZ2h0UGVySG9zdDsKKyNpZiAhUExBVEZPUk0oSU9TKQorc3RhdGljIGNvbnN0
IHVuc2lnbmVkIG1heFJlcXVlc3RzSW5GbGlnaHRGb3JOb25IVFRQUHJvdG9jb2xzID0gMjA7Cisj
ZWxzZQorLy8gTGltaXRpbmcgdGhpcyBzZWVtcyB0byByZWdyZXNzIHBlcmZvcm1hbmNlIGluIHNv
bWUgbG9jYWwgY2FzZXMgc28gbGV0J3MganVzdCBtYWtlIGl0IGxhcmdlLgorc3RhdGljIGNvbnN0
IHVuc2lnbmVkIG1heFJlcXVlc3RzSW5GbGlnaHRGb3JOb25IVFRQUHJvdG9jb2xzID0gMTAwMDA7
CisjZW5kaWYKKworUmVzb3VyY2VMb2FkU2NoZWR1bGVyOjpIb3N0SW5mb3JtYXRpb24qIFJlc291
cmNlTG9hZFNjaGVkdWxlcjo6aG9zdEZvclVSTChjb25zdCBVUkwmIHVybCwgQ3JlYXRlSG9zdFBv
bGljeSBjcmVhdGVIb3N0UG9saWN5KQoreworICAgIGlmICghdXJsLnByb3RvY29sSXNJbkhUVFBG
YW1pbHkoKSkKKyAgICAgICAgcmV0dXJuIG1fbm9uSFRUUFByb3RvY29sSG9zdDsKKworICAgIG1f
aG9zdHMuY2hlY2tDb25zaXN0ZW5jeSgpOworICAgIFN0cmluZyBob3N0TmFtZSA9IHVybC5ob3N0
KCk7CisgICAgSG9zdEluZm9ybWF0aW9uKiBob3N0ID0gbV9ob3N0cy5nZXQoaG9zdE5hbWUpOwor
ICAgIGlmICghaG9zdCAmJiBjcmVhdGVIb3N0UG9saWN5ID09IENyZWF0ZUlmTm90Rm91bmQpIHsK
KyAgICAgICAgaG9zdCA9IG5ldyBIb3N0SW5mb3JtYXRpb24oaG9zdE5hbWUsIG1heFJlcXVlc3Rz
SW5GbGlnaHRQZXJIb3N0KTsKKyAgICAgICAgbV9ob3N0cy5hZGQoaG9zdE5hbWUsIGhvc3QpOwor
ICAgIH0KKyAgICByZXR1cm4gaG9zdDsKK30KKworUmVzb3VyY2VMb2FkU2NoZWR1bGVyKiByZXNv
dXJjZUxvYWRTY2hlZHVsZXIoKQoreworICAgIEFTU0VSVChpc01haW5UaHJlYWQoKSk7CisgICAg
c3RhdGljIFJlc291cmNlTG9hZFNjaGVkdWxlciogZ2xvYmFsU2NoZWR1bGVyID0gbnVsbHB0cjsK
KyAgICAKKyAgICBpZiAoIWdsb2JhbFNjaGVkdWxlcikgeworICAgICAgICBzdGF0aWMgYm9vbCBp
c0NhbGxpbmdPdXRUb1N0cmF0ZWd5ID0gZmFsc2U7CisgICAgICAgIAorICAgICAgICAvLyBJZiB3
ZSdyZSByZS1lbnRlcmluZyByZXNvdXJjZUxvYWRTY2hlZHVsZXIoKSB3aGlsZSBjYWxsaW5nIG91
dCB0byB0aGUgTG9hZGVyU3RyYXRlZ3ksCisgICAgICAgIC8vIHRoZW4gdGhlIExvYWRlclN0cmF0
ZWd5IGlzIHRyeWluZyB0byB1c2UgdGhlIGRlZmF1bHQgcmVzb3VyY2VMb2FkU2NoZWR1bGVyLgor
ICAgICAgICAvLyBTbyB3ZSdsbCBjcmVhdGUgaXQgaGVyZSBhbmQgc3RhcnQgdXNpbmcgaXQuCisg
ICAgICAgIGlmIChpc0NhbGxpbmdPdXRUb1N0cmF0ZWd5KSB7CisgICAgICAgICAgICBnbG9iYWxT
Y2hlZHVsZXIgPSBuZXcgUmVzb3VyY2VMb2FkU2NoZWR1bGVyOworICAgICAgICAgICAgcmV0dXJu
IGdsb2JhbFNjaGVkdWxlcjsKKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgVGVtcG9yYXJ5
Q2hhbmdlPGJvb2w+IHJlY3Vyc2lvbkd1YXJkKGlzQ2FsbGluZ091dFRvU3RyYXRlZ3ksIHRydWUp
OworICAgICAgICBnbG9iYWxTY2hlZHVsZXIgPSBwbGF0Zm9ybVN0cmF0ZWdpZXMoKS0+bG9hZGVy
U3RyYXRlZ3koKS0+cmVzb3VyY2VMb2FkU2NoZWR1bGVyKCk7CisgICAgfQorCisgICAgcmV0dXJu
IGdsb2JhbFNjaGVkdWxlcjsKK30KKworUmVzb3VyY2VMb2FkU2NoZWR1bGVyOjpSZXNvdXJjZUxv
YWRTY2hlZHVsZXIoKQorICAgIDogbV9ub25IVFRQUHJvdG9jb2xIb3N0KG5ldyBIb3N0SW5mb3Jt
YXRpb24oU3RyaW5nKCksIG1heFJlcXVlc3RzSW5GbGlnaHRGb3JOb25IVFRQUHJvdG9jb2xzKSkK
KyAgICAsIG1fcmVxdWVzdFRpbWVyKCp0aGlzLCAmUmVzb3VyY2VMb2FkU2NoZWR1bGVyOjpyZXF1
ZXN0VGltZXJGaXJlZCkKKyAgICAsIG1fc3VzcGVuZFBlbmRpbmdSZXF1ZXN0c0NvdW50KDApCisg
ICAgLCBtX2lzU2VyaWFsTG9hZGluZ0VuYWJsZWQoZmFsc2UpCit7CisgICAgbWF4UmVxdWVzdHNJ
bkZsaWdodFBlckhvc3QgPSBpbml0aWFsaXplTWF4aW11bUhUVFBDb25uZWN0aW9uQ291bnRQZXJI
b3N0KCk7Cit9CisKK1Jlc291cmNlTG9hZFNjaGVkdWxlcjo6flJlc291cmNlTG9hZFNjaGVkdWxl
cigpCit7Cit9CisKK1JlZlB0cjxTdWJyZXNvdXJjZUxvYWRlcj4gUmVzb3VyY2VMb2FkU2NoZWR1
bGVyOjpzY2hlZHVsZVN1YnJlc291cmNlTG9hZChGcmFtZSogZnJhbWUsIENhY2hlZFJlc291cmNl
KiByZXNvdXJjZSwgY29uc3QgUmVzb3VyY2VSZXF1ZXN0JiByZXF1ZXN0LCBjb25zdCBSZXNvdXJj
ZUxvYWRlck9wdGlvbnMmIG9wdGlvbnMpCit7CisgICAgUmVmUHRyPFN1YnJlc291cmNlTG9hZGVy
PiBsb2FkZXIgPSBTdWJyZXNvdXJjZUxvYWRlcjo6Y3JlYXRlKGZyYW1lLCByZXNvdXJjZSwgcmVx
dWVzdCwgb3B0aW9ucyk7CisgICAgaWYgKGxvYWRlcikKKyAgICAgICAgc2NoZWR1bGVMb2FkKGxv
YWRlci5nZXQoKSk7CisjaWYgUExBVEZPUk0oSU9TKQorICAgIC8vIFNpbmNlIHdlIGRlZmVyIGxv
YWRlciBpbml0aWFsaXphdGlvbiB1bnRpbCBzY2hlZHVsaW5nIG9uIGlPUywgdGhlIGZyYW1lCisg
ICAgLy8gbG9hZCBkZWxlZ2F0ZSB0aGF0IHdvdWxkIGJlIGNhbGxlZCBpbiBTdWJyZXNvdXJjZUxv
YWRlcjo6Y3JlYXRlKCkgb24KKyAgICAvLyBvdGhlciBwb3J0cyBtaWdodCBiZSBjYWxsZWQgaW4g
c2NoZWR1bGVMb2FkKCkgaW5zdGVhZC4gT3VyIGNvbnRyYWN0IHRvCisgICAgLy8gY2FsbGVycyBv
ZiB0aGlzIG1ldGhvZCBpcyB0aGF0IGEgbnVsbCBsb2FkZXIgaXMgcmV0dXJuZWQgaWYgdGhlIGxv
YWQgd2FzCisgICAgLy8gY2FuY2VsbGVkIGJ5IGEgZnJhbWUgbG9hZCBkZWxlZ2F0ZS4KKyAgICBp
ZiAoIWxvYWRlciB8fCBsb2FkZXItPnJlYWNoZWRUZXJtaW5hbFN0YXRlKCkpCisgICAgICAgIHJl
dHVybiBudWxscHRyOworI2VuZGlmCisgICAgcmV0dXJuIGxvYWRlcjsKK30KKworUmVmUHRyPE5l
dHNjYXBlUGx1Z0luU3RyZWFtTG9hZGVyPiBSZXNvdXJjZUxvYWRTY2hlZHVsZXI6OnNjaGVkdWxl
UGx1Z2luU3RyZWFtTG9hZChGcmFtZSogZnJhbWUsIE5ldHNjYXBlUGx1Z0luU3RyZWFtTG9hZGVy
Q2xpZW50KiBjbGllbnQsIGNvbnN0IFJlc291cmNlUmVxdWVzdCYgcmVxdWVzdCkKK3sKKyAgICBS
ZWZQdHI8TmV0c2NhcGVQbHVnSW5TdHJlYW1Mb2FkZXI+IGxvYWRlciA9IE5ldHNjYXBlUGx1Z0lu
U3RyZWFtTG9hZGVyOjpjcmVhdGUoZnJhbWUsIGNsaWVudCwgcmVxdWVzdCk7CisgICAgaWYgKGxv
YWRlcikKKyAgICAgICAgc2NoZWR1bGVMb2FkKGxvYWRlci5nZXQoKSk7CisgICAgcmV0dXJuIGxv
YWRlcjsKK30KKwordm9pZCBSZXNvdXJjZUxvYWRTY2hlZHVsZXI6OnNjaGVkdWxlTG9hZChSZXNv
dXJjZUxvYWRlciogcmVzb3VyY2VMb2FkZXIpCit7CisgICAgQVNTRVJUKHJlc291cmNlTG9hZGVy
KTsKKworICAgIExPRyhSZXNvdXJjZUxvYWRpbmcsICJSZXNvdXJjZUxvYWRTY2hlZHVsZXI6Omxv
YWQgcmVzb3VyY2UgJXAgJyVzJyIsIHJlc291cmNlTG9hZGVyLCByZXNvdXJjZUxvYWRlci0+dXJs
KCkuc3RyaW5nKCkubGF0aW4xKCkuZGF0YSgpKTsKKworI2lmIFBMQVRGT1JNKElPUykKKyAgICAv
LyBJZiB0aGVyZSdzIGEgd2ViIGFyY2hpdmUgcmVzb3VyY2UgZm9yIHRoaXMgVVJMLCB3ZSBkb24n
dCBuZWVkIHRvIHNjaGVkdWxlIHRoZSBsb2FkIHNpbmNlIGl0IHdpbGwgbmV2ZXIgdG91Y2ggdGhl
IG5ldHdvcmsuCisgICAgaWYgKCFpc1N1c3BlbmRpbmdQZW5kaW5nUmVxdWVzdHMoKSAmJiByZXNv
dXJjZUxvYWRlci0+ZG9jdW1lbnRMb2FkZXIoKS0+YXJjaGl2ZVJlc291cmNlRm9yVVJMKHJlc291
cmNlTG9hZGVyLT5pT1NPcmlnaW5hbFJlcXVlc3QoKS51cmwoKSkpIHsKKyAgICAgICAgcmVzb3Vy
Y2VMb2FkZXItPnN0YXJ0TG9hZGluZygpOworICAgICAgICByZXR1cm47CisgICAgfQorI2Vsc2UK
KyAgICBpZiAocmVzb3VyY2VMb2FkZXItPmRvY3VtZW50TG9hZGVyKCktPmFyY2hpdmVSZXNvdXJj
ZUZvclVSTChyZXNvdXJjZUxvYWRlci0+cmVxdWVzdCgpLnVybCgpKSkgeworICAgICAgICByZXNv
dXJjZUxvYWRlci0+c3RhcnQoKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyNlbmRpZgorCisj
aWYgUExBVEZPUk0oSU9TKQorICAgIEhvc3RJbmZvcm1hdGlvbiogaG9zdCA9IGhvc3RGb3JVUkwo
cmVzb3VyY2VMb2FkZXItPmlPU09yaWdpbmFsUmVxdWVzdCgpLnVybCgpLCBDcmVhdGVJZk5vdEZv
dW5kKTsKKyNlbHNlCisgICAgSG9zdEluZm9ybWF0aW9uKiBob3N0ID0gaG9zdEZvclVSTChyZXNv
dXJjZUxvYWRlci0+dXJsKCksIENyZWF0ZUlmTm90Rm91bmQpOworI2VuZGlmCisKKyAgICBSZXNv
dXJjZUxvYWRQcmlvcml0eSBwcmlvcml0eSA9IHJlc291cmNlTG9hZGVyLT5yZXF1ZXN0KCkucHJp
b3JpdHkoKTsKKworICAgIGJvb2wgaGFkUmVxdWVzdHMgPSBob3N0LT5oYXNSZXF1ZXN0cygpOwor
ICAgIGhvc3QtPnNjaGVkdWxlKHJlc291cmNlTG9hZGVyLCBwcmlvcml0eSk7CisKKyNpZiBQTEFU
Rk9STShDT0NPQSkgfHwgVVNFKENGTkVUV09SSykKKyAgICBpZiAoUmVzb3VyY2VSZXF1ZXN0Ojpy
ZXNvdXJjZVByaW9yaXRpZXNFbmFibGVkKCkgJiYgIWlzU3VzcGVuZGluZ1BlbmRpbmdSZXF1ZXN0
cygpKSB7CisgICAgICAgIC8vIFNlcnZlIGFsbCByZXF1ZXN0cyBhdCBvbmNlIHRvIGtlZXAgdGhl
IHBpcGVsaW5lIGZ1bGwgYXQgdGhlIG5ldHdvcmsgbGF5ZXIuCisgICAgICAgIC8vIEZJWE1FOiBE
b2VzIHRoaXMgY29kZSBkbyBhbnl0aGluZyB1c2VmdWwsIGdpdmVuIHRoYXQgd2UgYWxzbyBzZXQg
bWF4UmVxdWVzdHNJbkZsaWdodFBlckhvc3QgdG8gZWZmZWN0aXZlbHkgdW5saW1pdGVkIG9uIHRo
ZXNlIHBsYXRmb3Jtcz8KKyAgICAgICAgc2VydmVQZW5kaW5nUmVxdWVzdHMoaG9zdCwgUmVzb3Vy
Y2VMb2FkUHJpb3JpdHk6OlZlcnlMb3cpOworICAgICAgICByZXR1cm47CisgICAgfQorI2VuZGlm
CisKKyNpZiBQTEFURk9STShJT1MpCisgICAgaWYgKChwcmlvcml0eSA+IFJlc291cmNlTG9hZFBy
aW9yaXR5OjpMb3cgfHwgIXJlc291cmNlTG9hZGVyLT5pT1NPcmlnaW5hbFJlcXVlc3QoKS51cmwo
KS5wcm90b2NvbElzSW5IVFRQRmFtaWx5KCkgfHwgKHByaW9yaXR5ID09IFJlc291cmNlTG9hZFBy
aW9yaXR5OjpMb3cgJiYgIWhhZFJlcXVlc3RzKSkgJiYgIWlzU3VzcGVuZGluZ1BlbmRpbmdSZXF1
ZXN0cygpKSB7CisgICAgICAgIC8vIFRyeSB0byByZXF1ZXN0IGltcG9ydGFudCByZXNvdXJjZXMg
aW1tZWRpYXRlbHkuCisgICAgICAgIHNlcnZlUGVuZGluZ1JlcXVlc3RzKGhvc3QsIHByaW9yaXR5
KTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyNlbHNlCisgICAgaWYgKHByaW9yaXR5ID4gUmVz
b3VyY2VMb2FkUHJpb3JpdHk6OkxvdyB8fCAhcmVzb3VyY2VMb2FkZXItPnVybCgpLnByb3RvY29s
SXNJbkhUVFBGYW1pbHkoKSB8fCAocHJpb3JpdHkgPT0gUmVzb3VyY2VMb2FkUHJpb3JpdHk6Okxv
dyAmJiAhaGFkUmVxdWVzdHMpKSB7CisgICAgICAgIC8vIFRyeSB0byByZXF1ZXN0IGltcG9ydGFu
dCByZXNvdXJjZXMgaW1tZWRpYXRlbHkuCisgICAgICAgIHNlcnZlUGVuZGluZ1JlcXVlc3RzKGhv
c3QsIHByaW9yaXR5KTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyNlbmRpZgorCisgICAgLy8g
SGFuZGxlIGFzeW5jaHJvbm91c2x5IHNvIGVhcmx5IGxvdyBwcmlvcml0eSByZXF1ZXN0cyBkb24n
dAorICAgIC8vIGdldCBzY2hlZHVsZWQgYmVmb3JlIGxhdGVyIGhpZ2ggcHJpb3JpdHkgb25lcy4K
KyAgICBzY2hlZHVsZVNlcnZlUGVuZGluZ1JlcXVlc3RzKCk7Cit9CisKK3ZvaWQgUmVzb3VyY2VM
b2FkU2NoZWR1bGVyOjpyZW1vdmUoUmVzb3VyY2VMb2FkZXIqIHJlc291cmNlTG9hZGVyKQorewor
ICAgIEFTU0VSVChyZXNvdXJjZUxvYWRlcik7CisKKyAgICBIb3N0SW5mb3JtYXRpb24qIGhvc3Qg
PSBob3N0Rm9yVVJMKHJlc291cmNlTG9hZGVyLT51cmwoKSk7CisgICAgaWYgKGhvc3QpCisgICAg
ICAgIGhvc3QtPnJlbW92ZShyZXNvdXJjZUxvYWRlcik7CisjaWYgUExBVEZPUk0oSU9TKQorICAg
IC8vIFJlc291cmNlTG9hZGVyOjp1cmwoKSBkb2Vzbid0IHN0YXJ0IHJldHVybmluZyB0aGUgY29y
cmVjdCB2YWx1ZSB1bnRpbCB0aGUgbG9hZCBzdGFydHMuIElmIHdlIGdldCBjYW5jZWxlZCBiZWZv
cmUgdGhhdCwgd2UgbmVlZCB0byBsb29rIGZvciBvcmlnaW5hbFJlcXVlc3QgdXJsIGluc3RlYWQu
CisgICAgLy8gRklYTUU6IFJlc291cmNlTG9hZGVyOjp1cmwoKSBzaG91bGQgYmUgbWFkZSB0byBy
ZXR1cm4gYSBzZW5zaWJsZSB2YWx1ZSBhdCBhbGwgdGltZXMuCisgICAgaWYgKCFyZXNvdXJjZUxv
YWRlci0+aU9TT3JpZ2luYWxSZXF1ZXN0KCkuaXNOdWxsKCkpIHsKKyAgICAgICAgSG9zdEluZm9y
bWF0aW9uKiBvcmlnaW5hbEhvc3QgPSBob3N0Rm9yVVJMKHJlc291cmNlTG9hZGVyLT5pT1NPcmln
aW5hbFJlcXVlc3QoKS51cmwoKSk7CisgICAgICAgIGlmIChvcmlnaW5hbEhvc3QgJiYgb3JpZ2lu
YWxIb3N0ICE9IGhvc3QpCisgICAgICAgICAgICBvcmlnaW5hbEhvc3QtPnJlbW92ZShyZXNvdXJj
ZUxvYWRlcik7CisgICAgfQorI2VuZGlmCisgICAgc2NoZWR1bGVTZXJ2ZVBlbmRpbmdSZXF1ZXN0
cygpOworfQorCit2b2lkIFJlc291cmNlTG9hZFNjaGVkdWxlcjo6c2V0RGVmZXJzTG9hZGluZyhS
ZXNvdXJjZUxvYWRlciosIGJvb2wpCit7Cit9CisKK3ZvaWQgUmVzb3VyY2VMb2FkU2NoZWR1bGVy
Ojpjcm9zc09yaWdpblJlZGlyZWN0UmVjZWl2ZWQoUmVzb3VyY2VMb2FkZXIqIHJlc291cmNlTG9h
ZGVyLCBjb25zdCBVUkwmIHJlZGlyZWN0VVJMKQoreworICAgIEhvc3RJbmZvcm1hdGlvbiogb2xk
SG9zdCA9IGhvc3RGb3JVUkwocmVzb3VyY2VMb2FkZXItPnVybCgpKTsKKyAgICBBU1NFUlQob2xk
SG9zdCk7CisgICAgaWYgKCFvbGRIb3N0KQorICAgICAgICByZXR1cm47CisKKyAgICBIb3N0SW5m
b3JtYXRpb24qIG5ld0hvc3QgPSBob3N0Rm9yVVJMKHJlZGlyZWN0VVJMLCBDcmVhdGVJZk5vdEZv
dW5kKTsKKworICAgIGlmIChvbGRIb3N0LT5uYW1lKCkgPT0gbmV3SG9zdC0+bmFtZSgpKQorICAg
ICAgICByZXR1cm47CisKKyAgICBuZXdIb3N0LT5hZGRMb2FkSW5Qcm9ncmVzcyhyZXNvdXJjZUxv
YWRlcik7CisgICAgb2xkSG9zdC0+cmVtb3ZlKHJlc291cmNlTG9hZGVyKTsKK30KKwordm9pZCBS
ZXNvdXJjZUxvYWRTY2hlZHVsZXI6OnNlcnZlUGVuZGluZ1JlcXVlc3RzKFJlc291cmNlTG9hZFBy
aW9yaXR5IG1pbmltdW1Qcmlvcml0eSkKK3sKKyAgICBMT0coUmVzb3VyY2VMb2FkaW5nLCAiUmVz
b3VyY2VMb2FkU2NoZWR1bGVyOjpzZXJ2ZVBlbmRpbmdSZXF1ZXN0cy4gbV9zdXNwZW5kUGVuZGlu
Z1JlcXVlc3RzQ291bnQ9JWQiLCBtX3N1c3BlbmRQZW5kaW5nUmVxdWVzdHNDb3VudCk7IAorICAg
IGlmIChpc1N1c3BlbmRpbmdQZW5kaW5nUmVxdWVzdHMoKSkKKyAgICAgICAgcmV0dXJuOworCisg
ICAgbV9yZXF1ZXN0VGltZXIuc3RvcCgpOworICAgIAorICAgIHNlcnZlUGVuZGluZ1JlcXVlc3Rz
KG1fbm9uSFRUUFByb3RvY29sSG9zdCwgbWluaW11bVByaW9yaXR5KTsKKworICAgIFZlY3RvcjxI
b3N0SW5mb3JtYXRpb24qPiBob3N0c1RvU2VydmU7CisgICAgY29weVZhbHVlc1RvVmVjdG9yKG1f
aG9zdHMsIGhvc3RzVG9TZXJ2ZSk7CisKKyAgICBmb3IgKGF1dG8qIGhvc3QgOiBob3N0c1RvU2Vy
dmUpIHsKKyAgICAgICAgaWYgKGhvc3QtPmhhc1JlcXVlc3RzKCkpCisgICAgICAgICAgICBzZXJ2
ZVBlbmRpbmdSZXF1ZXN0cyhob3N0LCBtaW5pbXVtUHJpb3JpdHkpOworICAgICAgICBlbHNlCisg
ICAgICAgICAgICBkZWxldGUgbV9ob3N0cy50YWtlKGhvc3QtPm5hbWUoKSk7CisgICAgfQorfQor
Cit2b2lkIFJlc291cmNlTG9hZFNjaGVkdWxlcjo6c2VydmVQZW5kaW5nUmVxdWVzdHMoSG9zdElu
Zm9ybWF0aW9uKiBob3N0LCBSZXNvdXJjZUxvYWRQcmlvcml0eSBtaW5pbXVtUHJpb3JpdHkpCit7
CisgICAgTE9HKFJlc291cmNlTG9hZGluZywgIlJlc291cmNlTG9hZFNjaGVkdWxlcjo6c2VydmVQ
ZW5kaW5nUmVxdWVzdHMgSG9zdEluZm9ybWF0aW9uLm1fbmFtZT0nJXMnIiwgaG9zdC0+bmFtZSgp
LmxhdGluMSgpLmRhdGEoKSk7CisKKyAgICBhdXRvIHByaW9yaXR5ID0gUmVzb3VyY2VMb2FkUHJp
b3JpdHk6OkhpZ2hlc3Q7CisgICAgd2hpbGUgKHRydWUpIHsKKyAgICAgICAgYXV0byYgcmVxdWVz
dHNQZW5kaW5nID0gaG9zdC0+cmVxdWVzdHNQZW5kaW5nKHByaW9yaXR5KTsKKyAgICAgICAgd2hp
bGUgKCFyZXF1ZXN0c1BlbmRpbmcuaXNFbXB0eSgpKSB7CisgICAgICAgICAgICBSZWZQdHI8UmVz
b3VyY2VMb2FkZXI+IHJlc291cmNlTG9hZGVyID0gcmVxdWVzdHNQZW5kaW5nLmZpcnN0KCk7CisK
KyAgICAgICAgICAgIC8vIEZvciBuYW1lZCBob3N0cyAtIHdoaWNoIGFyZSBvbmx5IGh0dHAocykg
aG9zdHMgLSB3ZSBzaG91bGQgYWx3YXlzIGVuZm9yY2UgdGhlIGNvbm5lY3Rpb24gbGltaXQuCisg
ICAgICAgICAgICAvLyBGb3Igbm9uLW5hbWVkIGhvc3RzIC0gZXZlcnl0aGluZyBidXQgaHR0cChz
KSAtIHdlIHNob3VsZCBvbmx5IGVuZm9yY2UgdGhlIGxpbWl0IGlmIHRoZSBkb2N1bWVudCBpc24n
dCBkb25lIHBhcnNpbmcgCisgICAgICAgICAgICAvLyBhbmQgd2UgZG9uJ3Qga25vdyBhbGwgc3R5
bGVzaGVldHMgeWV0LgorICAgICAgICAgICAgRG9jdW1lbnQqIGRvY3VtZW50ID0gcmVzb3VyY2VM
b2FkZXItPmZyYW1lTG9hZGVyKCkgPyByZXNvdXJjZUxvYWRlci0+ZnJhbWVMb2FkZXIoKS0+ZnJh
bWUoKS5kb2N1bWVudCgpIDogMDsKKyAgICAgICAgICAgIGJvb2wgc2hvdWxkTGltaXRSZXF1ZXN0
cyA9ICFob3N0LT5uYW1lKCkuaXNOdWxsKCkgfHwgKGRvY3VtZW50ICYmIChkb2N1bWVudC0+cGFy
c2luZygpIHx8ICFkb2N1bWVudC0+aGF2ZVN0eWxlc2hlZXRzTG9hZGVkKCkpKTsKKyAgICAgICAg
ICAgIGlmIChzaG91bGRMaW1pdFJlcXVlc3RzICYmIGhvc3QtPmxpbWl0UmVxdWVzdHMocHJpb3Jp
dHkpKQorICAgICAgICAgICAgICAgIHJldHVybjsKKworICAgICAgICAgICAgcmVxdWVzdHNQZW5k
aW5nLnJlbW92ZUZpcnN0KCk7CisgICAgICAgICAgICBob3N0LT5hZGRMb2FkSW5Qcm9ncmVzcyhy
ZXNvdXJjZUxvYWRlci5nZXQoKSk7CisjaWYgUExBVEZPUk0oSU9TKQorICAgICAgICAgICAgaWYg
KCFhcHBsaWNhdGlvbklzV2ViUHJvY2VzcygpKSB7CisgICAgICAgICAgICAgICAgcmVzb3VyY2VM
b2FkZXItPnN0YXJ0TG9hZGluZygpOworICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAg
ICAgIH0KKyNlbmRpZgorICAgICAgICAgICAgcmVzb3VyY2VMb2FkZXItPnN0YXJ0KCk7CisgICAg
ICAgIH0KKyAgICAgICAgaWYgKHByaW9yaXR5ID09IG1pbmltdW1Qcmlvcml0eSkKKyAgICAgICAg
ICAgIHJldHVybjsKKyAgICAgICAgLS1wcmlvcml0eTsKKyAgICB9Cit9CisKK3ZvaWQgUmVzb3Vy
Y2VMb2FkU2NoZWR1bGVyOjpzdXNwZW5kUGVuZGluZ1JlcXVlc3RzKCkKK3sKKyAgICArK21fc3Vz
cGVuZFBlbmRpbmdSZXF1ZXN0c0NvdW50OworfQorCit2b2lkIFJlc291cmNlTG9hZFNjaGVkdWxl
cjo6cmVzdW1lUGVuZGluZ1JlcXVlc3RzKCkKK3sKKyAgICBBU1NFUlQobV9zdXNwZW5kUGVuZGlu
Z1JlcXVlc3RzQ291bnQpOworICAgIC0tbV9zdXNwZW5kUGVuZGluZ1JlcXVlc3RzQ291bnQ7Cisg
ICAgaWYgKG1fc3VzcGVuZFBlbmRpbmdSZXF1ZXN0c0NvdW50KQorICAgICAgICByZXR1cm47Cisg
ICAgaWYgKCFtX2hvc3RzLmlzRW1wdHkoKSB8fCBtX25vbkhUVFBQcm90b2NvbEhvc3QtPmhhc1Jl
cXVlc3RzKCkpCisgICAgICAgIHNjaGVkdWxlU2VydmVQZW5kaW5nUmVxdWVzdHMoKTsKK30KKyAg
ICAKK3ZvaWQgUmVzb3VyY2VMb2FkU2NoZWR1bGVyOjpzY2hlZHVsZVNlcnZlUGVuZGluZ1JlcXVl
c3RzKCkKK3sKKyAgICBMT0coUmVzb3VyY2VMb2FkaW5nLCAiUmVzb3VyY2VMb2FkU2NoZWR1bGVy
OjpzY2hlZHVsZVNlcnZlUGVuZGluZ1JlcXVlc3RzLCBtX3JlcXVlc3RUaW1lci5pc0FjdGl2ZSgp
PSV1IiwgbV9yZXF1ZXN0VGltZXIuaXNBY3RpdmUoKSk7CisgICAgaWYgKCFtX3JlcXVlc3RUaW1l
ci5pc0FjdGl2ZSgpKQorICAgICAgICBtX3JlcXVlc3RUaW1lci5zdGFydE9uZVNob3QoMCk7Cit9
CisKK3ZvaWQgUmVzb3VyY2VMb2FkU2NoZWR1bGVyOjpyZXF1ZXN0VGltZXJGaXJlZCgpCit7Cisg
ICAgTE9HKFJlc291cmNlTG9hZGluZywgIlJlc291cmNlTG9hZFNjaGVkdWxlcjo6cmVxdWVzdFRp
bWVyRmlyZWRcbiIpOworICAgIHNlcnZlUGVuZGluZ1JlcXVlc3RzKCk7Cit9CisKK1Jlc291cmNl
TG9hZFNjaGVkdWxlcjo6SG9zdEluZm9ybWF0aW9uOjpIb3N0SW5mb3JtYXRpb24oY29uc3QgU3Ry
aW5nJiBuYW1lLCB1bnNpZ25lZCBtYXhSZXF1ZXN0c0luRmxpZ2h0KQorICAgIDogbV9uYW1lKG5h
bWUpCisgICAgLCBtX21heFJlcXVlc3RzSW5GbGlnaHQobWF4UmVxdWVzdHNJbkZsaWdodCkKK3sK
K30KKworUmVzb3VyY2VMb2FkU2NoZWR1bGVyOjpIb3N0SW5mb3JtYXRpb246On5Ib3N0SW5mb3Jt
YXRpb24oKQoreworICAgIEFTU0VSVCghaGFzUmVxdWVzdHMoKSk7Cit9CisKK3Vuc2lnbmVkIFJl
c291cmNlTG9hZFNjaGVkdWxlcjo6SG9zdEluZm9ybWF0aW9uOjpwcmlvcml0eVRvSW5kZXgoUmVz
b3VyY2VMb2FkUHJpb3JpdHkgcHJpb3JpdHkpCit7CisgICAgc3dpdGNoIChwcmlvcml0eSkgewor
ICAgIGNhc2UgUmVzb3VyY2VMb2FkUHJpb3JpdHk6OlZlcnlMb3c6CisgICAgICAgIHJldHVybiAw
OworICAgIGNhc2UgUmVzb3VyY2VMb2FkUHJpb3JpdHk6OkxvdzoKKyAgICAgICAgcmV0dXJuIDE7
CisgICAgY2FzZSBSZXNvdXJjZUxvYWRQcmlvcml0eTo6TWVkaXVtOgorICAgICAgICByZXR1cm4g
MjsKKyAgICBjYXNlIFJlc291cmNlTG9hZFByaW9yaXR5OjpIaWdoOgorICAgICAgICByZXR1cm4g
MzsKKyAgICBjYXNlIFJlc291cmNlTG9hZFByaW9yaXR5OjpWZXJ5SGlnaDoKKyAgICAgICAgcmV0
dXJuIDQ7CisgICAgfQorICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgIHJldHVybiAwOwor
fQorCit2b2lkIFJlc291cmNlTG9hZFNjaGVkdWxlcjo6SG9zdEluZm9ybWF0aW9uOjpzY2hlZHVs
ZShSZXNvdXJjZUxvYWRlciogcmVzb3VyY2VMb2FkZXIsIFJlc291cmNlTG9hZFByaW9yaXR5IHBy
aW9yaXR5KQoreworICAgIG1fcmVxdWVzdHNQZW5kaW5nW3ByaW9yaXR5VG9JbmRleChwcmlvcml0
eSldLmFwcGVuZChyZXNvdXJjZUxvYWRlcik7Cit9CisgICAgCit2b2lkIFJlc291cmNlTG9hZFNj
aGVkdWxlcjo6SG9zdEluZm9ybWF0aW9uOjphZGRMb2FkSW5Qcm9ncmVzcyhSZXNvdXJjZUxvYWRl
ciogcmVzb3VyY2VMb2FkZXIpCit7CisgICAgTE9HKFJlc291cmNlTG9hZGluZywgIkhvc3RJbmZv
cm1hdGlvbiAnJXMnIGxvYWRpbmcgJyVzJy4gQ3VycmVudCBjb3VudCAlZCIsIG1fbmFtZS5sYXRp
bjEoKS5kYXRhKCksIHJlc291cmNlTG9hZGVyLT51cmwoKS5zdHJpbmcoKS5sYXRpbjEoKS5kYXRh
KCksIG1fcmVxdWVzdHNMb2FkaW5nLnNpemUoKSk7CisgICAgbV9yZXF1ZXN0c0xvYWRpbmcuYWRk
KHJlc291cmNlTG9hZGVyKTsKK30KKyAgICAKK3ZvaWQgUmVzb3VyY2VMb2FkU2NoZWR1bGVyOjpI
b3N0SW5mb3JtYXRpb246OnJlbW92ZShSZXNvdXJjZUxvYWRlciogcmVzb3VyY2VMb2FkZXIpCit7
CisgICAgaWYgKG1fcmVxdWVzdHNMb2FkaW5nLnJlbW92ZShyZXNvdXJjZUxvYWRlcikpCisgICAg
ICAgIHJldHVybjsKKyAgICAKKyAgICBmb3IgKGF1dG8mIHJlcXVlc3RRdWV1ZSA6IG1fcmVxdWVz
dHNQZW5kaW5nKSB7CisgICAgICAgIGZvciAoYXV0byBpdCA9IHJlcXVlc3RRdWV1ZS5iZWdpbigp
LCBlbmQgPSByZXF1ZXN0UXVldWUuZW5kKCk7IGl0ICE9IGVuZDsgKytpdCkgeworICAgICAgICAg
ICAgaWYgKCppdCA9PSByZXNvdXJjZUxvYWRlcikgeworICAgICAgICAgICAgICAgIHJlcXVlc3RR
dWV1ZS5yZW1vdmUoaXQpOworICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgIH0K
KyAgICAgICAgfQorICAgIH0KK30KKworYm9vbCBSZXNvdXJjZUxvYWRTY2hlZHVsZXI6Okhvc3RJ
bmZvcm1hdGlvbjo6aGFzUmVxdWVzdHMoKSBjb25zdAoreworICAgIGlmICghbV9yZXF1ZXN0c0xv
YWRpbmcuaXNFbXB0eSgpKQorICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICBmb3IgKGF1dG8mIHJl
cXVlc3RRdWV1ZSA6IG1fcmVxdWVzdHNQZW5kaW5nKSB7CisgICAgICAgIGlmICghcmVxdWVzdFF1
ZXVlLmlzRW1wdHkoKSkKKyAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgIH0KKyAgICByZXR1
cm4gZmFsc2U7Cit9CisKK2Jvb2wgUmVzb3VyY2VMb2FkU2NoZWR1bGVyOjpIb3N0SW5mb3JtYXRp
b246OmxpbWl0UmVxdWVzdHMoUmVzb3VyY2VMb2FkUHJpb3JpdHkgcHJpb3JpdHkpIGNvbnN0IAor
eworICAgIGlmIChwcmlvcml0eSA9PSBSZXNvdXJjZUxvYWRQcmlvcml0eTo6VmVyeUxvdyAmJiAh
bV9yZXF1ZXN0c0xvYWRpbmcuaXNFbXB0eSgpKQorICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICBy
ZXR1cm4gbV9yZXF1ZXN0c0xvYWRpbmcuc2l6ZSgpID49IChyZXNvdXJjZUxvYWRTY2hlZHVsZXIo
KS0+aXNTZXJpYWxMb2FkaW5nRW5hYmxlZCgpID8gMSA6IG1fbWF4UmVxdWVzdHNJbkZsaWdodCk7
Cit9CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKSW5kZXg6IFNvdXJjZS9XZWJLaXQvV2ViQ29y
ZVN1cHBvcnQvV2ViUmVzb3VyY2VMb2FkU2NoZWR1bGVyLmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvV2ViS2l0L1dlYkNvcmVTdXBwb3J0L1dlYlJlc291cmNlTG9hZFNjaGVkdWxlci5jcHAJKHdv
cmtpbmcgY29weSkKKysrIFNvdXJjZS9XZWJLaXQvV2ViQ29yZVN1cHBvcnQvV2ViUmVzb3VyY2VM
b2FkU2NoZWR1bGVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMyw3ICszLDcgQEAKICAgICBDb3B5
cmlnaHQgKEMpIDIwMDEgRGlyayBNdWVsbGVyIChtdWVsbGVyQGtkZS5vcmcpCiAgICAgQ29weXJp
Z2h0IChDKSAyMDAyIFdhbGRvIEJhc3RpYW4gKGJhc3RpYW5Aa2RlLm9yZykKICAgICBDb3B5cmln
aHQgKEMpIDIwMDYgU2FtdWVsIFdlaW5pZyAoc2FtLndlaW5pZ0BnbWFpbC5jb20pCi0gICAgQ29w
eXJpZ2h0IChDKSAyMDA0LCAyMDA1LCAyMDA2LCAyMDA3LCAyMDA4IEFwcGxlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KKyAgICBDb3B5cmlnaHQgKEMpIDIwMDQtMjAwOCwgMjAxNSBBcHBsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgICAgQ29weXJpZ2h0IChDKSAyMDEwIEdvb2dsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAKICAgICBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0
d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCkBAIC0yMiwyMSArMjIsMjAgQEAK
ICAgICBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KICAqLwogCi0jaW5jbHVkZSAiY29uZmln
LmgiCi0jaW5jbHVkZSAiUmVzb3VyY2VMb2FkU2NoZWR1bGVyLmgiCisjaW5jbHVkZSAiV2ViUmVz
b3VyY2VMb2FkU2NoZWR1bGVyLmgiCiAKLSNpbmNsdWRlICJEb2N1bWVudC5oIgotI2luY2x1ZGUg
IkRvY3VtZW50TG9hZGVyLmgiCi0jaW5jbHVkZSAiRnJhbWUuaCIKLSNpbmNsdWRlICJGcmFtZUxv
YWRlci5oIgotI2luY2x1ZGUgIkxvYWRlclN0cmF0ZWd5LmgiCi0jaW5jbHVkZSAiTG9nZ2luZy5o
IgotI2luY2x1ZGUgIk5ldHNjYXBlUGx1Z0luU3RyZWFtTG9hZGVyLmgiCi0jaW5jbHVkZSAiUGxh
dGZvcm1TdHJhdGVnaWVzLmgiCi0jaW5jbHVkZSAiUmVzb3VyY2VMb2FkZXIuaCIKLSNpbmNsdWRl
ICJSZXNvdXJjZVJlcXVlc3QuaCIKLSNpbmNsdWRlICJTdWJyZXNvdXJjZUxvYWRlci5oIgotI2lu
Y2x1ZGUgIlVSTC5oIgorI2luY2x1ZGUgPFdlYkNvcmUvRG9jdW1lbnQuaD4KKyNpbmNsdWRlIDxX
ZWJDb3JlL0RvY3VtZW50TG9hZGVyLmg+CisjaW5jbHVkZSA8V2ViQ29yZS9GcmFtZS5oPgorI2lu
Y2x1ZGUgPFdlYkNvcmUvRnJhbWVMb2FkZXIuaD4KKyNpbmNsdWRlIDxXZWJDb3JlL0xvZ2dpbmcu
aD4KKyNpbmNsdWRlIDxXZWJDb3JlL05ldHNjYXBlUGx1Z0luU3RyZWFtTG9hZGVyLmg+CisjaW5j
bHVkZSA8V2ViQ29yZS9QaW5nSGFuZGxlLmg+CisjaW5jbHVkZSA8V2ViQ29yZS9QbGF0Zm9ybVN0
cmF0ZWdpZXMuaD4KKyNpbmNsdWRlIDxXZWJDb3JlL1Jlc291cmNlSGFuZGxlLmg+CisjaW5jbHVk
ZSA8V2ViQ29yZS9SZXNvdXJjZVJlcXVlc3QuaD4KKyNpbmNsdWRlIDxXZWJDb3JlL1N1YnJlc291
cmNlTG9hZGVyLmg+CisjaW5jbHVkZSA8V2ViQ29yZS9VUkwuaD4KICNpbmNsdWRlIDx3dGYvTWFp
blRocmVhZC5oPgogI2luY2x1ZGUgPHd0Zi9UZW1wb3JhcnlDaGFuZ2UuaD4KICNpbmNsdWRlIDx3
dGYvdGV4dC9DU3RyaW5nLmg+CkBAIC00OSw4ICs0OCw2IEBACiAjaW5jbHVkZSAiUXVpY2tMb29r
LmgiCiAjZW5kaWYKIAotbmFtZXNwYWNlIFdlYkNvcmUgewotCiAvLyBNYXRjaCB0aGUgcGFyYWxs
ZWwgY29ubmVjdGlvbiBjb3VudCB1c2VkIGJ5IHRoZSBuZXR3b3JraW5nIGxheWVyLgogc3RhdGlj
IHVuc2lnbmVkIG1heFJlcXVlc3RzSW5GbGlnaHRQZXJIb3N0OwogI2lmICFQTEFURk9STShJT1Mp
CkBAIC02MCw3ICs1NywxNCBAQCBzdGF0aWMgY29uc3QgdW5zaWduZWQgbWF4UmVxdWVzdHNJbkZs
aWdoCiBzdGF0aWMgY29uc3QgdW5zaWduZWQgbWF4UmVxdWVzdHNJbkZsaWdodEZvck5vbkhUVFBQ
cm90b2NvbHMgPSAxMDAwMDsKICNlbmRpZgogCi1SZXNvdXJjZUxvYWRTY2hlZHVsZXI6Okhvc3RJ
bmZvcm1hdGlvbiogUmVzb3VyY2VMb2FkU2NoZWR1bGVyOjpob3N0Rm9yVVJMKGNvbnN0IFVSTCYg
dXJsLCBDcmVhdGVIb3N0UG9saWN5IGNyZWF0ZUhvc3RQb2xpY3kpCit1c2luZyBuYW1lc3BhY2Ug
V2ViQ29yZTsKKworV2ViUmVzb3VyY2VMb2FkU2NoZWR1bGVyJiB3ZWJSZXNvdXJjZUxvYWRTY2hl
ZHVsZXIoKQoreworICAgIHJldHVybiBzdGF0aWNfY2FzdDxXZWJSZXNvdXJjZUxvYWRTY2hlZHVs
ZXImPigqcGxhdGZvcm1TdHJhdGVnaWVzKCktPmxvYWRlclN0cmF0ZWd5KCkpOworfQorCitXZWJS
ZXNvdXJjZUxvYWRTY2hlZHVsZXI6Okhvc3RJbmZvcm1hdGlvbiogV2ViUmVzb3VyY2VMb2FkU2No
ZWR1bGVyOjpob3N0Rm9yVVJMKGNvbnN0IFVSTCYgdXJsLCBDcmVhdGVIb3N0UG9saWN5IGNyZWF0
ZUhvc3RQb2xpY3kpCiB7CiAgICAgaWYgKCF1cmwucHJvdG9jb2xJc0luSFRUUEZhbWlseSgpKQog
ICAgICAgICByZXR1cm4gbV9ub25IVFRQUHJvdG9jb2xIb3N0OwpAQCAtNzUsNDMgKzc5LDIwIEBA
IFJlc291cmNlTG9hZFNjaGVkdWxlcjo6SG9zdEluZm9ybWF0aW9uKiAKICAgICByZXR1cm4gaG9z
dDsKIH0KIAotUmVzb3VyY2VMb2FkU2NoZWR1bGVyKiByZXNvdXJjZUxvYWRTY2hlZHVsZXIoKQot
ewotICAgIEFTU0VSVChpc01haW5UaHJlYWQoKSk7Ci0gICAgc3RhdGljIFJlc291cmNlTG9hZFNj
aGVkdWxlciogZ2xvYmFsU2NoZWR1bGVyID0gbnVsbHB0cjsKLSAgICAKLSAgICBpZiAoIWdsb2Jh
bFNjaGVkdWxlcikgewotICAgICAgICBzdGF0aWMgYm9vbCBpc0NhbGxpbmdPdXRUb1N0cmF0ZWd5
ID0gZmFsc2U7Ci0gICAgICAgIAotICAgICAgICAvLyBJZiB3ZSdyZSByZS1lbnRlcmluZyByZXNv
dXJjZUxvYWRTY2hlZHVsZXIoKSB3aGlsZSBjYWxsaW5nIG91dCB0byB0aGUgTG9hZGVyU3RyYXRl
Z3ksCi0gICAgICAgIC8vIHRoZW4gdGhlIExvYWRlclN0cmF0ZWd5IGlzIHRyeWluZyB0byB1c2Ug
dGhlIGRlZmF1bHQgcmVzb3VyY2VMb2FkU2NoZWR1bGVyLgotICAgICAgICAvLyBTbyB3ZSdsbCBj
cmVhdGUgaXQgaGVyZSBhbmQgc3RhcnQgdXNpbmcgaXQuCi0gICAgICAgIGlmIChpc0NhbGxpbmdP
dXRUb1N0cmF0ZWd5KSB7Ci0gICAgICAgICAgICBnbG9iYWxTY2hlZHVsZXIgPSBuZXcgUmVzb3Vy
Y2VMb2FkU2NoZWR1bGVyOwotICAgICAgICAgICAgcmV0dXJuIGdsb2JhbFNjaGVkdWxlcjsKLSAg
ICAgICAgfQotICAgICAgICAKLSAgICAgICAgVGVtcG9yYXJ5Q2hhbmdlPGJvb2w+IHJlY3Vyc2lv
bkd1YXJkKGlzQ2FsbGluZ091dFRvU3RyYXRlZ3ksIHRydWUpOwotICAgICAgICBnbG9iYWxTY2hl
ZHVsZXIgPSBwbGF0Zm9ybVN0cmF0ZWdpZXMoKS0+bG9hZGVyU3RyYXRlZ3koKS0+cmVzb3VyY2VM
b2FkU2NoZWR1bGVyKCk7Ci0gICAgfQotCi0gICAgcmV0dXJuIGdsb2JhbFNjaGVkdWxlcjsKLX0K
LQotUmVzb3VyY2VMb2FkU2NoZWR1bGVyOjpSZXNvdXJjZUxvYWRTY2hlZHVsZXIoKQorV2ViUmVz
b3VyY2VMb2FkU2NoZWR1bGVyOjpXZWJSZXNvdXJjZUxvYWRTY2hlZHVsZXIoKQogICAgIDogbV9u
b25IVFRQUHJvdG9jb2xIb3N0KG5ldyBIb3N0SW5mb3JtYXRpb24oU3RyaW5nKCksIG1heFJlcXVl
c3RzSW5GbGlnaHRGb3JOb25IVFRQUHJvdG9jb2xzKSkKLSAgICAsIG1fcmVxdWVzdFRpbWVyKCp0
aGlzLCAmUmVzb3VyY2VMb2FkU2NoZWR1bGVyOjpyZXF1ZXN0VGltZXJGaXJlZCkKKyAgICAsIG1f
cmVxdWVzdFRpbWVyKCp0aGlzLCAmV2ViUmVzb3VyY2VMb2FkU2NoZWR1bGVyOjpyZXF1ZXN0VGlt
ZXJGaXJlZCkKICAgICAsIG1fc3VzcGVuZFBlbmRpbmdSZXF1ZXN0c0NvdW50KDApCiAgICAgLCBt
X2lzU2VyaWFsTG9hZGluZ0VuYWJsZWQoZmFsc2UpCiB7CiAgICAgbWF4UmVxdWVzdHNJbkZsaWdo
dFBlckhvc3QgPSBpbml0aWFsaXplTWF4aW11bUhUVFBDb25uZWN0aW9uQ291bnRQZXJIb3N0KCk7
CiB9CiAKLVJlc291cmNlTG9hZFNjaGVkdWxlcjo6flJlc291cmNlTG9hZFNjaGVkdWxlcigpCitX
ZWJSZXNvdXJjZUxvYWRTY2hlZHVsZXI6On5XZWJSZXNvdXJjZUxvYWRTY2hlZHVsZXIoKQogewog
fQogCi1SZWZQdHI8U3VicmVzb3VyY2VMb2FkZXI+IFJlc291cmNlTG9hZFNjaGVkdWxlcjo6c2No
ZWR1bGVTdWJyZXNvdXJjZUxvYWQoRnJhbWUqIGZyYW1lLCBDYWNoZWRSZXNvdXJjZSogcmVzb3Vy
Y2UsIGNvbnN0IFJlc291cmNlUmVxdWVzdCYgcmVxdWVzdCwgY29uc3QgUmVzb3VyY2VMb2FkZXJP
cHRpb25zJiBvcHRpb25zKQorUmVmUHRyPFN1YnJlc291cmNlTG9hZGVyPiBXZWJSZXNvdXJjZUxv
YWRTY2hlZHVsZXI6OmxvYWRSZXNvdXJjZShGcmFtZSogZnJhbWUsIENhY2hlZFJlc291cmNlKiBy
ZXNvdXJjZSwgY29uc3QgUmVzb3VyY2VSZXF1ZXN0JiByZXF1ZXN0LCBjb25zdCBSZXNvdXJjZUxv
YWRlck9wdGlvbnMmIG9wdGlvbnMpCiB7CiAgICAgUmVmUHRyPFN1YnJlc291cmNlTG9hZGVyPiBs
b2FkZXIgPSBTdWJyZXNvdXJjZUxvYWRlcjo6Y3JlYXRlKGZyYW1lLCByZXNvdXJjZSwgcmVxdWVz
dCwgb3B0aW9ucyk7CiAgICAgaWYgKGxvYWRlcikKQEAgLTEyOCw3ICsxMDksMTIgQEAgUmVmUHRy
PFN1YnJlc291cmNlTG9hZGVyPiBSZXNvdXJjZUxvYWRTYwogICAgIHJldHVybiBsb2FkZXI7CiB9
CiAKLVJlZlB0cjxOZXRzY2FwZVBsdWdJblN0cmVhbUxvYWRlcj4gUmVzb3VyY2VMb2FkU2NoZWR1
bGVyOjpzY2hlZHVsZVBsdWdpblN0cmVhbUxvYWQoRnJhbWUqIGZyYW1lLCBOZXRzY2FwZVBsdWdJ
blN0cmVhbUxvYWRlckNsaWVudCogY2xpZW50LCBjb25zdCBSZXNvdXJjZVJlcXVlc3QmIHJlcXVl
c3QpCit2b2lkIFdlYlJlc291cmNlTG9hZFNjaGVkdWxlcjo6bG9hZFJlc291cmNlU3luY2hyb25v
dXNseShOZXR3b3JraW5nQ29udGV4dCogY29udGV4dCwgdW5zaWduZWQgbG9uZywgY29uc3QgUmVz
b3VyY2VSZXF1ZXN0JiByZXF1ZXN0LCBTdG9yZWRDcmVkZW50aWFscyBzdG9yZWRDcmVkZW50aWFs
cywgQ2xpZW50Q3JlZGVudGlhbFBvbGljeSwgUmVzb3VyY2VFcnJvciYgZXJyb3IsIFJlc291cmNl
UmVzcG9uc2UmIHJlc3BvbnNlLCBWZWN0b3I8Y2hhcj4mIGRhdGEpCit7CisgICAgUmVzb3VyY2VI
YW5kbGU6OmxvYWRSZXNvdXJjZVN5bmNocm9ub3VzbHkoY29udGV4dCwgcmVxdWVzdCwgc3RvcmVk
Q3JlZGVudGlhbHMsIGVycm9yLCByZXNwb25zZSwgZGF0YSk7Cit9CisKK1JlZlB0cjxOZXRzY2Fw
ZVBsdWdJblN0cmVhbUxvYWRlcj4gV2ViUmVzb3VyY2VMb2FkU2NoZWR1bGVyOjpzY2hlZHVsZVBs
dWdpblN0cmVhbUxvYWQoRnJhbWUqIGZyYW1lLCBOZXRzY2FwZVBsdWdJblN0cmVhbUxvYWRlckNs
aWVudCogY2xpZW50LCBjb25zdCBSZXNvdXJjZVJlcXVlc3QmIHJlcXVlc3QpCiB7CiAgICAgUmVm
UHRyPE5ldHNjYXBlUGx1Z0luU3RyZWFtTG9hZGVyPiBsb2FkZXIgPSBOZXRzY2FwZVBsdWdJblN0
cmVhbUxvYWRlcjo6Y3JlYXRlKGZyYW1lLCBjbGllbnQsIHJlcXVlc3QpOwogICAgIGlmIChsb2Fk
ZXIpCkBAIC0xMzYsMTEgKzEyMiwxMSBAQCBSZWZQdHI8TmV0c2NhcGVQbHVnSW5TdHJlYW1Mb2Fk
ZXI+IFJlc291CiAgICAgcmV0dXJuIGxvYWRlcjsKIH0KIAotdm9pZCBSZXNvdXJjZUxvYWRTY2hl
ZHVsZXI6OnNjaGVkdWxlTG9hZChSZXNvdXJjZUxvYWRlciogcmVzb3VyY2VMb2FkZXIpCit2b2lk
IFdlYlJlc291cmNlTG9hZFNjaGVkdWxlcjo6c2NoZWR1bGVMb2FkKFJlc291cmNlTG9hZGVyKiBy
ZXNvdXJjZUxvYWRlcikKIHsKICAgICBBU1NFUlQocmVzb3VyY2VMb2FkZXIpOwogCi0gICAgTE9H
KFJlc291cmNlTG9hZGluZywgIlJlc291cmNlTG9hZFNjaGVkdWxlcjo6bG9hZCByZXNvdXJjZSAl
cCAnJXMnIiwgcmVzb3VyY2VMb2FkZXIsIHJlc291cmNlTG9hZGVyLT51cmwoKS5zdHJpbmcoKS5s
YXRpbjEoKS5kYXRhKCkpOworICAgIExPRyhSZXNvdXJjZUxvYWRpbmcsICJXZWJSZXNvdXJjZUxv
YWRTY2hlZHVsZXI6OmxvYWQgcmVzb3VyY2UgJXAgJyVzJyIsIHJlc291cmNlTG9hZGVyLCByZXNv
dXJjZUxvYWRlci0+dXJsKCkuc3RyaW5nKCkubGF0aW4xKCkuZGF0YSgpKTsKIAogI2lmIFBMQVRG
T1JNKElPUykKICAgICAvLyBJZiB0aGVyZSdzIGEgd2ViIGFyY2hpdmUgcmVzb3VyY2UgZm9yIHRo
aXMgVVJMLCB3ZSBkb24ndCBuZWVkIHRvIHNjaGVkdWxlIHRoZSBsb2FkIHNpbmNlIGl0IHdpbGwg
bmV2ZXIgdG91Y2ggdGhlIG5ldHdvcmsuCkBAIC0xOTQsNyArMTgwLDcgQEAgdm9pZCBSZXNvdXJj
ZUxvYWRTY2hlZHVsZXI6OnNjaGVkdWxlTG9hZAogICAgIHNjaGVkdWxlU2VydmVQZW5kaW5nUmVx
dWVzdHMoKTsKIH0KIAotdm9pZCBSZXNvdXJjZUxvYWRTY2hlZHVsZXI6OnJlbW92ZShSZXNvdXJj
ZUxvYWRlciogcmVzb3VyY2VMb2FkZXIpCit2b2lkIFdlYlJlc291cmNlTG9hZFNjaGVkdWxlcjo6
cmVtb3ZlKFJlc291cmNlTG9hZGVyKiByZXNvdXJjZUxvYWRlcikKIHsKICAgICBBU1NFUlQocmVz
b3VyY2VMb2FkZXIpOwogCkBAIC0yMTMsMTEgKzE5OSwxMSBAQCB2b2lkIFJlc291cmNlTG9hZFNj
aGVkdWxlcjo6cmVtb3ZlKFJlc291CiAgICAgc2NoZWR1bGVTZXJ2ZVBlbmRpbmdSZXF1ZXN0cygp
OwogfQogCi12b2lkIFJlc291cmNlTG9hZFNjaGVkdWxlcjo6c2V0RGVmZXJzTG9hZGluZyhSZXNv
dXJjZUxvYWRlciosIGJvb2wpCit2b2lkIFdlYlJlc291cmNlTG9hZFNjaGVkdWxlcjo6c2V0RGVm
ZXJzTG9hZGluZyhSZXNvdXJjZUxvYWRlciosIGJvb2wpCiB7CiB9CiAKLXZvaWQgUmVzb3VyY2VM
b2FkU2NoZWR1bGVyOjpjcm9zc09yaWdpblJlZGlyZWN0UmVjZWl2ZWQoUmVzb3VyY2VMb2FkZXIq
IHJlc291cmNlTG9hZGVyLCBjb25zdCBVUkwmIHJlZGlyZWN0VVJMKQordm9pZCBXZWJSZXNvdXJj
ZUxvYWRTY2hlZHVsZXI6OmNyb3NzT3JpZ2luUmVkaXJlY3RSZWNlaXZlZChSZXNvdXJjZUxvYWRl
ciogcmVzb3VyY2VMb2FkZXIsIGNvbnN0IFVSTCYgcmVkaXJlY3RVUkwpCiB7CiAgICAgSG9zdElu
Zm9ybWF0aW9uKiBvbGRIb3N0ID0gaG9zdEZvclVSTChyZXNvdXJjZUxvYWRlci0+dXJsKCkpOwog
ICAgIEFTU0VSVChvbGRIb3N0KTsKQEAgLTIzMyw5ICsyMTksOSBAQCB2b2lkIFJlc291cmNlTG9h
ZFNjaGVkdWxlcjo6Y3Jvc3NPcmlnaW5SCiAgICAgb2xkSG9zdC0+cmVtb3ZlKHJlc291cmNlTG9h
ZGVyKTsKIH0KIAotdm9pZCBSZXNvdXJjZUxvYWRTY2hlZHVsZXI6OnNlcnZlUGVuZGluZ1JlcXVl
c3RzKFJlc291cmNlTG9hZFByaW9yaXR5IG1pbmltdW1Qcmlvcml0eSkKK3ZvaWQgV2ViUmVzb3Vy
Y2VMb2FkU2NoZWR1bGVyOjpzZXJ2ZVBlbmRpbmdSZXF1ZXN0cyhSZXNvdXJjZUxvYWRQcmlvcml0
eSBtaW5pbXVtUHJpb3JpdHkpCiB7Ci0gICAgTE9HKFJlc291cmNlTG9hZGluZywgIlJlc291cmNl
TG9hZFNjaGVkdWxlcjo6c2VydmVQZW5kaW5nUmVxdWVzdHMuIG1fc3VzcGVuZFBlbmRpbmdSZXF1
ZXN0c0NvdW50PSVkIiwgbV9zdXNwZW5kUGVuZGluZ1JlcXVlc3RzQ291bnQpOyAKKyAgICBMT0co
UmVzb3VyY2VMb2FkaW5nLCAiV2ViUmVzb3VyY2VMb2FkU2NoZWR1bGVyOjpzZXJ2ZVBlbmRpbmdS
ZXF1ZXN0cy4gbV9zdXNwZW5kUGVuZGluZ1JlcXVlc3RzQ291bnQ9JWQiLCBtX3N1c3BlbmRQZW5k
aW5nUmVxdWVzdHNDb3VudCk7IAogICAgIGlmIChpc1N1c3BlbmRpbmdQZW5kaW5nUmVxdWVzdHMo
KSkKICAgICAgICAgcmV0dXJuOwogCkBAIC0yNTQsOSArMjQwLDkgQEAgdm9pZCBSZXNvdXJjZUxv
YWRTY2hlZHVsZXI6OnNlcnZlUGVuZGluZwogICAgIH0KIH0KIAotdm9pZCBSZXNvdXJjZUxvYWRT
Y2hlZHVsZXI6OnNlcnZlUGVuZGluZ1JlcXVlc3RzKEhvc3RJbmZvcm1hdGlvbiogaG9zdCwgUmVz
b3VyY2VMb2FkUHJpb3JpdHkgbWluaW11bVByaW9yaXR5KQordm9pZCBXZWJSZXNvdXJjZUxvYWRT
Y2hlZHVsZXI6OnNlcnZlUGVuZGluZ1JlcXVlc3RzKEhvc3RJbmZvcm1hdGlvbiogaG9zdCwgUmVz
b3VyY2VMb2FkUHJpb3JpdHkgbWluaW11bVByaW9yaXR5KQogewotICAgIExPRyhSZXNvdXJjZUxv
YWRpbmcsICJSZXNvdXJjZUxvYWRTY2hlZHVsZXI6OnNlcnZlUGVuZGluZ1JlcXVlc3RzIEhvc3RJ
bmZvcm1hdGlvbi5tX25hbWU9JyVzJyIsIGhvc3QtPm5hbWUoKS5sYXRpbjEoKS5kYXRhKCkpOwor
ICAgIExPRyhSZXNvdXJjZUxvYWRpbmcsICJXZWJSZXNvdXJjZUxvYWRTY2hlZHVsZXI6OnNlcnZl
UGVuZGluZ1JlcXVlc3RzIEhvc3RJbmZvcm1hdGlvbi5tX25hbWU9JyVzJyIsIGhvc3QtPm5hbWUo
KS5sYXRpbjEoKS5kYXRhKCkpOwogCiAgICAgYXV0byBwcmlvcml0eSA9IFJlc291cmNlTG9hZFBy
aW9yaXR5OjpIaWdoZXN0OwogICAgIHdoaWxlICh0cnVlKSB7CkBAIC0yODgsMTIgKzI3NCwxMiBA
QCB2b2lkIFJlc291cmNlTG9hZFNjaGVkdWxlcjo6c2VydmVQZW5kaW5nCiAgICAgfQogfQogCi12
b2lkIFJlc291cmNlTG9hZFNjaGVkdWxlcjo6c3VzcGVuZFBlbmRpbmdSZXF1ZXN0cygpCit2b2lk
IFdlYlJlc291cmNlTG9hZFNjaGVkdWxlcjo6c3VzcGVuZFBlbmRpbmdSZXF1ZXN0cygpCiB7CiAg
ICAgKyttX3N1c3BlbmRQZW5kaW5nUmVxdWVzdHNDb3VudDsKIH0KIAotdm9pZCBSZXNvdXJjZUxv
YWRTY2hlZHVsZXI6OnJlc3VtZVBlbmRpbmdSZXF1ZXN0cygpCit2b2lkIFdlYlJlc291cmNlTG9h
ZFNjaGVkdWxlcjo6cmVzdW1lUGVuZGluZ1JlcXVlc3RzKCkKIHsKICAgICBBU1NFUlQobV9zdXNw
ZW5kUGVuZGluZ1JlcXVlc3RzQ291bnQpOwogICAgIC0tbV9zdXNwZW5kUGVuZGluZ1JlcXVlc3Rz
Q291bnQ7CkBAIC0zMDMsMzEgKzI4OSwzMSBAQCB2b2lkIFJlc291cmNlTG9hZFNjaGVkdWxlcjo6
cmVzdW1lUGVuZGluCiAgICAgICAgIHNjaGVkdWxlU2VydmVQZW5kaW5nUmVxdWVzdHMoKTsKIH0K
ICAgICAKLXZvaWQgUmVzb3VyY2VMb2FkU2NoZWR1bGVyOjpzY2hlZHVsZVNlcnZlUGVuZGluZ1Jl
cXVlc3RzKCkKK3ZvaWQgV2ViUmVzb3VyY2VMb2FkU2NoZWR1bGVyOjpzY2hlZHVsZVNlcnZlUGVu
ZGluZ1JlcXVlc3RzKCkKIHsKLSAgICBMT0coUmVzb3VyY2VMb2FkaW5nLCAiUmVzb3VyY2VMb2Fk
U2NoZWR1bGVyOjpzY2hlZHVsZVNlcnZlUGVuZGluZ1JlcXVlc3RzLCBtX3JlcXVlc3RUaW1lci5p
c0FjdGl2ZSgpPSV1IiwgbV9yZXF1ZXN0VGltZXIuaXNBY3RpdmUoKSk7CisgICAgTE9HKFJlc291
cmNlTG9hZGluZywgIldlYlJlc291cmNlTG9hZFNjaGVkdWxlcjo6c2NoZWR1bGVTZXJ2ZVBlbmRp
bmdSZXF1ZXN0cywgbV9yZXF1ZXN0VGltZXIuaXNBY3RpdmUoKT0ldSIsIG1fcmVxdWVzdFRpbWVy
LmlzQWN0aXZlKCkpOwogICAgIGlmICghbV9yZXF1ZXN0VGltZXIuaXNBY3RpdmUoKSkKICAgICAg
ICAgbV9yZXF1ZXN0VGltZXIuc3RhcnRPbmVTaG90KDApOwogfQogCi12b2lkIFJlc291cmNlTG9h
ZFNjaGVkdWxlcjo6cmVxdWVzdFRpbWVyRmlyZWQoKQordm9pZCBXZWJSZXNvdXJjZUxvYWRTY2hl
ZHVsZXI6OnJlcXVlc3RUaW1lckZpcmVkKCkKIHsKLSAgICBMT0coUmVzb3VyY2VMb2FkaW5nLCAi
UmVzb3VyY2VMb2FkU2NoZWR1bGVyOjpyZXF1ZXN0VGltZXJGaXJlZFxuIik7CisgICAgTE9HKFJl
c291cmNlTG9hZGluZywgIldlYlJlc291cmNlTG9hZFNjaGVkdWxlcjo6cmVxdWVzdFRpbWVyRmly
ZWRcbiIpOwogICAgIHNlcnZlUGVuZGluZ1JlcXVlc3RzKCk7CiB9CiAKLVJlc291cmNlTG9hZFNj
aGVkdWxlcjo6SG9zdEluZm9ybWF0aW9uOjpIb3N0SW5mb3JtYXRpb24oY29uc3QgU3RyaW5nJiBu
YW1lLCB1bnNpZ25lZCBtYXhSZXF1ZXN0c0luRmxpZ2h0KQorV2ViUmVzb3VyY2VMb2FkU2NoZWR1
bGVyOjpIb3N0SW5mb3JtYXRpb246Okhvc3RJbmZvcm1hdGlvbihjb25zdCBTdHJpbmcmIG5hbWUs
IHVuc2lnbmVkIG1heFJlcXVlc3RzSW5GbGlnaHQpCiAgICAgOiBtX25hbWUobmFtZSkKICAgICAs
IG1fbWF4UmVxdWVzdHNJbkZsaWdodChtYXhSZXF1ZXN0c0luRmxpZ2h0KQogewogfQogCi1SZXNv
dXJjZUxvYWRTY2hlZHVsZXI6Okhvc3RJbmZvcm1hdGlvbjo6fkhvc3RJbmZvcm1hdGlvbigpCitX
ZWJSZXNvdXJjZUxvYWRTY2hlZHVsZXI6Okhvc3RJbmZvcm1hdGlvbjo6fkhvc3RJbmZvcm1hdGlv
bigpCiB7CiAgICAgQVNTRVJUKCFoYXNSZXF1ZXN0cygpKTsKIH0KIAotdW5zaWduZWQgUmVzb3Vy
Y2VMb2FkU2NoZWR1bGVyOjpIb3N0SW5mb3JtYXRpb246OnByaW9yaXR5VG9JbmRleChSZXNvdXJj
ZUxvYWRQcmlvcml0eSBwcmlvcml0eSkKK3Vuc2lnbmVkIFdlYlJlc291cmNlTG9hZFNjaGVkdWxl
cjo6SG9zdEluZm9ybWF0aW9uOjpwcmlvcml0eVRvSW5kZXgoUmVzb3VyY2VMb2FkUHJpb3JpdHkg
cHJpb3JpdHkpCiB7CiAgICAgc3dpdGNoIChwcmlvcml0eSkgewogICAgIGNhc2UgUmVzb3VyY2VM
b2FkUHJpb3JpdHk6OlZlcnlMb3c6CkBAIC0zNDUsMTggKzMzMSwxOCBAQCB1bnNpZ25lZCBSZXNv
dXJjZUxvYWRTY2hlZHVsZXI6Okhvc3RJbmZvCiAgICAgcmV0dXJuIDA7CiB9CiAKLXZvaWQgUmVz
b3VyY2VMb2FkU2NoZWR1bGVyOjpIb3N0SW5mb3JtYXRpb246OnNjaGVkdWxlKFJlc291cmNlTG9h
ZGVyKiByZXNvdXJjZUxvYWRlciwgUmVzb3VyY2VMb2FkUHJpb3JpdHkgcHJpb3JpdHkpCit2b2lk
IFdlYlJlc291cmNlTG9hZFNjaGVkdWxlcjo6SG9zdEluZm9ybWF0aW9uOjpzY2hlZHVsZShSZXNv
dXJjZUxvYWRlciogcmVzb3VyY2VMb2FkZXIsIFJlc291cmNlTG9hZFByaW9yaXR5IHByaW9yaXR5
KQogewogICAgIG1fcmVxdWVzdHNQZW5kaW5nW3ByaW9yaXR5VG9JbmRleChwcmlvcml0eSldLmFw
cGVuZChyZXNvdXJjZUxvYWRlcik7CiB9CiAgICAgCi12b2lkIFJlc291cmNlTG9hZFNjaGVkdWxl
cjo6SG9zdEluZm9ybWF0aW9uOjphZGRMb2FkSW5Qcm9ncmVzcyhSZXNvdXJjZUxvYWRlciogcmVz
b3VyY2VMb2FkZXIpCit2b2lkIFdlYlJlc291cmNlTG9hZFNjaGVkdWxlcjo6SG9zdEluZm9ybWF0
aW9uOjphZGRMb2FkSW5Qcm9ncmVzcyhSZXNvdXJjZUxvYWRlciogcmVzb3VyY2VMb2FkZXIpCiB7
CiAgICAgTE9HKFJlc291cmNlTG9hZGluZywgIkhvc3RJbmZvcm1hdGlvbiAnJXMnIGxvYWRpbmcg
JyVzJy4gQ3VycmVudCBjb3VudCAlZCIsIG1fbmFtZS5sYXRpbjEoKS5kYXRhKCksIHJlc291cmNl
TG9hZGVyLT51cmwoKS5zdHJpbmcoKS5sYXRpbjEoKS5kYXRhKCksIG1fcmVxdWVzdHNMb2FkaW5n
LnNpemUoKSk7CiAgICAgbV9yZXF1ZXN0c0xvYWRpbmcuYWRkKHJlc291cmNlTG9hZGVyKTsKIH0K
ICAgICAKLXZvaWQgUmVzb3VyY2VMb2FkU2NoZWR1bGVyOjpIb3N0SW5mb3JtYXRpb246OnJlbW92
ZShSZXNvdXJjZUxvYWRlciogcmVzb3VyY2VMb2FkZXIpCit2b2lkIFdlYlJlc291cmNlTG9hZFNj
aGVkdWxlcjo6SG9zdEluZm9ybWF0aW9uOjpyZW1vdmUoUmVzb3VyY2VMb2FkZXIqIHJlc291cmNl
TG9hZGVyKQogewogICAgIGlmIChtX3JlcXVlc3RzTG9hZGluZy5yZW1vdmUocmVzb3VyY2VMb2Fk
ZXIpKQogICAgICAgICByZXR1cm47CkBAIC0zNzEsNyArMzU3LDcgQEAgdm9pZCBSZXNvdXJjZUxv
YWRTY2hlZHVsZXI6Okhvc3RJbmZvcm1hdAogICAgIH0KIH0KIAotYm9vbCBSZXNvdXJjZUxvYWRT
Y2hlZHVsZXI6Okhvc3RJbmZvcm1hdGlvbjo6aGFzUmVxdWVzdHMoKSBjb25zdAorYm9vbCBXZWJS
ZXNvdXJjZUxvYWRTY2hlZHVsZXI6Okhvc3RJbmZvcm1hdGlvbjo6aGFzUmVxdWVzdHMoKSBjb25z
dAogewogICAgIGlmICghbV9yZXF1ZXN0c0xvYWRpbmcuaXNFbXB0eSgpKQogICAgICAgICByZXR1
cm4gdHJ1ZTsKQEAgLTM4MiwxMSArMzY4LDE2IEBAIGJvb2wgUmVzb3VyY2VMb2FkU2NoZWR1bGVy
OjpIb3N0SW5mb3JtYXQKICAgICByZXR1cm4gZmFsc2U7CiB9CiAKLWJvb2wgUmVzb3VyY2VMb2Fk
U2NoZWR1bGVyOjpIb3N0SW5mb3JtYXRpb246OmxpbWl0UmVxdWVzdHMoUmVzb3VyY2VMb2FkUHJp
b3JpdHkgcHJpb3JpdHkpIGNvbnN0IAorYm9vbCBXZWJSZXNvdXJjZUxvYWRTY2hlZHVsZXI6Okhv
c3RJbmZvcm1hdGlvbjo6bGltaXRSZXF1ZXN0cyhSZXNvdXJjZUxvYWRQcmlvcml0eSBwcmlvcml0
eSkgY29uc3QgCiB7CiAgICAgaWYgKHByaW9yaXR5ID09IFJlc291cmNlTG9hZFByaW9yaXR5OjpW
ZXJ5TG93ICYmICFtX3JlcXVlc3RzTG9hZGluZy5pc0VtcHR5KCkpCiAgICAgICAgIHJldHVybiB0
cnVlOwotICAgIHJldHVybiBtX3JlcXVlc3RzTG9hZGluZy5zaXplKCkgPj0gKHJlc291cmNlTG9h
ZFNjaGVkdWxlcigpLT5pc1NlcmlhbExvYWRpbmdFbmFibGVkKCkgPyAxIDogbV9tYXhSZXF1ZXN0
c0luRmxpZ2h0KTsKKyAgICByZXR1cm4gbV9yZXF1ZXN0c0xvYWRpbmcuc2l6ZSgpID49ICh3ZWJS
ZXNvdXJjZUxvYWRTY2hlZHVsZXIoKS5pc1NlcmlhbExvYWRpbmdFbmFibGVkKCkgPyAxIDogbV9t
YXhSZXF1ZXN0c0luRmxpZ2h0KTsKK30KKwordm9pZCBXZWJSZXNvdXJjZUxvYWRTY2hlZHVsZXI6
OmNyZWF0ZVBpbmdIYW5kbGUoTmV0d29ya2luZ0NvbnRleHQqIG5ldHdvcmtpbmdDb250ZXh0LCBS
ZXNvdXJjZVJlcXVlc3QmIHJlcXVlc3QsIGJvb2wgc2hvdWxkVXNlQ3JlZGVudGlhbFN0b3JhZ2Up
Cit7CisgICAgLy8gUGluZ0hhbmRsZSBtYW5hZ2VzIGl0cyBvd24gbGlmZXRpbWUsIGRlbGV0aW5n
IGl0c2VsZiB3aGVuIGl0cyBwdXJwb3NlIGhhcyBiZWVuIGZ1bGZpbGxlZC4KKyAgICBuZXcgUGlu
Z0hhbmRsZShuZXR3b3JraW5nQ29udGV4dCwgcmVxdWVzdCwgc2hvdWxkVXNlQ3JlZGVudGlhbFN0
b3JhZ2UsIFBpbmdIYW5kbGU6OlVzZXNBc3luY0NhbGxiYWNrczo6Tm8pOwogfQogCi19IC8vIG5h
bWVzcGFjZSBXZWJDb3JlCkluZGV4OiBTb3VyY2UvV2ViS2l0L1dlYkNvcmVTdXBwb3J0L1dlYlJl
c291cmNlTG9hZFNjaGVkdWxlci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvV2ViQ29y
ZVN1cHBvcnQvV2ViUmVzb3VyY2VMb2FkU2NoZWR1bGVyLmgJKHJldmlzaW9uIDE5Mjg4MCkJKGZy
b20gU291cmNlL1dlYkNvcmUvbG9hZGVyL1Jlc291cmNlTG9hZFNjaGVkdWxlci5oOjE5Mjg4MCkK
KysrIFNvdXJjZS9XZWJLaXQvV2ViQ29yZVN1cHBvcnQvV2ViUmVzb3VyY2VMb2FkU2NoZWR1bGVy
LmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwxMzQgQEAKKy8qCisgICAgQ29weXJpZ2h0IChD
KSAxOTk4IExhcnMgS25vbGwgKGtub2xsQG1waS1oZC5tcGcuZGUpCisgICAgQ29weXJpZ2h0IChD
KSAyMDAxIERpcmsgTXVlbGxlciA8bXVlbGxlckBrZGUub3JnPgorICAgIENvcHlyaWdodCAoQykg
MjAwNCwgMjAwNiwgMjAwNywgMjAwOCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisg
ICAgQ29weXJpZ2h0IChDKSAyMDEwIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisK
KyAgICBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUg
aXQgYW5kL29yCisgICAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJh
cnkgR2VuZXJhbCBQdWJsaWMKKyAgICBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBT
b2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAgICB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2Us
IG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisKKyAgICBUaGlzIGxpYnJh
cnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAg
ICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJy
YW50eSBvZgorICAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIg
UFVSUE9TRS4gIFNlZSB0aGUgR05VCisgICAgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNl
IGZvciBtb3JlIGRldGFpbHMuCisKKyAgICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5
IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgICAgYWxvbmcgd2l0
aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUg
dG8KKyAgICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBT
dHJlZXQsIEZpZnRoIEZsb29yLAorICAgIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgorICov
CisKKyNpZm5kZWYgUmVzb3VyY2VMb2FkU2NoZWR1bGVyX2gKKyNkZWZpbmUgUmVzb3VyY2VMb2Fk
U2NoZWR1bGVyX2gKKworI2luY2x1ZGUgIkZyYW1lTG9hZGVyVHlwZXMuaCIKKyNpbmNsdWRlICJS
ZXNvdXJjZUxvYWRlck9wdGlvbnMuaCIKKyNpbmNsdWRlICJSZXNvdXJjZUxvYWRQcmlvcml0eS5o
IgorI2luY2x1ZGUgIlRpbWVyLmgiCisjaW5jbHVkZSA8YXJyYXk+CisjaW5jbHVkZSA8d3RmL0Rl
cXVlLmg+CisjaW5jbHVkZSA8d3RmL0hhc2hNYXAuaD4KKyNpbmNsdWRlIDx3dGYvSGFzaFNldC5o
PgorI2luY2x1ZGUgPHd0Zi9Ob25jb3B5YWJsZS5oPgorI2luY2x1ZGUgPHd0Zi90ZXh0L1N0cmlu
Z0hhc2guaD4KKyNpbmNsdWRlIDx3dGYvdGV4dC9XVEZTdHJpbmcuaD4KKworbmFtZXNwYWNlIFdl
YkNvcmUgeworCitjbGFzcyBDYWNoZWRSZXNvdXJjZTsKK2NsYXNzIEZyYW1lOworY2xhc3MgVVJM
OworY2xhc3MgTmV0c2NhcGVQbHVnSW5TdHJlYW1Mb2FkZXI7CitjbGFzcyBOZXRzY2FwZVBsdWdJ
blN0cmVhbUxvYWRlckNsaWVudDsKK2NsYXNzIFJlc291cmNlTG9hZGVyOworY2xhc3MgUmVzb3Vy
Y2VSZXF1ZXN0OworY2xhc3MgU3VicmVzb3VyY2VMb2FkZXI7CisKK2NsYXNzIFJlc291cmNlTG9h
ZFNjaGVkdWxlciB7CisgICAgV1RGX01BS0VfTk9OQ09QWUFCTEUoUmVzb3VyY2VMb2FkU2NoZWR1
bGVyKTsgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7CitwdWJsaWM6CisgICAgV0VCQ09SRV9FWFBP
UlQgZnJpZW5kIFJlc291cmNlTG9hZFNjaGVkdWxlciogcmVzb3VyY2VMb2FkU2NoZWR1bGVyKCk7
CisKKyAgICBXRUJDT1JFX0VYUE9SVCB2aXJ0dWFsIFJlZlB0cjxTdWJyZXNvdXJjZUxvYWRlcj4g
c2NoZWR1bGVTdWJyZXNvdXJjZUxvYWQoRnJhbWUqLCBDYWNoZWRSZXNvdXJjZSosIGNvbnN0IFJl
c291cmNlUmVxdWVzdCYsIGNvbnN0IFJlc291cmNlTG9hZGVyT3B0aW9ucyYpOworICAgIFdFQkNP
UkVfRVhQT1JUIHZpcnR1YWwgUmVmUHRyPE5ldHNjYXBlUGx1Z0luU3RyZWFtTG9hZGVyPiBzY2hl
ZHVsZVBsdWdpblN0cmVhbUxvYWQoRnJhbWUqLCBOZXRzY2FwZVBsdWdJblN0cmVhbUxvYWRlckNs
aWVudCosIGNvbnN0IFJlc291cmNlUmVxdWVzdCYpOworICAgIFdFQkNPUkVfRVhQT1JUIHZpcnR1
YWwgdm9pZCByZW1vdmUoUmVzb3VyY2VMb2FkZXIqKTsKKyAgICB2aXJ0dWFsIHZvaWQgc2V0RGVm
ZXJzTG9hZGluZyhSZXNvdXJjZUxvYWRlciosIGJvb2wpOworICAgIHZpcnR1YWwgdm9pZCBjcm9z
c09yaWdpblJlZGlyZWN0UmVjZWl2ZWQoUmVzb3VyY2VMb2FkZXIqLCBjb25zdCBVUkwmIHJlZGly
ZWN0VVJMKTsKKyAgICAKKyAgICBXRUJDT1JFX0VYUE9SVCB2aXJ0dWFsIHZvaWQgc2VydmVQZW5k
aW5nUmVxdWVzdHMoUmVzb3VyY2VMb2FkUHJpb3JpdHkgbWluaW11bVByaW9yaXR5ID0gUmVzb3Vy
Y2VMb2FkUHJpb3JpdHk6OlZlcnlMb3cpOworICAgIFdFQkNPUkVfRVhQT1JUIHZpcnR1YWwgdm9p
ZCBzdXNwZW5kUGVuZGluZ1JlcXVlc3RzKCk7CisgICAgV0VCQ09SRV9FWFBPUlQgdmlydHVhbCB2
b2lkIHJlc3VtZVBlbmRpbmdSZXF1ZXN0cygpOworICAgIAorICAgIGJvb2wgaXNTZXJpYWxMb2Fk
aW5nRW5hYmxlZCgpIGNvbnN0IHsgcmV0dXJuIG1faXNTZXJpYWxMb2FkaW5nRW5hYmxlZDsgfQor
ICAgIHZpcnR1YWwgdm9pZCBzZXRTZXJpYWxMb2FkaW5nRW5hYmxlZChib29sIGIpIHsgbV9pc1Nl
cmlhbExvYWRpbmdFbmFibGVkID0gYjsgfQorCisgICAgY2xhc3MgU3VzcGVuZGVyIHsKKyAgICBw
dWJsaWM6CisgICAgICAgIGV4cGxpY2l0IFN1c3BlbmRlcihSZXNvdXJjZUxvYWRTY2hlZHVsZXIm
IHNjaGVkdWxlcikgOiBtX3NjaGVkdWxlcihzY2hlZHVsZXIpIHsgbV9zY2hlZHVsZXIuc3VzcGVu
ZFBlbmRpbmdSZXF1ZXN0cygpOyB9CisgICAgICAgIH5TdXNwZW5kZXIoKSB7IG1fc2NoZWR1bGVy
LnJlc3VtZVBlbmRpbmdSZXF1ZXN0cygpOyB9CisgICAgcHJpdmF0ZToKKyAgICAgICAgUmVzb3Vy
Y2VMb2FkU2NoZWR1bGVyJiBtX3NjaGVkdWxlcjsKKyAgICB9OworCitwcm90ZWN0ZWQ6CisgICAg
V0VCQ09SRV9FWFBPUlQgUmVzb3VyY2VMb2FkU2NoZWR1bGVyKCk7CisgICAgV0VCQ09SRV9FWFBP
UlQgdmlydHVhbCB+UmVzb3VyY2VMb2FkU2NoZWR1bGVyKCk7CisKK3ByaXZhdGU6CisgICAgdm9p
ZCBzY2hlZHVsZUxvYWQoUmVzb3VyY2VMb2FkZXIqKTsKKyAgICB2b2lkIHNjaGVkdWxlU2VydmVQ
ZW5kaW5nUmVxdWVzdHMoKTsKKyAgICB2b2lkIHJlcXVlc3RUaW1lckZpcmVkKCk7CisKKyAgICBi
b29sIGlzU3VzcGVuZGluZ1BlbmRpbmdSZXF1ZXN0cygpIGNvbnN0IHsgcmV0dXJuICEhbV9zdXNw
ZW5kUGVuZGluZ1JlcXVlc3RzQ291bnQ7IH0KKworICAgIGNsYXNzIEhvc3RJbmZvcm1hdGlvbiB7
CisgICAgICAgIFdURl9NQUtFX05PTkNPUFlBQkxFKEhvc3RJbmZvcm1hdGlvbik7IFdURl9NQUtF
X0ZBU1RfQUxMT0NBVEVEOworICAgIHB1YmxpYzoKKyAgICAgICAgSG9zdEluZm9ybWF0aW9uKGNv
bnN0IFN0cmluZyYsIHVuc2lnbmVkKTsKKyAgICAgICAgfkhvc3RJbmZvcm1hdGlvbigpOworICAg
ICAgICAKKyAgICAgICAgY29uc3QgU3RyaW5nJiBuYW1lKCkgY29uc3QgeyByZXR1cm4gbV9uYW1l
OyB9CisgICAgICAgIHZvaWQgc2NoZWR1bGUoUmVzb3VyY2VMb2FkZXIqLCBSZXNvdXJjZUxvYWRQ
cmlvcml0eSA9IFJlc291cmNlTG9hZFByaW9yaXR5OjpWZXJ5TG93KTsKKyAgICAgICAgdm9pZCBh
ZGRMb2FkSW5Qcm9ncmVzcyhSZXNvdXJjZUxvYWRlciopOworICAgICAgICB2b2lkIHJlbW92ZShS
ZXNvdXJjZUxvYWRlciopOworICAgICAgICBib29sIGhhc1JlcXVlc3RzKCkgY29uc3Q7CisgICAg
ICAgIGJvb2wgbGltaXRSZXF1ZXN0cyhSZXNvdXJjZUxvYWRQcmlvcml0eSkgY29uc3Q7CisKKyAg
ICAgICAgdHlwZWRlZiBEZXF1ZTxSZWZQdHI8UmVzb3VyY2VMb2FkZXI+PiBSZXF1ZXN0UXVldWU7
CisgICAgICAgIFJlcXVlc3RRdWV1ZSYgcmVxdWVzdHNQZW5kaW5nKFJlc291cmNlTG9hZFByaW9y
aXR5IHByaW9yaXR5KSB7IHJldHVybiBtX3JlcXVlc3RzUGVuZGluZ1twcmlvcml0eVRvSW5kZXgo
cHJpb3JpdHkpXTsgfQorCisgICAgcHJpdmF0ZToKKyAgICAgICAgc3RhdGljIHVuc2lnbmVkIHBy
aW9yaXR5VG9JbmRleChSZXNvdXJjZUxvYWRQcmlvcml0eSk7CisKKyAgICAgICAgc3RkOjphcnJh
eTxSZXF1ZXN0UXVldWUsIHJlc291cmNlTG9hZFByaW9yaXR5Q291bnQ+IG1fcmVxdWVzdHNQZW5k
aW5nOworICAgICAgICB0eXBlZGVmIEhhc2hTZXQ8UmVmUHRyPFJlc291cmNlTG9hZGVyPj4gUmVx
dWVzdE1hcDsKKyAgICAgICAgUmVxdWVzdE1hcCBtX3JlcXVlc3RzTG9hZGluZzsKKyAgICAgICAg
Y29uc3QgU3RyaW5nIG1fbmFtZTsKKyAgICAgICAgY29uc3QgdW5zaWduZWQgbV9tYXhSZXF1ZXN0
c0luRmxpZ2h0OworICAgIH07CisKKyAgICBlbnVtIENyZWF0ZUhvc3RQb2xpY3kgeworICAgICAg
ICBDcmVhdGVJZk5vdEZvdW5kLAorICAgICAgICBGaW5kT25seQorICAgIH07CisgICAgCisgICAg
SG9zdEluZm9ybWF0aW9uKiBob3N0Rm9yVVJMKGNvbnN0IFVSTCYsIENyZWF0ZUhvc3RQb2xpY3kg
PSBGaW5kT25seSk7CisgICAgV0VCQ09SRV9FWFBPUlQgdm9pZCBzZXJ2ZVBlbmRpbmdSZXF1ZXN0
cyhIb3N0SW5mb3JtYXRpb24qLCBSZXNvdXJjZUxvYWRQcmlvcml0eSk7CisKKyAgICB0eXBlZGVm
IEhhc2hNYXA8U3RyaW5nLCBIb3N0SW5mb3JtYXRpb24qLCBTdHJpbmdIYXNoPiBIb3N0TWFwOwor
ICAgIEhvc3RNYXAgbV9ob3N0czsKKyAgICBIb3N0SW5mb3JtYXRpb24qIG1fbm9uSFRUUFByb3Rv
Y29sSG9zdDsKKyAgICAgICAgCisgICAgVGltZXIgbV9yZXF1ZXN0VGltZXI7CisKKyAgICB1bnNp
Z25lZCBtX3N1c3BlbmRQZW5kaW5nUmVxdWVzdHNDb3VudDsKKyAgICBib29sIG1faXNTZXJpYWxM
b2FkaW5nRW5hYmxlZDsKK307CisKK1dFQkNPUkVfRVhQT1JUIFJlc291cmNlTG9hZFNjaGVkdWxl
ciogcmVzb3VyY2VMb2FkU2NoZWR1bGVyKCk7CisKK30KKworI2VuZGlmCkluZGV4OiBTb3VyY2Uv
V2ViS2l0L1dlYkNvcmVTdXBwb3J0L1dlYlJlc291cmNlTG9hZFNjaGVkdWxlci5oCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9XZWJLaXQvV2ViQ29yZVN1cHBvcnQvV2ViUmVzb3VyY2VMb2FkU2NoZWR1
bGVyLmgJKHdvcmtpbmcgY29weSkKKysrIFNvdXJjZS9XZWJLaXQvV2ViQ29yZVN1cHBvcnQvV2Vi
UmVzb3VyY2VMb2FkU2NoZWR1bGVyLmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNyArMSw3IEBACiAv
KgogICAgIENvcHlyaWdodCAoQykgMTk5OCBMYXJzIEtub2xsIChrbm9sbEBtcGktaGQubXBnLmRl
KQogICAgIENvcHlyaWdodCAoQykgMjAwMSBEaXJrIE11ZWxsZXIgPG11ZWxsZXJAa2RlLm9yZz4K
LSAgICBDb3B5cmlnaHQgKEMpIDIwMDQsIDIwMDYsIDIwMDcsIDIwMDggQXBwbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgorICAgIENvcHlyaWdodCAoQykgMjAwNCwgMjAwNi0yMDA4LCAyMDE1
IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAgICBDb3B5cmlnaHQgKEMpIDIwMTAg
R29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KIAogICAgIFRoaXMgbGlicmFyeSBpcyBm
cmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKQEAgLTIwLDEzICsy
MCwxNCBAQAogICAgIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgogICovCiAKLSNpZm5kZWYg
UmVzb3VyY2VMb2FkU2NoZWR1bGVyX2gKLSNkZWZpbmUgUmVzb3VyY2VMb2FkU2NoZWR1bGVyX2gK
KyNpZm5kZWYgV2ViUmVzb3VyY2VMb2FkU2NoZWR1bGVyX2gKKyNkZWZpbmUgV2ViUmVzb3VyY2VM
b2FkU2NoZWR1bGVyX2gKIAotI2luY2x1ZGUgIkZyYW1lTG9hZGVyVHlwZXMuaCIKLSNpbmNsdWRl
ICJSZXNvdXJjZUxvYWRlck9wdGlvbnMuaCIKLSNpbmNsdWRlICJSZXNvdXJjZUxvYWRQcmlvcml0
eS5oIgotI2luY2x1ZGUgIlRpbWVyLmgiCisjaW5jbHVkZSA8V2ViQ29yZS9GcmFtZUxvYWRlclR5
cGVzLmg+CisjaW5jbHVkZSA8V2ViQ29yZS9Mb2FkZXJTdHJhdGVneS5oPgorI2luY2x1ZGUgPFdl
YkNvcmUvUmVzb3VyY2VMb2FkUHJpb3JpdHkuaD4KKyNpbmNsdWRlIDxXZWJDb3JlL1Jlc291cmNl
TG9hZGVyT3B0aW9ucy5oPgorI2luY2x1ZGUgPFdlYkNvcmUvVGltZXIuaD4KICNpbmNsdWRlIDxh
cnJheT4KICNpbmNsdWRlIDx3dGYvRGVxdWUuaD4KICNpbmNsdWRlIDx3dGYvSGFzaE1hcC5oPgpA
QCAtMzUsNDkgKzM2LDM3IEBACiAjaW5jbHVkZSA8d3RmL3RleHQvU3RyaW5nSGFzaC5oPgogI2lu
Y2x1ZGUgPHd0Zi90ZXh0L1dURlN0cmluZy5oPgogCi1uYW1lc3BhY2UgV2ViQ29yZSB7CitjbGFz
cyBXZWJSZXNvdXJjZUxvYWRTY2hlZHVsZXI7CiAKLWNsYXNzIENhY2hlZFJlc291cmNlOwotY2xh
c3MgRnJhbWU7Ci1jbGFzcyBVUkw7Ci1jbGFzcyBOZXRzY2FwZVBsdWdJblN0cmVhbUxvYWRlcjsK
LWNsYXNzIE5ldHNjYXBlUGx1Z0luU3RyZWFtTG9hZGVyQ2xpZW50OwotY2xhc3MgUmVzb3VyY2VM
b2FkZXI7Ci1jbGFzcyBSZXNvdXJjZVJlcXVlc3Q7Ci1jbGFzcyBTdWJyZXNvdXJjZUxvYWRlcjsK
K1dlYlJlc291cmNlTG9hZFNjaGVkdWxlciYgd2ViUmVzb3VyY2VMb2FkU2NoZWR1bGVyKCk7CiAK
LWNsYXNzIFJlc291cmNlTG9hZFNjaGVkdWxlciB7Ci0gICAgV1RGX01BS0VfTk9OQ09QWUFCTEUo
UmVzb3VyY2VMb2FkU2NoZWR1bGVyKTsgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7CitjbGFzcyBX
ZWJSZXNvdXJjZUxvYWRTY2hlZHVsZXIgOiBwdWJsaWMgV2ViQ29yZTo6TG9hZGVyU3RyYXRlZ3kg
eworICAgIFdURl9NQUtFX05PTkNPUFlBQkxFKFdlYlJlc291cmNlTG9hZFNjaGVkdWxlcik7IFdU
Rl9NQUtFX0ZBU1RfQUxMT0NBVEVEOwogcHVibGljOgotICAgIFdFQkNPUkVfRVhQT1JUIGZyaWVu
ZCBSZXNvdXJjZUxvYWRTY2hlZHVsZXIqIHJlc291cmNlTG9hZFNjaGVkdWxlcigpOworICAgIFdl
YlJlc291cmNlTG9hZFNjaGVkdWxlcigpOwogCi0gICAgV0VCQ09SRV9FWFBPUlQgdmlydHVhbCBS
ZWZQdHI8U3VicmVzb3VyY2VMb2FkZXI+IHNjaGVkdWxlU3VicmVzb3VyY2VMb2FkKEZyYW1lKiwg
Q2FjaGVkUmVzb3VyY2UqLCBjb25zdCBSZXNvdXJjZVJlcXVlc3QmLCBjb25zdCBSZXNvdXJjZUxv
YWRlck9wdGlvbnMmKTsKLSAgICBXRUJDT1JFX0VYUE9SVCB2aXJ0dWFsIFJlZlB0cjxOZXRzY2Fw
ZVBsdWdJblN0cmVhbUxvYWRlcj4gc2NoZWR1bGVQbHVnaW5TdHJlYW1Mb2FkKEZyYW1lKiwgTmV0
c2NhcGVQbHVnSW5TdHJlYW1Mb2FkZXJDbGllbnQqLCBjb25zdCBSZXNvdXJjZVJlcXVlc3QmKTsK
LSAgICBXRUJDT1JFX0VYUE9SVCB2aXJ0dWFsIHZvaWQgcmVtb3ZlKFJlc291cmNlTG9hZGVyKik7
Ci0gICAgdmlydHVhbCB2b2lkIHNldERlZmVyc0xvYWRpbmcoUmVzb3VyY2VMb2FkZXIqLCBib29s
KTsKLSAgICB2aXJ0dWFsIHZvaWQgY3Jvc3NPcmlnaW5SZWRpcmVjdFJlY2VpdmVkKFJlc291cmNl
TG9hZGVyKiwgY29uc3QgVVJMJiByZWRpcmVjdFVSTCk7Ci0gICAgCi0gICAgV0VCQ09SRV9FWFBP
UlQgdmlydHVhbCB2b2lkIHNlcnZlUGVuZGluZ1JlcXVlc3RzKFJlc291cmNlTG9hZFByaW9yaXR5
IG1pbmltdW1Qcmlvcml0eSA9IFJlc291cmNlTG9hZFByaW9yaXR5OjpWZXJ5TG93KTsKLSAgICBX
RUJDT1JFX0VYUE9SVCB2aXJ0dWFsIHZvaWQgc3VzcGVuZFBlbmRpbmdSZXF1ZXN0cygpOwotICAg
IFdFQkNPUkVfRVhQT1JUIHZpcnR1YWwgdm9pZCByZXN1bWVQZW5kaW5nUmVxdWVzdHMoKTsKKyAg
ICBSZWZQdHI8V2ViQ29yZTo6U3VicmVzb3VyY2VMb2FkZXI+IGxvYWRSZXNvdXJjZShXZWJDb3Jl
OjpGcmFtZSosIFdlYkNvcmU6OkNhY2hlZFJlc291cmNlKiwgY29uc3QgV2ViQ29yZTo6UmVzb3Vy
Y2VSZXF1ZXN0JiwgY29uc3QgV2ViQ29yZTo6UmVzb3VyY2VMb2FkZXJPcHRpb25zJikgb3ZlcnJp
ZGU7CisgICAgdm9pZCBsb2FkUmVzb3VyY2VTeW5jaHJvbm91c2x5KFdlYkNvcmU6Ok5ldHdvcmtp
bmdDb250ZXh0KiwgdW5zaWduZWQgbG9uZywgY29uc3QgV2ViQ29yZTo6UmVzb3VyY2VSZXF1ZXN0
JiwgV2ViQ29yZTo6U3RvcmVkQ3JlZGVudGlhbHMsIFdlYkNvcmU6OkNsaWVudENyZWRlbnRpYWxQ
b2xpY3ksIFdlYkNvcmU6OlJlc291cmNlRXJyb3ImLCBXZWJDb3JlOjpSZXNvdXJjZVJlc3BvbnNl
JiwgVmVjdG9yPGNoYXI+Jikgb3ZlcnJpZGU7CisgICAgdm9pZCByZW1vdmUoV2ViQ29yZTo6UmVz
b3VyY2VMb2FkZXIqKSBvdmVycmlkZTsKKyAgICB2b2lkIHNldERlZmVyc0xvYWRpbmcoV2ViQ29y
ZTo6UmVzb3VyY2VMb2FkZXIqLCBib29sKSBvdmVycmlkZTsKKyAgICB2b2lkIGNyb3NzT3JpZ2lu
UmVkaXJlY3RSZWNlaXZlZChXZWJDb3JlOjpSZXNvdXJjZUxvYWRlciosIGNvbnN0IFdlYkNvcmU6
OlVSTCYgcmVkaXJlY3RVUkwpIG92ZXJyaWRlOwogICAgIAorICAgIHZvaWQgc2VydmVQZW5kaW5n
UmVxdWVzdHMoV2ViQ29yZTo6UmVzb3VyY2VMb2FkUHJpb3JpdHkgbWluaW11bVByaW9yaXR5ID0g
V2ViQ29yZTo6UmVzb3VyY2VMb2FkUHJpb3JpdHk6OlZlcnlMb3cpIG92ZXJyaWRlOworICAgIHZv
aWQgc3VzcGVuZFBlbmRpbmdSZXF1ZXN0cygpIG92ZXJyaWRlOworICAgIHZvaWQgcmVzdW1lUGVu
ZGluZ1JlcXVlc3RzKCkgb3ZlcnJpZGU7CisKKyAgICB2b2lkIGNyZWF0ZVBpbmdIYW5kbGUoV2Vi
Q29yZTo6TmV0d29ya2luZ0NvbnRleHQqLCBXZWJDb3JlOjpSZXNvdXJjZVJlcXVlc3QmLCBib29s
IHNob3VsZFVzZUNyZWRlbnRpYWxTdG9yYWdlKSBvdmVycmlkZTsKKwogICAgIGJvb2wgaXNTZXJp
YWxMb2FkaW5nRW5hYmxlZCgpIGNvbnN0IHsgcmV0dXJuIG1faXNTZXJpYWxMb2FkaW5nRW5hYmxl
ZDsgfQotICAgIHZpcnR1YWwgdm9pZCBzZXRTZXJpYWxMb2FkaW5nRW5hYmxlZChib29sIGIpIHsg
bV9pc1NlcmlhbExvYWRpbmdFbmFibGVkID0gYjsgfQorICAgIHZvaWQgc2V0U2VyaWFsTG9hZGlu
Z0VuYWJsZWQoYm9vbCBiKSB7IG1faXNTZXJpYWxMb2FkaW5nRW5hYmxlZCA9IGI7IH0KIAotICAg
IGNsYXNzIFN1c3BlbmRlciB7Ci0gICAgcHVibGljOgotICAgICAgICBleHBsaWNpdCBTdXNwZW5k
ZXIoUmVzb3VyY2VMb2FkU2NoZWR1bGVyJiBzY2hlZHVsZXIpIDogbV9zY2hlZHVsZXIoc2NoZWR1
bGVyKSB7IG1fc2NoZWR1bGVyLnN1c3BlbmRQZW5kaW5nUmVxdWVzdHMoKTsgfQotICAgICAgICB+
U3VzcGVuZGVyKCkgeyBtX3NjaGVkdWxlci5yZXN1bWVQZW5kaW5nUmVxdWVzdHMoKTsgfQotICAg
IHByaXZhdGU6Ci0gICAgICAgIFJlc291cmNlTG9hZFNjaGVkdWxlciYgbV9zY2hlZHVsZXI7Ci0g
ICAgfTsKKyAgICBSZWZQdHI8V2ViQ29yZTo6TmV0c2NhcGVQbHVnSW5TdHJlYW1Mb2FkZXI+IHNj
aGVkdWxlUGx1Z2luU3RyZWFtTG9hZChXZWJDb3JlOjpGcmFtZSosIFdlYkNvcmU6Ok5ldHNjYXBl
UGx1Z0luU3RyZWFtTG9hZGVyQ2xpZW50KiwgY29uc3QgV2ViQ29yZTo6UmVzb3VyY2VSZXF1ZXN0
Jik7CiAKIHByb3RlY3RlZDoKLSAgICBXRUJDT1JFX0VYUE9SVCBSZXNvdXJjZUxvYWRTY2hlZHVs
ZXIoKTsKLSAgICBXRUJDT1JFX0VYUE9SVCB2aXJ0dWFsIH5SZXNvdXJjZUxvYWRTY2hlZHVsZXIo
KTsKKyAgICB2aXJ0dWFsIH5XZWJSZXNvdXJjZUxvYWRTY2hlZHVsZXIoKTsKIAogcHJpdmF0ZToK
LSAgICB2b2lkIHNjaGVkdWxlTG9hZChSZXNvdXJjZUxvYWRlciopOworICAgIHZvaWQgc2NoZWR1
bGVMb2FkKFdlYkNvcmU6OlJlc291cmNlTG9hZGVyKik7CiAgICAgdm9pZCBzY2hlZHVsZVNlcnZl
UGVuZGluZ1JlcXVlc3RzKCk7CiAgICAgdm9pZCByZXF1ZXN0VGltZXJGaXJlZCgpOwogCkBAIC05
MCwyMCArNzksMjAgQEAgcHJpdmF0ZToKICAgICAgICAgfkhvc3RJbmZvcm1hdGlvbigpOwogICAg
ICAgICAKICAgICAgICAgY29uc3QgU3RyaW5nJiBuYW1lKCkgY29uc3QgeyByZXR1cm4gbV9uYW1l
OyB9Ci0gICAgICAgIHZvaWQgc2NoZWR1bGUoUmVzb3VyY2VMb2FkZXIqLCBSZXNvdXJjZUxvYWRQ
cmlvcml0eSA9IFJlc291cmNlTG9hZFByaW9yaXR5OjpWZXJ5TG93KTsKLSAgICAgICAgdm9pZCBh
ZGRMb2FkSW5Qcm9ncmVzcyhSZXNvdXJjZUxvYWRlciopOwotICAgICAgICB2b2lkIHJlbW92ZShS
ZXNvdXJjZUxvYWRlciopOworICAgICAgICB2b2lkIHNjaGVkdWxlKFdlYkNvcmU6OlJlc291cmNl
TG9hZGVyKiwgV2ViQ29yZTo6UmVzb3VyY2VMb2FkUHJpb3JpdHkgPSBXZWJDb3JlOjpSZXNvdXJj
ZUxvYWRQcmlvcml0eTo6VmVyeUxvdyk7CisgICAgICAgIHZvaWQgYWRkTG9hZEluUHJvZ3Jlc3Mo
V2ViQ29yZTo6UmVzb3VyY2VMb2FkZXIqKTsKKyAgICAgICAgdm9pZCByZW1vdmUoV2ViQ29yZTo6
UmVzb3VyY2VMb2FkZXIqKTsKICAgICAgICAgYm9vbCBoYXNSZXF1ZXN0cygpIGNvbnN0OwotICAg
ICAgICBib29sIGxpbWl0UmVxdWVzdHMoUmVzb3VyY2VMb2FkUHJpb3JpdHkpIGNvbnN0OworICAg
ICAgICBib29sIGxpbWl0UmVxdWVzdHMoV2ViQ29yZTo6UmVzb3VyY2VMb2FkUHJpb3JpdHkpIGNv
bnN0OwogCi0gICAgICAgIHR5cGVkZWYgRGVxdWU8UmVmUHRyPFJlc291cmNlTG9hZGVyPj4gUmVx
dWVzdFF1ZXVlOwotICAgICAgICBSZXF1ZXN0UXVldWUmIHJlcXVlc3RzUGVuZGluZyhSZXNvdXJj
ZUxvYWRQcmlvcml0eSBwcmlvcml0eSkgeyByZXR1cm4gbV9yZXF1ZXN0c1BlbmRpbmdbcHJpb3Jp
dHlUb0luZGV4KHByaW9yaXR5KV07IH0KKyAgICAgICAgdHlwZWRlZiBEZXF1ZTxSZWZQdHI8V2Vi
Q29yZTo6UmVzb3VyY2VMb2FkZXI+PiBSZXF1ZXN0UXVldWU7CisgICAgICAgIFJlcXVlc3RRdWV1
ZSYgcmVxdWVzdHNQZW5kaW5nKFdlYkNvcmU6OlJlc291cmNlTG9hZFByaW9yaXR5IHByaW9yaXR5
KSB7IHJldHVybiBtX3JlcXVlc3RzUGVuZGluZ1twcmlvcml0eVRvSW5kZXgocHJpb3JpdHkpXTsg
fQogCiAgICAgcHJpdmF0ZToKLSAgICAgICAgc3RhdGljIHVuc2lnbmVkIHByaW9yaXR5VG9JbmRl
eChSZXNvdXJjZUxvYWRQcmlvcml0eSk7CisgICAgICAgIHN0YXRpYyB1bnNpZ25lZCBwcmlvcml0
eVRvSW5kZXgoV2ViQ29yZTo6UmVzb3VyY2VMb2FkUHJpb3JpdHkpOwogCi0gICAgICAgIHN0ZDo6
YXJyYXk8UmVxdWVzdFF1ZXVlLCByZXNvdXJjZUxvYWRQcmlvcml0eUNvdW50PiBtX3JlcXVlc3Rz
UGVuZGluZzsKLSAgICAgICAgdHlwZWRlZiBIYXNoU2V0PFJlZlB0cjxSZXNvdXJjZUxvYWRlcj4+
IFJlcXVlc3RNYXA7CisgICAgICAgIHN0ZDo6YXJyYXk8UmVxdWVzdFF1ZXVlLCBXZWJDb3JlOjpy
ZXNvdXJjZUxvYWRQcmlvcml0eUNvdW50PiBtX3JlcXVlc3RzUGVuZGluZzsKKyAgICAgICAgdHlw
ZWRlZiBIYXNoU2V0PFJlZlB0cjxXZWJDb3JlOjpSZXNvdXJjZUxvYWRlcj4+IFJlcXVlc3RNYXA7
CiAgICAgICAgIFJlcXVlc3RNYXAgbV9yZXF1ZXN0c0xvYWRpbmc7CiAgICAgICAgIGNvbnN0IFN0
cmluZyBtX25hbWU7CiAgICAgICAgIGNvbnN0IHVuc2lnbmVkIG1fbWF4UmVxdWVzdHNJbkZsaWdo
dDsKQEAgLTExNCwyMSArMTAzLDE3IEBAIHByaXZhdGU6CiAgICAgICAgIEZpbmRPbmx5CiAgICAg
fTsKICAgICAKLSAgICBIb3N0SW5mb3JtYXRpb24qIGhvc3RGb3JVUkwoY29uc3QgVVJMJiwgQ3Jl
YXRlSG9zdFBvbGljeSA9IEZpbmRPbmx5KTsKLSAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIHNlcnZl
UGVuZGluZ1JlcXVlc3RzKEhvc3RJbmZvcm1hdGlvbiosIFJlc291cmNlTG9hZFByaW9yaXR5KTsK
KyAgICBIb3N0SW5mb3JtYXRpb24qIGhvc3RGb3JVUkwoY29uc3QgV2ViQ29yZTo6VVJMJiwgQ3Jl
YXRlSG9zdFBvbGljeSA9IEZpbmRPbmx5KTsKKyAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIHNlcnZl
UGVuZGluZ1JlcXVlc3RzKEhvc3RJbmZvcm1hdGlvbiosIFdlYkNvcmU6OlJlc291cmNlTG9hZFBy
aW9yaXR5KTsKIAogICAgIHR5cGVkZWYgSGFzaE1hcDxTdHJpbmcsIEhvc3RJbmZvcm1hdGlvbios
IFN0cmluZ0hhc2g+IEhvc3RNYXA7CiAgICAgSG9zdE1hcCBtX2hvc3RzOwogICAgIEhvc3RJbmZv
cm1hdGlvbiogbV9ub25IVFRQUHJvdG9jb2xIb3N0OwogICAgICAgICAKLSAgICBUaW1lciBtX3Jl
cXVlc3RUaW1lcjsKKyAgICBXZWJDb3JlOjpUaW1lciBtX3JlcXVlc3RUaW1lcjsKIAogICAgIHVu
c2lnbmVkIG1fc3VzcGVuZFBlbmRpbmdSZXF1ZXN0c0NvdW50OwogICAgIGJvb2wgbV9pc1Nlcmlh
bExvYWRpbmdFbmFibGVkOwogfTsKIAotV0VCQ09SRV9FWFBPUlQgUmVzb3VyY2VMb2FkU2NoZWR1
bGVyKiByZXNvdXJjZUxvYWRTY2hlZHVsZXIoKTsKLQotfQotCiAjZW5kaWYKSW5kZXg6IFNvdXJj
ZS9XZWJLaXQvV2ViS2l0Lnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1dlYktpdC9XZWJLaXQueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagkocmV2aXNpb24g
MTkyODgwKQorKysgU291cmNlL1dlYktpdC9XZWJLaXQueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJv
agkod29ya2luZyBjb3B5KQpAQCAtNDU1LDYgKzQ1NSw4IEBACiAJCUUxNTY2MzE5MEZCNjFDMUYw
MEMxOTlDQSAvKiBXZWJEb3dubG9hZC5tbSBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IEUxNTY2MzE4MEZCNjFDMUYwMEMxOTlDQSAvKiBXZWJEb3dubG9hZC5t
bSAqLzsgfTsKIAkJRTE2OTgzNjIxMTM0NkQxQjAwODk0MTE1IC8qIFByb3h5UnVudGltZU9iamVj
dC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRTE2OTgz
NjExMTM0NkQxQjAwODk0MTE1IC8qIFByb3h5UnVudGltZU9iamVjdC5oICovOyB9OwogCQlFMTY5
ODM2QzExMzQ2RDU2MDA4OTQxMTUgLyogUHJveHlSdW50aW1lT2JqZWN0Lm1tIGluIFNvdXJjZXMg
Ki8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRTE2OTgzNkIxMTM0NkQ1NjAwODk0
MTE1IC8qIFByb3h5UnVudGltZU9iamVjdC5tbSAqLzsgfTsKKwkJRTRBRUY5N0IxQzBERjRCQzAw
QjAxNzI3IC8qIFdlYlJlc291cmNlTG9hZFNjaGVkdWxlci5jcHAgaW4gU291cmNlcyAqLyA9IHtp
c2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBFNEFFRjk3OTFDMERGNEJDMDBCMDE3MjcgLyog
V2ViUmVzb3VyY2VMb2FkU2NoZWR1bGVyLmNwcCAqLzsgfTsKKwkJRTRBRUY5N0MxQzBERjRCQzAw
QjAxNzI3IC8qIFdlYlJlc291cmNlTG9hZFNjaGVkdWxlci5oIGluIEhlYWRlcnMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRTRBRUY5N0ExQzBERjRCQzAwQjAxNzI3IC8qIFdl
YlJlc291cmNlTG9hZFNjaGVkdWxlci5oICovOyB9OwogCQlFRDVCOTUyNDExMUI3MjVBMDA0NzIy
OTggLyogV2ViTG9jYWxpemFibGVTdHJpbmdzLm1tIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gRUQ1Qjk1MjMxMTFCNzI1QTAwNDcyMjk4IC8qIFdlYkxvY2Fs
aXphYmxlU3RyaW5ncy5tbSAqLzsgfTsKIAkJRUQ3RjZEOEIwOTgwNjgzNTAwQzIzNUVEIC8qIFdl
Yk5TRGF0YUV4dHJhc1ByaXZhdGUuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmls
ZTsgZmlsZVJlZiA9IEVEN0Y2RDhBMDk4MDY4MzUwMEMyMzVFRCAvKiBXZWJOU0RhdGFFeHRyYXNQ
cml2YXRlLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsK
IAkJRjgzNEFBRDcwRTY0QjFDNzAwRTI3MzdDIC8qIFdlYlRleHRJdGVyYXRvci5oIGluIEhlYWRl
cnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRjgzNEFBRDUwRTY0QjFDNzAw
RTI3MzdDIC8qIFdlYlRleHRJdGVyYXRvci5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0g
KFByaXZhdGUsICk7IH07IH07CkBAIC04NjgsNiArODcwLDggQEAKIAkJRTE1NjYzMTgwRkI2MUMx
RjAwQzE5OUNBIC8qIFdlYkRvd25sb2FkLm1tICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAub2Jq
Y3BwOyBwYXRoID0gV2ViRG93bmxvYWQubW07IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJ
CUUxNjk4MzYxMTEzNDZEMUIwMDg5NDExNSAvKiBQcm94eVJ1bnRpbWVPYmplY3QuaCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gUHJveHlSdW50aW1lT2JqZWN0Lmg7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CiAJCUUxNjk4MzZCMTEzNDZENTYwMDg5NDExNSAvKiBQcm94eVJ1
bnRpbWVPYmplY3QubW0gKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5vYmpjcHA7IHBhdGggPSBQ
cm94eVJ1bnRpbWVPYmplY3QubW07IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUU0QUVG
OTc5MUMwREY0QkMwMEIwMTcyNyAvKiBXZWJSZXNvdXJjZUxvYWRTY2hlZHVsZXIuY3BwICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBuYW1lID0gV2ViUmVzb3VyY2VMb2FkU2NoZWR1bGVy
LmNwcDsgcGF0aCA9IFdlYkNvcmVTdXBwb3J0L1dlYlJlc291cmNlTG9hZFNjaGVkdWxlci5jcHA7
IHNvdXJjZVRyZWUgPSBTT1VSQ0VfUk9PVDsgfTsKKwkJRTRBRUY5N0ExQzBERjRCQzAwQjAxNzI3
IC8qIFdlYlJlc291cmNlTG9hZFNjaGVkdWxlci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7
IG5hbWUgPSBXZWJSZXNvdXJjZUxvYWRTY2hlZHVsZXIuaDsgcGF0aCA9IFdlYkNvcmVTdXBwb3J0
L1dlYlJlc291cmNlTG9hZFNjaGVkdWxlci5oOyBzb3VyY2VUcmVlID0gU09VUkNFX1JPT1Q7IH07
CiAJCUVEMjFCOTgxMDUyOEY3QUEwMDMyOTlBQyAvKiBXZWJEb2N1bWVudEludGVybmFsLmggKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgaW5kZW50V2lkdGgg
PSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gV2ViRG9jdW1l
bnRJbnRlcm5hbC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB0YWJXaWR0aCA9IDg7IHVzZXNU
YWJzID0gMDsgfTsKIAkJRUQyQjI0NzQwMzNBMkRBODAwQzFBNTI2IC8qIFdlYk5TUGFzdGVib2Fy
ZEV4dHJhcy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7
IGluZGVudFdpZHRoID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0
aCA9IFdlYk5TUGFzdGVib2FyZEV4dHJhcy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB0YWJX
aWR0aCA9IDg7IHVzZXNUYWJzID0gMDsgfTsKIAkJRUQyQjI0NzUwMzNBMkRBODAwQzFBNTI2IC8q
IFdlYk5TUGFzdGVib2FyZEV4dHJhcy5tbSAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSA0OyBpbmRlbnRXaWR0aCA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jcHAub2JqY3BwOyBwYXRoID0gV2ViTlNQYXN0ZWJvYXJkRXh0cmFzLm1tOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB0YWJXaWR0aCA9IDg7IHVzZXNUYWJzID0gMDsgfTsKQEAgLTE1
OTUsNiArMTU5OSw4IEBACiAJCQkJMUFBODc5QjUxMUNCRTlCRjAwM0M2NjRGIC8qIFdlYlBsYXRm
b3JtU3RyYXRlZ2llcy5tbSAqLywKIAkJCQkxQTZBMjA4QzE4ODYxNTQ2MDBFNTBGNUYgLyogV2Vi
UHJvZ3Jlc3NUcmFja2VyQ2xpZW50LmggKi8sCiAJCQkJMUE2QTIwOEIxODg2MTU0NjAwRTUwRjVG
IC8qIFdlYlByb2dyZXNzVHJhY2tlckNsaWVudC5tbSAqLywKKwkJCQlFNEFFRjk3OTFDMERGNEJD
MDBCMDE3MjcgLyogV2ViUmVzb3VyY2VMb2FkU2NoZWR1bGVyLmNwcCAqLywKKwkJCQlFNEFFRjk3
QTFDMERGNEJDMDBCMDE3MjcgLyogV2ViUmVzb3VyY2VMb2FkU2NoZWR1bGVyLmggKi8sCiAJCQkJ
QTVERUZDMDcxMUQ1MzMxQzAwODg1MjczIC8qIFdlYlNlY3VyaXR5T3JpZ2luLm1tICovLAogCQkJ
CUE1REVGQzA4MTFENTMzMUMwMDg4NTI3MyAvKiBXZWJTZWN1cml0eU9yaWdpbkludGVybmFsLmgg
Ki8sCiAJCQkJQTVERUZDMDkxMUQ1MzMxQzAwODg1MjczIC8qIFdlYlNlY3VyaXR5T3JpZ2luUHJp
dmF0ZS5oICovLApAQCAtMTg4OCw2ICsxODk0LDcgQEAKIAkJCQlBMTBDMUQzQzE4MjAyRkM1MDAz
Njg4M0EgLyogV2ViTlNTdHJpbmdFeHRyYXNJUGhvbmUuaCBpbiBIZWFkZXJzICovLAogCQkJCTkz
OTgxMDdFMDgyNEJGMDEwMDhERjAzOCAvKiBXZWJOU1VSTEV4dHJhcy5oIGluIEhlYWRlcnMgKi8s
CiAJCQkJNjVFMEY4ODQwODUwMDkxNzAwN0U1Q0I5IC8qIFdlYk5TVVJMUmVxdWVzdEV4dHJhcy5o
IGluIEhlYWRlcnMgKi8sCisJCQkJRTRBRUY5N0MxQzBERjRCQzAwQjAxNzI3IC8qIFdlYlJlc291
cmNlTG9hZFNjaGVkdWxlci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJNjVFMEY5RTYwODUwMEYyMzAw
N0U1Q0I5IC8qIFdlYk5TVXNlckRlZmF1bHRzRXh0cmFzLmggaW4gSGVhZGVycyAqLywKIAkJCQk5
Mzk4MTAyNDA4MjRCRjAxMDA4REYwMzggLyogV2ViTlNWaWV3RXh0cmFzLmggaW4gSGVhZGVycyAq
LywKIAkJCQk5Mzk4MTAyNTA4MjRCRjAxMDA4REYwMzggLyogV2ViTlNXaW5kb3dFeHRyYXMuaCBp
biBIZWFkZXJzICovLApAQCAtMjIzNiw2ICsyMjQzLDcgQEAKIAkJCQlCQzdGODg5RjEwQzlEMzBD
MDBENjEzM0QgLyogV2ViR2VvbG9jYXRpb25Qb3NpdGlvbi5tbSBpbiBTb3VyY2VzICovLAogCQkJ
CUExMEMxRDM3MTgyMDJGQzUwMDM2ODgzQSAvKiBXZWJHZW9sb2NhdGlvblByb3ZpZGVySU9TLm1t
IGluIFNvdXJjZXMgKi8sCiAJCQkJOTM5ODExMTMwODI0QkYwMTAwOERGMDM4IC8qIFdlYkhpc3Rv
cnkubW0gaW4gU291cmNlcyAqLywKKwkJCQlFNEFFRjk3QjFDMERGNEJDMDBCMDE3MjcgLyogV2Vi
UmVzb3VyY2VMb2FkU2NoZWR1bGVyLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTkzOTgxMEJEMDgy
NEJGMDEwMDhERjAzOCAvKiBXZWJIaXN0b3J5SXRlbS5tbSBpbiBTb3VyY2VzICovLAogCQkJCTFB
QUY1RkMwMEVERTNBOTIwMDhEODgzRCAvKiBXZWJIb3N0ZWROZXRzY2FwZVBsdWdpblZpZXcubW0g
aW4gU291cmNlcyAqLywKIAkJCQk5Mzk4MTBGMzA4MjRCRjAxMDA4REYwMzggLyogV2ViSFRNTFJl
cHJlc2VudGF0aW9uLm1tIGluIFNvdXJjZXMgKi8sCkluZGV4OiBTb3VyY2UvV2ViS2l0L21hYy9D
aGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9tYWMvQ2hhbmdlTG9nCShyZXZp
c2lvbiAxOTI4ODApCisrKyBTb3VyY2UvV2ViS2l0L21hYy9DaGFuZ2VMb2cJKHdvcmtpbmcgY29w
eSkKQEAgLTEsMyArMSwyOCBAQAorMjAxNS0xMi0wMiAgQW50dGkgS29pdmlzdG8gIDxhbnR0aUBh
cHBsZS5jb20+CisKKyAgICAgICAgTW92ZSBSZXNvdXJjZUxvYWRTY2hlZHVsZXIgdG8gV2ViS2l0
MQorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTUxNzQz
CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgKiBQbHVn
aW5zL0hvc3RlZC9Ib3N0ZWROZXRzY2FwZVBsdWdpblN0cmVhbS5tbToKKyAgICAgICAgKFdlYktp
dDo6SG9zdGVkTmV0c2NhcGVQbHVnaW5TdHJlYW06OnN0YXJ0KToKKyAgICAgICAgKFdlYktpdDo6
SG9zdGVkTmV0c2NhcGVQbHVnaW5TdHJlYW06OnN0b3ApOgorICAgICAgICAqIFBsdWdpbnMvV2Vi
TmV0c2NhcGVQbHVnaW5TdHJlYW0ubW06CisgICAgICAgIChXZWJOZXRzY2FwZVBsdWdpblN0cmVh
bTo6c3RhcnQpOgorICAgICAgICAoV2ViTmV0c2NhcGVQbHVnaW5TdHJlYW06OnN0b3ApOgorICAg
ICAgICAqIFdlYkNvcmVTdXBwb3J0L1dlYlBsYXRmb3JtU3RyYXRlZ2llcy5oOgorICAgICAgICAq
IFdlYkNvcmVTdXBwb3J0L1dlYlBsYXRmb3JtU3RyYXRlZ2llcy5tbToKKyAgICAgICAgKFdlYlBs
YXRmb3JtU3RyYXRlZ2llczo6Y3JlYXRlTG9hZGVyU3RyYXRlZ3kpOgorICAgICAgICAoV2ViUGxh
dGZvcm1TdHJhdGVnaWVzOjpjcmVhdGVQYXN0ZWJvYXJkU3RyYXRlZ3kpOgorICAgICAgICAoV2Vi
UGxhdGZvcm1TdHJhdGVnaWVzOjpjcmVhdGVQbHVnaW5TdHJhdGVneSk6CisgICAgICAgIChXZWJQ
bGF0Zm9ybVN0cmF0ZWdpZXM6OmNyZWF0ZUJsb2JSZWdpc3RyeSk6CisgICAgICAgIChXZWJQbGF0
Zm9ybVN0cmF0ZWdpZXM6OmNvb2tpZXNGb3JET00pOgorICAgICAgICAqIFdlYlZpZXcvV2ViVmll
dy5tbToKKyAgICAgICAgKC1bV2ViVmlldyBfZGlzcGF0Y2hQZW5kaW5nTG9hZFJlcXVlc3RzXSk6
CisgICAgICAgICgrW1dlYlZpZXcgX3NldExvYWRSZXNvdXJjZXNTZXJpYWxseTpdKToKKyAgICAg
ICAgKCtbV2ViVmlldyBfSFRUUFBpcGVsaW5pbmdFbmFibGVkXSk6CisKIDIwMTUtMTEtMzAgIEth
dGx5biBHcmFmZiAgPGtncmFmZkBhcHBsZS5jb20+CiAKICAgICAgICAgUmVuYW1lIEFjdGl2ZURP
TU9iamVjdC9ET01XaW5kb3cgUGFnZUNhY2hlU3VzcGVuc2lvbiBjb2RlIHRvIHN1cHBvcnQgbW9y
ZSByZWFzb25zIGZvciBzdXNwZW5zaW9uCkluZGV4OiBTb3VyY2UvV2ViS2l0L21hYy9QbHVnaW5z
L1dlYk5ldHNjYXBlUGx1Z2luU3RyZWFtLm1tCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQv
bWFjL1BsdWdpbnMvV2ViTmV0c2NhcGVQbHVnaW5TdHJlYW0ubW0JKHJldmlzaW9uIDE5Mjg4MCkK
KysrIFNvdXJjZS9XZWJLaXQvbWFjL1BsdWdpbnMvV2ViTmV0c2NhcGVQbHVnaW5TdHJlYW0ubW0J
KHdvcmtpbmcgY29weSkKQEAgLTM3LDEzICszNywxNSBAQAogI2ltcG9ydCAiV2ViTlNVUkxSZXF1
ZXN0RXh0cmFzLmgiCiAjaW1wb3J0ICJXZWJOZXRzY2FwZVBsdWdpblBhY2thZ2UuaCIKICNpbXBv
cnQgIldlYk5ldHNjYXBlUGx1Z2luVmlldy5oIgorI2ltcG9ydCAiV2ViUmVzb3VyY2VMb2FkU2No
ZWR1bGVyLmgiCiAjaW1wb3J0IDxGb3VuZGF0aW9uL05TVVJMUmVzcG9uc2UuaD4KICNpbXBvcnQg
PFdlYkNvcmUvRG9jdW1lbnQuaD4KICNpbXBvcnQgPFdlYkNvcmUvRG9jdW1lbnRMb2FkZXIuaD4K
ICNpbXBvcnQgPFdlYkNvcmUvRnJhbWUuaD4KICNpbXBvcnQgPFdlYkNvcmUvRnJhbWVMb2FkZXIu
aD4KICNpbXBvcnQgPFdlYkNvcmUvSlNET01XaW5kb3dCYXNlLmg+Ci0jaW1wb3J0IDxXZWJDb3Jl
L1Jlc291cmNlTG9hZFNjaGVkdWxlci5oPgorI2ltcG9ydCA8V2ViQ29yZS9Mb2FkZXJTdHJhdGVn
eS5oPgorI2ltcG9ydCA8V2ViQ29yZS9QbGF0Zm9ybVN0cmF0ZWdpZXMuaD4KICNpbXBvcnQgPFdl
YkNvcmUvU2VjdXJpdHlPcmlnaW4uaD4KICNpbXBvcnQgPFdlYkNvcmUvU2VjdXJpdHlQb2xpY3ku
aD4KICNpbXBvcnQgPFdlYkNvcmUvV2ViQ29yZU9iakNFeHRyYXMuaD4KQEAgLTI4NSw4ICsyODcs
OCBAQCB2b2lkIFdlYk5ldHNjYXBlUGx1Z2luU3RyZWFtOjpzdGFydCgpCiAgICAgQVNTRVJUKG1f
cmVxdWVzdCk7CiAgICAgQVNTRVJUKCFtX2ZyYW1lTG9hZGVyKTsKICAgICBBU1NFUlQoIW1fbG9h
ZGVyKTsKLSAgICAKLSAgICBtX2xvYWRlciA9IHJlc291cmNlTG9hZFNjaGVkdWxlcigpLT5zY2hl
ZHVsZVBsdWdpblN0cmVhbUxvYWQoY29yZShbbV9wbHVnaW5WaWV3LmdldCgpIHdlYkZyYW1lXSks
IHRoaXMsIG1fcmVxdWVzdC5nZXQoKSk7CisKKyAgICBtX2xvYWRlciA9IHdlYlJlc291cmNlTG9h
ZFNjaGVkdWxlcigpLnNjaGVkdWxlUGx1Z2luU3RyZWFtTG9hZChjb3JlKFttX3BsdWdpblZpZXcu
Z2V0KCkgd2ViRnJhbWVdKSwgdGhpcywgbV9yZXF1ZXN0LmdldCgpKTsKIH0KIAogdm9pZCBXZWJO
ZXRzY2FwZVBsdWdpblN0cmVhbTo6c3RvcCgpCkluZGV4OiBTb3VyY2UvV2ViS2l0L21hYy9QbHVn
aW5zL0hvc3RlZC9Ib3N0ZWROZXRzY2FwZVBsdWdpblN0cmVhbS5tbQo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV2ViS2l0L21hYy9QbHVnaW5zL0hvc3RlZC9Ib3N0ZWROZXRzY2FwZVBsdWdpblN0cmVh
bS5tbQkocmV2aXNpb24gMTkyODgwKQorKysgU291cmNlL1dlYktpdC9tYWMvUGx1Z2lucy9Ib3N0
ZWQvSG9zdGVkTmV0c2NhcGVQbHVnaW5TdHJlYW0ubW0JKHdvcmtpbmcgY29weSkKQEAgLTM2LDEx
ICszNiwxMiBAQAogI2ltcG9ydCAiV2ViS2l0U3lzdGVtSW50ZXJmYWNlLmgiCiAjaW1wb3J0ICJX
ZWJOU1VSTEV4dHJhcy5oIgogI2ltcG9ydCAiV2ViTlNVUkxSZXF1ZXN0RXh0cmFzLmgiCisjaW1w
b3J0ICJXZWJSZXNvdXJjZUxvYWRTY2hlZHVsZXIuaCIKICNpbXBvcnQgPFdlYkNvcmUvRG9jdW1l
bnQuaD4KICNpbXBvcnQgPFdlYkNvcmUvRG9jdW1lbnRMb2FkZXIuaD4KICNpbXBvcnQgPFdlYkNv
cmUvRnJhbWUuaD4KICNpbXBvcnQgPFdlYkNvcmUvRnJhbWVMb2FkZXIuaD4KLSNpbXBvcnQgPFdl
YkNvcmUvUmVzb3VyY2VMb2FkU2NoZWR1bGVyLmg+CisjaW1wb3J0IDxXZWJDb3JlL1BsYXRmb3Jt
U3RyYXRlZ2llcy5oPgogI2ltcG9ydCA8V2ViQ29yZS9TZWN1cml0eU9yaWdpbi5oPgogI2ltcG9y
dCA8V2ViQ29yZS9TZWN1cml0eVBvbGljeS5oPgogI2ltcG9ydCA8V2ViQ29yZS9XZWJDb3JlVVJM
UmVzcG9uc2UuaD4KQEAgLTIyMCw4ICsyMjEsOCBAQCB2b2lkIEhvc3RlZE5ldHNjYXBlUGx1Z2lu
U3RyZWFtOjpzdGFydCgpCiAgICAgQVNTRVJUKG1fcmVxdWVzdCk7CiAgICAgQVNTRVJUKCFtX2Zy
YW1lTG9hZGVyKTsKICAgICBBU1NFUlQoIW1fbG9hZGVyKTsKLSAgICAKLSAgICBtX2xvYWRlciA9
IHJlc291cmNlTG9hZFNjaGVkdWxlcigpLT5zY2hlZHVsZVBsdWdpblN0cmVhbUxvYWQoY29yZShb
bV9pbnN0YW5jZS0+cGx1Z2luVmlldygpIHdlYkZyYW1lXSksIHRoaXMsIG1fcmVxdWVzdC5nZXQo
KSk7CisKKyAgICBtX2xvYWRlciA9IHdlYlJlc291cmNlTG9hZFNjaGVkdWxlcigpLnNjaGVkdWxl
UGx1Z2luU3RyZWFtTG9hZChjb3JlKFttX2luc3RhbmNlLT5wbHVnaW5WaWV3KCkgd2ViRnJhbWVd
KSwgdGhpcywgbV9yZXF1ZXN0LmdldCgpKTsKIH0KIAogdm9pZCBIb3N0ZWROZXRzY2FwZVBsdWdp
blN0cmVhbTo6c3RvcCgpCkluZGV4OiBTb3VyY2UvV2ViS2l0L21hYy9XZWJDb3JlU3VwcG9ydC9X
ZWJQbGF0Zm9ybVN0cmF0ZWdpZXMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L21hYy9X
ZWJDb3JlU3VwcG9ydC9XZWJQbGF0Zm9ybVN0cmF0ZWdpZXMuaAkocmV2aXNpb24gMTkyODgwKQor
KysgU291cmNlL1dlYktpdC9tYWMvV2ViQ29yZVN1cHBvcnQvV2ViUGxhdGZvcm1TdHJhdGVnaWVz
LmgJKHdvcmtpbmcgY29weSkKQEAgLTM1LDcgKzM1LDcgQEAKIHN0cnVjdCBQYXN0ZWJvYXJkSW1h
Z2U7CiBzdHJ1Y3QgUGFzdGVib2FyZFdlYkNvbnRlbnQ7CiAKLWNsYXNzIFdlYlBsYXRmb3JtU3Ry
YXRlZ2llcyA6IHB1YmxpYyBXZWJDb3JlOjpQbGF0Zm9ybVN0cmF0ZWdpZXMsIHByaXZhdGUgV2Vi
Q29yZTo6Q29va2llc1N0cmF0ZWd5LCBwcml2YXRlIFdlYkNvcmU6OkxvYWRlclN0cmF0ZWd5LCBw
cml2YXRlIFdlYkNvcmU6OlBhc3RlYm9hcmRTdHJhdGVneSwgcHJpdmF0ZSBXZWJDb3JlOjpQbHVn
aW5TdHJhdGVneSB7CitjbGFzcyBXZWJQbGF0Zm9ybVN0cmF0ZWdpZXMgOiBwdWJsaWMgV2ViQ29y
ZTo6UGxhdGZvcm1TdHJhdGVnaWVzLCBwcml2YXRlIFdlYkNvcmU6OkNvb2tpZXNTdHJhdGVneSwg
cHJpdmF0ZSBXZWJDb3JlOjpQYXN0ZWJvYXJkU3RyYXRlZ3ksIHByaXZhdGUgV2ViQ29yZTo6UGx1
Z2luU3RyYXRlZ3kgewogcHVibGljOgogICAgIHN0YXRpYyB2b2lkIGluaXRpYWxpemVJZk5lY2Vz
c2FyeSgpOwogICAgIApAQCAtNDcsNiArNDcsNyBAQCBwcml2YXRlOgogICAgIHZpcnR1YWwgV2Vi
Q29yZTo6TG9hZGVyU3RyYXRlZ3kqIGNyZWF0ZUxvYWRlclN0cmF0ZWd5KCkgb3ZlcnJpZGU7CiAg
ICAgdmlydHVhbCBXZWJDb3JlOjpQYXN0ZWJvYXJkU3RyYXRlZ3kqIGNyZWF0ZVBhc3RlYm9hcmRT
dHJhdGVneSgpIG92ZXJyaWRlOwogICAgIHZpcnR1YWwgV2ViQ29yZTo6UGx1Z2luU3RyYXRlZ3kq
IGNyZWF0ZVBsdWdpblN0cmF0ZWd5KCkgb3ZlcnJpZGU7CisgICAgdmlydHVhbCBXZWJDb3JlOjpC
bG9iUmVnaXN0cnkqIGNyZWF0ZUJsb2JSZWdpc3RyeSgpIG92ZXJyaWRlOwogCiAgICAgLy8gV2Vi
Q29yZTo6Q29va2llc1N0cmF0ZWd5CiAgICAgdmlydHVhbCBTdHJpbmcgY29va2llc0ZvckRPTShj
b25zdCBXZWJDb3JlOjpOZXR3b3JrU3RvcmFnZVNlc3Npb24mLCBjb25zdCBXZWJDb3JlOjpVUkwm
IGZpcnN0UGFydHksIGNvbnN0IFdlYkNvcmU6OlVSTCYpIG92ZXJyaWRlOwpJbmRleDogU291cmNl
L1dlYktpdC9tYWMvV2ViQ29yZVN1cHBvcnQvV2ViUGxhdGZvcm1TdHJhdGVnaWVzLm1tCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvbWFjL1dlYkNvcmVTdXBwb3J0L1dlYlBsYXRmb3JtU3Ry
YXRlZ2llcy5tbQkocmV2aXNpb24gMTkyODgwKQorKysgU291cmNlL1dlYktpdC9tYWMvV2ViQ29y
ZVN1cHBvcnQvV2ViUGxhdGZvcm1TdHJhdGVnaWVzLm1tCSh3b3JraW5nIGNvcHkpCkBAIC0yOCw2
ICsyOCw4IEBACiAjaW1wb3J0ICJXZWJGcmFtZU5ldHdvcmtpbmdDb250ZXh0LmgiCiAjaW1wb3J0
ICJXZWJQbHVnaW5EYXRhYmFzZS5oIgogI2ltcG9ydCAiV2ViUGx1Z2luUGFja2FnZS5oIgorI2lt
cG9ydCAiV2ViUmVzb3VyY2VMb2FkU2NoZWR1bGVyLmgiCisjaW1wb3J0IDxXZWJDb3JlL0Jsb2JS
ZWdpc3RyeUltcGwuaD4KICNpbXBvcnQgPFdlYkNvcmUvQmxvY2tFeGNlcHRpb25zLmg+CiAjaW1w
b3J0IDxXZWJDb3JlL0NvbG9yLmg+CiAjaW1wb3J0IDxXZWJDb3JlL01haW5GcmFtZS5oPgpAQCAt
NjIsNyArNjQsNyBAQCBDb29raWVzU3RyYXRlZ3kqIFdlYlBsYXRmb3JtU3RyYXRlZ2llczo6CiAK
IExvYWRlclN0cmF0ZWd5KiBXZWJQbGF0Zm9ybVN0cmF0ZWdpZXM6OmNyZWF0ZUxvYWRlclN0cmF0
ZWd5KCkKIHsKLSAgICByZXR1cm4gdGhpczsKKyAgICByZXR1cm4gbmV3IFdlYlJlc291cmNlTG9h
ZFNjaGVkdWxlcjsKIH0KIAogUGFzdGVib2FyZFN0cmF0ZWd5KiBXZWJQbGF0Zm9ybVN0cmF0ZWdp
ZXM6OmNyZWF0ZVBhc3RlYm9hcmRTdHJhdGVneSgpCkBAIC03NSw2ICs3NywxMSBAQCBQbHVnaW5T
dHJhdGVneSogV2ViUGxhdGZvcm1TdHJhdGVnaWVzOjpjCiAgICAgcmV0dXJuIHRoaXM7CiB9CiAK
K0Jsb2JSZWdpc3RyeSogV2ViUGxhdGZvcm1TdHJhdGVnaWVzOjpjcmVhdGVCbG9iUmVnaXN0cnko
KQoreworICAgIHJldHVybiBuZXcgV2ViQ29yZTo6QmxvYlJlZ2lzdHJ5SW1wbDsKK30KKwogU3Ry
aW5nIFdlYlBsYXRmb3JtU3RyYXRlZ2llczo6Y29va2llc0ZvckRPTShjb25zdCBOZXR3b3JrU3Rv
cmFnZVNlc3Npb24mIHNlc3Npb24sIGNvbnN0IFVSTCYgZmlyc3RQYXJ0eSwgY29uc3QgVVJMJiB1
cmwpCiB7CiAgICAgcmV0dXJuIFdlYkNvcmU6OmNvb2tpZXNGb3JET00oc2Vzc2lvbiwgZmlyc3RQ
YXJ0eSwgdXJsKTsKSW5kZXg6IFNvdXJjZS9XZWJLaXQvbWFjL1dlYlZpZXcvV2ViVmlldy5tbQo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L21hYy9XZWJWaWV3L1dlYlZpZXcubW0JKHJldmlz
aW9uIDE5Mjg4MCkKKysrIFNvdXJjZS9XZWJLaXQvbWFjL1dlYlZpZXcvV2ViVmlldy5tbQkod29y
a2luZyBjb3B5KQpAQCAtOTUsNiArOTUsNyBAQAogI2ltcG9ydCAiV2ViUHJlZmVyZW5jZUtleXNQ
cml2YXRlLmgiCiAjaW1wb3J0ICJXZWJQcmVmZXJlbmNlc1ByaXZhdGUuaCIKICNpbXBvcnQgIldl
YlByb2dyZXNzVHJhY2tlckNsaWVudC5oIgorI2ltcG9ydCAiV2ViUmVzb3VyY2VMb2FkU2NoZWR1
bGVyLmgiCiAjaW1wb3J0ICJXZWJTY3JpcHREZWJ1Z0RlbGVnYXRlLmgiCiAjaW1wb3J0ICJXZWJT
Y3JpcHRXb3JsZEludGVybmFsLmgiCiAjaW1wb3J0ICJXZWJTZWxlY3Rpb25TZXJ2aWNlQ29udHJv
bGxlci5oIgpAQCAtMTY3LDcgKzE2OCw2IEBACiAjaW1wb3J0IDxXZWJDb3JlL1JlbmRlclZpZXcu
aD4KICNpbXBvcnQgPFdlYkNvcmUvUmVuZGVyV2lkZ2V0Lmg+CiAjaW1wb3J0IDxXZWJDb3JlL1Jl
c291cmNlSGFuZGxlLmg+Ci0jaW1wb3J0IDxXZWJDb3JlL1Jlc291cmNlTG9hZFNjaGVkdWxlci5o
PgogI2ltcG9ydCA8V2ViQ29yZS9SZXNvdXJjZVJlcXVlc3QuaD4KICNpbXBvcnQgPFdlYkNvcmUv
UnVudGltZUFwcGxpY2F0aW9uQ2hlY2tzLmg+CiAjaW1wb3J0IDxXZWJDb3JlL1J1bnRpbWVFbmFi
bGVkRmVhdHVyZXMuaD4KQEAgLTc2MSw3ICs3NjEsNyBAQCBzdGF0aWMgYm9vbCBzaG91bGRSZXN0
cmljdFdpbmRvd0ZvY3VzKCkKIAogLSAodm9pZClfZGlzcGF0Y2hQZW5kaW5nTG9hZFJlcXVlc3Rz
CiB7Ci0gICAgcmVzb3VyY2VMb2FkU2NoZWR1bGVyKCktPnNlcnZlUGVuZGluZ1JlcXVlc3RzKCk7
CisgICAgd2ViUmVzb3VyY2VMb2FkU2NoZWR1bGVyKCkuc2VydmVQZW5kaW5nUmVxdWVzdHMoKTsK
IH0KIAogI2lmICFQTEFURk9STShJT1MpCkBAIC00NDgyLDcgKzQ0ODIsOCBAQCAtIChCT09MKXNl
YXJjaEZvcjooTlNTdHJpbmcgKilzdHJpbmcgZGlyCiArICh2b2lkKV9zZXRMb2FkUmVzb3VyY2Vz
U2VyaWFsbHk6KEJPT0wpc2VyaWFsaXplIAogewogICAgIFdlYlBsYXRmb3JtU3RyYXRlZ2llczo6
aW5pdGlhbGl6ZUlmTmVjZXNzYXJ5KCk7Ci0gICAgcmVzb3VyY2VMb2FkU2NoZWR1bGVyKCktPnNl
dFNlcmlhbExvYWRpbmdFbmFibGVkKHNlcmlhbGl6ZSk7CisKKyAgICB3ZWJSZXNvdXJjZUxvYWRT
Y2hlZHVsZXIoKS5zZXRTZXJpYWxMb2FkaW5nRW5hYmxlZChzZXJpYWxpemUpOwogfQogCiArIChC
T09MKV9IVFRQUGlwZWxpbmluZ0VuYWJsZWQK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>266438</attachid>
            <date>2015-12-02 06:16:05 -0800</date>
            <delta_ts>2015-12-02 06:47:46 -0800</delta_ts>
            <desc>patch</desc>
            <filename>resourceloadscheduler-webkit-2.patch</filename>
            <type>text/plain</type>
            <size>128575</size>
            <attacher name="Antti Koivisto">koivisto</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDE5Mjg4MCkKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDYzIEBACisyMDE1LTEyLTAyICBBbnR0aSBL
b2l2aXN0byAgPGFudHRpQGFwcGxlLmNvbT4KKworICAgICAgICBNb3ZlIFJlc291cmNlTG9hZFNj
aGVkdWxlciB0byBXZWJLaXQxCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3df
YnVnLmNnaT9pZD0xNTE3NDMKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4K
KworICAgICAgICBJdCBpcyBubyBsb25nZXIgdXNlZCBieSBXZWJLaXQyLiBTaW1wbGlmeSB0aGUg
V2ViS2l0L1dlYkNvcmUgaW50ZXJmYWNlLgorCisgICAgICAgICogV2ViQ29yZS54Y29kZXByb2ov
cHJvamVjdC5wYnhwcm9qOgorICAgICAgICAqIGRvbS9Db250YWluZXJOb2RlLmNwcDoKKyAgICAg
ICAgKiBkb20vRG9jdW1lbnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6RG9jdW1lbnQ6OnN0eWxl
Rm9yRWxlbWVudElnbm9yaW5nUGVuZGluZ1N0eWxlc2hlZXRzKToKKyAgICAgICAgKiBkb20vRG9j
dW1lbnQuaDoKKyAgICAgICAgKiBsb2FkZXIvRG9jdW1lbnRMb2FkZXIuaDoKKyAgICAgICAgKiBs
b2FkZXIvTG9hZGVyU3RyYXRlZ3kuY3BwOgorICAgICAgICAoV2ViQ29yZTo6TG9hZGVyU3RyYXRl
Z3k6On5Mb2FkZXJTdHJhdGVneSk6CisgICAgICAgIChXZWJDb3JlOjpSZXNvdXJjZUxvYWRTdXNw
ZW5kZXI6OlJlc291cmNlTG9hZFN1c3BlbmRlcik6CisgICAgICAgIChXZWJDb3JlOjpSZXNvdXJj
ZUxvYWRTdXNwZW5kZXI6On5SZXNvdXJjZUxvYWRTdXNwZW5kZXIpOgorICAgICAgICAoV2ViQ29y
ZTo6TG9hZGVyU3RyYXRlZ3k6OnJlc291cmNlTG9hZFNjaGVkdWxlcik6IERlbGV0ZWQuCisgICAg
ICAgIChXZWJDb3JlOjpMb2FkZXJTdHJhdGVneTo6bG9hZFJlc291cmNlU3luY2hyb25vdXNseSk6
IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpMb2FkZXJTdHJhdGVneTo6Y3JlYXRlQmxvYlJl
Z2lzdHJ5KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkxvYWRlclN0cmF0ZWd5OjpjcmVh
dGVQaW5nSGFuZGxlKTogRGVsZXRlZC4KKyAgICAgICAgKiBsb2FkZXIvTG9hZGVyU3RyYXRlZ3ku
aDoKKworICAgICAgICAgICAgTG9hZGluZyBmdW5jdGlvbnMgaW1wbGVtZW50ZWQgb24gV2ViS2l0
IHNpZGUgbW92ZSB0byBwdXJlIHZpcnR1YWwgTG9hZGVyU3RyYXRlZ3kuCisKKyAgICAgICAgKiBs
b2FkZXIvUmVzb3VyY2VMb2FkU2NoZWR1bGVyLmNwcDogUmVtb3ZlZC4KKyAgICAgICAgKiBsb2Fk
ZXIvUmVzb3VyY2VMb2FkU2NoZWR1bGVyLmg6IFJlbW92ZWQuCisKKyAgICAgICAgICAgIFJlc291
cmNlTG9hZFNjaGVkdWxlciBtb3ZlcyB0byBXZWJLaXQxIGFzIFdlYlJlc291cmNlTG9hZFNjaGVk
dWxlci4KKworICAgICAgICAqIGxvYWRlci9SZXNvdXJjZUxvYWRlci5jcHA6CisgICAgICAgIChX
ZWJDb3JlOjpSZXNvdXJjZUxvYWRlcjo6ZmluaXNoTmV0d29ya0xvYWQpOgorICAgICAgICAoV2Vi
Q29yZTo6UmVzb3VyY2VMb2FkZXI6OnNldERlZmVyc0xvYWRpbmcpOgorICAgICAgICAoV2ViQ29y
ZTo6UmVzb3VyY2VMb2FkZXI6OmZyYW1lTG9hZGVyKToKKyAgICAgICAgKFdlYkNvcmU6OlJlc291
cmNlTG9hZGVyOjp3aWxsU3dpdGNoVG9TdWJzdGl0dXRlUmVzb3VyY2UpOgorICAgICAgICAoV2Vi
Q29yZTo6UmVzb3VyY2VMb2FkZXI6OndpbGxTZW5kUmVxdWVzdEludGVybmFsKToKKyAgICAgICAg
KiBsb2FkZXIvYXJjaGl2ZS9BcmNoaXZlUmVzb3VyY2VDb2xsZWN0aW9uLmg6CisgICAgICAgICog
bG9hZGVyL2NhY2hlL0NhY2hlZFJlc291cmNlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkNhY2hl
ZFJlc291cmNlOjpsb2FkKToKKyAgICAgICAgKiBsb2FkZXIvY2FjaGUvQ2FjaGVkUmVzb3VyY2VM
b2FkZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Q2FjaGVkUmVzb3VyY2VMb2FkZXI6OnBlcmZv
cm1Qb3N0TG9hZEFjdGlvbnMpOgorICAgICAgICAoV2ViQ29yZTo6Q2FjaGVkUmVzb3VyY2VMb2Fk
ZXI6OmluY3JlbWVudFJlcXVlc3RDb3VudCk6CisgICAgICAgICogcGxhdGZvcm0vUGxhdGZvcm1T
dHJhdGVnaWVzLmg6CisgICAgICAgIChXZWJDb3JlOjpQbGF0Zm9ybVN0cmF0ZWdpZXM6OnBsdWdp
blN0cmF0ZWd5KToKKyAgICAgICAgKFdlYkNvcmU6OlBsYXRmb3JtU3RyYXRlZ2llczo6YmxvYlJl
Z2lzdHJ5KToKKworICAgICAgICAgICAgTW92ZSBCbG9iUmVnaXN0cnkgZmFjdG9yeSBmdW5jdGlv
biBoZXJlIGZyb20gTG9hZGVyU3RyYXRlZ3kgYXMgdGhpcyBhbGxvd3MgbmV0d29yayBwcm9jZXNz
IHRvIGhhdmUgbnVsbCBsb2FkZXJTdHJhdGVneS4KKyAgICAgICAgICAgIChpdCBjb3VsZCBiZSBy
ZW5hbWVkIEJsb2JTdHJhdGVneSBmb3IgY29uc2lzdGVuY3kgbGF0ZXIpLgorCisgICAgICAgIChX
ZWJDb3JlOjpQbGF0Zm9ybVN0cmF0ZWdpZXM6OlBsYXRmb3JtU3RyYXRlZ2llcyk6CisgICAgICAg
ICogcGxhdGZvcm0vbmV0d29yay9CbG9iUmVnaXN0cnkuY3BwOgorICAgICAgICAoV2ViQ29yZTo6
YmxvYlJlZ2lzdHJ5KToKKyAgICAgICAgKFdlYkNvcmU6OkJsb2JSZWdpc3RyeTo6fkJsb2JSZWdp
c3RyeSk6CisgICAgICAgICogcGxhdGZvcm0vbmV0d29yay9SZXNvdXJjZVJlcXVlc3RCYXNlLmg6
CisgICAgICAgICogc3R5bGUvU3R5bGVSZXNvbHZlVHJlZS5jcHA6CisgICAgICAgIChXZWJDb3Jl
OjpTdHlsZTo6UG9zdFJlc29sdXRpb25DYWxsYmFja0Rpc2FibGVyOjpQb3N0UmVzb2x1dGlvbkNh
bGxiYWNrRGlzYWJsZXIpOgorICAgICAgICAoV2ViQ29yZTo6U3R5bGU6OlBvc3RSZXNvbHV0aW9u
Q2FsbGJhY2tEaXNhYmxlcjo6flBvc3RSZXNvbHV0aW9uQ2FsbGJhY2tEaXNhYmxlcik6CisKIDIw
MTUtMTItMDEgIENhcmxvcyBHYXJjaWEgQ2FtcG9zICA8Y2dhcmNpYUBpZ2FsaWEuY29tPgogCiAg
ICAgICAgIFtHVEtdIEFTU0VSVElPTiBGQUlMRUQ6IG1fdGFibGUgcnVubmluZyAvd2Via2l0Mi9C
YWNrRm9yd2FyZExpc3QvbmF2aWdhdGlvbiBpbiBEZWJ1ZyBidWlsZApJbmRleDogU291cmNlL1dl
YkNvcmUvQ01ha2VMaXN0cy50eHQKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvQ01ha2VM
aXN0cy50eHQJKHJldmlzaW9uIDE5Mjg4MCkKKysrIFNvdXJjZS9XZWJDb3JlL0NNYWtlTGlzdHMu
dHh0CSh3b3JraW5nIGNvcHkpCkBAIC0xOTUwLDcgKzE5NTAsNiBAQCBzZXQoV2ViQ29yZV9TT1VS
Q0VTCiAgICAgbG9hZGVyL1BvbGljeUNoZWNrZXIuY3BwCiAgICAgbG9hZGVyL1Byb2dyZXNzVHJh
Y2tlci5jcHAKICAgICBsb2FkZXIvUmVzb3VyY2VMb2FkTm90aWZpZXIuY3BwCi0gICAgbG9hZGVy
L1Jlc291cmNlTG9hZFNjaGVkdWxlci5jcHAKICAgICBsb2FkZXIvUmVzb3VyY2VMb2FkZXIuY3Bw
CiAgICAgbG9hZGVyL1NpbmtEb2N1bWVudC5jcHAKICAgICBsb2FkZXIvU3ViZnJhbWVMb2FkZXIu
Y3BwCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnZjeHByb2ovV2ViQ29yZS52Y3hwcm9q
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL1dlYkNvcmUudmN4cHJvai9XZWJDb3JlLnZj
eHByb2oJKHJldmlzaW9uIDE5Mjg4MCkKKysrIFNvdXJjZS9XZWJDb3JlL1dlYkNvcmUudmN4cHJv
ai9XZWJDb3JlLnZjeHByb2oJKHdvcmtpbmcgY29weSkKQEAgLTc0MTgsNyArNzQxOCw2IEBACiAg
ICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxsb2FkZXJcUmVzb3VyY2VMb2FkZXIuY3BwIiAvPgog
ICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cbG9hZGVyXGNmXFJlc291cmNlTG9hZGVyQ0ZOZXQu
Y3BwIiAvPgogICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cbG9hZGVyXFJlc291cmNlTG9hZE5v
dGlmaWVyLmNwcCIgLz4KLSAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXGxvYWRlclxSZXNvdXJj
ZUxvYWRTY2hlZHVsZXIuY3BwIiAvPgogICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cbG9hZGVy
XFNpbmtEb2N1bWVudC5jcHAiIC8+CiAgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxsb2FkZXJc
U3ViZnJhbWVMb2FkZXIuY3BwIiAvPgogICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cbG9hZGVy
XFN1YnJlc291cmNlTG9hZGVyLmNwcCIgLz4KQEAgLTIwODM5LDcgKzIwODM4LDYgQEAKICAgICA8
Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXGxvYWRlclxSZXNvdXJjZUxvYWRlci5oIiAvPgogICAgIDxD
bEluY2x1ZGUgSW5jbHVkZT0iLi5cbG9hZGVyXFJlc291cmNlTG9hZGVyT3B0aW9ucy5oIiAvPgog
ICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cbG9hZGVyXFJlc291cmNlTG9hZE5vdGlmaWVyLmgi
IC8+Ci0gICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxsb2FkZXJcUmVzb3VyY2VMb2FkU2NoZWR1
bGVyLmgiIC8+CiAgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxsb2FkZXJcU2lua0RvY3VtZW50
LmgiIC8+CiAgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxsb2FkZXJcU3ViZnJhbWVMb2FkZXIu
aCIgLz4KICAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXGxvYWRlclxTdWJyZXNvdXJjZUxvYWRl
ci5oIiAvPgpJbmRleDogU291cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5w
Ynhwcm9qCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3By
b2plY3QucGJ4cHJvagkocmV2aXNpb24gMTkyODgwKQorKysgU291cmNlL1dlYkNvcmUvV2ViQ29y
ZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCSh3b3JraW5nIGNvcHkpCkBAIC02MTY5LDggKzYx
NjksNiBAQAogCQlEMEJDNTQ0OTE0NDNBQzRBMDBFMTA1REEgLyogQ2FjaGVkU3R5bGVTaGVldENs
aWVudC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRDBC
QzU0NDgxNDQzQUM0QTAwRTEwNURBIC8qIENhY2hlZFN0eWxlU2hlZXRDbGllbnQuaCAqLzsgc2V0
dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQlEMEJENEY1QzE0MDg4
NTBGMDA2ODM5QjYgLyogRGljdGF0aW9uQ29tbWFuZElPUy5jcHAgaW4gU291cmNlcyAqLyA9IHtp
c2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBEMEJENEY1QTE0MDg4NTBGMDA2ODM5QjYgLyog
RGljdGF0aW9uQ29tbWFuZElPUy5jcHAgKi87IH07CiAJCUQwQkQ0RjVEMTQwODg1MEYwMDY4MzlC
NiAvKiBEaWN0YXRpb25Db21tYW5kSU9TLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWls
ZEZpbGU7IGZpbGVSZWYgPSBEMEJENEY1QjE0MDg4NTBGMDA2ODM5QjYgLyogRGljdGF0aW9uQ29t
bWFuZElPUy5oICovOyB9OwotCQlEMENFNThGODEyNUU0Q0MyMDBGM0YxOTkgLyogUmVzb3VyY2VM
b2FkU2NoZWR1bGVyLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmls
ZVJlZiA9IEQwQ0U1OEY2MTI1RTRDQzIwMEYzRjE5OSAvKiBSZXNvdXJjZUxvYWRTY2hlZHVsZXIu
Y3BwICovOyB9OwotCQlEMENFNThGOTEyNUU0Q0MyMDBGM0YxOTkgLyogUmVzb3VyY2VMb2FkU2No
ZWR1bGVyLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBE
MENFNThGNzEyNUU0Q0MyMDBGM0YxOTkgLyogUmVzb3VyY2VMb2FkU2NoZWR1bGVyLmggKi87IHNl
dHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJRDBFREE3NzQxNDNF
MzAzQzAwMjhFMzgzIC8qIENhY2hlZFJhd1Jlc291cmNlLmNwcCBpbiBTb3VyY2VzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEQwRURBNzcyMTQzRTMwM0MwMDI4RTM4MyAvKiBD
YWNoZWRSYXdSZXNvdXJjZS5jcHAgKi87IH07CiAJCUQwRURBNzc1MTQzRTMwM0MwMDI4RTM4MyAv
KiBDYWNoZWRSYXdSZXNvdXJjZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gRDBFREE3NzMxNDNFMzAzQzAwMjhFMzgzIC8qIENhY2hlZFJhd1Jlc291cmNl
LmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJRDBG
RjJBNUQxMUY4QzQ1QTAwN0U3NEUwIC8qIFBpbmdMb2FkZXIuY3BwIGluIFNvdXJjZXMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRDBGRjJBNUIxMUY4QzQ1QTAwN0U3NEUwIC8q
IFBpbmdMb2FkZXIuY3BwICovOyB9OwpAQCAtMTQwNjYsOCArMTQwNjQsNiBAQAogCQlEMEJDNTQ0
ODE0NDNBQzRBMDBFMTA1REEgLyogQ2FjaGVkU3R5bGVTaGVldENsaWVudC5oICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jLmg7IHBhdGggPSBDYWNoZWRTdHlsZVNoZWV0Q2xpZW50Lmg7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CiAJCUQwQkQ0RjVBMTQwODg1MEYwMDY4MzlCNiAvKiBEaWN0YXRp
b25Db21tYW5kSU9TLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IERp
Y3RhdGlvbkNvbW1hbmRJT1MuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlEMEJE
NEY1QjE0MDg4NTBGMDA2ODM5QjYgLyogRGljdGF0aW9uQ29tbWFuZElPUy5oICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jLmg7IHBhdGggPSBEaWN0YXRpb25Db21tYW5kSU9TLmg7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07Ci0JCUQwQ0U1OEY2MTI1RTRDQzIwMEYzRjE5OSAvKiBSZXNvdXJjZUxv
YWRTY2hlZHVsZXIuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGlu
ZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gUmVz
b3VyY2VMb2FkU2NoZWR1bGVyLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJRDBD
RTU4RjcxMjVFNENDMjAwRjNGMTk5IC8qIFJlc291cmNlTG9hZFNjaGVkdWxlci5oICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBSZXNvdXJjZUxvYWRTY2hlZHVsZXIuaDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJRDBFREE3NzIxNDNFMzAzQzAwMjhFMzgzIC8qIENhY2hl
ZFJhd1Jlc291cmNlLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IENh
Y2hlZFJhd1Jlc291cmNlLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJRDBFREE3
NzMxNDNFMzAzQzAwMjhFMzgzIC8qIENhY2hlZFJhd1Jlc291cmNlLmggKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmMuaDsgcGF0aCA9IENhY2hlZFJhd1Jlc291cmNlLmg7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CiAJCUQwRkYyQTVCMTFGOEM0NUEwMDdFNzRFMCAvKiBQaW5nTG9hZGVyLmNwcCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFBpbmdMb2FkZXIuY3BwOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtMjI0NTgsOCArMjI0NTQsNiBAQAogCQkJCTUxRUU3
QjM3MUFBNTBCMDUwMEY5MkIyMSAvKiBSZXNvdXJjZUxvYWRJbmZvLmggKi8sCiAJCQkJOTczRTMy
NTQxMDg4M0I3QzAwNUJDNDkzIC8qIFJlc291cmNlTG9hZE5vdGlmaWVyLmNwcCAqLywKIAkJCQk5
NzNFMzI1NTEwODgzQjdDMDA1QkM0OTMgLyogUmVzb3VyY2VMb2FkTm90aWZpZXIuaCAqLywKLQkJ
CQlEMENFNThGNjEyNUU0Q0MyMDBGM0YxOTkgLyogUmVzb3VyY2VMb2FkU2NoZWR1bGVyLmNwcCAq
LywKLQkJCQlEMENFNThGNzEyNUU0Q0MyMDBGM0YxOTkgLyogUmVzb3VyY2VMb2FkU2NoZWR1bGVy
LmggKi8sCiAJCQkJNTEzMjdENUYxMUEzM0EyQjAwNEY5RDY1IC8qIFNpbmtEb2N1bWVudC5jcHAg
Ki8sCiAJCQkJNTEzMjdENUUxMUEzM0EyQjAwNEY5RDY1IC8qIFNpbmtEb2N1bWVudC5oICovLAog
CQkJCUQwMDBFRDI1MTFDMUI5Q0QwMEM0NzcyNiAvKiBTdWJmcmFtZUxvYWRlci5jcHAgKi8sCkBA
IC0yNzI4NCw3ICsyNzI3OCw2IEBACiAJCQkJNTFFRTdCMzgxQUE1MEIwNTAwRjkyQjIxIC8qIFJl
c291cmNlTG9hZEluZm8uaCBpbiBIZWFkZXJzICovLAogCQkJCTk3M0UzMjU3MTA4ODNCN0MwMDVC
QzQ5MyAvKiBSZXNvdXJjZUxvYWROb3RpZmllci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJRTQyOTVG
QTQxMkIwNjE0RTAwRDFBQ0UwIC8qIFJlc291cmNlTG9hZFByaW9yaXR5LmggaW4gSGVhZGVycyAq
LywKLQkJCQlEMENFNThGOTEyNUU0Q0MyMDBGM0YxOTkgLyogUmVzb3VyY2VMb2FkU2NoZWR1bGVy
LmggaW4gSGVhZGVycyAqLywKIAkJCQk4QTgxQkY4NTExRENGRDkwMDBEQTJCOTggLyogUmVzb3Vy
Y2VMb2FkVGltaW5nLmggaW4gSGVhZGVycyAqLywKIAkJCQk3RUU2ODQ2RDEyRDI2RTM4MDBFNzk0
MTUgLyogUmVzb3VyY2VSZXF1ZXN0LmggaW4gSGVhZGVycyAqLywKIAkJCQk1MTRDNzY3RDBDRTky
M0ExMDA3RUYzQ0QgLyogUmVzb3VyY2VSZXF1ZXN0QmFzZS5oIGluIEhlYWRlcnMgKi8sCkBAIC0z
MDg2MSw3ICszMDg1NCw2IEBACiAJCQkJNTFBQTNGNkYwQkQ1QUE5RTAwODkyOTcxIC8qIFJlc291
cmNlTG9hZGVyTWFjLm1tIGluIFNvdXJjZXMgKi8sCiAJCQkJNTFFRTdCM0ExQUE1MTIzMTAwRjky
QjIxIC8qIFJlc291cmNlTG9hZEluZm8uY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJOTczRTMyNTYx
MDg4M0I3QzAwNUJDNDkzIC8qIFJlc291cmNlTG9hZE5vdGlmaWVyLmNwcCBpbiBTb3VyY2VzICov
LAotCQkJCUQwQ0U1OEY4MTI1RTRDQzIwMEYzRjE5OSAvKiBSZXNvdXJjZUxvYWRTY2hlZHVsZXIu
Y3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJNTE0Qzc2N0MwQ0U5MjNBMTAwN0VGM0NEIC8qIFJlc291
cmNlUmVxdWVzdEJhc2UuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJN0VFNjg0NkUxMkQyNkUzODAw
RTc5NDE1IC8qIFJlc291cmNlUmVxdWVzdENGTmV0LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTdF
N0RFMUZEMTk1Q0VGMjYwMDM1MzYzQiAvKiBSZXNvdXJjZVJlcXVlc3RDb2NvYS5tbSBpbiBTb3Vy
Y2VzICovLApJbmRleDogU291cmNlL1dlYkNvcmUvZG9tL0NvbnRhaW5lck5vZGUuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2RvbS9Db250YWluZXJOb2RlLmNwcAkocmV2aXNpb24g
MTkyODgwKQorKysgU291cmNlL1dlYkNvcmUvZG9tL0NvbnRhaW5lck5vZGUuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC00OSw3ICs0OSw2IEBACiAjaW5jbHVkZSAiUmVuZGVyQm94LmgiCiAjaW5jbHVk
ZSAiUmVuZGVyVGhlbWUuaCIKICNpbmNsdWRlICJSZW5kZXJXaWRnZXQuaCIKLSNpbmNsdWRlICJS
ZXNvdXJjZUxvYWRTY2hlZHVsZXIuaCIKICNpbmNsdWRlICJSb290SW5saW5lQm94LmgiCiAjaW5j
bHVkZSAiU1ZHRG9jdW1lbnRFeHRlbnNpb25zLmgiCiAjaW5jbHVkZSAiU1ZHRWxlbWVudC5oIgpJ
bmRleDogU291cmNlL1dlYkNvcmUvZG9tL0RvY3VtZW50LmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvV2ViQ29yZS9kb20vRG9jdW1lbnQuY3BwCShyZXZpc2lvbiAxOTI4ODApCisrKyBTb3VyY2Uv
V2ViQ29yZS9kb20vRG9jdW1lbnQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMjYsNyArMTI2LDYg
QEAKICNpbmNsdWRlICJSZW5kZXJMYXllckNvbXBvc2l0b3IuaCIKICNpbmNsdWRlICJSZW5kZXJW
aWV3LmgiCiAjaW5jbHVkZSAiUmVuZGVyV2lkZ2V0LmgiCi0jaW5jbHVkZSAiUmVzb3VyY2VMb2Fk
U2NoZWR1bGVyLmgiCiAjaW5jbHVkZSAiUnVudGltZUVuYWJsZWRGZWF0dXJlcy5oIgogI2luY2x1
ZGUgIlNWR0RvY3VtZW50RXh0ZW5zaW9ucy5oIgogI2luY2x1ZGUgIlNWR0VsZW1lbnQuaCIKQEAg
LTE5NTksNyArMTk1OCw3IEBAIFJlZjxSZW5kZXJTdHlsZT4gRG9jdW1lbnQ6OnN0eWxlRm9yRWxl
bWUKICAgICBBU1NFUlQoJmVsZW1lbnQuZG9jdW1lbnQoKSA9PSB0aGlzKTsKIAogICAgIC8vIE9u
IGlPUyByZXF1ZXN0IGRlbGVnYXRlcyBjYWxsZWQgZHVyaW5nIHN0eWxlRm9yRWxlbWVudCBtYXkg
cmVzdWx0IGluIHJlLWVudGVyaW5nIFdlYktpdCBhbmQga2lsbGluZyB0aGUgc3R5bGUgcmVzb2x2
ZXIuCi0gICAgUmVzb3VyY2VMb2FkU2NoZWR1bGVyOjpTdXNwZW5kZXIgc3VzcGVuZGVyKCpwbGF0
Zm9ybVN0cmF0ZWdpZXMoKS0+bG9hZGVyU3RyYXRlZ3koKS0+cmVzb3VyY2VMb2FkU2NoZWR1bGVy
KCkpOworICAgIFJlc291cmNlTG9hZFN1c3BlbmRlciBzdXNwZW5kZXI7CiAKICAgICBUZW1wb3Jh
cnlDaGFuZ2U8Ym9vbD4gY2hhbmdlKG1faWdub3JlUGVuZGluZ1N0eWxlc2hlZXRzLCB0cnVlKTsK
ICAgICByZXR1cm4gZWxlbWVudC5yZXNvbHZlU3R5bGUocGFyZW50U3R5bGUpOwpJbmRleDogU291
cmNlL1dlYkNvcmUvZG9tL0RvY3VtZW50LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUv
ZG9tL0RvY3VtZW50LmgJKHJldmlzaW9uIDE5Mjg4MCkKKysrIFNvdXJjZS9XZWJDb3JlL2RvbS9E
b2N1bWVudC5oCSh3b3JraW5nIGNvcHkpCkBAIC01MTEsNyArNTExLDcgQEAgcHVibGljOgogCiAg
ICAgdm9pZCBub3RpZnlSZW1vdmVQZW5kaW5nU2hlZXRJZk5lZWRlZCgpOwogCi0gICAgYm9vbCBo
YXZlU3R5bGVzaGVldHNMb2FkZWQoKSBjb25zdDsKKyAgICBXRUJDT1JFX0VYUE9SVCBib29sIGhh
dmVTdHlsZXNoZWV0c0xvYWRlZCgpIGNvbnN0OwogCiAgICAgLy8gVGhpcyBpcyBhIERPTSBmdW5j
dGlvbi4KICAgICBTdHlsZVNoZWV0TGlzdCYgc3R5bGVTaGVldHMoKTsKSW5kZXg6IFNvdXJjZS9X
ZWJDb3JlL2xvYWRlci9Eb2N1bWVudExvYWRlci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJD
b3JlL2xvYWRlci9Eb2N1bWVudExvYWRlci5oCShyZXZpc2lvbiAxOTI4ODApCisrKyBTb3VyY2Uv
V2ViQ29yZS9sb2FkZXIvRG9jdW1lbnRMb2FkZXIuaAkod29ya2luZyBjb3B5KQpAQCAtMTYxLDcg
KzE2MSw3IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKICAgICAgICAgdm9pZCBzY2hlZHVsZVN1YnN0
aXR1dGVSZXNvdXJjZUxvYWQoUmVzb3VyY2VMb2FkZXImLCBTdWJzdGl0dXRlUmVzb3VyY2UmKTsK
IAogICAgICAgICAvLyBSZXR1cm4gdGhlIEFyY2hpdmVSZXNvdXJjZSBmb3IgdGhlIFVSTCBvbmx5
IHdoZW4gbG9hZGluZyBhbiBBcmNoaXZlCi0gICAgICAgIEFyY2hpdmVSZXNvdXJjZSogYXJjaGl2
ZVJlc291cmNlRm9yVVJMKGNvbnN0IFVSTCYpIGNvbnN0OworICAgICAgICBXRUJDT1JFX0VYUE9S
VCBBcmNoaXZlUmVzb3VyY2UqIGFyY2hpdmVSZXNvdXJjZUZvclVSTChjb25zdCBVUkwmKSBjb25z
dDsKIAogICAgICAgICBXRUJDT1JFX0VYUE9SVCBQYXNzUmVmUHRyPEFyY2hpdmVSZXNvdXJjZT4g
bWFpblJlc291cmNlKCkgY29uc3Q7CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2xvYWRlci9Mb2Fk
ZXJTdHJhdGVneS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvbG9hZGVyL0xvYWRl
clN0cmF0ZWd5LmNwcAkocmV2aXNpb24gMTkyODgwKQorKysgU291cmNlL1dlYkNvcmUvbG9hZGVy
L0xvYWRlclN0cmF0ZWd5LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0g
KiBDb3B5cmlnaHQgKEMpIDIwMTIgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICog
Q29weXJpZ2h0IChDKSAyMDEyLCAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
ICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1z
LCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRl
ZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMjYsMzIgKzI2LDI0IEBACiAjaW5j
bHVkZSAiY29uZmlnLmgiCiAjaW5jbHVkZSAiTG9hZGVyU3RyYXRlZ3kuaCIKIAotI2luY2x1ZGUg
IkJsb2JSZWdpc3RyeUltcGwuaCIKLSNpbmNsdWRlICJQaW5nSGFuZGxlLmgiCi0jaW5jbHVkZSAi
UmVzb3VyY2VIYW5kbGUuaCIKLSNpbmNsdWRlICJSZXNvdXJjZUxvYWRTY2hlZHVsZXIuaCIKKyNp
bmNsdWRlICJQbGF0Zm9ybVN0cmF0ZWdpZXMuaCIKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi1S
ZXNvdXJjZUxvYWRTY2hlZHVsZXIqIExvYWRlclN0cmF0ZWd5OjpyZXNvdXJjZUxvYWRTY2hlZHVs
ZXIoKQorTG9hZGVyU3RyYXRlZ3k6On5Mb2FkZXJTdHJhdGVneSgpCiB7Ci0gICAgcmV0dXJuIFdl
YkNvcmU6OnJlc291cmNlTG9hZFNjaGVkdWxlcigpOwogfQogCi12b2lkIExvYWRlclN0cmF0ZWd5
Ojpsb2FkUmVzb3VyY2VTeW5jaHJvbm91c2x5KE5ldHdvcmtpbmdDb250ZXh0KiBjb250ZXh0LCB1
bnNpZ25lZCBsb25nLCBjb25zdCBSZXNvdXJjZVJlcXVlc3QmIHJlcXVlc3QsIFN0b3JlZENyZWRl
bnRpYWxzIHN0b3JlZENyZWRlbnRpYWxzLCBDbGllbnRDcmVkZW50aWFsUG9saWN5LCBSZXNvdXJj
ZUVycm9yJiBlcnJvciwgUmVzb3VyY2VSZXNwb25zZSYgcmVzcG9uc2UsIFZlY3RvcjxjaGFyPiYg
ZGF0YSkKK1Jlc291cmNlTG9hZFN1c3BlbmRlcjo6UmVzb3VyY2VMb2FkU3VzcGVuZGVyKCkKIHsK
LSAgICBSZXNvdXJjZUhhbmRsZTo6bG9hZFJlc291cmNlU3luY2hyb25vdXNseShjb250ZXh0LCBy
ZXF1ZXN0LCBzdG9yZWRDcmVkZW50aWFscywgZXJyb3IsIHJlc3BvbnNlLCBkYXRhKTsKKyAgICBw
bGF0Zm9ybVN0cmF0ZWdpZXMoKS0+bG9hZGVyU3RyYXRlZ3koKS0+c3VzcGVuZFBlbmRpbmdSZXF1
ZXN0cygpOwogfQogCi1CbG9iUmVnaXN0cnkqIExvYWRlclN0cmF0ZWd5OjpjcmVhdGVCbG9iUmVn
aXN0cnkoKQorUmVzb3VyY2VMb2FkU3VzcGVuZGVyOjp+UmVzb3VyY2VMb2FkU3VzcGVuZGVyKCkK
IHsKLSAgICByZXR1cm4gbmV3IEJsb2JSZWdpc3RyeUltcGw7Ci19Ci0KLXZvaWQgTG9hZGVyU3Ry
YXRlZ3k6OmNyZWF0ZVBpbmdIYW5kbGUoTmV0d29ya2luZ0NvbnRleHQqIG5ldHdvcmtpbmdDb250
ZXh0LCBSZXNvdXJjZVJlcXVlc3QmIHJlcXVlc3QsIGJvb2wgc2hvdWxkVXNlQ3JlZGVudGlhbFN0
b3JhZ2UpCi17Ci0gICAgLy8gUGluZ0hhbmRsZSBtYW5hZ2VzIGl0cyBvd24gbGlmZXRpbWUsIGRl
bGV0aW5nIGl0c2VsZiB3aGVuIGl0cyBwdXJwb3NlIGhhcyBiZWVuIGZ1bGZpbGxlZC4KLSAgICBu
ZXcgUGluZ0hhbmRsZShuZXR3b3JraW5nQ29udGV4dCwgcmVxdWVzdCwgc2hvdWxkVXNlQ3JlZGVu
dGlhbFN0b3JhZ2UsIFBpbmdIYW5kbGU6OlVzZXNBc3luY0NhbGxiYWNrczo6Tm8pOworICAgIHBs
YXRmb3JtU3RyYXRlZ2llcygpLT5sb2FkZXJTdHJhdGVneSgpLT5yZXN1bWVQZW5kaW5nUmVxdWVz
dHMoKTsKIH0KIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCisKSW5kZXg6IFNvdXJjZS9XZWJD
b3JlL2xvYWRlci9Mb2FkZXJTdHJhdGVneS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3Jl
L2xvYWRlci9Mb2FkZXJTdHJhdGVneS5oCShyZXZpc2lvbiAxOTI4ODApCisrKyBTb3VyY2UvV2Vi
Q29yZS9sb2FkZXIvTG9hZGVyU3RyYXRlZ3kuaAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUg
QEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTIgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEyLCAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmlu
YXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRl
ZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMjcsMzIgKzI3LDQ4
IEBACiAjZGVmaW5lIExvYWRlclN0cmF0ZWd5X2gKIAogI2luY2x1ZGUgIlJlc291cmNlSGFuZGxl
VHlwZXMuaCIKKyNpbmNsdWRlICJSZXNvdXJjZUxvYWRQcmlvcml0eS5oIgorI2luY2x1ZGUgIlJl
c291cmNlTG9hZGVyT3B0aW9ucy5oIgogI2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4KIAogbmFtZXNw
YWNlIFdlYkNvcmUgewogCiBjbGFzcyBCbG9iUmVnaXN0cnk7CitjbGFzcyBDYWNoZWRSZXNvdXJj
ZTsKIGNsYXNzIEZyYW1lOworY2xhc3MgTmV0c2NhcGVQbHVnSW5TdHJlYW1Mb2FkZXI7CitjbGFz
cyBOZXRzY2FwZVBsdWdJblN0cmVhbUxvYWRlckNsaWVudDsKIGNsYXNzIE5ldHdvcmtpbmdDb250
ZXh0OwogY2xhc3MgUmVzb3VyY2VFcnJvcjsKLWNsYXNzIFJlc291cmNlTG9hZFNjaGVkdWxlcjsK
K2NsYXNzIFJlc291cmNlTG9hZGVyOwogY2xhc3MgUmVzb3VyY2VSZXF1ZXN0OwogY2xhc3MgUmVz
b3VyY2VSZXNwb25zZTsKK2NsYXNzIFN1YnJlc291cmNlTG9hZGVyOworY2xhc3MgVVJMOwogCiBj
bGFzcyBXRUJDT1JFX0VYUE9SVCBMb2FkZXJTdHJhdGVneSB7CiBwdWJsaWM6Ci0gICAgdmlydHVh
bCBSZXNvdXJjZUxvYWRTY2hlZHVsZXIqIHJlc291cmNlTG9hZFNjaGVkdWxlcigpOworICAgIHZp
cnR1YWwgUmVmUHRyPFN1YnJlc291cmNlTG9hZGVyPiBsb2FkUmVzb3VyY2UoRnJhbWUqLCBDYWNo
ZWRSZXNvdXJjZSosIGNvbnN0IFJlc291cmNlUmVxdWVzdCYsIGNvbnN0IFJlc291cmNlTG9hZGVy
T3B0aW9ucyYpID0gMDsKKyAgICB2aXJ0dWFsIHZvaWQgbG9hZFJlc291cmNlU3luY2hyb25vdXNs
eShOZXR3b3JraW5nQ29udGV4dCosIHVuc2lnbmVkIGxvbmcgaWRlbnRpZmllciwgY29uc3QgUmVz
b3VyY2VSZXF1ZXN0JiwgU3RvcmVkQ3JlZGVudGlhbHMsIENsaWVudENyZWRlbnRpYWxQb2xpY3ks
IFJlc291cmNlRXJyb3ImLCBSZXNvdXJjZVJlc3BvbnNlJiwgVmVjdG9yPGNoYXI+JiBkYXRhKSA9
IDA7CiAKLSAgICB2aXJ0dWFsIHZvaWQgbG9hZFJlc291cmNlU3luY2hyb25vdXNseShOZXR3b3Jr
aW5nQ29udGV4dCosIHVuc2lnbmVkIGxvbmcgaWRlbnRpZmllciwgY29uc3QgUmVzb3VyY2VSZXF1
ZXN0JiwgU3RvcmVkQ3JlZGVudGlhbHMsIENsaWVudENyZWRlbnRpYWxQb2xpY3ksIFJlc291cmNl
RXJyb3ImLCBSZXNvdXJjZVJlc3BvbnNlJiwgVmVjdG9yPGNoYXI+JiBkYXRhKTsKKyAgICB2aXJ0
dWFsIHZvaWQgcmVtb3ZlKFJlc291cmNlTG9hZGVyKikgPSAwOworICAgIHZpcnR1YWwgdm9pZCBz
ZXREZWZlcnNMb2FkaW5nKFJlc291cmNlTG9hZGVyKiwgYm9vbCkgPSAwOworICAgIHZpcnR1YWwg
dm9pZCBjcm9zc09yaWdpblJlZGlyZWN0UmVjZWl2ZWQoUmVzb3VyY2VMb2FkZXIqLCBjb25zdCBV
UkwmIHJlZGlyZWN0VVJMKSA9IDA7CisKKyAgICB2aXJ0dWFsIHZvaWQgc2VydmVQZW5kaW5nUmVx
dWVzdHMoUmVzb3VyY2VMb2FkUHJpb3JpdHkgbWluaW11bVByaW9yaXR5ID0gUmVzb3VyY2VMb2Fk
UHJpb3JpdHk6OlZlcnlMb3cpID0gMDsKKyAgICB2aXJ0dWFsIHZvaWQgc3VzcGVuZFBlbmRpbmdS
ZXF1ZXN0cygpID0gMDsKKyAgICB2aXJ0dWFsIHZvaWQgcmVzdW1lUGVuZGluZ1JlcXVlc3RzKCkg
PSAwOwogCi0gICAgdmlydHVhbCBCbG9iUmVnaXN0cnkqIGNyZWF0ZUJsb2JSZWdpc3RyeSgpOwot
Ci0gICAgdmlydHVhbCB2b2lkIGNyZWF0ZVBpbmdIYW5kbGUoTmV0d29ya2luZ0NvbnRleHQqLCBS
ZXNvdXJjZVJlcXVlc3QmLCBib29sIHNob3VsZFVzZUNyZWRlbnRpYWxTdG9yYWdlKTsKKyAgICB2
aXJ0dWFsIHZvaWQgY3JlYXRlUGluZ0hhbmRsZShOZXR3b3JraW5nQ29udGV4dCosIFJlc291cmNl
UmVxdWVzdCYsIGJvb2wgc2hvdWxkVXNlQ3JlZGVudGlhbFN0b3JhZ2UpID0gMDsKIAogcHJvdGVj
dGVkOgotICAgIHZpcnR1YWwgfkxvYWRlclN0cmF0ZWd5KCkKLSAgICB7Ci0gICAgfQorICAgIHZp
cnR1YWwgfkxvYWRlclN0cmF0ZWd5KCk7Cit9OworCitjbGFzcyBSZXNvdXJjZUxvYWRTdXNwZW5k
ZXIgeworcHVibGljOgorICAgIFJlc291cmNlTG9hZFN1c3BlbmRlcigpOworICAgIH5SZXNvdXJj
ZUxvYWRTdXNwZW5kZXIoKTsKIH07CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKSW5kZXg6IFNv
dXJjZS9XZWJDb3JlL2xvYWRlci9SZXNvdXJjZUxvYWRTY2hlZHVsZXIuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9XZWJDb3JlL2xvYWRlci9SZXNvdXJjZUxvYWRTY2hlZHVsZXIuY3BwCShyZXZp
c2lvbiAxOTI4ODApCisrKyBTb3VyY2UvV2ViQ29yZS9sb2FkZXIvUmVzb3VyY2VMb2FkU2NoZWR1
bGVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSwzOTIgKzAsMCBAQAotLyoKLSAgICBDb3B5cmln
aHQgKEMpIDE5OTggTGFycyBLbm9sbCAoa25vbGxAbXBpLWhkLm1wZy5kZSkKLSAgICBDb3B5cmln
aHQgKEMpIDIwMDEgRGlyayBNdWVsbGVyIChtdWVsbGVyQGtkZS5vcmcpCi0gICAgQ29weXJpZ2h0
IChDKSAyMDAyIFdhbGRvIEJhc3RpYW4gKGJhc3RpYW5Aa2RlLm9yZykKLSAgICBDb3B5cmlnaHQg
KEMpIDIwMDYgU2FtdWVsIFdlaW5pZyAoc2FtLndlaW5pZ0BnbWFpbC5jb20pCi0gICAgQ29weXJp
Z2h0IChDKSAyMDA0LCAyMDA1LCAyMDA2LCAyMDA3LCAyMDA4IEFwcGxlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KLSAgICBDb3B5cmlnaHQgKEMpIDIwMTAgR29vZ2xlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KLQotICAgIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2Fu
IHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKLSAgICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9m
IHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwotICAgIExpY2Vuc2UgYXMgcHVibGlzaGVk
IGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgotICAgIHZlcnNpb24gMiBv
ZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLQot
ICAgIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwg
YmUgdXNlZnVsLAotICAgIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRo
ZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9S
IEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKLSAgICBMaWJyYXJ5IEdlbmVyYWwg
UHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLQotICAgIFlvdSBzaG91bGQgaGF2ZSBy
ZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UK
LSAgICBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAg
SWYgbm90LCB3cml0ZSB0bwotICAgIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4s
IDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCi0gICAgQm9zdG9uLCBNQSAwMjExMC0x
MzAxLCBVU0EuCi0gKi8KLQotI2luY2x1ZGUgImNvbmZpZy5oIgotI2luY2x1ZGUgIlJlc291cmNl
TG9hZFNjaGVkdWxlci5oIgotCi0jaW5jbHVkZSAiRG9jdW1lbnQuaCIKLSNpbmNsdWRlICJEb2N1
bWVudExvYWRlci5oIgotI2luY2x1ZGUgIkZyYW1lLmgiCi0jaW5jbHVkZSAiRnJhbWVMb2FkZXIu
aCIKLSNpbmNsdWRlICJMb2FkZXJTdHJhdGVneS5oIgotI2luY2x1ZGUgIkxvZ2dpbmcuaCIKLSNp
bmNsdWRlICJOZXRzY2FwZVBsdWdJblN0cmVhbUxvYWRlci5oIgotI2luY2x1ZGUgIlBsYXRmb3Jt
U3RyYXRlZ2llcy5oIgotI2luY2x1ZGUgIlJlc291cmNlTG9hZGVyLmgiCi0jaW5jbHVkZSAiUmVz
b3VyY2VSZXF1ZXN0LmgiCi0jaW5jbHVkZSAiU3VicmVzb3VyY2VMb2FkZXIuaCIKLSNpbmNsdWRl
ICJVUkwuaCIKLSNpbmNsdWRlIDx3dGYvTWFpblRocmVhZC5oPgotI2luY2x1ZGUgPHd0Zi9UZW1w
b3JhcnlDaGFuZ2UuaD4KLSNpbmNsdWRlIDx3dGYvdGV4dC9DU3RyaW5nLmg+Ci0KLSNpZiBQTEFU
Rk9STShJT1MpCi0jaW5jbHVkZSA8UnVudGltZUFwcGxpY2F0aW9uQ2hlY2tzSU9TLmg+Ci0jZW5k
aWYKLQotI2lmIFVTRShRVUlDS19MT09LKQotI2luY2x1ZGUgIlF1aWNrTG9vay5oIgotI2VuZGlm
Ci0KLW5hbWVzcGFjZSBXZWJDb3JlIHsKLQotLy8gTWF0Y2ggdGhlIHBhcmFsbGVsIGNvbm5lY3Rp
b24gY291bnQgdXNlZCBieSB0aGUgbmV0d29ya2luZyBsYXllci4KLXN0YXRpYyB1bnNpZ25lZCBt
YXhSZXF1ZXN0c0luRmxpZ2h0UGVySG9zdDsKLSNpZiAhUExBVEZPUk0oSU9TKQotc3RhdGljIGNv
bnN0IHVuc2lnbmVkIG1heFJlcXVlc3RzSW5GbGlnaHRGb3JOb25IVFRQUHJvdG9jb2xzID0gMjA7
Ci0jZWxzZQotLy8gTGltaXRpbmcgdGhpcyBzZWVtcyB0byByZWdyZXNzIHBlcmZvcm1hbmNlIGlu
IHNvbWUgbG9jYWwgY2FzZXMgc28gbGV0J3MganVzdCBtYWtlIGl0IGxhcmdlLgotc3RhdGljIGNv
bnN0IHVuc2lnbmVkIG1heFJlcXVlc3RzSW5GbGlnaHRGb3JOb25IVFRQUHJvdG9jb2xzID0gMTAw
MDA7Ci0jZW5kaWYKLQotUmVzb3VyY2VMb2FkU2NoZWR1bGVyOjpIb3N0SW5mb3JtYXRpb24qIFJl
c291cmNlTG9hZFNjaGVkdWxlcjo6aG9zdEZvclVSTChjb25zdCBVUkwmIHVybCwgQ3JlYXRlSG9z
dFBvbGljeSBjcmVhdGVIb3N0UG9saWN5KQotewotICAgIGlmICghdXJsLnByb3RvY29sSXNJbkhU
VFBGYW1pbHkoKSkKLSAgICAgICAgcmV0dXJuIG1fbm9uSFRUUFByb3RvY29sSG9zdDsKLQotICAg
IG1faG9zdHMuY2hlY2tDb25zaXN0ZW5jeSgpOwotICAgIFN0cmluZyBob3N0TmFtZSA9IHVybC5o
b3N0KCk7Ci0gICAgSG9zdEluZm9ybWF0aW9uKiBob3N0ID0gbV9ob3N0cy5nZXQoaG9zdE5hbWUp
OwotICAgIGlmICghaG9zdCAmJiBjcmVhdGVIb3N0UG9saWN5ID09IENyZWF0ZUlmTm90Rm91bmQp
IHsKLSAgICAgICAgaG9zdCA9IG5ldyBIb3N0SW5mb3JtYXRpb24oaG9zdE5hbWUsIG1heFJlcXVl
c3RzSW5GbGlnaHRQZXJIb3N0KTsKLSAgICAgICAgbV9ob3N0cy5hZGQoaG9zdE5hbWUsIGhvc3Qp
OwotICAgIH0KLSAgICByZXR1cm4gaG9zdDsKLX0KLQotUmVzb3VyY2VMb2FkU2NoZWR1bGVyKiBy
ZXNvdXJjZUxvYWRTY2hlZHVsZXIoKQotewotICAgIEFTU0VSVChpc01haW5UaHJlYWQoKSk7Ci0g
ICAgc3RhdGljIFJlc291cmNlTG9hZFNjaGVkdWxlciogZ2xvYmFsU2NoZWR1bGVyID0gbnVsbHB0
cjsKLSAgICAKLSAgICBpZiAoIWdsb2JhbFNjaGVkdWxlcikgewotICAgICAgICBzdGF0aWMgYm9v
bCBpc0NhbGxpbmdPdXRUb1N0cmF0ZWd5ID0gZmFsc2U7Ci0gICAgICAgIAotICAgICAgICAvLyBJ
ZiB3ZSdyZSByZS1lbnRlcmluZyByZXNvdXJjZUxvYWRTY2hlZHVsZXIoKSB3aGlsZSBjYWxsaW5n
IG91dCB0byB0aGUgTG9hZGVyU3RyYXRlZ3ksCi0gICAgICAgIC8vIHRoZW4gdGhlIExvYWRlclN0
cmF0ZWd5IGlzIHRyeWluZyB0byB1c2UgdGhlIGRlZmF1bHQgcmVzb3VyY2VMb2FkU2NoZWR1bGVy
LgotICAgICAgICAvLyBTbyB3ZSdsbCBjcmVhdGUgaXQgaGVyZSBhbmQgc3RhcnQgdXNpbmcgaXQu
Ci0gICAgICAgIGlmIChpc0NhbGxpbmdPdXRUb1N0cmF0ZWd5KSB7Ci0gICAgICAgICAgICBnbG9i
YWxTY2hlZHVsZXIgPSBuZXcgUmVzb3VyY2VMb2FkU2NoZWR1bGVyOwotICAgICAgICAgICAgcmV0
dXJuIGdsb2JhbFNjaGVkdWxlcjsKLSAgICAgICAgfQotICAgICAgICAKLSAgICAgICAgVGVtcG9y
YXJ5Q2hhbmdlPGJvb2w+IHJlY3Vyc2lvbkd1YXJkKGlzQ2FsbGluZ091dFRvU3RyYXRlZ3ksIHRy
dWUpOwotICAgICAgICBnbG9iYWxTY2hlZHVsZXIgPSBwbGF0Zm9ybVN0cmF0ZWdpZXMoKS0+bG9h
ZGVyU3RyYXRlZ3koKS0+cmVzb3VyY2VMb2FkU2NoZWR1bGVyKCk7Ci0gICAgfQotCi0gICAgcmV0
dXJuIGdsb2JhbFNjaGVkdWxlcjsKLX0KLQotUmVzb3VyY2VMb2FkU2NoZWR1bGVyOjpSZXNvdXJj
ZUxvYWRTY2hlZHVsZXIoKQotICAgIDogbV9ub25IVFRQUHJvdG9jb2xIb3N0KG5ldyBIb3N0SW5m
b3JtYXRpb24oU3RyaW5nKCksIG1heFJlcXVlc3RzSW5GbGlnaHRGb3JOb25IVFRQUHJvdG9jb2xz
KSkKLSAgICAsIG1fcmVxdWVzdFRpbWVyKCp0aGlzLCAmUmVzb3VyY2VMb2FkU2NoZWR1bGVyOjpy
ZXF1ZXN0VGltZXJGaXJlZCkKLSAgICAsIG1fc3VzcGVuZFBlbmRpbmdSZXF1ZXN0c0NvdW50KDAp
Ci0gICAgLCBtX2lzU2VyaWFsTG9hZGluZ0VuYWJsZWQoZmFsc2UpCi17Ci0gICAgbWF4UmVxdWVz
dHNJbkZsaWdodFBlckhvc3QgPSBpbml0aWFsaXplTWF4aW11bUhUVFBDb25uZWN0aW9uQ291bnRQ
ZXJIb3N0KCk7Ci19Ci0KLVJlc291cmNlTG9hZFNjaGVkdWxlcjo6flJlc291cmNlTG9hZFNjaGVk
dWxlcigpCi17Ci19Ci0KLVJlZlB0cjxTdWJyZXNvdXJjZUxvYWRlcj4gUmVzb3VyY2VMb2FkU2No
ZWR1bGVyOjpzY2hlZHVsZVN1YnJlc291cmNlTG9hZChGcmFtZSogZnJhbWUsIENhY2hlZFJlc291
cmNlKiByZXNvdXJjZSwgY29uc3QgUmVzb3VyY2VSZXF1ZXN0JiByZXF1ZXN0LCBjb25zdCBSZXNv
dXJjZUxvYWRlck9wdGlvbnMmIG9wdGlvbnMpCi17Ci0gICAgUmVmUHRyPFN1YnJlc291cmNlTG9h
ZGVyPiBsb2FkZXIgPSBTdWJyZXNvdXJjZUxvYWRlcjo6Y3JlYXRlKGZyYW1lLCByZXNvdXJjZSwg
cmVxdWVzdCwgb3B0aW9ucyk7Ci0gICAgaWYgKGxvYWRlcikKLSAgICAgICAgc2NoZWR1bGVMb2Fk
KGxvYWRlci5nZXQoKSk7Ci0jaWYgUExBVEZPUk0oSU9TKQotICAgIC8vIFNpbmNlIHdlIGRlZmVy
IGxvYWRlciBpbml0aWFsaXphdGlvbiB1bnRpbCBzY2hlZHVsaW5nIG9uIGlPUywgdGhlIGZyYW1l
Ci0gICAgLy8gbG9hZCBkZWxlZ2F0ZSB0aGF0IHdvdWxkIGJlIGNhbGxlZCBpbiBTdWJyZXNvdXJj
ZUxvYWRlcjo6Y3JlYXRlKCkgb24KLSAgICAvLyBvdGhlciBwb3J0cyBtaWdodCBiZSBjYWxsZWQg
aW4gc2NoZWR1bGVMb2FkKCkgaW5zdGVhZC4gT3VyIGNvbnRyYWN0IHRvCi0gICAgLy8gY2FsbGVy
cyBvZiB0aGlzIG1ldGhvZCBpcyB0aGF0IGEgbnVsbCBsb2FkZXIgaXMgcmV0dXJuZWQgaWYgdGhl
IGxvYWQgd2FzCi0gICAgLy8gY2FuY2VsbGVkIGJ5IGEgZnJhbWUgbG9hZCBkZWxlZ2F0ZS4KLSAg
ICBpZiAoIWxvYWRlciB8fCBsb2FkZXItPnJlYWNoZWRUZXJtaW5hbFN0YXRlKCkpCi0gICAgICAg
IHJldHVybiBudWxscHRyOwotI2VuZGlmCi0gICAgcmV0dXJuIGxvYWRlcjsKLX0KLQotUmVmUHRy
PE5ldHNjYXBlUGx1Z0luU3RyZWFtTG9hZGVyPiBSZXNvdXJjZUxvYWRTY2hlZHVsZXI6OnNjaGVk
dWxlUGx1Z2luU3RyZWFtTG9hZChGcmFtZSogZnJhbWUsIE5ldHNjYXBlUGx1Z0luU3RyZWFtTG9h
ZGVyQ2xpZW50KiBjbGllbnQsIGNvbnN0IFJlc291cmNlUmVxdWVzdCYgcmVxdWVzdCkKLXsKLSAg
ICBSZWZQdHI8TmV0c2NhcGVQbHVnSW5TdHJlYW1Mb2FkZXI+IGxvYWRlciA9IE5ldHNjYXBlUGx1
Z0luU3RyZWFtTG9hZGVyOjpjcmVhdGUoZnJhbWUsIGNsaWVudCwgcmVxdWVzdCk7Ci0gICAgaWYg
KGxvYWRlcikKLSAgICAgICAgc2NoZWR1bGVMb2FkKGxvYWRlci5nZXQoKSk7Ci0gICAgcmV0dXJu
IGxvYWRlcjsKLX0KLQotdm9pZCBSZXNvdXJjZUxvYWRTY2hlZHVsZXI6OnNjaGVkdWxlTG9hZChS
ZXNvdXJjZUxvYWRlciogcmVzb3VyY2VMb2FkZXIpCi17Ci0gICAgQVNTRVJUKHJlc291cmNlTG9h
ZGVyKTsKLQotICAgIExPRyhSZXNvdXJjZUxvYWRpbmcsICJSZXNvdXJjZUxvYWRTY2hlZHVsZXI6
OmxvYWQgcmVzb3VyY2UgJXAgJyVzJyIsIHJlc291cmNlTG9hZGVyLCByZXNvdXJjZUxvYWRlci0+
dXJsKCkuc3RyaW5nKCkubGF0aW4xKCkuZGF0YSgpKTsKLQotI2lmIFBMQVRGT1JNKElPUykKLSAg
ICAvLyBJZiB0aGVyZSdzIGEgd2ViIGFyY2hpdmUgcmVzb3VyY2UgZm9yIHRoaXMgVVJMLCB3ZSBk
b24ndCBuZWVkIHRvIHNjaGVkdWxlIHRoZSBsb2FkIHNpbmNlIGl0IHdpbGwgbmV2ZXIgdG91Y2gg
dGhlIG5ldHdvcmsuCi0gICAgaWYgKCFpc1N1c3BlbmRpbmdQZW5kaW5nUmVxdWVzdHMoKSAmJiBy
ZXNvdXJjZUxvYWRlci0+ZG9jdW1lbnRMb2FkZXIoKS0+YXJjaGl2ZVJlc291cmNlRm9yVVJMKHJl
c291cmNlTG9hZGVyLT5pT1NPcmlnaW5hbFJlcXVlc3QoKS51cmwoKSkpIHsKLSAgICAgICAgcmVz
b3VyY2VMb2FkZXItPnN0YXJ0TG9hZGluZygpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotI2Vs
c2UKLSAgICBpZiAocmVzb3VyY2VMb2FkZXItPmRvY3VtZW50TG9hZGVyKCktPmFyY2hpdmVSZXNv
dXJjZUZvclVSTChyZXNvdXJjZUxvYWRlci0+cmVxdWVzdCgpLnVybCgpKSkgewotICAgICAgICBy
ZXNvdXJjZUxvYWRlci0+c3RhcnQoKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLSNlbmRpZgot
Ci0jaWYgUExBVEZPUk0oSU9TKQotICAgIEhvc3RJbmZvcm1hdGlvbiogaG9zdCA9IGhvc3RGb3JV
UkwocmVzb3VyY2VMb2FkZXItPmlPU09yaWdpbmFsUmVxdWVzdCgpLnVybCgpLCBDcmVhdGVJZk5v
dEZvdW5kKTsKLSNlbHNlCi0gICAgSG9zdEluZm9ybWF0aW9uKiBob3N0ID0gaG9zdEZvclVSTChy
ZXNvdXJjZUxvYWRlci0+dXJsKCksIENyZWF0ZUlmTm90Rm91bmQpOwotI2VuZGlmCi0KLSAgICBS
ZXNvdXJjZUxvYWRQcmlvcml0eSBwcmlvcml0eSA9IHJlc291cmNlTG9hZGVyLT5yZXF1ZXN0KCku
cHJpb3JpdHkoKTsKLQotICAgIGJvb2wgaGFkUmVxdWVzdHMgPSBob3N0LT5oYXNSZXF1ZXN0cygp
OwotICAgIGhvc3QtPnNjaGVkdWxlKHJlc291cmNlTG9hZGVyLCBwcmlvcml0eSk7Ci0KLSNpZiBQ
TEFURk9STShDT0NPQSkgfHwgVVNFKENGTkVUV09SSykKLSAgICBpZiAoUmVzb3VyY2VSZXF1ZXN0
OjpyZXNvdXJjZVByaW9yaXRpZXNFbmFibGVkKCkgJiYgIWlzU3VzcGVuZGluZ1BlbmRpbmdSZXF1
ZXN0cygpKSB7Ci0gICAgICAgIC8vIFNlcnZlIGFsbCByZXF1ZXN0cyBhdCBvbmNlIHRvIGtlZXAg
dGhlIHBpcGVsaW5lIGZ1bGwgYXQgdGhlIG5ldHdvcmsgbGF5ZXIuCi0gICAgICAgIC8vIEZJWE1F
OiBEb2VzIHRoaXMgY29kZSBkbyBhbnl0aGluZyB1c2VmdWwsIGdpdmVuIHRoYXQgd2UgYWxzbyBz
ZXQgbWF4UmVxdWVzdHNJbkZsaWdodFBlckhvc3QgdG8gZWZmZWN0aXZlbHkgdW5saW1pdGVkIG9u
IHRoZXNlIHBsYXRmb3Jtcz8KLSAgICAgICAgc2VydmVQZW5kaW5nUmVxdWVzdHMoaG9zdCwgUmVz
b3VyY2VMb2FkUHJpb3JpdHk6OlZlcnlMb3cpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotI2Vu
ZGlmCi0KLSNpZiBQTEFURk9STShJT1MpCi0gICAgaWYgKChwcmlvcml0eSA+IFJlc291cmNlTG9h
ZFByaW9yaXR5OjpMb3cgfHwgIXJlc291cmNlTG9hZGVyLT5pT1NPcmlnaW5hbFJlcXVlc3QoKS51
cmwoKS5wcm90b2NvbElzSW5IVFRQRmFtaWx5KCkgfHwgKHByaW9yaXR5ID09IFJlc291cmNlTG9h
ZFByaW9yaXR5OjpMb3cgJiYgIWhhZFJlcXVlc3RzKSkgJiYgIWlzU3VzcGVuZGluZ1BlbmRpbmdS
ZXF1ZXN0cygpKSB7Ci0gICAgICAgIC8vIFRyeSB0byByZXF1ZXN0IGltcG9ydGFudCByZXNvdXJj
ZXMgaW1tZWRpYXRlbHkuCi0gICAgICAgIHNlcnZlUGVuZGluZ1JlcXVlc3RzKGhvc3QsIHByaW9y
aXR5KTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLSNlbHNlCi0gICAgaWYgKHByaW9yaXR5ID4g
UmVzb3VyY2VMb2FkUHJpb3JpdHk6OkxvdyB8fCAhcmVzb3VyY2VMb2FkZXItPnVybCgpLnByb3Rv
Y29sSXNJbkhUVFBGYW1pbHkoKSB8fCAocHJpb3JpdHkgPT0gUmVzb3VyY2VMb2FkUHJpb3JpdHk6
OkxvdyAmJiAhaGFkUmVxdWVzdHMpKSB7Ci0gICAgICAgIC8vIFRyeSB0byByZXF1ZXN0IGltcG9y
dGFudCByZXNvdXJjZXMgaW1tZWRpYXRlbHkuCi0gICAgICAgIHNlcnZlUGVuZGluZ1JlcXVlc3Rz
KGhvc3QsIHByaW9yaXR5KTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLSNlbmRpZgotCi0gICAg
Ly8gSGFuZGxlIGFzeW5jaHJvbm91c2x5IHNvIGVhcmx5IGxvdyBwcmlvcml0eSByZXF1ZXN0cyBk
b24ndAotICAgIC8vIGdldCBzY2hlZHVsZWQgYmVmb3JlIGxhdGVyIGhpZ2ggcHJpb3JpdHkgb25l
cy4KLSAgICBzY2hlZHVsZVNlcnZlUGVuZGluZ1JlcXVlc3RzKCk7Ci19Ci0KLXZvaWQgUmVzb3Vy
Y2VMb2FkU2NoZWR1bGVyOjpyZW1vdmUoUmVzb3VyY2VMb2FkZXIqIHJlc291cmNlTG9hZGVyKQot
ewotICAgIEFTU0VSVChyZXNvdXJjZUxvYWRlcik7Ci0KLSAgICBIb3N0SW5mb3JtYXRpb24qIGhv
c3QgPSBob3N0Rm9yVVJMKHJlc291cmNlTG9hZGVyLT51cmwoKSk7Ci0gICAgaWYgKGhvc3QpCi0g
ICAgICAgIGhvc3QtPnJlbW92ZShyZXNvdXJjZUxvYWRlcik7Ci0jaWYgUExBVEZPUk0oSU9TKQot
ICAgIC8vIFJlc291cmNlTG9hZGVyOjp1cmwoKSBkb2Vzbid0IHN0YXJ0IHJldHVybmluZyB0aGUg
Y29ycmVjdCB2YWx1ZSB1bnRpbCB0aGUgbG9hZCBzdGFydHMuIElmIHdlIGdldCBjYW5jZWxlZCBi
ZWZvcmUgdGhhdCwgd2UgbmVlZCB0byBsb29rIGZvciBvcmlnaW5hbFJlcXVlc3QgdXJsIGluc3Rl
YWQuCi0gICAgLy8gRklYTUU6IFJlc291cmNlTG9hZGVyOjp1cmwoKSBzaG91bGQgYmUgbWFkZSB0
byByZXR1cm4gYSBzZW5zaWJsZSB2YWx1ZSBhdCBhbGwgdGltZXMuCi0gICAgaWYgKCFyZXNvdXJj
ZUxvYWRlci0+aU9TT3JpZ2luYWxSZXF1ZXN0KCkuaXNOdWxsKCkpIHsKLSAgICAgICAgSG9zdElu
Zm9ybWF0aW9uKiBvcmlnaW5hbEhvc3QgPSBob3N0Rm9yVVJMKHJlc291cmNlTG9hZGVyLT5pT1NP
cmlnaW5hbFJlcXVlc3QoKS51cmwoKSk7Ci0gICAgICAgIGlmIChvcmlnaW5hbEhvc3QgJiYgb3Jp
Z2luYWxIb3N0ICE9IGhvc3QpCi0gICAgICAgICAgICBvcmlnaW5hbEhvc3QtPnJlbW92ZShyZXNv
dXJjZUxvYWRlcik7Ci0gICAgfQotI2VuZGlmCi0gICAgc2NoZWR1bGVTZXJ2ZVBlbmRpbmdSZXF1
ZXN0cygpOwotfQotCi12b2lkIFJlc291cmNlTG9hZFNjaGVkdWxlcjo6c2V0RGVmZXJzTG9hZGlu
ZyhSZXNvdXJjZUxvYWRlciosIGJvb2wpCi17Ci19Ci0KLXZvaWQgUmVzb3VyY2VMb2FkU2NoZWR1
bGVyOjpjcm9zc09yaWdpblJlZGlyZWN0UmVjZWl2ZWQoUmVzb3VyY2VMb2FkZXIqIHJlc291cmNl
TG9hZGVyLCBjb25zdCBVUkwmIHJlZGlyZWN0VVJMKQotewotICAgIEhvc3RJbmZvcm1hdGlvbiog
b2xkSG9zdCA9IGhvc3RGb3JVUkwocmVzb3VyY2VMb2FkZXItPnVybCgpKTsKLSAgICBBU1NFUlQo
b2xkSG9zdCk7Ci0gICAgaWYgKCFvbGRIb3N0KQotICAgICAgICByZXR1cm47Ci0KLSAgICBIb3N0
SW5mb3JtYXRpb24qIG5ld0hvc3QgPSBob3N0Rm9yVVJMKHJlZGlyZWN0VVJMLCBDcmVhdGVJZk5v
dEZvdW5kKTsKLQotICAgIGlmIChvbGRIb3N0LT5uYW1lKCkgPT0gbmV3SG9zdC0+bmFtZSgpKQot
ICAgICAgICByZXR1cm47Ci0KLSAgICBuZXdIb3N0LT5hZGRMb2FkSW5Qcm9ncmVzcyhyZXNvdXJj
ZUxvYWRlcik7Ci0gICAgb2xkSG9zdC0+cmVtb3ZlKHJlc291cmNlTG9hZGVyKTsKLX0KLQotdm9p
ZCBSZXNvdXJjZUxvYWRTY2hlZHVsZXI6OnNlcnZlUGVuZGluZ1JlcXVlc3RzKFJlc291cmNlTG9h
ZFByaW9yaXR5IG1pbmltdW1Qcmlvcml0eSkKLXsKLSAgICBMT0coUmVzb3VyY2VMb2FkaW5nLCAi
UmVzb3VyY2VMb2FkU2NoZWR1bGVyOjpzZXJ2ZVBlbmRpbmdSZXF1ZXN0cy4gbV9zdXNwZW5kUGVu
ZGluZ1JlcXVlc3RzQ291bnQ9JWQiLCBtX3N1c3BlbmRQZW5kaW5nUmVxdWVzdHNDb3VudCk7IAot
ICAgIGlmIChpc1N1c3BlbmRpbmdQZW5kaW5nUmVxdWVzdHMoKSkKLSAgICAgICAgcmV0dXJuOwot
Ci0gICAgbV9yZXF1ZXN0VGltZXIuc3RvcCgpOwotICAgIAotICAgIHNlcnZlUGVuZGluZ1JlcXVl
c3RzKG1fbm9uSFRUUFByb3RvY29sSG9zdCwgbWluaW11bVByaW9yaXR5KTsKLQotICAgIFZlY3Rv
cjxIb3N0SW5mb3JtYXRpb24qPiBob3N0c1RvU2VydmU7Ci0gICAgY29weVZhbHVlc1RvVmVjdG9y
KG1faG9zdHMsIGhvc3RzVG9TZXJ2ZSk7Ci0KLSAgICBmb3IgKGF1dG8qIGhvc3QgOiBob3N0c1Rv
U2VydmUpIHsKLSAgICAgICAgaWYgKGhvc3QtPmhhc1JlcXVlc3RzKCkpCi0gICAgICAgICAgICBz
ZXJ2ZVBlbmRpbmdSZXF1ZXN0cyhob3N0LCBtaW5pbXVtUHJpb3JpdHkpOwotICAgICAgICBlbHNl
Ci0gICAgICAgICAgICBkZWxldGUgbV9ob3N0cy50YWtlKGhvc3QtPm5hbWUoKSk7Ci0gICAgfQot
fQotCi12b2lkIFJlc291cmNlTG9hZFNjaGVkdWxlcjo6c2VydmVQZW5kaW5nUmVxdWVzdHMoSG9z
dEluZm9ybWF0aW9uKiBob3N0LCBSZXNvdXJjZUxvYWRQcmlvcml0eSBtaW5pbXVtUHJpb3JpdHkp
Ci17Ci0gICAgTE9HKFJlc291cmNlTG9hZGluZywgIlJlc291cmNlTG9hZFNjaGVkdWxlcjo6c2Vy
dmVQZW5kaW5nUmVxdWVzdHMgSG9zdEluZm9ybWF0aW9uLm1fbmFtZT0nJXMnIiwgaG9zdC0+bmFt
ZSgpLmxhdGluMSgpLmRhdGEoKSk7Ci0KLSAgICBhdXRvIHByaW9yaXR5ID0gUmVzb3VyY2VMb2Fk
UHJpb3JpdHk6OkhpZ2hlc3Q7Ci0gICAgd2hpbGUgKHRydWUpIHsKLSAgICAgICAgYXV0byYgcmVx
dWVzdHNQZW5kaW5nID0gaG9zdC0+cmVxdWVzdHNQZW5kaW5nKHByaW9yaXR5KTsKLSAgICAgICAg
d2hpbGUgKCFyZXF1ZXN0c1BlbmRpbmcuaXNFbXB0eSgpKSB7Ci0gICAgICAgICAgICBSZWZQdHI8
UmVzb3VyY2VMb2FkZXI+IHJlc291cmNlTG9hZGVyID0gcmVxdWVzdHNQZW5kaW5nLmZpcnN0KCk7
Ci0KLSAgICAgICAgICAgIC8vIEZvciBuYW1lZCBob3N0cyAtIHdoaWNoIGFyZSBvbmx5IGh0dHAo
cykgaG9zdHMgLSB3ZSBzaG91bGQgYWx3YXlzIGVuZm9yY2UgdGhlIGNvbm5lY3Rpb24gbGltaXQu
Ci0gICAgICAgICAgICAvLyBGb3Igbm9uLW5hbWVkIGhvc3RzIC0gZXZlcnl0aGluZyBidXQgaHR0
cChzKSAtIHdlIHNob3VsZCBvbmx5IGVuZm9yY2UgdGhlIGxpbWl0IGlmIHRoZSBkb2N1bWVudCBp
c24ndCBkb25lIHBhcnNpbmcgCi0gICAgICAgICAgICAvLyBhbmQgd2UgZG9uJ3Qga25vdyBhbGwg
c3R5bGVzaGVldHMgeWV0LgotICAgICAgICAgICAgRG9jdW1lbnQqIGRvY3VtZW50ID0gcmVzb3Vy
Y2VMb2FkZXItPmZyYW1lTG9hZGVyKCkgPyByZXNvdXJjZUxvYWRlci0+ZnJhbWVMb2FkZXIoKS0+
ZnJhbWUoKS5kb2N1bWVudCgpIDogMDsKLSAgICAgICAgICAgIGJvb2wgc2hvdWxkTGltaXRSZXF1
ZXN0cyA9ICFob3N0LT5uYW1lKCkuaXNOdWxsKCkgfHwgKGRvY3VtZW50ICYmIChkb2N1bWVudC0+
cGFyc2luZygpIHx8ICFkb2N1bWVudC0+aGF2ZVN0eWxlc2hlZXRzTG9hZGVkKCkpKTsKLSAgICAg
ICAgICAgIGlmIChzaG91bGRMaW1pdFJlcXVlc3RzICYmIGhvc3QtPmxpbWl0UmVxdWVzdHMocHJp
b3JpdHkpKQotICAgICAgICAgICAgICAgIHJldHVybjsKLQotICAgICAgICAgICAgcmVxdWVzdHNQ
ZW5kaW5nLnJlbW92ZUZpcnN0KCk7Ci0gICAgICAgICAgICBob3N0LT5hZGRMb2FkSW5Qcm9ncmVz
cyhyZXNvdXJjZUxvYWRlci5nZXQoKSk7Ci0jaWYgUExBVEZPUk0oSU9TKQotICAgICAgICAgICAg
aWYgKCFhcHBsaWNhdGlvbklzV2ViUHJvY2VzcygpKSB7Ci0gICAgICAgICAgICAgICAgcmVzb3Vy
Y2VMb2FkZXItPnN0YXJ0TG9hZGluZygpOwotICAgICAgICAgICAgICAgIHJldHVybjsKLSAgICAg
ICAgICAgIH0KLSNlbmRpZgotICAgICAgICAgICAgcmVzb3VyY2VMb2FkZXItPnN0YXJ0KCk7Ci0g
ICAgICAgIH0KLSAgICAgICAgaWYgKHByaW9yaXR5ID09IG1pbmltdW1Qcmlvcml0eSkKLSAgICAg
ICAgICAgIHJldHVybjsKLSAgICAgICAgLS1wcmlvcml0eTsKLSAgICB9Ci19Ci0KLXZvaWQgUmVz
b3VyY2VMb2FkU2NoZWR1bGVyOjpzdXNwZW5kUGVuZGluZ1JlcXVlc3RzKCkKLXsKLSAgICArK21f
c3VzcGVuZFBlbmRpbmdSZXF1ZXN0c0NvdW50OwotfQotCi12b2lkIFJlc291cmNlTG9hZFNjaGVk
dWxlcjo6cmVzdW1lUGVuZGluZ1JlcXVlc3RzKCkKLXsKLSAgICBBU1NFUlQobV9zdXNwZW5kUGVu
ZGluZ1JlcXVlc3RzQ291bnQpOwotICAgIC0tbV9zdXNwZW5kUGVuZGluZ1JlcXVlc3RzQ291bnQ7
Ci0gICAgaWYgKG1fc3VzcGVuZFBlbmRpbmdSZXF1ZXN0c0NvdW50KQotICAgICAgICByZXR1cm47
Ci0gICAgaWYgKCFtX2hvc3RzLmlzRW1wdHkoKSB8fCBtX25vbkhUVFBQcm90b2NvbEhvc3QtPmhh
c1JlcXVlc3RzKCkpCi0gICAgICAgIHNjaGVkdWxlU2VydmVQZW5kaW5nUmVxdWVzdHMoKTsKLX0K
LSAgICAKLXZvaWQgUmVzb3VyY2VMb2FkU2NoZWR1bGVyOjpzY2hlZHVsZVNlcnZlUGVuZGluZ1Jl
cXVlc3RzKCkKLXsKLSAgICBMT0coUmVzb3VyY2VMb2FkaW5nLCAiUmVzb3VyY2VMb2FkU2NoZWR1
bGVyOjpzY2hlZHVsZVNlcnZlUGVuZGluZ1JlcXVlc3RzLCBtX3JlcXVlc3RUaW1lci5pc0FjdGl2
ZSgpPSV1IiwgbV9yZXF1ZXN0VGltZXIuaXNBY3RpdmUoKSk7Ci0gICAgaWYgKCFtX3JlcXVlc3RU
aW1lci5pc0FjdGl2ZSgpKQotICAgICAgICBtX3JlcXVlc3RUaW1lci5zdGFydE9uZVNob3QoMCk7
Ci19Ci0KLXZvaWQgUmVzb3VyY2VMb2FkU2NoZWR1bGVyOjpyZXF1ZXN0VGltZXJGaXJlZCgpCi17
Ci0gICAgTE9HKFJlc291cmNlTG9hZGluZywgIlJlc291cmNlTG9hZFNjaGVkdWxlcjo6cmVxdWVz
dFRpbWVyRmlyZWRcbiIpOwotICAgIHNlcnZlUGVuZGluZ1JlcXVlc3RzKCk7Ci19Ci0KLVJlc291
cmNlTG9hZFNjaGVkdWxlcjo6SG9zdEluZm9ybWF0aW9uOjpIb3N0SW5mb3JtYXRpb24oY29uc3Qg
U3RyaW5nJiBuYW1lLCB1bnNpZ25lZCBtYXhSZXF1ZXN0c0luRmxpZ2h0KQotICAgIDogbV9uYW1l
KG5hbWUpCi0gICAgLCBtX21heFJlcXVlc3RzSW5GbGlnaHQobWF4UmVxdWVzdHNJbkZsaWdodCkK
LXsKLX0KLQotUmVzb3VyY2VMb2FkU2NoZWR1bGVyOjpIb3N0SW5mb3JtYXRpb246On5Ib3N0SW5m
b3JtYXRpb24oKQotewotICAgIEFTU0VSVCghaGFzUmVxdWVzdHMoKSk7Ci19Ci0KLXVuc2lnbmVk
IFJlc291cmNlTG9hZFNjaGVkdWxlcjo6SG9zdEluZm9ybWF0aW9uOjpwcmlvcml0eVRvSW5kZXgo
UmVzb3VyY2VMb2FkUHJpb3JpdHkgcHJpb3JpdHkpCi17Ci0gICAgc3dpdGNoIChwcmlvcml0eSkg
ewotICAgIGNhc2UgUmVzb3VyY2VMb2FkUHJpb3JpdHk6OlZlcnlMb3c6Ci0gICAgICAgIHJldHVy
biAwOwotICAgIGNhc2UgUmVzb3VyY2VMb2FkUHJpb3JpdHk6OkxvdzoKLSAgICAgICAgcmV0dXJu
IDE7Ci0gICAgY2FzZSBSZXNvdXJjZUxvYWRQcmlvcml0eTo6TWVkaXVtOgotICAgICAgICByZXR1
cm4gMjsKLSAgICBjYXNlIFJlc291cmNlTG9hZFByaW9yaXR5OjpIaWdoOgotICAgICAgICByZXR1
cm4gMzsKLSAgICBjYXNlIFJlc291cmNlTG9hZFByaW9yaXR5OjpWZXJ5SGlnaDoKLSAgICAgICAg
cmV0dXJuIDQ7Ci0gICAgfQotICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwotICAgIHJldHVybiAw
OwotfQotCi12b2lkIFJlc291cmNlTG9hZFNjaGVkdWxlcjo6SG9zdEluZm9ybWF0aW9uOjpzY2hl
ZHVsZShSZXNvdXJjZUxvYWRlciogcmVzb3VyY2VMb2FkZXIsIFJlc291cmNlTG9hZFByaW9yaXR5
IHByaW9yaXR5KQotewotICAgIG1fcmVxdWVzdHNQZW5kaW5nW3ByaW9yaXR5VG9JbmRleChwcmlv
cml0eSldLmFwcGVuZChyZXNvdXJjZUxvYWRlcik7Ci19Ci0gICAgCi12b2lkIFJlc291cmNlTG9h
ZFNjaGVkdWxlcjo6SG9zdEluZm9ybWF0aW9uOjphZGRMb2FkSW5Qcm9ncmVzcyhSZXNvdXJjZUxv
YWRlciogcmVzb3VyY2VMb2FkZXIpCi17Ci0gICAgTE9HKFJlc291cmNlTG9hZGluZywgIkhvc3RJ
bmZvcm1hdGlvbiAnJXMnIGxvYWRpbmcgJyVzJy4gQ3VycmVudCBjb3VudCAlZCIsIG1fbmFtZS5s
YXRpbjEoKS5kYXRhKCksIHJlc291cmNlTG9hZGVyLT51cmwoKS5zdHJpbmcoKS5sYXRpbjEoKS5k
YXRhKCksIG1fcmVxdWVzdHNMb2FkaW5nLnNpemUoKSk7Ci0gICAgbV9yZXF1ZXN0c0xvYWRpbmcu
YWRkKHJlc291cmNlTG9hZGVyKTsKLX0KLSAgICAKLXZvaWQgUmVzb3VyY2VMb2FkU2NoZWR1bGVy
OjpIb3N0SW5mb3JtYXRpb246OnJlbW92ZShSZXNvdXJjZUxvYWRlciogcmVzb3VyY2VMb2FkZXIp
Ci17Ci0gICAgaWYgKG1fcmVxdWVzdHNMb2FkaW5nLnJlbW92ZShyZXNvdXJjZUxvYWRlcikpCi0g
ICAgICAgIHJldHVybjsKLSAgICAKLSAgICBmb3IgKGF1dG8mIHJlcXVlc3RRdWV1ZSA6IG1fcmVx
dWVzdHNQZW5kaW5nKSB7Ci0gICAgICAgIGZvciAoYXV0byBpdCA9IHJlcXVlc3RRdWV1ZS5iZWdp
bigpLCBlbmQgPSByZXF1ZXN0UXVldWUuZW5kKCk7IGl0ICE9IGVuZDsgKytpdCkgewotICAgICAg
ICAgICAgaWYgKCppdCA9PSByZXNvdXJjZUxvYWRlcikgewotICAgICAgICAgICAgICAgIHJlcXVl
c3RRdWV1ZS5yZW1vdmUoaXQpOwotICAgICAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgICAg
IH0KLSAgICAgICAgfQotICAgIH0KLX0KLQotYm9vbCBSZXNvdXJjZUxvYWRTY2hlZHVsZXI6Okhv
c3RJbmZvcm1hdGlvbjo6aGFzUmVxdWVzdHMoKSBjb25zdAotewotICAgIGlmICghbV9yZXF1ZXN0
c0xvYWRpbmcuaXNFbXB0eSgpKQotICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICBmb3IgKGF1dG8m
IHJlcXVlc3RRdWV1ZSA6IG1fcmVxdWVzdHNQZW5kaW5nKSB7Ci0gICAgICAgIGlmICghcmVxdWVz
dFF1ZXVlLmlzRW1wdHkoKSkKLSAgICAgICAgICAgIHJldHVybiB0cnVlOwotICAgIH0KLSAgICBy
ZXR1cm4gZmFsc2U7Ci19Ci0KLWJvb2wgUmVzb3VyY2VMb2FkU2NoZWR1bGVyOjpIb3N0SW5mb3Jt
YXRpb246OmxpbWl0UmVxdWVzdHMoUmVzb3VyY2VMb2FkUHJpb3JpdHkgcHJpb3JpdHkpIGNvbnN0
IAotewotICAgIGlmIChwcmlvcml0eSA9PSBSZXNvdXJjZUxvYWRQcmlvcml0eTo6VmVyeUxvdyAm
JiAhbV9yZXF1ZXN0c0xvYWRpbmcuaXNFbXB0eSgpKQotICAgICAgICByZXR1cm4gdHJ1ZTsKLSAg
ICByZXR1cm4gbV9yZXF1ZXN0c0xvYWRpbmcuc2l6ZSgpID49IChyZXNvdXJjZUxvYWRTY2hlZHVs
ZXIoKS0+aXNTZXJpYWxMb2FkaW5nRW5hYmxlZCgpID8gMSA6IG1fbWF4UmVxdWVzdHNJbkZsaWdo
dCk7Ci19Ci0KLX0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2xv
YWRlci9SZXNvdXJjZUxvYWRTY2hlZHVsZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29y
ZS9sb2FkZXIvUmVzb3VyY2VMb2FkU2NoZWR1bGVyLmgJKHJldmlzaW9uIDE5Mjg4MCkKKysrIFNv
dXJjZS9XZWJDb3JlL2xvYWRlci9SZXNvdXJjZUxvYWRTY2hlZHVsZXIuaAkod29ya2luZyBjb3B5
KQpAQCAtMSwxMzQgKzAsMCBAQAotLyoKLSAgICBDb3B5cmlnaHQgKEMpIDE5OTggTGFycyBLbm9s
bCAoa25vbGxAbXBpLWhkLm1wZy5kZSkKLSAgICBDb3B5cmlnaHQgKEMpIDIwMDEgRGlyayBNdWVs
bGVyIDxtdWVsbGVyQGtkZS5vcmc+Ci0gICAgQ29weXJpZ2h0IChDKSAyMDA0LCAyMDA2LCAyMDA3
LCAyMDA4IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAgICBDb3B5cmlnaHQgKEMp
IDIwMTAgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLQotICAgIFRoaXMgbGlicmFy
eSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKLSAgICBt
b2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1Ymxp
YwotICAgIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRp
b247IGVpdGhlcgotICAgIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0
aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLQotICAgIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRl
ZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICAgIGJ1dCBXSVRIT1VUIEFO
WSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gICAgTUVS
Q0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRo
ZSBHTlUKLSAgICBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWls
cy4KLQotICAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJy
YXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKLSAgICBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsg
c2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bwotICAgIHRoZSBGcmVl
IFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxv
b3IsCi0gICAgQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCi0gKi8KLQotI2lmbmRlZiBSZXNv
dXJjZUxvYWRTY2hlZHVsZXJfaAotI2RlZmluZSBSZXNvdXJjZUxvYWRTY2hlZHVsZXJfaAotCi0j
aW5jbHVkZSAiRnJhbWVMb2FkZXJUeXBlcy5oIgotI2luY2x1ZGUgIlJlc291cmNlTG9hZGVyT3B0
aW9ucy5oIgotI2luY2x1ZGUgIlJlc291cmNlTG9hZFByaW9yaXR5LmgiCi0jaW5jbHVkZSAiVGlt
ZXIuaCIKLSNpbmNsdWRlIDxhcnJheT4KLSNpbmNsdWRlIDx3dGYvRGVxdWUuaD4KLSNpbmNsdWRl
IDx3dGYvSGFzaE1hcC5oPgotI2luY2x1ZGUgPHd0Zi9IYXNoU2V0Lmg+Ci0jaW5jbHVkZSA8d3Rm
L05vbmNvcHlhYmxlLmg+Ci0jaW5jbHVkZSA8d3RmL3RleHQvU3RyaW5nSGFzaC5oPgotI2luY2x1
ZGUgPHd0Zi90ZXh0L1dURlN0cmluZy5oPgotCi1uYW1lc3BhY2UgV2ViQ29yZSB7Ci0KLWNsYXNz
IENhY2hlZFJlc291cmNlOwotY2xhc3MgRnJhbWU7Ci1jbGFzcyBVUkw7Ci1jbGFzcyBOZXRzY2Fw
ZVBsdWdJblN0cmVhbUxvYWRlcjsKLWNsYXNzIE5ldHNjYXBlUGx1Z0luU3RyZWFtTG9hZGVyQ2xp
ZW50OwotY2xhc3MgUmVzb3VyY2VMb2FkZXI7Ci1jbGFzcyBSZXNvdXJjZVJlcXVlc3Q7Ci1jbGFz
cyBTdWJyZXNvdXJjZUxvYWRlcjsKLQotY2xhc3MgUmVzb3VyY2VMb2FkU2NoZWR1bGVyIHsKLSAg
ICBXVEZfTUFLRV9OT05DT1BZQUJMRShSZXNvdXJjZUxvYWRTY2hlZHVsZXIpOyBXVEZfTUFLRV9G
QVNUX0FMTE9DQVRFRDsKLXB1YmxpYzoKLSAgICBXRUJDT1JFX0VYUE9SVCBmcmllbmQgUmVzb3Vy
Y2VMb2FkU2NoZWR1bGVyKiByZXNvdXJjZUxvYWRTY2hlZHVsZXIoKTsKLQotICAgIFdFQkNPUkVf
RVhQT1JUIHZpcnR1YWwgUmVmUHRyPFN1YnJlc291cmNlTG9hZGVyPiBzY2hlZHVsZVN1YnJlc291
cmNlTG9hZChGcmFtZSosIENhY2hlZFJlc291cmNlKiwgY29uc3QgUmVzb3VyY2VSZXF1ZXN0Jiwg
Y29uc3QgUmVzb3VyY2VMb2FkZXJPcHRpb25zJik7Ci0gICAgV0VCQ09SRV9FWFBPUlQgdmlydHVh
bCBSZWZQdHI8TmV0c2NhcGVQbHVnSW5TdHJlYW1Mb2FkZXI+IHNjaGVkdWxlUGx1Z2luU3RyZWFt
TG9hZChGcmFtZSosIE5ldHNjYXBlUGx1Z0luU3RyZWFtTG9hZGVyQ2xpZW50KiwgY29uc3QgUmVz
b3VyY2VSZXF1ZXN0Jik7Ci0gICAgV0VCQ09SRV9FWFBPUlQgdmlydHVhbCB2b2lkIHJlbW92ZShS
ZXNvdXJjZUxvYWRlciopOwotICAgIHZpcnR1YWwgdm9pZCBzZXREZWZlcnNMb2FkaW5nKFJlc291
cmNlTG9hZGVyKiwgYm9vbCk7Ci0gICAgdmlydHVhbCB2b2lkIGNyb3NzT3JpZ2luUmVkaXJlY3RS
ZWNlaXZlZChSZXNvdXJjZUxvYWRlciosIGNvbnN0IFVSTCYgcmVkaXJlY3RVUkwpOwotICAgIAot
ICAgIFdFQkNPUkVfRVhQT1JUIHZpcnR1YWwgdm9pZCBzZXJ2ZVBlbmRpbmdSZXF1ZXN0cyhSZXNv
dXJjZUxvYWRQcmlvcml0eSBtaW5pbXVtUHJpb3JpdHkgPSBSZXNvdXJjZUxvYWRQcmlvcml0eTo6
VmVyeUxvdyk7Ci0gICAgV0VCQ09SRV9FWFBPUlQgdmlydHVhbCB2b2lkIHN1c3BlbmRQZW5kaW5n
UmVxdWVzdHMoKTsKLSAgICBXRUJDT1JFX0VYUE9SVCB2aXJ0dWFsIHZvaWQgcmVzdW1lUGVuZGlu
Z1JlcXVlc3RzKCk7Ci0gICAgCi0gICAgYm9vbCBpc1NlcmlhbExvYWRpbmdFbmFibGVkKCkgY29u
c3QgeyByZXR1cm4gbV9pc1NlcmlhbExvYWRpbmdFbmFibGVkOyB9Ci0gICAgdmlydHVhbCB2b2lk
IHNldFNlcmlhbExvYWRpbmdFbmFibGVkKGJvb2wgYikgeyBtX2lzU2VyaWFsTG9hZGluZ0VuYWJs
ZWQgPSBiOyB9Ci0KLSAgICBjbGFzcyBTdXNwZW5kZXIgewotICAgIHB1YmxpYzoKLSAgICAgICAg
ZXhwbGljaXQgU3VzcGVuZGVyKFJlc291cmNlTG9hZFNjaGVkdWxlciYgc2NoZWR1bGVyKSA6IG1f
c2NoZWR1bGVyKHNjaGVkdWxlcikgeyBtX3NjaGVkdWxlci5zdXNwZW5kUGVuZGluZ1JlcXVlc3Rz
KCk7IH0KLSAgICAgICAgflN1c3BlbmRlcigpIHsgbV9zY2hlZHVsZXIucmVzdW1lUGVuZGluZ1Jl
cXVlc3RzKCk7IH0KLSAgICBwcml2YXRlOgotICAgICAgICBSZXNvdXJjZUxvYWRTY2hlZHVsZXIm
IG1fc2NoZWR1bGVyOwotICAgIH07Ci0KLXByb3RlY3RlZDoKLSAgICBXRUJDT1JFX0VYUE9SVCBS
ZXNvdXJjZUxvYWRTY2hlZHVsZXIoKTsKLSAgICBXRUJDT1JFX0VYUE9SVCB2aXJ0dWFsIH5SZXNv
dXJjZUxvYWRTY2hlZHVsZXIoKTsKLQotcHJpdmF0ZToKLSAgICB2b2lkIHNjaGVkdWxlTG9hZChS
ZXNvdXJjZUxvYWRlciopOwotICAgIHZvaWQgc2NoZWR1bGVTZXJ2ZVBlbmRpbmdSZXF1ZXN0cygp
OwotICAgIHZvaWQgcmVxdWVzdFRpbWVyRmlyZWQoKTsKLQotICAgIGJvb2wgaXNTdXNwZW5kaW5n
UGVuZGluZ1JlcXVlc3RzKCkgY29uc3QgeyByZXR1cm4gISFtX3N1c3BlbmRQZW5kaW5nUmVxdWVz
dHNDb3VudDsgfQotCi0gICAgY2xhc3MgSG9zdEluZm9ybWF0aW9uIHsKLSAgICAgICAgV1RGX01B
S0VfTk9OQ09QWUFCTEUoSG9zdEluZm9ybWF0aW9uKTsgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7
Ci0gICAgcHVibGljOgotICAgICAgICBIb3N0SW5mb3JtYXRpb24oY29uc3QgU3RyaW5nJiwgdW5z
aWduZWQpOwotICAgICAgICB+SG9zdEluZm9ybWF0aW9uKCk7Ci0gICAgICAgIAotICAgICAgICBj
b25zdCBTdHJpbmcmIG5hbWUoKSBjb25zdCB7IHJldHVybiBtX25hbWU7IH0KLSAgICAgICAgdm9p
ZCBzY2hlZHVsZShSZXNvdXJjZUxvYWRlciosIFJlc291cmNlTG9hZFByaW9yaXR5ID0gUmVzb3Vy
Y2VMb2FkUHJpb3JpdHk6OlZlcnlMb3cpOwotICAgICAgICB2b2lkIGFkZExvYWRJblByb2dyZXNz
KFJlc291cmNlTG9hZGVyKik7Ci0gICAgICAgIHZvaWQgcmVtb3ZlKFJlc291cmNlTG9hZGVyKik7
Ci0gICAgICAgIGJvb2wgaGFzUmVxdWVzdHMoKSBjb25zdDsKLSAgICAgICAgYm9vbCBsaW1pdFJl
cXVlc3RzKFJlc291cmNlTG9hZFByaW9yaXR5KSBjb25zdDsKLQotICAgICAgICB0eXBlZGVmIERl
cXVlPFJlZlB0cjxSZXNvdXJjZUxvYWRlcj4+IFJlcXVlc3RRdWV1ZTsKLSAgICAgICAgUmVxdWVz
dFF1ZXVlJiByZXF1ZXN0c1BlbmRpbmcoUmVzb3VyY2VMb2FkUHJpb3JpdHkgcHJpb3JpdHkpIHsg
cmV0dXJuIG1fcmVxdWVzdHNQZW5kaW5nW3ByaW9yaXR5VG9JbmRleChwcmlvcml0eSldOyB9Ci0K
LSAgICBwcml2YXRlOgotICAgICAgICBzdGF0aWMgdW5zaWduZWQgcHJpb3JpdHlUb0luZGV4KFJl
c291cmNlTG9hZFByaW9yaXR5KTsKLQotICAgICAgICBzdGQ6OmFycmF5PFJlcXVlc3RRdWV1ZSwg
cmVzb3VyY2VMb2FkUHJpb3JpdHlDb3VudD4gbV9yZXF1ZXN0c1BlbmRpbmc7Ci0gICAgICAgIHR5
cGVkZWYgSGFzaFNldDxSZWZQdHI8UmVzb3VyY2VMb2FkZXI+PiBSZXF1ZXN0TWFwOwotICAgICAg
ICBSZXF1ZXN0TWFwIG1fcmVxdWVzdHNMb2FkaW5nOwotICAgICAgICBjb25zdCBTdHJpbmcgbV9u
YW1lOwotICAgICAgICBjb25zdCB1bnNpZ25lZCBtX21heFJlcXVlc3RzSW5GbGlnaHQ7Ci0gICAg
fTsKLQotICAgIGVudW0gQ3JlYXRlSG9zdFBvbGljeSB7Ci0gICAgICAgIENyZWF0ZUlmTm90Rm91
bmQsCi0gICAgICAgIEZpbmRPbmx5Ci0gICAgfTsKLSAgICAKLSAgICBIb3N0SW5mb3JtYXRpb24q
IGhvc3RGb3JVUkwoY29uc3QgVVJMJiwgQ3JlYXRlSG9zdFBvbGljeSA9IEZpbmRPbmx5KTsKLSAg
ICBXRUJDT1JFX0VYUE9SVCB2b2lkIHNlcnZlUGVuZGluZ1JlcXVlc3RzKEhvc3RJbmZvcm1hdGlv
biosIFJlc291cmNlTG9hZFByaW9yaXR5KTsKLQotICAgIHR5cGVkZWYgSGFzaE1hcDxTdHJpbmcs
IEhvc3RJbmZvcm1hdGlvbiosIFN0cmluZ0hhc2g+IEhvc3RNYXA7Ci0gICAgSG9zdE1hcCBtX2hv
c3RzOwotICAgIEhvc3RJbmZvcm1hdGlvbiogbV9ub25IVFRQUHJvdG9jb2xIb3N0OwotICAgICAg
ICAKLSAgICBUaW1lciBtX3JlcXVlc3RUaW1lcjsKLQotICAgIHVuc2lnbmVkIG1fc3VzcGVuZFBl
bmRpbmdSZXF1ZXN0c0NvdW50OwotICAgIGJvb2wgbV9pc1NlcmlhbExvYWRpbmdFbmFibGVkOwot
fTsKLQotV0VCQ09SRV9FWFBPUlQgUmVzb3VyY2VMb2FkU2NoZWR1bGVyKiByZXNvdXJjZUxvYWRT
Y2hlZHVsZXIoKTsKLQotfQotCi0jZW5kaWYKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2xvYWRlci9S
ZXNvdXJjZUxvYWRlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvbG9hZGVyL1Jl
c291cmNlTG9hZGVyLmNwcAkocmV2aXNpb24gMTkyODgwKQorKysgU291cmNlL1dlYkNvcmUvbG9h
ZGVyL1Jlc291cmNlTG9hZGVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDcsNyArNDcsNiBAQAog
I2luY2x1ZGUgIlByb2dyZXNzVHJhY2tlci5oIgogI2luY2x1ZGUgIlJlc291cmNlRXJyb3IuaCIK
ICNpbmNsdWRlICJSZXNvdXJjZUhhbmRsZS5oIgotI2luY2x1ZGUgIlJlc291cmNlTG9hZFNjaGVk
dWxlci5oIgogI2luY2x1ZGUgIlNlY3VyaXR5T3JpZ2luLmgiCiAjaW5jbHVkZSAiU2V0dGluZ3Mu
aCIKICNpbmNsdWRlICJTaGFyZWRCdWZmZXIuaCIKQEAgLTgzLDcgKzgyLDcgQEAgUmVzb3VyY2VM
b2FkZXI6On5SZXNvdXJjZUxvYWRlcigpCiAKIHZvaWQgUmVzb3VyY2VMb2FkZXI6OmZpbmlzaE5l
dHdvcmtMb2FkKCkKIHsKLSAgICBwbGF0Zm9ybVN0cmF0ZWdpZXMoKS0+bG9hZGVyU3RyYXRlZ3ko
KS0+cmVzb3VyY2VMb2FkU2NoZWR1bGVyKCktPnJlbW92ZSh0aGlzKTsKKyAgICBwbGF0Zm9ybVN0
cmF0ZWdpZXMoKS0+bG9hZGVyU3RyYXRlZ3koKS0+cmVtb3ZlKHRoaXMpOwogCiAgICAgaWYgKG1f
aGFuZGxlKSB7CiAgICAgICAgIEFTU0VSVChtX2hhbmRsZS0+Y2xpZW50KCkgPT0gdGhpcyk7CkBA
IC0yMzMsNyArMjMyLDcgQEAgdm9pZCBSZXNvdXJjZUxvYWRlcjo6c2V0RGVmZXJzTG9hZGluZyhi
bwogICAgICAgICBzdGFydCgpOwogICAgIH0KIAotICAgIHBsYXRmb3JtU3RyYXRlZ2llcygpLT5s
b2FkZXJTdHJhdGVneSgpLT5yZXNvdXJjZUxvYWRTY2hlZHVsZXIoKS0+c2V0RGVmZXJzTG9hZGlu
Zyh0aGlzLCBkZWZlcnMpOworICAgIHBsYXRmb3JtU3RyYXRlZ2llcygpLT5sb2FkZXJTdHJhdGVn
eSgpLT5zZXREZWZlcnNMb2FkaW5nKHRoaXMsIGRlZmVycyk7CiB9CiAKIEZyYW1lTG9hZGVyKiBS
ZXNvdXJjZUxvYWRlcjo6ZnJhbWVMb2FkZXIoKSBjb25zdApAQCAtMjg5LDcgKzI4OCw3IEBAIHZv
aWQgUmVzb3VyY2VMb2FkZXI6OnNldERhdGFCdWZmZXJpbmdQb2wKIHZvaWQgUmVzb3VyY2VMb2Fk
ZXI6OndpbGxTd2l0Y2hUb1N1YnN0aXR1dGVSZXNvdXJjZSgpCiB7CiAgICAgQVNTRVJUKCFtX2Rv
Y3VtZW50TG9hZGVyLT5pc1N1YnN0aXR1dGVMb2FkUGVuZGluZyh0aGlzKSk7Ci0gICAgcGxhdGZv
cm1TdHJhdGVnaWVzKCktPmxvYWRlclN0cmF0ZWd5KCktPnJlc291cmNlTG9hZFNjaGVkdWxlcigp
LT5yZW1vdmUodGhpcyk7CisgICAgcGxhdGZvcm1TdHJhdGVnaWVzKCktPmxvYWRlclN0cmF0ZWd5
KCktPnJlbW92ZSh0aGlzKTsKICAgICBpZiAobV9oYW5kbGUpCiAgICAgICAgIG1faGFuZGxlLT5j
YW5jZWwoKTsKIH0KQEAgLTM3Niw3ICszNzUsNyBAQCB2b2lkIFJlc291cmNlTG9hZGVyOjp3aWxs
U2VuZFJlcXVlc3RJbnRlCiAKICAgICBib29sIGlzUmVkaXJlY3QgPSAhcmVkaXJlY3RSZXNwb25z
ZS5pc051bGwoKTsKICAgICBpZiAoaXNSZWRpcmVjdCkKLSAgICAgICAgcGxhdGZvcm1TdHJhdGVn
aWVzKCktPmxvYWRlclN0cmF0ZWd5KCktPnJlc291cmNlTG9hZFNjaGVkdWxlcigpLT5jcm9zc09y
aWdpblJlZGlyZWN0UmVjZWl2ZWQodGhpcywgcmVxdWVzdC51cmwoKSk7CisgICAgICAgIHBsYXRm
b3JtU3RyYXRlZ2llcygpLT5sb2FkZXJTdHJhdGVneSgpLT5jcm9zc09yaWdpblJlZGlyZWN0UmVj
ZWl2ZWQodGhpcywgcmVxdWVzdC51cmwoKSk7CiAKICAgICBtX3JlcXVlc3QgPSByZXF1ZXN0Owog
CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9sb2FkZXIvYXJjaGl2ZS9BcmNoaXZlUmVzb3VyY2VDb2xs
ZWN0aW9uLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvbG9hZGVyL2FyY2hpdmUvQXJj
aGl2ZVJlc291cmNlQ29sbGVjdGlvbi5oCShyZXZpc2lvbiAxOTI4ODApCisrKyBTb3VyY2UvV2Vi
Q29yZS9sb2FkZXIvYXJjaGl2ZS9BcmNoaXZlUmVzb3VyY2VDb2xsZWN0aW9uLmgJKHdvcmtpbmcg
Y29weSkKQEAgLTQ3LDcgKzQ3LDcgQEAgcHVibGljOgogICAgIHZvaWQgYWRkUmVzb3VyY2UoUGFz
c1JlZlB0cjxBcmNoaXZlUmVzb3VyY2U+KTsKICAgICB2b2lkIGFkZEFsbFJlc291cmNlcyhBcmNo
aXZlKik7CiAgICAgCi0gICAgQXJjaGl2ZVJlc291cmNlKiBhcmNoaXZlUmVzb3VyY2VGb3JVUkwo
Y29uc3QgVVJMJik7CisgICAgV0VCQ09SRV9FWFBPUlQgQXJjaGl2ZVJlc291cmNlKiBhcmNoaXZl
UmVzb3VyY2VGb3JVUkwoY29uc3QgVVJMJik7CiAgICAgUGFzc1JlZlB0cjxBcmNoaXZlPiBwb3BT
dWJmcmFtZUFyY2hpdmUoY29uc3QgU3RyaW5nJiBmcmFtZU5hbWUsIGNvbnN0IFVSTCYpOwogICAg
IAogcHJpdmF0ZTogICAgCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9sb2FkZXIvY2FjaGUvQ2FjaGVk
UmVzb3VyY2UuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2xvYWRlci9jYWNoZS9D
YWNoZWRSZXNvdXJjZS5jcHAJKHJldmlzaW9uIDE5Mjg4MCkKKysrIFNvdXJjZS9XZWJDb3JlL2xv
YWRlci9jYWNoZS9DYWNoZWRSZXNvdXJjZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQ0LDcgKzQ0
LDYgQEAKICNpbmNsdWRlICJNZW1vcnlDYWNoZS5oIgogI2luY2x1ZGUgIlBsYXRmb3JtU3RyYXRl
Z2llcy5oIgogI2luY2x1ZGUgIlJlc291cmNlSGFuZGxlLmgiCi0jaW5jbHVkZSAiUmVzb3VyY2VM
b2FkU2NoZWR1bGVyLmgiCiAjaW5jbHVkZSAiU2NoZW1lUmVnaXN0cnkuaCIKICNpbmNsdWRlICJT
ZWN1cml0eU9yaWdpbi5oIgogI2luY2x1ZGUgIlNlY3VyaXR5UG9saWN5LmgiCkBAIC0yNzgsNyAr
Mjc3LDcgQEAgdm9pZCBDYWNoZWRSZXNvdXJjZTo6bG9hZChDYWNoZWRSZXNvdXJjZQogICAgICAg
ICBtX2ZyYWdtZW50SWRlbnRpZmllckZvclJlcXVlc3QgPSBTdHJpbmcoKTsKICAgICB9CiAKLSAg
ICBtX2xvYWRlciA9IHBsYXRmb3JtU3RyYXRlZ2llcygpLT5sb2FkZXJTdHJhdGVneSgpLT5yZXNv
dXJjZUxvYWRTY2hlZHVsZXIoKS0+c2NoZWR1bGVTdWJyZXNvdXJjZUxvYWQoY2FjaGVkUmVzb3Vy
Y2VMb2FkZXIuZnJhbWUoKSwgdGhpcywgcmVxdWVzdCwgb3B0aW9ucyk7CisgICAgbV9sb2FkZXIg
PSBwbGF0Zm9ybVN0cmF0ZWdpZXMoKS0+bG9hZGVyU3RyYXRlZ3koKS0+bG9hZFJlc291cmNlKGNh
Y2hlZFJlc291cmNlTG9hZGVyLmZyYW1lKCksIHRoaXMsIHJlcXVlc3QsIG9wdGlvbnMpOwogICAg
IGlmICghbV9sb2FkZXIpIHsKICAgICAgICAgZmFpbEJlZm9yZVN0YXJ0aW5nKCk7CiAgICAgICAg
IHJldHVybjsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2xvYWRlci9jYWNoZS9DYWNoZWRSZXNvdXJj
ZUxvYWRlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvbG9hZGVyL2NhY2hlL0Nh
Y2hlZFJlc291cmNlTG9hZGVyLmNwcAkocmV2aXNpb24gMTkyODgwKQorKysgU291cmNlL1dlYkNv
cmUvbG9hZGVyL2NhY2hlL0NhY2hlZFJlc291cmNlTG9hZGVyLmNwcAkod29ya2luZyBjb3B5KQpA
QCAtNjEsNyArNjEsNiBAQAogI2luY2x1ZGUgIlBsYXRmb3JtU3RyYXRlZ2llcy5oIgogI2luY2x1
ZGUgIlJlbmRlckVsZW1lbnQuaCIKICNpbmNsdWRlICJSZXNvdXJjZUxvYWRJbmZvLmgiCi0jaW5j
bHVkZSAiUmVzb3VyY2VMb2FkU2NoZWR1bGVyLmgiCiAjaW5jbHVkZSAiU2NyaXB0Q29udHJvbGxl
ci5oIgogI2luY2x1ZGUgIlNlY3VyaXR5T3JpZ2luLmgiCiAjaW5jbHVkZSAiU2Vzc2lvbklELmgi
CkBAIC05NjcsNyArOTY2LDcgQEAgdm9pZCBDYWNoZWRSZXNvdXJjZUxvYWRlcjo6cGVyZm9ybVBv
c3RMbwogewogICAgIGNoZWNrRm9yUGVuZGluZ1ByZWxvYWRzKCk7CiAKLSAgICBwbGF0Zm9ybVN0
cmF0ZWdpZXMoKS0+bG9hZGVyU3RyYXRlZ3koKS0+cmVzb3VyY2VMb2FkU2NoZWR1bGVyKCktPnNl
cnZlUGVuZGluZ1JlcXVlc3RzKCk7CisgICAgcGxhdGZvcm1TdHJhdGVnaWVzKCktPmxvYWRlclN0
cmF0ZWd5KCktPnNlcnZlUGVuZGluZ1JlcXVlc3RzKCk7CiB9CiAKIHZvaWQgQ2FjaGVkUmVzb3Vy
Y2VMb2FkZXI6OmluY3JlbWVudFJlcXVlc3RDb3VudChjb25zdCBDYWNoZWRSZXNvdXJjZSogcmVz
KQpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vUGxhdGZvcm1TdHJhdGVnaWVzLmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vUGxhdGZvcm1TdHJhdGVnaWVzLmgJ
KHJldmlzaW9uIDE5Mjg4MCkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL1BsYXRmb3JtU3Ry
YXRlZ2llcy5oCSh3b3JraW5nIGNvcHkpCkBAIC0yOCw2ICsyOCw3IEBACiAKIG5hbWVzcGFjZSBX
ZWJDb3JlIHsKIAorY2xhc3MgQmxvYlJlZ2lzdHJ5OwogY2xhc3MgQ29va2llc1N0cmF0ZWd5Owog
Y2xhc3MgTG9hZGVyU3RyYXRlZ3k7CiBjbGFzcyBQYXN0ZWJvYXJkU3RyYXRlZ3k7CkBAIC02Mywx
MiArNjQsMTUgQEAgcHVibGljOgogICAgICAgICByZXR1cm4gbV9wbHVnaW5TdHJhdGVneTsKICAg
ICB9CiAKKyAgICBCbG9iUmVnaXN0cnkqIGJsb2JSZWdpc3RyeSgpCisgICAgeworICAgICAgICBp
ZiAoIW1fYmxvYlJlZ2lzdHJ5KQorICAgICAgICAgICAgbV9ibG9iUmVnaXN0cnkgPSBjcmVhdGVC
bG9iUmVnaXN0cnkoKTsKKyAgICAgICAgcmV0dXJuIG1fYmxvYlJlZ2lzdHJ5OworICAgIH0KKwog
cHJvdGVjdGVkOgogICAgIFBsYXRmb3JtU3RyYXRlZ2llcygpCi0gICAgICAgIDogbV9jb29raWVz
U3RyYXRlZ3kobnVsbHB0cikKLSAgICAgICAgLCBtX2xvYWRlclN0cmF0ZWd5KG51bGxwdHIpCi0g
ICAgICAgICwgbV9wYXN0ZWJvYXJkU3RyYXRlZ3kobnVsbHB0cikKLSAgICAgICAgLCBtX3BsdWdp
blN0cmF0ZWd5KG51bGxwdHIpCiAgICAgewogICAgIH0KIApAQCAtODEsMTEgKzg1LDEzIEBAIHBy
aXZhdGU6CiAgICAgdmlydHVhbCBMb2FkZXJTdHJhdGVneSogY3JlYXRlTG9hZGVyU3RyYXRlZ3ko
KSA9IDA7CiAgICAgdmlydHVhbCBQYXN0ZWJvYXJkU3RyYXRlZ3kqIGNyZWF0ZVBhc3RlYm9hcmRT
dHJhdGVneSgpID0gMDsKICAgICB2aXJ0dWFsIFBsdWdpblN0cmF0ZWd5KiBjcmVhdGVQbHVnaW5T
dHJhdGVneSgpID0gMDsKKyAgICB2aXJ0dWFsIEJsb2JSZWdpc3RyeSogY3JlYXRlQmxvYlJlZ2lz
dHJ5KCkgPSAwOwogCi0gICAgQ29va2llc1N0cmF0ZWd5KiBtX2Nvb2tpZXNTdHJhdGVneTsKLSAg
ICBMb2FkZXJTdHJhdGVneSogbV9sb2FkZXJTdHJhdGVneTsKLSAgICBQYXN0ZWJvYXJkU3RyYXRl
Z3kqIG1fcGFzdGVib2FyZFN0cmF0ZWd5OwotICAgIFBsdWdpblN0cmF0ZWd5KiBtX3BsdWdpblN0
cmF0ZWd5OworICAgIENvb2tpZXNTdHJhdGVneSogbV9jb29raWVzU3RyYXRlZ3kgeyB9OworICAg
IExvYWRlclN0cmF0ZWd5KiBtX2xvYWRlclN0cmF0ZWd5IHsgfTsKKyAgICBQYXN0ZWJvYXJkU3Ry
YXRlZ3kqIG1fcGFzdGVib2FyZFN0cmF0ZWd5IHsgfTsKKyAgICBQbHVnaW5TdHJhdGVneSogbV9w
bHVnaW5TdHJhdGVneSB7IH07CisgICAgQmxvYlJlZ2lzdHJ5KiBtX2Jsb2JSZWdpc3RyeSB7IH07
CiB9OwogCiBXRUJDT1JFX0VYUE9SVCBQbGF0Zm9ybVN0cmF0ZWdpZXMqIHBsYXRmb3JtU3RyYXRl
Z2llcygpOwpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9CbG9iUmVnaXN0
cnkuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvQmxv
YlJlZ2lzdHJ5LmNwcAkocmV2aXNpb24gMTkyODgwKQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vbmV0d29yay9CbG9iUmVnaXN0cnkuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00MCw5ICs0MCw3
IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKIEJsb2JSZWdpc3RyeSYgYmxvYlJlZ2lzdHJ5KCkKIHsK
ICAgICBBU1NFUlQoaXNNYWluVGhyZWFkKCkpOwotCi0gICAgc3RhdGljIEJsb2JSZWdpc3RyeSYg
aW5zdGFuY2UgPSAqcGxhdGZvcm1TdHJhdGVnaWVzKCktPmxvYWRlclN0cmF0ZWd5KCktPmNyZWF0
ZUJsb2JSZWdpc3RyeSgpOwotICAgIHJldHVybiBpbnN0YW5jZTsKKyAgICByZXR1cm4gKnBsYXRm
b3JtU3RyYXRlZ2llcygpLT5ibG9iUmVnaXN0cnkoKTsKIH0KIAogQmxvYlJlZ2lzdHJ5Ojp+Qmxv
YlJlZ2lzdHJ5KCkKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvUmVzb3Vy
Y2VSZXF1ZXN0QmFzZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25l
dHdvcmsvUmVzb3VyY2VSZXF1ZXN0QmFzZS5oCShyZXZpc2lvbiAxOTI4ODApCisrKyBTb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL1Jlc291cmNlUmVxdWVzdEJhc2UuaAkod29ya2luZyBj
b3B5KQpAQCAtMjQ0LDcgKzI0NCw3IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKICAgICAgICAgUmVz
b3VyY2VSZXF1ZXN0QmFzZTo6UmVxdWVzdGVyIHJlcXVlc3RlcjsKICAgICB9OwogICAgIAotICAg
IHVuc2lnbmVkIGluaXRpYWxpemVNYXhpbXVtSFRUUENvbm5lY3Rpb25Db3VudFBlckhvc3QoKTsK
KyAgICBXRUJDT1JFX0VYUE9SVCB1bnNpZ25lZCBpbml0aWFsaXplTWF4aW11bUhUVFBDb25uZWN0
aW9uQ291bnRQZXJIb3N0KCk7CiAjaWYgUExBVEZPUk0oSU9TKQogICAgIFdFQkNPUkVfRVhQT1JU
IHZvaWQgaW5pdGlhbGl6ZUhUVFBDb25uZWN0aW9uU2V0dGluZ3NPblN0YXJ0dXAoKTsKICNlbmRp
ZgpJbmRleDogU291cmNlL1dlYkNvcmUvc3R5bGUvU3R5bGVSZXNvbHZlVHJlZS5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1dlYkNvcmUvc3R5bGUvU3R5bGVSZXNvbHZlVHJlZS5jcHAJKHJldmlz
aW9uIDE5Mjg4MCkKKysrIFNvdXJjZS9XZWJDb3JlL3N0eWxlL1N0eWxlUmVzb2x2ZVRyZWUuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC00Nyw3ICs0Nyw2IEBACiAjaW5jbHVkZSAiUmVuZGVyVGV4dC5o
IgogI2luY2x1ZGUgIlJlbmRlclRyZWVQb3NpdGlvbi5oIgogI2luY2x1ZGUgIlJlbmRlcldpZGdl
dC5oIgotI2luY2x1ZGUgIlJlc291cmNlTG9hZFNjaGVkdWxlci5oIgogI2luY2x1ZGUgIlNldHRp
bmdzLmgiCiAjaW5jbHVkZSAiU2hhZG93Um9vdC5oIgogI2luY2x1ZGUgIlN0eWxlUmVzb2x2ZUZv
ckRvY3VtZW50LmgiCkBAIC05NDQsNyArOTQzLDcgQEAgUG9zdFJlc29sdXRpb25DYWxsYmFja0Rp
c2FibGVyOjpQb3N0UmVzbwogICAgICsrcmVzb2x1dGlvbk5lc3RpbmdEZXB0aDsKIAogICAgIGlm
IChyZXNvbHV0aW9uTmVzdGluZ0RlcHRoID09IDEpCi0gICAgICAgIHBsYXRmb3JtU3RyYXRlZ2ll
cygpLT5sb2FkZXJTdHJhdGVneSgpLT5yZXNvdXJjZUxvYWRTY2hlZHVsZXIoKS0+c3VzcGVuZFBl
bmRpbmdSZXF1ZXN0cygpOworICAgICAgICBwbGF0Zm9ybVN0cmF0ZWdpZXMoKS0+bG9hZGVyU3Ry
YXRlZ3koKS0+c3VzcGVuZFBlbmRpbmdSZXF1ZXN0cygpOwogCiAgICAgLy8gRklYTUU6IEl0J3Mg
c3RyYW5nZSB0byBidWlsZCB0aGlzIGludG8gdGhlIGRpc2FibGVyLgogICAgIHN1c3BlbmRNZW1v
cnlDYWNoZUNsaWVudENhbGxzKGRvY3VtZW50KTsKQEAgLTk1OSw3ICs5NTgsNyBAQCBQb3N0UmVz
b2x1dGlvbkNhbGxiYWNrRGlzYWJsZXI6On5Qb3N0UmVzCiAgICAgICAgICAgICBxdWV1ZVtpXSgp
OwogICAgICAgICBxdWV1ZS5jbGVhcigpOwogCi0gICAgICAgIHBsYXRmb3JtU3RyYXRlZ2llcygp
LT5sb2FkZXJTdHJhdGVneSgpLT5yZXNvdXJjZUxvYWRTY2hlZHVsZXIoKS0+cmVzdW1lUGVuZGlu
Z1JlcXVlc3RzKCk7CisgICAgICAgIHBsYXRmb3JtU3RyYXRlZ2llcygpLT5sb2FkZXJTdHJhdGVn
eSgpLT5yZXN1bWVQZW5kaW5nUmVxdWVzdHMoKTsKICAgICB9CiAKICAgICAtLXJlc29sdXRpb25O
ZXN0aW5nRGVwdGg7CkluZGV4OiBTb3VyY2UvV2ViS2l0Mi9DaGFuZ2VMb2cKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1dlYktpdDIvQ2hhbmdlTG9nCShyZXZpc2lvbiAxOTI4ODApCisrKyBTb3VyY2Uv
V2ViS2l0Mi9DaGFuZ2VMb2cJKHdvcmtpbmcgY29weSkKQEAgLTEsMyArMSw0NyBAQAorMjAxNS0x
Mi0wMiAgQW50dGkgS29pdmlzdG8gIDxhbnR0aUBhcHBsZS5jb20+CisKKyAgICAgICAgTW92ZSBS
ZXNvdXJjZUxvYWRTY2hlZHVsZXIgdG8gV2ViS2l0MQorICAgICAgICBodHRwczovL2J1Z3Mud2Vi
a2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTUxNzQzCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9C
T0RZIChPT1BTISkuCisKKyAgICAgICAgKiBOZXR3b3JrUHJvY2Vzcy9OZXR3b3JrUHJvY2Vzc1Bs
YXRmb3JtU3RyYXRlZ2llcy5jcHA6CisgICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtQcm9jZXNzUGxh
dGZvcm1TdHJhdGVnaWVzOjpjcmVhdGVDb29raWVzU3RyYXRlZ3kpOgorICAgICAgICAoV2ViS2l0
OjpOZXR3b3JrUHJvY2Vzc1BsYXRmb3JtU3RyYXRlZ2llczo6Y3JlYXRlTG9hZGVyU3RyYXRlZ3kp
OgorICAgICAgICAoV2ViS2l0OjpOZXR3b3JrUHJvY2Vzc1BsYXRmb3JtU3RyYXRlZ2llczo6Y3Jl
YXRlUGFzdGVib2FyZFN0cmF0ZWd5KToKKyAgICAgICAgKFdlYktpdDo6TmV0d29ya1Byb2Nlc3NQ
bGF0Zm9ybVN0cmF0ZWdpZXM6OmNyZWF0ZVBsdWdpblN0cmF0ZWd5KToKKyAgICAgICAgKFdlYktp
dDo6TmV0d29ya1Byb2Nlc3NQbGF0Zm9ybVN0cmF0ZWdpZXM6OmNyZWF0ZUJsb2JSZWdpc3RyeSk6
CisgICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtQcm9jZXNzUGxhdGZvcm1TdHJhdGVnaWVzOjpyZXNv
dXJjZUxvYWRTY2hlZHVsZXIpOiBEZWxldGVkLgorICAgICAgICAoV2ViS2l0OjpOZXR3b3JrUHJv
Y2Vzc1BsYXRmb3JtU3RyYXRlZ2llczo6bG9hZFJlc291cmNlU3luY2hyb25vdXNseSk6IERlbGV0
ZWQuCisgICAgICAgICogTmV0d29ya1Byb2Nlc3MvTmV0d29ya1Byb2Nlc3NQbGF0Zm9ybVN0cmF0
ZWdpZXMuaDoKKyAgICAgICAgKiBXZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0luamVjdGVkQnVu
ZGxlLmNwcDoKKyAgICAgICAgKiBXZWJQcm9jZXNzL05ldHdvcmsvV2ViUmVzb3VyY2VMb2FkU2No
ZWR1bGVyLmNwcDoKKyAgICAgICAgKFdlYktpdDo6V2ViUmVzb3VyY2VMb2FkU2NoZWR1bGVyOjp+
V2ViUmVzb3VyY2VMb2FkU2NoZWR1bGVyKToKKyAgICAgICAgKFdlYktpdDo6V2ViUmVzb3VyY2VM
b2FkU2NoZWR1bGVyOjpsb2FkUmVzb3VyY2UpOgorICAgICAgICAoV2ViS2l0OjpXZWJSZXNvdXJj
ZUxvYWRTY2hlZHVsZXI6OnJlc3VtZVBlbmRpbmdSZXF1ZXN0cyk6CisgICAgICAgIChXZWJLaXQ6
OldlYlJlc291cmNlTG9hZFNjaGVkdWxlcjo6bmV0d29ya1Byb2Nlc3NDcmFzaGVkKToKKyAgICAg
ICAgKFdlYktpdDo6V2ViUmVzb3VyY2VMb2FkU2NoZWR1bGVyOjpsb2FkUmVzb3VyY2VTeW5jaHJv
bm91c2x5KToKKyAgICAgICAgKFdlYktpdDo6V2ViUmVzb3VyY2VMb2FkU2NoZWR1bGVyOjpjcmVh
dGVQaW5nSGFuZGxlKToKKyAgICAgICAgKFdlYktpdDo6V2ViUmVzb3VyY2VMb2FkU2NoZWR1bGVy
OjpzY2hlZHVsZVN1YnJlc291cmNlTG9hZCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJLaXQ6Oldl
YlJlc291cmNlTG9hZFNjaGVkdWxlcjo6c2V0U2VyaWFsTG9hZGluZ0VuYWJsZWQpOiBEZWxldGVk
LgorICAgICAgICAqIFdlYlByb2Nlc3MvTmV0d29yay9XZWJSZXNvdXJjZUxvYWRTY2hlZHVsZXIu
aDoKKyAgICAgICAgKFdlYktpdDo6V2ViUmVzb3VyY2VMb2FkU2NoZWR1bGVyOjp3ZWJSZXNvdXJj
ZUxvYWRlckZvcklkZW50aWZpZXIpOgorICAgICAgICAqIFdlYlByb2Nlc3MvUGx1Z2lucy9QbHVn
aW5WaWV3LmNwcDoKKyAgICAgICAgKFdlYktpdDo6UGx1Z2luVmlldzo6U3RyZWFtOjpzdGFydCk6
CisgICAgICAgIChXZWJLaXQ6OlBsdWdpblZpZXc6OlN0cmVhbTo6Y2FuY2VsKToKKyAgICAgICAg
KiBXZWJQcm9jZXNzL1dlYkNvcmVTdXBwb3J0L1dlYlBsYXRmb3JtU3RyYXRlZ2llcy5jcHA6Cisg
ICAgICAgIChXZWJLaXQ6OldlYlBsYXRmb3JtU3RyYXRlZ2llczo6Y3JlYXRlTG9hZGVyU3RyYXRl
Z3kpOgorICAgICAgICAoV2ViS2l0OjpXZWJQbGF0Zm9ybVN0cmF0ZWdpZXM6OmNyZWF0ZVBhc3Rl
Ym9hcmRTdHJhdGVneSk6CisgICAgICAgIChXZWJLaXQ6OldlYlBsYXRmb3JtU3RyYXRlZ2llczo6
Y3JlYXRlUGx1Z2luU3RyYXRlZ3kpOgorICAgICAgICAoV2ViS2l0OjpXZWJQbGF0Zm9ybVN0cmF0
ZWdpZXM6OmNyZWF0ZUJsb2JSZWdpc3RyeSk6CisgICAgICAgIChXZWJLaXQ6OldlYlBsYXRmb3Jt
U3RyYXRlZ2llczo6Y29va2llc0ZvckRPTSk6CisgICAgICAgIChXZWJLaXQ6OldlYlBsYXRmb3Jt
U3RyYXRlZ2llczo6ZGVsZXRlQ29va2llKToKKyAgICAgICAgKFdlYktpdDo6V2ViUGxhdGZvcm1T
dHJhdGVnaWVzOjpyZWZyZXNoUGx1Z2lucyk6CisgICAgICAgIChXZWJLaXQ6OldlYlBsYXRmb3Jt
U3RyYXRlZ2llczo6cmVzb3VyY2VMb2FkU2NoZWR1bGVyKTogRGVsZXRlZC4KKyAgICAgICAgKFdl
YktpdDo6V2ViUGxhdGZvcm1TdHJhdGVnaWVzOjpsb2FkUmVzb3VyY2VTeW5jaHJvbm91c2x5KTog
RGVsZXRlZC4KKyAgICAgICAgKFdlYktpdDo6V2ViUGxhdGZvcm1TdHJhdGVnaWVzOjpjcmVhdGVQ
aW5nSGFuZGxlKTogRGVsZXRlZC4KKyAgICAgICAgKiBXZWJQcm9jZXNzL1dlYkNvcmVTdXBwb3J0
L1dlYlBsYXRmb3JtU3RyYXRlZ2llcy5oOgorCiAyMDE1LTEyLTAxICBDYXJsb3MgR2FyY2lhIENh
bXBvcyAgPGNnYXJjaWFAaWdhbGlhLmNvbT4KIAogICAgICAgICBVbnJldmlld2VkLiBBZGQgbWlz
c2luZyBpbnNwZWN0b3IgZmlsZXMgdG8gdGhlIEdUSysgYnVpbGQuCkluZGV4OiBTb3VyY2UvV2Vi
S2l0Mi9OZXR3b3JrUHJvY2Vzcy9OZXR3b3JrUHJvY2Vzc1BsYXRmb3JtU3RyYXRlZ2llcy5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdDIvTmV0d29ya1Byb2Nlc3MvTmV0d29ya1Byb2Nl
c3NQbGF0Zm9ybVN0cmF0ZWdpZXMuY3BwCShyZXZpc2lvbiAxOTI4ODApCisrKyBTb3VyY2UvV2Vi
S2l0Mi9OZXR3b3JrUHJvY2Vzcy9OZXR3b3JrUHJvY2Vzc1BsYXRmb3JtU3RyYXRlZ2llcy5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTQxLDMzICs0MSwyMiBAQCB2b2lkIE5ldHdvcmtQcm9jZXNzUGxh
dGZvcm1TdHJhdGVnaWVzOjppCiAKIENvb2tpZXNTdHJhdGVneSogTmV0d29ya1Byb2Nlc3NQbGF0
Zm9ybVN0cmF0ZWdpZXM6OmNyZWF0ZUNvb2tpZXNTdHJhdGVneSgpCiB7Ci0gICAgcmV0dXJuIDA7
CisgICAgcmV0dXJuIG51bGxwdHI7CiB9CiAKIExvYWRlclN0cmF0ZWd5KiBOZXR3b3JrUHJvY2Vz
c1BsYXRmb3JtU3RyYXRlZ2llczo6Y3JlYXRlTG9hZGVyU3RyYXRlZ3koKQogewotICAgIHJldHVy
biB0aGlzOworICAgIHJldHVybiBudWxscHRyOwogfQogCiBQYXN0ZWJvYXJkU3RyYXRlZ3kqIE5l
dHdvcmtQcm9jZXNzUGxhdGZvcm1TdHJhdGVnaWVzOjpjcmVhdGVQYXN0ZWJvYXJkU3RyYXRlZ3ko
KQogewotICAgIHJldHVybiAwOworICAgIHJldHVybiBudWxscHRyOwogfQogCiBQbHVnaW5TdHJh
dGVneSogTmV0d29ya1Byb2Nlc3NQbGF0Zm9ybVN0cmF0ZWdpZXM6OmNyZWF0ZVBsdWdpblN0cmF0
ZWd5KCkKIHsKLSAgICByZXR1cm4gMDsKLX0KLQotUmVzb3VyY2VMb2FkU2NoZWR1bGVyKiBOZXR3
b3JrUHJvY2Vzc1BsYXRmb3JtU3RyYXRlZ2llczo6cmVzb3VyY2VMb2FkU2NoZWR1bGVyKCkKLXsK
LSAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKLSAgICByZXR1cm4gMDsKLX0KLQotdm9pZCBOZXR3
b3JrUHJvY2Vzc1BsYXRmb3JtU3RyYXRlZ2llczo6bG9hZFJlc291cmNlU3luY2hyb25vdXNseShO
ZXR3b3JraW5nQ29udGV4dCosIHVuc2lnbmVkIGxvbmcsIGNvbnN0IFJlc291cmNlUmVxdWVzdCYs
IFN0b3JlZENyZWRlbnRpYWxzLCBDbGllbnRDcmVkZW50aWFsUG9saWN5LCBSZXNvdXJjZUVycm9y
JiwgUmVzb3VyY2VSZXNwb25zZSYsIFZlY3RvcjxjaGFyPiYpCi17Ci0gICAgQVNTRVJUX05PVF9S
RUFDSEVEKCk7CisgICAgcmV0dXJuIG51bGxwdHI7CiB9CiAKIEJsb2JSZWdpc3RyeSogTmV0d29y
a1Byb2Nlc3NQbGF0Zm9ybVN0cmF0ZWdpZXM6OmNyZWF0ZUJsb2JSZWdpc3RyeSgpCkluZGV4OiBT
b3VyY2UvV2ViS2l0Mi9OZXR3b3JrUHJvY2Vzcy9OZXR3b3JrUHJvY2Vzc1BsYXRmb3JtU3RyYXRl
Z2llcy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQyL05ldHdvcmtQcm9jZXNzL05ldHdv
cmtQcm9jZXNzUGxhdGZvcm1TdHJhdGVnaWVzLmgJKHJldmlzaW9uIDE5Mjg4MCkKKysrIFNvdXJj
ZS9XZWJLaXQyL05ldHdvcmtQcm9jZXNzL05ldHdvcmtQcm9jZXNzUGxhdGZvcm1TdHJhdGVnaWVz
LmgJKHdvcmtpbmcgY29weSkKQEAgLTMxLDIxICszMSwxNyBAQAogCiBuYW1lc3BhY2UgV2ViS2l0
IHsKIAotY2xhc3MgTmV0d29ya1Byb2Nlc3NQbGF0Zm9ybVN0cmF0ZWdpZXMgOiBwdWJsaWMgV2Vi
Q29yZTo6UGxhdGZvcm1TdHJhdGVnaWVzLCBwcml2YXRlIFdlYkNvcmU6OkxvYWRlclN0cmF0ZWd5
IHsKK2NsYXNzIE5ldHdvcmtQcm9jZXNzUGxhdGZvcm1TdHJhdGVnaWVzIDogcHVibGljIFdlYkNv
cmU6OlBsYXRmb3JtU3RyYXRlZ2llcyB7CiBwdWJsaWM6CiAgICAgc3RhdGljIHZvaWQgaW5pdGlh
bGl6ZSgpOwogICAgIAogcHJpdmF0ZToKICAgICAvLyBXZWJDb3JlOjpQbGF0Zm9ybVN0cmF0ZWdp
ZXMKLSAgICB2aXJ0dWFsIFdlYkNvcmU6OkNvb2tpZXNTdHJhdGVneSogY3JlYXRlQ29va2llc1N0
cmF0ZWd5KCkgb3ZlcnJpZGU7Ci0gICAgdmlydHVhbCBXZWJDb3JlOjpMb2FkZXJTdHJhdGVneSog
Y3JlYXRlTG9hZGVyU3RyYXRlZ3koKSBvdmVycmlkZTsKLSAgICB2aXJ0dWFsIFdlYkNvcmU6OlBh
c3RlYm9hcmRTdHJhdGVneSogY3JlYXRlUGFzdGVib2FyZFN0cmF0ZWd5KCkgb3ZlcnJpZGU7Ci0g
ICAgdmlydHVhbCBXZWJDb3JlOjpQbHVnaW5TdHJhdGVneSogY3JlYXRlUGx1Z2luU3RyYXRlZ3ko
KSBvdmVycmlkZTsKLQotICAgIC8vIFdlYkNvcmU6OkxvYWRlclN0cmF0ZWd5Ci0gICAgdmlydHVh
bCBXZWJDb3JlOjpSZXNvdXJjZUxvYWRTY2hlZHVsZXIqIHJlc291cmNlTG9hZFNjaGVkdWxlcigp
IG92ZXJyaWRlOwotICAgIHZpcnR1YWwgdm9pZCBsb2FkUmVzb3VyY2VTeW5jaHJvbm91c2x5KFdl
YkNvcmU6Ok5ldHdvcmtpbmdDb250ZXh0KiwgdW5zaWduZWQgbG9uZyByZXNvdXJjZUxvYWRJZGVu
dGlmaWVyLCBjb25zdCBXZWJDb3JlOjpSZXNvdXJjZVJlcXVlc3QmLCBXZWJDb3JlOjpTdG9yZWRD
cmVkZW50aWFscywgV2ViQ29yZTo6Q2xpZW50Q3JlZGVudGlhbFBvbGljeSwgV2ViQ29yZTo6UmVz
b3VyY2VFcnJvciYsIFdlYkNvcmU6OlJlc291cmNlUmVzcG9uc2UmLCBWZWN0b3I8Y2hhcj4mIGRh
dGEpIG92ZXJyaWRlOwotICAgIHZpcnR1YWwgV2ViQ29yZTo6QmxvYlJlZ2lzdHJ5KiBjcmVhdGVC
bG9iUmVnaXN0cnkoKSBvdmVycmlkZTsKKyAgICBXZWJDb3JlOjpDb29raWVzU3RyYXRlZ3kqIGNy
ZWF0ZUNvb2tpZXNTdHJhdGVneSgpIG92ZXJyaWRlOworICAgIFdlYkNvcmU6OkxvYWRlclN0cmF0
ZWd5KiBjcmVhdGVMb2FkZXJTdHJhdGVneSgpIG92ZXJyaWRlOworICAgIFdlYkNvcmU6OlBhc3Rl
Ym9hcmRTdHJhdGVneSogY3JlYXRlUGFzdGVib2FyZFN0cmF0ZWd5KCkgb3ZlcnJpZGU7CisgICAg
V2ViQ29yZTo6UGx1Z2luU3RyYXRlZ3kqIGNyZWF0ZVBsdWdpblN0cmF0ZWd5KCkgb3ZlcnJpZGU7
CisgICAgV2ViQ29yZTo6QmxvYlJlZ2lzdHJ5KiBjcmVhdGVCbG9iUmVnaXN0cnkoKSBvdmVycmlk
ZTsKIH07CiAKIH0gLy8gbmFtZXNwYWNlIFdlYktpdApJbmRleDogU291cmNlL1dlYktpdDIvV2Vi
UHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9JbmplY3RlZEJ1bmRsZS5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9JbmplY3RlZEJ1bmRsZS5j
cHAJKHJldmlzaW9uIDE5Mjg4MCkKKysrIFNvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvSW5qZWN0
ZWRCdW5kbGUvSW5qZWN0ZWRCdW5kbGUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC02Niw3ICs2Niw2
IEBACiAjaW5jbHVkZSA8V2ViQ29yZS9QYWdlR3JvdXAuaD4KICNpbmNsdWRlIDxXZWJDb3JlL1By
aW50Q29udGV4dC5oPgogI2luY2x1ZGUgPFdlYkNvcmUvUmVzb3VyY2VIYW5kbGUuaD4KLSNpbmNs
dWRlIDxXZWJDb3JlL1Jlc291cmNlTG9hZFNjaGVkdWxlci5oPgogI2luY2x1ZGUgPFdlYkNvcmUv
U2NyaXB0Q29udHJvbGxlci5oPgogI2luY2x1ZGUgPFdlYkNvcmUvU2VjdXJpdHlPcmlnaW4uaD4K
ICNpbmNsdWRlIDxXZWJDb3JlL1NlY3VyaXR5UG9saWN5Lmg+CkluZGV4OiBTb3VyY2UvV2ViS2l0
Mi9XZWJQcm9jZXNzL05ldHdvcmsvV2ViUmVzb3VyY2VMb2FkU2NoZWR1bGVyLmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL05ldHdvcmsvV2ViUmVzb3VyY2VMb2Fk
U2NoZWR1bGVyLmNwcAkocmV2aXNpb24gMTkyODgwKQorKysgU291cmNlL1dlYktpdDIvV2ViUHJv
Y2Vzcy9OZXR3b3JrL1dlYlJlc291cmNlTG9hZFNjaGVkdWxlci5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTI2LDYgKzI2LDcgQEAKICNpbmNsdWRlICJjb25maWcuaCIKICNpbmNsdWRlICJXZWJSZXNv
dXJjZUxvYWRTY2hlZHVsZXIuaCIKIAorI2luY2x1ZGUgIkhhbmdEZXRlY3Rpb25EaXNhYmxlci5o
IgogI2luY2x1ZGUgIkxvZ2dpbmcuaCIKICNpbmNsdWRlICJOZXR3b3JrQ29ubmVjdGlvblRvV2Vi
UHJvY2Vzc01lc3NhZ2VzLmgiCiAjaW5jbHVkZSAiTmV0d29ya1Byb2Nlc3NDb25uZWN0aW9uLmgi
CkBAIC0zNSw2ICszNiw3IEBACiAjaW5jbHVkZSAiV2ViRXJyb3JzLmgiCiAjaW5jbHVkZSAiV2Vi
RnJhbWUuaCIKICNpbmNsdWRlICJXZWJGcmFtZUxvYWRlckNsaWVudC5oIgorI2luY2x1ZGUgIldl
YkZyYW1lTmV0d29ya2luZ0NvbnRleHQuaCIKICNpbmNsdWRlICJXZWJQYWdlLmgiCiAjaW5jbHVk
ZSAiV2ViUHJvY2Vzcy5oIgogI2luY2x1ZGUgIldlYlJlc291cmNlTG9hZGVyLmgiCkBAIC00NSw2
ICs0Nyw3IEBACiAjaW5jbHVkZSA8V2ViQ29yZS9GcmFtZS5oPgogI2luY2x1ZGUgPFdlYkNvcmUv
RnJhbWVMb2FkZXIuaD4KICNpbmNsdWRlIDxXZWJDb3JlL05ldHNjYXBlUGx1Z0luU3RyZWFtTG9h
ZGVyLmg+CisjaW5jbHVkZSA8V2ViQ29yZS9QbGF0Zm9ybVN0cmF0ZWdpZXMuaD4KICNpbmNsdWRl
IDxXZWJDb3JlL1JlZmVycmVyUG9saWN5Lmg+CiAjaW5jbHVkZSA8V2ViQ29yZS9SZXNvdXJjZUxv
YWRlci5oPgogI2luY2x1ZGUgPFdlYkNvcmUvU2Vzc2lvbklELmg+CkBAIC02NSw3ICs2OCw3IEBA
IFdlYlJlc291cmNlTG9hZFNjaGVkdWxlcjo6fldlYlJlc291cmNlTG8KIHsKIH0KIAotUmVmUHRy
PFN1YnJlc291cmNlTG9hZGVyPiBXZWJSZXNvdXJjZUxvYWRTY2hlZHVsZXI6OnNjaGVkdWxlU3Vi
cmVzb3VyY2VMb2FkKEZyYW1lKiBmcmFtZSwgQ2FjaGVkUmVzb3VyY2UqIHJlc291cmNlLCBjb25z
dCBSZXNvdXJjZVJlcXVlc3QmIHJlcXVlc3QsIGNvbnN0IFJlc291cmNlTG9hZGVyT3B0aW9ucyYg
b3B0aW9ucykKK1JlZlB0cjxTdWJyZXNvdXJjZUxvYWRlcj4gV2ViUmVzb3VyY2VMb2FkU2NoZWR1
bGVyOjpsb2FkUmVzb3VyY2UoRnJhbWUqIGZyYW1lLCBDYWNoZWRSZXNvdXJjZSogcmVzb3VyY2Us
IGNvbnN0IFJlc291cmNlUmVxdWVzdCYgcmVxdWVzdCwgY29uc3QgUmVzb3VyY2VMb2FkZXJPcHRp
b25zJiBvcHRpb25zKQogewogICAgIFJlZlB0cjxTdWJyZXNvdXJjZUxvYWRlcj4gbG9hZGVyID0g
U3VicmVzb3VyY2VMb2FkZXI6OmNyZWF0ZShmcmFtZSwgcmVzb3VyY2UsIHJlcXVlc3QsIG9wdGlv
bnMpOwogICAgIGlmIChsb2FkZXIpCkBAIC0yNjksMTEgKzI3Miw2IEBAIHZvaWQgV2ViUmVzb3Vy
Y2VMb2FkU2NoZWR1bGVyOjpyZXN1bWVQZW4KICAgICAvLyBOZXR3b3JrIHByb2Nlc3MgZG9lcyBr
ZWVwIHJlcXVlc3RzIGluIHBlbmRpbmcgc3RhdGUuCiB9CiAKLXZvaWQgV2ViUmVzb3VyY2VMb2Fk
U2NoZWR1bGVyOjpzZXRTZXJpYWxMb2FkaW5nRW5hYmxlZChib29sKQotewotICAgIC8vIE5ldHdv
cmsgcHJvY2VzcyBkb2VzIG5vdCByZW9yZGVyIGxvYWRzLgotfQotCiB2b2lkIFdlYlJlc291cmNl
TG9hZFNjaGVkdWxlcjo6bmV0d29ya1Byb2Nlc3NDcmFzaGVkKCkKIHsKICAgICBIYXNoTWFwPHVu
c2lnbmVkIGxvbmcsIFJlZlB0cjxXZWJSZXNvdXJjZUxvYWRlcj4+OjppdGVyYXRvciBlbmQgPSBt
X3dlYlJlc291cmNlTG9hZGVycy5lbmQoKTsKQEAgLTI4Myw0ICsyODEsNTcgQEAgdm9pZCBXZWJS
ZXNvdXJjZUxvYWRTY2hlZHVsZXI6Om5ldHdvcmtQcgogICAgIG1fd2ViUmVzb3VyY2VMb2FkZXJz
LmNsZWFyKCk7CiB9CiAKK3ZvaWQgV2ViUmVzb3VyY2VMb2FkU2NoZWR1bGVyOjpsb2FkUmVzb3Vy
Y2VTeW5jaHJvbm91c2x5KE5ldHdvcmtpbmdDb250ZXh0KiBjb250ZXh0LCB1bnNpZ25lZCBsb25n
IHJlc291cmNlTG9hZElkZW50aWZpZXIsIGNvbnN0IFJlc291cmNlUmVxdWVzdCYgcmVxdWVzdCwg
U3RvcmVkQ3JlZGVudGlhbHMgc3RvcmVkQ3JlZGVudGlhbHMsIENsaWVudENyZWRlbnRpYWxQb2xp
Y3kgY2xpZW50Q3JlZGVudGlhbFBvbGljeSwgUmVzb3VyY2VFcnJvciYgZXJyb3IsIFJlc291cmNl
UmVzcG9uc2UmIHJlc3BvbnNlLCBWZWN0b3I8Y2hhcj4mIGRhdGEpCit7CisgICAgV2ViRnJhbWVO
ZXR3b3JraW5nQ29udGV4dCogd2ViQ29udGV4dCA9IHN0YXRpY19jYXN0PFdlYkZyYW1lTmV0d29y
a2luZ0NvbnRleHQqPihjb250ZXh0KTsKKyAgICAvLyBGSVhNRTogU29tZSBlbnRpdGllcyBpbiBX
ZWJDb3JlIHVzZSBXZWJDb3JlJ3MgIkVtcHR5RnJhbWVMb2FkZXJDbGllbnQiIGluc3RlYWQgb2Yg
aGF2aW5nIGEgcHJvcGVyIFdlYkZyYW1lTG9hZGVyQ2xpZW50LgorICAgIC8vIEVtcHR5RnJhbWVM
b2FkZXJDbGllbnQgc2hvdWxkbid0IGV4aXN0IGFuZCBldmVyeXRoaW5nIHNob3VsZCBiZSB1c2lu
ZyBhIFdlYkZyYW1lTG9hZGVyQ2xpZW50LAorICAgIC8vIGJ1dCBpbiB0aGUgbWVhbnRpbWUgd2Ug
aGF2ZSB0byBtYWtlIHN1cmUgbm90IHRvIG1pcy1jYXN0LgorICAgIFdlYkZyYW1lTG9hZGVyQ2xp
ZW50KiB3ZWJGcmFtZUxvYWRlckNsaWVudCA9IHdlYkNvbnRleHQtPndlYkZyYW1lTG9hZGVyQ2xp
ZW50KCk7CisgICAgV2ViRnJhbWUqIHdlYkZyYW1lID0gd2ViRnJhbWVMb2FkZXJDbGllbnQgPyB3
ZWJGcmFtZUxvYWRlckNsaWVudC0+d2ViRnJhbWUoKSA6IDA7CisgICAgV2ViUGFnZSogd2ViUGFn
ZSA9IHdlYkZyYW1lID8gd2ViRnJhbWUtPnBhZ2UoKSA6IDA7CisKKyAgICBOZXR3b3JrUmVzb3Vy
Y2VMb2FkUGFyYW1ldGVycyBsb2FkUGFyYW1ldGVyczsKKyAgICBsb2FkUGFyYW1ldGVycy5pZGVu
dGlmaWVyID0gcmVzb3VyY2VMb2FkSWRlbnRpZmllcjsKKyAgICBsb2FkUGFyYW1ldGVycy53ZWJQ
YWdlSUQgPSB3ZWJQYWdlID8gd2ViUGFnZS0+cGFnZUlEKCkgOiAwOworICAgIGxvYWRQYXJhbWV0
ZXJzLndlYkZyYW1lSUQgPSB3ZWJGcmFtZSA/IHdlYkZyYW1lLT5mcmFtZUlEKCkgOiAwOworICAg
IGxvYWRQYXJhbWV0ZXJzLnNlc3Npb25JRCA9IHdlYlBhZ2UgPyB3ZWJQYWdlLT5zZXNzaW9uSUQo
KSA6IFNlc3Npb25JRDo6ZGVmYXVsdFNlc3Npb25JRCgpOworICAgIGxvYWRQYXJhbWV0ZXJzLnJl
cXVlc3QgPSByZXF1ZXN0OworICAgIGxvYWRQYXJhbWV0ZXJzLmNvbnRlbnRTbmlmZmluZ1BvbGlj
eSA9IFNuaWZmQ29udGVudDsKKyAgICBsb2FkUGFyYW1ldGVycy5hbGxvd1N0b3JlZENyZWRlbnRp
YWxzID0gc3RvcmVkQ3JlZGVudGlhbHM7CisgICAgbG9hZFBhcmFtZXRlcnMuY2xpZW50Q3JlZGVu
dGlhbFBvbGljeSA9IGNsaWVudENyZWRlbnRpYWxQb2xpY3k7CisgICAgbG9hZFBhcmFtZXRlcnMu
c2hvdWxkQ2xlYXJSZWZlcnJlck9uSFRUUFNUb0hUVFBSZWRpcmVjdCA9IGNvbnRleHQtPnNob3Vs
ZENsZWFyUmVmZXJyZXJPbkhUVFBTVG9IVFRQUmVkaXJlY3QoKTsKKworICAgIGRhdGEucmVzaXpl
KDApOworCisgICAgSGFuZ0RldGVjdGlvbkRpc2FibGVyIGhhbmdEZXRlY3Rpb25EaXNhYmxlcjsK
KworICAgIGlmICghV2ViUHJvY2Vzczo6c2luZ2xldG9uKCkubmV0d29ya0Nvbm5lY3Rpb24oKS0+
Y29ubmVjdGlvbigpLT5zZW5kU3luYyhNZXNzYWdlczo6TmV0d29ya0Nvbm5lY3Rpb25Ub1dlYlBy
b2Nlc3M6OlBlcmZvcm1TeW5jaHJvbm91c0xvYWQobG9hZFBhcmFtZXRlcnMpLCBNZXNzYWdlczo6
TmV0d29ya0Nvbm5lY3Rpb25Ub1dlYlByb2Nlc3M6OlBlcmZvcm1TeW5jaHJvbm91c0xvYWQ6OlJl
cGx5KGVycm9yLCByZXNwb25zZSwgZGF0YSksIDApKSB7CisgICAgICAgIHJlc3BvbnNlID0gUmVz
b3VyY2VSZXNwb25zZSgpOworICAgICAgICBlcnJvciA9IGludGVybmFsRXJyb3IocmVxdWVzdC51
cmwoKSk7CisgICAgfQorfQorCit2b2lkIFdlYlJlc291cmNlTG9hZFNjaGVkdWxlcjo6Y3JlYXRl
UGluZ0hhbmRsZShOZXR3b3JraW5nQ29udGV4dCogbmV0d29ya2luZ0NvbnRleHQsIFJlc291cmNl
UmVxdWVzdCYgcmVxdWVzdCwgYm9vbCBzaG91bGRVc2VDcmVkZW50aWFsU3RvcmFnZSkKK3sKKyAg
ICAvLyBJdCdzIHBvc3NpYmxlIHRoYXQgY2FsbCB0byBjcmVhdGVQaW5nSGFuZGxlIG1pZ2h0IGJl
IG1hZGUgZHVyaW5nIGluaXRpYWwgZW1wdHkgRG9jdW1lbnQgY3JlYXRpb24gYmVmb3JlIGEgTmV0
d29ya2luZ0NvbnRleHQgZXhpc3RzLgorICAgIC8vIEl0IGlzIG5vdCBjbGVhciB0aGF0IHdlIHNo
b3VsZCBzZW5kIHBpbmcgbG9hZHMgZHVyaW5nIHRoYXQgcHJvY2VzcyBhbnl3YXlzLgorICAgIGlm
ICghbmV0d29ya2luZ0NvbnRleHQpCisgICAgICAgIHJldHVybjsKKworICAgIFdlYkZyYW1lTmV0
d29ya2luZ0NvbnRleHQqIHdlYkNvbnRleHQgPSBzdGF0aWNfY2FzdDxXZWJGcmFtZU5ldHdvcmtp
bmdDb250ZXh0Kj4obmV0d29ya2luZ0NvbnRleHQpOworICAgIFdlYkZyYW1lTG9hZGVyQ2xpZW50
KiB3ZWJGcmFtZUxvYWRlckNsaWVudCA9IHdlYkNvbnRleHQtPndlYkZyYW1lTG9hZGVyQ2xpZW50
KCk7CisgICAgV2ViRnJhbWUqIHdlYkZyYW1lID0gd2ViRnJhbWVMb2FkZXJDbGllbnQgPyB3ZWJG
cmFtZUxvYWRlckNsaWVudC0+d2ViRnJhbWUoKSA6IG51bGxwdHI7CisgICAgV2ViUGFnZSogd2Vi
UGFnZSA9IHdlYkZyYW1lID8gd2ViRnJhbWUtPnBhZ2UoKSA6IG51bGxwdHI7CisgICAgCisgICAg
TmV0d29ya1Jlc291cmNlTG9hZFBhcmFtZXRlcnMgbG9hZFBhcmFtZXRlcnM7CisgICAgbG9hZFBh
cmFtZXRlcnMucmVxdWVzdCA9IHJlcXVlc3Q7CisgICAgbG9hZFBhcmFtZXRlcnMuc2Vzc2lvbklE
ID0gd2ViUGFnZSA/IHdlYlBhZ2UtPnNlc3Npb25JRCgpIDogU2Vzc2lvbklEOjpkZWZhdWx0U2Vz
c2lvbklEKCk7CisgICAgbG9hZFBhcmFtZXRlcnMuYWxsb3dTdG9yZWRDcmVkZW50aWFscyA9IHNo
b3VsZFVzZUNyZWRlbnRpYWxTdG9yYWdlID8gQWxsb3dTdG9yZWRDcmVkZW50aWFscyA6IERvTm90
QWxsb3dTdG9yZWRDcmVkZW50aWFsczsKKyAgICBsb2FkUGFyYW1ldGVycy5zaG91bGRDbGVhclJl
ZmVycmVyT25IVFRQU1RvSFRUUFJlZGlyZWN0ID0gbmV0d29ya2luZ0NvbnRleHQtPnNob3VsZENs
ZWFyUmVmZXJyZXJPbkhUVFBTVG9IVFRQUmVkaXJlY3QoKTsKKworICAgIFdlYlByb2Nlc3M6OnNp
bmdsZXRvbigpLm5ldHdvcmtDb25uZWN0aW9uKCktPmNvbm5lY3Rpb24oKS0+c2VuZChNZXNzYWdl
czo6TmV0d29ya0Nvbm5lY3Rpb25Ub1dlYlByb2Nlc3M6OkxvYWRQaW5nKGxvYWRQYXJhbWV0ZXJz
KSwgMCk7Cit9CisKKwogfSAvLyBuYW1lc3BhY2UgV2ViS2l0CkluZGV4OiBTb3VyY2UvV2ViS2l0
Mi9XZWJQcm9jZXNzL05ldHdvcmsvV2ViUmVzb3VyY2VMb2FkU2NoZWR1bGVyLmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9OZXR3b3JrL1dlYlJlc291cmNlTG9hZFNj
aGVkdWxlci5oCShyZXZpc2lvbiAxOTI4ODApCisrKyBTb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNz
L05ldHdvcmsvV2ViUmVzb3VyY2VMb2FkU2NoZWR1bGVyLmgJKHdvcmtpbmcgY29weSkKQEAgLTI3
LDI1ICsyNywyNiBAQAogI2RlZmluZSBXZWJSZXNvdXJjZUxvYWRTY2hlZHVsZXJfaAogCiAjaW5j
bHVkZSAiV2ViUmVzb3VyY2VMb2FkZXIuaCIKLSNpbmNsdWRlIDxXZWJDb3JlL1Jlc291cmNlTG9h
ZFByaW9yaXR5Lmg+Ci0jaW5jbHVkZSA8V2ViQ29yZS9SZXNvdXJjZUxvYWRTY2hlZHVsZXIuaD4K
KyNpbmNsdWRlIDxXZWJDb3JlL0xvYWRlclN0cmF0ZWd5Lmg+CiAjaW5jbHVkZSA8V2ViQ29yZS9S
ZXNvdXJjZUxvYWRlci5oPgorI2luY2x1ZGUgPHd0Zi9IYXNoU2V0Lmg+CiAjaW5jbHVkZSA8d3Rm
L1J1bkxvb3AuaD4KIAogbmFtZXNwYWNlIFdlYktpdCB7CiAKIGNsYXNzIE5ldHdvcmtQcm9jZXNz
Q29ubmVjdGlvbjsKK2NsYXNzIFdlYlJlc291cmNlTG9hZFNjaGVkdWxlcjsKIHR5cGVkZWYgdWlu
dDY0X3QgUmVzb3VyY2VMb2FkSWRlbnRpZmllcjsKIAotY2xhc3MgV2ViUmVzb3VyY2VMb2FkU2No
ZWR1bGVyIDogcHVibGljIFdlYkNvcmU6OlJlc291cmNlTG9hZFNjaGVkdWxlciB7CitjbGFzcyBX
ZWJSZXNvdXJjZUxvYWRTY2hlZHVsZXIgOiBwdWJsaWMgV2ViQ29yZTo6TG9hZGVyU3RyYXRlZ3kg
ewogICAgIFdURl9NQUtFX05PTkNPUFlBQkxFKFdlYlJlc291cmNlTG9hZFNjaGVkdWxlcik7IFdU
Rl9NQUtFX0ZBU1RfQUxMT0NBVEVEOwogcHVibGljOgogICAgIFdlYlJlc291cmNlTG9hZFNjaGVk
dWxlcigpOwogICAgIHZpcnR1YWwgfldlYlJlc291cmNlTG9hZFNjaGVkdWxlcigpOwogICAgIAot
ICAgIHZpcnR1YWwgUmVmUHRyPFdlYkNvcmU6OlN1YnJlc291cmNlTG9hZGVyPiBzY2hlZHVsZVN1
YnJlc291cmNlTG9hZChXZWJDb3JlOjpGcmFtZSosIFdlYkNvcmU6OkNhY2hlZFJlc291cmNlKiwg
Y29uc3QgV2ViQ29yZTo6UmVzb3VyY2VSZXF1ZXN0JiwgY29uc3QgV2ViQ29yZTo6UmVzb3VyY2VM
b2FkZXJPcHRpb25zJikgb3ZlcnJpZGU7Ci0gICAgdmlydHVhbCBSZWZQdHI8V2ViQ29yZTo6TmV0
c2NhcGVQbHVnSW5TdHJlYW1Mb2FkZXI+IHNjaGVkdWxlUGx1Z2luU3RyZWFtTG9hZChXZWJDb3Jl
OjpGcmFtZSosIFdlYkNvcmU6Ok5ldHNjYXBlUGx1Z0luU3RyZWFtTG9hZGVyQ2xpZW50KiwgY29u
c3QgV2ViQ29yZTo6UmVzb3VyY2VSZXF1ZXN0Jikgb3ZlcnJpZGU7Ci0gICAgCisgICAgdmlydHVh
bCBSZWZQdHI8V2ViQ29yZTo6U3VicmVzb3VyY2VMb2FkZXI+IGxvYWRSZXNvdXJjZShXZWJDb3Jl
OjpGcmFtZSosIFdlYkNvcmU6OkNhY2hlZFJlc291cmNlKiwgY29uc3QgV2ViQ29yZTo6UmVzb3Vy
Y2VSZXF1ZXN0JiwgY29uc3QgV2ViQ29yZTo6UmVzb3VyY2VMb2FkZXJPcHRpb25zJikgb3ZlcnJp
ZGU7CisgICAgdmlydHVhbCB2b2lkIGxvYWRSZXNvdXJjZVN5bmNocm9ub3VzbHkoV2ViQ29yZTo6
TmV0d29ya2luZ0NvbnRleHQqLCB1bnNpZ25lZCBsb25nIHJlc291cmNlTG9hZElkZW50aWZpZXIs
IGNvbnN0IFdlYkNvcmU6OlJlc291cmNlUmVxdWVzdCYsIFdlYkNvcmU6OlN0b3JlZENyZWRlbnRp
YWxzLCBXZWJDb3JlOjpDbGllbnRDcmVkZW50aWFsUG9saWN5LCBXZWJDb3JlOjpSZXNvdXJjZUVy
cm9yJiwgV2ViQ29yZTo6UmVzb3VyY2VSZXNwb25zZSYsIFZlY3RvcjxjaGFyPiYgZGF0YSkgb3Zl
cnJpZGU7CisKICAgICB2aXJ0dWFsIHZvaWQgcmVtb3ZlKFdlYkNvcmU6OlJlc291cmNlTG9hZGVy
Kikgb3ZlcnJpZGU7CiAgICAgdmlydHVhbCB2b2lkIHNldERlZmVyc0xvYWRpbmcoV2ViQ29yZTo6
UmVzb3VyY2VMb2FkZXIqLCBib29sKSBvdmVycmlkZTsKICAgICB2aXJ0dWFsIHZvaWQgY3Jvc3NP
cmlnaW5SZWRpcmVjdFJlY2VpdmVkKFdlYkNvcmU6OlJlc291cmNlTG9hZGVyKiwgY29uc3QgV2Vi
Q29yZTo6VVJMJiByZWRpcmVjdFVSTCkgb3ZlcnJpZGU7CkBAIC01NSw5ICs1NiwxMCBAQCBwdWJs
aWM6CiAgICAgdmlydHVhbCB2b2lkIHN1c3BlbmRQZW5kaW5nUmVxdWVzdHMoKSBvdmVycmlkZTsK
ICAgICB2aXJ0dWFsIHZvaWQgcmVzdW1lUGVuZGluZ1JlcXVlc3RzKCkgb3ZlcnJpZGU7CiAKLSAg
ICB2aXJ0dWFsIHZvaWQgc2V0U2VyaWFsTG9hZGluZ0VuYWJsZWQoYm9vbCkgb3ZlcnJpZGU7Cisg
ICAgdmlydHVhbCB2b2lkIGNyZWF0ZVBpbmdIYW5kbGUoV2ViQ29yZTo6TmV0d29ya2luZ0NvbnRl
eHQqLCBXZWJDb3JlOjpSZXNvdXJjZVJlcXVlc3QmLCBib29sIHNob3VsZFVzZUNyZWRlbnRpYWxT
dG9yYWdlKSBvdmVycmlkZTsKIAogICAgIFdlYlJlc291cmNlTG9hZGVyKiB3ZWJSZXNvdXJjZUxv
YWRlckZvcklkZW50aWZpZXIoUmVzb3VyY2VMb2FkSWRlbnRpZmllciBpZGVudGlmaWVyKSBjb25z
dCB7IHJldHVybiBtX3dlYlJlc291cmNlTG9hZGVycy5nZXQoaWRlbnRpZmllcik7IH0KKyAgICBS
ZWZQdHI8V2ViQ29yZTo6TmV0c2NhcGVQbHVnSW5TdHJlYW1Mb2FkZXI+IHNjaGVkdWxlUGx1Z2lu
U3RyZWFtTG9hZChXZWJDb3JlOjpGcmFtZSosIFdlYkNvcmU6Ok5ldHNjYXBlUGx1Z0luU3RyZWFt
TG9hZGVyQ2xpZW50KiwgY29uc3QgV2ViQ29yZTo6UmVzb3VyY2VSZXF1ZXN0Jik7CiAKICAgICB2
b2lkIG5ldHdvcmtQcm9jZXNzQ3Jhc2hlZCgpOwogCkluZGV4OiBTb3VyY2UvV2ViS2l0Mi9XZWJQ
cm9jZXNzL1BsdWdpbnMvUGx1Z2luVmlldy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktp
dDIvV2ViUHJvY2Vzcy9QbHVnaW5zL1BsdWdpblZpZXcuY3BwCShyZXZpc2lvbiAxOTI4ODApCisr
KyBTb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1BsdWdpbnMvUGx1Z2luVmlldy5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTM0LDYgKzM0LDcgQEAKICNpbmNsdWRlICJXZWJQYWdlLmgiCiAjaW5jbHVk
ZSAiV2ViUGFnZVByb3h5TWVzc2FnZXMuaCIKICNpbmNsdWRlICJXZWJQcm9jZXNzLmgiCisjaW5j
bHVkZSAiV2ViUmVzb3VyY2VMb2FkU2NoZWR1bGVyLmgiCiAjaW5jbHVkZSA8V2ViQ29yZS9CaXRt
YXBJbWFnZS5oPgogI2luY2x1ZGUgPFdlYkNvcmUvQ2hyb21lLmg+CiAjaW5jbHVkZSA8V2ViQ29y
ZS9Db29raWVKYXIuaD4KQEAgLTYyLDcgKzYzLDYgQEAKICNpbmNsdWRlIDxXZWJDb3JlL1Byb3Rl
Y3Rpb25TcGFjZS5oPgogI2luY2x1ZGUgPFdlYkNvcmUvUHJveHlTZXJ2ZXIuaD4KICNpbmNsdWRl
IDxXZWJDb3JlL1JlbmRlckVtYmVkZGVkT2JqZWN0Lmg+Ci0jaW5jbHVkZSA8V2ViQ29yZS9SZXNv
dXJjZUxvYWRTY2hlZHVsZXIuaD4KICNpbmNsdWRlIDxXZWJDb3JlL1NjcmlwdENvbnRyb2xsZXIu
aD4KICNpbmNsdWRlIDxXZWJDb3JlL1Njcm9sbFZpZXcuaD4KICNpbmNsdWRlIDxXZWJDb3JlL1Nl
Y3VyaXR5T3JpZ2luLmg+CkBAIC0xNjAsNyArMTYwLDcgQEAgdm9pZCBQbHVnaW5WaWV3OjpTdHJl
YW06OnN0YXJ0KCkKICAgICBGcmFtZSogZnJhbWUgPSBtX3BsdWdpblZpZXctPm1fcGx1Z2luRWxl
bWVudC0+ZG9jdW1lbnQoKS5mcmFtZSgpOwogICAgIEFTU0VSVChmcmFtZSk7CiAKLSAgICBtX2xv
YWRlciA9IHJlc291cmNlTG9hZFNjaGVkdWxlcigpLT5zY2hlZHVsZVBsdWdpblN0cmVhbUxvYWQo
ZnJhbWUsIHRoaXMsIG1fcmVxdWVzdCk7CisgICAgbV9sb2FkZXIgPSBXZWJQcm9jZXNzOjpzaW5n
bGV0b24oKS53ZWJSZXNvdXJjZUxvYWRTY2hlZHVsZXIoKS5zY2hlZHVsZVBsdWdpblN0cmVhbUxv
YWQoZnJhbWUsIHRoaXMsIG1fcmVxdWVzdCk7CiB9CiAKIHZvaWQgUGx1Z2luVmlldzo6U3RyZWFt
OjpjYW5jZWwoKQpJbmRleDogU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJDb3JlU3VwcG9y
dC9XZWJQbGF0Zm9ybVN0cmF0ZWdpZXMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQy
L1dlYlByb2Nlc3MvV2ViQ29yZVN1cHBvcnQvV2ViUGxhdGZvcm1TdHJhdGVnaWVzLmNwcAkocmV2
aXNpb24gMTkyODgwKQorKysgU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJDb3JlU3VwcG9y
dC9XZWJQbGF0Zm9ybVN0cmF0ZWdpZXMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00MCw3ICs0MCw2
IEBACiAjaW5jbHVkZSAiV2ViRXJyb3JzLmgiCiAjaW5jbHVkZSAiV2ViRnJhbWUuaCIKICNpbmNs
dWRlICJXZWJGcmFtZUxvYWRlckNsaWVudC5oIgotI2luY2x1ZGUgIldlYkZyYW1lTmV0d29ya2lu
Z0NvbnRleHQuaCIKICNpbmNsdWRlICJXZWJJREJGYWN0b3J5QmFja2VuZC5oIgogI2luY2x1ZGUg
IldlYlBhZ2UuaCIKICNpbmNsdWRlICJXZWJQYXN0ZWJvYXJkT3ZlcnJpZGVzLmgiCkBAIC05Miw3
ICs5MSw3IEBAIENvb2tpZXNTdHJhdGVneSogV2ViUGxhdGZvcm1TdHJhdGVnaWVzOjoKIAogTG9h
ZGVyU3RyYXRlZ3kqIFdlYlBsYXRmb3JtU3RyYXRlZ2llczo6Y3JlYXRlTG9hZGVyU3RyYXRlZ3ko
KQogewotICAgIHJldHVybiB0aGlzOworICAgIHJldHVybiAmV2ViUHJvY2Vzczo6c2luZ2xldG9u
KCkud2ViUmVzb3VyY2VMb2FkU2NoZWR1bGVyKCk7CiB9CiAKIFBhc3RlYm9hcmRTdHJhdGVneSog
V2ViUGxhdGZvcm1TdHJhdGVnaWVzOjpjcmVhdGVQYXN0ZWJvYXJkU3RyYXRlZ3koKQpAQCAtMTA1
LDYgKzEwNCwxMSBAQCBQbHVnaW5TdHJhdGVneSogV2ViUGxhdGZvcm1TdHJhdGVnaWVzOjpjCiAg
ICAgcmV0dXJuIHRoaXM7CiB9CiAKK0Jsb2JSZWdpc3RyeSogV2ViUGxhdGZvcm1TdHJhdGVnaWVz
OjpjcmVhdGVCbG9iUmVnaXN0cnkoKQoreworICAgIHJldHVybiBuZXcgQmxvYlJlZ2lzdHJ5UHJv
eHk7Cit9CisKIC8vIENvb2tpZXNTdHJhdGVneQogCiBTdHJpbmcgV2ViUGxhdGZvcm1TdHJhdGVn
aWVzOjpjb29raWVzRm9yRE9NKGNvbnN0IE5ldHdvcmtTdG9yYWdlU2Vzc2lvbiYgc2Vzc2lvbiwg
Y29uc3QgVVJMJiBmaXJzdFBhcnR5LCBjb25zdCBVUkwmIHVybCkKQEAgLTE0OCw3MCArMTUyLDYg
QEAgdm9pZCBXZWJQbGF0Zm9ybVN0cmF0ZWdpZXM6OmRlbGV0ZUNvb2tpZQogICAgIFdlYlByb2Nl
c3M6OnNpbmdsZXRvbigpLm5ldHdvcmtDb25uZWN0aW9uKCktPmNvbm5lY3Rpb24oKS0+c2VuZChN
ZXNzYWdlczo6TmV0d29ya0Nvbm5lY3Rpb25Ub1dlYlByb2Nlc3M6OkRlbGV0ZUNvb2tpZShTZXNz
aW9uVHJhY2tlcjo6c2Vzc2lvbklEKHNlc3Npb24pLCB1cmwsIGNvb2tpZU5hbWUpLCAwKTsKIH0K
IAotLy8gTG9hZGVyU3RyYXRlZ3kKLQotUmVzb3VyY2VMb2FkU2NoZWR1bGVyKiBXZWJQbGF0Zm9y
bVN0cmF0ZWdpZXM6OnJlc291cmNlTG9hZFNjaGVkdWxlcigpCi17Ci0gICAgcmV0dXJuICZXZWJQ
cm9jZXNzOjpzaW5nbGV0b24oKS53ZWJSZXNvdXJjZUxvYWRTY2hlZHVsZXIoKTsKLX0KLQotdm9p
ZCBXZWJQbGF0Zm9ybVN0cmF0ZWdpZXM6OmxvYWRSZXNvdXJjZVN5bmNocm9ub3VzbHkoTmV0d29y
a2luZ0NvbnRleHQqIGNvbnRleHQsIHVuc2lnbmVkIGxvbmcgcmVzb3VyY2VMb2FkSWRlbnRpZmll
ciwgY29uc3QgUmVzb3VyY2VSZXF1ZXN0JiByZXF1ZXN0LCBTdG9yZWRDcmVkZW50aWFscyBzdG9y
ZWRDcmVkZW50aWFscywgQ2xpZW50Q3JlZGVudGlhbFBvbGljeSBjbGllbnRDcmVkZW50aWFsUG9s
aWN5LCBSZXNvdXJjZUVycm9yJiBlcnJvciwgUmVzb3VyY2VSZXNwb25zZSYgcmVzcG9uc2UsIFZl
Y3RvcjxjaGFyPiYgZGF0YSkKLXsKLSAgICBXZWJGcmFtZU5ldHdvcmtpbmdDb250ZXh0KiB3ZWJD
b250ZXh0ID0gc3RhdGljX2Nhc3Q8V2ViRnJhbWVOZXR3b3JraW5nQ29udGV4dCo+KGNvbnRleHQp
OwotICAgIC8vIEZJWE1FOiBTb21lIGVudGl0aWVzIGluIFdlYkNvcmUgdXNlIFdlYkNvcmUncyAi
RW1wdHlGcmFtZUxvYWRlckNsaWVudCIgaW5zdGVhZCBvZiBoYXZpbmcgYSBwcm9wZXIgV2ViRnJh
bWVMb2FkZXJDbGllbnQuCi0gICAgLy8gRW1wdHlGcmFtZUxvYWRlckNsaWVudCBzaG91bGRuJ3Qg
ZXhpc3QgYW5kIGV2ZXJ5dGhpbmcgc2hvdWxkIGJlIHVzaW5nIGEgV2ViRnJhbWVMb2FkZXJDbGll
bnQsCi0gICAgLy8gYnV0IGluIHRoZSBtZWFudGltZSB3ZSBoYXZlIHRvIG1ha2Ugc3VyZSBub3Qg
dG8gbWlzLWNhc3QuCi0gICAgV2ViRnJhbWVMb2FkZXJDbGllbnQqIHdlYkZyYW1lTG9hZGVyQ2xp
ZW50ID0gd2ViQ29udGV4dC0+d2ViRnJhbWVMb2FkZXJDbGllbnQoKTsKLSAgICBXZWJGcmFtZSog
d2ViRnJhbWUgPSB3ZWJGcmFtZUxvYWRlckNsaWVudCA/IHdlYkZyYW1lTG9hZGVyQ2xpZW50LT53
ZWJGcmFtZSgpIDogMDsKLSAgICBXZWJQYWdlKiB3ZWJQYWdlID0gd2ViRnJhbWUgPyB3ZWJGcmFt
ZS0+cGFnZSgpIDogMDsKLQotICAgIE5ldHdvcmtSZXNvdXJjZUxvYWRQYXJhbWV0ZXJzIGxvYWRQ
YXJhbWV0ZXJzOwotICAgIGxvYWRQYXJhbWV0ZXJzLmlkZW50aWZpZXIgPSByZXNvdXJjZUxvYWRJ
ZGVudGlmaWVyOwotICAgIGxvYWRQYXJhbWV0ZXJzLndlYlBhZ2VJRCA9IHdlYlBhZ2UgPyB3ZWJQ
YWdlLT5wYWdlSUQoKSA6IDA7Ci0gICAgbG9hZFBhcmFtZXRlcnMud2ViRnJhbWVJRCA9IHdlYkZy
YW1lID8gd2ViRnJhbWUtPmZyYW1lSUQoKSA6IDA7Ci0gICAgbG9hZFBhcmFtZXRlcnMuc2Vzc2lv
bklEID0gd2ViUGFnZSA/IHdlYlBhZ2UtPnNlc3Npb25JRCgpIDogU2Vzc2lvbklEOjpkZWZhdWx0
U2Vzc2lvbklEKCk7Ci0gICAgbG9hZFBhcmFtZXRlcnMucmVxdWVzdCA9IHJlcXVlc3Q7Ci0gICAg
bG9hZFBhcmFtZXRlcnMuY29udGVudFNuaWZmaW5nUG9saWN5ID0gU25pZmZDb250ZW50OwotICAg
IGxvYWRQYXJhbWV0ZXJzLmFsbG93U3RvcmVkQ3JlZGVudGlhbHMgPSBzdG9yZWRDcmVkZW50aWFs
czsKLSAgICBsb2FkUGFyYW1ldGVycy5jbGllbnRDcmVkZW50aWFsUG9saWN5ID0gY2xpZW50Q3Jl
ZGVudGlhbFBvbGljeTsKLSAgICBsb2FkUGFyYW1ldGVycy5zaG91bGRDbGVhclJlZmVycmVyT25I
VFRQU1RvSFRUUFJlZGlyZWN0ID0gY29udGV4dC0+c2hvdWxkQ2xlYXJSZWZlcnJlck9uSFRUUFNU
b0hUVFBSZWRpcmVjdCgpOwotCi0gICAgZGF0YS5yZXNpemUoMCk7Ci0KLSAgICBIYW5nRGV0ZWN0
aW9uRGlzYWJsZXIgaGFuZ0RldGVjdGlvbkRpc2FibGVyOwotCi0gICAgaWYgKCFXZWJQcm9jZXNz
OjpzaW5nbGV0b24oKS5uZXR3b3JrQ29ubmVjdGlvbigpLT5jb25uZWN0aW9uKCktPnNlbmRTeW5j
KE1lc3NhZ2VzOjpOZXR3b3JrQ29ubmVjdGlvblRvV2ViUHJvY2Vzczo6UGVyZm9ybVN5bmNocm9u
b3VzTG9hZChsb2FkUGFyYW1ldGVycyksIE1lc3NhZ2VzOjpOZXR3b3JrQ29ubmVjdGlvblRvV2Vi
UHJvY2Vzczo6UGVyZm9ybVN5bmNocm9ub3VzTG9hZDo6UmVwbHkoZXJyb3IsIHJlc3BvbnNlLCBk
YXRhKSwgMCkpIHsKLSAgICAgICAgcmVzcG9uc2UgPSBSZXNvdXJjZVJlc3BvbnNlKCk7Ci0gICAg
ICAgIGVycm9yID0gaW50ZXJuYWxFcnJvcihyZXF1ZXN0LnVybCgpKTsKLSAgICB9Ci19Ci0KLXZv
aWQgV2ViUGxhdGZvcm1TdHJhdGVnaWVzOjpjcmVhdGVQaW5nSGFuZGxlKE5ldHdvcmtpbmdDb250
ZXh0KiBuZXR3b3JraW5nQ29udGV4dCwgUmVzb3VyY2VSZXF1ZXN0JiByZXF1ZXN0LCBib29sIHNo
b3VsZFVzZUNyZWRlbnRpYWxTdG9yYWdlKQotewotICAgIC8vIEl0J3MgcG9zc2libGUgdGhhdCBj
YWxsIHRvIGNyZWF0ZVBpbmdIYW5kbGUgbWlnaHQgYmUgbWFkZSBkdXJpbmcgaW5pdGlhbCBlbXB0
eSBEb2N1bWVudCBjcmVhdGlvbiBiZWZvcmUgYSBOZXR3b3JraW5nQ29udGV4dCBleGlzdHMuCi0g
ICAgLy8gSXQgaXMgbm90IGNsZWFyIHRoYXQgd2Ugc2hvdWxkIHNlbmQgcGluZyBsb2FkcyBkdXJp
bmcgdGhhdCBwcm9jZXNzIGFueXdheXMuCi0gICAgaWYgKCFuZXR3b3JraW5nQ29udGV4dCkKLSAg
ICAgICAgcmV0dXJuOwotCi0gICAgV2ViRnJhbWVOZXR3b3JraW5nQ29udGV4dCogd2ViQ29udGV4
dCA9IHN0YXRpY19jYXN0PFdlYkZyYW1lTmV0d29ya2luZ0NvbnRleHQqPihuZXR3b3JraW5nQ29u
dGV4dCk7Ci0gICAgV2ViRnJhbWVMb2FkZXJDbGllbnQqIHdlYkZyYW1lTG9hZGVyQ2xpZW50ID0g
d2ViQ29udGV4dC0+d2ViRnJhbWVMb2FkZXJDbGllbnQoKTsKLSAgICBXZWJGcmFtZSogd2ViRnJh
bWUgPSB3ZWJGcmFtZUxvYWRlckNsaWVudCA/IHdlYkZyYW1lTG9hZGVyQ2xpZW50LT53ZWJGcmFt
ZSgpIDogbnVsbHB0cjsKLSAgICBXZWJQYWdlKiB3ZWJQYWdlID0gd2ViRnJhbWUgPyB3ZWJGcmFt
ZS0+cGFnZSgpIDogbnVsbHB0cjsKLSAgICAKLSAgICBOZXR3b3JrUmVzb3VyY2VMb2FkUGFyYW1l
dGVycyBsb2FkUGFyYW1ldGVyczsKLSAgICBsb2FkUGFyYW1ldGVycy5yZXF1ZXN0ID0gcmVxdWVz
dDsKLSAgICBsb2FkUGFyYW1ldGVycy5zZXNzaW9uSUQgPSB3ZWJQYWdlID8gd2ViUGFnZS0+c2Vz
c2lvbklEKCkgOiBTZXNzaW9uSUQ6OmRlZmF1bHRTZXNzaW9uSUQoKTsKLSAgICBsb2FkUGFyYW1l
dGVycy5hbGxvd1N0b3JlZENyZWRlbnRpYWxzID0gc2hvdWxkVXNlQ3JlZGVudGlhbFN0b3JhZ2Ug
PyBBbGxvd1N0b3JlZENyZWRlbnRpYWxzIDogRG9Ob3RBbGxvd1N0b3JlZENyZWRlbnRpYWxzOwot
ICAgIGxvYWRQYXJhbWV0ZXJzLnNob3VsZENsZWFyUmVmZXJyZXJPbkhUVFBTVG9IVFRQUmVkaXJl
Y3QgPSBuZXR3b3JraW5nQ29udGV4dC0+c2hvdWxkQ2xlYXJSZWZlcnJlck9uSFRUUFNUb0hUVFBS
ZWRpcmVjdCgpOwotCi0gICAgV2ViUHJvY2Vzczo6c2luZ2xldG9uKCkubmV0d29ya0Nvbm5lY3Rp
b24oKS0+Y29ubmVjdGlvbigpLT5zZW5kKE1lc3NhZ2VzOjpOZXR3b3JrQ29ubmVjdGlvblRvV2Vi
UHJvY2Vzczo6TG9hZFBpbmcobG9hZFBhcmFtZXRlcnMpLCAwKTsKLX0KLQotQmxvYlJlZ2lzdHJ5
KiBXZWJQbGF0Zm9ybVN0cmF0ZWdpZXM6OmNyZWF0ZUJsb2JSZWdpc3RyeSgpCi17Ci0gICAgcmV0
dXJuIG5ldyBCbG9iUmVnaXN0cnlQcm94eTsKLX0KLQogLy8gUGx1Z2luU3RyYXRlZ3kKIAogdm9p
ZCBXZWJQbGF0Zm9ybVN0cmF0ZWdpZXM6OnJlZnJlc2hQbHVnaW5zKCkKSW5kZXg6IFNvdXJjZS9X
ZWJLaXQyL1dlYlByb2Nlc3MvV2ViQ29yZVN1cHBvcnQvV2ViUGxhdGZvcm1TdHJhdGVnaWVzLmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJDb3JlU3VwcG9ydC9X
ZWJQbGF0Zm9ybVN0cmF0ZWdpZXMuaAkocmV2aXNpb24gMTkyODgwKQorKysgU291cmNlL1dlYktp
dDIvV2ViUHJvY2Vzcy9XZWJDb3JlU3VwcG9ydC9XZWJQbGF0Zm9ybVN0cmF0ZWdpZXMuaAkod29y
a2luZyBjb3B5KQpAQCAtMzYsNyArMzYsNyBAQAogCiBuYW1lc3BhY2UgV2ViS2l0IHsKIAotY2xh
c3MgV2ViUGxhdGZvcm1TdHJhdGVnaWVzIDogcHVibGljIFdlYkNvcmU6OlBsYXRmb3JtU3RyYXRl
Z2llcywgcHJpdmF0ZSBXZWJDb3JlOjpDb29raWVzU3RyYXRlZ3ksIHByaXZhdGUgV2ViQ29yZTo6
TG9hZGVyU3RyYXRlZ3ksIHByaXZhdGUgV2ViQ29yZTo6UGFzdGVib2FyZFN0cmF0ZWd5LCBwcml2
YXRlIFdlYkNvcmU6OlBsdWdpblN0cmF0ZWd5IHsKK2NsYXNzIFdlYlBsYXRmb3JtU3RyYXRlZ2ll
cyA6IHB1YmxpYyBXZWJDb3JlOjpQbGF0Zm9ybVN0cmF0ZWdpZXMsIHByaXZhdGUgV2ViQ29yZTo6
Q29va2llc1N0cmF0ZWd5LCBwcml2YXRlIFdlYkNvcmU6OlBhc3RlYm9hcmRTdHJhdGVneSwgcHJp
dmF0ZSBXZWJDb3JlOjpQbHVnaW5TdHJhdGVneSB7CiAgICAgZnJpZW5kIGNsYXNzIE5ldmVyRGVz
dHJveWVkPFdlYlBsYXRmb3JtU3RyYXRlZ2llcz47CiBwdWJsaWM6CiAgICAgc3RhdGljIHZvaWQg
aW5pdGlhbGl6ZSgpOwpAQCAtNDksNiArNDksNyBAQCBwcml2YXRlOgogICAgIHZpcnR1YWwgV2Vi
Q29yZTo6TG9hZGVyU3RyYXRlZ3kqIGNyZWF0ZUxvYWRlclN0cmF0ZWd5KCkgb3ZlcnJpZGU7CiAg
ICAgdmlydHVhbCBXZWJDb3JlOjpQYXN0ZWJvYXJkU3RyYXRlZ3kqIGNyZWF0ZVBhc3RlYm9hcmRT
dHJhdGVneSgpIG92ZXJyaWRlOwogICAgIHZpcnR1YWwgV2ViQ29yZTo6UGx1Z2luU3RyYXRlZ3kq
IGNyZWF0ZVBsdWdpblN0cmF0ZWd5KCkgb3ZlcnJpZGU7CisgICAgdmlydHVhbCBXZWJDb3JlOjpC
bG9iUmVnaXN0cnkqIGNyZWF0ZUJsb2JSZWdpc3RyeSgpIG92ZXJyaWRlOwogCiAgICAgLy8gV2Vi
Q29yZTo6Q29va2llc1N0cmF0ZWd5CiAgICAgdmlydHVhbCBTdHJpbmcgY29va2llc0ZvckRPTShj
b25zdCBXZWJDb3JlOjpOZXR3b3JrU3RvcmFnZVNlc3Npb24mLCBjb25zdCBXZWJDb3JlOjpVUkwm
IGZpcnN0UGFydHksIGNvbnN0IFdlYkNvcmU6OlVSTCYpIG92ZXJyaWRlOwpAQCAtNTgsMTIgKzU5
LDYgQEAgcHJpdmF0ZToKICAgICB2aXJ0dWFsIGJvb2wgZ2V0UmF3Q29va2llcyhjb25zdCBXZWJD
b3JlOjpOZXR3b3JrU3RvcmFnZVNlc3Npb24mLCBjb25zdCBXZWJDb3JlOjpVUkwmIGZpcnN0UGFy
dHksIGNvbnN0IFdlYkNvcmU6OlVSTCYsIFZlY3RvcjxXZWJDb3JlOjpDb29raWU+Jikgb3ZlcnJp
ZGU7CiAgICAgdmlydHVhbCB2b2lkIGRlbGV0ZUNvb2tpZShjb25zdCBXZWJDb3JlOjpOZXR3b3Jr
U3RvcmFnZVNlc3Npb24mLCBjb25zdCBXZWJDb3JlOjpVUkwmLCBjb25zdCBTdHJpbmcmKSBvdmVy
cmlkZTsKIAotICAgIC8vIFdlYkNvcmU6OkxvYWRlclN0cmF0ZWd5Ci0gICAgdmlydHVhbCBXZWJD
b3JlOjpSZXNvdXJjZUxvYWRTY2hlZHVsZXIqIHJlc291cmNlTG9hZFNjaGVkdWxlcigpIG92ZXJy
aWRlOwotICAgIHZpcnR1YWwgdm9pZCBsb2FkUmVzb3VyY2VTeW5jaHJvbm91c2x5KFdlYkNvcmU6
Ok5ldHdvcmtpbmdDb250ZXh0KiwgdW5zaWduZWQgbG9uZyByZXNvdXJjZUxvYWRJZGVudGlmaWVy
LCBjb25zdCBXZWJDb3JlOjpSZXNvdXJjZVJlcXVlc3QmLCBXZWJDb3JlOjpTdG9yZWRDcmVkZW50
aWFscywgV2ViQ29yZTo6Q2xpZW50Q3JlZGVudGlhbFBvbGljeSwgV2ViQ29yZTo6UmVzb3VyY2VF
cnJvciYsIFdlYkNvcmU6OlJlc291cmNlUmVzcG9uc2UmLCBWZWN0b3I8Y2hhcj4mIGRhdGEpIG92
ZXJyaWRlOwotICAgIHZpcnR1YWwgV2ViQ29yZTo6QmxvYlJlZ2lzdHJ5KiBjcmVhdGVCbG9iUmVn
aXN0cnkoKSBvdmVycmlkZTsKLSAgICB2aXJ0dWFsIHZvaWQgY3JlYXRlUGluZ0hhbmRsZShXZWJD
b3JlOjpOZXR3b3JraW5nQ29udGV4dCosIFdlYkNvcmU6OlJlc291cmNlUmVxdWVzdCYsIGJvb2wg
c2hvdWxkVXNlQ3JlZGVudGlhbFN0b3JhZ2UpIG92ZXJyaWRlOwotCiAgICAgLy8gV2ViQ29yZTo6
UGx1Z2luU3RyYXRlZ3kKICAgICB2aXJ0dWFsIHZvaWQgcmVmcmVzaFBsdWdpbnMoKSBvdmVycmlk
ZTsKICAgICB2aXJ0dWFsIHZvaWQgZ2V0UGx1Z2luSW5mbyhjb25zdCBXZWJDb3JlOjpQYWdlKiwg
VmVjdG9yPFdlYkNvcmU6OlBsdWdpbkluZm8+Jikgb3ZlcnJpZGU7CkluZGV4OiBTb3VyY2UvV2Vi
S2l0L0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L0NoYW5nZUxvZwkocmV2
aXNpb24gMTkyOTQzKQorKysgU291cmNlL1dlYktpdC9DaGFuZ2VMb2cJKHdvcmtpbmcgY29weSkK
QEAgLTEsMyArMSw3MiBAQAorMjAxNS0xMi0wMiAgQW50dGkgS29pdmlzdG8gIDxhbnR0aUBhcHBs
ZS5jb20+CisKKyAgICAgICAgTW92ZSBSZXNvdXJjZUxvYWRTY2hlZHVsZXIgdG8gV2ViS2l0MQor
ICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTUxNzQzCisK
KyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgKiBXZWJDb3Jl
U3VwcG9ydC9XZWJSZXNvdXJjZUxvYWRTY2hlZHVsZXIuY3BwOiBDb3BpZWQgZnJvbSBTb3VyY2Uv
V2ViQ29yZS9sb2FkZXIvUmVzb3VyY2VMb2FkU2NoZWR1bGVyLmNwcC4KKyAgICAgICAgKHdlYlJl
c291cmNlTG9hZFNjaGVkdWxlcik6CisgICAgICAgIChXZWJSZXNvdXJjZUxvYWRTY2hlZHVsZXI6
Omhvc3RGb3JVUkwpOgorICAgICAgICAoV2ViUmVzb3VyY2VMb2FkU2NoZWR1bGVyOjpXZWJSZXNv
dXJjZUxvYWRTY2hlZHVsZXIpOgorICAgICAgICAoV2ViUmVzb3VyY2VMb2FkU2NoZWR1bGVyOjp+
V2ViUmVzb3VyY2VMb2FkU2NoZWR1bGVyKToKKyAgICAgICAgKFdlYlJlc291cmNlTG9hZFNjaGVk
dWxlcjo6c2NoZWR1bGVTdWJyZXNvdXJjZUxvYWQpOgorICAgICAgICAoV2ViUmVzb3VyY2VMb2Fk
U2NoZWR1bGVyOjpsb2FkUmVzb3VyY2VTeW5jaHJvbm91c2x5KToKKyAgICAgICAgKFdlYlJlc291
cmNlTG9hZFNjaGVkdWxlcjo6c2NoZWR1bGVQbHVnaW5TdHJlYW1Mb2FkKToKKyAgICAgICAgKFdl
YlJlc291cmNlTG9hZFNjaGVkdWxlcjo6c2NoZWR1bGVMb2FkKToKKyAgICAgICAgKFdlYlJlc291
cmNlTG9hZFNjaGVkdWxlcjo6cmVtb3ZlKToKKyAgICAgICAgKFdlYlJlc291cmNlTG9hZFNjaGVk
dWxlcjo6c2V0RGVmZXJzTG9hZGluZyk6CisgICAgICAgIChXZWJSZXNvdXJjZUxvYWRTY2hlZHVs
ZXI6OmNyb3NzT3JpZ2luUmVkaXJlY3RSZWNlaXZlZCk6CisgICAgICAgIChXZWJSZXNvdXJjZUxv
YWRTY2hlZHVsZXI6OnNlcnZlUGVuZGluZ1JlcXVlc3RzKToKKyAgICAgICAgKFdlYlJlc291cmNl
TG9hZFNjaGVkdWxlcjo6c3VzcGVuZFBlbmRpbmdSZXF1ZXN0cyk6CisgICAgICAgIChXZWJSZXNv
dXJjZUxvYWRTY2hlZHVsZXI6OnJlc3VtZVBlbmRpbmdSZXF1ZXN0cyk6CisgICAgICAgIChXZWJS
ZXNvdXJjZUxvYWRTY2hlZHVsZXI6OnNjaGVkdWxlU2VydmVQZW5kaW5nUmVxdWVzdHMpOgorICAg
ICAgICAoV2ViUmVzb3VyY2VMb2FkU2NoZWR1bGVyOjpyZXF1ZXN0VGltZXJGaXJlZCk6CisgICAg
ICAgIChXZWJSZXNvdXJjZUxvYWRTY2hlZHVsZXI6Okhvc3RJbmZvcm1hdGlvbjo6SG9zdEluZm9y
bWF0aW9uKToKKyAgICAgICAgKFdlYlJlc291cmNlTG9hZFNjaGVkdWxlcjo6SG9zdEluZm9ybWF0
aW9uOjp+SG9zdEluZm9ybWF0aW9uKToKKyAgICAgICAgKFdlYlJlc291cmNlTG9hZFNjaGVkdWxl
cjo6SG9zdEluZm9ybWF0aW9uOjpwcmlvcml0eVRvSW5kZXgpOgorICAgICAgICAoV2ViUmVzb3Vy
Y2VMb2FkU2NoZWR1bGVyOjpIb3N0SW5mb3JtYXRpb246OnNjaGVkdWxlKToKKyAgICAgICAgKFdl
YlJlc291cmNlTG9hZFNjaGVkdWxlcjo6SG9zdEluZm9ybWF0aW9uOjphZGRMb2FkSW5Qcm9ncmVz
cyk6CisgICAgICAgIChXZWJSZXNvdXJjZUxvYWRTY2hlZHVsZXI6Okhvc3RJbmZvcm1hdGlvbjo6
cmVtb3ZlKToKKyAgICAgICAgKFdlYlJlc291cmNlTG9hZFNjaGVkdWxlcjo6SG9zdEluZm9ybWF0
aW9uOjpoYXNSZXF1ZXN0cyk6CisgICAgICAgIChXZWJSZXNvdXJjZUxvYWRTY2hlZHVsZXI6Okhv
c3RJbmZvcm1hdGlvbjo6bGltaXRSZXF1ZXN0cyk6CisgICAgICAgIChXZWJSZXNvdXJjZUxvYWRT
Y2hlZHVsZXI6OmNyZWF0ZVBpbmdIYW5kbGUpOgorICAgICAgICAoV2ViQ29yZTo6UmVzb3VyY2VM
b2FkU2NoZWR1bGVyOjpob3N0Rm9yVVJMKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OnJl
c291cmNlTG9hZFNjaGVkdWxlcik6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpSZXNvdXJj
ZUxvYWRTY2hlZHVsZXI6OlJlc291cmNlTG9hZFNjaGVkdWxlcik6IERlbGV0ZWQuCisgICAgICAg
IChXZWJDb3JlOjpSZXNvdXJjZUxvYWRTY2hlZHVsZXI6On5SZXNvdXJjZUxvYWRTY2hlZHVsZXIp
OiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6UmVzb3VyY2VMb2FkU2NoZWR1bGVyOjpzY2hl
ZHVsZVN1YnJlc291cmNlTG9hZCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpSZXNvdXJj
ZUxvYWRTY2hlZHVsZXI6OnNjaGVkdWxlUGx1Z2luU3RyZWFtTG9hZCk6IERlbGV0ZWQuCisgICAg
ICAgIChXZWJDb3JlOjpSZXNvdXJjZUxvYWRTY2hlZHVsZXI6OnNjaGVkdWxlTG9hZCk6IERlbGV0
ZWQuCisgICAgICAgIChXZWJDb3JlOjpSZXNvdXJjZUxvYWRTY2hlZHVsZXI6OnJlbW92ZSk6IERl
bGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpSZXNvdXJjZUxvYWRTY2hlZHVsZXI6OnNldERlZmVy
c0xvYWRpbmcpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6UmVzb3VyY2VMb2FkU2NoZWR1
bGVyOjpjcm9zc09yaWdpblJlZGlyZWN0UmVjZWl2ZWQpOiBEZWxldGVkLgorICAgICAgICAoV2Vi
Q29yZTo6UmVzb3VyY2VMb2FkU2NoZWR1bGVyOjpzZXJ2ZVBlbmRpbmdSZXF1ZXN0cyk6IERlbGV0
ZWQuCisgICAgICAgIChXZWJDb3JlOjpSZXNvdXJjZUxvYWRTY2hlZHVsZXI6OnN1c3BlbmRQZW5k
aW5nUmVxdWVzdHMpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6UmVzb3VyY2VMb2FkU2No
ZWR1bGVyOjpyZXN1bWVQZW5kaW5nUmVxdWVzdHMpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29y
ZTo6UmVzb3VyY2VMb2FkU2NoZWR1bGVyOjpzY2hlZHVsZVNlcnZlUGVuZGluZ1JlcXVlc3RzKTog
RGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OlJlc291cmNlTG9hZFNjaGVkdWxlcjo6cmVxdWVz
dFRpbWVyRmlyZWQpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6UmVzb3VyY2VMb2FkU2No
ZWR1bGVyOjpIb3N0SW5mb3JtYXRpb246Okhvc3RJbmZvcm1hdGlvbik6IERlbGV0ZWQuCisgICAg
ICAgIChXZWJDb3JlOjpSZXNvdXJjZUxvYWRTY2hlZHVsZXI6Okhvc3RJbmZvcm1hdGlvbjo6fkhv
c3RJbmZvcm1hdGlvbik6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpSZXNvdXJjZUxvYWRT
Y2hlZHVsZXI6Okhvc3RJbmZvcm1hdGlvbjo6cHJpb3JpdHlUb0luZGV4KTogRGVsZXRlZC4KKyAg
ICAgICAgKFdlYkNvcmU6OlJlc291cmNlTG9hZFNjaGVkdWxlcjo6SG9zdEluZm9ybWF0aW9uOjpz
Y2hlZHVsZSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpSZXNvdXJjZUxvYWRTY2hlZHVs
ZXI6Okhvc3RJbmZvcm1hdGlvbjo6YWRkTG9hZEluUHJvZ3Jlc3MpOiBEZWxldGVkLgorICAgICAg
ICAoV2ViQ29yZTo6UmVzb3VyY2VMb2FkU2NoZWR1bGVyOjpIb3N0SW5mb3JtYXRpb246OnJlbW92
ZSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpSZXNvdXJjZUxvYWRTY2hlZHVsZXI6Okhv
c3RJbmZvcm1hdGlvbjo6aGFzUmVxdWVzdHMpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6
UmVzb3VyY2VMb2FkU2NoZWR1bGVyOjpIb3N0SW5mb3JtYXRpb246OmxpbWl0UmVxdWVzdHMpOiBE
ZWxldGVkLgorICAgICAgICAqIFdlYkNvcmVTdXBwb3J0L1dlYlJlc291cmNlTG9hZFNjaGVkdWxl
ci5oOiBDb3BpZWQgZnJvbSBTb3VyY2UvV2ViQ29yZS9sb2FkZXIvUmVzb3VyY2VMb2FkU2NoZWR1
bGVyLmguCisgICAgICAgIChXZWJSZXNvdXJjZUxvYWRTY2hlZHVsZXI6OmlzU2VyaWFsTG9hZGlu
Z0VuYWJsZWQpOgorICAgICAgICAoV2ViUmVzb3VyY2VMb2FkU2NoZWR1bGVyOjpzZXRTZXJpYWxM
b2FkaW5nRW5hYmxlZCk6CisgICAgICAgIChXZWJSZXNvdXJjZUxvYWRTY2hlZHVsZXI6Okhvc3RJ
bmZvcm1hdGlvbjo6bmFtZSk6CisgICAgICAgIChXZWJSZXNvdXJjZUxvYWRTY2hlZHVsZXI6Okhv
c3RJbmZvcm1hdGlvbjo6cmVxdWVzdHNQZW5kaW5nKToKKyAgICAgICAgKFdlYkNvcmU6OlJlc291
cmNlTG9hZFNjaGVkdWxlcjo6aXNTZXJpYWxMb2FkaW5nRW5hYmxlZCk6IERlbGV0ZWQuCisgICAg
ICAgIChXZWJDb3JlOjpSZXNvdXJjZUxvYWRTY2hlZHVsZXI6OnNldFNlcmlhbExvYWRpbmdFbmFi
bGVkKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OlJlc291cmNlTG9hZFNjaGVkdWxlcjo6
U3VzcGVuZGVyOjpTdXNwZW5kZXIpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6UmVzb3Vy
Y2VMb2FkU2NoZWR1bGVyOjpTdXNwZW5kZXI6On5TdXNwZW5kZXIpOiBEZWxldGVkLgorICAgICAg
ICAoV2ViQ29yZTo6UmVzb3VyY2VMb2FkU2NoZWR1bGVyOjpIb3N0SW5mb3JtYXRpb246Om5hbWUp
OiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6UmVzb3VyY2VMb2FkU2NoZWR1bGVyOjpIb3N0
SW5mb3JtYXRpb246OnJlcXVlc3RzUGVuZGluZyk6IERlbGV0ZWQuCisgICAgICAgICogV2ViS2l0
Lnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2o6CisKIDIwMTUtMTAtMjkgIEFsZXggQ2hyaXN0ZW5z
ZW4gIDxhY2hyaXN0ZW5zZW5Ad2Via2l0Lm9yZz4KIAogICAgICAgICBNYWtlIFdlYkNvcmUgYSBm
cmFtZXdvcmsgaW4gTWFjIENNYWtlIGJ1aWxkCkluZGV4OiBTb3VyY2UvV2ViS2l0L1dlYkNvcmVT
dXBwb3J0L1dlYlJlc291cmNlTG9hZFNjaGVkdWxlci5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1dlYktpdC9XZWJDb3JlU3VwcG9ydC9XZWJSZXNvdXJjZUxvYWRTY2hlZHVsZXIuY3BwCShyZXZp
c2lvbiAxOTI4ODApCShmcm9tIFNvdXJjZS9XZWJDb3JlL2xvYWRlci9SZXNvdXJjZUxvYWRTY2hl
ZHVsZXIuY3BwOjE5Mjg4MCkKKysrIFNvdXJjZS9XZWJLaXQvV2ViQ29yZVN1cHBvcnQvV2ViUmVz
b3VyY2VMb2FkU2NoZWR1bGVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDM5MiBAQAor
LyoKKyAgICBDb3B5cmlnaHQgKEMpIDE5OTggTGFycyBLbm9sbCAoa25vbGxAbXBpLWhkLm1wZy5k
ZSkKKyAgICBDb3B5cmlnaHQgKEMpIDIwMDEgRGlyayBNdWVsbGVyIChtdWVsbGVyQGtkZS5vcmcp
CisgICAgQ29weXJpZ2h0IChDKSAyMDAyIFdhbGRvIEJhc3RpYW4gKGJhc3RpYW5Aa2RlLm9yZykK
KyAgICBDb3B5cmlnaHQgKEMpIDIwMDYgU2FtdWVsIFdlaW5pZyAoc2FtLndlaW5pZ0BnbWFpbC5j
b20pCisgICAgQ29weXJpZ2h0IChDKSAyMDA0LCAyMDA1LCAyMDA2LCAyMDA3LCAyMDA4IEFwcGxl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAgICBDb3B5cmlnaHQgKEMpIDIwMTAgR29vZ2xl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKworICAgIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNv
ZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAgICBtb2RpZnkgaXQgdW5k
ZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworICAgIExpY2Vu
c2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgor
ICAgIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0
ZXIgdmVyc2lvbi4KKworICAgIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9w
ZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICAgIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsg
d2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgICAgTUVSQ0hBTlRBQklMSVRZ
IG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAgICBM
aWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKworICAgIFlv
dSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwg
UHVibGljIExpY2Vuc2UKKyAgICBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxl
IENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bworICAgIHRoZSBGcmVlIFNvZnR3YXJlIEZv
dW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCisgICAgQm9z
dG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2lu
Y2x1ZGUgIlJlc291cmNlTG9hZFNjaGVkdWxlci5oIgorCisjaW5jbHVkZSAiRG9jdW1lbnQuaCIK
KyNpbmNsdWRlICJEb2N1bWVudExvYWRlci5oIgorI2luY2x1ZGUgIkZyYW1lLmgiCisjaW5jbHVk
ZSAiRnJhbWVMb2FkZXIuaCIKKyNpbmNsdWRlICJMb2FkZXJTdHJhdGVneS5oIgorI2luY2x1ZGUg
IkxvZ2dpbmcuaCIKKyNpbmNsdWRlICJOZXRzY2FwZVBsdWdJblN0cmVhbUxvYWRlci5oIgorI2lu
Y2x1ZGUgIlBsYXRmb3JtU3RyYXRlZ2llcy5oIgorI2luY2x1ZGUgIlJlc291cmNlTG9hZGVyLmgi
CisjaW5jbHVkZSAiUmVzb3VyY2VSZXF1ZXN0LmgiCisjaW5jbHVkZSAiU3VicmVzb3VyY2VMb2Fk
ZXIuaCIKKyNpbmNsdWRlICJVUkwuaCIKKyNpbmNsdWRlIDx3dGYvTWFpblRocmVhZC5oPgorI2lu
Y2x1ZGUgPHd0Zi9UZW1wb3JhcnlDaGFuZ2UuaD4KKyNpbmNsdWRlIDx3dGYvdGV4dC9DU3RyaW5n
Lmg+CisKKyNpZiBQTEFURk9STShJT1MpCisjaW5jbHVkZSA8UnVudGltZUFwcGxpY2F0aW9uQ2hl
Y2tzSU9TLmg+CisjZW5kaWYKKworI2lmIFVTRShRVUlDS19MT09LKQorI2luY2x1ZGUgIlF1aWNr
TG9vay5oIgorI2VuZGlmCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworLy8gTWF0Y2ggdGhlIHBh
cmFsbGVsIGNvbm5lY3Rpb24gY291bnQgdXNlZCBieSB0aGUgbmV0d29ya2luZyBsYXllci4KK3N0
YXRpYyB1bnNpZ25lZCBtYXhSZXF1ZXN0c0luRmxpZ2h0UGVySG9zdDsKKyNpZiAhUExBVEZPUk0o
SU9TKQorc3RhdGljIGNvbnN0IHVuc2lnbmVkIG1heFJlcXVlc3RzSW5GbGlnaHRGb3JOb25IVFRQ
UHJvdG9jb2xzID0gMjA7CisjZWxzZQorLy8gTGltaXRpbmcgdGhpcyBzZWVtcyB0byByZWdyZXNz
IHBlcmZvcm1hbmNlIGluIHNvbWUgbG9jYWwgY2FzZXMgc28gbGV0J3MganVzdCBtYWtlIGl0IGxh
cmdlLgorc3RhdGljIGNvbnN0IHVuc2lnbmVkIG1heFJlcXVlc3RzSW5GbGlnaHRGb3JOb25IVFRQ
UHJvdG9jb2xzID0gMTAwMDA7CisjZW5kaWYKKworUmVzb3VyY2VMb2FkU2NoZWR1bGVyOjpIb3N0
SW5mb3JtYXRpb24qIFJlc291cmNlTG9hZFNjaGVkdWxlcjo6aG9zdEZvclVSTChjb25zdCBVUkwm
IHVybCwgQ3JlYXRlSG9zdFBvbGljeSBjcmVhdGVIb3N0UG9saWN5KQoreworICAgIGlmICghdXJs
LnByb3RvY29sSXNJbkhUVFBGYW1pbHkoKSkKKyAgICAgICAgcmV0dXJuIG1fbm9uSFRUUFByb3Rv
Y29sSG9zdDsKKworICAgIG1faG9zdHMuY2hlY2tDb25zaXN0ZW5jeSgpOworICAgIFN0cmluZyBo
b3N0TmFtZSA9IHVybC5ob3N0KCk7CisgICAgSG9zdEluZm9ybWF0aW9uKiBob3N0ID0gbV9ob3N0
cy5nZXQoaG9zdE5hbWUpOworICAgIGlmICghaG9zdCAmJiBjcmVhdGVIb3N0UG9saWN5ID09IENy
ZWF0ZUlmTm90Rm91bmQpIHsKKyAgICAgICAgaG9zdCA9IG5ldyBIb3N0SW5mb3JtYXRpb24oaG9z
dE5hbWUsIG1heFJlcXVlc3RzSW5GbGlnaHRQZXJIb3N0KTsKKyAgICAgICAgbV9ob3N0cy5hZGQo
aG9zdE5hbWUsIGhvc3QpOworICAgIH0KKyAgICByZXR1cm4gaG9zdDsKK30KKworUmVzb3VyY2VM
b2FkU2NoZWR1bGVyKiByZXNvdXJjZUxvYWRTY2hlZHVsZXIoKQoreworICAgIEFTU0VSVChpc01h
aW5UaHJlYWQoKSk7CisgICAgc3RhdGljIFJlc291cmNlTG9hZFNjaGVkdWxlciogZ2xvYmFsU2No
ZWR1bGVyID0gbnVsbHB0cjsKKyAgICAKKyAgICBpZiAoIWdsb2JhbFNjaGVkdWxlcikgeworICAg
ICAgICBzdGF0aWMgYm9vbCBpc0NhbGxpbmdPdXRUb1N0cmF0ZWd5ID0gZmFsc2U7CisgICAgICAg
IAorICAgICAgICAvLyBJZiB3ZSdyZSByZS1lbnRlcmluZyByZXNvdXJjZUxvYWRTY2hlZHVsZXIo
KSB3aGlsZSBjYWxsaW5nIG91dCB0byB0aGUgTG9hZGVyU3RyYXRlZ3ksCisgICAgICAgIC8vIHRo
ZW4gdGhlIExvYWRlclN0cmF0ZWd5IGlzIHRyeWluZyB0byB1c2UgdGhlIGRlZmF1bHQgcmVzb3Vy
Y2VMb2FkU2NoZWR1bGVyLgorICAgICAgICAvLyBTbyB3ZSdsbCBjcmVhdGUgaXQgaGVyZSBhbmQg
c3RhcnQgdXNpbmcgaXQuCisgICAgICAgIGlmIChpc0NhbGxpbmdPdXRUb1N0cmF0ZWd5KSB7Cisg
ICAgICAgICAgICBnbG9iYWxTY2hlZHVsZXIgPSBuZXcgUmVzb3VyY2VMb2FkU2NoZWR1bGVyOwor
ICAgICAgICAgICAgcmV0dXJuIGdsb2JhbFNjaGVkdWxlcjsKKyAgICAgICAgfQorICAgICAgICAK
KyAgICAgICAgVGVtcG9yYXJ5Q2hhbmdlPGJvb2w+IHJlY3Vyc2lvbkd1YXJkKGlzQ2FsbGluZ091
dFRvU3RyYXRlZ3ksIHRydWUpOworICAgICAgICBnbG9iYWxTY2hlZHVsZXIgPSBwbGF0Zm9ybVN0
cmF0ZWdpZXMoKS0+bG9hZGVyU3RyYXRlZ3koKS0+cmVzb3VyY2VMb2FkU2NoZWR1bGVyKCk7Cisg
ICAgfQorCisgICAgcmV0dXJuIGdsb2JhbFNjaGVkdWxlcjsKK30KKworUmVzb3VyY2VMb2FkU2No
ZWR1bGVyOjpSZXNvdXJjZUxvYWRTY2hlZHVsZXIoKQorICAgIDogbV9ub25IVFRQUHJvdG9jb2xI
b3N0KG5ldyBIb3N0SW5mb3JtYXRpb24oU3RyaW5nKCksIG1heFJlcXVlc3RzSW5GbGlnaHRGb3JO
b25IVFRQUHJvdG9jb2xzKSkKKyAgICAsIG1fcmVxdWVzdFRpbWVyKCp0aGlzLCAmUmVzb3VyY2VM
b2FkU2NoZWR1bGVyOjpyZXF1ZXN0VGltZXJGaXJlZCkKKyAgICAsIG1fc3VzcGVuZFBlbmRpbmdS
ZXF1ZXN0c0NvdW50KDApCisgICAgLCBtX2lzU2VyaWFsTG9hZGluZ0VuYWJsZWQoZmFsc2UpCit7
CisgICAgbWF4UmVxdWVzdHNJbkZsaWdodFBlckhvc3QgPSBpbml0aWFsaXplTWF4aW11bUhUVFBD
b25uZWN0aW9uQ291bnRQZXJIb3N0KCk7Cit9CisKK1Jlc291cmNlTG9hZFNjaGVkdWxlcjo6flJl
c291cmNlTG9hZFNjaGVkdWxlcigpCit7Cit9CisKK1JlZlB0cjxTdWJyZXNvdXJjZUxvYWRlcj4g
UmVzb3VyY2VMb2FkU2NoZWR1bGVyOjpzY2hlZHVsZVN1YnJlc291cmNlTG9hZChGcmFtZSogZnJh
bWUsIENhY2hlZFJlc291cmNlKiByZXNvdXJjZSwgY29uc3QgUmVzb3VyY2VSZXF1ZXN0JiByZXF1
ZXN0LCBjb25zdCBSZXNvdXJjZUxvYWRlck9wdGlvbnMmIG9wdGlvbnMpCit7CisgICAgUmVmUHRy
PFN1YnJlc291cmNlTG9hZGVyPiBsb2FkZXIgPSBTdWJyZXNvdXJjZUxvYWRlcjo6Y3JlYXRlKGZy
YW1lLCByZXNvdXJjZSwgcmVxdWVzdCwgb3B0aW9ucyk7CisgICAgaWYgKGxvYWRlcikKKyAgICAg
ICAgc2NoZWR1bGVMb2FkKGxvYWRlci5nZXQoKSk7CisjaWYgUExBVEZPUk0oSU9TKQorICAgIC8v
IFNpbmNlIHdlIGRlZmVyIGxvYWRlciBpbml0aWFsaXphdGlvbiB1bnRpbCBzY2hlZHVsaW5nIG9u
IGlPUywgdGhlIGZyYW1lCisgICAgLy8gbG9hZCBkZWxlZ2F0ZSB0aGF0IHdvdWxkIGJlIGNhbGxl
ZCBpbiBTdWJyZXNvdXJjZUxvYWRlcjo6Y3JlYXRlKCkgb24KKyAgICAvLyBvdGhlciBwb3J0cyBt
aWdodCBiZSBjYWxsZWQgaW4gc2NoZWR1bGVMb2FkKCkgaW5zdGVhZC4gT3VyIGNvbnRyYWN0IHRv
CisgICAgLy8gY2FsbGVycyBvZiB0aGlzIG1ldGhvZCBpcyB0aGF0IGEgbnVsbCBsb2FkZXIgaXMg
cmV0dXJuZWQgaWYgdGhlIGxvYWQgd2FzCisgICAgLy8gY2FuY2VsbGVkIGJ5IGEgZnJhbWUgbG9h
ZCBkZWxlZ2F0ZS4KKyAgICBpZiAoIWxvYWRlciB8fCBsb2FkZXItPnJlYWNoZWRUZXJtaW5hbFN0
YXRlKCkpCisgICAgICAgIHJldHVybiBudWxscHRyOworI2VuZGlmCisgICAgcmV0dXJuIGxvYWRl
cjsKK30KKworUmVmUHRyPE5ldHNjYXBlUGx1Z0luU3RyZWFtTG9hZGVyPiBSZXNvdXJjZUxvYWRT
Y2hlZHVsZXI6OnNjaGVkdWxlUGx1Z2luU3RyZWFtTG9hZChGcmFtZSogZnJhbWUsIE5ldHNjYXBl
UGx1Z0luU3RyZWFtTG9hZGVyQ2xpZW50KiBjbGllbnQsIGNvbnN0IFJlc291cmNlUmVxdWVzdCYg
cmVxdWVzdCkKK3sKKyAgICBSZWZQdHI8TmV0c2NhcGVQbHVnSW5TdHJlYW1Mb2FkZXI+IGxvYWRl
ciA9IE5ldHNjYXBlUGx1Z0luU3RyZWFtTG9hZGVyOjpjcmVhdGUoZnJhbWUsIGNsaWVudCwgcmVx
dWVzdCk7CisgICAgaWYgKGxvYWRlcikKKyAgICAgICAgc2NoZWR1bGVMb2FkKGxvYWRlci5nZXQo
KSk7CisgICAgcmV0dXJuIGxvYWRlcjsKK30KKwordm9pZCBSZXNvdXJjZUxvYWRTY2hlZHVsZXI6
OnNjaGVkdWxlTG9hZChSZXNvdXJjZUxvYWRlciogcmVzb3VyY2VMb2FkZXIpCit7CisgICAgQVNT
RVJUKHJlc291cmNlTG9hZGVyKTsKKworICAgIExPRyhSZXNvdXJjZUxvYWRpbmcsICJSZXNvdXJj
ZUxvYWRTY2hlZHVsZXI6OmxvYWQgcmVzb3VyY2UgJXAgJyVzJyIsIHJlc291cmNlTG9hZGVyLCBy
ZXNvdXJjZUxvYWRlci0+dXJsKCkuc3RyaW5nKCkubGF0aW4xKCkuZGF0YSgpKTsKKworI2lmIFBM
QVRGT1JNKElPUykKKyAgICAvLyBJZiB0aGVyZSdzIGEgd2ViIGFyY2hpdmUgcmVzb3VyY2UgZm9y
IHRoaXMgVVJMLCB3ZSBkb24ndCBuZWVkIHRvIHNjaGVkdWxlIHRoZSBsb2FkIHNpbmNlIGl0IHdp
bGwgbmV2ZXIgdG91Y2ggdGhlIG5ldHdvcmsuCisgICAgaWYgKCFpc1N1c3BlbmRpbmdQZW5kaW5n
UmVxdWVzdHMoKSAmJiByZXNvdXJjZUxvYWRlci0+ZG9jdW1lbnRMb2FkZXIoKS0+YXJjaGl2ZVJl
c291cmNlRm9yVVJMKHJlc291cmNlTG9hZGVyLT5pT1NPcmlnaW5hbFJlcXVlc3QoKS51cmwoKSkp
IHsKKyAgICAgICAgcmVzb3VyY2VMb2FkZXItPnN0YXJ0TG9hZGluZygpOworICAgICAgICByZXR1
cm47CisgICAgfQorI2Vsc2UKKyAgICBpZiAocmVzb3VyY2VMb2FkZXItPmRvY3VtZW50TG9hZGVy
KCktPmFyY2hpdmVSZXNvdXJjZUZvclVSTChyZXNvdXJjZUxvYWRlci0+cmVxdWVzdCgpLnVybCgp
KSkgeworICAgICAgICByZXNvdXJjZUxvYWRlci0+c3RhcnQoKTsKKyAgICAgICAgcmV0dXJuOwor
ICAgIH0KKyNlbmRpZgorCisjaWYgUExBVEZPUk0oSU9TKQorICAgIEhvc3RJbmZvcm1hdGlvbiog
aG9zdCA9IGhvc3RGb3JVUkwocmVzb3VyY2VMb2FkZXItPmlPU09yaWdpbmFsUmVxdWVzdCgpLnVy
bCgpLCBDcmVhdGVJZk5vdEZvdW5kKTsKKyNlbHNlCisgICAgSG9zdEluZm9ybWF0aW9uKiBob3N0
ID0gaG9zdEZvclVSTChyZXNvdXJjZUxvYWRlci0+dXJsKCksIENyZWF0ZUlmTm90Rm91bmQpOwor
I2VuZGlmCisKKyAgICBSZXNvdXJjZUxvYWRQcmlvcml0eSBwcmlvcml0eSA9IHJlc291cmNlTG9h
ZGVyLT5yZXF1ZXN0KCkucHJpb3JpdHkoKTsKKworICAgIGJvb2wgaGFkUmVxdWVzdHMgPSBob3N0
LT5oYXNSZXF1ZXN0cygpOworICAgIGhvc3QtPnNjaGVkdWxlKHJlc291cmNlTG9hZGVyLCBwcmlv
cml0eSk7CisKKyNpZiBQTEFURk9STShDT0NPQSkgfHwgVVNFKENGTkVUV09SSykKKyAgICBpZiAo
UmVzb3VyY2VSZXF1ZXN0OjpyZXNvdXJjZVByaW9yaXRpZXNFbmFibGVkKCkgJiYgIWlzU3VzcGVu
ZGluZ1BlbmRpbmdSZXF1ZXN0cygpKSB7CisgICAgICAgIC8vIFNlcnZlIGFsbCByZXF1ZXN0cyBh
dCBvbmNlIHRvIGtlZXAgdGhlIHBpcGVsaW5lIGZ1bGwgYXQgdGhlIG5ldHdvcmsgbGF5ZXIuCisg
ICAgICAgIC8vIEZJWE1FOiBEb2VzIHRoaXMgY29kZSBkbyBhbnl0aGluZyB1c2VmdWwsIGdpdmVu
IHRoYXQgd2UgYWxzbyBzZXQgbWF4UmVxdWVzdHNJbkZsaWdodFBlckhvc3QgdG8gZWZmZWN0aXZl
bHkgdW5saW1pdGVkIG9uIHRoZXNlIHBsYXRmb3Jtcz8KKyAgICAgICAgc2VydmVQZW5kaW5nUmVx
dWVzdHMoaG9zdCwgUmVzb3VyY2VMb2FkUHJpb3JpdHk6OlZlcnlMb3cpOworICAgICAgICByZXR1
cm47CisgICAgfQorI2VuZGlmCisKKyNpZiBQTEFURk9STShJT1MpCisgICAgaWYgKChwcmlvcml0
eSA+IFJlc291cmNlTG9hZFByaW9yaXR5OjpMb3cgfHwgIXJlc291cmNlTG9hZGVyLT5pT1NPcmln
aW5hbFJlcXVlc3QoKS51cmwoKS5wcm90b2NvbElzSW5IVFRQRmFtaWx5KCkgfHwgKHByaW9yaXR5
ID09IFJlc291cmNlTG9hZFByaW9yaXR5OjpMb3cgJiYgIWhhZFJlcXVlc3RzKSkgJiYgIWlzU3Vz
cGVuZGluZ1BlbmRpbmdSZXF1ZXN0cygpKSB7CisgICAgICAgIC8vIFRyeSB0byByZXF1ZXN0IGlt
cG9ydGFudCByZXNvdXJjZXMgaW1tZWRpYXRlbHkuCisgICAgICAgIHNlcnZlUGVuZGluZ1JlcXVl
c3RzKGhvc3QsIHByaW9yaXR5KTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyNlbHNlCisgICAg
aWYgKHByaW9yaXR5ID4gUmVzb3VyY2VMb2FkUHJpb3JpdHk6OkxvdyB8fCAhcmVzb3VyY2VMb2Fk
ZXItPnVybCgpLnByb3RvY29sSXNJbkhUVFBGYW1pbHkoKSB8fCAocHJpb3JpdHkgPT0gUmVzb3Vy
Y2VMb2FkUHJpb3JpdHk6OkxvdyAmJiAhaGFkUmVxdWVzdHMpKSB7CisgICAgICAgIC8vIFRyeSB0
byByZXF1ZXN0IGltcG9ydGFudCByZXNvdXJjZXMgaW1tZWRpYXRlbHkuCisgICAgICAgIHNlcnZl
UGVuZGluZ1JlcXVlc3RzKGhvc3QsIHByaW9yaXR5KTsKKyAgICAgICAgcmV0dXJuOworICAgIH0K
KyNlbmRpZgorCisgICAgLy8gSGFuZGxlIGFzeW5jaHJvbm91c2x5IHNvIGVhcmx5IGxvdyBwcmlv
cml0eSByZXF1ZXN0cyBkb24ndAorICAgIC8vIGdldCBzY2hlZHVsZWQgYmVmb3JlIGxhdGVyIGhp
Z2ggcHJpb3JpdHkgb25lcy4KKyAgICBzY2hlZHVsZVNlcnZlUGVuZGluZ1JlcXVlc3RzKCk7Cit9
CisKK3ZvaWQgUmVzb3VyY2VMb2FkU2NoZWR1bGVyOjpyZW1vdmUoUmVzb3VyY2VMb2FkZXIqIHJl
c291cmNlTG9hZGVyKQoreworICAgIEFTU0VSVChyZXNvdXJjZUxvYWRlcik7CisKKyAgICBIb3N0
SW5mb3JtYXRpb24qIGhvc3QgPSBob3N0Rm9yVVJMKHJlc291cmNlTG9hZGVyLT51cmwoKSk7Cisg
ICAgaWYgKGhvc3QpCisgICAgICAgIGhvc3QtPnJlbW92ZShyZXNvdXJjZUxvYWRlcik7CisjaWYg
UExBVEZPUk0oSU9TKQorICAgIC8vIFJlc291cmNlTG9hZGVyOjp1cmwoKSBkb2Vzbid0IHN0YXJ0
IHJldHVybmluZyB0aGUgY29ycmVjdCB2YWx1ZSB1bnRpbCB0aGUgbG9hZCBzdGFydHMuIElmIHdl
IGdldCBjYW5jZWxlZCBiZWZvcmUgdGhhdCwgd2UgbmVlZCB0byBsb29rIGZvciBvcmlnaW5hbFJl
cXVlc3QgdXJsIGluc3RlYWQuCisgICAgLy8gRklYTUU6IFJlc291cmNlTG9hZGVyOjp1cmwoKSBz
aG91bGQgYmUgbWFkZSB0byByZXR1cm4gYSBzZW5zaWJsZSB2YWx1ZSBhdCBhbGwgdGltZXMuCisg
ICAgaWYgKCFyZXNvdXJjZUxvYWRlci0+aU9TT3JpZ2luYWxSZXF1ZXN0KCkuaXNOdWxsKCkpIHsK
KyAgICAgICAgSG9zdEluZm9ybWF0aW9uKiBvcmlnaW5hbEhvc3QgPSBob3N0Rm9yVVJMKHJlc291
cmNlTG9hZGVyLT5pT1NPcmlnaW5hbFJlcXVlc3QoKS51cmwoKSk7CisgICAgICAgIGlmIChvcmln
aW5hbEhvc3QgJiYgb3JpZ2luYWxIb3N0ICE9IGhvc3QpCisgICAgICAgICAgICBvcmlnaW5hbEhv
c3QtPnJlbW92ZShyZXNvdXJjZUxvYWRlcik7CisgICAgfQorI2VuZGlmCisgICAgc2NoZWR1bGVT
ZXJ2ZVBlbmRpbmdSZXF1ZXN0cygpOworfQorCit2b2lkIFJlc291cmNlTG9hZFNjaGVkdWxlcjo6
c2V0RGVmZXJzTG9hZGluZyhSZXNvdXJjZUxvYWRlciosIGJvb2wpCit7Cit9CisKK3ZvaWQgUmVz
b3VyY2VMb2FkU2NoZWR1bGVyOjpjcm9zc09yaWdpblJlZGlyZWN0UmVjZWl2ZWQoUmVzb3VyY2VM
b2FkZXIqIHJlc291cmNlTG9hZGVyLCBjb25zdCBVUkwmIHJlZGlyZWN0VVJMKQoreworICAgIEhv
c3RJbmZvcm1hdGlvbiogb2xkSG9zdCA9IGhvc3RGb3JVUkwocmVzb3VyY2VMb2FkZXItPnVybCgp
KTsKKyAgICBBU1NFUlQob2xkSG9zdCk7CisgICAgaWYgKCFvbGRIb3N0KQorICAgICAgICByZXR1
cm47CisKKyAgICBIb3N0SW5mb3JtYXRpb24qIG5ld0hvc3QgPSBob3N0Rm9yVVJMKHJlZGlyZWN0
VVJMLCBDcmVhdGVJZk5vdEZvdW5kKTsKKworICAgIGlmIChvbGRIb3N0LT5uYW1lKCkgPT0gbmV3
SG9zdC0+bmFtZSgpKQorICAgICAgICByZXR1cm47CisKKyAgICBuZXdIb3N0LT5hZGRMb2FkSW5Q
cm9ncmVzcyhyZXNvdXJjZUxvYWRlcik7CisgICAgb2xkSG9zdC0+cmVtb3ZlKHJlc291cmNlTG9h
ZGVyKTsKK30KKwordm9pZCBSZXNvdXJjZUxvYWRTY2hlZHVsZXI6OnNlcnZlUGVuZGluZ1JlcXVl
c3RzKFJlc291cmNlTG9hZFByaW9yaXR5IG1pbmltdW1Qcmlvcml0eSkKK3sKKyAgICBMT0coUmVz
b3VyY2VMb2FkaW5nLCAiUmVzb3VyY2VMb2FkU2NoZWR1bGVyOjpzZXJ2ZVBlbmRpbmdSZXF1ZXN0
cy4gbV9zdXNwZW5kUGVuZGluZ1JlcXVlc3RzQ291bnQ9JWQiLCBtX3N1c3BlbmRQZW5kaW5nUmVx
dWVzdHNDb3VudCk7IAorICAgIGlmIChpc1N1c3BlbmRpbmdQZW5kaW5nUmVxdWVzdHMoKSkKKyAg
ICAgICAgcmV0dXJuOworCisgICAgbV9yZXF1ZXN0VGltZXIuc3RvcCgpOworICAgIAorICAgIHNl
cnZlUGVuZGluZ1JlcXVlc3RzKG1fbm9uSFRUUFByb3RvY29sSG9zdCwgbWluaW11bVByaW9yaXR5
KTsKKworICAgIFZlY3RvcjxIb3N0SW5mb3JtYXRpb24qPiBob3N0c1RvU2VydmU7CisgICAgY29w
eVZhbHVlc1RvVmVjdG9yKG1faG9zdHMsIGhvc3RzVG9TZXJ2ZSk7CisKKyAgICBmb3IgKGF1dG8q
IGhvc3QgOiBob3N0c1RvU2VydmUpIHsKKyAgICAgICAgaWYgKGhvc3QtPmhhc1JlcXVlc3RzKCkp
CisgICAgICAgICAgICBzZXJ2ZVBlbmRpbmdSZXF1ZXN0cyhob3N0LCBtaW5pbXVtUHJpb3JpdHkp
OworICAgICAgICBlbHNlCisgICAgICAgICAgICBkZWxldGUgbV9ob3N0cy50YWtlKGhvc3QtPm5h
bWUoKSk7CisgICAgfQorfQorCit2b2lkIFJlc291cmNlTG9hZFNjaGVkdWxlcjo6c2VydmVQZW5k
aW5nUmVxdWVzdHMoSG9zdEluZm9ybWF0aW9uKiBob3N0LCBSZXNvdXJjZUxvYWRQcmlvcml0eSBt
aW5pbXVtUHJpb3JpdHkpCit7CisgICAgTE9HKFJlc291cmNlTG9hZGluZywgIlJlc291cmNlTG9h
ZFNjaGVkdWxlcjo6c2VydmVQZW5kaW5nUmVxdWVzdHMgSG9zdEluZm9ybWF0aW9uLm1fbmFtZT0n
JXMnIiwgaG9zdC0+bmFtZSgpLmxhdGluMSgpLmRhdGEoKSk7CisKKyAgICBhdXRvIHByaW9yaXR5
ID0gUmVzb3VyY2VMb2FkUHJpb3JpdHk6OkhpZ2hlc3Q7CisgICAgd2hpbGUgKHRydWUpIHsKKyAg
ICAgICAgYXV0byYgcmVxdWVzdHNQZW5kaW5nID0gaG9zdC0+cmVxdWVzdHNQZW5kaW5nKHByaW9y
aXR5KTsKKyAgICAgICAgd2hpbGUgKCFyZXF1ZXN0c1BlbmRpbmcuaXNFbXB0eSgpKSB7CisgICAg
ICAgICAgICBSZWZQdHI8UmVzb3VyY2VMb2FkZXI+IHJlc291cmNlTG9hZGVyID0gcmVxdWVzdHNQ
ZW5kaW5nLmZpcnN0KCk7CisKKyAgICAgICAgICAgIC8vIEZvciBuYW1lZCBob3N0cyAtIHdoaWNo
IGFyZSBvbmx5IGh0dHAocykgaG9zdHMgLSB3ZSBzaG91bGQgYWx3YXlzIGVuZm9yY2UgdGhlIGNv
bm5lY3Rpb24gbGltaXQuCisgICAgICAgICAgICAvLyBGb3Igbm9uLW5hbWVkIGhvc3RzIC0gZXZl
cnl0aGluZyBidXQgaHR0cChzKSAtIHdlIHNob3VsZCBvbmx5IGVuZm9yY2UgdGhlIGxpbWl0IGlm
IHRoZSBkb2N1bWVudCBpc24ndCBkb25lIHBhcnNpbmcgCisgICAgICAgICAgICAvLyBhbmQgd2Ug
ZG9uJ3Qga25vdyBhbGwgc3R5bGVzaGVldHMgeWV0LgorICAgICAgICAgICAgRG9jdW1lbnQqIGRv
Y3VtZW50ID0gcmVzb3VyY2VMb2FkZXItPmZyYW1lTG9hZGVyKCkgPyByZXNvdXJjZUxvYWRlci0+
ZnJhbWVMb2FkZXIoKS0+ZnJhbWUoKS5kb2N1bWVudCgpIDogMDsKKyAgICAgICAgICAgIGJvb2wg
c2hvdWxkTGltaXRSZXF1ZXN0cyA9ICFob3N0LT5uYW1lKCkuaXNOdWxsKCkgfHwgKGRvY3VtZW50
ICYmIChkb2N1bWVudC0+cGFyc2luZygpIHx8ICFkb2N1bWVudC0+aGF2ZVN0eWxlc2hlZXRzTG9h
ZGVkKCkpKTsKKyAgICAgICAgICAgIGlmIChzaG91bGRMaW1pdFJlcXVlc3RzICYmIGhvc3QtPmxp
bWl0UmVxdWVzdHMocHJpb3JpdHkpKQorICAgICAgICAgICAgICAgIHJldHVybjsKKworICAgICAg
ICAgICAgcmVxdWVzdHNQZW5kaW5nLnJlbW92ZUZpcnN0KCk7CisgICAgICAgICAgICBob3N0LT5h
ZGRMb2FkSW5Qcm9ncmVzcyhyZXNvdXJjZUxvYWRlci5nZXQoKSk7CisjaWYgUExBVEZPUk0oSU9T
KQorICAgICAgICAgICAgaWYgKCFhcHBsaWNhdGlvbklzV2ViUHJvY2VzcygpKSB7CisgICAgICAg
ICAgICAgICAgcmVzb3VyY2VMb2FkZXItPnN0YXJ0TG9hZGluZygpOworICAgICAgICAgICAgICAg
IHJldHVybjsKKyAgICAgICAgICAgIH0KKyNlbmRpZgorICAgICAgICAgICAgcmVzb3VyY2VMb2Fk
ZXItPnN0YXJ0KCk7CisgICAgICAgIH0KKyAgICAgICAgaWYgKHByaW9yaXR5ID09IG1pbmltdW1Q
cmlvcml0eSkKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgLS1wcmlvcml0eTsKKyAgICB9
Cit9CisKK3ZvaWQgUmVzb3VyY2VMb2FkU2NoZWR1bGVyOjpzdXNwZW5kUGVuZGluZ1JlcXVlc3Rz
KCkKK3sKKyAgICArK21fc3VzcGVuZFBlbmRpbmdSZXF1ZXN0c0NvdW50OworfQorCit2b2lkIFJl
c291cmNlTG9hZFNjaGVkdWxlcjo6cmVzdW1lUGVuZGluZ1JlcXVlc3RzKCkKK3sKKyAgICBBU1NF
UlQobV9zdXNwZW5kUGVuZGluZ1JlcXVlc3RzQ291bnQpOworICAgIC0tbV9zdXNwZW5kUGVuZGlu
Z1JlcXVlc3RzQ291bnQ7CisgICAgaWYgKG1fc3VzcGVuZFBlbmRpbmdSZXF1ZXN0c0NvdW50KQor
ICAgICAgICByZXR1cm47CisgICAgaWYgKCFtX2hvc3RzLmlzRW1wdHkoKSB8fCBtX25vbkhUVFBQ
cm90b2NvbEhvc3QtPmhhc1JlcXVlc3RzKCkpCisgICAgICAgIHNjaGVkdWxlU2VydmVQZW5kaW5n
UmVxdWVzdHMoKTsKK30KKyAgICAKK3ZvaWQgUmVzb3VyY2VMb2FkU2NoZWR1bGVyOjpzY2hlZHVs
ZVNlcnZlUGVuZGluZ1JlcXVlc3RzKCkKK3sKKyAgICBMT0coUmVzb3VyY2VMb2FkaW5nLCAiUmVz
b3VyY2VMb2FkU2NoZWR1bGVyOjpzY2hlZHVsZVNlcnZlUGVuZGluZ1JlcXVlc3RzLCBtX3JlcXVl
c3RUaW1lci5pc0FjdGl2ZSgpPSV1IiwgbV9yZXF1ZXN0VGltZXIuaXNBY3RpdmUoKSk7CisgICAg
aWYgKCFtX3JlcXVlc3RUaW1lci5pc0FjdGl2ZSgpKQorICAgICAgICBtX3JlcXVlc3RUaW1lci5z
dGFydE9uZVNob3QoMCk7Cit9CisKK3ZvaWQgUmVzb3VyY2VMb2FkU2NoZWR1bGVyOjpyZXF1ZXN0
VGltZXJGaXJlZCgpCit7CisgICAgTE9HKFJlc291cmNlTG9hZGluZywgIlJlc291cmNlTG9hZFNj
aGVkdWxlcjo6cmVxdWVzdFRpbWVyRmlyZWRcbiIpOworICAgIHNlcnZlUGVuZGluZ1JlcXVlc3Rz
KCk7Cit9CisKK1Jlc291cmNlTG9hZFNjaGVkdWxlcjo6SG9zdEluZm9ybWF0aW9uOjpIb3N0SW5m
b3JtYXRpb24oY29uc3QgU3RyaW5nJiBuYW1lLCB1bnNpZ25lZCBtYXhSZXF1ZXN0c0luRmxpZ2h0
KQorICAgIDogbV9uYW1lKG5hbWUpCisgICAgLCBtX21heFJlcXVlc3RzSW5GbGlnaHQobWF4UmVx
dWVzdHNJbkZsaWdodCkKK3sKK30KKworUmVzb3VyY2VMb2FkU2NoZWR1bGVyOjpIb3N0SW5mb3Jt
YXRpb246On5Ib3N0SW5mb3JtYXRpb24oKQoreworICAgIEFTU0VSVCghaGFzUmVxdWVzdHMoKSk7
Cit9CisKK3Vuc2lnbmVkIFJlc291cmNlTG9hZFNjaGVkdWxlcjo6SG9zdEluZm9ybWF0aW9uOjpw
cmlvcml0eVRvSW5kZXgoUmVzb3VyY2VMb2FkUHJpb3JpdHkgcHJpb3JpdHkpCit7CisgICAgc3dp
dGNoIChwcmlvcml0eSkgeworICAgIGNhc2UgUmVzb3VyY2VMb2FkUHJpb3JpdHk6OlZlcnlMb3c6
CisgICAgICAgIHJldHVybiAwOworICAgIGNhc2UgUmVzb3VyY2VMb2FkUHJpb3JpdHk6OkxvdzoK
KyAgICAgICAgcmV0dXJuIDE7CisgICAgY2FzZSBSZXNvdXJjZUxvYWRQcmlvcml0eTo6TWVkaXVt
OgorICAgICAgICByZXR1cm4gMjsKKyAgICBjYXNlIFJlc291cmNlTG9hZFByaW9yaXR5OjpIaWdo
OgorICAgICAgICByZXR1cm4gMzsKKyAgICBjYXNlIFJlc291cmNlTG9hZFByaW9yaXR5OjpWZXJ5
SGlnaDoKKyAgICAgICAgcmV0dXJuIDQ7CisgICAgfQorICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgp
OworICAgIHJldHVybiAwOworfQorCit2b2lkIFJlc291cmNlTG9hZFNjaGVkdWxlcjo6SG9zdElu
Zm9ybWF0aW9uOjpzY2hlZHVsZShSZXNvdXJjZUxvYWRlciogcmVzb3VyY2VMb2FkZXIsIFJlc291
cmNlTG9hZFByaW9yaXR5IHByaW9yaXR5KQoreworICAgIG1fcmVxdWVzdHNQZW5kaW5nW3ByaW9y
aXR5VG9JbmRleChwcmlvcml0eSldLmFwcGVuZChyZXNvdXJjZUxvYWRlcik7Cit9CisgICAgCit2
b2lkIFJlc291cmNlTG9hZFNjaGVkdWxlcjo6SG9zdEluZm9ybWF0aW9uOjphZGRMb2FkSW5Qcm9n
cmVzcyhSZXNvdXJjZUxvYWRlciogcmVzb3VyY2VMb2FkZXIpCit7CisgICAgTE9HKFJlc291cmNl
TG9hZGluZywgIkhvc3RJbmZvcm1hdGlvbiAnJXMnIGxvYWRpbmcgJyVzJy4gQ3VycmVudCBjb3Vu
dCAlZCIsIG1fbmFtZS5sYXRpbjEoKS5kYXRhKCksIHJlc291cmNlTG9hZGVyLT51cmwoKS5zdHJp
bmcoKS5sYXRpbjEoKS5kYXRhKCksIG1fcmVxdWVzdHNMb2FkaW5nLnNpemUoKSk7CisgICAgbV9y
ZXF1ZXN0c0xvYWRpbmcuYWRkKHJlc291cmNlTG9hZGVyKTsKK30KKyAgICAKK3ZvaWQgUmVzb3Vy
Y2VMb2FkU2NoZWR1bGVyOjpIb3N0SW5mb3JtYXRpb246OnJlbW92ZShSZXNvdXJjZUxvYWRlciog
cmVzb3VyY2VMb2FkZXIpCit7CisgICAgaWYgKG1fcmVxdWVzdHNMb2FkaW5nLnJlbW92ZShyZXNv
dXJjZUxvYWRlcikpCisgICAgICAgIHJldHVybjsKKyAgICAKKyAgICBmb3IgKGF1dG8mIHJlcXVl
c3RRdWV1ZSA6IG1fcmVxdWVzdHNQZW5kaW5nKSB7CisgICAgICAgIGZvciAoYXV0byBpdCA9IHJl
cXVlc3RRdWV1ZS5iZWdpbigpLCBlbmQgPSByZXF1ZXN0UXVldWUuZW5kKCk7IGl0ICE9IGVuZDsg
KytpdCkgeworICAgICAgICAgICAgaWYgKCppdCA9PSByZXNvdXJjZUxvYWRlcikgeworICAgICAg
ICAgICAgICAgIHJlcXVlc3RRdWV1ZS5yZW1vdmUoaXQpOworICAgICAgICAgICAgICAgIHJldHVy
bjsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KK30KKworYm9vbCBSZXNvdXJjZUxv
YWRTY2hlZHVsZXI6Okhvc3RJbmZvcm1hdGlvbjo6aGFzUmVxdWVzdHMoKSBjb25zdAoreworICAg
IGlmICghbV9yZXF1ZXN0c0xvYWRpbmcuaXNFbXB0eSgpKQorICAgICAgICByZXR1cm4gdHJ1ZTsK
KyAgICBmb3IgKGF1dG8mIHJlcXVlc3RRdWV1ZSA6IG1fcmVxdWVzdHNQZW5kaW5nKSB7CisgICAg
ICAgIGlmICghcmVxdWVzdFF1ZXVlLmlzRW1wdHkoKSkKKyAgICAgICAgICAgIHJldHVybiB0cnVl
OworICAgIH0KKyAgICByZXR1cm4gZmFsc2U7Cit9CisKK2Jvb2wgUmVzb3VyY2VMb2FkU2NoZWR1
bGVyOjpIb3N0SW5mb3JtYXRpb246OmxpbWl0UmVxdWVzdHMoUmVzb3VyY2VMb2FkUHJpb3JpdHkg
cHJpb3JpdHkpIGNvbnN0IAoreworICAgIGlmIChwcmlvcml0eSA9PSBSZXNvdXJjZUxvYWRQcmlv
cml0eTo6VmVyeUxvdyAmJiAhbV9yZXF1ZXN0c0xvYWRpbmcuaXNFbXB0eSgpKQorICAgICAgICBy
ZXR1cm4gdHJ1ZTsKKyAgICByZXR1cm4gbV9yZXF1ZXN0c0xvYWRpbmcuc2l6ZSgpID49IChyZXNv
dXJjZUxvYWRTY2hlZHVsZXIoKS0+aXNTZXJpYWxMb2FkaW5nRW5hYmxlZCgpID8gMSA6IG1fbWF4
UmVxdWVzdHNJbkZsaWdodCk7Cit9CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKSW5kZXg6IFNv
dXJjZS9XZWJLaXQvV2ViQ29yZVN1cHBvcnQvV2ViUmVzb3VyY2VMb2FkU2NoZWR1bGVyLmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L1dlYkNvcmVTdXBwb3J0L1dlYlJlc291cmNlTG9h
ZFNjaGVkdWxlci5jcHAJKHdvcmtpbmcgY29weSkKKysrIFNvdXJjZS9XZWJLaXQvV2ViQ29yZVN1
cHBvcnQvV2ViUmVzb3VyY2VMb2FkU2NoZWR1bGVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMyw3
ICszLDcgQEAKICAgICBDb3B5cmlnaHQgKEMpIDIwMDEgRGlyayBNdWVsbGVyIChtdWVsbGVyQGtk
ZS5vcmcpCiAgICAgQ29weXJpZ2h0IChDKSAyMDAyIFdhbGRvIEJhc3RpYW4gKGJhc3RpYW5Aa2Rl
Lm9yZykKICAgICBDb3B5cmlnaHQgKEMpIDIwMDYgU2FtdWVsIFdlaW5pZyAoc2FtLndlaW5pZ0Bn
bWFpbC5jb20pCi0gICAgQ29weXJpZ2h0IChDKSAyMDA0LCAyMDA1LCAyMDA2LCAyMDA3LCAyMDA4
IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAgICBDb3B5cmlnaHQgKEMpIDIwMDQt
MjAwOCwgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgICAgQ29weXJpZ2h0
IChDKSAyMDEwIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAKICAgICBUaGlzIGxp
YnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCkBA
IC0yMiwzNSArMjIsMzIgQEAKICAgICBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KICAqLwog
Ci0jaW5jbHVkZSAiY29uZmlnLmgiCi0jaW5jbHVkZSAiUmVzb3VyY2VMb2FkU2NoZWR1bGVyLmgi
CisjaW5jbHVkZSAiV2ViUmVzb3VyY2VMb2FkU2NoZWR1bGVyLmgiCiAKLSNpbmNsdWRlICJEb2N1
bWVudC5oIgotI2luY2x1ZGUgIkRvY3VtZW50TG9hZGVyLmgiCi0jaW5jbHVkZSAiRnJhbWUuaCIK
LSNpbmNsdWRlICJGcmFtZUxvYWRlci5oIgotI2luY2x1ZGUgIkxvYWRlclN0cmF0ZWd5LmgiCi0j
aW5jbHVkZSAiTG9nZ2luZy5oIgotI2luY2x1ZGUgIk5ldHNjYXBlUGx1Z0luU3RyZWFtTG9hZGVy
LmgiCi0jaW5jbHVkZSAiUGxhdGZvcm1TdHJhdGVnaWVzLmgiCi0jaW5jbHVkZSAiUmVzb3VyY2VM
b2FkZXIuaCIKLSNpbmNsdWRlICJSZXNvdXJjZVJlcXVlc3QuaCIKLSNpbmNsdWRlICJTdWJyZXNv
dXJjZUxvYWRlci5oIgotI2luY2x1ZGUgIlVSTC5oIgorI2luY2x1ZGUgPFdlYkNvcmUvRG9jdW1l
bnQuaD4KKyNpbmNsdWRlIDxXZWJDb3JlL0RvY3VtZW50TG9hZGVyLmg+CisjaW5jbHVkZSA8V2Vi
Q29yZS9GcmFtZS5oPgorI2luY2x1ZGUgPFdlYkNvcmUvRnJhbWVMb2FkZXIuaD4KKyNpbmNsdWRl
IDxXZWJDb3JlL0xvZ2dpbmcuaD4KKyNpbmNsdWRlIDxXZWJDb3JlL05ldHNjYXBlUGx1Z0luU3Ry
ZWFtTG9hZGVyLmg+CisjaW5jbHVkZSA8V2ViQ29yZS9QaW5nSGFuZGxlLmg+CisjaW5jbHVkZSA8
V2ViQ29yZS9QbGF0Zm9ybVN0cmF0ZWdpZXMuaD4KKyNpbmNsdWRlIDxXZWJDb3JlL1Jlc291cmNl
SGFuZGxlLmg+CisjaW5jbHVkZSA8V2ViQ29yZS9SZXNvdXJjZVJlcXVlc3QuaD4KKyNpbmNsdWRl
IDxXZWJDb3JlL1N1YnJlc291cmNlTG9hZGVyLmg+CisjaW5jbHVkZSA8V2ViQ29yZS9VUkwuaD4K
ICNpbmNsdWRlIDx3dGYvTWFpblRocmVhZC5oPgogI2luY2x1ZGUgPHd0Zi9UZW1wb3JhcnlDaGFu
Z2UuaD4KICNpbmNsdWRlIDx3dGYvdGV4dC9DU3RyaW5nLmg+CiAKICNpZiBQTEFURk9STShJT1Mp
Ci0jaW5jbHVkZSA8UnVudGltZUFwcGxpY2F0aW9uQ2hlY2tzSU9TLmg+CisjaW5jbHVkZSA8V2Vi
Q29yZS9SdW50aW1lQXBwbGljYXRpb25DaGVja3NJT1MuaD4KICNlbmRpZgogCiAjaWYgVVNFKFFV
SUNLX0xPT0spCi0jaW5jbHVkZSAiUXVpY2tMb29rLmgiCisjaW5jbHVkZSA8V2ViQ29yZS9RdWlj
a0xvb2suaD4KICNlbmRpZgogCi1uYW1lc3BhY2UgV2ViQ29yZSB7Ci0KIC8vIE1hdGNoIHRoZSBw
YXJhbGxlbCBjb25uZWN0aW9uIGNvdW50IHVzZWQgYnkgdGhlIG5ldHdvcmtpbmcgbGF5ZXIuCiBz
dGF0aWMgdW5zaWduZWQgbWF4UmVxdWVzdHNJbkZsaWdodFBlckhvc3Q7CiAjaWYgIVBMQVRGT1JN
KElPUykKQEAgLTYwLDcgKzU3LDE0IEBAIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBtYXhSZXF1ZXN0
c0luRmxpZ2gKIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBtYXhSZXF1ZXN0c0luRmxpZ2h0Rm9yTm9u
SFRUUFByb3RvY29scyA9IDEwMDAwOwogI2VuZGlmCiAKLVJlc291cmNlTG9hZFNjaGVkdWxlcjo6
SG9zdEluZm9ybWF0aW9uKiBSZXNvdXJjZUxvYWRTY2hlZHVsZXI6Omhvc3RGb3JVUkwoY29uc3Qg
VVJMJiB1cmwsIENyZWF0ZUhvc3RQb2xpY3kgY3JlYXRlSG9zdFBvbGljeSkKK3VzaW5nIG5hbWVz
cGFjZSBXZWJDb3JlOworCitXZWJSZXNvdXJjZUxvYWRTY2hlZHVsZXImIHdlYlJlc291cmNlTG9h
ZFNjaGVkdWxlcigpCit7CisgICAgcmV0dXJuIHN0YXRpY19jYXN0PFdlYlJlc291cmNlTG9hZFNj
aGVkdWxlciY+KCpwbGF0Zm9ybVN0cmF0ZWdpZXMoKS0+bG9hZGVyU3RyYXRlZ3koKSk7Cit9CisK
K1dlYlJlc291cmNlTG9hZFNjaGVkdWxlcjo6SG9zdEluZm9ybWF0aW9uKiBXZWJSZXNvdXJjZUxv
YWRTY2hlZHVsZXI6Omhvc3RGb3JVUkwoY29uc3QgVVJMJiB1cmwsIENyZWF0ZUhvc3RQb2xpY3kg
Y3JlYXRlSG9zdFBvbGljeSkKIHsKICAgICBpZiAoIXVybC5wcm90b2NvbElzSW5IVFRQRmFtaWx5
KCkpCiAgICAgICAgIHJldHVybiBtX25vbkhUVFBQcm90b2NvbEhvc3Q7CkBAIC03NSw0MyArNzks
MjAgQEAgUmVzb3VyY2VMb2FkU2NoZWR1bGVyOjpIb3N0SW5mb3JtYXRpb24qIAogICAgIHJldHVy
biBob3N0OwogfQogCi1SZXNvdXJjZUxvYWRTY2hlZHVsZXIqIHJlc291cmNlTG9hZFNjaGVkdWxl
cigpCi17Ci0gICAgQVNTRVJUKGlzTWFpblRocmVhZCgpKTsKLSAgICBzdGF0aWMgUmVzb3VyY2VM
b2FkU2NoZWR1bGVyKiBnbG9iYWxTY2hlZHVsZXIgPSBudWxscHRyOwotICAgIAotICAgIGlmICgh
Z2xvYmFsU2NoZWR1bGVyKSB7Ci0gICAgICAgIHN0YXRpYyBib29sIGlzQ2FsbGluZ091dFRvU3Ry
YXRlZ3kgPSBmYWxzZTsKLSAgICAgICAgCi0gICAgICAgIC8vIElmIHdlJ3JlIHJlLWVudGVyaW5n
IHJlc291cmNlTG9hZFNjaGVkdWxlcigpIHdoaWxlIGNhbGxpbmcgb3V0IHRvIHRoZSBMb2FkZXJT
dHJhdGVneSwKLSAgICAgICAgLy8gdGhlbiB0aGUgTG9hZGVyU3RyYXRlZ3kgaXMgdHJ5aW5nIHRv
IHVzZSB0aGUgZGVmYXVsdCByZXNvdXJjZUxvYWRTY2hlZHVsZXIuCi0gICAgICAgIC8vIFNvIHdl
J2xsIGNyZWF0ZSBpdCBoZXJlIGFuZCBzdGFydCB1c2luZyBpdC4KLSAgICAgICAgaWYgKGlzQ2Fs
bGluZ091dFRvU3RyYXRlZ3kpIHsKLSAgICAgICAgICAgIGdsb2JhbFNjaGVkdWxlciA9IG5ldyBS
ZXNvdXJjZUxvYWRTY2hlZHVsZXI7Ci0gICAgICAgICAgICByZXR1cm4gZ2xvYmFsU2NoZWR1bGVy
OwotICAgICAgICB9Ci0gICAgICAgIAotICAgICAgICBUZW1wb3JhcnlDaGFuZ2U8Ym9vbD4gcmVj
dXJzaW9uR3VhcmQoaXNDYWxsaW5nT3V0VG9TdHJhdGVneSwgdHJ1ZSk7Ci0gICAgICAgIGdsb2Jh
bFNjaGVkdWxlciA9IHBsYXRmb3JtU3RyYXRlZ2llcygpLT5sb2FkZXJTdHJhdGVneSgpLT5yZXNv
dXJjZUxvYWRTY2hlZHVsZXIoKTsKLSAgICB9Ci0KLSAgICByZXR1cm4gZ2xvYmFsU2NoZWR1bGVy
OwotfQotCi1SZXNvdXJjZUxvYWRTY2hlZHVsZXI6OlJlc291cmNlTG9hZFNjaGVkdWxlcigpCitX
ZWJSZXNvdXJjZUxvYWRTY2hlZHVsZXI6OldlYlJlc291cmNlTG9hZFNjaGVkdWxlcigpCiAgICAg
OiBtX25vbkhUVFBQcm90b2NvbEhvc3QobmV3IEhvc3RJbmZvcm1hdGlvbihTdHJpbmcoKSwgbWF4
UmVxdWVzdHNJbkZsaWdodEZvck5vbkhUVFBQcm90b2NvbHMpKQotICAgICwgbV9yZXF1ZXN0VGlt
ZXIoKnRoaXMsICZSZXNvdXJjZUxvYWRTY2hlZHVsZXI6OnJlcXVlc3RUaW1lckZpcmVkKQorICAg
ICwgbV9yZXF1ZXN0VGltZXIoKnRoaXMsICZXZWJSZXNvdXJjZUxvYWRTY2hlZHVsZXI6OnJlcXVl
c3RUaW1lckZpcmVkKQogICAgICwgbV9zdXNwZW5kUGVuZGluZ1JlcXVlc3RzQ291bnQoMCkKICAg
ICAsIG1faXNTZXJpYWxMb2FkaW5nRW5hYmxlZChmYWxzZSkKIHsKICAgICBtYXhSZXF1ZXN0c0lu
RmxpZ2h0UGVySG9zdCA9IGluaXRpYWxpemVNYXhpbXVtSFRUUENvbm5lY3Rpb25Db3VudFBlckhv
c3QoKTsKIH0KIAotUmVzb3VyY2VMb2FkU2NoZWR1bGVyOjp+UmVzb3VyY2VMb2FkU2NoZWR1bGVy
KCkKK1dlYlJlc291cmNlTG9hZFNjaGVkdWxlcjo6fldlYlJlc291cmNlTG9hZFNjaGVkdWxlcigp
CiB7CiB9CiAKLVJlZlB0cjxTdWJyZXNvdXJjZUxvYWRlcj4gUmVzb3VyY2VMb2FkU2NoZWR1bGVy
OjpzY2hlZHVsZVN1YnJlc291cmNlTG9hZChGcmFtZSogZnJhbWUsIENhY2hlZFJlc291cmNlKiBy
ZXNvdXJjZSwgY29uc3QgUmVzb3VyY2VSZXF1ZXN0JiByZXF1ZXN0LCBjb25zdCBSZXNvdXJjZUxv
YWRlck9wdGlvbnMmIG9wdGlvbnMpCitSZWZQdHI8U3VicmVzb3VyY2VMb2FkZXI+IFdlYlJlc291
cmNlTG9hZFNjaGVkdWxlcjo6bG9hZFJlc291cmNlKEZyYW1lKiBmcmFtZSwgQ2FjaGVkUmVzb3Vy
Y2UqIHJlc291cmNlLCBjb25zdCBSZXNvdXJjZVJlcXVlc3QmIHJlcXVlc3QsIGNvbnN0IFJlc291
cmNlTG9hZGVyT3B0aW9ucyYgb3B0aW9ucykKIHsKICAgICBSZWZQdHI8U3VicmVzb3VyY2VMb2Fk
ZXI+IGxvYWRlciA9IFN1YnJlc291cmNlTG9hZGVyOjpjcmVhdGUoZnJhbWUsIHJlc291cmNlLCBy
ZXF1ZXN0LCBvcHRpb25zKTsKICAgICBpZiAobG9hZGVyKQpAQCAtMTI4LDcgKzEwOSwxMiBAQCBS
ZWZQdHI8U3VicmVzb3VyY2VMb2FkZXI+IFJlc291cmNlTG9hZFNjCiAgICAgcmV0dXJuIGxvYWRl
cjsKIH0KIAotUmVmUHRyPE5ldHNjYXBlUGx1Z0luU3RyZWFtTG9hZGVyPiBSZXNvdXJjZUxvYWRT
Y2hlZHVsZXI6OnNjaGVkdWxlUGx1Z2luU3RyZWFtTG9hZChGcmFtZSogZnJhbWUsIE5ldHNjYXBl
UGx1Z0luU3RyZWFtTG9hZGVyQ2xpZW50KiBjbGllbnQsIGNvbnN0IFJlc291cmNlUmVxdWVzdCYg
cmVxdWVzdCkKK3ZvaWQgV2ViUmVzb3VyY2VMb2FkU2NoZWR1bGVyOjpsb2FkUmVzb3VyY2VTeW5j
aHJvbm91c2x5KE5ldHdvcmtpbmdDb250ZXh0KiBjb250ZXh0LCB1bnNpZ25lZCBsb25nLCBjb25z
dCBSZXNvdXJjZVJlcXVlc3QmIHJlcXVlc3QsIFN0b3JlZENyZWRlbnRpYWxzIHN0b3JlZENyZWRl
bnRpYWxzLCBDbGllbnRDcmVkZW50aWFsUG9saWN5LCBSZXNvdXJjZUVycm9yJiBlcnJvciwgUmVz
b3VyY2VSZXNwb25zZSYgcmVzcG9uc2UsIFZlY3RvcjxjaGFyPiYgZGF0YSkKK3sKKyAgICBSZXNv
dXJjZUhhbmRsZTo6bG9hZFJlc291cmNlU3luY2hyb25vdXNseShjb250ZXh0LCByZXF1ZXN0LCBz
dG9yZWRDcmVkZW50aWFscywgZXJyb3IsIHJlc3BvbnNlLCBkYXRhKTsKK30KKworUmVmUHRyPE5l
dHNjYXBlUGx1Z0luU3RyZWFtTG9hZGVyPiBXZWJSZXNvdXJjZUxvYWRTY2hlZHVsZXI6OnNjaGVk
dWxlUGx1Z2luU3RyZWFtTG9hZChGcmFtZSogZnJhbWUsIE5ldHNjYXBlUGx1Z0luU3RyZWFtTG9h
ZGVyQ2xpZW50KiBjbGllbnQsIGNvbnN0IFJlc291cmNlUmVxdWVzdCYgcmVxdWVzdCkKIHsKICAg
ICBSZWZQdHI8TmV0c2NhcGVQbHVnSW5TdHJlYW1Mb2FkZXI+IGxvYWRlciA9IE5ldHNjYXBlUGx1
Z0luU3RyZWFtTG9hZGVyOjpjcmVhdGUoZnJhbWUsIGNsaWVudCwgcmVxdWVzdCk7CiAgICAgaWYg
KGxvYWRlcikKQEAgLTEzNiwxMSArMTIyLDExIEBAIFJlZlB0cjxOZXRzY2FwZVBsdWdJblN0cmVh
bUxvYWRlcj4gUmVzb3UKICAgICByZXR1cm4gbG9hZGVyOwogfQogCi12b2lkIFJlc291cmNlTG9h
ZFNjaGVkdWxlcjo6c2NoZWR1bGVMb2FkKFJlc291cmNlTG9hZGVyKiByZXNvdXJjZUxvYWRlcikK
K3ZvaWQgV2ViUmVzb3VyY2VMb2FkU2NoZWR1bGVyOjpzY2hlZHVsZUxvYWQoUmVzb3VyY2VMb2Fk
ZXIqIHJlc291cmNlTG9hZGVyKQogewogICAgIEFTU0VSVChyZXNvdXJjZUxvYWRlcik7CiAKLSAg
ICBMT0coUmVzb3VyY2VMb2FkaW5nLCAiUmVzb3VyY2VMb2FkU2NoZWR1bGVyOjpsb2FkIHJlc291
cmNlICVwICclcyciLCByZXNvdXJjZUxvYWRlciwgcmVzb3VyY2VMb2FkZXItPnVybCgpLnN0cmlu
ZygpLmxhdGluMSgpLmRhdGEoKSk7CisgICAgTE9HKFJlc291cmNlTG9hZGluZywgIldlYlJlc291
cmNlTG9hZFNjaGVkdWxlcjo6bG9hZCByZXNvdXJjZSAlcCAnJXMnIiwgcmVzb3VyY2VMb2FkZXIs
IHJlc291cmNlTG9hZGVyLT51cmwoKS5zdHJpbmcoKS5sYXRpbjEoKS5kYXRhKCkpOwogCiAjaWYg
UExBVEZPUk0oSU9TKQogICAgIC8vIElmIHRoZXJlJ3MgYSB3ZWIgYXJjaGl2ZSByZXNvdXJjZSBm
b3IgdGhpcyBVUkwsIHdlIGRvbid0IG5lZWQgdG8gc2NoZWR1bGUgdGhlIGxvYWQgc2luY2UgaXQg
d2lsbCBuZXZlciB0b3VjaCB0aGUgbmV0d29yay4KQEAgLTE5NCw3ICsxODAsNyBAQCB2b2lkIFJl
c291cmNlTG9hZFNjaGVkdWxlcjo6c2NoZWR1bGVMb2FkCiAgICAgc2NoZWR1bGVTZXJ2ZVBlbmRp
bmdSZXF1ZXN0cygpOwogfQogCi12b2lkIFJlc291cmNlTG9hZFNjaGVkdWxlcjo6cmVtb3ZlKFJl
c291cmNlTG9hZGVyKiByZXNvdXJjZUxvYWRlcikKK3ZvaWQgV2ViUmVzb3VyY2VMb2FkU2NoZWR1
bGVyOjpyZW1vdmUoUmVzb3VyY2VMb2FkZXIqIHJlc291cmNlTG9hZGVyKQogewogICAgIEFTU0VS
VChyZXNvdXJjZUxvYWRlcik7CiAKQEAgLTIxMywxMSArMTk5LDExIEBAIHZvaWQgUmVzb3VyY2VM
b2FkU2NoZWR1bGVyOjpyZW1vdmUoUmVzb3UKICAgICBzY2hlZHVsZVNlcnZlUGVuZGluZ1JlcXVl
c3RzKCk7CiB9CiAKLXZvaWQgUmVzb3VyY2VMb2FkU2NoZWR1bGVyOjpzZXREZWZlcnNMb2FkaW5n
KFJlc291cmNlTG9hZGVyKiwgYm9vbCkKK3ZvaWQgV2ViUmVzb3VyY2VMb2FkU2NoZWR1bGVyOjpz
ZXREZWZlcnNMb2FkaW5nKFJlc291cmNlTG9hZGVyKiwgYm9vbCkKIHsKIH0KIAotdm9pZCBSZXNv
dXJjZUxvYWRTY2hlZHVsZXI6OmNyb3NzT3JpZ2luUmVkaXJlY3RSZWNlaXZlZChSZXNvdXJjZUxv
YWRlciogcmVzb3VyY2VMb2FkZXIsIGNvbnN0IFVSTCYgcmVkaXJlY3RVUkwpCit2b2lkIFdlYlJl
c291cmNlTG9hZFNjaGVkdWxlcjo6Y3Jvc3NPcmlnaW5SZWRpcmVjdFJlY2VpdmVkKFJlc291cmNl
TG9hZGVyKiByZXNvdXJjZUxvYWRlciwgY29uc3QgVVJMJiByZWRpcmVjdFVSTCkKIHsKICAgICBI
b3N0SW5mb3JtYXRpb24qIG9sZEhvc3QgPSBob3N0Rm9yVVJMKHJlc291cmNlTG9hZGVyLT51cmwo
KSk7CiAgICAgQVNTRVJUKG9sZEhvc3QpOwpAQCAtMjMzLDkgKzIxOSw5IEBAIHZvaWQgUmVzb3Vy
Y2VMb2FkU2NoZWR1bGVyOjpjcm9zc09yaWdpblIKICAgICBvbGRIb3N0LT5yZW1vdmUocmVzb3Vy
Y2VMb2FkZXIpOwogfQogCi12b2lkIFJlc291cmNlTG9hZFNjaGVkdWxlcjo6c2VydmVQZW5kaW5n
UmVxdWVzdHMoUmVzb3VyY2VMb2FkUHJpb3JpdHkgbWluaW11bVByaW9yaXR5KQordm9pZCBXZWJS
ZXNvdXJjZUxvYWRTY2hlZHVsZXI6OnNlcnZlUGVuZGluZ1JlcXVlc3RzKFJlc291cmNlTG9hZFBy
aW9yaXR5IG1pbmltdW1Qcmlvcml0eSkKIHsKLSAgICBMT0coUmVzb3VyY2VMb2FkaW5nLCAiUmVz
b3VyY2VMb2FkU2NoZWR1bGVyOjpzZXJ2ZVBlbmRpbmdSZXF1ZXN0cy4gbV9zdXNwZW5kUGVuZGlu
Z1JlcXVlc3RzQ291bnQ9JWQiLCBtX3N1c3BlbmRQZW5kaW5nUmVxdWVzdHNDb3VudCk7IAorICAg
IExPRyhSZXNvdXJjZUxvYWRpbmcsICJXZWJSZXNvdXJjZUxvYWRTY2hlZHVsZXI6OnNlcnZlUGVu
ZGluZ1JlcXVlc3RzLiBtX3N1c3BlbmRQZW5kaW5nUmVxdWVzdHNDb3VudD0lZCIsIG1fc3VzcGVu
ZFBlbmRpbmdSZXF1ZXN0c0NvdW50KTsgCiAgICAgaWYgKGlzU3VzcGVuZGluZ1BlbmRpbmdSZXF1
ZXN0cygpKQogICAgICAgICByZXR1cm47CiAKQEAgLTI1NCw5ICsyNDAsOSBAQCB2b2lkIFJlc291
cmNlTG9hZFNjaGVkdWxlcjo6c2VydmVQZW5kaW5nCiAgICAgfQogfQogCi12b2lkIFJlc291cmNl
TG9hZFNjaGVkdWxlcjo6c2VydmVQZW5kaW5nUmVxdWVzdHMoSG9zdEluZm9ybWF0aW9uKiBob3N0
LCBSZXNvdXJjZUxvYWRQcmlvcml0eSBtaW5pbXVtUHJpb3JpdHkpCit2b2lkIFdlYlJlc291cmNl
TG9hZFNjaGVkdWxlcjo6c2VydmVQZW5kaW5nUmVxdWVzdHMoSG9zdEluZm9ybWF0aW9uKiBob3N0
LCBSZXNvdXJjZUxvYWRQcmlvcml0eSBtaW5pbXVtUHJpb3JpdHkpCiB7Ci0gICAgTE9HKFJlc291
cmNlTG9hZGluZywgIlJlc291cmNlTG9hZFNjaGVkdWxlcjo6c2VydmVQZW5kaW5nUmVxdWVzdHMg
SG9zdEluZm9ybWF0aW9uLm1fbmFtZT0nJXMnIiwgaG9zdC0+bmFtZSgpLmxhdGluMSgpLmRhdGEo
KSk7CisgICAgTE9HKFJlc291cmNlTG9hZGluZywgIldlYlJlc291cmNlTG9hZFNjaGVkdWxlcjo6
c2VydmVQZW5kaW5nUmVxdWVzdHMgSG9zdEluZm9ybWF0aW9uLm1fbmFtZT0nJXMnIiwgaG9zdC0+
bmFtZSgpLmxhdGluMSgpLmRhdGEoKSk7CiAKICAgICBhdXRvIHByaW9yaXR5ID0gUmVzb3VyY2VM
b2FkUHJpb3JpdHk6OkhpZ2hlc3Q7CiAgICAgd2hpbGUgKHRydWUpIHsKQEAgLTI4OCwxMiArMjc0
LDEyIEBAIHZvaWQgUmVzb3VyY2VMb2FkU2NoZWR1bGVyOjpzZXJ2ZVBlbmRpbmcKICAgICB9CiB9
CiAKLXZvaWQgUmVzb3VyY2VMb2FkU2NoZWR1bGVyOjpzdXNwZW5kUGVuZGluZ1JlcXVlc3RzKCkK
K3ZvaWQgV2ViUmVzb3VyY2VMb2FkU2NoZWR1bGVyOjpzdXNwZW5kUGVuZGluZ1JlcXVlc3RzKCkK
IHsKICAgICArK21fc3VzcGVuZFBlbmRpbmdSZXF1ZXN0c0NvdW50OwogfQogCi12b2lkIFJlc291
cmNlTG9hZFNjaGVkdWxlcjo6cmVzdW1lUGVuZGluZ1JlcXVlc3RzKCkKK3ZvaWQgV2ViUmVzb3Vy
Y2VMb2FkU2NoZWR1bGVyOjpyZXN1bWVQZW5kaW5nUmVxdWVzdHMoKQogewogICAgIEFTU0VSVCht
X3N1c3BlbmRQZW5kaW5nUmVxdWVzdHNDb3VudCk7CiAgICAgLS1tX3N1c3BlbmRQZW5kaW5nUmVx
dWVzdHNDb3VudDsKQEAgLTMwMywzMSArMjg5LDMxIEBAIHZvaWQgUmVzb3VyY2VMb2FkU2NoZWR1
bGVyOjpyZXN1bWVQZW5kaW4KICAgICAgICAgc2NoZWR1bGVTZXJ2ZVBlbmRpbmdSZXF1ZXN0cygp
OwogfQogICAgIAotdm9pZCBSZXNvdXJjZUxvYWRTY2hlZHVsZXI6OnNjaGVkdWxlU2VydmVQZW5k
aW5nUmVxdWVzdHMoKQordm9pZCBXZWJSZXNvdXJjZUxvYWRTY2hlZHVsZXI6OnNjaGVkdWxlU2Vy
dmVQZW5kaW5nUmVxdWVzdHMoKQogewotICAgIExPRyhSZXNvdXJjZUxvYWRpbmcsICJSZXNvdXJj
ZUxvYWRTY2hlZHVsZXI6OnNjaGVkdWxlU2VydmVQZW5kaW5nUmVxdWVzdHMsIG1fcmVxdWVzdFRp
bWVyLmlzQWN0aXZlKCk9JXUiLCBtX3JlcXVlc3RUaW1lci5pc0FjdGl2ZSgpKTsKKyAgICBMT0co
UmVzb3VyY2VMb2FkaW5nLCAiV2ViUmVzb3VyY2VMb2FkU2NoZWR1bGVyOjpzY2hlZHVsZVNlcnZl
UGVuZGluZ1JlcXVlc3RzLCBtX3JlcXVlc3RUaW1lci5pc0FjdGl2ZSgpPSV1IiwgbV9yZXF1ZXN0
VGltZXIuaXNBY3RpdmUoKSk7CiAgICAgaWYgKCFtX3JlcXVlc3RUaW1lci5pc0FjdGl2ZSgpKQog
ICAgICAgICBtX3JlcXVlc3RUaW1lci5zdGFydE9uZVNob3QoMCk7CiB9CiAKLXZvaWQgUmVzb3Vy
Y2VMb2FkU2NoZWR1bGVyOjpyZXF1ZXN0VGltZXJGaXJlZCgpCit2b2lkIFdlYlJlc291cmNlTG9h
ZFNjaGVkdWxlcjo6cmVxdWVzdFRpbWVyRmlyZWQoKQogewotICAgIExPRyhSZXNvdXJjZUxvYWRp
bmcsICJSZXNvdXJjZUxvYWRTY2hlZHVsZXI6OnJlcXVlc3RUaW1lckZpcmVkXG4iKTsKKyAgICBM
T0coUmVzb3VyY2VMb2FkaW5nLCAiV2ViUmVzb3VyY2VMb2FkU2NoZWR1bGVyOjpyZXF1ZXN0VGlt
ZXJGaXJlZFxuIik7CiAgICAgc2VydmVQZW5kaW5nUmVxdWVzdHMoKTsKIH0KIAotUmVzb3VyY2VM
b2FkU2NoZWR1bGVyOjpIb3N0SW5mb3JtYXRpb246Okhvc3RJbmZvcm1hdGlvbihjb25zdCBTdHJp
bmcmIG5hbWUsIHVuc2lnbmVkIG1heFJlcXVlc3RzSW5GbGlnaHQpCitXZWJSZXNvdXJjZUxvYWRT
Y2hlZHVsZXI6Okhvc3RJbmZvcm1hdGlvbjo6SG9zdEluZm9ybWF0aW9uKGNvbnN0IFN0cmluZyYg
bmFtZSwgdW5zaWduZWQgbWF4UmVxdWVzdHNJbkZsaWdodCkKICAgICA6IG1fbmFtZShuYW1lKQog
ICAgICwgbV9tYXhSZXF1ZXN0c0luRmxpZ2h0KG1heFJlcXVlc3RzSW5GbGlnaHQpCiB7CiB9CiAK
LVJlc291cmNlTG9hZFNjaGVkdWxlcjo6SG9zdEluZm9ybWF0aW9uOjp+SG9zdEluZm9ybWF0aW9u
KCkKK1dlYlJlc291cmNlTG9hZFNjaGVkdWxlcjo6SG9zdEluZm9ybWF0aW9uOjp+SG9zdEluZm9y
bWF0aW9uKCkKIHsKICAgICBBU1NFUlQoIWhhc1JlcXVlc3RzKCkpOwogfQogCi11bnNpZ25lZCBS
ZXNvdXJjZUxvYWRTY2hlZHVsZXI6Okhvc3RJbmZvcm1hdGlvbjo6cHJpb3JpdHlUb0luZGV4KFJl
c291cmNlTG9hZFByaW9yaXR5IHByaW9yaXR5KQordW5zaWduZWQgV2ViUmVzb3VyY2VMb2FkU2No
ZWR1bGVyOjpIb3N0SW5mb3JtYXRpb246OnByaW9yaXR5VG9JbmRleChSZXNvdXJjZUxvYWRQcmlv
cml0eSBwcmlvcml0eSkKIHsKICAgICBzd2l0Y2ggKHByaW9yaXR5KSB7CiAgICAgY2FzZSBSZXNv
dXJjZUxvYWRQcmlvcml0eTo6VmVyeUxvdzoKQEAgLTM0NSwxOCArMzMxLDE4IEBAIHVuc2lnbmVk
IFJlc291cmNlTG9hZFNjaGVkdWxlcjo6SG9zdEluZm8KICAgICByZXR1cm4gMDsKIH0KIAotdm9p
ZCBSZXNvdXJjZUxvYWRTY2hlZHVsZXI6Okhvc3RJbmZvcm1hdGlvbjo6c2NoZWR1bGUoUmVzb3Vy
Y2VMb2FkZXIqIHJlc291cmNlTG9hZGVyLCBSZXNvdXJjZUxvYWRQcmlvcml0eSBwcmlvcml0eSkK
K3ZvaWQgV2ViUmVzb3VyY2VMb2FkU2NoZWR1bGVyOjpIb3N0SW5mb3JtYXRpb246OnNjaGVkdWxl
KFJlc291cmNlTG9hZGVyKiByZXNvdXJjZUxvYWRlciwgUmVzb3VyY2VMb2FkUHJpb3JpdHkgcHJp
b3JpdHkpCiB7CiAgICAgbV9yZXF1ZXN0c1BlbmRpbmdbcHJpb3JpdHlUb0luZGV4KHByaW9yaXR5
KV0uYXBwZW5kKHJlc291cmNlTG9hZGVyKTsKIH0KICAgICAKLXZvaWQgUmVzb3VyY2VMb2FkU2No
ZWR1bGVyOjpIb3N0SW5mb3JtYXRpb246OmFkZExvYWRJblByb2dyZXNzKFJlc291cmNlTG9hZGVy
KiByZXNvdXJjZUxvYWRlcikKK3ZvaWQgV2ViUmVzb3VyY2VMb2FkU2NoZWR1bGVyOjpIb3N0SW5m
b3JtYXRpb246OmFkZExvYWRJblByb2dyZXNzKFJlc291cmNlTG9hZGVyKiByZXNvdXJjZUxvYWRl
cikKIHsKICAgICBMT0coUmVzb3VyY2VMb2FkaW5nLCAiSG9zdEluZm9ybWF0aW9uICclcycgbG9h
ZGluZyAnJXMnLiBDdXJyZW50IGNvdW50ICVkIiwgbV9uYW1lLmxhdGluMSgpLmRhdGEoKSwgcmVz
b3VyY2VMb2FkZXItPnVybCgpLnN0cmluZygpLmxhdGluMSgpLmRhdGEoKSwgbV9yZXF1ZXN0c0xv
YWRpbmcuc2l6ZSgpKTsKICAgICBtX3JlcXVlc3RzTG9hZGluZy5hZGQocmVzb3VyY2VMb2FkZXIp
OwogfQogICAgIAotdm9pZCBSZXNvdXJjZUxvYWRTY2hlZHVsZXI6Okhvc3RJbmZvcm1hdGlvbjo6
cmVtb3ZlKFJlc291cmNlTG9hZGVyKiByZXNvdXJjZUxvYWRlcikKK3ZvaWQgV2ViUmVzb3VyY2VM
b2FkU2NoZWR1bGVyOjpIb3N0SW5mb3JtYXRpb246OnJlbW92ZShSZXNvdXJjZUxvYWRlciogcmVz
b3VyY2VMb2FkZXIpCiB7CiAgICAgaWYgKG1fcmVxdWVzdHNMb2FkaW5nLnJlbW92ZShyZXNvdXJj
ZUxvYWRlcikpCiAgICAgICAgIHJldHVybjsKQEAgLTM3MSw3ICszNTcsNyBAQCB2b2lkIFJlc291
cmNlTG9hZFNjaGVkdWxlcjo6SG9zdEluZm9ybWF0CiAgICAgfQogfQogCi1ib29sIFJlc291cmNl
TG9hZFNjaGVkdWxlcjo6SG9zdEluZm9ybWF0aW9uOjpoYXNSZXF1ZXN0cygpIGNvbnN0Citib29s
IFdlYlJlc291cmNlTG9hZFNjaGVkdWxlcjo6SG9zdEluZm9ybWF0aW9uOjpoYXNSZXF1ZXN0cygp
IGNvbnN0CiB7CiAgICAgaWYgKCFtX3JlcXVlc3RzTG9hZGluZy5pc0VtcHR5KCkpCiAgICAgICAg
IHJldHVybiB0cnVlOwpAQCAtMzgyLDExICszNjgsMTYgQEAgYm9vbCBSZXNvdXJjZUxvYWRTY2hl
ZHVsZXI6Okhvc3RJbmZvcm1hdAogICAgIHJldHVybiBmYWxzZTsKIH0KIAotYm9vbCBSZXNvdXJj
ZUxvYWRTY2hlZHVsZXI6Okhvc3RJbmZvcm1hdGlvbjo6bGltaXRSZXF1ZXN0cyhSZXNvdXJjZUxv
YWRQcmlvcml0eSBwcmlvcml0eSkgY29uc3QgCitib29sIFdlYlJlc291cmNlTG9hZFNjaGVkdWxl
cjo6SG9zdEluZm9ybWF0aW9uOjpsaW1pdFJlcXVlc3RzKFJlc291cmNlTG9hZFByaW9yaXR5IHBy
aW9yaXR5KSBjb25zdCAKIHsKICAgICBpZiAocHJpb3JpdHkgPT0gUmVzb3VyY2VMb2FkUHJpb3Jp
dHk6OlZlcnlMb3cgJiYgIW1fcmVxdWVzdHNMb2FkaW5nLmlzRW1wdHkoKSkKICAgICAgICAgcmV0
dXJuIHRydWU7Ci0gICAgcmV0dXJuIG1fcmVxdWVzdHNMb2FkaW5nLnNpemUoKSA+PSAocmVzb3Vy
Y2VMb2FkU2NoZWR1bGVyKCktPmlzU2VyaWFsTG9hZGluZ0VuYWJsZWQoKSA/IDEgOiBtX21heFJl
cXVlc3RzSW5GbGlnaHQpOworICAgIHJldHVybiBtX3JlcXVlc3RzTG9hZGluZy5zaXplKCkgPj0g
KHdlYlJlc291cmNlTG9hZFNjaGVkdWxlcigpLmlzU2VyaWFsTG9hZGluZ0VuYWJsZWQoKSA/IDEg
OiBtX21heFJlcXVlc3RzSW5GbGlnaHQpOworfQorCit2b2lkIFdlYlJlc291cmNlTG9hZFNjaGVk
dWxlcjo6Y3JlYXRlUGluZ0hhbmRsZShOZXR3b3JraW5nQ29udGV4dCogbmV0d29ya2luZ0NvbnRl
eHQsIFJlc291cmNlUmVxdWVzdCYgcmVxdWVzdCwgYm9vbCBzaG91bGRVc2VDcmVkZW50aWFsU3Rv
cmFnZSkKK3sKKyAgICAvLyBQaW5nSGFuZGxlIG1hbmFnZXMgaXRzIG93biBsaWZldGltZSwgZGVs
ZXRpbmcgaXRzZWxmIHdoZW4gaXRzIHB1cnBvc2UgaGFzIGJlZW4gZnVsZmlsbGVkLgorICAgIG5l
dyBQaW5nSGFuZGxlKG5ldHdvcmtpbmdDb250ZXh0LCByZXF1ZXN0LCBzaG91bGRVc2VDcmVkZW50
aWFsU3RvcmFnZSwgUGluZ0hhbmRsZTo6VXNlc0FzeW5jQ2FsbGJhY2tzOjpObyk7CiB9CiAKLX0g
Ly8gbmFtZXNwYWNlIFdlYkNvcmUKSW5kZXg6IFNvdXJjZS9XZWJLaXQvV2ViQ29yZVN1cHBvcnQv
V2ViUmVzb3VyY2VMb2FkU2NoZWR1bGVyLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9X
ZWJDb3JlU3VwcG9ydC9XZWJSZXNvdXJjZUxvYWRTY2hlZHVsZXIuaAkocmV2aXNpb24gMTkyODgw
KQkoZnJvbSBTb3VyY2UvV2ViQ29yZS9sb2FkZXIvUmVzb3VyY2VMb2FkU2NoZWR1bGVyLmg6MTky
ODgwKQorKysgU291cmNlL1dlYktpdC9XZWJDb3JlU3VwcG9ydC9XZWJSZXNvdXJjZUxvYWRTY2hl
ZHVsZXIuaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDEzNCBAQAorLyoKKyAgICBDb3B5cmln
aHQgKEMpIDE5OTggTGFycyBLbm9sbCAoa25vbGxAbXBpLWhkLm1wZy5kZSkKKyAgICBDb3B5cmln
aHQgKEMpIDIwMDEgRGlyayBNdWVsbGVyIDxtdWVsbGVyQGtkZS5vcmc+CisgICAgQ29weXJpZ2h0
IChDKSAyMDA0LCAyMDA2LCAyMDA3LCAyMDA4IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KKyAgICBDb3B5cmlnaHQgKEMpIDIwMTAgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KKworICAgIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJp
YnV0ZSBpdCBhbmQvb3IKKyAgICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUg
TGlicmFyeSBHZW5lcmFsIFB1YmxpYworICAgIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBG
cmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICAgIHZlcnNpb24gMiBvZiB0aGUgTGlj
ZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKworICAgIFRoaXMg
bGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVs
LAorICAgIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVk
IHdhcnJhbnR5IG9mCisgICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElD
VUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAgICBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExp
Y2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKworICAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBh
IGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAgICBhbG9u
ZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3
cml0ZSB0bworICAgIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5r
bGluIFN0cmVldCwgRmlmdGggRmxvb3IsCisgICAgQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0Eu
CisgKi8KKworI2lmbmRlZiBSZXNvdXJjZUxvYWRTY2hlZHVsZXJfaAorI2RlZmluZSBSZXNvdXJj
ZUxvYWRTY2hlZHVsZXJfaAorCisjaW5jbHVkZSAiRnJhbWVMb2FkZXJUeXBlcy5oIgorI2luY2x1
ZGUgIlJlc291cmNlTG9hZGVyT3B0aW9ucy5oIgorI2luY2x1ZGUgIlJlc291cmNlTG9hZFByaW9y
aXR5LmgiCisjaW5jbHVkZSAiVGltZXIuaCIKKyNpbmNsdWRlIDxhcnJheT4KKyNpbmNsdWRlIDx3
dGYvRGVxdWUuaD4KKyNpbmNsdWRlIDx3dGYvSGFzaE1hcC5oPgorI2luY2x1ZGUgPHd0Zi9IYXNo
U2V0Lmg+CisjaW5jbHVkZSA8d3RmL05vbmNvcHlhYmxlLmg+CisjaW5jbHVkZSA8d3RmL3RleHQv
U3RyaW5nSGFzaC5oPgorI2luY2x1ZGUgPHd0Zi90ZXh0L1dURlN0cmluZy5oPgorCituYW1lc3Bh
Y2UgV2ViQ29yZSB7CisKK2NsYXNzIENhY2hlZFJlc291cmNlOworY2xhc3MgRnJhbWU7CitjbGFz
cyBVUkw7CitjbGFzcyBOZXRzY2FwZVBsdWdJblN0cmVhbUxvYWRlcjsKK2NsYXNzIE5ldHNjYXBl
UGx1Z0luU3RyZWFtTG9hZGVyQ2xpZW50OworY2xhc3MgUmVzb3VyY2VMb2FkZXI7CitjbGFzcyBS
ZXNvdXJjZVJlcXVlc3Q7CitjbGFzcyBTdWJyZXNvdXJjZUxvYWRlcjsKKworY2xhc3MgUmVzb3Vy
Y2VMb2FkU2NoZWR1bGVyIHsKKyAgICBXVEZfTUFLRV9OT05DT1BZQUJMRShSZXNvdXJjZUxvYWRT
Y2hlZHVsZXIpOyBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsKK3B1YmxpYzoKKyAgICBXRUJDT1JF
X0VYUE9SVCBmcmllbmQgUmVzb3VyY2VMb2FkU2NoZWR1bGVyKiByZXNvdXJjZUxvYWRTY2hlZHVs
ZXIoKTsKKworICAgIFdFQkNPUkVfRVhQT1JUIHZpcnR1YWwgUmVmUHRyPFN1YnJlc291cmNlTG9h
ZGVyPiBzY2hlZHVsZVN1YnJlc291cmNlTG9hZChGcmFtZSosIENhY2hlZFJlc291cmNlKiwgY29u
c3QgUmVzb3VyY2VSZXF1ZXN0JiwgY29uc3QgUmVzb3VyY2VMb2FkZXJPcHRpb25zJik7CisgICAg
V0VCQ09SRV9FWFBPUlQgdmlydHVhbCBSZWZQdHI8TmV0c2NhcGVQbHVnSW5TdHJlYW1Mb2FkZXI+
IHNjaGVkdWxlUGx1Z2luU3RyZWFtTG9hZChGcmFtZSosIE5ldHNjYXBlUGx1Z0luU3RyZWFtTG9h
ZGVyQ2xpZW50KiwgY29uc3QgUmVzb3VyY2VSZXF1ZXN0Jik7CisgICAgV0VCQ09SRV9FWFBPUlQg
dmlydHVhbCB2b2lkIHJlbW92ZShSZXNvdXJjZUxvYWRlciopOworICAgIHZpcnR1YWwgdm9pZCBz
ZXREZWZlcnNMb2FkaW5nKFJlc291cmNlTG9hZGVyKiwgYm9vbCk7CisgICAgdmlydHVhbCB2b2lk
IGNyb3NzT3JpZ2luUmVkaXJlY3RSZWNlaXZlZChSZXNvdXJjZUxvYWRlciosIGNvbnN0IFVSTCYg
cmVkaXJlY3RVUkwpOworICAgIAorICAgIFdFQkNPUkVfRVhQT1JUIHZpcnR1YWwgdm9pZCBzZXJ2
ZVBlbmRpbmdSZXF1ZXN0cyhSZXNvdXJjZUxvYWRQcmlvcml0eSBtaW5pbXVtUHJpb3JpdHkgPSBS
ZXNvdXJjZUxvYWRQcmlvcml0eTo6VmVyeUxvdyk7CisgICAgV0VCQ09SRV9FWFBPUlQgdmlydHVh
bCB2b2lkIHN1c3BlbmRQZW5kaW5nUmVxdWVzdHMoKTsKKyAgICBXRUJDT1JFX0VYUE9SVCB2aXJ0
dWFsIHZvaWQgcmVzdW1lUGVuZGluZ1JlcXVlc3RzKCk7CisgICAgCisgICAgYm9vbCBpc1Nlcmlh
bExvYWRpbmdFbmFibGVkKCkgY29uc3QgeyByZXR1cm4gbV9pc1NlcmlhbExvYWRpbmdFbmFibGVk
OyB9CisgICAgdmlydHVhbCB2b2lkIHNldFNlcmlhbExvYWRpbmdFbmFibGVkKGJvb2wgYikgeyBt
X2lzU2VyaWFsTG9hZGluZ0VuYWJsZWQgPSBiOyB9CisKKyAgICBjbGFzcyBTdXNwZW5kZXIgewor
ICAgIHB1YmxpYzoKKyAgICAgICAgZXhwbGljaXQgU3VzcGVuZGVyKFJlc291cmNlTG9hZFNjaGVk
dWxlciYgc2NoZWR1bGVyKSA6IG1fc2NoZWR1bGVyKHNjaGVkdWxlcikgeyBtX3NjaGVkdWxlci5z
dXNwZW5kUGVuZGluZ1JlcXVlc3RzKCk7IH0KKyAgICAgICAgflN1c3BlbmRlcigpIHsgbV9zY2hl
ZHVsZXIucmVzdW1lUGVuZGluZ1JlcXVlc3RzKCk7IH0KKyAgICBwcml2YXRlOgorICAgICAgICBS
ZXNvdXJjZUxvYWRTY2hlZHVsZXImIG1fc2NoZWR1bGVyOworICAgIH07CisKK3Byb3RlY3RlZDoK
KyAgICBXRUJDT1JFX0VYUE9SVCBSZXNvdXJjZUxvYWRTY2hlZHVsZXIoKTsKKyAgICBXRUJDT1JF
X0VYUE9SVCB2aXJ0dWFsIH5SZXNvdXJjZUxvYWRTY2hlZHVsZXIoKTsKKworcHJpdmF0ZToKKyAg
ICB2b2lkIHNjaGVkdWxlTG9hZChSZXNvdXJjZUxvYWRlciopOworICAgIHZvaWQgc2NoZWR1bGVT
ZXJ2ZVBlbmRpbmdSZXF1ZXN0cygpOworICAgIHZvaWQgcmVxdWVzdFRpbWVyRmlyZWQoKTsKKwor
ICAgIGJvb2wgaXNTdXNwZW5kaW5nUGVuZGluZ1JlcXVlc3RzKCkgY29uc3QgeyByZXR1cm4gISFt
X3N1c3BlbmRQZW5kaW5nUmVxdWVzdHNDb3VudDsgfQorCisgICAgY2xhc3MgSG9zdEluZm9ybWF0
aW9uIHsKKyAgICAgICAgV1RGX01BS0VfTk9OQ09QWUFCTEUoSG9zdEluZm9ybWF0aW9uKTsgV1RG
X01BS0VfRkFTVF9BTExPQ0FURUQ7CisgICAgcHVibGljOgorICAgICAgICBIb3N0SW5mb3JtYXRp
b24oY29uc3QgU3RyaW5nJiwgdW5zaWduZWQpOworICAgICAgICB+SG9zdEluZm9ybWF0aW9uKCk7
CisgICAgICAgIAorICAgICAgICBjb25zdCBTdHJpbmcmIG5hbWUoKSBjb25zdCB7IHJldHVybiBt
X25hbWU7IH0KKyAgICAgICAgdm9pZCBzY2hlZHVsZShSZXNvdXJjZUxvYWRlciosIFJlc291cmNl
TG9hZFByaW9yaXR5ID0gUmVzb3VyY2VMb2FkUHJpb3JpdHk6OlZlcnlMb3cpOworICAgICAgICB2
b2lkIGFkZExvYWRJblByb2dyZXNzKFJlc291cmNlTG9hZGVyKik7CisgICAgICAgIHZvaWQgcmVt
b3ZlKFJlc291cmNlTG9hZGVyKik7CisgICAgICAgIGJvb2wgaGFzUmVxdWVzdHMoKSBjb25zdDsK
KyAgICAgICAgYm9vbCBsaW1pdFJlcXVlc3RzKFJlc291cmNlTG9hZFByaW9yaXR5KSBjb25zdDsK
KworICAgICAgICB0eXBlZGVmIERlcXVlPFJlZlB0cjxSZXNvdXJjZUxvYWRlcj4+IFJlcXVlc3RR
dWV1ZTsKKyAgICAgICAgUmVxdWVzdFF1ZXVlJiByZXF1ZXN0c1BlbmRpbmcoUmVzb3VyY2VMb2Fk
UHJpb3JpdHkgcHJpb3JpdHkpIHsgcmV0dXJuIG1fcmVxdWVzdHNQZW5kaW5nW3ByaW9yaXR5VG9J
bmRleChwcmlvcml0eSldOyB9CisKKyAgICBwcml2YXRlOgorICAgICAgICBzdGF0aWMgdW5zaWdu
ZWQgcHJpb3JpdHlUb0luZGV4KFJlc291cmNlTG9hZFByaW9yaXR5KTsKKworICAgICAgICBzdGQ6
OmFycmF5PFJlcXVlc3RRdWV1ZSwgcmVzb3VyY2VMb2FkUHJpb3JpdHlDb3VudD4gbV9yZXF1ZXN0
c1BlbmRpbmc7CisgICAgICAgIHR5cGVkZWYgSGFzaFNldDxSZWZQdHI8UmVzb3VyY2VMb2FkZXI+
PiBSZXF1ZXN0TWFwOworICAgICAgICBSZXF1ZXN0TWFwIG1fcmVxdWVzdHNMb2FkaW5nOworICAg
ICAgICBjb25zdCBTdHJpbmcgbV9uYW1lOworICAgICAgICBjb25zdCB1bnNpZ25lZCBtX21heFJl
cXVlc3RzSW5GbGlnaHQ7CisgICAgfTsKKworICAgIGVudW0gQ3JlYXRlSG9zdFBvbGljeSB7Cisg
ICAgICAgIENyZWF0ZUlmTm90Rm91bmQsCisgICAgICAgIEZpbmRPbmx5CisgICAgfTsKKyAgICAK
KyAgICBIb3N0SW5mb3JtYXRpb24qIGhvc3RGb3JVUkwoY29uc3QgVVJMJiwgQ3JlYXRlSG9zdFBv
bGljeSA9IEZpbmRPbmx5KTsKKyAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIHNlcnZlUGVuZGluZ1Jl
cXVlc3RzKEhvc3RJbmZvcm1hdGlvbiosIFJlc291cmNlTG9hZFByaW9yaXR5KTsKKworICAgIHR5
cGVkZWYgSGFzaE1hcDxTdHJpbmcsIEhvc3RJbmZvcm1hdGlvbiosIFN0cmluZ0hhc2g+IEhvc3RN
YXA7CisgICAgSG9zdE1hcCBtX2hvc3RzOworICAgIEhvc3RJbmZvcm1hdGlvbiogbV9ub25IVFRQ
UHJvdG9jb2xIb3N0OworICAgICAgICAKKyAgICBUaW1lciBtX3JlcXVlc3RUaW1lcjsKKworICAg
IHVuc2lnbmVkIG1fc3VzcGVuZFBlbmRpbmdSZXF1ZXN0c0NvdW50OworICAgIGJvb2wgbV9pc1Nl
cmlhbExvYWRpbmdFbmFibGVkOworfTsKKworV0VCQ09SRV9FWFBPUlQgUmVzb3VyY2VMb2FkU2No
ZWR1bGVyKiByZXNvdXJjZUxvYWRTY2hlZHVsZXIoKTsKKworfQorCisjZW5kaWYKSW5kZXg6IFNv
dXJjZS9XZWJLaXQvV2ViQ29yZVN1cHBvcnQvV2ViUmVzb3VyY2VMb2FkU2NoZWR1bGVyLmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1dlYktpdC9XZWJDb3JlU3VwcG9ydC9XZWJSZXNvdXJjZUxvYWRT
Y2hlZHVsZXIuaAkod29ya2luZyBjb3B5KQorKysgU291cmNlL1dlYktpdC9XZWJDb3JlU3VwcG9y
dC9XZWJSZXNvdXJjZUxvYWRTY2hlZHVsZXIuaAkod29ya2luZyBjb3B5KQpAQCAtMSw3ICsxLDcg
QEAKIC8qCiAgICAgQ29weXJpZ2h0IChDKSAxOTk4IExhcnMgS25vbGwgKGtub2xsQG1waS1oZC5t
cGcuZGUpCiAgICAgQ29weXJpZ2h0IChDKSAyMDAxIERpcmsgTXVlbGxlciA8bXVlbGxlckBrZGUu
b3JnPgotICAgIENvcHlyaWdodCAoQykgMjAwNCwgMjAwNiwgMjAwNywgMjAwOCBBcHBsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgICAgQ29weXJpZ2h0IChDKSAyMDA0LCAyMDA2LTIwMDgs
IDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICAgIENvcHlyaWdodCAoQykg
MjAxMCBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogCiAgICAgVGhpcyBsaWJyYXJ5
IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgpAQCAtMjAs
MTMgKzIwLDE0IEBACiAgICAgQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCiAgKi8KIAotI2lm
bmRlZiBSZXNvdXJjZUxvYWRTY2hlZHVsZXJfaAotI2RlZmluZSBSZXNvdXJjZUxvYWRTY2hlZHVs
ZXJfaAorI2lmbmRlZiBXZWJSZXNvdXJjZUxvYWRTY2hlZHVsZXJfaAorI2RlZmluZSBXZWJSZXNv
dXJjZUxvYWRTY2hlZHVsZXJfaAogCi0jaW5jbHVkZSAiRnJhbWVMb2FkZXJUeXBlcy5oIgotI2lu
Y2x1ZGUgIlJlc291cmNlTG9hZGVyT3B0aW9ucy5oIgotI2luY2x1ZGUgIlJlc291cmNlTG9hZFBy
aW9yaXR5LmgiCi0jaW5jbHVkZSAiVGltZXIuaCIKKyNpbmNsdWRlIDxXZWJDb3JlL0ZyYW1lTG9h
ZGVyVHlwZXMuaD4KKyNpbmNsdWRlIDxXZWJDb3JlL0xvYWRlclN0cmF0ZWd5Lmg+CisjaW5jbHVk
ZSA8V2ViQ29yZS9SZXNvdXJjZUxvYWRQcmlvcml0eS5oPgorI2luY2x1ZGUgPFdlYkNvcmUvUmVz
b3VyY2VMb2FkZXJPcHRpb25zLmg+CisjaW5jbHVkZSA8V2ViQ29yZS9UaW1lci5oPgogI2luY2x1
ZGUgPGFycmF5PgogI2luY2x1ZGUgPHd0Zi9EZXF1ZS5oPgogI2luY2x1ZGUgPHd0Zi9IYXNoTWFw
Lmg+CkBAIC0zNSw0OSArMzYsMzcgQEAKICNpbmNsdWRlIDx3dGYvdGV4dC9TdHJpbmdIYXNoLmg+
CiAjaW5jbHVkZSA8d3RmL3RleHQvV1RGU3RyaW5nLmg+CiAKLW5hbWVzcGFjZSBXZWJDb3JlIHsK
K2NsYXNzIFdlYlJlc291cmNlTG9hZFNjaGVkdWxlcjsKIAotY2xhc3MgQ2FjaGVkUmVzb3VyY2U7
Ci1jbGFzcyBGcmFtZTsKLWNsYXNzIFVSTDsKLWNsYXNzIE5ldHNjYXBlUGx1Z0luU3RyZWFtTG9h
ZGVyOwotY2xhc3MgTmV0c2NhcGVQbHVnSW5TdHJlYW1Mb2FkZXJDbGllbnQ7Ci1jbGFzcyBSZXNv
dXJjZUxvYWRlcjsKLWNsYXNzIFJlc291cmNlUmVxdWVzdDsKLWNsYXNzIFN1YnJlc291cmNlTG9h
ZGVyOworV2ViUmVzb3VyY2VMb2FkU2NoZWR1bGVyJiB3ZWJSZXNvdXJjZUxvYWRTY2hlZHVsZXIo
KTsKIAotY2xhc3MgUmVzb3VyY2VMb2FkU2NoZWR1bGVyIHsKLSAgICBXVEZfTUFLRV9OT05DT1BZ
QUJMRShSZXNvdXJjZUxvYWRTY2hlZHVsZXIpOyBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsKK2Ns
YXNzIFdlYlJlc291cmNlTG9hZFNjaGVkdWxlciA6IHB1YmxpYyBXZWJDb3JlOjpMb2FkZXJTdHJh
dGVneSB7CisgICAgV1RGX01BS0VfTk9OQ09QWUFCTEUoV2ViUmVzb3VyY2VMb2FkU2NoZWR1bGVy
KTsgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7CiBwdWJsaWM6Ci0gICAgV0VCQ09SRV9FWFBPUlQg
ZnJpZW5kIFJlc291cmNlTG9hZFNjaGVkdWxlciogcmVzb3VyY2VMb2FkU2NoZWR1bGVyKCk7Cisg
ICAgV2ViUmVzb3VyY2VMb2FkU2NoZWR1bGVyKCk7CiAKLSAgICBXRUJDT1JFX0VYUE9SVCB2aXJ0
dWFsIFJlZlB0cjxTdWJyZXNvdXJjZUxvYWRlcj4gc2NoZWR1bGVTdWJyZXNvdXJjZUxvYWQoRnJh
bWUqLCBDYWNoZWRSZXNvdXJjZSosIGNvbnN0IFJlc291cmNlUmVxdWVzdCYsIGNvbnN0IFJlc291
cmNlTG9hZGVyT3B0aW9ucyYpOwotICAgIFdFQkNPUkVfRVhQT1JUIHZpcnR1YWwgUmVmUHRyPE5l
dHNjYXBlUGx1Z0luU3RyZWFtTG9hZGVyPiBzY2hlZHVsZVBsdWdpblN0cmVhbUxvYWQoRnJhbWUq
LCBOZXRzY2FwZVBsdWdJblN0cmVhbUxvYWRlckNsaWVudCosIGNvbnN0IFJlc291cmNlUmVxdWVz
dCYpOwotICAgIFdFQkNPUkVfRVhQT1JUIHZpcnR1YWwgdm9pZCByZW1vdmUoUmVzb3VyY2VMb2Fk
ZXIqKTsKLSAgICB2aXJ0dWFsIHZvaWQgc2V0RGVmZXJzTG9hZGluZyhSZXNvdXJjZUxvYWRlcios
IGJvb2wpOwotICAgIHZpcnR1YWwgdm9pZCBjcm9zc09yaWdpblJlZGlyZWN0UmVjZWl2ZWQoUmVz
b3VyY2VMb2FkZXIqLCBjb25zdCBVUkwmIHJlZGlyZWN0VVJMKTsKLSAgICAKLSAgICBXRUJDT1JF
X0VYUE9SVCB2aXJ0dWFsIHZvaWQgc2VydmVQZW5kaW5nUmVxdWVzdHMoUmVzb3VyY2VMb2FkUHJp
b3JpdHkgbWluaW11bVByaW9yaXR5ID0gUmVzb3VyY2VMb2FkUHJpb3JpdHk6OlZlcnlMb3cpOwot
ICAgIFdFQkNPUkVfRVhQT1JUIHZpcnR1YWwgdm9pZCBzdXNwZW5kUGVuZGluZ1JlcXVlc3RzKCk7
Ci0gICAgV0VCQ09SRV9FWFBPUlQgdmlydHVhbCB2b2lkIHJlc3VtZVBlbmRpbmdSZXF1ZXN0cygp
OworICAgIFJlZlB0cjxXZWJDb3JlOjpTdWJyZXNvdXJjZUxvYWRlcj4gbG9hZFJlc291cmNlKFdl
YkNvcmU6OkZyYW1lKiwgV2ViQ29yZTo6Q2FjaGVkUmVzb3VyY2UqLCBjb25zdCBXZWJDb3JlOjpS
ZXNvdXJjZVJlcXVlc3QmLCBjb25zdCBXZWJDb3JlOjpSZXNvdXJjZUxvYWRlck9wdGlvbnMmKSBv
dmVycmlkZTsKKyAgICB2b2lkIGxvYWRSZXNvdXJjZVN5bmNocm9ub3VzbHkoV2ViQ29yZTo6TmV0
d29ya2luZ0NvbnRleHQqLCB1bnNpZ25lZCBsb25nLCBjb25zdCBXZWJDb3JlOjpSZXNvdXJjZVJl
cXVlc3QmLCBXZWJDb3JlOjpTdG9yZWRDcmVkZW50aWFscywgV2ViQ29yZTo6Q2xpZW50Q3JlZGVu
dGlhbFBvbGljeSwgV2ViQ29yZTo6UmVzb3VyY2VFcnJvciYsIFdlYkNvcmU6OlJlc291cmNlUmVz
cG9uc2UmLCBWZWN0b3I8Y2hhcj4mKSBvdmVycmlkZTsKKyAgICB2b2lkIHJlbW92ZShXZWJDb3Jl
OjpSZXNvdXJjZUxvYWRlciopIG92ZXJyaWRlOworICAgIHZvaWQgc2V0RGVmZXJzTG9hZGluZyhX
ZWJDb3JlOjpSZXNvdXJjZUxvYWRlciosIGJvb2wpIG92ZXJyaWRlOworICAgIHZvaWQgY3Jvc3NP
cmlnaW5SZWRpcmVjdFJlY2VpdmVkKFdlYkNvcmU6OlJlc291cmNlTG9hZGVyKiwgY29uc3QgV2Vi
Q29yZTo6VVJMJiByZWRpcmVjdFVSTCkgb3ZlcnJpZGU7CiAgICAgCisgICAgdm9pZCBzZXJ2ZVBl
bmRpbmdSZXF1ZXN0cyhXZWJDb3JlOjpSZXNvdXJjZUxvYWRQcmlvcml0eSBtaW5pbXVtUHJpb3Jp
dHkgPSBXZWJDb3JlOjpSZXNvdXJjZUxvYWRQcmlvcml0eTo6VmVyeUxvdykgb3ZlcnJpZGU7Cisg
ICAgdm9pZCBzdXNwZW5kUGVuZGluZ1JlcXVlc3RzKCkgb3ZlcnJpZGU7CisgICAgdm9pZCByZXN1
bWVQZW5kaW5nUmVxdWVzdHMoKSBvdmVycmlkZTsKKworICAgIHZvaWQgY3JlYXRlUGluZ0hhbmRs
ZShXZWJDb3JlOjpOZXR3b3JraW5nQ29udGV4dCosIFdlYkNvcmU6OlJlc291cmNlUmVxdWVzdCYs
IGJvb2wgc2hvdWxkVXNlQ3JlZGVudGlhbFN0b3JhZ2UpIG92ZXJyaWRlOworCiAgICAgYm9vbCBp
c1NlcmlhbExvYWRpbmdFbmFibGVkKCkgY29uc3QgeyByZXR1cm4gbV9pc1NlcmlhbExvYWRpbmdF
bmFibGVkOyB9Ci0gICAgdmlydHVhbCB2b2lkIHNldFNlcmlhbExvYWRpbmdFbmFibGVkKGJvb2wg
YikgeyBtX2lzU2VyaWFsTG9hZGluZ0VuYWJsZWQgPSBiOyB9CisgICAgdm9pZCBzZXRTZXJpYWxM
b2FkaW5nRW5hYmxlZChib29sIGIpIHsgbV9pc1NlcmlhbExvYWRpbmdFbmFibGVkID0gYjsgfQog
Ci0gICAgY2xhc3MgU3VzcGVuZGVyIHsKLSAgICBwdWJsaWM6Ci0gICAgICAgIGV4cGxpY2l0IFN1
c3BlbmRlcihSZXNvdXJjZUxvYWRTY2hlZHVsZXImIHNjaGVkdWxlcikgOiBtX3NjaGVkdWxlcihz
Y2hlZHVsZXIpIHsgbV9zY2hlZHVsZXIuc3VzcGVuZFBlbmRpbmdSZXF1ZXN0cygpOyB9Ci0gICAg
ICAgIH5TdXNwZW5kZXIoKSB7IG1fc2NoZWR1bGVyLnJlc3VtZVBlbmRpbmdSZXF1ZXN0cygpOyB9
Ci0gICAgcHJpdmF0ZToKLSAgICAgICAgUmVzb3VyY2VMb2FkU2NoZWR1bGVyJiBtX3NjaGVkdWxl
cjsKLSAgICB9OworICAgIFJlZlB0cjxXZWJDb3JlOjpOZXRzY2FwZVBsdWdJblN0cmVhbUxvYWRl
cj4gc2NoZWR1bGVQbHVnaW5TdHJlYW1Mb2FkKFdlYkNvcmU6OkZyYW1lKiwgV2ViQ29yZTo6TmV0
c2NhcGVQbHVnSW5TdHJlYW1Mb2FkZXJDbGllbnQqLCBjb25zdCBXZWJDb3JlOjpSZXNvdXJjZVJl
cXVlc3QmKTsKIAogcHJvdGVjdGVkOgotICAgIFdFQkNPUkVfRVhQT1JUIFJlc291cmNlTG9hZFNj
aGVkdWxlcigpOwotICAgIFdFQkNPUkVfRVhQT1JUIHZpcnR1YWwgflJlc291cmNlTG9hZFNjaGVk
dWxlcigpOworICAgIHZpcnR1YWwgfldlYlJlc291cmNlTG9hZFNjaGVkdWxlcigpOwogCiBwcml2
YXRlOgotICAgIHZvaWQgc2NoZWR1bGVMb2FkKFJlc291cmNlTG9hZGVyKik7CisgICAgdm9pZCBz
Y2hlZHVsZUxvYWQoV2ViQ29yZTo6UmVzb3VyY2VMb2FkZXIqKTsKICAgICB2b2lkIHNjaGVkdWxl
U2VydmVQZW5kaW5nUmVxdWVzdHMoKTsKICAgICB2b2lkIHJlcXVlc3RUaW1lckZpcmVkKCk7CiAK
QEAgLTkwLDIwICs3OSwyMCBAQCBwcml2YXRlOgogICAgICAgICB+SG9zdEluZm9ybWF0aW9uKCk7
CiAgICAgICAgIAogICAgICAgICBjb25zdCBTdHJpbmcmIG5hbWUoKSBjb25zdCB7IHJldHVybiBt
X25hbWU7IH0KLSAgICAgICAgdm9pZCBzY2hlZHVsZShSZXNvdXJjZUxvYWRlciosIFJlc291cmNl
TG9hZFByaW9yaXR5ID0gUmVzb3VyY2VMb2FkUHJpb3JpdHk6OlZlcnlMb3cpOwotICAgICAgICB2
b2lkIGFkZExvYWRJblByb2dyZXNzKFJlc291cmNlTG9hZGVyKik7Ci0gICAgICAgIHZvaWQgcmVt
b3ZlKFJlc291cmNlTG9hZGVyKik7CisgICAgICAgIHZvaWQgc2NoZWR1bGUoV2ViQ29yZTo6UmVz
b3VyY2VMb2FkZXIqLCBXZWJDb3JlOjpSZXNvdXJjZUxvYWRQcmlvcml0eSA9IFdlYkNvcmU6OlJl
c291cmNlTG9hZFByaW9yaXR5OjpWZXJ5TG93KTsKKyAgICAgICAgdm9pZCBhZGRMb2FkSW5Qcm9n
cmVzcyhXZWJDb3JlOjpSZXNvdXJjZUxvYWRlciopOworICAgICAgICB2b2lkIHJlbW92ZShXZWJD
b3JlOjpSZXNvdXJjZUxvYWRlciopOwogICAgICAgICBib29sIGhhc1JlcXVlc3RzKCkgY29uc3Q7
Ci0gICAgICAgIGJvb2wgbGltaXRSZXF1ZXN0cyhSZXNvdXJjZUxvYWRQcmlvcml0eSkgY29uc3Q7
CisgICAgICAgIGJvb2wgbGltaXRSZXF1ZXN0cyhXZWJDb3JlOjpSZXNvdXJjZUxvYWRQcmlvcml0
eSkgY29uc3Q7CiAKLSAgICAgICAgdHlwZWRlZiBEZXF1ZTxSZWZQdHI8UmVzb3VyY2VMb2FkZXI+
PiBSZXF1ZXN0UXVldWU7Ci0gICAgICAgIFJlcXVlc3RRdWV1ZSYgcmVxdWVzdHNQZW5kaW5nKFJl
c291cmNlTG9hZFByaW9yaXR5IHByaW9yaXR5KSB7IHJldHVybiBtX3JlcXVlc3RzUGVuZGluZ1tw
cmlvcml0eVRvSW5kZXgocHJpb3JpdHkpXTsgfQorICAgICAgICB0eXBlZGVmIERlcXVlPFJlZlB0
cjxXZWJDb3JlOjpSZXNvdXJjZUxvYWRlcj4+IFJlcXVlc3RRdWV1ZTsKKyAgICAgICAgUmVxdWVz
dFF1ZXVlJiByZXF1ZXN0c1BlbmRpbmcoV2ViQ29yZTo6UmVzb3VyY2VMb2FkUHJpb3JpdHkgcHJp
b3JpdHkpIHsgcmV0dXJuIG1fcmVxdWVzdHNQZW5kaW5nW3ByaW9yaXR5VG9JbmRleChwcmlvcml0
eSldOyB9CiAKICAgICBwcml2YXRlOgotICAgICAgICBzdGF0aWMgdW5zaWduZWQgcHJpb3JpdHlU
b0luZGV4KFJlc291cmNlTG9hZFByaW9yaXR5KTsKKyAgICAgICAgc3RhdGljIHVuc2lnbmVkIHBy
aW9yaXR5VG9JbmRleChXZWJDb3JlOjpSZXNvdXJjZUxvYWRQcmlvcml0eSk7CiAKLSAgICAgICAg
c3RkOjphcnJheTxSZXF1ZXN0UXVldWUsIHJlc291cmNlTG9hZFByaW9yaXR5Q291bnQ+IG1fcmVx
dWVzdHNQZW5kaW5nOwotICAgICAgICB0eXBlZGVmIEhhc2hTZXQ8UmVmUHRyPFJlc291cmNlTG9h
ZGVyPj4gUmVxdWVzdE1hcDsKKyAgICAgICAgc3RkOjphcnJheTxSZXF1ZXN0UXVldWUsIFdlYkNv
cmU6OnJlc291cmNlTG9hZFByaW9yaXR5Q291bnQ+IG1fcmVxdWVzdHNQZW5kaW5nOworICAgICAg
ICB0eXBlZGVmIEhhc2hTZXQ8UmVmUHRyPFdlYkNvcmU6OlJlc291cmNlTG9hZGVyPj4gUmVxdWVz
dE1hcDsKICAgICAgICAgUmVxdWVzdE1hcCBtX3JlcXVlc3RzTG9hZGluZzsKICAgICAgICAgY29u
c3QgU3RyaW5nIG1fbmFtZTsKICAgICAgICAgY29uc3QgdW5zaWduZWQgbV9tYXhSZXF1ZXN0c0lu
RmxpZ2h0OwpAQCAtMTE0LDIxICsxMDMsMTcgQEAgcHJpdmF0ZToKICAgICAgICAgRmluZE9ubHkK
ICAgICB9OwogICAgIAotICAgIEhvc3RJbmZvcm1hdGlvbiogaG9zdEZvclVSTChjb25zdCBVUkwm
LCBDcmVhdGVIb3N0UG9saWN5ID0gRmluZE9ubHkpOwotICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQg
c2VydmVQZW5kaW5nUmVxdWVzdHMoSG9zdEluZm9ybWF0aW9uKiwgUmVzb3VyY2VMb2FkUHJpb3Jp
dHkpOworICAgIEhvc3RJbmZvcm1hdGlvbiogaG9zdEZvclVSTChjb25zdCBXZWJDb3JlOjpVUkwm
LCBDcmVhdGVIb3N0UG9saWN5ID0gRmluZE9ubHkpOworICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQg
c2VydmVQZW5kaW5nUmVxdWVzdHMoSG9zdEluZm9ybWF0aW9uKiwgV2ViQ29yZTo6UmVzb3VyY2VM
b2FkUHJpb3JpdHkpOwogCiAgICAgdHlwZWRlZiBIYXNoTWFwPFN0cmluZywgSG9zdEluZm9ybWF0
aW9uKiwgU3RyaW5nSGFzaD4gSG9zdE1hcDsKICAgICBIb3N0TWFwIG1faG9zdHM7CiAgICAgSG9z
dEluZm9ybWF0aW9uKiBtX25vbkhUVFBQcm90b2NvbEhvc3Q7CiAgICAgICAgIAotICAgIFRpbWVy
IG1fcmVxdWVzdFRpbWVyOworICAgIFdlYkNvcmU6OlRpbWVyIG1fcmVxdWVzdFRpbWVyOwogCiAg
ICAgdW5zaWduZWQgbV9zdXNwZW5kUGVuZGluZ1JlcXVlc3RzQ291bnQ7CiAgICAgYm9vbCBtX2lz
U2VyaWFsTG9hZGluZ0VuYWJsZWQ7CiB9OwogCi1XRUJDT1JFX0VYUE9SVCBSZXNvdXJjZUxvYWRT
Y2hlZHVsZXIqIHJlc291cmNlTG9hZFNjaGVkdWxlcigpOwotCi19Ci0KICNlbmRpZgpJbmRleDog
U291cmNlL1dlYktpdC9XZWJLaXQudmN4cHJvai9XZWJLaXQvV2ViS2l0LnZjeHByb2oKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1dlYktpdC9XZWJLaXQudmN4cHJvai9XZWJLaXQvV2ViS2l0LnZjeHBy
b2oJKHJldmlzaW9uIDE5Mjg4MCkKKysrIFNvdXJjZS9XZWJLaXQvV2ViS2l0LnZjeHByb2ovV2Vi
S2l0L1dlYktpdC52Y3hwcm9qCSh3b3JraW5nIGNvcHkpCkBAIC0zMTQsNiArMzE0LDcgQEAKICAg
ICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXC4uXFN0b3JhZ2VcV2ViU3RvcmFnZU5hbWVzcGFjZVBy
b3ZpZGVyLmNwcCIgLz4KICAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXC4uXGNmXFdlYkNvcmVT
dXBwb3J0XFdlYkluc3BlY3RvckNsaWVudENGLmNwcCIgLz4KICAgICA8Q2xDb21waWxlIEluY2x1
ZGU9Ii4uXC4uXFdlYkNvcmVTdXBwb3J0XFdlYlZpZXdHcm91cC5jcHAiIC8+CisgICAgPENsQ29t
cGlsZSBJbmNsdWRlPSIuLlwuLlxXZWJDb3JlU3VwcG9ydFxXZWJSZXNvdXJjZUxvYWRTY2hlZHVs
ZXIuY3BwIiAvPgogICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cLi5cd2luXFBsdWdpbnNcbnBh
cGkuY3BwIiAvPgogICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cLi5cd2luXFBsdWdpbnNcUGx1
Z2luRGF0YWJhc2UuY3BwIiAvPgogICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cLi5cd2luXFBs
dWdpbnNcUGx1Z2luRGVidWcuY3BwIiAvPgpAQCAtNDY5LDYgKzQ3MCw3IEBACiAgICAgPENsSW5j
bHVkZSBJbmNsdWRlPSIuLlwuLlxTdG9yYWdlXFdlYkRhdGFiYXNlUHJvdmlkZXIuaCIgLz4KICAg
ICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXC4uXFN0b3JhZ2VcV2ViU3RvcmFnZU5hbWVzcGFjZVBy
b3ZpZGVyLmgiIC8+CiAgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlwuLlxXZWJDb3JlU3VwcG9y
dFxXZWJWaWV3R3JvdXAuaCIgLz4KKyAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXC4uXFdlYkNv
cmVTdXBwb3J0XFdlYlJlc291cmNlTG9hZFNjaGVkdWxlci5oIiAvPgogICAgIDxDbEluY2x1ZGUg
SW5jbHVkZT0iLi5cLi5cd2luXFBsdWdpbnNcUGx1Z2luRGF0YWJhc2UuaCIgLz4KICAgICA8Q2xJ
bmNsdWRlIEluY2x1ZGU9Ii4uXC4uXHdpblxQbHVnaW5zXFBsdWdpbkRlYnVnLmgiIC8+CiAgICAg
PENsSW5jbHVkZSBJbmNsdWRlPSIuLlwuLlx3aW5cUGx1Z2luc1xQbHVnaW5QYWNrYWdlLmgiIC8+
CkluZGV4OiBTb3VyY2UvV2ViS2l0L1dlYktpdC54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvV2ViS2l0Lnhjb2RlcHJvai9wcm9qZWN0LnBieHBy
b2oJKHJldmlzaW9uIDE5Mjg4MCkKKysrIFNvdXJjZS9XZWJLaXQvV2ViS2l0Lnhjb2RlcHJvai9w
cm9qZWN0LnBieHByb2oJKHdvcmtpbmcgY29weSkKQEAgLTQ1NSw2ICs0NTUsOCBAQAogCQlFMTU2
NjMxOTBGQjYxQzFGMDBDMTk5Q0EgLyogV2ViRG93bmxvYWQubW0gaW4gU291cmNlcyAqLyA9IHtp
c2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBFMTU2NjMxODBGQjYxQzFGMDBDMTk5Q0EgLyog
V2ViRG93bmxvYWQubW0gKi87IH07CiAJCUUxNjk4MzYyMTEzNDZEMUIwMDg5NDExNSAvKiBQcm94
eVJ1bnRpbWVPYmplY3QuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmls
ZVJlZiA9IEUxNjk4MzYxMTEzNDZEMUIwMDg5NDExNSAvKiBQcm94eVJ1bnRpbWVPYmplY3QuaCAq
LzsgfTsKIAkJRTE2OTgzNkMxMTM0NkQ1NjAwODk0MTE1IC8qIFByb3h5UnVudGltZU9iamVjdC5t
bSBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEUxNjk4MzZC
MTEzNDZENTYwMDg5NDExNSAvKiBQcm94eVJ1bnRpbWVPYmplY3QubW0gKi87IH07CisJCUU0QUVG
OTdCMUMwREY0QkMwMEIwMTcyNyAvKiBXZWJSZXNvdXJjZUxvYWRTY2hlZHVsZXIuY3BwIGluIFNv
dXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRTRBRUY5NzkxQzBERjRC
QzAwQjAxNzI3IC8qIFdlYlJlc291cmNlTG9hZFNjaGVkdWxlci5jcHAgKi87IH07CisJCUU0QUVG
OTdDMUMwREY0QkMwMEIwMTcyNyAvKiBXZWJSZXNvdXJjZUxvYWRTY2hlZHVsZXIuaCBpbiBIZWFk
ZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEU0QUVGOTdBMUMwREY0QkMw
MEIwMTcyNyAvKiBXZWJSZXNvdXJjZUxvYWRTY2hlZHVsZXIuaCAqLzsgfTsKIAkJRUQ1Qjk1MjQx
MTFCNzI1QTAwNDcyMjk4IC8qIFdlYkxvY2FsaXphYmxlU3RyaW5ncy5tbSBpbiBTb3VyY2VzICov
ID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEVENUI5NTIzMTExQjcyNUEwMDQ3MjI5
OCAvKiBXZWJMb2NhbGl6YWJsZVN0cmluZ3MubW0gKi87IH07CiAJCUVEN0Y2RDhCMDk4MDY4MzUw
MEMyMzVFRCAvKiBXZWJOU0RhdGFFeHRyYXNQcml2YXRlLmggaW4gSGVhZGVycyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBFRDdGNkQ4QTA5ODA2ODM1MDBDMjM1RUQgLyogV2Vi
TlNEYXRhRXh0cmFzUHJpdmF0ZS5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZh
dGUsICk7IH07IH07CiAJCUY4MzRBQUQ3MEU2NEIxQzcwMEUyNzM3QyAvKiBXZWJUZXh0SXRlcmF0
b3IuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEY4MzRB
QUQ1MEU2NEIxQzcwMEUyNzM3QyAvKiBXZWJUZXh0SXRlcmF0b3IuaCAqLzsgc2V0dGluZ3MgPSB7
QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwpAQCAtODY4LDYgKzg3MCw4IEBACiAJCUUx
NTY2MzE4MEZCNjFDMUYwMEMxOTlDQSAvKiBXZWJEb3dubG9hZC5tbSAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuY3BwLm9iamNwcDsgcGF0aCA9IFdlYkRvd25sb2FkLm1tOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OwogCQlFMTY5ODM2MTExMzQ2RDFCMDA4OTQxMTUgLyogUHJveHlSdW50aW1lT2Jq
ZWN0LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFByb3h5UnVudGltZU9iamVj
dC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlFMTY5ODM2QjExMzQ2RDU2MDA4OTQx
MTUgLyogUHJveHlSdW50aW1lT2JqZWN0Lm1tICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAub2Jq
Y3BwOyBwYXRoID0gUHJveHlSdW50aW1lT2JqZWN0Lm1tOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OworCQlFNEFFRjk3OTFDMERGNEJDMDBCMDE3MjcgLyogV2ViUmVzb3VyY2VMb2FkU2NoZWR1
bGVyLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFtZSA9IFdlYlJlc291cmNl
TG9hZFNjaGVkdWxlci5jcHA7IHBhdGggPSBXZWJDb3JlU3VwcG9ydC9XZWJSZXNvdXJjZUxvYWRT
Y2hlZHVsZXIuY3BwOyBzb3VyY2VUcmVlID0gU09VUkNFX1JPT1Q7IH07CisJCUU0QUVGOTdBMUMw
REY0QkMwMEIwMTcyNyAvKiBXZWJSZXNvdXJjZUxvYWRTY2hlZHVsZXIuaCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuYy5oOyBuYW1lID0gV2ViUmVzb3VyY2VMb2FkU2NoZWR1bGVyLmg7IHBhdGggPSBX
ZWJDb3JlU3VwcG9ydC9XZWJSZXNvdXJjZUxvYWRTY2hlZHVsZXIuaDsgc291cmNlVHJlZSA9IFNP
VVJDRV9ST09UOyB9OwogCQlFRDIxQjk4MTA1MjhGN0FBMDAzMjk5QUMgLyogV2ViRG9jdW1lbnRJ
bnRlcm5hbC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7
IGluZGVudFdpZHRoID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0
aCA9IFdlYkRvY3VtZW50SW50ZXJuYWwuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgdGFiV2lk
dGggPSA4OyB1c2VzVGFicyA9IDA7IH07CiAJCUVEMkIyNDc0MDMzQTJEQTgwMEMxQTUyNiAvKiBX
ZWJOU1Bhc3RlYm9hcmRFeHRyYXMuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSA0OyBpbmRlbnRXaWR0aCA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jLmg7IHBhdGggPSBXZWJOU1Bhc3RlYm9hcmRFeHRyYXMuaDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgdGFiV2lkdGggPSA4OyB1c2VzVGFicyA9IDA7IH07CiAJCUVEMkIyNDc1MDMzQTJE
QTgwMEMxQTUyNiAvKiBXZWJOU1Bhc3RlYm9hcmRFeHRyYXMubW0gKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgaW5kZW50V2lkdGggPSA0OyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLm9iamNwcDsgcGF0aCA9IFdlYk5TUGFzdGVib2FyZEV4
dHJhcy5tbTsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgdGFiV2lkdGggPSA4OyB1c2VzVGFicyA9
IDA7IH07CkBAIC0xNTk1LDYgKzE1OTksOCBAQAogCQkJCTFBQTg3OUI1MTFDQkU5QkYwMDNDNjY0
RiAvKiBXZWJQbGF0Zm9ybVN0cmF0ZWdpZXMubW0gKi8sCiAJCQkJMUE2QTIwOEMxODg2MTU0NjAw
RTUwRjVGIC8qIFdlYlByb2dyZXNzVHJhY2tlckNsaWVudC5oICovLAogCQkJCTFBNkEyMDhCMTg4
NjE1NDYwMEU1MEY1RiAvKiBXZWJQcm9ncmVzc1RyYWNrZXJDbGllbnQubW0gKi8sCisJCQkJRTRB
RUY5NzkxQzBERjRCQzAwQjAxNzI3IC8qIFdlYlJlc291cmNlTG9hZFNjaGVkdWxlci5jcHAgKi8s
CisJCQkJRTRBRUY5N0ExQzBERjRCQzAwQjAxNzI3IC8qIFdlYlJlc291cmNlTG9hZFNjaGVkdWxl
ci5oICovLAogCQkJCUE1REVGQzA3MTFENTMzMUMwMDg4NTI3MyAvKiBXZWJTZWN1cml0eU9yaWdp
bi5tbSAqLywKIAkJCQlBNURFRkMwODExRDUzMzFDMDA4ODUyNzMgLyogV2ViU2VjdXJpdHlPcmln
aW5JbnRlcm5hbC5oICovLAogCQkJCUE1REVGQzA5MTFENTMzMUMwMDg4NTI3MyAvKiBXZWJTZWN1
cml0eU9yaWdpblByaXZhdGUuaCAqLywKQEAgLTE4ODgsNiArMTg5NCw3IEBACiAJCQkJQTEwQzFE
M0MxODIwMkZDNTAwMzY4ODNBIC8qIFdlYk5TU3RyaW5nRXh0cmFzSVBob25lLmggaW4gSGVhZGVy
cyAqLywKIAkJCQk5Mzk4MTA3RTA4MjRCRjAxMDA4REYwMzggLyogV2ViTlNVUkxFeHRyYXMuaCBp
biBIZWFkZXJzICovLAogCQkJCTY1RTBGODg0MDg1MDA5MTcwMDdFNUNCOSAvKiBXZWJOU1VSTFJl
cXVlc3RFeHRyYXMuaCBpbiBIZWFkZXJzICovLAorCQkJCUU0QUVGOTdDMUMwREY0QkMwMEIwMTcy
NyAvKiBXZWJSZXNvdXJjZUxvYWRTY2hlZHVsZXIuaCBpbiBIZWFkZXJzICovLAogCQkJCTY1RTBG
OUU2MDg1MDBGMjMwMDdFNUNCOSAvKiBXZWJOU1VzZXJEZWZhdWx0c0V4dHJhcy5oIGluIEhlYWRl
cnMgKi8sCiAJCQkJOTM5ODEwMjQwODI0QkYwMTAwOERGMDM4IC8qIFdlYk5TVmlld0V4dHJhcy5o
IGluIEhlYWRlcnMgKi8sCiAJCQkJOTM5ODEwMjUwODI0QkYwMTAwOERGMDM4IC8qIFdlYk5TV2lu
ZG93RXh0cmFzLmggaW4gSGVhZGVycyAqLywKQEAgLTIyMzYsNiArMjI0Myw3IEBACiAJCQkJQkM3
Rjg4OUYxMEM5RDMwQzAwRDYxMzNEIC8qIFdlYkdlb2xvY2F0aW9uUG9zaXRpb24ubW0gaW4gU291
cmNlcyAqLywKIAkJCQlBMTBDMUQzNzE4MjAyRkM1MDAzNjg4M0EgLyogV2ViR2VvbG9jYXRpb25Q
cm92aWRlcklPUy5tbSBpbiBTb3VyY2VzICovLAogCQkJCTkzOTgxMTEzMDgyNEJGMDEwMDhERjAz
OCAvKiBXZWJIaXN0b3J5Lm1tIGluIFNvdXJjZXMgKi8sCisJCQkJRTRBRUY5N0IxQzBERjRCQzAw
QjAxNzI3IC8qIFdlYlJlc291cmNlTG9hZFNjaGVkdWxlci5jcHAgaW4gU291cmNlcyAqLywKIAkJ
CQk5Mzk4MTBCRDA4MjRCRjAxMDA4REYwMzggLyogV2ViSGlzdG9yeUl0ZW0ubW0gaW4gU291cmNl
cyAqLywKIAkJCQkxQUFGNUZDMDBFREUzQTkyMDA4RDg4M0QgLyogV2ViSG9zdGVkTmV0c2NhcGVQ
bHVnaW5WaWV3Lm1tIGluIFNvdXJjZXMgKi8sCiAJCQkJOTM5ODEwRjMwODI0QkYwMTAwOERGMDM4
IC8qIFdlYkhUTUxSZXByZXNlbnRhdGlvbi5tbSBpbiBTb3VyY2VzICovLApJbmRleDogU291cmNl
L1dlYktpdC9tYWMvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvbWFjL0No
YW5nZUxvZwkocmV2aXNpb24gMTkyODgwKQorKysgU291cmNlL1dlYktpdC9tYWMvQ2hhbmdlTG9n
CSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMjggQEAKKzIwMTUtMTItMDIgIEFudHRpIEtvaXZp
c3RvICA8YW50dGlAYXBwbGUuY29tPgorCisgICAgICAgIE1vdmUgUmVzb3VyY2VMb2FkU2NoZWR1
bGVyIHRvIFdlYktpdDEKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcu
Y2dpP2lkPTE1MTc0MworCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisg
ICAgICAgICogUGx1Z2lucy9Ib3N0ZWQvSG9zdGVkTmV0c2NhcGVQbHVnaW5TdHJlYW0ubW06Cisg
ICAgICAgIChXZWJLaXQ6Okhvc3RlZE5ldHNjYXBlUGx1Z2luU3RyZWFtOjpzdGFydCk6CisgICAg
ICAgIChXZWJLaXQ6Okhvc3RlZE5ldHNjYXBlUGx1Z2luU3RyZWFtOjpzdG9wKToKKyAgICAgICAg
KiBQbHVnaW5zL1dlYk5ldHNjYXBlUGx1Z2luU3RyZWFtLm1tOgorICAgICAgICAoV2ViTmV0c2Nh
cGVQbHVnaW5TdHJlYW06OnN0YXJ0KToKKyAgICAgICAgKFdlYk5ldHNjYXBlUGx1Z2luU3RyZWFt
OjpzdG9wKToKKyAgICAgICAgKiBXZWJDb3JlU3VwcG9ydC9XZWJQbGF0Zm9ybVN0cmF0ZWdpZXMu
aDoKKyAgICAgICAgKiBXZWJDb3JlU3VwcG9ydC9XZWJQbGF0Zm9ybVN0cmF0ZWdpZXMubW06Cisg
ICAgICAgIChXZWJQbGF0Zm9ybVN0cmF0ZWdpZXM6OmNyZWF0ZUxvYWRlclN0cmF0ZWd5KToKKyAg
ICAgICAgKFdlYlBsYXRmb3JtU3RyYXRlZ2llczo6Y3JlYXRlUGFzdGVib2FyZFN0cmF0ZWd5KToK
KyAgICAgICAgKFdlYlBsYXRmb3JtU3RyYXRlZ2llczo6Y3JlYXRlUGx1Z2luU3RyYXRlZ3kpOgor
ICAgICAgICAoV2ViUGxhdGZvcm1TdHJhdGVnaWVzOjpjcmVhdGVCbG9iUmVnaXN0cnkpOgorICAg
ICAgICAoV2ViUGxhdGZvcm1TdHJhdGVnaWVzOjpjb29raWVzRm9yRE9NKToKKyAgICAgICAgKiBX
ZWJWaWV3L1dlYlZpZXcubW06CisgICAgICAgICgtW1dlYlZpZXcgX2Rpc3BhdGNoUGVuZGluZ0xv
YWRSZXF1ZXN0c10pOgorICAgICAgICAoK1tXZWJWaWV3IF9zZXRMb2FkUmVzb3VyY2VzU2VyaWFs
bHk6XSk6CisgICAgICAgICgrW1dlYlZpZXcgX0hUVFBQaXBlbGluaW5nRW5hYmxlZF0pOgorCiAy
MDE1LTExLTMwICBLYXRseW4gR3JhZmYgIDxrZ3JhZmZAYXBwbGUuY29tPgogCiAgICAgICAgIFJl
bmFtZSBBY3RpdmVET01PYmplY3QvRE9NV2luZG93IFBhZ2VDYWNoZVN1c3BlbnNpb24gY29kZSB0
byBzdXBwb3J0IG1vcmUgcmVhc29ucyBmb3Igc3VzcGVuc2lvbgpJbmRleDogU291cmNlL1dlYktp
dC9tYWMvUGx1Z2lucy9XZWJOZXRzY2FwZVBsdWdpblN0cmVhbS5tbQo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV2ViS2l0L21hYy9QbHVnaW5zL1dlYk5ldHNjYXBlUGx1Z2luU3RyZWFtLm1tCShyZXZp
c2lvbiAxOTI4ODApCisrKyBTb3VyY2UvV2ViS2l0L21hYy9QbHVnaW5zL1dlYk5ldHNjYXBlUGx1
Z2luU3RyZWFtLm1tCSh3b3JraW5nIGNvcHkpCkBAIC0zNywxMyArMzcsMTUgQEAKICNpbXBvcnQg
IldlYk5TVVJMUmVxdWVzdEV4dHJhcy5oIgogI2ltcG9ydCAiV2ViTmV0c2NhcGVQbHVnaW5QYWNr
YWdlLmgiCiAjaW1wb3J0ICJXZWJOZXRzY2FwZVBsdWdpblZpZXcuaCIKKyNpbXBvcnQgIldlYlJl
c291cmNlTG9hZFNjaGVkdWxlci5oIgogI2ltcG9ydCA8Rm91bmRhdGlvbi9OU1VSTFJlc3BvbnNl
Lmg+CiAjaW1wb3J0IDxXZWJDb3JlL0RvY3VtZW50Lmg+CiAjaW1wb3J0IDxXZWJDb3JlL0RvY3Vt
ZW50TG9hZGVyLmg+CiAjaW1wb3J0IDxXZWJDb3JlL0ZyYW1lLmg+CiAjaW1wb3J0IDxXZWJDb3Jl
L0ZyYW1lTG9hZGVyLmg+CiAjaW1wb3J0IDxXZWJDb3JlL0pTRE9NV2luZG93QmFzZS5oPgotI2lt
cG9ydCA8V2ViQ29yZS9SZXNvdXJjZUxvYWRTY2hlZHVsZXIuaD4KKyNpbXBvcnQgPFdlYkNvcmUv
TG9hZGVyU3RyYXRlZ3kuaD4KKyNpbXBvcnQgPFdlYkNvcmUvUGxhdGZvcm1TdHJhdGVnaWVzLmg+
CiAjaW1wb3J0IDxXZWJDb3JlL1NlY3VyaXR5T3JpZ2luLmg+CiAjaW1wb3J0IDxXZWJDb3JlL1Nl
Y3VyaXR5UG9saWN5Lmg+CiAjaW1wb3J0IDxXZWJDb3JlL1dlYkNvcmVPYmpDRXh0cmFzLmg+CkBA
IC0yODUsOCArMjg3LDggQEAgdm9pZCBXZWJOZXRzY2FwZVBsdWdpblN0cmVhbTo6c3RhcnQoKQog
ICAgIEFTU0VSVChtX3JlcXVlc3QpOwogICAgIEFTU0VSVCghbV9mcmFtZUxvYWRlcik7CiAgICAg
QVNTRVJUKCFtX2xvYWRlcik7Ci0gICAgCi0gICAgbV9sb2FkZXIgPSByZXNvdXJjZUxvYWRTY2hl
ZHVsZXIoKS0+c2NoZWR1bGVQbHVnaW5TdHJlYW1Mb2FkKGNvcmUoW21fcGx1Z2luVmlldy5nZXQo
KSB3ZWJGcmFtZV0pLCB0aGlzLCBtX3JlcXVlc3QuZ2V0KCkpOworCisgICAgbV9sb2FkZXIgPSB3
ZWJSZXNvdXJjZUxvYWRTY2hlZHVsZXIoKS5zY2hlZHVsZVBsdWdpblN0cmVhbUxvYWQoY29yZShb
bV9wbHVnaW5WaWV3LmdldCgpIHdlYkZyYW1lXSksIHRoaXMsIG1fcmVxdWVzdC5nZXQoKSk7CiB9
CiAKIHZvaWQgV2ViTmV0c2NhcGVQbHVnaW5TdHJlYW06OnN0b3AoKQpJbmRleDogU291cmNlL1dl
YktpdC9tYWMvUGx1Z2lucy9Ib3N0ZWQvSG9zdGVkTmV0c2NhcGVQbHVnaW5TdHJlYW0ubW0KPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1dlYktpdC9tYWMvUGx1Z2lucy9Ib3N0ZWQvSG9zdGVkTmV0c2Nh
cGVQbHVnaW5TdHJlYW0ubW0JKHJldmlzaW9uIDE5Mjg4MCkKKysrIFNvdXJjZS9XZWJLaXQvbWFj
L1BsdWdpbnMvSG9zdGVkL0hvc3RlZE5ldHNjYXBlUGx1Z2luU3RyZWFtLm1tCSh3b3JraW5nIGNv
cHkpCkBAIC0zNiwxMSArMzYsMTIgQEAKICNpbXBvcnQgIldlYktpdFN5c3RlbUludGVyZmFjZS5o
IgogI2ltcG9ydCAiV2ViTlNVUkxFeHRyYXMuaCIKICNpbXBvcnQgIldlYk5TVVJMUmVxdWVzdEV4
dHJhcy5oIgorI2ltcG9ydCAiV2ViUmVzb3VyY2VMb2FkU2NoZWR1bGVyLmgiCiAjaW1wb3J0IDxX
ZWJDb3JlL0RvY3VtZW50Lmg+CiAjaW1wb3J0IDxXZWJDb3JlL0RvY3VtZW50TG9hZGVyLmg+CiAj
aW1wb3J0IDxXZWJDb3JlL0ZyYW1lLmg+CiAjaW1wb3J0IDxXZWJDb3JlL0ZyYW1lTG9hZGVyLmg+
Ci0jaW1wb3J0IDxXZWJDb3JlL1Jlc291cmNlTG9hZFNjaGVkdWxlci5oPgorI2ltcG9ydCA8V2Vi
Q29yZS9QbGF0Zm9ybVN0cmF0ZWdpZXMuaD4KICNpbXBvcnQgPFdlYkNvcmUvU2VjdXJpdHlPcmln
aW4uaD4KICNpbXBvcnQgPFdlYkNvcmUvU2VjdXJpdHlQb2xpY3kuaD4KICNpbXBvcnQgPFdlYkNv
cmUvV2ViQ29yZVVSTFJlc3BvbnNlLmg+CkBAIC0yMjAsOCArMjIxLDggQEAgdm9pZCBIb3N0ZWRO
ZXRzY2FwZVBsdWdpblN0cmVhbTo6c3RhcnQoKQogICAgIEFTU0VSVChtX3JlcXVlc3QpOwogICAg
IEFTU0VSVCghbV9mcmFtZUxvYWRlcik7CiAgICAgQVNTRVJUKCFtX2xvYWRlcik7Ci0gICAgCi0g
ICAgbV9sb2FkZXIgPSByZXNvdXJjZUxvYWRTY2hlZHVsZXIoKS0+c2NoZWR1bGVQbHVnaW5TdHJl
YW1Mb2FkKGNvcmUoW21faW5zdGFuY2UtPnBsdWdpblZpZXcoKSB3ZWJGcmFtZV0pLCB0aGlzLCBt
X3JlcXVlc3QuZ2V0KCkpOworCisgICAgbV9sb2FkZXIgPSB3ZWJSZXNvdXJjZUxvYWRTY2hlZHVs
ZXIoKS5zY2hlZHVsZVBsdWdpblN0cmVhbUxvYWQoY29yZShbbV9pbnN0YW5jZS0+cGx1Z2luVmll
dygpIHdlYkZyYW1lXSksIHRoaXMsIG1fcmVxdWVzdC5nZXQoKSk7CiB9CiAKIHZvaWQgSG9zdGVk
TmV0c2NhcGVQbHVnaW5TdHJlYW06OnN0b3AoKQpJbmRleDogU291cmNlL1dlYktpdC9tYWMvV2Vi
Q29yZVN1cHBvcnQvV2ViUGxhdGZvcm1TdHJhdGVnaWVzLmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1dlYktpdC9tYWMvV2ViQ29yZVN1cHBvcnQvV2ViUGxhdGZvcm1TdHJhdGVnaWVzLmgJKHJldmlz
aW9uIDE5Mjg4MCkKKysrIFNvdXJjZS9XZWJLaXQvbWFjL1dlYkNvcmVTdXBwb3J0L1dlYlBsYXRm
b3JtU3RyYXRlZ2llcy5oCSh3b3JraW5nIGNvcHkpCkBAIC0zNSw3ICszNSw3IEBACiBzdHJ1Y3Qg
UGFzdGVib2FyZEltYWdlOwogc3RydWN0IFBhc3RlYm9hcmRXZWJDb250ZW50OwogCi1jbGFzcyBX
ZWJQbGF0Zm9ybVN0cmF0ZWdpZXMgOiBwdWJsaWMgV2ViQ29yZTo6UGxhdGZvcm1TdHJhdGVnaWVz
LCBwcml2YXRlIFdlYkNvcmU6OkNvb2tpZXNTdHJhdGVneSwgcHJpdmF0ZSBXZWJDb3JlOjpMb2Fk
ZXJTdHJhdGVneSwgcHJpdmF0ZSBXZWJDb3JlOjpQYXN0ZWJvYXJkU3RyYXRlZ3ksIHByaXZhdGUg
V2ViQ29yZTo6UGx1Z2luU3RyYXRlZ3kgeworY2xhc3MgV2ViUGxhdGZvcm1TdHJhdGVnaWVzIDog
cHVibGljIFdlYkNvcmU6OlBsYXRmb3JtU3RyYXRlZ2llcywgcHJpdmF0ZSBXZWJDb3JlOjpDb29r
aWVzU3RyYXRlZ3ksIHByaXZhdGUgV2ViQ29yZTo6UGFzdGVib2FyZFN0cmF0ZWd5LCBwcml2YXRl
IFdlYkNvcmU6OlBsdWdpblN0cmF0ZWd5IHsKIHB1YmxpYzoKICAgICBzdGF0aWMgdm9pZCBpbml0
aWFsaXplSWZOZWNlc3NhcnkoKTsKICAgICAKQEAgLTQ3LDYgKzQ3LDcgQEAgcHJpdmF0ZToKICAg
ICB2aXJ0dWFsIFdlYkNvcmU6OkxvYWRlclN0cmF0ZWd5KiBjcmVhdGVMb2FkZXJTdHJhdGVneSgp
IG92ZXJyaWRlOwogICAgIHZpcnR1YWwgV2ViQ29yZTo6UGFzdGVib2FyZFN0cmF0ZWd5KiBjcmVh
dGVQYXN0ZWJvYXJkU3RyYXRlZ3koKSBvdmVycmlkZTsKICAgICB2aXJ0dWFsIFdlYkNvcmU6OlBs
dWdpblN0cmF0ZWd5KiBjcmVhdGVQbHVnaW5TdHJhdGVneSgpIG92ZXJyaWRlOworICAgIHZpcnR1
YWwgV2ViQ29yZTo6QmxvYlJlZ2lzdHJ5KiBjcmVhdGVCbG9iUmVnaXN0cnkoKSBvdmVycmlkZTsK
IAogICAgIC8vIFdlYkNvcmU6OkNvb2tpZXNTdHJhdGVneQogICAgIHZpcnR1YWwgU3RyaW5nIGNv
b2tpZXNGb3JET00oY29uc3QgV2ViQ29yZTo6TmV0d29ya1N0b3JhZ2VTZXNzaW9uJiwgY29uc3Qg
V2ViQ29yZTo6VVJMJiBmaXJzdFBhcnR5LCBjb25zdCBXZWJDb3JlOjpVUkwmKSBvdmVycmlkZTsK
SW5kZXg6IFNvdXJjZS9XZWJLaXQvbWFjL1dlYkNvcmVTdXBwb3J0L1dlYlBsYXRmb3JtU3RyYXRl
Z2llcy5tbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L21hYy9XZWJDb3JlU3VwcG9ydC9X
ZWJQbGF0Zm9ybVN0cmF0ZWdpZXMubW0JKHJldmlzaW9uIDE5Mjg4MCkKKysrIFNvdXJjZS9XZWJL
aXQvbWFjL1dlYkNvcmVTdXBwb3J0L1dlYlBsYXRmb3JtU3RyYXRlZ2llcy5tbQkod29ya2luZyBj
b3B5KQpAQCAtMjgsNiArMjgsOCBAQAogI2ltcG9ydCAiV2ViRnJhbWVOZXR3b3JraW5nQ29udGV4
dC5oIgogI2ltcG9ydCAiV2ViUGx1Z2luRGF0YWJhc2UuaCIKICNpbXBvcnQgIldlYlBsdWdpblBh
Y2thZ2UuaCIKKyNpbXBvcnQgIldlYlJlc291cmNlTG9hZFNjaGVkdWxlci5oIgorI2ltcG9ydCA8
V2ViQ29yZS9CbG9iUmVnaXN0cnlJbXBsLmg+CiAjaW1wb3J0IDxXZWJDb3JlL0Jsb2NrRXhjZXB0
aW9ucy5oPgogI2ltcG9ydCA8V2ViQ29yZS9Db2xvci5oPgogI2ltcG9ydCA8V2ViQ29yZS9NYWlu
RnJhbWUuaD4KQEAgLTYyLDcgKzY0LDcgQEAgQ29va2llc1N0cmF0ZWd5KiBXZWJQbGF0Zm9ybVN0
cmF0ZWdpZXM6OgogCiBMb2FkZXJTdHJhdGVneSogV2ViUGxhdGZvcm1TdHJhdGVnaWVzOjpjcmVh
dGVMb2FkZXJTdHJhdGVneSgpCiB7Ci0gICAgcmV0dXJuIHRoaXM7CisgICAgcmV0dXJuIG5ldyBX
ZWJSZXNvdXJjZUxvYWRTY2hlZHVsZXI7CiB9CiAKIFBhc3RlYm9hcmRTdHJhdGVneSogV2ViUGxh
dGZvcm1TdHJhdGVnaWVzOjpjcmVhdGVQYXN0ZWJvYXJkU3RyYXRlZ3koKQpAQCAtNzUsNiArNzcs
MTEgQEAgUGx1Z2luU3RyYXRlZ3kqIFdlYlBsYXRmb3JtU3RyYXRlZ2llczo6YwogICAgIHJldHVy
biB0aGlzOwogfQogCitCbG9iUmVnaXN0cnkqIFdlYlBsYXRmb3JtU3RyYXRlZ2llczo6Y3JlYXRl
QmxvYlJlZ2lzdHJ5KCkKK3sKKyAgICByZXR1cm4gbmV3IFdlYkNvcmU6OkJsb2JSZWdpc3RyeUlt
cGw7Cit9CisKIFN0cmluZyBXZWJQbGF0Zm9ybVN0cmF0ZWdpZXM6OmNvb2tpZXNGb3JET00oY29u
c3QgTmV0d29ya1N0b3JhZ2VTZXNzaW9uJiBzZXNzaW9uLCBjb25zdCBVUkwmIGZpcnN0UGFydHks
IGNvbnN0IFVSTCYgdXJsKQogewogICAgIHJldHVybiBXZWJDb3JlOjpjb29raWVzRm9yRE9NKHNl
c3Npb24sIGZpcnN0UGFydHksIHVybCk7CkluZGV4OiBTb3VyY2UvV2ViS2l0L21hYy9XZWJWaWV3
L1dlYlZpZXcubW0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9tYWMvV2ViVmlldy9XZWJW
aWV3Lm1tCShyZXZpc2lvbiAxOTI4ODApCisrKyBTb3VyY2UvV2ViS2l0L21hYy9XZWJWaWV3L1dl
YlZpZXcubW0JKHdvcmtpbmcgY29weSkKQEAgLTk1LDYgKzk1LDcgQEAKICNpbXBvcnQgIldlYlBy
ZWZlcmVuY2VLZXlzUHJpdmF0ZS5oIgogI2ltcG9ydCAiV2ViUHJlZmVyZW5jZXNQcml2YXRlLmgi
CiAjaW1wb3J0ICJXZWJQcm9ncmVzc1RyYWNrZXJDbGllbnQuaCIKKyNpbXBvcnQgIldlYlJlc291
cmNlTG9hZFNjaGVkdWxlci5oIgogI2ltcG9ydCAiV2ViU2NyaXB0RGVidWdEZWxlZ2F0ZS5oIgog
I2ltcG9ydCAiV2ViU2NyaXB0V29ybGRJbnRlcm5hbC5oIgogI2ltcG9ydCAiV2ViU2VsZWN0aW9u
U2VydmljZUNvbnRyb2xsZXIuaCIKQEAgLTE2Nyw3ICsxNjgsNiBAQAogI2ltcG9ydCA8V2ViQ29y
ZS9SZW5kZXJWaWV3Lmg+CiAjaW1wb3J0IDxXZWJDb3JlL1JlbmRlcldpZGdldC5oPgogI2ltcG9y
dCA8V2ViQ29yZS9SZXNvdXJjZUhhbmRsZS5oPgotI2ltcG9ydCA8V2ViQ29yZS9SZXNvdXJjZUxv
YWRTY2hlZHVsZXIuaD4KICNpbXBvcnQgPFdlYkNvcmUvUmVzb3VyY2VSZXF1ZXN0Lmg+CiAjaW1w
b3J0IDxXZWJDb3JlL1J1bnRpbWVBcHBsaWNhdGlvbkNoZWNrcy5oPgogI2ltcG9ydCA8V2ViQ29y
ZS9SdW50aW1lRW5hYmxlZEZlYXR1cmVzLmg+CkBAIC03NjEsNyArNzYxLDcgQEAgc3RhdGljIGJv
b2wgc2hvdWxkUmVzdHJpY3RXaW5kb3dGb2N1cygpCiAKIC0gKHZvaWQpX2Rpc3BhdGNoUGVuZGlu
Z0xvYWRSZXF1ZXN0cwogewotICAgIHJlc291cmNlTG9hZFNjaGVkdWxlcigpLT5zZXJ2ZVBlbmRp
bmdSZXF1ZXN0cygpOworICAgIHdlYlJlc291cmNlTG9hZFNjaGVkdWxlcigpLnNlcnZlUGVuZGlu
Z1JlcXVlc3RzKCk7CiB9CiAKICNpZiAhUExBVEZPUk0oSU9TKQpAQCAtNDQ4Miw3ICs0NDgyLDgg
QEAgLSAoQk9PTClzZWFyY2hGb3I6KE5TU3RyaW5nICopc3RyaW5nIGRpcgogKyAodm9pZClfc2V0
TG9hZFJlc291cmNlc1NlcmlhbGx5OihCT09MKXNlcmlhbGl6ZSAKIHsKICAgICBXZWJQbGF0Zm9y
bVN0cmF0ZWdpZXM6OmluaXRpYWxpemVJZk5lY2Vzc2FyeSgpOwotICAgIHJlc291cmNlTG9hZFNj
aGVkdWxlcigpLT5zZXRTZXJpYWxMb2FkaW5nRW5hYmxlZChzZXJpYWxpemUpOworCisgICAgd2Vi
UmVzb3VyY2VMb2FkU2NoZWR1bGVyKCkuc2V0U2VyaWFsTG9hZGluZ0VuYWJsZWQoc2VyaWFsaXpl
KTsKIH0KIAogKyAoQk9PTClfSFRUUFBpcGVsaW5pbmdFbmFibGVkCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>266440</attachid>
            <date>2015-12-02 06:47:46 -0800</date>
            <delta_ts>2015-12-02 11:11:51 -0800</delta_ts>
            <desc>patch</desc>
            <filename>resourceloadscheduler-webkit-3.patch</filename>
            <type>text/plain</type>
            <size>128619</size>
            <attacher name="Antti Koivisto">koivisto</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDE5Mjg4MCkKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDYzIEBACisyMDE1LTEyLTAyICBBbnR0aSBL
b2l2aXN0byAgPGFudHRpQGFwcGxlLmNvbT4KKworICAgICAgICBNb3ZlIFJlc291cmNlTG9hZFNj
aGVkdWxlciB0byBXZWJLaXQxCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3df
YnVnLmNnaT9pZD0xNTE3NDMKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4K
KworICAgICAgICBJdCBpcyBubyBsb25nZXIgdXNlZCBieSBXZWJLaXQyLiBTaW1wbGlmeSB0aGUg
V2ViS2l0L1dlYkNvcmUgaW50ZXJmYWNlLgorCisgICAgICAgICogV2ViQ29yZS54Y29kZXByb2ov
cHJvamVjdC5wYnhwcm9qOgorICAgICAgICAqIGRvbS9Db250YWluZXJOb2RlLmNwcDoKKyAgICAg
ICAgKiBkb20vRG9jdW1lbnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6RG9jdW1lbnQ6OnN0eWxl
Rm9yRWxlbWVudElnbm9yaW5nUGVuZGluZ1N0eWxlc2hlZXRzKToKKyAgICAgICAgKiBkb20vRG9j
dW1lbnQuaDoKKyAgICAgICAgKiBsb2FkZXIvRG9jdW1lbnRMb2FkZXIuaDoKKyAgICAgICAgKiBs
b2FkZXIvTG9hZGVyU3RyYXRlZ3kuY3BwOgorICAgICAgICAoV2ViQ29yZTo6TG9hZGVyU3RyYXRl
Z3k6On5Mb2FkZXJTdHJhdGVneSk6CisgICAgICAgIChXZWJDb3JlOjpSZXNvdXJjZUxvYWRTdXNw
ZW5kZXI6OlJlc291cmNlTG9hZFN1c3BlbmRlcik6CisgICAgICAgIChXZWJDb3JlOjpSZXNvdXJj
ZUxvYWRTdXNwZW5kZXI6On5SZXNvdXJjZUxvYWRTdXNwZW5kZXIpOgorICAgICAgICAoV2ViQ29y
ZTo6TG9hZGVyU3RyYXRlZ3k6OnJlc291cmNlTG9hZFNjaGVkdWxlcik6IERlbGV0ZWQuCisgICAg
ICAgIChXZWJDb3JlOjpMb2FkZXJTdHJhdGVneTo6bG9hZFJlc291cmNlU3luY2hyb25vdXNseSk6
IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpMb2FkZXJTdHJhdGVneTo6Y3JlYXRlQmxvYlJl
Z2lzdHJ5KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkxvYWRlclN0cmF0ZWd5OjpjcmVh
dGVQaW5nSGFuZGxlKTogRGVsZXRlZC4KKyAgICAgICAgKiBsb2FkZXIvTG9hZGVyU3RyYXRlZ3ku
aDoKKworICAgICAgICAgICAgTG9hZGluZyBmdW5jdGlvbnMgaW1wbGVtZW50ZWQgb24gV2ViS2l0
IHNpZGUgbW92ZSB0byBwdXJlIHZpcnR1YWwgTG9hZGVyU3RyYXRlZ3kuCisKKyAgICAgICAgKiBs
b2FkZXIvUmVzb3VyY2VMb2FkU2NoZWR1bGVyLmNwcDogUmVtb3ZlZC4KKyAgICAgICAgKiBsb2Fk
ZXIvUmVzb3VyY2VMb2FkU2NoZWR1bGVyLmg6IFJlbW92ZWQuCisKKyAgICAgICAgICAgIFJlc291
cmNlTG9hZFNjaGVkdWxlciBtb3ZlcyB0byBXZWJLaXQxIGFzIFdlYlJlc291cmNlTG9hZFNjaGVk
dWxlci4KKworICAgICAgICAqIGxvYWRlci9SZXNvdXJjZUxvYWRlci5jcHA6CisgICAgICAgIChX
ZWJDb3JlOjpSZXNvdXJjZUxvYWRlcjo6ZmluaXNoTmV0d29ya0xvYWQpOgorICAgICAgICAoV2Vi
Q29yZTo6UmVzb3VyY2VMb2FkZXI6OnNldERlZmVyc0xvYWRpbmcpOgorICAgICAgICAoV2ViQ29y
ZTo6UmVzb3VyY2VMb2FkZXI6OmZyYW1lTG9hZGVyKToKKyAgICAgICAgKFdlYkNvcmU6OlJlc291
cmNlTG9hZGVyOjp3aWxsU3dpdGNoVG9TdWJzdGl0dXRlUmVzb3VyY2UpOgorICAgICAgICAoV2Vi
Q29yZTo6UmVzb3VyY2VMb2FkZXI6OndpbGxTZW5kUmVxdWVzdEludGVybmFsKToKKyAgICAgICAg
KiBsb2FkZXIvYXJjaGl2ZS9BcmNoaXZlUmVzb3VyY2VDb2xsZWN0aW9uLmg6CisgICAgICAgICog
bG9hZGVyL2NhY2hlL0NhY2hlZFJlc291cmNlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkNhY2hl
ZFJlc291cmNlOjpsb2FkKToKKyAgICAgICAgKiBsb2FkZXIvY2FjaGUvQ2FjaGVkUmVzb3VyY2VM
b2FkZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Q2FjaGVkUmVzb3VyY2VMb2FkZXI6OnBlcmZv
cm1Qb3N0TG9hZEFjdGlvbnMpOgorICAgICAgICAoV2ViQ29yZTo6Q2FjaGVkUmVzb3VyY2VMb2Fk
ZXI6OmluY3JlbWVudFJlcXVlc3RDb3VudCk6CisgICAgICAgICogcGxhdGZvcm0vUGxhdGZvcm1T
dHJhdGVnaWVzLmg6CisgICAgICAgIChXZWJDb3JlOjpQbGF0Zm9ybVN0cmF0ZWdpZXM6OnBsdWdp
blN0cmF0ZWd5KToKKyAgICAgICAgKFdlYkNvcmU6OlBsYXRmb3JtU3RyYXRlZ2llczo6YmxvYlJl
Z2lzdHJ5KToKKworICAgICAgICAgICAgTW92ZSBCbG9iUmVnaXN0cnkgZmFjdG9yeSBmdW5jdGlv
biBoZXJlIGZyb20gTG9hZGVyU3RyYXRlZ3kgYXMgdGhpcyBhbGxvd3MgbmV0d29yayBwcm9jZXNz
IHRvIGhhdmUgbnVsbCBsb2FkZXJTdHJhdGVneS4KKyAgICAgICAgICAgIChpdCBjb3VsZCBiZSBy
ZW5hbWVkIEJsb2JTdHJhdGVneSBmb3IgY29uc2lzdGVuY3kgbGF0ZXIpLgorCisgICAgICAgIChX
ZWJDb3JlOjpQbGF0Zm9ybVN0cmF0ZWdpZXM6OlBsYXRmb3JtU3RyYXRlZ2llcyk6CisgICAgICAg
ICogcGxhdGZvcm0vbmV0d29yay9CbG9iUmVnaXN0cnkuY3BwOgorICAgICAgICAoV2ViQ29yZTo6
YmxvYlJlZ2lzdHJ5KToKKyAgICAgICAgKFdlYkNvcmU6OkJsb2JSZWdpc3RyeTo6fkJsb2JSZWdp
c3RyeSk6CisgICAgICAgICogcGxhdGZvcm0vbmV0d29yay9SZXNvdXJjZVJlcXVlc3RCYXNlLmg6
CisgICAgICAgICogc3R5bGUvU3R5bGVSZXNvbHZlVHJlZS5jcHA6CisgICAgICAgIChXZWJDb3Jl
OjpTdHlsZTo6UG9zdFJlc29sdXRpb25DYWxsYmFja0Rpc2FibGVyOjpQb3N0UmVzb2x1dGlvbkNh
bGxiYWNrRGlzYWJsZXIpOgorICAgICAgICAoV2ViQ29yZTo6U3R5bGU6OlBvc3RSZXNvbHV0aW9u
Q2FsbGJhY2tEaXNhYmxlcjo6flBvc3RSZXNvbHV0aW9uQ2FsbGJhY2tEaXNhYmxlcik6CisKIDIw
MTUtMTItMDEgIENhcmxvcyBHYXJjaWEgQ2FtcG9zICA8Y2dhcmNpYUBpZ2FsaWEuY29tPgogCiAg
ICAgICAgIFtHVEtdIEFTU0VSVElPTiBGQUlMRUQ6IG1fdGFibGUgcnVubmluZyAvd2Via2l0Mi9C
YWNrRm9yd2FyZExpc3QvbmF2aWdhdGlvbiBpbiBEZWJ1ZyBidWlsZApJbmRleDogU291cmNlL1dl
YkNvcmUvQ01ha2VMaXN0cy50eHQKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvQ01ha2VM
aXN0cy50eHQJKHJldmlzaW9uIDE5Mjg4MCkKKysrIFNvdXJjZS9XZWJDb3JlL0NNYWtlTGlzdHMu
dHh0CSh3b3JraW5nIGNvcHkpCkBAIC0xOTUwLDcgKzE5NTAsNiBAQCBzZXQoV2ViQ29yZV9TT1VS
Q0VTCiAgICAgbG9hZGVyL1BvbGljeUNoZWNrZXIuY3BwCiAgICAgbG9hZGVyL1Byb2dyZXNzVHJh
Y2tlci5jcHAKICAgICBsb2FkZXIvUmVzb3VyY2VMb2FkTm90aWZpZXIuY3BwCi0gICAgbG9hZGVy
L1Jlc291cmNlTG9hZFNjaGVkdWxlci5jcHAKICAgICBsb2FkZXIvUmVzb3VyY2VMb2FkZXIuY3Bw
CiAgICAgbG9hZGVyL1NpbmtEb2N1bWVudC5jcHAKICAgICBsb2FkZXIvU3ViZnJhbWVMb2FkZXIu
Y3BwCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnZjeHByb2ovV2ViQ29yZS52Y3hwcm9q
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL1dlYkNvcmUudmN4cHJvai9XZWJDb3JlLnZj
eHByb2oJKHJldmlzaW9uIDE5Mjg4MCkKKysrIFNvdXJjZS9XZWJDb3JlL1dlYkNvcmUudmN4cHJv
ai9XZWJDb3JlLnZjeHByb2oJKHdvcmtpbmcgY29weSkKQEAgLTc0MTgsNyArNzQxOCw2IEBACiAg
ICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxsb2FkZXJcUmVzb3VyY2VMb2FkZXIuY3BwIiAvPgog
ICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cbG9hZGVyXGNmXFJlc291cmNlTG9hZGVyQ0ZOZXQu
Y3BwIiAvPgogICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cbG9hZGVyXFJlc291cmNlTG9hZE5v
dGlmaWVyLmNwcCIgLz4KLSAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXGxvYWRlclxSZXNvdXJj
ZUxvYWRTY2hlZHVsZXIuY3BwIiAvPgogICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cbG9hZGVy
XFNpbmtEb2N1bWVudC5jcHAiIC8+CiAgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxsb2FkZXJc
U3ViZnJhbWVMb2FkZXIuY3BwIiAvPgogICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cbG9hZGVy
XFN1YnJlc291cmNlTG9hZGVyLmNwcCIgLz4KQEAgLTIwODM5LDcgKzIwODM4LDYgQEAKICAgICA8
Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXGxvYWRlclxSZXNvdXJjZUxvYWRlci5oIiAvPgogICAgIDxD
bEluY2x1ZGUgSW5jbHVkZT0iLi5cbG9hZGVyXFJlc291cmNlTG9hZGVyT3B0aW9ucy5oIiAvPgog
ICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cbG9hZGVyXFJlc291cmNlTG9hZE5vdGlmaWVyLmgi
IC8+Ci0gICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxsb2FkZXJcUmVzb3VyY2VMb2FkU2NoZWR1
bGVyLmgiIC8+CiAgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxsb2FkZXJcU2lua0RvY3VtZW50
LmgiIC8+CiAgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxsb2FkZXJcU3ViZnJhbWVMb2FkZXIu
aCIgLz4KICAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXGxvYWRlclxTdWJyZXNvdXJjZUxvYWRl
ci5oIiAvPgpJbmRleDogU291cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5w
Ynhwcm9qCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3By
b2plY3QucGJ4cHJvagkocmV2aXNpb24gMTkyODgwKQorKysgU291cmNlL1dlYkNvcmUvV2ViQ29y
ZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCSh3b3JraW5nIGNvcHkpCkBAIC02MTY5LDggKzYx
NjksNiBAQAogCQlEMEJDNTQ0OTE0NDNBQzRBMDBFMTA1REEgLyogQ2FjaGVkU3R5bGVTaGVldENs
aWVudC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRDBC
QzU0NDgxNDQzQUM0QTAwRTEwNURBIC8qIENhY2hlZFN0eWxlU2hlZXRDbGllbnQuaCAqLzsgc2V0
dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQlEMEJENEY1QzE0MDg4
NTBGMDA2ODM5QjYgLyogRGljdGF0aW9uQ29tbWFuZElPUy5jcHAgaW4gU291cmNlcyAqLyA9IHtp
c2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBEMEJENEY1QTE0MDg4NTBGMDA2ODM5QjYgLyog
RGljdGF0aW9uQ29tbWFuZElPUy5jcHAgKi87IH07CiAJCUQwQkQ0RjVEMTQwODg1MEYwMDY4MzlC
NiAvKiBEaWN0YXRpb25Db21tYW5kSU9TLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWls
ZEZpbGU7IGZpbGVSZWYgPSBEMEJENEY1QjE0MDg4NTBGMDA2ODM5QjYgLyogRGljdGF0aW9uQ29t
bWFuZElPUy5oICovOyB9OwotCQlEMENFNThGODEyNUU0Q0MyMDBGM0YxOTkgLyogUmVzb3VyY2VM
b2FkU2NoZWR1bGVyLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmls
ZVJlZiA9IEQwQ0U1OEY2MTI1RTRDQzIwMEYzRjE5OSAvKiBSZXNvdXJjZUxvYWRTY2hlZHVsZXIu
Y3BwICovOyB9OwotCQlEMENFNThGOTEyNUU0Q0MyMDBGM0YxOTkgLyogUmVzb3VyY2VMb2FkU2No
ZWR1bGVyLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBE
MENFNThGNzEyNUU0Q0MyMDBGM0YxOTkgLyogUmVzb3VyY2VMb2FkU2NoZWR1bGVyLmggKi87IHNl
dHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJRDBFREE3NzQxNDNF
MzAzQzAwMjhFMzgzIC8qIENhY2hlZFJhd1Jlc291cmNlLmNwcCBpbiBTb3VyY2VzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEQwRURBNzcyMTQzRTMwM0MwMDI4RTM4MyAvKiBD
YWNoZWRSYXdSZXNvdXJjZS5jcHAgKi87IH07CiAJCUQwRURBNzc1MTQzRTMwM0MwMDI4RTM4MyAv
KiBDYWNoZWRSYXdSZXNvdXJjZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gRDBFREE3NzMxNDNFMzAzQzAwMjhFMzgzIC8qIENhY2hlZFJhd1Jlc291cmNl
LmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJRDBG
RjJBNUQxMUY4QzQ1QTAwN0U3NEUwIC8qIFBpbmdMb2FkZXIuY3BwIGluIFNvdXJjZXMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRDBGRjJBNUIxMUY4QzQ1QTAwN0U3NEUwIC8q
IFBpbmdMb2FkZXIuY3BwICovOyB9OwpAQCAtMTQwNjYsOCArMTQwNjQsNiBAQAogCQlEMEJDNTQ0
ODE0NDNBQzRBMDBFMTA1REEgLyogQ2FjaGVkU3R5bGVTaGVldENsaWVudC5oICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jLmg7IHBhdGggPSBDYWNoZWRTdHlsZVNoZWV0Q2xpZW50Lmg7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CiAJCUQwQkQ0RjVBMTQwODg1MEYwMDY4MzlCNiAvKiBEaWN0YXRp
b25Db21tYW5kSU9TLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IERp
Y3RhdGlvbkNvbW1hbmRJT1MuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlEMEJE
NEY1QjE0MDg4NTBGMDA2ODM5QjYgLyogRGljdGF0aW9uQ29tbWFuZElPUy5oICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jLmg7IHBhdGggPSBEaWN0YXRpb25Db21tYW5kSU9TLmg7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07Ci0JCUQwQ0U1OEY2MTI1RTRDQzIwMEYzRjE5OSAvKiBSZXNvdXJjZUxv
YWRTY2hlZHVsZXIuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGlu
ZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gUmVz
b3VyY2VMb2FkU2NoZWR1bGVyLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJRDBD
RTU4RjcxMjVFNENDMjAwRjNGMTk5IC8qIFJlc291cmNlTG9hZFNjaGVkdWxlci5oICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBSZXNvdXJjZUxvYWRTY2hlZHVsZXIuaDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJRDBFREE3NzIxNDNFMzAzQzAwMjhFMzgzIC8qIENhY2hl
ZFJhd1Jlc291cmNlLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IENh
Y2hlZFJhd1Jlc291cmNlLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJRDBFREE3
NzMxNDNFMzAzQzAwMjhFMzgzIC8qIENhY2hlZFJhd1Jlc291cmNlLmggKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmMuaDsgcGF0aCA9IENhY2hlZFJhd1Jlc291cmNlLmg7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CiAJCUQwRkYyQTVCMTFGOEM0NUEwMDdFNzRFMCAvKiBQaW5nTG9hZGVyLmNwcCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFBpbmdMb2FkZXIuY3BwOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtMjI0NTgsOCArMjI0NTQsNiBAQAogCQkJCTUxRUU3
QjM3MUFBNTBCMDUwMEY5MkIyMSAvKiBSZXNvdXJjZUxvYWRJbmZvLmggKi8sCiAJCQkJOTczRTMy
NTQxMDg4M0I3QzAwNUJDNDkzIC8qIFJlc291cmNlTG9hZE5vdGlmaWVyLmNwcCAqLywKIAkJCQk5
NzNFMzI1NTEwODgzQjdDMDA1QkM0OTMgLyogUmVzb3VyY2VMb2FkTm90aWZpZXIuaCAqLywKLQkJ
CQlEMENFNThGNjEyNUU0Q0MyMDBGM0YxOTkgLyogUmVzb3VyY2VMb2FkU2NoZWR1bGVyLmNwcCAq
LywKLQkJCQlEMENFNThGNzEyNUU0Q0MyMDBGM0YxOTkgLyogUmVzb3VyY2VMb2FkU2NoZWR1bGVy
LmggKi8sCiAJCQkJNTEzMjdENUYxMUEzM0EyQjAwNEY5RDY1IC8qIFNpbmtEb2N1bWVudC5jcHAg
Ki8sCiAJCQkJNTEzMjdENUUxMUEzM0EyQjAwNEY5RDY1IC8qIFNpbmtEb2N1bWVudC5oICovLAog
CQkJCUQwMDBFRDI1MTFDMUI5Q0QwMEM0NzcyNiAvKiBTdWJmcmFtZUxvYWRlci5jcHAgKi8sCkBA
IC0yNzI4NCw3ICsyNzI3OCw2IEBACiAJCQkJNTFFRTdCMzgxQUE1MEIwNTAwRjkyQjIxIC8qIFJl
c291cmNlTG9hZEluZm8uaCBpbiBIZWFkZXJzICovLAogCQkJCTk3M0UzMjU3MTA4ODNCN0MwMDVC
QzQ5MyAvKiBSZXNvdXJjZUxvYWROb3RpZmllci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJRTQyOTVG
QTQxMkIwNjE0RTAwRDFBQ0UwIC8qIFJlc291cmNlTG9hZFByaW9yaXR5LmggaW4gSGVhZGVycyAq
LywKLQkJCQlEMENFNThGOTEyNUU0Q0MyMDBGM0YxOTkgLyogUmVzb3VyY2VMb2FkU2NoZWR1bGVy
LmggaW4gSGVhZGVycyAqLywKIAkJCQk4QTgxQkY4NTExRENGRDkwMDBEQTJCOTggLyogUmVzb3Vy
Y2VMb2FkVGltaW5nLmggaW4gSGVhZGVycyAqLywKIAkJCQk3RUU2ODQ2RDEyRDI2RTM4MDBFNzk0
MTUgLyogUmVzb3VyY2VSZXF1ZXN0LmggaW4gSGVhZGVycyAqLywKIAkJCQk1MTRDNzY3RDBDRTky
M0ExMDA3RUYzQ0QgLyogUmVzb3VyY2VSZXF1ZXN0QmFzZS5oIGluIEhlYWRlcnMgKi8sCkBAIC0z
MDg2MSw3ICszMDg1NCw2IEBACiAJCQkJNTFBQTNGNkYwQkQ1QUE5RTAwODkyOTcxIC8qIFJlc291
cmNlTG9hZGVyTWFjLm1tIGluIFNvdXJjZXMgKi8sCiAJCQkJNTFFRTdCM0ExQUE1MTIzMTAwRjky
QjIxIC8qIFJlc291cmNlTG9hZEluZm8uY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJOTczRTMyNTYx
MDg4M0I3QzAwNUJDNDkzIC8qIFJlc291cmNlTG9hZE5vdGlmaWVyLmNwcCBpbiBTb3VyY2VzICov
LAotCQkJCUQwQ0U1OEY4MTI1RTRDQzIwMEYzRjE5OSAvKiBSZXNvdXJjZUxvYWRTY2hlZHVsZXIu
Y3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJNTE0Qzc2N0MwQ0U5MjNBMTAwN0VGM0NEIC8qIFJlc291
cmNlUmVxdWVzdEJhc2UuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJN0VFNjg0NkUxMkQyNkUzODAw
RTc5NDE1IC8qIFJlc291cmNlUmVxdWVzdENGTmV0LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTdF
N0RFMUZEMTk1Q0VGMjYwMDM1MzYzQiAvKiBSZXNvdXJjZVJlcXVlc3RDb2NvYS5tbSBpbiBTb3Vy
Y2VzICovLApJbmRleDogU291cmNlL1dlYkNvcmUvZG9tL0NvbnRhaW5lck5vZGUuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2RvbS9Db250YWluZXJOb2RlLmNwcAkocmV2aXNpb24g
MTkyODgwKQorKysgU291cmNlL1dlYkNvcmUvZG9tL0NvbnRhaW5lck5vZGUuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC00OSw3ICs0OSw2IEBACiAjaW5jbHVkZSAiUmVuZGVyQm94LmgiCiAjaW5jbHVk
ZSAiUmVuZGVyVGhlbWUuaCIKICNpbmNsdWRlICJSZW5kZXJXaWRnZXQuaCIKLSNpbmNsdWRlICJS
ZXNvdXJjZUxvYWRTY2hlZHVsZXIuaCIKICNpbmNsdWRlICJSb290SW5saW5lQm94LmgiCiAjaW5j
bHVkZSAiU1ZHRG9jdW1lbnRFeHRlbnNpb25zLmgiCiAjaW5jbHVkZSAiU1ZHRWxlbWVudC5oIgpJ
bmRleDogU291cmNlL1dlYkNvcmUvZG9tL0RvY3VtZW50LmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvV2ViQ29yZS9kb20vRG9jdW1lbnQuY3BwCShyZXZpc2lvbiAxOTI4ODApCisrKyBTb3VyY2Uv
V2ViQ29yZS9kb20vRG9jdW1lbnQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMjYsNyArMTI2LDYg
QEAKICNpbmNsdWRlICJSZW5kZXJMYXllckNvbXBvc2l0b3IuaCIKICNpbmNsdWRlICJSZW5kZXJW
aWV3LmgiCiAjaW5jbHVkZSAiUmVuZGVyV2lkZ2V0LmgiCi0jaW5jbHVkZSAiUmVzb3VyY2VMb2Fk
U2NoZWR1bGVyLmgiCiAjaW5jbHVkZSAiUnVudGltZUVuYWJsZWRGZWF0dXJlcy5oIgogI2luY2x1
ZGUgIlNWR0RvY3VtZW50RXh0ZW5zaW9ucy5oIgogI2luY2x1ZGUgIlNWR0VsZW1lbnQuaCIKQEAg
LTE5NTksNyArMTk1OCw3IEBAIFJlZjxSZW5kZXJTdHlsZT4gRG9jdW1lbnQ6OnN0eWxlRm9yRWxl
bWUKICAgICBBU1NFUlQoJmVsZW1lbnQuZG9jdW1lbnQoKSA9PSB0aGlzKTsKIAogICAgIC8vIE9u
IGlPUyByZXF1ZXN0IGRlbGVnYXRlcyBjYWxsZWQgZHVyaW5nIHN0eWxlRm9yRWxlbWVudCBtYXkg
cmVzdWx0IGluIHJlLWVudGVyaW5nIFdlYktpdCBhbmQga2lsbGluZyB0aGUgc3R5bGUgcmVzb2x2
ZXIuCi0gICAgUmVzb3VyY2VMb2FkU2NoZWR1bGVyOjpTdXNwZW5kZXIgc3VzcGVuZGVyKCpwbGF0
Zm9ybVN0cmF0ZWdpZXMoKS0+bG9hZGVyU3RyYXRlZ3koKS0+cmVzb3VyY2VMb2FkU2NoZWR1bGVy
KCkpOworICAgIFJlc291cmNlTG9hZFN1c3BlbmRlciBzdXNwZW5kZXI7CiAKICAgICBUZW1wb3Jh
cnlDaGFuZ2U8Ym9vbD4gY2hhbmdlKG1faWdub3JlUGVuZGluZ1N0eWxlc2hlZXRzLCB0cnVlKTsK
ICAgICByZXR1cm4gZWxlbWVudC5yZXNvbHZlU3R5bGUocGFyZW50U3R5bGUpOwpJbmRleDogU291
cmNlL1dlYkNvcmUvZG9tL0RvY3VtZW50LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUv
ZG9tL0RvY3VtZW50LmgJKHJldmlzaW9uIDE5Mjg4MCkKKysrIFNvdXJjZS9XZWJDb3JlL2RvbS9E
b2N1bWVudC5oCSh3b3JraW5nIGNvcHkpCkBAIC01MTEsNyArNTExLDcgQEAgcHVibGljOgogCiAg
ICAgdm9pZCBub3RpZnlSZW1vdmVQZW5kaW5nU2hlZXRJZk5lZWRlZCgpOwogCi0gICAgYm9vbCBo
YXZlU3R5bGVzaGVldHNMb2FkZWQoKSBjb25zdDsKKyAgICBXRUJDT1JFX0VYUE9SVCBib29sIGhh
dmVTdHlsZXNoZWV0c0xvYWRlZCgpIGNvbnN0OwogCiAgICAgLy8gVGhpcyBpcyBhIERPTSBmdW5j
dGlvbi4KICAgICBTdHlsZVNoZWV0TGlzdCYgc3R5bGVTaGVldHMoKTsKSW5kZXg6IFNvdXJjZS9X
ZWJDb3JlL2xvYWRlci9Eb2N1bWVudExvYWRlci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJD
b3JlL2xvYWRlci9Eb2N1bWVudExvYWRlci5oCShyZXZpc2lvbiAxOTI4ODApCisrKyBTb3VyY2Uv
V2ViQ29yZS9sb2FkZXIvRG9jdW1lbnRMb2FkZXIuaAkod29ya2luZyBjb3B5KQpAQCAtMTYxLDcg
KzE2MSw3IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKICAgICAgICAgdm9pZCBzY2hlZHVsZVN1YnN0
aXR1dGVSZXNvdXJjZUxvYWQoUmVzb3VyY2VMb2FkZXImLCBTdWJzdGl0dXRlUmVzb3VyY2UmKTsK
IAogICAgICAgICAvLyBSZXR1cm4gdGhlIEFyY2hpdmVSZXNvdXJjZSBmb3IgdGhlIFVSTCBvbmx5
IHdoZW4gbG9hZGluZyBhbiBBcmNoaXZlCi0gICAgICAgIEFyY2hpdmVSZXNvdXJjZSogYXJjaGl2
ZVJlc291cmNlRm9yVVJMKGNvbnN0IFVSTCYpIGNvbnN0OworICAgICAgICBXRUJDT1JFX0VYUE9S
VCBBcmNoaXZlUmVzb3VyY2UqIGFyY2hpdmVSZXNvdXJjZUZvclVSTChjb25zdCBVUkwmKSBjb25z
dDsKIAogICAgICAgICBXRUJDT1JFX0VYUE9SVCBQYXNzUmVmUHRyPEFyY2hpdmVSZXNvdXJjZT4g
bWFpblJlc291cmNlKCkgY29uc3Q7CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2xvYWRlci9Mb2Fk
ZXJTdHJhdGVneS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvbG9hZGVyL0xvYWRl
clN0cmF0ZWd5LmNwcAkocmV2aXNpb24gMTkyODgwKQorKysgU291cmNlL1dlYkNvcmUvbG9hZGVy
L0xvYWRlclN0cmF0ZWd5LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0g
KiBDb3B5cmlnaHQgKEMpIDIwMTIgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICog
Q29weXJpZ2h0IChDKSAyMDEyLCAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
ICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1z
LCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRl
ZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMjYsMzIgKzI2LDI0IEBACiAjaW5j
bHVkZSAiY29uZmlnLmgiCiAjaW5jbHVkZSAiTG9hZGVyU3RyYXRlZ3kuaCIKIAotI2luY2x1ZGUg
IkJsb2JSZWdpc3RyeUltcGwuaCIKLSNpbmNsdWRlICJQaW5nSGFuZGxlLmgiCi0jaW5jbHVkZSAi
UmVzb3VyY2VIYW5kbGUuaCIKLSNpbmNsdWRlICJSZXNvdXJjZUxvYWRTY2hlZHVsZXIuaCIKKyNp
bmNsdWRlICJQbGF0Zm9ybVN0cmF0ZWdpZXMuaCIKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi1S
ZXNvdXJjZUxvYWRTY2hlZHVsZXIqIExvYWRlclN0cmF0ZWd5OjpyZXNvdXJjZUxvYWRTY2hlZHVs
ZXIoKQorTG9hZGVyU3RyYXRlZ3k6On5Mb2FkZXJTdHJhdGVneSgpCiB7Ci0gICAgcmV0dXJuIFdl
YkNvcmU6OnJlc291cmNlTG9hZFNjaGVkdWxlcigpOwogfQogCi12b2lkIExvYWRlclN0cmF0ZWd5
Ojpsb2FkUmVzb3VyY2VTeW5jaHJvbm91c2x5KE5ldHdvcmtpbmdDb250ZXh0KiBjb250ZXh0LCB1
bnNpZ25lZCBsb25nLCBjb25zdCBSZXNvdXJjZVJlcXVlc3QmIHJlcXVlc3QsIFN0b3JlZENyZWRl
bnRpYWxzIHN0b3JlZENyZWRlbnRpYWxzLCBDbGllbnRDcmVkZW50aWFsUG9saWN5LCBSZXNvdXJj
ZUVycm9yJiBlcnJvciwgUmVzb3VyY2VSZXNwb25zZSYgcmVzcG9uc2UsIFZlY3RvcjxjaGFyPiYg
ZGF0YSkKK1Jlc291cmNlTG9hZFN1c3BlbmRlcjo6UmVzb3VyY2VMb2FkU3VzcGVuZGVyKCkKIHsK
LSAgICBSZXNvdXJjZUhhbmRsZTo6bG9hZFJlc291cmNlU3luY2hyb25vdXNseShjb250ZXh0LCBy
ZXF1ZXN0LCBzdG9yZWRDcmVkZW50aWFscywgZXJyb3IsIHJlc3BvbnNlLCBkYXRhKTsKKyAgICBw
bGF0Zm9ybVN0cmF0ZWdpZXMoKS0+bG9hZGVyU3RyYXRlZ3koKS0+c3VzcGVuZFBlbmRpbmdSZXF1
ZXN0cygpOwogfQogCi1CbG9iUmVnaXN0cnkqIExvYWRlclN0cmF0ZWd5OjpjcmVhdGVCbG9iUmVn
aXN0cnkoKQorUmVzb3VyY2VMb2FkU3VzcGVuZGVyOjp+UmVzb3VyY2VMb2FkU3VzcGVuZGVyKCkK
IHsKLSAgICByZXR1cm4gbmV3IEJsb2JSZWdpc3RyeUltcGw7Ci19Ci0KLXZvaWQgTG9hZGVyU3Ry
YXRlZ3k6OmNyZWF0ZVBpbmdIYW5kbGUoTmV0d29ya2luZ0NvbnRleHQqIG5ldHdvcmtpbmdDb250
ZXh0LCBSZXNvdXJjZVJlcXVlc3QmIHJlcXVlc3QsIGJvb2wgc2hvdWxkVXNlQ3JlZGVudGlhbFN0
b3JhZ2UpCi17Ci0gICAgLy8gUGluZ0hhbmRsZSBtYW5hZ2VzIGl0cyBvd24gbGlmZXRpbWUsIGRl
bGV0aW5nIGl0c2VsZiB3aGVuIGl0cyBwdXJwb3NlIGhhcyBiZWVuIGZ1bGZpbGxlZC4KLSAgICBu
ZXcgUGluZ0hhbmRsZShuZXR3b3JraW5nQ29udGV4dCwgcmVxdWVzdCwgc2hvdWxkVXNlQ3JlZGVu
dGlhbFN0b3JhZ2UsIFBpbmdIYW5kbGU6OlVzZXNBc3luY0NhbGxiYWNrczo6Tm8pOworICAgIHBs
YXRmb3JtU3RyYXRlZ2llcygpLT5sb2FkZXJTdHJhdGVneSgpLT5yZXN1bWVQZW5kaW5nUmVxdWVz
dHMoKTsKIH0KIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCisKSW5kZXg6IFNvdXJjZS9XZWJD
b3JlL2xvYWRlci9Mb2FkZXJTdHJhdGVneS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3Jl
L2xvYWRlci9Mb2FkZXJTdHJhdGVneS5oCShyZXZpc2lvbiAxOTI4ODApCisrKyBTb3VyY2UvV2Vi
Q29yZS9sb2FkZXIvTG9hZGVyU3RyYXRlZ3kuaAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUg
QEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTIgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEyLCAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmlu
YXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRl
ZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMjcsMzIgKzI3LDQ4
IEBACiAjZGVmaW5lIExvYWRlclN0cmF0ZWd5X2gKIAogI2luY2x1ZGUgIlJlc291cmNlSGFuZGxl
VHlwZXMuaCIKKyNpbmNsdWRlICJSZXNvdXJjZUxvYWRQcmlvcml0eS5oIgorI2luY2x1ZGUgIlJl
c291cmNlTG9hZGVyT3B0aW9ucy5oIgogI2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4KIAogbmFtZXNw
YWNlIFdlYkNvcmUgewogCiBjbGFzcyBCbG9iUmVnaXN0cnk7CitjbGFzcyBDYWNoZWRSZXNvdXJj
ZTsKIGNsYXNzIEZyYW1lOworY2xhc3MgTmV0c2NhcGVQbHVnSW5TdHJlYW1Mb2FkZXI7CitjbGFz
cyBOZXRzY2FwZVBsdWdJblN0cmVhbUxvYWRlckNsaWVudDsKIGNsYXNzIE5ldHdvcmtpbmdDb250
ZXh0OwogY2xhc3MgUmVzb3VyY2VFcnJvcjsKLWNsYXNzIFJlc291cmNlTG9hZFNjaGVkdWxlcjsK
K2NsYXNzIFJlc291cmNlTG9hZGVyOwogY2xhc3MgUmVzb3VyY2VSZXF1ZXN0OwogY2xhc3MgUmVz
b3VyY2VSZXNwb25zZTsKK2NsYXNzIFN1YnJlc291cmNlTG9hZGVyOworY2xhc3MgVVJMOwogCiBj
bGFzcyBXRUJDT1JFX0VYUE9SVCBMb2FkZXJTdHJhdGVneSB7CiBwdWJsaWM6Ci0gICAgdmlydHVh
bCBSZXNvdXJjZUxvYWRTY2hlZHVsZXIqIHJlc291cmNlTG9hZFNjaGVkdWxlcigpOworICAgIHZp
cnR1YWwgUmVmUHRyPFN1YnJlc291cmNlTG9hZGVyPiBsb2FkUmVzb3VyY2UoRnJhbWUqLCBDYWNo
ZWRSZXNvdXJjZSosIGNvbnN0IFJlc291cmNlUmVxdWVzdCYsIGNvbnN0IFJlc291cmNlTG9hZGVy
T3B0aW9ucyYpID0gMDsKKyAgICB2aXJ0dWFsIHZvaWQgbG9hZFJlc291cmNlU3luY2hyb25vdXNs
eShOZXR3b3JraW5nQ29udGV4dCosIHVuc2lnbmVkIGxvbmcgaWRlbnRpZmllciwgY29uc3QgUmVz
b3VyY2VSZXF1ZXN0JiwgU3RvcmVkQ3JlZGVudGlhbHMsIENsaWVudENyZWRlbnRpYWxQb2xpY3ks
IFJlc291cmNlRXJyb3ImLCBSZXNvdXJjZVJlc3BvbnNlJiwgVmVjdG9yPGNoYXI+JiBkYXRhKSA9
IDA7CiAKLSAgICB2aXJ0dWFsIHZvaWQgbG9hZFJlc291cmNlU3luY2hyb25vdXNseShOZXR3b3Jr
aW5nQ29udGV4dCosIHVuc2lnbmVkIGxvbmcgaWRlbnRpZmllciwgY29uc3QgUmVzb3VyY2VSZXF1
ZXN0JiwgU3RvcmVkQ3JlZGVudGlhbHMsIENsaWVudENyZWRlbnRpYWxQb2xpY3ksIFJlc291cmNl
RXJyb3ImLCBSZXNvdXJjZVJlc3BvbnNlJiwgVmVjdG9yPGNoYXI+JiBkYXRhKTsKKyAgICB2aXJ0
dWFsIHZvaWQgcmVtb3ZlKFJlc291cmNlTG9hZGVyKikgPSAwOworICAgIHZpcnR1YWwgdm9pZCBz
ZXREZWZlcnNMb2FkaW5nKFJlc291cmNlTG9hZGVyKiwgYm9vbCkgPSAwOworICAgIHZpcnR1YWwg
dm9pZCBjcm9zc09yaWdpblJlZGlyZWN0UmVjZWl2ZWQoUmVzb3VyY2VMb2FkZXIqLCBjb25zdCBV
UkwmIHJlZGlyZWN0VVJMKSA9IDA7CisKKyAgICB2aXJ0dWFsIHZvaWQgc2VydmVQZW5kaW5nUmVx
dWVzdHMoUmVzb3VyY2VMb2FkUHJpb3JpdHkgbWluaW11bVByaW9yaXR5ID0gUmVzb3VyY2VMb2Fk
UHJpb3JpdHk6OlZlcnlMb3cpID0gMDsKKyAgICB2aXJ0dWFsIHZvaWQgc3VzcGVuZFBlbmRpbmdS
ZXF1ZXN0cygpID0gMDsKKyAgICB2aXJ0dWFsIHZvaWQgcmVzdW1lUGVuZGluZ1JlcXVlc3RzKCkg
PSAwOwogCi0gICAgdmlydHVhbCBCbG9iUmVnaXN0cnkqIGNyZWF0ZUJsb2JSZWdpc3RyeSgpOwot
Ci0gICAgdmlydHVhbCB2b2lkIGNyZWF0ZVBpbmdIYW5kbGUoTmV0d29ya2luZ0NvbnRleHQqLCBS
ZXNvdXJjZVJlcXVlc3QmLCBib29sIHNob3VsZFVzZUNyZWRlbnRpYWxTdG9yYWdlKTsKKyAgICB2
aXJ0dWFsIHZvaWQgY3JlYXRlUGluZ0hhbmRsZShOZXR3b3JraW5nQ29udGV4dCosIFJlc291cmNl
UmVxdWVzdCYsIGJvb2wgc2hvdWxkVXNlQ3JlZGVudGlhbFN0b3JhZ2UpID0gMDsKIAogcHJvdGVj
dGVkOgotICAgIHZpcnR1YWwgfkxvYWRlclN0cmF0ZWd5KCkKLSAgICB7Ci0gICAgfQorICAgIHZp
cnR1YWwgfkxvYWRlclN0cmF0ZWd5KCk7Cit9OworCitjbGFzcyBSZXNvdXJjZUxvYWRTdXNwZW5k
ZXIgeworcHVibGljOgorICAgIFJlc291cmNlTG9hZFN1c3BlbmRlcigpOworICAgIH5SZXNvdXJj
ZUxvYWRTdXNwZW5kZXIoKTsKIH07CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKSW5kZXg6IFNv
dXJjZS9XZWJDb3JlL2xvYWRlci9SZXNvdXJjZUxvYWRTY2hlZHVsZXIuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9XZWJDb3JlL2xvYWRlci9SZXNvdXJjZUxvYWRTY2hlZHVsZXIuY3BwCShyZXZp
c2lvbiAxOTI4ODApCisrKyBTb3VyY2UvV2ViQ29yZS9sb2FkZXIvUmVzb3VyY2VMb2FkU2NoZWR1
bGVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSwzOTIgKzAsMCBAQAotLyoKLSAgICBDb3B5cmln
aHQgKEMpIDE5OTggTGFycyBLbm9sbCAoa25vbGxAbXBpLWhkLm1wZy5kZSkKLSAgICBDb3B5cmln
aHQgKEMpIDIwMDEgRGlyayBNdWVsbGVyIChtdWVsbGVyQGtkZS5vcmcpCi0gICAgQ29weXJpZ2h0
IChDKSAyMDAyIFdhbGRvIEJhc3RpYW4gKGJhc3RpYW5Aa2RlLm9yZykKLSAgICBDb3B5cmlnaHQg
KEMpIDIwMDYgU2FtdWVsIFdlaW5pZyAoc2FtLndlaW5pZ0BnbWFpbC5jb20pCi0gICAgQ29weXJp
Z2h0IChDKSAyMDA0LCAyMDA1LCAyMDA2LCAyMDA3LCAyMDA4IEFwcGxlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KLSAgICBDb3B5cmlnaHQgKEMpIDIwMTAgR29vZ2xlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KLQotICAgIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2Fu
IHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKLSAgICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9m
IHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwotICAgIExpY2Vuc2UgYXMgcHVibGlzaGVk
IGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgotICAgIHZlcnNpb24gMiBv
ZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLQot
ICAgIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwg
YmUgdXNlZnVsLAotICAgIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRo
ZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9S
IEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKLSAgICBMaWJyYXJ5IEdlbmVyYWwg
UHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLQotICAgIFlvdSBzaG91bGQgaGF2ZSBy
ZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UK
LSAgICBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAg
SWYgbm90LCB3cml0ZSB0bwotICAgIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4s
IDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCi0gICAgQm9zdG9uLCBNQSAwMjExMC0x
MzAxLCBVU0EuCi0gKi8KLQotI2luY2x1ZGUgImNvbmZpZy5oIgotI2luY2x1ZGUgIlJlc291cmNl
TG9hZFNjaGVkdWxlci5oIgotCi0jaW5jbHVkZSAiRG9jdW1lbnQuaCIKLSNpbmNsdWRlICJEb2N1
bWVudExvYWRlci5oIgotI2luY2x1ZGUgIkZyYW1lLmgiCi0jaW5jbHVkZSAiRnJhbWVMb2FkZXIu
aCIKLSNpbmNsdWRlICJMb2FkZXJTdHJhdGVneS5oIgotI2luY2x1ZGUgIkxvZ2dpbmcuaCIKLSNp
bmNsdWRlICJOZXRzY2FwZVBsdWdJblN0cmVhbUxvYWRlci5oIgotI2luY2x1ZGUgIlBsYXRmb3Jt
U3RyYXRlZ2llcy5oIgotI2luY2x1ZGUgIlJlc291cmNlTG9hZGVyLmgiCi0jaW5jbHVkZSAiUmVz
b3VyY2VSZXF1ZXN0LmgiCi0jaW5jbHVkZSAiU3VicmVzb3VyY2VMb2FkZXIuaCIKLSNpbmNsdWRl
ICJVUkwuaCIKLSNpbmNsdWRlIDx3dGYvTWFpblRocmVhZC5oPgotI2luY2x1ZGUgPHd0Zi9UZW1w
b3JhcnlDaGFuZ2UuaD4KLSNpbmNsdWRlIDx3dGYvdGV4dC9DU3RyaW5nLmg+Ci0KLSNpZiBQTEFU
Rk9STShJT1MpCi0jaW5jbHVkZSA8UnVudGltZUFwcGxpY2F0aW9uQ2hlY2tzSU9TLmg+Ci0jZW5k
aWYKLQotI2lmIFVTRShRVUlDS19MT09LKQotI2luY2x1ZGUgIlF1aWNrTG9vay5oIgotI2VuZGlm
Ci0KLW5hbWVzcGFjZSBXZWJDb3JlIHsKLQotLy8gTWF0Y2ggdGhlIHBhcmFsbGVsIGNvbm5lY3Rp
b24gY291bnQgdXNlZCBieSB0aGUgbmV0d29ya2luZyBsYXllci4KLXN0YXRpYyB1bnNpZ25lZCBt
YXhSZXF1ZXN0c0luRmxpZ2h0UGVySG9zdDsKLSNpZiAhUExBVEZPUk0oSU9TKQotc3RhdGljIGNv
bnN0IHVuc2lnbmVkIG1heFJlcXVlc3RzSW5GbGlnaHRGb3JOb25IVFRQUHJvdG9jb2xzID0gMjA7
Ci0jZWxzZQotLy8gTGltaXRpbmcgdGhpcyBzZWVtcyB0byByZWdyZXNzIHBlcmZvcm1hbmNlIGlu
IHNvbWUgbG9jYWwgY2FzZXMgc28gbGV0J3MganVzdCBtYWtlIGl0IGxhcmdlLgotc3RhdGljIGNv
bnN0IHVuc2lnbmVkIG1heFJlcXVlc3RzSW5GbGlnaHRGb3JOb25IVFRQUHJvdG9jb2xzID0gMTAw
MDA7Ci0jZW5kaWYKLQotUmVzb3VyY2VMb2FkU2NoZWR1bGVyOjpIb3N0SW5mb3JtYXRpb24qIFJl
c291cmNlTG9hZFNjaGVkdWxlcjo6aG9zdEZvclVSTChjb25zdCBVUkwmIHVybCwgQ3JlYXRlSG9z
dFBvbGljeSBjcmVhdGVIb3N0UG9saWN5KQotewotICAgIGlmICghdXJsLnByb3RvY29sSXNJbkhU
VFBGYW1pbHkoKSkKLSAgICAgICAgcmV0dXJuIG1fbm9uSFRUUFByb3RvY29sSG9zdDsKLQotICAg
IG1faG9zdHMuY2hlY2tDb25zaXN0ZW5jeSgpOwotICAgIFN0cmluZyBob3N0TmFtZSA9IHVybC5o
b3N0KCk7Ci0gICAgSG9zdEluZm9ybWF0aW9uKiBob3N0ID0gbV9ob3N0cy5nZXQoaG9zdE5hbWUp
OwotICAgIGlmICghaG9zdCAmJiBjcmVhdGVIb3N0UG9saWN5ID09IENyZWF0ZUlmTm90Rm91bmQp
IHsKLSAgICAgICAgaG9zdCA9IG5ldyBIb3N0SW5mb3JtYXRpb24oaG9zdE5hbWUsIG1heFJlcXVl
c3RzSW5GbGlnaHRQZXJIb3N0KTsKLSAgICAgICAgbV9ob3N0cy5hZGQoaG9zdE5hbWUsIGhvc3Qp
OwotICAgIH0KLSAgICByZXR1cm4gaG9zdDsKLX0KLQotUmVzb3VyY2VMb2FkU2NoZWR1bGVyKiBy
ZXNvdXJjZUxvYWRTY2hlZHVsZXIoKQotewotICAgIEFTU0VSVChpc01haW5UaHJlYWQoKSk7Ci0g
ICAgc3RhdGljIFJlc291cmNlTG9hZFNjaGVkdWxlciogZ2xvYmFsU2NoZWR1bGVyID0gbnVsbHB0
cjsKLSAgICAKLSAgICBpZiAoIWdsb2JhbFNjaGVkdWxlcikgewotICAgICAgICBzdGF0aWMgYm9v
bCBpc0NhbGxpbmdPdXRUb1N0cmF0ZWd5ID0gZmFsc2U7Ci0gICAgICAgIAotICAgICAgICAvLyBJ
ZiB3ZSdyZSByZS1lbnRlcmluZyByZXNvdXJjZUxvYWRTY2hlZHVsZXIoKSB3aGlsZSBjYWxsaW5n
IG91dCB0byB0aGUgTG9hZGVyU3RyYXRlZ3ksCi0gICAgICAgIC8vIHRoZW4gdGhlIExvYWRlclN0
cmF0ZWd5IGlzIHRyeWluZyB0byB1c2UgdGhlIGRlZmF1bHQgcmVzb3VyY2VMb2FkU2NoZWR1bGVy
LgotICAgICAgICAvLyBTbyB3ZSdsbCBjcmVhdGUgaXQgaGVyZSBhbmQgc3RhcnQgdXNpbmcgaXQu
Ci0gICAgICAgIGlmIChpc0NhbGxpbmdPdXRUb1N0cmF0ZWd5KSB7Ci0gICAgICAgICAgICBnbG9i
YWxTY2hlZHVsZXIgPSBuZXcgUmVzb3VyY2VMb2FkU2NoZWR1bGVyOwotICAgICAgICAgICAgcmV0
dXJuIGdsb2JhbFNjaGVkdWxlcjsKLSAgICAgICAgfQotICAgICAgICAKLSAgICAgICAgVGVtcG9y
YXJ5Q2hhbmdlPGJvb2w+IHJlY3Vyc2lvbkd1YXJkKGlzQ2FsbGluZ091dFRvU3RyYXRlZ3ksIHRy
dWUpOwotICAgICAgICBnbG9iYWxTY2hlZHVsZXIgPSBwbGF0Zm9ybVN0cmF0ZWdpZXMoKS0+bG9h
ZGVyU3RyYXRlZ3koKS0+cmVzb3VyY2VMb2FkU2NoZWR1bGVyKCk7Ci0gICAgfQotCi0gICAgcmV0
dXJuIGdsb2JhbFNjaGVkdWxlcjsKLX0KLQotUmVzb3VyY2VMb2FkU2NoZWR1bGVyOjpSZXNvdXJj
ZUxvYWRTY2hlZHVsZXIoKQotICAgIDogbV9ub25IVFRQUHJvdG9jb2xIb3N0KG5ldyBIb3N0SW5m
b3JtYXRpb24oU3RyaW5nKCksIG1heFJlcXVlc3RzSW5GbGlnaHRGb3JOb25IVFRQUHJvdG9jb2xz
KSkKLSAgICAsIG1fcmVxdWVzdFRpbWVyKCp0aGlzLCAmUmVzb3VyY2VMb2FkU2NoZWR1bGVyOjpy
ZXF1ZXN0VGltZXJGaXJlZCkKLSAgICAsIG1fc3VzcGVuZFBlbmRpbmdSZXF1ZXN0c0NvdW50KDAp
Ci0gICAgLCBtX2lzU2VyaWFsTG9hZGluZ0VuYWJsZWQoZmFsc2UpCi17Ci0gICAgbWF4UmVxdWVz
dHNJbkZsaWdodFBlckhvc3QgPSBpbml0aWFsaXplTWF4aW11bUhUVFBDb25uZWN0aW9uQ291bnRQ
ZXJIb3N0KCk7Ci19Ci0KLVJlc291cmNlTG9hZFNjaGVkdWxlcjo6flJlc291cmNlTG9hZFNjaGVk
dWxlcigpCi17Ci19Ci0KLVJlZlB0cjxTdWJyZXNvdXJjZUxvYWRlcj4gUmVzb3VyY2VMb2FkU2No
ZWR1bGVyOjpzY2hlZHVsZVN1YnJlc291cmNlTG9hZChGcmFtZSogZnJhbWUsIENhY2hlZFJlc291
cmNlKiByZXNvdXJjZSwgY29uc3QgUmVzb3VyY2VSZXF1ZXN0JiByZXF1ZXN0LCBjb25zdCBSZXNv
dXJjZUxvYWRlck9wdGlvbnMmIG9wdGlvbnMpCi17Ci0gICAgUmVmUHRyPFN1YnJlc291cmNlTG9h
ZGVyPiBsb2FkZXIgPSBTdWJyZXNvdXJjZUxvYWRlcjo6Y3JlYXRlKGZyYW1lLCByZXNvdXJjZSwg
cmVxdWVzdCwgb3B0aW9ucyk7Ci0gICAgaWYgKGxvYWRlcikKLSAgICAgICAgc2NoZWR1bGVMb2Fk
KGxvYWRlci5nZXQoKSk7Ci0jaWYgUExBVEZPUk0oSU9TKQotICAgIC8vIFNpbmNlIHdlIGRlZmVy
IGxvYWRlciBpbml0aWFsaXphdGlvbiB1bnRpbCBzY2hlZHVsaW5nIG9uIGlPUywgdGhlIGZyYW1l
Ci0gICAgLy8gbG9hZCBkZWxlZ2F0ZSB0aGF0IHdvdWxkIGJlIGNhbGxlZCBpbiBTdWJyZXNvdXJj
ZUxvYWRlcjo6Y3JlYXRlKCkgb24KLSAgICAvLyBvdGhlciBwb3J0cyBtaWdodCBiZSBjYWxsZWQg
aW4gc2NoZWR1bGVMb2FkKCkgaW5zdGVhZC4gT3VyIGNvbnRyYWN0IHRvCi0gICAgLy8gY2FsbGVy
cyBvZiB0aGlzIG1ldGhvZCBpcyB0aGF0IGEgbnVsbCBsb2FkZXIgaXMgcmV0dXJuZWQgaWYgdGhl
IGxvYWQgd2FzCi0gICAgLy8gY2FuY2VsbGVkIGJ5IGEgZnJhbWUgbG9hZCBkZWxlZ2F0ZS4KLSAg
ICBpZiAoIWxvYWRlciB8fCBsb2FkZXItPnJlYWNoZWRUZXJtaW5hbFN0YXRlKCkpCi0gICAgICAg
IHJldHVybiBudWxscHRyOwotI2VuZGlmCi0gICAgcmV0dXJuIGxvYWRlcjsKLX0KLQotUmVmUHRy
PE5ldHNjYXBlUGx1Z0luU3RyZWFtTG9hZGVyPiBSZXNvdXJjZUxvYWRTY2hlZHVsZXI6OnNjaGVk
dWxlUGx1Z2luU3RyZWFtTG9hZChGcmFtZSogZnJhbWUsIE5ldHNjYXBlUGx1Z0luU3RyZWFtTG9h
ZGVyQ2xpZW50KiBjbGllbnQsIGNvbnN0IFJlc291cmNlUmVxdWVzdCYgcmVxdWVzdCkKLXsKLSAg
ICBSZWZQdHI8TmV0c2NhcGVQbHVnSW5TdHJlYW1Mb2FkZXI+IGxvYWRlciA9IE5ldHNjYXBlUGx1
Z0luU3RyZWFtTG9hZGVyOjpjcmVhdGUoZnJhbWUsIGNsaWVudCwgcmVxdWVzdCk7Ci0gICAgaWYg
KGxvYWRlcikKLSAgICAgICAgc2NoZWR1bGVMb2FkKGxvYWRlci5nZXQoKSk7Ci0gICAgcmV0dXJu
IGxvYWRlcjsKLX0KLQotdm9pZCBSZXNvdXJjZUxvYWRTY2hlZHVsZXI6OnNjaGVkdWxlTG9hZChS
ZXNvdXJjZUxvYWRlciogcmVzb3VyY2VMb2FkZXIpCi17Ci0gICAgQVNTRVJUKHJlc291cmNlTG9h
ZGVyKTsKLQotICAgIExPRyhSZXNvdXJjZUxvYWRpbmcsICJSZXNvdXJjZUxvYWRTY2hlZHVsZXI6
OmxvYWQgcmVzb3VyY2UgJXAgJyVzJyIsIHJlc291cmNlTG9hZGVyLCByZXNvdXJjZUxvYWRlci0+
dXJsKCkuc3RyaW5nKCkubGF0aW4xKCkuZGF0YSgpKTsKLQotI2lmIFBMQVRGT1JNKElPUykKLSAg
ICAvLyBJZiB0aGVyZSdzIGEgd2ViIGFyY2hpdmUgcmVzb3VyY2UgZm9yIHRoaXMgVVJMLCB3ZSBk
b24ndCBuZWVkIHRvIHNjaGVkdWxlIHRoZSBsb2FkIHNpbmNlIGl0IHdpbGwgbmV2ZXIgdG91Y2gg
dGhlIG5ldHdvcmsuCi0gICAgaWYgKCFpc1N1c3BlbmRpbmdQZW5kaW5nUmVxdWVzdHMoKSAmJiBy
ZXNvdXJjZUxvYWRlci0+ZG9jdW1lbnRMb2FkZXIoKS0+YXJjaGl2ZVJlc291cmNlRm9yVVJMKHJl
c291cmNlTG9hZGVyLT5pT1NPcmlnaW5hbFJlcXVlc3QoKS51cmwoKSkpIHsKLSAgICAgICAgcmVz
b3VyY2VMb2FkZXItPnN0YXJ0TG9hZGluZygpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotI2Vs
c2UKLSAgICBpZiAocmVzb3VyY2VMb2FkZXItPmRvY3VtZW50TG9hZGVyKCktPmFyY2hpdmVSZXNv
dXJjZUZvclVSTChyZXNvdXJjZUxvYWRlci0+cmVxdWVzdCgpLnVybCgpKSkgewotICAgICAgICBy
ZXNvdXJjZUxvYWRlci0+c3RhcnQoKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLSNlbmRpZgot
Ci0jaWYgUExBVEZPUk0oSU9TKQotICAgIEhvc3RJbmZvcm1hdGlvbiogaG9zdCA9IGhvc3RGb3JV
UkwocmVzb3VyY2VMb2FkZXItPmlPU09yaWdpbmFsUmVxdWVzdCgpLnVybCgpLCBDcmVhdGVJZk5v
dEZvdW5kKTsKLSNlbHNlCi0gICAgSG9zdEluZm9ybWF0aW9uKiBob3N0ID0gaG9zdEZvclVSTChy
ZXNvdXJjZUxvYWRlci0+dXJsKCksIENyZWF0ZUlmTm90Rm91bmQpOwotI2VuZGlmCi0KLSAgICBS
ZXNvdXJjZUxvYWRQcmlvcml0eSBwcmlvcml0eSA9IHJlc291cmNlTG9hZGVyLT5yZXF1ZXN0KCku
cHJpb3JpdHkoKTsKLQotICAgIGJvb2wgaGFkUmVxdWVzdHMgPSBob3N0LT5oYXNSZXF1ZXN0cygp
OwotICAgIGhvc3QtPnNjaGVkdWxlKHJlc291cmNlTG9hZGVyLCBwcmlvcml0eSk7Ci0KLSNpZiBQ
TEFURk9STShDT0NPQSkgfHwgVVNFKENGTkVUV09SSykKLSAgICBpZiAoUmVzb3VyY2VSZXF1ZXN0
OjpyZXNvdXJjZVByaW9yaXRpZXNFbmFibGVkKCkgJiYgIWlzU3VzcGVuZGluZ1BlbmRpbmdSZXF1
ZXN0cygpKSB7Ci0gICAgICAgIC8vIFNlcnZlIGFsbCByZXF1ZXN0cyBhdCBvbmNlIHRvIGtlZXAg
dGhlIHBpcGVsaW5lIGZ1bGwgYXQgdGhlIG5ldHdvcmsgbGF5ZXIuCi0gICAgICAgIC8vIEZJWE1F
OiBEb2VzIHRoaXMgY29kZSBkbyBhbnl0aGluZyB1c2VmdWwsIGdpdmVuIHRoYXQgd2UgYWxzbyBz
ZXQgbWF4UmVxdWVzdHNJbkZsaWdodFBlckhvc3QgdG8gZWZmZWN0aXZlbHkgdW5saW1pdGVkIG9u
IHRoZXNlIHBsYXRmb3Jtcz8KLSAgICAgICAgc2VydmVQZW5kaW5nUmVxdWVzdHMoaG9zdCwgUmVz
b3VyY2VMb2FkUHJpb3JpdHk6OlZlcnlMb3cpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotI2Vu
ZGlmCi0KLSNpZiBQTEFURk9STShJT1MpCi0gICAgaWYgKChwcmlvcml0eSA+IFJlc291cmNlTG9h
ZFByaW9yaXR5OjpMb3cgfHwgIXJlc291cmNlTG9hZGVyLT5pT1NPcmlnaW5hbFJlcXVlc3QoKS51
cmwoKS5wcm90b2NvbElzSW5IVFRQRmFtaWx5KCkgfHwgKHByaW9yaXR5ID09IFJlc291cmNlTG9h
ZFByaW9yaXR5OjpMb3cgJiYgIWhhZFJlcXVlc3RzKSkgJiYgIWlzU3VzcGVuZGluZ1BlbmRpbmdS
ZXF1ZXN0cygpKSB7Ci0gICAgICAgIC8vIFRyeSB0byByZXF1ZXN0IGltcG9ydGFudCByZXNvdXJj
ZXMgaW1tZWRpYXRlbHkuCi0gICAgICAgIHNlcnZlUGVuZGluZ1JlcXVlc3RzKGhvc3QsIHByaW9y
aXR5KTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLSNlbHNlCi0gICAgaWYgKHByaW9yaXR5ID4g
UmVzb3VyY2VMb2FkUHJpb3JpdHk6OkxvdyB8fCAhcmVzb3VyY2VMb2FkZXItPnVybCgpLnByb3Rv
Y29sSXNJbkhUVFBGYW1pbHkoKSB8fCAocHJpb3JpdHkgPT0gUmVzb3VyY2VMb2FkUHJpb3JpdHk6
OkxvdyAmJiAhaGFkUmVxdWVzdHMpKSB7Ci0gICAgICAgIC8vIFRyeSB0byByZXF1ZXN0IGltcG9y
dGFudCByZXNvdXJjZXMgaW1tZWRpYXRlbHkuCi0gICAgICAgIHNlcnZlUGVuZGluZ1JlcXVlc3Rz
KGhvc3QsIHByaW9yaXR5KTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLSNlbmRpZgotCi0gICAg
Ly8gSGFuZGxlIGFzeW5jaHJvbm91c2x5IHNvIGVhcmx5IGxvdyBwcmlvcml0eSByZXF1ZXN0cyBk
b24ndAotICAgIC8vIGdldCBzY2hlZHVsZWQgYmVmb3JlIGxhdGVyIGhpZ2ggcHJpb3JpdHkgb25l
cy4KLSAgICBzY2hlZHVsZVNlcnZlUGVuZGluZ1JlcXVlc3RzKCk7Ci19Ci0KLXZvaWQgUmVzb3Vy
Y2VMb2FkU2NoZWR1bGVyOjpyZW1vdmUoUmVzb3VyY2VMb2FkZXIqIHJlc291cmNlTG9hZGVyKQot
ewotICAgIEFTU0VSVChyZXNvdXJjZUxvYWRlcik7Ci0KLSAgICBIb3N0SW5mb3JtYXRpb24qIGhv
c3QgPSBob3N0Rm9yVVJMKHJlc291cmNlTG9hZGVyLT51cmwoKSk7Ci0gICAgaWYgKGhvc3QpCi0g
ICAgICAgIGhvc3QtPnJlbW92ZShyZXNvdXJjZUxvYWRlcik7Ci0jaWYgUExBVEZPUk0oSU9TKQot
ICAgIC8vIFJlc291cmNlTG9hZGVyOjp1cmwoKSBkb2Vzbid0IHN0YXJ0IHJldHVybmluZyB0aGUg
Y29ycmVjdCB2YWx1ZSB1bnRpbCB0aGUgbG9hZCBzdGFydHMuIElmIHdlIGdldCBjYW5jZWxlZCBi
ZWZvcmUgdGhhdCwgd2UgbmVlZCB0byBsb29rIGZvciBvcmlnaW5hbFJlcXVlc3QgdXJsIGluc3Rl
YWQuCi0gICAgLy8gRklYTUU6IFJlc291cmNlTG9hZGVyOjp1cmwoKSBzaG91bGQgYmUgbWFkZSB0
byByZXR1cm4gYSBzZW5zaWJsZSB2YWx1ZSBhdCBhbGwgdGltZXMuCi0gICAgaWYgKCFyZXNvdXJj
ZUxvYWRlci0+aU9TT3JpZ2luYWxSZXF1ZXN0KCkuaXNOdWxsKCkpIHsKLSAgICAgICAgSG9zdElu
Zm9ybWF0aW9uKiBvcmlnaW5hbEhvc3QgPSBob3N0Rm9yVVJMKHJlc291cmNlTG9hZGVyLT5pT1NP
cmlnaW5hbFJlcXVlc3QoKS51cmwoKSk7Ci0gICAgICAgIGlmIChvcmlnaW5hbEhvc3QgJiYgb3Jp
Z2luYWxIb3N0ICE9IGhvc3QpCi0gICAgICAgICAgICBvcmlnaW5hbEhvc3QtPnJlbW92ZShyZXNv
dXJjZUxvYWRlcik7Ci0gICAgfQotI2VuZGlmCi0gICAgc2NoZWR1bGVTZXJ2ZVBlbmRpbmdSZXF1
ZXN0cygpOwotfQotCi12b2lkIFJlc291cmNlTG9hZFNjaGVkdWxlcjo6c2V0RGVmZXJzTG9hZGlu
ZyhSZXNvdXJjZUxvYWRlciosIGJvb2wpCi17Ci19Ci0KLXZvaWQgUmVzb3VyY2VMb2FkU2NoZWR1
bGVyOjpjcm9zc09yaWdpblJlZGlyZWN0UmVjZWl2ZWQoUmVzb3VyY2VMb2FkZXIqIHJlc291cmNl
TG9hZGVyLCBjb25zdCBVUkwmIHJlZGlyZWN0VVJMKQotewotICAgIEhvc3RJbmZvcm1hdGlvbiog
b2xkSG9zdCA9IGhvc3RGb3JVUkwocmVzb3VyY2VMb2FkZXItPnVybCgpKTsKLSAgICBBU1NFUlQo
b2xkSG9zdCk7Ci0gICAgaWYgKCFvbGRIb3N0KQotICAgICAgICByZXR1cm47Ci0KLSAgICBIb3N0
SW5mb3JtYXRpb24qIG5ld0hvc3QgPSBob3N0Rm9yVVJMKHJlZGlyZWN0VVJMLCBDcmVhdGVJZk5v
dEZvdW5kKTsKLQotICAgIGlmIChvbGRIb3N0LT5uYW1lKCkgPT0gbmV3SG9zdC0+bmFtZSgpKQot
ICAgICAgICByZXR1cm47Ci0KLSAgICBuZXdIb3N0LT5hZGRMb2FkSW5Qcm9ncmVzcyhyZXNvdXJj
ZUxvYWRlcik7Ci0gICAgb2xkSG9zdC0+cmVtb3ZlKHJlc291cmNlTG9hZGVyKTsKLX0KLQotdm9p
ZCBSZXNvdXJjZUxvYWRTY2hlZHVsZXI6OnNlcnZlUGVuZGluZ1JlcXVlc3RzKFJlc291cmNlTG9h
ZFByaW9yaXR5IG1pbmltdW1Qcmlvcml0eSkKLXsKLSAgICBMT0coUmVzb3VyY2VMb2FkaW5nLCAi
UmVzb3VyY2VMb2FkU2NoZWR1bGVyOjpzZXJ2ZVBlbmRpbmdSZXF1ZXN0cy4gbV9zdXNwZW5kUGVu
ZGluZ1JlcXVlc3RzQ291bnQ9JWQiLCBtX3N1c3BlbmRQZW5kaW5nUmVxdWVzdHNDb3VudCk7IAot
ICAgIGlmIChpc1N1c3BlbmRpbmdQZW5kaW5nUmVxdWVzdHMoKSkKLSAgICAgICAgcmV0dXJuOwot
Ci0gICAgbV9yZXF1ZXN0VGltZXIuc3RvcCgpOwotICAgIAotICAgIHNlcnZlUGVuZGluZ1JlcXVl
c3RzKG1fbm9uSFRUUFByb3RvY29sSG9zdCwgbWluaW11bVByaW9yaXR5KTsKLQotICAgIFZlY3Rv
cjxIb3N0SW5mb3JtYXRpb24qPiBob3N0c1RvU2VydmU7Ci0gICAgY29weVZhbHVlc1RvVmVjdG9y
KG1faG9zdHMsIGhvc3RzVG9TZXJ2ZSk7Ci0KLSAgICBmb3IgKGF1dG8qIGhvc3QgOiBob3N0c1Rv
U2VydmUpIHsKLSAgICAgICAgaWYgKGhvc3QtPmhhc1JlcXVlc3RzKCkpCi0gICAgICAgICAgICBz
ZXJ2ZVBlbmRpbmdSZXF1ZXN0cyhob3N0LCBtaW5pbXVtUHJpb3JpdHkpOwotICAgICAgICBlbHNl
Ci0gICAgICAgICAgICBkZWxldGUgbV9ob3N0cy50YWtlKGhvc3QtPm5hbWUoKSk7Ci0gICAgfQot
fQotCi12b2lkIFJlc291cmNlTG9hZFNjaGVkdWxlcjo6c2VydmVQZW5kaW5nUmVxdWVzdHMoSG9z
dEluZm9ybWF0aW9uKiBob3N0LCBSZXNvdXJjZUxvYWRQcmlvcml0eSBtaW5pbXVtUHJpb3JpdHkp
Ci17Ci0gICAgTE9HKFJlc291cmNlTG9hZGluZywgIlJlc291cmNlTG9hZFNjaGVkdWxlcjo6c2Vy
dmVQZW5kaW5nUmVxdWVzdHMgSG9zdEluZm9ybWF0aW9uLm1fbmFtZT0nJXMnIiwgaG9zdC0+bmFt
ZSgpLmxhdGluMSgpLmRhdGEoKSk7Ci0KLSAgICBhdXRvIHByaW9yaXR5ID0gUmVzb3VyY2VMb2Fk
UHJpb3JpdHk6OkhpZ2hlc3Q7Ci0gICAgd2hpbGUgKHRydWUpIHsKLSAgICAgICAgYXV0byYgcmVx
dWVzdHNQZW5kaW5nID0gaG9zdC0+cmVxdWVzdHNQZW5kaW5nKHByaW9yaXR5KTsKLSAgICAgICAg
d2hpbGUgKCFyZXF1ZXN0c1BlbmRpbmcuaXNFbXB0eSgpKSB7Ci0gICAgICAgICAgICBSZWZQdHI8
UmVzb3VyY2VMb2FkZXI+IHJlc291cmNlTG9hZGVyID0gcmVxdWVzdHNQZW5kaW5nLmZpcnN0KCk7
Ci0KLSAgICAgICAgICAgIC8vIEZvciBuYW1lZCBob3N0cyAtIHdoaWNoIGFyZSBvbmx5IGh0dHAo
cykgaG9zdHMgLSB3ZSBzaG91bGQgYWx3YXlzIGVuZm9yY2UgdGhlIGNvbm5lY3Rpb24gbGltaXQu
Ci0gICAgICAgICAgICAvLyBGb3Igbm9uLW5hbWVkIGhvc3RzIC0gZXZlcnl0aGluZyBidXQgaHR0
cChzKSAtIHdlIHNob3VsZCBvbmx5IGVuZm9yY2UgdGhlIGxpbWl0IGlmIHRoZSBkb2N1bWVudCBp
c24ndCBkb25lIHBhcnNpbmcgCi0gICAgICAgICAgICAvLyBhbmQgd2UgZG9uJ3Qga25vdyBhbGwg
c3R5bGVzaGVldHMgeWV0LgotICAgICAgICAgICAgRG9jdW1lbnQqIGRvY3VtZW50ID0gcmVzb3Vy
Y2VMb2FkZXItPmZyYW1lTG9hZGVyKCkgPyByZXNvdXJjZUxvYWRlci0+ZnJhbWVMb2FkZXIoKS0+
ZnJhbWUoKS5kb2N1bWVudCgpIDogMDsKLSAgICAgICAgICAgIGJvb2wgc2hvdWxkTGltaXRSZXF1
ZXN0cyA9ICFob3N0LT5uYW1lKCkuaXNOdWxsKCkgfHwgKGRvY3VtZW50ICYmIChkb2N1bWVudC0+
cGFyc2luZygpIHx8ICFkb2N1bWVudC0+aGF2ZVN0eWxlc2hlZXRzTG9hZGVkKCkpKTsKLSAgICAg
ICAgICAgIGlmIChzaG91bGRMaW1pdFJlcXVlc3RzICYmIGhvc3QtPmxpbWl0UmVxdWVzdHMocHJp
b3JpdHkpKQotICAgICAgICAgICAgICAgIHJldHVybjsKLQotICAgICAgICAgICAgcmVxdWVzdHNQ
ZW5kaW5nLnJlbW92ZUZpcnN0KCk7Ci0gICAgICAgICAgICBob3N0LT5hZGRMb2FkSW5Qcm9ncmVz
cyhyZXNvdXJjZUxvYWRlci5nZXQoKSk7Ci0jaWYgUExBVEZPUk0oSU9TKQotICAgICAgICAgICAg
aWYgKCFhcHBsaWNhdGlvbklzV2ViUHJvY2VzcygpKSB7Ci0gICAgICAgICAgICAgICAgcmVzb3Vy
Y2VMb2FkZXItPnN0YXJ0TG9hZGluZygpOwotICAgICAgICAgICAgICAgIHJldHVybjsKLSAgICAg
ICAgICAgIH0KLSNlbmRpZgotICAgICAgICAgICAgcmVzb3VyY2VMb2FkZXItPnN0YXJ0KCk7Ci0g
ICAgICAgIH0KLSAgICAgICAgaWYgKHByaW9yaXR5ID09IG1pbmltdW1Qcmlvcml0eSkKLSAgICAg
ICAgICAgIHJldHVybjsKLSAgICAgICAgLS1wcmlvcml0eTsKLSAgICB9Ci19Ci0KLXZvaWQgUmVz
b3VyY2VMb2FkU2NoZWR1bGVyOjpzdXNwZW5kUGVuZGluZ1JlcXVlc3RzKCkKLXsKLSAgICArK21f
c3VzcGVuZFBlbmRpbmdSZXF1ZXN0c0NvdW50OwotfQotCi12b2lkIFJlc291cmNlTG9hZFNjaGVk
dWxlcjo6cmVzdW1lUGVuZGluZ1JlcXVlc3RzKCkKLXsKLSAgICBBU1NFUlQobV9zdXNwZW5kUGVu
ZGluZ1JlcXVlc3RzQ291bnQpOwotICAgIC0tbV9zdXNwZW5kUGVuZGluZ1JlcXVlc3RzQ291bnQ7
Ci0gICAgaWYgKG1fc3VzcGVuZFBlbmRpbmdSZXF1ZXN0c0NvdW50KQotICAgICAgICByZXR1cm47
Ci0gICAgaWYgKCFtX2hvc3RzLmlzRW1wdHkoKSB8fCBtX25vbkhUVFBQcm90b2NvbEhvc3QtPmhh
c1JlcXVlc3RzKCkpCi0gICAgICAgIHNjaGVkdWxlU2VydmVQZW5kaW5nUmVxdWVzdHMoKTsKLX0K
LSAgICAKLXZvaWQgUmVzb3VyY2VMb2FkU2NoZWR1bGVyOjpzY2hlZHVsZVNlcnZlUGVuZGluZ1Jl
cXVlc3RzKCkKLXsKLSAgICBMT0coUmVzb3VyY2VMb2FkaW5nLCAiUmVzb3VyY2VMb2FkU2NoZWR1
bGVyOjpzY2hlZHVsZVNlcnZlUGVuZGluZ1JlcXVlc3RzLCBtX3JlcXVlc3RUaW1lci5pc0FjdGl2
ZSgpPSV1IiwgbV9yZXF1ZXN0VGltZXIuaXNBY3RpdmUoKSk7Ci0gICAgaWYgKCFtX3JlcXVlc3RU
aW1lci5pc0FjdGl2ZSgpKQotICAgICAgICBtX3JlcXVlc3RUaW1lci5zdGFydE9uZVNob3QoMCk7
Ci19Ci0KLXZvaWQgUmVzb3VyY2VMb2FkU2NoZWR1bGVyOjpyZXF1ZXN0VGltZXJGaXJlZCgpCi17
Ci0gICAgTE9HKFJlc291cmNlTG9hZGluZywgIlJlc291cmNlTG9hZFNjaGVkdWxlcjo6cmVxdWVz
dFRpbWVyRmlyZWRcbiIpOwotICAgIHNlcnZlUGVuZGluZ1JlcXVlc3RzKCk7Ci19Ci0KLVJlc291
cmNlTG9hZFNjaGVkdWxlcjo6SG9zdEluZm9ybWF0aW9uOjpIb3N0SW5mb3JtYXRpb24oY29uc3Qg
U3RyaW5nJiBuYW1lLCB1bnNpZ25lZCBtYXhSZXF1ZXN0c0luRmxpZ2h0KQotICAgIDogbV9uYW1l
KG5hbWUpCi0gICAgLCBtX21heFJlcXVlc3RzSW5GbGlnaHQobWF4UmVxdWVzdHNJbkZsaWdodCkK
LXsKLX0KLQotUmVzb3VyY2VMb2FkU2NoZWR1bGVyOjpIb3N0SW5mb3JtYXRpb246On5Ib3N0SW5m
b3JtYXRpb24oKQotewotICAgIEFTU0VSVCghaGFzUmVxdWVzdHMoKSk7Ci19Ci0KLXVuc2lnbmVk
IFJlc291cmNlTG9hZFNjaGVkdWxlcjo6SG9zdEluZm9ybWF0aW9uOjpwcmlvcml0eVRvSW5kZXgo
UmVzb3VyY2VMb2FkUHJpb3JpdHkgcHJpb3JpdHkpCi17Ci0gICAgc3dpdGNoIChwcmlvcml0eSkg
ewotICAgIGNhc2UgUmVzb3VyY2VMb2FkUHJpb3JpdHk6OlZlcnlMb3c6Ci0gICAgICAgIHJldHVy
biAwOwotICAgIGNhc2UgUmVzb3VyY2VMb2FkUHJpb3JpdHk6OkxvdzoKLSAgICAgICAgcmV0dXJu
IDE7Ci0gICAgY2FzZSBSZXNvdXJjZUxvYWRQcmlvcml0eTo6TWVkaXVtOgotICAgICAgICByZXR1
cm4gMjsKLSAgICBjYXNlIFJlc291cmNlTG9hZFByaW9yaXR5OjpIaWdoOgotICAgICAgICByZXR1
cm4gMzsKLSAgICBjYXNlIFJlc291cmNlTG9hZFByaW9yaXR5OjpWZXJ5SGlnaDoKLSAgICAgICAg
cmV0dXJuIDQ7Ci0gICAgfQotICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwotICAgIHJldHVybiAw
OwotfQotCi12b2lkIFJlc291cmNlTG9hZFNjaGVkdWxlcjo6SG9zdEluZm9ybWF0aW9uOjpzY2hl
ZHVsZShSZXNvdXJjZUxvYWRlciogcmVzb3VyY2VMb2FkZXIsIFJlc291cmNlTG9hZFByaW9yaXR5
IHByaW9yaXR5KQotewotICAgIG1fcmVxdWVzdHNQZW5kaW5nW3ByaW9yaXR5VG9JbmRleChwcmlv
cml0eSldLmFwcGVuZChyZXNvdXJjZUxvYWRlcik7Ci19Ci0gICAgCi12b2lkIFJlc291cmNlTG9h
ZFNjaGVkdWxlcjo6SG9zdEluZm9ybWF0aW9uOjphZGRMb2FkSW5Qcm9ncmVzcyhSZXNvdXJjZUxv
YWRlciogcmVzb3VyY2VMb2FkZXIpCi17Ci0gICAgTE9HKFJlc291cmNlTG9hZGluZywgIkhvc3RJ
bmZvcm1hdGlvbiAnJXMnIGxvYWRpbmcgJyVzJy4gQ3VycmVudCBjb3VudCAlZCIsIG1fbmFtZS5s
YXRpbjEoKS5kYXRhKCksIHJlc291cmNlTG9hZGVyLT51cmwoKS5zdHJpbmcoKS5sYXRpbjEoKS5k
YXRhKCksIG1fcmVxdWVzdHNMb2FkaW5nLnNpemUoKSk7Ci0gICAgbV9yZXF1ZXN0c0xvYWRpbmcu
YWRkKHJlc291cmNlTG9hZGVyKTsKLX0KLSAgICAKLXZvaWQgUmVzb3VyY2VMb2FkU2NoZWR1bGVy
OjpIb3N0SW5mb3JtYXRpb246OnJlbW92ZShSZXNvdXJjZUxvYWRlciogcmVzb3VyY2VMb2FkZXIp
Ci17Ci0gICAgaWYgKG1fcmVxdWVzdHNMb2FkaW5nLnJlbW92ZShyZXNvdXJjZUxvYWRlcikpCi0g
ICAgICAgIHJldHVybjsKLSAgICAKLSAgICBmb3IgKGF1dG8mIHJlcXVlc3RRdWV1ZSA6IG1fcmVx
dWVzdHNQZW5kaW5nKSB7Ci0gICAgICAgIGZvciAoYXV0byBpdCA9IHJlcXVlc3RRdWV1ZS5iZWdp
bigpLCBlbmQgPSByZXF1ZXN0UXVldWUuZW5kKCk7IGl0ICE9IGVuZDsgKytpdCkgewotICAgICAg
ICAgICAgaWYgKCppdCA9PSByZXNvdXJjZUxvYWRlcikgewotICAgICAgICAgICAgICAgIHJlcXVl
c3RRdWV1ZS5yZW1vdmUoaXQpOwotICAgICAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgICAg
IH0KLSAgICAgICAgfQotICAgIH0KLX0KLQotYm9vbCBSZXNvdXJjZUxvYWRTY2hlZHVsZXI6Okhv
c3RJbmZvcm1hdGlvbjo6aGFzUmVxdWVzdHMoKSBjb25zdAotewotICAgIGlmICghbV9yZXF1ZXN0
c0xvYWRpbmcuaXNFbXB0eSgpKQotICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICBmb3IgKGF1dG8m
IHJlcXVlc3RRdWV1ZSA6IG1fcmVxdWVzdHNQZW5kaW5nKSB7Ci0gICAgICAgIGlmICghcmVxdWVz
dFF1ZXVlLmlzRW1wdHkoKSkKLSAgICAgICAgICAgIHJldHVybiB0cnVlOwotICAgIH0KLSAgICBy
ZXR1cm4gZmFsc2U7Ci19Ci0KLWJvb2wgUmVzb3VyY2VMb2FkU2NoZWR1bGVyOjpIb3N0SW5mb3Jt
YXRpb246OmxpbWl0UmVxdWVzdHMoUmVzb3VyY2VMb2FkUHJpb3JpdHkgcHJpb3JpdHkpIGNvbnN0
IAotewotICAgIGlmIChwcmlvcml0eSA9PSBSZXNvdXJjZUxvYWRQcmlvcml0eTo6VmVyeUxvdyAm
JiAhbV9yZXF1ZXN0c0xvYWRpbmcuaXNFbXB0eSgpKQotICAgICAgICByZXR1cm4gdHJ1ZTsKLSAg
ICByZXR1cm4gbV9yZXF1ZXN0c0xvYWRpbmcuc2l6ZSgpID49IChyZXNvdXJjZUxvYWRTY2hlZHVs
ZXIoKS0+aXNTZXJpYWxMb2FkaW5nRW5hYmxlZCgpID8gMSA6IG1fbWF4UmVxdWVzdHNJbkZsaWdo
dCk7Ci19Ci0KLX0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2xv
YWRlci9SZXNvdXJjZUxvYWRTY2hlZHVsZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29y
ZS9sb2FkZXIvUmVzb3VyY2VMb2FkU2NoZWR1bGVyLmgJKHJldmlzaW9uIDE5Mjg4MCkKKysrIFNv
dXJjZS9XZWJDb3JlL2xvYWRlci9SZXNvdXJjZUxvYWRTY2hlZHVsZXIuaAkod29ya2luZyBjb3B5
KQpAQCAtMSwxMzQgKzAsMCBAQAotLyoKLSAgICBDb3B5cmlnaHQgKEMpIDE5OTggTGFycyBLbm9s
bCAoa25vbGxAbXBpLWhkLm1wZy5kZSkKLSAgICBDb3B5cmlnaHQgKEMpIDIwMDEgRGlyayBNdWVs
bGVyIDxtdWVsbGVyQGtkZS5vcmc+Ci0gICAgQ29weXJpZ2h0IChDKSAyMDA0LCAyMDA2LCAyMDA3
LCAyMDA4IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAgICBDb3B5cmlnaHQgKEMp
IDIwMTAgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLQotICAgIFRoaXMgbGlicmFy
eSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKLSAgICBt
b2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1Ymxp
YwotICAgIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRp
b247IGVpdGhlcgotICAgIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0
aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLQotICAgIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRl
ZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICAgIGJ1dCBXSVRIT1VUIEFO
WSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gICAgTUVS
Q0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRo
ZSBHTlUKLSAgICBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWls
cy4KLQotICAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJy
YXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKLSAgICBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsg
c2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bwotICAgIHRoZSBGcmVl
IFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxv
b3IsCi0gICAgQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCi0gKi8KLQotI2lmbmRlZiBSZXNv
dXJjZUxvYWRTY2hlZHVsZXJfaAotI2RlZmluZSBSZXNvdXJjZUxvYWRTY2hlZHVsZXJfaAotCi0j
aW5jbHVkZSAiRnJhbWVMb2FkZXJUeXBlcy5oIgotI2luY2x1ZGUgIlJlc291cmNlTG9hZGVyT3B0
aW9ucy5oIgotI2luY2x1ZGUgIlJlc291cmNlTG9hZFByaW9yaXR5LmgiCi0jaW5jbHVkZSAiVGlt
ZXIuaCIKLSNpbmNsdWRlIDxhcnJheT4KLSNpbmNsdWRlIDx3dGYvRGVxdWUuaD4KLSNpbmNsdWRl
IDx3dGYvSGFzaE1hcC5oPgotI2luY2x1ZGUgPHd0Zi9IYXNoU2V0Lmg+Ci0jaW5jbHVkZSA8d3Rm
L05vbmNvcHlhYmxlLmg+Ci0jaW5jbHVkZSA8d3RmL3RleHQvU3RyaW5nSGFzaC5oPgotI2luY2x1
ZGUgPHd0Zi90ZXh0L1dURlN0cmluZy5oPgotCi1uYW1lc3BhY2UgV2ViQ29yZSB7Ci0KLWNsYXNz
IENhY2hlZFJlc291cmNlOwotY2xhc3MgRnJhbWU7Ci1jbGFzcyBVUkw7Ci1jbGFzcyBOZXRzY2Fw
ZVBsdWdJblN0cmVhbUxvYWRlcjsKLWNsYXNzIE5ldHNjYXBlUGx1Z0luU3RyZWFtTG9hZGVyQ2xp
ZW50OwotY2xhc3MgUmVzb3VyY2VMb2FkZXI7Ci1jbGFzcyBSZXNvdXJjZVJlcXVlc3Q7Ci1jbGFz
cyBTdWJyZXNvdXJjZUxvYWRlcjsKLQotY2xhc3MgUmVzb3VyY2VMb2FkU2NoZWR1bGVyIHsKLSAg
ICBXVEZfTUFLRV9OT05DT1BZQUJMRShSZXNvdXJjZUxvYWRTY2hlZHVsZXIpOyBXVEZfTUFLRV9G
QVNUX0FMTE9DQVRFRDsKLXB1YmxpYzoKLSAgICBXRUJDT1JFX0VYUE9SVCBmcmllbmQgUmVzb3Vy
Y2VMb2FkU2NoZWR1bGVyKiByZXNvdXJjZUxvYWRTY2hlZHVsZXIoKTsKLQotICAgIFdFQkNPUkVf
RVhQT1JUIHZpcnR1YWwgUmVmUHRyPFN1YnJlc291cmNlTG9hZGVyPiBzY2hlZHVsZVN1YnJlc291
cmNlTG9hZChGcmFtZSosIENhY2hlZFJlc291cmNlKiwgY29uc3QgUmVzb3VyY2VSZXF1ZXN0Jiwg
Y29uc3QgUmVzb3VyY2VMb2FkZXJPcHRpb25zJik7Ci0gICAgV0VCQ09SRV9FWFBPUlQgdmlydHVh
bCBSZWZQdHI8TmV0c2NhcGVQbHVnSW5TdHJlYW1Mb2FkZXI+IHNjaGVkdWxlUGx1Z2luU3RyZWFt
TG9hZChGcmFtZSosIE5ldHNjYXBlUGx1Z0luU3RyZWFtTG9hZGVyQ2xpZW50KiwgY29uc3QgUmVz
b3VyY2VSZXF1ZXN0Jik7Ci0gICAgV0VCQ09SRV9FWFBPUlQgdmlydHVhbCB2b2lkIHJlbW92ZShS
ZXNvdXJjZUxvYWRlciopOwotICAgIHZpcnR1YWwgdm9pZCBzZXREZWZlcnNMb2FkaW5nKFJlc291
cmNlTG9hZGVyKiwgYm9vbCk7Ci0gICAgdmlydHVhbCB2b2lkIGNyb3NzT3JpZ2luUmVkaXJlY3RS
ZWNlaXZlZChSZXNvdXJjZUxvYWRlciosIGNvbnN0IFVSTCYgcmVkaXJlY3RVUkwpOwotICAgIAot
ICAgIFdFQkNPUkVfRVhQT1JUIHZpcnR1YWwgdm9pZCBzZXJ2ZVBlbmRpbmdSZXF1ZXN0cyhSZXNv
dXJjZUxvYWRQcmlvcml0eSBtaW5pbXVtUHJpb3JpdHkgPSBSZXNvdXJjZUxvYWRQcmlvcml0eTo6
VmVyeUxvdyk7Ci0gICAgV0VCQ09SRV9FWFBPUlQgdmlydHVhbCB2b2lkIHN1c3BlbmRQZW5kaW5n
UmVxdWVzdHMoKTsKLSAgICBXRUJDT1JFX0VYUE9SVCB2aXJ0dWFsIHZvaWQgcmVzdW1lUGVuZGlu
Z1JlcXVlc3RzKCk7Ci0gICAgCi0gICAgYm9vbCBpc1NlcmlhbExvYWRpbmdFbmFibGVkKCkgY29u
c3QgeyByZXR1cm4gbV9pc1NlcmlhbExvYWRpbmdFbmFibGVkOyB9Ci0gICAgdmlydHVhbCB2b2lk
IHNldFNlcmlhbExvYWRpbmdFbmFibGVkKGJvb2wgYikgeyBtX2lzU2VyaWFsTG9hZGluZ0VuYWJs
ZWQgPSBiOyB9Ci0KLSAgICBjbGFzcyBTdXNwZW5kZXIgewotICAgIHB1YmxpYzoKLSAgICAgICAg
ZXhwbGljaXQgU3VzcGVuZGVyKFJlc291cmNlTG9hZFNjaGVkdWxlciYgc2NoZWR1bGVyKSA6IG1f
c2NoZWR1bGVyKHNjaGVkdWxlcikgeyBtX3NjaGVkdWxlci5zdXNwZW5kUGVuZGluZ1JlcXVlc3Rz
KCk7IH0KLSAgICAgICAgflN1c3BlbmRlcigpIHsgbV9zY2hlZHVsZXIucmVzdW1lUGVuZGluZ1Jl
cXVlc3RzKCk7IH0KLSAgICBwcml2YXRlOgotICAgICAgICBSZXNvdXJjZUxvYWRTY2hlZHVsZXIm
IG1fc2NoZWR1bGVyOwotICAgIH07Ci0KLXByb3RlY3RlZDoKLSAgICBXRUJDT1JFX0VYUE9SVCBS
ZXNvdXJjZUxvYWRTY2hlZHVsZXIoKTsKLSAgICBXRUJDT1JFX0VYUE9SVCB2aXJ0dWFsIH5SZXNv
dXJjZUxvYWRTY2hlZHVsZXIoKTsKLQotcHJpdmF0ZToKLSAgICB2b2lkIHNjaGVkdWxlTG9hZChS
ZXNvdXJjZUxvYWRlciopOwotICAgIHZvaWQgc2NoZWR1bGVTZXJ2ZVBlbmRpbmdSZXF1ZXN0cygp
OwotICAgIHZvaWQgcmVxdWVzdFRpbWVyRmlyZWQoKTsKLQotICAgIGJvb2wgaXNTdXNwZW5kaW5n
UGVuZGluZ1JlcXVlc3RzKCkgY29uc3QgeyByZXR1cm4gISFtX3N1c3BlbmRQZW5kaW5nUmVxdWVz
dHNDb3VudDsgfQotCi0gICAgY2xhc3MgSG9zdEluZm9ybWF0aW9uIHsKLSAgICAgICAgV1RGX01B
S0VfTk9OQ09QWUFCTEUoSG9zdEluZm9ybWF0aW9uKTsgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7
Ci0gICAgcHVibGljOgotICAgICAgICBIb3N0SW5mb3JtYXRpb24oY29uc3QgU3RyaW5nJiwgdW5z
aWduZWQpOwotICAgICAgICB+SG9zdEluZm9ybWF0aW9uKCk7Ci0gICAgICAgIAotICAgICAgICBj
b25zdCBTdHJpbmcmIG5hbWUoKSBjb25zdCB7IHJldHVybiBtX25hbWU7IH0KLSAgICAgICAgdm9p
ZCBzY2hlZHVsZShSZXNvdXJjZUxvYWRlciosIFJlc291cmNlTG9hZFByaW9yaXR5ID0gUmVzb3Vy
Y2VMb2FkUHJpb3JpdHk6OlZlcnlMb3cpOwotICAgICAgICB2b2lkIGFkZExvYWRJblByb2dyZXNz
KFJlc291cmNlTG9hZGVyKik7Ci0gICAgICAgIHZvaWQgcmVtb3ZlKFJlc291cmNlTG9hZGVyKik7
Ci0gICAgICAgIGJvb2wgaGFzUmVxdWVzdHMoKSBjb25zdDsKLSAgICAgICAgYm9vbCBsaW1pdFJl
cXVlc3RzKFJlc291cmNlTG9hZFByaW9yaXR5KSBjb25zdDsKLQotICAgICAgICB0eXBlZGVmIERl
cXVlPFJlZlB0cjxSZXNvdXJjZUxvYWRlcj4+IFJlcXVlc3RRdWV1ZTsKLSAgICAgICAgUmVxdWVz
dFF1ZXVlJiByZXF1ZXN0c1BlbmRpbmcoUmVzb3VyY2VMb2FkUHJpb3JpdHkgcHJpb3JpdHkpIHsg
cmV0dXJuIG1fcmVxdWVzdHNQZW5kaW5nW3ByaW9yaXR5VG9JbmRleChwcmlvcml0eSldOyB9Ci0K
LSAgICBwcml2YXRlOgotICAgICAgICBzdGF0aWMgdW5zaWduZWQgcHJpb3JpdHlUb0luZGV4KFJl
c291cmNlTG9hZFByaW9yaXR5KTsKLQotICAgICAgICBzdGQ6OmFycmF5PFJlcXVlc3RRdWV1ZSwg
cmVzb3VyY2VMb2FkUHJpb3JpdHlDb3VudD4gbV9yZXF1ZXN0c1BlbmRpbmc7Ci0gICAgICAgIHR5
cGVkZWYgSGFzaFNldDxSZWZQdHI8UmVzb3VyY2VMb2FkZXI+PiBSZXF1ZXN0TWFwOwotICAgICAg
ICBSZXF1ZXN0TWFwIG1fcmVxdWVzdHNMb2FkaW5nOwotICAgICAgICBjb25zdCBTdHJpbmcgbV9u
YW1lOwotICAgICAgICBjb25zdCB1bnNpZ25lZCBtX21heFJlcXVlc3RzSW5GbGlnaHQ7Ci0gICAg
fTsKLQotICAgIGVudW0gQ3JlYXRlSG9zdFBvbGljeSB7Ci0gICAgICAgIENyZWF0ZUlmTm90Rm91
bmQsCi0gICAgICAgIEZpbmRPbmx5Ci0gICAgfTsKLSAgICAKLSAgICBIb3N0SW5mb3JtYXRpb24q
IGhvc3RGb3JVUkwoY29uc3QgVVJMJiwgQ3JlYXRlSG9zdFBvbGljeSA9IEZpbmRPbmx5KTsKLSAg
ICBXRUJDT1JFX0VYUE9SVCB2b2lkIHNlcnZlUGVuZGluZ1JlcXVlc3RzKEhvc3RJbmZvcm1hdGlv
biosIFJlc291cmNlTG9hZFByaW9yaXR5KTsKLQotICAgIHR5cGVkZWYgSGFzaE1hcDxTdHJpbmcs
IEhvc3RJbmZvcm1hdGlvbiosIFN0cmluZ0hhc2g+IEhvc3RNYXA7Ci0gICAgSG9zdE1hcCBtX2hv
c3RzOwotICAgIEhvc3RJbmZvcm1hdGlvbiogbV9ub25IVFRQUHJvdG9jb2xIb3N0OwotICAgICAg
ICAKLSAgICBUaW1lciBtX3JlcXVlc3RUaW1lcjsKLQotICAgIHVuc2lnbmVkIG1fc3VzcGVuZFBl
bmRpbmdSZXF1ZXN0c0NvdW50OwotICAgIGJvb2wgbV9pc1NlcmlhbExvYWRpbmdFbmFibGVkOwot
fTsKLQotV0VCQ09SRV9FWFBPUlQgUmVzb3VyY2VMb2FkU2NoZWR1bGVyKiByZXNvdXJjZUxvYWRT
Y2hlZHVsZXIoKTsKLQotfQotCi0jZW5kaWYKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2xvYWRlci9S
ZXNvdXJjZUxvYWRlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvbG9hZGVyL1Jl
c291cmNlTG9hZGVyLmNwcAkocmV2aXNpb24gMTkyODgwKQorKysgU291cmNlL1dlYkNvcmUvbG9h
ZGVyL1Jlc291cmNlTG9hZGVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDcsNyArNDcsNiBAQAog
I2luY2x1ZGUgIlByb2dyZXNzVHJhY2tlci5oIgogI2luY2x1ZGUgIlJlc291cmNlRXJyb3IuaCIK
ICNpbmNsdWRlICJSZXNvdXJjZUhhbmRsZS5oIgotI2luY2x1ZGUgIlJlc291cmNlTG9hZFNjaGVk
dWxlci5oIgogI2luY2x1ZGUgIlNlY3VyaXR5T3JpZ2luLmgiCiAjaW5jbHVkZSAiU2V0dGluZ3Mu
aCIKICNpbmNsdWRlICJTaGFyZWRCdWZmZXIuaCIKQEAgLTgzLDcgKzgyLDcgQEAgUmVzb3VyY2VM
b2FkZXI6On5SZXNvdXJjZUxvYWRlcigpCiAKIHZvaWQgUmVzb3VyY2VMb2FkZXI6OmZpbmlzaE5l
dHdvcmtMb2FkKCkKIHsKLSAgICBwbGF0Zm9ybVN0cmF0ZWdpZXMoKS0+bG9hZGVyU3RyYXRlZ3ko
KS0+cmVzb3VyY2VMb2FkU2NoZWR1bGVyKCktPnJlbW92ZSh0aGlzKTsKKyAgICBwbGF0Zm9ybVN0
cmF0ZWdpZXMoKS0+bG9hZGVyU3RyYXRlZ3koKS0+cmVtb3ZlKHRoaXMpOwogCiAgICAgaWYgKG1f
aGFuZGxlKSB7CiAgICAgICAgIEFTU0VSVChtX2hhbmRsZS0+Y2xpZW50KCkgPT0gdGhpcyk7CkBA
IC0yMzMsNyArMjMyLDcgQEAgdm9pZCBSZXNvdXJjZUxvYWRlcjo6c2V0RGVmZXJzTG9hZGluZyhi
bwogICAgICAgICBzdGFydCgpOwogICAgIH0KIAotICAgIHBsYXRmb3JtU3RyYXRlZ2llcygpLT5s
b2FkZXJTdHJhdGVneSgpLT5yZXNvdXJjZUxvYWRTY2hlZHVsZXIoKS0+c2V0RGVmZXJzTG9hZGlu
Zyh0aGlzLCBkZWZlcnMpOworICAgIHBsYXRmb3JtU3RyYXRlZ2llcygpLT5sb2FkZXJTdHJhdGVn
eSgpLT5zZXREZWZlcnNMb2FkaW5nKHRoaXMsIGRlZmVycyk7CiB9CiAKIEZyYW1lTG9hZGVyKiBS
ZXNvdXJjZUxvYWRlcjo6ZnJhbWVMb2FkZXIoKSBjb25zdApAQCAtMjg5LDcgKzI4OCw3IEBAIHZv
aWQgUmVzb3VyY2VMb2FkZXI6OnNldERhdGFCdWZmZXJpbmdQb2wKIHZvaWQgUmVzb3VyY2VMb2Fk
ZXI6OndpbGxTd2l0Y2hUb1N1YnN0aXR1dGVSZXNvdXJjZSgpCiB7CiAgICAgQVNTRVJUKCFtX2Rv
Y3VtZW50TG9hZGVyLT5pc1N1YnN0aXR1dGVMb2FkUGVuZGluZyh0aGlzKSk7Ci0gICAgcGxhdGZv
cm1TdHJhdGVnaWVzKCktPmxvYWRlclN0cmF0ZWd5KCktPnJlc291cmNlTG9hZFNjaGVkdWxlcigp
LT5yZW1vdmUodGhpcyk7CisgICAgcGxhdGZvcm1TdHJhdGVnaWVzKCktPmxvYWRlclN0cmF0ZWd5
KCktPnJlbW92ZSh0aGlzKTsKICAgICBpZiAobV9oYW5kbGUpCiAgICAgICAgIG1faGFuZGxlLT5j
YW5jZWwoKTsKIH0KQEAgLTM3Niw3ICszNzUsNyBAQCB2b2lkIFJlc291cmNlTG9hZGVyOjp3aWxs
U2VuZFJlcXVlc3RJbnRlCiAKICAgICBib29sIGlzUmVkaXJlY3QgPSAhcmVkaXJlY3RSZXNwb25z
ZS5pc051bGwoKTsKICAgICBpZiAoaXNSZWRpcmVjdCkKLSAgICAgICAgcGxhdGZvcm1TdHJhdGVn
aWVzKCktPmxvYWRlclN0cmF0ZWd5KCktPnJlc291cmNlTG9hZFNjaGVkdWxlcigpLT5jcm9zc09y
aWdpblJlZGlyZWN0UmVjZWl2ZWQodGhpcywgcmVxdWVzdC51cmwoKSk7CisgICAgICAgIHBsYXRm
b3JtU3RyYXRlZ2llcygpLT5sb2FkZXJTdHJhdGVneSgpLT5jcm9zc09yaWdpblJlZGlyZWN0UmVj
ZWl2ZWQodGhpcywgcmVxdWVzdC51cmwoKSk7CiAKICAgICBtX3JlcXVlc3QgPSByZXF1ZXN0Owog
CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9sb2FkZXIvYXJjaGl2ZS9BcmNoaXZlUmVzb3VyY2VDb2xs
ZWN0aW9uLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvbG9hZGVyL2FyY2hpdmUvQXJj
aGl2ZVJlc291cmNlQ29sbGVjdGlvbi5oCShyZXZpc2lvbiAxOTI4ODApCisrKyBTb3VyY2UvV2Vi
Q29yZS9sb2FkZXIvYXJjaGl2ZS9BcmNoaXZlUmVzb3VyY2VDb2xsZWN0aW9uLmgJKHdvcmtpbmcg
Y29weSkKQEAgLTQ3LDcgKzQ3LDcgQEAgcHVibGljOgogICAgIHZvaWQgYWRkUmVzb3VyY2UoUGFz
c1JlZlB0cjxBcmNoaXZlUmVzb3VyY2U+KTsKICAgICB2b2lkIGFkZEFsbFJlc291cmNlcyhBcmNo
aXZlKik7CiAgICAgCi0gICAgQXJjaGl2ZVJlc291cmNlKiBhcmNoaXZlUmVzb3VyY2VGb3JVUkwo
Y29uc3QgVVJMJik7CisgICAgV0VCQ09SRV9FWFBPUlQgQXJjaGl2ZVJlc291cmNlKiBhcmNoaXZl
UmVzb3VyY2VGb3JVUkwoY29uc3QgVVJMJik7CiAgICAgUGFzc1JlZlB0cjxBcmNoaXZlPiBwb3BT
dWJmcmFtZUFyY2hpdmUoY29uc3QgU3RyaW5nJiBmcmFtZU5hbWUsIGNvbnN0IFVSTCYpOwogICAg
IAogcHJpdmF0ZTogICAgCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9sb2FkZXIvY2FjaGUvQ2FjaGVk
UmVzb3VyY2UuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2xvYWRlci9jYWNoZS9D
YWNoZWRSZXNvdXJjZS5jcHAJKHJldmlzaW9uIDE5Mjg4MCkKKysrIFNvdXJjZS9XZWJDb3JlL2xv
YWRlci9jYWNoZS9DYWNoZWRSZXNvdXJjZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQ0LDcgKzQ0
LDYgQEAKICNpbmNsdWRlICJNZW1vcnlDYWNoZS5oIgogI2luY2x1ZGUgIlBsYXRmb3JtU3RyYXRl
Z2llcy5oIgogI2luY2x1ZGUgIlJlc291cmNlSGFuZGxlLmgiCi0jaW5jbHVkZSAiUmVzb3VyY2VM
b2FkU2NoZWR1bGVyLmgiCiAjaW5jbHVkZSAiU2NoZW1lUmVnaXN0cnkuaCIKICNpbmNsdWRlICJT
ZWN1cml0eU9yaWdpbi5oIgogI2luY2x1ZGUgIlNlY3VyaXR5UG9saWN5LmgiCkBAIC0yNzgsNyAr
Mjc3LDcgQEAgdm9pZCBDYWNoZWRSZXNvdXJjZTo6bG9hZChDYWNoZWRSZXNvdXJjZQogICAgICAg
ICBtX2ZyYWdtZW50SWRlbnRpZmllckZvclJlcXVlc3QgPSBTdHJpbmcoKTsKICAgICB9CiAKLSAg
ICBtX2xvYWRlciA9IHBsYXRmb3JtU3RyYXRlZ2llcygpLT5sb2FkZXJTdHJhdGVneSgpLT5yZXNv
dXJjZUxvYWRTY2hlZHVsZXIoKS0+c2NoZWR1bGVTdWJyZXNvdXJjZUxvYWQoY2FjaGVkUmVzb3Vy
Y2VMb2FkZXIuZnJhbWUoKSwgdGhpcywgcmVxdWVzdCwgb3B0aW9ucyk7CisgICAgbV9sb2FkZXIg
PSBwbGF0Zm9ybVN0cmF0ZWdpZXMoKS0+bG9hZGVyU3RyYXRlZ3koKS0+bG9hZFJlc291cmNlKGNh
Y2hlZFJlc291cmNlTG9hZGVyLmZyYW1lKCksIHRoaXMsIHJlcXVlc3QsIG9wdGlvbnMpOwogICAg
IGlmICghbV9sb2FkZXIpIHsKICAgICAgICAgZmFpbEJlZm9yZVN0YXJ0aW5nKCk7CiAgICAgICAg
IHJldHVybjsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2xvYWRlci9jYWNoZS9DYWNoZWRSZXNvdXJj
ZUxvYWRlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvbG9hZGVyL2NhY2hlL0Nh
Y2hlZFJlc291cmNlTG9hZGVyLmNwcAkocmV2aXNpb24gMTkyODgwKQorKysgU291cmNlL1dlYkNv
cmUvbG9hZGVyL2NhY2hlL0NhY2hlZFJlc291cmNlTG9hZGVyLmNwcAkod29ya2luZyBjb3B5KQpA
QCAtNjEsNyArNjEsNiBAQAogI2luY2x1ZGUgIlBsYXRmb3JtU3RyYXRlZ2llcy5oIgogI2luY2x1
ZGUgIlJlbmRlckVsZW1lbnQuaCIKICNpbmNsdWRlICJSZXNvdXJjZUxvYWRJbmZvLmgiCi0jaW5j
bHVkZSAiUmVzb3VyY2VMb2FkU2NoZWR1bGVyLmgiCiAjaW5jbHVkZSAiU2NyaXB0Q29udHJvbGxl
ci5oIgogI2luY2x1ZGUgIlNlY3VyaXR5T3JpZ2luLmgiCiAjaW5jbHVkZSAiU2Vzc2lvbklELmgi
CkBAIC05NjcsNyArOTY2LDcgQEAgdm9pZCBDYWNoZWRSZXNvdXJjZUxvYWRlcjo6cGVyZm9ybVBv
c3RMbwogewogICAgIGNoZWNrRm9yUGVuZGluZ1ByZWxvYWRzKCk7CiAKLSAgICBwbGF0Zm9ybVN0
cmF0ZWdpZXMoKS0+bG9hZGVyU3RyYXRlZ3koKS0+cmVzb3VyY2VMb2FkU2NoZWR1bGVyKCktPnNl
cnZlUGVuZGluZ1JlcXVlc3RzKCk7CisgICAgcGxhdGZvcm1TdHJhdGVnaWVzKCktPmxvYWRlclN0
cmF0ZWd5KCktPnNlcnZlUGVuZGluZ1JlcXVlc3RzKCk7CiB9CiAKIHZvaWQgQ2FjaGVkUmVzb3Vy
Y2VMb2FkZXI6OmluY3JlbWVudFJlcXVlc3RDb3VudChjb25zdCBDYWNoZWRSZXNvdXJjZSogcmVz
KQpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vUGxhdGZvcm1TdHJhdGVnaWVzLmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vUGxhdGZvcm1TdHJhdGVnaWVzLmgJ
KHJldmlzaW9uIDE5Mjg4MCkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL1BsYXRmb3JtU3Ry
YXRlZ2llcy5oCSh3b3JraW5nIGNvcHkpCkBAIC0yOCw2ICsyOCw3IEBACiAKIG5hbWVzcGFjZSBX
ZWJDb3JlIHsKIAorY2xhc3MgQmxvYlJlZ2lzdHJ5OwogY2xhc3MgQ29va2llc1N0cmF0ZWd5Owog
Y2xhc3MgTG9hZGVyU3RyYXRlZ3k7CiBjbGFzcyBQYXN0ZWJvYXJkU3RyYXRlZ3k7CkBAIC02Mywx
MiArNjQsMTUgQEAgcHVibGljOgogICAgICAgICByZXR1cm4gbV9wbHVnaW5TdHJhdGVneTsKICAg
ICB9CiAKKyAgICBCbG9iUmVnaXN0cnkqIGJsb2JSZWdpc3RyeSgpCisgICAgeworICAgICAgICBp
ZiAoIW1fYmxvYlJlZ2lzdHJ5KQorICAgICAgICAgICAgbV9ibG9iUmVnaXN0cnkgPSBjcmVhdGVC
bG9iUmVnaXN0cnkoKTsKKyAgICAgICAgcmV0dXJuIG1fYmxvYlJlZ2lzdHJ5OworICAgIH0KKwog
cHJvdGVjdGVkOgogICAgIFBsYXRmb3JtU3RyYXRlZ2llcygpCi0gICAgICAgIDogbV9jb29raWVz
U3RyYXRlZ3kobnVsbHB0cikKLSAgICAgICAgLCBtX2xvYWRlclN0cmF0ZWd5KG51bGxwdHIpCi0g
ICAgICAgICwgbV9wYXN0ZWJvYXJkU3RyYXRlZ3kobnVsbHB0cikKLSAgICAgICAgLCBtX3BsdWdp
blN0cmF0ZWd5KG51bGxwdHIpCiAgICAgewogICAgIH0KIApAQCAtODEsMTEgKzg1LDEzIEBAIHBy
aXZhdGU6CiAgICAgdmlydHVhbCBMb2FkZXJTdHJhdGVneSogY3JlYXRlTG9hZGVyU3RyYXRlZ3ko
KSA9IDA7CiAgICAgdmlydHVhbCBQYXN0ZWJvYXJkU3RyYXRlZ3kqIGNyZWF0ZVBhc3RlYm9hcmRT
dHJhdGVneSgpID0gMDsKICAgICB2aXJ0dWFsIFBsdWdpblN0cmF0ZWd5KiBjcmVhdGVQbHVnaW5T
dHJhdGVneSgpID0gMDsKKyAgICB2aXJ0dWFsIEJsb2JSZWdpc3RyeSogY3JlYXRlQmxvYlJlZ2lz
dHJ5KCkgPSAwOwogCi0gICAgQ29va2llc1N0cmF0ZWd5KiBtX2Nvb2tpZXNTdHJhdGVneTsKLSAg
ICBMb2FkZXJTdHJhdGVneSogbV9sb2FkZXJTdHJhdGVneTsKLSAgICBQYXN0ZWJvYXJkU3RyYXRl
Z3kqIG1fcGFzdGVib2FyZFN0cmF0ZWd5OwotICAgIFBsdWdpblN0cmF0ZWd5KiBtX3BsdWdpblN0
cmF0ZWd5OworICAgIENvb2tpZXNTdHJhdGVneSogbV9jb29raWVzU3RyYXRlZ3kgeyB9OworICAg
IExvYWRlclN0cmF0ZWd5KiBtX2xvYWRlclN0cmF0ZWd5IHsgfTsKKyAgICBQYXN0ZWJvYXJkU3Ry
YXRlZ3kqIG1fcGFzdGVib2FyZFN0cmF0ZWd5IHsgfTsKKyAgICBQbHVnaW5TdHJhdGVneSogbV9w
bHVnaW5TdHJhdGVneSB7IH07CisgICAgQmxvYlJlZ2lzdHJ5KiBtX2Jsb2JSZWdpc3RyeSB7IH07
CiB9OwogCiBXRUJDT1JFX0VYUE9SVCBQbGF0Zm9ybVN0cmF0ZWdpZXMqIHBsYXRmb3JtU3RyYXRl
Z2llcygpOwpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9CbG9iUmVnaXN0
cnkuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvQmxv
YlJlZ2lzdHJ5LmNwcAkocmV2aXNpb24gMTkyODgwKQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vbmV0d29yay9CbG9iUmVnaXN0cnkuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00MCw5ICs0MCw3
IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKIEJsb2JSZWdpc3RyeSYgYmxvYlJlZ2lzdHJ5KCkKIHsK
ICAgICBBU1NFUlQoaXNNYWluVGhyZWFkKCkpOwotCi0gICAgc3RhdGljIEJsb2JSZWdpc3RyeSYg
aW5zdGFuY2UgPSAqcGxhdGZvcm1TdHJhdGVnaWVzKCktPmxvYWRlclN0cmF0ZWd5KCktPmNyZWF0
ZUJsb2JSZWdpc3RyeSgpOwotICAgIHJldHVybiBpbnN0YW5jZTsKKyAgICByZXR1cm4gKnBsYXRm
b3JtU3RyYXRlZ2llcygpLT5ibG9iUmVnaXN0cnkoKTsKIH0KIAogQmxvYlJlZ2lzdHJ5Ojp+Qmxv
YlJlZ2lzdHJ5KCkKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvUmVzb3Vy
Y2VSZXF1ZXN0QmFzZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25l
dHdvcmsvUmVzb3VyY2VSZXF1ZXN0QmFzZS5oCShyZXZpc2lvbiAxOTI4ODApCisrKyBTb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL1Jlc291cmNlUmVxdWVzdEJhc2UuaAkod29ya2luZyBj
b3B5KQpAQCAtMjQ0LDcgKzI0NCw3IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKICAgICAgICAgUmVz
b3VyY2VSZXF1ZXN0QmFzZTo6UmVxdWVzdGVyIHJlcXVlc3RlcjsKICAgICB9OwogICAgIAotICAg
IHVuc2lnbmVkIGluaXRpYWxpemVNYXhpbXVtSFRUUENvbm5lY3Rpb25Db3VudFBlckhvc3QoKTsK
KyAgICBXRUJDT1JFX0VYUE9SVCB1bnNpZ25lZCBpbml0aWFsaXplTWF4aW11bUhUVFBDb25uZWN0
aW9uQ291bnRQZXJIb3N0KCk7CiAjaWYgUExBVEZPUk0oSU9TKQogICAgIFdFQkNPUkVfRVhQT1JU
IHZvaWQgaW5pdGlhbGl6ZUhUVFBDb25uZWN0aW9uU2V0dGluZ3NPblN0YXJ0dXAoKTsKICNlbmRp
ZgpJbmRleDogU291cmNlL1dlYkNvcmUvc3R5bGUvU3R5bGVSZXNvbHZlVHJlZS5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1dlYkNvcmUvc3R5bGUvU3R5bGVSZXNvbHZlVHJlZS5jcHAJKHJldmlz
aW9uIDE5Mjg4MCkKKysrIFNvdXJjZS9XZWJDb3JlL3N0eWxlL1N0eWxlUmVzb2x2ZVRyZWUuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC00Nyw3ICs0Nyw2IEBACiAjaW5jbHVkZSAiUmVuZGVyVGV4dC5o
IgogI2luY2x1ZGUgIlJlbmRlclRyZWVQb3NpdGlvbi5oIgogI2luY2x1ZGUgIlJlbmRlcldpZGdl
dC5oIgotI2luY2x1ZGUgIlJlc291cmNlTG9hZFNjaGVkdWxlci5oIgogI2luY2x1ZGUgIlNldHRp
bmdzLmgiCiAjaW5jbHVkZSAiU2hhZG93Um9vdC5oIgogI2luY2x1ZGUgIlN0eWxlUmVzb2x2ZUZv
ckRvY3VtZW50LmgiCkBAIC05NDQsNyArOTQzLDcgQEAgUG9zdFJlc29sdXRpb25DYWxsYmFja0Rp
c2FibGVyOjpQb3N0UmVzbwogICAgICsrcmVzb2x1dGlvbk5lc3RpbmdEZXB0aDsKIAogICAgIGlm
IChyZXNvbHV0aW9uTmVzdGluZ0RlcHRoID09IDEpCi0gICAgICAgIHBsYXRmb3JtU3RyYXRlZ2ll
cygpLT5sb2FkZXJTdHJhdGVneSgpLT5yZXNvdXJjZUxvYWRTY2hlZHVsZXIoKS0+c3VzcGVuZFBl
bmRpbmdSZXF1ZXN0cygpOworICAgICAgICBwbGF0Zm9ybVN0cmF0ZWdpZXMoKS0+bG9hZGVyU3Ry
YXRlZ3koKS0+c3VzcGVuZFBlbmRpbmdSZXF1ZXN0cygpOwogCiAgICAgLy8gRklYTUU6IEl0J3Mg
c3RyYW5nZSB0byBidWlsZCB0aGlzIGludG8gdGhlIGRpc2FibGVyLgogICAgIHN1c3BlbmRNZW1v
cnlDYWNoZUNsaWVudENhbGxzKGRvY3VtZW50KTsKQEAgLTk1OSw3ICs5NTgsNyBAQCBQb3N0UmVz
b2x1dGlvbkNhbGxiYWNrRGlzYWJsZXI6On5Qb3N0UmVzCiAgICAgICAgICAgICBxdWV1ZVtpXSgp
OwogICAgICAgICBxdWV1ZS5jbGVhcigpOwogCi0gICAgICAgIHBsYXRmb3JtU3RyYXRlZ2llcygp
LT5sb2FkZXJTdHJhdGVneSgpLT5yZXNvdXJjZUxvYWRTY2hlZHVsZXIoKS0+cmVzdW1lUGVuZGlu
Z1JlcXVlc3RzKCk7CisgICAgICAgIHBsYXRmb3JtU3RyYXRlZ2llcygpLT5sb2FkZXJTdHJhdGVn
eSgpLT5yZXN1bWVQZW5kaW5nUmVxdWVzdHMoKTsKICAgICB9CiAKICAgICAtLXJlc29sdXRpb25O
ZXN0aW5nRGVwdGg7CkluZGV4OiBTb3VyY2UvV2ViS2l0Mi9DaGFuZ2VMb2cKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1dlYktpdDIvQ2hhbmdlTG9nCShyZXZpc2lvbiAxOTI4ODApCisrKyBTb3VyY2Uv
V2ViS2l0Mi9DaGFuZ2VMb2cJKHdvcmtpbmcgY29weSkKQEAgLTEsMyArMSw0NyBAQAorMjAxNS0x
Mi0wMiAgQW50dGkgS29pdmlzdG8gIDxhbnR0aUBhcHBsZS5jb20+CisKKyAgICAgICAgTW92ZSBS
ZXNvdXJjZUxvYWRTY2hlZHVsZXIgdG8gV2ViS2l0MQorICAgICAgICBodHRwczovL2J1Z3Mud2Vi
a2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTUxNzQzCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9C
T0RZIChPT1BTISkuCisKKyAgICAgICAgKiBOZXR3b3JrUHJvY2Vzcy9OZXR3b3JrUHJvY2Vzc1Bs
YXRmb3JtU3RyYXRlZ2llcy5jcHA6CisgICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtQcm9jZXNzUGxh
dGZvcm1TdHJhdGVnaWVzOjpjcmVhdGVDb29raWVzU3RyYXRlZ3kpOgorICAgICAgICAoV2ViS2l0
OjpOZXR3b3JrUHJvY2Vzc1BsYXRmb3JtU3RyYXRlZ2llczo6Y3JlYXRlTG9hZGVyU3RyYXRlZ3kp
OgorICAgICAgICAoV2ViS2l0OjpOZXR3b3JrUHJvY2Vzc1BsYXRmb3JtU3RyYXRlZ2llczo6Y3Jl
YXRlUGFzdGVib2FyZFN0cmF0ZWd5KToKKyAgICAgICAgKFdlYktpdDo6TmV0d29ya1Byb2Nlc3NQ
bGF0Zm9ybVN0cmF0ZWdpZXM6OmNyZWF0ZVBsdWdpblN0cmF0ZWd5KToKKyAgICAgICAgKFdlYktp
dDo6TmV0d29ya1Byb2Nlc3NQbGF0Zm9ybVN0cmF0ZWdpZXM6OmNyZWF0ZUJsb2JSZWdpc3RyeSk6
CisgICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtQcm9jZXNzUGxhdGZvcm1TdHJhdGVnaWVzOjpyZXNv
dXJjZUxvYWRTY2hlZHVsZXIpOiBEZWxldGVkLgorICAgICAgICAoV2ViS2l0OjpOZXR3b3JrUHJv
Y2Vzc1BsYXRmb3JtU3RyYXRlZ2llczo6bG9hZFJlc291cmNlU3luY2hyb25vdXNseSk6IERlbGV0
ZWQuCisgICAgICAgICogTmV0d29ya1Byb2Nlc3MvTmV0d29ya1Byb2Nlc3NQbGF0Zm9ybVN0cmF0
ZWdpZXMuaDoKKyAgICAgICAgKiBXZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0luamVjdGVkQnVu
ZGxlLmNwcDoKKyAgICAgICAgKiBXZWJQcm9jZXNzL05ldHdvcmsvV2ViUmVzb3VyY2VMb2FkU2No
ZWR1bGVyLmNwcDoKKyAgICAgICAgKFdlYktpdDo6V2ViUmVzb3VyY2VMb2FkU2NoZWR1bGVyOjp+
V2ViUmVzb3VyY2VMb2FkU2NoZWR1bGVyKToKKyAgICAgICAgKFdlYktpdDo6V2ViUmVzb3VyY2VM
b2FkU2NoZWR1bGVyOjpsb2FkUmVzb3VyY2UpOgorICAgICAgICAoV2ViS2l0OjpXZWJSZXNvdXJj
ZUxvYWRTY2hlZHVsZXI6OnJlc3VtZVBlbmRpbmdSZXF1ZXN0cyk6CisgICAgICAgIChXZWJLaXQ6
OldlYlJlc291cmNlTG9hZFNjaGVkdWxlcjo6bmV0d29ya1Byb2Nlc3NDcmFzaGVkKToKKyAgICAg
ICAgKFdlYktpdDo6V2ViUmVzb3VyY2VMb2FkU2NoZWR1bGVyOjpsb2FkUmVzb3VyY2VTeW5jaHJv
bm91c2x5KToKKyAgICAgICAgKFdlYktpdDo6V2ViUmVzb3VyY2VMb2FkU2NoZWR1bGVyOjpjcmVh
dGVQaW5nSGFuZGxlKToKKyAgICAgICAgKFdlYktpdDo6V2ViUmVzb3VyY2VMb2FkU2NoZWR1bGVy
OjpzY2hlZHVsZVN1YnJlc291cmNlTG9hZCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJLaXQ6Oldl
YlJlc291cmNlTG9hZFNjaGVkdWxlcjo6c2V0U2VyaWFsTG9hZGluZ0VuYWJsZWQpOiBEZWxldGVk
LgorICAgICAgICAqIFdlYlByb2Nlc3MvTmV0d29yay9XZWJSZXNvdXJjZUxvYWRTY2hlZHVsZXIu
aDoKKyAgICAgICAgKFdlYktpdDo6V2ViUmVzb3VyY2VMb2FkU2NoZWR1bGVyOjp3ZWJSZXNvdXJj
ZUxvYWRlckZvcklkZW50aWZpZXIpOgorICAgICAgICAqIFdlYlByb2Nlc3MvUGx1Z2lucy9QbHVn
aW5WaWV3LmNwcDoKKyAgICAgICAgKFdlYktpdDo6UGx1Z2luVmlldzo6U3RyZWFtOjpzdGFydCk6
CisgICAgICAgIChXZWJLaXQ6OlBsdWdpblZpZXc6OlN0cmVhbTo6Y2FuY2VsKToKKyAgICAgICAg
KiBXZWJQcm9jZXNzL1dlYkNvcmVTdXBwb3J0L1dlYlBsYXRmb3JtU3RyYXRlZ2llcy5jcHA6Cisg
ICAgICAgIChXZWJLaXQ6OldlYlBsYXRmb3JtU3RyYXRlZ2llczo6Y3JlYXRlTG9hZGVyU3RyYXRl
Z3kpOgorICAgICAgICAoV2ViS2l0OjpXZWJQbGF0Zm9ybVN0cmF0ZWdpZXM6OmNyZWF0ZVBhc3Rl
Ym9hcmRTdHJhdGVneSk6CisgICAgICAgIChXZWJLaXQ6OldlYlBsYXRmb3JtU3RyYXRlZ2llczo6
Y3JlYXRlUGx1Z2luU3RyYXRlZ3kpOgorICAgICAgICAoV2ViS2l0OjpXZWJQbGF0Zm9ybVN0cmF0
ZWdpZXM6OmNyZWF0ZUJsb2JSZWdpc3RyeSk6CisgICAgICAgIChXZWJLaXQ6OldlYlBsYXRmb3Jt
U3RyYXRlZ2llczo6Y29va2llc0ZvckRPTSk6CisgICAgICAgIChXZWJLaXQ6OldlYlBsYXRmb3Jt
U3RyYXRlZ2llczo6ZGVsZXRlQ29va2llKToKKyAgICAgICAgKFdlYktpdDo6V2ViUGxhdGZvcm1T
dHJhdGVnaWVzOjpyZWZyZXNoUGx1Z2lucyk6CisgICAgICAgIChXZWJLaXQ6OldlYlBsYXRmb3Jt
U3RyYXRlZ2llczo6cmVzb3VyY2VMb2FkU2NoZWR1bGVyKTogRGVsZXRlZC4KKyAgICAgICAgKFdl
YktpdDo6V2ViUGxhdGZvcm1TdHJhdGVnaWVzOjpsb2FkUmVzb3VyY2VTeW5jaHJvbm91c2x5KTog
RGVsZXRlZC4KKyAgICAgICAgKFdlYktpdDo6V2ViUGxhdGZvcm1TdHJhdGVnaWVzOjpjcmVhdGVQ
aW5nSGFuZGxlKTogRGVsZXRlZC4KKyAgICAgICAgKiBXZWJQcm9jZXNzL1dlYkNvcmVTdXBwb3J0
L1dlYlBsYXRmb3JtU3RyYXRlZ2llcy5oOgorCiAyMDE1LTEyLTAxICBDYXJsb3MgR2FyY2lhIENh
bXBvcyAgPGNnYXJjaWFAaWdhbGlhLmNvbT4KIAogICAgICAgICBVbnJldmlld2VkLiBBZGQgbWlz
c2luZyBpbnNwZWN0b3IgZmlsZXMgdG8gdGhlIEdUSysgYnVpbGQuCkluZGV4OiBTb3VyY2UvV2Vi
S2l0Mi9OZXR3b3JrUHJvY2Vzcy9OZXR3b3JrUHJvY2Vzc1BsYXRmb3JtU3RyYXRlZ2llcy5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdDIvTmV0d29ya1Byb2Nlc3MvTmV0d29ya1Byb2Nl
c3NQbGF0Zm9ybVN0cmF0ZWdpZXMuY3BwCShyZXZpc2lvbiAxOTI4ODApCisrKyBTb3VyY2UvV2Vi
S2l0Mi9OZXR3b3JrUHJvY2Vzcy9OZXR3b3JrUHJvY2Vzc1BsYXRmb3JtU3RyYXRlZ2llcy5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTQxLDMzICs0MSwyMiBAQCB2b2lkIE5ldHdvcmtQcm9jZXNzUGxh
dGZvcm1TdHJhdGVnaWVzOjppCiAKIENvb2tpZXNTdHJhdGVneSogTmV0d29ya1Byb2Nlc3NQbGF0
Zm9ybVN0cmF0ZWdpZXM6OmNyZWF0ZUNvb2tpZXNTdHJhdGVneSgpCiB7Ci0gICAgcmV0dXJuIDA7
CisgICAgcmV0dXJuIG51bGxwdHI7CiB9CiAKIExvYWRlclN0cmF0ZWd5KiBOZXR3b3JrUHJvY2Vz
c1BsYXRmb3JtU3RyYXRlZ2llczo6Y3JlYXRlTG9hZGVyU3RyYXRlZ3koKQogewotICAgIHJldHVy
biB0aGlzOworICAgIHJldHVybiBudWxscHRyOwogfQogCiBQYXN0ZWJvYXJkU3RyYXRlZ3kqIE5l
dHdvcmtQcm9jZXNzUGxhdGZvcm1TdHJhdGVnaWVzOjpjcmVhdGVQYXN0ZWJvYXJkU3RyYXRlZ3ko
KQogewotICAgIHJldHVybiAwOworICAgIHJldHVybiBudWxscHRyOwogfQogCiBQbHVnaW5TdHJh
dGVneSogTmV0d29ya1Byb2Nlc3NQbGF0Zm9ybVN0cmF0ZWdpZXM6OmNyZWF0ZVBsdWdpblN0cmF0
ZWd5KCkKIHsKLSAgICByZXR1cm4gMDsKLX0KLQotUmVzb3VyY2VMb2FkU2NoZWR1bGVyKiBOZXR3
b3JrUHJvY2Vzc1BsYXRmb3JtU3RyYXRlZ2llczo6cmVzb3VyY2VMb2FkU2NoZWR1bGVyKCkKLXsK
LSAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKLSAgICByZXR1cm4gMDsKLX0KLQotdm9pZCBOZXR3
b3JrUHJvY2Vzc1BsYXRmb3JtU3RyYXRlZ2llczo6bG9hZFJlc291cmNlU3luY2hyb25vdXNseShO
ZXR3b3JraW5nQ29udGV4dCosIHVuc2lnbmVkIGxvbmcsIGNvbnN0IFJlc291cmNlUmVxdWVzdCYs
IFN0b3JlZENyZWRlbnRpYWxzLCBDbGllbnRDcmVkZW50aWFsUG9saWN5LCBSZXNvdXJjZUVycm9y
JiwgUmVzb3VyY2VSZXNwb25zZSYsIFZlY3RvcjxjaGFyPiYpCi17Ci0gICAgQVNTRVJUX05PVF9S
RUFDSEVEKCk7CisgICAgcmV0dXJuIG51bGxwdHI7CiB9CiAKIEJsb2JSZWdpc3RyeSogTmV0d29y
a1Byb2Nlc3NQbGF0Zm9ybVN0cmF0ZWdpZXM6OmNyZWF0ZUJsb2JSZWdpc3RyeSgpCkluZGV4OiBT
b3VyY2UvV2ViS2l0Mi9OZXR3b3JrUHJvY2Vzcy9OZXR3b3JrUHJvY2Vzc1BsYXRmb3JtU3RyYXRl
Z2llcy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQyL05ldHdvcmtQcm9jZXNzL05ldHdv
cmtQcm9jZXNzUGxhdGZvcm1TdHJhdGVnaWVzLmgJKHJldmlzaW9uIDE5Mjg4MCkKKysrIFNvdXJj
ZS9XZWJLaXQyL05ldHdvcmtQcm9jZXNzL05ldHdvcmtQcm9jZXNzUGxhdGZvcm1TdHJhdGVnaWVz
LmgJKHdvcmtpbmcgY29weSkKQEAgLTMxLDIxICszMSwxNyBAQAogCiBuYW1lc3BhY2UgV2ViS2l0
IHsKIAotY2xhc3MgTmV0d29ya1Byb2Nlc3NQbGF0Zm9ybVN0cmF0ZWdpZXMgOiBwdWJsaWMgV2Vi
Q29yZTo6UGxhdGZvcm1TdHJhdGVnaWVzLCBwcml2YXRlIFdlYkNvcmU6OkxvYWRlclN0cmF0ZWd5
IHsKK2NsYXNzIE5ldHdvcmtQcm9jZXNzUGxhdGZvcm1TdHJhdGVnaWVzIDogcHVibGljIFdlYkNv
cmU6OlBsYXRmb3JtU3RyYXRlZ2llcyB7CiBwdWJsaWM6CiAgICAgc3RhdGljIHZvaWQgaW5pdGlh
bGl6ZSgpOwogICAgIAogcHJpdmF0ZToKICAgICAvLyBXZWJDb3JlOjpQbGF0Zm9ybVN0cmF0ZWdp
ZXMKLSAgICB2aXJ0dWFsIFdlYkNvcmU6OkNvb2tpZXNTdHJhdGVneSogY3JlYXRlQ29va2llc1N0
cmF0ZWd5KCkgb3ZlcnJpZGU7Ci0gICAgdmlydHVhbCBXZWJDb3JlOjpMb2FkZXJTdHJhdGVneSog
Y3JlYXRlTG9hZGVyU3RyYXRlZ3koKSBvdmVycmlkZTsKLSAgICB2aXJ0dWFsIFdlYkNvcmU6OlBh
c3RlYm9hcmRTdHJhdGVneSogY3JlYXRlUGFzdGVib2FyZFN0cmF0ZWd5KCkgb3ZlcnJpZGU7Ci0g
ICAgdmlydHVhbCBXZWJDb3JlOjpQbHVnaW5TdHJhdGVneSogY3JlYXRlUGx1Z2luU3RyYXRlZ3ko
KSBvdmVycmlkZTsKLQotICAgIC8vIFdlYkNvcmU6OkxvYWRlclN0cmF0ZWd5Ci0gICAgdmlydHVh
bCBXZWJDb3JlOjpSZXNvdXJjZUxvYWRTY2hlZHVsZXIqIHJlc291cmNlTG9hZFNjaGVkdWxlcigp
IG92ZXJyaWRlOwotICAgIHZpcnR1YWwgdm9pZCBsb2FkUmVzb3VyY2VTeW5jaHJvbm91c2x5KFdl
YkNvcmU6Ok5ldHdvcmtpbmdDb250ZXh0KiwgdW5zaWduZWQgbG9uZyByZXNvdXJjZUxvYWRJZGVu
dGlmaWVyLCBjb25zdCBXZWJDb3JlOjpSZXNvdXJjZVJlcXVlc3QmLCBXZWJDb3JlOjpTdG9yZWRD
cmVkZW50aWFscywgV2ViQ29yZTo6Q2xpZW50Q3JlZGVudGlhbFBvbGljeSwgV2ViQ29yZTo6UmVz
b3VyY2VFcnJvciYsIFdlYkNvcmU6OlJlc291cmNlUmVzcG9uc2UmLCBWZWN0b3I8Y2hhcj4mIGRh
dGEpIG92ZXJyaWRlOwotICAgIHZpcnR1YWwgV2ViQ29yZTo6QmxvYlJlZ2lzdHJ5KiBjcmVhdGVC
bG9iUmVnaXN0cnkoKSBvdmVycmlkZTsKKyAgICBXZWJDb3JlOjpDb29raWVzU3RyYXRlZ3kqIGNy
ZWF0ZUNvb2tpZXNTdHJhdGVneSgpIG92ZXJyaWRlOworICAgIFdlYkNvcmU6OkxvYWRlclN0cmF0
ZWd5KiBjcmVhdGVMb2FkZXJTdHJhdGVneSgpIG92ZXJyaWRlOworICAgIFdlYkNvcmU6OlBhc3Rl
Ym9hcmRTdHJhdGVneSogY3JlYXRlUGFzdGVib2FyZFN0cmF0ZWd5KCkgb3ZlcnJpZGU7CisgICAg
V2ViQ29yZTo6UGx1Z2luU3RyYXRlZ3kqIGNyZWF0ZVBsdWdpblN0cmF0ZWd5KCkgb3ZlcnJpZGU7
CisgICAgV2ViQ29yZTo6QmxvYlJlZ2lzdHJ5KiBjcmVhdGVCbG9iUmVnaXN0cnkoKSBvdmVycmlk
ZTsKIH07CiAKIH0gLy8gbmFtZXNwYWNlIFdlYktpdApJbmRleDogU291cmNlL1dlYktpdDIvV2Vi
UHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9JbmplY3RlZEJ1bmRsZS5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9JbmplY3RlZEJ1bmRsZS5j
cHAJKHJldmlzaW9uIDE5Mjg4MCkKKysrIFNvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvSW5qZWN0
ZWRCdW5kbGUvSW5qZWN0ZWRCdW5kbGUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC02Niw3ICs2Niw2
IEBACiAjaW5jbHVkZSA8V2ViQ29yZS9QYWdlR3JvdXAuaD4KICNpbmNsdWRlIDxXZWJDb3JlL1By
aW50Q29udGV4dC5oPgogI2luY2x1ZGUgPFdlYkNvcmUvUmVzb3VyY2VIYW5kbGUuaD4KLSNpbmNs
dWRlIDxXZWJDb3JlL1Jlc291cmNlTG9hZFNjaGVkdWxlci5oPgogI2luY2x1ZGUgPFdlYkNvcmUv
U2NyaXB0Q29udHJvbGxlci5oPgogI2luY2x1ZGUgPFdlYkNvcmUvU2VjdXJpdHlPcmlnaW4uaD4K
ICNpbmNsdWRlIDxXZWJDb3JlL1NlY3VyaXR5UG9saWN5Lmg+CkluZGV4OiBTb3VyY2UvV2ViS2l0
Mi9XZWJQcm9jZXNzL05ldHdvcmsvV2ViUmVzb3VyY2VMb2FkU2NoZWR1bGVyLmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL05ldHdvcmsvV2ViUmVzb3VyY2VMb2Fk
U2NoZWR1bGVyLmNwcAkocmV2aXNpb24gMTkyODgwKQorKysgU291cmNlL1dlYktpdDIvV2ViUHJv
Y2Vzcy9OZXR3b3JrL1dlYlJlc291cmNlTG9hZFNjaGVkdWxlci5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTI2LDYgKzI2LDcgQEAKICNpbmNsdWRlICJjb25maWcuaCIKICNpbmNsdWRlICJXZWJSZXNv
dXJjZUxvYWRTY2hlZHVsZXIuaCIKIAorI2luY2x1ZGUgIkhhbmdEZXRlY3Rpb25EaXNhYmxlci5o
IgogI2luY2x1ZGUgIkxvZ2dpbmcuaCIKICNpbmNsdWRlICJOZXR3b3JrQ29ubmVjdGlvblRvV2Vi
UHJvY2Vzc01lc3NhZ2VzLmgiCiAjaW5jbHVkZSAiTmV0d29ya1Byb2Nlc3NDb25uZWN0aW9uLmgi
CkBAIC0zNSw2ICszNiw3IEBACiAjaW5jbHVkZSAiV2ViRXJyb3JzLmgiCiAjaW5jbHVkZSAiV2Vi
RnJhbWUuaCIKICNpbmNsdWRlICJXZWJGcmFtZUxvYWRlckNsaWVudC5oIgorI2luY2x1ZGUgIldl
YkZyYW1lTmV0d29ya2luZ0NvbnRleHQuaCIKICNpbmNsdWRlICJXZWJQYWdlLmgiCiAjaW5jbHVk
ZSAiV2ViUHJvY2Vzcy5oIgogI2luY2x1ZGUgIldlYlJlc291cmNlTG9hZGVyLmgiCkBAIC00NSw2
ICs0Nyw3IEBACiAjaW5jbHVkZSA8V2ViQ29yZS9GcmFtZS5oPgogI2luY2x1ZGUgPFdlYkNvcmUv
RnJhbWVMb2FkZXIuaD4KICNpbmNsdWRlIDxXZWJDb3JlL05ldHNjYXBlUGx1Z0luU3RyZWFtTG9h
ZGVyLmg+CisjaW5jbHVkZSA8V2ViQ29yZS9QbGF0Zm9ybVN0cmF0ZWdpZXMuaD4KICNpbmNsdWRl
IDxXZWJDb3JlL1JlZmVycmVyUG9saWN5Lmg+CiAjaW5jbHVkZSA8V2ViQ29yZS9SZXNvdXJjZUxv
YWRlci5oPgogI2luY2x1ZGUgPFdlYkNvcmUvU2Vzc2lvbklELmg+CkBAIC02NSw3ICs2OCw3IEBA
IFdlYlJlc291cmNlTG9hZFNjaGVkdWxlcjo6fldlYlJlc291cmNlTG8KIHsKIH0KIAotUmVmUHRy
PFN1YnJlc291cmNlTG9hZGVyPiBXZWJSZXNvdXJjZUxvYWRTY2hlZHVsZXI6OnNjaGVkdWxlU3Vi
cmVzb3VyY2VMb2FkKEZyYW1lKiBmcmFtZSwgQ2FjaGVkUmVzb3VyY2UqIHJlc291cmNlLCBjb25z
dCBSZXNvdXJjZVJlcXVlc3QmIHJlcXVlc3QsIGNvbnN0IFJlc291cmNlTG9hZGVyT3B0aW9ucyYg
b3B0aW9ucykKK1JlZlB0cjxTdWJyZXNvdXJjZUxvYWRlcj4gV2ViUmVzb3VyY2VMb2FkU2NoZWR1
bGVyOjpsb2FkUmVzb3VyY2UoRnJhbWUqIGZyYW1lLCBDYWNoZWRSZXNvdXJjZSogcmVzb3VyY2Us
IGNvbnN0IFJlc291cmNlUmVxdWVzdCYgcmVxdWVzdCwgY29uc3QgUmVzb3VyY2VMb2FkZXJPcHRp
b25zJiBvcHRpb25zKQogewogICAgIFJlZlB0cjxTdWJyZXNvdXJjZUxvYWRlcj4gbG9hZGVyID0g
U3VicmVzb3VyY2VMb2FkZXI6OmNyZWF0ZShmcmFtZSwgcmVzb3VyY2UsIHJlcXVlc3QsIG9wdGlv
bnMpOwogICAgIGlmIChsb2FkZXIpCkBAIC0yNjksMTEgKzI3Miw2IEBAIHZvaWQgV2ViUmVzb3Vy
Y2VMb2FkU2NoZWR1bGVyOjpyZXN1bWVQZW4KICAgICAvLyBOZXR3b3JrIHByb2Nlc3MgZG9lcyBr
ZWVwIHJlcXVlc3RzIGluIHBlbmRpbmcgc3RhdGUuCiB9CiAKLXZvaWQgV2ViUmVzb3VyY2VMb2Fk
U2NoZWR1bGVyOjpzZXRTZXJpYWxMb2FkaW5nRW5hYmxlZChib29sKQotewotICAgIC8vIE5ldHdv
cmsgcHJvY2VzcyBkb2VzIG5vdCByZW9yZGVyIGxvYWRzLgotfQotCiB2b2lkIFdlYlJlc291cmNl
TG9hZFNjaGVkdWxlcjo6bmV0d29ya1Byb2Nlc3NDcmFzaGVkKCkKIHsKICAgICBIYXNoTWFwPHVu
c2lnbmVkIGxvbmcsIFJlZlB0cjxXZWJSZXNvdXJjZUxvYWRlcj4+OjppdGVyYXRvciBlbmQgPSBt
X3dlYlJlc291cmNlTG9hZGVycy5lbmQoKTsKQEAgLTI4Myw0ICsyODEsNTcgQEAgdm9pZCBXZWJS
ZXNvdXJjZUxvYWRTY2hlZHVsZXI6Om5ldHdvcmtQcgogICAgIG1fd2ViUmVzb3VyY2VMb2FkZXJz
LmNsZWFyKCk7CiB9CiAKK3ZvaWQgV2ViUmVzb3VyY2VMb2FkU2NoZWR1bGVyOjpsb2FkUmVzb3Vy
Y2VTeW5jaHJvbm91c2x5KE5ldHdvcmtpbmdDb250ZXh0KiBjb250ZXh0LCB1bnNpZ25lZCBsb25n
IHJlc291cmNlTG9hZElkZW50aWZpZXIsIGNvbnN0IFJlc291cmNlUmVxdWVzdCYgcmVxdWVzdCwg
U3RvcmVkQ3JlZGVudGlhbHMgc3RvcmVkQ3JlZGVudGlhbHMsIENsaWVudENyZWRlbnRpYWxQb2xp
Y3kgY2xpZW50Q3JlZGVudGlhbFBvbGljeSwgUmVzb3VyY2VFcnJvciYgZXJyb3IsIFJlc291cmNl
UmVzcG9uc2UmIHJlc3BvbnNlLCBWZWN0b3I8Y2hhcj4mIGRhdGEpCit7CisgICAgV2ViRnJhbWVO
ZXR3b3JraW5nQ29udGV4dCogd2ViQ29udGV4dCA9IHN0YXRpY19jYXN0PFdlYkZyYW1lTmV0d29y
a2luZ0NvbnRleHQqPihjb250ZXh0KTsKKyAgICAvLyBGSVhNRTogU29tZSBlbnRpdGllcyBpbiBX
ZWJDb3JlIHVzZSBXZWJDb3JlJ3MgIkVtcHR5RnJhbWVMb2FkZXJDbGllbnQiIGluc3RlYWQgb2Yg
aGF2aW5nIGEgcHJvcGVyIFdlYkZyYW1lTG9hZGVyQ2xpZW50LgorICAgIC8vIEVtcHR5RnJhbWVM
b2FkZXJDbGllbnQgc2hvdWxkbid0IGV4aXN0IGFuZCBldmVyeXRoaW5nIHNob3VsZCBiZSB1c2lu
ZyBhIFdlYkZyYW1lTG9hZGVyQ2xpZW50LAorICAgIC8vIGJ1dCBpbiB0aGUgbWVhbnRpbWUgd2Ug
aGF2ZSB0byBtYWtlIHN1cmUgbm90IHRvIG1pcy1jYXN0LgorICAgIFdlYkZyYW1lTG9hZGVyQ2xp
ZW50KiB3ZWJGcmFtZUxvYWRlckNsaWVudCA9IHdlYkNvbnRleHQtPndlYkZyYW1lTG9hZGVyQ2xp
ZW50KCk7CisgICAgV2ViRnJhbWUqIHdlYkZyYW1lID0gd2ViRnJhbWVMb2FkZXJDbGllbnQgPyB3
ZWJGcmFtZUxvYWRlckNsaWVudC0+d2ViRnJhbWUoKSA6IDA7CisgICAgV2ViUGFnZSogd2ViUGFn
ZSA9IHdlYkZyYW1lID8gd2ViRnJhbWUtPnBhZ2UoKSA6IDA7CisKKyAgICBOZXR3b3JrUmVzb3Vy
Y2VMb2FkUGFyYW1ldGVycyBsb2FkUGFyYW1ldGVyczsKKyAgICBsb2FkUGFyYW1ldGVycy5pZGVu
dGlmaWVyID0gcmVzb3VyY2VMb2FkSWRlbnRpZmllcjsKKyAgICBsb2FkUGFyYW1ldGVycy53ZWJQ
YWdlSUQgPSB3ZWJQYWdlID8gd2ViUGFnZS0+cGFnZUlEKCkgOiAwOworICAgIGxvYWRQYXJhbWV0
ZXJzLndlYkZyYW1lSUQgPSB3ZWJGcmFtZSA/IHdlYkZyYW1lLT5mcmFtZUlEKCkgOiAwOworICAg
IGxvYWRQYXJhbWV0ZXJzLnNlc3Npb25JRCA9IHdlYlBhZ2UgPyB3ZWJQYWdlLT5zZXNzaW9uSUQo
KSA6IFNlc3Npb25JRDo6ZGVmYXVsdFNlc3Npb25JRCgpOworICAgIGxvYWRQYXJhbWV0ZXJzLnJl
cXVlc3QgPSByZXF1ZXN0OworICAgIGxvYWRQYXJhbWV0ZXJzLmNvbnRlbnRTbmlmZmluZ1BvbGlj
eSA9IFNuaWZmQ29udGVudDsKKyAgICBsb2FkUGFyYW1ldGVycy5hbGxvd1N0b3JlZENyZWRlbnRp
YWxzID0gc3RvcmVkQ3JlZGVudGlhbHM7CisgICAgbG9hZFBhcmFtZXRlcnMuY2xpZW50Q3JlZGVu
dGlhbFBvbGljeSA9IGNsaWVudENyZWRlbnRpYWxQb2xpY3k7CisgICAgbG9hZFBhcmFtZXRlcnMu
c2hvdWxkQ2xlYXJSZWZlcnJlck9uSFRUUFNUb0hUVFBSZWRpcmVjdCA9IGNvbnRleHQtPnNob3Vs
ZENsZWFyUmVmZXJyZXJPbkhUVFBTVG9IVFRQUmVkaXJlY3QoKTsKKworICAgIGRhdGEucmVzaXpl
KDApOworCisgICAgSGFuZ0RldGVjdGlvbkRpc2FibGVyIGhhbmdEZXRlY3Rpb25EaXNhYmxlcjsK
KworICAgIGlmICghV2ViUHJvY2Vzczo6c2luZ2xldG9uKCkubmV0d29ya0Nvbm5lY3Rpb24oKS0+
Y29ubmVjdGlvbigpLT5zZW5kU3luYyhNZXNzYWdlczo6TmV0d29ya0Nvbm5lY3Rpb25Ub1dlYlBy
b2Nlc3M6OlBlcmZvcm1TeW5jaHJvbm91c0xvYWQobG9hZFBhcmFtZXRlcnMpLCBNZXNzYWdlczo6
TmV0d29ya0Nvbm5lY3Rpb25Ub1dlYlByb2Nlc3M6OlBlcmZvcm1TeW5jaHJvbm91c0xvYWQ6OlJl
cGx5KGVycm9yLCByZXNwb25zZSwgZGF0YSksIDApKSB7CisgICAgICAgIHJlc3BvbnNlID0gUmVz
b3VyY2VSZXNwb25zZSgpOworICAgICAgICBlcnJvciA9IGludGVybmFsRXJyb3IocmVxdWVzdC51
cmwoKSk7CisgICAgfQorfQorCit2b2lkIFdlYlJlc291cmNlTG9hZFNjaGVkdWxlcjo6Y3JlYXRl
UGluZ0hhbmRsZShOZXR3b3JraW5nQ29udGV4dCogbmV0d29ya2luZ0NvbnRleHQsIFJlc291cmNl
UmVxdWVzdCYgcmVxdWVzdCwgYm9vbCBzaG91bGRVc2VDcmVkZW50aWFsU3RvcmFnZSkKK3sKKyAg
ICAvLyBJdCdzIHBvc3NpYmxlIHRoYXQgY2FsbCB0byBjcmVhdGVQaW5nSGFuZGxlIG1pZ2h0IGJl
IG1hZGUgZHVyaW5nIGluaXRpYWwgZW1wdHkgRG9jdW1lbnQgY3JlYXRpb24gYmVmb3JlIGEgTmV0
d29ya2luZ0NvbnRleHQgZXhpc3RzLgorICAgIC8vIEl0IGlzIG5vdCBjbGVhciB0aGF0IHdlIHNo
b3VsZCBzZW5kIHBpbmcgbG9hZHMgZHVyaW5nIHRoYXQgcHJvY2VzcyBhbnl3YXlzLgorICAgIGlm
ICghbmV0d29ya2luZ0NvbnRleHQpCisgICAgICAgIHJldHVybjsKKworICAgIFdlYkZyYW1lTmV0
d29ya2luZ0NvbnRleHQqIHdlYkNvbnRleHQgPSBzdGF0aWNfY2FzdDxXZWJGcmFtZU5ldHdvcmtp
bmdDb250ZXh0Kj4obmV0d29ya2luZ0NvbnRleHQpOworICAgIFdlYkZyYW1lTG9hZGVyQ2xpZW50
KiB3ZWJGcmFtZUxvYWRlckNsaWVudCA9IHdlYkNvbnRleHQtPndlYkZyYW1lTG9hZGVyQ2xpZW50
KCk7CisgICAgV2ViRnJhbWUqIHdlYkZyYW1lID0gd2ViRnJhbWVMb2FkZXJDbGllbnQgPyB3ZWJG
cmFtZUxvYWRlckNsaWVudC0+d2ViRnJhbWUoKSA6IG51bGxwdHI7CisgICAgV2ViUGFnZSogd2Vi
UGFnZSA9IHdlYkZyYW1lID8gd2ViRnJhbWUtPnBhZ2UoKSA6IG51bGxwdHI7CisgICAgCisgICAg
TmV0d29ya1Jlc291cmNlTG9hZFBhcmFtZXRlcnMgbG9hZFBhcmFtZXRlcnM7CisgICAgbG9hZFBh
cmFtZXRlcnMucmVxdWVzdCA9IHJlcXVlc3Q7CisgICAgbG9hZFBhcmFtZXRlcnMuc2Vzc2lvbklE
ID0gd2ViUGFnZSA/IHdlYlBhZ2UtPnNlc3Npb25JRCgpIDogU2Vzc2lvbklEOjpkZWZhdWx0U2Vz
c2lvbklEKCk7CisgICAgbG9hZFBhcmFtZXRlcnMuYWxsb3dTdG9yZWRDcmVkZW50aWFscyA9IHNo
b3VsZFVzZUNyZWRlbnRpYWxTdG9yYWdlID8gQWxsb3dTdG9yZWRDcmVkZW50aWFscyA6IERvTm90
QWxsb3dTdG9yZWRDcmVkZW50aWFsczsKKyAgICBsb2FkUGFyYW1ldGVycy5zaG91bGRDbGVhclJl
ZmVycmVyT25IVFRQU1RvSFRUUFJlZGlyZWN0ID0gbmV0d29ya2luZ0NvbnRleHQtPnNob3VsZENs
ZWFyUmVmZXJyZXJPbkhUVFBTVG9IVFRQUmVkaXJlY3QoKTsKKworICAgIFdlYlByb2Nlc3M6OnNp
bmdsZXRvbigpLm5ldHdvcmtDb25uZWN0aW9uKCktPmNvbm5lY3Rpb24oKS0+c2VuZChNZXNzYWdl
czo6TmV0d29ya0Nvbm5lY3Rpb25Ub1dlYlByb2Nlc3M6OkxvYWRQaW5nKGxvYWRQYXJhbWV0ZXJz
KSwgMCk7Cit9CisKKwogfSAvLyBuYW1lc3BhY2UgV2ViS2l0CkluZGV4OiBTb3VyY2UvV2ViS2l0
Mi9XZWJQcm9jZXNzL05ldHdvcmsvV2ViUmVzb3VyY2VMb2FkU2NoZWR1bGVyLmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9OZXR3b3JrL1dlYlJlc291cmNlTG9hZFNj
aGVkdWxlci5oCShyZXZpc2lvbiAxOTI4ODApCisrKyBTb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNz
L05ldHdvcmsvV2ViUmVzb3VyY2VMb2FkU2NoZWR1bGVyLmgJKHdvcmtpbmcgY29weSkKQEAgLTI3
LDI1ICsyNywyNiBAQAogI2RlZmluZSBXZWJSZXNvdXJjZUxvYWRTY2hlZHVsZXJfaAogCiAjaW5j
bHVkZSAiV2ViUmVzb3VyY2VMb2FkZXIuaCIKLSNpbmNsdWRlIDxXZWJDb3JlL1Jlc291cmNlTG9h
ZFByaW9yaXR5Lmg+Ci0jaW5jbHVkZSA8V2ViQ29yZS9SZXNvdXJjZUxvYWRTY2hlZHVsZXIuaD4K
KyNpbmNsdWRlIDxXZWJDb3JlL0xvYWRlclN0cmF0ZWd5Lmg+CiAjaW5jbHVkZSA8V2ViQ29yZS9S
ZXNvdXJjZUxvYWRlci5oPgorI2luY2x1ZGUgPHd0Zi9IYXNoU2V0Lmg+CiAjaW5jbHVkZSA8d3Rm
L1J1bkxvb3AuaD4KIAogbmFtZXNwYWNlIFdlYktpdCB7CiAKIGNsYXNzIE5ldHdvcmtQcm9jZXNz
Q29ubmVjdGlvbjsKK2NsYXNzIFdlYlJlc291cmNlTG9hZFNjaGVkdWxlcjsKIHR5cGVkZWYgdWlu
dDY0X3QgUmVzb3VyY2VMb2FkSWRlbnRpZmllcjsKIAotY2xhc3MgV2ViUmVzb3VyY2VMb2FkU2No
ZWR1bGVyIDogcHVibGljIFdlYkNvcmU6OlJlc291cmNlTG9hZFNjaGVkdWxlciB7CitjbGFzcyBX
ZWJSZXNvdXJjZUxvYWRTY2hlZHVsZXIgOiBwdWJsaWMgV2ViQ29yZTo6TG9hZGVyU3RyYXRlZ3kg
ewogICAgIFdURl9NQUtFX05PTkNPUFlBQkxFKFdlYlJlc291cmNlTG9hZFNjaGVkdWxlcik7IFdU
Rl9NQUtFX0ZBU1RfQUxMT0NBVEVEOwogcHVibGljOgogICAgIFdlYlJlc291cmNlTG9hZFNjaGVk
dWxlcigpOwogICAgIHZpcnR1YWwgfldlYlJlc291cmNlTG9hZFNjaGVkdWxlcigpOwogICAgIAot
ICAgIHZpcnR1YWwgUmVmUHRyPFdlYkNvcmU6OlN1YnJlc291cmNlTG9hZGVyPiBzY2hlZHVsZVN1
YnJlc291cmNlTG9hZChXZWJDb3JlOjpGcmFtZSosIFdlYkNvcmU6OkNhY2hlZFJlc291cmNlKiwg
Y29uc3QgV2ViQ29yZTo6UmVzb3VyY2VSZXF1ZXN0JiwgY29uc3QgV2ViQ29yZTo6UmVzb3VyY2VM
b2FkZXJPcHRpb25zJikgb3ZlcnJpZGU7Ci0gICAgdmlydHVhbCBSZWZQdHI8V2ViQ29yZTo6TmV0
c2NhcGVQbHVnSW5TdHJlYW1Mb2FkZXI+IHNjaGVkdWxlUGx1Z2luU3RyZWFtTG9hZChXZWJDb3Jl
OjpGcmFtZSosIFdlYkNvcmU6Ok5ldHNjYXBlUGx1Z0luU3RyZWFtTG9hZGVyQ2xpZW50KiwgY29u
c3QgV2ViQ29yZTo6UmVzb3VyY2VSZXF1ZXN0Jikgb3ZlcnJpZGU7Ci0gICAgCisgICAgdmlydHVh
bCBSZWZQdHI8V2ViQ29yZTo6U3VicmVzb3VyY2VMb2FkZXI+IGxvYWRSZXNvdXJjZShXZWJDb3Jl
OjpGcmFtZSosIFdlYkNvcmU6OkNhY2hlZFJlc291cmNlKiwgY29uc3QgV2ViQ29yZTo6UmVzb3Vy
Y2VSZXF1ZXN0JiwgY29uc3QgV2ViQ29yZTo6UmVzb3VyY2VMb2FkZXJPcHRpb25zJikgb3ZlcnJp
ZGU7CisgICAgdmlydHVhbCB2b2lkIGxvYWRSZXNvdXJjZVN5bmNocm9ub3VzbHkoV2ViQ29yZTo6
TmV0d29ya2luZ0NvbnRleHQqLCB1bnNpZ25lZCBsb25nIHJlc291cmNlTG9hZElkZW50aWZpZXIs
IGNvbnN0IFdlYkNvcmU6OlJlc291cmNlUmVxdWVzdCYsIFdlYkNvcmU6OlN0b3JlZENyZWRlbnRp
YWxzLCBXZWJDb3JlOjpDbGllbnRDcmVkZW50aWFsUG9saWN5LCBXZWJDb3JlOjpSZXNvdXJjZUVy
cm9yJiwgV2ViQ29yZTo6UmVzb3VyY2VSZXNwb25zZSYsIFZlY3RvcjxjaGFyPiYgZGF0YSkgb3Zl
cnJpZGU7CisKICAgICB2aXJ0dWFsIHZvaWQgcmVtb3ZlKFdlYkNvcmU6OlJlc291cmNlTG9hZGVy
Kikgb3ZlcnJpZGU7CiAgICAgdmlydHVhbCB2b2lkIHNldERlZmVyc0xvYWRpbmcoV2ViQ29yZTo6
UmVzb3VyY2VMb2FkZXIqLCBib29sKSBvdmVycmlkZTsKICAgICB2aXJ0dWFsIHZvaWQgY3Jvc3NP
cmlnaW5SZWRpcmVjdFJlY2VpdmVkKFdlYkNvcmU6OlJlc291cmNlTG9hZGVyKiwgY29uc3QgV2Vi
Q29yZTo6VVJMJiByZWRpcmVjdFVSTCkgb3ZlcnJpZGU7CkBAIC01NSw5ICs1NiwxMCBAQCBwdWJs
aWM6CiAgICAgdmlydHVhbCB2b2lkIHN1c3BlbmRQZW5kaW5nUmVxdWVzdHMoKSBvdmVycmlkZTsK
ICAgICB2aXJ0dWFsIHZvaWQgcmVzdW1lUGVuZGluZ1JlcXVlc3RzKCkgb3ZlcnJpZGU7CiAKLSAg
ICB2aXJ0dWFsIHZvaWQgc2V0U2VyaWFsTG9hZGluZ0VuYWJsZWQoYm9vbCkgb3ZlcnJpZGU7Cisg
ICAgdmlydHVhbCB2b2lkIGNyZWF0ZVBpbmdIYW5kbGUoV2ViQ29yZTo6TmV0d29ya2luZ0NvbnRl
eHQqLCBXZWJDb3JlOjpSZXNvdXJjZVJlcXVlc3QmLCBib29sIHNob3VsZFVzZUNyZWRlbnRpYWxT
dG9yYWdlKSBvdmVycmlkZTsKIAogICAgIFdlYlJlc291cmNlTG9hZGVyKiB3ZWJSZXNvdXJjZUxv
YWRlckZvcklkZW50aWZpZXIoUmVzb3VyY2VMb2FkSWRlbnRpZmllciBpZGVudGlmaWVyKSBjb25z
dCB7IHJldHVybiBtX3dlYlJlc291cmNlTG9hZGVycy5nZXQoaWRlbnRpZmllcik7IH0KKyAgICBS
ZWZQdHI8V2ViQ29yZTo6TmV0c2NhcGVQbHVnSW5TdHJlYW1Mb2FkZXI+IHNjaGVkdWxlUGx1Z2lu
U3RyZWFtTG9hZChXZWJDb3JlOjpGcmFtZSosIFdlYkNvcmU6Ok5ldHNjYXBlUGx1Z0luU3RyZWFt
TG9hZGVyQ2xpZW50KiwgY29uc3QgV2ViQ29yZTo6UmVzb3VyY2VSZXF1ZXN0Jik7CiAKICAgICB2
b2lkIG5ldHdvcmtQcm9jZXNzQ3Jhc2hlZCgpOwogCkluZGV4OiBTb3VyY2UvV2ViS2l0Mi9XZWJQ
cm9jZXNzL1BsdWdpbnMvUGx1Z2luVmlldy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktp
dDIvV2ViUHJvY2Vzcy9QbHVnaW5zL1BsdWdpblZpZXcuY3BwCShyZXZpc2lvbiAxOTI4ODApCisr
KyBTb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1BsdWdpbnMvUGx1Z2luVmlldy5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTM0LDYgKzM0LDcgQEAKICNpbmNsdWRlICJXZWJQYWdlLmgiCiAjaW5jbHVk
ZSAiV2ViUGFnZVByb3h5TWVzc2FnZXMuaCIKICNpbmNsdWRlICJXZWJQcm9jZXNzLmgiCisjaW5j
bHVkZSAiV2ViUmVzb3VyY2VMb2FkU2NoZWR1bGVyLmgiCiAjaW5jbHVkZSA8V2ViQ29yZS9CaXRt
YXBJbWFnZS5oPgogI2luY2x1ZGUgPFdlYkNvcmUvQ2hyb21lLmg+CiAjaW5jbHVkZSA8V2ViQ29y
ZS9Db29raWVKYXIuaD4KQEAgLTYyLDcgKzYzLDYgQEAKICNpbmNsdWRlIDxXZWJDb3JlL1Byb3Rl
Y3Rpb25TcGFjZS5oPgogI2luY2x1ZGUgPFdlYkNvcmUvUHJveHlTZXJ2ZXIuaD4KICNpbmNsdWRl
IDxXZWJDb3JlL1JlbmRlckVtYmVkZGVkT2JqZWN0Lmg+Ci0jaW5jbHVkZSA8V2ViQ29yZS9SZXNv
dXJjZUxvYWRTY2hlZHVsZXIuaD4KICNpbmNsdWRlIDxXZWJDb3JlL1NjcmlwdENvbnRyb2xsZXIu
aD4KICNpbmNsdWRlIDxXZWJDb3JlL1Njcm9sbFZpZXcuaD4KICNpbmNsdWRlIDxXZWJDb3JlL1Nl
Y3VyaXR5T3JpZ2luLmg+CkBAIC0xNjAsNyArMTYwLDcgQEAgdm9pZCBQbHVnaW5WaWV3OjpTdHJl
YW06OnN0YXJ0KCkKICAgICBGcmFtZSogZnJhbWUgPSBtX3BsdWdpblZpZXctPm1fcGx1Z2luRWxl
bWVudC0+ZG9jdW1lbnQoKS5mcmFtZSgpOwogICAgIEFTU0VSVChmcmFtZSk7CiAKLSAgICBtX2xv
YWRlciA9IHJlc291cmNlTG9hZFNjaGVkdWxlcigpLT5zY2hlZHVsZVBsdWdpblN0cmVhbUxvYWQo
ZnJhbWUsIHRoaXMsIG1fcmVxdWVzdCk7CisgICAgbV9sb2FkZXIgPSBXZWJQcm9jZXNzOjpzaW5n
bGV0b24oKS53ZWJSZXNvdXJjZUxvYWRTY2hlZHVsZXIoKS5zY2hlZHVsZVBsdWdpblN0cmVhbUxv
YWQoZnJhbWUsIHRoaXMsIG1fcmVxdWVzdCk7CiB9CiAKIHZvaWQgUGx1Z2luVmlldzo6U3RyZWFt
OjpjYW5jZWwoKQpJbmRleDogU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJDb3JlU3VwcG9y
dC9XZWJQbGF0Zm9ybVN0cmF0ZWdpZXMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQy
L1dlYlByb2Nlc3MvV2ViQ29yZVN1cHBvcnQvV2ViUGxhdGZvcm1TdHJhdGVnaWVzLmNwcAkocmV2
aXNpb24gMTkyODgwKQorKysgU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJDb3JlU3VwcG9y
dC9XZWJQbGF0Zm9ybVN0cmF0ZWdpZXMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00MCw3ICs0MCw2
IEBACiAjaW5jbHVkZSAiV2ViRXJyb3JzLmgiCiAjaW5jbHVkZSAiV2ViRnJhbWUuaCIKICNpbmNs
dWRlICJXZWJGcmFtZUxvYWRlckNsaWVudC5oIgotI2luY2x1ZGUgIldlYkZyYW1lTmV0d29ya2lu
Z0NvbnRleHQuaCIKICNpbmNsdWRlICJXZWJJREJGYWN0b3J5QmFja2VuZC5oIgogI2luY2x1ZGUg
IldlYlBhZ2UuaCIKICNpbmNsdWRlICJXZWJQYXN0ZWJvYXJkT3ZlcnJpZGVzLmgiCkBAIC05Miw3
ICs5MSw3IEBAIENvb2tpZXNTdHJhdGVneSogV2ViUGxhdGZvcm1TdHJhdGVnaWVzOjoKIAogTG9h
ZGVyU3RyYXRlZ3kqIFdlYlBsYXRmb3JtU3RyYXRlZ2llczo6Y3JlYXRlTG9hZGVyU3RyYXRlZ3ko
KQogewotICAgIHJldHVybiB0aGlzOworICAgIHJldHVybiAmV2ViUHJvY2Vzczo6c2luZ2xldG9u
KCkud2ViUmVzb3VyY2VMb2FkU2NoZWR1bGVyKCk7CiB9CiAKIFBhc3RlYm9hcmRTdHJhdGVneSog
V2ViUGxhdGZvcm1TdHJhdGVnaWVzOjpjcmVhdGVQYXN0ZWJvYXJkU3RyYXRlZ3koKQpAQCAtMTA1
LDYgKzEwNCwxMSBAQCBQbHVnaW5TdHJhdGVneSogV2ViUGxhdGZvcm1TdHJhdGVnaWVzOjpjCiAg
ICAgcmV0dXJuIHRoaXM7CiB9CiAKK0Jsb2JSZWdpc3RyeSogV2ViUGxhdGZvcm1TdHJhdGVnaWVz
OjpjcmVhdGVCbG9iUmVnaXN0cnkoKQoreworICAgIHJldHVybiBuZXcgQmxvYlJlZ2lzdHJ5UHJv
eHk7Cit9CisKIC8vIENvb2tpZXNTdHJhdGVneQogCiBTdHJpbmcgV2ViUGxhdGZvcm1TdHJhdGVn
aWVzOjpjb29raWVzRm9yRE9NKGNvbnN0IE5ldHdvcmtTdG9yYWdlU2Vzc2lvbiYgc2Vzc2lvbiwg
Y29uc3QgVVJMJiBmaXJzdFBhcnR5LCBjb25zdCBVUkwmIHVybCkKQEAgLTE0OCw3MCArMTUyLDYg
QEAgdm9pZCBXZWJQbGF0Zm9ybVN0cmF0ZWdpZXM6OmRlbGV0ZUNvb2tpZQogICAgIFdlYlByb2Nl
c3M6OnNpbmdsZXRvbigpLm5ldHdvcmtDb25uZWN0aW9uKCktPmNvbm5lY3Rpb24oKS0+c2VuZChN
ZXNzYWdlczo6TmV0d29ya0Nvbm5lY3Rpb25Ub1dlYlByb2Nlc3M6OkRlbGV0ZUNvb2tpZShTZXNz
aW9uVHJhY2tlcjo6c2Vzc2lvbklEKHNlc3Npb24pLCB1cmwsIGNvb2tpZU5hbWUpLCAwKTsKIH0K
IAotLy8gTG9hZGVyU3RyYXRlZ3kKLQotUmVzb3VyY2VMb2FkU2NoZWR1bGVyKiBXZWJQbGF0Zm9y
bVN0cmF0ZWdpZXM6OnJlc291cmNlTG9hZFNjaGVkdWxlcigpCi17Ci0gICAgcmV0dXJuICZXZWJQ
cm9jZXNzOjpzaW5nbGV0b24oKS53ZWJSZXNvdXJjZUxvYWRTY2hlZHVsZXIoKTsKLX0KLQotdm9p
ZCBXZWJQbGF0Zm9ybVN0cmF0ZWdpZXM6OmxvYWRSZXNvdXJjZVN5bmNocm9ub3VzbHkoTmV0d29y
a2luZ0NvbnRleHQqIGNvbnRleHQsIHVuc2lnbmVkIGxvbmcgcmVzb3VyY2VMb2FkSWRlbnRpZmll
ciwgY29uc3QgUmVzb3VyY2VSZXF1ZXN0JiByZXF1ZXN0LCBTdG9yZWRDcmVkZW50aWFscyBzdG9y
ZWRDcmVkZW50aWFscywgQ2xpZW50Q3JlZGVudGlhbFBvbGljeSBjbGllbnRDcmVkZW50aWFsUG9s
aWN5LCBSZXNvdXJjZUVycm9yJiBlcnJvciwgUmVzb3VyY2VSZXNwb25zZSYgcmVzcG9uc2UsIFZl
Y3RvcjxjaGFyPiYgZGF0YSkKLXsKLSAgICBXZWJGcmFtZU5ldHdvcmtpbmdDb250ZXh0KiB3ZWJD
b250ZXh0ID0gc3RhdGljX2Nhc3Q8V2ViRnJhbWVOZXR3b3JraW5nQ29udGV4dCo+KGNvbnRleHQp
OwotICAgIC8vIEZJWE1FOiBTb21lIGVudGl0aWVzIGluIFdlYkNvcmUgdXNlIFdlYkNvcmUncyAi
RW1wdHlGcmFtZUxvYWRlckNsaWVudCIgaW5zdGVhZCBvZiBoYXZpbmcgYSBwcm9wZXIgV2ViRnJh
bWVMb2FkZXJDbGllbnQuCi0gICAgLy8gRW1wdHlGcmFtZUxvYWRlckNsaWVudCBzaG91bGRuJ3Qg
ZXhpc3QgYW5kIGV2ZXJ5dGhpbmcgc2hvdWxkIGJlIHVzaW5nIGEgV2ViRnJhbWVMb2FkZXJDbGll
bnQsCi0gICAgLy8gYnV0IGluIHRoZSBtZWFudGltZSB3ZSBoYXZlIHRvIG1ha2Ugc3VyZSBub3Qg
dG8gbWlzLWNhc3QuCi0gICAgV2ViRnJhbWVMb2FkZXJDbGllbnQqIHdlYkZyYW1lTG9hZGVyQ2xp
ZW50ID0gd2ViQ29udGV4dC0+d2ViRnJhbWVMb2FkZXJDbGllbnQoKTsKLSAgICBXZWJGcmFtZSog
d2ViRnJhbWUgPSB3ZWJGcmFtZUxvYWRlckNsaWVudCA/IHdlYkZyYW1lTG9hZGVyQ2xpZW50LT53
ZWJGcmFtZSgpIDogMDsKLSAgICBXZWJQYWdlKiB3ZWJQYWdlID0gd2ViRnJhbWUgPyB3ZWJGcmFt
ZS0+cGFnZSgpIDogMDsKLQotICAgIE5ldHdvcmtSZXNvdXJjZUxvYWRQYXJhbWV0ZXJzIGxvYWRQ
YXJhbWV0ZXJzOwotICAgIGxvYWRQYXJhbWV0ZXJzLmlkZW50aWZpZXIgPSByZXNvdXJjZUxvYWRJ
ZGVudGlmaWVyOwotICAgIGxvYWRQYXJhbWV0ZXJzLndlYlBhZ2VJRCA9IHdlYlBhZ2UgPyB3ZWJQ
YWdlLT5wYWdlSUQoKSA6IDA7Ci0gICAgbG9hZFBhcmFtZXRlcnMud2ViRnJhbWVJRCA9IHdlYkZy
YW1lID8gd2ViRnJhbWUtPmZyYW1lSUQoKSA6IDA7Ci0gICAgbG9hZFBhcmFtZXRlcnMuc2Vzc2lv
bklEID0gd2ViUGFnZSA/IHdlYlBhZ2UtPnNlc3Npb25JRCgpIDogU2Vzc2lvbklEOjpkZWZhdWx0
U2Vzc2lvbklEKCk7Ci0gICAgbG9hZFBhcmFtZXRlcnMucmVxdWVzdCA9IHJlcXVlc3Q7Ci0gICAg
bG9hZFBhcmFtZXRlcnMuY29udGVudFNuaWZmaW5nUG9saWN5ID0gU25pZmZDb250ZW50OwotICAg
IGxvYWRQYXJhbWV0ZXJzLmFsbG93U3RvcmVkQ3JlZGVudGlhbHMgPSBzdG9yZWRDcmVkZW50aWFs
czsKLSAgICBsb2FkUGFyYW1ldGVycy5jbGllbnRDcmVkZW50aWFsUG9saWN5ID0gY2xpZW50Q3Jl
ZGVudGlhbFBvbGljeTsKLSAgICBsb2FkUGFyYW1ldGVycy5zaG91bGRDbGVhclJlZmVycmVyT25I
VFRQU1RvSFRUUFJlZGlyZWN0ID0gY29udGV4dC0+c2hvdWxkQ2xlYXJSZWZlcnJlck9uSFRUUFNU
b0hUVFBSZWRpcmVjdCgpOwotCi0gICAgZGF0YS5yZXNpemUoMCk7Ci0KLSAgICBIYW5nRGV0ZWN0
aW9uRGlzYWJsZXIgaGFuZ0RldGVjdGlvbkRpc2FibGVyOwotCi0gICAgaWYgKCFXZWJQcm9jZXNz
OjpzaW5nbGV0b24oKS5uZXR3b3JrQ29ubmVjdGlvbigpLT5jb25uZWN0aW9uKCktPnNlbmRTeW5j
KE1lc3NhZ2VzOjpOZXR3b3JrQ29ubmVjdGlvblRvV2ViUHJvY2Vzczo6UGVyZm9ybVN5bmNocm9u
b3VzTG9hZChsb2FkUGFyYW1ldGVycyksIE1lc3NhZ2VzOjpOZXR3b3JrQ29ubmVjdGlvblRvV2Vi
UHJvY2Vzczo6UGVyZm9ybVN5bmNocm9ub3VzTG9hZDo6UmVwbHkoZXJyb3IsIHJlc3BvbnNlLCBk
YXRhKSwgMCkpIHsKLSAgICAgICAgcmVzcG9uc2UgPSBSZXNvdXJjZVJlc3BvbnNlKCk7Ci0gICAg
ICAgIGVycm9yID0gaW50ZXJuYWxFcnJvcihyZXF1ZXN0LnVybCgpKTsKLSAgICB9Ci19Ci0KLXZv
aWQgV2ViUGxhdGZvcm1TdHJhdGVnaWVzOjpjcmVhdGVQaW5nSGFuZGxlKE5ldHdvcmtpbmdDb250
ZXh0KiBuZXR3b3JraW5nQ29udGV4dCwgUmVzb3VyY2VSZXF1ZXN0JiByZXF1ZXN0LCBib29sIHNo
b3VsZFVzZUNyZWRlbnRpYWxTdG9yYWdlKQotewotICAgIC8vIEl0J3MgcG9zc2libGUgdGhhdCBj
YWxsIHRvIGNyZWF0ZVBpbmdIYW5kbGUgbWlnaHQgYmUgbWFkZSBkdXJpbmcgaW5pdGlhbCBlbXB0
eSBEb2N1bWVudCBjcmVhdGlvbiBiZWZvcmUgYSBOZXR3b3JraW5nQ29udGV4dCBleGlzdHMuCi0g
ICAgLy8gSXQgaXMgbm90IGNsZWFyIHRoYXQgd2Ugc2hvdWxkIHNlbmQgcGluZyBsb2FkcyBkdXJp
bmcgdGhhdCBwcm9jZXNzIGFueXdheXMuCi0gICAgaWYgKCFuZXR3b3JraW5nQ29udGV4dCkKLSAg
ICAgICAgcmV0dXJuOwotCi0gICAgV2ViRnJhbWVOZXR3b3JraW5nQ29udGV4dCogd2ViQ29udGV4
dCA9IHN0YXRpY19jYXN0PFdlYkZyYW1lTmV0d29ya2luZ0NvbnRleHQqPihuZXR3b3JraW5nQ29u
dGV4dCk7Ci0gICAgV2ViRnJhbWVMb2FkZXJDbGllbnQqIHdlYkZyYW1lTG9hZGVyQ2xpZW50ID0g
d2ViQ29udGV4dC0+d2ViRnJhbWVMb2FkZXJDbGllbnQoKTsKLSAgICBXZWJGcmFtZSogd2ViRnJh
bWUgPSB3ZWJGcmFtZUxvYWRlckNsaWVudCA/IHdlYkZyYW1lTG9hZGVyQ2xpZW50LT53ZWJGcmFt
ZSgpIDogbnVsbHB0cjsKLSAgICBXZWJQYWdlKiB3ZWJQYWdlID0gd2ViRnJhbWUgPyB3ZWJGcmFt
ZS0+cGFnZSgpIDogbnVsbHB0cjsKLSAgICAKLSAgICBOZXR3b3JrUmVzb3VyY2VMb2FkUGFyYW1l
dGVycyBsb2FkUGFyYW1ldGVyczsKLSAgICBsb2FkUGFyYW1ldGVycy5yZXF1ZXN0ID0gcmVxdWVz
dDsKLSAgICBsb2FkUGFyYW1ldGVycy5zZXNzaW9uSUQgPSB3ZWJQYWdlID8gd2ViUGFnZS0+c2Vz
c2lvbklEKCkgOiBTZXNzaW9uSUQ6OmRlZmF1bHRTZXNzaW9uSUQoKTsKLSAgICBsb2FkUGFyYW1l
dGVycy5hbGxvd1N0b3JlZENyZWRlbnRpYWxzID0gc2hvdWxkVXNlQ3JlZGVudGlhbFN0b3JhZ2Ug
PyBBbGxvd1N0b3JlZENyZWRlbnRpYWxzIDogRG9Ob3RBbGxvd1N0b3JlZENyZWRlbnRpYWxzOwot
ICAgIGxvYWRQYXJhbWV0ZXJzLnNob3VsZENsZWFyUmVmZXJyZXJPbkhUVFBTVG9IVFRQUmVkaXJl
Y3QgPSBuZXR3b3JraW5nQ29udGV4dC0+c2hvdWxkQ2xlYXJSZWZlcnJlck9uSFRUUFNUb0hUVFBS
ZWRpcmVjdCgpOwotCi0gICAgV2ViUHJvY2Vzczo6c2luZ2xldG9uKCkubmV0d29ya0Nvbm5lY3Rp
b24oKS0+Y29ubmVjdGlvbigpLT5zZW5kKE1lc3NhZ2VzOjpOZXR3b3JrQ29ubmVjdGlvblRvV2Vi
UHJvY2Vzczo6TG9hZFBpbmcobG9hZFBhcmFtZXRlcnMpLCAwKTsKLX0KLQotQmxvYlJlZ2lzdHJ5
KiBXZWJQbGF0Zm9ybVN0cmF0ZWdpZXM6OmNyZWF0ZUJsb2JSZWdpc3RyeSgpCi17Ci0gICAgcmV0
dXJuIG5ldyBCbG9iUmVnaXN0cnlQcm94eTsKLX0KLQogLy8gUGx1Z2luU3RyYXRlZ3kKIAogdm9p
ZCBXZWJQbGF0Zm9ybVN0cmF0ZWdpZXM6OnJlZnJlc2hQbHVnaW5zKCkKSW5kZXg6IFNvdXJjZS9X
ZWJLaXQyL1dlYlByb2Nlc3MvV2ViQ29yZVN1cHBvcnQvV2ViUGxhdGZvcm1TdHJhdGVnaWVzLmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJDb3JlU3VwcG9ydC9X
ZWJQbGF0Zm9ybVN0cmF0ZWdpZXMuaAkocmV2aXNpb24gMTkyODgwKQorKysgU291cmNlL1dlYktp
dDIvV2ViUHJvY2Vzcy9XZWJDb3JlU3VwcG9ydC9XZWJQbGF0Zm9ybVN0cmF0ZWdpZXMuaAkod29y
a2luZyBjb3B5KQpAQCAtMzYsNyArMzYsNyBAQAogCiBuYW1lc3BhY2UgV2ViS2l0IHsKIAotY2xh
c3MgV2ViUGxhdGZvcm1TdHJhdGVnaWVzIDogcHVibGljIFdlYkNvcmU6OlBsYXRmb3JtU3RyYXRl
Z2llcywgcHJpdmF0ZSBXZWJDb3JlOjpDb29raWVzU3RyYXRlZ3ksIHByaXZhdGUgV2ViQ29yZTo6
TG9hZGVyU3RyYXRlZ3ksIHByaXZhdGUgV2ViQ29yZTo6UGFzdGVib2FyZFN0cmF0ZWd5LCBwcml2
YXRlIFdlYkNvcmU6OlBsdWdpblN0cmF0ZWd5IHsKK2NsYXNzIFdlYlBsYXRmb3JtU3RyYXRlZ2ll
cyA6IHB1YmxpYyBXZWJDb3JlOjpQbGF0Zm9ybVN0cmF0ZWdpZXMsIHByaXZhdGUgV2ViQ29yZTo6
Q29va2llc1N0cmF0ZWd5LCBwcml2YXRlIFdlYkNvcmU6OlBhc3RlYm9hcmRTdHJhdGVneSwgcHJp
dmF0ZSBXZWJDb3JlOjpQbHVnaW5TdHJhdGVneSB7CiAgICAgZnJpZW5kIGNsYXNzIE5ldmVyRGVz
dHJveWVkPFdlYlBsYXRmb3JtU3RyYXRlZ2llcz47CiBwdWJsaWM6CiAgICAgc3RhdGljIHZvaWQg
aW5pdGlhbGl6ZSgpOwpAQCAtNDksNiArNDksNyBAQCBwcml2YXRlOgogICAgIHZpcnR1YWwgV2Vi
Q29yZTo6TG9hZGVyU3RyYXRlZ3kqIGNyZWF0ZUxvYWRlclN0cmF0ZWd5KCkgb3ZlcnJpZGU7CiAg
ICAgdmlydHVhbCBXZWJDb3JlOjpQYXN0ZWJvYXJkU3RyYXRlZ3kqIGNyZWF0ZVBhc3RlYm9hcmRT
dHJhdGVneSgpIG92ZXJyaWRlOwogICAgIHZpcnR1YWwgV2ViQ29yZTo6UGx1Z2luU3RyYXRlZ3kq
IGNyZWF0ZVBsdWdpblN0cmF0ZWd5KCkgb3ZlcnJpZGU7CisgICAgdmlydHVhbCBXZWJDb3JlOjpC
bG9iUmVnaXN0cnkqIGNyZWF0ZUJsb2JSZWdpc3RyeSgpIG92ZXJyaWRlOwogCiAgICAgLy8gV2Vi
Q29yZTo6Q29va2llc1N0cmF0ZWd5CiAgICAgdmlydHVhbCBTdHJpbmcgY29va2llc0ZvckRPTShj
b25zdCBXZWJDb3JlOjpOZXR3b3JrU3RvcmFnZVNlc3Npb24mLCBjb25zdCBXZWJDb3JlOjpVUkwm
IGZpcnN0UGFydHksIGNvbnN0IFdlYkNvcmU6OlVSTCYpIG92ZXJyaWRlOwpAQCAtNTgsMTIgKzU5
LDYgQEAgcHJpdmF0ZToKICAgICB2aXJ0dWFsIGJvb2wgZ2V0UmF3Q29va2llcyhjb25zdCBXZWJD
b3JlOjpOZXR3b3JrU3RvcmFnZVNlc3Npb24mLCBjb25zdCBXZWJDb3JlOjpVUkwmIGZpcnN0UGFy
dHksIGNvbnN0IFdlYkNvcmU6OlVSTCYsIFZlY3RvcjxXZWJDb3JlOjpDb29raWU+Jikgb3ZlcnJp
ZGU7CiAgICAgdmlydHVhbCB2b2lkIGRlbGV0ZUNvb2tpZShjb25zdCBXZWJDb3JlOjpOZXR3b3Jr
U3RvcmFnZVNlc3Npb24mLCBjb25zdCBXZWJDb3JlOjpVUkwmLCBjb25zdCBTdHJpbmcmKSBvdmVy
cmlkZTsKIAotICAgIC8vIFdlYkNvcmU6OkxvYWRlclN0cmF0ZWd5Ci0gICAgdmlydHVhbCBXZWJD
b3JlOjpSZXNvdXJjZUxvYWRTY2hlZHVsZXIqIHJlc291cmNlTG9hZFNjaGVkdWxlcigpIG92ZXJy
aWRlOwotICAgIHZpcnR1YWwgdm9pZCBsb2FkUmVzb3VyY2VTeW5jaHJvbm91c2x5KFdlYkNvcmU6
Ok5ldHdvcmtpbmdDb250ZXh0KiwgdW5zaWduZWQgbG9uZyByZXNvdXJjZUxvYWRJZGVudGlmaWVy
LCBjb25zdCBXZWJDb3JlOjpSZXNvdXJjZVJlcXVlc3QmLCBXZWJDb3JlOjpTdG9yZWRDcmVkZW50
aWFscywgV2ViQ29yZTo6Q2xpZW50Q3JlZGVudGlhbFBvbGljeSwgV2ViQ29yZTo6UmVzb3VyY2VF
cnJvciYsIFdlYkNvcmU6OlJlc291cmNlUmVzcG9uc2UmLCBWZWN0b3I8Y2hhcj4mIGRhdGEpIG92
ZXJyaWRlOwotICAgIHZpcnR1YWwgV2ViQ29yZTo6QmxvYlJlZ2lzdHJ5KiBjcmVhdGVCbG9iUmVn
aXN0cnkoKSBvdmVycmlkZTsKLSAgICB2aXJ0dWFsIHZvaWQgY3JlYXRlUGluZ0hhbmRsZShXZWJD
b3JlOjpOZXR3b3JraW5nQ29udGV4dCosIFdlYkNvcmU6OlJlc291cmNlUmVxdWVzdCYsIGJvb2wg
c2hvdWxkVXNlQ3JlZGVudGlhbFN0b3JhZ2UpIG92ZXJyaWRlOwotCiAgICAgLy8gV2ViQ29yZTo6
UGx1Z2luU3RyYXRlZ3kKICAgICB2aXJ0dWFsIHZvaWQgcmVmcmVzaFBsdWdpbnMoKSBvdmVycmlk
ZTsKICAgICB2aXJ0dWFsIHZvaWQgZ2V0UGx1Z2luSW5mbyhjb25zdCBXZWJDb3JlOjpQYWdlKiwg
VmVjdG9yPFdlYkNvcmU6OlBsdWdpbkluZm8+Jikgb3ZlcnJpZGU7CkluZGV4OiBTb3VyY2UvV2Vi
S2l0L0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L0NoYW5nZUxvZwkocmV2
aXNpb24gMTkyOTQzKQorKysgU291cmNlL1dlYktpdC9DaGFuZ2VMb2cJKHdvcmtpbmcgY29weSkK
QEAgLTEsMyArMSw3MiBAQAorMjAxNS0xMi0wMiAgQW50dGkgS29pdmlzdG8gIDxhbnR0aUBhcHBs
ZS5jb20+CisKKyAgICAgICAgTW92ZSBSZXNvdXJjZUxvYWRTY2hlZHVsZXIgdG8gV2ViS2l0MQor
ICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTUxNzQzCisK
KyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgKiBXZWJDb3Jl
U3VwcG9ydC9XZWJSZXNvdXJjZUxvYWRTY2hlZHVsZXIuY3BwOiBDb3BpZWQgZnJvbSBTb3VyY2Uv
V2ViQ29yZS9sb2FkZXIvUmVzb3VyY2VMb2FkU2NoZWR1bGVyLmNwcC4KKyAgICAgICAgKHdlYlJl
c291cmNlTG9hZFNjaGVkdWxlcik6CisgICAgICAgIChXZWJSZXNvdXJjZUxvYWRTY2hlZHVsZXI6
Omhvc3RGb3JVUkwpOgorICAgICAgICAoV2ViUmVzb3VyY2VMb2FkU2NoZWR1bGVyOjpXZWJSZXNv
dXJjZUxvYWRTY2hlZHVsZXIpOgorICAgICAgICAoV2ViUmVzb3VyY2VMb2FkU2NoZWR1bGVyOjp+
V2ViUmVzb3VyY2VMb2FkU2NoZWR1bGVyKToKKyAgICAgICAgKFdlYlJlc291cmNlTG9hZFNjaGVk
dWxlcjo6c2NoZWR1bGVTdWJyZXNvdXJjZUxvYWQpOgorICAgICAgICAoV2ViUmVzb3VyY2VMb2Fk
U2NoZWR1bGVyOjpsb2FkUmVzb3VyY2VTeW5jaHJvbm91c2x5KToKKyAgICAgICAgKFdlYlJlc291
cmNlTG9hZFNjaGVkdWxlcjo6c2NoZWR1bGVQbHVnaW5TdHJlYW1Mb2FkKToKKyAgICAgICAgKFdl
YlJlc291cmNlTG9hZFNjaGVkdWxlcjo6c2NoZWR1bGVMb2FkKToKKyAgICAgICAgKFdlYlJlc291
cmNlTG9hZFNjaGVkdWxlcjo6cmVtb3ZlKToKKyAgICAgICAgKFdlYlJlc291cmNlTG9hZFNjaGVk
dWxlcjo6c2V0RGVmZXJzTG9hZGluZyk6CisgICAgICAgIChXZWJSZXNvdXJjZUxvYWRTY2hlZHVs
ZXI6OmNyb3NzT3JpZ2luUmVkaXJlY3RSZWNlaXZlZCk6CisgICAgICAgIChXZWJSZXNvdXJjZUxv
YWRTY2hlZHVsZXI6OnNlcnZlUGVuZGluZ1JlcXVlc3RzKToKKyAgICAgICAgKFdlYlJlc291cmNl
TG9hZFNjaGVkdWxlcjo6c3VzcGVuZFBlbmRpbmdSZXF1ZXN0cyk6CisgICAgICAgIChXZWJSZXNv
dXJjZUxvYWRTY2hlZHVsZXI6OnJlc3VtZVBlbmRpbmdSZXF1ZXN0cyk6CisgICAgICAgIChXZWJS
ZXNvdXJjZUxvYWRTY2hlZHVsZXI6OnNjaGVkdWxlU2VydmVQZW5kaW5nUmVxdWVzdHMpOgorICAg
ICAgICAoV2ViUmVzb3VyY2VMb2FkU2NoZWR1bGVyOjpyZXF1ZXN0VGltZXJGaXJlZCk6CisgICAg
ICAgIChXZWJSZXNvdXJjZUxvYWRTY2hlZHVsZXI6Okhvc3RJbmZvcm1hdGlvbjo6SG9zdEluZm9y
bWF0aW9uKToKKyAgICAgICAgKFdlYlJlc291cmNlTG9hZFNjaGVkdWxlcjo6SG9zdEluZm9ybWF0
aW9uOjp+SG9zdEluZm9ybWF0aW9uKToKKyAgICAgICAgKFdlYlJlc291cmNlTG9hZFNjaGVkdWxl
cjo6SG9zdEluZm9ybWF0aW9uOjpwcmlvcml0eVRvSW5kZXgpOgorICAgICAgICAoV2ViUmVzb3Vy
Y2VMb2FkU2NoZWR1bGVyOjpIb3N0SW5mb3JtYXRpb246OnNjaGVkdWxlKToKKyAgICAgICAgKFdl
YlJlc291cmNlTG9hZFNjaGVkdWxlcjo6SG9zdEluZm9ybWF0aW9uOjphZGRMb2FkSW5Qcm9ncmVz
cyk6CisgICAgICAgIChXZWJSZXNvdXJjZUxvYWRTY2hlZHVsZXI6Okhvc3RJbmZvcm1hdGlvbjo6
cmVtb3ZlKToKKyAgICAgICAgKFdlYlJlc291cmNlTG9hZFNjaGVkdWxlcjo6SG9zdEluZm9ybWF0
aW9uOjpoYXNSZXF1ZXN0cyk6CisgICAgICAgIChXZWJSZXNvdXJjZUxvYWRTY2hlZHVsZXI6Okhv
c3RJbmZvcm1hdGlvbjo6bGltaXRSZXF1ZXN0cyk6CisgICAgICAgIChXZWJSZXNvdXJjZUxvYWRT
Y2hlZHVsZXI6OmNyZWF0ZVBpbmdIYW5kbGUpOgorICAgICAgICAoV2ViQ29yZTo6UmVzb3VyY2VM
b2FkU2NoZWR1bGVyOjpob3N0Rm9yVVJMKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OnJl
c291cmNlTG9hZFNjaGVkdWxlcik6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpSZXNvdXJj
ZUxvYWRTY2hlZHVsZXI6OlJlc291cmNlTG9hZFNjaGVkdWxlcik6IERlbGV0ZWQuCisgICAgICAg
IChXZWJDb3JlOjpSZXNvdXJjZUxvYWRTY2hlZHVsZXI6On5SZXNvdXJjZUxvYWRTY2hlZHVsZXIp
OiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6UmVzb3VyY2VMb2FkU2NoZWR1bGVyOjpzY2hl
ZHVsZVN1YnJlc291cmNlTG9hZCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpSZXNvdXJj
ZUxvYWRTY2hlZHVsZXI6OnNjaGVkdWxlUGx1Z2luU3RyZWFtTG9hZCk6IERlbGV0ZWQuCisgICAg
ICAgIChXZWJDb3JlOjpSZXNvdXJjZUxvYWRTY2hlZHVsZXI6OnNjaGVkdWxlTG9hZCk6IERlbGV0
ZWQuCisgICAgICAgIChXZWJDb3JlOjpSZXNvdXJjZUxvYWRTY2hlZHVsZXI6OnJlbW92ZSk6IERl
bGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpSZXNvdXJjZUxvYWRTY2hlZHVsZXI6OnNldERlZmVy
c0xvYWRpbmcpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6UmVzb3VyY2VMb2FkU2NoZWR1
bGVyOjpjcm9zc09yaWdpblJlZGlyZWN0UmVjZWl2ZWQpOiBEZWxldGVkLgorICAgICAgICAoV2Vi
Q29yZTo6UmVzb3VyY2VMb2FkU2NoZWR1bGVyOjpzZXJ2ZVBlbmRpbmdSZXF1ZXN0cyk6IERlbGV0
ZWQuCisgICAgICAgIChXZWJDb3JlOjpSZXNvdXJjZUxvYWRTY2hlZHVsZXI6OnN1c3BlbmRQZW5k
aW5nUmVxdWVzdHMpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6UmVzb3VyY2VMb2FkU2No
ZWR1bGVyOjpyZXN1bWVQZW5kaW5nUmVxdWVzdHMpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29y
ZTo6UmVzb3VyY2VMb2FkU2NoZWR1bGVyOjpzY2hlZHVsZVNlcnZlUGVuZGluZ1JlcXVlc3RzKTog
RGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OlJlc291cmNlTG9hZFNjaGVkdWxlcjo6cmVxdWVz
dFRpbWVyRmlyZWQpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6UmVzb3VyY2VMb2FkU2No
ZWR1bGVyOjpIb3N0SW5mb3JtYXRpb246Okhvc3RJbmZvcm1hdGlvbik6IERlbGV0ZWQuCisgICAg
ICAgIChXZWJDb3JlOjpSZXNvdXJjZUxvYWRTY2hlZHVsZXI6Okhvc3RJbmZvcm1hdGlvbjo6fkhv
c3RJbmZvcm1hdGlvbik6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpSZXNvdXJjZUxvYWRT
Y2hlZHVsZXI6Okhvc3RJbmZvcm1hdGlvbjo6cHJpb3JpdHlUb0luZGV4KTogRGVsZXRlZC4KKyAg
ICAgICAgKFdlYkNvcmU6OlJlc291cmNlTG9hZFNjaGVkdWxlcjo6SG9zdEluZm9ybWF0aW9uOjpz
Y2hlZHVsZSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpSZXNvdXJjZUxvYWRTY2hlZHVs
ZXI6Okhvc3RJbmZvcm1hdGlvbjo6YWRkTG9hZEluUHJvZ3Jlc3MpOiBEZWxldGVkLgorICAgICAg
ICAoV2ViQ29yZTo6UmVzb3VyY2VMb2FkU2NoZWR1bGVyOjpIb3N0SW5mb3JtYXRpb246OnJlbW92
ZSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpSZXNvdXJjZUxvYWRTY2hlZHVsZXI6Okhv
c3RJbmZvcm1hdGlvbjo6aGFzUmVxdWVzdHMpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6
UmVzb3VyY2VMb2FkU2NoZWR1bGVyOjpIb3N0SW5mb3JtYXRpb246OmxpbWl0UmVxdWVzdHMpOiBE
ZWxldGVkLgorICAgICAgICAqIFdlYkNvcmVTdXBwb3J0L1dlYlJlc291cmNlTG9hZFNjaGVkdWxl
ci5oOiBDb3BpZWQgZnJvbSBTb3VyY2UvV2ViQ29yZS9sb2FkZXIvUmVzb3VyY2VMb2FkU2NoZWR1
bGVyLmguCisgICAgICAgIChXZWJSZXNvdXJjZUxvYWRTY2hlZHVsZXI6OmlzU2VyaWFsTG9hZGlu
Z0VuYWJsZWQpOgorICAgICAgICAoV2ViUmVzb3VyY2VMb2FkU2NoZWR1bGVyOjpzZXRTZXJpYWxM
b2FkaW5nRW5hYmxlZCk6CisgICAgICAgIChXZWJSZXNvdXJjZUxvYWRTY2hlZHVsZXI6Okhvc3RJ
bmZvcm1hdGlvbjo6bmFtZSk6CisgICAgICAgIChXZWJSZXNvdXJjZUxvYWRTY2hlZHVsZXI6Okhv
c3RJbmZvcm1hdGlvbjo6cmVxdWVzdHNQZW5kaW5nKToKKyAgICAgICAgKFdlYkNvcmU6OlJlc291
cmNlTG9hZFNjaGVkdWxlcjo6aXNTZXJpYWxMb2FkaW5nRW5hYmxlZCk6IERlbGV0ZWQuCisgICAg
ICAgIChXZWJDb3JlOjpSZXNvdXJjZUxvYWRTY2hlZHVsZXI6OnNldFNlcmlhbExvYWRpbmdFbmFi
bGVkKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OlJlc291cmNlTG9hZFNjaGVkdWxlcjo6
U3VzcGVuZGVyOjpTdXNwZW5kZXIpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6UmVzb3Vy
Y2VMb2FkU2NoZWR1bGVyOjpTdXNwZW5kZXI6On5TdXNwZW5kZXIpOiBEZWxldGVkLgorICAgICAg
ICAoV2ViQ29yZTo6UmVzb3VyY2VMb2FkU2NoZWR1bGVyOjpIb3N0SW5mb3JtYXRpb246Om5hbWUp
OiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6UmVzb3VyY2VMb2FkU2NoZWR1bGVyOjpIb3N0
SW5mb3JtYXRpb246OnJlcXVlc3RzUGVuZGluZyk6IERlbGV0ZWQuCisgICAgICAgICogV2ViS2l0
Lnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2o6CisKIDIwMTUtMTAtMjkgIEFsZXggQ2hyaXN0ZW5z
ZW4gIDxhY2hyaXN0ZW5zZW5Ad2Via2l0Lm9yZz4KIAogICAgICAgICBNYWtlIFdlYkNvcmUgYSBm
cmFtZXdvcmsgaW4gTWFjIENNYWtlIGJ1aWxkCkluZGV4OiBTb3VyY2UvV2ViS2l0L1dlYkNvcmVT
dXBwb3J0L1dlYlJlc291cmNlTG9hZFNjaGVkdWxlci5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1dlYktpdC9XZWJDb3JlU3VwcG9ydC9XZWJSZXNvdXJjZUxvYWRTY2hlZHVsZXIuY3BwCShyZXZp
c2lvbiAxOTI4ODApCShmcm9tIFNvdXJjZS9XZWJDb3JlL2xvYWRlci9SZXNvdXJjZUxvYWRTY2hl
ZHVsZXIuY3BwOjE5Mjg4MCkKKysrIFNvdXJjZS9XZWJLaXQvV2ViQ29yZVN1cHBvcnQvV2ViUmVz
b3VyY2VMb2FkU2NoZWR1bGVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDM5MiBAQAor
LyoKKyAgICBDb3B5cmlnaHQgKEMpIDE5OTggTGFycyBLbm9sbCAoa25vbGxAbXBpLWhkLm1wZy5k
ZSkKKyAgICBDb3B5cmlnaHQgKEMpIDIwMDEgRGlyayBNdWVsbGVyIChtdWVsbGVyQGtkZS5vcmcp
CisgICAgQ29weXJpZ2h0IChDKSAyMDAyIFdhbGRvIEJhc3RpYW4gKGJhc3RpYW5Aa2RlLm9yZykK
KyAgICBDb3B5cmlnaHQgKEMpIDIwMDYgU2FtdWVsIFdlaW5pZyAoc2FtLndlaW5pZ0BnbWFpbC5j
b20pCisgICAgQ29weXJpZ2h0IChDKSAyMDA0LCAyMDA1LCAyMDA2LCAyMDA3LCAyMDA4IEFwcGxl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAgICBDb3B5cmlnaHQgKEMpIDIwMTAgR29vZ2xl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKworICAgIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNv
ZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAgICBtb2RpZnkgaXQgdW5k
ZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworICAgIExpY2Vu
c2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgor
ICAgIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0
ZXIgdmVyc2lvbi4KKworICAgIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9w
ZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICAgIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsg
d2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgICAgTUVSQ0hBTlRBQklMSVRZ
IG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAgICBM
aWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKworICAgIFlv
dSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwg
UHVibGljIExpY2Vuc2UKKyAgICBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxl
IENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bworICAgIHRoZSBGcmVlIFNvZnR3YXJlIEZv
dW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCisgICAgQm9z
dG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2lu
Y2x1ZGUgIlJlc291cmNlTG9hZFNjaGVkdWxlci5oIgorCisjaW5jbHVkZSAiRG9jdW1lbnQuaCIK
KyNpbmNsdWRlICJEb2N1bWVudExvYWRlci5oIgorI2luY2x1ZGUgIkZyYW1lLmgiCisjaW5jbHVk
ZSAiRnJhbWVMb2FkZXIuaCIKKyNpbmNsdWRlICJMb2FkZXJTdHJhdGVneS5oIgorI2luY2x1ZGUg
IkxvZ2dpbmcuaCIKKyNpbmNsdWRlICJOZXRzY2FwZVBsdWdJblN0cmVhbUxvYWRlci5oIgorI2lu
Y2x1ZGUgIlBsYXRmb3JtU3RyYXRlZ2llcy5oIgorI2luY2x1ZGUgIlJlc291cmNlTG9hZGVyLmgi
CisjaW5jbHVkZSAiUmVzb3VyY2VSZXF1ZXN0LmgiCisjaW5jbHVkZSAiU3VicmVzb3VyY2VMb2Fk
ZXIuaCIKKyNpbmNsdWRlICJVUkwuaCIKKyNpbmNsdWRlIDx3dGYvTWFpblRocmVhZC5oPgorI2lu
Y2x1ZGUgPHd0Zi9UZW1wb3JhcnlDaGFuZ2UuaD4KKyNpbmNsdWRlIDx3dGYvdGV4dC9DU3RyaW5n
Lmg+CisKKyNpZiBQTEFURk9STShJT1MpCisjaW5jbHVkZSA8UnVudGltZUFwcGxpY2F0aW9uQ2hl
Y2tzSU9TLmg+CisjZW5kaWYKKworI2lmIFVTRShRVUlDS19MT09LKQorI2luY2x1ZGUgIlF1aWNr
TG9vay5oIgorI2VuZGlmCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworLy8gTWF0Y2ggdGhlIHBh
cmFsbGVsIGNvbm5lY3Rpb24gY291bnQgdXNlZCBieSB0aGUgbmV0d29ya2luZyBsYXllci4KK3N0
YXRpYyB1bnNpZ25lZCBtYXhSZXF1ZXN0c0luRmxpZ2h0UGVySG9zdDsKKyNpZiAhUExBVEZPUk0o
SU9TKQorc3RhdGljIGNvbnN0IHVuc2lnbmVkIG1heFJlcXVlc3RzSW5GbGlnaHRGb3JOb25IVFRQ
UHJvdG9jb2xzID0gMjA7CisjZWxzZQorLy8gTGltaXRpbmcgdGhpcyBzZWVtcyB0byByZWdyZXNz
IHBlcmZvcm1hbmNlIGluIHNvbWUgbG9jYWwgY2FzZXMgc28gbGV0J3MganVzdCBtYWtlIGl0IGxh
cmdlLgorc3RhdGljIGNvbnN0IHVuc2lnbmVkIG1heFJlcXVlc3RzSW5GbGlnaHRGb3JOb25IVFRQ
UHJvdG9jb2xzID0gMTAwMDA7CisjZW5kaWYKKworUmVzb3VyY2VMb2FkU2NoZWR1bGVyOjpIb3N0
SW5mb3JtYXRpb24qIFJlc291cmNlTG9hZFNjaGVkdWxlcjo6aG9zdEZvclVSTChjb25zdCBVUkwm
IHVybCwgQ3JlYXRlSG9zdFBvbGljeSBjcmVhdGVIb3N0UG9saWN5KQoreworICAgIGlmICghdXJs
LnByb3RvY29sSXNJbkhUVFBGYW1pbHkoKSkKKyAgICAgICAgcmV0dXJuIG1fbm9uSFRUUFByb3Rv
Y29sSG9zdDsKKworICAgIG1faG9zdHMuY2hlY2tDb25zaXN0ZW5jeSgpOworICAgIFN0cmluZyBo
b3N0TmFtZSA9IHVybC5ob3N0KCk7CisgICAgSG9zdEluZm9ybWF0aW9uKiBob3N0ID0gbV9ob3N0
cy5nZXQoaG9zdE5hbWUpOworICAgIGlmICghaG9zdCAmJiBjcmVhdGVIb3N0UG9saWN5ID09IENy
ZWF0ZUlmTm90Rm91bmQpIHsKKyAgICAgICAgaG9zdCA9IG5ldyBIb3N0SW5mb3JtYXRpb24oaG9z
dE5hbWUsIG1heFJlcXVlc3RzSW5GbGlnaHRQZXJIb3N0KTsKKyAgICAgICAgbV9ob3N0cy5hZGQo
aG9zdE5hbWUsIGhvc3QpOworICAgIH0KKyAgICByZXR1cm4gaG9zdDsKK30KKworUmVzb3VyY2VM
b2FkU2NoZWR1bGVyKiByZXNvdXJjZUxvYWRTY2hlZHVsZXIoKQoreworICAgIEFTU0VSVChpc01h
aW5UaHJlYWQoKSk7CisgICAgc3RhdGljIFJlc291cmNlTG9hZFNjaGVkdWxlciogZ2xvYmFsU2No
ZWR1bGVyID0gbnVsbHB0cjsKKyAgICAKKyAgICBpZiAoIWdsb2JhbFNjaGVkdWxlcikgeworICAg
ICAgICBzdGF0aWMgYm9vbCBpc0NhbGxpbmdPdXRUb1N0cmF0ZWd5ID0gZmFsc2U7CisgICAgICAg
IAorICAgICAgICAvLyBJZiB3ZSdyZSByZS1lbnRlcmluZyByZXNvdXJjZUxvYWRTY2hlZHVsZXIo
KSB3aGlsZSBjYWxsaW5nIG91dCB0byB0aGUgTG9hZGVyU3RyYXRlZ3ksCisgICAgICAgIC8vIHRo
ZW4gdGhlIExvYWRlclN0cmF0ZWd5IGlzIHRyeWluZyB0byB1c2UgdGhlIGRlZmF1bHQgcmVzb3Vy
Y2VMb2FkU2NoZWR1bGVyLgorICAgICAgICAvLyBTbyB3ZSdsbCBjcmVhdGUgaXQgaGVyZSBhbmQg
c3RhcnQgdXNpbmcgaXQuCisgICAgICAgIGlmIChpc0NhbGxpbmdPdXRUb1N0cmF0ZWd5KSB7Cisg
ICAgICAgICAgICBnbG9iYWxTY2hlZHVsZXIgPSBuZXcgUmVzb3VyY2VMb2FkU2NoZWR1bGVyOwor
ICAgICAgICAgICAgcmV0dXJuIGdsb2JhbFNjaGVkdWxlcjsKKyAgICAgICAgfQorICAgICAgICAK
KyAgICAgICAgVGVtcG9yYXJ5Q2hhbmdlPGJvb2w+IHJlY3Vyc2lvbkd1YXJkKGlzQ2FsbGluZ091
dFRvU3RyYXRlZ3ksIHRydWUpOworICAgICAgICBnbG9iYWxTY2hlZHVsZXIgPSBwbGF0Zm9ybVN0
cmF0ZWdpZXMoKS0+bG9hZGVyU3RyYXRlZ3koKS0+cmVzb3VyY2VMb2FkU2NoZWR1bGVyKCk7Cisg
ICAgfQorCisgICAgcmV0dXJuIGdsb2JhbFNjaGVkdWxlcjsKK30KKworUmVzb3VyY2VMb2FkU2No
ZWR1bGVyOjpSZXNvdXJjZUxvYWRTY2hlZHVsZXIoKQorICAgIDogbV9ub25IVFRQUHJvdG9jb2xI
b3N0KG5ldyBIb3N0SW5mb3JtYXRpb24oU3RyaW5nKCksIG1heFJlcXVlc3RzSW5GbGlnaHRGb3JO
b25IVFRQUHJvdG9jb2xzKSkKKyAgICAsIG1fcmVxdWVzdFRpbWVyKCp0aGlzLCAmUmVzb3VyY2VM
b2FkU2NoZWR1bGVyOjpyZXF1ZXN0VGltZXJGaXJlZCkKKyAgICAsIG1fc3VzcGVuZFBlbmRpbmdS
ZXF1ZXN0c0NvdW50KDApCisgICAgLCBtX2lzU2VyaWFsTG9hZGluZ0VuYWJsZWQoZmFsc2UpCit7
CisgICAgbWF4UmVxdWVzdHNJbkZsaWdodFBlckhvc3QgPSBpbml0aWFsaXplTWF4aW11bUhUVFBD
b25uZWN0aW9uQ291bnRQZXJIb3N0KCk7Cit9CisKK1Jlc291cmNlTG9hZFNjaGVkdWxlcjo6flJl
c291cmNlTG9hZFNjaGVkdWxlcigpCit7Cit9CisKK1JlZlB0cjxTdWJyZXNvdXJjZUxvYWRlcj4g
UmVzb3VyY2VMb2FkU2NoZWR1bGVyOjpzY2hlZHVsZVN1YnJlc291cmNlTG9hZChGcmFtZSogZnJh
bWUsIENhY2hlZFJlc291cmNlKiByZXNvdXJjZSwgY29uc3QgUmVzb3VyY2VSZXF1ZXN0JiByZXF1
ZXN0LCBjb25zdCBSZXNvdXJjZUxvYWRlck9wdGlvbnMmIG9wdGlvbnMpCit7CisgICAgUmVmUHRy
PFN1YnJlc291cmNlTG9hZGVyPiBsb2FkZXIgPSBTdWJyZXNvdXJjZUxvYWRlcjo6Y3JlYXRlKGZy
YW1lLCByZXNvdXJjZSwgcmVxdWVzdCwgb3B0aW9ucyk7CisgICAgaWYgKGxvYWRlcikKKyAgICAg
ICAgc2NoZWR1bGVMb2FkKGxvYWRlci5nZXQoKSk7CisjaWYgUExBVEZPUk0oSU9TKQorICAgIC8v
IFNpbmNlIHdlIGRlZmVyIGxvYWRlciBpbml0aWFsaXphdGlvbiB1bnRpbCBzY2hlZHVsaW5nIG9u
IGlPUywgdGhlIGZyYW1lCisgICAgLy8gbG9hZCBkZWxlZ2F0ZSB0aGF0IHdvdWxkIGJlIGNhbGxl
ZCBpbiBTdWJyZXNvdXJjZUxvYWRlcjo6Y3JlYXRlKCkgb24KKyAgICAvLyBvdGhlciBwb3J0cyBt
aWdodCBiZSBjYWxsZWQgaW4gc2NoZWR1bGVMb2FkKCkgaW5zdGVhZC4gT3VyIGNvbnRyYWN0IHRv
CisgICAgLy8gY2FsbGVycyBvZiB0aGlzIG1ldGhvZCBpcyB0aGF0IGEgbnVsbCBsb2FkZXIgaXMg
cmV0dXJuZWQgaWYgdGhlIGxvYWQgd2FzCisgICAgLy8gY2FuY2VsbGVkIGJ5IGEgZnJhbWUgbG9h
ZCBkZWxlZ2F0ZS4KKyAgICBpZiAoIWxvYWRlciB8fCBsb2FkZXItPnJlYWNoZWRUZXJtaW5hbFN0
YXRlKCkpCisgICAgICAgIHJldHVybiBudWxscHRyOworI2VuZGlmCisgICAgcmV0dXJuIGxvYWRl
cjsKK30KKworUmVmUHRyPE5ldHNjYXBlUGx1Z0luU3RyZWFtTG9hZGVyPiBSZXNvdXJjZUxvYWRT
Y2hlZHVsZXI6OnNjaGVkdWxlUGx1Z2luU3RyZWFtTG9hZChGcmFtZSogZnJhbWUsIE5ldHNjYXBl
UGx1Z0luU3RyZWFtTG9hZGVyQ2xpZW50KiBjbGllbnQsIGNvbnN0IFJlc291cmNlUmVxdWVzdCYg
cmVxdWVzdCkKK3sKKyAgICBSZWZQdHI8TmV0c2NhcGVQbHVnSW5TdHJlYW1Mb2FkZXI+IGxvYWRl
ciA9IE5ldHNjYXBlUGx1Z0luU3RyZWFtTG9hZGVyOjpjcmVhdGUoZnJhbWUsIGNsaWVudCwgcmVx
dWVzdCk7CisgICAgaWYgKGxvYWRlcikKKyAgICAgICAgc2NoZWR1bGVMb2FkKGxvYWRlci5nZXQo
KSk7CisgICAgcmV0dXJuIGxvYWRlcjsKK30KKwordm9pZCBSZXNvdXJjZUxvYWRTY2hlZHVsZXI6
OnNjaGVkdWxlTG9hZChSZXNvdXJjZUxvYWRlciogcmVzb3VyY2VMb2FkZXIpCit7CisgICAgQVNT
RVJUKHJlc291cmNlTG9hZGVyKTsKKworICAgIExPRyhSZXNvdXJjZUxvYWRpbmcsICJSZXNvdXJj
ZUxvYWRTY2hlZHVsZXI6OmxvYWQgcmVzb3VyY2UgJXAgJyVzJyIsIHJlc291cmNlTG9hZGVyLCBy
ZXNvdXJjZUxvYWRlci0+dXJsKCkuc3RyaW5nKCkubGF0aW4xKCkuZGF0YSgpKTsKKworI2lmIFBM
QVRGT1JNKElPUykKKyAgICAvLyBJZiB0aGVyZSdzIGEgd2ViIGFyY2hpdmUgcmVzb3VyY2UgZm9y
IHRoaXMgVVJMLCB3ZSBkb24ndCBuZWVkIHRvIHNjaGVkdWxlIHRoZSBsb2FkIHNpbmNlIGl0IHdp
bGwgbmV2ZXIgdG91Y2ggdGhlIG5ldHdvcmsuCisgICAgaWYgKCFpc1N1c3BlbmRpbmdQZW5kaW5n
UmVxdWVzdHMoKSAmJiByZXNvdXJjZUxvYWRlci0+ZG9jdW1lbnRMb2FkZXIoKS0+YXJjaGl2ZVJl
c291cmNlRm9yVVJMKHJlc291cmNlTG9hZGVyLT5pT1NPcmlnaW5hbFJlcXVlc3QoKS51cmwoKSkp
IHsKKyAgICAgICAgcmVzb3VyY2VMb2FkZXItPnN0YXJ0TG9hZGluZygpOworICAgICAgICByZXR1
cm47CisgICAgfQorI2Vsc2UKKyAgICBpZiAocmVzb3VyY2VMb2FkZXItPmRvY3VtZW50TG9hZGVy
KCktPmFyY2hpdmVSZXNvdXJjZUZvclVSTChyZXNvdXJjZUxvYWRlci0+cmVxdWVzdCgpLnVybCgp
KSkgeworICAgICAgICByZXNvdXJjZUxvYWRlci0+c3RhcnQoKTsKKyAgICAgICAgcmV0dXJuOwor
ICAgIH0KKyNlbmRpZgorCisjaWYgUExBVEZPUk0oSU9TKQorICAgIEhvc3RJbmZvcm1hdGlvbiog
aG9zdCA9IGhvc3RGb3JVUkwocmVzb3VyY2VMb2FkZXItPmlPU09yaWdpbmFsUmVxdWVzdCgpLnVy
bCgpLCBDcmVhdGVJZk5vdEZvdW5kKTsKKyNlbHNlCisgICAgSG9zdEluZm9ybWF0aW9uKiBob3N0
ID0gaG9zdEZvclVSTChyZXNvdXJjZUxvYWRlci0+dXJsKCksIENyZWF0ZUlmTm90Rm91bmQpOwor
I2VuZGlmCisKKyAgICBSZXNvdXJjZUxvYWRQcmlvcml0eSBwcmlvcml0eSA9IHJlc291cmNlTG9h
ZGVyLT5yZXF1ZXN0KCkucHJpb3JpdHkoKTsKKworICAgIGJvb2wgaGFkUmVxdWVzdHMgPSBob3N0
LT5oYXNSZXF1ZXN0cygpOworICAgIGhvc3QtPnNjaGVkdWxlKHJlc291cmNlTG9hZGVyLCBwcmlv
cml0eSk7CisKKyNpZiBQTEFURk9STShDT0NPQSkgfHwgVVNFKENGTkVUV09SSykKKyAgICBpZiAo
UmVzb3VyY2VSZXF1ZXN0OjpyZXNvdXJjZVByaW9yaXRpZXNFbmFibGVkKCkgJiYgIWlzU3VzcGVu
ZGluZ1BlbmRpbmdSZXF1ZXN0cygpKSB7CisgICAgICAgIC8vIFNlcnZlIGFsbCByZXF1ZXN0cyBh
dCBvbmNlIHRvIGtlZXAgdGhlIHBpcGVsaW5lIGZ1bGwgYXQgdGhlIG5ldHdvcmsgbGF5ZXIuCisg
ICAgICAgIC8vIEZJWE1FOiBEb2VzIHRoaXMgY29kZSBkbyBhbnl0aGluZyB1c2VmdWwsIGdpdmVu
IHRoYXQgd2UgYWxzbyBzZXQgbWF4UmVxdWVzdHNJbkZsaWdodFBlckhvc3QgdG8gZWZmZWN0aXZl
bHkgdW5saW1pdGVkIG9uIHRoZXNlIHBsYXRmb3Jtcz8KKyAgICAgICAgc2VydmVQZW5kaW5nUmVx
dWVzdHMoaG9zdCwgUmVzb3VyY2VMb2FkUHJpb3JpdHk6OlZlcnlMb3cpOworICAgICAgICByZXR1
cm47CisgICAgfQorI2VuZGlmCisKKyNpZiBQTEFURk9STShJT1MpCisgICAgaWYgKChwcmlvcml0
eSA+IFJlc291cmNlTG9hZFByaW9yaXR5OjpMb3cgfHwgIXJlc291cmNlTG9hZGVyLT5pT1NPcmln
aW5hbFJlcXVlc3QoKS51cmwoKS5wcm90b2NvbElzSW5IVFRQRmFtaWx5KCkgfHwgKHByaW9yaXR5
ID09IFJlc291cmNlTG9hZFByaW9yaXR5OjpMb3cgJiYgIWhhZFJlcXVlc3RzKSkgJiYgIWlzU3Vz
cGVuZGluZ1BlbmRpbmdSZXF1ZXN0cygpKSB7CisgICAgICAgIC8vIFRyeSB0byByZXF1ZXN0IGlt
cG9ydGFudCByZXNvdXJjZXMgaW1tZWRpYXRlbHkuCisgICAgICAgIHNlcnZlUGVuZGluZ1JlcXVl
c3RzKGhvc3QsIHByaW9yaXR5KTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyNlbHNlCisgICAg
aWYgKHByaW9yaXR5ID4gUmVzb3VyY2VMb2FkUHJpb3JpdHk6OkxvdyB8fCAhcmVzb3VyY2VMb2Fk
ZXItPnVybCgpLnByb3RvY29sSXNJbkhUVFBGYW1pbHkoKSB8fCAocHJpb3JpdHkgPT0gUmVzb3Vy
Y2VMb2FkUHJpb3JpdHk6OkxvdyAmJiAhaGFkUmVxdWVzdHMpKSB7CisgICAgICAgIC8vIFRyeSB0
byByZXF1ZXN0IGltcG9ydGFudCByZXNvdXJjZXMgaW1tZWRpYXRlbHkuCisgICAgICAgIHNlcnZl
UGVuZGluZ1JlcXVlc3RzKGhvc3QsIHByaW9yaXR5KTsKKyAgICAgICAgcmV0dXJuOworICAgIH0K
KyNlbmRpZgorCisgICAgLy8gSGFuZGxlIGFzeW5jaHJvbm91c2x5IHNvIGVhcmx5IGxvdyBwcmlv
cml0eSByZXF1ZXN0cyBkb24ndAorICAgIC8vIGdldCBzY2hlZHVsZWQgYmVmb3JlIGxhdGVyIGhp
Z2ggcHJpb3JpdHkgb25lcy4KKyAgICBzY2hlZHVsZVNlcnZlUGVuZGluZ1JlcXVlc3RzKCk7Cit9
CisKK3ZvaWQgUmVzb3VyY2VMb2FkU2NoZWR1bGVyOjpyZW1vdmUoUmVzb3VyY2VMb2FkZXIqIHJl
c291cmNlTG9hZGVyKQoreworICAgIEFTU0VSVChyZXNvdXJjZUxvYWRlcik7CisKKyAgICBIb3N0
SW5mb3JtYXRpb24qIGhvc3QgPSBob3N0Rm9yVVJMKHJlc291cmNlTG9hZGVyLT51cmwoKSk7Cisg
ICAgaWYgKGhvc3QpCisgICAgICAgIGhvc3QtPnJlbW92ZShyZXNvdXJjZUxvYWRlcik7CisjaWYg
UExBVEZPUk0oSU9TKQorICAgIC8vIFJlc291cmNlTG9hZGVyOjp1cmwoKSBkb2Vzbid0IHN0YXJ0
IHJldHVybmluZyB0aGUgY29ycmVjdCB2YWx1ZSB1bnRpbCB0aGUgbG9hZCBzdGFydHMuIElmIHdl
IGdldCBjYW5jZWxlZCBiZWZvcmUgdGhhdCwgd2UgbmVlZCB0byBsb29rIGZvciBvcmlnaW5hbFJl
cXVlc3QgdXJsIGluc3RlYWQuCisgICAgLy8gRklYTUU6IFJlc291cmNlTG9hZGVyOjp1cmwoKSBz
aG91bGQgYmUgbWFkZSB0byByZXR1cm4gYSBzZW5zaWJsZSB2YWx1ZSBhdCBhbGwgdGltZXMuCisg
ICAgaWYgKCFyZXNvdXJjZUxvYWRlci0+aU9TT3JpZ2luYWxSZXF1ZXN0KCkuaXNOdWxsKCkpIHsK
KyAgICAgICAgSG9zdEluZm9ybWF0aW9uKiBvcmlnaW5hbEhvc3QgPSBob3N0Rm9yVVJMKHJlc291
cmNlTG9hZGVyLT5pT1NPcmlnaW5hbFJlcXVlc3QoKS51cmwoKSk7CisgICAgICAgIGlmIChvcmln
aW5hbEhvc3QgJiYgb3JpZ2luYWxIb3N0ICE9IGhvc3QpCisgICAgICAgICAgICBvcmlnaW5hbEhv
c3QtPnJlbW92ZShyZXNvdXJjZUxvYWRlcik7CisgICAgfQorI2VuZGlmCisgICAgc2NoZWR1bGVT
ZXJ2ZVBlbmRpbmdSZXF1ZXN0cygpOworfQorCit2b2lkIFJlc291cmNlTG9hZFNjaGVkdWxlcjo6
c2V0RGVmZXJzTG9hZGluZyhSZXNvdXJjZUxvYWRlciosIGJvb2wpCit7Cit9CisKK3ZvaWQgUmVz
b3VyY2VMb2FkU2NoZWR1bGVyOjpjcm9zc09yaWdpblJlZGlyZWN0UmVjZWl2ZWQoUmVzb3VyY2VM
b2FkZXIqIHJlc291cmNlTG9hZGVyLCBjb25zdCBVUkwmIHJlZGlyZWN0VVJMKQoreworICAgIEhv
c3RJbmZvcm1hdGlvbiogb2xkSG9zdCA9IGhvc3RGb3JVUkwocmVzb3VyY2VMb2FkZXItPnVybCgp
KTsKKyAgICBBU1NFUlQob2xkSG9zdCk7CisgICAgaWYgKCFvbGRIb3N0KQorICAgICAgICByZXR1
cm47CisKKyAgICBIb3N0SW5mb3JtYXRpb24qIG5ld0hvc3QgPSBob3N0Rm9yVVJMKHJlZGlyZWN0
VVJMLCBDcmVhdGVJZk5vdEZvdW5kKTsKKworICAgIGlmIChvbGRIb3N0LT5uYW1lKCkgPT0gbmV3
SG9zdC0+bmFtZSgpKQorICAgICAgICByZXR1cm47CisKKyAgICBuZXdIb3N0LT5hZGRMb2FkSW5Q
cm9ncmVzcyhyZXNvdXJjZUxvYWRlcik7CisgICAgb2xkSG9zdC0+cmVtb3ZlKHJlc291cmNlTG9h
ZGVyKTsKK30KKwordm9pZCBSZXNvdXJjZUxvYWRTY2hlZHVsZXI6OnNlcnZlUGVuZGluZ1JlcXVl
c3RzKFJlc291cmNlTG9hZFByaW9yaXR5IG1pbmltdW1Qcmlvcml0eSkKK3sKKyAgICBMT0coUmVz
b3VyY2VMb2FkaW5nLCAiUmVzb3VyY2VMb2FkU2NoZWR1bGVyOjpzZXJ2ZVBlbmRpbmdSZXF1ZXN0
cy4gbV9zdXNwZW5kUGVuZGluZ1JlcXVlc3RzQ291bnQ9JWQiLCBtX3N1c3BlbmRQZW5kaW5nUmVx
dWVzdHNDb3VudCk7IAorICAgIGlmIChpc1N1c3BlbmRpbmdQZW5kaW5nUmVxdWVzdHMoKSkKKyAg
ICAgICAgcmV0dXJuOworCisgICAgbV9yZXF1ZXN0VGltZXIuc3RvcCgpOworICAgIAorICAgIHNl
cnZlUGVuZGluZ1JlcXVlc3RzKG1fbm9uSFRUUFByb3RvY29sSG9zdCwgbWluaW11bVByaW9yaXR5
KTsKKworICAgIFZlY3RvcjxIb3N0SW5mb3JtYXRpb24qPiBob3N0c1RvU2VydmU7CisgICAgY29w
eVZhbHVlc1RvVmVjdG9yKG1faG9zdHMsIGhvc3RzVG9TZXJ2ZSk7CisKKyAgICBmb3IgKGF1dG8q
IGhvc3QgOiBob3N0c1RvU2VydmUpIHsKKyAgICAgICAgaWYgKGhvc3QtPmhhc1JlcXVlc3RzKCkp
CisgICAgICAgICAgICBzZXJ2ZVBlbmRpbmdSZXF1ZXN0cyhob3N0LCBtaW5pbXVtUHJpb3JpdHkp
OworICAgICAgICBlbHNlCisgICAgICAgICAgICBkZWxldGUgbV9ob3N0cy50YWtlKGhvc3QtPm5h
bWUoKSk7CisgICAgfQorfQorCit2b2lkIFJlc291cmNlTG9hZFNjaGVkdWxlcjo6c2VydmVQZW5k
aW5nUmVxdWVzdHMoSG9zdEluZm9ybWF0aW9uKiBob3N0LCBSZXNvdXJjZUxvYWRQcmlvcml0eSBt
aW5pbXVtUHJpb3JpdHkpCit7CisgICAgTE9HKFJlc291cmNlTG9hZGluZywgIlJlc291cmNlTG9h
ZFNjaGVkdWxlcjo6c2VydmVQZW5kaW5nUmVxdWVzdHMgSG9zdEluZm9ybWF0aW9uLm1fbmFtZT0n
JXMnIiwgaG9zdC0+bmFtZSgpLmxhdGluMSgpLmRhdGEoKSk7CisKKyAgICBhdXRvIHByaW9yaXR5
ID0gUmVzb3VyY2VMb2FkUHJpb3JpdHk6OkhpZ2hlc3Q7CisgICAgd2hpbGUgKHRydWUpIHsKKyAg
ICAgICAgYXV0byYgcmVxdWVzdHNQZW5kaW5nID0gaG9zdC0+cmVxdWVzdHNQZW5kaW5nKHByaW9y
aXR5KTsKKyAgICAgICAgd2hpbGUgKCFyZXF1ZXN0c1BlbmRpbmcuaXNFbXB0eSgpKSB7CisgICAg
ICAgICAgICBSZWZQdHI8UmVzb3VyY2VMb2FkZXI+IHJlc291cmNlTG9hZGVyID0gcmVxdWVzdHNQ
ZW5kaW5nLmZpcnN0KCk7CisKKyAgICAgICAgICAgIC8vIEZvciBuYW1lZCBob3N0cyAtIHdoaWNo
IGFyZSBvbmx5IGh0dHAocykgaG9zdHMgLSB3ZSBzaG91bGQgYWx3YXlzIGVuZm9yY2UgdGhlIGNv
bm5lY3Rpb24gbGltaXQuCisgICAgICAgICAgICAvLyBGb3Igbm9uLW5hbWVkIGhvc3RzIC0gZXZl
cnl0aGluZyBidXQgaHR0cChzKSAtIHdlIHNob3VsZCBvbmx5IGVuZm9yY2UgdGhlIGxpbWl0IGlm
IHRoZSBkb2N1bWVudCBpc24ndCBkb25lIHBhcnNpbmcgCisgICAgICAgICAgICAvLyBhbmQgd2Ug
ZG9uJ3Qga25vdyBhbGwgc3R5bGVzaGVldHMgeWV0LgorICAgICAgICAgICAgRG9jdW1lbnQqIGRv
Y3VtZW50ID0gcmVzb3VyY2VMb2FkZXItPmZyYW1lTG9hZGVyKCkgPyByZXNvdXJjZUxvYWRlci0+
ZnJhbWVMb2FkZXIoKS0+ZnJhbWUoKS5kb2N1bWVudCgpIDogMDsKKyAgICAgICAgICAgIGJvb2wg
c2hvdWxkTGltaXRSZXF1ZXN0cyA9ICFob3N0LT5uYW1lKCkuaXNOdWxsKCkgfHwgKGRvY3VtZW50
ICYmIChkb2N1bWVudC0+cGFyc2luZygpIHx8ICFkb2N1bWVudC0+aGF2ZVN0eWxlc2hlZXRzTG9h
ZGVkKCkpKTsKKyAgICAgICAgICAgIGlmIChzaG91bGRMaW1pdFJlcXVlc3RzICYmIGhvc3QtPmxp
bWl0UmVxdWVzdHMocHJpb3JpdHkpKQorICAgICAgICAgICAgICAgIHJldHVybjsKKworICAgICAg
ICAgICAgcmVxdWVzdHNQZW5kaW5nLnJlbW92ZUZpcnN0KCk7CisgICAgICAgICAgICBob3N0LT5h
ZGRMb2FkSW5Qcm9ncmVzcyhyZXNvdXJjZUxvYWRlci5nZXQoKSk7CisjaWYgUExBVEZPUk0oSU9T
KQorICAgICAgICAgICAgaWYgKCFhcHBsaWNhdGlvbklzV2ViUHJvY2VzcygpKSB7CisgICAgICAg
ICAgICAgICAgcmVzb3VyY2VMb2FkZXItPnN0YXJ0TG9hZGluZygpOworICAgICAgICAgICAgICAg
IHJldHVybjsKKyAgICAgICAgICAgIH0KKyNlbmRpZgorICAgICAgICAgICAgcmVzb3VyY2VMb2Fk
ZXItPnN0YXJ0KCk7CisgICAgICAgIH0KKyAgICAgICAgaWYgKHByaW9yaXR5ID09IG1pbmltdW1Q
cmlvcml0eSkKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgLS1wcmlvcml0eTsKKyAgICB9
Cit9CisKK3ZvaWQgUmVzb3VyY2VMb2FkU2NoZWR1bGVyOjpzdXNwZW5kUGVuZGluZ1JlcXVlc3Rz
KCkKK3sKKyAgICArK21fc3VzcGVuZFBlbmRpbmdSZXF1ZXN0c0NvdW50OworfQorCit2b2lkIFJl
c291cmNlTG9hZFNjaGVkdWxlcjo6cmVzdW1lUGVuZGluZ1JlcXVlc3RzKCkKK3sKKyAgICBBU1NF
UlQobV9zdXNwZW5kUGVuZGluZ1JlcXVlc3RzQ291bnQpOworICAgIC0tbV9zdXNwZW5kUGVuZGlu
Z1JlcXVlc3RzQ291bnQ7CisgICAgaWYgKG1fc3VzcGVuZFBlbmRpbmdSZXF1ZXN0c0NvdW50KQor
ICAgICAgICByZXR1cm47CisgICAgaWYgKCFtX2hvc3RzLmlzRW1wdHkoKSB8fCBtX25vbkhUVFBQ
cm90b2NvbEhvc3QtPmhhc1JlcXVlc3RzKCkpCisgICAgICAgIHNjaGVkdWxlU2VydmVQZW5kaW5n
UmVxdWVzdHMoKTsKK30KKyAgICAKK3ZvaWQgUmVzb3VyY2VMb2FkU2NoZWR1bGVyOjpzY2hlZHVs
ZVNlcnZlUGVuZGluZ1JlcXVlc3RzKCkKK3sKKyAgICBMT0coUmVzb3VyY2VMb2FkaW5nLCAiUmVz
b3VyY2VMb2FkU2NoZWR1bGVyOjpzY2hlZHVsZVNlcnZlUGVuZGluZ1JlcXVlc3RzLCBtX3JlcXVl
c3RUaW1lci5pc0FjdGl2ZSgpPSV1IiwgbV9yZXF1ZXN0VGltZXIuaXNBY3RpdmUoKSk7CisgICAg
aWYgKCFtX3JlcXVlc3RUaW1lci5pc0FjdGl2ZSgpKQorICAgICAgICBtX3JlcXVlc3RUaW1lci5z
dGFydE9uZVNob3QoMCk7Cit9CisKK3ZvaWQgUmVzb3VyY2VMb2FkU2NoZWR1bGVyOjpyZXF1ZXN0
VGltZXJGaXJlZCgpCit7CisgICAgTE9HKFJlc291cmNlTG9hZGluZywgIlJlc291cmNlTG9hZFNj
aGVkdWxlcjo6cmVxdWVzdFRpbWVyRmlyZWRcbiIpOworICAgIHNlcnZlUGVuZGluZ1JlcXVlc3Rz
KCk7Cit9CisKK1Jlc291cmNlTG9hZFNjaGVkdWxlcjo6SG9zdEluZm9ybWF0aW9uOjpIb3N0SW5m
b3JtYXRpb24oY29uc3QgU3RyaW5nJiBuYW1lLCB1bnNpZ25lZCBtYXhSZXF1ZXN0c0luRmxpZ2h0
KQorICAgIDogbV9uYW1lKG5hbWUpCisgICAgLCBtX21heFJlcXVlc3RzSW5GbGlnaHQobWF4UmVx
dWVzdHNJbkZsaWdodCkKK3sKK30KKworUmVzb3VyY2VMb2FkU2NoZWR1bGVyOjpIb3N0SW5mb3Jt
YXRpb246On5Ib3N0SW5mb3JtYXRpb24oKQoreworICAgIEFTU0VSVCghaGFzUmVxdWVzdHMoKSk7
Cit9CisKK3Vuc2lnbmVkIFJlc291cmNlTG9hZFNjaGVkdWxlcjo6SG9zdEluZm9ybWF0aW9uOjpw
cmlvcml0eVRvSW5kZXgoUmVzb3VyY2VMb2FkUHJpb3JpdHkgcHJpb3JpdHkpCit7CisgICAgc3dp
dGNoIChwcmlvcml0eSkgeworICAgIGNhc2UgUmVzb3VyY2VMb2FkUHJpb3JpdHk6OlZlcnlMb3c6
CisgICAgICAgIHJldHVybiAwOworICAgIGNhc2UgUmVzb3VyY2VMb2FkUHJpb3JpdHk6OkxvdzoK
KyAgICAgICAgcmV0dXJuIDE7CisgICAgY2FzZSBSZXNvdXJjZUxvYWRQcmlvcml0eTo6TWVkaXVt
OgorICAgICAgICByZXR1cm4gMjsKKyAgICBjYXNlIFJlc291cmNlTG9hZFByaW9yaXR5OjpIaWdo
OgorICAgICAgICByZXR1cm4gMzsKKyAgICBjYXNlIFJlc291cmNlTG9hZFByaW9yaXR5OjpWZXJ5
SGlnaDoKKyAgICAgICAgcmV0dXJuIDQ7CisgICAgfQorICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgp
OworICAgIHJldHVybiAwOworfQorCit2b2lkIFJlc291cmNlTG9hZFNjaGVkdWxlcjo6SG9zdElu
Zm9ybWF0aW9uOjpzY2hlZHVsZShSZXNvdXJjZUxvYWRlciogcmVzb3VyY2VMb2FkZXIsIFJlc291
cmNlTG9hZFByaW9yaXR5IHByaW9yaXR5KQoreworICAgIG1fcmVxdWVzdHNQZW5kaW5nW3ByaW9y
aXR5VG9JbmRleChwcmlvcml0eSldLmFwcGVuZChyZXNvdXJjZUxvYWRlcik7Cit9CisgICAgCit2
b2lkIFJlc291cmNlTG9hZFNjaGVkdWxlcjo6SG9zdEluZm9ybWF0aW9uOjphZGRMb2FkSW5Qcm9n
cmVzcyhSZXNvdXJjZUxvYWRlciogcmVzb3VyY2VMb2FkZXIpCit7CisgICAgTE9HKFJlc291cmNl
TG9hZGluZywgIkhvc3RJbmZvcm1hdGlvbiAnJXMnIGxvYWRpbmcgJyVzJy4gQ3VycmVudCBjb3Vu
dCAlZCIsIG1fbmFtZS5sYXRpbjEoKS5kYXRhKCksIHJlc291cmNlTG9hZGVyLT51cmwoKS5zdHJp
bmcoKS5sYXRpbjEoKS5kYXRhKCksIG1fcmVxdWVzdHNMb2FkaW5nLnNpemUoKSk7CisgICAgbV9y
ZXF1ZXN0c0xvYWRpbmcuYWRkKHJlc291cmNlTG9hZGVyKTsKK30KKyAgICAKK3ZvaWQgUmVzb3Vy
Y2VMb2FkU2NoZWR1bGVyOjpIb3N0SW5mb3JtYXRpb246OnJlbW92ZShSZXNvdXJjZUxvYWRlciog
cmVzb3VyY2VMb2FkZXIpCit7CisgICAgaWYgKG1fcmVxdWVzdHNMb2FkaW5nLnJlbW92ZShyZXNv
dXJjZUxvYWRlcikpCisgICAgICAgIHJldHVybjsKKyAgICAKKyAgICBmb3IgKGF1dG8mIHJlcXVl
c3RRdWV1ZSA6IG1fcmVxdWVzdHNQZW5kaW5nKSB7CisgICAgICAgIGZvciAoYXV0byBpdCA9IHJl
cXVlc3RRdWV1ZS5iZWdpbigpLCBlbmQgPSByZXF1ZXN0UXVldWUuZW5kKCk7IGl0ICE9IGVuZDsg
KytpdCkgeworICAgICAgICAgICAgaWYgKCppdCA9PSByZXNvdXJjZUxvYWRlcikgeworICAgICAg
ICAgICAgICAgIHJlcXVlc3RRdWV1ZS5yZW1vdmUoaXQpOworICAgICAgICAgICAgICAgIHJldHVy
bjsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KK30KKworYm9vbCBSZXNvdXJjZUxv
YWRTY2hlZHVsZXI6Okhvc3RJbmZvcm1hdGlvbjo6aGFzUmVxdWVzdHMoKSBjb25zdAoreworICAg
IGlmICghbV9yZXF1ZXN0c0xvYWRpbmcuaXNFbXB0eSgpKQorICAgICAgICByZXR1cm4gdHJ1ZTsK
KyAgICBmb3IgKGF1dG8mIHJlcXVlc3RRdWV1ZSA6IG1fcmVxdWVzdHNQZW5kaW5nKSB7CisgICAg
ICAgIGlmICghcmVxdWVzdFF1ZXVlLmlzRW1wdHkoKSkKKyAgICAgICAgICAgIHJldHVybiB0cnVl
OworICAgIH0KKyAgICByZXR1cm4gZmFsc2U7Cit9CisKK2Jvb2wgUmVzb3VyY2VMb2FkU2NoZWR1
bGVyOjpIb3N0SW5mb3JtYXRpb246OmxpbWl0UmVxdWVzdHMoUmVzb3VyY2VMb2FkUHJpb3JpdHkg
cHJpb3JpdHkpIGNvbnN0IAoreworICAgIGlmIChwcmlvcml0eSA9PSBSZXNvdXJjZUxvYWRQcmlv
cml0eTo6VmVyeUxvdyAmJiAhbV9yZXF1ZXN0c0xvYWRpbmcuaXNFbXB0eSgpKQorICAgICAgICBy
ZXR1cm4gdHJ1ZTsKKyAgICByZXR1cm4gbV9yZXF1ZXN0c0xvYWRpbmcuc2l6ZSgpID49IChyZXNv
dXJjZUxvYWRTY2hlZHVsZXIoKS0+aXNTZXJpYWxMb2FkaW5nRW5hYmxlZCgpID8gMSA6IG1fbWF4
UmVxdWVzdHNJbkZsaWdodCk7Cit9CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKSW5kZXg6IFNv
dXJjZS9XZWJLaXQvV2ViQ29yZVN1cHBvcnQvV2ViUmVzb3VyY2VMb2FkU2NoZWR1bGVyLmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L1dlYkNvcmVTdXBwb3J0L1dlYlJlc291cmNlTG9h
ZFNjaGVkdWxlci5jcHAJKHdvcmtpbmcgY29weSkKKysrIFNvdXJjZS9XZWJLaXQvV2ViQ29yZVN1
cHBvcnQvV2ViUmVzb3VyY2VMb2FkU2NoZWR1bGVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMyw3
ICszLDcgQEAKICAgICBDb3B5cmlnaHQgKEMpIDIwMDEgRGlyayBNdWVsbGVyIChtdWVsbGVyQGtk
ZS5vcmcpCiAgICAgQ29weXJpZ2h0IChDKSAyMDAyIFdhbGRvIEJhc3RpYW4gKGJhc3RpYW5Aa2Rl
Lm9yZykKICAgICBDb3B5cmlnaHQgKEMpIDIwMDYgU2FtdWVsIFdlaW5pZyAoc2FtLndlaW5pZ0Bn
bWFpbC5jb20pCi0gICAgQ29weXJpZ2h0IChDKSAyMDA0LCAyMDA1LCAyMDA2LCAyMDA3LCAyMDA4
IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAgICBDb3B5cmlnaHQgKEMpIDIwMDQt
MjAwOCwgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgICAgQ29weXJpZ2h0
IChDKSAyMDEwIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAKICAgICBUaGlzIGxp
YnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCkBA
IC0yMiwzNSArMjIsMzMgQEAKICAgICBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KICAqLwog
Ci0jaW5jbHVkZSAiY29uZmlnLmgiCi0jaW5jbHVkZSAiUmVzb3VyY2VMb2FkU2NoZWR1bGVyLmgi
CisjaW5jbHVkZSAiV2ViUmVzb3VyY2VMb2FkU2NoZWR1bGVyLmgiCiAKLSNpbmNsdWRlICJEb2N1
bWVudC5oIgotI2luY2x1ZGUgIkRvY3VtZW50TG9hZGVyLmgiCi0jaW5jbHVkZSAiRnJhbWUuaCIK
LSNpbmNsdWRlICJGcmFtZUxvYWRlci5oIgotI2luY2x1ZGUgIkxvYWRlclN0cmF0ZWd5LmgiCi0j
aW5jbHVkZSAiTG9nZ2luZy5oIgotI2luY2x1ZGUgIk5ldHNjYXBlUGx1Z0luU3RyZWFtTG9hZGVy
LmgiCi0jaW5jbHVkZSAiUGxhdGZvcm1TdHJhdGVnaWVzLmgiCi0jaW5jbHVkZSAiUmVzb3VyY2VM
b2FkZXIuaCIKLSNpbmNsdWRlICJSZXNvdXJjZVJlcXVlc3QuaCIKLSNpbmNsdWRlICJTdWJyZXNv
dXJjZUxvYWRlci5oIgotI2luY2x1ZGUgIlVSTC5oIgorI2luY2x1ZGUgPFdlYkNvcmUvRG9jdW1l
bnQuaD4KKyNpbmNsdWRlIDxXZWJDb3JlL0RvY3VtZW50TG9hZGVyLmg+CisjaW5jbHVkZSA8V2Vi
Q29yZS9GcmFtZS5oPgorI2luY2x1ZGUgPFdlYkNvcmUvRnJhbWVMb2FkZXIuaD4KKyNpbmNsdWRl
IDxXZWJDb3JlL0xvZ2dpbmcuaD4KKyNpbmNsdWRlIDxXZWJDb3JlL05ldHNjYXBlUGx1Z0luU3Ry
ZWFtTG9hZGVyLmg+CisjaW5jbHVkZSA8V2ViQ29yZS9QaW5nSGFuZGxlLmg+CisjaW5jbHVkZSA8
V2ViQ29yZS9QbGF0Zm9ybVN0cmF0ZWdpZXMuaD4KKyNpbmNsdWRlIDxXZWJDb3JlL1Jlc291cmNl
SGFuZGxlLmg+CisjaW5jbHVkZSA8V2ViQ29yZS9SZXNvdXJjZVJlcXVlc3QuaD4KKyNpbmNsdWRl
IDxXZWJDb3JlL1N1YnJlc291cmNlTG9hZGVyLmg+CisjaW5jbHVkZSA8V2ViQ29yZS9VUkwuaD4K
ICNpbmNsdWRlIDx3dGYvTWFpblRocmVhZC5oPgogI2luY2x1ZGUgPHd0Zi9UZW1wb3JhcnlDaGFu
Z2UuaD4KICNpbmNsdWRlIDx3dGYvdGV4dC9DU3RyaW5nLmg+CiAKICNpZiBQTEFURk9STShJT1Mp
Ci0jaW5jbHVkZSA8UnVudGltZUFwcGxpY2F0aW9uQ2hlY2tzSU9TLmg+CisjaW5jbHVkZSA8Q29y
ZUZvdW5kYXRpb24vQ29yZUZvdW5kYXRpb24uaD4KKyNpbmNsdWRlIDxXZWJDb3JlL1J1bnRpbWVB
cHBsaWNhdGlvbkNoZWNrc0lPUy5oPgogI2VuZGlmCiAKICNpZiBVU0UoUVVJQ0tfTE9PSykKLSNp
bmNsdWRlICJRdWlja0xvb2suaCIKKyNpbmNsdWRlIDxXZWJDb3JlL1F1aWNrTG9vay5oPgogI2Vu
ZGlmCiAKLW5hbWVzcGFjZSBXZWJDb3JlIHsKLQogLy8gTWF0Y2ggdGhlIHBhcmFsbGVsIGNvbm5l
Y3Rpb24gY291bnQgdXNlZCBieSB0aGUgbmV0d29ya2luZyBsYXllci4KIHN0YXRpYyB1bnNpZ25l
ZCBtYXhSZXF1ZXN0c0luRmxpZ2h0UGVySG9zdDsKICNpZiAhUExBVEZPUk0oSU9TKQpAQCAtNjAs
NyArNTgsMTQgQEAgc3RhdGljIGNvbnN0IHVuc2lnbmVkIG1heFJlcXVlc3RzSW5GbGlnaAogc3Rh
dGljIGNvbnN0IHVuc2lnbmVkIG1heFJlcXVlc3RzSW5GbGlnaHRGb3JOb25IVFRQUHJvdG9jb2xz
ID0gMTAwMDA7CiAjZW5kaWYKIAotUmVzb3VyY2VMb2FkU2NoZWR1bGVyOjpIb3N0SW5mb3JtYXRp
b24qIFJlc291cmNlTG9hZFNjaGVkdWxlcjo6aG9zdEZvclVSTChjb25zdCBVUkwmIHVybCwgQ3Jl
YXRlSG9zdFBvbGljeSBjcmVhdGVIb3N0UG9saWN5KQordXNpbmcgbmFtZXNwYWNlIFdlYkNvcmU7
CisKK1dlYlJlc291cmNlTG9hZFNjaGVkdWxlciYgd2ViUmVzb3VyY2VMb2FkU2NoZWR1bGVyKCkK
K3sKKyAgICByZXR1cm4gc3RhdGljX2Nhc3Q8V2ViUmVzb3VyY2VMb2FkU2NoZWR1bGVyJj4oKnBs
YXRmb3JtU3RyYXRlZ2llcygpLT5sb2FkZXJTdHJhdGVneSgpKTsKK30KKworV2ViUmVzb3VyY2VM
b2FkU2NoZWR1bGVyOjpIb3N0SW5mb3JtYXRpb24qIFdlYlJlc291cmNlTG9hZFNjaGVkdWxlcjo6
aG9zdEZvclVSTChjb25zdCBVUkwmIHVybCwgQ3JlYXRlSG9zdFBvbGljeSBjcmVhdGVIb3N0UG9s
aWN5KQogewogICAgIGlmICghdXJsLnByb3RvY29sSXNJbkhUVFBGYW1pbHkoKSkKICAgICAgICAg
cmV0dXJuIG1fbm9uSFRUUFByb3RvY29sSG9zdDsKQEAgLTc1LDQzICs4MCwyMCBAQCBSZXNvdXJj
ZUxvYWRTY2hlZHVsZXI6Okhvc3RJbmZvcm1hdGlvbiogCiAgICAgcmV0dXJuIGhvc3Q7CiB9CiAK
LVJlc291cmNlTG9hZFNjaGVkdWxlciogcmVzb3VyY2VMb2FkU2NoZWR1bGVyKCkKLXsKLSAgICBB
U1NFUlQoaXNNYWluVGhyZWFkKCkpOwotICAgIHN0YXRpYyBSZXNvdXJjZUxvYWRTY2hlZHVsZXIq
IGdsb2JhbFNjaGVkdWxlciA9IG51bGxwdHI7Ci0gICAgCi0gICAgaWYgKCFnbG9iYWxTY2hlZHVs
ZXIpIHsKLSAgICAgICAgc3RhdGljIGJvb2wgaXNDYWxsaW5nT3V0VG9TdHJhdGVneSA9IGZhbHNl
OwotICAgICAgICAKLSAgICAgICAgLy8gSWYgd2UncmUgcmUtZW50ZXJpbmcgcmVzb3VyY2VMb2Fk
U2NoZWR1bGVyKCkgd2hpbGUgY2FsbGluZyBvdXQgdG8gdGhlIExvYWRlclN0cmF0ZWd5LAotICAg
ICAgICAvLyB0aGVuIHRoZSBMb2FkZXJTdHJhdGVneSBpcyB0cnlpbmcgdG8gdXNlIHRoZSBkZWZh
dWx0IHJlc291cmNlTG9hZFNjaGVkdWxlci4KLSAgICAgICAgLy8gU28gd2UnbGwgY3JlYXRlIGl0
IGhlcmUgYW5kIHN0YXJ0IHVzaW5nIGl0LgotICAgICAgICBpZiAoaXNDYWxsaW5nT3V0VG9TdHJh
dGVneSkgewotICAgICAgICAgICAgZ2xvYmFsU2NoZWR1bGVyID0gbmV3IFJlc291cmNlTG9hZFNj
aGVkdWxlcjsKLSAgICAgICAgICAgIHJldHVybiBnbG9iYWxTY2hlZHVsZXI7Ci0gICAgICAgIH0K
LSAgICAgICAgCi0gICAgICAgIFRlbXBvcmFyeUNoYW5nZTxib29sPiByZWN1cnNpb25HdWFyZChp
c0NhbGxpbmdPdXRUb1N0cmF0ZWd5LCB0cnVlKTsKLSAgICAgICAgZ2xvYmFsU2NoZWR1bGVyID0g
cGxhdGZvcm1TdHJhdGVnaWVzKCktPmxvYWRlclN0cmF0ZWd5KCktPnJlc291cmNlTG9hZFNjaGVk
dWxlcigpOwotICAgIH0KLQotICAgIHJldHVybiBnbG9iYWxTY2hlZHVsZXI7Ci19Ci0KLVJlc291
cmNlTG9hZFNjaGVkdWxlcjo6UmVzb3VyY2VMb2FkU2NoZWR1bGVyKCkKK1dlYlJlc291cmNlTG9h
ZFNjaGVkdWxlcjo6V2ViUmVzb3VyY2VMb2FkU2NoZWR1bGVyKCkKICAgICA6IG1fbm9uSFRUUFBy
b3RvY29sSG9zdChuZXcgSG9zdEluZm9ybWF0aW9uKFN0cmluZygpLCBtYXhSZXF1ZXN0c0luRmxp
Z2h0Rm9yTm9uSFRUUFByb3RvY29scykpCi0gICAgLCBtX3JlcXVlc3RUaW1lcigqdGhpcywgJlJl
c291cmNlTG9hZFNjaGVkdWxlcjo6cmVxdWVzdFRpbWVyRmlyZWQpCisgICAgLCBtX3JlcXVlc3RU
aW1lcigqdGhpcywgJldlYlJlc291cmNlTG9hZFNjaGVkdWxlcjo6cmVxdWVzdFRpbWVyRmlyZWQp
CiAgICAgLCBtX3N1c3BlbmRQZW5kaW5nUmVxdWVzdHNDb3VudCgwKQogICAgICwgbV9pc1Nlcmlh
bExvYWRpbmdFbmFibGVkKGZhbHNlKQogewogICAgIG1heFJlcXVlc3RzSW5GbGlnaHRQZXJIb3N0
ID0gaW5pdGlhbGl6ZU1heGltdW1IVFRQQ29ubmVjdGlvbkNvdW50UGVySG9zdCgpOwogfQogCi1S
ZXNvdXJjZUxvYWRTY2hlZHVsZXI6On5SZXNvdXJjZUxvYWRTY2hlZHVsZXIoKQorV2ViUmVzb3Vy
Y2VMb2FkU2NoZWR1bGVyOjp+V2ViUmVzb3VyY2VMb2FkU2NoZWR1bGVyKCkKIHsKIH0KIAotUmVm
UHRyPFN1YnJlc291cmNlTG9hZGVyPiBSZXNvdXJjZUxvYWRTY2hlZHVsZXI6OnNjaGVkdWxlU3Vi
cmVzb3VyY2VMb2FkKEZyYW1lKiBmcmFtZSwgQ2FjaGVkUmVzb3VyY2UqIHJlc291cmNlLCBjb25z
dCBSZXNvdXJjZVJlcXVlc3QmIHJlcXVlc3QsIGNvbnN0IFJlc291cmNlTG9hZGVyT3B0aW9ucyYg
b3B0aW9ucykKK1JlZlB0cjxTdWJyZXNvdXJjZUxvYWRlcj4gV2ViUmVzb3VyY2VMb2FkU2NoZWR1
bGVyOjpsb2FkUmVzb3VyY2UoRnJhbWUqIGZyYW1lLCBDYWNoZWRSZXNvdXJjZSogcmVzb3VyY2Us
IGNvbnN0IFJlc291cmNlUmVxdWVzdCYgcmVxdWVzdCwgY29uc3QgUmVzb3VyY2VMb2FkZXJPcHRp
b25zJiBvcHRpb25zKQogewogICAgIFJlZlB0cjxTdWJyZXNvdXJjZUxvYWRlcj4gbG9hZGVyID0g
U3VicmVzb3VyY2VMb2FkZXI6OmNyZWF0ZShmcmFtZSwgcmVzb3VyY2UsIHJlcXVlc3QsIG9wdGlv
bnMpOwogICAgIGlmIChsb2FkZXIpCkBAIC0xMjgsNyArMTEwLDEyIEBAIFJlZlB0cjxTdWJyZXNv
dXJjZUxvYWRlcj4gUmVzb3VyY2VMb2FkU2MKICAgICByZXR1cm4gbG9hZGVyOwogfQogCi1SZWZQ
dHI8TmV0c2NhcGVQbHVnSW5TdHJlYW1Mb2FkZXI+IFJlc291cmNlTG9hZFNjaGVkdWxlcjo6c2No
ZWR1bGVQbHVnaW5TdHJlYW1Mb2FkKEZyYW1lKiBmcmFtZSwgTmV0c2NhcGVQbHVnSW5TdHJlYW1M
b2FkZXJDbGllbnQqIGNsaWVudCwgY29uc3QgUmVzb3VyY2VSZXF1ZXN0JiByZXF1ZXN0KQordm9p
ZCBXZWJSZXNvdXJjZUxvYWRTY2hlZHVsZXI6OmxvYWRSZXNvdXJjZVN5bmNocm9ub3VzbHkoTmV0
d29ya2luZ0NvbnRleHQqIGNvbnRleHQsIHVuc2lnbmVkIGxvbmcsIGNvbnN0IFJlc291cmNlUmVx
dWVzdCYgcmVxdWVzdCwgU3RvcmVkQ3JlZGVudGlhbHMgc3RvcmVkQ3JlZGVudGlhbHMsIENsaWVu
dENyZWRlbnRpYWxQb2xpY3ksIFJlc291cmNlRXJyb3ImIGVycm9yLCBSZXNvdXJjZVJlc3BvbnNl
JiByZXNwb25zZSwgVmVjdG9yPGNoYXI+JiBkYXRhKQoreworICAgIFJlc291cmNlSGFuZGxlOjps
b2FkUmVzb3VyY2VTeW5jaHJvbm91c2x5KGNvbnRleHQsIHJlcXVlc3QsIHN0b3JlZENyZWRlbnRp
YWxzLCBlcnJvciwgcmVzcG9uc2UsIGRhdGEpOworfQorCitSZWZQdHI8TmV0c2NhcGVQbHVnSW5T
dHJlYW1Mb2FkZXI+IFdlYlJlc291cmNlTG9hZFNjaGVkdWxlcjo6c2NoZWR1bGVQbHVnaW5TdHJl
YW1Mb2FkKEZyYW1lKiBmcmFtZSwgTmV0c2NhcGVQbHVnSW5TdHJlYW1Mb2FkZXJDbGllbnQqIGNs
aWVudCwgY29uc3QgUmVzb3VyY2VSZXF1ZXN0JiByZXF1ZXN0KQogewogICAgIFJlZlB0cjxOZXRz
Y2FwZVBsdWdJblN0cmVhbUxvYWRlcj4gbG9hZGVyID0gTmV0c2NhcGVQbHVnSW5TdHJlYW1Mb2Fk
ZXI6OmNyZWF0ZShmcmFtZSwgY2xpZW50LCByZXF1ZXN0KTsKICAgICBpZiAobG9hZGVyKQpAQCAt
MTM2LDExICsxMjMsMTEgQEAgUmVmUHRyPE5ldHNjYXBlUGx1Z0luU3RyZWFtTG9hZGVyPiBSZXNv
dQogICAgIHJldHVybiBsb2FkZXI7CiB9CiAKLXZvaWQgUmVzb3VyY2VMb2FkU2NoZWR1bGVyOjpz
Y2hlZHVsZUxvYWQoUmVzb3VyY2VMb2FkZXIqIHJlc291cmNlTG9hZGVyKQordm9pZCBXZWJSZXNv
dXJjZUxvYWRTY2hlZHVsZXI6OnNjaGVkdWxlTG9hZChSZXNvdXJjZUxvYWRlciogcmVzb3VyY2VM
b2FkZXIpCiB7CiAgICAgQVNTRVJUKHJlc291cmNlTG9hZGVyKTsKIAotICAgIExPRyhSZXNvdXJj
ZUxvYWRpbmcsICJSZXNvdXJjZUxvYWRTY2hlZHVsZXI6OmxvYWQgcmVzb3VyY2UgJXAgJyVzJyIs
IHJlc291cmNlTG9hZGVyLCByZXNvdXJjZUxvYWRlci0+dXJsKCkuc3RyaW5nKCkubGF0aW4xKCku
ZGF0YSgpKTsKKyAgICBMT0coUmVzb3VyY2VMb2FkaW5nLCAiV2ViUmVzb3VyY2VMb2FkU2NoZWR1
bGVyOjpsb2FkIHJlc291cmNlICVwICclcyciLCByZXNvdXJjZUxvYWRlciwgcmVzb3VyY2VMb2Fk
ZXItPnVybCgpLnN0cmluZygpLmxhdGluMSgpLmRhdGEoKSk7CiAKICNpZiBQTEFURk9STShJT1Mp
CiAgICAgLy8gSWYgdGhlcmUncyBhIHdlYiBhcmNoaXZlIHJlc291cmNlIGZvciB0aGlzIFVSTCwg
d2UgZG9uJ3QgbmVlZCB0byBzY2hlZHVsZSB0aGUgbG9hZCBzaW5jZSBpdCB3aWxsIG5ldmVyIHRv
dWNoIHRoZSBuZXR3b3JrLgpAQCAtMTk0LDcgKzE4MSw3IEBAIHZvaWQgUmVzb3VyY2VMb2FkU2No
ZWR1bGVyOjpzY2hlZHVsZUxvYWQKICAgICBzY2hlZHVsZVNlcnZlUGVuZGluZ1JlcXVlc3RzKCk7
CiB9CiAKLXZvaWQgUmVzb3VyY2VMb2FkU2NoZWR1bGVyOjpyZW1vdmUoUmVzb3VyY2VMb2FkZXIq
IHJlc291cmNlTG9hZGVyKQordm9pZCBXZWJSZXNvdXJjZUxvYWRTY2hlZHVsZXI6OnJlbW92ZShS
ZXNvdXJjZUxvYWRlciogcmVzb3VyY2VMb2FkZXIpCiB7CiAgICAgQVNTRVJUKHJlc291cmNlTG9h
ZGVyKTsKIApAQCAtMjEzLDExICsyMDAsMTEgQEAgdm9pZCBSZXNvdXJjZUxvYWRTY2hlZHVsZXI6
OnJlbW92ZShSZXNvdQogICAgIHNjaGVkdWxlU2VydmVQZW5kaW5nUmVxdWVzdHMoKTsKIH0KIAot
dm9pZCBSZXNvdXJjZUxvYWRTY2hlZHVsZXI6OnNldERlZmVyc0xvYWRpbmcoUmVzb3VyY2VMb2Fk
ZXIqLCBib29sKQordm9pZCBXZWJSZXNvdXJjZUxvYWRTY2hlZHVsZXI6OnNldERlZmVyc0xvYWRp
bmcoUmVzb3VyY2VMb2FkZXIqLCBib29sKQogewogfQogCi12b2lkIFJlc291cmNlTG9hZFNjaGVk
dWxlcjo6Y3Jvc3NPcmlnaW5SZWRpcmVjdFJlY2VpdmVkKFJlc291cmNlTG9hZGVyKiByZXNvdXJj
ZUxvYWRlciwgY29uc3QgVVJMJiByZWRpcmVjdFVSTCkKK3ZvaWQgV2ViUmVzb3VyY2VMb2FkU2No
ZWR1bGVyOjpjcm9zc09yaWdpblJlZGlyZWN0UmVjZWl2ZWQoUmVzb3VyY2VMb2FkZXIqIHJlc291
cmNlTG9hZGVyLCBjb25zdCBVUkwmIHJlZGlyZWN0VVJMKQogewogICAgIEhvc3RJbmZvcm1hdGlv
biogb2xkSG9zdCA9IGhvc3RGb3JVUkwocmVzb3VyY2VMb2FkZXItPnVybCgpKTsKICAgICBBU1NF
UlQob2xkSG9zdCk7CkBAIC0yMzMsOSArMjIwLDkgQEAgdm9pZCBSZXNvdXJjZUxvYWRTY2hlZHVs
ZXI6OmNyb3NzT3JpZ2luUgogICAgIG9sZEhvc3QtPnJlbW92ZShyZXNvdXJjZUxvYWRlcik7CiB9
CiAKLXZvaWQgUmVzb3VyY2VMb2FkU2NoZWR1bGVyOjpzZXJ2ZVBlbmRpbmdSZXF1ZXN0cyhSZXNv
dXJjZUxvYWRQcmlvcml0eSBtaW5pbXVtUHJpb3JpdHkpCit2b2lkIFdlYlJlc291cmNlTG9hZFNj
aGVkdWxlcjo6c2VydmVQZW5kaW5nUmVxdWVzdHMoUmVzb3VyY2VMb2FkUHJpb3JpdHkgbWluaW11
bVByaW9yaXR5KQogewotICAgIExPRyhSZXNvdXJjZUxvYWRpbmcsICJSZXNvdXJjZUxvYWRTY2hl
ZHVsZXI6OnNlcnZlUGVuZGluZ1JlcXVlc3RzLiBtX3N1c3BlbmRQZW5kaW5nUmVxdWVzdHNDb3Vu
dD0lZCIsIG1fc3VzcGVuZFBlbmRpbmdSZXF1ZXN0c0NvdW50KTsgCisgICAgTE9HKFJlc291cmNl
TG9hZGluZywgIldlYlJlc291cmNlTG9hZFNjaGVkdWxlcjo6c2VydmVQZW5kaW5nUmVxdWVzdHMu
IG1fc3VzcGVuZFBlbmRpbmdSZXF1ZXN0c0NvdW50PSVkIiwgbV9zdXNwZW5kUGVuZGluZ1JlcXVl
c3RzQ291bnQpOyAKICAgICBpZiAoaXNTdXNwZW5kaW5nUGVuZGluZ1JlcXVlc3RzKCkpCiAgICAg
ICAgIHJldHVybjsKIApAQCAtMjU0LDkgKzI0MSw5IEBAIHZvaWQgUmVzb3VyY2VMb2FkU2NoZWR1
bGVyOjpzZXJ2ZVBlbmRpbmcKICAgICB9CiB9CiAKLXZvaWQgUmVzb3VyY2VMb2FkU2NoZWR1bGVy
OjpzZXJ2ZVBlbmRpbmdSZXF1ZXN0cyhIb3N0SW5mb3JtYXRpb24qIGhvc3QsIFJlc291cmNlTG9h
ZFByaW9yaXR5IG1pbmltdW1Qcmlvcml0eSkKK3ZvaWQgV2ViUmVzb3VyY2VMb2FkU2NoZWR1bGVy
OjpzZXJ2ZVBlbmRpbmdSZXF1ZXN0cyhIb3N0SW5mb3JtYXRpb24qIGhvc3QsIFJlc291cmNlTG9h
ZFByaW9yaXR5IG1pbmltdW1Qcmlvcml0eSkKIHsKLSAgICBMT0coUmVzb3VyY2VMb2FkaW5nLCAi
UmVzb3VyY2VMb2FkU2NoZWR1bGVyOjpzZXJ2ZVBlbmRpbmdSZXF1ZXN0cyBIb3N0SW5mb3JtYXRp
b24ubV9uYW1lPSclcyciLCBob3N0LT5uYW1lKCkubGF0aW4xKCkuZGF0YSgpKTsKKyAgICBMT0co
UmVzb3VyY2VMb2FkaW5nLCAiV2ViUmVzb3VyY2VMb2FkU2NoZWR1bGVyOjpzZXJ2ZVBlbmRpbmdS
ZXF1ZXN0cyBIb3N0SW5mb3JtYXRpb24ubV9uYW1lPSclcyciLCBob3N0LT5uYW1lKCkubGF0aW4x
KCkuZGF0YSgpKTsKIAogICAgIGF1dG8gcHJpb3JpdHkgPSBSZXNvdXJjZUxvYWRQcmlvcml0eTo6
SGlnaGVzdDsKICAgICB3aGlsZSAodHJ1ZSkgewpAQCAtMjg4LDEyICsyNzUsMTIgQEAgdm9pZCBS
ZXNvdXJjZUxvYWRTY2hlZHVsZXI6OnNlcnZlUGVuZGluZwogICAgIH0KIH0KIAotdm9pZCBSZXNv
dXJjZUxvYWRTY2hlZHVsZXI6OnN1c3BlbmRQZW5kaW5nUmVxdWVzdHMoKQordm9pZCBXZWJSZXNv
dXJjZUxvYWRTY2hlZHVsZXI6OnN1c3BlbmRQZW5kaW5nUmVxdWVzdHMoKQogewogICAgICsrbV9z
dXNwZW5kUGVuZGluZ1JlcXVlc3RzQ291bnQ7CiB9CiAKLXZvaWQgUmVzb3VyY2VMb2FkU2NoZWR1
bGVyOjpyZXN1bWVQZW5kaW5nUmVxdWVzdHMoKQordm9pZCBXZWJSZXNvdXJjZUxvYWRTY2hlZHVs
ZXI6OnJlc3VtZVBlbmRpbmdSZXF1ZXN0cygpCiB7CiAgICAgQVNTRVJUKG1fc3VzcGVuZFBlbmRp
bmdSZXF1ZXN0c0NvdW50KTsKICAgICAtLW1fc3VzcGVuZFBlbmRpbmdSZXF1ZXN0c0NvdW50OwpA
QCAtMzAzLDMxICsyOTAsMzEgQEAgdm9pZCBSZXNvdXJjZUxvYWRTY2hlZHVsZXI6OnJlc3VtZVBl
bmRpbgogICAgICAgICBzY2hlZHVsZVNlcnZlUGVuZGluZ1JlcXVlc3RzKCk7CiB9CiAgICAgCi12
b2lkIFJlc291cmNlTG9hZFNjaGVkdWxlcjo6c2NoZWR1bGVTZXJ2ZVBlbmRpbmdSZXF1ZXN0cygp
Cit2b2lkIFdlYlJlc291cmNlTG9hZFNjaGVkdWxlcjo6c2NoZWR1bGVTZXJ2ZVBlbmRpbmdSZXF1
ZXN0cygpCiB7Ci0gICAgTE9HKFJlc291cmNlTG9hZGluZywgIlJlc291cmNlTG9hZFNjaGVkdWxl
cjo6c2NoZWR1bGVTZXJ2ZVBlbmRpbmdSZXF1ZXN0cywgbV9yZXF1ZXN0VGltZXIuaXNBY3RpdmUo
KT0ldSIsIG1fcmVxdWVzdFRpbWVyLmlzQWN0aXZlKCkpOworICAgIExPRyhSZXNvdXJjZUxvYWRp
bmcsICJXZWJSZXNvdXJjZUxvYWRTY2hlZHVsZXI6OnNjaGVkdWxlU2VydmVQZW5kaW5nUmVxdWVz
dHMsIG1fcmVxdWVzdFRpbWVyLmlzQWN0aXZlKCk9JXUiLCBtX3JlcXVlc3RUaW1lci5pc0FjdGl2
ZSgpKTsKICAgICBpZiAoIW1fcmVxdWVzdFRpbWVyLmlzQWN0aXZlKCkpCiAgICAgICAgIG1fcmVx
dWVzdFRpbWVyLnN0YXJ0T25lU2hvdCgwKTsKIH0KIAotdm9pZCBSZXNvdXJjZUxvYWRTY2hlZHVs
ZXI6OnJlcXVlc3RUaW1lckZpcmVkKCkKK3ZvaWQgV2ViUmVzb3VyY2VMb2FkU2NoZWR1bGVyOjpy
ZXF1ZXN0VGltZXJGaXJlZCgpCiB7Ci0gICAgTE9HKFJlc291cmNlTG9hZGluZywgIlJlc291cmNl
TG9hZFNjaGVkdWxlcjo6cmVxdWVzdFRpbWVyRmlyZWRcbiIpOworICAgIExPRyhSZXNvdXJjZUxv
YWRpbmcsICJXZWJSZXNvdXJjZUxvYWRTY2hlZHVsZXI6OnJlcXVlc3RUaW1lckZpcmVkXG4iKTsK
ICAgICBzZXJ2ZVBlbmRpbmdSZXF1ZXN0cygpOwogfQogCi1SZXNvdXJjZUxvYWRTY2hlZHVsZXI6
Okhvc3RJbmZvcm1hdGlvbjo6SG9zdEluZm9ybWF0aW9uKGNvbnN0IFN0cmluZyYgbmFtZSwgdW5z
aWduZWQgbWF4UmVxdWVzdHNJbkZsaWdodCkKK1dlYlJlc291cmNlTG9hZFNjaGVkdWxlcjo6SG9z
dEluZm9ybWF0aW9uOjpIb3N0SW5mb3JtYXRpb24oY29uc3QgU3RyaW5nJiBuYW1lLCB1bnNpZ25l
ZCBtYXhSZXF1ZXN0c0luRmxpZ2h0KQogICAgIDogbV9uYW1lKG5hbWUpCiAgICAgLCBtX21heFJl
cXVlc3RzSW5GbGlnaHQobWF4UmVxdWVzdHNJbkZsaWdodCkKIHsKIH0KIAotUmVzb3VyY2VMb2Fk
U2NoZWR1bGVyOjpIb3N0SW5mb3JtYXRpb246On5Ib3N0SW5mb3JtYXRpb24oKQorV2ViUmVzb3Vy
Y2VMb2FkU2NoZWR1bGVyOjpIb3N0SW5mb3JtYXRpb246On5Ib3N0SW5mb3JtYXRpb24oKQogewog
ICAgIEFTU0VSVCghaGFzUmVxdWVzdHMoKSk7CiB9CiAKLXVuc2lnbmVkIFJlc291cmNlTG9hZFNj
aGVkdWxlcjo6SG9zdEluZm9ybWF0aW9uOjpwcmlvcml0eVRvSW5kZXgoUmVzb3VyY2VMb2FkUHJp
b3JpdHkgcHJpb3JpdHkpCit1bnNpZ25lZCBXZWJSZXNvdXJjZUxvYWRTY2hlZHVsZXI6Okhvc3RJ
bmZvcm1hdGlvbjo6cHJpb3JpdHlUb0luZGV4KFJlc291cmNlTG9hZFByaW9yaXR5IHByaW9yaXR5
KQogewogICAgIHN3aXRjaCAocHJpb3JpdHkpIHsKICAgICBjYXNlIFJlc291cmNlTG9hZFByaW9y
aXR5OjpWZXJ5TG93OgpAQCAtMzQ1LDE4ICszMzIsMTggQEAgdW5zaWduZWQgUmVzb3VyY2VMb2Fk
U2NoZWR1bGVyOjpIb3N0SW5mbwogICAgIHJldHVybiAwOwogfQogCi12b2lkIFJlc291cmNlTG9h
ZFNjaGVkdWxlcjo6SG9zdEluZm9ybWF0aW9uOjpzY2hlZHVsZShSZXNvdXJjZUxvYWRlciogcmVz
b3VyY2VMb2FkZXIsIFJlc291cmNlTG9hZFByaW9yaXR5IHByaW9yaXR5KQordm9pZCBXZWJSZXNv
dXJjZUxvYWRTY2hlZHVsZXI6Okhvc3RJbmZvcm1hdGlvbjo6c2NoZWR1bGUoUmVzb3VyY2VMb2Fk
ZXIqIHJlc291cmNlTG9hZGVyLCBSZXNvdXJjZUxvYWRQcmlvcml0eSBwcmlvcml0eSkKIHsKICAg
ICBtX3JlcXVlc3RzUGVuZGluZ1twcmlvcml0eVRvSW5kZXgocHJpb3JpdHkpXS5hcHBlbmQocmVz
b3VyY2VMb2FkZXIpOwogfQogICAgIAotdm9pZCBSZXNvdXJjZUxvYWRTY2hlZHVsZXI6Okhvc3RJ
bmZvcm1hdGlvbjo6YWRkTG9hZEluUHJvZ3Jlc3MoUmVzb3VyY2VMb2FkZXIqIHJlc291cmNlTG9h
ZGVyKQordm9pZCBXZWJSZXNvdXJjZUxvYWRTY2hlZHVsZXI6Okhvc3RJbmZvcm1hdGlvbjo6YWRk
TG9hZEluUHJvZ3Jlc3MoUmVzb3VyY2VMb2FkZXIqIHJlc291cmNlTG9hZGVyKQogewogICAgIExP
RyhSZXNvdXJjZUxvYWRpbmcsICJIb3N0SW5mb3JtYXRpb24gJyVzJyBsb2FkaW5nICclcycuIEN1
cnJlbnQgY291bnQgJWQiLCBtX25hbWUubGF0aW4xKCkuZGF0YSgpLCByZXNvdXJjZUxvYWRlci0+
dXJsKCkuc3RyaW5nKCkubGF0aW4xKCkuZGF0YSgpLCBtX3JlcXVlc3RzTG9hZGluZy5zaXplKCkp
OwogICAgIG1fcmVxdWVzdHNMb2FkaW5nLmFkZChyZXNvdXJjZUxvYWRlcik7CiB9CiAgICAgCi12
b2lkIFJlc291cmNlTG9hZFNjaGVkdWxlcjo6SG9zdEluZm9ybWF0aW9uOjpyZW1vdmUoUmVzb3Vy
Y2VMb2FkZXIqIHJlc291cmNlTG9hZGVyKQordm9pZCBXZWJSZXNvdXJjZUxvYWRTY2hlZHVsZXI6
Okhvc3RJbmZvcm1hdGlvbjo6cmVtb3ZlKFJlc291cmNlTG9hZGVyKiByZXNvdXJjZUxvYWRlcikK
IHsKICAgICBpZiAobV9yZXF1ZXN0c0xvYWRpbmcucmVtb3ZlKHJlc291cmNlTG9hZGVyKSkKICAg
ICAgICAgcmV0dXJuOwpAQCAtMzcxLDcgKzM1OCw3IEBAIHZvaWQgUmVzb3VyY2VMb2FkU2NoZWR1
bGVyOjpIb3N0SW5mb3JtYXQKICAgICB9CiB9CiAKLWJvb2wgUmVzb3VyY2VMb2FkU2NoZWR1bGVy
OjpIb3N0SW5mb3JtYXRpb246Omhhc1JlcXVlc3RzKCkgY29uc3QKK2Jvb2wgV2ViUmVzb3VyY2VM
b2FkU2NoZWR1bGVyOjpIb3N0SW5mb3JtYXRpb246Omhhc1JlcXVlc3RzKCkgY29uc3QKIHsKICAg
ICBpZiAoIW1fcmVxdWVzdHNMb2FkaW5nLmlzRW1wdHkoKSkKICAgICAgICAgcmV0dXJuIHRydWU7
CkBAIC0zODIsMTEgKzM2OSwxNiBAQCBib29sIFJlc291cmNlTG9hZFNjaGVkdWxlcjo6SG9zdElu
Zm9ybWF0CiAgICAgcmV0dXJuIGZhbHNlOwogfQogCi1ib29sIFJlc291cmNlTG9hZFNjaGVkdWxl
cjo6SG9zdEluZm9ybWF0aW9uOjpsaW1pdFJlcXVlc3RzKFJlc291cmNlTG9hZFByaW9yaXR5IHBy
aW9yaXR5KSBjb25zdCAKK2Jvb2wgV2ViUmVzb3VyY2VMb2FkU2NoZWR1bGVyOjpIb3N0SW5mb3Jt
YXRpb246OmxpbWl0UmVxdWVzdHMoUmVzb3VyY2VMb2FkUHJpb3JpdHkgcHJpb3JpdHkpIGNvbnN0
IAogewogICAgIGlmIChwcmlvcml0eSA9PSBSZXNvdXJjZUxvYWRQcmlvcml0eTo6VmVyeUxvdyAm
JiAhbV9yZXF1ZXN0c0xvYWRpbmcuaXNFbXB0eSgpKQogICAgICAgICByZXR1cm4gdHJ1ZTsKLSAg
ICByZXR1cm4gbV9yZXF1ZXN0c0xvYWRpbmcuc2l6ZSgpID49IChyZXNvdXJjZUxvYWRTY2hlZHVs
ZXIoKS0+aXNTZXJpYWxMb2FkaW5nRW5hYmxlZCgpID8gMSA6IG1fbWF4UmVxdWVzdHNJbkZsaWdo
dCk7CisgICAgcmV0dXJuIG1fcmVxdWVzdHNMb2FkaW5nLnNpemUoKSA+PSAod2ViUmVzb3VyY2VM
b2FkU2NoZWR1bGVyKCkuaXNTZXJpYWxMb2FkaW5nRW5hYmxlZCgpID8gMSA6IG1fbWF4UmVxdWVz
dHNJbkZsaWdodCk7Cit9CisKK3ZvaWQgV2ViUmVzb3VyY2VMb2FkU2NoZWR1bGVyOjpjcmVhdGVQ
aW5nSGFuZGxlKE5ldHdvcmtpbmdDb250ZXh0KiBuZXR3b3JraW5nQ29udGV4dCwgUmVzb3VyY2VS
ZXF1ZXN0JiByZXF1ZXN0LCBib29sIHNob3VsZFVzZUNyZWRlbnRpYWxTdG9yYWdlKQoreworICAg
IC8vIFBpbmdIYW5kbGUgbWFuYWdlcyBpdHMgb3duIGxpZmV0aW1lLCBkZWxldGluZyBpdHNlbGYg
d2hlbiBpdHMgcHVycG9zZSBoYXMgYmVlbiBmdWxmaWxsZWQuCisgICAgbmV3IFBpbmdIYW5kbGUo
bmV0d29ya2luZ0NvbnRleHQsIHJlcXVlc3QsIHNob3VsZFVzZUNyZWRlbnRpYWxTdG9yYWdlLCBQ
aW5nSGFuZGxlOjpVc2VzQXN5bmNDYWxsYmFja3M6Ok5vKTsKIH0KIAotfSAvLyBuYW1lc3BhY2Ug
V2ViQ29yZQpJbmRleDogU291cmNlL1dlYktpdC9XZWJDb3JlU3VwcG9ydC9XZWJSZXNvdXJjZUxv
YWRTY2hlZHVsZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L1dlYkNvcmVTdXBwb3J0
L1dlYlJlc291cmNlTG9hZFNjaGVkdWxlci5oCShyZXZpc2lvbiAxOTI4ODApCShmcm9tIFNvdXJj
ZS9XZWJDb3JlL2xvYWRlci9SZXNvdXJjZUxvYWRTY2hlZHVsZXIuaDoxOTI4ODApCisrKyBTb3Vy
Y2UvV2ViS2l0L1dlYkNvcmVTdXBwb3J0L1dlYlJlc291cmNlTG9hZFNjaGVkdWxlci5oCSh3b3Jr
aW5nIGNvcHkpCkBAIC0wLDAgKzEsMTM0IEBACisvKgorICAgIENvcHlyaWdodCAoQykgMTk5OCBM
YXJzIEtub2xsIChrbm9sbEBtcGktaGQubXBnLmRlKQorICAgIENvcHlyaWdodCAoQykgMjAwMSBE
aXJrIE11ZWxsZXIgPG11ZWxsZXJAa2RlLm9yZz4KKyAgICBDb3B5cmlnaHQgKEMpIDIwMDQsIDIw
MDYsIDIwMDcsIDIwMDggQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICAgIENvcHly
aWdodCAoQykgMjAxMCBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorCisgICAgVGhp
cyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9v
cgorICAgIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVy
YWwgUHVibGljCisgICAgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUg
Rm91bmRhdGlvbjsgZWl0aGVyCisgICAgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQg
eW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorCisgICAgVGhpcyBsaWJyYXJ5IGlzIGRp
c3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgICAgYnV0IFdJ
VEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YK
KyAgICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0Uu
ICBTZWUgdGhlIEdOVQorICAgIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9y
ZSBkZXRhaWxzLgorCisgICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUg
R05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICAgIGFsb25nIHdpdGggdGhpcyBs
aWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCisgICAg
dGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBG
aWZ0aCBGbG9vciwKKyAgICBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKyAqLworCisjaWZu
ZGVmIFJlc291cmNlTG9hZFNjaGVkdWxlcl9oCisjZGVmaW5lIFJlc291cmNlTG9hZFNjaGVkdWxl
cl9oCisKKyNpbmNsdWRlICJGcmFtZUxvYWRlclR5cGVzLmgiCisjaW5jbHVkZSAiUmVzb3VyY2VM
b2FkZXJPcHRpb25zLmgiCisjaW5jbHVkZSAiUmVzb3VyY2VMb2FkUHJpb3JpdHkuaCIKKyNpbmNs
dWRlICJUaW1lci5oIgorI2luY2x1ZGUgPGFycmF5PgorI2luY2x1ZGUgPHd0Zi9EZXF1ZS5oPgor
I2luY2x1ZGUgPHd0Zi9IYXNoTWFwLmg+CisjaW5jbHVkZSA8d3RmL0hhc2hTZXQuaD4KKyNpbmNs
dWRlIDx3dGYvTm9uY29weWFibGUuaD4KKyNpbmNsdWRlIDx3dGYvdGV4dC9TdHJpbmdIYXNoLmg+
CisjaW5jbHVkZSA8d3RmL3RleHQvV1RGU3RyaW5nLmg+CisKK25hbWVzcGFjZSBXZWJDb3JlIHsK
KworY2xhc3MgQ2FjaGVkUmVzb3VyY2U7CitjbGFzcyBGcmFtZTsKK2NsYXNzIFVSTDsKK2NsYXNz
IE5ldHNjYXBlUGx1Z0luU3RyZWFtTG9hZGVyOworY2xhc3MgTmV0c2NhcGVQbHVnSW5TdHJlYW1M
b2FkZXJDbGllbnQ7CitjbGFzcyBSZXNvdXJjZUxvYWRlcjsKK2NsYXNzIFJlc291cmNlUmVxdWVz
dDsKK2NsYXNzIFN1YnJlc291cmNlTG9hZGVyOworCitjbGFzcyBSZXNvdXJjZUxvYWRTY2hlZHVs
ZXIgeworICAgIFdURl9NQUtFX05PTkNPUFlBQkxFKFJlc291cmNlTG9hZFNjaGVkdWxlcik7IFdU
Rl9NQUtFX0ZBU1RfQUxMT0NBVEVEOworcHVibGljOgorICAgIFdFQkNPUkVfRVhQT1JUIGZyaWVu
ZCBSZXNvdXJjZUxvYWRTY2hlZHVsZXIqIHJlc291cmNlTG9hZFNjaGVkdWxlcigpOworCisgICAg
V0VCQ09SRV9FWFBPUlQgdmlydHVhbCBSZWZQdHI8U3VicmVzb3VyY2VMb2FkZXI+IHNjaGVkdWxl
U3VicmVzb3VyY2VMb2FkKEZyYW1lKiwgQ2FjaGVkUmVzb3VyY2UqLCBjb25zdCBSZXNvdXJjZVJl
cXVlc3QmLCBjb25zdCBSZXNvdXJjZUxvYWRlck9wdGlvbnMmKTsKKyAgICBXRUJDT1JFX0VYUE9S
VCB2aXJ0dWFsIFJlZlB0cjxOZXRzY2FwZVBsdWdJblN0cmVhbUxvYWRlcj4gc2NoZWR1bGVQbHVn
aW5TdHJlYW1Mb2FkKEZyYW1lKiwgTmV0c2NhcGVQbHVnSW5TdHJlYW1Mb2FkZXJDbGllbnQqLCBj
b25zdCBSZXNvdXJjZVJlcXVlc3QmKTsKKyAgICBXRUJDT1JFX0VYUE9SVCB2aXJ0dWFsIHZvaWQg
cmVtb3ZlKFJlc291cmNlTG9hZGVyKik7CisgICAgdmlydHVhbCB2b2lkIHNldERlZmVyc0xvYWRp
bmcoUmVzb3VyY2VMb2FkZXIqLCBib29sKTsKKyAgICB2aXJ0dWFsIHZvaWQgY3Jvc3NPcmlnaW5S
ZWRpcmVjdFJlY2VpdmVkKFJlc291cmNlTG9hZGVyKiwgY29uc3QgVVJMJiByZWRpcmVjdFVSTCk7
CisgICAgCisgICAgV0VCQ09SRV9FWFBPUlQgdmlydHVhbCB2b2lkIHNlcnZlUGVuZGluZ1JlcXVl
c3RzKFJlc291cmNlTG9hZFByaW9yaXR5IG1pbmltdW1Qcmlvcml0eSA9IFJlc291cmNlTG9hZFBy
aW9yaXR5OjpWZXJ5TG93KTsKKyAgICBXRUJDT1JFX0VYUE9SVCB2aXJ0dWFsIHZvaWQgc3VzcGVu
ZFBlbmRpbmdSZXF1ZXN0cygpOworICAgIFdFQkNPUkVfRVhQT1JUIHZpcnR1YWwgdm9pZCByZXN1
bWVQZW5kaW5nUmVxdWVzdHMoKTsKKyAgICAKKyAgICBib29sIGlzU2VyaWFsTG9hZGluZ0VuYWJs
ZWQoKSBjb25zdCB7IHJldHVybiBtX2lzU2VyaWFsTG9hZGluZ0VuYWJsZWQ7IH0KKyAgICB2aXJ0
dWFsIHZvaWQgc2V0U2VyaWFsTG9hZGluZ0VuYWJsZWQoYm9vbCBiKSB7IG1faXNTZXJpYWxMb2Fk
aW5nRW5hYmxlZCA9IGI7IH0KKworICAgIGNsYXNzIFN1c3BlbmRlciB7CisgICAgcHVibGljOgor
ICAgICAgICBleHBsaWNpdCBTdXNwZW5kZXIoUmVzb3VyY2VMb2FkU2NoZWR1bGVyJiBzY2hlZHVs
ZXIpIDogbV9zY2hlZHVsZXIoc2NoZWR1bGVyKSB7IG1fc2NoZWR1bGVyLnN1c3BlbmRQZW5kaW5n
UmVxdWVzdHMoKTsgfQorICAgICAgICB+U3VzcGVuZGVyKCkgeyBtX3NjaGVkdWxlci5yZXN1bWVQ
ZW5kaW5nUmVxdWVzdHMoKTsgfQorICAgIHByaXZhdGU6CisgICAgICAgIFJlc291cmNlTG9hZFNj
aGVkdWxlciYgbV9zY2hlZHVsZXI7CisgICAgfTsKKworcHJvdGVjdGVkOgorICAgIFdFQkNPUkVf
RVhQT1JUIFJlc291cmNlTG9hZFNjaGVkdWxlcigpOworICAgIFdFQkNPUkVfRVhQT1JUIHZpcnR1
YWwgflJlc291cmNlTG9hZFNjaGVkdWxlcigpOworCitwcml2YXRlOgorICAgIHZvaWQgc2NoZWR1
bGVMb2FkKFJlc291cmNlTG9hZGVyKik7CisgICAgdm9pZCBzY2hlZHVsZVNlcnZlUGVuZGluZ1Jl
cXVlc3RzKCk7CisgICAgdm9pZCByZXF1ZXN0VGltZXJGaXJlZCgpOworCisgICAgYm9vbCBpc1N1
c3BlbmRpbmdQZW5kaW5nUmVxdWVzdHMoKSBjb25zdCB7IHJldHVybiAhIW1fc3VzcGVuZFBlbmRp
bmdSZXF1ZXN0c0NvdW50OyB9CisKKyAgICBjbGFzcyBIb3N0SW5mb3JtYXRpb24geworICAgICAg
ICBXVEZfTUFLRV9OT05DT1BZQUJMRShIb3N0SW5mb3JtYXRpb24pOyBXVEZfTUFLRV9GQVNUX0FM
TE9DQVRFRDsKKyAgICBwdWJsaWM6CisgICAgICAgIEhvc3RJbmZvcm1hdGlvbihjb25zdCBTdHJp
bmcmLCB1bnNpZ25lZCk7CisgICAgICAgIH5Ib3N0SW5mb3JtYXRpb24oKTsKKyAgICAgICAgCisg
ICAgICAgIGNvbnN0IFN0cmluZyYgbmFtZSgpIGNvbnN0IHsgcmV0dXJuIG1fbmFtZTsgfQorICAg
ICAgICB2b2lkIHNjaGVkdWxlKFJlc291cmNlTG9hZGVyKiwgUmVzb3VyY2VMb2FkUHJpb3JpdHkg
PSBSZXNvdXJjZUxvYWRQcmlvcml0eTo6VmVyeUxvdyk7CisgICAgICAgIHZvaWQgYWRkTG9hZElu
UHJvZ3Jlc3MoUmVzb3VyY2VMb2FkZXIqKTsKKyAgICAgICAgdm9pZCByZW1vdmUoUmVzb3VyY2VM
b2FkZXIqKTsKKyAgICAgICAgYm9vbCBoYXNSZXF1ZXN0cygpIGNvbnN0OworICAgICAgICBib29s
IGxpbWl0UmVxdWVzdHMoUmVzb3VyY2VMb2FkUHJpb3JpdHkpIGNvbnN0OworCisgICAgICAgIHR5
cGVkZWYgRGVxdWU8UmVmUHRyPFJlc291cmNlTG9hZGVyPj4gUmVxdWVzdFF1ZXVlOworICAgICAg
ICBSZXF1ZXN0UXVldWUmIHJlcXVlc3RzUGVuZGluZyhSZXNvdXJjZUxvYWRQcmlvcml0eSBwcmlv
cml0eSkgeyByZXR1cm4gbV9yZXF1ZXN0c1BlbmRpbmdbcHJpb3JpdHlUb0luZGV4KHByaW9yaXR5
KV07IH0KKworICAgIHByaXZhdGU6CisgICAgICAgIHN0YXRpYyB1bnNpZ25lZCBwcmlvcml0eVRv
SW5kZXgoUmVzb3VyY2VMb2FkUHJpb3JpdHkpOworCisgICAgICAgIHN0ZDo6YXJyYXk8UmVxdWVz
dFF1ZXVlLCByZXNvdXJjZUxvYWRQcmlvcml0eUNvdW50PiBtX3JlcXVlc3RzUGVuZGluZzsKKyAg
ICAgICAgdHlwZWRlZiBIYXNoU2V0PFJlZlB0cjxSZXNvdXJjZUxvYWRlcj4+IFJlcXVlc3RNYXA7
CisgICAgICAgIFJlcXVlc3RNYXAgbV9yZXF1ZXN0c0xvYWRpbmc7CisgICAgICAgIGNvbnN0IFN0
cmluZyBtX25hbWU7CisgICAgICAgIGNvbnN0IHVuc2lnbmVkIG1fbWF4UmVxdWVzdHNJbkZsaWdo
dDsKKyAgICB9OworCisgICAgZW51bSBDcmVhdGVIb3N0UG9saWN5IHsKKyAgICAgICAgQ3JlYXRl
SWZOb3RGb3VuZCwKKyAgICAgICAgRmluZE9ubHkKKyAgICB9OworICAgIAorICAgIEhvc3RJbmZv
cm1hdGlvbiogaG9zdEZvclVSTChjb25zdCBVUkwmLCBDcmVhdGVIb3N0UG9saWN5ID0gRmluZE9u
bHkpOworICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgc2VydmVQZW5kaW5nUmVxdWVzdHMoSG9zdElu
Zm9ybWF0aW9uKiwgUmVzb3VyY2VMb2FkUHJpb3JpdHkpOworCisgICAgdHlwZWRlZiBIYXNoTWFw
PFN0cmluZywgSG9zdEluZm9ybWF0aW9uKiwgU3RyaW5nSGFzaD4gSG9zdE1hcDsKKyAgICBIb3N0
TWFwIG1faG9zdHM7CisgICAgSG9zdEluZm9ybWF0aW9uKiBtX25vbkhUVFBQcm90b2NvbEhvc3Q7
CisgICAgICAgIAorICAgIFRpbWVyIG1fcmVxdWVzdFRpbWVyOworCisgICAgdW5zaWduZWQgbV9z
dXNwZW5kUGVuZGluZ1JlcXVlc3RzQ291bnQ7CisgICAgYm9vbCBtX2lzU2VyaWFsTG9hZGluZ0Vu
YWJsZWQ7Cit9OworCitXRUJDT1JFX0VYUE9SVCBSZXNvdXJjZUxvYWRTY2hlZHVsZXIqIHJlc291
cmNlTG9hZFNjaGVkdWxlcigpOworCit9CisKKyNlbmRpZgpJbmRleDogU291cmNlL1dlYktpdC9X
ZWJDb3JlU3VwcG9ydC9XZWJSZXNvdXJjZUxvYWRTY2hlZHVsZXIuaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV2ViS2l0L1dlYkNvcmVTdXBwb3J0L1dlYlJlc291cmNlTG9hZFNjaGVkdWxlci5oCSh3
b3JraW5nIGNvcHkpCisrKyBTb3VyY2UvV2ViS2l0L1dlYkNvcmVTdXBwb3J0L1dlYlJlc291cmNl
TG9hZFNjaGVkdWxlci5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDcgKzEsNyBAQAogLyoKICAgICBD
b3B5cmlnaHQgKEMpIDE5OTggTGFycyBLbm9sbCAoa25vbGxAbXBpLWhkLm1wZy5kZSkKICAgICBD
b3B5cmlnaHQgKEMpIDIwMDEgRGlyayBNdWVsbGVyIDxtdWVsbGVyQGtkZS5vcmc+Ci0gICAgQ29w
eXJpZ2h0IChDKSAyMDA0LCAyMDA2LCAyMDA3LCAyMDA4IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KKyAgICBDb3B5cmlnaHQgKEMpIDIwMDQsIDIwMDYtMjAwOCwgMjAxNSBBcHBsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgICAgQ29weXJpZ2h0IChDKSAyMDEwIEdvb2dsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAKICAgICBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0
d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCkBAIC0yMCwxMyArMjAsMTQgQEAK
ICAgICBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KICAqLwogCi0jaWZuZGVmIFJlc291cmNl
TG9hZFNjaGVkdWxlcl9oCi0jZGVmaW5lIFJlc291cmNlTG9hZFNjaGVkdWxlcl9oCisjaWZuZGVm
IFdlYlJlc291cmNlTG9hZFNjaGVkdWxlcl9oCisjZGVmaW5lIFdlYlJlc291cmNlTG9hZFNjaGVk
dWxlcl9oCiAKLSNpbmNsdWRlICJGcmFtZUxvYWRlclR5cGVzLmgiCi0jaW5jbHVkZSAiUmVzb3Vy
Y2VMb2FkZXJPcHRpb25zLmgiCi0jaW5jbHVkZSAiUmVzb3VyY2VMb2FkUHJpb3JpdHkuaCIKLSNp
bmNsdWRlICJUaW1lci5oIgorI2luY2x1ZGUgPFdlYkNvcmUvRnJhbWVMb2FkZXJUeXBlcy5oPgor
I2luY2x1ZGUgPFdlYkNvcmUvTG9hZGVyU3RyYXRlZ3kuaD4KKyNpbmNsdWRlIDxXZWJDb3JlL1Jl
c291cmNlTG9hZFByaW9yaXR5Lmg+CisjaW5jbHVkZSA8V2ViQ29yZS9SZXNvdXJjZUxvYWRlck9w
dGlvbnMuaD4KKyNpbmNsdWRlIDxXZWJDb3JlL1RpbWVyLmg+CiAjaW5jbHVkZSA8YXJyYXk+CiAj
aW5jbHVkZSA8d3RmL0RlcXVlLmg+CiAjaW5jbHVkZSA8d3RmL0hhc2hNYXAuaD4KQEAgLTM1LDQ5
ICszNiwzNyBAQAogI2luY2x1ZGUgPHd0Zi90ZXh0L1N0cmluZ0hhc2guaD4KICNpbmNsdWRlIDx3
dGYvdGV4dC9XVEZTdHJpbmcuaD4KIAotbmFtZXNwYWNlIFdlYkNvcmUgeworY2xhc3MgV2ViUmVz
b3VyY2VMb2FkU2NoZWR1bGVyOwogCi1jbGFzcyBDYWNoZWRSZXNvdXJjZTsKLWNsYXNzIEZyYW1l
OwotY2xhc3MgVVJMOwotY2xhc3MgTmV0c2NhcGVQbHVnSW5TdHJlYW1Mb2FkZXI7Ci1jbGFzcyBO
ZXRzY2FwZVBsdWdJblN0cmVhbUxvYWRlckNsaWVudDsKLWNsYXNzIFJlc291cmNlTG9hZGVyOwot
Y2xhc3MgUmVzb3VyY2VSZXF1ZXN0OwotY2xhc3MgU3VicmVzb3VyY2VMb2FkZXI7CitXZWJSZXNv
dXJjZUxvYWRTY2hlZHVsZXImIHdlYlJlc291cmNlTG9hZFNjaGVkdWxlcigpOwogCi1jbGFzcyBS
ZXNvdXJjZUxvYWRTY2hlZHVsZXIgewotICAgIFdURl9NQUtFX05PTkNPUFlBQkxFKFJlc291cmNl
TG9hZFNjaGVkdWxlcik7IFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOworY2xhc3MgV2ViUmVzb3Vy
Y2VMb2FkU2NoZWR1bGVyIDogcHVibGljIFdlYkNvcmU6OkxvYWRlclN0cmF0ZWd5IHsKKyAgICBX
VEZfTUFLRV9OT05DT1BZQUJMRShXZWJSZXNvdXJjZUxvYWRTY2hlZHVsZXIpOyBXVEZfTUFLRV9G
QVNUX0FMTE9DQVRFRDsKIHB1YmxpYzoKLSAgICBXRUJDT1JFX0VYUE9SVCBmcmllbmQgUmVzb3Vy
Y2VMb2FkU2NoZWR1bGVyKiByZXNvdXJjZUxvYWRTY2hlZHVsZXIoKTsKKyAgICBXZWJSZXNvdXJj
ZUxvYWRTY2hlZHVsZXIoKTsKIAotICAgIFdFQkNPUkVfRVhQT1JUIHZpcnR1YWwgUmVmUHRyPFN1
YnJlc291cmNlTG9hZGVyPiBzY2hlZHVsZVN1YnJlc291cmNlTG9hZChGcmFtZSosIENhY2hlZFJl
c291cmNlKiwgY29uc3QgUmVzb3VyY2VSZXF1ZXN0JiwgY29uc3QgUmVzb3VyY2VMb2FkZXJPcHRp
b25zJik7Ci0gICAgV0VCQ09SRV9FWFBPUlQgdmlydHVhbCBSZWZQdHI8TmV0c2NhcGVQbHVnSW5T
dHJlYW1Mb2FkZXI+IHNjaGVkdWxlUGx1Z2luU3RyZWFtTG9hZChGcmFtZSosIE5ldHNjYXBlUGx1
Z0luU3RyZWFtTG9hZGVyQ2xpZW50KiwgY29uc3QgUmVzb3VyY2VSZXF1ZXN0Jik7Ci0gICAgV0VC
Q09SRV9FWFBPUlQgdmlydHVhbCB2b2lkIHJlbW92ZShSZXNvdXJjZUxvYWRlciopOwotICAgIHZp
cnR1YWwgdm9pZCBzZXREZWZlcnNMb2FkaW5nKFJlc291cmNlTG9hZGVyKiwgYm9vbCk7Ci0gICAg
dmlydHVhbCB2b2lkIGNyb3NzT3JpZ2luUmVkaXJlY3RSZWNlaXZlZChSZXNvdXJjZUxvYWRlcios
IGNvbnN0IFVSTCYgcmVkaXJlY3RVUkwpOwotICAgIAotICAgIFdFQkNPUkVfRVhQT1JUIHZpcnR1
YWwgdm9pZCBzZXJ2ZVBlbmRpbmdSZXF1ZXN0cyhSZXNvdXJjZUxvYWRQcmlvcml0eSBtaW5pbXVt
UHJpb3JpdHkgPSBSZXNvdXJjZUxvYWRQcmlvcml0eTo6VmVyeUxvdyk7Ci0gICAgV0VCQ09SRV9F
WFBPUlQgdmlydHVhbCB2b2lkIHN1c3BlbmRQZW5kaW5nUmVxdWVzdHMoKTsKLSAgICBXRUJDT1JF
X0VYUE9SVCB2aXJ0dWFsIHZvaWQgcmVzdW1lUGVuZGluZ1JlcXVlc3RzKCk7CisgICAgUmVmUHRy
PFdlYkNvcmU6OlN1YnJlc291cmNlTG9hZGVyPiBsb2FkUmVzb3VyY2UoV2ViQ29yZTo6RnJhbWUq
LCBXZWJDb3JlOjpDYWNoZWRSZXNvdXJjZSosIGNvbnN0IFdlYkNvcmU6OlJlc291cmNlUmVxdWVz
dCYsIGNvbnN0IFdlYkNvcmU6OlJlc291cmNlTG9hZGVyT3B0aW9ucyYpIG92ZXJyaWRlOworICAg
IHZvaWQgbG9hZFJlc291cmNlU3luY2hyb25vdXNseShXZWJDb3JlOjpOZXR3b3JraW5nQ29udGV4
dCosIHVuc2lnbmVkIGxvbmcsIGNvbnN0IFdlYkNvcmU6OlJlc291cmNlUmVxdWVzdCYsIFdlYkNv
cmU6OlN0b3JlZENyZWRlbnRpYWxzLCBXZWJDb3JlOjpDbGllbnRDcmVkZW50aWFsUG9saWN5LCBX
ZWJDb3JlOjpSZXNvdXJjZUVycm9yJiwgV2ViQ29yZTo6UmVzb3VyY2VSZXNwb25zZSYsIFZlY3Rv
cjxjaGFyPiYpIG92ZXJyaWRlOworICAgIHZvaWQgcmVtb3ZlKFdlYkNvcmU6OlJlc291cmNlTG9h
ZGVyKikgb3ZlcnJpZGU7CisgICAgdm9pZCBzZXREZWZlcnNMb2FkaW5nKFdlYkNvcmU6OlJlc291
cmNlTG9hZGVyKiwgYm9vbCkgb3ZlcnJpZGU7CisgICAgdm9pZCBjcm9zc09yaWdpblJlZGlyZWN0
UmVjZWl2ZWQoV2ViQ29yZTo6UmVzb3VyY2VMb2FkZXIqLCBjb25zdCBXZWJDb3JlOjpVUkwmIHJl
ZGlyZWN0VVJMKSBvdmVycmlkZTsKICAgICAKKyAgICB2b2lkIHNlcnZlUGVuZGluZ1JlcXVlc3Rz
KFdlYkNvcmU6OlJlc291cmNlTG9hZFByaW9yaXR5IG1pbmltdW1Qcmlvcml0eSA9IFdlYkNvcmU6
OlJlc291cmNlTG9hZFByaW9yaXR5OjpWZXJ5TG93KSBvdmVycmlkZTsKKyAgICB2b2lkIHN1c3Bl
bmRQZW5kaW5nUmVxdWVzdHMoKSBvdmVycmlkZTsKKyAgICB2b2lkIHJlc3VtZVBlbmRpbmdSZXF1
ZXN0cygpIG92ZXJyaWRlOworCisgICAgdm9pZCBjcmVhdGVQaW5nSGFuZGxlKFdlYkNvcmU6Ok5l
dHdvcmtpbmdDb250ZXh0KiwgV2ViQ29yZTo6UmVzb3VyY2VSZXF1ZXN0JiwgYm9vbCBzaG91bGRV
c2VDcmVkZW50aWFsU3RvcmFnZSkgb3ZlcnJpZGU7CisKICAgICBib29sIGlzU2VyaWFsTG9hZGlu
Z0VuYWJsZWQoKSBjb25zdCB7IHJldHVybiBtX2lzU2VyaWFsTG9hZGluZ0VuYWJsZWQ7IH0KLSAg
ICB2aXJ0dWFsIHZvaWQgc2V0U2VyaWFsTG9hZGluZ0VuYWJsZWQoYm9vbCBiKSB7IG1faXNTZXJp
YWxMb2FkaW5nRW5hYmxlZCA9IGI7IH0KKyAgICB2b2lkIHNldFNlcmlhbExvYWRpbmdFbmFibGVk
KGJvb2wgYikgeyBtX2lzU2VyaWFsTG9hZGluZ0VuYWJsZWQgPSBiOyB9CiAKLSAgICBjbGFzcyBT
dXNwZW5kZXIgewotICAgIHB1YmxpYzoKLSAgICAgICAgZXhwbGljaXQgU3VzcGVuZGVyKFJlc291
cmNlTG9hZFNjaGVkdWxlciYgc2NoZWR1bGVyKSA6IG1fc2NoZWR1bGVyKHNjaGVkdWxlcikgeyBt
X3NjaGVkdWxlci5zdXNwZW5kUGVuZGluZ1JlcXVlc3RzKCk7IH0KLSAgICAgICAgflN1c3BlbmRl
cigpIHsgbV9zY2hlZHVsZXIucmVzdW1lUGVuZGluZ1JlcXVlc3RzKCk7IH0KLSAgICBwcml2YXRl
OgotICAgICAgICBSZXNvdXJjZUxvYWRTY2hlZHVsZXImIG1fc2NoZWR1bGVyOwotICAgIH07Cisg
ICAgUmVmUHRyPFdlYkNvcmU6Ok5ldHNjYXBlUGx1Z0luU3RyZWFtTG9hZGVyPiBzY2hlZHVsZVBs
dWdpblN0cmVhbUxvYWQoV2ViQ29yZTo6RnJhbWUqLCBXZWJDb3JlOjpOZXRzY2FwZVBsdWdJblN0
cmVhbUxvYWRlckNsaWVudCosIGNvbnN0IFdlYkNvcmU6OlJlc291cmNlUmVxdWVzdCYpOwogCiBw
cm90ZWN0ZWQ6Ci0gICAgV0VCQ09SRV9FWFBPUlQgUmVzb3VyY2VMb2FkU2NoZWR1bGVyKCk7Ci0g
ICAgV0VCQ09SRV9FWFBPUlQgdmlydHVhbCB+UmVzb3VyY2VMb2FkU2NoZWR1bGVyKCk7CisgICAg
dmlydHVhbCB+V2ViUmVzb3VyY2VMb2FkU2NoZWR1bGVyKCk7CiAKIHByaXZhdGU6Ci0gICAgdm9p
ZCBzY2hlZHVsZUxvYWQoUmVzb3VyY2VMb2FkZXIqKTsKKyAgICB2b2lkIHNjaGVkdWxlTG9hZChX
ZWJDb3JlOjpSZXNvdXJjZUxvYWRlciopOwogICAgIHZvaWQgc2NoZWR1bGVTZXJ2ZVBlbmRpbmdS
ZXF1ZXN0cygpOwogICAgIHZvaWQgcmVxdWVzdFRpbWVyRmlyZWQoKTsKIApAQCAtOTAsMjAgKzc5
LDIwIEBAIHByaXZhdGU6CiAgICAgICAgIH5Ib3N0SW5mb3JtYXRpb24oKTsKICAgICAgICAgCiAg
ICAgICAgIGNvbnN0IFN0cmluZyYgbmFtZSgpIGNvbnN0IHsgcmV0dXJuIG1fbmFtZTsgfQotICAg
ICAgICB2b2lkIHNjaGVkdWxlKFJlc291cmNlTG9hZGVyKiwgUmVzb3VyY2VMb2FkUHJpb3JpdHkg
PSBSZXNvdXJjZUxvYWRQcmlvcml0eTo6VmVyeUxvdyk7Ci0gICAgICAgIHZvaWQgYWRkTG9hZElu
UHJvZ3Jlc3MoUmVzb3VyY2VMb2FkZXIqKTsKLSAgICAgICAgdm9pZCByZW1vdmUoUmVzb3VyY2VM
b2FkZXIqKTsKKyAgICAgICAgdm9pZCBzY2hlZHVsZShXZWJDb3JlOjpSZXNvdXJjZUxvYWRlcios
IFdlYkNvcmU6OlJlc291cmNlTG9hZFByaW9yaXR5ID0gV2ViQ29yZTo6UmVzb3VyY2VMb2FkUHJp
b3JpdHk6OlZlcnlMb3cpOworICAgICAgICB2b2lkIGFkZExvYWRJblByb2dyZXNzKFdlYkNvcmU6
OlJlc291cmNlTG9hZGVyKik7CisgICAgICAgIHZvaWQgcmVtb3ZlKFdlYkNvcmU6OlJlc291cmNl
TG9hZGVyKik7CiAgICAgICAgIGJvb2wgaGFzUmVxdWVzdHMoKSBjb25zdDsKLSAgICAgICAgYm9v
bCBsaW1pdFJlcXVlc3RzKFJlc291cmNlTG9hZFByaW9yaXR5KSBjb25zdDsKKyAgICAgICAgYm9v
bCBsaW1pdFJlcXVlc3RzKFdlYkNvcmU6OlJlc291cmNlTG9hZFByaW9yaXR5KSBjb25zdDsKIAot
ICAgICAgICB0eXBlZGVmIERlcXVlPFJlZlB0cjxSZXNvdXJjZUxvYWRlcj4+IFJlcXVlc3RRdWV1
ZTsKLSAgICAgICAgUmVxdWVzdFF1ZXVlJiByZXF1ZXN0c1BlbmRpbmcoUmVzb3VyY2VMb2FkUHJp
b3JpdHkgcHJpb3JpdHkpIHsgcmV0dXJuIG1fcmVxdWVzdHNQZW5kaW5nW3ByaW9yaXR5VG9JbmRl
eChwcmlvcml0eSldOyB9CisgICAgICAgIHR5cGVkZWYgRGVxdWU8UmVmUHRyPFdlYkNvcmU6OlJl
c291cmNlTG9hZGVyPj4gUmVxdWVzdFF1ZXVlOworICAgICAgICBSZXF1ZXN0UXVldWUmIHJlcXVl
c3RzUGVuZGluZyhXZWJDb3JlOjpSZXNvdXJjZUxvYWRQcmlvcml0eSBwcmlvcml0eSkgeyByZXR1
cm4gbV9yZXF1ZXN0c1BlbmRpbmdbcHJpb3JpdHlUb0luZGV4KHByaW9yaXR5KV07IH0KIAogICAg
IHByaXZhdGU6Ci0gICAgICAgIHN0YXRpYyB1bnNpZ25lZCBwcmlvcml0eVRvSW5kZXgoUmVzb3Vy
Y2VMb2FkUHJpb3JpdHkpOworICAgICAgICBzdGF0aWMgdW5zaWduZWQgcHJpb3JpdHlUb0luZGV4
KFdlYkNvcmU6OlJlc291cmNlTG9hZFByaW9yaXR5KTsKIAotICAgICAgICBzdGQ6OmFycmF5PFJl
cXVlc3RRdWV1ZSwgcmVzb3VyY2VMb2FkUHJpb3JpdHlDb3VudD4gbV9yZXF1ZXN0c1BlbmRpbmc7
Ci0gICAgICAgIHR5cGVkZWYgSGFzaFNldDxSZWZQdHI8UmVzb3VyY2VMb2FkZXI+PiBSZXF1ZXN0
TWFwOworICAgICAgICBzdGQ6OmFycmF5PFJlcXVlc3RRdWV1ZSwgV2ViQ29yZTo6cmVzb3VyY2VM
b2FkUHJpb3JpdHlDb3VudD4gbV9yZXF1ZXN0c1BlbmRpbmc7CisgICAgICAgIHR5cGVkZWYgSGFz
aFNldDxSZWZQdHI8V2ViQ29yZTo6UmVzb3VyY2VMb2FkZXI+PiBSZXF1ZXN0TWFwOwogICAgICAg
ICBSZXF1ZXN0TWFwIG1fcmVxdWVzdHNMb2FkaW5nOwogICAgICAgICBjb25zdCBTdHJpbmcgbV9u
YW1lOwogICAgICAgICBjb25zdCB1bnNpZ25lZCBtX21heFJlcXVlc3RzSW5GbGlnaHQ7CkBAIC0x
MTQsMjEgKzEwMywxNyBAQCBwcml2YXRlOgogICAgICAgICBGaW5kT25seQogICAgIH07CiAgICAg
Ci0gICAgSG9zdEluZm9ybWF0aW9uKiBob3N0Rm9yVVJMKGNvbnN0IFVSTCYsIENyZWF0ZUhvc3RQ
b2xpY3kgPSBGaW5kT25seSk7Ci0gICAgV0VCQ09SRV9FWFBPUlQgdm9pZCBzZXJ2ZVBlbmRpbmdS
ZXF1ZXN0cyhIb3N0SW5mb3JtYXRpb24qLCBSZXNvdXJjZUxvYWRQcmlvcml0eSk7CisgICAgSG9z
dEluZm9ybWF0aW9uKiBob3N0Rm9yVVJMKGNvbnN0IFdlYkNvcmU6OlVSTCYsIENyZWF0ZUhvc3RQ
b2xpY3kgPSBGaW5kT25seSk7CisgICAgV0VCQ09SRV9FWFBPUlQgdm9pZCBzZXJ2ZVBlbmRpbmdS
ZXF1ZXN0cyhIb3N0SW5mb3JtYXRpb24qLCBXZWJDb3JlOjpSZXNvdXJjZUxvYWRQcmlvcml0eSk7
CiAKICAgICB0eXBlZGVmIEhhc2hNYXA8U3RyaW5nLCBIb3N0SW5mb3JtYXRpb24qLCBTdHJpbmdI
YXNoPiBIb3N0TWFwOwogICAgIEhvc3RNYXAgbV9ob3N0czsKICAgICBIb3N0SW5mb3JtYXRpb24q
IG1fbm9uSFRUUFByb3RvY29sSG9zdDsKICAgICAgICAgCi0gICAgVGltZXIgbV9yZXF1ZXN0VGlt
ZXI7CisgICAgV2ViQ29yZTo6VGltZXIgbV9yZXF1ZXN0VGltZXI7CiAKICAgICB1bnNpZ25lZCBt
X3N1c3BlbmRQZW5kaW5nUmVxdWVzdHNDb3VudDsKICAgICBib29sIG1faXNTZXJpYWxMb2FkaW5n
RW5hYmxlZDsKIH07CiAKLVdFQkNPUkVfRVhQT1JUIFJlc291cmNlTG9hZFNjaGVkdWxlciogcmVz
b3VyY2VMb2FkU2NoZWR1bGVyKCk7Ci0KLX0KLQogI2VuZGlmCkluZGV4OiBTb3VyY2UvV2ViS2l0
L1dlYktpdC52Y3hwcm9qL1dlYktpdC9XZWJLaXQudmN4cHJvago9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvV2ViS2l0L1dlYktpdC52Y3hwcm9qL1dlYktpdC9XZWJLaXQudmN4cHJvagkocmV2aXNpb24g
MTkyODgwKQorKysgU291cmNlL1dlYktpdC9XZWJLaXQudmN4cHJvai9XZWJLaXQvV2ViS2l0LnZj
eHByb2oJKHdvcmtpbmcgY29weSkKQEAgLTMxNCw2ICszMTQsNyBAQAogICAgIDxDbENvbXBpbGUg
SW5jbHVkZT0iLi5cLi5cU3RvcmFnZVxXZWJTdG9yYWdlTmFtZXNwYWNlUHJvdmlkZXIuY3BwIiAv
PgogICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cLi5cY2ZcV2ViQ29yZVN1cHBvcnRcV2ViSW5z
cGVjdG9yQ2xpZW50Q0YuY3BwIiAvPgogICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cLi5cV2Vi
Q29yZVN1cHBvcnRcV2ViVmlld0dyb3VwLmNwcCIgLz4KKyAgICA8Q2xDb21waWxlIEluY2x1ZGU9
Ii4uXC4uXFdlYkNvcmVTdXBwb3J0XFdlYlJlc291cmNlTG9hZFNjaGVkdWxlci5jcHAiIC8+CiAg
ICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlwuLlx3aW5cUGx1Z2luc1xucGFwaS5jcHAiIC8+CiAg
ICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlwuLlx3aW5cUGx1Z2luc1xQbHVnaW5EYXRhYmFzZS5j
cHAiIC8+CiAgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlwuLlx3aW5cUGx1Z2luc1xQbHVnaW5E
ZWJ1Zy5jcHAiIC8+CkBAIC00NjksNiArNDcwLDcgQEAKICAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9
Ii4uXC4uXFN0b3JhZ2VcV2ViRGF0YWJhc2VQcm92aWRlci5oIiAvPgogICAgIDxDbEluY2x1ZGUg
SW5jbHVkZT0iLi5cLi5cU3RvcmFnZVxXZWJTdG9yYWdlTmFtZXNwYWNlUHJvdmlkZXIuaCIgLz4K
ICAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXC4uXFdlYkNvcmVTdXBwb3J0XFdlYlZpZXdHcm91
cC5oIiAvPgorICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cLi5cV2ViQ29yZVN1cHBvcnRcV2Vi
UmVzb3VyY2VMb2FkU2NoZWR1bGVyLmgiIC8+CiAgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlwu
Llx3aW5cUGx1Z2luc1xQbHVnaW5EYXRhYmFzZS5oIiAvPgogICAgIDxDbEluY2x1ZGUgSW5jbHVk
ZT0iLi5cLi5cd2luXFBsdWdpbnNcUGx1Z2luRGVidWcuaCIgLz4KICAgICA8Q2xJbmNsdWRlIElu
Y2x1ZGU9Ii4uXC4uXHdpblxQbHVnaW5zXFBsdWdpblBhY2thZ2UuaCIgLz4KSW5kZXg6IFNvdXJj
ZS9XZWJLaXQvV2ViS2l0Lnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1dlYktpdC9XZWJLaXQueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagkocmV2aXNpb24g
MTkyODgwKQorKysgU291cmNlL1dlYktpdC9XZWJLaXQueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJv
agkod29ya2luZyBjb3B5KQpAQCAtNDU1LDYgKzQ1NSw4IEBACiAJCUUxNTY2MzE5MEZCNjFDMUYw
MEMxOTlDQSAvKiBXZWJEb3dubG9hZC5tbSBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IEUxNTY2MzE4MEZCNjFDMUYwMEMxOTlDQSAvKiBXZWJEb3dubG9hZC5t
bSAqLzsgfTsKIAkJRTE2OTgzNjIxMTM0NkQxQjAwODk0MTE1IC8qIFByb3h5UnVudGltZU9iamVj
dC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRTE2OTgz
NjExMTM0NkQxQjAwODk0MTE1IC8qIFByb3h5UnVudGltZU9iamVjdC5oICovOyB9OwogCQlFMTY5
ODM2QzExMzQ2RDU2MDA4OTQxMTUgLyogUHJveHlSdW50aW1lT2JqZWN0Lm1tIGluIFNvdXJjZXMg
Ki8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRTE2OTgzNkIxMTM0NkQ1NjAwODk0
MTE1IC8qIFByb3h5UnVudGltZU9iamVjdC5tbSAqLzsgfTsKKwkJRTRBRUY5N0IxQzBERjRCQzAw
QjAxNzI3IC8qIFdlYlJlc291cmNlTG9hZFNjaGVkdWxlci5jcHAgaW4gU291cmNlcyAqLyA9IHtp
c2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBFNEFFRjk3OTFDMERGNEJDMDBCMDE3MjcgLyog
V2ViUmVzb3VyY2VMb2FkU2NoZWR1bGVyLmNwcCAqLzsgfTsKKwkJRTRBRUY5N0MxQzBERjRCQzAw
QjAxNzI3IC8qIFdlYlJlc291cmNlTG9hZFNjaGVkdWxlci5oIGluIEhlYWRlcnMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRTRBRUY5N0ExQzBERjRCQzAwQjAxNzI3IC8qIFdl
YlJlc291cmNlTG9hZFNjaGVkdWxlci5oICovOyB9OwogCQlFRDVCOTUyNDExMUI3MjVBMDA0NzIy
OTggLyogV2ViTG9jYWxpemFibGVTdHJpbmdzLm1tIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gRUQ1Qjk1MjMxMTFCNzI1QTAwNDcyMjk4IC8qIFdlYkxvY2Fs
aXphYmxlU3RyaW5ncy5tbSAqLzsgfTsKIAkJRUQ3RjZEOEIwOTgwNjgzNTAwQzIzNUVEIC8qIFdl
Yk5TRGF0YUV4dHJhc1ByaXZhdGUuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmls
ZTsgZmlsZVJlZiA9IEVEN0Y2RDhBMDk4MDY4MzUwMEMyMzVFRCAvKiBXZWJOU0RhdGFFeHRyYXNQ
cml2YXRlLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsK
IAkJRjgzNEFBRDcwRTY0QjFDNzAwRTI3MzdDIC8qIFdlYlRleHRJdGVyYXRvci5oIGluIEhlYWRl
cnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRjgzNEFBRDUwRTY0QjFDNzAw
RTI3MzdDIC8qIFdlYlRleHRJdGVyYXRvci5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0g
KFByaXZhdGUsICk7IH07IH07CkBAIC04NjgsNiArODcwLDggQEAKIAkJRTE1NjYzMTgwRkI2MUMx
RjAwQzE5OUNBIC8qIFdlYkRvd25sb2FkLm1tICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAub2Jq
Y3BwOyBwYXRoID0gV2ViRG93bmxvYWQubW07IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJ
CUUxNjk4MzYxMTEzNDZEMUIwMDg5NDExNSAvKiBQcm94eVJ1bnRpbWVPYmplY3QuaCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gUHJveHlSdW50aW1lT2JqZWN0Lmg7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CiAJCUUxNjk4MzZCMTEzNDZENTYwMDg5NDExNSAvKiBQcm94eVJ1
bnRpbWVPYmplY3QubW0gKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5vYmpjcHA7IHBhdGggPSBQ
cm94eVJ1bnRpbWVPYmplY3QubW07IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUU0QUVG
OTc5MUMwREY0QkMwMEIwMTcyNyAvKiBXZWJSZXNvdXJjZUxvYWRTY2hlZHVsZXIuY3BwICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBuYW1lID0gV2ViUmVzb3VyY2VMb2FkU2NoZWR1bGVy
LmNwcDsgcGF0aCA9IFdlYkNvcmVTdXBwb3J0L1dlYlJlc291cmNlTG9hZFNjaGVkdWxlci5jcHA7
IHNvdXJjZVRyZWUgPSBTT1VSQ0VfUk9PVDsgfTsKKwkJRTRBRUY5N0ExQzBERjRCQzAwQjAxNzI3
IC8qIFdlYlJlc291cmNlTG9hZFNjaGVkdWxlci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7
IG5hbWUgPSBXZWJSZXNvdXJjZUxvYWRTY2hlZHVsZXIuaDsgcGF0aCA9IFdlYkNvcmVTdXBwb3J0
L1dlYlJlc291cmNlTG9hZFNjaGVkdWxlci5oOyBzb3VyY2VUcmVlID0gU09VUkNFX1JPT1Q7IH07
CiAJCUVEMjFCOTgxMDUyOEY3QUEwMDMyOTlBQyAvKiBXZWJEb2N1bWVudEludGVybmFsLmggKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgaW5kZW50V2lkdGgg
PSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gV2ViRG9jdW1l
bnRJbnRlcm5hbC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB0YWJXaWR0aCA9IDg7IHVzZXNU
YWJzID0gMDsgfTsKIAkJRUQyQjI0NzQwMzNBMkRBODAwQzFBNTI2IC8qIFdlYk5TUGFzdGVib2Fy
ZEV4dHJhcy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7
IGluZGVudFdpZHRoID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0
aCA9IFdlYk5TUGFzdGVib2FyZEV4dHJhcy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB0YWJX
aWR0aCA9IDg7IHVzZXNUYWJzID0gMDsgfTsKIAkJRUQyQjI0NzUwMzNBMkRBODAwQzFBNTI2IC8q
IFdlYk5TUGFzdGVib2FyZEV4dHJhcy5tbSAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSA0OyBpbmRlbnRXaWR0aCA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jcHAub2JqY3BwOyBwYXRoID0gV2ViTlNQYXN0ZWJvYXJkRXh0cmFzLm1tOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB0YWJXaWR0aCA9IDg7IHVzZXNUYWJzID0gMDsgfTsKQEAgLTE1
OTUsNiArMTU5OSw4IEBACiAJCQkJMUFBODc5QjUxMUNCRTlCRjAwM0M2NjRGIC8qIFdlYlBsYXRm
b3JtU3RyYXRlZ2llcy5tbSAqLywKIAkJCQkxQTZBMjA4QzE4ODYxNTQ2MDBFNTBGNUYgLyogV2Vi
UHJvZ3Jlc3NUcmFja2VyQ2xpZW50LmggKi8sCiAJCQkJMUE2QTIwOEIxODg2MTU0NjAwRTUwRjVG
IC8qIFdlYlByb2dyZXNzVHJhY2tlckNsaWVudC5tbSAqLywKKwkJCQlFNEFFRjk3OTFDMERGNEJD
MDBCMDE3MjcgLyogV2ViUmVzb3VyY2VMb2FkU2NoZWR1bGVyLmNwcCAqLywKKwkJCQlFNEFFRjk3
QTFDMERGNEJDMDBCMDE3MjcgLyogV2ViUmVzb3VyY2VMb2FkU2NoZWR1bGVyLmggKi8sCiAJCQkJ
QTVERUZDMDcxMUQ1MzMxQzAwODg1MjczIC8qIFdlYlNlY3VyaXR5T3JpZ2luLm1tICovLAogCQkJ
CUE1REVGQzA4MTFENTMzMUMwMDg4NTI3MyAvKiBXZWJTZWN1cml0eU9yaWdpbkludGVybmFsLmgg
Ki8sCiAJCQkJQTVERUZDMDkxMUQ1MzMxQzAwODg1MjczIC8qIFdlYlNlY3VyaXR5T3JpZ2luUHJp
dmF0ZS5oICovLApAQCAtMTg4OCw2ICsxODk0LDcgQEAKIAkJCQlBMTBDMUQzQzE4MjAyRkM1MDAz
Njg4M0EgLyogV2ViTlNTdHJpbmdFeHRyYXNJUGhvbmUuaCBpbiBIZWFkZXJzICovLAogCQkJCTkz
OTgxMDdFMDgyNEJGMDEwMDhERjAzOCAvKiBXZWJOU1VSTEV4dHJhcy5oIGluIEhlYWRlcnMgKi8s
CiAJCQkJNjVFMEY4ODQwODUwMDkxNzAwN0U1Q0I5IC8qIFdlYk5TVVJMUmVxdWVzdEV4dHJhcy5o
IGluIEhlYWRlcnMgKi8sCisJCQkJRTRBRUY5N0MxQzBERjRCQzAwQjAxNzI3IC8qIFdlYlJlc291
cmNlTG9hZFNjaGVkdWxlci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJNjVFMEY5RTYwODUwMEYyMzAw
N0U1Q0I5IC8qIFdlYk5TVXNlckRlZmF1bHRzRXh0cmFzLmggaW4gSGVhZGVycyAqLywKIAkJCQk5
Mzk4MTAyNDA4MjRCRjAxMDA4REYwMzggLyogV2ViTlNWaWV3RXh0cmFzLmggaW4gSGVhZGVycyAq
LywKIAkJCQk5Mzk4MTAyNTA4MjRCRjAxMDA4REYwMzggLyogV2ViTlNXaW5kb3dFeHRyYXMuaCBp
biBIZWFkZXJzICovLApAQCAtMjIzNiw2ICsyMjQzLDcgQEAKIAkJCQlCQzdGODg5RjEwQzlEMzBD
MDBENjEzM0QgLyogV2ViR2VvbG9jYXRpb25Qb3NpdGlvbi5tbSBpbiBTb3VyY2VzICovLAogCQkJ
CUExMEMxRDM3MTgyMDJGQzUwMDM2ODgzQSAvKiBXZWJHZW9sb2NhdGlvblByb3ZpZGVySU9TLm1t
IGluIFNvdXJjZXMgKi8sCiAJCQkJOTM5ODExMTMwODI0QkYwMTAwOERGMDM4IC8qIFdlYkhpc3Rv
cnkubW0gaW4gU291cmNlcyAqLywKKwkJCQlFNEFFRjk3QjFDMERGNEJDMDBCMDE3MjcgLyogV2Vi
UmVzb3VyY2VMb2FkU2NoZWR1bGVyLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTkzOTgxMEJEMDgy
NEJGMDEwMDhERjAzOCAvKiBXZWJIaXN0b3J5SXRlbS5tbSBpbiBTb3VyY2VzICovLAogCQkJCTFB
QUY1RkMwMEVERTNBOTIwMDhEODgzRCAvKiBXZWJIb3N0ZWROZXRzY2FwZVBsdWdpblZpZXcubW0g
aW4gU291cmNlcyAqLywKIAkJCQk5Mzk4MTBGMzA4MjRCRjAxMDA4REYwMzggLyogV2ViSFRNTFJl
cHJlc2VudGF0aW9uLm1tIGluIFNvdXJjZXMgKi8sCkluZGV4OiBTb3VyY2UvV2ViS2l0L21hYy9D
aGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9tYWMvQ2hhbmdlTG9nCShyZXZp
c2lvbiAxOTI4ODApCisrKyBTb3VyY2UvV2ViS2l0L21hYy9DaGFuZ2VMb2cJKHdvcmtpbmcgY29w
eSkKQEAgLTEsMyArMSwyOCBAQAorMjAxNS0xMi0wMiAgQW50dGkgS29pdmlzdG8gIDxhbnR0aUBh
cHBsZS5jb20+CisKKyAgICAgICAgTW92ZSBSZXNvdXJjZUxvYWRTY2hlZHVsZXIgdG8gV2ViS2l0
MQorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTUxNzQz
CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgKiBQbHVn
aW5zL0hvc3RlZC9Ib3N0ZWROZXRzY2FwZVBsdWdpblN0cmVhbS5tbToKKyAgICAgICAgKFdlYktp
dDo6SG9zdGVkTmV0c2NhcGVQbHVnaW5TdHJlYW06OnN0YXJ0KToKKyAgICAgICAgKFdlYktpdDo6
SG9zdGVkTmV0c2NhcGVQbHVnaW5TdHJlYW06OnN0b3ApOgorICAgICAgICAqIFBsdWdpbnMvV2Vi
TmV0c2NhcGVQbHVnaW5TdHJlYW0ubW06CisgICAgICAgIChXZWJOZXRzY2FwZVBsdWdpblN0cmVh
bTo6c3RhcnQpOgorICAgICAgICAoV2ViTmV0c2NhcGVQbHVnaW5TdHJlYW06OnN0b3ApOgorICAg
ICAgICAqIFdlYkNvcmVTdXBwb3J0L1dlYlBsYXRmb3JtU3RyYXRlZ2llcy5oOgorICAgICAgICAq
IFdlYkNvcmVTdXBwb3J0L1dlYlBsYXRmb3JtU3RyYXRlZ2llcy5tbToKKyAgICAgICAgKFdlYlBs
YXRmb3JtU3RyYXRlZ2llczo6Y3JlYXRlTG9hZGVyU3RyYXRlZ3kpOgorICAgICAgICAoV2ViUGxh
dGZvcm1TdHJhdGVnaWVzOjpjcmVhdGVQYXN0ZWJvYXJkU3RyYXRlZ3kpOgorICAgICAgICAoV2Vi
UGxhdGZvcm1TdHJhdGVnaWVzOjpjcmVhdGVQbHVnaW5TdHJhdGVneSk6CisgICAgICAgIChXZWJQ
bGF0Zm9ybVN0cmF0ZWdpZXM6OmNyZWF0ZUJsb2JSZWdpc3RyeSk6CisgICAgICAgIChXZWJQbGF0
Zm9ybVN0cmF0ZWdpZXM6OmNvb2tpZXNGb3JET00pOgorICAgICAgICAqIFdlYlZpZXcvV2ViVmll
dy5tbToKKyAgICAgICAgKC1bV2ViVmlldyBfZGlzcGF0Y2hQZW5kaW5nTG9hZFJlcXVlc3RzXSk6
CisgICAgICAgICgrW1dlYlZpZXcgX3NldExvYWRSZXNvdXJjZXNTZXJpYWxseTpdKToKKyAgICAg
ICAgKCtbV2ViVmlldyBfSFRUUFBpcGVsaW5pbmdFbmFibGVkXSk6CisKIDIwMTUtMTEtMzAgIEth
dGx5biBHcmFmZiAgPGtncmFmZkBhcHBsZS5jb20+CiAKICAgICAgICAgUmVuYW1lIEFjdGl2ZURP
TU9iamVjdC9ET01XaW5kb3cgUGFnZUNhY2hlU3VzcGVuc2lvbiBjb2RlIHRvIHN1cHBvcnQgbW9y
ZSByZWFzb25zIGZvciBzdXNwZW5zaW9uCkluZGV4OiBTb3VyY2UvV2ViS2l0L21hYy9QbHVnaW5z
L1dlYk5ldHNjYXBlUGx1Z2luU3RyZWFtLm1tCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQv
bWFjL1BsdWdpbnMvV2ViTmV0c2NhcGVQbHVnaW5TdHJlYW0ubW0JKHJldmlzaW9uIDE5Mjg4MCkK
KysrIFNvdXJjZS9XZWJLaXQvbWFjL1BsdWdpbnMvV2ViTmV0c2NhcGVQbHVnaW5TdHJlYW0ubW0J
KHdvcmtpbmcgY29weSkKQEAgLTM3LDEzICszNywxNSBAQAogI2ltcG9ydCAiV2ViTlNVUkxSZXF1
ZXN0RXh0cmFzLmgiCiAjaW1wb3J0ICJXZWJOZXRzY2FwZVBsdWdpblBhY2thZ2UuaCIKICNpbXBv
cnQgIldlYk5ldHNjYXBlUGx1Z2luVmlldy5oIgorI2ltcG9ydCAiV2ViUmVzb3VyY2VMb2FkU2No
ZWR1bGVyLmgiCiAjaW1wb3J0IDxGb3VuZGF0aW9uL05TVVJMUmVzcG9uc2UuaD4KICNpbXBvcnQg
PFdlYkNvcmUvRG9jdW1lbnQuaD4KICNpbXBvcnQgPFdlYkNvcmUvRG9jdW1lbnRMb2FkZXIuaD4K
ICNpbXBvcnQgPFdlYkNvcmUvRnJhbWUuaD4KICNpbXBvcnQgPFdlYkNvcmUvRnJhbWVMb2FkZXIu
aD4KICNpbXBvcnQgPFdlYkNvcmUvSlNET01XaW5kb3dCYXNlLmg+Ci0jaW1wb3J0IDxXZWJDb3Jl
L1Jlc291cmNlTG9hZFNjaGVkdWxlci5oPgorI2ltcG9ydCA8V2ViQ29yZS9Mb2FkZXJTdHJhdGVn
eS5oPgorI2ltcG9ydCA8V2ViQ29yZS9QbGF0Zm9ybVN0cmF0ZWdpZXMuaD4KICNpbXBvcnQgPFdl
YkNvcmUvU2VjdXJpdHlPcmlnaW4uaD4KICNpbXBvcnQgPFdlYkNvcmUvU2VjdXJpdHlQb2xpY3ku
aD4KICNpbXBvcnQgPFdlYkNvcmUvV2ViQ29yZU9iakNFeHRyYXMuaD4KQEAgLTI4NSw4ICsyODcs
OCBAQCB2b2lkIFdlYk5ldHNjYXBlUGx1Z2luU3RyZWFtOjpzdGFydCgpCiAgICAgQVNTRVJUKG1f
cmVxdWVzdCk7CiAgICAgQVNTRVJUKCFtX2ZyYW1lTG9hZGVyKTsKICAgICBBU1NFUlQoIW1fbG9h
ZGVyKTsKLSAgICAKLSAgICBtX2xvYWRlciA9IHJlc291cmNlTG9hZFNjaGVkdWxlcigpLT5zY2hl
ZHVsZVBsdWdpblN0cmVhbUxvYWQoY29yZShbbV9wbHVnaW5WaWV3LmdldCgpIHdlYkZyYW1lXSks
IHRoaXMsIG1fcmVxdWVzdC5nZXQoKSk7CisKKyAgICBtX2xvYWRlciA9IHdlYlJlc291cmNlTG9h
ZFNjaGVkdWxlcigpLnNjaGVkdWxlUGx1Z2luU3RyZWFtTG9hZChjb3JlKFttX3BsdWdpblZpZXcu
Z2V0KCkgd2ViRnJhbWVdKSwgdGhpcywgbV9yZXF1ZXN0LmdldCgpKTsKIH0KIAogdm9pZCBXZWJO
ZXRzY2FwZVBsdWdpblN0cmVhbTo6c3RvcCgpCkluZGV4OiBTb3VyY2UvV2ViS2l0L21hYy9QbHVn
aW5zL0hvc3RlZC9Ib3N0ZWROZXRzY2FwZVBsdWdpblN0cmVhbS5tbQo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV2ViS2l0L21hYy9QbHVnaW5zL0hvc3RlZC9Ib3N0ZWROZXRzY2FwZVBsdWdpblN0cmVh
bS5tbQkocmV2aXNpb24gMTkyODgwKQorKysgU291cmNlL1dlYktpdC9tYWMvUGx1Z2lucy9Ib3N0
ZWQvSG9zdGVkTmV0c2NhcGVQbHVnaW5TdHJlYW0ubW0JKHdvcmtpbmcgY29weSkKQEAgLTM2LDEx
ICszNiwxMiBAQAogI2ltcG9ydCAiV2ViS2l0U3lzdGVtSW50ZXJmYWNlLmgiCiAjaW1wb3J0ICJX
ZWJOU1VSTEV4dHJhcy5oIgogI2ltcG9ydCAiV2ViTlNVUkxSZXF1ZXN0RXh0cmFzLmgiCisjaW1w
b3J0ICJXZWJSZXNvdXJjZUxvYWRTY2hlZHVsZXIuaCIKICNpbXBvcnQgPFdlYkNvcmUvRG9jdW1l
bnQuaD4KICNpbXBvcnQgPFdlYkNvcmUvRG9jdW1lbnRMb2FkZXIuaD4KICNpbXBvcnQgPFdlYkNv
cmUvRnJhbWUuaD4KICNpbXBvcnQgPFdlYkNvcmUvRnJhbWVMb2FkZXIuaD4KLSNpbXBvcnQgPFdl
YkNvcmUvUmVzb3VyY2VMb2FkU2NoZWR1bGVyLmg+CisjaW1wb3J0IDxXZWJDb3JlL1BsYXRmb3Jt
U3RyYXRlZ2llcy5oPgogI2ltcG9ydCA8V2ViQ29yZS9TZWN1cml0eU9yaWdpbi5oPgogI2ltcG9y
dCA8V2ViQ29yZS9TZWN1cml0eVBvbGljeS5oPgogI2ltcG9ydCA8V2ViQ29yZS9XZWJDb3JlVVJM
UmVzcG9uc2UuaD4KQEAgLTIyMCw4ICsyMjEsOCBAQCB2b2lkIEhvc3RlZE5ldHNjYXBlUGx1Z2lu
U3RyZWFtOjpzdGFydCgpCiAgICAgQVNTRVJUKG1fcmVxdWVzdCk7CiAgICAgQVNTRVJUKCFtX2Zy
YW1lTG9hZGVyKTsKICAgICBBU1NFUlQoIW1fbG9hZGVyKTsKLSAgICAKLSAgICBtX2xvYWRlciA9
IHJlc291cmNlTG9hZFNjaGVkdWxlcigpLT5zY2hlZHVsZVBsdWdpblN0cmVhbUxvYWQoY29yZShb
bV9pbnN0YW5jZS0+cGx1Z2luVmlldygpIHdlYkZyYW1lXSksIHRoaXMsIG1fcmVxdWVzdC5nZXQo
KSk7CisKKyAgICBtX2xvYWRlciA9IHdlYlJlc291cmNlTG9hZFNjaGVkdWxlcigpLnNjaGVkdWxl
UGx1Z2luU3RyZWFtTG9hZChjb3JlKFttX2luc3RhbmNlLT5wbHVnaW5WaWV3KCkgd2ViRnJhbWVd
KSwgdGhpcywgbV9yZXF1ZXN0LmdldCgpKTsKIH0KIAogdm9pZCBIb3N0ZWROZXRzY2FwZVBsdWdp
blN0cmVhbTo6c3RvcCgpCkluZGV4OiBTb3VyY2UvV2ViS2l0L21hYy9XZWJDb3JlU3VwcG9ydC9X
ZWJQbGF0Zm9ybVN0cmF0ZWdpZXMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L21hYy9X
ZWJDb3JlU3VwcG9ydC9XZWJQbGF0Zm9ybVN0cmF0ZWdpZXMuaAkocmV2aXNpb24gMTkyODgwKQor
KysgU291cmNlL1dlYktpdC9tYWMvV2ViQ29yZVN1cHBvcnQvV2ViUGxhdGZvcm1TdHJhdGVnaWVz
LmgJKHdvcmtpbmcgY29weSkKQEAgLTM1LDcgKzM1LDcgQEAKIHN0cnVjdCBQYXN0ZWJvYXJkSW1h
Z2U7CiBzdHJ1Y3QgUGFzdGVib2FyZFdlYkNvbnRlbnQ7CiAKLWNsYXNzIFdlYlBsYXRmb3JtU3Ry
YXRlZ2llcyA6IHB1YmxpYyBXZWJDb3JlOjpQbGF0Zm9ybVN0cmF0ZWdpZXMsIHByaXZhdGUgV2Vi
Q29yZTo6Q29va2llc1N0cmF0ZWd5LCBwcml2YXRlIFdlYkNvcmU6OkxvYWRlclN0cmF0ZWd5LCBw
cml2YXRlIFdlYkNvcmU6OlBhc3RlYm9hcmRTdHJhdGVneSwgcHJpdmF0ZSBXZWJDb3JlOjpQbHVn
aW5TdHJhdGVneSB7CitjbGFzcyBXZWJQbGF0Zm9ybVN0cmF0ZWdpZXMgOiBwdWJsaWMgV2ViQ29y
ZTo6UGxhdGZvcm1TdHJhdGVnaWVzLCBwcml2YXRlIFdlYkNvcmU6OkNvb2tpZXNTdHJhdGVneSwg
cHJpdmF0ZSBXZWJDb3JlOjpQYXN0ZWJvYXJkU3RyYXRlZ3ksIHByaXZhdGUgV2ViQ29yZTo6UGx1
Z2luU3RyYXRlZ3kgewogcHVibGljOgogICAgIHN0YXRpYyB2b2lkIGluaXRpYWxpemVJZk5lY2Vz
c2FyeSgpOwogICAgIApAQCAtNDcsNiArNDcsNyBAQCBwcml2YXRlOgogICAgIHZpcnR1YWwgV2Vi
Q29yZTo6TG9hZGVyU3RyYXRlZ3kqIGNyZWF0ZUxvYWRlclN0cmF0ZWd5KCkgb3ZlcnJpZGU7CiAg
ICAgdmlydHVhbCBXZWJDb3JlOjpQYXN0ZWJvYXJkU3RyYXRlZ3kqIGNyZWF0ZVBhc3RlYm9hcmRT
dHJhdGVneSgpIG92ZXJyaWRlOwogICAgIHZpcnR1YWwgV2ViQ29yZTo6UGx1Z2luU3RyYXRlZ3kq
IGNyZWF0ZVBsdWdpblN0cmF0ZWd5KCkgb3ZlcnJpZGU7CisgICAgdmlydHVhbCBXZWJDb3JlOjpC
bG9iUmVnaXN0cnkqIGNyZWF0ZUJsb2JSZWdpc3RyeSgpIG92ZXJyaWRlOwogCiAgICAgLy8gV2Vi
Q29yZTo6Q29va2llc1N0cmF0ZWd5CiAgICAgdmlydHVhbCBTdHJpbmcgY29va2llc0ZvckRPTShj
b25zdCBXZWJDb3JlOjpOZXR3b3JrU3RvcmFnZVNlc3Npb24mLCBjb25zdCBXZWJDb3JlOjpVUkwm
IGZpcnN0UGFydHksIGNvbnN0IFdlYkNvcmU6OlVSTCYpIG92ZXJyaWRlOwpJbmRleDogU291cmNl
L1dlYktpdC9tYWMvV2ViQ29yZVN1cHBvcnQvV2ViUGxhdGZvcm1TdHJhdGVnaWVzLm1tCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvbWFjL1dlYkNvcmVTdXBwb3J0L1dlYlBsYXRmb3JtU3Ry
YXRlZ2llcy5tbQkocmV2aXNpb24gMTkyODgwKQorKysgU291cmNlL1dlYktpdC9tYWMvV2ViQ29y
ZVN1cHBvcnQvV2ViUGxhdGZvcm1TdHJhdGVnaWVzLm1tCSh3b3JraW5nIGNvcHkpCkBAIC0yOCw2
ICsyOCw4IEBACiAjaW1wb3J0ICJXZWJGcmFtZU5ldHdvcmtpbmdDb250ZXh0LmgiCiAjaW1wb3J0
ICJXZWJQbHVnaW5EYXRhYmFzZS5oIgogI2ltcG9ydCAiV2ViUGx1Z2luUGFja2FnZS5oIgorI2lt
cG9ydCAiV2ViUmVzb3VyY2VMb2FkU2NoZWR1bGVyLmgiCisjaW1wb3J0IDxXZWJDb3JlL0Jsb2JS
ZWdpc3RyeUltcGwuaD4KICNpbXBvcnQgPFdlYkNvcmUvQmxvY2tFeGNlcHRpb25zLmg+CiAjaW1w
b3J0IDxXZWJDb3JlL0NvbG9yLmg+CiAjaW1wb3J0IDxXZWJDb3JlL01haW5GcmFtZS5oPgpAQCAt
NjIsNyArNjQsNyBAQCBDb29raWVzU3RyYXRlZ3kqIFdlYlBsYXRmb3JtU3RyYXRlZ2llczo6CiAK
IExvYWRlclN0cmF0ZWd5KiBXZWJQbGF0Zm9ybVN0cmF0ZWdpZXM6OmNyZWF0ZUxvYWRlclN0cmF0
ZWd5KCkKIHsKLSAgICByZXR1cm4gdGhpczsKKyAgICByZXR1cm4gbmV3IFdlYlJlc291cmNlTG9h
ZFNjaGVkdWxlcjsKIH0KIAogUGFzdGVib2FyZFN0cmF0ZWd5KiBXZWJQbGF0Zm9ybVN0cmF0ZWdp
ZXM6OmNyZWF0ZVBhc3RlYm9hcmRTdHJhdGVneSgpCkBAIC03NSw2ICs3NywxMSBAQCBQbHVnaW5T
dHJhdGVneSogV2ViUGxhdGZvcm1TdHJhdGVnaWVzOjpjCiAgICAgcmV0dXJuIHRoaXM7CiB9CiAK
K0Jsb2JSZWdpc3RyeSogV2ViUGxhdGZvcm1TdHJhdGVnaWVzOjpjcmVhdGVCbG9iUmVnaXN0cnko
KQoreworICAgIHJldHVybiBuZXcgV2ViQ29yZTo6QmxvYlJlZ2lzdHJ5SW1wbDsKK30KKwogU3Ry
aW5nIFdlYlBsYXRmb3JtU3RyYXRlZ2llczo6Y29va2llc0ZvckRPTShjb25zdCBOZXR3b3JrU3Rv
cmFnZVNlc3Npb24mIHNlc3Npb24sIGNvbnN0IFVSTCYgZmlyc3RQYXJ0eSwgY29uc3QgVVJMJiB1
cmwpCiB7CiAgICAgcmV0dXJuIFdlYkNvcmU6OmNvb2tpZXNGb3JET00oc2Vzc2lvbiwgZmlyc3RQ
YXJ0eSwgdXJsKTsKSW5kZXg6IFNvdXJjZS9XZWJLaXQvbWFjL1dlYlZpZXcvV2ViVmlldy5tbQo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L21hYy9XZWJWaWV3L1dlYlZpZXcubW0JKHJldmlz
aW9uIDE5Mjg4MCkKKysrIFNvdXJjZS9XZWJLaXQvbWFjL1dlYlZpZXcvV2ViVmlldy5tbQkod29y
a2luZyBjb3B5KQpAQCAtOTUsNiArOTUsNyBAQAogI2ltcG9ydCAiV2ViUHJlZmVyZW5jZUtleXNQ
cml2YXRlLmgiCiAjaW1wb3J0ICJXZWJQcmVmZXJlbmNlc1ByaXZhdGUuaCIKICNpbXBvcnQgIldl
YlByb2dyZXNzVHJhY2tlckNsaWVudC5oIgorI2ltcG9ydCAiV2ViUmVzb3VyY2VMb2FkU2NoZWR1
bGVyLmgiCiAjaW1wb3J0ICJXZWJTY3JpcHREZWJ1Z0RlbGVnYXRlLmgiCiAjaW1wb3J0ICJXZWJT
Y3JpcHRXb3JsZEludGVybmFsLmgiCiAjaW1wb3J0ICJXZWJTZWxlY3Rpb25TZXJ2aWNlQ29udHJv
bGxlci5oIgpAQCAtMTY3LDcgKzE2OCw2IEBACiAjaW1wb3J0IDxXZWJDb3JlL1JlbmRlclZpZXcu
aD4KICNpbXBvcnQgPFdlYkNvcmUvUmVuZGVyV2lkZ2V0Lmg+CiAjaW1wb3J0IDxXZWJDb3JlL1Jl
c291cmNlSGFuZGxlLmg+Ci0jaW1wb3J0IDxXZWJDb3JlL1Jlc291cmNlTG9hZFNjaGVkdWxlci5o
PgogI2ltcG9ydCA8V2ViQ29yZS9SZXNvdXJjZVJlcXVlc3QuaD4KICNpbXBvcnQgPFdlYkNvcmUv
UnVudGltZUFwcGxpY2F0aW9uQ2hlY2tzLmg+CiAjaW1wb3J0IDxXZWJDb3JlL1J1bnRpbWVFbmFi
bGVkRmVhdHVyZXMuaD4KQEAgLTc2MSw3ICs3NjEsNyBAQCBzdGF0aWMgYm9vbCBzaG91bGRSZXN0
cmljdFdpbmRvd0ZvY3VzKCkKIAogLSAodm9pZClfZGlzcGF0Y2hQZW5kaW5nTG9hZFJlcXVlc3Rz
CiB7Ci0gICAgcmVzb3VyY2VMb2FkU2NoZWR1bGVyKCktPnNlcnZlUGVuZGluZ1JlcXVlc3RzKCk7
CisgICAgd2ViUmVzb3VyY2VMb2FkU2NoZWR1bGVyKCkuc2VydmVQZW5kaW5nUmVxdWVzdHMoKTsK
IH0KIAogI2lmICFQTEFURk9STShJT1MpCkBAIC00NDgyLDcgKzQ0ODIsOCBAQCAtIChCT09MKXNl
YXJjaEZvcjooTlNTdHJpbmcgKilzdHJpbmcgZGlyCiArICh2b2lkKV9zZXRMb2FkUmVzb3VyY2Vz
U2VyaWFsbHk6KEJPT0wpc2VyaWFsaXplIAogewogICAgIFdlYlBsYXRmb3JtU3RyYXRlZ2llczo6
aW5pdGlhbGl6ZUlmTmVjZXNzYXJ5KCk7Ci0gICAgcmVzb3VyY2VMb2FkU2NoZWR1bGVyKCktPnNl
dFNlcmlhbExvYWRpbmdFbmFibGVkKHNlcmlhbGl6ZSk7CisKKyAgICB3ZWJSZXNvdXJjZUxvYWRT
Y2hlZHVsZXIoKS5zZXRTZXJpYWxMb2FkaW5nRW5hYmxlZChzZXJpYWxpemUpOwogfQogCiArIChC
T09MKV9IVFRQUGlwZWxpbmluZ0VuYWJsZWQK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>266456</attachid>
            <date>2015-12-02 11:11:51 -0800</date>
            <delta_ts>2015-12-03 03:23:24 -0800</delta_ts>
            <desc>patch</desc>
            <filename>resourceloadscheduler-webkit-4.patch</filename>
            <type>text/plain</type>
            <size>134966</size>
            <attacher name="Antti Koivisto">koivisto</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDE5Mjg4MCkKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDYzIEBACisyMDE1LTEyLTAyICBBbnR0aSBL
b2l2aXN0byAgPGFudHRpQGFwcGxlLmNvbT4KKworICAgICAgICBNb3ZlIFJlc291cmNlTG9hZFNj
aGVkdWxlciB0byBXZWJLaXQxCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3df
YnVnLmNnaT9pZD0xNTE3NDMKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4K
KworICAgICAgICBJdCBpcyBubyBsb25nZXIgdXNlZCBieSBXZWJLaXQyLiBTaW1wbGlmeSB0aGUg
V2ViS2l0L1dlYkNvcmUgaW50ZXJmYWNlLgorCisgICAgICAgICogV2ViQ29yZS54Y29kZXByb2ov
cHJvamVjdC5wYnhwcm9qOgorICAgICAgICAqIGRvbS9Db250YWluZXJOb2RlLmNwcDoKKyAgICAg
ICAgKiBkb20vRG9jdW1lbnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6RG9jdW1lbnQ6OnN0eWxl
Rm9yRWxlbWVudElnbm9yaW5nUGVuZGluZ1N0eWxlc2hlZXRzKToKKyAgICAgICAgKiBkb20vRG9j
dW1lbnQuaDoKKyAgICAgICAgKiBsb2FkZXIvRG9jdW1lbnRMb2FkZXIuaDoKKyAgICAgICAgKiBs
b2FkZXIvTG9hZGVyU3RyYXRlZ3kuY3BwOgorICAgICAgICAoV2ViQ29yZTo6TG9hZGVyU3RyYXRl
Z3k6On5Mb2FkZXJTdHJhdGVneSk6CisgICAgICAgIChXZWJDb3JlOjpSZXNvdXJjZUxvYWRTdXNw
ZW5kZXI6OlJlc291cmNlTG9hZFN1c3BlbmRlcik6CisgICAgICAgIChXZWJDb3JlOjpSZXNvdXJj
ZUxvYWRTdXNwZW5kZXI6On5SZXNvdXJjZUxvYWRTdXNwZW5kZXIpOgorICAgICAgICAoV2ViQ29y
ZTo6TG9hZGVyU3RyYXRlZ3k6OnJlc291cmNlTG9hZFNjaGVkdWxlcik6IERlbGV0ZWQuCisgICAg
ICAgIChXZWJDb3JlOjpMb2FkZXJTdHJhdGVneTo6bG9hZFJlc291cmNlU3luY2hyb25vdXNseSk6
IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpMb2FkZXJTdHJhdGVneTo6Y3JlYXRlQmxvYlJl
Z2lzdHJ5KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkxvYWRlclN0cmF0ZWd5OjpjcmVh
dGVQaW5nSGFuZGxlKTogRGVsZXRlZC4KKyAgICAgICAgKiBsb2FkZXIvTG9hZGVyU3RyYXRlZ3ku
aDoKKworICAgICAgICAgICAgTG9hZGluZyBmdW5jdGlvbnMgaW1wbGVtZW50ZWQgb24gV2ViS2l0
IHNpZGUgbW92ZSB0byBwdXJlIHZpcnR1YWwgTG9hZGVyU3RyYXRlZ3kuCisKKyAgICAgICAgKiBs
b2FkZXIvUmVzb3VyY2VMb2FkU2NoZWR1bGVyLmNwcDogUmVtb3ZlZC4KKyAgICAgICAgKiBsb2Fk
ZXIvUmVzb3VyY2VMb2FkU2NoZWR1bGVyLmg6IFJlbW92ZWQuCisKKyAgICAgICAgICAgIFJlc291
cmNlTG9hZFNjaGVkdWxlciBtb3ZlcyB0byBXZWJLaXQxIGFzIFdlYlJlc291cmNlTG9hZFNjaGVk
dWxlci4KKworICAgICAgICAqIGxvYWRlci9SZXNvdXJjZUxvYWRlci5jcHA6CisgICAgICAgIChX
ZWJDb3JlOjpSZXNvdXJjZUxvYWRlcjo6ZmluaXNoTmV0d29ya0xvYWQpOgorICAgICAgICAoV2Vi
Q29yZTo6UmVzb3VyY2VMb2FkZXI6OnNldERlZmVyc0xvYWRpbmcpOgorICAgICAgICAoV2ViQ29y
ZTo6UmVzb3VyY2VMb2FkZXI6OmZyYW1lTG9hZGVyKToKKyAgICAgICAgKFdlYkNvcmU6OlJlc291
cmNlTG9hZGVyOjp3aWxsU3dpdGNoVG9TdWJzdGl0dXRlUmVzb3VyY2UpOgorICAgICAgICAoV2Vi
Q29yZTo6UmVzb3VyY2VMb2FkZXI6OndpbGxTZW5kUmVxdWVzdEludGVybmFsKToKKyAgICAgICAg
KiBsb2FkZXIvYXJjaGl2ZS9BcmNoaXZlUmVzb3VyY2VDb2xsZWN0aW9uLmg6CisgICAgICAgICog
bG9hZGVyL2NhY2hlL0NhY2hlZFJlc291cmNlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkNhY2hl
ZFJlc291cmNlOjpsb2FkKToKKyAgICAgICAgKiBsb2FkZXIvY2FjaGUvQ2FjaGVkUmVzb3VyY2VM
b2FkZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Q2FjaGVkUmVzb3VyY2VMb2FkZXI6OnBlcmZv
cm1Qb3N0TG9hZEFjdGlvbnMpOgorICAgICAgICAoV2ViQ29yZTo6Q2FjaGVkUmVzb3VyY2VMb2Fk
ZXI6OmluY3JlbWVudFJlcXVlc3RDb3VudCk6CisgICAgICAgICogcGxhdGZvcm0vUGxhdGZvcm1T
dHJhdGVnaWVzLmg6CisgICAgICAgIChXZWJDb3JlOjpQbGF0Zm9ybVN0cmF0ZWdpZXM6OnBsdWdp
blN0cmF0ZWd5KToKKyAgICAgICAgKFdlYkNvcmU6OlBsYXRmb3JtU3RyYXRlZ2llczo6YmxvYlJl
Z2lzdHJ5KToKKworICAgICAgICAgICAgTW92ZSBCbG9iUmVnaXN0cnkgZmFjdG9yeSBmdW5jdGlv
biBoZXJlIGZyb20gTG9hZGVyU3RyYXRlZ3kgYXMgdGhpcyBhbGxvd3MgbmV0d29yayBwcm9jZXNz
IHRvIGhhdmUgbnVsbCBsb2FkZXJTdHJhdGVneS4KKyAgICAgICAgICAgIChpdCBjb3VsZCBiZSBy
ZW5hbWVkIEJsb2JTdHJhdGVneSBmb3IgY29uc2lzdGVuY3kgbGF0ZXIpLgorCisgICAgICAgIChX
ZWJDb3JlOjpQbGF0Zm9ybVN0cmF0ZWdpZXM6OlBsYXRmb3JtU3RyYXRlZ2llcyk6CisgICAgICAg
ICogcGxhdGZvcm0vbmV0d29yay9CbG9iUmVnaXN0cnkuY3BwOgorICAgICAgICAoV2ViQ29yZTo6
YmxvYlJlZ2lzdHJ5KToKKyAgICAgICAgKFdlYkNvcmU6OkJsb2JSZWdpc3RyeTo6fkJsb2JSZWdp
c3RyeSk6CisgICAgICAgICogcGxhdGZvcm0vbmV0d29yay9SZXNvdXJjZVJlcXVlc3RCYXNlLmg6
CisgICAgICAgICogc3R5bGUvU3R5bGVSZXNvbHZlVHJlZS5jcHA6CisgICAgICAgIChXZWJDb3Jl
OjpTdHlsZTo6UG9zdFJlc29sdXRpb25DYWxsYmFja0Rpc2FibGVyOjpQb3N0UmVzb2x1dGlvbkNh
bGxiYWNrRGlzYWJsZXIpOgorICAgICAgICAoV2ViQ29yZTo6U3R5bGU6OlBvc3RSZXNvbHV0aW9u
Q2FsbGJhY2tEaXNhYmxlcjo6flBvc3RSZXNvbHV0aW9uQ2FsbGJhY2tEaXNhYmxlcik6CisKIDIw
MTUtMTItMDEgIENhcmxvcyBHYXJjaWEgQ2FtcG9zICA8Y2dhcmNpYUBpZ2FsaWEuY29tPgogCiAg
ICAgICAgIFtHVEtdIEFTU0VSVElPTiBGQUlMRUQ6IG1fdGFibGUgcnVubmluZyAvd2Via2l0Mi9C
YWNrRm9yd2FyZExpc3QvbmF2aWdhdGlvbiBpbiBEZWJ1ZyBidWlsZApJbmRleDogU291cmNlL1dl
YkNvcmUvQ01ha2VMaXN0cy50eHQKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvQ01ha2VM
aXN0cy50eHQJKHJldmlzaW9uIDE5Mjg4MCkKKysrIFNvdXJjZS9XZWJDb3JlL0NNYWtlTGlzdHMu
dHh0CSh3b3JraW5nIGNvcHkpCkBAIC0xOTUwLDcgKzE5NTAsNiBAQCBzZXQoV2ViQ29yZV9TT1VS
Q0VTCiAgICAgbG9hZGVyL1BvbGljeUNoZWNrZXIuY3BwCiAgICAgbG9hZGVyL1Byb2dyZXNzVHJh
Y2tlci5jcHAKICAgICBsb2FkZXIvUmVzb3VyY2VMb2FkTm90aWZpZXIuY3BwCi0gICAgbG9hZGVy
L1Jlc291cmNlTG9hZFNjaGVkdWxlci5jcHAKICAgICBsb2FkZXIvUmVzb3VyY2VMb2FkZXIuY3Bw
CiAgICAgbG9hZGVyL1NpbmtEb2N1bWVudC5jcHAKICAgICBsb2FkZXIvU3ViZnJhbWVMb2FkZXIu
Y3BwCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnZjeHByb2ovV2ViQ29yZS52Y3hwcm9q
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL1dlYkNvcmUudmN4cHJvai9XZWJDb3JlLnZj
eHByb2oJKHJldmlzaW9uIDE5Mjg4MCkKKysrIFNvdXJjZS9XZWJDb3JlL1dlYkNvcmUudmN4cHJv
ai9XZWJDb3JlLnZjeHByb2oJKHdvcmtpbmcgY29weSkKQEAgLTc0MTgsNyArNzQxOCw2IEBACiAg
ICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxsb2FkZXJcUmVzb3VyY2VMb2FkZXIuY3BwIiAvPgog
ICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cbG9hZGVyXGNmXFJlc291cmNlTG9hZGVyQ0ZOZXQu
Y3BwIiAvPgogICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cbG9hZGVyXFJlc291cmNlTG9hZE5v
dGlmaWVyLmNwcCIgLz4KLSAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXGxvYWRlclxSZXNvdXJj
ZUxvYWRTY2hlZHVsZXIuY3BwIiAvPgogICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cbG9hZGVy
XFNpbmtEb2N1bWVudC5jcHAiIC8+CiAgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxsb2FkZXJc
U3ViZnJhbWVMb2FkZXIuY3BwIiAvPgogICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cbG9hZGVy
XFN1YnJlc291cmNlTG9hZGVyLmNwcCIgLz4KQEAgLTIwODM5LDcgKzIwODM4LDYgQEAKICAgICA8
Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXGxvYWRlclxSZXNvdXJjZUxvYWRlci5oIiAvPgogICAgIDxD
bEluY2x1ZGUgSW5jbHVkZT0iLi5cbG9hZGVyXFJlc291cmNlTG9hZGVyT3B0aW9ucy5oIiAvPgog
ICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cbG9hZGVyXFJlc291cmNlTG9hZE5vdGlmaWVyLmgi
IC8+Ci0gICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxsb2FkZXJcUmVzb3VyY2VMb2FkU2NoZWR1
bGVyLmgiIC8+CiAgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxsb2FkZXJcU2lua0RvY3VtZW50
LmgiIC8+CiAgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxsb2FkZXJcU3ViZnJhbWVMb2FkZXIu
aCIgLz4KICAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXGxvYWRlclxTdWJyZXNvdXJjZUxvYWRl
ci5oIiAvPgpJbmRleDogU291cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5w
Ynhwcm9qCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3By
b2plY3QucGJ4cHJvagkocmV2aXNpb24gMTkyODgwKQorKysgU291cmNlL1dlYkNvcmUvV2ViQ29y
ZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCSh3b3JraW5nIGNvcHkpCkBAIC02MTY5LDggKzYx
NjksNiBAQAogCQlEMEJDNTQ0OTE0NDNBQzRBMDBFMTA1REEgLyogQ2FjaGVkU3R5bGVTaGVldENs
aWVudC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRDBC
QzU0NDgxNDQzQUM0QTAwRTEwNURBIC8qIENhY2hlZFN0eWxlU2hlZXRDbGllbnQuaCAqLzsgc2V0
dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQlEMEJENEY1QzE0MDg4
NTBGMDA2ODM5QjYgLyogRGljdGF0aW9uQ29tbWFuZElPUy5jcHAgaW4gU291cmNlcyAqLyA9IHtp
c2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBEMEJENEY1QTE0MDg4NTBGMDA2ODM5QjYgLyog
RGljdGF0aW9uQ29tbWFuZElPUy5jcHAgKi87IH07CiAJCUQwQkQ0RjVEMTQwODg1MEYwMDY4MzlC
NiAvKiBEaWN0YXRpb25Db21tYW5kSU9TLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWls
ZEZpbGU7IGZpbGVSZWYgPSBEMEJENEY1QjE0MDg4NTBGMDA2ODM5QjYgLyogRGljdGF0aW9uQ29t
bWFuZElPUy5oICovOyB9OwotCQlEMENFNThGODEyNUU0Q0MyMDBGM0YxOTkgLyogUmVzb3VyY2VM
b2FkU2NoZWR1bGVyLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmls
ZVJlZiA9IEQwQ0U1OEY2MTI1RTRDQzIwMEYzRjE5OSAvKiBSZXNvdXJjZUxvYWRTY2hlZHVsZXIu
Y3BwICovOyB9OwotCQlEMENFNThGOTEyNUU0Q0MyMDBGM0YxOTkgLyogUmVzb3VyY2VMb2FkU2No
ZWR1bGVyLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBE
MENFNThGNzEyNUU0Q0MyMDBGM0YxOTkgLyogUmVzb3VyY2VMb2FkU2NoZWR1bGVyLmggKi87IHNl
dHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJRDBFREE3NzQxNDNF
MzAzQzAwMjhFMzgzIC8qIENhY2hlZFJhd1Jlc291cmNlLmNwcCBpbiBTb3VyY2VzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEQwRURBNzcyMTQzRTMwM0MwMDI4RTM4MyAvKiBD
YWNoZWRSYXdSZXNvdXJjZS5jcHAgKi87IH07CiAJCUQwRURBNzc1MTQzRTMwM0MwMDI4RTM4MyAv
KiBDYWNoZWRSYXdSZXNvdXJjZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gRDBFREE3NzMxNDNFMzAzQzAwMjhFMzgzIC8qIENhY2hlZFJhd1Jlc291cmNl
LmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJRDBG
RjJBNUQxMUY4QzQ1QTAwN0U3NEUwIC8qIFBpbmdMb2FkZXIuY3BwIGluIFNvdXJjZXMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRDBGRjJBNUIxMUY4QzQ1QTAwN0U3NEUwIC8q
IFBpbmdMb2FkZXIuY3BwICovOyB9OwpAQCAtMTQwNjYsOCArMTQwNjQsNiBAQAogCQlEMEJDNTQ0
ODE0NDNBQzRBMDBFMTA1REEgLyogQ2FjaGVkU3R5bGVTaGVldENsaWVudC5oICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jLmg7IHBhdGggPSBDYWNoZWRTdHlsZVNoZWV0Q2xpZW50Lmg7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CiAJCUQwQkQ0RjVBMTQwODg1MEYwMDY4MzlCNiAvKiBEaWN0YXRp
b25Db21tYW5kSU9TLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IERp
Y3RhdGlvbkNvbW1hbmRJT1MuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlEMEJE
NEY1QjE0MDg4NTBGMDA2ODM5QjYgLyogRGljdGF0aW9uQ29tbWFuZElPUy5oICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jLmg7IHBhdGggPSBEaWN0YXRpb25Db21tYW5kSU9TLmg7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07Ci0JCUQwQ0U1OEY2MTI1RTRDQzIwMEYzRjE5OSAvKiBSZXNvdXJjZUxv
YWRTY2hlZHVsZXIuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGlu
ZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gUmVz
b3VyY2VMb2FkU2NoZWR1bGVyLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJRDBD
RTU4RjcxMjVFNENDMjAwRjNGMTk5IC8qIFJlc291cmNlTG9hZFNjaGVkdWxlci5oICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBSZXNvdXJjZUxvYWRTY2hlZHVsZXIuaDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJRDBFREE3NzIxNDNFMzAzQzAwMjhFMzgzIC8qIENhY2hl
ZFJhd1Jlc291cmNlLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IENh
Y2hlZFJhd1Jlc291cmNlLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJRDBFREE3
NzMxNDNFMzAzQzAwMjhFMzgzIC8qIENhY2hlZFJhd1Jlc291cmNlLmggKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmMuaDsgcGF0aCA9IENhY2hlZFJhd1Jlc291cmNlLmg7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CiAJCUQwRkYyQTVCMTFGOEM0NUEwMDdFNzRFMCAvKiBQaW5nTG9hZGVyLmNwcCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFBpbmdMb2FkZXIuY3BwOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtMjI0NTgsOCArMjI0NTQsNiBAQAogCQkJCTUxRUU3
QjM3MUFBNTBCMDUwMEY5MkIyMSAvKiBSZXNvdXJjZUxvYWRJbmZvLmggKi8sCiAJCQkJOTczRTMy
NTQxMDg4M0I3QzAwNUJDNDkzIC8qIFJlc291cmNlTG9hZE5vdGlmaWVyLmNwcCAqLywKIAkJCQk5
NzNFMzI1NTEwODgzQjdDMDA1QkM0OTMgLyogUmVzb3VyY2VMb2FkTm90aWZpZXIuaCAqLywKLQkJ
CQlEMENFNThGNjEyNUU0Q0MyMDBGM0YxOTkgLyogUmVzb3VyY2VMb2FkU2NoZWR1bGVyLmNwcCAq
LywKLQkJCQlEMENFNThGNzEyNUU0Q0MyMDBGM0YxOTkgLyogUmVzb3VyY2VMb2FkU2NoZWR1bGVy
LmggKi8sCiAJCQkJNTEzMjdENUYxMUEzM0EyQjAwNEY5RDY1IC8qIFNpbmtEb2N1bWVudC5jcHAg
Ki8sCiAJCQkJNTEzMjdENUUxMUEzM0EyQjAwNEY5RDY1IC8qIFNpbmtEb2N1bWVudC5oICovLAog
CQkJCUQwMDBFRDI1MTFDMUI5Q0QwMEM0NzcyNiAvKiBTdWJmcmFtZUxvYWRlci5jcHAgKi8sCkBA
IC0yNzI4NCw3ICsyNzI3OCw2IEBACiAJCQkJNTFFRTdCMzgxQUE1MEIwNTAwRjkyQjIxIC8qIFJl
c291cmNlTG9hZEluZm8uaCBpbiBIZWFkZXJzICovLAogCQkJCTk3M0UzMjU3MTA4ODNCN0MwMDVC
QzQ5MyAvKiBSZXNvdXJjZUxvYWROb3RpZmllci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJRTQyOTVG
QTQxMkIwNjE0RTAwRDFBQ0UwIC8qIFJlc291cmNlTG9hZFByaW9yaXR5LmggaW4gSGVhZGVycyAq
LywKLQkJCQlEMENFNThGOTEyNUU0Q0MyMDBGM0YxOTkgLyogUmVzb3VyY2VMb2FkU2NoZWR1bGVy
LmggaW4gSGVhZGVycyAqLywKIAkJCQk4QTgxQkY4NTExRENGRDkwMDBEQTJCOTggLyogUmVzb3Vy
Y2VMb2FkVGltaW5nLmggaW4gSGVhZGVycyAqLywKIAkJCQk3RUU2ODQ2RDEyRDI2RTM4MDBFNzk0
MTUgLyogUmVzb3VyY2VSZXF1ZXN0LmggaW4gSGVhZGVycyAqLywKIAkJCQk1MTRDNzY3RDBDRTky
M0ExMDA3RUYzQ0QgLyogUmVzb3VyY2VSZXF1ZXN0QmFzZS5oIGluIEhlYWRlcnMgKi8sCkBAIC0z
MDg2MSw3ICszMDg1NCw2IEBACiAJCQkJNTFBQTNGNkYwQkQ1QUE5RTAwODkyOTcxIC8qIFJlc291
cmNlTG9hZGVyTWFjLm1tIGluIFNvdXJjZXMgKi8sCiAJCQkJNTFFRTdCM0ExQUE1MTIzMTAwRjky
QjIxIC8qIFJlc291cmNlTG9hZEluZm8uY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJOTczRTMyNTYx
MDg4M0I3QzAwNUJDNDkzIC8qIFJlc291cmNlTG9hZE5vdGlmaWVyLmNwcCBpbiBTb3VyY2VzICov
LAotCQkJCUQwQ0U1OEY4MTI1RTRDQzIwMEYzRjE5OSAvKiBSZXNvdXJjZUxvYWRTY2hlZHVsZXIu
Y3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJNTE0Qzc2N0MwQ0U5MjNBMTAwN0VGM0NEIC8qIFJlc291
cmNlUmVxdWVzdEJhc2UuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJN0VFNjg0NkUxMkQyNkUzODAw
RTc5NDE1IC8qIFJlc291cmNlUmVxdWVzdENGTmV0LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTdF
N0RFMUZEMTk1Q0VGMjYwMDM1MzYzQiAvKiBSZXNvdXJjZVJlcXVlc3RDb2NvYS5tbSBpbiBTb3Vy
Y2VzICovLApJbmRleDogU291cmNlL1dlYkNvcmUvZG9tL0NvbnRhaW5lck5vZGUuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2RvbS9Db250YWluZXJOb2RlLmNwcAkocmV2aXNpb24g
MTkyODgwKQorKysgU291cmNlL1dlYkNvcmUvZG9tL0NvbnRhaW5lck5vZGUuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC00OSw3ICs0OSw2IEBACiAjaW5jbHVkZSAiUmVuZGVyQm94LmgiCiAjaW5jbHVk
ZSAiUmVuZGVyVGhlbWUuaCIKICNpbmNsdWRlICJSZW5kZXJXaWRnZXQuaCIKLSNpbmNsdWRlICJS
ZXNvdXJjZUxvYWRTY2hlZHVsZXIuaCIKICNpbmNsdWRlICJSb290SW5saW5lQm94LmgiCiAjaW5j
bHVkZSAiU1ZHRG9jdW1lbnRFeHRlbnNpb25zLmgiCiAjaW5jbHVkZSAiU1ZHRWxlbWVudC5oIgpJ
bmRleDogU291cmNlL1dlYkNvcmUvZG9tL0RvY3VtZW50LmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvV2ViQ29yZS9kb20vRG9jdW1lbnQuY3BwCShyZXZpc2lvbiAxOTI4ODApCisrKyBTb3VyY2Uv
V2ViQ29yZS9kb20vRG9jdW1lbnQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMjYsNyArMTI2LDYg
QEAKICNpbmNsdWRlICJSZW5kZXJMYXllckNvbXBvc2l0b3IuaCIKICNpbmNsdWRlICJSZW5kZXJW
aWV3LmgiCiAjaW5jbHVkZSAiUmVuZGVyV2lkZ2V0LmgiCi0jaW5jbHVkZSAiUmVzb3VyY2VMb2Fk
U2NoZWR1bGVyLmgiCiAjaW5jbHVkZSAiUnVudGltZUVuYWJsZWRGZWF0dXJlcy5oIgogI2luY2x1
ZGUgIlNWR0RvY3VtZW50RXh0ZW5zaW9ucy5oIgogI2luY2x1ZGUgIlNWR0VsZW1lbnQuaCIKQEAg
LTE5NTksNyArMTk1OCw3IEBAIFJlZjxSZW5kZXJTdHlsZT4gRG9jdW1lbnQ6OnN0eWxlRm9yRWxl
bWUKICAgICBBU1NFUlQoJmVsZW1lbnQuZG9jdW1lbnQoKSA9PSB0aGlzKTsKIAogICAgIC8vIE9u
IGlPUyByZXF1ZXN0IGRlbGVnYXRlcyBjYWxsZWQgZHVyaW5nIHN0eWxlRm9yRWxlbWVudCBtYXkg
cmVzdWx0IGluIHJlLWVudGVyaW5nIFdlYktpdCBhbmQga2lsbGluZyB0aGUgc3R5bGUgcmVzb2x2
ZXIuCi0gICAgUmVzb3VyY2VMb2FkU2NoZWR1bGVyOjpTdXNwZW5kZXIgc3VzcGVuZGVyKCpwbGF0
Zm9ybVN0cmF0ZWdpZXMoKS0+bG9hZGVyU3RyYXRlZ3koKS0+cmVzb3VyY2VMb2FkU2NoZWR1bGVy
KCkpOworICAgIFJlc291cmNlTG9hZFN1c3BlbmRlciBzdXNwZW5kZXI7CiAKICAgICBUZW1wb3Jh
cnlDaGFuZ2U8Ym9vbD4gY2hhbmdlKG1faWdub3JlUGVuZGluZ1N0eWxlc2hlZXRzLCB0cnVlKTsK
ICAgICByZXR1cm4gZWxlbWVudC5yZXNvbHZlU3R5bGUocGFyZW50U3R5bGUpOwpJbmRleDogU291
cmNlL1dlYkNvcmUvZG9tL0RvY3VtZW50LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUv
ZG9tL0RvY3VtZW50LmgJKHJldmlzaW9uIDE5Mjg4MCkKKysrIFNvdXJjZS9XZWJDb3JlL2RvbS9E
b2N1bWVudC5oCSh3b3JraW5nIGNvcHkpCkBAIC01MTEsNyArNTExLDcgQEAgcHVibGljOgogCiAg
ICAgdm9pZCBub3RpZnlSZW1vdmVQZW5kaW5nU2hlZXRJZk5lZWRlZCgpOwogCi0gICAgYm9vbCBo
YXZlU3R5bGVzaGVldHNMb2FkZWQoKSBjb25zdDsKKyAgICBXRUJDT1JFX0VYUE9SVCBib29sIGhh
dmVTdHlsZXNoZWV0c0xvYWRlZCgpIGNvbnN0OwogCiAgICAgLy8gVGhpcyBpcyBhIERPTSBmdW5j
dGlvbi4KICAgICBTdHlsZVNoZWV0TGlzdCYgc3R5bGVTaGVldHMoKTsKSW5kZXg6IFNvdXJjZS9X
ZWJDb3JlL2xvYWRlci9Eb2N1bWVudExvYWRlci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJD
b3JlL2xvYWRlci9Eb2N1bWVudExvYWRlci5oCShyZXZpc2lvbiAxOTI4ODApCisrKyBTb3VyY2Uv
V2ViQ29yZS9sb2FkZXIvRG9jdW1lbnRMb2FkZXIuaAkod29ya2luZyBjb3B5KQpAQCAtMTYxLDcg
KzE2MSw3IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKICAgICAgICAgdm9pZCBzY2hlZHVsZVN1YnN0
aXR1dGVSZXNvdXJjZUxvYWQoUmVzb3VyY2VMb2FkZXImLCBTdWJzdGl0dXRlUmVzb3VyY2UmKTsK
IAogICAgICAgICAvLyBSZXR1cm4gdGhlIEFyY2hpdmVSZXNvdXJjZSBmb3IgdGhlIFVSTCBvbmx5
IHdoZW4gbG9hZGluZyBhbiBBcmNoaXZlCi0gICAgICAgIEFyY2hpdmVSZXNvdXJjZSogYXJjaGl2
ZVJlc291cmNlRm9yVVJMKGNvbnN0IFVSTCYpIGNvbnN0OworICAgICAgICBXRUJDT1JFX0VYUE9S
VCBBcmNoaXZlUmVzb3VyY2UqIGFyY2hpdmVSZXNvdXJjZUZvclVSTChjb25zdCBVUkwmKSBjb25z
dDsKIAogICAgICAgICBXRUJDT1JFX0VYUE9SVCBQYXNzUmVmUHRyPEFyY2hpdmVSZXNvdXJjZT4g
bWFpblJlc291cmNlKCkgY29uc3Q7CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2xvYWRlci9Mb2Fk
ZXJTdHJhdGVneS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvbG9hZGVyL0xvYWRl
clN0cmF0ZWd5LmNwcAkocmV2aXNpb24gMTkyODgwKQorKysgU291cmNlL1dlYkNvcmUvbG9hZGVy
L0xvYWRlclN0cmF0ZWd5LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0g
KiBDb3B5cmlnaHQgKEMpIDIwMTIgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICog
Q29weXJpZ2h0IChDKSAyMDEyLCAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
ICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1z
LCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRl
ZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMjYsMzIgKzI2LDI0IEBACiAjaW5j
bHVkZSAiY29uZmlnLmgiCiAjaW5jbHVkZSAiTG9hZGVyU3RyYXRlZ3kuaCIKIAotI2luY2x1ZGUg
IkJsb2JSZWdpc3RyeUltcGwuaCIKLSNpbmNsdWRlICJQaW5nSGFuZGxlLmgiCi0jaW5jbHVkZSAi
UmVzb3VyY2VIYW5kbGUuaCIKLSNpbmNsdWRlICJSZXNvdXJjZUxvYWRTY2hlZHVsZXIuaCIKKyNp
bmNsdWRlICJQbGF0Zm9ybVN0cmF0ZWdpZXMuaCIKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi1S
ZXNvdXJjZUxvYWRTY2hlZHVsZXIqIExvYWRlclN0cmF0ZWd5OjpyZXNvdXJjZUxvYWRTY2hlZHVs
ZXIoKQorTG9hZGVyU3RyYXRlZ3k6On5Mb2FkZXJTdHJhdGVneSgpCiB7Ci0gICAgcmV0dXJuIFdl
YkNvcmU6OnJlc291cmNlTG9hZFNjaGVkdWxlcigpOwogfQogCi12b2lkIExvYWRlclN0cmF0ZWd5
Ojpsb2FkUmVzb3VyY2VTeW5jaHJvbm91c2x5KE5ldHdvcmtpbmdDb250ZXh0KiBjb250ZXh0LCB1
bnNpZ25lZCBsb25nLCBjb25zdCBSZXNvdXJjZVJlcXVlc3QmIHJlcXVlc3QsIFN0b3JlZENyZWRl
bnRpYWxzIHN0b3JlZENyZWRlbnRpYWxzLCBDbGllbnRDcmVkZW50aWFsUG9saWN5LCBSZXNvdXJj
ZUVycm9yJiBlcnJvciwgUmVzb3VyY2VSZXNwb25zZSYgcmVzcG9uc2UsIFZlY3RvcjxjaGFyPiYg
ZGF0YSkKK1Jlc291cmNlTG9hZFN1c3BlbmRlcjo6UmVzb3VyY2VMb2FkU3VzcGVuZGVyKCkKIHsK
LSAgICBSZXNvdXJjZUhhbmRsZTo6bG9hZFJlc291cmNlU3luY2hyb25vdXNseShjb250ZXh0LCBy
ZXF1ZXN0LCBzdG9yZWRDcmVkZW50aWFscywgZXJyb3IsIHJlc3BvbnNlLCBkYXRhKTsKKyAgICBw
bGF0Zm9ybVN0cmF0ZWdpZXMoKS0+bG9hZGVyU3RyYXRlZ3koKS0+c3VzcGVuZFBlbmRpbmdSZXF1
ZXN0cygpOwogfQogCi1CbG9iUmVnaXN0cnkqIExvYWRlclN0cmF0ZWd5OjpjcmVhdGVCbG9iUmVn
aXN0cnkoKQorUmVzb3VyY2VMb2FkU3VzcGVuZGVyOjp+UmVzb3VyY2VMb2FkU3VzcGVuZGVyKCkK
IHsKLSAgICByZXR1cm4gbmV3IEJsb2JSZWdpc3RyeUltcGw7Ci19Ci0KLXZvaWQgTG9hZGVyU3Ry
YXRlZ3k6OmNyZWF0ZVBpbmdIYW5kbGUoTmV0d29ya2luZ0NvbnRleHQqIG5ldHdvcmtpbmdDb250
ZXh0LCBSZXNvdXJjZVJlcXVlc3QmIHJlcXVlc3QsIGJvb2wgc2hvdWxkVXNlQ3JlZGVudGlhbFN0
b3JhZ2UpCi17Ci0gICAgLy8gUGluZ0hhbmRsZSBtYW5hZ2VzIGl0cyBvd24gbGlmZXRpbWUsIGRl
bGV0aW5nIGl0c2VsZiB3aGVuIGl0cyBwdXJwb3NlIGhhcyBiZWVuIGZ1bGZpbGxlZC4KLSAgICBu
ZXcgUGluZ0hhbmRsZShuZXR3b3JraW5nQ29udGV4dCwgcmVxdWVzdCwgc2hvdWxkVXNlQ3JlZGVu
dGlhbFN0b3JhZ2UsIFBpbmdIYW5kbGU6OlVzZXNBc3luY0NhbGxiYWNrczo6Tm8pOworICAgIHBs
YXRmb3JtU3RyYXRlZ2llcygpLT5sb2FkZXJTdHJhdGVneSgpLT5yZXN1bWVQZW5kaW5nUmVxdWVz
dHMoKTsKIH0KIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCisKSW5kZXg6IFNvdXJjZS9XZWJD
b3JlL2xvYWRlci9Mb2FkZXJTdHJhdGVneS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3Jl
L2xvYWRlci9Mb2FkZXJTdHJhdGVneS5oCShyZXZpc2lvbiAxOTI4ODApCisrKyBTb3VyY2UvV2Vi
Q29yZS9sb2FkZXIvTG9hZGVyU3RyYXRlZ3kuaAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUg
QEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTIgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEyLCAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmlu
YXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRl
ZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMjcsMzIgKzI3LDQ4
IEBACiAjZGVmaW5lIExvYWRlclN0cmF0ZWd5X2gKIAogI2luY2x1ZGUgIlJlc291cmNlSGFuZGxl
VHlwZXMuaCIKKyNpbmNsdWRlICJSZXNvdXJjZUxvYWRQcmlvcml0eS5oIgorI2luY2x1ZGUgIlJl
c291cmNlTG9hZGVyT3B0aW9ucy5oIgogI2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4KIAogbmFtZXNw
YWNlIFdlYkNvcmUgewogCiBjbGFzcyBCbG9iUmVnaXN0cnk7CitjbGFzcyBDYWNoZWRSZXNvdXJj
ZTsKIGNsYXNzIEZyYW1lOworY2xhc3MgTmV0c2NhcGVQbHVnSW5TdHJlYW1Mb2FkZXI7CitjbGFz
cyBOZXRzY2FwZVBsdWdJblN0cmVhbUxvYWRlckNsaWVudDsKIGNsYXNzIE5ldHdvcmtpbmdDb250
ZXh0OwogY2xhc3MgUmVzb3VyY2VFcnJvcjsKLWNsYXNzIFJlc291cmNlTG9hZFNjaGVkdWxlcjsK
K2NsYXNzIFJlc291cmNlTG9hZGVyOwogY2xhc3MgUmVzb3VyY2VSZXF1ZXN0OwogY2xhc3MgUmVz
b3VyY2VSZXNwb25zZTsKK2NsYXNzIFN1YnJlc291cmNlTG9hZGVyOworY2xhc3MgVVJMOwogCiBj
bGFzcyBXRUJDT1JFX0VYUE9SVCBMb2FkZXJTdHJhdGVneSB7CiBwdWJsaWM6Ci0gICAgdmlydHVh
bCBSZXNvdXJjZUxvYWRTY2hlZHVsZXIqIHJlc291cmNlTG9hZFNjaGVkdWxlcigpOworICAgIHZp
cnR1YWwgUmVmUHRyPFN1YnJlc291cmNlTG9hZGVyPiBsb2FkUmVzb3VyY2UoRnJhbWUqLCBDYWNo
ZWRSZXNvdXJjZSosIGNvbnN0IFJlc291cmNlUmVxdWVzdCYsIGNvbnN0IFJlc291cmNlTG9hZGVy
T3B0aW9ucyYpID0gMDsKKyAgICB2aXJ0dWFsIHZvaWQgbG9hZFJlc291cmNlU3luY2hyb25vdXNs
eShOZXR3b3JraW5nQ29udGV4dCosIHVuc2lnbmVkIGxvbmcgaWRlbnRpZmllciwgY29uc3QgUmVz
b3VyY2VSZXF1ZXN0JiwgU3RvcmVkQ3JlZGVudGlhbHMsIENsaWVudENyZWRlbnRpYWxQb2xpY3ks
IFJlc291cmNlRXJyb3ImLCBSZXNvdXJjZVJlc3BvbnNlJiwgVmVjdG9yPGNoYXI+JiBkYXRhKSA9
IDA7CiAKLSAgICB2aXJ0dWFsIHZvaWQgbG9hZFJlc291cmNlU3luY2hyb25vdXNseShOZXR3b3Jr
aW5nQ29udGV4dCosIHVuc2lnbmVkIGxvbmcgaWRlbnRpZmllciwgY29uc3QgUmVzb3VyY2VSZXF1
ZXN0JiwgU3RvcmVkQ3JlZGVudGlhbHMsIENsaWVudENyZWRlbnRpYWxQb2xpY3ksIFJlc291cmNl
RXJyb3ImLCBSZXNvdXJjZVJlc3BvbnNlJiwgVmVjdG9yPGNoYXI+JiBkYXRhKTsKKyAgICB2aXJ0
dWFsIHZvaWQgcmVtb3ZlKFJlc291cmNlTG9hZGVyKikgPSAwOworICAgIHZpcnR1YWwgdm9pZCBz
ZXREZWZlcnNMb2FkaW5nKFJlc291cmNlTG9hZGVyKiwgYm9vbCkgPSAwOworICAgIHZpcnR1YWwg
dm9pZCBjcm9zc09yaWdpblJlZGlyZWN0UmVjZWl2ZWQoUmVzb3VyY2VMb2FkZXIqLCBjb25zdCBV
UkwmIHJlZGlyZWN0VVJMKSA9IDA7CisKKyAgICB2aXJ0dWFsIHZvaWQgc2VydmVQZW5kaW5nUmVx
dWVzdHMoUmVzb3VyY2VMb2FkUHJpb3JpdHkgbWluaW11bVByaW9yaXR5ID0gUmVzb3VyY2VMb2Fk
UHJpb3JpdHk6OlZlcnlMb3cpID0gMDsKKyAgICB2aXJ0dWFsIHZvaWQgc3VzcGVuZFBlbmRpbmdS
ZXF1ZXN0cygpID0gMDsKKyAgICB2aXJ0dWFsIHZvaWQgcmVzdW1lUGVuZGluZ1JlcXVlc3RzKCkg
PSAwOwogCi0gICAgdmlydHVhbCBCbG9iUmVnaXN0cnkqIGNyZWF0ZUJsb2JSZWdpc3RyeSgpOwot
Ci0gICAgdmlydHVhbCB2b2lkIGNyZWF0ZVBpbmdIYW5kbGUoTmV0d29ya2luZ0NvbnRleHQqLCBS
ZXNvdXJjZVJlcXVlc3QmLCBib29sIHNob3VsZFVzZUNyZWRlbnRpYWxTdG9yYWdlKTsKKyAgICB2
aXJ0dWFsIHZvaWQgY3JlYXRlUGluZ0hhbmRsZShOZXR3b3JraW5nQ29udGV4dCosIFJlc291cmNl
UmVxdWVzdCYsIGJvb2wgc2hvdWxkVXNlQ3JlZGVudGlhbFN0b3JhZ2UpID0gMDsKIAogcHJvdGVj
dGVkOgotICAgIHZpcnR1YWwgfkxvYWRlclN0cmF0ZWd5KCkKLSAgICB7Ci0gICAgfQorICAgIHZp
cnR1YWwgfkxvYWRlclN0cmF0ZWd5KCk7Cit9OworCitjbGFzcyBSZXNvdXJjZUxvYWRTdXNwZW5k
ZXIgeworcHVibGljOgorICAgIFJlc291cmNlTG9hZFN1c3BlbmRlcigpOworICAgIH5SZXNvdXJj
ZUxvYWRTdXNwZW5kZXIoKTsKIH07CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKSW5kZXg6IFNv
dXJjZS9XZWJDb3JlL2xvYWRlci9SZXNvdXJjZUxvYWRTY2hlZHVsZXIuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9XZWJDb3JlL2xvYWRlci9SZXNvdXJjZUxvYWRTY2hlZHVsZXIuY3BwCShyZXZp
c2lvbiAxOTI4ODApCisrKyBTb3VyY2UvV2ViQ29yZS9sb2FkZXIvUmVzb3VyY2VMb2FkU2NoZWR1
bGVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSwzOTIgKzAsMCBAQAotLyoKLSAgICBDb3B5cmln
aHQgKEMpIDE5OTggTGFycyBLbm9sbCAoa25vbGxAbXBpLWhkLm1wZy5kZSkKLSAgICBDb3B5cmln
aHQgKEMpIDIwMDEgRGlyayBNdWVsbGVyIChtdWVsbGVyQGtkZS5vcmcpCi0gICAgQ29weXJpZ2h0
IChDKSAyMDAyIFdhbGRvIEJhc3RpYW4gKGJhc3RpYW5Aa2RlLm9yZykKLSAgICBDb3B5cmlnaHQg
KEMpIDIwMDYgU2FtdWVsIFdlaW5pZyAoc2FtLndlaW5pZ0BnbWFpbC5jb20pCi0gICAgQ29weXJp
Z2h0IChDKSAyMDA0LCAyMDA1LCAyMDA2LCAyMDA3LCAyMDA4IEFwcGxlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KLSAgICBDb3B5cmlnaHQgKEMpIDIwMTAgR29vZ2xlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KLQotICAgIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2Fu
IHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKLSAgICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9m
IHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwotICAgIExpY2Vuc2UgYXMgcHVibGlzaGVk
IGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgotICAgIHZlcnNpb24gMiBv
ZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLQot
ICAgIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwg
YmUgdXNlZnVsLAotICAgIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRo
ZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9S
IEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKLSAgICBMaWJyYXJ5IEdlbmVyYWwg
UHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLQotICAgIFlvdSBzaG91bGQgaGF2ZSBy
ZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UK
LSAgICBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAg
SWYgbm90LCB3cml0ZSB0bwotICAgIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4s
IDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCi0gICAgQm9zdG9uLCBNQSAwMjExMC0x
MzAxLCBVU0EuCi0gKi8KLQotI2luY2x1ZGUgImNvbmZpZy5oIgotI2luY2x1ZGUgIlJlc291cmNl
TG9hZFNjaGVkdWxlci5oIgotCi0jaW5jbHVkZSAiRG9jdW1lbnQuaCIKLSNpbmNsdWRlICJEb2N1
bWVudExvYWRlci5oIgotI2luY2x1ZGUgIkZyYW1lLmgiCi0jaW5jbHVkZSAiRnJhbWVMb2FkZXIu
aCIKLSNpbmNsdWRlICJMb2FkZXJTdHJhdGVneS5oIgotI2luY2x1ZGUgIkxvZ2dpbmcuaCIKLSNp
bmNsdWRlICJOZXRzY2FwZVBsdWdJblN0cmVhbUxvYWRlci5oIgotI2luY2x1ZGUgIlBsYXRmb3Jt
U3RyYXRlZ2llcy5oIgotI2luY2x1ZGUgIlJlc291cmNlTG9hZGVyLmgiCi0jaW5jbHVkZSAiUmVz
b3VyY2VSZXF1ZXN0LmgiCi0jaW5jbHVkZSAiU3VicmVzb3VyY2VMb2FkZXIuaCIKLSNpbmNsdWRl
ICJVUkwuaCIKLSNpbmNsdWRlIDx3dGYvTWFpblRocmVhZC5oPgotI2luY2x1ZGUgPHd0Zi9UZW1w
b3JhcnlDaGFuZ2UuaD4KLSNpbmNsdWRlIDx3dGYvdGV4dC9DU3RyaW5nLmg+Ci0KLSNpZiBQTEFU
Rk9STShJT1MpCi0jaW5jbHVkZSA8UnVudGltZUFwcGxpY2F0aW9uQ2hlY2tzSU9TLmg+Ci0jZW5k
aWYKLQotI2lmIFVTRShRVUlDS19MT09LKQotI2luY2x1ZGUgIlF1aWNrTG9vay5oIgotI2VuZGlm
Ci0KLW5hbWVzcGFjZSBXZWJDb3JlIHsKLQotLy8gTWF0Y2ggdGhlIHBhcmFsbGVsIGNvbm5lY3Rp
b24gY291bnQgdXNlZCBieSB0aGUgbmV0d29ya2luZyBsYXllci4KLXN0YXRpYyB1bnNpZ25lZCBt
YXhSZXF1ZXN0c0luRmxpZ2h0UGVySG9zdDsKLSNpZiAhUExBVEZPUk0oSU9TKQotc3RhdGljIGNv
bnN0IHVuc2lnbmVkIG1heFJlcXVlc3RzSW5GbGlnaHRGb3JOb25IVFRQUHJvdG9jb2xzID0gMjA7
Ci0jZWxzZQotLy8gTGltaXRpbmcgdGhpcyBzZWVtcyB0byByZWdyZXNzIHBlcmZvcm1hbmNlIGlu
IHNvbWUgbG9jYWwgY2FzZXMgc28gbGV0J3MganVzdCBtYWtlIGl0IGxhcmdlLgotc3RhdGljIGNv
bnN0IHVuc2lnbmVkIG1heFJlcXVlc3RzSW5GbGlnaHRGb3JOb25IVFRQUHJvdG9jb2xzID0gMTAw
MDA7Ci0jZW5kaWYKLQotUmVzb3VyY2VMb2FkU2NoZWR1bGVyOjpIb3N0SW5mb3JtYXRpb24qIFJl
c291cmNlTG9hZFNjaGVkdWxlcjo6aG9zdEZvclVSTChjb25zdCBVUkwmIHVybCwgQ3JlYXRlSG9z
dFBvbGljeSBjcmVhdGVIb3N0UG9saWN5KQotewotICAgIGlmICghdXJsLnByb3RvY29sSXNJbkhU
VFBGYW1pbHkoKSkKLSAgICAgICAgcmV0dXJuIG1fbm9uSFRUUFByb3RvY29sSG9zdDsKLQotICAg
IG1faG9zdHMuY2hlY2tDb25zaXN0ZW5jeSgpOwotICAgIFN0cmluZyBob3N0TmFtZSA9IHVybC5o
b3N0KCk7Ci0gICAgSG9zdEluZm9ybWF0aW9uKiBob3N0ID0gbV9ob3N0cy5nZXQoaG9zdE5hbWUp
OwotICAgIGlmICghaG9zdCAmJiBjcmVhdGVIb3N0UG9saWN5ID09IENyZWF0ZUlmTm90Rm91bmQp
IHsKLSAgICAgICAgaG9zdCA9IG5ldyBIb3N0SW5mb3JtYXRpb24oaG9zdE5hbWUsIG1heFJlcXVl
c3RzSW5GbGlnaHRQZXJIb3N0KTsKLSAgICAgICAgbV9ob3N0cy5hZGQoaG9zdE5hbWUsIGhvc3Qp
OwotICAgIH0KLSAgICByZXR1cm4gaG9zdDsKLX0KLQotUmVzb3VyY2VMb2FkU2NoZWR1bGVyKiBy
ZXNvdXJjZUxvYWRTY2hlZHVsZXIoKQotewotICAgIEFTU0VSVChpc01haW5UaHJlYWQoKSk7Ci0g
ICAgc3RhdGljIFJlc291cmNlTG9hZFNjaGVkdWxlciogZ2xvYmFsU2NoZWR1bGVyID0gbnVsbHB0
cjsKLSAgICAKLSAgICBpZiAoIWdsb2JhbFNjaGVkdWxlcikgewotICAgICAgICBzdGF0aWMgYm9v
bCBpc0NhbGxpbmdPdXRUb1N0cmF0ZWd5ID0gZmFsc2U7Ci0gICAgICAgIAotICAgICAgICAvLyBJ
ZiB3ZSdyZSByZS1lbnRlcmluZyByZXNvdXJjZUxvYWRTY2hlZHVsZXIoKSB3aGlsZSBjYWxsaW5n
IG91dCB0byB0aGUgTG9hZGVyU3RyYXRlZ3ksCi0gICAgICAgIC8vIHRoZW4gdGhlIExvYWRlclN0
cmF0ZWd5IGlzIHRyeWluZyB0byB1c2UgdGhlIGRlZmF1bHQgcmVzb3VyY2VMb2FkU2NoZWR1bGVy
LgotICAgICAgICAvLyBTbyB3ZSdsbCBjcmVhdGUgaXQgaGVyZSBhbmQgc3RhcnQgdXNpbmcgaXQu
Ci0gICAgICAgIGlmIChpc0NhbGxpbmdPdXRUb1N0cmF0ZWd5KSB7Ci0gICAgICAgICAgICBnbG9i
YWxTY2hlZHVsZXIgPSBuZXcgUmVzb3VyY2VMb2FkU2NoZWR1bGVyOwotICAgICAgICAgICAgcmV0
dXJuIGdsb2JhbFNjaGVkdWxlcjsKLSAgICAgICAgfQotICAgICAgICAKLSAgICAgICAgVGVtcG9y
YXJ5Q2hhbmdlPGJvb2w+IHJlY3Vyc2lvbkd1YXJkKGlzQ2FsbGluZ091dFRvU3RyYXRlZ3ksIHRy
dWUpOwotICAgICAgICBnbG9iYWxTY2hlZHVsZXIgPSBwbGF0Zm9ybVN0cmF0ZWdpZXMoKS0+bG9h
ZGVyU3RyYXRlZ3koKS0+cmVzb3VyY2VMb2FkU2NoZWR1bGVyKCk7Ci0gICAgfQotCi0gICAgcmV0
dXJuIGdsb2JhbFNjaGVkdWxlcjsKLX0KLQotUmVzb3VyY2VMb2FkU2NoZWR1bGVyOjpSZXNvdXJj
ZUxvYWRTY2hlZHVsZXIoKQotICAgIDogbV9ub25IVFRQUHJvdG9jb2xIb3N0KG5ldyBIb3N0SW5m
b3JtYXRpb24oU3RyaW5nKCksIG1heFJlcXVlc3RzSW5GbGlnaHRGb3JOb25IVFRQUHJvdG9jb2xz
KSkKLSAgICAsIG1fcmVxdWVzdFRpbWVyKCp0aGlzLCAmUmVzb3VyY2VMb2FkU2NoZWR1bGVyOjpy
ZXF1ZXN0VGltZXJGaXJlZCkKLSAgICAsIG1fc3VzcGVuZFBlbmRpbmdSZXF1ZXN0c0NvdW50KDAp
Ci0gICAgLCBtX2lzU2VyaWFsTG9hZGluZ0VuYWJsZWQoZmFsc2UpCi17Ci0gICAgbWF4UmVxdWVz
dHNJbkZsaWdodFBlckhvc3QgPSBpbml0aWFsaXplTWF4aW11bUhUVFBDb25uZWN0aW9uQ291bnRQ
ZXJIb3N0KCk7Ci19Ci0KLVJlc291cmNlTG9hZFNjaGVkdWxlcjo6flJlc291cmNlTG9hZFNjaGVk
dWxlcigpCi17Ci19Ci0KLVJlZlB0cjxTdWJyZXNvdXJjZUxvYWRlcj4gUmVzb3VyY2VMb2FkU2No
ZWR1bGVyOjpzY2hlZHVsZVN1YnJlc291cmNlTG9hZChGcmFtZSogZnJhbWUsIENhY2hlZFJlc291
cmNlKiByZXNvdXJjZSwgY29uc3QgUmVzb3VyY2VSZXF1ZXN0JiByZXF1ZXN0LCBjb25zdCBSZXNv
dXJjZUxvYWRlck9wdGlvbnMmIG9wdGlvbnMpCi17Ci0gICAgUmVmUHRyPFN1YnJlc291cmNlTG9h
ZGVyPiBsb2FkZXIgPSBTdWJyZXNvdXJjZUxvYWRlcjo6Y3JlYXRlKGZyYW1lLCByZXNvdXJjZSwg
cmVxdWVzdCwgb3B0aW9ucyk7Ci0gICAgaWYgKGxvYWRlcikKLSAgICAgICAgc2NoZWR1bGVMb2Fk
KGxvYWRlci5nZXQoKSk7Ci0jaWYgUExBVEZPUk0oSU9TKQotICAgIC8vIFNpbmNlIHdlIGRlZmVy
IGxvYWRlciBpbml0aWFsaXphdGlvbiB1bnRpbCBzY2hlZHVsaW5nIG9uIGlPUywgdGhlIGZyYW1l
Ci0gICAgLy8gbG9hZCBkZWxlZ2F0ZSB0aGF0IHdvdWxkIGJlIGNhbGxlZCBpbiBTdWJyZXNvdXJj
ZUxvYWRlcjo6Y3JlYXRlKCkgb24KLSAgICAvLyBvdGhlciBwb3J0cyBtaWdodCBiZSBjYWxsZWQg
aW4gc2NoZWR1bGVMb2FkKCkgaW5zdGVhZC4gT3VyIGNvbnRyYWN0IHRvCi0gICAgLy8gY2FsbGVy
cyBvZiB0aGlzIG1ldGhvZCBpcyB0aGF0IGEgbnVsbCBsb2FkZXIgaXMgcmV0dXJuZWQgaWYgdGhl
IGxvYWQgd2FzCi0gICAgLy8gY2FuY2VsbGVkIGJ5IGEgZnJhbWUgbG9hZCBkZWxlZ2F0ZS4KLSAg
ICBpZiAoIWxvYWRlciB8fCBsb2FkZXItPnJlYWNoZWRUZXJtaW5hbFN0YXRlKCkpCi0gICAgICAg
IHJldHVybiBudWxscHRyOwotI2VuZGlmCi0gICAgcmV0dXJuIGxvYWRlcjsKLX0KLQotUmVmUHRy
PE5ldHNjYXBlUGx1Z0luU3RyZWFtTG9hZGVyPiBSZXNvdXJjZUxvYWRTY2hlZHVsZXI6OnNjaGVk
dWxlUGx1Z2luU3RyZWFtTG9hZChGcmFtZSogZnJhbWUsIE5ldHNjYXBlUGx1Z0luU3RyZWFtTG9h
ZGVyQ2xpZW50KiBjbGllbnQsIGNvbnN0IFJlc291cmNlUmVxdWVzdCYgcmVxdWVzdCkKLXsKLSAg
ICBSZWZQdHI8TmV0c2NhcGVQbHVnSW5TdHJlYW1Mb2FkZXI+IGxvYWRlciA9IE5ldHNjYXBlUGx1
Z0luU3RyZWFtTG9hZGVyOjpjcmVhdGUoZnJhbWUsIGNsaWVudCwgcmVxdWVzdCk7Ci0gICAgaWYg
KGxvYWRlcikKLSAgICAgICAgc2NoZWR1bGVMb2FkKGxvYWRlci5nZXQoKSk7Ci0gICAgcmV0dXJu
IGxvYWRlcjsKLX0KLQotdm9pZCBSZXNvdXJjZUxvYWRTY2hlZHVsZXI6OnNjaGVkdWxlTG9hZChS
ZXNvdXJjZUxvYWRlciogcmVzb3VyY2VMb2FkZXIpCi17Ci0gICAgQVNTRVJUKHJlc291cmNlTG9h
ZGVyKTsKLQotICAgIExPRyhSZXNvdXJjZUxvYWRpbmcsICJSZXNvdXJjZUxvYWRTY2hlZHVsZXI6
OmxvYWQgcmVzb3VyY2UgJXAgJyVzJyIsIHJlc291cmNlTG9hZGVyLCByZXNvdXJjZUxvYWRlci0+
dXJsKCkuc3RyaW5nKCkubGF0aW4xKCkuZGF0YSgpKTsKLQotI2lmIFBMQVRGT1JNKElPUykKLSAg
ICAvLyBJZiB0aGVyZSdzIGEgd2ViIGFyY2hpdmUgcmVzb3VyY2UgZm9yIHRoaXMgVVJMLCB3ZSBk
b24ndCBuZWVkIHRvIHNjaGVkdWxlIHRoZSBsb2FkIHNpbmNlIGl0IHdpbGwgbmV2ZXIgdG91Y2gg
dGhlIG5ldHdvcmsuCi0gICAgaWYgKCFpc1N1c3BlbmRpbmdQZW5kaW5nUmVxdWVzdHMoKSAmJiBy
ZXNvdXJjZUxvYWRlci0+ZG9jdW1lbnRMb2FkZXIoKS0+YXJjaGl2ZVJlc291cmNlRm9yVVJMKHJl
c291cmNlTG9hZGVyLT5pT1NPcmlnaW5hbFJlcXVlc3QoKS51cmwoKSkpIHsKLSAgICAgICAgcmVz
b3VyY2VMb2FkZXItPnN0YXJ0TG9hZGluZygpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotI2Vs
c2UKLSAgICBpZiAocmVzb3VyY2VMb2FkZXItPmRvY3VtZW50TG9hZGVyKCktPmFyY2hpdmVSZXNv
dXJjZUZvclVSTChyZXNvdXJjZUxvYWRlci0+cmVxdWVzdCgpLnVybCgpKSkgewotICAgICAgICBy
ZXNvdXJjZUxvYWRlci0+c3RhcnQoKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLSNlbmRpZgot
Ci0jaWYgUExBVEZPUk0oSU9TKQotICAgIEhvc3RJbmZvcm1hdGlvbiogaG9zdCA9IGhvc3RGb3JV
UkwocmVzb3VyY2VMb2FkZXItPmlPU09yaWdpbmFsUmVxdWVzdCgpLnVybCgpLCBDcmVhdGVJZk5v
dEZvdW5kKTsKLSNlbHNlCi0gICAgSG9zdEluZm9ybWF0aW9uKiBob3N0ID0gaG9zdEZvclVSTChy
ZXNvdXJjZUxvYWRlci0+dXJsKCksIENyZWF0ZUlmTm90Rm91bmQpOwotI2VuZGlmCi0KLSAgICBS
ZXNvdXJjZUxvYWRQcmlvcml0eSBwcmlvcml0eSA9IHJlc291cmNlTG9hZGVyLT5yZXF1ZXN0KCku
cHJpb3JpdHkoKTsKLQotICAgIGJvb2wgaGFkUmVxdWVzdHMgPSBob3N0LT5oYXNSZXF1ZXN0cygp
OwotICAgIGhvc3QtPnNjaGVkdWxlKHJlc291cmNlTG9hZGVyLCBwcmlvcml0eSk7Ci0KLSNpZiBQ
TEFURk9STShDT0NPQSkgfHwgVVNFKENGTkVUV09SSykKLSAgICBpZiAoUmVzb3VyY2VSZXF1ZXN0
OjpyZXNvdXJjZVByaW9yaXRpZXNFbmFibGVkKCkgJiYgIWlzU3VzcGVuZGluZ1BlbmRpbmdSZXF1
ZXN0cygpKSB7Ci0gICAgICAgIC8vIFNlcnZlIGFsbCByZXF1ZXN0cyBhdCBvbmNlIHRvIGtlZXAg
dGhlIHBpcGVsaW5lIGZ1bGwgYXQgdGhlIG5ldHdvcmsgbGF5ZXIuCi0gICAgICAgIC8vIEZJWE1F
OiBEb2VzIHRoaXMgY29kZSBkbyBhbnl0aGluZyB1c2VmdWwsIGdpdmVuIHRoYXQgd2UgYWxzbyBz
ZXQgbWF4UmVxdWVzdHNJbkZsaWdodFBlckhvc3QgdG8gZWZmZWN0aXZlbHkgdW5saW1pdGVkIG9u
IHRoZXNlIHBsYXRmb3Jtcz8KLSAgICAgICAgc2VydmVQZW5kaW5nUmVxdWVzdHMoaG9zdCwgUmVz
b3VyY2VMb2FkUHJpb3JpdHk6OlZlcnlMb3cpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotI2Vu
ZGlmCi0KLSNpZiBQTEFURk9STShJT1MpCi0gICAgaWYgKChwcmlvcml0eSA+IFJlc291cmNlTG9h
ZFByaW9yaXR5OjpMb3cgfHwgIXJlc291cmNlTG9hZGVyLT5pT1NPcmlnaW5hbFJlcXVlc3QoKS51
cmwoKS5wcm90b2NvbElzSW5IVFRQRmFtaWx5KCkgfHwgKHByaW9yaXR5ID09IFJlc291cmNlTG9h
ZFByaW9yaXR5OjpMb3cgJiYgIWhhZFJlcXVlc3RzKSkgJiYgIWlzU3VzcGVuZGluZ1BlbmRpbmdS
ZXF1ZXN0cygpKSB7Ci0gICAgICAgIC8vIFRyeSB0byByZXF1ZXN0IGltcG9ydGFudCByZXNvdXJj
ZXMgaW1tZWRpYXRlbHkuCi0gICAgICAgIHNlcnZlUGVuZGluZ1JlcXVlc3RzKGhvc3QsIHByaW9y
aXR5KTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLSNlbHNlCi0gICAgaWYgKHByaW9yaXR5ID4g
UmVzb3VyY2VMb2FkUHJpb3JpdHk6OkxvdyB8fCAhcmVzb3VyY2VMb2FkZXItPnVybCgpLnByb3Rv
Y29sSXNJbkhUVFBGYW1pbHkoKSB8fCAocHJpb3JpdHkgPT0gUmVzb3VyY2VMb2FkUHJpb3JpdHk6
OkxvdyAmJiAhaGFkUmVxdWVzdHMpKSB7Ci0gICAgICAgIC8vIFRyeSB0byByZXF1ZXN0IGltcG9y
dGFudCByZXNvdXJjZXMgaW1tZWRpYXRlbHkuCi0gICAgICAgIHNlcnZlUGVuZGluZ1JlcXVlc3Rz
KGhvc3QsIHByaW9yaXR5KTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLSNlbmRpZgotCi0gICAg
Ly8gSGFuZGxlIGFzeW5jaHJvbm91c2x5IHNvIGVhcmx5IGxvdyBwcmlvcml0eSByZXF1ZXN0cyBk
b24ndAotICAgIC8vIGdldCBzY2hlZHVsZWQgYmVmb3JlIGxhdGVyIGhpZ2ggcHJpb3JpdHkgb25l
cy4KLSAgICBzY2hlZHVsZVNlcnZlUGVuZGluZ1JlcXVlc3RzKCk7Ci19Ci0KLXZvaWQgUmVzb3Vy
Y2VMb2FkU2NoZWR1bGVyOjpyZW1vdmUoUmVzb3VyY2VMb2FkZXIqIHJlc291cmNlTG9hZGVyKQot
ewotICAgIEFTU0VSVChyZXNvdXJjZUxvYWRlcik7Ci0KLSAgICBIb3N0SW5mb3JtYXRpb24qIGhv
c3QgPSBob3N0Rm9yVVJMKHJlc291cmNlTG9hZGVyLT51cmwoKSk7Ci0gICAgaWYgKGhvc3QpCi0g
ICAgICAgIGhvc3QtPnJlbW92ZShyZXNvdXJjZUxvYWRlcik7Ci0jaWYgUExBVEZPUk0oSU9TKQot
ICAgIC8vIFJlc291cmNlTG9hZGVyOjp1cmwoKSBkb2Vzbid0IHN0YXJ0IHJldHVybmluZyB0aGUg
Y29ycmVjdCB2YWx1ZSB1bnRpbCB0aGUgbG9hZCBzdGFydHMuIElmIHdlIGdldCBjYW5jZWxlZCBi
ZWZvcmUgdGhhdCwgd2UgbmVlZCB0byBsb29rIGZvciBvcmlnaW5hbFJlcXVlc3QgdXJsIGluc3Rl
YWQuCi0gICAgLy8gRklYTUU6IFJlc291cmNlTG9hZGVyOjp1cmwoKSBzaG91bGQgYmUgbWFkZSB0
byByZXR1cm4gYSBzZW5zaWJsZSB2YWx1ZSBhdCBhbGwgdGltZXMuCi0gICAgaWYgKCFyZXNvdXJj
ZUxvYWRlci0+aU9TT3JpZ2luYWxSZXF1ZXN0KCkuaXNOdWxsKCkpIHsKLSAgICAgICAgSG9zdElu
Zm9ybWF0aW9uKiBvcmlnaW5hbEhvc3QgPSBob3N0Rm9yVVJMKHJlc291cmNlTG9hZGVyLT5pT1NP
cmlnaW5hbFJlcXVlc3QoKS51cmwoKSk7Ci0gICAgICAgIGlmIChvcmlnaW5hbEhvc3QgJiYgb3Jp
Z2luYWxIb3N0ICE9IGhvc3QpCi0gICAgICAgICAgICBvcmlnaW5hbEhvc3QtPnJlbW92ZShyZXNv
dXJjZUxvYWRlcik7Ci0gICAgfQotI2VuZGlmCi0gICAgc2NoZWR1bGVTZXJ2ZVBlbmRpbmdSZXF1
ZXN0cygpOwotfQotCi12b2lkIFJlc291cmNlTG9hZFNjaGVkdWxlcjo6c2V0RGVmZXJzTG9hZGlu
ZyhSZXNvdXJjZUxvYWRlciosIGJvb2wpCi17Ci19Ci0KLXZvaWQgUmVzb3VyY2VMb2FkU2NoZWR1
bGVyOjpjcm9zc09yaWdpblJlZGlyZWN0UmVjZWl2ZWQoUmVzb3VyY2VMb2FkZXIqIHJlc291cmNl
TG9hZGVyLCBjb25zdCBVUkwmIHJlZGlyZWN0VVJMKQotewotICAgIEhvc3RJbmZvcm1hdGlvbiog
b2xkSG9zdCA9IGhvc3RGb3JVUkwocmVzb3VyY2VMb2FkZXItPnVybCgpKTsKLSAgICBBU1NFUlQo
b2xkSG9zdCk7Ci0gICAgaWYgKCFvbGRIb3N0KQotICAgICAgICByZXR1cm47Ci0KLSAgICBIb3N0
SW5mb3JtYXRpb24qIG5ld0hvc3QgPSBob3N0Rm9yVVJMKHJlZGlyZWN0VVJMLCBDcmVhdGVJZk5v
dEZvdW5kKTsKLQotICAgIGlmIChvbGRIb3N0LT5uYW1lKCkgPT0gbmV3SG9zdC0+bmFtZSgpKQot
ICAgICAgICByZXR1cm47Ci0KLSAgICBuZXdIb3N0LT5hZGRMb2FkSW5Qcm9ncmVzcyhyZXNvdXJj
ZUxvYWRlcik7Ci0gICAgb2xkSG9zdC0+cmVtb3ZlKHJlc291cmNlTG9hZGVyKTsKLX0KLQotdm9p
ZCBSZXNvdXJjZUxvYWRTY2hlZHVsZXI6OnNlcnZlUGVuZGluZ1JlcXVlc3RzKFJlc291cmNlTG9h
ZFByaW9yaXR5IG1pbmltdW1Qcmlvcml0eSkKLXsKLSAgICBMT0coUmVzb3VyY2VMb2FkaW5nLCAi
UmVzb3VyY2VMb2FkU2NoZWR1bGVyOjpzZXJ2ZVBlbmRpbmdSZXF1ZXN0cy4gbV9zdXNwZW5kUGVu
ZGluZ1JlcXVlc3RzQ291bnQ9JWQiLCBtX3N1c3BlbmRQZW5kaW5nUmVxdWVzdHNDb3VudCk7IAot
ICAgIGlmIChpc1N1c3BlbmRpbmdQZW5kaW5nUmVxdWVzdHMoKSkKLSAgICAgICAgcmV0dXJuOwot
Ci0gICAgbV9yZXF1ZXN0VGltZXIuc3RvcCgpOwotICAgIAotICAgIHNlcnZlUGVuZGluZ1JlcXVl
c3RzKG1fbm9uSFRUUFByb3RvY29sSG9zdCwgbWluaW11bVByaW9yaXR5KTsKLQotICAgIFZlY3Rv
cjxIb3N0SW5mb3JtYXRpb24qPiBob3N0c1RvU2VydmU7Ci0gICAgY29weVZhbHVlc1RvVmVjdG9y
KG1faG9zdHMsIGhvc3RzVG9TZXJ2ZSk7Ci0KLSAgICBmb3IgKGF1dG8qIGhvc3QgOiBob3N0c1Rv
U2VydmUpIHsKLSAgICAgICAgaWYgKGhvc3QtPmhhc1JlcXVlc3RzKCkpCi0gICAgICAgICAgICBz
ZXJ2ZVBlbmRpbmdSZXF1ZXN0cyhob3N0LCBtaW5pbXVtUHJpb3JpdHkpOwotICAgICAgICBlbHNl
Ci0gICAgICAgICAgICBkZWxldGUgbV9ob3N0cy50YWtlKGhvc3QtPm5hbWUoKSk7Ci0gICAgfQot
fQotCi12b2lkIFJlc291cmNlTG9hZFNjaGVkdWxlcjo6c2VydmVQZW5kaW5nUmVxdWVzdHMoSG9z
dEluZm9ybWF0aW9uKiBob3N0LCBSZXNvdXJjZUxvYWRQcmlvcml0eSBtaW5pbXVtUHJpb3JpdHkp
Ci17Ci0gICAgTE9HKFJlc291cmNlTG9hZGluZywgIlJlc291cmNlTG9hZFNjaGVkdWxlcjo6c2Vy
dmVQZW5kaW5nUmVxdWVzdHMgSG9zdEluZm9ybWF0aW9uLm1fbmFtZT0nJXMnIiwgaG9zdC0+bmFt
ZSgpLmxhdGluMSgpLmRhdGEoKSk7Ci0KLSAgICBhdXRvIHByaW9yaXR5ID0gUmVzb3VyY2VMb2Fk
UHJpb3JpdHk6OkhpZ2hlc3Q7Ci0gICAgd2hpbGUgKHRydWUpIHsKLSAgICAgICAgYXV0byYgcmVx
dWVzdHNQZW5kaW5nID0gaG9zdC0+cmVxdWVzdHNQZW5kaW5nKHByaW9yaXR5KTsKLSAgICAgICAg
d2hpbGUgKCFyZXF1ZXN0c1BlbmRpbmcuaXNFbXB0eSgpKSB7Ci0gICAgICAgICAgICBSZWZQdHI8
UmVzb3VyY2VMb2FkZXI+IHJlc291cmNlTG9hZGVyID0gcmVxdWVzdHNQZW5kaW5nLmZpcnN0KCk7
Ci0KLSAgICAgICAgICAgIC8vIEZvciBuYW1lZCBob3N0cyAtIHdoaWNoIGFyZSBvbmx5IGh0dHAo
cykgaG9zdHMgLSB3ZSBzaG91bGQgYWx3YXlzIGVuZm9yY2UgdGhlIGNvbm5lY3Rpb24gbGltaXQu
Ci0gICAgICAgICAgICAvLyBGb3Igbm9uLW5hbWVkIGhvc3RzIC0gZXZlcnl0aGluZyBidXQgaHR0
cChzKSAtIHdlIHNob3VsZCBvbmx5IGVuZm9yY2UgdGhlIGxpbWl0IGlmIHRoZSBkb2N1bWVudCBp
c24ndCBkb25lIHBhcnNpbmcgCi0gICAgICAgICAgICAvLyBhbmQgd2UgZG9uJ3Qga25vdyBhbGwg
c3R5bGVzaGVldHMgeWV0LgotICAgICAgICAgICAgRG9jdW1lbnQqIGRvY3VtZW50ID0gcmVzb3Vy
Y2VMb2FkZXItPmZyYW1lTG9hZGVyKCkgPyByZXNvdXJjZUxvYWRlci0+ZnJhbWVMb2FkZXIoKS0+
ZnJhbWUoKS5kb2N1bWVudCgpIDogMDsKLSAgICAgICAgICAgIGJvb2wgc2hvdWxkTGltaXRSZXF1
ZXN0cyA9ICFob3N0LT5uYW1lKCkuaXNOdWxsKCkgfHwgKGRvY3VtZW50ICYmIChkb2N1bWVudC0+
cGFyc2luZygpIHx8ICFkb2N1bWVudC0+aGF2ZVN0eWxlc2hlZXRzTG9hZGVkKCkpKTsKLSAgICAg
ICAgICAgIGlmIChzaG91bGRMaW1pdFJlcXVlc3RzICYmIGhvc3QtPmxpbWl0UmVxdWVzdHMocHJp
b3JpdHkpKQotICAgICAgICAgICAgICAgIHJldHVybjsKLQotICAgICAgICAgICAgcmVxdWVzdHNQ
ZW5kaW5nLnJlbW92ZUZpcnN0KCk7Ci0gICAgICAgICAgICBob3N0LT5hZGRMb2FkSW5Qcm9ncmVz
cyhyZXNvdXJjZUxvYWRlci5nZXQoKSk7Ci0jaWYgUExBVEZPUk0oSU9TKQotICAgICAgICAgICAg
aWYgKCFhcHBsaWNhdGlvbklzV2ViUHJvY2VzcygpKSB7Ci0gICAgICAgICAgICAgICAgcmVzb3Vy
Y2VMb2FkZXItPnN0YXJ0TG9hZGluZygpOwotICAgICAgICAgICAgICAgIHJldHVybjsKLSAgICAg
ICAgICAgIH0KLSNlbmRpZgotICAgICAgICAgICAgcmVzb3VyY2VMb2FkZXItPnN0YXJ0KCk7Ci0g
ICAgICAgIH0KLSAgICAgICAgaWYgKHByaW9yaXR5ID09IG1pbmltdW1Qcmlvcml0eSkKLSAgICAg
ICAgICAgIHJldHVybjsKLSAgICAgICAgLS1wcmlvcml0eTsKLSAgICB9Ci19Ci0KLXZvaWQgUmVz
b3VyY2VMb2FkU2NoZWR1bGVyOjpzdXNwZW5kUGVuZGluZ1JlcXVlc3RzKCkKLXsKLSAgICArK21f
c3VzcGVuZFBlbmRpbmdSZXF1ZXN0c0NvdW50OwotfQotCi12b2lkIFJlc291cmNlTG9hZFNjaGVk
dWxlcjo6cmVzdW1lUGVuZGluZ1JlcXVlc3RzKCkKLXsKLSAgICBBU1NFUlQobV9zdXNwZW5kUGVu
ZGluZ1JlcXVlc3RzQ291bnQpOwotICAgIC0tbV9zdXNwZW5kUGVuZGluZ1JlcXVlc3RzQ291bnQ7
Ci0gICAgaWYgKG1fc3VzcGVuZFBlbmRpbmdSZXF1ZXN0c0NvdW50KQotICAgICAgICByZXR1cm47
Ci0gICAgaWYgKCFtX2hvc3RzLmlzRW1wdHkoKSB8fCBtX25vbkhUVFBQcm90b2NvbEhvc3QtPmhh
c1JlcXVlc3RzKCkpCi0gICAgICAgIHNjaGVkdWxlU2VydmVQZW5kaW5nUmVxdWVzdHMoKTsKLX0K
LSAgICAKLXZvaWQgUmVzb3VyY2VMb2FkU2NoZWR1bGVyOjpzY2hlZHVsZVNlcnZlUGVuZGluZ1Jl
cXVlc3RzKCkKLXsKLSAgICBMT0coUmVzb3VyY2VMb2FkaW5nLCAiUmVzb3VyY2VMb2FkU2NoZWR1
bGVyOjpzY2hlZHVsZVNlcnZlUGVuZGluZ1JlcXVlc3RzLCBtX3JlcXVlc3RUaW1lci5pc0FjdGl2
ZSgpPSV1IiwgbV9yZXF1ZXN0VGltZXIuaXNBY3RpdmUoKSk7Ci0gICAgaWYgKCFtX3JlcXVlc3RU
aW1lci5pc0FjdGl2ZSgpKQotICAgICAgICBtX3JlcXVlc3RUaW1lci5zdGFydE9uZVNob3QoMCk7
Ci19Ci0KLXZvaWQgUmVzb3VyY2VMb2FkU2NoZWR1bGVyOjpyZXF1ZXN0VGltZXJGaXJlZCgpCi17
Ci0gICAgTE9HKFJlc291cmNlTG9hZGluZywgIlJlc291cmNlTG9hZFNjaGVkdWxlcjo6cmVxdWVz
dFRpbWVyRmlyZWRcbiIpOwotICAgIHNlcnZlUGVuZGluZ1JlcXVlc3RzKCk7Ci19Ci0KLVJlc291
cmNlTG9hZFNjaGVkdWxlcjo6SG9zdEluZm9ybWF0aW9uOjpIb3N0SW5mb3JtYXRpb24oY29uc3Qg
U3RyaW5nJiBuYW1lLCB1bnNpZ25lZCBtYXhSZXF1ZXN0c0luRmxpZ2h0KQotICAgIDogbV9uYW1l
KG5hbWUpCi0gICAgLCBtX21heFJlcXVlc3RzSW5GbGlnaHQobWF4UmVxdWVzdHNJbkZsaWdodCkK
LXsKLX0KLQotUmVzb3VyY2VMb2FkU2NoZWR1bGVyOjpIb3N0SW5mb3JtYXRpb246On5Ib3N0SW5m
b3JtYXRpb24oKQotewotICAgIEFTU0VSVCghaGFzUmVxdWVzdHMoKSk7Ci19Ci0KLXVuc2lnbmVk
IFJlc291cmNlTG9hZFNjaGVkdWxlcjo6SG9zdEluZm9ybWF0aW9uOjpwcmlvcml0eVRvSW5kZXgo
UmVzb3VyY2VMb2FkUHJpb3JpdHkgcHJpb3JpdHkpCi17Ci0gICAgc3dpdGNoIChwcmlvcml0eSkg
ewotICAgIGNhc2UgUmVzb3VyY2VMb2FkUHJpb3JpdHk6OlZlcnlMb3c6Ci0gICAgICAgIHJldHVy
biAwOwotICAgIGNhc2UgUmVzb3VyY2VMb2FkUHJpb3JpdHk6OkxvdzoKLSAgICAgICAgcmV0dXJu
IDE7Ci0gICAgY2FzZSBSZXNvdXJjZUxvYWRQcmlvcml0eTo6TWVkaXVtOgotICAgICAgICByZXR1
cm4gMjsKLSAgICBjYXNlIFJlc291cmNlTG9hZFByaW9yaXR5OjpIaWdoOgotICAgICAgICByZXR1
cm4gMzsKLSAgICBjYXNlIFJlc291cmNlTG9hZFByaW9yaXR5OjpWZXJ5SGlnaDoKLSAgICAgICAg
cmV0dXJuIDQ7Ci0gICAgfQotICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwotICAgIHJldHVybiAw
OwotfQotCi12b2lkIFJlc291cmNlTG9hZFNjaGVkdWxlcjo6SG9zdEluZm9ybWF0aW9uOjpzY2hl
ZHVsZShSZXNvdXJjZUxvYWRlciogcmVzb3VyY2VMb2FkZXIsIFJlc291cmNlTG9hZFByaW9yaXR5
IHByaW9yaXR5KQotewotICAgIG1fcmVxdWVzdHNQZW5kaW5nW3ByaW9yaXR5VG9JbmRleChwcmlv
cml0eSldLmFwcGVuZChyZXNvdXJjZUxvYWRlcik7Ci19Ci0gICAgCi12b2lkIFJlc291cmNlTG9h
ZFNjaGVkdWxlcjo6SG9zdEluZm9ybWF0aW9uOjphZGRMb2FkSW5Qcm9ncmVzcyhSZXNvdXJjZUxv
YWRlciogcmVzb3VyY2VMb2FkZXIpCi17Ci0gICAgTE9HKFJlc291cmNlTG9hZGluZywgIkhvc3RJ
bmZvcm1hdGlvbiAnJXMnIGxvYWRpbmcgJyVzJy4gQ3VycmVudCBjb3VudCAlZCIsIG1fbmFtZS5s
YXRpbjEoKS5kYXRhKCksIHJlc291cmNlTG9hZGVyLT51cmwoKS5zdHJpbmcoKS5sYXRpbjEoKS5k
YXRhKCksIG1fcmVxdWVzdHNMb2FkaW5nLnNpemUoKSk7Ci0gICAgbV9yZXF1ZXN0c0xvYWRpbmcu
YWRkKHJlc291cmNlTG9hZGVyKTsKLX0KLSAgICAKLXZvaWQgUmVzb3VyY2VMb2FkU2NoZWR1bGVy
OjpIb3N0SW5mb3JtYXRpb246OnJlbW92ZShSZXNvdXJjZUxvYWRlciogcmVzb3VyY2VMb2FkZXIp
Ci17Ci0gICAgaWYgKG1fcmVxdWVzdHNMb2FkaW5nLnJlbW92ZShyZXNvdXJjZUxvYWRlcikpCi0g
ICAgICAgIHJldHVybjsKLSAgICAKLSAgICBmb3IgKGF1dG8mIHJlcXVlc3RRdWV1ZSA6IG1fcmVx
dWVzdHNQZW5kaW5nKSB7Ci0gICAgICAgIGZvciAoYXV0byBpdCA9IHJlcXVlc3RRdWV1ZS5iZWdp
bigpLCBlbmQgPSByZXF1ZXN0UXVldWUuZW5kKCk7IGl0ICE9IGVuZDsgKytpdCkgewotICAgICAg
ICAgICAgaWYgKCppdCA9PSByZXNvdXJjZUxvYWRlcikgewotICAgICAgICAgICAgICAgIHJlcXVl
c3RRdWV1ZS5yZW1vdmUoaXQpOwotICAgICAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgICAg
IH0KLSAgICAgICAgfQotICAgIH0KLX0KLQotYm9vbCBSZXNvdXJjZUxvYWRTY2hlZHVsZXI6Okhv
c3RJbmZvcm1hdGlvbjo6aGFzUmVxdWVzdHMoKSBjb25zdAotewotICAgIGlmICghbV9yZXF1ZXN0
c0xvYWRpbmcuaXNFbXB0eSgpKQotICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICBmb3IgKGF1dG8m
IHJlcXVlc3RRdWV1ZSA6IG1fcmVxdWVzdHNQZW5kaW5nKSB7Ci0gICAgICAgIGlmICghcmVxdWVz
dFF1ZXVlLmlzRW1wdHkoKSkKLSAgICAgICAgICAgIHJldHVybiB0cnVlOwotICAgIH0KLSAgICBy
ZXR1cm4gZmFsc2U7Ci19Ci0KLWJvb2wgUmVzb3VyY2VMb2FkU2NoZWR1bGVyOjpIb3N0SW5mb3Jt
YXRpb246OmxpbWl0UmVxdWVzdHMoUmVzb3VyY2VMb2FkUHJpb3JpdHkgcHJpb3JpdHkpIGNvbnN0
IAotewotICAgIGlmIChwcmlvcml0eSA9PSBSZXNvdXJjZUxvYWRQcmlvcml0eTo6VmVyeUxvdyAm
JiAhbV9yZXF1ZXN0c0xvYWRpbmcuaXNFbXB0eSgpKQotICAgICAgICByZXR1cm4gdHJ1ZTsKLSAg
ICByZXR1cm4gbV9yZXF1ZXN0c0xvYWRpbmcuc2l6ZSgpID49IChyZXNvdXJjZUxvYWRTY2hlZHVs
ZXIoKS0+aXNTZXJpYWxMb2FkaW5nRW5hYmxlZCgpID8gMSA6IG1fbWF4UmVxdWVzdHNJbkZsaWdo
dCk7Ci19Ci0KLX0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2xv
YWRlci9SZXNvdXJjZUxvYWRTY2hlZHVsZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29y
ZS9sb2FkZXIvUmVzb3VyY2VMb2FkU2NoZWR1bGVyLmgJKHJldmlzaW9uIDE5Mjg4MCkKKysrIFNv
dXJjZS9XZWJDb3JlL2xvYWRlci9SZXNvdXJjZUxvYWRTY2hlZHVsZXIuaAkod29ya2luZyBjb3B5
KQpAQCAtMSwxMzQgKzAsMCBAQAotLyoKLSAgICBDb3B5cmlnaHQgKEMpIDE5OTggTGFycyBLbm9s
bCAoa25vbGxAbXBpLWhkLm1wZy5kZSkKLSAgICBDb3B5cmlnaHQgKEMpIDIwMDEgRGlyayBNdWVs
bGVyIDxtdWVsbGVyQGtkZS5vcmc+Ci0gICAgQ29weXJpZ2h0IChDKSAyMDA0LCAyMDA2LCAyMDA3
LCAyMDA4IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAgICBDb3B5cmlnaHQgKEMp
IDIwMTAgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLQotICAgIFRoaXMgbGlicmFy
eSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKLSAgICBt
b2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1Ymxp
YwotICAgIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRp
b247IGVpdGhlcgotICAgIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0
aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLQotICAgIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRl
ZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICAgIGJ1dCBXSVRIT1VUIEFO
WSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gICAgTUVS
Q0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRo
ZSBHTlUKLSAgICBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWls
cy4KLQotICAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJy
YXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKLSAgICBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsg
c2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bwotICAgIHRoZSBGcmVl
IFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxv
b3IsCi0gICAgQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCi0gKi8KLQotI2lmbmRlZiBSZXNv
dXJjZUxvYWRTY2hlZHVsZXJfaAotI2RlZmluZSBSZXNvdXJjZUxvYWRTY2hlZHVsZXJfaAotCi0j
aW5jbHVkZSAiRnJhbWVMb2FkZXJUeXBlcy5oIgotI2luY2x1ZGUgIlJlc291cmNlTG9hZGVyT3B0
aW9ucy5oIgotI2luY2x1ZGUgIlJlc291cmNlTG9hZFByaW9yaXR5LmgiCi0jaW5jbHVkZSAiVGlt
ZXIuaCIKLSNpbmNsdWRlIDxhcnJheT4KLSNpbmNsdWRlIDx3dGYvRGVxdWUuaD4KLSNpbmNsdWRl
IDx3dGYvSGFzaE1hcC5oPgotI2luY2x1ZGUgPHd0Zi9IYXNoU2V0Lmg+Ci0jaW5jbHVkZSA8d3Rm
L05vbmNvcHlhYmxlLmg+Ci0jaW5jbHVkZSA8d3RmL3RleHQvU3RyaW5nSGFzaC5oPgotI2luY2x1
ZGUgPHd0Zi90ZXh0L1dURlN0cmluZy5oPgotCi1uYW1lc3BhY2UgV2ViQ29yZSB7Ci0KLWNsYXNz
IENhY2hlZFJlc291cmNlOwotY2xhc3MgRnJhbWU7Ci1jbGFzcyBVUkw7Ci1jbGFzcyBOZXRzY2Fw
ZVBsdWdJblN0cmVhbUxvYWRlcjsKLWNsYXNzIE5ldHNjYXBlUGx1Z0luU3RyZWFtTG9hZGVyQ2xp
ZW50OwotY2xhc3MgUmVzb3VyY2VMb2FkZXI7Ci1jbGFzcyBSZXNvdXJjZVJlcXVlc3Q7Ci1jbGFz
cyBTdWJyZXNvdXJjZUxvYWRlcjsKLQotY2xhc3MgUmVzb3VyY2VMb2FkU2NoZWR1bGVyIHsKLSAg
ICBXVEZfTUFLRV9OT05DT1BZQUJMRShSZXNvdXJjZUxvYWRTY2hlZHVsZXIpOyBXVEZfTUFLRV9G
QVNUX0FMTE9DQVRFRDsKLXB1YmxpYzoKLSAgICBXRUJDT1JFX0VYUE9SVCBmcmllbmQgUmVzb3Vy
Y2VMb2FkU2NoZWR1bGVyKiByZXNvdXJjZUxvYWRTY2hlZHVsZXIoKTsKLQotICAgIFdFQkNPUkVf
RVhQT1JUIHZpcnR1YWwgUmVmUHRyPFN1YnJlc291cmNlTG9hZGVyPiBzY2hlZHVsZVN1YnJlc291
cmNlTG9hZChGcmFtZSosIENhY2hlZFJlc291cmNlKiwgY29uc3QgUmVzb3VyY2VSZXF1ZXN0Jiwg
Y29uc3QgUmVzb3VyY2VMb2FkZXJPcHRpb25zJik7Ci0gICAgV0VCQ09SRV9FWFBPUlQgdmlydHVh
bCBSZWZQdHI8TmV0c2NhcGVQbHVnSW5TdHJlYW1Mb2FkZXI+IHNjaGVkdWxlUGx1Z2luU3RyZWFt
TG9hZChGcmFtZSosIE5ldHNjYXBlUGx1Z0luU3RyZWFtTG9hZGVyQ2xpZW50KiwgY29uc3QgUmVz
b3VyY2VSZXF1ZXN0Jik7Ci0gICAgV0VCQ09SRV9FWFBPUlQgdmlydHVhbCB2b2lkIHJlbW92ZShS
ZXNvdXJjZUxvYWRlciopOwotICAgIHZpcnR1YWwgdm9pZCBzZXREZWZlcnNMb2FkaW5nKFJlc291
cmNlTG9hZGVyKiwgYm9vbCk7Ci0gICAgdmlydHVhbCB2b2lkIGNyb3NzT3JpZ2luUmVkaXJlY3RS
ZWNlaXZlZChSZXNvdXJjZUxvYWRlciosIGNvbnN0IFVSTCYgcmVkaXJlY3RVUkwpOwotICAgIAot
ICAgIFdFQkNPUkVfRVhQT1JUIHZpcnR1YWwgdm9pZCBzZXJ2ZVBlbmRpbmdSZXF1ZXN0cyhSZXNv
dXJjZUxvYWRQcmlvcml0eSBtaW5pbXVtUHJpb3JpdHkgPSBSZXNvdXJjZUxvYWRQcmlvcml0eTo6
VmVyeUxvdyk7Ci0gICAgV0VCQ09SRV9FWFBPUlQgdmlydHVhbCB2b2lkIHN1c3BlbmRQZW5kaW5n
UmVxdWVzdHMoKTsKLSAgICBXRUJDT1JFX0VYUE9SVCB2aXJ0dWFsIHZvaWQgcmVzdW1lUGVuZGlu
Z1JlcXVlc3RzKCk7Ci0gICAgCi0gICAgYm9vbCBpc1NlcmlhbExvYWRpbmdFbmFibGVkKCkgY29u
c3QgeyByZXR1cm4gbV9pc1NlcmlhbExvYWRpbmdFbmFibGVkOyB9Ci0gICAgdmlydHVhbCB2b2lk
IHNldFNlcmlhbExvYWRpbmdFbmFibGVkKGJvb2wgYikgeyBtX2lzU2VyaWFsTG9hZGluZ0VuYWJs
ZWQgPSBiOyB9Ci0KLSAgICBjbGFzcyBTdXNwZW5kZXIgewotICAgIHB1YmxpYzoKLSAgICAgICAg
ZXhwbGljaXQgU3VzcGVuZGVyKFJlc291cmNlTG9hZFNjaGVkdWxlciYgc2NoZWR1bGVyKSA6IG1f
c2NoZWR1bGVyKHNjaGVkdWxlcikgeyBtX3NjaGVkdWxlci5zdXNwZW5kUGVuZGluZ1JlcXVlc3Rz
KCk7IH0KLSAgICAgICAgflN1c3BlbmRlcigpIHsgbV9zY2hlZHVsZXIucmVzdW1lUGVuZGluZ1Jl
cXVlc3RzKCk7IH0KLSAgICBwcml2YXRlOgotICAgICAgICBSZXNvdXJjZUxvYWRTY2hlZHVsZXIm
IG1fc2NoZWR1bGVyOwotICAgIH07Ci0KLXByb3RlY3RlZDoKLSAgICBXRUJDT1JFX0VYUE9SVCBS
ZXNvdXJjZUxvYWRTY2hlZHVsZXIoKTsKLSAgICBXRUJDT1JFX0VYUE9SVCB2aXJ0dWFsIH5SZXNv
dXJjZUxvYWRTY2hlZHVsZXIoKTsKLQotcHJpdmF0ZToKLSAgICB2b2lkIHNjaGVkdWxlTG9hZChS
ZXNvdXJjZUxvYWRlciopOwotICAgIHZvaWQgc2NoZWR1bGVTZXJ2ZVBlbmRpbmdSZXF1ZXN0cygp
OwotICAgIHZvaWQgcmVxdWVzdFRpbWVyRmlyZWQoKTsKLQotICAgIGJvb2wgaXNTdXNwZW5kaW5n
UGVuZGluZ1JlcXVlc3RzKCkgY29uc3QgeyByZXR1cm4gISFtX3N1c3BlbmRQZW5kaW5nUmVxdWVz
dHNDb3VudDsgfQotCi0gICAgY2xhc3MgSG9zdEluZm9ybWF0aW9uIHsKLSAgICAgICAgV1RGX01B
S0VfTk9OQ09QWUFCTEUoSG9zdEluZm9ybWF0aW9uKTsgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7
Ci0gICAgcHVibGljOgotICAgICAgICBIb3N0SW5mb3JtYXRpb24oY29uc3QgU3RyaW5nJiwgdW5z
aWduZWQpOwotICAgICAgICB+SG9zdEluZm9ybWF0aW9uKCk7Ci0gICAgICAgIAotICAgICAgICBj
b25zdCBTdHJpbmcmIG5hbWUoKSBjb25zdCB7IHJldHVybiBtX25hbWU7IH0KLSAgICAgICAgdm9p
ZCBzY2hlZHVsZShSZXNvdXJjZUxvYWRlciosIFJlc291cmNlTG9hZFByaW9yaXR5ID0gUmVzb3Vy
Y2VMb2FkUHJpb3JpdHk6OlZlcnlMb3cpOwotICAgICAgICB2b2lkIGFkZExvYWRJblByb2dyZXNz
KFJlc291cmNlTG9hZGVyKik7Ci0gICAgICAgIHZvaWQgcmVtb3ZlKFJlc291cmNlTG9hZGVyKik7
Ci0gICAgICAgIGJvb2wgaGFzUmVxdWVzdHMoKSBjb25zdDsKLSAgICAgICAgYm9vbCBsaW1pdFJl
cXVlc3RzKFJlc291cmNlTG9hZFByaW9yaXR5KSBjb25zdDsKLQotICAgICAgICB0eXBlZGVmIERl
cXVlPFJlZlB0cjxSZXNvdXJjZUxvYWRlcj4+IFJlcXVlc3RRdWV1ZTsKLSAgICAgICAgUmVxdWVz
dFF1ZXVlJiByZXF1ZXN0c1BlbmRpbmcoUmVzb3VyY2VMb2FkUHJpb3JpdHkgcHJpb3JpdHkpIHsg
cmV0dXJuIG1fcmVxdWVzdHNQZW5kaW5nW3ByaW9yaXR5VG9JbmRleChwcmlvcml0eSldOyB9Ci0K
LSAgICBwcml2YXRlOgotICAgICAgICBzdGF0aWMgdW5zaWduZWQgcHJpb3JpdHlUb0luZGV4KFJl
c291cmNlTG9hZFByaW9yaXR5KTsKLQotICAgICAgICBzdGQ6OmFycmF5PFJlcXVlc3RRdWV1ZSwg
cmVzb3VyY2VMb2FkUHJpb3JpdHlDb3VudD4gbV9yZXF1ZXN0c1BlbmRpbmc7Ci0gICAgICAgIHR5
cGVkZWYgSGFzaFNldDxSZWZQdHI8UmVzb3VyY2VMb2FkZXI+PiBSZXF1ZXN0TWFwOwotICAgICAg
ICBSZXF1ZXN0TWFwIG1fcmVxdWVzdHNMb2FkaW5nOwotICAgICAgICBjb25zdCBTdHJpbmcgbV9u
YW1lOwotICAgICAgICBjb25zdCB1bnNpZ25lZCBtX21heFJlcXVlc3RzSW5GbGlnaHQ7Ci0gICAg
fTsKLQotICAgIGVudW0gQ3JlYXRlSG9zdFBvbGljeSB7Ci0gICAgICAgIENyZWF0ZUlmTm90Rm91
bmQsCi0gICAgICAgIEZpbmRPbmx5Ci0gICAgfTsKLSAgICAKLSAgICBIb3N0SW5mb3JtYXRpb24q
IGhvc3RGb3JVUkwoY29uc3QgVVJMJiwgQ3JlYXRlSG9zdFBvbGljeSA9IEZpbmRPbmx5KTsKLSAg
ICBXRUJDT1JFX0VYUE9SVCB2b2lkIHNlcnZlUGVuZGluZ1JlcXVlc3RzKEhvc3RJbmZvcm1hdGlv
biosIFJlc291cmNlTG9hZFByaW9yaXR5KTsKLQotICAgIHR5cGVkZWYgSGFzaE1hcDxTdHJpbmcs
IEhvc3RJbmZvcm1hdGlvbiosIFN0cmluZ0hhc2g+IEhvc3RNYXA7Ci0gICAgSG9zdE1hcCBtX2hv
c3RzOwotICAgIEhvc3RJbmZvcm1hdGlvbiogbV9ub25IVFRQUHJvdG9jb2xIb3N0OwotICAgICAg
ICAKLSAgICBUaW1lciBtX3JlcXVlc3RUaW1lcjsKLQotICAgIHVuc2lnbmVkIG1fc3VzcGVuZFBl
bmRpbmdSZXF1ZXN0c0NvdW50OwotICAgIGJvb2wgbV9pc1NlcmlhbExvYWRpbmdFbmFibGVkOwot
fTsKLQotV0VCQ09SRV9FWFBPUlQgUmVzb3VyY2VMb2FkU2NoZWR1bGVyKiByZXNvdXJjZUxvYWRT
Y2hlZHVsZXIoKTsKLQotfQotCi0jZW5kaWYKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2xvYWRlci9S
ZXNvdXJjZUxvYWRlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvbG9hZGVyL1Jl
c291cmNlTG9hZGVyLmNwcAkocmV2aXNpb24gMTkyODgwKQorKysgU291cmNlL1dlYkNvcmUvbG9h
ZGVyL1Jlc291cmNlTG9hZGVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDcsNyArNDcsNiBAQAog
I2luY2x1ZGUgIlByb2dyZXNzVHJhY2tlci5oIgogI2luY2x1ZGUgIlJlc291cmNlRXJyb3IuaCIK
ICNpbmNsdWRlICJSZXNvdXJjZUhhbmRsZS5oIgotI2luY2x1ZGUgIlJlc291cmNlTG9hZFNjaGVk
dWxlci5oIgogI2luY2x1ZGUgIlNlY3VyaXR5T3JpZ2luLmgiCiAjaW5jbHVkZSAiU2V0dGluZ3Mu
aCIKICNpbmNsdWRlICJTaGFyZWRCdWZmZXIuaCIKQEAgLTgzLDcgKzgyLDcgQEAgUmVzb3VyY2VM
b2FkZXI6On5SZXNvdXJjZUxvYWRlcigpCiAKIHZvaWQgUmVzb3VyY2VMb2FkZXI6OmZpbmlzaE5l
dHdvcmtMb2FkKCkKIHsKLSAgICBwbGF0Zm9ybVN0cmF0ZWdpZXMoKS0+bG9hZGVyU3RyYXRlZ3ko
KS0+cmVzb3VyY2VMb2FkU2NoZWR1bGVyKCktPnJlbW92ZSh0aGlzKTsKKyAgICBwbGF0Zm9ybVN0
cmF0ZWdpZXMoKS0+bG9hZGVyU3RyYXRlZ3koKS0+cmVtb3ZlKHRoaXMpOwogCiAgICAgaWYgKG1f
aGFuZGxlKSB7CiAgICAgICAgIEFTU0VSVChtX2hhbmRsZS0+Y2xpZW50KCkgPT0gdGhpcyk7CkBA
IC0yMzMsNyArMjMyLDcgQEAgdm9pZCBSZXNvdXJjZUxvYWRlcjo6c2V0RGVmZXJzTG9hZGluZyhi
bwogICAgICAgICBzdGFydCgpOwogICAgIH0KIAotICAgIHBsYXRmb3JtU3RyYXRlZ2llcygpLT5s
b2FkZXJTdHJhdGVneSgpLT5yZXNvdXJjZUxvYWRTY2hlZHVsZXIoKS0+c2V0RGVmZXJzTG9hZGlu
Zyh0aGlzLCBkZWZlcnMpOworICAgIHBsYXRmb3JtU3RyYXRlZ2llcygpLT5sb2FkZXJTdHJhdGVn
eSgpLT5zZXREZWZlcnNMb2FkaW5nKHRoaXMsIGRlZmVycyk7CiB9CiAKIEZyYW1lTG9hZGVyKiBS
ZXNvdXJjZUxvYWRlcjo6ZnJhbWVMb2FkZXIoKSBjb25zdApAQCAtMjg5LDcgKzI4OCw3IEBAIHZv
aWQgUmVzb3VyY2VMb2FkZXI6OnNldERhdGFCdWZmZXJpbmdQb2wKIHZvaWQgUmVzb3VyY2VMb2Fk
ZXI6OndpbGxTd2l0Y2hUb1N1YnN0aXR1dGVSZXNvdXJjZSgpCiB7CiAgICAgQVNTRVJUKCFtX2Rv
Y3VtZW50TG9hZGVyLT5pc1N1YnN0aXR1dGVMb2FkUGVuZGluZyh0aGlzKSk7Ci0gICAgcGxhdGZv
cm1TdHJhdGVnaWVzKCktPmxvYWRlclN0cmF0ZWd5KCktPnJlc291cmNlTG9hZFNjaGVkdWxlcigp
LT5yZW1vdmUodGhpcyk7CisgICAgcGxhdGZvcm1TdHJhdGVnaWVzKCktPmxvYWRlclN0cmF0ZWd5
KCktPnJlbW92ZSh0aGlzKTsKICAgICBpZiAobV9oYW5kbGUpCiAgICAgICAgIG1faGFuZGxlLT5j
YW5jZWwoKTsKIH0KQEAgLTM3Niw3ICszNzUsNyBAQCB2b2lkIFJlc291cmNlTG9hZGVyOjp3aWxs
U2VuZFJlcXVlc3RJbnRlCiAKICAgICBib29sIGlzUmVkaXJlY3QgPSAhcmVkaXJlY3RSZXNwb25z
ZS5pc051bGwoKTsKICAgICBpZiAoaXNSZWRpcmVjdCkKLSAgICAgICAgcGxhdGZvcm1TdHJhdGVn
aWVzKCktPmxvYWRlclN0cmF0ZWd5KCktPnJlc291cmNlTG9hZFNjaGVkdWxlcigpLT5jcm9zc09y
aWdpblJlZGlyZWN0UmVjZWl2ZWQodGhpcywgcmVxdWVzdC51cmwoKSk7CisgICAgICAgIHBsYXRm
b3JtU3RyYXRlZ2llcygpLT5sb2FkZXJTdHJhdGVneSgpLT5jcm9zc09yaWdpblJlZGlyZWN0UmVj
ZWl2ZWQodGhpcywgcmVxdWVzdC51cmwoKSk7CiAKICAgICBtX3JlcXVlc3QgPSByZXF1ZXN0Owog
CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9sb2FkZXIvYXJjaGl2ZS9BcmNoaXZlUmVzb3VyY2VDb2xs
ZWN0aW9uLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvbG9hZGVyL2FyY2hpdmUvQXJj
aGl2ZVJlc291cmNlQ29sbGVjdGlvbi5oCShyZXZpc2lvbiAxOTI4ODApCisrKyBTb3VyY2UvV2Vi
Q29yZS9sb2FkZXIvYXJjaGl2ZS9BcmNoaXZlUmVzb3VyY2VDb2xsZWN0aW9uLmgJKHdvcmtpbmcg
Y29weSkKQEAgLTQ3LDcgKzQ3LDcgQEAgcHVibGljOgogICAgIHZvaWQgYWRkUmVzb3VyY2UoUGFz
c1JlZlB0cjxBcmNoaXZlUmVzb3VyY2U+KTsKICAgICB2b2lkIGFkZEFsbFJlc291cmNlcyhBcmNo
aXZlKik7CiAgICAgCi0gICAgQXJjaGl2ZVJlc291cmNlKiBhcmNoaXZlUmVzb3VyY2VGb3JVUkwo
Y29uc3QgVVJMJik7CisgICAgV0VCQ09SRV9FWFBPUlQgQXJjaGl2ZVJlc291cmNlKiBhcmNoaXZl
UmVzb3VyY2VGb3JVUkwoY29uc3QgVVJMJik7CiAgICAgUGFzc1JlZlB0cjxBcmNoaXZlPiBwb3BT
dWJmcmFtZUFyY2hpdmUoY29uc3QgU3RyaW5nJiBmcmFtZU5hbWUsIGNvbnN0IFVSTCYpOwogICAg
IAogcHJpdmF0ZTogICAgCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9sb2FkZXIvY2FjaGUvQ2FjaGVk
UmVzb3VyY2UuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2xvYWRlci9jYWNoZS9D
YWNoZWRSZXNvdXJjZS5jcHAJKHJldmlzaW9uIDE5Mjg4MCkKKysrIFNvdXJjZS9XZWJDb3JlL2xv
YWRlci9jYWNoZS9DYWNoZWRSZXNvdXJjZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQ0LDcgKzQ0
LDYgQEAKICNpbmNsdWRlICJNZW1vcnlDYWNoZS5oIgogI2luY2x1ZGUgIlBsYXRmb3JtU3RyYXRl
Z2llcy5oIgogI2luY2x1ZGUgIlJlc291cmNlSGFuZGxlLmgiCi0jaW5jbHVkZSAiUmVzb3VyY2VM
b2FkU2NoZWR1bGVyLmgiCiAjaW5jbHVkZSAiU2NoZW1lUmVnaXN0cnkuaCIKICNpbmNsdWRlICJT
ZWN1cml0eU9yaWdpbi5oIgogI2luY2x1ZGUgIlNlY3VyaXR5UG9saWN5LmgiCkBAIC0yNzgsNyAr
Mjc3LDcgQEAgdm9pZCBDYWNoZWRSZXNvdXJjZTo6bG9hZChDYWNoZWRSZXNvdXJjZQogICAgICAg
ICBtX2ZyYWdtZW50SWRlbnRpZmllckZvclJlcXVlc3QgPSBTdHJpbmcoKTsKICAgICB9CiAKLSAg
ICBtX2xvYWRlciA9IHBsYXRmb3JtU3RyYXRlZ2llcygpLT5sb2FkZXJTdHJhdGVneSgpLT5yZXNv
dXJjZUxvYWRTY2hlZHVsZXIoKS0+c2NoZWR1bGVTdWJyZXNvdXJjZUxvYWQoY2FjaGVkUmVzb3Vy
Y2VMb2FkZXIuZnJhbWUoKSwgdGhpcywgcmVxdWVzdCwgb3B0aW9ucyk7CisgICAgbV9sb2FkZXIg
PSBwbGF0Zm9ybVN0cmF0ZWdpZXMoKS0+bG9hZGVyU3RyYXRlZ3koKS0+bG9hZFJlc291cmNlKGNh
Y2hlZFJlc291cmNlTG9hZGVyLmZyYW1lKCksIHRoaXMsIHJlcXVlc3QsIG9wdGlvbnMpOwogICAg
IGlmICghbV9sb2FkZXIpIHsKICAgICAgICAgZmFpbEJlZm9yZVN0YXJ0aW5nKCk7CiAgICAgICAg
IHJldHVybjsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2xvYWRlci9jYWNoZS9DYWNoZWRSZXNvdXJj
ZUxvYWRlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvbG9hZGVyL2NhY2hlL0Nh
Y2hlZFJlc291cmNlTG9hZGVyLmNwcAkocmV2aXNpb24gMTkyODgwKQorKysgU291cmNlL1dlYkNv
cmUvbG9hZGVyL2NhY2hlL0NhY2hlZFJlc291cmNlTG9hZGVyLmNwcAkod29ya2luZyBjb3B5KQpA
QCAtNjEsNyArNjEsNiBAQAogI2luY2x1ZGUgIlBsYXRmb3JtU3RyYXRlZ2llcy5oIgogI2luY2x1
ZGUgIlJlbmRlckVsZW1lbnQuaCIKICNpbmNsdWRlICJSZXNvdXJjZUxvYWRJbmZvLmgiCi0jaW5j
bHVkZSAiUmVzb3VyY2VMb2FkU2NoZWR1bGVyLmgiCiAjaW5jbHVkZSAiU2NyaXB0Q29udHJvbGxl
ci5oIgogI2luY2x1ZGUgIlNlY3VyaXR5T3JpZ2luLmgiCiAjaW5jbHVkZSAiU2Vzc2lvbklELmgi
CkBAIC05NjcsNyArOTY2LDcgQEAgdm9pZCBDYWNoZWRSZXNvdXJjZUxvYWRlcjo6cGVyZm9ybVBv
c3RMbwogewogICAgIGNoZWNrRm9yUGVuZGluZ1ByZWxvYWRzKCk7CiAKLSAgICBwbGF0Zm9ybVN0
cmF0ZWdpZXMoKS0+bG9hZGVyU3RyYXRlZ3koKS0+cmVzb3VyY2VMb2FkU2NoZWR1bGVyKCktPnNl
cnZlUGVuZGluZ1JlcXVlc3RzKCk7CisgICAgcGxhdGZvcm1TdHJhdGVnaWVzKCktPmxvYWRlclN0
cmF0ZWd5KCktPnNlcnZlUGVuZGluZ1JlcXVlc3RzKCk7CiB9CiAKIHZvaWQgQ2FjaGVkUmVzb3Vy
Y2VMb2FkZXI6OmluY3JlbWVudFJlcXVlc3RDb3VudChjb25zdCBDYWNoZWRSZXNvdXJjZSogcmVz
KQpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vUGxhdGZvcm1TdHJhdGVnaWVzLmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vUGxhdGZvcm1TdHJhdGVnaWVzLmgJ
KHJldmlzaW9uIDE5Mjg4MCkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL1BsYXRmb3JtU3Ry
YXRlZ2llcy5oCSh3b3JraW5nIGNvcHkpCkBAIC0yOCw2ICsyOCw3IEBACiAKIG5hbWVzcGFjZSBX
ZWJDb3JlIHsKIAorY2xhc3MgQmxvYlJlZ2lzdHJ5OwogY2xhc3MgQ29va2llc1N0cmF0ZWd5Owog
Y2xhc3MgTG9hZGVyU3RyYXRlZ3k7CiBjbGFzcyBQYXN0ZWJvYXJkU3RyYXRlZ3k7CkBAIC02Mywx
MiArNjQsMTUgQEAgcHVibGljOgogICAgICAgICByZXR1cm4gbV9wbHVnaW5TdHJhdGVneTsKICAg
ICB9CiAKKyAgICBCbG9iUmVnaXN0cnkqIGJsb2JSZWdpc3RyeSgpCisgICAgeworICAgICAgICBp
ZiAoIW1fYmxvYlJlZ2lzdHJ5KQorICAgICAgICAgICAgbV9ibG9iUmVnaXN0cnkgPSBjcmVhdGVC
bG9iUmVnaXN0cnkoKTsKKyAgICAgICAgcmV0dXJuIG1fYmxvYlJlZ2lzdHJ5OworICAgIH0KKwog
cHJvdGVjdGVkOgogICAgIFBsYXRmb3JtU3RyYXRlZ2llcygpCi0gICAgICAgIDogbV9jb29raWVz
U3RyYXRlZ3kobnVsbHB0cikKLSAgICAgICAgLCBtX2xvYWRlclN0cmF0ZWd5KG51bGxwdHIpCi0g
ICAgICAgICwgbV9wYXN0ZWJvYXJkU3RyYXRlZ3kobnVsbHB0cikKLSAgICAgICAgLCBtX3BsdWdp
blN0cmF0ZWd5KG51bGxwdHIpCiAgICAgewogICAgIH0KIApAQCAtODEsMTEgKzg1LDEzIEBAIHBy
aXZhdGU6CiAgICAgdmlydHVhbCBMb2FkZXJTdHJhdGVneSogY3JlYXRlTG9hZGVyU3RyYXRlZ3ko
KSA9IDA7CiAgICAgdmlydHVhbCBQYXN0ZWJvYXJkU3RyYXRlZ3kqIGNyZWF0ZVBhc3RlYm9hcmRT
dHJhdGVneSgpID0gMDsKICAgICB2aXJ0dWFsIFBsdWdpblN0cmF0ZWd5KiBjcmVhdGVQbHVnaW5T
dHJhdGVneSgpID0gMDsKKyAgICB2aXJ0dWFsIEJsb2JSZWdpc3RyeSogY3JlYXRlQmxvYlJlZ2lz
dHJ5KCkgPSAwOwogCi0gICAgQ29va2llc1N0cmF0ZWd5KiBtX2Nvb2tpZXNTdHJhdGVneTsKLSAg
ICBMb2FkZXJTdHJhdGVneSogbV9sb2FkZXJTdHJhdGVneTsKLSAgICBQYXN0ZWJvYXJkU3RyYXRl
Z3kqIG1fcGFzdGVib2FyZFN0cmF0ZWd5OwotICAgIFBsdWdpblN0cmF0ZWd5KiBtX3BsdWdpblN0
cmF0ZWd5OworICAgIENvb2tpZXNTdHJhdGVneSogbV9jb29raWVzU3RyYXRlZ3kgeyB9OworICAg
IExvYWRlclN0cmF0ZWd5KiBtX2xvYWRlclN0cmF0ZWd5IHsgfTsKKyAgICBQYXN0ZWJvYXJkU3Ry
YXRlZ3kqIG1fcGFzdGVib2FyZFN0cmF0ZWd5IHsgfTsKKyAgICBQbHVnaW5TdHJhdGVneSogbV9w
bHVnaW5TdHJhdGVneSB7IH07CisgICAgQmxvYlJlZ2lzdHJ5KiBtX2Jsb2JSZWdpc3RyeSB7IH07
CiB9OwogCiBXRUJDT1JFX0VYUE9SVCBQbGF0Zm9ybVN0cmF0ZWdpZXMqIHBsYXRmb3JtU3RyYXRl
Z2llcygpOwpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vUnVudGltZUFwcGxpY2F0aW9u
Q2hlY2tzSU9TLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vUnVudGlt
ZUFwcGxpY2F0aW9uQ2hlY2tzSU9TLmgJKHJldmlzaW9uIDE5Mjg4MCkKKysrIFNvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL1J1bnRpbWVBcHBsaWNhdGlvbkNoZWNrc0lPUy5oCSh3b3JraW5nIGNvcHkp
CkBAIC0zOSw3ICszOSw3IEBAIFdFQkNPUkVfRVhQT1JUIGJvb2wgYXBwbGljYXRpb25Jc0ZhY2Vi
b28KIFdFQkNPUkVfRVhQT1JUIGJvb2wgYXBwbGljYXRpb25Jc0RhaWppc2VuRGljdGlvbmFyeSgp
OwogYm9vbCBhcHBsaWNhdGlvbklzTkFTQUhEKCk7CiBXRUJDT1JFX0VYUE9SVCBib29sIGFwcGxp
Y2F0aW9uSXNUaGVFY29ub21pc3RPbklQaG9uZSgpOwotYm9vbCBhcHBsaWNhdGlvbklzV2ViUHJv
Y2VzcygpOworV0VCQ09SRV9FWFBPUlQgYm9vbCBhcHBsaWNhdGlvbklzV2ViUHJvY2VzcygpOwog
Ym9vbCBhcHBsaWNhdGlvbklzSUJvb2tzT25JT1MoKTsKIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29y
ZQpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9CbG9iUmVnaXN0cnkuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvQmxvYlJlZ2lz
dHJ5LmNwcAkocmV2aXNpb24gMTkyODgwKQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0
d29yay9CbG9iUmVnaXN0cnkuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00MCw5ICs0MCw3IEBAIG5h
bWVzcGFjZSBXZWJDb3JlIHsKIEJsb2JSZWdpc3RyeSYgYmxvYlJlZ2lzdHJ5KCkKIHsKICAgICBB
U1NFUlQoaXNNYWluVGhyZWFkKCkpOwotCi0gICAgc3RhdGljIEJsb2JSZWdpc3RyeSYgaW5zdGFu
Y2UgPSAqcGxhdGZvcm1TdHJhdGVnaWVzKCktPmxvYWRlclN0cmF0ZWd5KCktPmNyZWF0ZUJsb2JS
ZWdpc3RyeSgpOwotICAgIHJldHVybiBpbnN0YW5jZTsKKyAgICByZXR1cm4gKnBsYXRmb3JtU3Ry
YXRlZ2llcygpLT5ibG9iUmVnaXN0cnkoKTsKIH0KIAogQmxvYlJlZ2lzdHJ5Ojp+QmxvYlJlZ2lz
dHJ5KCkKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvUmVzb3VyY2VSZXF1
ZXN0QmFzZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsv
UmVzb3VyY2VSZXF1ZXN0QmFzZS5oCShyZXZpc2lvbiAxOTI4ODApCisrKyBTb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9uZXR3b3JrL1Jlc291cmNlUmVxdWVzdEJhc2UuaAkod29ya2luZyBjb3B5KQpA
QCAtMjQ0LDcgKzI0NCw3IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKICAgICAgICAgUmVzb3VyY2VS
ZXF1ZXN0QmFzZTo6UmVxdWVzdGVyIHJlcXVlc3RlcjsKICAgICB9OwogICAgIAotICAgIHVuc2ln
bmVkIGluaXRpYWxpemVNYXhpbXVtSFRUUENvbm5lY3Rpb25Db3VudFBlckhvc3QoKTsKKyAgICBX
RUJDT1JFX0VYUE9SVCB1bnNpZ25lZCBpbml0aWFsaXplTWF4aW11bUhUVFBDb25uZWN0aW9uQ291
bnRQZXJIb3N0KCk7CiAjaWYgUExBVEZPUk0oSU9TKQogICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQg
aW5pdGlhbGl6ZUhUVFBDb25uZWN0aW9uU2V0dGluZ3NPblN0YXJ0dXAoKTsKICNlbmRpZgpJbmRl
eDogU291cmNlL1dlYkNvcmUvc3R5bGUvU3R5bGVSZXNvbHZlVHJlZS5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1dlYkNvcmUvc3R5bGUvU3R5bGVSZXNvbHZlVHJlZS5jcHAJKHJldmlzaW9uIDE5
Mjg4MCkKKysrIFNvdXJjZS9XZWJDb3JlL3N0eWxlL1N0eWxlUmVzb2x2ZVRyZWUuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC00Nyw3ICs0Nyw2IEBACiAjaW5jbHVkZSAiUmVuZGVyVGV4dC5oIgogI2lu
Y2x1ZGUgIlJlbmRlclRyZWVQb3NpdGlvbi5oIgogI2luY2x1ZGUgIlJlbmRlcldpZGdldC5oIgot
I2luY2x1ZGUgIlJlc291cmNlTG9hZFNjaGVkdWxlci5oIgogI2luY2x1ZGUgIlNldHRpbmdzLmgi
CiAjaW5jbHVkZSAiU2hhZG93Um9vdC5oIgogI2luY2x1ZGUgIlN0eWxlUmVzb2x2ZUZvckRvY3Vt
ZW50LmgiCkBAIC05NDQsNyArOTQzLDcgQEAgUG9zdFJlc29sdXRpb25DYWxsYmFja0Rpc2FibGVy
OjpQb3N0UmVzbwogICAgICsrcmVzb2x1dGlvbk5lc3RpbmdEZXB0aDsKIAogICAgIGlmIChyZXNv
bHV0aW9uTmVzdGluZ0RlcHRoID09IDEpCi0gICAgICAgIHBsYXRmb3JtU3RyYXRlZ2llcygpLT5s
b2FkZXJTdHJhdGVneSgpLT5yZXNvdXJjZUxvYWRTY2hlZHVsZXIoKS0+c3VzcGVuZFBlbmRpbmdS
ZXF1ZXN0cygpOworICAgICAgICBwbGF0Zm9ybVN0cmF0ZWdpZXMoKS0+bG9hZGVyU3RyYXRlZ3ko
KS0+c3VzcGVuZFBlbmRpbmdSZXF1ZXN0cygpOwogCiAgICAgLy8gRklYTUU6IEl0J3Mgc3RyYW5n
ZSB0byBidWlsZCB0aGlzIGludG8gdGhlIGRpc2FibGVyLgogICAgIHN1c3BlbmRNZW1vcnlDYWNo
ZUNsaWVudENhbGxzKGRvY3VtZW50KTsKQEAgLTk1OSw3ICs5NTgsNyBAQCBQb3N0UmVzb2x1dGlv
bkNhbGxiYWNrRGlzYWJsZXI6On5Qb3N0UmVzCiAgICAgICAgICAgICBxdWV1ZVtpXSgpOwogICAg
ICAgICBxdWV1ZS5jbGVhcigpOwogCi0gICAgICAgIHBsYXRmb3JtU3RyYXRlZ2llcygpLT5sb2Fk
ZXJTdHJhdGVneSgpLT5yZXNvdXJjZUxvYWRTY2hlZHVsZXIoKS0+cmVzdW1lUGVuZGluZ1JlcXVl
c3RzKCk7CisgICAgICAgIHBsYXRmb3JtU3RyYXRlZ2llcygpLT5sb2FkZXJTdHJhdGVneSgpLT5y
ZXN1bWVQZW5kaW5nUmVxdWVzdHMoKTsKICAgICB9CiAKICAgICAtLXJlc29sdXRpb25OZXN0aW5n
RGVwdGg7CkluZGV4OiBTb3VyY2UvV2ViS2l0Mi9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1dlYktpdDIvQ2hhbmdlTG9nCShyZXZpc2lvbiAxOTI4ODApCisrKyBTb3VyY2UvV2ViS2l0
Mi9DaGFuZ2VMb2cJKHdvcmtpbmcgY29weSkKQEAgLTEsMyArMSw0NyBAQAorMjAxNS0xMi0wMiAg
QW50dGkgS29pdmlzdG8gIDxhbnR0aUBhcHBsZS5jb20+CisKKyAgICAgICAgTW92ZSBSZXNvdXJj
ZUxvYWRTY2hlZHVsZXIgdG8gV2ViS2l0MQorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9y
Zy9zaG93X2J1Zy5jZ2k/aWQ9MTUxNzQzCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChP
T1BTISkuCisKKyAgICAgICAgKiBOZXR3b3JrUHJvY2Vzcy9OZXR3b3JrUHJvY2Vzc1BsYXRmb3Jt
U3RyYXRlZ2llcy5jcHA6CisgICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtQcm9jZXNzUGxhdGZvcm1T
dHJhdGVnaWVzOjpjcmVhdGVDb29raWVzU3RyYXRlZ3kpOgorICAgICAgICAoV2ViS2l0OjpOZXR3
b3JrUHJvY2Vzc1BsYXRmb3JtU3RyYXRlZ2llczo6Y3JlYXRlTG9hZGVyU3RyYXRlZ3kpOgorICAg
ICAgICAoV2ViS2l0OjpOZXR3b3JrUHJvY2Vzc1BsYXRmb3JtU3RyYXRlZ2llczo6Y3JlYXRlUGFz
dGVib2FyZFN0cmF0ZWd5KToKKyAgICAgICAgKFdlYktpdDo6TmV0d29ya1Byb2Nlc3NQbGF0Zm9y
bVN0cmF0ZWdpZXM6OmNyZWF0ZVBsdWdpblN0cmF0ZWd5KToKKyAgICAgICAgKFdlYktpdDo6TmV0
d29ya1Byb2Nlc3NQbGF0Zm9ybVN0cmF0ZWdpZXM6OmNyZWF0ZUJsb2JSZWdpc3RyeSk6CisgICAg
ICAgIChXZWJLaXQ6Ok5ldHdvcmtQcm9jZXNzUGxhdGZvcm1TdHJhdGVnaWVzOjpyZXNvdXJjZUxv
YWRTY2hlZHVsZXIpOiBEZWxldGVkLgorICAgICAgICAoV2ViS2l0OjpOZXR3b3JrUHJvY2Vzc1Bs
YXRmb3JtU3RyYXRlZ2llczo6bG9hZFJlc291cmNlU3luY2hyb25vdXNseSk6IERlbGV0ZWQuCisg
ICAgICAgICogTmV0d29ya1Byb2Nlc3MvTmV0d29ya1Byb2Nlc3NQbGF0Zm9ybVN0cmF0ZWdpZXMu
aDoKKyAgICAgICAgKiBXZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0luamVjdGVkQnVuZGxlLmNw
cDoKKyAgICAgICAgKiBXZWJQcm9jZXNzL05ldHdvcmsvV2ViUmVzb3VyY2VMb2FkU2NoZWR1bGVy
LmNwcDoKKyAgICAgICAgKFdlYktpdDo6V2ViUmVzb3VyY2VMb2FkU2NoZWR1bGVyOjp+V2ViUmVz
b3VyY2VMb2FkU2NoZWR1bGVyKToKKyAgICAgICAgKFdlYktpdDo6V2ViUmVzb3VyY2VMb2FkU2No
ZWR1bGVyOjpsb2FkUmVzb3VyY2UpOgorICAgICAgICAoV2ViS2l0OjpXZWJSZXNvdXJjZUxvYWRT
Y2hlZHVsZXI6OnJlc3VtZVBlbmRpbmdSZXF1ZXN0cyk6CisgICAgICAgIChXZWJLaXQ6OldlYlJl
c291cmNlTG9hZFNjaGVkdWxlcjo6bmV0d29ya1Byb2Nlc3NDcmFzaGVkKToKKyAgICAgICAgKFdl
YktpdDo6V2ViUmVzb3VyY2VMb2FkU2NoZWR1bGVyOjpsb2FkUmVzb3VyY2VTeW5jaHJvbm91c2x5
KToKKyAgICAgICAgKFdlYktpdDo6V2ViUmVzb3VyY2VMb2FkU2NoZWR1bGVyOjpjcmVhdGVQaW5n
SGFuZGxlKToKKyAgICAgICAgKFdlYktpdDo6V2ViUmVzb3VyY2VMb2FkU2NoZWR1bGVyOjpzY2hl
ZHVsZVN1YnJlc291cmNlTG9hZCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJLaXQ6OldlYlJlc291
cmNlTG9hZFNjaGVkdWxlcjo6c2V0U2VyaWFsTG9hZGluZ0VuYWJsZWQpOiBEZWxldGVkLgorICAg
ICAgICAqIFdlYlByb2Nlc3MvTmV0d29yay9XZWJSZXNvdXJjZUxvYWRTY2hlZHVsZXIuaDoKKyAg
ICAgICAgKFdlYktpdDo6V2ViUmVzb3VyY2VMb2FkU2NoZWR1bGVyOjp3ZWJSZXNvdXJjZUxvYWRl
ckZvcklkZW50aWZpZXIpOgorICAgICAgICAqIFdlYlByb2Nlc3MvUGx1Z2lucy9QbHVnaW5WaWV3
LmNwcDoKKyAgICAgICAgKFdlYktpdDo6UGx1Z2luVmlldzo6U3RyZWFtOjpzdGFydCk6CisgICAg
ICAgIChXZWJLaXQ6OlBsdWdpblZpZXc6OlN0cmVhbTo6Y2FuY2VsKToKKyAgICAgICAgKiBXZWJQ
cm9jZXNzL1dlYkNvcmVTdXBwb3J0L1dlYlBsYXRmb3JtU3RyYXRlZ2llcy5jcHA6CisgICAgICAg
IChXZWJLaXQ6OldlYlBsYXRmb3JtU3RyYXRlZ2llczo6Y3JlYXRlTG9hZGVyU3RyYXRlZ3kpOgor
ICAgICAgICAoV2ViS2l0OjpXZWJQbGF0Zm9ybVN0cmF0ZWdpZXM6OmNyZWF0ZVBhc3RlYm9hcmRT
dHJhdGVneSk6CisgICAgICAgIChXZWJLaXQ6OldlYlBsYXRmb3JtU3RyYXRlZ2llczo6Y3JlYXRl
UGx1Z2luU3RyYXRlZ3kpOgorICAgICAgICAoV2ViS2l0OjpXZWJQbGF0Zm9ybVN0cmF0ZWdpZXM6
OmNyZWF0ZUJsb2JSZWdpc3RyeSk6CisgICAgICAgIChXZWJLaXQ6OldlYlBsYXRmb3JtU3RyYXRl
Z2llczo6Y29va2llc0ZvckRPTSk6CisgICAgICAgIChXZWJLaXQ6OldlYlBsYXRmb3JtU3RyYXRl
Z2llczo6ZGVsZXRlQ29va2llKToKKyAgICAgICAgKFdlYktpdDo6V2ViUGxhdGZvcm1TdHJhdGVn
aWVzOjpyZWZyZXNoUGx1Z2lucyk6CisgICAgICAgIChXZWJLaXQ6OldlYlBsYXRmb3JtU3RyYXRl
Z2llczo6cmVzb3VyY2VMb2FkU2NoZWR1bGVyKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYktpdDo6
V2ViUGxhdGZvcm1TdHJhdGVnaWVzOjpsb2FkUmVzb3VyY2VTeW5jaHJvbm91c2x5KTogRGVsZXRl
ZC4KKyAgICAgICAgKFdlYktpdDo6V2ViUGxhdGZvcm1TdHJhdGVnaWVzOjpjcmVhdGVQaW5nSGFu
ZGxlKTogRGVsZXRlZC4KKyAgICAgICAgKiBXZWJQcm9jZXNzL1dlYkNvcmVTdXBwb3J0L1dlYlBs
YXRmb3JtU3RyYXRlZ2llcy5oOgorCiAyMDE1LTEyLTAxICBDYXJsb3MgR2FyY2lhIENhbXBvcyAg
PGNnYXJjaWFAaWdhbGlhLmNvbT4KIAogICAgICAgICBVbnJldmlld2VkLiBBZGQgbWlzc2luZyBp
bnNwZWN0b3IgZmlsZXMgdG8gdGhlIEdUSysgYnVpbGQuCkluZGV4OiBTb3VyY2UvV2ViS2l0Mi9O
ZXR3b3JrUHJvY2Vzcy9OZXR3b3JrUHJvY2Vzc1BsYXRmb3JtU3RyYXRlZ2llcy5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1dlYktpdDIvTmV0d29ya1Byb2Nlc3MvTmV0d29ya1Byb2Nlc3NQbGF0
Zm9ybVN0cmF0ZWdpZXMuY3BwCShyZXZpc2lvbiAxOTI4ODApCisrKyBTb3VyY2UvV2ViS2l0Mi9O
ZXR3b3JrUHJvY2Vzcy9OZXR3b3JrUHJvY2Vzc1BsYXRmb3JtU3RyYXRlZ2llcy5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTQxLDMzICs0MSwyMiBAQCB2b2lkIE5ldHdvcmtQcm9jZXNzUGxhdGZvcm1T
dHJhdGVnaWVzOjppCiAKIENvb2tpZXNTdHJhdGVneSogTmV0d29ya1Byb2Nlc3NQbGF0Zm9ybVN0
cmF0ZWdpZXM6OmNyZWF0ZUNvb2tpZXNTdHJhdGVneSgpCiB7Ci0gICAgcmV0dXJuIDA7CisgICAg
cmV0dXJuIG51bGxwdHI7CiB9CiAKIExvYWRlclN0cmF0ZWd5KiBOZXR3b3JrUHJvY2Vzc1BsYXRm
b3JtU3RyYXRlZ2llczo6Y3JlYXRlTG9hZGVyU3RyYXRlZ3koKQogewotICAgIHJldHVybiB0aGlz
OworICAgIHJldHVybiBudWxscHRyOwogfQogCiBQYXN0ZWJvYXJkU3RyYXRlZ3kqIE5ldHdvcmtQ
cm9jZXNzUGxhdGZvcm1TdHJhdGVnaWVzOjpjcmVhdGVQYXN0ZWJvYXJkU3RyYXRlZ3koKQogewot
ICAgIHJldHVybiAwOworICAgIHJldHVybiBudWxscHRyOwogfQogCiBQbHVnaW5TdHJhdGVneSog
TmV0d29ya1Byb2Nlc3NQbGF0Zm9ybVN0cmF0ZWdpZXM6OmNyZWF0ZVBsdWdpblN0cmF0ZWd5KCkK
IHsKLSAgICByZXR1cm4gMDsKLX0KLQotUmVzb3VyY2VMb2FkU2NoZWR1bGVyKiBOZXR3b3JrUHJv
Y2Vzc1BsYXRmb3JtU3RyYXRlZ2llczo6cmVzb3VyY2VMb2FkU2NoZWR1bGVyKCkKLXsKLSAgICBB
U1NFUlRfTk9UX1JFQUNIRUQoKTsKLSAgICByZXR1cm4gMDsKLX0KLQotdm9pZCBOZXR3b3JrUHJv
Y2Vzc1BsYXRmb3JtU3RyYXRlZ2llczo6bG9hZFJlc291cmNlU3luY2hyb25vdXNseShOZXR3b3Jr
aW5nQ29udGV4dCosIHVuc2lnbmVkIGxvbmcsIGNvbnN0IFJlc291cmNlUmVxdWVzdCYsIFN0b3Jl
ZENyZWRlbnRpYWxzLCBDbGllbnRDcmVkZW50aWFsUG9saWN5LCBSZXNvdXJjZUVycm9yJiwgUmVz
b3VyY2VSZXNwb25zZSYsIFZlY3RvcjxjaGFyPiYpCi17Ci0gICAgQVNTRVJUX05PVF9SRUFDSEVE
KCk7CisgICAgcmV0dXJuIG51bGxwdHI7CiB9CiAKIEJsb2JSZWdpc3RyeSogTmV0d29ya1Byb2Nl
c3NQbGF0Zm9ybVN0cmF0ZWdpZXM6OmNyZWF0ZUJsb2JSZWdpc3RyeSgpCkluZGV4OiBTb3VyY2Uv
V2ViS2l0Mi9OZXR3b3JrUHJvY2Vzcy9OZXR3b3JrUHJvY2Vzc1BsYXRmb3JtU3RyYXRlZ2llcy5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQyL05ldHdvcmtQcm9jZXNzL05ldHdvcmtQcm9j
ZXNzUGxhdGZvcm1TdHJhdGVnaWVzLmgJKHJldmlzaW9uIDE5Mjg4MCkKKysrIFNvdXJjZS9XZWJL
aXQyL05ldHdvcmtQcm9jZXNzL05ldHdvcmtQcm9jZXNzUGxhdGZvcm1TdHJhdGVnaWVzLmgJKHdv
cmtpbmcgY29weSkKQEAgLTMxLDIxICszMSwxNyBAQAogCiBuYW1lc3BhY2UgV2ViS2l0IHsKIAot
Y2xhc3MgTmV0d29ya1Byb2Nlc3NQbGF0Zm9ybVN0cmF0ZWdpZXMgOiBwdWJsaWMgV2ViQ29yZTo6
UGxhdGZvcm1TdHJhdGVnaWVzLCBwcml2YXRlIFdlYkNvcmU6OkxvYWRlclN0cmF0ZWd5IHsKK2Ns
YXNzIE5ldHdvcmtQcm9jZXNzUGxhdGZvcm1TdHJhdGVnaWVzIDogcHVibGljIFdlYkNvcmU6OlBs
YXRmb3JtU3RyYXRlZ2llcyB7CiBwdWJsaWM6CiAgICAgc3RhdGljIHZvaWQgaW5pdGlhbGl6ZSgp
OwogICAgIAogcHJpdmF0ZToKICAgICAvLyBXZWJDb3JlOjpQbGF0Zm9ybVN0cmF0ZWdpZXMKLSAg
ICB2aXJ0dWFsIFdlYkNvcmU6OkNvb2tpZXNTdHJhdGVneSogY3JlYXRlQ29va2llc1N0cmF0ZWd5
KCkgb3ZlcnJpZGU7Ci0gICAgdmlydHVhbCBXZWJDb3JlOjpMb2FkZXJTdHJhdGVneSogY3JlYXRl
TG9hZGVyU3RyYXRlZ3koKSBvdmVycmlkZTsKLSAgICB2aXJ0dWFsIFdlYkNvcmU6OlBhc3RlYm9h
cmRTdHJhdGVneSogY3JlYXRlUGFzdGVib2FyZFN0cmF0ZWd5KCkgb3ZlcnJpZGU7Ci0gICAgdmly
dHVhbCBXZWJDb3JlOjpQbHVnaW5TdHJhdGVneSogY3JlYXRlUGx1Z2luU3RyYXRlZ3koKSBvdmVy
cmlkZTsKLQotICAgIC8vIFdlYkNvcmU6OkxvYWRlclN0cmF0ZWd5Ci0gICAgdmlydHVhbCBXZWJD
b3JlOjpSZXNvdXJjZUxvYWRTY2hlZHVsZXIqIHJlc291cmNlTG9hZFNjaGVkdWxlcigpIG92ZXJy
aWRlOwotICAgIHZpcnR1YWwgdm9pZCBsb2FkUmVzb3VyY2VTeW5jaHJvbm91c2x5KFdlYkNvcmU6
Ok5ldHdvcmtpbmdDb250ZXh0KiwgdW5zaWduZWQgbG9uZyByZXNvdXJjZUxvYWRJZGVudGlmaWVy
LCBjb25zdCBXZWJDb3JlOjpSZXNvdXJjZVJlcXVlc3QmLCBXZWJDb3JlOjpTdG9yZWRDcmVkZW50
aWFscywgV2ViQ29yZTo6Q2xpZW50Q3JlZGVudGlhbFBvbGljeSwgV2ViQ29yZTo6UmVzb3VyY2VF
cnJvciYsIFdlYkNvcmU6OlJlc291cmNlUmVzcG9uc2UmLCBWZWN0b3I8Y2hhcj4mIGRhdGEpIG92
ZXJyaWRlOwotICAgIHZpcnR1YWwgV2ViQ29yZTo6QmxvYlJlZ2lzdHJ5KiBjcmVhdGVCbG9iUmVn
aXN0cnkoKSBvdmVycmlkZTsKKyAgICBXZWJDb3JlOjpDb29raWVzU3RyYXRlZ3kqIGNyZWF0ZUNv
b2tpZXNTdHJhdGVneSgpIG92ZXJyaWRlOworICAgIFdlYkNvcmU6OkxvYWRlclN0cmF0ZWd5KiBj
cmVhdGVMb2FkZXJTdHJhdGVneSgpIG92ZXJyaWRlOworICAgIFdlYkNvcmU6OlBhc3RlYm9hcmRT
dHJhdGVneSogY3JlYXRlUGFzdGVib2FyZFN0cmF0ZWd5KCkgb3ZlcnJpZGU7CisgICAgV2ViQ29y
ZTo6UGx1Z2luU3RyYXRlZ3kqIGNyZWF0ZVBsdWdpblN0cmF0ZWd5KCkgb3ZlcnJpZGU7CisgICAg
V2ViQ29yZTo6QmxvYlJlZ2lzdHJ5KiBjcmVhdGVCbG9iUmVnaXN0cnkoKSBvdmVycmlkZTsKIH07
CiAKIH0gLy8gbmFtZXNwYWNlIFdlYktpdApJbmRleDogU291cmNlL1dlYktpdDIvV2ViUHJvY2Vz
cy9JbmplY3RlZEJ1bmRsZS9JbmplY3RlZEJ1bmRsZS5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1dlYktpdDIvV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9JbmplY3RlZEJ1bmRsZS5jcHAJKHJl
dmlzaW9uIDE5Mjg4MCkKKysrIFNvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5k
bGUvSW5qZWN0ZWRCdW5kbGUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC02Niw3ICs2Niw2IEBACiAj
aW5jbHVkZSA8V2ViQ29yZS9QYWdlR3JvdXAuaD4KICNpbmNsdWRlIDxXZWJDb3JlL1ByaW50Q29u
dGV4dC5oPgogI2luY2x1ZGUgPFdlYkNvcmUvUmVzb3VyY2VIYW5kbGUuaD4KLSNpbmNsdWRlIDxX
ZWJDb3JlL1Jlc291cmNlTG9hZFNjaGVkdWxlci5oPgogI2luY2x1ZGUgPFdlYkNvcmUvU2NyaXB0
Q29udHJvbGxlci5oPgogI2luY2x1ZGUgPFdlYkNvcmUvU2VjdXJpdHlPcmlnaW4uaD4KICNpbmNs
dWRlIDxXZWJDb3JlL1NlY3VyaXR5UG9saWN5Lmg+CkluZGV4OiBTb3VyY2UvV2ViS2l0Mi9XZWJQ
cm9jZXNzL05ldHdvcmsvV2ViUmVzb3VyY2VMb2FkU2NoZWR1bGVyLmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL05ldHdvcmsvV2ViUmVzb3VyY2VMb2FkU2NoZWR1
bGVyLmNwcAkocmV2aXNpb24gMTkyODgwKQorKysgU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9O
ZXR3b3JrL1dlYlJlc291cmNlTG9hZFNjaGVkdWxlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI2
LDYgKzI2LDcgQEAKICNpbmNsdWRlICJjb25maWcuaCIKICNpbmNsdWRlICJXZWJSZXNvdXJjZUxv
YWRTY2hlZHVsZXIuaCIKIAorI2luY2x1ZGUgIkhhbmdEZXRlY3Rpb25EaXNhYmxlci5oIgogI2lu
Y2x1ZGUgIkxvZ2dpbmcuaCIKICNpbmNsdWRlICJOZXR3b3JrQ29ubmVjdGlvblRvV2ViUHJvY2Vz
c01lc3NhZ2VzLmgiCiAjaW5jbHVkZSAiTmV0d29ya1Byb2Nlc3NDb25uZWN0aW9uLmgiCkBAIC0z
NSw2ICszNiw3IEBACiAjaW5jbHVkZSAiV2ViRXJyb3JzLmgiCiAjaW5jbHVkZSAiV2ViRnJhbWUu
aCIKICNpbmNsdWRlICJXZWJGcmFtZUxvYWRlckNsaWVudC5oIgorI2luY2x1ZGUgIldlYkZyYW1l
TmV0d29ya2luZ0NvbnRleHQuaCIKICNpbmNsdWRlICJXZWJQYWdlLmgiCiAjaW5jbHVkZSAiV2Vi
UHJvY2Vzcy5oIgogI2luY2x1ZGUgIldlYlJlc291cmNlTG9hZGVyLmgiCkBAIC00NSw2ICs0Nyw3
IEBACiAjaW5jbHVkZSA8V2ViQ29yZS9GcmFtZS5oPgogI2luY2x1ZGUgPFdlYkNvcmUvRnJhbWVM
b2FkZXIuaD4KICNpbmNsdWRlIDxXZWJDb3JlL05ldHNjYXBlUGx1Z0luU3RyZWFtTG9hZGVyLmg+
CisjaW5jbHVkZSA8V2ViQ29yZS9QbGF0Zm9ybVN0cmF0ZWdpZXMuaD4KICNpbmNsdWRlIDxXZWJD
b3JlL1JlZmVycmVyUG9saWN5Lmg+CiAjaW5jbHVkZSA8V2ViQ29yZS9SZXNvdXJjZUxvYWRlci5o
PgogI2luY2x1ZGUgPFdlYkNvcmUvU2Vzc2lvbklELmg+CkBAIC02NSw3ICs2OCw3IEBAIFdlYlJl
c291cmNlTG9hZFNjaGVkdWxlcjo6fldlYlJlc291cmNlTG8KIHsKIH0KIAotUmVmUHRyPFN1YnJl
c291cmNlTG9hZGVyPiBXZWJSZXNvdXJjZUxvYWRTY2hlZHVsZXI6OnNjaGVkdWxlU3VicmVzb3Vy
Y2VMb2FkKEZyYW1lKiBmcmFtZSwgQ2FjaGVkUmVzb3VyY2UqIHJlc291cmNlLCBjb25zdCBSZXNv
dXJjZVJlcXVlc3QmIHJlcXVlc3QsIGNvbnN0IFJlc291cmNlTG9hZGVyT3B0aW9ucyYgb3B0aW9u
cykKK1JlZlB0cjxTdWJyZXNvdXJjZUxvYWRlcj4gV2ViUmVzb3VyY2VMb2FkU2NoZWR1bGVyOjps
b2FkUmVzb3VyY2UoRnJhbWUqIGZyYW1lLCBDYWNoZWRSZXNvdXJjZSogcmVzb3VyY2UsIGNvbnN0
IFJlc291cmNlUmVxdWVzdCYgcmVxdWVzdCwgY29uc3QgUmVzb3VyY2VMb2FkZXJPcHRpb25zJiBv
cHRpb25zKQogewogICAgIFJlZlB0cjxTdWJyZXNvdXJjZUxvYWRlcj4gbG9hZGVyID0gU3VicmVz
b3VyY2VMb2FkZXI6OmNyZWF0ZShmcmFtZSwgcmVzb3VyY2UsIHJlcXVlc3QsIG9wdGlvbnMpOwog
ICAgIGlmIChsb2FkZXIpCkBAIC0yNjksMTEgKzI3Miw2IEBAIHZvaWQgV2ViUmVzb3VyY2VMb2Fk
U2NoZWR1bGVyOjpyZXN1bWVQZW4KICAgICAvLyBOZXR3b3JrIHByb2Nlc3MgZG9lcyBrZWVwIHJl
cXVlc3RzIGluIHBlbmRpbmcgc3RhdGUuCiB9CiAKLXZvaWQgV2ViUmVzb3VyY2VMb2FkU2NoZWR1
bGVyOjpzZXRTZXJpYWxMb2FkaW5nRW5hYmxlZChib29sKQotewotICAgIC8vIE5ldHdvcmsgcHJv
Y2VzcyBkb2VzIG5vdCByZW9yZGVyIGxvYWRzLgotfQotCiB2b2lkIFdlYlJlc291cmNlTG9hZFNj
aGVkdWxlcjo6bmV0d29ya1Byb2Nlc3NDcmFzaGVkKCkKIHsKICAgICBIYXNoTWFwPHVuc2lnbmVk
IGxvbmcsIFJlZlB0cjxXZWJSZXNvdXJjZUxvYWRlcj4+OjppdGVyYXRvciBlbmQgPSBtX3dlYlJl
c291cmNlTG9hZGVycy5lbmQoKTsKQEAgLTI4Myw0ICsyODEsNTcgQEAgdm9pZCBXZWJSZXNvdXJj
ZUxvYWRTY2hlZHVsZXI6Om5ldHdvcmtQcgogICAgIG1fd2ViUmVzb3VyY2VMb2FkZXJzLmNsZWFy
KCk7CiB9CiAKK3ZvaWQgV2ViUmVzb3VyY2VMb2FkU2NoZWR1bGVyOjpsb2FkUmVzb3VyY2VTeW5j
aHJvbm91c2x5KE5ldHdvcmtpbmdDb250ZXh0KiBjb250ZXh0LCB1bnNpZ25lZCBsb25nIHJlc291
cmNlTG9hZElkZW50aWZpZXIsIGNvbnN0IFJlc291cmNlUmVxdWVzdCYgcmVxdWVzdCwgU3RvcmVk
Q3JlZGVudGlhbHMgc3RvcmVkQ3JlZGVudGlhbHMsIENsaWVudENyZWRlbnRpYWxQb2xpY3kgY2xp
ZW50Q3JlZGVudGlhbFBvbGljeSwgUmVzb3VyY2VFcnJvciYgZXJyb3IsIFJlc291cmNlUmVzcG9u
c2UmIHJlc3BvbnNlLCBWZWN0b3I8Y2hhcj4mIGRhdGEpCit7CisgICAgV2ViRnJhbWVOZXR3b3Jr
aW5nQ29udGV4dCogd2ViQ29udGV4dCA9IHN0YXRpY19jYXN0PFdlYkZyYW1lTmV0d29ya2luZ0Nv
bnRleHQqPihjb250ZXh0KTsKKyAgICAvLyBGSVhNRTogU29tZSBlbnRpdGllcyBpbiBXZWJDb3Jl
IHVzZSBXZWJDb3JlJ3MgIkVtcHR5RnJhbWVMb2FkZXJDbGllbnQiIGluc3RlYWQgb2YgaGF2aW5n
IGEgcHJvcGVyIFdlYkZyYW1lTG9hZGVyQ2xpZW50LgorICAgIC8vIEVtcHR5RnJhbWVMb2FkZXJD
bGllbnQgc2hvdWxkbid0IGV4aXN0IGFuZCBldmVyeXRoaW5nIHNob3VsZCBiZSB1c2luZyBhIFdl
YkZyYW1lTG9hZGVyQ2xpZW50LAorICAgIC8vIGJ1dCBpbiB0aGUgbWVhbnRpbWUgd2UgaGF2ZSB0
byBtYWtlIHN1cmUgbm90IHRvIG1pcy1jYXN0LgorICAgIFdlYkZyYW1lTG9hZGVyQ2xpZW50KiB3
ZWJGcmFtZUxvYWRlckNsaWVudCA9IHdlYkNvbnRleHQtPndlYkZyYW1lTG9hZGVyQ2xpZW50KCk7
CisgICAgV2ViRnJhbWUqIHdlYkZyYW1lID0gd2ViRnJhbWVMb2FkZXJDbGllbnQgPyB3ZWJGcmFt
ZUxvYWRlckNsaWVudC0+d2ViRnJhbWUoKSA6IDA7CisgICAgV2ViUGFnZSogd2ViUGFnZSA9IHdl
YkZyYW1lID8gd2ViRnJhbWUtPnBhZ2UoKSA6IDA7CisKKyAgICBOZXR3b3JrUmVzb3VyY2VMb2Fk
UGFyYW1ldGVycyBsb2FkUGFyYW1ldGVyczsKKyAgICBsb2FkUGFyYW1ldGVycy5pZGVudGlmaWVy
ID0gcmVzb3VyY2VMb2FkSWRlbnRpZmllcjsKKyAgICBsb2FkUGFyYW1ldGVycy53ZWJQYWdlSUQg
PSB3ZWJQYWdlID8gd2ViUGFnZS0+cGFnZUlEKCkgOiAwOworICAgIGxvYWRQYXJhbWV0ZXJzLndl
YkZyYW1lSUQgPSB3ZWJGcmFtZSA/IHdlYkZyYW1lLT5mcmFtZUlEKCkgOiAwOworICAgIGxvYWRQ
YXJhbWV0ZXJzLnNlc3Npb25JRCA9IHdlYlBhZ2UgPyB3ZWJQYWdlLT5zZXNzaW9uSUQoKSA6IFNl
c3Npb25JRDo6ZGVmYXVsdFNlc3Npb25JRCgpOworICAgIGxvYWRQYXJhbWV0ZXJzLnJlcXVlc3Qg
PSByZXF1ZXN0OworICAgIGxvYWRQYXJhbWV0ZXJzLmNvbnRlbnRTbmlmZmluZ1BvbGljeSA9IFNu
aWZmQ29udGVudDsKKyAgICBsb2FkUGFyYW1ldGVycy5hbGxvd1N0b3JlZENyZWRlbnRpYWxzID0g
c3RvcmVkQ3JlZGVudGlhbHM7CisgICAgbG9hZFBhcmFtZXRlcnMuY2xpZW50Q3JlZGVudGlhbFBv
bGljeSA9IGNsaWVudENyZWRlbnRpYWxQb2xpY3k7CisgICAgbG9hZFBhcmFtZXRlcnMuc2hvdWxk
Q2xlYXJSZWZlcnJlck9uSFRUUFNUb0hUVFBSZWRpcmVjdCA9IGNvbnRleHQtPnNob3VsZENsZWFy
UmVmZXJyZXJPbkhUVFBTVG9IVFRQUmVkaXJlY3QoKTsKKworICAgIGRhdGEucmVzaXplKDApOwor
CisgICAgSGFuZ0RldGVjdGlvbkRpc2FibGVyIGhhbmdEZXRlY3Rpb25EaXNhYmxlcjsKKworICAg
IGlmICghV2ViUHJvY2Vzczo6c2luZ2xldG9uKCkubmV0d29ya0Nvbm5lY3Rpb24oKS0+Y29ubmVj
dGlvbigpLT5zZW5kU3luYyhNZXNzYWdlczo6TmV0d29ya0Nvbm5lY3Rpb25Ub1dlYlByb2Nlc3M6
OlBlcmZvcm1TeW5jaHJvbm91c0xvYWQobG9hZFBhcmFtZXRlcnMpLCBNZXNzYWdlczo6TmV0d29y
a0Nvbm5lY3Rpb25Ub1dlYlByb2Nlc3M6OlBlcmZvcm1TeW5jaHJvbm91c0xvYWQ6OlJlcGx5KGVy
cm9yLCByZXNwb25zZSwgZGF0YSksIDApKSB7CisgICAgICAgIHJlc3BvbnNlID0gUmVzb3VyY2VS
ZXNwb25zZSgpOworICAgICAgICBlcnJvciA9IGludGVybmFsRXJyb3IocmVxdWVzdC51cmwoKSk7
CisgICAgfQorfQorCit2b2lkIFdlYlJlc291cmNlTG9hZFNjaGVkdWxlcjo6Y3JlYXRlUGluZ0hh
bmRsZShOZXR3b3JraW5nQ29udGV4dCogbmV0d29ya2luZ0NvbnRleHQsIFJlc291cmNlUmVxdWVz
dCYgcmVxdWVzdCwgYm9vbCBzaG91bGRVc2VDcmVkZW50aWFsU3RvcmFnZSkKK3sKKyAgICAvLyBJ
dCdzIHBvc3NpYmxlIHRoYXQgY2FsbCB0byBjcmVhdGVQaW5nSGFuZGxlIG1pZ2h0IGJlIG1hZGUg
ZHVyaW5nIGluaXRpYWwgZW1wdHkgRG9jdW1lbnQgY3JlYXRpb24gYmVmb3JlIGEgTmV0d29ya2lu
Z0NvbnRleHQgZXhpc3RzLgorICAgIC8vIEl0IGlzIG5vdCBjbGVhciB0aGF0IHdlIHNob3VsZCBz
ZW5kIHBpbmcgbG9hZHMgZHVyaW5nIHRoYXQgcHJvY2VzcyBhbnl3YXlzLgorICAgIGlmICghbmV0
d29ya2luZ0NvbnRleHQpCisgICAgICAgIHJldHVybjsKKworICAgIFdlYkZyYW1lTmV0d29ya2lu
Z0NvbnRleHQqIHdlYkNvbnRleHQgPSBzdGF0aWNfY2FzdDxXZWJGcmFtZU5ldHdvcmtpbmdDb250
ZXh0Kj4obmV0d29ya2luZ0NvbnRleHQpOworICAgIFdlYkZyYW1lTG9hZGVyQ2xpZW50KiB3ZWJG
cmFtZUxvYWRlckNsaWVudCA9IHdlYkNvbnRleHQtPndlYkZyYW1lTG9hZGVyQ2xpZW50KCk7Cisg
ICAgV2ViRnJhbWUqIHdlYkZyYW1lID0gd2ViRnJhbWVMb2FkZXJDbGllbnQgPyB3ZWJGcmFtZUxv
YWRlckNsaWVudC0+d2ViRnJhbWUoKSA6IG51bGxwdHI7CisgICAgV2ViUGFnZSogd2ViUGFnZSA9
IHdlYkZyYW1lID8gd2ViRnJhbWUtPnBhZ2UoKSA6IG51bGxwdHI7CisgICAgCisgICAgTmV0d29y
a1Jlc291cmNlTG9hZFBhcmFtZXRlcnMgbG9hZFBhcmFtZXRlcnM7CisgICAgbG9hZFBhcmFtZXRl
cnMucmVxdWVzdCA9IHJlcXVlc3Q7CisgICAgbG9hZFBhcmFtZXRlcnMuc2Vzc2lvbklEID0gd2Vi
UGFnZSA/IHdlYlBhZ2UtPnNlc3Npb25JRCgpIDogU2Vzc2lvbklEOjpkZWZhdWx0U2Vzc2lvbklE
KCk7CisgICAgbG9hZFBhcmFtZXRlcnMuYWxsb3dTdG9yZWRDcmVkZW50aWFscyA9IHNob3VsZFVz
ZUNyZWRlbnRpYWxTdG9yYWdlID8gQWxsb3dTdG9yZWRDcmVkZW50aWFscyA6IERvTm90QWxsb3dT
dG9yZWRDcmVkZW50aWFsczsKKyAgICBsb2FkUGFyYW1ldGVycy5zaG91bGRDbGVhclJlZmVycmVy
T25IVFRQU1RvSFRUUFJlZGlyZWN0ID0gbmV0d29ya2luZ0NvbnRleHQtPnNob3VsZENsZWFyUmVm
ZXJyZXJPbkhUVFBTVG9IVFRQUmVkaXJlY3QoKTsKKworICAgIFdlYlByb2Nlc3M6OnNpbmdsZXRv
bigpLm5ldHdvcmtDb25uZWN0aW9uKCktPmNvbm5lY3Rpb24oKS0+c2VuZChNZXNzYWdlczo6TmV0
d29ya0Nvbm5lY3Rpb25Ub1dlYlByb2Nlc3M6OkxvYWRQaW5nKGxvYWRQYXJhbWV0ZXJzKSwgMCk7
Cit9CisKKwogfSAvLyBuYW1lc3BhY2UgV2ViS2l0CkluZGV4OiBTb3VyY2UvV2ViS2l0Mi9XZWJQ
cm9jZXNzL05ldHdvcmsvV2ViUmVzb3VyY2VMb2FkU2NoZWR1bGVyLmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9OZXR3b3JrL1dlYlJlc291cmNlTG9hZFNjaGVkdWxl
ci5oCShyZXZpc2lvbiAxOTI4ODApCisrKyBTb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL05ldHdv
cmsvV2ViUmVzb3VyY2VMb2FkU2NoZWR1bGVyLmgJKHdvcmtpbmcgY29weSkKQEAgLTI3LDI1ICsy
NywyNiBAQAogI2RlZmluZSBXZWJSZXNvdXJjZUxvYWRTY2hlZHVsZXJfaAogCiAjaW5jbHVkZSAi
V2ViUmVzb3VyY2VMb2FkZXIuaCIKLSNpbmNsdWRlIDxXZWJDb3JlL1Jlc291cmNlTG9hZFByaW9y
aXR5Lmg+Ci0jaW5jbHVkZSA8V2ViQ29yZS9SZXNvdXJjZUxvYWRTY2hlZHVsZXIuaD4KKyNpbmNs
dWRlIDxXZWJDb3JlL0xvYWRlclN0cmF0ZWd5Lmg+CiAjaW5jbHVkZSA8V2ViQ29yZS9SZXNvdXJj
ZUxvYWRlci5oPgorI2luY2x1ZGUgPHd0Zi9IYXNoU2V0Lmg+CiAjaW5jbHVkZSA8d3RmL1J1bkxv
b3AuaD4KIAogbmFtZXNwYWNlIFdlYktpdCB7CiAKIGNsYXNzIE5ldHdvcmtQcm9jZXNzQ29ubmVj
dGlvbjsKK2NsYXNzIFdlYlJlc291cmNlTG9hZFNjaGVkdWxlcjsKIHR5cGVkZWYgdWludDY0X3Qg
UmVzb3VyY2VMb2FkSWRlbnRpZmllcjsKIAotY2xhc3MgV2ViUmVzb3VyY2VMb2FkU2NoZWR1bGVy
IDogcHVibGljIFdlYkNvcmU6OlJlc291cmNlTG9hZFNjaGVkdWxlciB7CitjbGFzcyBXZWJSZXNv
dXJjZUxvYWRTY2hlZHVsZXIgOiBwdWJsaWMgV2ViQ29yZTo6TG9hZGVyU3RyYXRlZ3kgewogICAg
IFdURl9NQUtFX05PTkNPUFlBQkxFKFdlYlJlc291cmNlTG9hZFNjaGVkdWxlcik7IFdURl9NQUtF
X0ZBU1RfQUxMT0NBVEVEOwogcHVibGljOgogICAgIFdlYlJlc291cmNlTG9hZFNjaGVkdWxlcigp
OwogICAgIHZpcnR1YWwgfldlYlJlc291cmNlTG9hZFNjaGVkdWxlcigpOwogICAgIAotICAgIHZp
cnR1YWwgUmVmUHRyPFdlYkNvcmU6OlN1YnJlc291cmNlTG9hZGVyPiBzY2hlZHVsZVN1YnJlc291
cmNlTG9hZChXZWJDb3JlOjpGcmFtZSosIFdlYkNvcmU6OkNhY2hlZFJlc291cmNlKiwgY29uc3Qg
V2ViQ29yZTo6UmVzb3VyY2VSZXF1ZXN0JiwgY29uc3QgV2ViQ29yZTo6UmVzb3VyY2VMb2FkZXJP
cHRpb25zJikgb3ZlcnJpZGU7Ci0gICAgdmlydHVhbCBSZWZQdHI8V2ViQ29yZTo6TmV0c2NhcGVQ
bHVnSW5TdHJlYW1Mb2FkZXI+IHNjaGVkdWxlUGx1Z2luU3RyZWFtTG9hZChXZWJDb3JlOjpGcmFt
ZSosIFdlYkNvcmU6Ok5ldHNjYXBlUGx1Z0luU3RyZWFtTG9hZGVyQ2xpZW50KiwgY29uc3QgV2Vi
Q29yZTo6UmVzb3VyY2VSZXF1ZXN0Jikgb3ZlcnJpZGU7Ci0gICAgCisgICAgdmlydHVhbCBSZWZQ
dHI8V2ViQ29yZTo6U3VicmVzb3VyY2VMb2FkZXI+IGxvYWRSZXNvdXJjZShXZWJDb3JlOjpGcmFt
ZSosIFdlYkNvcmU6OkNhY2hlZFJlc291cmNlKiwgY29uc3QgV2ViQ29yZTo6UmVzb3VyY2VSZXF1
ZXN0JiwgY29uc3QgV2ViQ29yZTo6UmVzb3VyY2VMb2FkZXJPcHRpb25zJikgb3ZlcnJpZGU7Cisg
ICAgdmlydHVhbCB2b2lkIGxvYWRSZXNvdXJjZVN5bmNocm9ub3VzbHkoV2ViQ29yZTo6TmV0d29y
a2luZ0NvbnRleHQqLCB1bnNpZ25lZCBsb25nIHJlc291cmNlTG9hZElkZW50aWZpZXIsIGNvbnN0
IFdlYkNvcmU6OlJlc291cmNlUmVxdWVzdCYsIFdlYkNvcmU6OlN0b3JlZENyZWRlbnRpYWxzLCBX
ZWJDb3JlOjpDbGllbnRDcmVkZW50aWFsUG9saWN5LCBXZWJDb3JlOjpSZXNvdXJjZUVycm9yJiwg
V2ViQ29yZTo6UmVzb3VyY2VSZXNwb25zZSYsIFZlY3RvcjxjaGFyPiYgZGF0YSkgb3ZlcnJpZGU7
CisKICAgICB2aXJ0dWFsIHZvaWQgcmVtb3ZlKFdlYkNvcmU6OlJlc291cmNlTG9hZGVyKikgb3Zl
cnJpZGU7CiAgICAgdmlydHVhbCB2b2lkIHNldERlZmVyc0xvYWRpbmcoV2ViQ29yZTo6UmVzb3Vy
Y2VMb2FkZXIqLCBib29sKSBvdmVycmlkZTsKICAgICB2aXJ0dWFsIHZvaWQgY3Jvc3NPcmlnaW5S
ZWRpcmVjdFJlY2VpdmVkKFdlYkNvcmU6OlJlc291cmNlTG9hZGVyKiwgY29uc3QgV2ViQ29yZTo6
VVJMJiByZWRpcmVjdFVSTCkgb3ZlcnJpZGU7CkBAIC01NSw5ICs1NiwxMCBAQCBwdWJsaWM6CiAg
ICAgdmlydHVhbCB2b2lkIHN1c3BlbmRQZW5kaW5nUmVxdWVzdHMoKSBvdmVycmlkZTsKICAgICB2
aXJ0dWFsIHZvaWQgcmVzdW1lUGVuZGluZ1JlcXVlc3RzKCkgb3ZlcnJpZGU7CiAKLSAgICB2aXJ0
dWFsIHZvaWQgc2V0U2VyaWFsTG9hZGluZ0VuYWJsZWQoYm9vbCkgb3ZlcnJpZGU7CisgICAgdmly
dHVhbCB2b2lkIGNyZWF0ZVBpbmdIYW5kbGUoV2ViQ29yZTo6TmV0d29ya2luZ0NvbnRleHQqLCBX
ZWJDb3JlOjpSZXNvdXJjZVJlcXVlc3QmLCBib29sIHNob3VsZFVzZUNyZWRlbnRpYWxTdG9yYWdl
KSBvdmVycmlkZTsKIAogICAgIFdlYlJlc291cmNlTG9hZGVyKiB3ZWJSZXNvdXJjZUxvYWRlckZv
cklkZW50aWZpZXIoUmVzb3VyY2VMb2FkSWRlbnRpZmllciBpZGVudGlmaWVyKSBjb25zdCB7IHJl
dHVybiBtX3dlYlJlc291cmNlTG9hZGVycy5nZXQoaWRlbnRpZmllcik7IH0KKyAgICBSZWZQdHI8
V2ViQ29yZTo6TmV0c2NhcGVQbHVnSW5TdHJlYW1Mb2FkZXI+IHNjaGVkdWxlUGx1Z2luU3RyZWFt
TG9hZChXZWJDb3JlOjpGcmFtZSosIFdlYkNvcmU6Ok5ldHNjYXBlUGx1Z0luU3RyZWFtTG9hZGVy
Q2xpZW50KiwgY29uc3QgV2ViQ29yZTo6UmVzb3VyY2VSZXF1ZXN0Jik7CiAKICAgICB2b2lkIG5l
dHdvcmtQcm9jZXNzQ3Jhc2hlZCgpOwogCkluZGV4OiBTb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNz
L1BsdWdpbnMvUGx1Z2luVmlldy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdDIvV2Vi
UHJvY2Vzcy9QbHVnaW5zL1BsdWdpblZpZXcuY3BwCShyZXZpc2lvbiAxOTI4ODApCisrKyBTb3Vy
Y2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1BsdWdpbnMvUGx1Z2luVmlldy5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTM0LDYgKzM0LDcgQEAKICNpbmNsdWRlICJXZWJQYWdlLmgiCiAjaW5jbHVkZSAiV2Vi
UGFnZVByb3h5TWVzc2FnZXMuaCIKICNpbmNsdWRlICJXZWJQcm9jZXNzLmgiCisjaW5jbHVkZSAi
V2ViUmVzb3VyY2VMb2FkU2NoZWR1bGVyLmgiCiAjaW5jbHVkZSA8V2ViQ29yZS9CaXRtYXBJbWFn
ZS5oPgogI2luY2x1ZGUgPFdlYkNvcmUvQ2hyb21lLmg+CiAjaW5jbHVkZSA8V2ViQ29yZS9Db29r
aWVKYXIuaD4KQEAgLTYyLDcgKzYzLDYgQEAKICNpbmNsdWRlIDxXZWJDb3JlL1Byb3RlY3Rpb25T
cGFjZS5oPgogI2luY2x1ZGUgPFdlYkNvcmUvUHJveHlTZXJ2ZXIuaD4KICNpbmNsdWRlIDxXZWJD
b3JlL1JlbmRlckVtYmVkZGVkT2JqZWN0Lmg+Ci0jaW5jbHVkZSA8V2ViQ29yZS9SZXNvdXJjZUxv
YWRTY2hlZHVsZXIuaD4KICNpbmNsdWRlIDxXZWJDb3JlL1NjcmlwdENvbnRyb2xsZXIuaD4KICNp
bmNsdWRlIDxXZWJDb3JlL1Njcm9sbFZpZXcuaD4KICNpbmNsdWRlIDxXZWJDb3JlL1NlY3VyaXR5
T3JpZ2luLmg+CkBAIC0xNjAsNyArMTYwLDcgQEAgdm9pZCBQbHVnaW5WaWV3OjpTdHJlYW06OnN0
YXJ0KCkKICAgICBGcmFtZSogZnJhbWUgPSBtX3BsdWdpblZpZXctPm1fcGx1Z2luRWxlbWVudC0+
ZG9jdW1lbnQoKS5mcmFtZSgpOwogICAgIEFTU0VSVChmcmFtZSk7CiAKLSAgICBtX2xvYWRlciA9
IHJlc291cmNlTG9hZFNjaGVkdWxlcigpLT5zY2hlZHVsZVBsdWdpblN0cmVhbUxvYWQoZnJhbWUs
IHRoaXMsIG1fcmVxdWVzdCk7CisgICAgbV9sb2FkZXIgPSBXZWJQcm9jZXNzOjpzaW5nbGV0b24o
KS53ZWJSZXNvdXJjZUxvYWRTY2hlZHVsZXIoKS5zY2hlZHVsZVBsdWdpblN0cmVhbUxvYWQoZnJh
bWUsIHRoaXMsIG1fcmVxdWVzdCk7CiB9CiAKIHZvaWQgUGx1Z2luVmlldzo6U3RyZWFtOjpjYW5j
ZWwoKQpJbmRleDogU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJDb3JlU3VwcG9ydC9XZWJQ
bGF0Zm9ybVN0cmF0ZWdpZXMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQyL1dlYlBy
b2Nlc3MvV2ViQ29yZVN1cHBvcnQvV2ViUGxhdGZvcm1TdHJhdGVnaWVzLmNwcAkocmV2aXNpb24g
MTkyODgwKQorKysgU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJDb3JlU3VwcG9ydC9XZWJQ
bGF0Zm9ybVN0cmF0ZWdpZXMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00MCw3ICs0MCw2IEBACiAj
aW5jbHVkZSAiV2ViRXJyb3JzLmgiCiAjaW5jbHVkZSAiV2ViRnJhbWUuaCIKICNpbmNsdWRlICJX
ZWJGcmFtZUxvYWRlckNsaWVudC5oIgotI2luY2x1ZGUgIldlYkZyYW1lTmV0d29ya2luZ0NvbnRl
eHQuaCIKICNpbmNsdWRlICJXZWJJREJGYWN0b3J5QmFja2VuZC5oIgogI2luY2x1ZGUgIldlYlBh
Z2UuaCIKICNpbmNsdWRlICJXZWJQYXN0ZWJvYXJkT3ZlcnJpZGVzLmgiCkBAIC05Miw3ICs5MSw3
IEBAIENvb2tpZXNTdHJhdGVneSogV2ViUGxhdGZvcm1TdHJhdGVnaWVzOjoKIAogTG9hZGVyU3Ry
YXRlZ3kqIFdlYlBsYXRmb3JtU3RyYXRlZ2llczo6Y3JlYXRlTG9hZGVyU3RyYXRlZ3koKQogewot
ICAgIHJldHVybiB0aGlzOworICAgIHJldHVybiAmV2ViUHJvY2Vzczo6c2luZ2xldG9uKCkud2Vi
UmVzb3VyY2VMb2FkU2NoZWR1bGVyKCk7CiB9CiAKIFBhc3RlYm9hcmRTdHJhdGVneSogV2ViUGxh
dGZvcm1TdHJhdGVnaWVzOjpjcmVhdGVQYXN0ZWJvYXJkU3RyYXRlZ3koKQpAQCAtMTA1LDYgKzEw
NCwxMSBAQCBQbHVnaW5TdHJhdGVneSogV2ViUGxhdGZvcm1TdHJhdGVnaWVzOjpjCiAgICAgcmV0
dXJuIHRoaXM7CiB9CiAKK0Jsb2JSZWdpc3RyeSogV2ViUGxhdGZvcm1TdHJhdGVnaWVzOjpjcmVh
dGVCbG9iUmVnaXN0cnkoKQoreworICAgIHJldHVybiBuZXcgQmxvYlJlZ2lzdHJ5UHJveHk7Cit9
CisKIC8vIENvb2tpZXNTdHJhdGVneQogCiBTdHJpbmcgV2ViUGxhdGZvcm1TdHJhdGVnaWVzOjpj
b29raWVzRm9yRE9NKGNvbnN0IE5ldHdvcmtTdG9yYWdlU2Vzc2lvbiYgc2Vzc2lvbiwgY29uc3Qg
VVJMJiBmaXJzdFBhcnR5LCBjb25zdCBVUkwmIHVybCkKQEAgLTE0OCw3MCArMTUyLDYgQEAgdm9p
ZCBXZWJQbGF0Zm9ybVN0cmF0ZWdpZXM6OmRlbGV0ZUNvb2tpZQogICAgIFdlYlByb2Nlc3M6OnNp
bmdsZXRvbigpLm5ldHdvcmtDb25uZWN0aW9uKCktPmNvbm5lY3Rpb24oKS0+c2VuZChNZXNzYWdl
czo6TmV0d29ya0Nvbm5lY3Rpb25Ub1dlYlByb2Nlc3M6OkRlbGV0ZUNvb2tpZShTZXNzaW9uVHJh
Y2tlcjo6c2Vzc2lvbklEKHNlc3Npb24pLCB1cmwsIGNvb2tpZU5hbWUpLCAwKTsKIH0KIAotLy8g
TG9hZGVyU3RyYXRlZ3kKLQotUmVzb3VyY2VMb2FkU2NoZWR1bGVyKiBXZWJQbGF0Zm9ybVN0cmF0
ZWdpZXM6OnJlc291cmNlTG9hZFNjaGVkdWxlcigpCi17Ci0gICAgcmV0dXJuICZXZWJQcm9jZXNz
OjpzaW5nbGV0b24oKS53ZWJSZXNvdXJjZUxvYWRTY2hlZHVsZXIoKTsKLX0KLQotdm9pZCBXZWJQ
bGF0Zm9ybVN0cmF0ZWdpZXM6OmxvYWRSZXNvdXJjZVN5bmNocm9ub3VzbHkoTmV0d29ya2luZ0Nv
bnRleHQqIGNvbnRleHQsIHVuc2lnbmVkIGxvbmcgcmVzb3VyY2VMb2FkSWRlbnRpZmllciwgY29u
c3QgUmVzb3VyY2VSZXF1ZXN0JiByZXF1ZXN0LCBTdG9yZWRDcmVkZW50aWFscyBzdG9yZWRDcmVk
ZW50aWFscywgQ2xpZW50Q3JlZGVudGlhbFBvbGljeSBjbGllbnRDcmVkZW50aWFsUG9saWN5LCBS
ZXNvdXJjZUVycm9yJiBlcnJvciwgUmVzb3VyY2VSZXNwb25zZSYgcmVzcG9uc2UsIFZlY3Rvcjxj
aGFyPiYgZGF0YSkKLXsKLSAgICBXZWJGcmFtZU5ldHdvcmtpbmdDb250ZXh0KiB3ZWJDb250ZXh0
ID0gc3RhdGljX2Nhc3Q8V2ViRnJhbWVOZXR3b3JraW5nQ29udGV4dCo+KGNvbnRleHQpOwotICAg
IC8vIEZJWE1FOiBTb21lIGVudGl0aWVzIGluIFdlYkNvcmUgdXNlIFdlYkNvcmUncyAiRW1wdHlG
cmFtZUxvYWRlckNsaWVudCIgaW5zdGVhZCBvZiBoYXZpbmcgYSBwcm9wZXIgV2ViRnJhbWVMb2Fk
ZXJDbGllbnQuCi0gICAgLy8gRW1wdHlGcmFtZUxvYWRlckNsaWVudCBzaG91bGRuJ3QgZXhpc3Qg
YW5kIGV2ZXJ5dGhpbmcgc2hvdWxkIGJlIHVzaW5nIGEgV2ViRnJhbWVMb2FkZXJDbGllbnQsCi0g
ICAgLy8gYnV0IGluIHRoZSBtZWFudGltZSB3ZSBoYXZlIHRvIG1ha2Ugc3VyZSBub3QgdG8gbWlz
LWNhc3QuCi0gICAgV2ViRnJhbWVMb2FkZXJDbGllbnQqIHdlYkZyYW1lTG9hZGVyQ2xpZW50ID0g
d2ViQ29udGV4dC0+d2ViRnJhbWVMb2FkZXJDbGllbnQoKTsKLSAgICBXZWJGcmFtZSogd2ViRnJh
bWUgPSB3ZWJGcmFtZUxvYWRlckNsaWVudCA/IHdlYkZyYW1lTG9hZGVyQ2xpZW50LT53ZWJGcmFt
ZSgpIDogMDsKLSAgICBXZWJQYWdlKiB3ZWJQYWdlID0gd2ViRnJhbWUgPyB3ZWJGcmFtZS0+cGFn
ZSgpIDogMDsKLQotICAgIE5ldHdvcmtSZXNvdXJjZUxvYWRQYXJhbWV0ZXJzIGxvYWRQYXJhbWV0
ZXJzOwotICAgIGxvYWRQYXJhbWV0ZXJzLmlkZW50aWZpZXIgPSByZXNvdXJjZUxvYWRJZGVudGlm
aWVyOwotICAgIGxvYWRQYXJhbWV0ZXJzLndlYlBhZ2VJRCA9IHdlYlBhZ2UgPyB3ZWJQYWdlLT5w
YWdlSUQoKSA6IDA7Ci0gICAgbG9hZFBhcmFtZXRlcnMud2ViRnJhbWVJRCA9IHdlYkZyYW1lID8g
d2ViRnJhbWUtPmZyYW1lSUQoKSA6IDA7Ci0gICAgbG9hZFBhcmFtZXRlcnMuc2Vzc2lvbklEID0g
d2ViUGFnZSA/IHdlYlBhZ2UtPnNlc3Npb25JRCgpIDogU2Vzc2lvbklEOjpkZWZhdWx0U2Vzc2lv
bklEKCk7Ci0gICAgbG9hZFBhcmFtZXRlcnMucmVxdWVzdCA9IHJlcXVlc3Q7Ci0gICAgbG9hZFBh
cmFtZXRlcnMuY29udGVudFNuaWZmaW5nUG9saWN5ID0gU25pZmZDb250ZW50OwotICAgIGxvYWRQ
YXJhbWV0ZXJzLmFsbG93U3RvcmVkQ3JlZGVudGlhbHMgPSBzdG9yZWRDcmVkZW50aWFsczsKLSAg
ICBsb2FkUGFyYW1ldGVycy5jbGllbnRDcmVkZW50aWFsUG9saWN5ID0gY2xpZW50Q3JlZGVudGlh
bFBvbGljeTsKLSAgICBsb2FkUGFyYW1ldGVycy5zaG91bGRDbGVhclJlZmVycmVyT25IVFRQU1Rv
SFRUUFJlZGlyZWN0ID0gY29udGV4dC0+c2hvdWxkQ2xlYXJSZWZlcnJlck9uSFRUUFNUb0hUVFBS
ZWRpcmVjdCgpOwotCi0gICAgZGF0YS5yZXNpemUoMCk7Ci0KLSAgICBIYW5nRGV0ZWN0aW9uRGlz
YWJsZXIgaGFuZ0RldGVjdGlvbkRpc2FibGVyOwotCi0gICAgaWYgKCFXZWJQcm9jZXNzOjpzaW5n
bGV0b24oKS5uZXR3b3JrQ29ubmVjdGlvbigpLT5jb25uZWN0aW9uKCktPnNlbmRTeW5jKE1lc3Nh
Z2VzOjpOZXR3b3JrQ29ubmVjdGlvblRvV2ViUHJvY2Vzczo6UGVyZm9ybVN5bmNocm9ub3VzTG9h
ZChsb2FkUGFyYW1ldGVycyksIE1lc3NhZ2VzOjpOZXR3b3JrQ29ubmVjdGlvblRvV2ViUHJvY2Vz
czo6UGVyZm9ybVN5bmNocm9ub3VzTG9hZDo6UmVwbHkoZXJyb3IsIHJlc3BvbnNlLCBkYXRhKSwg
MCkpIHsKLSAgICAgICAgcmVzcG9uc2UgPSBSZXNvdXJjZVJlc3BvbnNlKCk7Ci0gICAgICAgIGVy
cm9yID0gaW50ZXJuYWxFcnJvcihyZXF1ZXN0LnVybCgpKTsKLSAgICB9Ci19Ci0KLXZvaWQgV2Vi
UGxhdGZvcm1TdHJhdGVnaWVzOjpjcmVhdGVQaW5nSGFuZGxlKE5ldHdvcmtpbmdDb250ZXh0KiBu
ZXR3b3JraW5nQ29udGV4dCwgUmVzb3VyY2VSZXF1ZXN0JiByZXF1ZXN0LCBib29sIHNob3VsZFVz
ZUNyZWRlbnRpYWxTdG9yYWdlKQotewotICAgIC8vIEl0J3MgcG9zc2libGUgdGhhdCBjYWxsIHRv
IGNyZWF0ZVBpbmdIYW5kbGUgbWlnaHQgYmUgbWFkZSBkdXJpbmcgaW5pdGlhbCBlbXB0eSBEb2N1
bWVudCBjcmVhdGlvbiBiZWZvcmUgYSBOZXR3b3JraW5nQ29udGV4dCBleGlzdHMuCi0gICAgLy8g
SXQgaXMgbm90IGNsZWFyIHRoYXQgd2Ugc2hvdWxkIHNlbmQgcGluZyBsb2FkcyBkdXJpbmcgdGhh
dCBwcm9jZXNzIGFueXdheXMuCi0gICAgaWYgKCFuZXR3b3JraW5nQ29udGV4dCkKLSAgICAgICAg
cmV0dXJuOwotCi0gICAgV2ViRnJhbWVOZXR3b3JraW5nQ29udGV4dCogd2ViQ29udGV4dCA9IHN0
YXRpY19jYXN0PFdlYkZyYW1lTmV0d29ya2luZ0NvbnRleHQqPihuZXR3b3JraW5nQ29udGV4dCk7
Ci0gICAgV2ViRnJhbWVMb2FkZXJDbGllbnQqIHdlYkZyYW1lTG9hZGVyQ2xpZW50ID0gd2ViQ29u
dGV4dC0+d2ViRnJhbWVMb2FkZXJDbGllbnQoKTsKLSAgICBXZWJGcmFtZSogd2ViRnJhbWUgPSB3
ZWJGcmFtZUxvYWRlckNsaWVudCA/IHdlYkZyYW1lTG9hZGVyQ2xpZW50LT53ZWJGcmFtZSgpIDog
bnVsbHB0cjsKLSAgICBXZWJQYWdlKiB3ZWJQYWdlID0gd2ViRnJhbWUgPyB3ZWJGcmFtZS0+cGFn
ZSgpIDogbnVsbHB0cjsKLSAgICAKLSAgICBOZXR3b3JrUmVzb3VyY2VMb2FkUGFyYW1ldGVycyBs
b2FkUGFyYW1ldGVyczsKLSAgICBsb2FkUGFyYW1ldGVycy5yZXF1ZXN0ID0gcmVxdWVzdDsKLSAg
ICBsb2FkUGFyYW1ldGVycy5zZXNzaW9uSUQgPSB3ZWJQYWdlID8gd2ViUGFnZS0+c2Vzc2lvbklE
KCkgOiBTZXNzaW9uSUQ6OmRlZmF1bHRTZXNzaW9uSUQoKTsKLSAgICBsb2FkUGFyYW1ldGVycy5h
bGxvd1N0b3JlZENyZWRlbnRpYWxzID0gc2hvdWxkVXNlQ3JlZGVudGlhbFN0b3JhZ2UgPyBBbGxv
d1N0b3JlZENyZWRlbnRpYWxzIDogRG9Ob3RBbGxvd1N0b3JlZENyZWRlbnRpYWxzOwotICAgIGxv
YWRQYXJhbWV0ZXJzLnNob3VsZENsZWFyUmVmZXJyZXJPbkhUVFBTVG9IVFRQUmVkaXJlY3QgPSBu
ZXR3b3JraW5nQ29udGV4dC0+c2hvdWxkQ2xlYXJSZWZlcnJlck9uSFRUUFNUb0hUVFBSZWRpcmVj
dCgpOwotCi0gICAgV2ViUHJvY2Vzczo6c2luZ2xldG9uKCkubmV0d29ya0Nvbm5lY3Rpb24oKS0+
Y29ubmVjdGlvbigpLT5zZW5kKE1lc3NhZ2VzOjpOZXR3b3JrQ29ubmVjdGlvblRvV2ViUHJvY2Vz
czo6TG9hZFBpbmcobG9hZFBhcmFtZXRlcnMpLCAwKTsKLX0KLQotQmxvYlJlZ2lzdHJ5KiBXZWJQ
bGF0Zm9ybVN0cmF0ZWdpZXM6OmNyZWF0ZUJsb2JSZWdpc3RyeSgpCi17Ci0gICAgcmV0dXJuIG5l
dyBCbG9iUmVnaXN0cnlQcm94eTsKLX0KLQogLy8gUGx1Z2luU3RyYXRlZ3kKIAogdm9pZCBXZWJQ
bGF0Zm9ybVN0cmF0ZWdpZXM6OnJlZnJlc2hQbHVnaW5zKCkKSW5kZXg6IFNvdXJjZS9XZWJLaXQy
L1dlYlByb2Nlc3MvV2ViQ29yZVN1cHBvcnQvV2ViUGxhdGZvcm1TdHJhdGVnaWVzLmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJDb3JlU3VwcG9ydC9XZWJQbGF0
Zm9ybVN0cmF0ZWdpZXMuaAkocmV2aXNpb24gMTkyODgwKQorKysgU291cmNlL1dlYktpdDIvV2Vi
UHJvY2Vzcy9XZWJDb3JlU3VwcG9ydC9XZWJQbGF0Zm9ybVN0cmF0ZWdpZXMuaAkod29ya2luZyBj
b3B5KQpAQCAtMzYsNyArMzYsNyBAQAogCiBuYW1lc3BhY2UgV2ViS2l0IHsKIAotY2xhc3MgV2Vi
UGxhdGZvcm1TdHJhdGVnaWVzIDogcHVibGljIFdlYkNvcmU6OlBsYXRmb3JtU3RyYXRlZ2llcywg
cHJpdmF0ZSBXZWJDb3JlOjpDb29raWVzU3RyYXRlZ3ksIHByaXZhdGUgV2ViQ29yZTo6TG9hZGVy
U3RyYXRlZ3ksIHByaXZhdGUgV2ViQ29yZTo6UGFzdGVib2FyZFN0cmF0ZWd5LCBwcml2YXRlIFdl
YkNvcmU6OlBsdWdpblN0cmF0ZWd5IHsKK2NsYXNzIFdlYlBsYXRmb3JtU3RyYXRlZ2llcyA6IHB1
YmxpYyBXZWJDb3JlOjpQbGF0Zm9ybVN0cmF0ZWdpZXMsIHByaXZhdGUgV2ViQ29yZTo6Q29va2ll
c1N0cmF0ZWd5LCBwcml2YXRlIFdlYkNvcmU6OlBhc3RlYm9hcmRTdHJhdGVneSwgcHJpdmF0ZSBX
ZWJDb3JlOjpQbHVnaW5TdHJhdGVneSB7CiAgICAgZnJpZW5kIGNsYXNzIE5ldmVyRGVzdHJveWVk
PFdlYlBsYXRmb3JtU3RyYXRlZ2llcz47CiBwdWJsaWM6CiAgICAgc3RhdGljIHZvaWQgaW5pdGlh
bGl6ZSgpOwpAQCAtNDksNiArNDksNyBAQCBwcml2YXRlOgogICAgIHZpcnR1YWwgV2ViQ29yZTo6
TG9hZGVyU3RyYXRlZ3kqIGNyZWF0ZUxvYWRlclN0cmF0ZWd5KCkgb3ZlcnJpZGU7CiAgICAgdmly
dHVhbCBXZWJDb3JlOjpQYXN0ZWJvYXJkU3RyYXRlZ3kqIGNyZWF0ZVBhc3RlYm9hcmRTdHJhdGVn
eSgpIG92ZXJyaWRlOwogICAgIHZpcnR1YWwgV2ViQ29yZTo6UGx1Z2luU3RyYXRlZ3kqIGNyZWF0
ZVBsdWdpblN0cmF0ZWd5KCkgb3ZlcnJpZGU7CisgICAgdmlydHVhbCBXZWJDb3JlOjpCbG9iUmVn
aXN0cnkqIGNyZWF0ZUJsb2JSZWdpc3RyeSgpIG92ZXJyaWRlOwogCiAgICAgLy8gV2ViQ29yZTo6
Q29va2llc1N0cmF0ZWd5CiAgICAgdmlydHVhbCBTdHJpbmcgY29va2llc0ZvckRPTShjb25zdCBX
ZWJDb3JlOjpOZXR3b3JrU3RvcmFnZVNlc3Npb24mLCBjb25zdCBXZWJDb3JlOjpVUkwmIGZpcnN0
UGFydHksIGNvbnN0IFdlYkNvcmU6OlVSTCYpIG92ZXJyaWRlOwpAQCAtNTgsMTIgKzU5LDYgQEAg
cHJpdmF0ZToKICAgICB2aXJ0dWFsIGJvb2wgZ2V0UmF3Q29va2llcyhjb25zdCBXZWJDb3JlOjpO
ZXR3b3JrU3RvcmFnZVNlc3Npb24mLCBjb25zdCBXZWJDb3JlOjpVUkwmIGZpcnN0UGFydHksIGNv
bnN0IFdlYkNvcmU6OlVSTCYsIFZlY3RvcjxXZWJDb3JlOjpDb29raWU+Jikgb3ZlcnJpZGU7CiAg
ICAgdmlydHVhbCB2b2lkIGRlbGV0ZUNvb2tpZShjb25zdCBXZWJDb3JlOjpOZXR3b3JrU3RvcmFn
ZVNlc3Npb24mLCBjb25zdCBXZWJDb3JlOjpVUkwmLCBjb25zdCBTdHJpbmcmKSBvdmVycmlkZTsK
IAotICAgIC8vIFdlYkNvcmU6OkxvYWRlclN0cmF0ZWd5Ci0gICAgdmlydHVhbCBXZWJDb3JlOjpS
ZXNvdXJjZUxvYWRTY2hlZHVsZXIqIHJlc291cmNlTG9hZFNjaGVkdWxlcigpIG92ZXJyaWRlOwot
ICAgIHZpcnR1YWwgdm9pZCBsb2FkUmVzb3VyY2VTeW5jaHJvbm91c2x5KFdlYkNvcmU6Ok5ldHdv
cmtpbmdDb250ZXh0KiwgdW5zaWduZWQgbG9uZyByZXNvdXJjZUxvYWRJZGVudGlmaWVyLCBjb25z
dCBXZWJDb3JlOjpSZXNvdXJjZVJlcXVlc3QmLCBXZWJDb3JlOjpTdG9yZWRDcmVkZW50aWFscywg
V2ViQ29yZTo6Q2xpZW50Q3JlZGVudGlhbFBvbGljeSwgV2ViQ29yZTo6UmVzb3VyY2VFcnJvciYs
IFdlYkNvcmU6OlJlc291cmNlUmVzcG9uc2UmLCBWZWN0b3I8Y2hhcj4mIGRhdGEpIG92ZXJyaWRl
OwotICAgIHZpcnR1YWwgV2ViQ29yZTo6QmxvYlJlZ2lzdHJ5KiBjcmVhdGVCbG9iUmVnaXN0cnko
KSBvdmVycmlkZTsKLSAgICB2aXJ0dWFsIHZvaWQgY3JlYXRlUGluZ0hhbmRsZShXZWJDb3JlOjpO
ZXR3b3JraW5nQ29udGV4dCosIFdlYkNvcmU6OlJlc291cmNlUmVxdWVzdCYsIGJvb2wgc2hvdWxk
VXNlQ3JlZGVudGlhbFN0b3JhZ2UpIG92ZXJyaWRlOwotCiAgICAgLy8gV2ViQ29yZTo6UGx1Z2lu
U3RyYXRlZ3kKICAgICB2aXJ0dWFsIHZvaWQgcmVmcmVzaFBsdWdpbnMoKSBvdmVycmlkZTsKICAg
ICB2aXJ0dWFsIHZvaWQgZ2V0UGx1Z2luSW5mbyhjb25zdCBXZWJDb3JlOjpQYWdlKiwgVmVjdG9y
PFdlYkNvcmU6OlBsdWdpbkluZm8+Jikgb3ZlcnJpZGU7CkluZGV4OiBTb3VyY2UvV2ViS2l0L0No
YW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L0NoYW5nZUxvZwkocmV2aXNpb24g
MTkyOTQzKQorKysgU291cmNlL1dlYktpdC9DaGFuZ2VMb2cJKHdvcmtpbmcgY29weSkKQEAgLTEs
MyArMSw3MiBAQAorMjAxNS0xMi0wMiAgQW50dGkgS29pdmlzdG8gIDxhbnR0aUBhcHBsZS5jb20+
CisKKyAgICAgICAgTW92ZSBSZXNvdXJjZUxvYWRTY2hlZHVsZXIgdG8gV2ViS2l0MQorICAgICAg
ICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTUxNzQzCisKKyAgICAg
ICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgKiBXZWJDb3JlU3VwcG9y
dC9XZWJSZXNvdXJjZUxvYWRTY2hlZHVsZXIuY3BwOiBDb3BpZWQgZnJvbSBTb3VyY2UvV2ViQ29y
ZS9sb2FkZXIvUmVzb3VyY2VMb2FkU2NoZWR1bGVyLmNwcC4KKyAgICAgICAgKHdlYlJlc291cmNl
TG9hZFNjaGVkdWxlcik6CisgICAgICAgIChXZWJSZXNvdXJjZUxvYWRTY2hlZHVsZXI6Omhvc3RG
b3JVUkwpOgorICAgICAgICAoV2ViUmVzb3VyY2VMb2FkU2NoZWR1bGVyOjpXZWJSZXNvdXJjZUxv
YWRTY2hlZHVsZXIpOgorICAgICAgICAoV2ViUmVzb3VyY2VMb2FkU2NoZWR1bGVyOjp+V2ViUmVz
b3VyY2VMb2FkU2NoZWR1bGVyKToKKyAgICAgICAgKFdlYlJlc291cmNlTG9hZFNjaGVkdWxlcjo6
c2NoZWR1bGVTdWJyZXNvdXJjZUxvYWQpOgorICAgICAgICAoV2ViUmVzb3VyY2VMb2FkU2NoZWR1
bGVyOjpsb2FkUmVzb3VyY2VTeW5jaHJvbm91c2x5KToKKyAgICAgICAgKFdlYlJlc291cmNlTG9h
ZFNjaGVkdWxlcjo6c2NoZWR1bGVQbHVnaW5TdHJlYW1Mb2FkKToKKyAgICAgICAgKFdlYlJlc291
cmNlTG9hZFNjaGVkdWxlcjo6c2NoZWR1bGVMb2FkKToKKyAgICAgICAgKFdlYlJlc291cmNlTG9h
ZFNjaGVkdWxlcjo6cmVtb3ZlKToKKyAgICAgICAgKFdlYlJlc291cmNlTG9hZFNjaGVkdWxlcjo6
c2V0RGVmZXJzTG9hZGluZyk6CisgICAgICAgIChXZWJSZXNvdXJjZUxvYWRTY2hlZHVsZXI6OmNy
b3NzT3JpZ2luUmVkaXJlY3RSZWNlaXZlZCk6CisgICAgICAgIChXZWJSZXNvdXJjZUxvYWRTY2hl
ZHVsZXI6OnNlcnZlUGVuZGluZ1JlcXVlc3RzKToKKyAgICAgICAgKFdlYlJlc291cmNlTG9hZFNj
aGVkdWxlcjo6c3VzcGVuZFBlbmRpbmdSZXF1ZXN0cyk6CisgICAgICAgIChXZWJSZXNvdXJjZUxv
YWRTY2hlZHVsZXI6OnJlc3VtZVBlbmRpbmdSZXF1ZXN0cyk6CisgICAgICAgIChXZWJSZXNvdXJj
ZUxvYWRTY2hlZHVsZXI6OnNjaGVkdWxlU2VydmVQZW5kaW5nUmVxdWVzdHMpOgorICAgICAgICAo
V2ViUmVzb3VyY2VMb2FkU2NoZWR1bGVyOjpyZXF1ZXN0VGltZXJGaXJlZCk6CisgICAgICAgIChX
ZWJSZXNvdXJjZUxvYWRTY2hlZHVsZXI6Okhvc3RJbmZvcm1hdGlvbjo6SG9zdEluZm9ybWF0aW9u
KToKKyAgICAgICAgKFdlYlJlc291cmNlTG9hZFNjaGVkdWxlcjo6SG9zdEluZm9ybWF0aW9uOjp+
SG9zdEluZm9ybWF0aW9uKToKKyAgICAgICAgKFdlYlJlc291cmNlTG9hZFNjaGVkdWxlcjo6SG9z
dEluZm9ybWF0aW9uOjpwcmlvcml0eVRvSW5kZXgpOgorICAgICAgICAoV2ViUmVzb3VyY2VMb2Fk
U2NoZWR1bGVyOjpIb3N0SW5mb3JtYXRpb246OnNjaGVkdWxlKToKKyAgICAgICAgKFdlYlJlc291
cmNlTG9hZFNjaGVkdWxlcjo6SG9zdEluZm9ybWF0aW9uOjphZGRMb2FkSW5Qcm9ncmVzcyk6Cisg
ICAgICAgIChXZWJSZXNvdXJjZUxvYWRTY2hlZHVsZXI6Okhvc3RJbmZvcm1hdGlvbjo6cmVtb3Zl
KToKKyAgICAgICAgKFdlYlJlc291cmNlTG9hZFNjaGVkdWxlcjo6SG9zdEluZm9ybWF0aW9uOjpo
YXNSZXF1ZXN0cyk6CisgICAgICAgIChXZWJSZXNvdXJjZUxvYWRTY2hlZHVsZXI6Okhvc3RJbmZv
cm1hdGlvbjo6bGltaXRSZXF1ZXN0cyk6CisgICAgICAgIChXZWJSZXNvdXJjZUxvYWRTY2hlZHVs
ZXI6OmNyZWF0ZVBpbmdIYW5kbGUpOgorICAgICAgICAoV2ViQ29yZTo6UmVzb3VyY2VMb2FkU2No
ZWR1bGVyOjpob3N0Rm9yVVJMKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OnJlc291cmNl
TG9hZFNjaGVkdWxlcik6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpSZXNvdXJjZUxvYWRT
Y2hlZHVsZXI6OlJlc291cmNlTG9hZFNjaGVkdWxlcik6IERlbGV0ZWQuCisgICAgICAgIChXZWJD
b3JlOjpSZXNvdXJjZUxvYWRTY2hlZHVsZXI6On5SZXNvdXJjZUxvYWRTY2hlZHVsZXIpOiBEZWxl
dGVkLgorICAgICAgICAoV2ViQ29yZTo6UmVzb3VyY2VMb2FkU2NoZWR1bGVyOjpzY2hlZHVsZVN1
YnJlc291cmNlTG9hZCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpSZXNvdXJjZUxvYWRT
Y2hlZHVsZXI6OnNjaGVkdWxlUGx1Z2luU3RyZWFtTG9hZCk6IERlbGV0ZWQuCisgICAgICAgIChX
ZWJDb3JlOjpSZXNvdXJjZUxvYWRTY2hlZHVsZXI6OnNjaGVkdWxlTG9hZCk6IERlbGV0ZWQuCisg
ICAgICAgIChXZWJDb3JlOjpSZXNvdXJjZUxvYWRTY2hlZHVsZXI6OnJlbW92ZSk6IERlbGV0ZWQu
CisgICAgICAgIChXZWJDb3JlOjpSZXNvdXJjZUxvYWRTY2hlZHVsZXI6OnNldERlZmVyc0xvYWRp
bmcpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6UmVzb3VyY2VMb2FkU2NoZWR1bGVyOjpj
cm9zc09yaWdpblJlZGlyZWN0UmVjZWl2ZWQpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6
UmVzb3VyY2VMb2FkU2NoZWR1bGVyOjpzZXJ2ZVBlbmRpbmdSZXF1ZXN0cyk6IERlbGV0ZWQuCisg
ICAgICAgIChXZWJDb3JlOjpSZXNvdXJjZUxvYWRTY2hlZHVsZXI6OnN1c3BlbmRQZW5kaW5nUmVx
dWVzdHMpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6UmVzb3VyY2VMb2FkU2NoZWR1bGVy
OjpyZXN1bWVQZW5kaW5nUmVxdWVzdHMpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6UmVz
b3VyY2VMb2FkU2NoZWR1bGVyOjpzY2hlZHVsZVNlcnZlUGVuZGluZ1JlcXVlc3RzKTogRGVsZXRl
ZC4KKyAgICAgICAgKFdlYkNvcmU6OlJlc291cmNlTG9hZFNjaGVkdWxlcjo6cmVxdWVzdFRpbWVy
RmlyZWQpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6UmVzb3VyY2VMb2FkU2NoZWR1bGVy
OjpIb3N0SW5mb3JtYXRpb246Okhvc3RJbmZvcm1hdGlvbik6IERlbGV0ZWQuCisgICAgICAgIChX
ZWJDb3JlOjpSZXNvdXJjZUxvYWRTY2hlZHVsZXI6Okhvc3RJbmZvcm1hdGlvbjo6fkhvc3RJbmZv
cm1hdGlvbik6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpSZXNvdXJjZUxvYWRTY2hlZHVs
ZXI6Okhvc3RJbmZvcm1hdGlvbjo6cHJpb3JpdHlUb0luZGV4KTogRGVsZXRlZC4KKyAgICAgICAg
KFdlYkNvcmU6OlJlc291cmNlTG9hZFNjaGVkdWxlcjo6SG9zdEluZm9ybWF0aW9uOjpzY2hlZHVs
ZSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpSZXNvdXJjZUxvYWRTY2hlZHVsZXI6Okhv
c3RJbmZvcm1hdGlvbjo6YWRkTG9hZEluUHJvZ3Jlc3MpOiBEZWxldGVkLgorICAgICAgICAoV2Vi
Q29yZTo6UmVzb3VyY2VMb2FkU2NoZWR1bGVyOjpIb3N0SW5mb3JtYXRpb246OnJlbW92ZSk6IERl
bGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpSZXNvdXJjZUxvYWRTY2hlZHVsZXI6Okhvc3RJbmZv
cm1hdGlvbjo6aGFzUmVxdWVzdHMpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6UmVzb3Vy
Y2VMb2FkU2NoZWR1bGVyOjpIb3N0SW5mb3JtYXRpb246OmxpbWl0UmVxdWVzdHMpOiBEZWxldGVk
LgorICAgICAgICAqIFdlYkNvcmVTdXBwb3J0L1dlYlJlc291cmNlTG9hZFNjaGVkdWxlci5oOiBD
b3BpZWQgZnJvbSBTb3VyY2UvV2ViQ29yZS9sb2FkZXIvUmVzb3VyY2VMb2FkU2NoZWR1bGVyLmgu
CisgICAgICAgIChXZWJSZXNvdXJjZUxvYWRTY2hlZHVsZXI6OmlzU2VyaWFsTG9hZGluZ0VuYWJs
ZWQpOgorICAgICAgICAoV2ViUmVzb3VyY2VMb2FkU2NoZWR1bGVyOjpzZXRTZXJpYWxMb2FkaW5n
RW5hYmxlZCk6CisgICAgICAgIChXZWJSZXNvdXJjZUxvYWRTY2hlZHVsZXI6Okhvc3RJbmZvcm1h
dGlvbjo6bmFtZSk6CisgICAgICAgIChXZWJSZXNvdXJjZUxvYWRTY2hlZHVsZXI6Okhvc3RJbmZv
cm1hdGlvbjo6cmVxdWVzdHNQZW5kaW5nKToKKyAgICAgICAgKFdlYkNvcmU6OlJlc291cmNlTG9h
ZFNjaGVkdWxlcjo6aXNTZXJpYWxMb2FkaW5nRW5hYmxlZCk6IERlbGV0ZWQuCisgICAgICAgIChX
ZWJDb3JlOjpSZXNvdXJjZUxvYWRTY2hlZHVsZXI6OnNldFNlcmlhbExvYWRpbmdFbmFibGVkKTog
RGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OlJlc291cmNlTG9hZFNjaGVkdWxlcjo6U3VzcGVu
ZGVyOjpTdXNwZW5kZXIpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6UmVzb3VyY2VMb2Fk
U2NoZWR1bGVyOjpTdXNwZW5kZXI6On5TdXNwZW5kZXIpOiBEZWxldGVkLgorICAgICAgICAoV2Vi
Q29yZTo6UmVzb3VyY2VMb2FkU2NoZWR1bGVyOjpIb3N0SW5mb3JtYXRpb246Om5hbWUpOiBEZWxl
dGVkLgorICAgICAgICAoV2ViQ29yZTo6UmVzb3VyY2VMb2FkU2NoZWR1bGVyOjpIb3N0SW5mb3Jt
YXRpb246OnJlcXVlc3RzUGVuZGluZyk6IERlbGV0ZWQuCisgICAgICAgICogV2ViS2l0Lnhjb2Rl
cHJvai9wcm9qZWN0LnBieHByb2o6CisKIDIwMTUtMTAtMjkgIEFsZXggQ2hyaXN0ZW5zZW4gIDxh
Y2hyaXN0ZW5zZW5Ad2Via2l0Lm9yZz4KIAogICAgICAgICBNYWtlIFdlYkNvcmUgYSBmcmFtZXdv
cmsgaW4gTWFjIENNYWtlIGJ1aWxkCkluZGV4OiBTb3VyY2UvV2ViS2l0L1dlYkNvcmVTdXBwb3J0
L1dlYlJlc291cmNlTG9hZFNjaGVkdWxlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktp
dC9XZWJDb3JlU3VwcG9ydC9XZWJSZXNvdXJjZUxvYWRTY2hlZHVsZXIuY3BwCShyZXZpc2lvbiAx
OTI4ODApCShmcm9tIFNvdXJjZS9XZWJDb3JlL2xvYWRlci9SZXNvdXJjZUxvYWRTY2hlZHVsZXIu
Y3BwOjE5Mjg4MCkKKysrIFNvdXJjZS9XZWJLaXQvV2ViQ29yZVN1cHBvcnQvV2ViUmVzb3VyY2VM
b2FkU2NoZWR1bGVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDM5MiBAQAorLyoKKyAg
ICBDb3B5cmlnaHQgKEMpIDE5OTggTGFycyBLbm9sbCAoa25vbGxAbXBpLWhkLm1wZy5kZSkKKyAg
ICBDb3B5cmlnaHQgKEMpIDIwMDEgRGlyayBNdWVsbGVyIChtdWVsbGVyQGtkZS5vcmcpCisgICAg
Q29weXJpZ2h0IChDKSAyMDAyIFdhbGRvIEJhc3RpYW4gKGJhc3RpYW5Aa2RlLm9yZykKKyAgICBD
b3B5cmlnaHQgKEMpIDIwMDYgU2FtdWVsIFdlaW5pZyAoc2FtLndlaW5pZ0BnbWFpbC5jb20pCisg
ICAgQ29weXJpZ2h0IChDKSAyMDA0LCAyMDA1LCAyMDA2LCAyMDA3LCAyMDA4IEFwcGxlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAgICBDb3B5cmlnaHQgKEMpIDIwMTAgR29vZ2xlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KKworICAgIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJl
OyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAgICBtb2RpZnkgaXQgdW5kZXIgdGhl
IHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworICAgIExpY2Vuc2UgYXMg
cHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICAgIHZl
cnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVy
c2lvbi4KKworICAgIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0
IGl0IHdpbGwgYmUgdXNlZnVsLAorICAgIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91
dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJ
VE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAgICBMaWJyYXJ5
IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKworICAgIFlvdSBzaG91
bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGlj
IExpY2Vuc2UKKyAgICBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJ
TkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bworICAgIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRp
b24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCisgICAgQm9zdG9uLCBN
QSAwMjExMC0xMzAxLCBVU0EuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUg
IlJlc291cmNlTG9hZFNjaGVkdWxlci5oIgorCisjaW5jbHVkZSAiRG9jdW1lbnQuaCIKKyNpbmNs
dWRlICJEb2N1bWVudExvYWRlci5oIgorI2luY2x1ZGUgIkZyYW1lLmgiCisjaW5jbHVkZSAiRnJh
bWVMb2FkZXIuaCIKKyNpbmNsdWRlICJMb2FkZXJTdHJhdGVneS5oIgorI2luY2x1ZGUgIkxvZ2dp
bmcuaCIKKyNpbmNsdWRlICJOZXRzY2FwZVBsdWdJblN0cmVhbUxvYWRlci5oIgorI2luY2x1ZGUg
IlBsYXRmb3JtU3RyYXRlZ2llcy5oIgorI2luY2x1ZGUgIlJlc291cmNlTG9hZGVyLmgiCisjaW5j
bHVkZSAiUmVzb3VyY2VSZXF1ZXN0LmgiCisjaW5jbHVkZSAiU3VicmVzb3VyY2VMb2FkZXIuaCIK
KyNpbmNsdWRlICJVUkwuaCIKKyNpbmNsdWRlIDx3dGYvTWFpblRocmVhZC5oPgorI2luY2x1ZGUg
PHd0Zi9UZW1wb3JhcnlDaGFuZ2UuaD4KKyNpbmNsdWRlIDx3dGYvdGV4dC9DU3RyaW5nLmg+CisK
KyNpZiBQTEFURk9STShJT1MpCisjaW5jbHVkZSA8UnVudGltZUFwcGxpY2F0aW9uQ2hlY2tzSU9T
Lmg+CisjZW5kaWYKKworI2lmIFVTRShRVUlDS19MT09LKQorI2luY2x1ZGUgIlF1aWNrTG9vay5o
IgorI2VuZGlmCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworLy8gTWF0Y2ggdGhlIHBhcmFsbGVs
IGNvbm5lY3Rpb24gY291bnQgdXNlZCBieSB0aGUgbmV0d29ya2luZyBsYXllci4KK3N0YXRpYyB1
bnNpZ25lZCBtYXhSZXF1ZXN0c0luRmxpZ2h0UGVySG9zdDsKKyNpZiAhUExBVEZPUk0oSU9TKQor
c3RhdGljIGNvbnN0IHVuc2lnbmVkIG1heFJlcXVlc3RzSW5GbGlnaHRGb3JOb25IVFRQUHJvdG9j
b2xzID0gMjA7CisjZWxzZQorLy8gTGltaXRpbmcgdGhpcyBzZWVtcyB0byByZWdyZXNzIHBlcmZv
cm1hbmNlIGluIHNvbWUgbG9jYWwgY2FzZXMgc28gbGV0J3MganVzdCBtYWtlIGl0IGxhcmdlLgor
c3RhdGljIGNvbnN0IHVuc2lnbmVkIG1heFJlcXVlc3RzSW5GbGlnaHRGb3JOb25IVFRQUHJvdG9j
b2xzID0gMTAwMDA7CisjZW5kaWYKKworUmVzb3VyY2VMb2FkU2NoZWR1bGVyOjpIb3N0SW5mb3Jt
YXRpb24qIFJlc291cmNlTG9hZFNjaGVkdWxlcjo6aG9zdEZvclVSTChjb25zdCBVUkwmIHVybCwg
Q3JlYXRlSG9zdFBvbGljeSBjcmVhdGVIb3N0UG9saWN5KQoreworICAgIGlmICghdXJsLnByb3Rv
Y29sSXNJbkhUVFBGYW1pbHkoKSkKKyAgICAgICAgcmV0dXJuIG1fbm9uSFRUUFByb3RvY29sSG9z
dDsKKworICAgIG1faG9zdHMuY2hlY2tDb25zaXN0ZW5jeSgpOworICAgIFN0cmluZyBob3N0TmFt
ZSA9IHVybC5ob3N0KCk7CisgICAgSG9zdEluZm9ybWF0aW9uKiBob3N0ID0gbV9ob3N0cy5nZXQo
aG9zdE5hbWUpOworICAgIGlmICghaG9zdCAmJiBjcmVhdGVIb3N0UG9saWN5ID09IENyZWF0ZUlm
Tm90Rm91bmQpIHsKKyAgICAgICAgaG9zdCA9IG5ldyBIb3N0SW5mb3JtYXRpb24oaG9zdE5hbWUs
IG1heFJlcXVlc3RzSW5GbGlnaHRQZXJIb3N0KTsKKyAgICAgICAgbV9ob3N0cy5hZGQoaG9zdE5h
bWUsIGhvc3QpOworICAgIH0KKyAgICByZXR1cm4gaG9zdDsKK30KKworUmVzb3VyY2VMb2FkU2No
ZWR1bGVyKiByZXNvdXJjZUxvYWRTY2hlZHVsZXIoKQoreworICAgIEFTU0VSVChpc01haW5UaHJl
YWQoKSk7CisgICAgc3RhdGljIFJlc291cmNlTG9hZFNjaGVkdWxlciogZ2xvYmFsU2NoZWR1bGVy
ID0gbnVsbHB0cjsKKyAgICAKKyAgICBpZiAoIWdsb2JhbFNjaGVkdWxlcikgeworICAgICAgICBz
dGF0aWMgYm9vbCBpc0NhbGxpbmdPdXRUb1N0cmF0ZWd5ID0gZmFsc2U7CisgICAgICAgIAorICAg
ICAgICAvLyBJZiB3ZSdyZSByZS1lbnRlcmluZyByZXNvdXJjZUxvYWRTY2hlZHVsZXIoKSB3aGls
ZSBjYWxsaW5nIG91dCB0byB0aGUgTG9hZGVyU3RyYXRlZ3ksCisgICAgICAgIC8vIHRoZW4gdGhl
IExvYWRlclN0cmF0ZWd5IGlzIHRyeWluZyB0byB1c2UgdGhlIGRlZmF1bHQgcmVzb3VyY2VMb2Fk
U2NoZWR1bGVyLgorICAgICAgICAvLyBTbyB3ZSdsbCBjcmVhdGUgaXQgaGVyZSBhbmQgc3RhcnQg
dXNpbmcgaXQuCisgICAgICAgIGlmIChpc0NhbGxpbmdPdXRUb1N0cmF0ZWd5KSB7CisgICAgICAg
ICAgICBnbG9iYWxTY2hlZHVsZXIgPSBuZXcgUmVzb3VyY2VMb2FkU2NoZWR1bGVyOworICAgICAg
ICAgICAgcmV0dXJuIGdsb2JhbFNjaGVkdWxlcjsKKyAgICAgICAgfQorICAgICAgICAKKyAgICAg
ICAgVGVtcG9yYXJ5Q2hhbmdlPGJvb2w+IHJlY3Vyc2lvbkd1YXJkKGlzQ2FsbGluZ091dFRvU3Ry
YXRlZ3ksIHRydWUpOworICAgICAgICBnbG9iYWxTY2hlZHVsZXIgPSBwbGF0Zm9ybVN0cmF0ZWdp
ZXMoKS0+bG9hZGVyU3RyYXRlZ3koKS0+cmVzb3VyY2VMb2FkU2NoZWR1bGVyKCk7CisgICAgfQor
CisgICAgcmV0dXJuIGdsb2JhbFNjaGVkdWxlcjsKK30KKworUmVzb3VyY2VMb2FkU2NoZWR1bGVy
OjpSZXNvdXJjZUxvYWRTY2hlZHVsZXIoKQorICAgIDogbV9ub25IVFRQUHJvdG9jb2xIb3N0KG5l
dyBIb3N0SW5mb3JtYXRpb24oU3RyaW5nKCksIG1heFJlcXVlc3RzSW5GbGlnaHRGb3JOb25IVFRQ
UHJvdG9jb2xzKSkKKyAgICAsIG1fcmVxdWVzdFRpbWVyKCp0aGlzLCAmUmVzb3VyY2VMb2FkU2No
ZWR1bGVyOjpyZXF1ZXN0VGltZXJGaXJlZCkKKyAgICAsIG1fc3VzcGVuZFBlbmRpbmdSZXF1ZXN0
c0NvdW50KDApCisgICAgLCBtX2lzU2VyaWFsTG9hZGluZ0VuYWJsZWQoZmFsc2UpCit7CisgICAg
bWF4UmVxdWVzdHNJbkZsaWdodFBlckhvc3QgPSBpbml0aWFsaXplTWF4aW11bUhUVFBDb25uZWN0
aW9uQ291bnRQZXJIb3N0KCk7Cit9CisKK1Jlc291cmNlTG9hZFNjaGVkdWxlcjo6flJlc291cmNl
TG9hZFNjaGVkdWxlcigpCit7Cit9CisKK1JlZlB0cjxTdWJyZXNvdXJjZUxvYWRlcj4gUmVzb3Vy
Y2VMb2FkU2NoZWR1bGVyOjpzY2hlZHVsZVN1YnJlc291cmNlTG9hZChGcmFtZSogZnJhbWUsIENh
Y2hlZFJlc291cmNlKiByZXNvdXJjZSwgY29uc3QgUmVzb3VyY2VSZXF1ZXN0JiByZXF1ZXN0LCBj
b25zdCBSZXNvdXJjZUxvYWRlck9wdGlvbnMmIG9wdGlvbnMpCit7CisgICAgUmVmUHRyPFN1YnJl
c291cmNlTG9hZGVyPiBsb2FkZXIgPSBTdWJyZXNvdXJjZUxvYWRlcjo6Y3JlYXRlKGZyYW1lLCBy
ZXNvdXJjZSwgcmVxdWVzdCwgb3B0aW9ucyk7CisgICAgaWYgKGxvYWRlcikKKyAgICAgICAgc2No
ZWR1bGVMb2FkKGxvYWRlci5nZXQoKSk7CisjaWYgUExBVEZPUk0oSU9TKQorICAgIC8vIFNpbmNl
IHdlIGRlZmVyIGxvYWRlciBpbml0aWFsaXphdGlvbiB1bnRpbCBzY2hlZHVsaW5nIG9uIGlPUywg
dGhlIGZyYW1lCisgICAgLy8gbG9hZCBkZWxlZ2F0ZSB0aGF0IHdvdWxkIGJlIGNhbGxlZCBpbiBT
dWJyZXNvdXJjZUxvYWRlcjo6Y3JlYXRlKCkgb24KKyAgICAvLyBvdGhlciBwb3J0cyBtaWdodCBi
ZSBjYWxsZWQgaW4gc2NoZWR1bGVMb2FkKCkgaW5zdGVhZC4gT3VyIGNvbnRyYWN0IHRvCisgICAg
Ly8gY2FsbGVycyBvZiB0aGlzIG1ldGhvZCBpcyB0aGF0IGEgbnVsbCBsb2FkZXIgaXMgcmV0dXJu
ZWQgaWYgdGhlIGxvYWQgd2FzCisgICAgLy8gY2FuY2VsbGVkIGJ5IGEgZnJhbWUgbG9hZCBkZWxl
Z2F0ZS4KKyAgICBpZiAoIWxvYWRlciB8fCBsb2FkZXItPnJlYWNoZWRUZXJtaW5hbFN0YXRlKCkp
CisgICAgICAgIHJldHVybiBudWxscHRyOworI2VuZGlmCisgICAgcmV0dXJuIGxvYWRlcjsKK30K
KworUmVmUHRyPE5ldHNjYXBlUGx1Z0luU3RyZWFtTG9hZGVyPiBSZXNvdXJjZUxvYWRTY2hlZHVs
ZXI6OnNjaGVkdWxlUGx1Z2luU3RyZWFtTG9hZChGcmFtZSogZnJhbWUsIE5ldHNjYXBlUGx1Z0lu
U3RyZWFtTG9hZGVyQ2xpZW50KiBjbGllbnQsIGNvbnN0IFJlc291cmNlUmVxdWVzdCYgcmVxdWVz
dCkKK3sKKyAgICBSZWZQdHI8TmV0c2NhcGVQbHVnSW5TdHJlYW1Mb2FkZXI+IGxvYWRlciA9IE5l
dHNjYXBlUGx1Z0luU3RyZWFtTG9hZGVyOjpjcmVhdGUoZnJhbWUsIGNsaWVudCwgcmVxdWVzdCk7
CisgICAgaWYgKGxvYWRlcikKKyAgICAgICAgc2NoZWR1bGVMb2FkKGxvYWRlci5nZXQoKSk7Cisg
ICAgcmV0dXJuIGxvYWRlcjsKK30KKwordm9pZCBSZXNvdXJjZUxvYWRTY2hlZHVsZXI6OnNjaGVk
dWxlTG9hZChSZXNvdXJjZUxvYWRlciogcmVzb3VyY2VMb2FkZXIpCit7CisgICAgQVNTRVJUKHJl
c291cmNlTG9hZGVyKTsKKworICAgIExPRyhSZXNvdXJjZUxvYWRpbmcsICJSZXNvdXJjZUxvYWRT
Y2hlZHVsZXI6OmxvYWQgcmVzb3VyY2UgJXAgJyVzJyIsIHJlc291cmNlTG9hZGVyLCByZXNvdXJj
ZUxvYWRlci0+dXJsKCkuc3RyaW5nKCkubGF0aW4xKCkuZGF0YSgpKTsKKworI2lmIFBMQVRGT1JN
KElPUykKKyAgICAvLyBJZiB0aGVyZSdzIGEgd2ViIGFyY2hpdmUgcmVzb3VyY2UgZm9yIHRoaXMg
VVJMLCB3ZSBkb24ndCBuZWVkIHRvIHNjaGVkdWxlIHRoZSBsb2FkIHNpbmNlIGl0IHdpbGwgbmV2
ZXIgdG91Y2ggdGhlIG5ldHdvcmsuCisgICAgaWYgKCFpc1N1c3BlbmRpbmdQZW5kaW5nUmVxdWVz
dHMoKSAmJiByZXNvdXJjZUxvYWRlci0+ZG9jdW1lbnRMb2FkZXIoKS0+YXJjaGl2ZVJlc291cmNl
Rm9yVVJMKHJlc291cmNlTG9hZGVyLT5pT1NPcmlnaW5hbFJlcXVlc3QoKS51cmwoKSkpIHsKKyAg
ICAgICAgcmVzb3VyY2VMb2FkZXItPnN0YXJ0TG9hZGluZygpOworICAgICAgICByZXR1cm47Cisg
ICAgfQorI2Vsc2UKKyAgICBpZiAocmVzb3VyY2VMb2FkZXItPmRvY3VtZW50TG9hZGVyKCktPmFy
Y2hpdmVSZXNvdXJjZUZvclVSTChyZXNvdXJjZUxvYWRlci0+cmVxdWVzdCgpLnVybCgpKSkgewor
ICAgICAgICByZXNvdXJjZUxvYWRlci0+c3RhcnQoKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0K
KyNlbmRpZgorCisjaWYgUExBVEZPUk0oSU9TKQorICAgIEhvc3RJbmZvcm1hdGlvbiogaG9zdCA9
IGhvc3RGb3JVUkwocmVzb3VyY2VMb2FkZXItPmlPU09yaWdpbmFsUmVxdWVzdCgpLnVybCgpLCBD
cmVhdGVJZk5vdEZvdW5kKTsKKyNlbHNlCisgICAgSG9zdEluZm9ybWF0aW9uKiBob3N0ID0gaG9z
dEZvclVSTChyZXNvdXJjZUxvYWRlci0+dXJsKCksIENyZWF0ZUlmTm90Rm91bmQpOworI2VuZGlm
CisKKyAgICBSZXNvdXJjZUxvYWRQcmlvcml0eSBwcmlvcml0eSA9IHJlc291cmNlTG9hZGVyLT5y
ZXF1ZXN0KCkucHJpb3JpdHkoKTsKKworICAgIGJvb2wgaGFkUmVxdWVzdHMgPSBob3N0LT5oYXNS
ZXF1ZXN0cygpOworICAgIGhvc3QtPnNjaGVkdWxlKHJlc291cmNlTG9hZGVyLCBwcmlvcml0eSk7
CisKKyNpZiBQTEFURk9STShDT0NPQSkgfHwgVVNFKENGTkVUV09SSykKKyAgICBpZiAoUmVzb3Vy
Y2VSZXF1ZXN0OjpyZXNvdXJjZVByaW9yaXRpZXNFbmFibGVkKCkgJiYgIWlzU3VzcGVuZGluZ1Bl
bmRpbmdSZXF1ZXN0cygpKSB7CisgICAgICAgIC8vIFNlcnZlIGFsbCByZXF1ZXN0cyBhdCBvbmNl
IHRvIGtlZXAgdGhlIHBpcGVsaW5lIGZ1bGwgYXQgdGhlIG5ldHdvcmsgbGF5ZXIuCisgICAgICAg
IC8vIEZJWE1FOiBEb2VzIHRoaXMgY29kZSBkbyBhbnl0aGluZyB1c2VmdWwsIGdpdmVuIHRoYXQg
d2UgYWxzbyBzZXQgbWF4UmVxdWVzdHNJbkZsaWdodFBlckhvc3QgdG8gZWZmZWN0aXZlbHkgdW5s
aW1pdGVkIG9uIHRoZXNlIHBsYXRmb3Jtcz8KKyAgICAgICAgc2VydmVQZW5kaW5nUmVxdWVzdHMo
aG9zdCwgUmVzb3VyY2VMb2FkUHJpb3JpdHk6OlZlcnlMb3cpOworICAgICAgICByZXR1cm47Cisg
ICAgfQorI2VuZGlmCisKKyNpZiBQTEFURk9STShJT1MpCisgICAgaWYgKChwcmlvcml0eSA+IFJl
c291cmNlTG9hZFByaW9yaXR5OjpMb3cgfHwgIXJlc291cmNlTG9hZGVyLT5pT1NPcmlnaW5hbFJl
cXVlc3QoKS51cmwoKS5wcm90b2NvbElzSW5IVFRQRmFtaWx5KCkgfHwgKHByaW9yaXR5ID09IFJl
c291cmNlTG9hZFByaW9yaXR5OjpMb3cgJiYgIWhhZFJlcXVlc3RzKSkgJiYgIWlzU3VzcGVuZGlu
Z1BlbmRpbmdSZXF1ZXN0cygpKSB7CisgICAgICAgIC8vIFRyeSB0byByZXF1ZXN0IGltcG9ydGFu
dCByZXNvdXJjZXMgaW1tZWRpYXRlbHkuCisgICAgICAgIHNlcnZlUGVuZGluZ1JlcXVlc3RzKGhv
c3QsIHByaW9yaXR5KTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyNlbHNlCisgICAgaWYgKHBy
aW9yaXR5ID4gUmVzb3VyY2VMb2FkUHJpb3JpdHk6OkxvdyB8fCAhcmVzb3VyY2VMb2FkZXItPnVy
bCgpLnByb3RvY29sSXNJbkhUVFBGYW1pbHkoKSB8fCAocHJpb3JpdHkgPT0gUmVzb3VyY2VMb2Fk
UHJpb3JpdHk6OkxvdyAmJiAhaGFkUmVxdWVzdHMpKSB7CisgICAgICAgIC8vIFRyeSB0byByZXF1
ZXN0IGltcG9ydGFudCByZXNvdXJjZXMgaW1tZWRpYXRlbHkuCisgICAgICAgIHNlcnZlUGVuZGlu
Z1JlcXVlc3RzKGhvc3QsIHByaW9yaXR5KTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyNlbmRp
ZgorCisgICAgLy8gSGFuZGxlIGFzeW5jaHJvbm91c2x5IHNvIGVhcmx5IGxvdyBwcmlvcml0eSBy
ZXF1ZXN0cyBkb24ndAorICAgIC8vIGdldCBzY2hlZHVsZWQgYmVmb3JlIGxhdGVyIGhpZ2ggcHJp
b3JpdHkgb25lcy4KKyAgICBzY2hlZHVsZVNlcnZlUGVuZGluZ1JlcXVlc3RzKCk7Cit9CisKK3Zv
aWQgUmVzb3VyY2VMb2FkU2NoZWR1bGVyOjpyZW1vdmUoUmVzb3VyY2VMb2FkZXIqIHJlc291cmNl
TG9hZGVyKQoreworICAgIEFTU0VSVChyZXNvdXJjZUxvYWRlcik7CisKKyAgICBIb3N0SW5mb3Jt
YXRpb24qIGhvc3QgPSBob3N0Rm9yVVJMKHJlc291cmNlTG9hZGVyLT51cmwoKSk7CisgICAgaWYg
KGhvc3QpCisgICAgICAgIGhvc3QtPnJlbW92ZShyZXNvdXJjZUxvYWRlcik7CisjaWYgUExBVEZP
Uk0oSU9TKQorICAgIC8vIFJlc291cmNlTG9hZGVyOjp1cmwoKSBkb2Vzbid0IHN0YXJ0IHJldHVy
bmluZyB0aGUgY29ycmVjdCB2YWx1ZSB1bnRpbCB0aGUgbG9hZCBzdGFydHMuIElmIHdlIGdldCBj
YW5jZWxlZCBiZWZvcmUgdGhhdCwgd2UgbmVlZCB0byBsb29rIGZvciBvcmlnaW5hbFJlcXVlc3Qg
dXJsIGluc3RlYWQuCisgICAgLy8gRklYTUU6IFJlc291cmNlTG9hZGVyOjp1cmwoKSBzaG91bGQg
YmUgbWFkZSB0byByZXR1cm4gYSBzZW5zaWJsZSB2YWx1ZSBhdCBhbGwgdGltZXMuCisgICAgaWYg
KCFyZXNvdXJjZUxvYWRlci0+aU9TT3JpZ2luYWxSZXF1ZXN0KCkuaXNOdWxsKCkpIHsKKyAgICAg
ICAgSG9zdEluZm9ybWF0aW9uKiBvcmlnaW5hbEhvc3QgPSBob3N0Rm9yVVJMKHJlc291cmNlTG9h
ZGVyLT5pT1NPcmlnaW5hbFJlcXVlc3QoKS51cmwoKSk7CisgICAgICAgIGlmIChvcmlnaW5hbEhv
c3QgJiYgb3JpZ2luYWxIb3N0ICE9IGhvc3QpCisgICAgICAgICAgICBvcmlnaW5hbEhvc3QtPnJl
bW92ZShyZXNvdXJjZUxvYWRlcik7CisgICAgfQorI2VuZGlmCisgICAgc2NoZWR1bGVTZXJ2ZVBl
bmRpbmdSZXF1ZXN0cygpOworfQorCit2b2lkIFJlc291cmNlTG9hZFNjaGVkdWxlcjo6c2V0RGVm
ZXJzTG9hZGluZyhSZXNvdXJjZUxvYWRlciosIGJvb2wpCit7Cit9CisKK3ZvaWQgUmVzb3VyY2VM
b2FkU2NoZWR1bGVyOjpjcm9zc09yaWdpblJlZGlyZWN0UmVjZWl2ZWQoUmVzb3VyY2VMb2FkZXIq
IHJlc291cmNlTG9hZGVyLCBjb25zdCBVUkwmIHJlZGlyZWN0VVJMKQoreworICAgIEhvc3RJbmZv
cm1hdGlvbiogb2xkSG9zdCA9IGhvc3RGb3JVUkwocmVzb3VyY2VMb2FkZXItPnVybCgpKTsKKyAg
ICBBU1NFUlQob2xkSG9zdCk7CisgICAgaWYgKCFvbGRIb3N0KQorICAgICAgICByZXR1cm47CisK
KyAgICBIb3N0SW5mb3JtYXRpb24qIG5ld0hvc3QgPSBob3N0Rm9yVVJMKHJlZGlyZWN0VVJMLCBD
cmVhdGVJZk5vdEZvdW5kKTsKKworICAgIGlmIChvbGRIb3N0LT5uYW1lKCkgPT0gbmV3SG9zdC0+
bmFtZSgpKQorICAgICAgICByZXR1cm47CisKKyAgICBuZXdIb3N0LT5hZGRMb2FkSW5Qcm9ncmVz
cyhyZXNvdXJjZUxvYWRlcik7CisgICAgb2xkSG9zdC0+cmVtb3ZlKHJlc291cmNlTG9hZGVyKTsK
K30KKwordm9pZCBSZXNvdXJjZUxvYWRTY2hlZHVsZXI6OnNlcnZlUGVuZGluZ1JlcXVlc3RzKFJl
c291cmNlTG9hZFByaW9yaXR5IG1pbmltdW1Qcmlvcml0eSkKK3sKKyAgICBMT0coUmVzb3VyY2VM
b2FkaW5nLCAiUmVzb3VyY2VMb2FkU2NoZWR1bGVyOjpzZXJ2ZVBlbmRpbmdSZXF1ZXN0cy4gbV9z
dXNwZW5kUGVuZGluZ1JlcXVlc3RzQ291bnQ9JWQiLCBtX3N1c3BlbmRQZW5kaW5nUmVxdWVzdHND
b3VudCk7IAorICAgIGlmIChpc1N1c3BlbmRpbmdQZW5kaW5nUmVxdWVzdHMoKSkKKyAgICAgICAg
cmV0dXJuOworCisgICAgbV9yZXF1ZXN0VGltZXIuc3RvcCgpOworICAgIAorICAgIHNlcnZlUGVu
ZGluZ1JlcXVlc3RzKG1fbm9uSFRUUFByb3RvY29sSG9zdCwgbWluaW11bVByaW9yaXR5KTsKKwor
ICAgIFZlY3RvcjxIb3N0SW5mb3JtYXRpb24qPiBob3N0c1RvU2VydmU7CisgICAgY29weVZhbHVl
c1RvVmVjdG9yKG1faG9zdHMsIGhvc3RzVG9TZXJ2ZSk7CisKKyAgICBmb3IgKGF1dG8qIGhvc3Qg
OiBob3N0c1RvU2VydmUpIHsKKyAgICAgICAgaWYgKGhvc3QtPmhhc1JlcXVlc3RzKCkpCisgICAg
ICAgICAgICBzZXJ2ZVBlbmRpbmdSZXF1ZXN0cyhob3N0LCBtaW5pbXVtUHJpb3JpdHkpOworICAg
ICAgICBlbHNlCisgICAgICAgICAgICBkZWxldGUgbV9ob3N0cy50YWtlKGhvc3QtPm5hbWUoKSk7
CisgICAgfQorfQorCit2b2lkIFJlc291cmNlTG9hZFNjaGVkdWxlcjo6c2VydmVQZW5kaW5nUmVx
dWVzdHMoSG9zdEluZm9ybWF0aW9uKiBob3N0LCBSZXNvdXJjZUxvYWRQcmlvcml0eSBtaW5pbXVt
UHJpb3JpdHkpCit7CisgICAgTE9HKFJlc291cmNlTG9hZGluZywgIlJlc291cmNlTG9hZFNjaGVk
dWxlcjo6c2VydmVQZW5kaW5nUmVxdWVzdHMgSG9zdEluZm9ybWF0aW9uLm1fbmFtZT0nJXMnIiwg
aG9zdC0+bmFtZSgpLmxhdGluMSgpLmRhdGEoKSk7CisKKyAgICBhdXRvIHByaW9yaXR5ID0gUmVz
b3VyY2VMb2FkUHJpb3JpdHk6OkhpZ2hlc3Q7CisgICAgd2hpbGUgKHRydWUpIHsKKyAgICAgICAg
YXV0byYgcmVxdWVzdHNQZW5kaW5nID0gaG9zdC0+cmVxdWVzdHNQZW5kaW5nKHByaW9yaXR5KTsK
KyAgICAgICAgd2hpbGUgKCFyZXF1ZXN0c1BlbmRpbmcuaXNFbXB0eSgpKSB7CisgICAgICAgICAg
ICBSZWZQdHI8UmVzb3VyY2VMb2FkZXI+IHJlc291cmNlTG9hZGVyID0gcmVxdWVzdHNQZW5kaW5n
LmZpcnN0KCk7CisKKyAgICAgICAgICAgIC8vIEZvciBuYW1lZCBob3N0cyAtIHdoaWNoIGFyZSBv
bmx5IGh0dHAocykgaG9zdHMgLSB3ZSBzaG91bGQgYWx3YXlzIGVuZm9yY2UgdGhlIGNvbm5lY3Rp
b24gbGltaXQuCisgICAgICAgICAgICAvLyBGb3Igbm9uLW5hbWVkIGhvc3RzIC0gZXZlcnl0aGlu
ZyBidXQgaHR0cChzKSAtIHdlIHNob3VsZCBvbmx5IGVuZm9yY2UgdGhlIGxpbWl0IGlmIHRoZSBk
b2N1bWVudCBpc24ndCBkb25lIHBhcnNpbmcgCisgICAgICAgICAgICAvLyBhbmQgd2UgZG9uJ3Qg
a25vdyBhbGwgc3R5bGVzaGVldHMgeWV0LgorICAgICAgICAgICAgRG9jdW1lbnQqIGRvY3VtZW50
ID0gcmVzb3VyY2VMb2FkZXItPmZyYW1lTG9hZGVyKCkgPyByZXNvdXJjZUxvYWRlci0+ZnJhbWVM
b2FkZXIoKS0+ZnJhbWUoKS5kb2N1bWVudCgpIDogMDsKKyAgICAgICAgICAgIGJvb2wgc2hvdWxk
TGltaXRSZXF1ZXN0cyA9ICFob3N0LT5uYW1lKCkuaXNOdWxsKCkgfHwgKGRvY3VtZW50ICYmIChk
b2N1bWVudC0+cGFyc2luZygpIHx8ICFkb2N1bWVudC0+aGF2ZVN0eWxlc2hlZXRzTG9hZGVkKCkp
KTsKKyAgICAgICAgICAgIGlmIChzaG91bGRMaW1pdFJlcXVlc3RzICYmIGhvc3QtPmxpbWl0UmVx
dWVzdHMocHJpb3JpdHkpKQorICAgICAgICAgICAgICAgIHJldHVybjsKKworICAgICAgICAgICAg
cmVxdWVzdHNQZW5kaW5nLnJlbW92ZUZpcnN0KCk7CisgICAgICAgICAgICBob3N0LT5hZGRMb2Fk
SW5Qcm9ncmVzcyhyZXNvdXJjZUxvYWRlci5nZXQoKSk7CisjaWYgUExBVEZPUk0oSU9TKQorICAg
ICAgICAgICAgaWYgKCFhcHBsaWNhdGlvbklzV2ViUHJvY2VzcygpKSB7CisgICAgICAgICAgICAg
ICAgcmVzb3VyY2VMb2FkZXItPnN0YXJ0TG9hZGluZygpOworICAgICAgICAgICAgICAgIHJldHVy
bjsKKyAgICAgICAgICAgIH0KKyNlbmRpZgorICAgICAgICAgICAgcmVzb3VyY2VMb2FkZXItPnN0
YXJ0KCk7CisgICAgICAgIH0KKyAgICAgICAgaWYgKHByaW9yaXR5ID09IG1pbmltdW1Qcmlvcml0
eSkKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgLS1wcmlvcml0eTsKKyAgICB9Cit9CisK
K3ZvaWQgUmVzb3VyY2VMb2FkU2NoZWR1bGVyOjpzdXNwZW5kUGVuZGluZ1JlcXVlc3RzKCkKK3sK
KyAgICArK21fc3VzcGVuZFBlbmRpbmdSZXF1ZXN0c0NvdW50OworfQorCit2b2lkIFJlc291cmNl
TG9hZFNjaGVkdWxlcjo6cmVzdW1lUGVuZGluZ1JlcXVlc3RzKCkKK3sKKyAgICBBU1NFUlQobV9z
dXNwZW5kUGVuZGluZ1JlcXVlc3RzQ291bnQpOworICAgIC0tbV9zdXNwZW5kUGVuZGluZ1JlcXVl
c3RzQ291bnQ7CisgICAgaWYgKG1fc3VzcGVuZFBlbmRpbmdSZXF1ZXN0c0NvdW50KQorICAgICAg
ICByZXR1cm47CisgICAgaWYgKCFtX2hvc3RzLmlzRW1wdHkoKSB8fCBtX25vbkhUVFBQcm90b2Nv
bEhvc3QtPmhhc1JlcXVlc3RzKCkpCisgICAgICAgIHNjaGVkdWxlU2VydmVQZW5kaW5nUmVxdWVz
dHMoKTsKK30KKyAgICAKK3ZvaWQgUmVzb3VyY2VMb2FkU2NoZWR1bGVyOjpzY2hlZHVsZVNlcnZl
UGVuZGluZ1JlcXVlc3RzKCkKK3sKKyAgICBMT0coUmVzb3VyY2VMb2FkaW5nLCAiUmVzb3VyY2VM
b2FkU2NoZWR1bGVyOjpzY2hlZHVsZVNlcnZlUGVuZGluZ1JlcXVlc3RzLCBtX3JlcXVlc3RUaW1l
ci5pc0FjdGl2ZSgpPSV1IiwgbV9yZXF1ZXN0VGltZXIuaXNBY3RpdmUoKSk7CisgICAgaWYgKCFt
X3JlcXVlc3RUaW1lci5pc0FjdGl2ZSgpKQorICAgICAgICBtX3JlcXVlc3RUaW1lci5zdGFydE9u
ZVNob3QoMCk7Cit9CisKK3ZvaWQgUmVzb3VyY2VMb2FkU2NoZWR1bGVyOjpyZXF1ZXN0VGltZXJG
aXJlZCgpCit7CisgICAgTE9HKFJlc291cmNlTG9hZGluZywgIlJlc291cmNlTG9hZFNjaGVkdWxl
cjo6cmVxdWVzdFRpbWVyRmlyZWRcbiIpOworICAgIHNlcnZlUGVuZGluZ1JlcXVlc3RzKCk7Cit9
CisKK1Jlc291cmNlTG9hZFNjaGVkdWxlcjo6SG9zdEluZm9ybWF0aW9uOjpIb3N0SW5mb3JtYXRp
b24oY29uc3QgU3RyaW5nJiBuYW1lLCB1bnNpZ25lZCBtYXhSZXF1ZXN0c0luRmxpZ2h0KQorICAg
IDogbV9uYW1lKG5hbWUpCisgICAgLCBtX21heFJlcXVlc3RzSW5GbGlnaHQobWF4UmVxdWVzdHNJ
bkZsaWdodCkKK3sKK30KKworUmVzb3VyY2VMb2FkU2NoZWR1bGVyOjpIb3N0SW5mb3JtYXRpb246
On5Ib3N0SW5mb3JtYXRpb24oKQoreworICAgIEFTU0VSVCghaGFzUmVxdWVzdHMoKSk7Cit9CisK
K3Vuc2lnbmVkIFJlc291cmNlTG9hZFNjaGVkdWxlcjo6SG9zdEluZm9ybWF0aW9uOjpwcmlvcml0
eVRvSW5kZXgoUmVzb3VyY2VMb2FkUHJpb3JpdHkgcHJpb3JpdHkpCit7CisgICAgc3dpdGNoIChw
cmlvcml0eSkgeworICAgIGNhc2UgUmVzb3VyY2VMb2FkUHJpb3JpdHk6OlZlcnlMb3c6CisgICAg
ICAgIHJldHVybiAwOworICAgIGNhc2UgUmVzb3VyY2VMb2FkUHJpb3JpdHk6OkxvdzoKKyAgICAg
ICAgcmV0dXJuIDE7CisgICAgY2FzZSBSZXNvdXJjZUxvYWRQcmlvcml0eTo6TWVkaXVtOgorICAg
ICAgICByZXR1cm4gMjsKKyAgICBjYXNlIFJlc291cmNlTG9hZFByaW9yaXR5OjpIaWdoOgorICAg
ICAgICByZXR1cm4gMzsKKyAgICBjYXNlIFJlc291cmNlTG9hZFByaW9yaXR5OjpWZXJ5SGlnaDoK
KyAgICAgICAgcmV0dXJuIDQ7CisgICAgfQorICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAg
IHJldHVybiAwOworfQorCit2b2lkIFJlc291cmNlTG9hZFNjaGVkdWxlcjo6SG9zdEluZm9ybWF0
aW9uOjpzY2hlZHVsZShSZXNvdXJjZUxvYWRlciogcmVzb3VyY2VMb2FkZXIsIFJlc291cmNlTG9h
ZFByaW9yaXR5IHByaW9yaXR5KQoreworICAgIG1fcmVxdWVzdHNQZW5kaW5nW3ByaW9yaXR5VG9J
bmRleChwcmlvcml0eSldLmFwcGVuZChyZXNvdXJjZUxvYWRlcik7Cit9CisgICAgCit2b2lkIFJl
c291cmNlTG9hZFNjaGVkdWxlcjo6SG9zdEluZm9ybWF0aW9uOjphZGRMb2FkSW5Qcm9ncmVzcyhS
ZXNvdXJjZUxvYWRlciogcmVzb3VyY2VMb2FkZXIpCit7CisgICAgTE9HKFJlc291cmNlTG9hZGlu
ZywgIkhvc3RJbmZvcm1hdGlvbiAnJXMnIGxvYWRpbmcgJyVzJy4gQ3VycmVudCBjb3VudCAlZCIs
IG1fbmFtZS5sYXRpbjEoKS5kYXRhKCksIHJlc291cmNlTG9hZGVyLT51cmwoKS5zdHJpbmcoKS5s
YXRpbjEoKS5kYXRhKCksIG1fcmVxdWVzdHNMb2FkaW5nLnNpemUoKSk7CisgICAgbV9yZXF1ZXN0
c0xvYWRpbmcuYWRkKHJlc291cmNlTG9hZGVyKTsKK30KKyAgICAKK3ZvaWQgUmVzb3VyY2VMb2Fk
U2NoZWR1bGVyOjpIb3N0SW5mb3JtYXRpb246OnJlbW92ZShSZXNvdXJjZUxvYWRlciogcmVzb3Vy
Y2VMb2FkZXIpCit7CisgICAgaWYgKG1fcmVxdWVzdHNMb2FkaW5nLnJlbW92ZShyZXNvdXJjZUxv
YWRlcikpCisgICAgICAgIHJldHVybjsKKyAgICAKKyAgICBmb3IgKGF1dG8mIHJlcXVlc3RRdWV1
ZSA6IG1fcmVxdWVzdHNQZW5kaW5nKSB7CisgICAgICAgIGZvciAoYXV0byBpdCA9IHJlcXVlc3RR
dWV1ZS5iZWdpbigpLCBlbmQgPSByZXF1ZXN0UXVldWUuZW5kKCk7IGl0ICE9IGVuZDsgKytpdCkg
eworICAgICAgICAgICAgaWYgKCppdCA9PSByZXNvdXJjZUxvYWRlcikgeworICAgICAgICAgICAg
ICAgIHJlcXVlc3RRdWV1ZS5yZW1vdmUoaXQpOworICAgICAgICAgICAgICAgIHJldHVybjsKKyAg
ICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KK30KKworYm9vbCBSZXNvdXJjZUxvYWRTY2hl
ZHVsZXI6Okhvc3RJbmZvcm1hdGlvbjo6aGFzUmVxdWVzdHMoKSBjb25zdAoreworICAgIGlmICgh
bV9yZXF1ZXN0c0xvYWRpbmcuaXNFbXB0eSgpKQorICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICBm
b3IgKGF1dG8mIHJlcXVlc3RRdWV1ZSA6IG1fcmVxdWVzdHNQZW5kaW5nKSB7CisgICAgICAgIGlm
ICghcmVxdWVzdFF1ZXVlLmlzRW1wdHkoKSkKKyAgICAgICAgICAgIHJldHVybiB0cnVlOworICAg
IH0KKyAgICByZXR1cm4gZmFsc2U7Cit9CisKK2Jvb2wgUmVzb3VyY2VMb2FkU2NoZWR1bGVyOjpI
b3N0SW5mb3JtYXRpb246OmxpbWl0UmVxdWVzdHMoUmVzb3VyY2VMb2FkUHJpb3JpdHkgcHJpb3Jp
dHkpIGNvbnN0IAoreworICAgIGlmIChwcmlvcml0eSA9PSBSZXNvdXJjZUxvYWRQcmlvcml0eTo6
VmVyeUxvdyAmJiAhbV9yZXF1ZXN0c0xvYWRpbmcuaXNFbXB0eSgpKQorICAgICAgICByZXR1cm4g
dHJ1ZTsKKyAgICByZXR1cm4gbV9yZXF1ZXN0c0xvYWRpbmcuc2l6ZSgpID49IChyZXNvdXJjZUxv
YWRTY2hlZHVsZXIoKS0+aXNTZXJpYWxMb2FkaW5nRW5hYmxlZCgpID8gMSA6IG1fbWF4UmVxdWVz
dHNJbkZsaWdodCk7Cit9CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKSW5kZXg6IFNvdXJjZS9X
ZWJLaXQvV2ViQ29yZVN1cHBvcnQvV2ViUmVzb3VyY2VMb2FkU2NoZWR1bGVyLmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvV2ViS2l0L1dlYkNvcmVTdXBwb3J0L1dlYlJlc291cmNlTG9hZFNjaGVk
dWxlci5jcHAJKHdvcmtpbmcgY29weSkKKysrIFNvdXJjZS9XZWJLaXQvV2ViQ29yZVN1cHBvcnQv
V2ViUmVzb3VyY2VMb2FkU2NoZWR1bGVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMyw3ICszLDcg
QEAKICAgICBDb3B5cmlnaHQgKEMpIDIwMDEgRGlyayBNdWVsbGVyIChtdWVsbGVyQGtkZS5vcmcp
CiAgICAgQ29weXJpZ2h0IChDKSAyMDAyIFdhbGRvIEJhc3RpYW4gKGJhc3RpYW5Aa2RlLm9yZykK
ICAgICBDb3B5cmlnaHQgKEMpIDIwMDYgU2FtdWVsIFdlaW5pZyAoc2FtLndlaW5pZ0BnbWFpbC5j
b20pCi0gICAgQ29weXJpZ2h0IChDKSAyMDA0LCAyMDA1LCAyMDA2LCAyMDA3LCAyMDA4IEFwcGxl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAgICBDb3B5cmlnaHQgKEMpIDIwMDQtMjAwOCwg
MjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgICAgQ29weXJpZ2h0IChDKSAy
MDEwIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAKICAgICBUaGlzIGxpYnJhcnkg
aXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCkBAIC0yMiwz
NSArMjIsMzIgQEAKICAgICBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KICAqLwogCi0jaW5j
bHVkZSAiY29uZmlnLmgiCi0jaW5jbHVkZSAiUmVzb3VyY2VMb2FkU2NoZWR1bGVyLmgiCisjaW5j
bHVkZSAiV2ViUmVzb3VyY2VMb2FkU2NoZWR1bGVyLmgiCiAKLSNpbmNsdWRlICJEb2N1bWVudC5o
IgotI2luY2x1ZGUgIkRvY3VtZW50TG9hZGVyLmgiCi0jaW5jbHVkZSAiRnJhbWUuaCIKLSNpbmNs
dWRlICJGcmFtZUxvYWRlci5oIgotI2luY2x1ZGUgIkxvYWRlclN0cmF0ZWd5LmgiCi0jaW5jbHVk
ZSAiTG9nZ2luZy5oIgotI2luY2x1ZGUgIk5ldHNjYXBlUGx1Z0luU3RyZWFtTG9hZGVyLmgiCi0j
aW5jbHVkZSAiUGxhdGZvcm1TdHJhdGVnaWVzLmgiCi0jaW5jbHVkZSAiUmVzb3VyY2VMb2FkZXIu
aCIKLSNpbmNsdWRlICJSZXNvdXJjZVJlcXVlc3QuaCIKLSNpbmNsdWRlICJTdWJyZXNvdXJjZUxv
YWRlci5oIgotI2luY2x1ZGUgIlVSTC5oIgorI2luY2x1ZGUgPFdlYkNvcmUvRG9jdW1lbnQuaD4K
KyNpbmNsdWRlIDxXZWJDb3JlL0RvY3VtZW50TG9hZGVyLmg+CisjaW5jbHVkZSA8V2ViQ29yZS9G
cmFtZS5oPgorI2luY2x1ZGUgPFdlYkNvcmUvRnJhbWVMb2FkZXIuaD4KKyNpbmNsdWRlIDxXZWJD
b3JlL0xvZ2dpbmcuaD4KKyNpbmNsdWRlIDxXZWJDb3JlL05ldHNjYXBlUGx1Z0luU3RyZWFtTG9h
ZGVyLmg+CisjaW5jbHVkZSA8V2ViQ29yZS9QaW5nSGFuZGxlLmg+CisjaW5jbHVkZSA8V2ViQ29y
ZS9QbGF0Zm9ybVN0cmF0ZWdpZXMuaD4KKyNpbmNsdWRlIDxXZWJDb3JlL1Jlc291cmNlSGFuZGxl
Lmg+CisjaW5jbHVkZSA8V2ViQ29yZS9SZXNvdXJjZVJlcXVlc3QuaD4KKyNpbmNsdWRlIDxXZWJD
b3JlL1N1YnJlc291cmNlTG9hZGVyLmg+CisjaW5jbHVkZSA8V2ViQ29yZS9VUkwuaD4KICNpbmNs
dWRlIDx3dGYvTWFpblRocmVhZC5oPgogI2luY2x1ZGUgPHd0Zi9UZW1wb3JhcnlDaGFuZ2UuaD4K
ICNpbmNsdWRlIDx3dGYvdGV4dC9DU3RyaW5nLmg+CiAKICNpZiBQTEFURk9STShJT1MpCi0jaW5j
bHVkZSA8UnVudGltZUFwcGxpY2F0aW9uQ2hlY2tzSU9TLmg+CisjaW5jbHVkZSA8V2ViQ29yZS9S
dW50aW1lQXBwbGljYXRpb25DaGVja3NJT1MuaD4KICNlbmRpZgogCiAjaWYgVVNFKFFVSUNLX0xP
T0spCi0jaW5jbHVkZSAiUXVpY2tMb29rLmgiCisjaW5jbHVkZSA8V2ViQ29yZS9RdWlja0xvb2su
aD4KICNlbmRpZgogCi1uYW1lc3BhY2UgV2ViQ29yZSB7Ci0KIC8vIE1hdGNoIHRoZSBwYXJhbGxl
bCBjb25uZWN0aW9uIGNvdW50IHVzZWQgYnkgdGhlIG5ldHdvcmtpbmcgbGF5ZXIuCiBzdGF0aWMg
dW5zaWduZWQgbWF4UmVxdWVzdHNJbkZsaWdodFBlckhvc3Q7CiAjaWYgIVBMQVRGT1JNKElPUykK
QEAgLTYwLDcgKzU3LDE0IEBAIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBtYXhSZXF1ZXN0c0luRmxp
Z2gKIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBtYXhSZXF1ZXN0c0luRmxpZ2h0Rm9yTm9uSFRUUFBy
b3RvY29scyA9IDEwMDAwOwogI2VuZGlmCiAKLVJlc291cmNlTG9hZFNjaGVkdWxlcjo6SG9zdElu
Zm9ybWF0aW9uKiBSZXNvdXJjZUxvYWRTY2hlZHVsZXI6Omhvc3RGb3JVUkwoY29uc3QgVVJMJiB1
cmwsIENyZWF0ZUhvc3RQb2xpY3kgY3JlYXRlSG9zdFBvbGljeSkKK3VzaW5nIG5hbWVzcGFjZSBX
ZWJDb3JlOworCitXZWJSZXNvdXJjZUxvYWRTY2hlZHVsZXImIHdlYlJlc291cmNlTG9hZFNjaGVk
dWxlcigpCit7CisgICAgcmV0dXJuIHN0YXRpY19jYXN0PFdlYlJlc291cmNlTG9hZFNjaGVkdWxl
ciY+KCpwbGF0Zm9ybVN0cmF0ZWdpZXMoKS0+bG9hZGVyU3RyYXRlZ3koKSk7Cit9CisKK1dlYlJl
c291cmNlTG9hZFNjaGVkdWxlcjo6SG9zdEluZm9ybWF0aW9uKiBXZWJSZXNvdXJjZUxvYWRTY2hl
ZHVsZXI6Omhvc3RGb3JVUkwoY29uc3QgVVJMJiB1cmwsIENyZWF0ZUhvc3RQb2xpY3kgY3JlYXRl
SG9zdFBvbGljeSkKIHsKICAgICBpZiAoIXVybC5wcm90b2NvbElzSW5IVFRQRmFtaWx5KCkpCiAg
ICAgICAgIHJldHVybiBtX25vbkhUVFBQcm90b2NvbEhvc3Q7CkBAIC03NSw0MyArNzksMjAgQEAg
UmVzb3VyY2VMb2FkU2NoZWR1bGVyOjpIb3N0SW5mb3JtYXRpb24qIAogICAgIHJldHVybiBob3N0
OwogfQogCi1SZXNvdXJjZUxvYWRTY2hlZHVsZXIqIHJlc291cmNlTG9hZFNjaGVkdWxlcigpCi17
Ci0gICAgQVNTRVJUKGlzTWFpblRocmVhZCgpKTsKLSAgICBzdGF0aWMgUmVzb3VyY2VMb2FkU2No
ZWR1bGVyKiBnbG9iYWxTY2hlZHVsZXIgPSBudWxscHRyOwotICAgIAotICAgIGlmICghZ2xvYmFs
U2NoZWR1bGVyKSB7Ci0gICAgICAgIHN0YXRpYyBib29sIGlzQ2FsbGluZ091dFRvU3RyYXRlZ3kg
PSBmYWxzZTsKLSAgICAgICAgCi0gICAgICAgIC8vIElmIHdlJ3JlIHJlLWVudGVyaW5nIHJlc291
cmNlTG9hZFNjaGVkdWxlcigpIHdoaWxlIGNhbGxpbmcgb3V0IHRvIHRoZSBMb2FkZXJTdHJhdGVn
eSwKLSAgICAgICAgLy8gdGhlbiB0aGUgTG9hZGVyU3RyYXRlZ3kgaXMgdHJ5aW5nIHRvIHVzZSB0
aGUgZGVmYXVsdCByZXNvdXJjZUxvYWRTY2hlZHVsZXIuCi0gICAgICAgIC8vIFNvIHdlJ2xsIGNy
ZWF0ZSBpdCBoZXJlIGFuZCBzdGFydCB1c2luZyBpdC4KLSAgICAgICAgaWYgKGlzQ2FsbGluZ091
dFRvU3RyYXRlZ3kpIHsKLSAgICAgICAgICAgIGdsb2JhbFNjaGVkdWxlciA9IG5ldyBSZXNvdXJj
ZUxvYWRTY2hlZHVsZXI7Ci0gICAgICAgICAgICByZXR1cm4gZ2xvYmFsU2NoZWR1bGVyOwotICAg
ICAgICB9Ci0gICAgICAgIAotICAgICAgICBUZW1wb3JhcnlDaGFuZ2U8Ym9vbD4gcmVjdXJzaW9u
R3VhcmQoaXNDYWxsaW5nT3V0VG9TdHJhdGVneSwgdHJ1ZSk7Ci0gICAgICAgIGdsb2JhbFNjaGVk
dWxlciA9IHBsYXRmb3JtU3RyYXRlZ2llcygpLT5sb2FkZXJTdHJhdGVneSgpLT5yZXNvdXJjZUxv
YWRTY2hlZHVsZXIoKTsKLSAgICB9Ci0KLSAgICByZXR1cm4gZ2xvYmFsU2NoZWR1bGVyOwotfQot
Ci1SZXNvdXJjZUxvYWRTY2hlZHVsZXI6OlJlc291cmNlTG9hZFNjaGVkdWxlcigpCitXZWJSZXNv
dXJjZUxvYWRTY2hlZHVsZXI6OldlYlJlc291cmNlTG9hZFNjaGVkdWxlcigpCiAgICAgOiBtX25v
bkhUVFBQcm90b2NvbEhvc3QobmV3IEhvc3RJbmZvcm1hdGlvbihTdHJpbmcoKSwgbWF4UmVxdWVz
dHNJbkZsaWdodEZvck5vbkhUVFBQcm90b2NvbHMpKQotICAgICwgbV9yZXF1ZXN0VGltZXIoKnRo
aXMsICZSZXNvdXJjZUxvYWRTY2hlZHVsZXI6OnJlcXVlc3RUaW1lckZpcmVkKQorICAgICwgbV9y
ZXF1ZXN0VGltZXIoKnRoaXMsICZXZWJSZXNvdXJjZUxvYWRTY2hlZHVsZXI6OnJlcXVlc3RUaW1l
ckZpcmVkKQogICAgICwgbV9zdXNwZW5kUGVuZGluZ1JlcXVlc3RzQ291bnQoMCkKICAgICAsIG1f
aXNTZXJpYWxMb2FkaW5nRW5hYmxlZChmYWxzZSkKIHsKICAgICBtYXhSZXF1ZXN0c0luRmxpZ2h0
UGVySG9zdCA9IGluaXRpYWxpemVNYXhpbXVtSFRUUENvbm5lY3Rpb25Db3VudFBlckhvc3QoKTsK
IH0KIAotUmVzb3VyY2VMb2FkU2NoZWR1bGVyOjp+UmVzb3VyY2VMb2FkU2NoZWR1bGVyKCkKK1dl
YlJlc291cmNlTG9hZFNjaGVkdWxlcjo6fldlYlJlc291cmNlTG9hZFNjaGVkdWxlcigpCiB7CiB9
CiAKLVJlZlB0cjxTdWJyZXNvdXJjZUxvYWRlcj4gUmVzb3VyY2VMb2FkU2NoZWR1bGVyOjpzY2hl
ZHVsZVN1YnJlc291cmNlTG9hZChGcmFtZSogZnJhbWUsIENhY2hlZFJlc291cmNlKiByZXNvdXJj
ZSwgY29uc3QgUmVzb3VyY2VSZXF1ZXN0JiByZXF1ZXN0LCBjb25zdCBSZXNvdXJjZUxvYWRlck9w
dGlvbnMmIG9wdGlvbnMpCitSZWZQdHI8U3VicmVzb3VyY2VMb2FkZXI+IFdlYlJlc291cmNlTG9h
ZFNjaGVkdWxlcjo6bG9hZFJlc291cmNlKEZyYW1lKiBmcmFtZSwgQ2FjaGVkUmVzb3VyY2UqIHJl
c291cmNlLCBjb25zdCBSZXNvdXJjZVJlcXVlc3QmIHJlcXVlc3QsIGNvbnN0IFJlc291cmNlTG9h
ZGVyT3B0aW9ucyYgb3B0aW9ucykKIHsKICAgICBSZWZQdHI8U3VicmVzb3VyY2VMb2FkZXI+IGxv
YWRlciA9IFN1YnJlc291cmNlTG9hZGVyOjpjcmVhdGUoZnJhbWUsIHJlc291cmNlLCByZXF1ZXN0
LCBvcHRpb25zKTsKICAgICBpZiAobG9hZGVyKQpAQCAtMTI4LDcgKzEwOSwxMiBAQCBSZWZQdHI8
U3VicmVzb3VyY2VMb2FkZXI+IFJlc291cmNlTG9hZFNjCiAgICAgcmV0dXJuIGxvYWRlcjsKIH0K
IAotUmVmUHRyPE5ldHNjYXBlUGx1Z0luU3RyZWFtTG9hZGVyPiBSZXNvdXJjZUxvYWRTY2hlZHVs
ZXI6OnNjaGVkdWxlUGx1Z2luU3RyZWFtTG9hZChGcmFtZSogZnJhbWUsIE5ldHNjYXBlUGx1Z0lu
U3RyZWFtTG9hZGVyQ2xpZW50KiBjbGllbnQsIGNvbnN0IFJlc291cmNlUmVxdWVzdCYgcmVxdWVz
dCkKK3ZvaWQgV2ViUmVzb3VyY2VMb2FkU2NoZWR1bGVyOjpsb2FkUmVzb3VyY2VTeW5jaHJvbm91
c2x5KE5ldHdvcmtpbmdDb250ZXh0KiBjb250ZXh0LCB1bnNpZ25lZCBsb25nLCBjb25zdCBSZXNv
dXJjZVJlcXVlc3QmIHJlcXVlc3QsIFN0b3JlZENyZWRlbnRpYWxzIHN0b3JlZENyZWRlbnRpYWxz
LCBDbGllbnRDcmVkZW50aWFsUG9saWN5LCBSZXNvdXJjZUVycm9yJiBlcnJvciwgUmVzb3VyY2VS
ZXNwb25zZSYgcmVzcG9uc2UsIFZlY3RvcjxjaGFyPiYgZGF0YSkKK3sKKyAgICBSZXNvdXJjZUhh
bmRsZTo6bG9hZFJlc291cmNlU3luY2hyb25vdXNseShjb250ZXh0LCByZXF1ZXN0LCBzdG9yZWRD
cmVkZW50aWFscywgZXJyb3IsIHJlc3BvbnNlLCBkYXRhKTsKK30KKworUmVmUHRyPE5ldHNjYXBl
UGx1Z0luU3RyZWFtTG9hZGVyPiBXZWJSZXNvdXJjZUxvYWRTY2hlZHVsZXI6OnNjaGVkdWxlUGx1
Z2luU3RyZWFtTG9hZChGcmFtZSogZnJhbWUsIE5ldHNjYXBlUGx1Z0luU3RyZWFtTG9hZGVyQ2xp
ZW50KiBjbGllbnQsIGNvbnN0IFJlc291cmNlUmVxdWVzdCYgcmVxdWVzdCkKIHsKICAgICBSZWZQ
dHI8TmV0c2NhcGVQbHVnSW5TdHJlYW1Mb2FkZXI+IGxvYWRlciA9IE5ldHNjYXBlUGx1Z0luU3Ry
ZWFtTG9hZGVyOjpjcmVhdGUoZnJhbWUsIGNsaWVudCwgcmVxdWVzdCk7CiAgICAgaWYgKGxvYWRl
cikKQEAgLTEzNiwxMSArMTIyLDExIEBAIFJlZlB0cjxOZXRzY2FwZVBsdWdJblN0cmVhbUxvYWRl
cj4gUmVzb3UKICAgICByZXR1cm4gbG9hZGVyOwogfQogCi12b2lkIFJlc291cmNlTG9hZFNjaGVk
dWxlcjo6c2NoZWR1bGVMb2FkKFJlc291cmNlTG9hZGVyKiByZXNvdXJjZUxvYWRlcikKK3ZvaWQg
V2ViUmVzb3VyY2VMb2FkU2NoZWR1bGVyOjpzY2hlZHVsZUxvYWQoUmVzb3VyY2VMb2FkZXIqIHJl
c291cmNlTG9hZGVyKQogewogICAgIEFTU0VSVChyZXNvdXJjZUxvYWRlcik7CiAKLSAgICBMT0co
UmVzb3VyY2VMb2FkaW5nLCAiUmVzb3VyY2VMb2FkU2NoZWR1bGVyOjpsb2FkIHJlc291cmNlICVw
ICclcyciLCByZXNvdXJjZUxvYWRlciwgcmVzb3VyY2VMb2FkZXItPnVybCgpLnN0cmluZygpLmxh
dGluMSgpLmRhdGEoKSk7CisgICAgTE9HKFJlc291cmNlTG9hZGluZywgIldlYlJlc291cmNlTG9h
ZFNjaGVkdWxlcjo6bG9hZCByZXNvdXJjZSAlcCAnJXMnIiwgcmVzb3VyY2VMb2FkZXIsIHJlc291
cmNlTG9hZGVyLT51cmwoKS5zdHJpbmcoKS5sYXRpbjEoKS5kYXRhKCkpOwogCiAjaWYgUExBVEZP
Uk0oSU9TKQogICAgIC8vIElmIHRoZXJlJ3MgYSB3ZWIgYXJjaGl2ZSByZXNvdXJjZSBmb3IgdGhp
cyBVUkwsIHdlIGRvbid0IG5lZWQgdG8gc2NoZWR1bGUgdGhlIGxvYWQgc2luY2UgaXQgd2lsbCBu
ZXZlciB0b3VjaCB0aGUgbmV0d29yay4KQEAgLTE5NCw3ICsxODAsNyBAQCB2b2lkIFJlc291cmNl
TG9hZFNjaGVkdWxlcjo6c2NoZWR1bGVMb2FkCiAgICAgc2NoZWR1bGVTZXJ2ZVBlbmRpbmdSZXF1
ZXN0cygpOwogfQogCi12b2lkIFJlc291cmNlTG9hZFNjaGVkdWxlcjo6cmVtb3ZlKFJlc291cmNl
TG9hZGVyKiByZXNvdXJjZUxvYWRlcikKK3ZvaWQgV2ViUmVzb3VyY2VMb2FkU2NoZWR1bGVyOjpy
ZW1vdmUoUmVzb3VyY2VMb2FkZXIqIHJlc291cmNlTG9hZGVyKQogewogICAgIEFTU0VSVChyZXNv
dXJjZUxvYWRlcik7CiAKQEAgLTIxMywxMSArMTk5LDExIEBAIHZvaWQgUmVzb3VyY2VMb2FkU2No
ZWR1bGVyOjpyZW1vdmUoUmVzb3UKICAgICBzY2hlZHVsZVNlcnZlUGVuZGluZ1JlcXVlc3RzKCk7
CiB9CiAKLXZvaWQgUmVzb3VyY2VMb2FkU2NoZWR1bGVyOjpzZXREZWZlcnNMb2FkaW5nKFJlc291
cmNlTG9hZGVyKiwgYm9vbCkKK3ZvaWQgV2ViUmVzb3VyY2VMb2FkU2NoZWR1bGVyOjpzZXREZWZl
cnNMb2FkaW5nKFJlc291cmNlTG9hZGVyKiwgYm9vbCkKIHsKIH0KIAotdm9pZCBSZXNvdXJjZUxv
YWRTY2hlZHVsZXI6OmNyb3NzT3JpZ2luUmVkaXJlY3RSZWNlaXZlZChSZXNvdXJjZUxvYWRlciog
cmVzb3VyY2VMb2FkZXIsIGNvbnN0IFVSTCYgcmVkaXJlY3RVUkwpCit2b2lkIFdlYlJlc291cmNl
TG9hZFNjaGVkdWxlcjo6Y3Jvc3NPcmlnaW5SZWRpcmVjdFJlY2VpdmVkKFJlc291cmNlTG9hZGVy
KiByZXNvdXJjZUxvYWRlciwgY29uc3QgVVJMJiByZWRpcmVjdFVSTCkKIHsKICAgICBIb3N0SW5m
b3JtYXRpb24qIG9sZEhvc3QgPSBob3N0Rm9yVVJMKHJlc291cmNlTG9hZGVyLT51cmwoKSk7CiAg
ICAgQVNTRVJUKG9sZEhvc3QpOwpAQCAtMjMzLDkgKzIxOSw5IEBAIHZvaWQgUmVzb3VyY2VMb2Fk
U2NoZWR1bGVyOjpjcm9zc09yaWdpblIKICAgICBvbGRIb3N0LT5yZW1vdmUocmVzb3VyY2VMb2Fk
ZXIpOwogfQogCi12b2lkIFJlc291cmNlTG9hZFNjaGVkdWxlcjo6c2VydmVQZW5kaW5nUmVxdWVz
dHMoUmVzb3VyY2VMb2FkUHJpb3JpdHkgbWluaW11bVByaW9yaXR5KQordm9pZCBXZWJSZXNvdXJj
ZUxvYWRTY2hlZHVsZXI6OnNlcnZlUGVuZGluZ1JlcXVlc3RzKFJlc291cmNlTG9hZFByaW9yaXR5
IG1pbmltdW1Qcmlvcml0eSkKIHsKLSAgICBMT0coUmVzb3VyY2VMb2FkaW5nLCAiUmVzb3VyY2VM
b2FkU2NoZWR1bGVyOjpzZXJ2ZVBlbmRpbmdSZXF1ZXN0cy4gbV9zdXNwZW5kUGVuZGluZ1JlcXVl
c3RzQ291bnQ9JWQiLCBtX3N1c3BlbmRQZW5kaW5nUmVxdWVzdHNDb3VudCk7IAorICAgIExPRyhS
ZXNvdXJjZUxvYWRpbmcsICJXZWJSZXNvdXJjZUxvYWRTY2hlZHVsZXI6OnNlcnZlUGVuZGluZ1Jl
cXVlc3RzLiBtX3N1c3BlbmRQZW5kaW5nUmVxdWVzdHNDb3VudD0lZCIsIG1fc3VzcGVuZFBlbmRp
bmdSZXF1ZXN0c0NvdW50KTsgCiAgICAgaWYgKGlzU3VzcGVuZGluZ1BlbmRpbmdSZXF1ZXN0cygp
KQogICAgICAgICByZXR1cm47CiAKQEAgLTI1NCw5ICsyNDAsOSBAQCB2b2lkIFJlc291cmNlTG9h
ZFNjaGVkdWxlcjo6c2VydmVQZW5kaW5nCiAgICAgfQogfQogCi12b2lkIFJlc291cmNlTG9hZFNj
aGVkdWxlcjo6c2VydmVQZW5kaW5nUmVxdWVzdHMoSG9zdEluZm9ybWF0aW9uKiBob3N0LCBSZXNv
dXJjZUxvYWRQcmlvcml0eSBtaW5pbXVtUHJpb3JpdHkpCit2b2lkIFdlYlJlc291cmNlTG9hZFNj
aGVkdWxlcjo6c2VydmVQZW5kaW5nUmVxdWVzdHMoSG9zdEluZm9ybWF0aW9uKiBob3N0LCBSZXNv
dXJjZUxvYWRQcmlvcml0eSBtaW5pbXVtUHJpb3JpdHkpCiB7Ci0gICAgTE9HKFJlc291cmNlTG9h
ZGluZywgIlJlc291cmNlTG9hZFNjaGVkdWxlcjo6c2VydmVQZW5kaW5nUmVxdWVzdHMgSG9zdElu
Zm9ybWF0aW9uLm1fbmFtZT0nJXMnIiwgaG9zdC0+bmFtZSgpLmxhdGluMSgpLmRhdGEoKSk7Cisg
ICAgTE9HKFJlc291cmNlTG9hZGluZywgIldlYlJlc291cmNlTG9hZFNjaGVkdWxlcjo6c2VydmVQ
ZW5kaW5nUmVxdWVzdHMgSG9zdEluZm9ybWF0aW9uLm1fbmFtZT0nJXMnIiwgaG9zdC0+bmFtZSgp
LmxhdGluMSgpLmRhdGEoKSk7CiAKICAgICBhdXRvIHByaW9yaXR5ID0gUmVzb3VyY2VMb2FkUHJp
b3JpdHk6OkhpZ2hlc3Q7CiAgICAgd2hpbGUgKHRydWUpIHsKQEAgLTI4OCwxMiArMjc0LDEyIEBA
IHZvaWQgUmVzb3VyY2VMb2FkU2NoZWR1bGVyOjpzZXJ2ZVBlbmRpbmcKICAgICB9CiB9CiAKLXZv
aWQgUmVzb3VyY2VMb2FkU2NoZWR1bGVyOjpzdXNwZW5kUGVuZGluZ1JlcXVlc3RzKCkKK3ZvaWQg
V2ViUmVzb3VyY2VMb2FkU2NoZWR1bGVyOjpzdXNwZW5kUGVuZGluZ1JlcXVlc3RzKCkKIHsKICAg
ICArK21fc3VzcGVuZFBlbmRpbmdSZXF1ZXN0c0NvdW50OwogfQogCi12b2lkIFJlc291cmNlTG9h
ZFNjaGVkdWxlcjo6cmVzdW1lUGVuZGluZ1JlcXVlc3RzKCkKK3ZvaWQgV2ViUmVzb3VyY2VMb2Fk
U2NoZWR1bGVyOjpyZXN1bWVQZW5kaW5nUmVxdWVzdHMoKQogewogICAgIEFTU0VSVChtX3N1c3Bl
bmRQZW5kaW5nUmVxdWVzdHNDb3VudCk7CiAgICAgLS1tX3N1c3BlbmRQZW5kaW5nUmVxdWVzdHND
b3VudDsKQEAgLTMwMywzMSArMjg5LDMxIEBAIHZvaWQgUmVzb3VyY2VMb2FkU2NoZWR1bGVyOjpy
ZXN1bWVQZW5kaW4KICAgICAgICAgc2NoZWR1bGVTZXJ2ZVBlbmRpbmdSZXF1ZXN0cygpOwogfQog
ICAgIAotdm9pZCBSZXNvdXJjZUxvYWRTY2hlZHVsZXI6OnNjaGVkdWxlU2VydmVQZW5kaW5nUmVx
dWVzdHMoKQordm9pZCBXZWJSZXNvdXJjZUxvYWRTY2hlZHVsZXI6OnNjaGVkdWxlU2VydmVQZW5k
aW5nUmVxdWVzdHMoKQogewotICAgIExPRyhSZXNvdXJjZUxvYWRpbmcsICJSZXNvdXJjZUxvYWRT
Y2hlZHVsZXI6OnNjaGVkdWxlU2VydmVQZW5kaW5nUmVxdWVzdHMsIG1fcmVxdWVzdFRpbWVyLmlz
QWN0aXZlKCk9JXUiLCBtX3JlcXVlc3RUaW1lci5pc0FjdGl2ZSgpKTsKKyAgICBMT0coUmVzb3Vy
Y2VMb2FkaW5nLCAiV2ViUmVzb3VyY2VMb2FkU2NoZWR1bGVyOjpzY2hlZHVsZVNlcnZlUGVuZGlu
Z1JlcXVlc3RzLCBtX3JlcXVlc3RUaW1lci5pc0FjdGl2ZSgpPSV1IiwgbV9yZXF1ZXN0VGltZXIu
aXNBY3RpdmUoKSk7CiAgICAgaWYgKCFtX3JlcXVlc3RUaW1lci5pc0FjdGl2ZSgpKQogICAgICAg
ICBtX3JlcXVlc3RUaW1lci5zdGFydE9uZVNob3QoMCk7CiB9CiAKLXZvaWQgUmVzb3VyY2VMb2Fk
U2NoZWR1bGVyOjpyZXF1ZXN0VGltZXJGaXJlZCgpCit2b2lkIFdlYlJlc291cmNlTG9hZFNjaGVk
dWxlcjo6cmVxdWVzdFRpbWVyRmlyZWQoKQogewotICAgIExPRyhSZXNvdXJjZUxvYWRpbmcsICJS
ZXNvdXJjZUxvYWRTY2hlZHVsZXI6OnJlcXVlc3RUaW1lckZpcmVkXG4iKTsKKyAgICBMT0coUmVz
b3VyY2VMb2FkaW5nLCAiV2ViUmVzb3VyY2VMb2FkU2NoZWR1bGVyOjpyZXF1ZXN0VGltZXJGaXJl
ZFxuIik7CiAgICAgc2VydmVQZW5kaW5nUmVxdWVzdHMoKTsKIH0KIAotUmVzb3VyY2VMb2FkU2No
ZWR1bGVyOjpIb3N0SW5mb3JtYXRpb246Okhvc3RJbmZvcm1hdGlvbihjb25zdCBTdHJpbmcmIG5h
bWUsIHVuc2lnbmVkIG1heFJlcXVlc3RzSW5GbGlnaHQpCitXZWJSZXNvdXJjZUxvYWRTY2hlZHVs
ZXI6Okhvc3RJbmZvcm1hdGlvbjo6SG9zdEluZm9ybWF0aW9uKGNvbnN0IFN0cmluZyYgbmFtZSwg
dW5zaWduZWQgbWF4UmVxdWVzdHNJbkZsaWdodCkKICAgICA6IG1fbmFtZShuYW1lKQogICAgICwg
bV9tYXhSZXF1ZXN0c0luRmxpZ2h0KG1heFJlcXVlc3RzSW5GbGlnaHQpCiB7CiB9CiAKLVJlc291
cmNlTG9hZFNjaGVkdWxlcjo6SG9zdEluZm9ybWF0aW9uOjp+SG9zdEluZm9ybWF0aW9uKCkKK1dl
YlJlc291cmNlTG9hZFNjaGVkdWxlcjo6SG9zdEluZm9ybWF0aW9uOjp+SG9zdEluZm9ybWF0aW9u
KCkKIHsKICAgICBBU1NFUlQoIWhhc1JlcXVlc3RzKCkpOwogfQogCi11bnNpZ25lZCBSZXNvdXJj
ZUxvYWRTY2hlZHVsZXI6Okhvc3RJbmZvcm1hdGlvbjo6cHJpb3JpdHlUb0luZGV4KFJlc291cmNl
TG9hZFByaW9yaXR5IHByaW9yaXR5KQordW5zaWduZWQgV2ViUmVzb3VyY2VMb2FkU2NoZWR1bGVy
OjpIb3N0SW5mb3JtYXRpb246OnByaW9yaXR5VG9JbmRleChSZXNvdXJjZUxvYWRQcmlvcml0eSBw
cmlvcml0eSkKIHsKICAgICBzd2l0Y2ggKHByaW9yaXR5KSB7CiAgICAgY2FzZSBSZXNvdXJjZUxv
YWRQcmlvcml0eTo6VmVyeUxvdzoKQEAgLTM0NSwxOCArMzMxLDE4IEBAIHVuc2lnbmVkIFJlc291
cmNlTG9hZFNjaGVkdWxlcjo6SG9zdEluZm8KICAgICByZXR1cm4gMDsKIH0KIAotdm9pZCBSZXNv
dXJjZUxvYWRTY2hlZHVsZXI6Okhvc3RJbmZvcm1hdGlvbjo6c2NoZWR1bGUoUmVzb3VyY2VMb2Fk
ZXIqIHJlc291cmNlTG9hZGVyLCBSZXNvdXJjZUxvYWRQcmlvcml0eSBwcmlvcml0eSkKK3ZvaWQg
V2ViUmVzb3VyY2VMb2FkU2NoZWR1bGVyOjpIb3N0SW5mb3JtYXRpb246OnNjaGVkdWxlKFJlc291
cmNlTG9hZGVyKiByZXNvdXJjZUxvYWRlciwgUmVzb3VyY2VMb2FkUHJpb3JpdHkgcHJpb3JpdHkp
CiB7CiAgICAgbV9yZXF1ZXN0c1BlbmRpbmdbcHJpb3JpdHlUb0luZGV4KHByaW9yaXR5KV0uYXBw
ZW5kKHJlc291cmNlTG9hZGVyKTsKIH0KICAgICAKLXZvaWQgUmVzb3VyY2VMb2FkU2NoZWR1bGVy
OjpIb3N0SW5mb3JtYXRpb246OmFkZExvYWRJblByb2dyZXNzKFJlc291cmNlTG9hZGVyKiByZXNv
dXJjZUxvYWRlcikKK3ZvaWQgV2ViUmVzb3VyY2VMb2FkU2NoZWR1bGVyOjpIb3N0SW5mb3JtYXRp
b246OmFkZExvYWRJblByb2dyZXNzKFJlc291cmNlTG9hZGVyKiByZXNvdXJjZUxvYWRlcikKIHsK
ICAgICBMT0coUmVzb3VyY2VMb2FkaW5nLCAiSG9zdEluZm9ybWF0aW9uICclcycgbG9hZGluZyAn
JXMnLiBDdXJyZW50IGNvdW50ICVkIiwgbV9uYW1lLmxhdGluMSgpLmRhdGEoKSwgcmVzb3VyY2VM
b2FkZXItPnVybCgpLnN0cmluZygpLmxhdGluMSgpLmRhdGEoKSwgbV9yZXF1ZXN0c0xvYWRpbmcu
c2l6ZSgpKTsKICAgICBtX3JlcXVlc3RzTG9hZGluZy5hZGQocmVzb3VyY2VMb2FkZXIpOwogfQog
ICAgIAotdm9pZCBSZXNvdXJjZUxvYWRTY2hlZHVsZXI6Okhvc3RJbmZvcm1hdGlvbjo6cmVtb3Zl
KFJlc291cmNlTG9hZGVyKiByZXNvdXJjZUxvYWRlcikKK3ZvaWQgV2ViUmVzb3VyY2VMb2FkU2No
ZWR1bGVyOjpIb3N0SW5mb3JtYXRpb246OnJlbW92ZShSZXNvdXJjZUxvYWRlciogcmVzb3VyY2VM
b2FkZXIpCiB7CiAgICAgaWYgKG1fcmVxdWVzdHNMb2FkaW5nLnJlbW92ZShyZXNvdXJjZUxvYWRl
cikpCiAgICAgICAgIHJldHVybjsKQEAgLTM3MSw3ICszNTcsNyBAQCB2b2lkIFJlc291cmNlTG9h
ZFNjaGVkdWxlcjo6SG9zdEluZm9ybWF0CiAgICAgfQogfQogCi1ib29sIFJlc291cmNlTG9hZFNj
aGVkdWxlcjo6SG9zdEluZm9ybWF0aW9uOjpoYXNSZXF1ZXN0cygpIGNvbnN0Citib29sIFdlYlJl
c291cmNlTG9hZFNjaGVkdWxlcjo6SG9zdEluZm9ybWF0aW9uOjpoYXNSZXF1ZXN0cygpIGNvbnN0
CiB7CiAgICAgaWYgKCFtX3JlcXVlc3RzTG9hZGluZy5pc0VtcHR5KCkpCiAgICAgICAgIHJldHVy
biB0cnVlOwpAQCAtMzgyLDExICszNjgsMTYgQEAgYm9vbCBSZXNvdXJjZUxvYWRTY2hlZHVsZXI6
Okhvc3RJbmZvcm1hdAogICAgIHJldHVybiBmYWxzZTsKIH0KIAotYm9vbCBSZXNvdXJjZUxvYWRT
Y2hlZHVsZXI6Okhvc3RJbmZvcm1hdGlvbjo6bGltaXRSZXF1ZXN0cyhSZXNvdXJjZUxvYWRQcmlv
cml0eSBwcmlvcml0eSkgY29uc3QgCitib29sIFdlYlJlc291cmNlTG9hZFNjaGVkdWxlcjo6SG9z
dEluZm9ybWF0aW9uOjpsaW1pdFJlcXVlc3RzKFJlc291cmNlTG9hZFByaW9yaXR5IHByaW9yaXR5
KSBjb25zdCAKIHsKICAgICBpZiAocHJpb3JpdHkgPT0gUmVzb3VyY2VMb2FkUHJpb3JpdHk6OlZl
cnlMb3cgJiYgIW1fcmVxdWVzdHNMb2FkaW5nLmlzRW1wdHkoKSkKICAgICAgICAgcmV0dXJuIHRy
dWU7Ci0gICAgcmV0dXJuIG1fcmVxdWVzdHNMb2FkaW5nLnNpemUoKSA+PSAocmVzb3VyY2VMb2Fk
U2NoZWR1bGVyKCktPmlzU2VyaWFsTG9hZGluZ0VuYWJsZWQoKSA/IDEgOiBtX21heFJlcXVlc3Rz
SW5GbGlnaHQpOworICAgIHJldHVybiBtX3JlcXVlc3RzTG9hZGluZy5zaXplKCkgPj0gKHdlYlJl
c291cmNlTG9hZFNjaGVkdWxlcigpLmlzU2VyaWFsTG9hZGluZ0VuYWJsZWQoKSA/IDEgOiBtX21h
eFJlcXVlc3RzSW5GbGlnaHQpOworfQorCit2b2lkIFdlYlJlc291cmNlTG9hZFNjaGVkdWxlcjo6
Y3JlYXRlUGluZ0hhbmRsZShOZXR3b3JraW5nQ29udGV4dCogbmV0d29ya2luZ0NvbnRleHQsIFJl
c291cmNlUmVxdWVzdCYgcmVxdWVzdCwgYm9vbCBzaG91bGRVc2VDcmVkZW50aWFsU3RvcmFnZSkK
K3sKKyAgICAvLyBQaW5nSGFuZGxlIG1hbmFnZXMgaXRzIG93biBsaWZldGltZSwgZGVsZXRpbmcg
aXRzZWxmIHdoZW4gaXRzIHB1cnBvc2UgaGFzIGJlZW4gZnVsZmlsbGVkLgorICAgIG5ldyBQaW5n
SGFuZGxlKG5ldHdvcmtpbmdDb250ZXh0LCByZXF1ZXN0LCBzaG91bGRVc2VDcmVkZW50aWFsU3Rv
cmFnZSwgUGluZ0hhbmRsZTo6VXNlc0FzeW5jQ2FsbGJhY2tzOjpObyk7CiB9CiAKLX0gLy8gbmFt
ZXNwYWNlIFdlYkNvcmUKSW5kZXg6IFNvdXJjZS9XZWJLaXQvV2ViQ29yZVN1cHBvcnQvV2ViUmVz
b3VyY2VMb2FkU2NoZWR1bGVyLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9XZWJDb3Jl
U3VwcG9ydC9XZWJSZXNvdXJjZUxvYWRTY2hlZHVsZXIuaAkocmV2aXNpb24gMTkyODgwKQkoZnJv
bSBTb3VyY2UvV2ViQ29yZS9sb2FkZXIvUmVzb3VyY2VMb2FkU2NoZWR1bGVyLmg6MTkyODgwKQor
KysgU291cmNlL1dlYktpdC9XZWJDb3JlU3VwcG9ydC9XZWJSZXNvdXJjZUxvYWRTY2hlZHVsZXIu
aAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDEzNCBAQAorLyoKKyAgICBDb3B5cmlnaHQgKEMp
IDE5OTggTGFycyBLbm9sbCAoa25vbGxAbXBpLWhkLm1wZy5kZSkKKyAgICBDb3B5cmlnaHQgKEMp
IDIwMDEgRGlyayBNdWVsbGVyIDxtdWVsbGVyQGtkZS5vcmc+CisgICAgQ29weXJpZ2h0IChDKSAy
MDA0LCAyMDA2LCAyMDA3LCAyMDA4IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAg
ICBDb3B5cmlnaHQgKEMpIDIwMTAgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKwor
ICAgIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBp
dCBhbmQvb3IKKyAgICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFy
eSBHZW5lcmFsIFB1YmxpYworICAgIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNv
ZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICAgIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwg
b3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKworICAgIFRoaXMgbGlicmFy
eSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICAg
IGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJh
bnR5IG9mCisgICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQ
VVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAgICBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2Ug
Zm9yIG1vcmUgZGV0YWlscy4KKworICAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkg
b2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAgICBhbG9uZyB3aXRo
IHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0
bworICAgIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0
cmVldCwgRmlmdGggRmxvb3IsCisgICAgQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisgKi8K
KworI2lmbmRlZiBSZXNvdXJjZUxvYWRTY2hlZHVsZXJfaAorI2RlZmluZSBSZXNvdXJjZUxvYWRT
Y2hlZHVsZXJfaAorCisjaW5jbHVkZSAiRnJhbWVMb2FkZXJUeXBlcy5oIgorI2luY2x1ZGUgIlJl
c291cmNlTG9hZGVyT3B0aW9ucy5oIgorI2luY2x1ZGUgIlJlc291cmNlTG9hZFByaW9yaXR5Lmgi
CisjaW5jbHVkZSAiVGltZXIuaCIKKyNpbmNsdWRlIDxhcnJheT4KKyNpbmNsdWRlIDx3dGYvRGVx
dWUuaD4KKyNpbmNsdWRlIDx3dGYvSGFzaE1hcC5oPgorI2luY2x1ZGUgPHd0Zi9IYXNoU2V0Lmg+
CisjaW5jbHVkZSA8d3RmL05vbmNvcHlhYmxlLmg+CisjaW5jbHVkZSA8d3RmL3RleHQvU3RyaW5n
SGFzaC5oPgorI2luY2x1ZGUgPHd0Zi90ZXh0L1dURlN0cmluZy5oPgorCituYW1lc3BhY2UgV2Vi
Q29yZSB7CisKK2NsYXNzIENhY2hlZFJlc291cmNlOworY2xhc3MgRnJhbWU7CitjbGFzcyBVUkw7
CitjbGFzcyBOZXRzY2FwZVBsdWdJblN0cmVhbUxvYWRlcjsKK2NsYXNzIE5ldHNjYXBlUGx1Z0lu
U3RyZWFtTG9hZGVyQ2xpZW50OworY2xhc3MgUmVzb3VyY2VMb2FkZXI7CitjbGFzcyBSZXNvdXJj
ZVJlcXVlc3Q7CitjbGFzcyBTdWJyZXNvdXJjZUxvYWRlcjsKKworY2xhc3MgUmVzb3VyY2VMb2Fk
U2NoZWR1bGVyIHsKKyAgICBXVEZfTUFLRV9OT05DT1BZQUJMRShSZXNvdXJjZUxvYWRTY2hlZHVs
ZXIpOyBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsKK3B1YmxpYzoKKyAgICBXRUJDT1JFX0VYUE9S
VCBmcmllbmQgUmVzb3VyY2VMb2FkU2NoZWR1bGVyKiByZXNvdXJjZUxvYWRTY2hlZHVsZXIoKTsK
KworICAgIFdFQkNPUkVfRVhQT1JUIHZpcnR1YWwgUmVmUHRyPFN1YnJlc291cmNlTG9hZGVyPiBz
Y2hlZHVsZVN1YnJlc291cmNlTG9hZChGcmFtZSosIENhY2hlZFJlc291cmNlKiwgY29uc3QgUmVz
b3VyY2VSZXF1ZXN0JiwgY29uc3QgUmVzb3VyY2VMb2FkZXJPcHRpb25zJik7CisgICAgV0VCQ09S
RV9FWFBPUlQgdmlydHVhbCBSZWZQdHI8TmV0c2NhcGVQbHVnSW5TdHJlYW1Mb2FkZXI+IHNjaGVk
dWxlUGx1Z2luU3RyZWFtTG9hZChGcmFtZSosIE5ldHNjYXBlUGx1Z0luU3RyZWFtTG9hZGVyQ2xp
ZW50KiwgY29uc3QgUmVzb3VyY2VSZXF1ZXN0Jik7CisgICAgV0VCQ09SRV9FWFBPUlQgdmlydHVh
bCB2b2lkIHJlbW92ZShSZXNvdXJjZUxvYWRlciopOworICAgIHZpcnR1YWwgdm9pZCBzZXREZWZl
cnNMb2FkaW5nKFJlc291cmNlTG9hZGVyKiwgYm9vbCk7CisgICAgdmlydHVhbCB2b2lkIGNyb3Nz
T3JpZ2luUmVkaXJlY3RSZWNlaXZlZChSZXNvdXJjZUxvYWRlciosIGNvbnN0IFVSTCYgcmVkaXJl
Y3RVUkwpOworICAgIAorICAgIFdFQkNPUkVfRVhQT1JUIHZpcnR1YWwgdm9pZCBzZXJ2ZVBlbmRp
bmdSZXF1ZXN0cyhSZXNvdXJjZUxvYWRQcmlvcml0eSBtaW5pbXVtUHJpb3JpdHkgPSBSZXNvdXJj
ZUxvYWRQcmlvcml0eTo6VmVyeUxvdyk7CisgICAgV0VCQ09SRV9FWFBPUlQgdmlydHVhbCB2b2lk
IHN1c3BlbmRQZW5kaW5nUmVxdWVzdHMoKTsKKyAgICBXRUJDT1JFX0VYUE9SVCB2aXJ0dWFsIHZv
aWQgcmVzdW1lUGVuZGluZ1JlcXVlc3RzKCk7CisgICAgCisgICAgYm9vbCBpc1NlcmlhbExvYWRp
bmdFbmFibGVkKCkgY29uc3QgeyByZXR1cm4gbV9pc1NlcmlhbExvYWRpbmdFbmFibGVkOyB9Cisg
ICAgdmlydHVhbCB2b2lkIHNldFNlcmlhbExvYWRpbmdFbmFibGVkKGJvb2wgYikgeyBtX2lzU2Vy
aWFsTG9hZGluZ0VuYWJsZWQgPSBiOyB9CisKKyAgICBjbGFzcyBTdXNwZW5kZXIgeworICAgIHB1
YmxpYzoKKyAgICAgICAgZXhwbGljaXQgU3VzcGVuZGVyKFJlc291cmNlTG9hZFNjaGVkdWxlciYg
c2NoZWR1bGVyKSA6IG1fc2NoZWR1bGVyKHNjaGVkdWxlcikgeyBtX3NjaGVkdWxlci5zdXNwZW5k
UGVuZGluZ1JlcXVlc3RzKCk7IH0KKyAgICAgICAgflN1c3BlbmRlcigpIHsgbV9zY2hlZHVsZXIu
cmVzdW1lUGVuZGluZ1JlcXVlc3RzKCk7IH0KKyAgICBwcml2YXRlOgorICAgICAgICBSZXNvdXJj
ZUxvYWRTY2hlZHVsZXImIG1fc2NoZWR1bGVyOworICAgIH07CisKK3Byb3RlY3RlZDoKKyAgICBX
RUJDT1JFX0VYUE9SVCBSZXNvdXJjZUxvYWRTY2hlZHVsZXIoKTsKKyAgICBXRUJDT1JFX0VYUE9S
VCB2aXJ0dWFsIH5SZXNvdXJjZUxvYWRTY2hlZHVsZXIoKTsKKworcHJpdmF0ZToKKyAgICB2b2lk
IHNjaGVkdWxlTG9hZChSZXNvdXJjZUxvYWRlciopOworICAgIHZvaWQgc2NoZWR1bGVTZXJ2ZVBl
bmRpbmdSZXF1ZXN0cygpOworICAgIHZvaWQgcmVxdWVzdFRpbWVyRmlyZWQoKTsKKworICAgIGJv
b2wgaXNTdXNwZW5kaW5nUGVuZGluZ1JlcXVlc3RzKCkgY29uc3QgeyByZXR1cm4gISFtX3N1c3Bl
bmRQZW5kaW5nUmVxdWVzdHNDb3VudDsgfQorCisgICAgY2xhc3MgSG9zdEluZm9ybWF0aW9uIHsK
KyAgICAgICAgV1RGX01BS0VfTk9OQ09QWUFCTEUoSG9zdEluZm9ybWF0aW9uKTsgV1RGX01BS0Vf
RkFTVF9BTExPQ0FURUQ7CisgICAgcHVibGljOgorICAgICAgICBIb3N0SW5mb3JtYXRpb24oY29u
c3QgU3RyaW5nJiwgdW5zaWduZWQpOworICAgICAgICB+SG9zdEluZm9ybWF0aW9uKCk7CisgICAg
ICAgIAorICAgICAgICBjb25zdCBTdHJpbmcmIG5hbWUoKSBjb25zdCB7IHJldHVybiBtX25hbWU7
IH0KKyAgICAgICAgdm9pZCBzY2hlZHVsZShSZXNvdXJjZUxvYWRlciosIFJlc291cmNlTG9hZFBy
aW9yaXR5ID0gUmVzb3VyY2VMb2FkUHJpb3JpdHk6OlZlcnlMb3cpOworICAgICAgICB2b2lkIGFk
ZExvYWRJblByb2dyZXNzKFJlc291cmNlTG9hZGVyKik7CisgICAgICAgIHZvaWQgcmVtb3ZlKFJl
c291cmNlTG9hZGVyKik7CisgICAgICAgIGJvb2wgaGFzUmVxdWVzdHMoKSBjb25zdDsKKyAgICAg
ICAgYm9vbCBsaW1pdFJlcXVlc3RzKFJlc291cmNlTG9hZFByaW9yaXR5KSBjb25zdDsKKworICAg
ICAgICB0eXBlZGVmIERlcXVlPFJlZlB0cjxSZXNvdXJjZUxvYWRlcj4+IFJlcXVlc3RRdWV1ZTsK
KyAgICAgICAgUmVxdWVzdFF1ZXVlJiByZXF1ZXN0c1BlbmRpbmcoUmVzb3VyY2VMb2FkUHJpb3Jp
dHkgcHJpb3JpdHkpIHsgcmV0dXJuIG1fcmVxdWVzdHNQZW5kaW5nW3ByaW9yaXR5VG9JbmRleChw
cmlvcml0eSldOyB9CisKKyAgICBwcml2YXRlOgorICAgICAgICBzdGF0aWMgdW5zaWduZWQgcHJp
b3JpdHlUb0luZGV4KFJlc291cmNlTG9hZFByaW9yaXR5KTsKKworICAgICAgICBzdGQ6OmFycmF5
PFJlcXVlc3RRdWV1ZSwgcmVzb3VyY2VMb2FkUHJpb3JpdHlDb3VudD4gbV9yZXF1ZXN0c1BlbmRp
bmc7CisgICAgICAgIHR5cGVkZWYgSGFzaFNldDxSZWZQdHI8UmVzb3VyY2VMb2FkZXI+PiBSZXF1
ZXN0TWFwOworICAgICAgICBSZXF1ZXN0TWFwIG1fcmVxdWVzdHNMb2FkaW5nOworICAgICAgICBj
b25zdCBTdHJpbmcgbV9uYW1lOworICAgICAgICBjb25zdCB1bnNpZ25lZCBtX21heFJlcXVlc3Rz
SW5GbGlnaHQ7CisgICAgfTsKKworICAgIGVudW0gQ3JlYXRlSG9zdFBvbGljeSB7CisgICAgICAg
IENyZWF0ZUlmTm90Rm91bmQsCisgICAgICAgIEZpbmRPbmx5CisgICAgfTsKKyAgICAKKyAgICBI
b3N0SW5mb3JtYXRpb24qIGhvc3RGb3JVUkwoY29uc3QgVVJMJiwgQ3JlYXRlSG9zdFBvbGljeSA9
IEZpbmRPbmx5KTsKKyAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIHNlcnZlUGVuZGluZ1JlcXVlc3Rz
KEhvc3RJbmZvcm1hdGlvbiosIFJlc291cmNlTG9hZFByaW9yaXR5KTsKKworICAgIHR5cGVkZWYg
SGFzaE1hcDxTdHJpbmcsIEhvc3RJbmZvcm1hdGlvbiosIFN0cmluZ0hhc2g+IEhvc3RNYXA7Cisg
ICAgSG9zdE1hcCBtX2hvc3RzOworICAgIEhvc3RJbmZvcm1hdGlvbiogbV9ub25IVFRQUHJvdG9j
b2xIb3N0OworICAgICAgICAKKyAgICBUaW1lciBtX3JlcXVlc3RUaW1lcjsKKworICAgIHVuc2ln
bmVkIG1fc3VzcGVuZFBlbmRpbmdSZXF1ZXN0c0NvdW50OworICAgIGJvb2wgbV9pc1NlcmlhbExv
YWRpbmdFbmFibGVkOworfTsKKworV0VCQ09SRV9FWFBPUlQgUmVzb3VyY2VMb2FkU2NoZWR1bGVy
KiByZXNvdXJjZUxvYWRTY2hlZHVsZXIoKTsKKworfQorCisjZW5kaWYKSW5kZXg6IFNvdXJjZS9X
ZWJLaXQvV2ViQ29yZVN1cHBvcnQvV2ViUmVzb3VyY2VMb2FkU2NoZWR1bGVyLmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL1dlYktpdC9XZWJDb3JlU3VwcG9ydC9XZWJSZXNvdXJjZUxvYWRTY2hlZHVs
ZXIuaAkod29ya2luZyBjb3B5KQorKysgU291cmNlL1dlYktpdC9XZWJDb3JlU3VwcG9ydC9XZWJS
ZXNvdXJjZUxvYWRTY2hlZHVsZXIuaAkod29ya2luZyBjb3B5KQpAQCAtMSw3ICsxLDcgQEAKIC8q
CiAgICAgQ29weXJpZ2h0IChDKSAxOTk4IExhcnMgS25vbGwgKGtub2xsQG1waS1oZC5tcGcuZGUp
CiAgICAgQ29weXJpZ2h0IChDKSAyMDAxIERpcmsgTXVlbGxlciA8bXVlbGxlckBrZGUub3JnPgot
ICAgIENvcHlyaWdodCAoQykgMjAwNCwgMjAwNiwgMjAwNywgMjAwOCBBcHBsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCisgICAgQ29weXJpZ2h0IChDKSAyMDA0LCAyMDA2LTIwMDgsIDIwMTUg
QXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICAgIENvcHlyaWdodCAoQykgMjAxMCBH
b29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogCiAgICAgVGhpcyBsaWJyYXJ5IGlzIGZy
ZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgpAQCAtMjAsMTMgKzIw
LDE0IEBACiAgICAgQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCiAgKi8KIAotI2lmbmRlZiBS
ZXNvdXJjZUxvYWRTY2hlZHVsZXJfaAotI2RlZmluZSBSZXNvdXJjZUxvYWRTY2hlZHVsZXJfaAor
I2lmbmRlZiBXZWJSZXNvdXJjZUxvYWRTY2hlZHVsZXJfaAorI2RlZmluZSBXZWJSZXNvdXJjZUxv
YWRTY2hlZHVsZXJfaAogCi0jaW5jbHVkZSAiRnJhbWVMb2FkZXJUeXBlcy5oIgotI2luY2x1ZGUg
IlJlc291cmNlTG9hZGVyT3B0aW9ucy5oIgotI2luY2x1ZGUgIlJlc291cmNlTG9hZFByaW9yaXR5
LmgiCi0jaW5jbHVkZSAiVGltZXIuaCIKKyNpbmNsdWRlIDxXZWJDb3JlL0ZyYW1lTG9hZGVyVHlw
ZXMuaD4KKyNpbmNsdWRlIDxXZWJDb3JlL0xvYWRlclN0cmF0ZWd5Lmg+CisjaW5jbHVkZSA8V2Vi
Q29yZS9SZXNvdXJjZUxvYWRQcmlvcml0eS5oPgorI2luY2x1ZGUgPFdlYkNvcmUvUmVzb3VyY2VM
b2FkZXJPcHRpb25zLmg+CisjaW5jbHVkZSA8V2ViQ29yZS9UaW1lci5oPgogI2luY2x1ZGUgPGFy
cmF5PgogI2luY2x1ZGUgPHd0Zi9EZXF1ZS5oPgogI2luY2x1ZGUgPHd0Zi9IYXNoTWFwLmg+CkBA
IC0zNSw0OSArMzYsMzcgQEAKICNpbmNsdWRlIDx3dGYvdGV4dC9TdHJpbmdIYXNoLmg+CiAjaW5j
bHVkZSA8d3RmL3RleHQvV1RGU3RyaW5nLmg+CiAKLW5hbWVzcGFjZSBXZWJDb3JlIHsKK2NsYXNz
IFdlYlJlc291cmNlTG9hZFNjaGVkdWxlcjsKIAotY2xhc3MgQ2FjaGVkUmVzb3VyY2U7Ci1jbGFz
cyBGcmFtZTsKLWNsYXNzIFVSTDsKLWNsYXNzIE5ldHNjYXBlUGx1Z0luU3RyZWFtTG9hZGVyOwot
Y2xhc3MgTmV0c2NhcGVQbHVnSW5TdHJlYW1Mb2FkZXJDbGllbnQ7Ci1jbGFzcyBSZXNvdXJjZUxv
YWRlcjsKLWNsYXNzIFJlc291cmNlUmVxdWVzdDsKLWNsYXNzIFN1YnJlc291cmNlTG9hZGVyOwor
V2ViUmVzb3VyY2VMb2FkU2NoZWR1bGVyJiB3ZWJSZXNvdXJjZUxvYWRTY2hlZHVsZXIoKTsKIAot
Y2xhc3MgUmVzb3VyY2VMb2FkU2NoZWR1bGVyIHsKLSAgICBXVEZfTUFLRV9OT05DT1BZQUJMRShS
ZXNvdXJjZUxvYWRTY2hlZHVsZXIpOyBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsKK2NsYXNzIFdl
YlJlc291cmNlTG9hZFNjaGVkdWxlciA6IHB1YmxpYyBXZWJDb3JlOjpMb2FkZXJTdHJhdGVneSB7
CisgICAgV1RGX01BS0VfTk9OQ09QWUFCTEUoV2ViUmVzb3VyY2VMb2FkU2NoZWR1bGVyKTsgV1RG
X01BS0VfRkFTVF9BTExPQ0FURUQ7CiBwdWJsaWM6Ci0gICAgV0VCQ09SRV9FWFBPUlQgZnJpZW5k
IFJlc291cmNlTG9hZFNjaGVkdWxlciogcmVzb3VyY2VMb2FkU2NoZWR1bGVyKCk7CisgICAgV2Vi
UmVzb3VyY2VMb2FkU2NoZWR1bGVyKCk7CiAKLSAgICBXRUJDT1JFX0VYUE9SVCB2aXJ0dWFsIFJl
ZlB0cjxTdWJyZXNvdXJjZUxvYWRlcj4gc2NoZWR1bGVTdWJyZXNvdXJjZUxvYWQoRnJhbWUqLCBD
YWNoZWRSZXNvdXJjZSosIGNvbnN0IFJlc291cmNlUmVxdWVzdCYsIGNvbnN0IFJlc291cmNlTG9h
ZGVyT3B0aW9ucyYpOwotICAgIFdFQkNPUkVfRVhQT1JUIHZpcnR1YWwgUmVmUHRyPE5ldHNjYXBl
UGx1Z0luU3RyZWFtTG9hZGVyPiBzY2hlZHVsZVBsdWdpblN0cmVhbUxvYWQoRnJhbWUqLCBOZXRz
Y2FwZVBsdWdJblN0cmVhbUxvYWRlckNsaWVudCosIGNvbnN0IFJlc291cmNlUmVxdWVzdCYpOwot
ICAgIFdFQkNPUkVfRVhQT1JUIHZpcnR1YWwgdm9pZCByZW1vdmUoUmVzb3VyY2VMb2FkZXIqKTsK
LSAgICB2aXJ0dWFsIHZvaWQgc2V0RGVmZXJzTG9hZGluZyhSZXNvdXJjZUxvYWRlciosIGJvb2wp
OwotICAgIHZpcnR1YWwgdm9pZCBjcm9zc09yaWdpblJlZGlyZWN0UmVjZWl2ZWQoUmVzb3VyY2VM
b2FkZXIqLCBjb25zdCBVUkwmIHJlZGlyZWN0VVJMKTsKLSAgICAKLSAgICBXRUJDT1JFX0VYUE9S
VCB2aXJ0dWFsIHZvaWQgc2VydmVQZW5kaW5nUmVxdWVzdHMoUmVzb3VyY2VMb2FkUHJpb3JpdHkg
bWluaW11bVByaW9yaXR5ID0gUmVzb3VyY2VMb2FkUHJpb3JpdHk6OlZlcnlMb3cpOwotICAgIFdF
QkNPUkVfRVhQT1JUIHZpcnR1YWwgdm9pZCBzdXNwZW5kUGVuZGluZ1JlcXVlc3RzKCk7Ci0gICAg
V0VCQ09SRV9FWFBPUlQgdmlydHVhbCB2b2lkIHJlc3VtZVBlbmRpbmdSZXF1ZXN0cygpOworICAg
IFJlZlB0cjxXZWJDb3JlOjpTdWJyZXNvdXJjZUxvYWRlcj4gbG9hZFJlc291cmNlKFdlYkNvcmU6
OkZyYW1lKiwgV2ViQ29yZTo6Q2FjaGVkUmVzb3VyY2UqLCBjb25zdCBXZWJDb3JlOjpSZXNvdXJj
ZVJlcXVlc3QmLCBjb25zdCBXZWJDb3JlOjpSZXNvdXJjZUxvYWRlck9wdGlvbnMmKSBvdmVycmlk
ZTsKKyAgICB2b2lkIGxvYWRSZXNvdXJjZVN5bmNocm9ub3VzbHkoV2ViQ29yZTo6TmV0d29ya2lu
Z0NvbnRleHQqLCB1bnNpZ25lZCBsb25nLCBjb25zdCBXZWJDb3JlOjpSZXNvdXJjZVJlcXVlc3Qm
LCBXZWJDb3JlOjpTdG9yZWRDcmVkZW50aWFscywgV2ViQ29yZTo6Q2xpZW50Q3JlZGVudGlhbFBv
bGljeSwgV2ViQ29yZTo6UmVzb3VyY2VFcnJvciYsIFdlYkNvcmU6OlJlc291cmNlUmVzcG9uc2Um
LCBWZWN0b3I8Y2hhcj4mKSBvdmVycmlkZTsKKyAgICB2b2lkIHJlbW92ZShXZWJDb3JlOjpSZXNv
dXJjZUxvYWRlciopIG92ZXJyaWRlOworICAgIHZvaWQgc2V0RGVmZXJzTG9hZGluZyhXZWJDb3Jl
OjpSZXNvdXJjZUxvYWRlciosIGJvb2wpIG92ZXJyaWRlOworICAgIHZvaWQgY3Jvc3NPcmlnaW5S
ZWRpcmVjdFJlY2VpdmVkKFdlYkNvcmU6OlJlc291cmNlTG9hZGVyKiwgY29uc3QgV2ViQ29yZTo6
VVJMJiByZWRpcmVjdFVSTCkgb3ZlcnJpZGU7CiAgICAgCisgICAgdm9pZCBzZXJ2ZVBlbmRpbmdS
ZXF1ZXN0cyhXZWJDb3JlOjpSZXNvdXJjZUxvYWRQcmlvcml0eSBtaW5pbXVtUHJpb3JpdHkgPSBX
ZWJDb3JlOjpSZXNvdXJjZUxvYWRQcmlvcml0eTo6VmVyeUxvdykgb3ZlcnJpZGU7CisgICAgdm9p
ZCBzdXNwZW5kUGVuZGluZ1JlcXVlc3RzKCkgb3ZlcnJpZGU7CisgICAgdm9pZCByZXN1bWVQZW5k
aW5nUmVxdWVzdHMoKSBvdmVycmlkZTsKKworICAgIHZvaWQgY3JlYXRlUGluZ0hhbmRsZShXZWJD
b3JlOjpOZXR3b3JraW5nQ29udGV4dCosIFdlYkNvcmU6OlJlc291cmNlUmVxdWVzdCYsIGJvb2wg
c2hvdWxkVXNlQ3JlZGVudGlhbFN0b3JhZ2UpIG92ZXJyaWRlOworCiAgICAgYm9vbCBpc1Nlcmlh
bExvYWRpbmdFbmFibGVkKCkgY29uc3QgeyByZXR1cm4gbV9pc1NlcmlhbExvYWRpbmdFbmFibGVk
OyB9Ci0gICAgdmlydHVhbCB2b2lkIHNldFNlcmlhbExvYWRpbmdFbmFibGVkKGJvb2wgYikgeyBt
X2lzU2VyaWFsTG9hZGluZ0VuYWJsZWQgPSBiOyB9CisgICAgdm9pZCBzZXRTZXJpYWxMb2FkaW5n
RW5hYmxlZChib29sIGIpIHsgbV9pc1NlcmlhbExvYWRpbmdFbmFibGVkID0gYjsgfQogCi0gICAg
Y2xhc3MgU3VzcGVuZGVyIHsKLSAgICBwdWJsaWM6Ci0gICAgICAgIGV4cGxpY2l0IFN1c3BlbmRl
cihSZXNvdXJjZUxvYWRTY2hlZHVsZXImIHNjaGVkdWxlcikgOiBtX3NjaGVkdWxlcihzY2hlZHVs
ZXIpIHsgbV9zY2hlZHVsZXIuc3VzcGVuZFBlbmRpbmdSZXF1ZXN0cygpOyB9Ci0gICAgICAgIH5T
dXNwZW5kZXIoKSB7IG1fc2NoZWR1bGVyLnJlc3VtZVBlbmRpbmdSZXF1ZXN0cygpOyB9Ci0gICAg
cHJpdmF0ZToKLSAgICAgICAgUmVzb3VyY2VMb2FkU2NoZWR1bGVyJiBtX3NjaGVkdWxlcjsKLSAg
ICB9OworICAgIFJlZlB0cjxXZWJDb3JlOjpOZXRzY2FwZVBsdWdJblN0cmVhbUxvYWRlcj4gc2No
ZWR1bGVQbHVnaW5TdHJlYW1Mb2FkKFdlYkNvcmU6OkZyYW1lKiwgV2ViQ29yZTo6TmV0c2NhcGVQ
bHVnSW5TdHJlYW1Mb2FkZXJDbGllbnQqLCBjb25zdCBXZWJDb3JlOjpSZXNvdXJjZVJlcXVlc3Qm
KTsKIAogcHJvdGVjdGVkOgotICAgIFdFQkNPUkVfRVhQT1JUIFJlc291cmNlTG9hZFNjaGVkdWxl
cigpOwotICAgIFdFQkNPUkVfRVhQT1JUIHZpcnR1YWwgflJlc291cmNlTG9hZFNjaGVkdWxlcigp
OworICAgIHZpcnR1YWwgfldlYlJlc291cmNlTG9hZFNjaGVkdWxlcigpOwogCiBwcml2YXRlOgot
ICAgIHZvaWQgc2NoZWR1bGVMb2FkKFJlc291cmNlTG9hZGVyKik7CisgICAgdm9pZCBzY2hlZHVs
ZUxvYWQoV2ViQ29yZTo6UmVzb3VyY2VMb2FkZXIqKTsKICAgICB2b2lkIHNjaGVkdWxlU2VydmVQ
ZW5kaW5nUmVxdWVzdHMoKTsKICAgICB2b2lkIHJlcXVlc3RUaW1lckZpcmVkKCk7CiAKQEAgLTkw
LDIwICs3OSwyMCBAQCBwcml2YXRlOgogICAgICAgICB+SG9zdEluZm9ybWF0aW9uKCk7CiAgICAg
ICAgIAogICAgICAgICBjb25zdCBTdHJpbmcmIG5hbWUoKSBjb25zdCB7IHJldHVybiBtX25hbWU7
IH0KLSAgICAgICAgdm9pZCBzY2hlZHVsZShSZXNvdXJjZUxvYWRlciosIFJlc291cmNlTG9hZFBy
aW9yaXR5ID0gUmVzb3VyY2VMb2FkUHJpb3JpdHk6OlZlcnlMb3cpOwotICAgICAgICB2b2lkIGFk
ZExvYWRJblByb2dyZXNzKFJlc291cmNlTG9hZGVyKik7Ci0gICAgICAgIHZvaWQgcmVtb3ZlKFJl
c291cmNlTG9hZGVyKik7CisgICAgICAgIHZvaWQgc2NoZWR1bGUoV2ViQ29yZTo6UmVzb3VyY2VM
b2FkZXIqLCBXZWJDb3JlOjpSZXNvdXJjZUxvYWRQcmlvcml0eSA9IFdlYkNvcmU6OlJlc291cmNl
TG9hZFByaW9yaXR5OjpWZXJ5TG93KTsKKyAgICAgICAgdm9pZCBhZGRMb2FkSW5Qcm9ncmVzcyhX
ZWJDb3JlOjpSZXNvdXJjZUxvYWRlciopOworICAgICAgICB2b2lkIHJlbW92ZShXZWJDb3JlOjpS
ZXNvdXJjZUxvYWRlciopOwogICAgICAgICBib29sIGhhc1JlcXVlc3RzKCkgY29uc3Q7Ci0gICAg
ICAgIGJvb2wgbGltaXRSZXF1ZXN0cyhSZXNvdXJjZUxvYWRQcmlvcml0eSkgY29uc3Q7CisgICAg
ICAgIGJvb2wgbGltaXRSZXF1ZXN0cyhXZWJDb3JlOjpSZXNvdXJjZUxvYWRQcmlvcml0eSkgY29u
c3Q7CiAKLSAgICAgICAgdHlwZWRlZiBEZXF1ZTxSZWZQdHI8UmVzb3VyY2VMb2FkZXI+PiBSZXF1
ZXN0UXVldWU7Ci0gICAgICAgIFJlcXVlc3RRdWV1ZSYgcmVxdWVzdHNQZW5kaW5nKFJlc291cmNl
TG9hZFByaW9yaXR5IHByaW9yaXR5KSB7IHJldHVybiBtX3JlcXVlc3RzUGVuZGluZ1twcmlvcml0
eVRvSW5kZXgocHJpb3JpdHkpXTsgfQorICAgICAgICB0eXBlZGVmIERlcXVlPFJlZlB0cjxXZWJD
b3JlOjpSZXNvdXJjZUxvYWRlcj4+IFJlcXVlc3RRdWV1ZTsKKyAgICAgICAgUmVxdWVzdFF1ZXVl
JiByZXF1ZXN0c1BlbmRpbmcoV2ViQ29yZTo6UmVzb3VyY2VMb2FkUHJpb3JpdHkgcHJpb3JpdHkp
IHsgcmV0dXJuIG1fcmVxdWVzdHNQZW5kaW5nW3ByaW9yaXR5VG9JbmRleChwcmlvcml0eSldOyB9
CiAKICAgICBwcml2YXRlOgotICAgICAgICBzdGF0aWMgdW5zaWduZWQgcHJpb3JpdHlUb0luZGV4
KFJlc291cmNlTG9hZFByaW9yaXR5KTsKKyAgICAgICAgc3RhdGljIHVuc2lnbmVkIHByaW9yaXR5
VG9JbmRleChXZWJDb3JlOjpSZXNvdXJjZUxvYWRQcmlvcml0eSk7CiAKLSAgICAgICAgc3RkOjph
cnJheTxSZXF1ZXN0UXVldWUsIHJlc291cmNlTG9hZFByaW9yaXR5Q291bnQ+IG1fcmVxdWVzdHNQ
ZW5kaW5nOwotICAgICAgICB0eXBlZGVmIEhhc2hTZXQ8UmVmUHRyPFJlc291cmNlTG9hZGVyPj4g
UmVxdWVzdE1hcDsKKyAgICAgICAgc3RkOjphcnJheTxSZXF1ZXN0UXVldWUsIFdlYkNvcmU6OnJl
c291cmNlTG9hZFByaW9yaXR5Q291bnQ+IG1fcmVxdWVzdHNQZW5kaW5nOworICAgICAgICB0eXBl
ZGVmIEhhc2hTZXQ8UmVmUHRyPFdlYkNvcmU6OlJlc291cmNlTG9hZGVyPj4gUmVxdWVzdE1hcDsK
ICAgICAgICAgUmVxdWVzdE1hcCBtX3JlcXVlc3RzTG9hZGluZzsKICAgICAgICAgY29uc3QgU3Ry
aW5nIG1fbmFtZTsKICAgICAgICAgY29uc3QgdW5zaWduZWQgbV9tYXhSZXF1ZXN0c0luRmxpZ2h0
OwpAQCAtMTE0LDIxICsxMDMsMTcgQEAgcHJpdmF0ZToKICAgICAgICAgRmluZE9ubHkKICAgICB9
OwogICAgIAotICAgIEhvc3RJbmZvcm1hdGlvbiogaG9zdEZvclVSTChjb25zdCBVUkwmLCBDcmVh
dGVIb3N0UG9saWN5ID0gRmluZE9ubHkpOwotICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgc2VydmVQ
ZW5kaW5nUmVxdWVzdHMoSG9zdEluZm9ybWF0aW9uKiwgUmVzb3VyY2VMb2FkUHJpb3JpdHkpOwor
ICAgIEhvc3RJbmZvcm1hdGlvbiogaG9zdEZvclVSTChjb25zdCBXZWJDb3JlOjpVUkwmLCBDcmVh
dGVIb3N0UG9saWN5ID0gRmluZE9ubHkpOworICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgc2VydmVQ
ZW5kaW5nUmVxdWVzdHMoSG9zdEluZm9ybWF0aW9uKiwgV2ViQ29yZTo6UmVzb3VyY2VMb2FkUHJp
b3JpdHkpOwogCiAgICAgdHlwZWRlZiBIYXNoTWFwPFN0cmluZywgSG9zdEluZm9ybWF0aW9uKiwg
U3RyaW5nSGFzaD4gSG9zdE1hcDsKICAgICBIb3N0TWFwIG1faG9zdHM7CiAgICAgSG9zdEluZm9y
bWF0aW9uKiBtX25vbkhUVFBQcm90b2NvbEhvc3Q7CiAgICAgICAgIAotICAgIFRpbWVyIG1fcmVx
dWVzdFRpbWVyOworICAgIFdlYkNvcmU6OlRpbWVyIG1fcmVxdWVzdFRpbWVyOwogCiAgICAgdW5z
aWduZWQgbV9zdXNwZW5kUGVuZGluZ1JlcXVlc3RzQ291bnQ7CiAgICAgYm9vbCBtX2lzU2VyaWFs
TG9hZGluZ0VuYWJsZWQ7CiB9OwogCi1XRUJDT1JFX0VYUE9SVCBSZXNvdXJjZUxvYWRTY2hlZHVs
ZXIqIHJlc291cmNlTG9hZFNjaGVkdWxlcigpOwotCi19Ci0KICNlbmRpZgpJbmRleDogU291cmNl
L1dlYktpdC9XZWJLaXQudmN4cHJvai9XZWJLaXQvV2ViS2l0LnZjeHByb2oKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1dlYktpdC9XZWJLaXQudmN4cHJvai9XZWJLaXQvV2ViS2l0LnZjeHByb2oJKHJl
dmlzaW9uIDE5Mjg4MCkKKysrIFNvdXJjZS9XZWJLaXQvV2ViS2l0LnZjeHByb2ovV2ViS2l0L1dl
YktpdC52Y3hwcm9qCSh3b3JraW5nIGNvcHkpCkBAIC0zMTQsNiArMzE0LDcgQEAKICAgICA8Q2xD
b21waWxlIEluY2x1ZGU9Ii4uXC4uXFN0b3JhZ2VcV2ViU3RvcmFnZU5hbWVzcGFjZVByb3ZpZGVy
LmNwcCIgLz4KICAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXC4uXGNmXFdlYkNvcmVTdXBwb3J0
XFdlYkluc3BlY3RvckNsaWVudENGLmNwcCIgLz4KICAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4u
XC4uXFdlYkNvcmVTdXBwb3J0XFdlYlZpZXdHcm91cC5jcHAiIC8+CisgICAgPENsQ29tcGlsZSBJ
bmNsdWRlPSIuLlwuLlxXZWJDb3JlU3VwcG9ydFxXZWJSZXNvdXJjZUxvYWRTY2hlZHVsZXIuY3Bw
IiAvPgogICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cLi5cd2luXFBsdWdpbnNcbnBhcGkuY3Bw
IiAvPgogICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cLi5cd2luXFBsdWdpbnNcUGx1Z2luRGF0
YWJhc2UuY3BwIiAvPgogICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cLi5cd2luXFBsdWdpbnNc
UGx1Z2luRGVidWcuY3BwIiAvPgpAQCAtNDY5LDYgKzQ3MCw3IEBACiAgICAgPENsSW5jbHVkZSBJ
bmNsdWRlPSIuLlwuLlxTdG9yYWdlXFdlYkRhdGFiYXNlUHJvdmlkZXIuaCIgLz4KICAgICA8Q2xJ
bmNsdWRlIEluY2x1ZGU9Ii4uXC4uXFN0b3JhZ2VcV2ViU3RvcmFnZU5hbWVzcGFjZVByb3ZpZGVy
LmgiIC8+CiAgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlwuLlxXZWJDb3JlU3VwcG9ydFxXZWJW
aWV3R3JvdXAuaCIgLz4KKyAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXC4uXFdlYkNvcmVTdXBw
b3J0XFdlYlJlc291cmNlTG9hZFNjaGVkdWxlci5oIiAvPgogICAgIDxDbEluY2x1ZGUgSW5jbHVk
ZT0iLi5cLi5cd2luXFBsdWdpbnNcUGx1Z2luRGF0YWJhc2UuaCIgLz4KICAgICA8Q2xJbmNsdWRl
IEluY2x1ZGU9Ii4uXC4uXHdpblxQbHVnaW5zXFBsdWdpbkRlYnVnLmgiIC8+CiAgICAgPENsSW5j
bHVkZSBJbmNsdWRlPSIuLlwuLlx3aW5cUGx1Z2luc1xQbHVnaW5QYWNrYWdlLmgiIC8+CkluZGV4
OiBTb3VyY2UvV2ViS2l0L1dlYktpdC54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9XZWJLaXQvV2ViS2l0Lnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oJKHJl
dmlzaW9uIDE5Mjg4MCkKKysrIFNvdXJjZS9XZWJLaXQvV2ViS2l0Lnhjb2RlcHJvai9wcm9qZWN0
LnBieHByb2oJKHdvcmtpbmcgY29weSkKQEAgLTQ1NSw2ICs0NTUsOCBAQAogCQlFMTU2NjMxOTBG
QjYxQzFGMDBDMTk5Q0EgLyogV2ViRG93bmxvYWQubW0gaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBFMTU2NjMxODBGQjYxQzFGMDBDMTk5Q0EgLyogV2ViRG93
bmxvYWQubW0gKi87IH07CiAJCUUxNjk4MzYyMTEzNDZEMUIwMDg5NDExNSAvKiBQcm94eVJ1bnRp
bWVPYmplY3QuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9
IEUxNjk4MzYxMTEzNDZEMUIwMDg5NDExNSAvKiBQcm94eVJ1bnRpbWVPYmplY3QuaCAqLzsgfTsK
IAkJRTE2OTgzNkMxMTM0NkQ1NjAwODk0MTE1IC8qIFByb3h5UnVudGltZU9iamVjdC5tbSBpbiBT
b3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEUxNjk4MzZCMTEzNDZE
NTYwMDg5NDExNSAvKiBQcm94eVJ1bnRpbWVPYmplY3QubW0gKi87IH07CisJCUU0QUVGOTdCMUMw
REY0QkMwMEIwMTcyNyAvKiBXZWJSZXNvdXJjZUxvYWRTY2hlZHVsZXIuY3BwIGluIFNvdXJjZXMg
Ki8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRTRBRUY5NzkxQzBERjRCQzAwQjAx
NzI3IC8qIFdlYlJlc291cmNlTG9hZFNjaGVkdWxlci5jcHAgKi87IH07CisJCUU0QUVGOTdDMUMw
REY0QkMwMEIwMTcyNyAvKiBXZWJSZXNvdXJjZUxvYWRTY2hlZHVsZXIuaCBpbiBIZWFkZXJzICov
ID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEU0QUVGOTdBMUMwREY0QkMwMEIwMTcy
NyAvKiBXZWJSZXNvdXJjZUxvYWRTY2hlZHVsZXIuaCAqLzsgfTsKIAkJRUQ1Qjk1MjQxMTFCNzI1
QTAwNDcyMjk4IC8qIFdlYkxvY2FsaXphYmxlU3RyaW5ncy5tbSBpbiBTb3VyY2VzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEVENUI5NTIzMTExQjcyNUEwMDQ3MjI5OCAvKiBX
ZWJMb2NhbGl6YWJsZVN0cmluZ3MubW0gKi87IH07CiAJCUVEN0Y2RDhCMDk4MDY4MzUwMEMyMzVF
RCAvKiBXZWJOU0RhdGFFeHRyYXNQcml2YXRlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSBFRDdGNkQ4QTA5ODA2ODM1MDBDMjM1RUQgLyogV2ViTlNEYXRh
RXh0cmFzUHJpdmF0ZS5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7
IH07IH07CiAJCUY4MzRBQUQ3MEU2NEIxQzcwMEUyNzM3QyAvKiBXZWJUZXh0SXRlcmF0b3IuaCBp
biBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEY4MzRBQUQ1MEU2
NEIxQzcwMEUyNzM3QyAvKiBXZWJUZXh0SXRlcmF0b3IuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklC
VVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwpAQCAtODY4LDYgKzg3MCw4IEBACiAJCUUxNTY2MzE4
MEZCNjFDMUYwMEMxOTlDQSAvKiBXZWJEb3dubG9hZC5tbSAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Y3BwLm9iamNwcDsgcGF0aCA9IFdlYkRvd25sb2FkLm1tOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OwogCQlFMTY5ODM2MTExMzQ2RDFCMDA4OTQxMTUgLyogUHJveHlSdW50aW1lT2JqZWN0Lmgg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFByb3h5UnVudGltZU9iamVjdC5oOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlFMTY5ODM2QjExMzQ2RDU2MDA4OTQxMTUgLyog
UHJveHlSdW50aW1lT2JqZWN0Lm1tICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVF
bmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAub2JqY3BwOyBw
YXRoID0gUHJveHlSdW50aW1lT2JqZWN0Lm1tOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owor
CQlFNEFFRjk3OTFDMERGNEJDMDBCMDE3MjcgLyogV2ViUmVzb3VyY2VMb2FkU2NoZWR1bGVyLmNw
cCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBleHBsaWNpdEZpbGVUeXBlID0gc291cmNl
Y29kZS5jcHAub2JqY3BwOyBmaWxlRW5jb2RpbmcgPSA0OyBuYW1lID0gV2ViUmVzb3VyY2VMb2Fk
U2NoZWR1bGVyLmNwcDsgcGF0aCA9IFdlYkNvcmVTdXBwb3J0L1dlYlJlc291cmNlTG9hZFNjaGVk
dWxlci5jcHA7IHNvdXJjZVRyZWUgPSBTT1VSQ0VfUk9PVDsgfTsKKwkJRTRBRUY5N0ExQzBERjRC
QzAwQjAxNzI3IC8qIFdlYlJlc291cmNlTG9hZFNjaGVkdWxlci5oICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jLmg7IG5hbWUgPSBXZWJSZXNvdXJjZUxvYWRTY2hlZHVsZXIuaDsgcGF0aCA9IFdlYkNv
cmVTdXBwb3J0L1dlYlJlc291cmNlTG9hZFNjaGVkdWxlci5oOyBzb3VyY2VUcmVlID0gU09VUkNF
X1JPT1Q7IH07CiAJCUVEMjFCOTgxMDUyOEY3QUEwMDMyOTlBQyAvKiBXZWJEb2N1bWVudEludGVy
bmFsLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgaW5k
ZW50V2lkdGggPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0g
V2ViRG9jdW1lbnRJbnRlcm5hbC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB0YWJXaWR0aCA9
IDg7IHVzZXNUYWJzID0gMDsgfTsKIAkJRUQyQjI0NzQwMzNBMkRBODAwQzFBNTI2IC8qIFdlYk5T
UGFzdGVib2FyZEV4dHJhcy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDQ7IGluZGVudFdpZHRoID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmMuaDsgcGF0aCA9IFdlYk5TUGFzdGVib2FyZEV4dHJhcy5oOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB0YWJXaWR0aCA9IDg7IHVzZXNUYWJzID0gMDsgfTsKIAkJRUQyQjI0NzUwMzNBMkRBODAw
QzFBNTI2IC8qIFdlYk5TUGFzdGVib2FyZEV4dHJhcy5tbSAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBpbmRlbnRXaWR0aCA9IDQ7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jcHAub2JqY3BwOyBwYXRoID0gV2ViTlNQYXN0ZWJvYXJkRXh0cmFz
Lm1tOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB0YWJXaWR0aCA9IDg7IHVzZXNUYWJzID0gMDsg
fTsKQEAgLTE1OTUsNiArMTU5OSw4IEBACiAJCQkJMUFBODc5QjUxMUNCRTlCRjAwM0M2NjRGIC8q
IFdlYlBsYXRmb3JtU3RyYXRlZ2llcy5tbSAqLywKIAkJCQkxQTZBMjA4QzE4ODYxNTQ2MDBFNTBG
NUYgLyogV2ViUHJvZ3Jlc3NUcmFja2VyQ2xpZW50LmggKi8sCiAJCQkJMUE2QTIwOEIxODg2MTU0
NjAwRTUwRjVGIC8qIFdlYlByb2dyZXNzVHJhY2tlckNsaWVudC5tbSAqLywKKwkJCQlFNEFFRjk3
OTFDMERGNEJDMDBCMDE3MjcgLyogV2ViUmVzb3VyY2VMb2FkU2NoZWR1bGVyLmNwcCAqLywKKwkJ
CQlFNEFFRjk3QTFDMERGNEJDMDBCMDE3MjcgLyogV2ViUmVzb3VyY2VMb2FkU2NoZWR1bGVyLmgg
Ki8sCiAJCQkJQTVERUZDMDcxMUQ1MzMxQzAwODg1MjczIC8qIFdlYlNlY3VyaXR5T3JpZ2luLm1t
ICovLAogCQkJCUE1REVGQzA4MTFENTMzMUMwMDg4NTI3MyAvKiBXZWJTZWN1cml0eU9yaWdpbklu
dGVybmFsLmggKi8sCiAJCQkJQTVERUZDMDkxMUQ1MzMxQzAwODg1MjczIC8qIFdlYlNlY3VyaXR5
T3JpZ2luUHJpdmF0ZS5oICovLApAQCAtMTg4OCw2ICsxODk0LDcgQEAKIAkJCQlBMTBDMUQzQzE4
MjAyRkM1MDAzNjg4M0EgLyogV2ViTlNTdHJpbmdFeHRyYXNJUGhvbmUuaCBpbiBIZWFkZXJzICov
LAogCQkJCTkzOTgxMDdFMDgyNEJGMDEwMDhERjAzOCAvKiBXZWJOU1VSTEV4dHJhcy5oIGluIEhl
YWRlcnMgKi8sCiAJCQkJNjVFMEY4ODQwODUwMDkxNzAwN0U1Q0I5IC8qIFdlYk5TVVJMUmVxdWVz
dEV4dHJhcy5oIGluIEhlYWRlcnMgKi8sCisJCQkJRTRBRUY5N0MxQzBERjRCQzAwQjAxNzI3IC8q
IFdlYlJlc291cmNlTG9hZFNjaGVkdWxlci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJNjVFMEY5RTYw
ODUwMEYyMzAwN0U1Q0I5IC8qIFdlYk5TVXNlckRlZmF1bHRzRXh0cmFzLmggaW4gSGVhZGVycyAq
LywKIAkJCQk5Mzk4MTAyNDA4MjRCRjAxMDA4REYwMzggLyogV2ViTlNWaWV3RXh0cmFzLmggaW4g
SGVhZGVycyAqLywKIAkJCQk5Mzk4MTAyNTA4MjRCRjAxMDA4REYwMzggLyogV2ViTlNXaW5kb3dF
eHRyYXMuaCBpbiBIZWFkZXJzICovLApAQCAtMjIzNiw2ICsyMjQzLDcgQEAKIAkJCQlCQzdGODg5
RjEwQzlEMzBDMDBENjEzM0QgLyogV2ViR2VvbG9jYXRpb25Qb3NpdGlvbi5tbSBpbiBTb3VyY2Vz
ICovLAogCQkJCUExMEMxRDM3MTgyMDJGQzUwMDM2ODgzQSAvKiBXZWJHZW9sb2NhdGlvblByb3Zp
ZGVySU9TLm1tIGluIFNvdXJjZXMgKi8sCiAJCQkJOTM5ODExMTMwODI0QkYwMTAwOERGMDM4IC8q
IFdlYkhpc3RvcnkubW0gaW4gU291cmNlcyAqLywKKwkJCQlFNEFFRjk3QjFDMERGNEJDMDBCMDE3
MjcgLyogV2ViUmVzb3VyY2VMb2FkU2NoZWR1bGVyLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTkz
OTgxMEJEMDgyNEJGMDEwMDhERjAzOCAvKiBXZWJIaXN0b3J5SXRlbS5tbSBpbiBTb3VyY2VzICov
LAogCQkJCTFBQUY1RkMwMEVERTNBOTIwMDhEODgzRCAvKiBXZWJIb3N0ZWROZXRzY2FwZVBsdWdp
blZpZXcubW0gaW4gU291cmNlcyAqLywKIAkJCQk5Mzk4MTBGMzA4MjRCRjAxMDA4REYwMzggLyog
V2ViSFRNTFJlcHJlc2VudGF0aW9uLm1tIGluIFNvdXJjZXMgKi8sCkluZGV4OiBTb3VyY2UvV2Vi
S2l0L21hYy9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9tYWMvQ2hhbmdl
TG9nCShyZXZpc2lvbiAxOTI4ODApCisrKyBTb3VyY2UvV2ViS2l0L21hYy9DaGFuZ2VMb2cJKHdv
cmtpbmcgY29weSkKQEAgLTEsMyArMSwyOCBAQAorMjAxNS0xMi0wMiAgQW50dGkgS29pdmlzdG8g
IDxhbnR0aUBhcHBsZS5jb20+CisKKyAgICAgICAgTW92ZSBSZXNvdXJjZUxvYWRTY2hlZHVsZXIg
dG8gV2ViS2l0MQorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/
aWQ9MTUxNzQzCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAg
ICAgKiBQbHVnaW5zL0hvc3RlZC9Ib3N0ZWROZXRzY2FwZVBsdWdpblN0cmVhbS5tbToKKyAgICAg
ICAgKFdlYktpdDo6SG9zdGVkTmV0c2NhcGVQbHVnaW5TdHJlYW06OnN0YXJ0KToKKyAgICAgICAg
KFdlYktpdDo6SG9zdGVkTmV0c2NhcGVQbHVnaW5TdHJlYW06OnN0b3ApOgorICAgICAgICAqIFBs
dWdpbnMvV2ViTmV0c2NhcGVQbHVnaW5TdHJlYW0ubW06CisgICAgICAgIChXZWJOZXRzY2FwZVBs
dWdpblN0cmVhbTo6c3RhcnQpOgorICAgICAgICAoV2ViTmV0c2NhcGVQbHVnaW5TdHJlYW06OnN0
b3ApOgorICAgICAgICAqIFdlYkNvcmVTdXBwb3J0L1dlYlBsYXRmb3JtU3RyYXRlZ2llcy5oOgor
ICAgICAgICAqIFdlYkNvcmVTdXBwb3J0L1dlYlBsYXRmb3JtU3RyYXRlZ2llcy5tbToKKyAgICAg
ICAgKFdlYlBsYXRmb3JtU3RyYXRlZ2llczo6Y3JlYXRlTG9hZGVyU3RyYXRlZ3kpOgorICAgICAg
ICAoV2ViUGxhdGZvcm1TdHJhdGVnaWVzOjpjcmVhdGVQYXN0ZWJvYXJkU3RyYXRlZ3kpOgorICAg
ICAgICAoV2ViUGxhdGZvcm1TdHJhdGVnaWVzOjpjcmVhdGVQbHVnaW5TdHJhdGVneSk6CisgICAg
ICAgIChXZWJQbGF0Zm9ybVN0cmF0ZWdpZXM6OmNyZWF0ZUJsb2JSZWdpc3RyeSk6CisgICAgICAg
IChXZWJQbGF0Zm9ybVN0cmF0ZWdpZXM6OmNvb2tpZXNGb3JET00pOgorICAgICAgICAqIFdlYlZp
ZXcvV2ViVmlldy5tbToKKyAgICAgICAgKC1bV2ViVmlldyBfZGlzcGF0Y2hQZW5kaW5nTG9hZFJl
cXVlc3RzXSk6CisgICAgICAgICgrW1dlYlZpZXcgX3NldExvYWRSZXNvdXJjZXNTZXJpYWxseTpd
KToKKyAgICAgICAgKCtbV2ViVmlldyBfSFRUUFBpcGVsaW5pbmdFbmFibGVkXSk6CisKIDIwMTUt
MTEtMzAgIEthdGx5biBHcmFmZiAgPGtncmFmZkBhcHBsZS5jb20+CiAKICAgICAgICAgUmVuYW1l
IEFjdGl2ZURPTU9iamVjdC9ET01XaW5kb3cgUGFnZUNhY2hlU3VzcGVuc2lvbiBjb2RlIHRvIHN1
cHBvcnQgbW9yZSByZWFzb25zIGZvciBzdXNwZW5zaW9uCkluZGV4OiBTb3VyY2UvV2ViS2l0L21h
Yy9QbHVnaW5zL1dlYk5ldHNjYXBlUGx1Z2luU3RyZWFtLm1tCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9XZWJLaXQvbWFjL1BsdWdpbnMvV2ViTmV0c2NhcGVQbHVnaW5TdHJlYW0ubW0JKHJldmlzaW9u
IDE5Mjg4MCkKKysrIFNvdXJjZS9XZWJLaXQvbWFjL1BsdWdpbnMvV2ViTmV0c2NhcGVQbHVnaW5T
dHJlYW0ubW0JKHdvcmtpbmcgY29weSkKQEAgLTM3LDEzICszNywxNSBAQAogI2ltcG9ydCAiV2Vi
TlNVUkxSZXF1ZXN0RXh0cmFzLmgiCiAjaW1wb3J0ICJXZWJOZXRzY2FwZVBsdWdpblBhY2thZ2Uu
aCIKICNpbXBvcnQgIldlYk5ldHNjYXBlUGx1Z2luVmlldy5oIgorI2ltcG9ydCAiV2ViUmVzb3Vy
Y2VMb2FkU2NoZWR1bGVyLmgiCiAjaW1wb3J0IDxGb3VuZGF0aW9uL05TVVJMUmVzcG9uc2UuaD4K
ICNpbXBvcnQgPFdlYkNvcmUvRG9jdW1lbnQuaD4KICNpbXBvcnQgPFdlYkNvcmUvRG9jdW1lbnRM
b2FkZXIuaD4KICNpbXBvcnQgPFdlYkNvcmUvRnJhbWUuaD4KICNpbXBvcnQgPFdlYkNvcmUvRnJh
bWVMb2FkZXIuaD4KICNpbXBvcnQgPFdlYkNvcmUvSlNET01XaW5kb3dCYXNlLmg+Ci0jaW1wb3J0
IDxXZWJDb3JlL1Jlc291cmNlTG9hZFNjaGVkdWxlci5oPgorI2ltcG9ydCA8V2ViQ29yZS9Mb2Fk
ZXJTdHJhdGVneS5oPgorI2ltcG9ydCA8V2ViQ29yZS9QbGF0Zm9ybVN0cmF0ZWdpZXMuaD4KICNp
bXBvcnQgPFdlYkNvcmUvU2VjdXJpdHlPcmlnaW4uaD4KICNpbXBvcnQgPFdlYkNvcmUvU2VjdXJp
dHlQb2xpY3kuaD4KICNpbXBvcnQgPFdlYkNvcmUvV2ViQ29yZU9iakNFeHRyYXMuaD4KQEAgLTI4
NSw4ICsyODcsOCBAQCB2b2lkIFdlYk5ldHNjYXBlUGx1Z2luU3RyZWFtOjpzdGFydCgpCiAgICAg
QVNTRVJUKG1fcmVxdWVzdCk7CiAgICAgQVNTRVJUKCFtX2ZyYW1lTG9hZGVyKTsKICAgICBBU1NF
UlQoIW1fbG9hZGVyKTsKLSAgICAKLSAgICBtX2xvYWRlciA9IHJlc291cmNlTG9hZFNjaGVkdWxl
cigpLT5zY2hlZHVsZVBsdWdpblN0cmVhbUxvYWQoY29yZShbbV9wbHVnaW5WaWV3LmdldCgpIHdl
YkZyYW1lXSksIHRoaXMsIG1fcmVxdWVzdC5nZXQoKSk7CisKKyAgICBtX2xvYWRlciA9IHdlYlJl
c291cmNlTG9hZFNjaGVkdWxlcigpLnNjaGVkdWxlUGx1Z2luU3RyZWFtTG9hZChjb3JlKFttX3Bs
dWdpblZpZXcuZ2V0KCkgd2ViRnJhbWVdKSwgdGhpcywgbV9yZXF1ZXN0LmdldCgpKTsKIH0KIAog
dm9pZCBXZWJOZXRzY2FwZVBsdWdpblN0cmVhbTo6c3RvcCgpCkluZGV4OiBTb3VyY2UvV2ViS2l0
L21hYy9QbHVnaW5zL0hvc3RlZC9Ib3N0ZWROZXRzY2FwZVBsdWdpblN0cmVhbS5tbQo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvV2ViS2l0L21hYy9QbHVnaW5zL0hvc3RlZC9Ib3N0ZWROZXRzY2FwZVBs
dWdpblN0cmVhbS5tbQkocmV2aXNpb24gMTkyODgwKQorKysgU291cmNlL1dlYktpdC9tYWMvUGx1
Z2lucy9Ib3N0ZWQvSG9zdGVkTmV0c2NhcGVQbHVnaW5TdHJlYW0ubW0JKHdvcmtpbmcgY29weSkK
QEAgLTM2LDExICszNiwxMiBAQAogI2ltcG9ydCAiV2ViS2l0U3lzdGVtSW50ZXJmYWNlLmgiCiAj
aW1wb3J0ICJXZWJOU1VSTEV4dHJhcy5oIgogI2ltcG9ydCAiV2ViTlNVUkxSZXF1ZXN0RXh0cmFz
LmgiCisjaW1wb3J0ICJXZWJSZXNvdXJjZUxvYWRTY2hlZHVsZXIuaCIKICNpbXBvcnQgPFdlYkNv
cmUvRG9jdW1lbnQuaD4KICNpbXBvcnQgPFdlYkNvcmUvRG9jdW1lbnRMb2FkZXIuaD4KICNpbXBv
cnQgPFdlYkNvcmUvRnJhbWUuaD4KICNpbXBvcnQgPFdlYkNvcmUvRnJhbWVMb2FkZXIuaD4KLSNp
bXBvcnQgPFdlYkNvcmUvUmVzb3VyY2VMb2FkU2NoZWR1bGVyLmg+CisjaW1wb3J0IDxXZWJDb3Jl
L1BsYXRmb3JtU3RyYXRlZ2llcy5oPgogI2ltcG9ydCA8V2ViQ29yZS9TZWN1cml0eU9yaWdpbi5o
PgogI2ltcG9ydCA8V2ViQ29yZS9TZWN1cml0eVBvbGljeS5oPgogI2ltcG9ydCA8V2ViQ29yZS9X
ZWJDb3JlVVJMUmVzcG9uc2UuaD4KQEAgLTIyMCw4ICsyMjEsOCBAQCB2b2lkIEhvc3RlZE5ldHNj
YXBlUGx1Z2luU3RyZWFtOjpzdGFydCgpCiAgICAgQVNTRVJUKG1fcmVxdWVzdCk7CiAgICAgQVNT
RVJUKCFtX2ZyYW1lTG9hZGVyKTsKICAgICBBU1NFUlQoIW1fbG9hZGVyKTsKLSAgICAKLSAgICBt
X2xvYWRlciA9IHJlc291cmNlTG9hZFNjaGVkdWxlcigpLT5zY2hlZHVsZVBsdWdpblN0cmVhbUxv
YWQoY29yZShbbV9pbnN0YW5jZS0+cGx1Z2luVmlldygpIHdlYkZyYW1lXSksIHRoaXMsIG1fcmVx
dWVzdC5nZXQoKSk7CisKKyAgICBtX2xvYWRlciA9IHdlYlJlc291cmNlTG9hZFNjaGVkdWxlcigp
LnNjaGVkdWxlUGx1Z2luU3RyZWFtTG9hZChjb3JlKFttX2luc3RhbmNlLT5wbHVnaW5WaWV3KCkg
d2ViRnJhbWVdKSwgdGhpcywgbV9yZXF1ZXN0LmdldCgpKTsKIH0KIAogdm9pZCBIb3N0ZWROZXRz
Y2FwZVBsdWdpblN0cmVhbTo6c3RvcCgpCkluZGV4OiBTb3VyY2UvV2ViS2l0L21hYy9XZWJDb3Jl
U3VwcG9ydC9XZWJQbGF0Zm9ybVN0cmF0ZWdpZXMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
S2l0L21hYy9XZWJDb3JlU3VwcG9ydC9XZWJQbGF0Zm9ybVN0cmF0ZWdpZXMuaAkocmV2aXNpb24g
MTkyODgwKQorKysgU291cmNlL1dlYktpdC9tYWMvV2ViQ29yZVN1cHBvcnQvV2ViUGxhdGZvcm1T
dHJhdGVnaWVzLmgJKHdvcmtpbmcgY29weSkKQEAgLTM1LDcgKzM1LDcgQEAKIHN0cnVjdCBQYXN0
ZWJvYXJkSW1hZ2U7CiBzdHJ1Y3QgUGFzdGVib2FyZFdlYkNvbnRlbnQ7CiAKLWNsYXNzIFdlYlBs
YXRmb3JtU3RyYXRlZ2llcyA6IHB1YmxpYyBXZWJDb3JlOjpQbGF0Zm9ybVN0cmF0ZWdpZXMsIHBy
aXZhdGUgV2ViQ29yZTo6Q29va2llc1N0cmF0ZWd5LCBwcml2YXRlIFdlYkNvcmU6OkxvYWRlclN0
cmF0ZWd5LCBwcml2YXRlIFdlYkNvcmU6OlBhc3RlYm9hcmRTdHJhdGVneSwgcHJpdmF0ZSBXZWJD
b3JlOjpQbHVnaW5TdHJhdGVneSB7CitjbGFzcyBXZWJQbGF0Zm9ybVN0cmF0ZWdpZXMgOiBwdWJs
aWMgV2ViQ29yZTo6UGxhdGZvcm1TdHJhdGVnaWVzLCBwcml2YXRlIFdlYkNvcmU6OkNvb2tpZXNT
dHJhdGVneSwgcHJpdmF0ZSBXZWJDb3JlOjpQYXN0ZWJvYXJkU3RyYXRlZ3ksIHByaXZhdGUgV2Vi
Q29yZTo6UGx1Z2luU3RyYXRlZ3kgewogcHVibGljOgogICAgIHN0YXRpYyB2b2lkIGluaXRpYWxp
emVJZk5lY2Vzc2FyeSgpOwogICAgIApAQCAtNDcsNiArNDcsNyBAQCBwcml2YXRlOgogICAgIHZp
cnR1YWwgV2ViQ29yZTo6TG9hZGVyU3RyYXRlZ3kqIGNyZWF0ZUxvYWRlclN0cmF0ZWd5KCkgb3Zl
cnJpZGU7CiAgICAgdmlydHVhbCBXZWJDb3JlOjpQYXN0ZWJvYXJkU3RyYXRlZ3kqIGNyZWF0ZVBh
c3RlYm9hcmRTdHJhdGVneSgpIG92ZXJyaWRlOwogICAgIHZpcnR1YWwgV2ViQ29yZTo6UGx1Z2lu
U3RyYXRlZ3kqIGNyZWF0ZVBsdWdpblN0cmF0ZWd5KCkgb3ZlcnJpZGU7CisgICAgdmlydHVhbCBX
ZWJDb3JlOjpCbG9iUmVnaXN0cnkqIGNyZWF0ZUJsb2JSZWdpc3RyeSgpIG92ZXJyaWRlOwogCiAg
ICAgLy8gV2ViQ29yZTo6Q29va2llc1N0cmF0ZWd5CiAgICAgdmlydHVhbCBTdHJpbmcgY29va2ll
c0ZvckRPTShjb25zdCBXZWJDb3JlOjpOZXR3b3JrU3RvcmFnZVNlc3Npb24mLCBjb25zdCBXZWJD
b3JlOjpVUkwmIGZpcnN0UGFydHksIGNvbnN0IFdlYkNvcmU6OlVSTCYpIG92ZXJyaWRlOwpAQCAt
NTYsOCArNTcsNiBAQCBwcml2YXRlOgogICAgIHZpcnR1YWwgYm9vbCBnZXRSYXdDb29raWVzKGNv
bnN0IFdlYkNvcmU6Ok5ldHdvcmtTdG9yYWdlU2Vzc2lvbiYsIGNvbnN0IFdlYkNvcmU6OlVSTCYg
Zmlyc3RQYXJ0eSwgY29uc3QgV2ViQ29yZTo6VVJMJiwgVmVjdG9yPFdlYkNvcmU6OkNvb2tpZT4m
KSBvdmVycmlkZTsKICAgICB2aXJ0dWFsIHZvaWQgZGVsZXRlQ29va2llKGNvbnN0IFdlYkNvcmU6
Ok5ldHdvcmtTdG9yYWdlU2Vzc2lvbiYsIGNvbnN0IFdlYkNvcmU6OlVSTCYsIGNvbnN0IFN0cmlu
ZyYpIG92ZXJyaWRlOwogCi0gICAgLy8gV2ViQ29yZTo6TG9hZGVyU3RyYXRlZ3kKLSAgICAvLyAt
IFVzaW5nIGRlZmF1bHQgaW1wbGVtZW50YXRpb24uCiAKICAgICAvLyBXZWJDb3JlOjpQbHVnaW5T
dHJhdGVneQogICAgIHZpcnR1YWwgdm9pZCByZWZyZXNoUGx1Z2lucygpIG92ZXJyaWRlOwpAQCAt
NjgsOSArNjcsNiBAQCBwcml2YXRlOgogICAgIHZpcnR1YWwgdm9pZCBjbGVhclBsdWdpbkNsaWVu
dFBvbGljaWVzKCkgb3ZlcnJpZGU7CiAjZW5kaWYKIAotICAgIC8vIFdlYkNvcmU6OkxvYWRlclN0
cmF0ZWd5Ci0gICAgLy8gLSBVc2luZyBkZWZhdWx0IGltcGxlbWVudGF0aW9uLgotCiAgICAgLy8g
V2ViQ29yZTo6UGFzdGVib2FyZFN0cmF0ZWd5CiAjaWYgUExBVEZPUk0oSU9TKQogICAgIHZpcnR1
YWwgdm9pZCB3cml0ZVRvUGFzdGVib2FyZChjb25zdCBXZWJDb3JlOjpQYXN0ZWJvYXJkV2ViQ29u
dGVudCYpIG92ZXJyaWRlOwpJbmRleDogU291cmNlL1dlYktpdC9tYWMvV2ViQ29yZVN1cHBvcnQv
V2ViUGxhdGZvcm1TdHJhdGVnaWVzLm1tCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvbWFj
L1dlYkNvcmVTdXBwb3J0L1dlYlBsYXRmb3JtU3RyYXRlZ2llcy5tbQkocmV2aXNpb24gMTkyODgw
KQorKysgU291cmNlL1dlYktpdC9tYWMvV2ViQ29yZVN1cHBvcnQvV2ViUGxhdGZvcm1TdHJhdGVn
aWVzLm1tCSh3b3JraW5nIGNvcHkpCkBAIC0yOCw2ICsyOCw4IEBACiAjaW1wb3J0ICJXZWJGcmFt
ZU5ldHdvcmtpbmdDb250ZXh0LmgiCiAjaW1wb3J0ICJXZWJQbHVnaW5EYXRhYmFzZS5oIgogI2lt
cG9ydCAiV2ViUGx1Z2luUGFja2FnZS5oIgorI2ltcG9ydCAiV2ViUmVzb3VyY2VMb2FkU2NoZWR1
bGVyLmgiCisjaW1wb3J0IDxXZWJDb3JlL0Jsb2JSZWdpc3RyeUltcGwuaD4KICNpbXBvcnQgPFdl
YkNvcmUvQmxvY2tFeGNlcHRpb25zLmg+CiAjaW1wb3J0IDxXZWJDb3JlL0NvbG9yLmg+CiAjaW1w
b3J0IDxXZWJDb3JlL01haW5GcmFtZS5oPgpAQCAtNjIsNyArNjQsNyBAQCBDb29raWVzU3RyYXRl
Z3kqIFdlYlBsYXRmb3JtU3RyYXRlZ2llczo6CiAKIExvYWRlclN0cmF0ZWd5KiBXZWJQbGF0Zm9y
bVN0cmF0ZWdpZXM6OmNyZWF0ZUxvYWRlclN0cmF0ZWd5KCkKIHsKLSAgICByZXR1cm4gdGhpczsK
KyAgICByZXR1cm4gbmV3IFdlYlJlc291cmNlTG9hZFNjaGVkdWxlcjsKIH0KIAogUGFzdGVib2Fy
ZFN0cmF0ZWd5KiBXZWJQbGF0Zm9ybVN0cmF0ZWdpZXM6OmNyZWF0ZVBhc3RlYm9hcmRTdHJhdGVn
eSgpCkBAIC03NSw2ICs3NywxMSBAQCBQbHVnaW5TdHJhdGVneSogV2ViUGxhdGZvcm1TdHJhdGVn
aWVzOjpjCiAgICAgcmV0dXJuIHRoaXM7CiB9CiAKK0Jsb2JSZWdpc3RyeSogV2ViUGxhdGZvcm1T
dHJhdGVnaWVzOjpjcmVhdGVCbG9iUmVnaXN0cnkoKQoreworICAgIHJldHVybiBuZXcgV2ViQ29y
ZTo6QmxvYlJlZ2lzdHJ5SW1wbDsKK30KKwogU3RyaW5nIFdlYlBsYXRmb3JtU3RyYXRlZ2llczo6
Y29va2llc0ZvckRPTShjb25zdCBOZXR3b3JrU3RvcmFnZVNlc3Npb24mIHNlc3Npb24sIGNvbnN0
IFVSTCYgZmlyc3RQYXJ0eSwgY29uc3QgVVJMJiB1cmwpCiB7CiAgICAgcmV0dXJuIFdlYkNvcmU6
OmNvb2tpZXNGb3JET00oc2Vzc2lvbiwgZmlyc3RQYXJ0eSwgdXJsKTsKSW5kZXg6IFNvdXJjZS9X
ZWJLaXQvbWFjL1dlYlZpZXcvV2ViVmlldy5tbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0
L21hYy9XZWJWaWV3L1dlYlZpZXcubW0JKHJldmlzaW9uIDE5Mjg4MCkKKysrIFNvdXJjZS9XZWJL
aXQvbWFjL1dlYlZpZXcvV2ViVmlldy5tbQkod29ya2luZyBjb3B5KQpAQCAtOTUsNiArOTUsNyBA
QAogI2ltcG9ydCAiV2ViUHJlZmVyZW5jZUtleXNQcml2YXRlLmgiCiAjaW1wb3J0ICJXZWJQcmVm
ZXJlbmNlc1ByaXZhdGUuaCIKICNpbXBvcnQgIldlYlByb2dyZXNzVHJhY2tlckNsaWVudC5oIgor
I2ltcG9ydCAiV2ViUmVzb3VyY2VMb2FkU2NoZWR1bGVyLmgiCiAjaW1wb3J0ICJXZWJTY3JpcHRE
ZWJ1Z0RlbGVnYXRlLmgiCiAjaW1wb3J0ICJXZWJTY3JpcHRXb3JsZEludGVybmFsLmgiCiAjaW1w
b3J0ICJXZWJTZWxlY3Rpb25TZXJ2aWNlQ29udHJvbGxlci5oIgpAQCAtMTY3LDcgKzE2OCw2IEBA
CiAjaW1wb3J0IDxXZWJDb3JlL1JlbmRlclZpZXcuaD4KICNpbXBvcnQgPFdlYkNvcmUvUmVuZGVy
V2lkZ2V0Lmg+CiAjaW1wb3J0IDxXZWJDb3JlL1Jlc291cmNlSGFuZGxlLmg+Ci0jaW1wb3J0IDxX
ZWJDb3JlL1Jlc291cmNlTG9hZFNjaGVkdWxlci5oPgogI2ltcG9ydCA8V2ViQ29yZS9SZXNvdXJj
ZVJlcXVlc3QuaD4KICNpbXBvcnQgPFdlYkNvcmUvUnVudGltZUFwcGxpY2F0aW9uQ2hlY2tzLmg+
CiAjaW1wb3J0IDxXZWJDb3JlL1J1bnRpbWVFbmFibGVkRmVhdHVyZXMuaD4KQEAgLTc2MSw3ICs3
NjEsNyBAQCBzdGF0aWMgYm9vbCBzaG91bGRSZXN0cmljdFdpbmRvd0ZvY3VzKCkKIAogLSAodm9p
ZClfZGlzcGF0Y2hQZW5kaW5nTG9hZFJlcXVlc3RzCiB7Ci0gICAgcmVzb3VyY2VMb2FkU2NoZWR1
bGVyKCktPnNlcnZlUGVuZGluZ1JlcXVlc3RzKCk7CisgICAgd2ViUmVzb3VyY2VMb2FkU2NoZWR1
bGVyKCkuc2VydmVQZW5kaW5nUmVxdWVzdHMoKTsKIH0KIAogI2lmICFQTEFURk9STShJT1MpCkBA
IC0xNjE2LDkgKzE2MTYsOSBAQCAtICh2b2lkKV9kaWRGaW5pc2hTY3JvbGxpbmdPclpvb21pbmcK
IC0gKHZvaWQpX3NldFJlc291cmNlTG9hZFNjaGVkdWxlclN1c3BlbmRlZDooQk9PTClzdXNwZW5k
CiB7CiAgICAgaWYgKHN1c3BlbmQpCi0gICAgICAgIHJlc291cmNlTG9hZFNjaGVkdWxlcigpLT5z
dXNwZW5kUGVuZGluZ1JlcXVlc3RzKCk7CisgICAgICAgIHdlYlJlc291cmNlTG9hZFNjaGVkdWxl
cigpLnN1c3BlbmRQZW5kaW5nUmVxdWVzdHMoKTsKICAgICBlbHNlCi0gICAgICAgIHJlc291cmNl
TG9hZFNjaGVkdWxlcigpLT5yZXN1bWVQZW5kaW5nUmVxdWVzdHMoKTsKKyAgICAgICAgd2ViUmVz
b3VyY2VMb2FkU2NoZWR1bGVyKCkucmVzdW1lUGVuZGluZ1JlcXVlc3RzKCk7CiB9CiAKICsgKHZv
aWQpX3NldEFsbG93Q29va2llczooQk9PTClhbGxvdwpAQCAtNDQ4Miw3ICs0NDgyLDggQEAgLSAo
Qk9PTClzZWFyY2hGb3I6KE5TU3RyaW5nICopc3RyaW5nIGRpcgogKyAodm9pZClfc2V0TG9hZFJl
c291cmNlc1NlcmlhbGx5OihCT09MKXNlcmlhbGl6ZSAKIHsKICAgICBXZWJQbGF0Zm9ybVN0cmF0
ZWdpZXM6OmluaXRpYWxpemVJZk5lY2Vzc2FyeSgpOwotICAgIHJlc291cmNlTG9hZFNjaGVkdWxl
cigpLT5zZXRTZXJpYWxMb2FkaW5nRW5hYmxlZChzZXJpYWxpemUpOworCisgICAgd2ViUmVzb3Vy
Y2VMb2FkU2NoZWR1bGVyKCkuc2V0U2VyaWFsTG9hZGluZ0VuYWJsZWQoc2VyaWFsaXplKTsKIH0K
IAogKyAoQk9PTClfSFRUUFBpcGVsaW5pbmdFbmFibGVkCkluZGV4OiBTb3VyY2UvV2ViS2l0L3dp
bi9XZWJWaWV3LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L3dpbi9XZWJWaWV3LmNw
cAkocmV2aXNpb24gMTkyODgwKQorKysgU291cmNlL1dlYktpdC93aW4vV2ViVmlldy5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTM0LDcgKzM0LDYgQEAKICNpbmNsdWRlICJNYXJzaGFsbGluZ0hlbHBl
cnMuaCIKICNpbmNsdWRlICJQbHVnaW5EYXRhYmFzZS5oIgogI2luY2x1ZGUgIlBsdWdpblZpZXcu
aCIKLSNpbmNsdWRlICJSZXNvdXJjZUxvYWRTY2hlZHVsZXIuaCIKICNpbmNsdWRlICJTb2Z0TGlu
a2luZy5oIgogI2luY2x1ZGUgIlN1YmZyYW1lTG9hZGVyLmgiCiAjaW5jbHVkZSAiVGV4dEl0ZXJh
dG9yLmgiCkBAIC02Nyw2ICs2Niw3IEBACiAjaW5jbHVkZSAiV2ViTm90aWZpY2F0aW9uQ2VudGVy
LmgiCiAjaW5jbHVkZSAiV2ViUGxhdGZvcm1TdHJhdGVnaWVzLmgiCiAjaW5jbHVkZSAiV2ViUHJl
ZmVyZW5jZXMuaCIKKyNpbmNsdWRlICJXZWJSZXNvdXJjZUxvYWRTY2hlZHVsZXIuaCIKICNpbmNs
dWRlICJXZWJTY3JpcHRXb3JsZC5oIgogI2luY2x1ZGUgIldlYlN0b3JhZ2VOYW1lc3BhY2VQcm92
aWRlci5oIgogI2luY2x1ZGUgIldlYlZpZXdHcm91cC5oIgpAQCAtNzQ4Nyw3ICs3NDg3LDcgQEAg
SFJFU1VMVCBXZWJWaWV3OjpzZWxlY3RlZFJhbmdlRm9yVGVzdGluZwogSFJFU1VMVCBXZWJWaWV3
OjpzZXRMb2FkUmVzb3VyY2VzU2VyaWFsbHkoQk9PTCBzZXJpYWxpemUpCiB7CiAgICAgV2ViUGxh
dGZvcm1TdHJhdGVnaWVzOjppbml0aWFsaXplKCk7Ci0gICAgcmVzb3VyY2VMb2FkU2NoZWR1bGVy
KCktPnNldFNlcmlhbExvYWRpbmdFbmFibGVkKHNlcmlhbGl6ZSk7CisgICAgd2ViUmVzb3VyY2VM
b2FkU2NoZWR1bGVyKCkuc2V0U2VyaWFsTG9hZGluZ0VuYWJsZWQoc2VyaWFsaXplKTsKICAgICBy
ZXR1cm4gU19PSzsKIH0KIApAQCAtNzUwMyw3ICs3NTAzLDcgQEAgSFJFU1VMVCBXZWJWaWV3Ojpz
Y2FsZVdlYlZpZXcoZG91YmxlIHNjYQogCiBIUkVTVUxUIFdlYlZpZXc6OmRpc3BhdGNoUGVuZGlu
Z0xvYWRSZXF1ZXN0cygpCiB7Ci0gICAgcmVzb3VyY2VMb2FkU2NoZWR1bGVyKCktPnNlcnZlUGVu
ZGluZ1JlcXVlc3RzKCk7CisgICAgd2ViUmVzb3VyY2VMb2FkU2NoZWR1bGVyKCkuc2VydmVQZW5k
aW5nUmVxdWVzdHMoKTsKICAgICByZXR1cm4gU19PSzsKIH0KIApJbmRleDogU291cmNlL1dlYktp
dC93aW4vUGx1Z2lucy9QbHVnaW5TdHJlYW0uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJL
aXQvd2luL1BsdWdpbnMvUGx1Z2luU3RyZWFtLmNwcAkocmV2aXNpb24gMTkyODgwKQorKysgU291
cmNlL1dlYktpdC93aW4vUGx1Z2lucy9QbHVnaW5TdHJlYW0uY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC0zMiw5ICszMiw5IEBACiAjaW5jbHVkZSAiRnJhbWVMb2FkZXIuaCIKICNpbmNsdWRlICJIVFRQ
SGVhZGVyTmFtZXMuaCIKICNpbmNsdWRlICJQbHVnaW5EZWJ1Zy5oIgotI2luY2x1ZGUgIlJlc291
cmNlTG9hZFNjaGVkdWxlci5oIgogI2luY2x1ZGUgIlNoYXJlZEJ1ZmZlci5oIgogI2luY2x1ZGUg
IlN1YnJlc291cmNlTG9hZGVyLmgiCisjaW5jbHVkZSAiV2ViUmVzb3VyY2VMb2FkU2NoZWR1bGVy
LmgiCiAjaW5jbHVkZSA8d3RmL1N0cmluZ0V4dHJhcy5oPgogI2luY2x1ZGUgPHd0Zi90ZXh0L0NT
dHJpbmcuaD4KICNpbmNsdWRlIDx3dGYvdGV4dC9TdHJpbmdCdWlsZGVyLmg+CkBAIC05Niw3ICs5
Niw3IEBAIFBsdWdpblN0cmVhbTo6flBsdWdpblN0cmVhbSgpCiB2b2lkIFBsdWdpblN0cmVhbTo6
c3RhcnQoKQogewogICAgIEFTU0VSVCghbV9sb2FkTWFudWFsbHkpOwotICAgIG1fbG9hZGVyID0g
cmVzb3VyY2VMb2FkU2NoZWR1bGVyKCktPnNjaGVkdWxlUGx1Z2luU3RyZWFtTG9hZChtX2ZyYW1l
LCB0aGlzLCBtX3Jlc291cmNlUmVxdWVzdCk7CisgICAgbV9sb2FkZXIgPSB3ZWJSZXNvdXJjZUxv
YWRTY2hlZHVsZXIoKS5zY2hlZHVsZVBsdWdpblN0cmVhbUxvYWQobV9mcmFtZSwgdGhpcywgbV9y
ZXNvdXJjZVJlcXVlc3QpOwogfQogCiB2b2lkIFBsdWdpblN0cmVhbTo6c3RvcCgpCkluZGV4OiBT
b3VyY2UvV2ViS2l0L3dpbi9XZWJDb3JlU3VwcG9ydC9XZWJQbGF0Zm9ybVN0cmF0ZWdpZXMuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvd2luL1dlYkNvcmVTdXBwb3J0L1dlYlBsYXRm
b3JtU3RyYXRlZ2llcy5jcHAJKHJldmlzaW9uIDE5Mjg4MCkKKysrIFNvdXJjZS9XZWJLaXQvd2lu
L1dlYkNvcmVTdXBwb3J0L1dlYlBsYXRmb3JtU3RyYXRlZ2llcy5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTI4LDYgKzI4LDggQEAKICNpbmNsdWRlICJGcmFtZUxvYWRlci5oIgogI2luY2x1ZGUgIlBs
dWdpbkRhdGFiYXNlLmgiCiAjaW5jbHVkZSAiV2ViRnJhbWVOZXR3b3JraW5nQ29udGV4dC5oIgor
I2luY2x1ZGUgIldlYlJlc291cmNlTG9hZFNjaGVkdWxlci5oIgorI2luY2x1ZGUgPFdlYkNvcmUv
QmxvYlJlZ2lzdHJ5SW1wbC5oPgogI2luY2x1ZGUgPFdlYkNvcmUvUGFnZS5oPgogI2luY2x1ZGUg
PFdlYkNvcmUvUGFnZUdyb3VwLmg+CiAjaW5jbHVkZSA8V2ViQ29yZS9QbGF0Zm9ybUNvb2tpZUph
ci5oPgpAQCAtNTQsNyArNTYsNyBAQCBDb29raWVzU3RyYXRlZ3kqIFdlYlBsYXRmb3JtU3RyYXRl
Z2llczo6CiAKIExvYWRlclN0cmF0ZWd5KiBXZWJQbGF0Zm9ybVN0cmF0ZWdpZXM6OmNyZWF0ZUxv
YWRlclN0cmF0ZWd5KCkKIHsKLSAgICByZXR1cm4gdGhpczsKKyAgICByZXR1cm4gbmV3IFdlYlJl
c291cmNlTG9hZFNjaGVkdWxlcjsKIH0KIAogUGFzdGVib2FyZFN0cmF0ZWd5KiBXZWJQbGF0Zm9y
bVN0cmF0ZWdpZXM6OmNyZWF0ZVBhc3RlYm9hcmRTdHJhdGVneSgpCkBAIC02Nyw2ICs2OSwxMSBA
QCBQbHVnaW5TdHJhdGVneSogV2ViUGxhdGZvcm1TdHJhdGVnaWVzOjpjCiAgICAgcmV0dXJuIHRo
aXM7CiB9CiAKK0Jsb2JSZWdpc3RyeSogV2ViUGxhdGZvcm1TdHJhdGVnaWVzOjpjcmVhdGVCbG9i
UmVnaXN0cnkoKQoreworICAgIHJldHVybiBuZXcgQmxvYlJlZ2lzdHJ5SW1wbDsKK30KKwogU3Ry
aW5nIFdlYlBsYXRmb3JtU3RyYXRlZ2llczo6Y29va2llc0ZvckRPTShjb25zdCBOZXR3b3JrU3Rv
cmFnZVNlc3Npb24mIHNlc3Npb24sIGNvbnN0IFVSTCYgZmlyc3RQYXJ0eSwgY29uc3QgVVJMJiB1
cmwpCiB7CiAgICAgcmV0dXJuIFdlYkNvcmU6OmNvb2tpZXNGb3JET00oc2Vzc2lvbiwgZmlyc3RQ
YXJ0eSwgdXJsKTsKSW5kZXg6IFNvdXJjZS9XZWJLaXQvd2luL1dlYkNvcmVTdXBwb3J0L1dlYlBs
YXRmb3JtU3RyYXRlZ2llcy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvd2luL1dlYkNv
cmVTdXBwb3J0L1dlYlBsYXRmb3JtU3RyYXRlZ2llcy5oCShyZXZpc2lvbiAxOTI4ODApCisrKyBT
b3VyY2UvV2ViS2l0L3dpbi9XZWJDb3JlU3VwcG9ydC9XZWJQbGF0Zm9ybVN0cmF0ZWdpZXMuaAko
d29ya2luZyBjb3B5KQpAQCAtMzEsNyArMzEsNyBAQAogI2luY2x1ZGUgPFdlYkNvcmUvUGxhdGZv
cm1TdHJhdGVnaWVzLmg+CiAjaW5jbHVkZSA8V2ViQ29yZS9QbHVnaW5TdHJhdGVneS5oPgogCi1j
bGFzcyBXZWJQbGF0Zm9ybVN0cmF0ZWdpZXMgOiBwdWJsaWMgV2ViQ29yZTo6UGxhdGZvcm1TdHJh
dGVnaWVzLCBwcml2YXRlIFdlYkNvcmU6OkNvb2tpZXNTdHJhdGVneSwgcHJpdmF0ZSBXZWJDb3Jl
OjpMb2FkZXJTdHJhdGVneSwgcHJpdmF0ZSBXZWJDb3JlOjpQbHVnaW5TdHJhdGVneSB7CitjbGFz
cyBXZWJQbGF0Zm9ybVN0cmF0ZWdpZXMgOiBwdWJsaWMgV2ViQ29yZTo6UGxhdGZvcm1TdHJhdGVn
aWVzLCBwcml2YXRlIFdlYkNvcmU6OkNvb2tpZXNTdHJhdGVneSwgcHJpdmF0ZSBXZWJDb3JlOjpQ
bHVnaW5TdHJhdGVneSB7CiBwdWJsaWM6CiAgICAgc3RhdGljIHZvaWQgaW5pdGlhbGl6ZSgpOwog
ICAgIApAQCAtNDMsNiArNDMsNyBAQCBwcml2YXRlOgogICAgIHZpcnR1YWwgV2ViQ29yZTo6TG9h
ZGVyU3RyYXRlZ3kqIGNyZWF0ZUxvYWRlclN0cmF0ZWd5KCk7CiAgICAgdmlydHVhbCBXZWJDb3Jl
OjpQYXN0ZWJvYXJkU3RyYXRlZ3kqIGNyZWF0ZVBhc3RlYm9hcmRTdHJhdGVneSgpOwogICAgIHZp
cnR1YWwgV2ViQ29yZTo6UGx1Z2luU3RyYXRlZ3kqIGNyZWF0ZVBsdWdpblN0cmF0ZWd5KCk7Cisg
ICAgdmlydHVhbCBXZWJDb3JlOjpCbG9iUmVnaXN0cnkqIGNyZWF0ZUJsb2JSZWdpc3RyeSgpOwog
CiAgICAgLy8gV2ViQ29yZTo6Q29va2llc1N0cmF0ZWd5CiAgICAgdmlydHVhbCBTdHJpbmcgY29v
a2llc0ZvckRPTShjb25zdCBXZWJDb3JlOjpOZXR3b3JrU3RvcmFnZVNlc3Npb24mLCBjb25zdCBX
ZWJDb3JlOjpVUkwmIGZpcnN0UGFydHksIGNvbnN0IFdlYkNvcmU6OlVSTCYpOwo=
</data>
<flag name="review"
          id="291470"
          type_id="1"
          status="+"
          setter="achristensen"
    />
          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>266525</attachid>
            <date>2015-12-03 03:23:24 -0800</date>
            <delta_ts>2015-12-03 03:23:24 -0800</delta_ts>
            <desc>patch</desc>
            <filename>resourceloadscheduler-webkit-5.patch</filename>
            <type>text/plain</type>
            <size>136383</size>
            <attacher name="Antti Koivisto">koivisto</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDE5Mjg4MCkKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDYzIEBACisyMDE1LTEyLTAyICBBbnR0aSBL
b2l2aXN0byAgPGFudHRpQGFwcGxlLmNvbT4KKworICAgICAgICBNb3ZlIFJlc291cmNlTG9hZFNj
aGVkdWxlciB0byBXZWJLaXQxCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3df
YnVnLmNnaT9pZD0xNTE3NDMKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4K
KworICAgICAgICBJdCBpcyBubyBsb25nZXIgdXNlZCBieSBXZWJLaXQyLiBTaW1wbGlmeSB0aGUg
V2ViS2l0L1dlYkNvcmUgaW50ZXJmYWNlLgorCisgICAgICAgICogV2ViQ29yZS54Y29kZXByb2ov
cHJvamVjdC5wYnhwcm9qOgorICAgICAgICAqIGRvbS9Db250YWluZXJOb2RlLmNwcDoKKyAgICAg
ICAgKiBkb20vRG9jdW1lbnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6RG9jdW1lbnQ6OnN0eWxl
Rm9yRWxlbWVudElnbm9yaW5nUGVuZGluZ1N0eWxlc2hlZXRzKToKKyAgICAgICAgKiBkb20vRG9j
dW1lbnQuaDoKKyAgICAgICAgKiBsb2FkZXIvRG9jdW1lbnRMb2FkZXIuaDoKKyAgICAgICAgKiBs
b2FkZXIvTG9hZGVyU3RyYXRlZ3kuY3BwOgorICAgICAgICAoV2ViQ29yZTo6TG9hZGVyU3RyYXRl
Z3k6On5Mb2FkZXJTdHJhdGVneSk6CisgICAgICAgIChXZWJDb3JlOjpSZXNvdXJjZUxvYWRTdXNw
ZW5kZXI6OlJlc291cmNlTG9hZFN1c3BlbmRlcik6CisgICAgICAgIChXZWJDb3JlOjpSZXNvdXJj
ZUxvYWRTdXNwZW5kZXI6On5SZXNvdXJjZUxvYWRTdXNwZW5kZXIpOgorICAgICAgICAoV2ViQ29y
ZTo6TG9hZGVyU3RyYXRlZ3k6OnJlc291cmNlTG9hZFNjaGVkdWxlcik6IERlbGV0ZWQuCisgICAg
ICAgIChXZWJDb3JlOjpMb2FkZXJTdHJhdGVneTo6bG9hZFJlc291cmNlU3luY2hyb25vdXNseSk6
IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpMb2FkZXJTdHJhdGVneTo6Y3JlYXRlQmxvYlJl
Z2lzdHJ5KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkxvYWRlclN0cmF0ZWd5OjpjcmVh
dGVQaW5nSGFuZGxlKTogRGVsZXRlZC4KKyAgICAgICAgKiBsb2FkZXIvTG9hZGVyU3RyYXRlZ3ku
aDoKKworICAgICAgICAgICAgTG9hZGluZyBmdW5jdGlvbnMgaW1wbGVtZW50ZWQgb24gV2ViS2l0
IHNpZGUgbW92ZSB0byBwdXJlIHZpcnR1YWwgTG9hZGVyU3RyYXRlZ3kuCisKKyAgICAgICAgKiBs
b2FkZXIvUmVzb3VyY2VMb2FkU2NoZWR1bGVyLmNwcDogUmVtb3ZlZC4KKyAgICAgICAgKiBsb2Fk
ZXIvUmVzb3VyY2VMb2FkU2NoZWR1bGVyLmg6IFJlbW92ZWQuCisKKyAgICAgICAgICAgIFJlc291
cmNlTG9hZFNjaGVkdWxlciBtb3ZlcyB0byBXZWJLaXQxIGFzIFdlYlJlc291cmNlTG9hZFNjaGVk
dWxlci4KKworICAgICAgICAqIGxvYWRlci9SZXNvdXJjZUxvYWRlci5jcHA6CisgICAgICAgIChX
ZWJDb3JlOjpSZXNvdXJjZUxvYWRlcjo6ZmluaXNoTmV0d29ya0xvYWQpOgorICAgICAgICAoV2Vi
Q29yZTo6UmVzb3VyY2VMb2FkZXI6OnNldERlZmVyc0xvYWRpbmcpOgorICAgICAgICAoV2ViQ29y
ZTo6UmVzb3VyY2VMb2FkZXI6OmZyYW1lTG9hZGVyKToKKyAgICAgICAgKFdlYkNvcmU6OlJlc291
cmNlTG9hZGVyOjp3aWxsU3dpdGNoVG9TdWJzdGl0dXRlUmVzb3VyY2UpOgorICAgICAgICAoV2Vi
Q29yZTo6UmVzb3VyY2VMb2FkZXI6OndpbGxTZW5kUmVxdWVzdEludGVybmFsKToKKyAgICAgICAg
KiBsb2FkZXIvYXJjaGl2ZS9BcmNoaXZlUmVzb3VyY2VDb2xsZWN0aW9uLmg6CisgICAgICAgICog
bG9hZGVyL2NhY2hlL0NhY2hlZFJlc291cmNlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkNhY2hl
ZFJlc291cmNlOjpsb2FkKToKKyAgICAgICAgKiBsb2FkZXIvY2FjaGUvQ2FjaGVkUmVzb3VyY2VM
b2FkZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Q2FjaGVkUmVzb3VyY2VMb2FkZXI6OnBlcmZv
cm1Qb3N0TG9hZEFjdGlvbnMpOgorICAgICAgICAoV2ViQ29yZTo6Q2FjaGVkUmVzb3VyY2VMb2Fk
ZXI6OmluY3JlbWVudFJlcXVlc3RDb3VudCk6CisgICAgICAgICogcGxhdGZvcm0vUGxhdGZvcm1T
dHJhdGVnaWVzLmg6CisgICAgICAgIChXZWJDb3JlOjpQbGF0Zm9ybVN0cmF0ZWdpZXM6OnBsdWdp
blN0cmF0ZWd5KToKKyAgICAgICAgKFdlYkNvcmU6OlBsYXRmb3JtU3RyYXRlZ2llczo6YmxvYlJl
Z2lzdHJ5KToKKworICAgICAgICAgICAgTW92ZSBCbG9iUmVnaXN0cnkgZmFjdG9yeSBmdW5jdGlv
biBoZXJlIGZyb20gTG9hZGVyU3RyYXRlZ3kgYXMgdGhpcyBhbGxvd3MgbmV0d29yayBwcm9jZXNz
IHRvIGhhdmUgbnVsbCBsb2FkZXJTdHJhdGVneS4KKyAgICAgICAgICAgIChpdCBjb3VsZCBiZSBy
ZW5hbWVkIEJsb2JTdHJhdGVneSBmb3IgY29uc2lzdGVuY3kgbGF0ZXIpLgorCisgICAgICAgIChX
ZWJDb3JlOjpQbGF0Zm9ybVN0cmF0ZWdpZXM6OlBsYXRmb3JtU3RyYXRlZ2llcyk6CisgICAgICAg
ICogcGxhdGZvcm0vbmV0d29yay9CbG9iUmVnaXN0cnkuY3BwOgorICAgICAgICAoV2ViQ29yZTo6
YmxvYlJlZ2lzdHJ5KToKKyAgICAgICAgKFdlYkNvcmU6OkJsb2JSZWdpc3RyeTo6fkJsb2JSZWdp
c3RyeSk6CisgICAgICAgICogcGxhdGZvcm0vbmV0d29yay9SZXNvdXJjZVJlcXVlc3RCYXNlLmg6
CisgICAgICAgICogc3R5bGUvU3R5bGVSZXNvbHZlVHJlZS5jcHA6CisgICAgICAgIChXZWJDb3Jl
OjpTdHlsZTo6UG9zdFJlc29sdXRpb25DYWxsYmFja0Rpc2FibGVyOjpQb3N0UmVzb2x1dGlvbkNh
bGxiYWNrRGlzYWJsZXIpOgorICAgICAgICAoV2ViQ29yZTo6U3R5bGU6OlBvc3RSZXNvbHV0aW9u
Q2FsbGJhY2tEaXNhYmxlcjo6flBvc3RSZXNvbHV0aW9uQ2FsbGJhY2tEaXNhYmxlcik6CisKIDIw
MTUtMTItMDEgIENhcmxvcyBHYXJjaWEgQ2FtcG9zICA8Y2dhcmNpYUBpZ2FsaWEuY29tPgogCiAg
ICAgICAgIFtHVEtdIEFTU0VSVElPTiBGQUlMRUQ6IG1fdGFibGUgcnVubmluZyAvd2Via2l0Mi9C
YWNrRm9yd2FyZExpc3QvbmF2aWdhdGlvbiBpbiBEZWJ1ZyBidWlsZApJbmRleDogU291cmNlL1dl
YkNvcmUvQ01ha2VMaXN0cy50eHQKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvQ01ha2VM
aXN0cy50eHQJKHJldmlzaW9uIDE5Mjg4MCkKKysrIFNvdXJjZS9XZWJDb3JlL0NNYWtlTGlzdHMu
dHh0CSh3b3JraW5nIGNvcHkpCkBAIC0xOTUwLDcgKzE5NTAsNiBAQCBzZXQoV2ViQ29yZV9TT1VS
Q0VTCiAgICAgbG9hZGVyL1BvbGljeUNoZWNrZXIuY3BwCiAgICAgbG9hZGVyL1Byb2dyZXNzVHJh
Y2tlci5jcHAKICAgICBsb2FkZXIvUmVzb3VyY2VMb2FkTm90aWZpZXIuY3BwCi0gICAgbG9hZGVy
L1Jlc291cmNlTG9hZFNjaGVkdWxlci5jcHAKICAgICBsb2FkZXIvUmVzb3VyY2VMb2FkZXIuY3Bw
CiAgICAgbG9hZGVyL1NpbmtEb2N1bWVudC5jcHAKICAgICBsb2FkZXIvU3ViZnJhbWVMb2FkZXIu
Y3BwCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnZjeHByb2ovV2ViQ29yZS52Y3hwcm9q
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL1dlYkNvcmUudmN4cHJvai9XZWJDb3JlLnZj
eHByb2oJKHJldmlzaW9uIDE5Mjg4MCkKKysrIFNvdXJjZS9XZWJDb3JlL1dlYkNvcmUudmN4cHJv
ai9XZWJDb3JlLnZjeHByb2oJKHdvcmtpbmcgY29weSkKQEAgLTc0MTgsNyArNzQxOCw2IEBACiAg
ICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxsb2FkZXJcUmVzb3VyY2VMb2FkZXIuY3BwIiAvPgog
ICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cbG9hZGVyXGNmXFJlc291cmNlTG9hZGVyQ0ZOZXQu
Y3BwIiAvPgogICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cbG9hZGVyXFJlc291cmNlTG9hZE5v
dGlmaWVyLmNwcCIgLz4KLSAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXGxvYWRlclxSZXNvdXJj
ZUxvYWRTY2hlZHVsZXIuY3BwIiAvPgogICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cbG9hZGVy
XFNpbmtEb2N1bWVudC5jcHAiIC8+CiAgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxsb2FkZXJc
U3ViZnJhbWVMb2FkZXIuY3BwIiAvPgogICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cbG9hZGVy
XFN1YnJlc291cmNlTG9hZGVyLmNwcCIgLz4KQEAgLTIwODM5LDcgKzIwODM4LDYgQEAKICAgICA8
Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXGxvYWRlclxSZXNvdXJjZUxvYWRlci5oIiAvPgogICAgIDxD
bEluY2x1ZGUgSW5jbHVkZT0iLi5cbG9hZGVyXFJlc291cmNlTG9hZGVyT3B0aW9ucy5oIiAvPgog
ICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cbG9hZGVyXFJlc291cmNlTG9hZE5vdGlmaWVyLmgi
IC8+Ci0gICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxsb2FkZXJcUmVzb3VyY2VMb2FkU2NoZWR1
bGVyLmgiIC8+CiAgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxsb2FkZXJcU2lua0RvY3VtZW50
LmgiIC8+CiAgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxsb2FkZXJcU3ViZnJhbWVMb2FkZXIu
aCIgLz4KICAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXGxvYWRlclxTdWJyZXNvdXJjZUxvYWRl
ci5oIiAvPgpJbmRleDogU291cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5w
Ynhwcm9qCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3By
b2plY3QucGJ4cHJvagkocmV2aXNpb24gMTkyODgwKQorKysgU291cmNlL1dlYkNvcmUvV2ViQ29y
ZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCSh3b3JraW5nIGNvcHkpCkBAIC02MTY5LDggKzYx
NjksNiBAQAogCQlEMEJDNTQ0OTE0NDNBQzRBMDBFMTA1REEgLyogQ2FjaGVkU3R5bGVTaGVldENs
aWVudC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRDBC
QzU0NDgxNDQzQUM0QTAwRTEwNURBIC8qIENhY2hlZFN0eWxlU2hlZXRDbGllbnQuaCAqLzsgc2V0
dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQlEMEJENEY1QzE0MDg4
NTBGMDA2ODM5QjYgLyogRGljdGF0aW9uQ29tbWFuZElPUy5jcHAgaW4gU291cmNlcyAqLyA9IHtp
c2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBEMEJENEY1QTE0MDg4NTBGMDA2ODM5QjYgLyog
RGljdGF0aW9uQ29tbWFuZElPUy5jcHAgKi87IH07CiAJCUQwQkQ0RjVEMTQwODg1MEYwMDY4MzlC
NiAvKiBEaWN0YXRpb25Db21tYW5kSU9TLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWls
ZEZpbGU7IGZpbGVSZWYgPSBEMEJENEY1QjE0MDg4NTBGMDA2ODM5QjYgLyogRGljdGF0aW9uQ29t
bWFuZElPUy5oICovOyB9OwotCQlEMENFNThGODEyNUU0Q0MyMDBGM0YxOTkgLyogUmVzb3VyY2VM
b2FkU2NoZWR1bGVyLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmls
ZVJlZiA9IEQwQ0U1OEY2MTI1RTRDQzIwMEYzRjE5OSAvKiBSZXNvdXJjZUxvYWRTY2hlZHVsZXIu
Y3BwICovOyB9OwotCQlEMENFNThGOTEyNUU0Q0MyMDBGM0YxOTkgLyogUmVzb3VyY2VMb2FkU2No
ZWR1bGVyLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBE
MENFNThGNzEyNUU0Q0MyMDBGM0YxOTkgLyogUmVzb3VyY2VMb2FkU2NoZWR1bGVyLmggKi87IHNl
dHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJRDBFREE3NzQxNDNF
MzAzQzAwMjhFMzgzIC8qIENhY2hlZFJhd1Jlc291cmNlLmNwcCBpbiBTb3VyY2VzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEQwRURBNzcyMTQzRTMwM0MwMDI4RTM4MyAvKiBD
YWNoZWRSYXdSZXNvdXJjZS5jcHAgKi87IH07CiAJCUQwRURBNzc1MTQzRTMwM0MwMDI4RTM4MyAv
KiBDYWNoZWRSYXdSZXNvdXJjZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gRDBFREE3NzMxNDNFMzAzQzAwMjhFMzgzIC8qIENhY2hlZFJhd1Jlc291cmNl
LmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJRDBG
RjJBNUQxMUY4QzQ1QTAwN0U3NEUwIC8qIFBpbmdMb2FkZXIuY3BwIGluIFNvdXJjZXMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRDBGRjJBNUIxMUY4QzQ1QTAwN0U3NEUwIC8q
IFBpbmdMb2FkZXIuY3BwICovOyB9OwpAQCAtMTQwNjYsOCArMTQwNjQsNiBAQAogCQlEMEJDNTQ0
ODE0NDNBQzRBMDBFMTA1REEgLyogQ2FjaGVkU3R5bGVTaGVldENsaWVudC5oICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jLmg7IHBhdGggPSBDYWNoZWRTdHlsZVNoZWV0Q2xpZW50Lmg7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CiAJCUQwQkQ0RjVBMTQwODg1MEYwMDY4MzlCNiAvKiBEaWN0YXRp
b25Db21tYW5kSU9TLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IERp
Y3RhdGlvbkNvbW1hbmRJT1MuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlEMEJE
NEY1QjE0MDg4NTBGMDA2ODM5QjYgLyogRGljdGF0aW9uQ29tbWFuZElPUy5oICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jLmg7IHBhdGggPSBEaWN0YXRpb25Db21tYW5kSU9TLmg7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07Ci0JCUQwQ0U1OEY2MTI1RTRDQzIwMEYzRjE5OSAvKiBSZXNvdXJjZUxv
YWRTY2hlZHVsZXIuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGlu
ZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gUmVz
b3VyY2VMb2FkU2NoZWR1bGVyLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJRDBD
RTU4RjcxMjVFNENDMjAwRjNGMTk5IC8qIFJlc291cmNlTG9hZFNjaGVkdWxlci5oICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBSZXNvdXJjZUxvYWRTY2hlZHVsZXIuaDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJRDBFREE3NzIxNDNFMzAzQzAwMjhFMzgzIC8qIENhY2hl
ZFJhd1Jlc291cmNlLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IENh
Y2hlZFJhd1Jlc291cmNlLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJRDBFREE3
NzMxNDNFMzAzQzAwMjhFMzgzIC8qIENhY2hlZFJhd1Jlc291cmNlLmggKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmMuaDsgcGF0aCA9IENhY2hlZFJhd1Jlc291cmNlLmg7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CiAJCUQwRkYyQTVCMTFGOEM0NUEwMDdFNzRFMCAvKiBQaW5nTG9hZGVyLmNwcCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFBpbmdMb2FkZXIuY3BwOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtMjI0NTgsOCArMjI0NTQsNiBAQAogCQkJCTUxRUU3
QjM3MUFBNTBCMDUwMEY5MkIyMSAvKiBSZXNvdXJjZUxvYWRJbmZvLmggKi8sCiAJCQkJOTczRTMy
NTQxMDg4M0I3QzAwNUJDNDkzIC8qIFJlc291cmNlTG9hZE5vdGlmaWVyLmNwcCAqLywKIAkJCQk5
NzNFMzI1NTEwODgzQjdDMDA1QkM0OTMgLyogUmVzb3VyY2VMb2FkTm90aWZpZXIuaCAqLywKLQkJ
CQlEMENFNThGNjEyNUU0Q0MyMDBGM0YxOTkgLyogUmVzb3VyY2VMb2FkU2NoZWR1bGVyLmNwcCAq
LywKLQkJCQlEMENFNThGNzEyNUU0Q0MyMDBGM0YxOTkgLyogUmVzb3VyY2VMb2FkU2NoZWR1bGVy
LmggKi8sCiAJCQkJNTEzMjdENUYxMUEzM0EyQjAwNEY5RDY1IC8qIFNpbmtEb2N1bWVudC5jcHAg
Ki8sCiAJCQkJNTEzMjdENUUxMUEzM0EyQjAwNEY5RDY1IC8qIFNpbmtEb2N1bWVudC5oICovLAog
CQkJCUQwMDBFRDI1MTFDMUI5Q0QwMEM0NzcyNiAvKiBTdWJmcmFtZUxvYWRlci5jcHAgKi8sCkBA
IC0yNzI4NCw3ICsyNzI3OCw2IEBACiAJCQkJNTFFRTdCMzgxQUE1MEIwNTAwRjkyQjIxIC8qIFJl
c291cmNlTG9hZEluZm8uaCBpbiBIZWFkZXJzICovLAogCQkJCTk3M0UzMjU3MTA4ODNCN0MwMDVC
QzQ5MyAvKiBSZXNvdXJjZUxvYWROb3RpZmllci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJRTQyOTVG
QTQxMkIwNjE0RTAwRDFBQ0UwIC8qIFJlc291cmNlTG9hZFByaW9yaXR5LmggaW4gSGVhZGVycyAq
LywKLQkJCQlEMENFNThGOTEyNUU0Q0MyMDBGM0YxOTkgLyogUmVzb3VyY2VMb2FkU2NoZWR1bGVy
LmggaW4gSGVhZGVycyAqLywKIAkJCQk4QTgxQkY4NTExRENGRDkwMDBEQTJCOTggLyogUmVzb3Vy
Y2VMb2FkVGltaW5nLmggaW4gSGVhZGVycyAqLywKIAkJCQk3RUU2ODQ2RDEyRDI2RTM4MDBFNzk0
MTUgLyogUmVzb3VyY2VSZXF1ZXN0LmggaW4gSGVhZGVycyAqLywKIAkJCQk1MTRDNzY3RDBDRTky
M0ExMDA3RUYzQ0QgLyogUmVzb3VyY2VSZXF1ZXN0QmFzZS5oIGluIEhlYWRlcnMgKi8sCkBAIC0z
MDg2MSw3ICszMDg1NCw2IEBACiAJCQkJNTFBQTNGNkYwQkQ1QUE5RTAwODkyOTcxIC8qIFJlc291
cmNlTG9hZGVyTWFjLm1tIGluIFNvdXJjZXMgKi8sCiAJCQkJNTFFRTdCM0ExQUE1MTIzMTAwRjky
QjIxIC8qIFJlc291cmNlTG9hZEluZm8uY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJOTczRTMyNTYx
MDg4M0I3QzAwNUJDNDkzIC8qIFJlc291cmNlTG9hZE5vdGlmaWVyLmNwcCBpbiBTb3VyY2VzICov
LAotCQkJCUQwQ0U1OEY4MTI1RTRDQzIwMEYzRjE5OSAvKiBSZXNvdXJjZUxvYWRTY2hlZHVsZXIu
Y3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJNTE0Qzc2N0MwQ0U5MjNBMTAwN0VGM0NEIC8qIFJlc291
cmNlUmVxdWVzdEJhc2UuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJN0VFNjg0NkUxMkQyNkUzODAw
RTc5NDE1IC8qIFJlc291cmNlUmVxdWVzdENGTmV0LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTdF
N0RFMUZEMTk1Q0VGMjYwMDM1MzYzQiAvKiBSZXNvdXJjZVJlcXVlc3RDb2NvYS5tbSBpbiBTb3Vy
Y2VzICovLApJbmRleDogU291cmNlL1dlYkNvcmUvZG9tL0NvbnRhaW5lck5vZGUuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2RvbS9Db250YWluZXJOb2RlLmNwcAkocmV2aXNpb24g
MTkyODgwKQorKysgU291cmNlL1dlYkNvcmUvZG9tL0NvbnRhaW5lck5vZGUuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC00OSw3ICs0OSw2IEBACiAjaW5jbHVkZSAiUmVuZGVyQm94LmgiCiAjaW5jbHVk
ZSAiUmVuZGVyVGhlbWUuaCIKICNpbmNsdWRlICJSZW5kZXJXaWRnZXQuaCIKLSNpbmNsdWRlICJS
ZXNvdXJjZUxvYWRTY2hlZHVsZXIuaCIKICNpbmNsdWRlICJSb290SW5saW5lQm94LmgiCiAjaW5j
bHVkZSAiU1ZHRG9jdW1lbnRFeHRlbnNpb25zLmgiCiAjaW5jbHVkZSAiU1ZHRWxlbWVudC5oIgpJ
bmRleDogU291cmNlL1dlYkNvcmUvZG9tL0RvY3VtZW50LmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvV2ViQ29yZS9kb20vRG9jdW1lbnQuY3BwCShyZXZpc2lvbiAxOTI4ODApCisrKyBTb3VyY2Uv
V2ViQ29yZS9kb20vRG9jdW1lbnQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMjYsNyArMTI2LDYg
QEAKICNpbmNsdWRlICJSZW5kZXJMYXllckNvbXBvc2l0b3IuaCIKICNpbmNsdWRlICJSZW5kZXJW
aWV3LmgiCiAjaW5jbHVkZSAiUmVuZGVyV2lkZ2V0LmgiCi0jaW5jbHVkZSAiUmVzb3VyY2VMb2Fk
U2NoZWR1bGVyLmgiCiAjaW5jbHVkZSAiUnVudGltZUVuYWJsZWRGZWF0dXJlcy5oIgogI2luY2x1
ZGUgIlNWR0RvY3VtZW50RXh0ZW5zaW9ucy5oIgogI2luY2x1ZGUgIlNWR0VsZW1lbnQuaCIKQEAg
LTE5NTksNyArMTk1OCw3IEBAIFJlZjxSZW5kZXJTdHlsZT4gRG9jdW1lbnQ6OnN0eWxlRm9yRWxl
bWUKICAgICBBU1NFUlQoJmVsZW1lbnQuZG9jdW1lbnQoKSA9PSB0aGlzKTsKIAogICAgIC8vIE9u
IGlPUyByZXF1ZXN0IGRlbGVnYXRlcyBjYWxsZWQgZHVyaW5nIHN0eWxlRm9yRWxlbWVudCBtYXkg
cmVzdWx0IGluIHJlLWVudGVyaW5nIFdlYktpdCBhbmQga2lsbGluZyB0aGUgc3R5bGUgcmVzb2x2
ZXIuCi0gICAgUmVzb3VyY2VMb2FkU2NoZWR1bGVyOjpTdXNwZW5kZXIgc3VzcGVuZGVyKCpwbGF0
Zm9ybVN0cmF0ZWdpZXMoKS0+bG9hZGVyU3RyYXRlZ3koKS0+cmVzb3VyY2VMb2FkU2NoZWR1bGVy
KCkpOworICAgIFJlc291cmNlTG9hZFN1c3BlbmRlciBzdXNwZW5kZXI7CiAKICAgICBUZW1wb3Jh
cnlDaGFuZ2U8Ym9vbD4gY2hhbmdlKG1faWdub3JlUGVuZGluZ1N0eWxlc2hlZXRzLCB0cnVlKTsK
ICAgICByZXR1cm4gZWxlbWVudC5yZXNvbHZlU3R5bGUocGFyZW50U3R5bGUpOwpJbmRleDogU291
cmNlL1dlYkNvcmUvZG9tL0RvY3VtZW50LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUv
ZG9tL0RvY3VtZW50LmgJKHJldmlzaW9uIDE5Mjg4MCkKKysrIFNvdXJjZS9XZWJDb3JlL2RvbS9E
b2N1bWVudC5oCSh3b3JraW5nIGNvcHkpCkBAIC01MTEsNyArNTExLDcgQEAgcHVibGljOgogCiAg
ICAgdm9pZCBub3RpZnlSZW1vdmVQZW5kaW5nU2hlZXRJZk5lZWRlZCgpOwogCi0gICAgYm9vbCBo
YXZlU3R5bGVzaGVldHNMb2FkZWQoKSBjb25zdDsKKyAgICBXRUJDT1JFX0VYUE9SVCBib29sIGhh
dmVTdHlsZXNoZWV0c0xvYWRlZCgpIGNvbnN0OwogCiAgICAgLy8gVGhpcyBpcyBhIERPTSBmdW5j
dGlvbi4KICAgICBTdHlsZVNoZWV0TGlzdCYgc3R5bGVTaGVldHMoKTsKSW5kZXg6IFNvdXJjZS9X
ZWJDb3JlL2xvYWRlci9Eb2N1bWVudExvYWRlci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJD
b3JlL2xvYWRlci9Eb2N1bWVudExvYWRlci5oCShyZXZpc2lvbiAxOTI4ODApCisrKyBTb3VyY2Uv
V2ViQ29yZS9sb2FkZXIvRG9jdW1lbnRMb2FkZXIuaAkod29ya2luZyBjb3B5KQpAQCAtMTYxLDcg
KzE2MSw3IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKICAgICAgICAgdm9pZCBzY2hlZHVsZVN1YnN0
aXR1dGVSZXNvdXJjZUxvYWQoUmVzb3VyY2VMb2FkZXImLCBTdWJzdGl0dXRlUmVzb3VyY2UmKTsK
IAogICAgICAgICAvLyBSZXR1cm4gdGhlIEFyY2hpdmVSZXNvdXJjZSBmb3IgdGhlIFVSTCBvbmx5
IHdoZW4gbG9hZGluZyBhbiBBcmNoaXZlCi0gICAgICAgIEFyY2hpdmVSZXNvdXJjZSogYXJjaGl2
ZVJlc291cmNlRm9yVVJMKGNvbnN0IFVSTCYpIGNvbnN0OworICAgICAgICBXRUJDT1JFX0VYUE9S
VCBBcmNoaXZlUmVzb3VyY2UqIGFyY2hpdmVSZXNvdXJjZUZvclVSTChjb25zdCBVUkwmKSBjb25z
dDsKIAogICAgICAgICBXRUJDT1JFX0VYUE9SVCBQYXNzUmVmUHRyPEFyY2hpdmVSZXNvdXJjZT4g
bWFpblJlc291cmNlKCkgY29uc3Q7CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2xvYWRlci9Mb2Fk
ZXJTdHJhdGVneS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvbG9hZGVyL0xvYWRl
clN0cmF0ZWd5LmNwcAkocmV2aXNpb24gMTkyODgwKQorKysgU291cmNlL1dlYkNvcmUvbG9hZGVy
L0xvYWRlclN0cmF0ZWd5LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0g
KiBDb3B5cmlnaHQgKEMpIDIwMTIgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICog
Q29weXJpZ2h0IChDKSAyMDEyLCAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
ICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1z
LCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRl
ZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMjYsMzIgKzI2LDI0IEBACiAjaW5j
bHVkZSAiY29uZmlnLmgiCiAjaW5jbHVkZSAiTG9hZGVyU3RyYXRlZ3kuaCIKIAotI2luY2x1ZGUg
IkJsb2JSZWdpc3RyeUltcGwuaCIKLSNpbmNsdWRlICJQaW5nSGFuZGxlLmgiCi0jaW5jbHVkZSAi
UmVzb3VyY2VIYW5kbGUuaCIKLSNpbmNsdWRlICJSZXNvdXJjZUxvYWRTY2hlZHVsZXIuaCIKKyNp
bmNsdWRlICJQbGF0Zm9ybVN0cmF0ZWdpZXMuaCIKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi1S
ZXNvdXJjZUxvYWRTY2hlZHVsZXIqIExvYWRlclN0cmF0ZWd5OjpyZXNvdXJjZUxvYWRTY2hlZHVs
ZXIoKQorTG9hZGVyU3RyYXRlZ3k6On5Mb2FkZXJTdHJhdGVneSgpCiB7Ci0gICAgcmV0dXJuIFdl
YkNvcmU6OnJlc291cmNlTG9hZFNjaGVkdWxlcigpOwogfQogCi12b2lkIExvYWRlclN0cmF0ZWd5
Ojpsb2FkUmVzb3VyY2VTeW5jaHJvbm91c2x5KE5ldHdvcmtpbmdDb250ZXh0KiBjb250ZXh0LCB1
bnNpZ25lZCBsb25nLCBjb25zdCBSZXNvdXJjZVJlcXVlc3QmIHJlcXVlc3QsIFN0b3JlZENyZWRl
bnRpYWxzIHN0b3JlZENyZWRlbnRpYWxzLCBDbGllbnRDcmVkZW50aWFsUG9saWN5LCBSZXNvdXJj
ZUVycm9yJiBlcnJvciwgUmVzb3VyY2VSZXNwb25zZSYgcmVzcG9uc2UsIFZlY3RvcjxjaGFyPiYg
ZGF0YSkKK1Jlc291cmNlTG9hZFN1c3BlbmRlcjo6UmVzb3VyY2VMb2FkU3VzcGVuZGVyKCkKIHsK
LSAgICBSZXNvdXJjZUhhbmRsZTo6bG9hZFJlc291cmNlU3luY2hyb25vdXNseShjb250ZXh0LCBy
ZXF1ZXN0LCBzdG9yZWRDcmVkZW50aWFscywgZXJyb3IsIHJlc3BvbnNlLCBkYXRhKTsKKyAgICBw
bGF0Zm9ybVN0cmF0ZWdpZXMoKS0+bG9hZGVyU3RyYXRlZ3koKS0+c3VzcGVuZFBlbmRpbmdSZXF1
ZXN0cygpOwogfQogCi1CbG9iUmVnaXN0cnkqIExvYWRlclN0cmF0ZWd5OjpjcmVhdGVCbG9iUmVn
aXN0cnkoKQorUmVzb3VyY2VMb2FkU3VzcGVuZGVyOjp+UmVzb3VyY2VMb2FkU3VzcGVuZGVyKCkK
IHsKLSAgICByZXR1cm4gbmV3IEJsb2JSZWdpc3RyeUltcGw7Ci19Ci0KLXZvaWQgTG9hZGVyU3Ry
YXRlZ3k6OmNyZWF0ZVBpbmdIYW5kbGUoTmV0d29ya2luZ0NvbnRleHQqIG5ldHdvcmtpbmdDb250
ZXh0LCBSZXNvdXJjZVJlcXVlc3QmIHJlcXVlc3QsIGJvb2wgc2hvdWxkVXNlQ3JlZGVudGlhbFN0
b3JhZ2UpCi17Ci0gICAgLy8gUGluZ0hhbmRsZSBtYW5hZ2VzIGl0cyBvd24gbGlmZXRpbWUsIGRl
bGV0aW5nIGl0c2VsZiB3aGVuIGl0cyBwdXJwb3NlIGhhcyBiZWVuIGZ1bGZpbGxlZC4KLSAgICBu
ZXcgUGluZ0hhbmRsZShuZXR3b3JraW5nQ29udGV4dCwgcmVxdWVzdCwgc2hvdWxkVXNlQ3JlZGVu
dGlhbFN0b3JhZ2UsIFBpbmdIYW5kbGU6OlVzZXNBc3luY0NhbGxiYWNrczo6Tm8pOworICAgIHBs
YXRmb3JtU3RyYXRlZ2llcygpLT5sb2FkZXJTdHJhdGVneSgpLT5yZXN1bWVQZW5kaW5nUmVxdWVz
dHMoKTsKIH0KIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCisKSW5kZXg6IFNvdXJjZS9XZWJD
b3JlL2xvYWRlci9Mb2FkZXJTdHJhdGVneS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3Jl
L2xvYWRlci9Mb2FkZXJTdHJhdGVneS5oCShyZXZpc2lvbiAxOTI4ODApCisrKyBTb3VyY2UvV2Vi
Q29yZS9sb2FkZXIvTG9hZGVyU3RyYXRlZ3kuaAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUg
QEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTIgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEyLCAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmlu
YXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRl
ZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMjcsMzIgKzI3LDQ4
IEBACiAjZGVmaW5lIExvYWRlclN0cmF0ZWd5X2gKIAogI2luY2x1ZGUgIlJlc291cmNlSGFuZGxl
VHlwZXMuaCIKKyNpbmNsdWRlICJSZXNvdXJjZUxvYWRQcmlvcml0eS5oIgorI2luY2x1ZGUgIlJl
c291cmNlTG9hZGVyT3B0aW9ucy5oIgogI2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4KIAogbmFtZXNw
YWNlIFdlYkNvcmUgewogCiBjbGFzcyBCbG9iUmVnaXN0cnk7CitjbGFzcyBDYWNoZWRSZXNvdXJj
ZTsKIGNsYXNzIEZyYW1lOworY2xhc3MgTmV0c2NhcGVQbHVnSW5TdHJlYW1Mb2FkZXI7CitjbGFz
cyBOZXRzY2FwZVBsdWdJblN0cmVhbUxvYWRlckNsaWVudDsKIGNsYXNzIE5ldHdvcmtpbmdDb250
ZXh0OwogY2xhc3MgUmVzb3VyY2VFcnJvcjsKLWNsYXNzIFJlc291cmNlTG9hZFNjaGVkdWxlcjsK
K2NsYXNzIFJlc291cmNlTG9hZGVyOwogY2xhc3MgUmVzb3VyY2VSZXF1ZXN0OwogY2xhc3MgUmVz
b3VyY2VSZXNwb25zZTsKK2NsYXNzIFN1YnJlc291cmNlTG9hZGVyOworY2xhc3MgVVJMOwogCiBj
bGFzcyBXRUJDT1JFX0VYUE9SVCBMb2FkZXJTdHJhdGVneSB7CiBwdWJsaWM6Ci0gICAgdmlydHVh
bCBSZXNvdXJjZUxvYWRTY2hlZHVsZXIqIHJlc291cmNlTG9hZFNjaGVkdWxlcigpOworICAgIHZp
cnR1YWwgUmVmUHRyPFN1YnJlc291cmNlTG9hZGVyPiBsb2FkUmVzb3VyY2UoRnJhbWUqLCBDYWNo
ZWRSZXNvdXJjZSosIGNvbnN0IFJlc291cmNlUmVxdWVzdCYsIGNvbnN0IFJlc291cmNlTG9hZGVy
T3B0aW9ucyYpID0gMDsKKyAgICB2aXJ0dWFsIHZvaWQgbG9hZFJlc291cmNlU3luY2hyb25vdXNs
eShOZXR3b3JraW5nQ29udGV4dCosIHVuc2lnbmVkIGxvbmcgaWRlbnRpZmllciwgY29uc3QgUmVz
b3VyY2VSZXF1ZXN0JiwgU3RvcmVkQ3JlZGVudGlhbHMsIENsaWVudENyZWRlbnRpYWxQb2xpY3ks
IFJlc291cmNlRXJyb3ImLCBSZXNvdXJjZVJlc3BvbnNlJiwgVmVjdG9yPGNoYXI+JiBkYXRhKSA9
IDA7CiAKLSAgICB2aXJ0dWFsIHZvaWQgbG9hZFJlc291cmNlU3luY2hyb25vdXNseShOZXR3b3Jr
aW5nQ29udGV4dCosIHVuc2lnbmVkIGxvbmcgaWRlbnRpZmllciwgY29uc3QgUmVzb3VyY2VSZXF1
ZXN0JiwgU3RvcmVkQ3JlZGVudGlhbHMsIENsaWVudENyZWRlbnRpYWxQb2xpY3ksIFJlc291cmNl
RXJyb3ImLCBSZXNvdXJjZVJlc3BvbnNlJiwgVmVjdG9yPGNoYXI+JiBkYXRhKTsKKyAgICB2aXJ0
dWFsIHZvaWQgcmVtb3ZlKFJlc291cmNlTG9hZGVyKikgPSAwOworICAgIHZpcnR1YWwgdm9pZCBz
ZXREZWZlcnNMb2FkaW5nKFJlc291cmNlTG9hZGVyKiwgYm9vbCkgPSAwOworICAgIHZpcnR1YWwg
dm9pZCBjcm9zc09yaWdpblJlZGlyZWN0UmVjZWl2ZWQoUmVzb3VyY2VMb2FkZXIqLCBjb25zdCBV
UkwmIHJlZGlyZWN0VVJMKSA9IDA7CisKKyAgICB2aXJ0dWFsIHZvaWQgc2VydmVQZW5kaW5nUmVx
dWVzdHMoUmVzb3VyY2VMb2FkUHJpb3JpdHkgbWluaW11bVByaW9yaXR5ID0gUmVzb3VyY2VMb2Fk
UHJpb3JpdHk6OlZlcnlMb3cpID0gMDsKKyAgICB2aXJ0dWFsIHZvaWQgc3VzcGVuZFBlbmRpbmdS
ZXF1ZXN0cygpID0gMDsKKyAgICB2aXJ0dWFsIHZvaWQgcmVzdW1lUGVuZGluZ1JlcXVlc3RzKCkg
PSAwOwogCi0gICAgdmlydHVhbCBCbG9iUmVnaXN0cnkqIGNyZWF0ZUJsb2JSZWdpc3RyeSgpOwot
Ci0gICAgdmlydHVhbCB2b2lkIGNyZWF0ZVBpbmdIYW5kbGUoTmV0d29ya2luZ0NvbnRleHQqLCBS
ZXNvdXJjZVJlcXVlc3QmLCBib29sIHNob3VsZFVzZUNyZWRlbnRpYWxTdG9yYWdlKTsKKyAgICB2
aXJ0dWFsIHZvaWQgY3JlYXRlUGluZ0hhbmRsZShOZXR3b3JraW5nQ29udGV4dCosIFJlc291cmNl
UmVxdWVzdCYsIGJvb2wgc2hvdWxkVXNlQ3JlZGVudGlhbFN0b3JhZ2UpID0gMDsKIAogcHJvdGVj
dGVkOgotICAgIHZpcnR1YWwgfkxvYWRlclN0cmF0ZWd5KCkKLSAgICB7Ci0gICAgfQorICAgIHZp
cnR1YWwgfkxvYWRlclN0cmF0ZWd5KCk7Cit9OworCitjbGFzcyBSZXNvdXJjZUxvYWRTdXNwZW5k
ZXIgeworcHVibGljOgorICAgIFJlc291cmNlTG9hZFN1c3BlbmRlcigpOworICAgIH5SZXNvdXJj
ZUxvYWRTdXNwZW5kZXIoKTsKIH07CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKSW5kZXg6IFNv
dXJjZS9XZWJDb3JlL2xvYWRlci9SZXNvdXJjZUxvYWRTY2hlZHVsZXIuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9XZWJDb3JlL2xvYWRlci9SZXNvdXJjZUxvYWRTY2hlZHVsZXIuY3BwCShyZXZp
c2lvbiAxOTI4ODApCisrKyBTb3VyY2UvV2ViQ29yZS9sb2FkZXIvUmVzb3VyY2VMb2FkU2NoZWR1
bGVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSwzOTIgKzAsMCBAQAotLyoKLSAgICBDb3B5cmln
aHQgKEMpIDE5OTggTGFycyBLbm9sbCAoa25vbGxAbXBpLWhkLm1wZy5kZSkKLSAgICBDb3B5cmln
aHQgKEMpIDIwMDEgRGlyayBNdWVsbGVyIChtdWVsbGVyQGtkZS5vcmcpCi0gICAgQ29weXJpZ2h0
IChDKSAyMDAyIFdhbGRvIEJhc3RpYW4gKGJhc3RpYW5Aa2RlLm9yZykKLSAgICBDb3B5cmlnaHQg
KEMpIDIwMDYgU2FtdWVsIFdlaW5pZyAoc2FtLndlaW5pZ0BnbWFpbC5jb20pCi0gICAgQ29weXJp
Z2h0IChDKSAyMDA0LCAyMDA1LCAyMDA2LCAyMDA3LCAyMDA4IEFwcGxlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KLSAgICBDb3B5cmlnaHQgKEMpIDIwMTAgR29vZ2xlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KLQotICAgIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2Fu
IHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKLSAgICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9m
IHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwotICAgIExpY2Vuc2UgYXMgcHVibGlzaGVk
IGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgotICAgIHZlcnNpb24gMiBv
ZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLQot
ICAgIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwg
YmUgdXNlZnVsLAotICAgIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRo
ZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9S
IEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKLSAgICBMaWJyYXJ5IEdlbmVyYWwg
UHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLQotICAgIFlvdSBzaG91bGQgaGF2ZSBy
ZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UK
LSAgICBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAg
SWYgbm90LCB3cml0ZSB0bwotICAgIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4s
IDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCi0gICAgQm9zdG9uLCBNQSAwMjExMC0x
MzAxLCBVU0EuCi0gKi8KLQotI2luY2x1ZGUgImNvbmZpZy5oIgotI2luY2x1ZGUgIlJlc291cmNl
TG9hZFNjaGVkdWxlci5oIgotCi0jaW5jbHVkZSAiRG9jdW1lbnQuaCIKLSNpbmNsdWRlICJEb2N1
bWVudExvYWRlci5oIgotI2luY2x1ZGUgIkZyYW1lLmgiCi0jaW5jbHVkZSAiRnJhbWVMb2FkZXIu
aCIKLSNpbmNsdWRlICJMb2FkZXJTdHJhdGVneS5oIgotI2luY2x1ZGUgIkxvZ2dpbmcuaCIKLSNp
bmNsdWRlICJOZXRzY2FwZVBsdWdJblN0cmVhbUxvYWRlci5oIgotI2luY2x1ZGUgIlBsYXRmb3Jt
U3RyYXRlZ2llcy5oIgotI2luY2x1ZGUgIlJlc291cmNlTG9hZGVyLmgiCi0jaW5jbHVkZSAiUmVz
b3VyY2VSZXF1ZXN0LmgiCi0jaW5jbHVkZSAiU3VicmVzb3VyY2VMb2FkZXIuaCIKLSNpbmNsdWRl
ICJVUkwuaCIKLSNpbmNsdWRlIDx3dGYvTWFpblRocmVhZC5oPgotI2luY2x1ZGUgPHd0Zi9UZW1w
b3JhcnlDaGFuZ2UuaD4KLSNpbmNsdWRlIDx3dGYvdGV4dC9DU3RyaW5nLmg+Ci0KLSNpZiBQTEFU
Rk9STShJT1MpCi0jaW5jbHVkZSA8UnVudGltZUFwcGxpY2F0aW9uQ2hlY2tzSU9TLmg+Ci0jZW5k
aWYKLQotI2lmIFVTRShRVUlDS19MT09LKQotI2luY2x1ZGUgIlF1aWNrTG9vay5oIgotI2VuZGlm
Ci0KLW5hbWVzcGFjZSBXZWJDb3JlIHsKLQotLy8gTWF0Y2ggdGhlIHBhcmFsbGVsIGNvbm5lY3Rp
b24gY291bnQgdXNlZCBieSB0aGUgbmV0d29ya2luZyBsYXllci4KLXN0YXRpYyB1bnNpZ25lZCBt
YXhSZXF1ZXN0c0luRmxpZ2h0UGVySG9zdDsKLSNpZiAhUExBVEZPUk0oSU9TKQotc3RhdGljIGNv
bnN0IHVuc2lnbmVkIG1heFJlcXVlc3RzSW5GbGlnaHRGb3JOb25IVFRQUHJvdG9jb2xzID0gMjA7
Ci0jZWxzZQotLy8gTGltaXRpbmcgdGhpcyBzZWVtcyB0byByZWdyZXNzIHBlcmZvcm1hbmNlIGlu
IHNvbWUgbG9jYWwgY2FzZXMgc28gbGV0J3MganVzdCBtYWtlIGl0IGxhcmdlLgotc3RhdGljIGNv
bnN0IHVuc2lnbmVkIG1heFJlcXVlc3RzSW5GbGlnaHRGb3JOb25IVFRQUHJvdG9jb2xzID0gMTAw
MDA7Ci0jZW5kaWYKLQotUmVzb3VyY2VMb2FkU2NoZWR1bGVyOjpIb3N0SW5mb3JtYXRpb24qIFJl
c291cmNlTG9hZFNjaGVkdWxlcjo6aG9zdEZvclVSTChjb25zdCBVUkwmIHVybCwgQ3JlYXRlSG9z
dFBvbGljeSBjcmVhdGVIb3N0UG9saWN5KQotewotICAgIGlmICghdXJsLnByb3RvY29sSXNJbkhU
VFBGYW1pbHkoKSkKLSAgICAgICAgcmV0dXJuIG1fbm9uSFRUUFByb3RvY29sSG9zdDsKLQotICAg
IG1faG9zdHMuY2hlY2tDb25zaXN0ZW5jeSgpOwotICAgIFN0cmluZyBob3N0TmFtZSA9IHVybC5o
b3N0KCk7Ci0gICAgSG9zdEluZm9ybWF0aW9uKiBob3N0ID0gbV9ob3N0cy5nZXQoaG9zdE5hbWUp
OwotICAgIGlmICghaG9zdCAmJiBjcmVhdGVIb3N0UG9saWN5ID09IENyZWF0ZUlmTm90Rm91bmQp
IHsKLSAgICAgICAgaG9zdCA9IG5ldyBIb3N0SW5mb3JtYXRpb24oaG9zdE5hbWUsIG1heFJlcXVl
c3RzSW5GbGlnaHRQZXJIb3N0KTsKLSAgICAgICAgbV9ob3N0cy5hZGQoaG9zdE5hbWUsIGhvc3Qp
OwotICAgIH0KLSAgICByZXR1cm4gaG9zdDsKLX0KLQotUmVzb3VyY2VMb2FkU2NoZWR1bGVyKiBy
ZXNvdXJjZUxvYWRTY2hlZHVsZXIoKQotewotICAgIEFTU0VSVChpc01haW5UaHJlYWQoKSk7Ci0g
ICAgc3RhdGljIFJlc291cmNlTG9hZFNjaGVkdWxlciogZ2xvYmFsU2NoZWR1bGVyID0gbnVsbHB0
cjsKLSAgICAKLSAgICBpZiAoIWdsb2JhbFNjaGVkdWxlcikgewotICAgICAgICBzdGF0aWMgYm9v
bCBpc0NhbGxpbmdPdXRUb1N0cmF0ZWd5ID0gZmFsc2U7Ci0gICAgICAgIAotICAgICAgICAvLyBJ
ZiB3ZSdyZSByZS1lbnRlcmluZyByZXNvdXJjZUxvYWRTY2hlZHVsZXIoKSB3aGlsZSBjYWxsaW5n
IG91dCB0byB0aGUgTG9hZGVyU3RyYXRlZ3ksCi0gICAgICAgIC8vIHRoZW4gdGhlIExvYWRlclN0
cmF0ZWd5IGlzIHRyeWluZyB0byB1c2UgdGhlIGRlZmF1bHQgcmVzb3VyY2VMb2FkU2NoZWR1bGVy
LgotICAgICAgICAvLyBTbyB3ZSdsbCBjcmVhdGUgaXQgaGVyZSBhbmQgc3RhcnQgdXNpbmcgaXQu
Ci0gICAgICAgIGlmIChpc0NhbGxpbmdPdXRUb1N0cmF0ZWd5KSB7Ci0gICAgICAgICAgICBnbG9i
YWxTY2hlZHVsZXIgPSBuZXcgUmVzb3VyY2VMb2FkU2NoZWR1bGVyOwotICAgICAgICAgICAgcmV0
dXJuIGdsb2JhbFNjaGVkdWxlcjsKLSAgICAgICAgfQotICAgICAgICAKLSAgICAgICAgVGVtcG9y
YXJ5Q2hhbmdlPGJvb2w+IHJlY3Vyc2lvbkd1YXJkKGlzQ2FsbGluZ091dFRvU3RyYXRlZ3ksIHRy
dWUpOwotICAgICAgICBnbG9iYWxTY2hlZHVsZXIgPSBwbGF0Zm9ybVN0cmF0ZWdpZXMoKS0+bG9h
ZGVyU3RyYXRlZ3koKS0+cmVzb3VyY2VMb2FkU2NoZWR1bGVyKCk7Ci0gICAgfQotCi0gICAgcmV0
dXJuIGdsb2JhbFNjaGVkdWxlcjsKLX0KLQotUmVzb3VyY2VMb2FkU2NoZWR1bGVyOjpSZXNvdXJj
ZUxvYWRTY2hlZHVsZXIoKQotICAgIDogbV9ub25IVFRQUHJvdG9jb2xIb3N0KG5ldyBIb3N0SW5m
b3JtYXRpb24oU3RyaW5nKCksIG1heFJlcXVlc3RzSW5GbGlnaHRGb3JOb25IVFRQUHJvdG9jb2xz
KSkKLSAgICAsIG1fcmVxdWVzdFRpbWVyKCp0aGlzLCAmUmVzb3VyY2VMb2FkU2NoZWR1bGVyOjpy
ZXF1ZXN0VGltZXJGaXJlZCkKLSAgICAsIG1fc3VzcGVuZFBlbmRpbmdSZXF1ZXN0c0NvdW50KDAp
Ci0gICAgLCBtX2lzU2VyaWFsTG9hZGluZ0VuYWJsZWQoZmFsc2UpCi17Ci0gICAgbWF4UmVxdWVz
dHNJbkZsaWdodFBlckhvc3QgPSBpbml0aWFsaXplTWF4aW11bUhUVFBDb25uZWN0aW9uQ291bnRQ
ZXJIb3N0KCk7Ci19Ci0KLVJlc291cmNlTG9hZFNjaGVkdWxlcjo6flJlc291cmNlTG9hZFNjaGVk
dWxlcigpCi17Ci19Ci0KLVJlZlB0cjxTdWJyZXNvdXJjZUxvYWRlcj4gUmVzb3VyY2VMb2FkU2No
ZWR1bGVyOjpzY2hlZHVsZVN1YnJlc291cmNlTG9hZChGcmFtZSogZnJhbWUsIENhY2hlZFJlc291
cmNlKiByZXNvdXJjZSwgY29uc3QgUmVzb3VyY2VSZXF1ZXN0JiByZXF1ZXN0LCBjb25zdCBSZXNv
dXJjZUxvYWRlck9wdGlvbnMmIG9wdGlvbnMpCi17Ci0gICAgUmVmUHRyPFN1YnJlc291cmNlTG9h
ZGVyPiBsb2FkZXIgPSBTdWJyZXNvdXJjZUxvYWRlcjo6Y3JlYXRlKGZyYW1lLCByZXNvdXJjZSwg
cmVxdWVzdCwgb3B0aW9ucyk7Ci0gICAgaWYgKGxvYWRlcikKLSAgICAgICAgc2NoZWR1bGVMb2Fk
KGxvYWRlci5nZXQoKSk7Ci0jaWYgUExBVEZPUk0oSU9TKQotICAgIC8vIFNpbmNlIHdlIGRlZmVy
IGxvYWRlciBpbml0aWFsaXphdGlvbiB1bnRpbCBzY2hlZHVsaW5nIG9uIGlPUywgdGhlIGZyYW1l
Ci0gICAgLy8gbG9hZCBkZWxlZ2F0ZSB0aGF0IHdvdWxkIGJlIGNhbGxlZCBpbiBTdWJyZXNvdXJj
ZUxvYWRlcjo6Y3JlYXRlKCkgb24KLSAgICAvLyBvdGhlciBwb3J0cyBtaWdodCBiZSBjYWxsZWQg
aW4gc2NoZWR1bGVMb2FkKCkgaW5zdGVhZC4gT3VyIGNvbnRyYWN0IHRvCi0gICAgLy8gY2FsbGVy
cyBvZiB0aGlzIG1ldGhvZCBpcyB0aGF0IGEgbnVsbCBsb2FkZXIgaXMgcmV0dXJuZWQgaWYgdGhl
IGxvYWQgd2FzCi0gICAgLy8gY2FuY2VsbGVkIGJ5IGEgZnJhbWUgbG9hZCBkZWxlZ2F0ZS4KLSAg
ICBpZiAoIWxvYWRlciB8fCBsb2FkZXItPnJlYWNoZWRUZXJtaW5hbFN0YXRlKCkpCi0gICAgICAg
IHJldHVybiBudWxscHRyOwotI2VuZGlmCi0gICAgcmV0dXJuIGxvYWRlcjsKLX0KLQotUmVmUHRy
PE5ldHNjYXBlUGx1Z0luU3RyZWFtTG9hZGVyPiBSZXNvdXJjZUxvYWRTY2hlZHVsZXI6OnNjaGVk
dWxlUGx1Z2luU3RyZWFtTG9hZChGcmFtZSogZnJhbWUsIE5ldHNjYXBlUGx1Z0luU3RyZWFtTG9h
ZGVyQ2xpZW50KiBjbGllbnQsIGNvbnN0IFJlc291cmNlUmVxdWVzdCYgcmVxdWVzdCkKLXsKLSAg
ICBSZWZQdHI8TmV0c2NhcGVQbHVnSW5TdHJlYW1Mb2FkZXI+IGxvYWRlciA9IE5ldHNjYXBlUGx1
Z0luU3RyZWFtTG9hZGVyOjpjcmVhdGUoZnJhbWUsIGNsaWVudCwgcmVxdWVzdCk7Ci0gICAgaWYg
KGxvYWRlcikKLSAgICAgICAgc2NoZWR1bGVMb2FkKGxvYWRlci5nZXQoKSk7Ci0gICAgcmV0dXJu
IGxvYWRlcjsKLX0KLQotdm9pZCBSZXNvdXJjZUxvYWRTY2hlZHVsZXI6OnNjaGVkdWxlTG9hZChS
ZXNvdXJjZUxvYWRlciogcmVzb3VyY2VMb2FkZXIpCi17Ci0gICAgQVNTRVJUKHJlc291cmNlTG9h
ZGVyKTsKLQotICAgIExPRyhSZXNvdXJjZUxvYWRpbmcsICJSZXNvdXJjZUxvYWRTY2hlZHVsZXI6
OmxvYWQgcmVzb3VyY2UgJXAgJyVzJyIsIHJlc291cmNlTG9hZGVyLCByZXNvdXJjZUxvYWRlci0+
dXJsKCkuc3RyaW5nKCkubGF0aW4xKCkuZGF0YSgpKTsKLQotI2lmIFBMQVRGT1JNKElPUykKLSAg
ICAvLyBJZiB0aGVyZSdzIGEgd2ViIGFyY2hpdmUgcmVzb3VyY2UgZm9yIHRoaXMgVVJMLCB3ZSBk
b24ndCBuZWVkIHRvIHNjaGVkdWxlIHRoZSBsb2FkIHNpbmNlIGl0IHdpbGwgbmV2ZXIgdG91Y2gg
dGhlIG5ldHdvcmsuCi0gICAgaWYgKCFpc1N1c3BlbmRpbmdQZW5kaW5nUmVxdWVzdHMoKSAmJiBy
ZXNvdXJjZUxvYWRlci0+ZG9jdW1lbnRMb2FkZXIoKS0+YXJjaGl2ZVJlc291cmNlRm9yVVJMKHJl
c291cmNlTG9hZGVyLT5pT1NPcmlnaW5hbFJlcXVlc3QoKS51cmwoKSkpIHsKLSAgICAgICAgcmVz
b3VyY2VMb2FkZXItPnN0YXJ0TG9hZGluZygpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotI2Vs
c2UKLSAgICBpZiAocmVzb3VyY2VMb2FkZXItPmRvY3VtZW50TG9hZGVyKCktPmFyY2hpdmVSZXNv
dXJjZUZvclVSTChyZXNvdXJjZUxvYWRlci0+cmVxdWVzdCgpLnVybCgpKSkgewotICAgICAgICBy
ZXNvdXJjZUxvYWRlci0+c3RhcnQoKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLSNlbmRpZgot
Ci0jaWYgUExBVEZPUk0oSU9TKQotICAgIEhvc3RJbmZvcm1hdGlvbiogaG9zdCA9IGhvc3RGb3JV
UkwocmVzb3VyY2VMb2FkZXItPmlPU09yaWdpbmFsUmVxdWVzdCgpLnVybCgpLCBDcmVhdGVJZk5v
dEZvdW5kKTsKLSNlbHNlCi0gICAgSG9zdEluZm9ybWF0aW9uKiBob3N0ID0gaG9zdEZvclVSTChy
ZXNvdXJjZUxvYWRlci0+dXJsKCksIENyZWF0ZUlmTm90Rm91bmQpOwotI2VuZGlmCi0KLSAgICBS
ZXNvdXJjZUxvYWRQcmlvcml0eSBwcmlvcml0eSA9IHJlc291cmNlTG9hZGVyLT5yZXF1ZXN0KCku
cHJpb3JpdHkoKTsKLQotICAgIGJvb2wgaGFkUmVxdWVzdHMgPSBob3N0LT5oYXNSZXF1ZXN0cygp
OwotICAgIGhvc3QtPnNjaGVkdWxlKHJlc291cmNlTG9hZGVyLCBwcmlvcml0eSk7Ci0KLSNpZiBQ
TEFURk9STShDT0NPQSkgfHwgVVNFKENGTkVUV09SSykKLSAgICBpZiAoUmVzb3VyY2VSZXF1ZXN0
OjpyZXNvdXJjZVByaW9yaXRpZXNFbmFibGVkKCkgJiYgIWlzU3VzcGVuZGluZ1BlbmRpbmdSZXF1
ZXN0cygpKSB7Ci0gICAgICAgIC8vIFNlcnZlIGFsbCByZXF1ZXN0cyBhdCBvbmNlIHRvIGtlZXAg
dGhlIHBpcGVsaW5lIGZ1bGwgYXQgdGhlIG5ldHdvcmsgbGF5ZXIuCi0gICAgICAgIC8vIEZJWE1F
OiBEb2VzIHRoaXMgY29kZSBkbyBhbnl0aGluZyB1c2VmdWwsIGdpdmVuIHRoYXQgd2UgYWxzbyBz
ZXQgbWF4UmVxdWVzdHNJbkZsaWdodFBlckhvc3QgdG8gZWZmZWN0aXZlbHkgdW5saW1pdGVkIG9u
IHRoZXNlIHBsYXRmb3Jtcz8KLSAgICAgICAgc2VydmVQZW5kaW5nUmVxdWVzdHMoaG9zdCwgUmVz
b3VyY2VMb2FkUHJpb3JpdHk6OlZlcnlMb3cpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotI2Vu
ZGlmCi0KLSNpZiBQTEFURk9STShJT1MpCi0gICAgaWYgKChwcmlvcml0eSA+IFJlc291cmNlTG9h
ZFByaW9yaXR5OjpMb3cgfHwgIXJlc291cmNlTG9hZGVyLT5pT1NPcmlnaW5hbFJlcXVlc3QoKS51
cmwoKS5wcm90b2NvbElzSW5IVFRQRmFtaWx5KCkgfHwgKHByaW9yaXR5ID09IFJlc291cmNlTG9h
ZFByaW9yaXR5OjpMb3cgJiYgIWhhZFJlcXVlc3RzKSkgJiYgIWlzU3VzcGVuZGluZ1BlbmRpbmdS
ZXF1ZXN0cygpKSB7Ci0gICAgICAgIC8vIFRyeSB0byByZXF1ZXN0IGltcG9ydGFudCByZXNvdXJj
ZXMgaW1tZWRpYXRlbHkuCi0gICAgICAgIHNlcnZlUGVuZGluZ1JlcXVlc3RzKGhvc3QsIHByaW9y
aXR5KTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLSNlbHNlCi0gICAgaWYgKHByaW9yaXR5ID4g
UmVzb3VyY2VMb2FkUHJpb3JpdHk6OkxvdyB8fCAhcmVzb3VyY2VMb2FkZXItPnVybCgpLnByb3Rv
Y29sSXNJbkhUVFBGYW1pbHkoKSB8fCAocHJpb3JpdHkgPT0gUmVzb3VyY2VMb2FkUHJpb3JpdHk6
OkxvdyAmJiAhaGFkUmVxdWVzdHMpKSB7Ci0gICAgICAgIC8vIFRyeSB0byByZXF1ZXN0IGltcG9y
dGFudCByZXNvdXJjZXMgaW1tZWRpYXRlbHkuCi0gICAgICAgIHNlcnZlUGVuZGluZ1JlcXVlc3Rz
KGhvc3QsIHByaW9yaXR5KTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLSNlbmRpZgotCi0gICAg
Ly8gSGFuZGxlIGFzeW5jaHJvbm91c2x5IHNvIGVhcmx5IGxvdyBwcmlvcml0eSByZXF1ZXN0cyBk
b24ndAotICAgIC8vIGdldCBzY2hlZHVsZWQgYmVmb3JlIGxhdGVyIGhpZ2ggcHJpb3JpdHkgb25l
cy4KLSAgICBzY2hlZHVsZVNlcnZlUGVuZGluZ1JlcXVlc3RzKCk7Ci19Ci0KLXZvaWQgUmVzb3Vy
Y2VMb2FkU2NoZWR1bGVyOjpyZW1vdmUoUmVzb3VyY2VMb2FkZXIqIHJlc291cmNlTG9hZGVyKQot
ewotICAgIEFTU0VSVChyZXNvdXJjZUxvYWRlcik7Ci0KLSAgICBIb3N0SW5mb3JtYXRpb24qIGhv
c3QgPSBob3N0Rm9yVVJMKHJlc291cmNlTG9hZGVyLT51cmwoKSk7Ci0gICAgaWYgKGhvc3QpCi0g
ICAgICAgIGhvc3QtPnJlbW92ZShyZXNvdXJjZUxvYWRlcik7Ci0jaWYgUExBVEZPUk0oSU9TKQot
ICAgIC8vIFJlc291cmNlTG9hZGVyOjp1cmwoKSBkb2Vzbid0IHN0YXJ0IHJldHVybmluZyB0aGUg
Y29ycmVjdCB2YWx1ZSB1bnRpbCB0aGUgbG9hZCBzdGFydHMuIElmIHdlIGdldCBjYW5jZWxlZCBi
ZWZvcmUgdGhhdCwgd2UgbmVlZCB0byBsb29rIGZvciBvcmlnaW5hbFJlcXVlc3QgdXJsIGluc3Rl
YWQuCi0gICAgLy8gRklYTUU6IFJlc291cmNlTG9hZGVyOjp1cmwoKSBzaG91bGQgYmUgbWFkZSB0
byByZXR1cm4gYSBzZW5zaWJsZSB2YWx1ZSBhdCBhbGwgdGltZXMuCi0gICAgaWYgKCFyZXNvdXJj
ZUxvYWRlci0+aU9TT3JpZ2luYWxSZXF1ZXN0KCkuaXNOdWxsKCkpIHsKLSAgICAgICAgSG9zdElu
Zm9ybWF0aW9uKiBvcmlnaW5hbEhvc3QgPSBob3N0Rm9yVVJMKHJlc291cmNlTG9hZGVyLT5pT1NP
cmlnaW5hbFJlcXVlc3QoKS51cmwoKSk7Ci0gICAgICAgIGlmIChvcmlnaW5hbEhvc3QgJiYgb3Jp
Z2luYWxIb3N0ICE9IGhvc3QpCi0gICAgICAgICAgICBvcmlnaW5hbEhvc3QtPnJlbW92ZShyZXNv
dXJjZUxvYWRlcik7Ci0gICAgfQotI2VuZGlmCi0gICAgc2NoZWR1bGVTZXJ2ZVBlbmRpbmdSZXF1
ZXN0cygpOwotfQotCi12b2lkIFJlc291cmNlTG9hZFNjaGVkdWxlcjo6c2V0RGVmZXJzTG9hZGlu
ZyhSZXNvdXJjZUxvYWRlciosIGJvb2wpCi17Ci19Ci0KLXZvaWQgUmVzb3VyY2VMb2FkU2NoZWR1
bGVyOjpjcm9zc09yaWdpblJlZGlyZWN0UmVjZWl2ZWQoUmVzb3VyY2VMb2FkZXIqIHJlc291cmNl
TG9hZGVyLCBjb25zdCBVUkwmIHJlZGlyZWN0VVJMKQotewotICAgIEhvc3RJbmZvcm1hdGlvbiog
b2xkSG9zdCA9IGhvc3RGb3JVUkwocmVzb3VyY2VMb2FkZXItPnVybCgpKTsKLSAgICBBU1NFUlQo
b2xkSG9zdCk7Ci0gICAgaWYgKCFvbGRIb3N0KQotICAgICAgICByZXR1cm47Ci0KLSAgICBIb3N0
SW5mb3JtYXRpb24qIG5ld0hvc3QgPSBob3N0Rm9yVVJMKHJlZGlyZWN0VVJMLCBDcmVhdGVJZk5v
dEZvdW5kKTsKLQotICAgIGlmIChvbGRIb3N0LT5uYW1lKCkgPT0gbmV3SG9zdC0+bmFtZSgpKQot
ICAgICAgICByZXR1cm47Ci0KLSAgICBuZXdIb3N0LT5hZGRMb2FkSW5Qcm9ncmVzcyhyZXNvdXJj
ZUxvYWRlcik7Ci0gICAgb2xkSG9zdC0+cmVtb3ZlKHJlc291cmNlTG9hZGVyKTsKLX0KLQotdm9p
ZCBSZXNvdXJjZUxvYWRTY2hlZHVsZXI6OnNlcnZlUGVuZGluZ1JlcXVlc3RzKFJlc291cmNlTG9h
ZFByaW9yaXR5IG1pbmltdW1Qcmlvcml0eSkKLXsKLSAgICBMT0coUmVzb3VyY2VMb2FkaW5nLCAi
UmVzb3VyY2VMb2FkU2NoZWR1bGVyOjpzZXJ2ZVBlbmRpbmdSZXF1ZXN0cy4gbV9zdXNwZW5kUGVu
ZGluZ1JlcXVlc3RzQ291bnQ9JWQiLCBtX3N1c3BlbmRQZW5kaW5nUmVxdWVzdHNDb3VudCk7IAot
ICAgIGlmIChpc1N1c3BlbmRpbmdQZW5kaW5nUmVxdWVzdHMoKSkKLSAgICAgICAgcmV0dXJuOwot
Ci0gICAgbV9yZXF1ZXN0VGltZXIuc3RvcCgpOwotICAgIAotICAgIHNlcnZlUGVuZGluZ1JlcXVl
c3RzKG1fbm9uSFRUUFByb3RvY29sSG9zdCwgbWluaW11bVByaW9yaXR5KTsKLQotICAgIFZlY3Rv
cjxIb3N0SW5mb3JtYXRpb24qPiBob3N0c1RvU2VydmU7Ci0gICAgY29weVZhbHVlc1RvVmVjdG9y
KG1faG9zdHMsIGhvc3RzVG9TZXJ2ZSk7Ci0KLSAgICBmb3IgKGF1dG8qIGhvc3QgOiBob3N0c1Rv
U2VydmUpIHsKLSAgICAgICAgaWYgKGhvc3QtPmhhc1JlcXVlc3RzKCkpCi0gICAgICAgICAgICBz
ZXJ2ZVBlbmRpbmdSZXF1ZXN0cyhob3N0LCBtaW5pbXVtUHJpb3JpdHkpOwotICAgICAgICBlbHNl
Ci0gICAgICAgICAgICBkZWxldGUgbV9ob3N0cy50YWtlKGhvc3QtPm5hbWUoKSk7Ci0gICAgfQot
fQotCi12b2lkIFJlc291cmNlTG9hZFNjaGVkdWxlcjo6c2VydmVQZW5kaW5nUmVxdWVzdHMoSG9z
dEluZm9ybWF0aW9uKiBob3N0LCBSZXNvdXJjZUxvYWRQcmlvcml0eSBtaW5pbXVtUHJpb3JpdHkp
Ci17Ci0gICAgTE9HKFJlc291cmNlTG9hZGluZywgIlJlc291cmNlTG9hZFNjaGVkdWxlcjo6c2Vy
dmVQZW5kaW5nUmVxdWVzdHMgSG9zdEluZm9ybWF0aW9uLm1fbmFtZT0nJXMnIiwgaG9zdC0+bmFt
ZSgpLmxhdGluMSgpLmRhdGEoKSk7Ci0KLSAgICBhdXRvIHByaW9yaXR5ID0gUmVzb3VyY2VMb2Fk
UHJpb3JpdHk6OkhpZ2hlc3Q7Ci0gICAgd2hpbGUgKHRydWUpIHsKLSAgICAgICAgYXV0byYgcmVx
dWVzdHNQZW5kaW5nID0gaG9zdC0+cmVxdWVzdHNQZW5kaW5nKHByaW9yaXR5KTsKLSAgICAgICAg
d2hpbGUgKCFyZXF1ZXN0c1BlbmRpbmcuaXNFbXB0eSgpKSB7Ci0gICAgICAgICAgICBSZWZQdHI8
UmVzb3VyY2VMb2FkZXI+IHJlc291cmNlTG9hZGVyID0gcmVxdWVzdHNQZW5kaW5nLmZpcnN0KCk7
Ci0KLSAgICAgICAgICAgIC8vIEZvciBuYW1lZCBob3N0cyAtIHdoaWNoIGFyZSBvbmx5IGh0dHAo
cykgaG9zdHMgLSB3ZSBzaG91bGQgYWx3YXlzIGVuZm9yY2UgdGhlIGNvbm5lY3Rpb24gbGltaXQu
Ci0gICAgICAgICAgICAvLyBGb3Igbm9uLW5hbWVkIGhvc3RzIC0gZXZlcnl0aGluZyBidXQgaHR0
cChzKSAtIHdlIHNob3VsZCBvbmx5IGVuZm9yY2UgdGhlIGxpbWl0IGlmIHRoZSBkb2N1bWVudCBp
c24ndCBkb25lIHBhcnNpbmcgCi0gICAgICAgICAgICAvLyBhbmQgd2UgZG9uJ3Qga25vdyBhbGwg
c3R5bGVzaGVldHMgeWV0LgotICAgICAgICAgICAgRG9jdW1lbnQqIGRvY3VtZW50ID0gcmVzb3Vy
Y2VMb2FkZXItPmZyYW1lTG9hZGVyKCkgPyByZXNvdXJjZUxvYWRlci0+ZnJhbWVMb2FkZXIoKS0+
ZnJhbWUoKS5kb2N1bWVudCgpIDogMDsKLSAgICAgICAgICAgIGJvb2wgc2hvdWxkTGltaXRSZXF1
ZXN0cyA9ICFob3N0LT5uYW1lKCkuaXNOdWxsKCkgfHwgKGRvY3VtZW50ICYmIChkb2N1bWVudC0+
cGFyc2luZygpIHx8ICFkb2N1bWVudC0+aGF2ZVN0eWxlc2hlZXRzTG9hZGVkKCkpKTsKLSAgICAg
ICAgICAgIGlmIChzaG91bGRMaW1pdFJlcXVlc3RzICYmIGhvc3QtPmxpbWl0UmVxdWVzdHMocHJp
b3JpdHkpKQotICAgICAgICAgICAgICAgIHJldHVybjsKLQotICAgICAgICAgICAgcmVxdWVzdHNQ
ZW5kaW5nLnJlbW92ZUZpcnN0KCk7Ci0gICAgICAgICAgICBob3N0LT5hZGRMb2FkSW5Qcm9ncmVz
cyhyZXNvdXJjZUxvYWRlci5nZXQoKSk7Ci0jaWYgUExBVEZPUk0oSU9TKQotICAgICAgICAgICAg
aWYgKCFhcHBsaWNhdGlvbklzV2ViUHJvY2VzcygpKSB7Ci0gICAgICAgICAgICAgICAgcmVzb3Vy
Y2VMb2FkZXItPnN0YXJ0TG9hZGluZygpOwotICAgICAgICAgICAgICAgIHJldHVybjsKLSAgICAg
ICAgICAgIH0KLSNlbmRpZgotICAgICAgICAgICAgcmVzb3VyY2VMb2FkZXItPnN0YXJ0KCk7Ci0g
ICAgICAgIH0KLSAgICAgICAgaWYgKHByaW9yaXR5ID09IG1pbmltdW1Qcmlvcml0eSkKLSAgICAg
ICAgICAgIHJldHVybjsKLSAgICAgICAgLS1wcmlvcml0eTsKLSAgICB9Ci19Ci0KLXZvaWQgUmVz
b3VyY2VMb2FkU2NoZWR1bGVyOjpzdXNwZW5kUGVuZGluZ1JlcXVlc3RzKCkKLXsKLSAgICArK21f
c3VzcGVuZFBlbmRpbmdSZXF1ZXN0c0NvdW50OwotfQotCi12b2lkIFJlc291cmNlTG9hZFNjaGVk
dWxlcjo6cmVzdW1lUGVuZGluZ1JlcXVlc3RzKCkKLXsKLSAgICBBU1NFUlQobV9zdXNwZW5kUGVu
ZGluZ1JlcXVlc3RzQ291bnQpOwotICAgIC0tbV9zdXNwZW5kUGVuZGluZ1JlcXVlc3RzQ291bnQ7
Ci0gICAgaWYgKG1fc3VzcGVuZFBlbmRpbmdSZXF1ZXN0c0NvdW50KQotICAgICAgICByZXR1cm47
Ci0gICAgaWYgKCFtX2hvc3RzLmlzRW1wdHkoKSB8fCBtX25vbkhUVFBQcm90b2NvbEhvc3QtPmhh
c1JlcXVlc3RzKCkpCi0gICAgICAgIHNjaGVkdWxlU2VydmVQZW5kaW5nUmVxdWVzdHMoKTsKLX0K
LSAgICAKLXZvaWQgUmVzb3VyY2VMb2FkU2NoZWR1bGVyOjpzY2hlZHVsZVNlcnZlUGVuZGluZ1Jl
cXVlc3RzKCkKLXsKLSAgICBMT0coUmVzb3VyY2VMb2FkaW5nLCAiUmVzb3VyY2VMb2FkU2NoZWR1
bGVyOjpzY2hlZHVsZVNlcnZlUGVuZGluZ1JlcXVlc3RzLCBtX3JlcXVlc3RUaW1lci5pc0FjdGl2
ZSgpPSV1IiwgbV9yZXF1ZXN0VGltZXIuaXNBY3RpdmUoKSk7Ci0gICAgaWYgKCFtX3JlcXVlc3RU
aW1lci5pc0FjdGl2ZSgpKQotICAgICAgICBtX3JlcXVlc3RUaW1lci5zdGFydE9uZVNob3QoMCk7
Ci19Ci0KLXZvaWQgUmVzb3VyY2VMb2FkU2NoZWR1bGVyOjpyZXF1ZXN0VGltZXJGaXJlZCgpCi17
Ci0gICAgTE9HKFJlc291cmNlTG9hZGluZywgIlJlc291cmNlTG9hZFNjaGVkdWxlcjo6cmVxdWVz
dFRpbWVyRmlyZWRcbiIpOwotICAgIHNlcnZlUGVuZGluZ1JlcXVlc3RzKCk7Ci19Ci0KLVJlc291
cmNlTG9hZFNjaGVkdWxlcjo6SG9zdEluZm9ybWF0aW9uOjpIb3N0SW5mb3JtYXRpb24oY29uc3Qg
U3RyaW5nJiBuYW1lLCB1bnNpZ25lZCBtYXhSZXF1ZXN0c0luRmxpZ2h0KQotICAgIDogbV9uYW1l
KG5hbWUpCi0gICAgLCBtX21heFJlcXVlc3RzSW5GbGlnaHQobWF4UmVxdWVzdHNJbkZsaWdodCkK
LXsKLX0KLQotUmVzb3VyY2VMb2FkU2NoZWR1bGVyOjpIb3N0SW5mb3JtYXRpb246On5Ib3N0SW5m
b3JtYXRpb24oKQotewotICAgIEFTU0VSVCghaGFzUmVxdWVzdHMoKSk7Ci19Ci0KLXVuc2lnbmVk
IFJlc291cmNlTG9hZFNjaGVkdWxlcjo6SG9zdEluZm9ybWF0aW9uOjpwcmlvcml0eVRvSW5kZXgo
UmVzb3VyY2VMb2FkUHJpb3JpdHkgcHJpb3JpdHkpCi17Ci0gICAgc3dpdGNoIChwcmlvcml0eSkg
ewotICAgIGNhc2UgUmVzb3VyY2VMb2FkUHJpb3JpdHk6OlZlcnlMb3c6Ci0gICAgICAgIHJldHVy
biAwOwotICAgIGNhc2UgUmVzb3VyY2VMb2FkUHJpb3JpdHk6OkxvdzoKLSAgICAgICAgcmV0dXJu
IDE7Ci0gICAgY2FzZSBSZXNvdXJjZUxvYWRQcmlvcml0eTo6TWVkaXVtOgotICAgICAgICByZXR1
cm4gMjsKLSAgICBjYXNlIFJlc291cmNlTG9hZFByaW9yaXR5OjpIaWdoOgotICAgICAgICByZXR1
cm4gMzsKLSAgICBjYXNlIFJlc291cmNlTG9hZFByaW9yaXR5OjpWZXJ5SGlnaDoKLSAgICAgICAg
cmV0dXJuIDQ7Ci0gICAgfQotICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwotICAgIHJldHVybiAw
OwotfQotCi12b2lkIFJlc291cmNlTG9hZFNjaGVkdWxlcjo6SG9zdEluZm9ybWF0aW9uOjpzY2hl
ZHVsZShSZXNvdXJjZUxvYWRlciogcmVzb3VyY2VMb2FkZXIsIFJlc291cmNlTG9hZFByaW9yaXR5
IHByaW9yaXR5KQotewotICAgIG1fcmVxdWVzdHNQZW5kaW5nW3ByaW9yaXR5VG9JbmRleChwcmlv
cml0eSldLmFwcGVuZChyZXNvdXJjZUxvYWRlcik7Ci19Ci0gICAgCi12b2lkIFJlc291cmNlTG9h
ZFNjaGVkdWxlcjo6SG9zdEluZm9ybWF0aW9uOjphZGRMb2FkSW5Qcm9ncmVzcyhSZXNvdXJjZUxv
YWRlciogcmVzb3VyY2VMb2FkZXIpCi17Ci0gICAgTE9HKFJlc291cmNlTG9hZGluZywgIkhvc3RJ
bmZvcm1hdGlvbiAnJXMnIGxvYWRpbmcgJyVzJy4gQ3VycmVudCBjb3VudCAlZCIsIG1fbmFtZS5s
YXRpbjEoKS5kYXRhKCksIHJlc291cmNlTG9hZGVyLT51cmwoKS5zdHJpbmcoKS5sYXRpbjEoKS5k
YXRhKCksIG1fcmVxdWVzdHNMb2FkaW5nLnNpemUoKSk7Ci0gICAgbV9yZXF1ZXN0c0xvYWRpbmcu
YWRkKHJlc291cmNlTG9hZGVyKTsKLX0KLSAgICAKLXZvaWQgUmVzb3VyY2VMb2FkU2NoZWR1bGVy
OjpIb3N0SW5mb3JtYXRpb246OnJlbW92ZShSZXNvdXJjZUxvYWRlciogcmVzb3VyY2VMb2FkZXIp
Ci17Ci0gICAgaWYgKG1fcmVxdWVzdHNMb2FkaW5nLnJlbW92ZShyZXNvdXJjZUxvYWRlcikpCi0g
ICAgICAgIHJldHVybjsKLSAgICAKLSAgICBmb3IgKGF1dG8mIHJlcXVlc3RRdWV1ZSA6IG1fcmVx
dWVzdHNQZW5kaW5nKSB7Ci0gICAgICAgIGZvciAoYXV0byBpdCA9IHJlcXVlc3RRdWV1ZS5iZWdp
bigpLCBlbmQgPSByZXF1ZXN0UXVldWUuZW5kKCk7IGl0ICE9IGVuZDsgKytpdCkgewotICAgICAg
ICAgICAgaWYgKCppdCA9PSByZXNvdXJjZUxvYWRlcikgewotICAgICAgICAgICAgICAgIHJlcXVl
c3RRdWV1ZS5yZW1vdmUoaXQpOwotICAgICAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgICAg
IH0KLSAgICAgICAgfQotICAgIH0KLX0KLQotYm9vbCBSZXNvdXJjZUxvYWRTY2hlZHVsZXI6Okhv
c3RJbmZvcm1hdGlvbjo6aGFzUmVxdWVzdHMoKSBjb25zdAotewotICAgIGlmICghbV9yZXF1ZXN0
c0xvYWRpbmcuaXNFbXB0eSgpKQotICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICBmb3IgKGF1dG8m
IHJlcXVlc3RRdWV1ZSA6IG1fcmVxdWVzdHNQZW5kaW5nKSB7Ci0gICAgICAgIGlmICghcmVxdWVz
dFF1ZXVlLmlzRW1wdHkoKSkKLSAgICAgICAgICAgIHJldHVybiB0cnVlOwotICAgIH0KLSAgICBy
ZXR1cm4gZmFsc2U7Ci19Ci0KLWJvb2wgUmVzb3VyY2VMb2FkU2NoZWR1bGVyOjpIb3N0SW5mb3Jt
YXRpb246OmxpbWl0UmVxdWVzdHMoUmVzb3VyY2VMb2FkUHJpb3JpdHkgcHJpb3JpdHkpIGNvbnN0
IAotewotICAgIGlmIChwcmlvcml0eSA9PSBSZXNvdXJjZUxvYWRQcmlvcml0eTo6VmVyeUxvdyAm
JiAhbV9yZXF1ZXN0c0xvYWRpbmcuaXNFbXB0eSgpKQotICAgICAgICByZXR1cm4gdHJ1ZTsKLSAg
ICByZXR1cm4gbV9yZXF1ZXN0c0xvYWRpbmcuc2l6ZSgpID49IChyZXNvdXJjZUxvYWRTY2hlZHVs
ZXIoKS0+aXNTZXJpYWxMb2FkaW5nRW5hYmxlZCgpID8gMSA6IG1fbWF4UmVxdWVzdHNJbkZsaWdo
dCk7Ci19Ci0KLX0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2xv
YWRlci9SZXNvdXJjZUxvYWRTY2hlZHVsZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29y
ZS9sb2FkZXIvUmVzb3VyY2VMb2FkU2NoZWR1bGVyLmgJKHJldmlzaW9uIDE5Mjg4MCkKKysrIFNv
dXJjZS9XZWJDb3JlL2xvYWRlci9SZXNvdXJjZUxvYWRTY2hlZHVsZXIuaAkod29ya2luZyBjb3B5
KQpAQCAtMSwxMzQgKzAsMCBAQAotLyoKLSAgICBDb3B5cmlnaHQgKEMpIDE5OTggTGFycyBLbm9s
bCAoa25vbGxAbXBpLWhkLm1wZy5kZSkKLSAgICBDb3B5cmlnaHQgKEMpIDIwMDEgRGlyayBNdWVs
bGVyIDxtdWVsbGVyQGtkZS5vcmc+Ci0gICAgQ29weXJpZ2h0IChDKSAyMDA0LCAyMDA2LCAyMDA3
LCAyMDA4IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAgICBDb3B5cmlnaHQgKEMp
IDIwMTAgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLQotICAgIFRoaXMgbGlicmFy
eSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKLSAgICBt
b2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1Ymxp
YwotICAgIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRp
b247IGVpdGhlcgotICAgIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0
aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLQotICAgIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRl
ZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICAgIGJ1dCBXSVRIT1VUIEFO
WSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gICAgTUVS
Q0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRo
ZSBHTlUKLSAgICBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWls
cy4KLQotICAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJy
YXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKLSAgICBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsg
c2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bwotICAgIHRoZSBGcmVl
IFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxv
b3IsCi0gICAgQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCi0gKi8KLQotI2lmbmRlZiBSZXNv
dXJjZUxvYWRTY2hlZHVsZXJfaAotI2RlZmluZSBSZXNvdXJjZUxvYWRTY2hlZHVsZXJfaAotCi0j
aW5jbHVkZSAiRnJhbWVMb2FkZXJUeXBlcy5oIgotI2luY2x1ZGUgIlJlc291cmNlTG9hZGVyT3B0
aW9ucy5oIgotI2luY2x1ZGUgIlJlc291cmNlTG9hZFByaW9yaXR5LmgiCi0jaW5jbHVkZSAiVGlt
ZXIuaCIKLSNpbmNsdWRlIDxhcnJheT4KLSNpbmNsdWRlIDx3dGYvRGVxdWUuaD4KLSNpbmNsdWRl
IDx3dGYvSGFzaE1hcC5oPgotI2luY2x1ZGUgPHd0Zi9IYXNoU2V0Lmg+Ci0jaW5jbHVkZSA8d3Rm
L05vbmNvcHlhYmxlLmg+Ci0jaW5jbHVkZSA8d3RmL3RleHQvU3RyaW5nSGFzaC5oPgotI2luY2x1
ZGUgPHd0Zi90ZXh0L1dURlN0cmluZy5oPgotCi1uYW1lc3BhY2UgV2ViQ29yZSB7Ci0KLWNsYXNz
IENhY2hlZFJlc291cmNlOwotY2xhc3MgRnJhbWU7Ci1jbGFzcyBVUkw7Ci1jbGFzcyBOZXRzY2Fw
ZVBsdWdJblN0cmVhbUxvYWRlcjsKLWNsYXNzIE5ldHNjYXBlUGx1Z0luU3RyZWFtTG9hZGVyQ2xp
ZW50OwotY2xhc3MgUmVzb3VyY2VMb2FkZXI7Ci1jbGFzcyBSZXNvdXJjZVJlcXVlc3Q7Ci1jbGFz
cyBTdWJyZXNvdXJjZUxvYWRlcjsKLQotY2xhc3MgUmVzb3VyY2VMb2FkU2NoZWR1bGVyIHsKLSAg
ICBXVEZfTUFLRV9OT05DT1BZQUJMRShSZXNvdXJjZUxvYWRTY2hlZHVsZXIpOyBXVEZfTUFLRV9G
QVNUX0FMTE9DQVRFRDsKLXB1YmxpYzoKLSAgICBXRUJDT1JFX0VYUE9SVCBmcmllbmQgUmVzb3Vy
Y2VMb2FkU2NoZWR1bGVyKiByZXNvdXJjZUxvYWRTY2hlZHVsZXIoKTsKLQotICAgIFdFQkNPUkVf
RVhQT1JUIHZpcnR1YWwgUmVmUHRyPFN1YnJlc291cmNlTG9hZGVyPiBzY2hlZHVsZVN1YnJlc291
cmNlTG9hZChGcmFtZSosIENhY2hlZFJlc291cmNlKiwgY29uc3QgUmVzb3VyY2VSZXF1ZXN0Jiwg
Y29uc3QgUmVzb3VyY2VMb2FkZXJPcHRpb25zJik7Ci0gICAgV0VCQ09SRV9FWFBPUlQgdmlydHVh
bCBSZWZQdHI8TmV0c2NhcGVQbHVnSW5TdHJlYW1Mb2FkZXI+IHNjaGVkdWxlUGx1Z2luU3RyZWFt
TG9hZChGcmFtZSosIE5ldHNjYXBlUGx1Z0luU3RyZWFtTG9hZGVyQ2xpZW50KiwgY29uc3QgUmVz
b3VyY2VSZXF1ZXN0Jik7Ci0gICAgV0VCQ09SRV9FWFBPUlQgdmlydHVhbCB2b2lkIHJlbW92ZShS
ZXNvdXJjZUxvYWRlciopOwotICAgIHZpcnR1YWwgdm9pZCBzZXREZWZlcnNMb2FkaW5nKFJlc291
cmNlTG9hZGVyKiwgYm9vbCk7Ci0gICAgdmlydHVhbCB2b2lkIGNyb3NzT3JpZ2luUmVkaXJlY3RS
ZWNlaXZlZChSZXNvdXJjZUxvYWRlciosIGNvbnN0IFVSTCYgcmVkaXJlY3RVUkwpOwotICAgIAot
ICAgIFdFQkNPUkVfRVhQT1JUIHZpcnR1YWwgdm9pZCBzZXJ2ZVBlbmRpbmdSZXF1ZXN0cyhSZXNv
dXJjZUxvYWRQcmlvcml0eSBtaW5pbXVtUHJpb3JpdHkgPSBSZXNvdXJjZUxvYWRQcmlvcml0eTo6
VmVyeUxvdyk7Ci0gICAgV0VCQ09SRV9FWFBPUlQgdmlydHVhbCB2b2lkIHN1c3BlbmRQZW5kaW5n
UmVxdWVzdHMoKTsKLSAgICBXRUJDT1JFX0VYUE9SVCB2aXJ0dWFsIHZvaWQgcmVzdW1lUGVuZGlu
Z1JlcXVlc3RzKCk7Ci0gICAgCi0gICAgYm9vbCBpc1NlcmlhbExvYWRpbmdFbmFibGVkKCkgY29u
c3QgeyByZXR1cm4gbV9pc1NlcmlhbExvYWRpbmdFbmFibGVkOyB9Ci0gICAgdmlydHVhbCB2b2lk
IHNldFNlcmlhbExvYWRpbmdFbmFibGVkKGJvb2wgYikgeyBtX2lzU2VyaWFsTG9hZGluZ0VuYWJs
ZWQgPSBiOyB9Ci0KLSAgICBjbGFzcyBTdXNwZW5kZXIgewotICAgIHB1YmxpYzoKLSAgICAgICAg
ZXhwbGljaXQgU3VzcGVuZGVyKFJlc291cmNlTG9hZFNjaGVkdWxlciYgc2NoZWR1bGVyKSA6IG1f
c2NoZWR1bGVyKHNjaGVkdWxlcikgeyBtX3NjaGVkdWxlci5zdXNwZW5kUGVuZGluZ1JlcXVlc3Rz
KCk7IH0KLSAgICAgICAgflN1c3BlbmRlcigpIHsgbV9zY2hlZHVsZXIucmVzdW1lUGVuZGluZ1Jl
cXVlc3RzKCk7IH0KLSAgICBwcml2YXRlOgotICAgICAgICBSZXNvdXJjZUxvYWRTY2hlZHVsZXIm
IG1fc2NoZWR1bGVyOwotICAgIH07Ci0KLXByb3RlY3RlZDoKLSAgICBXRUJDT1JFX0VYUE9SVCBS
ZXNvdXJjZUxvYWRTY2hlZHVsZXIoKTsKLSAgICBXRUJDT1JFX0VYUE9SVCB2aXJ0dWFsIH5SZXNv
dXJjZUxvYWRTY2hlZHVsZXIoKTsKLQotcHJpdmF0ZToKLSAgICB2b2lkIHNjaGVkdWxlTG9hZChS
ZXNvdXJjZUxvYWRlciopOwotICAgIHZvaWQgc2NoZWR1bGVTZXJ2ZVBlbmRpbmdSZXF1ZXN0cygp
OwotICAgIHZvaWQgcmVxdWVzdFRpbWVyRmlyZWQoKTsKLQotICAgIGJvb2wgaXNTdXNwZW5kaW5n
UGVuZGluZ1JlcXVlc3RzKCkgY29uc3QgeyByZXR1cm4gISFtX3N1c3BlbmRQZW5kaW5nUmVxdWVz
dHNDb3VudDsgfQotCi0gICAgY2xhc3MgSG9zdEluZm9ybWF0aW9uIHsKLSAgICAgICAgV1RGX01B
S0VfTk9OQ09QWUFCTEUoSG9zdEluZm9ybWF0aW9uKTsgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7
Ci0gICAgcHVibGljOgotICAgICAgICBIb3N0SW5mb3JtYXRpb24oY29uc3QgU3RyaW5nJiwgdW5z
aWduZWQpOwotICAgICAgICB+SG9zdEluZm9ybWF0aW9uKCk7Ci0gICAgICAgIAotICAgICAgICBj
b25zdCBTdHJpbmcmIG5hbWUoKSBjb25zdCB7IHJldHVybiBtX25hbWU7IH0KLSAgICAgICAgdm9p
ZCBzY2hlZHVsZShSZXNvdXJjZUxvYWRlciosIFJlc291cmNlTG9hZFByaW9yaXR5ID0gUmVzb3Vy
Y2VMb2FkUHJpb3JpdHk6OlZlcnlMb3cpOwotICAgICAgICB2b2lkIGFkZExvYWRJblByb2dyZXNz
KFJlc291cmNlTG9hZGVyKik7Ci0gICAgICAgIHZvaWQgcmVtb3ZlKFJlc291cmNlTG9hZGVyKik7
Ci0gICAgICAgIGJvb2wgaGFzUmVxdWVzdHMoKSBjb25zdDsKLSAgICAgICAgYm9vbCBsaW1pdFJl
cXVlc3RzKFJlc291cmNlTG9hZFByaW9yaXR5KSBjb25zdDsKLQotICAgICAgICB0eXBlZGVmIERl
cXVlPFJlZlB0cjxSZXNvdXJjZUxvYWRlcj4+IFJlcXVlc3RRdWV1ZTsKLSAgICAgICAgUmVxdWVz
dFF1ZXVlJiByZXF1ZXN0c1BlbmRpbmcoUmVzb3VyY2VMb2FkUHJpb3JpdHkgcHJpb3JpdHkpIHsg
cmV0dXJuIG1fcmVxdWVzdHNQZW5kaW5nW3ByaW9yaXR5VG9JbmRleChwcmlvcml0eSldOyB9Ci0K
LSAgICBwcml2YXRlOgotICAgICAgICBzdGF0aWMgdW5zaWduZWQgcHJpb3JpdHlUb0luZGV4KFJl
c291cmNlTG9hZFByaW9yaXR5KTsKLQotICAgICAgICBzdGQ6OmFycmF5PFJlcXVlc3RRdWV1ZSwg
cmVzb3VyY2VMb2FkUHJpb3JpdHlDb3VudD4gbV9yZXF1ZXN0c1BlbmRpbmc7Ci0gICAgICAgIHR5
cGVkZWYgSGFzaFNldDxSZWZQdHI8UmVzb3VyY2VMb2FkZXI+PiBSZXF1ZXN0TWFwOwotICAgICAg
ICBSZXF1ZXN0TWFwIG1fcmVxdWVzdHNMb2FkaW5nOwotICAgICAgICBjb25zdCBTdHJpbmcgbV9u
YW1lOwotICAgICAgICBjb25zdCB1bnNpZ25lZCBtX21heFJlcXVlc3RzSW5GbGlnaHQ7Ci0gICAg
fTsKLQotICAgIGVudW0gQ3JlYXRlSG9zdFBvbGljeSB7Ci0gICAgICAgIENyZWF0ZUlmTm90Rm91
bmQsCi0gICAgICAgIEZpbmRPbmx5Ci0gICAgfTsKLSAgICAKLSAgICBIb3N0SW5mb3JtYXRpb24q
IGhvc3RGb3JVUkwoY29uc3QgVVJMJiwgQ3JlYXRlSG9zdFBvbGljeSA9IEZpbmRPbmx5KTsKLSAg
ICBXRUJDT1JFX0VYUE9SVCB2b2lkIHNlcnZlUGVuZGluZ1JlcXVlc3RzKEhvc3RJbmZvcm1hdGlv
biosIFJlc291cmNlTG9hZFByaW9yaXR5KTsKLQotICAgIHR5cGVkZWYgSGFzaE1hcDxTdHJpbmcs
IEhvc3RJbmZvcm1hdGlvbiosIFN0cmluZ0hhc2g+IEhvc3RNYXA7Ci0gICAgSG9zdE1hcCBtX2hv
c3RzOwotICAgIEhvc3RJbmZvcm1hdGlvbiogbV9ub25IVFRQUHJvdG9jb2xIb3N0OwotICAgICAg
ICAKLSAgICBUaW1lciBtX3JlcXVlc3RUaW1lcjsKLQotICAgIHVuc2lnbmVkIG1fc3VzcGVuZFBl
bmRpbmdSZXF1ZXN0c0NvdW50OwotICAgIGJvb2wgbV9pc1NlcmlhbExvYWRpbmdFbmFibGVkOwot
fTsKLQotV0VCQ09SRV9FWFBPUlQgUmVzb3VyY2VMb2FkU2NoZWR1bGVyKiByZXNvdXJjZUxvYWRT
Y2hlZHVsZXIoKTsKLQotfQotCi0jZW5kaWYKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2xvYWRlci9S
ZXNvdXJjZUxvYWRlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvbG9hZGVyL1Jl
c291cmNlTG9hZGVyLmNwcAkocmV2aXNpb24gMTkyODgwKQorKysgU291cmNlL1dlYkNvcmUvbG9h
ZGVyL1Jlc291cmNlTG9hZGVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDcsNyArNDcsNiBAQAog
I2luY2x1ZGUgIlByb2dyZXNzVHJhY2tlci5oIgogI2luY2x1ZGUgIlJlc291cmNlRXJyb3IuaCIK
ICNpbmNsdWRlICJSZXNvdXJjZUhhbmRsZS5oIgotI2luY2x1ZGUgIlJlc291cmNlTG9hZFNjaGVk
dWxlci5oIgogI2luY2x1ZGUgIlNlY3VyaXR5T3JpZ2luLmgiCiAjaW5jbHVkZSAiU2V0dGluZ3Mu
aCIKICNpbmNsdWRlICJTaGFyZWRCdWZmZXIuaCIKQEAgLTgzLDcgKzgyLDcgQEAgUmVzb3VyY2VM
b2FkZXI6On5SZXNvdXJjZUxvYWRlcigpCiAKIHZvaWQgUmVzb3VyY2VMb2FkZXI6OmZpbmlzaE5l
dHdvcmtMb2FkKCkKIHsKLSAgICBwbGF0Zm9ybVN0cmF0ZWdpZXMoKS0+bG9hZGVyU3RyYXRlZ3ko
KS0+cmVzb3VyY2VMb2FkU2NoZWR1bGVyKCktPnJlbW92ZSh0aGlzKTsKKyAgICBwbGF0Zm9ybVN0
cmF0ZWdpZXMoKS0+bG9hZGVyU3RyYXRlZ3koKS0+cmVtb3ZlKHRoaXMpOwogCiAgICAgaWYgKG1f
aGFuZGxlKSB7CiAgICAgICAgIEFTU0VSVChtX2hhbmRsZS0+Y2xpZW50KCkgPT0gdGhpcyk7CkBA
IC0yMzMsNyArMjMyLDcgQEAgdm9pZCBSZXNvdXJjZUxvYWRlcjo6c2V0RGVmZXJzTG9hZGluZyhi
bwogICAgICAgICBzdGFydCgpOwogICAgIH0KIAotICAgIHBsYXRmb3JtU3RyYXRlZ2llcygpLT5s
b2FkZXJTdHJhdGVneSgpLT5yZXNvdXJjZUxvYWRTY2hlZHVsZXIoKS0+c2V0RGVmZXJzTG9hZGlu
Zyh0aGlzLCBkZWZlcnMpOworICAgIHBsYXRmb3JtU3RyYXRlZ2llcygpLT5sb2FkZXJTdHJhdGVn
eSgpLT5zZXREZWZlcnNMb2FkaW5nKHRoaXMsIGRlZmVycyk7CiB9CiAKIEZyYW1lTG9hZGVyKiBS
ZXNvdXJjZUxvYWRlcjo6ZnJhbWVMb2FkZXIoKSBjb25zdApAQCAtMjg5LDcgKzI4OCw3IEBAIHZv
aWQgUmVzb3VyY2VMb2FkZXI6OnNldERhdGFCdWZmZXJpbmdQb2wKIHZvaWQgUmVzb3VyY2VMb2Fk
ZXI6OndpbGxTd2l0Y2hUb1N1YnN0aXR1dGVSZXNvdXJjZSgpCiB7CiAgICAgQVNTRVJUKCFtX2Rv
Y3VtZW50TG9hZGVyLT5pc1N1YnN0aXR1dGVMb2FkUGVuZGluZyh0aGlzKSk7Ci0gICAgcGxhdGZv
cm1TdHJhdGVnaWVzKCktPmxvYWRlclN0cmF0ZWd5KCktPnJlc291cmNlTG9hZFNjaGVkdWxlcigp
LT5yZW1vdmUodGhpcyk7CisgICAgcGxhdGZvcm1TdHJhdGVnaWVzKCktPmxvYWRlclN0cmF0ZWd5
KCktPnJlbW92ZSh0aGlzKTsKICAgICBpZiAobV9oYW5kbGUpCiAgICAgICAgIG1faGFuZGxlLT5j
YW5jZWwoKTsKIH0KQEAgLTM3Niw3ICszNzUsNyBAQCB2b2lkIFJlc291cmNlTG9hZGVyOjp3aWxs
U2VuZFJlcXVlc3RJbnRlCiAKICAgICBib29sIGlzUmVkaXJlY3QgPSAhcmVkaXJlY3RSZXNwb25z
ZS5pc051bGwoKTsKICAgICBpZiAoaXNSZWRpcmVjdCkKLSAgICAgICAgcGxhdGZvcm1TdHJhdGVn
aWVzKCktPmxvYWRlclN0cmF0ZWd5KCktPnJlc291cmNlTG9hZFNjaGVkdWxlcigpLT5jcm9zc09y
aWdpblJlZGlyZWN0UmVjZWl2ZWQodGhpcywgcmVxdWVzdC51cmwoKSk7CisgICAgICAgIHBsYXRm
b3JtU3RyYXRlZ2llcygpLT5sb2FkZXJTdHJhdGVneSgpLT5jcm9zc09yaWdpblJlZGlyZWN0UmVj
ZWl2ZWQodGhpcywgcmVxdWVzdC51cmwoKSk7CiAKICAgICBtX3JlcXVlc3QgPSByZXF1ZXN0Owog
CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9sb2FkZXIvYXJjaGl2ZS9BcmNoaXZlUmVzb3VyY2VDb2xs
ZWN0aW9uLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvbG9hZGVyL2FyY2hpdmUvQXJj
aGl2ZVJlc291cmNlQ29sbGVjdGlvbi5oCShyZXZpc2lvbiAxOTI4ODApCisrKyBTb3VyY2UvV2Vi
Q29yZS9sb2FkZXIvYXJjaGl2ZS9BcmNoaXZlUmVzb3VyY2VDb2xsZWN0aW9uLmgJKHdvcmtpbmcg
Y29weSkKQEAgLTQ3LDcgKzQ3LDcgQEAgcHVibGljOgogICAgIHZvaWQgYWRkUmVzb3VyY2UoUGFz
c1JlZlB0cjxBcmNoaXZlUmVzb3VyY2U+KTsKICAgICB2b2lkIGFkZEFsbFJlc291cmNlcyhBcmNo
aXZlKik7CiAgICAgCi0gICAgQXJjaGl2ZVJlc291cmNlKiBhcmNoaXZlUmVzb3VyY2VGb3JVUkwo
Y29uc3QgVVJMJik7CisgICAgV0VCQ09SRV9FWFBPUlQgQXJjaGl2ZVJlc291cmNlKiBhcmNoaXZl
UmVzb3VyY2VGb3JVUkwoY29uc3QgVVJMJik7CiAgICAgUGFzc1JlZlB0cjxBcmNoaXZlPiBwb3BT
dWJmcmFtZUFyY2hpdmUoY29uc3QgU3RyaW5nJiBmcmFtZU5hbWUsIGNvbnN0IFVSTCYpOwogICAg
IAogcHJpdmF0ZTogICAgCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9sb2FkZXIvY2FjaGUvQ2FjaGVk
UmVzb3VyY2UuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2xvYWRlci9jYWNoZS9D
YWNoZWRSZXNvdXJjZS5jcHAJKHJldmlzaW9uIDE5Mjg4MCkKKysrIFNvdXJjZS9XZWJDb3JlL2xv
YWRlci9jYWNoZS9DYWNoZWRSZXNvdXJjZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQ0LDcgKzQ0
LDYgQEAKICNpbmNsdWRlICJNZW1vcnlDYWNoZS5oIgogI2luY2x1ZGUgIlBsYXRmb3JtU3RyYXRl
Z2llcy5oIgogI2luY2x1ZGUgIlJlc291cmNlSGFuZGxlLmgiCi0jaW5jbHVkZSAiUmVzb3VyY2VM
b2FkU2NoZWR1bGVyLmgiCiAjaW5jbHVkZSAiU2NoZW1lUmVnaXN0cnkuaCIKICNpbmNsdWRlICJT
ZWN1cml0eU9yaWdpbi5oIgogI2luY2x1ZGUgIlNlY3VyaXR5UG9saWN5LmgiCkBAIC0yNzgsNyAr
Mjc3LDcgQEAgdm9pZCBDYWNoZWRSZXNvdXJjZTo6bG9hZChDYWNoZWRSZXNvdXJjZQogICAgICAg
ICBtX2ZyYWdtZW50SWRlbnRpZmllckZvclJlcXVlc3QgPSBTdHJpbmcoKTsKICAgICB9CiAKLSAg
ICBtX2xvYWRlciA9IHBsYXRmb3JtU3RyYXRlZ2llcygpLT5sb2FkZXJTdHJhdGVneSgpLT5yZXNv
dXJjZUxvYWRTY2hlZHVsZXIoKS0+c2NoZWR1bGVTdWJyZXNvdXJjZUxvYWQoY2FjaGVkUmVzb3Vy
Y2VMb2FkZXIuZnJhbWUoKSwgdGhpcywgcmVxdWVzdCwgb3B0aW9ucyk7CisgICAgbV9sb2FkZXIg
PSBwbGF0Zm9ybVN0cmF0ZWdpZXMoKS0+bG9hZGVyU3RyYXRlZ3koKS0+bG9hZFJlc291cmNlKGNh
Y2hlZFJlc291cmNlTG9hZGVyLmZyYW1lKCksIHRoaXMsIHJlcXVlc3QsIG9wdGlvbnMpOwogICAg
IGlmICghbV9sb2FkZXIpIHsKICAgICAgICAgZmFpbEJlZm9yZVN0YXJ0aW5nKCk7CiAgICAgICAg
IHJldHVybjsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2xvYWRlci9jYWNoZS9DYWNoZWRSZXNvdXJj
ZUxvYWRlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvbG9hZGVyL2NhY2hlL0Nh
Y2hlZFJlc291cmNlTG9hZGVyLmNwcAkocmV2aXNpb24gMTkyODgwKQorKysgU291cmNlL1dlYkNv
cmUvbG9hZGVyL2NhY2hlL0NhY2hlZFJlc291cmNlTG9hZGVyLmNwcAkod29ya2luZyBjb3B5KQpA
QCAtNjEsNyArNjEsNiBAQAogI2luY2x1ZGUgIlBsYXRmb3JtU3RyYXRlZ2llcy5oIgogI2luY2x1
ZGUgIlJlbmRlckVsZW1lbnQuaCIKICNpbmNsdWRlICJSZXNvdXJjZUxvYWRJbmZvLmgiCi0jaW5j
bHVkZSAiUmVzb3VyY2VMb2FkU2NoZWR1bGVyLmgiCiAjaW5jbHVkZSAiU2NyaXB0Q29udHJvbGxl
ci5oIgogI2luY2x1ZGUgIlNlY3VyaXR5T3JpZ2luLmgiCiAjaW5jbHVkZSAiU2Vzc2lvbklELmgi
CkBAIC05NjcsNyArOTY2LDcgQEAgdm9pZCBDYWNoZWRSZXNvdXJjZUxvYWRlcjo6cGVyZm9ybVBv
c3RMbwogewogICAgIGNoZWNrRm9yUGVuZGluZ1ByZWxvYWRzKCk7CiAKLSAgICBwbGF0Zm9ybVN0
cmF0ZWdpZXMoKS0+bG9hZGVyU3RyYXRlZ3koKS0+cmVzb3VyY2VMb2FkU2NoZWR1bGVyKCktPnNl
cnZlUGVuZGluZ1JlcXVlc3RzKCk7CisgICAgcGxhdGZvcm1TdHJhdGVnaWVzKCktPmxvYWRlclN0
cmF0ZWd5KCktPnNlcnZlUGVuZGluZ1JlcXVlc3RzKCk7CiB9CiAKIHZvaWQgQ2FjaGVkUmVzb3Vy
Y2VMb2FkZXI6OmluY3JlbWVudFJlcXVlc3RDb3VudChjb25zdCBDYWNoZWRSZXNvdXJjZSogcmVz
KQpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vUGxhdGZvcm1TdHJhdGVnaWVzLmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vUGxhdGZvcm1TdHJhdGVnaWVzLmgJ
KHJldmlzaW9uIDE5Mjg4MCkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL1BsYXRmb3JtU3Ry
YXRlZ2llcy5oCSh3b3JraW5nIGNvcHkpCkBAIC0yOCw2ICsyOCw3IEBACiAKIG5hbWVzcGFjZSBX
ZWJDb3JlIHsKIAorY2xhc3MgQmxvYlJlZ2lzdHJ5OwogY2xhc3MgQ29va2llc1N0cmF0ZWd5Owog
Y2xhc3MgTG9hZGVyU3RyYXRlZ3k7CiBjbGFzcyBQYXN0ZWJvYXJkU3RyYXRlZ3k7CkBAIC02Mywx
MiArNjQsMTUgQEAgcHVibGljOgogICAgICAgICByZXR1cm4gbV9wbHVnaW5TdHJhdGVneTsKICAg
ICB9CiAKKyAgICBCbG9iUmVnaXN0cnkqIGJsb2JSZWdpc3RyeSgpCisgICAgeworICAgICAgICBp
ZiAoIW1fYmxvYlJlZ2lzdHJ5KQorICAgICAgICAgICAgbV9ibG9iUmVnaXN0cnkgPSBjcmVhdGVC
bG9iUmVnaXN0cnkoKTsKKyAgICAgICAgcmV0dXJuIG1fYmxvYlJlZ2lzdHJ5OworICAgIH0KKwog
cHJvdGVjdGVkOgogICAgIFBsYXRmb3JtU3RyYXRlZ2llcygpCi0gICAgICAgIDogbV9jb29raWVz
U3RyYXRlZ3kobnVsbHB0cikKLSAgICAgICAgLCBtX2xvYWRlclN0cmF0ZWd5KG51bGxwdHIpCi0g
ICAgICAgICwgbV9wYXN0ZWJvYXJkU3RyYXRlZ3kobnVsbHB0cikKLSAgICAgICAgLCBtX3BsdWdp
blN0cmF0ZWd5KG51bGxwdHIpCiAgICAgewogICAgIH0KIApAQCAtODEsMTEgKzg1LDEzIEBAIHBy
aXZhdGU6CiAgICAgdmlydHVhbCBMb2FkZXJTdHJhdGVneSogY3JlYXRlTG9hZGVyU3RyYXRlZ3ko
KSA9IDA7CiAgICAgdmlydHVhbCBQYXN0ZWJvYXJkU3RyYXRlZ3kqIGNyZWF0ZVBhc3RlYm9hcmRT
dHJhdGVneSgpID0gMDsKICAgICB2aXJ0dWFsIFBsdWdpblN0cmF0ZWd5KiBjcmVhdGVQbHVnaW5T
dHJhdGVneSgpID0gMDsKKyAgICB2aXJ0dWFsIEJsb2JSZWdpc3RyeSogY3JlYXRlQmxvYlJlZ2lz
dHJ5KCkgPSAwOwogCi0gICAgQ29va2llc1N0cmF0ZWd5KiBtX2Nvb2tpZXNTdHJhdGVneTsKLSAg
ICBMb2FkZXJTdHJhdGVneSogbV9sb2FkZXJTdHJhdGVneTsKLSAgICBQYXN0ZWJvYXJkU3RyYXRl
Z3kqIG1fcGFzdGVib2FyZFN0cmF0ZWd5OwotICAgIFBsdWdpblN0cmF0ZWd5KiBtX3BsdWdpblN0
cmF0ZWd5OworICAgIENvb2tpZXNTdHJhdGVneSogbV9jb29raWVzU3RyYXRlZ3kgeyB9OworICAg
IExvYWRlclN0cmF0ZWd5KiBtX2xvYWRlclN0cmF0ZWd5IHsgfTsKKyAgICBQYXN0ZWJvYXJkU3Ry
YXRlZ3kqIG1fcGFzdGVib2FyZFN0cmF0ZWd5IHsgfTsKKyAgICBQbHVnaW5TdHJhdGVneSogbV9w
bHVnaW5TdHJhdGVneSB7IH07CisgICAgQmxvYlJlZ2lzdHJ5KiBtX2Jsb2JSZWdpc3RyeSB7IH07
CiB9OwogCiBXRUJDT1JFX0VYUE9SVCBQbGF0Zm9ybVN0cmF0ZWdpZXMqIHBsYXRmb3JtU3RyYXRl
Z2llcygpOwpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vUnVudGltZUFwcGxpY2F0aW9u
Q2hlY2tzSU9TLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vUnVudGlt
ZUFwcGxpY2F0aW9uQ2hlY2tzSU9TLmgJKHJldmlzaW9uIDE5Mjg4MCkKKysrIFNvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL1J1bnRpbWVBcHBsaWNhdGlvbkNoZWNrc0lPUy5oCSh3b3JraW5nIGNvcHkp
CkBAIC0zOSw3ICszOSw3IEBAIFdFQkNPUkVfRVhQT1JUIGJvb2wgYXBwbGljYXRpb25Jc0ZhY2Vi
b28KIFdFQkNPUkVfRVhQT1JUIGJvb2wgYXBwbGljYXRpb25Jc0RhaWppc2VuRGljdGlvbmFyeSgp
OwogYm9vbCBhcHBsaWNhdGlvbklzTkFTQUhEKCk7CiBXRUJDT1JFX0VYUE9SVCBib29sIGFwcGxp
Y2F0aW9uSXNUaGVFY29ub21pc3RPbklQaG9uZSgpOwotYm9vbCBhcHBsaWNhdGlvbklzV2ViUHJv
Y2VzcygpOworV0VCQ09SRV9FWFBPUlQgYm9vbCBhcHBsaWNhdGlvbklzV2ViUHJvY2VzcygpOwog
Ym9vbCBhcHBsaWNhdGlvbklzSUJvb2tzT25JT1MoKTsKIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29y
ZQpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9CbG9iUmVnaXN0cnkuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvQmxvYlJlZ2lz
dHJ5LmNwcAkocmV2aXNpb24gMTkyODgwKQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0
d29yay9CbG9iUmVnaXN0cnkuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00MCw5ICs0MCw3IEBAIG5h
bWVzcGFjZSBXZWJDb3JlIHsKIEJsb2JSZWdpc3RyeSYgYmxvYlJlZ2lzdHJ5KCkKIHsKICAgICBB
U1NFUlQoaXNNYWluVGhyZWFkKCkpOwotCi0gICAgc3RhdGljIEJsb2JSZWdpc3RyeSYgaW5zdGFu
Y2UgPSAqcGxhdGZvcm1TdHJhdGVnaWVzKCktPmxvYWRlclN0cmF0ZWd5KCktPmNyZWF0ZUJsb2JS
ZWdpc3RyeSgpOwotICAgIHJldHVybiBpbnN0YW5jZTsKKyAgICByZXR1cm4gKnBsYXRmb3JtU3Ry
YXRlZ2llcygpLT5ibG9iUmVnaXN0cnkoKTsKIH0KIAogQmxvYlJlZ2lzdHJ5Ojp+QmxvYlJlZ2lz
dHJ5KCkKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvUmVzb3VyY2VSZXF1
ZXN0QmFzZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsv
UmVzb3VyY2VSZXF1ZXN0QmFzZS5oCShyZXZpc2lvbiAxOTI4ODApCisrKyBTb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9uZXR3b3JrL1Jlc291cmNlUmVxdWVzdEJhc2UuaAkod29ya2luZyBjb3B5KQpA
QCAtMjQ0LDcgKzI0NCw3IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKICAgICAgICAgUmVzb3VyY2VS
ZXF1ZXN0QmFzZTo6UmVxdWVzdGVyIHJlcXVlc3RlcjsKICAgICB9OwogICAgIAotICAgIHVuc2ln
bmVkIGluaXRpYWxpemVNYXhpbXVtSFRUUENvbm5lY3Rpb25Db3VudFBlckhvc3QoKTsKKyAgICBX
RUJDT1JFX0VYUE9SVCB1bnNpZ25lZCBpbml0aWFsaXplTWF4aW11bUhUVFBDb25uZWN0aW9uQ291
bnRQZXJIb3N0KCk7CiAjaWYgUExBVEZPUk0oSU9TKQogICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQg
aW5pdGlhbGl6ZUhUVFBDb25uZWN0aW9uU2V0dGluZ3NPblN0YXJ0dXAoKTsKICNlbmRpZgpJbmRl
eDogU291cmNlL1dlYkNvcmUvc3R5bGUvU3R5bGVSZXNvbHZlVHJlZS5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1dlYkNvcmUvc3R5bGUvU3R5bGVSZXNvbHZlVHJlZS5jcHAJKHJldmlzaW9uIDE5
Mjg4MCkKKysrIFNvdXJjZS9XZWJDb3JlL3N0eWxlL1N0eWxlUmVzb2x2ZVRyZWUuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC00Nyw3ICs0Nyw2IEBACiAjaW5jbHVkZSAiUmVuZGVyVGV4dC5oIgogI2lu
Y2x1ZGUgIlJlbmRlclRyZWVQb3NpdGlvbi5oIgogI2luY2x1ZGUgIlJlbmRlcldpZGdldC5oIgot
I2luY2x1ZGUgIlJlc291cmNlTG9hZFNjaGVkdWxlci5oIgogI2luY2x1ZGUgIlNldHRpbmdzLmgi
CiAjaW5jbHVkZSAiU2hhZG93Um9vdC5oIgogI2luY2x1ZGUgIlN0eWxlUmVzb2x2ZUZvckRvY3Vt
ZW50LmgiCkBAIC05NDQsNyArOTQzLDcgQEAgUG9zdFJlc29sdXRpb25DYWxsYmFja0Rpc2FibGVy
OjpQb3N0UmVzbwogICAgICsrcmVzb2x1dGlvbk5lc3RpbmdEZXB0aDsKIAogICAgIGlmIChyZXNv
bHV0aW9uTmVzdGluZ0RlcHRoID09IDEpCi0gICAgICAgIHBsYXRmb3JtU3RyYXRlZ2llcygpLT5s
b2FkZXJTdHJhdGVneSgpLT5yZXNvdXJjZUxvYWRTY2hlZHVsZXIoKS0+c3VzcGVuZFBlbmRpbmdS
ZXF1ZXN0cygpOworICAgICAgICBwbGF0Zm9ybVN0cmF0ZWdpZXMoKS0+bG9hZGVyU3RyYXRlZ3ko
KS0+c3VzcGVuZFBlbmRpbmdSZXF1ZXN0cygpOwogCiAgICAgLy8gRklYTUU6IEl0J3Mgc3RyYW5n
ZSB0byBidWlsZCB0aGlzIGludG8gdGhlIGRpc2FibGVyLgogICAgIHN1c3BlbmRNZW1vcnlDYWNo
ZUNsaWVudENhbGxzKGRvY3VtZW50KTsKQEAgLTk1OSw3ICs5NTgsNyBAQCBQb3N0UmVzb2x1dGlv
bkNhbGxiYWNrRGlzYWJsZXI6On5Qb3N0UmVzCiAgICAgICAgICAgICBxdWV1ZVtpXSgpOwogICAg
ICAgICBxdWV1ZS5jbGVhcigpOwogCi0gICAgICAgIHBsYXRmb3JtU3RyYXRlZ2llcygpLT5sb2Fk
ZXJTdHJhdGVneSgpLT5yZXNvdXJjZUxvYWRTY2hlZHVsZXIoKS0+cmVzdW1lUGVuZGluZ1JlcXVl
c3RzKCk7CisgICAgICAgIHBsYXRmb3JtU3RyYXRlZ2llcygpLT5sb2FkZXJTdHJhdGVneSgpLT5y
ZXN1bWVQZW5kaW5nUmVxdWVzdHMoKTsKICAgICB9CiAKICAgICAtLXJlc29sdXRpb25OZXN0aW5n
RGVwdGg7CkluZGV4OiBTb3VyY2UvV2ViS2l0Mi9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1dlYktpdDIvQ2hhbmdlTG9nCShyZXZpc2lvbiAxOTI4ODApCisrKyBTb3VyY2UvV2ViS2l0
Mi9DaGFuZ2VMb2cJKHdvcmtpbmcgY29weSkKQEAgLTEsMyArMSw0NyBAQAorMjAxNS0xMi0wMiAg
QW50dGkgS29pdmlzdG8gIDxhbnR0aUBhcHBsZS5jb20+CisKKyAgICAgICAgTW92ZSBSZXNvdXJj
ZUxvYWRTY2hlZHVsZXIgdG8gV2ViS2l0MQorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9y
Zy9zaG93X2J1Zy5jZ2k/aWQ9MTUxNzQzCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChP
T1BTISkuCisKKyAgICAgICAgKiBOZXR3b3JrUHJvY2Vzcy9OZXR3b3JrUHJvY2Vzc1BsYXRmb3Jt
U3RyYXRlZ2llcy5jcHA6CisgICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtQcm9jZXNzUGxhdGZvcm1T
dHJhdGVnaWVzOjpjcmVhdGVDb29raWVzU3RyYXRlZ3kpOgorICAgICAgICAoV2ViS2l0OjpOZXR3
b3JrUHJvY2Vzc1BsYXRmb3JtU3RyYXRlZ2llczo6Y3JlYXRlTG9hZGVyU3RyYXRlZ3kpOgorICAg
ICAgICAoV2ViS2l0OjpOZXR3b3JrUHJvY2Vzc1BsYXRmb3JtU3RyYXRlZ2llczo6Y3JlYXRlUGFz
dGVib2FyZFN0cmF0ZWd5KToKKyAgICAgICAgKFdlYktpdDo6TmV0d29ya1Byb2Nlc3NQbGF0Zm9y
bVN0cmF0ZWdpZXM6OmNyZWF0ZVBsdWdpblN0cmF0ZWd5KToKKyAgICAgICAgKFdlYktpdDo6TmV0
d29ya1Byb2Nlc3NQbGF0Zm9ybVN0cmF0ZWdpZXM6OmNyZWF0ZUJsb2JSZWdpc3RyeSk6CisgICAg
ICAgIChXZWJLaXQ6Ok5ldHdvcmtQcm9jZXNzUGxhdGZvcm1TdHJhdGVnaWVzOjpyZXNvdXJjZUxv
YWRTY2hlZHVsZXIpOiBEZWxldGVkLgorICAgICAgICAoV2ViS2l0OjpOZXR3b3JrUHJvY2Vzc1Bs
YXRmb3JtU3RyYXRlZ2llczo6bG9hZFJlc291cmNlU3luY2hyb25vdXNseSk6IERlbGV0ZWQuCisg
ICAgICAgICogTmV0d29ya1Byb2Nlc3MvTmV0d29ya1Byb2Nlc3NQbGF0Zm9ybVN0cmF0ZWdpZXMu
aDoKKyAgICAgICAgKiBXZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0luamVjdGVkQnVuZGxlLmNw
cDoKKyAgICAgICAgKiBXZWJQcm9jZXNzL05ldHdvcmsvV2ViUmVzb3VyY2VMb2FkU2NoZWR1bGVy
LmNwcDoKKyAgICAgICAgKFdlYktpdDo6V2ViUmVzb3VyY2VMb2FkU2NoZWR1bGVyOjp+V2ViUmVz
b3VyY2VMb2FkU2NoZWR1bGVyKToKKyAgICAgICAgKFdlYktpdDo6V2ViUmVzb3VyY2VMb2FkU2No
ZWR1bGVyOjpsb2FkUmVzb3VyY2UpOgorICAgICAgICAoV2ViS2l0OjpXZWJSZXNvdXJjZUxvYWRT
Y2hlZHVsZXI6OnJlc3VtZVBlbmRpbmdSZXF1ZXN0cyk6CisgICAgICAgIChXZWJLaXQ6OldlYlJl
c291cmNlTG9hZFNjaGVkdWxlcjo6bmV0d29ya1Byb2Nlc3NDcmFzaGVkKToKKyAgICAgICAgKFdl
YktpdDo6V2ViUmVzb3VyY2VMb2FkU2NoZWR1bGVyOjpsb2FkUmVzb3VyY2VTeW5jaHJvbm91c2x5
KToKKyAgICAgICAgKFdlYktpdDo6V2ViUmVzb3VyY2VMb2FkU2NoZWR1bGVyOjpjcmVhdGVQaW5n
SGFuZGxlKToKKyAgICAgICAgKFdlYktpdDo6V2ViUmVzb3VyY2VMb2FkU2NoZWR1bGVyOjpzY2hl
ZHVsZVN1YnJlc291cmNlTG9hZCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJLaXQ6OldlYlJlc291
cmNlTG9hZFNjaGVkdWxlcjo6c2V0U2VyaWFsTG9hZGluZ0VuYWJsZWQpOiBEZWxldGVkLgorICAg
ICAgICAqIFdlYlByb2Nlc3MvTmV0d29yay9XZWJSZXNvdXJjZUxvYWRTY2hlZHVsZXIuaDoKKyAg
ICAgICAgKFdlYktpdDo6V2ViUmVzb3VyY2VMb2FkU2NoZWR1bGVyOjp3ZWJSZXNvdXJjZUxvYWRl
ckZvcklkZW50aWZpZXIpOgorICAgICAgICAqIFdlYlByb2Nlc3MvUGx1Z2lucy9QbHVnaW5WaWV3
LmNwcDoKKyAgICAgICAgKFdlYktpdDo6UGx1Z2luVmlldzo6U3RyZWFtOjpzdGFydCk6CisgICAg
ICAgIChXZWJLaXQ6OlBsdWdpblZpZXc6OlN0cmVhbTo6Y2FuY2VsKToKKyAgICAgICAgKiBXZWJQ
cm9jZXNzL1dlYkNvcmVTdXBwb3J0L1dlYlBsYXRmb3JtU3RyYXRlZ2llcy5jcHA6CisgICAgICAg
IChXZWJLaXQ6OldlYlBsYXRmb3JtU3RyYXRlZ2llczo6Y3JlYXRlTG9hZGVyU3RyYXRlZ3kpOgor
ICAgICAgICAoV2ViS2l0OjpXZWJQbGF0Zm9ybVN0cmF0ZWdpZXM6OmNyZWF0ZVBhc3RlYm9hcmRT
dHJhdGVneSk6CisgICAgICAgIChXZWJLaXQ6OldlYlBsYXRmb3JtU3RyYXRlZ2llczo6Y3JlYXRl
UGx1Z2luU3RyYXRlZ3kpOgorICAgICAgICAoV2ViS2l0OjpXZWJQbGF0Zm9ybVN0cmF0ZWdpZXM6
OmNyZWF0ZUJsb2JSZWdpc3RyeSk6CisgICAgICAgIChXZWJLaXQ6OldlYlBsYXRmb3JtU3RyYXRl
Z2llczo6Y29va2llc0ZvckRPTSk6CisgICAgICAgIChXZWJLaXQ6OldlYlBsYXRmb3JtU3RyYXRl
Z2llczo6ZGVsZXRlQ29va2llKToKKyAgICAgICAgKFdlYktpdDo6V2ViUGxhdGZvcm1TdHJhdGVn
aWVzOjpyZWZyZXNoUGx1Z2lucyk6CisgICAgICAgIChXZWJLaXQ6OldlYlBsYXRmb3JtU3RyYXRl
Z2llczo6cmVzb3VyY2VMb2FkU2NoZWR1bGVyKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYktpdDo6
V2ViUGxhdGZvcm1TdHJhdGVnaWVzOjpsb2FkUmVzb3VyY2VTeW5jaHJvbm91c2x5KTogRGVsZXRl
ZC4KKyAgICAgICAgKFdlYktpdDo6V2ViUGxhdGZvcm1TdHJhdGVnaWVzOjpjcmVhdGVQaW5nSGFu
ZGxlKTogRGVsZXRlZC4KKyAgICAgICAgKiBXZWJQcm9jZXNzL1dlYkNvcmVTdXBwb3J0L1dlYlBs
YXRmb3JtU3RyYXRlZ2llcy5oOgorCiAyMDE1LTEyLTAxICBDYXJsb3MgR2FyY2lhIENhbXBvcyAg
PGNnYXJjaWFAaWdhbGlhLmNvbT4KIAogICAgICAgICBVbnJldmlld2VkLiBBZGQgbWlzc2luZyBp
bnNwZWN0b3IgZmlsZXMgdG8gdGhlIEdUSysgYnVpbGQuCkluZGV4OiBTb3VyY2UvV2ViS2l0Mi9O
ZXR3b3JrUHJvY2Vzcy9OZXR3b3JrUHJvY2Vzc1BsYXRmb3JtU3RyYXRlZ2llcy5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1dlYktpdDIvTmV0d29ya1Byb2Nlc3MvTmV0d29ya1Byb2Nlc3NQbGF0
Zm9ybVN0cmF0ZWdpZXMuY3BwCShyZXZpc2lvbiAxOTI4ODApCisrKyBTb3VyY2UvV2ViS2l0Mi9O
ZXR3b3JrUHJvY2Vzcy9OZXR3b3JrUHJvY2Vzc1BsYXRmb3JtU3RyYXRlZ2llcy5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTQxLDMzICs0MSwyMiBAQCB2b2lkIE5ldHdvcmtQcm9jZXNzUGxhdGZvcm1T
dHJhdGVnaWVzOjppCiAKIENvb2tpZXNTdHJhdGVneSogTmV0d29ya1Byb2Nlc3NQbGF0Zm9ybVN0
cmF0ZWdpZXM6OmNyZWF0ZUNvb2tpZXNTdHJhdGVneSgpCiB7Ci0gICAgcmV0dXJuIDA7CisgICAg
cmV0dXJuIG51bGxwdHI7CiB9CiAKIExvYWRlclN0cmF0ZWd5KiBOZXR3b3JrUHJvY2Vzc1BsYXRm
b3JtU3RyYXRlZ2llczo6Y3JlYXRlTG9hZGVyU3RyYXRlZ3koKQogewotICAgIHJldHVybiB0aGlz
OworICAgIHJldHVybiBudWxscHRyOwogfQogCiBQYXN0ZWJvYXJkU3RyYXRlZ3kqIE5ldHdvcmtQ
cm9jZXNzUGxhdGZvcm1TdHJhdGVnaWVzOjpjcmVhdGVQYXN0ZWJvYXJkU3RyYXRlZ3koKQogewot
ICAgIHJldHVybiAwOworICAgIHJldHVybiBudWxscHRyOwogfQogCiBQbHVnaW5TdHJhdGVneSog
TmV0d29ya1Byb2Nlc3NQbGF0Zm9ybVN0cmF0ZWdpZXM6OmNyZWF0ZVBsdWdpblN0cmF0ZWd5KCkK
IHsKLSAgICByZXR1cm4gMDsKLX0KLQotUmVzb3VyY2VMb2FkU2NoZWR1bGVyKiBOZXR3b3JrUHJv
Y2Vzc1BsYXRmb3JtU3RyYXRlZ2llczo6cmVzb3VyY2VMb2FkU2NoZWR1bGVyKCkKLXsKLSAgICBB
U1NFUlRfTk9UX1JFQUNIRUQoKTsKLSAgICByZXR1cm4gMDsKLX0KLQotdm9pZCBOZXR3b3JrUHJv
Y2Vzc1BsYXRmb3JtU3RyYXRlZ2llczo6bG9hZFJlc291cmNlU3luY2hyb25vdXNseShOZXR3b3Jr
aW5nQ29udGV4dCosIHVuc2lnbmVkIGxvbmcsIGNvbnN0IFJlc291cmNlUmVxdWVzdCYsIFN0b3Jl
ZENyZWRlbnRpYWxzLCBDbGllbnRDcmVkZW50aWFsUG9saWN5LCBSZXNvdXJjZUVycm9yJiwgUmVz
b3VyY2VSZXNwb25zZSYsIFZlY3RvcjxjaGFyPiYpCi17Ci0gICAgQVNTRVJUX05PVF9SRUFDSEVE
KCk7CisgICAgcmV0dXJuIG51bGxwdHI7CiB9CiAKIEJsb2JSZWdpc3RyeSogTmV0d29ya1Byb2Nl
c3NQbGF0Zm9ybVN0cmF0ZWdpZXM6OmNyZWF0ZUJsb2JSZWdpc3RyeSgpCkluZGV4OiBTb3VyY2Uv
V2ViS2l0Mi9OZXR3b3JrUHJvY2Vzcy9OZXR3b3JrUHJvY2Vzc1BsYXRmb3JtU3RyYXRlZ2llcy5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQyL05ldHdvcmtQcm9jZXNzL05ldHdvcmtQcm9j
ZXNzUGxhdGZvcm1TdHJhdGVnaWVzLmgJKHJldmlzaW9uIDE5Mjg4MCkKKysrIFNvdXJjZS9XZWJL
aXQyL05ldHdvcmtQcm9jZXNzL05ldHdvcmtQcm9jZXNzUGxhdGZvcm1TdHJhdGVnaWVzLmgJKHdv
cmtpbmcgY29weSkKQEAgLTMxLDIxICszMSwxNyBAQAogCiBuYW1lc3BhY2UgV2ViS2l0IHsKIAot
Y2xhc3MgTmV0d29ya1Byb2Nlc3NQbGF0Zm9ybVN0cmF0ZWdpZXMgOiBwdWJsaWMgV2ViQ29yZTo6
UGxhdGZvcm1TdHJhdGVnaWVzLCBwcml2YXRlIFdlYkNvcmU6OkxvYWRlclN0cmF0ZWd5IHsKK2Ns
YXNzIE5ldHdvcmtQcm9jZXNzUGxhdGZvcm1TdHJhdGVnaWVzIDogcHVibGljIFdlYkNvcmU6OlBs
YXRmb3JtU3RyYXRlZ2llcyB7CiBwdWJsaWM6CiAgICAgc3RhdGljIHZvaWQgaW5pdGlhbGl6ZSgp
OwogICAgIAogcHJpdmF0ZToKICAgICAvLyBXZWJDb3JlOjpQbGF0Zm9ybVN0cmF0ZWdpZXMKLSAg
ICB2aXJ0dWFsIFdlYkNvcmU6OkNvb2tpZXNTdHJhdGVneSogY3JlYXRlQ29va2llc1N0cmF0ZWd5
KCkgb3ZlcnJpZGU7Ci0gICAgdmlydHVhbCBXZWJDb3JlOjpMb2FkZXJTdHJhdGVneSogY3JlYXRl
TG9hZGVyU3RyYXRlZ3koKSBvdmVycmlkZTsKLSAgICB2aXJ0dWFsIFdlYkNvcmU6OlBhc3RlYm9h
cmRTdHJhdGVneSogY3JlYXRlUGFzdGVib2FyZFN0cmF0ZWd5KCkgb3ZlcnJpZGU7Ci0gICAgdmly
dHVhbCBXZWJDb3JlOjpQbHVnaW5TdHJhdGVneSogY3JlYXRlUGx1Z2luU3RyYXRlZ3koKSBvdmVy
cmlkZTsKLQotICAgIC8vIFdlYkNvcmU6OkxvYWRlclN0cmF0ZWd5Ci0gICAgdmlydHVhbCBXZWJD
b3JlOjpSZXNvdXJjZUxvYWRTY2hlZHVsZXIqIHJlc291cmNlTG9hZFNjaGVkdWxlcigpIG92ZXJy
aWRlOwotICAgIHZpcnR1YWwgdm9pZCBsb2FkUmVzb3VyY2VTeW5jaHJvbm91c2x5KFdlYkNvcmU6
Ok5ldHdvcmtpbmdDb250ZXh0KiwgdW5zaWduZWQgbG9uZyByZXNvdXJjZUxvYWRJZGVudGlmaWVy
LCBjb25zdCBXZWJDb3JlOjpSZXNvdXJjZVJlcXVlc3QmLCBXZWJDb3JlOjpTdG9yZWRDcmVkZW50
aWFscywgV2ViQ29yZTo6Q2xpZW50Q3JlZGVudGlhbFBvbGljeSwgV2ViQ29yZTo6UmVzb3VyY2VF
cnJvciYsIFdlYkNvcmU6OlJlc291cmNlUmVzcG9uc2UmLCBWZWN0b3I8Y2hhcj4mIGRhdGEpIG92
ZXJyaWRlOwotICAgIHZpcnR1YWwgV2ViQ29yZTo6QmxvYlJlZ2lzdHJ5KiBjcmVhdGVCbG9iUmVn
aXN0cnkoKSBvdmVycmlkZTsKKyAgICBXZWJDb3JlOjpDb29raWVzU3RyYXRlZ3kqIGNyZWF0ZUNv
b2tpZXNTdHJhdGVneSgpIG92ZXJyaWRlOworICAgIFdlYkNvcmU6OkxvYWRlclN0cmF0ZWd5KiBj
cmVhdGVMb2FkZXJTdHJhdGVneSgpIG92ZXJyaWRlOworICAgIFdlYkNvcmU6OlBhc3RlYm9hcmRT
dHJhdGVneSogY3JlYXRlUGFzdGVib2FyZFN0cmF0ZWd5KCkgb3ZlcnJpZGU7CisgICAgV2ViQ29y
ZTo6UGx1Z2luU3RyYXRlZ3kqIGNyZWF0ZVBsdWdpblN0cmF0ZWd5KCkgb3ZlcnJpZGU7CisgICAg
V2ViQ29yZTo6QmxvYlJlZ2lzdHJ5KiBjcmVhdGVCbG9iUmVnaXN0cnkoKSBvdmVycmlkZTsKIH07
CiAKIH0gLy8gbmFtZXNwYWNlIFdlYktpdApJbmRleDogU291cmNlL1dlYktpdDIvV2ViUHJvY2Vz
cy9JbmplY3RlZEJ1bmRsZS9JbmplY3RlZEJ1bmRsZS5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1dlYktpdDIvV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9JbmplY3RlZEJ1bmRsZS5jcHAJKHJl
dmlzaW9uIDE5Mjg4MCkKKysrIFNvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5k
bGUvSW5qZWN0ZWRCdW5kbGUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC02Niw3ICs2Niw2IEBACiAj
aW5jbHVkZSA8V2ViQ29yZS9QYWdlR3JvdXAuaD4KICNpbmNsdWRlIDxXZWJDb3JlL1ByaW50Q29u
dGV4dC5oPgogI2luY2x1ZGUgPFdlYkNvcmUvUmVzb3VyY2VIYW5kbGUuaD4KLSNpbmNsdWRlIDxX
ZWJDb3JlL1Jlc291cmNlTG9hZFNjaGVkdWxlci5oPgogI2luY2x1ZGUgPFdlYkNvcmUvU2NyaXB0
Q29udHJvbGxlci5oPgogI2luY2x1ZGUgPFdlYkNvcmUvU2VjdXJpdHlPcmlnaW4uaD4KICNpbmNs
dWRlIDxXZWJDb3JlL1NlY3VyaXR5UG9saWN5Lmg+CkluZGV4OiBTb3VyY2UvV2ViS2l0Mi9XZWJQ
cm9jZXNzL05ldHdvcmsvV2ViUmVzb3VyY2VMb2FkU2NoZWR1bGVyLmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL05ldHdvcmsvV2ViUmVzb3VyY2VMb2FkU2NoZWR1
bGVyLmNwcAkocmV2aXNpb24gMTkyODgwKQorKysgU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9O
ZXR3b3JrL1dlYlJlc291cmNlTG9hZFNjaGVkdWxlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI2
LDYgKzI2LDcgQEAKICNpbmNsdWRlICJjb25maWcuaCIKICNpbmNsdWRlICJXZWJSZXNvdXJjZUxv
YWRTY2hlZHVsZXIuaCIKIAorI2luY2x1ZGUgIkhhbmdEZXRlY3Rpb25EaXNhYmxlci5oIgogI2lu
Y2x1ZGUgIkxvZ2dpbmcuaCIKICNpbmNsdWRlICJOZXR3b3JrQ29ubmVjdGlvblRvV2ViUHJvY2Vz
c01lc3NhZ2VzLmgiCiAjaW5jbHVkZSAiTmV0d29ya1Byb2Nlc3NDb25uZWN0aW9uLmgiCkBAIC0z
NSw2ICszNiw3IEBACiAjaW5jbHVkZSAiV2ViRXJyb3JzLmgiCiAjaW5jbHVkZSAiV2ViRnJhbWUu
aCIKICNpbmNsdWRlICJXZWJGcmFtZUxvYWRlckNsaWVudC5oIgorI2luY2x1ZGUgIldlYkZyYW1l
TmV0d29ya2luZ0NvbnRleHQuaCIKICNpbmNsdWRlICJXZWJQYWdlLmgiCiAjaW5jbHVkZSAiV2Vi
UHJvY2Vzcy5oIgogI2luY2x1ZGUgIldlYlJlc291cmNlTG9hZGVyLmgiCkBAIC00NSw2ICs0Nyw3
IEBACiAjaW5jbHVkZSA8V2ViQ29yZS9GcmFtZS5oPgogI2luY2x1ZGUgPFdlYkNvcmUvRnJhbWVM
b2FkZXIuaD4KICNpbmNsdWRlIDxXZWJDb3JlL05ldHNjYXBlUGx1Z0luU3RyZWFtTG9hZGVyLmg+
CisjaW5jbHVkZSA8V2ViQ29yZS9QbGF0Zm9ybVN0cmF0ZWdpZXMuaD4KICNpbmNsdWRlIDxXZWJD
b3JlL1JlZmVycmVyUG9saWN5Lmg+CiAjaW5jbHVkZSA8V2ViQ29yZS9SZXNvdXJjZUxvYWRlci5o
PgogI2luY2x1ZGUgPFdlYkNvcmUvU2Vzc2lvbklELmg+CkBAIC02NSw3ICs2OCw3IEBAIFdlYlJl
c291cmNlTG9hZFNjaGVkdWxlcjo6fldlYlJlc291cmNlTG8KIHsKIH0KIAotUmVmUHRyPFN1YnJl
c291cmNlTG9hZGVyPiBXZWJSZXNvdXJjZUxvYWRTY2hlZHVsZXI6OnNjaGVkdWxlU3VicmVzb3Vy
Y2VMb2FkKEZyYW1lKiBmcmFtZSwgQ2FjaGVkUmVzb3VyY2UqIHJlc291cmNlLCBjb25zdCBSZXNv
dXJjZVJlcXVlc3QmIHJlcXVlc3QsIGNvbnN0IFJlc291cmNlTG9hZGVyT3B0aW9ucyYgb3B0aW9u
cykKK1JlZlB0cjxTdWJyZXNvdXJjZUxvYWRlcj4gV2ViUmVzb3VyY2VMb2FkU2NoZWR1bGVyOjps
b2FkUmVzb3VyY2UoRnJhbWUqIGZyYW1lLCBDYWNoZWRSZXNvdXJjZSogcmVzb3VyY2UsIGNvbnN0
IFJlc291cmNlUmVxdWVzdCYgcmVxdWVzdCwgY29uc3QgUmVzb3VyY2VMb2FkZXJPcHRpb25zJiBv
cHRpb25zKQogewogICAgIFJlZlB0cjxTdWJyZXNvdXJjZUxvYWRlcj4gbG9hZGVyID0gU3VicmVz
b3VyY2VMb2FkZXI6OmNyZWF0ZShmcmFtZSwgcmVzb3VyY2UsIHJlcXVlc3QsIG9wdGlvbnMpOwog
ICAgIGlmIChsb2FkZXIpCkBAIC0yNjksMTEgKzI3Miw2IEBAIHZvaWQgV2ViUmVzb3VyY2VMb2Fk
U2NoZWR1bGVyOjpyZXN1bWVQZW4KICAgICAvLyBOZXR3b3JrIHByb2Nlc3MgZG9lcyBrZWVwIHJl
cXVlc3RzIGluIHBlbmRpbmcgc3RhdGUuCiB9CiAKLXZvaWQgV2ViUmVzb3VyY2VMb2FkU2NoZWR1
bGVyOjpzZXRTZXJpYWxMb2FkaW5nRW5hYmxlZChib29sKQotewotICAgIC8vIE5ldHdvcmsgcHJv
Y2VzcyBkb2VzIG5vdCByZW9yZGVyIGxvYWRzLgotfQotCiB2b2lkIFdlYlJlc291cmNlTG9hZFNj
aGVkdWxlcjo6bmV0d29ya1Byb2Nlc3NDcmFzaGVkKCkKIHsKICAgICBIYXNoTWFwPHVuc2lnbmVk
IGxvbmcsIFJlZlB0cjxXZWJSZXNvdXJjZUxvYWRlcj4+OjppdGVyYXRvciBlbmQgPSBtX3dlYlJl
c291cmNlTG9hZGVycy5lbmQoKTsKQEAgLTI4Myw0ICsyODEsNTcgQEAgdm9pZCBXZWJSZXNvdXJj
ZUxvYWRTY2hlZHVsZXI6Om5ldHdvcmtQcgogICAgIG1fd2ViUmVzb3VyY2VMb2FkZXJzLmNsZWFy
KCk7CiB9CiAKK3ZvaWQgV2ViUmVzb3VyY2VMb2FkU2NoZWR1bGVyOjpsb2FkUmVzb3VyY2VTeW5j
aHJvbm91c2x5KE5ldHdvcmtpbmdDb250ZXh0KiBjb250ZXh0LCB1bnNpZ25lZCBsb25nIHJlc291
cmNlTG9hZElkZW50aWZpZXIsIGNvbnN0IFJlc291cmNlUmVxdWVzdCYgcmVxdWVzdCwgU3RvcmVk
Q3JlZGVudGlhbHMgc3RvcmVkQ3JlZGVudGlhbHMsIENsaWVudENyZWRlbnRpYWxQb2xpY3kgY2xp
ZW50Q3JlZGVudGlhbFBvbGljeSwgUmVzb3VyY2VFcnJvciYgZXJyb3IsIFJlc291cmNlUmVzcG9u
c2UmIHJlc3BvbnNlLCBWZWN0b3I8Y2hhcj4mIGRhdGEpCit7CisgICAgV2ViRnJhbWVOZXR3b3Jr
aW5nQ29udGV4dCogd2ViQ29udGV4dCA9IHN0YXRpY19jYXN0PFdlYkZyYW1lTmV0d29ya2luZ0Nv
bnRleHQqPihjb250ZXh0KTsKKyAgICAvLyBGSVhNRTogU29tZSBlbnRpdGllcyBpbiBXZWJDb3Jl
IHVzZSBXZWJDb3JlJ3MgIkVtcHR5RnJhbWVMb2FkZXJDbGllbnQiIGluc3RlYWQgb2YgaGF2aW5n
IGEgcHJvcGVyIFdlYkZyYW1lTG9hZGVyQ2xpZW50LgorICAgIC8vIEVtcHR5RnJhbWVMb2FkZXJD
bGllbnQgc2hvdWxkbid0IGV4aXN0IGFuZCBldmVyeXRoaW5nIHNob3VsZCBiZSB1c2luZyBhIFdl
YkZyYW1lTG9hZGVyQ2xpZW50LAorICAgIC8vIGJ1dCBpbiB0aGUgbWVhbnRpbWUgd2UgaGF2ZSB0
byBtYWtlIHN1cmUgbm90IHRvIG1pcy1jYXN0LgorICAgIFdlYkZyYW1lTG9hZGVyQ2xpZW50KiB3
ZWJGcmFtZUxvYWRlckNsaWVudCA9IHdlYkNvbnRleHQtPndlYkZyYW1lTG9hZGVyQ2xpZW50KCk7
CisgICAgV2ViRnJhbWUqIHdlYkZyYW1lID0gd2ViRnJhbWVMb2FkZXJDbGllbnQgPyB3ZWJGcmFt
ZUxvYWRlckNsaWVudC0+d2ViRnJhbWUoKSA6IDA7CisgICAgV2ViUGFnZSogd2ViUGFnZSA9IHdl
YkZyYW1lID8gd2ViRnJhbWUtPnBhZ2UoKSA6IDA7CisKKyAgICBOZXR3b3JrUmVzb3VyY2VMb2Fk
UGFyYW1ldGVycyBsb2FkUGFyYW1ldGVyczsKKyAgICBsb2FkUGFyYW1ldGVycy5pZGVudGlmaWVy
ID0gcmVzb3VyY2VMb2FkSWRlbnRpZmllcjsKKyAgICBsb2FkUGFyYW1ldGVycy53ZWJQYWdlSUQg
PSB3ZWJQYWdlID8gd2ViUGFnZS0+cGFnZUlEKCkgOiAwOworICAgIGxvYWRQYXJhbWV0ZXJzLndl
YkZyYW1lSUQgPSB3ZWJGcmFtZSA/IHdlYkZyYW1lLT5mcmFtZUlEKCkgOiAwOworICAgIGxvYWRQ
YXJhbWV0ZXJzLnNlc3Npb25JRCA9IHdlYlBhZ2UgPyB3ZWJQYWdlLT5zZXNzaW9uSUQoKSA6IFNl
c3Npb25JRDo6ZGVmYXVsdFNlc3Npb25JRCgpOworICAgIGxvYWRQYXJhbWV0ZXJzLnJlcXVlc3Qg
PSByZXF1ZXN0OworICAgIGxvYWRQYXJhbWV0ZXJzLmNvbnRlbnRTbmlmZmluZ1BvbGljeSA9IFNu
aWZmQ29udGVudDsKKyAgICBsb2FkUGFyYW1ldGVycy5hbGxvd1N0b3JlZENyZWRlbnRpYWxzID0g
c3RvcmVkQ3JlZGVudGlhbHM7CisgICAgbG9hZFBhcmFtZXRlcnMuY2xpZW50Q3JlZGVudGlhbFBv
bGljeSA9IGNsaWVudENyZWRlbnRpYWxQb2xpY3k7CisgICAgbG9hZFBhcmFtZXRlcnMuc2hvdWxk
Q2xlYXJSZWZlcnJlck9uSFRUUFNUb0hUVFBSZWRpcmVjdCA9IGNvbnRleHQtPnNob3VsZENsZWFy
UmVmZXJyZXJPbkhUVFBTVG9IVFRQUmVkaXJlY3QoKTsKKworICAgIGRhdGEucmVzaXplKDApOwor
CisgICAgSGFuZ0RldGVjdGlvbkRpc2FibGVyIGhhbmdEZXRlY3Rpb25EaXNhYmxlcjsKKworICAg
IGlmICghV2ViUHJvY2Vzczo6c2luZ2xldG9uKCkubmV0d29ya0Nvbm5lY3Rpb24oKS0+Y29ubmVj
dGlvbigpLT5zZW5kU3luYyhNZXNzYWdlczo6TmV0d29ya0Nvbm5lY3Rpb25Ub1dlYlByb2Nlc3M6
OlBlcmZvcm1TeW5jaHJvbm91c0xvYWQobG9hZFBhcmFtZXRlcnMpLCBNZXNzYWdlczo6TmV0d29y
a0Nvbm5lY3Rpb25Ub1dlYlByb2Nlc3M6OlBlcmZvcm1TeW5jaHJvbm91c0xvYWQ6OlJlcGx5KGVy
cm9yLCByZXNwb25zZSwgZGF0YSksIDApKSB7CisgICAgICAgIHJlc3BvbnNlID0gUmVzb3VyY2VS
ZXNwb25zZSgpOworICAgICAgICBlcnJvciA9IGludGVybmFsRXJyb3IocmVxdWVzdC51cmwoKSk7
CisgICAgfQorfQorCit2b2lkIFdlYlJlc291cmNlTG9hZFNjaGVkdWxlcjo6Y3JlYXRlUGluZ0hh
bmRsZShOZXR3b3JraW5nQ29udGV4dCogbmV0d29ya2luZ0NvbnRleHQsIFJlc291cmNlUmVxdWVz
dCYgcmVxdWVzdCwgYm9vbCBzaG91bGRVc2VDcmVkZW50aWFsU3RvcmFnZSkKK3sKKyAgICAvLyBJ
dCdzIHBvc3NpYmxlIHRoYXQgY2FsbCB0byBjcmVhdGVQaW5nSGFuZGxlIG1pZ2h0IGJlIG1hZGUg
ZHVyaW5nIGluaXRpYWwgZW1wdHkgRG9jdW1lbnQgY3JlYXRpb24gYmVmb3JlIGEgTmV0d29ya2lu
Z0NvbnRleHQgZXhpc3RzLgorICAgIC8vIEl0IGlzIG5vdCBjbGVhciB0aGF0IHdlIHNob3VsZCBz
ZW5kIHBpbmcgbG9hZHMgZHVyaW5nIHRoYXQgcHJvY2VzcyBhbnl3YXlzLgorICAgIGlmICghbmV0
d29ya2luZ0NvbnRleHQpCisgICAgICAgIHJldHVybjsKKworICAgIFdlYkZyYW1lTmV0d29ya2lu
Z0NvbnRleHQqIHdlYkNvbnRleHQgPSBzdGF0aWNfY2FzdDxXZWJGcmFtZU5ldHdvcmtpbmdDb250
ZXh0Kj4obmV0d29ya2luZ0NvbnRleHQpOworICAgIFdlYkZyYW1lTG9hZGVyQ2xpZW50KiB3ZWJG
cmFtZUxvYWRlckNsaWVudCA9IHdlYkNvbnRleHQtPndlYkZyYW1lTG9hZGVyQ2xpZW50KCk7Cisg
ICAgV2ViRnJhbWUqIHdlYkZyYW1lID0gd2ViRnJhbWVMb2FkZXJDbGllbnQgPyB3ZWJGcmFtZUxv
YWRlckNsaWVudC0+d2ViRnJhbWUoKSA6IG51bGxwdHI7CisgICAgV2ViUGFnZSogd2ViUGFnZSA9
IHdlYkZyYW1lID8gd2ViRnJhbWUtPnBhZ2UoKSA6IG51bGxwdHI7CisgICAgCisgICAgTmV0d29y
a1Jlc291cmNlTG9hZFBhcmFtZXRlcnMgbG9hZFBhcmFtZXRlcnM7CisgICAgbG9hZFBhcmFtZXRl
cnMucmVxdWVzdCA9IHJlcXVlc3Q7CisgICAgbG9hZFBhcmFtZXRlcnMuc2Vzc2lvbklEID0gd2Vi
UGFnZSA/IHdlYlBhZ2UtPnNlc3Npb25JRCgpIDogU2Vzc2lvbklEOjpkZWZhdWx0U2Vzc2lvbklE
KCk7CisgICAgbG9hZFBhcmFtZXRlcnMuYWxsb3dTdG9yZWRDcmVkZW50aWFscyA9IHNob3VsZFVz
ZUNyZWRlbnRpYWxTdG9yYWdlID8gQWxsb3dTdG9yZWRDcmVkZW50aWFscyA6IERvTm90QWxsb3dT
dG9yZWRDcmVkZW50aWFsczsKKyAgICBsb2FkUGFyYW1ldGVycy5zaG91bGRDbGVhclJlZmVycmVy
T25IVFRQU1RvSFRUUFJlZGlyZWN0ID0gbmV0d29ya2luZ0NvbnRleHQtPnNob3VsZENsZWFyUmVm
ZXJyZXJPbkhUVFBTVG9IVFRQUmVkaXJlY3QoKTsKKworICAgIFdlYlByb2Nlc3M6OnNpbmdsZXRv
bigpLm5ldHdvcmtDb25uZWN0aW9uKCktPmNvbm5lY3Rpb24oKS0+c2VuZChNZXNzYWdlczo6TmV0
d29ya0Nvbm5lY3Rpb25Ub1dlYlByb2Nlc3M6OkxvYWRQaW5nKGxvYWRQYXJhbWV0ZXJzKSwgMCk7
Cit9CisKKwogfSAvLyBuYW1lc3BhY2UgV2ViS2l0CkluZGV4OiBTb3VyY2UvV2ViS2l0Mi9XZWJQ
cm9jZXNzL05ldHdvcmsvV2ViUmVzb3VyY2VMb2FkU2NoZWR1bGVyLmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9OZXR3b3JrL1dlYlJlc291cmNlTG9hZFNjaGVkdWxl
ci5oCShyZXZpc2lvbiAxOTI4ODApCisrKyBTb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL05ldHdv
cmsvV2ViUmVzb3VyY2VMb2FkU2NoZWR1bGVyLmgJKHdvcmtpbmcgY29weSkKQEAgLTI3LDI1ICsy
NywyNiBAQAogI2RlZmluZSBXZWJSZXNvdXJjZUxvYWRTY2hlZHVsZXJfaAogCiAjaW5jbHVkZSAi
V2ViUmVzb3VyY2VMb2FkZXIuaCIKLSNpbmNsdWRlIDxXZWJDb3JlL1Jlc291cmNlTG9hZFByaW9y
aXR5Lmg+Ci0jaW5jbHVkZSA8V2ViQ29yZS9SZXNvdXJjZUxvYWRTY2hlZHVsZXIuaD4KKyNpbmNs
dWRlIDxXZWJDb3JlL0xvYWRlclN0cmF0ZWd5Lmg+CiAjaW5jbHVkZSA8V2ViQ29yZS9SZXNvdXJj
ZUxvYWRlci5oPgorI2luY2x1ZGUgPHd0Zi9IYXNoU2V0Lmg+CiAjaW5jbHVkZSA8d3RmL1J1bkxv
b3AuaD4KIAogbmFtZXNwYWNlIFdlYktpdCB7CiAKIGNsYXNzIE5ldHdvcmtQcm9jZXNzQ29ubmVj
dGlvbjsKK2NsYXNzIFdlYlJlc291cmNlTG9hZFNjaGVkdWxlcjsKIHR5cGVkZWYgdWludDY0X3Qg
UmVzb3VyY2VMb2FkSWRlbnRpZmllcjsKIAotY2xhc3MgV2ViUmVzb3VyY2VMb2FkU2NoZWR1bGVy
IDogcHVibGljIFdlYkNvcmU6OlJlc291cmNlTG9hZFNjaGVkdWxlciB7CitjbGFzcyBXZWJSZXNv
dXJjZUxvYWRTY2hlZHVsZXIgOiBwdWJsaWMgV2ViQ29yZTo6TG9hZGVyU3RyYXRlZ3kgewogICAg
IFdURl9NQUtFX05PTkNPUFlBQkxFKFdlYlJlc291cmNlTG9hZFNjaGVkdWxlcik7IFdURl9NQUtF
X0ZBU1RfQUxMT0NBVEVEOwogcHVibGljOgogICAgIFdlYlJlc291cmNlTG9hZFNjaGVkdWxlcigp
OwogICAgIHZpcnR1YWwgfldlYlJlc291cmNlTG9hZFNjaGVkdWxlcigpOwogICAgIAotICAgIHZp
cnR1YWwgUmVmUHRyPFdlYkNvcmU6OlN1YnJlc291cmNlTG9hZGVyPiBzY2hlZHVsZVN1YnJlc291
cmNlTG9hZChXZWJDb3JlOjpGcmFtZSosIFdlYkNvcmU6OkNhY2hlZFJlc291cmNlKiwgY29uc3Qg
V2ViQ29yZTo6UmVzb3VyY2VSZXF1ZXN0JiwgY29uc3QgV2ViQ29yZTo6UmVzb3VyY2VMb2FkZXJP
cHRpb25zJikgb3ZlcnJpZGU7Ci0gICAgdmlydHVhbCBSZWZQdHI8V2ViQ29yZTo6TmV0c2NhcGVQ
bHVnSW5TdHJlYW1Mb2FkZXI+IHNjaGVkdWxlUGx1Z2luU3RyZWFtTG9hZChXZWJDb3JlOjpGcmFt
ZSosIFdlYkNvcmU6Ok5ldHNjYXBlUGx1Z0luU3RyZWFtTG9hZGVyQ2xpZW50KiwgY29uc3QgV2Vi
Q29yZTo6UmVzb3VyY2VSZXF1ZXN0Jikgb3ZlcnJpZGU7Ci0gICAgCisgICAgdmlydHVhbCBSZWZQ
dHI8V2ViQ29yZTo6U3VicmVzb3VyY2VMb2FkZXI+IGxvYWRSZXNvdXJjZShXZWJDb3JlOjpGcmFt
ZSosIFdlYkNvcmU6OkNhY2hlZFJlc291cmNlKiwgY29uc3QgV2ViQ29yZTo6UmVzb3VyY2VSZXF1
ZXN0JiwgY29uc3QgV2ViQ29yZTo6UmVzb3VyY2VMb2FkZXJPcHRpb25zJikgb3ZlcnJpZGU7Cisg
ICAgdmlydHVhbCB2b2lkIGxvYWRSZXNvdXJjZVN5bmNocm9ub3VzbHkoV2ViQ29yZTo6TmV0d29y
a2luZ0NvbnRleHQqLCB1bnNpZ25lZCBsb25nIHJlc291cmNlTG9hZElkZW50aWZpZXIsIGNvbnN0
IFdlYkNvcmU6OlJlc291cmNlUmVxdWVzdCYsIFdlYkNvcmU6OlN0b3JlZENyZWRlbnRpYWxzLCBX
ZWJDb3JlOjpDbGllbnRDcmVkZW50aWFsUG9saWN5LCBXZWJDb3JlOjpSZXNvdXJjZUVycm9yJiwg
V2ViQ29yZTo6UmVzb3VyY2VSZXNwb25zZSYsIFZlY3RvcjxjaGFyPiYgZGF0YSkgb3ZlcnJpZGU7
CisKICAgICB2aXJ0dWFsIHZvaWQgcmVtb3ZlKFdlYkNvcmU6OlJlc291cmNlTG9hZGVyKikgb3Zl
cnJpZGU7CiAgICAgdmlydHVhbCB2b2lkIHNldERlZmVyc0xvYWRpbmcoV2ViQ29yZTo6UmVzb3Vy
Y2VMb2FkZXIqLCBib29sKSBvdmVycmlkZTsKICAgICB2aXJ0dWFsIHZvaWQgY3Jvc3NPcmlnaW5S
ZWRpcmVjdFJlY2VpdmVkKFdlYkNvcmU6OlJlc291cmNlTG9hZGVyKiwgY29uc3QgV2ViQ29yZTo6
VVJMJiByZWRpcmVjdFVSTCkgb3ZlcnJpZGU7CkBAIC01NSw5ICs1NiwxMCBAQCBwdWJsaWM6CiAg
ICAgdmlydHVhbCB2b2lkIHN1c3BlbmRQZW5kaW5nUmVxdWVzdHMoKSBvdmVycmlkZTsKICAgICB2
aXJ0dWFsIHZvaWQgcmVzdW1lUGVuZGluZ1JlcXVlc3RzKCkgb3ZlcnJpZGU7CiAKLSAgICB2aXJ0
dWFsIHZvaWQgc2V0U2VyaWFsTG9hZGluZ0VuYWJsZWQoYm9vbCkgb3ZlcnJpZGU7CisgICAgdmly
dHVhbCB2b2lkIGNyZWF0ZVBpbmdIYW5kbGUoV2ViQ29yZTo6TmV0d29ya2luZ0NvbnRleHQqLCBX
ZWJDb3JlOjpSZXNvdXJjZVJlcXVlc3QmLCBib29sIHNob3VsZFVzZUNyZWRlbnRpYWxTdG9yYWdl
KSBvdmVycmlkZTsKIAogICAgIFdlYlJlc291cmNlTG9hZGVyKiB3ZWJSZXNvdXJjZUxvYWRlckZv
cklkZW50aWZpZXIoUmVzb3VyY2VMb2FkSWRlbnRpZmllciBpZGVudGlmaWVyKSBjb25zdCB7IHJl
dHVybiBtX3dlYlJlc291cmNlTG9hZGVycy5nZXQoaWRlbnRpZmllcik7IH0KKyAgICBSZWZQdHI8
V2ViQ29yZTo6TmV0c2NhcGVQbHVnSW5TdHJlYW1Mb2FkZXI+IHNjaGVkdWxlUGx1Z2luU3RyZWFt
TG9hZChXZWJDb3JlOjpGcmFtZSosIFdlYkNvcmU6Ok5ldHNjYXBlUGx1Z0luU3RyZWFtTG9hZGVy
Q2xpZW50KiwgY29uc3QgV2ViQ29yZTo6UmVzb3VyY2VSZXF1ZXN0Jik7CiAKICAgICB2b2lkIG5l
dHdvcmtQcm9jZXNzQ3Jhc2hlZCgpOwogCkluZGV4OiBTb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNz
L1BsdWdpbnMvUGx1Z2luVmlldy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdDIvV2Vi
UHJvY2Vzcy9QbHVnaW5zL1BsdWdpblZpZXcuY3BwCShyZXZpc2lvbiAxOTI4ODApCisrKyBTb3Vy
Y2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1BsdWdpbnMvUGx1Z2luVmlldy5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTM0LDYgKzM0LDcgQEAKICNpbmNsdWRlICJXZWJQYWdlLmgiCiAjaW5jbHVkZSAiV2Vi
UGFnZVByb3h5TWVzc2FnZXMuaCIKICNpbmNsdWRlICJXZWJQcm9jZXNzLmgiCisjaW5jbHVkZSAi
V2ViUmVzb3VyY2VMb2FkU2NoZWR1bGVyLmgiCiAjaW5jbHVkZSA8V2ViQ29yZS9CaXRtYXBJbWFn
ZS5oPgogI2luY2x1ZGUgPFdlYkNvcmUvQ2hyb21lLmg+CiAjaW5jbHVkZSA8V2ViQ29yZS9Db29r
aWVKYXIuaD4KQEAgLTYyLDcgKzYzLDYgQEAKICNpbmNsdWRlIDxXZWJDb3JlL1Byb3RlY3Rpb25T
cGFjZS5oPgogI2luY2x1ZGUgPFdlYkNvcmUvUHJveHlTZXJ2ZXIuaD4KICNpbmNsdWRlIDxXZWJD
b3JlL1JlbmRlckVtYmVkZGVkT2JqZWN0Lmg+Ci0jaW5jbHVkZSA8V2ViQ29yZS9SZXNvdXJjZUxv
YWRTY2hlZHVsZXIuaD4KICNpbmNsdWRlIDxXZWJDb3JlL1NjcmlwdENvbnRyb2xsZXIuaD4KICNp
bmNsdWRlIDxXZWJDb3JlL1Njcm9sbFZpZXcuaD4KICNpbmNsdWRlIDxXZWJDb3JlL1NlY3VyaXR5
T3JpZ2luLmg+CkBAIC0xNjAsNyArMTYwLDcgQEAgdm9pZCBQbHVnaW5WaWV3OjpTdHJlYW06OnN0
YXJ0KCkKICAgICBGcmFtZSogZnJhbWUgPSBtX3BsdWdpblZpZXctPm1fcGx1Z2luRWxlbWVudC0+
ZG9jdW1lbnQoKS5mcmFtZSgpOwogICAgIEFTU0VSVChmcmFtZSk7CiAKLSAgICBtX2xvYWRlciA9
IHJlc291cmNlTG9hZFNjaGVkdWxlcigpLT5zY2hlZHVsZVBsdWdpblN0cmVhbUxvYWQoZnJhbWUs
IHRoaXMsIG1fcmVxdWVzdCk7CisgICAgbV9sb2FkZXIgPSBXZWJQcm9jZXNzOjpzaW5nbGV0b24o
KS53ZWJSZXNvdXJjZUxvYWRTY2hlZHVsZXIoKS5zY2hlZHVsZVBsdWdpblN0cmVhbUxvYWQoZnJh
bWUsIHRoaXMsIG1fcmVxdWVzdCk7CiB9CiAKIHZvaWQgUGx1Z2luVmlldzo6U3RyZWFtOjpjYW5j
ZWwoKQpJbmRleDogU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJDb3JlU3VwcG9ydC9XZWJQ
bGF0Zm9ybVN0cmF0ZWdpZXMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQyL1dlYlBy
b2Nlc3MvV2ViQ29yZVN1cHBvcnQvV2ViUGxhdGZvcm1TdHJhdGVnaWVzLmNwcAkocmV2aXNpb24g
MTkyODgwKQorKysgU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJDb3JlU3VwcG9ydC9XZWJQ
bGF0Zm9ybVN0cmF0ZWdpZXMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00MCw3ICs0MCw2IEBACiAj
aW5jbHVkZSAiV2ViRXJyb3JzLmgiCiAjaW5jbHVkZSAiV2ViRnJhbWUuaCIKICNpbmNsdWRlICJX
ZWJGcmFtZUxvYWRlckNsaWVudC5oIgotI2luY2x1ZGUgIldlYkZyYW1lTmV0d29ya2luZ0NvbnRl
eHQuaCIKICNpbmNsdWRlICJXZWJJREJGYWN0b3J5QmFja2VuZC5oIgogI2luY2x1ZGUgIldlYlBh
Z2UuaCIKICNpbmNsdWRlICJXZWJQYXN0ZWJvYXJkT3ZlcnJpZGVzLmgiCkBAIC05Miw3ICs5MSw3
IEBAIENvb2tpZXNTdHJhdGVneSogV2ViUGxhdGZvcm1TdHJhdGVnaWVzOjoKIAogTG9hZGVyU3Ry
YXRlZ3kqIFdlYlBsYXRmb3JtU3RyYXRlZ2llczo6Y3JlYXRlTG9hZGVyU3RyYXRlZ3koKQogewot
ICAgIHJldHVybiB0aGlzOworICAgIHJldHVybiAmV2ViUHJvY2Vzczo6c2luZ2xldG9uKCkud2Vi
UmVzb3VyY2VMb2FkU2NoZWR1bGVyKCk7CiB9CiAKIFBhc3RlYm9hcmRTdHJhdGVneSogV2ViUGxh
dGZvcm1TdHJhdGVnaWVzOjpjcmVhdGVQYXN0ZWJvYXJkU3RyYXRlZ3koKQpAQCAtMTA1LDYgKzEw
NCwxMSBAQCBQbHVnaW5TdHJhdGVneSogV2ViUGxhdGZvcm1TdHJhdGVnaWVzOjpjCiAgICAgcmV0
dXJuIHRoaXM7CiB9CiAKK0Jsb2JSZWdpc3RyeSogV2ViUGxhdGZvcm1TdHJhdGVnaWVzOjpjcmVh
dGVCbG9iUmVnaXN0cnkoKQoreworICAgIHJldHVybiBuZXcgQmxvYlJlZ2lzdHJ5UHJveHk7Cit9
CisKIC8vIENvb2tpZXNTdHJhdGVneQogCiBTdHJpbmcgV2ViUGxhdGZvcm1TdHJhdGVnaWVzOjpj
b29raWVzRm9yRE9NKGNvbnN0IE5ldHdvcmtTdG9yYWdlU2Vzc2lvbiYgc2Vzc2lvbiwgY29uc3Qg
VVJMJiBmaXJzdFBhcnR5LCBjb25zdCBVUkwmIHVybCkKQEAgLTE0OCw3MCArMTUyLDYgQEAgdm9p
ZCBXZWJQbGF0Zm9ybVN0cmF0ZWdpZXM6OmRlbGV0ZUNvb2tpZQogICAgIFdlYlByb2Nlc3M6OnNp
bmdsZXRvbigpLm5ldHdvcmtDb25uZWN0aW9uKCktPmNvbm5lY3Rpb24oKS0+c2VuZChNZXNzYWdl
czo6TmV0d29ya0Nvbm5lY3Rpb25Ub1dlYlByb2Nlc3M6OkRlbGV0ZUNvb2tpZShTZXNzaW9uVHJh
Y2tlcjo6c2Vzc2lvbklEKHNlc3Npb24pLCB1cmwsIGNvb2tpZU5hbWUpLCAwKTsKIH0KIAotLy8g
TG9hZGVyU3RyYXRlZ3kKLQotUmVzb3VyY2VMb2FkU2NoZWR1bGVyKiBXZWJQbGF0Zm9ybVN0cmF0
ZWdpZXM6OnJlc291cmNlTG9hZFNjaGVkdWxlcigpCi17Ci0gICAgcmV0dXJuICZXZWJQcm9jZXNz
OjpzaW5nbGV0b24oKS53ZWJSZXNvdXJjZUxvYWRTY2hlZHVsZXIoKTsKLX0KLQotdm9pZCBXZWJQ
bGF0Zm9ybVN0cmF0ZWdpZXM6OmxvYWRSZXNvdXJjZVN5bmNocm9ub3VzbHkoTmV0d29ya2luZ0Nv
bnRleHQqIGNvbnRleHQsIHVuc2lnbmVkIGxvbmcgcmVzb3VyY2VMb2FkSWRlbnRpZmllciwgY29u
c3QgUmVzb3VyY2VSZXF1ZXN0JiByZXF1ZXN0LCBTdG9yZWRDcmVkZW50aWFscyBzdG9yZWRDcmVk
ZW50aWFscywgQ2xpZW50Q3JlZGVudGlhbFBvbGljeSBjbGllbnRDcmVkZW50aWFsUG9saWN5LCBS
ZXNvdXJjZUVycm9yJiBlcnJvciwgUmVzb3VyY2VSZXNwb25zZSYgcmVzcG9uc2UsIFZlY3Rvcjxj
aGFyPiYgZGF0YSkKLXsKLSAgICBXZWJGcmFtZU5ldHdvcmtpbmdDb250ZXh0KiB3ZWJDb250ZXh0
ID0gc3RhdGljX2Nhc3Q8V2ViRnJhbWVOZXR3b3JraW5nQ29udGV4dCo+KGNvbnRleHQpOwotICAg
IC8vIEZJWE1FOiBTb21lIGVudGl0aWVzIGluIFdlYkNvcmUgdXNlIFdlYkNvcmUncyAiRW1wdHlG
cmFtZUxvYWRlckNsaWVudCIgaW5zdGVhZCBvZiBoYXZpbmcgYSBwcm9wZXIgV2ViRnJhbWVMb2Fk
ZXJDbGllbnQuCi0gICAgLy8gRW1wdHlGcmFtZUxvYWRlckNsaWVudCBzaG91bGRuJ3QgZXhpc3Qg
YW5kIGV2ZXJ5dGhpbmcgc2hvdWxkIGJlIHVzaW5nIGEgV2ViRnJhbWVMb2FkZXJDbGllbnQsCi0g
ICAgLy8gYnV0IGluIHRoZSBtZWFudGltZSB3ZSBoYXZlIHRvIG1ha2Ugc3VyZSBub3QgdG8gbWlz
LWNhc3QuCi0gICAgV2ViRnJhbWVMb2FkZXJDbGllbnQqIHdlYkZyYW1lTG9hZGVyQ2xpZW50ID0g
d2ViQ29udGV4dC0+d2ViRnJhbWVMb2FkZXJDbGllbnQoKTsKLSAgICBXZWJGcmFtZSogd2ViRnJh
bWUgPSB3ZWJGcmFtZUxvYWRlckNsaWVudCA/IHdlYkZyYW1lTG9hZGVyQ2xpZW50LT53ZWJGcmFt
ZSgpIDogMDsKLSAgICBXZWJQYWdlKiB3ZWJQYWdlID0gd2ViRnJhbWUgPyB3ZWJGcmFtZS0+cGFn
ZSgpIDogMDsKLQotICAgIE5ldHdvcmtSZXNvdXJjZUxvYWRQYXJhbWV0ZXJzIGxvYWRQYXJhbWV0
ZXJzOwotICAgIGxvYWRQYXJhbWV0ZXJzLmlkZW50aWZpZXIgPSByZXNvdXJjZUxvYWRJZGVudGlm
aWVyOwotICAgIGxvYWRQYXJhbWV0ZXJzLndlYlBhZ2VJRCA9IHdlYlBhZ2UgPyB3ZWJQYWdlLT5w
YWdlSUQoKSA6IDA7Ci0gICAgbG9hZFBhcmFtZXRlcnMud2ViRnJhbWVJRCA9IHdlYkZyYW1lID8g
d2ViRnJhbWUtPmZyYW1lSUQoKSA6IDA7Ci0gICAgbG9hZFBhcmFtZXRlcnMuc2Vzc2lvbklEID0g
d2ViUGFnZSA/IHdlYlBhZ2UtPnNlc3Npb25JRCgpIDogU2Vzc2lvbklEOjpkZWZhdWx0U2Vzc2lv
bklEKCk7Ci0gICAgbG9hZFBhcmFtZXRlcnMucmVxdWVzdCA9IHJlcXVlc3Q7Ci0gICAgbG9hZFBh
cmFtZXRlcnMuY29udGVudFNuaWZmaW5nUG9saWN5ID0gU25pZmZDb250ZW50OwotICAgIGxvYWRQ
YXJhbWV0ZXJzLmFsbG93U3RvcmVkQ3JlZGVudGlhbHMgPSBzdG9yZWRDcmVkZW50aWFsczsKLSAg
ICBsb2FkUGFyYW1ldGVycy5jbGllbnRDcmVkZW50aWFsUG9saWN5ID0gY2xpZW50Q3JlZGVudGlh
bFBvbGljeTsKLSAgICBsb2FkUGFyYW1ldGVycy5zaG91bGRDbGVhclJlZmVycmVyT25IVFRQU1Rv
SFRUUFJlZGlyZWN0ID0gY29udGV4dC0+c2hvdWxkQ2xlYXJSZWZlcnJlck9uSFRUUFNUb0hUVFBS
ZWRpcmVjdCgpOwotCi0gICAgZGF0YS5yZXNpemUoMCk7Ci0KLSAgICBIYW5nRGV0ZWN0aW9uRGlz
YWJsZXIgaGFuZ0RldGVjdGlvbkRpc2FibGVyOwotCi0gICAgaWYgKCFXZWJQcm9jZXNzOjpzaW5n
bGV0b24oKS5uZXR3b3JrQ29ubmVjdGlvbigpLT5jb25uZWN0aW9uKCktPnNlbmRTeW5jKE1lc3Nh
Z2VzOjpOZXR3b3JrQ29ubmVjdGlvblRvV2ViUHJvY2Vzczo6UGVyZm9ybVN5bmNocm9ub3VzTG9h
ZChsb2FkUGFyYW1ldGVycyksIE1lc3NhZ2VzOjpOZXR3b3JrQ29ubmVjdGlvblRvV2ViUHJvY2Vz
czo6UGVyZm9ybVN5bmNocm9ub3VzTG9hZDo6UmVwbHkoZXJyb3IsIHJlc3BvbnNlLCBkYXRhKSwg
MCkpIHsKLSAgICAgICAgcmVzcG9uc2UgPSBSZXNvdXJjZVJlc3BvbnNlKCk7Ci0gICAgICAgIGVy
cm9yID0gaW50ZXJuYWxFcnJvcihyZXF1ZXN0LnVybCgpKTsKLSAgICB9Ci19Ci0KLXZvaWQgV2Vi
UGxhdGZvcm1TdHJhdGVnaWVzOjpjcmVhdGVQaW5nSGFuZGxlKE5ldHdvcmtpbmdDb250ZXh0KiBu
ZXR3b3JraW5nQ29udGV4dCwgUmVzb3VyY2VSZXF1ZXN0JiByZXF1ZXN0LCBib29sIHNob3VsZFVz
ZUNyZWRlbnRpYWxTdG9yYWdlKQotewotICAgIC8vIEl0J3MgcG9zc2libGUgdGhhdCBjYWxsIHRv
IGNyZWF0ZVBpbmdIYW5kbGUgbWlnaHQgYmUgbWFkZSBkdXJpbmcgaW5pdGlhbCBlbXB0eSBEb2N1
bWVudCBjcmVhdGlvbiBiZWZvcmUgYSBOZXR3b3JraW5nQ29udGV4dCBleGlzdHMuCi0gICAgLy8g
SXQgaXMgbm90IGNsZWFyIHRoYXQgd2Ugc2hvdWxkIHNlbmQgcGluZyBsb2FkcyBkdXJpbmcgdGhh
dCBwcm9jZXNzIGFueXdheXMuCi0gICAgaWYgKCFuZXR3b3JraW5nQ29udGV4dCkKLSAgICAgICAg
cmV0dXJuOwotCi0gICAgV2ViRnJhbWVOZXR3b3JraW5nQ29udGV4dCogd2ViQ29udGV4dCA9IHN0
YXRpY19jYXN0PFdlYkZyYW1lTmV0d29ya2luZ0NvbnRleHQqPihuZXR3b3JraW5nQ29udGV4dCk7
Ci0gICAgV2ViRnJhbWVMb2FkZXJDbGllbnQqIHdlYkZyYW1lTG9hZGVyQ2xpZW50ID0gd2ViQ29u
dGV4dC0+d2ViRnJhbWVMb2FkZXJDbGllbnQoKTsKLSAgICBXZWJGcmFtZSogd2ViRnJhbWUgPSB3
ZWJGcmFtZUxvYWRlckNsaWVudCA/IHdlYkZyYW1lTG9hZGVyQ2xpZW50LT53ZWJGcmFtZSgpIDog
bnVsbHB0cjsKLSAgICBXZWJQYWdlKiB3ZWJQYWdlID0gd2ViRnJhbWUgPyB3ZWJGcmFtZS0+cGFn
ZSgpIDogbnVsbHB0cjsKLSAgICAKLSAgICBOZXR3b3JrUmVzb3VyY2VMb2FkUGFyYW1ldGVycyBs
b2FkUGFyYW1ldGVyczsKLSAgICBsb2FkUGFyYW1ldGVycy5yZXF1ZXN0ID0gcmVxdWVzdDsKLSAg
ICBsb2FkUGFyYW1ldGVycy5zZXNzaW9uSUQgPSB3ZWJQYWdlID8gd2ViUGFnZS0+c2Vzc2lvbklE
KCkgOiBTZXNzaW9uSUQ6OmRlZmF1bHRTZXNzaW9uSUQoKTsKLSAgICBsb2FkUGFyYW1ldGVycy5h
bGxvd1N0b3JlZENyZWRlbnRpYWxzID0gc2hvdWxkVXNlQ3JlZGVudGlhbFN0b3JhZ2UgPyBBbGxv
d1N0b3JlZENyZWRlbnRpYWxzIDogRG9Ob3RBbGxvd1N0b3JlZENyZWRlbnRpYWxzOwotICAgIGxv
YWRQYXJhbWV0ZXJzLnNob3VsZENsZWFyUmVmZXJyZXJPbkhUVFBTVG9IVFRQUmVkaXJlY3QgPSBu
ZXR3b3JraW5nQ29udGV4dC0+c2hvdWxkQ2xlYXJSZWZlcnJlck9uSFRUUFNUb0hUVFBSZWRpcmVj
dCgpOwotCi0gICAgV2ViUHJvY2Vzczo6c2luZ2xldG9uKCkubmV0d29ya0Nvbm5lY3Rpb24oKS0+
Y29ubmVjdGlvbigpLT5zZW5kKE1lc3NhZ2VzOjpOZXR3b3JrQ29ubmVjdGlvblRvV2ViUHJvY2Vz
czo6TG9hZFBpbmcobG9hZFBhcmFtZXRlcnMpLCAwKTsKLX0KLQotQmxvYlJlZ2lzdHJ5KiBXZWJQ
bGF0Zm9ybVN0cmF0ZWdpZXM6OmNyZWF0ZUJsb2JSZWdpc3RyeSgpCi17Ci0gICAgcmV0dXJuIG5l
dyBCbG9iUmVnaXN0cnlQcm94eTsKLX0KLQogLy8gUGx1Z2luU3RyYXRlZ3kKIAogdm9pZCBXZWJQ
bGF0Zm9ybVN0cmF0ZWdpZXM6OnJlZnJlc2hQbHVnaW5zKCkKSW5kZXg6IFNvdXJjZS9XZWJLaXQy
L1dlYlByb2Nlc3MvV2ViQ29yZVN1cHBvcnQvV2ViUGxhdGZvcm1TdHJhdGVnaWVzLmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJDb3JlU3VwcG9ydC9XZWJQbGF0
Zm9ybVN0cmF0ZWdpZXMuaAkocmV2aXNpb24gMTkyODgwKQorKysgU291cmNlL1dlYktpdDIvV2Vi
UHJvY2Vzcy9XZWJDb3JlU3VwcG9ydC9XZWJQbGF0Zm9ybVN0cmF0ZWdpZXMuaAkod29ya2luZyBj
b3B5KQpAQCAtMzYsNyArMzYsNyBAQAogCiBuYW1lc3BhY2UgV2ViS2l0IHsKIAotY2xhc3MgV2Vi
UGxhdGZvcm1TdHJhdGVnaWVzIDogcHVibGljIFdlYkNvcmU6OlBsYXRmb3JtU3RyYXRlZ2llcywg
cHJpdmF0ZSBXZWJDb3JlOjpDb29raWVzU3RyYXRlZ3ksIHByaXZhdGUgV2ViQ29yZTo6TG9hZGVy
U3RyYXRlZ3ksIHByaXZhdGUgV2ViQ29yZTo6UGFzdGVib2FyZFN0cmF0ZWd5LCBwcml2YXRlIFdl
YkNvcmU6OlBsdWdpblN0cmF0ZWd5IHsKK2NsYXNzIFdlYlBsYXRmb3JtU3RyYXRlZ2llcyA6IHB1
YmxpYyBXZWJDb3JlOjpQbGF0Zm9ybVN0cmF0ZWdpZXMsIHByaXZhdGUgV2ViQ29yZTo6Q29va2ll
c1N0cmF0ZWd5LCBwcml2YXRlIFdlYkNvcmU6OlBhc3RlYm9hcmRTdHJhdGVneSwgcHJpdmF0ZSBX
ZWJDb3JlOjpQbHVnaW5TdHJhdGVneSB7CiAgICAgZnJpZW5kIGNsYXNzIE5ldmVyRGVzdHJveWVk
PFdlYlBsYXRmb3JtU3RyYXRlZ2llcz47CiBwdWJsaWM6CiAgICAgc3RhdGljIHZvaWQgaW5pdGlh
bGl6ZSgpOwpAQCAtNDksNiArNDksNyBAQCBwcml2YXRlOgogICAgIHZpcnR1YWwgV2ViQ29yZTo6
TG9hZGVyU3RyYXRlZ3kqIGNyZWF0ZUxvYWRlclN0cmF0ZWd5KCkgb3ZlcnJpZGU7CiAgICAgdmly
dHVhbCBXZWJDb3JlOjpQYXN0ZWJvYXJkU3RyYXRlZ3kqIGNyZWF0ZVBhc3RlYm9hcmRTdHJhdGVn
eSgpIG92ZXJyaWRlOwogICAgIHZpcnR1YWwgV2ViQ29yZTo6UGx1Z2luU3RyYXRlZ3kqIGNyZWF0
ZVBsdWdpblN0cmF0ZWd5KCkgb3ZlcnJpZGU7CisgICAgdmlydHVhbCBXZWJDb3JlOjpCbG9iUmVn
aXN0cnkqIGNyZWF0ZUJsb2JSZWdpc3RyeSgpIG92ZXJyaWRlOwogCiAgICAgLy8gV2ViQ29yZTo6
Q29va2llc1N0cmF0ZWd5CiAgICAgdmlydHVhbCBTdHJpbmcgY29va2llc0ZvckRPTShjb25zdCBX
ZWJDb3JlOjpOZXR3b3JrU3RvcmFnZVNlc3Npb24mLCBjb25zdCBXZWJDb3JlOjpVUkwmIGZpcnN0
UGFydHksIGNvbnN0IFdlYkNvcmU6OlVSTCYpIG92ZXJyaWRlOwpAQCAtNTgsMTIgKzU5LDYgQEAg
cHJpdmF0ZToKICAgICB2aXJ0dWFsIGJvb2wgZ2V0UmF3Q29va2llcyhjb25zdCBXZWJDb3JlOjpO
ZXR3b3JrU3RvcmFnZVNlc3Npb24mLCBjb25zdCBXZWJDb3JlOjpVUkwmIGZpcnN0UGFydHksIGNv
bnN0IFdlYkNvcmU6OlVSTCYsIFZlY3RvcjxXZWJDb3JlOjpDb29raWU+Jikgb3ZlcnJpZGU7CiAg
ICAgdmlydHVhbCB2b2lkIGRlbGV0ZUNvb2tpZShjb25zdCBXZWJDb3JlOjpOZXR3b3JrU3RvcmFn
ZVNlc3Npb24mLCBjb25zdCBXZWJDb3JlOjpVUkwmLCBjb25zdCBTdHJpbmcmKSBvdmVycmlkZTsK
IAotICAgIC8vIFdlYkNvcmU6OkxvYWRlclN0cmF0ZWd5Ci0gICAgdmlydHVhbCBXZWJDb3JlOjpS
ZXNvdXJjZUxvYWRTY2hlZHVsZXIqIHJlc291cmNlTG9hZFNjaGVkdWxlcigpIG92ZXJyaWRlOwot
ICAgIHZpcnR1YWwgdm9pZCBsb2FkUmVzb3VyY2VTeW5jaHJvbm91c2x5KFdlYkNvcmU6Ok5ldHdv
cmtpbmdDb250ZXh0KiwgdW5zaWduZWQgbG9uZyByZXNvdXJjZUxvYWRJZGVudGlmaWVyLCBjb25z
dCBXZWJDb3JlOjpSZXNvdXJjZVJlcXVlc3QmLCBXZWJDb3JlOjpTdG9yZWRDcmVkZW50aWFscywg
V2ViQ29yZTo6Q2xpZW50Q3JlZGVudGlhbFBvbGljeSwgV2ViQ29yZTo6UmVzb3VyY2VFcnJvciYs
IFdlYkNvcmU6OlJlc291cmNlUmVzcG9uc2UmLCBWZWN0b3I8Y2hhcj4mIGRhdGEpIG92ZXJyaWRl
OwotICAgIHZpcnR1YWwgV2ViQ29yZTo6QmxvYlJlZ2lzdHJ5KiBjcmVhdGVCbG9iUmVnaXN0cnko
KSBvdmVycmlkZTsKLSAgICB2aXJ0dWFsIHZvaWQgY3JlYXRlUGluZ0hhbmRsZShXZWJDb3JlOjpO
ZXR3b3JraW5nQ29udGV4dCosIFdlYkNvcmU6OlJlc291cmNlUmVxdWVzdCYsIGJvb2wgc2hvdWxk
VXNlQ3JlZGVudGlhbFN0b3JhZ2UpIG92ZXJyaWRlOwotCiAgICAgLy8gV2ViQ29yZTo6UGx1Z2lu
U3RyYXRlZ3kKICAgICB2aXJ0dWFsIHZvaWQgcmVmcmVzaFBsdWdpbnMoKSBvdmVycmlkZTsKICAg
ICB2aXJ0dWFsIHZvaWQgZ2V0UGx1Z2luSW5mbyhjb25zdCBXZWJDb3JlOjpQYWdlKiwgVmVjdG9y
PFdlYkNvcmU6OlBsdWdpbkluZm8+Jikgb3ZlcnJpZGU7CkluZGV4OiBTb3VyY2UvV2ViS2l0L0No
YW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L0NoYW5nZUxvZwkocmV2aXNpb24g
MTkyOTQzKQorKysgU291cmNlL1dlYktpdC9DaGFuZ2VMb2cJKHdvcmtpbmcgY29weSkKQEAgLTEs
MyArMSw3MiBAQAorMjAxNS0xMi0wMiAgQW50dGkgS29pdmlzdG8gIDxhbnR0aUBhcHBsZS5jb20+
CisKKyAgICAgICAgTW92ZSBSZXNvdXJjZUxvYWRTY2hlZHVsZXIgdG8gV2ViS2l0MQorICAgICAg
ICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTUxNzQzCisKKyAgICAg
ICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgKiBXZWJDb3JlU3VwcG9y
dC9XZWJSZXNvdXJjZUxvYWRTY2hlZHVsZXIuY3BwOiBDb3BpZWQgZnJvbSBTb3VyY2UvV2ViQ29y
ZS9sb2FkZXIvUmVzb3VyY2VMb2FkU2NoZWR1bGVyLmNwcC4KKyAgICAgICAgKHdlYlJlc291cmNl
TG9hZFNjaGVkdWxlcik6CisgICAgICAgIChXZWJSZXNvdXJjZUxvYWRTY2hlZHVsZXI6Omhvc3RG
b3JVUkwpOgorICAgICAgICAoV2ViUmVzb3VyY2VMb2FkU2NoZWR1bGVyOjpXZWJSZXNvdXJjZUxv
YWRTY2hlZHVsZXIpOgorICAgICAgICAoV2ViUmVzb3VyY2VMb2FkU2NoZWR1bGVyOjp+V2ViUmVz
b3VyY2VMb2FkU2NoZWR1bGVyKToKKyAgICAgICAgKFdlYlJlc291cmNlTG9hZFNjaGVkdWxlcjo6
c2NoZWR1bGVTdWJyZXNvdXJjZUxvYWQpOgorICAgICAgICAoV2ViUmVzb3VyY2VMb2FkU2NoZWR1
bGVyOjpsb2FkUmVzb3VyY2VTeW5jaHJvbm91c2x5KToKKyAgICAgICAgKFdlYlJlc291cmNlTG9h
ZFNjaGVkdWxlcjo6c2NoZWR1bGVQbHVnaW5TdHJlYW1Mb2FkKToKKyAgICAgICAgKFdlYlJlc291
cmNlTG9hZFNjaGVkdWxlcjo6c2NoZWR1bGVMb2FkKToKKyAgICAgICAgKFdlYlJlc291cmNlTG9h
ZFNjaGVkdWxlcjo6cmVtb3ZlKToKKyAgICAgICAgKFdlYlJlc291cmNlTG9hZFNjaGVkdWxlcjo6
c2V0RGVmZXJzTG9hZGluZyk6CisgICAgICAgIChXZWJSZXNvdXJjZUxvYWRTY2hlZHVsZXI6OmNy
b3NzT3JpZ2luUmVkaXJlY3RSZWNlaXZlZCk6CisgICAgICAgIChXZWJSZXNvdXJjZUxvYWRTY2hl
ZHVsZXI6OnNlcnZlUGVuZGluZ1JlcXVlc3RzKToKKyAgICAgICAgKFdlYlJlc291cmNlTG9hZFNj
aGVkdWxlcjo6c3VzcGVuZFBlbmRpbmdSZXF1ZXN0cyk6CisgICAgICAgIChXZWJSZXNvdXJjZUxv
YWRTY2hlZHVsZXI6OnJlc3VtZVBlbmRpbmdSZXF1ZXN0cyk6CisgICAgICAgIChXZWJSZXNvdXJj
ZUxvYWRTY2hlZHVsZXI6OnNjaGVkdWxlU2VydmVQZW5kaW5nUmVxdWVzdHMpOgorICAgICAgICAo
V2ViUmVzb3VyY2VMb2FkU2NoZWR1bGVyOjpyZXF1ZXN0VGltZXJGaXJlZCk6CisgICAgICAgIChX
ZWJSZXNvdXJjZUxvYWRTY2hlZHVsZXI6Okhvc3RJbmZvcm1hdGlvbjo6SG9zdEluZm9ybWF0aW9u
KToKKyAgICAgICAgKFdlYlJlc291cmNlTG9hZFNjaGVkdWxlcjo6SG9zdEluZm9ybWF0aW9uOjp+
SG9zdEluZm9ybWF0aW9uKToKKyAgICAgICAgKFdlYlJlc291cmNlTG9hZFNjaGVkdWxlcjo6SG9z
dEluZm9ybWF0aW9uOjpwcmlvcml0eVRvSW5kZXgpOgorICAgICAgICAoV2ViUmVzb3VyY2VMb2Fk
U2NoZWR1bGVyOjpIb3N0SW5mb3JtYXRpb246OnNjaGVkdWxlKToKKyAgICAgICAgKFdlYlJlc291
cmNlTG9hZFNjaGVkdWxlcjo6SG9zdEluZm9ybWF0aW9uOjphZGRMb2FkSW5Qcm9ncmVzcyk6Cisg
ICAgICAgIChXZWJSZXNvdXJjZUxvYWRTY2hlZHVsZXI6Okhvc3RJbmZvcm1hdGlvbjo6cmVtb3Zl
KToKKyAgICAgICAgKFdlYlJlc291cmNlTG9hZFNjaGVkdWxlcjo6SG9zdEluZm9ybWF0aW9uOjpo
YXNSZXF1ZXN0cyk6CisgICAgICAgIChXZWJSZXNvdXJjZUxvYWRTY2hlZHVsZXI6Okhvc3RJbmZv
cm1hdGlvbjo6bGltaXRSZXF1ZXN0cyk6CisgICAgICAgIChXZWJSZXNvdXJjZUxvYWRTY2hlZHVs
ZXI6OmNyZWF0ZVBpbmdIYW5kbGUpOgorICAgICAgICAoV2ViQ29yZTo6UmVzb3VyY2VMb2FkU2No
ZWR1bGVyOjpob3N0Rm9yVVJMKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OnJlc291cmNl
TG9hZFNjaGVkdWxlcik6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpSZXNvdXJjZUxvYWRT
Y2hlZHVsZXI6OlJlc291cmNlTG9hZFNjaGVkdWxlcik6IERlbGV0ZWQuCisgICAgICAgIChXZWJD
b3JlOjpSZXNvdXJjZUxvYWRTY2hlZHVsZXI6On5SZXNvdXJjZUxvYWRTY2hlZHVsZXIpOiBEZWxl
dGVkLgorICAgICAgICAoV2ViQ29yZTo6UmVzb3VyY2VMb2FkU2NoZWR1bGVyOjpzY2hlZHVsZVN1
YnJlc291cmNlTG9hZCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpSZXNvdXJjZUxvYWRT
Y2hlZHVsZXI6OnNjaGVkdWxlUGx1Z2luU3RyZWFtTG9hZCk6IERlbGV0ZWQuCisgICAgICAgIChX
ZWJDb3JlOjpSZXNvdXJjZUxvYWRTY2hlZHVsZXI6OnNjaGVkdWxlTG9hZCk6IERlbGV0ZWQuCisg
ICAgICAgIChXZWJDb3JlOjpSZXNvdXJjZUxvYWRTY2hlZHVsZXI6OnJlbW92ZSk6IERlbGV0ZWQu
CisgICAgICAgIChXZWJDb3JlOjpSZXNvdXJjZUxvYWRTY2hlZHVsZXI6OnNldERlZmVyc0xvYWRp
bmcpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6UmVzb3VyY2VMb2FkU2NoZWR1bGVyOjpj
cm9zc09yaWdpblJlZGlyZWN0UmVjZWl2ZWQpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6
UmVzb3VyY2VMb2FkU2NoZWR1bGVyOjpzZXJ2ZVBlbmRpbmdSZXF1ZXN0cyk6IERlbGV0ZWQuCisg
ICAgICAgIChXZWJDb3JlOjpSZXNvdXJjZUxvYWRTY2hlZHVsZXI6OnN1c3BlbmRQZW5kaW5nUmVx
dWVzdHMpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6UmVzb3VyY2VMb2FkU2NoZWR1bGVy
OjpyZXN1bWVQZW5kaW5nUmVxdWVzdHMpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6UmVz
b3VyY2VMb2FkU2NoZWR1bGVyOjpzY2hlZHVsZVNlcnZlUGVuZGluZ1JlcXVlc3RzKTogRGVsZXRl
ZC4KKyAgICAgICAgKFdlYkNvcmU6OlJlc291cmNlTG9hZFNjaGVkdWxlcjo6cmVxdWVzdFRpbWVy
RmlyZWQpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6UmVzb3VyY2VMb2FkU2NoZWR1bGVy
OjpIb3N0SW5mb3JtYXRpb246Okhvc3RJbmZvcm1hdGlvbik6IERlbGV0ZWQuCisgICAgICAgIChX
ZWJDb3JlOjpSZXNvdXJjZUxvYWRTY2hlZHVsZXI6Okhvc3RJbmZvcm1hdGlvbjo6fkhvc3RJbmZv
cm1hdGlvbik6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpSZXNvdXJjZUxvYWRTY2hlZHVs
ZXI6Okhvc3RJbmZvcm1hdGlvbjo6cHJpb3JpdHlUb0luZGV4KTogRGVsZXRlZC4KKyAgICAgICAg
KFdlYkNvcmU6OlJlc291cmNlTG9hZFNjaGVkdWxlcjo6SG9zdEluZm9ybWF0aW9uOjpzY2hlZHVs
ZSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpSZXNvdXJjZUxvYWRTY2hlZHVsZXI6Okhv
c3RJbmZvcm1hdGlvbjo6YWRkTG9hZEluUHJvZ3Jlc3MpOiBEZWxldGVkLgorICAgICAgICAoV2Vi
Q29yZTo6UmVzb3VyY2VMb2FkU2NoZWR1bGVyOjpIb3N0SW5mb3JtYXRpb246OnJlbW92ZSk6IERl
bGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpSZXNvdXJjZUxvYWRTY2hlZHVsZXI6Okhvc3RJbmZv
cm1hdGlvbjo6aGFzUmVxdWVzdHMpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6UmVzb3Vy
Y2VMb2FkU2NoZWR1bGVyOjpIb3N0SW5mb3JtYXRpb246OmxpbWl0UmVxdWVzdHMpOiBEZWxldGVk
LgorICAgICAgICAqIFdlYkNvcmVTdXBwb3J0L1dlYlJlc291cmNlTG9hZFNjaGVkdWxlci5oOiBD
b3BpZWQgZnJvbSBTb3VyY2UvV2ViQ29yZS9sb2FkZXIvUmVzb3VyY2VMb2FkU2NoZWR1bGVyLmgu
CisgICAgICAgIChXZWJSZXNvdXJjZUxvYWRTY2hlZHVsZXI6OmlzU2VyaWFsTG9hZGluZ0VuYWJs
ZWQpOgorICAgICAgICAoV2ViUmVzb3VyY2VMb2FkU2NoZWR1bGVyOjpzZXRTZXJpYWxMb2FkaW5n
RW5hYmxlZCk6CisgICAgICAgIChXZWJSZXNvdXJjZUxvYWRTY2hlZHVsZXI6Okhvc3RJbmZvcm1h
dGlvbjo6bmFtZSk6CisgICAgICAgIChXZWJSZXNvdXJjZUxvYWRTY2hlZHVsZXI6Okhvc3RJbmZv
cm1hdGlvbjo6cmVxdWVzdHNQZW5kaW5nKToKKyAgICAgICAgKFdlYkNvcmU6OlJlc291cmNlTG9h
ZFNjaGVkdWxlcjo6aXNTZXJpYWxMb2FkaW5nRW5hYmxlZCk6IERlbGV0ZWQuCisgICAgICAgIChX
ZWJDb3JlOjpSZXNvdXJjZUxvYWRTY2hlZHVsZXI6OnNldFNlcmlhbExvYWRpbmdFbmFibGVkKTog
RGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OlJlc291cmNlTG9hZFNjaGVkdWxlcjo6U3VzcGVu
ZGVyOjpTdXNwZW5kZXIpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6UmVzb3VyY2VMb2Fk
U2NoZWR1bGVyOjpTdXNwZW5kZXI6On5TdXNwZW5kZXIpOiBEZWxldGVkLgorICAgICAgICAoV2Vi
Q29yZTo6UmVzb3VyY2VMb2FkU2NoZWR1bGVyOjpIb3N0SW5mb3JtYXRpb246Om5hbWUpOiBEZWxl
dGVkLgorICAgICAgICAoV2ViQ29yZTo6UmVzb3VyY2VMb2FkU2NoZWR1bGVyOjpIb3N0SW5mb3Jt
YXRpb246OnJlcXVlc3RzUGVuZGluZyk6IERlbGV0ZWQuCisgICAgICAgICogV2ViS2l0Lnhjb2Rl
cHJvai9wcm9qZWN0LnBieHByb2o6CisKIDIwMTUtMTAtMjkgIEFsZXggQ2hyaXN0ZW5zZW4gIDxh
Y2hyaXN0ZW5zZW5Ad2Via2l0Lm9yZz4KIAogICAgICAgICBNYWtlIFdlYkNvcmUgYSBmcmFtZXdv
cmsgaW4gTWFjIENNYWtlIGJ1aWxkCkluZGV4OiBTb3VyY2UvV2ViS2l0L0NNYWtlTGlzdHMudHh0
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvQ01ha2VMaXN0cy50eHQJKHJldmlzaW9uIDE5
Mjg4MCkKKysrIFNvdXJjZS9XZWJLaXQvQ01ha2VMaXN0cy50eHQJKHdvcmtpbmcgY29weSkKQEAg
LTMsNiArMyw3IEBAIGluY2x1ZGUoV2ViS2l0Q29tbW9uKQogCiBzZXQoV2ViS2l0X1NPVVJDRVMK
ICAgICBXZWJDb3JlU3VwcG9ydC9XZWJWaWV3R3JvdXAuY3BwCisgICAgV2ViQ29yZVN1cHBvcnQv
V2ViUmVzb3VyY2VMb2FkU2NoZWR1bGVyLmNwcAogKQogCiBzZXQoV2ViS2l0X0lOQ0xVREVfRElS
RUNUT1JJRVMKSW5kZXg6IFNvdXJjZS9XZWJLaXQvV2ViQ29yZVN1cHBvcnQvV2ViUmVzb3VyY2VM
b2FkU2NoZWR1bGVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L1dlYkNvcmVTdXBw
b3J0L1dlYlJlc291cmNlTG9hZFNjaGVkdWxlci5jcHAJKHJldmlzaW9uIDE5Mjg4MCkJKGZyb20g
U291cmNlL1dlYkNvcmUvbG9hZGVyL1Jlc291cmNlTG9hZFNjaGVkdWxlci5jcHA6MTkyODgwKQor
KysgU291cmNlL1dlYktpdC9XZWJDb3JlU3VwcG9ydC9XZWJSZXNvdXJjZUxvYWRTY2hlZHVsZXIu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMzkyIEBACisvKgorICAgIENvcHlyaWdodCAo
QykgMTk5OCBMYXJzIEtub2xsIChrbm9sbEBtcGktaGQubXBnLmRlKQorICAgIENvcHlyaWdodCAo
QykgMjAwMSBEaXJrIE11ZWxsZXIgKG11ZWxsZXJAa2RlLm9yZykKKyAgICBDb3B5cmlnaHQgKEMp
IDIwMDIgV2FsZG8gQmFzdGlhbiAoYmFzdGlhbkBrZGUub3JnKQorICAgIENvcHlyaWdodCAoQykg
MjAwNiBTYW11ZWwgV2VpbmlnIChzYW0ud2VpbmlnQGdtYWlsLmNvbSkKKyAgICBDb3B5cmlnaHQg
KEMpIDIwMDQsIDIwMDUsIDIwMDYsIDIwMDcsIDIwMDggQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgorICAgIENvcHlyaWdodCAoQykgMjAxMCBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgorCisgICAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVk
aXN0cmlidXRlIGl0IGFuZC9vcgorICAgIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhl
IEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgICAgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkg
dGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgICAgdmVyc2lvbiAyIG9mIHRo
ZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorCisgICAg
VGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1
c2VmdWwsCisgICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGlt
cGxpZWQgd2FycmFudHkgb2YKKyAgICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQ
QVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICAgIExpYnJhcnkgR2VuZXJhbCBQdWJs
aWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorCisgICAgWW91IHNob3VsZCBoYXZlIHJlY2Vp
dmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICAg
IGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBu
b3QsIHdyaXRlIHRvCisgICAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEg
RnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKKyAgICBCb3N0b24sIE1BIDAyMTEwLTEzMDEs
IFVTQS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiUmVzb3VyY2VMb2Fk
U2NoZWR1bGVyLmgiCisKKyNpbmNsdWRlICJEb2N1bWVudC5oIgorI2luY2x1ZGUgIkRvY3VtZW50
TG9hZGVyLmgiCisjaW5jbHVkZSAiRnJhbWUuaCIKKyNpbmNsdWRlICJGcmFtZUxvYWRlci5oIgor
I2luY2x1ZGUgIkxvYWRlclN0cmF0ZWd5LmgiCisjaW5jbHVkZSAiTG9nZ2luZy5oIgorI2luY2x1
ZGUgIk5ldHNjYXBlUGx1Z0luU3RyZWFtTG9hZGVyLmgiCisjaW5jbHVkZSAiUGxhdGZvcm1TdHJh
dGVnaWVzLmgiCisjaW5jbHVkZSAiUmVzb3VyY2VMb2FkZXIuaCIKKyNpbmNsdWRlICJSZXNvdXJj
ZVJlcXVlc3QuaCIKKyNpbmNsdWRlICJTdWJyZXNvdXJjZUxvYWRlci5oIgorI2luY2x1ZGUgIlVS
TC5oIgorI2luY2x1ZGUgPHd0Zi9NYWluVGhyZWFkLmg+CisjaW5jbHVkZSA8d3RmL1RlbXBvcmFy
eUNoYW5nZS5oPgorI2luY2x1ZGUgPHd0Zi90ZXh0L0NTdHJpbmcuaD4KKworI2lmIFBMQVRGT1JN
KElPUykKKyNpbmNsdWRlIDxSdW50aW1lQXBwbGljYXRpb25DaGVja3NJT1MuaD4KKyNlbmRpZgor
CisjaWYgVVNFKFFVSUNLX0xPT0spCisjaW5jbHVkZSAiUXVpY2tMb29rLmgiCisjZW5kaWYKKwor
bmFtZXNwYWNlIFdlYkNvcmUgeworCisvLyBNYXRjaCB0aGUgcGFyYWxsZWwgY29ubmVjdGlvbiBj
b3VudCB1c2VkIGJ5IHRoZSBuZXR3b3JraW5nIGxheWVyLgorc3RhdGljIHVuc2lnbmVkIG1heFJl
cXVlc3RzSW5GbGlnaHRQZXJIb3N0OworI2lmICFQTEFURk9STShJT1MpCitzdGF0aWMgY29uc3Qg
dW5zaWduZWQgbWF4UmVxdWVzdHNJbkZsaWdodEZvck5vbkhUVFBQcm90b2NvbHMgPSAyMDsKKyNl
bHNlCisvLyBMaW1pdGluZyB0aGlzIHNlZW1zIHRvIHJlZ3Jlc3MgcGVyZm9ybWFuY2UgaW4gc29t
ZSBsb2NhbCBjYXNlcyBzbyBsZXQncyBqdXN0IG1ha2UgaXQgbGFyZ2UuCitzdGF0aWMgY29uc3Qg
dW5zaWduZWQgbWF4UmVxdWVzdHNJbkZsaWdodEZvck5vbkhUVFBQcm90b2NvbHMgPSAxMDAwMDsK
KyNlbmRpZgorCitSZXNvdXJjZUxvYWRTY2hlZHVsZXI6Okhvc3RJbmZvcm1hdGlvbiogUmVzb3Vy
Y2VMb2FkU2NoZWR1bGVyOjpob3N0Rm9yVVJMKGNvbnN0IFVSTCYgdXJsLCBDcmVhdGVIb3N0UG9s
aWN5IGNyZWF0ZUhvc3RQb2xpY3kpCit7CisgICAgaWYgKCF1cmwucHJvdG9jb2xJc0luSFRUUEZh
bWlseSgpKQorICAgICAgICByZXR1cm4gbV9ub25IVFRQUHJvdG9jb2xIb3N0OworCisgICAgbV9o
b3N0cy5jaGVja0NvbnNpc3RlbmN5KCk7CisgICAgU3RyaW5nIGhvc3ROYW1lID0gdXJsLmhvc3Qo
KTsKKyAgICBIb3N0SW5mb3JtYXRpb24qIGhvc3QgPSBtX2hvc3RzLmdldChob3N0TmFtZSk7Cisg
ICAgaWYgKCFob3N0ICYmIGNyZWF0ZUhvc3RQb2xpY3kgPT0gQ3JlYXRlSWZOb3RGb3VuZCkgewor
ICAgICAgICBob3N0ID0gbmV3IEhvc3RJbmZvcm1hdGlvbihob3N0TmFtZSwgbWF4UmVxdWVzdHNJ
bkZsaWdodFBlckhvc3QpOworICAgICAgICBtX2hvc3RzLmFkZChob3N0TmFtZSwgaG9zdCk7Cisg
ICAgfQorICAgIHJldHVybiBob3N0OworfQorCitSZXNvdXJjZUxvYWRTY2hlZHVsZXIqIHJlc291
cmNlTG9hZFNjaGVkdWxlcigpCit7CisgICAgQVNTRVJUKGlzTWFpblRocmVhZCgpKTsKKyAgICBz
dGF0aWMgUmVzb3VyY2VMb2FkU2NoZWR1bGVyKiBnbG9iYWxTY2hlZHVsZXIgPSBudWxscHRyOwor
ICAgIAorICAgIGlmICghZ2xvYmFsU2NoZWR1bGVyKSB7CisgICAgICAgIHN0YXRpYyBib29sIGlz
Q2FsbGluZ091dFRvU3RyYXRlZ3kgPSBmYWxzZTsKKyAgICAgICAgCisgICAgICAgIC8vIElmIHdl
J3JlIHJlLWVudGVyaW5nIHJlc291cmNlTG9hZFNjaGVkdWxlcigpIHdoaWxlIGNhbGxpbmcgb3V0
IHRvIHRoZSBMb2FkZXJTdHJhdGVneSwKKyAgICAgICAgLy8gdGhlbiB0aGUgTG9hZGVyU3RyYXRl
Z3kgaXMgdHJ5aW5nIHRvIHVzZSB0aGUgZGVmYXVsdCByZXNvdXJjZUxvYWRTY2hlZHVsZXIuCisg
ICAgICAgIC8vIFNvIHdlJ2xsIGNyZWF0ZSBpdCBoZXJlIGFuZCBzdGFydCB1c2luZyBpdC4KKyAg
ICAgICAgaWYgKGlzQ2FsbGluZ091dFRvU3RyYXRlZ3kpIHsKKyAgICAgICAgICAgIGdsb2JhbFNj
aGVkdWxlciA9IG5ldyBSZXNvdXJjZUxvYWRTY2hlZHVsZXI7CisgICAgICAgICAgICByZXR1cm4g
Z2xvYmFsU2NoZWR1bGVyOworICAgICAgICB9CisgICAgICAgIAorICAgICAgICBUZW1wb3JhcnlD
aGFuZ2U8Ym9vbD4gcmVjdXJzaW9uR3VhcmQoaXNDYWxsaW5nT3V0VG9TdHJhdGVneSwgdHJ1ZSk7
CisgICAgICAgIGdsb2JhbFNjaGVkdWxlciA9IHBsYXRmb3JtU3RyYXRlZ2llcygpLT5sb2FkZXJT
dHJhdGVneSgpLT5yZXNvdXJjZUxvYWRTY2hlZHVsZXIoKTsKKyAgICB9CisKKyAgICByZXR1cm4g
Z2xvYmFsU2NoZWR1bGVyOworfQorCitSZXNvdXJjZUxvYWRTY2hlZHVsZXI6OlJlc291cmNlTG9h
ZFNjaGVkdWxlcigpCisgICAgOiBtX25vbkhUVFBQcm90b2NvbEhvc3QobmV3IEhvc3RJbmZvcm1h
dGlvbihTdHJpbmcoKSwgbWF4UmVxdWVzdHNJbkZsaWdodEZvck5vbkhUVFBQcm90b2NvbHMpKQor
ICAgICwgbV9yZXF1ZXN0VGltZXIoKnRoaXMsICZSZXNvdXJjZUxvYWRTY2hlZHVsZXI6OnJlcXVl
c3RUaW1lckZpcmVkKQorICAgICwgbV9zdXNwZW5kUGVuZGluZ1JlcXVlc3RzQ291bnQoMCkKKyAg
ICAsIG1faXNTZXJpYWxMb2FkaW5nRW5hYmxlZChmYWxzZSkKK3sKKyAgICBtYXhSZXF1ZXN0c0lu
RmxpZ2h0UGVySG9zdCA9IGluaXRpYWxpemVNYXhpbXVtSFRUUENvbm5lY3Rpb25Db3VudFBlckhv
c3QoKTsKK30KKworUmVzb3VyY2VMb2FkU2NoZWR1bGVyOjp+UmVzb3VyY2VMb2FkU2NoZWR1bGVy
KCkKK3sKK30KKworUmVmUHRyPFN1YnJlc291cmNlTG9hZGVyPiBSZXNvdXJjZUxvYWRTY2hlZHVs
ZXI6OnNjaGVkdWxlU3VicmVzb3VyY2VMb2FkKEZyYW1lKiBmcmFtZSwgQ2FjaGVkUmVzb3VyY2Uq
IHJlc291cmNlLCBjb25zdCBSZXNvdXJjZVJlcXVlc3QmIHJlcXVlc3QsIGNvbnN0IFJlc291cmNl
TG9hZGVyT3B0aW9ucyYgb3B0aW9ucykKK3sKKyAgICBSZWZQdHI8U3VicmVzb3VyY2VMb2FkZXI+
IGxvYWRlciA9IFN1YnJlc291cmNlTG9hZGVyOjpjcmVhdGUoZnJhbWUsIHJlc291cmNlLCByZXF1
ZXN0LCBvcHRpb25zKTsKKyAgICBpZiAobG9hZGVyKQorICAgICAgICBzY2hlZHVsZUxvYWQobG9h
ZGVyLmdldCgpKTsKKyNpZiBQTEFURk9STShJT1MpCisgICAgLy8gU2luY2Ugd2UgZGVmZXIgbG9h
ZGVyIGluaXRpYWxpemF0aW9uIHVudGlsIHNjaGVkdWxpbmcgb24gaU9TLCB0aGUgZnJhbWUKKyAg
ICAvLyBsb2FkIGRlbGVnYXRlIHRoYXQgd291bGQgYmUgY2FsbGVkIGluIFN1YnJlc291cmNlTG9h
ZGVyOjpjcmVhdGUoKSBvbgorICAgIC8vIG90aGVyIHBvcnRzIG1pZ2h0IGJlIGNhbGxlZCBpbiBz
Y2hlZHVsZUxvYWQoKSBpbnN0ZWFkLiBPdXIgY29udHJhY3QgdG8KKyAgICAvLyBjYWxsZXJzIG9m
IHRoaXMgbWV0aG9kIGlzIHRoYXQgYSBudWxsIGxvYWRlciBpcyByZXR1cm5lZCBpZiB0aGUgbG9h
ZCB3YXMKKyAgICAvLyBjYW5jZWxsZWQgYnkgYSBmcmFtZSBsb2FkIGRlbGVnYXRlLgorICAgIGlm
ICghbG9hZGVyIHx8IGxvYWRlci0+cmVhY2hlZFRlcm1pbmFsU3RhdGUoKSkKKyAgICAgICAgcmV0
dXJuIG51bGxwdHI7CisjZW5kaWYKKyAgICByZXR1cm4gbG9hZGVyOworfQorCitSZWZQdHI8TmV0
c2NhcGVQbHVnSW5TdHJlYW1Mb2FkZXI+IFJlc291cmNlTG9hZFNjaGVkdWxlcjo6c2NoZWR1bGVQ
bHVnaW5TdHJlYW1Mb2FkKEZyYW1lKiBmcmFtZSwgTmV0c2NhcGVQbHVnSW5TdHJlYW1Mb2FkZXJD
bGllbnQqIGNsaWVudCwgY29uc3QgUmVzb3VyY2VSZXF1ZXN0JiByZXF1ZXN0KQoreworICAgIFJl
ZlB0cjxOZXRzY2FwZVBsdWdJblN0cmVhbUxvYWRlcj4gbG9hZGVyID0gTmV0c2NhcGVQbHVnSW5T
dHJlYW1Mb2FkZXI6OmNyZWF0ZShmcmFtZSwgY2xpZW50LCByZXF1ZXN0KTsKKyAgICBpZiAobG9h
ZGVyKQorICAgICAgICBzY2hlZHVsZUxvYWQobG9hZGVyLmdldCgpKTsKKyAgICByZXR1cm4gbG9h
ZGVyOworfQorCit2b2lkIFJlc291cmNlTG9hZFNjaGVkdWxlcjo6c2NoZWR1bGVMb2FkKFJlc291
cmNlTG9hZGVyKiByZXNvdXJjZUxvYWRlcikKK3sKKyAgICBBU1NFUlQocmVzb3VyY2VMb2FkZXIp
OworCisgICAgTE9HKFJlc291cmNlTG9hZGluZywgIlJlc291cmNlTG9hZFNjaGVkdWxlcjo6bG9h
ZCByZXNvdXJjZSAlcCAnJXMnIiwgcmVzb3VyY2VMb2FkZXIsIHJlc291cmNlTG9hZGVyLT51cmwo
KS5zdHJpbmcoKS5sYXRpbjEoKS5kYXRhKCkpOworCisjaWYgUExBVEZPUk0oSU9TKQorICAgIC8v
IElmIHRoZXJlJ3MgYSB3ZWIgYXJjaGl2ZSByZXNvdXJjZSBmb3IgdGhpcyBVUkwsIHdlIGRvbid0
IG5lZWQgdG8gc2NoZWR1bGUgdGhlIGxvYWQgc2luY2UgaXQgd2lsbCBuZXZlciB0b3VjaCB0aGUg
bmV0d29yay4KKyAgICBpZiAoIWlzU3VzcGVuZGluZ1BlbmRpbmdSZXF1ZXN0cygpICYmIHJlc291
cmNlTG9hZGVyLT5kb2N1bWVudExvYWRlcigpLT5hcmNoaXZlUmVzb3VyY2VGb3JVUkwocmVzb3Vy
Y2VMb2FkZXItPmlPU09yaWdpbmFsUmVxdWVzdCgpLnVybCgpKSkgeworICAgICAgICByZXNvdXJj
ZUxvYWRlci0+c3RhcnRMb2FkaW5nKCk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisjZWxzZQor
ICAgIGlmIChyZXNvdXJjZUxvYWRlci0+ZG9jdW1lbnRMb2FkZXIoKS0+YXJjaGl2ZVJlc291cmNl
Rm9yVVJMKHJlc291cmNlTG9hZGVyLT5yZXF1ZXN0KCkudXJsKCkpKSB7CisgICAgICAgIHJlc291
cmNlTG9hZGVyLT5zdGFydCgpOworICAgICAgICByZXR1cm47CisgICAgfQorI2VuZGlmCisKKyNp
ZiBQTEFURk9STShJT1MpCisgICAgSG9zdEluZm9ybWF0aW9uKiBob3N0ID0gaG9zdEZvclVSTChy
ZXNvdXJjZUxvYWRlci0+aU9TT3JpZ2luYWxSZXF1ZXN0KCkudXJsKCksIENyZWF0ZUlmTm90Rm91
bmQpOworI2Vsc2UKKyAgICBIb3N0SW5mb3JtYXRpb24qIGhvc3QgPSBob3N0Rm9yVVJMKHJlc291
cmNlTG9hZGVyLT51cmwoKSwgQ3JlYXRlSWZOb3RGb3VuZCk7CisjZW5kaWYKKworICAgIFJlc291
cmNlTG9hZFByaW9yaXR5IHByaW9yaXR5ID0gcmVzb3VyY2VMb2FkZXItPnJlcXVlc3QoKS5wcmlv
cml0eSgpOworCisgICAgYm9vbCBoYWRSZXF1ZXN0cyA9IGhvc3QtPmhhc1JlcXVlc3RzKCk7Cisg
ICAgaG9zdC0+c2NoZWR1bGUocmVzb3VyY2VMb2FkZXIsIHByaW9yaXR5KTsKKworI2lmIFBMQVRG
T1JNKENPQ09BKSB8fCBVU0UoQ0ZORVRXT1JLKQorICAgIGlmIChSZXNvdXJjZVJlcXVlc3Q6OnJl
c291cmNlUHJpb3JpdGllc0VuYWJsZWQoKSAmJiAhaXNTdXNwZW5kaW5nUGVuZGluZ1JlcXVlc3Rz
KCkpIHsKKyAgICAgICAgLy8gU2VydmUgYWxsIHJlcXVlc3RzIGF0IG9uY2UgdG8ga2VlcCB0aGUg
cGlwZWxpbmUgZnVsbCBhdCB0aGUgbmV0d29yayBsYXllci4KKyAgICAgICAgLy8gRklYTUU6IERv
ZXMgdGhpcyBjb2RlIGRvIGFueXRoaW5nIHVzZWZ1bCwgZ2l2ZW4gdGhhdCB3ZSBhbHNvIHNldCBt
YXhSZXF1ZXN0c0luRmxpZ2h0UGVySG9zdCB0byBlZmZlY3RpdmVseSB1bmxpbWl0ZWQgb24gdGhl
c2UgcGxhdGZvcm1zPworICAgICAgICBzZXJ2ZVBlbmRpbmdSZXF1ZXN0cyhob3N0LCBSZXNvdXJj
ZUxvYWRQcmlvcml0eTo6VmVyeUxvdyk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisjZW5kaWYK
KworI2lmIFBMQVRGT1JNKElPUykKKyAgICBpZiAoKHByaW9yaXR5ID4gUmVzb3VyY2VMb2FkUHJp
b3JpdHk6OkxvdyB8fCAhcmVzb3VyY2VMb2FkZXItPmlPU09yaWdpbmFsUmVxdWVzdCgpLnVybCgp
LnByb3RvY29sSXNJbkhUVFBGYW1pbHkoKSB8fCAocHJpb3JpdHkgPT0gUmVzb3VyY2VMb2FkUHJp
b3JpdHk6OkxvdyAmJiAhaGFkUmVxdWVzdHMpKSAmJiAhaXNTdXNwZW5kaW5nUGVuZGluZ1JlcXVl
c3RzKCkpIHsKKyAgICAgICAgLy8gVHJ5IHRvIHJlcXVlc3QgaW1wb3J0YW50IHJlc291cmNlcyBp
bW1lZGlhdGVseS4KKyAgICAgICAgc2VydmVQZW5kaW5nUmVxdWVzdHMoaG9zdCwgcHJpb3JpdHkp
OworICAgICAgICByZXR1cm47CisgICAgfQorI2Vsc2UKKyAgICBpZiAocHJpb3JpdHkgPiBSZXNv
dXJjZUxvYWRQcmlvcml0eTo6TG93IHx8ICFyZXNvdXJjZUxvYWRlci0+dXJsKCkucHJvdG9jb2xJ
c0luSFRUUEZhbWlseSgpIHx8IChwcmlvcml0eSA9PSBSZXNvdXJjZUxvYWRQcmlvcml0eTo6TG93
ICYmICFoYWRSZXF1ZXN0cykpIHsKKyAgICAgICAgLy8gVHJ5IHRvIHJlcXVlc3QgaW1wb3J0YW50
IHJlc291cmNlcyBpbW1lZGlhdGVseS4KKyAgICAgICAgc2VydmVQZW5kaW5nUmVxdWVzdHMoaG9z
dCwgcHJpb3JpdHkpOworICAgICAgICByZXR1cm47CisgICAgfQorI2VuZGlmCisKKyAgICAvLyBI
YW5kbGUgYXN5bmNocm9ub3VzbHkgc28gZWFybHkgbG93IHByaW9yaXR5IHJlcXVlc3RzIGRvbid0
CisgICAgLy8gZ2V0IHNjaGVkdWxlZCBiZWZvcmUgbGF0ZXIgaGlnaCBwcmlvcml0eSBvbmVzLgor
ICAgIHNjaGVkdWxlU2VydmVQZW5kaW5nUmVxdWVzdHMoKTsKK30KKwordm9pZCBSZXNvdXJjZUxv
YWRTY2hlZHVsZXI6OnJlbW92ZShSZXNvdXJjZUxvYWRlciogcmVzb3VyY2VMb2FkZXIpCit7Cisg
ICAgQVNTRVJUKHJlc291cmNlTG9hZGVyKTsKKworICAgIEhvc3RJbmZvcm1hdGlvbiogaG9zdCA9
IGhvc3RGb3JVUkwocmVzb3VyY2VMb2FkZXItPnVybCgpKTsKKyAgICBpZiAoaG9zdCkKKyAgICAg
ICAgaG9zdC0+cmVtb3ZlKHJlc291cmNlTG9hZGVyKTsKKyNpZiBQTEFURk9STShJT1MpCisgICAg
Ly8gUmVzb3VyY2VMb2FkZXI6OnVybCgpIGRvZXNuJ3Qgc3RhcnQgcmV0dXJuaW5nIHRoZSBjb3Jy
ZWN0IHZhbHVlIHVudGlsIHRoZSBsb2FkIHN0YXJ0cy4gSWYgd2UgZ2V0IGNhbmNlbGVkIGJlZm9y
ZSB0aGF0LCB3ZSBuZWVkIHRvIGxvb2sgZm9yIG9yaWdpbmFsUmVxdWVzdCB1cmwgaW5zdGVhZC4K
KyAgICAvLyBGSVhNRTogUmVzb3VyY2VMb2FkZXI6OnVybCgpIHNob3VsZCBiZSBtYWRlIHRvIHJl
dHVybiBhIHNlbnNpYmxlIHZhbHVlIGF0IGFsbCB0aW1lcy4KKyAgICBpZiAoIXJlc291cmNlTG9h
ZGVyLT5pT1NPcmlnaW5hbFJlcXVlc3QoKS5pc051bGwoKSkgeworICAgICAgICBIb3N0SW5mb3Jt
YXRpb24qIG9yaWdpbmFsSG9zdCA9IGhvc3RGb3JVUkwocmVzb3VyY2VMb2FkZXItPmlPU09yaWdp
bmFsUmVxdWVzdCgpLnVybCgpKTsKKyAgICAgICAgaWYgKG9yaWdpbmFsSG9zdCAmJiBvcmlnaW5h
bEhvc3QgIT0gaG9zdCkKKyAgICAgICAgICAgIG9yaWdpbmFsSG9zdC0+cmVtb3ZlKHJlc291cmNl
TG9hZGVyKTsKKyAgICB9CisjZW5kaWYKKyAgICBzY2hlZHVsZVNlcnZlUGVuZGluZ1JlcXVlc3Rz
KCk7Cit9CisKK3ZvaWQgUmVzb3VyY2VMb2FkU2NoZWR1bGVyOjpzZXREZWZlcnNMb2FkaW5nKFJl
c291cmNlTG9hZGVyKiwgYm9vbCkKK3sKK30KKwordm9pZCBSZXNvdXJjZUxvYWRTY2hlZHVsZXI6
OmNyb3NzT3JpZ2luUmVkaXJlY3RSZWNlaXZlZChSZXNvdXJjZUxvYWRlciogcmVzb3VyY2VMb2Fk
ZXIsIGNvbnN0IFVSTCYgcmVkaXJlY3RVUkwpCit7CisgICAgSG9zdEluZm9ybWF0aW9uKiBvbGRI
b3N0ID0gaG9zdEZvclVSTChyZXNvdXJjZUxvYWRlci0+dXJsKCkpOworICAgIEFTU0VSVChvbGRI
b3N0KTsKKyAgICBpZiAoIW9sZEhvc3QpCisgICAgICAgIHJldHVybjsKKworICAgIEhvc3RJbmZv
cm1hdGlvbiogbmV3SG9zdCA9IGhvc3RGb3JVUkwocmVkaXJlY3RVUkwsIENyZWF0ZUlmTm90Rm91
bmQpOworCisgICAgaWYgKG9sZEhvc3QtPm5hbWUoKSA9PSBuZXdIb3N0LT5uYW1lKCkpCisgICAg
ICAgIHJldHVybjsKKworICAgIG5ld0hvc3QtPmFkZExvYWRJblByb2dyZXNzKHJlc291cmNlTG9h
ZGVyKTsKKyAgICBvbGRIb3N0LT5yZW1vdmUocmVzb3VyY2VMb2FkZXIpOworfQorCit2b2lkIFJl
c291cmNlTG9hZFNjaGVkdWxlcjo6c2VydmVQZW5kaW5nUmVxdWVzdHMoUmVzb3VyY2VMb2FkUHJp
b3JpdHkgbWluaW11bVByaW9yaXR5KQoreworICAgIExPRyhSZXNvdXJjZUxvYWRpbmcsICJSZXNv
dXJjZUxvYWRTY2hlZHVsZXI6OnNlcnZlUGVuZGluZ1JlcXVlc3RzLiBtX3N1c3BlbmRQZW5kaW5n
UmVxdWVzdHNDb3VudD0lZCIsIG1fc3VzcGVuZFBlbmRpbmdSZXF1ZXN0c0NvdW50KTsgCisgICAg
aWYgKGlzU3VzcGVuZGluZ1BlbmRpbmdSZXF1ZXN0cygpKQorICAgICAgICByZXR1cm47CisKKyAg
ICBtX3JlcXVlc3RUaW1lci5zdG9wKCk7CisgICAgCisgICAgc2VydmVQZW5kaW5nUmVxdWVzdHMo
bV9ub25IVFRQUHJvdG9jb2xIb3N0LCBtaW5pbXVtUHJpb3JpdHkpOworCisgICAgVmVjdG9yPEhv
c3RJbmZvcm1hdGlvbio+IGhvc3RzVG9TZXJ2ZTsKKyAgICBjb3B5VmFsdWVzVG9WZWN0b3IobV9o
b3N0cywgaG9zdHNUb1NlcnZlKTsKKworICAgIGZvciAoYXV0byogaG9zdCA6IGhvc3RzVG9TZXJ2
ZSkgeworICAgICAgICBpZiAoaG9zdC0+aGFzUmVxdWVzdHMoKSkKKyAgICAgICAgICAgIHNlcnZl
UGVuZGluZ1JlcXVlc3RzKGhvc3QsIG1pbmltdW1Qcmlvcml0eSk7CisgICAgICAgIGVsc2UKKyAg
ICAgICAgICAgIGRlbGV0ZSBtX2hvc3RzLnRha2UoaG9zdC0+bmFtZSgpKTsKKyAgICB9Cit9CisK
K3ZvaWQgUmVzb3VyY2VMb2FkU2NoZWR1bGVyOjpzZXJ2ZVBlbmRpbmdSZXF1ZXN0cyhIb3N0SW5m
b3JtYXRpb24qIGhvc3QsIFJlc291cmNlTG9hZFByaW9yaXR5IG1pbmltdW1Qcmlvcml0eSkKK3sK
KyAgICBMT0coUmVzb3VyY2VMb2FkaW5nLCAiUmVzb3VyY2VMb2FkU2NoZWR1bGVyOjpzZXJ2ZVBl
bmRpbmdSZXF1ZXN0cyBIb3N0SW5mb3JtYXRpb24ubV9uYW1lPSclcyciLCBob3N0LT5uYW1lKCku
bGF0aW4xKCkuZGF0YSgpKTsKKworICAgIGF1dG8gcHJpb3JpdHkgPSBSZXNvdXJjZUxvYWRQcmlv
cml0eTo6SGlnaGVzdDsKKyAgICB3aGlsZSAodHJ1ZSkgeworICAgICAgICBhdXRvJiByZXF1ZXN0
c1BlbmRpbmcgPSBob3N0LT5yZXF1ZXN0c1BlbmRpbmcocHJpb3JpdHkpOworICAgICAgICB3aGls
ZSAoIXJlcXVlc3RzUGVuZGluZy5pc0VtcHR5KCkpIHsKKyAgICAgICAgICAgIFJlZlB0cjxSZXNv
dXJjZUxvYWRlcj4gcmVzb3VyY2VMb2FkZXIgPSByZXF1ZXN0c1BlbmRpbmcuZmlyc3QoKTsKKwor
ICAgICAgICAgICAgLy8gRm9yIG5hbWVkIGhvc3RzIC0gd2hpY2ggYXJlIG9ubHkgaHR0cChzKSBo
b3N0cyAtIHdlIHNob3VsZCBhbHdheXMgZW5mb3JjZSB0aGUgY29ubmVjdGlvbiBsaW1pdC4KKyAg
ICAgICAgICAgIC8vIEZvciBub24tbmFtZWQgaG9zdHMgLSBldmVyeXRoaW5nIGJ1dCBodHRwKHMp
IC0gd2Ugc2hvdWxkIG9ubHkgZW5mb3JjZSB0aGUgbGltaXQgaWYgdGhlIGRvY3VtZW50IGlzbid0
IGRvbmUgcGFyc2luZyAKKyAgICAgICAgICAgIC8vIGFuZCB3ZSBkb24ndCBrbm93IGFsbCBzdHls
ZXNoZWV0cyB5ZXQuCisgICAgICAgICAgICBEb2N1bWVudCogZG9jdW1lbnQgPSByZXNvdXJjZUxv
YWRlci0+ZnJhbWVMb2FkZXIoKSA/IHJlc291cmNlTG9hZGVyLT5mcmFtZUxvYWRlcigpLT5mcmFt
ZSgpLmRvY3VtZW50KCkgOiAwOworICAgICAgICAgICAgYm9vbCBzaG91bGRMaW1pdFJlcXVlc3Rz
ID0gIWhvc3QtPm5hbWUoKS5pc051bGwoKSB8fCAoZG9jdW1lbnQgJiYgKGRvY3VtZW50LT5wYXJz
aW5nKCkgfHwgIWRvY3VtZW50LT5oYXZlU3R5bGVzaGVldHNMb2FkZWQoKSkpOworICAgICAgICAg
ICAgaWYgKHNob3VsZExpbWl0UmVxdWVzdHMgJiYgaG9zdC0+bGltaXRSZXF1ZXN0cyhwcmlvcml0
eSkpCisgICAgICAgICAgICAgICAgcmV0dXJuOworCisgICAgICAgICAgICByZXF1ZXN0c1BlbmRp
bmcucmVtb3ZlRmlyc3QoKTsKKyAgICAgICAgICAgIGhvc3QtPmFkZExvYWRJblByb2dyZXNzKHJl
c291cmNlTG9hZGVyLmdldCgpKTsKKyNpZiBQTEFURk9STShJT1MpCisgICAgICAgICAgICBpZiAo
IWFwcGxpY2F0aW9uSXNXZWJQcm9jZXNzKCkpIHsKKyAgICAgICAgICAgICAgICByZXNvdXJjZUxv
YWRlci0+c3RhcnRMb2FkaW5nKCk7CisgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAg
ICAgfQorI2VuZGlmCisgICAgICAgICAgICByZXNvdXJjZUxvYWRlci0+c3RhcnQoKTsKKyAgICAg
ICAgfQorICAgICAgICBpZiAocHJpb3JpdHkgPT0gbWluaW11bVByaW9yaXR5KQorICAgICAgICAg
ICAgcmV0dXJuOworICAgICAgICAtLXByaW9yaXR5OworICAgIH0KK30KKwordm9pZCBSZXNvdXJj
ZUxvYWRTY2hlZHVsZXI6OnN1c3BlbmRQZW5kaW5nUmVxdWVzdHMoKQoreworICAgICsrbV9zdXNw
ZW5kUGVuZGluZ1JlcXVlc3RzQ291bnQ7Cit9CisKK3ZvaWQgUmVzb3VyY2VMb2FkU2NoZWR1bGVy
OjpyZXN1bWVQZW5kaW5nUmVxdWVzdHMoKQoreworICAgIEFTU0VSVChtX3N1c3BlbmRQZW5kaW5n
UmVxdWVzdHNDb3VudCk7CisgICAgLS1tX3N1c3BlbmRQZW5kaW5nUmVxdWVzdHNDb3VudDsKKyAg
ICBpZiAobV9zdXNwZW5kUGVuZGluZ1JlcXVlc3RzQ291bnQpCisgICAgICAgIHJldHVybjsKKyAg
ICBpZiAoIW1faG9zdHMuaXNFbXB0eSgpIHx8IG1fbm9uSFRUUFByb3RvY29sSG9zdC0+aGFzUmVx
dWVzdHMoKSkKKyAgICAgICAgc2NoZWR1bGVTZXJ2ZVBlbmRpbmdSZXF1ZXN0cygpOworfQorICAg
IAordm9pZCBSZXNvdXJjZUxvYWRTY2hlZHVsZXI6OnNjaGVkdWxlU2VydmVQZW5kaW5nUmVxdWVz
dHMoKQoreworICAgIExPRyhSZXNvdXJjZUxvYWRpbmcsICJSZXNvdXJjZUxvYWRTY2hlZHVsZXI6
OnNjaGVkdWxlU2VydmVQZW5kaW5nUmVxdWVzdHMsIG1fcmVxdWVzdFRpbWVyLmlzQWN0aXZlKCk9
JXUiLCBtX3JlcXVlc3RUaW1lci5pc0FjdGl2ZSgpKTsKKyAgICBpZiAoIW1fcmVxdWVzdFRpbWVy
LmlzQWN0aXZlKCkpCisgICAgICAgIG1fcmVxdWVzdFRpbWVyLnN0YXJ0T25lU2hvdCgwKTsKK30K
Kwordm9pZCBSZXNvdXJjZUxvYWRTY2hlZHVsZXI6OnJlcXVlc3RUaW1lckZpcmVkKCkKK3sKKyAg
ICBMT0coUmVzb3VyY2VMb2FkaW5nLCAiUmVzb3VyY2VMb2FkU2NoZWR1bGVyOjpyZXF1ZXN0VGlt
ZXJGaXJlZFxuIik7CisgICAgc2VydmVQZW5kaW5nUmVxdWVzdHMoKTsKK30KKworUmVzb3VyY2VM
b2FkU2NoZWR1bGVyOjpIb3N0SW5mb3JtYXRpb246Okhvc3RJbmZvcm1hdGlvbihjb25zdCBTdHJp
bmcmIG5hbWUsIHVuc2lnbmVkIG1heFJlcXVlc3RzSW5GbGlnaHQpCisgICAgOiBtX25hbWUobmFt
ZSkKKyAgICAsIG1fbWF4UmVxdWVzdHNJbkZsaWdodChtYXhSZXF1ZXN0c0luRmxpZ2h0KQorewor
fQorCitSZXNvdXJjZUxvYWRTY2hlZHVsZXI6Okhvc3RJbmZvcm1hdGlvbjo6fkhvc3RJbmZvcm1h
dGlvbigpCit7CisgICAgQVNTRVJUKCFoYXNSZXF1ZXN0cygpKTsKK30KKwordW5zaWduZWQgUmVz
b3VyY2VMb2FkU2NoZWR1bGVyOjpIb3N0SW5mb3JtYXRpb246OnByaW9yaXR5VG9JbmRleChSZXNv
dXJjZUxvYWRQcmlvcml0eSBwcmlvcml0eSkKK3sKKyAgICBzd2l0Y2ggKHByaW9yaXR5KSB7Cisg
ICAgY2FzZSBSZXNvdXJjZUxvYWRQcmlvcml0eTo6VmVyeUxvdzoKKyAgICAgICAgcmV0dXJuIDA7
CisgICAgY2FzZSBSZXNvdXJjZUxvYWRQcmlvcml0eTo6TG93OgorICAgICAgICByZXR1cm4gMTsK
KyAgICBjYXNlIFJlc291cmNlTG9hZFByaW9yaXR5OjpNZWRpdW06CisgICAgICAgIHJldHVybiAy
OworICAgIGNhc2UgUmVzb3VyY2VMb2FkUHJpb3JpdHk6OkhpZ2g6CisgICAgICAgIHJldHVybiAz
OworICAgIGNhc2UgUmVzb3VyY2VMb2FkUHJpb3JpdHk6OlZlcnlIaWdoOgorICAgICAgICByZXR1
cm4gNDsKKyAgICB9CisgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgcmV0dXJuIDA7Cit9
CisKK3ZvaWQgUmVzb3VyY2VMb2FkU2NoZWR1bGVyOjpIb3N0SW5mb3JtYXRpb246OnNjaGVkdWxl
KFJlc291cmNlTG9hZGVyKiByZXNvdXJjZUxvYWRlciwgUmVzb3VyY2VMb2FkUHJpb3JpdHkgcHJp
b3JpdHkpCit7CisgICAgbV9yZXF1ZXN0c1BlbmRpbmdbcHJpb3JpdHlUb0luZGV4KHByaW9yaXR5
KV0uYXBwZW5kKHJlc291cmNlTG9hZGVyKTsKK30KKyAgICAKK3ZvaWQgUmVzb3VyY2VMb2FkU2No
ZWR1bGVyOjpIb3N0SW5mb3JtYXRpb246OmFkZExvYWRJblByb2dyZXNzKFJlc291cmNlTG9hZGVy
KiByZXNvdXJjZUxvYWRlcikKK3sKKyAgICBMT0coUmVzb3VyY2VMb2FkaW5nLCAiSG9zdEluZm9y
bWF0aW9uICclcycgbG9hZGluZyAnJXMnLiBDdXJyZW50IGNvdW50ICVkIiwgbV9uYW1lLmxhdGlu
MSgpLmRhdGEoKSwgcmVzb3VyY2VMb2FkZXItPnVybCgpLnN0cmluZygpLmxhdGluMSgpLmRhdGEo
KSwgbV9yZXF1ZXN0c0xvYWRpbmcuc2l6ZSgpKTsKKyAgICBtX3JlcXVlc3RzTG9hZGluZy5hZGQo
cmVzb3VyY2VMb2FkZXIpOworfQorICAgIAordm9pZCBSZXNvdXJjZUxvYWRTY2hlZHVsZXI6Okhv
c3RJbmZvcm1hdGlvbjo6cmVtb3ZlKFJlc291cmNlTG9hZGVyKiByZXNvdXJjZUxvYWRlcikKK3sK
KyAgICBpZiAobV9yZXF1ZXN0c0xvYWRpbmcucmVtb3ZlKHJlc291cmNlTG9hZGVyKSkKKyAgICAg
ICAgcmV0dXJuOworICAgIAorICAgIGZvciAoYXV0byYgcmVxdWVzdFF1ZXVlIDogbV9yZXF1ZXN0
c1BlbmRpbmcpIHsKKyAgICAgICAgZm9yIChhdXRvIGl0ID0gcmVxdWVzdFF1ZXVlLmJlZ2luKCks
IGVuZCA9IHJlcXVlc3RRdWV1ZS5lbmQoKTsgaXQgIT0gZW5kOyArK2l0KSB7CisgICAgICAgICAg
ICBpZiAoKml0ID09IHJlc291cmNlTG9hZGVyKSB7CisgICAgICAgICAgICAgICAgcmVxdWVzdFF1
ZXVlLnJlbW92ZShpdCk7CisgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgfQor
ICAgICAgICB9CisgICAgfQorfQorCitib29sIFJlc291cmNlTG9hZFNjaGVkdWxlcjo6SG9zdElu
Zm9ybWF0aW9uOjpoYXNSZXF1ZXN0cygpIGNvbnN0Cit7CisgICAgaWYgKCFtX3JlcXVlc3RzTG9h
ZGluZy5pc0VtcHR5KCkpCisgICAgICAgIHJldHVybiB0cnVlOworICAgIGZvciAoYXV0byYgcmVx
dWVzdFF1ZXVlIDogbV9yZXF1ZXN0c1BlbmRpbmcpIHsKKyAgICAgICAgaWYgKCFyZXF1ZXN0UXVl
dWUuaXNFbXB0eSgpKQorICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgfQorICAgIHJldHVy
biBmYWxzZTsKK30KKworYm9vbCBSZXNvdXJjZUxvYWRTY2hlZHVsZXI6Okhvc3RJbmZvcm1hdGlv
bjo6bGltaXRSZXF1ZXN0cyhSZXNvdXJjZUxvYWRQcmlvcml0eSBwcmlvcml0eSkgY29uc3QgCit7
CisgICAgaWYgKHByaW9yaXR5ID09IFJlc291cmNlTG9hZFByaW9yaXR5OjpWZXJ5TG93ICYmICFt
X3JlcXVlc3RzTG9hZGluZy5pc0VtcHR5KCkpCisgICAgICAgIHJldHVybiB0cnVlOworICAgIHJl
dHVybiBtX3JlcXVlc3RzTG9hZGluZy5zaXplKCkgPj0gKHJlc291cmNlTG9hZFNjaGVkdWxlcigp
LT5pc1NlcmlhbExvYWRpbmdFbmFibGVkKCkgPyAxIDogbV9tYXhSZXF1ZXN0c0luRmxpZ2h0KTsK
K30KKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpJbmRleDogU291cmNlL1dlYktpdC9XZWJDb3Jl
U3VwcG9ydC9XZWJSZXNvdXJjZUxvYWRTY2hlZHVsZXIuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9XZWJLaXQvV2ViQ29yZVN1cHBvcnQvV2ViUmVzb3VyY2VMb2FkU2NoZWR1bGVyLmNwcAkod29y
a2luZyBjb3B5KQorKysgU291cmNlL1dlYktpdC9XZWJDb3JlU3VwcG9ydC9XZWJSZXNvdXJjZUxv
YWRTY2hlZHVsZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zLDcgKzMsNyBAQAogICAgIENvcHly
aWdodCAoQykgMjAwMSBEaXJrIE11ZWxsZXIgKG11ZWxsZXJAa2RlLm9yZykKICAgICBDb3B5cmln
aHQgKEMpIDIwMDIgV2FsZG8gQmFzdGlhbiAoYmFzdGlhbkBrZGUub3JnKQogICAgIENvcHlyaWdo
dCAoQykgMjAwNiBTYW11ZWwgV2VpbmlnIChzYW0ud2VpbmlnQGdtYWlsLmNvbSkKLSAgICBDb3B5
cmlnaHQgKEMpIDIwMDQsIDIwMDUsIDIwMDYsIDIwMDcsIDIwMDggQXBwbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgorICAgIENvcHlyaWdodCAoQykgMjAwNC0yMDA4LCAyMDE1IEFwcGxlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAgICBDb3B5cmlnaHQgKEMpIDIwMTAgR29vZ2xlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KIAogICAgIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3
YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKQEAgLTIyLDM1ICsyMiwzMiBAQAog
ICAgIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgogICovCiAKLSNpbmNsdWRlICJjb25maWcu
aCIKLSNpbmNsdWRlICJSZXNvdXJjZUxvYWRTY2hlZHVsZXIuaCIKKyNpbmNsdWRlICJXZWJSZXNv
dXJjZUxvYWRTY2hlZHVsZXIuaCIKIAotI2luY2x1ZGUgIkRvY3VtZW50LmgiCi0jaW5jbHVkZSAi
RG9jdW1lbnRMb2FkZXIuaCIKLSNpbmNsdWRlICJGcmFtZS5oIgotI2luY2x1ZGUgIkZyYW1lTG9h
ZGVyLmgiCi0jaW5jbHVkZSAiTG9hZGVyU3RyYXRlZ3kuaCIKLSNpbmNsdWRlICJMb2dnaW5nLmgi
Ci0jaW5jbHVkZSAiTmV0c2NhcGVQbHVnSW5TdHJlYW1Mb2FkZXIuaCIKLSNpbmNsdWRlICJQbGF0
Zm9ybVN0cmF0ZWdpZXMuaCIKLSNpbmNsdWRlICJSZXNvdXJjZUxvYWRlci5oIgotI2luY2x1ZGUg
IlJlc291cmNlUmVxdWVzdC5oIgotI2luY2x1ZGUgIlN1YnJlc291cmNlTG9hZGVyLmgiCi0jaW5j
bHVkZSAiVVJMLmgiCisjaW5jbHVkZSA8V2ViQ29yZS9Eb2N1bWVudC5oPgorI2luY2x1ZGUgPFdl
YkNvcmUvRG9jdW1lbnRMb2FkZXIuaD4KKyNpbmNsdWRlIDxXZWJDb3JlL0ZyYW1lLmg+CisjaW5j
bHVkZSA8V2ViQ29yZS9GcmFtZUxvYWRlci5oPgorI2luY2x1ZGUgPFdlYkNvcmUvTG9nZ2luZy5o
PgorI2luY2x1ZGUgPFdlYkNvcmUvTmV0c2NhcGVQbHVnSW5TdHJlYW1Mb2FkZXIuaD4KKyNpbmNs
dWRlIDxXZWJDb3JlL1BpbmdIYW5kbGUuaD4KKyNpbmNsdWRlIDxXZWJDb3JlL1BsYXRmb3JtU3Ry
YXRlZ2llcy5oPgorI2luY2x1ZGUgPFdlYkNvcmUvUmVzb3VyY2VIYW5kbGUuaD4KKyNpbmNsdWRl
IDxXZWJDb3JlL1Jlc291cmNlUmVxdWVzdC5oPgorI2luY2x1ZGUgPFdlYkNvcmUvU3VicmVzb3Vy
Y2VMb2FkZXIuaD4KKyNpbmNsdWRlIDxXZWJDb3JlL1VSTC5oPgogI2luY2x1ZGUgPHd0Zi9NYWlu
VGhyZWFkLmg+CiAjaW5jbHVkZSA8d3RmL1RlbXBvcmFyeUNoYW5nZS5oPgogI2luY2x1ZGUgPHd0
Zi90ZXh0L0NTdHJpbmcuaD4KIAogI2lmIFBMQVRGT1JNKElPUykKLSNpbmNsdWRlIDxSdW50aW1l
QXBwbGljYXRpb25DaGVja3NJT1MuaD4KKyNpbmNsdWRlIDxXZWJDb3JlL1J1bnRpbWVBcHBsaWNh
dGlvbkNoZWNrc0lPUy5oPgogI2VuZGlmCiAKICNpZiBVU0UoUVVJQ0tfTE9PSykKLSNpbmNsdWRl
ICJRdWlja0xvb2suaCIKKyNpbmNsdWRlIDxXZWJDb3JlL1F1aWNrTG9vay5oPgogI2VuZGlmCiAK
LW5hbWVzcGFjZSBXZWJDb3JlIHsKLQogLy8gTWF0Y2ggdGhlIHBhcmFsbGVsIGNvbm5lY3Rpb24g
Y291bnQgdXNlZCBieSB0aGUgbmV0d29ya2luZyBsYXllci4KIHN0YXRpYyB1bnNpZ25lZCBtYXhS
ZXF1ZXN0c0luRmxpZ2h0UGVySG9zdDsKICNpZiAhUExBVEZPUk0oSU9TKQpAQCAtNjAsNyArNTcs
MTQgQEAgc3RhdGljIGNvbnN0IHVuc2lnbmVkIG1heFJlcXVlc3RzSW5GbGlnaAogc3RhdGljIGNv
bnN0IHVuc2lnbmVkIG1heFJlcXVlc3RzSW5GbGlnaHRGb3JOb25IVFRQUHJvdG9jb2xzID0gMTAw
MDA7CiAjZW5kaWYKIAotUmVzb3VyY2VMb2FkU2NoZWR1bGVyOjpIb3N0SW5mb3JtYXRpb24qIFJl
c291cmNlTG9hZFNjaGVkdWxlcjo6aG9zdEZvclVSTChjb25zdCBVUkwmIHVybCwgQ3JlYXRlSG9z
dFBvbGljeSBjcmVhdGVIb3N0UG9saWN5KQordXNpbmcgbmFtZXNwYWNlIFdlYkNvcmU7CisKK1dl
YlJlc291cmNlTG9hZFNjaGVkdWxlciYgd2ViUmVzb3VyY2VMb2FkU2NoZWR1bGVyKCkKK3sKKyAg
ICByZXR1cm4gc3RhdGljX2Nhc3Q8V2ViUmVzb3VyY2VMb2FkU2NoZWR1bGVyJj4oKnBsYXRmb3Jt
U3RyYXRlZ2llcygpLT5sb2FkZXJTdHJhdGVneSgpKTsKK30KKworV2ViUmVzb3VyY2VMb2FkU2No
ZWR1bGVyOjpIb3N0SW5mb3JtYXRpb24qIFdlYlJlc291cmNlTG9hZFNjaGVkdWxlcjo6aG9zdEZv
clVSTChjb25zdCBVUkwmIHVybCwgQ3JlYXRlSG9zdFBvbGljeSBjcmVhdGVIb3N0UG9saWN5KQog
ewogICAgIGlmICghdXJsLnByb3RvY29sSXNJbkhUVFBGYW1pbHkoKSkKICAgICAgICAgcmV0dXJu
IG1fbm9uSFRUUFByb3RvY29sSG9zdDsKQEAgLTc1LDQzICs3OSwyMCBAQCBSZXNvdXJjZUxvYWRT
Y2hlZHVsZXI6Okhvc3RJbmZvcm1hdGlvbiogCiAgICAgcmV0dXJuIGhvc3Q7CiB9CiAKLVJlc291
cmNlTG9hZFNjaGVkdWxlciogcmVzb3VyY2VMb2FkU2NoZWR1bGVyKCkKLXsKLSAgICBBU1NFUlQo
aXNNYWluVGhyZWFkKCkpOwotICAgIHN0YXRpYyBSZXNvdXJjZUxvYWRTY2hlZHVsZXIqIGdsb2Jh
bFNjaGVkdWxlciA9IG51bGxwdHI7Ci0gICAgCi0gICAgaWYgKCFnbG9iYWxTY2hlZHVsZXIpIHsK
LSAgICAgICAgc3RhdGljIGJvb2wgaXNDYWxsaW5nT3V0VG9TdHJhdGVneSA9IGZhbHNlOwotICAg
ICAgICAKLSAgICAgICAgLy8gSWYgd2UncmUgcmUtZW50ZXJpbmcgcmVzb3VyY2VMb2FkU2NoZWR1
bGVyKCkgd2hpbGUgY2FsbGluZyBvdXQgdG8gdGhlIExvYWRlclN0cmF0ZWd5LAotICAgICAgICAv
LyB0aGVuIHRoZSBMb2FkZXJTdHJhdGVneSBpcyB0cnlpbmcgdG8gdXNlIHRoZSBkZWZhdWx0IHJl
c291cmNlTG9hZFNjaGVkdWxlci4KLSAgICAgICAgLy8gU28gd2UnbGwgY3JlYXRlIGl0IGhlcmUg
YW5kIHN0YXJ0IHVzaW5nIGl0LgotICAgICAgICBpZiAoaXNDYWxsaW5nT3V0VG9TdHJhdGVneSkg
ewotICAgICAgICAgICAgZ2xvYmFsU2NoZWR1bGVyID0gbmV3IFJlc291cmNlTG9hZFNjaGVkdWxl
cjsKLSAgICAgICAgICAgIHJldHVybiBnbG9iYWxTY2hlZHVsZXI7Ci0gICAgICAgIH0KLSAgICAg
ICAgCi0gICAgICAgIFRlbXBvcmFyeUNoYW5nZTxib29sPiByZWN1cnNpb25HdWFyZChpc0NhbGxp
bmdPdXRUb1N0cmF0ZWd5LCB0cnVlKTsKLSAgICAgICAgZ2xvYmFsU2NoZWR1bGVyID0gcGxhdGZv
cm1TdHJhdGVnaWVzKCktPmxvYWRlclN0cmF0ZWd5KCktPnJlc291cmNlTG9hZFNjaGVkdWxlcigp
OwotICAgIH0KLQotICAgIHJldHVybiBnbG9iYWxTY2hlZHVsZXI7Ci19Ci0KLVJlc291cmNlTG9h
ZFNjaGVkdWxlcjo6UmVzb3VyY2VMb2FkU2NoZWR1bGVyKCkKK1dlYlJlc291cmNlTG9hZFNjaGVk
dWxlcjo6V2ViUmVzb3VyY2VMb2FkU2NoZWR1bGVyKCkKICAgICA6IG1fbm9uSFRUUFByb3RvY29s
SG9zdChuZXcgSG9zdEluZm9ybWF0aW9uKFN0cmluZygpLCBtYXhSZXF1ZXN0c0luRmxpZ2h0Rm9y
Tm9uSFRUUFByb3RvY29scykpCi0gICAgLCBtX3JlcXVlc3RUaW1lcigqdGhpcywgJlJlc291cmNl
TG9hZFNjaGVkdWxlcjo6cmVxdWVzdFRpbWVyRmlyZWQpCisgICAgLCBtX3JlcXVlc3RUaW1lcigq
dGhpcywgJldlYlJlc291cmNlTG9hZFNjaGVkdWxlcjo6cmVxdWVzdFRpbWVyRmlyZWQpCiAgICAg
LCBtX3N1c3BlbmRQZW5kaW5nUmVxdWVzdHNDb3VudCgwKQogICAgICwgbV9pc1NlcmlhbExvYWRp
bmdFbmFibGVkKGZhbHNlKQogewogICAgIG1heFJlcXVlc3RzSW5GbGlnaHRQZXJIb3N0ID0gaW5p
dGlhbGl6ZU1heGltdW1IVFRQQ29ubmVjdGlvbkNvdW50UGVySG9zdCgpOwogfQogCi1SZXNvdXJj
ZUxvYWRTY2hlZHVsZXI6On5SZXNvdXJjZUxvYWRTY2hlZHVsZXIoKQorV2ViUmVzb3VyY2VMb2Fk
U2NoZWR1bGVyOjp+V2ViUmVzb3VyY2VMb2FkU2NoZWR1bGVyKCkKIHsKIH0KIAotUmVmUHRyPFN1
YnJlc291cmNlTG9hZGVyPiBSZXNvdXJjZUxvYWRTY2hlZHVsZXI6OnNjaGVkdWxlU3VicmVzb3Vy
Y2VMb2FkKEZyYW1lKiBmcmFtZSwgQ2FjaGVkUmVzb3VyY2UqIHJlc291cmNlLCBjb25zdCBSZXNv
dXJjZVJlcXVlc3QmIHJlcXVlc3QsIGNvbnN0IFJlc291cmNlTG9hZGVyT3B0aW9ucyYgb3B0aW9u
cykKK1JlZlB0cjxTdWJyZXNvdXJjZUxvYWRlcj4gV2ViUmVzb3VyY2VMb2FkU2NoZWR1bGVyOjps
b2FkUmVzb3VyY2UoRnJhbWUqIGZyYW1lLCBDYWNoZWRSZXNvdXJjZSogcmVzb3VyY2UsIGNvbnN0
IFJlc291cmNlUmVxdWVzdCYgcmVxdWVzdCwgY29uc3QgUmVzb3VyY2VMb2FkZXJPcHRpb25zJiBv
cHRpb25zKQogewogICAgIFJlZlB0cjxTdWJyZXNvdXJjZUxvYWRlcj4gbG9hZGVyID0gU3VicmVz
b3VyY2VMb2FkZXI6OmNyZWF0ZShmcmFtZSwgcmVzb3VyY2UsIHJlcXVlc3QsIG9wdGlvbnMpOwog
ICAgIGlmIChsb2FkZXIpCkBAIC0xMjgsNyArMTA5LDEyIEBAIFJlZlB0cjxTdWJyZXNvdXJjZUxv
YWRlcj4gUmVzb3VyY2VMb2FkU2MKICAgICByZXR1cm4gbG9hZGVyOwogfQogCi1SZWZQdHI8TmV0
c2NhcGVQbHVnSW5TdHJlYW1Mb2FkZXI+IFJlc291cmNlTG9hZFNjaGVkdWxlcjo6c2NoZWR1bGVQ
bHVnaW5TdHJlYW1Mb2FkKEZyYW1lKiBmcmFtZSwgTmV0c2NhcGVQbHVnSW5TdHJlYW1Mb2FkZXJD
bGllbnQqIGNsaWVudCwgY29uc3QgUmVzb3VyY2VSZXF1ZXN0JiByZXF1ZXN0KQordm9pZCBXZWJS
ZXNvdXJjZUxvYWRTY2hlZHVsZXI6OmxvYWRSZXNvdXJjZVN5bmNocm9ub3VzbHkoTmV0d29ya2lu
Z0NvbnRleHQqIGNvbnRleHQsIHVuc2lnbmVkIGxvbmcsIGNvbnN0IFJlc291cmNlUmVxdWVzdCYg
cmVxdWVzdCwgU3RvcmVkQ3JlZGVudGlhbHMgc3RvcmVkQ3JlZGVudGlhbHMsIENsaWVudENyZWRl
bnRpYWxQb2xpY3ksIFJlc291cmNlRXJyb3ImIGVycm9yLCBSZXNvdXJjZVJlc3BvbnNlJiByZXNw
b25zZSwgVmVjdG9yPGNoYXI+JiBkYXRhKQoreworICAgIFJlc291cmNlSGFuZGxlOjpsb2FkUmVz
b3VyY2VTeW5jaHJvbm91c2x5KGNvbnRleHQsIHJlcXVlc3QsIHN0b3JlZENyZWRlbnRpYWxzLCBl
cnJvciwgcmVzcG9uc2UsIGRhdGEpOworfQorCitSZWZQdHI8TmV0c2NhcGVQbHVnSW5TdHJlYW1M
b2FkZXI+IFdlYlJlc291cmNlTG9hZFNjaGVkdWxlcjo6c2NoZWR1bGVQbHVnaW5TdHJlYW1Mb2Fk
KEZyYW1lKiBmcmFtZSwgTmV0c2NhcGVQbHVnSW5TdHJlYW1Mb2FkZXJDbGllbnQqIGNsaWVudCwg
Y29uc3QgUmVzb3VyY2VSZXF1ZXN0JiByZXF1ZXN0KQogewogICAgIFJlZlB0cjxOZXRzY2FwZVBs
dWdJblN0cmVhbUxvYWRlcj4gbG9hZGVyID0gTmV0c2NhcGVQbHVnSW5TdHJlYW1Mb2FkZXI6OmNy
ZWF0ZShmcmFtZSwgY2xpZW50LCByZXF1ZXN0KTsKICAgICBpZiAobG9hZGVyKQpAQCAtMTM2LDEx
ICsxMjIsMTEgQEAgUmVmUHRyPE5ldHNjYXBlUGx1Z0luU3RyZWFtTG9hZGVyPiBSZXNvdQogICAg
IHJldHVybiBsb2FkZXI7CiB9CiAKLXZvaWQgUmVzb3VyY2VMb2FkU2NoZWR1bGVyOjpzY2hlZHVs
ZUxvYWQoUmVzb3VyY2VMb2FkZXIqIHJlc291cmNlTG9hZGVyKQordm9pZCBXZWJSZXNvdXJjZUxv
YWRTY2hlZHVsZXI6OnNjaGVkdWxlTG9hZChSZXNvdXJjZUxvYWRlciogcmVzb3VyY2VMb2FkZXIp
CiB7CiAgICAgQVNTRVJUKHJlc291cmNlTG9hZGVyKTsKIAotICAgIExPRyhSZXNvdXJjZUxvYWRp
bmcsICJSZXNvdXJjZUxvYWRTY2hlZHVsZXI6OmxvYWQgcmVzb3VyY2UgJXAgJyVzJyIsIHJlc291
cmNlTG9hZGVyLCByZXNvdXJjZUxvYWRlci0+dXJsKCkuc3RyaW5nKCkubGF0aW4xKCkuZGF0YSgp
KTsKKyAgICBMT0coUmVzb3VyY2VMb2FkaW5nLCAiV2ViUmVzb3VyY2VMb2FkU2NoZWR1bGVyOjps
b2FkIHJlc291cmNlICVwICclcyciLCByZXNvdXJjZUxvYWRlciwgcmVzb3VyY2VMb2FkZXItPnVy
bCgpLnN0cmluZygpLmxhdGluMSgpLmRhdGEoKSk7CiAKICNpZiBQTEFURk9STShJT1MpCiAgICAg
Ly8gSWYgdGhlcmUncyBhIHdlYiBhcmNoaXZlIHJlc291cmNlIGZvciB0aGlzIFVSTCwgd2UgZG9u
J3QgbmVlZCB0byBzY2hlZHVsZSB0aGUgbG9hZCBzaW5jZSBpdCB3aWxsIG5ldmVyIHRvdWNoIHRo
ZSBuZXR3b3JrLgpAQCAtMTk0LDcgKzE4MCw3IEBAIHZvaWQgUmVzb3VyY2VMb2FkU2NoZWR1bGVy
OjpzY2hlZHVsZUxvYWQKICAgICBzY2hlZHVsZVNlcnZlUGVuZGluZ1JlcXVlc3RzKCk7CiB9CiAK
LXZvaWQgUmVzb3VyY2VMb2FkU2NoZWR1bGVyOjpyZW1vdmUoUmVzb3VyY2VMb2FkZXIqIHJlc291
cmNlTG9hZGVyKQordm9pZCBXZWJSZXNvdXJjZUxvYWRTY2hlZHVsZXI6OnJlbW92ZShSZXNvdXJj
ZUxvYWRlciogcmVzb3VyY2VMb2FkZXIpCiB7CiAgICAgQVNTRVJUKHJlc291cmNlTG9hZGVyKTsK
IApAQCAtMjEzLDExICsxOTksMTEgQEAgdm9pZCBSZXNvdXJjZUxvYWRTY2hlZHVsZXI6OnJlbW92
ZShSZXNvdQogICAgIHNjaGVkdWxlU2VydmVQZW5kaW5nUmVxdWVzdHMoKTsKIH0KIAotdm9pZCBS
ZXNvdXJjZUxvYWRTY2hlZHVsZXI6OnNldERlZmVyc0xvYWRpbmcoUmVzb3VyY2VMb2FkZXIqLCBi
b29sKQordm9pZCBXZWJSZXNvdXJjZUxvYWRTY2hlZHVsZXI6OnNldERlZmVyc0xvYWRpbmcoUmVz
b3VyY2VMb2FkZXIqLCBib29sKQogewogfQogCi12b2lkIFJlc291cmNlTG9hZFNjaGVkdWxlcjo6
Y3Jvc3NPcmlnaW5SZWRpcmVjdFJlY2VpdmVkKFJlc291cmNlTG9hZGVyKiByZXNvdXJjZUxvYWRl
ciwgY29uc3QgVVJMJiByZWRpcmVjdFVSTCkKK3ZvaWQgV2ViUmVzb3VyY2VMb2FkU2NoZWR1bGVy
Ojpjcm9zc09yaWdpblJlZGlyZWN0UmVjZWl2ZWQoUmVzb3VyY2VMb2FkZXIqIHJlc291cmNlTG9h
ZGVyLCBjb25zdCBVUkwmIHJlZGlyZWN0VVJMKQogewogICAgIEhvc3RJbmZvcm1hdGlvbiogb2xk
SG9zdCA9IGhvc3RGb3JVUkwocmVzb3VyY2VMb2FkZXItPnVybCgpKTsKICAgICBBU1NFUlQob2xk
SG9zdCk7CkBAIC0yMzMsOSArMjE5LDkgQEAgdm9pZCBSZXNvdXJjZUxvYWRTY2hlZHVsZXI6OmNy
b3NzT3JpZ2luUgogICAgIG9sZEhvc3QtPnJlbW92ZShyZXNvdXJjZUxvYWRlcik7CiB9CiAKLXZv
aWQgUmVzb3VyY2VMb2FkU2NoZWR1bGVyOjpzZXJ2ZVBlbmRpbmdSZXF1ZXN0cyhSZXNvdXJjZUxv
YWRQcmlvcml0eSBtaW5pbXVtUHJpb3JpdHkpCit2b2lkIFdlYlJlc291cmNlTG9hZFNjaGVkdWxl
cjo6c2VydmVQZW5kaW5nUmVxdWVzdHMoUmVzb3VyY2VMb2FkUHJpb3JpdHkgbWluaW11bVByaW9y
aXR5KQogewotICAgIExPRyhSZXNvdXJjZUxvYWRpbmcsICJSZXNvdXJjZUxvYWRTY2hlZHVsZXI6
OnNlcnZlUGVuZGluZ1JlcXVlc3RzLiBtX3N1c3BlbmRQZW5kaW5nUmVxdWVzdHNDb3VudD0lZCIs
IG1fc3VzcGVuZFBlbmRpbmdSZXF1ZXN0c0NvdW50KTsgCisgICAgTE9HKFJlc291cmNlTG9hZGlu
ZywgIldlYlJlc291cmNlTG9hZFNjaGVkdWxlcjo6c2VydmVQZW5kaW5nUmVxdWVzdHMuIG1fc3Vz
cGVuZFBlbmRpbmdSZXF1ZXN0c0NvdW50PSVkIiwgbV9zdXNwZW5kUGVuZGluZ1JlcXVlc3RzQ291
bnQpOyAKICAgICBpZiAoaXNTdXNwZW5kaW5nUGVuZGluZ1JlcXVlc3RzKCkpCiAgICAgICAgIHJl
dHVybjsKIApAQCAtMjU0LDkgKzI0MCw5IEBAIHZvaWQgUmVzb3VyY2VMb2FkU2NoZWR1bGVyOjpz
ZXJ2ZVBlbmRpbmcKICAgICB9CiB9CiAKLXZvaWQgUmVzb3VyY2VMb2FkU2NoZWR1bGVyOjpzZXJ2
ZVBlbmRpbmdSZXF1ZXN0cyhIb3N0SW5mb3JtYXRpb24qIGhvc3QsIFJlc291cmNlTG9hZFByaW9y
aXR5IG1pbmltdW1Qcmlvcml0eSkKK3ZvaWQgV2ViUmVzb3VyY2VMb2FkU2NoZWR1bGVyOjpzZXJ2
ZVBlbmRpbmdSZXF1ZXN0cyhIb3N0SW5mb3JtYXRpb24qIGhvc3QsIFJlc291cmNlTG9hZFByaW9y
aXR5IG1pbmltdW1Qcmlvcml0eSkKIHsKLSAgICBMT0coUmVzb3VyY2VMb2FkaW5nLCAiUmVzb3Vy
Y2VMb2FkU2NoZWR1bGVyOjpzZXJ2ZVBlbmRpbmdSZXF1ZXN0cyBIb3N0SW5mb3JtYXRpb24ubV9u
YW1lPSclcyciLCBob3N0LT5uYW1lKCkubGF0aW4xKCkuZGF0YSgpKTsKKyAgICBMT0coUmVzb3Vy
Y2VMb2FkaW5nLCAiV2ViUmVzb3VyY2VMb2FkU2NoZWR1bGVyOjpzZXJ2ZVBlbmRpbmdSZXF1ZXN0
cyBIb3N0SW5mb3JtYXRpb24ubV9uYW1lPSclcyciLCBob3N0LT5uYW1lKCkubGF0aW4xKCkuZGF0
YSgpKTsKIAogICAgIGF1dG8gcHJpb3JpdHkgPSBSZXNvdXJjZUxvYWRQcmlvcml0eTo6SGlnaGVz
dDsKICAgICB3aGlsZSAodHJ1ZSkgewpAQCAtMjg4LDEyICsyNzQsMTIgQEAgdm9pZCBSZXNvdXJj
ZUxvYWRTY2hlZHVsZXI6OnNlcnZlUGVuZGluZwogICAgIH0KIH0KIAotdm9pZCBSZXNvdXJjZUxv
YWRTY2hlZHVsZXI6OnN1c3BlbmRQZW5kaW5nUmVxdWVzdHMoKQordm9pZCBXZWJSZXNvdXJjZUxv
YWRTY2hlZHVsZXI6OnN1c3BlbmRQZW5kaW5nUmVxdWVzdHMoKQogewogICAgICsrbV9zdXNwZW5k
UGVuZGluZ1JlcXVlc3RzQ291bnQ7CiB9CiAKLXZvaWQgUmVzb3VyY2VMb2FkU2NoZWR1bGVyOjpy
ZXN1bWVQZW5kaW5nUmVxdWVzdHMoKQordm9pZCBXZWJSZXNvdXJjZUxvYWRTY2hlZHVsZXI6OnJl
c3VtZVBlbmRpbmdSZXF1ZXN0cygpCiB7CiAgICAgQVNTRVJUKG1fc3VzcGVuZFBlbmRpbmdSZXF1
ZXN0c0NvdW50KTsKICAgICAtLW1fc3VzcGVuZFBlbmRpbmdSZXF1ZXN0c0NvdW50OwpAQCAtMzAz
LDMxICsyODksMzEgQEAgdm9pZCBSZXNvdXJjZUxvYWRTY2hlZHVsZXI6OnJlc3VtZVBlbmRpbgog
ICAgICAgICBzY2hlZHVsZVNlcnZlUGVuZGluZ1JlcXVlc3RzKCk7CiB9CiAgICAgCi12b2lkIFJl
c291cmNlTG9hZFNjaGVkdWxlcjo6c2NoZWR1bGVTZXJ2ZVBlbmRpbmdSZXF1ZXN0cygpCit2b2lk
IFdlYlJlc291cmNlTG9hZFNjaGVkdWxlcjo6c2NoZWR1bGVTZXJ2ZVBlbmRpbmdSZXF1ZXN0cygp
CiB7Ci0gICAgTE9HKFJlc291cmNlTG9hZGluZywgIlJlc291cmNlTG9hZFNjaGVkdWxlcjo6c2No
ZWR1bGVTZXJ2ZVBlbmRpbmdSZXF1ZXN0cywgbV9yZXF1ZXN0VGltZXIuaXNBY3RpdmUoKT0ldSIs
IG1fcmVxdWVzdFRpbWVyLmlzQWN0aXZlKCkpOworICAgIExPRyhSZXNvdXJjZUxvYWRpbmcsICJX
ZWJSZXNvdXJjZUxvYWRTY2hlZHVsZXI6OnNjaGVkdWxlU2VydmVQZW5kaW5nUmVxdWVzdHMsIG1f
cmVxdWVzdFRpbWVyLmlzQWN0aXZlKCk9JXUiLCBtX3JlcXVlc3RUaW1lci5pc0FjdGl2ZSgpKTsK
ICAgICBpZiAoIW1fcmVxdWVzdFRpbWVyLmlzQWN0aXZlKCkpCiAgICAgICAgIG1fcmVxdWVzdFRp
bWVyLnN0YXJ0T25lU2hvdCgwKTsKIH0KIAotdm9pZCBSZXNvdXJjZUxvYWRTY2hlZHVsZXI6OnJl
cXVlc3RUaW1lckZpcmVkKCkKK3ZvaWQgV2ViUmVzb3VyY2VMb2FkU2NoZWR1bGVyOjpyZXF1ZXN0
VGltZXJGaXJlZCgpCiB7Ci0gICAgTE9HKFJlc291cmNlTG9hZGluZywgIlJlc291cmNlTG9hZFNj
aGVkdWxlcjo6cmVxdWVzdFRpbWVyRmlyZWRcbiIpOworICAgIExPRyhSZXNvdXJjZUxvYWRpbmcs
ICJXZWJSZXNvdXJjZUxvYWRTY2hlZHVsZXI6OnJlcXVlc3RUaW1lckZpcmVkXG4iKTsKICAgICBz
ZXJ2ZVBlbmRpbmdSZXF1ZXN0cygpOwogfQogCi1SZXNvdXJjZUxvYWRTY2hlZHVsZXI6Okhvc3RJ
bmZvcm1hdGlvbjo6SG9zdEluZm9ybWF0aW9uKGNvbnN0IFN0cmluZyYgbmFtZSwgdW5zaWduZWQg
bWF4UmVxdWVzdHNJbkZsaWdodCkKK1dlYlJlc291cmNlTG9hZFNjaGVkdWxlcjo6SG9zdEluZm9y
bWF0aW9uOjpIb3N0SW5mb3JtYXRpb24oY29uc3QgU3RyaW5nJiBuYW1lLCB1bnNpZ25lZCBtYXhS
ZXF1ZXN0c0luRmxpZ2h0KQogICAgIDogbV9uYW1lKG5hbWUpCiAgICAgLCBtX21heFJlcXVlc3Rz
SW5GbGlnaHQobWF4UmVxdWVzdHNJbkZsaWdodCkKIHsKIH0KIAotUmVzb3VyY2VMb2FkU2NoZWR1
bGVyOjpIb3N0SW5mb3JtYXRpb246On5Ib3N0SW5mb3JtYXRpb24oKQorV2ViUmVzb3VyY2VMb2Fk
U2NoZWR1bGVyOjpIb3N0SW5mb3JtYXRpb246On5Ib3N0SW5mb3JtYXRpb24oKQogewogICAgIEFT
U0VSVCghaGFzUmVxdWVzdHMoKSk7CiB9CiAKLXVuc2lnbmVkIFJlc291cmNlTG9hZFNjaGVkdWxl
cjo6SG9zdEluZm9ybWF0aW9uOjpwcmlvcml0eVRvSW5kZXgoUmVzb3VyY2VMb2FkUHJpb3JpdHkg
cHJpb3JpdHkpCit1bnNpZ25lZCBXZWJSZXNvdXJjZUxvYWRTY2hlZHVsZXI6Okhvc3RJbmZvcm1h
dGlvbjo6cHJpb3JpdHlUb0luZGV4KFJlc291cmNlTG9hZFByaW9yaXR5IHByaW9yaXR5KQogewog
ICAgIHN3aXRjaCAocHJpb3JpdHkpIHsKICAgICBjYXNlIFJlc291cmNlTG9hZFByaW9yaXR5OjpW
ZXJ5TG93OgpAQCAtMzQ1LDE4ICszMzEsMTggQEAgdW5zaWduZWQgUmVzb3VyY2VMb2FkU2NoZWR1
bGVyOjpIb3N0SW5mbwogICAgIHJldHVybiAwOwogfQogCi12b2lkIFJlc291cmNlTG9hZFNjaGVk
dWxlcjo6SG9zdEluZm9ybWF0aW9uOjpzY2hlZHVsZShSZXNvdXJjZUxvYWRlciogcmVzb3VyY2VM
b2FkZXIsIFJlc291cmNlTG9hZFByaW9yaXR5IHByaW9yaXR5KQordm9pZCBXZWJSZXNvdXJjZUxv
YWRTY2hlZHVsZXI6Okhvc3RJbmZvcm1hdGlvbjo6c2NoZWR1bGUoUmVzb3VyY2VMb2FkZXIqIHJl
c291cmNlTG9hZGVyLCBSZXNvdXJjZUxvYWRQcmlvcml0eSBwcmlvcml0eSkKIHsKICAgICBtX3Jl
cXVlc3RzUGVuZGluZ1twcmlvcml0eVRvSW5kZXgocHJpb3JpdHkpXS5hcHBlbmQocmVzb3VyY2VM
b2FkZXIpOwogfQogICAgIAotdm9pZCBSZXNvdXJjZUxvYWRTY2hlZHVsZXI6Okhvc3RJbmZvcm1h
dGlvbjo6YWRkTG9hZEluUHJvZ3Jlc3MoUmVzb3VyY2VMb2FkZXIqIHJlc291cmNlTG9hZGVyKQor
dm9pZCBXZWJSZXNvdXJjZUxvYWRTY2hlZHVsZXI6Okhvc3RJbmZvcm1hdGlvbjo6YWRkTG9hZElu
UHJvZ3Jlc3MoUmVzb3VyY2VMb2FkZXIqIHJlc291cmNlTG9hZGVyKQogewogICAgIExPRyhSZXNv
dXJjZUxvYWRpbmcsICJIb3N0SW5mb3JtYXRpb24gJyVzJyBsb2FkaW5nICclcycuIEN1cnJlbnQg
Y291bnQgJWQiLCBtX25hbWUubGF0aW4xKCkuZGF0YSgpLCByZXNvdXJjZUxvYWRlci0+dXJsKCku
c3RyaW5nKCkubGF0aW4xKCkuZGF0YSgpLCBtX3JlcXVlc3RzTG9hZGluZy5zaXplKCkpOwogICAg
IG1fcmVxdWVzdHNMb2FkaW5nLmFkZChyZXNvdXJjZUxvYWRlcik7CiB9CiAgICAgCi12b2lkIFJl
c291cmNlTG9hZFNjaGVkdWxlcjo6SG9zdEluZm9ybWF0aW9uOjpyZW1vdmUoUmVzb3VyY2VMb2Fk
ZXIqIHJlc291cmNlTG9hZGVyKQordm9pZCBXZWJSZXNvdXJjZUxvYWRTY2hlZHVsZXI6Okhvc3RJ
bmZvcm1hdGlvbjo6cmVtb3ZlKFJlc291cmNlTG9hZGVyKiByZXNvdXJjZUxvYWRlcikKIHsKICAg
ICBpZiAobV9yZXF1ZXN0c0xvYWRpbmcucmVtb3ZlKHJlc291cmNlTG9hZGVyKSkKICAgICAgICAg
cmV0dXJuOwpAQCAtMzcxLDcgKzM1Nyw3IEBAIHZvaWQgUmVzb3VyY2VMb2FkU2NoZWR1bGVyOjpI
b3N0SW5mb3JtYXQKICAgICB9CiB9CiAKLWJvb2wgUmVzb3VyY2VMb2FkU2NoZWR1bGVyOjpIb3N0
SW5mb3JtYXRpb246Omhhc1JlcXVlc3RzKCkgY29uc3QKK2Jvb2wgV2ViUmVzb3VyY2VMb2FkU2No
ZWR1bGVyOjpIb3N0SW5mb3JtYXRpb246Omhhc1JlcXVlc3RzKCkgY29uc3QKIHsKICAgICBpZiAo
IW1fcmVxdWVzdHNMb2FkaW5nLmlzRW1wdHkoKSkKICAgICAgICAgcmV0dXJuIHRydWU7CkBAIC0z
ODIsMTEgKzM2OCwxNiBAQCBib29sIFJlc291cmNlTG9hZFNjaGVkdWxlcjo6SG9zdEluZm9ybWF0
CiAgICAgcmV0dXJuIGZhbHNlOwogfQogCi1ib29sIFJlc291cmNlTG9hZFNjaGVkdWxlcjo6SG9z
dEluZm9ybWF0aW9uOjpsaW1pdFJlcXVlc3RzKFJlc291cmNlTG9hZFByaW9yaXR5IHByaW9yaXR5
KSBjb25zdCAKK2Jvb2wgV2ViUmVzb3VyY2VMb2FkU2NoZWR1bGVyOjpIb3N0SW5mb3JtYXRpb246
OmxpbWl0UmVxdWVzdHMoUmVzb3VyY2VMb2FkUHJpb3JpdHkgcHJpb3JpdHkpIGNvbnN0IAogewog
ICAgIGlmIChwcmlvcml0eSA9PSBSZXNvdXJjZUxvYWRQcmlvcml0eTo6VmVyeUxvdyAmJiAhbV9y
ZXF1ZXN0c0xvYWRpbmcuaXNFbXB0eSgpKQogICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICByZXR1
cm4gbV9yZXF1ZXN0c0xvYWRpbmcuc2l6ZSgpID49IChyZXNvdXJjZUxvYWRTY2hlZHVsZXIoKS0+
aXNTZXJpYWxMb2FkaW5nRW5hYmxlZCgpID8gMSA6IG1fbWF4UmVxdWVzdHNJbkZsaWdodCk7Cisg
ICAgcmV0dXJuIG1fcmVxdWVzdHNMb2FkaW5nLnNpemUoKSA+PSAod2ViUmVzb3VyY2VMb2FkU2No
ZWR1bGVyKCkuaXNTZXJpYWxMb2FkaW5nRW5hYmxlZCgpID8gMSA6IG1fbWF4UmVxdWVzdHNJbkZs
aWdodCk7Cit9CisKK3ZvaWQgV2ViUmVzb3VyY2VMb2FkU2NoZWR1bGVyOjpjcmVhdGVQaW5nSGFu
ZGxlKE5ldHdvcmtpbmdDb250ZXh0KiBuZXR3b3JraW5nQ29udGV4dCwgUmVzb3VyY2VSZXF1ZXN0
JiByZXF1ZXN0LCBib29sIHNob3VsZFVzZUNyZWRlbnRpYWxTdG9yYWdlKQoreworICAgIC8vIFBp
bmdIYW5kbGUgbWFuYWdlcyBpdHMgb3duIGxpZmV0aW1lLCBkZWxldGluZyBpdHNlbGYgd2hlbiBp
dHMgcHVycG9zZSBoYXMgYmVlbiBmdWxmaWxsZWQuCisgICAgbmV3IFBpbmdIYW5kbGUobmV0d29y
a2luZ0NvbnRleHQsIHJlcXVlc3QsIHNob3VsZFVzZUNyZWRlbnRpYWxTdG9yYWdlLCBQaW5nSGFu
ZGxlOjpVc2VzQXN5bmNDYWxsYmFja3M6Ok5vKTsKIH0KIAotfSAvLyBuYW1lc3BhY2UgV2ViQ29y
ZQpJbmRleDogU291cmNlL1dlYktpdC9XZWJDb3JlU3VwcG9ydC9XZWJSZXNvdXJjZUxvYWRTY2hl
ZHVsZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L1dlYkNvcmVTdXBwb3J0L1dlYlJl
c291cmNlTG9hZFNjaGVkdWxlci5oCShyZXZpc2lvbiAxOTI4ODApCShmcm9tIFNvdXJjZS9XZWJD
b3JlL2xvYWRlci9SZXNvdXJjZUxvYWRTY2hlZHVsZXIuaDoxOTI4ODApCisrKyBTb3VyY2UvV2Vi
S2l0L1dlYkNvcmVTdXBwb3J0L1dlYlJlc291cmNlTG9hZFNjaGVkdWxlci5oCSh3b3JraW5nIGNv
cHkpCkBAIC0wLDAgKzEsMTM0IEBACisvKgorICAgIENvcHlyaWdodCAoQykgMTk5OCBMYXJzIEtu
b2xsIChrbm9sbEBtcGktaGQubXBnLmRlKQorICAgIENvcHlyaWdodCAoQykgMjAwMSBEaXJrIE11
ZWxsZXIgPG11ZWxsZXJAa2RlLm9yZz4KKyAgICBDb3B5cmlnaHQgKEMpIDIwMDQsIDIwMDYsIDIw
MDcsIDIwMDggQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICAgIENvcHlyaWdodCAo
QykgMjAxMCBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorCisgICAgVGhpcyBsaWJy
YXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICAg
IG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVi
bGljCisgICAgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRh
dGlvbjsgZWl0aGVyCisgICAgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBv
cHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorCisgICAgVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1
dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgICAgYnV0IFdJVEhPVVQg
QU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAgICBN
RVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUg
dGhlIEdOVQorICAgIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRh
aWxzLgorCisgICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExp
YnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICAgIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5
OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCisgICAgdGhlIEZy
ZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBG
bG9vciwKKyAgICBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKyAqLworCisjaWZuZGVmIFJl
c291cmNlTG9hZFNjaGVkdWxlcl9oCisjZGVmaW5lIFJlc291cmNlTG9hZFNjaGVkdWxlcl9oCisK
KyNpbmNsdWRlICJGcmFtZUxvYWRlclR5cGVzLmgiCisjaW5jbHVkZSAiUmVzb3VyY2VMb2FkZXJP
cHRpb25zLmgiCisjaW5jbHVkZSAiUmVzb3VyY2VMb2FkUHJpb3JpdHkuaCIKKyNpbmNsdWRlICJU
aW1lci5oIgorI2luY2x1ZGUgPGFycmF5PgorI2luY2x1ZGUgPHd0Zi9EZXF1ZS5oPgorI2luY2x1
ZGUgPHd0Zi9IYXNoTWFwLmg+CisjaW5jbHVkZSA8d3RmL0hhc2hTZXQuaD4KKyNpbmNsdWRlIDx3
dGYvTm9uY29weWFibGUuaD4KKyNpbmNsdWRlIDx3dGYvdGV4dC9TdHJpbmdIYXNoLmg+CisjaW5j
bHVkZSA8d3RmL3RleHQvV1RGU3RyaW5nLmg+CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworY2xh
c3MgQ2FjaGVkUmVzb3VyY2U7CitjbGFzcyBGcmFtZTsKK2NsYXNzIFVSTDsKK2NsYXNzIE5ldHNj
YXBlUGx1Z0luU3RyZWFtTG9hZGVyOworY2xhc3MgTmV0c2NhcGVQbHVnSW5TdHJlYW1Mb2FkZXJD
bGllbnQ7CitjbGFzcyBSZXNvdXJjZUxvYWRlcjsKK2NsYXNzIFJlc291cmNlUmVxdWVzdDsKK2Ns
YXNzIFN1YnJlc291cmNlTG9hZGVyOworCitjbGFzcyBSZXNvdXJjZUxvYWRTY2hlZHVsZXIgewor
ICAgIFdURl9NQUtFX05PTkNPUFlBQkxFKFJlc291cmNlTG9hZFNjaGVkdWxlcik7IFdURl9NQUtF
X0ZBU1RfQUxMT0NBVEVEOworcHVibGljOgorICAgIFdFQkNPUkVfRVhQT1JUIGZyaWVuZCBSZXNv
dXJjZUxvYWRTY2hlZHVsZXIqIHJlc291cmNlTG9hZFNjaGVkdWxlcigpOworCisgICAgV0VCQ09S
RV9FWFBPUlQgdmlydHVhbCBSZWZQdHI8U3VicmVzb3VyY2VMb2FkZXI+IHNjaGVkdWxlU3VicmVz
b3VyY2VMb2FkKEZyYW1lKiwgQ2FjaGVkUmVzb3VyY2UqLCBjb25zdCBSZXNvdXJjZVJlcXVlc3Qm
LCBjb25zdCBSZXNvdXJjZUxvYWRlck9wdGlvbnMmKTsKKyAgICBXRUJDT1JFX0VYUE9SVCB2aXJ0
dWFsIFJlZlB0cjxOZXRzY2FwZVBsdWdJblN0cmVhbUxvYWRlcj4gc2NoZWR1bGVQbHVnaW5TdHJl
YW1Mb2FkKEZyYW1lKiwgTmV0c2NhcGVQbHVnSW5TdHJlYW1Mb2FkZXJDbGllbnQqLCBjb25zdCBS
ZXNvdXJjZVJlcXVlc3QmKTsKKyAgICBXRUJDT1JFX0VYUE9SVCB2aXJ0dWFsIHZvaWQgcmVtb3Zl
KFJlc291cmNlTG9hZGVyKik7CisgICAgdmlydHVhbCB2b2lkIHNldERlZmVyc0xvYWRpbmcoUmVz
b3VyY2VMb2FkZXIqLCBib29sKTsKKyAgICB2aXJ0dWFsIHZvaWQgY3Jvc3NPcmlnaW5SZWRpcmVj
dFJlY2VpdmVkKFJlc291cmNlTG9hZGVyKiwgY29uc3QgVVJMJiByZWRpcmVjdFVSTCk7CisgICAg
CisgICAgV0VCQ09SRV9FWFBPUlQgdmlydHVhbCB2b2lkIHNlcnZlUGVuZGluZ1JlcXVlc3RzKFJl
c291cmNlTG9hZFByaW9yaXR5IG1pbmltdW1Qcmlvcml0eSA9IFJlc291cmNlTG9hZFByaW9yaXR5
OjpWZXJ5TG93KTsKKyAgICBXRUJDT1JFX0VYUE9SVCB2aXJ0dWFsIHZvaWQgc3VzcGVuZFBlbmRp
bmdSZXF1ZXN0cygpOworICAgIFdFQkNPUkVfRVhQT1JUIHZpcnR1YWwgdm9pZCByZXN1bWVQZW5k
aW5nUmVxdWVzdHMoKTsKKyAgICAKKyAgICBib29sIGlzU2VyaWFsTG9hZGluZ0VuYWJsZWQoKSBj
b25zdCB7IHJldHVybiBtX2lzU2VyaWFsTG9hZGluZ0VuYWJsZWQ7IH0KKyAgICB2aXJ0dWFsIHZv
aWQgc2V0U2VyaWFsTG9hZGluZ0VuYWJsZWQoYm9vbCBiKSB7IG1faXNTZXJpYWxMb2FkaW5nRW5h
YmxlZCA9IGI7IH0KKworICAgIGNsYXNzIFN1c3BlbmRlciB7CisgICAgcHVibGljOgorICAgICAg
ICBleHBsaWNpdCBTdXNwZW5kZXIoUmVzb3VyY2VMb2FkU2NoZWR1bGVyJiBzY2hlZHVsZXIpIDog
bV9zY2hlZHVsZXIoc2NoZWR1bGVyKSB7IG1fc2NoZWR1bGVyLnN1c3BlbmRQZW5kaW5nUmVxdWVz
dHMoKTsgfQorICAgICAgICB+U3VzcGVuZGVyKCkgeyBtX3NjaGVkdWxlci5yZXN1bWVQZW5kaW5n
UmVxdWVzdHMoKTsgfQorICAgIHByaXZhdGU6CisgICAgICAgIFJlc291cmNlTG9hZFNjaGVkdWxl
ciYgbV9zY2hlZHVsZXI7CisgICAgfTsKKworcHJvdGVjdGVkOgorICAgIFdFQkNPUkVfRVhQT1JU
IFJlc291cmNlTG9hZFNjaGVkdWxlcigpOworICAgIFdFQkNPUkVfRVhQT1JUIHZpcnR1YWwgflJl
c291cmNlTG9hZFNjaGVkdWxlcigpOworCitwcml2YXRlOgorICAgIHZvaWQgc2NoZWR1bGVMb2Fk
KFJlc291cmNlTG9hZGVyKik7CisgICAgdm9pZCBzY2hlZHVsZVNlcnZlUGVuZGluZ1JlcXVlc3Rz
KCk7CisgICAgdm9pZCByZXF1ZXN0VGltZXJGaXJlZCgpOworCisgICAgYm9vbCBpc1N1c3BlbmRp
bmdQZW5kaW5nUmVxdWVzdHMoKSBjb25zdCB7IHJldHVybiAhIW1fc3VzcGVuZFBlbmRpbmdSZXF1
ZXN0c0NvdW50OyB9CisKKyAgICBjbGFzcyBIb3N0SW5mb3JtYXRpb24geworICAgICAgICBXVEZf
TUFLRV9OT05DT1BZQUJMRShIb3N0SW5mb3JtYXRpb24pOyBXVEZfTUFLRV9GQVNUX0FMTE9DQVRF
RDsKKyAgICBwdWJsaWM6CisgICAgICAgIEhvc3RJbmZvcm1hdGlvbihjb25zdCBTdHJpbmcmLCB1
bnNpZ25lZCk7CisgICAgICAgIH5Ib3N0SW5mb3JtYXRpb24oKTsKKyAgICAgICAgCisgICAgICAg
IGNvbnN0IFN0cmluZyYgbmFtZSgpIGNvbnN0IHsgcmV0dXJuIG1fbmFtZTsgfQorICAgICAgICB2
b2lkIHNjaGVkdWxlKFJlc291cmNlTG9hZGVyKiwgUmVzb3VyY2VMb2FkUHJpb3JpdHkgPSBSZXNv
dXJjZUxvYWRQcmlvcml0eTo6VmVyeUxvdyk7CisgICAgICAgIHZvaWQgYWRkTG9hZEluUHJvZ3Jl
c3MoUmVzb3VyY2VMb2FkZXIqKTsKKyAgICAgICAgdm9pZCByZW1vdmUoUmVzb3VyY2VMb2FkZXIq
KTsKKyAgICAgICAgYm9vbCBoYXNSZXF1ZXN0cygpIGNvbnN0OworICAgICAgICBib29sIGxpbWl0
UmVxdWVzdHMoUmVzb3VyY2VMb2FkUHJpb3JpdHkpIGNvbnN0OworCisgICAgICAgIHR5cGVkZWYg
RGVxdWU8UmVmUHRyPFJlc291cmNlTG9hZGVyPj4gUmVxdWVzdFF1ZXVlOworICAgICAgICBSZXF1
ZXN0UXVldWUmIHJlcXVlc3RzUGVuZGluZyhSZXNvdXJjZUxvYWRQcmlvcml0eSBwcmlvcml0eSkg
eyByZXR1cm4gbV9yZXF1ZXN0c1BlbmRpbmdbcHJpb3JpdHlUb0luZGV4KHByaW9yaXR5KV07IH0K
KworICAgIHByaXZhdGU6CisgICAgICAgIHN0YXRpYyB1bnNpZ25lZCBwcmlvcml0eVRvSW5kZXgo
UmVzb3VyY2VMb2FkUHJpb3JpdHkpOworCisgICAgICAgIHN0ZDo6YXJyYXk8UmVxdWVzdFF1ZXVl
LCByZXNvdXJjZUxvYWRQcmlvcml0eUNvdW50PiBtX3JlcXVlc3RzUGVuZGluZzsKKyAgICAgICAg
dHlwZWRlZiBIYXNoU2V0PFJlZlB0cjxSZXNvdXJjZUxvYWRlcj4+IFJlcXVlc3RNYXA7CisgICAg
ICAgIFJlcXVlc3RNYXAgbV9yZXF1ZXN0c0xvYWRpbmc7CisgICAgICAgIGNvbnN0IFN0cmluZyBt
X25hbWU7CisgICAgICAgIGNvbnN0IHVuc2lnbmVkIG1fbWF4UmVxdWVzdHNJbkZsaWdodDsKKyAg
ICB9OworCisgICAgZW51bSBDcmVhdGVIb3N0UG9saWN5IHsKKyAgICAgICAgQ3JlYXRlSWZOb3RG
b3VuZCwKKyAgICAgICAgRmluZE9ubHkKKyAgICB9OworICAgIAorICAgIEhvc3RJbmZvcm1hdGlv
biogaG9zdEZvclVSTChjb25zdCBVUkwmLCBDcmVhdGVIb3N0UG9saWN5ID0gRmluZE9ubHkpOwor
ICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgc2VydmVQZW5kaW5nUmVxdWVzdHMoSG9zdEluZm9ybWF0
aW9uKiwgUmVzb3VyY2VMb2FkUHJpb3JpdHkpOworCisgICAgdHlwZWRlZiBIYXNoTWFwPFN0cmlu
ZywgSG9zdEluZm9ybWF0aW9uKiwgU3RyaW5nSGFzaD4gSG9zdE1hcDsKKyAgICBIb3N0TWFwIG1f
aG9zdHM7CisgICAgSG9zdEluZm9ybWF0aW9uKiBtX25vbkhUVFBQcm90b2NvbEhvc3Q7CisgICAg
ICAgIAorICAgIFRpbWVyIG1fcmVxdWVzdFRpbWVyOworCisgICAgdW5zaWduZWQgbV9zdXNwZW5k
UGVuZGluZ1JlcXVlc3RzQ291bnQ7CisgICAgYm9vbCBtX2lzU2VyaWFsTG9hZGluZ0VuYWJsZWQ7
Cit9OworCitXRUJDT1JFX0VYUE9SVCBSZXNvdXJjZUxvYWRTY2hlZHVsZXIqIHJlc291cmNlTG9h
ZFNjaGVkdWxlcigpOworCit9CisKKyNlbmRpZgpJbmRleDogU291cmNlL1dlYktpdC9XZWJDb3Jl
U3VwcG9ydC9XZWJSZXNvdXJjZUxvYWRTY2hlZHVsZXIuaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
V2ViS2l0L1dlYkNvcmVTdXBwb3J0L1dlYlJlc291cmNlTG9hZFNjaGVkdWxlci5oCSh3b3JraW5n
IGNvcHkpCisrKyBTb3VyY2UvV2ViS2l0L1dlYkNvcmVTdXBwb3J0L1dlYlJlc291cmNlTG9hZFNj
aGVkdWxlci5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDcgKzEsNyBAQAogLyoKICAgICBDb3B5cmln
aHQgKEMpIDE5OTggTGFycyBLbm9sbCAoa25vbGxAbXBpLWhkLm1wZy5kZSkKICAgICBDb3B5cmln
aHQgKEMpIDIwMDEgRGlyayBNdWVsbGVyIDxtdWVsbGVyQGtkZS5vcmc+Ci0gICAgQ29weXJpZ2h0
IChDKSAyMDA0LCAyMDA2LCAyMDA3LCAyMDA4IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KKyAgICBDb3B5cmlnaHQgKEMpIDIwMDQsIDIwMDYtMjAwOCwgMjAxNSBBcHBsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCiAgICAgQ29weXJpZ2h0IChDKSAyMDEwIEdvb2dsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCiAKICAgICBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsg
eW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCkBAIC0yMCwxMyArMjAsMTQgQEAKICAgICBC
b3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KICAqLwogCi0jaWZuZGVmIFJlc291cmNlTG9hZFNj
aGVkdWxlcl9oCi0jZGVmaW5lIFJlc291cmNlTG9hZFNjaGVkdWxlcl9oCisjaWZuZGVmIFdlYlJl
c291cmNlTG9hZFNjaGVkdWxlcl9oCisjZGVmaW5lIFdlYlJlc291cmNlTG9hZFNjaGVkdWxlcl9o
CiAKLSNpbmNsdWRlICJGcmFtZUxvYWRlclR5cGVzLmgiCi0jaW5jbHVkZSAiUmVzb3VyY2VMb2Fk
ZXJPcHRpb25zLmgiCi0jaW5jbHVkZSAiUmVzb3VyY2VMb2FkUHJpb3JpdHkuaCIKLSNpbmNsdWRl
ICJUaW1lci5oIgorI2luY2x1ZGUgPFdlYkNvcmUvRnJhbWVMb2FkZXJUeXBlcy5oPgorI2luY2x1
ZGUgPFdlYkNvcmUvTG9hZGVyU3RyYXRlZ3kuaD4KKyNpbmNsdWRlIDxXZWJDb3JlL1Jlc291cmNl
TG9hZFByaW9yaXR5Lmg+CisjaW5jbHVkZSA8V2ViQ29yZS9SZXNvdXJjZUxvYWRlck9wdGlvbnMu
aD4KKyNpbmNsdWRlIDxXZWJDb3JlL1RpbWVyLmg+CiAjaW5jbHVkZSA8YXJyYXk+CiAjaW5jbHVk
ZSA8d3RmL0RlcXVlLmg+CiAjaW5jbHVkZSA8d3RmL0hhc2hNYXAuaD4KQEAgLTM1LDQ5ICszNiwz
NyBAQAogI2luY2x1ZGUgPHd0Zi90ZXh0L1N0cmluZ0hhc2guaD4KICNpbmNsdWRlIDx3dGYvdGV4
dC9XVEZTdHJpbmcuaD4KIAotbmFtZXNwYWNlIFdlYkNvcmUgeworY2xhc3MgV2ViUmVzb3VyY2VM
b2FkU2NoZWR1bGVyOwogCi1jbGFzcyBDYWNoZWRSZXNvdXJjZTsKLWNsYXNzIEZyYW1lOwotY2xh
c3MgVVJMOwotY2xhc3MgTmV0c2NhcGVQbHVnSW5TdHJlYW1Mb2FkZXI7Ci1jbGFzcyBOZXRzY2Fw
ZVBsdWdJblN0cmVhbUxvYWRlckNsaWVudDsKLWNsYXNzIFJlc291cmNlTG9hZGVyOwotY2xhc3Mg
UmVzb3VyY2VSZXF1ZXN0OwotY2xhc3MgU3VicmVzb3VyY2VMb2FkZXI7CitXZWJSZXNvdXJjZUxv
YWRTY2hlZHVsZXImIHdlYlJlc291cmNlTG9hZFNjaGVkdWxlcigpOwogCi1jbGFzcyBSZXNvdXJj
ZUxvYWRTY2hlZHVsZXIgewotICAgIFdURl9NQUtFX05PTkNPUFlBQkxFKFJlc291cmNlTG9hZFNj
aGVkdWxlcik7IFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOworY2xhc3MgV2ViUmVzb3VyY2VMb2Fk
U2NoZWR1bGVyIDogcHVibGljIFdlYkNvcmU6OkxvYWRlclN0cmF0ZWd5IHsKKyAgICBXVEZfTUFL
RV9OT05DT1BZQUJMRShXZWJSZXNvdXJjZUxvYWRTY2hlZHVsZXIpOyBXVEZfTUFLRV9GQVNUX0FM
TE9DQVRFRDsKIHB1YmxpYzoKLSAgICBXRUJDT1JFX0VYUE9SVCBmcmllbmQgUmVzb3VyY2VMb2Fk
U2NoZWR1bGVyKiByZXNvdXJjZUxvYWRTY2hlZHVsZXIoKTsKKyAgICBXZWJSZXNvdXJjZUxvYWRT
Y2hlZHVsZXIoKTsKIAotICAgIFdFQkNPUkVfRVhQT1JUIHZpcnR1YWwgUmVmUHRyPFN1YnJlc291
cmNlTG9hZGVyPiBzY2hlZHVsZVN1YnJlc291cmNlTG9hZChGcmFtZSosIENhY2hlZFJlc291cmNl
KiwgY29uc3QgUmVzb3VyY2VSZXF1ZXN0JiwgY29uc3QgUmVzb3VyY2VMb2FkZXJPcHRpb25zJik7
Ci0gICAgV0VCQ09SRV9FWFBPUlQgdmlydHVhbCBSZWZQdHI8TmV0c2NhcGVQbHVnSW5TdHJlYW1M
b2FkZXI+IHNjaGVkdWxlUGx1Z2luU3RyZWFtTG9hZChGcmFtZSosIE5ldHNjYXBlUGx1Z0luU3Ry
ZWFtTG9hZGVyQ2xpZW50KiwgY29uc3QgUmVzb3VyY2VSZXF1ZXN0Jik7Ci0gICAgV0VCQ09SRV9F
WFBPUlQgdmlydHVhbCB2b2lkIHJlbW92ZShSZXNvdXJjZUxvYWRlciopOwotICAgIHZpcnR1YWwg
dm9pZCBzZXREZWZlcnNMb2FkaW5nKFJlc291cmNlTG9hZGVyKiwgYm9vbCk7Ci0gICAgdmlydHVh
bCB2b2lkIGNyb3NzT3JpZ2luUmVkaXJlY3RSZWNlaXZlZChSZXNvdXJjZUxvYWRlciosIGNvbnN0
IFVSTCYgcmVkaXJlY3RVUkwpOwotICAgIAotICAgIFdFQkNPUkVfRVhQT1JUIHZpcnR1YWwgdm9p
ZCBzZXJ2ZVBlbmRpbmdSZXF1ZXN0cyhSZXNvdXJjZUxvYWRQcmlvcml0eSBtaW5pbXVtUHJpb3Jp
dHkgPSBSZXNvdXJjZUxvYWRQcmlvcml0eTo6VmVyeUxvdyk7Ci0gICAgV0VCQ09SRV9FWFBPUlQg
dmlydHVhbCB2b2lkIHN1c3BlbmRQZW5kaW5nUmVxdWVzdHMoKTsKLSAgICBXRUJDT1JFX0VYUE9S
VCB2aXJ0dWFsIHZvaWQgcmVzdW1lUGVuZGluZ1JlcXVlc3RzKCk7CisgICAgUmVmUHRyPFdlYkNv
cmU6OlN1YnJlc291cmNlTG9hZGVyPiBsb2FkUmVzb3VyY2UoV2ViQ29yZTo6RnJhbWUqLCBXZWJD
b3JlOjpDYWNoZWRSZXNvdXJjZSosIGNvbnN0IFdlYkNvcmU6OlJlc291cmNlUmVxdWVzdCYsIGNv
bnN0IFdlYkNvcmU6OlJlc291cmNlTG9hZGVyT3B0aW9ucyYpIG92ZXJyaWRlOworICAgIHZvaWQg
bG9hZFJlc291cmNlU3luY2hyb25vdXNseShXZWJDb3JlOjpOZXR3b3JraW5nQ29udGV4dCosIHVu
c2lnbmVkIGxvbmcsIGNvbnN0IFdlYkNvcmU6OlJlc291cmNlUmVxdWVzdCYsIFdlYkNvcmU6OlN0
b3JlZENyZWRlbnRpYWxzLCBXZWJDb3JlOjpDbGllbnRDcmVkZW50aWFsUG9saWN5LCBXZWJDb3Jl
OjpSZXNvdXJjZUVycm9yJiwgV2ViQ29yZTo6UmVzb3VyY2VSZXNwb25zZSYsIFZlY3RvcjxjaGFy
PiYpIG92ZXJyaWRlOworICAgIHZvaWQgcmVtb3ZlKFdlYkNvcmU6OlJlc291cmNlTG9hZGVyKikg
b3ZlcnJpZGU7CisgICAgdm9pZCBzZXREZWZlcnNMb2FkaW5nKFdlYkNvcmU6OlJlc291cmNlTG9h
ZGVyKiwgYm9vbCkgb3ZlcnJpZGU7CisgICAgdm9pZCBjcm9zc09yaWdpblJlZGlyZWN0UmVjZWl2
ZWQoV2ViQ29yZTo6UmVzb3VyY2VMb2FkZXIqLCBjb25zdCBXZWJDb3JlOjpVUkwmIHJlZGlyZWN0
VVJMKSBvdmVycmlkZTsKICAgICAKKyAgICB2b2lkIHNlcnZlUGVuZGluZ1JlcXVlc3RzKFdlYkNv
cmU6OlJlc291cmNlTG9hZFByaW9yaXR5IG1pbmltdW1Qcmlvcml0eSA9IFdlYkNvcmU6OlJlc291
cmNlTG9hZFByaW9yaXR5OjpWZXJ5TG93KSBvdmVycmlkZTsKKyAgICB2b2lkIHN1c3BlbmRQZW5k
aW5nUmVxdWVzdHMoKSBvdmVycmlkZTsKKyAgICB2b2lkIHJlc3VtZVBlbmRpbmdSZXF1ZXN0cygp
IG92ZXJyaWRlOworCisgICAgdm9pZCBjcmVhdGVQaW5nSGFuZGxlKFdlYkNvcmU6Ok5ldHdvcmtp
bmdDb250ZXh0KiwgV2ViQ29yZTo6UmVzb3VyY2VSZXF1ZXN0JiwgYm9vbCBzaG91bGRVc2VDcmVk
ZW50aWFsU3RvcmFnZSkgb3ZlcnJpZGU7CisKICAgICBib29sIGlzU2VyaWFsTG9hZGluZ0VuYWJs
ZWQoKSBjb25zdCB7IHJldHVybiBtX2lzU2VyaWFsTG9hZGluZ0VuYWJsZWQ7IH0KLSAgICB2aXJ0
dWFsIHZvaWQgc2V0U2VyaWFsTG9hZGluZ0VuYWJsZWQoYm9vbCBiKSB7IG1faXNTZXJpYWxMb2Fk
aW5nRW5hYmxlZCA9IGI7IH0KKyAgICB2b2lkIHNldFNlcmlhbExvYWRpbmdFbmFibGVkKGJvb2wg
YikgeyBtX2lzU2VyaWFsTG9hZGluZ0VuYWJsZWQgPSBiOyB9CiAKLSAgICBjbGFzcyBTdXNwZW5k
ZXIgewotICAgIHB1YmxpYzoKLSAgICAgICAgZXhwbGljaXQgU3VzcGVuZGVyKFJlc291cmNlTG9h
ZFNjaGVkdWxlciYgc2NoZWR1bGVyKSA6IG1fc2NoZWR1bGVyKHNjaGVkdWxlcikgeyBtX3NjaGVk
dWxlci5zdXNwZW5kUGVuZGluZ1JlcXVlc3RzKCk7IH0KLSAgICAgICAgflN1c3BlbmRlcigpIHsg
bV9zY2hlZHVsZXIucmVzdW1lUGVuZGluZ1JlcXVlc3RzKCk7IH0KLSAgICBwcml2YXRlOgotICAg
ICAgICBSZXNvdXJjZUxvYWRTY2hlZHVsZXImIG1fc2NoZWR1bGVyOwotICAgIH07CisgICAgUmVm
UHRyPFdlYkNvcmU6Ok5ldHNjYXBlUGx1Z0luU3RyZWFtTG9hZGVyPiBzY2hlZHVsZVBsdWdpblN0
cmVhbUxvYWQoV2ViQ29yZTo6RnJhbWUqLCBXZWJDb3JlOjpOZXRzY2FwZVBsdWdJblN0cmVhbUxv
YWRlckNsaWVudCosIGNvbnN0IFdlYkNvcmU6OlJlc291cmNlUmVxdWVzdCYpOwogCiBwcm90ZWN0
ZWQ6Ci0gICAgV0VCQ09SRV9FWFBPUlQgUmVzb3VyY2VMb2FkU2NoZWR1bGVyKCk7Ci0gICAgV0VC
Q09SRV9FWFBPUlQgdmlydHVhbCB+UmVzb3VyY2VMb2FkU2NoZWR1bGVyKCk7CisgICAgdmlydHVh
bCB+V2ViUmVzb3VyY2VMb2FkU2NoZWR1bGVyKCk7CiAKIHByaXZhdGU6Ci0gICAgdm9pZCBzY2hl
ZHVsZUxvYWQoUmVzb3VyY2VMb2FkZXIqKTsKKyAgICB2b2lkIHNjaGVkdWxlTG9hZChXZWJDb3Jl
OjpSZXNvdXJjZUxvYWRlciopOwogICAgIHZvaWQgc2NoZWR1bGVTZXJ2ZVBlbmRpbmdSZXF1ZXN0
cygpOwogICAgIHZvaWQgcmVxdWVzdFRpbWVyRmlyZWQoKTsKIApAQCAtOTAsMjAgKzc5LDIwIEBA
IHByaXZhdGU6CiAgICAgICAgIH5Ib3N0SW5mb3JtYXRpb24oKTsKICAgICAgICAgCiAgICAgICAg
IGNvbnN0IFN0cmluZyYgbmFtZSgpIGNvbnN0IHsgcmV0dXJuIG1fbmFtZTsgfQotICAgICAgICB2
b2lkIHNjaGVkdWxlKFJlc291cmNlTG9hZGVyKiwgUmVzb3VyY2VMb2FkUHJpb3JpdHkgPSBSZXNv
dXJjZUxvYWRQcmlvcml0eTo6VmVyeUxvdyk7Ci0gICAgICAgIHZvaWQgYWRkTG9hZEluUHJvZ3Jl
c3MoUmVzb3VyY2VMb2FkZXIqKTsKLSAgICAgICAgdm9pZCByZW1vdmUoUmVzb3VyY2VMb2FkZXIq
KTsKKyAgICAgICAgdm9pZCBzY2hlZHVsZShXZWJDb3JlOjpSZXNvdXJjZUxvYWRlciosIFdlYkNv
cmU6OlJlc291cmNlTG9hZFByaW9yaXR5ID0gV2ViQ29yZTo6UmVzb3VyY2VMb2FkUHJpb3JpdHk6
OlZlcnlMb3cpOworICAgICAgICB2b2lkIGFkZExvYWRJblByb2dyZXNzKFdlYkNvcmU6OlJlc291
cmNlTG9hZGVyKik7CisgICAgICAgIHZvaWQgcmVtb3ZlKFdlYkNvcmU6OlJlc291cmNlTG9hZGVy
Kik7CiAgICAgICAgIGJvb2wgaGFzUmVxdWVzdHMoKSBjb25zdDsKLSAgICAgICAgYm9vbCBsaW1p
dFJlcXVlc3RzKFJlc291cmNlTG9hZFByaW9yaXR5KSBjb25zdDsKKyAgICAgICAgYm9vbCBsaW1p
dFJlcXVlc3RzKFdlYkNvcmU6OlJlc291cmNlTG9hZFByaW9yaXR5KSBjb25zdDsKIAotICAgICAg
ICB0eXBlZGVmIERlcXVlPFJlZlB0cjxSZXNvdXJjZUxvYWRlcj4+IFJlcXVlc3RRdWV1ZTsKLSAg
ICAgICAgUmVxdWVzdFF1ZXVlJiByZXF1ZXN0c1BlbmRpbmcoUmVzb3VyY2VMb2FkUHJpb3JpdHkg
cHJpb3JpdHkpIHsgcmV0dXJuIG1fcmVxdWVzdHNQZW5kaW5nW3ByaW9yaXR5VG9JbmRleChwcmlv
cml0eSldOyB9CisgICAgICAgIHR5cGVkZWYgRGVxdWU8UmVmUHRyPFdlYkNvcmU6OlJlc291cmNl
TG9hZGVyPj4gUmVxdWVzdFF1ZXVlOworICAgICAgICBSZXF1ZXN0UXVldWUmIHJlcXVlc3RzUGVu
ZGluZyhXZWJDb3JlOjpSZXNvdXJjZUxvYWRQcmlvcml0eSBwcmlvcml0eSkgeyByZXR1cm4gbV9y
ZXF1ZXN0c1BlbmRpbmdbcHJpb3JpdHlUb0luZGV4KHByaW9yaXR5KV07IH0KIAogICAgIHByaXZh
dGU6Ci0gICAgICAgIHN0YXRpYyB1bnNpZ25lZCBwcmlvcml0eVRvSW5kZXgoUmVzb3VyY2VMb2Fk
UHJpb3JpdHkpOworICAgICAgICBzdGF0aWMgdW5zaWduZWQgcHJpb3JpdHlUb0luZGV4KFdlYkNv
cmU6OlJlc291cmNlTG9hZFByaW9yaXR5KTsKIAotICAgICAgICBzdGQ6OmFycmF5PFJlcXVlc3RR
dWV1ZSwgcmVzb3VyY2VMb2FkUHJpb3JpdHlDb3VudD4gbV9yZXF1ZXN0c1BlbmRpbmc7Ci0gICAg
ICAgIHR5cGVkZWYgSGFzaFNldDxSZWZQdHI8UmVzb3VyY2VMb2FkZXI+PiBSZXF1ZXN0TWFwOwor
ICAgICAgICBzdGQ6OmFycmF5PFJlcXVlc3RRdWV1ZSwgV2ViQ29yZTo6cmVzb3VyY2VMb2FkUHJp
b3JpdHlDb3VudD4gbV9yZXF1ZXN0c1BlbmRpbmc7CisgICAgICAgIHR5cGVkZWYgSGFzaFNldDxS
ZWZQdHI8V2ViQ29yZTo6UmVzb3VyY2VMb2FkZXI+PiBSZXF1ZXN0TWFwOwogICAgICAgICBSZXF1
ZXN0TWFwIG1fcmVxdWVzdHNMb2FkaW5nOwogICAgICAgICBjb25zdCBTdHJpbmcgbV9uYW1lOwog
ICAgICAgICBjb25zdCB1bnNpZ25lZCBtX21heFJlcXVlc3RzSW5GbGlnaHQ7CkBAIC0xMTQsMjEg
KzEwMywxNyBAQCBwcml2YXRlOgogICAgICAgICBGaW5kT25seQogICAgIH07CiAgICAgCi0gICAg
SG9zdEluZm9ybWF0aW9uKiBob3N0Rm9yVVJMKGNvbnN0IFVSTCYsIENyZWF0ZUhvc3RQb2xpY3kg
PSBGaW5kT25seSk7Ci0gICAgV0VCQ09SRV9FWFBPUlQgdm9pZCBzZXJ2ZVBlbmRpbmdSZXF1ZXN0
cyhIb3N0SW5mb3JtYXRpb24qLCBSZXNvdXJjZUxvYWRQcmlvcml0eSk7CisgICAgSG9zdEluZm9y
bWF0aW9uKiBob3N0Rm9yVVJMKGNvbnN0IFdlYkNvcmU6OlVSTCYsIENyZWF0ZUhvc3RQb2xpY3kg
PSBGaW5kT25seSk7CisgICAgV0VCQ09SRV9FWFBPUlQgdm9pZCBzZXJ2ZVBlbmRpbmdSZXF1ZXN0
cyhIb3N0SW5mb3JtYXRpb24qLCBXZWJDb3JlOjpSZXNvdXJjZUxvYWRQcmlvcml0eSk7CiAKICAg
ICB0eXBlZGVmIEhhc2hNYXA8U3RyaW5nLCBIb3N0SW5mb3JtYXRpb24qLCBTdHJpbmdIYXNoPiBI
b3N0TWFwOwogICAgIEhvc3RNYXAgbV9ob3N0czsKICAgICBIb3N0SW5mb3JtYXRpb24qIG1fbm9u
SFRUUFByb3RvY29sSG9zdDsKICAgICAgICAgCi0gICAgVGltZXIgbV9yZXF1ZXN0VGltZXI7Cisg
ICAgV2ViQ29yZTo6VGltZXIgbV9yZXF1ZXN0VGltZXI7CiAKICAgICB1bnNpZ25lZCBtX3N1c3Bl
bmRQZW5kaW5nUmVxdWVzdHNDb3VudDsKICAgICBib29sIG1faXNTZXJpYWxMb2FkaW5nRW5hYmxl
ZDsKIH07CiAKLVdFQkNPUkVfRVhQT1JUIFJlc291cmNlTG9hZFNjaGVkdWxlciogcmVzb3VyY2VM
b2FkU2NoZWR1bGVyKCk7Ci0KLX0KLQogI2VuZGlmCkluZGV4OiBTb3VyY2UvV2ViS2l0L1dlYktp
dC52Y3hwcm9qL1dlYktpdC9XZWJLaXQudmN4cHJvago9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
S2l0L1dlYktpdC52Y3hwcm9qL1dlYktpdC9XZWJLaXQudmN4cHJvagkocmV2aXNpb24gMTkyODgw
KQorKysgU291cmNlL1dlYktpdC9XZWJLaXQudmN4cHJvai9XZWJLaXQvV2ViS2l0LnZjeHByb2oJ
KHdvcmtpbmcgY29weSkKQEAgLTMxNCw2ICszMTQsNyBAQAogICAgIDxDbENvbXBpbGUgSW5jbHVk
ZT0iLi5cLi5cU3RvcmFnZVxXZWJTdG9yYWdlTmFtZXNwYWNlUHJvdmlkZXIuY3BwIiAvPgogICAg
IDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cLi5cY2ZcV2ViQ29yZVN1cHBvcnRcV2ViSW5zcGVjdG9y
Q2xpZW50Q0YuY3BwIiAvPgogICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cLi5cV2ViQ29yZVN1
cHBvcnRcV2ViVmlld0dyb3VwLmNwcCIgLz4KKyAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXC4u
XFdlYkNvcmVTdXBwb3J0XFdlYlJlc291cmNlTG9hZFNjaGVkdWxlci5jcHAiIC8+CiAgICAgPENs
Q29tcGlsZSBJbmNsdWRlPSIuLlwuLlx3aW5cUGx1Z2luc1xucGFwaS5jcHAiIC8+CiAgICAgPENs
Q29tcGlsZSBJbmNsdWRlPSIuLlwuLlx3aW5cUGx1Z2luc1xQbHVnaW5EYXRhYmFzZS5jcHAiIC8+
CiAgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlwuLlx3aW5cUGx1Z2luc1xQbHVnaW5EZWJ1Zy5j
cHAiIC8+CkBAIC00NjksNiArNDcwLDcgQEAKICAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXC4u
XFN0b3JhZ2VcV2ViRGF0YWJhc2VQcm92aWRlci5oIiAvPgogICAgIDxDbEluY2x1ZGUgSW5jbHVk
ZT0iLi5cLi5cU3RvcmFnZVxXZWJTdG9yYWdlTmFtZXNwYWNlUHJvdmlkZXIuaCIgLz4KICAgICA8
Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXC4uXFdlYkNvcmVTdXBwb3J0XFdlYlZpZXdHcm91cC5oIiAv
PgorICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cLi5cV2ViQ29yZVN1cHBvcnRcV2ViUmVzb3Vy
Y2VMb2FkU2NoZWR1bGVyLmgiIC8+CiAgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlwuLlx3aW5c
UGx1Z2luc1xQbHVnaW5EYXRhYmFzZS5oIiAvPgogICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5c
Li5cd2luXFBsdWdpbnNcUGx1Z2luRGVidWcuaCIgLz4KICAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9
Ii4uXC4uXHdpblxQbHVnaW5zXFBsdWdpblBhY2thZ2UuaCIgLz4KSW5kZXg6IFNvdXJjZS9XZWJL
aXQvV2ViS2l0LnZjeHByb2ovV2ViS2l0L1dlYktpdC52Y3hwcm9qLmZpbHRlcnMKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL1dlYktpdC9XZWJLaXQudmN4cHJvai9XZWJLaXQvV2ViS2l0LnZjeHByb2ou
ZmlsdGVycwkocmV2aXNpb24gMTkyODgwKQorKysgU291cmNlL1dlYktpdC9XZWJLaXQudmN4cHJv
ai9XZWJLaXQvV2ViS2l0LnZjeHByb2ouZmlsdGVycwkod29ya2luZyBjb3B5KQpAQCAtMzM4LDYg
KzMzOCw5IEBACiAgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlwuLlxXZWJDb3JlU3VwcG9ydFxX
ZWJWaWV3R3JvdXAuY3BwIj4KICAgICAgIDxGaWx0ZXI+U291cmNlczwvRmlsdGVyPgogICAgIDwv
Q2xDb21waWxlPgorICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cLi5cV2ViQ29yZVN1cHBvcnRc
V2ViUmVzb3VyY2VMb2FkU2NoZWR1bGVyLmNwcCI+CisgICAgICA8RmlsdGVyPlNvdXJjZXM8L0Zp
bHRlcj4KKyAgICA8L0NsQ29tcGlsZT4KICAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXC4uXHdp
blxXZWJDb3JlU3VwcG9ydFxXZWJWaXNpdGVkTGlua1N0b3JlLmNwcCI+CiAgICAgICA8RmlsdGVy
PldlYkNvcmVTdXBwb3J0PC9GaWx0ZXI+CiAgICAgPC9DbENvbXBpbGU+CkBAIC02NjgsNiArNjcx
LDkgQEAKICAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXC4uXFdlYkNvcmVTdXBwb3J0XFdlYlZp
ZXdHcm91cC5oIj4KICAgICAgIDxGaWx0ZXI+SGVhZGVyIEZpbGVzPC9GaWx0ZXI+CiAgICAgPC9D
bEluY2x1ZGU+CisgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlwuLlxXZWJDb3JlU3VwcG9ydFxX
ZWJSZXNvdXJjZUxvYWRTY2hlZHVsZXIuaCI+CisgICAgICA8RmlsdGVyPkhlYWRlciBGaWxlczwv
RmlsdGVyPgorICAgIDwvQ2xJbmNsdWRlPgogICA8L0l0ZW1Hcm91cD4KICAgPEl0ZW1Hcm91cD4K
ICAgICA8Tm9uZSBJbmNsdWRlPSJXZWJLaXRQb3N0QnVpbGQuY21kIiAvPgpJbmRleDogU291cmNl
L1dlYktpdC9XZWJLaXQueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvago9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV2ViS2l0L1dlYktpdC54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCShyZXZpc2lvbiAx
OTI4ODApCisrKyBTb3VyY2UvV2ViS2l0L1dlYktpdC54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9q
CSh3b3JraW5nIGNvcHkpCkBAIC00NTUsNiArNDU1LDggQEAKIAkJRTE1NjYzMTkwRkI2MUMxRjAw
QzE5OUNBIC8qIFdlYkRvd25sb2FkLm1tIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gRTE1NjYzMTgwRkI2MUMxRjAwQzE5OUNBIC8qIFdlYkRvd25sb2FkLm1t
ICovOyB9OwogCQlFMTY5ODM2MjExMzQ2RDFCMDA4OTQxMTUgLyogUHJveHlSdW50aW1lT2JqZWN0
LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBFMTY5ODM2
MTExMzQ2RDFCMDA4OTQxMTUgLyogUHJveHlSdW50aW1lT2JqZWN0LmggKi87IH07CiAJCUUxNjk4
MzZDMTEzNDZENTYwMDg5NDExNSAvKiBQcm94eVJ1bnRpbWVPYmplY3QubW0gaW4gU291cmNlcyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBFMTY5ODM2QjExMzQ2RDU2MDA4OTQx
MTUgLyogUHJveHlSdW50aW1lT2JqZWN0Lm1tICovOyB9OworCQlFNEFFRjk3QjFDMERGNEJDMDBC
MDE3MjcgLyogV2ViUmVzb3VyY2VMb2FkU2NoZWR1bGVyLmNwcCBpbiBTb3VyY2VzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEU0QUVGOTc5MUMwREY0QkMwMEIwMTcyNyAvKiBX
ZWJSZXNvdXJjZUxvYWRTY2hlZHVsZXIuY3BwICovOyB9OworCQlFNEFFRjk3QzFDMERGNEJDMDBC
MDE3MjcgLyogV2ViUmVzb3VyY2VMb2FkU2NoZWR1bGVyLmggaW4gSGVhZGVycyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBFNEFFRjk3QTFDMERGNEJDMDBCMDE3MjcgLyogV2Vi
UmVzb3VyY2VMb2FkU2NoZWR1bGVyLmggKi87IH07CiAJCUVENUI5NTI0MTExQjcyNUEwMDQ3MjI5
OCAvKiBXZWJMb2NhbGl6YWJsZVN0cmluZ3MubW0gaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSBFRDVCOTUyMzExMUI3MjVBMDA0NzIyOTggLyogV2ViTG9jYWxp
emFibGVTdHJpbmdzLm1tICovOyB9OwogCQlFRDdGNkQ4QjA5ODA2ODM1MDBDMjM1RUQgLyogV2Vi
TlNEYXRhRXh0cmFzUHJpdmF0ZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gRUQ3RjZEOEEwOTgwNjgzNTAwQzIzNUVEIC8qIFdlYk5TRGF0YUV4dHJhc1By
aXZhdGUuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9Owog
CQlGODM0QUFENzBFNjRCMUM3MDBFMjczN0MgLyogV2ViVGV4dEl0ZXJhdG9yLmggaW4gSGVhZGVy
cyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBGODM0QUFENTBFNjRCMUM3MDBF
MjczN0MgLyogV2ViVGV4dEl0ZXJhdG9yLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAo
UHJpdmF0ZSwgKTsgfTsgfTsKQEAgLTg2OCw2ICs4NzAsOCBAQAogCQlFMTU2NjMxODBGQjYxQzFG
MDBDMTk5Q0EgLyogV2ViRG93bmxvYWQubW0gKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5vYmpj
cHA7IHBhdGggPSBXZWJEb3dubG9hZC5tbTsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJ
RTE2OTgzNjExMTM0NkQxQjAwODk0MTE1IC8qIFByb3h5UnVudGltZU9iamVjdC5oICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBQcm94eVJ1bnRpbWVPYmplY3QuaDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKIAkJRTE2OTgzNkIxMTM0NkQ1NjAwODk0MTE1IC8qIFByb3h5UnVu
dGltZU9iamVjdC5tbSAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLm9iamNwcDsgcGF0aCA9IFBy
b3h5UnVudGltZU9iamVjdC5tbTsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJRTRBRUY5
NzkxQzBERjRCQzAwQjAxNzI3IC8qIFdlYlJlc291cmNlTG9hZFNjaGVkdWxlci5jcHAgKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZXhwbGljaXRGaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3Bw
Lm9iamNwcDsgZmlsZUVuY29kaW5nID0gNDsgbmFtZSA9IFdlYlJlc291cmNlTG9hZFNjaGVkdWxl
ci5jcHA7IHBhdGggPSBXZWJDb3JlU3VwcG9ydC9XZWJSZXNvdXJjZUxvYWRTY2hlZHVsZXIuY3Bw
OyBzb3VyY2VUcmVlID0gU09VUkNFX1JPT1Q7IH07CisJCUU0QUVGOTdBMUMwREY0QkMwMEIwMTcy
NyAvKiBXZWJSZXNvdXJjZUxvYWRTY2hlZHVsZXIuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5o
OyBuYW1lID0gV2ViUmVzb3VyY2VMb2FkU2NoZWR1bGVyLmg7IHBhdGggPSBXZWJDb3JlU3VwcG9y
dC9XZWJSZXNvdXJjZUxvYWRTY2hlZHVsZXIuaDsgc291cmNlVHJlZSA9IFNPVVJDRV9ST09UOyB9
OwogCQlFRDIxQjk4MTA1MjhGN0FBMDAzMjk5QUMgLyogV2ViRG9jdW1lbnRJbnRlcm5hbC5oICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGluZGVudFdpZHRo
ID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFdlYkRvY3Vt
ZW50SW50ZXJuYWwuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgdGFiV2lkdGggPSA4OyB1c2Vz
VGFicyA9IDA7IH07CiAJCUVEMkIyNDc0MDMzQTJEQTgwMEMxQTUyNiAvKiBXZWJOU1Bhc3RlYm9h
cmRFeHRyYXMuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0
OyBpbmRlbnRXaWR0aCA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBh
dGggPSBXZWJOU1Bhc3RlYm9hcmRFeHRyYXMuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgdGFi
V2lkdGggPSA4OyB1c2VzVGFicyA9IDA7IH07CiAJCUVEMkIyNDc1MDMzQTJEQTgwMEMxQTUyNiAv
KiBXZWJOU1Bhc3RlYm9hcmRFeHRyYXMubW0gKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gNDsgaW5kZW50V2lkdGggPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuY3BwLm9iamNwcDsgcGF0aCA9IFdlYk5TUGFzdGVib2FyZEV4dHJhcy5tbTsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgdGFiV2lkdGggPSA4OyB1c2VzVGFicyA9IDA7IH07CkBAIC0x
NTk1LDYgKzE1OTksOCBAQAogCQkJCTFBQTg3OUI1MTFDQkU5QkYwMDNDNjY0RiAvKiBXZWJQbGF0
Zm9ybVN0cmF0ZWdpZXMubW0gKi8sCiAJCQkJMUE2QTIwOEMxODg2MTU0NjAwRTUwRjVGIC8qIFdl
YlByb2dyZXNzVHJhY2tlckNsaWVudC5oICovLAogCQkJCTFBNkEyMDhCMTg4NjE1NDYwMEU1MEY1
RiAvKiBXZWJQcm9ncmVzc1RyYWNrZXJDbGllbnQubW0gKi8sCisJCQkJRTRBRUY5NzkxQzBERjRC
QzAwQjAxNzI3IC8qIFdlYlJlc291cmNlTG9hZFNjaGVkdWxlci5jcHAgKi8sCisJCQkJRTRBRUY5
N0ExQzBERjRCQzAwQjAxNzI3IC8qIFdlYlJlc291cmNlTG9hZFNjaGVkdWxlci5oICovLAogCQkJ
CUE1REVGQzA3MTFENTMzMUMwMDg4NTI3MyAvKiBXZWJTZWN1cml0eU9yaWdpbi5tbSAqLywKIAkJ
CQlBNURFRkMwODExRDUzMzFDMDA4ODUyNzMgLyogV2ViU2VjdXJpdHlPcmlnaW5JbnRlcm5hbC5o
ICovLAogCQkJCUE1REVGQzA5MTFENTMzMUMwMDg4NTI3MyAvKiBXZWJTZWN1cml0eU9yaWdpblBy
aXZhdGUuaCAqLywKQEAgLTE4ODgsNiArMTg5NCw3IEBACiAJCQkJQTEwQzFEM0MxODIwMkZDNTAw
MzY4ODNBIC8qIFdlYk5TU3RyaW5nRXh0cmFzSVBob25lLmggaW4gSGVhZGVycyAqLywKIAkJCQk5
Mzk4MTA3RTA4MjRCRjAxMDA4REYwMzggLyogV2ViTlNVUkxFeHRyYXMuaCBpbiBIZWFkZXJzICov
LAogCQkJCTY1RTBGODg0MDg1MDA5MTcwMDdFNUNCOSAvKiBXZWJOU1VSTFJlcXVlc3RFeHRyYXMu
aCBpbiBIZWFkZXJzICovLAorCQkJCUU0QUVGOTdDMUMwREY0QkMwMEIwMTcyNyAvKiBXZWJSZXNv
dXJjZUxvYWRTY2hlZHVsZXIuaCBpbiBIZWFkZXJzICovLAogCQkJCTY1RTBGOUU2MDg1MDBGMjMw
MDdFNUNCOSAvKiBXZWJOU1VzZXJEZWZhdWx0c0V4dHJhcy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJ
OTM5ODEwMjQwODI0QkYwMTAwOERGMDM4IC8qIFdlYk5TVmlld0V4dHJhcy5oIGluIEhlYWRlcnMg
Ki8sCiAJCQkJOTM5ODEwMjUwODI0QkYwMTAwOERGMDM4IC8qIFdlYk5TV2luZG93RXh0cmFzLmgg
aW4gSGVhZGVycyAqLywKQEAgLTIyMzYsNiArMjI0Myw3IEBACiAJCQkJQkM3Rjg4OUYxMEM5RDMw
QzAwRDYxMzNEIC8qIFdlYkdlb2xvY2F0aW9uUG9zaXRpb24ubW0gaW4gU291cmNlcyAqLywKIAkJ
CQlBMTBDMUQzNzE4MjAyRkM1MDAzNjg4M0EgLyogV2ViR2VvbG9jYXRpb25Qcm92aWRlcklPUy5t
bSBpbiBTb3VyY2VzICovLAogCQkJCTkzOTgxMTEzMDgyNEJGMDEwMDhERjAzOCAvKiBXZWJIaXN0
b3J5Lm1tIGluIFNvdXJjZXMgKi8sCisJCQkJRTRBRUY5N0IxQzBERjRCQzAwQjAxNzI3IC8qIFdl
YlJlc291cmNlTG9hZFNjaGVkdWxlci5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk5Mzk4MTBCRDA4
MjRCRjAxMDA4REYwMzggLyogV2ViSGlzdG9yeUl0ZW0ubW0gaW4gU291cmNlcyAqLywKIAkJCQkx
QUFGNUZDMDBFREUzQTkyMDA4RDg4M0QgLyogV2ViSG9zdGVkTmV0c2NhcGVQbHVnaW5WaWV3Lm1t
IGluIFNvdXJjZXMgKi8sCiAJCQkJOTM5ODEwRjMwODI0QkYwMTAwOERGMDM4IC8qIFdlYkhUTUxS
ZXByZXNlbnRhdGlvbi5tbSBpbiBTb3VyY2VzICovLApJbmRleDogU291cmNlL1dlYktpdC9tYWMv
Q2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvbWFjL0NoYW5nZUxvZwkocmV2
aXNpb24gMTkyODgwKQorKysgU291cmNlL1dlYktpdC9tYWMvQ2hhbmdlTG9nCSh3b3JraW5nIGNv
cHkpCkBAIC0xLDMgKzEsMjggQEAKKzIwMTUtMTItMDIgIEFudHRpIEtvaXZpc3RvICA8YW50dGlA
YXBwbGUuY29tPgorCisgICAgICAgIE1vdmUgUmVzb3VyY2VMb2FkU2NoZWR1bGVyIHRvIFdlYktp
dDEKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE1MTc0
MworCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgICogUGx1
Z2lucy9Ib3N0ZWQvSG9zdGVkTmV0c2NhcGVQbHVnaW5TdHJlYW0ubW06CisgICAgICAgIChXZWJL
aXQ6Okhvc3RlZE5ldHNjYXBlUGx1Z2luU3RyZWFtOjpzdGFydCk6CisgICAgICAgIChXZWJLaXQ6
Okhvc3RlZE5ldHNjYXBlUGx1Z2luU3RyZWFtOjpzdG9wKToKKyAgICAgICAgKiBQbHVnaW5zL1dl
Yk5ldHNjYXBlUGx1Z2luU3RyZWFtLm1tOgorICAgICAgICAoV2ViTmV0c2NhcGVQbHVnaW5TdHJl
YW06OnN0YXJ0KToKKyAgICAgICAgKFdlYk5ldHNjYXBlUGx1Z2luU3RyZWFtOjpzdG9wKToKKyAg
ICAgICAgKiBXZWJDb3JlU3VwcG9ydC9XZWJQbGF0Zm9ybVN0cmF0ZWdpZXMuaDoKKyAgICAgICAg
KiBXZWJDb3JlU3VwcG9ydC9XZWJQbGF0Zm9ybVN0cmF0ZWdpZXMubW06CisgICAgICAgIChXZWJQ
bGF0Zm9ybVN0cmF0ZWdpZXM6OmNyZWF0ZUxvYWRlclN0cmF0ZWd5KToKKyAgICAgICAgKFdlYlBs
YXRmb3JtU3RyYXRlZ2llczo6Y3JlYXRlUGFzdGVib2FyZFN0cmF0ZWd5KToKKyAgICAgICAgKFdl
YlBsYXRmb3JtU3RyYXRlZ2llczo6Y3JlYXRlUGx1Z2luU3RyYXRlZ3kpOgorICAgICAgICAoV2Vi
UGxhdGZvcm1TdHJhdGVnaWVzOjpjcmVhdGVCbG9iUmVnaXN0cnkpOgorICAgICAgICAoV2ViUGxh
dGZvcm1TdHJhdGVnaWVzOjpjb29raWVzRm9yRE9NKToKKyAgICAgICAgKiBXZWJWaWV3L1dlYlZp
ZXcubW06CisgICAgICAgICgtW1dlYlZpZXcgX2Rpc3BhdGNoUGVuZGluZ0xvYWRSZXF1ZXN0c10p
OgorICAgICAgICAoK1tXZWJWaWV3IF9zZXRMb2FkUmVzb3VyY2VzU2VyaWFsbHk6XSk6CisgICAg
ICAgICgrW1dlYlZpZXcgX0hUVFBQaXBlbGluaW5nRW5hYmxlZF0pOgorCiAyMDE1LTExLTMwICBL
YXRseW4gR3JhZmYgIDxrZ3JhZmZAYXBwbGUuY29tPgogCiAgICAgICAgIFJlbmFtZSBBY3RpdmVE
T01PYmplY3QvRE9NV2luZG93IFBhZ2VDYWNoZVN1c3BlbnNpb24gY29kZSB0byBzdXBwb3J0IG1v
cmUgcmVhc29ucyBmb3Igc3VzcGVuc2lvbgpJbmRleDogU291cmNlL1dlYktpdC9tYWMvUGx1Z2lu
cy9XZWJOZXRzY2FwZVBsdWdpblN0cmVhbS5tbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0
L21hYy9QbHVnaW5zL1dlYk5ldHNjYXBlUGx1Z2luU3RyZWFtLm1tCShyZXZpc2lvbiAxOTI4ODAp
CisrKyBTb3VyY2UvV2ViS2l0L21hYy9QbHVnaW5zL1dlYk5ldHNjYXBlUGx1Z2luU3RyZWFtLm1t
CSh3b3JraW5nIGNvcHkpCkBAIC0zNywxMyArMzcsMTUgQEAKICNpbXBvcnQgIldlYk5TVVJMUmVx
dWVzdEV4dHJhcy5oIgogI2ltcG9ydCAiV2ViTmV0c2NhcGVQbHVnaW5QYWNrYWdlLmgiCiAjaW1w
b3J0ICJXZWJOZXRzY2FwZVBsdWdpblZpZXcuaCIKKyNpbXBvcnQgIldlYlJlc291cmNlTG9hZFNj
aGVkdWxlci5oIgogI2ltcG9ydCA8Rm91bmRhdGlvbi9OU1VSTFJlc3BvbnNlLmg+CiAjaW1wb3J0
IDxXZWJDb3JlL0RvY3VtZW50Lmg+CiAjaW1wb3J0IDxXZWJDb3JlL0RvY3VtZW50TG9hZGVyLmg+
CiAjaW1wb3J0IDxXZWJDb3JlL0ZyYW1lLmg+CiAjaW1wb3J0IDxXZWJDb3JlL0ZyYW1lTG9hZGVy
Lmg+CiAjaW1wb3J0IDxXZWJDb3JlL0pTRE9NV2luZG93QmFzZS5oPgotI2ltcG9ydCA8V2ViQ29y
ZS9SZXNvdXJjZUxvYWRTY2hlZHVsZXIuaD4KKyNpbXBvcnQgPFdlYkNvcmUvTG9hZGVyU3RyYXRl
Z3kuaD4KKyNpbXBvcnQgPFdlYkNvcmUvUGxhdGZvcm1TdHJhdGVnaWVzLmg+CiAjaW1wb3J0IDxX
ZWJDb3JlL1NlY3VyaXR5T3JpZ2luLmg+CiAjaW1wb3J0IDxXZWJDb3JlL1NlY3VyaXR5UG9saWN5
Lmg+CiAjaW1wb3J0IDxXZWJDb3JlL1dlYkNvcmVPYmpDRXh0cmFzLmg+CkBAIC0yODUsOCArMjg3
LDggQEAgdm9pZCBXZWJOZXRzY2FwZVBsdWdpblN0cmVhbTo6c3RhcnQoKQogICAgIEFTU0VSVCht
X3JlcXVlc3QpOwogICAgIEFTU0VSVCghbV9mcmFtZUxvYWRlcik7CiAgICAgQVNTRVJUKCFtX2xv
YWRlcik7Ci0gICAgCi0gICAgbV9sb2FkZXIgPSByZXNvdXJjZUxvYWRTY2hlZHVsZXIoKS0+c2No
ZWR1bGVQbHVnaW5TdHJlYW1Mb2FkKGNvcmUoW21fcGx1Z2luVmlldy5nZXQoKSB3ZWJGcmFtZV0p
LCB0aGlzLCBtX3JlcXVlc3QuZ2V0KCkpOworCisgICAgbV9sb2FkZXIgPSB3ZWJSZXNvdXJjZUxv
YWRTY2hlZHVsZXIoKS5zY2hlZHVsZVBsdWdpblN0cmVhbUxvYWQoY29yZShbbV9wbHVnaW5WaWV3
LmdldCgpIHdlYkZyYW1lXSksIHRoaXMsIG1fcmVxdWVzdC5nZXQoKSk7CiB9CiAKIHZvaWQgV2Vi
TmV0c2NhcGVQbHVnaW5TdHJlYW06OnN0b3AoKQpJbmRleDogU291cmNlL1dlYktpdC9tYWMvUGx1
Z2lucy9Ib3N0ZWQvSG9zdGVkTmV0c2NhcGVQbHVnaW5TdHJlYW0ubW0KPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1dlYktpdC9tYWMvUGx1Z2lucy9Ib3N0ZWQvSG9zdGVkTmV0c2NhcGVQbHVnaW5TdHJl
YW0ubW0JKHJldmlzaW9uIDE5Mjg4MCkKKysrIFNvdXJjZS9XZWJLaXQvbWFjL1BsdWdpbnMvSG9z
dGVkL0hvc3RlZE5ldHNjYXBlUGx1Z2luU3RyZWFtLm1tCSh3b3JraW5nIGNvcHkpCkBAIC0zNiwx
MSArMzYsMTIgQEAKICNpbXBvcnQgIldlYktpdFN5c3RlbUludGVyZmFjZS5oIgogI2ltcG9ydCAi
V2ViTlNVUkxFeHRyYXMuaCIKICNpbXBvcnQgIldlYk5TVVJMUmVxdWVzdEV4dHJhcy5oIgorI2lt
cG9ydCAiV2ViUmVzb3VyY2VMb2FkU2NoZWR1bGVyLmgiCiAjaW1wb3J0IDxXZWJDb3JlL0RvY3Vt
ZW50Lmg+CiAjaW1wb3J0IDxXZWJDb3JlL0RvY3VtZW50TG9hZGVyLmg+CiAjaW1wb3J0IDxXZWJD
b3JlL0ZyYW1lLmg+CiAjaW1wb3J0IDxXZWJDb3JlL0ZyYW1lTG9hZGVyLmg+Ci0jaW1wb3J0IDxX
ZWJDb3JlL1Jlc291cmNlTG9hZFNjaGVkdWxlci5oPgorI2ltcG9ydCA8V2ViQ29yZS9QbGF0Zm9y
bVN0cmF0ZWdpZXMuaD4KICNpbXBvcnQgPFdlYkNvcmUvU2VjdXJpdHlPcmlnaW4uaD4KICNpbXBv
cnQgPFdlYkNvcmUvU2VjdXJpdHlQb2xpY3kuaD4KICNpbXBvcnQgPFdlYkNvcmUvV2ViQ29yZVVS
TFJlc3BvbnNlLmg+CkBAIC0yMjAsOCArMjIxLDggQEAgdm9pZCBIb3N0ZWROZXRzY2FwZVBsdWdp
blN0cmVhbTo6c3RhcnQoKQogICAgIEFTU0VSVChtX3JlcXVlc3QpOwogICAgIEFTU0VSVCghbV9m
cmFtZUxvYWRlcik7CiAgICAgQVNTRVJUKCFtX2xvYWRlcik7Ci0gICAgCi0gICAgbV9sb2FkZXIg
PSByZXNvdXJjZUxvYWRTY2hlZHVsZXIoKS0+c2NoZWR1bGVQbHVnaW5TdHJlYW1Mb2FkKGNvcmUo
W21faW5zdGFuY2UtPnBsdWdpblZpZXcoKSB3ZWJGcmFtZV0pLCB0aGlzLCBtX3JlcXVlc3QuZ2V0
KCkpOworCisgICAgbV9sb2FkZXIgPSB3ZWJSZXNvdXJjZUxvYWRTY2hlZHVsZXIoKS5zY2hlZHVs
ZVBsdWdpblN0cmVhbUxvYWQoY29yZShbbV9pbnN0YW5jZS0+cGx1Z2luVmlldygpIHdlYkZyYW1l
XSksIHRoaXMsIG1fcmVxdWVzdC5nZXQoKSk7CiB9CiAKIHZvaWQgSG9zdGVkTmV0c2NhcGVQbHVn
aW5TdHJlYW06OnN0b3AoKQpJbmRleDogU291cmNlL1dlYktpdC9tYWMvV2ViQ29yZVN1cHBvcnQv
V2ViUGxhdGZvcm1TdHJhdGVnaWVzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9tYWMv
V2ViQ29yZVN1cHBvcnQvV2ViUGxhdGZvcm1TdHJhdGVnaWVzLmgJKHJldmlzaW9uIDE5Mjg4MCkK
KysrIFNvdXJjZS9XZWJLaXQvbWFjL1dlYkNvcmVTdXBwb3J0L1dlYlBsYXRmb3JtU3RyYXRlZ2ll
cy5oCSh3b3JraW5nIGNvcHkpCkBAIC0zNSw3ICszNSw3IEBACiBzdHJ1Y3QgUGFzdGVib2FyZElt
YWdlOwogc3RydWN0IFBhc3RlYm9hcmRXZWJDb250ZW50OwogCi1jbGFzcyBXZWJQbGF0Zm9ybVN0
cmF0ZWdpZXMgOiBwdWJsaWMgV2ViQ29yZTo6UGxhdGZvcm1TdHJhdGVnaWVzLCBwcml2YXRlIFdl
YkNvcmU6OkNvb2tpZXNTdHJhdGVneSwgcHJpdmF0ZSBXZWJDb3JlOjpMb2FkZXJTdHJhdGVneSwg
cHJpdmF0ZSBXZWJDb3JlOjpQYXN0ZWJvYXJkU3RyYXRlZ3ksIHByaXZhdGUgV2ViQ29yZTo6UGx1
Z2luU3RyYXRlZ3kgeworY2xhc3MgV2ViUGxhdGZvcm1TdHJhdGVnaWVzIDogcHVibGljIFdlYkNv
cmU6OlBsYXRmb3JtU3RyYXRlZ2llcywgcHJpdmF0ZSBXZWJDb3JlOjpDb29raWVzU3RyYXRlZ3ks
IHByaXZhdGUgV2ViQ29yZTo6UGFzdGVib2FyZFN0cmF0ZWd5LCBwcml2YXRlIFdlYkNvcmU6OlBs
dWdpblN0cmF0ZWd5IHsKIHB1YmxpYzoKICAgICBzdGF0aWMgdm9pZCBpbml0aWFsaXplSWZOZWNl
c3NhcnkoKTsKICAgICAKQEAgLTQ3LDYgKzQ3LDcgQEAgcHJpdmF0ZToKICAgICB2aXJ0dWFsIFdl
YkNvcmU6OkxvYWRlclN0cmF0ZWd5KiBjcmVhdGVMb2FkZXJTdHJhdGVneSgpIG92ZXJyaWRlOwog
ICAgIHZpcnR1YWwgV2ViQ29yZTo6UGFzdGVib2FyZFN0cmF0ZWd5KiBjcmVhdGVQYXN0ZWJvYXJk
U3RyYXRlZ3koKSBvdmVycmlkZTsKICAgICB2aXJ0dWFsIFdlYkNvcmU6OlBsdWdpblN0cmF0ZWd5
KiBjcmVhdGVQbHVnaW5TdHJhdGVneSgpIG92ZXJyaWRlOworICAgIHZpcnR1YWwgV2ViQ29yZTo6
QmxvYlJlZ2lzdHJ5KiBjcmVhdGVCbG9iUmVnaXN0cnkoKSBvdmVycmlkZTsKIAogICAgIC8vIFdl
YkNvcmU6OkNvb2tpZXNTdHJhdGVneQogICAgIHZpcnR1YWwgU3RyaW5nIGNvb2tpZXNGb3JET00o
Y29uc3QgV2ViQ29yZTo6TmV0d29ya1N0b3JhZ2VTZXNzaW9uJiwgY29uc3QgV2ViQ29yZTo6VVJM
JiBmaXJzdFBhcnR5LCBjb25zdCBXZWJDb3JlOjpVUkwmKSBvdmVycmlkZTsKQEAgLTU2LDggKzU3
LDYgQEAgcHJpdmF0ZToKICAgICB2aXJ0dWFsIGJvb2wgZ2V0UmF3Q29va2llcyhjb25zdCBXZWJD
b3JlOjpOZXR3b3JrU3RvcmFnZVNlc3Npb24mLCBjb25zdCBXZWJDb3JlOjpVUkwmIGZpcnN0UGFy
dHksIGNvbnN0IFdlYkNvcmU6OlVSTCYsIFZlY3RvcjxXZWJDb3JlOjpDb29raWU+Jikgb3ZlcnJp
ZGU7CiAgICAgdmlydHVhbCB2b2lkIGRlbGV0ZUNvb2tpZShjb25zdCBXZWJDb3JlOjpOZXR3b3Jr
U3RvcmFnZVNlc3Npb24mLCBjb25zdCBXZWJDb3JlOjpVUkwmLCBjb25zdCBTdHJpbmcmKSBvdmVy
cmlkZTsKIAotICAgIC8vIFdlYkNvcmU6OkxvYWRlclN0cmF0ZWd5Ci0gICAgLy8gLSBVc2luZyBk
ZWZhdWx0IGltcGxlbWVudGF0aW9uLgogCiAgICAgLy8gV2ViQ29yZTo6UGx1Z2luU3RyYXRlZ3kK
ICAgICB2aXJ0dWFsIHZvaWQgcmVmcmVzaFBsdWdpbnMoKSBvdmVycmlkZTsKQEAgLTY4LDkgKzY3
LDYgQEAgcHJpdmF0ZToKICAgICB2aXJ0dWFsIHZvaWQgY2xlYXJQbHVnaW5DbGllbnRQb2xpY2ll
cygpIG92ZXJyaWRlOwogI2VuZGlmCiAKLSAgICAvLyBXZWJDb3JlOjpMb2FkZXJTdHJhdGVneQot
ICAgIC8vIC0gVXNpbmcgZGVmYXVsdCBpbXBsZW1lbnRhdGlvbi4KLQogICAgIC8vIFdlYkNvcmU6
OlBhc3RlYm9hcmRTdHJhdGVneQogI2lmIFBMQVRGT1JNKElPUykKICAgICB2aXJ0dWFsIHZvaWQg
d3JpdGVUb1Bhc3RlYm9hcmQoY29uc3QgV2ViQ29yZTo6UGFzdGVib2FyZFdlYkNvbnRlbnQmKSBv
dmVycmlkZTsKSW5kZXg6IFNvdXJjZS9XZWJLaXQvbWFjL1dlYkNvcmVTdXBwb3J0L1dlYlBsYXRm
b3JtU3RyYXRlZ2llcy5tbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L21hYy9XZWJDb3Jl
U3VwcG9ydC9XZWJQbGF0Zm9ybVN0cmF0ZWdpZXMubW0JKHJldmlzaW9uIDE5Mjg4MCkKKysrIFNv
dXJjZS9XZWJLaXQvbWFjL1dlYkNvcmVTdXBwb3J0L1dlYlBsYXRmb3JtU3RyYXRlZ2llcy5tbQko
d29ya2luZyBjb3B5KQpAQCAtMjgsNiArMjgsOCBAQAogI2ltcG9ydCAiV2ViRnJhbWVOZXR3b3Jr
aW5nQ29udGV4dC5oIgogI2ltcG9ydCAiV2ViUGx1Z2luRGF0YWJhc2UuaCIKICNpbXBvcnQgIldl
YlBsdWdpblBhY2thZ2UuaCIKKyNpbXBvcnQgIldlYlJlc291cmNlTG9hZFNjaGVkdWxlci5oIgor
I2ltcG9ydCA8V2ViQ29yZS9CbG9iUmVnaXN0cnlJbXBsLmg+CiAjaW1wb3J0IDxXZWJDb3JlL0Js
b2NrRXhjZXB0aW9ucy5oPgogI2ltcG9ydCA8V2ViQ29yZS9Db2xvci5oPgogI2ltcG9ydCA8V2Vi
Q29yZS9NYWluRnJhbWUuaD4KQEAgLTYyLDcgKzY0LDcgQEAgQ29va2llc1N0cmF0ZWd5KiBXZWJQ
bGF0Zm9ybVN0cmF0ZWdpZXM6OgogCiBMb2FkZXJTdHJhdGVneSogV2ViUGxhdGZvcm1TdHJhdGVn
aWVzOjpjcmVhdGVMb2FkZXJTdHJhdGVneSgpCiB7Ci0gICAgcmV0dXJuIHRoaXM7CisgICAgcmV0
dXJuIG5ldyBXZWJSZXNvdXJjZUxvYWRTY2hlZHVsZXI7CiB9CiAKIFBhc3RlYm9hcmRTdHJhdGVn
eSogV2ViUGxhdGZvcm1TdHJhdGVnaWVzOjpjcmVhdGVQYXN0ZWJvYXJkU3RyYXRlZ3koKQpAQCAt
NzUsNiArNzcsMTEgQEAgUGx1Z2luU3RyYXRlZ3kqIFdlYlBsYXRmb3JtU3RyYXRlZ2llczo6Ywog
ICAgIHJldHVybiB0aGlzOwogfQogCitCbG9iUmVnaXN0cnkqIFdlYlBsYXRmb3JtU3RyYXRlZ2ll
czo6Y3JlYXRlQmxvYlJlZ2lzdHJ5KCkKK3sKKyAgICByZXR1cm4gbmV3IFdlYkNvcmU6OkJsb2JS
ZWdpc3RyeUltcGw7Cit9CisKIFN0cmluZyBXZWJQbGF0Zm9ybVN0cmF0ZWdpZXM6OmNvb2tpZXNG
b3JET00oY29uc3QgTmV0d29ya1N0b3JhZ2VTZXNzaW9uJiBzZXNzaW9uLCBjb25zdCBVUkwmIGZp
cnN0UGFydHksIGNvbnN0IFVSTCYgdXJsKQogewogICAgIHJldHVybiBXZWJDb3JlOjpjb29raWVz
Rm9yRE9NKHNlc3Npb24sIGZpcnN0UGFydHksIHVybCk7CkluZGV4OiBTb3VyY2UvV2ViS2l0L21h
Yy9XZWJWaWV3L1dlYlZpZXcubW0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9tYWMvV2Vi
Vmlldy9XZWJWaWV3Lm1tCShyZXZpc2lvbiAxOTI4ODApCisrKyBTb3VyY2UvV2ViS2l0L21hYy9X
ZWJWaWV3L1dlYlZpZXcubW0JKHdvcmtpbmcgY29weSkKQEAgLTk1LDYgKzk1LDcgQEAKICNpbXBv
cnQgIldlYlByZWZlcmVuY2VLZXlzUHJpdmF0ZS5oIgogI2ltcG9ydCAiV2ViUHJlZmVyZW5jZXNQ
cml2YXRlLmgiCiAjaW1wb3J0ICJXZWJQcm9ncmVzc1RyYWNrZXJDbGllbnQuaCIKKyNpbXBvcnQg
IldlYlJlc291cmNlTG9hZFNjaGVkdWxlci5oIgogI2ltcG9ydCAiV2ViU2NyaXB0RGVidWdEZWxl
Z2F0ZS5oIgogI2ltcG9ydCAiV2ViU2NyaXB0V29ybGRJbnRlcm5hbC5oIgogI2ltcG9ydCAiV2Vi
U2VsZWN0aW9uU2VydmljZUNvbnRyb2xsZXIuaCIKQEAgLTE2Nyw3ICsxNjgsNiBAQAogI2ltcG9y
dCA8V2ViQ29yZS9SZW5kZXJWaWV3Lmg+CiAjaW1wb3J0IDxXZWJDb3JlL1JlbmRlcldpZGdldC5o
PgogI2ltcG9ydCA8V2ViQ29yZS9SZXNvdXJjZUhhbmRsZS5oPgotI2ltcG9ydCA8V2ViQ29yZS9S
ZXNvdXJjZUxvYWRTY2hlZHVsZXIuaD4KICNpbXBvcnQgPFdlYkNvcmUvUmVzb3VyY2VSZXF1ZXN0
Lmg+CiAjaW1wb3J0IDxXZWJDb3JlL1J1bnRpbWVBcHBsaWNhdGlvbkNoZWNrcy5oPgogI2ltcG9y
dCA8V2ViQ29yZS9SdW50aW1lRW5hYmxlZEZlYXR1cmVzLmg+CkBAIC03NjEsNyArNzYxLDcgQEAg
c3RhdGljIGJvb2wgc2hvdWxkUmVzdHJpY3RXaW5kb3dGb2N1cygpCiAKIC0gKHZvaWQpX2Rpc3Bh
dGNoUGVuZGluZ0xvYWRSZXF1ZXN0cwogewotICAgIHJlc291cmNlTG9hZFNjaGVkdWxlcigpLT5z
ZXJ2ZVBlbmRpbmdSZXF1ZXN0cygpOworICAgIHdlYlJlc291cmNlTG9hZFNjaGVkdWxlcigpLnNl
cnZlUGVuZGluZ1JlcXVlc3RzKCk7CiB9CiAKICNpZiAhUExBVEZPUk0oSU9TKQpAQCAtMTYxNiw5
ICsxNjE2LDkgQEAgLSAodm9pZClfZGlkRmluaXNoU2Nyb2xsaW5nT3Jab29taW5nCiAtICh2b2lk
KV9zZXRSZXNvdXJjZUxvYWRTY2hlZHVsZXJTdXNwZW5kZWQ6KEJPT0wpc3VzcGVuZAogewogICAg
IGlmIChzdXNwZW5kKQotICAgICAgICByZXNvdXJjZUxvYWRTY2hlZHVsZXIoKS0+c3VzcGVuZFBl
bmRpbmdSZXF1ZXN0cygpOworICAgICAgICB3ZWJSZXNvdXJjZUxvYWRTY2hlZHVsZXIoKS5zdXNw
ZW5kUGVuZGluZ1JlcXVlc3RzKCk7CiAgICAgZWxzZQotICAgICAgICByZXNvdXJjZUxvYWRTY2hl
ZHVsZXIoKS0+cmVzdW1lUGVuZGluZ1JlcXVlc3RzKCk7CisgICAgICAgIHdlYlJlc291cmNlTG9h
ZFNjaGVkdWxlcigpLnJlc3VtZVBlbmRpbmdSZXF1ZXN0cygpOwogfQogCiArICh2b2lkKV9zZXRB
bGxvd0Nvb2tpZXM6KEJPT0wpYWxsb3cKQEAgLTQ0ODIsNyArNDQ4Miw4IEBAIC0gKEJPT0wpc2Vh
cmNoRm9yOihOU1N0cmluZyAqKXN0cmluZyBkaXIKICsgKHZvaWQpX3NldExvYWRSZXNvdXJjZXNT
ZXJpYWxseTooQk9PTClzZXJpYWxpemUgCiB7CiAgICAgV2ViUGxhdGZvcm1TdHJhdGVnaWVzOjpp
bml0aWFsaXplSWZOZWNlc3NhcnkoKTsKLSAgICByZXNvdXJjZUxvYWRTY2hlZHVsZXIoKS0+c2V0
U2VyaWFsTG9hZGluZ0VuYWJsZWQoc2VyaWFsaXplKTsKKworICAgIHdlYlJlc291cmNlTG9hZFNj
aGVkdWxlcigpLnNldFNlcmlhbExvYWRpbmdFbmFibGVkKHNlcmlhbGl6ZSk7CiB9CiAKICsgKEJP
T0wpX0hUVFBQaXBlbGluaW5nRW5hYmxlZApJbmRleDogU291cmNlL1dlYktpdC93aW4vV2ViVmll
dy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC93aW4vV2ViVmlldy5jcHAJKHJldmlz
aW9uIDE5Mjg4MCkKKysrIFNvdXJjZS9XZWJLaXQvd2luL1dlYlZpZXcuY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC0zNCw3ICszNCw2IEBACiAjaW5jbHVkZSAiTWFyc2hhbGxpbmdIZWxwZXJzLmgiCiAj
aW5jbHVkZSAiUGx1Z2luRGF0YWJhc2UuaCIKICNpbmNsdWRlICJQbHVnaW5WaWV3LmgiCi0jaW5j
bHVkZSAiUmVzb3VyY2VMb2FkU2NoZWR1bGVyLmgiCiAjaW5jbHVkZSAiU29mdExpbmtpbmcuaCIK
ICNpbmNsdWRlICJTdWJmcmFtZUxvYWRlci5oIgogI2luY2x1ZGUgIlRleHRJdGVyYXRvci5oIgpA
QCAtNjcsNiArNjYsNyBAQAogI2luY2x1ZGUgIldlYk5vdGlmaWNhdGlvbkNlbnRlci5oIgogI2lu
Y2x1ZGUgIldlYlBsYXRmb3JtU3RyYXRlZ2llcy5oIgogI2luY2x1ZGUgIldlYlByZWZlcmVuY2Vz
LmgiCisjaW5jbHVkZSAiV2ViUmVzb3VyY2VMb2FkU2NoZWR1bGVyLmgiCiAjaW5jbHVkZSAiV2Vi
U2NyaXB0V29ybGQuaCIKICNpbmNsdWRlICJXZWJTdG9yYWdlTmFtZXNwYWNlUHJvdmlkZXIuaCIK
ICNpbmNsdWRlICJXZWJWaWV3R3JvdXAuaCIKQEAgLTc0ODcsNyArNzQ4Nyw3IEBAIEhSRVNVTFQg
V2ViVmlldzo6c2VsZWN0ZWRSYW5nZUZvclRlc3RpbmcKIEhSRVNVTFQgV2ViVmlldzo6c2V0TG9h
ZFJlc291cmNlc1NlcmlhbGx5KEJPT0wgc2VyaWFsaXplKQogewogICAgIFdlYlBsYXRmb3JtU3Ry
YXRlZ2llczo6aW5pdGlhbGl6ZSgpOwotICAgIHJlc291cmNlTG9hZFNjaGVkdWxlcigpLT5zZXRT
ZXJpYWxMb2FkaW5nRW5hYmxlZChzZXJpYWxpemUpOworICAgIHdlYlJlc291cmNlTG9hZFNjaGVk
dWxlcigpLnNldFNlcmlhbExvYWRpbmdFbmFibGVkKHNlcmlhbGl6ZSk7CiAgICAgcmV0dXJuIFNf
T0s7CiB9CiAKQEAgLTc1MDMsNyArNzUwMyw3IEBAIEhSRVNVTFQgV2ViVmlldzo6c2NhbGVXZWJW
aWV3KGRvdWJsZSBzY2EKIAogSFJFU1VMVCBXZWJWaWV3OjpkaXNwYXRjaFBlbmRpbmdMb2FkUmVx
dWVzdHMoKQogewotICAgIHJlc291cmNlTG9hZFNjaGVkdWxlcigpLT5zZXJ2ZVBlbmRpbmdSZXF1
ZXN0cygpOworICAgIHdlYlJlc291cmNlTG9hZFNjaGVkdWxlcigpLnNlcnZlUGVuZGluZ1JlcXVl
c3RzKCk7CiAgICAgcmV0dXJuIFNfT0s7CiB9CiAKSW5kZXg6IFNvdXJjZS9XZWJLaXQvd2luL1Bs
dWdpbnMvUGx1Z2luU3RyZWFtLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L3dpbi9Q
bHVnaW5zL1BsdWdpblN0cmVhbS5jcHAJKHJldmlzaW9uIDE5Mjg4MCkKKysrIFNvdXJjZS9XZWJL
aXQvd2luL1BsdWdpbnMvUGx1Z2luU3RyZWFtLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzIsOSAr
MzIsOSBAQAogI2luY2x1ZGUgIkZyYW1lTG9hZGVyLmgiCiAjaW5jbHVkZSAiSFRUUEhlYWRlck5h
bWVzLmgiCiAjaW5jbHVkZSAiUGx1Z2luRGVidWcuaCIKLSNpbmNsdWRlICJSZXNvdXJjZUxvYWRT
Y2hlZHVsZXIuaCIKICNpbmNsdWRlICJTaGFyZWRCdWZmZXIuaCIKICNpbmNsdWRlICJTdWJyZXNv
dXJjZUxvYWRlci5oIgorI2luY2x1ZGUgIldlYlJlc291cmNlTG9hZFNjaGVkdWxlci5oIgogI2lu
Y2x1ZGUgPHd0Zi9TdHJpbmdFeHRyYXMuaD4KICNpbmNsdWRlIDx3dGYvdGV4dC9DU3RyaW5nLmg+
CiAjaW5jbHVkZSA8d3RmL3RleHQvU3RyaW5nQnVpbGRlci5oPgpAQCAtOTYsNyArOTYsNyBAQCBQ
bHVnaW5TdHJlYW06On5QbHVnaW5TdHJlYW0oKQogdm9pZCBQbHVnaW5TdHJlYW06OnN0YXJ0KCkK
IHsKICAgICBBU1NFUlQoIW1fbG9hZE1hbnVhbGx5KTsKLSAgICBtX2xvYWRlciA9IHJlc291cmNl
TG9hZFNjaGVkdWxlcigpLT5zY2hlZHVsZVBsdWdpblN0cmVhbUxvYWQobV9mcmFtZSwgdGhpcywg
bV9yZXNvdXJjZVJlcXVlc3QpOworICAgIG1fbG9hZGVyID0gd2ViUmVzb3VyY2VMb2FkU2NoZWR1
bGVyKCkuc2NoZWR1bGVQbHVnaW5TdHJlYW1Mb2FkKG1fZnJhbWUsIHRoaXMsIG1fcmVzb3VyY2VS
ZXF1ZXN0KTsKIH0KIAogdm9pZCBQbHVnaW5TdHJlYW06OnN0b3AoKQpJbmRleDogU291cmNlL1dl
YktpdC93aW4vV2ViQ29yZVN1cHBvcnQvV2ViUGxhdGZvcm1TdHJhdGVnaWVzLmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvV2ViS2l0L3dpbi9XZWJDb3JlU3VwcG9ydC9XZWJQbGF0Zm9ybVN0cmF0
ZWdpZXMuY3BwCShyZXZpc2lvbiAxOTI4ODApCisrKyBTb3VyY2UvV2ViS2l0L3dpbi9XZWJDb3Jl
U3VwcG9ydC9XZWJQbGF0Zm9ybVN0cmF0ZWdpZXMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yOCw2
ICsyOCw4IEBACiAjaW5jbHVkZSAiRnJhbWVMb2FkZXIuaCIKICNpbmNsdWRlICJQbHVnaW5EYXRh
YmFzZS5oIgogI2luY2x1ZGUgIldlYkZyYW1lTmV0d29ya2luZ0NvbnRleHQuaCIKKyNpbmNsdWRl
ICJXZWJSZXNvdXJjZUxvYWRTY2hlZHVsZXIuaCIKKyNpbmNsdWRlIDxXZWJDb3JlL0Jsb2JSZWdp
c3RyeUltcGwuaD4KICNpbmNsdWRlIDxXZWJDb3JlL1BhZ2UuaD4KICNpbmNsdWRlIDxXZWJDb3Jl
L1BhZ2VHcm91cC5oPgogI2luY2x1ZGUgPFdlYkNvcmUvUGxhdGZvcm1Db29raWVKYXIuaD4KQEAg
LTU0LDcgKzU2LDcgQEAgQ29va2llc1N0cmF0ZWd5KiBXZWJQbGF0Zm9ybVN0cmF0ZWdpZXM6Ogog
CiBMb2FkZXJTdHJhdGVneSogV2ViUGxhdGZvcm1TdHJhdGVnaWVzOjpjcmVhdGVMb2FkZXJTdHJh
dGVneSgpCiB7Ci0gICAgcmV0dXJuIHRoaXM7CisgICAgcmV0dXJuIG5ldyBXZWJSZXNvdXJjZUxv
YWRTY2hlZHVsZXI7CiB9CiAKIFBhc3RlYm9hcmRTdHJhdGVneSogV2ViUGxhdGZvcm1TdHJhdGVn
aWVzOjpjcmVhdGVQYXN0ZWJvYXJkU3RyYXRlZ3koKQpAQCAtNjcsNiArNjksMTEgQEAgUGx1Z2lu
U3RyYXRlZ3kqIFdlYlBsYXRmb3JtU3RyYXRlZ2llczo6YwogICAgIHJldHVybiB0aGlzOwogfQog
CitCbG9iUmVnaXN0cnkqIFdlYlBsYXRmb3JtU3RyYXRlZ2llczo6Y3JlYXRlQmxvYlJlZ2lzdHJ5
KCkKK3sKKyAgICByZXR1cm4gbmV3IEJsb2JSZWdpc3RyeUltcGw7Cit9CisKIFN0cmluZyBXZWJQ
bGF0Zm9ybVN0cmF0ZWdpZXM6OmNvb2tpZXNGb3JET00oY29uc3QgTmV0d29ya1N0b3JhZ2VTZXNz
aW9uJiBzZXNzaW9uLCBjb25zdCBVUkwmIGZpcnN0UGFydHksIGNvbnN0IFVSTCYgdXJsKQogewog
ICAgIHJldHVybiBXZWJDb3JlOjpjb29raWVzRm9yRE9NKHNlc3Npb24sIGZpcnN0UGFydHksIHVy
bCk7CkluZGV4OiBTb3VyY2UvV2ViS2l0L3dpbi9XZWJDb3JlU3VwcG9ydC9XZWJQbGF0Zm9ybVN0
cmF0ZWdpZXMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L3dpbi9XZWJDb3JlU3VwcG9y
dC9XZWJQbGF0Zm9ybVN0cmF0ZWdpZXMuaAkocmV2aXNpb24gMTkyODgwKQorKysgU291cmNlL1dl
YktpdC93aW4vV2ViQ29yZVN1cHBvcnQvV2ViUGxhdGZvcm1TdHJhdGVnaWVzLmgJKHdvcmtpbmcg
Y29weSkKQEAgLTMxLDcgKzMxLDcgQEAKICNpbmNsdWRlIDxXZWJDb3JlL1BsYXRmb3JtU3RyYXRl
Z2llcy5oPgogI2luY2x1ZGUgPFdlYkNvcmUvUGx1Z2luU3RyYXRlZ3kuaD4KIAotY2xhc3MgV2Vi
UGxhdGZvcm1TdHJhdGVnaWVzIDogcHVibGljIFdlYkNvcmU6OlBsYXRmb3JtU3RyYXRlZ2llcywg
cHJpdmF0ZSBXZWJDb3JlOjpDb29raWVzU3RyYXRlZ3ksIHByaXZhdGUgV2ViQ29yZTo6TG9hZGVy
U3RyYXRlZ3ksIHByaXZhdGUgV2ViQ29yZTo6UGx1Z2luU3RyYXRlZ3kgeworY2xhc3MgV2ViUGxh
dGZvcm1TdHJhdGVnaWVzIDogcHVibGljIFdlYkNvcmU6OlBsYXRmb3JtU3RyYXRlZ2llcywgcHJp
dmF0ZSBXZWJDb3JlOjpDb29raWVzU3RyYXRlZ3ksIHByaXZhdGUgV2ViQ29yZTo6UGx1Z2luU3Ry
YXRlZ3kgewogcHVibGljOgogICAgIHN0YXRpYyB2b2lkIGluaXRpYWxpemUoKTsKICAgICAKQEAg
LTQzLDYgKzQzLDcgQEAgcHJpdmF0ZToKICAgICB2aXJ0dWFsIFdlYkNvcmU6OkxvYWRlclN0cmF0
ZWd5KiBjcmVhdGVMb2FkZXJTdHJhdGVneSgpOwogICAgIHZpcnR1YWwgV2ViQ29yZTo6UGFzdGVi
b2FyZFN0cmF0ZWd5KiBjcmVhdGVQYXN0ZWJvYXJkU3RyYXRlZ3koKTsKICAgICB2aXJ0dWFsIFdl
YkNvcmU6OlBsdWdpblN0cmF0ZWd5KiBjcmVhdGVQbHVnaW5TdHJhdGVneSgpOworICAgIHZpcnR1
YWwgV2ViQ29yZTo6QmxvYlJlZ2lzdHJ5KiBjcmVhdGVCbG9iUmVnaXN0cnkoKTsKIAogICAgIC8v
IFdlYkNvcmU6OkNvb2tpZXNTdHJhdGVneQogICAgIHZpcnR1YWwgU3RyaW5nIGNvb2tpZXNGb3JE
T00oY29uc3QgV2ViQ29yZTo6TmV0d29ya1N0b3JhZ2VTZXNzaW9uJiwgY29uc3QgV2ViQ29yZTo6
VVJMJiBmaXJzdFBhcnR5LCBjb25zdCBXZWJDb3JlOjpVUkwmKTsK
</data>

          </attachment>
      

    </bug>

</bugzilla>