<?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>81149</bug_id>
          
          <creation_ts>2012-03-14 13:05:29 -0700</creation_ts>
          <short_desc>Move DOMFilePath and DOMFileSystem* to Modules/filesystem/</short_desc>
          <delta_ts>2012-03-20 00:56:17 -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>New Bugs</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>DUPLICATE</resolution>
          <dup_id>81353</dup_id>
          
          <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="Mark Pilgrim (Google)">pilgrim</reporter>
          <assigned_to name="Mark Pilgrim (Google)">pilgrim</assigned_to>
          <cc>abarth</cc>
    
    <cc>fishd</cc>
    
    <cc>ojan</cc>
    
    <cc>rakuco</cc>
    
    <cc>vestbo</cc>
    
    <cc>webkit.review.bot</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>578685</commentid>
    <comment_count>0</comment_count>
    <who name="Mark Pilgrim (Google)">pilgrim</who>
    <bug_when>2012-03-14 13:05:29 -0700</bug_when>
    <thetext>Move DOMFilePath and DOMFileSystem* to Modules/filesystem/</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>578690</commentid>
    <comment_count>1</comment_count>
      <attachid>131907</attachid>
    <who name="Mark Pilgrim (Google)">pilgrim</who>
    <bug_when>2012-03-14 13:08:23 -0700</bug_when>
    <thetext>Created attachment 131907
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>578724</commentid>
    <comment_count>2</comment_count>
      <attachid>131907</attachid>
    <who name="Build Bot">buildbot</who>
    <bug_when>2012-03-14 13:42:13 -0700</bug_when>
    <thetext>Comment on attachment 131907
Patch

Attachment 131907 did not pass win-ews (win):
Output: http://queues.webkit.org/results/11956205</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>578729</commentid>
    <comment_count>3</comment_count>
      <attachid>131907</attachid>
    <who name="Adam Barth">abarth</who>
    <bug_when>2012-03-14 13:52:52 -0700</bug_when>
    <thetext>Comment on attachment 131907
Patch

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

&gt; Source/WebCore/WebCore.vcproj/WebCore.vcproj:24060
&gt; +				        RelativePath=&quot;..\fileapi\DOMFilePath.cpp&quot;

These look like the wrong paths.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>578774</commentid>
    <comment_count>4</comment_count>
      <attachid>131923</attachid>
    <who name="Mark Pilgrim (Google)">pilgrim</who>
    <bug_when>2012-03-14 14:26:43 -0700</bug_when>
    <thetext>Created attachment 131923
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>578819</commentid>
    <comment_count>5</comment_count>
      <attachid>131923</attachid>
    <who name="Adam Barth">abarth</who>
    <bug_when>2012-03-14 15:03:05 -0700</bug_when>
    <thetext>Comment on attachment 131923
Patch

These files are the correct ones to move, but it looks like you need to update to top-of-tree to create a patch that applies.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>579500</commentid>
    <comment_count>6</comment_count>
      <attachid>132077</attachid>
    <who name="Mark Pilgrim (Google)">pilgrim</who>
    <bug_when>2012-03-15 10:40:22 -0700</bug_when>
    <thetext>Created attachment 132077
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>579501</commentid>
    <comment_count>7</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-03-15 10:42:45 -0700</bug_when>
    <thetext>Attachment 132077 did not pass style-queue:

Failed to run &quot;[&apos;Tools/Scripts/check-webkit-style&apos;, &apos;--diff-files&apos;, u&apos;Source/WebCore/CMakeLists.txt&apos;, u&apos;Source/W...&quot; exit_code: 1
Source/WebCore/Modules/filesystem/DOMFilePath.cpp:71:  Tests for true/false, null/non-null, and zero/non-zero should all be done without equality comparisons.  [readability/comparison_to_zero] [5]
Source/WebCore/Modules/filesystem/DOMFilePath.h:71:  Should have only a single space after a punctuation in a comment.  [whitespace/comments] [5]
Source/WebCore/Modules/filesystem/DOMFileSystemBase.h:38:  Alphabetical sorting problem.  [build/include_order] [4]
Source/WebCore/Modules/filesystem/DOMFileSystemBase.h:69:  Should have only a single space after a punctuation in a comment.  [whitespace/comments] [5]
Source/WebCore/Modules/filesystem/DOMFileSystemBase.h:70:  Should have only a single space after a punctuation in a comment.  [whitespace/comments] [5]
Total errors found: 5 in 19 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>579543</commentid>
    <comment_count>8</comment_count>
      <attachid>132077</attachid>
    <who name="Build Bot">buildbot</who>
    <bug_when>2012-03-15 11:18:08 -0700</bug_when>
    <thetext>Comment on attachment 132077
Patch

Attachment 132077 did not pass win-ews (win):
Output: http://queues.webkit.org/results/11956698</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>580527</commentid>
    <comment_count>9</comment_count>
    <who name="Mark Pilgrim (Google)">pilgrim</who>
    <bug_when>2012-03-16 08:14:15 -0700</bug_when>
    <thetext>

*** This bug has been marked as a duplicate of bug 81353 ***</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>582834</commentid>
    <comment_count>10</comment_count>
      <attachid>132077</attachid>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2012-03-20 00:56:17 -0700</bug_when>
    <thetext>Comment on attachment 132077
Patch

Cleared review? from attachment 132077 so that this bug does not appear in http://webkit.org/pending-review.  If you would like this patch reviewed, please attach it to a new bug (or re-open this bug before marking it for review again).</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>131907</attachid>
            <date>2012-03-14 13:08:23 -0700</date>
            <delta_ts>2012-03-14 14:26:30 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-81149-20120314160821.patch</filename>
            <type>text/plain</type>
            <size>119532</size>
            <attacher name="Mark Pilgrim (Google)">pilgrim</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDExMDczNikKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDQxIEBACisyMDEyLTAzLTE0ICBNYXJrIFBp
bGdyaW0gIDxwaWxncmltQGNocm9taXVtLm9yZz4KKworICAgICAgICBNb3ZlIERPTUZpbGVQYXRo
IGFuZCBET01GaWxlU3lzdGVtKiB0byBNb2R1bGVzL2ZpbGVzeXN0ZW0vCisgICAgICAgIGh0dHBz
Oi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD04MTE0OQorCisgICAgICAgIFJldmll
d2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIE5vIG5ldyB0ZXN0cywgYWxsIGV4aXN0
aW5nIHRlc3RzIHBhc3MKKworICAgICAgICAqIENNYWtlTGlzdHMudHh0OgorICAgICAgICAqIERl
cml2ZWRTb3VyY2VzLm1ha2U6CisgICAgICAgICogRGVyaXZlZFNvdXJjZXMucHJpOgorICAgICAg
ICAqIEdOVW1ha2VmaWxlLmxpc3QuYW06CisgICAgICAgICogTW9kdWxlcy9maWxlc3lzdGVtL0RP
TUZpbGVQYXRoLmNwcDogQ29waWVkIGZyb20gU291cmNlL1dlYkNvcmUvZmlsZWFwaS9ET01GaWxl
UGF0aC5jcHAuCisgICAgICAgICogTW9kdWxlcy9maWxlc3lzdGVtL0RPTUZpbGVQYXRoLmg6IENv
cGllZCBmcm9tIFNvdXJjZS9XZWJDb3JlL2ZpbGVhcGkvRE9NRmlsZVBhdGguaC4KKyAgICAgICAg
KiBNb2R1bGVzL2ZpbGVzeXN0ZW0vRE9NRmlsZVN5c3RlbS5jcHA6IENvcGllZCBmcm9tIFNvdXJj
ZS9XZWJDb3JlL2ZpbGVhcGkvRE9NRmlsZVN5c3RlbS5jcHAuCisgICAgICAgICogTW9kdWxlcy9m
aWxlc3lzdGVtL0RPTUZpbGVTeXN0ZW0uaDogQ29waWVkIGZyb20gU291cmNlL1dlYkNvcmUvZmls
ZWFwaS9ET01GaWxlU3lzdGVtLmguCisgICAgICAgICogTW9kdWxlcy9maWxlc3lzdGVtL0RPTUZp
bGVTeXN0ZW0uaWRsOiBDb3BpZWQgZnJvbSBTb3VyY2UvV2ViQ29yZS9maWxlYXBpL0RPTUZpbGVT
eXN0ZW0uaWRsLgorICAgICAgICAqIE1vZHVsZXMvZmlsZXN5c3RlbS9ET01GaWxlU3lzdGVtQmFz
ZS5jcHA6IENvcGllZCBmcm9tIFNvdXJjZS9XZWJDb3JlL2ZpbGVhcGkvRE9NRmlsZVN5c3RlbUJh
c2UuY3BwLgorICAgICAgICAqIE1vZHVsZXMvZmlsZXN5c3RlbS9ET01GaWxlU3lzdGVtQmFzZS5o
OiBDb3BpZWQgZnJvbSBTb3VyY2UvV2ViQ29yZS9maWxlYXBpL0RPTUZpbGVTeXN0ZW1CYXNlLmgu
CisgICAgICAgICogTW9kdWxlcy9maWxlc3lzdGVtL0RPTUZpbGVTeXN0ZW1TeW5jLmNwcDogQ29w
aWVkIGZyb20gU291cmNlL1dlYkNvcmUvZmlsZWFwaS9ET01GaWxlU3lzdGVtU3luYy5jcHAuCisg
ICAgICAgICogTW9kdWxlcy9maWxlc3lzdGVtL0RPTUZpbGVTeXN0ZW1TeW5jLmg6IENvcGllZCBm
cm9tIFNvdXJjZS9XZWJDb3JlL2ZpbGVhcGkvRE9NRmlsZVN5c3RlbVN5bmMuaC4KKyAgICAgICAg
KiBNb2R1bGVzL2ZpbGVzeXN0ZW0vRE9NRmlsZVN5c3RlbVN5bmMuaWRsOiBDb3BpZWQgZnJvbSBT
b3VyY2UvV2ViQ29yZS9maWxlYXBpL0RPTUZpbGVTeXN0ZW1TeW5jLmlkbC4KKyAgICAgICAgKiBU
YXJnZXQucHJpOgorICAgICAgICAqIFdlYkNvcmUuZ3lwaToKKyAgICAgICAgKiBXZWJDb3JlLnZj
cHJvai9XZWJDb3JlLnZjcHJvajoKKyAgICAgICAgKiBXZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0
LnBieHByb2o6CisgICAgICAgICogZmlsZWFwaS9ET01GaWxlUGF0aC5jcHA6IFJlbW92ZWQuCisg
ICAgICAgICogZmlsZWFwaS9ET01GaWxlUGF0aC5oOiBSZW1vdmVkLgorICAgICAgICAqIGZpbGVh
cGkvRE9NRmlsZVN5c3RlbS5jcHA6IFJlbW92ZWQuCisgICAgICAgICogZmlsZWFwaS9ET01GaWxl
U3lzdGVtLmg6IFJlbW92ZWQuCisgICAgICAgICogZmlsZWFwaS9ET01GaWxlU3lzdGVtLmlkbDog
UmVtb3ZlZC4KKyAgICAgICAgKiBmaWxlYXBpL0RPTUZpbGVTeXN0ZW1CYXNlLmNwcDogUmVtb3Zl
ZC4KKyAgICAgICAgKiBmaWxlYXBpL0RPTUZpbGVTeXN0ZW1CYXNlLmg6IFJlbW92ZWQuCisgICAg
ICAgICogZmlsZWFwaS9ET01GaWxlU3lzdGVtU3luYy5jcHA6IFJlbW92ZWQuCisgICAgICAgICog
ZmlsZWFwaS9ET01GaWxlU3lzdGVtU3luYy5oOiBSZW1vdmVkLgorICAgICAgICAqIGZpbGVhcGkv
RE9NRmlsZVN5c3RlbVN5bmMuaWRsOiBSZW1vdmVkLgorCiAyMDEyLTAzLTE0ICBUb21teSBXaWRl
bmZseWNodCAgPHRvbW15d0Bnb29nbGUuY29tPgogCiAgICAgICAgIE1lZGlhU3RyZWFtIEFQSSAo
SlNFUCk6IEludHJvZHVjaW5nIEljZUNhbmRpZGF0ZQpJbmRleDogU291cmNlL1dlYkNvcmUvQ01h
a2VMaXN0cy50eHQKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvQ01ha2VMaXN0cy50eHQJ
KHJldmlzaW9uIDExMDcyNikKKysrIFNvdXJjZS9XZWJDb3JlL0NNYWtlTGlzdHMudHh0CSh3b3Jr
aW5nIGNvcHkpCkBAIC0xNjM1LDE0ICsxNjM1LDE0IEBAIEVORElGICgpCiAKIGlmIChFTkFCTEVf
RklMRV9TWVNURU0pCiAgICAgTElTVChBUFBFTkQgV2ViQ29yZV9TT1VSQ0VTCisgICAgICAgIE1v
ZHVsZXMvZmlsZXN5c3RlbS9ET01GaWxlUGF0aC5jcHAKKyAgICAgICAgTW9kdWxlcy9maWxlc3lz
dGVtL0RPTUZpbGVTeXN0ZW0uY3BwCisgICAgICAgIE1vZHVsZXMvZmlsZXN5c3RlbS9ET01GaWxl
U3lzdGVtQmFzZS5jcHAKKyAgICAgICAgTW9kdWxlcy9maWxlc3lzdGVtL0RPTUZpbGVTeXN0ZW1T
eW5jLmNwcAogICAgICAgICBNb2R1bGVzL2ZpbGVzeXN0ZW0vRGlyZWN0b3J5RW50cnkuY3BwCiAg
ICAgICAgIE1vZHVsZXMvZmlsZXN5c3RlbS9EaXJlY3RvcnlFbnRyeVN5bmMuY3BwCiAgICAgICAg
IE1vZHVsZXMvZmlsZXN5c3RlbS9EaXJlY3RvcnlSZWFkZXIuY3BwCiAgICAgICAgIE1vZHVsZXMv
ZmlsZXN5c3RlbS9EaXJlY3RvcnlSZWFkZXJTeW5jLmNwcAotICAgICAgICBmaWxlYXBpL0RPTUZp
bGVQYXRoLmNwcAotICAgICAgICBmaWxlYXBpL0RPTUZpbGVTeXN0ZW0uY3BwCi0gICAgICAgIGZp
bGVhcGkvRE9NRmlsZVN5c3RlbUJhc2UuY3BwCi0gICAgICAgIGZpbGVhcGkvRE9NRmlsZVN5c3Rl
bVN5bmMuY3BwCiAgICAgICAgIGZpbGVhcGkvRE9NV2luZG93RmlsZVN5c3RlbS5jcHAKICAgICAg
ICAgZmlsZWFwaS9FbnRyeS5jcHAKICAgICAgICAgZmlsZWFwaS9FbnRyeUFycmF5LmNwcApAQCAt
MTY2MCwxMiArMTY2MCwxMiBAQCBpZiAoRU5BQkxFX0ZJTEVfU1lTVEVNKQogICAgICAgICBwbGF0
Zm9ybS9Bc3luY0ZpbGVTeXN0ZW0uY3BwCiAgICAgKQogICAgIExJU1QoQVBQRU5EIFdlYkNvcmVf
SURMX0ZJTEVTCisgICAgICAgIE1vZHVsZXMvZmlsZXN5c3RlbS9ET01GaWxlU3lzdGVtLmlkbAor
ICAgICAgICBNb2R1bGVzL2ZpbGVzeXN0ZW0vRE9NRmlsZVN5c3RlbVN5bmMuaWRsCiAgICAgICAg
IE1vZHVsZXMvZmlsZXN5c3RlbS9EaXJlY3RvcnlFbnRyeS5pZGwKICAgICAgICAgTW9kdWxlcy9m
aWxlc3lzdGVtL0RpcmVjdG9yeUVudHJ5U3luYy5pZGwKICAgICAgICAgTW9kdWxlcy9maWxlc3lz
dGVtL0RpcmVjdG9yeVJlYWRlci5pZGwKICAgICAgICAgTW9kdWxlcy9maWxlc3lzdGVtL0RpcmVj
dG9yeVJlYWRlclN5bmMuaWRsCi0gICAgICAgIGZpbGVhcGkvRE9NRmlsZVN5c3RlbS5pZGwKLSAg
ICAgICAgZmlsZWFwaS9ET01GaWxlU3lzdGVtU3luYy5pZGwKICAgICAgICAgZmlsZWFwaS9ET01X
aW5kb3dGaWxlU3lzdGVtLmlkbAogICAgICAgICBmaWxlYXBpL0VudHJpZXNDYWxsYmFjay5pZGwK
ICAgICAgICAgZmlsZWFwaS9FbnRyeS5pZGwKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL0Rlcml2ZWRT
b3VyY2VzLm1ha2UKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvRGVyaXZlZFNvdXJjZXMu
bWFrZQkocmV2aXNpb24gMTEwNzI2KQorKysgU291cmNlL1dlYkNvcmUvRGVyaXZlZFNvdXJjZXMu
bWFrZQkod29ya2luZyBjb3B5KQpAQCAtMTk1LDggKzE5NSw4IEBAIEJJTkRJTkdfSURMUyA9IFwK
ICAgICAkKFdlYkNvcmUpL2RvbS9XZWJLaXRUcmFuc2l0aW9uRXZlbnQuaWRsIFwKICAgICAkKFdl
YkNvcmUpL2RvbS9XaGVlbEV2ZW50LmlkbCBcCiAgICAgJChXZWJDb3JlKS9maWxlYXBpL0Jsb2Iu
aWRsIFwKLSAgICAkKFdlYkNvcmUpL2ZpbGVhcGkvRE9NRmlsZVN5c3RlbS5pZGwgXAotICAgICQo
V2ViQ29yZSkvZmlsZWFwaS9ET01GaWxlU3lzdGVtU3luYy5pZGwgXAorICAgICQoV2ViQ29yZSkv
TW9kdWxlcy9maWxlc3lzdGVtL0RPTUZpbGVTeXN0ZW0uaWRsIFwKKyAgICAkKFdlYkNvcmUpL01v
ZHVsZXMvZmlsZXN5c3RlbS9ET01GaWxlU3lzdGVtU3luYy5pZGwgXAogICAgICQoV2ViQ29yZSkv
ZmlsZWFwaS9ET01XaW5kb3dGaWxlU3lzdGVtLmlkbCBcCiAgICAgJChXZWJDb3JlKS9Nb2R1bGVz
L2ZpbGVzeXN0ZW0vRGlyZWN0b3J5RW50cnkuaWRsIFwKICAgICAkKFdlYkNvcmUpL01vZHVsZXMv
ZmlsZXN5c3RlbS9EaXJlY3RvcnlFbnRyeVN5bmMuaWRsIFwKSW5kZXg6IFNvdXJjZS9XZWJDb3Jl
L0Rlcml2ZWRTb3VyY2VzLnByaQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9EZXJpdmVk
U291cmNlcy5wcmkJKHJldmlzaW9uIDExMDcyNikKKysrIFNvdXJjZS9XZWJDb3JlL0Rlcml2ZWRT
b3VyY2VzLnByaQkod29ya2luZyBjb3B5KQpAQCAtMjE2LDEyICsyMTYsMTIgQEAgSURMX0JJTkRJ
TkdTICs9IFwKICAgICAkJFBXRC9kb20vV2ViS2l0VHJhbnNpdGlvbkV2ZW50LmlkbCBcCiAgICAg
JCRQV0QvZG9tL1doZWVsRXZlbnQuaWRsIFwKICAgICAkJFBXRC9maWxlYXBpL0Jsb2IuaWRsIFwK
KyAgICAkJFBXRC9Nb2R1bGVzL2ZpbGVzeXN0ZW0vRE9NRmlsZVN5c3RlbS5pZGwgXAorICAgICQk
UFdEL01vZHVsZXMvZmlsZXN5c3RlbS9ET01GaWxlU3lzdGVtU3luYy5pZGwgXAogICAgICQkUFdE
L01vZHVsZXMvZmlsZXN5c3RlbS9EaXJlY3RvcnlFbnRyeS5pZGwgXAogICAgICQkUFdEL01vZHVs
ZXMvZmlsZXN5c3RlbS9EaXJlY3RvcnlFbnRyeVN5bmMuaWRsIFwKICAgICAkJFBXRC9Nb2R1bGVz
L2ZpbGVzeXN0ZW0vRGlyZWN0b3J5UmVhZGVyLmlkbCBcCiAgICAgJCRQV0QvTW9kdWxlcy9maWxl
c3lzdGVtL0RpcmVjdG9yeVJlYWRlclN5bmMuaWRsIFwKLSAgICAkJFBXRC9maWxlYXBpL0RPTUZp
bGVTeXN0ZW0uaWRsIFwKLSAgICAkJFBXRC9maWxlYXBpL0RPTUZpbGVTeXN0ZW1TeW5jLmlkbCBc
CiAgICAgJCRQV0QvZmlsZWFwaS9ET01XaW5kb3dGaWxlU3lzdGVtLmlkbCBcCiAgICAgJCRQV0Qv
ZmlsZWFwaS9FbnRyaWVzQ2FsbGJhY2suaWRsIFwKICAgICAkJFBXRC9maWxlYXBpL0VudHJ5Lmlk
bCBcCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9HTlVtYWtlZmlsZS5saXN0LmFtCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9XZWJDb3JlL0dOVW1ha2VmaWxlLmxpc3QuYW0JKHJldmlzaW9uIDExMDcyNikK
KysrIFNvdXJjZS9XZWJDb3JlL0dOVW1ha2VmaWxlLmxpc3QuYW0JKHdvcmtpbmcgY29weSkKQEAg
LTIwMzcsNiArMjAzNywxNCBAQCB3ZWJjb3JlX3NvdXJjZXMgKz0gXAogCVNvdXJjZS9XZWJDb3Jl
L2ZpbGVhcGkvQmxvYi5oIFwKIAlTb3VyY2UvV2ViQ29yZS9maWxlYXBpL0Jsb2JVUkwuY3BwIFwK
IAlTb3VyY2UvV2ViQ29yZS9maWxlYXBpL0Jsb2JVUkwuaCBcCisJU291cmNlL1dlYkNvcmUvTW9k
dWxlcy9maWxlc3lzdGVtL0RPTUZpbGVQYXRoLmNwcCBcCisJU291cmNlL1dlYkNvcmUvTW9kdWxl
cy9maWxlc3lzdGVtL0RPTUZpbGVQYXRoLmggXAorCVNvdXJjZS9XZWJDb3JlL01vZHVsZXMvZmls
ZXN5c3RlbS9ET01GaWxlU3lzdGVtLmNwcCBcCisJU291cmNlL1dlYkNvcmUvTW9kdWxlcy9maWxl
c3lzdGVtL0RPTUZpbGVTeXN0ZW0uaCBcCisJU291cmNlL1dlYkNvcmUvTW9kdWxlcy9maWxlc3lz
dGVtL0RPTUZpbGVTeXN0ZW1CYXNlLmNwcCBcCisJU291cmNlL1dlYkNvcmUvTW9kdWxlcy9maWxl
c3lzdGVtL0RPTUZpbGVTeXN0ZW1CYXNlLmggXAorCVNvdXJjZS9XZWJDb3JlL01vZHVsZXMvZmls
ZXN5c3RlbS9ET01GaWxlU3lzdGVtU3luYy5jcHAgXAorCVNvdXJjZS9XZWJDb3JlL01vZHVsZXMv
ZmlsZXN5c3RlbS9ET01GaWxlU3lzdGVtU3luYy5oIFwKIAlTb3VyY2UvV2ViQ29yZS9Nb2R1bGVz
L2ZpbGVzeXN0ZW0vRGlyZWN0b3J5RW50cnkuY3BwIFwKIAlTb3VyY2UvV2ViQ29yZS9Nb2R1bGVz
L2ZpbGVzeXN0ZW0vRGlyZWN0b3J5RW50cnkuaCBcCiAJU291cmNlL1dlYkNvcmUvTW9kdWxlcy9m
aWxlc3lzdGVtL0RpcmVjdG9yeUVudHJ5U3luYy5jcHAgXApAQCAtMjA0NSwxNCArMjA1Myw2IEBA
IHdlYmNvcmVfc291cmNlcyArPSBcCiAJU291cmNlL1dlYkNvcmUvTW9kdWxlcy9maWxlc3lzdGVt
L0RpcmVjdG9yeVJlYWRlci5oIFwKIAlTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2ZpbGVzeXN0ZW0v
RGlyZWN0b3J5UmVhZGVyU3luYy5jcHAgXAogCVNvdXJjZS9XZWJDb3JlL01vZHVsZXMvZmlsZXN5
c3RlbS9EaXJlY3RvcnlSZWFkZXJTeW5jLmggXAotCVNvdXJjZS9XZWJDb3JlL2ZpbGVhcGkvRE9N
RmlsZVBhdGguY3BwIFwKLQlTb3VyY2UvV2ViQ29yZS9maWxlYXBpL0RPTUZpbGVQYXRoLmggXAot
CVNvdXJjZS9XZWJDb3JlL2ZpbGVhcGkvRE9NRmlsZVN5c3RlbS5jcHAgXAotCVNvdXJjZS9XZWJD
b3JlL2ZpbGVhcGkvRE9NRmlsZVN5c3RlbS5oIFwKLQlTb3VyY2UvV2ViQ29yZS9maWxlYXBpL0RP
TUZpbGVTeXN0ZW1CYXNlLmNwcCBcCi0JU291cmNlL1dlYkNvcmUvZmlsZWFwaS9ET01GaWxlU3lz
dGVtQmFzZS5oIFwKLQlTb3VyY2UvV2ViQ29yZS9maWxlYXBpL0RPTUZpbGVTeXN0ZW1TeW5jLmNw
cCBcCi0JU291cmNlL1dlYkNvcmUvZmlsZWFwaS9ET01GaWxlU3lzdGVtU3luYy5oIFwKIAlTb3Vy
Y2UvV2ViQ29yZS9maWxlYXBpL0RPTVdpbmRvd0ZpbGVTeXN0ZW0uY3BwIFwKIAlTb3VyY2UvV2Vi
Q29yZS9maWxlYXBpL0RPTVdpbmRvd0ZpbGVTeXN0ZW0uaCBcCiAJU291cmNlL1dlYkNvcmUvZmls
ZWFwaS9FbnRyaWVzQ2FsbGJhY2suaCBcCkBAIC00ODY1LDggKzQ4NjUsOCBAQCB3ZWJjb3JlX2J1
aWx0X3NvdXJjZXMgKz0gXAogCURlcml2ZWRTb3VyY2VzL1dlYkNvcmUvSlNNZXRhZGF0YUNhbGxi
YWNrLmgKIAogZG9tX2JpbmRpbmdfaWRscyArPSBcCi0JJChXZWJDb3JlKS9maWxlYXBpL0RPTUZp
bGVTeXN0ZW0uaWRsIFwKLQkkKFdlYkNvcmUpL2ZpbGVhcGkvRE9NRmlsZVN5c3RlbVN5bmMuaWRs
IFwKKwkkKFdlYkNvcmUpL01vZHVsZXMvZmlsZXN5c3RlbS9ET01GaWxlU3lzdGVtLmlkbCBcCisJ
JChXZWJDb3JlKS9Nb2R1bGVzL2ZpbGVzeXN0ZW0vRE9NRmlsZVN5c3RlbVN5bmMuaWRsIFwKIAkk
KFdlYkNvcmUpL2ZpbGVhcGkvRE9NV2luZG93RmlsZVN5c3RlbS5pZGwgXAogCSQoV2ViQ29yZSkv
TW9kdWxlcy9maWxlc3lzdGVtL0RpcmVjdG9yeUVudHJ5LmlkbCBcCiAJJChXZWJDb3JlKS9Nb2R1
bGVzL2ZpbGVzeXN0ZW0vRGlyZWN0b3J5RW50cnlTeW5jLmlkbCBcCkluZGV4OiBTb3VyY2UvV2Vi
Q29yZS9UYXJnZXQucHJpCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL1RhcmdldC5wcmkJ
KHJldmlzaW9uIDExMDcyNikKKysrIFNvdXJjZS9XZWJDb3JlL1RhcmdldC5wcmkJKHdvcmtpbmcg
Y29weSkKQEAgLTY2MSwxMCArNjYxLDEwIEBAIFNPVVJDRVMgKz0gXAogICAgIGZpbGVhcGkvQXN5
bmNGaWxlU3RyZWFtLmNwcCBcCiAgICAgZmlsZWFwaS9CbG9iLmNwcCBcCiAgICAgZmlsZWFwaS9C
bG9iVVJMLmNwcCBcCi0gICAgZmlsZWFwaS9ET01GaWxlUGF0aC5jcHAgXAotICAgIGZpbGVhcGkv
RE9NRmlsZVN5c3RlbS5jcHAgXAotICAgIGZpbGVhcGkvRE9NRmlsZVN5c3RlbUJhc2UuY3BwIFwK
LSAgICBmaWxlYXBpL0RPTUZpbGVTeXN0ZW1TeW5jLmNwcCBcCisgICAgTW9kdWxlcy9maWxlc3lz
dGVtL0RPTUZpbGVQYXRoLmNwcCBcCisgICAgTW9kdWxlcy9maWxlc3lzdGVtL0RPTUZpbGVTeXN0
ZW0uY3BwIFwKKyAgICBNb2R1bGVzL2ZpbGVzeXN0ZW0vRE9NRmlsZVN5c3RlbUJhc2UuY3BwIFwK
KyAgICBNb2R1bGVzL2ZpbGVzeXN0ZW0vRE9NRmlsZVN5c3RlbVN5bmMuY3BwIFwKICAgICBmaWxl
YXBpL0RPTVdpbmRvd0ZpbGVTeXN0ZW0uY3BwIFwKICAgICBNb2R1bGVzL2ZpbGVzeXN0ZW0vRGly
ZWN0b3J5RW50cnkuY3BwIFwKICAgICBNb2R1bGVzL2ZpbGVzeXN0ZW0vRGlyZWN0b3J5RW50cnlT
eW5jLmNwcCBcCkBAIC0zMDUzLDE1ICszMDUzLDE1IEBAIGNvbnRhaW5zKERFRklORVMsIEVOQUJM
RV9EQVRBX1RSQU5TRkVSX0kKIGNvbnRhaW5zKERFRklORVMsIEVOQUJMRV9GSUxFX1NZU1RFTT0x
KSB7CiAgICAgSEVBREVSUyArPSBcCiAgICAgICAgIGZpbGVhcGkvQXN5bmNGaWxlV3JpdGVyLmgg
XAorICAgICAgICBNb2R1bGVzL2ZpbGVzeXN0ZW0vRE9NRmlsZVBhdGguaCBcCisgICAgICAgIE1v
ZHVsZXMvZmlsZXN5c3RlbS9ET01GaWxlU3lzdGVtLmggXAorICAgICAgICBNb2R1bGVzL2ZpbGVz
eXN0ZW0vRE9NRmlsZVN5c3RlbUJhc2UuaCBcCisgICAgICAgIE1vZHVsZXMvZmlsZXN5c3RlbS9E
T01GaWxlU3lzdGVtU3luYy5oIFwKICAgICAgICAgTW9kdWxlcy9maWxlc3lzdGVtL0RpcmVjdG9y
eUVudHJ5LmggXAogICAgICAgICBNb2R1bGVzL2ZpbGVzeXN0ZW0vRGlyZWN0b3J5RW50cnlTeW5j
LmggXAogICAgICAgICBNb2R1bGVzL2ZpbGVzeXN0ZW0vRGlyZWN0b3J5UmVhZGVyLmggXAogICAg
ICAgICBNb2R1bGVzL2ZpbGVzeXN0ZW0vRGlyZWN0b3J5UmVhZGVyQmFzZS5oIFwKICAgICAgICAg
TW9kdWxlcy9maWxlc3lzdGVtL0RpcmVjdG9yeVJlYWRlclN5bmMuaCBcCi0gICAgICAgIGZpbGVh
cGkvRE9NRmlsZVBhdGguaCBcCi0gICAgICAgIGZpbGVhcGkvRE9NRmlsZVN5c3RlbS5oIFwKLSAg
ICAgICAgZmlsZWFwaS9ET01GaWxlU3lzdGVtQmFzZS5oIFwKLSAgICAgICAgZmlsZWFwaS9ET01G
aWxlU3lzdGVtU3luYy5oIFwKICAgICAgICAgZmlsZWFwaS9FbnRyaWVzQ2FsbGJhY2suaCBcCiAg
ICAgICAgIGZpbGVhcGkvRW50cnkuaCBcCiAgICAgICAgIGZpbGVhcGkvRW50cnlBcnJheS5oIFwK
SW5kZXg6IFNvdXJjZS9XZWJDb3JlL1dlYkNvcmUuZ3lwaQo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
V2ViQ29yZS9XZWJDb3JlLmd5cGkJKHJldmlzaW9uIDExMDcyNikKKysrIFNvdXJjZS9XZWJDb3Jl
L1dlYkNvcmUuZ3lwaQkod29ya2luZyBjb3B5KQpAQCAtODkwLDggKzg5MCw4IEBACiAgICAgICAg
ICAgICAnTW9kdWxlcy9maWxlc3lzdGVtL0RpcmVjdG9yeUVudHJ5U3luYy5pZGwnLAogICAgICAg
ICAgICAgJ01vZHVsZXMvZmlsZXN5c3RlbS9EaXJlY3RvcnlSZWFkZXIuaWRsJywKICAgICAgICAg
ICAgICdNb2R1bGVzL2ZpbGVzeXN0ZW0vRGlyZWN0b3J5UmVhZGVyU3luYy5pZGwnLAotICAgICAg
ICAgICAgJ2ZpbGVhcGkvRE9NRmlsZVN5c3RlbS5pZGwnLAotICAgICAgICAgICAgJ2ZpbGVhcGkv
RE9NRmlsZVN5c3RlbVN5bmMuaWRsJywKKyAgICAgICAgICAgICdNb2R1bGVzL2ZpbGVzeXN0ZW0v
RE9NRmlsZVN5c3RlbS5pZGwnLAorICAgICAgICAgICAgJ01vZHVsZXMvZmlsZXN5c3RlbS9ET01G
aWxlU3lzdGVtU3luYy5pZGwnLAogICAgICAgICAgICAgJ2ZpbGVhcGkvRE9NV2luZG93RmlsZVN5
c3RlbS5pZGwnLAogICAgICAgICAgICAgJ2ZpbGVhcGkvRW50cmllc0NhbGxiYWNrLmlkbCcsCiAg
ICAgICAgICAgICAnZmlsZWFwaS9FbnRyeS5pZGwnLApAQCAtMjQyOSwxNCArMjQyOSwxNCBAQAog
ICAgICAgICAgICAgJ2ZpbGVhcGkvQmxvYi5oJywKICAgICAgICAgICAgICdmaWxlYXBpL0Jsb2JV
UkwuY3BwJywKICAgICAgICAgICAgICdmaWxlYXBpL0Jsb2JVUkwuaCcsCi0gICAgICAgICAgICAn
ZmlsZWFwaS9ET01GaWxlUGF0aC5jcHAnLAotICAgICAgICAgICAgJ2ZpbGVhcGkvRE9NRmlsZVBh
dGguaCcsCi0gICAgICAgICAgICAnZmlsZWFwaS9ET01GaWxlU3lzdGVtLmNwcCcsCi0gICAgICAg
ICAgICAnZmlsZWFwaS9ET01GaWxlU3lzdGVtLmgnLAotICAgICAgICAgICAgJ2ZpbGVhcGkvRE9N
RmlsZVN5c3RlbUJhc2UuY3BwJywKLSAgICAgICAgICAgICdmaWxlYXBpL0RPTUZpbGVTeXN0ZW1C
YXNlLmgnLAotICAgICAgICAgICAgJ2ZpbGVhcGkvRE9NRmlsZVN5c3RlbVN5bmMuY3BwJywKLSAg
ICAgICAgICAgICdmaWxlYXBpL0RPTUZpbGVTeXN0ZW1TeW5jLmgnLAorICAgICAgICAgICAgJ01v
ZHVsZXMvZmlsZXN5c3RlbS9ET01GaWxlUGF0aC5jcHAnLAorICAgICAgICAgICAgJ01vZHVsZXMv
ZmlsZXN5c3RlbS9ET01GaWxlUGF0aC5oJywKKyAgICAgICAgICAgICdNb2R1bGVzL2ZpbGVzeXN0
ZW0vRE9NRmlsZVN5c3RlbS5jcHAnLAorICAgICAgICAgICAgJ01vZHVsZXMvZmlsZXN5c3RlbS9E
T01GaWxlU3lzdGVtLmgnLAorICAgICAgICAgICAgJ01vZHVsZXMvZmlsZXN5c3RlbS9ET01GaWxl
U3lzdGVtQmFzZS5jcHAnLAorICAgICAgICAgICAgJ01vZHVsZXMvZmlsZXN5c3RlbS9ET01GaWxl
U3lzdGVtQmFzZS5oJywKKyAgICAgICAgICAgICdNb2R1bGVzL2ZpbGVzeXN0ZW0vRE9NRmlsZVN5
c3RlbVN5bmMuY3BwJywKKyAgICAgICAgICAgICdNb2R1bGVzL2ZpbGVzeXN0ZW0vRE9NRmlsZVN5
c3RlbVN5bmMuaCcsCiAgICAgICAgICAgICAnZmlsZWFwaS9ET01XaW5kb3dGaWxlU3lzdGVtLmNw
cCcsCiAgICAgICAgICAgICAnZmlsZWFwaS9ET01XaW5kb3dGaWxlU3lzdGVtLmgnLAogICAgICAg
ICAgICAgJ01vZHVsZXMvZmlsZXN5c3RlbS9EaXJlY3RvcnlFbnRyeS5jcHAnLApJbmRleDogU291
cmNlL1dlYkNvcmUvTW9kdWxlcy9maWxlc3lzdGVtL0RPTUZpbGVQYXRoLmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2ZpbGVzeXN0ZW0vRE9NRmlsZVBhdGguY3BwCShy
ZXZpc2lvbiAxMTA3MjYpCShmcm9tIFNvdXJjZS9XZWJDb3JlL2ZpbGVhcGkvRE9NRmlsZVBhdGgu
Y3BwOjExMDcyNikKKysrIFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvZmlsZXN5c3RlbS9ET01GaWxl
UGF0aC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwxNTQgQEAKKy8qCisgKiBDb3B5cmln
aHQgKEMpIDIwMTAgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRp
c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp
dGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBm
b2xsb3dpbmcgY29uZGl0aW9ucyBhcmUKKyAqIG1ldDoKKyAqCisgKiAgICAgKiBSZWRpc3RyaWJ1
dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICog
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyLgorICogICAgICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9k
dWNlIHRoZSBhYm92ZQorICogY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lcgorICogaW4gdGhlIGRvY3VtZW50YXRpb24g
YW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQorICogZGlzdHJpYnV0aW9u
LgorICogICAgICogTmVpdGhlciB0aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBub3IgdGhlIG5hbWVz
IG9mIGl0cworICogY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90
ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20KKyAqIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZp
YyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9W
SURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUworICogIkFTIElT
IiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBO
T1QKKyAqIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklM
SVRZIEFORCBGSVRORVNTIEZPUgorICogQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlN
RUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKKyAqIE9XTkVSIE9SIENPTlRSSUJV
VE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAorICog
U1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywg
QlVUIE5PVAorICogTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBP
UiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCisgKiBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVT
UyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKKyAqIFRIRU9SWSBPRiBM
SUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQK
KyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdB
WSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9G
IFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmln
LmgiCisjaW5jbHVkZSAiRE9NRmlsZVBhdGguaCIKKworI2lmIEVOQUJMRShGSUxFX1NZU1RFTSkK
KworI2luY2x1ZGUgIlJlZ3VsYXJFeHByZXNzaW9uLmgiCisjaW5jbHVkZSA8d3RmL1ZlY3Rvci5o
PgorI2luY2x1ZGUgPHd0Zi90ZXh0L0NTdHJpbmcuaD4KKworbmFtZXNwYWNlIFdlYkNvcmUgewor
Citjb25zdCBjaGFyIERPTUZpbGVQYXRoOjpzZXBhcmF0b3IgPSAnLyc7Citjb25zdCBjaGFyIERP
TUZpbGVQYXRoOjpyb290W10gPSAiLyI7CisKK1N0cmluZyBET01GaWxlUGF0aDo6YXBwZW5kKGNv
bnN0IFN0cmluZyYgYmFzZSwgY29uc3QgU3RyaW5nJiBjb21wb25lbnRzKQoreworICAgIHJldHVy
biBlbnN1cmVEaXJlY3RvcnlQYXRoKGJhc2UpICsgY29tcG9uZW50czsKK30KKworU3RyaW5nIERP
TUZpbGVQYXRoOjplbnN1cmVEaXJlY3RvcnlQYXRoKGNvbnN0IFN0cmluZyYgcGF0aCkKK3sKKyAg
ICBpZiAoIURPTUZpbGVQYXRoOjplbmRzV2l0aFNlcGFyYXRvcihwYXRoKSkgeworICAgICAgICBT
dHJpbmcgbmV3UGF0aCA9IHBhdGg7CisgICAgICAgIG5ld1BhdGguYXBwZW5kKERPTUZpbGVQYXRo
OjpzZXBhcmF0b3IpOworICAgICAgICByZXR1cm4gbmV3UGF0aDsKKyAgICB9CisgICAgcmV0dXJu
IHBhdGg7Cit9CisKK1N0cmluZyBET01GaWxlUGF0aDo6Z2V0TmFtZShjb25zdCBTdHJpbmcmIHBh
dGgpCit7CisgICAgaW50IGluZGV4ID0gcGF0aC5yZXZlcnNlRmluZChET01GaWxlUGF0aDo6c2Vw
YXJhdG9yKTsKKyAgICBpZiAoaW5kZXggIT0gLTEpCisgICAgICAgIHJldHVybiBwYXRoLnN1YnN0
cmluZyhpbmRleCArIDEpOworICAgIHJldHVybiBwYXRoOworfQorCitTdHJpbmcgRE9NRmlsZVBh
dGg6OmdldERpcmVjdG9yeShjb25zdCBTdHJpbmcmIHBhdGgpCit7CisgICAgaW50IGluZGV4ID0g
cGF0aC5yZXZlcnNlRmluZChET01GaWxlUGF0aDo6c2VwYXJhdG9yKTsKKyAgICBpZiAoaW5kZXgg
PT0gMCkKKyAgICAgICAgcmV0dXJuIERPTUZpbGVQYXRoOjpyb290OworICAgIGlmIChpbmRleCAh
PSAtMSkKKyAgICAgICAgcmV0dXJuIHBhdGguc3Vic3RyaW5nKDAsIGluZGV4KTsKKyAgICByZXR1
cm4gIi4iOworfQorCitib29sIERPTUZpbGVQYXRoOjppc1BhcmVudE9mKGNvbnN0IFN0cmluZyYg
cGFyZW50LCBjb25zdCBTdHJpbmcmIG1heUJlQ2hpbGQpCit7CisgICAgQVNTRVJUKERPTUZpbGVQ
YXRoOjppc0Fic29sdXRlKHBhcmVudCkpOworICAgIEFTU0VSVChET01GaWxlUGF0aDo6aXNBYnNv
bHV0ZShtYXlCZUNoaWxkKSk7CisgICAgaWYgKHBhcmVudCA9PSBET01GaWxlUGF0aDo6cm9vdCAm
JiBtYXlCZUNoaWxkICE9IERPTUZpbGVQYXRoOjpyb290KQorICAgICAgICByZXR1cm4gdHJ1ZTsK
KyAgICBpZiAocGFyZW50Lmxlbmd0aCgpID49IG1heUJlQ2hpbGQubGVuZ3RoKCkgfHwgIW1heUJl
Q2hpbGQuc3RhcnRzV2l0aChwYXJlbnQsIGZhbHNlKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOwor
ICAgIGlmIChtYXlCZUNoaWxkW3BhcmVudC5sZW5ndGgoKV0gIT0gRE9NRmlsZVBhdGg6OnNlcGFy
YXRvcikKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIHJldHVybiB0cnVlOworfQorCitTdHJp
bmcgRE9NRmlsZVBhdGg6OnJlbW92ZUV4dHJhUGFyZW50UmVmZXJlbmNlcyhjb25zdCBTdHJpbmcm
IHBhdGgpCit7CisgICAgQVNTRVJUKERPTUZpbGVQYXRoOjppc0Fic29sdXRlKHBhdGgpKTsKKyAg
ICBWZWN0b3I8U3RyaW5nPiBjb21wb25lbnRzOworICAgIFZlY3RvcjxTdHJpbmc+IGNhbm9uaWNh
bGl6ZWQ7CisgICAgcGF0aC5zcGxpdChET01GaWxlUGF0aDo6c2VwYXJhdG9yLCBjb21wb25lbnRz
KTsKKyAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGNvbXBvbmVudHMuc2l6ZSgpOyArK2kpIHsK
KyAgICAgICAgaWYgKGNvbXBvbmVudHNbaV0gPT0gIi4iKQorICAgICAgICAgICAgY29udGludWU7
CisgICAgICAgIGlmIChjb21wb25lbnRzW2ldID09ICIuLiIpIHsKKyAgICAgICAgICAgIGlmIChj
YW5vbmljYWxpemVkLnNpemUoKSA+IDApCisgICAgICAgICAgICAgICAgY2Fub25pY2FsaXplZC5y
ZW1vdmVMYXN0KCk7CisgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgfQorICAgICAgICBj
YW5vbmljYWxpemVkLmFwcGVuZChjb21wb25lbnRzW2ldKTsKKyAgICB9CisgICAgaWYgKGNhbm9u
aWNhbGl6ZWQuaXNFbXB0eSgpKQorICAgICAgICByZXR1cm4gRE9NRmlsZVBhdGg6OnJvb3Q7Cisg
ICAgU3RyaW5nIHJlc3VsdDsKKyAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGNhbm9uaWNhbGl6
ZWQuc2l6ZSgpOyArK2kpIHsKKyAgICAgICAgcmVzdWx0LmFwcGVuZChET01GaWxlUGF0aDo6c2Vw
YXJhdG9yKTsKKyAgICAgICAgcmVzdWx0LmFwcGVuZChjYW5vbmljYWxpemVkW2ldKTsKKyAgICB9
CisgICAgcmV0dXJuIHJlc3VsdDsKK30KKworYm9vbCBET01GaWxlUGF0aDo6aXNWYWxpZFBhdGgo
Y29uc3QgU3RyaW5nJiBwYXRoKQoreworICAgIGlmIChwYXRoLmlzRW1wdHkoKSB8fCBwYXRoID09
IERPTUZpbGVQYXRoOjpyb290KQorICAgICAgICByZXR1cm4gdHJ1ZTsKKworICAgIC8vIEVtYmVk
ZGVkIE5VTHMgYXJlIG5vdCBhbGxvd2VkLgorICAgIGlmIChwYXRoLmZpbmQoc3RhdGljX2Nhc3Q8
VUNoYXI+KDApKSAhPSBXVEY6Om5vdEZvdW5kKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAg
ICAvLyBXaGlsZSBub3QgW3lldF0gcmVzdHJpY3RlZCBieSB0aGUgc3BlYywgJ1xcJyBjb21wbGlj
YXRlcyBpbXBsZW1lbnRhdGlvbiBmb3IgQ2hyb21pdW0uCisgICAgaWYgKHBhdGguZmluZCgnXFwn
KSAhPSBXVEY6Om5vdEZvdW5kKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICAvLyBUaGlz
IG1ldGhvZCBpcyBvbmx5IGNhbGxlZCBvbiBmdWxseS1ldmFsdWF0ZWQgYWJzb2x1dGUgcGF0aHMu
IEFueSBzaWduIG9mICIuLiIgb3IgIi4iIGlzIGxpa2VseSBhbiBhdHRlbXB0IHRvIGJyZWFrIG91
dCBvZiB0aGUgc2FuZGJveC4KKyAgICBWZWN0b3I8U3RyaW5nPiBjb21wb25lbnRzOworICAgIHBh
dGguc3BsaXQoRE9NRmlsZVBhdGg6OnNlcGFyYXRvciwgY29tcG9uZW50cyk7CisgICAgZm9yIChz
aXplX3QgaSA9IDA7IGkgPCBjb21wb25lbnRzLnNpemUoKTsgKytpKSB7CisgICAgICAgIGlmIChj
b21wb25lbnRzW2ldID09ICIuIikKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAg
aWYgKGNvbXBvbmVudHNbaV0gPT0gIi4uIikKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAg
ICB9CisgICAgcmV0dXJuIHRydWU7Cit9CisKK2Jvb2wgRE9NRmlsZVBhdGg6OmlzVmFsaWROYW1l
KGNvbnN0IFN0cmluZyYgbmFtZSkKK3sKKyAgICBpZiAobmFtZS5pc0VtcHR5KCkpCisgICAgICAg
IHJldHVybiB0cnVlOworICAgIC8vICcvJyBpcyBub3QgYWxsb3dlZCBpbiBuYW1lLgorICAgIGlm
IChuYW1lLmNvbnRhaW5zKCcvJykpCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICByZXR1cm4g
aXNWYWxpZFBhdGgobmFtZSk7Cit9CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKworI2VuZGlm
IC8vIEVOQUJMRShGSUxFX1NZU1RFTSkKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvZmls
ZXN5c3RlbS9ET01GaWxlUGF0aC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL01vZHVs
ZXMvZmlsZXN5c3RlbS9ET01GaWxlUGF0aC5oCShyZXZpc2lvbiAxMTA3MjYpCShmcm9tIFNvdXJj
ZS9XZWJDb3JlL2ZpbGVhcGkvRE9NRmlsZVBhdGguaDoxMTA3MjYpCisrKyBTb3VyY2UvV2ViQ29y
ZS9Nb2R1bGVzL2ZpbGVzeXN0ZW0vRE9NRmlsZVBhdGguaAkod29ya2luZyBjb3B5KQpAQCAtMCww
ICsxLDg2IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEwIEdvb2dsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5k
IGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJt
aXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCisgKiBtZXQ6
CisgKgorICogICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWlu
IHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBp
biBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKKyAqIGNvcHlyaWdodCBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIK
KyAqIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQg
d2l0aCB0aGUKKyAqIGRpc3RyaWJ1dGlvbi4KKyAqICAgICAqIE5laXRoZXIgdGhlIG5hbWUgb2Yg
R29vZ2xlIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMKKyAqIGNvbnRyaWJ1dG9ycyBtYXkgYmUg
dXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tCisgKiB0aGlz
IHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoK
KyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFO
RCBDT05UUklCVVRPUlMKKyAqICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FS
UkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBX
QVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IKKyAqIEEgUEFSVElD
VUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJ
R0hUCisgKiBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJ
TkRJUkVDVCwgSU5DSURFTlRBTCwKKyAqIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVO
VElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFBST0NVUkVN
RU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAorICogREFU
QSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBB
TkQgT04gQU5ZCisgKiBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBT
VFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RI
RVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09G
VFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0Uu
CisgKi8KKworI2lmbmRlZiBET01GaWxlUGF0aF9oCisjZGVmaW5lIERPTUZpbGVQYXRoX2gKKwor
I2luY2x1ZGUgIlBsYXRmb3JtU3RyaW5nLmgiCisjaW5jbHVkZSA8d3RmL1Bhc3NSZWZQdHIuaD4K
KyNpbmNsdWRlIDx3dGYvUmVmQ291bnRlZC5oPgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKKy8v
IERPTUZpbGVTeXN0ZW0gcGF0aCB1dGlsaXRpZXMuIEFsbCBtZXRob2RzIGluIHRoaXMgY2xhc3Mg
YXJlIHN0YXRpYy4KK2NsYXNzIERPTUZpbGVQYXRoIHsKK3B1YmxpYzoKKyAgICBzdGF0aWMgY29u
c3QgY2hhciBzZXBhcmF0b3I7CisgICAgc3RhdGljIGNvbnN0IGNoYXIgcm9vdFtdOworCisgICAg
Ly8gUmV0dXJucyB0aGUgbmFtZSBwYXJ0IGZyb20gdGhlIGdpdmVuIHBhdGguCisgICAgc3RhdGlj
IFN0cmluZyBnZXROYW1lKGNvbnN0IFN0cmluZyYgcGF0aCk7CisKKyAgICAvLyBSZXR1cm5zIHRo
ZSBwYXJlbnQgZGlyZWN0b3J5IHBhdGggb2YgdGhlIGdpdmVuIHBhdGguCisgICAgc3RhdGljIFN0
cmluZyBnZXREaXJlY3RvcnkoY29uc3QgU3RyaW5nJiBwYXRoKTsKKworICAgIC8vIENoZWNrcyBp
ZiBhIGdpdmVuIHBhdGggaXMgYSBwYXJlbnQgb2YgbWF5QmVDaGlsZC4gVGhpcyBtZXRob2QgYXNz
dW1lcyBnaXZlbiBwYXRocyBhcmUgYWJzb2x1dGUgYW5kIGRvIG5vdCBoYXZlIGV4dHJhIHJlZmVy
ZW5jZXMgdG8gYSBwYXJlbnQgKGkuZS4gIi4uLyIpLgorICAgIHN0YXRpYyBib29sIGlzUGFyZW50
T2YoY29uc3QgU3RyaW5nJiBwYXRoLCBjb25zdCBTdHJpbmcmIG1heUJlQ2hpbGQpOworCisgICAg
Ly8gQXBwZW5kcyB0aGUgc2VwYXJhdG9yIGF0IHRoZSBlbmQgb2YgdGhlIHBhdGggaWYgaXQncyBu
b3QgdGhlcmUgYWxyZWFkeS4KKyAgICBzdGF0aWMgU3RyaW5nIGVuc3VyZURpcmVjdG9yeVBhdGgo
Y29uc3QgU3RyaW5nJiBwYXRoKTsKKworICAgIC8vIFJldHVybnMgYSBuZXcgcGF0aCBieSBhcHBl
bmRpbmcgYSBzZXBhcmF0b3IgYW5kIHRoZSBzdXBwbGllZCBwYXRoIGNvbXBvbmVudCB0byB0aGUg
cGF0aC4KKyAgICBzdGF0aWMgU3RyaW5nIGFwcGVuZChjb25zdCBTdHJpbmcmIHBhdGgsIGNvbnN0
IFN0cmluZyYgY29tcG9uZW50KTsKKworICAgIHN0YXRpYyBib29sIGlzQWJzb2x1dGUoY29uc3Qg
U3RyaW5nJiBwYXRoKQorICAgIHsKKyAgICAgICAgcmV0dXJuIHBhdGguc3RhcnRzV2l0aChET01G
aWxlUGF0aDo6cm9vdCk7CisgICAgfQorCisgICAgc3RhdGljIGJvb2wgZW5kc1dpdGhTZXBhcmF0
b3IoY29uc3QgU3RyaW5nJiBwYXRoKQorICAgIHsKKyAgICAgICAgcmV0dXJuIHBhdGhbcGF0aC5s
ZW5ndGgoKSAtIDFdID09IERPTUZpbGVQYXRoOjpzZXBhcmF0b3I7CisgICAgfQorCisgICAgLy8g
RXZhbHVhdGVzIGFsbCAiLi4vIiBhbmQgIi4vIiBzZWdtZW50cy4gIE5vdGUgdGhhdCAiLy4uLyIg
ZXhwYW5kcyB0byAiLyIsIHNvIHlvdSBjYW4ndCBldmVyIHJlZmVyIHRvIGFueXRoaW5nIGFib3Zl
IHRoZSByb290IGRpcmVjdG9yeS4KKyAgICBzdGF0aWMgU3RyaW5nIHJlbW92ZUV4dHJhUGFyZW50
UmVmZXJlbmNlcyhjb25zdCBTdHJpbmcmIHBhdGgpOworCisgICAgLy8gQ2hlY2tzIGlmIHRoZSBn
aXZlbiBwYXRoIGZvbGxvd3MgdGhlIEZpbGVTeXN0ZW0gQVBJIG5hbWluZyByZXN0cmljdGlvbnMu
CisgICAgc3RhdGljIGJvb2wgaXNWYWxpZFBhdGgoY29uc3QgU3RyaW5nJiBwYXRoKTsKKworICAg
IC8vIENoZWNrcyBpZiB0aGUgZ2l2ZW4gbmFtZSBmb2xsb3dzIHRoZSBGaWxlU3lzdGVtIEFQSSBu
YW1pbmcgcmVzdHJpY3Rpb25zLgorICAgIHN0YXRpYyBib29sIGlzVmFsaWROYW1lKGNvbnN0IFN0
cmluZyYgbmFtZSk7CisKK3ByaXZhdGU6CisgICAgRE9NRmlsZVBhdGgoKSB7IH0KK307CisKK30g
Ly8gbmFtZXNwYWNlIFdlYkNvcmUKKworI2VuZGlmIC8vIERPTUZpbGVQYXRoX2gKSW5kZXg6IFNv
dXJjZS9XZWJDb3JlL01vZHVsZXMvZmlsZXN5c3RlbS9ET01GaWxlU3lzdGVtLmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2ZpbGVzeXN0ZW0vRE9NRmlsZVN5c3RlbS5j
cHAJKHJldmlzaW9uIDExMDcyNikJKGZyb20gU291cmNlL1dlYkNvcmUvZmlsZWFwaS9ET01GaWxl
U3lzdGVtLmNwcDoxMTA3MjYpCisrKyBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2ZpbGVzeXN0ZW0v
RE9NRmlsZVN5c3RlbS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwxNjIgQEAKKy8qCisg
KiBDb3B5cmlnaHQgKEMpIDIwMTAgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAq
CisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3
aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0
aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUKKyAqIG1ldDoKKyAqCisgKiAgICAgKiBS
ZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHly
aWdodAorICogbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyLgorICogICAgICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11
c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQorICogY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lcgorICogaW4gdGhlIGRvY3Vt
ZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQorICogZGlz
dHJpYnV0aW9uLgorICogICAgICogTmVpdGhlciB0aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBub3Ig
dGhlIG5hbWVzIG9mIGl0cworICogY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ug
b3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20KKyAqIHRoaXMgc29mdHdhcmUgd2l0aG91
dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogVEhJUyBTT0ZUV0FS
RSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUwor
ICogIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJ
TkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVS
Q0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgorICogQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJF
IERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKKyAqIE9XTkVSIE9S
IENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVO
VEFMLAorICogU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElO
Q0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVU
RSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCisgKiBEQVRBLCBPUiBQUk9GSVRTOyBP
UiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKKyAqIFRI
RU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFks
IE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcg
SU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBB
RFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVk
ZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiRE9NRmlsZVN5c3RlbS5oIgorCisjaWYgRU5BQkxFKEZJ
TEVfU1lTVEVNKQorCisjaW5jbHVkZSAiQXN5bmNGaWxlU3lzdGVtLmgiCisjaW5jbHVkZSAiRE9N
RmlsZVBhdGguaCIKKyNpbmNsdWRlICJEaXJlY3RvcnlFbnRyeS5oIgorI2luY2x1ZGUgIkVycm9y
Q2FsbGJhY2suaCIKKyNpbmNsdWRlICJGaWxlLmgiCisjaW5jbHVkZSAiRmlsZUNhbGxiYWNrLmgi
CisjaW5jbHVkZSAiRmlsZUVudHJ5LmgiCisjaW5jbHVkZSAiRmlsZU1ldGFkYXRhLmgiCisjaW5j
bHVkZSAiRmlsZVN5c3RlbUNhbGxiYWNrcy5oIgorI2luY2x1ZGUgIkZpbGVXcml0ZXIuaCIKKyNp
bmNsdWRlICJGaWxlV3JpdGVyQmFzZUNhbGxiYWNrLmgiCisjaW5jbHVkZSAiRmlsZVdyaXRlckNh
bGxiYWNrLmgiCisjaW5jbHVkZSAiSW5zcGVjdG9yRmlsZVN5c3RlbUluc3RydW1lbnRhdGlvbi5o
IgorI2luY2x1ZGUgIk1ldGFkYXRhQ2FsbGJhY2suaCIKKyNpbmNsdWRlICJTY3JpcHRFeGVjdXRp
b25Db250ZXh0LmgiCisjaW5jbHVkZSA8d3RmL093blB0ci5oPgorCituYW1lc3BhY2UgV2ViQ29y
ZSB7CisKKy8vIHN0YXRpYworUGFzc1JlZlB0cjxET01GaWxlU3lzdGVtPiBET01GaWxlU3lzdGVt
OjpjcmVhdGUoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCogY29udGV4dCwgY29uc3QgU3RyaW5nJiBu
YW1lLCBQYXNzT3duUHRyPEFzeW5jRmlsZVN5c3RlbT4gYXN5bmNGaWxlU3lzdGVtKQoreworICAg
IFJlZlB0cjxET01GaWxlU3lzdGVtPiBmaWxlU3lzdGVtKGFkb3B0UmVmKG5ldyBET01GaWxlU3lz
dGVtKGNvbnRleHQsIG5hbWUsIGFzeW5jRmlsZVN5c3RlbSkpKTsKKyAgICBmaWxlU3lzdGVtLT5z
dXNwZW5kSWZOZWVkZWQoKTsKKyAgICBJbnNwZWN0b3JJbnN0cnVtZW50YXRpb246OmRpZE9wZW5G
aWxlU3lzdGVtKGZpbGVTeXN0ZW0uZ2V0KCkpOworICAgIHJldHVybiBmaWxlU3lzdGVtLnJlbGVh
c2UoKTsKK30KKworRE9NRmlsZVN5c3RlbTo6RE9NRmlsZVN5c3RlbShTY3JpcHRFeGVjdXRpb25D
b250ZXh0KiBjb250ZXh0LCBjb25zdCBTdHJpbmcmIG5hbWUsIFBhc3NPd25QdHI8QXN5bmNGaWxl
U3lzdGVtPiBhc3luY0ZpbGVTeXN0ZW0pCisgICAgOiBET01GaWxlU3lzdGVtQmFzZShjb250ZXh0
LCBuYW1lLCBhc3luY0ZpbGVTeXN0ZW0pCisgICAgLCBBY3RpdmVET01PYmplY3QoY29udGV4dCwg
dGhpcykKK3sKK30KKworUGFzc1JlZlB0cjxEaXJlY3RvcnlFbnRyeT4gRE9NRmlsZVN5c3RlbTo6
cm9vdCgpCit7CisgICAgcmV0dXJuIERpcmVjdG9yeUVudHJ5OjpjcmVhdGUodGhpcywgRE9NRmls
ZVBhdGg6OnJvb3QpOworfQorCit2b2lkIERPTUZpbGVTeXN0ZW06OnN0b3AoKQoreworICAgIG1f
YXN5bmNGaWxlU3lzdGVtLT5zdG9wKCk7Cit9CisKK2Jvb2wgRE9NRmlsZVN5c3RlbTo6aGFzUGVu
ZGluZ0FjdGl2aXR5KCkgY29uc3QKK3sKKyAgICByZXR1cm4gbV9hc3luY0ZpbGVTeXN0ZW0tPmhh
c1BlbmRpbmdBY3Rpdml0eSgpOworfQorCit2b2lkIERPTUZpbGVTeXN0ZW06OmNvbnRleHREZXN0
cm95ZWQoKQoreworICAgIG1fYXN5bmNGaWxlU3lzdGVtLT5zdG9wKCk7CisgICAgQWN0aXZlRE9N
T2JqZWN0Ojpjb250ZXh0RGVzdHJveWVkKCk7Cit9CisKK25hbWVzcGFjZSB7CisKK2NsYXNzIENv
bnZlcnRUb0ZpbGVXcml0ZXJDYWxsYmFjayA6IHB1YmxpYyBGaWxlV3JpdGVyQmFzZUNhbGxiYWNr
IHsKK3B1YmxpYzoKKyAgICBzdGF0aWMgUGFzc1JlZlB0cjxDb252ZXJ0VG9GaWxlV3JpdGVyQ2Fs
bGJhY2s+IGNyZWF0ZShQYXNzUmVmUHRyPEZpbGVXcml0ZXJDYWxsYmFjaz4gY2FsbGJhY2spCisg
ICAgeworICAgICAgICByZXR1cm4gYWRvcHRSZWYobmV3IENvbnZlcnRUb0ZpbGVXcml0ZXJDYWxs
YmFjayhjYWxsYmFjaykpOworICAgIH0KKworICAgIGJvb2wgaGFuZGxlRXZlbnQoRmlsZVdyaXRl
ckJhc2UqIGZpbGVXcml0ZXJCYXNlKQorICAgIHsKKyAgICAgICAgcmV0dXJuIG1fY2FsbGJhY2st
PmhhbmRsZUV2ZW50KHN0YXRpY19jYXN0PEZpbGVXcml0ZXIqPihmaWxlV3JpdGVyQmFzZSkpOwor
ICAgIH0KK3ByaXZhdGU6CisgICAgQ29udmVydFRvRmlsZVdyaXRlckNhbGxiYWNrKFBhc3NSZWZQ
dHI8RmlsZVdyaXRlckNhbGxiYWNrPiBjYWxsYmFjaykKKyAgICAgICAgOiBtX2NhbGxiYWNrKGNh
bGxiYWNrKQorICAgIHsKKyAgICB9CisgICAgUmVmUHRyPEZpbGVXcml0ZXJDYWxsYmFjaz4gbV9j
YWxsYmFjazsKK307CisKK30KKwordm9pZCBET01GaWxlU3lzdGVtOjpjcmVhdGVXcml0ZXIoY29u
c3QgRmlsZUVudHJ5KiBmaWxlRW50cnksIFBhc3NSZWZQdHI8RmlsZVdyaXRlckNhbGxiYWNrPiBz
dWNjZXNzQ2FsbGJhY2ssIFBhc3NSZWZQdHI8RXJyb3JDYWxsYmFjaz4gZXJyb3JDYWxsYmFjaykK
K3sKKyAgICBBU1NFUlQoZmlsZUVudHJ5KTsKKworICAgIFJlZlB0cjxGaWxlV3JpdGVyPiBmaWxl
V3JpdGVyID0gRmlsZVdyaXRlcjo6Y3JlYXRlKHNjcmlwdEV4ZWN1dGlvbkNvbnRleHQoKSk7Cisg
ICAgUmVmUHRyPEZpbGVXcml0ZXJCYXNlQ2FsbGJhY2s+IGNvbnZlcnNpb25DYWxsYmFjayA9IENv
bnZlcnRUb0ZpbGVXcml0ZXJDYWxsYmFjazo6Y3JlYXRlKHN1Y2Nlc3NDYWxsYmFjayk7CisgICAg
T3duUHRyPEZpbGVXcml0ZXJCYXNlQ2FsbGJhY2tzPiBjYWxsYmFja3MgPSBGaWxlV3JpdGVyQmFz
ZUNhbGxiYWNrczo6Y3JlYXRlKGZpbGVXcml0ZXIsIGNvbnZlcnNpb25DYWxsYmFjaywgZXJyb3JD
YWxsYmFjayk7CisgICAgbV9hc3luY0ZpbGVTeXN0ZW0tPmNyZWF0ZVdyaXRlcihmaWxlV3JpdGVy
LmdldCgpLCBmaWxlRW50cnktPmZ1bGxQYXRoKCksIGNhbGxiYWNrcy5yZWxlYXNlKCkpOworfQor
CituYW1lc3BhY2UgeworCitjbGFzcyBHZXRQYXRoQ2FsbGJhY2sgOiBwdWJsaWMgRmlsZVN5c3Rl
bUNhbGxiYWNrc0Jhc2UgeworcHVibGljOgorICAgIHN0YXRpYyBQYXNzT3duUHRyPEdldFBhdGhD
YWxsYmFjaz4gY3JlYXRlKFBhc3NSZWZQdHI8RE9NRmlsZVN5c3RlbT4gZmlsZXN5c3RlbSwgY29u
c3QgU3RyaW5nJiBuYW1lLCBQYXNzUmVmUHRyPEZpbGVDYWxsYmFjaz4gc3VjY2Vzc0NhbGxiYWNr
LCBQYXNzUmVmUHRyPEVycm9yQ2FsbGJhY2s+IGVycm9yQ2FsbGJhY2spCisgICAgeworICAgICAg
ICByZXR1cm4gYWRvcHRQdHIobmV3IEdldFBhdGhDYWxsYmFjayhmaWxlc3lzdGVtLCBuYW1lLCBz
dWNjZXNzQ2FsbGJhY2ssIGVycm9yQ2FsbGJhY2spKTsKKyAgICB9CisKKyAgICB2aXJ0dWFsIHZv
aWQgZGlkUmVhZE1ldGFkYXRhKGNvbnN0IEZpbGVNZXRhZGF0YSYgbWV0YWRhdGEpCisgICAgewor
ICAgICAgICBBU1NFUlQoIW1ldGFkYXRhLnBsYXRmb3JtUGF0aC5pc0VtcHR5KCkpOworICAgICAg
ICBtX2ZpbGVzeXN0ZW0tPnNjaGVkdWxlQ2FsbGJhY2sobV9zdWNjZXNzQ2FsbGJhY2sucmVsZWFz
ZSgpLCBGaWxlOjpjcmVhdGVXaXRoTmFtZShtZXRhZGF0YS5wbGF0Zm9ybVBhdGgsIG1fbmFtZSkp
OworICAgIH0KKworcHJpdmF0ZToKKyAgICBHZXRQYXRoQ2FsbGJhY2soUGFzc1JlZlB0cjxET01G
aWxlU3lzdGVtPiBmaWxlc3lzdGVtLCBjb25zdCBTdHJpbmcmIG5hbWUsICBQYXNzUmVmUHRyPEZp
bGVDYWxsYmFjaz4gc3VjY2Vzc0NhbGxiYWNrLCBQYXNzUmVmUHRyPEVycm9yQ2FsbGJhY2s+IGVy
cm9yQ2FsbGJhY2spCisgICAgICAgIDogRmlsZVN5c3RlbUNhbGxiYWNrc0Jhc2UoZXJyb3JDYWxs
YmFjaykKKyAgICAgICAgLCBtX2ZpbGVzeXN0ZW0oZmlsZXN5c3RlbSkKKyAgICAgICAgLCBtX25h
bWUobmFtZSkKKyAgICAgICAgLCBtX3N1Y2Nlc3NDYWxsYmFjayhzdWNjZXNzQ2FsbGJhY2spCisg
ICAgeworICAgIH0KKworICAgIFJlZlB0cjxET01GaWxlU3lzdGVtPiBtX2ZpbGVzeXN0ZW07Cisg
ICAgU3RyaW5nIG1fbmFtZTsKKyAgICBSZWZQdHI8RmlsZUNhbGxiYWNrPiBtX3N1Y2Nlc3NDYWxs
YmFjazsKK307CisKK30gLy8gbmFtZXNwYWNlCisKK3ZvaWQgRE9NRmlsZVN5c3RlbTo6Y3JlYXRl
RmlsZShjb25zdCBGaWxlRW50cnkqIGZpbGVFbnRyeSwgUGFzc1JlZlB0cjxGaWxlQ2FsbGJhY2s+
IHN1Y2Nlc3NDYWxsYmFjaywgUGFzc1JlZlB0cjxFcnJvckNhbGxiYWNrPiBlcnJvckNhbGxiYWNr
KQoreworICAgIG1fYXN5bmNGaWxlU3lzdGVtLT5jcmVhdGVTbmFwc2hvdEZpbGVBbmRSZWFkTWV0
YWRhdGEoZmlsZUVudHJ5LT5mdWxsUGF0aCgpLCBHZXRQYXRoQ2FsbGJhY2s6OmNyZWF0ZSh0aGlz
LCBmaWxlRW50cnktPm5hbWUoKSwgc3VjY2Vzc0NhbGxiYWNrLCBlcnJvckNhbGxiYWNrKSk7Cit9
CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKworI2VuZGlmIC8vIEVOQUJMRShGSUxFX1NZU1RF
TSkKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvZmlsZXN5c3RlbS9ET01GaWxlU3lzdGVt
LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvTW9kdWxlcy9maWxlc3lzdGVtL0RPTUZp
bGVTeXN0ZW0uaAkocmV2aXNpb24gMTEwNzI2KQkoZnJvbSBTb3VyY2UvV2ViQ29yZS9maWxlYXBp
L0RPTUZpbGVTeXN0ZW0uaDoxMTA3MjYpCisrKyBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2ZpbGVz
eXN0ZW0vRE9NRmlsZVN5c3RlbS5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMTA5IEBACisv
KgorICogQ29weXJpZ2h0IChDKSAyMDEwIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jt
cywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlk
ZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCisgKiBtZXQ6CisgKgorICogICAg
ICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyAqIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lci4KKyAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9y
bSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKKyAqIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIKKyAqIGluIHRoZSBk
b2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKKyAq
IGRpc3RyaWJ1dGlvbi4KKyAqICAgICAqIE5laXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xlIEluYy4g
bm9yIHRoZSBuYW1lcyBvZiBpdHMKKyAqIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRv
cnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tCisgKiB0aGlzIHNvZnR3YXJlIHdp
dGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAqIFRISVMgU09G
VFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRP
UlMKKyAqICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5D
TFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9G
IE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IKKyAqIEEgUEFSVElDVUxBUiBQVVJQT1NF
IEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCisgKiBPV05F
UiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5D
SURFTlRBTCwKKyAqIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VT
IChJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNU
SVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAorICogREFUQSwgT1IgUFJPRklU
UzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCisg
KiBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklM
SVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklT
SU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4g
SUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2lm
bmRlZiBET01GaWxlU3lzdGVtX2gKKyNkZWZpbmUgRE9NRmlsZVN5c3RlbV9oCisKKyNpZiBFTkFC
TEUoRklMRV9TWVNURU0pCisKKyNpbmNsdWRlICJBY3RpdmVET01PYmplY3QuaCIKKyNpbmNsdWRl
ICJET01GaWxlU3lzdGVtQmFzZS5oIgorI2luY2x1ZGUgIlNjcmlwdEV4ZWN1dGlvbkNvbnRleHQu
aCIKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitjbGFzcyBEaXJlY3RvcnlFbnRyeTsKK2NsYXNz
IEZpbGU7CitjbGFzcyBGaWxlQ2FsbGJhY2s7CitjbGFzcyBGaWxlRW50cnk7CitjbGFzcyBGaWxl
V3JpdGVyQ2FsbGJhY2s7CisKK2NsYXNzIERPTUZpbGVTeXN0ZW0gOiBwdWJsaWMgRE9NRmlsZVN5
c3RlbUJhc2UsIHB1YmxpYyBBY3RpdmVET01PYmplY3QgeworcHVibGljOgorICAgIHN0YXRpYyBQ
YXNzUmVmUHRyPERPTUZpbGVTeXN0ZW0+IGNyZWF0ZShTY3JpcHRFeGVjdXRpb25Db250ZXh0Kiwg
Y29uc3QgU3RyaW5nJiBuYW1lLCBQYXNzT3duUHRyPEFzeW5jRmlsZVN5c3RlbT4pOworCisgICAg
UGFzc1JlZlB0cjxEaXJlY3RvcnlFbnRyeT4gcm9vdCgpOworCisgICAgLy8gQWN0aXZlRE9NT2Jq
ZWN0IG1ldGhvZHMuCisgICAgdmlydHVhbCB2b2lkIHN0b3AoKTsKKyAgICB2aXJ0dWFsIGJvb2wg
aGFzUGVuZGluZ0FjdGl2aXR5KCkgY29uc3Q7CisgICAgdmlydHVhbCB2b2lkIGNvbnRleHREZXN0
cm95ZWQoKTsKKworICAgIHZvaWQgY3JlYXRlV3JpdGVyKGNvbnN0IEZpbGVFbnRyeSosIFBhc3NS
ZWZQdHI8RmlsZVdyaXRlckNhbGxiYWNrPiwgUGFzc1JlZlB0cjxFcnJvckNhbGxiYWNrPik7Cisg
ICAgdm9pZCBjcmVhdGVGaWxlKGNvbnN0IEZpbGVFbnRyeSosIFBhc3NSZWZQdHI8RmlsZUNhbGxi
YWNrPiwgUGFzc1JlZlB0cjxFcnJvckNhbGxiYWNrPik7CisKKyAgICAvLyBTY2hlZHVsZSBhIGNh
bGxiYWNrLiBUaGlzIHNob3VsZCBub3QgY3Jvc3MgdGhyZWFkcyAoc2hvdWxkIGJlIGNhbGxlZCBv
biB0aGUgc2FtZSBjb250ZXh0IHRocmVhZCkuCisgICAgLy8gRklYTUU6IG1vdmUgdGhpcyB0byBh
IG1vcmUgZ2VuZXJpYyBwbGFjZS4KKyAgICB0ZW1wbGF0ZSA8dHlwZW5hbWUgQ0IsIHR5cGVuYW1l
IENCQXJnPgorICAgIHN0YXRpYyB2b2lkIHNjaGVkdWxlQ2FsbGJhY2soU2NyaXB0RXhlY3V0aW9u
Q29udGV4dCosIFBhc3NSZWZQdHI8Q0I+LCBQYXNzUmVmUHRyPENCQXJnPik7CisKKyAgICB0ZW1w
bGF0ZSA8dHlwZW5hbWUgQ0IsIHR5cGVuYW1lIENCQXJnPgorICAgIHZvaWQgc2NoZWR1bGVDYWxs
YmFjayhQYXNzUmVmUHRyPENCPiBjYWxsYmFjaywgUGFzc1JlZlB0cjxDQkFyZz4gY2FsbGJhY2tB
cmcpCisgICAgeworICAgICAgICBzY2hlZHVsZUNhbGxiYWNrKHNjcmlwdEV4ZWN1dGlvbkNvbnRl
eHQoKSwgY2FsbGJhY2ssIGNhbGxiYWNrQXJnKTsKKyAgICB9CisKK3ByaXZhdGU6CisgICAgRE9N
RmlsZVN5c3RlbShTY3JpcHRFeGVjdXRpb25Db250ZXh0KiwgY29uc3QgU3RyaW5nJiBuYW1lLCBQ
YXNzT3duUHRyPEFzeW5jRmlsZVN5c3RlbT4pOworCisgICAgLy8gQSBoZWxwZXIgdGVtcGxhdGUg
dG8gc2NoZWR1bGUgYSBjYWxsYmFjayB0YXNrLgorICAgIHRlbXBsYXRlIDx0eXBlbmFtZSBDQiwg
dHlwZW5hbWUgQ0JBcmc+CisgICAgY2xhc3MgRGlzcGF0Y2hDYWxsYmFja1Rhc2sgOiBwdWJsaWMg
U2NyaXB0RXhlY3V0aW9uQ29udGV4dDo6VGFzayB7CisgICAgcHVibGljOgorICAgICAgICBEaXNw
YXRjaENhbGxiYWNrVGFzayhQYXNzUmVmUHRyPENCPiBjYWxsYmFjaywgUGFzc1JlZlB0cjxDQkFy
Zz4gYXJnKQorICAgICAgICAgICAgOiBtX2NhbGxiYWNrKGNhbGxiYWNrKQorICAgICAgICAgICAg
LCBtX2NhbGxiYWNrQXJnKGFyZykKKyAgICAgICAgeworICAgICAgICB9CisKKyAgICAgICAgdmly
dHVhbCB2b2lkIHBlcmZvcm1UYXNrKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqKQorICAgICAgICB7
CisgICAgICAgICAgICBtX2NhbGxiYWNrLT5oYW5kbGVFdmVudChtX2NhbGxiYWNrQXJnLmdldCgp
KTsKKyAgICAgICAgfQorCisgICAgcHJpdmF0ZToKKyAgICAgICAgUmVmUHRyPENCPiBtX2NhbGxi
YWNrOworICAgICAgICBSZWZQdHI8Q0JBcmc+IG1fY2FsbGJhY2tBcmc7CisgICAgfTsKK307CisK
K3RlbXBsYXRlIDx0eXBlbmFtZSBDQiwgdHlwZW5hbWUgQ0JBcmc+Cit2b2lkIERPTUZpbGVTeXN0
ZW06OnNjaGVkdWxlQ2FsbGJhY2soU2NyaXB0RXhlY3V0aW9uQ29udGV4dCogc2NyaXB0RXhlY3V0
aW9uQ29udGV4dCwgUGFzc1JlZlB0cjxDQj4gY2FsbGJhY2ssIFBhc3NSZWZQdHI8Q0JBcmc+IGFy
ZykKK3sKKyAgICBBU1NFUlQoc2NyaXB0RXhlY3V0aW9uQ29udGV4dC0+aXNDb250ZXh0VGhyZWFk
KCkpOworICAgIGlmIChjYWxsYmFjaykKKyAgICAgICAgc2NyaXB0RXhlY3V0aW9uQ29udGV4dC0+
cG9zdFRhc2soYWRvcHRQdHIobmV3IERpc3BhdGNoQ2FsbGJhY2tUYXNrPENCLCBDQkFyZz4oY2Fs
bGJhY2ssIGFyZykpKTsKK30KKworfSAvLyBuYW1lc3BhY2UKKworI2VuZGlmIC8vIEVOQUJMRShG
SUxFX1NZU1RFTSkKKworI2VuZGlmIC8vIERPTUZpbGVTeXN0ZW1faApJbmRleDogU291cmNlL1dl
YkNvcmUvTW9kdWxlcy9maWxlc3lzdGVtL0RPTUZpbGVTeXN0ZW0uaWRsCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvZmlsZXN5c3RlbS9ET01GaWxlU3lzdGVtLmlkbAkocmV2
aXNpb24gMTEwNzI2KQkoZnJvbSBTb3VyY2UvV2ViQ29yZS9maWxlYXBpL0RPTUZpbGVTeXN0ZW0u
aWRsOjExMDcyNikKKysrIFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvZmlsZXN5c3RlbS9ET01GaWxl
U3lzdGVtLmlkbAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDQxIEBACisvKgorICogQ29weXJp
Z2h0IChDKSAyMDEwIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmln
aHQgKEMpIDIwMTEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlz
dHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0
aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZv
bGxvd2luZyBjb25kaXRpb25zIGFyZQorICogbWV0OgorICoKKyAqICAgICAqIFJlZGlzdHJpYnV0
aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIuCisgKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1
Y2UgdGhlIGFib3ZlCisgKiBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyCisgKiBpbiB0aGUgZG9jdW1lbnRhdGlvbiBh
bmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCisgKiBkaXN0cmlidXRpb24u
CisgKiAgICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9mIEdvb2dsZSBJbmMuIG5vciB0aGUgbmFtZXMg
b2YgaXRzCisgKiBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3Rl
IHByb2R1Y3RzIGRlcml2ZWQgZnJvbQorICogdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmlj
IHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJ
REVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCisgKiAiQVMgSVMi
IEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5P
VAorICogTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJ
VFkgQU5EIEZJVE5FU1MgRk9SCisgKiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1F
RC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAorICogT1dORVIgT1IgQ09OVFJJQlVU
T1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCisgKiBT
UEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBC
VVQgTk9UCisgKiBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9S
IFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKKyAqIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNT
IElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQorICogVEhFT1JZIE9GIExJ
QUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAor
ICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZ
IE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0Yg
VEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKK21vZHVsZSBzdG9yYWdlIHsK
KyAgICBpbnRlcmZhY2UgWworICAgICAgICBDb25kaXRpb25hbD1GSUxFX1NZU1RFTSwKKyAgICAg
ICAgQWN0aXZlRE9NT2JqZWN0LAorICAgICAgICBKU05vU3RhdGljVGFibGVzCisgICAgXSBET01G
aWxlU3lzdGVtIHsKKyAgICAgICAgcmVhZG9ubHkgYXR0cmlidXRlIERPTVN0cmluZyBuYW1lOwor
ICAgICAgICByZWFkb25seSBhdHRyaWJ1dGUgRGlyZWN0b3J5RW50cnkgcm9vdDsKKyAgICB9Owor
fQpJbmRleDogU291cmNlL1dlYkNvcmUvTW9kdWxlcy9maWxlc3lzdGVtL0RPTUZpbGVTeXN0ZW1C
YXNlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2ZpbGVzeXN0ZW0v
RE9NRmlsZVN5c3RlbUJhc2UuY3BwCShyZXZpc2lvbiAxMTA3MjYpCShmcm9tIFNvdXJjZS9XZWJD
b3JlL2ZpbGVhcGkvRE9NRmlsZVN5c3RlbUJhc2UuY3BwOjExMDcyNikKKysrIFNvdXJjZS9XZWJD
b3JlL01vZHVsZXMvZmlsZXN5c3RlbS9ET01GaWxlU3lzdGVtQmFzZS5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTAsMCArMSwyMDEgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTAgR29vZ2xlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGlu
IHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlv
biwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBh
cmUKKyAqIG1ldDoKKyAqCisgKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUg
bXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogICAgICogUmVkaXN0
cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQorICogY29w
eXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lcgorICogaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFs
cyBwcm92aWRlZCB3aXRoIHRoZQorICogZGlzdHJpYnV0aW9uLgorICogICAgICogTmVpdGhlciB0
aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0cworICogY29udHJpYnV0
b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZy
b20KKyAqIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1p
c3Npb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hU
IEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUworICogIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1Ig
SU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFRI
RSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgor
ICogQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxM
IFRIRSBDT1BZUklHSFQKKyAqIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFO
WSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAorICogU1BFQ0lBTCwgRVhFTVBMQVJZLCBP
UiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBU
TywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBV
U0UsCisgKiBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VW
RVIgQ0FVU0VEIEFORCBPTiBBTlkKKyAqIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4g
Q09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElH
RU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICog
T0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBT
VUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiRE9NRmls
ZVN5c3RlbUJhc2UuaCIKKworI2lmIEVOQUJMRShGSUxFX1NZU1RFTSkKKworI2luY2x1ZGUgIkRP
TUZpbGVQYXRoLmgiCisjaW5jbHVkZSAiRGlyZWN0b3J5RW50cnkuaCIKKyNpbmNsdWRlICJEaXJl
Y3RvcnlSZWFkZXJCYXNlLmgiCisjaW5jbHVkZSAiRW50cmllc0NhbGxiYWNrLmgiCisjaW5jbHVk
ZSAiRW50cnlBcnJheS5oIgorI2luY2x1ZGUgIkVudHJ5QmFzZS5oIgorI2luY2x1ZGUgIkVudHJ5
Q2FsbGJhY2suaCIKKyNpbmNsdWRlICJFcnJvckNhbGxiYWNrLmgiCisjaW5jbHVkZSAiRmlsZUVy
cm9yLmgiCisjaW5jbHVkZSAiRmlsZVN5c3RlbUNhbGxiYWNrcy5oIgorI2luY2x1ZGUgIk1ldGFk
YXRhQ2FsbGJhY2suaCIKKyNpbmNsdWRlICJTY3JpcHRFeGVjdXRpb25Db250ZXh0LmgiCisjaW5j
bHVkZSAiVm9pZENhbGxiYWNrLmgiCisjaW5jbHVkZSA8d3RmL093blB0ci5oPgorCituYW1lc3Bh
Y2UgV2ViQ29yZSB7CisKK0RPTUZpbGVTeXN0ZW1CYXNlOjpET01GaWxlU3lzdGVtQmFzZShTY3Jp
cHRFeGVjdXRpb25Db250ZXh0KiBjb250ZXh0LCBjb25zdCBTdHJpbmcmIG5hbWUsIFBhc3NPd25Q
dHI8QXN5bmNGaWxlU3lzdGVtPiBhc3luY0ZpbGVTeXN0ZW0pCisgICAgOiBtX2NvbnRleHQoY29u
dGV4dCkKKyAgICAsIG1fbmFtZShuYW1lKQorICAgICwgbV9hc3luY0ZpbGVTeXN0ZW0oYXN5bmNG
aWxlU3lzdGVtKQoreworfQorCitET01GaWxlU3lzdGVtQmFzZTo6fkRPTUZpbGVTeXN0ZW1CYXNl
KCkKK3sKK30KKworU2VjdXJpdHlPcmlnaW4qIERPTUZpbGVTeXN0ZW1CYXNlOjpzZWN1cml0eU9y
aWdpbigpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1fY29udGV4dC0+c2VjdXJpdHlPcmlnaW4oKTsK
K30KKworYm9vbCBET01GaWxlU3lzdGVtQmFzZTo6Z2V0TWV0YWRhdGEoY29uc3QgRW50cnlCYXNl
KiBlbnRyeSwgUGFzc1JlZlB0cjxNZXRhZGF0YUNhbGxiYWNrPiBzdWNjZXNzQ2FsbGJhY2ssIFBh
c3NSZWZQdHI8RXJyb3JDYWxsYmFjaz4gZXJyb3JDYWxsYmFjaykKK3sKKyAgICBtX2FzeW5jRmls
ZVN5c3RlbS0+cmVhZE1ldGFkYXRhKGVudHJ5LT5mdWxsUGF0aCgpLCBNZXRhZGF0YUNhbGxiYWNr
czo6Y3JlYXRlKHN1Y2Nlc3NDYWxsYmFjaywgZXJyb3JDYWxsYmFjaykpOworICAgIHJldHVybiB0
cnVlOworfQorCitzdGF0aWMgYm9vbCB2ZXJpZnlBbmRHZXREZXN0aW5hdGlvblBhdGhGb3JDb3B5
T3JNb3ZlKGNvbnN0IEVudHJ5QmFzZSogc291cmNlLCBFbnRyeUJhc2UqIHBhcmVudCwgY29uc3Qg
U3RyaW5nJiBuZXdOYW1lLCBTdHJpbmcmIGRlc3RpbmF0aW9uUGF0aCkKK3sKKyAgICBBU1NFUlQo
c291cmNlKTsKKworICAgIGlmICghcGFyZW50IHx8ICFwYXJlbnQtPmlzRGlyZWN0b3J5KCkpCisg
ICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIGlmICghbmV3TmFtZS5pc0VtcHR5KCkgJiYgIURP
TUZpbGVQYXRoOjppc1ZhbGlkTmFtZShuZXdOYW1lKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOwor
CisgICAgLy8gSXQgaXMgYW4gZXJyb3IgdG8gdHJ5IHRvIGNvcHkgb3IgbW92ZSBhbiBlbnRyeSBp
bnNpZGUgaXRzZWxmIGF0IGFueSBkZXB0aCBpZiBpdCBpcyBhIGRpcmVjdG9yeS4KKyAgICBpZiAo
c291cmNlLT5pc0RpcmVjdG9yeSgpICYmIERPTUZpbGVQYXRoOjppc1BhcmVudE9mKHNvdXJjZS0+
ZnVsbFBhdGgoKSwgcGFyZW50LT5mdWxsUGF0aCgpKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOwor
CisgICAgLy8gSXQgaXMgYW4gZXJyb3IgdG8gY29weSBvciBtb3ZlIGFuIGVudHJ5IGludG8gaXRz
IHBhcmVudCBpZiBhIG5hbWUgZGlmZmVyZW50IGZyb20gaXRzIGN1cnJlbnQgb25lIGlzbid0IHBy
b3ZpZGVkLgorICAgIGlmICgobmV3TmFtZS5pc0VtcHR5KCkgfHwgc291cmNlLT5uYW1lKCkgPT0g
bmV3TmFtZSkgJiYgRE9NRmlsZVBhdGg6OmdldERpcmVjdG9yeShzb3VyY2UtPmZ1bGxQYXRoKCkp
ID09IHBhcmVudC0+ZnVsbFBhdGgoKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgZGVz
dGluYXRpb25QYXRoID0gcGFyZW50LT5mdWxsUGF0aCgpOworICAgIGlmICghbmV3TmFtZS5pc0Vt
cHR5KCkpCisgICAgICAgIGRlc3RpbmF0aW9uUGF0aCA9IERPTUZpbGVQYXRoOjphcHBlbmQoZGVz
dGluYXRpb25QYXRoLCBuZXdOYW1lKTsKKyAgICBlbHNlCisgICAgICAgIGRlc3RpbmF0aW9uUGF0
aCA9IERPTUZpbGVQYXRoOjphcHBlbmQoZGVzdGluYXRpb25QYXRoLCBzb3VyY2UtPm5hbWUoKSk7
CisKKyAgICByZXR1cm4gdHJ1ZTsKK30KKworc3RhdGljIGJvb2wgcGF0aFRvQWJzb2x1dGVQYXRo
KEFzeW5jRmlsZVN5c3RlbTo6VHlwZSB0eXBlLCBjb25zdCBFbnRyeUJhc2UqIGJhc2UsIFN0cmlu
ZyBwYXRoLCBTdHJpbmcmIGFic29sdXRlUGF0aCkKK3sKKyAgICBBU1NFUlQoYmFzZSk7CisKKyAg
ICBpZiAoIURPTUZpbGVQYXRoOjppc0Fic29sdXRlKHBhdGgpKQorICAgICAgICBwYXRoID0gRE9N
RmlsZVBhdGg6OmFwcGVuZChiYXNlLT5mdWxsUGF0aCgpLCBwYXRoKTsKKyAgICBhYnNvbHV0ZVBh
dGggPSBET01GaWxlUGF0aDo6cmVtb3ZlRXh0cmFQYXJlbnRSZWZlcmVuY2VzKHBhdGgpOworCisg
ICAgaWYgKCh0eXBlID09IEFzeW5jRmlsZVN5c3RlbTo6VGVtcG9yYXJ5IHx8IHR5cGUgPT0gQXN5
bmNGaWxlU3lzdGVtOjpQZXJzaXN0ZW50KSAmJiAhRE9NRmlsZVBhdGg6OmlzVmFsaWRQYXRoKGFi
c29sdXRlUGF0aCkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICByZXR1cm4gdHJ1ZTsKK30K
KworYm9vbCBET01GaWxlU3lzdGVtQmFzZTo6bW92ZShjb25zdCBFbnRyeUJhc2UqIHNvdXJjZSwg
RW50cnlCYXNlKiBwYXJlbnQsIGNvbnN0IFN0cmluZyYgbmV3TmFtZSwgUGFzc1JlZlB0cjxFbnRy
eUNhbGxiYWNrPiBzdWNjZXNzQ2FsbGJhY2ssIFBhc3NSZWZQdHI8RXJyb3JDYWxsYmFjaz4gZXJy
b3JDYWxsYmFjaykKK3sKKyAgICBTdHJpbmcgZGVzdGluYXRpb25QYXRoOworICAgIGlmICghdmVy
aWZ5QW5kR2V0RGVzdGluYXRpb25QYXRoRm9yQ29weU9yTW92ZShzb3VyY2UsIHBhcmVudCwgbmV3
TmFtZSwgZGVzdGluYXRpb25QYXRoKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgbV9h
c3luY0ZpbGVTeXN0ZW0tPm1vdmUoc291cmNlLT5mdWxsUGF0aCgpLCBkZXN0aW5hdGlvblBhdGgs
IEVudHJ5Q2FsbGJhY2tzOjpjcmVhdGUoc3VjY2Vzc0NhbGxiYWNrLCBlcnJvckNhbGxiYWNrLCB0
aGlzLCBkZXN0aW5hdGlvblBhdGgsIHNvdXJjZS0+aXNEaXJlY3RvcnkoKSkpOworICAgIHJldHVy
biB0cnVlOworfQorCitib29sIERPTUZpbGVTeXN0ZW1CYXNlOjpjb3B5KGNvbnN0IEVudHJ5QmFz
ZSogc291cmNlLCBFbnRyeUJhc2UqIHBhcmVudCwgY29uc3QgU3RyaW5nJiBuZXdOYW1lLCBQYXNz
UmVmUHRyPEVudHJ5Q2FsbGJhY2s+IHN1Y2Nlc3NDYWxsYmFjaywgUGFzc1JlZlB0cjxFcnJvckNh
bGxiYWNrPiBlcnJvckNhbGxiYWNrKQoreworICAgIFN0cmluZyBkZXN0aW5hdGlvblBhdGg7Cisg
ICAgaWYgKCF2ZXJpZnlBbmRHZXREZXN0aW5hdGlvblBhdGhGb3JDb3B5T3JNb3ZlKHNvdXJjZSwg
cGFyZW50LCBuZXdOYW1lLCBkZXN0aW5hdGlvblBhdGgpKQorICAgICAgICByZXR1cm4gZmFsc2U7
CisKKyAgICBtX2FzeW5jRmlsZVN5c3RlbS0+Y29weShzb3VyY2UtPmZ1bGxQYXRoKCksIGRlc3Rp
bmF0aW9uUGF0aCwgRW50cnlDYWxsYmFja3M6OmNyZWF0ZShzdWNjZXNzQ2FsbGJhY2ssIGVycm9y
Q2FsbGJhY2ssIHRoaXMsIGRlc3RpbmF0aW9uUGF0aCwgc291cmNlLT5pc0RpcmVjdG9yeSgpKSk7
CisgICAgcmV0dXJuIHRydWU7Cit9CisKK2Jvb2wgRE9NRmlsZVN5c3RlbUJhc2U6OnJlbW92ZShj
b25zdCBFbnRyeUJhc2UqIGVudHJ5LCBQYXNzUmVmUHRyPFZvaWRDYWxsYmFjaz4gc3VjY2Vzc0Nh
bGxiYWNrLCBQYXNzUmVmUHRyPEVycm9yQ2FsbGJhY2s+IGVycm9yQ2FsbGJhY2spCit7CisgICAg
QVNTRVJUKGVudHJ5KTsKKyAgICAvLyBXZSBkb24ndCBhbGxvdyBjYWxsaW5nIHJlbW92ZSgpIG9u
IHRoZSByb290IGRpcmVjdG9yeS4KKyAgICBpZiAoZW50cnktPmZ1bGxQYXRoKCkgPT0gU3RyaW5n
KERPTUZpbGVQYXRoOjpyb290KSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIG1fYXN5bmNG
aWxlU3lzdGVtLT5yZW1vdmUoZW50cnktPmZ1bGxQYXRoKCksIFZvaWRDYWxsYmFja3M6OmNyZWF0
ZShzdWNjZXNzQ2FsbGJhY2ssIGVycm9yQ2FsbGJhY2spKTsKKyAgICByZXR1cm4gdHJ1ZTsKK30K
KworYm9vbCBET01GaWxlU3lzdGVtQmFzZTo6cmVtb3ZlUmVjdXJzaXZlbHkoY29uc3QgRW50cnlC
YXNlKiBlbnRyeSwgUGFzc1JlZlB0cjxWb2lkQ2FsbGJhY2s+IHN1Y2Nlc3NDYWxsYmFjaywgUGFz
c1JlZlB0cjxFcnJvckNhbGxiYWNrPiBlcnJvckNhbGxiYWNrKQoreworICAgIEFTU0VSVChlbnRy
eSAmJiBlbnRyeS0+aXNEaXJlY3RvcnkoKSk7CisgICAgLy8gV2UgZG9uJ3QgYWxsb3cgY2FsbGlu
ZyByZW1vdmUoKSBvbiB0aGUgcm9vdCBkaXJlY3RvcnkuCisgICAgaWYgKGVudHJ5LT5mdWxsUGF0
aCgpID09IFN0cmluZyhET01GaWxlUGF0aDo6cm9vdCkpCisgICAgICAgIHJldHVybiBmYWxzZTsK
KyAgICBtX2FzeW5jRmlsZVN5c3RlbS0+cmVtb3ZlUmVjdXJzaXZlbHkoZW50cnktPmZ1bGxQYXRo
KCksIFZvaWRDYWxsYmFja3M6OmNyZWF0ZShzdWNjZXNzQ2FsbGJhY2ssIGVycm9yQ2FsbGJhY2sp
KTsKKyAgICByZXR1cm4gdHJ1ZTsKK30KKworYm9vbCBET01GaWxlU3lzdGVtQmFzZTo6Z2V0UGFy
ZW50KGNvbnN0IEVudHJ5QmFzZSogZW50cnksIFBhc3NSZWZQdHI8RW50cnlDYWxsYmFjaz4gc3Vj
Y2Vzc0NhbGxiYWNrLCBQYXNzUmVmUHRyPEVycm9yQ2FsbGJhY2s+IGVycm9yQ2FsbGJhY2spCit7
CisgICAgQVNTRVJUKGVudHJ5KTsKKyAgICBTdHJpbmcgcGF0aCA9IERPTUZpbGVQYXRoOjpnZXRE
aXJlY3RvcnkoZW50cnktPmZ1bGxQYXRoKCkpOworCisgICAgbV9hc3luY0ZpbGVTeXN0ZW0tPmRp
cmVjdG9yeUV4aXN0cyhwYXRoLCBFbnRyeUNhbGxiYWNrczo6Y3JlYXRlKHN1Y2Nlc3NDYWxsYmFj
aywgZXJyb3JDYWxsYmFjaywgdGhpcywgcGF0aCwgdHJ1ZSkpOworICAgIHJldHVybiB0cnVlOwor
fQorCitib29sIERPTUZpbGVTeXN0ZW1CYXNlOjpnZXRGaWxlKGNvbnN0IEVudHJ5QmFzZSogZW50
cnksIGNvbnN0IFN0cmluZyYgcGF0aCwgUGFzc1JlZlB0cjxXZWJLaXRGbGFncz4gZmxhZ3MsIFBh
c3NSZWZQdHI8RW50cnlDYWxsYmFjaz4gc3VjY2Vzc0NhbGxiYWNrLCBQYXNzUmVmUHRyPEVycm9y
Q2FsbGJhY2s+IGVycm9yQ2FsbGJhY2spCit7CisgICAgU3RyaW5nIGFic29sdXRlUGF0aDsKKyAg
ICBpZiAoIXBhdGhUb0Fic29sdXRlUGF0aChtX2FzeW5jRmlsZVN5c3RlbS0+dHlwZSgpLCBlbnRy
eSwgcGF0aCwgYWJzb2x1dGVQYXRoKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgT3du
UHRyPEVudHJ5Q2FsbGJhY2tzPiBjYWxsYmFja3MgPSBFbnRyeUNhbGxiYWNrczo6Y3JlYXRlKHN1
Y2Nlc3NDYWxsYmFjaywgZXJyb3JDYWxsYmFjaywgdGhpcywgYWJzb2x1dGVQYXRoLCBmYWxzZSk7
CisgICAgaWYgKGZsYWdzICYmIGZsYWdzLT5pc0NyZWF0ZSgpKQorICAgICAgICBtX2FzeW5jRmls
ZVN5c3RlbS0+Y3JlYXRlRmlsZShhYnNvbHV0ZVBhdGgsIGZsYWdzLT5pc0V4Y2x1c2l2ZSgpLCBj
YWxsYmFja3MucmVsZWFzZSgpKTsKKyAgICBlbHNlCisgICAgICAgIG1fYXN5bmNGaWxlU3lzdGVt
LT5maWxlRXhpc3RzKGFic29sdXRlUGF0aCwgY2FsbGJhY2tzLnJlbGVhc2UoKSk7CisgICAgcmV0
dXJuIHRydWU7Cit9CisKK2Jvb2wgRE9NRmlsZVN5c3RlbUJhc2U6OmdldERpcmVjdG9yeShjb25z
dCBFbnRyeUJhc2UqIGVudHJ5LCBjb25zdCBTdHJpbmcmIHBhdGgsIFBhc3NSZWZQdHI8V2ViS2l0
RmxhZ3M+IGZsYWdzLCBQYXNzUmVmUHRyPEVudHJ5Q2FsbGJhY2s+IHN1Y2Nlc3NDYWxsYmFjaywg
UGFzc1JlZlB0cjxFcnJvckNhbGxiYWNrPiBlcnJvckNhbGxiYWNrKQoreworICAgIFN0cmluZyBh
YnNvbHV0ZVBhdGg7CisgICAgaWYgKCFwYXRoVG9BYnNvbHV0ZVBhdGgobV9hc3luY0ZpbGVTeXN0
ZW0tPnR5cGUoKSwgZW50cnksIHBhdGgsIGFic29sdXRlUGF0aCkpCisgICAgICAgIHJldHVybiBm
YWxzZTsKKworICAgIE93blB0cjxFbnRyeUNhbGxiYWNrcz4gY2FsbGJhY2tzID0gRW50cnlDYWxs
YmFja3M6OmNyZWF0ZShzdWNjZXNzQ2FsbGJhY2ssIGVycm9yQ2FsbGJhY2ssIHRoaXMsIGFic29s
dXRlUGF0aCwgdHJ1ZSk7CisgICAgaWYgKGZsYWdzICYmIGZsYWdzLT5pc0NyZWF0ZSgpKQorICAg
ICAgICBtX2FzeW5jRmlsZVN5c3RlbS0+Y3JlYXRlRGlyZWN0b3J5KGFic29sdXRlUGF0aCwgZmxh
Z3MtPmlzRXhjbHVzaXZlKCksIGNhbGxiYWNrcy5yZWxlYXNlKCkpOworICAgIGVsc2UKKyAgICAg
ICAgbV9hc3luY0ZpbGVTeXN0ZW0tPmRpcmVjdG9yeUV4aXN0cyhhYnNvbHV0ZVBhdGgsIGNhbGxi
YWNrcy5yZWxlYXNlKCkpOworICAgIHJldHVybiB0cnVlOworfQorCitib29sIERPTUZpbGVTeXN0
ZW1CYXNlOjpyZWFkRGlyZWN0b3J5KFBhc3NSZWZQdHI8RGlyZWN0b3J5UmVhZGVyQmFzZT4gcmVh
ZGVyLCBjb25zdCBTdHJpbmcmIHBhdGgsIFBhc3NSZWZQdHI8RW50cmllc0NhbGxiYWNrPiBzdWNj
ZXNzQ2FsbGJhY2ssIFBhc3NSZWZQdHI8RXJyb3JDYWxsYmFjaz4gZXJyb3JDYWxsYmFjaykKK3sK
KyAgICBBU1NFUlQoRE9NRmlsZVBhdGg6OmlzQWJzb2x1dGUocGF0aCkpOworICAgIG1fYXN5bmNG
aWxlU3lzdGVtLT5yZWFkRGlyZWN0b3J5KHBhdGgsIEVudHJpZXNDYWxsYmFja3M6OmNyZWF0ZShz
dWNjZXNzQ2FsbGJhY2ssIGVycm9yQ2FsbGJhY2ssIHJlYWRlciwgcGF0aCkpOworICAgIHJldHVy
biB0cnVlOworfQorCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKKyNlbmRpZiAvLyBFTkFCTEUo
RklMRV9TWVNURU0pCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2ZpbGVzeXN0ZW0vRE9N
RmlsZVN5c3RlbUJhc2UuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2Zp
bGVzeXN0ZW0vRE9NRmlsZVN5c3RlbUJhc2UuaAkocmV2aXNpb24gMTEwNzI2KQkoZnJvbSBTb3Vy
Y2UvV2ViQ29yZS9maWxlYXBpL0RPTUZpbGVTeXN0ZW1CYXNlLmg6MTEwNzI2KQorKysgU291cmNl
L1dlYkNvcmUvTW9kdWxlcy9maWxlc3lzdGVtL0RPTUZpbGVTeXN0ZW1CYXNlLmgJKHdvcmtpbmcg
Y29weSkKQEAgLTAsMCArMSw5NCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMCBHb29nbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2Ug
aW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0
aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25z
IGFyZQorICogbWV0OgorICoKKyAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29k
ZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAgICAgKiBSZWRp
c3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCisgKiBj
b3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyCisgKiBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJp
YWxzIHByb3ZpZGVkIHdpdGggdGhlCisgKiBkaXN0cmlidXRpb24uCisgKiAgICAgKiBOZWl0aGVy
IHRoZSBuYW1lIG9mIEdvb2dsZSBJbmMuIG5vciB0aGUgbmFtZXMgb2YgaXRzCisgKiBjb250cmli
dXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQg
ZnJvbQorICogdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVy
bWlzc2lvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklH
SFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCisgKiAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBP
UiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywg
VEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9S
CisgKiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hB
TEwgVEhFIENPUFlSSUdIVAorICogT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1Ig
QU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCisgKiBTUEVDSUFMLCBFWEVNUExBUlks
IE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVE
IFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9G
IFVTRSwKKyAqIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9X
RVZFUiBDQVVTRUQgQU5EIE9OIEFOWQorICogVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJ
TiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdM
SUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisg
KiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9G
IFNVQ0ggREFNQUdFLgorICovCisKKyNpZm5kZWYgRE9NRmlsZVN5c3RlbUJhc2VfaAorI2RlZmlu
ZSBET01GaWxlU3lzdGVtQmFzZV9oCisKKyNpZiBFTkFCTEUoRklMRV9TWVNURU0pCisKKyNpbmNs
dWRlICJBc3luY0ZpbGVTeXN0ZW0uaCIKKyNpbmNsdWRlICJXZWJLaXRGbGFncy5oIgorI2luY2x1
ZGUgIlBsYXRmb3JtU3RyaW5nLmgiCisjaW5jbHVkZSA8d3RmL1Bhc3NSZWZQdHIuaD4KKyNpbmNs
dWRlIDx3dGYvUmVmQ291bnRlZC5oPgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK2NsYXNzIERp
cmVjdG9yeUVudHJ5OworY2xhc3MgRGlyZWN0b3J5UmVhZGVyQmFzZTsKK2NsYXNzIEVudHJpZXND
YWxsYmFjazsKK2NsYXNzIEVudHJ5QmFzZTsKK2NsYXNzIEVudHJ5Q2FsbGJhY2s7CitjbGFzcyBF
cnJvckNhbGxiYWNrOworY2xhc3MgS1VSTDsKK2NsYXNzIE1ldGFkYXRhQ2FsbGJhY2s7CitjbGFz
cyBTY3JpcHRFeGVjdXRpb25Db250ZXh0OworY2xhc3MgU2VjdXJpdHlPcmlnaW47CitjbGFzcyBW
b2lkQ2FsbGJhY2s7CisKKy8vIEEgY29tbW9uIGJhc2UgY2xhc3MgZm9yIERPTUZpbGVTeXN0ZW0g
YW5kIERPTUZpbGVTeXN0ZW1TeW5jLgorY2xhc3MgRE9NRmlsZVN5c3RlbUJhc2UgOiBwdWJsaWMg
UmVmQ291bnRlZDxET01GaWxlU3lzdGVtQmFzZT4geworcHVibGljOgorICAgIHN0YXRpYyBQYXNz
UmVmUHRyPERPTUZpbGVTeXN0ZW1CYXNlPiBjcmVhdGUoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCog
Y29udGV4dCwgY29uc3QgU3RyaW5nJiBuYW1lLCBQYXNzT3duUHRyPEFzeW5jRmlsZVN5c3RlbT4g
YXN5bmNGaWxlU3lzdGVtKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBET01G
aWxlU3lzdGVtQmFzZShjb250ZXh0LCBuYW1lLCBhc3luY0ZpbGVTeXN0ZW0pKTsKKyAgICB9Cisg
ICAgdmlydHVhbCB+RE9NRmlsZVN5c3RlbUJhc2UoKTsKKworICAgIGNvbnN0IFN0cmluZyYgbmFt
ZSgpIGNvbnN0IHsgcmV0dXJuIG1fbmFtZTsgfQorICAgIEFzeW5jRmlsZVN5c3RlbSogYXN5bmNG
aWxlU3lzdGVtKCkgY29uc3QgeyByZXR1cm4gbV9hc3luY0ZpbGVTeXN0ZW0uZ2V0KCk7IH0KKyAg
ICBTZWN1cml0eU9yaWdpbiogc2VjdXJpdHlPcmlnaW4oKSBjb25zdDsKKworICAgIC8vIEFjdHVh
bCBGaWxlU3lzdGVtIEFQSSBpbXBsZW1lbnRhdGlvbnMuICBBbGwgdGhlIHZhbGlkaXR5IGNoZWNr
cyBvbiB2aXJ0dWFsIHBhdGhzIGFyZSBkb25lIGF0IHRoaXMgbGV2ZWwuCisgICAgLy8gVGhleSBy
ZXR1cm4gZmFsc2UgZm9yIGltbWVkaWF0ZSBlcnJvcnMgdGhhdCBkb24ndCBpbnZvbHZlIGxvd2Vy
IEFzeW5jRmlsZVN5c3RlbSBsYXllciAoZS5nLiBmb3IgbmFtZSB2YWxpZGF0aW9uIGVycm9ycyku
ICBPdGhlcndpc2UgdGhleSByZXR1cm4gdHJ1ZSAoYnV0IGxhdGVyIG1heSBjYWxsIGJhY2sgd2l0
aCBhbiBydW50aW1lIGVycm9yKS4KKyAgICBib29sIGdldE1ldGFkYXRhKGNvbnN0IEVudHJ5QmFz
ZSosIFBhc3NSZWZQdHI8TWV0YWRhdGFDYWxsYmFjaz4sIFBhc3NSZWZQdHI8RXJyb3JDYWxsYmFj
az4pOworICAgIGJvb2wgbW92ZShjb25zdCBFbnRyeUJhc2UqIHNvdXJjZSwgRW50cnlCYXNlKiBw
YXJlbnQsIGNvbnN0IFN0cmluZyYgbmFtZSwgUGFzc1JlZlB0cjxFbnRyeUNhbGxiYWNrPiwgUGFz
c1JlZlB0cjxFcnJvckNhbGxiYWNrPik7CisgICAgYm9vbCBjb3B5KGNvbnN0IEVudHJ5QmFzZSog
c291cmNlLCBFbnRyeUJhc2UqIHBhcmVudCwgY29uc3QgU3RyaW5nJiBuYW1lLCBQYXNzUmVmUHRy
PEVudHJ5Q2FsbGJhY2s+LCBQYXNzUmVmUHRyPEVycm9yQ2FsbGJhY2s+KTsKKyAgICBib29sIHJl
bW92ZShjb25zdCBFbnRyeUJhc2UqLCBQYXNzUmVmUHRyPFZvaWRDYWxsYmFjaz4sIFBhc3NSZWZQ
dHI8RXJyb3JDYWxsYmFjaz4pOworICAgIGJvb2wgcmVtb3ZlUmVjdXJzaXZlbHkoY29uc3QgRW50
cnlCYXNlKiwgUGFzc1JlZlB0cjxWb2lkQ2FsbGJhY2s+LCBQYXNzUmVmUHRyPEVycm9yQ2FsbGJh
Y2s+KTsKKyAgICBib29sIGdldFBhcmVudChjb25zdCBFbnRyeUJhc2UqLCBQYXNzUmVmUHRyPEVu
dHJ5Q2FsbGJhY2s+LCBQYXNzUmVmUHRyPEVycm9yQ2FsbGJhY2s+KTsKKyAgICBib29sIGdldEZp
bGUoY29uc3QgRW50cnlCYXNlKiwgY29uc3QgU3RyaW5nJiBwYXRoLCBQYXNzUmVmUHRyPFdlYktp
dEZsYWdzPiwgUGFzc1JlZlB0cjxFbnRyeUNhbGxiYWNrPiwgUGFzc1JlZlB0cjxFcnJvckNhbGxi
YWNrPik7CisgICAgYm9vbCBnZXREaXJlY3RvcnkoY29uc3QgRW50cnlCYXNlKiwgY29uc3QgU3Ry
aW5nJiBwYXRoLCBQYXNzUmVmUHRyPFdlYktpdEZsYWdzPiwgUGFzc1JlZlB0cjxFbnRyeUNhbGxi
YWNrPiwgUGFzc1JlZlB0cjxFcnJvckNhbGxiYWNrPik7CisgICAgYm9vbCByZWFkRGlyZWN0b3J5
KFBhc3NSZWZQdHI8RGlyZWN0b3J5UmVhZGVyQmFzZT4sIGNvbnN0IFN0cmluZyYgcGF0aCwgUGFz
c1JlZlB0cjxFbnRyaWVzQ2FsbGJhY2s+LCBQYXNzUmVmUHRyPEVycm9yQ2FsbGJhY2s+KTsKKwor
cHJvdGVjdGVkOgorICAgIERPTUZpbGVTeXN0ZW1CYXNlKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQq
LCBjb25zdCBTdHJpbmcmIG5hbWUsIFBhc3NPd25QdHI8QXN5bmNGaWxlU3lzdGVtPik7CisgICAg
ZnJpZW5kIGNsYXNzIERPTUZpbGVTeXN0ZW1TeW5jOworCisgICAgU2NyaXB0RXhlY3V0aW9uQ29u
dGV4dCogbV9jb250ZXh0OworICAgIFN0cmluZyBtX25hbWU7CisgICAgbXV0YWJsZSBPd25QdHI8
QXN5bmNGaWxlU3lzdGVtPiBtX2FzeW5jRmlsZVN5c3RlbTsKK307CisKK30gLy8gbmFtZXNwYWNl
IFdlYkNvcmUKKworI2VuZGlmIC8vIEVOQUJMRShGSUxFX1NZU1RFTSkKKworI2VuZGlmIC8vIERP
TUZpbGVTeXN0ZW1CYXNlX2gKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvZmlsZXN5c3Rl
bS9ET01GaWxlU3lzdGVtU3luYy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvTW9k
dWxlcy9maWxlc3lzdGVtL0RPTUZpbGVTeXN0ZW1TeW5jLmNwcAkocmV2aXNpb24gMTEwNzI2KQko
ZnJvbSBTb3VyY2UvV2ViQ29yZS9maWxlYXBpL0RPTUZpbGVTeXN0ZW1TeW5jLmNwcDoxMTA3MjYp
CisrKyBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2ZpbGVzeXN0ZW0vRE9NRmlsZVN5c3RlbVN5bmMu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMjQzIEBACisvKgorICogQ29weXJpZ2h0IChD
KSAyMDEwIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmli
dXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0
CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93
aW5nIGNvbmRpdGlvbnMgYXJlCisgKiBtZXQ6CisgKgorICogICAgICogUmVkaXN0cmlidXRpb25z
IG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4K
KyAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0
aGUgYWJvdmUKKyAqIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIKKyAqIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9v
ciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKKyAqIGRpc3RyaWJ1dGlvbi4KKyAq
ICAgICAqIE5laXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xlIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBp
dHMKKyAqIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJv
ZHVjdHMgZGVyaXZlZCBmcm9tCisgKiB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJp
b3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQg
QlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKKyAqICJBUyBJUyIgQU5E
IEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCisg
KiBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBB
TkQgRklUTkVTUyBGT1IKKyAqIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJ
TiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCisgKiBPV05FUiBPUiBDT05UUklCVVRPUlMg
QkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKKyAqIFNQRUNJ
QUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBO
T1QKKyAqIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VS
VklDRVM7IExPU1MgT0YgVVNFLAorICogREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5U
RVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCisgKiBUSEVPUlkgT0YgTElBQklM
SVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAo
SU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VU
IE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUg
UE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgor
I2luY2x1ZGUgIkRPTUZpbGVTeXN0ZW1TeW5jLmgiCisKKyNpZiBFTkFCTEUoRklMRV9TWVNURU0p
CisKKyNpbmNsdWRlICJBc3luY0ZpbGVTeXN0ZW0uaCIKKyNpbmNsdWRlICJBc3luY0ZpbGVXcml0
ZXIuaCIKKyNpbmNsdWRlICJET01GaWxlUGF0aC5oIgorI2luY2x1ZGUgIkRpcmVjdG9yeUVudHJ5
U3luYy5oIgorI2luY2x1ZGUgIkVycm9yQ2FsbGJhY2suaCIKKyNpbmNsdWRlICJGaWxlLmgiCisj
aW5jbHVkZSAiRmlsZUVudHJ5U3luYy5oIgorI2luY2x1ZGUgIkZpbGVFcnJvci5oIgorI2luY2x1
ZGUgIkZpbGVFeGNlcHRpb24uaCIKKyNpbmNsdWRlICJGaWxlTWV0YWRhdGEuaCIKKyNpbmNsdWRl
ICJGaWxlU3lzdGVtQ2FsbGJhY2tzLmgiCisjaW5jbHVkZSAiRmlsZVdyaXRlckJhc2VDYWxsYmFj
ay5oIgorI2luY2x1ZGUgIkZpbGVXcml0ZXJTeW5jLmgiCisKK25hbWVzcGFjZSBXZWJDb3JlIHsK
KworY2xhc3MgRmlsZVdyaXRlckJhc2U7CisKK1Bhc3NSZWZQdHI8RE9NRmlsZVN5c3RlbVN5bmM+
IERPTUZpbGVTeXN0ZW1TeW5jOjpjcmVhdGUoRE9NRmlsZVN5c3RlbUJhc2UqIGZpbGVTeXN0ZW0p
Cit7CisgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBET01GaWxlU3lzdGVtU3luYyhmaWxlU3lzdGVt
LT5tX2NvbnRleHQsIGZpbGVTeXN0ZW0tPm1fbmFtZSwgZmlsZVN5c3RlbS0+bV9hc3luY0ZpbGVT
eXN0ZW0ucmVsZWFzZSgpKSk7Cit9CisKK0RPTUZpbGVTeXN0ZW1TeW5jOjpET01GaWxlU3lzdGVt
U3luYyhTY3JpcHRFeGVjdXRpb25Db250ZXh0KiBjb250ZXh0LCBjb25zdCBTdHJpbmcmIG5hbWUs
IFBhc3NPd25QdHI8QXN5bmNGaWxlU3lzdGVtPiBhc3luY0ZpbGVTeXN0ZW0pCisgICAgOiBET01G
aWxlU3lzdGVtQmFzZShjb250ZXh0LCBuYW1lLCBhc3luY0ZpbGVTeXN0ZW0pCit7Cit9CisKK0RP
TUZpbGVTeXN0ZW1TeW5jOjp+RE9NRmlsZVN5c3RlbVN5bmMoKQoreworfQorCitQYXNzUmVmUHRy
PERpcmVjdG9yeUVudHJ5U3luYz4gRE9NRmlsZVN5c3RlbVN5bmM6OnJvb3QoKQoreworICAgIHJl
dHVybiBEaXJlY3RvcnlFbnRyeVN5bmM6OmNyZWF0ZSh0aGlzLCBET01GaWxlUGF0aDo6cm9vdCk7
Cit9CisKK25hbWVzcGFjZSB7CisKK2NsYXNzIENyZWF0ZUZpbGVIZWxwZXIgOiBwdWJsaWMgQXN5
bmNGaWxlU3lzdGVtQ2FsbGJhY2tzIHsKK3B1YmxpYzoKKyAgICBjbGFzcyBDcmVhdGVGaWxlUmVz
dWx0IDogcHVibGljIFJlZkNvdW50ZWQ8Q3JlYXRlRmlsZVJlc3VsdD4geworICAgICAgcHVibGlj
OgorICAgICAgICBzdGF0aWMgUGFzc1JlZlB0cjxDcmVhdGVGaWxlUmVzdWx0PiBjcmVhdGUoKQor
ICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4gYWRvcHRSZWYobmV3IENyZWF0ZUZpbGVSZXN1
bHQoKSk7CisgICAgICAgIH0KKworICAgICAgICBib29sIG1fZmFpbGVkOworICAgICAgICBpbnQg
bV9jb2RlOworICAgICAgICBSZWZQdHI8RmlsZT4gbV9maWxlOworCisgICAgICBwcml2YXRlOgor
ICAgICAgICBDcmVhdGVGaWxlUmVzdWx0KCkKKyAgICAgICAgICAgIDogbV9mYWlsZWQoZmFsc2Up
CisgICAgICAgICAgICAsIG1fY29kZSgwKQorICAgICAgICB7CisgICAgICAgIH0KKworICAgICAg
ICB+Q3JlYXRlRmlsZVJlc3VsdCgpCisgICAgICAgIHsKKyAgICAgICAgfQorICAgICAgICBmcmll
bmQgY2xhc3MgV1RGOjpSZWZDb3VudGVkPENyZWF0ZUZpbGVSZXN1bHQ+OworICAgIH07CisKKyAg
ICBzdGF0aWMgUGFzc093blB0cjxDcmVhdGVGaWxlSGVscGVyPiBjcmVhdGUoUGFzc1JlZlB0cjxD
cmVhdGVGaWxlUmVzdWx0PiByZXN1bHQsIGNvbnN0IFN0cmluZyYgbmFtZSkKKyAgICB7CisgICAg
ICAgIHJldHVybiBhZG9wdFB0cihuZXcgQ3JlYXRlRmlsZUhlbHBlcihyZXN1bHQsIG5hbWUpKTsK
KyAgICB9CisKKyAgICB2aXJ0dWFsIHZvaWQgZGlkRmFpbChpbnQgY29kZSkKKyAgICB7CisgICAg
ICAgIG1fcmVzdWx0LT5tX2ZhaWxlZCA9IHRydWU7CisgICAgICAgIG1fcmVzdWx0LT5tX2NvZGUg
PSBjb2RlOworICAgIH0KKworICAgIHZpcnR1YWwgfkNyZWF0ZUZpbGVIZWxwZXIoKQorICAgIHsK
KyAgICB9CisKKyAgICB2b2lkIGRpZFJlYWRNZXRhZGF0YShjb25zdCBGaWxlTWV0YWRhdGEmIG1l
dGFkYXRhKQorICAgIHsKKyAgICAgICAgbV9yZXN1bHQtPm1fZmlsZSA9IEZpbGU6OmNyZWF0ZVdp
dGhOYW1lKG1ldGFkYXRhLnBsYXRmb3JtUGF0aCwgbV9uYW1lKTsKKyAgICB9Citwcml2YXRlOgor
ICAgIENyZWF0ZUZpbGVIZWxwZXIoUGFzc1JlZlB0cjxDcmVhdGVGaWxlUmVzdWx0PiByZXN1bHQs
IGNvbnN0IFN0cmluZyYgbmFtZSkKKyAgICAgICAgOiBtX3Jlc3VsdChyZXN1bHQpCisgICAgICAg
ICwgbV9uYW1lKG5hbWUpCisgICAgeworICAgIH0KKworICAgIFJlZlB0cjxDcmVhdGVGaWxlUmVz
dWx0PiBtX3Jlc3VsdDsKKyAgICBTdHJpbmcgbV9uYW1lOworfTsKKworfSAvLyBuYW1lc3BhY2UK
KworUGFzc1JlZlB0cjxGaWxlPiBET01GaWxlU3lzdGVtU3luYzo6Y3JlYXRlRmlsZShjb25zdCBG
aWxlRW50cnlTeW5jKiBmaWxlRW50cnksIEV4Y2VwdGlvbkNvZGUmIGVjKQoreworICAgIGVjID0g
MDsKKyAgICBSZWZQdHI8Q3JlYXRlRmlsZUhlbHBlcjo6Q3JlYXRlRmlsZVJlc3VsdD4gcmVzdWx0
KENyZWF0ZUZpbGVIZWxwZXI6OkNyZWF0ZUZpbGVSZXN1bHQ6OmNyZWF0ZSgpKTsKKyAgICBtX2Fz
eW5jRmlsZVN5c3RlbS0+Y3JlYXRlU25hcHNob3RGaWxlQW5kUmVhZE1ldGFkYXRhKGZpbGVFbnRy
eS0+ZnVsbFBhdGgoKSwgQ3JlYXRlRmlsZUhlbHBlcjo6Y3JlYXRlKHJlc3VsdCwgZmlsZUVudHJ5
LT5uYW1lKCkpKTsKKyAgICBpZiAoIW1fYXN5bmNGaWxlU3lzdGVtLT53YWl0Rm9yT3BlcmF0aW9u
VG9Db21wbGV0ZSgpKSB7CisgICAgICAgIGVjID0gRmlsZUV4Y2VwdGlvbjo6QUJPUlRfRVJSOwor
ICAgICAgICByZXR1cm4gMDsKKyAgICB9CisgICAgaWYgKHJlc3VsdC0+bV9mYWlsZWQpIHsKKyAg
ICAgICAgZWMgPSByZXN1bHQtPm1fY29kZTsKKyAgICAgICAgcmV0dXJuIDA7CisgICAgfQorICAg
IHJldHVybiByZXN1bHQtPm1fZmlsZTsKK30KKworbmFtZXNwYWNlIHsKKworY2xhc3MgUmVjZWl2
ZUZpbGVXcml0ZXJDYWxsYmFjayA6IHB1YmxpYyBGaWxlV3JpdGVyQmFzZUNhbGxiYWNrIHsKK3B1
YmxpYzoKKyAgICBzdGF0aWMgUGFzc1JlZlB0cjxSZWNlaXZlRmlsZVdyaXRlckNhbGxiYWNrPiBj
cmVhdGUoKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBSZWNlaXZlRmlsZVdy
aXRlckNhbGxiYWNrKCkpOworICAgIH0KKworICAgIGJvb2wgaGFuZGxlRXZlbnQoRmlsZVdyaXRl
ckJhc2UqIGZpbGVXcml0ZXJCYXNlKQorICAgIHsKKyNpZm5kZWYgTkRFQlVHCisgICAgICAgIG1f
ZmlsZVdyaXRlckJhc2UgPSBmaWxlV3JpdGVyQmFzZTsKKyNlbHNlCisgICAgICAgIEFTU0VSVF9V
TlVTRUQoZmlsZVdyaXRlckJhc2UsIGZpbGVXcml0ZXJCYXNlKTsKKyNlbmRpZgorICAgICAgICBy
ZXR1cm4gdHJ1ZTsKKyAgICB9CisKKyNpZm5kZWYgTkRFQlVHCisgICAgRmlsZVdyaXRlckJhc2Uq
IGZpbGVXcml0ZXJCYXNlKCkKKyAgICB7CisgICAgICAgIHJldHVybiBtX2ZpbGVXcml0ZXJCYXNl
OworICAgIH0KKyNlbmRpZgorCitwcml2YXRlOgorICAgIFJlY2VpdmVGaWxlV3JpdGVyQ2FsbGJh
Y2soKQorI2lmbmRlZiBOREVCVUcKKyAgICAgICAgOiBtX2ZpbGVXcml0ZXJCYXNlKDApCisjZW5k
aWYKKyAgICB7CisgICAgfQorCisjaWZuZGVmIE5ERUJVRworICAgIEZpbGVXcml0ZXJCYXNlKiBt
X2ZpbGVXcml0ZXJCYXNlOworI2VuZGlmCit9OworCitjbGFzcyBMb2NhbEVycm9yQ2FsbGJhY2sg
OiBwdWJsaWMgRXJyb3JDYWxsYmFjayB7CitwdWJsaWM6CisgICAgc3RhdGljIFBhc3NSZWZQdHI8
TG9jYWxFcnJvckNhbGxiYWNrPiBjcmVhdGUoKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGFkb3B0
UmVmKG5ldyBMb2NhbEVycm9yQ2FsbGJhY2soKSk7CisgICAgfQorCisgICAgYm9vbCBoYW5kbGVF
dmVudChGaWxlRXJyb3IqIGVycm9yKQorICAgIHsKKyAgICAgICAgbV9lcnJvciA9IGVycm9yOwor
ICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CisKKyAgICBGaWxlRXJyb3IqIGVycm9yKCkKKyAg
ICB7CisgICAgICAgIHJldHVybiBtX2Vycm9yLmdldCgpOworICAgIH0KKworcHJpdmF0ZToKKyAg
ICBMb2NhbEVycm9yQ2FsbGJhY2soKQorICAgIHsKKyAgICB9CisgICAgUmVmUHRyPEZpbGVFcnJv
cj4gbV9lcnJvcjsKK307CisKK30KKworUGFzc1JlZlB0cjxGaWxlV3JpdGVyU3luYz4gRE9NRmls
ZVN5c3RlbVN5bmM6OmNyZWF0ZVdyaXRlcihjb25zdCBGaWxlRW50cnlTeW5jKiBmaWxlRW50cnks
IEV4Y2VwdGlvbkNvZGUmIGVjKQoreworICAgIEFTU0VSVChmaWxlRW50cnkpOworICAgIGVjID0g
MDsKKworCisgICAgUmVmUHRyPEZpbGVXcml0ZXJTeW5jPiBmaWxlV3JpdGVyID0gRmlsZVdyaXRl
clN5bmM6OmNyZWF0ZSgpOworICAgIFJlZlB0cjxSZWNlaXZlRmlsZVdyaXRlckNhbGxiYWNrPiBz
dWNjZXNzQ2FsbGJhY2sgPSBSZWNlaXZlRmlsZVdyaXRlckNhbGxiYWNrOjpjcmVhdGUoKTsKKyAg
ICBSZWZQdHI8TG9jYWxFcnJvckNhbGxiYWNrPiBlcnJvckNhbGxiYWNrID0gTG9jYWxFcnJvckNh
bGxiYWNrOjpjcmVhdGUoKTsKKworICAgIE93blB0cjxGaWxlV3JpdGVyQmFzZUNhbGxiYWNrcz4g
Y2FsbGJhY2tzID0gRmlsZVdyaXRlckJhc2VDYWxsYmFja3M6OmNyZWF0ZShmaWxlV3JpdGVyLCBz
dWNjZXNzQ2FsbGJhY2ssIGVycm9yQ2FsbGJhY2spOworICAgIG1fYXN5bmNGaWxlU3lzdGVtLT5j
cmVhdGVXcml0ZXIoZmlsZVdyaXRlci5nZXQoKSwgZmlsZUVudHJ5LT5mdWxsUGF0aCgpLCBjYWxs
YmFja3MucmVsZWFzZSgpKTsKKyAgICBpZiAoIW1fYXN5bmNGaWxlU3lzdGVtLT53YWl0Rm9yT3Bl
cmF0aW9uVG9Db21wbGV0ZSgpKSB7CisgICAgICAgIGVjID0gRmlsZUV4Y2VwdGlvbjo6QUJPUlRf
RVJSOworICAgICAgICByZXR1cm4gMDsKKyAgICB9CisgICAgaWYgKGVycm9yQ2FsbGJhY2stPmVy
cm9yKCkpIHsKKyAgICAgICAgQVNTRVJUKCFzdWNjZXNzQ2FsbGJhY2stPmZpbGVXcml0ZXJCYXNl
KCkpOworICAgICAgICBlYyA9IEZpbGVFeGNlcHRpb246OkVycm9yQ29kZVRvRXhjZXB0aW9uQ29k
ZShlcnJvckNhbGxiYWNrLT5lcnJvcigpLT5jb2RlKCkpOworICAgICAgICByZXR1cm4gMDsKKyAg
ICB9CisgICAgQVNTRVJUKHN1Y2Nlc3NDYWxsYmFjay0+ZmlsZVdyaXRlckJhc2UoKSk7CisgICAg
QVNTRVJUKHN0YXRpY19jYXN0PEZpbGVXcml0ZXJTeW5jKj4oc3VjY2Vzc0NhbGxiYWNrLT5maWxl
V3JpdGVyQmFzZSgpKSA9PSBmaWxlV3JpdGVyLmdldCgpKTsKKyAgICByZXR1cm4gZmlsZVdyaXRl
cjsKK30KKworfQorCisjZW5kaWYgLy8gRU5BQkxFKEZJTEVfU1lTVEVNKQpJbmRleDogU291cmNl
L1dlYkNvcmUvTW9kdWxlcy9maWxlc3lzdGVtL0RPTUZpbGVTeXN0ZW1TeW5jLmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL1dlYkNvcmUvTW9kdWxlcy9maWxlc3lzdGVtL0RPTUZpbGVTeXN0ZW1TeW5j
LmgJKHJldmlzaW9uIDExMDcyNikJKGZyb20gU291cmNlL1dlYkNvcmUvZmlsZWFwaS9ET01GaWxl
U3lzdGVtU3luYy5oOjExMDcyNikKKysrIFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvZmlsZXN5c3Rl
bS9ET01GaWxlU3lzdGVtU3luYy5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNzEgQEAKKy8q
CisgKiBDb3B5cmlnaHQgKEMpIDIwMTAgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
KyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1z
LCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRl
ZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUKKyAqIG1ldDoKKyAqCisgKiAgICAg
KiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNv
cHlyaWdodAorICogbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyLgorICogICAgICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3Jt
IG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQorICogY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lcgorICogaW4gdGhlIGRv
Y3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQorICog
ZGlzdHJpYnV0aW9uLgorICogICAgICogTmVpdGhlciB0aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBu
b3IgdGhlIG5hbWVzIG9mIGl0cworICogY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9y
c2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20KKyAqIHRoaXMgc29mdHdhcmUgd2l0
aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogVEhJUyBTT0ZU
V0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9S
UworICogIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNM
VURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0Yg
TUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgorICogQSBQQVJUSUNVTEFSIFBVUlBPU0Ug
QVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKKyAqIE9XTkVS
IE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJ
REVOVEFMLAorICogU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMg
KElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJ
VFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCisgKiBEQVRBLCBPUiBQUk9GSVRT
OyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKKyAq
IFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJ
VFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJ
TkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJ
RiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaWZu
ZGVmIERPTUZpbGVTeXN0ZW1TeW5jX2gKKyNkZWZpbmUgRE9NRmlsZVN5c3RlbVN5bmNfaAorCisj
aWYgRU5BQkxFKEZJTEVfU1lTVEVNKQorCisjaW5jbHVkZSAiRE9NRmlsZVN5c3RlbUJhc2UuaCIK
KworbmFtZXNwYWNlIFdlYkNvcmUgeworCitjbGFzcyBEaXJlY3RvcnlFbnRyeVN5bmM7CitjbGFz
cyBGaWxlOworY2xhc3MgRmlsZUVudHJ5U3luYzsKK2NsYXNzIEZpbGVXcml0ZXJTeW5jOworCit0
eXBlZGVmIGludCBFeGNlcHRpb25Db2RlOworCitjbGFzcyBET01GaWxlU3lzdGVtU3luYyA6IHB1
YmxpYyBET01GaWxlU3lzdGVtQmFzZSB7CitwdWJsaWM6CisgICAgc3RhdGljIFBhc3NSZWZQdHI8
RE9NRmlsZVN5c3RlbVN5bmM+IGNyZWF0ZShTY3JpcHRFeGVjdXRpb25Db250ZXh0KiBjb250ZXh0
LCBjb25zdCBTdHJpbmcmIG5hbWUsIFBhc3NPd25QdHI8QXN5bmNGaWxlU3lzdGVtPiBhc3luY0Zp
bGVTeXN0ZW0pCisgICAgeworICAgICAgICByZXR1cm4gYWRvcHRSZWYobmV3IERPTUZpbGVTeXN0
ZW1TeW5jKGNvbnRleHQsIG5hbWUsIGFzeW5jRmlsZVN5c3RlbSkpOworICAgIH0KKworICAgIHN0
YXRpYyBQYXNzUmVmUHRyPERPTUZpbGVTeXN0ZW1TeW5jPiBjcmVhdGUoRE9NRmlsZVN5c3RlbUJh
c2UqKTsKKworICAgIHZpcnR1YWwgfkRPTUZpbGVTeXN0ZW1TeW5jKCk7CisKKyAgICBQYXNzUmVm
UHRyPERpcmVjdG9yeUVudHJ5U3luYz4gcm9vdCgpOworCisgICAgUGFzc1JlZlB0cjxGaWxlPiBj
cmVhdGVGaWxlKGNvbnN0IEZpbGVFbnRyeVN5bmMqLCBFeGNlcHRpb25Db2RlJik7CisgICAgUGFz
c1JlZlB0cjxGaWxlV3JpdGVyU3luYz4gY3JlYXRlV3JpdGVyKGNvbnN0IEZpbGVFbnRyeVN5bmMq
LCBFeGNlcHRpb25Db2RlJik7CisKK3ByaXZhdGU6CisgICAgRE9NRmlsZVN5c3RlbVN5bmMoU2Ny
aXB0RXhlY3V0aW9uQ29udGV4dCosIGNvbnN0IFN0cmluZyYgbmFtZSwgUGFzc093blB0cjxBc3lu
Y0ZpbGVTeXN0ZW0+KTsKK307CisKK30KKworI2VuZGlmIC8vIEVOQUJMRShGSUxFX1NZU1RFTSkK
KworI2VuZGlmIC8vIERPTUZpbGVTeXN0ZW1TeW5jX2gKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL01v
ZHVsZXMvZmlsZXN5c3RlbS9ET01GaWxlU3lzdGVtU3luYy5pZGwKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1dlYkNvcmUvTW9kdWxlcy9maWxlc3lzdGVtL0RPTUZpbGVTeXN0ZW1TeW5jLmlkbAkocmV2
aXNpb24gMTEwNzI2KQkoZnJvbSBTb3VyY2UvV2ViQ29yZS9maWxlYXBpL0RPTUZpbGVTeXN0ZW1T
eW5jLmlkbDoxMTA3MjYpCisrKyBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2ZpbGVzeXN0ZW0vRE9N
RmlsZVN5c3RlbVN5bmMuaWRsCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMzkgQEAKKy8qCisg
KiBDb3B5cmlnaHQgKEMpIDIwMTAgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAq
CisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3
aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0
aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUKKyAqIG1ldDoKKyAqCisgKiAgICAgKiBS
ZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHly
aWdodAorICogbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyLgorICogICAgICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11
c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQorICogY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lcgorICogaW4gdGhlIGRvY3Vt
ZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQorICogZGlz
dHJpYnV0aW9uLgorICogICAgICogTmVpdGhlciB0aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBub3Ig
dGhlIG5hbWVzIG9mIGl0cworICogY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ug
b3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20KKyAqIHRoaXMgc29mdHdhcmUgd2l0aG91
dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogVEhJUyBTT0ZUV0FS
RSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUwor
ICogIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJ
TkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVS
Q0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgorICogQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJF
IERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKKyAqIE9XTkVSIE9S
IENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVO
VEFMLAorICogU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElO
Q0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVU
RSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCisgKiBEQVRBLCBPUiBQUk9GSVRTOyBP
UiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKKyAqIFRI
RU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFks
IE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcg
SU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBB
RFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCittb2R1bGUg
c3RvcmFnZSB7CisgICAgaW50ZXJmYWNlIFsKKyAgICAgICAgQ29uZGl0aW9uYWw9RklMRV9TWVNU
RU0sCisgICAgICAgIEpTTm9TdGF0aWNUYWJsZXMKKyAgICBdIERPTUZpbGVTeXN0ZW1TeW5jIHsK
KyAgICAgICAgcmVhZG9ubHkgYXR0cmlidXRlIERPTVN0cmluZyBuYW1lOworICAgICAgICByZWFk
b25seSBhdHRyaWJ1dGUgRGlyZWN0b3J5RW50cnlTeW5jIHJvb3Q7CisgICAgfTsKK30KSW5kZXg6
IFNvdXJjZS9XZWJDb3JlL1dlYkNvcmUudmNwcm9qL1dlYkNvcmUudmNwcm9qCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9XZWJDb3JlL1dlYkNvcmUudmNwcm9qL1dlYkNvcmUudmNwcm9qCShyZXZpc2lv
biAxMTA3MjYpCisrKyBTb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnZjcHJvai9XZWJDb3JlLnZjcHJv
agkod29ya2luZyBjb3B5KQpAQCAtMjQwNTYsNiArMjQwNTYsMzggQEAKICAgICAgICAgICAgICAg
ICAgICAgICAgIDxGaWx0ZXIKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTmFtZT0i
ZmlsZXN5c3RlbSIKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPgorCQkJICAgICAg
ICA8RmlsZQorCQkJCSAgICAgICAgUmVsYXRpdmVQYXRoPSIuLlxmaWxlYXBpXERPTUZpbGVQYXRo
LmNwcCIKKwkJCQkgICAgICAgID4KKwkJCSAgICAgICAgPC9GaWxlPgorCQkJICAgICAgICA8Rmls
ZQorCQkJCSAgICAgICAgUmVsYXRpdmVQYXRoPSIuLlxmaWxlYXBpXERPTUZpbGVQYXRoLmgiCisJ
CQkJICAgICAgICA+CisJCQkgICAgICAgIDwvRmlsZT4KKwkJCSAgICAgICAgPEZpbGUKKwkJCQkg
ICAgICAgIFJlbGF0aXZlUGF0aD0iLi5cZmlsZWFwaVxET01GaWxlU3lzdGVtLmNwcCIKKwkJCQkg
ICAgICAgID4KKwkJCSAgICAgICAgPC9GaWxlPgorCQkJICAgICAgICA8RmlsZSAgICAgICAgCisJ
CQkJICAgICAgICBSZWxhdGl2ZVBhdGg9Ii4uXGZpbGVhcGlcRE9NRmlsZVN5c3RlbS5oIgorCQkJ
CT4KKwkJCSAgICAgICAgPC9GaWxlPgorCQkJICAgICAgICA8RmlsZQorCQkJCSAgICAgICAgUmVs
YXRpdmVQYXRoPSIuLlxmaWxlYXBpXERPTUZpbGVTeXN0ZW1CYXNlLmNwcCIKKwkJCQkgICAgICAg
ID4KKwkJCSAgICAgICAgPC9GaWxlPgorCQkJICAgICAgICA8RmlsZQorCQkJCSAgICAgICAgUmVs
YXRpdmVQYXRoPSIuLlxmaWxlYXBpXERPTUZpbGVTeXN0ZW1CYXNlLmgiCisJCQkJICAgICAgICA+
CisJCQkgICAgICAgIDwvRmlsZT4KKwkJCSAgICAgICAgPEZpbGUKKwkJCQkgICAgICAgIFJlbGF0
aXZlUGF0aD0iLi5cZmlsZWFwaVxET01GaWxlU3lzdGVtU3luYy5jcHAiCisJCQkJICAgICAgICA+
CisJCQkgICAgICAgIDwvRmlsZT4KKwkJCSAgICAgICAgPEZpbGUKKwkJCQkgICAgICAgIFJlbGF0
aXZlUGF0aD0iLi5cZmlsZWFwaVxET01GaWxlU3lzdGVtU3luYy5oIgorCQkJCSAgICAgICAgPgor
CQkJICAgICAgICA8L0ZpbGU+CiAgICAgICAgIAkJICAgICAgICA8RmlsZQogICAgICAgICAJCQkg
ICAgICAgIFJlbGF0aXZlUGF0aD0iLi5cTW9kdWxlc1xmaWxlc3lzdGVtXERpcmVjdG9yeUVudHJ5
LmNwcCIKIAkgICAgICAgIAkJICAgICAgICA+CkBAIC01Njg3NCwzOCArNTY5MDYsNiBAQAogCQkJ
CT4KIAkJCTwvRmlsZT4KIAkJCTxGaWxlCi0JCQkJUmVsYXRpdmVQYXRoPSIuLlxmaWxlYXBpXERP
TUZpbGVQYXRoLmNwcCIKLQkJCQk+Ci0JCQk8L0ZpbGU+Ci0JCQk8RmlsZQotCQkJCVJlbGF0aXZl
UGF0aD0iLi5cZmlsZWFwaVxET01GaWxlUGF0aC5oIgotCQkJCT4KLQkJCTwvRmlsZT4KLQkJCTxG
aWxlCi0JCQkJUmVsYXRpdmVQYXRoPSIuLlxmaWxlYXBpXERPTUZpbGVTeXN0ZW0uY3BwIgotCQkJ
CT4KLQkJCTwvRmlsZT4KLQkJCTxGaWxlCi0JCQkJUmVsYXRpdmVQYXRoPSIuLlxmaWxlYXBpXERP
TUZpbGVTeXN0ZW0uaCIKLQkJCQk+Ci0JCQk8L0ZpbGU+Ci0JCQk8RmlsZQotCQkJCVJlbGF0aXZl
UGF0aD0iLi5cZmlsZWFwaVxET01GaWxlU3lzdGVtQmFzZS5jcHAiCi0JCQkJPgotCQkJPC9GaWxl
PgotCQkJPEZpbGUKLQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXGZpbGVhcGlcRE9NRmlsZVN5c3RlbUJh
c2UuaCIKLQkJCQk+Ci0JCQk8L0ZpbGU+Ci0JCQk8RmlsZQotCQkJCVJlbGF0aXZlUGF0aD0iLi5c
ZmlsZWFwaVxET01GaWxlU3lzdGVtU3luYy5jcHAiCi0JCQkJPgotCQkJPC9GaWxlPgotCQkJPEZp
bGUKLQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXGZpbGVhcGlcRE9NRmlsZVN5c3RlbVN5bmMuaCIKLQkJ
CQk+Ci0JCQk8L0ZpbGU+Ci0JCQk8RmlsZQogCQkJCVJlbGF0aXZlUGF0aD0iLi5caHRtbFxET01G
b3JtRGF0YS5jcHAiCiAJCQkJPgogCQkJPC9GaWxlPgpJbmRleDogU291cmNlL1dlYkNvcmUvV2Vi
Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJD
b3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagkocmV2aXNpb24gMTEwNzI2KQor
KysgU291cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCSh3b3Jr
aW5nIGNvcHkpCkBAIC03MTEyLDcgKzcxMTIsNyBAQAogCQkxNDk5M0JFMzBCMkYyQjFDMDA1MDQ5
N0YgLyogRm9jdXNDb250cm9sbGVyLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSAzMDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7
IHBhdGggPSBGb2N1c0NvbnRyb2xsZXIuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owog
CQkxNDk5M0JFNDBCMkYyQjFDMDA1MDQ5N0YgLyogRm9jdXNDb250cm9sbGVyLmggKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gMzA7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBGb2N1c0NvbnRyb2xsZXIuaDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKIAkJMTRBOThFMDUxMzYzODZBMjAwQzlGRUQyIC8qIEJsb2IuaWRsICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZp
bGVUeXBlID0gdGV4dDsgbmFtZSA9IEJsb2IuaWRsOyBwYXRoID0gZmlsZWFwaS9CbG9iLmlkbDsg
c291cmNlVHJlZSA9IFNPVVJDRV9ST09UOyB9OwotCQkxNEJERjU5NzEzNjUzOTJDMDAxNDgzOTMg
LyogRE9NRmlsZVN5c3RlbS5pZGwgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVu
Y29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSB0ZXh0OyBuYW1lID0gRE9NRmlsZVN5c3Rl
bS5pZGw7IHBhdGggPSBmaWxlYXBpL0RPTUZpbGVTeXN0ZW0uaWRsOyBzb3VyY2VUcmVlID0gU09V
UkNFX1JPT1Q7IH07CisJCTE0QkRGNTk3MTM2NTM5MkMwMDE0ODM5MyAvKiBET01GaWxlU3lzdGVt
LmlkbCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0
S25vd25GaWxlVHlwZSA9IHRleHQ7IG5hbWUgPSBET01GaWxlU3lzdGVtLmlkbDsgcGF0aCA9IE1v
ZHVsZXMvZmlsZXN5c3RlbS9ET01GaWxlU3lzdGVtLmlkbDsgc291cmNlVHJlZSA9IFNPVVJDRV9S
T09UOyB9OwogCQkxNEJERjU5QTEzNjUzOTkxMDAxNDgzOTMgLyogRmlsZVJlYWRlci5pZGwgKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmls
ZVR5cGUgPSB0ZXh0OyBuYW1lID0gRmlsZVJlYWRlci5pZGw7IHBhdGggPSBmaWxlYXBpL0ZpbGVS
ZWFkZXIuaWRsOyBzb3VyY2VUcmVlID0gU09VUkNFX1JPT1Q7IH07CiAJCTE0QkRGNTlDMTM2NTM5
QkUwMDE0ODM5MyAvKiBGaWxlV3JpdGVyLmlkbCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHRleHQ7IG5hbWUgPSBGaWxl
V3JpdGVyLmlkbDsgcGF0aCA9IGZpbGVhcGkvRmlsZVdyaXRlci5pZGw7IHNvdXJjZVRyZWUgPSBT
T1VSQ0VfUk9PVDsgfTsKIAkJMTRDOUE1RTkwQjNEMTA1RjAwNUEwMjMyIC8qIFNldHRpbmdzLmNw
cCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSAzMDsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBTZXR0aW5ncy5jcHA7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC05Nzk3LDEwICs5Nzk3LDEwIEBACiAJCTg5M0M0
N0YxMTI0OEJEMzkwMDJCM0Q4NiAvKiBEaXJlY3RvcnlFbnRyeVN5bmMuaCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuYy5oOyBuYW1lID0gRGlyZWN0b3J5RW50cnlTeW5jLmg7IHBhdGggPSBNb2R1bGVz
L2ZpbGVzeXN0ZW0vRGlyZWN0b3J5RW50cnlTeW5jLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CiAJCTg5M0M0N0YyMTI0OEJEMzkwMDJCM0Q4NiAvKiBEaXJlY3RvcnlSZWFkZXJTeW5jLmNw
cCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFtZSA9IERpcmVjdG9yeVJlYWRlclN5
bmMuY3BwOyBwYXRoID0gTW9kdWxlcy9maWxlc3lzdGVtL0RpcmVjdG9yeVJlYWRlclN5bmMuY3Bw
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk4OTNDNDdGMzEyNDhCRDM5MDAyQjNEODYg
LyogRGlyZWN0b3J5UmVhZGVyU3luYy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZp
bGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUg
PSBEaXJlY3RvcnlSZWFkZXJTeW5jLmg7IHBhdGggPSBNb2R1bGVzL2ZpbGVzeXN0ZW0vRGlyZWN0
b3J5UmVhZGVyU3luYy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQk4OTNDNDdGNDEy
NDhCRDM5MDAyQjNEODYgLyogRE9NRmlsZVN5c3RlbUJhc2UuY3BwICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jcHAuY3BwOyBuYW1lID0gRE9NRmlsZVN5c3RlbUJhc2UuY3BwOyBwYXRoID0gZmlsZWFw
aS9ET01GaWxlU3lzdGVtQmFzZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCTg5
M0M0N0Y1MTI0OEJEMzkwMDJCM0Q4NiAvKiBET01GaWxlU3lzdGVtQmFzZS5oICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jLmg7IG5hbWUgPSBET01GaWxlU3lzdGVtQmFzZS5oOyBwYXRoID0gZmlsZWFw
aS9ET01GaWxlU3lzdGVtQmFzZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQk4OTND
NDdGNjEyNDhCRDM5MDAyQjNEODYgLyogRE9NRmlsZVN5c3RlbVN5bmMuY3BwICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jcHAuY3BwOyBuYW1lID0gRE9NRmlsZVN5c3RlbVN5bmMuY3BwOyBwYXRoID0g
ZmlsZWFwaS9ET01GaWxlU3lzdGVtU3luYy5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
Ci0JCTg5M0M0N0Y3MTI0OEJEMzkwMDJCM0Q4NiAvKiBET01GaWxlU3lzdGVtU3luYy5oICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBET01GaWxlU3lzdGVtU3luYy5oOyBwYXRoID0g
ZmlsZWFwaS9ET01GaWxlU3lzdGVtU3luYy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owor
CQk4OTNDNDdGNDEyNDhCRDM5MDAyQjNEODYgLyogRE9NRmlsZVN5c3RlbUJhc2UuY3BwICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBuYW1lID0gRE9NRmlsZVN5c3RlbUJhc2UuY3BwOyBw
YXRoID0gTW9kdWxlcy9maWxlc3lzdGVtL0RPTUZpbGVTeXN0ZW1CYXNlLmNwcDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKKwkJODkzQzQ3RjUxMjQ4QkQzOTAwMkIzRDg2IC8qIERPTUZpbGVT
eXN0ZW1CYXNlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
NDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IERPTUZpbGVTeXN0
ZW1CYXNlLmg7IHBhdGggPSBNb2R1bGVzL2ZpbGVzeXN0ZW0vRE9NRmlsZVN5c3RlbUJhc2UuaDsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJODkzQzQ3RjYxMjQ4QkQzOTAwMkIzRDg2IC8q
IERPTUZpbGVTeXN0ZW1TeW5jLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFt
ZSA9IERPTUZpbGVTeXN0ZW1TeW5jLmNwcDsgcGF0aCA9IE1vZHVsZXMvZmlsZXN5c3RlbS9ET01G
aWxlU3lzdGVtU3luYy5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTg5M0M0N0Y3
MTI0OEJEMzkwMDJCM0Q4NiAvKiBET01GaWxlU3lzdGVtU3luYy5oICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jLmg7IG5hbWUgPSBET01GaWxlU3lzdGVtU3luYy5oOyBwYXRoID0gTW9kdWxlcy9maWxl
c3lzdGVtL0RPTUZpbGVTeXN0ZW1TeW5jLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJ
CTg5M0M0N0Y4MTI0OEJEMzkwMDJCM0Q4NiAvKiBFbnRyeUFycmF5U3luYy5jcHAgKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSBFbnRyeUFycmF5U3luYy5jcHA7IHBhdGggPSBm
aWxlYXBpL0VudHJ5QXJyYXlTeW5jLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJ
ODkzQzQ3RjkxMjQ4QkQzOTAwMkIzRDg2IC8qIEVudHJ5QXJyYXlTeW5jLmggKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmMuaDsgbmFtZSA9IEVudHJ5QXJyYXlTeW5jLmg7IHBhdGggPSBmaWxlYXBpL0Vu
dHJ5QXJyYXlTeW5jLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTg5M0M0N0ZCMTI0
OEJEMzkwMDJCM0Q4NiAvKiBFbnRyeUJhc2UuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBu
YW1lID0gRW50cnlCYXNlLmg7IHBhdGggPSBmaWxlYXBpL0VudHJ5QmFzZS5oOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OwpAQCAtOTgyNiwxMCArOTgyNiwxMCBAQAogCQk4OTg3ODUzQTEyMkNB
MDY0MDAzQUFCREEgLyogRGlyZWN0b3J5RW50cnkuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5o
OyBuYW1lID0gRGlyZWN0b3J5RW50cnkuaDsgcGF0aCA9IE1vZHVsZXMvZmlsZXN5c3RlbS9EaXJl
Y3RvcnlFbnRyeS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk4OTg3ODUzQjEyMkNB
MDY0MDAzQUFCREEgLyogRGlyZWN0b3J5UmVhZGVyLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Y3BwLmNwcDsgbmFtZSA9IERpcmVjdG9yeVJlYWRlci5jcHA7IHBhdGggPSBNb2R1bGVzL2ZpbGVz
eXN0ZW0vRGlyZWN0b3J5UmVhZGVyLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJ
ODk4Nzg1M0MxMjJDQTA2NDAwM0FBQkRBIC8qIERpcmVjdG9yeVJlYWRlci5oICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jLmg7IG5hbWUgPSBEaXJlY3RvcnlSZWFkZXIuaDsgcGF0aCA9IE1vZHVsZXMv
ZmlsZXN5c3RlbS9EaXJlY3RvcnlSZWFkZXIuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
LQkJODk4Nzg1M0QxMjJDQTA2NDAwM0FBQkRBIC8qIERPTUZpbGVQYXRoLmNwcCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFtZSA9IERPTUZpbGVQYXRoLmNwcDsgcGF0aCA9IGZpbGVh
cGkvRE9NRmlsZVBhdGguY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQk4OTg3ODUz
RTEyMkNBMDY0MDAzQUFCREEgLyogRE9NRmlsZVBhdGguaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Yy5oOyBuYW1lID0gRE9NRmlsZVBhdGguaDsgcGF0aCA9IGZpbGVhcGkvRE9NRmlsZVBhdGguaDsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJODk4Nzg1M0YxMjJDQTA2NDAwM0FBQkRBIC8q
IERPTUZpbGVTeXN0ZW0uY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBuYW1lID0g
RE9NRmlsZVN5c3RlbS5jcHA7IHBhdGggPSBmaWxlYXBpL0RPTUZpbGVTeXN0ZW0uY3BwOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OwotCQk4OTg3ODU0MDEyMkNBMDY0MDAzQUFCREEgLyogRE9N
RmlsZVN5c3RlbS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9
IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBET01GaWxlU3lz
dGVtLmg7IHBhdGggPSBmaWxlYXBpL0RPTUZpbGVTeXN0ZW0uaDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKKwkJODk4Nzg1M0QxMjJDQTA2NDAwM0FBQkRBIC8qIERPTUZpbGVQYXRoLmNwcCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFtZSA9IERPTUZpbGVQYXRoLmNwcDsgcGF0
aCA9IE1vZHVsZXMvZmlsZXN5c3RlbS9ET01GaWxlUGF0aC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CisJCTg5ODc4NTNFMTIyQ0EwNjQwMDNBQUJEQSAvKiBET01GaWxlUGF0aC5oICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBET01GaWxlUGF0aC5oOyBwYXRoID0gTW9k
dWxlcy9maWxlc3lzdGVtL0RPTUZpbGVQYXRoLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CisJCTg5ODc4NTNGMTIyQ0EwNjQwMDNBQUJEQSAvKiBET01GaWxlU3lzdGVtLmNwcCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFtZSA9IERPTUZpbGVTeXN0ZW0uY3BwOyBwYXRoID0g
TW9kdWxlcy9maWxlc3lzdGVtL0RPTUZpbGVTeXN0ZW0uY3BwOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OworCQk4OTg3ODU0MDEyMkNBMDY0MDAzQUFCREEgLyogRE9NRmlsZVN5c3RlbS5oICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBET01GaWxlU3lzdGVtLmg7IHBhdGggPSBN
b2R1bGVzL2ZpbGVzeXN0ZW0vRE9NRmlsZVN5c3RlbS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OwogCQk4OTg3ODU0MTEyMkNBMDY0MDAzQUFCREEgLyogRW50cmllc0NhbGxiYWNrLmggKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IEVudHJpZXNDYWxsYmFjay5oOyBwYXRoID0g
ZmlsZWFwaS9FbnRyaWVzQ2FsbGJhY2suaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJ
ODk4Nzg1NDIxMjJDQTA2NDAwM0FBQkRBIC8qIEVudHJ5LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuY3BwLmNwcDsgbmFtZSA9IEVudHJ5LmNwcDsgcGF0aCA9IGZpbGVhcGkvRW50cnkuY3BwOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk4OTg3ODU0MzEyMkNBMDY0MDAzQUFCREEgLyog
RW50cnkuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gRW50cnkuaDsgcGF0aCA9
IGZpbGVhcGkvRW50cnkuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTEyOTA3LDcg
KzEyOTA3LDcgQEAKIAkJRTFBQjFFQUMxNEU5RTJGODAwNDQ5RTEzIC8qIERpcmVjdG9yeUVudHJ5
U3luYy5pZGwgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUg
PSB0ZXh0OyBuYW1lID0gRGlyZWN0b3J5RW50cnlTeW5jLmlkbDsgcGF0aCA9IE1vZHVsZXMvZmls
ZXN5c3RlbS9EaXJlY3RvcnlFbnRyeVN5bmMuaWRsOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OwogCQlFMUFCMUVBRDE0RTlFMzA1MDA0NDlFMTMgLyogRGlyZWN0b3J5UmVhZGVyLmlkbCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHRleHQ7IG5hbWUg
PSBEaXJlY3RvcnlSZWFkZXIuaWRsOyBwYXRoID0gTW9kdWxlcy9maWxlc3lzdGVtL0RpcmVjdG9y
eVJlYWRlci5pZGw7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUUxQUIxRUFFMTRFOUUz
MEIwMDQ0OUUxMyAvKiBEaXJlY3RvcnlSZWFkZXJTeW5jLmlkbCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHRleHQ7IG5hbWUgPSBEaXJlY3RvcnlSZWFk
ZXJTeW5jLmlkbDsgcGF0aCA9IE1vZHVsZXMvZmlsZXN5c3RlbS9EaXJlY3RvcnlSZWFkZXJTeW5j
LmlkbDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJRTFBQjFFQUYxNEU5RTMxNzAwNDQ5
RTEzIC8qIERPTUZpbGVTeXN0ZW1TeW5jLmlkbCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBsYXN0S25vd25GaWxlVHlwZSA9IHRleHQ7IG5hbWUgPSBET01GaWxlU3lzdGVtU3luYy5pZGw7
IHBhdGggPSBmaWxlYXBpL0RPTUZpbGVTeXN0ZW1TeW5jLmlkbDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKKwkJRTFBQjFFQUYxNEU5RTMxNzAwNDQ5RTEzIC8qIERPTUZpbGVTeXN0ZW1TeW5j
LmlkbCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHRl
eHQ7IG5hbWUgPSBET01GaWxlU3lzdGVtU3luYy5pZGw7IHBhdGggPSBNb2R1bGVzL2ZpbGVzeXN0
ZW0vRE9NRmlsZVN5c3RlbVN5bmMuaWRsOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlF
MUFCMUVCMDE0RTlFMzIzMDA0NDlFMTMgLyogRW50cmllc0NhbGxiYWNrLmlkbCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHRleHQ7IG5hbWUgPSBFbnRy
aWVzQ2FsbGJhY2suaWRsOyBwYXRoID0gZmlsZWFwaS9FbnRyaWVzQ2FsbGJhY2suaWRsOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlFMUFCMUVCMTE0RTlFMzJBMDA0NDlFMTMgLyogRW50
cnkuaWRsICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0g
dGV4dDsgbmFtZSA9IEVudHJ5LmlkbDsgcGF0aCA9IGZpbGVhcGkvRW50cnkuaWRsOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OwogCQlFMUFCMUVCMjE0RTlFMzMyMDA0NDlFMTMgLyogRW50cnlB
cnJheS5pZGwgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUg
PSB0ZXh0OyBuYW1lID0gRW50cnlBcnJheS5pZGw7IHBhdGggPSBmaWxlYXBpL0VudHJ5QXJyYXku
aWRsOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpJbmRleDogU291cmNlL1dlYkNvcmUvZmls
ZWFwaS9ET01GaWxlUGF0aC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvZmlsZWFw
aS9ET01GaWxlUGF0aC5jcHAJKHJldmlzaW9uIDExMDcyNikKKysrIFNvdXJjZS9XZWJDb3JlL2Zp
bGVhcGkvRE9NRmlsZVBhdGguY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDE1NCArMCwwIEBACi0v
KgotICogQ29weXJpZ2h0IChDKSAyMDEwIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
Ci0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jt
cywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlk
ZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCi0gKiBtZXQ6Ci0gKgotICogICAg
ICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBj
b3B5cmlnaHQKLSAqIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lci4KLSAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9y
bSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKLSAqIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIKLSAqIGluIHRoZSBk
b2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKLSAq
IGRpc3RyaWJ1dGlvbi4KLSAqICAgICAqIE5laXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xlIEluYy4g
bm9yIHRoZSBuYW1lcyBvZiBpdHMKLSAqIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRv
cnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tCi0gKiB0aGlzIHNvZnR3YXJlIHdp
dGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgotICoKLSAqIFRISVMgU09G
VFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRP
UlMKLSAqICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5D
TFVESU5HLCBCVVQgTk9UCi0gKiBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9G
IE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IKLSAqIEEgUEFSVElDVUxBUiBQVVJQT1NF
IEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCi0gKiBPV05F
UiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5D
SURFTlRBTCwKLSAqIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VT
IChJTkNMVURJTkcsIEJVVCBOT1QKLSAqIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNU
SVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAotICogREFUQSwgT1IgUFJPRklU
UzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCi0g
KiBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklM
SVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklT
SU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLSAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4g
SUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotI2lu
Y2x1ZGUgImNvbmZpZy5oIgotI2luY2x1ZGUgIkRPTUZpbGVQYXRoLmgiCi0KLSNpZiBFTkFCTEUo
RklMRV9TWVNURU0pCi0KLSNpbmNsdWRlICJSZWd1bGFyRXhwcmVzc2lvbi5oIgotI2luY2x1ZGUg
PHd0Zi9WZWN0b3IuaD4KLSNpbmNsdWRlIDx3dGYvdGV4dC9DU3RyaW5nLmg+Ci0KLW5hbWVzcGFj
ZSBXZWJDb3JlIHsKLQotY29uc3QgY2hhciBET01GaWxlUGF0aDo6c2VwYXJhdG9yID0gJy8nOwot
Y29uc3QgY2hhciBET01GaWxlUGF0aDo6cm9vdFtdID0gIi8iOwotCi1TdHJpbmcgRE9NRmlsZVBh
dGg6OmFwcGVuZChjb25zdCBTdHJpbmcmIGJhc2UsIGNvbnN0IFN0cmluZyYgY29tcG9uZW50cykK
LXsKLSAgICByZXR1cm4gZW5zdXJlRGlyZWN0b3J5UGF0aChiYXNlKSArIGNvbXBvbmVudHM7Ci19
Ci0KLVN0cmluZyBET01GaWxlUGF0aDo6ZW5zdXJlRGlyZWN0b3J5UGF0aChjb25zdCBTdHJpbmcm
IHBhdGgpCi17Ci0gICAgaWYgKCFET01GaWxlUGF0aDo6ZW5kc1dpdGhTZXBhcmF0b3IocGF0aCkp
IHsKLSAgICAgICAgU3RyaW5nIG5ld1BhdGggPSBwYXRoOwotICAgICAgICBuZXdQYXRoLmFwcGVu
ZChET01GaWxlUGF0aDo6c2VwYXJhdG9yKTsKLSAgICAgICAgcmV0dXJuIG5ld1BhdGg7Ci0gICAg
fQotICAgIHJldHVybiBwYXRoOwotfQotCi1TdHJpbmcgRE9NRmlsZVBhdGg6OmdldE5hbWUoY29u
c3QgU3RyaW5nJiBwYXRoKQotewotICAgIGludCBpbmRleCA9IHBhdGgucmV2ZXJzZUZpbmQoRE9N
RmlsZVBhdGg6OnNlcGFyYXRvcik7Ci0gICAgaWYgKGluZGV4ICE9IC0xKQotICAgICAgICByZXR1
cm4gcGF0aC5zdWJzdHJpbmcoaW5kZXggKyAxKTsKLSAgICByZXR1cm4gcGF0aDsKLX0KLQotU3Ry
aW5nIERPTUZpbGVQYXRoOjpnZXREaXJlY3RvcnkoY29uc3QgU3RyaW5nJiBwYXRoKQotewotICAg
IGludCBpbmRleCA9IHBhdGgucmV2ZXJzZUZpbmQoRE9NRmlsZVBhdGg6OnNlcGFyYXRvcik7Ci0g
ICAgaWYgKGluZGV4ID09IDApCi0gICAgICAgIHJldHVybiBET01GaWxlUGF0aDo6cm9vdDsKLSAg
ICBpZiAoaW5kZXggIT0gLTEpCi0gICAgICAgIHJldHVybiBwYXRoLnN1YnN0cmluZygwLCBpbmRl
eCk7Ci0gICAgcmV0dXJuICIuIjsKLX0KLQotYm9vbCBET01GaWxlUGF0aDo6aXNQYXJlbnRPZihj
b25zdCBTdHJpbmcmIHBhcmVudCwgY29uc3QgU3RyaW5nJiBtYXlCZUNoaWxkKQotewotICAgIEFT
U0VSVChET01GaWxlUGF0aDo6aXNBYnNvbHV0ZShwYXJlbnQpKTsKLSAgICBBU1NFUlQoRE9NRmls
ZVBhdGg6OmlzQWJzb2x1dGUobWF5QmVDaGlsZCkpOwotICAgIGlmIChwYXJlbnQgPT0gRE9NRmls
ZVBhdGg6OnJvb3QgJiYgbWF5QmVDaGlsZCAhPSBET01GaWxlUGF0aDo6cm9vdCkKLSAgICAgICAg
cmV0dXJuIHRydWU7Ci0gICAgaWYgKHBhcmVudC5sZW5ndGgoKSA+PSBtYXlCZUNoaWxkLmxlbmd0
aCgpIHx8ICFtYXlCZUNoaWxkLnN0YXJ0c1dpdGgocGFyZW50LCBmYWxzZSkpCi0gICAgICAgIHJl
dHVybiBmYWxzZTsKLSAgICBpZiAobWF5QmVDaGlsZFtwYXJlbnQubGVuZ3RoKCldICE9IERPTUZp
bGVQYXRoOjpzZXBhcmF0b3IpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICByZXR1cm4gdHJ1
ZTsKLX0KLQotU3RyaW5nIERPTUZpbGVQYXRoOjpyZW1vdmVFeHRyYVBhcmVudFJlZmVyZW5jZXMo
Y29uc3QgU3RyaW5nJiBwYXRoKQotewotICAgIEFTU0VSVChET01GaWxlUGF0aDo6aXNBYnNvbHV0
ZShwYXRoKSk7Ci0gICAgVmVjdG9yPFN0cmluZz4gY29tcG9uZW50czsKLSAgICBWZWN0b3I8U3Ry
aW5nPiBjYW5vbmljYWxpemVkOwotICAgIHBhdGguc3BsaXQoRE9NRmlsZVBhdGg6OnNlcGFyYXRv
ciwgY29tcG9uZW50cyk7Ci0gICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBjb21wb25lbnRzLnNp
emUoKTsgKytpKSB7Ci0gICAgICAgIGlmIChjb21wb25lbnRzW2ldID09ICIuIikKLSAgICAgICAg
ICAgIGNvbnRpbnVlOwotICAgICAgICBpZiAoY29tcG9uZW50c1tpXSA9PSAiLi4iKSB7Ci0gICAg
ICAgICAgICBpZiAoY2Fub25pY2FsaXplZC5zaXplKCkgPiAwKQotICAgICAgICAgICAgICAgIGNh
bm9uaWNhbGl6ZWQucmVtb3ZlTGFzdCgpOwotICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAg
IH0KLSAgICAgICAgY2Fub25pY2FsaXplZC5hcHBlbmQoY29tcG9uZW50c1tpXSk7Ci0gICAgfQot
ICAgIGlmIChjYW5vbmljYWxpemVkLmlzRW1wdHkoKSkKLSAgICAgICAgcmV0dXJuIERPTUZpbGVQ
YXRoOjpyb290OwotICAgIFN0cmluZyByZXN1bHQ7Ci0gICAgZm9yIChzaXplX3QgaSA9IDA7IGkg
PCBjYW5vbmljYWxpemVkLnNpemUoKTsgKytpKSB7Ci0gICAgICAgIHJlc3VsdC5hcHBlbmQoRE9N
RmlsZVBhdGg6OnNlcGFyYXRvcik7Ci0gICAgICAgIHJlc3VsdC5hcHBlbmQoY2Fub25pY2FsaXpl
ZFtpXSk7Ci0gICAgfQotICAgIHJldHVybiByZXN1bHQ7Ci19Ci0KLWJvb2wgRE9NRmlsZVBhdGg6
OmlzVmFsaWRQYXRoKGNvbnN0IFN0cmluZyYgcGF0aCkKLXsKLSAgICBpZiAocGF0aC5pc0VtcHR5
KCkgfHwgcGF0aCA9PSBET01GaWxlUGF0aDo6cm9vdCkKLSAgICAgICAgcmV0dXJuIHRydWU7Ci0K
LSAgICAvLyBFbWJlZGRlZCBOVUxzIGFyZSBub3QgYWxsb3dlZC4KLSAgICBpZiAocGF0aC5maW5k
KHN0YXRpY19jYXN0PFVDaGFyPigwKSkgIT0gV1RGOjpub3RGb3VuZCkKLSAgICAgICAgcmV0dXJu
IGZhbHNlOwotCi0gICAgLy8gV2hpbGUgbm90IFt5ZXRdIHJlc3RyaWN0ZWQgYnkgdGhlIHNwZWMs
ICdcXCcgY29tcGxpY2F0ZXMgaW1wbGVtZW50YXRpb24gZm9yIENocm9taXVtLgotICAgIGlmIChw
YXRoLmZpbmQoJ1xcJykgIT0gV1RGOjpub3RGb3VuZCkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwot
Ci0gICAgLy8gVGhpcyBtZXRob2QgaXMgb25seSBjYWxsZWQgb24gZnVsbHktZXZhbHVhdGVkIGFi
c29sdXRlIHBhdGhzLiBBbnkgc2lnbiBvZiAiLi4iIG9yICIuIiBpcyBsaWtlbHkgYW4gYXR0ZW1w
dCB0byBicmVhayBvdXQgb2YgdGhlIHNhbmRib3guCi0gICAgVmVjdG9yPFN0cmluZz4gY29tcG9u
ZW50czsKLSAgICBwYXRoLnNwbGl0KERPTUZpbGVQYXRoOjpzZXBhcmF0b3IsIGNvbXBvbmVudHMp
OwotICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgY29tcG9uZW50cy5zaXplKCk7ICsraSkgewot
ICAgICAgICBpZiAoY29tcG9uZW50c1tpXSA9PSAiLiIpCi0gICAgICAgICAgICByZXR1cm4gZmFs
c2U7Ci0gICAgICAgIGlmIChjb21wb25lbnRzW2ldID09ICIuLiIpCi0gICAgICAgICAgICByZXR1
cm4gZmFsc2U7Ci0gICAgfQotICAgIHJldHVybiB0cnVlOwotfQotCi1ib29sIERPTUZpbGVQYXRo
Ojppc1ZhbGlkTmFtZShjb25zdCBTdHJpbmcmIG5hbWUpCi17Ci0gICAgaWYgKG5hbWUuaXNFbXB0
eSgpKQotICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICAvLyAnLycgaXMgbm90IGFsbG93ZWQgaW4g
bmFtZS4KLSAgICBpZiAobmFtZS5jb250YWlucygnLycpKQotICAgICAgICByZXR1cm4gZmFsc2U7
Ci0gICAgcmV0dXJuIGlzVmFsaWRQYXRoKG5hbWUpOwotfQotCi19IC8vIG5hbWVzcGFjZSBXZWJD
b3JlCi0KLSNlbmRpZiAvLyBFTkFCTEUoRklMRV9TWVNURU0pCkluZGV4OiBTb3VyY2UvV2ViQ29y
ZS9maWxlYXBpL0RPTUZpbGVQYXRoLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvZmls
ZWFwaS9ET01GaWxlUGF0aC5oCShyZXZpc2lvbiAxMTA3MjYpCisrKyBTb3VyY2UvV2ViQ29yZS9m
aWxlYXBpL0RPTUZpbGVQYXRoLmgJKHdvcmtpbmcgY29weSkKQEAgLTEsODYgKzAsMCBAQAotLyoK
LSAqIENvcHlyaWdodCAoQykgMjAxMCBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgot
ICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMs
IHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVk
IHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZQotICogbWV0OgotICoKLSAqICAgICAq
IFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29w
eXJpZ2h0Ci0gKiBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIuCi0gKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0g
bXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCi0gKiBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyCi0gKiBpbiB0aGUgZG9j
dW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCi0gKiBk
aXN0cmlidXRpb24uCi0gKiAgICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9mIEdvb2dsZSBJbmMuIG5v
ciB0aGUgbmFtZXMgb2YgaXRzCi0gKiBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3Jz
ZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbQotICogdGhpcyBzb2Z0d2FyZSB3aXRo
b3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KLSAqCi0gKiBUSElTIFNPRlRX
QVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JT
Ci0gKiAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xV
RElORywgQlVUIE5PVAotICogTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBN
RVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCi0gKiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBB
UkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAotICogT1dORVIg
T1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lE
RU5UQUwsCi0gKiBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAo
SU5DTFVESU5HLCBCVVQgTk9UCi0gKiBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElU
VVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKLSAqIERBVEEsIE9SIFBST0ZJVFM7
IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQotICog
VEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElU
WSwgT1IgVE9SVAotICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lO
RyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0gKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElG
IEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLSNpZm5k
ZWYgRE9NRmlsZVBhdGhfaAotI2RlZmluZSBET01GaWxlUGF0aF9oCi0KLSNpbmNsdWRlICJQbGF0
Zm9ybVN0cmluZy5oIgotI2luY2x1ZGUgPHd0Zi9QYXNzUmVmUHRyLmg+Ci0jaW5jbHVkZSA8d3Rm
L1JlZkNvdW50ZWQuaD4KLQotbmFtZXNwYWNlIFdlYkNvcmUgewotCi0vLyBET01GaWxlU3lzdGVt
IHBhdGggdXRpbGl0aWVzLiBBbGwgbWV0aG9kcyBpbiB0aGlzIGNsYXNzIGFyZSBzdGF0aWMuCi1j
bGFzcyBET01GaWxlUGF0aCB7Ci1wdWJsaWM6Ci0gICAgc3RhdGljIGNvbnN0IGNoYXIgc2VwYXJh
dG9yOwotICAgIHN0YXRpYyBjb25zdCBjaGFyIHJvb3RbXTsKLQotICAgIC8vIFJldHVybnMgdGhl
IG5hbWUgcGFydCBmcm9tIHRoZSBnaXZlbiBwYXRoLgotICAgIHN0YXRpYyBTdHJpbmcgZ2V0TmFt
ZShjb25zdCBTdHJpbmcmIHBhdGgpOwotCi0gICAgLy8gUmV0dXJucyB0aGUgcGFyZW50IGRpcmVj
dG9yeSBwYXRoIG9mIHRoZSBnaXZlbiBwYXRoLgotICAgIHN0YXRpYyBTdHJpbmcgZ2V0RGlyZWN0
b3J5KGNvbnN0IFN0cmluZyYgcGF0aCk7Ci0KLSAgICAvLyBDaGVja3MgaWYgYSBnaXZlbiBwYXRo
IGlzIGEgcGFyZW50IG9mIG1heUJlQ2hpbGQuIFRoaXMgbWV0aG9kIGFzc3VtZXMgZ2l2ZW4gcGF0
aHMgYXJlIGFic29sdXRlIGFuZCBkbyBub3QgaGF2ZSBleHRyYSByZWZlcmVuY2VzIHRvIGEgcGFy
ZW50IChpLmUuICIuLi8iKS4KLSAgICBzdGF0aWMgYm9vbCBpc1BhcmVudE9mKGNvbnN0IFN0cmlu
ZyYgcGF0aCwgY29uc3QgU3RyaW5nJiBtYXlCZUNoaWxkKTsKLQotICAgIC8vIEFwcGVuZHMgdGhl
IHNlcGFyYXRvciBhdCB0aGUgZW5kIG9mIHRoZSBwYXRoIGlmIGl0J3Mgbm90IHRoZXJlIGFscmVh
ZHkuCi0gICAgc3RhdGljIFN0cmluZyBlbnN1cmVEaXJlY3RvcnlQYXRoKGNvbnN0IFN0cmluZyYg
cGF0aCk7Ci0KLSAgICAvLyBSZXR1cm5zIGEgbmV3IHBhdGggYnkgYXBwZW5kaW5nIGEgc2VwYXJh
dG9yIGFuZCB0aGUgc3VwcGxpZWQgcGF0aCBjb21wb25lbnQgdG8gdGhlIHBhdGguCi0gICAgc3Rh
dGljIFN0cmluZyBhcHBlbmQoY29uc3QgU3RyaW5nJiBwYXRoLCBjb25zdCBTdHJpbmcmIGNvbXBv
bmVudCk7Ci0KLSAgICBzdGF0aWMgYm9vbCBpc0Fic29sdXRlKGNvbnN0IFN0cmluZyYgcGF0aCkK
LSAgICB7Ci0gICAgICAgIHJldHVybiBwYXRoLnN0YXJ0c1dpdGgoRE9NRmlsZVBhdGg6OnJvb3Qp
OwotICAgIH0KLQotICAgIHN0YXRpYyBib29sIGVuZHNXaXRoU2VwYXJhdG9yKGNvbnN0IFN0cmlu
ZyYgcGF0aCkKLSAgICB7Ci0gICAgICAgIHJldHVybiBwYXRoW3BhdGgubGVuZ3RoKCkgLSAxXSA9
PSBET01GaWxlUGF0aDo6c2VwYXJhdG9yOwotICAgIH0KLQotICAgIC8vIEV2YWx1YXRlcyBhbGwg
Ii4uLyIgYW5kICIuLyIgc2VnbWVudHMuICBOb3RlIHRoYXQgIi8uLi8iIGV4cGFuZHMgdG8gIi8i
LCBzbyB5b3UgY2FuJ3QgZXZlciByZWZlciB0byBhbnl0aGluZyBhYm92ZSB0aGUgcm9vdCBkaXJl
Y3RvcnkuCi0gICAgc3RhdGljIFN0cmluZyByZW1vdmVFeHRyYVBhcmVudFJlZmVyZW5jZXMoY29u
c3QgU3RyaW5nJiBwYXRoKTsKLQotICAgIC8vIENoZWNrcyBpZiB0aGUgZ2l2ZW4gcGF0aCBmb2xs
b3dzIHRoZSBGaWxlU3lzdGVtIEFQSSBuYW1pbmcgcmVzdHJpY3Rpb25zLgotICAgIHN0YXRpYyBi
b29sIGlzVmFsaWRQYXRoKGNvbnN0IFN0cmluZyYgcGF0aCk7Ci0KLSAgICAvLyBDaGVja3MgaWYg
dGhlIGdpdmVuIG5hbWUgZm9sbG93cyB0aGUgRmlsZVN5c3RlbSBBUEkgbmFtaW5nIHJlc3RyaWN0
aW9ucy4KLSAgICBzdGF0aWMgYm9vbCBpc1ZhbGlkTmFtZShjb25zdCBTdHJpbmcmIG5hbWUpOwot
Ci1wcml2YXRlOgotICAgIERPTUZpbGVQYXRoKCkgeyB9Ci19OwotCi19IC8vIG5hbWVzcGFjZSBX
ZWJDb3JlCi0KLSNlbmRpZiAvLyBET01GaWxlUGF0aF9oCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9m
aWxlYXBpL0RPTUZpbGVTeXN0ZW0uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2Zp
bGVhcGkvRE9NRmlsZVN5c3RlbS5jcHAJKHJldmlzaW9uIDExMDcyNikKKysrIFNvdXJjZS9XZWJD
b3JlL2ZpbGVhcGkvRE9NRmlsZVN5c3RlbS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsMTYyICsw
LDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTAgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmlu
YXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRl
ZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUKLSAqIG1ldDoKLSAq
Ci0gKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhl
IGFib3ZlIGNvcHlyaWdodAotICogbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogICAgICogUmVkaXN0cmlidXRpb25zIGluIGJp
bmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQotICogY29weXJpZ2h0IG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lcgotICog
aW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRo
IHRoZQotICogZGlzdHJpYnV0aW9uLgotICogICAgICogTmVpdGhlciB0aGUgbmFtZSBvZiBHb29n
bGUgSW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0cwotICogY29udHJpYnV0b3JzIG1heSBiZSB1c2Vk
IHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20KLSAqIHRoaXMgc29m
dHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCi0gKgotICog
VEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENP
TlRSSUJVVE9SUwotICogIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5U
SUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKLSAqIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJB
TlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgotICogQSBQQVJUSUNVTEFS
IFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQK
LSAqIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElS
RUNULCBJTkNJREVOVEFMLAotICogU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFM
IERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAotICogTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQg
T0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCi0gKiBEQVRBLCBP
UiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBP
TiBBTlkKLSAqIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklD
VCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJ
U0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotICogT0YgVEhJUyBTT0ZUV0FS
RSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAq
LwotCi0jaW5jbHVkZSAiY29uZmlnLmgiCi0jaW5jbHVkZSAiRE9NRmlsZVN5c3RlbS5oIgotCi0j
aWYgRU5BQkxFKEZJTEVfU1lTVEVNKQotCi0jaW5jbHVkZSAiQXN5bmNGaWxlU3lzdGVtLmgiCi0j
aW5jbHVkZSAiRE9NRmlsZVBhdGguaCIKLSNpbmNsdWRlICJEaXJlY3RvcnlFbnRyeS5oIgotI2lu
Y2x1ZGUgIkVycm9yQ2FsbGJhY2suaCIKLSNpbmNsdWRlICJGaWxlLmgiCi0jaW5jbHVkZSAiRmls
ZUNhbGxiYWNrLmgiCi0jaW5jbHVkZSAiRmlsZUVudHJ5LmgiCi0jaW5jbHVkZSAiRmlsZU1ldGFk
YXRhLmgiCi0jaW5jbHVkZSAiRmlsZVN5c3RlbUNhbGxiYWNrcy5oIgotI2luY2x1ZGUgIkZpbGVX
cml0ZXIuaCIKLSNpbmNsdWRlICJGaWxlV3JpdGVyQmFzZUNhbGxiYWNrLmgiCi0jaW5jbHVkZSAi
RmlsZVdyaXRlckNhbGxiYWNrLmgiCi0jaW5jbHVkZSAiSW5zcGVjdG9yRmlsZVN5c3RlbUluc3Ry
dW1lbnRhdGlvbi5oIgotI2luY2x1ZGUgIk1ldGFkYXRhQ2FsbGJhY2suaCIKLSNpbmNsdWRlICJT
Y3JpcHRFeGVjdXRpb25Db250ZXh0LmgiCi0jaW5jbHVkZSA8d3RmL093blB0ci5oPgotCi1uYW1l
c3BhY2UgV2ViQ29yZSB7Ci0KLS8vIHN0YXRpYwotUGFzc1JlZlB0cjxET01GaWxlU3lzdGVtPiBE
T01GaWxlU3lzdGVtOjpjcmVhdGUoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCogY29udGV4dCwgY29u
c3QgU3RyaW5nJiBuYW1lLCBQYXNzT3duUHRyPEFzeW5jRmlsZVN5c3RlbT4gYXN5bmNGaWxlU3lz
dGVtKQotewotICAgIFJlZlB0cjxET01GaWxlU3lzdGVtPiBmaWxlU3lzdGVtKGFkb3B0UmVmKG5l
dyBET01GaWxlU3lzdGVtKGNvbnRleHQsIG5hbWUsIGFzeW5jRmlsZVN5c3RlbSkpKTsKLSAgICBm
aWxlU3lzdGVtLT5zdXNwZW5kSWZOZWVkZWQoKTsKLSAgICBJbnNwZWN0b3JJbnN0cnVtZW50YXRp
b246OmRpZE9wZW5GaWxlU3lzdGVtKGZpbGVTeXN0ZW0uZ2V0KCkpOwotICAgIHJldHVybiBmaWxl
U3lzdGVtLnJlbGVhc2UoKTsKLX0KLQotRE9NRmlsZVN5c3RlbTo6RE9NRmlsZVN5c3RlbShTY3Jp
cHRFeGVjdXRpb25Db250ZXh0KiBjb250ZXh0LCBjb25zdCBTdHJpbmcmIG5hbWUsIFBhc3NPd25Q
dHI8QXN5bmNGaWxlU3lzdGVtPiBhc3luY0ZpbGVTeXN0ZW0pCi0gICAgOiBET01GaWxlU3lzdGVt
QmFzZShjb250ZXh0LCBuYW1lLCBhc3luY0ZpbGVTeXN0ZW0pCi0gICAgLCBBY3RpdmVET01PYmpl
Y3QoY29udGV4dCwgdGhpcykKLXsKLX0KLQotUGFzc1JlZlB0cjxEaXJlY3RvcnlFbnRyeT4gRE9N
RmlsZVN5c3RlbTo6cm9vdCgpCi17Ci0gICAgcmV0dXJuIERpcmVjdG9yeUVudHJ5OjpjcmVhdGUo
dGhpcywgRE9NRmlsZVBhdGg6OnJvb3QpOwotfQotCi12b2lkIERPTUZpbGVTeXN0ZW06OnN0b3Ao
KQotewotICAgIG1fYXN5bmNGaWxlU3lzdGVtLT5zdG9wKCk7Ci19Ci0KLWJvb2wgRE9NRmlsZVN5
c3RlbTo6aGFzUGVuZGluZ0FjdGl2aXR5KCkgY29uc3QKLXsKLSAgICByZXR1cm4gbV9hc3luY0Zp
bGVTeXN0ZW0tPmhhc1BlbmRpbmdBY3Rpdml0eSgpOwotfQotCi12b2lkIERPTUZpbGVTeXN0ZW06
OmNvbnRleHREZXN0cm95ZWQoKQotewotICAgIG1fYXN5bmNGaWxlU3lzdGVtLT5zdG9wKCk7Ci0g
ICAgQWN0aXZlRE9NT2JqZWN0Ojpjb250ZXh0RGVzdHJveWVkKCk7Ci19Ci0KLW5hbWVzcGFjZSB7
Ci0KLWNsYXNzIENvbnZlcnRUb0ZpbGVXcml0ZXJDYWxsYmFjayA6IHB1YmxpYyBGaWxlV3JpdGVy
QmFzZUNhbGxiYWNrIHsKLXB1YmxpYzoKLSAgICBzdGF0aWMgUGFzc1JlZlB0cjxDb252ZXJ0VG9G
aWxlV3JpdGVyQ2FsbGJhY2s+IGNyZWF0ZShQYXNzUmVmUHRyPEZpbGVXcml0ZXJDYWxsYmFjaz4g
Y2FsbGJhY2spCi0gICAgewotICAgICAgICByZXR1cm4gYWRvcHRSZWYobmV3IENvbnZlcnRUb0Zp
bGVXcml0ZXJDYWxsYmFjayhjYWxsYmFjaykpOwotICAgIH0KLQotICAgIGJvb2wgaGFuZGxlRXZl
bnQoRmlsZVdyaXRlckJhc2UqIGZpbGVXcml0ZXJCYXNlKQotICAgIHsKLSAgICAgICAgcmV0dXJu
IG1fY2FsbGJhY2stPmhhbmRsZUV2ZW50KHN0YXRpY19jYXN0PEZpbGVXcml0ZXIqPihmaWxlV3Jp
dGVyQmFzZSkpOwotICAgIH0KLXByaXZhdGU6Ci0gICAgQ29udmVydFRvRmlsZVdyaXRlckNhbGxi
YWNrKFBhc3NSZWZQdHI8RmlsZVdyaXRlckNhbGxiYWNrPiBjYWxsYmFjaykKLSAgICAgICAgOiBt
X2NhbGxiYWNrKGNhbGxiYWNrKQotICAgIHsKLSAgICB9Ci0gICAgUmVmUHRyPEZpbGVXcml0ZXJD
YWxsYmFjaz4gbV9jYWxsYmFjazsKLX07Ci0KLX0KLQotdm9pZCBET01GaWxlU3lzdGVtOjpjcmVh
dGVXcml0ZXIoY29uc3QgRmlsZUVudHJ5KiBmaWxlRW50cnksIFBhc3NSZWZQdHI8RmlsZVdyaXRl
ckNhbGxiYWNrPiBzdWNjZXNzQ2FsbGJhY2ssIFBhc3NSZWZQdHI8RXJyb3JDYWxsYmFjaz4gZXJy
b3JDYWxsYmFjaykKLXsKLSAgICBBU1NFUlQoZmlsZUVudHJ5KTsKLQotICAgIFJlZlB0cjxGaWxl
V3JpdGVyPiBmaWxlV3JpdGVyID0gRmlsZVdyaXRlcjo6Y3JlYXRlKHNjcmlwdEV4ZWN1dGlvbkNv
bnRleHQoKSk7Ci0gICAgUmVmUHRyPEZpbGVXcml0ZXJCYXNlQ2FsbGJhY2s+IGNvbnZlcnNpb25D
YWxsYmFjayA9IENvbnZlcnRUb0ZpbGVXcml0ZXJDYWxsYmFjazo6Y3JlYXRlKHN1Y2Nlc3NDYWxs
YmFjayk7Ci0gICAgT3duUHRyPEZpbGVXcml0ZXJCYXNlQ2FsbGJhY2tzPiBjYWxsYmFja3MgPSBG
aWxlV3JpdGVyQmFzZUNhbGxiYWNrczo6Y3JlYXRlKGZpbGVXcml0ZXIsIGNvbnZlcnNpb25DYWxs
YmFjaywgZXJyb3JDYWxsYmFjayk7Ci0gICAgbV9hc3luY0ZpbGVTeXN0ZW0tPmNyZWF0ZVdyaXRl
cihmaWxlV3JpdGVyLmdldCgpLCBmaWxlRW50cnktPmZ1bGxQYXRoKCksIGNhbGxiYWNrcy5yZWxl
YXNlKCkpOwotfQotCi1uYW1lc3BhY2UgewotCi1jbGFzcyBHZXRQYXRoQ2FsbGJhY2sgOiBwdWJs
aWMgRmlsZVN5c3RlbUNhbGxiYWNrc0Jhc2UgewotcHVibGljOgotICAgIHN0YXRpYyBQYXNzT3du
UHRyPEdldFBhdGhDYWxsYmFjaz4gY3JlYXRlKFBhc3NSZWZQdHI8RE9NRmlsZVN5c3RlbT4gZmls
ZXN5c3RlbSwgY29uc3QgU3RyaW5nJiBuYW1lLCBQYXNzUmVmUHRyPEZpbGVDYWxsYmFjaz4gc3Vj
Y2Vzc0NhbGxiYWNrLCBQYXNzUmVmUHRyPEVycm9yQ2FsbGJhY2s+IGVycm9yQ2FsbGJhY2spCi0g
ICAgewotICAgICAgICByZXR1cm4gYWRvcHRQdHIobmV3IEdldFBhdGhDYWxsYmFjayhmaWxlc3lz
dGVtLCBuYW1lLCBzdWNjZXNzQ2FsbGJhY2ssIGVycm9yQ2FsbGJhY2spKTsKLSAgICB9Ci0KLSAg
ICB2aXJ0dWFsIHZvaWQgZGlkUmVhZE1ldGFkYXRhKGNvbnN0IEZpbGVNZXRhZGF0YSYgbWV0YWRh
dGEpCi0gICAgewotICAgICAgICBBU1NFUlQoIW1ldGFkYXRhLnBsYXRmb3JtUGF0aC5pc0VtcHR5
KCkpOwotICAgICAgICBtX2ZpbGVzeXN0ZW0tPnNjaGVkdWxlQ2FsbGJhY2sobV9zdWNjZXNzQ2Fs
bGJhY2sucmVsZWFzZSgpLCBGaWxlOjpjcmVhdGVXaXRoTmFtZShtZXRhZGF0YS5wbGF0Zm9ybVBh
dGgsIG1fbmFtZSkpOwotICAgIH0KLQotcHJpdmF0ZToKLSAgICBHZXRQYXRoQ2FsbGJhY2soUGFz
c1JlZlB0cjxET01GaWxlU3lzdGVtPiBmaWxlc3lzdGVtLCBjb25zdCBTdHJpbmcmIG5hbWUsICBQ
YXNzUmVmUHRyPEZpbGVDYWxsYmFjaz4gc3VjY2Vzc0NhbGxiYWNrLCBQYXNzUmVmUHRyPEVycm9y
Q2FsbGJhY2s+IGVycm9yQ2FsbGJhY2spCi0gICAgICAgIDogRmlsZVN5c3RlbUNhbGxiYWNrc0Jh
c2UoZXJyb3JDYWxsYmFjaykKLSAgICAgICAgLCBtX2ZpbGVzeXN0ZW0oZmlsZXN5c3RlbSkKLSAg
ICAgICAgLCBtX25hbWUobmFtZSkKLSAgICAgICAgLCBtX3N1Y2Nlc3NDYWxsYmFjayhzdWNjZXNz
Q2FsbGJhY2spCi0gICAgewotICAgIH0KLQotICAgIFJlZlB0cjxET01GaWxlU3lzdGVtPiBtX2Zp
bGVzeXN0ZW07Ci0gICAgU3RyaW5nIG1fbmFtZTsKLSAgICBSZWZQdHI8RmlsZUNhbGxiYWNrPiBt
X3N1Y2Nlc3NDYWxsYmFjazsKLX07Ci0KLX0gLy8gbmFtZXNwYWNlCi0KLXZvaWQgRE9NRmlsZVN5
c3RlbTo6Y3JlYXRlRmlsZShjb25zdCBGaWxlRW50cnkqIGZpbGVFbnRyeSwgUGFzc1JlZlB0cjxG
aWxlQ2FsbGJhY2s+IHN1Y2Nlc3NDYWxsYmFjaywgUGFzc1JlZlB0cjxFcnJvckNhbGxiYWNrPiBl
cnJvckNhbGxiYWNrKQotewotICAgIG1fYXN5bmNGaWxlU3lzdGVtLT5jcmVhdGVTbmFwc2hvdEZp
bGVBbmRSZWFkTWV0YWRhdGEoZmlsZUVudHJ5LT5mdWxsUGF0aCgpLCBHZXRQYXRoQ2FsbGJhY2s6
OmNyZWF0ZSh0aGlzLCBmaWxlRW50cnktPm5hbWUoKSwgc3VjY2Vzc0NhbGxiYWNrLCBlcnJvckNh
bGxiYWNrKSk7Ci19Ci0KLX0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKLQotI2VuZGlmIC8vIEVOQUJM
RShGSUxFX1NZU1RFTSkKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2ZpbGVhcGkvRE9NRmlsZVN5c3Rl
bS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2ZpbGVhcGkvRE9NRmlsZVN5c3RlbS5o
CShyZXZpc2lvbiAxMTA3MjYpCisrKyBTb3VyY2UvV2ViQ29yZS9maWxlYXBpL0RPTUZpbGVTeXN0
ZW0uaAkod29ya2luZyBjb3B5KQpAQCAtMSwxMDkgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAo
QykgMjAxMCBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJp
YnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91
dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxv
d2luZyBjb25kaXRpb25zIGFyZQotICogbWV0OgotICoKLSAqICAgICAqIFJlZGlzdHJpYnV0aW9u
cyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIu
Ci0gKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2Ug
dGhlIGFib3ZlCi0gKiBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyCi0gKiBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQv
b3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCi0gKiBkaXN0cmlidXRpb24uCi0g
KiAgICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9mIEdvb2dsZSBJbmMuIG5vciB0aGUgbmFtZXMgb2Yg
aXRzCi0gKiBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHBy
b2R1Y3RzIGRlcml2ZWQgZnJvbQotICogdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHBy
aW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVE
IEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCi0gKiAiQVMgSVMiIEFO
RCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAot
ICogTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkg
QU5EIEZJVE5FU1MgRk9SCi0gKiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4g
SU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAotICogT1dORVIgT1IgQ09OVFJJQlVUT1JT
IEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCi0gKiBTUEVD
SUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQg
Tk9UCi0gKiBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNF
UlZJQ0VTOyBMT1NTIE9GIFVTRSwKLSAqIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElO
VEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQotICogVEhFT1JZIE9GIExJQUJJ
TElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotICog
KElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9V
VCBPRiBUSEUgVVNFCi0gKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhF
IFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLSNpZm5kZWYgRE9NRmlsZVN5c3Rl
bV9oCi0jZGVmaW5lIERPTUZpbGVTeXN0ZW1faAotCi0jaWYgRU5BQkxFKEZJTEVfU1lTVEVNKQot
Ci0jaW5jbHVkZSAiQWN0aXZlRE9NT2JqZWN0LmgiCi0jaW5jbHVkZSAiRE9NRmlsZVN5c3RlbUJh
c2UuaCIKLSNpbmNsdWRlICJTY3JpcHRFeGVjdXRpb25Db250ZXh0LmgiCi0KLW5hbWVzcGFjZSBX
ZWJDb3JlIHsKLQotY2xhc3MgRGlyZWN0b3J5RW50cnk7Ci1jbGFzcyBGaWxlOwotY2xhc3MgRmls
ZUNhbGxiYWNrOwotY2xhc3MgRmlsZUVudHJ5OwotY2xhc3MgRmlsZVdyaXRlckNhbGxiYWNrOwot
Ci1jbGFzcyBET01GaWxlU3lzdGVtIDogcHVibGljIERPTUZpbGVTeXN0ZW1CYXNlLCBwdWJsaWMg
QWN0aXZlRE9NT2JqZWN0IHsKLXB1YmxpYzoKLSAgICBzdGF0aWMgUGFzc1JlZlB0cjxET01GaWxl
U3lzdGVtPiBjcmVhdGUoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCosIGNvbnN0IFN0cmluZyYgbmFt
ZSwgUGFzc093blB0cjxBc3luY0ZpbGVTeXN0ZW0+KTsKLQotICAgIFBhc3NSZWZQdHI8RGlyZWN0
b3J5RW50cnk+IHJvb3QoKTsKLQotICAgIC8vIEFjdGl2ZURPTU9iamVjdCBtZXRob2RzLgotICAg
IHZpcnR1YWwgdm9pZCBzdG9wKCk7Ci0gICAgdmlydHVhbCBib29sIGhhc1BlbmRpbmdBY3Rpdml0
eSgpIGNvbnN0OwotICAgIHZpcnR1YWwgdm9pZCBjb250ZXh0RGVzdHJveWVkKCk7Ci0KLSAgICB2
b2lkIGNyZWF0ZVdyaXRlcihjb25zdCBGaWxlRW50cnkqLCBQYXNzUmVmUHRyPEZpbGVXcml0ZXJD
YWxsYmFjaz4sIFBhc3NSZWZQdHI8RXJyb3JDYWxsYmFjaz4pOwotICAgIHZvaWQgY3JlYXRlRmls
ZShjb25zdCBGaWxlRW50cnkqLCBQYXNzUmVmUHRyPEZpbGVDYWxsYmFjaz4sIFBhc3NSZWZQdHI8
RXJyb3JDYWxsYmFjaz4pOwotCi0gICAgLy8gU2NoZWR1bGUgYSBjYWxsYmFjay4gVGhpcyBzaG91
bGQgbm90IGNyb3NzIHRocmVhZHMgKHNob3VsZCBiZSBjYWxsZWQgb24gdGhlIHNhbWUgY29udGV4
dCB0aHJlYWQpLgotICAgIC8vIEZJWE1FOiBtb3ZlIHRoaXMgdG8gYSBtb3JlIGdlbmVyaWMgcGxh
Y2UuCi0gICAgdGVtcGxhdGUgPHR5cGVuYW1lIENCLCB0eXBlbmFtZSBDQkFyZz4KLSAgICBzdGF0
aWMgdm9pZCBzY2hlZHVsZUNhbGxiYWNrKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqLCBQYXNzUmVm
UHRyPENCPiwgUGFzc1JlZlB0cjxDQkFyZz4pOwotCi0gICAgdGVtcGxhdGUgPHR5cGVuYW1lIENC
LCB0eXBlbmFtZSBDQkFyZz4KLSAgICB2b2lkIHNjaGVkdWxlQ2FsbGJhY2soUGFzc1JlZlB0cjxD
Qj4gY2FsbGJhY2ssIFBhc3NSZWZQdHI8Q0JBcmc+IGNhbGxiYWNrQXJnKQotICAgIHsKLSAgICAg
ICAgc2NoZWR1bGVDYWxsYmFjayhzY3JpcHRFeGVjdXRpb25Db250ZXh0KCksIGNhbGxiYWNrLCBj
YWxsYmFja0FyZyk7Ci0gICAgfQotCi1wcml2YXRlOgotICAgIERPTUZpbGVTeXN0ZW0oU2NyaXB0
RXhlY3V0aW9uQ29udGV4dCosIGNvbnN0IFN0cmluZyYgbmFtZSwgUGFzc093blB0cjxBc3luY0Zp
bGVTeXN0ZW0+KTsKLQotICAgIC8vIEEgaGVscGVyIHRlbXBsYXRlIHRvIHNjaGVkdWxlIGEgY2Fs
bGJhY2sgdGFzay4KLSAgICB0ZW1wbGF0ZSA8dHlwZW5hbWUgQ0IsIHR5cGVuYW1lIENCQXJnPgot
ICAgIGNsYXNzIERpc3BhdGNoQ2FsbGJhY2tUYXNrIDogcHVibGljIFNjcmlwdEV4ZWN1dGlvbkNv
bnRleHQ6OlRhc2sgewotICAgIHB1YmxpYzoKLSAgICAgICAgRGlzcGF0Y2hDYWxsYmFja1Rhc2so
UGFzc1JlZlB0cjxDQj4gY2FsbGJhY2ssIFBhc3NSZWZQdHI8Q0JBcmc+IGFyZykKLSAgICAgICAg
ICAgIDogbV9jYWxsYmFjayhjYWxsYmFjaykKLSAgICAgICAgICAgICwgbV9jYWxsYmFja0FyZyhh
cmcpCi0gICAgICAgIHsKLSAgICAgICAgfQotCi0gICAgICAgIHZpcnR1YWwgdm9pZCBwZXJmb3Jt
VGFzayhTY3JpcHRFeGVjdXRpb25Db250ZXh0KikKLSAgICAgICAgewotICAgICAgICAgICAgbV9j
YWxsYmFjay0+aGFuZGxlRXZlbnQobV9jYWxsYmFja0FyZy5nZXQoKSk7Ci0gICAgICAgIH0KLQot
ICAgIHByaXZhdGU6Ci0gICAgICAgIFJlZlB0cjxDQj4gbV9jYWxsYmFjazsKLSAgICAgICAgUmVm
UHRyPENCQXJnPiBtX2NhbGxiYWNrQXJnOwotICAgIH07Ci19OwotCi10ZW1wbGF0ZSA8dHlwZW5h
bWUgQ0IsIHR5cGVuYW1lIENCQXJnPgotdm9pZCBET01GaWxlU3lzdGVtOjpzY2hlZHVsZUNhbGxi
YWNrKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqIHNjcmlwdEV4ZWN1dGlvbkNvbnRleHQsIFBhc3NS
ZWZQdHI8Q0I+IGNhbGxiYWNrLCBQYXNzUmVmUHRyPENCQXJnPiBhcmcpCi17Ci0gICAgQVNTRVJU
KHNjcmlwdEV4ZWN1dGlvbkNvbnRleHQtPmlzQ29udGV4dFRocmVhZCgpKTsKLSAgICBpZiAoY2Fs
bGJhY2spCi0gICAgICAgIHNjcmlwdEV4ZWN1dGlvbkNvbnRleHQtPnBvc3RUYXNrKGFkb3B0UHRy
KG5ldyBEaXNwYXRjaENhbGxiYWNrVGFzazxDQiwgQ0JBcmc+KGNhbGxiYWNrLCBhcmcpKSk7Ci19
Ci0KLX0gLy8gbmFtZXNwYWNlCi0KLSNlbmRpZiAvLyBFTkFCTEUoRklMRV9TWVNURU0pCi0KLSNl
bmRpZiAvLyBET01GaWxlU3lzdGVtX2gKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2ZpbGVhcGkvRE9N
RmlsZVN5c3RlbS5pZGwKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvZmlsZWFwaS9ET01G
aWxlU3lzdGVtLmlkbAkocmV2aXNpb24gMTEwNzI2KQorKysgU291cmNlL1dlYkNvcmUvZmlsZWFw
aS9ET01GaWxlU3lzdGVtLmlkbAkod29ya2luZyBjb3B5KQpAQCAtMSw0MSArMCwwIEBACi0vKgot
ICogQ29weXJpZ2h0IChDKSAyMDEwIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0g
KiBDb3B5cmlnaHQgKEMpIDIwMTEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoK
LSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdp
dGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRo
YXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZQotICogbWV0OgotICoKLSAqICAgICAqIFJl
ZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJp
Z2h0Ci0gKiBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIuCi0gKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVz
dCByZXByb2R1Y2UgdGhlIGFib3ZlCi0gKiBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyCi0gKiBpbiB0aGUgZG9jdW1l
bnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCi0gKiBkaXN0
cmlidXRpb24uCi0gKiAgICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9mIEdvb2dsZSBJbmMuIG5vciB0
aGUgbmFtZXMgb2YgaXRzCi0gKiBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBv
ciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbQotICogdGhpcyBzb2Z0d2FyZSB3aXRob3V0
IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJF
IElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCi0g
KiAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElO
RywgQlVUIE5PVAotICogTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJD
SEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCi0gKiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUg
RElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAotICogT1dORVIgT1Ig
Q09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5U
QUwsCi0gKiBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5D
TFVESU5HLCBCVVQgTk9UCi0gKiBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRF
IEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKLSAqIERBVEEsIE9SIFBST0ZJVFM7IE9S
IEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQotICogVEhF
T1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwg
T1IgVE9SVAotICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJ
TiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0gKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFE
VklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLW1vZHVsZSBz
dG9yYWdlIHsKLSAgICBpbnRlcmZhY2UgWwotICAgICAgICBDb25kaXRpb25hbD1GSUxFX1NZU1RF
TSwKLSAgICAgICAgQWN0aXZlRE9NT2JqZWN0LAotICAgICAgICBKU05vU3RhdGljVGFibGVzCi0g
ICAgXSBET01GaWxlU3lzdGVtIHsKLSAgICAgICAgcmVhZG9ubHkgYXR0cmlidXRlIERPTVN0cmlu
ZyBuYW1lOwotICAgICAgICByZWFkb25seSBhdHRyaWJ1dGUgRGlyZWN0b3J5RW50cnkgcm9vdDsK
LSAgICB9OwotfQpJbmRleDogU291cmNlL1dlYkNvcmUvZmlsZWFwaS9ET01GaWxlU3lzdGVtQmFz
ZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvZmlsZWFwaS9ET01GaWxlU3lzdGVt
QmFzZS5jcHAJKHJldmlzaW9uIDExMDcyNikKKysrIFNvdXJjZS9XZWJDb3JlL2ZpbGVhcGkvRE9N
RmlsZVN5c3RlbUJhc2UuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDIwMSArMCwwIEBACi0vKgot
ICogQ29weXJpZ2h0IChDKSAyMDEwIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0g
KgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywg
d2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQg
dGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCi0gKiBtZXQ6Ci0gKgotICogICAgICog
UmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5
cmlnaHQKLSAqIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lci4KLSAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBt
dXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKLSAqIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIKLSAqIGluIHRoZSBkb2N1
bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKLSAqIGRp
c3RyaWJ1dGlvbi4KLSAqICAgICAqIE5laXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xlIEluYy4gbm9y
IHRoZSBuYW1lcyBvZiBpdHMKLSAqIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNl
IG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tCi0gKiB0aGlzIHNvZnR3YXJlIHdpdGhv
dXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgotICoKLSAqIFRISVMgU09GVFdB
UkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMK
LSAqICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVE
SU5HLCBCVVQgTk9UCi0gKiBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1F
UkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IKLSAqIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFS
RSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCi0gKiBPV05FUiBP
UiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURF
TlRBTCwKLSAqIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJ
TkNMVURJTkcsIEJVVCBOT1QKLSAqIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRV
VEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAotICogREFUQSwgT1IgUFJPRklUUzsg
T1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCi0gKiBU
SEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZ
LCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5H
IElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLSAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYg
QURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotI2luY2x1
ZGUgImNvbmZpZy5oIgotI2luY2x1ZGUgIkRPTUZpbGVTeXN0ZW1CYXNlLmgiCi0KLSNpZiBFTkFC
TEUoRklMRV9TWVNURU0pCi0KLSNpbmNsdWRlICJET01GaWxlUGF0aC5oIgotI2luY2x1ZGUgIkRp
cmVjdG9yeUVudHJ5LmgiCi0jaW5jbHVkZSAiRGlyZWN0b3J5UmVhZGVyQmFzZS5oIgotI2luY2x1
ZGUgIkVudHJpZXNDYWxsYmFjay5oIgotI2luY2x1ZGUgIkVudHJ5QXJyYXkuaCIKLSNpbmNsdWRl
ICJFbnRyeUJhc2UuaCIKLSNpbmNsdWRlICJFbnRyeUNhbGxiYWNrLmgiCi0jaW5jbHVkZSAiRXJy
b3JDYWxsYmFjay5oIgotI2luY2x1ZGUgIkZpbGVFcnJvci5oIgotI2luY2x1ZGUgIkZpbGVTeXN0
ZW1DYWxsYmFja3MuaCIKLSNpbmNsdWRlICJNZXRhZGF0YUNhbGxiYWNrLmgiCi0jaW5jbHVkZSAi
U2NyaXB0RXhlY3V0aW9uQ29udGV4dC5oIgotI2luY2x1ZGUgIlZvaWRDYWxsYmFjay5oIgotI2lu
Y2x1ZGUgPHd0Zi9Pd25QdHIuaD4KLQotbmFtZXNwYWNlIFdlYkNvcmUgewotCi1ET01GaWxlU3lz
dGVtQmFzZTo6RE9NRmlsZVN5c3RlbUJhc2UoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCogY29udGV4
dCwgY29uc3QgU3RyaW5nJiBuYW1lLCBQYXNzT3duUHRyPEFzeW5jRmlsZVN5c3RlbT4gYXN5bmNG
aWxlU3lzdGVtKQotICAgIDogbV9jb250ZXh0KGNvbnRleHQpCi0gICAgLCBtX25hbWUobmFtZSkK
LSAgICAsIG1fYXN5bmNGaWxlU3lzdGVtKGFzeW5jRmlsZVN5c3RlbSkKLXsKLX0KLQotRE9NRmls
ZVN5c3RlbUJhc2U6On5ET01GaWxlU3lzdGVtQmFzZSgpCi17Ci19Ci0KLVNlY3VyaXR5T3JpZ2lu
KiBET01GaWxlU3lzdGVtQmFzZTo6c2VjdXJpdHlPcmlnaW4oKSBjb25zdAotewotICAgIHJldHVy
biBtX2NvbnRleHQtPnNlY3VyaXR5T3JpZ2luKCk7Ci19Ci0KLWJvb2wgRE9NRmlsZVN5c3RlbUJh
c2U6OmdldE1ldGFkYXRhKGNvbnN0IEVudHJ5QmFzZSogZW50cnksIFBhc3NSZWZQdHI8TWV0YWRh
dGFDYWxsYmFjaz4gc3VjY2Vzc0NhbGxiYWNrLCBQYXNzUmVmUHRyPEVycm9yQ2FsbGJhY2s+IGVy
cm9yQ2FsbGJhY2spCi17Ci0gICAgbV9hc3luY0ZpbGVTeXN0ZW0tPnJlYWRNZXRhZGF0YShlbnRy
eS0+ZnVsbFBhdGgoKSwgTWV0YWRhdGFDYWxsYmFja3M6OmNyZWF0ZShzdWNjZXNzQ2FsbGJhY2ss
IGVycm9yQ2FsbGJhY2spKTsKLSAgICByZXR1cm4gdHJ1ZTsKLX0KLQotc3RhdGljIGJvb2wgdmVy
aWZ5QW5kR2V0RGVzdGluYXRpb25QYXRoRm9yQ29weU9yTW92ZShjb25zdCBFbnRyeUJhc2UqIHNv
dXJjZSwgRW50cnlCYXNlKiBwYXJlbnQsIGNvbnN0IFN0cmluZyYgbmV3TmFtZSwgU3RyaW5nJiBk
ZXN0aW5hdGlvblBhdGgpCi17Ci0gICAgQVNTRVJUKHNvdXJjZSk7Ci0KLSAgICBpZiAoIXBhcmVu
dCB8fCAhcGFyZW50LT5pc0RpcmVjdG9yeSgpKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAg
ICBpZiAoIW5ld05hbWUuaXNFbXB0eSgpICYmICFET01GaWxlUGF0aDo6aXNWYWxpZE5hbWUobmV3
TmFtZSkpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIC8vIEl0IGlzIGFuIGVycm9yIHRv
IHRyeSB0byBjb3B5IG9yIG1vdmUgYW4gZW50cnkgaW5zaWRlIGl0c2VsZiBhdCBhbnkgZGVwdGgg
aWYgaXQgaXMgYSBkaXJlY3RvcnkuCi0gICAgaWYgKHNvdXJjZS0+aXNEaXJlY3RvcnkoKSAmJiBE
T01GaWxlUGF0aDo6aXNQYXJlbnRPZihzb3VyY2UtPmZ1bGxQYXRoKCksIHBhcmVudC0+ZnVsbFBh
dGgoKSkpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIC8vIEl0IGlzIGFuIGVycm9yIHRv
IGNvcHkgb3IgbW92ZSBhbiBlbnRyeSBpbnRvIGl0cyBwYXJlbnQgaWYgYSBuYW1lIGRpZmZlcmVu
dCBmcm9tIGl0cyBjdXJyZW50IG9uZSBpc24ndCBwcm92aWRlZC4KLSAgICBpZiAoKG5ld05hbWUu
aXNFbXB0eSgpIHx8IHNvdXJjZS0+bmFtZSgpID09IG5ld05hbWUpICYmIERPTUZpbGVQYXRoOjpn
ZXREaXJlY3Rvcnkoc291cmNlLT5mdWxsUGF0aCgpKSA9PSBwYXJlbnQtPmZ1bGxQYXRoKCkpCi0g
ICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIGRlc3RpbmF0aW9uUGF0aCA9IHBhcmVudC0+ZnVs
bFBhdGgoKTsKLSAgICBpZiAoIW5ld05hbWUuaXNFbXB0eSgpKQotICAgICAgICBkZXN0aW5hdGlv
blBhdGggPSBET01GaWxlUGF0aDo6YXBwZW5kKGRlc3RpbmF0aW9uUGF0aCwgbmV3TmFtZSk7Ci0g
ICAgZWxzZQotICAgICAgICBkZXN0aW5hdGlvblBhdGggPSBET01GaWxlUGF0aDo6YXBwZW5kKGRl
c3RpbmF0aW9uUGF0aCwgc291cmNlLT5uYW1lKCkpOwotCi0gICAgcmV0dXJuIHRydWU7Ci19Ci0K
LXN0YXRpYyBib29sIHBhdGhUb0Fic29sdXRlUGF0aChBc3luY0ZpbGVTeXN0ZW06OlR5cGUgdHlw
ZSwgY29uc3QgRW50cnlCYXNlKiBiYXNlLCBTdHJpbmcgcGF0aCwgU3RyaW5nJiBhYnNvbHV0ZVBh
dGgpCi17Ci0gICAgQVNTRVJUKGJhc2UpOwotCi0gICAgaWYgKCFET01GaWxlUGF0aDo6aXNBYnNv
bHV0ZShwYXRoKSkKLSAgICAgICAgcGF0aCA9IERPTUZpbGVQYXRoOjphcHBlbmQoYmFzZS0+ZnVs
bFBhdGgoKSwgcGF0aCk7Ci0gICAgYWJzb2x1dGVQYXRoID0gRE9NRmlsZVBhdGg6OnJlbW92ZUV4
dHJhUGFyZW50UmVmZXJlbmNlcyhwYXRoKTsKLQotICAgIGlmICgodHlwZSA9PSBBc3luY0ZpbGVT
eXN0ZW06OlRlbXBvcmFyeSB8fCB0eXBlID09IEFzeW5jRmlsZVN5c3RlbTo6UGVyc2lzdGVudCkg
JiYgIURPTUZpbGVQYXRoOjppc1ZhbGlkUGF0aChhYnNvbHV0ZVBhdGgpKQotICAgICAgICByZXR1
cm4gZmFsc2U7Ci0gICAgcmV0dXJuIHRydWU7Ci19Ci0KLWJvb2wgRE9NRmlsZVN5c3RlbUJhc2U6
Om1vdmUoY29uc3QgRW50cnlCYXNlKiBzb3VyY2UsIEVudHJ5QmFzZSogcGFyZW50LCBjb25zdCBT
dHJpbmcmIG5ld05hbWUsIFBhc3NSZWZQdHI8RW50cnlDYWxsYmFjaz4gc3VjY2Vzc0NhbGxiYWNr
LCBQYXNzUmVmUHRyPEVycm9yQ2FsbGJhY2s+IGVycm9yQ2FsbGJhY2spCi17Ci0gICAgU3RyaW5n
IGRlc3RpbmF0aW9uUGF0aDsKLSAgICBpZiAoIXZlcmlmeUFuZEdldERlc3RpbmF0aW9uUGF0aEZv
ckNvcHlPck1vdmUoc291cmNlLCBwYXJlbnQsIG5ld05hbWUsIGRlc3RpbmF0aW9uUGF0aCkpCi0g
ICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIG1fYXN5bmNGaWxlU3lzdGVtLT5tb3ZlKHNvdXJj
ZS0+ZnVsbFBhdGgoKSwgZGVzdGluYXRpb25QYXRoLCBFbnRyeUNhbGxiYWNrczo6Y3JlYXRlKHN1
Y2Nlc3NDYWxsYmFjaywgZXJyb3JDYWxsYmFjaywgdGhpcywgZGVzdGluYXRpb25QYXRoLCBzb3Vy
Y2UtPmlzRGlyZWN0b3J5KCkpKTsKLSAgICByZXR1cm4gdHJ1ZTsKLX0KLQotYm9vbCBET01GaWxl
U3lzdGVtQmFzZTo6Y29weShjb25zdCBFbnRyeUJhc2UqIHNvdXJjZSwgRW50cnlCYXNlKiBwYXJl
bnQsIGNvbnN0IFN0cmluZyYgbmV3TmFtZSwgUGFzc1JlZlB0cjxFbnRyeUNhbGxiYWNrPiBzdWNj
ZXNzQ2FsbGJhY2ssIFBhc3NSZWZQdHI8RXJyb3JDYWxsYmFjaz4gZXJyb3JDYWxsYmFjaykKLXsK
LSAgICBTdHJpbmcgZGVzdGluYXRpb25QYXRoOwotICAgIGlmICghdmVyaWZ5QW5kR2V0RGVzdGlu
YXRpb25QYXRoRm9yQ29weU9yTW92ZShzb3VyY2UsIHBhcmVudCwgbmV3TmFtZSwgZGVzdGluYXRp
b25QYXRoKSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgbV9hc3luY0ZpbGVTeXN0ZW0t
PmNvcHkoc291cmNlLT5mdWxsUGF0aCgpLCBkZXN0aW5hdGlvblBhdGgsIEVudHJ5Q2FsbGJhY2tz
OjpjcmVhdGUoc3VjY2Vzc0NhbGxiYWNrLCBlcnJvckNhbGxiYWNrLCB0aGlzLCBkZXN0aW5hdGlv
blBhdGgsIHNvdXJjZS0+aXNEaXJlY3RvcnkoKSkpOwotICAgIHJldHVybiB0cnVlOwotfQotCi1i
b29sIERPTUZpbGVTeXN0ZW1CYXNlOjpyZW1vdmUoY29uc3QgRW50cnlCYXNlKiBlbnRyeSwgUGFz
c1JlZlB0cjxWb2lkQ2FsbGJhY2s+IHN1Y2Nlc3NDYWxsYmFjaywgUGFzc1JlZlB0cjxFcnJvckNh
bGxiYWNrPiBlcnJvckNhbGxiYWNrKQotewotICAgIEFTU0VSVChlbnRyeSk7Ci0gICAgLy8gV2Ug
ZG9uJ3QgYWxsb3cgY2FsbGluZyByZW1vdmUoKSBvbiB0aGUgcm9vdCBkaXJlY3RvcnkuCi0gICAg
aWYgKGVudHJ5LT5mdWxsUGF0aCgpID09IFN0cmluZyhET01GaWxlUGF0aDo6cm9vdCkpCi0gICAg
ICAgIHJldHVybiBmYWxzZTsKLSAgICBtX2FzeW5jRmlsZVN5c3RlbS0+cmVtb3ZlKGVudHJ5LT5m
dWxsUGF0aCgpLCBWb2lkQ2FsbGJhY2tzOjpjcmVhdGUoc3VjY2Vzc0NhbGxiYWNrLCBlcnJvckNh
bGxiYWNrKSk7Ci0gICAgcmV0dXJuIHRydWU7Ci19Ci0KLWJvb2wgRE9NRmlsZVN5c3RlbUJhc2U6
OnJlbW92ZVJlY3Vyc2l2ZWx5KGNvbnN0IEVudHJ5QmFzZSogZW50cnksIFBhc3NSZWZQdHI8Vm9p
ZENhbGxiYWNrPiBzdWNjZXNzQ2FsbGJhY2ssIFBhc3NSZWZQdHI8RXJyb3JDYWxsYmFjaz4gZXJy
b3JDYWxsYmFjaykKLXsKLSAgICBBU1NFUlQoZW50cnkgJiYgZW50cnktPmlzRGlyZWN0b3J5KCkp
OwotICAgIC8vIFdlIGRvbid0IGFsbG93IGNhbGxpbmcgcmVtb3ZlKCkgb24gdGhlIHJvb3QgZGly
ZWN0b3J5LgotICAgIGlmIChlbnRyeS0+ZnVsbFBhdGgoKSA9PSBTdHJpbmcoRE9NRmlsZVBhdGg6
OnJvb3QpKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgbV9hc3luY0ZpbGVTeXN0ZW0tPnJl
bW92ZVJlY3Vyc2l2ZWx5KGVudHJ5LT5mdWxsUGF0aCgpLCBWb2lkQ2FsbGJhY2tzOjpjcmVhdGUo
c3VjY2Vzc0NhbGxiYWNrLCBlcnJvckNhbGxiYWNrKSk7Ci0gICAgcmV0dXJuIHRydWU7Ci19Ci0K
LWJvb2wgRE9NRmlsZVN5c3RlbUJhc2U6OmdldFBhcmVudChjb25zdCBFbnRyeUJhc2UqIGVudHJ5
LCBQYXNzUmVmUHRyPEVudHJ5Q2FsbGJhY2s+IHN1Y2Nlc3NDYWxsYmFjaywgUGFzc1JlZlB0cjxF
cnJvckNhbGxiYWNrPiBlcnJvckNhbGxiYWNrKQotewotICAgIEFTU0VSVChlbnRyeSk7Ci0gICAg
U3RyaW5nIHBhdGggPSBET01GaWxlUGF0aDo6Z2V0RGlyZWN0b3J5KGVudHJ5LT5mdWxsUGF0aCgp
KTsKLQotICAgIG1fYXN5bmNGaWxlU3lzdGVtLT5kaXJlY3RvcnlFeGlzdHMocGF0aCwgRW50cnlD
YWxsYmFja3M6OmNyZWF0ZShzdWNjZXNzQ2FsbGJhY2ssIGVycm9yQ2FsbGJhY2ssIHRoaXMsIHBh
dGgsIHRydWUpKTsKLSAgICByZXR1cm4gdHJ1ZTsKLX0KLQotYm9vbCBET01GaWxlU3lzdGVtQmFz
ZTo6Z2V0RmlsZShjb25zdCBFbnRyeUJhc2UqIGVudHJ5LCBjb25zdCBTdHJpbmcmIHBhdGgsIFBh
c3NSZWZQdHI8V2ViS2l0RmxhZ3M+IGZsYWdzLCBQYXNzUmVmUHRyPEVudHJ5Q2FsbGJhY2s+IHN1
Y2Nlc3NDYWxsYmFjaywgUGFzc1JlZlB0cjxFcnJvckNhbGxiYWNrPiBlcnJvckNhbGxiYWNrKQot
ewotICAgIFN0cmluZyBhYnNvbHV0ZVBhdGg7Ci0gICAgaWYgKCFwYXRoVG9BYnNvbHV0ZVBhdGgo
bV9hc3luY0ZpbGVTeXN0ZW0tPnR5cGUoKSwgZW50cnksIHBhdGgsIGFic29sdXRlUGF0aCkpCi0g
ICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIE93blB0cjxFbnRyeUNhbGxiYWNrcz4gY2FsbGJh
Y2tzID0gRW50cnlDYWxsYmFja3M6OmNyZWF0ZShzdWNjZXNzQ2FsbGJhY2ssIGVycm9yQ2FsbGJh
Y2ssIHRoaXMsIGFic29sdXRlUGF0aCwgZmFsc2UpOwotICAgIGlmIChmbGFncyAmJiBmbGFncy0+
aXNDcmVhdGUoKSkKLSAgICAgICAgbV9hc3luY0ZpbGVTeXN0ZW0tPmNyZWF0ZUZpbGUoYWJzb2x1
dGVQYXRoLCBmbGFncy0+aXNFeGNsdXNpdmUoKSwgY2FsbGJhY2tzLnJlbGVhc2UoKSk7Ci0gICAg
ZWxzZQotICAgICAgICBtX2FzeW5jRmlsZVN5c3RlbS0+ZmlsZUV4aXN0cyhhYnNvbHV0ZVBhdGgs
IGNhbGxiYWNrcy5yZWxlYXNlKCkpOwotICAgIHJldHVybiB0cnVlOwotfQotCi1ib29sIERPTUZp
bGVTeXN0ZW1CYXNlOjpnZXREaXJlY3RvcnkoY29uc3QgRW50cnlCYXNlKiBlbnRyeSwgY29uc3Qg
U3RyaW5nJiBwYXRoLCBQYXNzUmVmUHRyPFdlYktpdEZsYWdzPiBmbGFncywgUGFzc1JlZlB0cjxF
bnRyeUNhbGxiYWNrPiBzdWNjZXNzQ2FsbGJhY2ssIFBhc3NSZWZQdHI8RXJyb3JDYWxsYmFjaz4g
ZXJyb3JDYWxsYmFjaykKLXsKLSAgICBTdHJpbmcgYWJzb2x1dGVQYXRoOwotICAgIGlmICghcGF0
aFRvQWJzb2x1dGVQYXRoKG1fYXN5bmNGaWxlU3lzdGVtLT50eXBlKCksIGVudHJ5LCBwYXRoLCBh
YnNvbHV0ZVBhdGgpKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICBPd25QdHI8RW50cnlD
YWxsYmFja3M+IGNhbGxiYWNrcyA9IEVudHJ5Q2FsbGJhY2tzOjpjcmVhdGUoc3VjY2Vzc0NhbGxi
YWNrLCBlcnJvckNhbGxiYWNrLCB0aGlzLCBhYnNvbHV0ZVBhdGgsIHRydWUpOwotICAgIGlmIChm
bGFncyAmJiBmbGFncy0+aXNDcmVhdGUoKSkKLSAgICAgICAgbV9hc3luY0ZpbGVTeXN0ZW0tPmNy
ZWF0ZURpcmVjdG9yeShhYnNvbHV0ZVBhdGgsIGZsYWdzLT5pc0V4Y2x1c2l2ZSgpLCBjYWxsYmFj
a3MucmVsZWFzZSgpKTsKLSAgICBlbHNlCi0gICAgICAgIG1fYXN5bmNGaWxlU3lzdGVtLT5kaXJl
Y3RvcnlFeGlzdHMoYWJzb2x1dGVQYXRoLCBjYWxsYmFja3MucmVsZWFzZSgpKTsKLSAgICByZXR1
cm4gdHJ1ZTsKLX0KLQotYm9vbCBET01GaWxlU3lzdGVtQmFzZTo6cmVhZERpcmVjdG9yeShQYXNz
UmVmUHRyPERpcmVjdG9yeVJlYWRlckJhc2U+IHJlYWRlciwgY29uc3QgU3RyaW5nJiBwYXRoLCBQ
YXNzUmVmUHRyPEVudHJpZXNDYWxsYmFjaz4gc3VjY2Vzc0NhbGxiYWNrLCBQYXNzUmVmUHRyPEVy
cm9yQ2FsbGJhY2s+IGVycm9yQ2FsbGJhY2spCi17Ci0gICAgQVNTRVJUKERPTUZpbGVQYXRoOjpp
c0Fic29sdXRlKHBhdGgpKTsKLSAgICBtX2FzeW5jRmlsZVN5c3RlbS0+cmVhZERpcmVjdG9yeShw
YXRoLCBFbnRyaWVzQ2FsbGJhY2tzOjpjcmVhdGUoc3VjY2Vzc0NhbGxiYWNrLCBlcnJvckNhbGxi
YWNrLCByZWFkZXIsIHBhdGgpKTsKLSAgICByZXR1cm4gdHJ1ZTsKLX0KLQotfSAvLyBuYW1lc3Bh
Y2UgV2ViQ29yZQotCi0jZW5kaWYgLy8gRU5BQkxFKEZJTEVfU1lTVEVNKQpJbmRleDogU291cmNl
L1dlYkNvcmUvZmlsZWFwaS9ET01GaWxlU3lzdGVtQmFzZS5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9XZWJDb3JlL2ZpbGVhcGkvRE9NRmlsZVN5c3RlbUJhc2UuaAkocmV2aXNpb24gMTEwNzI2KQor
KysgU291cmNlL1dlYkNvcmUvZmlsZWFwaS9ET01GaWxlU3lzdGVtQmFzZS5oCSh3b3JraW5nIGNv
cHkpCkBAIC0xLDk0ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTAgR29vZ2xlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGlu
IHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlv
biwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBh
cmUKLSAqIG1ldDoKLSAqCi0gKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUg
bXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogICAgICogUmVkaXN0
cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQotICogY29w
eXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lcgotICogaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFs
cyBwcm92aWRlZCB3aXRoIHRoZQotICogZGlzdHJpYnV0aW9uLgotICogICAgICogTmVpdGhlciB0
aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0cwotICogY29udHJpYnV0
b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZy
b20KLSAqIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1p
c3Npb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hU
IEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUwotICogIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1Ig
SU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKLSAqIExJTUlURUQgVE8sIFRI
RSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgot
ICogQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxM
IFRIRSBDT1BZUklHSFQKLSAqIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFO
WSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAotICogU1BFQ0lBTCwgRVhFTVBMQVJZLCBP
UiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAotICogTElNSVRFRCBU
TywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBV
U0UsCi0gKiBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VW
RVIgQ0FVU0VEIEFORCBPTiBBTlkKLSAqIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4g
Q09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElH
RU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotICog
T0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBT
VUNIIERBTUFHRS4KLSAqLwotCi0jaWZuZGVmIERPTUZpbGVTeXN0ZW1CYXNlX2gKLSNkZWZpbmUg
RE9NRmlsZVN5c3RlbUJhc2VfaAotCi0jaWYgRU5BQkxFKEZJTEVfU1lTVEVNKQotCi0jaW5jbHVk
ZSAiQXN5bmNGaWxlU3lzdGVtLmgiCi0jaW5jbHVkZSAiV2ViS2l0RmxhZ3MuaCIKLSNpbmNsdWRl
ICJQbGF0Zm9ybVN0cmluZy5oIgotI2luY2x1ZGUgPHd0Zi9QYXNzUmVmUHRyLmg+Ci0jaW5jbHVk
ZSA8d3RmL1JlZkNvdW50ZWQuaD4KLQotbmFtZXNwYWNlIFdlYkNvcmUgewotCi1jbGFzcyBEaXJl
Y3RvcnlFbnRyeTsKLWNsYXNzIERpcmVjdG9yeVJlYWRlckJhc2U7Ci1jbGFzcyBFbnRyaWVzQ2Fs
bGJhY2s7Ci1jbGFzcyBFbnRyeUJhc2U7Ci1jbGFzcyBFbnRyeUNhbGxiYWNrOwotY2xhc3MgRXJy
b3JDYWxsYmFjazsKLWNsYXNzIEtVUkw7Ci1jbGFzcyBNZXRhZGF0YUNhbGxiYWNrOwotY2xhc3Mg
U2NyaXB0RXhlY3V0aW9uQ29udGV4dDsKLWNsYXNzIFNlY3VyaXR5T3JpZ2luOwotY2xhc3MgVm9p
ZENhbGxiYWNrOwotCi0vLyBBIGNvbW1vbiBiYXNlIGNsYXNzIGZvciBET01GaWxlU3lzdGVtIGFu
ZCBET01GaWxlU3lzdGVtU3luYy4KLWNsYXNzIERPTUZpbGVTeXN0ZW1CYXNlIDogcHVibGljIFJl
ZkNvdW50ZWQ8RE9NRmlsZVN5c3RlbUJhc2U+IHsKLXB1YmxpYzoKLSAgICBzdGF0aWMgUGFzc1Jl
ZlB0cjxET01GaWxlU3lzdGVtQmFzZT4gY3JlYXRlKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqIGNv
bnRleHQsIGNvbnN0IFN0cmluZyYgbmFtZSwgUGFzc093blB0cjxBc3luY0ZpbGVTeXN0ZW0+IGFz
eW5jRmlsZVN5c3RlbSkKLSAgICB7Ci0gICAgICAgIHJldHVybiBhZG9wdFJlZihuZXcgRE9NRmls
ZVN5c3RlbUJhc2UoY29udGV4dCwgbmFtZSwgYXN5bmNGaWxlU3lzdGVtKSk7Ci0gICAgfQotICAg
IHZpcnR1YWwgfkRPTUZpbGVTeXN0ZW1CYXNlKCk7Ci0KLSAgICBjb25zdCBTdHJpbmcmIG5hbWUo
KSBjb25zdCB7IHJldHVybiBtX25hbWU7IH0KLSAgICBBc3luY0ZpbGVTeXN0ZW0qIGFzeW5jRmls
ZVN5c3RlbSgpIGNvbnN0IHsgcmV0dXJuIG1fYXN5bmNGaWxlU3lzdGVtLmdldCgpOyB9Ci0gICAg
U2VjdXJpdHlPcmlnaW4qIHNlY3VyaXR5T3JpZ2luKCkgY29uc3Q7Ci0KLSAgICAvLyBBY3R1YWwg
RmlsZVN5c3RlbSBBUEkgaW1wbGVtZW50YXRpb25zLiAgQWxsIHRoZSB2YWxpZGl0eSBjaGVja3Mg
b24gdmlydHVhbCBwYXRocyBhcmUgZG9uZSBhdCB0aGlzIGxldmVsLgotICAgIC8vIFRoZXkgcmV0
dXJuIGZhbHNlIGZvciBpbW1lZGlhdGUgZXJyb3JzIHRoYXQgZG9uJ3QgaW52b2x2ZSBsb3dlciBB
c3luY0ZpbGVTeXN0ZW0gbGF5ZXIgKGUuZy4gZm9yIG5hbWUgdmFsaWRhdGlvbiBlcnJvcnMpLiAg
T3RoZXJ3aXNlIHRoZXkgcmV0dXJuIHRydWUgKGJ1dCBsYXRlciBtYXkgY2FsbCBiYWNrIHdpdGgg
YW4gcnVudGltZSBlcnJvcikuCi0gICAgYm9vbCBnZXRNZXRhZGF0YShjb25zdCBFbnRyeUJhc2Uq
LCBQYXNzUmVmUHRyPE1ldGFkYXRhQ2FsbGJhY2s+LCBQYXNzUmVmUHRyPEVycm9yQ2FsbGJhY2s+
KTsKLSAgICBib29sIG1vdmUoY29uc3QgRW50cnlCYXNlKiBzb3VyY2UsIEVudHJ5QmFzZSogcGFy
ZW50LCBjb25zdCBTdHJpbmcmIG5hbWUsIFBhc3NSZWZQdHI8RW50cnlDYWxsYmFjaz4sIFBhc3NS
ZWZQdHI8RXJyb3JDYWxsYmFjaz4pOwotICAgIGJvb2wgY29weShjb25zdCBFbnRyeUJhc2UqIHNv
dXJjZSwgRW50cnlCYXNlKiBwYXJlbnQsIGNvbnN0IFN0cmluZyYgbmFtZSwgUGFzc1JlZlB0cjxF
bnRyeUNhbGxiYWNrPiwgUGFzc1JlZlB0cjxFcnJvckNhbGxiYWNrPik7Ci0gICAgYm9vbCByZW1v
dmUoY29uc3QgRW50cnlCYXNlKiwgUGFzc1JlZlB0cjxWb2lkQ2FsbGJhY2s+LCBQYXNzUmVmUHRy
PEVycm9yQ2FsbGJhY2s+KTsKLSAgICBib29sIHJlbW92ZVJlY3Vyc2l2ZWx5KGNvbnN0IEVudHJ5
QmFzZSosIFBhc3NSZWZQdHI8Vm9pZENhbGxiYWNrPiwgUGFzc1JlZlB0cjxFcnJvckNhbGxiYWNr
Pik7Ci0gICAgYm9vbCBnZXRQYXJlbnQoY29uc3QgRW50cnlCYXNlKiwgUGFzc1JlZlB0cjxFbnRy
eUNhbGxiYWNrPiwgUGFzc1JlZlB0cjxFcnJvckNhbGxiYWNrPik7Ci0gICAgYm9vbCBnZXRGaWxl
KGNvbnN0IEVudHJ5QmFzZSosIGNvbnN0IFN0cmluZyYgcGF0aCwgUGFzc1JlZlB0cjxXZWJLaXRG
bGFncz4sIFBhc3NSZWZQdHI8RW50cnlDYWxsYmFjaz4sIFBhc3NSZWZQdHI8RXJyb3JDYWxsYmFj
az4pOwotICAgIGJvb2wgZ2V0RGlyZWN0b3J5KGNvbnN0IEVudHJ5QmFzZSosIGNvbnN0IFN0cmlu
ZyYgcGF0aCwgUGFzc1JlZlB0cjxXZWJLaXRGbGFncz4sIFBhc3NSZWZQdHI8RW50cnlDYWxsYmFj
az4sIFBhc3NSZWZQdHI8RXJyb3JDYWxsYmFjaz4pOwotICAgIGJvb2wgcmVhZERpcmVjdG9yeShQ
YXNzUmVmUHRyPERpcmVjdG9yeVJlYWRlckJhc2U+LCBjb25zdCBTdHJpbmcmIHBhdGgsIFBhc3NS
ZWZQdHI8RW50cmllc0NhbGxiYWNrPiwgUGFzc1JlZlB0cjxFcnJvckNhbGxiYWNrPik7Ci0KLXBy
b3RlY3RlZDoKLSAgICBET01GaWxlU3lzdGVtQmFzZShTY3JpcHRFeGVjdXRpb25Db250ZXh0Kiwg
Y29uc3QgU3RyaW5nJiBuYW1lLCBQYXNzT3duUHRyPEFzeW5jRmlsZVN5c3RlbT4pOwotICAgIGZy
aWVuZCBjbGFzcyBET01GaWxlU3lzdGVtU3luYzsKLQotICAgIFNjcmlwdEV4ZWN1dGlvbkNvbnRl
eHQqIG1fY29udGV4dDsKLSAgICBTdHJpbmcgbV9uYW1lOwotICAgIG11dGFibGUgT3duUHRyPEFz
eW5jRmlsZVN5c3RlbT4gbV9hc3luY0ZpbGVTeXN0ZW07Ci19OwotCi19IC8vIG5hbWVzcGFjZSBX
ZWJDb3JlCi0KLSNlbmRpZiAvLyBFTkFCTEUoRklMRV9TWVNURU0pCi0KLSNlbmRpZiAvLyBET01G
aWxlU3lzdGVtQmFzZV9oCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9maWxlYXBpL0RPTUZpbGVTeXN0
ZW1TeW5jLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9maWxlYXBpL0RPTUZpbGVT
eXN0ZW1TeW5jLmNwcAkocmV2aXNpb24gMTEwNzI2KQorKysgU291cmNlL1dlYkNvcmUvZmlsZWFw
aS9ET01GaWxlU3lzdGVtU3luYy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsMjQzICswLDAgQEAK
LS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTAgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv
cm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92
aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUKLSAqIG1ldDoKLSAqCi0gKiAg
ICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3Zl
IGNvcHlyaWdodAotICogbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyLgotICogICAgICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBm
b3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQotICogY29weXJpZ2h0IG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lcgotICogaW4gdGhl
IGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQot
ICogZGlzdHJpYnV0aW9uLgotICogICAgICogTmVpdGhlciB0aGUgbmFtZSBvZiBHb29nbGUgSW5j
LiBub3IgdGhlIG5hbWVzIG9mIGl0cwotICogY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVu
ZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20KLSAqIHRoaXMgc29mdHdhcmUg
d2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCi0gKgotICogVEhJUyBT
T0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJV
VE9SUwotICogIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJ
TkNMVURJTkcsIEJVVCBOT1QKLSAqIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMg
T0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgotICogQSBQQVJUSUNVTEFSIFBVUlBP
U0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKLSAqIE9X
TkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJ
TkNJREVOVEFMLAotICogU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFH
RVMgKElOQ0xVRElORywgQlVUIE5PVAotICogTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VC
U1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCi0gKiBEQVRBLCBPUiBQUk9G
SVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkK
LSAqIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFC
SUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFS
SVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZF
TiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0j
aW5jbHVkZSAiY29uZmlnLmgiCi0jaW5jbHVkZSAiRE9NRmlsZVN5c3RlbVN5bmMuaCIKLQotI2lm
IEVOQUJMRShGSUxFX1NZU1RFTSkKLQotI2luY2x1ZGUgIkFzeW5jRmlsZVN5c3RlbS5oIgotI2lu
Y2x1ZGUgIkFzeW5jRmlsZVdyaXRlci5oIgotI2luY2x1ZGUgIkRPTUZpbGVQYXRoLmgiCi0jaW5j
bHVkZSAiRGlyZWN0b3J5RW50cnlTeW5jLmgiCi0jaW5jbHVkZSAiRXJyb3JDYWxsYmFjay5oIgot
I2luY2x1ZGUgIkZpbGUuaCIKLSNpbmNsdWRlICJGaWxlRW50cnlTeW5jLmgiCi0jaW5jbHVkZSAi
RmlsZUVycm9yLmgiCi0jaW5jbHVkZSAiRmlsZUV4Y2VwdGlvbi5oIgotI2luY2x1ZGUgIkZpbGVN
ZXRhZGF0YS5oIgotI2luY2x1ZGUgIkZpbGVTeXN0ZW1DYWxsYmFja3MuaCIKLSNpbmNsdWRlICJG
aWxlV3JpdGVyQmFzZUNhbGxiYWNrLmgiCi0jaW5jbHVkZSAiRmlsZVdyaXRlclN5bmMuaCIKLQot
bmFtZXNwYWNlIFdlYkNvcmUgewotCi1jbGFzcyBGaWxlV3JpdGVyQmFzZTsKLQotUGFzc1JlZlB0
cjxET01GaWxlU3lzdGVtU3luYz4gRE9NRmlsZVN5c3RlbVN5bmM6OmNyZWF0ZShET01GaWxlU3lz
dGVtQmFzZSogZmlsZVN5c3RlbSkKLXsKLSAgICByZXR1cm4gYWRvcHRSZWYobmV3IERPTUZpbGVT
eXN0ZW1TeW5jKGZpbGVTeXN0ZW0tPm1fY29udGV4dCwgZmlsZVN5c3RlbS0+bV9uYW1lLCBmaWxl
U3lzdGVtLT5tX2FzeW5jRmlsZVN5c3RlbS5yZWxlYXNlKCkpKTsKLX0KLQotRE9NRmlsZVN5c3Rl
bVN5bmM6OkRPTUZpbGVTeXN0ZW1TeW5jKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqIGNvbnRleHQs
IGNvbnN0IFN0cmluZyYgbmFtZSwgUGFzc093blB0cjxBc3luY0ZpbGVTeXN0ZW0+IGFzeW5jRmls
ZVN5c3RlbSkKLSAgICA6IERPTUZpbGVTeXN0ZW1CYXNlKGNvbnRleHQsIG5hbWUsIGFzeW5jRmls
ZVN5c3RlbSkKLXsKLX0KLQotRE9NRmlsZVN5c3RlbVN5bmM6On5ET01GaWxlU3lzdGVtU3luYygp
Ci17Ci19Ci0KLVBhc3NSZWZQdHI8RGlyZWN0b3J5RW50cnlTeW5jPiBET01GaWxlU3lzdGVtU3lu
Yzo6cm9vdCgpCi17Ci0gICAgcmV0dXJuIERpcmVjdG9yeUVudHJ5U3luYzo6Y3JlYXRlKHRoaXMs
IERPTUZpbGVQYXRoOjpyb290KTsKLX0KLQotbmFtZXNwYWNlIHsKLQotY2xhc3MgQ3JlYXRlRmls
ZUhlbHBlciA6IHB1YmxpYyBBc3luY0ZpbGVTeXN0ZW1DYWxsYmFja3MgewotcHVibGljOgotICAg
IGNsYXNzIENyZWF0ZUZpbGVSZXN1bHQgOiBwdWJsaWMgUmVmQ291bnRlZDxDcmVhdGVGaWxlUmVz
dWx0PiB7Ci0gICAgICBwdWJsaWM6Ci0gICAgICAgIHN0YXRpYyBQYXNzUmVmUHRyPENyZWF0ZUZp
bGVSZXN1bHQ+IGNyZWF0ZSgpCi0gICAgICAgIHsKLSAgICAgICAgICAgIHJldHVybiBhZG9wdFJl
ZihuZXcgQ3JlYXRlRmlsZVJlc3VsdCgpKTsKLSAgICAgICAgfQotCi0gICAgICAgIGJvb2wgbV9m
YWlsZWQ7Ci0gICAgICAgIGludCBtX2NvZGU7Ci0gICAgICAgIFJlZlB0cjxGaWxlPiBtX2ZpbGU7
Ci0KLSAgICAgIHByaXZhdGU6Ci0gICAgICAgIENyZWF0ZUZpbGVSZXN1bHQoKQotICAgICAgICAg
ICAgOiBtX2ZhaWxlZChmYWxzZSkKLSAgICAgICAgICAgICwgbV9jb2RlKDApCi0gICAgICAgIHsK
LSAgICAgICAgfQotCi0gICAgICAgIH5DcmVhdGVGaWxlUmVzdWx0KCkKLSAgICAgICAgewotICAg
ICAgICB9Ci0gICAgICAgIGZyaWVuZCBjbGFzcyBXVEY6OlJlZkNvdW50ZWQ8Q3JlYXRlRmlsZVJl
c3VsdD47Ci0gICAgfTsKLQotICAgIHN0YXRpYyBQYXNzT3duUHRyPENyZWF0ZUZpbGVIZWxwZXI+
IGNyZWF0ZShQYXNzUmVmUHRyPENyZWF0ZUZpbGVSZXN1bHQ+IHJlc3VsdCwgY29uc3QgU3RyaW5n
JiBuYW1lKQotICAgIHsKLSAgICAgICAgcmV0dXJuIGFkb3B0UHRyKG5ldyBDcmVhdGVGaWxlSGVs
cGVyKHJlc3VsdCwgbmFtZSkpOwotICAgIH0KLQotICAgIHZpcnR1YWwgdm9pZCBkaWRGYWlsKGlu
dCBjb2RlKQotICAgIHsKLSAgICAgICAgbV9yZXN1bHQtPm1fZmFpbGVkID0gdHJ1ZTsKLSAgICAg
ICAgbV9yZXN1bHQtPm1fY29kZSA9IGNvZGU7Ci0gICAgfQotCi0gICAgdmlydHVhbCB+Q3JlYXRl
RmlsZUhlbHBlcigpCi0gICAgewotICAgIH0KLQotICAgIHZvaWQgZGlkUmVhZE1ldGFkYXRhKGNv
bnN0IEZpbGVNZXRhZGF0YSYgbWV0YWRhdGEpCi0gICAgewotICAgICAgICBtX3Jlc3VsdC0+bV9m
aWxlID0gRmlsZTo6Y3JlYXRlV2l0aE5hbWUobWV0YWRhdGEucGxhdGZvcm1QYXRoLCBtX25hbWUp
OwotICAgIH0KLXByaXZhdGU6Ci0gICAgQ3JlYXRlRmlsZUhlbHBlcihQYXNzUmVmUHRyPENyZWF0
ZUZpbGVSZXN1bHQ+IHJlc3VsdCwgY29uc3QgU3RyaW5nJiBuYW1lKQotICAgICAgICA6IG1fcmVz
dWx0KHJlc3VsdCkKLSAgICAgICAgLCBtX25hbWUobmFtZSkKLSAgICB7Ci0gICAgfQotCi0gICAg
UmVmUHRyPENyZWF0ZUZpbGVSZXN1bHQ+IG1fcmVzdWx0OwotICAgIFN0cmluZyBtX25hbWU7Ci19
OwotCi19IC8vIG5hbWVzcGFjZQotCi1QYXNzUmVmUHRyPEZpbGU+IERPTUZpbGVTeXN0ZW1TeW5j
OjpjcmVhdGVGaWxlKGNvbnN0IEZpbGVFbnRyeVN5bmMqIGZpbGVFbnRyeSwgRXhjZXB0aW9uQ29k
ZSYgZWMpCi17Ci0gICAgZWMgPSAwOwotICAgIFJlZlB0cjxDcmVhdGVGaWxlSGVscGVyOjpDcmVh
dGVGaWxlUmVzdWx0PiByZXN1bHQoQ3JlYXRlRmlsZUhlbHBlcjo6Q3JlYXRlRmlsZVJlc3VsdDo6
Y3JlYXRlKCkpOwotICAgIG1fYXN5bmNGaWxlU3lzdGVtLT5jcmVhdGVTbmFwc2hvdEZpbGVBbmRS
ZWFkTWV0YWRhdGEoZmlsZUVudHJ5LT5mdWxsUGF0aCgpLCBDcmVhdGVGaWxlSGVscGVyOjpjcmVh
dGUocmVzdWx0LCBmaWxlRW50cnktPm5hbWUoKSkpOwotICAgIGlmICghbV9hc3luY0ZpbGVTeXN0
ZW0tPndhaXRGb3JPcGVyYXRpb25Ub0NvbXBsZXRlKCkpIHsKLSAgICAgICAgZWMgPSBGaWxlRXhj
ZXB0aW9uOjpBQk9SVF9FUlI7Ci0gICAgICAgIHJldHVybiAwOwotICAgIH0KLSAgICBpZiAocmVz
dWx0LT5tX2ZhaWxlZCkgewotICAgICAgICBlYyA9IHJlc3VsdC0+bV9jb2RlOwotICAgICAgICBy
ZXR1cm4gMDsKLSAgICB9Ci0gICAgcmV0dXJuIHJlc3VsdC0+bV9maWxlOwotfQotCi1uYW1lc3Bh
Y2UgewotCi1jbGFzcyBSZWNlaXZlRmlsZVdyaXRlckNhbGxiYWNrIDogcHVibGljIEZpbGVXcml0
ZXJCYXNlQ2FsbGJhY2sgewotcHVibGljOgotICAgIHN0YXRpYyBQYXNzUmVmUHRyPFJlY2VpdmVG
aWxlV3JpdGVyQ2FsbGJhY2s+IGNyZWF0ZSgpCi0gICAgewotICAgICAgICByZXR1cm4gYWRvcHRS
ZWYobmV3IFJlY2VpdmVGaWxlV3JpdGVyQ2FsbGJhY2soKSk7Ci0gICAgfQotCi0gICAgYm9vbCBo
YW5kbGVFdmVudChGaWxlV3JpdGVyQmFzZSogZmlsZVdyaXRlckJhc2UpCi0gICAgewotI2lmbmRl
ZiBOREVCVUcKLSAgICAgICAgbV9maWxlV3JpdGVyQmFzZSA9IGZpbGVXcml0ZXJCYXNlOwotI2Vs
c2UKLSAgICAgICAgQVNTRVJUX1VOVVNFRChmaWxlV3JpdGVyQmFzZSwgZmlsZVdyaXRlckJhc2Up
OwotI2VuZGlmCi0gICAgICAgIHJldHVybiB0cnVlOwotICAgIH0KLQotI2lmbmRlZiBOREVCVUcK
LSAgICBGaWxlV3JpdGVyQmFzZSogZmlsZVdyaXRlckJhc2UoKQotICAgIHsKLSAgICAgICAgcmV0
dXJuIG1fZmlsZVdyaXRlckJhc2U7Ci0gICAgfQotI2VuZGlmCi0KLXByaXZhdGU6Ci0gICAgUmVj
ZWl2ZUZpbGVXcml0ZXJDYWxsYmFjaygpCi0jaWZuZGVmIE5ERUJVRwotICAgICAgICA6IG1fZmls
ZVdyaXRlckJhc2UoMCkKLSNlbmRpZgotICAgIHsKLSAgICB9Ci0KLSNpZm5kZWYgTkRFQlVHCi0g
ICAgRmlsZVdyaXRlckJhc2UqIG1fZmlsZVdyaXRlckJhc2U7Ci0jZW5kaWYKLX07Ci0KLWNsYXNz
IExvY2FsRXJyb3JDYWxsYmFjayA6IHB1YmxpYyBFcnJvckNhbGxiYWNrIHsKLXB1YmxpYzoKLSAg
ICBzdGF0aWMgUGFzc1JlZlB0cjxMb2NhbEVycm9yQ2FsbGJhY2s+IGNyZWF0ZSgpCi0gICAgewot
ICAgICAgICByZXR1cm4gYWRvcHRSZWYobmV3IExvY2FsRXJyb3JDYWxsYmFjaygpKTsKLSAgICB9
Ci0KLSAgICBib29sIGhhbmRsZUV2ZW50KEZpbGVFcnJvciogZXJyb3IpCi0gICAgewotICAgICAg
ICBtX2Vycm9yID0gZXJyb3I7Ci0gICAgICAgIHJldHVybiB0cnVlOwotICAgIH0KLQotICAgIEZp
bGVFcnJvciogZXJyb3IoKQotICAgIHsKLSAgICAgICAgcmV0dXJuIG1fZXJyb3IuZ2V0KCk7Ci0g
ICAgfQotCi1wcml2YXRlOgotICAgIExvY2FsRXJyb3JDYWxsYmFjaygpCi0gICAgewotICAgIH0K
LSAgICBSZWZQdHI8RmlsZUVycm9yPiBtX2Vycm9yOwotfTsKLQotfQotCi1QYXNzUmVmUHRyPEZp
bGVXcml0ZXJTeW5jPiBET01GaWxlU3lzdGVtU3luYzo6Y3JlYXRlV3JpdGVyKGNvbnN0IEZpbGVF
bnRyeVN5bmMqIGZpbGVFbnRyeSwgRXhjZXB0aW9uQ29kZSYgZWMpCi17Ci0gICAgQVNTRVJUKGZp
bGVFbnRyeSk7Ci0gICAgZWMgPSAwOwotCi0KLSAgICBSZWZQdHI8RmlsZVdyaXRlclN5bmM+IGZp
bGVXcml0ZXIgPSBGaWxlV3JpdGVyU3luYzo6Y3JlYXRlKCk7Ci0gICAgUmVmUHRyPFJlY2VpdmVG
aWxlV3JpdGVyQ2FsbGJhY2s+IHN1Y2Nlc3NDYWxsYmFjayA9IFJlY2VpdmVGaWxlV3JpdGVyQ2Fs
bGJhY2s6OmNyZWF0ZSgpOwotICAgIFJlZlB0cjxMb2NhbEVycm9yQ2FsbGJhY2s+IGVycm9yQ2Fs
bGJhY2sgPSBMb2NhbEVycm9yQ2FsbGJhY2s6OmNyZWF0ZSgpOwotCi0gICAgT3duUHRyPEZpbGVX
cml0ZXJCYXNlQ2FsbGJhY2tzPiBjYWxsYmFja3MgPSBGaWxlV3JpdGVyQmFzZUNhbGxiYWNrczo6
Y3JlYXRlKGZpbGVXcml0ZXIsIHN1Y2Nlc3NDYWxsYmFjaywgZXJyb3JDYWxsYmFjayk7Ci0gICAg
bV9hc3luY0ZpbGVTeXN0ZW0tPmNyZWF0ZVdyaXRlcihmaWxlV3JpdGVyLmdldCgpLCBmaWxlRW50
cnktPmZ1bGxQYXRoKCksIGNhbGxiYWNrcy5yZWxlYXNlKCkpOwotICAgIGlmICghbV9hc3luY0Zp
bGVTeXN0ZW0tPndhaXRGb3JPcGVyYXRpb25Ub0NvbXBsZXRlKCkpIHsKLSAgICAgICAgZWMgPSBG
aWxlRXhjZXB0aW9uOjpBQk9SVF9FUlI7Ci0gICAgICAgIHJldHVybiAwOwotICAgIH0KLSAgICBp
ZiAoZXJyb3JDYWxsYmFjay0+ZXJyb3IoKSkgewotICAgICAgICBBU1NFUlQoIXN1Y2Nlc3NDYWxs
YmFjay0+ZmlsZVdyaXRlckJhc2UoKSk7Ci0gICAgICAgIGVjID0gRmlsZUV4Y2VwdGlvbjo6RXJy
b3JDb2RlVG9FeGNlcHRpb25Db2RlKGVycm9yQ2FsbGJhY2stPmVycm9yKCktPmNvZGUoKSk7Ci0g
ICAgICAgIHJldHVybiAwOwotICAgIH0KLSAgICBBU1NFUlQoc3VjY2Vzc0NhbGxiYWNrLT5maWxl
V3JpdGVyQmFzZSgpKTsKLSAgICBBU1NFUlQoc3RhdGljX2Nhc3Q8RmlsZVdyaXRlclN5bmMqPihz
dWNjZXNzQ2FsbGJhY2stPmZpbGVXcml0ZXJCYXNlKCkpID09IGZpbGVXcml0ZXIuZ2V0KCkpOwot
ICAgIHJldHVybiBmaWxlV3JpdGVyOwotfQotCi19Ci0KLSNlbmRpZiAvLyBFTkFCTEUoRklMRV9T
WVNURU0pCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9maWxlYXBpL0RPTUZpbGVTeXN0ZW1TeW5jLmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvZmlsZWFwaS9ET01GaWxlU3lzdGVtU3luYy5o
CShyZXZpc2lvbiAxMTA3MjYpCisrKyBTb3VyY2UvV2ViQ29yZS9maWxlYXBpL0RPTUZpbGVTeXN0
ZW1TeW5jLmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNzEgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdo
dCAoQykgMjAxMCBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlz
dHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0
aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZv
bGxvd2luZyBjb25kaXRpb25zIGFyZQotICogbWV0OgotICoKLSAqICAgICAqIFJlZGlzdHJpYnV0
aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIuCi0gKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1
Y2UgdGhlIGFib3ZlCi0gKiBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyCi0gKiBpbiB0aGUgZG9jdW1lbnRhdGlvbiBh
bmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCi0gKiBkaXN0cmlidXRpb24u
Ci0gKiAgICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9mIEdvb2dsZSBJbmMuIG5vciB0aGUgbmFtZXMg
b2YgaXRzCi0gKiBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3Rl
IHByb2R1Y3RzIGRlcml2ZWQgZnJvbQotICogdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmlj
IHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJ
REVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCi0gKiAiQVMgSVMi
IEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5P
VAotICogTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJ
VFkgQU5EIEZJVE5FU1MgRk9SCi0gKiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1F
RC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAotICogT1dORVIgT1IgQ09OVFJJQlVU
T1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCi0gKiBT
UEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBC
VVQgTk9UCi0gKiBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9S
IFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKLSAqIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNT
IElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQotICogVEhFT1JZIE9GIExJ
QUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAot
ICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZ
IE9VVCBPRiBUSEUgVVNFCi0gKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0Yg
VEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLSNpZm5kZWYgRE9NRmlsZVN5
c3RlbVN5bmNfaAotI2RlZmluZSBET01GaWxlU3lzdGVtU3luY19oCi0KLSNpZiBFTkFCTEUoRklM
RV9TWVNURU0pCi0KLSNpbmNsdWRlICJET01GaWxlU3lzdGVtQmFzZS5oIgotCi1uYW1lc3BhY2Ug
V2ViQ29yZSB7Ci0KLWNsYXNzIERpcmVjdG9yeUVudHJ5U3luYzsKLWNsYXNzIEZpbGU7Ci1jbGFz
cyBGaWxlRW50cnlTeW5jOwotY2xhc3MgRmlsZVdyaXRlclN5bmM7Ci0KLXR5cGVkZWYgaW50IEV4
Y2VwdGlvbkNvZGU7Ci0KLWNsYXNzIERPTUZpbGVTeXN0ZW1TeW5jIDogcHVibGljIERPTUZpbGVT
eXN0ZW1CYXNlIHsKLXB1YmxpYzoKLSAgICBzdGF0aWMgUGFzc1JlZlB0cjxET01GaWxlU3lzdGVt
U3luYz4gY3JlYXRlKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqIGNvbnRleHQsIGNvbnN0IFN0cmlu
ZyYgbmFtZSwgUGFzc093blB0cjxBc3luY0ZpbGVTeXN0ZW0+IGFzeW5jRmlsZVN5c3RlbSkKLSAg
ICB7Ci0gICAgICAgIHJldHVybiBhZG9wdFJlZihuZXcgRE9NRmlsZVN5c3RlbVN5bmMoY29udGV4
dCwgbmFtZSwgYXN5bmNGaWxlU3lzdGVtKSk7Ci0gICAgfQotCi0gICAgc3RhdGljIFBhc3NSZWZQ
dHI8RE9NRmlsZVN5c3RlbVN5bmM+IGNyZWF0ZShET01GaWxlU3lzdGVtQmFzZSopOwotCi0gICAg
dmlydHVhbCB+RE9NRmlsZVN5c3RlbVN5bmMoKTsKLQotICAgIFBhc3NSZWZQdHI8RGlyZWN0b3J5
RW50cnlTeW5jPiByb290KCk7Ci0KLSAgICBQYXNzUmVmUHRyPEZpbGU+IGNyZWF0ZUZpbGUoY29u
c3QgRmlsZUVudHJ5U3luYyosIEV4Y2VwdGlvbkNvZGUmKTsKLSAgICBQYXNzUmVmUHRyPEZpbGVX
cml0ZXJTeW5jPiBjcmVhdGVXcml0ZXIoY29uc3QgRmlsZUVudHJ5U3luYyosIEV4Y2VwdGlvbkNv
ZGUmKTsKLQotcHJpdmF0ZToKLSAgICBET01GaWxlU3lzdGVtU3luYyhTY3JpcHRFeGVjdXRpb25D
b250ZXh0KiwgY29uc3QgU3RyaW5nJiBuYW1lLCBQYXNzT3duUHRyPEFzeW5jRmlsZVN5c3RlbT4p
OwotfTsKLQotfQotCi0jZW5kaWYgLy8gRU5BQkxFKEZJTEVfU1lTVEVNKQotCi0jZW5kaWYgLy8g
RE9NRmlsZVN5c3RlbVN5bmNfaApJbmRleDogU291cmNlL1dlYkNvcmUvZmlsZWFwaS9ET01GaWxl
U3lzdGVtU3luYy5pZGwKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvZmlsZWFwaS9ET01G
aWxlU3lzdGVtU3luYy5pZGwJKHJldmlzaW9uIDExMDcyNikKKysrIFNvdXJjZS9XZWJDb3JlL2Zp
bGVhcGkvRE9NRmlsZVN5c3RlbVN5bmMuaWRsCSh3b3JraW5nIGNvcHkpCkBAIC0xLDM5ICswLDAg
QEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTAgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5
IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBw
cm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUKLSAqIG1ldDoKLSAqCi0g
KiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFi
b3ZlIGNvcHlyaWdodAotICogbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogICAgICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFy
eSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQotICogY29weXJpZ2h0IG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lcgotICogaW4g
dGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRo
ZQotICogZGlzdHJpYnV0aW9uLgotICogICAgICogTmVpdGhlciB0aGUgbmFtZSBvZiBHb29nbGUg
SW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0cwotICogY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRv
IGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20KLSAqIHRoaXMgc29mdHdh
cmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCi0gKgotICogVEhJ
UyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRS
SUJVVE9SUwotICogIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVT
LCBJTkNMVURJTkcsIEJVVCBOT1QKLSAqIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJ
RVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgotICogQSBQQVJUSUNVTEFSIFBV
UlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKLSAq
IE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNU
LCBJTkNJREVOVEFMLAotICogU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERB
TUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAotICogTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0Yg
U1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCi0gKiBEQVRBLCBPUiBQ
Uk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBB
TlkKLSAqIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBM
SUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0Up
IEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotICogT0YgVEhJUyBTT0ZUV0FSRSwg
RVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwot
Ci1tb2R1bGUgc3RvcmFnZSB7Ci0gICAgaW50ZXJmYWNlIFsKLSAgICAgICAgQ29uZGl0aW9uYWw9
RklMRV9TWVNURU0sCi0gICAgICAgIEpTTm9TdGF0aWNUYWJsZXMKLSAgICBdIERPTUZpbGVTeXN0
ZW1TeW5jIHsKLSAgICAgICAgcmVhZG9ubHkgYXR0cmlidXRlIERPTVN0cmluZyBuYW1lOwotICAg
ICAgICByZWFkb25seSBhdHRyaWJ1dGUgRGlyZWN0b3J5RW50cnlTeW5jIHJvb3Q7Ci0gICAgfTsK
LX0K
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>131923</attachid>
            <date>2012-03-14 14:26:43 -0700</date>
            <delta_ts>2012-03-15 10:40:17 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-81149-20120314172637.patch</filename>
            <type>text/plain</type>
            <size>119620</size>
            <attacher name="Mark Pilgrim (Google)">pilgrim</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDExMDczNikKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDQxIEBACisyMDEyLTAzLTE0ICBNYXJrIFBp
bGdyaW0gIDxwaWxncmltQGNocm9taXVtLm9yZz4KKworICAgICAgICBNb3ZlIERPTUZpbGVQYXRo
IGFuZCBET01GaWxlU3lzdGVtKiB0byBNb2R1bGVzL2ZpbGVzeXN0ZW0vCisgICAgICAgIGh0dHBz
Oi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD04MTE0OQorCisgICAgICAgIFJldmll
d2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIE5vIG5ldyB0ZXN0cywgYWxsIGV4aXN0
aW5nIHRlc3RzIHBhc3MKKworICAgICAgICAqIENNYWtlTGlzdHMudHh0OgorICAgICAgICAqIERl
cml2ZWRTb3VyY2VzLm1ha2U6CisgICAgICAgICogRGVyaXZlZFNvdXJjZXMucHJpOgorICAgICAg
ICAqIEdOVW1ha2VmaWxlLmxpc3QuYW06CisgICAgICAgICogTW9kdWxlcy9maWxlc3lzdGVtL0RP
TUZpbGVQYXRoLmNwcDogQ29waWVkIGZyb20gU291cmNlL1dlYkNvcmUvZmlsZWFwaS9ET01GaWxl
UGF0aC5jcHAuCisgICAgICAgICogTW9kdWxlcy9maWxlc3lzdGVtL0RPTUZpbGVQYXRoLmg6IENv
cGllZCBmcm9tIFNvdXJjZS9XZWJDb3JlL2ZpbGVhcGkvRE9NRmlsZVBhdGguaC4KKyAgICAgICAg
KiBNb2R1bGVzL2ZpbGVzeXN0ZW0vRE9NRmlsZVN5c3RlbS5jcHA6IENvcGllZCBmcm9tIFNvdXJj
ZS9XZWJDb3JlL2ZpbGVhcGkvRE9NRmlsZVN5c3RlbS5jcHAuCisgICAgICAgICogTW9kdWxlcy9m
aWxlc3lzdGVtL0RPTUZpbGVTeXN0ZW0uaDogQ29waWVkIGZyb20gU291cmNlL1dlYkNvcmUvZmls
ZWFwaS9ET01GaWxlU3lzdGVtLmguCisgICAgICAgICogTW9kdWxlcy9maWxlc3lzdGVtL0RPTUZp
bGVTeXN0ZW0uaWRsOiBDb3BpZWQgZnJvbSBTb3VyY2UvV2ViQ29yZS9maWxlYXBpL0RPTUZpbGVT
eXN0ZW0uaWRsLgorICAgICAgICAqIE1vZHVsZXMvZmlsZXN5c3RlbS9ET01GaWxlU3lzdGVtQmFz
ZS5jcHA6IENvcGllZCBmcm9tIFNvdXJjZS9XZWJDb3JlL2ZpbGVhcGkvRE9NRmlsZVN5c3RlbUJh
c2UuY3BwLgorICAgICAgICAqIE1vZHVsZXMvZmlsZXN5c3RlbS9ET01GaWxlU3lzdGVtQmFzZS5o
OiBDb3BpZWQgZnJvbSBTb3VyY2UvV2ViQ29yZS9maWxlYXBpL0RPTUZpbGVTeXN0ZW1CYXNlLmgu
CisgICAgICAgICogTW9kdWxlcy9maWxlc3lzdGVtL0RPTUZpbGVTeXN0ZW1TeW5jLmNwcDogQ29w
aWVkIGZyb20gU291cmNlL1dlYkNvcmUvZmlsZWFwaS9ET01GaWxlU3lzdGVtU3luYy5jcHAuCisg
ICAgICAgICogTW9kdWxlcy9maWxlc3lzdGVtL0RPTUZpbGVTeXN0ZW1TeW5jLmg6IENvcGllZCBm
cm9tIFNvdXJjZS9XZWJDb3JlL2ZpbGVhcGkvRE9NRmlsZVN5c3RlbVN5bmMuaC4KKyAgICAgICAg
KiBNb2R1bGVzL2ZpbGVzeXN0ZW0vRE9NRmlsZVN5c3RlbVN5bmMuaWRsOiBDb3BpZWQgZnJvbSBT
b3VyY2UvV2ViQ29yZS9maWxlYXBpL0RPTUZpbGVTeXN0ZW1TeW5jLmlkbC4KKyAgICAgICAgKiBU
YXJnZXQucHJpOgorICAgICAgICAqIFdlYkNvcmUuZ3lwaToKKyAgICAgICAgKiBXZWJDb3JlLnZj
cHJvai9XZWJDb3JlLnZjcHJvajoKKyAgICAgICAgKiBXZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0
LnBieHByb2o6CisgICAgICAgICogZmlsZWFwaS9ET01GaWxlUGF0aC5jcHA6IFJlbW92ZWQuCisg
ICAgICAgICogZmlsZWFwaS9ET01GaWxlUGF0aC5oOiBSZW1vdmVkLgorICAgICAgICAqIGZpbGVh
cGkvRE9NRmlsZVN5c3RlbS5jcHA6IFJlbW92ZWQuCisgICAgICAgICogZmlsZWFwaS9ET01GaWxl
U3lzdGVtLmg6IFJlbW92ZWQuCisgICAgICAgICogZmlsZWFwaS9ET01GaWxlU3lzdGVtLmlkbDog
UmVtb3ZlZC4KKyAgICAgICAgKiBmaWxlYXBpL0RPTUZpbGVTeXN0ZW1CYXNlLmNwcDogUmVtb3Zl
ZC4KKyAgICAgICAgKiBmaWxlYXBpL0RPTUZpbGVTeXN0ZW1CYXNlLmg6IFJlbW92ZWQuCisgICAg
ICAgICogZmlsZWFwaS9ET01GaWxlU3lzdGVtU3luYy5jcHA6IFJlbW92ZWQuCisgICAgICAgICog
ZmlsZWFwaS9ET01GaWxlU3lzdGVtU3luYy5oOiBSZW1vdmVkLgorICAgICAgICAqIGZpbGVhcGkv
RE9NRmlsZVN5c3RlbVN5bmMuaWRsOiBSZW1vdmVkLgorCiAyMDEyLTAzLTE0ICBUb21teSBXaWRl
bmZseWNodCAgPHRvbW15d0Bnb29nbGUuY29tPgogCiAgICAgICAgIE1lZGlhU3RyZWFtIEFQSSAo
SlNFUCk6IEludHJvZHVjaW5nIEljZUNhbmRpZGF0ZQpJbmRleDogU291cmNlL1dlYkNvcmUvQ01h
a2VMaXN0cy50eHQKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvQ01ha2VMaXN0cy50eHQJ
KHJldmlzaW9uIDExMDcyNikKKysrIFNvdXJjZS9XZWJDb3JlL0NNYWtlTGlzdHMudHh0CSh3b3Jr
aW5nIGNvcHkpCkBAIC0xNjM1LDE0ICsxNjM1LDE0IEBAIEVORElGICgpCiAKIGlmIChFTkFCTEVf
RklMRV9TWVNURU0pCiAgICAgTElTVChBUFBFTkQgV2ViQ29yZV9TT1VSQ0VTCisgICAgICAgIE1v
ZHVsZXMvZmlsZXN5c3RlbS9ET01GaWxlUGF0aC5jcHAKKyAgICAgICAgTW9kdWxlcy9maWxlc3lz
dGVtL0RPTUZpbGVTeXN0ZW0uY3BwCisgICAgICAgIE1vZHVsZXMvZmlsZXN5c3RlbS9ET01GaWxl
U3lzdGVtQmFzZS5jcHAKKyAgICAgICAgTW9kdWxlcy9maWxlc3lzdGVtL0RPTUZpbGVTeXN0ZW1T
eW5jLmNwcAogICAgICAgICBNb2R1bGVzL2ZpbGVzeXN0ZW0vRGlyZWN0b3J5RW50cnkuY3BwCiAg
ICAgICAgIE1vZHVsZXMvZmlsZXN5c3RlbS9EaXJlY3RvcnlFbnRyeVN5bmMuY3BwCiAgICAgICAg
IE1vZHVsZXMvZmlsZXN5c3RlbS9EaXJlY3RvcnlSZWFkZXIuY3BwCiAgICAgICAgIE1vZHVsZXMv
ZmlsZXN5c3RlbS9EaXJlY3RvcnlSZWFkZXJTeW5jLmNwcAotICAgICAgICBmaWxlYXBpL0RPTUZp
bGVQYXRoLmNwcAotICAgICAgICBmaWxlYXBpL0RPTUZpbGVTeXN0ZW0uY3BwCi0gICAgICAgIGZp
bGVhcGkvRE9NRmlsZVN5c3RlbUJhc2UuY3BwCi0gICAgICAgIGZpbGVhcGkvRE9NRmlsZVN5c3Rl
bVN5bmMuY3BwCiAgICAgICAgIGZpbGVhcGkvRE9NV2luZG93RmlsZVN5c3RlbS5jcHAKICAgICAg
ICAgZmlsZWFwaS9FbnRyeS5jcHAKICAgICAgICAgZmlsZWFwaS9FbnRyeUFycmF5LmNwcApAQCAt
MTY2MCwxMiArMTY2MCwxMiBAQCBpZiAoRU5BQkxFX0ZJTEVfU1lTVEVNKQogICAgICAgICBwbGF0
Zm9ybS9Bc3luY0ZpbGVTeXN0ZW0uY3BwCiAgICAgKQogICAgIExJU1QoQVBQRU5EIFdlYkNvcmVf
SURMX0ZJTEVTCisgICAgICAgIE1vZHVsZXMvZmlsZXN5c3RlbS9ET01GaWxlU3lzdGVtLmlkbAor
ICAgICAgICBNb2R1bGVzL2ZpbGVzeXN0ZW0vRE9NRmlsZVN5c3RlbVN5bmMuaWRsCiAgICAgICAg
IE1vZHVsZXMvZmlsZXN5c3RlbS9EaXJlY3RvcnlFbnRyeS5pZGwKICAgICAgICAgTW9kdWxlcy9m
aWxlc3lzdGVtL0RpcmVjdG9yeUVudHJ5U3luYy5pZGwKICAgICAgICAgTW9kdWxlcy9maWxlc3lz
dGVtL0RpcmVjdG9yeVJlYWRlci5pZGwKICAgICAgICAgTW9kdWxlcy9maWxlc3lzdGVtL0RpcmVj
dG9yeVJlYWRlclN5bmMuaWRsCi0gICAgICAgIGZpbGVhcGkvRE9NRmlsZVN5c3RlbS5pZGwKLSAg
ICAgICAgZmlsZWFwaS9ET01GaWxlU3lzdGVtU3luYy5pZGwKICAgICAgICAgZmlsZWFwaS9ET01X
aW5kb3dGaWxlU3lzdGVtLmlkbAogICAgICAgICBmaWxlYXBpL0VudHJpZXNDYWxsYmFjay5pZGwK
ICAgICAgICAgZmlsZWFwaS9FbnRyeS5pZGwKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL0Rlcml2ZWRT
b3VyY2VzLm1ha2UKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvRGVyaXZlZFNvdXJjZXMu
bWFrZQkocmV2aXNpb24gMTEwNzI2KQorKysgU291cmNlL1dlYkNvcmUvRGVyaXZlZFNvdXJjZXMu
bWFrZQkod29ya2luZyBjb3B5KQpAQCAtMTk1LDggKzE5NSw4IEBAIEJJTkRJTkdfSURMUyA9IFwK
ICAgICAkKFdlYkNvcmUpL2RvbS9XZWJLaXRUcmFuc2l0aW9uRXZlbnQuaWRsIFwKICAgICAkKFdl
YkNvcmUpL2RvbS9XaGVlbEV2ZW50LmlkbCBcCiAgICAgJChXZWJDb3JlKS9maWxlYXBpL0Jsb2Iu
aWRsIFwKLSAgICAkKFdlYkNvcmUpL2ZpbGVhcGkvRE9NRmlsZVN5c3RlbS5pZGwgXAotICAgICQo
V2ViQ29yZSkvZmlsZWFwaS9ET01GaWxlU3lzdGVtU3luYy5pZGwgXAorICAgICQoV2ViQ29yZSkv
TW9kdWxlcy9maWxlc3lzdGVtL0RPTUZpbGVTeXN0ZW0uaWRsIFwKKyAgICAkKFdlYkNvcmUpL01v
ZHVsZXMvZmlsZXN5c3RlbS9ET01GaWxlU3lzdGVtU3luYy5pZGwgXAogICAgICQoV2ViQ29yZSkv
ZmlsZWFwaS9ET01XaW5kb3dGaWxlU3lzdGVtLmlkbCBcCiAgICAgJChXZWJDb3JlKS9Nb2R1bGVz
L2ZpbGVzeXN0ZW0vRGlyZWN0b3J5RW50cnkuaWRsIFwKICAgICAkKFdlYkNvcmUpL01vZHVsZXMv
ZmlsZXN5c3RlbS9EaXJlY3RvcnlFbnRyeVN5bmMuaWRsIFwKSW5kZXg6IFNvdXJjZS9XZWJDb3Jl
L0Rlcml2ZWRTb3VyY2VzLnByaQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9EZXJpdmVk
U291cmNlcy5wcmkJKHJldmlzaW9uIDExMDcyNikKKysrIFNvdXJjZS9XZWJDb3JlL0Rlcml2ZWRT
b3VyY2VzLnByaQkod29ya2luZyBjb3B5KQpAQCAtMjE2LDEyICsyMTYsMTIgQEAgSURMX0JJTkRJ
TkdTICs9IFwKICAgICAkJFBXRC9kb20vV2ViS2l0VHJhbnNpdGlvbkV2ZW50LmlkbCBcCiAgICAg
JCRQV0QvZG9tL1doZWVsRXZlbnQuaWRsIFwKICAgICAkJFBXRC9maWxlYXBpL0Jsb2IuaWRsIFwK
KyAgICAkJFBXRC9Nb2R1bGVzL2ZpbGVzeXN0ZW0vRE9NRmlsZVN5c3RlbS5pZGwgXAorICAgICQk
UFdEL01vZHVsZXMvZmlsZXN5c3RlbS9ET01GaWxlU3lzdGVtU3luYy5pZGwgXAogICAgICQkUFdE
L01vZHVsZXMvZmlsZXN5c3RlbS9EaXJlY3RvcnlFbnRyeS5pZGwgXAogICAgICQkUFdEL01vZHVs
ZXMvZmlsZXN5c3RlbS9EaXJlY3RvcnlFbnRyeVN5bmMuaWRsIFwKICAgICAkJFBXRC9Nb2R1bGVz
L2ZpbGVzeXN0ZW0vRGlyZWN0b3J5UmVhZGVyLmlkbCBcCiAgICAgJCRQV0QvTW9kdWxlcy9maWxl
c3lzdGVtL0RpcmVjdG9yeVJlYWRlclN5bmMuaWRsIFwKLSAgICAkJFBXRC9maWxlYXBpL0RPTUZp
bGVTeXN0ZW0uaWRsIFwKLSAgICAkJFBXRC9maWxlYXBpL0RPTUZpbGVTeXN0ZW1TeW5jLmlkbCBc
CiAgICAgJCRQV0QvZmlsZWFwaS9ET01XaW5kb3dGaWxlU3lzdGVtLmlkbCBcCiAgICAgJCRQV0Qv
ZmlsZWFwaS9FbnRyaWVzQ2FsbGJhY2suaWRsIFwKICAgICAkJFBXRC9maWxlYXBpL0VudHJ5Lmlk
bCBcCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9HTlVtYWtlZmlsZS5saXN0LmFtCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9XZWJDb3JlL0dOVW1ha2VmaWxlLmxpc3QuYW0JKHJldmlzaW9uIDExMDcyNikK
KysrIFNvdXJjZS9XZWJDb3JlL0dOVW1ha2VmaWxlLmxpc3QuYW0JKHdvcmtpbmcgY29weSkKQEAg
LTIwMzcsNiArMjAzNywxNCBAQCB3ZWJjb3JlX3NvdXJjZXMgKz0gXAogCVNvdXJjZS9XZWJDb3Jl
L2ZpbGVhcGkvQmxvYi5oIFwKIAlTb3VyY2UvV2ViQ29yZS9maWxlYXBpL0Jsb2JVUkwuY3BwIFwK
IAlTb3VyY2UvV2ViQ29yZS9maWxlYXBpL0Jsb2JVUkwuaCBcCisJU291cmNlL1dlYkNvcmUvTW9k
dWxlcy9maWxlc3lzdGVtL0RPTUZpbGVQYXRoLmNwcCBcCisJU291cmNlL1dlYkNvcmUvTW9kdWxl
cy9maWxlc3lzdGVtL0RPTUZpbGVQYXRoLmggXAorCVNvdXJjZS9XZWJDb3JlL01vZHVsZXMvZmls
ZXN5c3RlbS9ET01GaWxlU3lzdGVtLmNwcCBcCisJU291cmNlL1dlYkNvcmUvTW9kdWxlcy9maWxl
c3lzdGVtL0RPTUZpbGVTeXN0ZW0uaCBcCisJU291cmNlL1dlYkNvcmUvTW9kdWxlcy9maWxlc3lz
dGVtL0RPTUZpbGVTeXN0ZW1CYXNlLmNwcCBcCisJU291cmNlL1dlYkNvcmUvTW9kdWxlcy9maWxl
c3lzdGVtL0RPTUZpbGVTeXN0ZW1CYXNlLmggXAorCVNvdXJjZS9XZWJDb3JlL01vZHVsZXMvZmls
ZXN5c3RlbS9ET01GaWxlU3lzdGVtU3luYy5jcHAgXAorCVNvdXJjZS9XZWJDb3JlL01vZHVsZXMv
ZmlsZXN5c3RlbS9ET01GaWxlU3lzdGVtU3luYy5oIFwKIAlTb3VyY2UvV2ViQ29yZS9Nb2R1bGVz
L2ZpbGVzeXN0ZW0vRGlyZWN0b3J5RW50cnkuY3BwIFwKIAlTb3VyY2UvV2ViQ29yZS9Nb2R1bGVz
L2ZpbGVzeXN0ZW0vRGlyZWN0b3J5RW50cnkuaCBcCiAJU291cmNlL1dlYkNvcmUvTW9kdWxlcy9m
aWxlc3lzdGVtL0RpcmVjdG9yeUVudHJ5U3luYy5jcHAgXApAQCAtMjA0NSwxNCArMjA1Myw2IEBA
IHdlYmNvcmVfc291cmNlcyArPSBcCiAJU291cmNlL1dlYkNvcmUvTW9kdWxlcy9maWxlc3lzdGVt
L0RpcmVjdG9yeVJlYWRlci5oIFwKIAlTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2ZpbGVzeXN0ZW0v
RGlyZWN0b3J5UmVhZGVyU3luYy5jcHAgXAogCVNvdXJjZS9XZWJDb3JlL01vZHVsZXMvZmlsZXN5
c3RlbS9EaXJlY3RvcnlSZWFkZXJTeW5jLmggXAotCVNvdXJjZS9XZWJDb3JlL2ZpbGVhcGkvRE9N
RmlsZVBhdGguY3BwIFwKLQlTb3VyY2UvV2ViQ29yZS9maWxlYXBpL0RPTUZpbGVQYXRoLmggXAot
CVNvdXJjZS9XZWJDb3JlL2ZpbGVhcGkvRE9NRmlsZVN5c3RlbS5jcHAgXAotCVNvdXJjZS9XZWJD
b3JlL2ZpbGVhcGkvRE9NRmlsZVN5c3RlbS5oIFwKLQlTb3VyY2UvV2ViQ29yZS9maWxlYXBpL0RP
TUZpbGVTeXN0ZW1CYXNlLmNwcCBcCi0JU291cmNlL1dlYkNvcmUvZmlsZWFwaS9ET01GaWxlU3lz
dGVtQmFzZS5oIFwKLQlTb3VyY2UvV2ViQ29yZS9maWxlYXBpL0RPTUZpbGVTeXN0ZW1TeW5jLmNw
cCBcCi0JU291cmNlL1dlYkNvcmUvZmlsZWFwaS9ET01GaWxlU3lzdGVtU3luYy5oIFwKIAlTb3Vy
Y2UvV2ViQ29yZS9maWxlYXBpL0RPTVdpbmRvd0ZpbGVTeXN0ZW0uY3BwIFwKIAlTb3VyY2UvV2Vi
Q29yZS9maWxlYXBpL0RPTVdpbmRvd0ZpbGVTeXN0ZW0uaCBcCiAJU291cmNlL1dlYkNvcmUvZmls
ZWFwaS9FbnRyaWVzQ2FsbGJhY2suaCBcCkBAIC00ODY1LDggKzQ4NjUsOCBAQCB3ZWJjb3JlX2J1
aWx0X3NvdXJjZXMgKz0gXAogCURlcml2ZWRTb3VyY2VzL1dlYkNvcmUvSlNNZXRhZGF0YUNhbGxi
YWNrLmgKIAogZG9tX2JpbmRpbmdfaWRscyArPSBcCi0JJChXZWJDb3JlKS9maWxlYXBpL0RPTUZp
bGVTeXN0ZW0uaWRsIFwKLQkkKFdlYkNvcmUpL2ZpbGVhcGkvRE9NRmlsZVN5c3RlbVN5bmMuaWRs
IFwKKwkkKFdlYkNvcmUpL01vZHVsZXMvZmlsZXN5c3RlbS9ET01GaWxlU3lzdGVtLmlkbCBcCisJ
JChXZWJDb3JlKS9Nb2R1bGVzL2ZpbGVzeXN0ZW0vRE9NRmlsZVN5c3RlbVN5bmMuaWRsIFwKIAkk
KFdlYkNvcmUpL2ZpbGVhcGkvRE9NV2luZG93RmlsZVN5c3RlbS5pZGwgXAogCSQoV2ViQ29yZSkv
TW9kdWxlcy9maWxlc3lzdGVtL0RpcmVjdG9yeUVudHJ5LmlkbCBcCiAJJChXZWJDb3JlKS9Nb2R1
bGVzL2ZpbGVzeXN0ZW0vRGlyZWN0b3J5RW50cnlTeW5jLmlkbCBcCkluZGV4OiBTb3VyY2UvV2Vi
Q29yZS9UYXJnZXQucHJpCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL1RhcmdldC5wcmkJ
KHJldmlzaW9uIDExMDcyNikKKysrIFNvdXJjZS9XZWJDb3JlL1RhcmdldC5wcmkJKHdvcmtpbmcg
Y29weSkKQEAgLTY2MSwxMCArNjYxLDEwIEBAIFNPVVJDRVMgKz0gXAogICAgIGZpbGVhcGkvQXN5
bmNGaWxlU3RyZWFtLmNwcCBcCiAgICAgZmlsZWFwaS9CbG9iLmNwcCBcCiAgICAgZmlsZWFwaS9C
bG9iVVJMLmNwcCBcCi0gICAgZmlsZWFwaS9ET01GaWxlUGF0aC5jcHAgXAotICAgIGZpbGVhcGkv
RE9NRmlsZVN5c3RlbS5jcHAgXAotICAgIGZpbGVhcGkvRE9NRmlsZVN5c3RlbUJhc2UuY3BwIFwK
LSAgICBmaWxlYXBpL0RPTUZpbGVTeXN0ZW1TeW5jLmNwcCBcCisgICAgTW9kdWxlcy9maWxlc3lz
dGVtL0RPTUZpbGVQYXRoLmNwcCBcCisgICAgTW9kdWxlcy9maWxlc3lzdGVtL0RPTUZpbGVTeXN0
ZW0uY3BwIFwKKyAgICBNb2R1bGVzL2ZpbGVzeXN0ZW0vRE9NRmlsZVN5c3RlbUJhc2UuY3BwIFwK
KyAgICBNb2R1bGVzL2ZpbGVzeXN0ZW0vRE9NRmlsZVN5c3RlbVN5bmMuY3BwIFwKICAgICBmaWxl
YXBpL0RPTVdpbmRvd0ZpbGVTeXN0ZW0uY3BwIFwKICAgICBNb2R1bGVzL2ZpbGVzeXN0ZW0vRGly
ZWN0b3J5RW50cnkuY3BwIFwKICAgICBNb2R1bGVzL2ZpbGVzeXN0ZW0vRGlyZWN0b3J5RW50cnlT
eW5jLmNwcCBcCkBAIC0zMDUzLDE1ICszMDUzLDE1IEBAIGNvbnRhaW5zKERFRklORVMsIEVOQUJM
RV9EQVRBX1RSQU5TRkVSX0kKIGNvbnRhaW5zKERFRklORVMsIEVOQUJMRV9GSUxFX1NZU1RFTT0x
KSB7CiAgICAgSEVBREVSUyArPSBcCiAgICAgICAgIGZpbGVhcGkvQXN5bmNGaWxlV3JpdGVyLmgg
XAorICAgICAgICBNb2R1bGVzL2ZpbGVzeXN0ZW0vRE9NRmlsZVBhdGguaCBcCisgICAgICAgIE1v
ZHVsZXMvZmlsZXN5c3RlbS9ET01GaWxlU3lzdGVtLmggXAorICAgICAgICBNb2R1bGVzL2ZpbGVz
eXN0ZW0vRE9NRmlsZVN5c3RlbUJhc2UuaCBcCisgICAgICAgIE1vZHVsZXMvZmlsZXN5c3RlbS9E
T01GaWxlU3lzdGVtU3luYy5oIFwKICAgICAgICAgTW9kdWxlcy9maWxlc3lzdGVtL0RpcmVjdG9y
eUVudHJ5LmggXAogICAgICAgICBNb2R1bGVzL2ZpbGVzeXN0ZW0vRGlyZWN0b3J5RW50cnlTeW5j
LmggXAogICAgICAgICBNb2R1bGVzL2ZpbGVzeXN0ZW0vRGlyZWN0b3J5UmVhZGVyLmggXAogICAg
ICAgICBNb2R1bGVzL2ZpbGVzeXN0ZW0vRGlyZWN0b3J5UmVhZGVyQmFzZS5oIFwKICAgICAgICAg
TW9kdWxlcy9maWxlc3lzdGVtL0RpcmVjdG9yeVJlYWRlclN5bmMuaCBcCi0gICAgICAgIGZpbGVh
cGkvRE9NRmlsZVBhdGguaCBcCi0gICAgICAgIGZpbGVhcGkvRE9NRmlsZVN5c3RlbS5oIFwKLSAg
ICAgICAgZmlsZWFwaS9ET01GaWxlU3lzdGVtQmFzZS5oIFwKLSAgICAgICAgZmlsZWFwaS9ET01G
aWxlU3lzdGVtU3luYy5oIFwKICAgICAgICAgZmlsZWFwaS9FbnRyaWVzQ2FsbGJhY2suaCBcCiAg
ICAgICAgIGZpbGVhcGkvRW50cnkuaCBcCiAgICAgICAgIGZpbGVhcGkvRW50cnlBcnJheS5oIFwK
SW5kZXg6IFNvdXJjZS9XZWJDb3JlL1dlYkNvcmUuZ3lwaQo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
V2ViQ29yZS9XZWJDb3JlLmd5cGkJKHJldmlzaW9uIDExMDcyNikKKysrIFNvdXJjZS9XZWJDb3Jl
L1dlYkNvcmUuZ3lwaQkod29ya2luZyBjb3B5KQpAQCAtODkwLDggKzg5MCw4IEBACiAgICAgICAg
ICAgICAnTW9kdWxlcy9maWxlc3lzdGVtL0RpcmVjdG9yeUVudHJ5U3luYy5pZGwnLAogICAgICAg
ICAgICAgJ01vZHVsZXMvZmlsZXN5c3RlbS9EaXJlY3RvcnlSZWFkZXIuaWRsJywKICAgICAgICAg
ICAgICdNb2R1bGVzL2ZpbGVzeXN0ZW0vRGlyZWN0b3J5UmVhZGVyU3luYy5pZGwnLAotICAgICAg
ICAgICAgJ2ZpbGVhcGkvRE9NRmlsZVN5c3RlbS5pZGwnLAotICAgICAgICAgICAgJ2ZpbGVhcGkv
RE9NRmlsZVN5c3RlbVN5bmMuaWRsJywKKyAgICAgICAgICAgICdNb2R1bGVzL2ZpbGVzeXN0ZW0v
RE9NRmlsZVN5c3RlbS5pZGwnLAorICAgICAgICAgICAgJ01vZHVsZXMvZmlsZXN5c3RlbS9ET01G
aWxlU3lzdGVtU3luYy5pZGwnLAogICAgICAgICAgICAgJ2ZpbGVhcGkvRE9NV2luZG93RmlsZVN5
c3RlbS5pZGwnLAogICAgICAgICAgICAgJ2ZpbGVhcGkvRW50cmllc0NhbGxiYWNrLmlkbCcsCiAg
ICAgICAgICAgICAnZmlsZWFwaS9FbnRyeS5pZGwnLApAQCAtMjQyOSwxNCArMjQyOSwxNCBAQAog
ICAgICAgICAgICAgJ2ZpbGVhcGkvQmxvYi5oJywKICAgICAgICAgICAgICdmaWxlYXBpL0Jsb2JV
UkwuY3BwJywKICAgICAgICAgICAgICdmaWxlYXBpL0Jsb2JVUkwuaCcsCi0gICAgICAgICAgICAn
ZmlsZWFwaS9ET01GaWxlUGF0aC5jcHAnLAotICAgICAgICAgICAgJ2ZpbGVhcGkvRE9NRmlsZVBh
dGguaCcsCi0gICAgICAgICAgICAnZmlsZWFwaS9ET01GaWxlU3lzdGVtLmNwcCcsCi0gICAgICAg
ICAgICAnZmlsZWFwaS9ET01GaWxlU3lzdGVtLmgnLAotICAgICAgICAgICAgJ2ZpbGVhcGkvRE9N
RmlsZVN5c3RlbUJhc2UuY3BwJywKLSAgICAgICAgICAgICdmaWxlYXBpL0RPTUZpbGVTeXN0ZW1C
YXNlLmgnLAotICAgICAgICAgICAgJ2ZpbGVhcGkvRE9NRmlsZVN5c3RlbVN5bmMuY3BwJywKLSAg
ICAgICAgICAgICdmaWxlYXBpL0RPTUZpbGVTeXN0ZW1TeW5jLmgnLAorICAgICAgICAgICAgJ01v
ZHVsZXMvZmlsZXN5c3RlbS9ET01GaWxlUGF0aC5jcHAnLAorICAgICAgICAgICAgJ01vZHVsZXMv
ZmlsZXN5c3RlbS9ET01GaWxlUGF0aC5oJywKKyAgICAgICAgICAgICdNb2R1bGVzL2ZpbGVzeXN0
ZW0vRE9NRmlsZVN5c3RlbS5jcHAnLAorICAgICAgICAgICAgJ01vZHVsZXMvZmlsZXN5c3RlbS9E
T01GaWxlU3lzdGVtLmgnLAorICAgICAgICAgICAgJ01vZHVsZXMvZmlsZXN5c3RlbS9ET01GaWxl
U3lzdGVtQmFzZS5jcHAnLAorICAgICAgICAgICAgJ01vZHVsZXMvZmlsZXN5c3RlbS9ET01GaWxl
U3lzdGVtQmFzZS5oJywKKyAgICAgICAgICAgICdNb2R1bGVzL2ZpbGVzeXN0ZW0vRE9NRmlsZVN5
c3RlbVN5bmMuY3BwJywKKyAgICAgICAgICAgICdNb2R1bGVzL2ZpbGVzeXN0ZW0vRE9NRmlsZVN5
c3RlbVN5bmMuaCcsCiAgICAgICAgICAgICAnZmlsZWFwaS9ET01XaW5kb3dGaWxlU3lzdGVtLmNw
cCcsCiAgICAgICAgICAgICAnZmlsZWFwaS9ET01XaW5kb3dGaWxlU3lzdGVtLmgnLAogICAgICAg
ICAgICAgJ01vZHVsZXMvZmlsZXN5c3RlbS9EaXJlY3RvcnlFbnRyeS5jcHAnLApJbmRleDogU291
cmNlL1dlYkNvcmUvTW9kdWxlcy9maWxlc3lzdGVtL0RPTUZpbGVQYXRoLmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2ZpbGVzeXN0ZW0vRE9NRmlsZVBhdGguY3BwCShy
ZXZpc2lvbiAxMTA3MjYpCShmcm9tIFNvdXJjZS9XZWJDb3JlL2ZpbGVhcGkvRE9NRmlsZVBhdGgu
Y3BwOjExMDcyNikKKysrIFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvZmlsZXN5c3RlbS9ET01GaWxl
UGF0aC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwxNTQgQEAKKy8qCisgKiBDb3B5cmln
aHQgKEMpIDIwMTAgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRp
c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp
dGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBm
b2xsb3dpbmcgY29uZGl0aW9ucyBhcmUKKyAqIG1ldDoKKyAqCisgKiAgICAgKiBSZWRpc3RyaWJ1
dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICog
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyLgorICogICAgICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9k
dWNlIHRoZSBhYm92ZQorICogY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lcgorICogaW4gdGhlIGRvY3VtZW50YXRpb24g
YW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQorICogZGlzdHJpYnV0aW9u
LgorICogICAgICogTmVpdGhlciB0aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBub3IgdGhlIG5hbWVz
IG9mIGl0cworICogY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90
ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20KKyAqIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZp
YyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9W
SURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUworICogIkFTIElT
IiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBO
T1QKKyAqIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklM
SVRZIEFORCBGSVRORVNTIEZPUgorICogQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlN
RUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKKyAqIE9XTkVSIE9SIENPTlRSSUJV
VE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAorICog
U1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywg
QlVUIE5PVAorICogTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBP
UiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCisgKiBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVT
UyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKKyAqIFRIRU9SWSBPRiBM
SUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQK
KyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdB
WSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9G
IFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmln
LmgiCisjaW5jbHVkZSAiRE9NRmlsZVBhdGguaCIKKworI2lmIEVOQUJMRShGSUxFX1NZU1RFTSkK
KworI2luY2x1ZGUgIlJlZ3VsYXJFeHByZXNzaW9uLmgiCisjaW5jbHVkZSA8d3RmL1ZlY3Rvci5o
PgorI2luY2x1ZGUgPHd0Zi90ZXh0L0NTdHJpbmcuaD4KKworbmFtZXNwYWNlIFdlYkNvcmUgewor
Citjb25zdCBjaGFyIERPTUZpbGVQYXRoOjpzZXBhcmF0b3IgPSAnLyc7Citjb25zdCBjaGFyIERP
TUZpbGVQYXRoOjpyb290W10gPSAiLyI7CisKK1N0cmluZyBET01GaWxlUGF0aDo6YXBwZW5kKGNv
bnN0IFN0cmluZyYgYmFzZSwgY29uc3QgU3RyaW5nJiBjb21wb25lbnRzKQoreworICAgIHJldHVy
biBlbnN1cmVEaXJlY3RvcnlQYXRoKGJhc2UpICsgY29tcG9uZW50czsKK30KKworU3RyaW5nIERP
TUZpbGVQYXRoOjplbnN1cmVEaXJlY3RvcnlQYXRoKGNvbnN0IFN0cmluZyYgcGF0aCkKK3sKKyAg
ICBpZiAoIURPTUZpbGVQYXRoOjplbmRzV2l0aFNlcGFyYXRvcihwYXRoKSkgeworICAgICAgICBT
dHJpbmcgbmV3UGF0aCA9IHBhdGg7CisgICAgICAgIG5ld1BhdGguYXBwZW5kKERPTUZpbGVQYXRo
OjpzZXBhcmF0b3IpOworICAgICAgICByZXR1cm4gbmV3UGF0aDsKKyAgICB9CisgICAgcmV0dXJu
IHBhdGg7Cit9CisKK1N0cmluZyBET01GaWxlUGF0aDo6Z2V0TmFtZShjb25zdCBTdHJpbmcmIHBh
dGgpCit7CisgICAgaW50IGluZGV4ID0gcGF0aC5yZXZlcnNlRmluZChET01GaWxlUGF0aDo6c2Vw
YXJhdG9yKTsKKyAgICBpZiAoaW5kZXggIT0gLTEpCisgICAgICAgIHJldHVybiBwYXRoLnN1YnN0
cmluZyhpbmRleCArIDEpOworICAgIHJldHVybiBwYXRoOworfQorCitTdHJpbmcgRE9NRmlsZVBh
dGg6OmdldERpcmVjdG9yeShjb25zdCBTdHJpbmcmIHBhdGgpCit7CisgICAgaW50IGluZGV4ID0g
cGF0aC5yZXZlcnNlRmluZChET01GaWxlUGF0aDo6c2VwYXJhdG9yKTsKKyAgICBpZiAoaW5kZXgg
PT0gMCkKKyAgICAgICAgcmV0dXJuIERPTUZpbGVQYXRoOjpyb290OworICAgIGlmIChpbmRleCAh
PSAtMSkKKyAgICAgICAgcmV0dXJuIHBhdGguc3Vic3RyaW5nKDAsIGluZGV4KTsKKyAgICByZXR1
cm4gIi4iOworfQorCitib29sIERPTUZpbGVQYXRoOjppc1BhcmVudE9mKGNvbnN0IFN0cmluZyYg
cGFyZW50LCBjb25zdCBTdHJpbmcmIG1heUJlQ2hpbGQpCit7CisgICAgQVNTRVJUKERPTUZpbGVQ
YXRoOjppc0Fic29sdXRlKHBhcmVudCkpOworICAgIEFTU0VSVChET01GaWxlUGF0aDo6aXNBYnNv
bHV0ZShtYXlCZUNoaWxkKSk7CisgICAgaWYgKHBhcmVudCA9PSBET01GaWxlUGF0aDo6cm9vdCAm
JiBtYXlCZUNoaWxkICE9IERPTUZpbGVQYXRoOjpyb290KQorICAgICAgICByZXR1cm4gdHJ1ZTsK
KyAgICBpZiAocGFyZW50Lmxlbmd0aCgpID49IG1heUJlQ2hpbGQubGVuZ3RoKCkgfHwgIW1heUJl
Q2hpbGQuc3RhcnRzV2l0aChwYXJlbnQsIGZhbHNlKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOwor
ICAgIGlmIChtYXlCZUNoaWxkW3BhcmVudC5sZW5ndGgoKV0gIT0gRE9NRmlsZVBhdGg6OnNlcGFy
YXRvcikKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIHJldHVybiB0cnVlOworfQorCitTdHJp
bmcgRE9NRmlsZVBhdGg6OnJlbW92ZUV4dHJhUGFyZW50UmVmZXJlbmNlcyhjb25zdCBTdHJpbmcm
IHBhdGgpCit7CisgICAgQVNTRVJUKERPTUZpbGVQYXRoOjppc0Fic29sdXRlKHBhdGgpKTsKKyAg
ICBWZWN0b3I8U3RyaW5nPiBjb21wb25lbnRzOworICAgIFZlY3RvcjxTdHJpbmc+IGNhbm9uaWNh
bGl6ZWQ7CisgICAgcGF0aC5zcGxpdChET01GaWxlUGF0aDo6c2VwYXJhdG9yLCBjb21wb25lbnRz
KTsKKyAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGNvbXBvbmVudHMuc2l6ZSgpOyArK2kpIHsK
KyAgICAgICAgaWYgKGNvbXBvbmVudHNbaV0gPT0gIi4iKQorICAgICAgICAgICAgY29udGludWU7
CisgICAgICAgIGlmIChjb21wb25lbnRzW2ldID09ICIuLiIpIHsKKyAgICAgICAgICAgIGlmIChj
YW5vbmljYWxpemVkLnNpemUoKSA+IDApCisgICAgICAgICAgICAgICAgY2Fub25pY2FsaXplZC5y
ZW1vdmVMYXN0KCk7CisgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgfQorICAgICAgICBj
YW5vbmljYWxpemVkLmFwcGVuZChjb21wb25lbnRzW2ldKTsKKyAgICB9CisgICAgaWYgKGNhbm9u
aWNhbGl6ZWQuaXNFbXB0eSgpKQorICAgICAgICByZXR1cm4gRE9NRmlsZVBhdGg6OnJvb3Q7Cisg
ICAgU3RyaW5nIHJlc3VsdDsKKyAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGNhbm9uaWNhbGl6
ZWQuc2l6ZSgpOyArK2kpIHsKKyAgICAgICAgcmVzdWx0LmFwcGVuZChET01GaWxlUGF0aDo6c2Vw
YXJhdG9yKTsKKyAgICAgICAgcmVzdWx0LmFwcGVuZChjYW5vbmljYWxpemVkW2ldKTsKKyAgICB9
CisgICAgcmV0dXJuIHJlc3VsdDsKK30KKworYm9vbCBET01GaWxlUGF0aDo6aXNWYWxpZFBhdGgo
Y29uc3QgU3RyaW5nJiBwYXRoKQoreworICAgIGlmIChwYXRoLmlzRW1wdHkoKSB8fCBwYXRoID09
IERPTUZpbGVQYXRoOjpyb290KQorICAgICAgICByZXR1cm4gdHJ1ZTsKKworICAgIC8vIEVtYmVk
ZGVkIE5VTHMgYXJlIG5vdCBhbGxvd2VkLgorICAgIGlmIChwYXRoLmZpbmQoc3RhdGljX2Nhc3Q8
VUNoYXI+KDApKSAhPSBXVEY6Om5vdEZvdW5kKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAg
ICAvLyBXaGlsZSBub3QgW3lldF0gcmVzdHJpY3RlZCBieSB0aGUgc3BlYywgJ1xcJyBjb21wbGlj
YXRlcyBpbXBsZW1lbnRhdGlvbiBmb3IgQ2hyb21pdW0uCisgICAgaWYgKHBhdGguZmluZCgnXFwn
KSAhPSBXVEY6Om5vdEZvdW5kKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICAvLyBUaGlz
IG1ldGhvZCBpcyBvbmx5IGNhbGxlZCBvbiBmdWxseS1ldmFsdWF0ZWQgYWJzb2x1dGUgcGF0aHMu
IEFueSBzaWduIG9mICIuLiIgb3IgIi4iIGlzIGxpa2VseSBhbiBhdHRlbXB0IHRvIGJyZWFrIG91
dCBvZiB0aGUgc2FuZGJveC4KKyAgICBWZWN0b3I8U3RyaW5nPiBjb21wb25lbnRzOworICAgIHBh
dGguc3BsaXQoRE9NRmlsZVBhdGg6OnNlcGFyYXRvciwgY29tcG9uZW50cyk7CisgICAgZm9yIChz
aXplX3QgaSA9IDA7IGkgPCBjb21wb25lbnRzLnNpemUoKTsgKytpKSB7CisgICAgICAgIGlmIChj
b21wb25lbnRzW2ldID09ICIuIikKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAg
aWYgKGNvbXBvbmVudHNbaV0gPT0gIi4uIikKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAg
ICB9CisgICAgcmV0dXJuIHRydWU7Cit9CisKK2Jvb2wgRE9NRmlsZVBhdGg6OmlzVmFsaWROYW1l
KGNvbnN0IFN0cmluZyYgbmFtZSkKK3sKKyAgICBpZiAobmFtZS5pc0VtcHR5KCkpCisgICAgICAg
IHJldHVybiB0cnVlOworICAgIC8vICcvJyBpcyBub3QgYWxsb3dlZCBpbiBuYW1lLgorICAgIGlm
IChuYW1lLmNvbnRhaW5zKCcvJykpCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICByZXR1cm4g
aXNWYWxpZFBhdGgobmFtZSk7Cit9CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKworI2VuZGlm
IC8vIEVOQUJMRShGSUxFX1NZU1RFTSkKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvZmls
ZXN5c3RlbS9ET01GaWxlUGF0aC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL01vZHVs
ZXMvZmlsZXN5c3RlbS9ET01GaWxlUGF0aC5oCShyZXZpc2lvbiAxMTA3MjYpCShmcm9tIFNvdXJj
ZS9XZWJDb3JlL2ZpbGVhcGkvRE9NRmlsZVBhdGguaDoxMTA3MjYpCisrKyBTb3VyY2UvV2ViQ29y
ZS9Nb2R1bGVzL2ZpbGVzeXN0ZW0vRE9NRmlsZVBhdGguaAkod29ya2luZyBjb3B5KQpAQCAtMCww
ICsxLDg2IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEwIEdvb2dsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5k
IGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJt
aXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCisgKiBtZXQ6
CisgKgorICogICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWlu
IHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBp
biBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKKyAqIGNvcHlyaWdodCBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIK
KyAqIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQg
d2l0aCB0aGUKKyAqIGRpc3RyaWJ1dGlvbi4KKyAqICAgICAqIE5laXRoZXIgdGhlIG5hbWUgb2Yg
R29vZ2xlIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMKKyAqIGNvbnRyaWJ1dG9ycyBtYXkgYmUg
dXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tCisgKiB0aGlz
IHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoK
KyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFO
RCBDT05UUklCVVRPUlMKKyAqICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FS
UkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBX
QVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IKKyAqIEEgUEFSVElD
VUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJ
R0hUCisgKiBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJ
TkRJUkVDVCwgSU5DSURFTlRBTCwKKyAqIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVO
VElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFBST0NVUkVN
RU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAorICogREFU
QSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBB
TkQgT04gQU5ZCisgKiBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBT
VFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RI
RVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09G
VFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0Uu
CisgKi8KKworI2lmbmRlZiBET01GaWxlUGF0aF9oCisjZGVmaW5lIERPTUZpbGVQYXRoX2gKKwor
I2luY2x1ZGUgIlBsYXRmb3JtU3RyaW5nLmgiCisjaW5jbHVkZSA8d3RmL1Bhc3NSZWZQdHIuaD4K
KyNpbmNsdWRlIDx3dGYvUmVmQ291bnRlZC5oPgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKKy8v
IERPTUZpbGVTeXN0ZW0gcGF0aCB1dGlsaXRpZXMuIEFsbCBtZXRob2RzIGluIHRoaXMgY2xhc3Mg
YXJlIHN0YXRpYy4KK2NsYXNzIERPTUZpbGVQYXRoIHsKK3B1YmxpYzoKKyAgICBzdGF0aWMgY29u
c3QgY2hhciBzZXBhcmF0b3I7CisgICAgc3RhdGljIGNvbnN0IGNoYXIgcm9vdFtdOworCisgICAg
Ly8gUmV0dXJucyB0aGUgbmFtZSBwYXJ0IGZyb20gdGhlIGdpdmVuIHBhdGguCisgICAgc3RhdGlj
IFN0cmluZyBnZXROYW1lKGNvbnN0IFN0cmluZyYgcGF0aCk7CisKKyAgICAvLyBSZXR1cm5zIHRo
ZSBwYXJlbnQgZGlyZWN0b3J5IHBhdGggb2YgdGhlIGdpdmVuIHBhdGguCisgICAgc3RhdGljIFN0
cmluZyBnZXREaXJlY3RvcnkoY29uc3QgU3RyaW5nJiBwYXRoKTsKKworICAgIC8vIENoZWNrcyBp
ZiBhIGdpdmVuIHBhdGggaXMgYSBwYXJlbnQgb2YgbWF5QmVDaGlsZC4gVGhpcyBtZXRob2QgYXNz
dW1lcyBnaXZlbiBwYXRocyBhcmUgYWJzb2x1dGUgYW5kIGRvIG5vdCBoYXZlIGV4dHJhIHJlZmVy
ZW5jZXMgdG8gYSBwYXJlbnQgKGkuZS4gIi4uLyIpLgorICAgIHN0YXRpYyBib29sIGlzUGFyZW50
T2YoY29uc3QgU3RyaW5nJiBwYXRoLCBjb25zdCBTdHJpbmcmIG1heUJlQ2hpbGQpOworCisgICAg
Ly8gQXBwZW5kcyB0aGUgc2VwYXJhdG9yIGF0IHRoZSBlbmQgb2YgdGhlIHBhdGggaWYgaXQncyBu
b3QgdGhlcmUgYWxyZWFkeS4KKyAgICBzdGF0aWMgU3RyaW5nIGVuc3VyZURpcmVjdG9yeVBhdGgo
Y29uc3QgU3RyaW5nJiBwYXRoKTsKKworICAgIC8vIFJldHVybnMgYSBuZXcgcGF0aCBieSBhcHBl
bmRpbmcgYSBzZXBhcmF0b3IgYW5kIHRoZSBzdXBwbGllZCBwYXRoIGNvbXBvbmVudCB0byB0aGUg
cGF0aC4KKyAgICBzdGF0aWMgU3RyaW5nIGFwcGVuZChjb25zdCBTdHJpbmcmIHBhdGgsIGNvbnN0
IFN0cmluZyYgY29tcG9uZW50KTsKKworICAgIHN0YXRpYyBib29sIGlzQWJzb2x1dGUoY29uc3Qg
U3RyaW5nJiBwYXRoKQorICAgIHsKKyAgICAgICAgcmV0dXJuIHBhdGguc3RhcnRzV2l0aChET01G
aWxlUGF0aDo6cm9vdCk7CisgICAgfQorCisgICAgc3RhdGljIGJvb2wgZW5kc1dpdGhTZXBhcmF0
b3IoY29uc3QgU3RyaW5nJiBwYXRoKQorICAgIHsKKyAgICAgICAgcmV0dXJuIHBhdGhbcGF0aC5s
ZW5ndGgoKSAtIDFdID09IERPTUZpbGVQYXRoOjpzZXBhcmF0b3I7CisgICAgfQorCisgICAgLy8g
RXZhbHVhdGVzIGFsbCAiLi4vIiBhbmQgIi4vIiBzZWdtZW50cy4gIE5vdGUgdGhhdCAiLy4uLyIg
ZXhwYW5kcyB0byAiLyIsIHNvIHlvdSBjYW4ndCBldmVyIHJlZmVyIHRvIGFueXRoaW5nIGFib3Zl
IHRoZSByb290IGRpcmVjdG9yeS4KKyAgICBzdGF0aWMgU3RyaW5nIHJlbW92ZUV4dHJhUGFyZW50
UmVmZXJlbmNlcyhjb25zdCBTdHJpbmcmIHBhdGgpOworCisgICAgLy8gQ2hlY2tzIGlmIHRoZSBn
aXZlbiBwYXRoIGZvbGxvd3MgdGhlIEZpbGVTeXN0ZW0gQVBJIG5hbWluZyByZXN0cmljdGlvbnMu
CisgICAgc3RhdGljIGJvb2wgaXNWYWxpZFBhdGgoY29uc3QgU3RyaW5nJiBwYXRoKTsKKworICAg
IC8vIENoZWNrcyBpZiB0aGUgZ2l2ZW4gbmFtZSBmb2xsb3dzIHRoZSBGaWxlU3lzdGVtIEFQSSBu
YW1pbmcgcmVzdHJpY3Rpb25zLgorICAgIHN0YXRpYyBib29sIGlzVmFsaWROYW1lKGNvbnN0IFN0
cmluZyYgbmFtZSk7CisKK3ByaXZhdGU6CisgICAgRE9NRmlsZVBhdGgoKSB7IH0KK307CisKK30g
Ly8gbmFtZXNwYWNlIFdlYkNvcmUKKworI2VuZGlmIC8vIERPTUZpbGVQYXRoX2gKSW5kZXg6IFNv
dXJjZS9XZWJDb3JlL01vZHVsZXMvZmlsZXN5c3RlbS9ET01GaWxlU3lzdGVtLmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2ZpbGVzeXN0ZW0vRE9NRmlsZVN5c3RlbS5j
cHAJKHJldmlzaW9uIDExMDcyNikJKGZyb20gU291cmNlL1dlYkNvcmUvZmlsZWFwaS9ET01GaWxl
U3lzdGVtLmNwcDoxMTA3MjYpCisrKyBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2ZpbGVzeXN0ZW0v
RE9NRmlsZVN5c3RlbS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwxNjIgQEAKKy8qCisg
KiBDb3B5cmlnaHQgKEMpIDIwMTAgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAq
CisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3
aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0
aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUKKyAqIG1ldDoKKyAqCisgKiAgICAgKiBS
ZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHly
aWdodAorICogbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyLgorICogICAgICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11
c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQorICogY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lcgorICogaW4gdGhlIGRvY3Vt
ZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQorICogZGlz
dHJpYnV0aW9uLgorICogICAgICogTmVpdGhlciB0aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBub3Ig
dGhlIG5hbWVzIG9mIGl0cworICogY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ug
b3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20KKyAqIHRoaXMgc29mdHdhcmUgd2l0aG91
dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogVEhJUyBTT0ZUV0FS
RSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUwor
ICogIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJ
TkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVS
Q0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgorICogQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJF
IERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKKyAqIE9XTkVSIE9S
IENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVO
VEFMLAorICogU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElO
Q0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVU
RSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCisgKiBEQVRBLCBPUiBQUk9GSVRTOyBP
UiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKKyAqIFRI
RU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFks
IE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcg
SU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBB
RFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVk
ZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiRE9NRmlsZVN5c3RlbS5oIgorCisjaWYgRU5BQkxFKEZJ
TEVfU1lTVEVNKQorCisjaW5jbHVkZSAiQXN5bmNGaWxlU3lzdGVtLmgiCisjaW5jbHVkZSAiRE9N
RmlsZVBhdGguaCIKKyNpbmNsdWRlICJEaXJlY3RvcnlFbnRyeS5oIgorI2luY2x1ZGUgIkVycm9y
Q2FsbGJhY2suaCIKKyNpbmNsdWRlICJGaWxlLmgiCisjaW5jbHVkZSAiRmlsZUNhbGxiYWNrLmgi
CisjaW5jbHVkZSAiRmlsZUVudHJ5LmgiCisjaW5jbHVkZSAiRmlsZU1ldGFkYXRhLmgiCisjaW5j
bHVkZSAiRmlsZVN5c3RlbUNhbGxiYWNrcy5oIgorI2luY2x1ZGUgIkZpbGVXcml0ZXIuaCIKKyNp
bmNsdWRlICJGaWxlV3JpdGVyQmFzZUNhbGxiYWNrLmgiCisjaW5jbHVkZSAiRmlsZVdyaXRlckNh
bGxiYWNrLmgiCisjaW5jbHVkZSAiSW5zcGVjdG9yRmlsZVN5c3RlbUluc3RydW1lbnRhdGlvbi5o
IgorI2luY2x1ZGUgIk1ldGFkYXRhQ2FsbGJhY2suaCIKKyNpbmNsdWRlICJTY3JpcHRFeGVjdXRp
b25Db250ZXh0LmgiCisjaW5jbHVkZSA8d3RmL093blB0ci5oPgorCituYW1lc3BhY2UgV2ViQ29y
ZSB7CisKKy8vIHN0YXRpYworUGFzc1JlZlB0cjxET01GaWxlU3lzdGVtPiBET01GaWxlU3lzdGVt
OjpjcmVhdGUoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCogY29udGV4dCwgY29uc3QgU3RyaW5nJiBu
YW1lLCBQYXNzT3duUHRyPEFzeW5jRmlsZVN5c3RlbT4gYXN5bmNGaWxlU3lzdGVtKQoreworICAg
IFJlZlB0cjxET01GaWxlU3lzdGVtPiBmaWxlU3lzdGVtKGFkb3B0UmVmKG5ldyBET01GaWxlU3lz
dGVtKGNvbnRleHQsIG5hbWUsIGFzeW5jRmlsZVN5c3RlbSkpKTsKKyAgICBmaWxlU3lzdGVtLT5z
dXNwZW5kSWZOZWVkZWQoKTsKKyAgICBJbnNwZWN0b3JJbnN0cnVtZW50YXRpb246OmRpZE9wZW5G
aWxlU3lzdGVtKGZpbGVTeXN0ZW0uZ2V0KCkpOworICAgIHJldHVybiBmaWxlU3lzdGVtLnJlbGVh
c2UoKTsKK30KKworRE9NRmlsZVN5c3RlbTo6RE9NRmlsZVN5c3RlbShTY3JpcHRFeGVjdXRpb25D
b250ZXh0KiBjb250ZXh0LCBjb25zdCBTdHJpbmcmIG5hbWUsIFBhc3NPd25QdHI8QXN5bmNGaWxl
U3lzdGVtPiBhc3luY0ZpbGVTeXN0ZW0pCisgICAgOiBET01GaWxlU3lzdGVtQmFzZShjb250ZXh0
LCBuYW1lLCBhc3luY0ZpbGVTeXN0ZW0pCisgICAgLCBBY3RpdmVET01PYmplY3QoY29udGV4dCwg
dGhpcykKK3sKK30KKworUGFzc1JlZlB0cjxEaXJlY3RvcnlFbnRyeT4gRE9NRmlsZVN5c3RlbTo6
cm9vdCgpCit7CisgICAgcmV0dXJuIERpcmVjdG9yeUVudHJ5OjpjcmVhdGUodGhpcywgRE9NRmls
ZVBhdGg6OnJvb3QpOworfQorCit2b2lkIERPTUZpbGVTeXN0ZW06OnN0b3AoKQoreworICAgIG1f
YXN5bmNGaWxlU3lzdGVtLT5zdG9wKCk7Cit9CisKK2Jvb2wgRE9NRmlsZVN5c3RlbTo6aGFzUGVu
ZGluZ0FjdGl2aXR5KCkgY29uc3QKK3sKKyAgICByZXR1cm4gbV9hc3luY0ZpbGVTeXN0ZW0tPmhh
c1BlbmRpbmdBY3Rpdml0eSgpOworfQorCit2b2lkIERPTUZpbGVTeXN0ZW06OmNvbnRleHREZXN0
cm95ZWQoKQoreworICAgIG1fYXN5bmNGaWxlU3lzdGVtLT5zdG9wKCk7CisgICAgQWN0aXZlRE9N
T2JqZWN0Ojpjb250ZXh0RGVzdHJveWVkKCk7Cit9CisKK25hbWVzcGFjZSB7CisKK2NsYXNzIENv
bnZlcnRUb0ZpbGVXcml0ZXJDYWxsYmFjayA6IHB1YmxpYyBGaWxlV3JpdGVyQmFzZUNhbGxiYWNr
IHsKK3B1YmxpYzoKKyAgICBzdGF0aWMgUGFzc1JlZlB0cjxDb252ZXJ0VG9GaWxlV3JpdGVyQ2Fs
bGJhY2s+IGNyZWF0ZShQYXNzUmVmUHRyPEZpbGVXcml0ZXJDYWxsYmFjaz4gY2FsbGJhY2spCisg
ICAgeworICAgICAgICByZXR1cm4gYWRvcHRSZWYobmV3IENvbnZlcnRUb0ZpbGVXcml0ZXJDYWxs
YmFjayhjYWxsYmFjaykpOworICAgIH0KKworICAgIGJvb2wgaGFuZGxlRXZlbnQoRmlsZVdyaXRl
ckJhc2UqIGZpbGVXcml0ZXJCYXNlKQorICAgIHsKKyAgICAgICAgcmV0dXJuIG1fY2FsbGJhY2st
PmhhbmRsZUV2ZW50KHN0YXRpY19jYXN0PEZpbGVXcml0ZXIqPihmaWxlV3JpdGVyQmFzZSkpOwor
ICAgIH0KK3ByaXZhdGU6CisgICAgQ29udmVydFRvRmlsZVdyaXRlckNhbGxiYWNrKFBhc3NSZWZQ
dHI8RmlsZVdyaXRlckNhbGxiYWNrPiBjYWxsYmFjaykKKyAgICAgICAgOiBtX2NhbGxiYWNrKGNh
bGxiYWNrKQorICAgIHsKKyAgICB9CisgICAgUmVmUHRyPEZpbGVXcml0ZXJDYWxsYmFjaz4gbV9j
YWxsYmFjazsKK307CisKK30KKwordm9pZCBET01GaWxlU3lzdGVtOjpjcmVhdGVXcml0ZXIoY29u
c3QgRmlsZUVudHJ5KiBmaWxlRW50cnksIFBhc3NSZWZQdHI8RmlsZVdyaXRlckNhbGxiYWNrPiBz
dWNjZXNzQ2FsbGJhY2ssIFBhc3NSZWZQdHI8RXJyb3JDYWxsYmFjaz4gZXJyb3JDYWxsYmFjaykK
K3sKKyAgICBBU1NFUlQoZmlsZUVudHJ5KTsKKworICAgIFJlZlB0cjxGaWxlV3JpdGVyPiBmaWxl
V3JpdGVyID0gRmlsZVdyaXRlcjo6Y3JlYXRlKHNjcmlwdEV4ZWN1dGlvbkNvbnRleHQoKSk7Cisg
ICAgUmVmUHRyPEZpbGVXcml0ZXJCYXNlQ2FsbGJhY2s+IGNvbnZlcnNpb25DYWxsYmFjayA9IENv
bnZlcnRUb0ZpbGVXcml0ZXJDYWxsYmFjazo6Y3JlYXRlKHN1Y2Nlc3NDYWxsYmFjayk7CisgICAg
T3duUHRyPEZpbGVXcml0ZXJCYXNlQ2FsbGJhY2tzPiBjYWxsYmFja3MgPSBGaWxlV3JpdGVyQmFz
ZUNhbGxiYWNrczo6Y3JlYXRlKGZpbGVXcml0ZXIsIGNvbnZlcnNpb25DYWxsYmFjaywgZXJyb3JD
YWxsYmFjayk7CisgICAgbV9hc3luY0ZpbGVTeXN0ZW0tPmNyZWF0ZVdyaXRlcihmaWxlV3JpdGVy
LmdldCgpLCBmaWxlRW50cnktPmZ1bGxQYXRoKCksIGNhbGxiYWNrcy5yZWxlYXNlKCkpOworfQor
CituYW1lc3BhY2UgeworCitjbGFzcyBHZXRQYXRoQ2FsbGJhY2sgOiBwdWJsaWMgRmlsZVN5c3Rl
bUNhbGxiYWNrc0Jhc2UgeworcHVibGljOgorICAgIHN0YXRpYyBQYXNzT3duUHRyPEdldFBhdGhD
YWxsYmFjaz4gY3JlYXRlKFBhc3NSZWZQdHI8RE9NRmlsZVN5c3RlbT4gZmlsZXN5c3RlbSwgY29u
c3QgU3RyaW5nJiBuYW1lLCBQYXNzUmVmUHRyPEZpbGVDYWxsYmFjaz4gc3VjY2Vzc0NhbGxiYWNr
LCBQYXNzUmVmUHRyPEVycm9yQ2FsbGJhY2s+IGVycm9yQ2FsbGJhY2spCisgICAgeworICAgICAg
ICByZXR1cm4gYWRvcHRQdHIobmV3IEdldFBhdGhDYWxsYmFjayhmaWxlc3lzdGVtLCBuYW1lLCBz
dWNjZXNzQ2FsbGJhY2ssIGVycm9yQ2FsbGJhY2spKTsKKyAgICB9CisKKyAgICB2aXJ0dWFsIHZv
aWQgZGlkUmVhZE1ldGFkYXRhKGNvbnN0IEZpbGVNZXRhZGF0YSYgbWV0YWRhdGEpCisgICAgewor
ICAgICAgICBBU1NFUlQoIW1ldGFkYXRhLnBsYXRmb3JtUGF0aC5pc0VtcHR5KCkpOworICAgICAg
ICBtX2ZpbGVzeXN0ZW0tPnNjaGVkdWxlQ2FsbGJhY2sobV9zdWNjZXNzQ2FsbGJhY2sucmVsZWFz
ZSgpLCBGaWxlOjpjcmVhdGVXaXRoTmFtZShtZXRhZGF0YS5wbGF0Zm9ybVBhdGgsIG1fbmFtZSkp
OworICAgIH0KKworcHJpdmF0ZToKKyAgICBHZXRQYXRoQ2FsbGJhY2soUGFzc1JlZlB0cjxET01G
aWxlU3lzdGVtPiBmaWxlc3lzdGVtLCBjb25zdCBTdHJpbmcmIG5hbWUsICBQYXNzUmVmUHRyPEZp
bGVDYWxsYmFjaz4gc3VjY2Vzc0NhbGxiYWNrLCBQYXNzUmVmUHRyPEVycm9yQ2FsbGJhY2s+IGVy
cm9yQ2FsbGJhY2spCisgICAgICAgIDogRmlsZVN5c3RlbUNhbGxiYWNrc0Jhc2UoZXJyb3JDYWxs
YmFjaykKKyAgICAgICAgLCBtX2ZpbGVzeXN0ZW0oZmlsZXN5c3RlbSkKKyAgICAgICAgLCBtX25h
bWUobmFtZSkKKyAgICAgICAgLCBtX3N1Y2Nlc3NDYWxsYmFjayhzdWNjZXNzQ2FsbGJhY2spCisg
ICAgeworICAgIH0KKworICAgIFJlZlB0cjxET01GaWxlU3lzdGVtPiBtX2ZpbGVzeXN0ZW07Cisg
ICAgU3RyaW5nIG1fbmFtZTsKKyAgICBSZWZQdHI8RmlsZUNhbGxiYWNrPiBtX3N1Y2Nlc3NDYWxs
YmFjazsKK307CisKK30gLy8gbmFtZXNwYWNlCisKK3ZvaWQgRE9NRmlsZVN5c3RlbTo6Y3JlYXRl
RmlsZShjb25zdCBGaWxlRW50cnkqIGZpbGVFbnRyeSwgUGFzc1JlZlB0cjxGaWxlQ2FsbGJhY2s+
IHN1Y2Nlc3NDYWxsYmFjaywgUGFzc1JlZlB0cjxFcnJvckNhbGxiYWNrPiBlcnJvckNhbGxiYWNr
KQoreworICAgIG1fYXN5bmNGaWxlU3lzdGVtLT5jcmVhdGVTbmFwc2hvdEZpbGVBbmRSZWFkTWV0
YWRhdGEoZmlsZUVudHJ5LT5mdWxsUGF0aCgpLCBHZXRQYXRoQ2FsbGJhY2s6OmNyZWF0ZSh0aGlz
LCBmaWxlRW50cnktPm5hbWUoKSwgc3VjY2Vzc0NhbGxiYWNrLCBlcnJvckNhbGxiYWNrKSk7Cit9
CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKworI2VuZGlmIC8vIEVOQUJMRShGSUxFX1NZU1RF
TSkKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvZmlsZXN5c3RlbS9ET01GaWxlU3lzdGVt
LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvTW9kdWxlcy9maWxlc3lzdGVtL0RPTUZp
bGVTeXN0ZW0uaAkocmV2aXNpb24gMTEwNzI2KQkoZnJvbSBTb3VyY2UvV2ViQ29yZS9maWxlYXBp
L0RPTUZpbGVTeXN0ZW0uaDoxMTA3MjYpCisrKyBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2ZpbGVz
eXN0ZW0vRE9NRmlsZVN5c3RlbS5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMTA5IEBACisv
KgorICogQ29weXJpZ2h0IChDKSAyMDEwIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jt
cywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlk
ZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCisgKiBtZXQ6CisgKgorICogICAg
ICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyAqIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lci4KKyAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9y
bSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKKyAqIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIKKyAqIGluIHRoZSBk
b2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKKyAq
IGRpc3RyaWJ1dGlvbi4KKyAqICAgICAqIE5laXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xlIEluYy4g
bm9yIHRoZSBuYW1lcyBvZiBpdHMKKyAqIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRv
cnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tCisgKiB0aGlzIHNvZnR3YXJlIHdp
dGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAqIFRISVMgU09G
VFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRP
UlMKKyAqICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5D
TFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9G
IE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IKKyAqIEEgUEFSVElDVUxBUiBQVVJQT1NF
IEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCisgKiBPV05F
UiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5D
SURFTlRBTCwKKyAqIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VT
IChJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNU
SVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAorICogREFUQSwgT1IgUFJPRklU
UzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCisg
KiBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklM
SVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklT
SU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4g
SUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2lm
bmRlZiBET01GaWxlU3lzdGVtX2gKKyNkZWZpbmUgRE9NRmlsZVN5c3RlbV9oCisKKyNpZiBFTkFC
TEUoRklMRV9TWVNURU0pCisKKyNpbmNsdWRlICJBY3RpdmVET01PYmplY3QuaCIKKyNpbmNsdWRl
ICJET01GaWxlU3lzdGVtQmFzZS5oIgorI2luY2x1ZGUgIlNjcmlwdEV4ZWN1dGlvbkNvbnRleHQu
aCIKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitjbGFzcyBEaXJlY3RvcnlFbnRyeTsKK2NsYXNz
IEZpbGU7CitjbGFzcyBGaWxlQ2FsbGJhY2s7CitjbGFzcyBGaWxlRW50cnk7CitjbGFzcyBGaWxl
V3JpdGVyQ2FsbGJhY2s7CisKK2NsYXNzIERPTUZpbGVTeXN0ZW0gOiBwdWJsaWMgRE9NRmlsZVN5
c3RlbUJhc2UsIHB1YmxpYyBBY3RpdmVET01PYmplY3QgeworcHVibGljOgorICAgIHN0YXRpYyBQ
YXNzUmVmUHRyPERPTUZpbGVTeXN0ZW0+IGNyZWF0ZShTY3JpcHRFeGVjdXRpb25Db250ZXh0Kiwg
Y29uc3QgU3RyaW5nJiBuYW1lLCBQYXNzT3duUHRyPEFzeW5jRmlsZVN5c3RlbT4pOworCisgICAg
UGFzc1JlZlB0cjxEaXJlY3RvcnlFbnRyeT4gcm9vdCgpOworCisgICAgLy8gQWN0aXZlRE9NT2Jq
ZWN0IG1ldGhvZHMuCisgICAgdmlydHVhbCB2b2lkIHN0b3AoKTsKKyAgICB2aXJ0dWFsIGJvb2wg
aGFzUGVuZGluZ0FjdGl2aXR5KCkgY29uc3Q7CisgICAgdmlydHVhbCB2b2lkIGNvbnRleHREZXN0
cm95ZWQoKTsKKworICAgIHZvaWQgY3JlYXRlV3JpdGVyKGNvbnN0IEZpbGVFbnRyeSosIFBhc3NS
ZWZQdHI8RmlsZVdyaXRlckNhbGxiYWNrPiwgUGFzc1JlZlB0cjxFcnJvckNhbGxiYWNrPik7Cisg
ICAgdm9pZCBjcmVhdGVGaWxlKGNvbnN0IEZpbGVFbnRyeSosIFBhc3NSZWZQdHI8RmlsZUNhbGxi
YWNrPiwgUGFzc1JlZlB0cjxFcnJvckNhbGxiYWNrPik7CisKKyAgICAvLyBTY2hlZHVsZSBhIGNh
bGxiYWNrLiBUaGlzIHNob3VsZCBub3QgY3Jvc3MgdGhyZWFkcyAoc2hvdWxkIGJlIGNhbGxlZCBv
biB0aGUgc2FtZSBjb250ZXh0IHRocmVhZCkuCisgICAgLy8gRklYTUU6IG1vdmUgdGhpcyB0byBh
IG1vcmUgZ2VuZXJpYyBwbGFjZS4KKyAgICB0ZW1wbGF0ZSA8dHlwZW5hbWUgQ0IsIHR5cGVuYW1l
IENCQXJnPgorICAgIHN0YXRpYyB2b2lkIHNjaGVkdWxlQ2FsbGJhY2soU2NyaXB0RXhlY3V0aW9u
Q29udGV4dCosIFBhc3NSZWZQdHI8Q0I+LCBQYXNzUmVmUHRyPENCQXJnPik7CisKKyAgICB0ZW1w
bGF0ZSA8dHlwZW5hbWUgQ0IsIHR5cGVuYW1lIENCQXJnPgorICAgIHZvaWQgc2NoZWR1bGVDYWxs
YmFjayhQYXNzUmVmUHRyPENCPiBjYWxsYmFjaywgUGFzc1JlZlB0cjxDQkFyZz4gY2FsbGJhY2tB
cmcpCisgICAgeworICAgICAgICBzY2hlZHVsZUNhbGxiYWNrKHNjcmlwdEV4ZWN1dGlvbkNvbnRl
eHQoKSwgY2FsbGJhY2ssIGNhbGxiYWNrQXJnKTsKKyAgICB9CisKK3ByaXZhdGU6CisgICAgRE9N
RmlsZVN5c3RlbShTY3JpcHRFeGVjdXRpb25Db250ZXh0KiwgY29uc3QgU3RyaW5nJiBuYW1lLCBQ
YXNzT3duUHRyPEFzeW5jRmlsZVN5c3RlbT4pOworCisgICAgLy8gQSBoZWxwZXIgdGVtcGxhdGUg
dG8gc2NoZWR1bGUgYSBjYWxsYmFjayB0YXNrLgorICAgIHRlbXBsYXRlIDx0eXBlbmFtZSBDQiwg
dHlwZW5hbWUgQ0JBcmc+CisgICAgY2xhc3MgRGlzcGF0Y2hDYWxsYmFja1Rhc2sgOiBwdWJsaWMg
U2NyaXB0RXhlY3V0aW9uQ29udGV4dDo6VGFzayB7CisgICAgcHVibGljOgorICAgICAgICBEaXNw
YXRjaENhbGxiYWNrVGFzayhQYXNzUmVmUHRyPENCPiBjYWxsYmFjaywgUGFzc1JlZlB0cjxDQkFy
Zz4gYXJnKQorICAgICAgICAgICAgOiBtX2NhbGxiYWNrKGNhbGxiYWNrKQorICAgICAgICAgICAg
LCBtX2NhbGxiYWNrQXJnKGFyZykKKyAgICAgICAgeworICAgICAgICB9CisKKyAgICAgICAgdmly
dHVhbCB2b2lkIHBlcmZvcm1UYXNrKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqKQorICAgICAgICB7
CisgICAgICAgICAgICBtX2NhbGxiYWNrLT5oYW5kbGVFdmVudChtX2NhbGxiYWNrQXJnLmdldCgp
KTsKKyAgICAgICAgfQorCisgICAgcHJpdmF0ZToKKyAgICAgICAgUmVmUHRyPENCPiBtX2NhbGxi
YWNrOworICAgICAgICBSZWZQdHI8Q0JBcmc+IG1fY2FsbGJhY2tBcmc7CisgICAgfTsKK307CisK
K3RlbXBsYXRlIDx0eXBlbmFtZSBDQiwgdHlwZW5hbWUgQ0JBcmc+Cit2b2lkIERPTUZpbGVTeXN0
ZW06OnNjaGVkdWxlQ2FsbGJhY2soU2NyaXB0RXhlY3V0aW9uQ29udGV4dCogc2NyaXB0RXhlY3V0
aW9uQ29udGV4dCwgUGFzc1JlZlB0cjxDQj4gY2FsbGJhY2ssIFBhc3NSZWZQdHI8Q0JBcmc+IGFy
ZykKK3sKKyAgICBBU1NFUlQoc2NyaXB0RXhlY3V0aW9uQ29udGV4dC0+aXNDb250ZXh0VGhyZWFk
KCkpOworICAgIGlmIChjYWxsYmFjaykKKyAgICAgICAgc2NyaXB0RXhlY3V0aW9uQ29udGV4dC0+
cG9zdFRhc2soYWRvcHRQdHIobmV3IERpc3BhdGNoQ2FsbGJhY2tUYXNrPENCLCBDQkFyZz4oY2Fs
bGJhY2ssIGFyZykpKTsKK30KKworfSAvLyBuYW1lc3BhY2UKKworI2VuZGlmIC8vIEVOQUJMRShG
SUxFX1NZU1RFTSkKKworI2VuZGlmIC8vIERPTUZpbGVTeXN0ZW1faApJbmRleDogU291cmNlL1dl
YkNvcmUvTW9kdWxlcy9maWxlc3lzdGVtL0RPTUZpbGVTeXN0ZW0uaWRsCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvZmlsZXN5c3RlbS9ET01GaWxlU3lzdGVtLmlkbAkocmV2
aXNpb24gMTEwNzI2KQkoZnJvbSBTb3VyY2UvV2ViQ29yZS9maWxlYXBpL0RPTUZpbGVTeXN0ZW0u
aWRsOjExMDcyNikKKysrIFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvZmlsZXN5c3RlbS9ET01GaWxl
U3lzdGVtLmlkbAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDQxIEBACisvKgorICogQ29weXJp
Z2h0IChDKSAyMDEwIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmln
aHQgKEMpIDIwMTEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlz
dHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0
aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZv
bGxvd2luZyBjb25kaXRpb25zIGFyZQorICogbWV0OgorICoKKyAqICAgICAqIFJlZGlzdHJpYnV0
aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIuCisgKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1
Y2UgdGhlIGFib3ZlCisgKiBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyCisgKiBpbiB0aGUgZG9jdW1lbnRhdGlvbiBh
bmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCisgKiBkaXN0cmlidXRpb24u
CisgKiAgICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9mIEdvb2dsZSBJbmMuIG5vciB0aGUgbmFtZXMg
b2YgaXRzCisgKiBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3Rl
IHByb2R1Y3RzIGRlcml2ZWQgZnJvbQorICogdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmlj
IHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJ
REVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCisgKiAiQVMgSVMi
IEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5P
VAorICogTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJ
VFkgQU5EIEZJVE5FU1MgRk9SCisgKiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1F
RC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAorICogT1dORVIgT1IgQ09OVFJJQlVU
T1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCisgKiBT
UEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBC
VVQgTk9UCisgKiBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9S
IFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKKyAqIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNT
IElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQorICogVEhFT1JZIE9GIExJ
QUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAor
ICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZ
IE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0Yg
VEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKK21vZHVsZSBzdG9yYWdlIHsK
KyAgICBpbnRlcmZhY2UgWworICAgICAgICBDb25kaXRpb25hbD1GSUxFX1NZU1RFTSwKKyAgICAg
ICAgQWN0aXZlRE9NT2JqZWN0LAorICAgICAgICBKU05vU3RhdGljVGFibGVzCisgICAgXSBET01G
aWxlU3lzdGVtIHsKKyAgICAgICAgcmVhZG9ubHkgYXR0cmlidXRlIERPTVN0cmluZyBuYW1lOwor
ICAgICAgICByZWFkb25seSBhdHRyaWJ1dGUgRGlyZWN0b3J5RW50cnkgcm9vdDsKKyAgICB9Owor
fQpJbmRleDogU291cmNlL1dlYkNvcmUvTW9kdWxlcy9maWxlc3lzdGVtL0RPTUZpbGVTeXN0ZW1C
YXNlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2ZpbGVzeXN0ZW0v
RE9NRmlsZVN5c3RlbUJhc2UuY3BwCShyZXZpc2lvbiAxMTA3MjYpCShmcm9tIFNvdXJjZS9XZWJD
b3JlL2ZpbGVhcGkvRE9NRmlsZVN5c3RlbUJhc2UuY3BwOjExMDcyNikKKysrIFNvdXJjZS9XZWJD
b3JlL01vZHVsZXMvZmlsZXN5c3RlbS9ET01GaWxlU3lzdGVtQmFzZS5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTAsMCArMSwyMDEgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTAgR29vZ2xlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGlu
IHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlv
biwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBh
cmUKKyAqIG1ldDoKKyAqCisgKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUg
bXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogICAgICogUmVkaXN0
cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQorICogY29w
eXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lcgorICogaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFs
cyBwcm92aWRlZCB3aXRoIHRoZQorICogZGlzdHJpYnV0aW9uLgorICogICAgICogTmVpdGhlciB0
aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0cworICogY29udHJpYnV0
b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZy
b20KKyAqIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1p
c3Npb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hU
IEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUworICogIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1Ig
SU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFRI
RSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgor
ICogQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxM
IFRIRSBDT1BZUklHSFQKKyAqIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFO
WSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAorICogU1BFQ0lBTCwgRVhFTVBMQVJZLCBP
UiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBU
TywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBV
U0UsCisgKiBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VW
RVIgQ0FVU0VEIEFORCBPTiBBTlkKKyAqIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4g
Q09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElH
RU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICog
T0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBT
VUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiRE9NRmls
ZVN5c3RlbUJhc2UuaCIKKworI2lmIEVOQUJMRShGSUxFX1NZU1RFTSkKKworI2luY2x1ZGUgIkRP
TUZpbGVQYXRoLmgiCisjaW5jbHVkZSAiRGlyZWN0b3J5RW50cnkuaCIKKyNpbmNsdWRlICJEaXJl
Y3RvcnlSZWFkZXJCYXNlLmgiCisjaW5jbHVkZSAiRW50cmllc0NhbGxiYWNrLmgiCisjaW5jbHVk
ZSAiRW50cnlBcnJheS5oIgorI2luY2x1ZGUgIkVudHJ5QmFzZS5oIgorI2luY2x1ZGUgIkVudHJ5
Q2FsbGJhY2suaCIKKyNpbmNsdWRlICJFcnJvckNhbGxiYWNrLmgiCisjaW5jbHVkZSAiRmlsZUVy
cm9yLmgiCisjaW5jbHVkZSAiRmlsZVN5c3RlbUNhbGxiYWNrcy5oIgorI2luY2x1ZGUgIk1ldGFk
YXRhQ2FsbGJhY2suaCIKKyNpbmNsdWRlICJTY3JpcHRFeGVjdXRpb25Db250ZXh0LmgiCisjaW5j
bHVkZSAiVm9pZENhbGxiYWNrLmgiCisjaW5jbHVkZSA8d3RmL093blB0ci5oPgorCituYW1lc3Bh
Y2UgV2ViQ29yZSB7CisKK0RPTUZpbGVTeXN0ZW1CYXNlOjpET01GaWxlU3lzdGVtQmFzZShTY3Jp
cHRFeGVjdXRpb25Db250ZXh0KiBjb250ZXh0LCBjb25zdCBTdHJpbmcmIG5hbWUsIFBhc3NPd25Q
dHI8QXN5bmNGaWxlU3lzdGVtPiBhc3luY0ZpbGVTeXN0ZW0pCisgICAgOiBtX2NvbnRleHQoY29u
dGV4dCkKKyAgICAsIG1fbmFtZShuYW1lKQorICAgICwgbV9hc3luY0ZpbGVTeXN0ZW0oYXN5bmNG
aWxlU3lzdGVtKQoreworfQorCitET01GaWxlU3lzdGVtQmFzZTo6fkRPTUZpbGVTeXN0ZW1CYXNl
KCkKK3sKK30KKworU2VjdXJpdHlPcmlnaW4qIERPTUZpbGVTeXN0ZW1CYXNlOjpzZWN1cml0eU9y
aWdpbigpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1fY29udGV4dC0+c2VjdXJpdHlPcmlnaW4oKTsK
K30KKworYm9vbCBET01GaWxlU3lzdGVtQmFzZTo6Z2V0TWV0YWRhdGEoY29uc3QgRW50cnlCYXNl
KiBlbnRyeSwgUGFzc1JlZlB0cjxNZXRhZGF0YUNhbGxiYWNrPiBzdWNjZXNzQ2FsbGJhY2ssIFBh
c3NSZWZQdHI8RXJyb3JDYWxsYmFjaz4gZXJyb3JDYWxsYmFjaykKK3sKKyAgICBtX2FzeW5jRmls
ZVN5c3RlbS0+cmVhZE1ldGFkYXRhKGVudHJ5LT5mdWxsUGF0aCgpLCBNZXRhZGF0YUNhbGxiYWNr
czo6Y3JlYXRlKHN1Y2Nlc3NDYWxsYmFjaywgZXJyb3JDYWxsYmFjaykpOworICAgIHJldHVybiB0
cnVlOworfQorCitzdGF0aWMgYm9vbCB2ZXJpZnlBbmRHZXREZXN0aW5hdGlvblBhdGhGb3JDb3B5
T3JNb3ZlKGNvbnN0IEVudHJ5QmFzZSogc291cmNlLCBFbnRyeUJhc2UqIHBhcmVudCwgY29uc3Qg
U3RyaW5nJiBuZXdOYW1lLCBTdHJpbmcmIGRlc3RpbmF0aW9uUGF0aCkKK3sKKyAgICBBU1NFUlQo
c291cmNlKTsKKworICAgIGlmICghcGFyZW50IHx8ICFwYXJlbnQtPmlzRGlyZWN0b3J5KCkpCisg
ICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIGlmICghbmV3TmFtZS5pc0VtcHR5KCkgJiYgIURP
TUZpbGVQYXRoOjppc1ZhbGlkTmFtZShuZXdOYW1lKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOwor
CisgICAgLy8gSXQgaXMgYW4gZXJyb3IgdG8gdHJ5IHRvIGNvcHkgb3IgbW92ZSBhbiBlbnRyeSBp
bnNpZGUgaXRzZWxmIGF0IGFueSBkZXB0aCBpZiBpdCBpcyBhIGRpcmVjdG9yeS4KKyAgICBpZiAo
c291cmNlLT5pc0RpcmVjdG9yeSgpICYmIERPTUZpbGVQYXRoOjppc1BhcmVudE9mKHNvdXJjZS0+
ZnVsbFBhdGgoKSwgcGFyZW50LT5mdWxsUGF0aCgpKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOwor
CisgICAgLy8gSXQgaXMgYW4gZXJyb3IgdG8gY29weSBvciBtb3ZlIGFuIGVudHJ5IGludG8gaXRz
IHBhcmVudCBpZiBhIG5hbWUgZGlmZmVyZW50IGZyb20gaXRzIGN1cnJlbnQgb25lIGlzbid0IHBy
b3ZpZGVkLgorICAgIGlmICgobmV3TmFtZS5pc0VtcHR5KCkgfHwgc291cmNlLT5uYW1lKCkgPT0g
bmV3TmFtZSkgJiYgRE9NRmlsZVBhdGg6OmdldERpcmVjdG9yeShzb3VyY2UtPmZ1bGxQYXRoKCkp
ID09IHBhcmVudC0+ZnVsbFBhdGgoKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgZGVz
dGluYXRpb25QYXRoID0gcGFyZW50LT5mdWxsUGF0aCgpOworICAgIGlmICghbmV3TmFtZS5pc0Vt
cHR5KCkpCisgICAgICAgIGRlc3RpbmF0aW9uUGF0aCA9IERPTUZpbGVQYXRoOjphcHBlbmQoZGVz
dGluYXRpb25QYXRoLCBuZXdOYW1lKTsKKyAgICBlbHNlCisgICAgICAgIGRlc3RpbmF0aW9uUGF0
aCA9IERPTUZpbGVQYXRoOjphcHBlbmQoZGVzdGluYXRpb25QYXRoLCBzb3VyY2UtPm5hbWUoKSk7
CisKKyAgICByZXR1cm4gdHJ1ZTsKK30KKworc3RhdGljIGJvb2wgcGF0aFRvQWJzb2x1dGVQYXRo
KEFzeW5jRmlsZVN5c3RlbTo6VHlwZSB0eXBlLCBjb25zdCBFbnRyeUJhc2UqIGJhc2UsIFN0cmlu
ZyBwYXRoLCBTdHJpbmcmIGFic29sdXRlUGF0aCkKK3sKKyAgICBBU1NFUlQoYmFzZSk7CisKKyAg
ICBpZiAoIURPTUZpbGVQYXRoOjppc0Fic29sdXRlKHBhdGgpKQorICAgICAgICBwYXRoID0gRE9N
RmlsZVBhdGg6OmFwcGVuZChiYXNlLT5mdWxsUGF0aCgpLCBwYXRoKTsKKyAgICBhYnNvbHV0ZVBh
dGggPSBET01GaWxlUGF0aDo6cmVtb3ZlRXh0cmFQYXJlbnRSZWZlcmVuY2VzKHBhdGgpOworCisg
ICAgaWYgKCh0eXBlID09IEFzeW5jRmlsZVN5c3RlbTo6VGVtcG9yYXJ5IHx8IHR5cGUgPT0gQXN5
bmNGaWxlU3lzdGVtOjpQZXJzaXN0ZW50KSAmJiAhRE9NRmlsZVBhdGg6OmlzVmFsaWRQYXRoKGFi
c29sdXRlUGF0aCkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICByZXR1cm4gdHJ1ZTsKK30K
KworYm9vbCBET01GaWxlU3lzdGVtQmFzZTo6bW92ZShjb25zdCBFbnRyeUJhc2UqIHNvdXJjZSwg
RW50cnlCYXNlKiBwYXJlbnQsIGNvbnN0IFN0cmluZyYgbmV3TmFtZSwgUGFzc1JlZlB0cjxFbnRy
eUNhbGxiYWNrPiBzdWNjZXNzQ2FsbGJhY2ssIFBhc3NSZWZQdHI8RXJyb3JDYWxsYmFjaz4gZXJy
b3JDYWxsYmFjaykKK3sKKyAgICBTdHJpbmcgZGVzdGluYXRpb25QYXRoOworICAgIGlmICghdmVy
aWZ5QW5kR2V0RGVzdGluYXRpb25QYXRoRm9yQ29weU9yTW92ZShzb3VyY2UsIHBhcmVudCwgbmV3
TmFtZSwgZGVzdGluYXRpb25QYXRoKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgbV9h
c3luY0ZpbGVTeXN0ZW0tPm1vdmUoc291cmNlLT5mdWxsUGF0aCgpLCBkZXN0aW5hdGlvblBhdGgs
IEVudHJ5Q2FsbGJhY2tzOjpjcmVhdGUoc3VjY2Vzc0NhbGxiYWNrLCBlcnJvckNhbGxiYWNrLCB0
aGlzLCBkZXN0aW5hdGlvblBhdGgsIHNvdXJjZS0+aXNEaXJlY3RvcnkoKSkpOworICAgIHJldHVy
biB0cnVlOworfQorCitib29sIERPTUZpbGVTeXN0ZW1CYXNlOjpjb3B5KGNvbnN0IEVudHJ5QmFz
ZSogc291cmNlLCBFbnRyeUJhc2UqIHBhcmVudCwgY29uc3QgU3RyaW5nJiBuZXdOYW1lLCBQYXNz
UmVmUHRyPEVudHJ5Q2FsbGJhY2s+IHN1Y2Nlc3NDYWxsYmFjaywgUGFzc1JlZlB0cjxFcnJvckNh
bGxiYWNrPiBlcnJvckNhbGxiYWNrKQoreworICAgIFN0cmluZyBkZXN0aW5hdGlvblBhdGg7Cisg
ICAgaWYgKCF2ZXJpZnlBbmRHZXREZXN0aW5hdGlvblBhdGhGb3JDb3B5T3JNb3ZlKHNvdXJjZSwg
cGFyZW50LCBuZXdOYW1lLCBkZXN0aW5hdGlvblBhdGgpKQorICAgICAgICByZXR1cm4gZmFsc2U7
CisKKyAgICBtX2FzeW5jRmlsZVN5c3RlbS0+Y29weShzb3VyY2UtPmZ1bGxQYXRoKCksIGRlc3Rp
bmF0aW9uUGF0aCwgRW50cnlDYWxsYmFja3M6OmNyZWF0ZShzdWNjZXNzQ2FsbGJhY2ssIGVycm9y
Q2FsbGJhY2ssIHRoaXMsIGRlc3RpbmF0aW9uUGF0aCwgc291cmNlLT5pc0RpcmVjdG9yeSgpKSk7
CisgICAgcmV0dXJuIHRydWU7Cit9CisKK2Jvb2wgRE9NRmlsZVN5c3RlbUJhc2U6OnJlbW92ZShj
b25zdCBFbnRyeUJhc2UqIGVudHJ5LCBQYXNzUmVmUHRyPFZvaWRDYWxsYmFjaz4gc3VjY2Vzc0Nh
bGxiYWNrLCBQYXNzUmVmUHRyPEVycm9yQ2FsbGJhY2s+IGVycm9yQ2FsbGJhY2spCit7CisgICAg
QVNTRVJUKGVudHJ5KTsKKyAgICAvLyBXZSBkb24ndCBhbGxvdyBjYWxsaW5nIHJlbW92ZSgpIG9u
IHRoZSByb290IGRpcmVjdG9yeS4KKyAgICBpZiAoZW50cnktPmZ1bGxQYXRoKCkgPT0gU3RyaW5n
KERPTUZpbGVQYXRoOjpyb290KSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIG1fYXN5bmNG
aWxlU3lzdGVtLT5yZW1vdmUoZW50cnktPmZ1bGxQYXRoKCksIFZvaWRDYWxsYmFja3M6OmNyZWF0
ZShzdWNjZXNzQ2FsbGJhY2ssIGVycm9yQ2FsbGJhY2spKTsKKyAgICByZXR1cm4gdHJ1ZTsKK30K
KworYm9vbCBET01GaWxlU3lzdGVtQmFzZTo6cmVtb3ZlUmVjdXJzaXZlbHkoY29uc3QgRW50cnlC
YXNlKiBlbnRyeSwgUGFzc1JlZlB0cjxWb2lkQ2FsbGJhY2s+IHN1Y2Nlc3NDYWxsYmFjaywgUGFz
c1JlZlB0cjxFcnJvckNhbGxiYWNrPiBlcnJvckNhbGxiYWNrKQoreworICAgIEFTU0VSVChlbnRy
eSAmJiBlbnRyeS0+aXNEaXJlY3RvcnkoKSk7CisgICAgLy8gV2UgZG9uJ3QgYWxsb3cgY2FsbGlu
ZyByZW1vdmUoKSBvbiB0aGUgcm9vdCBkaXJlY3RvcnkuCisgICAgaWYgKGVudHJ5LT5mdWxsUGF0
aCgpID09IFN0cmluZyhET01GaWxlUGF0aDo6cm9vdCkpCisgICAgICAgIHJldHVybiBmYWxzZTsK
KyAgICBtX2FzeW5jRmlsZVN5c3RlbS0+cmVtb3ZlUmVjdXJzaXZlbHkoZW50cnktPmZ1bGxQYXRo
KCksIFZvaWRDYWxsYmFja3M6OmNyZWF0ZShzdWNjZXNzQ2FsbGJhY2ssIGVycm9yQ2FsbGJhY2sp
KTsKKyAgICByZXR1cm4gdHJ1ZTsKK30KKworYm9vbCBET01GaWxlU3lzdGVtQmFzZTo6Z2V0UGFy
ZW50KGNvbnN0IEVudHJ5QmFzZSogZW50cnksIFBhc3NSZWZQdHI8RW50cnlDYWxsYmFjaz4gc3Vj
Y2Vzc0NhbGxiYWNrLCBQYXNzUmVmUHRyPEVycm9yQ2FsbGJhY2s+IGVycm9yQ2FsbGJhY2spCit7
CisgICAgQVNTRVJUKGVudHJ5KTsKKyAgICBTdHJpbmcgcGF0aCA9IERPTUZpbGVQYXRoOjpnZXRE
aXJlY3RvcnkoZW50cnktPmZ1bGxQYXRoKCkpOworCisgICAgbV9hc3luY0ZpbGVTeXN0ZW0tPmRp
cmVjdG9yeUV4aXN0cyhwYXRoLCBFbnRyeUNhbGxiYWNrczo6Y3JlYXRlKHN1Y2Nlc3NDYWxsYmFj
aywgZXJyb3JDYWxsYmFjaywgdGhpcywgcGF0aCwgdHJ1ZSkpOworICAgIHJldHVybiB0cnVlOwor
fQorCitib29sIERPTUZpbGVTeXN0ZW1CYXNlOjpnZXRGaWxlKGNvbnN0IEVudHJ5QmFzZSogZW50
cnksIGNvbnN0IFN0cmluZyYgcGF0aCwgUGFzc1JlZlB0cjxXZWJLaXRGbGFncz4gZmxhZ3MsIFBh
c3NSZWZQdHI8RW50cnlDYWxsYmFjaz4gc3VjY2Vzc0NhbGxiYWNrLCBQYXNzUmVmUHRyPEVycm9y
Q2FsbGJhY2s+IGVycm9yQ2FsbGJhY2spCit7CisgICAgU3RyaW5nIGFic29sdXRlUGF0aDsKKyAg
ICBpZiAoIXBhdGhUb0Fic29sdXRlUGF0aChtX2FzeW5jRmlsZVN5c3RlbS0+dHlwZSgpLCBlbnRy
eSwgcGF0aCwgYWJzb2x1dGVQYXRoKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgT3du
UHRyPEVudHJ5Q2FsbGJhY2tzPiBjYWxsYmFja3MgPSBFbnRyeUNhbGxiYWNrczo6Y3JlYXRlKHN1
Y2Nlc3NDYWxsYmFjaywgZXJyb3JDYWxsYmFjaywgdGhpcywgYWJzb2x1dGVQYXRoLCBmYWxzZSk7
CisgICAgaWYgKGZsYWdzICYmIGZsYWdzLT5pc0NyZWF0ZSgpKQorICAgICAgICBtX2FzeW5jRmls
ZVN5c3RlbS0+Y3JlYXRlRmlsZShhYnNvbHV0ZVBhdGgsIGZsYWdzLT5pc0V4Y2x1c2l2ZSgpLCBj
YWxsYmFja3MucmVsZWFzZSgpKTsKKyAgICBlbHNlCisgICAgICAgIG1fYXN5bmNGaWxlU3lzdGVt
LT5maWxlRXhpc3RzKGFic29sdXRlUGF0aCwgY2FsbGJhY2tzLnJlbGVhc2UoKSk7CisgICAgcmV0
dXJuIHRydWU7Cit9CisKK2Jvb2wgRE9NRmlsZVN5c3RlbUJhc2U6OmdldERpcmVjdG9yeShjb25z
dCBFbnRyeUJhc2UqIGVudHJ5LCBjb25zdCBTdHJpbmcmIHBhdGgsIFBhc3NSZWZQdHI8V2ViS2l0
RmxhZ3M+IGZsYWdzLCBQYXNzUmVmUHRyPEVudHJ5Q2FsbGJhY2s+IHN1Y2Nlc3NDYWxsYmFjaywg
UGFzc1JlZlB0cjxFcnJvckNhbGxiYWNrPiBlcnJvckNhbGxiYWNrKQoreworICAgIFN0cmluZyBh
YnNvbHV0ZVBhdGg7CisgICAgaWYgKCFwYXRoVG9BYnNvbHV0ZVBhdGgobV9hc3luY0ZpbGVTeXN0
ZW0tPnR5cGUoKSwgZW50cnksIHBhdGgsIGFic29sdXRlUGF0aCkpCisgICAgICAgIHJldHVybiBm
YWxzZTsKKworICAgIE93blB0cjxFbnRyeUNhbGxiYWNrcz4gY2FsbGJhY2tzID0gRW50cnlDYWxs
YmFja3M6OmNyZWF0ZShzdWNjZXNzQ2FsbGJhY2ssIGVycm9yQ2FsbGJhY2ssIHRoaXMsIGFic29s
dXRlUGF0aCwgdHJ1ZSk7CisgICAgaWYgKGZsYWdzICYmIGZsYWdzLT5pc0NyZWF0ZSgpKQorICAg
ICAgICBtX2FzeW5jRmlsZVN5c3RlbS0+Y3JlYXRlRGlyZWN0b3J5KGFic29sdXRlUGF0aCwgZmxh
Z3MtPmlzRXhjbHVzaXZlKCksIGNhbGxiYWNrcy5yZWxlYXNlKCkpOworICAgIGVsc2UKKyAgICAg
ICAgbV9hc3luY0ZpbGVTeXN0ZW0tPmRpcmVjdG9yeUV4aXN0cyhhYnNvbHV0ZVBhdGgsIGNhbGxi
YWNrcy5yZWxlYXNlKCkpOworICAgIHJldHVybiB0cnVlOworfQorCitib29sIERPTUZpbGVTeXN0
ZW1CYXNlOjpyZWFkRGlyZWN0b3J5KFBhc3NSZWZQdHI8RGlyZWN0b3J5UmVhZGVyQmFzZT4gcmVh
ZGVyLCBjb25zdCBTdHJpbmcmIHBhdGgsIFBhc3NSZWZQdHI8RW50cmllc0NhbGxiYWNrPiBzdWNj
ZXNzQ2FsbGJhY2ssIFBhc3NSZWZQdHI8RXJyb3JDYWxsYmFjaz4gZXJyb3JDYWxsYmFjaykKK3sK
KyAgICBBU1NFUlQoRE9NRmlsZVBhdGg6OmlzQWJzb2x1dGUocGF0aCkpOworICAgIG1fYXN5bmNG
aWxlU3lzdGVtLT5yZWFkRGlyZWN0b3J5KHBhdGgsIEVudHJpZXNDYWxsYmFja3M6OmNyZWF0ZShz
dWNjZXNzQ2FsbGJhY2ssIGVycm9yQ2FsbGJhY2ssIHJlYWRlciwgcGF0aCkpOworICAgIHJldHVy
biB0cnVlOworfQorCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKKyNlbmRpZiAvLyBFTkFCTEUo
RklMRV9TWVNURU0pCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2ZpbGVzeXN0ZW0vRE9N
RmlsZVN5c3RlbUJhc2UuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2Zp
bGVzeXN0ZW0vRE9NRmlsZVN5c3RlbUJhc2UuaAkocmV2aXNpb24gMTEwNzI2KQkoZnJvbSBTb3Vy
Y2UvV2ViQ29yZS9maWxlYXBpL0RPTUZpbGVTeXN0ZW1CYXNlLmg6MTEwNzI2KQorKysgU291cmNl
L1dlYkNvcmUvTW9kdWxlcy9maWxlc3lzdGVtL0RPTUZpbGVTeXN0ZW1CYXNlLmgJKHdvcmtpbmcg
Y29weSkKQEAgLTAsMCArMSw5NCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMCBHb29nbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2Ug
aW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0
aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25z
IGFyZQorICogbWV0OgorICoKKyAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29k
ZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAgICAgKiBSZWRp
c3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCisgKiBj
b3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyCisgKiBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJp
YWxzIHByb3ZpZGVkIHdpdGggdGhlCisgKiBkaXN0cmlidXRpb24uCisgKiAgICAgKiBOZWl0aGVy
IHRoZSBuYW1lIG9mIEdvb2dsZSBJbmMuIG5vciB0aGUgbmFtZXMgb2YgaXRzCisgKiBjb250cmli
dXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQg
ZnJvbQorICogdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVy
bWlzc2lvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklH
SFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCisgKiAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBP
UiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywg
VEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9S
CisgKiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hB
TEwgVEhFIENPUFlSSUdIVAorICogT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1Ig
QU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCisgKiBTUEVDSUFMLCBFWEVNUExBUlks
IE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVE
IFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9G
IFVTRSwKKyAqIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9X
RVZFUiBDQVVTRUQgQU5EIE9OIEFOWQorICogVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJ
TiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdM
SUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisg
KiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9G
IFNVQ0ggREFNQUdFLgorICovCisKKyNpZm5kZWYgRE9NRmlsZVN5c3RlbUJhc2VfaAorI2RlZmlu
ZSBET01GaWxlU3lzdGVtQmFzZV9oCisKKyNpZiBFTkFCTEUoRklMRV9TWVNURU0pCisKKyNpbmNs
dWRlICJBc3luY0ZpbGVTeXN0ZW0uaCIKKyNpbmNsdWRlICJXZWJLaXRGbGFncy5oIgorI2luY2x1
ZGUgIlBsYXRmb3JtU3RyaW5nLmgiCisjaW5jbHVkZSA8d3RmL1Bhc3NSZWZQdHIuaD4KKyNpbmNs
dWRlIDx3dGYvUmVmQ291bnRlZC5oPgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK2NsYXNzIERp
cmVjdG9yeUVudHJ5OworY2xhc3MgRGlyZWN0b3J5UmVhZGVyQmFzZTsKK2NsYXNzIEVudHJpZXND
YWxsYmFjazsKK2NsYXNzIEVudHJ5QmFzZTsKK2NsYXNzIEVudHJ5Q2FsbGJhY2s7CitjbGFzcyBF
cnJvckNhbGxiYWNrOworY2xhc3MgS1VSTDsKK2NsYXNzIE1ldGFkYXRhQ2FsbGJhY2s7CitjbGFz
cyBTY3JpcHRFeGVjdXRpb25Db250ZXh0OworY2xhc3MgU2VjdXJpdHlPcmlnaW47CitjbGFzcyBW
b2lkQ2FsbGJhY2s7CisKKy8vIEEgY29tbW9uIGJhc2UgY2xhc3MgZm9yIERPTUZpbGVTeXN0ZW0g
YW5kIERPTUZpbGVTeXN0ZW1TeW5jLgorY2xhc3MgRE9NRmlsZVN5c3RlbUJhc2UgOiBwdWJsaWMg
UmVmQ291bnRlZDxET01GaWxlU3lzdGVtQmFzZT4geworcHVibGljOgorICAgIHN0YXRpYyBQYXNz
UmVmUHRyPERPTUZpbGVTeXN0ZW1CYXNlPiBjcmVhdGUoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCog
Y29udGV4dCwgY29uc3QgU3RyaW5nJiBuYW1lLCBQYXNzT3duUHRyPEFzeW5jRmlsZVN5c3RlbT4g
YXN5bmNGaWxlU3lzdGVtKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBET01G
aWxlU3lzdGVtQmFzZShjb250ZXh0LCBuYW1lLCBhc3luY0ZpbGVTeXN0ZW0pKTsKKyAgICB9Cisg
ICAgdmlydHVhbCB+RE9NRmlsZVN5c3RlbUJhc2UoKTsKKworICAgIGNvbnN0IFN0cmluZyYgbmFt
ZSgpIGNvbnN0IHsgcmV0dXJuIG1fbmFtZTsgfQorICAgIEFzeW5jRmlsZVN5c3RlbSogYXN5bmNG
aWxlU3lzdGVtKCkgY29uc3QgeyByZXR1cm4gbV9hc3luY0ZpbGVTeXN0ZW0uZ2V0KCk7IH0KKyAg
ICBTZWN1cml0eU9yaWdpbiogc2VjdXJpdHlPcmlnaW4oKSBjb25zdDsKKworICAgIC8vIEFjdHVh
bCBGaWxlU3lzdGVtIEFQSSBpbXBsZW1lbnRhdGlvbnMuICBBbGwgdGhlIHZhbGlkaXR5IGNoZWNr
cyBvbiB2aXJ0dWFsIHBhdGhzIGFyZSBkb25lIGF0IHRoaXMgbGV2ZWwuCisgICAgLy8gVGhleSBy
ZXR1cm4gZmFsc2UgZm9yIGltbWVkaWF0ZSBlcnJvcnMgdGhhdCBkb24ndCBpbnZvbHZlIGxvd2Vy
IEFzeW5jRmlsZVN5c3RlbSBsYXllciAoZS5nLiBmb3IgbmFtZSB2YWxpZGF0aW9uIGVycm9ycyku
ICBPdGhlcndpc2UgdGhleSByZXR1cm4gdHJ1ZSAoYnV0IGxhdGVyIG1heSBjYWxsIGJhY2sgd2l0
aCBhbiBydW50aW1lIGVycm9yKS4KKyAgICBib29sIGdldE1ldGFkYXRhKGNvbnN0IEVudHJ5QmFz
ZSosIFBhc3NSZWZQdHI8TWV0YWRhdGFDYWxsYmFjaz4sIFBhc3NSZWZQdHI8RXJyb3JDYWxsYmFj
az4pOworICAgIGJvb2wgbW92ZShjb25zdCBFbnRyeUJhc2UqIHNvdXJjZSwgRW50cnlCYXNlKiBw
YXJlbnQsIGNvbnN0IFN0cmluZyYgbmFtZSwgUGFzc1JlZlB0cjxFbnRyeUNhbGxiYWNrPiwgUGFz
c1JlZlB0cjxFcnJvckNhbGxiYWNrPik7CisgICAgYm9vbCBjb3B5KGNvbnN0IEVudHJ5QmFzZSog
c291cmNlLCBFbnRyeUJhc2UqIHBhcmVudCwgY29uc3QgU3RyaW5nJiBuYW1lLCBQYXNzUmVmUHRy
PEVudHJ5Q2FsbGJhY2s+LCBQYXNzUmVmUHRyPEVycm9yQ2FsbGJhY2s+KTsKKyAgICBib29sIHJl
bW92ZShjb25zdCBFbnRyeUJhc2UqLCBQYXNzUmVmUHRyPFZvaWRDYWxsYmFjaz4sIFBhc3NSZWZQ
dHI8RXJyb3JDYWxsYmFjaz4pOworICAgIGJvb2wgcmVtb3ZlUmVjdXJzaXZlbHkoY29uc3QgRW50
cnlCYXNlKiwgUGFzc1JlZlB0cjxWb2lkQ2FsbGJhY2s+LCBQYXNzUmVmUHRyPEVycm9yQ2FsbGJh
Y2s+KTsKKyAgICBib29sIGdldFBhcmVudChjb25zdCBFbnRyeUJhc2UqLCBQYXNzUmVmUHRyPEVu
dHJ5Q2FsbGJhY2s+LCBQYXNzUmVmUHRyPEVycm9yQ2FsbGJhY2s+KTsKKyAgICBib29sIGdldEZp
bGUoY29uc3QgRW50cnlCYXNlKiwgY29uc3QgU3RyaW5nJiBwYXRoLCBQYXNzUmVmUHRyPFdlYktp
dEZsYWdzPiwgUGFzc1JlZlB0cjxFbnRyeUNhbGxiYWNrPiwgUGFzc1JlZlB0cjxFcnJvckNhbGxi
YWNrPik7CisgICAgYm9vbCBnZXREaXJlY3RvcnkoY29uc3QgRW50cnlCYXNlKiwgY29uc3QgU3Ry
aW5nJiBwYXRoLCBQYXNzUmVmUHRyPFdlYktpdEZsYWdzPiwgUGFzc1JlZlB0cjxFbnRyeUNhbGxi
YWNrPiwgUGFzc1JlZlB0cjxFcnJvckNhbGxiYWNrPik7CisgICAgYm9vbCByZWFkRGlyZWN0b3J5
KFBhc3NSZWZQdHI8RGlyZWN0b3J5UmVhZGVyQmFzZT4sIGNvbnN0IFN0cmluZyYgcGF0aCwgUGFz
c1JlZlB0cjxFbnRyaWVzQ2FsbGJhY2s+LCBQYXNzUmVmUHRyPEVycm9yQ2FsbGJhY2s+KTsKKwor
cHJvdGVjdGVkOgorICAgIERPTUZpbGVTeXN0ZW1CYXNlKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQq
LCBjb25zdCBTdHJpbmcmIG5hbWUsIFBhc3NPd25QdHI8QXN5bmNGaWxlU3lzdGVtPik7CisgICAg
ZnJpZW5kIGNsYXNzIERPTUZpbGVTeXN0ZW1TeW5jOworCisgICAgU2NyaXB0RXhlY3V0aW9uQ29u
dGV4dCogbV9jb250ZXh0OworICAgIFN0cmluZyBtX25hbWU7CisgICAgbXV0YWJsZSBPd25QdHI8
QXN5bmNGaWxlU3lzdGVtPiBtX2FzeW5jRmlsZVN5c3RlbTsKK307CisKK30gLy8gbmFtZXNwYWNl
IFdlYkNvcmUKKworI2VuZGlmIC8vIEVOQUJMRShGSUxFX1NZU1RFTSkKKworI2VuZGlmIC8vIERP
TUZpbGVTeXN0ZW1CYXNlX2gKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvZmlsZXN5c3Rl
bS9ET01GaWxlU3lzdGVtU3luYy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvTW9k
dWxlcy9maWxlc3lzdGVtL0RPTUZpbGVTeXN0ZW1TeW5jLmNwcAkocmV2aXNpb24gMTEwNzI2KQko
ZnJvbSBTb3VyY2UvV2ViQ29yZS9maWxlYXBpL0RPTUZpbGVTeXN0ZW1TeW5jLmNwcDoxMTA3MjYp
CisrKyBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2ZpbGVzeXN0ZW0vRE9NRmlsZVN5c3RlbVN5bmMu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMjQzIEBACisvKgorICogQ29weXJpZ2h0IChD
KSAyMDEwIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmli
dXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0
CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93
aW5nIGNvbmRpdGlvbnMgYXJlCisgKiBtZXQ6CisgKgorICogICAgICogUmVkaXN0cmlidXRpb25z
IG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4K
KyAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0
aGUgYWJvdmUKKyAqIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIKKyAqIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9v
ciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKKyAqIGRpc3RyaWJ1dGlvbi4KKyAq
ICAgICAqIE5laXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xlIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBp
dHMKKyAqIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJv
ZHVjdHMgZGVyaXZlZCBmcm9tCisgKiB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJp
b3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQg
QlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKKyAqICJBUyBJUyIgQU5E
IEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCisg
KiBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBB
TkQgRklUTkVTUyBGT1IKKyAqIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJ
TiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCisgKiBPV05FUiBPUiBDT05UUklCVVRPUlMg
QkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKKyAqIFNQRUNJ
QUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBO
T1QKKyAqIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VS
VklDRVM7IExPU1MgT0YgVVNFLAorICogREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5U
RVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCisgKiBUSEVPUlkgT0YgTElBQklM
SVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAo
SU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VU
IE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUg
UE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgor
I2luY2x1ZGUgIkRPTUZpbGVTeXN0ZW1TeW5jLmgiCisKKyNpZiBFTkFCTEUoRklMRV9TWVNURU0p
CisKKyNpbmNsdWRlICJBc3luY0ZpbGVTeXN0ZW0uaCIKKyNpbmNsdWRlICJBc3luY0ZpbGVXcml0
ZXIuaCIKKyNpbmNsdWRlICJET01GaWxlUGF0aC5oIgorI2luY2x1ZGUgIkRpcmVjdG9yeUVudHJ5
U3luYy5oIgorI2luY2x1ZGUgIkVycm9yQ2FsbGJhY2suaCIKKyNpbmNsdWRlICJGaWxlLmgiCisj
aW5jbHVkZSAiRmlsZUVudHJ5U3luYy5oIgorI2luY2x1ZGUgIkZpbGVFcnJvci5oIgorI2luY2x1
ZGUgIkZpbGVFeGNlcHRpb24uaCIKKyNpbmNsdWRlICJGaWxlTWV0YWRhdGEuaCIKKyNpbmNsdWRl
ICJGaWxlU3lzdGVtQ2FsbGJhY2tzLmgiCisjaW5jbHVkZSAiRmlsZVdyaXRlckJhc2VDYWxsYmFj
ay5oIgorI2luY2x1ZGUgIkZpbGVXcml0ZXJTeW5jLmgiCisKK25hbWVzcGFjZSBXZWJDb3JlIHsK
KworY2xhc3MgRmlsZVdyaXRlckJhc2U7CisKK1Bhc3NSZWZQdHI8RE9NRmlsZVN5c3RlbVN5bmM+
IERPTUZpbGVTeXN0ZW1TeW5jOjpjcmVhdGUoRE9NRmlsZVN5c3RlbUJhc2UqIGZpbGVTeXN0ZW0p
Cit7CisgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBET01GaWxlU3lzdGVtU3luYyhmaWxlU3lzdGVt
LT5tX2NvbnRleHQsIGZpbGVTeXN0ZW0tPm1fbmFtZSwgZmlsZVN5c3RlbS0+bV9hc3luY0ZpbGVT
eXN0ZW0ucmVsZWFzZSgpKSk7Cit9CisKK0RPTUZpbGVTeXN0ZW1TeW5jOjpET01GaWxlU3lzdGVt
U3luYyhTY3JpcHRFeGVjdXRpb25Db250ZXh0KiBjb250ZXh0LCBjb25zdCBTdHJpbmcmIG5hbWUs
IFBhc3NPd25QdHI8QXN5bmNGaWxlU3lzdGVtPiBhc3luY0ZpbGVTeXN0ZW0pCisgICAgOiBET01G
aWxlU3lzdGVtQmFzZShjb250ZXh0LCBuYW1lLCBhc3luY0ZpbGVTeXN0ZW0pCit7Cit9CisKK0RP
TUZpbGVTeXN0ZW1TeW5jOjp+RE9NRmlsZVN5c3RlbVN5bmMoKQoreworfQorCitQYXNzUmVmUHRy
PERpcmVjdG9yeUVudHJ5U3luYz4gRE9NRmlsZVN5c3RlbVN5bmM6OnJvb3QoKQoreworICAgIHJl
dHVybiBEaXJlY3RvcnlFbnRyeVN5bmM6OmNyZWF0ZSh0aGlzLCBET01GaWxlUGF0aDo6cm9vdCk7
Cit9CisKK25hbWVzcGFjZSB7CisKK2NsYXNzIENyZWF0ZUZpbGVIZWxwZXIgOiBwdWJsaWMgQXN5
bmNGaWxlU3lzdGVtQ2FsbGJhY2tzIHsKK3B1YmxpYzoKKyAgICBjbGFzcyBDcmVhdGVGaWxlUmVz
dWx0IDogcHVibGljIFJlZkNvdW50ZWQ8Q3JlYXRlRmlsZVJlc3VsdD4geworICAgICAgcHVibGlj
OgorICAgICAgICBzdGF0aWMgUGFzc1JlZlB0cjxDcmVhdGVGaWxlUmVzdWx0PiBjcmVhdGUoKQor
ICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4gYWRvcHRSZWYobmV3IENyZWF0ZUZpbGVSZXN1
bHQoKSk7CisgICAgICAgIH0KKworICAgICAgICBib29sIG1fZmFpbGVkOworICAgICAgICBpbnQg
bV9jb2RlOworICAgICAgICBSZWZQdHI8RmlsZT4gbV9maWxlOworCisgICAgICBwcml2YXRlOgor
ICAgICAgICBDcmVhdGVGaWxlUmVzdWx0KCkKKyAgICAgICAgICAgIDogbV9mYWlsZWQoZmFsc2Up
CisgICAgICAgICAgICAsIG1fY29kZSgwKQorICAgICAgICB7CisgICAgICAgIH0KKworICAgICAg
ICB+Q3JlYXRlRmlsZVJlc3VsdCgpCisgICAgICAgIHsKKyAgICAgICAgfQorICAgICAgICBmcmll
bmQgY2xhc3MgV1RGOjpSZWZDb3VudGVkPENyZWF0ZUZpbGVSZXN1bHQ+OworICAgIH07CisKKyAg
ICBzdGF0aWMgUGFzc093blB0cjxDcmVhdGVGaWxlSGVscGVyPiBjcmVhdGUoUGFzc1JlZlB0cjxD
cmVhdGVGaWxlUmVzdWx0PiByZXN1bHQsIGNvbnN0IFN0cmluZyYgbmFtZSkKKyAgICB7CisgICAg
ICAgIHJldHVybiBhZG9wdFB0cihuZXcgQ3JlYXRlRmlsZUhlbHBlcihyZXN1bHQsIG5hbWUpKTsK
KyAgICB9CisKKyAgICB2aXJ0dWFsIHZvaWQgZGlkRmFpbChpbnQgY29kZSkKKyAgICB7CisgICAg
ICAgIG1fcmVzdWx0LT5tX2ZhaWxlZCA9IHRydWU7CisgICAgICAgIG1fcmVzdWx0LT5tX2NvZGUg
PSBjb2RlOworICAgIH0KKworICAgIHZpcnR1YWwgfkNyZWF0ZUZpbGVIZWxwZXIoKQorICAgIHsK
KyAgICB9CisKKyAgICB2b2lkIGRpZFJlYWRNZXRhZGF0YShjb25zdCBGaWxlTWV0YWRhdGEmIG1l
dGFkYXRhKQorICAgIHsKKyAgICAgICAgbV9yZXN1bHQtPm1fZmlsZSA9IEZpbGU6OmNyZWF0ZVdp
dGhOYW1lKG1ldGFkYXRhLnBsYXRmb3JtUGF0aCwgbV9uYW1lKTsKKyAgICB9Citwcml2YXRlOgor
ICAgIENyZWF0ZUZpbGVIZWxwZXIoUGFzc1JlZlB0cjxDcmVhdGVGaWxlUmVzdWx0PiByZXN1bHQs
IGNvbnN0IFN0cmluZyYgbmFtZSkKKyAgICAgICAgOiBtX3Jlc3VsdChyZXN1bHQpCisgICAgICAg
ICwgbV9uYW1lKG5hbWUpCisgICAgeworICAgIH0KKworICAgIFJlZlB0cjxDcmVhdGVGaWxlUmVz
dWx0PiBtX3Jlc3VsdDsKKyAgICBTdHJpbmcgbV9uYW1lOworfTsKKworfSAvLyBuYW1lc3BhY2UK
KworUGFzc1JlZlB0cjxGaWxlPiBET01GaWxlU3lzdGVtU3luYzo6Y3JlYXRlRmlsZShjb25zdCBG
aWxlRW50cnlTeW5jKiBmaWxlRW50cnksIEV4Y2VwdGlvbkNvZGUmIGVjKQoreworICAgIGVjID0g
MDsKKyAgICBSZWZQdHI8Q3JlYXRlRmlsZUhlbHBlcjo6Q3JlYXRlRmlsZVJlc3VsdD4gcmVzdWx0
KENyZWF0ZUZpbGVIZWxwZXI6OkNyZWF0ZUZpbGVSZXN1bHQ6OmNyZWF0ZSgpKTsKKyAgICBtX2Fz
eW5jRmlsZVN5c3RlbS0+Y3JlYXRlU25hcHNob3RGaWxlQW5kUmVhZE1ldGFkYXRhKGZpbGVFbnRy
eS0+ZnVsbFBhdGgoKSwgQ3JlYXRlRmlsZUhlbHBlcjo6Y3JlYXRlKHJlc3VsdCwgZmlsZUVudHJ5
LT5uYW1lKCkpKTsKKyAgICBpZiAoIW1fYXN5bmNGaWxlU3lzdGVtLT53YWl0Rm9yT3BlcmF0aW9u
VG9Db21wbGV0ZSgpKSB7CisgICAgICAgIGVjID0gRmlsZUV4Y2VwdGlvbjo6QUJPUlRfRVJSOwor
ICAgICAgICByZXR1cm4gMDsKKyAgICB9CisgICAgaWYgKHJlc3VsdC0+bV9mYWlsZWQpIHsKKyAg
ICAgICAgZWMgPSByZXN1bHQtPm1fY29kZTsKKyAgICAgICAgcmV0dXJuIDA7CisgICAgfQorICAg
IHJldHVybiByZXN1bHQtPm1fZmlsZTsKK30KKworbmFtZXNwYWNlIHsKKworY2xhc3MgUmVjZWl2
ZUZpbGVXcml0ZXJDYWxsYmFjayA6IHB1YmxpYyBGaWxlV3JpdGVyQmFzZUNhbGxiYWNrIHsKK3B1
YmxpYzoKKyAgICBzdGF0aWMgUGFzc1JlZlB0cjxSZWNlaXZlRmlsZVdyaXRlckNhbGxiYWNrPiBj
cmVhdGUoKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBSZWNlaXZlRmlsZVdy
aXRlckNhbGxiYWNrKCkpOworICAgIH0KKworICAgIGJvb2wgaGFuZGxlRXZlbnQoRmlsZVdyaXRl
ckJhc2UqIGZpbGVXcml0ZXJCYXNlKQorICAgIHsKKyNpZm5kZWYgTkRFQlVHCisgICAgICAgIG1f
ZmlsZVdyaXRlckJhc2UgPSBmaWxlV3JpdGVyQmFzZTsKKyNlbHNlCisgICAgICAgIEFTU0VSVF9V
TlVTRUQoZmlsZVdyaXRlckJhc2UsIGZpbGVXcml0ZXJCYXNlKTsKKyNlbmRpZgorICAgICAgICBy
ZXR1cm4gdHJ1ZTsKKyAgICB9CisKKyNpZm5kZWYgTkRFQlVHCisgICAgRmlsZVdyaXRlckJhc2Uq
IGZpbGVXcml0ZXJCYXNlKCkKKyAgICB7CisgICAgICAgIHJldHVybiBtX2ZpbGVXcml0ZXJCYXNl
OworICAgIH0KKyNlbmRpZgorCitwcml2YXRlOgorICAgIFJlY2VpdmVGaWxlV3JpdGVyQ2FsbGJh
Y2soKQorI2lmbmRlZiBOREVCVUcKKyAgICAgICAgOiBtX2ZpbGVXcml0ZXJCYXNlKDApCisjZW5k
aWYKKyAgICB7CisgICAgfQorCisjaWZuZGVmIE5ERUJVRworICAgIEZpbGVXcml0ZXJCYXNlKiBt
X2ZpbGVXcml0ZXJCYXNlOworI2VuZGlmCit9OworCitjbGFzcyBMb2NhbEVycm9yQ2FsbGJhY2sg
OiBwdWJsaWMgRXJyb3JDYWxsYmFjayB7CitwdWJsaWM6CisgICAgc3RhdGljIFBhc3NSZWZQdHI8
TG9jYWxFcnJvckNhbGxiYWNrPiBjcmVhdGUoKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGFkb3B0
UmVmKG5ldyBMb2NhbEVycm9yQ2FsbGJhY2soKSk7CisgICAgfQorCisgICAgYm9vbCBoYW5kbGVF
dmVudChGaWxlRXJyb3IqIGVycm9yKQorICAgIHsKKyAgICAgICAgbV9lcnJvciA9IGVycm9yOwor
ICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CisKKyAgICBGaWxlRXJyb3IqIGVycm9yKCkKKyAg
ICB7CisgICAgICAgIHJldHVybiBtX2Vycm9yLmdldCgpOworICAgIH0KKworcHJpdmF0ZToKKyAg
ICBMb2NhbEVycm9yQ2FsbGJhY2soKQorICAgIHsKKyAgICB9CisgICAgUmVmUHRyPEZpbGVFcnJv
cj4gbV9lcnJvcjsKK307CisKK30KKworUGFzc1JlZlB0cjxGaWxlV3JpdGVyU3luYz4gRE9NRmls
ZVN5c3RlbVN5bmM6OmNyZWF0ZVdyaXRlcihjb25zdCBGaWxlRW50cnlTeW5jKiBmaWxlRW50cnks
IEV4Y2VwdGlvbkNvZGUmIGVjKQoreworICAgIEFTU0VSVChmaWxlRW50cnkpOworICAgIGVjID0g
MDsKKworCisgICAgUmVmUHRyPEZpbGVXcml0ZXJTeW5jPiBmaWxlV3JpdGVyID0gRmlsZVdyaXRl
clN5bmM6OmNyZWF0ZSgpOworICAgIFJlZlB0cjxSZWNlaXZlRmlsZVdyaXRlckNhbGxiYWNrPiBz
dWNjZXNzQ2FsbGJhY2sgPSBSZWNlaXZlRmlsZVdyaXRlckNhbGxiYWNrOjpjcmVhdGUoKTsKKyAg
ICBSZWZQdHI8TG9jYWxFcnJvckNhbGxiYWNrPiBlcnJvckNhbGxiYWNrID0gTG9jYWxFcnJvckNh
bGxiYWNrOjpjcmVhdGUoKTsKKworICAgIE93blB0cjxGaWxlV3JpdGVyQmFzZUNhbGxiYWNrcz4g
Y2FsbGJhY2tzID0gRmlsZVdyaXRlckJhc2VDYWxsYmFja3M6OmNyZWF0ZShmaWxlV3JpdGVyLCBz
dWNjZXNzQ2FsbGJhY2ssIGVycm9yQ2FsbGJhY2spOworICAgIG1fYXN5bmNGaWxlU3lzdGVtLT5j
cmVhdGVXcml0ZXIoZmlsZVdyaXRlci5nZXQoKSwgZmlsZUVudHJ5LT5mdWxsUGF0aCgpLCBjYWxs
YmFja3MucmVsZWFzZSgpKTsKKyAgICBpZiAoIW1fYXN5bmNGaWxlU3lzdGVtLT53YWl0Rm9yT3Bl
cmF0aW9uVG9Db21wbGV0ZSgpKSB7CisgICAgICAgIGVjID0gRmlsZUV4Y2VwdGlvbjo6QUJPUlRf
RVJSOworICAgICAgICByZXR1cm4gMDsKKyAgICB9CisgICAgaWYgKGVycm9yQ2FsbGJhY2stPmVy
cm9yKCkpIHsKKyAgICAgICAgQVNTRVJUKCFzdWNjZXNzQ2FsbGJhY2stPmZpbGVXcml0ZXJCYXNl
KCkpOworICAgICAgICBlYyA9IEZpbGVFeGNlcHRpb246OkVycm9yQ29kZVRvRXhjZXB0aW9uQ29k
ZShlcnJvckNhbGxiYWNrLT5lcnJvcigpLT5jb2RlKCkpOworICAgICAgICByZXR1cm4gMDsKKyAg
ICB9CisgICAgQVNTRVJUKHN1Y2Nlc3NDYWxsYmFjay0+ZmlsZVdyaXRlckJhc2UoKSk7CisgICAg
QVNTRVJUKHN0YXRpY19jYXN0PEZpbGVXcml0ZXJTeW5jKj4oc3VjY2Vzc0NhbGxiYWNrLT5maWxl
V3JpdGVyQmFzZSgpKSA9PSBmaWxlV3JpdGVyLmdldCgpKTsKKyAgICByZXR1cm4gZmlsZVdyaXRl
cjsKK30KKworfQorCisjZW5kaWYgLy8gRU5BQkxFKEZJTEVfU1lTVEVNKQpJbmRleDogU291cmNl
L1dlYkNvcmUvTW9kdWxlcy9maWxlc3lzdGVtL0RPTUZpbGVTeXN0ZW1TeW5jLmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL1dlYkNvcmUvTW9kdWxlcy9maWxlc3lzdGVtL0RPTUZpbGVTeXN0ZW1TeW5j
LmgJKHJldmlzaW9uIDExMDcyNikJKGZyb20gU291cmNlL1dlYkNvcmUvZmlsZWFwaS9ET01GaWxl
U3lzdGVtU3luYy5oOjExMDcyNikKKysrIFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvZmlsZXN5c3Rl
bS9ET01GaWxlU3lzdGVtU3luYy5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNzEgQEAKKy8q
CisgKiBDb3B5cmlnaHQgKEMpIDIwMTAgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
KyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1z
LCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRl
ZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUKKyAqIG1ldDoKKyAqCisgKiAgICAg
KiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNv
cHlyaWdodAorICogbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyLgorICogICAgICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3Jt
IG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQorICogY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lcgorICogaW4gdGhlIGRv
Y3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQorICog
ZGlzdHJpYnV0aW9uLgorICogICAgICogTmVpdGhlciB0aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBu
b3IgdGhlIG5hbWVzIG9mIGl0cworICogY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9y
c2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20KKyAqIHRoaXMgc29mdHdhcmUgd2l0
aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogVEhJUyBTT0ZU
V0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9S
UworICogIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNM
VURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0Yg
TUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgorICogQSBQQVJUSUNVTEFSIFBVUlBPU0Ug
QVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKKyAqIE9XTkVS
IE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJ
REVOVEFMLAorICogU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMg
KElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJ
VFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCisgKiBEQVRBLCBPUiBQUk9GSVRT
OyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKKyAq
IFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJ
VFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJ
TkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJ
RiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaWZu
ZGVmIERPTUZpbGVTeXN0ZW1TeW5jX2gKKyNkZWZpbmUgRE9NRmlsZVN5c3RlbVN5bmNfaAorCisj
aWYgRU5BQkxFKEZJTEVfU1lTVEVNKQorCisjaW5jbHVkZSAiRE9NRmlsZVN5c3RlbUJhc2UuaCIK
KworbmFtZXNwYWNlIFdlYkNvcmUgeworCitjbGFzcyBEaXJlY3RvcnlFbnRyeVN5bmM7CitjbGFz
cyBGaWxlOworY2xhc3MgRmlsZUVudHJ5U3luYzsKK2NsYXNzIEZpbGVXcml0ZXJTeW5jOworCit0
eXBlZGVmIGludCBFeGNlcHRpb25Db2RlOworCitjbGFzcyBET01GaWxlU3lzdGVtU3luYyA6IHB1
YmxpYyBET01GaWxlU3lzdGVtQmFzZSB7CitwdWJsaWM6CisgICAgc3RhdGljIFBhc3NSZWZQdHI8
RE9NRmlsZVN5c3RlbVN5bmM+IGNyZWF0ZShTY3JpcHRFeGVjdXRpb25Db250ZXh0KiBjb250ZXh0
LCBjb25zdCBTdHJpbmcmIG5hbWUsIFBhc3NPd25QdHI8QXN5bmNGaWxlU3lzdGVtPiBhc3luY0Zp
bGVTeXN0ZW0pCisgICAgeworICAgICAgICByZXR1cm4gYWRvcHRSZWYobmV3IERPTUZpbGVTeXN0
ZW1TeW5jKGNvbnRleHQsIG5hbWUsIGFzeW5jRmlsZVN5c3RlbSkpOworICAgIH0KKworICAgIHN0
YXRpYyBQYXNzUmVmUHRyPERPTUZpbGVTeXN0ZW1TeW5jPiBjcmVhdGUoRE9NRmlsZVN5c3RlbUJh
c2UqKTsKKworICAgIHZpcnR1YWwgfkRPTUZpbGVTeXN0ZW1TeW5jKCk7CisKKyAgICBQYXNzUmVm
UHRyPERpcmVjdG9yeUVudHJ5U3luYz4gcm9vdCgpOworCisgICAgUGFzc1JlZlB0cjxGaWxlPiBj
cmVhdGVGaWxlKGNvbnN0IEZpbGVFbnRyeVN5bmMqLCBFeGNlcHRpb25Db2RlJik7CisgICAgUGFz
c1JlZlB0cjxGaWxlV3JpdGVyU3luYz4gY3JlYXRlV3JpdGVyKGNvbnN0IEZpbGVFbnRyeVN5bmMq
LCBFeGNlcHRpb25Db2RlJik7CisKK3ByaXZhdGU6CisgICAgRE9NRmlsZVN5c3RlbVN5bmMoU2Ny
aXB0RXhlY3V0aW9uQ29udGV4dCosIGNvbnN0IFN0cmluZyYgbmFtZSwgUGFzc093blB0cjxBc3lu
Y0ZpbGVTeXN0ZW0+KTsKK307CisKK30KKworI2VuZGlmIC8vIEVOQUJMRShGSUxFX1NZU1RFTSkK
KworI2VuZGlmIC8vIERPTUZpbGVTeXN0ZW1TeW5jX2gKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL01v
ZHVsZXMvZmlsZXN5c3RlbS9ET01GaWxlU3lzdGVtU3luYy5pZGwKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1dlYkNvcmUvTW9kdWxlcy9maWxlc3lzdGVtL0RPTUZpbGVTeXN0ZW1TeW5jLmlkbAkocmV2
aXNpb24gMTEwNzI2KQkoZnJvbSBTb3VyY2UvV2ViQ29yZS9maWxlYXBpL0RPTUZpbGVTeXN0ZW1T
eW5jLmlkbDoxMTA3MjYpCisrKyBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2ZpbGVzeXN0ZW0vRE9N
RmlsZVN5c3RlbVN5bmMuaWRsCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMzkgQEAKKy8qCisg
KiBDb3B5cmlnaHQgKEMpIDIwMTAgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAq
CisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3
aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0
aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUKKyAqIG1ldDoKKyAqCisgKiAgICAgKiBS
ZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHly
aWdodAorICogbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyLgorICogICAgICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11
c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQorICogY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lcgorICogaW4gdGhlIGRvY3Vt
ZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQorICogZGlz
dHJpYnV0aW9uLgorICogICAgICogTmVpdGhlciB0aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBub3Ig
dGhlIG5hbWVzIG9mIGl0cworICogY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ug
b3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20KKyAqIHRoaXMgc29mdHdhcmUgd2l0aG91
dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogVEhJUyBTT0ZUV0FS
RSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUwor
ICogIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJ
TkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVS
Q0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgorICogQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJF
IERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKKyAqIE9XTkVSIE9S
IENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVO
VEFMLAorICogU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElO
Q0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVU
RSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCisgKiBEQVRBLCBPUiBQUk9GSVRTOyBP
UiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKKyAqIFRI
RU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFks
IE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcg
SU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBB
RFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCittb2R1bGUg
c3RvcmFnZSB7CisgICAgaW50ZXJmYWNlIFsKKyAgICAgICAgQ29uZGl0aW9uYWw9RklMRV9TWVNU
RU0sCisgICAgICAgIEpTTm9TdGF0aWNUYWJsZXMKKyAgICBdIERPTUZpbGVTeXN0ZW1TeW5jIHsK
KyAgICAgICAgcmVhZG9ubHkgYXR0cmlidXRlIERPTVN0cmluZyBuYW1lOworICAgICAgICByZWFk
b25seSBhdHRyaWJ1dGUgRGlyZWN0b3J5RW50cnlTeW5jIHJvb3Q7CisgICAgfTsKK30KSW5kZXg6
IFNvdXJjZS9XZWJDb3JlL1dlYkNvcmUudmNwcm9qL1dlYkNvcmUudmNwcm9qCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9XZWJDb3JlL1dlYkNvcmUudmNwcm9qL1dlYkNvcmUudmNwcm9qCShyZXZpc2lv
biAxMTA3MjYpCisrKyBTb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnZjcHJvai9XZWJDb3JlLnZjcHJv
agkod29ya2luZyBjb3B5KQpAQCAtMjQwNTYsNiArMjQwNTYsMzggQEAKICAgICAgICAgICAgICAg
ICAgICAgICAgIDxGaWx0ZXIKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTmFtZT0i
ZmlsZXN5c3RlbSIKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPgorCQkJICAgICAg
ICA8RmlsZQorCQkJCSAgICAgICAgUmVsYXRpdmVQYXRoPSIuLlxNb2R1bGVzXGZpbGVzeXN0ZW1c
RE9NRmlsZVBhdGguY3BwIgorCQkJCSAgICAgICAgPgorCQkJICAgICAgICA8L0ZpbGU+CisJCQkg
ICAgICAgIDxGaWxlCisJCQkJICAgICAgICBSZWxhdGl2ZVBhdGg9Ii4uXE1vZHVsZXNcZmlsZXN5
c3RlbVxET01GaWxlUGF0aC5oIgorCQkJCSAgICAgICAgPgorCQkJICAgICAgICA8L0ZpbGU+CisJ
CQkgICAgICAgIDxGaWxlCisJCQkJICAgICAgICBSZWxhdGl2ZVBhdGg9Ii4uXE1vZHVsZXNcZmls
ZXN5c3RlbVxET01GaWxlU3lzdGVtLmNwcCIKKwkJCQkgICAgICAgID4KKwkJCSAgICAgICAgPC9G
aWxlPgorCQkJICAgICAgICA8RmlsZSAgICAgICAgCisJCQkJICAgICAgICBSZWxhdGl2ZVBhdGg9
Ii4uXE1vZHVsZXNcZmlsZXN5c3RlbVxET01GaWxlU3lzdGVtLmgiCisJCQkJPgorCQkJICAgICAg
ICA8L0ZpbGU+CisJCQkgICAgICAgIDxGaWxlCisJCQkJICAgICAgICBSZWxhdGl2ZVBhdGg9Ii4u
XE1vZHVsZXNcZmlsZXN5c3RlbVxET01GaWxlU3lzdGVtQmFzZS5jcHAiCisJCQkJICAgICAgICA+
CisJCQkgICAgICAgIDwvRmlsZT4KKwkJCSAgICAgICAgPEZpbGUKKwkJCQkgICAgICAgIFJlbGF0
aXZlUGF0aD0iLi5cTW9kdWxlc1xmaWxlc3lzdGVtXERPTUZpbGVTeXN0ZW1CYXNlLmgiCisJCQkJ
ICAgICAgICA+CisJCQkgICAgICAgIDwvRmlsZT4KKwkJCSAgICAgICAgPEZpbGUKKwkJCQkgICAg
ICAgIFJlbGF0aXZlUGF0aD0iLi5cTW9kdWxlc1xmaWxlc3lzdGVtXERPTUZpbGVTeXN0ZW1TeW5j
LmNwcCIKKwkJCQkgICAgICAgID4KKwkJCSAgICAgICAgPC9GaWxlPgorCQkJICAgICAgICA8Rmls
ZQorCQkJCSAgICAgICAgUmVsYXRpdmVQYXRoPSIuLlxNb2R1bGVzXGZpbGVzeXN0ZW1cRE9NRmls
ZVN5c3RlbVN5bmMuaCIKKwkJCQkgICAgICAgID4KKwkJCSAgICAgICAgPC9GaWxlPgogICAgICAg
ICAJCSAgICAgICAgPEZpbGUKICAgICAgICAgCQkJICAgICAgICBSZWxhdGl2ZVBhdGg9Ii4uXE1v
ZHVsZXNcZmlsZXN5c3RlbVxEaXJlY3RvcnlFbnRyeS5jcHAiCiAJICAgICAgICAJCSAgICAgICAg
PgpAQCAtNTY4NzQsMzggKzU2OTA2LDYgQEAKIAkJCQk+CiAJCQk8L0ZpbGU+CiAJCQk8RmlsZQot
CQkJCVJlbGF0aXZlUGF0aD0iLi5cZmlsZWFwaVxET01GaWxlUGF0aC5jcHAiCi0JCQkJPgotCQkJ
PC9GaWxlPgotCQkJPEZpbGUKLQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXGZpbGVhcGlcRE9NRmlsZVBh
dGguaCIKLQkJCQk+Ci0JCQk8L0ZpbGU+Ci0JCQk8RmlsZQotCQkJCVJlbGF0aXZlUGF0aD0iLi5c
ZmlsZWFwaVxET01GaWxlU3lzdGVtLmNwcCIKLQkJCQk+Ci0JCQk8L0ZpbGU+Ci0JCQk8RmlsZQot
CQkJCVJlbGF0aXZlUGF0aD0iLi5cZmlsZWFwaVxET01GaWxlU3lzdGVtLmgiCi0JCQkJPgotCQkJ
PC9GaWxlPgotCQkJPEZpbGUKLQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXGZpbGVhcGlcRE9NRmlsZVN5
c3RlbUJhc2UuY3BwIgotCQkJCT4KLQkJCTwvRmlsZT4KLQkJCTxGaWxlCi0JCQkJUmVsYXRpdmVQ
YXRoPSIuLlxmaWxlYXBpXERPTUZpbGVTeXN0ZW1CYXNlLmgiCi0JCQkJPgotCQkJPC9GaWxlPgot
CQkJPEZpbGUKLQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXGZpbGVhcGlcRE9NRmlsZVN5c3RlbVN5bmMu
Y3BwIgotCQkJCT4KLQkJCTwvRmlsZT4KLQkJCTxGaWxlCi0JCQkJUmVsYXRpdmVQYXRoPSIuLlxm
aWxlYXBpXERPTUZpbGVTeXN0ZW1TeW5jLmgiCi0JCQkJPgotCQkJPC9GaWxlPgotCQkJPEZpbGUK
IAkJCQlSZWxhdGl2ZVBhdGg9Ii4uXGh0bWxcRE9NRm9ybURhdGEuY3BwIgogCQkJCT4KIAkJCTwv
RmlsZT4KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4
cHJvago9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9q
ZWN0LnBieHByb2oJKHJldmlzaW9uIDExMDcyNikKKysrIFNvdXJjZS9XZWJDb3JlL1dlYkNvcmUu
eGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagkod29ya2luZyBjb3B5KQpAQCAtNzExMiw3ICs3MTEy
LDcgQEAKIAkJMTQ5OTNCRTMwQjJGMkIxQzAwNTA0OTdGIC8qIEZvY3VzQ29udHJvbGxlci5jcHAg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gMzA7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gRm9jdXNDb250cm9sbGVyLmNw
cDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMTQ5OTNCRTQwQjJGMkIxQzAwNTA0OTdG
IC8qIEZvY3VzQ29udHJvbGxlci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVF
bmNvZGluZyA9IDMwOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0g
Rm9jdXNDb250cm9sbGVyLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTE0QTk4RTA1
MTM2Mzg2QTIwMEM5RkVEMiAvKiBCbG9iLmlkbCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHRleHQ7IG5hbWUgPSBCbG9i
LmlkbDsgcGF0aCA9IGZpbGVhcGkvQmxvYi5pZGw7IHNvdXJjZVRyZWUgPSBTT1VSQ0VfUk9PVDsg
fTsKLQkJMTRCREY1OTcxMzY1MzkyQzAwMTQ4MzkzIC8qIERPTUZpbGVTeXN0ZW0uaWRsICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVU
eXBlID0gdGV4dDsgbmFtZSA9IERPTUZpbGVTeXN0ZW0uaWRsOyBwYXRoID0gZmlsZWFwaS9ET01G
aWxlU3lzdGVtLmlkbDsgc291cmNlVHJlZSA9IFNPVVJDRV9ST09UOyB9OworCQkxNEJERjU5NzEz
NjUzOTJDMDAxNDgzOTMgLyogRE9NRmlsZVN5c3RlbS5pZGwgKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSB0ZXh0OyBuYW1l
ID0gRE9NRmlsZVN5c3RlbS5pZGw7IHBhdGggPSBNb2R1bGVzL2ZpbGVzeXN0ZW0vRE9NRmlsZVN5
c3RlbS5pZGw7IHNvdXJjZVRyZWUgPSBTT1VSQ0VfUk9PVDsgfTsKIAkJMTRCREY1OUExMzY1Mzk5
MTAwMTQ4MzkzIC8qIEZpbGVSZWFkZXIuaWRsICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gdGV4dDsgbmFtZSA9IEZpbGVS
ZWFkZXIuaWRsOyBwYXRoID0gZmlsZWFwaS9GaWxlUmVhZGVyLmlkbDsgc291cmNlVHJlZSA9IFNP
VVJDRV9ST09UOyB9OwogCQkxNEJERjU5QzEzNjUzOUJFMDAxNDgzOTMgLyogRmlsZVdyaXRlci5p
ZGwgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtu
b3duRmlsZVR5cGUgPSB0ZXh0OyBuYW1lID0gRmlsZVdyaXRlci5pZGw7IHBhdGggPSBmaWxlYXBp
L0ZpbGVXcml0ZXIuaWRsOyBzb3VyY2VUcmVlID0gU09VUkNFX1JPT1Q7IH07CiAJCTE0QzlBNUU5
MEIzRDEwNUYwMDVBMDIzMiAvKiBTZXR0aW5ncy5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gMzA7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
cHAuY3BwOyBwYXRoID0gU2V0dGluZ3MuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpA
QCAtOTc5NywxMCArOTc5NywxMCBAQAogCQk4OTNDNDdGMTEyNDhCRDM5MDAyQjNEODYgLyogRGly
ZWN0b3J5RW50cnlTeW5jLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29k
aW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IERpcmVj
dG9yeUVudHJ5U3luYy5oOyBwYXRoID0gTW9kdWxlcy9maWxlc3lzdGVtL0RpcmVjdG9yeUVudHJ5
U3luYy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk4OTNDNDdGMjEyNDhCRDM5MDAy
QjNEODYgLyogRGlyZWN0b3J5UmVhZGVyU3luYy5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNw
cC5jcHA7IG5hbWUgPSBEaXJlY3RvcnlSZWFkZXJTeW5jLmNwcDsgcGF0aCA9IE1vZHVsZXMvZmls
ZXN5c3RlbS9EaXJlY3RvcnlSZWFkZXJTeW5jLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKIAkJODkzQzQ3RjMxMjQ4QkQzOTAwMkIzRDg2IC8qIERpcmVjdG9yeVJlYWRlclN5bmMuaCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gRGlyZWN0b3J5UmVhZGVyU3luYy5oOyBw
YXRoID0gTW9kdWxlcy9maWxlc3lzdGVtL0RpcmVjdG9yeVJlYWRlclN5bmMuaDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKLQkJODkzQzQ3RjQxMjQ4QkQzOTAwMkIzRDg2IC8qIERPTUZpbGVT
eXN0ZW1CYXNlLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFtZSA9IERPTUZp
bGVTeXN0ZW1CYXNlLmNwcDsgcGF0aCA9IGZpbGVhcGkvRE9NRmlsZVN5c3RlbUJhc2UuY3BwOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQk4OTNDNDdGNTEyNDhCRDM5MDAyQjNEODYgLyog
RE9NRmlsZVN5c3RlbUJhc2UuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gRE9N
RmlsZVN5c3RlbUJhc2UuaDsgcGF0aCA9IGZpbGVhcGkvRE9NRmlsZVN5c3RlbUJhc2UuaDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJODkzQzQ3RjYxMjQ4QkQzOTAwMkIzRDg2IC8qIERP
TUZpbGVTeXN0ZW1TeW5jLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFtZSA9
IERPTUZpbGVTeXN0ZW1TeW5jLmNwcDsgcGF0aCA9IGZpbGVhcGkvRE9NRmlsZVN5c3RlbVN5bmMu
Y3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQk4OTNDNDdGNzEyNDhCRDM5MDAyQjNE
ODYgLyogRE9NRmlsZVN5c3RlbVN5bmMuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1l
ID0gRE9NRmlsZVN5c3RlbVN5bmMuaDsgcGF0aCA9IGZpbGVhcGkvRE9NRmlsZVN5c3RlbVN5bmMu
aDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJODkzQzQ3RjQxMjQ4QkQzOTAwMkIzRDg2
IC8qIERPTUZpbGVTeXN0ZW1CYXNlLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsg
bmFtZSA9IERPTUZpbGVTeXN0ZW1CYXNlLmNwcDsgcGF0aCA9IE1vZHVsZXMvZmlsZXN5c3RlbS9E
T01GaWxlU3lzdGVtQmFzZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTg5M0M0
N0Y1MTI0OEJEMzkwMDJCM0Q4NiAvKiBET01GaWxlU3lzdGVtQmFzZS5oICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jLmg7IG5hbWUgPSBET01GaWxlU3lzdGVtQmFzZS5oOyBwYXRoID0gTW9kdWxlcy9m
aWxlc3lzdGVtL0RPTUZpbGVTeXN0ZW1CYXNlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CisJCTg5M0M0N0Y2MTI0OEJEMzkwMDJCM0Q4NiAvKiBET01GaWxlU3lzdGVtU3luYy5jcHAgKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSBET01GaWxlU3lzdGVtU3luYy5jcHA7
IHBhdGggPSBNb2R1bGVzL2ZpbGVzeXN0ZW0vRE9NRmlsZVN5c3RlbVN5bmMuY3BwOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OworCQk4OTNDNDdGNzEyNDhCRDM5MDAyQjNEODYgLyogRE9NRmls
ZVN5c3RlbVN5bmMuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gRE9NRmlsZVN5
c3RlbVN5bmMuaDsgcGF0aCA9IE1vZHVsZXMvZmlsZXN5c3RlbS9ET01GaWxlU3lzdGVtU3luYy5o
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk4OTNDNDdGODEyNDhCRDM5MDAyQjNEODYg
LyogRW50cnlBcnJheVN5bmMuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVF
bmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBuYW1l
ID0gRW50cnlBcnJheVN5bmMuY3BwOyBwYXRoID0gZmlsZWFwaS9FbnRyeUFycmF5U3luYy5jcHA7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTg5M0M0N0Y5MTI0OEJEMzkwMDJCM0Q4NiAv
KiBFbnRyeUFycmF5U3luYy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBFbnRy
eUFycmF5U3luYy5oOyBwYXRoID0gZmlsZWFwaS9FbnRyeUFycmF5U3luYy5oOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OwogCQk4OTNDNDdGQjEyNDhCRDM5MDAyQjNEODYgLyogRW50cnlCYXNl
LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IEVudHJ5QmFzZS5oOyBwYXRoID0g
ZmlsZWFwaS9FbnRyeUJhc2UuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTk4MjYs
MTAgKzk4MjYsMTAgQEAKIAkJODk4Nzg1M0ExMjJDQTA2NDAwM0FBQkRBIC8qIERpcmVjdG9yeUVu
dHJ5LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IERpcmVjdG9yeUVudHJ5Lmg7
IHBhdGggPSBNb2R1bGVzL2ZpbGVzeXN0ZW0vRGlyZWN0b3J5RW50cnkuaDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKIAkJODk4Nzg1M0IxMjJDQTA2NDAwM0FBQkRBIC8qIERpcmVjdG9yeVJl
YWRlci5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSBEaXJlY3RvcnlS
ZWFkZXIuY3BwOyBwYXRoID0gTW9kdWxlcy9maWxlc3lzdGVtL0RpcmVjdG9yeVJlYWRlci5jcHA7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTg5ODc4NTNDMTIyQ0EwNjQwMDNBQUJEQSAv
KiBEaXJlY3RvcnlSZWFkZXIuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gRGly
ZWN0b3J5UmVhZGVyLmg7IHBhdGggPSBNb2R1bGVzL2ZpbGVzeXN0ZW0vRGlyZWN0b3J5UmVhZGVy
Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCTg5ODc4NTNEMTIyQ0EwNjQwMDNBQUJE
QSAvKiBET01GaWxlUGF0aC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVu
Y29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUg
PSBET01GaWxlUGF0aC5jcHA7IHBhdGggPSBmaWxlYXBpL0RPTUZpbGVQYXRoLmNwcDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJODk4Nzg1M0UxMjJDQTA2NDAwM0FBQkRBIC8qIERPTUZp
bGVQYXRoLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IERPTUZpbGVQYXRoLmg7
IHBhdGggPSBmaWxlYXBpL0RPTUZpbGVQYXRoLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
Ci0JCTg5ODc4NTNGMTIyQ0EwNjQwMDNBQUJEQSAvKiBET01GaWxlU3lzdGVtLmNwcCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFtZSA9IERPTUZpbGVTeXN0ZW0uY3BwOyBwYXRoID0g
ZmlsZWFwaS9ET01GaWxlU3lzdGVtLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJ
ODk4Nzg1NDAxMjJDQTA2NDAwM0FBQkRBIC8qIERPTUZpbGVTeXN0ZW0uaCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuYy5oOyBuYW1lID0gRE9NRmlsZVN5c3RlbS5oOyBwYXRoID0gZmlsZWFwaS9ET01G
aWxlU3lzdGVtLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTg5ODc4NTNEMTIyQ0Ew
NjQwMDNBQUJEQSAvKiBET01GaWxlUGF0aC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5j
cHA7IG5hbWUgPSBET01GaWxlUGF0aC5jcHA7IHBhdGggPSBNb2R1bGVzL2ZpbGVzeXN0ZW0vRE9N
RmlsZVBhdGguY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk4OTg3ODUzRTEyMkNB
MDY0MDAzQUFCREEgLyogRE9NRmlsZVBhdGguaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBu
YW1lID0gRE9NRmlsZVBhdGguaDsgcGF0aCA9IE1vZHVsZXMvZmlsZXN5c3RlbS9ET01GaWxlUGF0
aC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk4OTg3ODUzRjEyMkNBMDY0MDAzQUFC
REEgLyogRE9NRmlsZVN5c3RlbS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5h
bWUgPSBET01GaWxlU3lzdGVtLmNwcDsgcGF0aCA9IE1vZHVsZXMvZmlsZXN5c3RlbS9ET01GaWxl
U3lzdGVtLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJODk4Nzg1NDAxMjJDQTA2
NDAwM0FBQkRBIC8qIERPTUZpbGVTeXN0ZW0uaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBu
YW1lID0gRE9NRmlsZVN5c3RlbS5oOyBwYXRoID0gTW9kdWxlcy9maWxlc3lzdGVtL0RPTUZpbGVT
eXN0ZW0uaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJODk4Nzg1NDExMjJDQTA2NDAw
M0FBQkRBIC8qIEVudHJpZXNDYWxsYmFjay5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5h
bWUgPSBFbnRyaWVzQ2FsbGJhY2suaDsgcGF0aCA9IGZpbGVhcGkvRW50cmllc0NhbGxiYWNrLmg7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTg5ODc4NTQyMTIyQ0EwNjQwMDNBQUJEQSAv
KiBFbnRyeS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
NDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSBFbnRyeS5j
cHA7IHBhdGggPSBmaWxlYXBpL0VudHJ5LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
IAkJODk4Nzg1NDMxMjJDQTA2NDAwM0FBQkRBIC8qIEVudHJ5LmggKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmMuaDsgbmFtZSA9IEVudHJ5Lmg7IHBhdGggPSBmaWxlYXBpL0VudHJ5Lmg7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CkBAIC0xMjkwNyw3ICsxMjkwNyw3IEBACiAJCUUxQUIxRUFDMTRF
OUUyRjgwMDQ0OUUxMyAvKiBEaXJlY3RvcnlFbnRyeVN5bmMuaWRsICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gdGV4dDsgbmFtZSA9IERpcmVjdG9yeUVu
dHJ5U3luYy5pZGw7IHBhdGggPSBNb2R1bGVzL2ZpbGVzeXN0ZW0vRGlyZWN0b3J5RW50cnlTeW5j
LmlkbDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJRTFBQjFFQUQxNEU5RTMwNTAwNDQ5
RTEzIC8qIERpcmVjdG9yeVJlYWRlci5pZGwgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
bGFzdEtub3duRmlsZVR5cGUgPSB0ZXh0OyBuYW1lID0gRGlyZWN0b3J5UmVhZGVyLmlkbDsgcGF0
aCA9IE1vZHVsZXMvZmlsZXN5c3RlbS9EaXJlY3RvcnlSZWFkZXIuaWRsOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OwogCQlFMUFCMUVBRTE0RTlFMzBCMDA0NDlFMTMgLyogRGlyZWN0b3J5UmVh
ZGVyU3luYy5pZGwgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5
cGUgPSB0ZXh0OyBuYW1lID0gRGlyZWN0b3J5UmVhZGVyU3luYy5pZGw7IHBhdGggPSBNb2R1bGVz
L2ZpbGVzeXN0ZW0vRGlyZWN0b3J5UmVhZGVyU3luYy5pZGw7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07Ci0JCUUxQUIxRUFGMTRFOUUzMTcwMDQ0OUUxMyAvKiBET01GaWxlU3lzdGVtU3luYy5p
ZGwgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSB0ZXh0
OyBuYW1lID0gRE9NRmlsZVN5c3RlbVN5bmMuaWRsOyBwYXRoID0gZmlsZWFwaS9ET01GaWxlU3lz
dGVtU3luYy5pZGw7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUUxQUIxRUFGMTRFOUUz
MTcwMDQ0OUUxMyAvKiBET01GaWxlU3lzdGVtU3luYy5pZGwgKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSB0ZXh0OyBuYW1lID0gRE9NRmlsZVN5c3RlbVN5
bmMuaWRsOyBwYXRoID0gTW9kdWxlcy9maWxlc3lzdGVtL0RPTUZpbGVTeXN0ZW1TeW5jLmlkbDsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJRTFBQjFFQjAxNEU5RTMyMzAwNDQ5RTEzIC8q
IEVudHJpZXNDYWxsYmFjay5pZGwgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtu
b3duRmlsZVR5cGUgPSB0ZXh0OyBuYW1lID0gRW50cmllc0NhbGxiYWNrLmlkbDsgcGF0aCA9IGZp
bGVhcGkvRW50cmllc0NhbGxiYWNrLmlkbDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJ
RTFBQjFFQjExNEU5RTMyQTAwNDQ5RTEzIC8qIEVudHJ5LmlkbCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHRleHQ7IG5hbWUgPSBFbnRyeS5pZGw7IHBh
dGggPSBmaWxlYXBpL0VudHJ5LmlkbDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJRTFB
QjFFQjIxNEU5RTMzMjAwNDQ5RTEzIC8qIEVudHJ5QXJyYXkuaWRsICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gdGV4dDsgbmFtZSA9IEVudHJ5QXJyYXku
aWRsOyBwYXRoID0gZmlsZWFwaS9FbnRyeUFycmF5LmlkbDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2ZpbGVhcGkvRE9NRmlsZVBhdGguY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2ZpbGVhcGkvRE9NRmlsZVBhdGguY3BwCShyZXZpc2lv
biAxMTA3MjYpCisrKyBTb3VyY2UvV2ViQ29yZS9maWxlYXBpL0RPTUZpbGVQYXRoLmNwcAkod29y
a2luZyBjb3B5KQpAQCAtMSwxNTQgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMCBH
b29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFu
ZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9k
aWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25k
aXRpb25zIGFyZQotICogbWV0OgotICoKLSAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3Vy
Y2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAgICAg
KiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3Zl
Ci0gKiBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyCi0gKiBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIg
bWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCi0gKiBkaXN0cmlidXRpb24uCi0gKiAgICAgKiBO
ZWl0aGVyIHRoZSBuYW1lIG9mIEdvb2dsZSBJbmMuIG5vciB0aGUgbmFtZXMgb2YgaXRzCi0gKiBj
b250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRl
cml2ZWQgZnJvbQotICogdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0
ZW4gcGVybWlzc2lvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBD
T1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCi0gKiAiQVMgSVMiIEFORCBBTlkgRVhQ
UkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAotICogTElNSVRF
RCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5F
U1MgRk9SCi0gKiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZF
TlQgU0hBTEwgVEhFIENPUFlSSUdIVAotICogT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJM
RSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCi0gKiBTUEVDSUFMLCBFWEVN
UExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCi0gKiBM
SU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBM
T1NTIE9GIFVTRSwKLSAqIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElP
TikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQotICogVEhFT1JZIE9GIExJQUJJTElUWSwgV0hF
VEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xVRElO
RyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUg
VVNFCi0gKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklM
SVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLSNpbmNsdWRlICJjb25maWcuaCIKLSNpbmNsdWRl
ICJET01GaWxlUGF0aC5oIgotCi0jaWYgRU5BQkxFKEZJTEVfU1lTVEVNKQotCi0jaW5jbHVkZSAi
UmVndWxhckV4cHJlc3Npb24uaCIKLSNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+Ci0jaW5jbHVkZSA8
d3RmL3RleHQvQ1N0cmluZy5oPgotCi1uYW1lc3BhY2UgV2ViQ29yZSB7Ci0KLWNvbnN0IGNoYXIg
RE9NRmlsZVBhdGg6OnNlcGFyYXRvciA9ICcvJzsKLWNvbnN0IGNoYXIgRE9NRmlsZVBhdGg6OnJv
b3RbXSA9ICIvIjsKLQotU3RyaW5nIERPTUZpbGVQYXRoOjphcHBlbmQoY29uc3QgU3RyaW5nJiBi
YXNlLCBjb25zdCBTdHJpbmcmIGNvbXBvbmVudHMpCi17Ci0gICAgcmV0dXJuIGVuc3VyZURpcmVj
dG9yeVBhdGgoYmFzZSkgKyBjb21wb25lbnRzOwotfQotCi1TdHJpbmcgRE9NRmlsZVBhdGg6OmVu
c3VyZURpcmVjdG9yeVBhdGgoY29uc3QgU3RyaW5nJiBwYXRoKQotewotICAgIGlmICghRE9NRmls
ZVBhdGg6OmVuZHNXaXRoU2VwYXJhdG9yKHBhdGgpKSB7Ci0gICAgICAgIFN0cmluZyBuZXdQYXRo
ID0gcGF0aDsKLSAgICAgICAgbmV3UGF0aC5hcHBlbmQoRE9NRmlsZVBhdGg6OnNlcGFyYXRvcik7
Ci0gICAgICAgIHJldHVybiBuZXdQYXRoOwotICAgIH0KLSAgICByZXR1cm4gcGF0aDsKLX0KLQot
U3RyaW5nIERPTUZpbGVQYXRoOjpnZXROYW1lKGNvbnN0IFN0cmluZyYgcGF0aCkKLXsKLSAgICBp
bnQgaW5kZXggPSBwYXRoLnJldmVyc2VGaW5kKERPTUZpbGVQYXRoOjpzZXBhcmF0b3IpOwotICAg
IGlmIChpbmRleCAhPSAtMSkKLSAgICAgICAgcmV0dXJuIHBhdGguc3Vic3RyaW5nKGluZGV4ICsg
MSk7Ci0gICAgcmV0dXJuIHBhdGg7Ci19Ci0KLVN0cmluZyBET01GaWxlUGF0aDo6Z2V0RGlyZWN0
b3J5KGNvbnN0IFN0cmluZyYgcGF0aCkKLXsKLSAgICBpbnQgaW5kZXggPSBwYXRoLnJldmVyc2VG
aW5kKERPTUZpbGVQYXRoOjpzZXBhcmF0b3IpOwotICAgIGlmIChpbmRleCA9PSAwKQotICAgICAg
ICByZXR1cm4gRE9NRmlsZVBhdGg6OnJvb3Q7Ci0gICAgaWYgKGluZGV4ICE9IC0xKQotICAgICAg
ICByZXR1cm4gcGF0aC5zdWJzdHJpbmcoMCwgaW5kZXgpOwotICAgIHJldHVybiAiLiI7Ci19Ci0K
LWJvb2wgRE9NRmlsZVBhdGg6OmlzUGFyZW50T2YoY29uc3QgU3RyaW5nJiBwYXJlbnQsIGNvbnN0
IFN0cmluZyYgbWF5QmVDaGlsZCkKLXsKLSAgICBBU1NFUlQoRE9NRmlsZVBhdGg6OmlzQWJzb2x1
dGUocGFyZW50KSk7Ci0gICAgQVNTRVJUKERPTUZpbGVQYXRoOjppc0Fic29sdXRlKG1heUJlQ2hp
bGQpKTsKLSAgICBpZiAocGFyZW50ID09IERPTUZpbGVQYXRoOjpyb290ICYmIG1heUJlQ2hpbGQg
IT0gRE9NRmlsZVBhdGg6OnJvb3QpCi0gICAgICAgIHJldHVybiB0cnVlOwotICAgIGlmIChwYXJl
bnQubGVuZ3RoKCkgPj0gbWF5QmVDaGlsZC5sZW5ndGgoKSB8fCAhbWF5QmVDaGlsZC5zdGFydHNX
aXRoKHBhcmVudCwgZmFsc2UpKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgaWYgKG1heUJl
Q2hpbGRbcGFyZW50Lmxlbmd0aCgpXSAhPSBET01GaWxlUGF0aDo6c2VwYXJhdG9yKQotICAgICAg
ICByZXR1cm4gZmFsc2U7Ci0gICAgcmV0dXJuIHRydWU7Ci19Ci0KLVN0cmluZyBET01GaWxlUGF0
aDo6cmVtb3ZlRXh0cmFQYXJlbnRSZWZlcmVuY2VzKGNvbnN0IFN0cmluZyYgcGF0aCkKLXsKLSAg
ICBBU1NFUlQoRE9NRmlsZVBhdGg6OmlzQWJzb2x1dGUocGF0aCkpOwotICAgIFZlY3RvcjxTdHJp
bmc+IGNvbXBvbmVudHM7Ci0gICAgVmVjdG9yPFN0cmluZz4gY2Fub25pY2FsaXplZDsKLSAgICBw
YXRoLnNwbGl0KERPTUZpbGVQYXRoOjpzZXBhcmF0b3IsIGNvbXBvbmVudHMpOwotICAgIGZvciAo
c2l6ZV90IGkgPSAwOyBpIDwgY29tcG9uZW50cy5zaXplKCk7ICsraSkgewotICAgICAgICBpZiAo
Y29tcG9uZW50c1tpXSA9PSAiLiIpCi0gICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgaWYg
KGNvbXBvbmVudHNbaV0gPT0gIi4uIikgewotICAgICAgICAgICAgaWYgKGNhbm9uaWNhbGl6ZWQu
c2l6ZSgpID4gMCkKLSAgICAgICAgICAgICAgICBjYW5vbmljYWxpemVkLnJlbW92ZUxhc3QoKTsK
LSAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICB9Ci0gICAgICAgIGNhbm9uaWNhbGl6ZWQu
YXBwZW5kKGNvbXBvbmVudHNbaV0pOwotICAgIH0KLSAgICBpZiAoY2Fub25pY2FsaXplZC5pc0Vt
cHR5KCkpCi0gICAgICAgIHJldHVybiBET01GaWxlUGF0aDo6cm9vdDsKLSAgICBTdHJpbmcgcmVz
dWx0OwotICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgY2Fub25pY2FsaXplZC5zaXplKCk7ICsr
aSkgewotICAgICAgICByZXN1bHQuYXBwZW5kKERPTUZpbGVQYXRoOjpzZXBhcmF0b3IpOwotICAg
ICAgICByZXN1bHQuYXBwZW5kKGNhbm9uaWNhbGl6ZWRbaV0pOwotICAgIH0KLSAgICByZXR1cm4g
cmVzdWx0OwotfQotCi1ib29sIERPTUZpbGVQYXRoOjppc1ZhbGlkUGF0aChjb25zdCBTdHJpbmcm
IHBhdGgpCi17Ci0gICAgaWYgKHBhdGguaXNFbXB0eSgpIHx8IHBhdGggPT0gRE9NRmlsZVBhdGg6
OnJvb3QpCi0gICAgICAgIHJldHVybiB0cnVlOwotCi0gICAgLy8gRW1iZWRkZWQgTlVMcyBhcmUg
bm90IGFsbG93ZWQuCi0gICAgaWYgKHBhdGguZmluZChzdGF0aWNfY2FzdDxVQ2hhcj4oMCkpICE9
IFdURjo6bm90Rm91bmQpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIC8vIFdoaWxlIG5v
dCBbeWV0XSByZXN0cmljdGVkIGJ5IHRoZSBzcGVjLCAnXFwnIGNvbXBsaWNhdGVzIGltcGxlbWVu
dGF0aW9uIGZvciBDaHJvbWl1bS4KLSAgICBpZiAocGF0aC5maW5kKCdcXCcpICE9IFdURjo6bm90
Rm91bmQpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIC8vIFRoaXMgbWV0aG9kIGlzIG9u
bHkgY2FsbGVkIG9uIGZ1bGx5LWV2YWx1YXRlZCBhYnNvbHV0ZSBwYXRocy4gQW55IHNpZ24gb2Yg
Ii4uIiBvciAiLiIgaXMgbGlrZWx5IGFuIGF0dGVtcHQgdG8gYnJlYWsgb3V0IG9mIHRoZSBzYW5k
Ym94LgotICAgIFZlY3RvcjxTdHJpbmc+IGNvbXBvbmVudHM7Ci0gICAgcGF0aC5zcGxpdChET01G
aWxlUGF0aDo6c2VwYXJhdG9yLCBjb21wb25lbnRzKTsKLSAgICBmb3IgKHNpemVfdCBpID0gMDsg
aSA8IGNvbXBvbmVudHMuc2l6ZSgpOyArK2kpIHsKLSAgICAgICAgaWYgKGNvbXBvbmVudHNbaV0g
PT0gIi4iKQotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICBpZiAoY29tcG9uZW50
c1tpXSA9PSAiLi4iKQotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLSAgICByZXR1
cm4gdHJ1ZTsKLX0KLQotYm9vbCBET01GaWxlUGF0aDo6aXNWYWxpZE5hbWUoY29uc3QgU3RyaW5n
JiBuYW1lKQotewotICAgIGlmIChuYW1lLmlzRW1wdHkoKSkKLSAgICAgICAgcmV0dXJuIHRydWU7
Ci0gICAgLy8gJy8nIGlzIG5vdCBhbGxvd2VkIGluIG5hbWUuCi0gICAgaWYgKG5hbWUuY29udGFp
bnMoJy8nKSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIHJldHVybiBpc1ZhbGlkUGF0aChu
YW1lKTsKLX0KLQotfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQotCi0jZW5kaWYgLy8gRU5BQkxFKEZJ
TEVfU1lTVEVNKQpJbmRleDogU291cmNlL1dlYkNvcmUvZmlsZWFwaS9ET01GaWxlUGF0aC5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2ZpbGVhcGkvRE9NRmlsZVBhdGguaAkocmV2aXNp
b24gMTEwNzI2KQorKysgU291cmNlL1dlYkNvcmUvZmlsZWFwaS9ET01GaWxlUGF0aC5oCSh3b3Jr
aW5nIGNvcHkpCkBAIC0xLDg2ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTAgR29v
Z2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQg
dXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlm
aWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0
aW9ucyBhcmUKLSAqIG1ldDoKLSAqCi0gKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNl
IGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogICAgICog
UmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQot
ICogY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lcgotICogaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1h
dGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQotICogZGlzdHJpYnV0aW9uLgotICogICAgICogTmVp
dGhlciB0aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0cwotICogY29u
dHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJp
dmVkIGZyb20KLSAqIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVu
IHBlcm1pc3Npb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09Q
WVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUwotICogIkFTIElTIiBBTkQgQU5ZIEVYUFJF
U1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKLSAqIExJTUlURUQg
VE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNT
IEZPUgotICogQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5U
IFNIQUxMIFRIRSBDT1BZUklHSFQKLSAqIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUg
Rk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAotICogU1BFQ0lBTCwgRVhFTVBM
QVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAotICogTElN
SVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9T
UyBPRiBVU0UsCi0gKiBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04p
IEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKLSAqIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRI
RVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcg
TkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVT
RQotICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElU
WSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0jaWZuZGVmIERPTUZpbGVQYXRoX2gKLSNkZWZpbmUg
RE9NRmlsZVBhdGhfaAotCi0jaW5jbHVkZSAiUGxhdGZvcm1TdHJpbmcuaCIKLSNpbmNsdWRlIDx3
dGYvUGFzc1JlZlB0ci5oPgotI2luY2x1ZGUgPHd0Zi9SZWZDb3VudGVkLmg+Ci0KLW5hbWVzcGFj
ZSBXZWJDb3JlIHsKLQotLy8gRE9NRmlsZVN5c3RlbSBwYXRoIHV0aWxpdGllcy4gQWxsIG1ldGhv
ZHMgaW4gdGhpcyBjbGFzcyBhcmUgc3RhdGljLgotY2xhc3MgRE9NRmlsZVBhdGggewotcHVibGlj
OgotICAgIHN0YXRpYyBjb25zdCBjaGFyIHNlcGFyYXRvcjsKLSAgICBzdGF0aWMgY29uc3QgY2hh
ciByb290W107Ci0KLSAgICAvLyBSZXR1cm5zIHRoZSBuYW1lIHBhcnQgZnJvbSB0aGUgZ2l2ZW4g
cGF0aC4KLSAgICBzdGF0aWMgU3RyaW5nIGdldE5hbWUoY29uc3QgU3RyaW5nJiBwYXRoKTsKLQot
ICAgIC8vIFJldHVybnMgdGhlIHBhcmVudCBkaXJlY3RvcnkgcGF0aCBvZiB0aGUgZ2l2ZW4gcGF0
aC4KLSAgICBzdGF0aWMgU3RyaW5nIGdldERpcmVjdG9yeShjb25zdCBTdHJpbmcmIHBhdGgpOwot
Ci0gICAgLy8gQ2hlY2tzIGlmIGEgZ2l2ZW4gcGF0aCBpcyBhIHBhcmVudCBvZiBtYXlCZUNoaWxk
LiBUaGlzIG1ldGhvZCBhc3N1bWVzIGdpdmVuIHBhdGhzIGFyZSBhYnNvbHV0ZSBhbmQgZG8gbm90
IGhhdmUgZXh0cmEgcmVmZXJlbmNlcyB0byBhIHBhcmVudCAoaS5lLiAiLi4vIikuCi0gICAgc3Rh
dGljIGJvb2wgaXNQYXJlbnRPZihjb25zdCBTdHJpbmcmIHBhdGgsIGNvbnN0IFN0cmluZyYgbWF5
QmVDaGlsZCk7Ci0KLSAgICAvLyBBcHBlbmRzIHRoZSBzZXBhcmF0b3IgYXQgdGhlIGVuZCBvZiB0
aGUgcGF0aCBpZiBpdCdzIG5vdCB0aGVyZSBhbHJlYWR5LgotICAgIHN0YXRpYyBTdHJpbmcgZW5z
dXJlRGlyZWN0b3J5UGF0aChjb25zdCBTdHJpbmcmIHBhdGgpOwotCi0gICAgLy8gUmV0dXJucyBh
IG5ldyBwYXRoIGJ5IGFwcGVuZGluZyBhIHNlcGFyYXRvciBhbmQgdGhlIHN1cHBsaWVkIHBhdGgg
Y29tcG9uZW50IHRvIHRoZSBwYXRoLgotICAgIHN0YXRpYyBTdHJpbmcgYXBwZW5kKGNvbnN0IFN0
cmluZyYgcGF0aCwgY29uc3QgU3RyaW5nJiBjb21wb25lbnQpOwotCi0gICAgc3RhdGljIGJvb2wg
aXNBYnNvbHV0ZShjb25zdCBTdHJpbmcmIHBhdGgpCi0gICAgewotICAgICAgICByZXR1cm4gcGF0
aC5zdGFydHNXaXRoKERPTUZpbGVQYXRoOjpyb290KTsKLSAgICB9Ci0KLSAgICBzdGF0aWMgYm9v
bCBlbmRzV2l0aFNlcGFyYXRvcihjb25zdCBTdHJpbmcmIHBhdGgpCi0gICAgewotICAgICAgICBy
ZXR1cm4gcGF0aFtwYXRoLmxlbmd0aCgpIC0gMV0gPT0gRE9NRmlsZVBhdGg6OnNlcGFyYXRvcjsK
LSAgICB9Ci0KLSAgICAvLyBFdmFsdWF0ZXMgYWxsICIuLi8iIGFuZCAiLi8iIHNlZ21lbnRzLiAg
Tm90ZSB0aGF0ICIvLi4vIiBleHBhbmRzIHRvICIvIiwgc28geW91IGNhbid0IGV2ZXIgcmVmZXIg
dG8gYW55dGhpbmcgYWJvdmUgdGhlIHJvb3QgZGlyZWN0b3J5LgotICAgIHN0YXRpYyBTdHJpbmcg
cmVtb3ZlRXh0cmFQYXJlbnRSZWZlcmVuY2VzKGNvbnN0IFN0cmluZyYgcGF0aCk7Ci0KLSAgICAv
LyBDaGVja3MgaWYgdGhlIGdpdmVuIHBhdGggZm9sbG93cyB0aGUgRmlsZVN5c3RlbSBBUEkgbmFt
aW5nIHJlc3RyaWN0aW9ucy4KLSAgICBzdGF0aWMgYm9vbCBpc1ZhbGlkUGF0aChjb25zdCBTdHJp
bmcmIHBhdGgpOwotCi0gICAgLy8gQ2hlY2tzIGlmIHRoZSBnaXZlbiBuYW1lIGZvbGxvd3MgdGhl
IEZpbGVTeXN0ZW0gQVBJIG5hbWluZyByZXN0cmljdGlvbnMuCi0gICAgc3RhdGljIGJvb2wgaXNW
YWxpZE5hbWUoY29uc3QgU3RyaW5nJiBuYW1lKTsKLQotcHJpdmF0ZToKLSAgICBET01GaWxlUGF0
aCgpIHsgfQotfTsKLQotfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQotCi0jZW5kaWYgLy8gRE9NRmls
ZVBhdGhfaApJbmRleDogU291cmNlL1dlYkNvcmUvZmlsZWFwaS9ET01GaWxlU3lzdGVtLmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9maWxlYXBpL0RPTUZpbGVTeXN0ZW0uY3BwCShy
ZXZpc2lvbiAxMTA3MjYpCisrKyBTb3VyY2UvV2ViQ29yZS9maWxlYXBpL0RPTUZpbGVTeXN0ZW0u
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDE2MiArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChD
KSAyMDEwIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmli
dXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0
Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93
aW5nIGNvbmRpdGlvbnMgYXJlCi0gKiBtZXQ6Ci0gKgotICogICAgICogUmVkaXN0cmlidXRpb25z
IG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4K
LSAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0
aGUgYWJvdmUKLSAqIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIKLSAqIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9v
ciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKLSAqIGRpc3RyaWJ1dGlvbi4KLSAq
ICAgICAqIE5laXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xlIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBp
dHMKLSAqIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJv
ZHVjdHMgZGVyaXZlZCBmcm9tCi0gKiB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJp
b3Igd3JpdHRlbiBwZXJtaXNzaW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQg
QlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKLSAqICJBUyBJUyIgQU5E
IEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCi0g
KiBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBB
TkQgRklUTkVTUyBGT1IKLSAqIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJ
TiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCi0gKiBPV05FUiBPUiBDT05UUklCVVRPUlMg
QkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKLSAqIFNQRUNJ
QUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBO
T1QKLSAqIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VS
VklDRVM7IExPU1MgT0YgVVNFLAotICogREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5U
RVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCi0gKiBUSEVPUlkgT0YgTElBQklM
SVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAo
SU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VU
IE9GIFRIRSBVU0UKLSAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUg
UE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotI2luY2x1ZGUgImNvbmZpZy5oIgot
I2luY2x1ZGUgIkRPTUZpbGVTeXN0ZW0uaCIKLQotI2lmIEVOQUJMRShGSUxFX1NZU1RFTSkKLQot
I2luY2x1ZGUgIkFzeW5jRmlsZVN5c3RlbS5oIgotI2luY2x1ZGUgIkRPTUZpbGVQYXRoLmgiCi0j
aW5jbHVkZSAiRGlyZWN0b3J5RW50cnkuaCIKLSNpbmNsdWRlICJFcnJvckNhbGxiYWNrLmgiCi0j
aW5jbHVkZSAiRmlsZS5oIgotI2luY2x1ZGUgIkZpbGVDYWxsYmFjay5oIgotI2luY2x1ZGUgIkZp
bGVFbnRyeS5oIgotI2luY2x1ZGUgIkZpbGVNZXRhZGF0YS5oIgotI2luY2x1ZGUgIkZpbGVTeXN0
ZW1DYWxsYmFja3MuaCIKLSNpbmNsdWRlICJGaWxlV3JpdGVyLmgiCi0jaW5jbHVkZSAiRmlsZVdy
aXRlckJhc2VDYWxsYmFjay5oIgotI2luY2x1ZGUgIkZpbGVXcml0ZXJDYWxsYmFjay5oIgotI2lu
Y2x1ZGUgIkluc3BlY3RvckZpbGVTeXN0ZW1JbnN0cnVtZW50YXRpb24uaCIKLSNpbmNsdWRlICJN
ZXRhZGF0YUNhbGxiYWNrLmgiCi0jaW5jbHVkZSAiU2NyaXB0RXhlY3V0aW9uQ29udGV4dC5oIgot
I2luY2x1ZGUgPHd0Zi9Pd25QdHIuaD4KLQotbmFtZXNwYWNlIFdlYkNvcmUgewotCi0vLyBzdGF0
aWMKLVBhc3NSZWZQdHI8RE9NRmlsZVN5c3RlbT4gRE9NRmlsZVN5c3RlbTo6Y3JlYXRlKFNjcmlw
dEV4ZWN1dGlvbkNvbnRleHQqIGNvbnRleHQsIGNvbnN0IFN0cmluZyYgbmFtZSwgUGFzc093blB0
cjxBc3luY0ZpbGVTeXN0ZW0+IGFzeW5jRmlsZVN5c3RlbSkKLXsKLSAgICBSZWZQdHI8RE9NRmls
ZVN5c3RlbT4gZmlsZVN5c3RlbShhZG9wdFJlZihuZXcgRE9NRmlsZVN5c3RlbShjb250ZXh0LCBu
YW1lLCBhc3luY0ZpbGVTeXN0ZW0pKSk7Ci0gICAgZmlsZVN5c3RlbS0+c3VzcGVuZElmTmVlZGVk
KCk7Ci0gICAgSW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uOjpkaWRPcGVuRmlsZVN5c3RlbShmaWxl
U3lzdGVtLmdldCgpKTsKLSAgICByZXR1cm4gZmlsZVN5c3RlbS5yZWxlYXNlKCk7Ci19Ci0KLURP
TUZpbGVTeXN0ZW06OkRPTUZpbGVTeXN0ZW0oU2NyaXB0RXhlY3V0aW9uQ29udGV4dCogY29udGV4
dCwgY29uc3QgU3RyaW5nJiBuYW1lLCBQYXNzT3duUHRyPEFzeW5jRmlsZVN5c3RlbT4gYXN5bmNG
aWxlU3lzdGVtKQotICAgIDogRE9NRmlsZVN5c3RlbUJhc2UoY29udGV4dCwgbmFtZSwgYXN5bmNG
aWxlU3lzdGVtKQotICAgICwgQWN0aXZlRE9NT2JqZWN0KGNvbnRleHQsIHRoaXMpCi17Ci19Ci0K
LVBhc3NSZWZQdHI8RGlyZWN0b3J5RW50cnk+IERPTUZpbGVTeXN0ZW06OnJvb3QoKQotewotICAg
IHJldHVybiBEaXJlY3RvcnlFbnRyeTo6Y3JlYXRlKHRoaXMsIERPTUZpbGVQYXRoOjpyb290KTsK
LX0KLQotdm9pZCBET01GaWxlU3lzdGVtOjpzdG9wKCkKLXsKLSAgICBtX2FzeW5jRmlsZVN5c3Rl
bS0+c3RvcCgpOwotfQotCi1ib29sIERPTUZpbGVTeXN0ZW06Omhhc1BlbmRpbmdBY3Rpdml0eSgp
IGNvbnN0Ci17Ci0gICAgcmV0dXJuIG1fYXN5bmNGaWxlU3lzdGVtLT5oYXNQZW5kaW5nQWN0aXZp
dHkoKTsKLX0KLQotdm9pZCBET01GaWxlU3lzdGVtOjpjb250ZXh0RGVzdHJveWVkKCkKLXsKLSAg
ICBtX2FzeW5jRmlsZVN5c3RlbS0+c3RvcCgpOwotICAgIEFjdGl2ZURPTU9iamVjdDo6Y29udGV4
dERlc3Ryb3llZCgpOwotfQotCi1uYW1lc3BhY2UgewotCi1jbGFzcyBDb252ZXJ0VG9GaWxlV3Jp
dGVyQ2FsbGJhY2sgOiBwdWJsaWMgRmlsZVdyaXRlckJhc2VDYWxsYmFjayB7Ci1wdWJsaWM6Ci0g
ICAgc3RhdGljIFBhc3NSZWZQdHI8Q29udmVydFRvRmlsZVdyaXRlckNhbGxiYWNrPiBjcmVhdGUo
UGFzc1JlZlB0cjxGaWxlV3JpdGVyQ2FsbGJhY2s+IGNhbGxiYWNrKQotICAgIHsKLSAgICAgICAg
cmV0dXJuIGFkb3B0UmVmKG5ldyBDb252ZXJ0VG9GaWxlV3JpdGVyQ2FsbGJhY2soY2FsbGJhY2sp
KTsKLSAgICB9Ci0KLSAgICBib29sIGhhbmRsZUV2ZW50KEZpbGVXcml0ZXJCYXNlKiBmaWxlV3Jp
dGVyQmFzZSkKLSAgICB7Ci0gICAgICAgIHJldHVybiBtX2NhbGxiYWNrLT5oYW5kbGVFdmVudChz
dGF0aWNfY2FzdDxGaWxlV3JpdGVyKj4oZmlsZVdyaXRlckJhc2UpKTsKLSAgICB9Ci1wcml2YXRl
OgotICAgIENvbnZlcnRUb0ZpbGVXcml0ZXJDYWxsYmFjayhQYXNzUmVmUHRyPEZpbGVXcml0ZXJD
YWxsYmFjaz4gY2FsbGJhY2spCi0gICAgICAgIDogbV9jYWxsYmFjayhjYWxsYmFjaykKLSAgICB7
Ci0gICAgfQotICAgIFJlZlB0cjxGaWxlV3JpdGVyQ2FsbGJhY2s+IG1fY2FsbGJhY2s7Ci19Owot
Ci19Ci0KLXZvaWQgRE9NRmlsZVN5c3RlbTo6Y3JlYXRlV3JpdGVyKGNvbnN0IEZpbGVFbnRyeSog
ZmlsZUVudHJ5LCBQYXNzUmVmUHRyPEZpbGVXcml0ZXJDYWxsYmFjaz4gc3VjY2Vzc0NhbGxiYWNr
LCBQYXNzUmVmUHRyPEVycm9yQ2FsbGJhY2s+IGVycm9yQ2FsbGJhY2spCi17Ci0gICAgQVNTRVJU
KGZpbGVFbnRyeSk7Ci0KLSAgICBSZWZQdHI8RmlsZVdyaXRlcj4gZmlsZVdyaXRlciA9IEZpbGVX
cml0ZXI6OmNyZWF0ZShzY3JpcHRFeGVjdXRpb25Db250ZXh0KCkpOwotICAgIFJlZlB0cjxGaWxl
V3JpdGVyQmFzZUNhbGxiYWNrPiBjb252ZXJzaW9uQ2FsbGJhY2sgPSBDb252ZXJ0VG9GaWxlV3Jp
dGVyQ2FsbGJhY2s6OmNyZWF0ZShzdWNjZXNzQ2FsbGJhY2spOwotICAgIE93blB0cjxGaWxlV3Jp
dGVyQmFzZUNhbGxiYWNrcz4gY2FsbGJhY2tzID0gRmlsZVdyaXRlckJhc2VDYWxsYmFja3M6OmNy
ZWF0ZShmaWxlV3JpdGVyLCBjb252ZXJzaW9uQ2FsbGJhY2ssIGVycm9yQ2FsbGJhY2spOwotICAg
IG1fYXN5bmNGaWxlU3lzdGVtLT5jcmVhdGVXcml0ZXIoZmlsZVdyaXRlci5nZXQoKSwgZmlsZUVu
dHJ5LT5mdWxsUGF0aCgpLCBjYWxsYmFja3MucmVsZWFzZSgpKTsKLX0KLQotbmFtZXNwYWNlIHsK
LQotY2xhc3MgR2V0UGF0aENhbGxiYWNrIDogcHVibGljIEZpbGVTeXN0ZW1DYWxsYmFja3NCYXNl
IHsKLXB1YmxpYzoKLSAgICBzdGF0aWMgUGFzc093blB0cjxHZXRQYXRoQ2FsbGJhY2s+IGNyZWF0
ZShQYXNzUmVmUHRyPERPTUZpbGVTeXN0ZW0+IGZpbGVzeXN0ZW0sIGNvbnN0IFN0cmluZyYgbmFt
ZSwgUGFzc1JlZlB0cjxGaWxlQ2FsbGJhY2s+IHN1Y2Nlc3NDYWxsYmFjaywgUGFzc1JlZlB0cjxF
cnJvckNhbGxiYWNrPiBlcnJvckNhbGxiYWNrKQotICAgIHsKLSAgICAgICAgcmV0dXJuIGFkb3B0
UHRyKG5ldyBHZXRQYXRoQ2FsbGJhY2soZmlsZXN5c3RlbSwgbmFtZSwgc3VjY2Vzc0NhbGxiYWNr
LCBlcnJvckNhbGxiYWNrKSk7Ci0gICAgfQotCi0gICAgdmlydHVhbCB2b2lkIGRpZFJlYWRNZXRh
ZGF0YShjb25zdCBGaWxlTWV0YWRhdGEmIG1ldGFkYXRhKQotICAgIHsKLSAgICAgICAgQVNTRVJU
KCFtZXRhZGF0YS5wbGF0Zm9ybVBhdGguaXNFbXB0eSgpKTsKLSAgICAgICAgbV9maWxlc3lzdGVt
LT5zY2hlZHVsZUNhbGxiYWNrKG1fc3VjY2Vzc0NhbGxiYWNrLnJlbGVhc2UoKSwgRmlsZTo6Y3Jl
YXRlV2l0aE5hbWUobWV0YWRhdGEucGxhdGZvcm1QYXRoLCBtX25hbWUpKTsKLSAgICB9Ci0KLXBy
aXZhdGU6Ci0gICAgR2V0UGF0aENhbGxiYWNrKFBhc3NSZWZQdHI8RE9NRmlsZVN5c3RlbT4gZmls
ZXN5c3RlbSwgY29uc3QgU3RyaW5nJiBuYW1lLCAgUGFzc1JlZlB0cjxGaWxlQ2FsbGJhY2s+IHN1
Y2Nlc3NDYWxsYmFjaywgUGFzc1JlZlB0cjxFcnJvckNhbGxiYWNrPiBlcnJvckNhbGxiYWNrKQot
ICAgICAgICA6IEZpbGVTeXN0ZW1DYWxsYmFja3NCYXNlKGVycm9yQ2FsbGJhY2spCi0gICAgICAg
ICwgbV9maWxlc3lzdGVtKGZpbGVzeXN0ZW0pCi0gICAgICAgICwgbV9uYW1lKG5hbWUpCi0gICAg
ICAgICwgbV9zdWNjZXNzQ2FsbGJhY2soc3VjY2Vzc0NhbGxiYWNrKQotICAgIHsKLSAgICB9Ci0K
LSAgICBSZWZQdHI8RE9NRmlsZVN5c3RlbT4gbV9maWxlc3lzdGVtOwotICAgIFN0cmluZyBtX25h
bWU7Ci0gICAgUmVmUHRyPEZpbGVDYWxsYmFjaz4gbV9zdWNjZXNzQ2FsbGJhY2s7Ci19OwotCi19
IC8vIG5hbWVzcGFjZQotCi12b2lkIERPTUZpbGVTeXN0ZW06OmNyZWF0ZUZpbGUoY29uc3QgRmls
ZUVudHJ5KiBmaWxlRW50cnksIFBhc3NSZWZQdHI8RmlsZUNhbGxiYWNrPiBzdWNjZXNzQ2FsbGJh
Y2ssIFBhc3NSZWZQdHI8RXJyb3JDYWxsYmFjaz4gZXJyb3JDYWxsYmFjaykKLXsKLSAgICBtX2Fz
eW5jRmlsZVN5c3RlbS0+Y3JlYXRlU25hcHNob3RGaWxlQW5kUmVhZE1ldGFkYXRhKGZpbGVFbnRy
eS0+ZnVsbFBhdGgoKSwgR2V0UGF0aENhbGxiYWNrOjpjcmVhdGUodGhpcywgZmlsZUVudHJ5LT5u
YW1lKCksIHN1Y2Nlc3NDYWxsYmFjaywgZXJyb3JDYWxsYmFjaykpOwotfQotCi19IC8vIG5hbWVz
cGFjZSBXZWJDb3JlCi0KLSNlbmRpZiAvLyBFTkFCTEUoRklMRV9TWVNURU0pCkluZGV4OiBTb3Vy
Y2UvV2ViQ29yZS9maWxlYXBpL0RPTUZpbGVTeXN0ZW0uaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
V2ViQ29yZS9maWxlYXBpL0RPTUZpbGVTeXN0ZW0uaAkocmV2aXNpb24gMTEwNzI2KQorKysgU291
cmNlL1dlYkNvcmUvZmlsZWFwaS9ET01GaWxlU3lzdGVtLmgJKHdvcmtpbmcgY29weSkKQEAgLTEs
MTA5ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTAgR29vZ2xlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBh
bmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBl
cm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUKLSAqIG1l
dDoKLSAqCi0gKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRh
aW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogICAgICogUmVkaXN0cmlidXRpb25z
IGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQotICogY29weXJpZ2h0IG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
cgotICogaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRl
ZCB3aXRoIHRoZQotICogZGlzdHJpYnV0aW9uLgotICogICAgICogTmVpdGhlciB0aGUgbmFtZSBv
ZiBHb29nbGUgSW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0cwotICogY29udHJpYnV0b3JzIG1heSBi
ZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20KLSAqIHRo
aXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCi0g
KgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMg
QU5EIENPTlRSSUJVVE9SUwotICogIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBX
QVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKLSAqIExJTUlURUQgVE8sIFRIRSBJTVBMSUVE
IFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgotICogQSBQQVJU
SUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZ
UklHSFQKLSAqIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1Qs
IElORElSRUNULCBJTkNJREVOVEFMLAotICogU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFV
RU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAotICogTElNSVRFRCBUTywgUFJPQ1VS
RU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCi0gKiBE
QVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VE
IEFORCBPTiBBTlkKLSAqIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1Qs
IFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBP
VEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotICogT0YgVEhJUyBT
T0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFH
RS4KLSAqLwotCi0jaWZuZGVmIERPTUZpbGVTeXN0ZW1faAotI2RlZmluZSBET01GaWxlU3lzdGVt
X2gKLQotI2lmIEVOQUJMRShGSUxFX1NZU1RFTSkKLQotI2luY2x1ZGUgIkFjdGl2ZURPTU9iamVj
dC5oIgotI2luY2x1ZGUgIkRPTUZpbGVTeXN0ZW1CYXNlLmgiCi0jaW5jbHVkZSAiU2NyaXB0RXhl
Y3V0aW9uQ29udGV4dC5oIgotCi1uYW1lc3BhY2UgV2ViQ29yZSB7Ci0KLWNsYXNzIERpcmVjdG9y
eUVudHJ5OwotY2xhc3MgRmlsZTsKLWNsYXNzIEZpbGVDYWxsYmFjazsKLWNsYXNzIEZpbGVFbnRy
eTsKLWNsYXNzIEZpbGVXcml0ZXJDYWxsYmFjazsKLQotY2xhc3MgRE9NRmlsZVN5c3RlbSA6IHB1
YmxpYyBET01GaWxlU3lzdGVtQmFzZSwgcHVibGljIEFjdGl2ZURPTU9iamVjdCB7Ci1wdWJsaWM6
Ci0gICAgc3RhdGljIFBhc3NSZWZQdHI8RE9NRmlsZVN5c3RlbT4gY3JlYXRlKFNjcmlwdEV4ZWN1
dGlvbkNvbnRleHQqLCBjb25zdCBTdHJpbmcmIG5hbWUsIFBhc3NPd25QdHI8QXN5bmNGaWxlU3lz
dGVtPik7Ci0KLSAgICBQYXNzUmVmUHRyPERpcmVjdG9yeUVudHJ5PiByb290KCk7Ci0KLSAgICAv
LyBBY3RpdmVET01PYmplY3QgbWV0aG9kcy4KLSAgICB2aXJ0dWFsIHZvaWQgc3RvcCgpOwotICAg
IHZpcnR1YWwgYm9vbCBoYXNQZW5kaW5nQWN0aXZpdHkoKSBjb25zdDsKLSAgICB2aXJ0dWFsIHZv
aWQgY29udGV4dERlc3Ryb3llZCgpOwotCi0gICAgdm9pZCBjcmVhdGVXcml0ZXIoY29uc3QgRmls
ZUVudHJ5KiwgUGFzc1JlZlB0cjxGaWxlV3JpdGVyQ2FsbGJhY2s+LCBQYXNzUmVmUHRyPEVycm9y
Q2FsbGJhY2s+KTsKLSAgICB2b2lkIGNyZWF0ZUZpbGUoY29uc3QgRmlsZUVudHJ5KiwgUGFzc1Jl
ZlB0cjxGaWxlQ2FsbGJhY2s+LCBQYXNzUmVmUHRyPEVycm9yQ2FsbGJhY2s+KTsKLQotICAgIC8v
IFNjaGVkdWxlIGEgY2FsbGJhY2suIFRoaXMgc2hvdWxkIG5vdCBjcm9zcyB0aHJlYWRzIChzaG91
bGQgYmUgY2FsbGVkIG9uIHRoZSBzYW1lIGNvbnRleHQgdGhyZWFkKS4KLSAgICAvLyBGSVhNRTog
bW92ZSB0aGlzIHRvIGEgbW9yZSBnZW5lcmljIHBsYWNlLgotICAgIHRlbXBsYXRlIDx0eXBlbmFt
ZSBDQiwgdHlwZW5hbWUgQ0JBcmc+Ci0gICAgc3RhdGljIHZvaWQgc2NoZWR1bGVDYWxsYmFjayhT
Y3JpcHRFeGVjdXRpb25Db250ZXh0KiwgUGFzc1JlZlB0cjxDQj4sIFBhc3NSZWZQdHI8Q0JBcmc+
KTsKLQotICAgIHRlbXBsYXRlIDx0eXBlbmFtZSBDQiwgdHlwZW5hbWUgQ0JBcmc+Ci0gICAgdm9p
ZCBzY2hlZHVsZUNhbGxiYWNrKFBhc3NSZWZQdHI8Q0I+IGNhbGxiYWNrLCBQYXNzUmVmUHRyPENC
QXJnPiBjYWxsYmFja0FyZykKLSAgICB7Ci0gICAgICAgIHNjaGVkdWxlQ2FsbGJhY2soc2NyaXB0
RXhlY3V0aW9uQ29udGV4dCgpLCBjYWxsYmFjaywgY2FsbGJhY2tBcmcpOwotICAgIH0KLQotcHJp
dmF0ZToKLSAgICBET01GaWxlU3lzdGVtKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqLCBjb25zdCBT
dHJpbmcmIG5hbWUsIFBhc3NPd25QdHI8QXN5bmNGaWxlU3lzdGVtPik7Ci0KLSAgICAvLyBBIGhl
bHBlciB0ZW1wbGF0ZSB0byBzY2hlZHVsZSBhIGNhbGxiYWNrIHRhc2suCi0gICAgdGVtcGxhdGUg
PHR5cGVuYW1lIENCLCB0eXBlbmFtZSBDQkFyZz4KLSAgICBjbGFzcyBEaXNwYXRjaENhbGxiYWNr
VGFzayA6IHB1YmxpYyBTY3JpcHRFeGVjdXRpb25Db250ZXh0OjpUYXNrIHsKLSAgICBwdWJsaWM6
Ci0gICAgICAgIERpc3BhdGNoQ2FsbGJhY2tUYXNrKFBhc3NSZWZQdHI8Q0I+IGNhbGxiYWNrLCBQ
YXNzUmVmUHRyPENCQXJnPiBhcmcpCi0gICAgICAgICAgICA6IG1fY2FsbGJhY2soY2FsbGJhY2sp
Ci0gICAgICAgICAgICAsIG1fY2FsbGJhY2tBcmcoYXJnKQotICAgICAgICB7Ci0gICAgICAgIH0K
LQotICAgICAgICB2aXJ0dWFsIHZvaWQgcGVyZm9ybVRhc2soU2NyaXB0RXhlY3V0aW9uQ29udGV4
dCopCi0gICAgICAgIHsKLSAgICAgICAgICAgIG1fY2FsbGJhY2stPmhhbmRsZUV2ZW50KG1fY2Fs
bGJhY2tBcmcuZ2V0KCkpOwotICAgICAgICB9Ci0KLSAgICBwcml2YXRlOgotICAgICAgICBSZWZQ
dHI8Q0I+IG1fY2FsbGJhY2s7Ci0gICAgICAgIFJlZlB0cjxDQkFyZz4gbV9jYWxsYmFja0FyZzsK
LSAgICB9OwotfTsKLQotdGVtcGxhdGUgPHR5cGVuYW1lIENCLCB0eXBlbmFtZSBDQkFyZz4KLXZv
aWQgRE9NRmlsZVN5c3RlbTo6c2NoZWR1bGVDYWxsYmFjayhTY3JpcHRFeGVjdXRpb25Db250ZXh0
KiBzY3JpcHRFeGVjdXRpb25Db250ZXh0LCBQYXNzUmVmUHRyPENCPiBjYWxsYmFjaywgUGFzc1Jl
ZlB0cjxDQkFyZz4gYXJnKQotewotICAgIEFTU0VSVChzY3JpcHRFeGVjdXRpb25Db250ZXh0LT5p
c0NvbnRleHRUaHJlYWQoKSk7Ci0gICAgaWYgKGNhbGxiYWNrKQotICAgICAgICBzY3JpcHRFeGVj
dXRpb25Db250ZXh0LT5wb3N0VGFzayhhZG9wdFB0cihuZXcgRGlzcGF0Y2hDYWxsYmFja1Rhc2s8
Q0IsIENCQXJnPihjYWxsYmFjaywgYXJnKSkpOwotfQotCi19IC8vIG5hbWVzcGFjZQotCi0jZW5k
aWYgLy8gRU5BQkxFKEZJTEVfU1lTVEVNKQotCi0jZW5kaWYgLy8gRE9NRmlsZVN5c3RlbV9oCklu
ZGV4OiBTb3VyY2UvV2ViQ29yZS9maWxlYXBpL0RPTUZpbGVTeXN0ZW0uaWRsCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9XZWJDb3JlL2ZpbGVhcGkvRE9NRmlsZVN5c3RlbS5pZGwJKHJldmlzaW9uIDEx
MDcyNikKKysrIFNvdXJjZS9XZWJDb3JlL2ZpbGVhcGkvRE9NRmlsZVN5c3RlbS5pZGwJKHdvcmtp
bmcgY29weSkKQEAgLTEsNDEgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMCBHb29n
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDExIEFwcGxl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNl
IGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNh
dGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9u
cyBhcmUKLSAqIG1ldDoKLSAqCi0gKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNv
ZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogICAgICogUmVk
aXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQotICog
Y29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lcgotICogaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVy
aWFscyBwcm92aWRlZCB3aXRoIHRoZQotICogZGlzdHJpYnV0aW9uLgotICogICAgICogTmVpdGhl
ciB0aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0cwotICogY29udHJp
YnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVk
IGZyb20KLSAqIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBl
cm1pc3Npb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJ
R0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUwotICogIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1Mg
T1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKLSAqIExJTUlURUQgVE8s
IFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZP
UgotICogQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNI
QUxMIFRIRSBDT1BZUklHSFQKLSAqIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9S
IEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAotICogU1BFQ0lBTCwgRVhFTVBMQVJZ
LCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAotICogTElNSVRF
RCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBP
RiBVU0UsCi0gKiBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhP
V0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKLSAqIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIg
SU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVH
TElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQot
ICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBP
RiBTVUNIIERBTUFHRS4KLSAqLwotCi1tb2R1bGUgc3RvcmFnZSB7Ci0gICAgaW50ZXJmYWNlIFsK
LSAgICAgICAgQ29uZGl0aW9uYWw9RklMRV9TWVNURU0sCi0gICAgICAgIEFjdGl2ZURPTU9iamVj
dCwKLSAgICAgICAgSlNOb1N0YXRpY1RhYmxlcwotICAgIF0gRE9NRmlsZVN5c3RlbSB7Ci0gICAg
ICAgIHJlYWRvbmx5IGF0dHJpYnV0ZSBET01TdHJpbmcgbmFtZTsKLSAgICAgICAgcmVhZG9ubHkg
YXR0cmlidXRlIERpcmVjdG9yeUVudHJ5IHJvb3Q7Ci0gICAgfTsKLX0KSW5kZXg6IFNvdXJjZS9X
ZWJDb3JlL2ZpbGVhcGkvRE9NRmlsZVN5c3RlbUJhc2UuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9XZWJDb3JlL2ZpbGVhcGkvRE9NRmlsZVN5c3RlbUJhc2UuY3BwCShyZXZpc2lvbiAxMTA3MjYp
CisrKyBTb3VyY2UvV2ViQ29yZS9maWxlYXBpL0RPTUZpbGVTeXN0ZW1CYXNlLmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtMSwyMDEgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMCBHb29n
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1
c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZp
Y2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRp
b25zIGFyZQotICogbWV0OgotICoKLSAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2Ug
Y29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAgICAgKiBS
ZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCi0g
KiBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyCi0gKiBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0
ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCi0gKiBkaXN0cmlidXRpb24uCi0gKiAgICAgKiBOZWl0
aGVyIHRoZSBuYW1lIG9mIEdvb2dsZSBJbmMuIG5vciB0aGUgbmFtZXMgb2YgaXRzCi0gKiBjb250
cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2
ZWQgZnJvbQotICogdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4g
cGVybWlzc2lvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZ
UklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCi0gKiAiQVMgSVMiIEFORCBBTlkgRVhQUkVT
UyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAotICogTElNSVRFRCBU
TywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1Mg
Rk9SCi0gKiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQg
U0hBTEwgVEhFIENPUFlSSUdIVAotICogT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBG
T1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCi0gKiBTUEVDSUFMLCBFWEVNUExB
UlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCi0gKiBMSU1J
VEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NT
IE9GIFVTRSwKLSAqIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikg
SE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQotICogVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhF
UiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xVRElORyBO
RUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNF
Ci0gKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZ
IE9GIFNVQ0ggREFNQUdFLgotICovCi0KLSNpbmNsdWRlICJjb25maWcuaCIKLSNpbmNsdWRlICJE
T01GaWxlU3lzdGVtQmFzZS5oIgotCi0jaWYgRU5BQkxFKEZJTEVfU1lTVEVNKQotCi0jaW5jbHVk
ZSAiRE9NRmlsZVBhdGguaCIKLSNpbmNsdWRlICJEaXJlY3RvcnlFbnRyeS5oIgotI2luY2x1ZGUg
IkRpcmVjdG9yeVJlYWRlckJhc2UuaCIKLSNpbmNsdWRlICJFbnRyaWVzQ2FsbGJhY2suaCIKLSNp
bmNsdWRlICJFbnRyeUFycmF5LmgiCi0jaW5jbHVkZSAiRW50cnlCYXNlLmgiCi0jaW5jbHVkZSAi
RW50cnlDYWxsYmFjay5oIgotI2luY2x1ZGUgIkVycm9yQ2FsbGJhY2suaCIKLSNpbmNsdWRlICJG
aWxlRXJyb3IuaCIKLSNpbmNsdWRlICJGaWxlU3lzdGVtQ2FsbGJhY2tzLmgiCi0jaW5jbHVkZSAi
TWV0YWRhdGFDYWxsYmFjay5oIgotI2luY2x1ZGUgIlNjcmlwdEV4ZWN1dGlvbkNvbnRleHQuaCIK
LSNpbmNsdWRlICJWb2lkQ2FsbGJhY2suaCIKLSNpbmNsdWRlIDx3dGYvT3duUHRyLmg+Ci0KLW5h
bWVzcGFjZSBXZWJDb3JlIHsKLQotRE9NRmlsZVN5c3RlbUJhc2U6OkRPTUZpbGVTeXN0ZW1CYXNl
KFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqIGNvbnRleHQsIGNvbnN0IFN0cmluZyYgbmFtZSwgUGFz
c093blB0cjxBc3luY0ZpbGVTeXN0ZW0+IGFzeW5jRmlsZVN5c3RlbSkKLSAgICA6IG1fY29udGV4
dChjb250ZXh0KQotICAgICwgbV9uYW1lKG5hbWUpCi0gICAgLCBtX2FzeW5jRmlsZVN5c3RlbShh
c3luY0ZpbGVTeXN0ZW0pCi17Ci19Ci0KLURPTUZpbGVTeXN0ZW1CYXNlOjp+RE9NRmlsZVN5c3Rl
bUJhc2UoKQotewotfQotCi1TZWN1cml0eU9yaWdpbiogRE9NRmlsZVN5c3RlbUJhc2U6OnNlY3Vy
aXR5T3JpZ2luKCkgY29uc3QKLXsKLSAgICByZXR1cm4gbV9jb250ZXh0LT5zZWN1cml0eU9yaWdp
bigpOwotfQotCi1ib29sIERPTUZpbGVTeXN0ZW1CYXNlOjpnZXRNZXRhZGF0YShjb25zdCBFbnRy
eUJhc2UqIGVudHJ5LCBQYXNzUmVmUHRyPE1ldGFkYXRhQ2FsbGJhY2s+IHN1Y2Nlc3NDYWxsYmFj
aywgUGFzc1JlZlB0cjxFcnJvckNhbGxiYWNrPiBlcnJvckNhbGxiYWNrKQotewotICAgIG1fYXN5
bmNGaWxlU3lzdGVtLT5yZWFkTWV0YWRhdGEoZW50cnktPmZ1bGxQYXRoKCksIE1ldGFkYXRhQ2Fs
bGJhY2tzOjpjcmVhdGUoc3VjY2Vzc0NhbGxiYWNrLCBlcnJvckNhbGxiYWNrKSk7Ci0gICAgcmV0
dXJuIHRydWU7Ci19Ci0KLXN0YXRpYyBib29sIHZlcmlmeUFuZEdldERlc3RpbmF0aW9uUGF0aEZv
ckNvcHlPck1vdmUoY29uc3QgRW50cnlCYXNlKiBzb3VyY2UsIEVudHJ5QmFzZSogcGFyZW50LCBj
b25zdCBTdHJpbmcmIG5ld05hbWUsIFN0cmluZyYgZGVzdGluYXRpb25QYXRoKQotewotICAgIEFT
U0VSVChzb3VyY2UpOwotCi0gICAgaWYgKCFwYXJlbnQgfHwgIXBhcmVudC0+aXNEaXJlY3Rvcnko
KSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgaWYgKCFuZXdOYW1lLmlzRW1wdHkoKSAm
JiAhRE9NRmlsZVBhdGg6OmlzVmFsaWROYW1lKG5ld05hbWUpKQotICAgICAgICByZXR1cm4gZmFs
c2U7Ci0KLSAgICAvLyBJdCBpcyBhbiBlcnJvciB0byB0cnkgdG8gY29weSBvciBtb3ZlIGFuIGVu
dHJ5IGluc2lkZSBpdHNlbGYgYXQgYW55IGRlcHRoIGlmIGl0IGlzIGEgZGlyZWN0b3J5LgotICAg
IGlmIChzb3VyY2UtPmlzRGlyZWN0b3J5KCkgJiYgRE9NRmlsZVBhdGg6OmlzUGFyZW50T2Yoc291
cmNlLT5mdWxsUGF0aCgpLCBwYXJlbnQtPmZ1bGxQYXRoKCkpKQotICAgICAgICByZXR1cm4gZmFs
c2U7Ci0KLSAgICAvLyBJdCBpcyBhbiBlcnJvciB0byBjb3B5IG9yIG1vdmUgYW4gZW50cnkgaW50
byBpdHMgcGFyZW50IGlmIGEgbmFtZSBkaWZmZXJlbnQgZnJvbSBpdHMgY3VycmVudCBvbmUgaXNu
J3QgcHJvdmlkZWQuCi0gICAgaWYgKChuZXdOYW1lLmlzRW1wdHkoKSB8fCBzb3VyY2UtPm5hbWUo
KSA9PSBuZXdOYW1lKSAmJiBET01GaWxlUGF0aDo6Z2V0RGlyZWN0b3J5KHNvdXJjZS0+ZnVsbFBh
dGgoKSkgPT0gcGFyZW50LT5mdWxsUGF0aCgpKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAg
ICBkZXN0aW5hdGlvblBhdGggPSBwYXJlbnQtPmZ1bGxQYXRoKCk7Ci0gICAgaWYgKCFuZXdOYW1l
LmlzRW1wdHkoKSkKLSAgICAgICAgZGVzdGluYXRpb25QYXRoID0gRE9NRmlsZVBhdGg6OmFwcGVu
ZChkZXN0aW5hdGlvblBhdGgsIG5ld05hbWUpOwotICAgIGVsc2UKLSAgICAgICAgZGVzdGluYXRp
b25QYXRoID0gRE9NRmlsZVBhdGg6OmFwcGVuZChkZXN0aW5hdGlvblBhdGgsIHNvdXJjZS0+bmFt
ZSgpKTsKLQotICAgIHJldHVybiB0cnVlOwotfQotCi1zdGF0aWMgYm9vbCBwYXRoVG9BYnNvbHV0
ZVBhdGgoQXN5bmNGaWxlU3lzdGVtOjpUeXBlIHR5cGUsIGNvbnN0IEVudHJ5QmFzZSogYmFzZSwg
U3RyaW5nIHBhdGgsIFN0cmluZyYgYWJzb2x1dGVQYXRoKQotewotICAgIEFTU0VSVChiYXNlKTsK
LQotICAgIGlmICghRE9NRmlsZVBhdGg6OmlzQWJzb2x1dGUocGF0aCkpCi0gICAgICAgIHBhdGgg
PSBET01GaWxlUGF0aDo6YXBwZW5kKGJhc2UtPmZ1bGxQYXRoKCksIHBhdGgpOwotICAgIGFic29s
dXRlUGF0aCA9IERPTUZpbGVQYXRoOjpyZW1vdmVFeHRyYVBhcmVudFJlZmVyZW5jZXMocGF0aCk7
Ci0KLSAgICBpZiAoKHR5cGUgPT0gQXN5bmNGaWxlU3lzdGVtOjpUZW1wb3JhcnkgfHwgdHlwZSA9
PSBBc3luY0ZpbGVTeXN0ZW06OlBlcnNpc3RlbnQpICYmICFET01GaWxlUGF0aDo6aXNWYWxpZFBh
dGgoYWJzb2x1dGVQYXRoKSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIHJldHVybiB0cnVl
OwotfQotCi1ib29sIERPTUZpbGVTeXN0ZW1CYXNlOjptb3ZlKGNvbnN0IEVudHJ5QmFzZSogc291
cmNlLCBFbnRyeUJhc2UqIHBhcmVudCwgY29uc3QgU3RyaW5nJiBuZXdOYW1lLCBQYXNzUmVmUHRy
PEVudHJ5Q2FsbGJhY2s+IHN1Y2Nlc3NDYWxsYmFjaywgUGFzc1JlZlB0cjxFcnJvckNhbGxiYWNr
PiBlcnJvckNhbGxiYWNrKQotewotICAgIFN0cmluZyBkZXN0aW5hdGlvblBhdGg7Ci0gICAgaWYg
KCF2ZXJpZnlBbmRHZXREZXN0aW5hdGlvblBhdGhGb3JDb3B5T3JNb3ZlKHNvdXJjZSwgcGFyZW50
LCBuZXdOYW1lLCBkZXN0aW5hdGlvblBhdGgpKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAg
ICBtX2FzeW5jRmlsZVN5c3RlbS0+bW92ZShzb3VyY2UtPmZ1bGxQYXRoKCksIGRlc3RpbmF0aW9u
UGF0aCwgRW50cnlDYWxsYmFja3M6OmNyZWF0ZShzdWNjZXNzQ2FsbGJhY2ssIGVycm9yQ2FsbGJh
Y2ssIHRoaXMsIGRlc3RpbmF0aW9uUGF0aCwgc291cmNlLT5pc0RpcmVjdG9yeSgpKSk7Ci0gICAg
cmV0dXJuIHRydWU7Ci19Ci0KLWJvb2wgRE9NRmlsZVN5c3RlbUJhc2U6OmNvcHkoY29uc3QgRW50
cnlCYXNlKiBzb3VyY2UsIEVudHJ5QmFzZSogcGFyZW50LCBjb25zdCBTdHJpbmcmIG5ld05hbWUs
IFBhc3NSZWZQdHI8RW50cnlDYWxsYmFjaz4gc3VjY2Vzc0NhbGxiYWNrLCBQYXNzUmVmUHRyPEVy
cm9yQ2FsbGJhY2s+IGVycm9yQ2FsbGJhY2spCi17Ci0gICAgU3RyaW5nIGRlc3RpbmF0aW9uUGF0
aDsKLSAgICBpZiAoIXZlcmlmeUFuZEdldERlc3RpbmF0aW9uUGF0aEZvckNvcHlPck1vdmUoc291
cmNlLCBwYXJlbnQsIG5ld05hbWUsIGRlc3RpbmF0aW9uUGF0aCkpCi0gICAgICAgIHJldHVybiBm
YWxzZTsKLQotICAgIG1fYXN5bmNGaWxlU3lzdGVtLT5jb3B5KHNvdXJjZS0+ZnVsbFBhdGgoKSwg
ZGVzdGluYXRpb25QYXRoLCBFbnRyeUNhbGxiYWNrczo6Y3JlYXRlKHN1Y2Nlc3NDYWxsYmFjaywg
ZXJyb3JDYWxsYmFjaywgdGhpcywgZGVzdGluYXRpb25QYXRoLCBzb3VyY2UtPmlzRGlyZWN0b3J5
KCkpKTsKLSAgICByZXR1cm4gdHJ1ZTsKLX0KLQotYm9vbCBET01GaWxlU3lzdGVtQmFzZTo6cmVt
b3ZlKGNvbnN0IEVudHJ5QmFzZSogZW50cnksIFBhc3NSZWZQdHI8Vm9pZENhbGxiYWNrPiBzdWNj
ZXNzQ2FsbGJhY2ssIFBhc3NSZWZQdHI8RXJyb3JDYWxsYmFjaz4gZXJyb3JDYWxsYmFjaykKLXsK
LSAgICBBU1NFUlQoZW50cnkpOwotICAgIC8vIFdlIGRvbid0IGFsbG93IGNhbGxpbmcgcmVtb3Zl
KCkgb24gdGhlIHJvb3QgZGlyZWN0b3J5LgotICAgIGlmIChlbnRyeS0+ZnVsbFBhdGgoKSA9PSBT
dHJpbmcoRE9NRmlsZVBhdGg6OnJvb3QpKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgbV9h
c3luY0ZpbGVTeXN0ZW0tPnJlbW92ZShlbnRyeS0+ZnVsbFBhdGgoKSwgVm9pZENhbGxiYWNrczo6
Y3JlYXRlKHN1Y2Nlc3NDYWxsYmFjaywgZXJyb3JDYWxsYmFjaykpOwotICAgIHJldHVybiB0cnVl
OwotfQotCi1ib29sIERPTUZpbGVTeXN0ZW1CYXNlOjpyZW1vdmVSZWN1cnNpdmVseShjb25zdCBF
bnRyeUJhc2UqIGVudHJ5LCBQYXNzUmVmUHRyPFZvaWRDYWxsYmFjaz4gc3VjY2Vzc0NhbGxiYWNr
LCBQYXNzUmVmUHRyPEVycm9yQ2FsbGJhY2s+IGVycm9yQ2FsbGJhY2spCi17Ci0gICAgQVNTRVJU
KGVudHJ5ICYmIGVudHJ5LT5pc0RpcmVjdG9yeSgpKTsKLSAgICAvLyBXZSBkb24ndCBhbGxvdyBj
YWxsaW5nIHJlbW92ZSgpIG9uIHRoZSByb290IGRpcmVjdG9yeS4KLSAgICBpZiAoZW50cnktPmZ1
bGxQYXRoKCkgPT0gU3RyaW5nKERPTUZpbGVQYXRoOjpyb290KSkKLSAgICAgICAgcmV0dXJuIGZh
bHNlOwotICAgIG1fYXN5bmNGaWxlU3lzdGVtLT5yZW1vdmVSZWN1cnNpdmVseShlbnRyeS0+ZnVs
bFBhdGgoKSwgVm9pZENhbGxiYWNrczo6Y3JlYXRlKHN1Y2Nlc3NDYWxsYmFjaywgZXJyb3JDYWxs
YmFjaykpOwotICAgIHJldHVybiB0cnVlOwotfQotCi1ib29sIERPTUZpbGVTeXN0ZW1CYXNlOjpn
ZXRQYXJlbnQoY29uc3QgRW50cnlCYXNlKiBlbnRyeSwgUGFzc1JlZlB0cjxFbnRyeUNhbGxiYWNr
PiBzdWNjZXNzQ2FsbGJhY2ssIFBhc3NSZWZQdHI8RXJyb3JDYWxsYmFjaz4gZXJyb3JDYWxsYmFj
aykKLXsKLSAgICBBU1NFUlQoZW50cnkpOwotICAgIFN0cmluZyBwYXRoID0gRE9NRmlsZVBhdGg6
OmdldERpcmVjdG9yeShlbnRyeS0+ZnVsbFBhdGgoKSk7Ci0KLSAgICBtX2FzeW5jRmlsZVN5c3Rl
bS0+ZGlyZWN0b3J5RXhpc3RzKHBhdGgsIEVudHJ5Q2FsbGJhY2tzOjpjcmVhdGUoc3VjY2Vzc0Nh
bGxiYWNrLCBlcnJvckNhbGxiYWNrLCB0aGlzLCBwYXRoLCB0cnVlKSk7Ci0gICAgcmV0dXJuIHRy
dWU7Ci19Ci0KLWJvb2wgRE9NRmlsZVN5c3RlbUJhc2U6OmdldEZpbGUoY29uc3QgRW50cnlCYXNl
KiBlbnRyeSwgY29uc3QgU3RyaW5nJiBwYXRoLCBQYXNzUmVmUHRyPFdlYktpdEZsYWdzPiBmbGFn
cywgUGFzc1JlZlB0cjxFbnRyeUNhbGxiYWNrPiBzdWNjZXNzQ2FsbGJhY2ssIFBhc3NSZWZQdHI8
RXJyb3JDYWxsYmFjaz4gZXJyb3JDYWxsYmFjaykKLXsKLSAgICBTdHJpbmcgYWJzb2x1dGVQYXRo
OwotICAgIGlmICghcGF0aFRvQWJzb2x1dGVQYXRoKG1fYXN5bmNGaWxlU3lzdGVtLT50eXBlKCks
IGVudHJ5LCBwYXRoLCBhYnNvbHV0ZVBhdGgpKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAg
ICBPd25QdHI8RW50cnlDYWxsYmFja3M+IGNhbGxiYWNrcyA9IEVudHJ5Q2FsbGJhY2tzOjpjcmVh
dGUoc3VjY2Vzc0NhbGxiYWNrLCBlcnJvckNhbGxiYWNrLCB0aGlzLCBhYnNvbHV0ZVBhdGgsIGZh
bHNlKTsKLSAgICBpZiAoZmxhZ3MgJiYgZmxhZ3MtPmlzQ3JlYXRlKCkpCi0gICAgICAgIG1fYXN5
bmNGaWxlU3lzdGVtLT5jcmVhdGVGaWxlKGFic29sdXRlUGF0aCwgZmxhZ3MtPmlzRXhjbHVzaXZl
KCksIGNhbGxiYWNrcy5yZWxlYXNlKCkpOwotICAgIGVsc2UKLSAgICAgICAgbV9hc3luY0ZpbGVT
eXN0ZW0tPmZpbGVFeGlzdHMoYWJzb2x1dGVQYXRoLCBjYWxsYmFja3MucmVsZWFzZSgpKTsKLSAg
ICByZXR1cm4gdHJ1ZTsKLX0KLQotYm9vbCBET01GaWxlU3lzdGVtQmFzZTo6Z2V0RGlyZWN0b3J5
KGNvbnN0IEVudHJ5QmFzZSogZW50cnksIGNvbnN0IFN0cmluZyYgcGF0aCwgUGFzc1JlZlB0cjxX
ZWJLaXRGbGFncz4gZmxhZ3MsIFBhc3NSZWZQdHI8RW50cnlDYWxsYmFjaz4gc3VjY2Vzc0NhbGxi
YWNrLCBQYXNzUmVmUHRyPEVycm9yQ2FsbGJhY2s+IGVycm9yQ2FsbGJhY2spCi17Ci0gICAgU3Ry
aW5nIGFic29sdXRlUGF0aDsKLSAgICBpZiAoIXBhdGhUb0Fic29sdXRlUGF0aChtX2FzeW5jRmls
ZVN5c3RlbS0+dHlwZSgpLCBlbnRyeSwgcGF0aCwgYWJzb2x1dGVQYXRoKSkKLSAgICAgICAgcmV0
dXJuIGZhbHNlOwotCi0gICAgT3duUHRyPEVudHJ5Q2FsbGJhY2tzPiBjYWxsYmFja3MgPSBFbnRy
eUNhbGxiYWNrczo6Y3JlYXRlKHN1Y2Nlc3NDYWxsYmFjaywgZXJyb3JDYWxsYmFjaywgdGhpcywg
YWJzb2x1dGVQYXRoLCB0cnVlKTsKLSAgICBpZiAoZmxhZ3MgJiYgZmxhZ3MtPmlzQ3JlYXRlKCkp
Ci0gICAgICAgIG1fYXN5bmNGaWxlU3lzdGVtLT5jcmVhdGVEaXJlY3RvcnkoYWJzb2x1dGVQYXRo
LCBmbGFncy0+aXNFeGNsdXNpdmUoKSwgY2FsbGJhY2tzLnJlbGVhc2UoKSk7Ci0gICAgZWxzZQot
ICAgICAgICBtX2FzeW5jRmlsZVN5c3RlbS0+ZGlyZWN0b3J5RXhpc3RzKGFic29sdXRlUGF0aCwg
Y2FsbGJhY2tzLnJlbGVhc2UoKSk7Ci0gICAgcmV0dXJuIHRydWU7Ci19Ci0KLWJvb2wgRE9NRmls
ZVN5c3RlbUJhc2U6OnJlYWREaXJlY3RvcnkoUGFzc1JlZlB0cjxEaXJlY3RvcnlSZWFkZXJCYXNl
PiByZWFkZXIsIGNvbnN0IFN0cmluZyYgcGF0aCwgUGFzc1JlZlB0cjxFbnRyaWVzQ2FsbGJhY2s+
IHN1Y2Nlc3NDYWxsYmFjaywgUGFzc1JlZlB0cjxFcnJvckNhbGxiYWNrPiBlcnJvckNhbGxiYWNr
KQotewotICAgIEFTU0VSVChET01GaWxlUGF0aDo6aXNBYnNvbHV0ZShwYXRoKSk7Ci0gICAgbV9h
c3luY0ZpbGVTeXN0ZW0tPnJlYWREaXJlY3RvcnkocGF0aCwgRW50cmllc0NhbGxiYWNrczo6Y3Jl
YXRlKHN1Y2Nlc3NDYWxsYmFjaywgZXJyb3JDYWxsYmFjaywgcmVhZGVyLCBwYXRoKSk7Ci0gICAg
cmV0dXJuIHRydWU7Ci19Ci0KLX0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKLQotI2VuZGlmIC8vIEVO
QUJMRShGSUxFX1NZU1RFTSkKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2ZpbGVhcGkvRE9NRmlsZVN5
c3RlbUJhc2UuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9maWxlYXBpL0RPTUZpbGVT
eXN0ZW1CYXNlLmgJKHJldmlzaW9uIDExMDcyNikKKysrIFNvdXJjZS9XZWJDb3JlL2ZpbGVhcGkv
RE9NRmlsZVN5c3RlbUJhc2UuaAkod29ya2luZyBjb3B5KQpAQCAtMSw5NCArMCwwIEBACi0vKgot
ICogQ29weXJpZ2h0IChDKSAyMDEwIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0g
KgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywg
d2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQg
dGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCi0gKiBtZXQ6Ci0gKgotICogICAgICog
UmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5
cmlnaHQKLSAqIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lci4KLSAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBt
dXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKLSAqIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIKLSAqIGluIHRoZSBkb2N1
bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKLSAqIGRp
c3RyaWJ1dGlvbi4KLSAqICAgICAqIE5laXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xlIEluYy4gbm9y
IHRoZSBuYW1lcyBvZiBpdHMKLSAqIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNl
IG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tCi0gKiB0aGlzIHNvZnR3YXJlIHdpdGhv
dXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgotICoKLSAqIFRISVMgU09GVFdB
UkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMK
LSAqICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVE
SU5HLCBCVVQgTk9UCi0gKiBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1F
UkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IKLSAqIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFS
RSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCi0gKiBPV05FUiBP
UiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURF
TlRBTCwKLSAqIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJ
TkNMVURJTkcsIEJVVCBOT1QKLSAqIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRV
VEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAotICogREFUQSwgT1IgUFJPRklUUzsg
T1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCi0gKiBU
SEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZ
LCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5H
IElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLSAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYg
QURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotI2lmbmRl
ZiBET01GaWxlU3lzdGVtQmFzZV9oCi0jZGVmaW5lIERPTUZpbGVTeXN0ZW1CYXNlX2gKLQotI2lm
IEVOQUJMRShGSUxFX1NZU1RFTSkKLQotI2luY2x1ZGUgIkFzeW5jRmlsZVN5c3RlbS5oIgotI2lu
Y2x1ZGUgIldlYktpdEZsYWdzLmgiCi0jaW5jbHVkZSAiUGxhdGZvcm1TdHJpbmcuaCIKLSNpbmNs
dWRlIDx3dGYvUGFzc1JlZlB0ci5oPgotI2luY2x1ZGUgPHd0Zi9SZWZDb3VudGVkLmg+Ci0KLW5h
bWVzcGFjZSBXZWJDb3JlIHsKLQotY2xhc3MgRGlyZWN0b3J5RW50cnk7Ci1jbGFzcyBEaXJlY3Rv
cnlSZWFkZXJCYXNlOwotY2xhc3MgRW50cmllc0NhbGxiYWNrOwotY2xhc3MgRW50cnlCYXNlOwot
Y2xhc3MgRW50cnlDYWxsYmFjazsKLWNsYXNzIEVycm9yQ2FsbGJhY2s7Ci1jbGFzcyBLVVJMOwot
Y2xhc3MgTWV0YWRhdGFDYWxsYmFjazsKLWNsYXNzIFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQ7Ci1j
bGFzcyBTZWN1cml0eU9yaWdpbjsKLWNsYXNzIFZvaWRDYWxsYmFjazsKLQotLy8gQSBjb21tb24g
YmFzZSBjbGFzcyBmb3IgRE9NRmlsZVN5c3RlbSBhbmQgRE9NRmlsZVN5c3RlbVN5bmMuCi1jbGFz
cyBET01GaWxlU3lzdGVtQmFzZSA6IHB1YmxpYyBSZWZDb3VudGVkPERPTUZpbGVTeXN0ZW1CYXNl
PiB7Ci1wdWJsaWM6Ci0gICAgc3RhdGljIFBhc3NSZWZQdHI8RE9NRmlsZVN5c3RlbUJhc2U+IGNy
ZWF0ZShTY3JpcHRFeGVjdXRpb25Db250ZXh0KiBjb250ZXh0LCBjb25zdCBTdHJpbmcmIG5hbWUs
IFBhc3NPd25QdHI8QXN5bmNGaWxlU3lzdGVtPiBhc3luY0ZpbGVTeXN0ZW0pCi0gICAgewotICAg
ICAgICByZXR1cm4gYWRvcHRSZWYobmV3IERPTUZpbGVTeXN0ZW1CYXNlKGNvbnRleHQsIG5hbWUs
IGFzeW5jRmlsZVN5c3RlbSkpOwotICAgIH0KLSAgICB2aXJ0dWFsIH5ET01GaWxlU3lzdGVtQmFz
ZSgpOwotCi0gICAgY29uc3QgU3RyaW5nJiBuYW1lKCkgY29uc3QgeyByZXR1cm4gbV9uYW1lOyB9
Ci0gICAgQXN5bmNGaWxlU3lzdGVtKiBhc3luY0ZpbGVTeXN0ZW0oKSBjb25zdCB7IHJldHVybiBt
X2FzeW5jRmlsZVN5c3RlbS5nZXQoKTsgfQotICAgIFNlY3VyaXR5T3JpZ2luKiBzZWN1cml0eU9y
aWdpbigpIGNvbnN0OwotCi0gICAgLy8gQWN0dWFsIEZpbGVTeXN0ZW0gQVBJIGltcGxlbWVudGF0
aW9ucy4gIEFsbCB0aGUgdmFsaWRpdHkgY2hlY2tzIG9uIHZpcnR1YWwgcGF0aHMgYXJlIGRvbmUg
YXQgdGhpcyBsZXZlbC4KLSAgICAvLyBUaGV5IHJldHVybiBmYWxzZSBmb3IgaW1tZWRpYXRlIGVy
cm9ycyB0aGF0IGRvbid0IGludm9sdmUgbG93ZXIgQXN5bmNGaWxlU3lzdGVtIGxheWVyIChlLmcu
IGZvciBuYW1lIHZhbGlkYXRpb24gZXJyb3JzKS4gIE90aGVyd2lzZSB0aGV5IHJldHVybiB0cnVl
IChidXQgbGF0ZXIgbWF5IGNhbGwgYmFjayB3aXRoIGFuIHJ1bnRpbWUgZXJyb3IpLgotICAgIGJv
b2wgZ2V0TWV0YWRhdGEoY29uc3QgRW50cnlCYXNlKiwgUGFzc1JlZlB0cjxNZXRhZGF0YUNhbGxi
YWNrPiwgUGFzc1JlZlB0cjxFcnJvckNhbGxiYWNrPik7Ci0gICAgYm9vbCBtb3ZlKGNvbnN0IEVu
dHJ5QmFzZSogc291cmNlLCBFbnRyeUJhc2UqIHBhcmVudCwgY29uc3QgU3RyaW5nJiBuYW1lLCBQ
YXNzUmVmUHRyPEVudHJ5Q2FsbGJhY2s+LCBQYXNzUmVmUHRyPEVycm9yQ2FsbGJhY2s+KTsKLSAg
ICBib29sIGNvcHkoY29uc3QgRW50cnlCYXNlKiBzb3VyY2UsIEVudHJ5QmFzZSogcGFyZW50LCBj
b25zdCBTdHJpbmcmIG5hbWUsIFBhc3NSZWZQdHI8RW50cnlDYWxsYmFjaz4sIFBhc3NSZWZQdHI8
RXJyb3JDYWxsYmFjaz4pOwotICAgIGJvb2wgcmVtb3ZlKGNvbnN0IEVudHJ5QmFzZSosIFBhc3NS
ZWZQdHI8Vm9pZENhbGxiYWNrPiwgUGFzc1JlZlB0cjxFcnJvckNhbGxiYWNrPik7Ci0gICAgYm9v
bCByZW1vdmVSZWN1cnNpdmVseShjb25zdCBFbnRyeUJhc2UqLCBQYXNzUmVmUHRyPFZvaWRDYWxs
YmFjaz4sIFBhc3NSZWZQdHI8RXJyb3JDYWxsYmFjaz4pOwotICAgIGJvb2wgZ2V0UGFyZW50KGNv
bnN0IEVudHJ5QmFzZSosIFBhc3NSZWZQdHI8RW50cnlDYWxsYmFjaz4sIFBhc3NSZWZQdHI8RXJy
b3JDYWxsYmFjaz4pOwotICAgIGJvb2wgZ2V0RmlsZShjb25zdCBFbnRyeUJhc2UqLCBjb25zdCBT
dHJpbmcmIHBhdGgsIFBhc3NSZWZQdHI8V2ViS2l0RmxhZ3M+LCBQYXNzUmVmUHRyPEVudHJ5Q2Fs
bGJhY2s+LCBQYXNzUmVmUHRyPEVycm9yQ2FsbGJhY2s+KTsKLSAgICBib29sIGdldERpcmVjdG9y
eShjb25zdCBFbnRyeUJhc2UqLCBjb25zdCBTdHJpbmcmIHBhdGgsIFBhc3NSZWZQdHI8V2ViS2l0
RmxhZ3M+LCBQYXNzUmVmUHRyPEVudHJ5Q2FsbGJhY2s+LCBQYXNzUmVmUHRyPEVycm9yQ2FsbGJh
Y2s+KTsKLSAgICBib29sIHJlYWREaXJlY3RvcnkoUGFzc1JlZlB0cjxEaXJlY3RvcnlSZWFkZXJC
YXNlPiwgY29uc3QgU3RyaW5nJiBwYXRoLCBQYXNzUmVmUHRyPEVudHJpZXNDYWxsYmFjaz4sIFBh
c3NSZWZQdHI8RXJyb3JDYWxsYmFjaz4pOwotCi1wcm90ZWN0ZWQ6Ci0gICAgRE9NRmlsZVN5c3Rl
bUJhc2UoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCosIGNvbnN0IFN0cmluZyYgbmFtZSwgUGFzc093
blB0cjxBc3luY0ZpbGVTeXN0ZW0+KTsKLSAgICBmcmllbmQgY2xhc3MgRE9NRmlsZVN5c3RlbVN5
bmM7Ci0KLSAgICBTY3JpcHRFeGVjdXRpb25Db250ZXh0KiBtX2NvbnRleHQ7Ci0gICAgU3RyaW5n
IG1fbmFtZTsKLSAgICBtdXRhYmxlIE93blB0cjxBc3luY0ZpbGVTeXN0ZW0+IG1fYXN5bmNGaWxl
U3lzdGVtOwotfTsKLQotfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQotCi0jZW5kaWYgLy8gRU5BQkxF
KEZJTEVfU1lTVEVNKQotCi0jZW5kaWYgLy8gRE9NRmlsZVN5c3RlbUJhc2VfaApJbmRleDogU291
cmNlL1dlYkNvcmUvZmlsZWFwaS9ET01GaWxlU3lzdGVtU3luYy5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1dlYkNvcmUvZmlsZWFwaS9ET01GaWxlU3lzdGVtU3luYy5jcHAJKHJldmlzaW9uIDEx
MDcyNikKKysrIFNvdXJjZS9XZWJDb3JlL2ZpbGVhcGkvRE9NRmlsZVN5c3RlbVN5bmMuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC0xLDI0MyArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEw
IEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24g
YW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBt
b2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNv
bmRpdGlvbnMgYXJlCi0gKiBtZXQ6Ci0gKgotICogICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNv
dXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqICAg
ICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJv
dmUKLSAqIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIKLSAqIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhl
ciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKLSAqIGRpc3RyaWJ1dGlvbi4KLSAqICAgICAq
IE5laXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xlIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMKLSAq
IGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMg
ZGVyaXZlZCBmcm9tCi0gKiB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3Jp
dHRlbiBwZXJtaXNzaW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhF
IENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKLSAqICJBUyBJUyIgQU5EIEFOWSBF
WFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCi0gKiBMSU1J
VEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklU
TkVTUyBGT1IKLSAqIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBF
VkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCi0gKiBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElB
QkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKLSAqIFNQRUNJQUwsIEVY
RU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKLSAq
IExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7
IExPU1MgT0YgVVNFLAotICogREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBU
SU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCi0gKiBUSEVPUlkgT0YgTElBQklMSVRZLCBX
SEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVE
SU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRI
RSBVU0UKLSAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lC
SUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotI2luY2x1ZGUgImNvbmZpZy5oIgotI2luY2x1
ZGUgIkRPTUZpbGVTeXN0ZW1TeW5jLmgiCi0KLSNpZiBFTkFCTEUoRklMRV9TWVNURU0pCi0KLSNp
bmNsdWRlICJBc3luY0ZpbGVTeXN0ZW0uaCIKLSNpbmNsdWRlICJBc3luY0ZpbGVXcml0ZXIuaCIK
LSNpbmNsdWRlICJET01GaWxlUGF0aC5oIgotI2luY2x1ZGUgIkRpcmVjdG9yeUVudHJ5U3luYy5o
IgotI2luY2x1ZGUgIkVycm9yQ2FsbGJhY2suaCIKLSNpbmNsdWRlICJGaWxlLmgiCi0jaW5jbHVk
ZSAiRmlsZUVudHJ5U3luYy5oIgotI2luY2x1ZGUgIkZpbGVFcnJvci5oIgotI2luY2x1ZGUgIkZp
bGVFeGNlcHRpb24uaCIKLSNpbmNsdWRlICJGaWxlTWV0YWRhdGEuaCIKLSNpbmNsdWRlICJGaWxl
U3lzdGVtQ2FsbGJhY2tzLmgiCi0jaW5jbHVkZSAiRmlsZVdyaXRlckJhc2VDYWxsYmFjay5oIgot
I2luY2x1ZGUgIkZpbGVXcml0ZXJTeW5jLmgiCi0KLW5hbWVzcGFjZSBXZWJDb3JlIHsKLQotY2xh
c3MgRmlsZVdyaXRlckJhc2U7Ci0KLVBhc3NSZWZQdHI8RE9NRmlsZVN5c3RlbVN5bmM+IERPTUZp
bGVTeXN0ZW1TeW5jOjpjcmVhdGUoRE9NRmlsZVN5c3RlbUJhc2UqIGZpbGVTeXN0ZW0pCi17Ci0g
ICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBET01GaWxlU3lzdGVtU3luYyhmaWxlU3lzdGVtLT5tX2Nv
bnRleHQsIGZpbGVTeXN0ZW0tPm1fbmFtZSwgZmlsZVN5c3RlbS0+bV9hc3luY0ZpbGVTeXN0ZW0u
cmVsZWFzZSgpKSk7Ci19Ci0KLURPTUZpbGVTeXN0ZW1TeW5jOjpET01GaWxlU3lzdGVtU3luYyhT
Y3JpcHRFeGVjdXRpb25Db250ZXh0KiBjb250ZXh0LCBjb25zdCBTdHJpbmcmIG5hbWUsIFBhc3NP
d25QdHI8QXN5bmNGaWxlU3lzdGVtPiBhc3luY0ZpbGVTeXN0ZW0pCi0gICAgOiBET01GaWxlU3lz
dGVtQmFzZShjb250ZXh0LCBuYW1lLCBhc3luY0ZpbGVTeXN0ZW0pCi17Ci19Ci0KLURPTUZpbGVT
eXN0ZW1TeW5jOjp+RE9NRmlsZVN5c3RlbVN5bmMoKQotewotfQotCi1QYXNzUmVmUHRyPERpcmVj
dG9yeUVudHJ5U3luYz4gRE9NRmlsZVN5c3RlbVN5bmM6OnJvb3QoKQotewotICAgIHJldHVybiBE
aXJlY3RvcnlFbnRyeVN5bmM6OmNyZWF0ZSh0aGlzLCBET01GaWxlUGF0aDo6cm9vdCk7Ci19Ci0K
LW5hbWVzcGFjZSB7Ci0KLWNsYXNzIENyZWF0ZUZpbGVIZWxwZXIgOiBwdWJsaWMgQXN5bmNGaWxl
U3lzdGVtQ2FsbGJhY2tzIHsKLXB1YmxpYzoKLSAgICBjbGFzcyBDcmVhdGVGaWxlUmVzdWx0IDog
cHVibGljIFJlZkNvdW50ZWQ8Q3JlYXRlRmlsZVJlc3VsdD4gewotICAgICAgcHVibGljOgotICAg
ICAgICBzdGF0aWMgUGFzc1JlZlB0cjxDcmVhdGVGaWxlUmVzdWx0PiBjcmVhdGUoKQotICAgICAg
ICB7Ci0gICAgICAgICAgICByZXR1cm4gYWRvcHRSZWYobmV3IENyZWF0ZUZpbGVSZXN1bHQoKSk7
Ci0gICAgICAgIH0KLQotICAgICAgICBib29sIG1fZmFpbGVkOwotICAgICAgICBpbnQgbV9jb2Rl
OwotICAgICAgICBSZWZQdHI8RmlsZT4gbV9maWxlOwotCi0gICAgICBwcml2YXRlOgotICAgICAg
ICBDcmVhdGVGaWxlUmVzdWx0KCkKLSAgICAgICAgICAgIDogbV9mYWlsZWQoZmFsc2UpCi0gICAg
ICAgICAgICAsIG1fY29kZSgwKQotICAgICAgICB7Ci0gICAgICAgIH0KLQotICAgICAgICB+Q3Jl
YXRlRmlsZVJlc3VsdCgpCi0gICAgICAgIHsKLSAgICAgICAgfQotICAgICAgICBmcmllbmQgY2xh
c3MgV1RGOjpSZWZDb3VudGVkPENyZWF0ZUZpbGVSZXN1bHQ+OwotICAgIH07Ci0KLSAgICBzdGF0
aWMgUGFzc093blB0cjxDcmVhdGVGaWxlSGVscGVyPiBjcmVhdGUoUGFzc1JlZlB0cjxDcmVhdGVG
aWxlUmVzdWx0PiByZXN1bHQsIGNvbnN0IFN0cmluZyYgbmFtZSkKLSAgICB7Ci0gICAgICAgIHJl
dHVybiBhZG9wdFB0cihuZXcgQ3JlYXRlRmlsZUhlbHBlcihyZXN1bHQsIG5hbWUpKTsKLSAgICB9
Ci0KLSAgICB2aXJ0dWFsIHZvaWQgZGlkRmFpbChpbnQgY29kZSkKLSAgICB7Ci0gICAgICAgIG1f
cmVzdWx0LT5tX2ZhaWxlZCA9IHRydWU7Ci0gICAgICAgIG1fcmVzdWx0LT5tX2NvZGUgPSBjb2Rl
OwotICAgIH0KLQotICAgIHZpcnR1YWwgfkNyZWF0ZUZpbGVIZWxwZXIoKQotICAgIHsKLSAgICB9
Ci0KLSAgICB2b2lkIGRpZFJlYWRNZXRhZGF0YShjb25zdCBGaWxlTWV0YWRhdGEmIG1ldGFkYXRh
KQotICAgIHsKLSAgICAgICAgbV9yZXN1bHQtPm1fZmlsZSA9IEZpbGU6OmNyZWF0ZVdpdGhOYW1l
KG1ldGFkYXRhLnBsYXRmb3JtUGF0aCwgbV9uYW1lKTsKLSAgICB9Ci1wcml2YXRlOgotICAgIENy
ZWF0ZUZpbGVIZWxwZXIoUGFzc1JlZlB0cjxDcmVhdGVGaWxlUmVzdWx0PiByZXN1bHQsIGNvbnN0
IFN0cmluZyYgbmFtZSkKLSAgICAgICAgOiBtX3Jlc3VsdChyZXN1bHQpCi0gICAgICAgICwgbV9u
YW1lKG5hbWUpCi0gICAgewotICAgIH0KLQotICAgIFJlZlB0cjxDcmVhdGVGaWxlUmVzdWx0PiBt
X3Jlc3VsdDsKLSAgICBTdHJpbmcgbV9uYW1lOwotfTsKLQotfSAvLyBuYW1lc3BhY2UKLQotUGFz
c1JlZlB0cjxGaWxlPiBET01GaWxlU3lzdGVtU3luYzo6Y3JlYXRlRmlsZShjb25zdCBGaWxlRW50
cnlTeW5jKiBmaWxlRW50cnksIEV4Y2VwdGlvbkNvZGUmIGVjKQotewotICAgIGVjID0gMDsKLSAg
ICBSZWZQdHI8Q3JlYXRlRmlsZUhlbHBlcjo6Q3JlYXRlRmlsZVJlc3VsdD4gcmVzdWx0KENyZWF0
ZUZpbGVIZWxwZXI6OkNyZWF0ZUZpbGVSZXN1bHQ6OmNyZWF0ZSgpKTsKLSAgICBtX2FzeW5jRmls
ZVN5c3RlbS0+Y3JlYXRlU25hcHNob3RGaWxlQW5kUmVhZE1ldGFkYXRhKGZpbGVFbnRyeS0+ZnVs
bFBhdGgoKSwgQ3JlYXRlRmlsZUhlbHBlcjo6Y3JlYXRlKHJlc3VsdCwgZmlsZUVudHJ5LT5uYW1l
KCkpKTsKLSAgICBpZiAoIW1fYXN5bmNGaWxlU3lzdGVtLT53YWl0Rm9yT3BlcmF0aW9uVG9Db21w
bGV0ZSgpKSB7Ci0gICAgICAgIGVjID0gRmlsZUV4Y2VwdGlvbjo6QUJPUlRfRVJSOwotICAgICAg
ICByZXR1cm4gMDsKLSAgICB9Ci0gICAgaWYgKHJlc3VsdC0+bV9mYWlsZWQpIHsKLSAgICAgICAg
ZWMgPSByZXN1bHQtPm1fY29kZTsKLSAgICAgICAgcmV0dXJuIDA7Ci0gICAgfQotICAgIHJldHVy
biByZXN1bHQtPm1fZmlsZTsKLX0KLQotbmFtZXNwYWNlIHsKLQotY2xhc3MgUmVjZWl2ZUZpbGVX
cml0ZXJDYWxsYmFjayA6IHB1YmxpYyBGaWxlV3JpdGVyQmFzZUNhbGxiYWNrIHsKLXB1YmxpYzoK
LSAgICBzdGF0aWMgUGFzc1JlZlB0cjxSZWNlaXZlRmlsZVdyaXRlckNhbGxiYWNrPiBjcmVhdGUo
KQotICAgIHsKLSAgICAgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBSZWNlaXZlRmlsZVdyaXRlckNh
bGxiYWNrKCkpOwotICAgIH0KLQotICAgIGJvb2wgaGFuZGxlRXZlbnQoRmlsZVdyaXRlckJhc2Uq
IGZpbGVXcml0ZXJCYXNlKQotICAgIHsKLSNpZm5kZWYgTkRFQlVHCi0gICAgICAgIG1fZmlsZVdy
aXRlckJhc2UgPSBmaWxlV3JpdGVyQmFzZTsKLSNlbHNlCi0gICAgICAgIEFTU0VSVF9VTlVTRUQo
ZmlsZVdyaXRlckJhc2UsIGZpbGVXcml0ZXJCYXNlKTsKLSNlbmRpZgotICAgICAgICByZXR1cm4g
dHJ1ZTsKLSAgICB9Ci0KLSNpZm5kZWYgTkRFQlVHCi0gICAgRmlsZVdyaXRlckJhc2UqIGZpbGVX
cml0ZXJCYXNlKCkKLSAgICB7Ci0gICAgICAgIHJldHVybiBtX2ZpbGVXcml0ZXJCYXNlOwotICAg
IH0KLSNlbmRpZgotCi1wcml2YXRlOgotICAgIFJlY2VpdmVGaWxlV3JpdGVyQ2FsbGJhY2soKQot
I2lmbmRlZiBOREVCVUcKLSAgICAgICAgOiBtX2ZpbGVXcml0ZXJCYXNlKDApCi0jZW5kaWYKLSAg
ICB7Ci0gICAgfQotCi0jaWZuZGVmIE5ERUJVRwotICAgIEZpbGVXcml0ZXJCYXNlKiBtX2ZpbGVX
cml0ZXJCYXNlOwotI2VuZGlmCi19OwotCi1jbGFzcyBMb2NhbEVycm9yQ2FsbGJhY2sgOiBwdWJs
aWMgRXJyb3JDYWxsYmFjayB7Ci1wdWJsaWM6Ci0gICAgc3RhdGljIFBhc3NSZWZQdHI8TG9jYWxF
cnJvckNhbGxiYWNrPiBjcmVhdGUoKQotICAgIHsKLSAgICAgICAgcmV0dXJuIGFkb3B0UmVmKG5l
dyBMb2NhbEVycm9yQ2FsbGJhY2soKSk7Ci0gICAgfQotCi0gICAgYm9vbCBoYW5kbGVFdmVudChG
aWxlRXJyb3IqIGVycm9yKQotICAgIHsKLSAgICAgICAgbV9lcnJvciA9IGVycm9yOwotICAgICAg
ICByZXR1cm4gdHJ1ZTsKLSAgICB9Ci0KLSAgICBGaWxlRXJyb3IqIGVycm9yKCkKLSAgICB7Ci0g
ICAgICAgIHJldHVybiBtX2Vycm9yLmdldCgpOwotICAgIH0KLQotcHJpdmF0ZToKLSAgICBMb2Nh
bEVycm9yQ2FsbGJhY2soKQotICAgIHsKLSAgICB9Ci0gICAgUmVmUHRyPEZpbGVFcnJvcj4gbV9l
cnJvcjsKLX07Ci0KLX0KLQotUGFzc1JlZlB0cjxGaWxlV3JpdGVyU3luYz4gRE9NRmlsZVN5c3Rl
bVN5bmM6OmNyZWF0ZVdyaXRlcihjb25zdCBGaWxlRW50cnlTeW5jKiBmaWxlRW50cnksIEV4Y2Vw
dGlvbkNvZGUmIGVjKQotewotICAgIEFTU0VSVChmaWxlRW50cnkpOwotICAgIGVjID0gMDsKLQot
Ci0gICAgUmVmUHRyPEZpbGVXcml0ZXJTeW5jPiBmaWxlV3JpdGVyID0gRmlsZVdyaXRlclN5bmM6
OmNyZWF0ZSgpOwotICAgIFJlZlB0cjxSZWNlaXZlRmlsZVdyaXRlckNhbGxiYWNrPiBzdWNjZXNz
Q2FsbGJhY2sgPSBSZWNlaXZlRmlsZVdyaXRlckNhbGxiYWNrOjpjcmVhdGUoKTsKLSAgICBSZWZQ
dHI8TG9jYWxFcnJvckNhbGxiYWNrPiBlcnJvckNhbGxiYWNrID0gTG9jYWxFcnJvckNhbGxiYWNr
OjpjcmVhdGUoKTsKLQotICAgIE93blB0cjxGaWxlV3JpdGVyQmFzZUNhbGxiYWNrcz4gY2FsbGJh
Y2tzID0gRmlsZVdyaXRlckJhc2VDYWxsYmFja3M6OmNyZWF0ZShmaWxlV3JpdGVyLCBzdWNjZXNz
Q2FsbGJhY2ssIGVycm9yQ2FsbGJhY2spOwotICAgIG1fYXN5bmNGaWxlU3lzdGVtLT5jcmVhdGVX
cml0ZXIoZmlsZVdyaXRlci5nZXQoKSwgZmlsZUVudHJ5LT5mdWxsUGF0aCgpLCBjYWxsYmFja3Mu
cmVsZWFzZSgpKTsKLSAgICBpZiAoIW1fYXN5bmNGaWxlU3lzdGVtLT53YWl0Rm9yT3BlcmF0aW9u
VG9Db21wbGV0ZSgpKSB7Ci0gICAgICAgIGVjID0gRmlsZUV4Y2VwdGlvbjo6QUJPUlRfRVJSOwot
ICAgICAgICByZXR1cm4gMDsKLSAgICB9Ci0gICAgaWYgKGVycm9yQ2FsbGJhY2stPmVycm9yKCkp
IHsKLSAgICAgICAgQVNTRVJUKCFzdWNjZXNzQ2FsbGJhY2stPmZpbGVXcml0ZXJCYXNlKCkpOwot
ICAgICAgICBlYyA9IEZpbGVFeGNlcHRpb246OkVycm9yQ29kZVRvRXhjZXB0aW9uQ29kZShlcnJv
ckNhbGxiYWNrLT5lcnJvcigpLT5jb2RlKCkpOwotICAgICAgICByZXR1cm4gMDsKLSAgICB9Ci0g
ICAgQVNTRVJUKHN1Y2Nlc3NDYWxsYmFjay0+ZmlsZVdyaXRlckJhc2UoKSk7Ci0gICAgQVNTRVJU
KHN0YXRpY19jYXN0PEZpbGVXcml0ZXJTeW5jKj4oc3VjY2Vzc0NhbGxiYWNrLT5maWxlV3JpdGVy
QmFzZSgpKSA9PSBmaWxlV3JpdGVyLmdldCgpKTsKLSAgICByZXR1cm4gZmlsZVdyaXRlcjsKLX0K
LQotfQotCi0jZW5kaWYgLy8gRU5BQkxFKEZJTEVfU1lTVEVNKQpJbmRleDogU291cmNlL1dlYkNv
cmUvZmlsZWFwaS9ET01GaWxlU3lzdGVtU3luYy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJD
b3JlL2ZpbGVhcGkvRE9NRmlsZVN5c3RlbVN5bmMuaAkocmV2aXNpb24gMTEwNzI2KQorKysgU291
cmNlL1dlYkNvcmUvZmlsZWFwaS9ET01GaWxlU3lzdGVtU3luYy5oCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDcxICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTAgR29vZ2xlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJj
ZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJl
IHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUKLSAq
IG1ldDoKLSAqCi0gKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCBy
ZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogICAgICogUmVkaXN0cmlidXRp
b25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQotICogY29weXJpZ2h0
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lcgotICogaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92
aWRlZCB3aXRoIHRoZQotICogZGlzdHJpYnV0aW9uLgotICogICAgICogTmVpdGhlciB0aGUgbmFt
ZSBvZiBHb29nbGUgSW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0cwotICogY29udHJpYnV0b3JzIG1h
eSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20KLSAq
IHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24u
Ci0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERF
UlMgQU5EIENPTlRSSUJVVE9SUwotICogIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElF
RCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKLSAqIExJTUlURUQgVE8sIFRIRSBJTVBM
SUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgotICogQSBQ
QVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBD
T1BZUklHSFQKLSAqIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJF
Q1QsIElORElSRUNULCBJTkNJREVOVEFMLAotICogU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05T
RVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAotICogTElNSVRFRCBUTywgUFJP
Q1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCi0g
KiBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FV
U0VEIEFORCBPTiBBTlkKLSAqIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJB
Q1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBP
UiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotICogT0YgVEhJ
UyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERB
TUFHRS4KLSAqLwotCi0jaWZuZGVmIERPTUZpbGVTeXN0ZW1TeW5jX2gKLSNkZWZpbmUgRE9NRmls
ZVN5c3RlbVN5bmNfaAotCi0jaWYgRU5BQkxFKEZJTEVfU1lTVEVNKQotCi0jaW5jbHVkZSAiRE9N
RmlsZVN5c3RlbUJhc2UuaCIKLQotbmFtZXNwYWNlIFdlYkNvcmUgewotCi1jbGFzcyBEaXJlY3Rv
cnlFbnRyeVN5bmM7Ci1jbGFzcyBGaWxlOwotY2xhc3MgRmlsZUVudHJ5U3luYzsKLWNsYXNzIEZp
bGVXcml0ZXJTeW5jOwotCi10eXBlZGVmIGludCBFeGNlcHRpb25Db2RlOwotCi1jbGFzcyBET01G
aWxlU3lzdGVtU3luYyA6IHB1YmxpYyBET01GaWxlU3lzdGVtQmFzZSB7Ci1wdWJsaWM6Ci0gICAg
c3RhdGljIFBhc3NSZWZQdHI8RE9NRmlsZVN5c3RlbVN5bmM+IGNyZWF0ZShTY3JpcHRFeGVjdXRp
b25Db250ZXh0KiBjb250ZXh0LCBjb25zdCBTdHJpbmcmIG5hbWUsIFBhc3NPd25QdHI8QXN5bmNG
aWxlU3lzdGVtPiBhc3luY0ZpbGVTeXN0ZW0pCi0gICAgewotICAgICAgICByZXR1cm4gYWRvcHRS
ZWYobmV3IERPTUZpbGVTeXN0ZW1TeW5jKGNvbnRleHQsIG5hbWUsIGFzeW5jRmlsZVN5c3RlbSkp
OwotICAgIH0KLQotICAgIHN0YXRpYyBQYXNzUmVmUHRyPERPTUZpbGVTeXN0ZW1TeW5jPiBjcmVh
dGUoRE9NRmlsZVN5c3RlbUJhc2UqKTsKLQotICAgIHZpcnR1YWwgfkRPTUZpbGVTeXN0ZW1TeW5j
KCk7Ci0KLSAgICBQYXNzUmVmUHRyPERpcmVjdG9yeUVudHJ5U3luYz4gcm9vdCgpOwotCi0gICAg
UGFzc1JlZlB0cjxGaWxlPiBjcmVhdGVGaWxlKGNvbnN0IEZpbGVFbnRyeVN5bmMqLCBFeGNlcHRp
b25Db2RlJik7Ci0gICAgUGFzc1JlZlB0cjxGaWxlV3JpdGVyU3luYz4gY3JlYXRlV3JpdGVyKGNv
bnN0IEZpbGVFbnRyeVN5bmMqLCBFeGNlcHRpb25Db2RlJik7Ci0KLXByaXZhdGU6Ci0gICAgRE9N
RmlsZVN5c3RlbVN5bmMoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCosIGNvbnN0IFN0cmluZyYgbmFt
ZSwgUGFzc093blB0cjxBc3luY0ZpbGVTeXN0ZW0+KTsKLX07Ci0KLX0KLQotI2VuZGlmIC8vIEVO
QUJMRShGSUxFX1NZU1RFTSkKLQotI2VuZGlmIC8vIERPTUZpbGVTeXN0ZW1TeW5jX2gKSW5kZXg6
IFNvdXJjZS9XZWJDb3JlL2ZpbGVhcGkvRE9NRmlsZVN5c3RlbVN5bmMuaWRsCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9XZWJDb3JlL2ZpbGVhcGkvRE9NRmlsZVN5c3RlbVN5bmMuaWRsCShyZXZpc2lv
biAxMTA3MjYpCisrKyBTb3VyY2UvV2ViQ29yZS9maWxlYXBpL0RPTUZpbGVTeXN0ZW1TeW5jLmlk
bAkod29ya2luZyBjb3B5KQpAQCAtMSwzOSArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAy
MDEwIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRp
b24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0g
KiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5n
IGNvbmRpdGlvbnMgYXJlCi0gKiBtZXQ6Ci0gKgotICogICAgICogUmVkaXN0cmlidXRpb25zIG9m
IHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAq
ICAgICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUg
YWJvdmUKLSAqIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIKLSAqIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBv
dGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKLSAqIGRpc3RyaWJ1dGlvbi4KLSAqICAg
ICAqIE5laXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xlIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMK
LSAqIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVj
dHMgZGVyaXZlZCBmcm9tCi0gKiB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Ig
d3JpdHRlbiBwZXJtaXNzaW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkg
VEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKLSAqICJBUyBJUyIgQU5EIEFO
WSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCi0gKiBM
SU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQg
RklUTkVTUyBGT1IKLSAqIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBO
TyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCi0gKiBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUg
TElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKLSAqIFNQRUNJQUws
IEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QK
LSAqIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklD
RVM7IExPU1MgT0YgVVNFLAotICogREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJS
VVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCi0gKiBUSEVPUlkgT0YgTElBQklMSVRZ
LCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5D
TFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9G
IFRIRSBVU0UKLSAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9T
U0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotbW9kdWxlIHN0b3JhZ2UgewotICAgIGlu
dGVyZmFjZSBbCi0gICAgICAgIENvbmRpdGlvbmFsPUZJTEVfU1lTVEVNLAotICAgICAgICBKU05v
U3RhdGljVGFibGVzCi0gICAgXSBET01GaWxlU3lzdGVtU3luYyB7Ci0gICAgICAgIHJlYWRvbmx5
IGF0dHJpYnV0ZSBET01TdHJpbmcgbmFtZTsKLSAgICAgICAgcmVhZG9ubHkgYXR0cmlidXRlIERp
cmVjdG9yeUVudHJ5U3luYyByb290OwotICAgIH07Ci19Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>132077</attachid>
            <date>2012-03-15 10:40:22 -0700</date>
            <delta_ts>2012-03-20 00:56:17 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-81149-20120315134018.patch</filename>
            <type>text/plain</type>
            <size>119696</size>
            <attacher name="Mark Pilgrim (Google)">pilgrim</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDExMDg2MSkKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDQxIEBACisyMDEyLTAzLTE1ICBNYXJrIFBp
bGdyaW0gIDxwaWxncmltQGNocm9taXVtLm9yZz4KKworICAgICAgICBNb3ZlIERPTUZpbGVQYXRo
IGFuZCBET01GaWxlU3lzdGVtKiB0byBNb2R1bGVzL2ZpbGVzeXN0ZW0vCisgICAgICAgIGh0dHBz
Oi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD04MTE0OQorCisgICAgICAgIFJldmll
d2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIE5vIG5ldyB0ZXN0cywgYWxsIGV4aXN0
aW5nIHRlc3RzIHBhc3MuCisKKyAgICAgICAgKiBDTWFrZUxpc3RzLnR4dDoKKyAgICAgICAgKiBE
ZXJpdmVkU291cmNlcy5tYWtlOgorICAgICAgICAqIERlcml2ZWRTb3VyY2VzLnByaToKKyAgICAg
ICAgKiBHTlVtYWtlZmlsZS5saXN0LmFtOgorICAgICAgICAqIE1vZHVsZXMvZmlsZXN5c3RlbS9E
T01GaWxlUGF0aC5jcHA6IENvcGllZCBmcm9tIFNvdXJjZS9XZWJDb3JlL2ZpbGVhcGkvRE9NRmls
ZVBhdGguY3BwLgorICAgICAgICAqIE1vZHVsZXMvZmlsZXN5c3RlbS9ET01GaWxlUGF0aC5oOiBD
b3BpZWQgZnJvbSBTb3VyY2UvV2ViQ29yZS9maWxlYXBpL0RPTUZpbGVQYXRoLmguCisgICAgICAg
ICogTW9kdWxlcy9maWxlc3lzdGVtL0RPTUZpbGVTeXN0ZW0uY3BwOiBDb3BpZWQgZnJvbSBTb3Vy
Y2UvV2ViQ29yZS9maWxlYXBpL0RPTUZpbGVTeXN0ZW0uY3BwLgorICAgICAgICAqIE1vZHVsZXMv
ZmlsZXN5c3RlbS9ET01GaWxlU3lzdGVtLmg6IENvcGllZCBmcm9tIFNvdXJjZS9XZWJDb3JlL2Zp
bGVhcGkvRE9NRmlsZVN5c3RlbS5oLgorICAgICAgICAqIE1vZHVsZXMvZmlsZXN5c3RlbS9ET01G
aWxlU3lzdGVtLmlkbDogQ29waWVkIGZyb20gU291cmNlL1dlYkNvcmUvZmlsZWFwaS9ET01GaWxl
U3lzdGVtLmlkbC4KKyAgICAgICAgKiBNb2R1bGVzL2ZpbGVzeXN0ZW0vRE9NRmlsZVN5c3RlbUJh
c2UuY3BwOiBDb3BpZWQgZnJvbSBTb3VyY2UvV2ViQ29yZS9maWxlYXBpL0RPTUZpbGVTeXN0ZW1C
YXNlLmNwcC4KKyAgICAgICAgKiBNb2R1bGVzL2ZpbGVzeXN0ZW0vRE9NRmlsZVN5c3RlbUJhc2Uu
aDogQ29waWVkIGZyb20gU291cmNlL1dlYkNvcmUvZmlsZWFwaS9ET01GaWxlU3lzdGVtQmFzZS5o
LgorICAgICAgICAqIE1vZHVsZXMvZmlsZXN5c3RlbS9ET01GaWxlU3lzdGVtU3luYy5jcHA6IENv
cGllZCBmcm9tIFNvdXJjZS9XZWJDb3JlL2ZpbGVhcGkvRE9NRmlsZVN5c3RlbVN5bmMuY3BwLgor
ICAgICAgICAqIE1vZHVsZXMvZmlsZXN5c3RlbS9ET01GaWxlU3lzdGVtU3luYy5oOiBDb3BpZWQg
ZnJvbSBTb3VyY2UvV2ViQ29yZS9maWxlYXBpL0RPTUZpbGVTeXN0ZW1TeW5jLmguCisgICAgICAg
ICogTW9kdWxlcy9maWxlc3lzdGVtL0RPTUZpbGVTeXN0ZW1TeW5jLmlkbDogQ29waWVkIGZyb20g
U291cmNlL1dlYkNvcmUvZmlsZWFwaS9ET01GaWxlU3lzdGVtU3luYy5pZGwuCisgICAgICAgICog
VGFyZ2V0LnByaToKKyAgICAgICAgKiBXZWJDb3JlLmd5cGk6CisgICAgICAgICogV2ViQ29yZS52
Y3Byb2ovV2ViQ29yZS52Y3Byb2o6CisgICAgICAgICogV2ViQ29yZS54Y29kZXByb2ovcHJvamVj
dC5wYnhwcm9qOgorICAgICAgICAqIGZpbGVhcGkvRE9NRmlsZVBhdGguY3BwOiBSZW1vdmVkLgor
ICAgICAgICAqIGZpbGVhcGkvRE9NRmlsZVBhdGguaDogUmVtb3ZlZC4KKyAgICAgICAgKiBmaWxl
YXBpL0RPTUZpbGVTeXN0ZW0uY3BwOiBSZW1vdmVkLgorICAgICAgICAqIGZpbGVhcGkvRE9NRmls
ZVN5c3RlbS5oOiBSZW1vdmVkLgorICAgICAgICAqIGZpbGVhcGkvRE9NRmlsZVN5c3RlbS5pZGw6
IFJlbW92ZWQuCisgICAgICAgICogZmlsZWFwaS9ET01GaWxlU3lzdGVtQmFzZS5jcHA6IFJlbW92
ZWQuCisgICAgICAgICogZmlsZWFwaS9ET01GaWxlU3lzdGVtQmFzZS5oOiBSZW1vdmVkLgorICAg
ICAgICAqIGZpbGVhcGkvRE9NRmlsZVN5c3RlbVN5bmMuY3BwOiBSZW1vdmVkLgorICAgICAgICAq
IGZpbGVhcGkvRE9NRmlsZVN5c3RlbVN5bmMuaDogUmVtb3ZlZC4KKyAgICAgICAgKiBmaWxlYXBp
L0RPTUZpbGVTeXN0ZW1TeW5jLmlkbDogUmVtb3ZlZC4KKwogMjAxMi0wMy0xNSAgS2V2aW4gT2xs
aXZpZXIgIDxrZXZpbm9AdGhlb2xsaXZpZXJzLmNvbT4KIAogICAgICAgICBbd3hdIFVucmV2aWV3
ZWQuIEJ1aWxkIGZpeGVzIGZvciBNYWMgYW5kIERPTSBiaW5kaW5ncy4KSW5kZXg6IFNvdXJjZS9X
ZWJDb3JlL0NNYWtlTGlzdHMudHh0Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL0NNYWtl
TGlzdHMudHh0CShyZXZpc2lvbiAxMTA4NTYpCisrKyBTb3VyY2UvV2ViQ29yZS9DTWFrZUxpc3Rz
LnR4dAkod29ya2luZyBjb3B5KQpAQCAtMTYzNSwxNCArMTYzNSwxNCBAQCBFTkRJRiAoKQogCiBp
ZiAoRU5BQkxFX0ZJTEVfU1lTVEVNKQogICAgIExJU1QoQVBQRU5EIFdlYkNvcmVfU09VUkNFUwor
ICAgICAgICBNb2R1bGVzL2ZpbGVzeXN0ZW0vRE9NRmlsZVBhdGguY3BwCisgICAgICAgIE1vZHVs
ZXMvZmlsZXN5c3RlbS9ET01GaWxlU3lzdGVtLmNwcAorICAgICAgICBNb2R1bGVzL2ZpbGVzeXN0
ZW0vRE9NRmlsZVN5c3RlbUJhc2UuY3BwCisgICAgICAgIE1vZHVsZXMvZmlsZXN5c3RlbS9ET01G
aWxlU3lzdGVtU3luYy5jcHAKICAgICAgICAgTW9kdWxlcy9maWxlc3lzdGVtL0RpcmVjdG9yeUVu
dHJ5LmNwcAogICAgICAgICBNb2R1bGVzL2ZpbGVzeXN0ZW0vRGlyZWN0b3J5RW50cnlTeW5jLmNw
cAogICAgICAgICBNb2R1bGVzL2ZpbGVzeXN0ZW0vRGlyZWN0b3J5UmVhZGVyLmNwcAogICAgICAg
ICBNb2R1bGVzL2ZpbGVzeXN0ZW0vRGlyZWN0b3J5UmVhZGVyU3luYy5jcHAKLSAgICAgICAgZmls
ZWFwaS9ET01GaWxlUGF0aC5jcHAKLSAgICAgICAgZmlsZWFwaS9ET01GaWxlU3lzdGVtLmNwcAot
ICAgICAgICBmaWxlYXBpL0RPTUZpbGVTeXN0ZW1CYXNlLmNwcAotICAgICAgICBmaWxlYXBpL0RP
TUZpbGVTeXN0ZW1TeW5jLmNwcAogICAgICAgICBmaWxlYXBpL0RPTVdpbmRvd0ZpbGVTeXN0ZW0u
Y3BwCiAgICAgICAgIGZpbGVhcGkvRW50cnkuY3BwCiAgICAgICAgIGZpbGVhcGkvRW50cnlBcnJh
eS5jcHAKQEAgLTE2NjAsMTIgKzE2NjAsMTIgQEAgaWYgKEVOQUJMRV9GSUxFX1NZU1RFTSkKICAg
ICAgICAgcGxhdGZvcm0vQXN5bmNGaWxlU3lzdGVtLmNwcAogICAgICkKICAgICBMSVNUKEFQUEVO
RCBXZWJDb3JlX0lETF9GSUxFUworICAgICAgICBNb2R1bGVzL2ZpbGVzeXN0ZW0vRE9NRmlsZVN5
c3RlbS5pZGwKKyAgICAgICAgTW9kdWxlcy9maWxlc3lzdGVtL0RPTUZpbGVTeXN0ZW1TeW5jLmlk
bAogICAgICAgICBNb2R1bGVzL2ZpbGVzeXN0ZW0vRGlyZWN0b3J5RW50cnkuaWRsCiAgICAgICAg
IE1vZHVsZXMvZmlsZXN5c3RlbS9EaXJlY3RvcnlFbnRyeVN5bmMuaWRsCiAgICAgICAgIE1vZHVs
ZXMvZmlsZXN5c3RlbS9EaXJlY3RvcnlSZWFkZXIuaWRsCiAgICAgICAgIE1vZHVsZXMvZmlsZXN5
c3RlbS9EaXJlY3RvcnlSZWFkZXJTeW5jLmlkbAotICAgICAgICBmaWxlYXBpL0RPTUZpbGVTeXN0
ZW0uaWRsCi0gICAgICAgIGZpbGVhcGkvRE9NRmlsZVN5c3RlbVN5bmMuaWRsCiAgICAgICAgIGZp
bGVhcGkvRE9NV2luZG93RmlsZVN5c3RlbS5pZGwKICAgICAgICAgTW9kdWxlcy9maWxlc3lzdGVt
L0VudHJpZXNDYWxsYmFjay5pZGwKICAgICAgICAgZmlsZWFwaS9FbnRyeS5pZGwKSW5kZXg6IFNv
dXJjZS9XZWJDb3JlL0Rlcml2ZWRTb3VyY2VzLm1ha2UKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dl
YkNvcmUvRGVyaXZlZFNvdXJjZXMubWFrZQkocmV2aXNpb24gMTEwODU2KQorKysgU291cmNlL1dl
YkNvcmUvRGVyaXZlZFNvdXJjZXMubWFrZQkod29ya2luZyBjb3B5KQpAQCAtMTk1LDggKzE5NSw4
IEBAIEJJTkRJTkdfSURMUyA9IFwKICAgICAkKFdlYkNvcmUpL2RvbS9XZWJLaXRUcmFuc2l0aW9u
RXZlbnQuaWRsIFwKICAgICAkKFdlYkNvcmUpL2RvbS9XaGVlbEV2ZW50LmlkbCBcCiAgICAgJChX
ZWJDb3JlKS9maWxlYXBpL0Jsb2IuaWRsIFwKLSAgICAkKFdlYkNvcmUpL2ZpbGVhcGkvRE9NRmls
ZVN5c3RlbS5pZGwgXAotICAgICQoV2ViQ29yZSkvZmlsZWFwaS9ET01GaWxlU3lzdGVtU3luYy5p
ZGwgXAorICAgICQoV2ViQ29yZSkvTW9kdWxlcy9maWxlc3lzdGVtL0RPTUZpbGVTeXN0ZW0uaWRs
IFwKKyAgICAkKFdlYkNvcmUpL01vZHVsZXMvZmlsZXN5c3RlbS9ET01GaWxlU3lzdGVtU3luYy5p
ZGwgXAogICAgICQoV2ViQ29yZSkvZmlsZWFwaS9ET01XaW5kb3dGaWxlU3lzdGVtLmlkbCBcCiAg
ICAgJChXZWJDb3JlKS9Nb2R1bGVzL2ZpbGVzeXN0ZW0vRGlyZWN0b3J5RW50cnkuaWRsIFwKICAg
ICAkKFdlYkNvcmUpL01vZHVsZXMvZmlsZXN5c3RlbS9EaXJlY3RvcnlFbnRyeVN5bmMuaWRsIFwK
SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0Rlcml2ZWRTb3VyY2VzLnByaQo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV2ViQ29yZS9EZXJpdmVkU291cmNlcy5wcmkJKHJldmlzaW9uIDExMDg1NikKKysrIFNv
dXJjZS9XZWJDb3JlL0Rlcml2ZWRTb3VyY2VzLnByaQkod29ya2luZyBjb3B5KQpAQCAtMjE2LDEy
ICsyMTYsMTIgQEAgSURMX0JJTkRJTkdTICs9IFwKICAgICAkJFBXRC9kb20vV2ViS2l0VHJhbnNp
dGlvbkV2ZW50LmlkbCBcCiAgICAgJCRQV0QvZG9tL1doZWVsRXZlbnQuaWRsIFwKICAgICAkJFBX
RC9maWxlYXBpL0Jsb2IuaWRsIFwKKyAgICAkJFBXRC9Nb2R1bGVzL2ZpbGVzeXN0ZW0vRE9NRmls
ZVN5c3RlbS5pZGwgXAorICAgICQkUFdEL01vZHVsZXMvZmlsZXN5c3RlbS9ET01GaWxlU3lzdGVt
U3luYy5pZGwgXAogICAgICQkUFdEL01vZHVsZXMvZmlsZXN5c3RlbS9EaXJlY3RvcnlFbnRyeS5p
ZGwgXAogICAgICQkUFdEL01vZHVsZXMvZmlsZXN5c3RlbS9EaXJlY3RvcnlFbnRyeVN5bmMuaWRs
IFwKICAgICAkJFBXRC9Nb2R1bGVzL2ZpbGVzeXN0ZW0vRGlyZWN0b3J5UmVhZGVyLmlkbCBcCiAg
ICAgJCRQV0QvTW9kdWxlcy9maWxlc3lzdGVtL0RpcmVjdG9yeVJlYWRlclN5bmMuaWRsIFwKLSAg
ICAkJFBXRC9maWxlYXBpL0RPTUZpbGVTeXN0ZW0uaWRsIFwKLSAgICAkJFBXRC9maWxlYXBpL0RP
TUZpbGVTeXN0ZW1TeW5jLmlkbCBcCiAgICAgJCRQV0QvZmlsZWFwaS9ET01XaW5kb3dGaWxlU3lz
dGVtLmlkbCBcCiAgICAgJCRQV0QvTW9kdWxlcy9maWxlc3lzdGVtL0VudHJpZXNDYWxsYmFjay5p
ZGwgXAogICAgICQkUFdEL2ZpbGVhcGkvRW50cnkuaWRsIFwKSW5kZXg6IFNvdXJjZS9XZWJDb3Jl
L0dOVW1ha2VmaWxlLmxpc3QuYW0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvR05VbWFr
ZWZpbGUubGlzdC5hbQkocmV2aXNpb24gMTEwODU2KQorKysgU291cmNlL1dlYkNvcmUvR05VbWFr
ZWZpbGUubGlzdC5hbQkod29ya2luZyBjb3B5KQpAQCAtMjA0Miw2ICsyMDQyLDE0IEBAIHdlYmNv
cmVfc291cmNlcyArPSBcCiAJU291cmNlL1dlYkNvcmUvZmlsZWFwaS9CbG9iLmggXAogCVNvdXJj
ZS9XZWJDb3JlL2ZpbGVhcGkvQmxvYlVSTC5jcHAgXAogCVNvdXJjZS9XZWJDb3JlL2ZpbGVhcGkv
QmxvYlVSTC5oIFwKKwlTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2ZpbGVzeXN0ZW0vRE9NRmlsZVBh
dGguY3BwIFwKKwlTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2ZpbGVzeXN0ZW0vRE9NRmlsZVBhdGgu
aCBcCisJU291cmNlL1dlYkNvcmUvTW9kdWxlcy9maWxlc3lzdGVtL0RPTUZpbGVTeXN0ZW0uY3Bw
IFwKKwlTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2ZpbGVzeXN0ZW0vRE9NRmlsZVN5c3RlbS5oIFwK
KwlTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2ZpbGVzeXN0ZW0vRE9NRmlsZVN5c3RlbUJhc2UuY3Bw
IFwKKwlTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2ZpbGVzeXN0ZW0vRE9NRmlsZVN5c3RlbUJhc2Uu
aCBcCisJU291cmNlL1dlYkNvcmUvTW9kdWxlcy9maWxlc3lzdGVtL0RPTUZpbGVTeXN0ZW1TeW5j
LmNwcCBcCisJU291cmNlL1dlYkNvcmUvTW9kdWxlcy9maWxlc3lzdGVtL0RPTUZpbGVTeXN0ZW1T
eW5jLmggXAogCVNvdXJjZS9XZWJDb3JlL01vZHVsZXMvZmlsZXN5c3RlbS9EaXJlY3RvcnlFbnRy
eS5jcHAgXAogCVNvdXJjZS9XZWJDb3JlL01vZHVsZXMvZmlsZXN5c3RlbS9EaXJlY3RvcnlFbnRy
eS5oIFwKIAlTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2ZpbGVzeXN0ZW0vRGlyZWN0b3J5RW50cnlT
eW5jLmNwcCBcCkBAIC0yMDUwLDE0ICsyMDU4LDYgQEAgd2ViY29yZV9zb3VyY2VzICs9IFwKIAlT
b3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2ZpbGVzeXN0ZW0vRGlyZWN0b3J5UmVhZGVyLmggXAogCVNv
dXJjZS9XZWJDb3JlL01vZHVsZXMvZmlsZXN5c3RlbS9EaXJlY3RvcnlSZWFkZXJTeW5jLmNwcCBc
CiAJU291cmNlL1dlYkNvcmUvTW9kdWxlcy9maWxlc3lzdGVtL0RpcmVjdG9yeVJlYWRlclN5bmMu
aCBcCi0JU291cmNlL1dlYkNvcmUvZmlsZWFwaS9ET01GaWxlUGF0aC5jcHAgXAotCVNvdXJjZS9X
ZWJDb3JlL2ZpbGVhcGkvRE9NRmlsZVBhdGguaCBcCi0JU291cmNlL1dlYkNvcmUvZmlsZWFwaS9E
T01GaWxlU3lzdGVtLmNwcCBcCi0JU291cmNlL1dlYkNvcmUvZmlsZWFwaS9ET01GaWxlU3lzdGVt
LmggXAotCVNvdXJjZS9XZWJDb3JlL2ZpbGVhcGkvRE9NRmlsZVN5c3RlbUJhc2UuY3BwIFwKLQlT
b3VyY2UvV2ViQ29yZS9maWxlYXBpL0RPTUZpbGVTeXN0ZW1CYXNlLmggXAotCVNvdXJjZS9XZWJD
b3JlL2ZpbGVhcGkvRE9NRmlsZVN5c3RlbVN5bmMuY3BwIFwKLQlTb3VyY2UvV2ViQ29yZS9maWxl
YXBpL0RPTUZpbGVTeXN0ZW1TeW5jLmggXAogCVNvdXJjZS9XZWJDb3JlL2ZpbGVhcGkvRE9NV2lu
ZG93RmlsZVN5c3RlbS5jcHAgXAogCVNvdXJjZS9XZWJDb3JlL2ZpbGVhcGkvRE9NV2luZG93Rmls
ZVN5c3RlbS5oIFwKIAlTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2ZpbGVzeXN0ZW0vRW50cmllc0Nh
bGxiYWNrLmggXApAQCAtNDg3Myw4ICs0ODczLDggQEAgd2ViY29yZV9idWlsdF9zb3VyY2VzICs9
IFwKIAlEZXJpdmVkU291cmNlcy9XZWJDb3JlL0pTTWV0YWRhdGFDYWxsYmFjay5oCiAKIGRvbV9i
aW5kaW5nX2lkbHMgKz0gXAotCSQoV2ViQ29yZSkvZmlsZWFwaS9ET01GaWxlU3lzdGVtLmlkbCBc
Ci0JJChXZWJDb3JlKS9maWxlYXBpL0RPTUZpbGVTeXN0ZW1TeW5jLmlkbCBcCisJJChXZWJDb3Jl
KS9Nb2R1bGVzL2ZpbGVzeXN0ZW0vRE9NRmlsZVN5c3RlbS5pZGwgXAorCSQoV2ViQ29yZSkvTW9k
dWxlcy9maWxlc3lzdGVtL0RPTUZpbGVTeXN0ZW1TeW5jLmlkbCBcCiAJJChXZWJDb3JlKS9maWxl
YXBpL0RPTVdpbmRvd0ZpbGVTeXN0ZW0uaWRsIFwKIAkkKFdlYkNvcmUpL01vZHVsZXMvZmlsZXN5
c3RlbS9EaXJlY3RvcnlFbnRyeS5pZGwgXAogCSQoV2ViQ29yZSkvTW9kdWxlcy9maWxlc3lzdGVt
L0RpcmVjdG9yeUVudHJ5U3luYy5pZGwgXApJbmRleDogU291cmNlL1dlYkNvcmUvVGFyZ2V0LnBy
aQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9UYXJnZXQucHJpCShyZXZpc2lvbiAxMTA4
NTYpCisrKyBTb3VyY2UvV2ViQ29yZS9UYXJnZXQucHJpCSh3b3JraW5nIGNvcHkpCkBAIC02NjMs
MTAgKzY2MywxMCBAQCBTT1VSQ0VTICs9IFwKICAgICBmaWxlYXBpL0FzeW5jRmlsZVN0cmVhbS5j
cHAgXAogICAgIGZpbGVhcGkvQmxvYi5jcHAgXAogICAgIGZpbGVhcGkvQmxvYlVSTC5jcHAgXAot
ICAgIGZpbGVhcGkvRE9NRmlsZVBhdGguY3BwIFwKLSAgICBmaWxlYXBpL0RPTUZpbGVTeXN0ZW0u
Y3BwIFwKLSAgICBmaWxlYXBpL0RPTUZpbGVTeXN0ZW1CYXNlLmNwcCBcCi0gICAgZmlsZWFwaS9E
T01GaWxlU3lzdGVtU3luYy5jcHAgXAorICAgIE1vZHVsZXMvZmlsZXN5c3RlbS9ET01GaWxlUGF0
aC5jcHAgXAorICAgIE1vZHVsZXMvZmlsZXN5c3RlbS9ET01GaWxlU3lzdGVtLmNwcCBcCisgICAg
TW9kdWxlcy9maWxlc3lzdGVtL0RPTUZpbGVTeXN0ZW1CYXNlLmNwcCBcCisgICAgTW9kdWxlcy9m
aWxlc3lzdGVtL0RPTUZpbGVTeXN0ZW1TeW5jLmNwcCBcCiAgICAgZmlsZWFwaS9ET01XaW5kb3dG
aWxlU3lzdGVtLmNwcCBcCiAgICAgTW9kdWxlcy9maWxlc3lzdGVtL0RpcmVjdG9yeUVudHJ5LmNw
cCBcCiAgICAgTW9kdWxlcy9maWxlc3lzdGVtL0RpcmVjdG9yeUVudHJ5U3luYy5jcHAgXApAQCAt
MzA1NSw2ICszMDU1LDkgQEAgY29udGFpbnMoREVGSU5FUywgRU5BQkxFX0RBVEFfVFJBTlNGRVJf
SQogY29udGFpbnMoREVGSU5FUywgRU5BQkxFX0ZJTEVfU1lTVEVNPTEpIHsKICAgICBIRUFERVJT
ICs9IFwKICAgICAgICAgZmlsZWFwaS9Bc3luY0ZpbGVXcml0ZXIuaCBcCisgICAgICAgIE1vZHVs
ZXMvZmlsZXN5c3RlbS9ET01GaWxlU3lzdGVtLmggXAorICAgICAgICBNb2R1bGVzL2ZpbGVzeXN0
ZW0vRE9NRmlsZVN5c3RlbUJhc2UuaCBcCisgICAgICAgIE1vZHVsZXMvZmlsZXN5c3RlbS9ET01G
aWxlU3lzdGVtU3luYy5oIFwKICAgICAgICAgTW9kdWxlcy9maWxlc3lzdGVtL0RpcmVjdG9yeUVu
dHJ5LmggXAogICAgICAgICBNb2R1bGVzL2ZpbGVzeXN0ZW0vRGlyZWN0b3J5RW50cnlTeW5jLmgg
XAogICAgICAgICBNb2R1bGVzL2ZpbGVzeXN0ZW0vRGlyZWN0b3J5UmVhZGVyLmggXApAQCAtMzA2
Miw5ICszMDY1LDYgQEAgY29udGFpbnMoREVGSU5FUywgRU5BQkxFX0ZJTEVfU1lTVEVNPTEpCiAg
ICAgICAgIE1vZHVsZXMvZmlsZXN5c3RlbS9EaXJlY3RvcnlSZWFkZXJTeW5jLmggXAogICAgICAg
ICBNb2R1bGVzL2ZpbGVzeXN0ZW0vRW50cmllc0NhbGxiYWNrLmggXAogICAgICAgICBmaWxlYXBp
L0RPTUZpbGVQYXRoLmggXAotICAgICAgICBmaWxlYXBpL0RPTUZpbGVTeXN0ZW0uaCBcCi0gICAg
ICAgIGZpbGVhcGkvRE9NRmlsZVN5c3RlbUJhc2UuaCBcCi0gICAgICAgIGZpbGVhcGkvRE9NRmls
ZVN5c3RlbVN5bmMuaCBcCiAgICAgICAgIGZpbGVhcGkvRW50cnkuaCBcCiAgICAgICAgIGZpbGVh
cGkvRW50cnlBcnJheS5oIFwKICAgICAgICAgZmlsZWFwaS9FbnRyeUFycmF5U3luYy5oIFwKSW5k
ZXg6IFNvdXJjZS9XZWJDb3JlL1dlYkNvcmUuZ3lwaQo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9XZWJDb3JlLmd5cGkJKHJldmlzaW9uIDExMDg1NikKKysrIFNvdXJjZS9XZWJDb3JlL1dl
YkNvcmUuZ3lwaQkod29ya2luZyBjb3B5KQpAQCAtODkzLDggKzg5Myw4IEBACiAgICAgICAgICAg
ICAnTW9kdWxlcy9maWxlc3lzdGVtL0RpcmVjdG9yeUVudHJ5U3luYy5pZGwnLAogICAgICAgICAg
ICAgJ01vZHVsZXMvZmlsZXN5c3RlbS9EaXJlY3RvcnlSZWFkZXIuaWRsJywKICAgICAgICAgICAg
ICdNb2R1bGVzL2ZpbGVzeXN0ZW0vRGlyZWN0b3J5UmVhZGVyU3luYy5pZGwnLAotICAgICAgICAg
ICAgJ2ZpbGVhcGkvRE9NRmlsZVN5c3RlbS5pZGwnLAotICAgICAgICAgICAgJ2ZpbGVhcGkvRE9N
RmlsZVN5c3RlbVN5bmMuaWRsJywKKyAgICAgICAgICAgICdNb2R1bGVzL2ZpbGVzeXN0ZW0vRE9N
RmlsZVN5c3RlbS5pZGwnLAorICAgICAgICAgICAgJ01vZHVsZXMvZmlsZXN5c3RlbS9ET01GaWxl
U3lzdGVtU3luYy5pZGwnLAogICAgICAgICAgICAgJ2ZpbGVhcGkvRE9NV2luZG93RmlsZVN5c3Rl
bS5pZGwnLAogICAgICAgICAgICAgJ01vZHVsZXMvZmlsZXN5c3RlbS9FbnRyaWVzQ2FsbGJhY2su
aWRsJywKICAgICAgICAgICAgICdmaWxlYXBpL0VudHJ5LmlkbCcsCkBAIC0yNDM2LDE0ICsyNDM2
LDE0IEBACiAgICAgICAgICAgICAnZmlsZWFwaS9CbG9iLmgnLAogICAgICAgICAgICAgJ2ZpbGVh
cGkvQmxvYlVSTC5jcHAnLAogICAgICAgICAgICAgJ2ZpbGVhcGkvQmxvYlVSTC5oJywKLSAgICAg
ICAgICAgICdmaWxlYXBpL0RPTUZpbGVQYXRoLmNwcCcsCi0gICAgICAgICAgICAnZmlsZWFwaS9E
T01GaWxlUGF0aC5oJywKLSAgICAgICAgICAgICdmaWxlYXBpL0RPTUZpbGVTeXN0ZW0uY3BwJywK
LSAgICAgICAgICAgICdmaWxlYXBpL0RPTUZpbGVTeXN0ZW0uaCcsCi0gICAgICAgICAgICAnZmls
ZWFwaS9ET01GaWxlU3lzdGVtQmFzZS5jcHAnLAotICAgICAgICAgICAgJ2ZpbGVhcGkvRE9NRmls
ZVN5c3RlbUJhc2UuaCcsCi0gICAgICAgICAgICAnZmlsZWFwaS9ET01GaWxlU3lzdGVtU3luYy5j
cHAnLAotICAgICAgICAgICAgJ2ZpbGVhcGkvRE9NRmlsZVN5c3RlbVN5bmMuaCcsCisgICAgICAg
ICAgICAnTW9kdWxlcy9maWxlc3lzdGVtL0RPTUZpbGVQYXRoLmNwcCcsCisgICAgICAgICAgICAn
TW9kdWxlcy9maWxlc3lzdGVtL0RPTUZpbGVQYXRoLmgnLAorICAgICAgICAgICAgJ01vZHVsZXMv
ZmlsZXN5c3RlbS9ET01GaWxlU3lzdGVtLmNwcCcsCisgICAgICAgICAgICAnTW9kdWxlcy9maWxl
c3lzdGVtL0RPTUZpbGVTeXN0ZW0uaCcsCisgICAgICAgICAgICAnTW9kdWxlcy9maWxlc3lzdGVt
L0RPTUZpbGVTeXN0ZW1CYXNlLmNwcCcsCisgICAgICAgICAgICAnTW9kdWxlcy9maWxlc3lzdGVt
L0RPTUZpbGVTeXN0ZW1CYXNlLmgnLAorICAgICAgICAgICAgJ01vZHVsZXMvZmlsZXN5c3RlbS9E
T01GaWxlU3lzdGVtU3luYy5jcHAnLAorICAgICAgICAgICAgJ01vZHVsZXMvZmlsZXN5c3RlbS9E
T01GaWxlU3lzdGVtU3luYy5oJywKICAgICAgICAgICAgICdmaWxlYXBpL0RPTVdpbmRvd0ZpbGVT
eXN0ZW0uY3BwJywKICAgICAgICAgICAgICdmaWxlYXBpL0RPTVdpbmRvd0ZpbGVTeXN0ZW0uaCcs
CiAgICAgICAgICAgICAnTW9kdWxlcy9maWxlc3lzdGVtL0RpcmVjdG9yeUVudHJ5LmNwcCcsCklu
ZGV4OiBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2ZpbGVzeXN0ZW0vRE9NRmlsZVBhdGguY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvZmlsZXN5c3RlbS9ET01GaWxlUGF0
aC5jcHAJKHJldmlzaW9uIDExMDg1NikJKGZyb20gU291cmNlL1dlYkNvcmUvZmlsZWFwaS9ET01G
aWxlUGF0aC5jcHA6MTEwODU2KQorKysgU291cmNlL1dlYkNvcmUvTW9kdWxlcy9maWxlc3lzdGVt
L0RPTUZpbGVQYXRoLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDE1NCBAQAorLyoKKyAq
IENvcHlyaWdodCAoQykgMjAxMCBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoK
KyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdp
dGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRo
YXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZQorICogbWV0OgorICoKKyAqICAgICAqIFJl
ZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJp
Z2h0CisgKiBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIuCisgKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVz
dCByZXByb2R1Y2UgdGhlIGFib3ZlCisgKiBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyCisgKiBpbiB0aGUgZG9jdW1l
bnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCisgKiBkaXN0
cmlidXRpb24uCisgKiAgICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9mIEdvb2dsZSBJbmMuIG5vciB0
aGUgbmFtZXMgb2YgaXRzCisgKiBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBv
ciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbQorICogdGhpcyBzb2Z0d2FyZSB3aXRob3V0
IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJF
IElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCisg
KiAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElO
RywgQlVUIE5PVAorICogTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJD
SEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCisgKiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUg
RElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAorICogT1dORVIgT1Ig
Q09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5U
QUwsCisgKiBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5D
TFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRF
IEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKKyAqIERBVEEsIE9SIFBST0ZJVFM7IE9S
IEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQorICogVEhF
T1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwg
T1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJ
TiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFE
VklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRl
ICJjb25maWcuaCIKKyNpbmNsdWRlICJET01GaWxlUGF0aC5oIgorCisjaWYgRU5BQkxFKEZJTEVf
U1lTVEVNKQorCisjaW5jbHVkZSAiUmVndWxhckV4cHJlc3Npb24uaCIKKyNpbmNsdWRlIDx3dGYv
VmVjdG9yLmg+CisjaW5jbHVkZSA8d3RmL3RleHQvQ1N0cmluZy5oPgorCituYW1lc3BhY2UgV2Vi
Q29yZSB7CisKK2NvbnN0IGNoYXIgRE9NRmlsZVBhdGg6OnNlcGFyYXRvciA9ICcvJzsKK2NvbnN0
IGNoYXIgRE9NRmlsZVBhdGg6OnJvb3RbXSA9ICIvIjsKKworU3RyaW5nIERPTUZpbGVQYXRoOjph
cHBlbmQoY29uc3QgU3RyaW5nJiBiYXNlLCBjb25zdCBTdHJpbmcmIGNvbXBvbmVudHMpCit7Cisg
ICAgcmV0dXJuIGVuc3VyZURpcmVjdG9yeVBhdGgoYmFzZSkgKyBjb21wb25lbnRzOworfQorCitT
dHJpbmcgRE9NRmlsZVBhdGg6OmVuc3VyZURpcmVjdG9yeVBhdGgoY29uc3QgU3RyaW5nJiBwYXRo
KQoreworICAgIGlmICghRE9NRmlsZVBhdGg6OmVuZHNXaXRoU2VwYXJhdG9yKHBhdGgpKSB7Cisg
ICAgICAgIFN0cmluZyBuZXdQYXRoID0gcGF0aDsKKyAgICAgICAgbmV3UGF0aC5hcHBlbmQoRE9N
RmlsZVBhdGg6OnNlcGFyYXRvcik7CisgICAgICAgIHJldHVybiBuZXdQYXRoOworICAgIH0KKyAg
ICByZXR1cm4gcGF0aDsKK30KKworU3RyaW5nIERPTUZpbGVQYXRoOjpnZXROYW1lKGNvbnN0IFN0
cmluZyYgcGF0aCkKK3sKKyAgICBpbnQgaW5kZXggPSBwYXRoLnJldmVyc2VGaW5kKERPTUZpbGVQ
YXRoOjpzZXBhcmF0b3IpOworICAgIGlmIChpbmRleCAhPSAtMSkKKyAgICAgICAgcmV0dXJuIHBh
dGguc3Vic3RyaW5nKGluZGV4ICsgMSk7CisgICAgcmV0dXJuIHBhdGg7Cit9CisKK1N0cmluZyBE
T01GaWxlUGF0aDo6Z2V0RGlyZWN0b3J5KGNvbnN0IFN0cmluZyYgcGF0aCkKK3sKKyAgICBpbnQg
aW5kZXggPSBwYXRoLnJldmVyc2VGaW5kKERPTUZpbGVQYXRoOjpzZXBhcmF0b3IpOworICAgIGlm
IChpbmRleCA9PSAwKQorICAgICAgICByZXR1cm4gRE9NRmlsZVBhdGg6OnJvb3Q7CisgICAgaWYg
KGluZGV4ICE9IC0xKQorICAgICAgICByZXR1cm4gcGF0aC5zdWJzdHJpbmcoMCwgaW5kZXgpOwor
ICAgIHJldHVybiAiLiI7Cit9CisKK2Jvb2wgRE9NRmlsZVBhdGg6OmlzUGFyZW50T2YoY29uc3Qg
U3RyaW5nJiBwYXJlbnQsIGNvbnN0IFN0cmluZyYgbWF5QmVDaGlsZCkKK3sKKyAgICBBU1NFUlQo
RE9NRmlsZVBhdGg6OmlzQWJzb2x1dGUocGFyZW50KSk7CisgICAgQVNTRVJUKERPTUZpbGVQYXRo
Ojppc0Fic29sdXRlKG1heUJlQ2hpbGQpKTsKKyAgICBpZiAocGFyZW50ID09IERPTUZpbGVQYXRo
Ojpyb290ICYmIG1heUJlQ2hpbGQgIT0gRE9NRmlsZVBhdGg6OnJvb3QpCisgICAgICAgIHJldHVy
biB0cnVlOworICAgIGlmIChwYXJlbnQubGVuZ3RoKCkgPj0gbWF5QmVDaGlsZC5sZW5ndGgoKSB8
fCAhbWF5QmVDaGlsZC5zdGFydHNXaXRoKHBhcmVudCwgZmFsc2UpKQorICAgICAgICByZXR1cm4g
ZmFsc2U7CisgICAgaWYgKG1heUJlQ2hpbGRbcGFyZW50Lmxlbmd0aCgpXSAhPSBET01GaWxlUGF0
aDo6c2VwYXJhdG9yKQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgcmV0dXJuIHRydWU7Cit9
CisKK1N0cmluZyBET01GaWxlUGF0aDo6cmVtb3ZlRXh0cmFQYXJlbnRSZWZlcmVuY2VzKGNvbnN0
IFN0cmluZyYgcGF0aCkKK3sKKyAgICBBU1NFUlQoRE9NRmlsZVBhdGg6OmlzQWJzb2x1dGUocGF0
aCkpOworICAgIFZlY3RvcjxTdHJpbmc+IGNvbXBvbmVudHM7CisgICAgVmVjdG9yPFN0cmluZz4g
Y2Fub25pY2FsaXplZDsKKyAgICBwYXRoLnNwbGl0KERPTUZpbGVQYXRoOjpzZXBhcmF0b3IsIGNv
bXBvbmVudHMpOworICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgY29tcG9uZW50cy5zaXplKCk7
ICsraSkgeworICAgICAgICBpZiAoY29tcG9uZW50c1tpXSA9PSAiLiIpCisgICAgICAgICAgICBj
b250aW51ZTsKKyAgICAgICAgaWYgKGNvbXBvbmVudHNbaV0gPT0gIi4uIikgeworICAgICAgICAg
ICAgaWYgKGNhbm9uaWNhbGl6ZWQuc2l6ZSgpID4gMCkKKyAgICAgICAgICAgICAgICBjYW5vbmlj
YWxpemVkLnJlbW92ZUxhc3QoKTsKKyAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICB9Cisg
ICAgICAgIGNhbm9uaWNhbGl6ZWQuYXBwZW5kKGNvbXBvbmVudHNbaV0pOworICAgIH0KKyAgICBp
ZiAoY2Fub25pY2FsaXplZC5pc0VtcHR5KCkpCisgICAgICAgIHJldHVybiBET01GaWxlUGF0aDo6
cm9vdDsKKyAgICBTdHJpbmcgcmVzdWx0OworICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgY2Fu
b25pY2FsaXplZC5zaXplKCk7ICsraSkgeworICAgICAgICByZXN1bHQuYXBwZW5kKERPTUZpbGVQ
YXRoOjpzZXBhcmF0b3IpOworICAgICAgICByZXN1bHQuYXBwZW5kKGNhbm9uaWNhbGl6ZWRbaV0p
OworICAgIH0KKyAgICByZXR1cm4gcmVzdWx0OworfQorCitib29sIERPTUZpbGVQYXRoOjppc1Zh
bGlkUGF0aChjb25zdCBTdHJpbmcmIHBhdGgpCit7CisgICAgaWYgKHBhdGguaXNFbXB0eSgpIHx8
IHBhdGggPT0gRE9NRmlsZVBhdGg6OnJvb3QpCisgICAgICAgIHJldHVybiB0cnVlOworCisgICAg
Ly8gRW1iZWRkZWQgTlVMcyBhcmUgbm90IGFsbG93ZWQuCisgICAgaWYgKHBhdGguZmluZChzdGF0
aWNfY2FzdDxVQ2hhcj4oMCkpICE9IFdURjo6bm90Rm91bmQpCisgICAgICAgIHJldHVybiBmYWxz
ZTsKKworICAgIC8vIFdoaWxlIG5vdCBbeWV0XSByZXN0cmljdGVkIGJ5IHRoZSBzcGVjLCAnXFwn
IGNvbXBsaWNhdGVzIGltcGxlbWVudGF0aW9uIGZvciBDaHJvbWl1bS4KKyAgICBpZiAocGF0aC5m
aW5kKCdcXCcpICE9IFdURjo6bm90Rm91bmQpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAg
IC8vIFRoaXMgbWV0aG9kIGlzIG9ubHkgY2FsbGVkIG9uIGZ1bGx5LWV2YWx1YXRlZCBhYnNvbHV0
ZSBwYXRocy4gQW55IHNpZ24gb2YgIi4uIiBvciAiLiIgaXMgbGlrZWx5IGFuIGF0dGVtcHQgdG8g
YnJlYWsgb3V0IG9mIHRoZSBzYW5kYm94LgorICAgIFZlY3RvcjxTdHJpbmc+IGNvbXBvbmVudHM7
CisgICAgcGF0aC5zcGxpdChET01GaWxlUGF0aDo6c2VwYXJhdG9yLCBjb21wb25lbnRzKTsKKyAg
ICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGNvbXBvbmVudHMuc2l6ZSgpOyArK2kpIHsKKyAgICAg
ICAgaWYgKGNvbXBvbmVudHNbaV0gPT0gIi4iKQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwor
ICAgICAgICBpZiAoY29tcG9uZW50c1tpXSA9PSAiLi4iKQorICAgICAgICAgICAgcmV0dXJuIGZh
bHNlOworICAgIH0KKyAgICByZXR1cm4gdHJ1ZTsKK30KKworYm9vbCBET01GaWxlUGF0aDo6aXNW
YWxpZE5hbWUoY29uc3QgU3RyaW5nJiBuYW1lKQoreworICAgIGlmIChuYW1lLmlzRW1wdHkoKSkK
KyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgLy8gJy8nIGlzIG5vdCBhbGxvd2VkIGluIG5hbWUu
CisgICAgaWYgKG5hbWUuY29udGFpbnMoJy8nKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAg
IHJldHVybiBpc1ZhbGlkUGF0aChuYW1lKTsKK30KKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQor
CisjZW5kaWYgLy8gRU5BQkxFKEZJTEVfU1lTVEVNKQpJbmRleDogU291cmNlL1dlYkNvcmUvTW9k
dWxlcy9maWxlc3lzdGVtL0RPTUZpbGVQYXRoLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNv
cmUvTW9kdWxlcy9maWxlc3lzdGVtL0RPTUZpbGVQYXRoLmgJKHJldmlzaW9uIDExMDg1NikJKGZy
b20gU291cmNlL1dlYkNvcmUvZmlsZWFwaS9ET01GaWxlUGF0aC5oOjExMDg1NikKKysrIFNvdXJj
ZS9XZWJDb3JlL01vZHVsZXMvZmlsZXN5c3RlbS9ET01GaWxlUGF0aC5oCSh3b3JraW5nIGNvcHkp
CkBAIC0wLDAgKzEsODYgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTAgR29vZ2xlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNv
dXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwg
YXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUK
KyAqIG1ldDoKKyAqCisgKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVz
dCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogICAgICogUmVkaXN0cmli
dXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQorICogY29weXJp
Z2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lcgorICogaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBw
cm92aWRlZCB3aXRoIHRoZQorICogZGlzdHJpYnV0aW9uLgorICogICAgICogTmVpdGhlciB0aGUg
bmFtZSBvZiBHb29nbGUgSW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0cworICogY29udHJpYnV0b3Jz
IG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20K
KyAqIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Np
b24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhP
TERFUlMgQU5EIENPTlRSSUJVVE9SUworICogIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1Q
TElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFRIRSBJ
TVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgorICog
QSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRI
RSBDT1BZUklHSFQKKyAqIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBE
SVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAorICogU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBD
T05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywg
UFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0Us
CisgKiBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIg
Q0FVU0VEIEFORCBPTiBBTlkKKyAqIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09O
VFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5D
RSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0Yg
VEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNI
IERBTUFHRS4KKyAqLworCisjaWZuZGVmIERPTUZpbGVQYXRoX2gKKyNkZWZpbmUgRE9NRmlsZVBh
dGhfaAorCisjaW5jbHVkZSAiUGxhdGZvcm1TdHJpbmcuaCIKKyNpbmNsdWRlIDx3dGYvUGFzc1Jl
ZlB0ci5oPgorI2luY2x1ZGUgPHd0Zi9SZWZDb3VudGVkLmg+CisKK25hbWVzcGFjZSBXZWJDb3Jl
IHsKKworLy8gRE9NRmlsZVN5c3RlbSBwYXRoIHV0aWxpdGllcy4gQWxsIG1ldGhvZHMgaW4gdGhp
cyBjbGFzcyBhcmUgc3RhdGljLgorY2xhc3MgRE9NRmlsZVBhdGggeworcHVibGljOgorICAgIHN0
YXRpYyBjb25zdCBjaGFyIHNlcGFyYXRvcjsKKyAgICBzdGF0aWMgY29uc3QgY2hhciByb290W107
CisKKyAgICAvLyBSZXR1cm5zIHRoZSBuYW1lIHBhcnQgZnJvbSB0aGUgZ2l2ZW4gcGF0aC4KKyAg
ICBzdGF0aWMgU3RyaW5nIGdldE5hbWUoY29uc3QgU3RyaW5nJiBwYXRoKTsKKworICAgIC8vIFJl
dHVybnMgdGhlIHBhcmVudCBkaXJlY3RvcnkgcGF0aCBvZiB0aGUgZ2l2ZW4gcGF0aC4KKyAgICBz
dGF0aWMgU3RyaW5nIGdldERpcmVjdG9yeShjb25zdCBTdHJpbmcmIHBhdGgpOworCisgICAgLy8g
Q2hlY2tzIGlmIGEgZ2l2ZW4gcGF0aCBpcyBhIHBhcmVudCBvZiBtYXlCZUNoaWxkLiBUaGlzIG1l
dGhvZCBhc3N1bWVzIGdpdmVuIHBhdGhzIGFyZSBhYnNvbHV0ZSBhbmQgZG8gbm90IGhhdmUgZXh0
cmEgcmVmZXJlbmNlcyB0byBhIHBhcmVudCAoaS5lLiAiLi4vIikuCisgICAgc3RhdGljIGJvb2wg
aXNQYXJlbnRPZihjb25zdCBTdHJpbmcmIHBhdGgsIGNvbnN0IFN0cmluZyYgbWF5QmVDaGlsZCk7
CisKKyAgICAvLyBBcHBlbmRzIHRoZSBzZXBhcmF0b3IgYXQgdGhlIGVuZCBvZiB0aGUgcGF0aCBp
ZiBpdCdzIG5vdCB0aGVyZSBhbHJlYWR5LgorICAgIHN0YXRpYyBTdHJpbmcgZW5zdXJlRGlyZWN0
b3J5UGF0aChjb25zdCBTdHJpbmcmIHBhdGgpOworCisgICAgLy8gUmV0dXJucyBhIG5ldyBwYXRo
IGJ5IGFwcGVuZGluZyBhIHNlcGFyYXRvciBhbmQgdGhlIHN1cHBsaWVkIHBhdGggY29tcG9uZW50
IHRvIHRoZSBwYXRoLgorICAgIHN0YXRpYyBTdHJpbmcgYXBwZW5kKGNvbnN0IFN0cmluZyYgcGF0
aCwgY29uc3QgU3RyaW5nJiBjb21wb25lbnQpOworCisgICAgc3RhdGljIGJvb2wgaXNBYnNvbHV0
ZShjb25zdCBTdHJpbmcmIHBhdGgpCisgICAgeworICAgICAgICByZXR1cm4gcGF0aC5zdGFydHNX
aXRoKERPTUZpbGVQYXRoOjpyb290KTsKKyAgICB9CisKKyAgICBzdGF0aWMgYm9vbCBlbmRzV2l0
aFNlcGFyYXRvcihjb25zdCBTdHJpbmcmIHBhdGgpCisgICAgeworICAgICAgICByZXR1cm4gcGF0
aFtwYXRoLmxlbmd0aCgpIC0gMV0gPT0gRE9NRmlsZVBhdGg6OnNlcGFyYXRvcjsKKyAgICB9CisK
KyAgICAvLyBFdmFsdWF0ZXMgYWxsICIuLi8iIGFuZCAiLi8iIHNlZ21lbnRzLiAgTm90ZSB0aGF0
ICIvLi4vIiBleHBhbmRzIHRvICIvIiwgc28geW91IGNhbid0IGV2ZXIgcmVmZXIgdG8gYW55dGhp
bmcgYWJvdmUgdGhlIHJvb3QgZGlyZWN0b3J5LgorICAgIHN0YXRpYyBTdHJpbmcgcmVtb3ZlRXh0
cmFQYXJlbnRSZWZlcmVuY2VzKGNvbnN0IFN0cmluZyYgcGF0aCk7CisKKyAgICAvLyBDaGVja3Mg
aWYgdGhlIGdpdmVuIHBhdGggZm9sbG93cyB0aGUgRmlsZVN5c3RlbSBBUEkgbmFtaW5nIHJlc3Ry
aWN0aW9ucy4KKyAgICBzdGF0aWMgYm9vbCBpc1ZhbGlkUGF0aChjb25zdCBTdHJpbmcmIHBhdGgp
OworCisgICAgLy8gQ2hlY2tzIGlmIHRoZSBnaXZlbiBuYW1lIGZvbGxvd3MgdGhlIEZpbGVTeXN0
ZW0gQVBJIG5hbWluZyByZXN0cmljdGlvbnMuCisgICAgc3RhdGljIGJvb2wgaXNWYWxpZE5hbWUo
Y29uc3QgU3RyaW5nJiBuYW1lKTsKKworcHJpdmF0ZToKKyAgICBET01GaWxlUGF0aCgpIHsgfQor
fTsKKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCisjZW5kaWYgLy8gRE9NRmlsZVBhdGhfaApJ
bmRleDogU291cmNlL1dlYkNvcmUvTW9kdWxlcy9maWxlc3lzdGVtL0RPTUZpbGVTeXN0ZW0uY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvZmlsZXN5c3RlbS9ET01GaWxl
U3lzdGVtLmNwcAkocmV2aXNpb24gMTEwODU2KQkoZnJvbSBTb3VyY2UvV2ViQ29yZS9maWxlYXBp
L0RPTUZpbGVTeXN0ZW0uY3BwOjExMDg1NikKKysrIFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvZmls
ZXN5c3RlbS9ET01GaWxlU3lzdGVtLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDE2MiBA
QAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMCBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg
Zm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHBy
b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZQorICogbWV0OgorICoKKyAq
ICAgICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJv
dmUgY29weXJpZ2h0CisgKiBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5
IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCisgKiBjb3B5cmlnaHQgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyCisgKiBpbiB0
aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhl
CisgKiBkaXN0cmlidXRpb24uCisgKiAgICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9mIEdvb2dsZSBJ
bmMuIG5vciB0aGUgbmFtZXMgb2YgaXRzCisgKiBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8g
ZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbQorICogdGhpcyBzb2Z0d2Fy
ZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqCisgKiBUSElT
IFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJ
QlVUT1JTCisgKiAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMs
IElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElF
UyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCisgKiBBIFBBUlRJQ1VMQVIgUFVS
UE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAorICog
T1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1Qs
IElOQ0lERU5UQUwsCisgKiBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFN
QUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBT
VUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKKyAqIERBVEEsIE9SIFBS
T0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFO
WQorICogVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJ
QUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkg
QVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBF
VkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisK
KyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJET01GaWxlU3lzdGVtLmgiCisKKyNpZiBF
TkFCTEUoRklMRV9TWVNURU0pCisKKyNpbmNsdWRlICJBc3luY0ZpbGVTeXN0ZW0uaCIKKyNpbmNs
dWRlICJET01GaWxlUGF0aC5oIgorI2luY2x1ZGUgIkRpcmVjdG9yeUVudHJ5LmgiCisjaW5jbHVk
ZSAiRXJyb3JDYWxsYmFjay5oIgorI2luY2x1ZGUgIkZpbGUuaCIKKyNpbmNsdWRlICJGaWxlQ2Fs
bGJhY2suaCIKKyNpbmNsdWRlICJGaWxlRW50cnkuaCIKKyNpbmNsdWRlICJGaWxlTWV0YWRhdGEu
aCIKKyNpbmNsdWRlICJGaWxlU3lzdGVtQ2FsbGJhY2tzLmgiCisjaW5jbHVkZSAiRmlsZVdyaXRl
ci5oIgorI2luY2x1ZGUgIkZpbGVXcml0ZXJCYXNlQ2FsbGJhY2suaCIKKyNpbmNsdWRlICJGaWxl
V3JpdGVyQ2FsbGJhY2suaCIKKyNpbmNsdWRlICJJbnNwZWN0b3JGaWxlU3lzdGVtSW5zdHJ1bWVu
dGF0aW9uLmgiCisjaW5jbHVkZSAiTWV0YWRhdGFDYWxsYmFjay5oIgorI2luY2x1ZGUgIlNjcmlw
dEV4ZWN1dGlvbkNvbnRleHQuaCIKKyNpbmNsdWRlIDx3dGYvT3duUHRyLmg+CisKK25hbWVzcGFj
ZSBXZWJDb3JlIHsKKworLy8gc3RhdGljCitQYXNzUmVmUHRyPERPTUZpbGVTeXN0ZW0+IERPTUZp
bGVTeXN0ZW06OmNyZWF0ZShTY3JpcHRFeGVjdXRpb25Db250ZXh0KiBjb250ZXh0LCBjb25zdCBT
dHJpbmcmIG5hbWUsIFBhc3NPd25QdHI8QXN5bmNGaWxlU3lzdGVtPiBhc3luY0ZpbGVTeXN0ZW0p
Cit7CisgICAgUmVmUHRyPERPTUZpbGVTeXN0ZW0+IGZpbGVTeXN0ZW0oYWRvcHRSZWYobmV3IERP
TUZpbGVTeXN0ZW0oY29udGV4dCwgbmFtZSwgYXN5bmNGaWxlU3lzdGVtKSkpOworICAgIGZpbGVT
eXN0ZW0tPnN1c3BlbmRJZk5lZWRlZCgpOworICAgIEluc3BlY3Rvckluc3RydW1lbnRhdGlvbjo6
ZGlkT3BlbkZpbGVTeXN0ZW0oZmlsZVN5c3RlbS5nZXQoKSk7CisgICAgcmV0dXJuIGZpbGVTeXN0
ZW0ucmVsZWFzZSgpOworfQorCitET01GaWxlU3lzdGVtOjpET01GaWxlU3lzdGVtKFNjcmlwdEV4
ZWN1dGlvbkNvbnRleHQqIGNvbnRleHQsIGNvbnN0IFN0cmluZyYgbmFtZSwgUGFzc093blB0cjxB
c3luY0ZpbGVTeXN0ZW0+IGFzeW5jRmlsZVN5c3RlbSkKKyAgICA6IERPTUZpbGVTeXN0ZW1CYXNl
KGNvbnRleHQsIG5hbWUsIGFzeW5jRmlsZVN5c3RlbSkKKyAgICAsIEFjdGl2ZURPTU9iamVjdChj
b250ZXh0LCB0aGlzKQoreworfQorCitQYXNzUmVmUHRyPERpcmVjdG9yeUVudHJ5PiBET01GaWxl
U3lzdGVtOjpyb290KCkKK3sKKyAgICByZXR1cm4gRGlyZWN0b3J5RW50cnk6OmNyZWF0ZSh0aGlz
LCBET01GaWxlUGF0aDo6cm9vdCk7Cit9CisKK3ZvaWQgRE9NRmlsZVN5c3RlbTo6c3RvcCgpCit7
CisgICAgbV9hc3luY0ZpbGVTeXN0ZW0tPnN0b3AoKTsKK30KKworYm9vbCBET01GaWxlU3lzdGVt
OjpoYXNQZW5kaW5nQWN0aXZpdHkoKSBjb25zdAoreworICAgIHJldHVybiBtX2FzeW5jRmlsZVN5
c3RlbS0+aGFzUGVuZGluZ0FjdGl2aXR5KCk7Cit9CisKK3ZvaWQgRE9NRmlsZVN5c3RlbTo6Y29u
dGV4dERlc3Ryb3llZCgpCit7CisgICAgbV9hc3luY0ZpbGVTeXN0ZW0tPnN0b3AoKTsKKyAgICBB
Y3RpdmVET01PYmplY3Q6OmNvbnRleHREZXN0cm95ZWQoKTsKK30KKworbmFtZXNwYWNlIHsKKwor
Y2xhc3MgQ29udmVydFRvRmlsZVdyaXRlckNhbGxiYWNrIDogcHVibGljIEZpbGVXcml0ZXJCYXNl
Q2FsbGJhY2sgeworcHVibGljOgorICAgIHN0YXRpYyBQYXNzUmVmUHRyPENvbnZlcnRUb0ZpbGVX
cml0ZXJDYWxsYmFjaz4gY3JlYXRlKFBhc3NSZWZQdHI8RmlsZVdyaXRlckNhbGxiYWNrPiBjYWxs
YmFjaykKKyAgICB7CisgICAgICAgIHJldHVybiBhZG9wdFJlZihuZXcgQ29udmVydFRvRmlsZVdy
aXRlckNhbGxiYWNrKGNhbGxiYWNrKSk7CisgICAgfQorCisgICAgYm9vbCBoYW5kbGVFdmVudChG
aWxlV3JpdGVyQmFzZSogZmlsZVdyaXRlckJhc2UpCisgICAgeworICAgICAgICByZXR1cm4gbV9j
YWxsYmFjay0+aGFuZGxlRXZlbnQoc3RhdGljX2Nhc3Q8RmlsZVdyaXRlcio+KGZpbGVXcml0ZXJC
YXNlKSk7CisgICAgfQorcHJpdmF0ZToKKyAgICBDb252ZXJ0VG9GaWxlV3JpdGVyQ2FsbGJhY2so
UGFzc1JlZlB0cjxGaWxlV3JpdGVyQ2FsbGJhY2s+IGNhbGxiYWNrKQorICAgICAgICA6IG1fY2Fs
bGJhY2soY2FsbGJhY2spCisgICAgeworICAgIH0KKyAgICBSZWZQdHI8RmlsZVdyaXRlckNhbGxi
YWNrPiBtX2NhbGxiYWNrOworfTsKKworfQorCit2b2lkIERPTUZpbGVTeXN0ZW06OmNyZWF0ZVdy
aXRlcihjb25zdCBGaWxlRW50cnkqIGZpbGVFbnRyeSwgUGFzc1JlZlB0cjxGaWxlV3JpdGVyQ2Fs
bGJhY2s+IHN1Y2Nlc3NDYWxsYmFjaywgUGFzc1JlZlB0cjxFcnJvckNhbGxiYWNrPiBlcnJvckNh
bGxiYWNrKQoreworICAgIEFTU0VSVChmaWxlRW50cnkpOworCisgICAgUmVmUHRyPEZpbGVXcml0
ZXI+IGZpbGVXcml0ZXIgPSBGaWxlV3JpdGVyOjpjcmVhdGUoc2NyaXB0RXhlY3V0aW9uQ29udGV4
dCgpKTsKKyAgICBSZWZQdHI8RmlsZVdyaXRlckJhc2VDYWxsYmFjaz4gY29udmVyc2lvbkNhbGxi
YWNrID0gQ29udmVydFRvRmlsZVdyaXRlckNhbGxiYWNrOjpjcmVhdGUoc3VjY2Vzc0NhbGxiYWNr
KTsKKyAgICBPd25QdHI8RmlsZVdyaXRlckJhc2VDYWxsYmFja3M+IGNhbGxiYWNrcyA9IEZpbGVX
cml0ZXJCYXNlQ2FsbGJhY2tzOjpjcmVhdGUoZmlsZVdyaXRlciwgY29udmVyc2lvbkNhbGxiYWNr
LCBlcnJvckNhbGxiYWNrKTsKKyAgICBtX2FzeW5jRmlsZVN5c3RlbS0+Y3JlYXRlV3JpdGVyKGZp
bGVXcml0ZXIuZ2V0KCksIGZpbGVFbnRyeS0+ZnVsbFBhdGgoKSwgY2FsbGJhY2tzLnJlbGVhc2Uo
KSk7Cit9CisKK25hbWVzcGFjZSB7CisKK2NsYXNzIEdldFBhdGhDYWxsYmFjayA6IHB1YmxpYyBG
aWxlU3lzdGVtQ2FsbGJhY2tzQmFzZSB7CitwdWJsaWM6CisgICAgc3RhdGljIFBhc3NPd25QdHI8
R2V0UGF0aENhbGxiYWNrPiBjcmVhdGUoUGFzc1JlZlB0cjxET01GaWxlU3lzdGVtPiBmaWxlc3lz
dGVtLCBjb25zdCBTdHJpbmcmIG5hbWUsIFBhc3NSZWZQdHI8RmlsZUNhbGxiYWNrPiBzdWNjZXNz
Q2FsbGJhY2ssIFBhc3NSZWZQdHI8RXJyb3JDYWxsYmFjaz4gZXJyb3JDYWxsYmFjaykKKyAgICB7
CisgICAgICAgIHJldHVybiBhZG9wdFB0cihuZXcgR2V0UGF0aENhbGxiYWNrKGZpbGVzeXN0ZW0s
IG5hbWUsIHN1Y2Nlc3NDYWxsYmFjaywgZXJyb3JDYWxsYmFjaykpOworICAgIH0KKworICAgIHZp
cnR1YWwgdm9pZCBkaWRSZWFkTWV0YWRhdGEoY29uc3QgRmlsZU1ldGFkYXRhJiBtZXRhZGF0YSkK
KyAgICB7CisgICAgICAgIEFTU0VSVCghbWV0YWRhdGEucGxhdGZvcm1QYXRoLmlzRW1wdHkoKSk7
CisgICAgICAgIG1fZmlsZXN5c3RlbS0+c2NoZWR1bGVDYWxsYmFjayhtX3N1Y2Nlc3NDYWxsYmFj
ay5yZWxlYXNlKCksIEZpbGU6OmNyZWF0ZVdpdGhOYW1lKG1ldGFkYXRhLnBsYXRmb3JtUGF0aCwg
bV9uYW1lKSk7CisgICAgfQorCitwcml2YXRlOgorICAgIEdldFBhdGhDYWxsYmFjayhQYXNzUmVm
UHRyPERPTUZpbGVTeXN0ZW0+IGZpbGVzeXN0ZW0sIGNvbnN0IFN0cmluZyYgbmFtZSwgIFBhc3NS
ZWZQdHI8RmlsZUNhbGxiYWNrPiBzdWNjZXNzQ2FsbGJhY2ssIFBhc3NSZWZQdHI8RXJyb3JDYWxs
YmFjaz4gZXJyb3JDYWxsYmFjaykKKyAgICAgICAgOiBGaWxlU3lzdGVtQ2FsbGJhY2tzQmFzZShl
cnJvckNhbGxiYWNrKQorICAgICAgICAsIG1fZmlsZXN5c3RlbShmaWxlc3lzdGVtKQorICAgICAg
ICAsIG1fbmFtZShuYW1lKQorICAgICAgICAsIG1fc3VjY2Vzc0NhbGxiYWNrKHN1Y2Nlc3NDYWxs
YmFjaykKKyAgICB7CisgICAgfQorCisgICAgUmVmUHRyPERPTUZpbGVTeXN0ZW0+IG1fZmlsZXN5
c3RlbTsKKyAgICBTdHJpbmcgbV9uYW1lOworICAgIFJlZlB0cjxGaWxlQ2FsbGJhY2s+IG1fc3Vj
Y2Vzc0NhbGxiYWNrOworfTsKKworfSAvLyBuYW1lc3BhY2UKKwordm9pZCBET01GaWxlU3lzdGVt
OjpjcmVhdGVGaWxlKGNvbnN0IEZpbGVFbnRyeSogZmlsZUVudHJ5LCBQYXNzUmVmUHRyPEZpbGVD
YWxsYmFjaz4gc3VjY2Vzc0NhbGxiYWNrLCBQYXNzUmVmUHRyPEVycm9yQ2FsbGJhY2s+IGVycm9y
Q2FsbGJhY2spCit7CisgICAgbV9hc3luY0ZpbGVTeXN0ZW0tPmNyZWF0ZVNuYXBzaG90RmlsZUFu
ZFJlYWRNZXRhZGF0YShmaWxlRW50cnktPmZ1bGxQYXRoKCksIEdldFBhdGhDYWxsYmFjazo6Y3Jl
YXRlKHRoaXMsIGZpbGVFbnRyeS0+bmFtZSgpLCBzdWNjZXNzQ2FsbGJhY2ssIGVycm9yQ2FsbGJh
Y2spKTsKK30KKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCisjZW5kaWYgLy8gRU5BQkxFKEZJ
TEVfU1lTVEVNKQpJbmRleDogU291cmNlL1dlYkNvcmUvTW9kdWxlcy9maWxlc3lzdGVtL0RPTUZp
bGVTeXN0ZW0uaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2ZpbGVzeXN0
ZW0vRE9NRmlsZVN5c3RlbS5oCShyZXZpc2lvbiAxMTA4NTYpCShmcm9tIFNvdXJjZS9XZWJDb3Jl
L2ZpbGVhcGkvRE9NRmlsZVN5c3RlbS5oOjExMDg1NikKKysrIFNvdXJjZS9XZWJDb3JlL01vZHVs
ZXMvZmlsZXN5c3RlbS9ET01GaWxlU3lzdGVtLmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwx
MDkgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTAgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmlu
YXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRl
ZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUKKyAqIG1ldDoKKyAq
CisgKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhl
IGFib3ZlIGNvcHlyaWdodAorICogbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogICAgICogUmVkaXN0cmlidXRpb25zIGluIGJp
bmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQorICogY29weXJpZ2h0IG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lcgorICog
aW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRo
IHRoZQorICogZGlzdHJpYnV0aW9uLgorICogICAgICogTmVpdGhlciB0aGUgbmFtZSBvZiBHb29n
bGUgSW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0cworICogY29udHJpYnV0b3JzIG1heSBiZSB1c2Vk
IHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20KKyAqIHRoaXMgc29m
dHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICog
VEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENP
TlRSSUJVVE9SUworICogIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5U
SUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJB
TlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgorICogQSBQQVJUSUNVTEFS
IFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQK
KyAqIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElS
RUNULCBJTkNJREVOVEFMLAorICogU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFM
IERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQg
T0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCisgKiBEQVRBLCBP
UiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBP
TiBBTlkKKyAqIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklD
VCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJ
U0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FS
RSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAq
LworCisjaWZuZGVmIERPTUZpbGVTeXN0ZW1faAorI2RlZmluZSBET01GaWxlU3lzdGVtX2gKKwor
I2lmIEVOQUJMRShGSUxFX1NZU1RFTSkKKworI2luY2x1ZGUgIkFjdGl2ZURPTU9iamVjdC5oIgor
I2luY2x1ZGUgIkRPTUZpbGVTeXN0ZW1CYXNlLmgiCisjaW5jbHVkZSAiU2NyaXB0RXhlY3V0aW9u
Q29udGV4dC5oIgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK2NsYXNzIERpcmVjdG9yeUVudHJ5
OworY2xhc3MgRmlsZTsKK2NsYXNzIEZpbGVDYWxsYmFjazsKK2NsYXNzIEZpbGVFbnRyeTsKK2Ns
YXNzIEZpbGVXcml0ZXJDYWxsYmFjazsKKworY2xhc3MgRE9NRmlsZVN5c3RlbSA6IHB1YmxpYyBE
T01GaWxlU3lzdGVtQmFzZSwgcHVibGljIEFjdGl2ZURPTU9iamVjdCB7CitwdWJsaWM6CisgICAg
c3RhdGljIFBhc3NSZWZQdHI8RE9NRmlsZVN5c3RlbT4gY3JlYXRlKFNjcmlwdEV4ZWN1dGlvbkNv
bnRleHQqLCBjb25zdCBTdHJpbmcmIG5hbWUsIFBhc3NPd25QdHI8QXN5bmNGaWxlU3lzdGVtPik7
CisKKyAgICBQYXNzUmVmUHRyPERpcmVjdG9yeUVudHJ5PiByb290KCk7CisKKyAgICAvLyBBY3Rp
dmVET01PYmplY3QgbWV0aG9kcy4KKyAgICB2aXJ0dWFsIHZvaWQgc3RvcCgpOworICAgIHZpcnR1
YWwgYm9vbCBoYXNQZW5kaW5nQWN0aXZpdHkoKSBjb25zdDsKKyAgICB2aXJ0dWFsIHZvaWQgY29u
dGV4dERlc3Ryb3llZCgpOworCisgICAgdm9pZCBjcmVhdGVXcml0ZXIoY29uc3QgRmlsZUVudHJ5
KiwgUGFzc1JlZlB0cjxGaWxlV3JpdGVyQ2FsbGJhY2s+LCBQYXNzUmVmUHRyPEVycm9yQ2FsbGJh
Y2s+KTsKKyAgICB2b2lkIGNyZWF0ZUZpbGUoY29uc3QgRmlsZUVudHJ5KiwgUGFzc1JlZlB0cjxG
aWxlQ2FsbGJhY2s+LCBQYXNzUmVmUHRyPEVycm9yQ2FsbGJhY2s+KTsKKworICAgIC8vIFNjaGVk
dWxlIGEgY2FsbGJhY2suIFRoaXMgc2hvdWxkIG5vdCBjcm9zcyB0aHJlYWRzIChzaG91bGQgYmUg
Y2FsbGVkIG9uIHRoZSBzYW1lIGNvbnRleHQgdGhyZWFkKS4KKyAgICAvLyBGSVhNRTogbW92ZSB0
aGlzIHRvIGEgbW9yZSBnZW5lcmljIHBsYWNlLgorICAgIHRlbXBsYXRlIDx0eXBlbmFtZSBDQiwg
dHlwZW5hbWUgQ0JBcmc+CisgICAgc3RhdGljIHZvaWQgc2NoZWR1bGVDYWxsYmFjayhTY3JpcHRF
eGVjdXRpb25Db250ZXh0KiwgUGFzc1JlZlB0cjxDQj4sIFBhc3NSZWZQdHI8Q0JBcmc+KTsKKwor
ICAgIHRlbXBsYXRlIDx0eXBlbmFtZSBDQiwgdHlwZW5hbWUgQ0JBcmc+CisgICAgdm9pZCBzY2hl
ZHVsZUNhbGxiYWNrKFBhc3NSZWZQdHI8Q0I+IGNhbGxiYWNrLCBQYXNzUmVmUHRyPENCQXJnPiBj
YWxsYmFja0FyZykKKyAgICB7CisgICAgICAgIHNjaGVkdWxlQ2FsbGJhY2soc2NyaXB0RXhlY3V0
aW9uQ29udGV4dCgpLCBjYWxsYmFjaywgY2FsbGJhY2tBcmcpOworICAgIH0KKworcHJpdmF0ZToK
KyAgICBET01GaWxlU3lzdGVtKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqLCBjb25zdCBTdHJpbmcm
IG5hbWUsIFBhc3NPd25QdHI8QXN5bmNGaWxlU3lzdGVtPik7CisKKyAgICAvLyBBIGhlbHBlciB0
ZW1wbGF0ZSB0byBzY2hlZHVsZSBhIGNhbGxiYWNrIHRhc2suCisgICAgdGVtcGxhdGUgPHR5cGVu
YW1lIENCLCB0eXBlbmFtZSBDQkFyZz4KKyAgICBjbGFzcyBEaXNwYXRjaENhbGxiYWNrVGFzayA6
IHB1YmxpYyBTY3JpcHRFeGVjdXRpb25Db250ZXh0OjpUYXNrIHsKKyAgICBwdWJsaWM6CisgICAg
ICAgIERpc3BhdGNoQ2FsbGJhY2tUYXNrKFBhc3NSZWZQdHI8Q0I+IGNhbGxiYWNrLCBQYXNzUmVm
UHRyPENCQXJnPiBhcmcpCisgICAgICAgICAgICA6IG1fY2FsbGJhY2soY2FsbGJhY2spCisgICAg
ICAgICAgICAsIG1fY2FsbGJhY2tBcmcoYXJnKQorICAgICAgICB7CisgICAgICAgIH0KKworICAg
ICAgICB2aXJ0dWFsIHZvaWQgcGVyZm9ybVRhc2soU2NyaXB0RXhlY3V0aW9uQ29udGV4dCopCisg
ICAgICAgIHsKKyAgICAgICAgICAgIG1fY2FsbGJhY2stPmhhbmRsZUV2ZW50KG1fY2FsbGJhY2tB
cmcuZ2V0KCkpOworICAgICAgICB9CisKKyAgICBwcml2YXRlOgorICAgICAgICBSZWZQdHI8Q0I+
IG1fY2FsbGJhY2s7CisgICAgICAgIFJlZlB0cjxDQkFyZz4gbV9jYWxsYmFja0FyZzsKKyAgICB9
OworfTsKKwordGVtcGxhdGUgPHR5cGVuYW1lIENCLCB0eXBlbmFtZSBDQkFyZz4KK3ZvaWQgRE9N
RmlsZVN5c3RlbTo6c2NoZWR1bGVDYWxsYmFjayhTY3JpcHRFeGVjdXRpb25Db250ZXh0KiBzY3Jp
cHRFeGVjdXRpb25Db250ZXh0LCBQYXNzUmVmUHRyPENCPiBjYWxsYmFjaywgUGFzc1JlZlB0cjxD
QkFyZz4gYXJnKQoreworICAgIEFTU0VSVChzY3JpcHRFeGVjdXRpb25Db250ZXh0LT5pc0NvbnRl
eHRUaHJlYWQoKSk7CisgICAgaWYgKGNhbGxiYWNrKQorICAgICAgICBzY3JpcHRFeGVjdXRpb25D
b250ZXh0LT5wb3N0VGFzayhhZG9wdFB0cihuZXcgRGlzcGF0Y2hDYWxsYmFja1Rhc2s8Q0IsIENC
QXJnPihjYWxsYmFjaywgYXJnKSkpOworfQorCit9IC8vIG5hbWVzcGFjZQorCisjZW5kaWYgLy8g
RU5BQkxFKEZJTEVfU1lTVEVNKQorCisjZW5kaWYgLy8gRE9NRmlsZVN5c3RlbV9oCkluZGV4OiBT
b3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2ZpbGVzeXN0ZW0vRE9NRmlsZVN5c3RlbS5pZGwKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1dlYkNvcmUvTW9kdWxlcy9maWxlc3lzdGVtL0RPTUZpbGVTeXN0ZW0u
aWRsCShyZXZpc2lvbiAxMTA4NTYpCShmcm9tIFNvdXJjZS9XZWJDb3JlL2ZpbGVhcGkvRE9NRmls
ZVN5c3RlbS5pZGw6MTEwODU2KQorKysgU291cmNlL1dlYkNvcmUvTW9kdWxlcy9maWxlc3lzdGVt
L0RPTUZpbGVTeXN0ZW0uaWRsCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNDEgQEAKKy8qCisg
KiBDb3B5cmlnaHQgKEMpIDIwMTAgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAq
IENvcHlyaWdodCAoQykgMjAxMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgor
ICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0
aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhh
dCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCisgKiBtZXQ6CisgKgorICogICAgICogUmVk
aXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lci4KKyAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0
IHJlcHJvZHVjZSB0aGUgYWJvdmUKKyAqIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIKKyAqIGluIHRoZSBkb2N1bWVu
dGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKKyAqIGRpc3Ry
aWJ1dGlvbi4KKyAqICAgICAqIE5laXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xlIEluYy4gbm9yIHRo
ZSBuYW1lcyBvZiBpdHMKKyAqIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9y
IHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tCisgKiB0aGlzIHNvZnR3YXJlIHdpdGhvdXQg
c3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUg
SVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKKyAq
ICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5H
LCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNI
QU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IKKyAqIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBE
SVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCisgKiBPV05FUiBPUiBD
T05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRB
TCwKKyAqIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNM
VURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUg
R09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAorICogREFUQSwgT1IgUFJPRklUUzsgT1Ig
QlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCisgKiBUSEVP
UlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBP
UiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElO
IEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURW
SVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworbW9kdWxlIHN0
b3JhZ2UgeworICAgIGludGVyZmFjZSBbCisgICAgICAgIENvbmRpdGlvbmFsPUZJTEVfU1lTVEVN
LAorICAgICAgICBBY3RpdmVET01PYmplY3QsCisgICAgICAgIEpTTm9TdGF0aWNUYWJsZXMKKyAg
ICBdIERPTUZpbGVTeXN0ZW0geworICAgICAgICByZWFkb25seSBhdHRyaWJ1dGUgRE9NU3RyaW5n
IG5hbWU7CisgICAgICAgIHJlYWRvbmx5IGF0dHJpYnV0ZSBEaXJlY3RvcnlFbnRyeSByb290Owor
ICAgIH07Cit9CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2ZpbGVzeXN0ZW0vRE9NRmls
ZVN5c3RlbUJhc2UuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvZmls
ZXN5c3RlbS9ET01GaWxlU3lzdGVtQmFzZS5jcHAJKHJldmlzaW9uIDExMDg1NikJKGZyb20gU291
cmNlL1dlYkNvcmUvZmlsZWFwaS9ET01GaWxlU3lzdGVtQmFzZS5jcHA6MTEwODU2KQorKysgU291
cmNlL1dlYkNvcmUvTW9kdWxlcy9maWxlc3lzdGVtL0RPTUZpbGVTeXN0ZW1CYXNlLmNwcAkod29y
a2luZyBjb3B5KQpAQCAtMCwwICsxLDIwMSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMCBH
b29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFu
ZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9k
aWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25k
aXRpb25zIGFyZQorICogbWV0OgorICoKKyAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3Vy
Y2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAgICAg
KiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3Zl
CisgKiBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyCisgKiBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIg
bWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCisgKiBkaXN0cmlidXRpb24uCisgKiAgICAgKiBO
ZWl0aGVyIHRoZSBuYW1lIG9mIEdvb2dsZSBJbmMuIG5vciB0aGUgbmFtZXMgb2YgaXRzCisgKiBj
b250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRl
cml2ZWQgZnJvbQorICogdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0
ZW4gcGVybWlzc2lvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBD
T1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCisgKiAiQVMgSVMiIEFORCBBTlkgRVhQ
UkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRF
RCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5F
U1MgRk9SCisgKiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZF
TlQgU0hBTEwgVEhFIENPUFlSSUdIVAorICogT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJM
RSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCisgKiBTUEVDSUFMLCBFWEVN
UExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCisgKiBM
SU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBM
T1NTIE9GIFVTRSwKKyAqIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElP
TikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQorICogVEhFT1JZIE9GIExJQUJJTElUWSwgV0hF
VEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElO
RyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUg
VVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklM
SVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRl
ICJET01GaWxlU3lzdGVtQmFzZS5oIgorCisjaWYgRU5BQkxFKEZJTEVfU1lTVEVNKQorCisjaW5j
bHVkZSAiRE9NRmlsZVBhdGguaCIKKyNpbmNsdWRlICJEaXJlY3RvcnlFbnRyeS5oIgorI2luY2x1
ZGUgIkRpcmVjdG9yeVJlYWRlckJhc2UuaCIKKyNpbmNsdWRlICJFbnRyaWVzQ2FsbGJhY2suaCIK
KyNpbmNsdWRlICJFbnRyeUFycmF5LmgiCisjaW5jbHVkZSAiRW50cnlCYXNlLmgiCisjaW5jbHVk
ZSAiRW50cnlDYWxsYmFjay5oIgorI2luY2x1ZGUgIkVycm9yQ2FsbGJhY2suaCIKKyNpbmNsdWRl
ICJGaWxlRXJyb3IuaCIKKyNpbmNsdWRlICJGaWxlU3lzdGVtQ2FsbGJhY2tzLmgiCisjaW5jbHVk
ZSAiTWV0YWRhdGFDYWxsYmFjay5oIgorI2luY2x1ZGUgIlNjcmlwdEV4ZWN1dGlvbkNvbnRleHQu
aCIKKyNpbmNsdWRlICJWb2lkQ2FsbGJhY2suaCIKKyNpbmNsdWRlIDx3dGYvT3duUHRyLmg+CisK
K25hbWVzcGFjZSBXZWJDb3JlIHsKKworRE9NRmlsZVN5c3RlbUJhc2U6OkRPTUZpbGVTeXN0ZW1C
YXNlKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqIGNvbnRleHQsIGNvbnN0IFN0cmluZyYgbmFtZSwg
UGFzc093blB0cjxBc3luY0ZpbGVTeXN0ZW0+IGFzeW5jRmlsZVN5c3RlbSkKKyAgICA6IG1fY29u
dGV4dChjb250ZXh0KQorICAgICwgbV9uYW1lKG5hbWUpCisgICAgLCBtX2FzeW5jRmlsZVN5c3Rl
bShhc3luY0ZpbGVTeXN0ZW0pCit7Cit9CisKK0RPTUZpbGVTeXN0ZW1CYXNlOjp+RE9NRmlsZVN5
c3RlbUJhc2UoKQoreworfQorCitTZWN1cml0eU9yaWdpbiogRE9NRmlsZVN5c3RlbUJhc2U6OnNl
Y3VyaXR5T3JpZ2luKCkgY29uc3QKK3sKKyAgICByZXR1cm4gbV9jb250ZXh0LT5zZWN1cml0eU9y
aWdpbigpOworfQorCitib29sIERPTUZpbGVTeXN0ZW1CYXNlOjpnZXRNZXRhZGF0YShjb25zdCBF
bnRyeUJhc2UqIGVudHJ5LCBQYXNzUmVmUHRyPE1ldGFkYXRhQ2FsbGJhY2s+IHN1Y2Nlc3NDYWxs
YmFjaywgUGFzc1JlZlB0cjxFcnJvckNhbGxiYWNrPiBlcnJvckNhbGxiYWNrKQoreworICAgIG1f
YXN5bmNGaWxlU3lzdGVtLT5yZWFkTWV0YWRhdGEoZW50cnktPmZ1bGxQYXRoKCksIE1ldGFkYXRh
Q2FsbGJhY2tzOjpjcmVhdGUoc3VjY2Vzc0NhbGxiYWNrLCBlcnJvckNhbGxiYWNrKSk7CisgICAg
cmV0dXJuIHRydWU7Cit9CisKK3N0YXRpYyBib29sIHZlcmlmeUFuZEdldERlc3RpbmF0aW9uUGF0
aEZvckNvcHlPck1vdmUoY29uc3QgRW50cnlCYXNlKiBzb3VyY2UsIEVudHJ5QmFzZSogcGFyZW50
LCBjb25zdCBTdHJpbmcmIG5ld05hbWUsIFN0cmluZyYgZGVzdGluYXRpb25QYXRoKQoreworICAg
IEFTU0VSVChzb3VyY2UpOworCisgICAgaWYgKCFwYXJlbnQgfHwgIXBhcmVudC0+aXNEaXJlY3Rv
cnkoKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgaWYgKCFuZXdOYW1lLmlzRW1wdHko
KSAmJiAhRE9NRmlsZVBhdGg6OmlzVmFsaWROYW1lKG5ld05hbWUpKQorICAgICAgICByZXR1cm4g
ZmFsc2U7CisKKyAgICAvLyBJdCBpcyBhbiBlcnJvciB0byB0cnkgdG8gY29weSBvciBtb3ZlIGFu
IGVudHJ5IGluc2lkZSBpdHNlbGYgYXQgYW55IGRlcHRoIGlmIGl0IGlzIGEgZGlyZWN0b3J5Lgor
ICAgIGlmIChzb3VyY2UtPmlzRGlyZWN0b3J5KCkgJiYgRE9NRmlsZVBhdGg6OmlzUGFyZW50T2Yo
c291cmNlLT5mdWxsUGF0aCgpLCBwYXJlbnQtPmZ1bGxQYXRoKCkpKQorICAgICAgICByZXR1cm4g
ZmFsc2U7CisKKyAgICAvLyBJdCBpcyBhbiBlcnJvciB0byBjb3B5IG9yIG1vdmUgYW4gZW50cnkg
aW50byBpdHMgcGFyZW50IGlmIGEgbmFtZSBkaWZmZXJlbnQgZnJvbSBpdHMgY3VycmVudCBvbmUg
aXNuJ3QgcHJvdmlkZWQuCisgICAgaWYgKChuZXdOYW1lLmlzRW1wdHkoKSB8fCBzb3VyY2UtPm5h
bWUoKSA9PSBuZXdOYW1lKSAmJiBET01GaWxlUGF0aDo6Z2V0RGlyZWN0b3J5KHNvdXJjZS0+ZnVs
bFBhdGgoKSkgPT0gcGFyZW50LT5mdWxsUGF0aCgpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisK
KyAgICBkZXN0aW5hdGlvblBhdGggPSBwYXJlbnQtPmZ1bGxQYXRoKCk7CisgICAgaWYgKCFuZXdO
YW1lLmlzRW1wdHkoKSkKKyAgICAgICAgZGVzdGluYXRpb25QYXRoID0gRE9NRmlsZVBhdGg6OmFw
cGVuZChkZXN0aW5hdGlvblBhdGgsIG5ld05hbWUpOworICAgIGVsc2UKKyAgICAgICAgZGVzdGlu
YXRpb25QYXRoID0gRE9NRmlsZVBhdGg6OmFwcGVuZChkZXN0aW5hdGlvblBhdGgsIHNvdXJjZS0+
bmFtZSgpKTsKKworICAgIHJldHVybiB0cnVlOworfQorCitzdGF0aWMgYm9vbCBwYXRoVG9BYnNv
bHV0ZVBhdGgoQXN5bmNGaWxlU3lzdGVtOjpUeXBlIHR5cGUsIGNvbnN0IEVudHJ5QmFzZSogYmFz
ZSwgU3RyaW5nIHBhdGgsIFN0cmluZyYgYWJzb2x1dGVQYXRoKQoreworICAgIEFTU0VSVChiYXNl
KTsKKworICAgIGlmICghRE9NRmlsZVBhdGg6OmlzQWJzb2x1dGUocGF0aCkpCisgICAgICAgIHBh
dGggPSBET01GaWxlUGF0aDo6YXBwZW5kKGJhc2UtPmZ1bGxQYXRoKCksIHBhdGgpOworICAgIGFi
c29sdXRlUGF0aCA9IERPTUZpbGVQYXRoOjpyZW1vdmVFeHRyYVBhcmVudFJlZmVyZW5jZXMocGF0
aCk7CisKKyAgICBpZiAoKHR5cGUgPT0gQXN5bmNGaWxlU3lzdGVtOjpUZW1wb3JhcnkgfHwgdHlw
ZSA9PSBBc3luY0ZpbGVTeXN0ZW06OlBlcnNpc3RlbnQpICYmICFET01GaWxlUGF0aDo6aXNWYWxp
ZFBhdGgoYWJzb2x1dGVQYXRoKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIHJldHVybiB0
cnVlOworfQorCitib29sIERPTUZpbGVTeXN0ZW1CYXNlOjptb3ZlKGNvbnN0IEVudHJ5QmFzZSog
c291cmNlLCBFbnRyeUJhc2UqIHBhcmVudCwgY29uc3QgU3RyaW5nJiBuZXdOYW1lLCBQYXNzUmVm
UHRyPEVudHJ5Q2FsbGJhY2s+IHN1Y2Nlc3NDYWxsYmFjaywgUGFzc1JlZlB0cjxFcnJvckNhbGxi
YWNrPiBlcnJvckNhbGxiYWNrKQoreworICAgIFN0cmluZyBkZXN0aW5hdGlvblBhdGg7CisgICAg
aWYgKCF2ZXJpZnlBbmRHZXREZXN0aW5hdGlvblBhdGhGb3JDb3B5T3JNb3ZlKHNvdXJjZSwgcGFy
ZW50LCBuZXdOYW1lLCBkZXN0aW5hdGlvblBhdGgpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisK
KyAgICBtX2FzeW5jRmlsZVN5c3RlbS0+bW92ZShzb3VyY2UtPmZ1bGxQYXRoKCksIGRlc3RpbmF0
aW9uUGF0aCwgRW50cnlDYWxsYmFja3M6OmNyZWF0ZShzdWNjZXNzQ2FsbGJhY2ssIGVycm9yQ2Fs
bGJhY2ssIHRoaXMsIGRlc3RpbmF0aW9uUGF0aCwgc291cmNlLT5pc0RpcmVjdG9yeSgpKSk7Cisg
ICAgcmV0dXJuIHRydWU7Cit9CisKK2Jvb2wgRE9NRmlsZVN5c3RlbUJhc2U6OmNvcHkoY29uc3Qg
RW50cnlCYXNlKiBzb3VyY2UsIEVudHJ5QmFzZSogcGFyZW50LCBjb25zdCBTdHJpbmcmIG5ld05h
bWUsIFBhc3NSZWZQdHI8RW50cnlDYWxsYmFjaz4gc3VjY2Vzc0NhbGxiYWNrLCBQYXNzUmVmUHRy
PEVycm9yQ2FsbGJhY2s+IGVycm9yQ2FsbGJhY2spCit7CisgICAgU3RyaW5nIGRlc3RpbmF0aW9u
UGF0aDsKKyAgICBpZiAoIXZlcmlmeUFuZEdldERlc3RpbmF0aW9uUGF0aEZvckNvcHlPck1vdmUo
c291cmNlLCBwYXJlbnQsIG5ld05hbWUsIGRlc3RpbmF0aW9uUGF0aCkpCisgICAgICAgIHJldHVy
biBmYWxzZTsKKworICAgIG1fYXN5bmNGaWxlU3lzdGVtLT5jb3B5KHNvdXJjZS0+ZnVsbFBhdGgo
KSwgZGVzdGluYXRpb25QYXRoLCBFbnRyeUNhbGxiYWNrczo6Y3JlYXRlKHN1Y2Nlc3NDYWxsYmFj
aywgZXJyb3JDYWxsYmFjaywgdGhpcywgZGVzdGluYXRpb25QYXRoLCBzb3VyY2UtPmlzRGlyZWN0
b3J5KCkpKTsKKyAgICByZXR1cm4gdHJ1ZTsKK30KKworYm9vbCBET01GaWxlU3lzdGVtQmFzZTo6
cmVtb3ZlKGNvbnN0IEVudHJ5QmFzZSogZW50cnksIFBhc3NSZWZQdHI8Vm9pZENhbGxiYWNrPiBz
dWNjZXNzQ2FsbGJhY2ssIFBhc3NSZWZQdHI8RXJyb3JDYWxsYmFjaz4gZXJyb3JDYWxsYmFjaykK
K3sKKyAgICBBU1NFUlQoZW50cnkpOworICAgIC8vIFdlIGRvbid0IGFsbG93IGNhbGxpbmcgcmVt
b3ZlKCkgb24gdGhlIHJvb3QgZGlyZWN0b3J5LgorICAgIGlmIChlbnRyeS0+ZnVsbFBhdGgoKSA9
PSBTdHJpbmcoRE9NRmlsZVBhdGg6OnJvb3QpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAg
bV9hc3luY0ZpbGVTeXN0ZW0tPnJlbW92ZShlbnRyeS0+ZnVsbFBhdGgoKSwgVm9pZENhbGxiYWNr
czo6Y3JlYXRlKHN1Y2Nlc3NDYWxsYmFjaywgZXJyb3JDYWxsYmFjaykpOworICAgIHJldHVybiB0
cnVlOworfQorCitib29sIERPTUZpbGVTeXN0ZW1CYXNlOjpyZW1vdmVSZWN1cnNpdmVseShjb25z
dCBFbnRyeUJhc2UqIGVudHJ5LCBQYXNzUmVmUHRyPFZvaWRDYWxsYmFjaz4gc3VjY2Vzc0NhbGxi
YWNrLCBQYXNzUmVmUHRyPEVycm9yQ2FsbGJhY2s+IGVycm9yQ2FsbGJhY2spCit7CisgICAgQVNT
RVJUKGVudHJ5ICYmIGVudHJ5LT5pc0RpcmVjdG9yeSgpKTsKKyAgICAvLyBXZSBkb24ndCBhbGxv
dyBjYWxsaW5nIHJlbW92ZSgpIG9uIHRoZSByb290IGRpcmVjdG9yeS4KKyAgICBpZiAoZW50cnkt
PmZ1bGxQYXRoKCkgPT0gU3RyaW5nKERPTUZpbGVQYXRoOjpyb290KSkKKyAgICAgICAgcmV0dXJu
IGZhbHNlOworICAgIG1fYXN5bmNGaWxlU3lzdGVtLT5yZW1vdmVSZWN1cnNpdmVseShlbnRyeS0+
ZnVsbFBhdGgoKSwgVm9pZENhbGxiYWNrczo6Y3JlYXRlKHN1Y2Nlc3NDYWxsYmFjaywgZXJyb3JD
YWxsYmFjaykpOworICAgIHJldHVybiB0cnVlOworfQorCitib29sIERPTUZpbGVTeXN0ZW1CYXNl
OjpnZXRQYXJlbnQoY29uc3QgRW50cnlCYXNlKiBlbnRyeSwgUGFzc1JlZlB0cjxFbnRyeUNhbGxi
YWNrPiBzdWNjZXNzQ2FsbGJhY2ssIFBhc3NSZWZQdHI8RXJyb3JDYWxsYmFjaz4gZXJyb3JDYWxs
YmFjaykKK3sKKyAgICBBU1NFUlQoZW50cnkpOworICAgIFN0cmluZyBwYXRoID0gRE9NRmlsZVBh
dGg6OmdldERpcmVjdG9yeShlbnRyeS0+ZnVsbFBhdGgoKSk7CisKKyAgICBtX2FzeW5jRmlsZVN5
c3RlbS0+ZGlyZWN0b3J5RXhpc3RzKHBhdGgsIEVudHJ5Q2FsbGJhY2tzOjpjcmVhdGUoc3VjY2Vz
c0NhbGxiYWNrLCBlcnJvckNhbGxiYWNrLCB0aGlzLCBwYXRoLCB0cnVlKSk7CisgICAgcmV0dXJu
IHRydWU7Cit9CisKK2Jvb2wgRE9NRmlsZVN5c3RlbUJhc2U6OmdldEZpbGUoY29uc3QgRW50cnlC
YXNlKiBlbnRyeSwgY29uc3QgU3RyaW5nJiBwYXRoLCBQYXNzUmVmUHRyPFdlYktpdEZsYWdzPiBm
bGFncywgUGFzc1JlZlB0cjxFbnRyeUNhbGxiYWNrPiBzdWNjZXNzQ2FsbGJhY2ssIFBhc3NSZWZQ
dHI8RXJyb3JDYWxsYmFjaz4gZXJyb3JDYWxsYmFjaykKK3sKKyAgICBTdHJpbmcgYWJzb2x1dGVQ
YXRoOworICAgIGlmICghcGF0aFRvQWJzb2x1dGVQYXRoKG1fYXN5bmNGaWxlU3lzdGVtLT50eXBl
KCksIGVudHJ5LCBwYXRoLCBhYnNvbHV0ZVBhdGgpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisK
KyAgICBPd25QdHI8RW50cnlDYWxsYmFja3M+IGNhbGxiYWNrcyA9IEVudHJ5Q2FsbGJhY2tzOjpj
cmVhdGUoc3VjY2Vzc0NhbGxiYWNrLCBlcnJvckNhbGxiYWNrLCB0aGlzLCBhYnNvbHV0ZVBhdGgs
IGZhbHNlKTsKKyAgICBpZiAoZmxhZ3MgJiYgZmxhZ3MtPmlzQ3JlYXRlKCkpCisgICAgICAgIG1f
YXN5bmNGaWxlU3lzdGVtLT5jcmVhdGVGaWxlKGFic29sdXRlUGF0aCwgZmxhZ3MtPmlzRXhjbHVz
aXZlKCksIGNhbGxiYWNrcy5yZWxlYXNlKCkpOworICAgIGVsc2UKKyAgICAgICAgbV9hc3luY0Zp
bGVTeXN0ZW0tPmZpbGVFeGlzdHMoYWJzb2x1dGVQYXRoLCBjYWxsYmFja3MucmVsZWFzZSgpKTsK
KyAgICByZXR1cm4gdHJ1ZTsKK30KKworYm9vbCBET01GaWxlU3lzdGVtQmFzZTo6Z2V0RGlyZWN0
b3J5KGNvbnN0IEVudHJ5QmFzZSogZW50cnksIGNvbnN0IFN0cmluZyYgcGF0aCwgUGFzc1JlZlB0
cjxXZWJLaXRGbGFncz4gZmxhZ3MsIFBhc3NSZWZQdHI8RW50cnlDYWxsYmFjaz4gc3VjY2Vzc0Nh
bGxiYWNrLCBQYXNzUmVmUHRyPEVycm9yQ2FsbGJhY2s+IGVycm9yQ2FsbGJhY2spCit7CisgICAg
U3RyaW5nIGFic29sdXRlUGF0aDsKKyAgICBpZiAoIXBhdGhUb0Fic29sdXRlUGF0aChtX2FzeW5j
RmlsZVN5c3RlbS0+dHlwZSgpLCBlbnRyeSwgcGF0aCwgYWJzb2x1dGVQYXRoKSkKKyAgICAgICAg
cmV0dXJuIGZhbHNlOworCisgICAgT3duUHRyPEVudHJ5Q2FsbGJhY2tzPiBjYWxsYmFja3MgPSBF
bnRyeUNhbGxiYWNrczo6Y3JlYXRlKHN1Y2Nlc3NDYWxsYmFjaywgZXJyb3JDYWxsYmFjaywgdGhp
cywgYWJzb2x1dGVQYXRoLCB0cnVlKTsKKyAgICBpZiAoZmxhZ3MgJiYgZmxhZ3MtPmlzQ3JlYXRl
KCkpCisgICAgICAgIG1fYXN5bmNGaWxlU3lzdGVtLT5jcmVhdGVEaXJlY3RvcnkoYWJzb2x1dGVQ
YXRoLCBmbGFncy0+aXNFeGNsdXNpdmUoKSwgY2FsbGJhY2tzLnJlbGVhc2UoKSk7CisgICAgZWxz
ZQorICAgICAgICBtX2FzeW5jRmlsZVN5c3RlbS0+ZGlyZWN0b3J5RXhpc3RzKGFic29sdXRlUGF0
aCwgY2FsbGJhY2tzLnJlbGVhc2UoKSk7CisgICAgcmV0dXJuIHRydWU7Cit9CisKK2Jvb2wgRE9N
RmlsZVN5c3RlbUJhc2U6OnJlYWREaXJlY3RvcnkoUGFzc1JlZlB0cjxEaXJlY3RvcnlSZWFkZXJC
YXNlPiByZWFkZXIsIGNvbnN0IFN0cmluZyYgcGF0aCwgUGFzc1JlZlB0cjxFbnRyaWVzQ2FsbGJh
Y2s+IHN1Y2Nlc3NDYWxsYmFjaywgUGFzc1JlZlB0cjxFcnJvckNhbGxiYWNrPiBlcnJvckNhbGxi
YWNrKQoreworICAgIEFTU0VSVChET01GaWxlUGF0aDo6aXNBYnNvbHV0ZShwYXRoKSk7CisgICAg
bV9hc3luY0ZpbGVTeXN0ZW0tPnJlYWREaXJlY3RvcnkocGF0aCwgRW50cmllc0NhbGxiYWNrczo6
Y3JlYXRlKHN1Y2Nlc3NDYWxsYmFjaywgZXJyb3JDYWxsYmFjaywgcmVhZGVyLCBwYXRoKSk7Cisg
ICAgcmV0dXJuIHRydWU7Cit9CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKworI2VuZGlmIC8v
IEVOQUJMRShGSUxFX1NZU1RFTSkKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvZmlsZXN5
c3RlbS9ET01GaWxlU3lzdGVtQmFzZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL01v
ZHVsZXMvZmlsZXN5c3RlbS9ET01GaWxlU3lzdGVtQmFzZS5oCShyZXZpc2lvbiAxMTA4NTYpCShm
cm9tIFNvdXJjZS9XZWJDb3JlL2ZpbGVhcGkvRE9NRmlsZVN5c3RlbUJhc2UuaDoxMTA4NTYpCisr
KyBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2ZpbGVzeXN0ZW0vRE9NRmlsZVN5c3RlbUJhc2UuaAko
d29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDk0IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEw
IEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24g
YW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBt
b2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNv
bmRpdGlvbnMgYXJlCisgKiBtZXQ6CisgKgorICogICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNv
dXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqICAg
ICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJv
dmUKKyAqIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIKKyAqIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhl
ciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKKyAqIGRpc3RyaWJ1dGlvbi4KKyAqICAgICAq
IE5laXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xlIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMKKyAq
IGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMg
ZGVyaXZlZCBmcm9tCisgKiB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3Jp
dHRlbiBwZXJtaXNzaW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhF
IENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKKyAqICJBUyBJUyIgQU5EIEFOWSBF
WFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1J
VEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklU
TkVTUyBGT1IKKyAqIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBF
VkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCisgKiBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElB
QkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKKyAqIFNQRUNJQUwsIEVY
RU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKKyAq
IExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7
IExPU1MgT0YgVVNFLAorICogREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBU
SU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCisgKiBUSEVPUlkgT0YgTElBQklMSVRZLCBX
SEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVE
SU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRI
RSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lC
SUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2lmbmRlZiBET01GaWxlU3lzdGVtQmFzZV9o
CisjZGVmaW5lIERPTUZpbGVTeXN0ZW1CYXNlX2gKKworI2lmIEVOQUJMRShGSUxFX1NZU1RFTSkK
KworI2luY2x1ZGUgIkFzeW5jRmlsZVN5c3RlbS5oIgorI2luY2x1ZGUgIldlYktpdEZsYWdzLmgi
CisjaW5jbHVkZSAiUGxhdGZvcm1TdHJpbmcuaCIKKyNpbmNsdWRlIDx3dGYvUGFzc1JlZlB0ci5o
PgorI2luY2x1ZGUgPHd0Zi9SZWZDb3VudGVkLmg+CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKwor
Y2xhc3MgRGlyZWN0b3J5RW50cnk7CitjbGFzcyBEaXJlY3RvcnlSZWFkZXJCYXNlOworY2xhc3Mg
RW50cmllc0NhbGxiYWNrOworY2xhc3MgRW50cnlCYXNlOworY2xhc3MgRW50cnlDYWxsYmFjazsK
K2NsYXNzIEVycm9yQ2FsbGJhY2s7CitjbGFzcyBLVVJMOworY2xhc3MgTWV0YWRhdGFDYWxsYmFj
azsKK2NsYXNzIFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQ7CitjbGFzcyBTZWN1cml0eU9yaWdpbjsK
K2NsYXNzIFZvaWRDYWxsYmFjazsKKworLy8gQSBjb21tb24gYmFzZSBjbGFzcyBmb3IgRE9NRmls
ZVN5c3RlbSBhbmQgRE9NRmlsZVN5c3RlbVN5bmMuCitjbGFzcyBET01GaWxlU3lzdGVtQmFzZSA6
IHB1YmxpYyBSZWZDb3VudGVkPERPTUZpbGVTeXN0ZW1CYXNlPiB7CitwdWJsaWM6CisgICAgc3Rh
dGljIFBhc3NSZWZQdHI8RE9NRmlsZVN5c3RlbUJhc2U+IGNyZWF0ZShTY3JpcHRFeGVjdXRpb25D
b250ZXh0KiBjb250ZXh0LCBjb25zdCBTdHJpbmcmIG5hbWUsIFBhc3NPd25QdHI8QXN5bmNGaWxl
U3lzdGVtPiBhc3luY0ZpbGVTeXN0ZW0pCisgICAgeworICAgICAgICByZXR1cm4gYWRvcHRSZWYo
bmV3IERPTUZpbGVTeXN0ZW1CYXNlKGNvbnRleHQsIG5hbWUsIGFzeW5jRmlsZVN5c3RlbSkpOwor
ICAgIH0KKyAgICB2aXJ0dWFsIH5ET01GaWxlU3lzdGVtQmFzZSgpOworCisgICAgY29uc3QgU3Ry
aW5nJiBuYW1lKCkgY29uc3QgeyByZXR1cm4gbV9uYW1lOyB9CisgICAgQXN5bmNGaWxlU3lzdGVt
KiBhc3luY0ZpbGVTeXN0ZW0oKSBjb25zdCB7IHJldHVybiBtX2FzeW5jRmlsZVN5c3RlbS5nZXQo
KTsgfQorICAgIFNlY3VyaXR5T3JpZ2luKiBzZWN1cml0eU9yaWdpbigpIGNvbnN0OworCisgICAg
Ly8gQWN0dWFsIEZpbGVTeXN0ZW0gQVBJIGltcGxlbWVudGF0aW9ucy4gIEFsbCB0aGUgdmFsaWRp
dHkgY2hlY2tzIG9uIHZpcnR1YWwgcGF0aHMgYXJlIGRvbmUgYXQgdGhpcyBsZXZlbC4KKyAgICAv
LyBUaGV5IHJldHVybiBmYWxzZSBmb3IgaW1tZWRpYXRlIGVycm9ycyB0aGF0IGRvbid0IGludm9s
dmUgbG93ZXIgQXN5bmNGaWxlU3lzdGVtIGxheWVyIChlLmcuIGZvciBuYW1lIHZhbGlkYXRpb24g
ZXJyb3JzKS4gIE90aGVyd2lzZSB0aGV5IHJldHVybiB0cnVlIChidXQgbGF0ZXIgbWF5IGNhbGwg
YmFjayB3aXRoIGFuIHJ1bnRpbWUgZXJyb3IpLgorICAgIGJvb2wgZ2V0TWV0YWRhdGEoY29uc3Qg
RW50cnlCYXNlKiwgUGFzc1JlZlB0cjxNZXRhZGF0YUNhbGxiYWNrPiwgUGFzc1JlZlB0cjxFcnJv
ckNhbGxiYWNrPik7CisgICAgYm9vbCBtb3ZlKGNvbnN0IEVudHJ5QmFzZSogc291cmNlLCBFbnRy
eUJhc2UqIHBhcmVudCwgY29uc3QgU3RyaW5nJiBuYW1lLCBQYXNzUmVmUHRyPEVudHJ5Q2FsbGJh
Y2s+LCBQYXNzUmVmUHRyPEVycm9yQ2FsbGJhY2s+KTsKKyAgICBib29sIGNvcHkoY29uc3QgRW50
cnlCYXNlKiBzb3VyY2UsIEVudHJ5QmFzZSogcGFyZW50LCBjb25zdCBTdHJpbmcmIG5hbWUsIFBh
c3NSZWZQdHI8RW50cnlDYWxsYmFjaz4sIFBhc3NSZWZQdHI8RXJyb3JDYWxsYmFjaz4pOworICAg
IGJvb2wgcmVtb3ZlKGNvbnN0IEVudHJ5QmFzZSosIFBhc3NSZWZQdHI8Vm9pZENhbGxiYWNrPiwg
UGFzc1JlZlB0cjxFcnJvckNhbGxiYWNrPik7CisgICAgYm9vbCByZW1vdmVSZWN1cnNpdmVseShj
b25zdCBFbnRyeUJhc2UqLCBQYXNzUmVmUHRyPFZvaWRDYWxsYmFjaz4sIFBhc3NSZWZQdHI8RXJy
b3JDYWxsYmFjaz4pOworICAgIGJvb2wgZ2V0UGFyZW50KGNvbnN0IEVudHJ5QmFzZSosIFBhc3NS
ZWZQdHI8RW50cnlDYWxsYmFjaz4sIFBhc3NSZWZQdHI8RXJyb3JDYWxsYmFjaz4pOworICAgIGJv
b2wgZ2V0RmlsZShjb25zdCBFbnRyeUJhc2UqLCBjb25zdCBTdHJpbmcmIHBhdGgsIFBhc3NSZWZQ
dHI8V2ViS2l0RmxhZ3M+LCBQYXNzUmVmUHRyPEVudHJ5Q2FsbGJhY2s+LCBQYXNzUmVmUHRyPEVy
cm9yQ2FsbGJhY2s+KTsKKyAgICBib29sIGdldERpcmVjdG9yeShjb25zdCBFbnRyeUJhc2UqLCBj
b25zdCBTdHJpbmcmIHBhdGgsIFBhc3NSZWZQdHI8V2ViS2l0RmxhZ3M+LCBQYXNzUmVmUHRyPEVu
dHJ5Q2FsbGJhY2s+LCBQYXNzUmVmUHRyPEVycm9yQ2FsbGJhY2s+KTsKKyAgICBib29sIHJlYWRE
aXJlY3RvcnkoUGFzc1JlZlB0cjxEaXJlY3RvcnlSZWFkZXJCYXNlPiwgY29uc3QgU3RyaW5nJiBw
YXRoLCBQYXNzUmVmUHRyPEVudHJpZXNDYWxsYmFjaz4sIFBhc3NSZWZQdHI8RXJyb3JDYWxsYmFj
az4pOworCitwcm90ZWN0ZWQ6CisgICAgRE9NRmlsZVN5c3RlbUJhc2UoU2NyaXB0RXhlY3V0aW9u
Q29udGV4dCosIGNvbnN0IFN0cmluZyYgbmFtZSwgUGFzc093blB0cjxBc3luY0ZpbGVTeXN0ZW0+
KTsKKyAgICBmcmllbmQgY2xhc3MgRE9NRmlsZVN5c3RlbVN5bmM7CisKKyAgICBTY3JpcHRFeGVj
dXRpb25Db250ZXh0KiBtX2NvbnRleHQ7CisgICAgU3RyaW5nIG1fbmFtZTsKKyAgICBtdXRhYmxl
IE93blB0cjxBc3luY0ZpbGVTeXN0ZW0+IG1fYXN5bmNGaWxlU3lzdGVtOworfTsKKworfSAvLyBu
YW1lc3BhY2UgV2ViQ29yZQorCisjZW5kaWYgLy8gRU5BQkxFKEZJTEVfU1lTVEVNKQorCisjZW5k
aWYgLy8gRE9NRmlsZVN5c3RlbUJhc2VfaApJbmRleDogU291cmNlL1dlYkNvcmUvTW9kdWxlcy9m
aWxlc3lzdGVtL0RPTUZpbGVTeXN0ZW1TeW5jLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9Nb2R1bGVzL2ZpbGVzeXN0ZW0vRE9NRmlsZVN5c3RlbVN5bmMuY3BwCShyZXZpc2lvbiAx
MTA4NTYpCShmcm9tIFNvdXJjZS9XZWJDb3JlL2ZpbGVhcGkvRE9NRmlsZVN5c3RlbVN5bmMuY3Bw
OjExMDg1NikKKysrIFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvZmlsZXN5c3RlbS9ET01GaWxlU3lz
dGVtU3luYy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwyNDMgQEAKKy8qCisgKiBDb3B5
cmlnaHQgKEMpIDIwMTAgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBS
ZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9y
IHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRo
ZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUKKyAqIG1ldDoKKyAqCisgKiAgICAgKiBSZWRpc3Ry
aWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAor
ICogbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyLgorICogICAgICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVw
cm9kdWNlIHRoZSBhYm92ZQorICogY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lcgorICogaW4gdGhlIGRvY3VtZW50YXRp
b24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQorICogZGlzdHJpYnV0
aW9uLgorICogICAgICogTmVpdGhlciB0aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBub3IgdGhlIG5h
bWVzIG9mIGl0cworICogY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJv
bW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20KKyAqIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVj
aWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQ
Uk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUworICogIkFT
IElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJV
VCBOT1QKKyAqIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRB
QklMSVRZIEFORCBGSVRORVNTIEZPUgorICogQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NM
QUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKKyAqIE9XTkVSIE9SIENPTlRS
SUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAor
ICogU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElO
RywgQlVUIE5PVAorICogTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09E
UyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCisgKiBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJ
TkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKKyAqIFRIRU9SWSBP
RiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRP
UlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5Z
IFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VE
IE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29u
ZmlnLmgiCisjaW5jbHVkZSAiRE9NRmlsZVN5c3RlbVN5bmMuaCIKKworI2lmIEVOQUJMRShGSUxF
X1NZU1RFTSkKKworI2luY2x1ZGUgIkFzeW5jRmlsZVN5c3RlbS5oIgorI2luY2x1ZGUgIkFzeW5j
RmlsZVdyaXRlci5oIgorI2luY2x1ZGUgIkRPTUZpbGVQYXRoLmgiCisjaW5jbHVkZSAiRGlyZWN0
b3J5RW50cnlTeW5jLmgiCisjaW5jbHVkZSAiRXJyb3JDYWxsYmFjay5oIgorI2luY2x1ZGUgIkZp
bGUuaCIKKyNpbmNsdWRlICJGaWxlRW50cnlTeW5jLmgiCisjaW5jbHVkZSAiRmlsZUVycm9yLmgi
CisjaW5jbHVkZSAiRmlsZUV4Y2VwdGlvbi5oIgorI2luY2x1ZGUgIkZpbGVNZXRhZGF0YS5oIgor
I2luY2x1ZGUgIkZpbGVTeXN0ZW1DYWxsYmFja3MuaCIKKyNpbmNsdWRlICJGaWxlV3JpdGVyQmFz
ZUNhbGxiYWNrLmgiCisjaW5jbHVkZSAiRmlsZVdyaXRlclN5bmMuaCIKKworbmFtZXNwYWNlIFdl
YkNvcmUgeworCitjbGFzcyBGaWxlV3JpdGVyQmFzZTsKKworUGFzc1JlZlB0cjxET01GaWxlU3lz
dGVtU3luYz4gRE9NRmlsZVN5c3RlbVN5bmM6OmNyZWF0ZShET01GaWxlU3lzdGVtQmFzZSogZmls
ZVN5c3RlbSkKK3sKKyAgICByZXR1cm4gYWRvcHRSZWYobmV3IERPTUZpbGVTeXN0ZW1TeW5jKGZp
bGVTeXN0ZW0tPm1fY29udGV4dCwgZmlsZVN5c3RlbS0+bV9uYW1lLCBmaWxlU3lzdGVtLT5tX2Fz
eW5jRmlsZVN5c3RlbS5yZWxlYXNlKCkpKTsKK30KKworRE9NRmlsZVN5c3RlbVN5bmM6OkRPTUZp
bGVTeXN0ZW1TeW5jKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqIGNvbnRleHQsIGNvbnN0IFN0cmlu
ZyYgbmFtZSwgUGFzc093blB0cjxBc3luY0ZpbGVTeXN0ZW0+IGFzeW5jRmlsZVN5c3RlbSkKKyAg
ICA6IERPTUZpbGVTeXN0ZW1CYXNlKGNvbnRleHQsIG5hbWUsIGFzeW5jRmlsZVN5c3RlbSkKK3sK
K30KKworRE9NRmlsZVN5c3RlbVN5bmM6On5ET01GaWxlU3lzdGVtU3luYygpCit7Cit9CisKK1Bh
c3NSZWZQdHI8RGlyZWN0b3J5RW50cnlTeW5jPiBET01GaWxlU3lzdGVtU3luYzo6cm9vdCgpCit7
CisgICAgcmV0dXJuIERpcmVjdG9yeUVudHJ5U3luYzo6Y3JlYXRlKHRoaXMsIERPTUZpbGVQYXRo
Ojpyb290KTsKK30KKworbmFtZXNwYWNlIHsKKworY2xhc3MgQ3JlYXRlRmlsZUhlbHBlciA6IHB1
YmxpYyBBc3luY0ZpbGVTeXN0ZW1DYWxsYmFja3MgeworcHVibGljOgorICAgIGNsYXNzIENyZWF0
ZUZpbGVSZXN1bHQgOiBwdWJsaWMgUmVmQ291bnRlZDxDcmVhdGVGaWxlUmVzdWx0PiB7CisgICAg
ICBwdWJsaWM6CisgICAgICAgIHN0YXRpYyBQYXNzUmVmUHRyPENyZWF0ZUZpbGVSZXN1bHQ+IGNy
ZWF0ZSgpCisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiBhZG9wdFJlZihuZXcgQ3JlYXRl
RmlsZVJlc3VsdCgpKTsKKyAgICAgICAgfQorCisgICAgICAgIGJvb2wgbV9mYWlsZWQ7CisgICAg
ICAgIGludCBtX2NvZGU7CisgICAgICAgIFJlZlB0cjxGaWxlPiBtX2ZpbGU7CisKKyAgICAgIHBy
aXZhdGU6CisgICAgICAgIENyZWF0ZUZpbGVSZXN1bHQoKQorICAgICAgICAgICAgOiBtX2ZhaWxl
ZChmYWxzZSkKKyAgICAgICAgICAgICwgbV9jb2RlKDApCisgICAgICAgIHsKKyAgICAgICAgfQor
CisgICAgICAgIH5DcmVhdGVGaWxlUmVzdWx0KCkKKyAgICAgICAgeworICAgICAgICB9CisgICAg
ICAgIGZyaWVuZCBjbGFzcyBXVEY6OlJlZkNvdW50ZWQ8Q3JlYXRlRmlsZVJlc3VsdD47CisgICAg
fTsKKworICAgIHN0YXRpYyBQYXNzT3duUHRyPENyZWF0ZUZpbGVIZWxwZXI+IGNyZWF0ZShQYXNz
UmVmUHRyPENyZWF0ZUZpbGVSZXN1bHQ+IHJlc3VsdCwgY29uc3QgU3RyaW5nJiBuYW1lKQorICAg
IHsKKyAgICAgICAgcmV0dXJuIGFkb3B0UHRyKG5ldyBDcmVhdGVGaWxlSGVscGVyKHJlc3VsdCwg
bmFtZSkpOworICAgIH0KKworICAgIHZpcnR1YWwgdm9pZCBkaWRGYWlsKGludCBjb2RlKQorICAg
IHsKKyAgICAgICAgbV9yZXN1bHQtPm1fZmFpbGVkID0gdHJ1ZTsKKyAgICAgICAgbV9yZXN1bHQt
Pm1fY29kZSA9IGNvZGU7CisgICAgfQorCisgICAgdmlydHVhbCB+Q3JlYXRlRmlsZUhlbHBlcigp
CisgICAgeworICAgIH0KKworICAgIHZvaWQgZGlkUmVhZE1ldGFkYXRhKGNvbnN0IEZpbGVNZXRh
ZGF0YSYgbWV0YWRhdGEpCisgICAgeworICAgICAgICBtX3Jlc3VsdC0+bV9maWxlID0gRmlsZTo6
Y3JlYXRlV2l0aE5hbWUobWV0YWRhdGEucGxhdGZvcm1QYXRoLCBtX25hbWUpOworICAgIH0KK3By
aXZhdGU6CisgICAgQ3JlYXRlRmlsZUhlbHBlcihQYXNzUmVmUHRyPENyZWF0ZUZpbGVSZXN1bHQ+
IHJlc3VsdCwgY29uc3QgU3RyaW5nJiBuYW1lKQorICAgICAgICA6IG1fcmVzdWx0KHJlc3VsdCkK
KyAgICAgICAgLCBtX25hbWUobmFtZSkKKyAgICB7CisgICAgfQorCisgICAgUmVmUHRyPENyZWF0
ZUZpbGVSZXN1bHQ+IG1fcmVzdWx0OworICAgIFN0cmluZyBtX25hbWU7Cit9OworCit9IC8vIG5h
bWVzcGFjZQorCitQYXNzUmVmUHRyPEZpbGU+IERPTUZpbGVTeXN0ZW1TeW5jOjpjcmVhdGVGaWxl
KGNvbnN0IEZpbGVFbnRyeVN5bmMqIGZpbGVFbnRyeSwgRXhjZXB0aW9uQ29kZSYgZWMpCit7Cisg
ICAgZWMgPSAwOworICAgIFJlZlB0cjxDcmVhdGVGaWxlSGVscGVyOjpDcmVhdGVGaWxlUmVzdWx0
PiByZXN1bHQoQ3JlYXRlRmlsZUhlbHBlcjo6Q3JlYXRlRmlsZVJlc3VsdDo6Y3JlYXRlKCkpOwor
ICAgIG1fYXN5bmNGaWxlU3lzdGVtLT5jcmVhdGVTbmFwc2hvdEZpbGVBbmRSZWFkTWV0YWRhdGEo
ZmlsZUVudHJ5LT5mdWxsUGF0aCgpLCBDcmVhdGVGaWxlSGVscGVyOjpjcmVhdGUocmVzdWx0LCBm
aWxlRW50cnktPm5hbWUoKSkpOworICAgIGlmICghbV9hc3luY0ZpbGVTeXN0ZW0tPndhaXRGb3JP
cGVyYXRpb25Ub0NvbXBsZXRlKCkpIHsKKyAgICAgICAgZWMgPSBGaWxlRXhjZXB0aW9uOjpBQk9S
VF9FUlI7CisgICAgICAgIHJldHVybiAwOworICAgIH0KKyAgICBpZiAocmVzdWx0LT5tX2ZhaWxl
ZCkgeworICAgICAgICBlYyA9IHJlc3VsdC0+bV9jb2RlOworICAgICAgICByZXR1cm4gMDsKKyAg
ICB9CisgICAgcmV0dXJuIHJlc3VsdC0+bV9maWxlOworfQorCituYW1lc3BhY2UgeworCitjbGFz
cyBSZWNlaXZlRmlsZVdyaXRlckNhbGxiYWNrIDogcHVibGljIEZpbGVXcml0ZXJCYXNlQ2FsbGJh
Y2sgeworcHVibGljOgorICAgIHN0YXRpYyBQYXNzUmVmUHRyPFJlY2VpdmVGaWxlV3JpdGVyQ2Fs
bGJhY2s+IGNyZWF0ZSgpCisgICAgeworICAgICAgICByZXR1cm4gYWRvcHRSZWYobmV3IFJlY2Vp
dmVGaWxlV3JpdGVyQ2FsbGJhY2soKSk7CisgICAgfQorCisgICAgYm9vbCBoYW5kbGVFdmVudChG
aWxlV3JpdGVyQmFzZSogZmlsZVdyaXRlckJhc2UpCisgICAgeworI2lmbmRlZiBOREVCVUcKKyAg
ICAgICAgbV9maWxlV3JpdGVyQmFzZSA9IGZpbGVXcml0ZXJCYXNlOworI2Vsc2UKKyAgICAgICAg
QVNTRVJUX1VOVVNFRChmaWxlV3JpdGVyQmFzZSwgZmlsZVdyaXRlckJhc2UpOworI2VuZGlmCisg
ICAgICAgIHJldHVybiB0cnVlOworICAgIH0KKworI2lmbmRlZiBOREVCVUcKKyAgICBGaWxlV3Jp
dGVyQmFzZSogZmlsZVdyaXRlckJhc2UoKQorICAgIHsKKyAgICAgICAgcmV0dXJuIG1fZmlsZVdy
aXRlckJhc2U7CisgICAgfQorI2VuZGlmCisKK3ByaXZhdGU6CisgICAgUmVjZWl2ZUZpbGVXcml0
ZXJDYWxsYmFjaygpCisjaWZuZGVmIE5ERUJVRworICAgICAgICA6IG1fZmlsZVdyaXRlckJhc2Uo
MCkKKyNlbmRpZgorICAgIHsKKyAgICB9CisKKyNpZm5kZWYgTkRFQlVHCisgICAgRmlsZVdyaXRl
ckJhc2UqIG1fZmlsZVdyaXRlckJhc2U7CisjZW5kaWYKK307CisKK2NsYXNzIExvY2FsRXJyb3JD
YWxsYmFjayA6IHB1YmxpYyBFcnJvckNhbGxiYWNrIHsKK3B1YmxpYzoKKyAgICBzdGF0aWMgUGFz
c1JlZlB0cjxMb2NhbEVycm9yQ2FsbGJhY2s+IGNyZWF0ZSgpCisgICAgeworICAgICAgICByZXR1
cm4gYWRvcHRSZWYobmV3IExvY2FsRXJyb3JDYWxsYmFjaygpKTsKKyAgICB9CisKKyAgICBib29s
IGhhbmRsZUV2ZW50KEZpbGVFcnJvciogZXJyb3IpCisgICAgeworICAgICAgICBtX2Vycm9yID0g
ZXJyb3I7CisgICAgICAgIHJldHVybiB0cnVlOworICAgIH0KKworICAgIEZpbGVFcnJvciogZXJy
b3IoKQorICAgIHsKKyAgICAgICAgcmV0dXJuIG1fZXJyb3IuZ2V0KCk7CisgICAgfQorCitwcml2
YXRlOgorICAgIExvY2FsRXJyb3JDYWxsYmFjaygpCisgICAgeworICAgIH0KKyAgICBSZWZQdHI8
RmlsZUVycm9yPiBtX2Vycm9yOworfTsKKworfQorCitQYXNzUmVmUHRyPEZpbGVXcml0ZXJTeW5j
PiBET01GaWxlU3lzdGVtU3luYzo6Y3JlYXRlV3JpdGVyKGNvbnN0IEZpbGVFbnRyeVN5bmMqIGZp
bGVFbnRyeSwgRXhjZXB0aW9uQ29kZSYgZWMpCit7CisgICAgQVNTRVJUKGZpbGVFbnRyeSk7Cisg
ICAgZWMgPSAwOworCisKKyAgICBSZWZQdHI8RmlsZVdyaXRlclN5bmM+IGZpbGVXcml0ZXIgPSBG
aWxlV3JpdGVyU3luYzo6Y3JlYXRlKCk7CisgICAgUmVmUHRyPFJlY2VpdmVGaWxlV3JpdGVyQ2Fs
bGJhY2s+IHN1Y2Nlc3NDYWxsYmFjayA9IFJlY2VpdmVGaWxlV3JpdGVyQ2FsbGJhY2s6OmNyZWF0
ZSgpOworICAgIFJlZlB0cjxMb2NhbEVycm9yQ2FsbGJhY2s+IGVycm9yQ2FsbGJhY2sgPSBMb2Nh
bEVycm9yQ2FsbGJhY2s6OmNyZWF0ZSgpOworCisgICAgT3duUHRyPEZpbGVXcml0ZXJCYXNlQ2Fs
bGJhY2tzPiBjYWxsYmFja3MgPSBGaWxlV3JpdGVyQmFzZUNhbGxiYWNrczo6Y3JlYXRlKGZpbGVX
cml0ZXIsIHN1Y2Nlc3NDYWxsYmFjaywgZXJyb3JDYWxsYmFjayk7CisgICAgbV9hc3luY0ZpbGVT
eXN0ZW0tPmNyZWF0ZVdyaXRlcihmaWxlV3JpdGVyLmdldCgpLCBmaWxlRW50cnktPmZ1bGxQYXRo
KCksIGNhbGxiYWNrcy5yZWxlYXNlKCkpOworICAgIGlmICghbV9hc3luY0ZpbGVTeXN0ZW0tPndh
aXRGb3JPcGVyYXRpb25Ub0NvbXBsZXRlKCkpIHsKKyAgICAgICAgZWMgPSBGaWxlRXhjZXB0aW9u
OjpBQk9SVF9FUlI7CisgICAgICAgIHJldHVybiAwOworICAgIH0KKyAgICBpZiAoZXJyb3JDYWxs
YmFjay0+ZXJyb3IoKSkgeworICAgICAgICBBU1NFUlQoIXN1Y2Nlc3NDYWxsYmFjay0+ZmlsZVdy
aXRlckJhc2UoKSk7CisgICAgICAgIGVjID0gRmlsZUV4Y2VwdGlvbjo6RXJyb3JDb2RlVG9FeGNl
cHRpb25Db2RlKGVycm9yQ2FsbGJhY2stPmVycm9yKCktPmNvZGUoKSk7CisgICAgICAgIHJldHVy
biAwOworICAgIH0KKyAgICBBU1NFUlQoc3VjY2Vzc0NhbGxiYWNrLT5maWxlV3JpdGVyQmFzZSgp
KTsKKyAgICBBU1NFUlQoc3RhdGljX2Nhc3Q8RmlsZVdyaXRlclN5bmMqPihzdWNjZXNzQ2FsbGJh
Y2stPmZpbGVXcml0ZXJCYXNlKCkpID09IGZpbGVXcml0ZXIuZ2V0KCkpOworICAgIHJldHVybiBm
aWxlV3JpdGVyOworfQorCit9CisKKyNlbmRpZiAvLyBFTkFCTEUoRklMRV9TWVNURU0pCkluZGV4
OiBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2ZpbGVzeXN0ZW0vRE9NRmlsZVN5c3RlbVN5bmMuaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2ZpbGVzeXN0ZW0vRE9NRmlsZVN5
c3RlbVN5bmMuaAkocmV2aXNpb24gMTEwODU2KQkoZnJvbSBTb3VyY2UvV2ViQ29yZS9maWxlYXBp
L0RPTUZpbGVTeXN0ZW1TeW5jLmg6MTEwODU2KQorKysgU291cmNlL1dlYkNvcmUvTW9kdWxlcy9m
aWxlc3lzdGVtL0RPTUZpbGVTeXN0ZW1TeW5jLmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw3
MSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMCBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5h
cnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVk
IHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZQorICogbWV0OgorICoK
KyAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUg
YWJvdmUgY29weXJpZ2h0CisgKiBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmlu
YXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCisgKiBjb3B5cmlnaHQgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyCisgKiBp
biB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGgg
dGhlCisgKiBkaXN0cmlidXRpb24uCisgKiAgICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9mIEdvb2ds
ZSBJbmMuIG5vciB0aGUgbmFtZXMgb2YgaXRzCisgKiBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQg
dG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbQorICogdGhpcyBzb2Z0
d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqCisgKiBU
SElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09O
VFJJQlVUT1JTCisgKiAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJ
RVMsIElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFO
VElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCisgKiBBIFBBUlRJQ1VMQVIg
UFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAor
ICogT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJF
Q1QsIElOQ0lERU5UQUwsCisgKiBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwg
REFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBP
RiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKKyAqIERBVEEsIE9S
IFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9O
IEFOWQorICogVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNU
IExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lT
RSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJF
LCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICov
CisKKyNpZm5kZWYgRE9NRmlsZVN5c3RlbVN5bmNfaAorI2RlZmluZSBET01GaWxlU3lzdGVtU3lu
Y19oCisKKyNpZiBFTkFCTEUoRklMRV9TWVNURU0pCisKKyNpbmNsdWRlICJET01GaWxlU3lzdGVt
QmFzZS5oIgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK2NsYXNzIERpcmVjdG9yeUVudHJ5U3lu
YzsKK2NsYXNzIEZpbGU7CitjbGFzcyBGaWxlRW50cnlTeW5jOworY2xhc3MgRmlsZVdyaXRlclN5
bmM7CisKK3R5cGVkZWYgaW50IEV4Y2VwdGlvbkNvZGU7CisKK2NsYXNzIERPTUZpbGVTeXN0ZW1T
eW5jIDogcHVibGljIERPTUZpbGVTeXN0ZW1CYXNlIHsKK3B1YmxpYzoKKyAgICBzdGF0aWMgUGFz
c1JlZlB0cjxET01GaWxlU3lzdGVtU3luYz4gY3JlYXRlKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQq
IGNvbnRleHQsIGNvbnN0IFN0cmluZyYgbmFtZSwgUGFzc093blB0cjxBc3luY0ZpbGVTeXN0ZW0+
IGFzeW5jRmlsZVN5c3RlbSkKKyAgICB7CisgICAgICAgIHJldHVybiBhZG9wdFJlZihuZXcgRE9N
RmlsZVN5c3RlbVN5bmMoY29udGV4dCwgbmFtZSwgYXN5bmNGaWxlU3lzdGVtKSk7CisgICAgfQor
CisgICAgc3RhdGljIFBhc3NSZWZQdHI8RE9NRmlsZVN5c3RlbVN5bmM+IGNyZWF0ZShET01GaWxl
U3lzdGVtQmFzZSopOworCisgICAgdmlydHVhbCB+RE9NRmlsZVN5c3RlbVN5bmMoKTsKKworICAg
IFBhc3NSZWZQdHI8RGlyZWN0b3J5RW50cnlTeW5jPiByb290KCk7CisKKyAgICBQYXNzUmVmUHRy
PEZpbGU+IGNyZWF0ZUZpbGUoY29uc3QgRmlsZUVudHJ5U3luYyosIEV4Y2VwdGlvbkNvZGUmKTsK
KyAgICBQYXNzUmVmUHRyPEZpbGVXcml0ZXJTeW5jPiBjcmVhdGVXcml0ZXIoY29uc3QgRmlsZUVu
dHJ5U3luYyosIEV4Y2VwdGlvbkNvZGUmKTsKKworcHJpdmF0ZToKKyAgICBET01GaWxlU3lzdGVt
U3luYyhTY3JpcHRFeGVjdXRpb25Db250ZXh0KiwgY29uc3QgU3RyaW5nJiBuYW1lLCBQYXNzT3du
UHRyPEFzeW5jRmlsZVN5c3RlbT4pOworfTsKKworfQorCisjZW5kaWYgLy8gRU5BQkxFKEZJTEVf
U1lTVEVNKQorCisjZW5kaWYgLy8gRE9NRmlsZVN5c3RlbVN5bmNfaApJbmRleDogU291cmNlL1dl
YkNvcmUvTW9kdWxlcy9maWxlc3lzdGVtL0RPTUZpbGVTeXN0ZW1TeW5jLmlkbAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2ZpbGVzeXN0ZW0vRE9NRmlsZVN5c3RlbVN5bmMu
aWRsCShyZXZpc2lvbiAxMTA4NTYpCShmcm9tIFNvdXJjZS9XZWJDb3JlL2ZpbGVhcGkvRE9NRmls
ZVN5c3RlbVN5bmMuaWRsOjExMDg1NikKKysrIFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvZmlsZXN5
c3RlbS9ET01GaWxlU3lzdGVtU3luYy5pZGwJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwzOSBA
QAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMCBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg
Zm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHBy
b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZQorICogbWV0OgorICoKKyAq
ICAgICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJv
dmUgY29weXJpZ2h0CisgKiBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5
IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCisgKiBjb3B5cmlnaHQgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyCisgKiBpbiB0
aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhl
CisgKiBkaXN0cmlidXRpb24uCisgKiAgICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9mIEdvb2dsZSBJ
bmMuIG5vciB0aGUgbmFtZXMgb2YgaXRzCisgKiBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8g
ZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbQorICogdGhpcyBzb2Z0d2Fy
ZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqCisgKiBUSElT
IFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJ
QlVUT1JTCisgKiAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMs
IElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElF
UyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCisgKiBBIFBBUlRJQ1VMQVIgUFVS
UE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAorICog
T1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1Qs
IElOQ0lERU5UQUwsCisgKiBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFN
QUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBT
VUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKKyAqIERBVEEsIE9SIFBS
T0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFO
WQorICogVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJ
QUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkg
QVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBF
VkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisK
K21vZHVsZSBzdG9yYWdlIHsKKyAgICBpbnRlcmZhY2UgWworICAgICAgICBDb25kaXRpb25hbD1G
SUxFX1NZU1RFTSwKKyAgICAgICAgSlNOb1N0YXRpY1RhYmxlcworICAgIF0gRE9NRmlsZVN5c3Rl
bVN5bmMgeworICAgICAgICByZWFkb25seSBhdHRyaWJ1dGUgRE9NU3RyaW5nIG5hbWU7CisgICAg
ICAgIHJlYWRvbmx5IGF0dHJpYnV0ZSBEaXJlY3RvcnlFbnRyeVN5bmMgcm9vdDsKKyAgICB9Owor
fQpJbmRleDogU291cmNlL1dlYkNvcmUvV2ViQ29yZS52Y3Byb2ovV2ViQ29yZS52Y3Byb2oKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvV2ViQ29yZS52Y3Byb2ovV2ViQ29yZS52Y3Byb2oJ
KHJldmlzaW9uIDExMDg1NikKKysrIFNvdXJjZS9XZWJDb3JlL1dlYkNvcmUudmNwcm9qL1dlYkNv
cmUudmNwcm9qCSh3b3JraW5nIGNvcHkpCkBAIC0yNDA1Niw2ICsyNDA1NiwzOCBAQAogICAgICAg
ICAgICAgICAgICAgICAgICAgPEZpbHRlcgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBOYW1lPSJmaWxlc3lzdGVtIgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA+CisJ
CQkgICAgICAgIDxGaWxlCisJCQkJICAgICAgICBSZWxhdGl2ZVBhdGg9Ii4uXE1vZHVsZXNcZmls
ZXN5c3RlbVxET01GaWxlUGF0aC5jcHAiCisJCQkJICAgICAgICA+CisJCQkgICAgICAgIDwvRmls
ZT4KKwkJCSAgICAgICAgPEZpbGUKKwkJCQkgICAgICAgIFJlbGF0aXZlUGF0aD0iLi5cTW9kdWxl
c1xmaWxlc3lzdGVtXERPTUZpbGVQYXRoLmgiCisJCQkJICAgICAgICA+CisJCQkgICAgICAgIDwv
RmlsZT4KKwkJCSAgICAgICAgPEZpbGUKKwkJCQkgICAgICAgIFJlbGF0aXZlUGF0aD0iLi5cTW9k
dWxlc1xmaWxlc3lzdGVtXERPTUZpbGVTeXN0ZW0uY3BwIgorCQkJCSAgICAgICAgPgorCQkJICAg
ICAgICA8L0ZpbGU+CisJCQkgICAgICAgIDxGaWxlICAgICAgICAKKwkJCQkgICAgICAgIFJlbGF0
aXZlUGF0aD0iLi5cTW9kdWxlc1xmaWxlc3lzdGVtXERPTUZpbGVTeXN0ZW0uaCIKKwkJCQk+CisJ
CQkgICAgICAgIDwvRmlsZT4KKwkJCSAgICAgICAgPEZpbGUKKwkJCQkgICAgICAgIFJlbGF0aXZl
UGF0aD0iLi5cTW9kdWxlc1xmaWxlc3lzdGVtXERPTUZpbGVTeXN0ZW1CYXNlLmNwcCIKKwkJCQkg
ICAgICAgID4KKwkJCSAgICAgICAgPC9GaWxlPgorCQkJICAgICAgICA8RmlsZQorCQkJCSAgICAg
ICAgUmVsYXRpdmVQYXRoPSIuLlxNb2R1bGVzXGZpbGVzeXN0ZW1cRE9NRmlsZVN5c3RlbUJhc2Uu
aCIKKwkJCQkgICAgICAgID4KKwkJCSAgICAgICAgPC9GaWxlPgorCQkJICAgICAgICA8RmlsZQor
CQkJCSAgICAgICAgUmVsYXRpdmVQYXRoPSIuLlxNb2R1bGVzXGZpbGVzeXN0ZW1cRE9NRmlsZVN5
c3RlbVN5bmMuY3BwIgorCQkJCSAgICAgICAgPgorCQkJICAgICAgICA8L0ZpbGU+CisJCQkgICAg
ICAgIDxGaWxlCisJCQkJICAgICAgICBSZWxhdGl2ZVBhdGg9Ii4uXE1vZHVsZXNcZmlsZXN5c3Rl
bVxET01GaWxlU3lzdGVtU3luYy5oIgorCQkJCSAgICAgICAgPgorCQkJICAgICAgICA8L0ZpbGU+
CiAgICAgICAgIAkJICAgICAgICA8RmlsZQogICAgICAgICAJCQkgICAgICAgIFJlbGF0aXZlUGF0
aD0iLi5cTW9kdWxlc1xmaWxlc3lzdGVtXERpcmVjdG9yeUVudHJ5LmNwcCIKIAkgICAgICAgIAkJ
ICAgICAgICA+CkBAIC01Njg3OCwzOCArNTY5MTAsNiBAQAogCQkJCT4KIAkJCTwvRmlsZT4KIAkJ
CTxGaWxlCi0JCQkJUmVsYXRpdmVQYXRoPSIuLlxmaWxlYXBpXERPTUZpbGVQYXRoLmNwcCIKLQkJ
CQk+Ci0JCQk8L0ZpbGU+Ci0JCQk8RmlsZQotCQkJCVJlbGF0aXZlUGF0aD0iLi5cZmlsZWFwaVxE
T01GaWxlUGF0aC5oIgotCQkJCT4KLQkJCTwvRmlsZT4KLQkJCTxGaWxlCi0JCQkJUmVsYXRpdmVQ
YXRoPSIuLlxmaWxlYXBpXERPTUZpbGVTeXN0ZW0uY3BwIgotCQkJCT4KLQkJCTwvRmlsZT4KLQkJ
CTxGaWxlCi0JCQkJUmVsYXRpdmVQYXRoPSIuLlxmaWxlYXBpXERPTUZpbGVTeXN0ZW0uaCIKLQkJ
CQk+Ci0JCQk8L0ZpbGU+Ci0JCQk8RmlsZQotCQkJCVJlbGF0aXZlUGF0aD0iLi5cZmlsZWFwaVxE
T01GaWxlU3lzdGVtQmFzZS5jcHAiCi0JCQkJPgotCQkJPC9GaWxlPgotCQkJPEZpbGUKLQkJCQlS
ZWxhdGl2ZVBhdGg9Ii4uXGZpbGVhcGlcRE9NRmlsZVN5c3RlbUJhc2UuaCIKLQkJCQk+Ci0JCQk8
L0ZpbGU+Ci0JCQk8RmlsZQotCQkJCVJlbGF0aXZlUGF0aD0iLi5cZmlsZWFwaVxET01GaWxlU3lz
dGVtU3luYy5jcHAiCi0JCQkJPgotCQkJPC9GaWxlPgotCQkJPEZpbGUKLQkJCQlSZWxhdGl2ZVBh
dGg9Ii4uXGZpbGVhcGlcRE9NRmlsZVN5c3RlbVN5bmMuaCIKLQkJCQk+Ci0JCQk8L0ZpbGU+Ci0J
CQk8RmlsZQogCQkJCVJlbGF0aXZlUGF0aD0iLi5caHRtbFxET01Gb3JtRGF0YS5jcHAiCiAJCQkJ
PgogCQkJPC9GaWxlPgpJbmRleDogU291cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJv
amVjdC5wYnhwcm9qCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVw
cm9qL3Byb2plY3QucGJ4cHJvagkocmV2aXNpb24gMTEwODU2KQorKysgU291cmNlL1dlYkNvcmUv
V2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCSh3b3JraW5nIGNvcHkpCkBAIC03MTEz
LDcgKzcxMTMsNyBAQAogCQkxNDk5M0JFMzBCMkYyQjFDMDA1MDQ5N0YgLyogRm9jdXNDb250cm9s
bGVyLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSAzMDsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBGb2N1c0NvbnRy
b2xsZXIuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkxNDk5M0JFNDBCMkYyQjFD
MDA1MDQ5N0YgLyogRm9jdXNDb250cm9sbGVyLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgZmlsZUVuY29kaW5nID0gMzA7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7
IHBhdGggPSBGb2N1c0NvbnRyb2xsZXIuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJ
MTRBOThFMDUxMzYzODZBMjAwQzlGRUQyIC8qIEJsb2IuaWRsICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gdGV4dDsgbmFt
ZSA9IEJsb2IuaWRsOyBwYXRoID0gZmlsZWFwaS9CbG9iLmlkbDsgc291cmNlVHJlZSA9IFNPVVJD
RV9ST09UOyB9OwotCQkxNEJERjU5NzEzNjUzOTJDMDAxNDgzOTMgLyogRE9NRmlsZVN5c3RlbS5p
ZGwgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtu
b3duRmlsZVR5cGUgPSB0ZXh0OyBuYW1lID0gRE9NRmlsZVN5c3RlbS5pZGw7IHBhdGggPSBmaWxl
YXBpL0RPTUZpbGVTeXN0ZW0uaWRsOyBzb3VyY2VUcmVlID0gU09VUkNFX1JPT1Q7IH07CisJCTE0
QkRGNTk3MTM2NTM5MkMwMDE0ODM5MyAvKiBET01GaWxlU3lzdGVtLmlkbCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHRl
eHQ7IG5hbWUgPSBET01GaWxlU3lzdGVtLmlkbDsgcGF0aCA9IE1vZHVsZXMvZmlsZXN5c3RlbS9E
T01GaWxlU3lzdGVtLmlkbDsgc291cmNlVHJlZSA9IFNPVVJDRV9ST09UOyB9OwogCQkxNEJERjU5
QTEzNjUzOTkxMDAxNDgzOTMgLyogRmlsZVJlYWRlci5pZGwgKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSB0ZXh0OyBuYW1l
ID0gRmlsZVJlYWRlci5pZGw7IHBhdGggPSBmaWxlYXBpL0ZpbGVSZWFkZXIuaWRsOyBzb3VyY2VU
cmVlID0gU09VUkNFX1JPT1Q7IH07CiAJCTE0QkRGNTlDMTM2NTM5QkUwMDE0ODM5MyAvKiBGaWxl
V3JpdGVyLmlkbCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0
OyBsYXN0S25vd25GaWxlVHlwZSA9IHRleHQ7IG5hbWUgPSBGaWxlV3JpdGVyLmlkbDsgcGF0aCA9
IGZpbGVhcGkvRmlsZVdyaXRlci5pZGw7IHNvdXJjZVRyZWUgPSBTT1VSQ0VfUk9PVDsgfTsKIAkJ
MTRDOUE1RTkwQjNEMTA1RjAwNUEwMjMyIC8qIFNldHRpbmdzLmNwcCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSAzMDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBTZXR0aW5ncy5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CkBAIC05Nzk5LDEwICs5Nzk5LDEwIEBACiAJCTg5M0M0N0YxMTI0OEJEMzkwMDJCM0Q4
NiAvKiBEaXJlY3RvcnlFbnRyeVN5bmMuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1l
ID0gRGlyZWN0b3J5RW50cnlTeW5jLmg7IHBhdGggPSBNb2R1bGVzL2ZpbGVzeXN0ZW0vRGlyZWN0
b3J5RW50cnlTeW5jLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTg5M0M0N0YyMTI0
OEJEMzkwMDJCM0Q4NiAvKiBEaXJlY3RvcnlSZWFkZXJTeW5jLmNwcCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuY3BwLmNwcDsgbmFtZSA9IERpcmVjdG9yeVJlYWRlclN5bmMuY3BwOyBwYXRoID0gTW9k
dWxlcy9maWxlc3lzdGVtL0RpcmVjdG9yeVJlYWRlclN5bmMuY3BwOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OwogCQk4OTNDNDdGMzEyNDhCRDM5MDAyQjNEODYgLyogRGlyZWN0b3J5UmVhZGVy
U3luYy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBEaXJlY3RvcnlSZWFkZXJT
eW5jLmg7IHBhdGggPSBNb2R1bGVzL2ZpbGVzeXN0ZW0vRGlyZWN0b3J5UmVhZGVyU3luYy5oOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQk4OTNDNDdGNDEyNDhCRDM5MDAyQjNEODYgLyog
RE9NRmlsZVN5c3RlbUJhc2UuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVF
bmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBuYW1l
ID0gRE9NRmlsZVN5c3RlbUJhc2UuY3BwOyBwYXRoID0gZmlsZWFwaS9ET01GaWxlU3lzdGVtQmFz
ZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCTg5M0M0N0Y1MTI0OEJEMzkwMDJC
M0Q4NiAvKiBET01GaWxlU3lzdGVtQmFzZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5h
bWUgPSBET01GaWxlU3lzdGVtQmFzZS5oOyBwYXRoID0gZmlsZWFwaS9ET01GaWxlU3lzdGVtQmFz
ZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQk4OTNDNDdGNjEyNDhCRDM5MDAyQjNE
ODYgLyogRE9NRmlsZVN5c3RlbVN5bmMuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3Bw
OyBuYW1lID0gRE9NRmlsZVN5c3RlbVN5bmMuY3BwOyBwYXRoID0gZmlsZWFwaS9ET01GaWxlU3lz
dGVtU3luYy5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCTg5M0M0N0Y3MTI0OEJE
MzkwMDJCM0Q4NiAvKiBET01GaWxlU3lzdGVtU3luYy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
Lmg7IG5hbWUgPSBET01GaWxlU3lzdGVtU3luYy5oOyBwYXRoID0gZmlsZWFwaS9ET01GaWxlU3lz
dGVtU3luYy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk4OTNDNDdGNDEyNDhCRDM5
MDAyQjNEODYgLyogRE9NRmlsZVN5c3RlbUJhc2UuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
cHAuY3BwOyBuYW1lID0gRE9NRmlsZVN5c3RlbUJhc2UuY3BwOyBwYXRoID0gTW9kdWxlcy9maWxl
c3lzdGVtL0RPTUZpbGVTeXN0ZW1CYXNlLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
KwkJODkzQzQ3RjUxMjQ4QkQzOTAwMkIzRDg2IC8qIERPTUZpbGVTeXN0ZW1CYXNlLmggKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IERPTUZpbGVTeXN0ZW1CYXNlLmg7IHBhdGggPSBN
b2R1bGVzL2ZpbGVzeXN0ZW0vRE9NRmlsZVN5c3RlbUJhc2UuaDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKKwkJODkzQzQ3RjYxMjQ4QkQzOTAwMkIzRDg2IC8qIERPTUZpbGVTeXN0ZW1TeW5j
LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFtZSA9IERPTUZpbGVTeXN0ZW1T
eW5jLmNwcDsgcGF0aCA9IE1vZHVsZXMvZmlsZXN5c3RlbS9ET01GaWxlU3lzdGVtU3luYy5jcHA7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTg5M0M0N0Y3MTI0OEJEMzkwMDJCM0Q4NiAv
KiBET01GaWxlU3lzdGVtU3luYy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVF
bmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBE
T01GaWxlU3lzdGVtU3luYy5oOyBwYXRoID0gTW9kdWxlcy9maWxlc3lzdGVtL0RPTUZpbGVTeXN0
ZW1TeW5jLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTg5M0M0N0Y4MTI0OEJEMzkw
MDJCM0Q4NiAvKiBFbnRyeUFycmF5U3luYy5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5j
cHA7IG5hbWUgPSBFbnRyeUFycmF5U3luYy5jcHA7IHBhdGggPSBmaWxlYXBpL0VudHJ5QXJyYXlT
eW5jLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJODkzQzQ3RjkxMjQ4QkQzOTAw
MkIzRDg2IC8qIEVudHJ5QXJyYXlTeW5jLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFt
ZSA9IEVudHJ5QXJyYXlTeW5jLmg7IHBhdGggPSBmaWxlYXBpL0VudHJ5QXJyYXlTeW5jLmg7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTg5M0M0N0ZCMTI0OEJEMzkwMDJCM0Q4NiAvKiBF
bnRyeUJhc2UuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gRW50cnlCYXNlLmg7
IHBhdGggPSBmaWxlYXBpL0VudHJ5QmFzZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpA
QCAtOTgyOCwxMCArOTgyOCwxMCBAQAogCQk4OTg3ODUzQTEyMkNBMDY0MDAzQUFCREEgLyogRGly
ZWN0b3J5RW50cnkuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gRGlyZWN0b3J5
RW50cnkuaDsgcGF0aCA9IE1vZHVsZXMvZmlsZXN5c3RlbS9EaXJlY3RvcnlFbnRyeS5oOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk4OTg3ODUzQjEyMkNBMDY0MDAzQUFCREEgLyogRGly
ZWN0b3J5UmVhZGVyLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFtZSA9IERp
cmVjdG9yeVJlYWRlci5jcHA7IHBhdGggPSBNb2R1bGVzL2ZpbGVzeXN0ZW0vRGlyZWN0b3J5UmVh
ZGVyLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJODk4Nzg1M0MxMjJDQTA2NDAw
M0FBQkRBIC8qIERpcmVjdG9yeVJlYWRlci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5h
bWUgPSBEaXJlY3RvcnlSZWFkZXIuaDsgcGF0aCA9IE1vZHVsZXMvZmlsZXN5c3RlbS9EaXJlY3Rv
cnlSZWFkZXIuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJODk4Nzg1M0QxMjJDQTA2
NDAwM0FBQkRBIC8qIERPTUZpbGVQYXRoLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNw
cDsgbmFtZSA9IERPTUZpbGVQYXRoLmNwcDsgcGF0aCA9IGZpbGVhcGkvRE9NRmlsZVBhdGguY3Bw
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQk4OTg3ODUzRTEyMkNBMDY0MDAzQUFCREEg
LyogRE9NRmlsZVBhdGguaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gRE9NRmls
ZVBhdGguaDsgcGF0aCA9IGZpbGVhcGkvRE9NRmlsZVBhdGguaDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKLQkJODk4Nzg1M0YxMjJDQTA2NDAwM0FBQkRBIC8qIERPTUZpbGVTeXN0ZW0uY3Bw
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBuYW1lID0gRE9NRmlsZVN5c3RlbS5jcHA7
IHBhdGggPSBmaWxlYXBpL0RPTUZpbGVTeXN0ZW0uY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OwotCQk4OTg3ODU0MDEyMkNBMDY0MDAzQUFCREEgLyogRE9NRmlsZVN5c3RlbS5oICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBET01GaWxlU3lzdGVtLmg7IHBhdGggPSBmaWxl
YXBpL0RPTUZpbGVTeXN0ZW0uaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJODk4Nzg1
M0QxMjJDQTA2NDAwM0FBQkRBIC8qIERPTUZpbGVQYXRoLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuY3BwLmNwcDsgbmFtZSA9IERPTUZpbGVQYXRoLmNwcDsgcGF0aCA9IE1vZHVsZXMvZmlsZXN5
c3RlbS9ET01GaWxlUGF0aC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTg5ODc4
NTNFMTIyQ0EwNjQwMDNBQUJEQSAvKiBET01GaWxlUGF0aC5oICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jLmg7IG5hbWUgPSBET01GaWxlUGF0aC5oOyBwYXRoID0gTW9kdWxlcy9maWxlc3lzdGVtL0RP
TUZpbGVQYXRoLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTg5ODc4NTNGMTIyQ0Ew
NjQwMDNBQUJEQSAvKiBET01GaWxlU3lzdGVtLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3Bw
LmNwcDsgbmFtZSA9IERPTUZpbGVTeXN0ZW0uY3BwOyBwYXRoID0gTW9kdWxlcy9maWxlc3lzdGVt
L0RPTUZpbGVTeXN0ZW0uY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk4OTg3ODU0
MDEyMkNBMDY0MDAzQUFCREEgLyogRE9NRmlsZVN5c3RlbS5oICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jLmg7IG5hbWUgPSBET01GaWxlU3lzdGVtLmg7IHBhdGggPSBNb2R1bGVzL2ZpbGVzeXN0ZW0v
RE9NRmlsZVN5c3RlbS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk4OTg3ODU0MTEy
MkNBMDY0MDAzQUFCREEgLyogRW50cmllc0NhbGxiYWNrLmggKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmMuaDsgbmFtZSA9IEVudHJpZXNDYWxsYmFjay5oOyBwYXRoID0gTW9kdWxlcy9maWxlc3lzdGVt
L0VudHJpZXNDYWxsYmFjay5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk4OTg3ODU0
MjEyMkNBMDY0MDAzQUFCREEgLyogRW50cnkuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAu
Y3BwOyBuYW1lID0gRW50cnkuY3BwOyBwYXRoID0gZmlsZWFwaS9FbnRyeS5jcHA7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CiAJCTg5ODc4NTQzMTIyQ0EwNjQwMDNBQUJEQSAvKiBFbnRyeS5o
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBFbnRyeS5oOyBwYXRoID0gZmlsZWFw
aS9FbnRyeS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtMTI5MDksNyArMTI5MDks
NyBAQAogCQlFMUFCMUVBQzE0RTlFMkY4MDA0NDlFMTMgLyogRGlyZWN0b3J5RW50cnlTeW5jLmlk
bCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHRleHQ7
IG5hbWUgPSBEaXJlY3RvcnlFbnRyeVN5bmMuaWRsOyBwYXRoID0gTW9kdWxlcy9maWxlc3lzdGVt
L0RpcmVjdG9yeUVudHJ5U3luYy5pZGw7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUUx
QUIxRUFEMTRFOUUzMDUwMDQ0OUUxMyAvKiBEaXJlY3RvcnlSZWFkZXIuaWRsICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gdGV4dDsgbmFtZSA9IERpcmVj
dG9yeVJlYWRlci5pZGw7IHBhdGggPSBNb2R1bGVzL2ZpbGVzeXN0ZW0vRGlyZWN0b3J5UmVhZGVy
LmlkbDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJRTFBQjFFQUUxNEU5RTMwQjAwNDQ5
RTEzIC8qIERpcmVjdG9yeVJlYWRlclN5bmMuaWRsICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGxhc3RLbm93bkZpbGVUeXBlID0gdGV4dDsgbmFtZSA9IERpcmVjdG9yeVJlYWRlclN5bmMu
aWRsOyBwYXRoID0gTW9kdWxlcy9maWxlc3lzdGVtL0RpcmVjdG9yeVJlYWRlclN5bmMuaWRsOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQlFMUFCMUVBRjE0RTlFMzE3MDA0NDlFMTMgLyog
RE9NRmlsZVN5c3RlbVN5bmMuaWRsICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RL
bm93bkZpbGVUeXBlID0gdGV4dDsgbmFtZSA9IERPTUZpbGVTeXN0ZW1TeW5jLmlkbDsgcGF0aCA9
IGZpbGVhcGkvRE9NRmlsZVN5c3RlbVN5bmMuaWRsOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OworCQlFMUFCMUVBRjE0RTlFMzE3MDA0NDlFMTMgLyogRE9NRmlsZVN5c3RlbVN5bmMuaWRsICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gdGV4dDsgbmFt
ZSA9IERPTUZpbGVTeXN0ZW1TeW5jLmlkbDsgcGF0aCA9IE1vZHVsZXMvZmlsZXN5c3RlbS9ET01G
aWxlU3lzdGVtU3luYy5pZGw7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUUxQUIxRUIw
MTRFOUUzMjMwMDQ0OUUxMyAvKiBFbnRyaWVzQ2FsbGJhY2suaWRsICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gdGV4dDsgbmFtZSA9IEVudHJpZXNDYWxs
YmFjay5pZGw7IHBhdGggPSBmaWxlYXBpL0VudHJpZXNDYWxsYmFjay5pZGw7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CiAJCUUxQUIxRUIxMTRFOUUzMkEwMDQ0OUUxMyAvKiBFbnRyeS5pZGwg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSB0ZXh0OyBu
YW1lID0gRW50cnkuaWRsOyBwYXRoID0gZmlsZWFwaS9FbnRyeS5pZGw7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07CiAJCUUxQUIxRUIyMTRFOUUzMzIwMDQ0OUUxMyAvKiBFbnRyeUFycmF5Lmlk
bCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHRleHQ7
IG5hbWUgPSBFbnRyeUFycmF5LmlkbDsgcGF0aCA9IGZpbGVhcGkvRW50cnlBcnJheS5pZGw7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9maWxlYXBpL0RP
TUZpbGVQYXRoLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9maWxlYXBpL0RPTUZp
bGVQYXRoLmNwcAkocmV2aXNpb24gMTEwODU2KQorKysgU291cmNlL1dlYkNvcmUvZmlsZWFwaS9E
T01GaWxlUGF0aC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsMTU0ICswLDAgQEAKLS8qCi0gKiBD
b3B5cmlnaHQgKEMpIDIwMTAgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0g
KiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRo
IG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0
IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUKLSAqIG1ldDoKLSAqCi0gKiAgICAgKiBSZWRp
c3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdo
dAotICogbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyLgotICogICAgICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3Qg
cmVwcm9kdWNlIHRoZSBhYm92ZQotICogY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lcgotICogaW4gdGhlIGRvY3VtZW50
YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQotICogZGlzdHJp
YnV0aW9uLgotICogICAgICogTmVpdGhlciB0aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBub3IgdGhl
IG5hbWVzIG9mIGl0cwotICogY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3Ig
cHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20KLSAqIHRoaXMgc29mdHdhcmUgd2l0aG91dCBz
cGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJ
UyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUwotICog
IkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcs
IEJVVCBOT1QKLSAqIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hB
TlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgotICogQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJ
U0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKLSAqIE9XTkVSIE9SIENP
TlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFM
LAotICogU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xV
RElORywgQlVUIE5PVAotICogTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBH
T09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCi0gKiBEQVRBLCBPUiBQUk9GSVRTOyBPUiBC
VVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKLSAqIFRIRU9S
WSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9S
IFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4g
QU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJ
U0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0jaW5jbHVkZSAi
Y29uZmlnLmgiCi0jaW5jbHVkZSAiRE9NRmlsZVBhdGguaCIKLQotI2lmIEVOQUJMRShGSUxFX1NZ
U1RFTSkKLQotI2luY2x1ZGUgIlJlZ3VsYXJFeHByZXNzaW9uLmgiCi0jaW5jbHVkZSA8d3RmL1Zl
Y3Rvci5oPgotI2luY2x1ZGUgPHd0Zi90ZXh0L0NTdHJpbmcuaD4KLQotbmFtZXNwYWNlIFdlYkNv
cmUgewotCi1jb25zdCBjaGFyIERPTUZpbGVQYXRoOjpzZXBhcmF0b3IgPSAnLyc7Ci1jb25zdCBj
aGFyIERPTUZpbGVQYXRoOjpyb290W10gPSAiLyI7Ci0KLVN0cmluZyBET01GaWxlUGF0aDo6YXBw
ZW5kKGNvbnN0IFN0cmluZyYgYmFzZSwgY29uc3QgU3RyaW5nJiBjb21wb25lbnRzKQotewotICAg
IHJldHVybiBlbnN1cmVEaXJlY3RvcnlQYXRoKGJhc2UpICsgY29tcG9uZW50czsKLX0KLQotU3Ry
aW5nIERPTUZpbGVQYXRoOjplbnN1cmVEaXJlY3RvcnlQYXRoKGNvbnN0IFN0cmluZyYgcGF0aCkK
LXsKLSAgICBpZiAoIURPTUZpbGVQYXRoOjplbmRzV2l0aFNlcGFyYXRvcihwYXRoKSkgewotICAg
ICAgICBTdHJpbmcgbmV3UGF0aCA9IHBhdGg7Ci0gICAgICAgIG5ld1BhdGguYXBwZW5kKERPTUZp
bGVQYXRoOjpzZXBhcmF0b3IpOwotICAgICAgICByZXR1cm4gbmV3UGF0aDsKLSAgICB9Ci0gICAg
cmV0dXJuIHBhdGg7Ci19Ci0KLVN0cmluZyBET01GaWxlUGF0aDo6Z2V0TmFtZShjb25zdCBTdHJp
bmcmIHBhdGgpCi17Ci0gICAgaW50IGluZGV4ID0gcGF0aC5yZXZlcnNlRmluZChET01GaWxlUGF0
aDo6c2VwYXJhdG9yKTsKLSAgICBpZiAoaW5kZXggIT0gLTEpCi0gICAgICAgIHJldHVybiBwYXRo
LnN1YnN0cmluZyhpbmRleCArIDEpOwotICAgIHJldHVybiBwYXRoOwotfQotCi1TdHJpbmcgRE9N
RmlsZVBhdGg6OmdldERpcmVjdG9yeShjb25zdCBTdHJpbmcmIHBhdGgpCi17Ci0gICAgaW50IGlu
ZGV4ID0gcGF0aC5yZXZlcnNlRmluZChET01GaWxlUGF0aDo6c2VwYXJhdG9yKTsKLSAgICBpZiAo
aW5kZXggPT0gMCkKLSAgICAgICAgcmV0dXJuIERPTUZpbGVQYXRoOjpyb290OwotICAgIGlmIChp
bmRleCAhPSAtMSkKLSAgICAgICAgcmV0dXJuIHBhdGguc3Vic3RyaW5nKDAsIGluZGV4KTsKLSAg
ICByZXR1cm4gIi4iOwotfQotCi1ib29sIERPTUZpbGVQYXRoOjppc1BhcmVudE9mKGNvbnN0IFN0
cmluZyYgcGFyZW50LCBjb25zdCBTdHJpbmcmIG1heUJlQ2hpbGQpCi17Ci0gICAgQVNTRVJUKERP
TUZpbGVQYXRoOjppc0Fic29sdXRlKHBhcmVudCkpOwotICAgIEFTU0VSVChET01GaWxlUGF0aDo6
aXNBYnNvbHV0ZShtYXlCZUNoaWxkKSk7Ci0gICAgaWYgKHBhcmVudCA9PSBET01GaWxlUGF0aDo6
cm9vdCAmJiBtYXlCZUNoaWxkICE9IERPTUZpbGVQYXRoOjpyb290KQotICAgICAgICByZXR1cm4g
dHJ1ZTsKLSAgICBpZiAocGFyZW50Lmxlbmd0aCgpID49IG1heUJlQ2hpbGQubGVuZ3RoKCkgfHwg
IW1heUJlQ2hpbGQuc3RhcnRzV2l0aChwYXJlbnQsIGZhbHNlKSkKLSAgICAgICAgcmV0dXJuIGZh
bHNlOwotICAgIGlmIChtYXlCZUNoaWxkW3BhcmVudC5sZW5ndGgoKV0gIT0gRE9NRmlsZVBhdGg6
OnNlcGFyYXRvcikKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIHJldHVybiB0cnVlOwotfQot
Ci1TdHJpbmcgRE9NRmlsZVBhdGg6OnJlbW92ZUV4dHJhUGFyZW50UmVmZXJlbmNlcyhjb25zdCBT
dHJpbmcmIHBhdGgpCi17Ci0gICAgQVNTRVJUKERPTUZpbGVQYXRoOjppc0Fic29sdXRlKHBhdGgp
KTsKLSAgICBWZWN0b3I8U3RyaW5nPiBjb21wb25lbnRzOwotICAgIFZlY3RvcjxTdHJpbmc+IGNh
bm9uaWNhbGl6ZWQ7Ci0gICAgcGF0aC5zcGxpdChET01GaWxlUGF0aDo6c2VwYXJhdG9yLCBjb21w
b25lbnRzKTsKLSAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGNvbXBvbmVudHMuc2l6ZSgpOyAr
K2kpIHsKLSAgICAgICAgaWYgKGNvbXBvbmVudHNbaV0gPT0gIi4iKQotICAgICAgICAgICAgY29u
dGludWU7Ci0gICAgICAgIGlmIChjb21wb25lbnRzW2ldID09ICIuLiIpIHsKLSAgICAgICAgICAg
IGlmIChjYW5vbmljYWxpemVkLnNpemUoKSA+IDApCi0gICAgICAgICAgICAgICAgY2Fub25pY2Fs
aXplZC5yZW1vdmVMYXN0KCk7Ci0gICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgfQotICAg
ICAgICBjYW5vbmljYWxpemVkLmFwcGVuZChjb21wb25lbnRzW2ldKTsKLSAgICB9Ci0gICAgaWYg
KGNhbm9uaWNhbGl6ZWQuaXNFbXB0eSgpKQotICAgICAgICByZXR1cm4gRE9NRmlsZVBhdGg6OnJv
b3Q7Ci0gICAgU3RyaW5nIHJlc3VsdDsKLSAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGNhbm9u
aWNhbGl6ZWQuc2l6ZSgpOyArK2kpIHsKLSAgICAgICAgcmVzdWx0LmFwcGVuZChET01GaWxlUGF0
aDo6c2VwYXJhdG9yKTsKLSAgICAgICAgcmVzdWx0LmFwcGVuZChjYW5vbmljYWxpemVkW2ldKTsK
LSAgICB9Ci0gICAgcmV0dXJuIHJlc3VsdDsKLX0KLQotYm9vbCBET01GaWxlUGF0aDo6aXNWYWxp
ZFBhdGgoY29uc3QgU3RyaW5nJiBwYXRoKQotewotICAgIGlmIChwYXRoLmlzRW1wdHkoKSB8fCBw
YXRoID09IERPTUZpbGVQYXRoOjpyb290KQotICAgICAgICByZXR1cm4gdHJ1ZTsKLQotICAgIC8v
IEVtYmVkZGVkIE5VTHMgYXJlIG5vdCBhbGxvd2VkLgotICAgIGlmIChwYXRoLmZpbmQoc3RhdGlj
X2Nhc3Q8VUNoYXI+KDApKSAhPSBXVEY6Om5vdEZvdW5kKQotICAgICAgICByZXR1cm4gZmFsc2U7
Ci0KLSAgICAvLyBXaGlsZSBub3QgW3lldF0gcmVzdHJpY3RlZCBieSB0aGUgc3BlYywgJ1xcJyBj
b21wbGljYXRlcyBpbXBsZW1lbnRhdGlvbiBmb3IgQ2hyb21pdW0uCi0gICAgaWYgKHBhdGguZmlu
ZCgnXFwnKSAhPSBXVEY6Om5vdEZvdW5kKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICAv
LyBUaGlzIG1ldGhvZCBpcyBvbmx5IGNhbGxlZCBvbiBmdWxseS1ldmFsdWF0ZWQgYWJzb2x1dGUg
cGF0aHMuIEFueSBzaWduIG9mICIuLiIgb3IgIi4iIGlzIGxpa2VseSBhbiBhdHRlbXB0IHRvIGJy
ZWFrIG91dCBvZiB0aGUgc2FuZGJveC4KLSAgICBWZWN0b3I8U3RyaW5nPiBjb21wb25lbnRzOwot
ICAgIHBhdGguc3BsaXQoRE9NRmlsZVBhdGg6OnNlcGFyYXRvciwgY29tcG9uZW50cyk7Ci0gICAg
Zm9yIChzaXplX3QgaSA9IDA7IGkgPCBjb21wb25lbnRzLnNpemUoKTsgKytpKSB7Ci0gICAgICAg
IGlmIChjb21wb25lbnRzW2ldID09ICIuIikKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAg
ICAgICAgaWYgKGNvbXBvbmVudHNbaV0gPT0gIi4uIikKLSAgICAgICAgICAgIHJldHVybiBmYWxz
ZTsKLSAgICB9Ci0gICAgcmV0dXJuIHRydWU7Ci19Ci0KLWJvb2wgRE9NRmlsZVBhdGg6OmlzVmFs
aWROYW1lKGNvbnN0IFN0cmluZyYgbmFtZSkKLXsKLSAgICBpZiAobmFtZS5pc0VtcHR5KCkpCi0g
ICAgICAgIHJldHVybiB0cnVlOwotICAgIC8vICcvJyBpcyBub3QgYWxsb3dlZCBpbiBuYW1lLgot
ICAgIGlmIChuYW1lLmNvbnRhaW5zKCcvJykpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICBy
ZXR1cm4gaXNWYWxpZFBhdGgobmFtZSk7Ci19Ci0KLX0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKLQot
I2VuZGlmIC8vIEVOQUJMRShGSUxFX1NZU1RFTSkKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2ZpbGVh
cGkvRE9NRmlsZVBhdGguaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9maWxlYXBpL0RP
TUZpbGVQYXRoLmgJKHJldmlzaW9uIDExMDg1NikKKysrIFNvdXJjZS9XZWJDb3JlL2ZpbGVhcGkv
RE9NRmlsZVBhdGguaAkod29ya2luZyBjb3B5KQpAQCAtMSw4NiArMCwwIEBACi0vKgotICogQ29w
eXJpZ2h0IChDKSAyMDEwIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICog
UmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBv
ciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0
aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCi0gKiBtZXQ6Ci0gKgotICogICAgICogUmVkaXN0
cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQK
LSAqIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lci4KLSAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJl
cHJvZHVjZSB0aGUgYWJvdmUKLSAqIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIKLSAqIGluIHRoZSBkb2N1bWVudGF0
aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKLSAqIGRpc3RyaWJ1
dGlvbi4KLSAqICAgICAqIE5laXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xlIEluYy4gbm9yIHRoZSBu
YW1lcyBvZiBpdHMKLSAqIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHBy
b21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tCi0gKiB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3Bl
Y2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMg
UFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKLSAqICJB
UyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBC
VVQgTk9UCi0gKiBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5U
QUJJTElUWSBBTkQgRklUTkVTUyBGT1IKLSAqIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVND
TEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCi0gKiBPV05FUiBPUiBDT05U
UklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwK
LSAqIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJ
TkcsIEJVVCBOT1QKLSAqIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09P
RFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAotICogREFUQSwgT1IgUFJPRklUUzsgT1IgQlVT
SU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCi0gKiBUSEVPUlkg
T0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBU
T1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFO
WSBXQVkgT1VUIE9GIFRIRSBVU0UKLSAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNF
RCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotI2lmbmRlZiBET01G
aWxlUGF0aF9oCi0jZGVmaW5lIERPTUZpbGVQYXRoX2gKLQotI2luY2x1ZGUgIlBsYXRmb3JtU3Ry
aW5nLmgiCi0jaW5jbHVkZSA8d3RmL1Bhc3NSZWZQdHIuaD4KLSNpbmNsdWRlIDx3dGYvUmVmQ291
bnRlZC5oPgotCi1uYW1lc3BhY2UgV2ViQ29yZSB7Ci0KLS8vIERPTUZpbGVTeXN0ZW0gcGF0aCB1
dGlsaXRpZXMuIEFsbCBtZXRob2RzIGluIHRoaXMgY2xhc3MgYXJlIHN0YXRpYy4KLWNsYXNzIERP
TUZpbGVQYXRoIHsKLXB1YmxpYzoKLSAgICBzdGF0aWMgY29uc3QgY2hhciBzZXBhcmF0b3I7Ci0g
ICAgc3RhdGljIGNvbnN0IGNoYXIgcm9vdFtdOwotCi0gICAgLy8gUmV0dXJucyB0aGUgbmFtZSBw
YXJ0IGZyb20gdGhlIGdpdmVuIHBhdGguCi0gICAgc3RhdGljIFN0cmluZyBnZXROYW1lKGNvbnN0
IFN0cmluZyYgcGF0aCk7Ci0KLSAgICAvLyBSZXR1cm5zIHRoZSBwYXJlbnQgZGlyZWN0b3J5IHBh
dGggb2YgdGhlIGdpdmVuIHBhdGguCi0gICAgc3RhdGljIFN0cmluZyBnZXREaXJlY3RvcnkoY29u
c3QgU3RyaW5nJiBwYXRoKTsKLQotICAgIC8vIENoZWNrcyBpZiBhIGdpdmVuIHBhdGggaXMgYSBw
YXJlbnQgb2YgbWF5QmVDaGlsZC4gVGhpcyBtZXRob2QgYXNzdW1lcyBnaXZlbiBwYXRocyBhcmUg
YWJzb2x1dGUgYW5kIGRvIG5vdCBoYXZlIGV4dHJhIHJlZmVyZW5jZXMgdG8gYSBwYXJlbnQgKGku
ZS4gIi4uLyIpLgotICAgIHN0YXRpYyBib29sIGlzUGFyZW50T2YoY29uc3QgU3RyaW5nJiBwYXRo
LCBjb25zdCBTdHJpbmcmIG1heUJlQ2hpbGQpOwotCi0gICAgLy8gQXBwZW5kcyB0aGUgc2VwYXJh
dG9yIGF0IHRoZSBlbmQgb2YgdGhlIHBhdGggaWYgaXQncyBub3QgdGhlcmUgYWxyZWFkeS4KLSAg
ICBzdGF0aWMgU3RyaW5nIGVuc3VyZURpcmVjdG9yeVBhdGgoY29uc3QgU3RyaW5nJiBwYXRoKTsK
LQotICAgIC8vIFJldHVybnMgYSBuZXcgcGF0aCBieSBhcHBlbmRpbmcgYSBzZXBhcmF0b3IgYW5k
IHRoZSBzdXBwbGllZCBwYXRoIGNvbXBvbmVudCB0byB0aGUgcGF0aC4KLSAgICBzdGF0aWMgU3Ry
aW5nIGFwcGVuZChjb25zdCBTdHJpbmcmIHBhdGgsIGNvbnN0IFN0cmluZyYgY29tcG9uZW50KTsK
LQotICAgIHN0YXRpYyBib29sIGlzQWJzb2x1dGUoY29uc3QgU3RyaW5nJiBwYXRoKQotICAgIHsK
LSAgICAgICAgcmV0dXJuIHBhdGguc3RhcnRzV2l0aChET01GaWxlUGF0aDo6cm9vdCk7Ci0gICAg
fQotCi0gICAgc3RhdGljIGJvb2wgZW5kc1dpdGhTZXBhcmF0b3IoY29uc3QgU3RyaW5nJiBwYXRo
KQotICAgIHsKLSAgICAgICAgcmV0dXJuIHBhdGhbcGF0aC5sZW5ndGgoKSAtIDFdID09IERPTUZp
bGVQYXRoOjpzZXBhcmF0b3I7Ci0gICAgfQotCi0gICAgLy8gRXZhbHVhdGVzIGFsbCAiLi4vIiBh
bmQgIi4vIiBzZWdtZW50cy4gIE5vdGUgdGhhdCAiLy4uLyIgZXhwYW5kcyB0byAiLyIsIHNvIHlv
dSBjYW4ndCBldmVyIHJlZmVyIHRvIGFueXRoaW5nIGFib3ZlIHRoZSByb290IGRpcmVjdG9yeS4K
LSAgICBzdGF0aWMgU3RyaW5nIHJlbW92ZUV4dHJhUGFyZW50UmVmZXJlbmNlcyhjb25zdCBTdHJp
bmcmIHBhdGgpOwotCi0gICAgLy8gQ2hlY2tzIGlmIHRoZSBnaXZlbiBwYXRoIGZvbGxvd3MgdGhl
IEZpbGVTeXN0ZW0gQVBJIG5hbWluZyByZXN0cmljdGlvbnMuCi0gICAgc3RhdGljIGJvb2wgaXNW
YWxpZFBhdGgoY29uc3QgU3RyaW5nJiBwYXRoKTsKLQotICAgIC8vIENoZWNrcyBpZiB0aGUgZ2l2
ZW4gbmFtZSBmb2xsb3dzIHRoZSBGaWxlU3lzdGVtIEFQSSBuYW1pbmcgcmVzdHJpY3Rpb25zLgot
ICAgIHN0YXRpYyBib29sIGlzVmFsaWROYW1lKGNvbnN0IFN0cmluZyYgbmFtZSk7Ci0KLXByaXZh
dGU6Ci0gICAgRE9NRmlsZVBhdGgoKSB7IH0KLX07Ci0KLX0gLy8gbmFtZXNwYWNlIFdlYkNvcmUK
LQotI2VuZGlmIC8vIERPTUZpbGVQYXRoX2gKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2ZpbGVhcGkv
RE9NRmlsZVN5c3RlbS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvZmlsZWFwaS9E
T01GaWxlU3lzdGVtLmNwcAkocmV2aXNpb24gMTEwODU2KQorKysgU291cmNlL1dlYkNvcmUvZmls
ZWFwaS9ET01GaWxlU3lzdGVtLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSwxNjIgKzAsMCBAQAot
LyoKLSAqIENvcHlyaWdodCAoQykgMjAxMCBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9y
bXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3Zp
ZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZQotICogbWV0OgotICoKLSAqICAg
ICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUg
Y29weXJpZ2h0Ci0gKiBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIuCi0gKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZv
cm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCi0gKiBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyCi0gKiBpbiB0aGUg
ZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCi0g
KiBkaXN0cmlidXRpb24uCi0gKiAgICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9mIEdvb2dsZSBJbmMu
IG5vciB0aGUgbmFtZXMgb2YgaXRzCi0gKiBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5k
b3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbQotICogdGhpcyBzb2Z0d2FyZSB3
aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KLSAqCi0gKiBUSElTIFNP
RlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVU
T1JTCi0gKiAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElO
Q0xVRElORywgQlVUIE5PVAotICogTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBP
RiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCi0gKiBBIFBBUlRJQ1VMQVIgUFVSUE9T
RSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAotICogT1dO
RVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElO
Q0lERU5UQUwsCi0gKiBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdF
UyAoSU5DTFVESU5HLCBCVVQgTk9UCi0gKiBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJT
VElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKLSAqIERBVEEsIE9SIFBST0ZJ
VFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQot
ICogVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJ
TElUWSwgT1IgVE9SVAotICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJ
U0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0gKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVO
IElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLSNp
bmNsdWRlICJjb25maWcuaCIKLSNpbmNsdWRlICJET01GaWxlU3lzdGVtLmgiCi0KLSNpZiBFTkFC
TEUoRklMRV9TWVNURU0pCi0KLSNpbmNsdWRlICJBc3luY0ZpbGVTeXN0ZW0uaCIKLSNpbmNsdWRl
ICJET01GaWxlUGF0aC5oIgotI2luY2x1ZGUgIkRpcmVjdG9yeUVudHJ5LmgiCi0jaW5jbHVkZSAi
RXJyb3JDYWxsYmFjay5oIgotI2luY2x1ZGUgIkZpbGUuaCIKLSNpbmNsdWRlICJGaWxlQ2FsbGJh
Y2suaCIKLSNpbmNsdWRlICJGaWxlRW50cnkuaCIKLSNpbmNsdWRlICJGaWxlTWV0YWRhdGEuaCIK
LSNpbmNsdWRlICJGaWxlU3lzdGVtQ2FsbGJhY2tzLmgiCi0jaW5jbHVkZSAiRmlsZVdyaXRlci5o
IgotI2luY2x1ZGUgIkZpbGVXcml0ZXJCYXNlQ2FsbGJhY2suaCIKLSNpbmNsdWRlICJGaWxlV3Jp
dGVyQ2FsbGJhY2suaCIKLSNpbmNsdWRlICJJbnNwZWN0b3JGaWxlU3lzdGVtSW5zdHJ1bWVudGF0
aW9uLmgiCi0jaW5jbHVkZSAiTWV0YWRhdGFDYWxsYmFjay5oIgotI2luY2x1ZGUgIlNjcmlwdEV4
ZWN1dGlvbkNvbnRleHQuaCIKLSNpbmNsdWRlIDx3dGYvT3duUHRyLmg+Ci0KLW5hbWVzcGFjZSBX
ZWJDb3JlIHsKLQotLy8gc3RhdGljCi1QYXNzUmVmUHRyPERPTUZpbGVTeXN0ZW0+IERPTUZpbGVT
eXN0ZW06OmNyZWF0ZShTY3JpcHRFeGVjdXRpb25Db250ZXh0KiBjb250ZXh0LCBjb25zdCBTdHJp
bmcmIG5hbWUsIFBhc3NPd25QdHI8QXN5bmNGaWxlU3lzdGVtPiBhc3luY0ZpbGVTeXN0ZW0pCi17
Ci0gICAgUmVmUHRyPERPTUZpbGVTeXN0ZW0+IGZpbGVTeXN0ZW0oYWRvcHRSZWYobmV3IERPTUZp
bGVTeXN0ZW0oY29udGV4dCwgbmFtZSwgYXN5bmNGaWxlU3lzdGVtKSkpOwotICAgIGZpbGVTeXN0
ZW0tPnN1c3BlbmRJZk5lZWRlZCgpOwotICAgIEluc3BlY3Rvckluc3RydW1lbnRhdGlvbjo6ZGlk
T3BlbkZpbGVTeXN0ZW0oZmlsZVN5c3RlbS5nZXQoKSk7Ci0gICAgcmV0dXJuIGZpbGVTeXN0ZW0u
cmVsZWFzZSgpOwotfQotCi1ET01GaWxlU3lzdGVtOjpET01GaWxlU3lzdGVtKFNjcmlwdEV4ZWN1
dGlvbkNvbnRleHQqIGNvbnRleHQsIGNvbnN0IFN0cmluZyYgbmFtZSwgUGFzc093blB0cjxBc3lu
Y0ZpbGVTeXN0ZW0+IGFzeW5jRmlsZVN5c3RlbSkKLSAgICA6IERPTUZpbGVTeXN0ZW1CYXNlKGNv
bnRleHQsIG5hbWUsIGFzeW5jRmlsZVN5c3RlbSkKLSAgICAsIEFjdGl2ZURPTU9iamVjdChjb250
ZXh0LCB0aGlzKQotewotfQotCi1QYXNzUmVmUHRyPERpcmVjdG9yeUVudHJ5PiBET01GaWxlU3lz
dGVtOjpyb290KCkKLXsKLSAgICByZXR1cm4gRGlyZWN0b3J5RW50cnk6OmNyZWF0ZSh0aGlzLCBE
T01GaWxlUGF0aDo6cm9vdCk7Ci19Ci0KLXZvaWQgRE9NRmlsZVN5c3RlbTo6c3RvcCgpCi17Ci0g
ICAgbV9hc3luY0ZpbGVTeXN0ZW0tPnN0b3AoKTsKLX0KLQotYm9vbCBET01GaWxlU3lzdGVtOjpo
YXNQZW5kaW5nQWN0aXZpdHkoKSBjb25zdAotewotICAgIHJldHVybiBtX2FzeW5jRmlsZVN5c3Rl
bS0+aGFzUGVuZGluZ0FjdGl2aXR5KCk7Ci19Ci0KLXZvaWQgRE9NRmlsZVN5c3RlbTo6Y29udGV4
dERlc3Ryb3llZCgpCi17Ci0gICAgbV9hc3luY0ZpbGVTeXN0ZW0tPnN0b3AoKTsKLSAgICBBY3Rp
dmVET01PYmplY3Q6OmNvbnRleHREZXN0cm95ZWQoKTsKLX0KLQotbmFtZXNwYWNlIHsKLQotY2xh
c3MgQ29udmVydFRvRmlsZVdyaXRlckNhbGxiYWNrIDogcHVibGljIEZpbGVXcml0ZXJCYXNlQ2Fs
bGJhY2sgewotcHVibGljOgotICAgIHN0YXRpYyBQYXNzUmVmUHRyPENvbnZlcnRUb0ZpbGVXcml0
ZXJDYWxsYmFjaz4gY3JlYXRlKFBhc3NSZWZQdHI8RmlsZVdyaXRlckNhbGxiYWNrPiBjYWxsYmFj
aykKLSAgICB7Ci0gICAgICAgIHJldHVybiBhZG9wdFJlZihuZXcgQ29udmVydFRvRmlsZVdyaXRl
ckNhbGxiYWNrKGNhbGxiYWNrKSk7Ci0gICAgfQotCi0gICAgYm9vbCBoYW5kbGVFdmVudChGaWxl
V3JpdGVyQmFzZSogZmlsZVdyaXRlckJhc2UpCi0gICAgewotICAgICAgICByZXR1cm4gbV9jYWxs
YmFjay0+aGFuZGxlRXZlbnQoc3RhdGljX2Nhc3Q8RmlsZVdyaXRlcio+KGZpbGVXcml0ZXJCYXNl
KSk7Ci0gICAgfQotcHJpdmF0ZToKLSAgICBDb252ZXJ0VG9GaWxlV3JpdGVyQ2FsbGJhY2soUGFz
c1JlZlB0cjxGaWxlV3JpdGVyQ2FsbGJhY2s+IGNhbGxiYWNrKQotICAgICAgICA6IG1fY2FsbGJh
Y2soY2FsbGJhY2spCi0gICAgewotICAgIH0KLSAgICBSZWZQdHI8RmlsZVdyaXRlckNhbGxiYWNr
PiBtX2NhbGxiYWNrOwotfTsKLQotfQotCi12b2lkIERPTUZpbGVTeXN0ZW06OmNyZWF0ZVdyaXRl
cihjb25zdCBGaWxlRW50cnkqIGZpbGVFbnRyeSwgUGFzc1JlZlB0cjxGaWxlV3JpdGVyQ2FsbGJh
Y2s+IHN1Y2Nlc3NDYWxsYmFjaywgUGFzc1JlZlB0cjxFcnJvckNhbGxiYWNrPiBlcnJvckNhbGxi
YWNrKQotewotICAgIEFTU0VSVChmaWxlRW50cnkpOwotCi0gICAgUmVmUHRyPEZpbGVXcml0ZXI+
IGZpbGVXcml0ZXIgPSBGaWxlV3JpdGVyOjpjcmVhdGUoc2NyaXB0RXhlY3V0aW9uQ29udGV4dCgp
KTsKLSAgICBSZWZQdHI8RmlsZVdyaXRlckJhc2VDYWxsYmFjaz4gY29udmVyc2lvbkNhbGxiYWNr
ID0gQ29udmVydFRvRmlsZVdyaXRlckNhbGxiYWNrOjpjcmVhdGUoc3VjY2Vzc0NhbGxiYWNrKTsK
LSAgICBPd25QdHI8RmlsZVdyaXRlckJhc2VDYWxsYmFja3M+IGNhbGxiYWNrcyA9IEZpbGVXcml0
ZXJCYXNlQ2FsbGJhY2tzOjpjcmVhdGUoZmlsZVdyaXRlciwgY29udmVyc2lvbkNhbGxiYWNrLCBl
cnJvckNhbGxiYWNrKTsKLSAgICBtX2FzeW5jRmlsZVN5c3RlbS0+Y3JlYXRlV3JpdGVyKGZpbGVX
cml0ZXIuZ2V0KCksIGZpbGVFbnRyeS0+ZnVsbFBhdGgoKSwgY2FsbGJhY2tzLnJlbGVhc2UoKSk7
Ci19Ci0KLW5hbWVzcGFjZSB7Ci0KLWNsYXNzIEdldFBhdGhDYWxsYmFjayA6IHB1YmxpYyBGaWxl
U3lzdGVtQ2FsbGJhY2tzQmFzZSB7Ci1wdWJsaWM6Ci0gICAgc3RhdGljIFBhc3NPd25QdHI8R2V0
UGF0aENhbGxiYWNrPiBjcmVhdGUoUGFzc1JlZlB0cjxET01GaWxlU3lzdGVtPiBmaWxlc3lzdGVt
LCBjb25zdCBTdHJpbmcmIG5hbWUsIFBhc3NSZWZQdHI8RmlsZUNhbGxiYWNrPiBzdWNjZXNzQ2Fs
bGJhY2ssIFBhc3NSZWZQdHI8RXJyb3JDYWxsYmFjaz4gZXJyb3JDYWxsYmFjaykKLSAgICB7Ci0g
ICAgICAgIHJldHVybiBhZG9wdFB0cihuZXcgR2V0UGF0aENhbGxiYWNrKGZpbGVzeXN0ZW0sIG5h
bWUsIHN1Y2Nlc3NDYWxsYmFjaywgZXJyb3JDYWxsYmFjaykpOwotICAgIH0KLQotICAgIHZpcnR1
YWwgdm9pZCBkaWRSZWFkTWV0YWRhdGEoY29uc3QgRmlsZU1ldGFkYXRhJiBtZXRhZGF0YSkKLSAg
ICB7Ci0gICAgICAgIEFTU0VSVCghbWV0YWRhdGEucGxhdGZvcm1QYXRoLmlzRW1wdHkoKSk7Ci0g
ICAgICAgIG1fZmlsZXN5c3RlbS0+c2NoZWR1bGVDYWxsYmFjayhtX3N1Y2Nlc3NDYWxsYmFjay5y
ZWxlYXNlKCksIEZpbGU6OmNyZWF0ZVdpdGhOYW1lKG1ldGFkYXRhLnBsYXRmb3JtUGF0aCwgbV9u
YW1lKSk7Ci0gICAgfQotCi1wcml2YXRlOgotICAgIEdldFBhdGhDYWxsYmFjayhQYXNzUmVmUHRy
PERPTUZpbGVTeXN0ZW0+IGZpbGVzeXN0ZW0sIGNvbnN0IFN0cmluZyYgbmFtZSwgIFBhc3NSZWZQ
dHI8RmlsZUNhbGxiYWNrPiBzdWNjZXNzQ2FsbGJhY2ssIFBhc3NSZWZQdHI8RXJyb3JDYWxsYmFj
az4gZXJyb3JDYWxsYmFjaykKLSAgICAgICAgOiBGaWxlU3lzdGVtQ2FsbGJhY2tzQmFzZShlcnJv
ckNhbGxiYWNrKQotICAgICAgICAsIG1fZmlsZXN5c3RlbShmaWxlc3lzdGVtKQotICAgICAgICAs
IG1fbmFtZShuYW1lKQotICAgICAgICAsIG1fc3VjY2Vzc0NhbGxiYWNrKHN1Y2Nlc3NDYWxsYmFj
aykKLSAgICB7Ci0gICAgfQotCi0gICAgUmVmUHRyPERPTUZpbGVTeXN0ZW0+IG1fZmlsZXN5c3Rl
bTsKLSAgICBTdHJpbmcgbV9uYW1lOwotICAgIFJlZlB0cjxGaWxlQ2FsbGJhY2s+IG1fc3VjY2Vz
c0NhbGxiYWNrOwotfTsKLQotfSAvLyBuYW1lc3BhY2UKLQotdm9pZCBET01GaWxlU3lzdGVtOjpj
cmVhdGVGaWxlKGNvbnN0IEZpbGVFbnRyeSogZmlsZUVudHJ5LCBQYXNzUmVmUHRyPEZpbGVDYWxs
YmFjaz4gc3VjY2Vzc0NhbGxiYWNrLCBQYXNzUmVmUHRyPEVycm9yQ2FsbGJhY2s+IGVycm9yQ2Fs
bGJhY2spCi17Ci0gICAgbV9hc3luY0ZpbGVTeXN0ZW0tPmNyZWF0ZVNuYXBzaG90RmlsZUFuZFJl
YWRNZXRhZGF0YShmaWxlRW50cnktPmZ1bGxQYXRoKCksIEdldFBhdGhDYWxsYmFjazo6Y3JlYXRl
KHRoaXMsIGZpbGVFbnRyeS0+bmFtZSgpLCBzdWNjZXNzQ2FsbGJhY2ssIGVycm9yQ2FsbGJhY2sp
KTsKLX0KLQotfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQotCi0jZW5kaWYgLy8gRU5BQkxFKEZJTEVf
U1lTVEVNKQpJbmRleDogU291cmNlL1dlYkNvcmUvZmlsZWFwaS9ET01GaWxlU3lzdGVtLmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvZmlsZWFwaS9ET01GaWxlU3lzdGVtLmgJKHJldmlz
aW9uIDExMDg1NikKKysrIFNvdXJjZS9XZWJDb3JlL2ZpbGVhcGkvRE9NRmlsZVN5c3RlbS5oCSh3
b3JraW5nIGNvcHkpCkBAIC0xLDEwOSArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEw
IEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24g
YW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBt
b2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNv
bmRpdGlvbnMgYXJlCi0gKiBtZXQ6Ci0gKgotICogICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNv
dXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqICAg
ICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJv
dmUKLSAqIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIKLSAqIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhl
ciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKLSAqIGRpc3RyaWJ1dGlvbi4KLSAqICAgICAq
IE5laXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xlIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMKLSAq
IGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMg
ZGVyaXZlZCBmcm9tCi0gKiB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3Jp
dHRlbiBwZXJtaXNzaW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhF
IENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKLSAqICJBUyBJUyIgQU5EIEFOWSBF
WFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCi0gKiBMSU1J
VEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklU
TkVTUyBGT1IKLSAqIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBF
VkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCi0gKiBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElB
QkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKLSAqIFNQRUNJQUwsIEVY
RU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKLSAq
IExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7
IExPU1MgT0YgVVNFLAotICogREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBU
SU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCi0gKiBUSEVPUlkgT0YgTElBQklMSVRZLCBX
SEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVE
SU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRI
RSBVU0UKLSAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lC
SUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotI2lmbmRlZiBET01GaWxlU3lzdGVtX2gKLSNk
ZWZpbmUgRE9NRmlsZVN5c3RlbV9oCi0KLSNpZiBFTkFCTEUoRklMRV9TWVNURU0pCi0KLSNpbmNs
dWRlICJBY3RpdmVET01PYmplY3QuaCIKLSNpbmNsdWRlICJET01GaWxlU3lzdGVtQmFzZS5oIgot
I2luY2x1ZGUgIlNjcmlwdEV4ZWN1dGlvbkNvbnRleHQuaCIKLQotbmFtZXNwYWNlIFdlYkNvcmUg
ewotCi1jbGFzcyBEaXJlY3RvcnlFbnRyeTsKLWNsYXNzIEZpbGU7Ci1jbGFzcyBGaWxlQ2FsbGJh
Y2s7Ci1jbGFzcyBGaWxlRW50cnk7Ci1jbGFzcyBGaWxlV3JpdGVyQ2FsbGJhY2s7Ci0KLWNsYXNz
IERPTUZpbGVTeXN0ZW0gOiBwdWJsaWMgRE9NRmlsZVN5c3RlbUJhc2UsIHB1YmxpYyBBY3RpdmVE
T01PYmplY3QgewotcHVibGljOgotICAgIHN0YXRpYyBQYXNzUmVmUHRyPERPTUZpbGVTeXN0ZW0+
IGNyZWF0ZShTY3JpcHRFeGVjdXRpb25Db250ZXh0KiwgY29uc3QgU3RyaW5nJiBuYW1lLCBQYXNz
T3duUHRyPEFzeW5jRmlsZVN5c3RlbT4pOwotCi0gICAgUGFzc1JlZlB0cjxEaXJlY3RvcnlFbnRy
eT4gcm9vdCgpOwotCi0gICAgLy8gQWN0aXZlRE9NT2JqZWN0IG1ldGhvZHMuCi0gICAgdmlydHVh
bCB2b2lkIHN0b3AoKTsKLSAgICB2aXJ0dWFsIGJvb2wgaGFzUGVuZGluZ0FjdGl2aXR5KCkgY29u
c3Q7Ci0gICAgdmlydHVhbCB2b2lkIGNvbnRleHREZXN0cm95ZWQoKTsKLQotICAgIHZvaWQgY3Jl
YXRlV3JpdGVyKGNvbnN0IEZpbGVFbnRyeSosIFBhc3NSZWZQdHI8RmlsZVdyaXRlckNhbGxiYWNr
PiwgUGFzc1JlZlB0cjxFcnJvckNhbGxiYWNrPik7Ci0gICAgdm9pZCBjcmVhdGVGaWxlKGNvbnN0
IEZpbGVFbnRyeSosIFBhc3NSZWZQdHI8RmlsZUNhbGxiYWNrPiwgUGFzc1JlZlB0cjxFcnJvckNh
bGxiYWNrPik7Ci0KLSAgICAvLyBTY2hlZHVsZSBhIGNhbGxiYWNrLiBUaGlzIHNob3VsZCBub3Qg
Y3Jvc3MgdGhyZWFkcyAoc2hvdWxkIGJlIGNhbGxlZCBvbiB0aGUgc2FtZSBjb250ZXh0IHRocmVh
ZCkuCi0gICAgLy8gRklYTUU6IG1vdmUgdGhpcyB0byBhIG1vcmUgZ2VuZXJpYyBwbGFjZS4KLSAg
ICB0ZW1wbGF0ZSA8dHlwZW5hbWUgQ0IsIHR5cGVuYW1lIENCQXJnPgotICAgIHN0YXRpYyB2b2lk
IHNjaGVkdWxlQ2FsbGJhY2soU2NyaXB0RXhlY3V0aW9uQ29udGV4dCosIFBhc3NSZWZQdHI8Q0I+
LCBQYXNzUmVmUHRyPENCQXJnPik7Ci0KLSAgICB0ZW1wbGF0ZSA8dHlwZW5hbWUgQ0IsIHR5cGVu
YW1lIENCQXJnPgotICAgIHZvaWQgc2NoZWR1bGVDYWxsYmFjayhQYXNzUmVmUHRyPENCPiBjYWxs
YmFjaywgUGFzc1JlZlB0cjxDQkFyZz4gY2FsbGJhY2tBcmcpCi0gICAgewotICAgICAgICBzY2hl
ZHVsZUNhbGxiYWNrKHNjcmlwdEV4ZWN1dGlvbkNvbnRleHQoKSwgY2FsbGJhY2ssIGNhbGxiYWNr
QXJnKTsKLSAgICB9Ci0KLXByaXZhdGU6Ci0gICAgRE9NRmlsZVN5c3RlbShTY3JpcHRFeGVjdXRp
b25Db250ZXh0KiwgY29uc3QgU3RyaW5nJiBuYW1lLCBQYXNzT3duUHRyPEFzeW5jRmlsZVN5c3Rl
bT4pOwotCi0gICAgLy8gQSBoZWxwZXIgdGVtcGxhdGUgdG8gc2NoZWR1bGUgYSBjYWxsYmFjayB0
YXNrLgotICAgIHRlbXBsYXRlIDx0eXBlbmFtZSBDQiwgdHlwZW5hbWUgQ0JBcmc+Ci0gICAgY2xh
c3MgRGlzcGF0Y2hDYWxsYmFja1Rhc2sgOiBwdWJsaWMgU2NyaXB0RXhlY3V0aW9uQ29udGV4dDo6
VGFzayB7Ci0gICAgcHVibGljOgotICAgICAgICBEaXNwYXRjaENhbGxiYWNrVGFzayhQYXNzUmVm
UHRyPENCPiBjYWxsYmFjaywgUGFzc1JlZlB0cjxDQkFyZz4gYXJnKQotICAgICAgICAgICAgOiBt
X2NhbGxiYWNrKGNhbGxiYWNrKQotICAgICAgICAgICAgLCBtX2NhbGxiYWNrQXJnKGFyZykKLSAg
ICAgICAgewotICAgICAgICB9Ci0KLSAgICAgICAgdmlydHVhbCB2b2lkIHBlcmZvcm1UYXNrKFNj
cmlwdEV4ZWN1dGlvbkNvbnRleHQqKQotICAgICAgICB7Ci0gICAgICAgICAgICBtX2NhbGxiYWNr
LT5oYW5kbGVFdmVudChtX2NhbGxiYWNrQXJnLmdldCgpKTsKLSAgICAgICAgfQotCi0gICAgcHJp
dmF0ZToKLSAgICAgICAgUmVmUHRyPENCPiBtX2NhbGxiYWNrOwotICAgICAgICBSZWZQdHI8Q0JB
cmc+IG1fY2FsbGJhY2tBcmc7Ci0gICAgfTsKLX07Ci0KLXRlbXBsYXRlIDx0eXBlbmFtZSBDQiwg
dHlwZW5hbWUgQ0JBcmc+Ci12b2lkIERPTUZpbGVTeXN0ZW06OnNjaGVkdWxlQ2FsbGJhY2soU2Ny
aXB0RXhlY3V0aW9uQ29udGV4dCogc2NyaXB0RXhlY3V0aW9uQ29udGV4dCwgUGFzc1JlZlB0cjxD
Qj4gY2FsbGJhY2ssIFBhc3NSZWZQdHI8Q0JBcmc+IGFyZykKLXsKLSAgICBBU1NFUlQoc2NyaXB0
RXhlY3V0aW9uQ29udGV4dC0+aXNDb250ZXh0VGhyZWFkKCkpOwotICAgIGlmIChjYWxsYmFjaykK
LSAgICAgICAgc2NyaXB0RXhlY3V0aW9uQ29udGV4dC0+cG9zdFRhc2soYWRvcHRQdHIobmV3IERp
c3BhdGNoQ2FsbGJhY2tUYXNrPENCLCBDQkFyZz4oY2FsbGJhY2ssIGFyZykpKTsKLX0KLQotfSAv
LyBuYW1lc3BhY2UKLQotI2VuZGlmIC8vIEVOQUJMRShGSUxFX1NZU1RFTSkKLQotI2VuZGlmIC8v
IERPTUZpbGVTeXN0ZW1faApJbmRleDogU291cmNlL1dlYkNvcmUvZmlsZWFwaS9ET01GaWxlU3lz
dGVtLmlkbAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9maWxlYXBpL0RPTUZpbGVTeXN0
ZW0uaWRsCShyZXZpc2lvbiAxMTA4NTYpCisrKyBTb3VyY2UvV2ViQ29yZS9maWxlYXBpL0RPTUZp
bGVTeXN0ZW0uaWRsCSh3b3JraW5nIGNvcHkpCkBAIC0xLDQxICswLDAgQEAKLS8qCi0gKiBDb3B5
cmlnaHQgKEMpIDIwMTAgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHly
aWdodCAoQykgMjAxMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVk
aXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3
aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUg
Zm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCi0gKiBtZXQ6Ci0gKgotICogICAgICogUmVkaXN0cmli
dXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAq
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lci4KLSAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJv
ZHVjZSB0aGUgYWJvdmUKLSAqIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIKLSAqIGluIHRoZSBkb2N1bWVudGF0aW9u
IGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKLSAqIGRpc3RyaWJ1dGlv
bi4KLSAqICAgICAqIE5laXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xlIEluYy4gbm9yIHRoZSBuYW1l
cyBvZiBpdHMKLSAqIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21v
dGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tCi0gKiB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lm
aWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJP
VklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKLSAqICJBUyBJ
UyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQg
Tk9UCi0gKiBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJ
TElUWSBBTkQgRklUTkVTUyBGT1IKLSAqIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJ
TUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCi0gKiBPV05FUiBPUiBDT05UUklC
VVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKLSAq
IFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcs
IEJVVCBOT1QKLSAqIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMg
T1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAotICogREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5F
U1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCi0gKiBUSEVPUlkgT0Yg
TElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JU
Ci0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBX
QVkgT1VUIE9GIFRIRSBVU0UKLSAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBP
RiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotbW9kdWxlIHN0b3JhZ2Ug
ewotICAgIGludGVyZmFjZSBbCi0gICAgICAgIENvbmRpdGlvbmFsPUZJTEVfU1lTVEVNLAotICAg
ICAgICBBY3RpdmVET01PYmplY3QsCi0gICAgICAgIEpTTm9TdGF0aWNUYWJsZXMKLSAgICBdIERP
TUZpbGVTeXN0ZW0gewotICAgICAgICByZWFkb25seSBhdHRyaWJ1dGUgRE9NU3RyaW5nIG5hbWU7
Ci0gICAgICAgIHJlYWRvbmx5IGF0dHJpYnV0ZSBEaXJlY3RvcnlFbnRyeSByb290OwotICAgIH07
Ci19CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9maWxlYXBpL0RPTUZpbGVTeXN0ZW1CYXNlLmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9maWxlYXBpL0RPTUZpbGVTeXN0ZW1CYXNlLmNw
cAkocmV2aXNpb24gMTEwODU2KQorKysgU291cmNlL1dlYkNvcmUvZmlsZWFwaS9ET01GaWxlU3lz
dGVtQmFzZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsMjAxICswLDAgQEAKLS8qCi0gKiBDb3B5
cmlnaHQgKEMpIDIwMTAgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBS
ZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9y
IHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRo
ZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUKLSAqIG1ldDoKLSAqCi0gKiAgICAgKiBSZWRpc3Ry
aWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAot
ICogbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyLgotICogICAgICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVw
cm9kdWNlIHRoZSBhYm92ZQotICogY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lcgotICogaW4gdGhlIGRvY3VtZW50YXRp
b24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQotICogZGlzdHJpYnV0
aW9uLgotICogICAgICogTmVpdGhlciB0aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBub3IgdGhlIG5h
bWVzIG9mIGl0cwotICogY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJv
bW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20KLSAqIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVj
aWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQ
Uk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUwotICogIkFT
IElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJV
VCBOT1QKLSAqIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRB
QklMSVRZIEFORCBGSVRORVNTIEZPUgotICogQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NM
QUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKLSAqIE9XTkVSIE9SIENPTlRS
SUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAot
ICogU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElO
RywgQlVUIE5PVAotICogTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09E
UyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCi0gKiBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJ
TkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKLSAqIFRIRU9SWSBP
RiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRP
UlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5Z
IFdBWSBPVVQgT0YgVEhFIFVTRQotICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VE
IE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0jaW5jbHVkZSAiY29u
ZmlnLmgiCi0jaW5jbHVkZSAiRE9NRmlsZVN5c3RlbUJhc2UuaCIKLQotI2lmIEVOQUJMRShGSUxF
X1NZU1RFTSkKLQotI2luY2x1ZGUgIkRPTUZpbGVQYXRoLmgiCi0jaW5jbHVkZSAiRGlyZWN0b3J5
RW50cnkuaCIKLSNpbmNsdWRlICJEaXJlY3RvcnlSZWFkZXJCYXNlLmgiCi0jaW5jbHVkZSAiRW50
cmllc0NhbGxiYWNrLmgiCi0jaW5jbHVkZSAiRW50cnlBcnJheS5oIgotI2luY2x1ZGUgIkVudHJ5
QmFzZS5oIgotI2luY2x1ZGUgIkVudHJ5Q2FsbGJhY2suaCIKLSNpbmNsdWRlICJFcnJvckNhbGxi
YWNrLmgiCi0jaW5jbHVkZSAiRmlsZUVycm9yLmgiCi0jaW5jbHVkZSAiRmlsZVN5c3RlbUNhbGxi
YWNrcy5oIgotI2luY2x1ZGUgIk1ldGFkYXRhQ2FsbGJhY2suaCIKLSNpbmNsdWRlICJTY3JpcHRF
eGVjdXRpb25Db250ZXh0LmgiCi0jaW5jbHVkZSAiVm9pZENhbGxiYWNrLmgiCi0jaW5jbHVkZSA8
d3RmL093blB0ci5oPgotCi1uYW1lc3BhY2UgV2ViQ29yZSB7Ci0KLURPTUZpbGVTeXN0ZW1CYXNl
OjpET01GaWxlU3lzdGVtQmFzZShTY3JpcHRFeGVjdXRpb25Db250ZXh0KiBjb250ZXh0LCBjb25z
dCBTdHJpbmcmIG5hbWUsIFBhc3NPd25QdHI8QXN5bmNGaWxlU3lzdGVtPiBhc3luY0ZpbGVTeXN0
ZW0pCi0gICAgOiBtX2NvbnRleHQoY29udGV4dCkKLSAgICAsIG1fbmFtZShuYW1lKQotICAgICwg
bV9hc3luY0ZpbGVTeXN0ZW0oYXN5bmNGaWxlU3lzdGVtKQotewotfQotCi1ET01GaWxlU3lzdGVt
QmFzZTo6fkRPTUZpbGVTeXN0ZW1CYXNlKCkKLXsKLX0KLQotU2VjdXJpdHlPcmlnaW4qIERPTUZp
bGVTeXN0ZW1CYXNlOjpzZWN1cml0eU9yaWdpbigpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIG1fY29u
dGV4dC0+c2VjdXJpdHlPcmlnaW4oKTsKLX0KLQotYm9vbCBET01GaWxlU3lzdGVtQmFzZTo6Z2V0
TWV0YWRhdGEoY29uc3QgRW50cnlCYXNlKiBlbnRyeSwgUGFzc1JlZlB0cjxNZXRhZGF0YUNhbGxi
YWNrPiBzdWNjZXNzQ2FsbGJhY2ssIFBhc3NSZWZQdHI8RXJyb3JDYWxsYmFjaz4gZXJyb3JDYWxs
YmFjaykKLXsKLSAgICBtX2FzeW5jRmlsZVN5c3RlbS0+cmVhZE1ldGFkYXRhKGVudHJ5LT5mdWxs
UGF0aCgpLCBNZXRhZGF0YUNhbGxiYWNrczo6Y3JlYXRlKHN1Y2Nlc3NDYWxsYmFjaywgZXJyb3JD
YWxsYmFjaykpOwotICAgIHJldHVybiB0cnVlOwotfQotCi1zdGF0aWMgYm9vbCB2ZXJpZnlBbmRH
ZXREZXN0aW5hdGlvblBhdGhGb3JDb3B5T3JNb3ZlKGNvbnN0IEVudHJ5QmFzZSogc291cmNlLCBF
bnRyeUJhc2UqIHBhcmVudCwgY29uc3QgU3RyaW5nJiBuZXdOYW1lLCBTdHJpbmcmIGRlc3RpbmF0
aW9uUGF0aCkKLXsKLSAgICBBU1NFUlQoc291cmNlKTsKLQotICAgIGlmICghcGFyZW50IHx8ICFw
YXJlbnQtPmlzRGlyZWN0b3J5KCkpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIGlmICgh
bmV3TmFtZS5pc0VtcHR5KCkgJiYgIURPTUZpbGVQYXRoOjppc1ZhbGlkTmFtZShuZXdOYW1lKSkK
LSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgLy8gSXQgaXMgYW4gZXJyb3IgdG8gdHJ5IHRv
IGNvcHkgb3IgbW92ZSBhbiBlbnRyeSBpbnNpZGUgaXRzZWxmIGF0IGFueSBkZXB0aCBpZiBpdCBp
cyBhIGRpcmVjdG9yeS4KLSAgICBpZiAoc291cmNlLT5pc0RpcmVjdG9yeSgpICYmIERPTUZpbGVQ
YXRoOjppc1BhcmVudE9mKHNvdXJjZS0+ZnVsbFBhdGgoKSwgcGFyZW50LT5mdWxsUGF0aCgpKSkK
LSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgLy8gSXQgaXMgYW4gZXJyb3IgdG8gY29weSBv
ciBtb3ZlIGFuIGVudHJ5IGludG8gaXRzIHBhcmVudCBpZiBhIG5hbWUgZGlmZmVyZW50IGZyb20g
aXRzIGN1cnJlbnQgb25lIGlzbid0IHByb3ZpZGVkLgotICAgIGlmICgobmV3TmFtZS5pc0VtcHR5
KCkgfHwgc291cmNlLT5uYW1lKCkgPT0gbmV3TmFtZSkgJiYgRE9NRmlsZVBhdGg6OmdldERpcmVj
dG9yeShzb3VyY2UtPmZ1bGxQYXRoKCkpID09IHBhcmVudC0+ZnVsbFBhdGgoKSkKLSAgICAgICAg
cmV0dXJuIGZhbHNlOwotCi0gICAgZGVzdGluYXRpb25QYXRoID0gcGFyZW50LT5mdWxsUGF0aCgp
OwotICAgIGlmICghbmV3TmFtZS5pc0VtcHR5KCkpCi0gICAgICAgIGRlc3RpbmF0aW9uUGF0aCA9
IERPTUZpbGVQYXRoOjphcHBlbmQoZGVzdGluYXRpb25QYXRoLCBuZXdOYW1lKTsKLSAgICBlbHNl
Ci0gICAgICAgIGRlc3RpbmF0aW9uUGF0aCA9IERPTUZpbGVQYXRoOjphcHBlbmQoZGVzdGluYXRp
b25QYXRoLCBzb3VyY2UtPm5hbWUoKSk7Ci0KLSAgICByZXR1cm4gdHJ1ZTsKLX0KLQotc3RhdGlj
IGJvb2wgcGF0aFRvQWJzb2x1dGVQYXRoKEFzeW5jRmlsZVN5c3RlbTo6VHlwZSB0eXBlLCBjb25z
dCBFbnRyeUJhc2UqIGJhc2UsIFN0cmluZyBwYXRoLCBTdHJpbmcmIGFic29sdXRlUGF0aCkKLXsK
LSAgICBBU1NFUlQoYmFzZSk7Ci0KLSAgICBpZiAoIURPTUZpbGVQYXRoOjppc0Fic29sdXRlKHBh
dGgpKQotICAgICAgICBwYXRoID0gRE9NRmlsZVBhdGg6OmFwcGVuZChiYXNlLT5mdWxsUGF0aCgp
LCBwYXRoKTsKLSAgICBhYnNvbHV0ZVBhdGggPSBET01GaWxlUGF0aDo6cmVtb3ZlRXh0cmFQYXJl
bnRSZWZlcmVuY2VzKHBhdGgpOwotCi0gICAgaWYgKCh0eXBlID09IEFzeW5jRmlsZVN5c3RlbTo6
VGVtcG9yYXJ5IHx8IHR5cGUgPT0gQXN5bmNGaWxlU3lzdGVtOjpQZXJzaXN0ZW50KSAmJiAhRE9N
RmlsZVBhdGg6OmlzVmFsaWRQYXRoKGFic29sdXRlUGF0aCkpCi0gICAgICAgIHJldHVybiBmYWxz
ZTsKLSAgICByZXR1cm4gdHJ1ZTsKLX0KLQotYm9vbCBET01GaWxlU3lzdGVtQmFzZTo6bW92ZShj
b25zdCBFbnRyeUJhc2UqIHNvdXJjZSwgRW50cnlCYXNlKiBwYXJlbnQsIGNvbnN0IFN0cmluZyYg
bmV3TmFtZSwgUGFzc1JlZlB0cjxFbnRyeUNhbGxiYWNrPiBzdWNjZXNzQ2FsbGJhY2ssIFBhc3NS
ZWZQdHI8RXJyb3JDYWxsYmFjaz4gZXJyb3JDYWxsYmFjaykKLXsKLSAgICBTdHJpbmcgZGVzdGlu
YXRpb25QYXRoOwotICAgIGlmICghdmVyaWZ5QW5kR2V0RGVzdGluYXRpb25QYXRoRm9yQ29weU9y
TW92ZShzb3VyY2UsIHBhcmVudCwgbmV3TmFtZSwgZGVzdGluYXRpb25QYXRoKSkKLSAgICAgICAg
cmV0dXJuIGZhbHNlOwotCi0gICAgbV9hc3luY0ZpbGVTeXN0ZW0tPm1vdmUoc291cmNlLT5mdWxs
UGF0aCgpLCBkZXN0aW5hdGlvblBhdGgsIEVudHJ5Q2FsbGJhY2tzOjpjcmVhdGUoc3VjY2Vzc0Nh
bGxiYWNrLCBlcnJvckNhbGxiYWNrLCB0aGlzLCBkZXN0aW5hdGlvblBhdGgsIHNvdXJjZS0+aXNE
aXJlY3RvcnkoKSkpOwotICAgIHJldHVybiB0cnVlOwotfQotCi1ib29sIERPTUZpbGVTeXN0ZW1C
YXNlOjpjb3B5KGNvbnN0IEVudHJ5QmFzZSogc291cmNlLCBFbnRyeUJhc2UqIHBhcmVudCwgY29u
c3QgU3RyaW5nJiBuZXdOYW1lLCBQYXNzUmVmUHRyPEVudHJ5Q2FsbGJhY2s+IHN1Y2Nlc3NDYWxs
YmFjaywgUGFzc1JlZlB0cjxFcnJvckNhbGxiYWNrPiBlcnJvckNhbGxiYWNrKQotewotICAgIFN0
cmluZyBkZXN0aW5hdGlvblBhdGg7Ci0gICAgaWYgKCF2ZXJpZnlBbmRHZXREZXN0aW5hdGlvblBh
dGhGb3JDb3B5T3JNb3ZlKHNvdXJjZSwgcGFyZW50LCBuZXdOYW1lLCBkZXN0aW5hdGlvblBhdGgp
KQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICBtX2FzeW5jRmlsZVN5c3RlbS0+Y29weShz
b3VyY2UtPmZ1bGxQYXRoKCksIGRlc3RpbmF0aW9uUGF0aCwgRW50cnlDYWxsYmFja3M6OmNyZWF0
ZShzdWNjZXNzQ2FsbGJhY2ssIGVycm9yQ2FsbGJhY2ssIHRoaXMsIGRlc3RpbmF0aW9uUGF0aCwg
c291cmNlLT5pc0RpcmVjdG9yeSgpKSk7Ci0gICAgcmV0dXJuIHRydWU7Ci19Ci0KLWJvb2wgRE9N
RmlsZVN5c3RlbUJhc2U6OnJlbW92ZShjb25zdCBFbnRyeUJhc2UqIGVudHJ5LCBQYXNzUmVmUHRy
PFZvaWRDYWxsYmFjaz4gc3VjY2Vzc0NhbGxiYWNrLCBQYXNzUmVmUHRyPEVycm9yQ2FsbGJhY2s+
IGVycm9yQ2FsbGJhY2spCi17Ci0gICAgQVNTRVJUKGVudHJ5KTsKLSAgICAvLyBXZSBkb24ndCBh
bGxvdyBjYWxsaW5nIHJlbW92ZSgpIG9uIHRoZSByb290IGRpcmVjdG9yeS4KLSAgICBpZiAoZW50
cnktPmZ1bGxQYXRoKCkgPT0gU3RyaW5nKERPTUZpbGVQYXRoOjpyb290KSkKLSAgICAgICAgcmV0
dXJuIGZhbHNlOwotICAgIG1fYXN5bmNGaWxlU3lzdGVtLT5yZW1vdmUoZW50cnktPmZ1bGxQYXRo
KCksIFZvaWRDYWxsYmFja3M6OmNyZWF0ZShzdWNjZXNzQ2FsbGJhY2ssIGVycm9yQ2FsbGJhY2sp
KTsKLSAgICByZXR1cm4gdHJ1ZTsKLX0KLQotYm9vbCBET01GaWxlU3lzdGVtQmFzZTo6cmVtb3Zl
UmVjdXJzaXZlbHkoY29uc3QgRW50cnlCYXNlKiBlbnRyeSwgUGFzc1JlZlB0cjxWb2lkQ2FsbGJh
Y2s+IHN1Y2Nlc3NDYWxsYmFjaywgUGFzc1JlZlB0cjxFcnJvckNhbGxiYWNrPiBlcnJvckNhbGxi
YWNrKQotewotICAgIEFTU0VSVChlbnRyeSAmJiBlbnRyeS0+aXNEaXJlY3RvcnkoKSk7Ci0gICAg
Ly8gV2UgZG9uJ3QgYWxsb3cgY2FsbGluZyByZW1vdmUoKSBvbiB0aGUgcm9vdCBkaXJlY3Rvcnku
Ci0gICAgaWYgKGVudHJ5LT5mdWxsUGF0aCgpID09IFN0cmluZyhET01GaWxlUGF0aDo6cm9vdCkp
Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICBtX2FzeW5jRmlsZVN5c3RlbS0+cmVtb3ZlUmVj
dXJzaXZlbHkoZW50cnktPmZ1bGxQYXRoKCksIFZvaWRDYWxsYmFja3M6OmNyZWF0ZShzdWNjZXNz
Q2FsbGJhY2ssIGVycm9yQ2FsbGJhY2spKTsKLSAgICByZXR1cm4gdHJ1ZTsKLX0KLQotYm9vbCBE
T01GaWxlU3lzdGVtQmFzZTo6Z2V0UGFyZW50KGNvbnN0IEVudHJ5QmFzZSogZW50cnksIFBhc3NS
ZWZQdHI8RW50cnlDYWxsYmFjaz4gc3VjY2Vzc0NhbGxiYWNrLCBQYXNzUmVmUHRyPEVycm9yQ2Fs
bGJhY2s+IGVycm9yQ2FsbGJhY2spCi17Ci0gICAgQVNTRVJUKGVudHJ5KTsKLSAgICBTdHJpbmcg
cGF0aCA9IERPTUZpbGVQYXRoOjpnZXREaXJlY3RvcnkoZW50cnktPmZ1bGxQYXRoKCkpOwotCi0g
ICAgbV9hc3luY0ZpbGVTeXN0ZW0tPmRpcmVjdG9yeUV4aXN0cyhwYXRoLCBFbnRyeUNhbGxiYWNr
czo6Y3JlYXRlKHN1Y2Nlc3NDYWxsYmFjaywgZXJyb3JDYWxsYmFjaywgdGhpcywgcGF0aCwgdHJ1
ZSkpOwotICAgIHJldHVybiB0cnVlOwotfQotCi1ib29sIERPTUZpbGVTeXN0ZW1CYXNlOjpnZXRG
aWxlKGNvbnN0IEVudHJ5QmFzZSogZW50cnksIGNvbnN0IFN0cmluZyYgcGF0aCwgUGFzc1JlZlB0
cjxXZWJLaXRGbGFncz4gZmxhZ3MsIFBhc3NSZWZQdHI8RW50cnlDYWxsYmFjaz4gc3VjY2Vzc0Nh
bGxiYWNrLCBQYXNzUmVmUHRyPEVycm9yQ2FsbGJhY2s+IGVycm9yQ2FsbGJhY2spCi17Ci0gICAg
U3RyaW5nIGFic29sdXRlUGF0aDsKLSAgICBpZiAoIXBhdGhUb0Fic29sdXRlUGF0aChtX2FzeW5j
RmlsZVN5c3RlbS0+dHlwZSgpLCBlbnRyeSwgcGF0aCwgYWJzb2x1dGVQYXRoKSkKLSAgICAgICAg
cmV0dXJuIGZhbHNlOwotCi0gICAgT3duUHRyPEVudHJ5Q2FsbGJhY2tzPiBjYWxsYmFja3MgPSBF
bnRyeUNhbGxiYWNrczo6Y3JlYXRlKHN1Y2Nlc3NDYWxsYmFjaywgZXJyb3JDYWxsYmFjaywgdGhp
cywgYWJzb2x1dGVQYXRoLCBmYWxzZSk7Ci0gICAgaWYgKGZsYWdzICYmIGZsYWdzLT5pc0NyZWF0
ZSgpKQotICAgICAgICBtX2FzeW5jRmlsZVN5c3RlbS0+Y3JlYXRlRmlsZShhYnNvbHV0ZVBhdGgs
IGZsYWdzLT5pc0V4Y2x1c2l2ZSgpLCBjYWxsYmFja3MucmVsZWFzZSgpKTsKLSAgICBlbHNlCi0g
ICAgICAgIG1fYXN5bmNGaWxlU3lzdGVtLT5maWxlRXhpc3RzKGFic29sdXRlUGF0aCwgY2FsbGJh
Y2tzLnJlbGVhc2UoKSk7Ci0gICAgcmV0dXJuIHRydWU7Ci19Ci0KLWJvb2wgRE9NRmlsZVN5c3Rl
bUJhc2U6OmdldERpcmVjdG9yeShjb25zdCBFbnRyeUJhc2UqIGVudHJ5LCBjb25zdCBTdHJpbmcm
IHBhdGgsIFBhc3NSZWZQdHI8V2ViS2l0RmxhZ3M+IGZsYWdzLCBQYXNzUmVmUHRyPEVudHJ5Q2Fs
bGJhY2s+IHN1Y2Nlc3NDYWxsYmFjaywgUGFzc1JlZlB0cjxFcnJvckNhbGxiYWNrPiBlcnJvckNh
bGxiYWNrKQotewotICAgIFN0cmluZyBhYnNvbHV0ZVBhdGg7Ci0gICAgaWYgKCFwYXRoVG9BYnNv
bHV0ZVBhdGgobV9hc3luY0ZpbGVTeXN0ZW0tPnR5cGUoKSwgZW50cnksIHBhdGgsIGFic29sdXRl
UGF0aCkpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIE93blB0cjxFbnRyeUNhbGxiYWNr
cz4gY2FsbGJhY2tzID0gRW50cnlDYWxsYmFja3M6OmNyZWF0ZShzdWNjZXNzQ2FsbGJhY2ssIGVy
cm9yQ2FsbGJhY2ssIHRoaXMsIGFic29sdXRlUGF0aCwgdHJ1ZSk7Ci0gICAgaWYgKGZsYWdzICYm
IGZsYWdzLT5pc0NyZWF0ZSgpKQotICAgICAgICBtX2FzeW5jRmlsZVN5c3RlbS0+Y3JlYXRlRGly
ZWN0b3J5KGFic29sdXRlUGF0aCwgZmxhZ3MtPmlzRXhjbHVzaXZlKCksIGNhbGxiYWNrcy5yZWxl
YXNlKCkpOwotICAgIGVsc2UKLSAgICAgICAgbV9hc3luY0ZpbGVTeXN0ZW0tPmRpcmVjdG9yeUV4
aXN0cyhhYnNvbHV0ZVBhdGgsIGNhbGxiYWNrcy5yZWxlYXNlKCkpOwotICAgIHJldHVybiB0cnVl
OwotfQotCi1ib29sIERPTUZpbGVTeXN0ZW1CYXNlOjpyZWFkRGlyZWN0b3J5KFBhc3NSZWZQdHI8
RGlyZWN0b3J5UmVhZGVyQmFzZT4gcmVhZGVyLCBjb25zdCBTdHJpbmcmIHBhdGgsIFBhc3NSZWZQ
dHI8RW50cmllc0NhbGxiYWNrPiBzdWNjZXNzQ2FsbGJhY2ssIFBhc3NSZWZQdHI8RXJyb3JDYWxs
YmFjaz4gZXJyb3JDYWxsYmFjaykKLXsKLSAgICBBU1NFUlQoRE9NRmlsZVBhdGg6OmlzQWJzb2x1
dGUocGF0aCkpOwotICAgIG1fYXN5bmNGaWxlU3lzdGVtLT5yZWFkRGlyZWN0b3J5KHBhdGgsIEVu
dHJpZXNDYWxsYmFja3M6OmNyZWF0ZShzdWNjZXNzQ2FsbGJhY2ssIGVycm9yQ2FsbGJhY2ssIHJl
YWRlciwgcGF0aCkpOwotICAgIHJldHVybiB0cnVlOwotfQotCi19IC8vIG5hbWVzcGFjZSBXZWJD
b3JlCi0KLSNlbmRpZiAvLyBFTkFCTEUoRklMRV9TWVNURU0pCkluZGV4OiBTb3VyY2UvV2ViQ29y
ZS9maWxlYXBpL0RPTUZpbGVTeXN0ZW1CYXNlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNv
cmUvZmlsZWFwaS9ET01GaWxlU3lzdGVtQmFzZS5oCShyZXZpc2lvbiAxMTA4NTYpCisrKyBTb3Vy
Y2UvV2ViQ29yZS9maWxlYXBpL0RPTUZpbGVTeXN0ZW1CYXNlLmgJKHdvcmtpbmcgY29weSkKQEAg
LTEsOTQgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMCBHb29nbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNl
IGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUg
cGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZQotICog
bWV0OgotICoKLSAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJl
dGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAgICAgKiBSZWRpc3RyaWJ1dGlv
bnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCi0gKiBjb3B5cmlnaHQg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyCi0gKiBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3Zp
ZGVkIHdpdGggdGhlCi0gKiBkaXN0cmlidXRpb24uCi0gKiAgICAgKiBOZWl0aGVyIHRoZSBuYW1l
IG9mIEdvb2dsZSBJbmMuIG5vciB0aGUgbmFtZXMgb2YgaXRzCi0gKiBjb250cmlidXRvcnMgbWF5
IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbQotICog
dGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4K
LSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVS
UyBBTkQgQ09OVFJJQlVUT1JTCi0gKiAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVE
IFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAotICogTElNSVRFRCBUTywgVEhFIElNUExJ
RUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCi0gKiBBIFBB
UlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENP
UFlSSUdIVAotICogT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVD
VCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCi0gKiBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNF
UVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCi0gKiBMSU1JVEVEIFRPLCBQUk9D
VVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKLSAq
IERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVT
RUQgQU5EIE9OIEFOWQotICogVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFD
VCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9S
IE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0gKiBPRiBUSElT
IFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFN
QUdFLgotICovCi0KLSNpZm5kZWYgRE9NRmlsZVN5c3RlbUJhc2VfaAotI2RlZmluZSBET01GaWxl
U3lzdGVtQmFzZV9oCi0KLSNpZiBFTkFCTEUoRklMRV9TWVNURU0pCi0KLSNpbmNsdWRlICJBc3lu
Y0ZpbGVTeXN0ZW0uaCIKLSNpbmNsdWRlICJXZWJLaXRGbGFncy5oIgotI2luY2x1ZGUgIlBsYXRm
b3JtU3RyaW5nLmgiCi0jaW5jbHVkZSA8d3RmL1Bhc3NSZWZQdHIuaD4KLSNpbmNsdWRlIDx3dGYv
UmVmQ291bnRlZC5oPgotCi1uYW1lc3BhY2UgV2ViQ29yZSB7Ci0KLWNsYXNzIERpcmVjdG9yeUVu
dHJ5OwotY2xhc3MgRGlyZWN0b3J5UmVhZGVyQmFzZTsKLWNsYXNzIEVudHJpZXNDYWxsYmFjazsK
LWNsYXNzIEVudHJ5QmFzZTsKLWNsYXNzIEVudHJ5Q2FsbGJhY2s7Ci1jbGFzcyBFcnJvckNhbGxi
YWNrOwotY2xhc3MgS1VSTDsKLWNsYXNzIE1ldGFkYXRhQ2FsbGJhY2s7Ci1jbGFzcyBTY3JpcHRF
eGVjdXRpb25Db250ZXh0OwotY2xhc3MgU2VjdXJpdHlPcmlnaW47Ci1jbGFzcyBWb2lkQ2FsbGJh
Y2s7Ci0KLS8vIEEgY29tbW9uIGJhc2UgY2xhc3MgZm9yIERPTUZpbGVTeXN0ZW0gYW5kIERPTUZp
bGVTeXN0ZW1TeW5jLgotY2xhc3MgRE9NRmlsZVN5c3RlbUJhc2UgOiBwdWJsaWMgUmVmQ291bnRl
ZDxET01GaWxlU3lzdGVtQmFzZT4gewotcHVibGljOgotICAgIHN0YXRpYyBQYXNzUmVmUHRyPERP
TUZpbGVTeXN0ZW1CYXNlPiBjcmVhdGUoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCogY29udGV4dCwg
Y29uc3QgU3RyaW5nJiBuYW1lLCBQYXNzT3duUHRyPEFzeW5jRmlsZVN5c3RlbT4gYXN5bmNGaWxl
U3lzdGVtKQotICAgIHsKLSAgICAgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBET01GaWxlU3lzdGVt
QmFzZShjb250ZXh0LCBuYW1lLCBhc3luY0ZpbGVTeXN0ZW0pKTsKLSAgICB9Ci0gICAgdmlydHVh
bCB+RE9NRmlsZVN5c3RlbUJhc2UoKTsKLQotICAgIGNvbnN0IFN0cmluZyYgbmFtZSgpIGNvbnN0
IHsgcmV0dXJuIG1fbmFtZTsgfQotICAgIEFzeW5jRmlsZVN5c3RlbSogYXN5bmNGaWxlU3lzdGVt
KCkgY29uc3QgeyByZXR1cm4gbV9hc3luY0ZpbGVTeXN0ZW0uZ2V0KCk7IH0KLSAgICBTZWN1cml0
eU9yaWdpbiogc2VjdXJpdHlPcmlnaW4oKSBjb25zdDsKLQotICAgIC8vIEFjdHVhbCBGaWxlU3lz
dGVtIEFQSSBpbXBsZW1lbnRhdGlvbnMuICBBbGwgdGhlIHZhbGlkaXR5IGNoZWNrcyBvbiB2aXJ0
dWFsIHBhdGhzIGFyZSBkb25lIGF0IHRoaXMgbGV2ZWwuCi0gICAgLy8gVGhleSByZXR1cm4gZmFs
c2UgZm9yIGltbWVkaWF0ZSBlcnJvcnMgdGhhdCBkb24ndCBpbnZvbHZlIGxvd2VyIEFzeW5jRmls
ZVN5c3RlbSBsYXllciAoZS5nLiBmb3IgbmFtZSB2YWxpZGF0aW9uIGVycm9ycykuICBPdGhlcndp
c2UgdGhleSByZXR1cm4gdHJ1ZSAoYnV0IGxhdGVyIG1heSBjYWxsIGJhY2sgd2l0aCBhbiBydW50
aW1lIGVycm9yKS4KLSAgICBib29sIGdldE1ldGFkYXRhKGNvbnN0IEVudHJ5QmFzZSosIFBhc3NS
ZWZQdHI8TWV0YWRhdGFDYWxsYmFjaz4sIFBhc3NSZWZQdHI8RXJyb3JDYWxsYmFjaz4pOwotICAg
IGJvb2wgbW92ZShjb25zdCBFbnRyeUJhc2UqIHNvdXJjZSwgRW50cnlCYXNlKiBwYXJlbnQsIGNv
bnN0IFN0cmluZyYgbmFtZSwgUGFzc1JlZlB0cjxFbnRyeUNhbGxiYWNrPiwgUGFzc1JlZlB0cjxF
cnJvckNhbGxiYWNrPik7Ci0gICAgYm9vbCBjb3B5KGNvbnN0IEVudHJ5QmFzZSogc291cmNlLCBF
bnRyeUJhc2UqIHBhcmVudCwgY29uc3QgU3RyaW5nJiBuYW1lLCBQYXNzUmVmUHRyPEVudHJ5Q2Fs
bGJhY2s+LCBQYXNzUmVmUHRyPEVycm9yQ2FsbGJhY2s+KTsKLSAgICBib29sIHJlbW92ZShjb25z
dCBFbnRyeUJhc2UqLCBQYXNzUmVmUHRyPFZvaWRDYWxsYmFjaz4sIFBhc3NSZWZQdHI8RXJyb3JD
YWxsYmFjaz4pOwotICAgIGJvb2wgcmVtb3ZlUmVjdXJzaXZlbHkoY29uc3QgRW50cnlCYXNlKiwg
UGFzc1JlZlB0cjxWb2lkQ2FsbGJhY2s+LCBQYXNzUmVmUHRyPEVycm9yQ2FsbGJhY2s+KTsKLSAg
ICBib29sIGdldFBhcmVudChjb25zdCBFbnRyeUJhc2UqLCBQYXNzUmVmUHRyPEVudHJ5Q2FsbGJh
Y2s+LCBQYXNzUmVmUHRyPEVycm9yQ2FsbGJhY2s+KTsKLSAgICBib29sIGdldEZpbGUoY29uc3Qg
RW50cnlCYXNlKiwgY29uc3QgU3RyaW5nJiBwYXRoLCBQYXNzUmVmUHRyPFdlYktpdEZsYWdzPiwg
UGFzc1JlZlB0cjxFbnRyeUNhbGxiYWNrPiwgUGFzc1JlZlB0cjxFcnJvckNhbGxiYWNrPik7Ci0g
ICAgYm9vbCBnZXREaXJlY3RvcnkoY29uc3QgRW50cnlCYXNlKiwgY29uc3QgU3RyaW5nJiBwYXRo
LCBQYXNzUmVmUHRyPFdlYktpdEZsYWdzPiwgUGFzc1JlZlB0cjxFbnRyeUNhbGxiYWNrPiwgUGFz
c1JlZlB0cjxFcnJvckNhbGxiYWNrPik7Ci0gICAgYm9vbCByZWFkRGlyZWN0b3J5KFBhc3NSZWZQ
dHI8RGlyZWN0b3J5UmVhZGVyQmFzZT4sIGNvbnN0IFN0cmluZyYgcGF0aCwgUGFzc1JlZlB0cjxF
bnRyaWVzQ2FsbGJhY2s+LCBQYXNzUmVmUHRyPEVycm9yQ2FsbGJhY2s+KTsKLQotcHJvdGVjdGVk
OgotICAgIERPTUZpbGVTeXN0ZW1CYXNlKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqLCBjb25zdCBT
dHJpbmcmIG5hbWUsIFBhc3NPd25QdHI8QXN5bmNGaWxlU3lzdGVtPik7Ci0gICAgZnJpZW5kIGNs
YXNzIERPTUZpbGVTeXN0ZW1TeW5jOwotCi0gICAgU2NyaXB0RXhlY3V0aW9uQ29udGV4dCogbV9j
b250ZXh0OwotICAgIFN0cmluZyBtX25hbWU7Ci0gICAgbXV0YWJsZSBPd25QdHI8QXN5bmNGaWxl
U3lzdGVtPiBtX2FzeW5jRmlsZVN5c3RlbTsKLX07Ci0KLX0gLy8gbmFtZXNwYWNlIFdlYkNvcmUK
LQotI2VuZGlmIC8vIEVOQUJMRShGSUxFX1NZU1RFTSkKLQotI2VuZGlmIC8vIERPTUZpbGVTeXN0
ZW1CYXNlX2gKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2ZpbGVhcGkvRE9NRmlsZVN5c3RlbVN5bmMu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2ZpbGVhcGkvRE9NRmlsZVN5c3RlbVN5
bmMuY3BwCShyZXZpc2lvbiAxMTA4NTYpCisrKyBTb3VyY2UvV2ViQ29yZS9maWxlYXBpL0RPTUZp
bGVTeXN0ZW1TeW5jLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSwyNDMgKzAsMCBAQAotLyoKLSAq
IENvcHlyaWdodCAoQykgMjAxMCBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoK
LSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdp
dGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRo
YXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZQotICogbWV0OgotICoKLSAqICAgICAqIFJl
ZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJp
Z2h0Ci0gKiBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIuCi0gKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVz
dCByZXByb2R1Y2UgdGhlIGFib3ZlCi0gKiBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyCi0gKiBpbiB0aGUgZG9jdW1l
bnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCi0gKiBkaXN0
cmlidXRpb24uCi0gKiAgICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9mIEdvb2dsZSBJbmMuIG5vciB0
aGUgbmFtZXMgb2YgaXRzCi0gKiBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBv
ciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbQotICogdGhpcyBzb2Z0d2FyZSB3aXRob3V0
IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJF
IElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCi0g
KiAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElO
RywgQlVUIE5PVAotICogTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJD
SEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCi0gKiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUg
RElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAotICogT1dORVIgT1Ig
Q09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5U
QUwsCi0gKiBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5D
TFVESU5HLCBCVVQgTk9UCi0gKiBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRF
IEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKLSAqIERBVEEsIE9SIFBST0ZJVFM7IE9S
IEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQotICogVEhF
T1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwg
T1IgVE9SVAotICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJ
TiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0gKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFE
VklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLSNpbmNsdWRl
ICJjb25maWcuaCIKLSNpbmNsdWRlICJET01GaWxlU3lzdGVtU3luYy5oIgotCi0jaWYgRU5BQkxF
KEZJTEVfU1lTVEVNKQotCi0jaW5jbHVkZSAiQXN5bmNGaWxlU3lzdGVtLmgiCi0jaW5jbHVkZSAi
QXN5bmNGaWxlV3JpdGVyLmgiCi0jaW5jbHVkZSAiRE9NRmlsZVBhdGguaCIKLSNpbmNsdWRlICJE
aXJlY3RvcnlFbnRyeVN5bmMuaCIKLSNpbmNsdWRlICJFcnJvckNhbGxiYWNrLmgiCi0jaW5jbHVk
ZSAiRmlsZS5oIgotI2luY2x1ZGUgIkZpbGVFbnRyeVN5bmMuaCIKLSNpbmNsdWRlICJGaWxlRXJy
b3IuaCIKLSNpbmNsdWRlICJGaWxlRXhjZXB0aW9uLmgiCi0jaW5jbHVkZSAiRmlsZU1ldGFkYXRh
LmgiCi0jaW5jbHVkZSAiRmlsZVN5c3RlbUNhbGxiYWNrcy5oIgotI2luY2x1ZGUgIkZpbGVXcml0
ZXJCYXNlQ2FsbGJhY2suaCIKLSNpbmNsdWRlICJGaWxlV3JpdGVyU3luYy5oIgotCi1uYW1lc3Bh
Y2UgV2ViQ29yZSB7Ci0KLWNsYXNzIEZpbGVXcml0ZXJCYXNlOwotCi1QYXNzUmVmUHRyPERPTUZp
bGVTeXN0ZW1TeW5jPiBET01GaWxlU3lzdGVtU3luYzo6Y3JlYXRlKERPTUZpbGVTeXN0ZW1CYXNl
KiBmaWxlU3lzdGVtKQotewotICAgIHJldHVybiBhZG9wdFJlZihuZXcgRE9NRmlsZVN5c3RlbVN5
bmMoZmlsZVN5c3RlbS0+bV9jb250ZXh0LCBmaWxlU3lzdGVtLT5tX25hbWUsIGZpbGVTeXN0ZW0t
Pm1fYXN5bmNGaWxlU3lzdGVtLnJlbGVhc2UoKSkpOwotfQotCi1ET01GaWxlU3lzdGVtU3luYzo6
RE9NRmlsZVN5c3RlbVN5bmMoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCogY29udGV4dCwgY29uc3Qg
U3RyaW5nJiBuYW1lLCBQYXNzT3duUHRyPEFzeW5jRmlsZVN5c3RlbT4gYXN5bmNGaWxlU3lzdGVt
KQotICAgIDogRE9NRmlsZVN5c3RlbUJhc2UoY29udGV4dCwgbmFtZSwgYXN5bmNGaWxlU3lzdGVt
KQotewotfQotCi1ET01GaWxlU3lzdGVtU3luYzo6fkRPTUZpbGVTeXN0ZW1TeW5jKCkKLXsKLX0K
LQotUGFzc1JlZlB0cjxEaXJlY3RvcnlFbnRyeVN5bmM+IERPTUZpbGVTeXN0ZW1TeW5jOjpyb290
KCkKLXsKLSAgICByZXR1cm4gRGlyZWN0b3J5RW50cnlTeW5jOjpjcmVhdGUodGhpcywgRE9NRmls
ZVBhdGg6OnJvb3QpOwotfQotCi1uYW1lc3BhY2UgewotCi1jbGFzcyBDcmVhdGVGaWxlSGVscGVy
IDogcHVibGljIEFzeW5jRmlsZVN5c3RlbUNhbGxiYWNrcyB7Ci1wdWJsaWM6Ci0gICAgY2xhc3Mg
Q3JlYXRlRmlsZVJlc3VsdCA6IHB1YmxpYyBSZWZDb3VudGVkPENyZWF0ZUZpbGVSZXN1bHQ+IHsK
LSAgICAgIHB1YmxpYzoKLSAgICAgICAgc3RhdGljIFBhc3NSZWZQdHI8Q3JlYXRlRmlsZVJlc3Vs
dD4gY3JlYXRlKCkKLSAgICAgICAgewotICAgICAgICAgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBD
cmVhdGVGaWxlUmVzdWx0KCkpOwotICAgICAgICB9Ci0KLSAgICAgICAgYm9vbCBtX2ZhaWxlZDsK
LSAgICAgICAgaW50IG1fY29kZTsKLSAgICAgICAgUmVmUHRyPEZpbGU+IG1fZmlsZTsKLQotICAg
ICAgcHJpdmF0ZToKLSAgICAgICAgQ3JlYXRlRmlsZVJlc3VsdCgpCi0gICAgICAgICAgICA6IG1f
ZmFpbGVkKGZhbHNlKQotICAgICAgICAgICAgLCBtX2NvZGUoMCkKLSAgICAgICAgewotICAgICAg
ICB9Ci0KLSAgICAgICAgfkNyZWF0ZUZpbGVSZXN1bHQoKQotICAgICAgICB7Ci0gICAgICAgIH0K
LSAgICAgICAgZnJpZW5kIGNsYXNzIFdURjo6UmVmQ291bnRlZDxDcmVhdGVGaWxlUmVzdWx0PjsK
LSAgICB9OwotCi0gICAgc3RhdGljIFBhc3NPd25QdHI8Q3JlYXRlRmlsZUhlbHBlcj4gY3JlYXRl
KFBhc3NSZWZQdHI8Q3JlYXRlRmlsZVJlc3VsdD4gcmVzdWx0LCBjb25zdCBTdHJpbmcmIG5hbWUp
Ci0gICAgewotICAgICAgICByZXR1cm4gYWRvcHRQdHIobmV3IENyZWF0ZUZpbGVIZWxwZXIocmVz
dWx0LCBuYW1lKSk7Ci0gICAgfQotCi0gICAgdmlydHVhbCB2b2lkIGRpZEZhaWwoaW50IGNvZGUp
Ci0gICAgewotICAgICAgICBtX3Jlc3VsdC0+bV9mYWlsZWQgPSB0cnVlOwotICAgICAgICBtX3Jl
c3VsdC0+bV9jb2RlID0gY29kZTsKLSAgICB9Ci0KLSAgICB2aXJ0dWFsIH5DcmVhdGVGaWxlSGVs
cGVyKCkKLSAgICB7Ci0gICAgfQotCi0gICAgdm9pZCBkaWRSZWFkTWV0YWRhdGEoY29uc3QgRmls
ZU1ldGFkYXRhJiBtZXRhZGF0YSkKLSAgICB7Ci0gICAgICAgIG1fcmVzdWx0LT5tX2ZpbGUgPSBG
aWxlOjpjcmVhdGVXaXRoTmFtZShtZXRhZGF0YS5wbGF0Zm9ybVBhdGgsIG1fbmFtZSk7Ci0gICAg
fQotcHJpdmF0ZToKLSAgICBDcmVhdGVGaWxlSGVscGVyKFBhc3NSZWZQdHI8Q3JlYXRlRmlsZVJl
c3VsdD4gcmVzdWx0LCBjb25zdCBTdHJpbmcmIG5hbWUpCi0gICAgICAgIDogbV9yZXN1bHQocmVz
dWx0KQotICAgICAgICAsIG1fbmFtZShuYW1lKQotICAgIHsKLSAgICB9Ci0KLSAgICBSZWZQdHI8
Q3JlYXRlRmlsZVJlc3VsdD4gbV9yZXN1bHQ7Ci0gICAgU3RyaW5nIG1fbmFtZTsKLX07Ci0KLX0g
Ly8gbmFtZXNwYWNlCi0KLVBhc3NSZWZQdHI8RmlsZT4gRE9NRmlsZVN5c3RlbVN5bmM6OmNyZWF0
ZUZpbGUoY29uc3QgRmlsZUVudHJ5U3luYyogZmlsZUVudHJ5LCBFeGNlcHRpb25Db2RlJiBlYykK
LXsKLSAgICBlYyA9IDA7Ci0gICAgUmVmUHRyPENyZWF0ZUZpbGVIZWxwZXI6OkNyZWF0ZUZpbGVS
ZXN1bHQ+IHJlc3VsdChDcmVhdGVGaWxlSGVscGVyOjpDcmVhdGVGaWxlUmVzdWx0OjpjcmVhdGUo
KSk7Ci0gICAgbV9hc3luY0ZpbGVTeXN0ZW0tPmNyZWF0ZVNuYXBzaG90RmlsZUFuZFJlYWRNZXRh
ZGF0YShmaWxlRW50cnktPmZ1bGxQYXRoKCksIENyZWF0ZUZpbGVIZWxwZXI6OmNyZWF0ZShyZXN1
bHQsIGZpbGVFbnRyeS0+bmFtZSgpKSk7Ci0gICAgaWYgKCFtX2FzeW5jRmlsZVN5c3RlbS0+d2Fp
dEZvck9wZXJhdGlvblRvQ29tcGxldGUoKSkgewotICAgICAgICBlYyA9IEZpbGVFeGNlcHRpb246
OkFCT1JUX0VSUjsKLSAgICAgICAgcmV0dXJuIDA7Ci0gICAgfQotICAgIGlmIChyZXN1bHQtPm1f
ZmFpbGVkKSB7Ci0gICAgICAgIGVjID0gcmVzdWx0LT5tX2NvZGU7Ci0gICAgICAgIHJldHVybiAw
OwotICAgIH0KLSAgICByZXR1cm4gcmVzdWx0LT5tX2ZpbGU7Ci19Ci0KLW5hbWVzcGFjZSB7Ci0K
LWNsYXNzIFJlY2VpdmVGaWxlV3JpdGVyQ2FsbGJhY2sgOiBwdWJsaWMgRmlsZVdyaXRlckJhc2VD
YWxsYmFjayB7Ci1wdWJsaWM6Ci0gICAgc3RhdGljIFBhc3NSZWZQdHI8UmVjZWl2ZUZpbGVXcml0
ZXJDYWxsYmFjaz4gY3JlYXRlKCkKLSAgICB7Ci0gICAgICAgIHJldHVybiBhZG9wdFJlZihuZXcg
UmVjZWl2ZUZpbGVXcml0ZXJDYWxsYmFjaygpKTsKLSAgICB9Ci0KLSAgICBib29sIGhhbmRsZUV2
ZW50KEZpbGVXcml0ZXJCYXNlKiBmaWxlV3JpdGVyQmFzZSkKLSAgICB7Ci0jaWZuZGVmIE5ERUJV
RwotICAgICAgICBtX2ZpbGVXcml0ZXJCYXNlID0gZmlsZVdyaXRlckJhc2U7Ci0jZWxzZQotICAg
ICAgICBBU1NFUlRfVU5VU0VEKGZpbGVXcml0ZXJCYXNlLCBmaWxlV3JpdGVyQmFzZSk7Ci0jZW5k
aWYKLSAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgfQotCi0jaWZuZGVmIE5ERUJVRwotICAgIEZp
bGVXcml0ZXJCYXNlKiBmaWxlV3JpdGVyQmFzZSgpCi0gICAgewotICAgICAgICByZXR1cm4gbV9m
aWxlV3JpdGVyQmFzZTsKLSAgICB9Ci0jZW5kaWYKLQotcHJpdmF0ZToKLSAgICBSZWNlaXZlRmls
ZVdyaXRlckNhbGxiYWNrKCkKLSNpZm5kZWYgTkRFQlVHCi0gICAgICAgIDogbV9maWxlV3JpdGVy
QmFzZSgwKQotI2VuZGlmCi0gICAgewotICAgIH0KLQotI2lmbmRlZiBOREVCVUcKLSAgICBGaWxl
V3JpdGVyQmFzZSogbV9maWxlV3JpdGVyQmFzZTsKLSNlbmRpZgotfTsKLQotY2xhc3MgTG9jYWxF
cnJvckNhbGxiYWNrIDogcHVibGljIEVycm9yQ2FsbGJhY2sgewotcHVibGljOgotICAgIHN0YXRp
YyBQYXNzUmVmUHRyPExvY2FsRXJyb3JDYWxsYmFjaz4gY3JlYXRlKCkKLSAgICB7Ci0gICAgICAg
IHJldHVybiBhZG9wdFJlZihuZXcgTG9jYWxFcnJvckNhbGxiYWNrKCkpOwotICAgIH0KLQotICAg
IGJvb2wgaGFuZGxlRXZlbnQoRmlsZUVycm9yKiBlcnJvcikKLSAgICB7Ci0gICAgICAgIG1fZXJy
b3IgPSBlcnJvcjsKLSAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgfQotCi0gICAgRmlsZUVycm9y
KiBlcnJvcigpCi0gICAgewotICAgICAgICByZXR1cm4gbV9lcnJvci5nZXQoKTsKLSAgICB9Ci0K
LXByaXZhdGU6Ci0gICAgTG9jYWxFcnJvckNhbGxiYWNrKCkKLSAgICB7Ci0gICAgfQotICAgIFJl
ZlB0cjxGaWxlRXJyb3I+IG1fZXJyb3I7Ci19OwotCi19Ci0KLVBhc3NSZWZQdHI8RmlsZVdyaXRl
clN5bmM+IERPTUZpbGVTeXN0ZW1TeW5jOjpjcmVhdGVXcml0ZXIoY29uc3QgRmlsZUVudHJ5U3lu
YyogZmlsZUVudHJ5LCBFeGNlcHRpb25Db2RlJiBlYykKLXsKLSAgICBBU1NFUlQoZmlsZUVudHJ5
KTsKLSAgICBlYyA9IDA7Ci0KLQotICAgIFJlZlB0cjxGaWxlV3JpdGVyU3luYz4gZmlsZVdyaXRl
ciA9IEZpbGVXcml0ZXJTeW5jOjpjcmVhdGUoKTsKLSAgICBSZWZQdHI8UmVjZWl2ZUZpbGVXcml0
ZXJDYWxsYmFjaz4gc3VjY2Vzc0NhbGxiYWNrID0gUmVjZWl2ZUZpbGVXcml0ZXJDYWxsYmFjazo6
Y3JlYXRlKCk7Ci0gICAgUmVmUHRyPExvY2FsRXJyb3JDYWxsYmFjaz4gZXJyb3JDYWxsYmFjayA9
IExvY2FsRXJyb3JDYWxsYmFjazo6Y3JlYXRlKCk7Ci0KLSAgICBPd25QdHI8RmlsZVdyaXRlckJh
c2VDYWxsYmFja3M+IGNhbGxiYWNrcyA9IEZpbGVXcml0ZXJCYXNlQ2FsbGJhY2tzOjpjcmVhdGUo
ZmlsZVdyaXRlciwgc3VjY2Vzc0NhbGxiYWNrLCBlcnJvckNhbGxiYWNrKTsKLSAgICBtX2FzeW5j
RmlsZVN5c3RlbS0+Y3JlYXRlV3JpdGVyKGZpbGVXcml0ZXIuZ2V0KCksIGZpbGVFbnRyeS0+ZnVs
bFBhdGgoKSwgY2FsbGJhY2tzLnJlbGVhc2UoKSk7Ci0gICAgaWYgKCFtX2FzeW5jRmlsZVN5c3Rl
bS0+d2FpdEZvck9wZXJhdGlvblRvQ29tcGxldGUoKSkgewotICAgICAgICBlYyA9IEZpbGVFeGNl
cHRpb246OkFCT1JUX0VSUjsKLSAgICAgICAgcmV0dXJuIDA7Ci0gICAgfQotICAgIGlmIChlcnJv
ckNhbGxiYWNrLT5lcnJvcigpKSB7Ci0gICAgICAgIEFTU0VSVCghc3VjY2Vzc0NhbGxiYWNrLT5m
aWxlV3JpdGVyQmFzZSgpKTsKLSAgICAgICAgZWMgPSBGaWxlRXhjZXB0aW9uOjpFcnJvckNvZGVU
b0V4Y2VwdGlvbkNvZGUoZXJyb3JDYWxsYmFjay0+ZXJyb3IoKS0+Y29kZSgpKTsKLSAgICAgICAg
cmV0dXJuIDA7Ci0gICAgfQotICAgIEFTU0VSVChzdWNjZXNzQ2FsbGJhY2stPmZpbGVXcml0ZXJC
YXNlKCkpOwotICAgIEFTU0VSVChzdGF0aWNfY2FzdDxGaWxlV3JpdGVyU3luYyo+KHN1Y2Nlc3ND
YWxsYmFjay0+ZmlsZVdyaXRlckJhc2UoKSkgPT0gZmlsZVdyaXRlci5nZXQoKSk7Ci0gICAgcmV0
dXJuIGZpbGVXcml0ZXI7Ci19Ci0KLX0KLQotI2VuZGlmIC8vIEVOQUJMRShGSUxFX1NZU1RFTSkK
SW5kZXg6IFNvdXJjZS9XZWJDb3JlL2ZpbGVhcGkvRE9NRmlsZVN5c3RlbVN5bmMuaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9maWxlYXBpL0RPTUZpbGVTeXN0ZW1TeW5jLmgJKHJldmlz
aW9uIDExMDg1NikKKysrIFNvdXJjZS9XZWJDb3JlL2ZpbGVhcGkvRE9NRmlsZVN5c3RlbVN5bmMu
aAkod29ya2luZyBjb3B5KQpAQCAtMSw3MSArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAy
MDEwIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRp
b24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0g
KiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5n
IGNvbmRpdGlvbnMgYXJlCi0gKiBtZXQ6Ci0gKgotICogICAgICogUmVkaXN0cmlidXRpb25zIG9m
IHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAq
ICAgICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUg
YWJvdmUKLSAqIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIKLSAqIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBv
dGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKLSAqIGRpc3RyaWJ1dGlvbi4KLSAqICAg
ICAqIE5laXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xlIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMK
LSAqIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVj
dHMgZGVyaXZlZCBmcm9tCi0gKiB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Ig
d3JpdHRlbiBwZXJtaXNzaW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkg
VEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKLSAqICJBUyBJUyIgQU5EIEFO
WSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCi0gKiBM
SU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQg
RklUTkVTUyBGT1IKLSAqIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBO
TyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCi0gKiBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUg
TElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKLSAqIFNQRUNJQUws
IEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QK
LSAqIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklD
RVM7IExPU1MgT0YgVVNFLAotICogREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJS
VVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCi0gKiBUSEVPUlkgT0YgTElBQklMSVRZ
LCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5D
TFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9G
IFRIRSBVU0UKLSAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9T
U0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotI2lmbmRlZiBET01GaWxlU3lzdGVtU3lu
Y19oCi0jZGVmaW5lIERPTUZpbGVTeXN0ZW1TeW5jX2gKLQotI2lmIEVOQUJMRShGSUxFX1NZU1RF
TSkKLQotI2luY2x1ZGUgIkRPTUZpbGVTeXN0ZW1CYXNlLmgiCi0KLW5hbWVzcGFjZSBXZWJDb3Jl
IHsKLQotY2xhc3MgRGlyZWN0b3J5RW50cnlTeW5jOwotY2xhc3MgRmlsZTsKLWNsYXNzIEZpbGVF
bnRyeVN5bmM7Ci1jbGFzcyBGaWxlV3JpdGVyU3luYzsKLQotdHlwZWRlZiBpbnQgRXhjZXB0aW9u
Q29kZTsKLQotY2xhc3MgRE9NRmlsZVN5c3RlbVN5bmMgOiBwdWJsaWMgRE9NRmlsZVN5c3RlbUJh
c2UgewotcHVibGljOgotICAgIHN0YXRpYyBQYXNzUmVmUHRyPERPTUZpbGVTeXN0ZW1TeW5jPiBj
cmVhdGUoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCogY29udGV4dCwgY29uc3QgU3RyaW5nJiBuYW1l
LCBQYXNzT3duUHRyPEFzeW5jRmlsZVN5c3RlbT4gYXN5bmNGaWxlU3lzdGVtKQotICAgIHsKLSAg
ICAgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBET01GaWxlU3lzdGVtU3luYyhjb250ZXh0LCBuYW1l
LCBhc3luY0ZpbGVTeXN0ZW0pKTsKLSAgICB9Ci0KLSAgICBzdGF0aWMgUGFzc1JlZlB0cjxET01G
aWxlU3lzdGVtU3luYz4gY3JlYXRlKERPTUZpbGVTeXN0ZW1CYXNlKik7Ci0KLSAgICB2aXJ0dWFs
IH5ET01GaWxlU3lzdGVtU3luYygpOwotCi0gICAgUGFzc1JlZlB0cjxEaXJlY3RvcnlFbnRyeVN5
bmM+IHJvb3QoKTsKLQotICAgIFBhc3NSZWZQdHI8RmlsZT4gY3JlYXRlRmlsZShjb25zdCBGaWxl
RW50cnlTeW5jKiwgRXhjZXB0aW9uQ29kZSYpOwotICAgIFBhc3NSZWZQdHI8RmlsZVdyaXRlclN5
bmM+IGNyZWF0ZVdyaXRlcihjb25zdCBGaWxlRW50cnlTeW5jKiwgRXhjZXB0aW9uQ29kZSYpOwot
Ci1wcml2YXRlOgotICAgIERPTUZpbGVTeXN0ZW1TeW5jKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQq
LCBjb25zdCBTdHJpbmcmIG5hbWUsIFBhc3NPd25QdHI8QXN5bmNGaWxlU3lzdGVtPik7Ci19Owot
Ci19Ci0KLSNlbmRpZiAvLyBFTkFCTEUoRklMRV9TWVNURU0pCi0KLSNlbmRpZiAvLyBET01GaWxl
U3lzdGVtU3luY19oCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9maWxlYXBpL0RPTUZpbGVTeXN0ZW1T
eW5jLmlkbAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9maWxlYXBpL0RPTUZpbGVTeXN0
ZW1TeW5jLmlkbAkocmV2aXNpb24gMTEwODU2KQorKysgU291cmNlL1dlYkNvcmUvZmlsZWFwaS9E
T01GaWxlU3lzdGVtU3luYy5pZGwJKHdvcmtpbmcgY29weSkKQEAgLTEsMzkgKzAsMCBAQAotLyoK
LSAqIENvcHlyaWdodCAoQykgMjAxMCBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgot
ICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMs
IHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVk
IHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZQotICogbWV0OgotICoKLSAqICAgICAq
IFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29w
eXJpZ2h0Ci0gKiBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIuCi0gKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0g
bXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCi0gKiBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyCi0gKiBpbiB0aGUgZG9j
dW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCi0gKiBk
aXN0cmlidXRpb24uCi0gKiAgICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9mIEdvb2dsZSBJbmMuIG5v
ciB0aGUgbmFtZXMgb2YgaXRzCi0gKiBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3Jz
ZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbQotICogdGhpcyBzb2Z0d2FyZSB3aXRo
b3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KLSAqCi0gKiBUSElTIFNPRlRX
QVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JT
Ci0gKiAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xV
RElORywgQlVUIE5PVAotICogTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBN
RVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCi0gKiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBB
UkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAotICogT1dORVIg
T1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lE
RU5UQUwsCi0gKiBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAo
SU5DTFVESU5HLCBCVVQgTk9UCi0gKiBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElU
VVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKLSAqIERBVEEsIE9SIFBST0ZJVFM7
IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQotICog
VEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElU
WSwgT1IgVE9SVAotICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lO
RyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0gKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElG
IEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLW1vZHVs
ZSBzdG9yYWdlIHsKLSAgICBpbnRlcmZhY2UgWwotICAgICAgICBDb25kaXRpb25hbD1GSUxFX1NZ
U1RFTSwKLSAgICAgICAgSlNOb1N0YXRpY1RhYmxlcwotICAgIF0gRE9NRmlsZVN5c3RlbVN5bmMg
ewotICAgICAgICByZWFkb25seSBhdHRyaWJ1dGUgRE9NU3RyaW5nIG5hbWU7Ci0gICAgICAgIHJl
YWRvbmx5IGF0dHJpYnV0ZSBEaXJlY3RvcnlFbnRyeVN5bmMgcm9vdDsKLSAgICB9OwotfQo=
</data>

          </attachment>
      

    </bug>

</bugzilla>