<?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>174033</bug_id>
          
          <creation_ts>2017-06-30 11:33:43 -0700</creation_ts>
          <short_desc>Move ResourceLoadStatisticsStore to WebKit2/UIProcess</short_desc>
          <delta_ts>2017-06-30 13:54:31 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>WebKit2</component>
          <version>WebKit Nightly Build</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Chris Dumez">cdumez</reporter>
          <assigned_to name="Chris Dumez">cdumez</assigned_to>
          <cc>bfulgham</cc>
    
    <cc>buildbot</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1324481</commentid>
    <comment_count>0</comment_count>
    <who name="Chris Dumez">cdumez</who>
    <bug_when>2017-06-30 11:33:43 -0700</bug_when>
    <thetext>Move ResourceLoadStatisticsStore to WebKit2/UIProcess as it is only used in the WebKit2 UIProcess.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1324494</commentid>
    <comment_count>1</comment_count>
      <attachid>314281</attachid>
    <who name="Chris Dumez">cdumez</who>
    <bug_when>2017-06-30 12:54:35 -0700</bug_when>
    <thetext>Created attachment 314281
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1324495</commentid>
    <comment_count>2</comment_count>
    <who name="Build Bot">buildbot</who>
    <bug_when>2017-06-30 12:55:41 -0700</bug_when>
    <thetext>Attachment 314281 did not pass style-queue:


ERROR: Source/WebKit2/UIProcess/Storage/ResourceLoadStatisticsStore.h:91:  Extra space before ( in function call  [whitespace/parens] [4]
Total errors found: 1 in 14 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>1324502</commentid>
    <comment_count>3</comment_count>
      <attachid>314281</attachid>
    <who name="Brent Fulgham">bfulgham</who>
    <bug_when>2017-06-30 13:20:55 -0700</bug_when>
    <thetext>Comment on attachment 314281
Patch

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

I think this looks great! iOS is happy so far. r=me once the tests pass.

&gt; Source/WebKit2/UIProcess/Storage/ResourceLoadStatisticsStore.cpp:55
&gt; +    auto locker = holdLock(m_statisticsLock);

Now that this is only present in UIProcess, I suspect that this lock can go away, and we can just ASSERT that we are on the work queue.

This comment obviously applies to the rest of this file. But perhaps that should be a separate patch (in case I am wrong!) :-)

&gt; Source/WebKit2/UIProcess/WebResourceLoadStatisticsManager.h:28
&gt; +#include &lt;chrono&gt;

It seems like we are using WallTime everywhere now. I wonder if we can get rid of &lt;chrono&gt; entirely?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1324508</commentid>
    <comment_count>4</comment_count>
    <who name="Chris Dumez">cdumez</who>
    <bug_when>2017-06-30 13:34:07 -0700</bug_when>
    <thetext>(In reply to Brent Fulgham from comment #3)
&gt; Comment on attachment 314281 [details]
&gt; Patch
&gt; 
&gt; View in context:
&gt; https://bugs.webkit.org/attachment.cgi?id=314281&amp;action=review
&gt; 
&gt; I think this looks great! iOS is happy so far. r=me once the tests pass.

Thanks.

&gt; 
&gt; &gt; Source/WebKit2/UIProcess/Storage/ResourceLoadStatisticsStore.cpp:55
&gt; &gt; +    auto locker = holdLock(m_statisticsLock);
&gt; 
&gt; Now that this is only present in UIProcess, I suspect that this lock can go
&gt; away, and we can just ASSERT that we are on the work queue.
&gt; 
&gt; This comment obviously applies to the rest of this file. But perhaps that
&gt; should be a separate patch (in case I am wrong!) :-)

Separate patch since non-trivial. The WK C API which is used by TestRunner is synchronous and relies on those locks to dose database operations from the main thread still. I plan to fix this in a follow-up.

&gt; 
&gt; &gt; Source/WebKit2/UIProcess/WebResourceLoadStatisticsManager.h:28
&gt; &gt; +#include &lt;chrono&gt;
&gt; 
&gt; It seems like we are using WallTime everywhere now. I wonder if we can get
&gt; rid of &lt;chrono&gt; entirely?

We still use std::chrono in one API, which I have not corrected yet.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1324511</commentid>
    <comment_count>5</comment_count>
    <who name="Chris Dumez">cdumez</who>
    <bug_when>2017-06-30 13:54:31 -0700</bug_when>
    <thetext>Committed r219010: &lt;http://trac.webkit.org/changeset/219010&gt;</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>314281</attachid>
            <date>2017-06-30 12:54:35 -0700</date>
            <delta_ts>2017-06-30 12:54:35 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-174033-20170630125434.patch</filename>
            <type>text/plain</type>
            <size>69646</size>
            <attacher name="Chris Dumez">cdumez</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjE5MDA1CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggYzZkM2ZjMWQ2Y2I3MTcw
Njg5MDJjMjEwNjA5MTcwZTA2MDY1NmVmYi4uMGUwYTY5OTc5OTYzYTVlZTk5OGFjODlkYjM1MTNi
NmQ4MGNhYWIxOSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSw1ICsxLDIzIEBACiAyMDE3LTA2LTMwICBDaHJp
cyBEdW1leiAgPGNkdW1lekBhcHBsZS5jb20+CiAKKyAgICAgICAgTW92ZSBSZXNvdXJjZUxvYWRT
dGF0aXN0aWNzU3RvcmUgdG8gV2ViS2l0Mi9VSVByb2Nlc3MKKyAgICAgICAgaHR0cHM6Ly9idWdz
LndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE3NDAzMworCisgICAgICAgIFJldmlld2VkIGJ5
IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIE1vdmUgUmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0
b3JlIHRvIFdlYktpdDIvVUlQcm9jZXNzIHNpbmNlIGl0IGlzIG9ubHkKKyAgICAgICAgdXNlZCBp
biB0aGUgV2ViS2l0MiBVSVByb2Nlc3MuCisKKyAgICAgICAgKiBDTWFrZUxpc3RzLnR4dDoKKyAg
ICAgICAgKiBXZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2o6CisgICAgICAgICogbG9h
ZGVyL1Jlc291cmNlTG9hZE9ic2VydmVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OnByaW1hcnlE
b21haW4pOgorICAgICAgICAqIGxvYWRlci9SZXNvdXJjZUxvYWRTdGF0aXN0aWNzLmNwcDoKKyAg
ICAgICAgKFdlYkNvcmU6OlJlc291cmNlTG9hZFN0YXRpc3RpY3M6OnByaW1hcnlEb21haW4pOgor
ICAgICAgICAqIGxvYWRlci9SZXNvdXJjZUxvYWRTdGF0aXN0aWNzLmg6CisKKzIwMTctMDYtMzAg
IENocmlzIER1bWV6ICA8Y2R1bWV6QGFwcGxlLmNvbT4KKwogICAgICAgICBSZXNvdXJjZUxvYWRP
YnNlcnZlciBkb2VzIG5vdCBuZWVkIGEgUmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlCiAgICAg
ICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNzQwMTMKIApkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYktpdDIvQ2hhbmdlTG9nIGIvU291cmNlL1dlYktpdDIvQ2hhbmdl
TG9nCmluZGV4IGJkOWU2YjUxY2YzNWI5ODIwZTVlYTVkNTdjNTEwZjU1YTZhZGMxZDkuLmUyODhh
YjlkZDEzNTUyZDIwYzg4YWZhNTFmYzQ1NGFmNTAwZTU2NzAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJLaXQyL0NoYW5nZUxvZworKysgYi9Tb3VyY2UvV2ViS2l0Mi9DaGFuZ2VMb2cKQEAgLTEsNSAr
MSw0MCBAQAogMjAxNy0wNi0zMCAgQ2hyaXMgRHVtZXogIDxjZHVtZXpAYXBwbGUuY29tPgogCisg
ICAgICAgIE1vdmUgUmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlIHRvIFdlYktpdDIvVUlQcm9j
ZXNzCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNzQw
MzMKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBNb3Zl
IFJlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9yZSB0byBXZWJLaXQyL1VJUHJvY2VzcyBzaW5jZSBp
dCBpcyBvbmx5CisgICAgICAgIHVzZWQgaW4gdGhlIFdlYktpdDIgVUlQcm9jZXNzLgorCisgICAg
ICAgICogQ01ha2VMaXN0cy50eHQ6CisgICAgICAgICogVUlQcm9jZXNzL1N0b3JhZ2UvUmVzb3Vy
Y2VMb2FkU3RhdGlzdGljc1N0b3JlLmNwcDogUmVuYW1lZCBmcm9tIFNvdXJjZS9XZWJDb3JlL2xv
YWRlci9SZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3RvcmUuY3BwLgorICAgICAgICAoV2ViS2l0OjpS
ZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3RvcmU6OmNyZWF0ZUVuY29kZXJGcm9tRGF0YSk6CisgICAg
ICAgIChXZWJLaXQ6OlJlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9yZTo6cmVhZERhdGFGcm9tRGVj
b2Rlcik6CisgICAgICAgIChXZWJLaXQ6OlJlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9yZTo6Y2xl
YXJJbk1lbW9yeSk6CisgICAgICAgIChXZWJLaXQ6OlJlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9y
ZTo6Y2xlYXJJbk1lbW9yeUFuZFBlcnNpc3RlbnQpOgorICAgICAgICAoV2ViS2l0OjpSZXNvdXJj
ZUxvYWRTdGF0aXN0aWNzU3RvcmU6Om1lcmdlU3RhdGlzdGljcyk6CisgICAgICAgIChXZWJLaXQ6
OlJlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9yZTo6ZmlyZURhdGFNb2RpZmljYXRpb25IYW5kbGVy
KToKKyAgICAgICAgKFdlYktpdDo6UmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlOjpmaXJlVGVs
ZW1ldHJ5SGFuZGxlcik6CisgICAgICAgIChXZWJLaXQ6OlJlc291cmNlTG9hZFN0YXRpc3RpY3NT
dG9yZTo6ZmlyZVNob3VsZFBhcnRpdGlvbkNvb2tpZXNIYW5kbGVyKToKKyAgICAgICAgKFdlYktp
dDo6UmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlOjpwcm9jZXNzU3RhdGlzdGljcyk6CisgICAg
ICAgIChXZWJLaXQ6OlJlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9yZTo6c29ydGVkUHJldmFsZW50
UmVzb3VyY2VUZWxlbWV0cnkpOgorICAgICAgICAoV2ViS2l0OjpSZXNvdXJjZUxvYWRTdGF0aXN0
aWNzU3RvcmU6OnNob3VsZFJlbW92ZURhdGFSZWNvcmRzKToKKyAgICAgICAgKFdlYktpdDo6UmVz
b3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlOjpkYXRhUmVjb3Jkc0JlaW5nUmVtb3ZlZCk6CisgICAg
ICAgIChXZWJLaXQ6OlJlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9yZTo6ZGF0YVJlY29yZHNXZXJl
UmVtb3ZlZCk6CisgICAgICAgIChXZWJLaXQ6OlJlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9yZTo6
c3RhdGlzdGljc0xvY2spOgorICAgICAgICAqIFVJUHJvY2Vzcy9TdG9yYWdlL1Jlc291cmNlTG9h
ZFN0YXRpc3RpY3NTdG9yZS5oOiBSZW5hbWVkIGZyb20gU291cmNlL1dlYkNvcmUvbG9hZGVyL1Jl
c291cmNlTG9hZFN0YXRpc3RpY3NTdG9yZS5oLgorICAgICAgICAqIFVJUHJvY2Vzcy9XZWJSZXNv
dXJjZUxvYWRTdGF0aXN0aWNzTWFuYWdlci5jcHA6CisgICAgICAgIChXZWJLaXQ6OnByaW1hcnlE
b21haW4pOgorICAgICAgICAqIFVJUHJvY2Vzcy9XZWJSZXNvdXJjZUxvYWRTdGF0aXN0aWNzTWFu
YWdlci5oOgorICAgICAgICAqIFVJUHJvY2Vzcy9XZWJSZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3Rv
cmUuaDoKKyAgICAgICAgKiBVSVByb2Nlc3MvV2ViUmVzb3VyY2VMb2FkU3RhdGlzdGljc1RlbGVt
ZXRyeS5jcHA6CisgICAgICAgICogVUlQcm9jZXNzL1dlYlJlc291cmNlTG9hZFN0YXRpc3RpY3NU
ZWxlbWV0cnkuaDoKKyAgICAgICAgKiBXZWJLaXQyLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2o6
CisKKzIwMTctMDYtMzAgIENocmlzIER1bWV6ICA8Y2R1bWV6QGFwcGxlLmNvbT4KKwogICAgICAg
ICBSZXNvdXJjZUxvYWRPYnNlcnZlciBkb2VzIG5vdCBuZWVkIGEgUmVzb3VyY2VMb2FkU3RhdGlz
dGljc1N0b3JlCiAgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9p
ZD0xNzQwMTMKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvQ01ha2VMaXN0cy50eHQgYi9T
b3VyY2UvV2ViQ29yZS9DTWFrZUxpc3RzLnR4dAppbmRleCAzN2ZkODk2ZmNlOGQ4YWU3NzY4ODc1
ODc3MjUwODEzMWU4NzM0ZjA1Li5jZTdiMTY4ZWZiNDczNmM2MGVjMWE3NjkwOTEwZjRlOWUwY2Q0
ZTBjIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9DTWFrZUxpc3RzLnR4dAorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9DTWFrZUxpc3RzLnR4dApAQCAtMTk3Niw3ICsxOTc2LDYgQEAgc2V0KFdlYkNv
cmVfU09VUkNFUwogICAgIGxvYWRlci9SZXNvdXJjZUxvYWROb3RpZmllci5jcHAKICAgICBsb2Fk
ZXIvUmVzb3VyY2VMb2FkT2JzZXJ2ZXIuY3BwCiAgICAgbG9hZGVyL1Jlc291cmNlTG9hZFN0YXRp
c3RpY3MuY3BwCi0gICAgbG9hZGVyL1Jlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9yZS5jcHAKICAg
ICBsb2FkZXIvUmVzb3VyY2VMb2FkZXIuY3BwCiAgICAgbG9hZGVyL1Jlc291cmNlVGltaW5nLmNw
cAogICAgIGxvYWRlci9SZXNvdXJjZVRpbWluZ0luZm9ybWF0aW9uLmNwcApkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qIGIvU291cmNl
L1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCmluZGV4IDJjMzg2MzBm
MDE1NTg2MjExMjM5NzQ2YjRlZjgyNzVkYTIyZWQ0YjkuLjBkMmFjZWUyNjA1YzNjM2JkMzk5NTRk
MGIzNTA2YWE0MmRkMDhlMGQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNv
ZGVwcm9qL3Byb2plY3QucGJ4cHJvagorKysgYi9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhjb2Rl
cHJvai9wcm9qZWN0LnBieHByb2oKQEAgLTMxMTAsOCArMzExMCw2IEBACiAJCTdBQjBCMUMxMTIx
MUE2MjIwMEE3Njk0MCAvKiBJbnNwZWN0b3JEYXRhYmFzZUFnZW50LmggaW4gSGVhZGVycyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA3QUIwQjFCRjEyMTFBNjIyMDBBNzY5NDAg
LyogSW5zcGVjdG9yRGF0YWJhc2VBZ2VudC5oICovOyB9OwogCQk3QUNEODhEMzE0QzA4QkQ2MDA4
NEVERDIgLyogSW5zcGVjdG9ySW5kZXhlZERCQWdlbnQuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gN0FDRDg4RDExNEMwOEJENjAwODRFREQyIC8qIElu
c3BlY3RvckluZGV4ZWREQkFnZW50LmNwcCAqLzsgfTsKIAkJN0FDRDg4RDQxNEMwOEJENjAwODRF
REQyIC8qIEluc3BlY3RvckluZGV4ZWREQkFnZW50LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA3QUNEODhEMjE0QzA4QkQ2MDA4NEVERDIgLyogSW5zcGVj
dG9ySW5kZXhlZERCQWdlbnQuaCAqLzsgfTsKLQkJN0FEM0NERDkxQzhBMDAyRjAwRjEyNjk4IC8q
IFJlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9yZS5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA3QTdDQzgzNjFDODc1MDY4MDAzNjYyNDMgLyogUmVzb3Vy
Y2VMb2FkU3RhdGlzdGljc1N0b3JlLmNwcCAqLzsgfTsKLQkJN0FEM0NEREExQzhBMDFBNDAwRjEy
Njk4IC8qIFJlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9yZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gN0E3Q0M4MzcxQzg3NTA2ODAwMzY2MjQzIC8qIFJl
c291cmNlTG9hZFN0YXRpc3RpY3NTdG9yZS5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0g
KFByaXZhdGUsICk7IH07IH07CiAJCTdBREU3MjI2MTBDQkJCOUIwMDZCM0IzQSAvKiBDb250ZXh0
TWVudVByb3ZpZGVyLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVS
ZWYgPSA3QURFNzIyNTEwQ0JCQjlCMDA2QjNCM0EgLyogQ29udGV4dE1lbnVQcm92aWRlci5oICov
OyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTdBRTMzNUYx
MUFDQjA5RTIwMEU0MDFFRiAvKiBXaGVlbEV2ZW50VGVzdFRyaWdnZXIuY3BwIGluIFNvdXJjZXMg
Ki8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gN0FFMzM1RUYxQUNCMDlFMjAwRTQw
MUVGIC8qIFdoZWVsRXZlbnRUZXN0VHJpZ2dlci5jcHAgKi87IH07CiAJCTdBRTMzNUYyMUFDQjA5
RTIwMEU0MDFFRiAvKiBXaGVlbEV2ZW50VGVzdFRyaWdnZXIuaCBpbiBIZWFkZXJzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDdBRTMzNUYwMUFDQjA5RTIwMEU0MDFFRiAvKiBX
aGVlbEV2ZW50VGVzdFRyaWdnZXIuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2
YXRlLCApOyB9OyB9OwpAQCAtMTExNTUsOCArMTExNTMsNiBAQAogCQk3QTc0RUNCODEwMTgzOUE1
MDBCRjkzOUUgLyogSW5zcGVjdG9yRE9NU3RvcmFnZUFnZW50LmNwcCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEluc3BlY3RvckRPTVN0b3JhZ2VBZ2VudC5jcHA7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTdBNzRFQ0I5MTAxODM5QTYwMEJGOTM5RSAvKiBJbnNw
ZWN0b3JET01TdG9yYWdlQWdlbnQuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0g
SW5zcGVjdG9yRE9NU3RvcmFnZUFnZW50Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJ
CTdBNzRFQ0JDMTAxODM5REEwMEJGOTM5RSAvKiBKU0luc3BlY3RvckZyb250ZW5kSG9zdEN1c3Rv
bS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBKU0luc3BlY3RvckZy
b250ZW5kSG9zdEN1c3RvbS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCTdBN0ND
ODM2MUM4NzUwNjgwMDM2NjI0MyAvKiBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3RvcmUuY3BwICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gUmVzb3VyY2VMb2FkU3RhdGlzdGlj
c1N0b3JlLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJN0E3Q0M4MzcxQzg3NTA2
ODAwMzY2MjQzIC8qIFJlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9yZS5oICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jLmg7IHBhdGggPSBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3RvcmUuaDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJN0E5MjlDQTExQzU5ODM3ODAwNERGMjI2IC8qIFJlc291
cmNlTG9hZFN0YXRpc3RpY3MuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVF
bmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRo
ID0gUmVzb3VyY2VMb2FkU3RhdGlzdGljcy5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CiAJCTdBOTI5Q0EyMUM1OTgzNzgwMDRERjIyNiAvKiBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzLmgg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFJlc291cmNlTG9hZFN0YXRpc3RpY3Mu
aDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJN0E5Mzg2ODIxOERDQzE0NTAwQjgyNjNE
IC8qIFZUVFNjYW5uZXIuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0g
VlRUU2Nhbm5lci5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC0yNDAwMiw4ICsy
Mzk5OCw2IEBACiAJCQkJNkI2OTNBMkQxQzUxQTgyRTAwQjAzQkVGIC8qIFJlc291cmNlTG9hZE9i
c2VydmVyLmggKi8sCiAJCQkJN0E5MjlDQTExQzU5ODM3ODAwNERGMjI2IC8qIFJlc291cmNlTG9h
ZFN0YXRpc3RpY3MuY3BwICovLAogCQkJCTdBOTI5Q0EyMUM1OTgzNzgwMDRERjIyNiAvKiBSZXNv
dXJjZUxvYWRTdGF0aXN0aWNzLmggKi8sCi0JCQkJN0E3Q0M4MzYxQzg3NTA2ODAwMzY2MjQzIC8q
IFJlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9yZS5jcHAgKi8sCi0JCQkJN0E3Q0M4MzcxQzg3NTA2
ODAwMzY2MjQzIC8qIFJlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9yZS5oICovLAogCQkJCUE1Q0U5
RjNFMUU0QzQxNkIwMDFCQkU3QyAvKiBSZXNvdXJjZVRpbWluZy5jcHAgKi8sCiAJCQkJQTVDRTlG
M0MxRTRCQzU4NjAwMUJCRTdDIC8qIFJlc291cmNlVGltaW5nLmggKi8sCiAJCQkJQ0JDMkQyMkQx
Q0U1Qjc3NDAwRDE4ODBCIC8qIFJlc291cmNlVGltaW5nSW5mb3JtYXRpb24uY3BwICovLApAQCAt
MjkzNDAsNyArMjkzMzQsNiBAQAogCQkJCTZCNjkzQTJFMUM1MUE4MkUwMEIwM0JFRiAvKiBSZXNv
dXJjZUxvYWRPYnNlcnZlci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJRTQyOTVGQTQxMkIwNjE0RTAw
RDFBQ0UwIC8qIFJlc291cmNlTG9hZFByaW9yaXR5LmggaW4gSGVhZGVycyAqLywKIAkJCQk3QTky
OUNBNzFDNTk4QUE5MDA0REYyMjYgLyogUmVzb3VyY2VMb2FkU3RhdGlzdGljcy5oIGluIEhlYWRl
cnMgKi8sCi0JCQkJN0FEM0NEREExQzhBMDFBNDAwRjEyNjk4IC8qIFJlc291cmNlTG9hZFN0YXRp
c3RpY3NTdG9yZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJN0VFNjg0NkQxMkQyNkUzODAwRTc5NDE1
IC8qIFJlc291cmNlUmVxdWVzdC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJNTE0Qzc2N0QwQ0U5MjNB
MTAwN0VGM0NEIC8qIFJlc291cmNlUmVxdWVzdEJhc2UuaCBpbiBIZWFkZXJzICovLAogCQkJCTdF
RTY4NDZGMTJEMjZFMzgwMEU3OTQxNSAvKiBSZXNvdXJjZVJlcXVlc3RDRk5ldC5oIGluIEhlYWRl
cnMgKi8sCkBAIC0zMzIyNCw3ICszMzIxNyw2IEBACiAJCQkJOTczRTMyNTYxMDg4M0I3QzAwNUJD
NDkzIC8qIFJlc291cmNlTG9hZE5vdGlmaWVyLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTZCNjkz
QTM0MUM1MUE5NUQwMEIwM0JFRiAvKiBSZXNvdXJjZUxvYWRPYnNlcnZlci5jcHAgaW4gU291cmNl
cyAqLywKIAkJCQk3QTkyOUNBNjFDNTk4QTlFMDA0REYyMjYgLyogUmVzb3VyY2VMb2FkU3RhdGlz
dGljcy5jcHAgaW4gU291cmNlcyAqLywKLQkJCQk3QUQzQ0REOTFDOEEwMDJGMDBGMTI2OTggLyog
UmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTUxNEM3
NjdDMENFOTIzQTEwMDdFRjNDRCAvKiBSZXNvdXJjZVJlcXVlc3RCYXNlLmNwcCBpbiBTb3VyY2Vz
ICovLAogCQkJCTdFRTY4NDZFMTJEMjZFMzgwMEU3OTQxNSAvKiBSZXNvdXJjZVJlcXVlc3RDRk5l
dC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk3RTdERTFGRDE5NUNFRjI2MDAzNTM2M0IgLyogUmVz
b3VyY2VSZXF1ZXN0Q29jb2EubW0gaW4gU291cmNlcyAqLywKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL2xvYWRlci9SZXNvdXJjZUxvYWRPYnNlcnZlci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9s
b2FkZXIvUmVzb3VyY2VMb2FkT2JzZXJ2ZXIuY3BwCmluZGV4IDE3YzJkMTYzYTViZjU3YWViMzk2
NTQzMmIxYWYxM2IzMzY2MTkwMWMuLmQyN2E2YTFkNWM1OTQ2NzdlOTFmZDNlYWFiNGI0OGRhMzI2
MzkzOWIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2xvYWRlci9SZXNvdXJjZUxvYWRPYnNl
cnZlci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvbG9hZGVyL1Jlc291cmNlTG9hZE9ic2VydmVy
LmNwcApAQCAtMzEsNyArMzEsNyBAQAogI2luY2x1ZGUgIkxvZ2dpbmcuaCIKICNpbmNsdWRlICJN
YWluRnJhbWUuaCIKICNpbmNsdWRlICJQYWdlLmgiCi0jaW5jbHVkZSAiUmVzb3VyY2VMb2FkU3Rh
dGlzdGljc1N0b3JlLmgiCisjaW5jbHVkZSAiUmVzb3VyY2VMb2FkU3RhdGlzdGljcy5oIgogI2lu
Y2x1ZGUgIlJlc291cmNlUmVxdWVzdC5oIgogI2luY2x1ZGUgIlJlc291cmNlUmVzcG9uc2UuaCIK
ICNpbmNsdWRlICJTZWN1cml0eU9yaWdpbi5oIgpAQCAtNDMsNyArNDMsNyBAQCBuYW1lc3BhY2Ug
V2ViQ29yZSB7CiAKIHRlbXBsYXRlPHR5cGVuYW1lIFQ+IHN0YXRpYyBpbmxpbmUgU3RyaW5nIHBy
aW1hcnlEb21haW4oY29uc3QgVCYgdmFsdWUpCiB7Ci0gICAgcmV0dXJuIFJlc291cmNlTG9hZFN0
YXRpc3RpY3NTdG9yZTo6cHJpbWFyeURvbWFpbih2YWx1ZSk7CisgICAgcmV0dXJuIFJlc291cmNl
TG9hZFN0YXRpc3RpY3M6OnByaW1hcnlEb21haW4odmFsdWUpOwogfQogCiBzdGF0aWMgU2Vjb25k
cyB0aW1lc3RhbXBSZXNvbHV0aW9uIHsgMV9oIH07CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9sb2FkZXIvUmVzb3VyY2VMb2FkU3RhdGlzdGljcy5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9sb2Fk
ZXIvUmVzb3VyY2VMb2FkU3RhdGlzdGljcy5jcHAKaW5kZXggZWVmYTVhZmVlNjJiMTEwOTliOTYz
OTk5ZmNhOGIwZDdhOTQ4MTUyMi4uMjUxNTkxYzgyN2UzMzU5NjE3ZDUyZTJkNGQyYmEwNDhkZWQ0
MjAzYyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvbG9hZGVyL1Jlc291cmNlTG9hZFN0YXRp
c3RpY3MuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2xvYWRlci9SZXNvdXJjZUxvYWRTdGF0aXN0
aWNzLmNwcApAQCAtMjcsNiArMjcsNyBAQAogI2luY2x1ZGUgIlJlc291cmNlTG9hZFN0YXRpc3Rp
Y3MuaCIKIAogI2luY2x1ZGUgIktleWVkQ29kaW5nLmgiCisjaW5jbHVkZSAiUHVibGljU3VmZml4
LmgiCiAjaW5jbHVkZSA8d3RmL3RleHQvU3RyaW5nQnVpbGRlci5oPgogI2luY2x1ZGUgPHd0Zi90
ZXh0L1N0cmluZ0hhc2guaD4KIApAQCAtMzY0LDQgKzM2NSwyNCBAQCB2b2lkIFJlc291cmNlTG9h
ZFN0YXRpc3RpY3M6Om1lcmdlKGNvbnN0IFJlc291cmNlTG9hZFN0YXRpc3RpY3MmIG90aGVyKQog
ICAgIGlzTWFya2VkRm9yQ29va2llUGFydGl0aW9uaW5nIHw9IG90aGVyLmlzTWFya2VkRm9yQ29v
a2llUGFydGl0aW9uaW5nOwogfQogCitTdHJpbmcgUmVzb3VyY2VMb2FkU3RhdGlzdGljczo6cHJp
bWFyeURvbWFpbihjb25zdCBVUkwmIHVybCkKK3sKKyAgICByZXR1cm4gcHJpbWFyeURvbWFpbih1
cmwuaG9zdCgpKTsKK30KKworU3RyaW5nIFJlc291cmNlTG9hZFN0YXRpc3RpY3M6OnByaW1hcnlE
b21haW4oY29uc3QgU3RyaW5nJiBob3N0KQoreworICAgIGlmIChob3N0LmlzTnVsbCgpIHx8IGhv
c3QuaXNFbXB0eSgpKQorICAgICAgICByZXR1cm4gQVNDSUlMaXRlcmFsKCJudWxsT3JpZ2luIik7
CisKKyNpZiBFTkFCTEUoUFVCTElDX1NVRkZJWF9MSVNUKQorICAgIFN0cmluZyBwcmltYXJ5RG9t
YWluID0gdG9wUHJpdmF0ZWx5Q29udHJvbGxlZERvbWFpbihob3N0KTsKKyAgICAvLyBXZSB3aWxs
IGhhdmUgYW4gZW1wdHkgc3RyaW5nIGhlcmUgaWYgdGhlcmUgaXMgbm8gVExELiBVc2UgdGhlIGhv
c3QgYXMgYSBmYWxsYmFjay4KKyAgICBpZiAoIXByaW1hcnlEb21haW4uaXNFbXB0eSgpKQorICAg
ICAgICByZXR1cm4gcHJpbWFyeURvbWFpbjsKKyNlbmRpZgorCisgICAgcmV0dXJuIGhvc3Q7Cit9
CisKIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2xvYWRlci9SZXNvdXJjZUxvYWRTdGF0
aXN0aWNzLmggYi9Tb3VyY2UvV2ViQ29yZS9sb2FkZXIvUmVzb3VyY2VMb2FkU3RhdGlzdGljcy5o
CmluZGV4IGViZTY4OTUyNDMxYzViZjAwNDc4Yjg2YTUzYmQ1NDJlNGRjZmQ3YzUuLmFlMzM2MDgz
ZDE4MDY4MzQ4ZGVlMmE4ZmNkZTEwYThmM2EwODA5ZjcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJD
b3JlL2xvYWRlci9SZXNvdXJjZUxvYWRTdGF0aXN0aWNzLmgKKysrIGIvU291cmNlL1dlYkNvcmUv
bG9hZGVyL1Jlc291cmNlTG9hZFN0YXRpc3RpY3MuaApAQCAtMjUsNiArMjUsNyBAQAogCiAjcHJh
Z21hIG9uY2UKIAorI2luY2x1ZGUgIlVSTC5oIgogI2luY2x1ZGUgPHd0Zi9IYXNoQ291bnRlZFNl
dC5oPgogI2luY2x1ZGUgPHd0Zi9XYWxsVGltZS5oPgogI2luY2x1ZGUgPHd0Zi90ZXh0L1N0cmlu
Z0hhc2guaD4KQEAgLTQ4LDEyICs0OSwxNSBAQCBzdHJ1Y3QgUmVzb3VyY2VMb2FkU3RhdGlzdGlj
cyB7CiAgICAgUmVzb3VyY2VMb2FkU3RhdGlzdGljcyhSZXNvdXJjZUxvYWRTdGF0aXN0aWNzJiYp
ID0gZGVmYXVsdDsKICAgICBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzJiBvcGVyYXRvcj0oUmVzb3Vy
Y2VMb2FkU3RhdGlzdGljcyYmKSA9IGRlZmF1bHQ7CiAKLSAgICB2b2lkIGVuY29kZShLZXllZEVu
Y29kZXImKSBjb25zdDsKLSAgICBib29sIGRlY29kZShLZXllZERlY29kZXImLCB1bnNpZ25lZCB2
ZXJzaW9uKTsKKyAgICBXRUJDT1JFX0VYUE9SVCBzdGF0aWMgU3RyaW5nIHByaW1hcnlEb21haW4o
Y29uc3QgVVJMJik7CisgICAgV0VCQ09SRV9FWFBPUlQgc3RhdGljIFN0cmluZyBwcmltYXJ5RG9t
YWluKGNvbnN0IFN0cmluZyYgaG9zdCk7CisKKyAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIGVuY29k
ZShLZXllZEVuY29kZXImKSBjb25zdDsKKyAgICBXRUJDT1JFX0VYUE9SVCBib29sIGRlY29kZShL
ZXllZERlY29kZXImLCB1bnNpZ25lZCB2ZXJzaW9uKTsKIAogICAgIFN0cmluZyB0b1N0cmluZygp
IGNvbnN0OwogCi0gICAgdm9pZCBtZXJnZShjb25zdCBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzJik7
CisgICAgV0VCQ09SRV9FWFBPUlQgdm9pZCBtZXJnZShjb25zdCBSZXNvdXJjZUxvYWRTdGF0aXN0
aWNzJik7CiAKICAgICBTdHJpbmcgaGlnaExldmVsRG9tYWluOwogCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9sb2FkZXIvUmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlLmNwcCBiL1NvdXJj
ZS9XZWJDb3JlL2xvYWRlci9SZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3RvcmUuY3BwCmRlbGV0ZWQg
ZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyNzVlNDEzMjU5NzA5MzY1YTI2MzU5M2JlMjI3ZGE5ZmNh
NjY4MmFlLi4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1Nv
dXJjZS9XZWJDb3JlL2xvYWRlci9SZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3RvcmUuY3BwCisrKyAv
ZGV2L251bGwKQEAgLTEsNDQ3ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTYtMjAx
NyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24g
YW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBt
b2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNv
bmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNv
ZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVk
aXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5
cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVy
IG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBT
T0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBg
QVMgSVMnJwotICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1F
UkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFS
RSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklC
VVRPUlMKLSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUws
IFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCi0gKiBTVUJTVElUVVRFIEdP
T0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5F
U1MKLSAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0Yg
TElBQklMSVRZLCBXSEVUSEVSIElOCi0gKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1Ig
VE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotICogQVJJU0lORyBJTiBB
TlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBP
RgotICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLSNpbmNsdWRlICJj
b25maWcuaCIKLSNpbmNsdWRlICJSZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3RvcmUuaCIKLQotI2lu
Y2x1ZGUgIktleWVkQ29kaW5nLmgiCi0jaW5jbHVkZSAiTG9nZ2luZy5oIgotI2luY2x1ZGUgIk5l
dHdvcmtTdG9yYWdlU2Vzc2lvbi5oIgotI2luY2x1ZGUgIlBsYXRmb3JtU3RyYXRlZ2llcy5oIgot
I2luY2x1ZGUgIlB1YmxpY1N1ZmZpeC5oIgotI2luY2x1ZGUgIlJlc291cmNlTG9hZFN0YXRpc3Rp
Y3MuaCIKLSNpbmNsdWRlICJTaGFyZWRCdWZmZXIuaCIKLSNpbmNsdWRlICJVUkwuaCIKLSNpbmNs
dWRlIDx3dGYvQ3Jvc3NUaHJlYWRDb3BpZXIuaD4KLSNpbmNsdWRlIDx3dGYvTWFpblRocmVhZC5o
PgotI2luY2x1ZGUgPHd0Zi9OZXZlckRlc3Ryb3llZC5oPgotI2luY2x1ZGUgPHd0Zi9SdW5Mb29w
Lmg+Ci0KLW5hbWVzcGFjZSBXZWJDb3JlIHsKLQotc3RhdGljIGNvbnN0IGF1dG8gc3RhdGlzdGlj
c01vZGVsVmVyc2lvbiA9IDQ7Ci1zdGF0aWMgU2Vjb25kcyB0aW1lVG9MaXZlVXNlckludGVyYWN0
aW9uIHsgMjRfaCAqIDMwLiB9Owotc3RhdGljIFNlY29uZHMgdGltZVRvTGl2ZUNvb2tpZVBhcnRp
dGlvbkZyZWUgeyAyNF9oIH07Ci1zdGF0aWMgU2Vjb25kcyBncmFuZGZhdGhlcmluZ1RpbWUgeyAx
X2ggfTsKLXN0YXRpYyBTZWNvbmRzIG1pbmltdW1UaW1lQmV0d2VlZW5EYXRhUmVjb3Jkc1JlbW92
YWwgeyAxX2ggfTsKLQotUmVmPFJlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9yZT4gUmVzb3VyY2VM
b2FkU3RhdGlzdGljc1N0b3JlOjpjcmVhdGUoKQotewotICAgIHJldHVybiBhZG9wdFJlZigqbmV3
IFJlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9yZSgpKTsKLX0KLSAgICAKLWJvb2wgUmVzb3VyY2VM
b2FkU3RhdGlzdGljc1N0b3JlOjppc1ByZXZhbGVudFJlc291cmNlKGNvbnN0IFN0cmluZyYgcHJp
bWFyeURvbWFpbikgY29uc3QKLXsKLSAgICBhdXRvIGxvY2tlciA9IGhvbGRMb2NrKG1fc3RhdGlz
dGljc0xvY2spOwotICAgIGF1dG8gbWFwRW50cnkgPSBtX3Jlc291cmNlU3RhdGlzdGljc01hcC5m
aW5kKHByaW1hcnlEb21haW4pOwotICAgIGlmIChtYXBFbnRyeSA9PSBtX3Jlc291cmNlU3RhdGlz
dGljc01hcC5lbmQoKSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgcmV0dXJuIG1hcEVu
dHJ5LT52YWx1ZS5pc1ByZXZhbGVudFJlc291cmNlOwotfQotICAgIAotUmVzb3VyY2VMb2FkU3Rh
dGlzdGljcyYgUmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlOjplbnN1cmVSZXNvdXJjZVN0YXRp
c3RpY3NGb3JQcmltYXJ5RG9tYWluKGNvbnN0IFN0cmluZyYgcHJpbWFyeURvbWFpbikKLXsKLSAg
ICBBU1NFUlQobV9zdGF0aXN0aWNzTG9jay5pc0xvY2tlZCgpKTsKLSAgICBhdXRvIGFkZFJlc3Vs
dCA9IG1fcmVzb3VyY2VTdGF0aXN0aWNzTWFwLmVuc3VyZShwcmltYXJ5RG9tYWluLCBbJnByaW1h
cnlEb21haW5dIHsKLSAgICAgICAgcmV0dXJuIFJlc291cmNlTG9hZFN0YXRpc3RpY3MocHJpbWFy
eURvbWFpbik7Ci0gICAgfSk7Ci0KLSAgICByZXR1cm4gYWRkUmVzdWx0Lml0ZXJhdG9yLT52YWx1
ZTsKLX0KLQotdHlwZWRlZiBIYXNoTWFwPFN0cmluZywgUmVzb3VyY2VMb2FkU3RhdGlzdGljcz46
OktleVZhbHVlUGFpclR5cGUgU3RhdGlzdGljc1ZhbHVlOwotCi1zdGQ6OnVuaXF1ZV9wdHI8S2V5
ZWRFbmNvZGVyPiBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3RvcmU6OmNyZWF0ZUVuY29kZXJGcm9t
RGF0YSgpCi17Ci0gICAgQVNTRVJUKCFpc01haW5UaHJlYWQoKSk7Ci0gICAgYXV0byBlbmNvZGVy
ID0gS2V5ZWRFbmNvZGVyOjplbmNvZGVyKCk7Ci0KLSAgICBhdXRvIGxvY2tlciA9IGhvbGRMb2Nr
KG1fc3RhdGlzdGljc0xvY2spOwotICAgIGVuY29kZXItPmVuY29kZVVJbnQzMigidmVyc2lvbiIs
IHN0YXRpc3RpY3NNb2RlbFZlcnNpb24pOwotICAgIGVuY29kZXItPmVuY29kZURvdWJsZSgiZW5k
T2ZHcmFuZGZhdGhlcmluZ1RpbWVzdGFtcCIsIG1fZW5kT2ZHcmFuZGZhdGhlcmluZ1RpbWVzdGFt
cC5zZWNvbmRzU2luY2VFcG9jaCgpLnZhbHVlKCkpOwotICAgIAotICAgIGVuY29kZXItPmVuY29k
ZU9iamVjdHMoImJyb3dzaW5nU3RhdGlzdGljcyIsIG1fcmVzb3VyY2VTdGF0aXN0aWNzTWFwLmJl
Z2luKCksIG1fcmVzb3VyY2VTdGF0aXN0aWNzTWFwLmVuZCgpLCBbXShLZXllZEVuY29kZXImIGVu
Y29kZXJJbm5lciwgY29uc3QgU3RhdGlzdGljc1ZhbHVlJiBvcmlnaW4pIHsKLSAgICAgICAgb3Jp
Z2luLnZhbHVlLmVuY29kZShlbmNvZGVySW5uZXIpOwotICAgIH0pOwotCi0gICAgcmV0dXJuIGVu
Y29kZXI7Ci19Ci0KLXZvaWQgUmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlOjpyZWFkRGF0YUZy
b21EZWNvZGVyKEtleWVkRGVjb2RlciYgZGVjb2RlcikKLXsKLSAgICBBU1NFUlQoIWlzTWFpblRo
cmVhZCgpKTsKLSAgICBBU1NFUlQobV9zdGF0aXN0aWNzTG9jay5pc0xvY2tlZCgpKTsKLSAgICBp
ZiAobV9yZXNvdXJjZVN0YXRpc3RpY3NNYXAuc2l6ZSgpKQotICAgICAgICByZXR1cm47Ci0KLSAg
ICB1bnNpZ25lZCB2ZXJzaW9uOwotICAgIGlmICghZGVjb2Rlci5kZWNvZGVVSW50MzIoInZlcnNp
b24iLCB2ZXJzaW9uKSkKLSAgICAgICAgdmVyc2lvbiA9IDE7Ci0KLSAgICBzdGF0aWMgY29uc3Qg
YXV0byBtaW5pbXVtVmVyc2lvbldpdGhHcmFuZGZhdGhlcmluZyA9IDM7Ci0gICAgaWYgKHZlcnNp
b24gPiBtaW5pbXVtVmVyc2lvbldpdGhHcmFuZGZhdGhlcmluZykgewotICAgICAgICBkb3VibGUg
ZW5kT2ZHcmFuZGZhdGhlcmluZ1RpbWVzdGFtcDsKLSAgICAgICAgaWYgKGRlY29kZXIuZGVjb2Rl
RG91YmxlKCJlbmRPZkdyYW5kZmF0aGVyaW5nVGltZXN0YW1wIiwgZW5kT2ZHcmFuZGZhdGhlcmlu
Z1RpbWVzdGFtcCkpCi0gICAgICAgICAgICBtX2VuZE9mR3JhbmRmYXRoZXJpbmdUaW1lc3RhbXAg
PSBXYWxsVGltZTo6ZnJvbVJhd1NlY29uZHMoZW5kT2ZHcmFuZGZhdGhlcmluZ1RpbWVzdGFtcCk7
Ci0gICAgICAgIGVsc2UKLSAgICAgICAgICAgIG1fZW5kT2ZHcmFuZGZhdGhlcmluZ1RpbWVzdGFt
cCA9IHsgfTsKLSAgICB9Ci0KLSAgICBWZWN0b3I8UmVzb3VyY2VMb2FkU3RhdGlzdGljcz4gbG9h
ZGVkU3RhdGlzdGljczsKLSAgICBib29sIHN1Y2NlZWRlZCA9IGRlY29kZXIuZGVjb2RlT2JqZWN0
cygiYnJvd3NpbmdTdGF0aXN0aWNzIiwgbG9hZGVkU3RhdGlzdGljcywgW3ZlcnNpb25dKEtleWVk
RGVjb2RlciYgZGVjb2RlcklubmVyLCBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzJiBzdGF0aXN0aWNz
KSB7Ci0gICAgICAgIHJldHVybiBzdGF0aXN0aWNzLmRlY29kZShkZWNvZGVySW5uZXIsIHZlcnNp
b24pOwotICAgIH0pOwotCi0gICAgaWYgKCFzdWNjZWVkZWQpCi0gICAgICAgIHJldHVybjsKLQot
ICAgIFZlY3RvcjxTdHJpbmc+IHByZXZhbGVudFJlc291cmNlRG9tYWluc1dpdGhvdXRVc2VySW50
ZXJhY3Rpb247Ci0gICAgcHJldmFsZW50UmVzb3VyY2VEb21haW5zV2l0aG91dFVzZXJJbnRlcmFj
dGlvbi5yZXNlcnZlSW5pdGlhbENhcGFjaXR5KGxvYWRlZFN0YXRpc3RpY3Muc2l6ZSgpKTsKLSAg
ICAKLSAgICB7Ci0gICAgICAgIGF1dG8gbG9ja2VyID0gaG9sZExvY2sobV9zdGF0aXN0aWNzTG9j
ayk7Ci0gICAgICAgIGZvciAoYXV0byYgc3RhdGlzdGljcyA6IGxvYWRlZFN0YXRpc3RpY3MpIHsK
LSAgICAgICAgICAgIGlmIChzdGF0aXN0aWNzLmlzUHJldmFsZW50UmVzb3VyY2UgJiYgIXN0YXRp
c3RpY3MuaGFkVXNlckludGVyYWN0aW9uKSB7Ci0gICAgICAgICAgICAgICAgcHJldmFsZW50UmVz
b3VyY2VEb21haW5zV2l0aG91dFVzZXJJbnRlcmFjdGlvbi51bmNoZWNrZWRBcHBlbmQoc3RhdGlz
dGljcy5oaWdoTGV2ZWxEb21haW4pOwotICAgICAgICAgICAgICAgIHN0YXRpc3RpY3MuaXNNYXJr
ZWRGb3JDb29raWVQYXJ0aXRpb25pbmcgPSB0cnVlOwotICAgICAgICAgICAgfQotICAgICAgICAg
ICAgbV9yZXNvdXJjZVN0YXRpc3RpY3NNYXAuc2V0KHN0YXRpc3RpY3MuaGlnaExldmVsRG9tYWlu
LCBXVEZNb3ZlKHN0YXRpc3RpY3MpKTsKLSAgICAgICAgfQotICAgIH0KLSAgICAKLSAgICBmaXJl
U2hvdWxkUGFydGl0aW9uQ29va2llc0hhbmRsZXIoeyB9LCBwcmV2YWxlbnRSZXNvdXJjZURvbWFp
bnNXaXRob3V0VXNlckludGVyYWN0aW9uLCB0cnVlKTsKLX0KLQotdm9pZCBSZXNvdXJjZUxvYWRT
dGF0aXN0aWNzU3RvcmU6OmNsZWFySW5NZW1vcnkoKQotewotICAgIEFTU0VSVCghaXNNYWluVGhy
ZWFkKCkpOwotICAgIHsKLSAgICBhdXRvIGxvY2tlciA9IGhvbGRMb2NrKG1fc3RhdGlzdGljc0xv
Y2spOwotICAgIG1fcmVzb3VyY2VTdGF0aXN0aWNzTWFwLmNsZWFyKCk7Ci0gICAgfQotICAgIAot
ICAgIGZpcmVTaG91bGRQYXJ0aXRpb25Db29raWVzSGFuZGxlcih7IH0sIHsgfSwgdHJ1ZSk7Ci19
Ci0KLXZvaWQgUmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlOjpjbGVhckluTWVtb3J5QW5kUGVy
c2lzdGVudCgpCi17Ci0gICAgQVNTRVJUKCFpc01haW5UaHJlYWQoKSk7Ci0gICAgY2xlYXJJbk1l
bW9yeSgpOwotICAgIGlmIChtX2RlbGV0ZVBlcnNpc3RlbnRTdG9yZUhhbmRsZXIpCi0gICAgICAg
IG1fZGVsZXRlUGVyc2lzdGVudFN0b3JlSGFuZGxlcigpOwotICAgIGlmIChtX2dyYW5kZmF0aGVy
RXhpc3RpbmdXZWJzaXRlRGF0YUhhbmRsZXIpCi0gICAgICAgIG1fZ3JhbmRmYXRoZXJFeGlzdGlu
Z1dlYnNpdGVEYXRhSGFuZGxlcigpOwotfQotCi12b2lkIFJlc291cmNlTG9hZFN0YXRpc3RpY3NT
dG9yZTo6bWVyZ2VTdGF0aXN0aWNzKGNvbnN0IFZlY3RvcjxSZXNvdXJjZUxvYWRTdGF0aXN0aWNz
PiYgc3RhdGlzdGljcykKLXsKLSAgICBBU1NFUlQoIWlzTWFpblRocmVhZCgpKTsKLSAgICBhdXRv
IGxvY2tlciA9IGhvbGRMb2NrKG1fc3RhdGlzdGljc0xvY2spOwotICAgIGZvciAoYXV0byYgc3Rh
dGlzdGljIDogc3RhdGlzdGljcykgewotICAgICAgICBhdXRvIHJlc3VsdCA9IG1fcmVzb3VyY2VT
dGF0aXN0aWNzTWFwLmVuc3VyZShzdGF0aXN0aWMuaGlnaExldmVsRG9tYWluLCBbJnN0YXRpc3Rp
Y10gewotICAgICAgICAgICAgcmV0dXJuIFJlc291cmNlTG9hZFN0YXRpc3RpY3Moc3RhdGlzdGlj
LmhpZ2hMZXZlbERvbWFpbik7Ci0gICAgICAgIH0pOwotICAgICAgICAKLSAgICAgICAgcmVzdWx0
Lml0ZXJhdG9yLT52YWx1ZS5tZXJnZShzdGF0aXN0aWMpOwotICAgIH0KLX0KLQotdm9pZCBSZXNv
dXJjZUxvYWRTdGF0aXN0aWNzU3RvcmU6OnNldE5vdGlmaWNhdGlvbkNhbGxiYWNrKFdURjo6RnVu
Y3Rpb248dm9pZCgpPiYmIGhhbmRsZXIpCi17Ci0gICAgbV9kYXRhQWRkZWRIYW5kbGVyID0gV1RG
TW92ZShoYW5kbGVyKTsKLX0KLQotdm9pZCBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3RvcmU6OnNl
dFNob3VsZFBhcnRpdGlvbkNvb2tpZXNDYWxsYmFjayhXVEY6OkZ1bmN0aW9uPHZvaWQoY29uc3Qg
VmVjdG9yPFN0cmluZz4mIGRvbWFpbnNUb1JlbW92ZSwgY29uc3QgVmVjdG9yPFN0cmluZz4mIGRv
bWFpbnNUb0FkZCwgYm9vbCBjbGVhckZpcnN0KT4mJiBoYW5kbGVyKQotewotICAgIG1fc2hvdWxk
UGFydGl0aW9uQ29va2llc0ZvckRvbWFpbnNIYW5kbGVyID0gV1RGTW92ZShoYW5kbGVyKTsKLX0K
LSAgICAKLXZvaWQgUmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlOjpzZXRXcml0ZVBlcnNpc3Rl
bnRTdG9yZUNhbGxiYWNrKFdURjo6RnVuY3Rpb248dm9pZCgpPiYmIGhhbmRsZXIpCi17Ci0gICAg
bV93cml0ZVBlcnNpc3RlbnRTdG9yZUhhbmRsZXIgPSBXVEZNb3ZlKGhhbmRsZXIpOwotfQotCi12
b2lkIFJlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9yZTo6c2V0R3JhbmRmYXRoZXJFeGlzdGluZ1dl
YnNpdGVEYXRhQ2FsbGJhY2soV1RGOjpGdW5jdGlvbjx2b2lkKCk+JiYgaGFuZGxlcikKLXsKLSAg
ICBtX2dyYW5kZmF0aGVyRXhpc3RpbmdXZWJzaXRlRGF0YUhhbmRsZXIgPSBXVEZNb3ZlKGhhbmRs
ZXIpOwotfQotCi12b2lkIFJlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9yZTo6c2V0RGVsZXRlUGVy
c2lzdGVudFN0b3JlQ2FsbGJhY2soV1RGOjpGdW5jdGlvbjx2b2lkKCk+JiYgaGFuZGxlcikKLXsK
LSAgICBtX2RlbGV0ZVBlcnNpc3RlbnRTdG9yZUhhbmRsZXIgPSBXVEZNb3ZlKGhhbmRsZXIpOwot
fQotCi12b2lkIFJlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9yZTo6c2V0RmlyZVRlbGVtZXRyeUNh
bGxiYWNrKFdURjo6RnVuY3Rpb248dm9pZCgpPiYmIGhhbmRsZXIpCi17Ci0gICAgbV9maXJlVGVs
ZW1ldHJ5SGFuZGxlciA9IFdURk1vdmUoaGFuZGxlcik7Ci19Ci0gICAgCi12b2lkIFJlc291cmNl
TG9hZFN0YXRpc3RpY3NTdG9yZTo6ZmlyZURhdGFNb2RpZmljYXRpb25IYW5kbGVyKCkKLXsKLSAg
ICBBU1NFUlQoIWlzTWFpblRocmVhZCgpKTsKLSAgICBSdW5Mb29wOjptYWluKCkuZGlzcGF0Y2go
W3RoaXMsIHByb3RlY3RlZFRoaXMgPSBtYWtlUmVmKCp0aGlzKV0gKCkgewotICAgICAgICBpZiAo
bV9kYXRhQWRkZWRIYW5kbGVyKQotICAgICAgICAgICAgbV9kYXRhQWRkZWRIYW5kbGVyKCk7Ci0g
ICAgfSk7Ci19Ci0KLXZvaWQgUmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlOjpmaXJlVGVsZW1l
dHJ5SGFuZGxlcigpCi17Ci0gICAgQVNTRVJUKGlzTWFpblRocmVhZCgpKTsKLSAgICBpZiAobV9m
aXJlVGVsZW1ldHJ5SGFuZGxlcikKLSAgICAgICAgbV9maXJlVGVsZW1ldHJ5SGFuZGxlcigpOwot
fQotICAgIAotc3RhdGljIGlubGluZSBib29sIHNob3VsZFBhcnRpdGlvbkNvb2tpZXMoY29uc3Qg
UmVzb3VyY2VMb2FkU3RhdGlzdGljcyYgc3RhdGlzdGljKQotewotICAgIHJldHVybiBzdGF0aXN0
aWMuaXNQcmV2YWxlbnRSZXNvdXJjZSAmJiAoIXN0YXRpc3RpYy5oYWRVc2VySW50ZXJhY3Rpb24g
fHwgV2FsbFRpbWU6Om5vdygpID4gc3RhdGlzdGljLm1vc3RSZWNlbnRVc2VySW50ZXJhY3Rpb25U
aW1lICsgdGltZVRvTGl2ZUNvb2tpZVBhcnRpdGlvbkZyZWUpOwotfQotCi12b2lkIFJlc291cmNl
TG9hZFN0YXRpc3RpY3NTdG9yZTo6ZmlyZVNob3VsZFBhcnRpdGlvbkNvb2tpZXNIYW5kbGVyKCkK
LXsKLSAgICBBU1NFUlQoIWlzTWFpblRocmVhZCgpKTsKLSAgICBWZWN0b3I8U3RyaW5nPiBkb21h
aW5zVG9SZW1vdmU7Ci0gICAgVmVjdG9yPFN0cmluZz4gZG9tYWluc1RvQWRkOwotICAgIAotICAg
IGF1dG8gbG9ja2VyID0gaG9sZExvY2sobV9zdGF0aXN0aWNzTG9jayk7Ci0gICAgZm9yIChhdXRv
JiByZXNvdXJjZVN0YXRpc3RpYyA6IG1fcmVzb3VyY2VTdGF0aXN0aWNzTWFwLnZhbHVlcygpKSB7
Ci0gICAgICAgIGJvb2wgc2hvdWxkUGFydGl0aW9uID0gc2hvdWxkUGFydGl0aW9uQ29va2llcyhy
ZXNvdXJjZVN0YXRpc3RpYyk7Ci0gICAgICAgIGlmIChyZXNvdXJjZVN0YXRpc3RpYy5pc01hcmtl
ZEZvckNvb2tpZVBhcnRpdGlvbmluZyAmJiAhc2hvdWxkUGFydGl0aW9uKSB7Ci0gICAgICAgICAg
ICByZXNvdXJjZVN0YXRpc3RpYy5pc01hcmtlZEZvckNvb2tpZVBhcnRpdGlvbmluZyA9IGZhbHNl
OwotICAgICAgICAgICAgZG9tYWluc1RvUmVtb3ZlLmFwcGVuZChyZXNvdXJjZVN0YXRpc3RpYy5o
aWdoTGV2ZWxEb21haW4pOwotICAgICAgICB9IGVsc2UgaWYgKCFyZXNvdXJjZVN0YXRpc3RpYy5p
c01hcmtlZEZvckNvb2tpZVBhcnRpdGlvbmluZyAmJiBzaG91bGRQYXJ0aXRpb24pIHsKLSAgICAg
ICAgICAgIHJlc291cmNlU3RhdGlzdGljLmlzTWFya2VkRm9yQ29va2llUGFydGl0aW9uaW5nID0g
dHJ1ZTsKLSAgICAgICAgICAgIGRvbWFpbnNUb0FkZC5hcHBlbmQocmVzb3VyY2VTdGF0aXN0aWMu
aGlnaExldmVsRG9tYWluKTsKLSAgICAgICAgfQotICAgIH0KLQotICAgIGlmIChkb21haW5zVG9S
ZW1vdmUuaXNFbXB0eSgpICYmIGRvbWFpbnNUb0FkZC5pc0VtcHR5KCkpCi0gICAgICAgIHJldHVy
bjsKLQotICAgIFJ1bkxvb3A6Om1haW4oKS5kaXNwYXRjaChbdGhpcywgcHJvdGVjdGVkVGhpcyA9
IG1ha2VSZWYoKnRoaXMpLCBkb21haW5zVG9SZW1vdmUgPSBDcm9zc1RocmVhZENvcGllcjxWZWN0
b3I8U3RyaW5nPj46OmNvcHkoZG9tYWluc1RvUmVtb3ZlKSwgZG9tYWluc1RvQWRkID0gQ3Jvc3NU
aHJlYWRDb3BpZXI8VmVjdG9yPFN0cmluZz4+Ojpjb3B5KGRvbWFpbnNUb0FkZCldICgpIHsKLSAg
ICAgICAgaWYgKG1fc2hvdWxkUGFydGl0aW9uQ29va2llc0ZvckRvbWFpbnNIYW5kbGVyKQotICAg
ICAgICAgICAgbV9zaG91bGRQYXJ0aXRpb25Db29raWVzRm9yRG9tYWluc0hhbmRsZXIoZG9tYWlu
c1RvUmVtb3ZlLCBkb21haW5zVG9BZGQsIGZhbHNlKTsKLSAgICB9KTsKLX0KLQotdm9pZCBSZXNv
dXJjZUxvYWRTdGF0aXN0aWNzU3RvcmU6OmZpcmVTaG91bGRQYXJ0aXRpb25Db29raWVzSGFuZGxl
cihjb25zdCBWZWN0b3I8U3RyaW5nPiYgZG9tYWluc1RvUmVtb3ZlLCBjb25zdCBWZWN0b3I8U3Ry
aW5nPiYgZG9tYWluc1RvQWRkLCBib29sIGNsZWFyRmlyc3QpCi17Ci0gICAgQVNTRVJUKCFpc01h
aW5UaHJlYWQoKSk7Ci0gICAgaWYgKGRvbWFpbnNUb1JlbW92ZS5pc0VtcHR5KCkgJiYgZG9tYWlu
c1RvQWRkLmlzRW1wdHkoKSkKLSAgICAgICAgcmV0dXJuOwotICAgIAotICAgIFJ1bkxvb3A6Om1h
aW4oKS5kaXNwYXRjaChbdGhpcywgY2xlYXJGaXJzdCwgcHJvdGVjdGVkVGhpcyA9IG1ha2VSZWYo
KnRoaXMpLCBkb21haW5zVG9SZW1vdmUgPSBDcm9zc1RocmVhZENvcGllcjxWZWN0b3I8U3RyaW5n
Pj46OmNvcHkoZG9tYWluc1RvUmVtb3ZlKSwgZG9tYWluc1RvQWRkID0gQ3Jvc3NUaHJlYWRDb3Bp
ZXI8VmVjdG9yPFN0cmluZz4+Ojpjb3B5KGRvbWFpbnNUb0FkZCldICgpIHsKLSAgICAgICAgaWYg
KG1fc2hvdWxkUGFydGl0aW9uQ29va2llc0ZvckRvbWFpbnNIYW5kbGVyKQotICAgICAgICAgICAg
bV9zaG91bGRQYXJ0aXRpb25Db29raWVzRm9yRG9tYWluc0hhbmRsZXIoZG9tYWluc1RvUmVtb3Zl
LCBkb21haW5zVG9BZGQsIGNsZWFyRmlyc3QpOwotICAgIH0pOwotICAgIAotICAgIGF1dG8gbG9j
a2VyID0gaG9sZExvY2sobV9zdGF0aXN0aWNzTG9jayk7Ci0gICAgaWYgKGNsZWFyRmlyc3QpIHsK
LSAgICAgICAgZm9yIChhdXRvJiByZXNvdXJjZVN0YXRpc3RpYyA6IG1fcmVzb3VyY2VTdGF0aXN0
aWNzTWFwLnZhbHVlcygpKQotICAgICAgICAgICAgcmVzb3VyY2VTdGF0aXN0aWMuaXNNYXJrZWRG
b3JDb29raWVQYXJ0aXRpb25pbmcgPSBmYWxzZTsKLSAgICB9IGVsc2UgewotICAgICAgICBmb3Ig
KGF1dG8mIGRvbWFpbiA6IGRvbWFpbnNUb1JlbW92ZSkKLSAgICAgICAgICAgIGVuc3VyZVJlc291
cmNlU3RhdGlzdGljc0ZvclByaW1hcnlEb21haW4oZG9tYWluKS5pc01hcmtlZEZvckNvb2tpZVBh
cnRpdGlvbmluZyA9IGZhbHNlOwotICAgIH0KLQotICAgIGZvciAoYXV0byYgZG9tYWluIDogZG9t
YWluc1RvQWRkKQotICAgICAgICBlbnN1cmVSZXNvdXJjZVN0YXRpc3RpY3NGb3JQcmltYXJ5RG9t
YWluKGRvbWFpbikuaXNNYXJrZWRGb3JDb29raWVQYXJ0aXRpb25pbmcgPSB0cnVlOwotfQotCi12
b2lkIFJlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9yZTo6c2V0VGltZVRvTGl2ZVVzZXJJbnRlcmFj
dGlvbihTZWNvbmRzIHNlY29uZHMpCi17Ci0gICAgaWYgKHNlY29uZHMgPj0gMF9zKQotICAgICAg
ICB0aW1lVG9MaXZlVXNlckludGVyYWN0aW9uID0gc2Vjb25kczsKLX0KLQotdm9pZCBSZXNvdXJj
ZUxvYWRTdGF0aXN0aWNzU3RvcmU6OnNldFRpbWVUb0xpdmVDb29raWVQYXJ0aXRpb25GcmVlKFNl
Y29uZHMgc2Vjb25kcykKLXsKLSAgICBpZiAoc2Vjb25kcyA+PSAwX3MpCi0gICAgICAgIHRpbWVU
b0xpdmVDb29raWVQYXJ0aXRpb25GcmVlID0gc2Vjb25kczsKLX0KLQotdm9pZCBSZXNvdXJjZUxv
YWRTdGF0aXN0aWNzU3RvcmU6OnNldE1pbmltdW1UaW1lQmV0d2VlZW5EYXRhUmVjb3Jkc1JlbW92
YWwoU2Vjb25kcyBzZWNvbmRzKQotewotICAgIGlmIChzZWNvbmRzID49IDBfcykKLSAgICAgICAg
bWluaW11bVRpbWVCZXR3ZWVlbkRhdGFSZWNvcmRzUmVtb3ZhbCA9IHNlY29uZHM7Ci19Ci0KLXZv
aWQgUmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlOjpzZXRHcmFuZGZhdGhlcmluZ1RpbWUoU2Vj
b25kcyBzZWNvbmRzKQotewotICAgIGlmIChzZWNvbmRzID49IDBfcykKLSAgICAgICAgZ3JhbmRm
YXRoZXJpbmdUaW1lID0gc2Vjb25kczsKLX0KLQotdm9pZCBSZXNvdXJjZUxvYWRTdGF0aXN0aWNz
U3RvcmU6OnByb2Nlc3NTdGF0aXN0aWNzKFdURjo6RnVuY3Rpb248dm9pZChSZXNvdXJjZUxvYWRT
dGF0aXN0aWNzJik+JiYgcHJvY2Vzc0Z1bmN0aW9uKQotewotICAgIEFTU0VSVCghaXNNYWluVGhy
ZWFkKCkpOwotICAgIGF1dG8gbG9ja2VyID0gaG9sZExvY2sobV9zdGF0aXN0aWNzTG9jayk7Ci0g
ICAgZm9yIChhdXRvJiByZXNvdXJjZVN0YXRpc3RpYyA6IG1fcmVzb3VyY2VTdGF0aXN0aWNzTWFw
LnZhbHVlcygpKQotICAgICAgICBwcm9jZXNzRnVuY3Rpb24ocmVzb3VyY2VTdGF0aXN0aWMpOwot
fQotCi1ib29sIFJlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9yZTo6aGFzSGFkUmVjZW50VXNlcklu
dGVyYWN0aW9uKFJlc291cmNlTG9hZFN0YXRpc3RpY3MmIHJlc291cmNlU3RhdGlzdGljKSBjb25z
dAotewotICAgIGlmICghcmVzb3VyY2VTdGF0aXN0aWMuaGFkVXNlckludGVyYWN0aW9uKQotICAg
ICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICBpZiAoV2FsbFRpbWU6Om5vdygpID4gcmVzb3VyY2VT
dGF0aXN0aWMubW9zdFJlY2VudFVzZXJJbnRlcmFjdGlvblRpbWUgKyB0aW1lVG9MaXZlVXNlcklu
dGVyYWN0aW9uKSB7Ci0gICAgICAgIC8vIERyb3AgcHJpdmFjeSBzZW5zaXRpdmUgZGF0YSBiZWNh
dXNlIHdlIG5vIGxvbmdlciBuZWVkIGl0LgotICAgICAgICAvLyBTZXQgdGltZXN0YW1wIHRvIDAg
c28gdGhhdCBzdGF0aXN0aWNzIG1lcmdlIHdpbGwga25vdwotICAgICAgICAvLyBpdCBoYXMgYmVl
biByZXNldCBhcyBvcHBvc2VkIHRvIGl0cyBkZWZhdWx0IC0xLgotICAgICAgICByZXNvdXJjZVN0
YXRpc3RpYy5tb3N0UmVjZW50VXNlckludGVyYWN0aW9uVGltZSA9IHsgfTsKLSAgICAgICAgcmVz
b3VyY2VTdGF0aXN0aWMuaGFkVXNlckludGVyYWN0aW9uID0gZmFsc2U7Ci0KLSAgICAgICAgcmV0
dXJuIGZhbHNlOwotICAgIH0KLQotICAgIHJldHVybiB0cnVlOwotfQotCi1WZWN0b3I8U3RyaW5n
PiBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3RvcmU6OnRvcFByaXZhdGVseUNvbnRyb2xsZWREb21h
aW5zVG9SZW1vdmVXZWJzaXRlRGF0YUZvcigpCi17Ci0gICAgYm9vbCBzaG91bGRDaGVja0Zvckdy
YW5kZmF0aGVyaW5nID0gbV9lbmRPZkdyYW5kZmF0aGVyaW5nVGltZXN0YW1wID4gV2FsbFRpbWU6
Om5vdygpOwotICAgIGJvb2wgc2hvdWxkQ2xlYXJHcmFuZGZhdGhlcmluZyA9ICFzaG91bGRDaGVj
a0ZvckdyYW5kZmF0aGVyaW5nICYmIG1fZW5kT2ZHcmFuZGZhdGhlcmluZ1RpbWVzdGFtcDsKLQot
ICAgIGlmIChzaG91bGRDbGVhckdyYW5kZmF0aGVyaW5nKQotICAgICAgICBtX2VuZE9mR3JhbmRm
YXRoZXJpbmdUaW1lc3RhbXAgPSB7IH07Ci0KLSAgICBWZWN0b3I8U3RyaW5nPiBwcmV2YWxlbnRS
ZXNvdXJjZXM7Ci0gICAgYXV0byBsb2NrZXIgPSBob2xkTG9jayhtX3N0YXRpc3RpY3NMb2NrKTsK
LSAgICBmb3IgKGF1dG8mIHN0YXRpc3RpYyA6IG1fcmVzb3VyY2VTdGF0aXN0aWNzTWFwLnZhbHVl
cygpKSB7Ci0gICAgICAgIGlmIChzdGF0aXN0aWMuaXNQcmV2YWxlbnRSZXNvdXJjZQotICAgICAg
ICAgICAgJiYgIWhhc0hhZFJlY2VudFVzZXJJbnRlcmFjdGlvbihzdGF0aXN0aWMpCi0gICAgICAg
ICAgICAmJiAoIXNob3VsZENoZWNrRm9yR3JhbmRmYXRoZXJpbmcgfHwgIXN0YXRpc3RpYy5ncmFu
ZGZhdGhlcmVkKSkKLSAgICAgICAgICAgIHByZXZhbGVudFJlc291cmNlcy5hcHBlbmQoc3RhdGlz
dGljLmhpZ2hMZXZlbERvbWFpbik7Ci0KLSAgICAgICAgaWYgKHNob3VsZENsZWFyR3JhbmRmYXRo
ZXJpbmcgJiYgc3RhdGlzdGljLmdyYW5kZmF0aGVyZWQpCi0gICAgICAgICAgICBzdGF0aXN0aWMu
Z3JhbmRmYXRoZXJlZCA9IGZhbHNlOwotICAgIH0KLQotICAgIHJldHVybiBwcmV2YWxlbnRSZXNv
dXJjZXM7Ci19Ci0gICAgCi1WZWN0b3I8UHJldmFsZW50UmVzb3VyY2VUZWxlbWV0cnk+IFJlc291
cmNlTG9hZFN0YXRpc3RpY3NTdG9yZTo6c29ydGVkUHJldmFsZW50UmVzb3VyY2VUZWxlbWV0cnko
KSBjb25zdAotewotICAgIEFTU0VSVCghaXNNYWluVGhyZWFkKCkpOwotICAgIGF1dG8gbG9ja2Vy
ID0gaG9sZExvY2sobV9zdGF0aXN0aWNzTG9jayk7Ci0gICAgVmVjdG9yPFByZXZhbGVudFJlc291
cmNlVGVsZW1ldHJ5PiBzb3J0ZWQ7Ci0gICAgZm9yIChhdXRvJiBzdGF0aXN0aWMgOiBtX3Jlc291
cmNlU3RhdGlzdGljc01hcC52YWx1ZXMoKSkgewotICAgICAgICBpZiAoIXN0YXRpc3RpYy5pc1By
ZXZhbGVudFJlc291cmNlKQotICAgICAgICAgICAgY29udGludWU7Ci0KLSAgICAgICAgdW5zaWdu
ZWQgZGF5c1NpbmNlVXNlckludGVyYWN0aW9uID0gc3RhdGlzdGljLm1vc3RSZWNlbnRVc2VySW50
ZXJhY3Rpb25UaW1lIDw9IFdhbGxUaW1lKCkgPyAwIDogc3RkOjpmbG9vcigoV2FsbFRpbWU6Om5v
dygpIC0gc3RhdGlzdGljLm1vc3RSZWNlbnRVc2VySW50ZXJhY3Rpb25UaW1lKSAvIDI0X2gpOwot
ICAgICAgICBzb3J0ZWQuYXBwZW5kKFByZXZhbGVudFJlc291cmNlVGVsZW1ldHJ5IHsKLSAgICAg
ICAgICAgIHN0YXRpc3RpYy5kYXRhUmVjb3Jkc1JlbW92ZWQsCi0gICAgICAgICAgICBzdGF0aXN0
aWMuaGFkVXNlckludGVyYWN0aW9uLAotICAgICAgICAgICAgZGF5c1NpbmNlVXNlckludGVyYWN0
aW9uLAotICAgICAgICAgICAgc3RhdGlzdGljLnN1YmZyYW1lVW5kZXJUb3BGcmFtZU9yaWdpbnMu
c2l6ZSgpLAotICAgICAgICAgICAgc3RhdGlzdGljLnN1YnJlc291cmNlVW5kZXJUb3BGcmFtZU9y
aWdpbnMuc2l6ZSgpLAotICAgICAgICAgICAgc3RhdGlzdGljLnN1YnJlc291cmNlVW5pcXVlUmVk
aXJlY3RzVG8uc2l6ZSgpCi0gICAgICAgIH0pOwotICAgIH0KLSAgICAKLSAgICBpZiAoc29ydGVk
LnNpemUoKSA8IG1pbmltdW1QcmV2YWxlbnRSZXNvdXJjZXNGb3JUZWxlbWV0cnkpCi0gICAgICAg
IHJldHVybiB7IH07Ci0KLSAgICBzdGQ6OnNvcnQoc29ydGVkLmJlZ2luKCksIHNvcnRlZC5lbmQo
KSwgW10oY29uc3QgUHJldmFsZW50UmVzb3VyY2VUZWxlbWV0cnkmIGEsIGNvbnN0IFByZXZhbGVu
dFJlc291cmNlVGVsZW1ldHJ5JiBiKSB7Ci0gICAgICAgIHJldHVybiBhLnN1YmZyYW1lVW5kZXJU
b3BGcmFtZU9yaWdpbnMgKyBhLnN1YnJlc291cmNlVW5kZXJUb3BGcmFtZU9yaWdpbnMgKyBhLnN1
YnJlc291cmNlVW5pcXVlUmVkaXJlY3RzVG8gPgotICAgICAgICBiLnN1YmZyYW1lVW5kZXJUb3BG
cmFtZU9yaWdpbnMgKyBiLnN1YnJlc291cmNlVW5kZXJUb3BGcmFtZU9yaWdpbnMgKyBiLnN1YnJl
c291cmNlVW5pcXVlUmVkaXJlY3RzVG87Ci0gICAgfSk7Ci0gICAgCi0gICAgcmV0dXJuIHNvcnRl
ZDsKLX0KLQotdm9pZCBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3RvcmU6OnVwZGF0ZVN0YXRpc3Rp
Y3NGb3JSZW1vdmVkRGF0YVJlY29yZHMoY29uc3QgSGFzaFNldDxTdHJpbmc+JiBwcmV2YWxlbnRS
ZXNvdXJjZURvbWFpbnMpCi17Ci0gICAgYXV0byBsb2NrZXIgPSBob2xkTG9jayhtX3N0YXRpc3Rp
Y3NMb2NrKTsKLSAgICBmb3IgKGF1dG8mIHByZXZhbGVudFJlc291cmNlRG9tYWluIDogcHJldmFs
ZW50UmVzb3VyY2VEb21haW5zKSB7Ci0gICAgICAgIFJlc291cmNlTG9hZFN0YXRpc3RpY3MmIHN0
YXRpc3RpYyA9IGVuc3VyZVJlc291cmNlU3RhdGlzdGljc0ZvclByaW1hcnlEb21haW4ocHJldmFs
ZW50UmVzb3VyY2VEb21haW4pOwotICAgICAgICArK3N0YXRpc3RpYy5kYXRhUmVjb3Jkc1JlbW92
ZWQ7Ci0gICAgfQotfQotCi12b2lkIFJlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9yZTo6aGFuZGxl
RnJlc2hTdGFydFdpdGhFbXB0eU9yTm9TdG9yZShIYXNoU2V0PFN0cmluZz4mJiB0b3BQcml2YXRl
bHlDb250cm9sbGVkRG9tYWluc1RvR3JhbmRmYXRoZXIpCi17Ci0gICAgYXV0byBsb2NrZXIgPSBo
b2xkTG9jayhtX3N0YXRpc3RpY3NMb2NrKTsKLSAgICBmb3IgKGF1dG8mIHRvcFByaXZhdGVseUNv
bnRyb2xsZWREb21haW4gOiB0b3BQcml2YXRlbHlDb250cm9sbGVkRG9tYWluc1RvR3JhbmRmYXRo
ZXIpIHsKLSAgICAgICAgUmVzb3VyY2VMb2FkU3RhdGlzdGljcyYgc3RhdGlzdGljID0gZW5zdXJl
UmVzb3VyY2VTdGF0aXN0aWNzRm9yUHJpbWFyeURvbWFpbih0b3BQcml2YXRlbHlDb250cm9sbGVk
RG9tYWluKTsKLSAgICAgICAgc3RhdGlzdGljLmdyYW5kZmF0aGVyZWQgPSB0cnVlOwotICAgIH0K
LSAgICBtX2VuZE9mR3JhbmRmYXRoZXJpbmdUaW1lc3RhbXAgPSBXYWxsVGltZTo6bm93KCkgKyBn
cmFuZGZhdGhlcmluZ1RpbWU7Ci19Ci0KLWJvb2wgUmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3Jl
OjpzaG91bGRSZW1vdmVEYXRhUmVjb3JkcygpIGNvbnN0Ci17Ci0gICAgQVNTRVJUKCFpc01haW5U
aHJlYWQoKSk7Ci0gICAgaWYgKG1fZGF0YVJlY29yZHNSZW1vdmFsUGVuZGluZykKLSAgICAgICAg
cmV0dXJuIGZhbHNlOwotCi0gICAgaWYgKG1fbGFzdFRpbWVEYXRhUmVjb3Jkc1dlcmVSZW1vdmVk
ICYmIE1vbm90b25pY1RpbWU6Om5vdygpIDwgKG1fbGFzdFRpbWVEYXRhUmVjb3Jkc1dlcmVSZW1v
dmVkICsgbWluaW11bVRpbWVCZXR3ZWVlbkRhdGFSZWNvcmRzUmVtb3ZhbCkpCi0gICAgICAgIHJl
dHVybiBmYWxzZTsKLQotICAgIHJldHVybiB0cnVlOwotfQotCi12b2lkIFJlc291cmNlTG9hZFN0
YXRpc3RpY3NTdG9yZTo6ZGF0YVJlY29yZHNCZWluZ1JlbW92ZWQoKQotewotICAgIEFTU0VSVCgh
aXNNYWluVGhyZWFkKCkpOwotICAgIG1fbGFzdFRpbWVEYXRhUmVjb3Jkc1dlcmVSZW1vdmVkID0g
TW9ub3RvbmljVGltZTo6bm93KCk7Ci0gICAgbV9kYXRhUmVjb3Jkc1JlbW92YWxQZW5kaW5nID0g
dHJ1ZTsKLX0KLQotdm9pZCBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3RvcmU6OmRhdGFSZWNvcmRz
V2VyZVJlbW92ZWQoKQotewotICAgIEFTU0VSVCghaXNNYWluVGhyZWFkKCkpOwotICAgIG1fZGF0
YVJlY29yZHNSZW1vdmFsUGVuZGluZyA9IGZhbHNlOwotfQotICAgIAotV1RGOjpSZWN1cnNpdmVM
b2NrQWRhcHRlcjxMb2NrPiYgUmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlOjpzdGF0aXN0aWNz
TG9jaygpCi17Ci0gICAgcmV0dXJuIG1fc3RhdGlzdGljc0xvY2s7Ci19Ci0KLVN0cmluZyBSZXNv
dXJjZUxvYWRTdGF0aXN0aWNzU3RvcmU6OnByaW1hcnlEb21haW4oY29uc3QgVVJMJiB1cmwpCi17
Ci0gICAgcmV0dXJuIHByaW1hcnlEb21haW4odXJsLmhvc3QoKSk7Ci19Ci0KLVN0cmluZyBSZXNv
dXJjZUxvYWRTdGF0aXN0aWNzU3RvcmU6OnByaW1hcnlEb21haW4oY29uc3QgU3RyaW5nJiBob3N0
KQotewotICAgIGlmIChob3N0LmlzTnVsbCgpIHx8IGhvc3QuaXNFbXB0eSgpKQotICAgICAgICBy
ZXR1cm4gQVNDSUlMaXRlcmFsKCJudWxsT3JpZ2luIik7Ci0KLSNpZiBFTkFCTEUoUFVCTElDX1NV
RkZJWF9MSVNUKQotICAgIFN0cmluZyBwcmltYXJ5RG9tYWluID0gdG9wUHJpdmF0ZWx5Q29udHJv
bGxlZERvbWFpbihob3N0KTsKLSAgICAvLyBXZSB3aWxsIGhhdmUgYW4gZW1wdHkgc3RyaW5nIGhl
cmUgaWYgdGhlcmUgaXMgbm8gVExELiBVc2UgdGhlIGhvc3QgYXMgYSBmYWxsYmFjay4KLSAgICBp
ZiAoIXByaW1hcnlEb21haW4uaXNFbXB0eSgpKQotICAgICAgICByZXR1cm4gcHJpbWFyeURvbWFp
bjsKLSNlbmRpZgotCi0gICAgcmV0dXJuIGhvc3Q7Ci19Ci0gICAgCi19CmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9sb2FkZXIvUmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlLmggYi9Tb3Vy
Y2UvV2ViQ29yZS9sb2FkZXIvUmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlLmgKZGVsZXRlZCBm
aWxlIG1vZGUgMTAwNjQ0CmluZGV4IDA3MWY5MjEyOGU1ZDliNTNmZDc1NjI1Zjg0OWQxMWVmNDUz
MzE1N2MuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291
cmNlL1dlYkNvcmUvbG9hZGVyL1Jlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9yZS5oCisrKyAvZGV2
L251bGwKQEAgLTEsMTI1ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTYtMjAxNyBB
cHBsZSBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFu
ZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9k
aWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25k
aXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2Rl
IG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlz
dHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJp
Z2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBt
YXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09G
VFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQotICogRVhQ
UkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LCBUSEUKLSAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5F
U1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVW
RU5UIFNIQUxMIEFQUExFIElOQy4gT1IKLSAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFO
WSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAotICogRVhFTVBMQVJZLCBP
UiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAot
ICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBV
U0UsIERBVEEsIE9SCi0gKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VW
RVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCi0gKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4g
Q09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElH
RU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotICog
T0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBT
VUNIIERBTUFHRS4KLSAqLwotCi0jcHJhZ21hIG9uY2UKLQotI2luY2x1ZGUgIlJlc291cmNlTG9h
ZFN0YXRpc3RpY3MuaCIKLSNpbmNsdWRlIDx3dGYvRnVuY3Rpb24uaD4KLSNpbmNsdWRlIDx3dGYv
SGFzaFNldC5oPgotI2luY2x1ZGUgPHd0Zi9Nb25vdG9uaWNUaW1lLmg+Ci0jaW5jbHVkZSA8d3Rm
L1JlY3Vyc2l2ZUxvY2tBZGFwdGVyLmg+Ci0jaW5jbHVkZSA8d3RmL1dhbGxUaW1lLmg+Ci0KLW5h
bWVzcGFjZSBXZWJDb3JlIHsKLQotY2xhc3MgS2V5ZWREZWNvZGVyOwotY2xhc3MgS2V5ZWRFbmNv
ZGVyOwotY2xhc3MgVVJMOwotCi1zdGF0aWMgY29uc3QgYXV0byBtaW5pbXVtUHJldmFsZW50UmVz
b3VyY2VzRm9yVGVsZW1ldHJ5ID0gMzsKLQotc3RydWN0IFByZXZhbGVudFJlc291cmNlVGVsZW1l
dHJ5IHsKLSAgICB1bnNpZ25lZCBudW1iZXJPZlRpbWVzRGF0YVJlY29yZHNSZW1vdmVkOwotICAg
IGJvb2wgaGFzSGFkVXNlckludGVyYWN0aW9uOwotICAgIHVuc2lnbmVkIGRheXNTaW5jZVVzZXJJ
bnRlcmFjdGlvbjsKLSAgICB1bnNpZ25lZCBzdWJmcmFtZVVuZGVyVG9wRnJhbWVPcmlnaW5zOwot
ICAgIHVuc2lnbmVkIHN1YnJlc291cmNlVW5kZXJUb3BGcmFtZU9yaWdpbnM7Ci0gICAgdW5zaWdu
ZWQgc3VicmVzb3VyY2VVbmlxdWVSZWRpcmVjdHNUbzsKLX07Ci0KLXN0cnVjdCBSZXNvdXJjZUxv
YWRTdGF0aXN0aWNzOwotCi0vLyBGSVhNRTogVGhpcyBzaG91bGQgYmUgbW92ZWQgdG8gV2ViS2l0
Mi9VSVByb2Nlc3MuCi1jbGFzcyBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3RvcmUgOiBwdWJsaWMg
VGhyZWFkU2FmZVJlZkNvdW50ZWQ8UmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlPiB7Ci1wdWJs
aWM6Ci0gICAgV0VCQ09SRV9FWFBPUlQgc3RhdGljIFJlZjxSZXNvdXJjZUxvYWRTdGF0aXN0aWNz
U3RvcmU+IGNyZWF0ZSgpOwotCi0gICAgV0VCQ09SRV9FWFBPUlQgc3RkOjp1bmlxdWVfcHRyPEtl
eWVkRW5jb2Rlcj4gY3JlYXRlRW5jb2RlckZyb21EYXRhKCk7Ci0gICAgV0VCQ09SRV9FWFBPUlQg
dm9pZCByZWFkRGF0YUZyb21EZWNvZGVyKEtleWVkRGVjb2RlciYpOwotCi0gICAgYm9vbCBpc0Vt
cHR5KCkgY29uc3QgeyByZXR1cm4gbV9yZXNvdXJjZVN0YXRpc3RpY3NNYXAuaXNFbXB0eSgpOyB9
Ci0gICAgc2l6ZV90IHNpemUoKSBjb25zdCB7IHJldHVybiBtX3Jlc291cmNlU3RhdGlzdGljc01h
cC5zaXplKCk7IH0KLSAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIGNsZWFySW5NZW1vcnkoKTsKLSAg
ICBXRUJDT1JFX0VYUE9SVCB2b2lkIGNsZWFySW5NZW1vcnlBbmRQZXJzaXN0ZW50KCk7Ci0KLSAg
ICBXRUJDT1JFX0VYUE9SVCBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzJiBlbnN1cmVSZXNvdXJjZVN0
YXRpc3RpY3NGb3JQcmltYXJ5RG9tYWluKGNvbnN0IFN0cmluZyYpOwotICAgIHZvaWQgc2V0UmVz
b3VyY2VTdGF0aXN0aWNzRm9yUHJpbWFyeURvbWFpbihjb25zdCBTdHJpbmcmLCBSZXNvdXJjZUxv
YWRTdGF0aXN0aWNzJiYpOwotCi0gICAgYm9vbCBpc1ByZXZhbGVudFJlc291cmNlKGNvbnN0IFN0
cmluZyYpIGNvbnN0OwotICAgIAotICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgbWVyZ2VTdGF0aXN0
aWNzKGNvbnN0IFZlY3RvcjxSZXNvdXJjZUxvYWRTdGF0aXN0aWNzPiYpOwotCi0gICAgV0VCQ09S
RV9FWFBPUlQgdm9pZCBzZXROb3RpZmljYXRpb25DYWxsYmFjayhXVEY6OkZ1bmN0aW9uPHZvaWQo
KT4mJik7Ci0gICAgV0VCQ09SRV9FWFBPUlQgdm9pZCBzZXRTaG91bGRQYXJ0aXRpb25Db29raWVz
Q2FsbGJhY2soV1RGOjpGdW5jdGlvbjx2b2lkKGNvbnN0IFZlY3RvcjxTdHJpbmc+JiBkb21haW5z
VG9SZW1vdmUsIGNvbnN0IFZlY3RvcjxTdHJpbmc+JiBkb21haW5zVG9BZGQsIGJvb2wgY2xlYXJG
aXJzdCk+JiYpOwotICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgc2V0V3JpdGVQZXJzaXN0ZW50U3Rv
cmVDYWxsYmFjayhXVEY6OkZ1bmN0aW9uPHZvaWQoKT4mJik7Ci0gICAgV0VCQ09SRV9FWFBPUlQg
dm9pZCBzZXREZWxldGVQZXJzaXN0ZW50U3RvcmVDYWxsYmFjayhXVEY6OkZ1bmN0aW9uPHZvaWQo
KT4mJik7Ci0gICAgV0VCQ09SRV9FWFBPUlQgdm9pZCBzZXRHcmFuZGZhdGhlckV4aXN0aW5nV2Vi
c2l0ZURhdGFDYWxsYmFjayhXVEY6OkZ1bmN0aW9uPHZvaWQoKT4mJik7Ci0gICAgV0VCQ09SRV9F
WFBPUlQgdm9pZCBzZXRGaXJlVGVsZW1ldHJ5Q2FsbGJhY2soV1RGOjpGdW5jdGlvbjx2b2lkKCk+
JiYgaGFuZGxlcik7Ci0KLSAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIGZpcmVEYXRhTW9kaWZpY2F0
aW9uSGFuZGxlcigpOwotICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgZmlyZVRlbGVtZXRyeUhhbmRs
ZXIoKTsKLSAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIHNldFRpbWVUb0xpdmVVc2VySW50ZXJhY3Rp
b24oU2Vjb25kcyk7Ci0gICAgV0VCQ09SRV9FWFBPUlQgdm9pZCBzZXRUaW1lVG9MaXZlQ29va2ll
UGFydGl0aW9uRnJlZShTZWNvbmRzKTsKLSAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIHNldE1pbmlt
dW1UaW1lQmV0d2VlZW5EYXRhUmVjb3Jkc1JlbW92YWwoU2Vjb25kcyk7Ci0gICAgV0VCQ09SRV9F
WFBPUlQgdm9pZCBzZXRHcmFuZGZhdGhlcmluZ1RpbWUoU2Vjb25kcyk7Ci0gICAgV0VCQ09SRV9F
WFBPUlQgdm9pZCBmaXJlU2hvdWxkUGFydGl0aW9uQ29va2llc0hhbmRsZXIoKTsKLSAgICBXRUJD
T1JFX0VYUE9SVCB2b2lkIGZpcmVTaG91bGRQYXJ0aXRpb25Db29raWVzSGFuZGxlcihjb25zdCBW
ZWN0b3I8U3RyaW5nPiYgZG9tYWluc1RvUmVtb3ZlLCBjb25zdCBWZWN0b3I8U3RyaW5nPiYgZG9t
YWluc1RvQWRkLCBib29sIGNsZWFyRmlyc3QpOwotCi0gICAgV0VCQ09SRV9FWFBPUlQgdm9pZCBw
cm9jZXNzU3RhdGlzdGljcyhXVEY6OkZ1bmN0aW9uPHZvaWQoUmVzb3VyY2VMb2FkU3RhdGlzdGlj
cyYpPiYmKTsKLQotICAgIFdFQkNPUkVfRVhQT1JUIGJvb2wgaGFzSGFkUmVjZW50VXNlckludGVy
YWN0aW9uKFJlc291cmNlTG9hZFN0YXRpc3RpY3MmKSBjb25zdDsKLSAgICBXRUJDT1JFX0VYUE9S
VCBWZWN0b3I8U3RyaW5nPiB0b3BQcml2YXRlbHlDb250cm9sbGVkRG9tYWluc1RvUmVtb3ZlV2Vi
c2l0ZURhdGFGb3IoKTsKLSAgICBXRUJDT1JFX0VYUE9SVCBWZWN0b3I8UHJldmFsZW50UmVzb3Vy
Y2VUZWxlbWV0cnk+IHNvcnRlZFByZXZhbGVudFJlc291cmNlVGVsZW1ldHJ5KCkgY29uc3Q7Ci0g
ICAgV0VCQ09SRV9FWFBPUlQgdm9pZCB1cGRhdGVTdGF0aXN0aWNzRm9yUmVtb3ZlZERhdGFSZWNv
cmRzKGNvbnN0IEhhc2hTZXQ8U3RyaW5nPiYgcHJldmFsZW50UmVzb3VyY2VEb21haW5zKTsKLQot
ICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgaGFuZGxlRnJlc2hTdGFydFdpdGhFbXB0eU9yTm9TdG9y
ZShIYXNoU2V0PFN0cmluZz4mJiB0b3BQcml2YXRlbHlDb250cm9sbGVkRG9tYWluc1RvR3JhbmRm
YXRoZXIpOwotICAgIFdFQkNPUkVfRVhQT1JUIGJvb2wgc2hvdWxkUmVtb3ZlRGF0YVJlY29yZHMo
KSBjb25zdDsKLSAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIGRhdGFSZWNvcmRzQmVpbmdSZW1vdmVk
KCk7Ci0gICAgV0VCQ09SRV9FWFBPUlQgdm9pZCBkYXRhUmVjb3Jkc1dlcmVSZW1vdmVkKCk7Ci0g
ICAgCi0gICAgV0VCQ09SRV9FWFBPUlQgV1RGOjpSZWN1cnNpdmVMb2NrQWRhcHRlcjxMb2NrPiYg
c3RhdGlzdGljc0xvY2soKTsKLQotICAgIFdFQkNPUkVfRVhQT1JUIHN0YXRpYyBTdHJpbmcgcHJp
bWFyeURvbWFpbihjb25zdCBVUkwmKTsKLSAgICBXRUJDT1JFX0VYUE9SVCBzdGF0aWMgU3RyaW5n
IHByaW1hcnlEb21haW4oY29uc3QgU3RyaW5nJiBob3N0KTsKLQotcHJpdmF0ZToKLSAgICBSZXNv
dXJjZUxvYWRTdGF0aXN0aWNzU3RvcmUoKSA9IGRlZmF1bHQ7Ci0KLSAgICBIYXNoTWFwPFN0cmlu
ZywgUmVzb3VyY2VMb2FkU3RhdGlzdGljcz4gbV9yZXNvdXJjZVN0YXRpc3RpY3NNYXA7Ci0gICAg
bXV0YWJsZSBXVEY6OlJlY3Vyc2l2ZUxvY2tBZGFwdGVyPExvY2s+IG1fc3RhdGlzdGljc0xvY2s7
Ci0KLSAgICBXVEY6OkZ1bmN0aW9uPHZvaWQoKT4gbV9kYXRhQWRkZWRIYW5kbGVyOwotICAgIFdU
Rjo6RnVuY3Rpb248dm9pZChjb25zdCBWZWN0b3I8U3RyaW5nPiYsIGNvbnN0IFZlY3RvcjxTdHJp
bmc+JiwgYm9vbCBjbGVhckZpcnN0KT4gbV9zaG91bGRQYXJ0aXRpb25Db29raWVzRm9yRG9tYWlu
c0hhbmRsZXI7Ci0gICAgV1RGOjpGdW5jdGlvbjx2b2lkKCk+IG1fd3JpdGVQZXJzaXN0ZW50U3Rv
cmVIYW5kbGVyOwotICAgIFdURjo6RnVuY3Rpb248dm9pZCgpPiBtX2dyYW5kZmF0aGVyRXhpc3Rp
bmdXZWJzaXRlRGF0YUhhbmRsZXI7Ci0gICAgV1RGOjpGdW5jdGlvbjx2b2lkKCk+IG1fZGVsZXRl
UGVyc2lzdGVudFN0b3JlSGFuZGxlcjsKLSAgICBXVEY6OkZ1bmN0aW9uPHZvaWQoKT4gbV9maXJl
VGVsZW1ldHJ5SGFuZGxlcjsKLQotICAgIFdhbGxUaW1lIG1fZW5kT2ZHcmFuZGZhdGhlcmluZ1Rp
bWVzdGFtcDsKLSAgICBNb25vdG9uaWNUaW1lIG1fbGFzdFRpbWVEYXRhUmVjb3Jkc1dlcmVSZW1v
dmVkOwotICAgIGJvb2wgbV9kYXRhUmVjb3Jkc1JlbW92YWxQZW5kaW5nIHsgZmFsc2UgfTsKLX07
Ci0gICAgCi19IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0
Mi9DTWFrZUxpc3RzLnR4dCBiL1NvdXJjZS9XZWJLaXQyL0NNYWtlTGlzdHMudHh0CmluZGV4IGVm
NmIwMGIyNTNlMzUzOGNiM2EwM2QzZTAxMmYyMWJhMTU3NWQ3ZDYuLjNjMTI3OTdlZmE1MzRlNzVi
ODMwMTU1YmJhN2VhOTU3MGEzOTlkM2IgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL0NNYWtl
TGlzdHMudHh0CisrKyBiL1NvdXJjZS9XZWJLaXQyL0NNYWtlTGlzdHMudHh0CkBAIC00MzUsNiAr
NDM1LDcgQEAgc2V0KFdlYktpdDJfU09VUkNFUwogCiAgICAgVUlQcm9jZXNzL1N0b3JhZ2UvTG9j
YWxTdG9yYWdlRGF0YWJhc2UuY3BwCiAgICAgVUlQcm9jZXNzL1N0b3JhZ2UvTG9jYWxTdG9yYWdl
RGF0YWJhc2VUcmFja2VyLmNwcAorICAgIFVJUHJvY2Vzcy9TdG9yYWdlL1Jlc291cmNlTG9hZFN0
YXRpc3RpY3NTdG9yZS5jcHAKIAogICAgIFVJUHJvY2Vzcy9Vc2VyQ29udGVudC9XZWJTY3JpcHRN
ZXNzYWdlSGFuZGxlci5jcHAKICAgICBVSVByb2Nlc3MvVXNlckNvbnRlbnQvV2ViVXNlckNvbnRl
bnRDb250cm9sbGVyUHJveHkuY3BwCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nl
c3MvU3RvcmFnZS9SZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3RvcmUuY3BwIGIvU291cmNlL1dlYktp
dDIvVUlQcm9jZXNzL1N0b3JhZ2UvUmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlLmNwcApuZXcg
ZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwLi45YWQzZmRmM2Y0NDQ1NDIyMjBiZGI1YTU0YTZiN2JkNzY3YTI0ZTE5Ci0tLSAvZGV2
L251bGwKKysrIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL1N0b3JhZ2UvUmVzb3VyY2VMb2Fk
U3RhdGlzdGljc1N0b3JlLmNwcApAQCAtMCwwICsxLDQyNSBAQAorLyoKKyAqIENvcHlyaWdodCAo
QykgMjAxNi0yMDE3IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRp
c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp
dGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBm
b2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBv
ZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIu
CisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhl
IGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBh
bmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAq
CisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05U
UklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5U
SUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJB
TlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAq
IFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1Ig
SVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwg
SU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1B
R0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNV
QlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRT
OyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5Z
IFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElB
QklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBB
UklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJ
RiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKwor
I2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIlJlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9y
ZS5oIgorCisjaW5jbHVkZSAiTG9nZ2luZy5oIgorI2luY2x1ZGUgPFdlYkNvcmUvS2V5ZWRDb2Rp
bmcuaD4KKyNpbmNsdWRlIDxXZWJDb3JlL1Jlc291cmNlTG9hZFN0YXRpc3RpY3MuaD4KKyNpbmNs
dWRlIDxXZWJDb3JlL1NoYXJlZEJ1ZmZlci5oPgorI2luY2x1ZGUgPFdlYkNvcmUvVVJMLmg+Cisj
aW5jbHVkZSA8d3RmL0Nyb3NzVGhyZWFkQ29waWVyLmg+CisjaW5jbHVkZSA8d3RmL05ldmVyRGVz
dHJveWVkLmg+CisjaW5jbHVkZSA8d3RmL1J1bkxvb3AuaD4KKworbmFtZXNwYWNlIFdlYktpdCB7
CisKK3VzaW5nIG5hbWVzcGFjZSBXZWJDb3JlOworCitzdGF0aWMgY29uc3QgYXV0byBzdGF0aXN0
aWNzTW9kZWxWZXJzaW9uID0gNDsKK3N0YXRpYyBTZWNvbmRzIHRpbWVUb0xpdmVVc2VySW50ZXJh
Y3Rpb24geyAyNF9oICogMzAuIH07CitzdGF0aWMgU2Vjb25kcyB0aW1lVG9MaXZlQ29va2llUGFy
dGl0aW9uRnJlZSB7IDI0X2ggfTsKK3N0YXRpYyBTZWNvbmRzIGdyYW5kZmF0aGVyaW5nVGltZSB7
IDFfaCB9Oworc3RhdGljIFNlY29uZHMgbWluaW11bVRpbWVCZXR3ZWVlbkRhdGFSZWNvcmRzUmVt
b3ZhbCB7IDFfaCB9OworCitSZWY8UmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlPiBSZXNvdXJj
ZUxvYWRTdGF0aXN0aWNzU3RvcmU6OmNyZWF0ZSgpCit7CisgICAgcmV0dXJuIGFkb3B0UmVmKCpu
ZXcgUmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlKCkpOworfQorICAgIAorYm9vbCBSZXNvdXJj
ZUxvYWRTdGF0aXN0aWNzU3RvcmU6OmlzUHJldmFsZW50UmVzb3VyY2UoY29uc3QgU3RyaW5nJiBw
cmltYXJ5RG9tYWluKSBjb25zdAoreworICAgIGF1dG8gbG9ja2VyID0gaG9sZExvY2sobV9zdGF0
aXN0aWNzTG9jayk7CisgICAgYXV0byBtYXBFbnRyeSA9IG1fcmVzb3VyY2VTdGF0aXN0aWNzTWFw
LmZpbmQocHJpbWFyeURvbWFpbik7CisgICAgaWYgKG1hcEVudHJ5ID09IG1fcmVzb3VyY2VTdGF0
aXN0aWNzTWFwLmVuZCgpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICByZXR1cm4gbWFw
RW50cnktPnZhbHVlLmlzUHJldmFsZW50UmVzb3VyY2U7Cit9CisgICAgCitSZXNvdXJjZUxvYWRT
dGF0aXN0aWNzJiBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3RvcmU6OmVuc3VyZVJlc291cmNlU3Rh
dGlzdGljc0ZvclByaW1hcnlEb21haW4oY29uc3QgU3RyaW5nJiBwcmltYXJ5RG9tYWluKQorewor
ICAgIEFTU0VSVChtX3N0YXRpc3RpY3NMb2NrLmlzTG9ja2VkKCkpOworICAgIGF1dG8gYWRkUmVz
dWx0ID0gbV9yZXNvdXJjZVN0YXRpc3RpY3NNYXAuZW5zdXJlKHByaW1hcnlEb21haW4sIFsmcHJp
bWFyeURvbWFpbl0geworICAgICAgICByZXR1cm4gUmVzb3VyY2VMb2FkU3RhdGlzdGljcyhwcmlt
YXJ5RG9tYWluKTsKKyAgICB9KTsKKworICAgIHJldHVybiBhZGRSZXN1bHQuaXRlcmF0b3ItPnZh
bHVlOworfQorCit0eXBlZGVmIEhhc2hNYXA8U3RyaW5nLCBSZXNvdXJjZUxvYWRTdGF0aXN0aWNz
Pjo6S2V5VmFsdWVQYWlyVHlwZSBTdGF0aXN0aWNzVmFsdWU7CisKK3N0ZDo6dW5pcXVlX3B0cjxL
ZXllZEVuY29kZXI+IFJlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9yZTo6Y3JlYXRlRW5jb2RlckZy
b21EYXRhKCkKK3sKKyAgICBBU1NFUlQoIVJ1bkxvb3A6OmlzTWFpbigpKTsKKyAgICBhdXRvIGVu
Y29kZXIgPSBLZXllZEVuY29kZXI6OmVuY29kZXIoKTsKKworICAgIGF1dG8gbG9ja2VyID0gaG9s
ZExvY2sobV9zdGF0aXN0aWNzTG9jayk7CisgICAgZW5jb2Rlci0+ZW5jb2RlVUludDMyKCJ2ZXJz
aW9uIiwgc3RhdGlzdGljc01vZGVsVmVyc2lvbik7CisgICAgZW5jb2Rlci0+ZW5jb2RlRG91Ymxl
KCJlbmRPZkdyYW5kZmF0aGVyaW5nVGltZXN0YW1wIiwgbV9lbmRPZkdyYW5kZmF0aGVyaW5nVGlt
ZXN0YW1wLnNlY29uZHNTaW5jZUVwb2NoKCkudmFsdWUoKSk7CisgICAgCisgICAgZW5jb2Rlci0+
ZW5jb2RlT2JqZWN0cygiYnJvd3NpbmdTdGF0aXN0aWNzIiwgbV9yZXNvdXJjZVN0YXRpc3RpY3NN
YXAuYmVnaW4oKSwgbV9yZXNvdXJjZVN0YXRpc3RpY3NNYXAuZW5kKCksIFtdKEtleWVkRW5jb2Rl
ciYgZW5jb2RlcklubmVyLCBjb25zdCBTdGF0aXN0aWNzVmFsdWUmIG9yaWdpbikgeworICAgICAg
ICBvcmlnaW4udmFsdWUuZW5jb2RlKGVuY29kZXJJbm5lcik7CisgICAgfSk7CisKKyAgICByZXR1
cm4gZW5jb2RlcjsKK30KKwordm9pZCBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3RvcmU6OnJlYWRE
YXRhRnJvbURlY29kZXIoS2V5ZWREZWNvZGVyJiBkZWNvZGVyKQoreworICAgIEFTU0VSVCghUnVu
TG9vcDo6aXNNYWluKCkpOworICAgIEFTU0VSVChtX3N0YXRpc3RpY3NMb2NrLmlzTG9ja2VkKCkp
OworICAgIGlmIChtX3Jlc291cmNlU3RhdGlzdGljc01hcC5zaXplKCkpCisgICAgICAgIHJldHVy
bjsKKworICAgIHVuc2lnbmVkIHZlcnNpb247CisgICAgaWYgKCFkZWNvZGVyLmRlY29kZVVJbnQz
MigidmVyc2lvbiIsIHZlcnNpb24pKQorICAgICAgICB2ZXJzaW9uID0gMTsKKworICAgIHN0YXRp
YyBjb25zdCBhdXRvIG1pbmltdW1WZXJzaW9uV2l0aEdyYW5kZmF0aGVyaW5nID0gMzsKKyAgICBp
ZiAodmVyc2lvbiA+IG1pbmltdW1WZXJzaW9uV2l0aEdyYW5kZmF0aGVyaW5nKSB7CisgICAgICAg
IGRvdWJsZSBlbmRPZkdyYW5kZmF0aGVyaW5nVGltZXN0YW1wOworICAgICAgICBpZiAoZGVjb2Rl
ci5kZWNvZGVEb3VibGUoImVuZE9mR3JhbmRmYXRoZXJpbmdUaW1lc3RhbXAiLCBlbmRPZkdyYW5k
ZmF0aGVyaW5nVGltZXN0YW1wKSkKKyAgICAgICAgICAgIG1fZW5kT2ZHcmFuZGZhdGhlcmluZ1Rp
bWVzdGFtcCA9IFdhbGxUaW1lOjpmcm9tUmF3U2Vjb25kcyhlbmRPZkdyYW5kZmF0aGVyaW5nVGlt
ZXN0YW1wKTsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgbV9lbmRPZkdyYW5kZmF0aGVyaW5n
VGltZXN0YW1wID0geyB9OworICAgIH0KKworICAgIFZlY3RvcjxSZXNvdXJjZUxvYWRTdGF0aXN0
aWNzPiBsb2FkZWRTdGF0aXN0aWNzOworICAgIGJvb2wgc3VjY2VlZGVkID0gZGVjb2Rlci5kZWNv
ZGVPYmplY3RzKCJicm93c2luZ1N0YXRpc3RpY3MiLCBsb2FkZWRTdGF0aXN0aWNzLCBbdmVyc2lv
bl0oS2V5ZWREZWNvZGVyJiBkZWNvZGVySW5uZXIsIFJlc291cmNlTG9hZFN0YXRpc3RpY3MmIHN0
YXRpc3RpY3MpIHsKKyAgICAgICAgcmV0dXJuIHN0YXRpc3RpY3MuZGVjb2RlKGRlY29kZXJJbm5l
ciwgdmVyc2lvbik7CisgICAgfSk7CisKKyAgICBpZiAoIXN1Y2NlZWRlZCkKKyAgICAgICAgcmV0
dXJuOworCisgICAgVmVjdG9yPFN0cmluZz4gcHJldmFsZW50UmVzb3VyY2VEb21haW5zV2l0aG91
dFVzZXJJbnRlcmFjdGlvbjsKKyAgICBwcmV2YWxlbnRSZXNvdXJjZURvbWFpbnNXaXRob3V0VXNl
ckludGVyYWN0aW9uLnJlc2VydmVJbml0aWFsQ2FwYWNpdHkobG9hZGVkU3RhdGlzdGljcy5zaXpl
KCkpOworICAgIAorICAgIHsKKyAgICAgICAgYXV0byBsb2NrZXIgPSBob2xkTG9jayhtX3N0YXRp
c3RpY3NMb2NrKTsKKyAgICAgICAgZm9yIChhdXRvJiBzdGF0aXN0aWNzIDogbG9hZGVkU3RhdGlz
dGljcykgeworICAgICAgICAgICAgaWYgKHN0YXRpc3RpY3MuaXNQcmV2YWxlbnRSZXNvdXJjZSAm
JiAhc3RhdGlzdGljcy5oYWRVc2VySW50ZXJhY3Rpb24pIHsKKyAgICAgICAgICAgICAgICBwcmV2
YWxlbnRSZXNvdXJjZURvbWFpbnNXaXRob3V0VXNlckludGVyYWN0aW9uLnVuY2hlY2tlZEFwcGVu
ZChzdGF0aXN0aWNzLmhpZ2hMZXZlbERvbWFpbik7CisgICAgICAgICAgICAgICAgc3RhdGlzdGlj
cy5pc01hcmtlZEZvckNvb2tpZVBhcnRpdGlvbmluZyA9IHRydWU7CisgICAgICAgICAgICB9Cisg
ICAgICAgICAgICBtX3Jlc291cmNlU3RhdGlzdGljc01hcC5zZXQoc3RhdGlzdGljcy5oaWdoTGV2
ZWxEb21haW4sIFdURk1vdmUoc3RhdGlzdGljcykpOworICAgICAgICB9CisgICAgfQorICAgIAor
ICAgIGZpcmVTaG91bGRQYXJ0aXRpb25Db29raWVzSGFuZGxlcih7IH0sIHByZXZhbGVudFJlc291
cmNlRG9tYWluc1dpdGhvdXRVc2VySW50ZXJhY3Rpb24sIHRydWUpOworfQorCit2b2lkIFJlc291
cmNlTG9hZFN0YXRpc3RpY3NTdG9yZTo6Y2xlYXJJbk1lbW9yeSgpCit7CisgICAgQVNTRVJUKCFS
dW5Mb29wOjppc01haW4oKSk7CisgICAgeworICAgIGF1dG8gbG9ja2VyID0gaG9sZExvY2sobV9z
dGF0aXN0aWNzTG9jayk7CisgICAgbV9yZXNvdXJjZVN0YXRpc3RpY3NNYXAuY2xlYXIoKTsKKyAg
ICB9CisgICAgCisgICAgZmlyZVNob3VsZFBhcnRpdGlvbkNvb2tpZXNIYW5kbGVyKHsgfSwgeyB9
LCB0cnVlKTsKK30KKwordm9pZCBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3RvcmU6OmNsZWFySW5N
ZW1vcnlBbmRQZXJzaXN0ZW50KCkKK3sKKyAgICBBU1NFUlQoIVJ1bkxvb3A6OmlzTWFpbigpKTsK
KyAgICBjbGVhckluTWVtb3J5KCk7CisgICAgaWYgKG1fZGVsZXRlUGVyc2lzdGVudFN0b3JlSGFu
ZGxlcikKKyAgICAgICAgbV9kZWxldGVQZXJzaXN0ZW50U3RvcmVIYW5kbGVyKCk7CisgICAgaWYg
KG1fZ3JhbmRmYXRoZXJFeGlzdGluZ1dlYnNpdGVEYXRhSGFuZGxlcikKKyAgICAgICAgbV9ncmFu
ZGZhdGhlckV4aXN0aW5nV2Vic2l0ZURhdGFIYW5kbGVyKCk7Cit9CisKK3ZvaWQgUmVzb3VyY2VM
b2FkU3RhdGlzdGljc1N0b3JlOjptZXJnZVN0YXRpc3RpY3MoY29uc3QgVmVjdG9yPFJlc291cmNl
TG9hZFN0YXRpc3RpY3M+JiBzdGF0aXN0aWNzKQoreworICAgIEFTU0VSVCghUnVuTG9vcDo6aXNN
YWluKCkpOworICAgIGF1dG8gbG9ja2VyID0gaG9sZExvY2sobV9zdGF0aXN0aWNzTG9jayk7Cisg
ICAgZm9yIChhdXRvJiBzdGF0aXN0aWMgOiBzdGF0aXN0aWNzKSB7CisgICAgICAgIGF1dG8gcmVz
dWx0ID0gbV9yZXNvdXJjZVN0YXRpc3RpY3NNYXAuZW5zdXJlKHN0YXRpc3RpYy5oaWdoTGV2ZWxE
b21haW4sIFsmc3RhdGlzdGljXSB7CisgICAgICAgICAgICByZXR1cm4gUmVzb3VyY2VMb2FkU3Rh
dGlzdGljcyhzdGF0aXN0aWMuaGlnaExldmVsRG9tYWluKTsKKyAgICAgICAgfSk7CisgICAgICAg
IAorICAgICAgICByZXN1bHQuaXRlcmF0b3ItPnZhbHVlLm1lcmdlKHN0YXRpc3RpYyk7CisgICAg
fQorfQorCit2b2lkIFJlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9yZTo6c2V0Tm90aWZpY2F0aW9u
Q2FsbGJhY2soV1RGOjpGdW5jdGlvbjx2b2lkKCk+JiYgaGFuZGxlcikKK3sKKyAgICBtX2RhdGFB
ZGRlZEhhbmRsZXIgPSBXVEZNb3ZlKGhhbmRsZXIpOworfQorCit2b2lkIFJlc291cmNlTG9hZFN0
YXRpc3RpY3NTdG9yZTo6c2V0U2hvdWxkUGFydGl0aW9uQ29va2llc0NhbGxiYWNrKFdURjo6RnVu
Y3Rpb248dm9pZChjb25zdCBWZWN0b3I8U3RyaW5nPiYgZG9tYWluc1RvUmVtb3ZlLCBjb25zdCBW
ZWN0b3I8U3RyaW5nPiYgZG9tYWluc1RvQWRkLCBib29sIGNsZWFyRmlyc3QpPiYmIGhhbmRsZXIp
Cit7CisgICAgbV9zaG91bGRQYXJ0aXRpb25Db29raWVzRm9yRG9tYWluc0hhbmRsZXIgPSBXVEZN
b3ZlKGhhbmRsZXIpOworfQorICAgIAordm9pZCBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3RvcmU6
OnNldFdyaXRlUGVyc2lzdGVudFN0b3JlQ2FsbGJhY2soV1RGOjpGdW5jdGlvbjx2b2lkKCk+JiYg
aGFuZGxlcikKK3sKKyAgICBtX3dyaXRlUGVyc2lzdGVudFN0b3JlSGFuZGxlciA9IFdURk1vdmUo
aGFuZGxlcik7Cit9CisKK3ZvaWQgUmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlOjpzZXRHcmFu
ZGZhdGhlckV4aXN0aW5nV2Vic2l0ZURhdGFDYWxsYmFjayhXVEY6OkZ1bmN0aW9uPHZvaWQoKT4m
JiBoYW5kbGVyKQoreworICAgIG1fZ3JhbmRmYXRoZXJFeGlzdGluZ1dlYnNpdGVEYXRhSGFuZGxl
ciA9IFdURk1vdmUoaGFuZGxlcik7Cit9CisKK3ZvaWQgUmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0
b3JlOjpzZXREZWxldGVQZXJzaXN0ZW50U3RvcmVDYWxsYmFjayhXVEY6OkZ1bmN0aW9uPHZvaWQo
KT4mJiBoYW5kbGVyKQoreworICAgIG1fZGVsZXRlUGVyc2lzdGVudFN0b3JlSGFuZGxlciA9IFdU
Rk1vdmUoaGFuZGxlcik7Cit9CisKK3ZvaWQgUmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlOjpz
ZXRGaXJlVGVsZW1ldHJ5Q2FsbGJhY2soV1RGOjpGdW5jdGlvbjx2b2lkKCk+JiYgaGFuZGxlcikK
K3sKKyAgICBtX2ZpcmVUZWxlbWV0cnlIYW5kbGVyID0gV1RGTW92ZShoYW5kbGVyKTsKK30KKyAg
ICAKK3ZvaWQgUmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlOjpmaXJlRGF0YU1vZGlmaWNhdGlv
bkhhbmRsZXIoKQoreworICAgIEFTU0VSVCghUnVuTG9vcDo6aXNNYWluKCkpOworICAgIFJ1bkxv
b3A6Om1haW4oKS5kaXNwYXRjaChbdGhpcywgcHJvdGVjdGVkVGhpcyA9IG1ha2VSZWYoKnRoaXMp
XSAoKSB7CisgICAgICAgIGlmIChtX2RhdGFBZGRlZEhhbmRsZXIpCisgICAgICAgICAgICBtX2Rh
dGFBZGRlZEhhbmRsZXIoKTsKKyAgICB9KTsKK30KKwordm9pZCBSZXNvdXJjZUxvYWRTdGF0aXN0
aWNzU3RvcmU6OmZpcmVUZWxlbWV0cnlIYW5kbGVyKCkKK3sKKyAgICBBU1NFUlQoUnVuTG9vcDo6
aXNNYWluKCkpOworICAgIGlmIChtX2ZpcmVUZWxlbWV0cnlIYW5kbGVyKQorICAgICAgICBtX2Zp
cmVUZWxlbWV0cnlIYW5kbGVyKCk7Cit9CisgICAgCitzdGF0aWMgaW5saW5lIGJvb2wgc2hvdWxk
UGFydGl0aW9uQ29va2llcyhjb25zdCBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzJiBzdGF0aXN0aWMp
Cit7CisgICAgcmV0dXJuIHN0YXRpc3RpYy5pc1ByZXZhbGVudFJlc291cmNlICYmICghc3RhdGlz
dGljLmhhZFVzZXJJbnRlcmFjdGlvbiB8fCBXYWxsVGltZTo6bm93KCkgPiBzdGF0aXN0aWMubW9z
dFJlY2VudFVzZXJJbnRlcmFjdGlvblRpbWUgKyB0aW1lVG9MaXZlQ29va2llUGFydGl0aW9uRnJl
ZSk7Cit9CisKK3ZvaWQgUmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlOjpmaXJlU2hvdWxkUGFy
dGl0aW9uQ29va2llc0hhbmRsZXIoKQoreworICAgIEFTU0VSVCghUnVuTG9vcDo6aXNNYWluKCkp
OworICAgIFZlY3RvcjxTdHJpbmc+IGRvbWFpbnNUb1JlbW92ZTsKKyAgICBWZWN0b3I8U3RyaW5n
PiBkb21haW5zVG9BZGQ7CisgICAgCisgICAgYXV0byBsb2NrZXIgPSBob2xkTG9jayhtX3N0YXRp
c3RpY3NMb2NrKTsKKyAgICBmb3IgKGF1dG8mIHJlc291cmNlU3RhdGlzdGljIDogbV9yZXNvdXJj
ZVN0YXRpc3RpY3NNYXAudmFsdWVzKCkpIHsKKyAgICAgICAgYm9vbCBzaG91bGRQYXJ0aXRpb24g
PSBzaG91bGRQYXJ0aXRpb25Db29raWVzKHJlc291cmNlU3RhdGlzdGljKTsKKyAgICAgICAgaWYg
KHJlc291cmNlU3RhdGlzdGljLmlzTWFya2VkRm9yQ29va2llUGFydGl0aW9uaW5nICYmICFzaG91
bGRQYXJ0aXRpb24pIHsKKyAgICAgICAgICAgIHJlc291cmNlU3RhdGlzdGljLmlzTWFya2VkRm9y
Q29va2llUGFydGl0aW9uaW5nID0gZmFsc2U7CisgICAgICAgICAgICBkb21haW5zVG9SZW1vdmUu
YXBwZW5kKHJlc291cmNlU3RhdGlzdGljLmhpZ2hMZXZlbERvbWFpbik7CisgICAgICAgIH0gZWxz
ZSBpZiAoIXJlc291cmNlU3RhdGlzdGljLmlzTWFya2VkRm9yQ29va2llUGFydGl0aW9uaW5nICYm
IHNob3VsZFBhcnRpdGlvbikgeworICAgICAgICAgICAgcmVzb3VyY2VTdGF0aXN0aWMuaXNNYXJr
ZWRGb3JDb29raWVQYXJ0aXRpb25pbmcgPSB0cnVlOworICAgICAgICAgICAgZG9tYWluc1RvQWRk
LmFwcGVuZChyZXNvdXJjZVN0YXRpc3RpYy5oaWdoTGV2ZWxEb21haW4pOworICAgICAgICB9Cisg
ICAgfQorCisgICAgaWYgKGRvbWFpbnNUb1JlbW92ZS5pc0VtcHR5KCkgJiYgZG9tYWluc1RvQWRk
LmlzRW1wdHkoKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgUnVuTG9vcDo6bWFpbigpLmRpc3Bh
dGNoKFt0aGlzLCBwcm90ZWN0ZWRUaGlzID0gbWFrZVJlZigqdGhpcyksIGRvbWFpbnNUb1JlbW92
ZSA9IENyb3NzVGhyZWFkQ29waWVyPFZlY3RvcjxTdHJpbmc+Pjo6Y29weShkb21haW5zVG9SZW1v
dmUpLCBkb21haW5zVG9BZGQgPSBDcm9zc1RocmVhZENvcGllcjxWZWN0b3I8U3RyaW5nPj46OmNv
cHkoZG9tYWluc1RvQWRkKV0gKCkgeworICAgICAgICBpZiAobV9zaG91bGRQYXJ0aXRpb25Db29r
aWVzRm9yRG9tYWluc0hhbmRsZXIpCisgICAgICAgICAgICBtX3Nob3VsZFBhcnRpdGlvbkNvb2tp
ZXNGb3JEb21haW5zSGFuZGxlcihkb21haW5zVG9SZW1vdmUsIGRvbWFpbnNUb0FkZCwgZmFsc2Up
OworICAgIH0pOworfQorCit2b2lkIFJlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9yZTo6ZmlyZVNo
b3VsZFBhcnRpdGlvbkNvb2tpZXNIYW5kbGVyKGNvbnN0IFZlY3RvcjxTdHJpbmc+JiBkb21haW5z
VG9SZW1vdmUsIGNvbnN0IFZlY3RvcjxTdHJpbmc+JiBkb21haW5zVG9BZGQsIGJvb2wgY2xlYXJG
aXJzdCkKK3sKKyAgICBBU1NFUlQoIVJ1bkxvb3A6OmlzTWFpbigpKTsKKyAgICBpZiAoZG9tYWlu
c1RvUmVtb3ZlLmlzRW1wdHkoKSAmJiBkb21haW5zVG9BZGQuaXNFbXB0eSgpKQorICAgICAgICBy
ZXR1cm47CisgICAgCisgICAgUnVuTG9vcDo6bWFpbigpLmRpc3BhdGNoKFt0aGlzLCBjbGVhckZp
cnN0LCBwcm90ZWN0ZWRUaGlzID0gbWFrZVJlZigqdGhpcyksIGRvbWFpbnNUb1JlbW92ZSA9IENy
b3NzVGhyZWFkQ29waWVyPFZlY3RvcjxTdHJpbmc+Pjo6Y29weShkb21haW5zVG9SZW1vdmUpLCBk
b21haW5zVG9BZGQgPSBDcm9zc1RocmVhZENvcGllcjxWZWN0b3I8U3RyaW5nPj46OmNvcHkoZG9t
YWluc1RvQWRkKV0gKCkgeworICAgICAgICBpZiAobV9zaG91bGRQYXJ0aXRpb25Db29raWVzRm9y
RG9tYWluc0hhbmRsZXIpCisgICAgICAgICAgICBtX3Nob3VsZFBhcnRpdGlvbkNvb2tpZXNGb3JE
b21haW5zSGFuZGxlcihkb21haW5zVG9SZW1vdmUsIGRvbWFpbnNUb0FkZCwgY2xlYXJGaXJzdCk7
CisgICAgfSk7CisgICAgCisgICAgYXV0byBsb2NrZXIgPSBob2xkTG9jayhtX3N0YXRpc3RpY3NM
b2NrKTsKKyAgICBpZiAoY2xlYXJGaXJzdCkgeworICAgICAgICBmb3IgKGF1dG8mIHJlc291cmNl
U3RhdGlzdGljIDogbV9yZXNvdXJjZVN0YXRpc3RpY3NNYXAudmFsdWVzKCkpCisgICAgICAgICAg
ICByZXNvdXJjZVN0YXRpc3RpYy5pc01hcmtlZEZvckNvb2tpZVBhcnRpdGlvbmluZyA9IGZhbHNl
OworICAgIH0gZWxzZSB7CisgICAgICAgIGZvciAoYXV0byYgZG9tYWluIDogZG9tYWluc1RvUmVt
b3ZlKQorICAgICAgICAgICAgZW5zdXJlUmVzb3VyY2VTdGF0aXN0aWNzRm9yUHJpbWFyeURvbWFp
bihkb21haW4pLmlzTWFya2VkRm9yQ29va2llUGFydGl0aW9uaW5nID0gZmFsc2U7CisgICAgfQor
CisgICAgZm9yIChhdXRvJiBkb21haW4gOiBkb21haW5zVG9BZGQpCisgICAgICAgIGVuc3VyZVJl
c291cmNlU3RhdGlzdGljc0ZvclByaW1hcnlEb21haW4oZG9tYWluKS5pc01hcmtlZEZvckNvb2tp
ZVBhcnRpdGlvbmluZyA9IHRydWU7Cit9CisKK3ZvaWQgUmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0
b3JlOjpzZXRUaW1lVG9MaXZlVXNlckludGVyYWN0aW9uKFNlY29uZHMgc2Vjb25kcykKK3sKKyAg
ICBpZiAoc2Vjb25kcyA+PSAwX3MpCisgICAgICAgIHRpbWVUb0xpdmVVc2VySW50ZXJhY3Rpb24g
PSBzZWNvbmRzOworfQorCit2b2lkIFJlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9yZTo6c2V0VGlt
ZVRvTGl2ZUNvb2tpZVBhcnRpdGlvbkZyZWUoU2Vjb25kcyBzZWNvbmRzKQoreworICAgIGlmIChz
ZWNvbmRzID49IDBfcykKKyAgICAgICAgdGltZVRvTGl2ZUNvb2tpZVBhcnRpdGlvbkZyZWUgPSBz
ZWNvbmRzOworfQorCit2b2lkIFJlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9yZTo6c2V0TWluaW11
bVRpbWVCZXR3ZWVlbkRhdGFSZWNvcmRzUmVtb3ZhbChTZWNvbmRzIHNlY29uZHMpCit7CisgICAg
aWYgKHNlY29uZHMgPj0gMF9zKQorICAgICAgICBtaW5pbXVtVGltZUJldHdlZWVuRGF0YVJlY29y
ZHNSZW1vdmFsID0gc2Vjb25kczsKK30KKwordm9pZCBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3Rv
cmU6OnNldEdyYW5kZmF0aGVyaW5nVGltZShTZWNvbmRzIHNlY29uZHMpCit7CisgICAgaWYgKHNl
Y29uZHMgPj0gMF9zKQorICAgICAgICBncmFuZGZhdGhlcmluZ1RpbWUgPSBzZWNvbmRzOworfQor
Cit2b2lkIFJlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9yZTo6cHJvY2Vzc1N0YXRpc3RpY3MoV1RG
OjpGdW5jdGlvbjx2b2lkKFJlc291cmNlTG9hZFN0YXRpc3RpY3MmKT4mJiBwcm9jZXNzRnVuY3Rp
b24pCit7CisgICAgQVNTRVJUKCFSdW5Mb29wOjppc01haW4oKSk7CisgICAgYXV0byBsb2NrZXIg
PSBob2xkTG9jayhtX3N0YXRpc3RpY3NMb2NrKTsKKyAgICBmb3IgKGF1dG8mIHJlc291cmNlU3Rh
dGlzdGljIDogbV9yZXNvdXJjZVN0YXRpc3RpY3NNYXAudmFsdWVzKCkpCisgICAgICAgIHByb2Nl
c3NGdW5jdGlvbihyZXNvdXJjZVN0YXRpc3RpYyk7Cit9CisKK2Jvb2wgUmVzb3VyY2VMb2FkU3Rh
dGlzdGljc1N0b3JlOjpoYXNIYWRSZWNlbnRVc2VySW50ZXJhY3Rpb24oUmVzb3VyY2VMb2FkU3Rh
dGlzdGljcyYgcmVzb3VyY2VTdGF0aXN0aWMpIGNvbnN0Cit7CisgICAgaWYgKCFyZXNvdXJjZVN0
YXRpc3RpYy5oYWRVc2VySW50ZXJhY3Rpb24pCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAg
IGlmIChXYWxsVGltZTo6bm93KCkgPiByZXNvdXJjZVN0YXRpc3RpYy5tb3N0UmVjZW50VXNlcklu
dGVyYWN0aW9uVGltZSArIHRpbWVUb0xpdmVVc2VySW50ZXJhY3Rpb24pIHsKKyAgICAgICAgLy8g
RHJvcCBwcml2YWN5IHNlbnNpdGl2ZSBkYXRhIGJlY2F1c2Ugd2Ugbm8gbG9uZ2VyIG5lZWQgaXQu
CisgICAgICAgIC8vIFNldCB0aW1lc3RhbXAgdG8gMCBzbyB0aGF0IHN0YXRpc3RpY3MgbWVyZ2Ug
d2lsbCBrbm93CisgICAgICAgIC8vIGl0IGhhcyBiZWVuIHJlc2V0IGFzIG9wcG9zZWQgdG8gaXRz
IGRlZmF1bHQgLTEuCisgICAgICAgIHJlc291cmNlU3RhdGlzdGljLm1vc3RSZWNlbnRVc2VySW50
ZXJhY3Rpb25UaW1lID0geyB9OworICAgICAgICByZXNvdXJjZVN0YXRpc3RpYy5oYWRVc2VySW50
ZXJhY3Rpb24gPSBmYWxzZTsKKworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorCisgICAg
cmV0dXJuIHRydWU7Cit9CisKK1ZlY3RvcjxTdHJpbmc+IFJlc291cmNlTG9hZFN0YXRpc3RpY3NT
dG9yZTo6dG9wUHJpdmF0ZWx5Q29udHJvbGxlZERvbWFpbnNUb1JlbW92ZVdlYnNpdGVEYXRhRm9y
KCkKK3sKKyAgICBib29sIHNob3VsZENoZWNrRm9yR3JhbmRmYXRoZXJpbmcgPSBtX2VuZE9mR3Jh
bmRmYXRoZXJpbmdUaW1lc3RhbXAgPiBXYWxsVGltZTo6bm93KCk7CisgICAgYm9vbCBzaG91bGRD
bGVhckdyYW5kZmF0aGVyaW5nID0gIXNob3VsZENoZWNrRm9yR3JhbmRmYXRoZXJpbmcgJiYgbV9l
bmRPZkdyYW5kZmF0aGVyaW5nVGltZXN0YW1wOworCisgICAgaWYgKHNob3VsZENsZWFyR3JhbmRm
YXRoZXJpbmcpCisgICAgICAgIG1fZW5kT2ZHcmFuZGZhdGhlcmluZ1RpbWVzdGFtcCA9IHsgfTsK
KworICAgIFZlY3RvcjxTdHJpbmc+IHByZXZhbGVudFJlc291cmNlczsKKyAgICBhdXRvIGxvY2tl
ciA9IGhvbGRMb2NrKG1fc3RhdGlzdGljc0xvY2spOworICAgIGZvciAoYXV0byYgc3RhdGlzdGlj
IDogbV9yZXNvdXJjZVN0YXRpc3RpY3NNYXAudmFsdWVzKCkpIHsKKyAgICAgICAgaWYgKHN0YXRp
c3RpYy5pc1ByZXZhbGVudFJlc291cmNlCisgICAgICAgICAgICAmJiAhaGFzSGFkUmVjZW50VXNl
ckludGVyYWN0aW9uKHN0YXRpc3RpYykKKyAgICAgICAgICAgICYmICghc2hvdWxkQ2hlY2tGb3JH
cmFuZGZhdGhlcmluZyB8fCAhc3RhdGlzdGljLmdyYW5kZmF0aGVyZWQpKQorICAgICAgICAgICAg
cHJldmFsZW50UmVzb3VyY2VzLmFwcGVuZChzdGF0aXN0aWMuaGlnaExldmVsRG9tYWluKTsKKwor
ICAgICAgICBpZiAoc2hvdWxkQ2xlYXJHcmFuZGZhdGhlcmluZyAmJiBzdGF0aXN0aWMuZ3JhbmRm
YXRoZXJlZCkKKyAgICAgICAgICAgIHN0YXRpc3RpYy5ncmFuZGZhdGhlcmVkID0gZmFsc2U7Cisg
ICAgfQorCisgICAgcmV0dXJuIHByZXZhbGVudFJlc291cmNlczsKK30KKyAgICAKK1ZlY3RvcjxQ
cmV2YWxlbnRSZXNvdXJjZVRlbGVtZXRyeT4gUmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlOjpz
b3J0ZWRQcmV2YWxlbnRSZXNvdXJjZVRlbGVtZXRyeSgpIGNvbnN0Cit7CisgICAgQVNTRVJUKCFS
dW5Mb29wOjppc01haW4oKSk7CisgICAgYXV0byBsb2NrZXIgPSBob2xkTG9jayhtX3N0YXRpc3Rp
Y3NMb2NrKTsKKyAgICBWZWN0b3I8UHJldmFsZW50UmVzb3VyY2VUZWxlbWV0cnk+IHNvcnRlZDsK
KyAgICBmb3IgKGF1dG8mIHN0YXRpc3RpYyA6IG1fcmVzb3VyY2VTdGF0aXN0aWNzTWFwLnZhbHVl
cygpKSB7CisgICAgICAgIGlmICghc3RhdGlzdGljLmlzUHJldmFsZW50UmVzb3VyY2UpCisgICAg
ICAgICAgICBjb250aW51ZTsKKworICAgICAgICB1bnNpZ25lZCBkYXlzU2luY2VVc2VySW50ZXJh
Y3Rpb24gPSBzdGF0aXN0aWMubW9zdFJlY2VudFVzZXJJbnRlcmFjdGlvblRpbWUgPD0gV2FsbFRp
bWUoKSA/IDAgOiBzdGQ6OmZsb29yKChXYWxsVGltZTo6bm93KCkgLSBzdGF0aXN0aWMubW9zdFJl
Y2VudFVzZXJJbnRlcmFjdGlvblRpbWUpIC8gMjRfaCk7CisgICAgICAgIHNvcnRlZC5hcHBlbmQo
UHJldmFsZW50UmVzb3VyY2VUZWxlbWV0cnkgeworICAgICAgICAgICAgc3RhdGlzdGljLmRhdGFS
ZWNvcmRzUmVtb3ZlZCwKKyAgICAgICAgICAgIHN0YXRpc3RpYy5oYWRVc2VySW50ZXJhY3Rpb24s
CisgICAgICAgICAgICBkYXlzU2luY2VVc2VySW50ZXJhY3Rpb24sCisgICAgICAgICAgICBzdGF0
aXN0aWMuc3ViZnJhbWVVbmRlclRvcEZyYW1lT3JpZ2lucy5zaXplKCksCisgICAgICAgICAgICBz
dGF0aXN0aWMuc3VicmVzb3VyY2VVbmRlclRvcEZyYW1lT3JpZ2lucy5zaXplKCksCisgICAgICAg
ICAgICBzdGF0aXN0aWMuc3VicmVzb3VyY2VVbmlxdWVSZWRpcmVjdHNUby5zaXplKCkKKyAgICAg
ICAgfSk7CisgICAgfQorICAgIAorICAgIGlmIChzb3J0ZWQuc2l6ZSgpIDwgbWluaW11bVByZXZh
bGVudFJlc291cmNlc0ZvclRlbGVtZXRyeSkKKyAgICAgICAgcmV0dXJuIHsgfTsKKworICAgIHN0
ZDo6c29ydChzb3J0ZWQuYmVnaW4oKSwgc29ydGVkLmVuZCgpLCBbXShjb25zdCBQcmV2YWxlbnRS
ZXNvdXJjZVRlbGVtZXRyeSYgYSwgY29uc3QgUHJldmFsZW50UmVzb3VyY2VUZWxlbWV0cnkmIGIp
IHsKKyAgICAgICAgcmV0dXJuIGEuc3ViZnJhbWVVbmRlclRvcEZyYW1lT3JpZ2lucyArIGEuc3Vi
cmVzb3VyY2VVbmRlclRvcEZyYW1lT3JpZ2lucyArIGEuc3VicmVzb3VyY2VVbmlxdWVSZWRpcmVj
dHNUbyA+CisgICAgICAgIGIuc3ViZnJhbWVVbmRlclRvcEZyYW1lT3JpZ2lucyArIGIuc3VicmVz
b3VyY2VVbmRlclRvcEZyYW1lT3JpZ2lucyArIGIuc3VicmVzb3VyY2VVbmlxdWVSZWRpcmVjdHNU
bzsKKyAgICB9KTsKKyAgICAKKyAgICByZXR1cm4gc29ydGVkOworfQorCit2b2lkIFJlc291cmNl
TG9hZFN0YXRpc3RpY3NTdG9yZTo6dXBkYXRlU3RhdGlzdGljc0ZvclJlbW92ZWREYXRhUmVjb3Jk
cyhjb25zdCBIYXNoU2V0PFN0cmluZz4mIHByZXZhbGVudFJlc291cmNlRG9tYWlucykKK3sKKyAg
ICBhdXRvIGxvY2tlciA9IGhvbGRMb2NrKG1fc3RhdGlzdGljc0xvY2spOworICAgIGZvciAoYXV0
byYgcHJldmFsZW50UmVzb3VyY2VEb21haW4gOiBwcmV2YWxlbnRSZXNvdXJjZURvbWFpbnMpIHsK
KyAgICAgICAgUmVzb3VyY2VMb2FkU3RhdGlzdGljcyYgc3RhdGlzdGljID0gZW5zdXJlUmVzb3Vy
Y2VTdGF0aXN0aWNzRm9yUHJpbWFyeURvbWFpbihwcmV2YWxlbnRSZXNvdXJjZURvbWFpbik7Cisg
ICAgICAgICsrc3RhdGlzdGljLmRhdGFSZWNvcmRzUmVtb3ZlZDsKKyAgICB9Cit9CisKK3ZvaWQg
UmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlOjpoYW5kbGVGcmVzaFN0YXJ0V2l0aEVtcHR5T3JO
b1N0b3JlKEhhc2hTZXQ8U3RyaW5nPiYmIHRvcFByaXZhdGVseUNvbnRyb2xsZWREb21haW5zVG9H
cmFuZGZhdGhlcikKK3sKKyAgICBhdXRvIGxvY2tlciA9IGhvbGRMb2NrKG1fc3RhdGlzdGljc0xv
Y2spOworICAgIGZvciAoYXV0byYgdG9wUHJpdmF0ZWx5Q29udHJvbGxlZERvbWFpbiA6IHRvcFBy
aXZhdGVseUNvbnRyb2xsZWREb21haW5zVG9HcmFuZGZhdGhlcikgeworICAgICAgICBSZXNvdXJj
ZUxvYWRTdGF0aXN0aWNzJiBzdGF0aXN0aWMgPSBlbnN1cmVSZXNvdXJjZVN0YXRpc3RpY3NGb3JQ
cmltYXJ5RG9tYWluKHRvcFByaXZhdGVseUNvbnRyb2xsZWREb21haW4pOworICAgICAgICBzdGF0
aXN0aWMuZ3JhbmRmYXRoZXJlZCA9IHRydWU7CisgICAgfQorICAgIG1fZW5kT2ZHcmFuZGZhdGhl
cmluZ1RpbWVzdGFtcCA9IFdhbGxUaW1lOjpub3coKSArIGdyYW5kZmF0aGVyaW5nVGltZTsKK30K
KworYm9vbCBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3RvcmU6OnNob3VsZFJlbW92ZURhdGFSZWNv
cmRzKCkgY29uc3QKK3sKKyAgICBBU1NFUlQoIVJ1bkxvb3A6OmlzTWFpbigpKTsKKyAgICBpZiAo
bV9kYXRhUmVjb3Jkc1JlbW92YWxQZW5kaW5nKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAg
ICBpZiAobV9sYXN0VGltZURhdGFSZWNvcmRzV2VyZVJlbW92ZWQgJiYgTW9ub3RvbmljVGltZTo6
bm93KCkgPCAobV9sYXN0VGltZURhdGFSZWNvcmRzV2VyZVJlbW92ZWQgKyBtaW5pbXVtVGltZUJl
dHdlZWVuRGF0YVJlY29yZHNSZW1vdmFsKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAg
cmV0dXJuIHRydWU7Cit9CisKK3ZvaWQgUmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlOjpkYXRh
UmVjb3Jkc0JlaW5nUmVtb3ZlZCgpCit7CisgICAgQVNTRVJUKCFSdW5Mb29wOjppc01haW4oKSk7
CisgICAgbV9sYXN0VGltZURhdGFSZWNvcmRzV2VyZVJlbW92ZWQgPSBNb25vdG9uaWNUaW1lOjpu
b3coKTsKKyAgICBtX2RhdGFSZWNvcmRzUmVtb3ZhbFBlbmRpbmcgPSB0cnVlOworfQorCit2b2lk
IFJlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9yZTo6ZGF0YVJlY29yZHNXZXJlUmVtb3ZlZCgpCit7
CisgICAgQVNTRVJUKCFSdW5Mb29wOjppc01haW4oKSk7CisgICAgbV9kYXRhUmVjb3Jkc1JlbW92
YWxQZW5kaW5nID0gZmFsc2U7Cit9CisgICAgCitXVEY6OlJlY3Vyc2l2ZUxvY2tBZGFwdGVyPExv
Y2s+JiBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3RvcmU6OnN0YXRpc3RpY3NMb2NrKCkKK3sKKyAg
ICByZXR1cm4gbV9zdGF0aXN0aWNzTG9jazsKK30KKyAgICAKK30KZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJLaXQyL1VJUHJvY2Vzcy9TdG9yYWdlL1Jlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9yZS5o
IGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL1N0b3JhZ2UvUmVzb3VyY2VMb2FkU3RhdGlzdGlj
c1N0b3JlLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMC4uODUzM2JlYmRkZjIwN2ZhYzA5ZGQ3ZTZlMTNmMGVlYWE0NDNm
YjFiOAotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9TdG9yYWdl
L1Jlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9yZS5oCkBAIC0wLDAgKzEsMTIzIEBACisvKgorICog
Q29weXJpZ2h0IChDKSAyMDE2LTIwMTcgQXBwbGUgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4K
KyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1z
LCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRl
ZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlz
dHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0
CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCBy
ZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9j
dW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3Ry
aWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4g
YGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0Yg
TUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0Ug
QVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05U
UklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwg
U1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09P
RFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVT
SU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICog
T0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBU
T1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFO
WSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNF
RCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI3ByYWdtYSBvbmNl
CisKKyNpbmNsdWRlIDx3dGYvRnVuY3Rpb24uaD4KKyNpbmNsdWRlIDx3dGYvSGFzaE1hcC5oPgor
I2luY2x1ZGUgPHd0Zi9IYXNoU2V0Lmg+CisjaW5jbHVkZSA8d3RmL01vbm90b25pY1RpbWUuaD4K
KyNpbmNsdWRlIDx3dGYvUmVjdXJzaXZlTG9ja0FkYXB0ZXIuaD4KKyNpbmNsdWRlIDx3dGYvV2Fs
bFRpbWUuaD4KKyNpbmNsdWRlIDx3dGYvdGV4dC9XVEZTdHJpbmcuaD4KKworbmFtZXNwYWNlIFdl
YkNvcmUgeworY2xhc3MgS2V5ZWREZWNvZGVyOworY2xhc3MgS2V5ZWRFbmNvZGVyOworc3RydWN0
IFJlc291cmNlTG9hZFN0YXRpc3RpY3M7Cit9CisKK25hbWVzcGFjZSBXZWJLaXQgeworCitzdGF0
aWMgY29uc3QgYXV0byBtaW5pbXVtUHJldmFsZW50UmVzb3VyY2VzRm9yVGVsZW1ldHJ5ID0gMzsK
Kworc3RydWN0IFByZXZhbGVudFJlc291cmNlVGVsZW1ldHJ5IHsKKyAgICB1bnNpZ25lZCBudW1i
ZXJPZlRpbWVzRGF0YVJlY29yZHNSZW1vdmVkOworICAgIGJvb2wgaGFzSGFkVXNlckludGVyYWN0
aW9uOworICAgIHVuc2lnbmVkIGRheXNTaW5jZVVzZXJJbnRlcmFjdGlvbjsKKyAgICB1bnNpZ25l
ZCBzdWJmcmFtZVVuZGVyVG9wRnJhbWVPcmlnaW5zOworICAgIHVuc2lnbmVkIHN1YnJlc291cmNl
VW5kZXJUb3BGcmFtZU9yaWdpbnM7CisgICAgdW5zaWduZWQgc3VicmVzb3VyY2VVbmlxdWVSZWRp
cmVjdHNUbzsKK307CisKKy8vIEZJWE1FOiBXZSBzaG91bGQgcHJvYmFibHkgY29uc2lkZXIgbWVy
Z2luZyB0aGlzIHdpdGggV2ViUmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlLgorY2xhc3MgUmVz
b3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlIDogcHVibGljIFRocmVhZFNhZmVSZWZDb3VudGVkPFJl
c291cmNlTG9hZFN0YXRpc3RpY3NTdG9yZT4geworcHVibGljOgorICAgIHN0YXRpYyBSZWY8UmVz
b3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlPiBjcmVhdGUoKTsKKworICAgIHN0ZDo6dW5pcXVlX3B0
cjxXZWJDb3JlOjpLZXllZEVuY29kZXI+IGNyZWF0ZUVuY29kZXJGcm9tRGF0YSgpOworICAgIHZv
aWQgcmVhZERhdGFGcm9tRGVjb2RlcihXZWJDb3JlOjpLZXllZERlY29kZXImKTsKKworICAgIGJv
b2wgaXNFbXB0eSgpIGNvbnN0IHsgcmV0dXJuIG1fcmVzb3VyY2VTdGF0aXN0aWNzTWFwLmlzRW1w
dHkoKTsgfQorICAgIHNpemVfdCBzaXplKCkgY29uc3QgeyByZXR1cm4gbV9yZXNvdXJjZVN0YXRp
c3RpY3NNYXAuc2l6ZSgpOyB9CisgICAgdm9pZCBjbGVhckluTWVtb3J5KCk7CisgICAgdm9pZCBj
bGVhckluTWVtb3J5QW5kUGVyc2lzdGVudCgpOworCisgICAgV2ViQ29yZTo6UmVzb3VyY2VMb2Fk
U3RhdGlzdGljcyYgZW5zdXJlUmVzb3VyY2VTdGF0aXN0aWNzRm9yUHJpbWFyeURvbWFpbihjb25z
dCBTdHJpbmcmKTsKKyAgICB2b2lkIHNldFJlc291cmNlU3RhdGlzdGljc0ZvclByaW1hcnlEb21h
aW4oY29uc3QgU3RyaW5nJiwgV2ViQ29yZTo6UmVzb3VyY2VMb2FkU3RhdGlzdGljcyYmKTsKKwor
ICAgIGJvb2wgaXNQcmV2YWxlbnRSZXNvdXJjZShjb25zdCBTdHJpbmcmKSBjb25zdDsKKyAgICAK
KyAgICB2b2lkIG1lcmdlU3RhdGlzdGljcyhjb25zdCBWZWN0b3I8V2ViQ29yZTo6UmVzb3VyY2VM
b2FkU3RhdGlzdGljcz4mKTsKKworICAgIHZvaWQgc2V0Tm90aWZpY2F0aW9uQ2FsbGJhY2soV1RG
OjpGdW5jdGlvbjx2b2lkKCk+JiYpOworICAgIHZvaWQgc2V0U2hvdWxkUGFydGl0aW9uQ29va2ll
c0NhbGxiYWNrKFdURjo6RnVuY3Rpb248dm9pZChjb25zdCBWZWN0b3I8U3RyaW5nPiYgZG9tYWlu
c1RvUmVtb3ZlLCBjb25zdCBWZWN0b3I8U3RyaW5nPiYgZG9tYWluc1RvQWRkLCBib29sIGNsZWFy
Rmlyc3QpPiYmKTsKKyAgICB2b2lkIHNldFdyaXRlUGVyc2lzdGVudFN0b3JlQ2FsbGJhY2soV1RG
OjpGdW5jdGlvbjx2b2lkKCk+JiYpOworICAgIHZvaWQgc2V0RGVsZXRlUGVyc2lzdGVudFN0b3Jl
Q2FsbGJhY2soV1RGOjpGdW5jdGlvbjx2b2lkKCk+JiYpOworICAgIHZvaWQgc2V0R3JhbmRmYXRo
ZXJFeGlzdGluZ1dlYnNpdGVEYXRhQ2FsbGJhY2soV1RGOjpGdW5jdGlvbjx2b2lkKCk+JiYpOwor
ICAgIHZvaWQgc2V0RmlyZVRlbGVtZXRyeUNhbGxiYWNrKFdURjo6RnVuY3Rpb248dm9pZCgpPiYm
IGhhbmRsZXIpOworCisgICAgdm9pZCBmaXJlRGF0YU1vZGlmaWNhdGlvbkhhbmRsZXIoKTsKKyAg
ICB2b2lkIGZpcmVUZWxlbWV0cnlIYW5kbGVyKCk7CisgICAgdm9pZCBzZXRUaW1lVG9MaXZlVXNl
ckludGVyYWN0aW9uKFNlY29uZHMpOworICAgIHZvaWQgc2V0VGltZVRvTGl2ZUNvb2tpZVBhcnRp
dGlvbkZyZWUoU2Vjb25kcyk7CisgICAgdm9pZCBzZXRNaW5pbXVtVGltZUJldHdlZWVuRGF0YVJl
Y29yZHNSZW1vdmFsKFNlY29uZHMpOworICAgIHZvaWQgc2V0R3JhbmRmYXRoZXJpbmdUaW1lKFNl
Y29uZHMpOworICAgIHZvaWQgZmlyZVNob3VsZFBhcnRpdGlvbkNvb2tpZXNIYW5kbGVyKCk7Cisg
ICAgdm9pZCBmaXJlU2hvdWxkUGFydGl0aW9uQ29va2llc0hhbmRsZXIoY29uc3QgVmVjdG9yPFN0
cmluZz4mIGRvbWFpbnNUb1JlbW92ZSwgY29uc3QgVmVjdG9yPFN0cmluZz4mIGRvbWFpbnNUb0Fk
ZCwgYm9vbCBjbGVhckZpcnN0KTsKKworICAgIHZvaWQgcHJvY2Vzc1N0YXRpc3RpY3MoV1RGOjpG
dW5jdGlvbjx2b2lkIChXZWJDb3JlOjpSZXNvdXJjZUxvYWRTdGF0aXN0aWNzJik+JiYpOworCisg
ICAgYm9vbCBoYXNIYWRSZWNlbnRVc2VySW50ZXJhY3Rpb24oV2ViQ29yZTo6UmVzb3VyY2VMb2Fk
U3RhdGlzdGljcyYpIGNvbnN0OworICAgIFZlY3RvcjxTdHJpbmc+IHRvcFByaXZhdGVseUNvbnRy
b2xsZWREb21haW5zVG9SZW1vdmVXZWJzaXRlRGF0YUZvcigpOworICAgIFZlY3RvcjxQcmV2YWxl
bnRSZXNvdXJjZVRlbGVtZXRyeT4gc29ydGVkUHJldmFsZW50UmVzb3VyY2VUZWxlbWV0cnkoKSBj
b25zdDsKKyAgICB2b2lkIHVwZGF0ZVN0YXRpc3RpY3NGb3JSZW1vdmVkRGF0YVJlY29yZHMoY29u
c3QgSGFzaFNldDxTdHJpbmc+JiBwcmV2YWxlbnRSZXNvdXJjZURvbWFpbnMpOworCisgICAgdm9p
ZCBoYW5kbGVGcmVzaFN0YXJ0V2l0aEVtcHR5T3JOb1N0b3JlKEhhc2hTZXQ8U3RyaW5nPiYmIHRv
cFByaXZhdGVseUNvbnRyb2xsZWREb21haW5zVG9HcmFuZGZhdGhlcik7CisgICAgYm9vbCBzaG91
bGRSZW1vdmVEYXRhUmVjb3JkcygpIGNvbnN0OworICAgIHZvaWQgZGF0YVJlY29yZHNCZWluZ1Jl
bW92ZWQoKTsKKyAgICB2b2lkIGRhdGFSZWNvcmRzV2VyZVJlbW92ZWQoKTsKKyAgICAKKyAgICBX
VEY6OlJlY3Vyc2l2ZUxvY2tBZGFwdGVyPExvY2s+JiBzdGF0aXN0aWNzTG9jaygpOworCitwcml2
YXRlOgorICAgIFJlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9yZSgpID0gZGVmYXVsdDsKKworICAg
IEhhc2hNYXA8U3RyaW5nLCBXZWJDb3JlOjpSZXNvdXJjZUxvYWRTdGF0aXN0aWNzPiBtX3Jlc291
cmNlU3RhdGlzdGljc01hcDsKKyAgICBtdXRhYmxlIFdURjo6UmVjdXJzaXZlTG9ja0FkYXB0ZXI8
TG9jaz4gbV9zdGF0aXN0aWNzTG9jazsKKworICAgIFdURjo6RnVuY3Rpb248dm9pZCgpPiBtX2Rh
dGFBZGRlZEhhbmRsZXI7CisgICAgV1RGOjpGdW5jdGlvbjx2b2lkKGNvbnN0IFZlY3RvcjxTdHJp
bmc+JiwgY29uc3QgVmVjdG9yPFN0cmluZz4mLCBib29sIGNsZWFyRmlyc3QpPiBtX3Nob3VsZFBh
cnRpdGlvbkNvb2tpZXNGb3JEb21haW5zSGFuZGxlcjsKKyAgICBXVEY6OkZ1bmN0aW9uPHZvaWQo
KT4gbV93cml0ZVBlcnNpc3RlbnRTdG9yZUhhbmRsZXI7CisgICAgV1RGOjpGdW5jdGlvbjx2b2lk
KCk+IG1fZ3JhbmRmYXRoZXJFeGlzdGluZ1dlYnNpdGVEYXRhSGFuZGxlcjsKKyAgICBXVEY6OkZ1
bmN0aW9uPHZvaWQoKT4gbV9kZWxldGVQZXJzaXN0ZW50U3RvcmVIYW5kbGVyOworICAgIFdURjo6
RnVuY3Rpb248dm9pZCgpPiBtX2ZpcmVUZWxlbWV0cnlIYW5kbGVyOworCisgICAgV2FsbFRpbWUg
bV9lbmRPZkdyYW5kZmF0aGVyaW5nVGltZXN0YW1wOworICAgIE1vbm90b25pY1RpbWUgbV9sYXN0
VGltZURhdGFSZWNvcmRzV2VyZVJlbW92ZWQ7CisgICAgYm9vbCBtX2RhdGFSZWNvcmRzUmVtb3Zh
bFBlbmRpbmcgeyBmYWxzZSB9OworfTsKKyAgICAKK30gLy8gbmFtZXNwYWNlIFdlYktpdApkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL1dlYlJlc291cmNlTG9hZFN0YXRpc3Rp
Y3NNYW5hZ2VyLmNwcCBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9XZWJSZXNvdXJjZUxvYWRT
dGF0aXN0aWNzTWFuYWdlci5jcHAKaW5kZXggYzFmNDMzMTQ2YjYzY2VjMzRiY2E1YjMxOTdiYWY1
ZDYxODAyNmMzZC4uZDc1OGY4MzBiN2M1YTA0YjU2YmRkYWU5Y2ZhNmQ1M2YxNjMzMTM5YyAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL1dlYlJlc291cmNlTG9hZFN0YXRpc3Rp
Y3NNYW5hZ2VyLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvV2ViUmVzb3VyY2VM
b2FkU3RhdGlzdGljc01hbmFnZXIuY3BwCkBAIC0yNiw3ICsyNiw4IEBACiAjaW5jbHVkZSAiY29u
ZmlnLmgiCiAjaW5jbHVkZSAiV2ViUmVzb3VyY2VMb2FkU3RhdGlzdGljc01hbmFnZXIuaCIKIAot
I2luY2x1ZGUgPFdlYkNvcmUvUmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlLmg+CisjaW5jbHVk
ZSAiUmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlLmgiCisjaW5jbHVkZSA8V2ViQ29yZS9SZXNv
dXJjZUxvYWRTdGF0aXN0aWNzLmg+CiAjaW5jbHVkZSA8V2ViQ29yZS9VUkwuaD4KICNpbmNsdWRl
IDx3dGYvQ3Jvc3NUaHJlYWRDb3BpZXIuaD4KICNpbmNsdWRlIDx3dGYvTmV2ZXJEZXN0cm95ZWQu
aD4KQEAgLTM5LDcgKzQwLDcgQEAgdXNpbmcgbmFtZXNwYWNlIFdlYkNvcmU7CiAKIHRlbXBsYXRl
PHR5cGVuYW1lIFQ+IHN0YXRpYyBpbmxpbmUgU3RyaW5nIHByaW1hcnlEb21haW4oY29uc3QgVCYg
dmFsdWUpCiB7Ci0gICAgcmV0dXJuIFJlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9yZTo6cHJpbWFy
eURvbWFpbih2YWx1ZSk7CisgICAgcmV0dXJuIFJlc291cmNlTG9hZFN0YXRpc3RpY3M6OnByaW1h
cnlEb21haW4odmFsdWUpOwogfQogCiBXZWJSZXNvdXJjZUxvYWRTdGF0aXN0aWNzTWFuYWdlciYg
V2ViUmVzb3VyY2VMb2FkU3RhdGlzdGljc01hbmFnZXI6OnNoYXJlZCgpCmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvV2ViUmVzb3VyY2VMb2FkU3RhdGlzdGljc01hbmFnZXIu
aCBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9XZWJSZXNvdXJjZUxvYWRTdGF0aXN0aWNzTWFu
YWdlci5oCmluZGV4IGViMjI4NzBmMDJjOGI2NTU3M2VkYjljZTdiNDkwY2MzOThkYmVhMWIuLmVi
ODQ0ZjU1YTI2NzJjMGQwZmEzOGRkOTdkN2IwNjc5MmI0YzgyNmMgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJLaXQyL1VJUHJvY2Vzcy9XZWJSZXNvdXJjZUxvYWRTdGF0aXN0aWNzTWFuYWdlci5oCisr
KyBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9XZWJSZXNvdXJjZUxvYWRTdGF0aXN0aWNzTWFu
YWdlci5oCkBAIC0yNSw3ICsyNSw4IEBACiAKICNwcmFnbWEgb25jZQogCi0jaW5jbHVkZSA8V2Vi
Q29yZS9SZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3RvcmUuaD4KKyNpbmNsdWRlIDxjaHJvbm8+Cisj
aW5jbHVkZSA8d3RmL1NlY29uZHMuaD4KICNpbmNsdWRlIDx3dGYvdGV4dC9XVEZTdHJpbmcuaD4K
IAogbmFtZXNwYWNlIFdURiB7CkBAIC0zOCw2ICszOSw4IEBAIGNsYXNzIFVSTDsKIAogbmFtZXNw
YWNlIFdlYktpdCB7CiAKK2NsYXNzIFJlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9yZTsKKwogY2xh
c3MgV2ViUmVzb3VyY2VMb2FkU3RhdGlzdGljc01hbmFnZXIgewogICAgIGZyaWVuZCBjbGFzcyBO
ZXZlckRlc3Ryb3llZDxXZWJSZXNvdXJjZUxvYWRTdGF0aXN0aWNzTWFuYWdlcj47CiBwdWJsaWM6
CkBAIC02Nyw3ICs3MCw3IEBAIHB1YmxpYzoKICAgICB2b2lkIGZpcmVTaG91bGRQYXJ0aXRpb25D
b29raWVzSGFuZGxlcihjb25zdCBWZWN0b3I8U3RyaW5nPiYgZG9tYWluc1RvUmVtb3ZlLCBjb25z
dCBWZWN0b3I8U3RyaW5nPiYgZG9tYWluc1RvQWRkLCBib29sIGNsZWFyRmlyc3QpOwogICAgIHZv
aWQgZmlyZVRlbGVtZXRyeUhhbmRsZXIoKTsKIAotICAgIHZvaWQgc2V0U3RhdGlzdGljc1N0b3Jl
KFJlZjxXZWJDb3JlOjpSZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3RvcmU+JiYpOworICAgIHZvaWQg
c2V0U3RhdGlzdGljc1N0b3JlKFJlZjxSZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3RvcmU+JiYpOwog
ICAgIHZvaWQgc2V0U3RhdGlzdGljc1F1ZXVlKFJlZjxXVEY6OldvcmtRdWV1ZT4mJik7CiAgICAg
dm9pZCBjbGVhckluTWVtb3J5U3RvcmUoKTsKICAgICB2b2lkIGNsZWFySW5NZW1vcnlBbmRQZXJz
aXN0ZW50U3RvcmUoKTsKQEAgLTc4LDcgKzgxLDcgQEAgcHVibGljOgogI2VuZGlmCiAKIHByaXZh
dGU6Ci0gICAgUmVmUHRyPFdlYkNvcmU6OlJlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9yZT4gbV9z
dG9yZTsKKyAgICBSZWZQdHI8UmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlPiBtX3N0b3JlOwog
ICAgIFJlZlB0cjxXVEY6OldvcmtRdWV1ZT4gbV9xdWV1ZTsKIH07CiAKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9XZWJSZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3RvcmUuaCBi
L1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9XZWJSZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3RvcmUu
aAppbmRleCA4YTIwZWYzYzFjNmRlYjc5ZGZlZjAyNzg1NjlkMjEyYTc3Y2UyZmZkLi4zM2ZlZDky
MGM3YTczYWJmNTMwNDc4YTBkMjBhYWRmZjY5MTQ3OTY1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
S2l0Mi9VSVByb2Nlc3MvV2ViUmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlLmgKKysrIGIvU291
cmNlL1dlYktpdDIvVUlQcm9jZXNzL1dlYlJlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9yZS5oCkBA
IC0yOCw5ICsyOCw5IEBACiAjaW5jbHVkZSAiQVBJT2JqZWN0LmgiCiAjaW5jbHVkZSAiQ29ubmVj
dGlvbi5oIgogI2luY2x1ZGUgIlJlc291cmNlTG9hZFN0YXRpc3RpY3NDbGFzc2lmaWVyLmgiCisj
aW5jbHVkZSAiUmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlLmgiCiAjaW5jbHVkZSAiV2ViUmVz
b3VyY2VMb2FkU3RhdGlzdGljc1RlbGVtZXRyeS5oIgogI2luY2x1ZGUgIldlYnNpdGVEYXRhUmVj
b3JkLmgiCi0jaW5jbHVkZSA8V2ViQ29yZS9SZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3RvcmUuaD4K
ICNpbmNsdWRlIDx3dGYvUnVuTG9vcC5oPgogI2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4KICNpbmNs
dWRlIDx3dGYvdGV4dC9XVEZTdHJpbmcuaD4KQEAgLTc2LDggKzc2LDggQEAgcHVibGljOgogCiAg
ICAgdm9pZCByZWFkRGF0YUZyb21EaXNrSWZOZWVkZWQoKTsKIAotICAgIFdlYkNvcmU6OlJlc291
cmNlTG9hZFN0YXRpc3RpY3NTdG9yZSYgY29yZVN0b3JlKCkgeyByZXR1cm4gbV9yZXNvdXJjZUxv
YWRTdGF0aXN0aWNzU3RvcmUuZ2V0KCk7IH0KLSAgICBjb25zdCBXZWJDb3JlOjpSZXNvdXJjZUxv
YWRTdGF0aXN0aWNzU3RvcmUmIGNvcmVTdG9yZSgpIGNvbnN0IHsgcmV0dXJuIG1fcmVzb3VyY2VM
b2FkU3RhdGlzdGljc1N0b3JlLmdldCgpOyB9CisgICAgUmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0
b3JlJiBjb3JlU3RvcmUoKSB7IHJldHVybiBtX3Jlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9yZS5n
ZXQoKTsgfQorICAgIGNvbnN0IFJlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9yZSYgY29yZVN0b3Jl
KCkgY29uc3QgeyByZXR1cm4gbV9yZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3RvcmUuZ2V0KCk7IH0K
IAogcHJpdmF0ZToKICAgICBleHBsaWNpdCBXZWJSZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3RvcmUo
Y29uc3QgU3RyaW5nJik7CkBAIC0xMDcsNyArMTA3LDcgQEAgcHJpdmF0ZToKICAgICB2b2lkIHRl
bGVtZXRyeVRpbWVyRmlyZWQoKTsKICAgICB2b2lkIHN1Ym1pdFRlbGVtZXRyeSgpOwogCi0gICAg
UmVmPFdlYkNvcmU6OlJlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9yZT4gbV9yZXNvdXJjZUxvYWRT
dGF0aXN0aWNzU3RvcmU7CisgICAgUmVmPFJlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9yZT4gbV9y
ZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3RvcmU7CiAjaWYgSEFWRShDT1JFX1BSRURJQ1RJT04pCiAg
ICAgUmVzb3VyY2VMb2FkU3RhdGlzdGljc0NsYXNzaWZpZXJDb2NvYSBtX3Jlc291cmNlTG9hZFN0
YXRpc3RpY3NDbGFzc2lmaWVyOwogI2Vsc2UKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1VJ
UHJvY2Vzcy9XZWJSZXNvdXJjZUxvYWRTdGF0aXN0aWNzVGVsZW1ldHJ5LmNwcCBiL1NvdXJjZS9X
ZWJLaXQyL1VJUHJvY2Vzcy9XZWJSZXNvdXJjZUxvYWRTdGF0aXN0aWNzVGVsZW1ldHJ5LmNwcApp
bmRleCBiNjBlMWY1ZWMzZjMyYjlmZDQ5ODlhNjlkYTcxNjBiYjgxY2I3YmI3Li41ZWM0NmYwMThl
NDQ0NjUwM2M1ZTNjOGQxOTAzYjAxYmEzZTI2ZmNhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0
Mi9VSVByb2Nlc3MvV2ViUmVzb3VyY2VMb2FkU3RhdGlzdGljc1RlbGVtZXRyeS5jcHAKKysrIGIv
U291cmNlL1dlYktpdDIvVUlQcm9jZXNzL1dlYlJlc291cmNlTG9hZFN0YXRpc3RpY3NUZWxlbWV0
cnkuY3BwCkBAIC0yNiwxMSArMjYsMTEgQEAKICNpbmNsdWRlICJjb25maWcuaCIKICNpbmNsdWRl
ICJXZWJSZXNvdXJjZUxvYWRTdGF0aXN0aWNzVGVsZW1ldHJ5LmgiCiAKKyNpbmNsdWRlICJSZXNv
dXJjZUxvYWRTdGF0aXN0aWNzU3RvcmUuaCIKICNpbmNsdWRlICJXZWJQcm9jZXNzUG9vbC5oIgog
I2luY2x1ZGUgIldlYlByb2Nlc3NQcm94eS5oIgogI2luY2x1ZGUgPFdlYkNvcmUvRGlhZ25vc3Rp
Y0xvZ2dpbmdLZXlzLmg+CiAjaW5jbHVkZSA8V2ViQ29yZS9SZXNvdXJjZUxvYWRTdGF0aXN0aWNz
Lmg+Ci0jaW5jbHVkZSA8V2ViQ29yZS9SZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3RvcmUuaD4KICNp
bmNsdWRlIDx3dGYvTWFpblRocmVhZC5oPgogI2luY2x1ZGUgPHd0Zi9OZXZlckRlc3Ryb3llZC5o
PgogI2luY2x1ZGUgPHd0Zi9SdW5Mb29wLmg+CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9V
SVByb2Nlc3MvV2ViUmVzb3VyY2VMb2FkU3RhdGlzdGljc1RlbGVtZXRyeS5oIGIvU291cmNlL1dl
YktpdDIvVUlQcm9jZXNzL1dlYlJlc291cmNlTG9hZFN0YXRpc3RpY3NUZWxlbWV0cnkuaAppbmRl
eCBhNzg4ODMwYzllZTMyOThlNzc4ZjRhN2ExNGMwMmUyZTBiNWU0MmQ0Li43YzJmZjU4NzVhODUy
YWJlMTI2OGRkZDRlYWM4MTM5YjEyMTNmNmM4IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9V
SVByb2Nlc3MvV2ViUmVzb3VyY2VMb2FkU3RhdGlzdGljc1RlbGVtZXRyeS5oCisrKyBiL1NvdXJj
ZS9XZWJLaXQyL1VJUHJvY2Vzcy9XZWJSZXNvdXJjZUxvYWRTdGF0aXN0aWNzVGVsZW1ldHJ5LmgK
QEAgLTI3LDE3ICsyNywxNCBAQAogCiAjaW5jbHVkZSA8d3RmL3RleHQvV1RGU3RyaW5nLmg+CiAK
LW5hbWVzcGFjZSBXZWJDb3JlIHsKK25hbWVzcGFjZSBXZWJLaXQgeworCiBjbGFzcyBSZXNvdXJj
ZUxvYWRTdGF0aXN0aWNzU3RvcmU7Ci19CiAKLW5hbWVzcGFjZSBXZWJLaXQgewotICAgIAogbmFt
ZXNwYWNlIFdlYlJlc291cmNlTG9hZFN0YXRpc3RpY3NUZWxlbWV0cnkgewogICAgIAotdm9pZCBj
YWxjdWxhdGVBbmRTdWJtaXQoY29uc3QgV2ViQ29yZTo6UmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0
b3JlJik7Cit2b2lkIGNhbGN1bGF0ZUFuZFN1Ym1pdChjb25zdCBSZXNvdXJjZUxvYWRTdGF0aXN0
aWNzU3RvcmUmKTsKIHZvaWQgc2V0Tm90aWZ5UGFnZXNXaGVuVGVsZW1ldHJ5V2FzQ2FwdHVyZWQo
Ym9vbCk7CiAgICAgCi19OwotICAgIAorfQogfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIv
V2ViS2l0Mi54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qIGIvU291cmNlL1dlYktpdDIvV2ViS2l0
Mi54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCmluZGV4IDhiMGRlYmZlNTAyNzAzNDE0OWM0MzY4
Y2E1YjFlZmU4NDA3MmU2ZTMuLmNjZDMwYjI4OTQxODA1NGM0ZTYxOTZiYWY3ZDNjMTJhMzRlNDUw
NTMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1dlYktpdDIueGNvZGVwcm9qL3Byb2plY3Qu
cGJ4cHJvagorKysgYi9Tb3VyY2UvV2ViS2l0Mi9XZWJLaXQyLnhjb2RlcHJvai9wcm9qZWN0LnBi
eHByb2oKQEAgLTEzNjAsNiArMTM2MCw3IEBACiAJCTgzOTkwMjAzMUJFOUEwMkIwMDBGMzY1MyAv
KiBOZXR3b3JrTG9hZC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxl
UmVmID0gODM5OTAxRkUxQkU5QTAxQjAwMEYzNjUzIC8qIE5ldHdvcmtMb2FkLmggKi87IH07CiAJ
CTgzOUEyRjMxMUUyMDY3NDUwMDM5MDU3RSAvKiBIaWdoUGVyZm9ybWFuY2VHcmFwaGljc1VzYWdl
U2FtcGxlci5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSA4MzlBMkYyRjFFMjA2NzM5MDAzOTA1N0UgLyogSGlnaFBlcmZvcm1hbmNlR3JhcGhpY3NVc2Fn
ZVNhbXBsZXIuY3BwICovOyB9OwogCQk4MzlBMkYzMjFFMjA2NzQ1MDAzOTA1N0UgLyogSGlnaFBl
cmZvcm1hbmNlR3JhcGhpY3NVc2FnZVNhbXBsZXIuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDgzOUEyRjMwMUUyMDY3MzkwMDM5MDU3RSAvKiBIaWdoUGVy
Zm9ybWFuY2VHcmFwaGljc1VzYWdlU2FtcGxlci5oICovOyB9OworCQk4M0FGREMwQTFGMDZDRUVB
MDA0NzI4MTUgLyogUmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlLmNwcCBpbiBTb3VyY2VzICov
ID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDgzQUZEQzA4MUYwNkNFRTAwMDQ3Mjgx
NSAvKiBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3RvcmUuY3BwICovOyB9OwogCQk4M0JEQ0NCOTFB
QzVGREI2MDAzRjY0NDEgLyogTmV0d29ya0NhY2hlU3RhdGlzdGljcy5jcHAgaW4gU291cmNlcyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA4M0JEQ0NCODFBQzVGREI2MDAzRjY0
NDEgLyogTmV0d29ya0NhY2hlU3RhdGlzdGljcy5jcHAgKi87IH07CiAJCTgzQkZBQzQyMUQ5NjEz
N0MwMDQzMzQ5MCAvKiBCbG9iRG93bmxvYWRDbGllbnQuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDgzQkZBQzQwMUQ5NjEzNjAwMDQzMzQ5MCAvKiBCbG9i
RG93bmxvYWRDbGllbnQuaCAqLzsgfTsKIAkJODNCRkFDNDMxRDk2MTM3QzAwNDMzNDkwIC8qIEJs
b2JEb3dubG9hZENsaWVudC5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSA4M0JGQUM0MTFEOTYxMzYwMDA0MzM0OTAgLyogQmxvYkRvd25sb2FkQ2xpZW50
LmNwcCAqLzsgfTsKQEAgLTM2NjQsNiArMzY2NSw4IEBACiAJCTgzOTkwMUZGMUJFOUEwMUIwMDBG
MzY1MyAvKiBOZXR3b3JrTG9hZC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5h
bWUgPSBOZXR3b3JrTG9hZC5jcHA7IHBhdGggPSBOZXR3b3JrUHJvY2Vzcy9OZXR3b3JrTG9hZC5j
cHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTgzOUEyRjJGMUUyMDY3MzkwMDM5MDU3
RSAvKiBIaWdoUGVyZm9ybWFuY2VHcmFwaGljc1VzYWdlU2FtcGxlci5jcHAgKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBIaWdoUGVyZm9ybWFuY2VHcmFwaGljc1VzYWdlU2Ft
cGxlci5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTgzOUEyRjMwMUUyMDY3Mzkw
MDM5MDU3RSAvKiBIaWdoUGVyZm9ybWFuY2VHcmFwaGljc1VzYWdlU2FtcGxlci5oICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBIaWdoUGVyZm9ybWFuY2VHcmFwaGljc1VzYWdlU2Ft
cGxlci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk4M0FGREMwODFGMDZDRUUwMDA0
NzI4MTUgLyogUmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlLmNwcCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFJlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9yZS5jcHA7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTgzQUZEQzA5MUYwNkNFRTAwMDQ3MjgxNSAvKiBS
ZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3RvcmUuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBw
YXRoID0gUmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CiAJCTgzQkRDQ0I4MUFDNUZEQjYwMDNGNjQ0MSAvKiBOZXR3b3JrQ2FjaGVTdGF0aXN0
aWNzLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IE5ldHdvcmtDYWNo
ZVN0YXRpc3RpY3MuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk4M0JGQUM0MDFE
OTYxMzYwMDA0MzM0OTAgLyogQmxvYkRvd25sb2FkQ2xpZW50LmggKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmMuaDsgbmFtZSA9IEJsb2JEb3dubG9hZENsaWVudC5oOyBwYXRoID0gTmV0d29ya1Byb2Nl
c3MvRG93bmxvYWRzL0Jsb2JEb3dubG9hZENsaWVudC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OwogCQk4M0JGQUM0MTFEOTYxMzYwMDA0MzM0OTAgLyogQmxvYkRvd25sb2FkQ2xpZW50LmNw
cCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFtZSA9IEJsb2JEb3dubG9hZENsaWVu
dC5jcHA7IHBhdGggPSBOZXR3b3JrUHJvY2Vzcy9Eb3dubG9hZHMvQmxvYkRvd25sb2FkQ2xpZW50
LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTQ3MTMsNiArNDcxNiw4IEBACiAJ
CQkJMUExRDhCQTAxNzMxQTM2MzAwMTQxREE0IC8qIExvY2FsU3RvcmFnZURhdGFiYXNlLmggKi8s
CiAJCQkJMUE4QzcyOEExNzM4NDc3QzAwMEE2NTU0IC8qIExvY2FsU3RvcmFnZURhdGFiYXNlVHJh
Y2tlci5jcHAgKi8sCiAJCQkJMUE4QzcyOEIxNzM4NDc3QzAwMEE2NTU0IC8qIExvY2FsU3RvcmFn
ZURhdGFiYXNlVHJhY2tlci5oICovLAorCQkJCTgzQUZEQzA4MUYwNkNFRTAwMDQ3MjgxNSAvKiBS
ZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3RvcmUuY3BwICovLAorCQkJCTgzQUZEQzA5MUYwNkNFRTAw
MDQ3MjgxNSAvKiBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3RvcmUuaCAqLywKIAkJCQkxQTQ0Qjk1
OTE2QjczRjlGMDBCN0JCRDggLyogU3RvcmFnZU1hbmFnZXIuY3BwICovLAogCQkJCTFBNDRCOTVB
MTZCNzNGOUYwMEI3QkJEOCAvKiBTdG9yYWdlTWFuYWdlci5oICovLAogCQkJCTFBQjMxQTkzMTZC
QzY1QUIwMEY2REJDOSAvKiBTdG9yYWdlTWFuYWdlci5tZXNzYWdlcy5pbiAqLywKQEAgLTk5Njcs
NiArOTk3Miw3IEBACiAJCQkJN0E4MjFGNEUxRTJGNjdBODAwNjA0NTc3IC8qIExlZ2FjeUN1c3Rv
bVByb3RvY29sTWFuYWdlckNsaWVudC5tbSBpbiBTb3VyY2VzICovLAogCQkJCTVDMTQyNzFEMUMy
M0Y4Q0YwMEQ0MTE4MyAvKiBMZWdhY3lDdXN0b21Qcm90b2NvbE1hbmFnZXJDb2NvYS5tbSBpbiBT
b3VyY2VzICovLAogCQkJCTI5ODRGNTg4MTY0QkEwOTUwMDRCQzBDNiAvKiBMZWdhY3lDdXN0b21Q
cm90b2NvbE1hbmFnZXJNZXNzYWdlUmVjZWl2ZXIuY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJODNB
RkRDMEExRjA2Q0VFQTAwNDcyODE1IC8qIFJlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9yZS5jcHAg
aW4gU291cmNlcyAqLywKIAkJCQk3QTgyMUY0QTFFMkY2NUU5MDA2MDQ1NzcgLyogTGVnYWN5Q3Vz
dG9tUHJvdG9jb2xNYW5hZ2VyUHJveHkuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMjk4NEY1N0Mx
NjRCOTE1RjAwNEJDMEM2IC8qIExlZ2FjeUN1c3RvbVByb3RvY29sTWFuYWdlclByb3h5TWVzc2Fn
ZVJlY2VpdmVyLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTFBRkRFNjVEMTk1NEU4RDUwMEM0OEZG
QSAvKiBMZWdhY3lTZXNzaW9uU3RhdGVDb2RpbmcuY3BwIGluIFNvdXJjZXMgKi8sCg==
</data>

          </attachment>
      

    </bug>

</bugzilla>