<?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>82942</bug_id>
          
          <creation_ts>2012-04-02 13:39:21 -0700</creation_ts>
          <short_desc>Rename SpellingCorrectionController to AlternativeTextController.</short_desc>
          <delta_ts>2012-04-03 16:41:14 -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>Mac (Intel)</rep_platform>
          <op_sys>OS X 10.7</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords>InRadar</keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          <blocked>82503</blocked>
    
    <blocked>82970</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Jia Pu">jiapu.mail</reporter>
          <assigned_to name="Jia Pu">jiapu.mail</assigned_to>
          <cc>gustavo</cc>
    
    <cc>japhet</cc>
    
    <cc>pnormand</cc>
    
    <cc>rakuco</cc>
    
    <cc>webkit.review.bot</cc>
    
    <cc>xan.lopez</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>593781</commentid>
    <comment_count>0</comment_count>
    <who name="Jia Pu">jiapu.mail</who>
    <bug_when>2012-04-02 13:39:21 -0700</bug_when>
    <thetext>We&apos;d like to submit the big patch in bug 82503 with several stages. This patch renames class SpellingCorrectionController to AlternativeTextController, since it will also be used to control alternative dictation input on OSX.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>593784</commentid>
    <comment_count>1</comment_count>
    <who name="Jia Pu">jiapu.mail</who>
    <bug_when>2012-04-02 13:42:54 -0700</bug_when>
    <thetext>&lt;rdar://problem/11168786&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>593813</commentid>
    <comment_count>2</comment_count>
      <attachid>135179</attachid>
    <who name="Jia Pu">jiapu.mail</who>
    <bug_when>2012-04-02 13:58:53 -0700</bug_when>
    <thetext>Created attachment 135179
Patch (v1)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>594082</commentid>
    <comment_count>3</comment_count>
      <attachid>135244</attachid>
    <who name="Jia Pu">jiapu.mail</who>
    <bug_when>2012-04-02 17:44:11 -0700</bug_when>
    <thetext>Created attachment 135244
Patch (V2)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>594083</commentid>
    <comment_count>4</comment_count>
    <who name="Jia Pu">jiapu.mail</who>
    <bug_when>2012-04-02 17:44:30 -0700</bug_when>
    <thetext>Updated to TOT.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>594090</commentid>
    <comment_count>5</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-04-02 17:50:51 -0700</bug_when>
    <thetext>Attachment 135244 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/editing/AlternativeTextController.h:75:  Extra space before last semicolon. If this should be an empty statement, use { } instead.  [whitespace/semicolon] [5]
Total errors found: 1 in 35 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>594092</commentid>
    <comment_count>6</comment_count>
      <attachid>135244</attachid>
    <who name="Philippe Normand">pnormand</who>
    <bug_when>2012-04-02 17:52:54 -0700</bug_when>
    <thetext>Comment on attachment 135244
Patch (V2)

Attachment 135244 did not pass gtk-ews (gtk):
Output: http://queues.webkit.org/results/12311823</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>594128</commentid>
    <comment_count>7</comment_count>
      <attachid>135254</attachid>
    <who name="Jia Pu">jiapu.mail</who>
    <bug_when>2012-04-02 18:55:33 -0700</bug_when>
    <thetext>Created attachment 135254
Attempt to fix gtk build.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>594135</commentid>
    <comment_count>8</comment_count>
      <attachid>135257</attachid>
    <who name="Jia Pu">jiapu.mail</who>
    <bug_when>2012-04-02 19:06:53 -0700</bug_when>
    <thetext>Created attachment 135257
Attempt to fix gtk and windows build.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>594183</commentid>
    <comment_count>9</comment_count>
      <attachid>135257</attachid>
    <who name="Hajime Morrita">morrita</who>
    <bug_when>2012-04-02 21:35:21 -0700</bug_when>
    <thetext>Comment on attachment 135257
Attempt to fix gtk and windows build.

Thanks for splitting the orignal one. This looks OK. Please wait until bots become green.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>594481</commentid>
    <comment_count>10</comment_count>
      <attachid>135257</attachid>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-04-03 07:51:50 -0700</bug_when>
    <thetext>Comment on attachment 135257
Attempt to fix gtk and windows build.

Rejecting attachment 135257 from commit-queue.

Failed to run &quot;[&apos;/mnt/git/webkit-commit-queue/Tools/Scripts/webkit-patch&apos;, &apos;--status-host=queues.webkit.org&apos;, &apos;-...&quot; exit_code: 2

Last 500 characters of output:
WebKit/mac/ChangeLog
patching file Source/WebKit/mac/WebCoreSupport/CorrectionPanel.h
patching file Source/WebKit/mac/WebCoreSupport/CorrectionPanel.mm
patching file Source/WebKit/mac/WebCoreSupport/WebEditorClient.h
patching file Source/WebKit/mac/WebCoreSupport/WebEditorClient.mm
patching file Source/WebKit/mac/WebView/WebView.mm

Failed to run &quot;[u&apos;/mnt/git/webkit-commit-queue/Tools/Scripts/svn-apply&apos;, u&apos;--force&apos;, u&apos;--reviewer&apos;, u&apos;Hajime Mor...&quot; exit_code: 1 cwd: /mnt/git/webkit-commit-queue/

Full output: http://queues.webkit.org/results/12323124</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>594583</commentid>
    <comment_count>11</comment_count>
      <attachid>135349</attachid>
    <who name="Jia Pu">jiapu.mail</who>
    <bug_when>2012-04-03 10:03:20 -0700</bug_when>
    <thetext>Created attachment 135349
Resolved conflict with TOT.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>594823</commentid>
    <comment_count>12</comment_count>
      <attachid>135349</attachid>
    <who name="Enrica Casucci">enrica</who>
    <bug_when>2012-04-03 13:35:39 -0700</bug_when>
    <thetext>Comment on attachment 135349
Resolved conflict with TOT.

It is a giant patch!</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>594930</commentid>
    <comment_count>13</comment_count>
      <attachid>135349</attachid>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-04-03 14:56:17 -0700</bug_when>
    <thetext>Comment on attachment 135349
Resolved conflict with TOT.

Rejecting attachment 135349 from commit-queue.

Failed to run &quot;[&apos;/mnt/git/webkit-commit-queue/Tools/Scripts/webkit-patch&apos;, &apos;--status-host=queues.webkit.org&apos;, &apos;-...&quot; exit_code: 2

Last 500 characters of output:
Kit/chromium/third_party/yasm/source/patched-yasm --revision 126079 --non-interactive --force --accept theirs-conflict --ignore-externals&apos; in &apos;/mnt/git/webkit-commit-queue/Source/WebKit/chromium&apos;
47&gt;At revision 126079.

________ running &apos;/usr/bin/python tools/clang/scripts/update.py --mac-only&apos; in &apos;/mnt/git/webkit-commit-queue/Source/WebKit/chromium&apos;

________ running &apos;/usr/bin/python gyp_webkit&apos; in &apos;/mnt/git/webkit-commit-queue/Source/WebKit/chromium&apos;
Updating webkit projects from gyp files...

Full output: http://queues.webkit.org/results/12319405</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>594948</commentid>
    <comment_count>14</comment_count>
    <who name="Jia Pu">jiapu.mail</who>
    <bug_when>2012-04-03 15:23:33 -0700</bug_when>
    <thetext>(In reply to comment #13)
&gt; (From update of attachment 135349 [details])
&gt; Rejecting attachment 135349 [details] from commit-queue.
&gt; 
&gt; Failed to run &quot;[&apos;/mnt/git/webkit-commit-queue/Tools/Scripts/webkit-patch&apos;, &apos;--status-host=queues.webkit.org&apos;, &apos;-...&quot; exit_code: 2
&gt; 
&gt; Last 500 characters of output:
&gt; Kit/chromium/third_party/yasm/source/patched-yasm --revision 126079 --non-interactive --force --accept theirs-conflict --ignore-externals&apos; in &apos;/mnt/git/webkit-commit-queue/Source/WebKit/chromium&apos;
&gt; 47&gt;At revision 126079.
&gt; 
&gt; ________ running &apos;/usr/bin/python tools/clang/scripts/update.py --mac-only&apos; in &apos;/mnt/git/webkit-commit-queue/Source/WebKit/chromium&apos;
&gt; 
&gt; ________ running &apos;/usr/bin/python gyp_webkit&apos; in &apos;/mnt/git/webkit-commit-queue/Source/WebKit/chromium&apos;
&gt; Updating webkit projects from gyp files...
&gt; 
&gt; Full output: http://queues.webkit.org/results/12319405

hmmm, it&apos;s rather difficult to tell from these log what the culprit is. Any suggestion from webkit experts?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>595027</commentid>
    <comment_count>15</comment_count>
    <who name="Jia Pu">jiapu.mail</who>
    <bug_when>2012-04-03 16:40:46 -0700</bug_when>
    <thetext>Keep running into submission issue. So I manually landed it.

Committed r113109: &lt;http://trac.webkit.org/changeset/113109&gt;</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>135179</attachid>
            <date>2012-04-02 13:58:53 -0700</date>
            <delta_ts>2012-04-02 17:44:05 -0700</delta_ts>
            <desc>Patch (v1)</desc>
            <filename>bug-82942-20120402135852.patch</filename>
            <type>text/plain</type>
            <size>180597</size>
            <attacher name="Jia Pu">jiapu.mail</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDExMjkzMSkKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDEwNiBAQAorMjAxMi0wNC0wMiAgSmlhIFB1
ICA8anB1QGFwcGxlLmNvbT4KKworICAgICAgICBSZW5hbWUgU3BlbGxpbmdDb3JyZWN0aW9uQ29u
dHJvbGxlciB0byBBbHRlcm5hdGl2ZVRleHRDb250cm9sbGVyLgorICAgICAgICBodHRwczovL2J1
Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9ODI5NDIKKworICAgICAgICBSZXZpZXdlZCBi
eSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBObyBuZXcgdGVzdHMsIHNpbmNlIHRoZXJlJ3Mg
bm8gY2hhbmdlIG9mIGZ1bmNhdGlvbmFsaXRpZXMuCisKKyAgICAgICAgVGhpcyBwYXRjaCByZW5h
bWVzIFNwZWxsaW5nQ29ycmVjdGlvbkNvbnRyb2xsZXIgdG8gQWx0ZXJuYXRpdmVUZXh0Q29udHJv
bGxlciwgQ29ycmVjdGlvblBhbmVsSW5mbyB0bworICAgICAgICBBbHRlcm5hdGl2ZVRleHRJbmZv
LCBDb3JyZWN0aW9uUGFuZWxJbmZvOjpDb3JyZXRpb25QYW5lbFR5cGUgdG8gQWx0ZXJuYXRpdmVU
ZXh0VHlwZSwgYW5kIFJlYXNvbkZvckRpc21pc3NpbmdDb3JyZWN0aW9uUGFuZWwKKyAgICAgICAg
dG8gUmVhc29uRm9yRGlzbWlzc2luZ0FsdGVybmF0aXZlVGV4dC4gQWxsIHRoZXNlIHJlbmFtaW5n
IHJlZmxlY3RzIHRoZSBmYWN0IHRoYXQgdGhpcyBjbGFzcyBjb250cm9scyBjaGFuZ2UKKyAgICAg
ICAgb2YgdGV4dCBjYXVzZWQgYnkgYm90aCBzcGVsbCBjaGVja2luZyBhbmQgYWx0ZXJuYXRpdmUg
ZGljdGF0aW9uIHJlc3VsdHMuIEl0IGFsc28gcmVuYW1lcyBhIGNvdXBsZSBvZiBmdW5jdGlvbnMK
KyAgICAgICAgaW4gdGhlIG9yaWdpbmFsIFNwZWxsaW5nQ29ycmVjdGlvbkNvbnRyb2xsZXIgY2xh
c3MgZm9yIHRoZSBzYW1lIHJlYXNvbi4KKworICAgICAgICBTcGVsbGluZ0NvcnJlY3Rpb25QYW5l
bDo6cmVwbGFjZW1lbnRTdHJpbmcgaGFzIGJlZW4gcmVwbGFjZWQgYnkgQWx0ZXJuYXRpdmVUZXh0
SW5mbzo6ZGV0YWlscyB3aGljaCBpcyBhbiBvYmplY3QKKyAgICAgICAgdGhhdCBjYW4gYmUgaW5z
dGFudGlhdGVkIHdpdGggZGlmZmVyZW50IHN1YmNsYXNzZXMuCisKKyAgICAgICAgKiBDTWFrZUxp
c3RzLnR4dDoKKyAgICAgICAgKiBUYXJnZXQucHJpOgorICAgICAgICAqIFdlYkNvcmUuZXhwLmlu
OgorICAgICAgICAqIFdlYkNvcmUuZ3lwaToKKyAgICAgICAgKiBXZWJDb3JlLnZjcHJvai9XZWJD
b3JlLnZjcHJvajoKKyAgICAgICAgKiBXZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2o6
CisgICAgICAgICogZWRpdGluZy9BbHRlcm5hdGl2ZVRleHRDb250cm9sbGVyLmNwcDogQ29waWVk
IGZyb20gU291cmNlL1dlYkNvcmUvZWRpdGluZy9TcGVsbGluZ0NvcnJlY3Rpb25Db250cm9sbGVy
LmNwcC4KKyAgICAgICAgKEF1dG9jb3JyZWN0aW9uQWx0ZXJuYXRpdmVEZXRhaWxzKToKKyAgICAg
ICAgKFdlYkNvcmU6OkF1dG9jb3JyZWN0aW9uQWx0ZXJuYXRpdmVEZXRhaWxzOjpjcmVhdGUpOgor
ICAgICAgICAoV2ViQ29yZTo6QXV0b2NvcnJlY3Rpb25BbHRlcm5hdGl2ZURldGFpbHM6OnJlcGxh
Y2VtZW50U3RyaW5nKToKKyAgICAgICAgKFdlYkNvcmU6OkF1dG9jb3JyZWN0aW9uQWx0ZXJuYXRp
dmVEZXRhaWxzOjpBdXRvY29ycmVjdGlvbkFsdGVybmF0aXZlRGV0YWlscyk6CisgICAgICAgIChX
ZWJDb3JlKToKKyAgICAgICAgKFdlYkNvcmU6OkFsdGVybmF0aXZlVGV4dENvbnRyb2xsZXI6OkFs
dGVybmF0aXZlVGV4dENvbnRyb2xsZXIpOgorICAgICAgICAoV2ViQ29yZTo6QWx0ZXJuYXRpdmVU
ZXh0Q29udHJvbGxlcjo6fkFsdGVybmF0aXZlVGV4dENvbnRyb2xsZXIpOgorICAgICAgICAoV2Vi
Q29yZTo6QWx0ZXJuYXRpdmVUZXh0Q29udHJvbGxlcjo6c3RhcnRBbHRlcm5hdGl2ZVRleHRVSVRp
bWVyKToKKyAgICAgICAgKFdlYkNvcmU6OkFsdGVybmF0aXZlVGV4dENvbnRyb2xsZXI6OnN0b3BB
bHRlcm5hdGl2ZVRleHRVSVRpbWVyKToKKyAgICAgICAgKFdlYkNvcmU6OkFsdGVybmF0aXZlVGV4
dENvbnRyb2xsZXI6OnN0b3BQZW5kaW5nQ29ycmVjdGlvbik6CisgICAgICAgIChXZWJDb3JlOjpB
bHRlcm5hdGl2ZVRleHRDb250cm9sbGVyOjphcHBseVBlbmRpbmdDb3JyZWN0aW9uKToKKyAgICAg
ICAgKFdlYkNvcmU6OkFsdGVybmF0aXZlVGV4dENvbnRyb2xsZXI6Omhhc1BlbmRpbmdDb3JyZWN0
aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OkFsdGVybmF0aXZlVGV4dENvbnRyb2xsZXI6OmlzU3Bl
bGxpbmdNYXJrZXJBbGxvd2VkKToKKyAgICAgICAgKFdlYkNvcmU6OkFsdGVybmF0aXZlVGV4dENv
bnRyb2xsZXI6OnNob3cpOgorICAgICAgICAoV2ViQ29yZTo6QWx0ZXJuYXRpdmVUZXh0Q29udHJv
bGxlcjo6aGFuZGxlQ2FuY2VsT3BlcmF0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OkFsdGVybmF0
aXZlVGV4dENvbnRyb2xsZXI6OmRpc21pc3MpOgorICAgICAgICAoV2ViQ29yZTo6QWx0ZXJuYXRp
dmVUZXh0Q29udHJvbGxlcjo6ZGlzbWlzc1Nvb24pOgorICAgICAgICAoV2ViQ29yZTo6QWx0ZXJu
YXRpdmVUZXh0Q29udHJvbGxlcjo6YXBwbHlBbHRlcm5hdGl2ZVRleHQpOgorICAgICAgICAoV2Vi
Q29yZTo6QWx0ZXJuYXRpdmVUZXh0Q29udHJvbGxlcjo6YXBwbHlBdXRvY29ycmVjdGlvbkJlZm9y
ZVR5cGluZ0lmQXBwcm9wcmlhdGUpOgorICAgICAgICAoV2ViQ29yZTo6QWx0ZXJuYXRpdmVUZXh0
Q29udHJvbGxlcjo6cmVzcG9uZFRvVW5hcHBsaWVkU3BlbGxDb3JyZWN0aW9uKToKKyAgICAgICAg
KFdlYkNvcmU6OkFsdGVybmF0aXZlVGV4dENvbnRyb2xsZXI6OnRpbWVyRmlyZWQpOgorICAgICAg
ICAoV2ViQ29yZTo6QWx0ZXJuYXRpdmVUZXh0Q29udHJvbGxlcjo6aGFuZGxlQWx0ZXJuYXRpdmVU
ZXh0VUlSZXN1bHQpOgorICAgICAgICAoV2ViQ29yZTo6QWx0ZXJuYXRpdmVUZXh0Q29udHJvbGxl
cjo6aXNBdXRvbWF0aWNTcGVsbGluZ0NvcnJlY3Rpb25FbmFibGVkKToKKyAgICAgICAgKFdlYkNv
cmU6OkFsdGVybmF0aXZlVGV4dENvbnRyb2xsZXI6OnJvb3RWaWV3UmVjdEZvclJhbmdlKToKKyAg
ICAgICAgKFdlYkNvcmU6OkFsdGVybmF0aXZlVGV4dENvbnRyb2xsZXI6OnJlc3BvbmRUb0NoYW5n
ZWRTZWxlY3Rpb24pOgorICAgICAgICAoV2ViQ29yZTo6QWx0ZXJuYXRpdmVUZXh0Q29udHJvbGxl
cjo6cmVzcG9uZFRvQXBwbGllZEVkaXRpbmcpOgorICAgICAgICAoV2ViQ29yZTo6QWx0ZXJuYXRp
dmVUZXh0Q29udHJvbGxlcjo6cmVzcG9uZFRvVW5hcHBsaWVkRWRpdGluZyk6CisgICAgICAgIChX
ZWJDb3JlOjpBbHRlcm5hdGl2ZVRleHRDb250cm9sbGVyOjpjbGllbnQpOgorICAgICAgICAoV2Vi
Q29yZTo6QWx0ZXJuYXRpdmVUZXh0Q29udHJvbGxlcjo6dGV4dENoZWNrZXIpOgorICAgICAgICAo
V2ViQ29yZTo6QWx0ZXJuYXRpdmVUZXh0Q29udHJvbGxlcjo6cmVjb3JkQXV0b2NvcnJlY3Rpb25S
ZXNwb25zZVJldmVyc2VkKToKKyAgICAgICAgKFdlYkNvcmU6OkFsdGVybmF0aXZlVGV4dENvbnRy
b2xsZXI6Om1hcmtSZXZlcnNlZCk6CisgICAgICAgIChXZWJDb3JlOjpBbHRlcm5hdGl2ZVRleHRD
b250cm9sbGVyOjptYXJrQ29ycmVjdGlvbik6CisgICAgICAgIChXZWJDb3JlOjpBbHRlcm5hdGl2
ZVRleHRDb250cm9sbGVyOjpyZWNvcmRTcGVsbGNoZWNrZXJSZXNwb25zZUZvck1vZGlmaWVkQ29y
cmVjdGlvbik6CisgICAgICAgIChXZWJDb3JlOjpBbHRlcm5hdGl2ZVRleHRDb250cm9sbGVyOjpk
ZWxldGVkQXV0b2NvcnJlY3Rpb25BdFBvc2l0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OkFsdGVy
bmF0aXZlVGV4dENvbnRyb2xsZXI6Om1hcmtQcmVjZWRpbmdXaGl0ZXNwYWNlRm9yRGVsZXRlZEF1
dG9jb3JyZWN0aW9uQWZ0ZXJDb21tYW5kKToKKyAgICAgICAgKFdlYkNvcmU6OkFsdGVybmF0aXZl
VGV4dENvbnRyb2xsZXI6OnByb2Nlc3NNYXJrZXJzT25UZXh0VG9CZVJlcGxhY2VkQnlSZXN1bHQp
OgorICAgICAgICAqIGVkaXRpbmcvQWx0ZXJuYXRpdmVUZXh0Q29udHJvbGxlci5oOiBDb3BpZWQg
ZnJvbSBTb3VyY2UvV2ViQ29yZS9lZGl0aW5nL1NwZWxsaW5nQ29ycmVjdGlvbkNvbnRyb2xsZXIu
aC4KKyAgICAgICAgKEFsdGVybmF0aXZlVGV4dERldGFpbHMpOgorICAgICAgICAoV2ViQ29yZTo6
QWx0ZXJuYXRpdmVUZXh0RGV0YWlsczo6QWx0ZXJuYXRpdmVUZXh0RGV0YWlscyk6CisgICAgICAg
IChXZWJDb3JlOjpBbHRlcm5hdGl2ZVRleHREZXRhaWxzOjp+QWx0ZXJuYXRpdmVUZXh0RGV0YWls
cyk6CisgICAgICAgIChXZWJDb3JlKToKKyAgICAgICAgKEFsdGVybmF0aXZlVGV4dEluZm8pOgor
ICAgICAgICAoQWx0ZXJuYXRpdmVUZXh0Q29udHJvbGxlcik6CisgICAgICAgIChXZWJDb3JlOjpB
bHRlcm5hdGl2ZVRleHRDb250cm9sbGVyOjpVTkxFU1NfRU5BQkxFRCk6CisgICAgICAgIChXZWJD
b3JlOjpBbHRlcm5hdGl2ZVRleHRDb250cm9sbGVyOjpzaG91bGRSZW1vdmVNYXJrZXJzVXBvbkVk
aXRpbmcpOgorICAgICAgICAqIGVkaXRpbmcvRWRpdG9yLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6
OkVkaXRvcjo6cmVzcG9uZFRvQ2hhbmdlZFNlbGVjdGlvbik6CisgICAgICAgIChXZWJDb3JlOjpF
ZGl0b3I6OmFwcGxpZWRFZGl0aW5nKToKKyAgICAgICAgKFdlYkNvcmU6OkVkaXRvcjo6dW5hcHBs
aWVkRWRpdGluZyk6CisgICAgICAgIChXZWJDb3JlOjpFZGl0b3I6OkVkaXRvcik6CisgICAgICAg
IChXZWJDb3JlOjpFZGl0b3I6Omluc2VydFRleHRXaXRob3V0U2VuZGluZ1RleHRFdmVudCk6Cisg
ICAgICAgIChXZWJDb3JlOjpFZGl0b3I6Omluc2VydExpbmVCcmVhayk6CisgICAgICAgIChXZWJD
b3JlOjpFZGl0b3I6Omluc2VydFBhcmFncmFwaFNlcGFyYXRvcik6CisgICAgICAgIChXZWJDb3Jl
OjpFZGl0b3I6OmlzQXV0b21hdGljU3BlbGxpbmdDb3JyZWN0aW9uRW5hYmxlZCk6CisgICAgICAg
IChXZWJDb3JlOjpFZGl0b3I6Om1hcmtNaXNzcGVsbGluZ3NBZnRlclR5cGluZ1RvV29yZCk6Cisg
ICAgICAgIChXZWJDb3JlOjpFZGl0b3I6Om1hcmtBbGxNaXNzcGVsbGluZ3NBbmRCYWRHcmFtbWFy
SW5SYW5nZXMpOgorICAgICAgICAoV2ViQ29yZTo6RWRpdG9yOjptYXJrQW5kUmVwbGFjZUZvcik6
CisgICAgICAgIChXZWJDb3JlOjpFZGl0b3I6OmNoYW5nZUJhY2tUb1JlcGxhY2VkU3RyaW5nKToK
KyAgICAgICAgKFdlYkNvcmU6OkVkaXRvcjo6dW5hcHBsaWVkU3BlbGxDb3JyZWN0aW9uKToKKyAg
ICAgICAgKFdlYkNvcmU6OkVkaXRvcjo6dXBkYXRlTWFya2Vyc0ZvcldvcmRzQWZmZWN0ZWRCeUVk
aXRpbmcpOgorICAgICAgICAoV2ViQ29yZTo6RWRpdG9yOjpkZWxldGVkQXV0b2NvcnJlY3Rpb25B
dFBvc2l0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OkVkaXRvcjo6c3RhcnRBbHRlcm5hdGl2ZVRl
eHRVSVRpbWVyKToKKyAgICAgICAgKFdlYkNvcmU6OkVkaXRvcjo6aGFuZGxlQWx0ZXJuYXRpdmVU
ZXh0VUlSZXN1bHQpOgorICAgICAgICAoV2ViQ29yZTo6RWRpdG9yOjpkaXNtaXNzQ29ycmVjdGlv
blBhbmVsQXNJZ25vcmVkKToKKyAgICAgICAgKiBlZGl0aW5nL0VkaXRvci5oOgorICAgICAgICAo
V2ViQ29yZSk6CisgICAgICAgIChFZGl0b3IpOgorICAgICAgICAqIGVkaXRpbmcvU3BlbGxpbmdD
b3JyZWN0aW9uQ29tbWFuZC5jcHA6CisgICAgICAgICogZWRpdGluZy9TcGVsbGluZ0NvcnJlY3Rp
b25Db250cm9sbGVyLmNwcDogUmVtb3ZlZC4KKyAgICAgICAgKiBlZGl0aW5nL1NwZWxsaW5nQ29y
cmVjdGlvbkNvbnRyb2xsZXIuaDogUmVtb3ZlZC4KKyAgICAgICAgKiBlZGl0aW5nL1R5cGluZ0Nv
bW1hbmQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6VHlwaW5nQ29tbWFuZDo6bWFya01pc3NwZWxs
aW5nc0FmdGVyVHlwaW5nKToKKyAgICAgICAgKiBsb2FkZXIvRW1wdHlDbGllbnRzLmg6CisgICAg
ICAgIChXZWJDb3JlOjpFbXB0eUVkaXRvckNsaWVudDo6c2hvd0NvcnJlY3Rpb25QYW5lbCk6Cisg
ICAgICAgIChXZWJDb3JlOjpFbXB0eUVkaXRvckNsaWVudDo6ZGlzbWlzc0NvcnJlY3Rpb25QYW5l
bCk6CisgICAgICAgIChXZWJDb3JlOjpFbXB0eUVkaXRvckNsaWVudDo6ZGlzbWlzc0NvcnJlY3Rp
b25QYW5lbFNvb24pOgorICAgICAgICAqIHBhZ2UvRWRpdG9yQ2xpZW50Lmg6CisKIDIwMTItMDQt
MDIgIE1pY2hhZWwgU2Fib2ZmICA8bXNhYm9mZkBhcHBsZS5jb20+CiAKICAgICAgICAgV2ViS2l0
IHNob3VsZCB0aHJvdHRsZSBtZW1vcnkgcHJlc3N1cmUgbm90aWZpY2F0aW9ucyBpbiBwcm9wb3J0
aW9uIHRvIGhhbmRsZXIgdGltZQpJbmRleDogU291cmNlL1dlYkNvcmUvQ01ha2VMaXN0cy50eHQK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvQ01ha2VMaXN0cy50eHQJKHJldmlzaW9uIDEx
MjkxNykKKysrIFNvdXJjZS9XZWJDb3JlL0NNYWtlTGlzdHMudHh0CSh3b3JraW5nIGNvcHkpCkBA
IC02NTQsNiArNjU0LDcgQEAgU0VUKFdlYkNvcmVfU09VUkNFUwogCiAgICAgZG9tL2RlZmF1bHQv
UGxhdGZvcm1NZXNzYWdlUG9ydENoYW5uZWwuY3BwCiAKKyAgICBlZGl0aW5nL0FsdGVybmF0aXZl
VGV4dENvbnRyb2xsZXIuY3BwCiAgICAgZWRpdGluZy9BcHBlbmROb2RlQ29tbWFuZC5jcHAKICAg
ICBlZGl0aW5nL0FwcGx5QmxvY2tFbGVtZW50Q29tbWFuZC5jcHAKICAgICBlZGl0aW5nL0FwcGx5
U3R5bGVDb21tYW5kLmNwcApAQCAtNjkzLDcgKzY5NCw2IEBAIFNFVChXZWJDb3JlX1NPVVJDRVMK
ICAgICBlZGl0aW5nL1NldFNlbGVjdGlvbkNvbW1hbmQuY3BwCiAgICAgZWRpdGluZy9TbWFydFJl
cGxhY2UuY3BwCiAgICAgZWRpdGluZy9TcGVsbENoZWNrZXIuY3BwCi0gICAgZWRpdGluZy9TcGVs
bGluZ0NvcnJlY3Rpb25Db250cm9sbGVyLmNwcAogICAgIGVkaXRpbmcvU3BlbGxpbmdDb3JyZWN0
aW9uQ29tbWFuZC5jcHAKICAgICBlZGl0aW5nL1NwbGl0RWxlbWVudENvbW1hbmQuY3BwCiAgICAg
ZWRpdGluZy9TcGxpdFRleHROb2RlQ29tbWFuZC5jcHAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL1Rh
cmdldC5wcmkKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvVGFyZ2V0LnByaQkocmV2aXNp
b24gMTEyOTE3KQorKysgU291cmNlL1dlYkNvcmUvVGFyZ2V0LnByaQkod29ya2luZyBjb3B5KQpA
QCAtNjI4LDYgKzYyOCw3IEBAIFNPVVJDRVMgKz0gXAogICAgIGRvbS9XaGVlbEV2ZW50LmNwcCBc
CiAgICAgZG9tL1dpbmRvd0V2ZW50Q29udGV4dC5jcHAgXAogICAgIGRvbS9kZWZhdWx0L1BsYXRm
b3JtTWVzc2FnZVBvcnRDaGFubmVsLmNwcCBcCisgICAgZWRpdGluZy9BbHRlcm5hdGl2ZVRleHRD
b250cm9sbGVyLmNwcCBcCiAgICAgZWRpdGluZy9BcHBlbmROb2RlQ29tbWFuZC5jcHAgXAogICAg
IGVkaXRpbmcvQXBwbHlCbG9ja0VsZW1lbnRDb21tYW5kLmNwcCBcCiAgICAgZWRpdGluZy9BcHBs
eVN0eWxlQ29tbWFuZC5jcHAgXApAQCAtNjY5LDcgKzY3MCw2IEBAIFNPVVJDRVMgKz0gXAogICAg
IGVkaXRpbmcvU2V0U2VsZWN0aW9uQ29tbWFuZC5jcHAgXAogICAgIGVkaXRpbmcvU3BlbGxDaGVj
a2VyLmNwcCBcCiAgICAgZWRpdGluZy9TcGVsbGluZ0NvcnJlY3Rpb25Db21tYW5kLmNwcCBcCi0g
ICAgZWRpdGluZy9TcGVsbGluZ0NvcnJlY3Rpb25Db250cm9sbGVyLmNwcCBcCiAgICAgZWRpdGlu
Zy9TcGxpdEVsZW1lbnRDb21tYW5kLmNwcCBcCiAgICAgZWRpdGluZy9TcGxpdFRleHROb2RlQ29t
bWFuZC5jcHAgXAogICAgIGVkaXRpbmcvU3BsaXRUZXh0Tm9kZUNvbnRhaW5pbmdFbGVtZW50Q29t
bWFuZC5jcHAgXApAQCAtMTc1OSw2ICsxNzU5LDcgQEAgSEVBREVSUyArPSBcCiAgICAgZG9tL1dl
YktpdE5hbWVkRmxvdy5oIFwKICAgICBkb20vV2ViS2l0VHJhbnNpdGlvbkV2ZW50LmggXAogICAg
IGRvbS9XaGVlbEV2ZW50LmggXAorICAgIGVkaXRpbmcvQWx0ZXJuYXRpdmVUZXh0Q29udHJvbGxl
ci5oIFwKICAgICBlZGl0aW5nL0FwcGVuZE5vZGVDb21tYW5kLmggXAogICAgIGVkaXRpbmcvQXBw
bHlCbG9ja0VsZW1lbnRDb21tYW5kLmggXAogICAgIGVkaXRpbmcvQXBwbHlTdHlsZUNvbW1hbmQu
aCBcCkBAIC0xODAwLDcgKzE4MDEsNiBAQCBIRUFERVJTICs9IFwKICAgICBlZGl0aW5nL1NldE5v
ZGVBdHRyaWJ1dGVDb21tYW5kLmggXAogICAgIGVkaXRpbmcvU21hcnRSZXBsYWNlLmggXAogICAg
IGVkaXRpbmcvU3BlbGxpbmdDb3JyZWN0aW9uQ29tbWFuZC5oIFwKLSAgICBlZGl0aW5nL1NwZWxs
aW5nQ29ycmVjdGlvbkNvbnRyb2xsZXIuaCBcCiAgICAgZWRpdGluZy9TcGxpdEVsZW1lbnRDb21t
YW5kLmggXAogICAgIGVkaXRpbmcvU3BsaXRUZXh0Tm9kZUNvbW1hbmQuaCBcCiAgICAgZWRpdGlu
Zy9TcGxpdFRleHROb2RlQ29udGFpbmluZ0VsZW1lbnRDb21tYW5kLmggXApJbmRleDogU291cmNl
L1dlYkNvcmUvV2ViQ29yZS5leHAuaW4KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvV2Vi
Q29yZS5leHAuaW4JKHJldmlzaW9uIDExMjkxNykKKysrIFNvdXJjZS9XZWJDb3JlL1dlYkNvcmUu
ZXhwLmluCSh3b3JraW5nIGNvcHkpCkBAIC04ODgsMTEgKzg4OCwxMSBAQCBfX1pON1dlYkNvcmU2
RWRpdG9yMjRyZXBsYWNlU2VsZWN0aW9uV2l0CiBfX1pON1dlYkNvcmU2RWRpdG9yMjZkZWNyZWFz
ZVNlbGVjdGlvbkxpc3RMZXZlbEV2CiBfX1pON1dlYkNvcmU2RWRpdG9yMjZpbmNyZWFzZVNlbGVj
dGlvbkxpc3RMZXZlbEV2CiBfX1pON1dlYkNvcmU2RWRpdG9yMjZ3cml0ZVNlbGVjdGlvblRvUGFz
dGVib2FyZEVSS04zV1RGNlN0cmluZ0VSS05TMV82VmVjdG9ySVMyX0xtMEVFRQotX19aTjdXZWJD
b3JlNkVkaXRvcjI3aGFuZGxlQ29ycmVjdGlvblBhbmVsUmVzdWx0RVJLTjNXVEY2U3RyaW5nRQog
X19aTjdXZWJDb3JlNkVkaXRvcjI3cmVhZFNlbGVjdGlvbkZyb21QYXN0ZWJvYXJkRVJLTjNXVEY2
U3RyaW5nRQogX19aTjdXZWJDb3JlNkVkaXRvcjI4cmVwbGFjZVNlbGVjdGlvbldpdGhGcmFnbWVu
dEVOM1dURjEwUGFzc1JlZlB0cklOU18xNkRvY3VtZW50RnJhZ21lbnRFRUViYmIKIF9fWk43V2Vi
Q29yZTZFZGl0b3IyOWNhbkRlY3JlYXNlU2VsZWN0aW9uTGlzdExldmVsRXYKIF9fWk43V2ViQ29y
ZTZFZGl0b3IyOWNhbkluY3JlYXNlU2VsZWN0aW9uTGlzdExldmVsRXYKK19fWk43V2ViQ29yZTZF
ZGl0b3IyOWhhbmRsZUFsdGVybmF0aXZlVGV4dFVJUmVzdWx0RVJLTjNXVEY2U3RyaW5nRQogX19a
TjdXZWJDb3JlNkVkaXRvcjMwZGVsZXRlU2VsZWN0aW9uV2l0aFNtYXJ0RGVsZXRlRWIKIF9fWk43
V2ViQ29yZTZFZGl0b3IzMHBhc3RlQXNQbGFpblRleHRCeXBhc3NpbmdESFRNTEV2CiBfX1pON1dl
YkNvcmU2RWRpdG9yMzJndWVzc2VzRm9yVW5ncmFtbWF0aWNhbFNlbGVjdGlvbkV2CkluZGV4OiBT
b3VyY2UvV2ViQ29yZS9XZWJDb3JlLmd5cGkKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUv
V2ViQ29yZS5neXBpCShyZXZpc2lvbiAxMTI5MTcpCisrKyBTb3VyY2UvV2ViQ29yZS9XZWJDb3Jl
Lmd5cGkJKHdvcmtpbmcgY29weSkKQEAgLTI0OTcsNiArMjQ5Nyw4IEBACiAgICAgICAgICAgICAn
Y3NzL1dlYktpdENTU1NoYWRlclZhbHVlLmNwcCcsCiAgICAgICAgICAgICAnY3NzL1dlYktpdENT
U1NoYWRlclZhbHVlLmgnLAogICAgICAgICAgICAgJ2Nzcy9XZWJLaXRDU1NUcmFuc2Zvcm1WYWx1
ZS5jcHAnLAorICAgICAgICAgICAgJ2VkaXRpbmcvQWx0ZXJuYXRpdmVUZXh0Q29udHJvbGxlci5j
cHAnLAorICAgICAgICAgICAgJ2VkaXRpbmcvQWx0ZXJuYXRpdmVUZXh0Q29udHJvbGxlci5oJywK
ICAgICAgICAgICAgICdlZGl0aW5nL0FwcGVuZE5vZGVDb21tYW5kLmNwcCcsCiAgICAgICAgICAg
ICAnZWRpdGluZy9BcHBlbmROb2RlQ29tbWFuZC5oJywKICAgICAgICAgICAgICdlZGl0aW5nL0Fw
cGx5QmxvY2tFbGVtZW50Q29tbWFuZC5jcHAnLApAQCAtMjU2Niw4ICsyNTY4LDYgQEAKICAgICAg
ICAgICAgICdlZGl0aW5nL1NtYXJ0UmVwbGFjZUlDVS5jcHAnLAogICAgICAgICAgICAgJ2VkaXRp
bmcvU3BlbGxDaGVja2VyLmNwcCcsCiAgICAgICAgICAgICAnZWRpdGluZy9TcGVsbENoZWNrZXIu
aCcsCi0gICAgICAgICAgICAnZWRpdGluZy9TcGVsbGluZ0NvcnJlY3Rpb25Db250cm9sbGVyLmNw
cCcsCi0gICAgICAgICAgICAnZWRpdGluZy9TcGVsbGluZ0NvcnJlY3Rpb25Db250cm9sbGVyLmgn
LAogICAgICAgICAgICAgJ2VkaXRpbmcvU3BlbGxpbmdDb3JyZWN0aW9uQ29tbWFuZC5jcHAnLAog
ICAgICAgICAgICAgJ2VkaXRpbmcvU3BlbGxpbmdDb3JyZWN0aW9uQ29tbWFuZC5oJywKICAgICAg
ICAgICAgICdlZGl0aW5nL1NwbGl0RWxlbWVudENvbW1hbmQuY3BwJywKSW5kZXg6IFNvdXJjZS9X
ZWJDb3JlL1dlYkNvcmUudmNwcm9qL1dlYkNvcmUudmNwcm9qCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9XZWJDb3JlL1dlYkNvcmUudmNwcm9qL1dlYkNvcmUudmNwcm9qCShyZXZpc2lvbiAxMTI5MTcp
CisrKyBTb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnZjcHJvai9XZWJDb3JlLnZjcHJvagkod29ya2lu
ZyBjb3B5KQpAQCAtNTQwNzQsNiArNTQwNzQsNjIgQEAKIAkJCQk+CiAJCQk8L0ZpbGU+CiAJCTwv
RmlsdGVyPgorCQk8RmlsZQorCQkJCVJlbGF0aXZlUGF0aD0iLi5cZWRpdGluZ1xBbHRlcm5hdGl2
ZVRleHRDb250cm9sbGVyLmNwcCIKKwkJCQk+CisJCQkJPEZpbGVDb25maWd1cmF0aW9uCisJCQkJ
CU5hbWU9IkRlYnVnfFdpbjMyIgorCQkJCQlFeGNsdWRlZEZyb21CdWlsZD0idHJ1ZSIKKwkJCQkJ
PgorCQkJCQk8VG9vbAorCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCIKKwkJCQkJLz4KKwkJ
CQk8L0ZpbGVDb25maWd1cmF0aW9uPgorCQkJCTxGaWxlQ29uZmlndXJhdGlvbgorCQkJCQlOYW1l
PSJSZWxlYXNlfFdpbjMyIgorCQkJCQlFeGNsdWRlZEZyb21CdWlsZD0idHJ1ZSIKKwkJCQkJPgor
CQkJCQk8VG9vbAorCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCIKKwkJCQkJLz4KKwkJCQk8
L0ZpbGVDb25maWd1cmF0aW9uPgorCQkJCTxGaWxlQ29uZmlndXJhdGlvbgorCQkJCQlOYW1lPSJE
ZWJ1Z19DYWlyb19DRkxpdGV8V2luMzIiCisJCQkJCUV4Y2x1ZGVkRnJvbUJ1aWxkPSJ0cnVlIgor
CQkJCQk+CisJCQkJCTxUb29sCisJCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIgorCQkJCQkv
PgorCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+CisJCQkJPEZpbGVDb25maWd1cmF0aW9uCisJCQkJ
CU5hbWU9IlJlbGVhc2VfQ2Fpcm9fQ0ZMaXRlfFdpbjMyIgorCQkJCQlFeGNsdWRlZEZyb21CdWls
ZD0idHJ1ZSIKKwkJCQkJPgorCQkJCQk8VG9vbAorCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9v
bCIKKwkJCQkJLz4KKwkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPgorCQkJCTxGaWxlQ29uZmlndXJh
dGlvbgorCQkJCQlOYW1lPSJEZWJ1Z19BbGx8V2luMzIiCisJCQkJCUV4Y2x1ZGVkRnJvbUJ1aWxk
PSJ0cnVlIgorCQkJCQk+CisJCQkJCTxUb29sCisJCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29s
IgorCQkJCQkvPgorCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+CisJCQkJPEZpbGVDb25maWd1cmF0
aW9uCisJCQkJCU5hbWU9IlJlbGVhc2VfTFRDR3xXaW4zMiIKKwkJCQkJRXhjbHVkZWRGcm9tQnVp
bGQ9InRydWUiCisJCQkJCT4KKwkJCQkJPFRvb2wKKwkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRv
b2wiCisJCQkJCS8+CisJCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4KKwkJCTwvRmlsZT4KKwkJCTxG
aWxlCisJCQkJUmVsYXRpdmVQYXRoPSIuLlxlZGl0aW5nXEFsdGVybmF0aXZlVGV4dENvbnRyb2xs
ZXIuaCIKKwkJCQk+CisJCQk8L0ZpbGU+CiAJCTxGaWx0ZXIKIAkJCU5hbWU9ImVkaXRpbmciCiAJ
CQk+CkBAIC01NjQ1NCw2MiArNTY1MTAsNiBAQAogCQkJCT4KIAkJCTwvRmlsZT4KIAkJCTxGaWxl
Ci0JCQkJUmVsYXRpdmVQYXRoPSIuLlxlZGl0aW5nXFNwZWxsaW5nQ29ycmVjdGlvbkNvbnRyb2xs
ZXIuY3BwIgotCQkJCT4KLQkJCQk8RmlsZUNvbmZpZ3VyYXRpb24KLQkJCQkJTmFtZT0iRGVidWd8
V2luMzIiCi0JCQkJCUV4Y2x1ZGVkRnJvbUJ1aWxkPSJ0cnVlIgotCQkJCQk+Ci0JCQkJCTxUb29s
Ci0JCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIgotCQkJCQkvPgotCQkJCTwvRmlsZUNvbmZp
Z3VyYXRpb24+Ci0JCQkJPEZpbGVDb25maWd1cmF0aW9uCi0JCQkJCU5hbWU9IlJlbGVhc2V8V2lu
MzIiCi0JCQkJCUV4Y2x1ZGVkRnJvbUJ1aWxkPSJ0cnVlIgotCQkJCQk+Ci0JCQkJCTxUb29sCi0J
CQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIgotCQkJCQkvPgotCQkJCTwvRmlsZUNvbmZpZ3Vy
YXRpb24+Ci0JCQkJPEZpbGVDb25maWd1cmF0aW9uCi0JCQkJCU5hbWU9IkRlYnVnX0NhaXJvX0NG
TGl0ZXxXaW4zMiIKLQkJCQkJRXhjbHVkZWRGcm9tQnVpbGQ9InRydWUiCi0JCQkJCT4KLQkJCQkJ
PFRvb2wKLQkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiCi0JCQkJCS8+Ci0JCQkJPC9GaWxl
Q29uZmlndXJhdGlvbj4KLQkJCQk8RmlsZUNvbmZpZ3VyYXRpb24KLQkJCQkJTmFtZT0iUmVsZWFz
ZV9DYWlyb19DRkxpdGV8V2luMzIiCi0JCQkJCUV4Y2x1ZGVkRnJvbUJ1aWxkPSJ0cnVlIgotCQkJ
CQk+Ci0JCQkJCTxUb29sCi0JCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIgotCQkJCQkvPgot
CQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+Ci0JCQkJPEZpbGVDb25maWd1cmF0aW9uCi0JCQkJCU5h
bWU9IkRlYnVnX0FsbHxXaW4zMiIKLQkJCQkJRXhjbHVkZWRGcm9tQnVpbGQ9InRydWUiCi0JCQkJ
CT4KLQkJCQkJPFRvb2wKLQkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiCi0JCQkJCS8+Ci0J
CQkJPC9GaWxlQ29uZmlndXJhdGlvbj4KLQkJCQk8RmlsZUNvbmZpZ3VyYXRpb24KLQkJCQkJTmFt
ZT0iUmVsZWFzZV9MVENHfFdpbjMyIgotCQkJCQlFeGNsdWRlZEZyb21CdWlsZD0idHJ1ZSIKLQkJ
CQkJPgotCQkJCQk8VG9vbAotCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCIKLQkJCQkJLz4K
LQkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPgotCQkJPC9GaWxlPgotCQkJPEZpbGUKLQkJCQlSZWxh
dGl2ZVBhdGg9Ii4uXGVkaXRpbmdcU3BlbGxpbmdDb3JyZWN0aW9uQ29udHJvbGxlci5oIgotCQkJ
CT4KLQkJCTwvRmlsZT4KLQkJCTxGaWxlCiAJCQkJUmVsYXRpdmVQYXRoPSIuLlxlZGl0aW5nXFNw
bGl0RWxlbWVudENvbW1hbmQuY3BwIgogCQkJCT4KIAkJCQk8RmlsZUNvbmZpZ3VyYXRpb24KSW5k
ZXg6IFNvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvago9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHBy
b2oJKHJldmlzaW9uIDExMjkxNykKKysrIFNvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9q
L3Byb2plY3QucGJ4cHJvagkod29ya2luZyBjb3B5KQpAQCAtMzcwMSw4ICszNzAxLDYgQEAKIAkJ
QTYyMkE4RkYxMjJDNDRBNjAwQTc4NUIzIC8qIEdlbmVyaWNCaW5kaW5nLmggaW4gSGVhZGVycyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBBNjIyQThGOTEyMkM0NEE2MDBBNzg1
QjMgLyogR2VuZXJpY0JpbmRpbmcuaCAqLzsgfTsKIAkJQTZEMTY5NjIxMzQ2QjQ5QjAwMEVCNzcw
IC8qIFNoYWRvd1Jvb3QuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gQTZEMTY5NjExMzQ2QjQ5QjAwMEVCNzcwIC8qIFNoYWRvd1Jvb3QuY3BwICovOyB9
OwogCQlBNkQxNjk2NDEzNDZCNEMxMDAwRUI3NzAgLyogU2hhZG93Um9vdC5oIGluIEhlYWRlcnMg
Ki8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQTZEMTY5NjMxMzQ2QjRDMTAwMEVC
NzcwIC8qIFNoYWRvd1Jvb3QuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRl
LCApOyB9OyB9OwotCQlBNzAwNUNDQzEzMzBDNEJBMDAwQ0MwQkEgLyogU3BlbGxpbmdDb3JyZWN0
aW9uQ29udHJvbGxlci5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSBBNzAwNUNDQTEzMzBDNEJBMDAwQ0MwQkEgLyogU3BlbGxpbmdDb3JyZWN0aW9uQ29u
dHJvbGxlci5jcHAgKi87IH07Ci0JCUE3MDA1Q0NEMTMzMEM0QkEwMDBDQzBCQSAvKiBTcGVsbGlu
Z0NvcnJlY3Rpb25Db250cm9sbGVyLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSBBNzAwNUNDQjEzMzBDNEJBMDAwQ0MwQkEgLyogU3BlbGxpbmdDb3JyZWN0
aW9uQ29udHJvbGxlci5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7
IH07IH07CiAJCUE3MTUxQkQ4MTJGMTU1OEYwMDVBMEY2NCAvKiBUZXh0Q2hlY2tlckNsaWVudC5o
IGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQTcxNTFCRDcx
MkYxNTU4RjAwNUEwRjY0IC8qIFRleHRDaGVja2VyQ2xpZW50LmggKi87IHNldHRpbmdzID0ge0FU
VFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJQTcxNUU2NTIxMzRCQkJFQzAwRDhFNzEz
IC8qIFByb2dyZXNzU2hhZG93RWxlbWVudC5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSBBNzE1RTY1MDEzNEJCQkVDMDBEOEU3MTMgLyogUHJvZ3Jlc3NT
aGFkb3dFbGVtZW50LmNwcCAqLzsgfTsKIAkJQTcxNUU2NTMxMzRCQkJFQzAwRDhFNzEzIC8qIFBy
b2dyZXNzU2hhZG93RWxlbWVudC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gQTcxNUU2NTExMzRCQkJFQzAwRDhFNzEzIC8qIFByb2dyZXNzU2hhZG93RWxl
bWVudC5oICovOyB9OwpAQCAtNTcyOCw2ICs1NzI2LDggQEAKIAkJQ0UwMkYwQzQxMUU4M0FERDAw
QzY2ODRBIC8qIFNjcmlwdENvbnRyb2xsZXJCYXNlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBDRTAyRjBDMzExRTgzQUREMDBDNjY4NEEgLyogU2NyaXB0
Q29udHJvbGxlckJhc2UuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCAp
OyB9OyB9OwogCQlDRTA1N0ZBNTEyMjA3MzExMDBBNDc2RDUgLyogRG9jdW1lbnRNYXJrZXJDb250
cm9sbGVyLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9
IENFMDU3RkEzMTIyMDczMTEwMEE0NzZENSAvKiBEb2N1bWVudE1hcmtlckNvbnRyb2xsZXIuY3Bw
ICovOyB9OwogCQlDRTA1N0ZBNjEyMjA3MzExMDBBNDc2RDUgLyogRG9jdW1lbnRNYXJrZXJDb250
cm9sbGVyLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBD
RTA1N0ZBNDEyMjA3MzExMDBBNDc2RDUgLyogRG9jdW1lbnRNYXJrZXJDb250cm9sbGVyLmggKi87
IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKKwkJQ0UzMEY4REUx
NTJBMDNFNTAwQzRDRTE0IC8qIEFsdGVybmF0aXZlVGV4dENvbnRyb2xsZXIuY3BwIGluIFNvdXJj
ZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQ0UzMEY4REMxNTJBMDNFNTAw
QzRDRTE0IC8qIEFsdGVybmF0aXZlVGV4dENvbnRyb2xsZXIuY3BwICovOyB9OworCQlDRTMwRjhE
RjE1MkEwM0U1MDBDNENFMTQgLyogQWx0ZXJuYXRpdmVUZXh0Q29udHJvbGxlci5oIGluIEhlYWRl
cnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQ0UzMEY4REQxNTJBMDNFNTAw
QzRDRTE0IC8qIEFsdGVybmF0aXZlVGV4dENvbnRyb2xsZXIuaCAqLzsgc2V0dGluZ3MgPSB7QVRU
UklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQlDRTU0RkQzODEwMTZEOUE2MDA4QjQ0Qzgg
LyogU2NyaXB0U291cmNlUHJvdmlkZXIuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IENFNTRGRDM3MTAxNkQ5QTYwMDhCNDRDOCAvKiBTY3JpcHRTb3VyY2VQ
cm92aWRlci5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07
CiAJCUNFQTM5NDlDMTFENDVDREEwMDMwOTRDRiAvKiBTdGF0aWNIYXNoU2V0Tm9kZUxpc3QuY3Bw
IGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQ0VBMzk0OUEx
MUQ0NUNEQTAwMzA5NENGIC8qIFN0YXRpY0hhc2hTZXROb2RlTGlzdC5jcHAgKi87IH07CiAJCUNF
QTM5NDlEMTFENDVDREEwMDMwOTRDRiAvKiBTdGF0aWNIYXNoU2V0Tm9kZUxpc3QuaCBpbiBIZWFk
ZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IENFQTM5NDlCMTFENDVDREEw
MDMwOTRDRiAvKiBTdGF0aWNIYXNoU2V0Tm9kZUxpc3QuaCAqLzsgfTsKQEAgLTEwNzAwLDggKzEw
NzAwLDYgQEAKIAkJQTYyMkE4RjkxMjJDNDRBNjAwQTc4NUIzIC8qIEdlbmVyaWNCaW5kaW5nLmgg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IEdlbmVyaWNCaW5kaW5nLmg7IHBhdGgg
PSBnZW5lcmljL0dlbmVyaWNCaW5kaW5nLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJ
CUE2RDE2OTYxMTM0NkI0OUIwMDBFQjc3MCAvKiBTaGFkb3dSb290LmNwcCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFNoYWRvd1Jvb3QuY3BwOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OwogCQlBNkQxNjk2MzEzNDZCNEMxMDAwRUI3NzAgLyogU2hhZG93Um9vdC5oICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBTaGFkb3dSb290Lmg7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07Ci0JCUE3MDA1Q0NBMTMzMEM0QkEwMDBDQzBCQSAvKiBTcGVsbGluZ0Nv
cnJlY3Rpb25Db250cm9sbGVyLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0
aCA9IFNwZWxsaW5nQ29ycmVjdGlvbkNvbnRyb2xsZXIuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OwotCQlBNzAwNUNDQjEzMzBDNEJBMDAwQ0MwQkEgLyogU3BlbGxpbmdDb3JyZWN0aW9u
Q29udHJvbGxlci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9
IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBTcGVsbGluZ0Nv
cnJlY3Rpb25Db250cm9sbGVyLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUE3MTUx
QkQ3MTJGMTU1OEYwMDVBMEY2NCAvKiBUZXh0Q2hlY2tlckNsaWVudC5oICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jLmg7IHBhdGggPSBUZXh0Q2hlY2tlckNsaWVudC5oOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OwogCQlBNzE1RTY1MDEzNEJCQkVDMDBEOEU3MTMgLyogUHJvZ3Jlc3NTaGFkb3dF
bGVtZW50LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFByb2dyZXNz
U2hhZG93RWxlbWVudC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUE3MTVFNjUx
MTM0QkJCRUMwMEQ4RTcxMyAvKiBQcm9ncmVzc1NoYWRvd0VsZW1lbnQuaCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuYy5oOyBwYXRoID0gUHJvZ3Jlc3NTaGFkb3dFbGVtZW50Lmg7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CkBAIC0xMjgxNSw2ICsxMjgxMyw4IEBACiAJCUNFMDJGMEMzMTFFODNB
REQwMEM2Njg0QSAvKiBTY3JpcHRDb250cm9sbGVyQmFzZS5oICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jLmg7IHBhdGggPSBTY3JpcHRDb250cm9sbGVyQmFzZS5oOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OwogCQlDRTA1N0ZBMzEyMjA3MzExMDBBNDc2RDUgLyogRG9jdW1lbnRNYXJrZXJDb250
cm9sbGVyLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IERvY3VtZW50
TWFya2VyQ29udHJvbGxlci5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUNFMDU3
RkE0MTIyMDczMTEwMEE0NzZENSAvKiBEb2N1bWVudE1hcmtlckNvbnRyb2xsZXIuaCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gRG9jdW1lbnRNYXJrZXJDb250cm9sbGVyLmg7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUNFMzBGOERDMTUyQTAzRTUwMEM0Q0UxNCAvKiBB
bHRlcm5hdGl2ZVRleHRDb250cm9sbGVyLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNw
cDsgcGF0aCA9IEFsdGVybmF0aXZlVGV4dENvbnRyb2xsZXIuY3BwOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OworCQlDRTMwRjhERDE1MkEwM0U1MDBDNENFMTQgLyogQWx0ZXJuYXRpdmVUZXh0
Q29udHJvbGxlci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9
IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBBbHRlcm5hdGl2
ZVRleHRDb250cm9sbGVyLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUNFNTRGRDM3
MTAxNkQ5QTYwMDhCNDRDOCAvKiBTY3JpcHRTb3VyY2VQcm92aWRlci5oICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jLmg7IHBhdGggPSBTY3JpcHRTb3VyY2VQcm92aWRlci5oOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OwogCQlDRTVDQjFCMzE0RURBQjZGMDBCQjI3OTUgLyogRXZlbnRTZW5kZXIu
aCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gRXZlbnRTZW5kZXIuaDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQ0VBMzk0OUExMUQ0NUNEQTAwMzA5NENGIC8qIFN0YXRp
Y0hhc2hTZXROb2RlTGlzdC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVu
Y29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGgg
PSBTdGF0aWNIYXNoU2V0Tm9kZUxpc3QuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpA
QCAtMTY1NzUsNiArMTY1NzUsOCBAQAogCQkJaXNhID0gUEJYR3JvdXA7CiAJCQljaGlsZHJlbiA9
ICgKIAkJCQlFRDUwMURDOTBCMjQ5RjM5MDBBRTE4RDkgLyogbWFjICovLAorCQkJCUNFMzBGOERD
MTUyQTAzRTUwMEM0Q0UxNCAvKiBBbHRlcm5hdGl2ZVRleHRDb250cm9sbGVyLmNwcCAqLywKKwkJ
CQlDRTMwRjhERDE1MkEwM0U1MDBDNENFMTQgLyogQWx0ZXJuYXRpdmVUZXh0Q29udHJvbGxlci5o
ICovLAogCQkJCTkzMzA5RDg3MDk5RTY0OTEwMDU2RTU4MSAvKiBBcHBlbmROb2RlQ29tbWFuZC5j
cHAgKi8sCiAJCQkJOTMzMDlEODgwOTlFNjQ5MTAwNTZFNTgxIC8qIEFwcGVuZE5vZGVDb21tYW5k
LmggKi8sCiAJCQkJOUI0MTcwNjMxMjU2NjJCMzAwNkIyOEZDIC8qIEFwcGx5QmxvY2tFbGVtZW50
Q29tbWFuZC5jcHAgKi8sCkBAIC0xNjY2Niw4ICsxNjY2OCw2IEBACiAJCQkJQTc4RkUxM0ExMjM2
NkIxMDAwQUNFOEQwIC8qIFNwZWxsQ2hlY2tlci5oICovLAogCQkJCUI4REJEQjQ5MTMwQjBGOEEw
MEY1Q0RCMSAvKiBTcGVsbGluZ0NvcnJlY3Rpb25Db21tYW5kLmNwcCAqLywKIAkJCQlCOERCREI0
QTEzMEIwRjhBMDBGNUNEQjEgLyogU3BlbGxpbmdDb3JyZWN0aW9uQ29tbWFuZC5oICovLAotCQkJ
CUE3MDA1Q0NBMTMzMEM0QkEwMDBDQzBCQSAvKiBTcGVsbGluZ0NvcnJlY3Rpb25Db250cm9sbGVy
LmNwcCAqLywKLQkJCQlBNzAwNUNDQjEzMzBDNEJBMDAwQ0MwQkEgLyogU3BlbGxpbmdDb3JyZWN0
aW9uQ29udHJvbGxlci5oICovLAogCQkJCTkzMzA5REMyMDk5RTY0OTEwMDU2RTU4MSAvKiBTcGxp
dEVsZW1lbnRDb21tYW5kLmNwcCAqLywKIAkJCQk5MzMwOURDMzA5OUU2NDkxMDA1NkU1ODEgLyog
U3BsaXRFbGVtZW50Q29tbWFuZC5oICovLAogCQkJCTkzMzA5REM0MDk5RTY0OTEwMDU2RTU4MSAv
KiBTcGxpdFRleHROb2RlQ29tbWFuZC5jcHAgKi8sCkBAIC0yMTQ5MSw2ICsyMTQ5MSw3IEBACiAJ
CQlpc2EgPSBQQlhIZWFkZXJzQnVpbGRQaGFzZTsKIAkJCWJ1aWxkQWN0aW9uTWFzayA9IDIxNDc0
ODM2NDc7CiAJCQlmaWxlcyA9ICgKKwkJCQlDRTMwRjhERjE1MkEwM0U1MDBDNENFMTQgLyogQWx0
ZXJuYXRpdmVUZXh0Q29udHJvbGxlci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJOTdCQzY5REIxNTA1
RjA3NjAwMUI3NEFDIC8qIEFic3RyYWN0RGF0YWJhc2UuaCBpbiBIZWFkZXJzICovLAogCQkJCTQx
RTFCMUQxMEZGNTk4NjkwMDU3NkIzQiAvKiBBYnN0cmFjdFdvcmtlci5oIGluIEhlYWRlcnMgKi8s
CiAJCQkJMjlBODEyMkUwRkJCOUMxRDAwNTEwMjkzIC8qIEFjY2Vzc2liaWxpdHlBUklBR3JpZENl
bGwuaCBpbiBIZWFkZXJzICovLApAQCAtMjQwNzYsNyArMjQwNzcsNiBAQAogCQkJCTc1NDE1QjAw
MTI5NThENUUwMDNBRDY2OSAvKiBTcGVlY2hJbnB1dFJlc3VsdExpc3QuaCBpbiBIZWFkZXJzICov
LAogCQkJCUE3OEZFMTNDMTIzNjZCMTAwMEFDRThEMCAvKiBTcGVsbENoZWNrZXIuaCBpbiBIZWFk
ZXJzICovLAogCQkJCUI4REJEQjRFMTMwQjBGOEEwMEY1Q0RCMSAvKiBTcGVsbGluZ0NvcnJlY3Rp
b25Db21tYW5kLmggaW4gSGVhZGVycyAqLywKLQkJCQlBNzAwNUNDRDEzMzBDNEJBMDAwQ0MwQkEg
LyogU3BlbGxpbmdDb3JyZWN0aW9uQ29udHJvbGxlci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJOTMz
MDlFMTIwOTlFNjQ5MjAwNTZFNTgxIC8qIFNwbGl0RWxlbWVudENvbW1hbmQuaCBpbiBIZWFkZXJz
ICovLAogCQkJCTkzMzA5RTE0MDk5RTY0OTIwMDU2RTU4MSAvKiBTcGxpdFRleHROb2RlQ29tbWFu
ZC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJOTMzMDlFMTYwOTlFNjQ5MjAwNTZFNTgxIC8qIFNwbGl0
VGV4dE5vZGVDb250YWluaW5nRWxlbWVudENvbW1hbmQuaCBpbiBIZWFkZXJzICovLApAQCAtMjcx
OTAsNyArMjcxOTAsNiBAQAogCQkJCTc1NDE1QzI5MTI5QTk5MjAwMDNBRDY2OSAvKiBTcGVlY2hJ
bnB1dFJlc3VsdExpc3QuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQTc4RkUxM0IxMjM2NkIxMDAw
QUNFOEQwIC8qIFNwZWxsQ2hlY2tlci5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlCOERCREI0RDEz
MEIwRjhBMDBGNUNEQjEgLyogU3BlbGxpbmdDb3JyZWN0aW9uQ29tbWFuZC5jcHAgaW4gU291cmNl
cyAqLywKLQkJCQlBNzAwNUNDQzEzMzBDNEJBMDAwQ0MwQkEgLyogU3BlbGxpbmdDb3JyZWN0aW9u
Q29udHJvbGxlci5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk5MzMwOUUxMTA5OUU2NDkyMDA1NkU1
ODEgLyogU3BsaXRFbGVtZW50Q29tbWFuZC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk5MzMwOUUx
MzA5OUU2NDkyMDA1NkU1ODEgLyogU3BsaXRUZXh0Tm9kZUNvbW1hbmQuY3BwIGluIFNvdXJjZXMg
Ki8sCiAJCQkJOTMzMDlFMTUwOTlFNjQ5MjAwNTZFNTgxIC8qIFNwbGl0VGV4dE5vZGVDb250YWlu
aW5nRWxlbWVudENvbW1hbmQuY3BwIGluIFNvdXJjZXMgKi8sCkBAIC0yNzY1OSw2ICsyNzY1OCw3
IEBACiAJCQkJMUEzNTg2RTExNTI2NEY5NTAwMjJBNjU5IC8qIFNWR0FuaW1hdGVkSW50ZWdlck9w
dGlvbmFsSW50ZWdlci5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkxQTNGRjlDMzE1MjY1MzU5MDAy
Mjg4QTEgLyogUmVuZGVyTmFtZWRGbG93VGhyZWFkLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUUx
QjI1MTA2MTUyQTBCQUYwMDY5Qjc3OSAvKiBTdHlsZVByb3BlcnR5U2hvcnRoYW5kLmNwcCBpbiBT
b3VyY2VzICovLAorCQkJCUNFMzBGOERFMTUyQTAzRTUwMEM0Q0UxNCAvKiBBbHRlcm5hdGl2ZVRl
eHRDb250cm9sbGVyLmNwcCBpbiBTb3VyY2VzICovLAogCQkJKTsKIAkJCXJ1bk9ubHlGb3JEZXBs
b3ltZW50UG9zdHByb2Nlc3NpbmcgPSAwOwogCQl9OwpJbmRleDogU291cmNlL1dlYkNvcmUvZWRp
dGluZy9BbHRlcm5hdGl2ZVRleHRDb250cm9sbGVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
V2ViQ29yZS9lZGl0aW5nL0FsdGVybmF0aXZlVGV4dENvbnRyb2xsZXIuY3BwCShyZXZpc2lvbiAx
MTI4MzApCShmcm9tIFNvdXJjZS9XZWJDb3JlL2VkaXRpbmcvU3BlbGxpbmdDb3JyZWN0aW9uQ29u
dHJvbGxlci5jcHA6MTEyODMwKQorKysgU291cmNlL1dlYkNvcmUvZWRpdGluZy9BbHRlcm5hdGl2
ZVRleHRDb250cm9sbGVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDU2NSBAQAorLyoK
KyAqIENvcHlyaWdodCAoQykgMjAwNiwgMjAwNywgMjAwOCBBcHBsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDggTm9raWEgQ29ycG9yYXRpb24gYW5kL29y
IGl0cyBzdWJzaWRpYXJ5KC1pZXMpCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz
b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24s
IGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAq
IGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRh
aW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25z
IGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBw
cm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQ
Uk9WSURFRCBCWSBBUFBMRSBDT01QVVRFUiwgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQ
UkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5F
U1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVW
RU5UIFNIQUxMIEFQUExFIENPTVBVVEVSLCBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElB
QkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVY
RU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7
IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBU
SU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBX
SEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVE
SU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRI
RSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lC
SUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNs
dWRlICJTcGVsbGluZ0NvcnJlY3Rpb25Db250cm9sbGVyLmgiCisKKyNpbmNsdWRlICJEb2N1bWVu
dE1hcmtlckNvbnRyb2xsZXIuaCIKKyNpbmNsdWRlICJFZGl0Q29tbWFuZC5oIgorI2luY2x1ZGUg
IkVkaXRvckNsaWVudC5oIgorI2luY2x1ZGUgIkZsb2F0UXVhZC5oIgorI2luY2x1ZGUgIkZyYW1l
LmgiCisjaW5jbHVkZSAiRnJhbWVWaWV3LmgiCisjaW5jbHVkZSAiUGFnZS5oIgorI2luY2x1ZGUg
IlNwZWxsaW5nQ29ycmVjdGlvbkNvbW1hbmQuaCIKKyNpbmNsdWRlICJUZXh0Q2hlY2tlckNsaWVu
dC5oIgorI2luY2x1ZGUgIlRleHRDaGVja2luZ0hlbHBlci5oIgorI2luY2x1ZGUgIlRleHRJdGVy
YXRvci5oIgorI2luY2x1ZGUgIlZpc2libGVTZWxlY3Rpb24uaCIKKyNpbmNsdWRlICJodG1sZWRp
dGluZy5oIgorI2luY2x1ZGUgIm1hcmt1cC5oIgorI2luY2x1ZGUgInZpc2libGVfdW5pdHMuaCIK
KworbmFtZXNwYWNlIFdlYkNvcmUgeworCit1c2luZyBuYW1lc3BhY2Ugc3RkOwordXNpbmcgbmFt
ZXNwYWNlIFdURjsKKworI2lmIFVTRShBVVRPQ09SUkVDVElPTl9QQU5FTCkKKworc3RhdGljIGNv
bnN0IFZlY3RvcjxEb2N1bWVudE1hcmtlcjo6TWFya2VyVHlwZT4mIG1hcmtlclR5cGVzRm9yQXV0
b2NvcnJlY3Rpb24oKQoreworICAgIERFRklORV9TVEFUSUNfTE9DQUwoVmVjdG9yPERvY3VtZW50
TWFya2VyOjpNYXJrZXJUeXBlPiwgbWFya2VyVHlwZXNGb3JBdXRvQ29ycmVjdGlvbiwgKCkpOwor
ICAgIGlmIChtYXJrZXJUeXBlc0ZvckF1dG9Db3JyZWN0aW9uLmlzRW1wdHkoKSkgeworICAgICAg
ICBtYXJrZXJUeXBlc0ZvckF1dG9Db3JyZWN0aW9uLmFwcGVuZChEb2N1bWVudE1hcmtlcjo6UmVw
bGFjZW1lbnQpOworICAgICAgICBtYXJrZXJUeXBlc0ZvckF1dG9Db3JyZWN0aW9uLmFwcGVuZChE
b2N1bWVudE1hcmtlcjo6Q29ycmVjdGlvbkluZGljYXRvcik7CisgICAgICAgIG1hcmtlclR5cGVz
Rm9yQXV0b0NvcnJlY3Rpb24uYXBwZW5kKERvY3VtZW50TWFya2VyOjpTcGVsbENoZWNraW5nRXhl
bXB0aW9uKTsKKyAgICAgICAgbWFya2VyVHlwZXNGb3JBdXRvQ29ycmVjdGlvbi5hcHBlbmQoRG9j
dW1lbnRNYXJrZXI6OkF1dG9jb3JyZWN0ZWQpOworICAgIH0KKyAgICByZXR1cm4gbWFya2VyVHlw
ZXNGb3JBdXRvQ29ycmVjdGlvbjsKK30KKworc3RhdGljIGNvbnN0IFZlY3RvcjxEb2N1bWVudE1h
cmtlcjo6TWFya2VyVHlwZT4mIG1hcmtlclR5cGVzRm9yUmVwbGFjZW1lbnQoKQoreworICAgIERF
RklORV9TVEFUSUNfTE9DQUwoVmVjdG9yPERvY3VtZW50TWFya2VyOjpNYXJrZXJUeXBlPiwgbWFy
a2VyVHlwZXNGb3JSZXBsYWNlbWVudCwgKCkpOworICAgIGlmIChtYXJrZXJUeXBlc0ZvclJlcGxh
Y2VtZW50LmlzRW1wdHkoKSkgeworICAgICAgICBtYXJrZXJUeXBlc0ZvclJlcGxhY2VtZW50LmFw
cGVuZChEb2N1bWVudE1hcmtlcjo6UmVwbGFjZW1lbnQpOworICAgICAgICBtYXJrZXJUeXBlc0Zv
clJlcGxhY2VtZW50LmFwcGVuZChEb2N1bWVudE1hcmtlcjo6U3BlbGxDaGVja2luZ0V4ZW1wdGlv
bik7CisgICAgfQorICAgIHJldHVybiBtYXJrZXJUeXBlc0ZvclJlcGxhY2VtZW50OworfQorCitz
dGF0aWMgYm9vbCBtYXJrZXJzSGF2ZUlkZW50aWNhbERlc2NyaXB0aW9uKGNvbnN0IFZlY3RvcjxE
b2N1bWVudE1hcmtlcio+JiBtYXJrZXJzKQoreworICAgIGlmIChtYXJrZXJzLmlzRW1wdHkoKSkK
KyAgICAgICAgcmV0dXJuIHRydWU7CisKKyAgICBjb25zdCBTdHJpbmcmIGRlc2NyaXB0aW9uID0g
bWFya2Vyc1swXS0+ZGVzY3JpcHRpb24oKTsKKyAgICBmb3IgKHNpemVfdCBpID0gMTsgaSA8IG1h
cmtlcnMuc2l6ZSgpOyArK2kpIHsKKyAgICAgICAgaWYgKGRlc2NyaXB0aW9uICE9IG1hcmtlcnNb
aV0tPmRlc2NyaXB0aW9uKCkpCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorICAg
IHJldHVybiB0cnVlOworfQorCitTcGVsbGluZ0NvcnJlY3Rpb25Db250cm9sbGVyOjpTcGVsbGlu
Z0NvcnJlY3Rpb25Db250cm9sbGVyKEZyYW1lKiBmcmFtZSkKKyAgICA6IG1fZnJhbWUoZnJhbWUp
CisgICAgLCBtX2NvcnJlY3Rpb25QYW5lbFRpbWVyKHRoaXMsICZTcGVsbGluZ0NvcnJlY3Rpb25D
b250cm9sbGVyOjpjb3JyZWN0aW9uUGFuZWxUaW1lckZpcmVkKQoreworfQorCitTcGVsbGluZ0Nv
cnJlY3Rpb25Db250cm9sbGVyOjp+U3BlbGxpbmdDb3JyZWN0aW9uQ29udHJvbGxlcigpCit7Cisg
ICAgZGlzbWlzcyhSZWFzb25Gb3JEaXNtaXNzaW5nQ29ycmVjdGlvblBhbmVsSWdub3JlZCk7Cit9
CisKK3ZvaWQgU3BlbGxpbmdDb3JyZWN0aW9uQ29udHJvbGxlcjo6c3RhcnRDb3JyZWN0aW9uUGFu
ZWxUaW1lcihDb3JyZWN0aW9uUGFuZWxJbmZvOjpQYW5lbFR5cGUgdHlwZSkKK3sKKyAgICBjb25z
dCBkb3VibGUgY29ycmVjdGlvblBhbmVsVGltZXJJbnRlcnZhbCA9IDAuMzsKKyAgICBpZiAoIWlz
QXV0b21hdGljU3BlbGxpbmdDb3JyZWN0aW9uRW5hYmxlZCgpKQorICAgICAgICByZXR1cm47CisK
KyAgICAvLyBJZiB0eXBlIGlzIFBhbmVsVHlwZVJldmVyc2lvbiwgdGhlbiB0aGUgbmV3IHJhbmdl
IGhhcyBiZWVuIHNldC4gU28gd2Ugc2hvdWxkbid0IGNsZWFyIGl0LgorICAgIGlmICh0eXBlID09
IENvcnJlY3Rpb25QYW5lbEluZm86OlBhbmVsVHlwZUNvcnJlY3Rpb24pCisgICAgICAgIG1fY29y
cmVjdGlvblBhbmVsSW5mby5yYW5nZVRvQmVSZXBsYWNlZC5jbGVhcigpOworICAgIG1fY29ycmVj
dGlvblBhbmVsSW5mby5wYW5lbFR5cGUgPSB0eXBlOworICAgIG1fY29ycmVjdGlvblBhbmVsVGlt
ZXIuc3RhcnRPbmVTaG90KGNvcnJlY3Rpb25QYW5lbFRpbWVySW50ZXJ2YWwpOworfQorCit2b2lk
IFNwZWxsaW5nQ29ycmVjdGlvbkNvbnRyb2xsZXI6OnN0b3BDb3JyZWN0aW9uUGFuZWxUaW1lcigp
Cit7CisgICAgbV9jb3JyZWN0aW9uUGFuZWxUaW1lci5zdG9wKCk7CisgICAgbV9jb3JyZWN0aW9u
UGFuZWxJbmZvLnJhbmdlVG9CZVJlcGxhY2VkLmNsZWFyKCk7Cit9CisKK3ZvaWQgU3BlbGxpbmdD
b3JyZWN0aW9uQ29udHJvbGxlcjo6c3RvcFBlbmRpbmdDb3JyZWN0aW9uKGNvbnN0IFZpc2libGVT
ZWxlY3Rpb24mIG9sZFNlbGVjdGlvbikKK3sKKyAgICAvLyBNYWtlIHN1cmUgdGhlcmUncyBubyBw
ZW5kaW5nIGF1dG9jb3JyZWN0aW9uIGJlZm9yZSB3ZSBjYWxsIG1hcmtNaXNzcGVsbGluZ3NBbmRC
YWRHcmFtbWFyKCkgYmVsb3cuCisgICAgVmlzaWJsZVNlbGVjdGlvbiBjdXJyZW50U2VsZWN0aW9u
KG1fZnJhbWUtPnNlbGVjdGlvbigpLT5zZWxlY3Rpb24oKSk7CisgICAgaWYgKGN1cnJlbnRTZWxl
Y3Rpb24gPT0gb2xkU2VsZWN0aW9uKQorICAgICAgICByZXR1cm47CisKKyAgICBzdG9wQ29ycmVj
dGlvblBhbmVsVGltZXIoKTsKKyAgICBkaXNtaXNzKFJlYXNvbkZvckRpc21pc3NpbmdDb3JyZWN0
aW9uUGFuZWxJZ25vcmVkKTsKK30KKwordm9pZCBTcGVsbGluZ0NvcnJlY3Rpb25Db250cm9sbGVy
OjphcHBseVBlbmRpbmdDb3JyZWN0aW9uKGNvbnN0IFZpc2libGVTZWxlY3Rpb24mIHNlbGVjdGlv
bkFmdGVyVHlwaW5nKQoreworICAgIC8vIEFwcGx5IHBlbmRpbmcgYXV0b2NvcnJlY3Rpb24gYmVm
b3JlIG5leHQgcm91bmQgb2Ygc3BlbGwgY2hlY2tpbmcuCisgICAgYm9vbCBkb0FwcGx5Q29ycmVj
dGlvbiA9IHRydWU7CisgICAgVmlzaWJsZVBvc2l0aW9uIHN0YXJ0T2ZTZWxlY3Rpb24gPSBzZWxl
Y3Rpb25BZnRlclR5cGluZy52aXNpYmxlU3RhcnQoKTsKKyAgICBWaXNpYmxlU2VsZWN0aW9uIGN1
cnJlbnRXb3JkID0gVmlzaWJsZVNlbGVjdGlvbihzdGFydE9mV29yZChzdGFydE9mU2VsZWN0aW9u
LCBMZWZ0V29yZElmT25Cb3VuZGFyeSksIGVuZE9mV29yZChzdGFydE9mU2VsZWN0aW9uLCBSaWdo
dFdvcmRJZk9uQm91bmRhcnkpKTsKKyAgICBpZiAoY3VycmVudFdvcmQudmlzaWJsZUVuZCgpID09
IHN0YXJ0T2ZTZWxlY3Rpb24pIHsKKyAgICAgICAgU3RyaW5nIHdvcmRUZXh0ID0gcGxhaW5UZXh0
KGN1cnJlbnRXb3JkLnRvTm9ybWFsaXplZFJhbmdlKCkuZ2V0KCkpOworICAgICAgICBpZiAod29y
ZFRleHQubGVuZ3RoKCkgPiAwICYmIGlzQW1iaWd1b3VzQm91bmRhcnlDaGFyYWN0ZXIod29yZFRl
eHRbd29yZFRleHQubGVuZ3RoKCkgLSAxXSkpCisgICAgICAgICAgICBkb0FwcGx5Q29ycmVjdGlv
biA9IGZhbHNlOworICAgIH0KKyAgICBpZiAoZG9BcHBseUNvcnJlY3Rpb24pCisgICAgICAgIGhh
bmRsZUNvcnJlY3Rpb25QYW5lbFJlc3VsdChkaXNtaXNzU29vbihSZWFzb25Gb3JEaXNtaXNzaW5n
Q29ycmVjdGlvblBhbmVsQWNjZXB0ZWQpKTsgCisgICAgZWxzZQorICAgICAgICBtX2NvcnJlY3Rp
b25QYW5lbEluZm8ucmFuZ2VUb0JlUmVwbGFjZWQuY2xlYXIoKTsKK30KKworYm9vbCBTcGVsbGlu
Z0NvcnJlY3Rpb25Db250cm9sbGVyOjpoYXNQZW5kaW5nQ29ycmVjdGlvbigpIGNvbnN0Cit7Cisg
ICAgcmV0dXJuIG1fY29ycmVjdGlvblBhbmVsSW5mby5yYW5nZVRvQmVSZXBsYWNlZDsKK30KKwor
Ym9vbCBTcGVsbGluZ0NvcnJlY3Rpb25Db250cm9sbGVyOjppc1NwZWxsaW5nTWFya2VyQWxsb3dl
ZChQYXNzUmVmUHRyPFJhbmdlPiBtaXNzcGVsbGluZ1JhbmdlKSBjb25zdAoreworICAgIHJldHVy
biAhbV9mcmFtZS0+ZG9jdW1lbnQoKS0+bWFya2VycygpLT5oYXNNYXJrZXJzKG1pc3NwZWxsaW5n
UmFuZ2UuZ2V0KCksIERvY3VtZW50TWFya2VyOjpTcGVsbENoZWNraW5nRXhlbXB0aW9uKTsKK30K
Kwordm9pZCBTcGVsbGluZ0NvcnJlY3Rpb25Db250cm9sbGVyOjpzaG93KFBhc3NSZWZQdHI8UmFu
Z2U+IHJhbmdlVG9SZXBsYWNlLCBjb25zdCBTdHJpbmcmIHJlcGxhY2VtZW50KQoreworICAgIEZs
b2F0UmVjdCBib3VuZGluZ0JveCA9IHJvb3RWaWV3UmVjdEZvclJhbmdlKHJhbmdlVG9SZXBsYWNl
LmdldCgpKTsKKyAgICBpZiAoYm91bmRpbmdCb3guaXNFbXB0eSgpKQorICAgICAgICByZXR1cm47
CisgICAgbV9jb3JyZWN0aW9uUGFuZWxJbmZvLnJlcGxhY2VkU3RyaW5nID0gcGxhaW5UZXh0KHJh
bmdlVG9SZXBsYWNlLmdldCgpKTsKKyAgICBtX2NvcnJlY3Rpb25QYW5lbEluZm8ucmFuZ2VUb0Jl
UmVwbGFjZWQgPSByYW5nZVRvUmVwbGFjZTsKKyAgICBtX2NvcnJlY3Rpb25QYW5lbEluZm8ucmVw
bGFjZW1lbnRTdHJpbmcgPSByZXBsYWNlbWVudDsKKyAgICBtX2NvcnJlY3Rpb25QYW5lbEluZm8u
aXNBY3RpdmUgPSB0cnVlOworICAgIGNsaWVudCgpLT5zaG93Q29ycmVjdGlvblBhbmVsKG1fY29y
cmVjdGlvblBhbmVsSW5mby5wYW5lbFR5cGUsIGJvdW5kaW5nQm94LCBtX2NvcnJlY3Rpb25QYW5l
bEluZm8ucmVwbGFjZWRTdHJpbmcsIHJlcGxhY2VtZW50LCBWZWN0b3I8U3RyaW5nPigpKTsKK30K
Kwordm9pZCBTcGVsbGluZ0NvcnJlY3Rpb25Db250cm9sbGVyOjpoYW5kbGVDYW5jZWxPcGVyYXRp
b24oKQoreworICAgIGlmICghbV9jb3JyZWN0aW9uUGFuZWxJbmZvLmlzQWN0aXZlKQorICAgICAg
ICByZXR1cm47CisgICAgbV9jb3JyZWN0aW9uUGFuZWxJbmZvLmlzQWN0aXZlID0gZmFsc2U7Cisg
ICAgZGlzbWlzcyhSZWFzb25Gb3JEaXNtaXNzaW5nQ29ycmVjdGlvblBhbmVsQ2FuY2VsbGVkKTsK
K30KKwordm9pZCBTcGVsbGluZ0NvcnJlY3Rpb25Db250cm9sbGVyOjpkaXNtaXNzKFJlYXNvbkZv
ckRpc21pc3NpbmdDb3JyZWN0aW9uUGFuZWwgcmVhc29uRm9yRGlzbWlzc2luZykKK3sKKyAgICBp
ZiAoIW1fY29ycmVjdGlvblBhbmVsSW5mby5pc0FjdGl2ZSkKKyAgICAgICAgcmV0dXJuOworICAg
IG1fY29ycmVjdGlvblBhbmVsSW5mby5pc0FjdGl2ZSA9IGZhbHNlOworICAgIG1fY29ycmVjdGlv
blBhbmVsSXNEaXNtaXNzZWRCeUVkaXRvciA9IHRydWU7CisgICAgaWYgKGNsaWVudCgpKQorICAg
ICAgICBjbGllbnQoKS0+ZGlzbWlzc0NvcnJlY3Rpb25QYW5lbChyZWFzb25Gb3JEaXNtaXNzaW5n
KTsKK30KKworU3RyaW5nIFNwZWxsaW5nQ29ycmVjdGlvbkNvbnRyb2xsZXI6OmRpc21pc3NTb29u
KFJlYXNvbkZvckRpc21pc3NpbmdDb3JyZWN0aW9uUGFuZWwgcmVhc29uRm9yRGlzbWlzc2luZykK
K3sKKyAgICBpZiAoIW1fY29ycmVjdGlvblBhbmVsSW5mby5pc0FjdGl2ZSkKKyAgICAgICAgcmV0
dXJuIFN0cmluZygpOworICAgIG1fY29ycmVjdGlvblBhbmVsSW5mby5pc0FjdGl2ZSA9IGZhbHNl
OworICAgIG1fY29ycmVjdGlvblBhbmVsSXNEaXNtaXNzZWRCeUVkaXRvciA9IHRydWU7CisgICAg
aWYgKCFjbGllbnQoKSkKKyAgICAgICAgcmV0dXJuIFN0cmluZygpOworICAgIHJldHVybiBjbGll
bnQoKS0+ZGlzbWlzc0NvcnJlY3Rpb25QYW5lbFNvb24ocmVhc29uRm9yRGlzbWlzc2luZyk7Cit9
CisKK3ZvaWQgU3BlbGxpbmdDb3JyZWN0aW9uQ29udHJvbGxlcjo6YXBwbHlDb3JyZWN0aW9uUGFu
ZWxJbmZvKGNvbnN0IFZlY3RvcjxEb2N1bWVudE1hcmtlcjo6TWFya2VyVHlwZT4mIG1hcmtlclR5
cGVzVG9BZGQpCit7CisgICAgaWYgKCFtX2NvcnJlY3Rpb25QYW5lbEluZm8ucmFuZ2VUb0JlUmVw
bGFjZWQpCisgICAgICAgIHJldHVybjsKKworICAgIEV4Y2VwdGlvbkNvZGUgZWMgPSAwOworICAg
IFJlZlB0cjxSYW5nZT4gcGFyYWdyYXBoUmFuZ2VDb250YWluaW5nQ29ycmVjdGlvbiA9IG1fY29y
cmVjdGlvblBhbmVsSW5mby5yYW5nZVRvQmVSZXBsYWNlZC0+Y2xvbmVSYW5nZShlYyk7CisgICAg
aWYgKGVjKQorICAgICAgICByZXR1cm47CisKKyAgICBzZXRTdGFydChwYXJhZ3JhcGhSYW5nZUNv
bnRhaW5pbmdDb3JyZWN0aW9uLmdldCgpLCBzdGFydE9mUGFyYWdyYXBoKG1fY29ycmVjdGlvblBh
bmVsSW5mby5yYW5nZVRvQmVSZXBsYWNlZC0+c3RhcnRQb3NpdGlvbigpKSk7CisgICAgc2V0RW5k
KHBhcmFncmFwaFJhbmdlQ29udGFpbmluZ0NvcnJlY3Rpb24uZ2V0KCksIGVuZE9mUGFyYWdyYXBo
KG1fY29ycmVjdGlvblBhbmVsSW5mby5yYW5nZVRvQmVSZXBsYWNlZC0+ZW5kUG9zaXRpb24oKSkp
OworCisgICAgLy8gQWZ0ZXIgd2UgcmVwbGFjZSB0aGUgd29yZCBhdCByYW5nZSByYW5nZVRvQmVS
ZXBsYWNlZCwgd2UgbmVlZCB0byBhZGQgbWFya2VycyB0byB0aGF0IHJhbmdlLgorICAgIC8vIEhv
d2V2ZXIsIG9uY2UgdGhlIHJlcGxhY2VtZW50IHRvb2sgcGxhY2UsIHRoZSB2YWx1ZSBvZiByYW5n
ZVRvQmVSZXBsYWNlZCBpcyBub3QgdmFsaWQgYW55bW9yZS4KKyAgICAvLyBTbyBiZWZvcmUgd2Ug
Y2Fycnkgb3V0IHRoZSByZXBsYWNlbWVudCwgd2UgbmVlZCB0byBzdG9yZSB0aGUgc3RhcnQgcG9z
aXRpb24gb2YgcmFuZ2VUb0JlUmVwbGFjZWQKKyAgICAvLyByZWxhdGl2ZSB0byB0aGUgc3RhcnQg
cG9zaXRpb24gb2YgdGhlIGNvbnRhaW5pbmcgcGFyYWdyYXBoLiBXZSB1c2UgY29ycmVjdGlvblN0
YXJ0T2Zmc2V0SW5QYXJhZ3JhcGgKKyAgICAvLyB0byBzdG9yZSB0aGlzIHZhbHVlLiBJbiBvcmRl
ciB0byBvYnRhaW4gdGhpcyBvZmZzZXQsIHdlIG5lZWQgdG8gZmlyc3QgY3JlYXRlIGEgcmFuZ2UK
KyAgICAvLyB3aGljaCBzcGFucyBmcm9tIHRoZSBzdGFydCBvZiBwYXJhZ3JhcGggdG8gdGhlIHN0
YXJ0IHBvc2l0aW9uIG9mIHJhbmdlVG9CZVJlcGxhY2VkLgorICAgIFJlZlB0cjxSYW5nZT4gY29y
cmVjdGlvblN0YXJ0T2Zmc2V0SW5QYXJhZ3JhcGhBc1JhbmdlID0gUmFuZ2U6OmNyZWF0ZShwYXJh
Z3JhcGhSYW5nZUNvbnRhaW5pbmdDb3JyZWN0aW9uLT5zdGFydENvbnRhaW5lcihlYyktPmRvY3Vt
ZW50KCksIHBhcmFncmFwaFJhbmdlQ29udGFpbmluZ0NvcnJlY3Rpb24tPnN0YXJ0UG9zaXRpb24o
KSwgcGFyYWdyYXBoUmFuZ2VDb250YWluaW5nQ29ycmVjdGlvbi0+c3RhcnRQb3NpdGlvbigpKTsK
KyAgICBpZiAoZWMpCisgICAgICAgIHJldHVybjsKKworICAgIFBvc2l0aW9uIHN0YXJ0UG9zaXRp
b25PZlJhbmdlVG9CZVJlcGxhY2VkID0gbV9jb3JyZWN0aW9uUGFuZWxJbmZvLnJhbmdlVG9CZVJl
cGxhY2VkLT5zdGFydFBvc2l0aW9uKCk7CisgICAgY29ycmVjdGlvblN0YXJ0T2Zmc2V0SW5QYXJh
Z3JhcGhBc1JhbmdlLT5zZXRFbmQoc3RhcnRQb3NpdGlvbk9mUmFuZ2VUb0JlUmVwbGFjZWQuY29u
dGFpbmVyTm9kZSgpLCBzdGFydFBvc2l0aW9uT2ZSYW5nZVRvQmVSZXBsYWNlZC5jb21wdXRlT2Zm
c2V0SW5Db250YWluZXJOb2RlKCksIGVjKTsKKyAgICBpZiAoZWMpCisgICAgICAgIHJldHVybjsK
KworICAgIC8vIFRha2Ugbm90ZSBvZiB0aGUgbG9jYXRpb24gb2YgYXV0b2NvcnJlY3Rpb24gc28g
dGhhdCB3ZSBjYW4gYWRkIG1hcmtlciBhZnRlciB0aGUgcmVwbGFjZW1lbnQgdG9vayBwbGFjZS4K
KyAgICBpbnQgY29ycmVjdGlvblN0YXJ0T2Zmc2V0SW5QYXJhZ3JhcGggPSBUZXh0SXRlcmF0b3I6
OnJhbmdlTGVuZ3RoKGNvcnJlY3Rpb25TdGFydE9mZnNldEluUGFyYWdyYXBoQXNSYW5nZS5nZXQo
KSk7CisKKyAgICAvLyBDbG9uZSB0aGUgcmFuZ2UsIHNpbmNlIHRoZSBjYWxsZXIgb2YgdGhpcyBt
ZXRob2QgbWF5IHdhbnQgdG8ga2VlcCB0aGUgb3JpZ2luYWwgcmFuZ2UgYXJvdW5kLgorICAgIFJl
ZlB0cjxSYW5nZT4gcmFuZ2VUb0JlUmVwbGFjZWQgPSBtX2NvcnJlY3Rpb25QYW5lbEluZm8ucmFu
Z2VUb0JlUmVwbGFjZWQtPmNsb25lUmFuZ2UoZWMpOworICAgIGFwcGx5Q29tbWFuZChTcGVsbGlu
Z0NvcnJlY3Rpb25Db21tYW5kOjpjcmVhdGUocmFuZ2VUb0JlUmVwbGFjZWQsIG1fY29ycmVjdGlv
blBhbmVsSW5mby5yZXBsYWNlbWVudFN0cmluZykpOworICAgIHNldEVuZChwYXJhZ3JhcGhSYW5n
ZUNvbnRhaW5pbmdDb3JyZWN0aW9uLmdldCgpLCBtX2ZyYW1lLT5zZWxlY3Rpb24oKS0+c2VsZWN0
aW9uKCkuc3RhcnQoKSk7CisgICAgUmVmUHRyPFJhbmdlPiByZXBsYWNlbWVudFJhbmdlID0gVGV4
dEl0ZXJhdG9yOjpzdWJyYW5nZShwYXJhZ3JhcGhSYW5nZUNvbnRhaW5pbmdDb3JyZWN0aW9uLmdl
dCgpLCBjb3JyZWN0aW9uU3RhcnRPZmZzZXRJblBhcmFncmFwaCwgIG1fY29ycmVjdGlvblBhbmVs
SW5mby5yZXBsYWNlbWVudFN0cmluZy5sZW5ndGgoKSk7CisgICAgU3RyaW5nIG5ld1RleHQgPSBw
bGFpblRleHQocmVwbGFjZW1lbnRSYW5nZS5nZXQoKSk7CisKKyAgICAvLyBDaGVjayB0byBzZWUg
aWYgcmVwbGFjZW1lbnQgc3VjY2VlZGVkLgorICAgIGlmIChuZXdUZXh0ICE9IG1fY29ycmVjdGlv
blBhbmVsSW5mby5yZXBsYWNlbWVudFN0cmluZykKKyAgICAgICAgcmV0dXJuOworCisgICAgRG9j
dW1lbnRNYXJrZXJDb250cm9sbGVyKiBtYXJrZXJzID0gcmVwbGFjZW1lbnRSYW5nZS0+c3RhcnRD
b250YWluZXIoKS0+ZG9jdW1lbnQoKS0+bWFya2VycygpOworICAgIHNpemVfdCBzaXplID0gbWFy
a2VyVHlwZXNUb0FkZC5zaXplKCk7CisgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBzaXplOyAr
K2kpIHsKKyAgICAgICAgRG9jdW1lbnRNYXJrZXI6Ok1hcmtlclR5cGUgbWFya2VyVHlwZSA9IG1h
cmtlclR5cGVzVG9BZGRbaV07CisgICAgICAgIFN0cmluZyBkZXNjcmlwdGlvbjsKKyAgICAgICAg
aWYgKG1fY29ycmVjdGlvblBhbmVsSW5mby5wYW5lbFR5cGUgIT0gQ29ycmVjdGlvblBhbmVsSW5m
bzo6UGFuZWxUeXBlUmV2ZXJzaW9uICYmIChtYXJrZXJUeXBlID09IERvY3VtZW50TWFya2VyOjpS
ZXBsYWNlbWVudCB8fCBtYXJrZXJUeXBlID09IERvY3VtZW50TWFya2VyOjpBdXRvY29ycmVjdGVk
KSkKKyAgICAgICAgICAgIGRlc2NyaXB0aW9uID0gbV9jb3JyZWN0aW9uUGFuZWxJbmZvLnJlcGxh
Y2VkU3RyaW5nOworICAgICAgICBtYXJrZXJzLT5hZGRNYXJrZXIocmVwbGFjZW1lbnRSYW5nZS5n
ZXQoKSwgbWFya2VyVHlwZSwgZGVzY3JpcHRpb24pOworICAgIH0KK30KKworYm9vbCBTcGVsbGlu
Z0NvcnJlY3Rpb25Db250cm9sbGVyOjphcHBseUF1dG9jb3JyZWN0aW9uQmVmb3JlVHlwaW5nSWZB
cHByb3ByaWF0ZSgpCit7CisgICAgaWYgKCFtX2NvcnJlY3Rpb25QYW5lbEluZm8ucmFuZ2VUb0Jl
UmVwbGFjZWQgfHwgIW1fY29ycmVjdGlvblBhbmVsSW5mby5pc0FjdGl2ZSkKKyAgICAgICAgcmV0
dXJuIGZhbHNlOworCisgICAgaWYgKG1fY29ycmVjdGlvblBhbmVsSW5mby5wYW5lbFR5cGUgIT0g
Q29ycmVjdGlvblBhbmVsSW5mbzo6UGFuZWxUeXBlQ29ycmVjdGlvbikKKyAgICAgICAgcmV0dXJu
IGZhbHNlOworCisgICAgUG9zaXRpb24gY2FyZXRQb3NpdGlvbiA9IG1fZnJhbWUtPnNlbGVjdGlv
bigpLT5zZWxlY3Rpb24oKS5zdGFydCgpOworCisgICAgaWYgKG1fY29ycmVjdGlvblBhbmVsSW5m
by5yYW5nZVRvQmVSZXBsYWNlZC0+ZW5kUG9zaXRpb24oKSA9PSBjYXJldFBvc2l0aW9uKSB7Cisg
ICAgICAgIGhhbmRsZUNvcnJlY3Rpb25QYW5lbFJlc3VsdChkaXNtaXNzU29vbihSZWFzb25Gb3JE
aXNtaXNzaW5nQ29ycmVjdGlvblBhbmVsQWNjZXB0ZWQpKTsKKyAgICAgICAgcmV0dXJuIHRydWU7
CisgICAgfSAKKyAgICAKKyAgICAvLyBQZW5kaW5nIGNvcnJlY3Rpb24gc2hvdWxkIGFsd2F5cyBi
ZSB3aGVyZSBjYXJldCBpcy4gQnV0IGluIGNhc2UgdGhpcyBpcyBub3QgYWx3YXlzIHRydWUsIHdl
IHN0aWxsIHdhbnQgdG8gZGlzbWlzcyB0aGUgcGFuZWwgd2l0aG91dCBhY2NlcHRpbmcgdGhlIGNv
cnJlY3Rpb24uCisgICAgQVNTRVJUKG1fY29ycmVjdGlvblBhbmVsSW5mby5yYW5nZVRvQmVSZXBs
YWNlZC0+ZW5kUG9zaXRpb24oKSA9PSBjYXJldFBvc2l0aW9uKTsKKyAgICBkaXNtaXNzKFJlYXNv
bkZvckRpc21pc3NpbmdDb3JyZWN0aW9uUGFuZWxJZ25vcmVkKTsKKyAgICByZXR1cm4gZmFsc2U7
Cit9CisKK3ZvaWQgU3BlbGxpbmdDb3JyZWN0aW9uQ29udHJvbGxlcjo6cmVzcG9uZFRvVW5hcHBs
aWVkU3BlbGxDb3JyZWN0aW9uKGNvbnN0IFZpc2libGVTZWxlY3Rpb24mIHNlbGVjdGlvbk9mQ29y
cmVjdGVkLCBjb25zdCBTdHJpbmcmIGNvcnJlY3RlZCwgY29uc3QgU3RyaW5nJiBjb3JyZWN0aW9u
KQoreworICAgIGNsaWVudCgpLT5yZWNvcmRBdXRvY29ycmVjdGlvblJlc3BvbnNlKEVkaXRvckNs
aWVudDo6QXV0b2NvcnJlY3Rpb25SZXZlcnRlZCwgY29ycmVjdGVkLCBjb3JyZWN0aW9uKTsKKyAg
ICBtX2ZyYW1lLT5kb2N1bWVudCgpLT51cGRhdGVMYXlvdXQoKTsKKyAgICBtX2ZyYW1lLT5zZWxl
Y3Rpb24oKS0+c2V0U2VsZWN0aW9uKHNlbGVjdGlvbk9mQ29ycmVjdGVkLCBGcmFtZVNlbGVjdGlv
bjo6Q2xvc2VUeXBpbmcgfCBGcmFtZVNlbGVjdGlvbjo6Q2xlYXJUeXBpbmdTdHlsZSB8IEZyYW1l
U2VsZWN0aW9uOjpTcGVsbENvcnJlY3Rpb25UcmlnZ2VyZWQpOworICAgIFJlZlB0cjxSYW5nZT4g
cmFuZ2UgPSBSYW5nZTo6Y3JlYXRlKG1fZnJhbWUtPmRvY3VtZW50KCksIG1fZnJhbWUtPnNlbGVj
dGlvbigpLT5zZWxlY3Rpb24oKS5zdGFydCgpLCBtX2ZyYW1lLT5zZWxlY3Rpb24oKS0+c2VsZWN0
aW9uKCkuZW5kKCkpOworCisgICAgRG9jdW1lbnRNYXJrZXJDb250cm9sbGVyKiBtYXJrZXJzID0g
bV9mcmFtZS0+ZG9jdW1lbnQoKS0+bWFya2VycygpOworICAgIG1hcmtlcnMtPnJlbW92ZU1hcmtl
cnMocmFuZ2UuZ2V0KCksIERvY3VtZW50TWFya2VyOjpTcGVsbGluZyB8IERvY3VtZW50TWFya2Vy
OjpBdXRvY29ycmVjdGVkLCBEb2N1bWVudE1hcmtlckNvbnRyb2xsZXI6OlJlbW92ZVBhcnRpYWxs
eU92ZXJsYXBwaW5nTWFya2VyKTsKKyAgICBtYXJrZXJzLT5hZGRNYXJrZXIocmFuZ2UuZ2V0KCks
IERvY3VtZW50TWFya2VyOjpSZXBsYWNlbWVudCk7CisgICAgbWFya2Vycy0+YWRkTWFya2VyKHJh
bmdlLmdldCgpLCBEb2N1bWVudE1hcmtlcjo6U3BlbGxDaGVja2luZ0V4ZW1wdGlvbik7Cit9CisK
K3ZvaWQgU3BlbGxpbmdDb3JyZWN0aW9uQ29udHJvbGxlcjo6Y29ycmVjdGlvblBhbmVsVGltZXJG
aXJlZChUaW1lcjxTcGVsbGluZ0NvcnJlY3Rpb25Db250cm9sbGVyPiopCit7CisgICAgbV9jb3Jy
ZWN0aW9uUGFuZWxJc0Rpc21pc3NlZEJ5RWRpdG9yID0gZmFsc2U7CisgICAgc3dpdGNoIChtX2Nv
cnJlY3Rpb25QYW5lbEluZm8ucGFuZWxUeXBlKSB7CisgICAgY2FzZSBDb3JyZWN0aW9uUGFuZWxJ
bmZvOjpQYW5lbFR5cGVDb3JyZWN0aW9uOiB7CisgICAgICAgIFZpc2libGVTZWxlY3Rpb24gc2Vs
ZWN0aW9uKG1fZnJhbWUtPnNlbGVjdGlvbigpLT5zZWxlY3Rpb24oKSk7CisgICAgICAgIFZpc2li
bGVQb3NpdGlvbiBzdGFydChzZWxlY3Rpb24uc3RhcnQoKSwgc2VsZWN0aW9uLmFmZmluaXR5KCkp
OworICAgICAgICBWaXNpYmxlUG9zaXRpb24gcCA9IHN0YXJ0T2ZXb3JkKHN0YXJ0LCBMZWZ0V29y
ZElmT25Cb3VuZGFyeSk7CisgICAgICAgIFZpc2libGVTZWxlY3Rpb24gYWRqYWNlbnRXb3JkcyA9
IFZpc2libGVTZWxlY3Rpb24ocCwgc3RhcnQpOworICAgICAgICBtX2ZyYW1lLT5lZGl0b3IoKS0+
bWFya0FsbE1pc3NwZWxsaW5nc0FuZEJhZEdyYW1tYXJJblJhbmdlcyhUZXh0Q2hlY2tpbmdUeXBl
U3BlbGxpbmcgfCBUZXh0Q2hlY2tpbmdUeXBlU2hvd0NvcnJlY3Rpb25QYW5lbCwgYWRqYWNlbnRX
b3Jkcy50b05vcm1hbGl6ZWRSYW5nZSgpLmdldCgpLCAwKTsKKyAgICB9CisgICAgICAgIGJyZWFr
OworICAgIGNhc2UgQ29ycmVjdGlvblBhbmVsSW5mbzo6UGFuZWxUeXBlUmV2ZXJzaW9uOiB7Cisg
ICAgICAgIGlmICghbV9jb3JyZWN0aW9uUGFuZWxJbmZvLnJhbmdlVG9CZVJlcGxhY2VkKQorICAg
ICAgICAgICAgYnJlYWs7CisgICAgICAgIG1fY29ycmVjdGlvblBhbmVsSW5mby5pc0FjdGl2ZSA9
IHRydWU7CisgICAgICAgIG1fY29ycmVjdGlvblBhbmVsSW5mby5yZXBsYWNlZFN0cmluZyA9IHBs
YWluVGV4dChtX2NvcnJlY3Rpb25QYW5lbEluZm8ucmFuZ2VUb0JlUmVwbGFjZWQuZ2V0KCkpOwor
ICAgICAgICBGbG9hdFJlY3QgYm91bmRpbmdCb3ggPSByb290Vmlld1JlY3RGb3JSYW5nZShtX2Nv
cnJlY3Rpb25QYW5lbEluZm8ucmFuZ2VUb0JlUmVwbGFjZWQuZ2V0KCkpOworICAgICAgICBpZiAo
IWJvdW5kaW5nQm94LmlzRW1wdHkoKSkKKyAgICAgICAgICAgIGNsaWVudCgpLT5zaG93Q29ycmVj
dGlvblBhbmVsKG1fY29ycmVjdGlvblBhbmVsSW5mby5wYW5lbFR5cGUsIGJvdW5kaW5nQm94LCBt
X2NvcnJlY3Rpb25QYW5lbEluZm8ucmVwbGFjZWRTdHJpbmcsIG1fY29ycmVjdGlvblBhbmVsSW5m
by5yZXBsYWNlbWVudFN0cmluZywgVmVjdG9yPFN0cmluZz4oKSk7CisgICAgfQorICAgICAgICBi
cmVhazsKKyAgICBjYXNlIENvcnJlY3Rpb25QYW5lbEluZm86OlBhbmVsVHlwZVNwZWxsaW5nU3Vn
Z2VzdGlvbnM6IHsKKyAgICAgICAgaWYgKCFtX2NvcnJlY3Rpb25QYW5lbEluZm8ucmFuZ2VUb0Jl
UmVwbGFjZWQgfHwgcGxhaW5UZXh0KG1fY29ycmVjdGlvblBhbmVsSW5mby5yYW5nZVRvQmVSZXBs
YWNlZC5nZXQoKSkgIT0gbV9jb3JyZWN0aW9uUGFuZWxJbmZvLnJlcGxhY2VkU3RyaW5nKQorICAg
ICAgICAgICAgYnJlYWs7CisgICAgICAgIFN0cmluZyBwYXJhZ3JhcGhUZXh0ID0gcGxhaW5UZXh0
KFRleHRDaGVja2luZ1BhcmFncmFwaChtX2NvcnJlY3Rpb25QYW5lbEluZm8ucmFuZ2VUb0JlUmVw
bGFjZWQpLnBhcmFncmFwaFJhbmdlKCkuZ2V0KCkpOworICAgICAgICBWZWN0b3I8U3RyaW5nPiBz
dWdnZXN0aW9uczsKKyAgICAgICAgdGV4dENoZWNrZXIoKS0+Z2V0R3Vlc3Nlc0ZvcldvcmQobV9j
b3JyZWN0aW9uUGFuZWxJbmZvLnJlcGxhY2VkU3RyaW5nLCBwYXJhZ3JhcGhUZXh0LCBzdWdnZXN0
aW9ucyk7CisgICAgICAgIGlmIChzdWdnZXN0aW9ucy5pc0VtcHR5KCkpIHsKKyAgICAgICAgICAg
IG1fY29ycmVjdGlvblBhbmVsSW5mby5yYW5nZVRvQmVSZXBsYWNlZC5jbGVhcigpOworICAgICAg
ICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAgICAgU3RyaW5nIHRvcFN1Z2dlc3Rpb24gPSBz
dWdnZXN0aW9ucy5maXJzdCgpOworICAgICAgICBzdWdnZXN0aW9ucy5yZW1vdmUoMCk7CisgICAg
ICAgIG1fY29ycmVjdGlvblBhbmVsSW5mby5pc0FjdGl2ZSA9IHRydWU7CisgICAgICAgIEZsb2F0
UmVjdCBib3VuZGluZ0JveCA9IHJvb3RWaWV3UmVjdEZvclJhbmdlKG1fY29ycmVjdGlvblBhbmVs
SW5mby5yYW5nZVRvQmVSZXBsYWNlZC5nZXQoKSk7CisgICAgICAgIGlmICghYm91bmRpbmdCb3gu
aXNFbXB0eSgpKQorICAgICAgICAgICAgY2xpZW50KCktPnNob3dDb3JyZWN0aW9uUGFuZWwobV9j
b3JyZWN0aW9uUGFuZWxJbmZvLnBhbmVsVHlwZSwgYm91bmRpbmdCb3gsIG1fY29ycmVjdGlvblBh
bmVsSW5mby5yZXBsYWNlZFN0cmluZywgdG9wU3VnZ2VzdGlvbiwgc3VnZ2VzdGlvbnMpOworICAg
IH0KKyAgICAgICAgYnJlYWs7CisgICAgfQorfQorCit2b2lkIFNwZWxsaW5nQ29ycmVjdGlvbkNv
bnRyb2xsZXI6OmhhbmRsZUNvcnJlY3Rpb25QYW5lbFJlc3VsdChjb25zdCBTdHJpbmcmIGNvcnJl
Y3Rpb24pCit7CisgICAgUmFuZ2UqIHJlcGxhY2VkUmFuZ2UgPSBtX2NvcnJlY3Rpb25QYW5lbElu
Zm8ucmFuZ2VUb0JlUmVwbGFjZWQuZ2V0KCk7CisgICAgaWYgKCFyZXBsYWNlZFJhbmdlIHx8IG1f
ZnJhbWUtPmRvY3VtZW50KCkgIT0gcmVwbGFjZWRSYW5nZS0+b3duZXJEb2N1bWVudCgpKQorICAg
ICAgICByZXR1cm47CisKKyAgICBTdHJpbmcgY3VycmVudFdvcmQgPSBwbGFpblRleHQobV9jb3Jy
ZWN0aW9uUGFuZWxJbmZvLnJhbmdlVG9CZVJlcGxhY2VkLmdldCgpKTsKKyAgICAvLyBDaGVjayB0
byBzZWUgaWYgdGhlIHdvcmQgd2UgYXJlIGFib3V0IHRvIGNvcnJlY3QgaGFzIGJlZW4gY2hhbmdl
ZCBiZXR3ZWVuIHRpbWVyIGZpcmluZyBhbmQgY2FsbGJhY2sgYmVpbmcgdHJpZ2dlcmVkLgorICAg
IGlmIChjdXJyZW50V29yZCAhPSBtX2NvcnJlY3Rpb25QYW5lbEluZm8ucmVwbGFjZWRTdHJpbmcp
CisgICAgICAgIHJldHVybjsKKworICAgIG1fY29ycmVjdGlvblBhbmVsSW5mby5pc0FjdGl2ZSA9
IGZhbHNlOworCisgICAgc3dpdGNoIChtX2NvcnJlY3Rpb25QYW5lbEluZm8ucGFuZWxUeXBlKSB7
CisgICAgY2FzZSBDb3JyZWN0aW9uUGFuZWxJbmZvOjpQYW5lbFR5cGVDb3JyZWN0aW9uOgorICAg
ICAgICBpZiAoY29ycmVjdGlvbi5sZW5ndGgoKSkgeworICAgICAgICAgICAgbV9jb3JyZWN0aW9u
UGFuZWxJbmZvLnJlcGxhY2VtZW50U3RyaW5nID0gY29ycmVjdGlvbjsKKyAgICAgICAgICAgIGFw
cGx5Q29ycmVjdGlvblBhbmVsSW5mbyhtYXJrZXJUeXBlc0ZvckF1dG9jb3JyZWN0aW9uKCkpOwor
ICAgICAgICB9IGVsc2UgaWYgKCFtX2NvcnJlY3Rpb25QYW5lbElzRGlzbWlzc2VkQnlFZGl0b3Ip
CisgICAgICAgICAgICByZXBsYWNlZFJhbmdlLT5zdGFydENvbnRhaW5lcigpLT5kb2N1bWVudCgp
LT5tYXJrZXJzKCktPmFkZE1hcmtlcihyZXBsYWNlZFJhbmdlLCBEb2N1bWVudE1hcmtlcjo6UmVq
ZWN0ZWRDb3JyZWN0aW9uLCBtX2NvcnJlY3Rpb25QYW5lbEluZm8ucmVwbGFjZWRTdHJpbmcpOwor
ICAgICAgICBicmVhazsKKyAgICBjYXNlIENvcnJlY3Rpb25QYW5lbEluZm86OlBhbmVsVHlwZVJl
dmVyc2lvbjoKKyAgICBjYXNlIENvcnJlY3Rpb25QYW5lbEluZm86OlBhbmVsVHlwZVNwZWxsaW5n
U3VnZ2VzdGlvbnM6CisgICAgICAgIGlmIChjb3JyZWN0aW9uLmxlbmd0aCgpKSB7CisgICAgICAg
ICAgICBtX2NvcnJlY3Rpb25QYW5lbEluZm8ucmVwbGFjZW1lbnRTdHJpbmcgPSBjb3JyZWN0aW9u
OworICAgICAgICAgICAgYXBwbHlDb3JyZWN0aW9uUGFuZWxJbmZvKG1hcmtlclR5cGVzRm9yUmVw
bGFjZW1lbnQoKSk7CisgICAgICAgIH0KKyAgICAgICAgYnJlYWs7CisgICAgfQorCisgICAgbV9j
b3JyZWN0aW9uUGFuZWxJbmZvLnJhbmdlVG9CZVJlcGxhY2VkLmNsZWFyKCk7Cit9CisKK2Jvb2wg
U3BlbGxpbmdDb3JyZWN0aW9uQ29udHJvbGxlcjo6aXNBdXRvbWF0aWNTcGVsbGluZ0NvcnJlY3Rp
b25FbmFibGVkKCkKK3sKKyAgICByZXR1cm4gY2xpZW50KCkgJiYgY2xpZW50KCktPmlzQXV0b21h
dGljU3BlbGxpbmdDb3JyZWN0aW9uRW5hYmxlZCgpOworfQorCitGbG9hdFJlY3QgU3BlbGxpbmdD
b3JyZWN0aW9uQ29udHJvbGxlcjo6cm9vdFZpZXdSZWN0Rm9yUmFuZ2UoY29uc3QgUmFuZ2UqIHJh
bmdlKSBjb25zdAoreworICAgIEZyYW1lVmlldyogdmlldyA9IG1fZnJhbWUtPnZpZXcoKTsKKyAg
ICBpZiAoIXZpZXcpCisgICAgICAgIHJldHVybiBGbG9hdFJlY3QoKTsKKyAgICBWZWN0b3I8Rmxv
YXRRdWFkPiB0ZXh0UXVhZHM7CisgICAgcmFuZ2UtPnRleHRRdWFkcyh0ZXh0UXVhZHMpOworICAg
IEZsb2F0UmVjdCBib3VuZGluZ1JlY3Q7CisgICAgc2l6ZV90IHNpemUgPSB0ZXh0UXVhZHMuc2l6
ZSgpOworICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgc2l6ZTsgKytpKQorICAgICAgICBib3Vu
ZGluZ1JlY3QudW5pdGUodGV4dFF1YWRzW2ldLmJvdW5kaW5nQm94KCkpOworICAgIHJldHVybiB2
aWV3LT5jb250ZW50c1RvUm9vdFZpZXcoSW50UmVjdChib3VuZGluZ1JlY3QpKTsKK30gICAgICAg
IAorCit2b2lkIFNwZWxsaW5nQ29ycmVjdGlvbkNvbnRyb2xsZXI6OnJlc3BvbmRUb0NoYW5nZWRT
ZWxlY3Rpb24oY29uc3QgVmlzaWJsZVNlbGVjdGlvbiYgb2xkU2VsZWN0aW9uKQoreworICAgIFZp
c2libGVTZWxlY3Rpb24gY3VycmVudFNlbGVjdGlvbihtX2ZyYW1lLT5zZWxlY3Rpb24oKS0+c2Vs
ZWN0aW9uKCkpOworICAgIC8vIFdoZW4gdXNlciBtb3ZlcyBjYXJldCB0byB0aGUgZW5kIG9mIGF1
dG9jb3JyZWN0ZWQgd29yZCBhbmQgcGF1c2VzLCB3ZSBzaG93IHRoZSBwYW5lbAorICAgIC8vIGNv
bnRhaW5pbmcgdGhlIG9yaWdpbmFsIHByZS1jb3JyZWN0aW9uIHdvcmQgc28gdGhhdCB1c2VyIGNh
biBxdWlja2x5IHJldmVydCB0aGUKKyAgICAvLyB1bmRlc2lyZWQgYXV0b2NvcnJlY3Rpb24uIEhl
cmUsIHdlIHN0YXJ0IGNvcnJlY3Rpb24gcGFuZWwgdGltZXIgb25jZSB3ZSBjb25maXJtIHRoYXQK
KyAgICAvLyB0aGUgbmV3IGNhcmV0IHBvc2l0aW9uIGlzIGF0IHRoZSBlbmQgb2YgYSB3b3JkLgor
ICAgIGlmICghY3VycmVudFNlbGVjdGlvbi5pc0NhcmV0KCkgfHwgY3VycmVudFNlbGVjdGlvbiA9
PSBvbGRTZWxlY3Rpb24pCisgICAgICAgIHJldHVybjsKKworICAgIFZpc2libGVQb3NpdGlvbiBz
ZWxlY3Rpb25Qb3NpdGlvbiA9IGN1cnJlbnRTZWxlY3Rpb24uc3RhcnQoKTsKKyAgICAKKyAgICAv
LyBDcmVhdGluZyBhIFZpc2libGUgcG9zaXRpb24gdHJpZ2dlcnMgYSBsYXlvdXQgYW5kIHRoZXJl
IGlzIG5vCisgICAgLy8gZ3VhcmFudGVlIHRoYXQgdGhlIHNlbGVjdGlvbiBpcyBzdGlsbCB2YWxp
ZC4KKyAgICBpZiAoc2VsZWN0aW9uUG9zaXRpb24uaXNOdWxsKCkpCisgICAgICAgIHJldHVybjsK
KyAgICAKKyAgICBWaXNpYmxlUG9zaXRpb24gZW5kUG9zaXRpb25PZldvcmQgPSBlbmRPZldvcmQo
c2VsZWN0aW9uUG9zaXRpb24sIExlZnRXb3JkSWZPbkJvdW5kYXJ5KTsKKyAgICBpZiAoc2VsZWN0
aW9uUG9zaXRpb24gIT0gZW5kUG9zaXRpb25PZldvcmQpCisgICAgICAgIHJldHVybjsKKworICAg
IFBvc2l0aW9uIHBvc2l0aW9uID0gZW5kUG9zaXRpb25PZldvcmQuZGVlcEVxdWl2YWxlbnQoKTsK
KyAgICBpZiAocG9zaXRpb24uYW5jaG9yVHlwZSgpICE9IFBvc2l0aW9uOjpQb3NpdGlvbklzT2Zm
c2V0SW5BbmNob3IpCisgICAgICAgIHJldHVybjsKKworICAgIE5vZGUqIG5vZGUgPSBwb3NpdGlv
bi5jb250YWluZXJOb2RlKCk7CisgICAgaW50IGVuZE9mZnNldCA9IHBvc2l0aW9uLm9mZnNldElu
Q29udGFpbmVyTm9kZSgpOworICAgIFZlY3RvcjxEb2N1bWVudE1hcmtlcio+IG1hcmtlcnMgPSBu
b2RlLT5kb2N1bWVudCgpLT5tYXJrZXJzKCktPm1hcmtlcnNGb3Iobm9kZSk7CisgICAgc2l6ZV90
IG1hcmtlckNvdW50ID0gbWFya2Vycy5zaXplKCk7CisgICAgZm9yIChzaXplX3QgaSA9IDA7IGkg
PCBtYXJrZXJDb3VudDsgKytpKSB7CisgICAgICAgIGNvbnN0IERvY3VtZW50TWFya2VyKiBtYXJr
ZXIgPSBtYXJrZXJzW2ldOworICAgICAgICBpZiAoIXNob3VsZFN0YXJ0VGltZXJGb3IobWFya2Vy
LCBlbmRPZmZzZXQpKQorICAgICAgICAgICAgY29udGludWU7CisgICAgICAgIFJlZlB0cjxSYW5n
ZT4gd29yZFJhbmdlID0gUmFuZ2U6OmNyZWF0ZShtX2ZyYW1lLT5kb2N1bWVudCgpLCBub2RlLCBt
YXJrZXItPnN0YXJ0T2Zmc2V0KCksIG5vZGUsIG1hcmtlci0+ZW5kT2Zmc2V0KCkpOworICAgICAg
ICBTdHJpbmcgY3VycmVudFdvcmQgPSBwbGFpblRleHQod29yZFJhbmdlLmdldCgpKTsKKyAgICAg
ICAgaWYgKCFjdXJyZW50V29yZC5sZW5ndGgoKSkKKyAgICAgICAgICAgIGNvbnRpbnVlOworCisg
ICAgICAgIG1fY29ycmVjdGlvblBhbmVsSW5mby5yYW5nZVRvQmVSZXBsYWNlZCA9IHdvcmRSYW5n
ZTsKKyAgICAgICAgbV9jb3JyZWN0aW9uUGFuZWxJbmZvLnJlcGxhY2VkU3RyaW5nID0gY3VycmVu
dFdvcmQ7CisgICAgICAgIGlmIChtYXJrZXItPnR5cGUoKSA9PSBEb2N1bWVudE1hcmtlcjo6U3Bl
bGxpbmcpCisgICAgICAgICAgICBzdGFydENvcnJlY3Rpb25QYW5lbFRpbWVyKENvcnJlY3Rpb25Q
YW5lbEluZm86OlBhbmVsVHlwZVNwZWxsaW5nU3VnZ2VzdGlvbnMpOworICAgICAgICBlbHNlIHsK
KyAgICAgICAgICAgIG1fY29ycmVjdGlvblBhbmVsSW5mby5yZXBsYWNlbWVudFN0cmluZyA9IG1h
cmtlci0+ZGVzY3JpcHRpb24oKTsKKyAgICAgICAgICAgIHN0YXJ0Q29ycmVjdGlvblBhbmVsVGlt
ZXIoQ29ycmVjdGlvblBhbmVsSW5mbzo6UGFuZWxUeXBlUmV2ZXJzaW9uKTsKKyAgICAgICAgfQor
CisgICAgICAgIGJyZWFrOworICAgIH0KK30KKwordm9pZCBTcGVsbGluZ0NvcnJlY3Rpb25Db250
cm9sbGVyOjpyZXNwb25kVG9BcHBsaWVkRWRpdGluZyhDb21wb3NpdGVFZGl0Q29tbWFuZCogY29t
bWFuZCkKK3sKKyAgICBpZiAoY29tbWFuZC0+aXNUb3BMZXZlbENvbW1hbmQoKSAmJiAhY29tbWFu
ZC0+c2hvdWxkUmV0YWluQXV0b2NvcnJlY3Rpb25JbmRpY2F0b3IoKSkKKyAgICAgICAgbV9mcmFt
ZS0+ZG9jdW1lbnQoKS0+bWFya2VycygpLT5yZW1vdmVNYXJrZXJzKERvY3VtZW50TWFya2VyOjpD
b3JyZWN0aW9uSW5kaWNhdG9yKTsKKworICAgIG1hcmtQcmVjZWRpbmdXaGl0ZXNwYWNlRm9yRGVs
ZXRlZEF1dG9jb3JyZWN0aW9uQWZ0ZXJDb21tYW5kKGNvbW1hbmQpOworICAgIG1fb3JpZ2luYWxT
dHJpbmdGb3JMYXN0RGVsZXRlZEF1dG9jb3JyZWN0aW9uID0gU3RyaW5nKCk7Cit9CisKK3ZvaWQg
U3BlbGxpbmdDb3JyZWN0aW9uQ29udHJvbGxlcjo6cmVzcG9uZFRvVW5hcHBsaWVkRWRpdGluZyhF
ZGl0Q29tbWFuZENvbXBvc2l0aW9uKiBjb21tYW5kKQoreworICAgIGlmICghY29tbWFuZC0+d2Fz
Q3JlYXRlTGlua0NvbW1hbmQoKSkKKyAgICAgICAgcmV0dXJuOworICAgIFJlZlB0cjxSYW5nZT4g
cmFuZ2UgPSBSYW5nZTo6Y3JlYXRlKG1fZnJhbWUtPmRvY3VtZW50KCksIGNvbW1hbmQtPnN0YXJ0
aW5nU2VsZWN0aW9uKCkuc3RhcnQoKSwgY29tbWFuZC0+c3RhcnRpbmdTZWxlY3Rpb24oKS5lbmQo
KSk7CisgICAgaWYgKCFyYW5nZSkKKyAgICAgICAgcmV0dXJuOworICAgIERvY3VtZW50TWFya2Vy
Q29udHJvbGxlciogbWFya2VycyA9IG1fZnJhbWUtPmRvY3VtZW50KCktPm1hcmtlcnMoKTsKKyAg
ICBtYXJrZXJzLT5hZGRNYXJrZXIocmFuZ2UuZ2V0KCksIERvY3VtZW50TWFya2VyOjpSZXBsYWNl
bWVudCk7CisgICAgbWFya2Vycy0+YWRkTWFya2VyKHJhbmdlLmdldCgpLCBEb2N1bWVudE1hcmtl
cjo6U3BlbGxDaGVja2luZ0V4ZW1wdGlvbik7Cit9CisKK0VkaXRvckNsaWVudCogU3BlbGxpbmdD
b3JyZWN0aW9uQ29udHJvbGxlcjo6Y2xpZW50KCkKK3sKKyAgICByZXR1cm4gbV9mcmFtZS0+cGFn
ZSgpID8gbV9mcmFtZS0+cGFnZSgpLT5lZGl0b3JDbGllbnQoKSA6IDA7Cit9CisKK1RleHRDaGVj
a2VyQ2xpZW50KiBTcGVsbGluZ0NvcnJlY3Rpb25Db250cm9sbGVyOjp0ZXh0Q2hlY2tlcigpCit7
CisgICAgaWYgKEVkaXRvckNsaWVudCogb3duZXIgPSBjbGllbnQoKSkKKyAgICAgICAgcmV0dXJu
IG93bmVyLT50ZXh0Q2hlY2tlcigpOworICAgIHJldHVybiAwOworfQorCit2b2lkIFNwZWxsaW5n
Q29ycmVjdGlvbkNvbnRyb2xsZXI6OnJlY29yZEF1dG9jb3JyZWN0aW9uUmVzcG9uc2VSZXZlcnNl
ZChjb25zdCBTdHJpbmcmIHJlcGxhY2VkU3RyaW5nLCBjb25zdCBTdHJpbmcmIHJlcGxhY2VtZW50
U3RyaW5nKQoreworICAgIGNsaWVudCgpLT5yZWNvcmRBdXRvY29ycmVjdGlvblJlc3BvbnNlKEVk
aXRvckNsaWVudDo6QXV0b2NvcnJlY3Rpb25SZXZlcnRlZCwgcmVwbGFjZWRTdHJpbmcsIHJlcGxh
Y2VtZW50U3RyaW5nKTsKK30KKwordm9pZCBTcGVsbGluZ0NvcnJlY3Rpb25Db250cm9sbGVyOjpy
ZWNvcmRBdXRvY29ycmVjdGlvblJlc3BvbnNlUmV2ZXJzZWQoY29uc3QgU3RyaW5nJiByZXBsYWNl
ZFN0cmluZywgUGFzc1JlZlB0cjxSYW5nZT4gcmVwbGFjZW1lbnRSYW5nZSkKK3sKKyAgICByZWNv
cmRBdXRvY29ycmVjdGlvblJlc3BvbnNlUmV2ZXJzZWQocmVwbGFjZWRTdHJpbmcsIHBsYWluVGV4
dChyZXBsYWNlbWVudFJhbmdlLmdldCgpKSk7Cit9CisKK3ZvaWQgU3BlbGxpbmdDb3JyZWN0aW9u
Q29udHJvbGxlcjo6bWFya1JldmVyc2VkKFBhc3NSZWZQdHI8UmFuZ2U+IGNoYW5nZWRSYW5nZSkK
K3sKKyAgICBjaGFuZ2VkUmFuZ2UtPnN0YXJ0Q29udGFpbmVyKCktPmRvY3VtZW50KCktPm1hcmtl
cnMoKS0+cmVtb3ZlTWFya2VycyhjaGFuZ2VkUmFuZ2UuZ2V0KCksIERvY3VtZW50TWFya2VyOjpB
dXRvY29ycmVjdGVkLCBEb2N1bWVudE1hcmtlckNvbnRyb2xsZXI6OlJlbW92ZVBhcnRpYWxseU92
ZXJsYXBwaW5nTWFya2VyKTsKKyAgICBjaGFuZ2VkUmFuZ2UtPnN0YXJ0Q29udGFpbmVyKCktPmRv
Y3VtZW50KCktPm1hcmtlcnMoKS0+YWRkTWFya2VyKGNoYW5nZWRSYW5nZS5nZXQoKSwgRG9jdW1l
bnRNYXJrZXI6OlNwZWxsQ2hlY2tpbmdFeGVtcHRpb24pOworfQorCit2b2lkIFNwZWxsaW5nQ29y
cmVjdGlvbkNvbnRyb2xsZXI6Om1hcmtDb3JyZWN0aW9uKFBhc3NSZWZQdHI8UmFuZ2U+IHJlcGxh
Y2VkUmFuZ2UsIGNvbnN0IFN0cmluZyYgcmVwbGFjZWRTdHJpbmcpCit7CisgICAgVmVjdG9yPERv
Y3VtZW50TWFya2VyOjpNYXJrZXJUeXBlPiBtYXJrZXJUeXBlc1RvQWRkID0gbWFya2VyVHlwZXNG
b3JBdXRvY29ycmVjdGlvbigpOworICAgIERvY3VtZW50TWFya2VyQ29udHJvbGxlciogbWFya2Vy
cyA9IHJlcGxhY2VkUmFuZ2UtPnN0YXJ0Q29udGFpbmVyKCktPmRvY3VtZW50KCktPm1hcmtlcnMo
KTsKKyAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IG1hcmtlclR5cGVzVG9BZGQuc2l6ZSgpOyAr
K2kpIHsKKyAgICAgICAgRG9jdW1lbnRNYXJrZXI6Ok1hcmtlclR5cGUgbWFya2VyVHlwZSA9IG1h
cmtlclR5cGVzVG9BZGRbaV07CisgICAgICAgIGlmIChtYXJrZXJUeXBlID09IERvY3VtZW50TWFy
a2VyOjpSZXBsYWNlbWVudCB8fCBtYXJrZXJUeXBlID09IERvY3VtZW50TWFya2VyOjpBdXRvY29y
cmVjdGVkKQorICAgICAgICAgICAgbWFya2Vycy0+YWRkTWFya2VyKHJlcGxhY2VkUmFuZ2UuZ2V0
KCksIG1hcmtlclR5cGUsIHJlcGxhY2VkU3RyaW5nKTsKKyAgICAgICAgZWxzZQorICAgICAgICAg
ICAgbWFya2Vycy0+YWRkTWFya2VyKHJlcGxhY2VkUmFuZ2UuZ2V0KCksIG1hcmtlclR5cGUpOwor
ICAgIH0KK30KKwordm9pZCBTcGVsbGluZ0NvcnJlY3Rpb25Db250cm9sbGVyOjpyZWNvcmRTcGVs
bGNoZWNrZXJSZXNwb25zZUZvck1vZGlmaWVkQ29ycmVjdGlvbihSYW5nZSogcmFuZ2VPZkNvcnJl
Y3Rpb24sIGNvbnN0IFN0cmluZyYgY29ycmVjdGVkLCBjb25zdCBTdHJpbmcmIGNvcnJlY3Rpb24p
Cit7CisgICAgaWYgKCFyYW5nZU9mQ29ycmVjdGlvbikKKyAgICAgICAgcmV0dXJuOworICAgIERv
Y3VtZW50TWFya2VyQ29udHJvbGxlciogbWFya2VycyA9IHJhbmdlT2ZDb3JyZWN0aW9uLT5zdGFy
dENvbnRhaW5lcigpLT5kb2N1bWVudCgpLT5tYXJrZXJzKCk7CisgICAgVmVjdG9yPERvY3VtZW50
TWFya2VyKj4gY29ycmVjdGVkT25jZU1hcmtlcnMgPSBtYXJrZXJzLT5tYXJrZXJzSW5SYW5nZShy
YW5nZU9mQ29ycmVjdGlvbiwgRG9jdW1lbnRNYXJrZXI6OkF1dG9jb3JyZWN0ZWQpOworICAgIGlm
IChjb3JyZWN0ZWRPbmNlTWFya2Vycy5pc0VtcHR5KCkpCisgICAgICAgIHJldHVybjsKKyAgICAK
KyAgICAvLyBTcGVsbGluZyBjb3JyZWN0ZWQgdGV4dCBoYXMgYmVlbiBlZGl0ZWQuIFdlIG5lZWQg
dG8gZGV0ZXJtaW5lIHdoZXRoZXIgdXNlciBoYXMgcmV2ZXJ0ZWQgaXQgdG8gb3JpZ2luYWwgdGV4
dCBvcgorICAgIC8vIGVkaXRlZCBpdCB0byBzb21ldGhpbmcgZWxzZSwgYW5kIG5vdGlmeSBzcGVs
bGNoZWNrZXIgYWNjb3JkaW5nbHkuCisgICAgaWYgKG1hcmtlcnNIYXZlSWRlbnRpY2FsRGVzY3Jp
cHRpb24oY29ycmVjdGVkT25jZU1hcmtlcnMpICYmIGNvcnJlY3RlZE9uY2VNYXJrZXJzWzBdLT5k
ZXNjcmlwdGlvbigpID09IGNvcnJlY3RlZCkKKyAgICAgICAgY2xpZW50KCktPnJlY29yZEF1dG9j
b3JyZWN0aW9uUmVzcG9uc2UoRWRpdG9yQ2xpZW50OjpBdXRvY29ycmVjdGlvblJldmVydGVkLCBj
b3JyZWN0ZWQsIGNvcnJlY3Rpb24pOworICAgIGVsc2UKKyAgICAgICAgY2xpZW50KCktPnJlY29y
ZEF1dG9jb3JyZWN0aW9uUmVzcG9uc2UoRWRpdG9yQ2xpZW50OjpBdXRvY29ycmVjdGlvbkVkaXRl
ZCwgY29ycmVjdGVkLCBjb3JyZWN0aW9uKTsKKyAgICBtYXJrZXJzLT5yZW1vdmVNYXJrZXJzKHJh
bmdlT2ZDb3JyZWN0aW9uLCBEb2N1bWVudE1hcmtlcjo6QXV0b2NvcnJlY3RlZCwgRG9jdW1lbnRN
YXJrZXJDb250cm9sbGVyOjpSZW1vdmVQYXJ0aWFsbHlPdmVybGFwcGluZ01hcmtlcik7Cit9CisK
K3ZvaWQgU3BlbGxpbmdDb3JyZWN0aW9uQ29udHJvbGxlcjo6ZGVsZXRlZEF1dG9jb3JyZWN0aW9u
QXRQb3NpdGlvbihjb25zdCBQb3NpdGlvbiYgcG9zaXRpb24sIGNvbnN0IFN0cmluZyYgb3JpZ2lu
YWxTdHJpbmcpCit7CisgICAgbV9vcmlnaW5hbFN0cmluZ0Zvckxhc3REZWxldGVkQXV0b2NvcnJl
Y3Rpb24gPSBvcmlnaW5hbFN0cmluZzsKKyAgICBtX3Bvc2l0aW9uRm9yTGFzdERlbGV0ZWRBdXRv
Y29ycmVjdGlvbiA9IHBvc2l0aW9uOworfQorCit2b2lkIFNwZWxsaW5nQ29ycmVjdGlvbkNvbnRy
b2xsZXI6Om1hcmtQcmVjZWRpbmdXaGl0ZXNwYWNlRm9yRGVsZXRlZEF1dG9jb3JyZWN0aW9uQWZ0
ZXJDb21tYW5kKEVkaXRDb21tYW5kKiBjb21tYW5kKQoreworICAgIFBvc2l0aW9uIGVuZE9mU2Vs
ZWN0aW9uID0gY29tbWFuZC0+ZW5kaW5nU2VsZWN0aW9uKCkuZW5kKCk7CisgICAgaWYgKGVuZE9m
U2VsZWN0aW9uICE9IG1fcG9zaXRpb25Gb3JMYXN0RGVsZXRlZEF1dG9jb3JyZWN0aW9uKQorICAg
ICAgICByZXR1cm47CisKKyAgICBQb3NpdGlvbiBwcmVjZWRpbmdDaGFyYWN0ZXJQb3NpdGlvbiA9
IGVuZE9mU2VsZWN0aW9uLnByZXZpb3VzKCk7CisgICAgaWYgKGVuZE9mU2VsZWN0aW9uID09IHBy
ZWNlZGluZ0NoYXJhY3RlclBvc2l0aW9uKQorICAgICAgICByZXR1cm47CisKKyAgICBSZWZQdHI8
UmFuZ2U+IHByZWNlZGluZ0NoYXJhY3RlclJhbmdlID0gUmFuZ2U6OmNyZWF0ZShtX2ZyYW1lLT5k
b2N1bWVudCgpLCBwcmVjZWRpbmdDaGFyYWN0ZXJQb3NpdGlvbiwgZW5kT2ZTZWxlY3Rpb24pOwor
ICAgIFN0cmluZyBzdHJpbmcgPSBwbGFpblRleHQocHJlY2VkaW5nQ2hhcmFjdGVyUmFuZ2UuZ2V0
KCkpOworICAgIGlmIChzdHJpbmcuaXNFbXB0eSgpIHx8ICFpc1doaXRlc3BhY2Uoc3RyaW5nW3N0
cmluZy5sZW5ndGgoKSAtIDFdKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgLy8gTWFyayB0aGlz
IHdoaXRlc3BhY2UgdG8gaW5kaWNhdGUgd2UgaGF2ZSBkZWxldGVkIGFuIGF1dG9jb3JyZWN0aW9u
IGZvbGxvd2luZyB0aGlzCisgICAgLy8gd2hpdGVzcGFjZS4gU28gaWYgdGhlIHVzZXIgdHlwZXMg
dGhlIHNhbWUgb3JpZ2luYWwgd29yZCBhZ2FpbiBhdCB0aGlzIHBvc2l0aW9uLCB3ZQorICAgIC8v
IHdvbid0IGF1dG9jb3JyZWN0IGl0IGFnYWluLgorICAgIG1fZnJhbWUtPmRvY3VtZW50KCktPm1h
cmtlcnMoKS0+YWRkTWFya2VyKHByZWNlZGluZ0NoYXJhY3RlclJhbmdlLmdldCgpLCBEb2N1bWVu
dE1hcmtlcjo6RGVsZXRlZEF1dG9jb3JyZWN0aW9uLCBtX29yaWdpbmFsU3RyaW5nRm9yTGFzdERl
bGV0ZWRBdXRvY29ycmVjdGlvbik7Cit9CisKK2Jvb2wgU3BlbGxpbmdDb3JyZWN0aW9uQ29udHJv
bGxlcjo6cHJvY2Vzc01hcmtlcnNPblRleHRUb0JlUmVwbGFjZWRCeVJlc3VsdChjb25zdCBUZXh0
Q2hlY2tpbmdSZXN1bHQqIHJlc3VsdCwgUmFuZ2UqIHJhbmdlVG9CZVJlcGxhY2VkLCBjb25zdCBT
dHJpbmcmIHN0cmluZ1RvQmVSZXBsYWNlZCkKK3sKKyAgICBEb2N1bWVudE1hcmtlckNvbnRyb2xs
ZXIqIG1hcmtlckNvbnRyb2xsZXIgPSBtX2ZyYW1lLT5kb2N1bWVudCgpLT5tYXJrZXJzKCk7Cisg
ICAgaWYgKG1hcmtlckNvbnRyb2xsZXItPmhhc01hcmtlcnMocmFuZ2VUb0JlUmVwbGFjZWQsIERv
Y3VtZW50TWFya2VyOjpSZXBsYWNlbWVudCkpIHsKKyAgICAgICAgaWYgKHJlc3VsdC0+dHlwZSA9
PSBUZXh0Q2hlY2tpbmdUeXBlQ29ycmVjdGlvbikKKyAgICAgICAgICAgIHJlY29yZFNwZWxsY2hl
Y2tlclJlc3BvbnNlRm9yTW9kaWZpZWRDb3JyZWN0aW9uKHJhbmdlVG9CZVJlcGxhY2VkLCBzdHJp
bmdUb0JlUmVwbGFjZWQsIHJlc3VsdC0+cmVwbGFjZW1lbnQpOworICAgICAgICByZXR1cm4gZmFs
c2U7CisgICAgfQorCisgICAgaWYgKG1hcmtlckNvbnRyb2xsZXItPmhhc01hcmtlcnMocmFuZ2VU
b0JlUmVwbGFjZWQsIERvY3VtZW50TWFya2VyOjpSZWplY3RlZENvcnJlY3Rpb24pKQorICAgICAg
ICByZXR1cm4gZmFsc2U7CisKKyAgICBQb3NpdGlvbiBiZWdpbm5pbmdPZlJhbmdlID0gcmFuZ2VU
b0JlUmVwbGFjZWQtPnN0YXJ0UG9zaXRpb24oKTsKKyAgICBQb3NpdGlvbiBwcmVjZWRpbmdDaGFy
YWN0ZXJQb3NpdGlvbiA9IGJlZ2lubmluZ09mUmFuZ2UucHJldmlvdXMoKTsKKyAgICBSZWZQdHI8
UmFuZ2U+IHByZWNlZGluZ0NoYXJhY3RlclJhbmdlID0gUmFuZ2U6OmNyZWF0ZShtX2ZyYW1lLT5k
b2N1bWVudCgpLCBwcmVjZWRpbmdDaGFyYWN0ZXJQb3NpdGlvbiwgYmVnaW5uaW5nT2ZSYW5nZSk7
CisKKyAgICBWZWN0b3I8RG9jdW1lbnRNYXJrZXIqPiBtYXJrZXJzID0gbWFya2VyQ29udHJvbGxl
ci0+bWFya2Vyc0luUmFuZ2UocHJlY2VkaW5nQ2hhcmFjdGVyUmFuZ2UuZ2V0KCksIERvY3VtZW50
TWFya2VyOjpEZWxldGVkQXV0b2NvcnJlY3Rpb24pOworCisgICAgZm9yIChzaXplX3QgaSA9IDA7
IGkgPCBtYXJrZXJzLnNpemUoKTsgKytpKSB7CisgICAgICAgIGlmIChtYXJrZXJzW2ldLT5kZXNj
cmlwdGlvbigpID09IHN0cmluZ1RvQmVSZXBsYWNlZCkKKyAgICAgICAgICAgIHJldHVybiBmYWxz
ZTsKKyAgICB9CisKKyAgICByZXR1cm4gdHJ1ZTsKK30KKyAgICAKKyNlbmRpZgorCit9IC8vIG5h
bWVzcGFjZSBXZWJDb3JlCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0FsdGVybmF0aXZl
VGV4dENvbnRyb2xsZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2VkaXRpbmcv
QWx0ZXJuYXRpdmVUZXh0Q29udHJvbGxlci5jcHAJKHJldmlzaW9uIDExMjgzMCkKKysrIFNvdXJj
ZS9XZWJDb3JlL2VkaXRpbmcvQWx0ZXJuYXRpdmVUZXh0Q29udHJvbGxlci5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTI1LDcgKzI1LDcgQEAKICAqLwogCiAjaW5jbHVkZSAiY29uZmlnLmgiCi0jaW5j
bHVkZSAiU3BlbGxpbmdDb3JyZWN0aW9uQ29udHJvbGxlci5oIgorI2luY2x1ZGUgIkFsdGVybmF0
aXZlVGV4dENvbnRyb2xsZXIuaCIKIAogI2luY2x1ZGUgIkRvY3VtZW50TWFya2VyQ29udHJvbGxl
ci5oIgogI2luY2x1ZGUgIkVkaXRDb21tYW5kLmgiCkBAIC00OCw2ICs0OCwyMiBAQCBuYW1lc3Bh
Y2UgV2ViQ29yZSB7CiB1c2luZyBuYW1lc3BhY2Ugc3RkOwogdXNpbmcgbmFtZXNwYWNlIFdURjsK
IAorY2xhc3MgQXV0b2NvcnJlY3Rpb25BbHRlcm5hdGl2ZURldGFpbHMgOiBwdWJsaWMgQWx0ZXJu
YXRpdmVUZXh0RGV0YWlscyB7CitwdWJsaWM6CisgICAgc3RhdGljIFBhc3NSZWZQdHI8QXV0b2Nv
cnJlY3Rpb25BbHRlcm5hdGl2ZURldGFpbHM+IGNyZWF0ZShjb25zdCBTdHJpbmcmIHJlcGxhY2Vt
ZW50U3RyaW5nKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBBdXRvY29ycmVj
dGlvbkFsdGVybmF0aXZlRGV0YWlscyhyZXBsYWNlbWVudFN0cmluZykpOworICAgIH0KKyAgICAK
KyAgICBjb25zdCBTdHJpbmcmIHJlcGxhY2VtZW50U3RyaW5nKCkgY29uc3QgeyByZXR1cm4gbV9y
ZXBsYWNlbWVudFN0cmluZzsgfQorcHJpdmF0ZToKKyAgICBBdXRvY29ycmVjdGlvbkFsdGVybmF0
aXZlRGV0YWlscyhjb25zdCBTdHJpbmcmIHJlcGxhY2VtZW50U3RyaW5nKQorICAgIDogbV9yZXBs
YWNlbWVudFN0cmluZyhyZXBsYWNlbWVudFN0cmluZykKKyAgICB7IH0KKyAgICAKKyAgICBTdHJp
bmcgbV9yZXBsYWNlbWVudFN0cmluZzsKK307CisKICNpZiBVU0UoQVVUT0NPUlJFQ1RJT05fUEFO
RUwpCiAKIHN0YXRpYyBjb25zdCBWZWN0b3I8RG9jdW1lbnRNYXJrZXI6Ok1hcmtlclR5cGU+JiBt
YXJrZXJUeXBlc0ZvckF1dG9jb3JyZWN0aW9uKCkKQEAgLTg1LDQ4ICsxMDEsNDggQEAgc3RhdGlj
IGJvb2wgbWFya2Vyc0hhdmVJZGVudGljYWxEZXNjcmlwdAogICAgIHJldHVybiB0cnVlOwogfQog
Ci1TcGVsbGluZ0NvcnJlY3Rpb25Db250cm9sbGVyOjpTcGVsbGluZ0NvcnJlY3Rpb25Db250cm9s
bGVyKEZyYW1lKiBmcmFtZSkKK0FsdGVybmF0aXZlVGV4dENvbnRyb2xsZXI6OkFsdGVybmF0aXZl
VGV4dENvbnRyb2xsZXIoRnJhbWUqIGZyYW1lKQogICAgIDogbV9mcmFtZShmcmFtZSkKLSAgICAs
IG1fY29ycmVjdGlvblBhbmVsVGltZXIodGhpcywgJlNwZWxsaW5nQ29ycmVjdGlvbkNvbnRyb2xs
ZXI6OmNvcnJlY3Rpb25QYW5lbFRpbWVyRmlyZWQpCisgICAgLCBtX3RpbWVyKHRoaXMsICZBbHRl
cm5hdGl2ZVRleHRDb250cm9sbGVyOjp0aW1lckZpcmVkKQogewogfQogCi1TcGVsbGluZ0NvcnJl
Y3Rpb25Db250cm9sbGVyOjp+U3BlbGxpbmdDb3JyZWN0aW9uQ29udHJvbGxlcigpCitBbHRlcm5h
dGl2ZVRleHRDb250cm9sbGVyOjp+QWx0ZXJuYXRpdmVUZXh0Q29udHJvbGxlcigpCiB7Ci0gICAg
ZGlzbWlzcyhSZWFzb25Gb3JEaXNtaXNzaW5nQ29ycmVjdGlvblBhbmVsSWdub3JlZCk7CisgICAg
ZGlzbWlzcyhSZWFzb25Gb3JEaXNtaXNzaW5nQWx0ZXJuYXRpdmVUZXh0SWdub3JlZCk7CiB9CiAK
LXZvaWQgU3BlbGxpbmdDb3JyZWN0aW9uQ29udHJvbGxlcjo6c3RhcnRDb3JyZWN0aW9uUGFuZWxU
aW1lcihDb3JyZWN0aW9uUGFuZWxJbmZvOjpQYW5lbFR5cGUgdHlwZSkKK3ZvaWQgQWx0ZXJuYXRp
dmVUZXh0Q29udHJvbGxlcjo6c3RhcnRBbHRlcm5hdGl2ZVRleHRVSVRpbWVyKEFsdGVybmF0aXZl
VGV4dFR5cGUgdHlwZSkKIHsKICAgICBjb25zdCBkb3VibGUgY29ycmVjdGlvblBhbmVsVGltZXJJ
bnRlcnZhbCA9IDAuMzsKICAgICBpZiAoIWlzQXV0b21hdGljU3BlbGxpbmdDb3JyZWN0aW9uRW5h
YmxlZCgpKQogICAgICAgICByZXR1cm47CiAKICAgICAvLyBJZiB0eXBlIGlzIFBhbmVsVHlwZVJl
dmVyc2lvbiwgdGhlbiB0aGUgbmV3IHJhbmdlIGhhcyBiZWVuIHNldC4gU28gd2Ugc2hvdWxkbid0
IGNsZWFyIGl0LgotICAgIGlmICh0eXBlID09IENvcnJlY3Rpb25QYW5lbEluZm86OlBhbmVsVHlw
ZUNvcnJlY3Rpb24pCi0gICAgICAgIG1fY29ycmVjdGlvblBhbmVsSW5mby5yYW5nZVRvQmVSZXBs
YWNlZC5jbGVhcigpOwotICAgIG1fY29ycmVjdGlvblBhbmVsSW5mby5wYW5lbFR5cGUgPSB0eXBl
OwotICAgIG1fY29ycmVjdGlvblBhbmVsVGltZXIuc3RhcnRPbmVTaG90KGNvcnJlY3Rpb25QYW5l
bFRpbWVySW50ZXJ2YWwpOworICAgIGlmICh0eXBlID09IEFsdGVybmF0aXZlVGV4dFR5cGVDb3Jy
ZWN0aW9uKQorICAgICAgICBtX2FsdGVybmF0aXZlVGV4dEluZm8ucmFuZ2VXaXRoQWx0ZXJuYXRp
dmUuY2xlYXIoKTsKKyAgICBtX2FsdGVybmF0aXZlVGV4dEluZm8udHlwZSA9IHR5cGU7CisgICAg
bV90aW1lci5zdGFydE9uZVNob3QoY29ycmVjdGlvblBhbmVsVGltZXJJbnRlcnZhbCk7CiB9CiAK
LXZvaWQgU3BlbGxpbmdDb3JyZWN0aW9uQ29udHJvbGxlcjo6c3RvcENvcnJlY3Rpb25QYW5lbFRp
bWVyKCkKK3ZvaWQgQWx0ZXJuYXRpdmVUZXh0Q29udHJvbGxlcjo6c3RvcEFsdGVybmF0aXZlVGV4
dFVJVGltZXIoKQogewotICAgIG1fY29ycmVjdGlvblBhbmVsVGltZXIuc3RvcCgpOwotICAgIG1f
Y29ycmVjdGlvblBhbmVsSW5mby5yYW5nZVRvQmVSZXBsYWNlZC5jbGVhcigpOworICAgIG1fdGlt
ZXIuc3RvcCgpOworICAgIG1fYWx0ZXJuYXRpdmVUZXh0SW5mby5yYW5nZVdpdGhBbHRlcm5hdGl2
ZS5jbGVhcigpOwogfQogCi12b2lkIFNwZWxsaW5nQ29ycmVjdGlvbkNvbnRyb2xsZXI6OnN0b3BQ
ZW5kaW5nQ29ycmVjdGlvbihjb25zdCBWaXNpYmxlU2VsZWN0aW9uJiBvbGRTZWxlY3Rpb24pCit2
b2lkIEFsdGVybmF0aXZlVGV4dENvbnRyb2xsZXI6OnN0b3BQZW5kaW5nQ29ycmVjdGlvbihjb25z
dCBWaXNpYmxlU2VsZWN0aW9uJiBvbGRTZWxlY3Rpb24pCiB7CiAgICAgLy8gTWFrZSBzdXJlIHRo
ZXJlJ3Mgbm8gcGVuZGluZyBhdXRvY29ycmVjdGlvbiBiZWZvcmUgd2UgY2FsbCBtYXJrTWlzc3Bl
bGxpbmdzQW5kQmFkR3JhbW1hcigpIGJlbG93LgogICAgIFZpc2libGVTZWxlY3Rpb24gY3VycmVu
dFNlbGVjdGlvbihtX2ZyYW1lLT5zZWxlY3Rpb24oKS0+c2VsZWN0aW9uKCkpOwogICAgIGlmIChj
dXJyZW50U2VsZWN0aW9uID09IG9sZFNlbGVjdGlvbikKICAgICAgICAgcmV0dXJuOwogCi0gICAg
c3RvcENvcnJlY3Rpb25QYW5lbFRpbWVyKCk7Ci0gICAgZGlzbWlzcyhSZWFzb25Gb3JEaXNtaXNz
aW5nQ29ycmVjdGlvblBhbmVsSWdub3JlZCk7CisgICAgc3RvcEFsdGVybmF0aXZlVGV4dFVJVGlt
ZXIoKTsKKyAgICBkaXNtaXNzKFJlYXNvbkZvckRpc21pc3NpbmdBbHRlcm5hdGl2ZVRleHRJZ25v
cmVkKTsKIH0KIAotdm9pZCBTcGVsbGluZ0NvcnJlY3Rpb25Db250cm9sbGVyOjphcHBseVBlbmRp
bmdDb3JyZWN0aW9uKGNvbnN0IFZpc2libGVTZWxlY3Rpb24mIHNlbGVjdGlvbkFmdGVyVHlwaW5n
KQordm9pZCBBbHRlcm5hdGl2ZVRleHRDb250cm9sbGVyOjphcHBseVBlbmRpbmdDb3JyZWN0aW9u
KGNvbnN0IFZpc2libGVTZWxlY3Rpb24mIHNlbGVjdGlvbkFmdGVyVHlwaW5nKQogewogICAgIC8v
IEFwcGx5IHBlbmRpbmcgYXV0b2NvcnJlY3Rpb24gYmVmb3JlIG5leHQgcm91bmQgb2Ygc3BlbGwg
Y2hlY2tpbmcuCiAgICAgYm9vbCBkb0FwcGx5Q29ycmVjdGlvbiA9IHRydWU7CkBAIC0xMzgsODcg
KzE1NCw4NyBAQCB2b2lkIFNwZWxsaW5nQ29ycmVjdGlvbkNvbnRyb2xsZXI6OmFwcGx5CiAgICAg
ICAgICAgICBkb0FwcGx5Q29ycmVjdGlvbiA9IGZhbHNlOwogICAgIH0KICAgICBpZiAoZG9BcHBs
eUNvcnJlY3Rpb24pCi0gICAgICAgIGhhbmRsZUNvcnJlY3Rpb25QYW5lbFJlc3VsdChkaXNtaXNz
U29vbihSZWFzb25Gb3JEaXNtaXNzaW5nQ29ycmVjdGlvblBhbmVsQWNjZXB0ZWQpKTsgCisgICAg
ICAgIGhhbmRsZUFsdGVybmF0aXZlVGV4dFVJUmVzdWx0KGRpc21pc3NTb29uKFJlYXNvbkZvckRp
c21pc3NpbmdBbHRlcm5hdGl2ZVRleHRBY2NlcHRlZCkpOyAKICAgICBlbHNlCi0gICAgICAgIG1f
Y29ycmVjdGlvblBhbmVsSW5mby5yYW5nZVRvQmVSZXBsYWNlZC5jbGVhcigpOworICAgICAgICBt
X2FsdGVybmF0aXZlVGV4dEluZm8ucmFuZ2VXaXRoQWx0ZXJuYXRpdmUuY2xlYXIoKTsKIH0KIAot
Ym9vbCBTcGVsbGluZ0NvcnJlY3Rpb25Db250cm9sbGVyOjpoYXNQZW5kaW5nQ29ycmVjdGlvbigp
IGNvbnN0Citib29sIEFsdGVybmF0aXZlVGV4dENvbnRyb2xsZXI6Omhhc1BlbmRpbmdDb3JyZWN0
aW9uKCkgY29uc3QKIHsKLSAgICByZXR1cm4gbV9jb3JyZWN0aW9uUGFuZWxJbmZvLnJhbmdlVG9C
ZVJlcGxhY2VkOworICAgIHJldHVybiBtX2FsdGVybmF0aXZlVGV4dEluZm8ucmFuZ2VXaXRoQWx0
ZXJuYXRpdmU7CiB9CiAKLWJvb2wgU3BlbGxpbmdDb3JyZWN0aW9uQ29udHJvbGxlcjo6aXNTcGVs
bGluZ01hcmtlckFsbG93ZWQoUGFzc1JlZlB0cjxSYW5nZT4gbWlzc3BlbGxpbmdSYW5nZSkgY29u
c3QKK2Jvb2wgQWx0ZXJuYXRpdmVUZXh0Q29udHJvbGxlcjo6aXNTcGVsbGluZ01hcmtlckFsbG93
ZWQoUGFzc1JlZlB0cjxSYW5nZT4gbWlzc3BlbGxpbmdSYW5nZSkgY29uc3QKIHsKICAgICByZXR1
cm4gIW1fZnJhbWUtPmRvY3VtZW50KCktPm1hcmtlcnMoKS0+aGFzTWFya2VycyhtaXNzcGVsbGlu
Z1JhbmdlLmdldCgpLCBEb2N1bWVudE1hcmtlcjo6U3BlbGxDaGVja2luZ0V4ZW1wdGlvbik7CiB9
CiAKLXZvaWQgU3BlbGxpbmdDb3JyZWN0aW9uQ29udHJvbGxlcjo6c2hvdyhQYXNzUmVmUHRyPFJh
bmdlPiByYW5nZVRvUmVwbGFjZSwgY29uc3QgU3RyaW5nJiByZXBsYWNlbWVudCkKK3ZvaWQgQWx0
ZXJuYXRpdmVUZXh0Q29udHJvbGxlcjo6c2hvdyhQYXNzUmVmUHRyPFJhbmdlPiByYW5nZVRvUmVw
bGFjZSwgY29uc3QgU3RyaW5nJiByZXBsYWNlbWVudCkKIHsKICAgICBGbG9hdFJlY3QgYm91bmRp
bmdCb3ggPSByb290Vmlld1JlY3RGb3JSYW5nZShyYW5nZVRvUmVwbGFjZS5nZXQoKSk7CiAgICAg
aWYgKGJvdW5kaW5nQm94LmlzRW1wdHkoKSkKICAgICAgICAgcmV0dXJuOwotICAgIG1fY29ycmVj
dGlvblBhbmVsSW5mby5yZXBsYWNlZFN0cmluZyA9IHBsYWluVGV4dChyYW5nZVRvUmVwbGFjZS5n
ZXQoKSk7Ci0gICAgbV9jb3JyZWN0aW9uUGFuZWxJbmZvLnJhbmdlVG9CZVJlcGxhY2VkID0gcmFu
Z2VUb1JlcGxhY2U7Ci0gICAgbV9jb3JyZWN0aW9uUGFuZWxJbmZvLnJlcGxhY2VtZW50U3RyaW5n
ID0gcmVwbGFjZW1lbnQ7Ci0gICAgbV9jb3JyZWN0aW9uUGFuZWxJbmZvLmlzQWN0aXZlID0gdHJ1
ZTsKLSAgICBjbGllbnQoKS0+c2hvd0NvcnJlY3Rpb25QYW5lbChtX2NvcnJlY3Rpb25QYW5lbElu
Zm8ucGFuZWxUeXBlLCBib3VuZGluZ0JveCwgbV9jb3JyZWN0aW9uUGFuZWxJbmZvLnJlcGxhY2Vk
U3RyaW5nLCByZXBsYWNlbWVudCwgVmVjdG9yPFN0cmluZz4oKSk7CisgICAgbV9hbHRlcm5hdGl2
ZVRleHRJbmZvLm9yaWdpbmFsVGV4dCA9IHBsYWluVGV4dChyYW5nZVRvUmVwbGFjZS5nZXQoKSk7
CisgICAgbV9hbHRlcm5hdGl2ZVRleHRJbmZvLnJhbmdlV2l0aEFsdGVybmF0aXZlID0gcmFuZ2VU
b1JlcGxhY2U7CisgICAgbV9hbHRlcm5hdGl2ZVRleHRJbmZvLmRldGFpbHMgPSBBdXRvY29ycmVj
dGlvbkFsdGVybmF0aXZlRGV0YWlsczo6Y3JlYXRlKHJlcGxhY2VtZW50KTsKKyAgICBtX2FsdGVy
bmF0aXZlVGV4dEluZm8uaXNBY3RpdmUgPSB0cnVlOworICAgIGNsaWVudCgpLT5zaG93Q29ycmVj
dGlvblBhbmVsKG1fYWx0ZXJuYXRpdmVUZXh0SW5mby50eXBlLCBib3VuZGluZ0JveCwgbV9hbHRl
cm5hdGl2ZVRleHRJbmZvLm9yaWdpbmFsVGV4dCwgcmVwbGFjZW1lbnQsIFZlY3RvcjxTdHJpbmc+
KCkpOwogfQogCi12b2lkIFNwZWxsaW5nQ29ycmVjdGlvbkNvbnRyb2xsZXI6OmhhbmRsZUNhbmNl
bE9wZXJhdGlvbigpCit2b2lkIEFsdGVybmF0aXZlVGV4dENvbnRyb2xsZXI6OmhhbmRsZUNhbmNl
bE9wZXJhdGlvbigpCiB7Ci0gICAgaWYgKCFtX2NvcnJlY3Rpb25QYW5lbEluZm8uaXNBY3RpdmUp
CisgICAgaWYgKCFtX2FsdGVybmF0aXZlVGV4dEluZm8uaXNBY3RpdmUpCiAgICAgICAgIHJldHVy
bjsKLSAgICBtX2NvcnJlY3Rpb25QYW5lbEluZm8uaXNBY3RpdmUgPSBmYWxzZTsKLSAgICBkaXNt
aXNzKFJlYXNvbkZvckRpc21pc3NpbmdDb3JyZWN0aW9uUGFuZWxDYW5jZWxsZWQpOworICAgIG1f
YWx0ZXJuYXRpdmVUZXh0SW5mby5pc0FjdGl2ZSA9IGZhbHNlOworICAgIGRpc21pc3MoUmVhc29u
Rm9yRGlzbWlzc2luZ0FsdGVybmF0aXZlVGV4dENhbmNlbGxlZCk7CiB9CiAKLXZvaWQgU3BlbGxp
bmdDb3JyZWN0aW9uQ29udHJvbGxlcjo6ZGlzbWlzcyhSZWFzb25Gb3JEaXNtaXNzaW5nQ29ycmVj
dGlvblBhbmVsIHJlYXNvbkZvckRpc21pc3NpbmcpCit2b2lkIEFsdGVybmF0aXZlVGV4dENvbnRy
b2xsZXI6OmRpc21pc3MoUmVhc29uRm9yRGlzbWlzc2luZ0FsdGVybmF0aXZlVGV4dCByZWFzb25G
b3JEaXNtaXNzaW5nKQogewotICAgIGlmICghbV9jb3JyZWN0aW9uUGFuZWxJbmZvLmlzQWN0aXZl
KQorICAgIGlmICghbV9hbHRlcm5hdGl2ZVRleHRJbmZvLmlzQWN0aXZlKQogICAgICAgICByZXR1
cm47Ci0gICAgbV9jb3JyZWN0aW9uUGFuZWxJbmZvLmlzQWN0aXZlID0gZmFsc2U7Ci0gICAgbV9j
b3JyZWN0aW9uUGFuZWxJc0Rpc21pc3NlZEJ5RWRpdG9yID0gdHJ1ZTsKKyAgICBtX2FsdGVybmF0
aXZlVGV4dEluZm8uaXNBY3RpdmUgPSBmYWxzZTsKKyAgICBtX2lzRGlzbWlzc2VkQnlFZGl0aW5n
ID0gdHJ1ZTsKICAgICBpZiAoY2xpZW50KCkpCiAgICAgICAgIGNsaWVudCgpLT5kaXNtaXNzQ29y
cmVjdGlvblBhbmVsKHJlYXNvbkZvckRpc21pc3NpbmcpOwogfQogCi1TdHJpbmcgU3BlbGxpbmdD
b3JyZWN0aW9uQ29udHJvbGxlcjo6ZGlzbWlzc1Nvb24oUmVhc29uRm9yRGlzbWlzc2luZ0NvcnJl
Y3Rpb25QYW5lbCByZWFzb25Gb3JEaXNtaXNzaW5nKQorU3RyaW5nIEFsdGVybmF0aXZlVGV4dENv
bnRyb2xsZXI6OmRpc21pc3NTb29uKFJlYXNvbkZvckRpc21pc3NpbmdBbHRlcm5hdGl2ZVRleHQg
cmVhc29uRm9yRGlzbWlzc2luZykKIHsKLSAgICBpZiAoIW1fY29ycmVjdGlvblBhbmVsSW5mby5p
c0FjdGl2ZSkKKyAgICBpZiAoIW1fYWx0ZXJuYXRpdmVUZXh0SW5mby5pc0FjdGl2ZSkKICAgICAg
ICAgcmV0dXJuIFN0cmluZygpOwotICAgIG1fY29ycmVjdGlvblBhbmVsSW5mby5pc0FjdGl2ZSA9
IGZhbHNlOwotICAgIG1fY29ycmVjdGlvblBhbmVsSXNEaXNtaXNzZWRCeUVkaXRvciA9IHRydWU7
CisgICAgbV9hbHRlcm5hdGl2ZVRleHRJbmZvLmlzQWN0aXZlID0gZmFsc2U7CisgICAgbV9pc0Rp
c21pc3NlZEJ5RWRpdGluZyA9IHRydWU7CiAgICAgaWYgKCFjbGllbnQoKSkKICAgICAgICAgcmV0
dXJuIFN0cmluZygpOwogICAgIHJldHVybiBjbGllbnQoKS0+ZGlzbWlzc0NvcnJlY3Rpb25QYW5l
bFNvb24ocmVhc29uRm9yRGlzbWlzc2luZyk7CiB9CiAKLXZvaWQgU3BlbGxpbmdDb3JyZWN0aW9u
Q29udHJvbGxlcjo6YXBwbHlDb3JyZWN0aW9uUGFuZWxJbmZvKGNvbnN0IFZlY3RvcjxEb2N1bWVu
dE1hcmtlcjo6TWFya2VyVHlwZT4mIG1hcmtlclR5cGVzVG9BZGQpCit2b2lkIEFsdGVybmF0aXZl
VGV4dENvbnRyb2xsZXI6OmFwcGx5QWx0ZXJuYXRpdmVUZXh0KGNvbnN0IFN0cmluZyYgYWx0ZXJu
YXRpdmUsIGNvbnN0IFZlY3RvcjxEb2N1bWVudE1hcmtlcjo6TWFya2VyVHlwZT4mIG1hcmtlclR5
cGVzVG9BZGQpCiB7Ci0gICAgaWYgKCFtX2NvcnJlY3Rpb25QYW5lbEluZm8ucmFuZ2VUb0JlUmVw
bGFjZWQpCisgICAgaWYgKCFtX2FsdGVybmF0aXZlVGV4dEluZm8ucmFuZ2VXaXRoQWx0ZXJuYXRp
dmUpCiAgICAgICAgIHJldHVybjsKIAogICAgIEV4Y2VwdGlvbkNvZGUgZWMgPSAwOwotICAgIFJl
ZlB0cjxSYW5nZT4gcGFyYWdyYXBoUmFuZ2VDb250YWluaW5nQ29ycmVjdGlvbiA9IG1fY29ycmVj
dGlvblBhbmVsSW5mby5yYW5nZVRvQmVSZXBsYWNlZC0+Y2xvbmVSYW5nZShlYyk7CisgICAgUmVm
UHRyPFJhbmdlPiBwYXJhZ3JhcGhSYW5nZUNvbnRhaW5pbmdDb3JyZWN0aW9uID0gbV9hbHRlcm5h
dGl2ZVRleHRJbmZvLnJhbmdlV2l0aEFsdGVybmF0aXZlLT5jbG9uZVJhbmdlKGVjKTsKICAgICBp
ZiAoZWMpCiAgICAgICAgIHJldHVybjsKIAotICAgIHNldFN0YXJ0KHBhcmFncmFwaFJhbmdlQ29u
dGFpbmluZ0NvcnJlY3Rpb24uZ2V0KCksIHN0YXJ0T2ZQYXJhZ3JhcGgobV9jb3JyZWN0aW9uUGFu
ZWxJbmZvLnJhbmdlVG9CZVJlcGxhY2VkLT5zdGFydFBvc2l0aW9uKCkpKTsKLSAgICBzZXRFbmQo
cGFyYWdyYXBoUmFuZ2VDb250YWluaW5nQ29ycmVjdGlvbi5nZXQoKSwgZW5kT2ZQYXJhZ3JhcGgo
bV9jb3JyZWN0aW9uUGFuZWxJbmZvLnJhbmdlVG9CZVJlcGxhY2VkLT5lbmRQb3NpdGlvbigpKSk7
CisgICAgc2V0U3RhcnQocGFyYWdyYXBoUmFuZ2VDb250YWluaW5nQ29ycmVjdGlvbi5nZXQoKSwg
c3RhcnRPZlBhcmFncmFwaChtX2FsdGVybmF0aXZlVGV4dEluZm8ucmFuZ2VXaXRoQWx0ZXJuYXRp
dmUtPnN0YXJ0UG9zaXRpb24oKSkpOworICAgIHNldEVuZChwYXJhZ3JhcGhSYW5nZUNvbnRhaW5p
bmdDb3JyZWN0aW9uLmdldCgpLCBlbmRPZlBhcmFncmFwaChtX2FsdGVybmF0aXZlVGV4dEluZm8u
cmFuZ2VXaXRoQWx0ZXJuYXRpdmUtPmVuZFBvc2l0aW9uKCkpKTsKIAotICAgIC8vIEFmdGVyIHdl
IHJlcGxhY2UgdGhlIHdvcmQgYXQgcmFuZ2UgcmFuZ2VUb0JlUmVwbGFjZWQsIHdlIG5lZWQgdG8g
YWRkIG1hcmtlcnMgdG8gdGhhdCByYW5nZS4KLSAgICAvLyBIb3dldmVyLCBvbmNlIHRoZSByZXBs
YWNlbWVudCB0b29rIHBsYWNlLCB0aGUgdmFsdWUgb2YgcmFuZ2VUb0JlUmVwbGFjZWQgaXMgbm90
IHZhbGlkIGFueW1vcmUuCi0gICAgLy8gU28gYmVmb3JlIHdlIGNhcnJ5IG91dCB0aGUgcmVwbGFj
ZW1lbnQsIHdlIG5lZWQgdG8gc3RvcmUgdGhlIHN0YXJ0IHBvc2l0aW9uIG9mIHJhbmdlVG9CZVJl
cGxhY2VkCisgICAgLy8gQWZ0ZXIgd2UgcmVwbGFjZSB0aGUgd29yZCBhdCByYW5nZSByYW5nZVdp
dGhBbHRlcm5hdGl2ZSwgd2UgbmVlZCB0byBhZGQgbWFya2VycyB0byB0aGF0IHJhbmdlLgorICAg
IC8vIEhvd2V2ZXIsIG9uY2UgdGhlIHJlcGxhY2VtZW50IHRvb2sgcGxhY2UsIHRoZSB2YWx1ZSBv
ZiByYW5nZVdpdGhBbHRlcm5hdGl2ZSBpcyBub3QgdmFsaWQgYW55bW9yZS4KKyAgICAvLyBTbyBi
ZWZvcmUgd2UgY2Fycnkgb3V0IHRoZSByZXBsYWNlbWVudCwgd2UgbmVlZCB0byBzdG9yZSB0aGUg
c3RhcnQgcG9zaXRpb24gb2YgcmFuZ2VXaXRoQWx0ZXJuYXRpdmUKICAgICAvLyByZWxhdGl2ZSB0
byB0aGUgc3RhcnQgcG9zaXRpb24gb2YgdGhlIGNvbnRhaW5pbmcgcGFyYWdyYXBoLiBXZSB1c2Ug
Y29ycmVjdGlvblN0YXJ0T2Zmc2V0SW5QYXJhZ3JhcGgKICAgICAvLyB0byBzdG9yZSB0aGlzIHZh
bHVlLiBJbiBvcmRlciB0byBvYnRhaW4gdGhpcyBvZmZzZXQsIHdlIG5lZWQgdG8gZmlyc3QgY3Jl
YXRlIGEgcmFuZ2UKLSAgICAvLyB3aGljaCBzcGFucyBmcm9tIHRoZSBzdGFydCBvZiBwYXJhZ3Jh
cGggdG8gdGhlIHN0YXJ0IHBvc2l0aW9uIG9mIHJhbmdlVG9CZVJlcGxhY2VkLgorICAgIC8vIHdo
aWNoIHNwYW5zIGZyb20gdGhlIHN0YXJ0IG9mIHBhcmFncmFwaCB0byB0aGUgc3RhcnQgcG9zaXRp
b24gb2YgcmFuZ2VXaXRoQWx0ZXJuYXRpdmUuCiAgICAgUmVmUHRyPFJhbmdlPiBjb3JyZWN0aW9u
U3RhcnRPZmZzZXRJblBhcmFncmFwaEFzUmFuZ2UgPSBSYW5nZTo6Y3JlYXRlKHBhcmFncmFwaFJh
bmdlQ29udGFpbmluZ0NvcnJlY3Rpb24tPnN0YXJ0Q29udGFpbmVyKGVjKS0+ZG9jdW1lbnQoKSwg
cGFyYWdyYXBoUmFuZ2VDb250YWluaW5nQ29ycmVjdGlvbi0+c3RhcnRQb3NpdGlvbigpLCBwYXJh
Z3JhcGhSYW5nZUNvbnRhaW5pbmdDb3JyZWN0aW9uLT5zdGFydFBvc2l0aW9uKCkpOwogICAgIGlm
IChlYykKICAgICAgICAgcmV0dXJuOwogCi0gICAgUG9zaXRpb24gc3RhcnRQb3NpdGlvbk9mUmFu
Z2VUb0JlUmVwbGFjZWQgPSBtX2NvcnJlY3Rpb25QYW5lbEluZm8ucmFuZ2VUb0JlUmVwbGFjZWQt
PnN0YXJ0UG9zaXRpb24oKTsKLSAgICBjb3JyZWN0aW9uU3RhcnRPZmZzZXRJblBhcmFncmFwaEFz
UmFuZ2UtPnNldEVuZChzdGFydFBvc2l0aW9uT2ZSYW5nZVRvQmVSZXBsYWNlZC5jb250YWluZXJO
b2RlKCksIHN0YXJ0UG9zaXRpb25PZlJhbmdlVG9CZVJlcGxhY2VkLmNvbXB1dGVPZmZzZXRJbkNv
bnRhaW5lck5vZGUoKSwgZWMpOworICAgIFBvc2l0aW9uIHN0YXJ0UG9zaXRpb25PZnJhbmdlV2l0
aEFsdGVybmF0aXZlID0gbV9hbHRlcm5hdGl2ZVRleHRJbmZvLnJhbmdlV2l0aEFsdGVybmF0aXZl
LT5zdGFydFBvc2l0aW9uKCk7CisgICAgY29ycmVjdGlvblN0YXJ0T2Zmc2V0SW5QYXJhZ3JhcGhB
c1JhbmdlLT5zZXRFbmQoc3RhcnRQb3NpdGlvbk9mcmFuZ2VXaXRoQWx0ZXJuYXRpdmUuY29udGFp
bmVyTm9kZSgpLCBzdGFydFBvc2l0aW9uT2ZyYW5nZVdpdGhBbHRlcm5hdGl2ZS5jb21wdXRlT2Zm
c2V0SW5Db250YWluZXJOb2RlKCksIGVjKTsKICAgICBpZiAoZWMpCiAgICAgICAgIHJldHVybjsK
IApAQCAtMjI2LDE0ICsyNDIsMTQgQEAgdm9pZCBTcGVsbGluZ0NvcnJlY3Rpb25Db250cm9sbGVy
OjphcHBseQogICAgIGludCBjb3JyZWN0aW9uU3RhcnRPZmZzZXRJblBhcmFncmFwaCA9IFRleHRJ
dGVyYXRvcjo6cmFuZ2VMZW5ndGgoY29ycmVjdGlvblN0YXJ0T2Zmc2V0SW5QYXJhZ3JhcGhBc1Jh
bmdlLmdldCgpKTsKIAogICAgIC8vIENsb25lIHRoZSByYW5nZSwgc2luY2UgdGhlIGNhbGxlciBv
ZiB0aGlzIG1ldGhvZCBtYXkgd2FudCB0byBrZWVwIHRoZSBvcmlnaW5hbCByYW5nZSBhcm91bmQu
Ci0gICAgUmVmUHRyPFJhbmdlPiByYW5nZVRvQmVSZXBsYWNlZCA9IG1fY29ycmVjdGlvblBhbmVs
SW5mby5yYW5nZVRvQmVSZXBsYWNlZC0+Y2xvbmVSYW5nZShlYyk7Ci0gICAgYXBwbHlDb21tYW5k
KFNwZWxsaW5nQ29ycmVjdGlvbkNvbW1hbmQ6OmNyZWF0ZShyYW5nZVRvQmVSZXBsYWNlZCwgbV9j
b3JyZWN0aW9uUGFuZWxJbmZvLnJlcGxhY2VtZW50U3RyaW5nKSk7CisgICAgUmVmUHRyPFJhbmdl
PiByYW5nZVdpdGhBbHRlcm5hdGl2ZSA9IG1fYWx0ZXJuYXRpdmVUZXh0SW5mby5yYW5nZVdpdGhB
bHRlcm5hdGl2ZS0+Y2xvbmVSYW5nZShlYyk7CisgICAgYXBwbHlDb21tYW5kKFNwZWxsaW5nQ29y
cmVjdGlvbkNvbW1hbmQ6OmNyZWF0ZShyYW5nZVdpdGhBbHRlcm5hdGl2ZSwgYWx0ZXJuYXRpdmUp
KTsKICAgICBzZXRFbmQocGFyYWdyYXBoUmFuZ2VDb250YWluaW5nQ29ycmVjdGlvbi5nZXQoKSwg
bV9mcmFtZS0+c2VsZWN0aW9uKCktPnNlbGVjdGlvbigpLnN0YXJ0KCkpOwotICAgIFJlZlB0cjxS
YW5nZT4gcmVwbGFjZW1lbnRSYW5nZSA9IFRleHRJdGVyYXRvcjo6c3VicmFuZ2UocGFyYWdyYXBo
UmFuZ2VDb250YWluaW5nQ29ycmVjdGlvbi5nZXQoKSwgY29ycmVjdGlvblN0YXJ0T2Zmc2V0SW5Q
YXJhZ3JhcGgsICBtX2NvcnJlY3Rpb25QYW5lbEluZm8ucmVwbGFjZW1lbnRTdHJpbmcubGVuZ3Ro
KCkpOworICAgIFJlZlB0cjxSYW5nZT4gcmVwbGFjZW1lbnRSYW5nZSA9IFRleHRJdGVyYXRvcjo6
c3VicmFuZ2UocGFyYWdyYXBoUmFuZ2VDb250YWluaW5nQ29ycmVjdGlvbi5nZXQoKSwgY29ycmVj
dGlvblN0YXJ0T2Zmc2V0SW5QYXJhZ3JhcGgsIGFsdGVybmF0aXZlLmxlbmd0aCgpKTsKICAgICBT
dHJpbmcgbmV3VGV4dCA9IHBsYWluVGV4dChyZXBsYWNlbWVudFJhbmdlLmdldCgpKTsKIAogICAg
IC8vIENoZWNrIHRvIHNlZSBpZiByZXBsYWNlbWVudCBzdWNjZWVkZWQuCi0gICAgaWYgKG5ld1Rl
eHQgIT0gbV9jb3JyZWN0aW9uUGFuZWxJbmZvLnJlcGxhY2VtZW50U3RyaW5nKQorICAgIGlmIChu
ZXdUZXh0ICE9IGFsdGVybmF0aXZlKQogICAgICAgICByZXR1cm47CiAKICAgICBEb2N1bWVudE1h
cmtlckNvbnRyb2xsZXIqIG1hcmtlcnMgPSByZXBsYWNlbWVudFJhbmdlLT5zdGFydENvbnRhaW5l
cigpLT5kb2N1bWVudCgpLT5tYXJrZXJzKCk7CkBAIC0yNDEsMzQgKzI1NywzNCBAQCB2b2lkIFNw
ZWxsaW5nQ29ycmVjdGlvbkNvbnRyb2xsZXI6OmFwcGx5CiAgICAgZm9yIChzaXplX3QgaSA9IDA7
IGkgPCBzaXplOyArK2kpIHsKICAgICAgICAgRG9jdW1lbnRNYXJrZXI6Ok1hcmtlclR5cGUgbWFy
a2VyVHlwZSA9IG1hcmtlclR5cGVzVG9BZGRbaV07CiAgICAgICAgIFN0cmluZyBkZXNjcmlwdGlv
bjsKLSAgICAgICAgaWYgKG1fY29ycmVjdGlvblBhbmVsSW5mby5wYW5lbFR5cGUgIT0gQ29ycmVj
dGlvblBhbmVsSW5mbzo6UGFuZWxUeXBlUmV2ZXJzaW9uICYmIChtYXJrZXJUeXBlID09IERvY3Vt
ZW50TWFya2VyOjpSZXBsYWNlbWVudCB8fCBtYXJrZXJUeXBlID09IERvY3VtZW50TWFya2VyOjpB
dXRvY29ycmVjdGVkKSkKLSAgICAgICAgICAgIGRlc2NyaXB0aW9uID0gbV9jb3JyZWN0aW9uUGFu
ZWxJbmZvLnJlcGxhY2VkU3RyaW5nOworICAgICAgICBpZiAobV9hbHRlcm5hdGl2ZVRleHRJbmZv
LnR5cGUgIT0gQWx0ZXJuYXRpdmVUZXh0VHlwZVJldmVyc2lvbiAmJiAobWFya2VyVHlwZSA9PSBE
b2N1bWVudE1hcmtlcjo6UmVwbGFjZW1lbnQgfHwgbWFya2VyVHlwZSA9PSBEb2N1bWVudE1hcmtl
cjo6QXV0b2NvcnJlY3RlZCkpCisgICAgICAgICAgICBkZXNjcmlwdGlvbiA9IG1fYWx0ZXJuYXRp
dmVUZXh0SW5mby5vcmlnaW5hbFRleHQ7CiAgICAgICAgIG1hcmtlcnMtPmFkZE1hcmtlcihyZXBs
YWNlbWVudFJhbmdlLmdldCgpLCBtYXJrZXJUeXBlLCBkZXNjcmlwdGlvbik7CiAgICAgfQogfQog
Ci1ib29sIFNwZWxsaW5nQ29ycmVjdGlvbkNvbnRyb2xsZXI6OmFwcGx5QXV0b2NvcnJlY3Rpb25C
ZWZvcmVUeXBpbmdJZkFwcHJvcHJpYXRlKCkKK2Jvb2wgQWx0ZXJuYXRpdmVUZXh0Q29udHJvbGxl
cjo6YXBwbHlBdXRvY29ycmVjdGlvbkJlZm9yZVR5cGluZ0lmQXBwcm9wcmlhdGUoKQogewotICAg
IGlmICghbV9jb3JyZWN0aW9uUGFuZWxJbmZvLnJhbmdlVG9CZVJlcGxhY2VkIHx8ICFtX2NvcnJl
Y3Rpb25QYW5lbEluZm8uaXNBY3RpdmUpCisgICAgaWYgKCFtX2FsdGVybmF0aXZlVGV4dEluZm8u
cmFuZ2VXaXRoQWx0ZXJuYXRpdmUgfHwgIW1fYWx0ZXJuYXRpdmVUZXh0SW5mby5pc0FjdGl2ZSkK
ICAgICAgICAgcmV0dXJuIGZhbHNlOwogCi0gICAgaWYgKG1fY29ycmVjdGlvblBhbmVsSW5mby5w
YW5lbFR5cGUgIT0gQ29ycmVjdGlvblBhbmVsSW5mbzo6UGFuZWxUeXBlQ29ycmVjdGlvbikKKyAg
ICBpZiAobV9hbHRlcm5hdGl2ZVRleHRJbmZvLnR5cGUgIT0gQWx0ZXJuYXRpdmVUZXh0VHlwZUNv
cnJlY3Rpb24pCiAgICAgICAgIHJldHVybiBmYWxzZTsKIAogICAgIFBvc2l0aW9uIGNhcmV0UG9z
aXRpb24gPSBtX2ZyYW1lLT5zZWxlY3Rpb24oKS0+c2VsZWN0aW9uKCkuc3RhcnQoKTsKIAotICAg
IGlmIChtX2NvcnJlY3Rpb25QYW5lbEluZm8ucmFuZ2VUb0JlUmVwbGFjZWQtPmVuZFBvc2l0aW9u
KCkgPT0gY2FyZXRQb3NpdGlvbikgewotICAgICAgICBoYW5kbGVDb3JyZWN0aW9uUGFuZWxSZXN1
bHQoZGlzbWlzc1Nvb24oUmVhc29uRm9yRGlzbWlzc2luZ0NvcnJlY3Rpb25QYW5lbEFjY2VwdGVk
KSk7CisgICAgaWYgKG1fYWx0ZXJuYXRpdmVUZXh0SW5mby5yYW5nZVdpdGhBbHRlcm5hdGl2ZS0+
ZW5kUG9zaXRpb24oKSA9PSBjYXJldFBvc2l0aW9uKSB7CisgICAgICAgIGhhbmRsZUFsdGVybmF0
aXZlVGV4dFVJUmVzdWx0KGRpc21pc3NTb29uKFJlYXNvbkZvckRpc21pc3NpbmdBbHRlcm5hdGl2
ZVRleHRBY2NlcHRlZCkpOwogICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICB9IAogICAgIAogICAg
IC8vIFBlbmRpbmcgY29ycmVjdGlvbiBzaG91bGQgYWx3YXlzIGJlIHdoZXJlIGNhcmV0IGlzLiBC
dXQgaW4gY2FzZSB0aGlzIGlzIG5vdCBhbHdheXMgdHJ1ZSwgd2Ugc3RpbGwgd2FudCB0byBkaXNt
aXNzIHRoZSBwYW5lbCB3aXRob3V0IGFjY2VwdGluZyB0aGUgY29ycmVjdGlvbi4KLSAgICBBU1NF
UlQobV9jb3JyZWN0aW9uUGFuZWxJbmZvLnJhbmdlVG9CZVJlcGxhY2VkLT5lbmRQb3NpdGlvbigp
ID09IGNhcmV0UG9zaXRpb24pOwotICAgIGRpc21pc3MoUmVhc29uRm9yRGlzbWlzc2luZ0NvcnJl
Y3Rpb25QYW5lbElnbm9yZWQpOworICAgIEFTU0VSVChtX2FsdGVybmF0aXZlVGV4dEluZm8ucmFu
Z2VXaXRoQWx0ZXJuYXRpdmUtPmVuZFBvc2l0aW9uKCkgPT0gY2FyZXRQb3NpdGlvbik7CisgICAg
ZGlzbWlzcyhSZWFzb25Gb3JEaXNtaXNzaW5nQWx0ZXJuYXRpdmVUZXh0SWdub3JlZCk7CiAgICAg
cmV0dXJuIGZhbHNlOwogfQogCi12b2lkIFNwZWxsaW5nQ29ycmVjdGlvbkNvbnRyb2xsZXI6OnJl
c3BvbmRUb1VuYXBwbGllZFNwZWxsQ29ycmVjdGlvbihjb25zdCBWaXNpYmxlU2VsZWN0aW9uJiBz
ZWxlY3Rpb25PZkNvcnJlY3RlZCwgY29uc3QgU3RyaW5nJiBjb3JyZWN0ZWQsIGNvbnN0IFN0cmlu
ZyYgY29ycmVjdGlvbikKK3ZvaWQgQWx0ZXJuYXRpdmVUZXh0Q29udHJvbGxlcjo6cmVzcG9uZFRv
VW5hcHBsaWVkU3BlbGxDb3JyZWN0aW9uKGNvbnN0IFZpc2libGVTZWxlY3Rpb24mIHNlbGVjdGlv
bk9mQ29ycmVjdGVkLCBjb25zdCBTdHJpbmcmIGNvcnJlY3RlZCwgY29uc3QgU3RyaW5nJiBjb3Jy
ZWN0aW9uKQogewogICAgIGNsaWVudCgpLT5yZWNvcmRBdXRvY29ycmVjdGlvblJlc3BvbnNlKEVk
aXRvckNsaWVudDo6QXV0b2NvcnJlY3Rpb25SZXZlcnRlZCwgY29ycmVjdGVkLCBjb3JyZWN0aW9u
KTsKICAgICBtX2ZyYW1lLT5kb2N1bWVudCgpLT51cGRhdGVMYXlvdXQoKTsKQEAgLTI4MSwxMSAr
Mjk3LDExIEBAIHZvaWQgU3BlbGxpbmdDb3JyZWN0aW9uQ29udHJvbGxlcjo6cmVzcG8KICAgICBt
YXJrZXJzLT5hZGRNYXJrZXIocmFuZ2UuZ2V0KCksIERvY3VtZW50TWFya2VyOjpTcGVsbENoZWNr
aW5nRXhlbXB0aW9uKTsKIH0KIAotdm9pZCBTcGVsbGluZ0NvcnJlY3Rpb25Db250cm9sbGVyOjpj
b3JyZWN0aW9uUGFuZWxUaW1lckZpcmVkKFRpbWVyPFNwZWxsaW5nQ29ycmVjdGlvbkNvbnRyb2xs
ZXI+KikKK3ZvaWQgQWx0ZXJuYXRpdmVUZXh0Q29udHJvbGxlcjo6dGltZXJGaXJlZChUaW1lcjxB
bHRlcm5hdGl2ZVRleHRDb250cm9sbGVyPiopCiB7Ci0gICAgbV9jb3JyZWN0aW9uUGFuZWxJc0Rp
c21pc3NlZEJ5RWRpdG9yID0gZmFsc2U7Ci0gICAgc3dpdGNoIChtX2NvcnJlY3Rpb25QYW5lbElu
Zm8ucGFuZWxUeXBlKSB7Ci0gICAgY2FzZSBDb3JyZWN0aW9uUGFuZWxJbmZvOjpQYW5lbFR5cGVD
b3JyZWN0aW9uOiB7CisgICAgbV9pc0Rpc21pc3NlZEJ5RWRpdGluZyA9IGZhbHNlOworICAgIHN3
aXRjaCAobV9hbHRlcm5hdGl2ZVRleHRJbmZvLnR5cGUpIHsKKyAgICBjYXNlIEFsdGVybmF0aXZl
VGV4dFR5cGVDb3JyZWN0aW9uOiB7CiAgICAgICAgIFZpc2libGVTZWxlY3Rpb24gc2VsZWN0aW9u
KG1fZnJhbWUtPnNlbGVjdGlvbigpLT5zZWxlY3Rpb24oKSk7CiAgICAgICAgIFZpc2libGVQb3Np
dGlvbiBzdGFydChzZWxlY3Rpb24uc3RhcnQoKSwgc2VsZWN0aW9uLmFmZmluaXR5KCkpOwogICAg
ICAgICBWaXNpYmxlUG9zaXRpb24gcCA9IHN0YXJ0T2ZXb3JkKHN0YXJ0LCBMZWZ0V29yZElmT25C
b3VuZGFyeSk7CkBAIC0yOTMsNzYgKzMwOSw3NSBAQCB2b2lkIFNwZWxsaW5nQ29ycmVjdGlvbkNv
bnRyb2xsZXI6OmNvcnJlCiAgICAgICAgIG1fZnJhbWUtPmVkaXRvcigpLT5tYXJrQWxsTWlzc3Bl
bGxpbmdzQW5kQmFkR3JhbW1hckluUmFuZ2VzKFRleHRDaGVja2luZ1R5cGVTcGVsbGluZyB8IFRl
eHRDaGVja2luZ1R5cGVTaG93Q29ycmVjdGlvblBhbmVsLCBhZGphY2VudFdvcmRzLnRvTm9ybWFs
aXplZFJhbmdlKCkuZ2V0KCksIDApOwogICAgIH0KICAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBD
b3JyZWN0aW9uUGFuZWxJbmZvOjpQYW5lbFR5cGVSZXZlcnNpb246IHsKLSAgICAgICAgaWYgKCFt
X2NvcnJlY3Rpb25QYW5lbEluZm8ucmFuZ2VUb0JlUmVwbGFjZWQpCisgICAgY2FzZSBBbHRlcm5h
dGl2ZVRleHRUeXBlUmV2ZXJzaW9uOiB7CisgICAgICAgIGlmICghbV9hbHRlcm5hdGl2ZVRleHRJ
bmZvLnJhbmdlV2l0aEFsdGVybmF0aXZlKQogICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIG1f
Y29ycmVjdGlvblBhbmVsSW5mby5pc0FjdGl2ZSA9IHRydWU7Ci0gICAgICAgIG1fY29ycmVjdGlv
blBhbmVsSW5mby5yZXBsYWNlZFN0cmluZyA9IHBsYWluVGV4dChtX2NvcnJlY3Rpb25QYW5lbElu
Zm8ucmFuZ2VUb0JlUmVwbGFjZWQuZ2V0KCkpOwotICAgICAgICBGbG9hdFJlY3QgYm91bmRpbmdC
b3ggPSByb290Vmlld1JlY3RGb3JSYW5nZShtX2NvcnJlY3Rpb25QYW5lbEluZm8ucmFuZ2VUb0Jl
UmVwbGFjZWQuZ2V0KCkpOwotICAgICAgICBpZiAoIWJvdW5kaW5nQm94LmlzRW1wdHkoKSkKLSAg
ICAgICAgICAgIGNsaWVudCgpLT5zaG93Q29ycmVjdGlvblBhbmVsKG1fY29ycmVjdGlvblBhbmVs
SW5mby5wYW5lbFR5cGUsIGJvdW5kaW5nQm94LCBtX2NvcnJlY3Rpb25QYW5lbEluZm8ucmVwbGFj
ZWRTdHJpbmcsIG1fY29ycmVjdGlvblBhbmVsSW5mby5yZXBsYWNlbWVudFN0cmluZywgVmVjdG9y
PFN0cmluZz4oKSk7CisgICAgICAgIG1fYWx0ZXJuYXRpdmVUZXh0SW5mby5pc0FjdGl2ZSA9IHRy
dWU7CisgICAgICAgIG1fYWx0ZXJuYXRpdmVUZXh0SW5mby5vcmlnaW5hbFRleHQgPSBwbGFpblRl
eHQobV9hbHRlcm5hdGl2ZVRleHRJbmZvLnJhbmdlV2l0aEFsdGVybmF0aXZlLmdldCgpKTsKKyAg
ICAgICAgRmxvYXRSZWN0IGJvdW5kaW5nQm94ID0gcm9vdFZpZXdSZWN0Rm9yUmFuZ2UobV9hbHRl
cm5hdGl2ZVRleHRJbmZvLnJhbmdlV2l0aEFsdGVybmF0aXZlLmdldCgpKTsKKyAgICAgICAgaWYg
KCFib3VuZGluZ0JveC5pc0VtcHR5KCkpIHsKKyAgICAgICAgICAgIGNvbnN0IEF1dG9jb3JyZWN0
aW9uQWx0ZXJuYXRpdmVEZXRhaWxzKiBkZXRhaWxzID0gc3RhdGljX2Nhc3Q8Y29uc3QgQXV0b2Nv
cnJlY3Rpb25BbHRlcm5hdGl2ZURldGFpbHMqPihtX2FsdGVybmF0aXZlVGV4dEluZm8uZGV0YWls
cy5nZXQoKSk7CisgICAgICAgICAgICBjbGllbnQoKS0+c2hvd0NvcnJlY3Rpb25QYW5lbChtX2Fs
dGVybmF0aXZlVGV4dEluZm8udHlwZSwgYm91bmRpbmdCb3gsIG1fYWx0ZXJuYXRpdmVUZXh0SW5m
by5vcmlnaW5hbFRleHQsIGRldGFpbHMtPnJlcGxhY2VtZW50U3RyaW5nKCksIFZlY3RvcjxTdHJp
bmc+KCkpOworICAgICAgICB9CiAgICAgfQogICAgICAgICBicmVhazsKLSAgICBjYXNlIENvcnJl
Y3Rpb25QYW5lbEluZm86OlBhbmVsVHlwZVNwZWxsaW5nU3VnZ2VzdGlvbnM6IHsKLSAgICAgICAg
aWYgKCFtX2NvcnJlY3Rpb25QYW5lbEluZm8ucmFuZ2VUb0JlUmVwbGFjZWQgfHwgcGxhaW5UZXh0
KG1fY29ycmVjdGlvblBhbmVsSW5mby5yYW5nZVRvQmVSZXBsYWNlZC5nZXQoKSkgIT0gbV9jb3Jy
ZWN0aW9uUGFuZWxJbmZvLnJlcGxhY2VkU3RyaW5nKQorICAgIGNhc2UgQWx0ZXJuYXRpdmVUZXh0
VHlwZVNwZWxsaW5nU3VnZ2VzdGlvbnM6IHsKKyAgICAgICAgaWYgKCFtX2FsdGVybmF0aXZlVGV4
dEluZm8ucmFuZ2VXaXRoQWx0ZXJuYXRpdmUgfHwgcGxhaW5UZXh0KG1fYWx0ZXJuYXRpdmVUZXh0
SW5mby5yYW5nZVdpdGhBbHRlcm5hdGl2ZS5nZXQoKSkgIT0gbV9hbHRlcm5hdGl2ZVRleHRJbmZv
Lm9yaWdpbmFsVGV4dCkKICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBTdHJpbmcgcGFyYWdy
YXBoVGV4dCA9IHBsYWluVGV4dChUZXh0Q2hlY2tpbmdQYXJhZ3JhcGgobV9jb3JyZWN0aW9uUGFu
ZWxJbmZvLnJhbmdlVG9CZVJlcGxhY2VkKS5wYXJhZ3JhcGhSYW5nZSgpLmdldCgpKTsKKyAgICAg
ICAgU3RyaW5nIHBhcmFncmFwaFRleHQgPSBwbGFpblRleHQoVGV4dENoZWNraW5nUGFyYWdyYXBo
KG1fYWx0ZXJuYXRpdmVUZXh0SW5mby5yYW5nZVdpdGhBbHRlcm5hdGl2ZSkucGFyYWdyYXBoUmFu
Z2UoKS5nZXQoKSk7CiAgICAgICAgIFZlY3RvcjxTdHJpbmc+IHN1Z2dlc3Rpb25zOwotICAgICAg
ICB0ZXh0Q2hlY2tlcigpLT5nZXRHdWVzc2VzRm9yV29yZChtX2NvcnJlY3Rpb25QYW5lbEluZm8u
cmVwbGFjZWRTdHJpbmcsIHBhcmFncmFwaFRleHQsIHN1Z2dlc3Rpb25zKTsKKyAgICAgICAgdGV4
dENoZWNrZXIoKS0+Z2V0R3Vlc3Nlc0ZvcldvcmQobV9hbHRlcm5hdGl2ZVRleHRJbmZvLm9yaWdp
bmFsVGV4dCwgcGFyYWdyYXBoVGV4dCwgc3VnZ2VzdGlvbnMpOwogICAgICAgICBpZiAoc3VnZ2Vz
dGlvbnMuaXNFbXB0eSgpKSB7Ci0gICAgICAgICAgICBtX2NvcnJlY3Rpb25QYW5lbEluZm8ucmFu
Z2VUb0JlUmVwbGFjZWQuY2xlYXIoKTsKKyAgICAgICAgICAgIG1fYWx0ZXJuYXRpdmVUZXh0SW5m
by5yYW5nZVdpdGhBbHRlcm5hdGl2ZS5jbGVhcigpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAg
ICAgIH0KICAgICAgICAgU3RyaW5nIHRvcFN1Z2dlc3Rpb24gPSBzdWdnZXN0aW9ucy5maXJzdCgp
OwogICAgICAgICBzdWdnZXN0aW9ucy5yZW1vdmUoMCk7Ci0gICAgICAgIG1fY29ycmVjdGlvblBh
bmVsSW5mby5pc0FjdGl2ZSA9IHRydWU7Ci0gICAgICAgIEZsb2F0UmVjdCBib3VuZGluZ0JveCA9
IHJvb3RWaWV3UmVjdEZvclJhbmdlKG1fY29ycmVjdGlvblBhbmVsSW5mby5yYW5nZVRvQmVSZXBs
YWNlZC5nZXQoKSk7CisgICAgICAgIG1fYWx0ZXJuYXRpdmVUZXh0SW5mby5pc0FjdGl2ZSA9IHRy
dWU7CisgICAgICAgIEZsb2F0UmVjdCBib3VuZGluZ0JveCA9IHJvb3RWaWV3UmVjdEZvclJhbmdl
KG1fYWx0ZXJuYXRpdmVUZXh0SW5mby5yYW5nZVdpdGhBbHRlcm5hdGl2ZS5nZXQoKSk7CiAgICAg
ICAgIGlmICghYm91bmRpbmdCb3guaXNFbXB0eSgpKQotICAgICAgICAgICAgY2xpZW50KCktPnNo
b3dDb3JyZWN0aW9uUGFuZWwobV9jb3JyZWN0aW9uUGFuZWxJbmZvLnBhbmVsVHlwZSwgYm91bmRp
bmdCb3gsIG1fY29ycmVjdGlvblBhbmVsSW5mby5yZXBsYWNlZFN0cmluZywgdG9wU3VnZ2VzdGlv
biwgc3VnZ2VzdGlvbnMpOworICAgICAgICAgICAgY2xpZW50KCktPnNob3dDb3JyZWN0aW9uUGFu
ZWwobV9hbHRlcm5hdGl2ZVRleHRJbmZvLnR5cGUsIGJvdW5kaW5nQm94LCBtX2FsdGVybmF0aXZl
VGV4dEluZm8ub3JpZ2luYWxUZXh0LCB0b3BTdWdnZXN0aW9uLCBzdWdnZXN0aW9ucyk7CiAgICAg
fQogICAgICAgICBicmVhazsKICAgICB9CiB9CiAKLXZvaWQgU3BlbGxpbmdDb3JyZWN0aW9uQ29u
dHJvbGxlcjo6aGFuZGxlQ29ycmVjdGlvblBhbmVsUmVzdWx0KGNvbnN0IFN0cmluZyYgY29ycmVj
dGlvbikKK3ZvaWQgQWx0ZXJuYXRpdmVUZXh0Q29udHJvbGxlcjo6aGFuZGxlQWx0ZXJuYXRpdmVU
ZXh0VUlSZXN1bHQoY29uc3QgU3RyaW5nJiByZXN1bHQpCiB7Ci0gICAgUmFuZ2UqIHJlcGxhY2Vk
UmFuZ2UgPSBtX2NvcnJlY3Rpb25QYW5lbEluZm8ucmFuZ2VUb0JlUmVwbGFjZWQuZ2V0KCk7Cisg
ICAgUmFuZ2UqIHJlcGxhY2VkUmFuZ2UgPSBtX2FsdGVybmF0aXZlVGV4dEluZm8ucmFuZ2VXaXRo
QWx0ZXJuYXRpdmUuZ2V0KCk7CiAgICAgaWYgKCFyZXBsYWNlZFJhbmdlIHx8IG1fZnJhbWUtPmRv
Y3VtZW50KCkgIT0gcmVwbGFjZWRSYW5nZS0+b3duZXJEb2N1bWVudCgpKQogICAgICAgICByZXR1
cm47CiAKLSAgICBTdHJpbmcgY3VycmVudFdvcmQgPSBwbGFpblRleHQobV9jb3JyZWN0aW9uUGFu
ZWxJbmZvLnJhbmdlVG9CZVJlcGxhY2VkLmdldCgpKTsKKyAgICBTdHJpbmcgY3VycmVudFdvcmQg
PSBwbGFpblRleHQobV9hbHRlcm5hdGl2ZVRleHRJbmZvLnJhbmdlV2l0aEFsdGVybmF0aXZlLmdl
dCgpKTsKICAgICAvLyBDaGVjayB0byBzZWUgaWYgdGhlIHdvcmQgd2UgYXJlIGFib3V0IHRvIGNv
cnJlY3QgaGFzIGJlZW4gY2hhbmdlZCBiZXR3ZWVuIHRpbWVyIGZpcmluZyBhbmQgY2FsbGJhY2sg
YmVpbmcgdHJpZ2dlcmVkLgotICAgIGlmIChjdXJyZW50V29yZCAhPSBtX2NvcnJlY3Rpb25QYW5l
bEluZm8ucmVwbGFjZWRTdHJpbmcpCisgICAgaWYgKGN1cnJlbnRXb3JkICE9IG1fYWx0ZXJuYXRp
dmVUZXh0SW5mby5vcmlnaW5hbFRleHQpCiAgICAgICAgIHJldHVybjsKIAotICAgIG1fY29ycmVj
dGlvblBhbmVsSW5mby5pc0FjdGl2ZSA9IGZhbHNlOworICAgIG1fYWx0ZXJuYXRpdmVUZXh0SW5m
by5pc0FjdGl2ZSA9IGZhbHNlOwogCi0gICAgc3dpdGNoIChtX2NvcnJlY3Rpb25QYW5lbEluZm8u
cGFuZWxUeXBlKSB7Ci0gICAgY2FzZSBDb3JyZWN0aW9uUGFuZWxJbmZvOjpQYW5lbFR5cGVDb3Jy
ZWN0aW9uOgotICAgICAgICBpZiAoY29ycmVjdGlvbi5sZW5ndGgoKSkgewotICAgICAgICAgICAg
bV9jb3JyZWN0aW9uUGFuZWxJbmZvLnJlcGxhY2VtZW50U3RyaW5nID0gY29ycmVjdGlvbjsKLSAg
ICAgICAgICAgIGFwcGx5Q29ycmVjdGlvblBhbmVsSW5mbyhtYXJrZXJUeXBlc0ZvckF1dG9jb3Jy
ZWN0aW9uKCkpOwotICAgICAgICB9IGVsc2UgaWYgKCFtX2NvcnJlY3Rpb25QYW5lbElzRGlzbWlz
c2VkQnlFZGl0b3IpCi0gICAgICAgICAgICByZXBsYWNlZFJhbmdlLT5zdGFydENvbnRhaW5lcigp
LT5kb2N1bWVudCgpLT5tYXJrZXJzKCktPmFkZE1hcmtlcihyZXBsYWNlZFJhbmdlLCBEb2N1bWVu
dE1hcmtlcjo6UmVqZWN0ZWRDb3JyZWN0aW9uLCBtX2NvcnJlY3Rpb25QYW5lbEluZm8ucmVwbGFj
ZWRTdHJpbmcpOworICAgIHN3aXRjaCAobV9hbHRlcm5hdGl2ZVRleHRJbmZvLnR5cGUpIHsKKyAg
ICBjYXNlIEFsdGVybmF0aXZlVGV4dFR5cGVDb3JyZWN0aW9uOgorICAgICAgICBpZiAocmVzdWx0
Lmxlbmd0aCgpKQorICAgICAgICAgICAgYXBwbHlBbHRlcm5hdGl2ZVRleHQocmVzdWx0LCBtYXJr
ZXJUeXBlc0ZvckF1dG9jb3JyZWN0aW9uKCkpOworICAgICAgICBlbHNlIGlmICghbV9pc0Rpc21p
c3NlZEJ5RWRpdGluZykKKyAgICAgICAgICAgIHJlcGxhY2VkUmFuZ2UtPnN0YXJ0Q29udGFpbmVy
KCktPmRvY3VtZW50KCktPm1hcmtlcnMoKS0+YWRkTWFya2VyKHJlcGxhY2VkUmFuZ2UsIERvY3Vt
ZW50TWFya2VyOjpSZWplY3RlZENvcnJlY3Rpb24sIG1fYWx0ZXJuYXRpdmVUZXh0SW5mby5vcmln
aW5hbFRleHQpOwogICAgICAgICBicmVhazsKLSAgICBjYXNlIENvcnJlY3Rpb25QYW5lbEluZm86
OlBhbmVsVHlwZVJldmVyc2lvbjoKLSAgICBjYXNlIENvcnJlY3Rpb25QYW5lbEluZm86OlBhbmVs
VHlwZVNwZWxsaW5nU3VnZ2VzdGlvbnM6Ci0gICAgICAgIGlmIChjb3JyZWN0aW9uLmxlbmd0aCgp
KSB7Ci0gICAgICAgICAgICBtX2NvcnJlY3Rpb25QYW5lbEluZm8ucmVwbGFjZW1lbnRTdHJpbmcg
PSBjb3JyZWN0aW9uOwotICAgICAgICAgICAgYXBwbHlDb3JyZWN0aW9uUGFuZWxJbmZvKG1hcmtl
clR5cGVzRm9yUmVwbGFjZW1lbnQoKSk7Ci0gICAgICAgIH0KKyAgICBjYXNlIEFsdGVybmF0aXZl
VGV4dFR5cGVSZXZlcnNpb246CisgICAgY2FzZSBBbHRlcm5hdGl2ZVRleHRUeXBlU3BlbGxpbmdT
dWdnZXN0aW9uczoKKyAgICAgICAgaWYgKHJlc3VsdC5sZW5ndGgoKSkKKyAgICAgICAgICAgIGFw
cGx5QWx0ZXJuYXRpdmVUZXh0KHJlc3VsdCwgbWFya2VyVHlwZXNGb3JSZXBsYWNlbWVudCgpKTsK
ICAgICAgICAgYnJlYWs7CiAgICAgfQogCi0gICAgbV9jb3JyZWN0aW9uUGFuZWxJbmZvLnJhbmdl
VG9CZVJlcGxhY2VkLmNsZWFyKCk7CisgICAgbV9hbHRlcm5hdGl2ZVRleHRJbmZvLnJhbmdlV2l0
aEFsdGVybmF0aXZlLmNsZWFyKCk7CiB9CiAKLWJvb2wgU3BlbGxpbmdDb3JyZWN0aW9uQ29udHJv
bGxlcjo6aXNBdXRvbWF0aWNTcGVsbGluZ0NvcnJlY3Rpb25FbmFibGVkKCkKK2Jvb2wgQWx0ZXJu
YXRpdmVUZXh0Q29udHJvbGxlcjo6aXNBdXRvbWF0aWNTcGVsbGluZ0NvcnJlY3Rpb25FbmFibGVk
KCkKIHsKICAgICByZXR1cm4gY2xpZW50KCkgJiYgY2xpZW50KCktPmlzQXV0b21hdGljU3BlbGxp
bmdDb3JyZWN0aW9uRW5hYmxlZCgpOwogfQogCi1GbG9hdFJlY3QgU3BlbGxpbmdDb3JyZWN0aW9u
Q29udHJvbGxlcjo6cm9vdFZpZXdSZWN0Rm9yUmFuZ2UoY29uc3QgUmFuZ2UqIHJhbmdlKSBjb25z
dAorRmxvYXRSZWN0IEFsdGVybmF0aXZlVGV4dENvbnRyb2xsZXI6OnJvb3RWaWV3UmVjdEZvclJh
bmdlKGNvbnN0IFJhbmdlKiByYW5nZSkgY29uc3QKIHsKICAgICBGcmFtZVZpZXcqIHZpZXcgPSBt
X2ZyYW1lLT52aWV3KCk7CiAgICAgaWYgKCF2aWV3KQpAQCAtMzc2LDcgKzM5MSw3IEBAIEZsb2F0
UmVjdCBTcGVsbGluZ0NvcnJlY3Rpb25Db250cm9sbGVyOjoKICAgICByZXR1cm4gdmlldy0+Y29u
dGVudHNUb1Jvb3RWaWV3KEludFJlY3QoYm91bmRpbmdSZWN0KSk7CiB9ICAgICAgICAKIAotdm9p
ZCBTcGVsbGluZ0NvcnJlY3Rpb25Db250cm9sbGVyOjpyZXNwb25kVG9DaGFuZ2VkU2VsZWN0aW9u
KGNvbnN0IFZpc2libGVTZWxlY3Rpb24mIG9sZFNlbGVjdGlvbikKK3ZvaWQgQWx0ZXJuYXRpdmVU
ZXh0Q29udHJvbGxlcjo6cmVzcG9uZFRvQ2hhbmdlZFNlbGVjdGlvbihjb25zdCBWaXNpYmxlU2Vs
ZWN0aW9uJiBvbGRTZWxlY3Rpb24pCiB7CiAgICAgVmlzaWJsZVNlbGVjdGlvbiBjdXJyZW50U2Vs
ZWN0aW9uKG1fZnJhbWUtPnNlbGVjdGlvbigpLT5zZWxlY3Rpb24oKSk7CiAgICAgLy8gV2hlbiB1
c2VyIG1vdmVzIGNhcmV0IHRvIHRoZSBlbmQgb2YgYXV0b2NvcnJlY3RlZCB3b3JkIGFuZCBwYXVz
ZXMsIHdlIHNob3cgdGhlIHBhbmVsCkBAIC00MTQsMjAgKzQyOSwyMCBAQCB2b2lkIFNwZWxsaW5n
Q29ycmVjdGlvbkNvbnRyb2xsZXI6OnJlc3BvCiAgICAgICAgIGlmICghY3VycmVudFdvcmQubGVu
Z3RoKCkpCiAgICAgICAgICAgICBjb250aW51ZTsKIAotICAgICAgICBtX2NvcnJlY3Rpb25QYW5l
bEluZm8ucmFuZ2VUb0JlUmVwbGFjZWQgPSB3b3JkUmFuZ2U7Ci0gICAgICAgIG1fY29ycmVjdGlv
blBhbmVsSW5mby5yZXBsYWNlZFN0cmluZyA9IGN1cnJlbnRXb3JkOworICAgICAgICBtX2FsdGVy
bmF0aXZlVGV4dEluZm8ucmFuZ2VXaXRoQWx0ZXJuYXRpdmUgPSB3b3JkUmFuZ2U7CisgICAgICAg
IG1fYWx0ZXJuYXRpdmVUZXh0SW5mby5vcmlnaW5hbFRleHQgPSBjdXJyZW50V29yZDsKICAgICAg
ICAgaWYgKG1hcmtlci0+dHlwZSgpID09IERvY3VtZW50TWFya2VyOjpTcGVsbGluZykKLSAgICAg
ICAgICAgIHN0YXJ0Q29ycmVjdGlvblBhbmVsVGltZXIoQ29ycmVjdGlvblBhbmVsSW5mbzo6UGFu
ZWxUeXBlU3BlbGxpbmdTdWdnZXN0aW9ucyk7CisgICAgICAgICAgICBzdGFydEFsdGVybmF0aXZl
VGV4dFVJVGltZXIoQWx0ZXJuYXRpdmVUZXh0VHlwZVNwZWxsaW5nU3VnZ2VzdGlvbnMpOwogICAg
ICAgICBlbHNlIHsKLSAgICAgICAgICAgIG1fY29ycmVjdGlvblBhbmVsSW5mby5yZXBsYWNlbWVu
dFN0cmluZyA9IG1hcmtlci0+ZGVzY3JpcHRpb24oKTsKLSAgICAgICAgICAgIHN0YXJ0Q29ycmVj
dGlvblBhbmVsVGltZXIoQ29ycmVjdGlvblBhbmVsSW5mbzo6UGFuZWxUeXBlUmV2ZXJzaW9uKTsK
KyAgICAgICAgICAgIG1fYWx0ZXJuYXRpdmVUZXh0SW5mby5kZXRhaWxzID0gQXV0b2NvcnJlY3Rp
b25BbHRlcm5hdGl2ZURldGFpbHM6OmNyZWF0ZShtYXJrZXItPmRlc2NyaXB0aW9uKCkpOworICAg
ICAgICAgICAgc3RhcnRBbHRlcm5hdGl2ZVRleHRVSVRpbWVyKEFsdGVybmF0aXZlVGV4dFR5cGVS
ZXZlcnNpb24pOwogICAgICAgICB9CiAKICAgICAgICAgYnJlYWs7CiAgICAgfQogfQogCi12b2lk
IFNwZWxsaW5nQ29ycmVjdGlvbkNvbnRyb2xsZXI6OnJlc3BvbmRUb0FwcGxpZWRFZGl0aW5nKENv
bXBvc2l0ZUVkaXRDb21tYW5kKiBjb21tYW5kKQordm9pZCBBbHRlcm5hdGl2ZVRleHRDb250cm9s
bGVyOjpyZXNwb25kVG9BcHBsaWVkRWRpdGluZyhDb21wb3NpdGVFZGl0Q29tbWFuZCogY29tbWFu
ZCkKIHsKICAgICBpZiAoY29tbWFuZC0+aXNUb3BMZXZlbENvbW1hbmQoKSAmJiAhY29tbWFuZC0+
c2hvdWxkUmV0YWluQXV0b2NvcnJlY3Rpb25JbmRpY2F0b3IoKSkKICAgICAgICAgbV9mcmFtZS0+
ZG9jdW1lbnQoKS0+bWFya2VycygpLT5yZW1vdmVNYXJrZXJzKERvY3VtZW50TWFya2VyOjpDb3Jy
ZWN0aW9uSW5kaWNhdG9yKTsKQEAgLTQzNiw3ICs0NTEsNyBAQCB2b2lkIFNwZWxsaW5nQ29ycmVj
dGlvbkNvbnRyb2xsZXI6OnJlc3BvCiAgICAgbV9vcmlnaW5hbFN0cmluZ0Zvckxhc3REZWxldGVk
QXV0b2NvcnJlY3Rpb24gPSBTdHJpbmcoKTsKIH0KIAotdm9pZCBTcGVsbGluZ0NvcnJlY3Rpb25D
b250cm9sbGVyOjpyZXNwb25kVG9VbmFwcGxpZWRFZGl0aW5nKEVkaXRDb21tYW5kQ29tcG9zaXRp
b24qIGNvbW1hbmQpCit2b2lkIEFsdGVybmF0aXZlVGV4dENvbnRyb2xsZXI6OnJlc3BvbmRUb1Vu
YXBwbGllZEVkaXRpbmcoRWRpdENvbW1hbmRDb21wb3NpdGlvbiogY29tbWFuZCkKIHsKICAgICBp
ZiAoIWNvbW1hbmQtPndhc0NyZWF0ZUxpbmtDb21tYW5kKCkpCiAgICAgICAgIHJldHVybjsKQEAg
LTQ0OCwzNSArNDYzLDM1IEBAIHZvaWQgU3BlbGxpbmdDb3JyZWN0aW9uQ29udHJvbGxlcjo6cmVz
cG8KICAgICBtYXJrZXJzLT5hZGRNYXJrZXIocmFuZ2UuZ2V0KCksIERvY3VtZW50TWFya2VyOjpT
cGVsbENoZWNraW5nRXhlbXB0aW9uKTsKIH0KIAotRWRpdG9yQ2xpZW50KiBTcGVsbGluZ0NvcnJl
Y3Rpb25Db250cm9sbGVyOjpjbGllbnQoKQorRWRpdG9yQ2xpZW50KiBBbHRlcm5hdGl2ZVRleHRD
b250cm9sbGVyOjpjbGllbnQoKQogewogICAgIHJldHVybiBtX2ZyYW1lLT5wYWdlKCkgPyBtX2Zy
YW1lLT5wYWdlKCktPmVkaXRvckNsaWVudCgpIDogMDsKIH0KIAotVGV4dENoZWNrZXJDbGllbnQq
IFNwZWxsaW5nQ29ycmVjdGlvbkNvbnRyb2xsZXI6OnRleHRDaGVja2VyKCkKK1RleHRDaGVja2Vy
Q2xpZW50KiBBbHRlcm5hdGl2ZVRleHRDb250cm9sbGVyOjp0ZXh0Q2hlY2tlcigpCiB7CiAgICAg
aWYgKEVkaXRvckNsaWVudCogb3duZXIgPSBjbGllbnQoKSkKICAgICAgICAgcmV0dXJuIG93bmVy
LT50ZXh0Q2hlY2tlcigpOwogICAgIHJldHVybiAwOwogfQogCi12b2lkIFNwZWxsaW5nQ29ycmVj
dGlvbkNvbnRyb2xsZXI6OnJlY29yZEF1dG9jb3JyZWN0aW9uUmVzcG9uc2VSZXZlcnNlZChjb25z
dCBTdHJpbmcmIHJlcGxhY2VkU3RyaW5nLCBjb25zdCBTdHJpbmcmIHJlcGxhY2VtZW50U3RyaW5n
KQordm9pZCBBbHRlcm5hdGl2ZVRleHRDb250cm9sbGVyOjpyZWNvcmRBdXRvY29ycmVjdGlvblJl
c3BvbnNlUmV2ZXJzZWQoY29uc3QgU3RyaW5nJiByZXBsYWNlZFN0cmluZywgY29uc3QgU3RyaW5n
JiByZXBsYWNlbWVudFN0cmluZykKIHsKICAgICBjbGllbnQoKS0+cmVjb3JkQXV0b2NvcnJlY3Rp
b25SZXNwb25zZShFZGl0b3JDbGllbnQ6OkF1dG9jb3JyZWN0aW9uUmV2ZXJ0ZWQsIHJlcGxhY2Vk
U3RyaW5nLCByZXBsYWNlbWVudFN0cmluZyk7CiB9CiAKLXZvaWQgU3BlbGxpbmdDb3JyZWN0aW9u
Q29udHJvbGxlcjo6cmVjb3JkQXV0b2NvcnJlY3Rpb25SZXNwb25zZVJldmVyc2VkKGNvbnN0IFN0
cmluZyYgcmVwbGFjZWRTdHJpbmcsIFBhc3NSZWZQdHI8UmFuZ2U+IHJlcGxhY2VtZW50UmFuZ2Up
Cit2b2lkIEFsdGVybmF0aXZlVGV4dENvbnRyb2xsZXI6OnJlY29yZEF1dG9jb3JyZWN0aW9uUmVz
cG9uc2VSZXZlcnNlZChjb25zdCBTdHJpbmcmIHJlcGxhY2VkU3RyaW5nLCBQYXNzUmVmUHRyPFJh
bmdlPiByZXBsYWNlbWVudFJhbmdlKQogewogICAgIHJlY29yZEF1dG9jb3JyZWN0aW9uUmVzcG9u
c2VSZXZlcnNlZChyZXBsYWNlZFN0cmluZywgcGxhaW5UZXh0KHJlcGxhY2VtZW50UmFuZ2UuZ2V0
KCkpKTsKIH0KIAotdm9pZCBTcGVsbGluZ0NvcnJlY3Rpb25Db250cm9sbGVyOjptYXJrUmV2ZXJz
ZWQoUGFzc1JlZlB0cjxSYW5nZT4gY2hhbmdlZFJhbmdlKQordm9pZCBBbHRlcm5hdGl2ZVRleHRD
b250cm9sbGVyOjptYXJrUmV2ZXJzZWQoUGFzc1JlZlB0cjxSYW5nZT4gY2hhbmdlZFJhbmdlKQog
ewogICAgIGNoYW5nZWRSYW5nZS0+c3RhcnRDb250YWluZXIoKS0+ZG9jdW1lbnQoKS0+bWFya2Vy
cygpLT5yZW1vdmVNYXJrZXJzKGNoYW5nZWRSYW5nZS5nZXQoKSwgRG9jdW1lbnRNYXJrZXI6OkF1
dG9jb3JyZWN0ZWQsIERvY3VtZW50TWFya2VyQ29udHJvbGxlcjo6UmVtb3ZlUGFydGlhbGx5T3Zl
cmxhcHBpbmdNYXJrZXIpOwogICAgIGNoYW5nZWRSYW5nZS0+c3RhcnRDb250YWluZXIoKS0+ZG9j
dW1lbnQoKS0+bWFya2VycygpLT5hZGRNYXJrZXIoY2hhbmdlZFJhbmdlLmdldCgpLCBEb2N1bWVu
dE1hcmtlcjo6U3BlbGxDaGVja2luZ0V4ZW1wdGlvbik7CiB9CiAKLXZvaWQgU3BlbGxpbmdDb3Jy
ZWN0aW9uQ29udHJvbGxlcjo6bWFya0NvcnJlY3Rpb24oUGFzc1JlZlB0cjxSYW5nZT4gcmVwbGFj
ZWRSYW5nZSwgY29uc3QgU3RyaW5nJiByZXBsYWNlZFN0cmluZykKK3ZvaWQgQWx0ZXJuYXRpdmVU
ZXh0Q29udHJvbGxlcjo6bWFya0NvcnJlY3Rpb24oUGFzc1JlZlB0cjxSYW5nZT4gcmVwbGFjZWRS
YW5nZSwgY29uc3QgU3RyaW5nJiByZXBsYWNlZFN0cmluZykKIHsKICAgICBWZWN0b3I8RG9jdW1l
bnRNYXJrZXI6Ok1hcmtlclR5cGU+IG1hcmtlclR5cGVzVG9BZGQgPSBtYXJrZXJUeXBlc0ZvckF1
dG9jb3JyZWN0aW9uKCk7CiAgICAgRG9jdW1lbnRNYXJrZXJDb250cm9sbGVyKiBtYXJrZXJzID0g
cmVwbGFjZWRSYW5nZS0+c3RhcnRDb250YWluZXIoKS0+ZG9jdW1lbnQoKS0+bWFya2VycygpOwpA
QCAtNDg5LDcgKzUwNCw3IEBAIHZvaWQgU3BlbGxpbmdDb3JyZWN0aW9uQ29udHJvbGxlcjo6bWFy
a0MKICAgICB9CiB9CiAKLXZvaWQgU3BlbGxpbmdDb3JyZWN0aW9uQ29udHJvbGxlcjo6cmVjb3Jk
U3BlbGxjaGVja2VyUmVzcG9uc2VGb3JNb2RpZmllZENvcnJlY3Rpb24oUmFuZ2UqIHJhbmdlT2ZD
b3JyZWN0aW9uLCBjb25zdCBTdHJpbmcmIGNvcnJlY3RlZCwgY29uc3QgU3RyaW5nJiBjb3JyZWN0
aW9uKQordm9pZCBBbHRlcm5hdGl2ZVRleHRDb250cm9sbGVyOjpyZWNvcmRTcGVsbGNoZWNrZXJS
ZXNwb25zZUZvck1vZGlmaWVkQ29ycmVjdGlvbihSYW5nZSogcmFuZ2VPZkNvcnJlY3Rpb24sIGNv
bnN0IFN0cmluZyYgY29ycmVjdGVkLCBjb25zdCBTdHJpbmcmIGNvcnJlY3Rpb24pCiB7CiAgICAg
aWYgKCFyYW5nZU9mQ29ycmVjdGlvbikKICAgICAgICAgcmV0dXJuOwpAQCAtNTA3LDEzICs1MjIs
MTMgQEAgdm9pZCBTcGVsbGluZ0NvcnJlY3Rpb25Db250cm9sbGVyOjpyZWNvcgogICAgIG1hcmtl
cnMtPnJlbW92ZU1hcmtlcnMocmFuZ2VPZkNvcnJlY3Rpb24sIERvY3VtZW50TWFya2VyOjpBdXRv
Y29ycmVjdGVkLCBEb2N1bWVudE1hcmtlckNvbnRyb2xsZXI6OlJlbW92ZVBhcnRpYWxseU92ZXJs
YXBwaW5nTWFya2VyKTsKIH0KIAotdm9pZCBTcGVsbGluZ0NvcnJlY3Rpb25Db250cm9sbGVyOjpk
ZWxldGVkQXV0b2NvcnJlY3Rpb25BdFBvc2l0aW9uKGNvbnN0IFBvc2l0aW9uJiBwb3NpdGlvbiwg
Y29uc3QgU3RyaW5nJiBvcmlnaW5hbFN0cmluZykKK3ZvaWQgQWx0ZXJuYXRpdmVUZXh0Q29udHJv
bGxlcjo6ZGVsZXRlZEF1dG9jb3JyZWN0aW9uQXRQb3NpdGlvbihjb25zdCBQb3NpdGlvbiYgcG9z
aXRpb24sIGNvbnN0IFN0cmluZyYgb3JpZ2luYWxTdHJpbmcpCiB7CiAgICAgbV9vcmlnaW5hbFN0
cmluZ0Zvckxhc3REZWxldGVkQXV0b2NvcnJlY3Rpb24gPSBvcmlnaW5hbFN0cmluZzsKICAgICBt
X3Bvc2l0aW9uRm9yTGFzdERlbGV0ZWRBdXRvY29ycmVjdGlvbiA9IHBvc2l0aW9uOwogfQogCi12
b2lkIFNwZWxsaW5nQ29ycmVjdGlvbkNvbnRyb2xsZXI6Om1hcmtQcmVjZWRpbmdXaGl0ZXNwYWNl
Rm9yRGVsZXRlZEF1dG9jb3JyZWN0aW9uQWZ0ZXJDb21tYW5kKEVkaXRDb21tYW5kKiBjb21tYW5k
KQordm9pZCBBbHRlcm5hdGl2ZVRleHRDb250cm9sbGVyOjptYXJrUHJlY2VkaW5nV2hpdGVzcGFj
ZUZvckRlbGV0ZWRBdXRvY29ycmVjdGlvbkFmdGVyQ29tbWFuZChFZGl0Q29tbWFuZCogY29tbWFu
ZCkKIHsKICAgICBQb3NpdGlvbiBlbmRPZlNlbGVjdGlvbiA9IGNvbW1hbmQtPmVuZGluZ1NlbGVj
dGlvbigpLmVuZCgpOwogICAgIGlmIChlbmRPZlNlbGVjdGlvbiAhPSBtX3Bvc2l0aW9uRm9yTGFz
dERlbGV0ZWRBdXRvY29ycmVjdGlvbikKQEAgLTUzNCwxOSArNTQ5LDE5IEBAIHZvaWQgU3BlbGxp
bmdDb3JyZWN0aW9uQ29udHJvbGxlcjo6bWFya1AKICAgICBtX2ZyYW1lLT5kb2N1bWVudCgpLT5t
YXJrZXJzKCktPmFkZE1hcmtlcihwcmVjZWRpbmdDaGFyYWN0ZXJSYW5nZS5nZXQoKSwgRG9jdW1l
bnRNYXJrZXI6OkRlbGV0ZWRBdXRvY29ycmVjdGlvbiwgbV9vcmlnaW5hbFN0cmluZ0Zvckxhc3RE
ZWxldGVkQXV0b2NvcnJlY3Rpb24pOwogfQogCi1ib29sIFNwZWxsaW5nQ29ycmVjdGlvbkNvbnRy
b2xsZXI6OnByb2Nlc3NNYXJrZXJzT25UZXh0VG9CZVJlcGxhY2VkQnlSZXN1bHQoY29uc3QgVGV4
dENoZWNraW5nUmVzdWx0KiByZXN1bHQsIFJhbmdlKiByYW5nZVRvQmVSZXBsYWNlZCwgY29uc3Qg
U3RyaW5nJiBzdHJpbmdUb0JlUmVwbGFjZWQpCitib29sIEFsdGVybmF0aXZlVGV4dENvbnRyb2xs
ZXI6OnByb2Nlc3NNYXJrZXJzT25UZXh0VG9CZVJlcGxhY2VkQnlSZXN1bHQoY29uc3QgVGV4dENo
ZWNraW5nUmVzdWx0KiByZXN1bHQsIFJhbmdlKiByYW5nZVdpdGhBbHRlcm5hdGl2ZSwgY29uc3Qg
U3RyaW5nJiBzdHJpbmdUb0JlUmVwbGFjZWQpCiB7CiAgICAgRG9jdW1lbnRNYXJrZXJDb250cm9s
bGVyKiBtYXJrZXJDb250cm9sbGVyID0gbV9mcmFtZS0+ZG9jdW1lbnQoKS0+bWFya2VycygpOwot
ICAgIGlmIChtYXJrZXJDb250cm9sbGVyLT5oYXNNYXJrZXJzKHJhbmdlVG9CZVJlcGxhY2VkLCBE
b2N1bWVudE1hcmtlcjo6UmVwbGFjZW1lbnQpKSB7CisgICAgaWYgKG1hcmtlckNvbnRyb2xsZXIt
Pmhhc01hcmtlcnMocmFuZ2VXaXRoQWx0ZXJuYXRpdmUsIERvY3VtZW50TWFya2VyOjpSZXBsYWNl
bWVudCkpIHsKICAgICAgICAgaWYgKHJlc3VsdC0+dHlwZSA9PSBUZXh0Q2hlY2tpbmdUeXBlQ29y
cmVjdGlvbikKLSAgICAgICAgICAgIHJlY29yZFNwZWxsY2hlY2tlclJlc3BvbnNlRm9yTW9kaWZp
ZWRDb3JyZWN0aW9uKHJhbmdlVG9CZVJlcGxhY2VkLCBzdHJpbmdUb0JlUmVwbGFjZWQsIHJlc3Vs
dC0+cmVwbGFjZW1lbnQpOworICAgICAgICAgICAgcmVjb3JkU3BlbGxjaGVja2VyUmVzcG9uc2VG
b3JNb2RpZmllZENvcnJlY3Rpb24ocmFuZ2VXaXRoQWx0ZXJuYXRpdmUsIHN0cmluZ1RvQmVSZXBs
YWNlZCwgcmVzdWx0LT5yZXBsYWNlbWVudCk7CiAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICB9
CiAKLSAgICBpZiAobWFya2VyQ29udHJvbGxlci0+aGFzTWFya2VycyhyYW5nZVRvQmVSZXBsYWNl
ZCwgRG9jdW1lbnRNYXJrZXI6OlJlamVjdGVkQ29ycmVjdGlvbikpCisgICAgaWYgKG1hcmtlckNv
bnRyb2xsZXItPmhhc01hcmtlcnMocmFuZ2VXaXRoQWx0ZXJuYXRpdmUsIERvY3VtZW50TWFya2Vy
OjpSZWplY3RlZENvcnJlY3Rpb24pKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKLSAgICBQb3Np
dGlvbiBiZWdpbm5pbmdPZlJhbmdlID0gcmFuZ2VUb0JlUmVwbGFjZWQtPnN0YXJ0UG9zaXRpb24o
KTsKKyAgICBQb3NpdGlvbiBiZWdpbm5pbmdPZlJhbmdlID0gcmFuZ2VXaXRoQWx0ZXJuYXRpdmUt
PnN0YXJ0UG9zaXRpb24oKTsKICAgICBQb3NpdGlvbiBwcmVjZWRpbmdDaGFyYWN0ZXJQb3NpdGlv
biA9IGJlZ2lubmluZ09mUmFuZ2UucHJldmlvdXMoKTsKICAgICBSZWZQdHI8UmFuZ2U+IHByZWNl
ZGluZ0NoYXJhY3RlclJhbmdlID0gUmFuZ2U6OmNyZWF0ZShtX2ZyYW1lLT5kb2N1bWVudCgpLCBw
cmVjZWRpbmdDaGFyYWN0ZXJQb3NpdGlvbiwgYmVnaW5uaW5nT2ZSYW5nZSk7CiAKSW5kZXg6IFNv
dXJjZS9XZWJDb3JlL2VkaXRpbmcvQWx0ZXJuYXRpdmVUZXh0Q29udHJvbGxlci5oCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2VkaXRpbmcvQWx0ZXJuYXRpdmVUZXh0Q29udHJvbGxlci5o
CShyZXZpc2lvbiAxMTI4MzApCShmcm9tIFNvdXJjZS9XZWJDb3JlL2VkaXRpbmcvU3BlbGxpbmdD
b3JyZWN0aW9uQ29udHJvbGxlci5oOjExMjgzMCkKKysrIFNvdXJjZS9XZWJDb3JlL2VkaXRpbmcv
QWx0ZXJuYXRpdmVUZXh0Q29udHJvbGxlci5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMTU3
IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEwIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5
IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBw
cm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEu
IFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29w
eXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0g
bXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICog
ICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhl
IGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExF
IENPTVBVVEVSLCBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQg
V0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElF
RCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNV
TEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUg
Q09NUFVURVIsIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJF
Q1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05T
RVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJP
Q1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERB
VEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FV
U0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJB
Q1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBP
UiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJ
UyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERB
TUFHRS4KKyAqLworCisjaWZuZGVmIFNwZWxsaW5nQ29ycmVjdGlvbkNvbnRyb2xsZXJfaAorI2Rl
ZmluZSBTcGVsbGluZ0NvcnJlY3Rpb25Db250cm9sbGVyX2gKKworI2luY2x1ZGUgIkRvY3VtZW50
TWFya2VyLmgiCisjaW5jbHVkZSAiUmFuZ2UuaCIKKyNpbmNsdWRlICJUZXh0Q2hlY2tpbmcuaCIK
KyNpbmNsdWRlICJUaW1lci5oIgorI2luY2x1ZGUgIlZpc2libGVTZWxlY3Rpb24uaCIKKyNpbmNs
dWRlIDx3dGYvTm9uY29weWFibGUuaD4KKyNpbmNsdWRlIDx3dGYvVW51c2VkUGFyYW0uaD4KKwor
bmFtZXNwYWNlIFdlYkNvcmUgeworCitjbGFzcyBDb21wb3NpdGVFZGl0Q29tbWFuZDsKK2NsYXNz
IEVkaXRvckNsaWVudDsKK2NsYXNzIEVkaXRDb21tYW5kOworY2xhc3MgRWRpdENvbW1hbmRDb21w
b3NpdGlvbjsKK2NsYXNzIEZyYW1lOworY2xhc3MgVGV4dENoZWNrZXJDbGllbnQ7CisKK3N0cnVj
dCBDb3JyZWN0aW9uUGFuZWxJbmZvIHsKKyAgICBlbnVtIFBhbmVsVHlwZSB7CisgICAgICAgIFBh
bmVsVHlwZUNvcnJlY3Rpb24gPSAwLAorICAgICAgICBQYW5lbFR5cGVSZXZlcnNpb24sCisgICAg
ICAgIFBhbmVsVHlwZVNwZWxsaW5nU3VnZ2VzdGlvbnMKKyAgICB9OworCisgICAgUmVmUHRyPFJh
bmdlPiByYW5nZVRvQmVSZXBsYWNlZDsKKyAgICBTdHJpbmcgcmVwbGFjZWRTdHJpbmc7CisgICAg
U3RyaW5nIHJlcGxhY2VtZW50U3RyaW5nOworICAgIFBhbmVsVHlwZSBwYW5lbFR5cGU7CisgICAg
Ym9vbCBpc0FjdGl2ZTsKK307CisKK3N0cnVjdCBUZXh0Q2hlY2tpbmdSZXN1bHQ7CisKK2VudW0g
UmVhc29uRm9yRGlzbWlzc2luZ0NvcnJlY3Rpb25QYW5lbCB7CisgICAgUmVhc29uRm9yRGlzbWlz
c2luZ0NvcnJlY3Rpb25QYW5lbENhbmNlbGxlZCA9IDAsCisgICAgUmVhc29uRm9yRGlzbWlzc2lu
Z0NvcnJlY3Rpb25QYW5lbElnbm9yZWQsCisgICAgUmVhc29uRm9yRGlzbWlzc2luZ0NvcnJlY3Rp
b25QYW5lbEFjY2VwdGVkCit9OworCisjaWYgVVNFKEFVVE9DT1JSRUNUSU9OX1BBTkVMKQorI2Rl
ZmluZSBVTkxFU1NfRU5BQkxFRChmdW5jdGlvbkJvZHkpIDsKKyNlbHNlCisjZGVmaW5lIFVOTEVT
U19FTkFCTEVEKGZ1bmN0aW9uQm9keSkgZnVuY3Rpb25Cb2R5CisjZW5kaWYKKworY2xhc3MgU3Bl
bGxpbmdDb3JyZWN0aW9uQ29udHJvbGxlciB7CisgICAgV1RGX01BS0VfTk9OQ09QWUFCTEUoU3Bl
bGxpbmdDb3JyZWN0aW9uQ29udHJvbGxlcik7IFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOworcHVi
bGljOgorICAgIFNwZWxsaW5nQ29ycmVjdGlvbkNvbnRyb2xsZXIoRnJhbWUqKSBVTkxFU1NfRU5B
QkxFRCh7fSkKKyAgICB+U3BlbGxpbmdDb3JyZWN0aW9uQ29udHJvbGxlcigpIFVOTEVTU19FTkFC
TEVEKHt9KQorCisgICAgdm9pZCBzdGFydENvcnJlY3Rpb25QYW5lbFRpbWVyKENvcnJlY3Rpb25Q
YW5lbEluZm86OlBhbmVsVHlwZSkgVU5MRVNTX0VOQUJMRUQoe30pCisgICAgdm9pZCBzdG9wQ29y
cmVjdGlvblBhbmVsVGltZXIoKSBVTkxFU1NfRU5BQkxFRCh7fSkKKworICAgIHZvaWQgZGlzbWlz
cyhSZWFzb25Gb3JEaXNtaXNzaW5nQ29ycmVjdGlvblBhbmVsKSBVTkxFU1NfRU5BQkxFRCh7fSkK
KyAgICBTdHJpbmcgZGlzbWlzc1Nvb24oUmVhc29uRm9yRGlzbWlzc2luZ0NvcnJlY3Rpb25QYW5l
bCkgVU5MRVNTX0VOQUJMRUQoeyByZXR1cm4gU3RyaW5nKCk7IH0pCisgICAgdm9pZCBzaG93KFBh
c3NSZWZQdHI8UmFuZ2U+IHJhbmdlVG9SZXBsYWNlLCBjb25zdCBTdHJpbmcmIHJlcGxhY2VtZW50
KSBVTkxFU1NfRU5BQkxFRCh7IFVOVVNFRF9QQVJBTShyYW5nZVRvUmVwbGFjZSk7IFVOVVNFRF9Q
QVJBTShyZXBsYWNlbWVudCk7IH0pCisKKyAgICB2b2lkIGFwcGx5Q29ycmVjdGlvblBhbmVsSW5m
byhjb25zdCBWZWN0b3I8RG9jdW1lbnRNYXJrZXI6Ok1hcmtlclR5cGU+JikgVU5MRVNTX0VOQUJM
RUQoe30pCisgICAgLy8gUmV0dXJuIHRydWUgaWYgY29ycmVjdGlvbiB3YXMgYXBwbGllZCwgZmFs
c2Ugb3RoZXJ3aXNlLgorICAgIGJvb2wgYXBwbHlBdXRvY29ycmVjdGlvbkJlZm9yZVR5cGluZ0lm
QXBwcm9wcmlhdGUoKSBVTkxFU1NfRU5BQkxFRCh7IHJldHVybiBmYWxzZTsgfSkKKworICAgIHZv
aWQgcmVzcG9uZFRvVW5hcHBsaWVkU3BlbGxDb3JyZWN0aW9uKGNvbnN0IFZpc2libGVTZWxlY3Rp
b24mLCBjb25zdCBTdHJpbmcmIGNvcnJlY3RlZCwgY29uc3QgU3RyaW5nJiBjb3JyZWN0aW9uKSBV
TkxFU1NfRU5BQkxFRCh7IFVOVVNFRF9QQVJBTShjb3JyZWN0ZWQpOyBVTlVTRURfUEFSQU0oY29y
cmVjdGlvbik7IH0pCisgICAgdm9pZCByZXNwb25kVG9BcHBsaWVkRWRpdGluZyhDb21wb3NpdGVF
ZGl0Q29tbWFuZCopIFVOTEVTU19FTkFCTEVEKHsgfSkKKyAgICB2b2lkIHJlc3BvbmRUb1VuYXBw
bGllZEVkaXRpbmcoRWRpdENvbW1hbmRDb21wb3NpdGlvbiopIFVOTEVTU19FTkFCTEVEKHsgfSkK
KyAgICB2b2lkIHJlc3BvbmRUb0NoYW5nZWRTZWxlY3Rpb24oY29uc3QgVmlzaWJsZVNlbGVjdGlv
biYgb2xkU2VsZWN0aW9uKSBVTkxFU1NfRU5BQkxFRCh7IFVOVVNFRF9QQVJBTShvbGRTZWxlY3Rp
b24pOyB9KQorCisgICAgdm9pZCBzdG9wUGVuZGluZ0NvcnJlY3Rpb24oY29uc3QgVmlzaWJsZVNl
bGVjdGlvbiYgb2xkU2VsZWN0aW9uKSBVTkxFU1NfRU5BQkxFRCh7IFVOVVNFRF9QQVJBTShvbGRT
ZWxlY3Rpb24pOyB9KQorICAgIHZvaWQgYXBwbHlQZW5kaW5nQ29ycmVjdGlvbihjb25zdCBWaXNp
YmxlU2VsZWN0aW9uJiBzZWxlY3Rpb25BZnRlclR5cGluZykgVU5MRVNTX0VOQUJMRUQoeyBVTlVT
RURfUEFSQU0oc2VsZWN0aW9uQWZ0ZXJUeXBpbmcpOyB9KQorCisgICAgdm9pZCBoYW5kbGVDb3Jy
ZWN0aW9uUGFuZWxSZXN1bHQoY29uc3QgU3RyaW5nJiBjb3JyZWN0aW9uKSBVTkxFU1NfRU5BQkxF
RCh7IFVOVVNFRF9QQVJBTShjb3JyZWN0aW9uKTsgfSkKKyAgICB2b2lkIGhhbmRsZUNhbmNlbE9w
ZXJhdGlvbigpIFVOTEVTU19FTkFCTEVEKHt9KQorCisgICAgYm9vbCBoYXNQZW5kaW5nQ29ycmVj
dGlvbigpIGNvbnN0IFVOTEVTU19FTkFCTEVEKHsgcmV0dXJuIGZhbHNlOyB9KQorICAgIGJvb2wg
aXNTcGVsbGluZ01hcmtlckFsbG93ZWQoUGFzc1JlZlB0cjxSYW5nZT4gbWlzc3BlbGxpbmdSYW5n
ZSkgY29uc3QgVU5MRVNTX0VOQUJMRUQoeyBVTlVTRURfUEFSQU0obWlzc3BlbGxpbmdSYW5nZSk7
IHJldHVybiB0cnVlOyB9KQorICAgIGJvb2wgaXNBdXRvbWF0aWNTcGVsbGluZ0NvcnJlY3Rpb25F
bmFibGVkKCkgVU5MRVNTX0VOQUJMRUQoeyByZXR1cm4gZmFsc2U7IH0pCisgICAgYm9vbCBzaG91
bGRSZW1vdmVNYXJrZXJzVXBvbkVkaXRpbmcoKTsKKworICAgIHZvaWQgY29ycmVjdGlvblBhbmVs
VGltZXJGaXJlZChUaW1lcjxTcGVsbGluZ0NvcnJlY3Rpb25Db250cm9sbGVyPiopIFVOTEVTU19F
TkFCTEVEKHt9KQorICAgIHZvaWQgcmVjb3JkQXV0b2NvcnJlY3Rpb25SZXNwb25zZVJldmVyc2Vk
KGNvbnN0IFN0cmluZyYgcmVwbGFjZWRTdHJpbmcsIFBhc3NSZWZQdHI8UmFuZ2U+IHJlcGxhY2Vt
ZW50UmFuZ2UpIFVOTEVTU19FTkFCTEVEKHsgVU5VU0VEX1BBUkFNKHJlcGxhY2VkU3RyaW5nKTsg
VU5VU0VEX1BBUkFNKHJlcGxhY2VtZW50UmFuZ2UpOyB9KQorICAgIHZvaWQgbWFya1JldmVyc2Vk
KFBhc3NSZWZQdHI8UmFuZ2U+IGNoYW5nZWRSYW5nZSkgVU5MRVNTX0VOQUJMRUQoeyBVTlVTRURf
UEFSQU0oY2hhbmdlZFJhbmdlKTsgfSkKKyAgICB2b2lkIG1hcmtDb3JyZWN0aW9uKFBhc3NSZWZQ
dHI8UmFuZ2U+IHJlcGxhY2VkUmFuZ2UsIGNvbnN0IFN0cmluZyYgcmVwbGFjZWRTdHJpbmcpIFVO
TEVTU19FTkFCTEVEKHsgVU5VU0VEX1BBUkFNKHJlcGxhY2VkUmFuZ2UpOyBVTlVTRURfUEFSQU0o
cmVwbGFjZWRTdHJpbmcpOyB9KQorICAgIHZvaWQgcmVjb3JkU3BlbGxjaGVja2VyUmVzcG9uc2VG
b3JNb2RpZmllZENvcnJlY3Rpb24oUmFuZ2UqIHJhbmdlT2ZDb3JyZWN0aW9uLCBjb25zdCBTdHJp
bmcmIGNvcnJlY3RlZCwgY29uc3QgU3RyaW5nJiBjb3JyZWN0aW9uKSBVTkxFU1NfRU5BQkxFRCh7
IFVOVVNFRF9QQVJBTShyYW5nZU9mQ29ycmVjdGlvbik7IFVOVVNFRF9QQVJBTShjb3JyZWN0ZWQp
OyBVTlVTRURfUEFSQU0oY29ycmVjdGlvbik7IH0pCisKKyAgICAvLyBUaGlzIGZ1bmN0aW9uIHJl
dHVybnMgZmFsc2UgaWYgdGhlIHJlcGxhY2VtZW50IHNob3VsZCBub3QgYmUgY2FycmllZCBvdXQu
CisgICAgYm9vbCBwcm9jZXNzTWFya2Vyc09uVGV4dFRvQmVSZXBsYWNlZEJ5UmVzdWx0KGNvbnN0
IFRleHRDaGVja2luZ1Jlc3VsdCosIFJhbmdlKiByYW5nZVRvQmVSZXBsYWNlZCwgY29uc3QgU3Ry
aW5nJiBzdHJpbmdUb0JlUmVwbGFjZWQpIFVOTEVTU19FTkFCTEVEKHsgVU5VU0VEX1BBUkFNKHJh
bmdlVG9CZVJlcGxhY2VkKTsgVU5VU0VEX1BBUkFNKHN0cmluZ1RvQmVSZXBsYWNlZCk7IHJldHVy
biB0cnVlOyB9KTsKKyAgICB2b2lkIGRlbGV0ZWRBdXRvY29ycmVjdGlvbkF0UG9zaXRpb24oY29u
c3QgUG9zaXRpb24mLCBjb25zdCBTdHJpbmcmIG9yaWdpbmFsU3RyaW5nKSBVTkxFU1NfRU5BQkxF
RCh7IFVOVVNFRF9QQVJBTShvcmlnaW5hbFN0cmluZyk7IH0pCisKKyNpZiBVU0UoQVVUT0NPUlJF
Q1RJT05fUEFORUwpCitwcml2YXRlOgorICAgIHZvaWQgcmVjb3JkQXV0b2NvcnJlY3Rpb25SZXNw
b25zZVJldmVyc2VkKGNvbnN0IFN0cmluZyYgcmVwbGFjZWRTdHJpbmcsIGNvbnN0IFN0cmluZyYg
cmVwbGFjZW1lbnRTdHJpbmcpOworCisgICAgYm9vbCBzaG91bGRTdGFydFRpbWVyRm9yKGNvbnN0
IERvY3VtZW50TWFya2VyKiBtYXJrZXIsIGludCBlbmRPZmZzZXQpIGNvbnN0CisgICAgeworICAg
ICAgICByZXR1cm4gKCgobWFya2VyLT50eXBlKCkgPT0gRG9jdW1lbnRNYXJrZXI6OlJlcGxhY2Vt
ZW50ICYmICFtYXJrZXItPmRlc2NyaXB0aW9uKCkuaXNOdWxsKCkpIAorICAgICAgICAgICAgICAg
ICB8fCBtYXJrZXItPnR5cGUoKSA9PSBEb2N1bWVudE1hcmtlcjo6U3BlbGxpbmcpICYmIHN0YXRp
Y19jYXN0PGludD4obWFya2VyLT5lbmRPZmZzZXQoKSkgPT0gZW5kT2Zmc2V0KTsKKyAgICB9CisK
KyAgICBFZGl0b3JDbGllbnQqIGNsaWVudCgpOworICAgIFRleHRDaGVja2VyQ2xpZW50KiB0ZXh0
Q2hlY2tlcigpOworICAgIEZsb2F0UmVjdCByb290Vmlld1JlY3RGb3JSYW5nZShjb25zdCBSYW5n
ZSopIGNvbnN0OworICAgIHZvaWQgbWFya1ByZWNlZGluZ1doaXRlc3BhY2VGb3JEZWxldGVkQXV0
b2NvcnJlY3Rpb25BZnRlckNvbW1hbmQoRWRpdENvbW1hbmQqKTsKKworICAgIEVkaXRvckNsaWVu
dCogbV9jbGllbnQ7CisgICAgRnJhbWUqIG1fZnJhbWU7CisKKyAgICBUaW1lcjxTcGVsbGluZ0Nv
cnJlY3Rpb25Db250cm9sbGVyPiBtX2NvcnJlY3Rpb25QYW5lbFRpbWVyOworICAgIENvcnJlY3Rp
b25QYW5lbEluZm8gbV9jb3JyZWN0aW9uUGFuZWxJbmZvOworICAgIGJvb2wgbV9jb3JyZWN0aW9u
UGFuZWxJc0Rpc21pc3NlZEJ5RWRpdG9yOworCisgICAgU3RyaW5nIG1fb3JpZ2luYWxTdHJpbmdG
b3JMYXN0RGVsZXRlZEF1dG9jb3JyZWN0aW9uOworICAgIFBvc2l0aW9uIG1fcG9zaXRpb25Gb3JM
YXN0RGVsZXRlZEF1dG9jb3JyZWN0aW9uOworI2VuZGlmCit9OworCisjdW5kZWYgVU5MRVNTX0VO
QUJMRUQKKworaW5saW5lIGJvb2wgU3BlbGxpbmdDb3JyZWN0aW9uQ29udHJvbGxlcjo6c2hvdWxk
UmVtb3ZlTWFya2Vyc1Vwb25FZGl0aW5nKCkKK3sKKyNpZiBVU0UoTUFSS0VSX1JFTU9WQUxfVVBP
Tl9FRElUSU5HKQorICAgIHJldHVybiB0cnVlOworI2Vsc2UKKyAgICByZXR1cm4gZmFsc2U7Cisj
ZW5kaWYKK30KKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCisjZW5kaWYgLy8gU3BlbGxpbmdD
b3JyZWN0aW9uQ29udHJvbGxlcl9oCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0FsdGVy
bmF0aXZlVGV4dENvbnRyb2xsZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9lZGl0
aW5nL0FsdGVybmF0aXZlVGV4dENvbnRyb2xsZXIuaAkocmV2aXNpb24gMTEyODMwKQorKysgU291
cmNlL1dlYkNvcmUvZWRpdGluZy9BbHRlcm5hdGl2ZVRleHRDb250cm9sbGVyLmgJKHdvcmtpbmcg
Y29weSkKQEAgLTIzLDggKzIzLDggQEAKICAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURW
SVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCiAgKi8KIAotI2lmbmRlZiBT
cGVsbGluZ0NvcnJlY3Rpb25Db250cm9sbGVyX2gKLSNkZWZpbmUgU3BlbGxpbmdDb3JyZWN0aW9u
Q29udHJvbGxlcl9oCisjaWZuZGVmIEFsdGVybmF0aXZlVGV4dENvbnRyb2xsZXJfaAorI2RlZmlu
ZSBBbHRlcm5hdGl2ZVRleHRDb250cm9sbGVyX2gKIAogI2luY2x1ZGUgIkRvY3VtZW50TWFya2Vy
LmgiCiAjaW5jbHVkZSAiUmFuZ2UuaCIKQEAgLTQzLDI2ICs0MywzMiBAQCBjbGFzcyBFZGl0Q29t
bWFuZENvbXBvc2l0aW9uOwogY2xhc3MgRnJhbWU7CiBjbGFzcyBUZXh0Q2hlY2tlckNsaWVudDsK
IAotc3RydWN0IENvcnJlY3Rpb25QYW5lbEluZm8gewotICAgIGVudW0gUGFuZWxUeXBlIHsKLSAg
ICAgICAgUGFuZWxUeXBlQ29ycmVjdGlvbiA9IDAsCi0gICAgICAgIFBhbmVsVHlwZVJldmVyc2lv
biwKLSAgICAgICAgUGFuZWxUeXBlU3BlbGxpbmdTdWdnZXN0aW9ucwotICAgIH07Ci0KLSAgICBS
ZWZQdHI8UmFuZ2U+IHJhbmdlVG9CZVJlcGxhY2VkOwotICAgIFN0cmluZyByZXBsYWNlZFN0cmlu
ZzsKLSAgICBTdHJpbmcgcmVwbGFjZW1lbnRTdHJpbmc7Ci0gICAgUGFuZWxUeXBlIHBhbmVsVHlw
ZTsKK2NsYXNzIEFsdGVybmF0aXZlVGV4dERldGFpbHMgOiBwdWJsaWMgUmVmQ291bnRlZDxBbHRl
cm5hdGl2ZVRleHREZXRhaWxzPiB7CitwdWJsaWM6CisgICAgQWx0ZXJuYXRpdmVUZXh0RGV0YWls
cygpIHsgfQorICAgIHZpcnR1YWwgfkFsdGVybmF0aXZlVGV4dERldGFpbHMoKSB7IH0KK307CisK
K2VudW0gQWx0ZXJuYXRpdmVUZXh0VHlwZSB7CisgICAgQWx0ZXJuYXRpdmVUZXh0VHlwZUNvcnJl
Y3Rpb24gPSAwLAorICAgIEFsdGVybmF0aXZlVGV4dFR5cGVSZXZlcnNpb24sCisgICAgQWx0ZXJu
YXRpdmVUZXh0VHlwZVNwZWxsaW5nU3VnZ2VzdGlvbnMsCit9OworCitzdHJ1Y3QgQWx0ZXJuYXRp
dmVUZXh0SW5mbyB7CisgICAgUmVmUHRyPFJhbmdlPiByYW5nZVdpdGhBbHRlcm5hdGl2ZTsKICAg
ICBib29sIGlzQWN0aXZlOworICAgIEFsdGVybmF0aXZlVGV4dFR5cGUgdHlwZTsKKyAgICBTdHJp
bmcgb3JpZ2luYWxUZXh0OworICAgIFJlZlB0cjxBbHRlcm5hdGl2ZVRleHREZXRhaWxzPiBkZXRh
aWxzOwogfTsKIAogc3RydWN0IFRleHRDaGVja2luZ1Jlc3VsdDsKIAotZW51bSBSZWFzb25Gb3JE
aXNtaXNzaW5nQ29ycmVjdGlvblBhbmVsIHsKLSAgICBSZWFzb25Gb3JEaXNtaXNzaW5nQ29ycmVj
dGlvblBhbmVsQ2FuY2VsbGVkID0gMCwKLSAgICBSZWFzb25Gb3JEaXNtaXNzaW5nQ29ycmVjdGlv
blBhbmVsSWdub3JlZCwKLSAgICBSZWFzb25Gb3JEaXNtaXNzaW5nQ29ycmVjdGlvblBhbmVsQWNj
ZXB0ZWQKK2VudW0gUmVhc29uRm9yRGlzbWlzc2luZ0FsdGVybmF0aXZlVGV4dCB7CisgICAgUmVh
c29uRm9yRGlzbWlzc2luZ0FsdGVybmF0aXZlVGV4dENhbmNlbGxlZCA9IDAsCisgICAgUmVhc29u
Rm9yRGlzbWlzc2luZ0FsdGVybmF0aXZlVGV4dElnbm9yZWQsCisgICAgUmVhc29uRm9yRGlzbWlz
c2luZ0FsdGVybmF0aXZlVGV4dEFjY2VwdGVkCiB9OwogCiAjaWYgVVNFKEFVVE9DT1JSRUNUSU9O
X1BBTkVMKQpAQCAtNzEsMjAgKzc3LDE5IEBAIGVudW0gUmVhc29uRm9yRGlzbWlzc2luZ0NvcnJl
Y3Rpb25QYW5lbCAKICNkZWZpbmUgVU5MRVNTX0VOQUJMRUQoZnVuY3Rpb25Cb2R5KSBmdW5jdGlv
bkJvZHkKICNlbmRpZgogCi1jbGFzcyBTcGVsbGluZ0NvcnJlY3Rpb25Db250cm9sbGVyIHsKLSAg
ICBXVEZfTUFLRV9OT05DT1BZQUJMRShTcGVsbGluZ0NvcnJlY3Rpb25Db250cm9sbGVyKTsgV1RG
X01BS0VfRkFTVF9BTExPQ0FURUQ7CitjbGFzcyBBbHRlcm5hdGl2ZVRleHRDb250cm9sbGVyIHsK
KyAgICBXVEZfTUFLRV9OT05DT1BZQUJMRShBbHRlcm5hdGl2ZVRleHRDb250cm9sbGVyKTsKKyAg
ICBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsKIHB1YmxpYzoKLSAgICBTcGVsbGluZ0NvcnJlY3Rp
b25Db250cm9sbGVyKEZyYW1lKikgVU5MRVNTX0VOQUJMRUQoe30pCi0gICAgflNwZWxsaW5nQ29y
cmVjdGlvbkNvbnRyb2xsZXIoKSBVTkxFU1NfRU5BQkxFRCh7fSkKKyAgICBBbHRlcm5hdGl2ZVRl
eHRDb250cm9sbGVyKEZyYW1lKikgVU5MRVNTX0VOQUJMRUQoeyB9KQorICAgIH5BbHRlcm5hdGl2
ZVRleHRDb250cm9sbGVyKCkgVU5MRVNTX0VOQUJMRUQoeyB9KQogCi0gICAgdm9pZCBzdGFydENv
cnJlY3Rpb25QYW5lbFRpbWVyKENvcnJlY3Rpb25QYW5lbEluZm86OlBhbmVsVHlwZSkgVU5MRVNT
X0VOQUJMRUQoe30pCi0gICAgdm9pZCBzdG9wQ29ycmVjdGlvblBhbmVsVGltZXIoKSBVTkxFU1Nf
RU5BQkxFRCh7fSkKKyAgICB2b2lkIHN0YXJ0QWx0ZXJuYXRpdmVUZXh0VUlUaW1lcihBbHRlcm5h
dGl2ZVRleHRUeXBlKSBVTkxFU1NfRU5BQkxFRCh7IH0pCisgICAgdm9pZCBzdG9wQWx0ZXJuYXRp
dmVUZXh0VUlUaW1lcigpIFVOTEVTU19FTkFCTEVEKHsgfSkKIAotICAgIHZvaWQgZGlzbWlzcyhS
ZWFzb25Gb3JEaXNtaXNzaW5nQ29ycmVjdGlvblBhbmVsKSBVTkxFU1NfRU5BQkxFRCh7fSkKLSAg
ICBTdHJpbmcgZGlzbWlzc1Nvb24oUmVhc29uRm9yRGlzbWlzc2luZ0NvcnJlY3Rpb25QYW5lbCkg
VU5MRVNTX0VOQUJMRUQoeyByZXR1cm4gU3RyaW5nKCk7IH0pCisgICAgdm9pZCBkaXNtaXNzKFJl
YXNvbkZvckRpc21pc3NpbmdBbHRlcm5hdGl2ZVRleHQpIFVOTEVTU19FTkFCTEVEKHsgfSkKICAg
ICB2b2lkIHNob3coUGFzc1JlZlB0cjxSYW5nZT4gcmFuZ2VUb1JlcGxhY2UsIGNvbnN0IFN0cmlu
ZyYgcmVwbGFjZW1lbnQpIFVOTEVTU19FTkFCTEVEKHsgVU5VU0VEX1BBUkFNKHJhbmdlVG9SZXBs
YWNlKTsgVU5VU0VEX1BBUkFNKHJlcGxhY2VtZW50KTsgfSkKIAotICAgIHZvaWQgYXBwbHlDb3Jy
ZWN0aW9uUGFuZWxJbmZvKGNvbnN0IFZlY3RvcjxEb2N1bWVudE1hcmtlcjo6TWFya2VyVHlwZT4m
KSBVTkxFU1NfRU5BQkxFRCh7fSkKICAgICAvLyBSZXR1cm4gdHJ1ZSBpZiBjb3JyZWN0aW9uIHdh
cyBhcHBsaWVkLCBmYWxzZSBvdGhlcndpc2UuCiAgICAgYm9vbCBhcHBseUF1dG9jb3JyZWN0aW9u
QmVmb3JlVHlwaW5nSWZBcHByb3ByaWF0ZSgpIFVOTEVTU19FTkFCTEVEKHsgcmV0dXJuIGZhbHNl
OyB9KQogCkBAIC05NiwxOSArMTAxLDE3IEBAIHB1YmxpYzoKICAgICB2b2lkIHN0b3BQZW5kaW5n
Q29ycmVjdGlvbihjb25zdCBWaXNpYmxlU2VsZWN0aW9uJiBvbGRTZWxlY3Rpb24pIFVOTEVTU19F
TkFCTEVEKHsgVU5VU0VEX1BBUkFNKG9sZFNlbGVjdGlvbik7IH0pCiAgICAgdm9pZCBhcHBseVBl
bmRpbmdDb3JyZWN0aW9uKGNvbnN0IFZpc2libGVTZWxlY3Rpb24mIHNlbGVjdGlvbkFmdGVyVHlw
aW5nKSBVTkxFU1NfRU5BQkxFRCh7IFVOVVNFRF9QQVJBTShzZWxlY3Rpb25BZnRlclR5cGluZyk7
IH0pCiAKLSAgICB2b2lkIGhhbmRsZUNvcnJlY3Rpb25QYW5lbFJlc3VsdChjb25zdCBTdHJpbmcm
IGNvcnJlY3Rpb24pIFVOTEVTU19FTkFCTEVEKHsgVU5VU0VEX1BBUkFNKGNvcnJlY3Rpb24pOyB9
KQotICAgIHZvaWQgaGFuZGxlQ2FuY2VsT3BlcmF0aW9uKCkgVU5MRVNTX0VOQUJMRUQoe30pCisg
ICAgdm9pZCBoYW5kbGVBbHRlcm5hdGl2ZVRleHRVSVJlc3VsdChjb25zdCBTdHJpbmcmIHJlc3Vs
dCkgVU5MRVNTX0VOQUJMRUQoeyBVTlVTRURfUEFSQU0ocmVzdWx0KTsgfSkKKyAgICB2b2lkIGhh
bmRsZUNhbmNlbE9wZXJhdGlvbigpIFVOTEVTU19FTkFCTEVEKHsgfSkKIAogICAgIGJvb2wgaGFz
UGVuZGluZ0NvcnJlY3Rpb24oKSBjb25zdCBVTkxFU1NfRU5BQkxFRCh7IHJldHVybiBmYWxzZTsg
fSkKICAgICBib29sIGlzU3BlbGxpbmdNYXJrZXJBbGxvd2VkKFBhc3NSZWZQdHI8UmFuZ2U+IG1p
c3NwZWxsaW5nUmFuZ2UpIGNvbnN0IFVOTEVTU19FTkFCTEVEKHsgVU5VU0VEX1BBUkFNKG1pc3Nw
ZWxsaW5nUmFuZ2UpOyByZXR1cm4gdHJ1ZTsgfSkKICAgICBib29sIGlzQXV0b21hdGljU3BlbGxp
bmdDb3JyZWN0aW9uRW5hYmxlZCgpIFVOTEVTU19FTkFCTEVEKHsgcmV0dXJuIGZhbHNlOyB9KQog
ICAgIGJvb2wgc2hvdWxkUmVtb3ZlTWFya2Vyc1Vwb25FZGl0aW5nKCk7CiAKLSAgICB2b2lkIGNv
cnJlY3Rpb25QYW5lbFRpbWVyRmlyZWQoVGltZXI8U3BlbGxpbmdDb3JyZWN0aW9uQ29udHJvbGxl
cj4qKSBVTkxFU1NfRU5BQkxFRCh7fSkKICAgICB2b2lkIHJlY29yZEF1dG9jb3JyZWN0aW9uUmVz
cG9uc2VSZXZlcnNlZChjb25zdCBTdHJpbmcmIHJlcGxhY2VkU3RyaW5nLCBQYXNzUmVmUHRyPFJh
bmdlPiByZXBsYWNlbWVudFJhbmdlKSBVTkxFU1NfRU5BQkxFRCh7IFVOVVNFRF9QQVJBTShyZXBs
YWNlZFN0cmluZyk7IFVOVVNFRF9QQVJBTShyZXBsYWNlbWVudFJhbmdlKTsgfSkKICAgICB2b2lk
IG1hcmtSZXZlcnNlZChQYXNzUmVmUHRyPFJhbmdlPiBjaGFuZ2VkUmFuZ2UpIFVOTEVTU19FTkFC
TEVEKHsgVU5VU0VEX1BBUkFNKGNoYW5nZWRSYW5nZSk7IH0pCiAgICAgdm9pZCBtYXJrQ29ycmVj
dGlvbihQYXNzUmVmUHRyPFJhbmdlPiByZXBsYWNlZFJhbmdlLCBjb25zdCBTdHJpbmcmIHJlcGxh
Y2VkU3RyaW5nKSBVTkxFU1NfRU5BQkxFRCh7IFVOVVNFRF9QQVJBTShyZXBsYWNlZFJhbmdlKTsg
VU5VU0VEX1BBUkFNKHJlcGxhY2VkU3RyaW5nKTsgfSkKLSAgICB2b2lkIHJlY29yZFNwZWxsY2hl
Y2tlclJlc3BvbnNlRm9yTW9kaWZpZWRDb3JyZWN0aW9uKFJhbmdlKiByYW5nZU9mQ29ycmVjdGlv
biwgY29uc3QgU3RyaW5nJiBjb3JyZWN0ZWQsIGNvbnN0IFN0cmluZyYgY29ycmVjdGlvbikgVU5M
RVNTX0VOQUJMRUQoeyBVTlVTRURfUEFSQU0ocmFuZ2VPZkNvcnJlY3Rpb24pOyBVTlVTRURfUEFS
QU0oY29ycmVjdGVkKTsgVU5VU0VEX1BBUkFNKGNvcnJlY3Rpb24pOyB9KQogCiAgICAgLy8gVGhp
cyBmdW5jdGlvbiByZXR1cm5zIGZhbHNlIGlmIHRoZSByZXBsYWNlbWVudCBzaG91bGQgbm90IGJl
IGNhcnJpZWQgb3V0LgogICAgIGJvb2wgcHJvY2Vzc01hcmtlcnNPblRleHRUb0JlUmVwbGFjZWRC
eVJlc3VsdChjb25zdCBUZXh0Q2hlY2tpbmdSZXN1bHQqLCBSYW5nZSogcmFuZ2VUb0JlUmVwbGFj
ZWQsIGNvbnN0IFN0cmluZyYgc3RyaW5nVG9CZVJlcGxhY2VkKSBVTkxFU1NfRU5BQkxFRCh7IFVO
VVNFRF9QQVJBTShyYW5nZVRvQmVSZXBsYWNlZCk7IFVOVVNFRF9QQVJBTShzdHJpbmdUb0JlUmVw
bGFjZWQpOyByZXR1cm4gdHJ1ZTsgfSk7CkBAIC0xMTYsNyArMTE5LDExIEBAIHB1YmxpYzoKIAog
I2lmIFVTRShBVVRPQ09SUkVDVElPTl9QQU5FTCkKIHByaXZhdGU6CisgICAgU3RyaW5nIGRpc21p
c3NTb29uKFJlYXNvbkZvckRpc21pc3NpbmdBbHRlcm5hdGl2ZVRleHQpOworICAgIHZvaWQgYXBw
bHlBbHRlcm5hdGl2ZVRleHQoY29uc3QgU3RyaW5nJiBhbHRlcm5hdGl2ZSwgY29uc3QgVmVjdG9y
PERvY3VtZW50TWFya2VyOjpNYXJrZXJUeXBlPiYpOworICAgIHZvaWQgdGltZXJGaXJlZChUaW1l
cjxBbHRlcm5hdGl2ZVRleHRDb250cm9sbGVyPiopOwogICAgIHZvaWQgcmVjb3JkQXV0b2NvcnJl
Y3Rpb25SZXNwb25zZVJldmVyc2VkKGNvbnN0IFN0cmluZyYgcmVwbGFjZWRTdHJpbmcsIGNvbnN0
IFN0cmluZyYgcmVwbGFjZW1lbnRTdHJpbmcpOworICAgIHZvaWQgcmVjb3JkU3BlbGxjaGVja2Vy
UmVzcG9uc2VGb3JNb2RpZmllZENvcnJlY3Rpb24oUmFuZ2UqIHJhbmdlT2ZDb3JyZWN0aW9uLCBj
b25zdCBTdHJpbmcmIGNvcnJlY3RlZCwgY29uc3QgU3RyaW5nJiBjb3JyZWN0aW9uKTsKIAogICAg
IGJvb2wgc2hvdWxkU3RhcnRUaW1lckZvcihjb25zdCBEb2N1bWVudE1hcmtlciogbWFya2VyLCBp
bnQgZW5kT2Zmc2V0KSBjb25zdAogICAgIHsKQEAgLTEzMiw5ICsxMzksOSBAQCBwcml2YXRlOgog
ICAgIEVkaXRvckNsaWVudCogbV9jbGllbnQ7CiAgICAgRnJhbWUqIG1fZnJhbWU7CiAKLSAgICBU
aW1lcjxTcGVsbGluZ0NvcnJlY3Rpb25Db250cm9sbGVyPiBtX2NvcnJlY3Rpb25QYW5lbFRpbWVy
OwotICAgIENvcnJlY3Rpb25QYW5lbEluZm8gbV9jb3JyZWN0aW9uUGFuZWxJbmZvOwotICAgIGJv
b2wgbV9jb3JyZWN0aW9uUGFuZWxJc0Rpc21pc3NlZEJ5RWRpdG9yOworICAgIFRpbWVyPEFsdGVy
bmF0aXZlVGV4dENvbnRyb2xsZXI+IG1fdGltZXI7CisgICAgQWx0ZXJuYXRpdmVUZXh0SW5mbyBt
X2FsdGVybmF0aXZlVGV4dEluZm87CisgICAgYm9vbCBtX2lzRGlzbWlzc2VkQnlFZGl0aW5nOwog
CiAgICAgU3RyaW5nIG1fb3JpZ2luYWxTdHJpbmdGb3JMYXN0RGVsZXRlZEF1dG9jb3JyZWN0aW9u
OwogICAgIFBvc2l0aW9uIG1fcG9zaXRpb25Gb3JMYXN0RGVsZXRlZEF1dG9jb3JyZWN0aW9uOwpA
QCAtMTQzLDcgKzE1MCw3IEBAIHByaXZhdGU6CiAKICN1bmRlZiBVTkxFU1NfRU5BQkxFRAogCi1p
bmxpbmUgYm9vbCBTcGVsbGluZ0NvcnJlY3Rpb25Db250cm9sbGVyOjpzaG91bGRSZW1vdmVNYXJr
ZXJzVXBvbkVkaXRpbmcoKQoraW5saW5lIGJvb2wgQWx0ZXJuYXRpdmVUZXh0Q29udHJvbGxlcjo6
c2hvdWxkUmVtb3ZlTWFya2Vyc1Vwb25FZGl0aW5nKCkKIHsKICNpZiBVU0UoTUFSS0VSX1JFTU9W
QUxfVVBPTl9FRElUSU5HKQogICAgIHJldHVybiB0cnVlOwpAQCAtMTU0LDQgKzE2MSw0IEBAIGlu
bGluZSBib29sIFNwZWxsaW5nQ29ycmVjdGlvbkNvbnRyb2xsZXIKIAogfSAvLyBuYW1lc3BhY2Ug
V2ViQ29yZQogCi0jZW5kaWYgLy8gU3BlbGxpbmdDb3JyZWN0aW9uQ29udHJvbGxlcl9oCisjZW5k
aWYgLy8gQWx0ZXJuYXRpdmVUZXh0Q29udHJvbGxlcl9oCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9l
ZGl0aW5nL0VkaXRvci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvZWRpdGluZy9F
ZGl0b3IuY3BwCShyZXZpc2lvbiAxMTI5MTcpCisrKyBTb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0Vk
aXRvci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI4LDYgKzI4LDcgQEAKICNpbmNsdWRlICJFZGl0
b3IuaCIKIAogI2luY2x1ZGUgIkFYT2JqZWN0Q2FjaGUuaCIKKyNpbmNsdWRlICJBbHRlcm5hdGl2
ZVRleHRDb250cm9sbGVyLmgiCiAjaW5jbHVkZSAiQXBwbHlTdHlsZUNvbW1hbmQuaCIKICNpbmNs
dWRlICJDU1NDb21wdXRlZFN0eWxlRGVjbGFyYXRpb24uaCIKICNpbmNsdWRlICJDU1NQcm9wZXJ0
eS5oIgpAQCAtMzcsNyArMzgsNiBAQAogI2luY2x1ZGUgIkNhY2hlZFJlc291cmNlTG9hZGVyLmgi
CiAjaW5jbHVkZSAiQ2xpcGJvYXJkRXZlbnQuaCIKICNpbmNsdWRlICJDb21wb3NpdGlvbkV2ZW50
LmgiCi0jaW5jbHVkZSAiU3BlbGxpbmdDb3JyZWN0aW9uQ29udHJvbGxlci5oIgogI2luY2x1ZGUg
IkNyZWF0ZUxpbmtDb21tYW5kLmgiCiAjaW5jbHVkZSAiRGVsZXRlQnV0dG9uQ29udHJvbGxlci5o
IgogI2luY2x1ZGUgIkRlbGV0ZVNlbGVjdGlvbkNvbW1hbmQuaCIKQEAgLTQ4Miw3ICs0ODIsNyBA
QCB2b2lkIEVkaXRvcjo6cmVzcG9uZFRvQ2hhbmdlZFNlbGVjdGlvbihjCiAgICAgICAgIGNsaWVu
dCgpLT5yZXNwb25kVG9DaGFuZ2VkU2VsZWN0aW9uKG1fZnJhbWUpOwogICAgIHNldFN0YXJ0TmV3
S2lsbFJpbmdTZXF1ZW5jZSh0cnVlKTsKICAgICBtX2RlbGV0ZUJ1dHRvbkNvbnRyb2xsZXItPnJl
c3BvbmRUb0NoYW5nZWRTZWxlY3Rpb24ob2xkU2VsZWN0aW9uKTsKLSAgICBtX3NwZWxsaW5nQ29y
cmVjdG9yLT5yZXNwb25kVG9DaGFuZ2VkU2VsZWN0aW9uKG9sZFNlbGVjdGlvbik7CisgICAgbV9h
bHRlcm5hdGl2ZVRleHRDb250cm9sbGVyLT5yZXNwb25kVG9DaGFuZ2VkU2VsZWN0aW9uKG9sZFNl
bGVjdGlvbik7CiB9CiAKIHZvaWQgRWRpdG9yOjpyZXNwb25kVG9DaGFuZ2VkQ29udGVudHMoY29u
c3QgVmlzaWJsZVNlbGVjdGlvbiYgZW5kaW5nU2VsZWN0aW9uKQpAQCAtNzgyLDcgKzc4Miw3IEBA
IHZvaWQgRWRpdG9yOjphcHBsaWVkRWRpdGluZyhQYXNzUmVmUHRyPEMKICAgICBkaXNwYXRjaEVk
aXRhYmxlQ29udGVudENoYW5nZWRFdmVudHMoY29tcG9zaXRpb24tPnN0YXJ0aW5nUm9vdEVkaXRh
YmxlRWxlbWVudCgpLCBjb21wb3NpdGlvbi0+ZW5kaW5nUm9vdEVkaXRhYmxlRWxlbWVudCgpKTsK
ICAgICBWaXNpYmxlU2VsZWN0aW9uIG5ld1NlbGVjdGlvbihjbWQtPmVuZGluZ1NlbGVjdGlvbigp
KTsKIAotICAgIG1fc3BlbGxpbmdDb3JyZWN0b3ItPnJlc3BvbmRUb0FwcGxpZWRFZGl0aW5nKGNt
ZC5nZXQoKSk7CisgICAgbV9hbHRlcm5hdGl2ZVRleHRDb250cm9sbGVyLT5yZXNwb25kVG9BcHBs
aWVkRWRpdGluZyhjbWQuZ2V0KCkpOwogCiAgICAgLy8gRG9uJ3QgY2xlYXIgdGhlIHR5cGluZyBz
dHlsZSB3aXRoIHRoaXMgc2VsZWN0aW9uIGNoYW5nZS4gIFdlIGRvIHRob3NlIHRoaW5ncyBlbHNl
d2hlcmUgaWYgbmVjZXNzYXJ5LgogICAgIGNoYW5nZVNlbGVjdGlvbkFmdGVyQ29tbWFuZChuZXdT
ZWxlY3Rpb24sIGZhbHNlLCBmYWxzZSk7CkBAIC04MTIsNyArODEyLDcgQEAgdm9pZCBFZGl0b3I6
OnVuYXBwbGllZEVkaXRpbmcoUGFzc1JlZlB0cgogICAgIAogICAgIFZpc2libGVTZWxlY3Rpb24g
bmV3U2VsZWN0aW9uKGNtZC0+c3RhcnRpbmdTZWxlY3Rpb24oKSk7CiAgICAgY2hhbmdlU2VsZWN0
aW9uQWZ0ZXJDb21tYW5kKG5ld1NlbGVjdGlvbiwgdHJ1ZSwgdHJ1ZSk7Ci0gICAgbV9zcGVsbGlu
Z0NvcnJlY3Rvci0+cmVzcG9uZFRvVW5hcHBsaWVkRWRpdGluZyhjbWQuZ2V0KCkpOworICAgIG1f
YWx0ZXJuYXRpdmVUZXh0Q29udHJvbGxlci0+cmVzcG9uZFRvVW5hcHBsaWVkRWRpdGluZyhjbWQu
Z2V0KCkpOwogICAgIAogICAgIG1fbGFzdEVkaXRDb21tYW5kID0gMDsKICAgICBpZiAoY2xpZW50
KCkpCkBAIC04NDQsNyArODQ0LDcgQEAgRWRpdG9yOjpFZGl0b3IoRnJhbWUqIGZyYW1lKQogICAg
ICwgbV9zaG91bGRTdHlsZVdpdGhDU1MoZmFsc2UpCiAgICAgLCBtX2tpbGxSaW5nKGFkb3B0UHRy
KG5ldyBLaWxsUmluZykpCiAgICAgLCBtX3NwZWxsQ2hlY2tlcihhZG9wdFB0cihuZXcgU3BlbGxD
aGVja2VyKGZyYW1lKSkpCi0gICAgLCBtX3NwZWxsaW5nQ29ycmVjdG9yKGFkb3B0UHRyKG5ldyBT
cGVsbGluZ0NvcnJlY3Rpb25Db250cm9sbGVyKGZyYW1lKSkpCisgICAgLCBtX2FsdGVybmF0aXZl
VGV4dENvbnRyb2xsZXIoYWRvcHRQdHIobmV3IEFsdGVybmF0aXZlVGV4dENvbnRyb2xsZXIoZnJh
bWUpKSkKICAgICAsIG1fYXJlTWFya2VkVGV4dE1hdGNoZXNIaWdobGlnaHRlZChmYWxzZSkKICAg
ICAsIG1fZGVmYXVsdFBhcmFncmFwaFNlcGFyYXRvcihFZGl0b3JQYXJhZ3JhcGhTZXBhcmF0b3JJ
c0RpdikKIHsKQEAgLTg5NSw3ICs4OTUsNyBAQCBib29sIEVkaXRvcjo6aW5zZXJ0VGV4dFdpdGhv
dXRTZW5kaW5nVGV4CiAgICAgaWYgKHRleHQubGVuZ3RoKCkgPT0gMSAmJiBpc1B1bmN0KHRleHRb
MF0pICYmICFpc0FtYmlndW91c0JvdW5kYXJ5Q2hhcmFjdGVyKHRleHRbMF0pKQogICAgICAgICBz
aG91bGRDb25zaWRlckFwcGx5aW5nQXV0b2NvcnJlY3Rpb24gPSB0cnVlOwogCi0gICAgYm9vbCBh
dXRvY29ycmVjdGlvbldhc0FwcGxpZWQgPSBzaG91bGRDb25zaWRlckFwcGx5aW5nQXV0b2NvcnJl
Y3Rpb24gJiYgbV9zcGVsbGluZ0NvcnJlY3Rvci0+YXBwbHlBdXRvY29ycmVjdGlvbkJlZm9yZVR5
cGluZ0lmQXBwcm9wcmlhdGUoKTsKKyAgICBib29sIGF1dG9jb3JyZWN0aW9uV2FzQXBwbGllZCA9
IHNob3VsZENvbnNpZGVyQXBwbHlpbmdBdXRvY29ycmVjdGlvbiAmJiBtX2FsdGVybmF0aXZlVGV4
dENvbnRyb2xsZXItPmFwcGx5QXV0b2NvcnJlY3Rpb25CZWZvcmVUeXBpbmdJZkFwcHJvcHJpYXRl
KCk7CiAKICAgICAvLyBHZXQgdGhlIHNlbGVjdGlvbiB0byB1c2UgZm9yIHRoZSBldmVudCB0aGF0
IHRyaWdnZXJlZCB0aGlzIGluc2VydFRleHQuCiAgICAgLy8gSWYgdGhlIGV2ZW50IGhhbmRsZXIg
Y2hhbmdlZCB0aGUgc2VsZWN0aW9uLCB3ZSBtYXkgd2FudCB0byB1c2UgYSBkaWZmZXJlbnQgc2Vs
ZWN0aW9uCkBAIC05MzEsNyArOTMxLDcgQEAgYm9vbCBFZGl0b3I6Omluc2VydExpbmVCcmVhaygp
CiAgICAgaWYgKCFzaG91bGRJbnNlcnRUZXh0KCJcbiIsIG1fZnJhbWUtPnNlbGVjdGlvbigpLT50
b05vcm1hbGl6ZWRSYW5nZSgpLmdldCgpLCBFZGl0b3JJbnNlcnRBY3Rpb25UeXBlZCkpCiAgICAg
ICAgIHJldHVybiB0cnVlOwogCi0gICAgYm9vbCBhdXRvY29ycmVjdGlvbklzQXBwbGllZCA9IG1f
c3BlbGxpbmdDb3JyZWN0b3ItPmFwcGx5QXV0b2NvcnJlY3Rpb25CZWZvcmVUeXBpbmdJZkFwcHJv
cHJpYXRlKCk7CisgICAgYm9vbCBhdXRvY29ycmVjdGlvbklzQXBwbGllZCA9IG1fYWx0ZXJuYXRp
dmVUZXh0Q29udHJvbGxlci0+YXBwbHlBdXRvY29ycmVjdGlvbkJlZm9yZVR5cGluZ0lmQXBwcm9w
cmlhdGUoKTsKICAgICBUeXBpbmdDb21tYW5kOjppbnNlcnRMaW5lQnJlYWsobV9mcmFtZS0+ZG9j
dW1lbnQoKSwgYXV0b2NvcnJlY3Rpb25Jc0FwcGxpZWQgPyBUeXBpbmdDb21tYW5kOjpSZXRhaW5B
dXRvY29ycmVjdGlvbkluZGljYXRvciA6IDApOwogICAgIHJldmVhbFNlbGVjdGlvbkFmdGVyRWRp
dGluZ09wZXJhdGlvbigpOwogCkBAIC05NDksNyArOTQ5LDcgQEAgYm9vbCBFZGl0b3I6Omluc2Vy
dFBhcmFncmFwaFNlcGFyYXRvcigpCiAgICAgaWYgKCFzaG91bGRJbnNlcnRUZXh0KCJcbiIsIG1f
ZnJhbWUtPnNlbGVjdGlvbigpLT50b05vcm1hbGl6ZWRSYW5nZSgpLmdldCgpLCBFZGl0b3JJbnNl
cnRBY3Rpb25UeXBlZCkpCiAgICAgICAgIHJldHVybiB0cnVlOwogCi0gICAgYm9vbCBhdXRvY29y
cmVjdGlvbklzQXBwbGllZCA9IG1fc3BlbGxpbmdDb3JyZWN0b3ItPmFwcGx5QXV0b2NvcnJlY3Rp
b25CZWZvcmVUeXBpbmdJZkFwcHJvcHJpYXRlKCk7CisgICAgYm9vbCBhdXRvY29ycmVjdGlvbklz
QXBwbGllZCA9IG1fYWx0ZXJuYXRpdmVUZXh0Q29udHJvbGxlci0+YXBwbHlBdXRvY29ycmVjdGlv
bkJlZm9yZVR5cGluZ0lmQXBwcm9wcmlhdGUoKTsKICAgICBUeXBpbmdDb21tYW5kOjppbnNlcnRQ
YXJhZ3JhcGhTZXBhcmF0b3IobV9mcmFtZS0+ZG9jdW1lbnQoKSwgYXV0b2NvcnJlY3Rpb25Jc0Fw
cGxpZWQgPyBUeXBpbmdDb21tYW5kOjpSZXRhaW5BdXRvY29ycmVjdGlvbkluZGljYXRvciA6IDAp
OwogICAgIHJldmVhbFNlbGVjdGlvbkFmdGVyRWRpdGluZ09wZXJhdGlvbigpOwogCkBAIC0xMTcz
LDcgKzExNzMsNyBAQCB2b2lkIEVkaXRvcjo6dG9nZ2xlQXV0b21hdGljVGV4dFJlcGxhY2VtCiAK
IGJvb2wgRWRpdG9yOjppc0F1dG9tYXRpY1NwZWxsaW5nQ29ycmVjdGlvbkVuYWJsZWQoKQogewot
ICAgIHJldHVybiBtX3NwZWxsaW5nQ29ycmVjdG9yLT5pc0F1dG9tYXRpY1NwZWxsaW5nQ29ycmVj
dGlvbkVuYWJsZWQoKTsKKyAgICByZXR1cm4gbV9hbHRlcm5hdGl2ZVRleHRDb250cm9sbGVyLT5p
c0F1dG9tYXRpY1NwZWxsaW5nQ29ycmVjdGlvbkVuYWJsZWQoKTsKIH0KIAogdm9pZCBFZGl0b3I6
OnRvZ2dsZUF1dG9tYXRpY1NwZWxsaW5nQ29ycmVjdGlvbigpCkBAIC0xNzcyLDcgKzE3NzIsNyBA
QCB2b2lkIEVkaXRvcjo6bWFya01pc3NwZWxsaW5nc0FmdGVyVHlwaW5nCiAjZW5kaWYKIAogICAg
IGlmICh1bmlmaWVkVGV4dENoZWNrZXJFbmFibGVkKCkpIHsKLSAgICAgICAgbV9zcGVsbGluZ0Nv
cnJlY3Rvci0+YXBwbHlQZW5kaW5nQ29ycmVjdGlvbihzZWxlY3Rpb25BZnRlclR5cGluZyk7Cisg
ICAgICAgIG1fYWx0ZXJuYXRpdmVUZXh0Q29udHJvbGxlci0+YXBwbHlQZW5kaW5nQ29ycmVjdGlv
bihzZWxlY3Rpb25BZnRlclR5cGluZyk7CiAKICAgICAgICAgVGV4dENoZWNraW5nVHlwZU1hc2sg
dGV4dENoZWNraW5nT3B0aW9ucyA9IDA7CiAKQEAgLTE5MTIsNyArMTkxMiw3IEBAIHZvaWQgRWRp
dG9yOjptYXJrQWxsTWlzc3BlbGxpbmdzQW5kQmFkR3IKICAgICBBU1NFUlQodW5pZmllZFRleHRD
aGVja2VyRW5hYmxlZCgpKTsKIAogICAgIC8vIFRoZXJlIHNob3VsZG4ndCBiZSBwZW5kaW5nIGF1
dG9jb3JyZWN0aW9uIGF0IHRoaXMgbW9tZW50LgotICAgIEFTU0VSVCghbV9zcGVsbGluZ0NvcnJl
Y3Rvci0+aGFzUGVuZGluZ0NvcnJlY3Rpb24oKSk7CisgICAgQVNTRVJUKCFtX2FsdGVybmF0aXZl
VGV4dENvbnRyb2xsZXItPmhhc1BlbmRpbmdDb3JyZWN0aW9uKCkpOwogCiAgICAgYm9vbCBzaG91
bGRNYXJrR3JhbW1hciA9IHRleHRDaGVja2luZ09wdGlvbnMgJiBUZXh0Q2hlY2tpbmdUeXBlR3Jh
bW1hcjsKICAgICBib29sIHNob3VsZFNob3dDb3JyZWN0aW9uUGFuZWwgPSB0ZXh0Q2hlY2tpbmdP
cHRpb25zICYgVGV4dENoZWNraW5nVHlwZVNob3dDb3JyZWN0aW9uUGFuZWw7CkBAIC0yMDA1LDcg
KzIwMDUsNyBAQCB2b2lkIEVkaXRvcjo6bWFya0FuZFJlcGxhY2VGb3IoUGFzc1JlZlB0CiAgICAg
ICAgIGlmIChzaG91bGRNYXJrU3BlbGxpbmcgJiYgcmVzdWx0LT50eXBlID09IFRleHRDaGVja2lu
Z1R5cGVTcGVsbGluZyAmJiByZXN1bHRMb2NhdGlvbiA+PSBwYXJhZ3JhcGguY2hlY2tpbmdTdGFy
dCgpICYmIHJlc3VsdExvY2F0aW9uICsgcmVzdWx0TGVuZ3RoIDw9IHNwZWxsaW5nUmFuZ2VFbmRP
ZmZzZXQgJiYgIXJlc3VsdEVuZHNBdEFtYmlndW91c0JvdW5kYXJ5KSB7CiAgICAgICAgICAgICBB
U1NFUlQocmVzdWx0TGVuZ3RoID4gMCAmJiByZXN1bHRMb2NhdGlvbiA+PSAwKTsKICAgICAgICAg
ICAgIFJlZlB0cjxSYW5nZT4gbWlzc3BlbGxpbmdSYW5nZSA9IHBhcmFncmFwaC5zdWJyYW5nZShy
ZXN1bHRMb2NhdGlvbiwgcmVzdWx0TGVuZ3RoKTsKLSAgICAgICAgICAgIGlmICghbV9zcGVsbGlu
Z0NvcnJlY3Rvci0+aXNTcGVsbGluZ01hcmtlckFsbG93ZWQobWlzc3BlbGxpbmdSYW5nZSkpCisg
ICAgICAgICAgICBpZiAoIW1fYWx0ZXJuYXRpdmVUZXh0Q29udHJvbGxlci0+aXNTcGVsbGluZ01h
cmtlckFsbG93ZWQobWlzc3BlbGxpbmdSYW5nZSkpCiAgICAgICAgICAgICAgICAgY29udGludWU7
CiAgICAgICAgICAgICBtaXNzcGVsbGluZ1JhbmdlLT5zdGFydENvbnRhaW5lcigpLT5kb2N1bWVu
dCgpLT5tYXJrZXJzKCktPmFkZE1hcmtlcihtaXNzcGVsbGluZ1JhbmdlLmdldCgpLCBEb2N1bWVu
dE1hcmtlcjo6U3BlbGxpbmcsIHJlc3VsdC0+cmVwbGFjZW1lbnQpOwogICAgICAgICB9IGVsc2Ug
aWYgKHNob3VsZE1hcmtHcmFtbWFyICYmIHJlc3VsdC0+dHlwZSA9PSBUZXh0Q2hlY2tpbmdUeXBl
R3JhbW1hciAmJiBwYXJhZ3JhcGguY2hlY2tpbmdSYW5nZUNvdmVycyhyZXN1bHRMb2NhdGlvbiwg
cmVzdWx0TGVuZ3RoKSkgewpAQCAtMjA0OCw3ICsyMDQ4LDcgQEAgdm9pZCBFZGl0b3I6Om1hcmtB
bmRSZXBsYWNlRm9yKFBhc3NSZWZQdAogICAgICAgICAgICAgICAgIGNvbnRpbnVlOwogCiAgICAg
ICAgICAgICBTdHJpbmcgcmVwbGFjZWRTdHJpbmcgPSBwbGFpblRleHQocmFuZ2VUb1JlcGxhY2Uu
Z2V0KCkpOwotICAgICAgICAgICAgYm9vbCBleGlzdGluZ01hcmtlcnNQZXJtaXRSZXBsYWNlbWVu
dCA9IG1fc3BlbGxpbmdDb3JyZWN0b3ItPnByb2Nlc3NNYXJrZXJzT25UZXh0VG9CZVJlcGxhY2Vk
QnlSZXN1bHQocmVzdWx0LCByYW5nZVRvUmVwbGFjZS5nZXQoKSwgcmVwbGFjZWRTdHJpbmcpOwor
ICAgICAgICAgICAgYm9vbCBleGlzdGluZ01hcmtlcnNQZXJtaXRSZXBsYWNlbWVudCA9IG1fYWx0
ZXJuYXRpdmVUZXh0Q29udHJvbGxlci0+cHJvY2Vzc01hcmtlcnNPblRleHRUb0JlUmVwbGFjZWRC
eVJlc3VsdChyZXN1bHQsIHJhbmdlVG9SZXBsYWNlLmdldCgpLCByZXBsYWNlZFN0cmluZyk7CiAg
ICAgICAgICAgICBpZiAoIWV4aXN0aW5nTWFya2Vyc1Blcm1pdFJlcGxhY2VtZW50KQogICAgICAg
ICAgICAgICAgIGNvbnRpbnVlOwogCkBAIC0yMDU5LDcgKzIwNTksNyBAQCB2b2lkIEVkaXRvcjo6
bWFya0FuZFJlcGxhY2VGb3IoUGFzc1JlZlB0CiAgICAgICAgICAgICAgICAgLy8gc2hvdWxkU2hv
d0NvcnJlY3Rpb25QYW5lbCBjYW4gYmUgdHJ1ZSBvbmx5IHdoZW4gdGhlIHBhbmVsIGlzIGF2YWls
YWJsZS4KICAgICAgICAgICAgICAgICBpZiAocmVzdWx0TG9jYXRpb24gKyByZXN1bHRMZW5ndGgg
PT0gc3BlbGxpbmdSYW5nZUVuZE9mZnNldCkgewogICAgICAgICAgICAgICAgICAgICAvLyBXZSBv
bmx5IHNob3cgdGhlIGNvcnJlY3Rpb24gcGFuZWwgb24gdGhlIGxhc3Qgd29yZC4KLSAgICAgICAg
ICAgICAgICAgICAgbV9zcGVsbGluZ0NvcnJlY3Rvci0+c2hvdyhyYW5nZVRvUmVwbGFjZSwgcmVz
dWx0LT5yZXBsYWNlbWVudCk7CisgICAgICAgICAgICAgICAgICAgIG1fYWx0ZXJuYXRpdmVUZXh0
Q29udHJvbGxlci0+c2hvdyhyYW5nZVRvUmVwbGFjZSwgcmVzdWx0LT5yZXBsYWNlbWVudCk7CiAg
ICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAg
ICAgICAvLyBJZiB0aGlzIGZ1bmN0aW9uIGlzIGNhbGxlZCBmb3Igc2hvd2luZyBjb3JyZWN0aW9u
IHBhbmVsLCB3ZSBpZ25vcmUgb3RoZXIgY29ycmVjdGlvbiBvciByZXBsYWNlbWVudC4KQEAgLTIw
OTUsNyArMjA5NSw3IEBAIHZvaWQgRWRpdG9yOjptYXJrQW5kUmVwbGFjZUZvcihQYXNzUmVmUHQK
IAogICAgICAgICAgICAgICAgIC8vIEFkZCBhIG1hcmtlciBzbyB0aGF0IGNvcnJlY3Rpb25zIGNh
biBlYXNpbHkgYmUgdW5kb25lIGFuZCB3b24ndCBiZSByZS1jb3JyZWN0ZWQuCiAgICAgICAgICAg
ICAgICAgaWYgKHJlc3VsdC0+dHlwZSA9PSBUZXh0Q2hlY2tpbmdUeXBlQ29ycmVjdGlvbikKLSAg
ICAgICAgICAgICAgICAgICAgbV9zcGVsbGluZ0NvcnJlY3Rvci0+bWFya0NvcnJlY3Rpb24ocGFy
YWdyYXBoLnN1YnJhbmdlKHJlc3VsdExvY2F0aW9uLCByZXBsYWNlbWVudExlbmd0aCksIHJlcGxh
Y2VkU3RyaW5nKTsKKyAgICAgICAgICAgICAgICAgICAgbV9hbHRlcm5hdGl2ZVRleHRDb250cm9s
bGVyLT5tYXJrQ29ycmVjdGlvbihwYXJhZ3JhcGguc3VicmFuZ2UocmVzdWx0TG9jYXRpb24sIHJl
cGxhY2VtZW50TGVuZ3RoKSwgcmVwbGFjZWRTdHJpbmcpOwogICAgICAgICAgICAgfQogICAgICAg
ICB9CiAgICAgfQpAQCAtMjEyOCwxMiArMjEyOCwxMiBAQCB2b2lkIEVkaXRvcjo6Y2hhbmdlQmFj
a1RvUmVwbGFjZWRTdHJpbmcoCiAgICAgaWYgKCFzaG91bGRJbnNlcnRUZXh0KHJlcGxhY2VkU3Ry
aW5nLCBzZWxlY3Rpb24uZ2V0KCksIEVkaXRvckluc2VydEFjdGlvblBhc3RlZCkpCiAgICAgICAg
IHJldHVybjsKICAgICAKLSAgICBtX3NwZWxsaW5nQ29ycmVjdG9yLT5yZWNvcmRBdXRvY29ycmVj
dGlvblJlc3BvbnNlUmV2ZXJzZWQocmVwbGFjZWRTdHJpbmcsIHNlbGVjdGlvbik7CisgICAgbV9h
bHRlcm5hdGl2ZVRleHRDb250cm9sbGVyLT5yZWNvcmRBdXRvY29ycmVjdGlvblJlc3BvbnNlUmV2
ZXJzZWQocmVwbGFjZWRTdHJpbmcsIHNlbGVjdGlvbik7CiAgICAgVGV4dENoZWNraW5nUGFyYWdy
YXBoIHBhcmFncmFwaChzZWxlY3Rpb24pOwogICAgIHJlcGxhY2VTZWxlY3Rpb25XaXRoVGV4dChy
ZXBsYWNlZFN0cmluZywgZmFsc2UsIGZhbHNlKTsKICAgICBSZWZQdHI8UmFuZ2U+IGNoYW5nZWRS
YW5nZSA9IHBhcmFncmFwaC5zdWJyYW5nZShwYXJhZ3JhcGguY2hlY2tpbmdTdGFydCgpLCByZXBs
YWNlZFN0cmluZy5sZW5ndGgoKSk7CiAgICAgY2hhbmdlZFJhbmdlLT5zdGFydENvbnRhaW5lcigp
LT5kb2N1bWVudCgpLT5tYXJrZXJzKCktPmFkZE1hcmtlcihjaGFuZ2VkUmFuZ2UuZ2V0KCksIERv
Y3VtZW50TWFya2VyOjpSZXBsYWNlbWVudCwgU3RyaW5nKCkpOwotICAgIG1fc3BlbGxpbmdDb3Jy
ZWN0b3ItPm1hcmtSZXZlcnNlZChjaGFuZ2VkUmFuZ2UuZ2V0KCkpOworICAgIG1fYWx0ZXJuYXRp
dmVUZXh0Q29udHJvbGxlci0+bWFya1JldmVyc2VkKGNoYW5nZWRSYW5nZS5nZXQoKSk7CiB9CiAK
IApAQCAtMjE1NywxMiArMjE1NywxMiBAQCB2b2lkIEVkaXRvcjo6bWFya01pc3NwZWxsaW5nc0Fu
ZEJhZEdyYW1tCiAKIHZvaWQgRWRpdG9yOjp1bmFwcGxpZWRTcGVsbENvcnJlY3Rpb24oY29uc3Qg
VmlzaWJsZVNlbGVjdGlvbiYgc2VsZWN0aW9uT2ZDb3JyZWN0ZWQsIGNvbnN0IFN0cmluZyYgY29y
cmVjdGVkLCBjb25zdCBTdHJpbmcmIGNvcnJlY3Rpb24pCiB7Ci0gICAgbV9zcGVsbGluZ0NvcnJl
Y3Rvci0+cmVzcG9uZFRvVW5hcHBsaWVkU3BlbGxDb3JyZWN0aW9uKHNlbGVjdGlvbk9mQ29ycmVj
dGVkLCBjb3JyZWN0ZWQsIGNvcnJlY3Rpb24pOworICAgIG1fYWx0ZXJuYXRpdmVUZXh0Q29udHJv
bGxlci0+cmVzcG9uZFRvVW5hcHBsaWVkU3BlbGxDb3JyZWN0aW9uKHNlbGVjdGlvbk9mQ29ycmVj
dGVkLCBjb3JyZWN0ZWQsIGNvcnJlY3Rpb24pOwogfQogCiB2b2lkIEVkaXRvcjo6dXBkYXRlTWFy
a2Vyc0ZvcldvcmRzQWZmZWN0ZWRCeUVkaXRpbmcoYm9vbCBkb05vdFJlbW92ZUlmU2VsZWN0aW9u
QXRXb3JkQm91bmRhcnkpCiB7Ci0gICAgaWYgKCFtX3NwZWxsaW5nQ29ycmVjdG9yLT5zaG91bGRS
ZW1vdmVNYXJrZXJzVXBvbkVkaXRpbmcoKSkKKyAgICBpZiAoIW1fYWx0ZXJuYXRpdmVUZXh0Q29u
dHJvbGxlci0+c2hvdWxkUmVtb3ZlTWFya2Vyc1Vwb25FZGl0aW5nKCkpCiAgICAgICAgIHJldHVy
bjsKIAogICAgIC8vIFdlIHdhbnQgdG8gcmVtb3ZlIHRoZSBtYXJrZXJzIGZyb20gYSB3b3JkIGlm
IGFuIGVkaXRpbmcgY29tbWFuZCB3aWxsIGNoYW5nZSB0aGUgd29yZC4gVGhpcyBjYW4gaGFwcGVu
IGluIG9uZSBvZgpAQCAtMjIzMiw3ICsyMjMyLDcgQEAgdm9pZCBFZGl0b3I6OnVwZGF0ZU1hcmtl
cnNGb3JXb3Jkc0FmZmVjdAogCiB2b2lkIEVkaXRvcjo6ZGVsZXRlZEF1dG9jb3JyZWN0aW9uQXRQ
b3NpdGlvbihjb25zdCBQb3NpdGlvbiYgcG9zaXRpb24sIGNvbnN0IFN0cmluZyYgb3JpZ2luYWxT
dHJpbmcpCiB7Ci0gICAgbV9zcGVsbGluZ0NvcnJlY3Rvci0+ZGVsZXRlZEF1dG9jb3JyZWN0aW9u
QXRQb3NpdGlvbihwb3NpdGlvbiwgb3JpZ2luYWxTdHJpbmcpOworICAgIG1fYWx0ZXJuYXRpdmVU
ZXh0Q29udHJvbGxlci0+ZGVsZXRlZEF1dG9jb3JyZWN0aW9uQXRQb3NpdGlvbihwb3NpdGlvbiwg
b3JpZ2luYWxTdHJpbmcpOwogfQogCiBQYXNzUmVmUHRyPFJhbmdlPiBFZGl0b3I6OnJhbmdlRm9y
UG9pbnQoY29uc3QgSW50UG9pbnQmIHdpbmRvd1BvaW50KQpAQCAtMjM1NywyMCArMjM1NywyMCBA
QCB2b2lkIEVkaXRvcjo6YWRkVG9LaWxsUmluZyhSYW5nZSogcmFuZ2UsCiAgICAgbV9zaG91bGRT
dGFydE5ld0tpbGxSaW5nU2VxdWVuY2UgPSBmYWxzZTsKIH0KIAotdm9pZCBFZGl0b3I6OnN0YXJ0
Q29ycmVjdGlvblBhbmVsVGltZXIoKQordm9pZCBFZGl0b3I6OnN0YXJ0QWx0ZXJuYXRpdmVUZXh0
VUlUaW1lcigpCiB7Ci0gICAgbV9zcGVsbGluZ0NvcnJlY3Rvci0+c3RhcnRDb3JyZWN0aW9uUGFu
ZWxUaW1lcihDb3JyZWN0aW9uUGFuZWxJbmZvOjpQYW5lbFR5cGVDb3JyZWN0aW9uKTsKKyAgICBt
X2FsdGVybmF0aXZlVGV4dENvbnRyb2xsZXItPnN0YXJ0QWx0ZXJuYXRpdmVUZXh0VUlUaW1lcihB
bHRlcm5hdGl2ZVRleHRUeXBlQ29ycmVjdGlvbik7CiB9CiAKLXZvaWQgRWRpdG9yOjpoYW5kbGVD
b3JyZWN0aW9uUGFuZWxSZXN1bHQoY29uc3QgU3RyaW5nJiBjb3JyZWN0aW9uKQordm9pZCBFZGl0
b3I6OmhhbmRsZUFsdGVybmF0aXZlVGV4dFVJUmVzdWx0KGNvbnN0IFN0cmluZyYgY29ycmVjdGlv
bikKIHsKLSAgICBtX3NwZWxsaW5nQ29ycmVjdG9yLT5oYW5kbGVDb3JyZWN0aW9uUGFuZWxSZXN1
bHQoY29ycmVjdGlvbik7CisgICAgbV9hbHRlcm5hdGl2ZVRleHRDb250cm9sbGVyLT5oYW5kbGVB
bHRlcm5hdGl2ZVRleHRVSVJlc3VsdChjb3JyZWN0aW9uKTsKIH0KIAogCiB2b2lkIEVkaXRvcjo6
ZGlzbWlzc0NvcnJlY3Rpb25QYW5lbEFzSWdub3JlZCgpCiB7Ci0gICAgbV9zcGVsbGluZ0NvcnJl
Y3Rvci0+ZGlzbWlzcyhSZWFzb25Gb3JEaXNtaXNzaW5nQ29ycmVjdGlvblBhbmVsSWdub3JlZCk7
CisgICAgbV9hbHRlcm5hdGl2ZVRleHRDb250cm9sbGVyLT5kaXNtaXNzKFJlYXNvbkZvckRpc21p
c3NpbmdBbHRlcm5hdGl2ZVRleHRJZ25vcmVkKTsKIH0KIAogYm9vbCBFZGl0b3I6Omluc2lkZVZp
c2libGVBcmVhKGNvbnN0IExheW91dFBvaW50JiBwb2ludCkgY29uc3QKQEAgLTI4ODYsNyArMjg4
Niw3IEBAIHZvaWQgRWRpdG9yOjpzZXRNYXJrZWRUZXh0TWF0Y2hlc0FyZUhpZ2gKIAogdm9pZCBF
ZGl0b3I6OnJlc3BvbmRUb0NoYW5nZWRTZWxlY3Rpb24oY29uc3QgVmlzaWJsZVNlbGVjdGlvbiYg
b2xkU2VsZWN0aW9uLCBGcmFtZVNlbGVjdGlvbjo6U2V0U2VsZWN0aW9uT3B0aW9ucyBvcHRpb25z
KQogewotICAgIG1fc3BlbGxpbmdDb3JyZWN0b3ItPnN0b3BQZW5kaW5nQ29ycmVjdGlvbihvbGRT
ZWxlY3Rpb24pOworICAgIG1fYWx0ZXJuYXRpdmVUZXh0Q29udHJvbGxlci0+c3RvcFBlbmRpbmdD
b3JyZWN0aW9uKG9sZFNlbGVjdGlvbik7CiAKICAgICBib29sIGNsb3NlVHlwaW5nID0gb3B0aW9u
cyAmIEZyYW1lU2VsZWN0aW9uOjpDbG9zZVR5cGluZzsKICAgICBib29sIGlzQ29udGludW91c1Nw
ZWxsQ2hlY2tpbmdFbmFibGVkID0gdGhpcy0+aXNDb250aW51b3VzU3BlbGxDaGVja2luZ0VuYWJs
ZWQoKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2VkaXRpbmcvRWRpdG9yLmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1dlYkNvcmUvZWRpdGluZy9FZGl0b3IuaAkocmV2aXNpb24gMTEyOTE3KQorKysg
U291cmNlL1dlYkNvcmUvZWRpdGluZy9FZGl0b3IuaAkod29ya2luZyBjb3B5KQpAQCAtNjEsNyAr
NjEsNyBAQCBjbGFzcyBQYXN0ZWJvYXJkOwogY2xhc3MgU2ltcGxlRm9udERhdGE7CiBjbGFzcyBT
cGVsbENoZWNrZXI7CiBjbGFzcyBTcGVsbENoZWNrUmVxdWVzdDsKLWNsYXNzIFNwZWxsaW5nQ29y
cmVjdGlvbkNvbnRyb2xsZXI7CitjbGFzcyBBbHRlcm5hdGl2ZVRleHRDb250cm9sbGVyOwogY2xh
c3MgU3R5bGVQcm9wZXJ0eVNldDsKIGNsYXNzIFRleHQ7CiBjbGFzcyBUZXh0Q2hlY2tlckNsaWVu
dDsKQEAgLTMxOSw5ICszMTksOSBAQCBwdWJsaWM6CiAKICAgICB2b2lkIGFkZFRvS2lsbFJpbmco
UmFuZ2UqLCBib29sIHByZXBlbmQpOwogCi0gICAgdm9pZCBzdGFydENvcnJlY3Rpb25QYW5lbFRp
bWVyKCk7CisgICAgdm9pZCBzdGFydEFsdGVybmF0aXZlVGV4dFVJVGltZXIoKTsKICAgICAvLyBJ
ZiB1c2VyIGNvbmZpcm1lZCBhIGNvcnJlY3Rpb24gaW4gdGhlIGNvcnJlY3Rpb24gcGFuZWwsIGNv
cnJlY3Rpb24gaGFzIG5vbi16ZXJvIGxlbmd0aCwgb3RoZXJ3aXNlIGl0IG1lYW5zIHRoYXQgdXNl
ciBoYXMgZGlzbWlzc2VkIHRoZSBwYW5lbC4KLSAgICB2b2lkIGhhbmRsZUNvcnJlY3Rpb25QYW5l
bFJlc3VsdChjb25zdCBTdHJpbmcmIGNvcnJlY3Rpb24pOworICAgIHZvaWQgaGFuZGxlQWx0ZXJu
YXRpdmVUZXh0VUlSZXN1bHQoY29uc3QgU3RyaW5nJiBjb3JyZWN0aW9uKTsKICAgICB2b2lkIGRp
c21pc3NDb3JyZWN0aW9uUGFuZWxBc0lnbm9yZWQoKTsKIAogICAgIHZvaWQgcGFzdGVBc0ZyYWdt
ZW50KFBhc3NSZWZQdHI8RG9jdW1lbnRGcmFnbWVudD4sIGJvb2wgc21hcnRSZXBsYWNlLCBib29s
IG1hdGNoU3R5bGUpOwpAQCAtNDAxLDcgKzQwMSw3IEBAIHByaXZhdGU6CiAgICAgYm9vbCBtX3No
b3VsZFN0eWxlV2l0aENTUzsKICAgICBPd25QdHI8S2lsbFJpbmc+IG1fa2lsbFJpbmc7CiAgICAg
T3duUHRyPFNwZWxsQ2hlY2tlcj4gbV9zcGVsbENoZWNrZXI7Ci0gICAgT3duUHRyPFNwZWxsaW5n
Q29ycmVjdGlvbkNvbnRyb2xsZXI+IG1fc3BlbGxpbmdDb3JyZWN0b3I7CisgICAgT3duUHRyPEFs
dGVybmF0aXZlVGV4dENvbnRyb2xsZXI+IG1fYWx0ZXJuYXRpdmVUZXh0Q29udHJvbGxlcjsKICAg
ICBWaXNpYmxlU2VsZWN0aW9uIG1fbWFyazsKICAgICBib29sIG1fYXJlTWFya2VkVGV4dE1hdGNo
ZXNIaWdobGlnaHRlZDsKICAgICBFZGl0b3JQYXJhZ3JhcGhTZXBhcmF0b3IgbV9kZWZhdWx0UGFy
YWdyYXBoU2VwYXJhdG9yOwpJbmRleDogU291cmNlL1dlYkNvcmUvZWRpdGluZy9TcGVsbGluZ0Nv
cnJlY3Rpb25Db21tYW5kLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9lZGl0aW5n
L1NwZWxsaW5nQ29ycmVjdGlvbkNvbW1hbmQuY3BwCShyZXZpc2lvbiAxMTI5MTcpCisrKyBTb3Vy
Y2UvV2ViQ29yZS9lZGl0aW5nL1NwZWxsaW5nQ29ycmVjdGlvbkNvbW1hbmQuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC0yNiwxMiArMjYsMTIgQEAKICNpbmNsdWRlICJjb25maWcuaCIKICNpbmNsdWRl
ICJTcGVsbGluZ0NvcnJlY3Rpb25Db21tYW5kLmgiCiAKKyNpbmNsdWRlICJBbHRlcm5hdGl2ZVRl
eHRDb250cm9sbGVyLmgiCiAjaW5jbHVkZSAiRG9jdW1lbnQuaCIKICNpbmNsdWRlICJEb2N1bWVu
dEZyYWdtZW50LmgiCiAjaW5jbHVkZSAiRnJhbWUuaCIKICNpbmNsdWRlICJSZXBsYWNlU2VsZWN0
aW9uQ29tbWFuZC5oIgogI2luY2x1ZGUgIlNldFNlbGVjdGlvbkNvbW1hbmQuaCIKLSNpbmNsdWRl
ICJTcGVsbGluZ0NvcnJlY3Rpb25Db250cm9sbGVyLmgiCiAjaW5jbHVkZSAiVGV4dEl0ZXJhdG9y
LmgiCiAjaW5jbHVkZSAibWFya3VwLmgiCiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2VkaXRpbmcv
U3BlbGxpbmdDb3JyZWN0aW9uQ29udHJvbGxlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dl
YkNvcmUvZWRpdGluZy9TcGVsbGluZ0NvcnJlY3Rpb25Db250cm9sbGVyLmNwcAkocmV2aXNpb24g
MTEyOTE3KQorKysgU291cmNlL1dlYkNvcmUvZWRpdGluZy9TcGVsbGluZ0NvcnJlY3Rpb25Db250
cm9sbGVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw1NjUgKzAsMCBAQAotLyoKLSAqIENvcHly
aWdodCAoQykgMjAwNiwgMjAwNywgMjAwOCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
Ci0gKiBDb3B5cmlnaHQgKEMpIDIwMDggTm9raWEgQ29ycG9yYXRpb24gYW5kL29yIGl0cyBzdWJz
aWRpYXJ5KC1pZXMpCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5k
IGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJt
aXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6
Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFi
b3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFy
eSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0
aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3
aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBC
WSBBUFBMRSBDT01QVVRFUiwgSU5DLiBgYEFTIElTJycgQU5EIEFOWQotICogRVhQUkVTUyBPUiBJ
TVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKLSAq
IElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEg
UEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxM
IEFQUExFIENPTVBVVEVSLCBJTkMuIE9SCi0gKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBB
TlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKLSAqIEVYRU1QTEFSWSwg
T1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywK
LSAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0Yg
VVNFLCBEQVRBLCBPUgotICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dF
VkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQotICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElO
IENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJ
R0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLSAq
IE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0Yg
U1VDSCBEQU1BR0UuIAotICovCi0KLSNpbmNsdWRlICJjb25maWcuaCIKLSNpbmNsdWRlICJTcGVs
bGluZ0NvcnJlY3Rpb25Db250cm9sbGVyLmgiCi0KLSNpbmNsdWRlICJEb2N1bWVudE1hcmtlckNv
bnRyb2xsZXIuaCIKLSNpbmNsdWRlICJFZGl0Q29tbWFuZC5oIgotI2luY2x1ZGUgIkVkaXRvckNs
aWVudC5oIgotI2luY2x1ZGUgIkZsb2F0UXVhZC5oIgotI2luY2x1ZGUgIkZyYW1lLmgiCi0jaW5j
bHVkZSAiRnJhbWVWaWV3LmgiCi0jaW5jbHVkZSAiUGFnZS5oIgotI2luY2x1ZGUgIlNwZWxsaW5n
Q29ycmVjdGlvbkNvbW1hbmQuaCIKLSNpbmNsdWRlICJUZXh0Q2hlY2tlckNsaWVudC5oIgotI2lu
Y2x1ZGUgIlRleHRDaGVja2luZ0hlbHBlci5oIgotI2luY2x1ZGUgIlRleHRJdGVyYXRvci5oIgot
I2luY2x1ZGUgIlZpc2libGVTZWxlY3Rpb24uaCIKLSNpbmNsdWRlICJodG1sZWRpdGluZy5oIgot
I2luY2x1ZGUgIm1hcmt1cC5oIgotI2luY2x1ZGUgInZpc2libGVfdW5pdHMuaCIKLQotbmFtZXNw
YWNlIFdlYkNvcmUgewotCi11c2luZyBuYW1lc3BhY2Ugc3RkOwotdXNpbmcgbmFtZXNwYWNlIFdU
RjsKLQotI2lmIFVTRShBVVRPQ09SUkVDVElPTl9QQU5FTCkKLQotc3RhdGljIGNvbnN0IFZlY3Rv
cjxEb2N1bWVudE1hcmtlcjo6TWFya2VyVHlwZT4mIG1hcmtlclR5cGVzRm9yQXV0b2NvcnJlY3Rp
b24oKQotewotICAgIERFRklORV9TVEFUSUNfTE9DQUwoVmVjdG9yPERvY3VtZW50TWFya2VyOjpN
YXJrZXJUeXBlPiwgbWFya2VyVHlwZXNGb3JBdXRvQ29ycmVjdGlvbiwgKCkpOwotICAgIGlmICht
YXJrZXJUeXBlc0ZvckF1dG9Db3JyZWN0aW9uLmlzRW1wdHkoKSkgewotICAgICAgICBtYXJrZXJU
eXBlc0ZvckF1dG9Db3JyZWN0aW9uLmFwcGVuZChEb2N1bWVudE1hcmtlcjo6UmVwbGFjZW1lbnQp
OwotICAgICAgICBtYXJrZXJUeXBlc0ZvckF1dG9Db3JyZWN0aW9uLmFwcGVuZChEb2N1bWVudE1h
cmtlcjo6Q29ycmVjdGlvbkluZGljYXRvcik7Ci0gICAgICAgIG1hcmtlclR5cGVzRm9yQXV0b0Nv
cnJlY3Rpb24uYXBwZW5kKERvY3VtZW50TWFya2VyOjpTcGVsbENoZWNraW5nRXhlbXB0aW9uKTsK
LSAgICAgICAgbWFya2VyVHlwZXNGb3JBdXRvQ29ycmVjdGlvbi5hcHBlbmQoRG9jdW1lbnRNYXJr
ZXI6OkF1dG9jb3JyZWN0ZWQpOwotICAgIH0KLSAgICByZXR1cm4gbWFya2VyVHlwZXNGb3JBdXRv
Q29ycmVjdGlvbjsKLX0KLQotc3RhdGljIGNvbnN0IFZlY3RvcjxEb2N1bWVudE1hcmtlcjo6TWFy
a2VyVHlwZT4mIG1hcmtlclR5cGVzRm9yUmVwbGFjZW1lbnQoKQotewotICAgIERFRklORV9TVEFU
SUNfTE9DQUwoVmVjdG9yPERvY3VtZW50TWFya2VyOjpNYXJrZXJUeXBlPiwgbWFya2VyVHlwZXNG
b3JSZXBsYWNlbWVudCwgKCkpOwotICAgIGlmIChtYXJrZXJUeXBlc0ZvclJlcGxhY2VtZW50Lmlz
RW1wdHkoKSkgewotICAgICAgICBtYXJrZXJUeXBlc0ZvclJlcGxhY2VtZW50LmFwcGVuZChEb2N1
bWVudE1hcmtlcjo6UmVwbGFjZW1lbnQpOwotICAgICAgICBtYXJrZXJUeXBlc0ZvclJlcGxhY2Vt
ZW50LmFwcGVuZChEb2N1bWVudE1hcmtlcjo6U3BlbGxDaGVja2luZ0V4ZW1wdGlvbik7Ci0gICAg
fQotICAgIHJldHVybiBtYXJrZXJUeXBlc0ZvclJlcGxhY2VtZW50OwotfQotCi1zdGF0aWMgYm9v
bCBtYXJrZXJzSGF2ZUlkZW50aWNhbERlc2NyaXB0aW9uKGNvbnN0IFZlY3RvcjxEb2N1bWVudE1h
cmtlcio+JiBtYXJrZXJzKQotewotICAgIGlmIChtYXJrZXJzLmlzRW1wdHkoKSkKLSAgICAgICAg
cmV0dXJuIHRydWU7Ci0KLSAgICBjb25zdCBTdHJpbmcmIGRlc2NyaXB0aW9uID0gbWFya2Vyc1sw
XS0+ZGVzY3JpcHRpb24oKTsKLSAgICBmb3IgKHNpemVfdCBpID0gMTsgaSA8IG1hcmtlcnMuc2l6
ZSgpOyArK2kpIHsKLSAgICAgICAgaWYgKGRlc2NyaXB0aW9uICE9IG1hcmtlcnNbaV0tPmRlc2Ny
aXB0aW9uKCkpCi0gICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQotICAgIHJldHVybiB0
cnVlOwotfQotCi1TcGVsbGluZ0NvcnJlY3Rpb25Db250cm9sbGVyOjpTcGVsbGluZ0NvcnJlY3Rp
b25Db250cm9sbGVyKEZyYW1lKiBmcmFtZSkKLSAgICA6IG1fZnJhbWUoZnJhbWUpCi0gICAgLCBt
X2NvcnJlY3Rpb25QYW5lbFRpbWVyKHRoaXMsICZTcGVsbGluZ0NvcnJlY3Rpb25Db250cm9sbGVy
Ojpjb3JyZWN0aW9uUGFuZWxUaW1lckZpcmVkKQotewotfQotCi1TcGVsbGluZ0NvcnJlY3Rpb25D
b250cm9sbGVyOjp+U3BlbGxpbmdDb3JyZWN0aW9uQ29udHJvbGxlcigpCi17Ci0gICAgZGlzbWlz
cyhSZWFzb25Gb3JEaXNtaXNzaW5nQ29ycmVjdGlvblBhbmVsSWdub3JlZCk7Ci19Ci0KLXZvaWQg
U3BlbGxpbmdDb3JyZWN0aW9uQ29udHJvbGxlcjo6c3RhcnRDb3JyZWN0aW9uUGFuZWxUaW1lcihD
b3JyZWN0aW9uUGFuZWxJbmZvOjpQYW5lbFR5cGUgdHlwZSkKLXsKLSAgICBjb25zdCBkb3VibGUg
Y29ycmVjdGlvblBhbmVsVGltZXJJbnRlcnZhbCA9IDAuMzsKLSAgICBpZiAoIWlzQXV0b21hdGlj
U3BlbGxpbmdDb3JyZWN0aW9uRW5hYmxlZCgpKQotICAgICAgICByZXR1cm47Ci0KLSAgICAvLyBJ
ZiB0eXBlIGlzIFBhbmVsVHlwZVJldmVyc2lvbiwgdGhlbiB0aGUgbmV3IHJhbmdlIGhhcyBiZWVu
IHNldC4gU28gd2Ugc2hvdWxkbid0IGNsZWFyIGl0LgotICAgIGlmICh0eXBlID09IENvcnJlY3Rp
b25QYW5lbEluZm86OlBhbmVsVHlwZUNvcnJlY3Rpb24pCi0gICAgICAgIG1fY29ycmVjdGlvblBh
bmVsSW5mby5yYW5nZVRvQmVSZXBsYWNlZC5jbGVhcigpOwotICAgIG1fY29ycmVjdGlvblBhbmVs
SW5mby5wYW5lbFR5cGUgPSB0eXBlOwotICAgIG1fY29ycmVjdGlvblBhbmVsVGltZXIuc3RhcnRP
bmVTaG90KGNvcnJlY3Rpb25QYW5lbFRpbWVySW50ZXJ2YWwpOwotfQotCi12b2lkIFNwZWxsaW5n
Q29ycmVjdGlvbkNvbnRyb2xsZXI6OnN0b3BDb3JyZWN0aW9uUGFuZWxUaW1lcigpCi17Ci0gICAg
bV9jb3JyZWN0aW9uUGFuZWxUaW1lci5zdG9wKCk7Ci0gICAgbV9jb3JyZWN0aW9uUGFuZWxJbmZv
LnJhbmdlVG9CZVJlcGxhY2VkLmNsZWFyKCk7Ci19Ci0KLXZvaWQgU3BlbGxpbmdDb3JyZWN0aW9u
Q29udHJvbGxlcjo6c3RvcFBlbmRpbmdDb3JyZWN0aW9uKGNvbnN0IFZpc2libGVTZWxlY3Rpb24m
IG9sZFNlbGVjdGlvbikKLXsKLSAgICAvLyBNYWtlIHN1cmUgdGhlcmUncyBubyBwZW5kaW5nIGF1
dG9jb3JyZWN0aW9uIGJlZm9yZSB3ZSBjYWxsIG1hcmtNaXNzcGVsbGluZ3NBbmRCYWRHcmFtbWFy
KCkgYmVsb3cuCi0gICAgVmlzaWJsZVNlbGVjdGlvbiBjdXJyZW50U2VsZWN0aW9uKG1fZnJhbWUt
PnNlbGVjdGlvbigpLT5zZWxlY3Rpb24oKSk7Ci0gICAgaWYgKGN1cnJlbnRTZWxlY3Rpb24gPT0g
b2xkU2VsZWN0aW9uKQotICAgICAgICByZXR1cm47Ci0KLSAgICBzdG9wQ29ycmVjdGlvblBhbmVs
VGltZXIoKTsKLSAgICBkaXNtaXNzKFJlYXNvbkZvckRpc21pc3NpbmdDb3JyZWN0aW9uUGFuZWxJ
Z25vcmVkKTsKLX0KLQotdm9pZCBTcGVsbGluZ0NvcnJlY3Rpb25Db250cm9sbGVyOjphcHBseVBl
bmRpbmdDb3JyZWN0aW9uKGNvbnN0IFZpc2libGVTZWxlY3Rpb24mIHNlbGVjdGlvbkFmdGVyVHlw
aW5nKQotewotICAgIC8vIEFwcGx5IHBlbmRpbmcgYXV0b2NvcnJlY3Rpb24gYmVmb3JlIG5leHQg
cm91bmQgb2Ygc3BlbGwgY2hlY2tpbmcuCi0gICAgYm9vbCBkb0FwcGx5Q29ycmVjdGlvbiA9IHRy
dWU7Ci0gICAgVmlzaWJsZVBvc2l0aW9uIHN0YXJ0T2ZTZWxlY3Rpb24gPSBzZWxlY3Rpb25BZnRl
clR5cGluZy52aXNpYmxlU3RhcnQoKTsKLSAgICBWaXNpYmxlU2VsZWN0aW9uIGN1cnJlbnRXb3Jk
ID0gVmlzaWJsZVNlbGVjdGlvbihzdGFydE9mV29yZChzdGFydE9mU2VsZWN0aW9uLCBMZWZ0V29y
ZElmT25Cb3VuZGFyeSksIGVuZE9mV29yZChzdGFydE9mU2VsZWN0aW9uLCBSaWdodFdvcmRJZk9u
Qm91bmRhcnkpKTsKLSAgICBpZiAoY3VycmVudFdvcmQudmlzaWJsZUVuZCgpID09IHN0YXJ0T2ZT
ZWxlY3Rpb24pIHsKLSAgICAgICAgU3RyaW5nIHdvcmRUZXh0ID0gcGxhaW5UZXh0KGN1cnJlbnRX
b3JkLnRvTm9ybWFsaXplZFJhbmdlKCkuZ2V0KCkpOwotICAgICAgICBpZiAod29yZFRleHQubGVu
Z3RoKCkgPiAwICYmIGlzQW1iaWd1b3VzQm91bmRhcnlDaGFyYWN0ZXIod29yZFRleHRbd29yZFRl
eHQubGVuZ3RoKCkgLSAxXSkpCi0gICAgICAgICAgICBkb0FwcGx5Q29ycmVjdGlvbiA9IGZhbHNl
OwotICAgIH0KLSAgICBpZiAoZG9BcHBseUNvcnJlY3Rpb24pCi0gICAgICAgIGhhbmRsZUNvcnJl
Y3Rpb25QYW5lbFJlc3VsdChkaXNtaXNzU29vbihSZWFzb25Gb3JEaXNtaXNzaW5nQ29ycmVjdGlv
blBhbmVsQWNjZXB0ZWQpKTsgCi0gICAgZWxzZQotICAgICAgICBtX2NvcnJlY3Rpb25QYW5lbElu
Zm8ucmFuZ2VUb0JlUmVwbGFjZWQuY2xlYXIoKTsKLX0KLQotYm9vbCBTcGVsbGluZ0NvcnJlY3Rp
b25Db250cm9sbGVyOjpoYXNQZW5kaW5nQ29ycmVjdGlvbigpIGNvbnN0Ci17Ci0gICAgcmV0dXJu
IG1fY29ycmVjdGlvblBhbmVsSW5mby5yYW5nZVRvQmVSZXBsYWNlZDsKLX0KLQotYm9vbCBTcGVs
bGluZ0NvcnJlY3Rpb25Db250cm9sbGVyOjppc1NwZWxsaW5nTWFya2VyQWxsb3dlZChQYXNzUmVm
UHRyPFJhbmdlPiBtaXNzcGVsbGluZ1JhbmdlKSBjb25zdAotewotICAgIHJldHVybiAhbV9mcmFt
ZS0+ZG9jdW1lbnQoKS0+bWFya2VycygpLT5oYXNNYXJrZXJzKG1pc3NwZWxsaW5nUmFuZ2UuZ2V0
KCksIERvY3VtZW50TWFya2VyOjpTcGVsbENoZWNraW5nRXhlbXB0aW9uKTsKLX0KLQotdm9pZCBT
cGVsbGluZ0NvcnJlY3Rpb25Db250cm9sbGVyOjpzaG93KFBhc3NSZWZQdHI8UmFuZ2U+IHJhbmdl
VG9SZXBsYWNlLCBjb25zdCBTdHJpbmcmIHJlcGxhY2VtZW50KQotewotICAgIEZsb2F0UmVjdCBi
b3VuZGluZ0JveCA9IHJvb3RWaWV3UmVjdEZvclJhbmdlKHJhbmdlVG9SZXBsYWNlLmdldCgpKTsK
LSAgICBpZiAoYm91bmRpbmdCb3guaXNFbXB0eSgpKQotICAgICAgICByZXR1cm47Ci0gICAgbV9j
b3JyZWN0aW9uUGFuZWxJbmZvLnJlcGxhY2VkU3RyaW5nID0gcGxhaW5UZXh0KHJhbmdlVG9SZXBs
YWNlLmdldCgpKTsKLSAgICBtX2NvcnJlY3Rpb25QYW5lbEluZm8ucmFuZ2VUb0JlUmVwbGFjZWQg
PSByYW5nZVRvUmVwbGFjZTsKLSAgICBtX2NvcnJlY3Rpb25QYW5lbEluZm8ucmVwbGFjZW1lbnRT
dHJpbmcgPSByZXBsYWNlbWVudDsKLSAgICBtX2NvcnJlY3Rpb25QYW5lbEluZm8uaXNBY3RpdmUg
PSB0cnVlOwotICAgIGNsaWVudCgpLT5zaG93Q29ycmVjdGlvblBhbmVsKG1fY29ycmVjdGlvblBh
bmVsSW5mby5wYW5lbFR5cGUsIGJvdW5kaW5nQm94LCBtX2NvcnJlY3Rpb25QYW5lbEluZm8ucmVw
bGFjZWRTdHJpbmcsIHJlcGxhY2VtZW50LCBWZWN0b3I8U3RyaW5nPigpKTsKLX0KLQotdm9pZCBT
cGVsbGluZ0NvcnJlY3Rpb25Db250cm9sbGVyOjpoYW5kbGVDYW5jZWxPcGVyYXRpb24oKQotewot
ICAgIGlmICghbV9jb3JyZWN0aW9uUGFuZWxJbmZvLmlzQWN0aXZlKQotICAgICAgICByZXR1cm47
Ci0gICAgbV9jb3JyZWN0aW9uUGFuZWxJbmZvLmlzQWN0aXZlID0gZmFsc2U7Ci0gICAgZGlzbWlz
cyhSZWFzb25Gb3JEaXNtaXNzaW5nQ29ycmVjdGlvblBhbmVsQ2FuY2VsbGVkKTsKLX0KLQotdm9p
ZCBTcGVsbGluZ0NvcnJlY3Rpb25Db250cm9sbGVyOjpkaXNtaXNzKFJlYXNvbkZvckRpc21pc3Np
bmdDb3JyZWN0aW9uUGFuZWwgcmVhc29uRm9yRGlzbWlzc2luZykKLXsKLSAgICBpZiAoIW1fY29y
cmVjdGlvblBhbmVsSW5mby5pc0FjdGl2ZSkKLSAgICAgICAgcmV0dXJuOwotICAgIG1fY29ycmVj
dGlvblBhbmVsSW5mby5pc0FjdGl2ZSA9IGZhbHNlOwotICAgIG1fY29ycmVjdGlvblBhbmVsSXNE
aXNtaXNzZWRCeUVkaXRvciA9IHRydWU7Ci0gICAgaWYgKGNsaWVudCgpKQotICAgICAgICBjbGll
bnQoKS0+ZGlzbWlzc0NvcnJlY3Rpb25QYW5lbChyZWFzb25Gb3JEaXNtaXNzaW5nKTsKLX0KLQot
U3RyaW5nIFNwZWxsaW5nQ29ycmVjdGlvbkNvbnRyb2xsZXI6OmRpc21pc3NTb29uKFJlYXNvbkZv
ckRpc21pc3NpbmdDb3JyZWN0aW9uUGFuZWwgcmVhc29uRm9yRGlzbWlzc2luZykKLXsKLSAgICBp
ZiAoIW1fY29ycmVjdGlvblBhbmVsSW5mby5pc0FjdGl2ZSkKLSAgICAgICAgcmV0dXJuIFN0cmlu
ZygpOwotICAgIG1fY29ycmVjdGlvblBhbmVsSW5mby5pc0FjdGl2ZSA9IGZhbHNlOwotICAgIG1f
Y29ycmVjdGlvblBhbmVsSXNEaXNtaXNzZWRCeUVkaXRvciA9IHRydWU7Ci0gICAgaWYgKCFjbGll
bnQoKSkKLSAgICAgICAgcmV0dXJuIFN0cmluZygpOwotICAgIHJldHVybiBjbGllbnQoKS0+ZGlz
bWlzc0NvcnJlY3Rpb25QYW5lbFNvb24ocmVhc29uRm9yRGlzbWlzc2luZyk7Ci19Ci0KLXZvaWQg
U3BlbGxpbmdDb3JyZWN0aW9uQ29udHJvbGxlcjo6YXBwbHlDb3JyZWN0aW9uUGFuZWxJbmZvKGNv
bnN0IFZlY3RvcjxEb2N1bWVudE1hcmtlcjo6TWFya2VyVHlwZT4mIG1hcmtlclR5cGVzVG9BZGQp
Ci17Ci0gICAgaWYgKCFtX2NvcnJlY3Rpb25QYW5lbEluZm8ucmFuZ2VUb0JlUmVwbGFjZWQpCi0g
ICAgICAgIHJldHVybjsKLQotICAgIEV4Y2VwdGlvbkNvZGUgZWMgPSAwOwotICAgIFJlZlB0cjxS
YW5nZT4gcGFyYWdyYXBoUmFuZ2VDb250YWluaW5nQ29ycmVjdGlvbiA9IG1fY29ycmVjdGlvblBh
bmVsSW5mby5yYW5nZVRvQmVSZXBsYWNlZC0+Y2xvbmVSYW5nZShlYyk7Ci0gICAgaWYgKGVjKQot
ICAgICAgICByZXR1cm47Ci0KLSAgICBzZXRTdGFydChwYXJhZ3JhcGhSYW5nZUNvbnRhaW5pbmdD
b3JyZWN0aW9uLmdldCgpLCBzdGFydE9mUGFyYWdyYXBoKG1fY29ycmVjdGlvblBhbmVsSW5mby5y
YW5nZVRvQmVSZXBsYWNlZC0+c3RhcnRQb3NpdGlvbigpKSk7Ci0gICAgc2V0RW5kKHBhcmFncmFw
aFJhbmdlQ29udGFpbmluZ0NvcnJlY3Rpb24uZ2V0KCksIGVuZE9mUGFyYWdyYXBoKG1fY29ycmVj
dGlvblBhbmVsSW5mby5yYW5nZVRvQmVSZXBsYWNlZC0+ZW5kUG9zaXRpb24oKSkpOwotCi0gICAg
Ly8gQWZ0ZXIgd2UgcmVwbGFjZSB0aGUgd29yZCBhdCByYW5nZSByYW5nZVRvQmVSZXBsYWNlZCwg
d2UgbmVlZCB0byBhZGQgbWFya2VycyB0byB0aGF0IHJhbmdlLgotICAgIC8vIEhvd2V2ZXIsIG9u
Y2UgdGhlIHJlcGxhY2VtZW50IHRvb2sgcGxhY2UsIHRoZSB2YWx1ZSBvZiByYW5nZVRvQmVSZXBs
YWNlZCBpcyBub3QgdmFsaWQgYW55bW9yZS4KLSAgICAvLyBTbyBiZWZvcmUgd2UgY2Fycnkgb3V0
IHRoZSByZXBsYWNlbWVudCwgd2UgbmVlZCB0byBzdG9yZSB0aGUgc3RhcnQgcG9zaXRpb24gb2Yg
cmFuZ2VUb0JlUmVwbGFjZWQKLSAgICAvLyByZWxhdGl2ZSB0byB0aGUgc3RhcnQgcG9zaXRpb24g
b2YgdGhlIGNvbnRhaW5pbmcgcGFyYWdyYXBoLiBXZSB1c2UgY29ycmVjdGlvblN0YXJ0T2Zmc2V0
SW5QYXJhZ3JhcGgKLSAgICAvLyB0byBzdG9yZSB0aGlzIHZhbHVlLiBJbiBvcmRlciB0byBvYnRh
aW4gdGhpcyBvZmZzZXQsIHdlIG5lZWQgdG8gZmlyc3QgY3JlYXRlIGEgcmFuZ2UKLSAgICAvLyB3
aGljaCBzcGFucyBmcm9tIHRoZSBzdGFydCBvZiBwYXJhZ3JhcGggdG8gdGhlIHN0YXJ0IHBvc2l0
aW9uIG9mIHJhbmdlVG9CZVJlcGxhY2VkLgotICAgIFJlZlB0cjxSYW5nZT4gY29ycmVjdGlvblN0
YXJ0T2Zmc2V0SW5QYXJhZ3JhcGhBc1JhbmdlID0gUmFuZ2U6OmNyZWF0ZShwYXJhZ3JhcGhSYW5n
ZUNvbnRhaW5pbmdDb3JyZWN0aW9uLT5zdGFydENvbnRhaW5lcihlYyktPmRvY3VtZW50KCksIHBh
cmFncmFwaFJhbmdlQ29udGFpbmluZ0NvcnJlY3Rpb24tPnN0YXJ0UG9zaXRpb24oKSwgcGFyYWdy
YXBoUmFuZ2VDb250YWluaW5nQ29ycmVjdGlvbi0+c3RhcnRQb3NpdGlvbigpKTsKLSAgICBpZiAo
ZWMpCi0gICAgICAgIHJldHVybjsKLQotICAgIFBvc2l0aW9uIHN0YXJ0UG9zaXRpb25PZlJhbmdl
VG9CZVJlcGxhY2VkID0gbV9jb3JyZWN0aW9uUGFuZWxJbmZvLnJhbmdlVG9CZVJlcGxhY2VkLT5z
dGFydFBvc2l0aW9uKCk7Ci0gICAgY29ycmVjdGlvblN0YXJ0T2Zmc2V0SW5QYXJhZ3JhcGhBc1Jh
bmdlLT5zZXRFbmQoc3RhcnRQb3NpdGlvbk9mUmFuZ2VUb0JlUmVwbGFjZWQuY29udGFpbmVyTm9k
ZSgpLCBzdGFydFBvc2l0aW9uT2ZSYW5nZVRvQmVSZXBsYWNlZC5jb21wdXRlT2Zmc2V0SW5Db250
YWluZXJOb2RlKCksIGVjKTsKLSAgICBpZiAoZWMpCi0gICAgICAgIHJldHVybjsKLQotICAgIC8v
IFRha2Ugbm90ZSBvZiB0aGUgbG9jYXRpb24gb2YgYXV0b2NvcnJlY3Rpb24gc28gdGhhdCB3ZSBj
YW4gYWRkIG1hcmtlciBhZnRlciB0aGUgcmVwbGFjZW1lbnQgdG9vayBwbGFjZS4KLSAgICBpbnQg
Y29ycmVjdGlvblN0YXJ0T2Zmc2V0SW5QYXJhZ3JhcGggPSBUZXh0SXRlcmF0b3I6OnJhbmdlTGVu
Z3RoKGNvcnJlY3Rpb25TdGFydE9mZnNldEluUGFyYWdyYXBoQXNSYW5nZS5nZXQoKSk7Ci0KLSAg
ICAvLyBDbG9uZSB0aGUgcmFuZ2UsIHNpbmNlIHRoZSBjYWxsZXIgb2YgdGhpcyBtZXRob2QgbWF5
IHdhbnQgdG8ga2VlcCB0aGUgb3JpZ2luYWwgcmFuZ2UgYXJvdW5kLgotICAgIFJlZlB0cjxSYW5n
ZT4gcmFuZ2VUb0JlUmVwbGFjZWQgPSBtX2NvcnJlY3Rpb25QYW5lbEluZm8ucmFuZ2VUb0JlUmVw
bGFjZWQtPmNsb25lUmFuZ2UoZWMpOwotICAgIGFwcGx5Q29tbWFuZChTcGVsbGluZ0NvcnJlY3Rp
b25Db21tYW5kOjpjcmVhdGUocmFuZ2VUb0JlUmVwbGFjZWQsIG1fY29ycmVjdGlvblBhbmVsSW5m
by5yZXBsYWNlbWVudFN0cmluZykpOwotICAgIHNldEVuZChwYXJhZ3JhcGhSYW5nZUNvbnRhaW5p
bmdDb3JyZWN0aW9uLmdldCgpLCBtX2ZyYW1lLT5zZWxlY3Rpb24oKS0+c2VsZWN0aW9uKCkuc3Rh
cnQoKSk7Ci0gICAgUmVmUHRyPFJhbmdlPiByZXBsYWNlbWVudFJhbmdlID0gVGV4dEl0ZXJhdG9y
OjpzdWJyYW5nZShwYXJhZ3JhcGhSYW5nZUNvbnRhaW5pbmdDb3JyZWN0aW9uLmdldCgpLCBjb3Jy
ZWN0aW9uU3RhcnRPZmZzZXRJblBhcmFncmFwaCwgIG1fY29ycmVjdGlvblBhbmVsSW5mby5yZXBs
YWNlbWVudFN0cmluZy5sZW5ndGgoKSk7Ci0gICAgU3RyaW5nIG5ld1RleHQgPSBwbGFpblRleHQo
cmVwbGFjZW1lbnRSYW5nZS5nZXQoKSk7Ci0KLSAgICAvLyBDaGVjayB0byBzZWUgaWYgcmVwbGFj
ZW1lbnQgc3VjY2VlZGVkLgotICAgIGlmIChuZXdUZXh0ICE9IG1fY29ycmVjdGlvblBhbmVsSW5m
by5yZXBsYWNlbWVudFN0cmluZykKLSAgICAgICAgcmV0dXJuOwotCi0gICAgRG9jdW1lbnRNYXJr
ZXJDb250cm9sbGVyKiBtYXJrZXJzID0gcmVwbGFjZW1lbnRSYW5nZS0+c3RhcnRDb250YWluZXIo
KS0+ZG9jdW1lbnQoKS0+bWFya2VycygpOwotICAgIHNpemVfdCBzaXplID0gbWFya2VyVHlwZXNU
b0FkZC5zaXplKCk7Ci0gICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBzaXplOyArK2kpIHsKLSAg
ICAgICAgRG9jdW1lbnRNYXJrZXI6Ok1hcmtlclR5cGUgbWFya2VyVHlwZSA9IG1hcmtlclR5cGVz
VG9BZGRbaV07Ci0gICAgICAgIFN0cmluZyBkZXNjcmlwdGlvbjsKLSAgICAgICAgaWYgKG1fY29y
cmVjdGlvblBhbmVsSW5mby5wYW5lbFR5cGUgIT0gQ29ycmVjdGlvblBhbmVsSW5mbzo6UGFuZWxU
eXBlUmV2ZXJzaW9uICYmIChtYXJrZXJUeXBlID09IERvY3VtZW50TWFya2VyOjpSZXBsYWNlbWVu
dCB8fCBtYXJrZXJUeXBlID09IERvY3VtZW50TWFya2VyOjpBdXRvY29ycmVjdGVkKSkKLSAgICAg
ICAgICAgIGRlc2NyaXB0aW9uID0gbV9jb3JyZWN0aW9uUGFuZWxJbmZvLnJlcGxhY2VkU3RyaW5n
OwotICAgICAgICBtYXJrZXJzLT5hZGRNYXJrZXIocmVwbGFjZW1lbnRSYW5nZS5nZXQoKSwgbWFy
a2VyVHlwZSwgZGVzY3JpcHRpb24pOwotICAgIH0KLX0KLQotYm9vbCBTcGVsbGluZ0NvcnJlY3Rp
b25Db250cm9sbGVyOjphcHBseUF1dG9jb3JyZWN0aW9uQmVmb3JlVHlwaW5nSWZBcHByb3ByaWF0
ZSgpCi17Ci0gICAgaWYgKCFtX2NvcnJlY3Rpb25QYW5lbEluZm8ucmFuZ2VUb0JlUmVwbGFjZWQg
fHwgIW1fY29ycmVjdGlvblBhbmVsSW5mby5pc0FjdGl2ZSkKLSAgICAgICAgcmV0dXJuIGZhbHNl
OwotCi0gICAgaWYgKG1fY29ycmVjdGlvblBhbmVsSW5mby5wYW5lbFR5cGUgIT0gQ29ycmVjdGlv
blBhbmVsSW5mbzo6UGFuZWxUeXBlQ29ycmVjdGlvbikKLSAgICAgICAgcmV0dXJuIGZhbHNlOwot
Ci0gICAgUG9zaXRpb24gY2FyZXRQb3NpdGlvbiA9IG1fZnJhbWUtPnNlbGVjdGlvbigpLT5zZWxl
Y3Rpb24oKS5zdGFydCgpOwotCi0gICAgaWYgKG1fY29ycmVjdGlvblBhbmVsSW5mby5yYW5nZVRv
QmVSZXBsYWNlZC0+ZW5kUG9zaXRpb24oKSA9PSBjYXJldFBvc2l0aW9uKSB7Ci0gICAgICAgIGhh
bmRsZUNvcnJlY3Rpb25QYW5lbFJlc3VsdChkaXNtaXNzU29vbihSZWFzb25Gb3JEaXNtaXNzaW5n
Q29ycmVjdGlvblBhbmVsQWNjZXB0ZWQpKTsKLSAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgfSAK
LSAgICAKLSAgICAvLyBQZW5kaW5nIGNvcnJlY3Rpb24gc2hvdWxkIGFsd2F5cyBiZSB3aGVyZSBj
YXJldCBpcy4gQnV0IGluIGNhc2UgdGhpcyBpcyBub3QgYWx3YXlzIHRydWUsIHdlIHN0aWxsIHdh
bnQgdG8gZGlzbWlzcyB0aGUgcGFuZWwgd2l0aG91dCBhY2NlcHRpbmcgdGhlIGNvcnJlY3Rpb24u
Ci0gICAgQVNTRVJUKG1fY29ycmVjdGlvblBhbmVsSW5mby5yYW5nZVRvQmVSZXBsYWNlZC0+ZW5k
UG9zaXRpb24oKSA9PSBjYXJldFBvc2l0aW9uKTsKLSAgICBkaXNtaXNzKFJlYXNvbkZvckRpc21p
c3NpbmdDb3JyZWN0aW9uUGFuZWxJZ25vcmVkKTsKLSAgICByZXR1cm4gZmFsc2U7Ci19Ci0KLXZv
aWQgU3BlbGxpbmdDb3JyZWN0aW9uQ29udHJvbGxlcjo6cmVzcG9uZFRvVW5hcHBsaWVkU3BlbGxD
b3JyZWN0aW9uKGNvbnN0IFZpc2libGVTZWxlY3Rpb24mIHNlbGVjdGlvbk9mQ29ycmVjdGVkLCBj
b25zdCBTdHJpbmcmIGNvcnJlY3RlZCwgY29uc3QgU3RyaW5nJiBjb3JyZWN0aW9uKQotewotICAg
IGNsaWVudCgpLT5yZWNvcmRBdXRvY29ycmVjdGlvblJlc3BvbnNlKEVkaXRvckNsaWVudDo6QXV0
b2NvcnJlY3Rpb25SZXZlcnRlZCwgY29ycmVjdGVkLCBjb3JyZWN0aW9uKTsKLSAgICBtX2ZyYW1l
LT5kb2N1bWVudCgpLT51cGRhdGVMYXlvdXQoKTsKLSAgICBtX2ZyYW1lLT5zZWxlY3Rpb24oKS0+
c2V0U2VsZWN0aW9uKHNlbGVjdGlvbk9mQ29ycmVjdGVkLCBGcmFtZVNlbGVjdGlvbjo6Q2xvc2VU
eXBpbmcgfCBGcmFtZVNlbGVjdGlvbjo6Q2xlYXJUeXBpbmdTdHlsZSB8IEZyYW1lU2VsZWN0aW9u
OjpTcGVsbENvcnJlY3Rpb25UcmlnZ2VyZWQpOwotICAgIFJlZlB0cjxSYW5nZT4gcmFuZ2UgPSBS
YW5nZTo6Y3JlYXRlKG1fZnJhbWUtPmRvY3VtZW50KCksIG1fZnJhbWUtPnNlbGVjdGlvbigpLT5z
ZWxlY3Rpb24oKS5zdGFydCgpLCBtX2ZyYW1lLT5zZWxlY3Rpb24oKS0+c2VsZWN0aW9uKCkuZW5k
KCkpOwotCi0gICAgRG9jdW1lbnRNYXJrZXJDb250cm9sbGVyKiBtYXJrZXJzID0gbV9mcmFtZS0+
ZG9jdW1lbnQoKS0+bWFya2VycygpOwotICAgIG1hcmtlcnMtPnJlbW92ZU1hcmtlcnMocmFuZ2Uu
Z2V0KCksIERvY3VtZW50TWFya2VyOjpTcGVsbGluZyB8IERvY3VtZW50TWFya2VyOjpBdXRvY29y
cmVjdGVkLCBEb2N1bWVudE1hcmtlckNvbnRyb2xsZXI6OlJlbW92ZVBhcnRpYWxseU92ZXJsYXBw
aW5nTWFya2VyKTsKLSAgICBtYXJrZXJzLT5hZGRNYXJrZXIocmFuZ2UuZ2V0KCksIERvY3VtZW50
TWFya2VyOjpSZXBsYWNlbWVudCk7Ci0gICAgbWFya2Vycy0+YWRkTWFya2VyKHJhbmdlLmdldCgp
LCBEb2N1bWVudE1hcmtlcjo6U3BlbGxDaGVja2luZ0V4ZW1wdGlvbik7Ci19Ci0KLXZvaWQgU3Bl
bGxpbmdDb3JyZWN0aW9uQ29udHJvbGxlcjo6Y29ycmVjdGlvblBhbmVsVGltZXJGaXJlZChUaW1l
cjxTcGVsbGluZ0NvcnJlY3Rpb25Db250cm9sbGVyPiopCi17Ci0gICAgbV9jb3JyZWN0aW9uUGFu
ZWxJc0Rpc21pc3NlZEJ5RWRpdG9yID0gZmFsc2U7Ci0gICAgc3dpdGNoIChtX2NvcnJlY3Rpb25Q
YW5lbEluZm8ucGFuZWxUeXBlKSB7Ci0gICAgY2FzZSBDb3JyZWN0aW9uUGFuZWxJbmZvOjpQYW5l
bFR5cGVDb3JyZWN0aW9uOiB7Ci0gICAgICAgIFZpc2libGVTZWxlY3Rpb24gc2VsZWN0aW9uKG1f
ZnJhbWUtPnNlbGVjdGlvbigpLT5zZWxlY3Rpb24oKSk7Ci0gICAgICAgIFZpc2libGVQb3NpdGlv
biBzdGFydChzZWxlY3Rpb24uc3RhcnQoKSwgc2VsZWN0aW9uLmFmZmluaXR5KCkpOwotICAgICAg
ICBWaXNpYmxlUG9zaXRpb24gcCA9IHN0YXJ0T2ZXb3JkKHN0YXJ0LCBMZWZ0V29yZElmT25Cb3Vu
ZGFyeSk7Ci0gICAgICAgIFZpc2libGVTZWxlY3Rpb24gYWRqYWNlbnRXb3JkcyA9IFZpc2libGVT
ZWxlY3Rpb24ocCwgc3RhcnQpOwotICAgICAgICBtX2ZyYW1lLT5lZGl0b3IoKS0+bWFya0FsbE1p
c3NwZWxsaW5nc0FuZEJhZEdyYW1tYXJJblJhbmdlcyhUZXh0Q2hlY2tpbmdUeXBlU3BlbGxpbmcg
fCBUZXh0Q2hlY2tpbmdUeXBlU2hvd0NvcnJlY3Rpb25QYW5lbCwgYWRqYWNlbnRXb3Jkcy50b05v
cm1hbGl6ZWRSYW5nZSgpLmdldCgpLCAwKTsKLSAgICB9Ci0gICAgICAgIGJyZWFrOwotICAgIGNh
c2UgQ29ycmVjdGlvblBhbmVsSW5mbzo6UGFuZWxUeXBlUmV2ZXJzaW9uOiB7Ci0gICAgICAgIGlm
ICghbV9jb3JyZWN0aW9uUGFuZWxJbmZvLnJhbmdlVG9CZVJlcGxhY2VkKQotICAgICAgICAgICAg
YnJlYWs7Ci0gICAgICAgIG1fY29ycmVjdGlvblBhbmVsSW5mby5pc0FjdGl2ZSA9IHRydWU7Ci0g
ICAgICAgIG1fY29ycmVjdGlvblBhbmVsSW5mby5yZXBsYWNlZFN0cmluZyA9IHBsYWluVGV4dCht
X2NvcnJlY3Rpb25QYW5lbEluZm8ucmFuZ2VUb0JlUmVwbGFjZWQuZ2V0KCkpOwotICAgICAgICBG
bG9hdFJlY3QgYm91bmRpbmdCb3ggPSByb290Vmlld1JlY3RGb3JSYW5nZShtX2NvcnJlY3Rpb25Q
YW5lbEluZm8ucmFuZ2VUb0JlUmVwbGFjZWQuZ2V0KCkpOwotICAgICAgICBpZiAoIWJvdW5kaW5n
Qm94LmlzRW1wdHkoKSkKLSAgICAgICAgICAgIGNsaWVudCgpLT5zaG93Q29ycmVjdGlvblBhbmVs
KG1fY29ycmVjdGlvblBhbmVsSW5mby5wYW5lbFR5cGUsIGJvdW5kaW5nQm94LCBtX2NvcnJlY3Rp
b25QYW5lbEluZm8ucmVwbGFjZWRTdHJpbmcsIG1fY29ycmVjdGlvblBhbmVsSW5mby5yZXBsYWNl
bWVudFN0cmluZywgVmVjdG9yPFN0cmluZz4oKSk7Ci0gICAgfQotICAgICAgICBicmVhazsKLSAg
ICBjYXNlIENvcnJlY3Rpb25QYW5lbEluZm86OlBhbmVsVHlwZVNwZWxsaW5nU3VnZ2VzdGlvbnM6
IHsKLSAgICAgICAgaWYgKCFtX2NvcnJlY3Rpb25QYW5lbEluZm8ucmFuZ2VUb0JlUmVwbGFjZWQg
fHwgcGxhaW5UZXh0KG1fY29ycmVjdGlvblBhbmVsSW5mby5yYW5nZVRvQmVSZXBsYWNlZC5nZXQo
KSkgIT0gbV9jb3JyZWN0aW9uUGFuZWxJbmZvLnJlcGxhY2VkU3RyaW5nKQotICAgICAgICAgICAg
YnJlYWs7Ci0gICAgICAgIFN0cmluZyBwYXJhZ3JhcGhUZXh0ID0gcGxhaW5UZXh0KFRleHRDaGVj
a2luZ1BhcmFncmFwaChtX2NvcnJlY3Rpb25QYW5lbEluZm8ucmFuZ2VUb0JlUmVwbGFjZWQpLnBh
cmFncmFwaFJhbmdlKCkuZ2V0KCkpOwotICAgICAgICBWZWN0b3I8U3RyaW5nPiBzdWdnZXN0aW9u
czsKLSAgICAgICAgdGV4dENoZWNrZXIoKS0+Z2V0R3Vlc3Nlc0ZvcldvcmQobV9jb3JyZWN0aW9u
UGFuZWxJbmZvLnJlcGxhY2VkU3RyaW5nLCBwYXJhZ3JhcGhUZXh0LCBzdWdnZXN0aW9ucyk7Ci0g
ICAgICAgIGlmIChzdWdnZXN0aW9ucy5pc0VtcHR5KCkpIHsKLSAgICAgICAgICAgIG1fY29ycmVj
dGlvblBhbmVsSW5mby5yYW5nZVRvQmVSZXBsYWNlZC5jbGVhcigpOwotICAgICAgICAgICAgYnJl
YWs7Ci0gICAgICAgIH0KLSAgICAgICAgU3RyaW5nIHRvcFN1Z2dlc3Rpb24gPSBzdWdnZXN0aW9u
cy5maXJzdCgpOwotICAgICAgICBzdWdnZXN0aW9ucy5yZW1vdmUoMCk7Ci0gICAgICAgIG1fY29y
cmVjdGlvblBhbmVsSW5mby5pc0FjdGl2ZSA9IHRydWU7Ci0gICAgICAgIEZsb2F0UmVjdCBib3Vu
ZGluZ0JveCA9IHJvb3RWaWV3UmVjdEZvclJhbmdlKG1fY29ycmVjdGlvblBhbmVsSW5mby5yYW5n
ZVRvQmVSZXBsYWNlZC5nZXQoKSk7Ci0gICAgICAgIGlmICghYm91bmRpbmdCb3guaXNFbXB0eSgp
KQotICAgICAgICAgICAgY2xpZW50KCktPnNob3dDb3JyZWN0aW9uUGFuZWwobV9jb3JyZWN0aW9u
UGFuZWxJbmZvLnBhbmVsVHlwZSwgYm91bmRpbmdCb3gsIG1fY29ycmVjdGlvblBhbmVsSW5mby5y
ZXBsYWNlZFN0cmluZywgdG9wU3VnZ2VzdGlvbiwgc3VnZ2VzdGlvbnMpOwotICAgIH0KLSAgICAg
ICAgYnJlYWs7Ci0gICAgfQotfQotCi12b2lkIFNwZWxsaW5nQ29ycmVjdGlvbkNvbnRyb2xsZXI6
OmhhbmRsZUNvcnJlY3Rpb25QYW5lbFJlc3VsdChjb25zdCBTdHJpbmcmIGNvcnJlY3Rpb24pCi17
Ci0gICAgUmFuZ2UqIHJlcGxhY2VkUmFuZ2UgPSBtX2NvcnJlY3Rpb25QYW5lbEluZm8ucmFuZ2VU
b0JlUmVwbGFjZWQuZ2V0KCk7Ci0gICAgaWYgKCFyZXBsYWNlZFJhbmdlIHx8IG1fZnJhbWUtPmRv
Y3VtZW50KCkgIT0gcmVwbGFjZWRSYW5nZS0+b3duZXJEb2N1bWVudCgpKQotICAgICAgICByZXR1
cm47Ci0KLSAgICBTdHJpbmcgY3VycmVudFdvcmQgPSBwbGFpblRleHQobV9jb3JyZWN0aW9uUGFu
ZWxJbmZvLnJhbmdlVG9CZVJlcGxhY2VkLmdldCgpKTsKLSAgICAvLyBDaGVjayB0byBzZWUgaWYg
dGhlIHdvcmQgd2UgYXJlIGFib3V0IHRvIGNvcnJlY3QgaGFzIGJlZW4gY2hhbmdlZCBiZXR3ZWVu
IHRpbWVyIGZpcmluZyBhbmQgY2FsbGJhY2sgYmVpbmcgdHJpZ2dlcmVkLgotICAgIGlmIChjdXJy
ZW50V29yZCAhPSBtX2NvcnJlY3Rpb25QYW5lbEluZm8ucmVwbGFjZWRTdHJpbmcpCi0gICAgICAg
IHJldHVybjsKLQotICAgIG1fY29ycmVjdGlvblBhbmVsSW5mby5pc0FjdGl2ZSA9IGZhbHNlOwot
Ci0gICAgc3dpdGNoIChtX2NvcnJlY3Rpb25QYW5lbEluZm8ucGFuZWxUeXBlKSB7Ci0gICAgY2Fz
ZSBDb3JyZWN0aW9uUGFuZWxJbmZvOjpQYW5lbFR5cGVDb3JyZWN0aW9uOgotICAgICAgICBpZiAo
Y29ycmVjdGlvbi5sZW5ndGgoKSkgewotICAgICAgICAgICAgbV9jb3JyZWN0aW9uUGFuZWxJbmZv
LnJlcGxhY2VtZW50U3RyaW5nID0gY29ycmVjdGlvbjsKLSAgICAgICAgICAgIGFwcGx5Q29ycmVj
dGlvblBhbmVsSW5mbyhtYXJrZXJUeXBlc0ZvckF1dG9jb3JyZWN0aW9uKCkpOwotICAgICAgICB9
IGVsc2UgaWYgKCFtX2NvcnJlY3Rpb25QYW5lbElzRGlzbWlzc2VkQnlFZGl0b3IpCi0gICAgICAg
ICAgICByZXBsYWNlZFJhbmdlLT5zdGFydENvbnRhaW5lcigpLT5kb2N1bWVudCgpLT5tYXJrZXJz
KCktPmFkZE1hcmtlcihyZXBsYWNlZFJhbmdlLCBEb2N1bWVudE1hcmtlcjo6UmVqZWN0ZWRDb3Jy
ZWN0aW9uLCBtX2NvcnJlY3Rpb25QYW5lbEluZm8ucmVwbGFjZWRTdHJpbmcpOwotICAgICAgICBi
cmVhazsKLSAgICBjYXNlIENvcnJlY3Rpb25QYW5lbEluZm86OlBhbmVsVHlwZVJldmVyc2lvbjoK
LSAgICBjYXNlIENvcnJlY3Rpb25QYW5lbEluZm86OlBhbmVsVHlwZVNwZWxsaW5nU3VnZ2VzdGlv
bnM6Ci0gICAgICAgIGlmIChjb3JyZWN0aW9uLmxlbmd0aCgpKSB7Ci0gICAgICAgICAgICBtX2Nv
cnJlY3Rpb25QYW5lbEluZm8ucmVwbGFjZW1lbnRTdHJpbmcgPSBjb3JyZWN0aW9uOwotICAgICAg
ICAgICAgYXBwbHlDb3JyZWN0aW9uUGFuZWxJbmZvKG1hcmtlclR5cGVzRm9yUmVwbGFjZW1lbnQo
KSk7Ci0gICAgICAgIH0KLSAgICAgICAgYnJlYWs7Ci0gICAgfQotCi0gICAgbV9jb3JyZWN0aW9u
UGFuZWxJbmZvLnJhbmdlVG9CZVJlcGxhY2VkLmNsZWFyKCk7Ci19Ci0KLWJvb2wgU3BlbGxpbmdD
b3JyZWN0aW9uQ29udHJvbGxlcjo6aXNBdXRvbWF0aWNTcGVsbGluZ0NvcnJlY3Rpb25FbmFibGVk
KCkKLXsKLSAgICByZXR1cm4gY2xpZW50KCkgJiYgY2xpZW50KCktPmlzQXV0b21hdGljU3BlbGxp
bmdDb3JyZWN0aW9uRW5hYmxlZCgpOwotfQotCi1GbG9hdFJlY3QgU3BlbGxpbmdDb3JyZWN0aW9u
Q29udHJvbGxlcjo6cm9vdFZpZXdSZWN0Rm9yUmFuZ2UoY29uc3QgUmFuZ2UqIHJhbmdlKSBjb25z
dAotewotICAgIEZyYW1lVmlldyogdmlldyA9IG1fZnJhbWUtPnZpZXcoKTsKLSAgICBpZiAoIXZp
ZXcpCi0gICAgICAgIHJldHVybiBGbG9hdFJlY3QoKTsKLSAgICBWZWN0b3I8RmxvYXRRdWFkPiB0
ZXh0UXVhZHM7Ci0gICAgcmFuZ2UtPnRleHRRdWFkcyh0ZXh0UXVhZHMpOwotICAgIEZsb2F0UmVj
dCBib3VuZGluZ1JlY3Q7Ci0gICAgc2l6ZV90IHNpemUgPSB0ZXh0UXVhZHMuc2l6ZSgpOwotICAg
IGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgc2l6ZTsgKytpKQotICAgICAgICBib3VuZGluZ1JlY3Qu
dW5pdGUodGV4dFF1YWRzW2ldLmJvdW5kaW5nQm94KCkpOwotICAgIHJldHVybiB2aWV3LT5jb250
ZW50c1RvUm9vdFZpZXcoSW50UmVjdChib3VuZGluZ1JlY3QpKTsKLX0gICAgICAgIAotCi12b2lk
IFNwZWxsaW5nQ29ycmVjdGlvbkNvbnRyb2xsZXI6OnJlc3BvbmRUb0NoYW5nZWRTZWxlY3Rpb24o
Y29uc3QgVmlzaWJsZVNlbGVjdGlvbiYgb2xkU2VsZWN0aW9uKQotewotICAgIFZpc2libGVTZWxl
Y3Rpb24gY3VycmVudFNlbGVjdGlvbihtX2ZyYW1lLT5zZWxlY3Rpb24oKS0+c2VsZWN0aW9uKCkp
OwotICAgIC8vIFdoZW4gdXNlciBtb3ZlcyBjYXJldCB0byB0aGUgZW5kIG9mIGF1dG9jb3JyZWN0
ZWQgd29yZCBhbmQgcGF1c2VzLCB3ZSBzaG93IHRoZSBwYW5lbAotICAgIC8vIGNvbnRhaW5pbmcg
dGhlIG9yaWdpbmFsIHByZS1jb3JyZWN0aW9uIHdvcmQgc28gdGhhdCB1c2VyIGNhbiBxdWlja2x5
IHJldmVydCB0aGUKLSAgICAvLyB1bmRlc2lyZWQgYXV0b2NvcnJlY3Rpb24uIEhlcmUsIHdlIHN0
YXJ0IGNvcnJlY3Rpb24gcGFuZWwgdGltZXIgb25jZSB3ZSBjb25maXJtIHRoYXQKLSAgICAvLyB0
aGUgbmV3IGNhcmV0IHBvc2l0aW9uIGlzIGF0IHRoZSBlbmQgb2YgYSB3b3JkLgotICAgIGlmICgh
Y3VycmVudFNlbGVjdGlvbi5pc0NhcmV0KCkgfHwgY3VycmVudFNlbGVjdGlvbiA9PSBvbGRTZWxl
Y3Rpb24pCi0gICAgICAgIHJldHVybjsKLQotICAgIFZpc2libGVQb3NpdGlvbiBzZWxlY3Rpb25Q
b3NpdGlvbiA9IGN1cnJlbnRTZWxlY3Rpb24uc3RhcnQoKTsKLSAgICAKLSAgICAvLyBDcmVhdGlu
ZyBhIFZpc2libGUgcG9zaXRpb24gdHJpZ2dlcnMgYSBsYXlvdXQgYW5kIHRoZXJlIGlzIG5vCi0g
ICAgLy8gZ3VhcmFudGVlIHRoYXQgdGhlIHNlbGVjdGlvbiBpcyBzdGlsbCB2YWxpZC4KLSAgICBp
ZiAoc2VsZWN0aW9uUG9zaXRpb24uaXNOdWxsKCkpCi0gICAgICAgIHJldHVybjsKLSAgICAKLSAg
ICBWaXNpYmxlUG9zaXRpb24gZW5kUG9zaXRpb25PZldvcmQgPSBlbmRPZldvcmQoc2VsZWN0aW9u
UG9zaXRpb24sIExlZnRXb3JkSWZPbkJvdW5kYXJ5KTsKLSAgICBpZiAoc2VsZWN0aW9uUG9zaXRp
b24gIT0gZW5kUG9zaXRpb25PZldvcmQpCi0gICAgICAgIHJldHVybjsKLQotICAgIFBvc2l0aW9u
IHBvc2l0aW9uID0gZW5kUG9zaXRpb25PZldvcmQuZGVlcEVxdWl2YWxlbnQoKTsKLSAgICBpZiAo
cG9zaXRpb24uYW5jaG9yVHlwZSgpICE9IFBvc2l0aW9uOjpQb3NpdGlvbklzT2Zmc2V0SW5BbmNo
b3IpCi0gICAgICAgIHJldHVybjsKLQotICAgIE5vZGUqIG5vZGUgPSBwb3NpdGlvbi5jb250YWlu
ZXJOb2RlKCk7Ci0gICAgaW50IGVuZE9mZnNldCA9IHBvc2l0aW9uLm9mZnNldEluQ29udGFpbmVy
Tm9kZSgpOwotICAgIFZlY3RvcjxEb2N1bWVudE1hcmtlcio+IG1hcmtlcnMgPSBub2RlLT5kb2N1
bWVudCgpLT5tYXJrZXJzKCktPm1hcmtlcnNGb3Iobm9kZSk7Ci0gICAgc2l6ZV90IG1hcmtlckNv
dW50ID0gbWFya2Vycy5zaXplKCk7Ci0gICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBtYXJrZXJD
b3VudDsgKytpKSB7Ci0gICAgICAgIGNvbnN0IERvY3VtZW50TWFya2VyKiBtYXJrZXIgPSBtYXJr
ZXJzW2ldOwotICAgICAgICBpZiAoIXNob3VsZFN0YXJ0VGltZXJGb3IobWFya2VyLCBlbmRPZmZz
ZXQpKQotICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgIFJlZlB0cjxSYW5nZT4gd29yZFJh
bmdlID0gUmFuZ2U6OmNyZWF0ZShtX2ZyYW1lLT5kb2N1bWVudCgpLCBub2RlLCBtYXJrZXItPnN0
YXJ0T2Zmc2V0KCksIG5vZGUsIG1hcmtlci0+ZW5kT2Zmc2V0KCkpOwotICAgICAgICBTdHJpbmcg
Y3VycmVudFdvcmQgPSBwbGFpblRleHQod29yZFJhbmdlLmdldCgpKTsKLSAgICAgICAgaWYgKCFj
dXJyZW50V29yZC5sZW5ndGgoKSkKLSAgICAgICAgICAgIGNvbnRpbnVlOwotCi0gICAgICAgIG1f
Y29ycmVjdGlvblBhbmVsSW5mby5yYW5nZVRvQmVSZXBsYWNlZCA9IHdvcmRSYW5nZTsKLSAgICAg
ICAgbV9jb3JyZWN0aW9uUGFuZWxJbmZvLnJlcGxhY2VkU3RyaW5nID0gY3VycmVudFdvcmQ7Ci0g
ICAgICAgIGlmIChtYXJrZXItPnR5cGUoKSA9PSBEb2N1bWVudE1hcmtlcjo6U3BlbGxpbmcpCi0g
ICAgICAgICAgICBzdGFydENvcnJlY3Rpb25QYW5lbFRpbWVyKENvcnJlY3Rpb25QYW5lbEluZm86
OlBhbmVsVHlwZVNwZWxsaW5nU3VnZ2VzdGlvbnMpOwotICAgICAgICBlbHNlIHsKLSAgICAgICAg
ICAgIG1fY29ycmVjdGlvblBhbmVsSW5mby5yZXBsYWNlbWVudFN0cmluZyA9IG1hcmtlci0+ZGVz
Y3JpcHRpb24oKTsKLSAgICAgICAgICAgIHN0YXJ0Q29ycmVjdGlvblBhbmVsVGltZXIoQ29ycmVj
dGlvblBhbmVsSW5mbzo6UGFuZWxUeXBlUmV2ZXJzaW9uKTsKLSAgICAgICAgfQotCi0gICAgICAg
IGJyZWFrOwotICAgIH0KLX0KLQotdm9pZCBTcGVsbGluZ0NvcnJlY3Rpb25Db250cm9sbGVyOjpy
ZXNwb25kVG9BcHBsaWVkRWRpdGluZyhDb21wb3NpdGVFZGl0Q29tbWFuZCogY29tbWFuZCkKLXsK
LSAgICBpZiAoY29tbWFuZC0+aXNUb3BMZXZlbENvbW1hbmQoKSAmJiAhY29tbWFuZC0+c2hvdWxk
UmV0YWluQXV0b2NvcnJlY3Rpb25JbmRpY2F0b3IoKSkKLSAgICAgICAgbV9mcmFtZS0+ZG9jdW1l
bnQoKS0+bWFya2VycygpLT5yZW1vdmVNYXJrZXJzKERvY3VtZW50TWFya2VyOjpDb3JyZWN0aW9u
SW5kaWNhdG9yKTsKLQotICAgIG1hcmtQcmVjZWRpbmdXaGl0ZXNwYWNlRm9yRGVsZXRlZEF1dG9j
b3JyZWN0aW9uQWZ0ZXJDb21tYW5kKGNvbW1hbmQpOwotICAgIG1fb3JpZ2luYWxTdHJpbmdGb3JM
YXN0RGVsZXRlZEF1dG9jb3JyZWN0aW9uID0gU3RyaW5nKCk7Ci19Ci0KLXZvaWQgU3BlbGxpbmdD
b3JyZWN0aW9uQ29udHJvbGxlcjo6cmVzcG9uZFRvVW5hcHBsaWVkRWRpdGluZyhFZGl0Q29tbWFu
ZENvbXBvc2l0aW9uKiBjb21tYW5kKQotewotICAgIGlmICghY29tbWFuZC0+d2FzQ3JlYXRlTGlu
a0NvbW1hbmQoKSkKLSAgICAgICAgcmV0dXJuOwotICAgIFJlZlB0cjxSYW5nZT4gcmFuZ2UgPSBS
YW5nZTo6Y3JlYXRlKG1fZnJhbWUtPmRvY3VtZW50KCksIGNvbW1hbmQtPnN0YXJ0aW5nU2VsZWN0
aW9uKCkuc3RhcnQoKSwgY29tbWFuZC0+c3RhcnRpbmdTZWxlY3Rpb24oKS5lbmQoKSk7Ci0gICAg
aWYgKCFyYW5nZSkKLSAgICAgICAgcmV0dXJuOwotICAgIERvY3VtZW50TWFya2VyQ29udHJvbGxl
ciogbWFya2VycyA9IG1fZnJhbWUtPmRvY3VtZW50KCktPm1hcmtlcnMoKTsKLSAgICBtYXJrZXJz
LT5hZGRNYXJrZXIocmFuZ2UuZ2V0KCksIERvY3VtZW50TWFya2VyOjpSZXBsYWNlbWVudCk7Ci0g
ICAgbWFya2Vycy0+YWRkTWFya2VyKHJhbmdlLmdldCgpLCBEb2N1bWVudE1hcmtlcjo6U3BlbGxD
aGVja2luZ0V4ZW1wdGlvbik7Ci19Ci0KLUVkaXRvckNsaWVudCogU3BlbGxpbmdDb3JyZWN0aW9u
Q29udHJvbGxlcjo6Y2xpZW50KCkKLXsKLSAgICByZXR1cm4gbV9mcmFtZS0+cGFnZSgpID8gbV9m
cmFtZS0+cGFnZSgpLT5lZGl0b3JDbGllbnQoKSA6IDA7Ci19Ci0KLVRleHRDaGVja2VyQ2xpZW50
KiBTcGVsbGluZ0NvcnJlY3Rpb25Db250cm9sbGVyOjp0ZXh0Q2hlY2tlcigpCi17Ci0gICAgaWYg
KEVkaXRvckNsaWVudCogb3duZXIgPSBjbGllbnQoKSkKLSAgICAgICAgcmV0dXJuIG93bmVyLT50
ZXh0Q2hlY2tlcigpOwotICAgIHJldHVybiAwOwotfQotCi12b2lkIFNwZWxsaW5nQ29ycmVjdGlv
bkNvbnRyb2xsZXI6OnJlY29yZEF1dG9jb3JyZWN0aW9uUmVzcG9uc2VSZXZlcnNlZChjb25zdCBT
dHJpbmcmIHJlcGxhY2VkU3RyaW5nLCBjb25zdCBTdHJpbmcmIHJlcGxhY2VtZW50U3RyaW5nKQot
ewotICAgIGNsaWVudCgpLT5yZWNvcmRBdXRvY29ycmVjdGlvblJlc3BvbnNlKEVkaXRvckNsaWVu
dDo6QXV0b2NvcnJlY3Rpb25SZXZlcnRlZCwgcmVwbGFjZWRTdHJpbmcsIHJlcGxhY2VtZW50U3Ry
aW5nKTsKLX0KLQotdm9pZCBTcGVsbGluZ0NvcnJlY3Rpb25Db250cm9sbGVyOjpyZWNvcmRBdXRv
Y29ycmVjdGlvblJlc3BvbnNlUmV2ZXJzZWQoY29uc3QgU3RyaW5nJiByZXBsYWNlZFN0cmluZywg
UGFzc1JlZlB0cjxSYW5nZT4gcmVwbGFjZW1lbnRSYW5nZSkKLXsKLSAgICByZWNvcmRBdXRvY29y
cmVjdGlvblJlc3BvbnNlUmV2ZXJzZWQocmVwbGFjZWRTdHJpbmcsIHBsYWluVGV4dChyZXBsYWNl
bWVudFJhbmdlLmdldCgpKSk7Ci19Ci0KLXZvaWQgU3BlbGxpbmdDb3JyZWN0aW9uQ29udHJvbGxl
cjo6bWFya1JldmVyc2VkKFBhc3NSZWZQdHI8UmFuZ2U+IGNoYW5nZWRSYW5nZSkKLXsKLSAgICBj
aGFuZ2VkUmFuZ2UtPnN0YXJ0Q29udGFpbmVyKCktPmRvY3VtZW50KCktPm1hcmtlcnMoKS0+cmVt
b3ZlTWFya2VycyhjaGFuZ2VkUmFuZ2UuZ2V0KCksIERvY3VtZW50TWFya2VyOjpBdXRvY29ycmVj
dGVkLCBEb2N1bWVudE1hcmtlckNvbnRyb2xsZXI6OlJlbW92ZVBhcnRpYWxseU92ZXJsYXBwaW5n
TWFya2VyKTsKLSAgICBjaGFuZ2VkUmFuZ2UtPnN0YXJ0Q29udGFpbmVyKCktPmRvY3VtZW50KCkt
Pm1hcmtlcnMoKS0+YWRkTWFya2VyKGNoYW5nZWRSYW5nZS5nZXQoKSwgRG9jdW1lbnRNYXJrZXI6
OlNwZWxsQ2hlY2tpbmdFeGVtcHRpb24pOwotfQotCi12b2lkIFNwZWxsaW5nQ29ycmVjdGlvbkNv
bnRyb2xsZXI6Om1hcmtDb3JyZWN0aW9uKFBhc3NSZWZQdHI8UmFuZ2U+IHJlcGxhY2VkUmFuZ2Us
IGNvbnN0IFN0cmluZyYgcmVwbGFjZWRTdHJpbmcpCi17Ci0gICAgVmVjdG9yPERvY3VtZW50TWFy
a2VyOjpNYXJrZXJUeXBlPiBtYXJrZXJUeXBlc1RvQWRkID0gbWFya2VyVHlwZXNGb3JBdXRvY29y
cmVjdGlvbigpOwotICAgIERvY3VtZW50TWFya2VyQ29udHJvbGxlciogbWFya2VycyA9IHJlcGxh
Y2VkUmFuZ2UtPnN0YXJ0Q29udGFpbmVyKCktPmRvY3VtZW50KCktPm1hcmtlcnMoKTsKLSAgICBm
b3IgKHNpemVfdCBpID0gMDsgaSA8IG1hcmtlclR5cGVzVG9BZGQuc2l6ZSgpOyArK2kpIHsKLSAg
ICAgICAgRG9jdW1lbnRNYXJrZXI6Ok1hcmtlclR5cGUgbWFya2VyVHlwZSA9IG1hcmtlclR5cGVz
VG9BZGRbaV07Ci0gICAgICAgIGlmIChtYXJrZXJUeXBlID09IERvY3VtZW50TWFya2VyOjpSZXBs
YWNlbWVudCB8fCBtYXJrZXJUeXBlID09IERvY3VtZW50TWFya2VyOjpBdXRvY29ycmVjdGVkKQot
ICAgICAgICAgICAgbWFya2Vycy0+YWRkTWFya2VyKHJlcGxhY2VkUmFuZ2UuZ2V0KCksIG1hcmtl
clR5cGUsIHJlcGxhY2VkU3RyaW5nKTsKLSAgICAgICAgZWxzZQotICAgICAgICAgICAgbWFya2Vy
cy0+YWRkTWFya2VyKHJlcGxhY2VkUmFuZ2UuZ2V0KCksIG1hcmtlclR5cGUpOwotICAgIH0KLX0K
LQotdm9pZCBTcGVsbGluZ0NvcnJlY3Rpb25Db250cm9sbGVyOjpyZWNvcmRTcGVsbGNoZWNrZXJS
ZXNwb25zZUZvck1vZGlmaWVkQ29ycmVjdGlvbihSYW5nZSogcmFuZ2VPZkNvcnJlY3Rpb24sIGNv
bnN0IFN0cmluZyYgY29ycmVjdGVkLCBjb25zdCBTdHJpbmcmIGNvcnJlY3Rpb24pCi17Ci0gICAg
aWYgKCFyYW5nZU9mQ29ycmVjdGlvbikKLSAgICAgICAgcmV0dXJuOwotICAgIERvY3VtZW50TWFy
a2VyQ29udHJvbGxlciogbWFya2VycyA9IHJhbmdlT2ZDb3JyZWN0aW9uLT5zdGFydENvbnRhaW5l
cigpLT5kb2N1bWVudCgpLT5tYXJrZXJzKCk7Ci0gICAgVmVjdG9yPERvY3VtZW50TWFya2VyKj4g
Y29ycmVjdGVkT25jZU1hcmtlcnMgPSBtYXJrZXJzLT5tYXJrZXJzSW5SYW5nZShyYW5nZU9mQ29y
cmVjdGlvbiwgRG9jdW1lbnRNYXJrZXI6OkF1dG9jb3JyZWN0ZWQpOwotICAgIGlmIChjb3JyZWN0
ZWRPbmNlTWFya2Vycy5pc0VtcHR5KCkpCi0gICAgICAgIHJldHVybjsKLSAgICAKLSAgICAvLyBT
cGVsbGluZyBjb3JyZWN0ZWQgdGV4dCBoYXMgYmVlbiBlZGl0ZWQuIFdlIG5lZWQgdG8gZGV0ZXJt
aW5lIHdoZXRoZXIgdXNlciBoYXMgcmV2ZXJ0ZWQgaXQgdG8gb3JpZ2luYWwgdGV4dCBvcgotICAg
IC8vIGVkaXRlZCBpdCB0byBzb21ldGhpbmcgZWxzZSwgYW5kIG5vdGlmeSBzcGVsbGNoZWNrZXIg
YWNjb3JkaW5nbHkuCi0gICAgaWYgKG1hcmtlcnNIYXZlSWRlbnRpY2FsRGVzY3JpcHRpb24oY29y
cmVjdGVkT25jZU1hcmtlcnMpICYmIGNvcnJlY3RlZE9uY2VNYXJrZXJzWzBdLT5kZXNjcmlwdGlv
bigpID09IGNvcnJlY3RlZCkKLSAgICAgICAgY2xpZW50KCktPnJlY29yZEF1dG9jb3JyZWN0aW9u
UmVzcG9uc2UoRWRpdG9yQ2xpZW50OjpBdXRvY29ycmVjdGlvblJldmVydGVkLCBjb3JyZWN0ZWQs
IGNvcnJlY3Rpb24pOwotICAgIGVsc2UKLSAgICAgICAgY2xpZW50KCktPnJlY29yZEF1dG9jb3Jy
ZWN0aW9uUmVzcG9uc2UoRWRpdG9yQ2xpZW50OjpBdXRvY29ycmVjdGlvbkVkaXRlZCwgY29ycmVj
dGVkLCBjb3JyZWN0aW9uKTsKLSAgICBtYXJrZXJzLT5yZW1vdmVNYXJrZXJzKHJhbmdlT2ZDb3Jy
ZWN0aW9uLCBEb2N1bWVudE1hcmtlcjo6QXV0b2NvcnJlY3RlZCwgRG9jdW1lbnRNYXJrZXJDb250
cm9sbGVyOjpSZW1vdmVQYXJ0aWFsbHlPdmVybGFwcGluZ01hcmtlcik7Ci19Ci0KLXZvaWQgU3Bl
bGxpbmdDb3JyZWN0aW9uQ29udHJvbGxlcjo6ZGVsZXRlZEF1dG9jb3JyZWN0aW9uQXRQb3NpdGlv
bihjb25zdCBQb3NpdGlvbiYgcG9zaXRpb24sIGNvbnN0IFN0cmluZyYgb3JpZ2luYWxTdHJpbmcp
Ci17Ci0gICAgbV9vcmlnaW5hbFN0cmluZ0Zvckxhc3REZWxldGVkQXV0b2NvcnJlY3Rpb24gPSBv
cmlnaW5hbFN0cmluZzsKLSAgICBtX3Bvc2l0aW9uRm9yTGFzdERlbGV0ZWRBdXRvY29ycmVjdGlv
biA9IHBvc2l0aW9uOwotfQotCi12b2lkIFNwZWxsaW5nQ29ycmVjdGlvbkNvbnRyb2xsZXI6Om1h
cmtQcmVjZWRpbmdXaGl0ZXNwYWNlRm9yRGVsZXRlZEF1dG9jb3JyZWN0aW9uQWZ0ZXJDb21tYW5k
KEVkaXRDb21tYW5kKiBjb21tYW5kKQotewotICAgIFBvc2l0aW9uIGVuZE9mU2VsZWN0aW9uID0g
Y29tbWFuZC0+ZW5kaW5nU2VsZWN0aW9uKCkuZW5kKCk7Ci0gICAgaWYgKGVuZE9mU2VsZWN0aW9u
ICE9IG1fcG9zaXRpb25Gb3JMYXN0RGVsZXRlZEF1dG9jb3JyZWN0aW9uKQotICAgICAgICByZXR1
cm47Ci0KLSAgICBQb3NpdGlvbiBwcmVjZWRpbmdDaGFyYWN0ZXJQb3NpdGlvbiA9IGVuZE9mU2Vs
ZWN0aW9uLnByZXZpb3VzKCk7Ci0gICAgaWYgKGVuZE9mU2VsZWN0aW9uID09IHByZWNlZGluZ0No
YXJhY3RlclBvc2l0aW9uKQotICAgICAgICByZXR1cm47Ci0KLSAgICBSZWZQdHI8UmFuZ2U+IHBy
ZWNlZGluZ0NoYXJhY3RlclJhbmdlID0gUmFuZ2U6OmNyZWF0ZShtX2ZyYW1lLT5kb2N1bWVudCgp
LCBwcmVjZWRpbmdDaGFyYWN0ZXJQb3NpdGlvbiwgZW5kT2ZTZWxlY3Rpb24pOwotICAgIFN0cmlu
ZyBzdHJpbmcgPSBwbGFpblRleHQocHJlY2VkaW5nQ2hhcmFjdGVyUmFuZ2UuZ2V0KCkpOwotICAg
IGlmIChzdHJpbmcuaXNFbXB0eSgpIHx8ICFpc1doaXRlc3BhY2Uoc3RyaW5nW3N0cmluZy5sZW5n
dGgoKSAtIDFdKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgLy8gTWFyayB0aGlzIHdoaXRlc3Bh
Y2UgdG8gaW5kaWNhdGUgd2UgaGF2ZSBkZWxldGVkIGFuIGF1dG9jb3JyZWN0aW9uIGZvbGxvd2lu
ZyB0aGlzCi0gICAgLy8gd2hpdGVzcGFjZS4gU28gaWYgdGhlIHVzZXIgdHlwZXMgdGhlIHNhbWUg
b3JpZ2luYWwgd29yZCBhZ2FpbiBhdCB0aGlzIHBvc2l0aW9uLCB3ZQotICAgIC8vIHdvbid0IGF1
dG9jb3JyZWN0IGl0IGFnYWluLgotICAgIG1fZnJhbWUtPmRvY3VtZW50KCktPm1hcmtlcnMoKS0+
YWRkTWFya2VyKHByZWNlZGluZ0NoYXJhY3RlclJhbmdlLmdldCgpLCBEb2N1bWVudE1hcmtlcjo6
RGVsZXRlZEF1dG9jb3JyZWN0aW9uLCBtX29yaWdpbmFsU3RyaW5nRm9yTGFzdERlbGV0ZWRBdXRv
Y29ycmVjdGlvbik7Ci19Ci0KLWJvb2wgU3BlbGxpbmdDb3JyZWN0aW9uQ29udHJvbGxlcjo6cHJv
Y2Vzc01hcmtlcnNPblRleHRUb0JlUmVwbGFjZWRCeVJlc3VsdChjb25zdCBUZXh0Q2hlY2tpbmdS
ZXN1bHQqIHJlc3VsdCwgUmFuZ2UqIHJhbmdlVG9CZVJlcGxhY2VkLCBjb25zdCBTdHJpbmcmIHN0
cmluZ1RvQmVSZXBsYWNlZCkKLXsKLSAgICBEb2N1bWVudE1hcmtlckNvbnRyb2xsZXIqIG1hcmtl
ckNvbnRyb2xsZXIgPSBtX2ZyYW1lLT5kb2N1bWVudCgpLT5tYXJrZXJzKCk7Ci0gICAgaWYgKG1h
cmtlckNvbnRyb2xsZXItPmhhc01hcmtlcnMocmFuZ2VUb0JlUmVwbGFjZWQsIERvY3VtZW50TWFy
a2VyOjpSZXBsYWNlbWVudCkpIHsKLSAgICAgICAgaWYgKHJlc3VsdC0+dHlwZSA9PSBUZXh0Q2hl
Y2tpbmdUeXBlQ29ycmVjdGlvbikKLSAgICAgICAgICAgIHJlY29yZFNwZWxsY2hlY2tlclJlc3Bv
bnNlRm9yTW9kaWZpZWRDb3JyZWN0aW9uKHJhbmdlVG9CZVJlcGxhY2VkLCBzdHJpbmdUb0JlUmVw
bGFjZWQsIHJlc3VsdC0+cmVwbGFjZW1lbnQpOwotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAg
fQotCi0gICAgaWYgKG1hcmtlckNvbnRyb2xsZXItPmhhc01hcmtlcnMocmFuZ2VUb0JlUmVwbGFj
ZWQsIERvY3VtZW50TWFya2VyOjpSZWplY3RlZENvcnJlY3Rpb24pKQotICAgICAgICByZXR1cm4g
ZmFsc2U7Ci0KLSAgICBQb3NpdGlvbiBiZWdpbm5pbmdPZlJhbmdlID0gcmFuZ2VUb0JlUmVwbGFj
ZWQtPnN0YXJ0UG9zaXRpb24oKTsKLSAgICBQb3NpdGlvbiBwcmVjZWRpbmdDaGFyYWN0ZXJQb3Np
dGlvbiA9IGJlZ2lubmluZ09mUmFuZ2UucHJldmlvdXMoKTsKLSAgICBSZWZQdHI8UmFuZ2U+IHBy
ZWNlZGluZ0NoYXJhY3RlclJhbmdlID0gUmFuZ2U6OmNyZWF0ZShtX2ZyYW1lLT5kb2N1bWVudCgp
LCBwcmVjZWRpbmdDaGFyYWN0ZXJQb3NpdGlvbiwgYmVnaW5uaW5nT2ZSYW5nZSk7Ci0KLSAgICBW
ZWN0b3I8RG9jdW1lbnRNYXJrZXIqPiBtYXJrZXJzID0gbWFya2VyQ29udHJvbGxlci0+bWFya2Vy
c0luUmFuZ2UocHJlY2VkaW5nQ2hhcmFjdGVyUmFuZ2UuZ2V0KCksIERvY3VtZW50TWFya2VyOjpE
ZWxldGVkQXV0b2NvcnJlY3Rpb24pOwotCi0gICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBtYXJr
ZXJzLnNpemUoKTsgKytpKSB7Ci0gICAgICAgIGlmIChtYXJrZXJzW2ldLT5kZXNjcmlwdGlvbigp
ID09IHN0cmluZ1RvQmVSZXBsYWNlZCkKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9
Ci0KLSAgICByZXR1cm4gdHJ1ZTsKLX0KLSAgICAKLSNlbmRpZgotCi19IC8vIG5hbWVzcGFjZSBX
ZWJDb3JlCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9lZGl0aW5nL1NwZWxsaW5nQ29ycmVjdGlvbkNv
bnRyb2xsZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9lZGl0aW5nL1NwZWxsaW5n
Q29ycmVjdGlvbkNvbnRyb2xsZXIuaAkocmV2aXNpb24gMTEyOTE3KQorKysgU291cmNlL1dlYkNv
cmUvZWRpdGluZy9TcGVsbGluZ0NvcnJlY3Rpb25Db250cm9sbGVyLmgJKHdvcmtpbmcgY29weSkK
QEAgLTEsMTU3ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTAgQXBwbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291
cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBh
cmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBh
cmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWlu
IHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBp
biBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJv
dmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJP
VklERUQgQlkgQVBQTEUgQ09NUFVURVIsIElOQy4gYGBBUyBJUycnIEFORCBBTlkKLSAqIEVYUFJF
U1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywg
VEhFCi0gKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNT
IEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVO
VCBTSEFMTCBBUFBMRSBDT01QVVRFUiwgSU5DLiBPUgotICogQ09OVFJJQlVUT1JTIEJFIExJQUJM
RSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCi0gKiBFWEVN
UExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sCi0gKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBM
T1NTIE9GIFVTRSwgREFUQSwgT1IKLSAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElP
TikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKLSAqIE9GIExJQUJJTElUWSwgV0hF
VEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xVRElO
RyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUg
VVNFCi0gKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklM
SVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLSNpZm5kZWYgU3BlbGxpbmdDb3JyZWN0aW9uQ29u
dHJvbGxlcl9oCi0jZGVmaW5lIFNwZWxsaW5nQ29ycmVjdGlvbkNvbnRyb2xsZXJfaAotCi0jaW5j
bHVkZSAiRG9jdW1lbnRNYXJrZXIuaCIKLSNpbmNsdWRlICJSYW5nZS5oIgotI2luY2x1ZGUgIlRl
eHRDaGVja2luZy5oIgotI2luY2x1ZGUgIlRpbWVyLmgiCi0jaW5jbHVkZSAiVmlzaWJsZVNlbGVj
dGlvbi5oIgotI2luY2x1ZGUgPHd0Zi9Ob25jb3B5YWJsZS5oPgotI2luY2x1ZGUgPHd0Zi9VbnVz
ZWRQYXJhbS5oPgotCi1uYW1lc3BhY2UgV2ViQ29yZSB7Ci0KLWNsYXNzIENvbXBvc2l0ZUVkaXRD
b21tYW5kOwotY2xhc3MgRWRpdG9yQ2xpZW50OwotY2xhc3MgRWRpdENvbW1hbmQ7Ci1jbGFzcyBF
ZGl0Q29tbWFuZENvbXBvc2l0aW9uOwotY2xhc3MgRnJhbWU7Ci1jbGFzcyBUZXh0Q2hlY2tlckNs
aWVudDsKLQotc3RydWN0IENvcnJlY3Rpb25QYW5lbEluZm8gewotICAgIGVudW0gUGFuZWxUeXBl
IHsKLSAgICAgICAgUGFuZWxUeXBlQ29ycmVjdGlvbiA9IDAsCi0gICAgICAgIFBhbmVsVHlwZVJl
dmVyc2lvbiwKLSAgICAgICAgUGFuZWxUeXBlU3BlbGxpbmdTdWdnZXN0aW9ucwotICAgIH07Ci0K
LSAgICBSZWZQdHI8UmFuZ2U+IHJhbmdlVG9CZVJlcGxhY2VkOwotICAgIFN0cmluZyByZXBsYWNl
ZFN0cmluZzsKLSAgICBTdHJpbmcgcmVwbGFjZW1lbnRTdHJpbmc7Ci0gICAgUGFuZWxUeXBlIHBh
bmVsVHlwZTsKLSAgICBib29sIGlzQWN0aXZlOwotfTsKLQotc3RydWN0IFRleHRDaGVja2luZ1Jl
c3VsdDsKLQotZW51bSBSZWFzb25Gb3JEaXNtaXNzaW5nQ29ycmVjdGlvblBhbmVsIHsKLSAgICBS
ZWFzb25Gb3JEaXNtaXNzaW5nQ29ycmVjdGlvblBhbmVsQ2FuY2VsbGVkID0gMCwKLSAgICBSZWFz
b25Gb3JEaXNtaXNzaW5nQ29ycmVjdGlvblBhbmVsSWdub3JlZCwKLSAgICBSZWFzb25Gb3JEaXNt
aXNzaW5nQ29ycmVjdGlvblBhbmVsQWNjZXB0ZWQKLX07Ci0KLSNpZiBVU0UoQVVUT0NPUlJFQ1RJ
T05fUEFORUwpCi0jZGVmaW5lIFVOTEVTU19FTkFCTEVEKGZ1bmN0aW9uQm9keSkgOwotI2Vsc2UK
LSNkZWZpbmUgVU5MRVNTX0VOQUJMRUQoZnVuY3Rpb25Cb2R5KSBmdW5jdGlvbkJvZHkKLSNlbmRp
ZgotCi1jbGFzcyBTcGVsbGluZ0NvcnJlY3Rpb25Db250cm9sbGVyIHsKLSAgICBXVEZfTUFLRV9O
T05DT1BZQUJMRShTcGVsbGluZ0NvcnJlY3Rpb25Db250cm9sbGVyKTsgV1RGX01BS0VfRkFTVF9B
TExPQ0FURUQ7Ci1wdWJsaWM6Ci0gICAgU3BlbGxpbmdDb3JyZWN0aW9uQ29udHJvbGxlcihGcmFt
ZSopIFVOTEVTU19FTkFCTEVEKHt9KQotICAgIH5TcGVsbGluZ0NvcnJlY3Rpb25Db250cm9sbGVy
KCkgVU5MRVNTX0VOQUJMRUQoe30pCi0KLSAgICB2b2lkIHN0YXJ0Q29ycmVjdGlvblBhbmVsVGlt
ZXIoQ29ycmVjdGlvblBhbmVsSW5mbzo6UGFuZWxUeXBlKSBVTkxFU1NfRU5BQkxFRCh7fSkKLSAg
ICB2b2lkIHN0b3BDb3JyZWN0aW9uUGFuZWxUaW1lcigpIFVOTEVTU19FTkFCTEVEKHt9KQotCi0g
ICAgdm9pZCBkaXNtaXNzKFJlYXNvbkZvckRpc21pc3NpbmdDb3JyZWN0aW9uUGFuZWwpIFVOTEVT
U19FTkFCTEVEKHt9KQotICAgIFN0cmluZyBkaXNtaXNzU29vbihSZWFzb25Gb3JEaXNtaXNzaW5n
Q29ycmVjdGlvblBhbmVsKSBVTkxFU1NfRU5BQkxFRCh7IHJldHVybiBTdHJpbmcoKTsgfSkKLSAg
ICB2b2lkIHNob3coUGFzc1JlZlB0cjxSYW5nZT4gcmFuZ2VUb1JlcGxhY2UsIGNvbnN0IFN0cmlu
ZyYgcmVwbGFjZW1lbnQpIFVOTEVTU19FTkFCTEVEKHsgVU5VU0VEX1BBUkFNKHJhbmdlVG9SZXBs
YWNlKTsgVU5VU0VEX1BBUkFNKHJlcGxhY2VtZW50KTsgfSkKLQotICAgIHZvaWQgYXBwbHlDb3Jy
ZWN0aW9uUGFuZWxJbmZvKGNvbnN0IFZlY3RvcjxEb2N1bWVudE1hcmtlcjo6TWFya2VyVHlwZT4m
KSBVTkxFU1NfRU5BQkxFRCh7fSkKLSAgICAvLyBSZXR1cm4gdHJ1ZSBpZiBjb3JyZWN0aW9uIHdh
cyBhcHBsaWVkLCBmYWxzZSBvdGhlcndpc2UuCi0gICAgYm9vbCBhcHBseUF1dG9jb3JyZWN0aW9u
QmVmb3JlVHlwaW5nSWZBcHByb3ByaWF0ZSgpIFVOTEVTU19FTkFCTEVEKHsgcmV0dXJuIGZhbHNl
OyB9KQotCi0gICAgdm9pZCByZXNwb25kVG9VbmFwcGxpZWRTcGVsbENvcnJlY3Rpb24oY29uc3Qg
VmlzaWJsZVNlbGVjdGlvbiYsIGNvbnN0IFN0cmluZyYgY29ycmVjdGVkLCBjb25zdCBTdHJpbmcm
IGNvcnJlY3Rpb24pIFVOTEVTU19FTkFCTEVEKHsgVU5VU0VEX1BBUkFNKGNvcnJlY3RlZCk7IFVO
VVNFRF9QQVJBTShjb3JyZWN0aW9uKTsgfSkKLSAgICB2b2lkIHJlc3BvbmRUb0FwcGxpZWRFZGl0
aW5nKENvbXBvc2l0ZUVkaXRDb21tYW5kKikgVU5MRVNTX0VOQUJMRUQoeyB9KQotICAgIHZvaWQg
cmVzcG9uZFRvVW5hcHBsaWVkRWRpdGluZyhFZGl0Q29tbWFuZENvbXBvc2l0aW9uKikgVU5MRVNT
X0VOQUJMRUQoeyB9KQotICAgIHZvaWQgcmVzcG9uZFRvQ2hhbmdlZFNlbGVjdGlvbihjb25zdCBW
aXNpYmxlU2VsZWN0aW9uJiBvbGRTZWxlY3Rpb24pIFVOTEVTU19FTkFCTEVEKHsgVU5VU0VEX1BB
UkFNKG9sZFNlbGVjdGlvbik7IH0pCi0KLSAgICB2b2lkIHN0b3BQZW5kaW5nQ29ycmVjdGlvbihj
b25zdCBWaXNpYmxlU2VsZWN0aW9uJiBvbGRTZWxlY3Rpb24pIFVOTEVTU19FTkFCTEVEKHsgVU5V
U0VEX1BBUkFNKG9sZFNlbGVjdGlvbik7IH0pCi0gICAgdm9pZCBhcHBseVBlbmRpbmdDb3JyZWN0
aW9uKGNvbnN0IFZpc2libGVTZWxlY3Rpb24mIHNlbGVjdGlvbkFmdGVyVHlwaW5nKSBVTkxFU1Nf
RU5BQkxFRCh7IFVOVVNFRF9QQVJBTShzZWxlY3Rpb25BZnRlclR5cGluZyk7IH0pCi0KLSAgICB2
b2lkIGhhbmRsZUNvcnJlY3Rpb25QYW5lbFJlc3VsdChjb25zdCBTdHJpbmcmIGNvcnJlY3Rpb24p
IFVOTEVTU19FTkFCTEVEKHsgVU5VU0VEX1BBUkFNKGNvcnJlY3Rpb24pOyB9KQotICAgIHZvaWQg
aGFuZGxlQ2FuY2VsT3BlcmF0aW9uKCkgVU5MRVNTX0VOQUJMRUQoe30pCi0KLSAgICBib29sIGhh
c1BlbmRpbmdDb3JyZWN0aW9uKCkgY29uc3QgVU5MRVNTX0VOQUJMRUQoeyByZXR1cm4gZmFsc2U7
IH0pCi0gICAgYm9vbCBpc1NwZWxsaW5nTWFya2VyQWxsb3dlZChQYXNzUmVmUHRyPFJhbmdlPiBt
aXNzcGVsbGluZ1JhbmdlKSBjb25zdCBVTkxFU1NfRU5BQkxFRCh7IFVOVVNFRF9QQVJBTShtaXNz
cGVsbGluZ1JhbmdlKTsgcmV0dXJuIHRydWU7IH0pCi0gICAgYm9vbCBpc0F1dG9tYXRpY1NwZWxs
aW5nQ29ycmVjdGlvbkVuYWJsZWQoKSBVTkxFU1NfRU5BQkxFRCh7IHJldHVybiBmYWxzZTsgfSkK
LSAgICBib29sIHNob3VsZFJlbW92ZU1hcmtlcnNVcG9uRWRpdGluZygpOwotCi0gICAgdm9pZCBj
b3JyZWN0aW9uUGFuZWxUaW1lckZpcmVkKFRpbWVyPFNwZWxsaW5nQ29ycmVjdGlvbkNvbnRyb2xs
ZXI+KikgVU5MRVNTX0VOQUJMRUQoe30pCi0gICAgdm9pZCByZWNvcmRBdXRvY29ycmVjdGlvblJl
c3BvbnNlUmV2ZXJzZWQoY29uc3QgU3RyaW5nJiByZXBsYWNlZFN0cmluZywgUGFzc1JlZlB0cjxS
YW5nZT4gcmVwbGFjZW1lbnRSYW5nZSkgVU5MRVNTX0VOQUJMRUQoeyBVTlVTRURfUEFSQU0ocmVw
bGFjZWRTdHJpbmcpOyBVTlVTRURfUEFSQU0ocmVwbGFjZW1lbnRSYW5nZSk7IH0pCi0gICAgdm9p
ZCBtYXJrUmV2ZXJzZWQoUGFzc1JlZlB0cjxSYW5nZT4gY2hhbmdlZFJhbmdlKSBVTkxFU1NfRU5B
QkxFRCh7IFVOVVNFRF9QQVJBTShjaGFuZ2VkUmFuZ2UpOyB9KQotICAgIHZvaWQgbWFya0NvcnJl
Y3Rpb24oUGFzc1JlZlB0cjxSYW5nZT4gcmVwbGFjZWRSYW5nZSwgY29uc3QgU3RyaW5nJiByZXBs
YWNlZFN0cmluZykgVU5MRVNTX0VOQUJMRUQoeyBVTlVTRURfUEFSQU0ocmVwbGFjZWRSYW5nZSk7
IFVOVVNFRF9QQVJBTShyZXBsYWNlZFN0cmluZyk7IH0pCi0gICAgdm9pZCByZWNvcmRTcGVsbGNo
ZWNrZXJSZXNwb25zZUZvck1vZGlmaWVkQ29ycmVjdGlvbihSYW5nZSogcmFuZ2VPZkNvcnJlY3Rp
b24sIGNvbnN0IFN0cmluZyYgY29ycmVjdGVkLCBjb25zdCBTdHJpbmcmIGNvcnJlY3Rpb24pIFVO
TEVTU19FTkFCTEVEKHsgVU5VU0VEX1BBUkFNKHJhbmdlT2ZDb3JyZWN0aW9uKTsgVU5VU0VEX1BB
UkFNKGNvcnJlY3RlZCk7IFVOVVNFRF9QQVJBTShjb3JyZWN0aW9uKTsgfSkKLQotICAgIC8vIFRo
aXMgZnVuY3Rpb24gcmV0dXJucyBmYWxzZSBpZiB0aGUgcmVwbGFjZW1lbnQgc2hvdWxkIG5vdCBi
ZSBjYXJyaWVkIG91dC4KLSAgICBib29sIHByb2Nlc3NNYXJrZXJzT25UZXh0VG9CZVJlcGxhY2Vk
QnlSZXN1bHQoY29uc3QgVGV4dENoZWNraW5nUmVzdWx0KiwgUmFuZ2UqIHJhbmdlVG9CZVJlcGxh
Y2VkLCBjb25zdCBTdHJpbmcmIHN0cmluZ1RvQmVSZXBsYWNlZCkgVU5MRVNTX0VOQUJMRUQoeyBV
TlVTRURfUEFSQU0ocmFuZ2VUb0JlUmVwbGFjZWQpOyBVTlVTRURfUEFSQU0oc3RyaW5nVG9CZVJl
cGxhY2VkKTsgcmV0dXJuIHRydWU7IH0pOwotICAgIHZvaWQgZGVsZXRlZEF1dG9jb3JyZWN0aW9u
QXRQb3NpdGlvbihjb25zdCBQb3NpdGlvbiYsIGNvbnN0IFN0cmluZyYgb3JpZ2luYWxTdHJpbmcp
IFVOTEVTU19FTkFCTEVEKHsgVU5VU0VEX1BBUkFNKG9yaWdpbmFsU3RyaW5nKTsgfSkKLQotI2lm
IFVTRShBVVRPQ09SUkVDVElPTl9QQU5FTCkKLXByaXZhdGU6Ci0gICAgdm9pZCByZWNvcmRBdXRv
Y29ycmVjdGlvblJlc3BvbnNlUmV2ZXJzZWQoY29uc3QgU3RyaW5nJiByZXBsYWNlZFN0cmluZywg
Y29uc3QgU3RyaW5nJiByZXBsYWNlbWVudFN0cmluZyk7Ci0KLSAgICBib29sIHNob3VsZFN0YXJ0
VGltZXJGb3IoY29uc3QgRG9jdW1lbnRNYXJrZXIqIG1hcmtlciwgaW50IGVuZE9mZnNldCkgY29u
c3QKLSAgICB7Ci0gICAgICAgIHJldHVybiAoKChtYXJrZXItPnR5cGUoKSA9PSBEb2N1bWVudE1h
cmtlcjo6UmVwbGFjZW1lbnQgJiYgIW1hcmtlci0+ZGVzY3JpcHRpb24oKS5pc051bGwoKSkgCi0g
ICAgICAgICAgICAgICAgIHx8IG1hcmtlci0+dHlwZSgpID09IERvY3VtZW50TWFya2VyOjpTcGVs
bGluZykgJiYgc3RhdGljX2Nhc3Q8aW50PihtYXJrZXItPmVuZE9mZnNldCgpKSA9PSBlbmRPZmZz
ZXQpOwotICAgIH0KLQotICAgIEVkaXRvckNsaWVudCogY2xpZW50KCk7Ci0gICAgVGV4dENoZWNr
ZXJDbGllbnQqIHRleHRDaGVja2VyKCk7Ci0gICAgRmxvYXRSZWN0IHJvb3RWaWV3UmVjdEZvclJh
bmdlKGNvbnN0IFJhbmdlKikgY29uc3Q7Ci0gICAgdm9pZCBtYXJrUHJlY2VkaW5nV2hpdGVzcGFj
ZUZvckRlbGV0ZWRBdXRvY29ycmVjdGlvbkFmdGVyQ29tbWFuZChFZGl0Q29tbWFuZCopOwotCi0g
ICAgRWRpdG9yQ2xpZW50KiBtX2NsaWVudDsKLSAgICBGcmFtZSogbV9mcmFtZTsKLQotICAgIFRp
bWVyPFNwZWxsaW5nQ29ycmVjdGlvbkNvbnRyb2xsZXI+IG1fY29ycmVjdGlvblBhbmVsVGltZXI7
Ci0gICAgQ29ycmVjdGlvblBhbmVsSW5mbyBtX2NvcnJlY3Rpb25QYW5lbEluZm87Ci0gICAgYm9v
bCBtX2NvcnJlY3Rpb25QYW5lbElzRGlzbWlzc2VkQnlFZGl0b3I7Ci0KLSAgICBTdHJpbmcgbV9v
cmlnaW5hbFN0cmluZ0Zvckxhc3REZWxldGVkQXV0b2NvcnJlY3Rpb247Ci0gICAgUG9zaXRpb24g
bV9wb3NpdGlvbkZvckxhc3REZWxldGVkQXV0b2NvcnJlY3Rpb247Ci0jZW5kaWYKLX07Ci0KLSN1
bmRlZiBVTkxFU1NfRU5BQkxFRAotCi1pbmxpbmUgYm9vbCBTcGVsbGluZ0NvcnJlY3Rpb25Db250
cm9sbGVyOjpzaG91bGRSZW1vdmVNYXJrZXJzVXBvbkVkaXRpbmcoKQotewotI2lmIFVTRShNQVJL
RVJfUkVNT1ZBTF9VUE9OX0VESVRJTkcpCi0gICAgcmV0dXJuIHRydWU7Ci0jZWxzZQotICAgIHJl
dHVybiBmYWxzZTsKLSNlbmRpZgotfQotCi19IC8vIG5hbWVzcGFjZSBXZWJDb3JlCi0KLSNlbmRp
ZiAvLyBTcGVsbGluZ0NvcnJlY3Rpb25Db250cm9sbGVyX2gKSW5kZXg6IFNvdXJjZS9XZWJDb3Jl
L2VkaXRpbmcvVHlwaW5nQ29tbWFuZC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUv
ZWRpdGluZy9UeXBpbmdDb21tYW5kLmNwcAkocmV2aXNpb24gMTEyOTE3KQorKysgU291cmNlL1dl
YkNvcmUvZWRpdGluZy9UeXBpbmdDb21tYW5kLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzI4LDcg
KzMyOCw3IEBAIHZvaWQgVHlwaW5nQ29tbWFuZDo6bWFya01pc3NwZWxsaW5nc0FmdGUKICAgICAg
ICAgICAgICAgICBzdHJpcHBlZFByZXZpb3VzV29yZCA9IHBsYWluVGV4dChyYW5nZS5nZXQoKSku
c3RyaXBXaGl0ZVNwYWNlKCk7CiAgICAgICAgICAgICBmcmFtZS0+ZWRpdG9yKCktPm1hcmtNaXNz
cGVsbGluZ3NBZnRlclR5cGluZ1RvV29yZChwMSwgZW5kaW5nU2VsZWN0aW9uKCksICFzdHJpcHBl
ZFByZXZpb3VzV29yZC5pc0VtcHR5KCkpOwogICAgICAgICB9IGVsc2UgaWYgKGNvbW1hbmRUeXBl
ID09IFR5cGluZ0NvbW1hbmQ6Okluc2VydFRleHQpCi0gICAgICAgICAgICBmcmFtZS0+ZWRpdG9y
KCktPnN0YXJ0Q29ycmVjdGlvblBhbmVsVGltZXIoKTsKKyAgICAgICAgICAgIGZyYW1lLT5lZGl0
b3IoKS0+c3RhcnRBbHRlcm5hdGl2ZVRleHRVSVRpbWVyKCk7CiAgICAgfQogfQogCkluZGV4OiBT
b3VyY2UvV2ViQ29yZS9sb2FkZXIvRW1wdHlDbGllbnRzLmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1dlYkNvcmUvbG9hZGVyL0VtcHR5Q2xpZW50cy5oCShyZXZpc2lvbiAxMTI5MTcpCisrKyBTb3Vy
Y2UvV2ViQ29yZS9sb2FkZXIvRW1wdHlDbGllbnRzLmgJKHdvcmtpbmcgY29weSkKQEAgLTUyMCw5
ICs1MjAsOSBAQCBwdWJsaWM6CiAgICAgVGV4dENoZWNrZXJDbGllbnQqIHRleHRDaGVja2VyKCkg
eyByZXR1cm4gJm1fdGV4dENoZWNrZXJDbGllbnQ7IH0KIAogI2lmIFVTRShBVVRPQ09SUkVDVElP
Tl9QQU5FTCkKLSAgICB2aXJ0dWFsIHZvaWQgc2hvd0NvcnJlY3Rpb25QYW5lbChDb3JyZWN0aW9u
UGFuZWxJbmZvOjpQYW5lbFR5cGUsIGNvbnN0IEZsb2F0UmVjdCYsIGNvbnN0IFN0cmluZyYsIGNv
bnN0IFN0cmluZyYsIGNvbnN0IFZlY3RvcjxTdHJpbmc+JikgeyB9Ci0gICAgdmlydHVhbCB2b2lk
IGRpc21pc3NDb3JyZWN0aW9uUGFuZWwoUmVhc29uRm9yRGlzbWlzc2luZ0NvcnJlY3Rpb25QYW5l
bCkgeyB9Ci0gICAgdmlydHVhbCBTdHJpbmcgZGlzbWlzc0NvcnJlY3Rpb25QYW5lbFNvb24oUmVh
c29uRm9yRGlzbWlzc2luZ0NvcnJlY3Rpb25QYW5lbCkgeyByZXR1cm4gU3RyaW5nKCk7IH0KKyAg
ICB2aXJ0dWFsIHZvaWQgc2hvd0NvcnJlY3Rpb25QYW5lbChBbHRlcm5hdGl2ZVRleHRUeXBlLCBj
b25zdCBGbG9hdFJlY3QmLCBjb25zdCBTdHJpbmcmLCBjb25zdCBTdHJpbmcmLCBjb25zdCBWZWN0
b3I8U3RyaW5nPiYpIHsgfQorICAgIHZpcnR1YWwgdm9pZCBkaXNtaXNzQ29ycmVjdGlvblBhbmVs
KFJlYXNvbkZvckRpc21pc3NpbmdBbHRlcm5hdGl2ZVRleHQpIHsgfQorICAgIHZpcnR1YWwgU3Ry
aW5nIGRpc21pc3NDb3JyZWN0aW9uUGFuZWxTb29uKFJlYXNvbkZvckRpc21pc3NpbmdBbHRlcm5h
dGl2ZVRleHQpIHsgcmV0dXJuIFN0cmluZygpOyB9CiAgICAgdmlydHVhbCB2b2lkIHJlY29yZEF1
dG9jb3JyZWN0aW9uUmVzcG9uc2UoQXV0b2NvcnJlY3Rpb25SZXNwb25zZVR5cGUsIGNvbnN0IFN0
cmluZyYsIGNvbnN0IFN0cmluZyYpIHsgfQogI2VuZGlmCiAgICAgdmlydHVhbCB2b2lkIHVwZGF0
ZVNwZWxsaW5nVUlXaXRoR3JhbW1hclN0cmluZyhjb25zdCBTdHJpbmcmLCBjb25zdCBHcmFtbWFy
RGV0YWlsJikgeyB9CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wYWdlL0VkaXRvckNsaWVudC5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BhZ2UvRWRpdG9yQ2xpZW50LmgJKHJldmlzaW9u
IDExMjkxNykKKysrIFNvdXJjZS9XZWJDb3JlL3BhZ2UvRWRpdG9yQ2xpZW50LmgJKHdvcmtpbmcg
Y29weSkKQEAgLTI3LDcgKzI3LDcgQEAKICNpZm5kZWYgRWRpdG9yQ2xpZW50X2gKICNkZWZpbmUg
RWRpdG9yQ2xpZW50X2gKIAotI2luY2x1ZGUgIlNwZWxsaW5nQ29ycmVjdGlvbkNvbnRyb2xsZXIu
aCIKKyNpbmNsdWRlICJBbHRlcm5hdGl2ZVRleHRDb250cm9sbGVyLmgiCiAjaW5jbHVkZSAiRWRp
dG9ySW5zZXJ0QWN0aW9uLmgiCiAjaW5jbHVkZSAiRmxvYXRSZWN0LmgiCiAjaW5jbHVkZSAiVGV4
dEFmZmluaXR5LmgiCkBAIC0xNTIsOSArMTUyLDkgQEAgcHVibGljOgogICAgIH07CiAKICNpZiBV
U0UoQVVUT0NPUlJFQ1RJT05fUEFORUwpCi0gICAgdmlydHVhbCB2b2lkIHNob3dDb3JyZWN0aW9u
UGFuZWwoQ29ycmVjdGlvblBhbmVsSW5mbzo6UGFuZWxUeXBlLCBjb25zdCBGbG9hdFJlY3QmIGJv
dW5kaW5nQm94T2ZSZXBsYWNlZFN0cmluZywgY29uc3QgU3RyaW5nJiByZXBsYWNlZFN0cmluZywg
Y29uc3QgU3RyaW5nJiByZXBsYWNtZW50U3RyaW5nLCBjb25zdCBWZWN0b3I8U3RyaW5nPiYgYWx0
ZXJuYXRpdmVSZXBsYWNlbWVudFN0cmluZ3MpID0gMDsKLSAgICB2aXJ0dWFsIHZvaWQgZGlzbWlz
c0NvcnJlY3Rpb25QYW5lbChSZWFzb25Gb3JEaXNtaXNzaW5nQ29ycmVjdGlvblBhbmVsKSA9IDA7
Ci0gICAgdmlydHVhbCBTdHJpbmcgZGlzbWlzc0NvcnJlY3Rpb25QYW5lbFNvb24oUmVhc29uRm9y
RGlzbWlzc2luZ0NvcnJlY3Rpb25QYW5lbCkgPSAwOworICAgIHZpcnR1YWwgdm9pZCBzaG93Q29y
cmVjdGlvblBhbmVsKEFsdGVybmF0aXZlVGV4dFR5cGUsIGNvbnN0IEZsb2F0UmVjdCYgYm91bmRp
bmdCb3hPZlJlcGxhY2VkU3RyaW5nLCBjb25zdCBTdHJpbmcmIHJlcGxhY2VkU3RyaW5nLCBjb25z
dCBTdHJpbmcmIHJlcGxhY21lbnRTdHJpbmcsIGNvbnN0IFZlY3RvcjxTdHJpbmc+JiBhbHRlcm5h
dGl2ZVJlcGxhY2VtZW50U3RyaW5ncykgPSAwOworICAgIHZpcnR1YWwgdm9pZCBkaXNtaXNzQ29y
cmVjdGlvblBhbmVsKFJlYXNvbkZvckRpc21pc3NpbmdBbHRlcm5hdGl2ZVRleHQpID0gMDsKKyAg
ICB2aXJ0dWFsIFN0cmluZyBkaXNtaXNzQ29ycmVjdGlvblBhbmVsU29vbihSZWFzb25Gb3JEaXNt
aXNzaW5nQWx0ZXJuYXRpdmVUZXh0KSA9IDA7CiAgICAgdmlydHVhbCB2b2lkIHJlY29yZEF1dG9j
b3JyZWN0aW9uUmVzcG9uc2UoQXV0b2NvcnJlY3Rpb25SZXNwb25zZVR5cGUsIGNvbnN0IFN0cmlu
ZyYgcmVwbGFjZWRTdHJpbmcsIGNvbnN0IFN0cmluZyYgcmVwbGFjZW1lbnRTdHJpbmcpID0gMDsK
ICNlbmRpZgogCkluZGV4OiBTb3VyY2UvV2ViS2l0Mi9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1dlYktpdDIvQ2hhbmdlTG9nCShyZXZpc2lvbiAxMTI5MzEpCisrKyBTb3VyY2UvV2Vi
S2l0Mi9DaGFuZ2VMb2cJKHdvcmtpbmcgY29weSkKQEAgLTEsMyArMSw1MyBAQAorMjAxMi0wNC0w
MiAgSmlhIFB1ICA8anB1QGFwcGxlLmNvbT4KKworICAgICAgICBSZW5hbWUgU3BlbGxpbmdDb3Jy
ZWN0aW9uQ29udHJvbGxlciB0byBBbHRlcm5hdGl2ZVRleHRDb250cm9sbGVyLgorICAgICAgICBo
dHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9ODI5NDIKKworICAgICAgICBS
ZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBUaGVzZSBjaGFuZ2VzIGFyZSBz
aW1wbHkgZm9yIGFkb3B0aW5nIG5ldyBjbGFzcyBuYW1lcy4KKworICAgICAgICAqIFVJUHJvY2Vz
cy9BUEkvbWFjL1BhZ2VDbGllbnRJbXBsLmg6CisgICAgICAgIChQYWdlQ2xpZW50SW1wbCk6Cisg
ICAgICAgICogVUlQcm9jZXNzL0FQSS9tYWMvUGFnZUNsaWVudEltcGwubW06CisgICAgICAgIChX
ZWJLaXQ6OlBhZ2VDbGllbnRJbXBsOjpzaG93Q29ycmVjdGlvblBhbmVsKToKKyAgICAgICAgKFdl
YktpdDo6UGFnZUNsaWVudEltcGw6OmRpc21pc3NDb3JyZWN0aW9uUGFuZWwpOgorICAgICAgICAo
V2ViS2l0OjpQYWdlQ2xpZW50SW1wbDo6ZGlzbWlzc0NvcnJlY3Rpb25QYW5lbFNvb24pOgorICAg
ICAgICAqIFVJUHJvY2Vzcy9BUEkvbWFjL1dLVmlldy5tbToKKyAgICAgICAgKC1bV0tWaWV3IGhh
bmRsZUNvcnJlY3Rpb25QYW5lbFJlc3VsdDpdKToKKyAgICAgICAgKiBVSVByb2Nlc3MvUGFnZUNs
aWVudC5oOgorICAgICAgICAoUGFnZUNsaWVudCk6CisgICAgICAgICogVUlQcm9jZXNzL1dlYlBh
Z2VQcm94eS5jcHA6CisgICAgICAgIChXZWJLaXQ6OldlYlBhZ2VQcm94eTo6ZGlkQ29tbWl0TG9h
ZEZvckZyYW1lKToKKyAgICAgICAgKFdlYktpdDo6V2ViUGFnZVByb3h5OjpwYWdlRGlkU2Nyb2xs
KToKKyAgICAgICAgKFdlYktpdDo6V2ViUGFnZVByb3h5Ojpwcm9jZXNzRGlkQ3Jhc2gpOgorICAg
ICAgICAoV2ViS2l0OjpXZWJQYWdlUHJveHk6OnNob3dDb3JyZWN0aW9uUGFuZWwpOgorICAgICAg
ICAoV2ViS2l0OjpXZWJQYWdlUHJveHk6OmRpc21pc3NDb3JyZWN0aW9uUGFuZWwpOgorICAgICAg
ICAoV2ViS2l0OjpXZWJQYWdlUHJveHk6OmRpc21pc3NDb3JyZWN0aW9uUGFuZWxTb29uKToKKyAg
ICAgICAgKFdlYktpdDo6V2ViUGFnZVByb3h5OjpoYW5kbGVBbHRlcm5hdGl2ZVRleHRVSVJlc3Vs
dCk6CisgICAgICAgICogVUlQcm9jZXNzL1dlYlBhZ2VQcm94eS5oOgorICAgICAgICAoV2ViUGFn
ZVByb3h5KToKKyAgICAgICAgKiBVSVByb2Nlc3MvbWFjL0NvcnJlY3Rpb25QYW5lbC5oOgorICAg
ICAgICAoQ29ycmVjdGlvblBhbmVsKToKKyAgICAgICAgKiBVSVByb2Nlc3MvbWFjL0NvcnJlY3Rp
b25QYW5lbC5tbToKKyAgICAgICAgKGNvcnJlY3Rpb25JbmRpY2F0b3JUeXBlKToKKyAgICAgICAg
KFdlYktpdDo6Q29ycmVjdGlvblBhbmVsOjpDb3JyZWN0aW9uUGFuZWwpOgorICAgICAgICAoV2Vi
S2l0OjpDb3JyZWN0aW9uUGFuZWw6On5Db3JyZWN0aW9uUGFuZWwpOgorICAgICAgICAoV2ViS2l0
OjpDb3JyZWN0aW9uUGFuZWw6OnNob3cpOgorICAgICAgICAoV2ViS2l0OjpDb3JyZWN0aW9uUGFu
ZWw6OmRpc21pc3MpOgorICAgICAgICAoV2ViS2l0OjpDb3JyZWN0aW9uUGFuZWw6OmRpc21pc3NJ
bnRlcm5hbCk6CisgICAgICAgIChXZWJLaXQ6OkNvcnJlY3Rpb25QYW5lbDo6aGFuZGxlQWNjZXB0
ZWRSZXBsYWNlbWVudCk6CisgICAgICAgICogV2ViUHJvY2Vzcy9XZWJDb3JlU3VwcG9ydC9XZWJF
ZGl0b3JDbGllbnQuaDoKKyAgICAgICAgKiBXZWJQcm9jZXNzL1dlYkNvcmVTdXBwb3J0L21hYy9X
ZWJFZGl0b3JDbGllbnRNYWMubW06CisgICAgICAgIChXZWJLaXQ6OldlYkVkaXRvckNsaWVudDo6
c2hvd0NvcnJlY3Rpb25QYW5lbCk6CisgICAgICAgIChXZWJLaXQ6OldlYkVkaXRvckNsaWVudDo6
ZGlzbWlzc0NvcnJlY3Rpb25QYW5lbCk6CisgICAgICAgIChXZWJLaXQ6OldlYkVkaXRvckNsaWVu
dDo6ZGlzbWlzc0NvcnJlY3Rpb25QYW5lbFNvb24pOgorICAgICAgICAqIFdlYlByb2Nlc3MvV2Vi
UGFnZS9XZWJQYWdlLmNwcDoKKyAgICAgICAgKFdlYktpdDo6V2ViUGFnZTo6aGFuZGxlQWx0ZXJu
YXRpdmVUZXh0VUlSZXN1bHQpOgorICAgICAgICAqIFdlYlByb2Nlc3MvV2ViUGFnZS9XZWJQYWdl
Lmg6CisgICAgICAgIChXZWJQYWdlKToKKyAgICAgICAgKiBXZWJQcm9jZXNzL1dlYlBhZ2UvV2Vi
UGFnZS5tZXNzYWdlcy5pbjoKKwogMjAxMi0wNC0wMiAgSmVzdXMgU2FuY2hlei1QYWxlbmNpYSAg
PGplc3VzLnBhbGVuY2lhQG9wZW5ib3NzYS5vcmc+CiAKICAgICAgICAgW1F0XVtXSzJdIFJlc291
cmNlRXJyb3I6OmlzQ2FuY2VsbGF0aW9uKCkgaXMgYWx3YXlzIHJldHVybmluZyBmYWxzZQpJbmRl
eDogU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL1BhZ2VDbGllbnQuaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvUGFnZUNsaWVudC5oCShyZXZpc2lvbiAxMTI5MTcpCisr
KyBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvUGFnZUNsaWVudC5oCSh3b3JraW5nIGNvcHkpCkBA
IC0yOSw4ICsyOSw4IEBACiAjaW5jbHVkZSAiU2hhcmVhYmxlQml0bWFwLmgiCiAjaW5jbHVkZSAi
V2ViUGFnZVByb3h5LmgiCiAjaW5jbHVkZSAiV2ViUG9wdXBNZW51UHJveHkuaCIKKyNpbmNsdWRl
IDxXZWJDb3JlL0FsdGVybmF0aXZlVGV4dENvbnRyb2xsZXIuaD4KICNpbmNsdWRlIDxXZWJDb3Jl
L0VkaXRvckNsaWVudC5oPgotI2luY2x1ZGUgPFdlYkNvcmUvU3BlbGxpbmdDb3JyZWN0aW9uQ29u
dHJvbGxlci5oPgogI2luY2x1ZGUgPHd0Zi9Gb3J3YXJkLmg+CiAKICNpZiBQTEFURk9STShNQUMp
CkBAIC0xODUsOSArMTg1LDkgQEAgcHVibGljOgogICAgIHZpcnR1YWwgQ0dDb250ZXh0UmVmIGNv
bnRhaW5pbmdXaW5kb3dHcmFwaGljc0NvbnRleHQoKSA9IDA7CiAgICAgdmlydHVhbCB2b2lkIGRp
ZFBlcmZvcm1EaWN0aW9uYXJ5TG9va3VwKGNvbnN0IFN0cmluZyYsIGRvdWJsZSBzY2FsZUZhY3Rv
ciwgY29uc3QgRGljdGlvbmFyeVBvcHVwSW5mbyYpID0gMDsKICAgICB2aXJ0dWFsIHZvaWQgZGlz
bWlzc0RpY3Rpb25hcnlMb29rdXBQYW5lbCgpID0gMDsKLSAgICB2aXJ0dWFsIHZvaWQgc2hvd0Nv
cnJlY3Rpb25QYW5lbChXZWJDb3JlOjpDb3JyZWN0aW9uUGFuZWxJbmZvOjpQYW5lbFR5cGUsIGNv
bnN0IFdlYkNvcmU6OkZsb2F0UmVjdCYgYm91bmRpbmdCb3hPZlJlcGxhY2VkU3RyaW5nLCBjb25z
dCBTdHJpbmcmIHJlcGxhY2VkU3RyaW5nLCBjb25zdCBTdHJpbmcmIHJlcGxhY2VtZW50U3RyaW5n
LCBjb25zdCBWZWN0b3I8U3RyaW5nPiYgYWx0ZXJuYXRpdmVSZXBsYWNlbWVudFN0cmluZ3MpID0g
MDsKLSAgICB2aXJ0dWFsIHZvaWQgZGlzbWlzc0NvcnJlY3Rpb25QYW5lbChXZWJDb3JlOjpSZWFz
b25Gb3JEaXNtaXNzaW5nQ29ycmVjdGlvblBhbmVsKSA9IDA7Ci0gICAgdmlydHVhbCBTdHJpbmcg
ZGlzbWlzc0NvcnJlY3Rpb25QYW5lbFNvb24oV2ViQ29yZTo6UmVhc29uRm9yRGlzbWlzc2luZ0Nv
cnJlY3Rpb25QYW5lbCkgPSAwOworICAgIHZpcnR1YWwgdm9pZCBzaG93Q29ycmVjdGlvblBhbmVs
KFdlYkNvcmU6OkFsdGVybmF0aXZlVGV4dFR5cGUsIGNvbnN0IFdlYkNvcmU6OkZsb2F0UmVjdCYg
Ym91bmRpbmdCb3hPZlJlcGxhY2VkU3RyaW5nLCBjb25zdCBTdHJpbmcmIHJlcGxhY2VkU3RyaW5n
LCBjb25zdCBTdHJpbmcmIHJlcGxhY2VtZW50U3RyaW5nLCBjb25zdCBWZWN0b3I8U3RyaW5nPiYg
YWx0ZXJuYXRpdmVSZXBsYWNlbWVudFN0cmluZ3MpID0gMDsKKyAgICB2aXJ0dWFsIHZvaWQgZGlz
bWlzc0NvcnJlY3Rpb25QYW5lbChXZWJDb3JlOjpSZWFzb25Gb3JEaXNtaXNzaW5nQWx0ZXJuYXRp
dmVUZXh0KSA9IDA7CisgICAgdmlydHVhbCBTdHJpbmcgZGlzbWlzc0NvcnJlY3Rpb25QYW5lbFNv
b24oV2ViQ29yZTo6UmVhc29uRm9yRGlzbWlzc2luZ0FsdGVybmF0aXZlVGV4dCkgPSAwOwogICAg
IHZpcnR1YWwgdm9pZCByZWNvcmRBdXRvY29ycmVjdGlvblJlc3BvbnNlKFdlYkNvcmU6OkVkaXRv
ckNsaWVudDo6QXV0b2NvcnJlY3Rpb25SZXNwb25zZVR5cGUsIGNvbnN0IFN0cmluZyYgcmVwbGFj
ZWRTdHJpbmcsIGNvbnN0IFN0cmluZyYgcmVwbGFjZW1lbnRTdHJpbmcpID0gMDsKICAgICB2aXJ0
dWFsIHZvaWQgcmVjb21tZW5kZWRTY3JvbGxiYXJTdHlsZURpZENoYW5nZShpbnQzMl90IG5ld1N0
eWxlKSA9IDA7CiAgICAgCkluZGV4OiBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvV2ViUGFnZVBy
b3h5LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvV2ViUGFnZVBy
b3h5LmNwcAkocmV2aXNpb24gMTEyOTE3KQorKysgU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL1dl
YlBhZ2VQcm94eS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE4MTIsNyArMTgxMiw3IEBAIHZvaWQg
V2ViUGFnZVByb3h5OjpkaWRDb21taXRMb2FkRm9yRnJhbWUKICAgICBtX3BhZ2VDbGllbnQtPnJl
c2V0VGV4dElucHV0U3RhdGUoKTsKICNpZiAhZGVmaW5lZChCVUlMRElOR19PTl9TTk9XX0xFT1BB
UkQpCiAgICAgLy8gRklYTUU6IFNob3VsZCB0aGlzIGJlIG1vdmVkIGluc2lkZSByZXNldFRleHRJ
bnB1dFN0YXRlKCk/Ci0gICAgZGlzbWlzc0NvcnJlY3Rpb25QYW5lbChSZWFzb25Gb3JEaXNtaXNz
aW5nQ29ycmVjdGlvblBhbmVsSWdub3JlZCk7CisgICAgZGlzbWlzc0NvcnJlY3Rpb25QYW5lbChS
ZWFzb25Gb3JEaXNtaXNzaW5nQWx0ZXJuYXRpdmVUZXh0SWdub3JlZCk7CiAgICAgbV9wYWdlQ2xp
ZW50LT5kaXNtaXNzRGljdGlvbmFyeUxvb2t1cFBhbmVsKCk7CiAjZW5kaWYKICNlbmRpZgpAQCAt
MjM2OSw3ICsyMzY5LDcgQEAgdm9pZCBXZWJQYWdlUHJveHk6OnBhZ2VEaWRTY3JvbGwoKQogewog
ICAgIG1fdWlDbGllbnQucGFnZURpZFNjcm9sbCh0aGlzKTsKICNpZiBQTEFURk9STShNQUMpICYm
ICFkZWZpbmVkKEJVSUxESU5HX09OX1NOT1dfTEVPUEFSRCkKLSAgICBkaXNtaXNzQ29ycmVjdGlv
blBhbmVsKFJlYXNvbkZvckRpc21pc3NpbmdDb3JyZWN0aW9uUGFuZWxJZ25vcmVkKTsKKyAgICBk
aXNtaXNzQ29ycmVjdGlvblBhbmVsKFJlYXNvbkZvckRpc21pc3NpbmdBbHRlcm5hdGl2ZVRleHRJ
Z25vcmVkKTsKICNlbmRpZgogfQogCkBAIC0zMzUzLDcgKzMzNTMsNyBAQCB2b2lkIFdlYlBhZ2VQ
cm94eTo6cHJvY2Vzc0RpZENyYXNoKCkKICNlbmRpZgogCiAjaWYgUExBVEZPUk0oTUFDKSAmJiAh
ZGVmaW5lZChCVUlMRElOR19PTl9TTk9XX0xFT1BBUkQpCi0gICAgZGlzbWlzc0NvcnJlY3Rpb25Q
YW5lbChSZWFzb25Gb3JEaXNtaXNzaW5nQ29ycmVjdGlvblBhbmVsSWdub3JlZCk7CisgICAgZGlz
bWlzc0NvcnJlY3Rpb25QYW5lbChSZWFzb25Gb3JEaXNtaXNzaW5nQWx0ZXJuYXRpdmVUZXh0SWdu
b3JlZCk7CiAgICAgbV9wYWdlQ2xpZW50LT5kaXNtaXNzRGljdGlvbmFyeUxvb2t1cFBhbmVsKCk7
CiAjZW5kaWYKIH0KQEAgLTM2ODksMTcgKzM2ODksMTcgQEAgdm9pZCBXZWJQYWdlUHJveHk6OnN1
YnN0aXR1dGlvbnNQYW5lbElzUwogI2lmICFkZWZpbmVkKEJVSUxESU5HX09OX1NOT1dfTEVPUEFS
RCkKIHZvaWQgV2ViUGFnZVByb3h5OjpzaG93Q29ycmVjdGlvblBhbmVsKGludDMyX3QgcGFuZWxU
eXBlLCBjb25zdCBGbG9hdFJlY3QmIGJvdW5kaW5nQm94T2ZSZXBsYWNlZFN0cmluZywgY29uc3Qg
U3RyaW5nJiByZXBsYWNlZFN0cmluZywgY29uc3QgU3RyaW5nJiByZXBsYWNlbWVudFN0cmluZywg
Y29uc3QgVmVjdG9yPFN0cmluZz4mIGFsdGVybmF0aXZlUmVwbGFjZW1lbnRTdHJpbmdzKQogewot
ICAgIG1fcGFnZUNsaWVudC0+c2hvd0NvcnJlY3Rpb25QYW5lbCgoQ29ycmVjdGlvblBhbmVsSW5m
bzo6UGFuZWxUeXBlKXBhbmVsVHlwZSwgYm91bmRpbmdCb3hPZlJlcGxhY2VkU3RyaW5nLCByZXBs
YWNlZFN0cmluZywgcmVwbGFjZW1lbnRTdHJpbmcsIGFsdGVybmF0aXZlUmVwbGFjZW1lbnRTdHJp
bmdzKTsKKyAgICBtX3BhZ2VDbGllbnQtPnNob3dDb3JyZWN0aW9uUGFuZWwoKEFsdGVybmF0aXZl
VGV4dFR5cGUpcGFuZWxUeXBlLCBib3VuZGluZ0JveE9mUmVwbGFjZWRTdHJpbmcsIHJlcGxhY2Vk
U3RyaW5nLCByZXBsYWNlbWVudFN0cmluZywgYWx0ZXJuYXRpdmVSZXBsYWNlbWVudFN0cmluZ3Mp
OwogfQogCiB2b2lkIFdlYlBhZ2VQcm94eTo6ZGlzbWlzc0NvcnJlY3Rpb25QYW5lbChpbnQzMl90
IHJlYXNvbikKIHsKLSAgICBtX3BhZ2VDbGllbnQtPmRpc21pc3NDb3JyZWN0aW9uUGFuZWwoKFJl
YXNvbkZvckRpc21pc3NpbmdDb3JyZWN0aW9uUGFuZWwpcmVhc29uKTsKKyAgICBtX3BhZ2VDbGll
bnQtPmRpc21pc3NDb3JyZWN0aW9uUGFuZWwoKFJlYXNvbkZvckRpc21pc3NpbmdBbHRlcm5hdGl2
ZVRleHQpcmVhc29uKTsKIH0KIAogdm9pZCBXZWJQYWdlUHJveHk6OmRpc21pc3NDb3JyZWN0aW9u
UGFuZWxTb29uKGludDMyX3QgcmVhc29uLCBTdHJpbmcmIHJlc3VsdCkKIHsKLSAgICByZXN1bHQg
PSBtX3BhZ2VDbGllbnQtPmRpc21pc3NDb3JyZWN0aW9uUGFuZWxTb29uKChSZWFzb25Gb3JEaXNt
aXNzaW5nQ29ycmVjdGlvblBhbmVsKXJlYXNvbik7CisgICAgcmVzdWx0ID0gbV9wYWdlQ2xpZW50
LT5kaXNtaXNzQ29ycmVjdGlvblBhbmVsU29vbigoUmVhc29uRm9yRGlzbWlzc2luZ0FsdGVybmF0
aXZlVGV4dClyZWFzb24pOwogfQogCiB2b2lkIFdlYlBhZ2VQcm94eTo6cmVjb3JkQXV0b2NvcnJl
Y3Rpb25SZXNwb25zZShpbnQzMl90IHJlc3BvbnNlVHlwZSwgY29uc3QgU3RyaW5nJiByZXBsYWNl
ZFN0cmluZywgY29uc3QgU3RyaW5nJiByZXBsYWNlbWVudFN0cmluZykKQEAgLTM3MDgsMTEgKzM3
MDgsMTEgQEAgdm9pZCBXZWJQYWdlUHJveHk6OnJlY29yZEF1dG9jb3JyZWN0aW9uUgogfQogI2Vu
ZGlmIC8vICFkZWZpbmVkKEJVSUxESU5HX09OX1NOT1dfTEVPUEFSRCkKIAotdm9pZCBXZWJQYWdl
UHJveHk6OmhhbmRsZUNvcnJlY3Rpb25QYW5lbFJlc3VsdChjb25zdCBTdHJpbmcmIHJlc3VsdCkK
K3ZvaWQgV2ViUGFnZVByb3h5OjpoYW5kbGVBbHRlcm5hdGl2ZVRleHRVSVJlc3VsdChjb25zdCBT
dHJpbmcmIHJlc3VsdCkKIHsKICNpZiAhZGVmaW5lZChCVUlMRElOR19PTl9TTk9XX0xFT1BBUkQp
CiAgICAgaWYgKCFpc0Nsb3NlZCgpKQotICAgICAgICBwcm9jZXNzKCktPnNlbmQoTWVzc2FnZXM6
OldlYlBhZ2U6OkhhbmRsZUNvcnJlY3Rpb25QYW5lbFJlc3VsdChyZXN1bHQpLCBtX3BhZ2VJRCwg
MCk7CisgICAgICAgIHByb2Nlc3MoKS0+c2VuZChNZXNzYWdlczo6V2ViUGFnZTo6SGFuZGxlQWx0
ZXJuYXRpdmVUZXh0VUlSZXN1bHQocmVzdWx0KSwgbV9wYWdlSUQsIDApOwogI2VuZGlmCiB9CiAj
ZW5kaWYgLy8gUExBVEZPUk0oTUFDKQpJbmRleDogU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL1dl
YlBhZ2VQcm94eS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9XZWJQ
YWdlUHJveHkuaAkocmV2aXNpb24gMTEyOTE3KQorKysgU291cmNlL1dlYktpdDIvVUlQcm9jZXNz
L1dlYlBhZ2VQcm94eS5oCSh3b3JraW5nIGNvcHkpCkBAIC02MTEsNyArNjExLDcgQEAgcHVibGlj
OgogICAgIHZvaWQgZmxhc2hCYWNraW5nU3RvcmVVcGRhdGVzKGNvbnN0IFZlY3RvcjxXZWJDb3Jl
OjpJbnRSZWN0PiYgdXBkYXRlUmVjdHMpOwogCiAjaWYgUExBVEZPUk0oTUFDKQotICAgIHZvaWQg
aGFuZGxlQ29ycmVjdGlvblBhbmVsUmVzdWx0KGNvbnN0IFN0cmluZyYgcmVzdWx0KTsKKyAgICB2
b2lkIGhhbmRsZUFsdGVybmF0aXZlVGV4dFVJUmVzdWx0KGNvbnN0IFN0cmluZyYgcmVzdWx0KTsK
ICNlbmRpZgogCiAgICAgc3RhdGljIHZvaWQgc2V0RGVidWdQYWludEZsYWdzKFdLUGFnZURlYnVn
UGFpbnRGbGFncyBmbGFncykgeyBzX2RlYnVnUGFpbnRGbGFncyA9IGZsYWdzOyB9CkluZGV4OiBT
b3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL21hYy9QYWdlQ2xpZW50SW1wbC5oCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvbWFjL1BhZ2VDbGllbnRJbXBsLmgJ
KHJldmlzaW9uIDExMjkxNykKKysrIFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvbWFjL1Bh
Z2VDbGllbnRJbXBsLmgJKHdvcmtpbmcgY29weSkKQEAgLTEyMCw5ICsxMjAsOSBAQCBwcml2YXRl
OgogICAgIHZpcnR1YWwgdm9pZCBkaWRQZXJmb3JtRGljdGlvbmFyeUxvb2t1cChjb25zdCBTdHJp
bmcmLCBkb3VibGUgc2NhbGVGYWN0b3IsIGNvbnN0IERpY3Rpb25hcnlQb3B1cEluZm8mKTsKICAg
ICB2aXJ0dWFsIHZvaWQgZGlzbWlzc0RpY3Rpb25hcnlMb29rdXBQYW5lbCgpOwogCi0gICAgdmly
dHVhbCB2b2lkIHNob3dDb3JyZWN0aW9uUGFuZWwoV2ViQ29yZTo6Q29ycmVjdGlvblBhbmVsSW5m
bzo6UGFuZWxUeXBlLCBjb25zdCBXZWJDb3JlOjpGbG9hdFJlY3QmIGJvdW5kaW5nQm94T2ZSZXBs
YWNlZFN0cmluZywgY29uc3QgU3RyaW5nJiByZXBsYWNlZFN0cmluZywgY29uc3QgU3RyaW5nJiBy
ZXBsYWNlbWVudFN0cmluZywgY29uc3QgVmVjdG9yPFN0cmluZz4mIGFsdGVybmF0aXZlUmVwbGFj
ZW1lbnRTdHJpbmdzKTsKLSAgICB2aXJ0dWFsIHZvaWQgZGlzbWlzc0NvcnJlY3Rpb25QYW5lbChX
ZWJDb3JlOjpSZWFzb25Gb3JEaXNtaXNzaW5nQ29ycmVjdGlvblBhbmVsKTsKLSAgICB2aXJ0dWFs
IFN0cmluZyBkaXNtaXNzQ29ycmVjdGlvblBhbmVsU29vbihXZWJDb3JlOjpSZWFzb25Gb3JEaXNt
aXNzaW5nQ29ycmVjdGlvblBhbmVsKTsKKyAgICB2aXJ0dWFsIHZvaWQgc2hvd0NvcnJlY3Rpb25Q
YW5lbChXZWJDb3JlOjpBbHRlcm5hdGl2ZVRleHRUeXBlLCBjb25zdCBXZWJDb3JlOjpGbG9hdFJl
Y3QmIGJvdW5kaW5nQm94T2ZSZXBsYWNlZFN0cmluZywgY29uc3QgU3RyaW5nJiByZXBsYWNlZFN0
cmluZywgY29uc3QgU3RyaW5nJiByZXBsYWNlbWVudFN0cmluZywgY29uc3QgVmVjdG9yPFN0cmlu
Zz4mIGFsdGVybmF0aXZlUmVwbGFjZW1lbnRTdHJpbmdzKTsKKyAgICB2aXJ0dWFsIHZvaWQgZGlz
bWlzc0NvcnJlY3Rpb25QYW5lbChXZWJDb3JlOjpSZWFzb25Gb3JEaXNtaXNzaW5nQWx0ZXJuYXRp
dmVUZXh0KTsKKyAgICB2aXJ0dWFsIFN0cmluZyBkaXNtaXNzQ29ycmVjdGlvblBhbmVsU29vbihX
ZWJDb3JlOjpSZWFzb25Gb3JEaXNtaXNzaW5nQWx0ZXJuYXRpdmVUZXh0KTsKICAgICB2aXJ0dWFs
IHZvaWQgcmVjb3JkQXV0b2NvcnJlY3Rpb25SZXNwb25zZShXZWJDb3JlOjpFZGl0b3JDbGllbnQ6
OkF1dG9jb3JyZWN0aW9uUmVzcG9uc2VUeXBlLCBjb25zdCBTdHJpbmcmIHJlcGxhY2VkU3RyaW5n
LCBjb25zdCBTdHJpbmcmIHJlcGxhY2VtZW50U3RyaW5nKTsKIAogICAgIHZpcnR1YWwgdm9pZCBy
ZWNvbW1lbmRlZFNjcm9sbGJhclN0eWxlRGlkQ2hhbmdlKGludDMyX3QgbmV3U3R5bGUpOwpJbmRl
eDogU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9tYWMvUGFnZUNsaWVudEltcGwubW0KPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9tYWMvUGFnZUNsaWVudElt
cGwubW0JKHJldmlzaW9uIDExMjkxNykKKysrIFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkv
bWFjL1BhZ2VDbGllbnRJbXBsLm1tCSh3b3JraW5nIGNvcHkpCkBAIC00NjMsNyArNDYzLDcgQEAg
dm9pZCBQYWdlQ2xpZW50SW1wbDo6ZGlzbWlzc0RpY3Rpb25hcnlMbwogI2VuZGlmCiB9CiAKLXZv
aWQgUGFnZUNsaWVudEltcGw6OnNob3dDb3JyZWN0aW9uUGFuZWwoQ29ycmVjdGlvblBhbmVsSW5m
bzo6UGFuZWxUeXBlIHR5cGUsIGNvbnN0IEZsb2F0UmVjdCYgYm91bmRpbmdCb3hPZlJlcGxhY2Vk
U3RyaW5nLCBjb25zdCBTdHJpbmcmIHJlcGxhY2VkU3RyaW5nLCBjb25zdCBTdHJpbmcmIHJlcGxh
Y2VtZW50U3RyaW5nLCBjb25zdCBWZWN0b3I8U3RyaW5nPiYgYWx0ZXJuYXRpdmVSZXBsYWNlbWVu
dFN0cmluZ3MpCit2b2lkIFBhZ2VDbGllbnRJbXBsOjpzaG93Q29ycmVjdGlvblBhbmVsKEFsdGVy
bmF0aXZlVGV4dFR5cGUgdHlwZSwgY29uc3QgRmxvYXRSZWN0JiBib3VuZGluZ0JveE9mUmVwbGFj
ZWRTdHJpbmcsIGNvbnN0IFN0cmluZyYgcmVwbGFjZWRTdHJpbmcsIGNvbnN0IFN0cmluZyYgcmVw
bGFjZW1lbnRTdHJpbmcsIGNvbnN0IFZlY3RvcjxTdHJpbmc+JiBhbHRlcm5hdGl2ZVJlcGxhY2Vt
ZW50U3RyaW5ncykKIHsKICNpZiAhZGVmaW5lZChCVUlMRElOR19PTl9TTk9XX0xFT1BBUkQpCiAg
ICAgaWYgKCFpc1ZpZXdWaXNpYmxlKCkgfHwgIWlzVmlld0luV2luZG93KCkpCkBAIC00NzIsMTQg
KzQ3MiwxNCBAQCB2b2lkIFBhZ2VDbGllbnRJbXBsOjpzaG93Q29ycmVjdGlvblBhbmVsCiAjZW5k
aWYKIH0KIAotdm9pZCBQYWdlQ2xpZW50SW1wbDo6ZGlzbWlzc0NvcnJlY3Rpb25QYW5lbChSZWFz
b25Gb3JEaXNtaXNzaW5nQ29ycmVjdGlvblBhbmVsIHJlYXNvbikKK3ZvaWQgUGFnZUNsaWVudElt
cGw6OmRpc21pc3NDb3JyZWN0aW9uUGFuZWwoUmVhc29uRm9yRGlzbWlzc2luZ0FsdGVybmF0aXZl
VGV4dCByZWFzb24pCiB7CiAjaWYgIWRlZmluZWQoQlVJTERJTkdfT05fU05PV19MRU9QQVJEKQog
ICAgIG1fY29ycmVjdGlvblBhbmVsLmRpc21pc3MocmVhc29uKTsKICNlbmRpZgogfQogCi1TdHJp
bmcgUGFnZUNsaWVudEltcGw6OmRpc21pc3NDb3JyZWN0aW9uUGFuZWxTb29uKFdlYkNvcmU6OlJl
YXNvbkZvckRpc21pc3NpbmdDb3JyZWN0aW9uUGFuZWwgcmVhc29uKQorU3RyaW5nIFBhZ2VDbGll
bnRJbXBsOjpkaXNtaXNzQ29ycmVjdGlvblBhbmVsU29vbihXZWJDb3JlOjpSZWFzb25Gb3JEaXNt
aXNzaW5nQWx0ZXJuYXRpdmVUZXh0IHJlYXNvbikKIHsKICNpZiAhZGVmaW5lZChCVUlMRElOR19P
Tl9TTk9XX0xFT1BBUkQpCiAgICAgcmV0dXJuIG1fY29ycmVjdGlvblBhbmVsLmRpc21pc3MocmVh
c29uKTsKSW5kZXg6IFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvbWFjL1dLVmlldy5tbQo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL21hYy9XS1ZpZXcubW0J
KHJldmlzaW9uIDExMjkxNykKKysrIFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvbWFjL1dL
Vmlldy5tbQkod29ya2luZyBjb3B5KQpAQCAtMjg1Miw3ICsyODUyLDcgQEAgLSAoTlNJbnRlZ2Vy
KXNwZWxsQ2hlY2tlckRvY3VtZW50VGFnCiAKIC0gKHZvaWQpaGFuZGxlQ29ycmVjdGlvblBhbmVs
UmVzdWx0OihOU1N0cmluZyopcmVzdWx0CiB7Ci0gICAgX2RhdGEtPl9wYWdlLT5oYW5kbGVDb3Jy
ZWN0aW9uUGFuZWxSZXN1bHQocmVzdWx0KTsKKyAgICBfZGF0YS0+X3BhZ2UtPmhhbmRsZUFsdGVy
bmF0aXZlVGV4dFVJUmVzdWx0KHJlc3VsdCk7CiB9CiAKIEBlbmQKSW5kZXg6IFNvdXJjZS9XZWJL
aXQyL1VJUHJvY2Vzcy9tYWMvQ29ycmVjdGlvblBhbmVsLmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1dlYktpdDIvVUlQcm9jZXNzL21hYy9Db3JyZWN0aW9uUGFuZWwuaAkocmV2aXNpb24gMTEyOTE3
KQorKysgU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL21hYy9Db3JyZWN0aW9uUGFuZWwuaAkod29y
a2luZyBjb3B5KQpAQCAtMjgsNyArMjgsNyBAQAogCiAjaWYgIWRlZmluZWQoQlVJTERJTkdfT05f
U05PV19MRU9QQVJEKQogI2ltcG9ydCA8QXBwS2l0L05TU3BlbGxDaGVja2VyLmg+Ci0jaW1wb3J0
IDxXZWJDb3JlL1NwZWxsaW5nQ29ycmVjdGlvbkNvbnRyb2xsZXIuaD4KKyNpbXBvcnQgPFdlYkNv
cmUvQWx0ZXJuYXRpdmVUZXh0Q29udHJvbGxlci5oPgogI2ltcG9ydCA8d3RmL1JldGFpblB0ci5o
PgogCiBAY2xhc3MgV0tWaWV3OwpAQCAtMzksMTcgKzM5LDE3IEBAIGNsYXNzIENvcnJlY3Rpb25Q
YW5lbCB7CiBwdWJsaWM6CiAgICAgQ29ycmVjdGlvblBhbmVsKCk7CiAgICAgfkNvcnJlY3Rpb25Q
YW5lbCgpOwotICAgIHZvaWQgc2hvdyhXS1ZpZXcqLCBXZWJDb3JlOjpDb3JyZWN0aW9uUGFuZWxJ
bmZvOjpQYW5lbFR5cGUsIGNvbnN0IFdlYkNvcmU6OkZsb2F0UmVjdCYgYm91bmRpbmdCb3hPZlJl
cGxhY2VkU3RyaW5nLCBjb25zdCBTdHJpbmcmIHJlcGxhY2VkU3RyaW5nLCBjb25zdCBTdHJpbmcm
IHJlcGxhY2VtZW50U3RyaW5nLCBjb25zdCBWZWN0b3I8U3RyaW5nPiYgYWx0ZXJuYXRpdmVSZXBs
YWNlbWVudFN0cmluZ3MpOwotICAgIFN0cmluZyBkaXNtaXNzKFdlYkNvcmU6OlJlYXNvbkZvckRp
c21pc3NpbmdDb3JyZWN0aW9uUGFuZWwpOworICAgIHZvaWQgc2hvdyhXS1ZpZXcqLCBXZWJDb3Jl
OjpBbHRlcm5hdGl2ZVRleHRUeXBlLCBjb25zdCBXZWJDb3JlOjpGbG9hdFJlY3QmIGJvdW5kaW5n
Qm94T2ZSZXBsYWNlZFN0cmluZywgY29uc3QgU3RyaW5nJiByZXBsYWNlZFN0cmluZywgY29uc3Qg
U3RyaW5nJiByZXBsYWNlbWVudFN0cmluZywgY29uc3QgVmVjdG9yPFN0cmluZz4mIGFsdGVybmF0
aXZlUmVwbGFjZW1lbnRTdHJpbmdzKTsKKyAgICBTdHJpbmcgZGlzbWlzcyhXZWJDb3JlOjpSZWFz
b25Gb3JEaXNtaXNzaW5nQWx0ZXJuYXRpdmVUZXh0KTsKICAgICBzdGF0aWMgdm9pZCByZWNvcmRB
dXRvY29ycmVjdGlvblJlc3BvbnNlKFdLVmlldyosIE5TQ29ycmVjdGlvblJlc3BvbnNlLCBjb25z
dCBTdHJpbmcmIHJlcGxhY2VkU3RyaW5nLCBjb25zdCBTdHJpbmcmIHJlcGxhY2VtZW50U3RyaW5n
KTsKIAogcHJpdmF0ZToKICAgICBib29sIGlzU2hvd2luZygpIGNvbnN0IHsgcmV0dXJuIG1fdmll
dzsgfQotICAgIFN0cmluZyBkaXNtaXNzSW50ZXJuYWwoV2ViQ29yZTo6UmVhc29uRm9yRGlzbWlz
c2luZ0NvcnJlY3Rpb25QYW5lbCwgYm9vbCBkaXNtaXNzaW5nRXh0ZXJuYWxseSk7CisgICAgU3Ry
aW5nIGRpc21pc3NJbnRlcm5hbChXZWJDb3JlOjpSZWFzb25Gb3JEaXNtaXNzaW5nQWx0ZXJuYXRp
dmVUZXh0LCBib29sIGRpc21pc3NpbmdFeHRlcm5hbGx5KTsKICAgICB2b2lkIGhhbmRsZUFjY2Vw
dGVkUmVwbGFjZW1lbnQoTlNTdHJpbmcqIGFjY2VwdGVkUmVwbGFjZW1lbnQsIE5TU3RyaW5nKiBy
ZXBsYWNlZCwgTlNTdHJpbmcqIHByb3Bvc2VkUmVwbGFjZW1lbnQsIE5TQ29ycmVjdGlvbkluZGlj
YXRvclR5cGUpOwogCiAgICAgYm9vbCBtX3dhc0Rpc21pc3NlZEV4dGVybmFsbHk7Ci0gICAgV2Vi
Q29yZTo6UmVhc29uRm9yRGlzbWlzc2luZ0NvcnJlY3Rpb25QYW5lbCBtX3JlYXNvbkZvckRpc21p
c3Npbmc7CisgICAgV2ViQ29yZTo6UmVhc29uRm9yRGlzbWlzc2luZ0FsdGVybmF0aXZlVGV4dCBt
X3JlYXNvbkZvckRpc21pc3Npbmc7CiAgICAgUmV0YWluUHRyPFdLVmlldz4gbV92aWV3OwogICAg
IFJldGFpblB0cjxOU1N0cmluZz4gbV9yZXN1bHRGb3JEaXNtaXNzYWw7CiB9OwpJbmRleDogU291
cmNlL1dlYktpdDIvVUlQcm9jZXNzL21hYy9Db3JyZWN0aW9uUGFuZWwubW0KPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL21hYy9Db3JyZWN0aW9uUGFuZWwubW0JKHJldmlz
aW9uIDExMjkxNykKKysrIFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9tYWMvQ29ycmVjdGlvblBh
bmVsLm1tCSh3b3JraW5nIGNvcHkpCkBAIC0zMywxNCArMzMsMTQgQEAKIAogdXNpbmcgbmFtZXNw
YWNlIFdlYkNvcmU7CiAKLXN0YXRpYyBpbmxpbmUgTlNDb3JyZWN0aW9uSW5kaWNhdG9yVHlwZSBj
b3JyZWN0aW9uSW5kaWNhdG9yVHlwZShDb3JyZWN0aW9uUGFuZWxJbmZvOjpQYW5lbFR5cGUgcGFu
ZWxUeXBlKQorc3RhdGljIGlubGluZSBOU0NvcnJlY3Rpb25JbmRpY2F0b3JUeXBlIGNvcnJlY3Rp
b25JbmRpY2F0b3JUeXBlKEFsdGVybmF0aXZlVGV4dFR5cGUgYWx0ZXJuYXRpdmVUZXh0VHlwZSkK
IHsKLSAgICBzd2l0Y2ggKHBhbmVsVHlwZSkgewotICAgIGNhc2UgQ29ycmVjdGlvblBhbmVsSW5m
bzo6UGFuZWxUeXBlQ29ycmVjdGlvbjoKKyAgICBzd2l0Y2ggKGFsdGVybmF0aXZlVGV4dFR5cGUp
IHsKKyAgICBjYXNlIEFsdGVybmF0aXZlVGV4dFR5cGVDb3JyZWN0aW9uOgogICAgICAgICByZXR1
cm4gTlNDb3JyZWN0aW9uSW5kaWNhdG9yVHlwZURlZmF1bHQ7Ci0gICAgY2FzZSBDb3JyZWN0aW9u
UGFuZWxJbmZvOjpQYW5lbFR5cGVSZXZlcnNpb246CisgICAgY2FzZSBBbHRlcm5hdGl2ZVRleHRU
eXBlUmV2ZXJzaW9uOgogICAgICAgICByZXR1cm4gTlNDb3JyZWN0aW9uSW5kaWNhdG9yVHlwZVJl
dmVyc2lvbjsKLSAgICBjYXNlIENvcnJlY3Rpb25QYW5lbEluZm86OlBhbmVsVHlwZVNwZWxsaW5n
U3VnZ2VzdGlvbnM6CisgICAgY2FzZSBBbHRlcm5hdGl2ZVRleHRUeXBlU3BlbGxpbmdTdWdnZXN0
aW9uczoKICAgICAgICAgcmV0dXJuIE5TQ29ycmVjdGlvbkluZGljYXRvclR5cGVHdWVzc2VzOwog
ICAgIH0KICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKQEAgLTUxLDE4ICs1MSwxOCBAQCBuYW1l
c3BhY2UgV2ViS2l0IHsKIAogQ29ycmVjdGlvblBhbmVsOjpDb3JyZWN0aW9uUGFuZWwoKQogICAg
IDogbV93YXNEaXNtaXNzZWRFeHRlcm5hbGx5KGZhbHNlKQotICAgICwgbV9yZWFzb25Gb3JEaXNt
aXNzaW5nKFJlYXNvbkZvckRpc21pc3NpbmdDb3JyZWN0aW9uUGFuZWxJZ25vcmVkKQorICAgICwg
bV9yZWFzb25Gb3JEaXNtaXNzaW5nKFJlYXNvbkZvckRpc21pc3NpbmdBbHRlcm5hdGl2ZVRleHRJ
Z25vcmVkKQogewogfQogCiBDb3JyZWN0aW9uUGFuZWw6On5Db3JyZWN0aW9uUGFuZWwoKQogewot
ICAgIGRpc21pc3NJbnRlcm5hbChSZWFzb25Gb3JEaXNtaXNzaW5nQ29ycmVjdGlvblBhbmVsSWdu
b3JlZCwgZmFsc2UpOworICAgIGRpc21pc3NJbnRlcm5hbChSZWFzb25Gb3JEaXNtaXNzaW5nQWx0
ZXJuYXRpdmVUZXh0SWdub3JlZCwgZmFsc2UpOwogfQogCi12b2lkIENvcnJlY3Rpb25QYW5lbDo6
c2hvdyhXS1ZpZXcqIHZpZXcsIENvcnJlY3Rpb25QYW5lbEluZm86OlBhbmVsVHlwZSB0eXBlLCBj
b25zdCBGbG9hdFJlY3QmIGJvdW5kaW5nQm94T2ZSZXBsYWNlZFN0cmluZywgY29uc3QgU3RyaW5n
JiByZXBsYWNlZFN0cmluZywgY29uc3QgU3RyaW5nJiByZXBsYWNlbWVudFN0cmluZywgY29uc3Qg
VmVjdG9yPFN0cmluZz4mIGFsdGVybmF0aXZlUmVwbGFjZW1lbnRTdHJpbmdzKQordm9pZCBDb3Jy
ZWN0aW9uUGFuZWw6OnNob3coV0tWaWV3KiB2aWV3LCBBbHRlcm5hdGl2ZVRleHRUeXBlIHR5cGUs
IGNvbnN0IEZsb2F0UmVjdCYgYm91bmRpbmdCb3hPZlJlcGxhY2VkU3RyaW5nLCBjb25zdCBTdHJp
bmcmIHJlcGxhY2VkU3RyaW5nLCBjb25zdCBTdHJpbmcmIHJlcGxhY2VtZW50U3RyaW5nLCBjb25z
dCBWZWN0b3I8U3RyaW5nPiYgYWx0ZXJuYXRpdmVSZXBsYWNlbWVudFN0cmluZ3MpCiB7Ci0gICAg
ZGlzbWlzc0ludGVybmFsKFJlYXNvbkZvckRpc21pc3NpbmdDb3JyZWN0aW9uUGFuZWxJZ25vcmVk
LCBmYWxzZSk7CisgICAgZGlzbWlzc0ludGVybmFsKFJlYXNvbkZvckRpc21pc3NpbmdBbHRlcm5h
dGl2ZVRleHRJZ25vcmVkLCBmYWxzZSk7CiAgICAgCiAgICAgaWYgKCF2aWV3KQogICAgICAgICBy
ZXR1cm47CkBAIC04NiwxMiArODYsMTIgQEAgdm9pZCBDb3JyZWN0aW9uUGFuZWw6OnNob3coV0tW
aWV3KiB2aWV3LAogICAgIH1dOwogfQogCi1TdHJpbmcgQ29ycmVjdGlvblBhbmVsOjpkaXNtaXNz
KFJlYXNvbkZvckRpc21pc3NpbmdDb3JyZWN0aW9uUGFuZWwgcmVhc29uKQorU3RyaW5nIENvcnJl
Y3Rpb25QYW5lbDo6ZGlzbWlzcyhSZWFzb25Gb3JEaXNtaXNzaW5nQWx0ZXJuYXRpdmVUZXh0IHJl
YXNvbikKIHsKICAgICByZXR1cm4gZGlzbWlzc0ludGVybmFsKHJlYXNvbiwgdHJ1ZSk7CiB9CiAK
LVN0cmluZyBDb3JyZWN0aW9uUGFuZWw6OmRpc21pc3NJbnRlcm5hbChSZWFzb25Gb3JEaXNtaXNz
aW5nQ29ycmVjdGlvblBhbmVsIHJlYXNvbiwgYm9vbCBkaXNtaXNzaW5nRXh0ZXJuYWxseSkKK1N0
cmluZyBDb3JyZWN0aW9uUGFuZWw6OmRpc21pc3NJbnRlcm5hbChSZWFzb25Gb3JEaXNtaXNzaW5n
QWx0ZXJuYXRpdmVUZXh0IHJlYXNvbiwgYm9vbCBkaXNtaXNzaW5nRXh0ZXJuYWxseSkKIHsKICAg
ICBpZiAoIWlzU2hvd2luZygpKQogICAgICAgICByZXR1cm4gU3RyaW5nKCk7CkBAIC0xMjEsNyAr
MTIxLDcgQEAgdm9pZCBDb3JyZWN0aW9uUGFuZWw6OmhhbmRsZUFjY2VwdGVkUmVwbAogICAgICAg
ICBpZiAoYWNjZXB0ZWRSZXBsYWNlbWVudCkKICAgICAgICAgICAgIFtzcGVsbENoZWNrZXIgcmVj
b3JkUmVzcG9uc2U6TlNDb3JyZWN0aW9uUmVzcG9uc2VBY2NlcHRlZCB0b0NvcnJlY3Rpb246YWNj
ZXB0ZWRSZXBsYWNlbWVudCBmb3JXb3JkOnJlcGxhY2VkIGxhbmd1YWdlOm5pbCBpblNwZWxsRG9j
dW1lbnRXaXRoVGFnOmRvY3VtZW50VGFnXTsKICAgICAgICAgZWxzZSB7Ci0gICAgICAgICAgICBp
ZiAoIW1fd2FzRGlzbWlzc2VkRXh0ZXJuYWxseSB8fCBtX3JlYXNvbkZvckRpc21pc3NpbmcgPT0g
UmVhc29uRm9yRGlzbWlzc2luZ0NvcnJlY3Rpb25QYW5lbENhbmNlbGxlZCkKKyAgICAgICAgICAg
IGlmICghbV93YXNEaXNtaXNzZWRFeHRlcm5hbGx5IHx8IG1fcmVhc29uRm9yRGlzbWlzc2luZyA9
PSBSZWFzb25Gb3JEaXNtaXNzaW5nQWx0ZXJuYXRpdmVUZXh0Q2FuY2VsbGVkKQogICAgICAgICAg
ICAgICAgIFtzcGVsbENoZWNrZXIgcmVjb3JkUmVzcG9uc2U6TlNDb3JyZWN0aW9uUmVzcG9uc2VS
ZWplY3RlZCB0b0NvcnJlY3Rpb246cHJvcG9zZWRSZXBsYWNlbWVudCBmb3JXb3JkOnJlcGxhY2Vk
IGxhbmd1YWdlOm5pbCBpblNwZWxsRG9jdW1lbnRXaXRoVGFnOmRvY3VtZW50VGFnXTsKICAgICAg
ICAgICAgIGVsc2UKICAgICAgICAgICAgICAgICBbc3BlbGxDaGVja2VyIHJlY29yZFJlc3BvbnNl
Ok5TQ29ycmVjdGlvblJlc3BvbnNlSWdub3JlZCB0b0NvcnJlY3Rpb246cHJvcG9zZWRSZXBsYWNl
bWVudCBmb3JXb3JkOnJlcGxhY2VkIGxhbmd1YWdlOm5pbCBpblNwZWxsRG9jdW1lbnRXaXRoVGFn
OmRvY3VtZW50VGFnXTsKSW5kZXg6IFNvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViQ29yZVN1
cHBvcnQvV2ViRWRpdG9yQ2xpZW50LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdDIvV2Vi
UHJvY2Vzcy9XZWJDb3JlU3VwcG9ydC9XZWJFZGl0b3JDbGllbnQuaAkocmV2aXNpb24gMTEyOTE3
KQorKysgU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJDb3JlU3VwcG9ydC9XZWJFZGl0b3JD
bGllbnQuaAkod29ya2luZyBjb3B5KQpAQCAtMTQzLDkgKzE0Myw5IEBAIHByaXZhdGU6CiAgICAg
dmlydHVhbCB2b2lkIHNldElucHV0TWV0aG9kU3RhdGUoYm9vbCBlbmFibGVkKSBPVkVSUklERTsK
ICAgICB2aXJ0dWFsIHZvaWQgcmVxdWVzdENoZWNraW5nT2ZTdHJpbmcoV2ViQ29yZTo6U3BlbGxD
aGVja2VyKiwgY29uc3QgV2ViQ29yZTo6VGV4dENoZWNraW5nUmVxdWVzdCYpIE9WRVJSSURFOwog
I2lmIFBMQVRGT1JNKE1BQykgJiYgIWRlZmluZWQoQlVJTERJTkdfT05fU05PV19MRU9QQVJEKQot
ICAgIHZpcnR1YWwgdm9pZCBzaG93Q29ycmVjdGlvblBhbmVsKFdlYkNvcmU6OkNvcnJlY3Rpb25Q
YW5lbEluZm86OlBhbmVsVHlwZSwgY29uc3QgV2ViQ29yZTo6RmxvYXRSZWN0JiBib3VuZGluZ0Jv
eE9mUmVwbGFjZWRTdHJpbmcsIGNvbnN0IFN0cmluZyYgcmVwbGFjZWRTdHJpbmcsIGNvbnN0IFN0
cmluZyYgcmVwbGFjZW1lbnRTdHJpbmcsIGNvbnN0IFZlY3RvcjxTdHJpbmc+JiBhbHRlcm5hdGl2
ZVJlcGxhY2VtZW50U3RyaW5ncykgT1ZFUlJJREU7Ci0gICAgdmlydHVhbCB2b2lkIGRpc21pc3ND
b3JyZWN0aW9uUGFuZWwoV2ViQ29yZTo6UmVhc29uRm9yRGlzbWlzc2luZ0NvcnJlY3Rpb25QYW5l
bCkgT1ZFUlJJREU7Ci0gICAgdmlydHVhbCBTdHJpbmcgZGlzbWlzc0NvcnJlY3Rpb25QYW5lbFNv
b24oV2ViQ29yZTo6UmVhc29uRm9yRGlzbWlzc2luZ0NvcnJlY3Rpb25QYW5lbCkgT1ZFUlJJREU7
CisgICAgdmlydHVhbCB2b2lkIHNob3dDb3JyZWN0aW9uUGFuZWwoV2ViQ29yZTo6QWx0ZXJuYXRp
dmVUZXh0VHlwZSwgY29uc3QgV2ViQ29yZTo6RmxvYXRSZWN0JiBib3VuZGluZ0JveE9mUmVwbGFj
ZWRTdHJpbmcsIGNvbnN0IFN0cmluZyYgcmVwbGFjZWRTdHJpbmcsIGNvbnN0IFN0cmluZyYgcmVw
bGFjZW1lbnRTdHJpbmcsIGNvbnN0IFZlY3RvcjxTdHJpbmc+JiBhbHRlcm5hdGl2ZVJlcGxhY2Vt
ZW50U3RyaW5ncykgT1ZFUlJJREU7CisgICAgdmlydHVhbCB2b2lkIGRpc21pc3NDb3JyZWN0aW9u
UGFuZWwoV2ViQ29yZTo6UmVhc29uRm9yRGlzbWlzc2luZ0FsdGVybmF0aXZlVGV4dCkgT1ZFUlJJ
REU7CisgICAgdmlydHVhbCBTdHJpbmcgZGlzbWlzc0NvcnJlY3Rpb25QYW5lbFNvb24oV2ViQ29y
ZTo6UmVhc29uRm9yRGlzbWlzc2luZ0FsdGVybmF0aXZlVGV4dCkgT1ZFUlJJREU7CiAgICAgdmly
dHVhbCB2b2lkIHJlY29yZEF1dG9jb3JyZWN0aW9uUmVzcG9uc2UoQXV0b2NvcnJlY3Rpb25SZXNw
b25zZVR5cGUsIGNvbnN0IFN0cmluZyYgcmVwbGFjZWRTdHJpbmcsIGNvbnN0IFN0cmluZyYgcmVw
bGFjZW1lbnRTdHJpbmcpIE9WRVJSSURFOwogI2VuZGlmCiAjaWYgUExBVEZPUk0oR1RLKQpJbmRl
eDogU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJDb3JlU3VwcG9ydC9tYWMvV2ViRWRpdG9y
Q2xpZW50TWFjLm1tCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2Vi
Q29yZVN1cHBvcnQvbWFjL1dlYkVkaXRvckNsaWVudE1hYy5tbQkocmV2aXNpb24gMTEyOTE3KQor
KysgU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJDb3JlU3VwcG9ydC9tYWMvV2ViRWRpdG9y
Q2xpZW50TWFjLm1tCSh3b3JraW5nIGNvcHkpCkBAIC0yMzksMTcgKzIzOSwxNyBAQCB2b2lkIFdl
YkVkaXRvckNsaWVudDo6Y2hlY2tUZXh0T2ZQYXJhZ3JhCiB9CiAKICNpZiAhZGVmaW5lZChCVUlM
RElOR19PTl9TTk9XX0xFT1BBUkQpCi12b2lkIFdlYkVkaXRvckNsaWVudDo6c2hvd0NvcnJlY3Rp
b25QYW5lbChXZWJDb3JlOjpDb3JyZWN0aW9uUGFuZWxJbmZvOjpQYW5lbFR5cGUgdHlwZSwgY29u
c3QgV2ViQ29yZTo6RmxvYXRSZWN0JiBib3VuZGluZ0JveE9mUmVwbGFjZWRTdHJpbmcsIGNvbnN0
IFN0cmluZyYgcmVwbGFjZWRTdHJpbmcsIGNvbnN0IFN0cmluZyYgcmVwbGFjZW1lbnRTdHJpbmcs
IGNvbnN0IFZlY3RvcjxTdHJpbmc+JiBhbHRlcm5hdGl2ZVJlcGxhY2VtZW50U3RyaW5ncykKK3Zv
aWQgV2ViRWRpdG9yQ2xpZW50OjpzaG93Q29ycmVjdGlvblBhbmVsKFdlYkNvcmU6OkFsdGVybmF0
aXZlVGV4dFR5cGUgdHlwZSwgY29uc3QgV2ViQ29yZTo6RmxvYXRSZWN0JiBib3VuZGluZ0JveE9m
UmVwbGFjZWRTdHJpbmcsIGNvbnN0IFN0cmluZyYgcmVwbGFjZWRTdHJpbmcsIGNvbnN0IFN0cmlu
ZyYgcmVwbGFjZW1lbnRTdHJpbmcsIGNvbnN0IFZlY3RvcjxTdHJpbmc+JiBhbHRlcm5hdGl2ZVJl
cGxhY2VtZW50U3RyaW5ncykKIHsKICAgICBtX3BhZ2UtPnNlbmQoTWVzc2FnZXM6OldlYlBhZ2VQ
cm94eTo6U2hvd0NvcnJlY3Rpb25QYW5lbCh0eXBlLCBib3VuZGluZ0JveE9mUmVwbGFjZWRTdHJp
bmcsIHJlcGxhY2VkU3RyaW5nLCByZXBsYWNlbWVudFN0cmluZywgYWx0ZXJuYXRpdmVSZXBsYWNl
bWVudFN0cmluZ3MpKTsKIH0KIAotdm9pZCBXZWJFZGl0b3JDbGllbnQ6OmRpc21pc3NDb3JyZWN0
aW9uUGFuZWwoV2ViQ29yZTo6UmVhc29uRm9yRGlzbWlzc2luZ0NvcnJlY3Rpb25QYW5lbCByZWFz
b24pCit2b2lkIFdlYkVkaXRvckNsaWVudDo6ZGlzbWlzc0NvcnJlY3Rpb25QYW5lbChXZWJDb3Jl
OjpSZWFzb25Gb3JEaXNtaXNzaW5nQWx0ZXJuYXRpdmVUZXh0IHJlYXNvbikKIHsKICAgICBtX3Bh
Z2UtPnNlbmQoTWVzc2FnZXM6OldlYlBhZ2VQcm94eTo6RGlzbWlzc0NvcnJlY3Rpb25QYW5lbChy
ZWFzb24pKTsKIH0KIAotU3RyaW5nIFdlYkVkaXRvckNsaWVudDo6ZGlzbWlzc0NvcnJlY3Rpb25Q
YW5lbFNvb24oV2ViQ29yZTo6UmVhc29uRm9yRGlzbWlzc2luZ0NvcnJlY3Rpb25QYW5lbCByZWFz
b24pCitTdHJpbmcgV2ViRWRpdG9yQ2xpZW50OjpkaXNtaXNzQ29ycmVjdGlvblBhbmVsU29vbihX
ZWJDb3JlOjpSZWFzb25Gb3JEaXNtaXNzaW5nQWx0ZXJuYXRpdmVUZXh0IHJlYXNvbikKIHsKICAg
ICBTdHJpbmcgcmVzdWx0OwogICAgIG1fcGFnZS0+c2VuZFN5bmMoTWVzc2FnZXM6OldlYlBhZ2VQ
cm94eTo6RGlzbWlzc0NvcnJlY3Rpb25QYW5lbFNvb24ocmVhc29uKSwgTWVzc2FnZXM6OldlYlBh
Z2VQcm94eTo6RGlzbWlzc0NvcnJlY3Rpb25QYW5lbFNvb246OlJlcGx5KHJlc3VsdCkpOwpJbmRl
eDogU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL1dlYlBhZ2UuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9XZWJQYWdlLmNwcAkocmV2
aXNpb24gMTEyOTE3KQorKysgU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL1dlYlBh
Z2UuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMDIwLDEyICszMDIwLDEyIEBAIGJvb2wgV2ViUGFn
ZTo6Y2FuSGFuZGxlUmVxdWVzdChjb25zdCBXZWIKIH0KIAogI2lmIFBMQVRGT1JNKE1BQykgJiYg
IWRlZmluZWQoQlVJTERJTkdfT05fU05PV19MRU9QQVJEKQotdm9pZCBXZWJQYWdlOjpoYW5kbGVD
b3JyZWN0aW9uUGFuZWxSZXN1bHQoY29uc3QgU3RyaW5nJiByZXN1bHQpCit2b2lkIFdlYlBhZ2U6
OmhhbmRsZUFsdGVybmF0aXZlVGV4dFVJUmVzdWx0KGNvbnN0IFN0cmluZyYgcmVzdWx0KQogewog
ICAgIEZyYW1lKiBmcmFtZSA9IG1fcGFnZS0+Zm9jdXNDb250cm9sbGVyKCktPmZvY3VzZWRPck1h
aW5GcmFtZSgpOwogICAgIGlmICghZnJhbWUpCiAgICAgICAgIHJldHVybjsKLSAgICBmcmFtZS0+
ZWRpdG9yKCktPmhhbmRsZUNvcnJlY3Rpb25QYW5lbFJlc3VsdChyZXN1bHQpOworICAgIGZyYW1l
LT5lZGl0b3IoKS0+aGFuZGxlQWx0ZXJuYXRpdmVUZXh0VUlSZXN1bHQocmVzdWx0KTsKIH0KICNl
bmRpZgogCkluZGV4OiBTb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvV2ViUGFnZS5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9XZWJQYWdl
LmgJKHJldmlzaW9uIDExMjkxNykKKysrIFNvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFn
ZS9XZWJQYWdlLmgJKHdvcmtpbmcgY29weSkKQEAgLTQ4Nyw3ICs0ODcsNyBAQCBwdWJsaWM6CiAg
ICAgdm9pZCB1bm1hcmtBbGxCYWRHcmFtbWFyKCk7CiAKICNpZiBQTEFURk9STShNQUMpICYmICFk
ZWZpbmVkKEJVSUxESU5HX09OX1NOT1dfTEVPUEFSRCkKLSAgICB2b2lkIGhhbmRsZUNvcnJlY3Rp
b25QYW5lbFJlc3VsdChjb25zdCBTdHJpbmcmKTsKKyAgICB2b2lkIGhhbmRsZUFsdGVybmF0aXZl
VGV4dFVJUmVzdWx0KGNvbnN0IFN0cmluZyYpOwogI2VuZGlmCiAKICAgICAvLyBGb3IgdGVzdGlu
ZyBwdXJwb3NlLgpJbmRleDogU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL1dlYlBh
Z2UubWVzc2FnZXMuaW4KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9X
ZWJQYWdlL1dlYlBhZ2UubWVzc2FnZXMuaW4JKHJldmlzaW9uIDExMjkxNykKKysrIFNvdXJjZS9X
ZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9XZWJQYWdlLm1lc3NhZ2VzLmluCSh3b3JraW5nIGNv
cHkpCkBAIC0yNTgsNiArMjU4LDYgQEAgbWVzc2FnZXMgLT4gV2ViUGFnZSB7CiAjZW5kaWYKIAog
I2lmIFBMQVRGT1JNKE1BQykgJiYgIWRlZmluZWQoQlVJTERJTkdfT05fU05PV19MRU9QQVJEKQot
ICAgIEhhbmRsZUNvcnJlY3Rpb25QYW5lbFJlc3VsdChTdHJpbmcgcmVzdWx0KQorICAgIEhhbmRs
ZUFsdGVybmF0aXZlVGV4dFVJUmVzdWx0KFN0cmluZyByZXN1bHQpCiAjZW5kaWYKIH0KSW5kZXg6
IFNvdXJjZS9XZWJLaXQvbWFjL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0
L21hYy9DaGFuZ2VMb2cJKHJldmlzaW9uIDExMjkzMSkKKysrIFNvdXJjZS9XZWJLaXQvbWFjL0No
YW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDMxIEBACisyMDEyLTA0LTAyICBKaWEg
UHUgIDxqcHVAYXBwbGUuY29tPgorCisgICAgICAgIFJlbmFtZSBTcGVsbGluZ0NvcnJlY3Rpb25D
b250cm9sbGVyIHRvIEFsdGVybmF0aXZlVGV4dENvbnRyb2xsZXIuCisgICAgICAgIGh0dHBzOi8v
YnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD04Mjk0MgorCisgICAgICAgIFJldmlld2Vk
IGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFRoZXNlIGNoYW5nZXMgYXJlIHNpbXBseSBh
ZG9wdGluZyBuZXcgY2xhc3MgbmFtZXMuCisKKyAgICAgICAgKiBXZWJDb3JlU3VwcG9ydC9Db3Jy
ZWN0aW9uUGFuZWwuaDoKKyAgICAgICAgKENvcnJlY3Rpb25QYW5lbCk6CisgICAgICAgICogV2Vi
Q29yZVN1cHBvcnQvQ29ycmVjdGlvblBhbmVsLm1tOgorICAgICAgICAoY29ycmVjdGlvbkluZGlj
YXRvclR5cGUpOgorICAgICAgICAoQ29ycmVjdGlvblBhbmVsOjpDb3JyZWN0aW9uUGFuZWwpOgor
ICAgICAgICAoQ29ycmVjdGlvblBhbmVsOjp+Q29ycmVjdGlvblBhbmVsKToKKyAgICAgICAgKENv
cnJlY3Rpb25QYW5lbDo6c2hvdyk6CisgICAgICAgIChDb3JyZWN0aW9uUGFuZWw6OmRpc21pc3Mp
OgorICAgICAgICAoQ29ycmVjdGlvblBhbmVsOjpkaXNtaXNzSW50ZXJuYWwpOgorICAgICAgICAo
Q29ycmVjdGlvblBhbmVsOjpoYW5kbGVBY2NlcHRlZFJlcGxhY2VtZW50KToKKyAgICAgICAgKiBX
ZWJDb3JlU3VwcG9ydC9XZWJFZGl0b3JDbGllbnQuaDoKKyAgICAgICAgKiBXZWJDb3JlU3VwcG9y
dC9XZWJFZGl0b3JDbGllbnQubW06CisgICAgICAgIChXZWJFZGl0b3JDbGllbnQ6On5XZWJFZGl0
b3JDbGllbnQpOgorICAgICAgICAoV2ViRWRpdG9yQ2xpZW50OjpzaG93Q29ycmVjdGlvblBhbmVs
KToKKyAgICAgICAgKFdlYkVkaXRvckNsaWVudDo6ZGlzbWlzc0NvcnJlY3Rpb25QYW5lbCk6Cisg
ICAgICAgIChXZWJFZGl0b3JDbGllbnQ6OmRpc21pc3NDb3JyZWN0aW9uUGFuZWxTb29uKToKKyAg
ICAgICAgKiBXZWJWaWV3L1dlYlZpZXcubW06CisgICAgICAgICgtW1dlYlZpZXcgaGFuZGxlQ29y
cmVjdGlvblBhbmVsUmVzdWx0Ol0pOgorCiAyMDEyLTA0LTAxICBKb24gTGVlICA8am9ubGVlQGFw
cGxlLmNvbT4KIAogICAgICAgICBSZW5hbWUgbm90aWZpY2F0aW9uIHByb3BlcnRpZXMgYW5kIGZ1
bmN0aW9ucwpJbmRleDogU291cmNlL1dlYktpdC9tYWMvV2ViQ29yZVN1cHBvcnQvQ29ycmVjdGlv
blBhbmVsLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9tYWMvV2ViQ29yZVN1cHBvcnQv
Q29ycmVjdGlvblBhbmVsLmgJKHJldmlzaW9uIDExMjkxNykKKysrIFNvdXJjZS9XZWJLaXQvbWFj
L1dlYkNvcmVTdXBwb3J0L0NvcnJlY3Rpb25QYW5lbC5oCSh3b3JraW5nIGNvcHkpCkBAIC0yOCw3
ICsyOCw3IEBACiAKICNpZiAhZGVmaW5lZChCVUlMRElOR19PTl9MRU9QQVJEKSAmJiAhZGVmaW5l
ZChCVUlMRElOR19PTl9TTk9XX0xFT1BBUkQpCiAjaW1wb3J0IDxBcHBLaXQvTlNTcGVsbENoZWNr
ZXIuaD4KLSNpbXBvcnQgPFdlYkNvcmUvU3BlbGxpbmdDb3JyZWN0aW9uQ29udHJvbGxlci5oPgor
I2ltcG9ydCA8V2ViQ29yZS9BbHRlcm5hdGl2ZVRleHRDb250cm9sbGVyLmg+CiAjaW1wb3J0IDx3
dGYvUmV0YWluUHRyLmg+CiAKIEBjbGFzcyBXZWJWaWV3OwpAQCAtMzgsMTcgKzM4LDE3IEBAIGNs
YXNzIENvcnJlY3Rpb25QYW5lbCB7CiBwdWJsaWM6CiAgICAgQ29ycmVjdGlvblBhbmVsKCk7CiAg
ICAgfkNvcnJlY3Rpb25QYW5lbCgpOwotICAgIHZvaWQgc2hvdyhXZWJWaWV3KiwgV2ViQ29yZTo6
Q29ycmVjdGlvblBhbmVsSW5mbzo6UGFuZWxUeXBlLCBjb25zdCBXZWJDb3JlOjpGbG9hdFJlY3Qm
IGJvdW5kaW5nQm94T2ZSZXBsYWNlZFN0cmluZywgY29uc3QgU3RyaW5nJiByZXBsYWNlZFN0cmlu
ZywgY29uc3QgU3RyaW5nJiByZXBsYWNlbWVudFN0cmluZywgY29uc3QgVmVjdG9yPFN0cmluZz4m
IGFsdGVybmF0aXZlUmVwbGFjZW1lbnRTdHJpbmdzKTsKLSAgICBTdHJpbmcgZGlzbWlzcyhXZWJD
b3JlOjpSZWFzb25Gb3JEaXNtaXNzaW5nQ29ycmVjdGlvblBhbmVsKTsKKyAgICB2b2lkIHNob3co
V2ViVmlldyosIFdlYkNvcmU6OkFsdGVybmF0aXZlVGV4dFR5cGUsIGNvbnN0IFdlYkNvcmU6OkZs
b2F0UmVjdCYgYm91bmRpbmdCb3hPZlJlcGxhY2VkU3RyaW5nLCBjb25zdCBTdHJpbmcmIHJlcGxh
Y2VkU3RyaW5nLCBjb25zdCBTdHJpbmcmIHJlcGxhY2VtZW50U3RyaW5nLCBjb25zdCBWZWN0b3I8
U3RyaW5nPiYgYWx0ZXJuYXRpdmVSZXBsYWNlbWVudFN0cmluZ3MpOworICAgIFN0cmluZyBkaXNt
aXNzKFdlYkNvcmU6OlJlYXNvbkZvckRpc21pc3NpbmdBbHRlcm5hdGl2ZVRleHQpOwogICAgIHN0
YXRpYyB2b2lkIHJlY29yZEF1dG9jb3JyZWN0aW9uUmVzcG9uc2UoV2ViVmlldyosIE5TQ29ycmVj
dGlvblJlc3BvbnNlLCBjb25zdCBTdHJpbmcmIHJlcGxhY2VkU3RyaW5nLCBjb25zdCBTdHJpbmcm
IHJlcGxhY2VtZW50U3RyaW5nKTsKIAogcHJpdmF0ZToKICAgICBib29sIGlzU2hvd2luZygpIGNv
bnN0IHsgcmV0dXJuIG1fdmlldzsgfQotICAgIFN0cmluZyBkaXNtaXNzSW50ZXJuYWwoV2ViQ29y
ZTo6UmVhc29uRm9yRGlzbWlzc2luZ0NvcnJlY3Rpb25QYW5lbCwgYm9vbCBkaXNtaXNzaW5nRXh0
ZXJuYWxseSk7CisgICAgU3RyaW5nIGRpc21pc3NJbnRlcm5hbChXZWJDb3JlOjpSZWFzb25Gb3JE
aXNtaXNzaW5nQWx0ZXJuYXRpdmVUZXh0LCBib29sIGRpc21pc3NpbmdFeHRlcm5hbGx5KTsKICAg
ICB2b2lkIGhhbmRsZUFjY2VwdGVkUmVwbGFjZW1lbnQoTlNTdHJpbmcqIGFjY2VwdGVkUmVwbGFj
ZW1lbnQsIE5TU3RyaW5nKiByZXBsYWNlZCwgTlNTdHJpbmcqIHByb3Bvc2VkUmVwbGFjZW1lbnQs
IE5TQ29ycmVjdGlvbkluZGljYXRvclR5cGUpOwogCiAgICAgYm9vbCBtX3dhc0Rpc21pc3NlZEV4
dGVybmFsbHk7Ci0gICAgV2ViQ29yZTo6UmVhc29uRm9yRGlzbWlzc2luZ0NvcnJlY3Rpb25QYW5l
bCBtX3JlYXNvbkZvckRpc21pc3Npbmc7CisgICAgV2ViQ29yZTo6UmVhc29uRm9yRGlzbWlzc2lu
Z0FsdGVybmF0aXZlVGV4dCBtX3JlYXNvbkZvckRpc21pc3Npbmc7CiAgICAgUmV0YWluUHRyPFdl
YlZpZXc+IG1fdmlldzsKICAgICBSZXRhaW5QdHI8TlNTdHJpbmc+IG1fcmVzdWx0Rm9yRGlzbWlz
c2FsOwogfTsKSW5kZXg6IFNvdXJjZS9XZWJLaXQvbWFjL1dlYkNvcmVTdXBwb3J0L0NvcnJlY3Rp
b25QYW5lbC5tbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L21hYy9XZWJDb3JlU3VwcG9y
dC9Db3JyZWN0aW9uUGFuZWwubW0JKHJldmlzaW9uIDExMjkxNykKKysrIFNvdXJjZS9XZWJLaXQv
bWFjL1dlYkNvcmVTdXBwb3J0L0NvcnJlY3Rpb25QYW5lbC5tbQkod29ya2luZyBjb3B5KQpAQCAt
MzAsMTQgKzMwLDE0IEBACiAjaWYgIWRlZmluZWQoQlVJTERJTkdfT05fTEVPUEFSRCkgJiYgIWRl
ZmluZWQoQlVJTERJTkdfT05fU05PV19MRU9QQVJEKQogdXNpbmcgbmFtZXNwYWNlIFdlYkNvcmU7
CiAKLXN0YXRpYyBpbmxpbmUgTlNDb3JyZWN0aW9uSW5kaWNhdG9yVHlwZSBjb3JyZWN0aW9uSW5k
aWNhdG9yVHlwZShDb3JyZWN0aW9uUGFuZWxJbmZvOjpQYW5lbFR5cGUgcGFuZWxUeXBlKQorc3Rh
dGljIGlubGluZSBOU0NvcnJlY3Rpb25JbmRpY2F0b3JUeXBlIGNvcnJlY3Rpb25JbmRpY2F0b3JU
eXBlKEFsdGVybmF0aXZlVGV4dFR5cGUgYWx0ZXJuYXRpdmVUZXh0VHlwZSkKIHsKLSAgICBzd2l0
Y2ggKHBhbmVsVHlwZSkgewotICAgIGNhc2UgQ29ycmVjdGlvblBhbmVsSW5mbzo6UGFuZWxUeXBl
Q29ycmVjdGlvbjoKKyAgICBzd2l0Y2ggKGFsdGVybmF0aXZlVGV4dFR5cGUpIHsKKyAgICBjYXNl
IEFsdGVybmF0aXZlVGV4dFR5cGVDb3JyZWN0aW9uOgogICAgICAgICByZXR1cm4gTlNDb3JyZWN0
aW9uSW5kaWNhdG9yVHlwZURlZmF1bHQ7Ci0gICAgY2FzZSBDb3JyZWN0aW9uUGFuZWxJbmZvOjpQ
YW5lbFR5cGVSZXZlcnNpb246CisgICAgY2FzZSBBbHRlcm5hdGl2ZVRleHRUeXBlUmV2ZXJzaW9u
OgogICAgICAgICByZXR1cm4gTlNDb3JyZWN0aW9uSW5kaWNhdG9yVHlwZVJldmVyc2lvbjsKLSAg
ICBjYXNlIENvcnJlY3Rpb25QYW5lbEluZm86OlBhbmVsVHlwZVNwZWxsaW5nU3VnZ2VzdGlvbnM6
CisgICAgY2FzZSBBbHRlcm5hdGl2ZVRleHRUeXBlU3BlbGxpbmdTdWdnZXN0aW9uczoKICAgICAg
ICAgcmV0dXJuIE5TQ29ycmVjdGlvbkluZGljYXRvclR5cGVHdWVzc2VzOwogICAgIH0KICAgICBB
U1NFUlRfTk9UX1JFQUNIRUQoKTsKQEAgLTQ2LDE4ICs0NiwxOCBAQCBzdGF0aWMgaW5saW5lIE5T
Q29ycmVjdGlvbkluZGljYXRvclR5cGUgCiAKIENvcnJlY3Rpb25QYW5lbDo6Q29ycmVjdGlvblBh
bmVsKCkKICAgICA6IG1fd2FzRGlzbWlzc2VkRXh0ZXJuYWxseShmYWxzZSkKLSAgICAsIG1fcmVh
c29uRm9yRGlzbWlzc2luZyhSZWFzb25Gb3JEaXNtaXNzaW5nQ29ycmVjdGlvblBhbmVsSWdub3Jl
ZCkKKyAgICAsIG1fcmVhc29uRm9yRGlzbWlzc2luZyhSZWFzb25Gb3JEaXNtaXNzaW5nQWx0ZXJu
YXRpdmVUZXh0SWdub3JlZCkKIHsKIH0KIAogQ29ycmVjdGlvblBhbmVsOjp+Q29ycmVjdGlvblBh
bmVsKCkKIHsKLSAgICBkaXNtaXNzSW50ZXJuYWwoUmVhc29uRm9yRGlzbWlzc2luZ0NvcnJlY3Rp
b25QYW5lbElnbm9yZWQsIGZhbHNlKTsKKyAgICBkaXNtaXNzSW50ZXJuYWwoUmVhc29uRm9yRGlz
bWlzc2luZ0FsdGVybmF0aXZlVGV4dElnbm9yZWQsIGZhbHNlKTsKIH0KIAotdm9pZCBDb3JyZWN0
aW9uUGFuZWw6OnNob3coV2ViVmlldyogdmlldywgQ29ycmVjdGlvblBhbmVsSW5mbzo6UGFuZWxU
eXBlIHR5cGUsIGNvbnN0IEZsb2F0UmVjdCYgYm91bmRpbmdCb3hPZlJlcGxhY2VkU3RyaW5nLCBj
b25zdCBTdHJpbmcmIHJlcGxhY2VkU3RyaW5nLCBjb25zdCBTdHJpbmcmIHJlcGxhY2VtZW50U3Ry
aW5nLCBjb25zdCBWZWN0b3I8U3RyaW5nPiYgYWx0ZXJuYXRpdmVSZXBsYWNlbWVudFN0cmluZ3Mp
Cit2b2lkIENvcnJlY3Rpb25QYW5lbDo6c2hvdyhXZWJWaWV3KiB2aWV3LCBBbHRlcm5hdGl2ZVRl
eHRUeXBlIHR5cGUsIGNvbnN0IEZsb2F0UmVjdCYgYm91bmRpbmdCb3hPZlJlcGxhY2VkU3RyaW5n
LCBjb25zdCBTdHJpbmcmIHJlcGxhY2VkU3RyaW5nLCBjb25zdCBTdHJpbmcmIHJlcGxhY2VtZW50
U3RyaW5nLCBjb25zdCBWZWN0b3I8U3RyaW5nPiYgYWx0ZXJuYXRpdmVSZXBsYWNlbWVudFN0cmlu
Z3MpCiB7Ci0gICAgZGlzbWlzc0ludGVybmFsKFJlYXNvbkZvckRpc21pc3NpbmdDb3JyZWN0aW9u
UGFuZWxJZ25vcmVkLCBmYWxzZSk7CisgICAgZGlzbWlzc0ludGVybmFsKFJlYXNvbkZvckRpc21p
c3NpbmdBbHRlcm5hdGl2ZVRleHRJZ25vcmVkLCBmYWxzZSk7CiAgICAgCiAgICAgaWYgKCF2aWV3
KQogICAgICAgICByZXR1cm47CkBAIC04MCwxMiArODAsMTIgQEAgdm9pZCBDb3JyZWN0aW9uUGFu
ZWw6OnNob3coV2ViVmlldyogdmlldwogICAgIH1dOwogfQogCi1TdHJpbmcgQ29ycmVjdGlvblBh
bmVsOjpkaXNtaXNzKFJlYXNvbkZvckRpc21pc3NpbmdDb3JyZWN0aW9uUGFuZWwgcmVhc29uKQor
U3RyaW5nIENvcnJlY3Rpb25QYW5lbDo6ZGlzbWlzcyhSZWFzb25Gb3JEaXNtaXNzaW5nQWx0ZXJu
YXRpdmVUZXh0IHJlYXNvbikKIHsKICAgICByZXR1cm4gZGlzbWlzc0ludGVybmFsKHJlYXNvbiwg
dHJ1ZSk7CiB9CiAKLVN0cmluZyBDb3JyZWN0aW9uUGFuZWw6OmRpc21pc3NJbnRlcm5hbChSZWFz
b25Gb3JEaXNtaXNzaW5nQ29ycmVjdGlvblBhbmVsIHJlYXNvbiwgYm9vbCBkaXNtaXNzaW5nRXh0
ZXJuYWxseSkKK1N0cmluZyBDb3JyZWN0aW9uUGFuZWw6OmRpc21pc3NJbnRlcm5hbChSZWFzb25G
b3JEaXNtaXNzaW5nQWx0ZXJuYXRpdmVUZXh0IHJlYXNvbiwgYm9vbCBkaXNtaXNzaW5nRXh0ZXJu
YWxseSkKIHsKICAgICBpZiAoIWlzU2hvd2luZygpKQogICAgICAgICByZXR1cm4gU3RyaW5nKCk7
CkBAIC0xMTUsNyArMTE1LDcgQEAgdm9pZCBDb3JyZWN0aW9uUGFuZWw6OmhhbmRsZUFjY2VwdGVk
UmVwbAogICAgICAgICBpZiAoYWNjZXB0ZWRSZXBsYWNlbWVudCkKICAgICAgICAgICAgIFtzcGVs
bENoZWNrZXIgcmVjb3JkUmVzcG9uc2U6TlNDb3JyZWN0aW9uUmVzcG9uc2VBY2NlcHRlZCB0b0Nv
cnJlY3Rpb246YWNjZXB0ZWRSZXBsYWNlbWVudCBmb3JXb3JkOnJlcGxhY2VkIGxhbmd1YWdlOm5p
bCBpblNwZWxsRG9jdW1lbnRXaXRoVGFnOmRvY3VtZW50VGFnXTsKICAgICAgICAgZWxzZSB7Ci0g
ICAgICAgICAgICBpZiAoIW1fd2FzRGlzbWlzc2VkRXh0ZXJuYWxseSB8fCBtX3JlYXNvbkZvckRp
c21pc3NpbmcgPT0gUmVhc29uRm9yRGlzbWlzc2luZ0NvcnJlY3Rpb25QYW5lbENhbmNlbGxlZCkK
KyAgICAgICAgICAgIGlmICghbV93YXNEaXNtaXNzZWRFeHRlcm5hbGx5IHx8IG1fcmVhc29uRm9y
RGlzbWlzc2luZyA9PSBSZWFzb25Gb3JEaXNtaXNzaW5nQWx0ZXJuYXRpdmVUZXh0Q2FuY2VsbGVk
KQogICAgICAgICAgICAgICAgIFtzcGVsbENoZWNrZXIgcmVjb3JkUmVzcG9uc2U6TlNDb3JyZWN0
aW9uUmVzcG9uc2VSZWplY3RlZCB0b0NvcnJlY3Rpb246cHJvcG9zZWRSZXBsYWNlbWVudCBmb3JX
b3JkOnJlcGxhY2VkIGxhbmd1YWdlOm5pbCBpblNwZWxsRG9jdW1lbnRXaXRoVGFnOmRvY3VtZW50
VGFnXTsKICAgICAgICAgICAgIGVsc2UKICAgICAgICAgICAgICAgICBbc3BlbGxDaGVja2VyIHJl
Y29yZFJlc3BvbnNlOk5TQ29ycmVjdGlvblJlc3BvbnNlSWdub3JlZCB0b0NvcnJlY3Rpb246cHJv
cG9zZWRSZXBsYWNlbWVudCBmb3JXb3JkOnJlcGxhY2VkIGxhbmd1YWdlOm5pbCBpblNwZWxsRG9j
dW1lbnRXaXRoVGFnOmRvY3VtZW50VGFnXTsKSW5kZXg6IFNvdXJjZS9XZWJLaXQvbWFjL1dlYkNv
cmVTdXBwb3J0L1dlYkVkaXRvckNsaWVudC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQv
bWFjL1dlYkNvcmVTdXBwb3J0L1dlYkVkaXRvckNsaWVudC5oCShyZXZpc2lvbiAxMTI5MTcpCisr
KyBTb3VyY2UvV2ViS2l0L21hYy9XZWJDb3JlU3VwcG9ydC9XZWJFZGl0b3JDbGllbnQuaAkod29y
a2luZyBjb3B5KQpAQCAtMTM3LDkgKzEzNyw5IEBAIHB1YmxpYzoKICAgICB2aXJ0dWFsIHZvaWQg
c2V0SW5wdXRNZXRob2RTdGF0ZShib29sIGVuYWJsZWQpIE9WRVJSSURFOwogICAgIHZpcnR1YWwg
dm9pZCByZXF1ZXN0Q2hlY2tpbmdPZlN0cmluZyhXZWJDb3JlOjpTcGVsbENoZWNrZXIqLCBjb25z
dCBXZWJDb3JlOjpUZXh0Q2hlY2tpbmdSZXF1ZXN0JikgT1ZFUlJJREU7CiAjaWYgIWRlZmluZWQo
QlVJTERJTkdfT05fTEVPUEFSRCkgJiYgIWRlZmluZWQoQlVJTERJTkdfT05fU05PV19MRU9QQVJE
KQotICAgIHZpcnR1YWwgdm9pZCBzaG93Q29ycmVjdGlvblBhbmVsKFdlYkNvcmU6OkNvcnJlY3Rp
b25QYW5lbEluZm86OlBhbmVsVHlwZSwgY29uc3QgV2ViQ29yZTo6RmxvYXRSZWN0JiBib3VuZGlu
Z0JveE9mUmVwbGFjZWRTdHJpbmcsIGNvbnN0IFN0cmluZyYgcmVwbGFjZWRTdHJpbmcsIGNvbnN0
IFN0cmluZyYgcmVwbGFjZW1lbnRTdHJpbmcsIGNvbnN0IFZlY3RvcjxTdHJpbmc+JiBhbHRlcm5h
dGl2ZVJlcGxhY2VtZW50U3RyaW5ncykgT1ZFUlJJREU7Ci0gICAgdmlydHVhbCB2b2lkIGRpc21p
c3NDb3JyZWN0aW9uUGFuZWwoV2ViQ29yZTo6UmVhc29uRm9yRGlzbWlzc2luZ0NvcnJlY3Rpb25Q
YW5lbCkgT1ZFUlJJREU7Ci0gICAgdmlydHVhbCBTdHJpbmcgZGlzbWlzc0NvcnJlY3Rpb25QYW5l
bFNvb24oV2ViQ29yZTo6UmVhc29uRm9yRGlzbWlzc2luZ0NvcnJlY3Rpb25QYW5lbCkgT1ZFUlJJ
REU7CisgICAgdmlydHVhbCB2b2lkIHNob3dDb3JyZWN0aW9uUGFuZWwoV2ViQ29yZTo6QWx0ZXJu
YXRpdmVUZXh0VHlwZSwgY29uc3QgV2ViQ29yZTo6RmxvYXRSZWN0JiBib3VuZGluZ0JveE9mUmVw
bGFjZWRTdHJpbmcsIGNvbnN0IFN0cmluZyYgcmVwbGFjZWRTdHJpbmcsIGNvbnN0IFN0cmluZyYg
cmVwbGFjZW1lbnRTdHJpbmcsIGNvbnN0IFZlY3RvcjxTdHJpbmc+JiBhbHRlcm5hdGl2ZVJlcGxh
Y2VtZW50U3RyaW5ncykgT1ZFUlJJREU7CisgICAgdmlydHVhbCB2b2lkIGRpc21pc3NDb3JyZWN0
aW9uUGFuZWwoV2ViQ29yZTo6UmVhc29uRm9yRGlzbWlzc2luZ0FsdGVybmF0aXZlVGV4dCkgT1ZF
UlJJREU7CisgICAgdmlydHVhbCBTdHJpbmcgZGlzbWlzc0NvcnJlY3Rpb25QYW5lbFNvb24oV2Vi
Q29yZTo6UmVhc29uRm9yRGlzbWlzc2luZ0FsdGVybmF0aXZlVGV4dCkgT1ZFUlJJREU7CiAgICAg
dmlydHVhbCB2b2lkIHJlY29yZEF1dG9jb3JyZWN0aW9uUmVzcG9uc2UoQXV0b2NvcnJlY3Rpb25S
ZXNwb25zZVR5cGUsIGNvbnN0IFN0cmluZyYgcmVwbGFjZWRTdHJpbmcsIGNvbnN0IFN0cmluZyYg
cmVwbGFjZW1lbnRTdHJpbmcpIE9WRVJSSURFOwogI2VuZGlmCiBwcml2YXRlOgpJbmRleDogU291
cmNlL1dlYktpdC9tYWMvV2ViQ29yZVN1cHBvcnQvV2ViRWRpdG9yQ2xpZW50Lm1tCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9XZWJLaXQvbWFjL1dlYkNvcmVTdXBwb3J0L1dlYkVkaXRvckNsaWVudC5t
bQkocmV2aXNpb24gMTEyOTE3KQorKysgU291cmNlL1dlYktpdC9tYWMvV2ViQ29yZVN1cHBvcnQv
V2ViRWRpdG9yQ2xpZW50Lm1tCSh3b3JraW5nIGNvcHkpCkBAIC0xOTAsNyArMTkwLDcgQEAgV2Vi
RWRpdG9yQ2xpZW50OjpXZWJFZGl0b3JDbGllbnQoV2ViVmlldwogV2ViRWRpdG9yQ2xpZW50Ojp+
V2ViRWRpdG9yQ2xpZW50KCkKIHsKICNpZiAhZGVmaW5lZChCVUlMRElOR19PTl9MRU9QQVJEKSAm
JiAhZGVmaW5lZChCVUlMRElOR19PTl9TTk9XX0xFT1BBUkQpCi0gICAgZGlzbWlzc0NvcnJlY3Rp
b25QYW5lbChSZWFzb25Gb3JEaXNtaXNzaW5nQ29ycmVjdGlvblBhbmVsSWdub3JlZCk7CisgICAg
ZGlzbWlzc0NvcnJlY3Rpb25QYW5lbChSZWFzb25Gb3JEaXNtaXNzaW5nQWx0ZXJuYXRpdmVUZXh0
SWdub3JlZCk7CiAjZW5kaWYKIH0KIApAQCAtODY3LDE3ICs4NjcsMTcgQEAgdm9pZCBXZWJFZGl0
b3JDbGllbnQ6OnVwZGF0ZVNwZWxsaW5nVUlXaQogfQogCiAjaWYgIWRlZmluZWQoQlVJTERJTkdf
T05fTEVPUEFSRCkgJiYgIWRlZmluZWQoQlVJTERJTkdfT05fU05PV19MRU9QQVJEKQotdm9pZCBX
ZWJFZGl0b3JDbGllbnQ6OnNob3dDb3JyZWN0aW9uUGFuZWwoQ29ycmVjdGlvblBhbmVsSW5mbzo6
UGFuZWxUeXBlIHBhbmVsVHlwZSwgY29uc3QgRmxvYXRSZWN0JiBib3VuZGluZ0JveE9mUmVwbGFj
ZWRTdHJpbmcsIGNvbnN0IFN0cmluZyYgcmVwbGFjZWRTdHJpbmcsIGNvbnN0IFN0cmluZyYgcmVw
bGFjZW1lbnRTdHJpbmcsIGNvbnN0IFZlY3RvcjxTdHJpbmc+JiBhbHRlcm5hdGl2ZVJlcGxhY2Vt
ZW50U3RyaW5ncykKK3ZvaWQgV2ViRWRpdG9yQ2xpZW50OjpzaG93Q29ycmVjdGlvblBhbmVsKEFs
dGVybmF0aXZlVGV4dFR5cGUgcGFuZWxUeXBlLCBjb25zdCBGbG9hdFJlY3QmIGJvdW5kaW5nQm94
T2ZSZXBsYWNlZFN0cmluZywgY29uc3QgU3RyaW5nJiByZXBsYWNlZFN0cmluZywgY29uc3QgU3Ry
aW5nJiByZXBsYWNlbWVudFN0cmluZywgY29uc3QgVmVjdG9yPFN0cmluZz4mIGFsdGVybmF0aXZl
UmVwbGFjZW1lbnRTdHJpbmdzKQogewogICAgIG1fY29ycmVjdGlvblBhbmVsLnNob3cobV93ZWJW
aWV3LCBwYW5lbFR5cGUsIGJvdW5kaW5nQm94T2ZSZXBsYWNlZFN0cmluZywgcmVwbGFjZWRTdHJp
bmcsIHJlcGxhY2VtZW50U3RyaW5nLCBhbHRlcm5hdGl2ZVJlcGxhY2VtZW50U3RyaW5ncyk7CiB9
CiAKLXZvaWQgV2ViRWRpdG9yQ2xpZW50OjpkaXNtaXNzQ29ycmVjdGlvblBhbmVsKFJlYXNvbkZv
ckRpc21pc3NpbmdDb3JyZWN0aW9uUGFuZWwgcmVhc29uRm9yRGlzbWlzc2luZykKK3ZvaWQgV2Vi
RWRpdG9yQ2xpZW50OjpkaXNtaXNzQ29ycmVjdGlvblBhbmVsKFJlYXNvbkZvckRpc21pc3NpbmdB
bHRlcm5hdGl2ZVRleHQgcmVhc29uRm9yRGlzbWlzc2luZykKIHsKICAgICBtX2NvcnJlY3Rpb25Q
YW5lbC5kaXNtaXNzKHJlYXNvbkZvckRpc21pc3NpbmcpOwogfQogCi1TdHJpbmcgV2ViRWRpdG9y
Q2xpZW50OjpkaXNtaXNzQ29ycmVjdGlvblBhbmVsU29vbihSZWFzb25Gb3JEaXNtaXNzaW5nQ29y
cmVjdGlvblBhbmVsIHJlYXNvbkZvckRpc21pc3NpbmcpCitTdHJpbmcgV2ViRWRpdG9yQ2xpZW50
OjpkaXNtaXNzQ29ycmVjdGlvblBhbmVsU29vbihSZWFzb25Gb3JEaXNtaXNzaW5nQWx0ZXJuYXRp
dmVUZXh0IHJlYXNvbkZvckRpc21pc3NpbmcpCiB7CiAgICAgcmV0dXJuIG1fY29ycmVjdGlvblBh
bmVsLmRpc21pc3MocmVhc29uRm9yRGlzbWlzc2luZyk7CiB9CkluZGV4OiBTb3VyY2UvV2ViS2l0
L21hYy9XZWJWaWV3L1dlYlZpZXcubW0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9tYWMv
V2ViVmlldy9XZWJWaWV3Lm1tCShyZXZpc2lvbiAxMTI5MTcpCisrKyBTb3VyY2UvV2ViS2l0L21h
Yy9XZWJWaWV3L1dlYlZpZXcubW0JKHdvcmtpbmcgY29weSkKQEAgLTU0ODgsNyArNTQ4OCw3IEBA
IC0gKHZvaWQpaGFuZGxlQ29ycmVjdGlvblBhbmVsUmVzdWx0OihOU1MKICAgICBXZWJGcmFtZSAq
d2ViRnJhbWUgPSBbc2VsZiBfc2VsZWN0ZWRPck1haW5GcmFtZV07CiAgICAgRnJhbWUqIGNvcmVG
cmFtZSA9IGNvcmUod2ViRnJhbWUpOwogICAgIGlmIChjb3JlRnJhbWUpCi0gICAgICAgIGNvcmVG
cmFtZS0+ZWRpdG9yKCktPmhhbmRsZUNvcnJlY3Rpb25QYW5lbFJlc3VsdChyZXN1bHQpOworICAg
ICAgICBjb3JlRnJhbWUtPmVkaXRvcigpLT5oYW5kbGVBbHRlcm5hdGl2ZVRleHRVSVJlc3VsdChy
ZXN1bHQpOwogfQogI2VuZGlmCiAK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>135244</attachid>
            <date>2012-04-02 17:44:11 -0700</date>
            <delta_ts>2012-04-02 18:55:28 -0700</delta_ts>
            <desc>Patch (V2)</desc>
            <filename>bug-82942-20120402174410.patch</filename>
            <type>text/plain</type>
            <size>181501</size>
            <attacher name="Jia Pu">jiapu.mail</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDExMjk2MSkKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDEwNiBAQAorMjAxMi0wNC0wMiAgSmlhIFB1
ICA8anB1QGFwcGxlLmNvbT4KKworICAgICAgICBSZW5hbWUgU3BlbGxpbmdDb3JyZWN0aW9uQ29u
dHJvbGxlciB0byBBbHRlcm5hdGl2ZVRleHRDb250cm9sbGVyLgorICAgICAgICBodHRwczovL2J1
Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9ODI5NDIKKworICAgICAgICBSZXZpZXdlZCBi
eSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBObyBuZXcgdGVzdHMsIHNpbmNlIHRoZXJlJ3Mg
bm8gY2hhbmdlIG9mIGZ1bmNhdGlvbmFsaXRpZXMuCisKKyAgICAgICAgVGhpcyBwYXRjaCByZW5h
bWVzIFNwZWxsaW5nQ29ycmVjdGlvbkNvbnRyb2xsZXIgdG8gQWx0ZXJuYXRpdmVUZXh0Q29udHJv
bGxlciwgQ29ycmVjdGlvblBhbmVsSW5mbyB0bworICAgICAgICBBbHRlcm5hdGl2ZVRleHRJbmZv
LCBDb3JyZWN0aW9uUGFuZWxJbmZvOjpDb3JyZXRpb25QYW5lbFR5cGUgdG8gQWx0ZXJuYXRpdmVU
ZXh0VHlwZSwgYW5kIFJlYXNvbkZvckRpc21pc3NpbmdDb3JyZWN0aW9uUGFuZWwKKyAgICAgICAg
dG8gUmVhc29uRm9yRGlzbWlzc2luZ0FsdGVybmF0aXZlVGV4dC4gQWxsIHRoZXNlIHJlbmFtaW5n
IHJlZmxlY3RzIHRoZSBmYWN0IHRoYXQgdGhpcyBjbGFzcyBjb250cm9scyBjaGFuZ2UKKyAgICAg
ICAgb2YgdGV4dCBjYXVzZWQgYnkgYm90aCBzcGVsbCBjaGVja2luZyBhbmQgYWx0ZXJuYXRpdmUg
ZGljdGF0aW9uIHJlc3VsdHMuIEl0IGFsc28gcmVuYW1lcyBhIGNvdXBsZSBvZiBmdW5jdGlvbnMK
KyAgICAgICAgaW4gdGhlIG9yaWdpbmFsIFNwZWxsaW5nQ29ycmVjdGlvbkNvbnRyb2xsZXIgY2xh
c3MgZm9yIHRoZSBzYW1lIHJlYXNvbi4KKworICAgICAgICBTcGVsbGluZ0NvcnJlY3Rpb25QYW5l
bDo6cmVwbGFjZW1lbnRTdHJpbmcgaGFzIGJlZW4gcmVwbGFjZWQgYnkgQWx0ZXJuYXRpdmVUZXh0
SW5mbzo6ZGV0YWlscyB3aGljaCBpcyBhbiBvYmplY3QKKyAgICAgICAgdGhhdCBjYW4gYmUgaW5z
dGFudGlhdGVkIHdpdGggZGlmZmVyZW50IHN1YmNsYXNzZXMuCisKKyAgICAgICAgKiBDTWFrZUxp
c3RzLnR4dDoKKyAgICAgICAgKiBUYXJnZXQucHJpOgorICAgICAgICAqIFdlYkNvcmUuZXhwLmlu
OgorICAgICAgICAqIFdlYkNvcmUuZ3lwaToKKyAgICAgICAgKiBXZWJDb3JlLnZjcHJvai9XZWJD
b3JlLnZjcHJvajoKKyAgICAgICAgKiBXZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2o6
CisgICAgICAgICogZWRpdGluZy9BbHRlcm5hdGl2ZVRleHRDb250cm9sbGVyLmNwcDogQ29waWVk
IGZyb20gU291cmNlL1dlYkNvcmUvZWRpdGluZy9TcGVsbGluZ0NvcnJlY3Rpb25Db250cm9sbGVy
LmNwcC4KKyAgICAgICAgKEF1dG9jb3JyZWN0aW9uQWx0ZXJuYXRpdmVEZXRhaWxzKToKKyAgICAg
ICAgKFdlYkNvcmU6OkF1dG9jb3JyZWN0aW9uQWx0ZXJuYXRpdmVEZXRhaWxzOjpjcmVhdGUpOgor
ICAgICAgICAoV2ViQ29yZTo6QXV0b2NvcnJlY3Rpb25BbHRlcm5hdGl2ZURldGFpbHM6OnJlcGxh
Y2VtZW50U3RyaW5nKToKKyAgICAgICAgKFdlYkNvcmU6OkF1dG9jb3JyZWN0aW9uQWx0ZXJuYXRp
dmVEZXRhaWxzOjpBdXRvY29ycmVjdGlvbkFsdGVybmF0aXZlRGV0YWlscyk6CisgICAgICAgIChX
ZWJDb3JlKToKKyAgICAgICAgKFdlYkNvcmU6OkFsdGVybmF0aXZlVGV4dENvbnRyb2xsZXI6OkFs
dGVybmF0aXZlVGV4dENvbnRyb2xsZXIpOgorICAgICAgICAoV2ViQ29yZTo6QWx0ZXJuYXRpdmVU
ZXh0Q29udHJvbGxlcjo6fkFsdGVybmF0aXZlVGV4dENvbnRyb2xsZXIpOgorICAgICAgICAoV2Vi
Q29yZTo6QWx0ZXJuYXRpdmVUZXh0Q29udHJvbGxlcjo6c3RhcnRBbHRlcm5hdGl2ZVRleHRVSVRp
bWVyKToKKyAgICAgICAgKFdlYkNvcmU6OkFsdGVybmF0aXZlVGV4dENvbnRyb2xsZXI6OnN0b3BB
bHRlcm5hdGl2ZVRleHRVSVRpbWVyKToKKyAgICAgICAgKFdlYkNvcmU6OkFsdGVybmF0aXZlVGV4
dENvbnRyb2xsZXI6OnN0b3BQZW5kaW5nQ29ycmVjdGlvbik6CisgICAgICAgIChXZWJDb3JlOjpB
bHRlcm5hdGl2ZVRleHRDb250cm9sbGVyOjphcHBseVBlbmRpbmdDb3JyZWN0aW9uKToKKyAgICAg
ICAgKFdlYkNvcmU6OkFsdGVybmF0aXZlVGV4dENvbnRyb2xsZXI6Omhhc1BlbmRpbmdDb3JyZWN0
aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OkFsdGVybmF0aXZlVGV4dENvbnRyb2xsZXI6OmlzU3Bl
bGxpbmdNYXJrZXJBbGxvd2VkKToKKyAgICAgICAgKFdlYkNvcmU6OkFsdGVybmF0aXZlVGV4dENv
bnRyb2xsZXI6OnNob3cpOgorICAgICAgICAoV2ViQ29yZTo6QWx0ZXJuYXRpdmVUZXh0Q29udHJv
bGxlcjo6aGFuZGxlQ2FuY2VsT3BlcmF0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OkFsdGVybmF0
aXZlVGV4dENvbnRyb2xsZXI6OmRpc21pc3MpOgorICAgICAgICAoV2ViQ29yZTo6QWx0ZXJuYXRp
dmVUZXh0Q29udHJvbGxlcjo6ZGlzbWlzc1Nvb24pOgorICAgICAgICAoV2ViQ29yZTo6QWx0ZXJu
YXRpdmVUZXh0Q29udHJvbGxlcjo6YXBwbHlBbHRlcm5hdGl2ZVRleHQpOgorICAgICAgICAoV2Vi
Q29yZTo6QWx0ZXJuYXRpdmVUZXh0Q29udHJvbGxlcjo6YXBwbHlBdXRvY29ycmVjdGlvbkJlZm9y
ZVR5cGluZ0lmQXBwcm9wcmlhdGUpOgorICAgICAgICAoV2ViQ29yZTo6QWx0ZXJuYXRpdmVUZXh0
Q29udHJvbGxlcjo6cmVzcG9uZFRvVW5hcHBsaWVkU3BlbGxDb3JyZWN0aW9uKToKKyAgICAgICAg
KFdlYkNvcmU6OkFsdGVybmF0aXZlVGV4dENvbnRyb2xsZXI6OnRpbWVyRmlyZWQpOgorICAgICAg
ICAoV2ViQ29yZTo6QWx0ZXJuYXRpdmVUZXh0Q29udHJvbGxlcjo6aGFuZGxlQWx0ZXJuYXRpdmVU
ZXh0VUlSZXN1bHQpOgorICAgICAgICAoV2ViQ29yZTo6QWx0ZXJuYXRpdmVUZXh0Q29udHJvbGxl
cjo6aXNBdXRvbWF0aWNTcGVsbGluZ0NvcnJlY3Rpb25FbmFibGVkKToKKyAgICAgICAgKFdlYkNv
cmU6OkFsdGVybmF0aXZlVGV4dENvbnRyb2xsZXI6OnJvb3RWaWV3UmVjdEZvclJhbmdlKToKKyAg
ICAgICAgKFdlYkNvcmU6OkFsdGVybmF0aXZlVGV4dENvbnRyb2xsZXI6OnJlc3BvbmRUb0NoYW5n
ZWRTZWxlY3Rpb24pOgorICAgICAgICAoV2ViQ29yZTo6QWx0ZXJuYXRpdmVUZXh0Q29udHJvbGxl
cjo6cmVzcG9uZFRvQXBwbGllZEVkaXRpbmcpOgorICAgICAgICAoV2ViQ29yZTo6QWx0ZXJuYXRp
dmVUZXh0Q29udHJvbGxlcjo6cmVzcG9uZFRvVW5hcHBsaWVkRWRpdGluZyk6CisgICAgICAgIChX
ZWJDb3JlOjpBbHRlcm5hdGl2ZVRleHRDb250cm9sbGVyOjpjbGllbnQpOgorICAgICAgICAoV2Vi
Q29yZTo6QWx0ZXJuYXRpdmVUZXh0Q29udHJvbGxlcjo6dGV4dENoZWNrZXIpOgorICAgICAgICAo
V2ViQ29yZTo6QWx0ZXJuYXRpdmVUZXh0Q29udHJvbGxlcjo6cmVjb3JkQXV0b2NvcnJlY3Rpb25S
ZXNwb25zZVJldmVyc2VkKToKKyAgICAgICAgKFdlYkNvcmU6OkFsdGVybmF0aXZlVGV4dENvbnRy
b2xsZXI6Om1hcmtSZXZlcnNlZCk6CisgICAgICAgIChXZWJDb3JlOjpBbHRlcm5hdGl2ZVRleHRD
b250cm9sbGVyOjptYXJrQ29ycmVjdGlvbik6CisgICAgICAgIChXZWJDb3JlOjpBbHRlcm5hdGl2
ZVRleHRDb250cm9sbGVyOjpyZWNvcmRTcGVsbGNoZWNrZXJSZXNwb25zZUZvck1vZGlmaWVkQ29y
cmVjdGlvbik6CisgICAgICAgIChXZWJDb3JlOjpBbHRlcm5hdGl2ZVRleHRDb250cm9sbGVyOjpk
ZWxldGVkQXV0b2NvcnJlY3Rpb25BdFBvc2l0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OkFsdGVy
bmF0aXZlVGV4dENvbnRyb2xsZXI6Om1hcmtQcmVjZWRpbmdXaGl0ZXNwYWNlRm9yRGVsZXRlZEF1
dG9jb3JyZWN0aW9uQWZ0ZXJDb21tYW5kKToKKyAgICAgICAgKFdlYkNvcmU6OkFsdGVybmF0aXZl
VGV4dENvbnRyb2xsZXI6OnByb2Nlc3NNYXJrZXJzT25UZXh0VG9CZVJlcGxhY2VkQnlSZXN1bHQp
OgorICAgICAgICAqIGVkaXRpbmcvQWx0ZXJuYXRpdmVUZXh0Q29udHJvbGxlci5oOiBDb3BpZWQg
ZnJvbSBTb3VyY2UvV2ViQ29yZS9lZGl0aW5nL1NwZWxsaW5nQ29ycmVjdGlvbkNvbnRyb2xsZXIu
aC4KKyAgICAgICAgKEFsdGVybmF0aXZlVGV4dERldGFpbHMpOgorICAgICAgICAoV2ViQ29yZTo6
QWx0ZXJuYXRpdmVUZXh0RGV0YWlsczo6QWx0ZXJuYXRpdmVUZXh0RGV0YWlscyk6CisgICAgICAg
IChXZWJDb3JlOjpBbHRlcm5hdGl2ZVRleHREZXRhaWxzOjp+QWx0ZXJuYXRpdmVUZXh0RGV0YWls
cyk6CisgICAgICAgIChXZWJDb3JlKToKKyAgICAgICAgKEFsdGVybmF0aXZlVGV4dEluZm8pOgor
ICAgICAgICAoQWx0ZXJuYXRpdmVUZXh0Q29udHJvbGxlcik6CisgICAgICAgIChXZWJDb3JlOjpB
bHRlcm5hdGl2ZVRleHRDb250cm9sbGVyOjpVTkxFU1NfRU5BQkxFRCk6CisgICAgICAgIChXZWJD
b3JlOjpBbHRlcm5hdGl2ZVRleHRDb250cm9sbGVyOjpzaG91bGRSZW1vdmVNYXJrZXJzVXBvbkVk
aXRpbmcpOgorICAgICAgICAqIGVkaXRpbmcvRWRpdG9yLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6
OkVkaXRvcjo6cmVzcG9uZFRvQ2hhbmdlZFNlbGVjdGlvbik6CisgICAgICAgIChXZWJDb3JlOjpF
ZGl0b3I6OmFwcGxpZWRFZGl0aW5nKToKKyAgICAgICAgKFdlYkNvcmU6OkVkaXRvcjo6dW5hcHBs
aWVkRWRpdGluZyk6CisgICAgICAgIChXZWJDb3JlOjpFZGl0b3I6OkVkaXRvcik6CisgICAgICAg
IChXZWJDb3JlOjpFZGl0b3I6Omluc2VydFRleHRXaXRob3V0U2VuZGluZ1RleHRFdmVudCk6Cisg
ICAgICAgIChXZWJDb3JlOjpFZGl0b3I6Omluc2VydExpbmVCcmVhayk6CisgICAgICAgIChXZWJD
b3JlOjpFZGl0b3I6Omluc2VydFBhcmFncmFwaFNlcGFyYXRvcik6CisgICAgICAgIChXZWJDb3Jl
OjpFZGl0b3I6OmlzQXV0b21hdGljU3BlbGxpbmdDb3JyZWN0aW9uRW5hYmxlZCk6CisgICAgICAg
IChXZWJDb3JlOjpFZGl0b3I6Om1hcmtNaXNzcGVsbGluZ3NBZnRlclR5cGluZ1RvV29yZCk6Cisg
ICAgICAgIChXZWJDb3JlOjpFZGl0b3I6Om1hcmtBbGxNaXNzcGVsbGluZ3NBbmRCYWRHcmFtbWFy
SW5SYW5nZXMpOgorICAgICAgICAoV2ViQ29yZTo6RWRpdG9yOjptYXJrQW5kUmVwbGFjZUZvcik6
CisgICAgICAgIChXZWJDb3JlOjpFZGl0b3I6OmNoYW5nZUJhY2tUb1JlcGxhY2VkU3RyaW5nKToK
KyAgICAgICAgKFdlYkNvcmU6OkVkaXRvcjo6dW5hcHBsaWVkU3BlbGxDb3JyZWN0aW9uKToKKyAg
ICAgICAgKFdlYkNvcmU6OkVkaXRvcjo6dXBkYXRlTWFya2Vyc0ZvcldvcmRzQWZmZWN0ZWRCeUVk
aXRpbmcpOgorICAgICAgICAoV2ViQ29yZTo6RWRpdG9yOjpkZWxldGVkQXV0b2NvcnJlY3Rpb25B
dFBvc2l0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OkVkaXRvcjo6c3RhcnRBbHRlcm5hdGl2ZVRl
eHRVSVRpbWVyKToKKyAgICAgICAgKFdlYkNvcmU6OkVkaXRvcjo6aGFuZGxlQWx0ZXJuYXRpdmVU
ZXh0VUlSZXN1bHQpOgorICAgICAgICAoV2ViQ29yZTo6RWRpdG9yOjpkaXNtaXNzQ29ycmVjdGlv
blBhbmVsQXNJZ25vcmVkKToKKyAgICAgICAgKiBlZGl0aW5nL0VkaXRvci5oOgorICAgICAgICAo
V2ViQ29yZSk6CisgICAgICAgIChFZGl0b3IpOgorICAgICAgICAqIGVkaXRpbmcvU3BlbGxpbmdD
b3JyZWN0aW9uQ29tbWFuZC5jcHA6CisgICAgICAgICogZWRpdGluZy9TcGVsbGluZ0NvcnJlY3Rp
b25Db250cm9sbGVyLmNwcDogUmVtb3ZlZC4KKyAgICAgICAgKiBlZGl0aW5nL1NwZWxsaW5nQ29y
cmVjdGlvbkNvbnRyb2xsZXIuaDogUmVtb3ZlZC4KKyAgICAgICAgKiBlZGl0aW5nL1R5cGluZ0Nv
bW1hbmQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6VHlwaW5nQ29tbWFuZDo6bWFya01pc3NwZWxs
aW5nc0FmdGVyVHlwaW5nKToKKyAgICAgICAgKiBsb2FkZXIvRW1wdHlDbGllbnRzLmg6CisgICAg
ICAgIChXZWJDb3JlOjpFbXB0eUVkaXRvckNsaWVudDo6c2hvd0NvcnJlY3Rpb25QYW5lbCk6Cisg
ICAgICAgIChXZWJDb3JlOjpFbXB0eUVkaXRvckNsaWVudDo6ZGlzbWlzc0NvcnJlY3Rpb25QYW5l
bCk6CisgICAgICAgIChXZWJDb3JlOjpFbXB0eUVkaXRvckNsaWVudDo6ZGlzbWlzc0NvcnJlY3Rp
b25QYW5lbFNvb24pOgorICAgICAgICAqIHBhZ2UvRWRpdG9yQ2xpZW50Lmg6CisKIDIwMTItMDQt
MDIgIERhbmllbCBDaGVuZyAgPGRjaGVuZ0BjaHJvbWl1bS5vcmc+CiAKICAgICAgICAgSGF2aW5n
IGEgZHJvcCBoYW5kbGVyIHByZXZlbnRzIG5hdmlnYXRpb24gb24gZHJvcCBldmVuIGlmIGV2ZW50
IGlzIG5vdCBjYW5jZWxsZWQKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NNYWtlTGlzdHMudHh0Cj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL0NNYWtlTGlzdHMudHh0CShyZXZpc2lvbiAxMTI5
NjEpCisrKyBTb3VyY2UvV2ViQ29yZS9DTWFrZUxpc3RzLnR4dAkod29ya2luZyBjb3B5KQpAQCAt
NjU0LDYgKzY1NCw3IEBAIFNFVChXZWJDb3JlX1NPVVJDRVMKIAogICAgIGRvbS9kZWZhdWx0L1Bs
YXRmb3JtTWVzc2FnZVBvcnRDaGFubmVsLmNwcAogCisgICAgZWRpdGluZy9BbHRlcm5hdGl2ZVRl
eHRDb250cm9sbGVyLmNwcAogICAgIGVkaXRpbmcvQXBwZW5kTm9kZUNvbW1hbmQuY3BwCiAgICAg
ZWRpdGluZy9BcHBseUJsb2NrRWxlbWVudENvbW1hbmQuY3BwCiAgICAgZWRpdGluZy9BcHBseVN0
eWxlQ29tbWFuZC5jcHAKQEAgLTY5Myw3ICs2OTQsNiBAQCBTRVQoV2ViQ29yZV9TT1VSQ0VTCiAg
ICAgZWRpdGluZy9TZXRTZWxlY3Rpb25Db21tYW5kLmNwcAogICAgIGVkaXRpbmcvU21hcnRSZXBs
YWNlLmNwcAogICAgIGVkaXRpbmcvU3BlbGxDaGVja2VyLmNwcAotICAgIGVkaXRpbmcvU3BlbGxp
bmdDb3JyZWN0aW9uQ29udHJvbGxlci5jcHAKICAgICBlZGl0aW5nL1NwZWxsaW5nQ29ycmVjdGlv
bkNvbW1hbmQuY3BwCiAgICAgZWRpdGluZy9TcGxpdEVsZW1lbnRDb21tYW5kLmNwcAogICAgIGVk
aXRpbmcvU3BsaXRUZXh0Tm9kZUNvbW1hbmQuY3BwCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9UYXJn
ZXQucHJpCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL1RhcmdldC5wcmkJKHJldmlzaW9u
IDExMjk2MSkKKysrIFNvdXJjZS9XZWJDb3JlL1RhcmdldC5wcmkJKHdvcmtpbmcgY29weSkKQEAg
LTYyOCw2ICs2MjgsNyBAQCBTT1VSQ0VTICs9IFwKICAgICBkb20vV2hlZWxFdmVudC5jcHAgXAog
ICAgIGRvbS9XaW5kb3dFdmVudENvbnRleHQuY3BwIFwKICAgICBkb20vZGVmYXVsdC9QbGF0Zm9y
bU1lc3NhZ2VQb3J0Q2hhbm5lbC5jcHAgXAorICAgIGVkaXRpbmcvQWx0ZXJuYXRpdmVUZXh0Q29u
dHJvbGxlci5jcHAgXAogICAgIGVkaXRpbmcvQXBwZW5kTm9kZUNvbW1hbmQuY3BwIFwKICAgICBl
ZGl0aW5nL0FwcGx5QmxvY2tFbGVtZW50Q29tbWFuZC5jcHAgXAogICAgIGVkaXRpbmcvQXBwbHlT
dHlsZUNvbW1hbmQuY3BwIFwKQEAgLTY2OSw3ICs2NzAsNiBAQCBTT1VSQ0VTICs9IFwKICAgICBl
ZGl0aW5nL1NldFNlbGVjdGlvbkNvbW1hbmQuY3BwIFwKICAgICBlZGl0aW5nL1NwZWxsQ2hlY2tl
ci5jcHAgXAogICAgIGVkaXRpbmcvU3BlbGxpbmdDb3JyZWN0aW9uQ29tbWFuZC5jcHAgXAotICAg
IGVkaXRpbmcvU3BlbGxpbmdDb3JyZWN0aW9uQ29udHJvbGxlci5jcHAgXAogICAgIGVkaXRpbmcv
U3BsaXRFbGVtZW50Q29tbWFuZC5jcHAgXAogICAgIGVkaXRpbmcvU3BsaXRUZXh0Tm9kZUNvbW1h
bmQuY3BwIFwKICAgICBlZGl0aW5nL1NwbGl0VGV4dE5vZGVDb250YWluaW5nRWxlbWVudENvbW1h
bmQuY3BwIFwKQEAgLTE3NTksNiArMTc1OSw3IEBAIEhFQURFUlMgKz0gXAogICAgIGRvbS9XZWJL
aXROYW1lZEZsb3cuaCBcCiAgICAgZG9tL1dlYktpdFRyYW5zaXRpb25FdmVudC5oIFwKICAgICBk
b20vV2hlZWxFdmVudC5oIFwKKyAgICBlZGl0aW5nL0FsdGVybmF0aXZlVGV4dENvbnRyb2xsZXIu
aCBcCiAgICAgZWRpdGluZy9BcHBlbmROb2RlQ29tbWFuZC5oIFwKICAgICBlZGl0aW5nL0FwcGx5
QmxvY2tFbGVtZW50Q29tbWFuZC5oIFwKICAgICBlZGl0aW5nL0FwcGx5U3R5bGVDb21tYW5kLmgg
XApAQCAtMTgwMCw3ICsxODAxLDYgQEAgSEVBREVSUyArPSBcCiAgICAgZWRpdGluZy9TZXROb2Rl
QXR0cmlidXRlQ29tbWFuZC5oIFwKICAgICBlZGl0aW5nL1NtYXJ0UmVwbGFjZS5oIFwKICAgICBl
ZGl0aW5nL1NwZWxsaW5nQ29ycmVjdGlvbkNvbW1hbmQuaCBcCi0gICAgZWRpdGluZy9TcGVsbGlu
Z0NvcnJlY3Rpb25Db250cm9sbGVyLmggXAogICAgIGVkaXRpbmcvU3BsaXRFbGVtZW50Q29tbWFu
ZC5oIFwKICAgICBlZGl0aW5nL1NwbGl0VGV4dE5vZGVDb21tYW5kLmggXAogICAgIGVkaXRpbmcv
U3BsaXRUZXh0Tm9kZUNvbnRhaW5pbmdFbGVtZW50Q29tbWFuZC5oIFwKSW5kZXg6IFNvdXJjZS9X
ZWJDb3JlL1dlYkNvcmUuZXhwLmluCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL1dlYkNv
cmUuZXhwLmluCShyZXZpc2lvbiAxMTI5NjEpCisrKyBTb3VyY2UvV2ViQ29yZS9XZWJDb3JlLmV4
cC5pbgkod29ya2luZyBjb3B5KQpAQCAtODg3LDExICs4ODcsMTEgQEAgX19aTjdXZWJDb3JlNkVk
aXRvcjI0cmVwbGFjZVNlbGVjdGlvbldpdAogX19aTjdXZWJDb3JlNkVkaXRvcjI2ZGVjcmVhc2VT
ZWxlY3Rpb25MaXN0TGV2ZWxFdgogX19aTjdXZWJDb3JlNkVkaXRvcjI2aW5jcmVhc2VTZWxlY3Rp
b25MaXN0TGV2ZWxFdgogX19aTjdXZWJDb3JlNkVkaXRvcjI2d3JpdGVTZWxlY3Rpb25Ub1Bhc3Rl
Ym9hcmRFUktOM1dURjZTdHJpbmdFUktOUzFfNlZlY3RvcklTMl9MbTBFRUUKLV9fWk43V2ViQ29y
ZTZFZGl0b3IyN2hhbmRsZUNvcnJlY3Rpb25QYW5lbFJlc3VsdEVSS04zV1RGNlN0cmluZ0UKIF9f
Wk43V2ViQ29yZTZFZGl0b3IyN3JlYWRTZWxlY3Rpb25Gcm9tUGFzdGVib2FyZEVSS04zV1RGNlN0
cmluZ0UKIF9fWk43V2ViQ29yZTZFZGl0b3IyOHJlcGxhY2VTZWxlY3Rpb25XaXRoRnJhZ21lbnRF
TjNXVEYxMFBhc3NSZWZQdHJJTlNfMTZEb2N1bWVudEZyYWdtZW50RUVFYmJiCiBfX1pON1dlYkNv
cmU2RWRpdG9yMjljYW5EZWNyZWFzZVNlbGVjdGlvbkxpc3RMZXZlbEV2CiBfX1pON1dlYkNvcmU2
RWRpdG9yMjljYW5JbmNyZWFzZVNlbGVjdGlvbkxpc3RMZXZlbEV2CitfX1pON1dlYkNvcmU2RWRp
dG9yMjloYW5kbGVBbHRlcm5hdGl2ZVRleHRVSVJlc3VsdEVSS04zV1RGNlN0cmluZ0UKIF9fWk43
V2ViQ29yZTZFZGl0b3IzMGRlbGV0ZVNlbGVjdGlvbldpdGhTbWFydERlbGV0ZUViCiBfX1pON1dl
YkNvcmU2RWRpdG9yMzBwYXN0ZUFzUGxhaW5UZXh0QnlwYXNzaW5nREhUTUxFdgogX19aTjdXZWJD
b3JlNkVkaXRvcjMyZ3Vlc3Nlc0ZvclVuZ3JhbW1hdGljYWxTZWxlY3Rpb25FdgpJbmRleDogU291
cmNlL1dlYkNvcmUvV2ViQ29yZS5neXBpCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL1dl
YkNvcmUuZ3lwaQkocmV2aXNpb24gMTEyOTYxKQorKysgU291cmNlL1dlYkNvcmUvV2ViQ29yZS5n
eXBpCSh3b3JraW5nIGNvcHkpCkBAIC0yNTAzLDYgKzI1MDMsOCBAQAogICAgICAgICAgICAgJ2Nz
cy9XZWJLaXRDU1NTaGFkZXJWYWx1ZS5jcHAnLAogICAgICAgICAgICAgJ2Nzcy9XZWJLaXRDU1NT
aGFkZXJWYWx1ZS5oJywKICAgICAgICAgICAgICdjc3MvV2ViS2l0Q1NTVHJhbnNmb3JtVmFsdWUu
Y3BwJywKKyAgICAgICAgICAgICdlZGl0aW5nL0FsdGVybmF0aXZlVGV4dENvbnRyb2xsZXIuY3Bw
JywKKyAgICAgICAgICAgICdlZGl0aW5nL0FsdGVybmF0aXZlVGV4dENvbnRyb2xsZXIuaCcsCiAg
ICAgICAgICAgICAnZWRpdGluZy9BcHBlbmROb2RlQ29tbWFuZC5jcHAnLAogICAgICAgICAgICAg
J2VkaXRpbmcvQXBwZW5kTm9kZUNvbW1hbmQuaCcsCiAgICAgICAgICAgICAnZWRpdGluZy9BcHBs
eUJsb2NrRWxlbWVudENvbW1hbmQuY3BwJywKQEAgLTI1NzIsOCArMjU3NCw2IEBACiAgICAgICAg
ICAgICAnZWRpdGluZy9TbWFydFJlcGxhY2VJQ1UuY3BwJywKICAgICAgICAgICAgICdlZGl0aW5n
L1NwZWxsQ2hlY2tlci5jcHAnLAogICAgICAgICAgICAgJ2VkaXRpbmcvU3BlbGxDaGVja2VyLmgn
LAotICAgICAgICAgICAgJ2VkaXRpbmcvU3BlbGxpbmdDb3JyZWN0aW9uQ29udHJvbGxlci5jcHAn
LAotICAgICAgICAgICAgJ2VkaXRpbmcvU3BlbGxpbmdDb3JyZWN0aW9uQ29udHJvbGxlci5oJywK
ICAgICAgICAgICAgICdlZGl0aW5nL1NwZWxsaW5nQ29ycmVjdGlvbkNvbW1hbmQuY3BwJywKICAg
ICAgICAgICAgICdlZGl0aW5nL1NwZWxsaW5nQ29ycmVjdGlvbkNvbW1hbmQuaCcsCiAgICAgICAg
ICAgICAnZWRpdGluZy9TcGxpdEVsZW1lbnRDb21tYW5kLmNwcCcsCkluZGV4OiBTb3VyY2UvV2Vi
Q29yZS9XZWJDb3JlLnZjcHJvai9XZWJDb3JlLnZjcHJvago9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
V2ViQ29yZS9XZWJDb3JlLnZjcHJvai9XZWJDb3JlLnZjcHJvagkocmV2aXNpb24gMTEyOTYxKQor
KysgU291cmNlL1dlYkNvcmUvV2ViQ29yZS52Y3Byb2ovV2ViQ29yZS52Y3Byb2oJKHdvcmtpbmcg
Y29weSkKQEAgLTU0MDc0LDYgKzU0MDc0LDYyIEBACiAJCQkJPgogCQkJPC9GaWxlPgogCQk8L0Zp
bHRlcj4KKwkJPEZpbGUKKwkJCQlSZWxhdGl2ZVBhdGg9Ii4uXGVkaXRpbmdcQWx0ZXJuYXRpdmVU
ZXh0Q29udHJvbGxlci5jcHAiCisJCQkJPgorCQkJCTxGaWxlQ29uZmlndXJhdGlvbgorCQkJCQlO
YW1lPSJEZWJ1Z3xXaW4zMiIKKwkJCQkJRXhjbHVkZWRGcm9tQnVpbGQ9InRydWUiCisJCQkJCT4K
KwkJCQkJPFRvb2wKKwkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiCisJCQkJCS8+CisJCQkJ
PC9GaWxlQ29uZmlndXJhdGlvbj4KKwkJCQk8RmlsZUNvbmZpZ3VyYXRpb24KKwkJCQkJTmFtZT0i
UmVsZWFzZXxXaW4zMiIKKwkJCQkJRXhjbHVkZWRGcm9tQnVpbGQ9InRydWUiCisJCQkJCT4KKwkJ
CQkJPFRvb2wKKwkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiCisJCQkJCS8+CisJCQkJPC9G
aWxlQ29uZmlndXJhdGlvbj4KKwkJCQk8RmlsZUNvbmZpZ3VyYXRpb24KKwkJCQkJTmFtZT0iRGVi
dWdfQ2Fpcm9fQ0ZMaXRlfFdpbjMyIgorCQkJCQlFeGNsdWRlZEZyb21CdWlsZD0idHJ1ZSIKKwkJ
CQkJPgorCQkJCQk8VG9vbAorCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCIKKwkJCQkJLz4K
KwkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPgorCQkJCTxGaWxlQ29uZmlndXJhdGlvbgorCQkJCQlO
YW1lPSJSZWxlYXNlX0NhaXJvX0NGTGl0ZXxXaW4zMiIKKwkJCQkJRXhjbHVkZWRGcm9tQnVpbGQ9
InRydWUiCisJCQkJCT4KKwkJCQkJPFRvb2wKKwkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wi
CisJCQkJCS8+CisJCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4KKwkJCQk8RmlsZUNvbmZpZ3VyYXRp
b24KKwkJCQkJTmFtZT0iRGVidWdfQWxsfFdpbjMyIgorCQkJCQlFeGNsdWRlZEZyb21CdWlsZD0i
dHJ1ZSIKKwkJCQkJPgorCQkJCQk8VG9vbAorCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCIK
KwkJCQkJLz4KKwkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPgorCQkJCTxGaWxlQ29uZmlndXJhdGlv
bgorCQkJCQlOYW1lPSJSZWxlYXNlX0xUQ0d8V2luMzIiCisJCQkJCUV4Y2x1ZGVkRnJvbUJ1aWxk
PSJ0cnVlIgorCQkJCQk+CisJCQkJCTxUb29sCisJCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29s
IgorCQkJCQkvPgorCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+CisJCQk8L0ZpbGU+CisJCQk8Rmls
ZQorCQkJCVJlbGF0aXZlUGF0aD0iLi5cZWRpdGluZ1xBbHRlcm5hdGl2ZVRleHRDb250cm9sbGVy
LmgiCisJCQkJPgorCQkJPC9GaWxlPgogCQk8RmlsdGVyCiAJCQlOYW1lPSJlZGl0aW5nIgogCQkJ
PgpAQCAtNTY0NTQsNjIgKzU2NTEwLDYgQEAKIAkJCQk+CiAJCQk8L0ZpbGU+CiAJCQk8RmlsZQot
CQkJCVJlbGF0aXZlUGF0aD0iLi5cZWRpdGluZ1xTcGVsbGluZ0NvcnJlY3Rpb25Db250cm9sbGVy
LmNwcCIKLQkJCQk+Ci0JCQkJPEZpbGVDb25maWd1cmF0aW9uCi0JCQkJCU5hbWU9IkRlYnVnfFdp
bjMyIgotCQkJCQlFeGNsdWRlZEZyb21CdWlsZD0idHJ1ZSIKLQkJCQkJPgotCQkJCQk8VG9vbAot
CQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCIKLQkJCQkJLz4KLQkJCQk8L0ZpbGVDb25maWd1
cmF0aW9uPgotCQkJCTxGaWxlQ29uZmlndXJhdGlvbgotCQkJCQlOYW1lPSJSZWxlYXNlfFdpbjMy
IgotCQkJCQlFeGNsdWRlZEZyb21CdWlsZD0idHJ1ZSIKLQkJCQkJPgotCQkJCQk8VG9vbAotCQkJ
CQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCIKLQkJCQkJLz4KLQkJCQk8L0ZpbGVDb25maWd1cmF0
aW9uPgotCQkJCTxGaWxlQ29uZmlndXJhdGlvbgotCQkJCQlOYW1lPSJEZWJ1Z19DYWlyb19DRkxp
dGV8V2luMzIiCi0JCQkJCUV4Y2x1ZGVkRnJvbUJ1aWxkPSJ0cnVlIgotCQkJCQk+Ci0JCQkJCTxU
b29sCi0JCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIgotCQkJCQkvPgotCQkJCTwvRmlsZUNv
bmZpZ3VyYXRpb24+Ci0JCQkJPEZpbGVDb25maWd1cmF0aW9uCi0JCQkJCU5hbWU9IlJlbGVhc2Vf
Q2Fpcm9fQ0ZMaXRlfFdpbjMyIgotCQkJCQlFeGNsdWRlZEZyb21CdWlsZD0idHJ1ZSIKLQkJCQkJ
PgotCQkJCQk8VG9vbAotCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCIKLQkJCQkJLz4KLQkJ
CQk8L0ZpbGVDb25maWd1cmF0aW9uPgotCQkJCTxGaWxlQ29uZmlndXJhdGlvbgotCQkJCQlOYW1l
PSJEZWJ1Z19BbGx8V2luMzIiCi0JCQkJCUV4Y2x1ZGVkRnJvbUJ1aWxkPSJ0cnVlIgotCQkJCQk+
Ci0JCQkJCTxUb29sCi0JCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIgotCQkJCQkvPgotCQkJ
CTwvRmlsZUNvbmZpZ3VyYXRpb24+Ci0JCQkJPEZpbGVDb25maWd1cmF0aW9uCi0JCQkJCU5hbWU9
IlJlbGVhc2VfTFRDR3xXaW4zMiIKLQkJCQkJRXhjbHVkZWRGcm9tQnVpbGQ9InRydWUiCi0JCQkJ
CT4KLQkJCQkJPFRvb2wKLQkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiCi0JCQkJCS8+Ci0J
CQkJPC9GaWxlQ29uZmlndXJhdGlvbj4KLQkJCTwvRmlsZT4KLQkJCTxGaWxlCi0JCQkJUmVsYXRp
dmVQYXRoPSIuLlxlZGl0aW5nXFNwZWxsaW5nQ29ycmVjdGlvbkNvbnRyb2xsZXIuaCIKLQkJCQk+
Ci0JCQk8L0ZpbGU+Ci0JCQk8RmlsZQogCQkJCVJlbGF0aXZlUGF0aD0iLi5cZWRpdGluZ1xTcGxp
dEVsZW1lbnRDb21tYW5kLmNwcCIKIAkJCQk+CiAJCQkJPEZpbGVDb25maWd1cmF0aW9uCkluZGV4
OiBTb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9q
CShyZXZpc2lvbiAxMTI5NjEpCisrKyBTb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9w
cm9qZWN0LnBieHByb2oJKHdvcmtpbmcgY29weSkKQEAgLTM3MDEsOCArMzcwMSw2IEBACiAJCUE2
MjJBOEZGMTIyQzQ0QTYwMEE3ODVCMyAvKiBHZW5lcmljQmluZGluZy5oIGluIEhlYWRlcnMgKi8g
PSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQTYyMkE4RjkxMjJDNDRBNjAwQTc4NUIz
IC8qIEdlbmVyaWNCaW5kaW5nLmggKi87IH07CiAJCUE2RDE2OTYyMTM0NkI0OUIwMDBFQjc3MCAv
KiBTaGFkb3dSb290LmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmls
ZVJlZiA9IEE2RDE2OTYxMTM0NkI0OUIwMDBFQjc3MCAvKiBTaGFkb3dSb290LmNwcCAqLzsgfTsK
IAkJQTZEMTY5NjQxMzQ2QjRDMTAwMEVCNzcwIC8qIFNoYWRvd1Jvb3QuaCBpbiBIZWFkZXJzICov
ID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEE2RDE2OTYzMTM0NkI0QzEwMDBFQjc3
MCAvKiBTaGFkb3dSb290LmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwg
KTsgfTsgfTsKLQkJQTcwMDVDQ0MxMzMwQzRCQTAwMENDMEJBIC8qIFNwZWxsaW5nQ29ycmVjdGlv
bkNvbnRyb2xsZXIuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxl
UmVmID0gQTcwMDVDQ0ExMzMwQzRCQTAwMENDMEJBIC8qIFNwZWxsaW5nQ29ycmVjdGlvbkNvbnRy
b2xsZXIuY3BwICovOyB9OwotCQlBNzAwNUNDRDEzMzBDNEJBMDAwQ0MwQkEgLyogU3BlbGxpbmdD
b3JyZWN0aW9uQ29udHJvbGxlci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gQTcwMDVDQ0IxMzMwQzRCQTAwMENDMEJBIC8qIFNwZWxsaW5nQ29ycmVjdGlv
bkNvbnRyb2xsZXIuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9
OyB9OwogCQlBNzE1MUJEODEyRjE1NThGMDA1QTBGNjQgLyogVGV4dENoZWNrZXJDbGllbnQuaCBp
biBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEE3MTUxQkQ3MTJG
MTU1OEYwMDVBMEY2NCAvKiBUZXh0Q2hlY2tlckNsaWVudC5oICovOyBzZXR0aW5ncyA9IHtBVFRS
SUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCUE3MTVFNjUyMTM0QkJCRUMwMEQ4RTcxMyAv
KiBQcm9ncmVzc1NoYWRvd0VsZW1lbnQuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gQTcxNUU2NTAxMzRCQkJFQzAwRDhFNzEzIC8qIFByb2dyZXNzU2hh
ZG93RWxlbWVudC5jcHAgKi87IH07CiAJCUE3MTVFNjUzMTM0QkJCRUMwMEQ4RTcxMyAvKiBQcm9n
cmVzc1NoYWRvd0VsZW1lbnQuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsg
ZmlsZVJlZiA9IEE3MTVFNjUxMTM0QkJCRUMwMEQ4RTcxMyAvKiBQcm9ncmVzc1NoYWRvd0VsZW1l
bnQuaCAqLzsgfTsKQEAgLTU3MzIsNiArNTczMCw4IEBACiAJCUNFQTM5NDlDMTFENDVDREEwMDMw
OTRDRiAvKiBTdGF0aWNIYXNoU2V0Tm9kZUxpc3QuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0g
UEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQ0VBMzk0OUExMUQ0NUNEQTAwMzA5NENGIC8qIFN0YXRp
Y0hhc2hTZXROb2RlTGlzdC5jcHAgKi87IH07CiAJCUNFQTM5NDlEMTFENDVDREEwMDMwOTRDRiAv
KiBTdGF0aWNIYXNoU2V0Tm9kZUxpc3QuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IENFQTM5NDlCMTFENDVDREEwMDMwOTRDRiAvKiBTdGF0aWNIYXNoU2V0
Tm9kZUxpc3QuaCAqLzsgfTsKIAkJQ0VDQ0ZDM0IxNDE5NzNENTAwMkEwQUMxIC8qIERlY29kZUVz
Y2FwZVNlcXVlbmNlcy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxl
UmVmID0gQ0VDQ0ZDM0ExNDE5NzNENTAwMkEwQUMxIC8qIERlY29kZUVzY2FwZVNlcXVlbmNlcy5o
ICovOyB9OworCQlDRURCM0NFRTE1MkE3NEE3MDA4RjM2RDQgLyogQWx0ZXJuYXRpdmVUZXh0Q29u
dHJvbGxlci5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSBDRURCM0NFQzE1MkE3NEE3MDA4RjM2RDQgLyogQWx0ZXJuYXRpdmVUZXh0Q29udHJvbGxlci5j
cHAgKi87IH07CisJCUNFREIzQ0VGMTUyQTc0QTcwMDhGMzZENCAvKiBBbHRlcm5hdGl2ZVRleHRD
b250cm9sbGVyLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSBDRURCM0NFRDE1MkE3NEE3MDA4RjM2RDQgLyogQWx0ZXJuYXRpdmVUZXh0Q29udHJvbGxlci5o
ICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCUNFRjQx
OENFMTE3OTY3OEMwMDlEMTEyQyAvKiBWaWV3cG9ydEFyZ3VtZW50cy5jcHAgaW4gU291cmNlcyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBDRUY0MThDQzExNzk2NzhDMDA5RDEx
MkMgLyogVmlld3BvcnRBcmd1bWVudHMuY3BwICovOyB9OwogCQlDRUY0MThDRjExNzk2NzhDMDA5
RDExMkMgLyogVmlld3BvcnRBcmd1bWVudHMuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1
aWxkRmlsZTsgZmlsZVJlZiA9IENFRjQxOENEMTE3OTY3OEMwMDlEMTEyQyAvKiBWaWV3cG9ydEFy
Z3VtZW50cy5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07
CiAJCUQwMDBFQkEyMTFCREFGRDQwMEM0NzcyNiAvKiBGcmFtZUxvYWRlclN0YXRlTWFjaGluZS5j
cHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBEMDAwRUJB
MDExQkRBRkQ0MDBDNDc3MjYgLyogRnJhbWVMb2FkZXJTdGF0ZU1hY2hpbmUuY3BwICovOyB9OwpA
QCAtMTA3MDgsOCArMTA3MDgsNiBAQAogCQlBNjIyQThGOTEyMkM0NEE2MDBBNzg1QjMgLyogR2Vu
ZXJpY0JpbmRpbmcuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gR2VuZXJpY0Jp
bmRpbmcuaDsgcGF0aCA9IGdlbmVyaWMvR2VuZXJpY0JpbmRpbmcuaDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKIAkJQTZEMTY5NjExMzQ2QjQ5QjAwMEVCNzcwIC8qIFNoYWRvd1Jvb3QuY3Bw
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gU2hhZG93Um9vdC5jcHA7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUE2RDE2OTYzMTM0NkI0QzEwMDBFQjc3MCAvKiBT
aGFkb3dSb290LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
NDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFNoYWRvd1Jvb3Qu
aDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJQTcwMDVDQ0ExMzMwQzRCQTAwMENDMEJB
IC8qIFNwZWxsaW5nQ29ycmVjdGlvbkNvbnRyb2xsZXIuY3BwICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jcHAuY3BwOyBwYXRoID0gU3BlbGxpbmdDb3JyZWN0aW9uQ29udHJvbGxlci5jcHA7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCUE3MDA1Q0NCMTMzMEM0QkEwMDBDQzBCQSAvKiBTcGVs
bGluZ0NvcnJlY3Rpb25Db250cm9sbGVyLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0
aCA9IFNwZWxsaW5nQ29ycmVjdGlvbkNvbnRyb2xsZXIuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKIAkJQTcxNTFCRDcxMkYxNTU4RjAwNUEwRjY0IC8qIFRleHRDaGVja2VyQ2xpZW50Lmgg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFRleHRDaGVja2VyQ2xpZW50Lmg7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUE3MTVFNjUwMTM0QkJCRUMwMEQ4RTcxMyAvKiBQ
cm9ncmVzc1NoYWRvd0VsZW1lbnQuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZp
bGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBw
YXRoID0gUHJvZ3Jlc3NTaGFkb3dFbGVtZW50LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKIAkJQTcxNUU2NTExMzRCQkJFQzAwRDhFNzEzIC8qIFByb2dyZXNzU2hhZG93RWxlbWVudC5o
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBQcm9ncmVzc1NoYWRvd0VsZW1lbnQu
aDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTEyODI4LDYgKzEyODI2LDggQEAKIAkJ
Q0VBMzk0OUExMUQ0NUNEQTAwMzA5NENGIC8qIFN0YXRpY0hhc2hTZXROb2RlTGlzdC5jcHAgKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBTdGF0aWNIYXNoU2V0Tm9kZUxpc3Qu
Y3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlDRUEzOTQ5QjExRDQ1Q0RBMDAzMDk0
Q0YgLyogU3RhdGljSGFzaFNldE5vZGVMaXN0LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsg
cGF0aCA9IFN0YXRpY0hhc2hTZXROb2RlTGlzdC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OwogCQlDRUNDRkMzQTE0MTk3M0Q1MDAyQTBBQzEgLyogRGVjb2RlRXNjYXBlU2VxdWVuY2VzLmgg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IERlY29kZUVzY2FwZVNlcXVlbmNlcy5o
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlDRURCM0NFQzE1MkE3NEE3MDA4RjM2RDQg
LyogQWx0ZXJuYXRpdmVUZXh0Q29udHJvbGxlci5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNw
cC5jcHA7IHBhdGggPSBBbHRlcm5hdGl2ZVRleHRDb250cm9sbGVyLmNwcDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKKwkJQ0VEQjNDRUQxNTJBNzRBNzAwOEYzNkQ0IC8qIEFsdGVybmF0aXZl
VGV4dENvbnRyb2xsZXIuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gQWx0ZXJu
YXRpdmVUZXh0Q29udHJvbGxlci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlDRUY0
MThDQzExNzk2NzhDMDA5RDExMkMgLyogVmlld3BvcnRBcmd1bWVudHMuY3BwICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gVmlld3BvcnRBcmd1bWVudHMuY3BwOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OwogCQlDRUY0MThDRDExNzk2NzhDMDA5RDExMkMgLyogVmlld3Bv
cnRBcmd1bWVudHMuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gVmlld3BvcnRB
cmd1bWVudHMuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJRDAwMEVCQTAxMUJEQUZE
NDAwQzQ3NzI2IC8qIEZyYW1lTG9hZGVyU3RhdGVNYWNoaW5lLmNwcCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEZyYW1lTG9hZGVyU3RhdGVNYWNoaW5lLmNwcDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTE2NTkzLDYgKzE2NTkzLDggQEAKIAkJCWlzYSA9IFBC
WEdyb3VwOwogCQkJY2hpbGRyZW4gPSAoCiAJCQkJRUQ1MDFEQzkwQjI0OUYzOTAwQUUxOEQ5IC8q
IG1hYyAqLywKKwkJCQlDRURCM0NFQzE1MkE3NEE3MDA4RjM2RDQgLyogQWx0ZXJuYXRpdmVUZXh0
Q29udHJvbGxlci5jcHAgKi8sCisJCQkJQ0VEQjNDRUQxNTJBNzRBNzAwOEYzNkQ0IC8qIEFsdGVy
bmF0aXZlVGV4dENvbnRyb2xsZXIuaCAqLywKIAkJCQk5MzMwOUQ4NzA5OUU2NDkxMDA1NkU1ODEg
LyogQXBwZW5kTm9kZUNvbW1hbmQuY3BwICovLAogCQkJCTkzMzA5RDg4MDk5RTY0OTEwMDU2RTU4
MSAvKiBBcHBlbmROb2RlQ29tbWFuZC5oICovLAogCQkJCTlCNDE3MDYzMTI1NjYyQjMwMDZCMjhG
QyAvKiBBcHBseUJsb2NrRWxlbWVudENvbW1hbmQuY3BwICovLApAQCAtMTY2ODQsOCArMTY2ODYs
NiBAQAogCQkJCUE3OEZFMTNBMTIzNjZCMTAwMEFDRThEMCAvKiBTcGVsbENoZWNrZXIuaCAqLywK
IAkJCQlCOERCREI0OTEzMEIwRjhBMDBGNUNEQjEgLyogU3BlbGxpbmdDb3JyZWN0aW9uQ29tbWFu
ZC5jcHAgKi8sCiAJCQkJQjhEQkRCNEExMzBCMEY4QTAwRjVDREIxIC8qIFNwZWxsaW5nQ29ycmVj
dGlvbkNvbW1hbmQuaCAqLywKLQkJCQlBNzAwNUNDQTEzMzBDNEJBMDAwQ0MwQkEgLyogU3BlbGxp
bmdDb3JyZWN0aW9uQ29udHJvbGxlci5jcHAgKi8sCi0JCQkJQTcwMDVDQ0IxMzMwQzRCQTAwMEND
MEJBIC8qIFNwZWxsaW5nQ29ycmVjdGlvbkNvbnRyb2xsZXIuaCAqLywKIAkJCQk5MzMwOURDMjA5
OUU2NDkxMDA1NkU1ODEgLyogU3BsaXRFbGVtZW50Q29tbWFuZC5jcHAgKi8sCiAJCQkJOTMzMDlE
QzMwOTlFNjQ5MTAwNTZFNTgxIC8qIFNwbGl0RWxlbWVudENvbW1hbmQuaCAqLywKIAkJCQk5MzMw
OURDNDA5OUU2NDkxMDA1NkU1ODEgLyogU3BsaXRUZXh0Tm9kZUNvbW1hbmQuY3BwICovLApAQCAt
MjE1MTksNiArMjE1MTksNyBAQAogCQkJaXNhID0gUEJYSGVhZGVyc0J1aWxkUGhhc2U7CiAJCQli
dWlsZEFjdGlvbk1hc2sgPSAyMTQ3NDgzNjQ3OwogCQkJZmlsZXMgPSAoCisJCQkJQ0VEQjNDRUYx
NTJBNzRBNzAwOEYzNkQ0IC8qIEFsdGVybmF0aXZlVGV4dENvbnRyb2xsZXIuaCBpbiBIZWFkZXJz
ICovLAogCQkJCUU0QzE3ODlCMEVFNjkwMzgwMDgyNEQ2OSAvKiBDU1NTZWxlY3Rvckxpc3QuaCBp
biBIZWFkZXJzICovLAogCQkJCUU0QkJFRDREMTRGQ0RCQTEwMDNGMEI5OCAvKiBTdHlsZVJ1bGUu
aCBpbiBIZWFkZXJzICovLAogCQkJCTk3QkM2OURCMTUwNUYwNzYwMDFCNzRBQyAvKiBBYnN0cmFj
dERhdGFiYXNlLmggaW4gSGVhZGVycyAqLywKQEAgLTI0MTA1LDcgKzI0MTA2LDYgQEAKIAkJCQk3
NTQxNUIwMDEyOTU4RDVFMDAzQUQ2NjkgLyogU3BlZWNoSW5wdXRSZXN1bHRMaXN0LmggaW4gSGVh
ZGVycyAqLywKIAkJCQlBNzhGRTEzQzEyMzY2QjEwMDBBQ0U4RDAgLyogU3BlbGxDaGVja2VyLmgg
aW4gSGVhZGVycyAqLywKIAkJCQlCOERCREI0RTEzMEIwRjhBMDBGNUNEQjEgLyogU3BlbGxpbmdD
b3JyZWN0aW9uQ29tbWFuZC5oIGluIEhlYWRlcnMgKi8sCi0JCQkJQTcwMDVDQ0QxMzMwQzRCQTAw
MENDMEJBIC8qIFNwZWxsaW5nQ29ycmVjdGlvbkNvbnRyb2xsZXIuaCBpbiBIZWFkZXJzICovLAog
CQkJCTkzMzA5RTEyMDk5RTY0OTIwMDU2RTU4MSAvKiBTcGxpdEVsZW1lbnRDb21tYW5kLmggaW4g
SGVhZGVycyAqLywKIAkJCQk5MzMwOUUxNDA5OUU2NDkyMDA1NkU1ODEgLyogU3BsaXRUZXh0Tm9k
ZUNvbW1hbmQuaCBpbiBIZWFkZXJzICovLAogCQkJCTkzMzA5RTE2MDk5RTY0OTIwMDU2RTU4MSAv
KiBTcGxpdFRleHROb2RlQ29udGFpbmluZ0VsZW1lbnRDb21tYW5kLmggaW4gSGVhZGVycyAqLywK
QEAgLTI0NjkzLDEwICsyNDY5MywxMCBAQAogCQkJCTkzRjE5OUVEMDgyNDVFNTkwMDFFOUFCQyAv
KiBYU0xUUHJvY2Vzc29yLmggaW4gSGVhZGVycyAqLywKIAkJCQlFMUJFNTEyRTBDRjZDNTEyMDAy
RUE5NTkgLyogWFNMVFVuaWNvZGVTb3J0LmggaW4gSGVhZGVycyAqLywKIAkJCQk5NzdFMkUwRjEy
RjBGQzlDMDBDMTMzNzkgLyogWFNTQXVkaXRvci5oIGluIEhlYWRlcnMgKi8sCi0gICAgICAgICAg
ICAgICAgRkQ1ODFGQUYxNTIwRjkxRjAwM0E3QTc1IC8qIE9zY2lsbGF0b3IuaCBpbiBIZWFkZXJz
ICovLAotICAgICAgICAgICAgICAgIEZENTgxRkI1MTUyMEY5M0IwMDNBN0E3NSAvKiBXYXZlVGFi
bGUuaCBpbiBIZWFkZXJzICovLAotICAgICAgICAgICAgICAgIEZERUE2MjQzMTUyMTAyRTIwMDQ3
OURGMCAvKiBKU09zY2lsbGF0b3IuaCBpbiBIZWFkZXJzICovLAotICAgICAgICAgICAgICAgIEZE
RUE2MjQ3MTUyMTAyRkMwMDQ3OURGMCAvKiBKU1dhdmVUYWJsZS5oIGluIEhlYWRlcnMgKi8sCisJ
CQkJRkQ1ODFGQUYxNTIwRjkxRjAwM0E3QTc1IC8qIE9zY2lsbGF0b3IuaCBpbiBIZWFkZXJzICov
LAorCQkJCUZENTgxRkI1MTUyMEY5M0IwMDNBN0E3NSAvKiBXYXZlVGFibGUuaCBpbiBIZWFkZXJz
ICovLAorCQkJCUZERUE2MjQzMTUyMTAyRTIwMDQ3OURGMCAvKiBKU09zY2lsbGF0b3IuaCBpbiBI
ZWFkZXJzICovLAorCQkJCUZERUE2MjQ3MTUyMTAyRkMwMDQ3OURGMCAvKiBKU1dhdmVUYWJsZS5o
IGluIEhlYWRlcnMgKi8sCiAJCQkJRkQ1MzczNTMxMzdCNjUxODAwMDA4RENFIC8qIFplcm9Qb2xl
LmggaW4gSGVhZGVycyAqLywKIAkJCQkxQTM1ODZFMDE1MjY0QzQ1MDAyMkE2NTkgLyogUmVuZGVy
TXVsdGlDb2x1bW5GbG93VGhyZWFkLmggaW4gSGVhZGVycyAqLywKIAkJCQlFMUIyNTEwNzE1MkEw
QkIwMDA2OUI3NzkgLyogU3R5bGVQcm9wZXJ0eVNob3J0aGFuZC5oIGluIEhlYWRlcnMgKi8sCkBA
IC0yNzIyMiw3ICsyNzIyMiw2IEBACiAJCQkJNzU0MTVDMjkxMjlBOTkyMDAwM0FENjY5IC8qIFNw
ZWVjaElucHV0UmVzdWx0TGlzdC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlBNzhGRTEzQjEyMzY2
QjEwMDBBQ0U4RDAgLyogU3BlbGxDaGVja2VyLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUI4REJE
QjREMTMwQjBGOEEwMEY1Q0RCMSAvKiBTcGVsbGluZ0NvcnJlY3Rpb25Db21tYW5kLmNwcCBpbiBT
b3VyY2VzICovLAotCQkJCUE3MDA1Q0NDMTMzMEM0QkEwMDBDQzBCQSAvKiBTcGVsbGluZ0NvcnJl
Y3Rpb25Db250cm9sbGVyLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTkzMzA5RTExMDk5RTY0OTIw
MDU2RTU4MSAvKiBTcGxpdEVsZW1lbnRDb21tYW5kLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTkz
MzA5RTEzMDk5RTY0OTIwMDU2RTU4MSAvKiBTcGxpdFRleHROb2RlQ29tbWFuZC5jcHAgaW4gU291
cmNlcyAqLywKIAkJCQk5MzMwOUUxNTA5OUU2NDkyMDA1NkU1ODEgLyogU3BsaXRUZXh0Tm9kZUNv
bnRhaW5pbmdFbGVtZW50Q29tbWFuZC5jcHAgaW4gU291cmNlcyAqLywKQEAgLTI3Njk1LDYgKzI3
Njk0LDcgQEAKIAkJCQkxQTM1ODZFMTE1MjY0Rjk1MDAyMkE2NTkgLyogU1ZHQW5pbWF0ZWRJbnRl
Z2VyT3B0aW9uYWxJbnRlZ2VyLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTFBM0ZGOUMzMTUyNjUz
NTkwMDIyODhBMSAvKiBSZW5kZXJOYW1lZEZsb3dUaHJlYWQuY3BwIGluIFNvdXJjZXMgKi8sCiAJ
CQkJRTFCMjUxMDYxNTJBMEJBRjAwNjlCNzc5IC8qIFN0eWxlUHJvcGVydHlTaG9ydGhhbmQuY3Bw
IGluIFNvdXJjZXMgKi8sCisJCQkJQ0VEQjNDRUUxNTJBNzRBNzAwOEYzNkQ0IC8qIEFsdGVybmF0
aXZlVGV4dENvbnRyb2xsZXIuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkpOwogCQkJcnVuT25seUZv
ckRlcGxveW1lbnRQb3N0cHJvY2Vzc2luZyA9IDA7CiAJCX07CkluZGV4OiBTb3VyY2UvV2ViQ29y
ZS9lZGl0aW5nL0FsdGVybmF0aXZlVGV4dENvbnRyb2xsZXIuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9XZWJDb3JlL2VkaXRpbmcvQWx0ZXJuYXRpdmVUZXh0Q29udHJvbGxlci5jcHAJKHJldmlz
aW9uIDExMjgzMCkJKGZyb20gU291cmNlL1dlYkNvcmUvZWRpdGluZy9TcGVsbGluZ0NvcnJlY3Rp
b25Db250cm9sbGVyLmNwcDoxMTI4MzApCisrKyBTb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0FsdGVy
bmF0aXZlVGV4dENvbnRyb2xsZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNTY1IEBA
CisvKgorICogQ29weXJpZ2h0IChDKSAyMDA2LCAyMDA3LCAyMDA4IEFwcGxlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAwOCBOb2tpYSBDb3Jwb3JhdGlvbiBh
bmQvb3IgaXRzIHN1YnNpZGlhcnkoLWllcykKKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNl
IGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNh
dGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9u
cworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0
IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1
dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAor
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJp
YWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJF
IElTIFBST1ZJREVEIEJZIEFQUExFIENPTVBVVEVSLCBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisg
KiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQg
RklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4g
Tk8gRVZFTlQgU0hBTEwgQVBQTEUgQ09NUFVURVIsIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBC
RSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAor
ICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJW
SUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRF
UlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJ
VFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJ
TkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQg
T0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQ
T1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgor
I2luY2x1ZGUgIlNwZWxsaW5nQ29ycmVjdGlvbkNvbnRyb2xsZXIuaCIKKworI2luY2x1ZGUgIkRv
Y3VtZW50TWFya2VyQ29udHJvbGxlci5oIgorI2luY2x1ZGUgIkVkaXRDb21tYW5kLmgiCisjaW5j
bHVkZSAiRWRpdG9yQ2xpZW50LmgiCisjaW5jbHVkZSAiRmxvYXRRdWFkLmgiCisjaW5jbHVkZSAi
RnJhbWUuaCIKKyNpbmNsdWRlICJGcmFtZVZpZXcuaCIKKyNpbmNsdWRlICJQYWdlLmgiCisjaW5j
bHVkZSAiU3BlbGxpbmdDb3JyZWN0aW9uQ29tbWFuZC5oIgorI2luY2x1ZGUgIlRleHRDaGVja2Vy
Q2xpZW50LmgiCisjaW5jbHVkZSAiVGV4dENoZWNraW5nSGVscGVyLmgiCisjaW5jbHVkZSAiVGV4
dEl0ZXJhdG9yLmgiCisjaW5jbHVkZSAiVmlzaWJsZVNlbGVjdGlvbi5oIgorI2luY2x1ZGUgImh0
bWxlZGl0aW5nLmgiCisjaW5jbHVkZSAibWFya3VwLmgiCisjaW5jbHVkZSAidmlzaWJsZV91bml0
cy5oIgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK3VzaW5nIG5hbWVzcGFjZSBzdGQ7Cit1c2lu
ZyBuYW1lc3BhY2UgV1RGOworCisjaWYgVVNFKEFVVE9DT1JSRUNUSU9OX1BBTkVMKQorCitzdGF0
aWMgY29uc3QgVmVjdG9yPERvY3VtZW50TWFya2VyOjpNYXJrZXJUeXBlPiYgbWFya2VyVHlwZXNG
b3JBdXRvY29ycmVjdGlvbigpCit7CisgICAgREVGSU5FX1NUQVRJQ19MT0NBTChWZWN0b3I8RG9j
dW1lbnRNYXJrZXI6Ok1hcmtlclR5cGU+LCBtYXJrZXJUeXBlc0ZvckF1dG9Db3JyZWN0aW9uLCAo
KSk7CisgICAgaWYgKG1hcmtlclR5cGVzRm9yQXV0b0NvcnJlY3Rpb24uaXNFbXB0eSgpKSB7Cisg
ICAgICAgIG1hcmtlclR5cGVzRm9yQXV0b0NvcnJlY3Rpb24uYXBwZW5kKERvY3VtZW50TWFya2Vy
OjpSZXBsYWNlbWVudCk7CisgICAgICAgIG1hcmtlclR5cGVzRm9yQXV0b0NvcnJlY3Rpb24uYXBw
ZW5kKERvY3VtZW50TWFya2VyOjpDb3JyZWN0aW9uSW5kaWNhdG9yKTsKKyAgICAgICAgbWFya2Vy
VHlwZXNGb3JBdXRvQ29ycmVjdGlvbi5hcHBlbmQoRG9jdW1lbnRNYXJrZXI6OlNwZWxsQ2hlY2tp
bmdFeGVtcHRpb24pOworICAgICAgICBtYXJrZXJUeXBlc0ZvckF1dG9Db3JyZWN0aW9uLmFwcGVu
ZChEb2N1bWVudE1hcmtlcjo6QXV0b2NvcnJlY3RlZCk7CisgICAgfQorICAgIHJldHVybiBtYXJr
ZXJUeXBlc0ZvckF1dG9Db3JyZWN0aW9uOworfQorCitzdGF0aWMgY29uc3QgVmVjdG9yPERvY3Vt
ZW50TWFya2VyOjpNYXJrZXJUeXBlPiYgbWFya2VyVHlwZXNGb3JSZXBsYWNlbWVudCgpCit7Cisg
ICAgREVGSU5FX1NUQVRJQ19MT0NBTChWZWN0b3I8RG9jdW1lbnRNYXJrZXI6Ok1hcmtlclR5cGU+
LCBtYXJrZXJUeXBlc0ZvclJlcGxhY2VtZW50LCAoKSk7CisgICAgaWYgKG1hcmtlclR5cGVzRm9y
UmVwbGFjZW1lbnQuaXNFbXB0eSgpKSB7CisgICAgICAgIG1hcmtlclR5cGVzRm9yUmVwbGFjZW1l
bnQuYXBwZW5kKERvY3VtZW50TWFya2VyOjpSZXBsYWNlbWVudCk7CisgICAgICAgIG1hcmtlclR5
cGVzRm9yUmVwbGFjZW1lbnQuYXBwZW5kKERvY3VtZW50TWFya2VyOjpTcGVsbENoZWNraW5nRXhl
bXB0aW9uKTsKKyAgICB9CisgICAgcmV0dXJuIG1hcmtlclR5cGVzRm9yUmVwbGFjZW1lbnQ7Cit9
CisKK3N0YXRpYyBib29sIG1hcmtlcnNIYXZlSWRlbnRpY2FsRGVzY3JpcHRpb24oY29uc3QgVmVj
dG9yPERvY3VtZW50TWFya2VyKj4mIG1hcmtlcnMpCit7CisgICAgaWYgKG1hcmtlcnMuaXNFbXB0
eSgpKQorICAgICAgICByZXR1cm4gdHJ1ZTsKKworICAgIGNvbnN0IFN0cmluZyYgZGVzY3JpcHRp
b24gPSBtYXJrZXJzWzBdLT5kZXNjcmlwdGlvbigpOworICAgIGZvciAoc2l6ZV90IGkgPSAxOyBp
IDwgbWFya2Vycy5zaXplKCk7ICsraSkgeworICAgICAgICBpZiAoZGVzY3JpcHRpb24gIT0gbWFy
a2Vyc1tpXS0+ZGVzY3JpcHRpb24oKSkKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9
CisgICAgcmV0dXJuIHRydWU7Cit9CisKK1NwZWxsaW5nQ29ycmVjdGlvbkNvbnRyb2xsZXI6OlNw
ZWxsaW5nQ29ycmVjdGlvbkNvbnRyb2xsZXIoRnJhbWUqIGZyYW1lKQorICAgIDogbV9mcmFtZShm
cmFtZSkKKyAgICAsIG1fY29ycmVjdGlvblBhbmVsVGltZXIodGhpcywgJlNwZWxsaW5nQ29ycmVj
dGlvbkNvbnRyb2xsZXI6OmNvcnJlY3Rpb25QYW5lbFRpbWVyRmlyZWQpCit7Cit9CisKK1NwZWxs
aW5nQ29ycmVjdGlvbkNvbnRyb2xsZXI6On5TcGVsbGluZ0NvcnJlY3Rpb25Db250cm9sbGVyKCkK
K3sKKyAgICBkaXNtaXNzKFJlYXNvbkZvckRpc21pc3NpbmdDb3JyZWN0aW9uUGFuZWxJZ25vcmVk
KTsKK30KKwordm9pZCBTcGVsbGluZ0NvcnJlY3Rpb25Db250cm9sbGVyOjpzdGFydENvcnJlY3Rp
b25QYW5lbFRpbWVyKENvcnJlY3Rpb25QYW5lbEluZm86OlBhbmVsVHlwZSB0eXBlKQoreworICAg
IGNvbnN0IGRvdWJsZSBjb3JyZWN0aW9uUGFuZWxUaW1lckludGVydmFsID0gMC4zOworICAgIGlm
ICghaXNBdXRvbWF0aWNTcGVsbGluZ0NvcnJlY3Rpb25FbmFibGVkKCkpCisgICAgICAgIHJldHVy
bjsKKworICAgIC8vIElmIHR5cGUgaXMgUGFuZWxUeXBlUmV2ZXJzaW9uLCB0aGVuIHRoZSBuZXcg
cmFuZ2UgaGFzIGJlZW4gc2V0LiBTbyB3ZSBzaG91bGRuJ3QgY2xlYXIgaXQuCisgICAgaWYgKHR5
cGUgPT0gQ29ycmVjdGlvblBhbmVsSW5mbzo6UGFuZWxUeXBlQ29ycmVjdGlvbikKKyAgICAgICAg
bV9jb3JyZWN0aW9uUGFuZWxJbmZvLnJhbmdlVG9CZVJlcGxhY2VkLmNsZWFyKCk7CisgICAgbV9j
b3JyZWN0aW9uUGFuZWxJbmZvLnBhbmVsVHlwZSA9IHR5cGU7CisgICAgbV9jb3JyZWN0aW9uUGFu
ZWxUaW1lci5zdGFydE9uZVNob3QoY29ycmVjdGlvblBhbmVsVGltZXJJbnRlcnZhbCk7Cit9CisK
K3ZvaWQgU3BlbGxpbmdDb3JyZWN0aW9uQ29udHJvbGxlcjo6c3RvcENvcnJlY3Rpb25QYW5lbFRp
bWVyKCkKK3sKKyAgICBtX2NvcnJlY3Rpb25QYW5lbFRpbWVyLnN0b3AoKTsKKyAgICBtX2NvcnJl
Y3Rpb25QYW5lbEluZm8ucmFuZ2VUb0JlUmVwbGFjZWQuY2xlYXIoKTsKK30KKwordm9pZCBTcGVs
bGluZ0NvcnJlY3Rpb25Db250cm9sbGVyOjpzdG9wUGVuZGluZ0NvcnJlY3Rpb24oY29uc3QgVmlz
aWJsZVNlbGVjdGlvbiYgb2xkU2VsZWN0aW9uKQoreworICAgIC8vIE1ha2Ugc3VyZSB0aGVyZSdz
IG5vIHBlbmRpbmcgYXV0b2NvcnJlY3Rpb24gYmVmb3JlIHdlIGNhbGwgbWFya01pc3NwZWxsaW5n
c0FuZEJhZEdyYW1tYXIoKSBiZWxvdy4KKyAgICBWaXNpYmxlU2VsZWN0aW9uIGN1cnJlbnRTZWxl
Y3Rpb24obV9mcmFtZS0+c2VsZWN0aW9uKCktPnNlbGVjdGlvbigpKTsKKyAgICBpZiAoY3VycmVu
dFNlbGVjdGlvbiA9PSBvbGRTZWxlY3Rpb24pCisgICAgICAgIHJldHVybjsKKworICAgIHN0b3BD
b3JyZWN0aW9uUGFuZWxUaW1lcigpOworICAgIGRpc21pc3MoUmVhc29uRm9yRGlzbWlzc2luZ0Nv
cnJlY3Rpb25QYW5lbElnbm9yZWQpOworfQorCit2b2lkIFNwZWxsaW5nQ29ycmVjdGlvbkNvbnRy
b2xsZXI6OmFwcGx5UGVuZGluZ0NvcnJlY3Rpb24oY29uc3QgVmlzaWJsZVNlbGVjdGlvbiYgc2Vs
ZWN0aW9uQWZ0ZXJUeXBpbmcpCit7CisgICAgLy8gQXBwbHkgcGVuZGluZyBhdXRvY29ycmVjdGlv
biBiZWZvcmUgbmV4dCByb3VuZCBvZiBzcGVsbCBjaGVja2luZy4KKyAgICBib29sIGRvQXBwbHlD
b3JyZWN0aW9uID0gdHJ1ZTsKKyAgICBWaXNpYmxlUG9zaXRpb24gc3RhcnRPZlNlbGVjdGlvbiA9
IHNlbGVjdGlvbkFmdGVyVHlwaW5nLnZpc2libGVTdGFydCgpOworICAgIFZpc2libGVTZWxlY3Rp
b24gY3VycmVudFdvcmQgPSBWaXNpYmxlU2VsZWN0aW9uKHN0YXJ0T2ZXb3JkKHN0YXJ0T2ZTZWxl
Y3Rpb24sIExlZnRXb3JkSWZPbkJvdW5kYXJ5KSwgZW5kT2ZXb3JkKHN0YXJ0T2ZTZWxlY3Rpb24s
IFJpZ2h0V29yZElmT25Cb3VuZGFyeSkpOworICAgIGlmIChjdXJyZW50V29yZC52aXNpYmxlRW5k
KCkgPT0gc3RhcnRPZlNlbGVjdGlvbikgeworICAgICAgICBTdHJpbmcgd29yZFRleHQgPSBwbGFp
blRleHQoY3VycmVudFdvcmQudG9Ob3JtYWxpemVkUmFuZ2UoKS5nZXQoKSk7CisgICAgICAgIGlm
ICh3b3JkVGV4dC5sZW5ndGgoKSA+IDAgJiYgaXNBbWJpZ3VvdXNCb3VuZGFyeUNoYXJhY3Rlcih3
b3JkVGV4dFt3b3JkVGV4dC5sZW5ndGgoKSAtIDFdKSkKKyAgICAgICAgICAgIGRvQXBwbHlDb3Jy
ZWN0aW9uID0gZmFsc2U7CisgICAgfQorICAgIGlmIChkb0FwcGx5Q29ycmVjdGlvbikKKyAgICAg
ICAgaGFuZGxlQ29ycmVjdGlvblBhbmVsUmVzdWx0KGRpc21pc3NTb29uKFJlYXNvbkZvckRpc21p
c3NpbmdDb3JyZWN0aW9uUGFuZWxBY2NlcHRlZCkpOyAKKyAgICBlbHNlCisgICAgICAgIG1fY29y
cmVjdGlvblBhbmVsSW5mby5yYW5nZVRvQmVSZXBsYWNlZC5jbGVhcigpOworfQorCitib29sIFNw
ZWxsaW5nQ29ycmVjdGlvbkNvbnRyb2xsZXI6Omhhc1BlbmRpbmdDb3JyZWN0aW9uKCkgY29uc3QK
K3sKKyAgICByZXR1cm4gbV9jb3JyZWN0aW9uUGFuZWxJbmZvLnJhbmdlVG9CZVJlcGxhY2VkOwor
fQorCitib29sIFNwZWxsaW5nQ29ycmVjdGlvbkNvbnRyb2xsZXI6OmlzU3BlbGxpbmdNYXJrZXJB
bGxvd2VkKFBhc3NSZWZQdHI8UmFuZ2U+IG1pc3NwZWxsaW5nUmFuZ2UpIGNvbnN0Cit7CisgICAg
cmV0dXJuICFtX2ZyYW1lLT5kb2N1bWVudCgpLT5tYXJrZXJzKCktPmhhc01hcmtlcnMobWlzc3Bl
bGxpbmdSYW5nZS5nZXQoKSwgRG9jdW1lbnRNYXJrZXI6OlNwZWxsQ2hlY2tpbmdFeGVtcHRpb24p
OworfQorCit2b2lkIFNwZWxsaW5nQ29ycmVjdGlvbkNvbnRyb2xsZXI6OnNob3coUGFzc1JlZlB0
cjxSYW5nZT4gcmFuZ2VUb1JlcGxhY2UsIGNvbnN0IFN0cmluZyYgcmVwbGFjZW1lbnQpCit7Cisg
ICAgRmxvYXRSZWN0IGJvdW5kaW5nQm94ID0gcm9vdFZpZXdSZWN0Rm9yUmFuZ2UocmFuZ2VUb1Jl
cGxhY2UuZ2V0KCkpOworICAgIGlmIChib3VuZGluZ0JveC5pc0VtcHR5KCkpCisgICAgICAgIHJl
dHVybjsKKyAgICBtX2NvcnJlY3Rpb25QYW5lbEluZm8ucmVwbGFjZWRTdHJpbmcgPSBwbGFpblRl
eHQocmFuZ2VUb1JlcGxhY2UuZ2V0KCkpOworICAgIG1fY29ycmVjdGlvblBhbmVsSW5mby5yYW5n
ZVRvQmVSZXBsYWNlZCA9IHJhbmdlVG9SZXBsYWNlOworICAgIG1fY29ycmVjdGlvblBhbmVsSW5m
by5yZXBsYWNlbWVudFN0cmluZyA9IHJlcGxhY2VtZW50OworICAgIG1fY29ycmVjdGlvblBhbmVs
SW5mby5pc0FjdGl2ZSA9IHRydWU7CisgICAgY2xpZW50KCktPnNob3dDb3JyZWN0aW9uUGFuZWwo
bV9jb3JyZWN0aW9uUGFuZWxJbmZvLnBhbmVsVHlwZSwgYm91bmRpbmdCb3gsIG1fY29ycmVjdGlv
blBhbmVsSW5mby5yZXBsYWNlZFN0cmluZywgcmVwbGFjZW1lbnQsIFZlY3RvcjxTdHJpbmc+KCkp
OworfQorCit2b2lkIFNwZWxsaW5nQ29ycmVjdGlvbkNvbnRyb2xsZXI6OmhhbmRsZUNhbmNlbE9w
ZXJhdGlvbigpCit7CisgICAgaWYgKCFtX2NvcnJlY3Rpb25QYW5lbEluZm8uaXNBY3RpdmUpCisg
ICAgICAgIHJldHVybjsKKyAgICBtX2NvcnJlY3Rpb25QYW5lbEluZm8uaXNBY3RpdmUgPSBmYWxz
ZTsKKyAgICBkaXNtaXNzKFJlYXNvbkZvckRpc21pc3NpbmdDb3JyZWN0aW9uUGFuZWxDYW5jZWxs
ZWQpOworfQorCit2b2lkIFNwZWxsaW5nQ29ycmVjdGlvbkNvbnRyb2xsZXI6OmRpc21pc3MoUmVh
c29uRm9yRGlzbWlzc2luZ0NvcnJlY3Rpb25QYW5lbCByZWFzb25Gb3JEaXNtaXNzaW5nKQorewor
ICAgIGlmICghbV9jb3JyZWN0aW9uUGFuZWxJbmZvLmlzQWN0aXZlKQorICAgICAgICByZXR1cm47
CisgICAgbV9jb3JyZWN0aW9uUGFuZWxJbmZvLmlzQWN0aXZlID0gZmFsc2U7CisgICAgbV9jb3Jy
ZWN0aW9uUGFuZWxJc0Rpc21pc3NlZEJ5RWRpdG9yID0gdHJ1ZTsKKyAgICBpZiAoY2xpZW50KCkp
CisgICAgICAgIGNsaWVudCgpLT5kaXNtaXNzQ29ycmVjdGlvblBhbmVsKHJlYXNvbkZvckRpc21p
c3NpbmcpOworfQorCitTdHJpbmcgU3BlbGxpbmdDb3JyZWN0aW9uQ29udHJvbGxlcjo6ZGlzbWlz
c1Nvb24oUmVhc29uRm9yRGlzbWlzc2luZ0NvcnJlY3Rpb25QYW5lbCByZWFzb25Gb3JEaXNtaXNz
aW5nKQoreworICAgIGlmICghbV9jb3JyZWN0aW9uUGFuZWxJbmZvLmlzQWN0aXZlKQorICAgICAg
ICByZXR1cm4gU3RyaW5nKCk7CisgICAgbV9jb3JyZWN0aW9uUGFuZWxJbmZvLmlzQWN0aXZlID0g
ZmFsc2U7CisgICAgbV9jb3JyZWN0aW9uUGFuZWxJc0Rpc21pc3NlZEJ5RWRpdG9yID0gdHJ1ZTsK
KyAgICBpZiAoIWNsaWVudCgpKQorICAgICAgICByZXR1cm4gU3RyaW5nKCk7CisgICAgcmV0dXJu
IGNsaWVudCgpLT5kaXNtaXNzQ29ycmVjdGlvblBhbmVsU29vbihyZWFzb25Gb3JEaXNtaXNzaW5n
KTsKK30KKwordm9pZCBTcGVsbGluZ0NvcnJlY3Rpb25Db250cm9sbGVyOjphcHBseUNvcnJlY3Rp
b25QYW5lbEluZm8oY29uc3QgVmVjdG9yPERvY3VtZW50TWFya2VyOjpNYXJrZXJUeXBlPiYgbWFy
a2VyVHlwZXNUb0FkZCkKK3sKKyAgICBpZiAoIW1fY29ycmVjdGlvblBhbmVsSW5mby5yYW5nZVRv
QmVSZXBsYWNlZCkKKyAgICAgICAgcmV0dXJuOworCisgICAgRXhjZXB0aW9uQ29kZSBlYyA9IDA7
CisgICAgUmVmUHRyPFJhbmdlPiBwYXJhZ3JhcGhSYW5nZUNvbnRhaW5pbmdDb3JyZWN0aW9uID0g
bV9jb3JyZWN0aW9uUGFuZWxJbmZvLnJhbmdlVG9CZVJlcGxhY2VkLT5jbG9uZVJhbmdlKGVjKTsK
KyAgICBpZiAoZWMpCisgICAgICAgIHJldHVybjsKKworICAgIHNldFN0YXJ0KHBhcmFncmFwaFJh
bmdlQ29udGFpbmluZ0NvcnJlY3Rpb24uZ2V0KCksIHN0YXJ0T2ZQYXJhZ3JhcGgobV9jb3JyZWN0
aW9uUGFuZWxJbmZvLnJhbmdlVG9CZVJlcGxhY2VkLT5zdGFydFBvc2l0aW9uKCkpKTsKKyAgICBz
ZXRFbmQocGFyYWdyYXBoUmFuZ2VDb250YWluaW5nQ29ycmVjdGlvbi5nZXQoKSwgZW5kT2ZQYXJh
Z3JhcGgobV9jb3JyZWN0aW9uUGFuZWxJbmZvLnJhbmdlVG9CZVJlcGxhY2VkLT5lbmRQb3NpdGlv
bigpKSk7CisKKyAgICAvLyBBZnRlciB3ZSByZXBsYWNlIHRoZSB3b3JkIGF0IHJhbmdlIHJhbmdl
VG9CZVJlcGxhY2VkLCB3ZSBuZWVkIHRvIGFkZCBtYXJrZXJzIHRvIHRoYXQgcmFuZ2UuCisgICAg
Ly8gSG93ZXZlciwgb25jZSB0aGUgcmVwbGFjZW1lbnQgdG9vayBwbGFjZSwgdGhlIHZhbHVlIG9m
IHJhbmdlVG9CZVJlcGxhY2VkIGlzIG5vdCB2YWxpZCBhbnltb3JlLgorICAgIC8vIFNvIGJlZm9y
ZSB3ZSBjYXJyeSBvdXQgdGhlIHJlcGxhY2VtZW50LCB3ZSBuZWVkIHRvIHN0b3JlIHRoZSBzdGFy
dCBwb3NpdGlvbiBvZiByYW5nZVRvQmVSZXBsYWNlZAorICAgIC8vIHJlbGF0aXZlIHRvIHRoZSBz
dGFydCBwb3NpdGlvbiBvZiB0aGUgY29udGFpbmluZyBwYXJhZ3JhcGguIFdlIHVzZSBjb3JyZWN0
aW9uU3RhcnRPZmZzZXRJblBhcmFncmFwaAorICAgIC8vIHRvIHN0b3JlIHRoaXMgdmFsdWUuIElu
IG9yZGVyIHRvIG9idGFpbiB0aGlzIG9mZnNldCwgd2UgbmVlZCB0byBmaXJzdCBjcmVhdGUgYSBy
YW5nZQorICAgIC8vIHdoaWNoIHNwYW5zIGZyb20gdGhlIHN0YXJ0IG9mIHBhcmFncmFwaCB0byB0
aGUgc3RhcnQgcG9zaXRpb24gb2YgcmFuZ2VUb0JlUmVwbGFjZWQuCisgICAgUmVmUHRyPFJhbmdl
PiBjb3JyZWN0aW9uU3RhcnRPZmZzZXRJblBhcmFncmFwaEFzUmFuZ2UgPSBSYW5nZTo6Y3JlYXRl
KHBhcmFncmFwaFJhbmdlQ29udGFpbmluZ0NvcnJlY3Rpb24tPnN0YXJ0Q29udGFpbmVyKGVjKS0+
ZG9jdW1lbnQoKSwgcGFyYWdyYXBoUmFuZ2VDb250YWluaW5nQ29ycmVjdGlvbi0+c3RhcnRQb3Np
dGlvbigpLCBwYXJhZ3JhcGhSYW5nZUNvbnRhaW5pbmdDb3JyZWN0aW9uLT5zdGFydFBvc2l0aW9u
KCkpOworICAgIGlmIChlYykKKyAgICAgICAgcmV0dXJuOworCisgICAgUG9zaXRpb24gc3RhcnRQ
b3NpdGlvbk9mUmFuZ2VUb0JlUmVwbGFjZWQgPSBtX2NvcnJlY3Rpb25QYW5lbEluZm8ucmFuZ2VU
b0JlUmVwbGFjZWQtPnN0YXJ0UG9zaXRpb24oKTsKKyAgICBjb3JyZWN0aW9uU3RhcnRPZmZzZXRJ
blBhcmFncmFwaEFzUmFuZ2UtPnNldEVuZChzdGFydFBvc2l0aW9uT2ZSYW5nZVRvQmVSZXBsYWNl
ZC5jb250YWluZXJOb2RlKCksIHN0YXJ0UG9zaXRpb25PZlJhbmdlVG9CZVJlcGxhY2VkLmNvbXB1
dGVPZmZzZXRJbkNvbnRhaW5lck5vZGUoKSwgZWMpOworICAgIGlmIChlYykKKyAgICAgICAgcmV0
dXJuOworCisgICAgLy8gVGFrZSBub3RlIG9mIHRoZSBsb2NhdGlvbiBvZiBhdXRvY29ycmVjdGlv
biBzbyB0aGF0IHdlIGNhbiBhZGQgbWFya2VyIGFmdGVyIHRoZSByZXBsYWNlbWVudCB0b29rIHBs
YWNlLgorICAgIGludCBjb3JyZWN0aW9uU3RhcnRPZmZzZXRJblBhcmFncmFwaCA9IFRleHRJdGVy
YXRvcjo6cmFuZ2VMZW5ndGgoY29ycmVjdGlvblN0YXJ0T2Zmc2V0SW5QYXJhZ3JhcGhBc1Jhbmdl
LmdldCgpKTsKKworICAgIC8vIENsb25lIHRoZSByYW5nZSwgc2luY2UgdGhlIGNhbGxlciBvZiB0
aGlzIG1ldGhvZCBtYXkgd2FudCB0byBrZWVwIHRoZSBvcmlnaW5hbCByYW5nZSBhcm91bmQuCisg
ICAgUmVmUHRyPFJhbmdlPiByYW5nZVRvQmVSZXBsYWNlZCA9IG1fY29ycmVjdGlvblBhbmVsSW5m
by5yYW5nZVRvQmVSZXBsYWNlZC0+Y2xvbmVSYW5nZShlYyk7CisgICAgYXBwbHlDb21tYW5kKFNw
ZWxsaW5nQ29ycmVjdGlvbkNvbW1hbmQ6OmNyZWF0ZShyYW5nZVRvQmVSZXBsYWNlZCwgbV9jb3Jy
ZWN0aW9uUGFuZWxJbmZvLnJlcGxhY2VtZW50U3RyaW5nKSk7CisgICAgc2V0RW5kKHBhcmFncmFw
aFJhbmdlQ29udGFpbmluZ0NvcnJlY3Rpb24uZ2V0KCksIG1fZnJhbWUtPnNlbGVjdGlvbigpLT5z
ZWxlY3Rpb24oKS5zdGFydCgpKTsKKyAgICBSZWZQdHI8UmFuZ2U+IHJlcGxhY2VtZW50UmFuZ2Ug
PSBUZXh0SXRlcmF0b3I6OnN1YnJhbmdlKHBhcmFncmFwaFJhbmdlQ29udGFpbmluZ0NvcnJlY3Rp
b24uZ2V0KCksIGNvcnJlY3Rpb25TdGFydE9mZnNldEluUGFyYWdyYXBoLCAgbV9jb3JyZWN0aW9u
UGFuZWxJbmZvLnJlcGxhY2VtZW50U3RyaW5nLmxlbmd0aCgpKTsKKyAgICBTdHJpbmcgbmV3VGV4
dCA9IHBsYWluVGV4dChyZXBsYWNlbWVudFJhbmdlLmdldCgpKTsKKworICAgIC8vIENoZWNrIHRv
IHNlZSBpZiByZXBsYWNlbWVudCBzdWNjZWVkZWQuCisgICAgaWYgKG5ld1RleHQgIT0gbV9jb3Jy
ZWN0aW9uUGFuZWxJbmZvLnJlcGxhY2VtZW50U3RyaW5nKQorICAgICAgICByZXR1cm47CisKKyAg
ICBEb2N1bWVudE1hcmtlckNvbnRyb2xsZXIqIG1hcmtlcnMgPSByZXBsYWNlbWVudFJhbmdlLT5z
dGFydENvbnRhaW5lcigpLT5kb2N1bWVudCgpLT5tYXJrZXJzKCk7CisgICAgc2l6ZV90IHNpemUg
PSBtYXJrZXJUeXBlc1RvQWRkLnNpemUoKTsKKyAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IHNp
emU7ICsraSkgeworICAgICAgICBEb2N1bWVudE1hcmtlcjo6TWFya2VyVHlwZSBtYXJrZXJUeXBl
ID0gbWFya2VyVHlwZXNUb0FkZFtpXTsKKyAgICAgICAgU3RyaW5nIGRlc2NyaXB0aW9uOworICAg
ICAgICBpZiAobV9jb3JyZWN0aW9uUGFuZWxJbmZvLnBhbmVsVHlwZSAhPSBDb3JyZWN0aW9uUGFu
ZWxJbmZvOjpQYW5lbFR5cGVSZXZlcnNpb24gJiYgKG1hcmtlclR5cGUgPT0gRG9jdW1lbnRNYXJr
ZXI6OlJlcGxhY2VtZW50IHx8IG1hcmtlclR5cGUgPT0gRG9jdW1lbnRNYXJrZXI6OkF1dG9jb3Jy
ZWN0ZWQpKQorICAgICAgICAgICAgZGVzY3JpcHRpb24gPSBtX2NvcnJlY3Rpb25QYW5lbEluZm8u
cmVwbGFjZWRTdHJpbmc7CisgICAgICAgIG1hcmtlcnMtPmFkZE1hcmtlcihyZXBsYWNlbWVudFJh
bmdlLmdldCgpLCBtYXJrZXJUeXBlLCBkZXNjcmlwdGlvbik7CisgICAgfQorfQorCitib29sIFNw
ZWxsaW5nQ29ycmVjdGlvbkNvbnRyb2xsZXI6OmFwcGx5QXV0b2NvcnJlY3Rpb25CZWZvcmVUeXBp
bmdJZkFwcHJvcHJpYXRlKCkKK3sKKyAgICBpZiAoIW1fY29ycmVjdGlvblBhbmVsSW5mby5yYW5n
ZVRvQmVSZXBsYWNlZCB8fCAhbV9jb3JyZWN0aW9uUGFuZWxJbmZvLmlzQWN0aXZlKQorICAgICAg
ICByZXR1cm4gZmFsc2U7CisKKyAgICBpZiAobV9jb3JyZWN0aW9uUGFuZWxJbmZvLnBhbmVsVHlw
ZSAhPSBDb3JyZWN0aW9uUGFuZWxJbmZvOjpQYW5lbFR5cGVDb3JyZWN0aW9uKQorICAgICAgICBy
ZXR1cm4gZmFsc2U7CisKKyAgICBQb3NpdGlvbiBjYXJldFBvc2l0aW9uID0gbV9mcmFtZS0+c2Vs
ZWN0aW9uKCktPnNlbGVjdGlvbigpLnN0YXJ0KCk7CisKKyAgICBpZiAobV9jb3JyZWN0aW9uUGFu
ZWxJbmZvLnJhbmdlVG9CZVJlcGxhY2VkLT5lbmRQb3NpdGlvbigpID09IGNhcmV0UG9zaXRpb24p
IHsKKyAgICAgICAgaGFuZGxlQ29ycmVjdGlvblBhbmVsUmVzdWx0KGRpc21pc3NTb29uKFJlYXNv
bkZvckRpc21pc3NpbmdDb3JyZWN0aW9uUGFuZWxBY2NlcHRlZCkpOworICAgICAgICByZXR1cm4g
dHJ1ZTsKKyAgICB9IAorICAgIAorICAgIC8vIFBlbmRpbmcgY29ycmVjdGlvbiBzaG91bGQgYWx3
YXlzIGJlIHdoZXJlIGNhcmV0IGlzLiBCdXQgaW4gY2FzZSB0aGlzIGlzIG5vdCBhbHdheXMgdHJ1
ZSwgd2Ugc3RpbGwgd2FudCB0byBkaXNtaXNzIHRoZSBwYW5lbCB3aXRob3V0IGFjY2VwdGluZyB0
aGUgY29ycmVjdGlvbi4KKyAgICBBU1NFUlQobV9jb3JyZWN0aW9uUGFuZWxJbmZvLnJhbmdlVG9C
ZVJlcGxhY2VkLT5lbmRQb3NpdGlvbigpID09IGNhcmV0UG9zaXRpb24pOworICAgIGRpc21pc3Mo
UmVhc29uRm9yRGlzbWlzc2luZ0NvcnJlY3Rpb25QYW5lbElnbm9yZWQpOworICAgIHJldHVybiBm
YWxzZTsKK30KKwordm9pZCBTcGVsbGluZ0NvcnJlY3Rpb25Db250cm9sbGVyOjpyZXNwb25kVG9V
bmFwcGxpZWRTcGVsbENvcnJlY3Rpb24oY29uc3QgVmlzaWJsZVNlbGVjdGlvbiYgc2VsZWN0aW9u
T2ZDb3JyZWN0ZWQsIGNvbnN0IFN0cmluZyYgY29ycmVjdGVkLCBjb25zdCBTdHJpbmcmIGNvcnJl
Y3Rpb24pCit7CisgICAgY2xpZW50KCktPnJlY29yZEF1dG9jb3JyZWN0aW9uUmVzcG9uc2UoRWRp
dG9yQ2xpZW50OjpBdXRvY29ycmVjdGlvblJldmVydGVkLCBjb3JyZWN0ZWQsIGNvcnJlY3Rpb24p
OworICAgIG1fZnJhbWUtPmRvY3VtZW50KCktPnVwZGF0ZUxheW91dCgpOworICAgIG1fZnJhbWUt
PnNlbGVjdGlvbigpLT5zZXRTZWxlY3Rpb24oc2VsZWN0aW9uT2ZDb3JyZWN0ZWQsIEZyYW1lU2Vs
ZWN0aW9uOjpDbG9zZVR5cGluZyB8IEZyYW1lU2VsZWN0aW9uOjpDbGVhclR5cGluZ1N0eWxlIHwg
RnJhbWVTZWxlY3Rpb246OlNwZWxsQ29ycmVjdGlvblRyaWdnZXJlZCk7CisgICAgUmVmUHRyPFJh
bmdlPiByYW5nZSA9IFJhbmdlOjpjcmVhdGUobV9mcmFtZS0+ZG9jdW1lbnQoKSwgbV9mcmFtZS0+
c2VsZWN0aW9uKCktPnNlbGVjdGlvbigpLnN0YXJ0KCksIG1fZnJhbWUtPnNlbGVjdGlvbigpLT5z
ZWxlY3Rpb24oKS5lbmQoKSk7CisKKyAgICBEb2N1bWVudE1hcmtlckNvbnRyb2xsZXIqIG1hcmtl
cnMgPSBtX2ZyYW1lLT5kb2N1bWVudCgpLT5tYXJrZXJzKCk7CisgICAgbWFya2Vycy0+cmVtb3Zl
TWFya2VycyhyYW5nZS5nZXQoKSwgRG9jdW1lbnRNYXJrZXI6OlNwZWxsaW5nIHwgRG9jdW1lbnRN
YXJrZXI6OkF1dG9jb3JyZWN0ZWQsIERvY3VtZW50TWFya2VyQ29udHJvbGxlcjo6UmVtb3ZlUGFy
dGlhbGx5T3ZlcmxhcHBpbmdNYXJrZXIpOworICAgIG1hcmtlcnMtPmFkZE1hcmtlcihyYW5nZS5n
ZXQoKSwgRG9jdW1lbnRNYXJrZXI6OlJlcGxhY2VtZW50KTsKKyAgICBtYXJrZXJzLT5hZGRNYXJr
ZXIocmFuZ2UuZ2V0KCksIERvY3VtZW50TWFya2VyOjpTcGVsbENoZWNraW5nRXhlbXB0aW9uKTsK
K30KKwordm9pZCBTcGVsbGluZ0NvcnJlY3Rpb25Db250cm9sbGVyOjpjb3JyZWN0aW9uUGFuZWxU
aW1lckZpcmVkKFRpbWVyPFNwZWxsaW5nQ29ycmVjdGlvbkNvbnRyb2xsZXI+KikKK3sKKyAgICBt
X2NvcnJlY3Rpb25QYW5lbElzRGlzbWlzc2VkQnlFZGl0b3IgPSBmYWxzZTsKKyAgICBzd2l0Y2gg
KG1fY29ycmVjdGlvblBhbmVsSW5mby5wYW5lbFR5cGUpIHsKKyAgICBjYXNlIENvcnJlY3Rpb25Q
YW5lbEluZm86OlBhbmVsVHlwZUNvcnJlY3Rpb246IHsKKyAgICAgICAgVmlzaWJsZVNlbGVjdGlv
biBzZWxlY3Rpb24obV9mcmFtZS0+c2VsZWN0aW9uKCktPnNlbGVjdGlvbigpKTsKKyAgICAgICAg
VmlzaWJsZVBvc2l0aW9uIHN0YXJ0KHNlbGVjdGlvbi5zdGFydCgpLCBzZWxlY3Rpb24uYWZmaW5p
dHkoKSk7CisgICAgICAgIFZpc2libGVQb3NpdGlvbiBwID0gc3RhcnRPZldvcmQoc3RhcnQsIExl
ZnRXb3JkSWZPbkJvdW5kYXJ5KTsKKyAgICAgICAgVmlzaWJsZVNlbGVjdGlvbiBhZGphY2VudFdv
cmRzID0gVmlzaWJsZVNlbGVjdGlvbihwLCBzdGFydCk7CisgICAgICAgIG1fZnJhbWUtPmVkaXRv
cigpLT5tYXJrQWxsTWlzc3BlbGxpbmdzQW5kQmFkR3JhbW1hckluUmFuZ2VzKFRleHRDaGVja2lu
Z1R5cGVTcGVsbGluZyB8IFRleHRDaGVja2luZ1R5cGVTaG93Q29ycmVjdGlvblBhbmVsLCBhZGph
Y2VudFdvcmRzLnRvTm9ybWFsaXplZFJhbmdlKCkuZ2V0KCksIDApOworICAgIH0KKyAgICAgICAg
YnJlYWs7CisgICAgY2FzZSBDb3JyZWN0aW9uUGFuZWxJbmZvOjpQYW5lbFR5cGVSZXZlcnNpb246
IHsKKyAgICAgICAgaWYgKCFtX2NvcnJlY3Rpb25QYW5lbEluZm8ucmFuZ2VUb0JlUmVwbGFjZWQp
CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgbV9jb3JyZWN0aW9uUGFuZWxJbmZvLmlzQWN0
aXZlID0gdHJ1ZTsKKyAgICAgICAgbV9jb3JyZWN0aW9uUGFuZWxJbmZvLnJlcGxhY2VkU3RyaW5n
ID0gcGxhaW5UZXh0KG1fY29ycmVjdGlvblBhbmVsSW5mby5yYW5nZVRvQmVSZXBsYWNlZC5nZXQo
KSk7CisgICAgICAgIEZsb2F0UmVjdCBib3VuZGluZ0JveCA9IHJvb3RWaWV3UmVjdEZvclJhbmdl
KG1fY29ycmVjdGlvblBhbmVsSW5mby5yYW5nZVRvQmVSZXBsYWNlZC5nZXQoKSk7CisgICAgICAg
IGlmICghYm91bmRpbmdCb3guaXNFbXB0eSgpKQorICAgICAgICAgICAgY2xpZW50KCktPnNob3dD
b3JyZWN0aW9uUGFuZWwobV9jb3JyZWN0aW9uUGFuZWxJbmZvLnBhbmVsVHlwZSwgYm91bmRpbmdC
b3gsIG1fY29ycmVjdGlvblBhbmVsSW5mby5yZXBsYWNlZFN0cmluZywgbV9jb3JyZWN0aW9uUGFu
ZWxJbmZvLnJlcGxhY2VtZW50U3RyaW5nLCBWZWN0b3I8U3RyaW5nPigpKTsKKyAgICB9CisgICAg
ICAgIGJyZWFrOworICAgIGNhc2UgQ29ycmVjdGlvblBhbmVsSW5mbzo6UGFuZWxUeXBlU3BlbGxp
bmdTdWdnZXN0aW9uczogeworICAgICAgICBpZiAoIW1fY29ycmVjdGlvblBhbmVsSW5mby5yYW5n
ZVRvQmVSZXBsYWNlZCB8fCBwbGFpblRleHQobV9jb3JyZWN0aW9uUGFuZWxJbmZvLnJhbmdlVG9C
ZVJlcGxhY2VkLmdldCgpKSAhPSBtX2NvcnJlY3Rpb25QYW5lbEluZm8ucmVwbGFjZWRTdHJpbmcp
CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgU3RyaW5nIHBhcmFncmFwaFRleHQgPSBwbGFp
blRleHQoVGV4dENoZWNraW5nUGFyYWdyYXBoKG1fY29ycmVjdGlvblBhbmVsSW5mby5yYW5nZVRv
QmVSZXBsYWNlZCkucGFyYWdyYXBoUmFuZ2UoKS5nZXQoKSk7CisgICAgICAgIFZlY3RvcjxTdHJp
bmc+IHN1Z2dlc3Rpb25zOworICAgICAgICB0ZXh0Q2hlY2tlcigpLT5nZXRHdWVzc2VzRm9yV29y
ZChtX2NvcnJlY3Rpb25QYW5lbEluZm8ucmVwbGFjZWRTdHJpbmcsIHBhcmFncmFwaFRleHQsIHN1
Z2dlc3Rpb25zKTsKKyAgICAgICAgaWYgKHN1Z2dlc3Rpb25zLmlzRW1wdHkoKSkgeworICAgICAg
ICAgICAgbV9jb3JyZWN0aW9uUGFuZWxJbmZvLnJhbmdlVG9CZVJlcGxhY2VkLmNsZWFyKCk7Cisg
ICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgICAgICBTdHJpbmcgdG9wU3VnZ2VzdGlv
biA9IHN1Z2dlc3Rpb25zLmZpcnN0KCk7CisgICAgICAgIHN1Z2dlc3Rpb25zLnJlbW92ZSgwKTsK
KyAgICAgICAgbV9jb3JyZWN0aW9uUGFuZWxJbmZvLmlzQWN0aXZlID0gdHJ1ZTsKKyAgICAgICAg
RmxvYXRSZWN0IGJvdW5kaW5nQm94ID0gcm9vdFZpZXdSZWN0Rm9yUmFuZ2UobV9jb3JyZWN0aW9u
UGFuZWxJbmZvLnJhbmdlVG9CZVJlcGxhY2VkLmdldCgpKTsKKyAgICAgICAgaWYgKCFib3VuZGlu
Z0JveC5pc0VtcHR5KCkpCisgICAgICAgICAgICBjbGllbnQoKS0+c2hvd0NvcnJlY3Rpb25QYW5l
bChtX2NvcnJlY3Rpb25QYW5lbEluZm8ucGFuZWxUeXBlLCBib3VuZGluZ0JveCwgbV9jb3JyZWN0
aW9uUGFuZWxJbmZvLnJlcGxhY2VkU3RyaW5nLCB0b3BTdWdnZXN0aW9uLCBzdWdnZXN0aW9ucyk7
CisgICAgfQorICAgICAgICBicmVhazsKKyAgICB9Cit9CisKK3ZvaWQgU3BlbGxpbmdDb3JyZWN0
aW9uQ29udHJvbGxlcjo6aGFuZGxlQ29ycmVjdGlvblBhbmVsUmVzdWx0KGNvbnN0IFN0cmluZyYg
Y29ycmVjdGlvbikKK3sKKyAgICBSYW5nZSogcmVwbGFjZWRSYW5nZSA9IG1fY29ycmVjdGlvblBh
bmVsSW5mby5yYW5nZVRvQmVSZXBsYWNlZC5nZXQoKTsKKyAgICBpZiAoIXJlcGxhY2VkUmFuZ2Ug
fHwgbV9mcmFtZS0+ZG9jdW1lbnQoKSAhPSByZXBsYWNlZFJhbmdlLT5vd25lckRvY3VtZW50KCkp
CisgICAgICAgIHJldHVybjsKKworICAgIFN0cmluZyBjdXJyZW50V29yZCA9IHBsYWluVGV4dCht
X2NvcnJlY3Rpb25QYW5lbEluZm8ucmFuZ2VUb0JlUmVwbGFjZWQuZ2V0KCkpOworICAgIC8vIENo
ZWNrIHRvIHNlZSBpZiB0aGUgd29yZCB3ZSBhcmUgYWJvdXQgdG8gY29ycmVjdCBoYXMgYmVlbiBj
aGFuZ2VkIGJldHdlZW4gdGltZXIgZmlyaW5nIGFuZCBjYWxsYmFjayBiZWluZyB0cmlnZ2VyZWQu
CisgICAgaWYgKGN1cnJlbnRXb3JkICE9IG1fY29ycmVjdGlvblBhbmVsSW5mby5yZXBsYWNlZFN0
cmluZykKKyAgICAgICAgcmV0dXJuOworCisgICAgbV9jb3JyZWN0aW9uUGFuZWxJbmZvLmlzQWN0
aXZlID0gZmFsc2U7CisKKyAgICBzd2l0Y2ggKG1fY29ycmVjdGlvblBhbmVsSW5mby5wYW5lbFR5
cGUpIHsKKyAgICBjYXNlIENvcnJlY3Rpb25QYW5lbEluZm86OlBhbmVsVHlwZUNvcnJlY3Rpb246
CisgICAgICAgIGlmIChjb3JyZWN0aW9uLmxlbmd0aCgpKSB7CisgICAgICAgICAgICBtX2NvcnJl
Y3Rpb25QYW5lbEluZm8ucmVwbGFjZW1lbnRTdHJpbmcgPSBjb3JyZWN0aW9uOworICAgICAgICAg
ICAgYXBwbHlDb3JyZWN0aW9uUGFuZWxJbmZvKG1hcmtlclR5cGVzRm9yQXV0b2NvcnJlY3Rpb24o
KSk7CisgICAgICAgIH0gZWxzZSBpZiAoIW1fY29ycmVjdGlvblBhbmVsSXNEaXNtaXNzZWRCeUVk
aXRvcikKKyAgICAgICAgICAgIHJlcGxhY2VkUmFuZ2UtPnN0YXJ0Q29udGFpbmVyKCktPmRvY3Vt
ZW50KCktPm1hcmtlcnMoKS0+YWRkTWFya2VyKHJlcGxhY2VkUmFuZ2UsIERvY3VtZW50TWFya2Vy
OjpSZWplY3RlZENvcnJlY3Rpb24sIG1fY29ycmVjdGlvblBhbmVsSW5mby5yZXBsYWNlZFN0cmlu
Zyk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgQ29ycmVjdGlvblBhbmVsSW5mbzo6UGFuZWxU
eXBlUmV2ZXJzaW9uOgorICAgIGNhc2UgQ29ycmVjdGlvblBhbmVsSW5mbzo6UGFuZWxUeXBlU3Bl
bGxpbmdTdWdnZXN0aW9uczoKKyAgICAgICAgaWYgKGNvcnJlY3Rpb24ubGVuZ3RoKCkpIHsKKyAg
ICAgICAgICAgIG1fY29ycmVjdGlvblBhbmVsSW5mby5yZXBsYWNlbWVudFN0cmluZyA9IGNvcnJl
Y3Rpb247CisgICAgICAgICAgICBhcHBseUNvcnJlY3Rpb25QYW5lbEluZm8obWFya2VyVHlwZXNG
b3JSZXBsYWNlbWVudCgpKTsKKyAgICAgICAgfQorICAgICAgICBicmVhazsKKyAgICB9CisKKyAg
ICBtX2NvcnJlY3Rpb25QYW5lbEluZm8ucmFuZ2VUb0JlUmVwbGFjZWQuY2xlYXIoKTsKK30KKwor
Ym9vbCBTcGVsbGluZ0NvcnJlY3Rpb25Db250cm9sbGVyOjppc0F1dG9tYXRpY1NwZWxsaW5nQ29y
cmVjdGlvbkVuYWJsZWQoKQoreworICAgIHJldHVybiBjbGllbnQoKSAmJiBjbGllbnQoKS0+aXNB
dXRvbWF0aWNTcGVsbGluZ0NvcnJlY3Rpb25FbmFibGVkKCk7Cit9CisKK0Zsb2F0UmVjdCBTcGVs
bGluZ0NvcnJlY3Rpb25Db250cm9sbGVyOjpyb290Vmlld1JlY3RGb3JSYW5nZShjb25zdCBSYW5n
ZSogcmFuZ2UpIGNvbnN0Cit7CisgICAgRnJhbWVWaWV3KiB2aWV3ID0gbV9mcmFtZS0+dmlldygp
OworICAgIGlmICghdmlldykKKyAgICAgICAgcmV0dXJuIEZsb2F0UmVjdCgpOworICAgIFZlY3Rv
cjxGbG9hdFF1YWQ+IHRleHRRdWFkczsKKyAgICByYW5nZS0+dGV4dFF1YWRzKHRleHRRdWFkcyk7
CisgICAgRmxvYXRSZWN0IGJvdW5kaW5nUmVjdDsKKyAgICBzaXplX3Qgc2l6ZSA9IHRleHRRdWFk
cy5zaXplKCk7CisgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBzaXplOyArK2kpCisgICAgICAg
IGJvdW5kaW5nUmVjdC51bml0ZSh0ZXh0UXVhZHNbaV0uYm91bmRpbmdCb3goKSk7CisgICAgcmV0
dXJuIHZpZXctPmNvbnRlbnRzVG9Sb290VmlldyhJbnRSZWN0KGJvdW5kaW5nUmVjdCkpOworfSAg
ICAgICAgCisKK3ZvaWQgU3BlbGxpbmdDb3JyZWN0aW9uQ29udHJvbGxlcjo6cmVzcG9uZFRvQ2hh
bmdlZFNlbGVjdGlvbihjb25zdCBWaXNpYmxlU2VsZWN0aW9uJiBvbGRTZWxlY3Rpb24pCit7Cisg
ICAgVmlzaWJsZVNlbGVjdGlvbiBjdXJyZW50U2VsZWN0aW9uKG1fZnJhbWUtPnNlbGVjdGlvbigp
LT5zZWxlY3Rpb24oKSk7CisgICAgLy8gV2hlbiB1c2VyIG1vdmVzIGNhcmV0IHRvIHRoZSBlbmQg
b2YgYXV0b2NvcnJlY3RlZCB3b3JkIGFuZCBwYXVzZXMsIHdlIHNob3cgdGhlIHBhbmVsCisgICAg
Ly8gY29udGFpbmluZyB0aGUgb3JpZ2luYWwgcHJlLWNvcnJlY3Rpb24gd29yZCBzbyB0aGF0IHVz
ZXIgY2FuIHF1aWNrbHkgcmV2ZXJ0IHRoZQorICAgIC8vIHVuZGVzaXJlZCBhdXRvY29ycmVjdGlv
bi4gSGVyZSwgd2Ugc3RhcnQgY29ycmVjdGlvbiBwYW5lbCB0aW1lciBvbmNlIHdlIGNvbmZpcm0g
dGhhdAorICAgIC8vIHRoZSBuZXcgY2FyZXQgcG9zaXRpb24gaXMgYXQgdGhlIGVuZCBvZiBhIHdv
cmQuCisgICAgaWYgKCFjdXJyZW50U2VsZWN0aW9uLmlzQ2FyZXQoKSB8fCBjdXJyZW50U2VsZWN0
aW9uID09IG9sZFNlbGVjdGlvbikKKyAgICAgICAgcmV0dXJuOworCisgICAgVmlzaWJsZVBvc2l0
aW9uIHNlbGVjdGlvblBvc2l0aW9uID0gY3VycmVudFNlbGVjdGlvbi5zdGFydCgpOworICAgIAor
ICAgIC8vIENyZWF0aW5nIGEgVmlzaWJsZSBwb3NpdGlvbiB0cmlnZ2VycyBhIGxheW91dCBhbmQg
dGhlcmUgaXMgbm8KKyAgICAvLyBndWFyYW50ZWUgdGhhdCB0aGUgc2VsZWN0aW9uIGlzIHN0aWxs
IHZhbGlkLgorICAgIGlmIChzZWxlY3Rpb25Qb3NpdGlvbi5pc051bGwoKSkKKyAgICAgICAgcmV0
dXJuOworICAgIAorICAgIFZpc2libGVQb3NpdGlvbiBlbmRQb3NpdGlvbk9mV29yZCA9IGVuZE9m
V29yZChzZWxlY3Rpb25Qb3NpdGlvbiwgTGVmdFdvcmRJZk9uQm91bmRhcnkpOworICAgIGlmIChz
ZWxlY3Rpb25Qb3NpdGlvbiAhPSBlbmRQb3NpdGlvbk9mV29yZCkKKyAgICAgICAgcmV0dXJuOwor
CisgICAgUG9zaXRpb24gcG9zaXRpb24gPSBlbmRQb3NpdGlvbk9mV29yZC5kZWVwRXF1aXZhbGVu
dCgpOworICAgIGlmIChwb3NpdGlvbi5hbmNob3JUeXBlKCkgIT0gUG9zaXRpb246OlBvc2l0aW9u
SXNPZmZzZXRJbkFuY2hvcikKKyAgICAgICAgcmV0dXJuOworCisgICAgTm9kZSogbm9kZSA9IHBv
c2l0aW9uLmNvbnRhaW5lck5vZGUoKTsKKyAgICBpbnQgZW5kT2Zmc2V0ID0gcG9zaXRpb24ub2Zm
c2V0SW5Db250YWluZXJOb2RlKCk7CisgICAgVmVjdG9yPERvY3VtZW50TWFya2VyKj4gbWFya2Vy
cyA9IG5vZGUtPmRvY3VtZW50KCktPm1hcmtlcnMoKS0+bWFya2Vyc0Zvcihub2RlKTsKKyAgICBz
aXplX3QgbWFya2VyQ291bnQgPSBtYXJrZXJzLnNpemUoKTsKKyAgICBmb3IgKHNpemVfdCBpID0g
MDsgaSA8IG1hcmtlckNvdW50OyArK2kpIHsKKyAgICAgICAgY29uc3QgRG9jdW1lbnRNYXJrZXIq
IG1hcmtlciA9IG1hcmtlcnNbaV07CisgICAgICAgIGlmICghc2hvdWxkU3RhcnRUaW1lckZvciht
YXJrZXIsIGVuZE9mZnNldCkpCisgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgUmVmUHRy
PFJhbmdlPiB3b3JkUmFuZ2UgPSBSYW5nZTo6Y3JlYXRlKG1fZnJhbWUtPmRvY3VtZW50KCksIG5v
ZGUsIG1hcmtlci0+c3RhcnRPZmZzZXQoKSwgbm9kZSwgbWFya2VyLT5lbmRPZmZzZXQoKSk7Cisg
ICAgICAgIFN0cmluZyBjdXJyZW50V29yZCA9IHBsYWluVGV4dCh3b3JkUmFuZ2UuZ2V0KCkpOwor
ICAgICAgICBpZiAoIWN1cnJlbnRXb3JkLmxlbmd0aCgpKQorICAgICAgICAgICAgY29udGludWU7
CisKKyAgICAgICAgbV9jb3JyZWN0aW9uUGFuZWxJbmZvLnJhbmdlVG9CZVJlcGxhY2VkID0gd29y
ZFJhbmdlOworICAgICAgICBtX2NvcnJlY3Rpb25QYW5lbEluZm8ucmVwbGFjZWRTdHJpbmcgPSBj
dXJyZW50V29yZDsKKyAgICAgICAgaWYgKG1hcmtlci0+dHlwZSgpID09IERvY3VtZW50TWFya2Vy
OjpTcGVsbGluZykKKyAgICAgICAgICAgIHN0YXJ0Q29ycmVjdGlvblBhbmVsVGltZXIoQ29ycmVj
dGlvblBhbmVsSW5mbzo6UGFuZWxUeXBlU3BlbGxpbmdTdWdnZXN0aW9ucyk7CisgICAgICAgIGVs
c2UgeworICAgICAgICAgICAgbV9jb3JyZWN0aW9uUGFuZWxJbmZvLnJlcGxhY2VtZW50U3RyaW5n
ID0gbWFya2VyLT5kZXNjcmlwdGlvbigpOworICAgICAgICAgICAgc3RhcnRDb3JyZWN0aW9uUGFu
ZWxUaW1lcihDb3JyZWN0aW9uUGFuZWxJbmZvOjpQYW5lbFR5cGVSZXZlcnNpb24pOworICAgICAg
ICB9CisKKyAgICAgICAgYnJlYWs7CisgICAgfQorfQorCit2b2lkIFNwZWxsaW5nQ29ycmVjdGlv
bkNvbnRyb2xsZXI6OnJlc3BvbmRUb0FwcGxpZWRFZGl0aW5nKENvbXBvc2l0ZUVkaXRDb21tYW5k
KiBjb21tYW5kKQoreworICAgIGlmIChjb21tYW5kLT5pc1RvcExldmVsQ29tbWFuZCgpICYmICFj
b21tYW5kLT5zaG91bGRSZXRhaW5BdXRvY29ycmVjdGlvbkluZGljYXRvcigpKQorICAgICAgICBt
X2ZyYW1lLT5kb2N1bWVudCgpLT5tYXJrZXJzKCktPnJlbW92ZU1hcmtlcnMoRG9jdW1lbnRNYXJr
ZXI6OkNvcnJlY3Rpb25JbmRpY2F0b3IpOworCisgICAgbWFya1ByZWNlZGluZ1doaXRlc3BhY2VG
b3JEZWxldGVkQXV0b2NvcnJlY3Rpb25BZnRlckNvbW1hbmQoY29tbWFuZCk7CisgICAgbV9vcmln
aW5hbFN0cmluZ0Zvckxhc3REZWxldGVkQXV0b2NvcnJlY3Rpb24gPSBTdHJpbmcoKTsKK30KKwor
dm9pZCBTcGVsbGluZ0NvcnJlY3Rpb25Db250cm9sbGVyOjpyZXNwb25kVG9VbmFwcGxpZWRFZGl0
aW5nKEVkaXRDb21tYW5kQ29tcG9zaXRpb24qIGNvbW1hbmQpCit7CisgICAgaWYgKCFjb21tYW5k
LT53YXNDcmVhdGVMaW5rQ29tbWFuZCgpKQorICAgICAgICByZXR1cm47CisgICAgUmVmUHRyPFJh
bmdlPiByYW5nZSA9IFJhbmdlOjpjcmVhdGUobV9mcmFtZS0+ZG9jdW1lbnQoKSwgY29tbWFuZC0+
c3RhcnRpbmdTZWxlY3Rpb24oKS5zdGFydCgpLCBjb21tYW5kLT5zdGFydGluZ1NlbGVjdGlvbigp
LmVuZCgpKTsKKyAgICBpZiAoIXJhbmdlKQorICAgICAgICByZXR1cm47CisgICAgRG9jdW1lbnRN
YXJrZXJDb250cm9sbGVyKiBtYXJrZXJzID0gbV9mcmFtZS0+ZG9jdW1lbnQoKS0+bWFya2Vycygp
OworICAgIG1hcmtlcnMtPmFkZE1hcmtlcihyYW5nZS5nZXQoKSwgRG9jdW1lbnRNYXJrZXI6OlJl
cGxhY2VtZW50KTsKKyAgICBtYXJrZXJzLT5hZGRNYXJrZXIocmFuZ2UuZ2V0KCksIERvY3VtZW50
TWFya2VyOjpTcGVsbENoZWNraW5nRXhlbXB0aW9uKTsKK30KKworRWRpdG9yQ2xpZW50KiBTcGVs
bGluZ0NvcnJlY3Rpb25Db250cm9sbGVyOjpjbGllbnQoKQoreworICAgIHJldHVybiBtX2ZyYW1l
LT5wYWdlKCkgPyBtX2ZyYW1lLT5wYWdlKCktPmVkaXRvckNsaWVudCgpIDogMDsKK30KKworVGV4
dENoZWNrZXJDbGllbnQqIFNwZWxsaW5nQ29ycmVjdGlvbkNvbnRyb2xsZXI6OnRleHRDaGVja2Vy
KCkKK3sKKyAgICBpZiAoRWRpdG9yQ2xpZW50KiBvd25lciA9IGNsaWVudCgpKQorICAgICAgICBy
ZXR1cm4gb3duZXItPnRleHRDaGVja2VyKCk7CisgICAgcmV0dXJuIDA7Cit9CisKK3ZvaWQgU3Bl
bGxpbmdDb3JyZWN0aW9uQ29udHJvbGxlcjo6cmVjb3JkQXV0b2NvcnJlY3Rpb25SZXNwb25zZVJl
dmVyc2VkKGNvbnN0IFN0cmluZyYgcmVwbGFjZWRTdHJpbmcsIGNvbnN0IFN0cmluZyYgcmVwbGFj
ZW1lbnRTdHJpbmcpCit7CisgICAgY2xpZW50KCktPnJlY29yZEF1dG9jb3JyZWN0aW9uUmVzcG9u
c2UoRWRpdG9yQ2xpZW50OjpBdXRvY29ycmVjdGlvblJldmVydGVkLCByZXBsYWNlZFN0cmluZywg
cmVwbGFjZW1lbnRTdHJpbmcpOworfQorCit2b2lkIFNwZWxsaW5nQ29ycmVjdGlvbkNvbnRyb2xs
ZXI6OnJlY29yZEF1dG9jb3JyZWN0aW9uUmVzcG9uc2VSZXZlcnNlZChjb25zdCBTdHJpbmcmIHJl
cGxhY2VkU3RyaW5nLCBQYXNzUmVmUHRyPFJhbmdlPiByZXBsYWNlbWVudFJhbmdlKQoreworICAg
IHJlY29yZEF1dG9jb3JyZWN0aW9uUmVzcG9uc2VSZXZlcnNlZChyZXBsYWNlZFN0cmluZywgcGxh
aW5UZXh0KHJlcGxhY2VtZW50UmFuZ2UuZ2V0KCkpKTsKK30KKwordm9pZCBTcGVsbGluZ0NvcnJl
Y3Rpb25Db250cm9sbGVyOjptYXJrUmV2ZXJzZWQoUGFzc1JlZlB0cjxSYW5nZT4gY2hhbmdlZFJh
bmdlKQoreworICAgIGNoYW5nZWRSYW5nZS0+c3RhcnRDb250YWluZXIoKS0+ZG9jdW1lbnQoKS0+
bWFya2VycygpLT5yZW1vdmVNYXJrZXJzKGNoYW5nZWRSYW5nZS5nZXQoKSwgRG9jdW1lbnRNYXJr
ZXI6OkF1dG9jb3JyZWN0ZWQsIERvY3VtZW50TWFya2VyQ29udHJvbGxlcjo6UmVtb3ZlUGFydGlh
bGx5T3ZlcmxhcHBpbmdNYXJrZXIpOworICAgIGNoYW5nZWRSYW5nZS0+c3RhcnRDb250YWluZXIo
KS0+ZG9jdW1lbnQoKS0+bWFya2VycygpLT5hZGRNYXJrZXIoY2hhbmdlZFJhbmdlLmdldCgpLCBE
b2N1bWVudE1hcmtlcjo6U3BlbGxDaGVja2luZ0V4ZW1wdGlvbik7Cit9CisKK3ZvaWQgU3BlbGxp
bmdDb3JyZWN0aW9uQ29udHJvbGxlcjo6bWFya0NvcnJlY3Rpb24oUGFzc1JlZlB0cjxSYW5nZT4g
cmVwbGFjZWRSYW5nZSwgY29uc3QgU3RyaW5nJiByZXBsYWNlZFN0cmluZykKK3sKKyAgICBWZWN0
b3I8RG9jdW1lbnRNYXJrZXI6Ok1hcmtlclR5cGU+IG1hcmtlclR5cGVzVG9BZGQgPSBtYXJrZXJU
eXBlc0ZvckF1dG9jb3JyZWN0aW9uKCk7CisgICAgRG9jdW1lbnRNYXJrZXJDb250cm9sbGVyKiBt
YXJrZXJzID0gcmVwbGFjZWRSYW5nZS0+c3RhcnRDb250YWluZXIoKS0+ZG9jdW1lbnQoKS0+bWFy
a2VycygpOworICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgbWFya2VyVHlwZXNUb0FkZC5zaXpl
KCk7ICsraSkgeworICAgICAgICBEb2N1bWVudE1hcmtlcjo6TWFya2VyVHlwZSBtYXJrZXJUeXBl
ID0gbWFya2VyVHlwZXNUb0FkZFtpXTsKKyAgICAgICAgaWYgKG1hcmtlclR5cGUgPT0gRG9jdW1l
bnRNYXJrZXI6OlJlcGxhY2VtZW50IHx8IG1hcmtlclR5cGUgPT0gRG9jdW1lbnRNYXJrZXI6OkF1
dG9jb3JyZWN0ZWQpCisgICAgICAgICAgICBtYXJrZXJzLT5hZGRNYXJrZXIocmVwbGFjZWRSYW5n
ZS5nZXQoKSwgbWFya2VyVHlwZSwgcmVwbGFjZWRTdHJpbmcpOworICAgICAgICBlbHNlCisgICAg
ICAgICAgICBtYXJrZXJzLT5hZGRNYXJrZXIocmVwbGFjZWRSYW5nZS5nZXQoKSwgbWFya2VyVHlw
ZSk7CisgICAgfQorfQorCit2b2lkIFNwZWxsaW5nQ29ycmVjdGlvbkNvbnRyb2xsZXI6OnJlY29y
ZFNwZWxsY2hlY2tlclJlc3BvbnNlRm9yTW9kaWZpZWRDb3JyZWN0aW9uKFJhbmdlKiByYW5nZU9m
Q29ycmVjdGlvbiwgY29uc3QgU3RyaW5nJiBjb3JyZWN0ZWQsIGNvbnN0IFN0cmluZyYgY29ycmVj
dGlvbikKK3sKKyAgICBpZiAoIXJhbmdlT2ZDb3JyZWN0aW9uKQorICAgICAgICByZXR1cm47Cisg
ICAgRG9jdW1lbnRNYXJrZXJDb250cm9sbGVyKiBtYXJrZXJzID0gcmFuZ2VPZkNvcnJlY3Rpb24t
PnN0YXJ0Q29udGFpbmVyKCktPmRvY3VtZW50KCktPm1hcmtlcnMoKTsKKyAgICBWZWN0b3I8RG9j
dW1lbnRNYXJrZXIqPiBjb3JyZWN0ZWRPbmNlTWFya2VycyA9IG1hcmtlcnMtPm1hcmtlcnNJblJh
bmdlKHJhbmdlT2ZDb3JyZWN0aW9uLCBEb2N1bWVudE1hcmtlcjo6QXV0b2NvcnJlY3RlZCk7Cisg
ICAgaWYgKGNvcnJlY3RlZE9uY2VNYXJrZXJzLmlzRW1wdHkoKSkKKyAgICAgICAgcmV0dXJuOwor
ICAgIAorICAgIC8vIFNwZWxsaW5nIGNvcnJlY3RlZCB0ZXh0IGhhcyBiZWVuIGVkaXRlZC4gV2Ug
bmVlZCB0byBkZXRlcm1pbmUgd2hldGhlciB1c2VyIGhhcyByZXZlcnRlZCBpdCB0byBvcmlnaW5h
bCB0ZXh0IG9yCisgICAgLy8gZWRpdGVkIGl0IHRvIHNvbWV0aGluZyBlbHNlLCBhbmQgbm90aWZ5
IHNwZWxsY2hlY2tlciBhY2NvcmRpbmdseS4KKyAgICBpZiAobWFya2Vyc0hhdmVJZGVudGljYWxE
ZXNjcmlwdGlvbihjb3JyZWN0ZWRPbmNlTWFya2VycykgJiYgY29ycmVjdGVkT25jZU1hcmtlcnNb
MF0tPmRlc2NyaXB0aW9uKCkgPT0gY29ycmVjdGVkKQorICAgICAgICBjbGllbnQoKS0+cmVjb3Jk
QXV0b2NvcnJlY3Rpb25SZXNwb25zZShFZGl0b3JDbGllbnQ6OkF1dG9jb3JyZWN0aW9uUmV2ZXJ0
ZWQsIGNvcnJlY3RlZCwgY29ycmVjdGlvbik7CisgICAgZWxzZQorICAgICAgICBjbGllbnQoKS0+
cmVjb3JkQXV0b2NvcnJlY3Rpb25SZXNwb25zZShFZGl0b3JDbGllbnQ6OkF1dG9jb3JyZWN0aW9u
RWRpdGVkLCBjb3JyZWN0ZWQsIGNvcnJlY3Rpb24pOworICAgIG1hcmtlcnMtPnJlbW92ZU1hcmtl
cnMocmFuZ2VPZkNvcnJlY3Rpb24sIERvY3VtZW50TWFya2VyOjpBdXRvY29ycmVjdGVkLCBEb2N1
bWVudE1hcmtlckNvbnRyb2xsZXI6OlJlbW92ZVBhcnRpYWxseU92ZXJsYXBwaW5nTWFya2VyKTsK
K30KKwordm9pZCBTcGVsbGluZ0NvcnJlY3Rpb25Db250cm9sbGVyOjpkZWxldGVkQXV0b2NvcnJl
Y3Rpb25BdFBvc2l0aW9uKGNvbnN0IFBvc2l0aW9uJiBwb3NpdGlvbiwgY29uc3QgU3RyaW5nJiBv
cmlnaW5hbFN0cmluZykKK3sKKyAgICBtX29yaWdpbmFsU3RyaW5nRm9yTGFzdERlbGV0ZWRBdXRv
Y29ycmVjdGlvbiA9IG9yaWdpbmFsU3RyaW5nOworICAgIG1fcG9zaXRpb25Gb3JMYXN0RGVsZXRl
ZEF1dG9jb3JyZWN0aW9uID0gcG9zaXRpb247Cit9CisKK3ZvaWQgU3BlbGxpbmdDb3JyZWN0aW9u
Q29udHJvbGxlcjo6bWFya1ByZWNlZGluZ1doaXRlc3BhY2VGb3JEZWxldGVkQXV0b2NvcnJlY3Rp
b25BZnRlckNvbW1hbmQoRWRpdENvbW1hbmQqIGNvbW1hbmQpCit7CisgICAgUG9zaXRpb24gZW5k
T2ZTZWxlY3Rpb24gPSBjb21tYW5kLT5lbmRpbmdTZWxlY3Rpb24oKS5lbmQoKTsKKyAgICBpZiAo
ZW5kT2ZTZWxlY3Rpb24gIT0gbV9wb3NpdGlvbkZvckxhc3REZWxldGVkQXV0b2NvcnJlY3Rpb24p
CisgICAgICAgIHJldHVybjsKKworICAgIFBvc2l0aW9uIHByZWNlZGluZ0NoYXJhY3RlclBvc2l0
aW9uID0gZW5kT2ZTZWxlY3Rpb24ucHJldmlvdXMoKTsKKyAgICBpZiAoZW5kT2ZTZWxlY3Rpb24g
PT0gcHJlY2VkaW5nQ2hhcmFjdGVyUG9zaXRpb24pCisgICAgICAgIHJldHVybjsKKworICAgIFJl
ZlB0cjxSYW5nZT4gcHJlY2VkaW5nQ2hhcmFjdGVyUmFuZ2UgPSBSYW5nZTo6Y3JlYXRlKG1fZnJh
bWUtPmRvY3VtZW50KCksIHByZWNlZGluZ0NoYXJhY3RlclBvc2l0aW9uLCBlbmRPZlNlbGVjdGlv
bik7CisgICAgU3RyaW5nIHN0cmluZyA9IHBsYWluVGV4dChwcmVjZWRpbmdDaGFyYWN0ZXJSYW5n
ZS5nZXQoKSk7CisgICAgaWYgKHN0cmluZy5pc0VtcHR5KCkgfHwgIWlzV2hpdGVzcGFjZShzdHJp
bmdbc3RyaW5nLmxlbmd0aCgpIC0gMV0pKQorICAgICAgICByZXR1cm47CisKKyAgICAvLyBNYXJr
IHRoaXMgd2hpdGVzcGFjZSB0byBpbmRpY2F0ZSB3ZSBoYXZlIGRlbGV0ZWQgYW4gYXV0b2NvcnJl
Y3Rpb24gZm9sbG93aW5nIHRoaXMKKyAgICAvLyB3aGl0ZXNwYWNlLiBTbyBpZiB0aGUgdXNlciB0
eXBlcyB0aGUgc2FtZSBvcmlnaW5hbCB3b3JkIGFnYWluIGF0IHRoaXMgcG9zaXRpb24sIHdlCisg
ICAgLy8gd29uJ3QgYXV0b2NvcnJlY3QgaXQgYWdhaW4uCisgICAgbV9mcmFtZS0+ZG9jdW1lbnQo
KS0+bWFya2VycygpLT5hZGRNYXJrZXIocHJlY2VkaW5nQ2hhcmFjdGVyUmFuZ2UuZ2V0KCksIERv
Y3VtZW50TWFya2VyOjpEZWxldGVkQXV0b2NvcnJlY3Rpb24sIG1fb3JpZ2luYWxTdHJpbmdGb3JM
YXN0RGVsZXRlZEF1dG9jb3JyZWN0aW9uKTsKK30KKworYm9vbCBTcGVsbGluZ0NvcnJlY3Rpb25D
b250cm9sbGVyOjpwcm9jZXNzTWFya2Vyc09uVGV4dFRvQmVSZXBsYWNlZEJ5UmVzdWx0KGNvbnN0
IFRleHRDaGVja2luZ1Jlc3VsdCogcmVzdWx0LCBSYW5nZSogcmFuZ2VUb0JlUmVwbGFjZWQsIGNv
bnN0IFN0cmluZyYgc3RyaW5nVG9CZVJlcGxhY2VkKQoreworICAgIERvY3VtZW50TWFya2VyQ29u
dHJvbGxlciogbWFya2VyQ29udHJvbGxlciA9IG1fZnJhbWUtPmRvY3VtZW50KCktPm1hcmtlcnMo
KTsKKyAgICBpZiAobWFya2VyQ29udHJvbGxlci0+aGFzTWFya2VycyhyYW5nZVRvQmVSZXBsYWNl
ZCwgRG9jdW1lbnRNYXJrZXI6OlJlcGxhY2VtZW50KSkgeworICAgICAgICBpZiAocmVzdWx0LT50
eXBlID09IFRleHRDaGVja2luZ1R5cGVDb3JyZWN0aW9uKQorICAgICAgICAgICAgcmVjb3JkU3Bl
bGxjaGVja2VyUmVzcG9uc2VGb3JNb2RpZmllZENvcnJlY3Rpb24ocmFuZ2VUb0JlUmVwbGFjZWQs
IHN0cmluZ1RvQmVSZXBsYWNlZCwgcmVzdWx0LT5yZXBsYWNlbWVudCk7CisgICAgICAgIHJldHVy
biBmYWxzZTsKKyAgICB9CisKKyAgICBpZiAobWFya2VyQ29udHJvbGxlci0+aGFzTWFya2Vycyhy
YW5nZVRvQmVSZXBsYWNlZCwgRG9jdW1lbnRNYXJrZXI6OlJlamVjdGVkQ29ycmVjdGlvbikpCisg
ICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIFBvc2l0aW9uIGJlZ2lubmluZ09mUmFuZ2UgPSBy
YW5nZVRvQmVSZXBsYWNlZC0+c3RhcnRQb3NpdGlvbigpOworICAgIFBvc2l0aW9uIHByZWNlZGlu
Z0NoYXJhY3RlclBvc2l0aW9uID0gYmVnaW5uaW5nT2ZSYW5nZS5wcmV2aW91cygpOworICAgIFJl
ZlB0cjxSYW5nZT4gcHJlY2VkaW5nQ2hhcmFjdGVyUmFuZ2UgPSBSYW5nZTo6Y3JlYXRlKG1fZnJh
bWUtPmRvY3VtZW50KCksIHByZWNlZGluZ0NoYXJhY3RlclBvc2l0aW9uLCBiZWdpbm5pbmdPZlJh
bmdlKTsKKworICAgIFZlY3RvcjxEb2N1bWVudE1hcmtlcio+IG1hcmtlcnMgPSBtYXJrZXJDb250
cm9sbGVyLT5tYXJrZXJzSW5SYW5nZShwcmVjZWRpbmdDaGFyYWN0ZXJSYW5nZS5nZXQoKSwgRG9j
dW1lbnRNYXJrZXI6OkRlbGV0ZWRBdXRvY29ycmVjdGlvbik7CisKKyAgICBmb3IgKHNpemVfdCBp
ID0gMDsgaSA8IG1hcmtlcnMuc2l6ZSgpOyArK2kpIHsKKyAgICAgICAgaWYgKG1hcmtlcnNbaV0t
PmRlc2NyaXB0aW9uKCkgPT0gc3RyaW5nVG9CZVJlcGxhY2VkKQorICAgICAgICAgICAgcmV0dXJu
IGZhbHNlOworICAgIH0KKworICAgIHJldHVybiB0cnVlOworfQorICAgIAorI2VuZGlmCisKK30g
Ly8gbmFtZXNwYWNlIFdlYkNvcmUKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2VkaXRpbmcvQWx0ZXJu
YXRpdmVUZXh0Q29udHJvbGxlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvZWRp
dGluZy9BbHRlcm5hdGl2ZVRleHRDb250cm9sbGVyLmNwcAkocmV2aXNpb24gMTEyODMwKQorKysg
U291cmNlL1dlYkNvcmUvZWRpdGluZy9BbHRlcm5hdGl2ZVRleHRDb250cm9sbGVyLmNwcAkod29y
a2luZyBjb3B5KQpAQCAtMjUsNyArMjUsNyBAQAogICovCiAKICNpbmNsdWRlICJjb25maWcuaCIK
LSNpbmNsdWRlICJTcGVsbGluZ0NvcnJlY3Rpb25Db250cm9sbGVyLmgiCisjaW5jbHVkZSAiQWx0
ZXJuYXRpdmVUZXh0Q29udHJvbGxlci5oIgogCiAjaW5jbHVkZSAiRG9jdW1lbnRNYXJrZXJDb250
cm9sbGVyLmgiCiAjaW5jbHVkZSAiRWRpdENvbW1hbmQuaCIKQEAgLTQ4LDYgKzQ4LDIyIEBAIG5h
bWVzcGFjZSBXZWJDb3JlIHsKIHVzaW5nIG5hbWVzcGFjZSBzdGQ7CiB1c2luZyBuYW1lc3BhY2Ug
V1RGOwogCitjbGFzcyBBdXRvY29ycmVjdGlvbkFsdGVybmF0aXZlRGV0YWlscyA6IHB1YmxpYyBB
bHRlcm5hdGl2ZVRleHREZXRhaWxzIHsKK3B1YmxpYzoKKyAgICBzdGF0aWMgUGFzc1JlZlB0cjxB
dXRvY29ycmVjdGlvbkFsdGVybmF0aXZlRGV0YWlscz4gY3JlYXRlKGNvbnN0IFN0cmluZyYgcmVw
bGFjZW1lbnRTdHJpbmcpCisgICAgeworICAgICAgICByZXR1cm4gYWRvcHRSZWYobmV3IEF1dG9j
b3JyZWN0aW9uQWx0ZXJuYXRpdmVEZXRhaWxzKHJlcGxhY2VtZW50U3RyaW5nKSk7CisgICAgfQor
ICAgIAorICAgIGNvbnN0IFN0cmluZyYgcmVwbGFjZW1lbnRTdHJpbmcoKSBjb25zdCB7IHJldHVy
biBtX3JlcGxhY2VtZW50U3RyaW5nOyB9Citwcml2YXRlOgorICAgIEF1dG9jb3JyZWN0aW9uQWx0
ZXJuYXRpdmVEZXRhaWxzKGNvbnN0IFN0cmluZyYgcmVwbGFjZW1lbnRTdHJpbmcpCisgICAgOiBt
X3JlcGxhY2VtZW50U3RyaW5nKHJlcGxhY2VtZW50U3RyaW5nKQorICAgIHsgfQorICAgIAorICAg
IFN0cmluZyBtX3JlcGxhY2VtZW50U3RyaW5nOworfTsKKwogI2lmIFVTRShBVVRPQ09SUkVDVElP
Tl9QQU5FTCkKIAogc3RhdGljIGNvbnN0IFZlY3RvcjxEb2N1bWVudE1hcmtlcjo6TWFya2VyVHlw
ZT4mIG1hcmtlclR5cGVzRm9yQXV0b2NvcnJlY3Rpb24oKQpAQCAtODUsNDggKzEwMSw0OCBAQCBz
dGF0aWMgYm9vbCBtYXJrZXJzSGF2ZUlkZW50aWNhbERlc2NyaXB0CiAgICAgcmV0dXJuIHRydWU7
CiB9CiAKLVNwZWxsaW5nQ29ycmVjdGlvbkNvbnRyb2xsZXI6OlNwZWxsaW5nQ29ycmVjdGlvbkNv
bnRyb2xsZXIoRnJhbWUqIGZyYW1lKQorQWx0ZXJuYXRpdmVUZXh0Q29udHJvbGxlcjo6QWx0ZXJu
YXRpdmVUZXh0Q29udHJvbGxlcihGcmFtZSogZnJhbWUpCiAgICAgOiBtX2ZyYW1lKGZyYW1lKQot
ICAgICwgbV9jb3JyZWN0aW9uUGFuZWxUaW1lcih0aGlzLCAmU3BlbGxpbmdDb3JyZWN0aW9uQ29u
dHJvbGxlcjo6Y29ycmVjdGlvblBhbmVsVGltZXJGaXJlZCkKKyAgICAsIG1fdGltZXIodGhpcywg
JkFsdGVybmF0aXZlVGV4dENvbnRyb2xsZXI6OnRpbWVyRmlyZWQpCiB7CiB9CiAKLVNwZWxsaW5n
Q29ycmVjdGlvbkNvbnRyb2xsZXI6On5TcGVsbGluZ0NvcnJlY3Rpb25Db250cm9sbGVyKCkKK0Fs
dGVybmF0aXZlVGV4dENvbnRyb2xsZXI6On5BbHRlcm5hdGl2ZVRleHRDb250cm9sbGVyKCkKIHsK
LSAgICBkaXNtaXNzKFJlYXNvbkZvckRpc21pc3NpbmdDb3JyZWN0aW9uUGFuZWxJZ25vcmVkKTsK
KyAgICBkaXNtaXNzKFJlYXNvbkZvckRpc21pc3NpbmdBbHRlcm5hdGl2ZVRleHRJZ25vcmVkKTsK
IH0KIAotdm9pZCBTcGVsbGluZ0NvcnJlY3Rpb25Db250cm9sbGVyOjpzdGFydENvcnJlY3Rpb25Q
YW5lbFRpbWVyKENvcnJlY3Rpb25QYW5lbEluZm86OlBhbmVsVHlwZSB0eXBlKQordm9pZCBBbHRl
cm5hdGl2ZVRleHRDb250cm9sbGVyOjpzdGFydEFsdGVybmF0aXZlVGV4dFVJVGltZXIoQWx0ZXJu
YXRpdmVUZXh0VHlwZSB0eXBlKQogewogICAgIGNvbnN0IGRvdWJsZSBjb3JyZWN0aW9uUGFuZWxU
aW1lckludGVydmFsID0gMC4zOwogICAgIGlmICghaXNBdXRvbWF0aWNTcGVsbGluZ0NvcnJlY3Rp
b25FbmFibGVkKCkpCiAgICAgICAgIHJldHVybjsKIAogICAgIC8vIElmIHR5cGUgaXMgUGFuZWxU
eXBlUmV2ZXJzaW9uLCB0aGVuIHRoZSBuZXcgcmFuZ2UgaGFzIGJlZW4gc2V0LiBTbyB3ZSBzaG91
bGRuJ3QgY2xlYXIgaXQuCi0gICAgaWYgKHR5cGUgPT0gQ29ycmVjdGlvblBhbmVsSW5mbzo6UGFu
ZWxUeXBlQ29ycmVjdGlvbikKLSAgICAgICAgbV9jb3JyZWN0aW9uUGFuZWxJbmZvLnJhbmdlVG9C
ZVJlcGxhY2VkLmNsZWFyKCk7Ci0gICAgbV9jb3JyZWN0aW9uUGFuZWxJbmZvLnBhbmVsVHlwZSA9
IHR5cGU7Ci0gICAgbV9jb3JyZWN0aW9uUGFuZWxUaW1lci5zdGFydE9uZVNob3QoY29ycmVjdGlv
blBhbmVsVGltZXJJbnRlcnZhbCk7CisgICAgaWYgKHR5cGUgPT0gQWx0ZXJuYXRpdmVUZXh0VHlw
ZUNvcnJlY3Rpb24pCisgICAgICAgIG1fYWx0ZXJuYXRpdmVUZXh0SW5mby5yYW5nZVdpdGhBbHRl
cm5hdGl2ZS5jbGVhcigpOworICAgIG1fYWx0ZXJuYXRpdmVUZXh0SW5mby50eXBlID0gdHlwZTsK
KyAgICBtX3RpbWVyLnN0YXJ0T25lU2hvdChjb3JyZWN0aW9uUGFuZWxUaW1lckludGVydmFsKTsK
IH0KIAotdm9pZCBTcGVsbGluZ0NvcnJlY3Rpb25Db250cm9sbGVyOjpzdG9wQ29ycmVjdGlvblBh
bmVsVGltZXIoKQordm9pZCBBbHRlcm5hdGl2ZVRleHRDb250cm9sbGVyOjpzdG9wQWx0ZXJuYXRp
dmVUZXh0VUlUaW1lcigpCiB7Ci0gICAgbV9jb3JyZWN0aW9uUGFuZWxUaW1lci5zdG9wKCk7Ci0g
ICAgbV9jb3JyZWN0aW9uUGFuZWxJbmZvLnJhbmdlVG9CZVJlcGxhY2VkLmNsZWFyKCk7CisgICAg
bV90aW1lci5zdG9wKCk7CisgICAgbV9hbHRlcm5hdGl2ZVRleHRJbmZvLnJhbmdlV2l0aEFsdGVy
bmF0aXZlLmNsZWFyKCk7CiB9CiAKLXZvaWQgU3BlbGxpbmdDb3JyZWN0aW9uQ29udHJvbGxlcjo6
c3RvcFBlbmRpbmdDb3JyZWN0aW9uKGNvbnN0IFZpc2libGVTZWxlY3Rpb24mIG9sZFNlbGVjdGlv
bikKK3ZvaWQgQWx0ZXJuYXRpdmVUZXh0Q29udHJvbGxlcjo6c3RvcFBlbmRpbmdDb3JyZWN0aW9u
KGNvbnN0IFZpc2libGVTZWxlY3Rpb24mIG9sZFNlbGVjdGlvbikKIHsKICAgICAvLyBNYWtlIHN1
cmUgdGhlcmUncyBubyBwZW5kaW5nIGF1dG9jb3JyZWN0aW9uIGJlZm9yZSB3ZSBjYWxsIG1hcmtN
aXNzcGVsbGluZ3NBbmRCYWRHcmFtbWFyKCkgYmVsb3cuCiAgICAgVmlzaWJsZVNlbGVjdGlvbiBj
dXJyZW50U2VsZWN0aW9uKG1fZnJhbWUtPnNlbGVjdGlvbigpLT5zZWxlY3Rpb24oKSk7CiAgICAg
aWYgKGN1cnJlbnRTZWxlY3Rpb24gPT0gb2xkU2VsZWN0aW9uKQogICAgICAgICByZXR1cm47CiAK
LSAgICBzdG9wQ29ycmVjdGlvblBhbmVsVGltZXIoKTsKLSAgICBkaXNtaXNzKFJlYXNvbkZvckRp
c21pc3NpbmdDb3JyZWN0aW9uUGFuZWxJZ25vcmVkKTsKKyAgICBzdG9wQWx0ZXJuYXRpdmVUZXh0
VUlUaW1lcigpOworICAgIGRpc21pc3MoUmVhc29uRm9yRGlzbWlzc2luZ0FsdGVybmF0aXZlVGV4
dElnbm9yZWQpOwogfQogCi12b2lkIFNwZWxsaW5nQ29ycmVjdGlvbkNvbnRyb2xsZXI6OmFwcGx5
UGVuZGluZ0NvcnJlY3Rpb24oY29uc3QgVmlzaWJsZVNlbGVjdGlvbiYgc2VsZWN0aW9uQWZ0ZXJU
eXBpbmcpCit2b2lkIEFsdGVybmF0aXZlVGV4dENvbnRyb2xsZXI6OmFwcGx5UGVuZGluZ0NvcnJl
Y3Rpb24oY29uc3QgVmlzaWJsZVNlbGVjdGlvbiYgc2VsZWN0aW9uQWZ0ZXJUeXBpbmcpCiB7CiAg
ICAgLy8gQXBwbHkgcGVuZGluZyBhdXRvY29ycmVjdGlvbiBiZWZvcmUgbmV4dCByb3VuZCBvZiBz
cGVsbCBjaGVja2luZy4KICAgICBib29sIGRvQXBwbHlDb3JyZWN0aW9uID0gdHJ1ZTsKQEAgLTEz
OCw4NyArMTU0LDg3IEBAIHZvaWQgU3BlbGxpbmdDb3JyZWN0aW9uQ29udHJvbGxlcjo6YXBwbHkK
ICAgICAgICAgICAgIGRvQXBwbHlDb3JyZWN0aW9uID0gZmFsc2U7CiAgICAgfQogICAgIGlmIChk
b0FwcGx5Q29ycmVjdGlvbikKLSAgICAgICAgaGFuZGxlQ29ycmVjdGlvblBhbmVsUmVzdWx0KGRp
c21pc3NTb29uKFJlYXNvbkZvckRpc21pc3NpbmdDb3JyZWN0aW9uUGFuZWxBY2NlcHRlZCkpOyAK
KyAgICAgICAgaGFuZGxlQWx0ZXJuYXRpdmVUZXh0VUlSZXN1bHQoZGlzbWlzc1Nvb24oUmVhc29u
Rm9yRGlzbWlzc2luZ0FsdGVybmF0aXZlVGV4dEFjY2VwdGVkKSk7IAogICAgIGVsc2UKLSAgICAg
ICAgbV9jb3JyZWN0aW9uUGFuZWxJbmZvLnJhbmdlVG9CZVJlcGxhY2VkLmNsZWFyKCk7CisgICAg
ICAgIG1fYWx0ZXJuYXRpdmVUZXh0SW5mby5yYW5nZVdpdGhBbHRlcm5hdGl2ZS5jbGVhcigpOwog
fQogCi1ib29sIFNwZWxsaW5nQ29ycmVjdGlvbkNvbnRyb2xsZXI6Omhhc1BlbmRpbmdDb3JyZWN0
aW9uKCkgY29uc3QKK2Jvb2wgQWx0ZXJuYXRpdmVUZXh0Q29udHJvbGxlcjo6aGFzUGVuZGluZ0Nv
cnJlY3Rpb24oKSBjb25zdAogewotICAgIHJldHVybiBtX2NvcnJlY3Rpb25QYW5lbEluZm8ucmFu
Z2VUb0JlUmVwbGFjZWQ7CisgICAgcmV0dXJuIG1fYWx0ZXJuYXRpdmVUZXh0SW5mby5yYW5nZVdp
dGhBbHRlcm5hdGl2ZTsKIH0KIAotYm9vbCBTcGVsbGluZ0NvcnJlY3Rpb25Db250cm9sbGVyOjpp
c1NwZWxsaW5nTWFya2VyQWxsb3dlZChQYXNzUmVmUHRyPFJhbmdlPiBtaXNzcGVsbGluZ1Jhbmdl
KSBjb25zdAorYm9vbCBBbHRlcm5hdGl2ZVRleHRDb250cm9sbGVyOjppc1NwZWxsaW5nTWFya2Vy
QWxsb3dlZChQYXNzUmVmUHRyPFJhbmdlPiBtaXNzcGVsbGluZ1JhbmdlKSBjb25zdAogewogICAg
IHJldHVybiAhbV9mcmFtZS0+ZG9jdW1lbnQoKS0+bWFya2VycygpLT5oYXNNYXJrZXJzKG1pc3Nw
ZWxsaW5nUmFuZ2UuZ2V0KCksIERvY3VtZW50TWFya2VyOjpTcGVsbENoZWNraW5nRXhlbXB0aW9u
KTsKIH0KIAotdm9pZCBTcGVsbGluZ0NvcnJlY3Rpb25Db250cm9sbGVyOjpzaG93KFBhc3NSZWZQ
dHI8UmFuZ2U+IHJhbmdlVG9SZXBsYWNlLCBjb25zdCBTdHJpbmcmIHJlcGxhY2VtZW50KQordm9p
ZCBBbHRlcm5hdGl2ZVRleHRDb250cm9sbGVyOjpzaG93KFBhc3NSZWZQdHI8UmFuZ2U+IHJhbmdl
VG9SZXBsYWNlLCBjb25zdCBTdHJpbmcmIHJlcGxhY2VtZW50KQogewogICAgIEZsb2F0UmVjdCBi
b3VuZGluZ0JveCA9IHJvb3RWaWV3UmVjdEZvclJhbmdlKHJhbmdlVG9SZXBsYWNlLmdldCgpKTsK
ICAgICBpZiAoYm91bmRpbmdCb3guaXNFbXB0eSgpKQogICAgICAgICByZXR1cm47Ci0gICAgbV9j
b3JyZWN0aW9uUGFuZWxJbmZvLnJlcGxhY2VkU3RyaW5nID0gcGxhaW5UZXh0KHJhbmdlVG9SZXBs
YWNlLmdldCgpKTsKLSAgICBtX2NvcnJlY3Rpb25QYW5lbEluZm8ucmFuZ2VUb0JlUmVwbGFjZWQg
PSByYW5nZVRvUmVwbGFjZTsKLSAgICBtX2NvcnJlY3Rpb25QYW5lbEluZm8ucmVwbGFjZW1lbnRT
dHJpbmcgPSByZXBsYWNlbWVudDsKLSAgICBtX2NvcnJlY3Rpb25QYW5lbEluZm8uaXNBY3RpdmUg
PSB0cnVlOwotICAgIGNsaWVudCgpLT5zaG93Q29ycmVjdGlvblBhbmVsKG1fY29ycmVjdGlvblBh
bmVsSW5mby5wYW5lbFR5cGUsIGJvdW5kaW5nQm94LCBtX2NvcnJlY3Rpb25QYW5lbEluZm8ucmVw
bGFjZWRTdHJpbmcsIHJlcGxhY2VtZW50LCBWZWN0b3I8U3RyaW5nPigpKTsKKyAgICBtX2FsdGVy
bmF0aXZlVGV4dEluZm8ub3JpZ2luYWxUZXh0ID0gcGxhaW5UZXh0KHJhbmdlVG9SZXBsYWNlLmdl
dCgpKTsKKyAgICBtX2FsdGVybmF0aXZlVGV4dEluZm8ucmFuZ2VXaXRoQWx0ZXJuYXRpdmUgPSBy
YW5nZVRvUmVwbGFjZTsKKyAgICBtX2FsdGVybmF0aXZlVGV4dEluZm8uZGV0YWlscyA9IEF1dG9j
b3JyZWN0aW9uQWx0ZXJuYXRpdmVEZXRhaWxzOjpjcmVhdGUocmVwbGFjZW1lbnQpOworICAgIG1f
YWx0ZXJuYXRpdmVUZXh0SW5mby5pc0FjdGl2ZSA9IHRydWU7CisgICAgY2xpZW50KCktPnNob3dD
b3JyZWN0aW9uUGFuZWwobV9hbHRlcm5hdGl2ZVRleHRJbmZvLnR5cGUsIGJvdW5kaW5nQm94LCBt
X2FsdGVybmF0aXZlVGV4dEluZm8ub3JpZ2luYWxUZXh0LCByZXBsYWNlbWVudCwgVmVjdG9yPFN0
cmluZz4oKSk7CiB9CiAKLXZvaWQgU3BlbGxpbmdDb3JyZWN0aW9uQ29udHJvbGxlcjo6aGFuZGxl
Q2FuY2VsT3BlcmF0aW9uKCkKK3ZvaWQgQWx0ZXJuYXRpdmVUZXh0Q29udHJvbGxlcjo6aGFuZGxl
Q2FuY2VsT3BlcmF0aW9uKCkKIHsKLSAgICBpZiAoIW1fY29ycmVjdGlvblBhbmVsSW5mby5pc0Fj
dGl2ZSkKKyAgICBpZiAoIW1fYWx0ZXJuYXRpdmVUZXh0SW5mby5pc0FjdGl2ZSkKICAgICAgICAg
cmV0dXJuOwotICAgIG1fY29ycmVjdGlvblBhbmVsSW5mby5pc0FjdGl2ZSA9IGZhbHNlOwotICAg
IGRpc21pc3MoUmVhc29uRm9yRGlzbWlzc2luZ0NvcnJlY3Rpb25QYW5lbENhbmNlbGxlZCk7Cisg
ICAgbV9hbHRlcm5hdGl2ZVRleHRJbmZvLmlzQWN0aXZlID0gZmFsc2U7CisgICAgZGlzbWlzcyhS
ZWFzb25Gb3JEaXNtaXNzaW5nQWx0ZXJuYXRpdmVUZXh0Q2FuY2VsbGVkKTsKIH0KIAotdm9pZCBT
cGVsbGluZ0NvcnJlY3Rpb25Db250cm9sbGVyOjpkaXNtaXNzKFJlYXNvbkZvckRpc21pc3NpbmdD
b3JyZWN0aW9uUGFuZWwgcmVhc29uRm9yRGlzbWlzc2luZykKK3ZvaWQgQWx0ZXJuYXRpdmVUZXh0
Q29udHJvbGxlcjo6ZGlzbWlzcyhSZWFzb25Gb3JEaXNtaXNzaW5nQWx0ZXJuYXRpdmVUZXh0IHJl
YXNvbkZvckRpc21pc3NpbmcpCiB7Ci0gICAgaWYgKCFtX2NvcnJlY3Rpb25QYW5lbEluZm8uaXNB
Y3RpdmUpCisgICAgaWYgKCFtX2FsdGVybmF0aXZlVGV4dEluZm8uaXNBY3RpdmUpCiAgICAgICAg
IHJldHVybjsKLSAgICBtX2NvcnJlY3Rpb25QYW5lbEluZm8uaXNBY3RpdmUgPSBmYWxzZTsKLSAg
ICBtX2NvcnJlY3Rpb25QYW5lbElzRGlzbWlzc2VkQnlFZGl0b3IgPSB0cnVlOworICAgIG1fYWx0
ZXJuYXRpdmVUZXh0SW5mby5pc0FjdGl2ZSA9IGZhbHNlOworICAgIG1faXNEaXNtaXNzZWRCeUVk
aXRpbmcgPSB0cnVlOwogICAgIGlmIChjbGllbnQoKSkKICAgICAgICAgY2xpZW50KCktPmRpc21p
c3NDb3JyZWN0aW9uUGFuZWwocmVhc29uRm9yRGlzbWlzc2luZyk7CiB9CiAKLVN0cmluZyBTcGVs
bGluZ0NvcnJlY3Rpb25Db250cm9sbGVyOjpkaXNtaXNzU29vbihSZWFzb25Gb3JEaXNtaXNzaW5n
Q29ycmVjdGlvblBhbmVsIHJlYXNvbkZvckRpc21pc3NpbmcpCitTdHJpbmcgQWx0ZXJuYXRpdmVU
ZXh0Q29udHJvbGxlcjo6ZGlzbWlzc1Nvb24oUmVhc29uRm9yRGlzbWlzc2luZ0FsdGVybmF0aXZl
VGV4dCByZWFzb25Gb3JEaXNtaXNzaW5nKQogewotICAgIGlmICghbV9jb3JyZWN0aW9uUGFuZWxJ
bmZvLmlzQWN0aXZlKQorICAgIGlmICghbV9hbHRlcm5hdGl2ZVRleHRJbmZvLmlzQWN0aXZlKQog
ICAgICAgICByZXR1cm4gU3RyaW5nKCk7Ci0gICAgbV9jb3JyZWN0aW9uUGFuZWxJbmZvLmlzQWN0
aXZlID0gZmFsc2U7Ci0gICAgbV9jb3JyZWN0aW9uUGFuZWxJc0Rpc21pc3NlZEJ5RWRpdG9yID0g
dHJ1ZTsKKyAgICBtX2FsdGVybmF0aXZlVGV4dEluZm8uaXNBY3RpdmUgPSBmYWxzZTsKKyAgICBt
X2lzRGlzbWlzc2VkQnlFZGl0aW5nID0gdHJ1ZTsKICAgICBpZiAoIWNsaWVudCgpKQogICAgICAg
ICByZXR1cm4gU3RyaW5nKCk7CiAgICAgcmV0dXJuIGNsaWVudCgpLT5kaXNtaXNzQ29ycmVjdGlv
blBhbmVsU29vbihyZWFzb25Gb3JEaXNtaXNzaW5nKTsKIH0KIAotdm9pZCBTcGVsbGluZ0NvcnJl
Y3Rpb25Db250cm9sbGVyOjphcHBseUNvcnJlY3Rpb25QYW5lbEluZm8oY29uc3QgVmVjdG9yPERv
Y3VtZW50TWFya2VyOjpNYXJrZXJUeXBlPiYgbWFya2VyVHlwZXNUb0FkZCkKK3ZvaWQgQWx0ZXJu
YXRpdmVUZXh0Q29udHJvbGxlcjo6YXBwbHlBbHRlcm5hdGl2ZVRleHQoY29uc3QgU3RyaW5nJiBh
bHRlcm5hdGl2ZSwgY29uc3QgVmVjdG9yPERvY3VtZW50TWFya2VyOjpNYXJrZXJUeXBlPiYgbWFy
a2VyVHlwZXNUb0FkZCkKIHsKLSAgICBpZiAoIW1fY29ycmVjdGlvblBhbmVsSW5mby5yYW5nZVRv
QmVSZXBsYWNlZCkKKyAgICBpZiAoIW1fYWx0ZXJuYXRpdmVUZXh0SW5mby5yYW5nZVdpdGhBbHRl
cm5hdGl2ZSkKICAgICAgICAgcmV0dXJuOwogCiAgICAgRXhjZXB0aW9uQ29kZSBlYyA9IDA7Ci0g
ICAgUmVmUHRyPFJhbmdlPiBwYXJhZ3JhcGhSYW5nZUNvbnRhaW5pbmdDb3JyZWN0aW9uID0gbV9j
b3JyZWN0aW9uUGFuZWxJbmZvLnJhbmdlVG9CZVJlcGxhY2VkLT5jbG9uZVJhbmdlKGVjKTsKKyAg
ICBSZWZQdHI8UmFuZ2U+IHBhcmFncmFwaFJhbmdlQ29udGFpbmluZ0NvcnJlY3Rpb24gPSBtX2Fs
dGVybmF0aXZlVGV4dEluZm8ucmFuZ2VXaXRoQWx0ZXJuYXRpdmUtPmNsb25lUmFuZ2UoZWMpOwog
ICAgIGlmIChlYykKICAgICAgICAgcmV0dXJuOwogCi0gICAgc2V0U3RhcnQocGFyYWdyYXBoUmFu
Z2VDb250YWluaW5nQ29ycmVjdGlvbi5nZXQoKSwgc3RhcnRPZlBhcmFncmFwaChtX2NvcnJlY3Rp
b25QYW5lbEluZm8ucmFuZ2VUb0JlUmVwbGFjZWQtPnN0YXJ0UG9zaXRpb24oKSkpOwotICAgIHNl
dEVuZChwYXJhZ3JhcGhSYW5nZUNvbnRhaW5pbmdDb3JyZWN0aW9uLmdldCgpLCBlbmRPZlBhcmFn
cmFwaChtX2NvcnJlY3Rpb25QYW5lbEluZm8ucmFuZ2VUb0JlUmVwbGFjZWQtPmVuZFBvc2l0aW9u
KCkpKTsKKyAgICBzZXRTdGFydChwYXJhZ3JhcGhSYW5nZUNvbnRhaW5pbmdDb3JyZWN0aW9uLmdl
dCgpLCBzdGFydE9mUGFyYWdyYXBoKG1fYWx0ZXJuYXRpdmVUZXh0SW5mby5yYW5nZVdpdGhBbHRl
cm5hdGl2ZS0+c3RhcnRQb3NpdGlvbigpKSk7CisgICAgc2V0RW5kKHBhcmFncmFwaFJhbmdlQ29u
dGFpbmluZ0NvcnJlY3Rpb24uZ2V0KCksIGVuZE9mUGFyYWdyYXBoKG1fYWx0ZXJuYXRpdmVUZXh0
SW5mby5yYW5nZVdpdGhBbHRlcm5hdGl2ZS0+ZW5kUG9zaXRpb24oKSkpOwogCi0gICAgLy8gQWZ0
ZXIgd2UgcmVwbGFjZSB0aGUgd29yZCBhdCByYW5nZSByYW5nZVRvQmVSZXBsYWNlZCwgd2UgbmVl
ZCB0byBhZGQgbWFya2VycyB0byB0aGF0IHJhbmdlLgotICAgIC8vIEhvd2V2ZXIsIG9uY2UgdGhl
IHJlcGxhY2VtZW50IHRvb2sgcGxhY2UsIHRoZSB2YWx1ZSBvZiByYW5nZVRvQmVSZXBsYWNlZCBp
cyBub3QgdmFsaWQgYW55bW9yZS4KLSAgICAvLyBTbyBiZWZvcmUgd2UgY2Fycnkgb3V0IHRoZSBy
ZXBsYWNlbWVudCwgd2UgbmVlZCB0byBzdG9yZSB0aGUgc3RhcnQgcG9zaXRpb24gb2YgcmFuZ2VU
b0JlUmVwbGFjZWQKKyAgICAvLyBBZnRlciB3ZSByZXBsYWNlIHRoZSB3b3JkIGF0IHJhbmdlIHJh
bmdlV2l0aEFsdGVybmF0aXZlLCB3ZSBuZWVkIHRvIGFkZCBtYXJrZXJzIHRvIHRoYXQgcmFuZ2Uu
CisgICAgLy8gSG93ZXZlciwgb25jZSB0aGUgcmVwbGFjZW1lbnQgdG9vayBwbGFjZSwgdGhlIHZh
bHVlIG9mIHJhbmdlV2l0aEFsdGVybmF0aXZlIGlzIG5vdCB2YWxpZCBhbnltb3JlLgorICAgIC8v
IFNvIGJlZm9yZSB3ZSBjYXJyeSBvdXQgdGhlIHJlcGxhY2VtZW50LCB3ZSBuZWVkIHRvIHN0b3Jl
IHRoZSBzdGFydCBwb3NpdGlvbiBvZiByYW5nZVdpdGhBbHRlcm5hdGl2ZQogICAgIC8vIHJlbGF0
aXZlIHRvIHRoZSBzdGFydCBwb3NpdGlvbiBvZiB0aGUgY29udGFpbmluZyBwYXJhZ3JhcGguIFdl
IHVzZSBjb3JyZWN0aW9uU3RhcnRPZmZzZXRJblBhcmFncmFwaAogICAgIC8vIHRvIHN0b3JlIHRo
aXMgdmFsdWUuIEluIG9yZGVyIHRvIG9idGFpbiB0aGlzIG9mZnNldCwgd2UgbmVlZCB0byBmaXJz
dCBjcmVhdGUgYSByYW5nZQotICAgIC8vIHdoaWNoIHNwYW5zIGZyb20gdGhlIHN0YXJ0IG9mIHBh
cmFncmFwaCB0byB0aGUgc3RhcnQgcG9zaXRpb24gb2YgcmFuZ2VUb0JlUmVwbGFjZWQuCisgICAg
Ly8gd2hpY2ggc3BhbnMgZnJvbSB0aGUgc3RhcnQgb2YgcGFyYWdyYXBoIHRvIHRoZSBzdGFydCBw
b3NpdGlvbiBvZiByYW5nZVdpdGhBbHRlcm5hdGl2ZS4KICAgICBSZWZQdHI8UmFuZ2U+IGNvcnJl
Y3Rpb25TdGFydE9mZnNldEluUGFyYWdyYXBoQXNSYW5nZSA9IFJhbmdlOjpjcmVhdGUocGFyYWdy
YXBoUmFuZ2VDb250YWluaW5nQ29ycmVjdGlvbi0+c3RhcnRDb250YWluZXIoZWMpLT5kb2N1bWVu
dCgpLCBwYXJhZ3JhcGhSYW5nZUNvbnRhaW5pbmdDb3JyZWN0aW9uLT5zdGFydFBvc2l0aW9uKCks
IHBhcmFncmFwaFJhbmdlQ29udGFpbmluZ0NvcnJlY3Rpb24tPnN0YXJ0UG9zaXRpb24oKSk7CiAg
ICAgaWYgKGVjKQogICAgICAgICByZXR1cm47CiAKLSAgICBQb3NpdGlvbiBzdGFydFBvc2l0aW9u
T2ZSYW5nZVRvQmVSZXBsYWNlZCA9IG1fY29ycmVjdGlvblBhbmVsSW5mby5yYW5nZVRvQmVSZXBs
YWNlZC0+c3RhcnRQb3NpdGlvbigpOwotICAgIGNvcnJlY3Rpb25TdGFydE9mZnNldEluUGFyYWdy
YXBoQXNSYW5nZS0+c2V0RW5kKHN0YXJ0UG9zaXRpb25PZlJhbmdlVG9CZVJlcGxhY2VkLmNvbnRh
aW5lck5vZGUoKSwgc3RhcnRQb3NpdGlvbk9mUmFuZ2VUb0JlUmVwbGFjZWQuY29tcHV0ZU9mZnNl
dEluQ29udGFpbmVyTm9kZSgpLCBlYyk7CisgICAgUG9zaXRpb24gc3RhcnRQb3NpdGlvbk9mcmFu
Z2VXaXRoQWx0ZXJuYXRpdmUgPSBtX2FsdGVybmF0aXZlVGV4dEluZm8ucmFuZ2VXaXRoQWx0ZXJu
YXRpdmUtPnN0YXJ0UG9zaXRpb24oKTsKKyAgICBjb3JyZWN0aW9uU3RhcnRPZmZzZXRJblBhcmFn
cmFwaEFzUmFuZ2UtPnNldEVuZChzdGFydFBvc2l0aW9uT2ZyYW5nZVdpdGhBbHRlcm5hdGl2ZS5j
b250YWluZXJOb2RlKCksIHN0YXJ0UG9zaXRpb25PZnJhbmdlV2l0aEFsdGVybmF0aXZlLmNvbXB1
dGVPZmZzZXRJbkNvbnRhaW5lck5vZGUoKSwgZWMpOwogICAgIGlmIChlYykKICAgICAgICAgcmV0
dXJuOwogCkBAIC0yMjYsMTQgKzI0MiwxNCBAQCB2b2lkIFNwZWxsaW5nQ29ycmVjdGlvbkNvbnRy
b2xsZXI6OmFwcGx5CiAgICAgaW50IGNvcnJlY3Rpb25TdGFydE9mZnNldEluUGFyYWdyYXBoID0g
VGV4dEl0ZXJhdG9yOjpyYW5nZUxlbmd0aChjb3JyZWN0aW9uU3RhcnRPZmZzZXRJblBhcmFncmFw
aEFzUmFuZ2UuZ2V0KCkpOwogCiAgICAgLy8gQ2xvbmUgdGhlIHJhbmdlLCBzaW5jZSB0aGUgY2Fs
bGVyIG9mIHRoaXMgbWV0aG9kIG1heSB3YW50IHRvIGtlZXAgdGhlIG9yaWdpbmFsIHJhbmdlIGFy
b3VuZC4KLSAgICBSZWZQdHI8UmFuZ2U+IHJhbmdlVG9CZVJlcGxhY2VkID0gbV9jb3JyZWN0aW9u
UGFuZWxJbmZvLnJhbmdlVG9CZVJlcGxhY2VkLT5jbG9uZVJhbmdlKGVjKTsKLSAgICBhcHBseUNv
bW1hbmQoU3BlbGxpbmdDb3JyZWN0aW9uQ29tbWFuZDo6Y3JlYXRlKHJhbmdlVG9CZVJlcGxhY2Vk
LCBtX2NvcnJlY3Rpb25QYW5lbEluZm8ucmVwbGFjZW1lbnRTdHJpbmcpKTsKKyAgICBSZWZQdHI8
UmFuZ2U+IHJhbmdlV2l0aEFsdGVybmF0aXZlID0gbV9hbHRlcm5hdGl2ZVRleHRJbmZvLnJhbmdl
V2l0aEFsdGVybmF0aXZlLT5jbG9uZVJhbmdlKGVjKTsKKyAgICBhcHBseUNvbW1hbmQoU3BlbGxp
bmdDb3JyZWN0aW9uQ29tbWFuZDo6Y3JlYXRlKHJhbmdlV2l0aEFsdGVybmF0aXZlLCBhbHRlcm5h
dGl2ZSkpOwogICAgIHNldEVuZChwYXJhZ3JhcGhSYW5nZUNvbnRhaW5pbmdDb3JyZWN0aW9uLmdl
dCgpLCBtX2ZyYW1lLT5zZWxlY3Rpb24oKS0+c2VsZWN0aW9uKCkuc3RhcnQoKSk7Ci0gICAgUmVm
UHRyPFJhbmdlPiByZXBsYWNlbWVudFJhbmdlID0gVGV4dEl0ZXJhdG9yOjpzdWJyYW5nZShwYXJh
Z3JhcGhSYW5nZUNvbnRhaW5pbmdDb3JyZWN0aW9uLmdldCgpLCBjb3JyZWN0aW9uU3RhcnRPZmZz
ZXRJblBhcmFncmFwaCwgIG1fY29ycmVjdGlvblBhbmVsSW5mby5yZXBsYWNlbWVudFN0cmluZy5s
ZW5ndGgoKSk7CisgICAgUmVmUHRyPFJhbmdlPiByZXBsYWNlbWVudFJhbmdlID0gVGV4dEl0ZXJh
dG9yOjpzdWJyYW5nZShwYXJhZ3JhcGhSYW5nZUNvbnRhaW5pbmdDb3JyZWN0aW9uLmdldCgpLCBj
b3JyZWN0aW9uU3RhcnRPZmZzZXRJblBhcmFncmFwaCwgYWx0ZXJuYXRpdmUubGVuZ3RoKCkpOwog
ICAgIFN0cmluZyBuZXdUZXh0ID0gcGxhaW5UZXh0KHJlcGxhY2VtZW50UmFuZ2UuZ2V0KCkpOwog
CiAgICAgLy8gQ2hlY2sgdG8gc2VlIGlmIHJlcGxhY2VtZW50IHN1Y2NlZWRlZC4KLSAgICBpZiAo
bmV3VGV4dCAhPSBtX2NvcnJlY3Rpb25QYW5lbEluZm8ucmVwbGFjZW1lbnRTdHJpbmcpCisgICAg
aWYgKG5ld1RleHQgIT0gYWx0ZXJuYXRpdmUpCiAgICAgICAgIHJldHVybjsKIAogICAgIERvY3Vt
ZW50TWFya2VyQ29udHJvbGxlciogbWFya2VycyA9IHJlcGxhY2VtZW50UmFuZ2UtPnN0YXJ0Q29u
dGFpbmVyKCktPmRvY3VtZW50KCktPm1hcmtlcnMoKTsKQEAgLTI0MSwzNCArMjU3LDM0IEBAIHZv
aWQgU3BlbGxpbmdDb3JyZWN0aW9uQ29udHJvbGxlcjo6YXBwbHkKICAgICBmb3IgKHNpemVfdCBp
ID0gMDsgaSA8IHNpemU7ICsraSkgewogICAgICAgICBEb2N1bWVudE1hcmtlcjo6TWFya2VyVHlw
ZSBtYXJrZXJUeXBlID0gbWFya2VyVHlwZXNUb0FkZFtpXTsKICAgICAgICAgU3RyaW5nIGRlc2Ny
aXB0aW9uOwotICAgICAgICBpZiAobV9jb3JyZWN0aW9uUGFuZWxJbmZvLnBhbmVsVHlwZSAhPSBD
b3JyZWN0aW9uUGFuZWxJbmZvOjpQYW5lbFR5cGVSZXZlcnNpb24gJiYgKG1hcmtlclR5cGUgPT0g
RG9jdW1lbnRNYXJrZXI6OlJlcGxhY2VtZW50IHx8IG1hcmtlclR5cGUgPT0gRG9jdW1lbnRNYXJr
ZXI6OkF1dG9jb3JyZWN0ZWQpKQotICAgICAgICAgICAgZGVzY3JpcHRpb24gPSBtX2NvcnJlY3Rp
b25QYW5lbEluZm8ucmVwbGFjZWRTdHJpbmc7CisgICAgICAgIGlmIChtX2FsdGVybmF0aXZlVGV4
dEluZm8udHlwZSAhPSBBbHRlcm5hdGl2ZVRleHRUeXBlUmV2ZXJzaW9uICYmIChtYXJrZXJUeXBl
ID09IERvY3VtZW50TWFya2VyOjpSZXBsYWNlbWVudCB8fCBtYXJrZXJUeXBlID09IERvY3VtZW50
TWFya2VyOjpBdXRvY29ycmVjdGVkKSkKKyAgICAgICAgICAgIGRlc2NyaXB0aW9uID0gbV9hbHRl
cm5hdGl2ZVRleHRJbmZvLm9yaWdpbmFsVGV4dDsKICAgICAgICAgbWFya2Vycy0+YWRkTWFya2Vy
KHJlcGxhY2VtZW50UmFuZ2UuZ2V0KCksIG1hcmtlclR5cGUsIGRlc2NyaXB0aW9uKTsKICAgICB9
CiB9CiAKLWJvb2wgU3BlbGxpbmdDb3JyZWN0aW9uQ29udHJvbGxlcjo6YXBwbHlBdXRvY29ycmVj
dGlvbkJlZm9yZVR5cGluZ0lmQXBwcm9wcmlhdGUoKQorYm9vbCBBbHRlcm5hdGl2ZVRleHRDb250
cm9sbGVyOjphcHBseUF1dG9jb3JyZWN0aW9uQmVmb3JlVHlwaW5nSWZBcHByb3ByaWF0ZSgpCiB7
Ci0gICAgaWYgKCFtX2NvcnJlY3Rpb25QYW5lbEluZm8ucmFuZ2VUb0JlUmVwbGFjZWQgfHwgIW1f
Y29ycmVjdGlvblBhbmVsSW5mby5pc0FjdGl2ZSkKKyAgICBpZiAoIW1fYWx0ZXJuYXRpdmVUZXh0
SW5mby5yYW5nZVdpdGhBbHRlcm5hdGl2ZSB8fCAhbV9hbHRlcm5hdGl2ZVRleHRJbmZvLmlzQWN0
aXZlKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKLSAgICBpZiAobV9jb3JyZWN0aW9uUGFuZWxJ
bmZvLnBhbmVsVHlwZSAhPSBDb3JyZWN0aW9uUGFuZWxJbmZvOjpQYW5lbFR5cGVDb3JyZWN0aW9u
KQorICAgIGlmIChtX2FsdGVybmF0aXZlVGV4dEluZm8udHlwZSAhPSBBbHRlcm5hdGl2ZVRleHRU
eXBlQ29ycmVjdGlvbikKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCiAgICAgUG9zaXRpb24gY2Fy
ZXRQb3NpdGlvbiA9IG1fZnJhbWUtPnNlbGVjdGlvbigpLT5zZWxlY3Rpb24oKS5zdGFydCgpOwog
Ci0gICAgaWYgKG1fY29ycmVjdGlvblBhbmVsSW5mby5yYW5nZVRvQmVSZXBsYWNlZC0+ZW5kUG9z
aXRpb24oKSA9PSBjYXJldFBvc2l0aW9uKSB7Ci0gICAgICAgIGhhbmRsZUNvcnJlY3Rpb25QYW5l
bFJlc3VsdChkaXNtaXNzU29vbihSZWFzb25Gb3JEaXNtaXNzaW5nQ29ycmVjdGlvblBhbmVsQWNj
ZXB0ZWQpKTsKKyAgICBpZiAobV9hbHRlcm5hdGl2ZVRleHRJbmZvLnJhbmdlV2l0aEFsdGVybmF0
aXZlLT5lbmRQb3NpdGlvbigpID09IGNhcmV0UG9zaXRpb24pIHsKKyAgICAgICAgaGFuZGxlQWx0
ZXJuYXRpdmVUZXh0VUlSZXN1bHQoZGlzbWlzc1Nvb24oUmVhc29uRm9yRGlzbWlzc2luZ0FsdGVy
bmF0aXZlVGV4dEFjY2VwdGVkKSk7CiAgICAgICAgIHJldHVybiB0cnVlOwogICAgIH0gCiAgICAg
CiAgICAgLy8gUGVuZGluZyBjb3JyZWN0aW9uIHNob3VsZCBhbHdheXMgYmUgd2hlcmUgY2FyZXQg
aXMuIEJ1dCBpbiBjYXNlIHRoaXMgaXMgbm90IGFsd2F5cyB0cnVlLCB3ZSBzdGlsbCB3YW50IHRv
IGRpc21pc3MgdGhlIHBhbmVsIHdpdGhvdXQgYWNjZXB0aW5nIHRoZSBjb3JyZWN0aW9uLgotICAg
IEFTU0VSVChtX2NvcnJlY3Rpb25QYW5lbEluZm8ucmFuZ2VUb0JlUmVwbGFjZWQtPmVuZFBvc2l0
aW9uKCkgPT0gY2FyZXRQb3NpdGlvbik7Ci0gICAgZGlzbWlzcyhSZWFzb25Gb3JEaXNtaXNzaW5n
Q29ycmVjdGlvblBhbmVsSWdub3JlZCk7CisgICAgQVNTRVJUKG1fYWx0ZXJuYXRpdmVUZXh0SW5m
by5yYW5nZVdpdGhBbHRlcm5hdGl2ZS0+ZW5kUG9zaXRpb24oKSA9PSBjYXJldFBvc2l0aW9uKTsK
KyAgICBkaXNtaXNzKFJlYXNvbkZvckRpc21pc3NpbmdBbHRlcm5hdGl2ZVRleHRJZ25vcmVkKTsK
ICAgICByZXR1cm4gZmFsc2U7CiB9CiAKLXZvaWQgU3BlbGxpbmdDb3JyZWN0aW9uQ29udHJvbGxl
cjo6cmVzcG9uZFRvVW5hcHBsaWVkU3BlbGxDb3JyZWN0aW9uKGNvbnN0IFZpc2libGVTZWxlY3Rp
b24mIHNlbGVjdGlvbk9mQ29ycmVjdGVkLCBjb25zdCBTdHJpbmcmIGNvcnJlY3RlZCwgY29uc3Qg
U3RyaW5nJiBjb3JyZWN0aW9uKQordm9pZCBBbHRlcm5hdGl2ZVRleHRDb250cm9sbGVyOjpyZXNw
b25kVG9VbmFwcGxpZWRTcGVsbENvcnJlY3Rpb24oY29uc3QgVmlzaWJsZVNlbGVjdGlvbiYgc2Vs
ZWN0aW9uT2ZDb3JyZWN0ZWQsIGNvbnN0IFN0cmluZyYgY29ycmVjdGVkLCBjb25zdCBTdHJpbmcm
IGNvcnJlY3Rpb24pCiB7CiAgICAgY2xpZW50KCktPnJlY29yZEF1dG9jb3JyZWN0aW9uUmVzcG9u
c2UoRWRpdG9yQ2xpZW50OjpBdXRvY29ycmVjdGlvblJldmVydGVkLCBjb3JyZWN0ZWQsIGNvcnJl
Y3Rpb24pOwogICAgIG1fZnJhbWUtPmRvY3VtZW50KCktPnVwZGF0ZUxheW91dCgpOwpAQCAtMjgx
LDExICsyOTcsMTEgQEAgdm9pZCBTcGVsbGluZ0NvcnJlY3Rpb25Db250cm9sbGVyOjpyZXNwbwog
ICAgIG1hcmtlcnMtPmFkZE1hcmtlcihyYW5nZS5nZXQoKSwgRG9jdW1lbnRNYXJrZXI6OlNwZWxs
Q2hlY2tpbmdFeGVtcHRpb24pOwogfQogCi12b2lkIFNwZWxsaW5nQ29ycmVjdGlvbkNvbnRyb2xs
ZXI6OmNvcnJlY3Rpb25QYW5lbFRpbWVyRmlyZWQoVGltZXI8U3BlbGxpbmdDb3JyZWN0aW9uQ29u
dHJvbGxlcj4qKQordm9pZCBBbHRlcm5hdGl2ZVRleHRDb250cm9sbGVyOjp0aW1lckZpcmVkKFRp
bWVyPEFsdGVybmF0aXZlVGV4dENvbnRyb2xsZXI+KikKIHsKLSAgICBtX2NvcnJlY3Rpb25QYW5l
bElzRGlzbWlzc2VkQnlFZGl0b3IgPSBmYWxzZTsKLSAgICBzd2l0Y2ggKG1fY29ycmVjdGlvblBh
bmVsSW5mby5wYW5lbFR5cGUpIHsKLSAgICBjYXNlIENvcnJlY3Rpb25QYW5lbEluZm86OlBhbmVs
VHlwZUNvcnJlY3Rpb246IHsKKyAgICBtX2lzRGlzbWlzc2VkQnlFZGl0aW5nID0gZmFsc2U7Cisg
ICAgc3dpdGNoIChtX2FsdGVybmF0aXZlVGV4dEluZm8udHlwZSkgeworICAgIGNhc2UgQWx0ZXJu
YXRpdmVUZXh0VHlwZUNvcnJlY3Rpb246IHsKICAgICAgICAgVmlzaWJsZVNlbGVjdGlvbiBzZWxl
Y3Rpb24obV9mcmFtZS0+c2VsZWN0aW9uKCktPnNlbGVjdGlvbigpKTsKICAgICAgICAgVmlzaWJs
ZVBvc2l0aW9uIHN0YXJ0KHNlbGVjdGlvbi5zdGFydCgpLCBzZWxlY3Rpb24uYWZmaW5pdHkoKSk7
CiAgICAgICAgIFZpc2libGVQb3NpdGlvbiBwID0gc3RhcnRPZldvcmQoc3RhcnQsIExlZnRXb3Jk
SWZPbkJvdW5kYXJ5KTsKQEAgLTI5Myw3NiArMzA5LDc1IEBAIHZvaWQgU3BlbGxpbmdDb3JyZWN0
aW9uQ29udHJvbGxlcjo6Y29ycmUKICAgICAgICAgbV9mcmFtZS0+ZWRpdG9yKCktPm1hcmtBbGxN
aXNzcGVsbGluZ3NBbmRCYWRHcmFtbWFySW5SYW5nZXMoVGV4dENoZWNraW5nVHlwZVNwZWxsaW5n
IHwgVGV4dENoZWNraW5nVHlwZVNob3dDb3JyZWN0aW9uUGFuZWwsIGFkamFjZW50V29yZHMudG9O
b3JtYWxpemVkUmFuZ2UoKS5nZXQoKSwgMCk7CiAgICAgfQogICAgICAgICBicmVhazsKLSAgICBj
YXNlIENvcnJlY3Rpb25QYW5lbEluZm86OlBhbmVsVHlwZVJldmVyc2lvbjogewotICAgICAgICBp
ZiAoIW1fY29ycmVjdGlvblBhbmVsSW5mby5yYW5nZVRvQmVSZXBsYWNlZCkKKyAgICBjYXNlIEFs
dGVybmF0aXZlVGV4dFR5cGVSZXZlcnNpb246IHsKKyAgICAgICAgaWYgKCFtX2FsdGVybmF0aXZl
VGV4dEluZm8ucmFuZ2VXaXRoQWx0ZXJuYXRpdmUpCiAgICAgICAgICAgICBicmVhazsKLSAgICAg
ICAgbV9jb3JyZWN0aW9uUGFuZWxJbmZvLmlzQWN0aXZlID0gdHJ1ZTsKLSAgICAgICAgbV9jb3Jy
ZWN0aW9uUGFuZWxJbmZvLnJlcGxhY2VkU3RyaW5nID0gcGxhaW5UZXh0KG1fY29ycmVjdGlvblBh
bmVsSW5mby5yYW5nZVRvQmVSZXBsYWNlZC5nZXQoKSk7Ci0gICAgICAgIEZsb2F0UmVjdCBib3Vu
ZGluZ0JveCA9IHJvb3RWaWV3UmVjdEZvclJhbmdlKG1fY29ycmVjdGlvblBhbmVsSW5mby5yYW5n
ZVRvQmVSZXBsYWNlZC5nZXQoKSk7Ci0gICAgICAgIGlmICghYm91bmRpbmdCb3guaXNFbXB0eSgp
KQotICAgICAgICAgICAgY2xpZW50KCktPnNob3dDb3JyZWN0aW9uUGFuZWwobV9jb3JyZWN0aW9u
UGFuZWxJbmZvLnBhbmVsVHlwZSwgYm91bmRpbmdCb3gsIG1fY29ycmVjdGlvblBhbmVsSW5mby5y
ZXBsYWNlZFN0cmluZywgbV9jb3JyZWN0aW9uUGFuZWxJbmZvLnJlcGxhY2VtZW50U3RyaW5nLCBW
ZWN0b3I8U3RyaW5nPigpKTsKKyAgICAgICAgbV9hbHRlcm5hdGl2ZVRleHRJbmZvLmlzQWN0aXZl
ID0gdHJ1ZTsKKyAgICAgICAgbV9hbHRlcm5hdGl2ZVRleHRJbmZvLm9yaWdpbmFsVGV4dCA9IHBs
YWluVGV4dChtX2FsdGVybmF0aXZlVGV4dEluZm8ucmFuZ2VXaXRoQWx0ZXJuYXRpdmUuZ2V0KCkp
OworICAgICAgICBGbG9hdFJlY3QgYm91bmRpbmdCb3ggPSByb290Vmlld1JlY3RGb3JSYW5nZSht
X2FsdGVybmF0aXZlVGV4dEluZm8ucmFuZ2VXaXRoQWx0ZXJuYXRpdmUuZ2V0KCkpOworICAgICAg
ICBpZiAoIWJvdW5kaW5nQm94LmlzRW1wdHkoKSkgeworICAgICAgICAgICAgY29uc3QgQXV0b2Nv
cnJlY3Rpb25BbHRlcm5hdGl2ZURldGFpbHMqIGRldGFpbHMgPSBzdGF0aWNfY2FzdDxjb25zdCBB
dXRvY29ycmVjdGlvbkFsdGVybmF0aXZlRGV0YWlscyo+KG1fYWx0ZXJuYXRpdmVUZXh0SW5mby5k
ZXRhaWxzLmdldCgpKTsKKyAgICAgICAgICAgIGNsaWVudCgpLT5zaG93Q29ycmVjdGlvblBhbmVs
KG1fYWx0ZXJuYXRpdmVUZXh0SW5mby50eXBlLCBib3VuZGluZ0JveCwgbV9hbHRlcm5hdGl2ZVRl
eHRJbmZvLm9yaWdpbmFsVGV4dCwgZGV0YWlscy0+cmVwbGFjZW1lbnRTdHJpbmcoKSwgVmVjdG9y
PFN0cmluZz4oKSk7CisgICAgICAgIH0KICAgICB9CiAgICAgICAgIGJyZWFrOwotICAgIGNhc2Ug
Q29ycmVjdGlvblBhbmVsSW5mbzo6UGFuZWxUeXBlU3BlbGxpbmdTdWdnZXN0aW9uczogewotICAg
ICAgICBpZiAoIW1fY29ycmVjdGlvblBhbmVsSW5mby5yYW5nZVRvQmVSZXBsYWNlZCB8fCBwbGFp
blRleHQobV9jb3JyZWN0aW9uUGFuZWxJbmZvLnJhbmdlVG9CZVJlcGxhY2VkLmdldCgpKSAhPSBt
X2NvcnJlY3Rpb25QYW5lbEluZm8ucmVwbGFjZWRTdHJpbmcpCisgICAgY2FzZSBBbHRlcm5hdGl2
ZVRleHRUeXBlU3BlbGxpbmdTdWdnZXN0aW9uczogeworICAgICAgICBpZiAoIW1fYWx0ZXJuYXRp
dmVUZXh0SW5mby5yYW5nZVdpdGhBbHRlcm5hdGl2ZSB8fCBwbGFpblRleHQobV9hbHRlcm5hdGl2
ZVRleHRJbmZvLnJhbmdlV2l0aEFsdGVybmF0aXZlLmdldCgpKSAhPSBtX2FsdGVybmF0aXZlVGV4
dEluZm8ub3JpZ2luYWxUZXh0KQogICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIFN0cmluZyBw
YXJhZ3JhcGhUZXh0ID0gcGxhaW5UZXh0KFRleHRDaGVja2luZ1BhcmFncmFwaChtX2NvcnJlY3Rp
b25QYW5lbEluZm8ucmFuZ2VUb0JlUmVwbGFjZWQpLnBhcmFncmFwaFJhbmdlKCkuZ2V0KCkpOwor
ICAgICAgICBTdHJpbmcgcGFyYWdyYXBoVGV4dCA9IHBsYWluVGV4dChUZXh0Q2hlY2tpbmdQYXJh
Z3JhcGgobV9hbHRlcm5hdGl2ZVRleHRJbmZvLnJhbmdlV2l0aEFsdGVybmF0aXZlKS5wYXJhZ3Jh
cGhSYW5nZSgpLmdldCgpKTsKICAgICAgICAgVmVjdG9yPFN0cmluZz4gc3VnZ2VzdGlvbnM7Ci0g
ICAgICAgIHRleHRDaGVja2VyKCktPmdldEd1ZXNzZXNGb3JXb3JkKG1fY29ycmVjdGlvblBhbmVs
SW5mby5yZXBsYWNlZFN0cmluZywgcGFyYWdyYXBoVGV4dCwgc3VnZ2VzdGlvbnMpOworICAgICAg
ICB0ZXh0Q2hlY2tlcigpLT5nZXRHdWVzc2VzRm9yV29yZChtX2FsdGVybmF0aXZlVGV4dEluZm8u
b3JpZ2luYWxUZXh0LCBwYXJhZ3JhcGhUZXh0LCBzdWdnZXN0aW9ucyk7CiAgICAgICAgIGlmIChz
dWdnZXN0aW9ucy5pc0VtcHR5KCkpIHsKLSAgICAgICAgICAgIG1fY29ycmVjdGlvblBhbmVsSW5m
by5yYW5nZVRvQmVSZXBsYWNlZC5jbGVhcigpOworICAgICAgICAgICAgbV9hbHRlcm5hdGl2ZVRl
eHRJbmZvLnJhbmdlV2l0aEFsdGVybmF0aXZlLmNsZWFyKCk7CiAgICAgICAgICAgICBicmVhazsK
ICAgICAgICAgfQogICAgICAgICBTdHJpbmcgdG9wU3VnZ2VzdGlvbiA9IHN1Z2dlc3Rpb25zLmZp
cnN0KCk7CiAgICAgICAgIHN1Z2dlc3Rpb25zLnJlbW92ZSgwKTsKLSAgICAgICAgbV9jb3JyZWN0
aW9uUGFuZWxJbmZvLmlzQWN0aXZlID0gdHJ1ZTsKLSAgICAgICAgRmxvYXRSZWN0IGJvdW5kaW5n
Qm94ID0gcm9vdFZpZXdSZWN0Rm9yUmFuZ2UobV9jb3JyZWN0aW9uUGFuZWxJbmZvLnJhbmdlVG9C
ZVJlcGxhY2VkLmdldCgpKTsKKyAgICAgICAgbV9hbHRlcm5hdGl2ZVRleHRJbmZvLmlzQWN0aXZl
ID0gdHJ1ZTsKKyAgICAgICAgRmxvYXRSZWN0IGJvdW5kaW5nQm94ID0gcm9vdFZpZXdSZWN0Rm9y
UmFuZ2UobV9hbHRlcm5hdGl2ZVRleHRJbmZvLnJhbmdlV2l0aEFsdGVybmF0aXZlLmdldCgpKTsK
ICAgICAgICAgaWYgKCFib3VuZGluZ0JveC5pc0VtcHR5KCkpCi0gICAgICAgICAgICBjbGllbnQo
KS0+c2hvd0NvcnJlY3Rpb25QYW5lbChtX2NvcnJlY3Rpb25QYW5lbEluZm8ucGFuZWxUeXBlLCBi
b3VuZGluZ0JveCwgbV9jb3JyZWN0aW9uUGFuZWxJbmZvLnJlcGxhY2VkU3RyaW5nLCB0b3BTdWdn
ZXN0aW9uLCBzdWdnZXN0aW9ucyk7CisgICAgICAgICAgICBjbGllbnQoKS0+c2hvd0NvcnJlY3Rp
b25QYW5lbChtX2FsdGVybmF0aXZlVGV4dEluZm8udHlwZSwgYm91bmRpbmdCb3gsIG1fYWx0ZXJu
YXRpdmVUZXh0SW5mby5vcmlnaW5hbFRleHQsIHRvcFN1Z2dlc3Rpb24sIHN1Z2dlc3Rpb25zKTsK
ICAgICB9CiAgICAgICAgIGJyZWFrOwogICAgIH0KIH0KIAotdm9pZCBTcGVsbGluZ0NvcnJlY3Rp
b25Db250cm9sbGVyOjpoYW5kbGVDb3JyZWN0aW9uUGFuZWxSZXN1bHQoY29uc3QgU3RyaW5nJiBj
b3JyZWN0aW9uKQordm9pZCBBbHRlcm5hdGl2ZVRleHRDb250cm9sbGVyOjpoYW5kbGVBbHRlcm5h
dGl2ZVRleHRVSVJlc3VsdChjb25zdCBTdHJpbmcmIHJlc3VsdCkKIHsKLSAgICBSYW5nZSogcmVw
bGFjZWRSYW5nZSA9IG1fY29ycmVjdGlvblBhbmVsSW5mby5yYW5nZVRvQmVSZXBsYWNlZC5nZXQo
KTsKKyAgICBSYW5nZSogcmVwbGFjZWRSYW5nZSA9IG1fYWx0ZXJuYXRpdmVUZXh0SW5mby5yYW5n
ZVdpdGhBbHRlcm5hdGl2ZS5nZXQoKTsKICAgICBpZiAoIXJlcGxhY2VkUmFuZ2UgfHwgbV9mcmFt
ZS0+ZG9jdW1lbnQoKSAhPSByZXBsYWNlZFJhbmdlLT5vd25lckRvY3VtZW50KCkpCiAgICAgICAg
IHJldHVybjsKIAotICAgIFN0cmluZyBjdXJyZW50V29yZCA9IHBsYWluVGV4dChtX2NvcnJlY3Rp
b25QYW5lbEluZm8ucmFuZ2VUb0JlUmVwbGFjZWQuZ2V0KCkpOworICAgIFN0cmluZyBjdXJyZW50
V29yZCA9IHBsYWluVGV4dChtX2FsdGVybmF0aXZlVGV4dEluZm8ucmFuZ2VXaXRoQWx0ZXJuYXRp
dmUuZ2V0KCkpOwogICAgIC8vIENoZWNrIHRvIHNlZSBpZiB0aGUgd29yZCB3ZSBhcmUgYWJvdXQg
dG8gY29ycmVjdCBoYXMgYmVlbiBjaGFuZ2VkIGJldHdlZW4gdGltZXIgZmlyaW5nIGFuZCBjYWxs
YmFjayBiZWluZyB0cmlnZ2VyZWQuCi0gICAgaWYgKGN1cnJlbnRXb3JkICE9IG1fY29ycmVjdGlv
blBhbmVsSW5mby5yZXBsYWNlZFN0cmluZykKKyAgICBpZiAoY3VycmVudFdvcmQgIT0gbV9hbHRl
cm5hdGl2ZVRleHRJbmZvLm9yaWdpbmFsVGV4dCkKICAgICAgICAgcmV0dXJuOwogCi0gICAgbV9j
b3JyZWN0aW9uUGFuZWxJbmZvLmlzQWN0aXZlID0gZmFsc2U7CisgICAgbV9hbHRlcm5hdGl2ZVRl
eHRJbmZvLmlzQWN0aXZlID0gZmFsc2U7CiAKLSAgICBzd2l0Y2ggKG1fY29ycmVjdGlvblBhbmVs
SW5mby5wYW5lbFR5cGUpIHsKLSAgICBjYXNlIENvcnJlY3Rpb25QYW5lbEluZm86OlBhbmVsVHlw
ZUNvcnJlY3Rpb246Ci0gICAgICAgIGlmIChjb3JyZWN0aW9uLmxlbmd0aCgpKSB7Ci0gICAgICAg
ICAgICBtX2NvcnJlY3Rpb25QYW5lbEluZm8ucmVwbGFjZW1lbnRTdHJpbmcgPSBjb3JyZWN0aW9u
OwotICAgICAgICAgICAgYXBwbHlDb3JyZWN0aW9uUGFuZWxJbmZvKG1hcmtlclR5cGVzRm9yQXV0
b2NvcnJlY3Rpb24oKSk7Ci0gICAgICAgIH0gZWxzZSBpZiAoIW1fY29ycmVjdGlvblBhbmVsSXNE
aXNtaXNzZWRCeUVkaXRvcikKLSAgICAgICAgICAgIHJlcGxhY2VkUmFuZ2UtPnN0YXJ0Q29udGFp
bmVyKCktPmRvY3VtZW50KCktPm1hcmtlcnMoKS0+YWRkTWFya2VyKHJlcGxhY2VkUmFuZ2UsIERv
Y3VtZW50TWFya2VyOjpSZWplY3RlZENvcnJlY3Rpb24sIG1fY29ycmVjdGlvblBhbmVsSW5mby5y
ZXBsYWNlZFN0cmluZyk7CisgICAgc3dpdGNoIChtX2FsdGVybmF0aXZlVGV4dEluZm8udHlwZSkg
eworICAgIGNhc2UgQWx0ZXJuYXRpdmVUZXh0VHlwZUNvcnJlY3Rpb246CisgICAgICAgIGlmIChy
ZXN1bHQubGVuZ3RoKCkpCisgICAgICAgICAgICBhcHBseUFsdGVybmF0aXZlVGV4dChyZXN1bHQs
IG1hcmtlclR5cGVzRm9yQXV0b2NvcnJlY3Rpb24oKSk7CisgICAgICAgIGVsc2UgaWYgKCFtX2lz
RGlzbWlzc2VkQnlFZGl0aW5nKQorICAgICAgICAgICAgcmVwbGFjZWRSYW5nZS0+c3RhcnRDb250
YWluZXIoKS0+ZG9jdW1lbnQoKS0+bWFya2VycygpLT5hZGRNYXJrZXIocmVwbGFjZWRSYW5nZSwg
RG9jdW1lbnRNYXJrZXI6OlJlamVjdGVkQ29ycmVjdGlvbiwgbV9hbHRlcm5hdGl2ZVRleHRJbmZv
Lm9yaWdpbmFsVGV4dCk7CiAgICAgICAgIGJyZWFrOwotICAgIGNhc2UgQ29ycmVjdGlvblBhbmVs
SW5mbzo6UGFuZWxUeXBlUmV2ZXJzaW9uOgotICAgIGNhc2UgQ29ycmVjdGlvblBhbmVsSW5mbzo6
UGFuZWxUeXBlU3BlbGxpbmdTdWdnZXN0aW9uczoKLSAgICAgICAgaWYgKGNvcnJlY3Rpb24ubGVu
Z3RoKCkpIHsKLSAgICAgICAgICAgIG1fY29ycmVjdGlvblBhbmVsSW5mby5yZXBsYWNlbWVudFN0
cmluZyA9IGNvcnJlY3Rpb247Ci0gICAgICAgICAgICBhcHBseUNvcnJlY3Rpb25QYW5lbEluZm8o
bWFya2VyVHlwZXNGb3JSZXBsYWNlbWVudCgpKTsKLSAgICAgICAgfQorICAgIGNhc2UgQWx0ZXJu
YXRpdmVUZXh0VHlwZVJldmVyc2lvbjoKKyAgICBjYXNlIEFsdGVybmF0aXZlVGV4dFR5cGVTcGVs
bGluZ1N1Z2dlc3Rpb25zOgorICAgICAgICBpZiAocmVzdWx0Lmxlbmd0aCgpKQorICAgICAgICAg
ICAgYXBwbHlBbHRlcm5hdGl2ZVRleHQocmVzdWx0LCBtYXJrZXJUeXBlc0ZvclJlcGxhY2VtZW50
KCkpOwogICAgICAgICBicmVhazsKICAgICB9CiAKLSAgICBtX2NvcnJlY3Rpb25QYW5lbEluZm8u
cmFuZ2VUb0JlUmVwbGFjZWQuY2xlYXIoKTsKKyAgICBtX2FsdGVybmF0aXZlVGV4dEluZm8ucmFu
Z2VXaXRoQWx0ZXJuYXRpdmUuY2xlYXIoKTsKIH0KIAotYm9vbCBTcGVsbGluZ0NvcnJlY3Rpb25D
b250cm9sbGVyOjppc0F1dG9tYXRpY1NwZWxsaW5nQ29ycmVjdGlvbkVuYWJsZWQoKQorYm9vbCBB
bHRlcm5hdGl2ZVRleHRDb250cm9sbGVyOjppc0F1dG9tYXRpY1NwZWxsaW5nQ29ycmVjdGlvbkVu
YWJsZWQoKQogewogICAgIHJldHVybiBjbGllbnQoKSAmJiBjbGllbnQoKS0+aXNBdXRvbWF0aWNT
cGVsbGluZ0NvcnJlY3Rpb25FbmFibGVkKCk7CiB9CiAKLUZsb2F0UmVjdCBTcGVsbGluZ0NvcnJl
Y3Rpb25Db250cm9sbGVyOjpyb290Vmlld1JlY3RGb3JSYW5nZShjb25zdCBSYW5nZSogcmFuZ2Up
IGNvbnN0CitGbG9hdFJlY3QgQWx0ZXJuYXRpdmVUZXh0Q29udHJvbGxlcjo6cm9vdFZpZXdSZWN0
Rm9yUmFuZ2UoY29uc3QgUmFuZ2UqIHJhbmdlKSBjb25zdAogewogICAgIEZyYW1lVmlldyogdmll
dyA9IG1fZnJhbWUtPnZpZXcoKTsKICAgICBpZiAoIXZpZXcpCkBAIC0zNzYsNyArMzkxLDcgQEAg
RmxvYXRSZWN0IFNwZWxsaW5nQ29ycmVjdGlvbkNvbnRyb2xsZXI6OgogICAgIHJldHVybiB2aWV3
LT5jb250ZW50c1RvUm9vdFZpZXcoSW50UmVjdChib3VuZGluZ1JlY3QpKTsKIH0gICAgICAgIAog
Ci12b2lkIFNwZWxsaW5nQ29ycmVjdGlvbkNvbnRyb2xsZXI6OnJlc3BvbmRUb0NoYW5nZWRTZWxl
Y3Rpb24oY29uc3QgVmlzaWJsZVNlbGVjdGlvbiYgb2xkU2VsZWN0aW9uKQordm9pZCBBbHRlcm5h
dGl2ZVRleHRDb250cm9sbGVyOjpyZXNwb25kVG9DaGFuZ2VkU2VsZWN0aW9uKGNvbnN0IFZpc2li
bGVTZWxlY3Rpb24mIG9sZFNlbGVjdGlvbikKIHsKICAgICBWaXNpYmxlU2VsZWN0aW9uIGN1cnJl
bnRTZWxlY3Rpb24obV9mcmFtZS0+c2VsZWN0aW9uKCktPnNlbGVjdGlvbigpKTsKICAgICAvLyBX
aGVuIHVzZXIgbW92ZXMgY2FyZXQgdG8gdGhlIGVuZCBvZiBhdXRvY29ycmVjdGVkIHdvcmQgYW5k
IHBhdXNlcywgd2Ugc2hvdyB0aGUgcGFuZWwKQEAgLTQxNCwyMCArNDI5LDIwIEBAIHZvaWQgU3Bl
bGxpbmdDb3JyZWN0aW9uQ29udHJvbGxlcjo6cmVzcG8KICAgICAgICAgaWYgKCFjdXJyZW50V29y
ZC5sZW5ndGgoKSkKICAgICAgICAgICAgIGNvbnRpbnVlOwogCi0gICAgICAgIG1fY29ycmVjdGlv
blBhbmVsSW5mby5yYW5nZVRvQmVSZXBsYWNlZCA9IHdvcmRSYW5nZTsKLSAgICAgICAgbV9jb3Jy
ZWN0aW9uUGFuZWxJbmZvLnJlcGxhY2VkU3RyaW5nID0gY3VycmVudFdvcmQ7CisgICAgICAgIG1f
YWx0ZXJuYXRpdmVUZXh0SW5mby5yYW5nZVdpdGhBbHRlcm5hdGl2ZSA9IHdvcmRSYW5nZTsKKyAg
ICAgICAgbV9hbHRlcm5hdGl2ZVRleHRJbmZvLm9yaWdpbmFsVGV4dCA9IGN1cnJlbnRXb3JkOwog
ICAgICAgICBpZiAobWFya2VyLT50eXBlKCkgPT0gRG9jdW1lbnRNYXJrZXI6OlNwZWxsaW5nKQot
ICAgICAgICAgICAgc3RhcnRDb3JyZWN0aW9uUGFuZWxUaW1lcihDb3JyZWN0aW9uUGFuZWxJbmZv
OjpQYW5lbFR5cGVTcGVsbGluZ1N1Z2dlc3Rpb25zKTsKKyAgICAgICAgICAgIHN0YXJ0QWx0ZXJu
YXRpdmVUZXh0VUlUaW1lcihBbHRlcm5hdGl2ZVRleHRUeXBlU3BlbGxpbmdTdWdnZXN0aW9ucyk7
CiAgICAgICAgIGVsc2UgewotICAgICAgICAgICAgbV9jb3JyZWN0aW9uUGFuZWxJbmZvLnJlcGxh
Y2VtZW50U3RyaW5nID0gbWFya2VyLT5kZXNjcmlwdGlvbigpOwotICAgICAgICAgICAgc3RhcnRD
b3JyZWN0aW9uUGFuZWxUaW1lcihDb3JyZWN0aW9uUGFuZWxJbmZvOjpQYW5lbFR5cGVSZXZlcnNp
b24pOworICAgICAgICAgICAgbV9hbHRlcm5hdGl2ZVRleHRJbmZvLmRldGFpbHMgPSBBdXRvY29y
cmVjdGlvbkFsdGVybmF0aXZlRGV0YWlsczo6Y3JlYXRlKG1hcmtlci0+ZGVzY3JpcHRpb24oKSk7
CisgICAgICAgICAgICBzdGFydEFsdGVybmF0aXZlVGV4dFVJVGltZXIoQWx0ZXJuYXRpdmVUZXh0
VHlwZVJldmVyc2lvbik7CiAgICAgICAgIH0KIAogICAgICAgICBicmVhazsKICAgICB9CiB9CiAK
LXZvaWQgU3BlbGxpbmdDb3JyZWN0aW9uQ29udHJvbGxlcjo6cmVzcG9uZFRvQXBwbGllZEVkaXRp
bmcoQ29tcG9zaXRlRWRpdENvbW1hbmQqIGNvbW1hbmQpCit2b2lkIEFsdGVybmF0aXZlVGV4dENv
bnRyb2xsZXI6OnJlc3BvbmRUb0FwcGxpZWRFZGl0aW5nKENvbXBvc2l0ZUVkaXRDb21tYW5kKiBj
b21tYW5kKQogewogICAgIGlmIChjb21tYW5kLT5pc1RvcExldmVsQ29tbWFuZCgpICYmICFjb21t
YW5kLT5zaG91bGRSZXRhaW5BdXRvY29ycmVjdGlvbkluZGljYXRvcigpKQogICAgICAgICBtX2Zy
YW1lLT5kb2N1bWVudCgpLT5tYXJrZXJzKCktPnJlbW92ZU1hcmtlcnMoRG9jdW1lbnRNYXJrZXI6
OkNvcnJlY3Rpb25JbmRpY2F0b3IpOwpAQCAtNDM2LDcgKzQ1MSw3IEBAIHZvaWQgU3BlbGxpbmdD
b3JyZWN0aW9uQ29udHJvbGxlcjo6cmVzcG8KICAgICBtX29yaWdpbmFsU3RyaW5nRm9yTGFzdERl
bGV0ZWRBdXRvY29ycmVjdGlvbiA9IFN0cmluZygpOwogfQogCi12b2lkIFNwZWxsaW5nQ29ycmVj
dGlvbkNvbnRyb2xsZXI6OnJlc3BvbmRUb1VuYXBwbGllZEVkaXRpbmcoRWRpdENvbW1hbmRDb21w
b3NpdGlvbiogY29tbWFuZCkKK3ZvaWQgQWx0ZXJuYXRpdmVUZXh0Q29udHJvbGxlcjo6cmVzcG9u
ZFRvVW5hcHBsaWVkRWRpdGluZyhFZGl0Q29tbWFuZENvbXBvc2l0aW9uKiBjb21tYW5kKQogewog
ICAgIGlmICghY29tbWFuZC0+d2FzQ3JlYXRlTGlua0NvbW1hbmQoKSkKICAgICAgICAgcmV0dXJu
OwpAQCAtNDQ4LDM1ICs0NjMsMzUgQEAgdm9pZCBTcGVsbGluZ0NvcnJlY3Rpb25Db250cm9sbGVy
OjpyZXNwbwogICAgIG1hcmtlcnMtPmFkZE1hcmtlcihyYW5nZS5nZXQoKSwgRG9jdW1lbnRNYXJr
ZXI6OlNwZWxsQ2hlY2tpbmdFeGVtcHRpb24pOwogfQogCi1FZGl0b3JDbGllbnQqIFNwZWxsaW5n
Q29ycmVjdGlvbkNvbnRyb2xsZXI6OmNsaWVudCgpCitFZGl0b3JDbGllbnQqIEFsdGVybmF0aXZl
VGV4dENvbnRyb2xsZXI6OmNsaWVudCgpCiB7CiAgICAgcmV0dXJuIG1fZnJhbWUtPnBhZ2UoKSA/
IG1fZnJhbWUtPnBhZ2UoKS0+ZWRpdG9yQ2xpZW50KCkgOiAwOwogfQogCi1UZXh0Q2hlY2tlckNs
aWVudCogU3BlbGxpbmdDb3JyZWN0aW9uQ29udHJvbGxlcjo6dGV4dENoZWNrZXIoKQorVGV4dENo
ZWNrZXJDbGllbnQqIEFsdGVybmF0aXZlVGV4dENvbnRyb2xsZXI6OnRleHRDaGVja2VyKCkKIHsK
ICAgICBpZiAoRWRpdG9yQ2xpZW50KiBvd25lciA9IGNsaWVudCgpKQogICAgICAgICByZXR1cm4g
b3duZXItPnRleHRDaGVja2VyKCk7CiAgICAgcmV0dXJuIDA7CiB9CiAKLXZvaWQgU3BlbGxpbmdD
b3JyZWN0aW9uQ29udHJvbGxlcjo6cmVjb3JkQXV0b2NvcnJlY3Rpb25SZXNwb25zZVJldmVyc2Vk
KGNvbnN0IFN0cmluZyYgcmVwbGFjZWRTdHJpbmcsIGNvbnN0IFN0cmluZyYgcmVwbGFjZW1lbnRT
dHJpbmcpCit2b2lkIEFsdGVybmF0aXZlVGV4dENvbnRyb2xsZXI6OnJlY29yZEF1dG9jb3JyZWN0
aW9uUmVzcG9uc2VSZXZlcnNlZChjb25zdCBTdHJpbmcmIHJlcGxhY2VkU3RyaW5nLCBjb25zdCBT
dHJpbmcmIHJlcGxhY2VtZW50U3RyaW5nKQogewogICAgIGNsaWVudCgpLT5yZWNvcmRBdXRvY29y
cmVjdGlvblJlc3BvbnNlKEVkaXRvckNsaWVudDo6QXV0b2NvcnJlY3Rpb25SZXZlcnRlZCwgcmVw
bGFjZWRTdHJpbmcsIHJlcGxhY2VtZW50U3RyaW5nKTsKIH0KIAotdm9pZCBTcGVsbGluZ0NvcnJl
Y3Rpb25Db250cm9sbGVyOjpyZWNvcmRBdXRvY29ycmVjdGlvblJlc3BvbnNlUmV2ZXJzZWQoY29u
c3QgU3RyaW5nJiByZXBsYWNlZFN0cmluZywgUGFzc1JlZlB0cjxSYW5nZT4gcmVwbGFjZW1lbnRS
YW5nZSkKK3ZvaWQgQWx0ZXJuYXRpdmVUZXh0Q29udHJvbGxlcjo6cmVjb3JkQXV0b2NvcnJlY3Rp
b25SZXNwb25zZVJldmVyc2VkKGNvbnN0IFN0cmluZyYgcmVwbGFjZWRTdHJpbmcsIFBhc3NSZWZQ
dHI8UmFuZ2U+IHJlcGxhY2VtZW50UmFuZ2UpCiB7CiAgICAgcmVjb3JkQXV0b2NvcnJlY3Rpb25S
ZXNwb25zZVJldmVyc2VkKHJlcGxhY2VkU3RyaW5nLCBwbGFpblRleHQocmVwbGFjZW1lbnRSYW5n
ZS5nZXQoKSkpOwogfQogCi12b2lkIFNwZWxsaW5nQ29ycmVjdGlvbkNvbnRyb2xsZXI6Om1hcmtS
ZXZlcnNlZChQYXNzUmVmUHRyPFJhbmdlPiBjaGFuZ2VkUmFuZ2UpCit2b2lkIEFsdGVybmF0aXZl
VGV4dENvbnRyb2xsZXI6Om1hcmtSZXZlcnNlZChQYXNzUmVmUHRyPFJhbmdlPiBjaGFuZ2VkUmFu
Z2UpCiB7CiAgICAgY2hhbmdlZFJhbmdlLT5zdGFydENvbnRhaW5lcigpLT5kb2N1bWVudCgpLT5t
YXJrZXJzKCktPnJlbW92ZU1hcmtlcnMoY2hhbmdlZFJhbmdlLmdldCgpLCBEb2N1bWVudE1hcmtl
cjo6QXV0b2NvcnJlY3RlZCwgRG9jdW1lbnRNYXJrZXJDb250cm9sbGVyOjpSZW1vdmVQYXJ0aWFs
bHlPdmVybGFwcGluZ01hcmtlcik7CiAgICAgY2hhbmdlZFJhbmdlLT5zdGFydENvbnRhaW5lcigp
LT5kb2N1bWVudCgpLT5tYXJrZXJzKCktPmFkZE1hcmtlcihjaGFuZ2VkUmFuZ2UuZ2V0KCksIERv
Y3VtZW50TWFya2VyOjpTcGVsbENoZWNraW5nRXhlbXB0aW9uKTsKIH0KIAotdm9pZCBTcGVsbGlu
Z0NvcnJlY3Rpb25Db250cm9sbGVyOjptYXJrQ29ycmVjdGlvbihQYXNzUmVmUHRyPFJhbmdlPiBy
ZXBsYWNlZFJhbmdlLCBjb25zdCBTdHJpbmcmIHJlcGxhY2VkU3RyaW5nKQordm9pZCBBbHRlcm5h
dGl2ZVRleHRDb250cm9sbGVyOjptYXJrQ29ycmVjdGlvbihQYXNzUmVmUHRyPFJhbmdlPiByZXBs
YWNlZFJhbmdlLCBjb25zdCBTdHJpbmcmIHJlcGxhY2VkU3RyaW5nKQogewogICAgIFZlY3RvcjxE
b2N1bWVudE1hcmtlcjo6TWFya2VyVHlwZT4gbWFya2VyVHlwZXNUb0FkZCA9IG1hcmtlclR5cGVz
Rm9yQXV0b2NvcnJlY3Rpb24oKTsKICAgICBEb2N1bWVudE1hcmtlckNvbnRyb2xsZXIqIG1hcmtl
cnMgPSByZXBsYWNlZFJhbmdlLT5zdGFydENvbnRhaW5lcigpLT5kb2N1bWVudCgpLT5tYXJrZXJz
KCk7CkBAIC00ODksNyArNTA0LDcgQEAgdm9pZCBTcGVsbGluZ0NvcnJlY3Rpb25Db250cm9sbGVy
OjptYXJrQwogICAgIH0KIH0KIAotdm9pZCBTcGVsbGluZ0NvcnJlY3Rpb25Db250cm9sbGVyOjpy
ZWNvcmRTcGVsbGNoZWNrZXJSZXNwb25zZUZvck1vZGlmaWVkQ29ycmVjdGlvbihSYW5nZSogcmFu
Z2VPZkNvcnJlY3Rpb24sIGNvbnN0IFN0cmluZyYgY29ycmVjdGVkLCBjb25zdCBTdHJpbmcmIGNv
cnJlY3Rpb24pCit2b2lkIEFsdGVybmF0aXZlVGV4dENvbnRyb2xsZXI6OnJlY29yZFNwZWxsY2hl
Y2tlclJlc3BvbnNlRm9yTW9kaWZpZWRDb3JyZWN0aW9uKFJhbmdlKiByYW5nZU9mQ29ycmVjdGlv
biwgY29uc3QgU3RyaW5nJiBjb3JyZWN0ZWQsIGNvbnN0IFN0cmluZyYgY29ycmVjdGlvbikKIHsK
ICAgICBpZiAoIXJhbmdlT2ZDb3JyZWN0aW9uKQogICAgICAgICByZXR1cm47CkBAIC01MDcsMTMg
KzUyMiwxMyBAQCB2b2lkIFNwZWxsaW5nQ29ycmVjdGlvbkNvbnRyb2xsZXI6OnJlY29yCiAgICAg
bWFya2Vycy0+cmVtb3ZlTWFya2VycyhyYW5nZU9mQ29ycmVjdGlvbiwgRG9jdW1lbnRNYXJrZXI6
OkF1dG9jb3JyZWN0ZWQsIERvY3VtZW50TWFya2VyQ29udHJvbGxlcjo6UmVtb3ZlUGFydGlhbGx5
T3ZlcmxhcHBpbmdNYXJrZXIpOwogfQogCi12b2lkIFNwZWxsaW5nQ29ycmVjdGlvbkNvbnRyb2xs
ZXI6OmRlbGV0ZWRBdXRvY29ycmVjdGlvbkF0UG9zaXRpb24oY29uc3QgUG9zaXRpb24mIHBvc2l0
aW9uLCBjb25zdCBTdHJpbmcmIG9yaWdpbmFsU3RyaW5nKQordm9pZCBBbHRlcm5hdGl2ZVRleHRD
b250cm9sbGVyOjpkZWxldGVkQXV0b2NvcnJlY3Rpb25BdFBvc2l0aW9uKGNvbnN0IFBvc2l0aW9u
JiBwb3NpdGlvbiwgY29uc3QgU3RyaW5nJiBvcmlnaW5hbFN0cmluZykKIHsKICAgICBtX29yaWdp
bmFsU3RyaW5nRm9yTGFzdERlbGV0ZWRBdXRvY29ycmVjdGlvbiA9IG9yaWdpbmFsU3RyaW5nOwog
ICAgIG1fcG9zaXRpb25Gb3JMYXN0RGVsZXRlZEF1dG9jb3JyZWN0aW9uID0gcG9zaXRpb247CiB9
CiAKLXZvaWQgU3BlbGxpbmdDb3JyZWN0aW9uQ29udHJvbGxlcjo6bWFya1ByZWNlZGluZ1doaXRl
c3BhY2VGb3JEZWxldGVkQXV0b2NvcnJlY3Rpb25BZnRlckNvbW1hbmQoRWRpdENvbW1hbmQqIGNv
bW1hbmQpCit2b2lkIEFsdGVybmF0aXZlVGV4dENvbnRyb2xsZXI6Om1hcmtQcmVjZWRpbmdXaGl0
ZXNwYWNlRm9yRGVsZXRlZEF1dG9jb3JyZWN0aW9uQWZ0ZXJDb21tYW5kKEVkaXRDb21tYW5kKiBj
b21tYW5kKQogewogICAgIFBvc2l0aW9uIGVuZE9mU2VsZWN0aW9uID0gY29tbWFuZC0+ZW5kaW5n
U2VsZWN0aW9uKCkuZW5kKCk7CiAgICAgaWYgKGVuZE9mU2VsZWN0aW9uICE9IG1fcG9zaXRpb25G
b3JMYXN0RGVsZXRlZEF1dG9jb3JyZWN0aW9uKQpAQCAtNTM0LDE5ICs1NDksMTkgQEAgdm9pZCBT
cGVsbGluZ0NvcnJlY3Rpb25Db250cm9sbGVyOjptYXJrUAogICAgIG1fZnJhbWUtPmRvY3VtZW50
KCktPm1hcmtlcnMoKS0+YWRkTWFya2VyKHByZWNlZGluZ0NoYXJhY3RlclJhbmdlLmdldCgpLCBE
b2N1bWVudE1hcmtlcjo6RGVsZXRlZEF1dG9jb3JyZWN0aW9uLCBtX29yaWdpbmFsU3RyaW5nRm9y
TGFzdERlbGV0ZWRBdXRvY29ycmVjdGlvbik7CiB9CiAKLWJvb2wgU3BlbGxpbmdDb3JyZWN0aW9u
Q29udHJvbGxlcjo6cHJvY2Vzc01hcmtlcnNPblRleHRUb0JlUmVwbGFjZWRCeVJlc3VsdChjb25z
dCBUZXh0Q2hlY2tpbmdSZXN1bHQqIHJlc3VsdCwgUmFuZ2UqIHJhbmdlVG9CZVJlcGxhY2VkLCBj
b25zdCBTdHJpbmcmIHN0cmluZ1RvQmVSZXBsYWNlZCkKK2Jvb2wgQWx0ZXJuYXRpdmVUZXh0Q29u
dHJvbGxlcjo6cHJvY2Vzc01hcmtlcnNPblRleHRUb0JlUmVwbGFjZWRCeVJlc3VsdChjb25zdCBU
ZXh0Q2hlY2tpbmdSZXN1bHQqIHJlc3VsdCwgUmFuZ2UqIHJhbmdlV2l0aEFsdGVybmF0aXZlLCBj
b25zdCBTdHJpbmcmIHN0cmluZ1RvQmVSZXBsYWNlZCkKIHsKICAgICBEb2N1bWVudE1hcmtlckNv
bnRyb2xsZXIqIG1hcmtlckNvbnRyb2xsZXIgPSBtX2ZyYW1lLT5kb2N1bWVudCgpLT5tYXJrZXJz
KCk7Ci0gICAgaWYgKG1hcmtlckNvbnRyb2xsZXItPmhhc01hcmtlcnMocmFuZ2VUb0JlUmVwbGFj
ZWQsIERvY3VtZW50TWFya2VyOjpSZXBsYWNlbWVudCkpIHsKKyAgICBpZiAobWFya2VyQ29udHJv
bGxlci0+aGFzTWFya2VycyhyYW5nZVdpdGhBbHRlcm5hdGl2ZSwgRG9jdW1lbnRNYXJrZXI6OlJl
cGxhY2VtZW50KSkgewogICAgICAgICBpZiAocmVzdWx0LT50eXBlID09IFRleHRDaGVja2luZ1R5
cGVDb3JyZWN0aW9uKQotICAgICAgICAgICAgcmVjb3JkU3BlbGxjaGVja2VyUmVzcG9uc2VGb3JN
b2RpZmllZENvcnJlY3Rpb24ocmFuZ2VUb0JlUmVwbGFjZWQsIHN0cmluZ1RvQmVSZXBsYWNlZCwg
cmVzdWx0LT5yZXBsYWNlbWVudCk7CisgICAgICAgICAgICByZWNvcmRTcGVsbGNoZWNrZXJSZXNw
b25zZUZvck1vZGlmaWVkQ29ycmVjdGlvbihyYW5nZVdpdGhBbHRlcm5hdGl2ZSwgc3RyaW5nVG9C
ZVJlcGxhY2VkLCByZXN1bHQtPnJlcGxhY2VtZW50KTsKICAgICAgICAgcmV0dXJuIGZhbHNlOwog
ICAgIH0KIAotICAgIGlmIChtYXJrZXJDb250cm9sbGVyLT5oYXNNYXJrZXJzKHJhbmdlVG9CZVJl
cGxhY2VkLCBEb2N1bWVudE1hcmtlcjo6UmVqZWN0ZWRDb3JyZWN0aW9uKSkKKyAgICBpZiAobWFy
a2VyQ29udHJvbGxlci0+aGFzTWFya2VycyhyYW5nZVdpdGhBbHRlcm5hdGl2ZSwgRG9jdW1lbnRN
YXJrZXI6OlJlamVjdGVkQ29ycmVjdGlvbikpCiAgICAgICAgIHJldHVybiBmYWxzZTsKIAotICAg
IFBvc2l0aW9uIGJlZ2lubmluZ09mUmFuZ2UgPSByYW5nZVRvQmVSZXBsYWNlZC0+c3RhcnRQb3Np
dGlvbigpOworICAgIFBvc2l0aW9uIGJlZ2lubmluZ09mUmFuZ2UgPSByYW5nZVdpdGhBbHRlcm5h
dGl2ZS0+c3RhcnRQb3NpdGlvbigpOwogICAgIFBvc2l0aW9uIHByZWNlZGluZ0NoYXJhY3RlclBv
c2l0aW9uID0gYmVnaW5uaW5nT2ZSYW5nZS5wcmV2aW91cygpOwogICAgIFJlZlB0cjxSYW5nZT4g
cHJlY2VkaW5nQ2hhcmFjdGVyUmFuZ2UgPSBSYW5nZTo6Y3JlYXRlKG1fZnJhbWUtPmRvY3VtZW50
KCksIHByZWNlZGluZ0NoYXJhY3RlclBvc2l0aW9uLCBiZWdpbm5pbmdPZlJhbmdlKTsKIApJbmRl
eDogU291cmNlL1dlYkNvcmUvZWRpdGluZy9BbHRlcm5hdGl2ZVRleHRDb250cm9sbGVyLmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvZWRpdGluZy9BbHRlcm5hdGl2ZVRleHRDb250cm9s
bGVyLmgJKHJldmlzaW9uIDExMjgzMCkJKGZyb20gU291cmNlL1dlYkNvcmUvZWRpdGluZy9TcGVs
bGluZ0NvcnJlY3Rpb25Db250cm9sbGVyLmg6MTEyODMwKQorKysgU291cmNlL1dlYkNvcmUvZWRp
dGluZy9BbHRlcm5hdGl2ZVRleHRDb250cm9sbGVyLmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCAr
MSwxNTcgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTAgQXBwbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBi
aW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0
dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0Ogor
ICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92
ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkg
Zm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhl
CisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0
aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkg
QVBQTEUgQ09NUFVURVIsIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1Q
TElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJ
TVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBB
UlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBB
UFBMRSBDT01QVVRFUiwgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5Z
IERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9S
IENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisg
KiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVT
RSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZF
UiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBD
T05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdF
TkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBP
RiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNV
Q0ggREFNQUdFLgorICovCisKKyNpZm5kZWYgU3BlbGxpbmdDb3JyZWN0aW9uQ29udHJvbGxlcl9o
CisjZGVmaW5lIFNwZWxsaW5nQ29ycmVjdGlvbkNvbnRyb2xsZXJfaAorCisjaW5jbHVkZSAiRG9j
dW1lbnRNYXJrZXIuaCIKKyNpbmNsdWRlICJSYW5nZS5oIgorI2luY2x1ZGUgIlRleHRDaGVja2lu
Zy5oIgorI2luY2x1ZGUgIlRpbWVyLmgiCisjaW5jbHVkZSAiVmlzaWJsZVNlbGVjdGlvbi5oIgor
I2luY2x1ZGUgPHd0Zi9Ob25jb3B5YWJsZS5oPgorI2luY2x1ZGUgPHd0Zi9VbnVzZWRQYXJhbS5o
PgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK2NsYXNzIENvbXBvc2l0ZUVkaXRDb21tYW5kOwor
Y2xhc3MgRWRpdG9yQ2xpZW50OworY2xhc3MgRWRpdENvbW1hbmQ7CitjbGFzcyBFZGl0Q29tbWFu
ZENvbXBvc2l0aW9uOworY2xhc3MgRnJhbWU7CitjbGFzcyBUZXh0Q2hlY2tlckNsaWVudDsKKwor
c3RydWN0IENvcnJlY3Rpb25QYW5lbEluZm8geworICAgIGVudW0gUGFuZWxUeXBlIHsKKyAgICAg
ICAgUGFuZWxUeXBlQ29ycmVjdGlvbiA9IDAsCisgICAgICAgIFBhbmVsVHlwZVJldmVyc2lvbiwK
KyAgICAgICAgUGFuZWxUeXBlU3BlbGxpbmdTdWdnZXN0aW9ucworICAgIH07CisKKyAgICBSZWZQ
dHI8UmFuZ2U+IHJhbmdlVG9CZVJlcGxhY2VkOworICAgIFN0cmluZyByZXBsYWNlZFN0cmluZzsK
KyAgICBTdHJpbmcgcmVwbGFjZW1lbnRTdHJpbmc7CisgICAgUGFuZWxUeXBlIHBhbmVsVHlwZTsK
KyAgICBib29sIGlzQWN0aXZlOworfTsKKworc3RydWN0IFRleHRDaGVja2luZ1Jlc3VsdDsKKwor
ZW51bSBSZWFzb25Gb3JEaXNtaXNzaW5nQ29ycmVjdGlvblBhbmVsIHsKKyAgICBSZWFzb25Gb3JE
aXNtaXNzaW5nQ29ycmVjdGlvblBhbmVsQ2FuY2VsbGVkID0gMCwKKyAgICBSZWFzb25Gb3JEaXNt
aXNzaW5nQ29ycmVjdGlvblBhbmVsSWdub3JlZCwKKyAgICBSZWFzb25Gb3JEaXNtaXNzaW5nQ29y
cmVjdGlvblBhbmVsQWNjZXB0ZWQKK307CisKKyNpZiBVU0UoQVVUT0NPUlJFQ1RJT05fUEFORUwp
CisjZGVmaW5lIFVOTEVTU19FTkFCTEVEKGZ1bmN0aW9uQm9keSkgOworI2Vsc2UKKyNkZWZpbmUg
VU5MRVNTX0VOQUJMRUQoZnVuY3Rpb25Cb2R5KSBmdW5jdGlvbkJvZHkKKyNlbmRpZgorCitjbGFz
cyBTcGVsbGluZ0NvcnJlY3Rpb25Db250cm9sbGVyIHsKKyAgICBXVEZfTUFLRV9OT05DT1BZQUJM
RShTcGVsbGluZ0NvcnJlY3Rpb25Db250cm9sbGVyKTsgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7
CitwdWJsaWM6CisgICAgU3BlbGxpbmdDb3JyZWN0aW9uQ29udHJvbGxlcihGcmFtZSopIFVOTEVT
U19FTkFCTEVEKHt9KQorICAgIH5TcGVsbGluZ0NvcnJlY3Rpb25Db250cm9sbGVyKCkgVU5MRVNT
X0VOQUJMRUQoe30pCisKKyAgICB2b2lkIHN0YXJ0Q29ycmVjdGlvblBhbmVsVGltZXIoQ29ycmVj
dGlvblBhbmVsSW5mbzo6UGFuZWxUeXBlKSBVTkxFU1NfRU5BQkxFRCh7fSkKKyAgICB2b2lkIHN0
b3BDb3JyZWN0aW9uUGFuZWxUaW1lcigpIFVOTEVTU19FTkFCTEVEKHt9KQorCisgICAgdm9pZCBk
aXNtaXNzKFJlYXNvbkZvckRpc21pc3NpbmdDb3JyZWN0aW9uUGFuZWwpIFVOTEVTU19FTkFCTEVE
KHt9KQorICAgIFN0cmluZyBkaXNtaXNzU29vbihSZWFzb25Gb3JEaXNtaXNzaW5nQ29ycmVjdGlv
blBhbmVsKSBVTkxFU1NfRU5BQkxFRCh7IHJldHVybiBTdHJpbmcoKTsgfSkKKyAgICB2b2lkIHNo
b3coUGFzc1JlZlB0cjxSYW5nZT4gcmFuZ2VUb1JlcGxhY2UsIGNvbnN0IFN0cmluZyYgcmVwbGFj
ZW1lbnQpIFVOTEVTU19FTkFCTEVEKHsgVU5VU0VEX1BBUkFNKHJhbmdlVG9SZXBsYWNlKTsgVU5V
U0VEX1BBUkFNKHJlcGxhY2VtZW50KTsgfSkKKworICAgIHZvaWQgYXBwbHlDb3JyZWN0aW9uUGFu
ZWxJbmZvKGNvbnN0IFZlY3RvcjxEb2N1bWVudE1hcmtlcjo6TWFya2VyVHlwZT4mKSBVTkxFU1Nf
RU5BQkxFRCh7fSkKKyAgICAvLyBSZXR1cm4gdHJ1ZSBpZiBjb3JyZWN0aW9uIHdhcyBhcHBsaWVk
LCBmYWxzZSBvdGhlcndpc2UuCisgICAgYm9vbCBhcHBseUF1dG9jb3JyZWN0aW9uQmVmb3JlVHlw
aW5nSWZBcHByb3ByaWF0ZSgpIFVOTEVTU19FTkFCTEVEKHsgcmV0dXJuIGZhbHNlOyB9KQorCisg
ICAgdm9pZCByZXNwb25kVG9VbmFwcGxpZWRTcGVsbENvcnJlY3Rpb24oY29uc3QgVmlzaWJsZVNl
bGVjdGlvbiYsIGNvbnN0IFN0cmluZyYgY29ycmVjdGVkLCBjb25zdCBTdHJpbmcmIGNvcnJlY3Rp
b24pIFVOTEVTU19FTkFCTEVEKHsgVU5VU0VEX1BBUkFNKGNvcnJlY3RlZCk7IFVOVVNFRF9QQVJB
TShjb3JyZWN0aW9uKTsgfSkKKyAgICB2b2lkIHJlc3BvbmRUb0FwcGxpZWRFZGl0aW5nKENvbXBv
c2l0ZUVkaXRDb21tYW5kKikgVU5MRVNTX0VOQUJMRUQoeyB9KQorICAgIHZvaWQgcmVzcG9uZFRv
VW5hcHBsaWVkRWRpdGluZyhFZGl0Q29tbWFuZENvbXBvc2l0aW9uKikgVU5MRVNTX0VOQUJMRUQo
eyB9KQorICAgIHZvaWQgcmVzcG9uZFRvQ2hhbmdlZFNlbGVjdGlvbihjb25zdCBWaXNpYmxlU2Vs
ZWN0aW9uJiBvbGRTZWxlY3Rpb24pIFVOTEVTU19FTkFCTEVEKHsgVU5VU0VEX1BBUkFNKG9sZFNl
bGVjdGlvbik7IH0pCisKKyAgICB2b2lkIHN0b3BQZW5kaW5nQ29ycmVjdGlvbihjb25zdCBWaXNp
YmxlU2VsZWN0aW9uJiBvbGRTZWxlY3Rpb24pIFVOTEVTU19FTkFCTEVEKHsgVU5VU0VEX1BBUkFN
KG9sZFNlbGVjdGlvbik7IH0pCisgICAgdm9pZCBhcHBseVBlbmRpbmdDb3JyZWN0aW9uKGNvbnN0
IFZpc2libGVTZWxlY3Rpb24mIHNlbGVjdGlvbkFmdGVyVHlwaW5nKSBVTkxFU1NfRU5BQkxFRCh7
IFVOVVNFRF9QQVJBTShzZWxlY3Rpb25BZnRlclR5cGluZyk7IH0pCisKKyAgICB2b2lkIGhhbmRs
ZUNvcnJlY3Rpb25QYW5lbFJlc3VsdChjb25zdCBTdHJpbmcmIGNvcnJlY3Rpb24pIFVOTEVTU19F
TkFCTEVEKHsgVU5VU0VEX1BBUkFNKGNvcnJlY3Rpb24pOyB9KQorICAgIHZvaWQgaGFuZGxlQ2Fu
Y2VsT3BlcmF0aW9uKCkgVU5MRVNTX0VOQUJMRUQoe30pCisKKyAgICBib29sIGhhc1BlbmRpbmdD
b3JyZWN0aW9uKCkgY29uc3QgVU5MRVNTX0VOQUJMRUQoeyByZXR1cm4gZmFsc2U7IH0pCisgICAg
Ym9vbCBpc1NwZWxsaW5nTWFya2VyQWxsb3dlZChQYXNzUmVmUHRyPFJhbmdlPiBtaXNzcGVsbGlu
Z1JhbmdlKSBjb25zdCBVTkxFU1NfRU5BQkxFRCh7IFVOVVNFRF9QQVJBTShtaXNzcGVsbGluZ1Jh
bmdlKTsgcmV0dXJuIHRydWU7IH0pCisgICAgYm9vbCBpc0F1dG9tYXRpY1NwZWxsaW5nQ29ycmVj
dGlvbkVuYWJsZWQoKSBVTkxFU1NfRU5BQkxFRCh7IHJldHVybiBmYWxzZTsgfSkKKyAgICBib29s
IHNob3VsZFJlbW92ZU1hcmtlcnNVcG9uRWRpdGluZygpOworCisgICAgdm9pZCBjb3JyZWN0aW9u
UGFuZWxUaW1lckZpcmVkKFRpbWVyPFNwZWxsaW5nQ29ycmVjdGlvbkNvbnRyb2xsZXI+KikgVU5M
RVNTX0VOQUJMRUQoe30pCisgICAgdm9pZCByZWNvcmRBdXRvY29ycmVjdGlvblJlc3BvbnNlUmV2
ZXJzZWQoY29uc3QgU3RyaW5nJiByZXBsYWNlZFN0cmluZywgUGFzc1JlZlB0cjxSYW5nZT4gcmVw
bGFjZW1lbnRSYW5nZSkgVU5MRVNTX0VOQUJMRUQoeyBVTlVTRURfUEFSQU0ocmVwbGFjZWRTdHJp
bmcpOyBVTlVTRURfUEFSQU0ocmVwbGFjZW1lbnRSYW5nZSk7IH0pCisgICAgdm9pZCBtYXJrUmV2
ZXJzZWQoUGFzc1JlZlB0cjxSYW5nZT4gY2hhbmdlZFJhbmdlKSBVTkxFU1NfRU5BQkxFRCh7IFVO
VVNFRF9QQVJBTShjaGFuZ2VkUmFuZ2UpOyB9KQorICAgIHZvaWQgbWFya0NvcnJlY3Rpb24oUGFz
c1JlZlB0cjxSYW5nZT4gcmVwbGFjZWRSYW5nZSwgY29uc3QgU3RyaW5nJiByZXBsYWNlZFN0cmlu
ZykgVU5MRVNTX0VOQUJMRUQoeyBVTlVTRURfUEFSQU0ocmVwbGFjZWRSYW5nZSk7IFVOVVNFRF9Q
QVJBTShyZXBsYWNlZFN0cmluZyk7IH0pCisgICAgdm9pZCByZWNvcmRTcGVsbGNoZWNrZXJSZXNw
b25zZUZvck1vZGlmaWVkQ29ycmVjdGlvbihSYW5nZSogcmFuZ2VPZkNvcnJlY3Rpb24sIGNvbnN0
IFN0cmluZyYgY29ycmVjdGVkLCBjb25zdCBTdHJpbmcmIGNvcnJlY3Rpb24pIFVOTEVTU19FTkFC
TEVEKHsgVU5VU0VEX1BBUkFNKHJhbmdlT2ZDb3JyZWN0aW9uKTsgVU5VU0VEX1BBUkFNKGNvcnJl
Y3RlZCk7IFVOVVNFRF9QQVJBTShjb3JyZWN0aW9uKTsgfSkKKworICAgIC8vIFRoaXMgZnVuY3Rp
b24gcmV0dXJucyBmYWxzZSBpZiB0aGUgcmVwbGFjZW1lbnQgc2hvdWxkIG5vdCBiZSBjYXJyaWVk
IG91dC4KKyAgICBib29sIHByb2Nlc3NNYXJrZXJzT25UZXh0VG9CZVJlcGxhY2VkQnlSZXN1bHQo
Y29uc3QgVGV4dENoZWNraW5nUmVzdWx0KiwgUmFuZ2UqIHJhbmdlVG9CZVJlcGxhY2VkLCBjb25z
dCBTdHJpbmcmIHN0cmluZ1RvQmVSZXBsYWNlZCkgVU5MRVNTX0VOQUJMRUQoeyBVTlVTRURfUEFS
QU0ocmFuZ2VUb0JlUmVwbGFjZWQpOyBVTlVTRURfUEFSQU0oc3RyaW5nVG9CZVJlcGxhY2VkKTsg
cmV0dXJuIHRydWU7IH0pOworICAgIHZvaWQgZGVsZXRlZEF1dG9jb3JyZWN0aW9uQXRQb3NpdGlv
bihjb25zdCBQb3NpdGlvbiYsIGNvbnN0IFN0cmluZyYgb3JpZ2luYWxTdHJpbmcpIFVOTEVTU19F
TkFCTEVEKHsgVU5VU0VEX1BBUkFNKG9yaWdpbmFsU3RyaW5nKTsgfSkKKworI2lmIFVTRShBVVRP
Q09SUkVDVElPTl9QQU5FTCkKK3ByaXZhdGU6CisgICAgdm9pZCByZWNvcmRBdXRvY29ycmVjdGlv
blJlc3BvbnNlUmV2ZXJzZWQoY29uc3QgU3RyaW5nJiByZXBsYWNlZFN0cmluZywgY29uc3QgU3Ry
aW5nJiByZXBsYWNlbWVudFN0cmluZyk7CisKKyAgICBib29sIHNob3VsZFN0YXJ0VGltZXJGb3Io
Y29uc3QgRG9jdW1lbnRNYXJrZXIqIG1hcmtlciwgaW50IGVuZE9mZnNldCkgY29uc3QKKyAgICB7
CisgICAgICAgIHJldHVybiAoKChtYXJrZXItPnR5cGUoKSA9PSBEb2N1bWVudE1hcmtlcjo6UmVw
bGFjZW1lbnQgJiYgIW1hcmtlci0+ZGVzY3JpcHRpb24oKS5pc051bGwoKSkgCisgICAgICAgICAg
ICAgICAgIHx8IG1hcmtlci0+dHlwZSgpID09IERvY3VtZW50TWFya2VyOjpTcGVsbGluZykgJiYg
c3RhdGljX2Nhc3Q8aW50PihtYXJrZXItPmVuZE9mZnNldCgpKSA9PSBlbmRPZmZzZXQpOworICAg
IH0KKworICAgIEVkaXRvckNsaWVudCogY2xpZW50KCk7CisgICAgVGV4dENoZWNrZXJDbGllbnQq
IHRleHRDaGVja2VyKCk7CisgICAgRmxvYXRSZWN0IHJvb3RWaWV3UmVjdEZvclJhbmdlKGNvbnN0
IFJhbmdlKikgY29uc3Q7CisgICAgdm9pZCBtYXJrUHJlY2VkaW5nV2hpdGVzcGFjZUZvckRlbGV0
ZWRBdXRvY29ycmVjdGlvbkFmdGVyQ29tbWFuZChFZGl0Q29tbWFuZCopOworCisgICAgRWRpdG9y
Q2xpZW50KiBtX2NsaWVudDsKKyAgICBGcmFtZSogbV9mcmFtZTsKKworICAgIFRpbWVyPFNwZWxs
aW5nQ29ycmVjdGlvbkNvbnRyb2xsZXI+IG1fY29ycmVjdGlvblBhbmVsVGltZXI7CisgICAgQ29y
cmVjdGlvblBhbmVsSW5mbyBtX2NvcnJlY3Rpb25QYW5lbEluZm87CisgICAgYm9vbCBtX2NvcnJl
Y3Rpb25QYW5lbElzRGlzbWlzc2VkQnlFZGl0b3I7CisKKyAgICBTdHJpbmcgbV9vcmlnaW5hbFN0
cmluZ0Zvckxhc3REZWxldGVkQXV0b2NvcnJlY3Rpb247CisgICAgUG9zaXRpb24gbV9wb3NpdGlv
bkZvckxhc3REZWxldGVkQXV0b2NvcnJlY3Rpb247CisjZW5kaWYKK307CisKKyN1bmRlZiBVTkxF
U1NfRU5BQkxFRAorCitpbmxpbmUgYm9vbCBTcGVsbGluZ0NvcnJlY3Rpb25Db250cm9sbGVyOjpz
aG91bGRSZW1vdmVNYXJrZXJzVXBvbkVkaXRpbmcoKQoreworI2lmIFVTRShNQVJLRVJfUkVNT1ZB
TF9VUE9OX0VESVRJTkcpCisgICAgcmV0dXJuIHRydWU7CisjZWxzZQorICAgIHJldHVybiBmYWxz
ZTsKKyNlbmRpZgorfQorCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKKyNlbmRpZiAvLyBTcGVs
bGluZ0NvcnJlY3Rpb25Db250cm9sbGVyX2gKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2VkaXRpbmcv
QWx0ZXJuYXRpdmVUZXh0Q29udHJvbGxlci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3Jl
L2VkaXRpbmcvQWx0ZXJuYXRpdmVUZXh0Q29udHJvbGxlci5oCShyZXZpc2lvbiAxMTI4MzApCisr
KyBTb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0FsdGVybmF0aXZlVGV4dENvbnRyb2xsZXIuaAkod29y
a2luZyBjb3B5KQpAQCAtMjMsOCArMjMsOCBAQAogICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJ
RiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KICAqLwogCi0jaWZu
ZGVmIFNwZWxsaW5nQ29ycmVjdGlvbkNvbnRyb2xsZXJfaAotI2RlZmluZSBTcGVsbGluZ0NvcnJl
Y3Rpb25Db250cm9sbGVyX2gKKyNpZm5kZWYgQWx0ZXJuYXRpdmVUZXh0Q29udHJvbGxlcl9oCisj
ZGVmaW5lIEFsdGVybmF0aXZlVGV4dENvbnRyb2xsZXJfaAogCiAjaW5jbHVkZSAiRG9jdW1lbnRN
YXJrZXIuaCIKICNpbmNsdWRlICJSYW5nZS5oIgpAQCAtNDMsMjYgKzQzLDMyIEBAIGNsYXNzIEVk
aXRDb21tYW5kQ29tcG9zaXRpb247CiBjbGFzcyBGcmFtZTsKIGNsYXNzIFRleHRDaGVja2VyQ2xp
ZW50OwogCi1zdHJ1Y3QgQ29ycmVjdGlvblBhbmVsSW5mbyB7Ci0gICAgZW51bSBQYW5lbFR5cGUg
ewotICAgICAgICBQYW5lbFR5cGVDb3JyZWN0aW9uID0gMCwKLSAgICAgICAgUGFuZWxUeXBlUmV2
ZXJzaW9uLAotICAgICAgICBQYW5lbFR5cGVTcGVsbGluZ1N1Z2dlc3Rpb25zCi0gICAgfTsKLQot
ICAgIFJlZlB0cjxSYW5nZT4gcmFuZ2VUb0JlUmVwbGFjZWQ7Ci0gICAgU3RyaW5nIHJlcGxhY2Vk
U3RyaW5nOwotICAgIFN0cmluZyByZXBsYWNlbWVudFN0cmluZzsKLSAgICBQYW5lbFR5cGUgcGFu
ZWxUeXBlOworY2xhc3MgQWx0ZXJuYXRpdmVUZXh0RGV0YWlscyA6IHB1YmxpYyBSZWZDb3VudGVk
PEFsdGVybmF0aXZlVGV4dERldGFpbHM+IHsKK3B1YmxpYzoKKyAgICBBbHRlcm5hdGl2ZVRleHRE
ZXRhaWxzKCkgeyB9CisgICAgdmlydHVhbCB+QWx0ZXJuYXRpdmVUZXh0RGV0YWlscygpIHsgfQor
fTsKKworZW51bSBBbHRlcm5hdGl2ZVRleHRUeXBlIHsKKyAgICBBbHRlcm5hdGl2ZVRleHRUeXBl
Q29ycmVjdGlvbiA9IDAsCisgICAgQWx0ZXJuYXRpdmVUZXh0VHlwZVJldmVyc2lvbiwKKyAgICBB
bHRlcm5hdGl2ZVRleHRUeXBlU3BlbGxpbmdTdWdnZXN0aW9ucywKK307CisKK3N0cnVjdCBBbHRl
cm5hdGl2ZVRleHRJbmZvIHsKKyAgICBSZWZQdHI8UmFuZ2U+IHJhbmdlV2l0aEFsdGVybmF0aXZl
OwogICAgIGJvb2wgaXNBY3RpdmU7CisgICAgQWx0ZXJuYXRpdmVUZXh0VHlwZSB0eXBlOworICAg
IFN0cmluZyBvcmlnaW5hbFRleHQ7CisgICAgUmVmUHRyPEFsdGVybmF0aXZlVGV4dERldGFpbHM+
IGRldGFpbHM7CiB9OwogCiBzdHJ1Y3QgVGV4dENoZWNraW5nUmVzdWx0OwogCi1lbnVtIFJlYXNv
bkZvckRpc21pc3NpbmdDb3JyZWN0aW9uUGFuZWwgewotICAgIFJlYXNvbkZvckRpc21pc3NpbmdD
b3JyZWN0aW9uUGFuZWxDYW5jZWxsZWQgPSAwLAotICAgIFJlYXNvbkZvckRpc21pc3NpbmdDb3Jy
ZWN0aW9uUGFuZWxJZ25vcmVkLAotICAgIFJlYXNvbkZvckRpc21pc3NpbmdDb3JyZWN0aW9uUGFu
ZWxBY2NlcHRlZAorZW51bSBSZWFzb25Gb3JEaXNtaXNzaW5nQWx0ZXJuYXRpdmVUZXh0IHsKKyAg
ICBSZWFzb25Gb3JEaXNtaXNzaW5nQWx0ZXJuYXRpdmVUZXh0Q2FuY2VsbGVkID0gMCwKKyAgICBS
ZWFzb25Gb3JEaXNtaXNzaW5nQWx0ZXJuYXRpdmVUZXh0SWdub3JlZCwKKyAgICBSZWFzb25Gb3JE
aXNtaXNzaW5nQWx0ZXJuYXRpdmVUZXh0QWNjZXB0ZWQKIH07CiAKICNpZiBVU0UoQVVUT0NPUlJF
Q1RJT05fUEFORUwpCkBAIC03MSwyMCArNzcsMTkgQEAgZW51bSBSZWFzb25Gb3JEaXNtaXNzaW5n
Q29ycmVjdGlvblBhbmVsIAogI2RlZmluZSBVTkxFU1NfRU5BQkxFRChmdW5jdGlvbkJvZHkpIGZ1
bmN0aW9uQm9keQogI2VuZGlmCiAKLWNsYXNzIFNwZWxsaW5nQ29ycmVjdGlvbkNvbnRyb2xsZXIg
ewotICAgIFdURl9NQUtFX05PTkNPUFlBQkxFKFNwZWxsaW5nQ29ycmVjdGlvbkNvbnRyb2xsZXIp
OyBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsKK2NsYXNzIEFsdGVybmF0aXZlVGV4dENvbnRyb2xs
ZXIgeworICAgIFdURl9NQUtFX05PTkNPUFlBQkxFKEFsdGVybmF0aXZlVGV4dENvbnRyb2xsZXIp
OworICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOwogcHVibGljOgotICAgIFNwZWxsaW5nQ29y
cmVjdGlvbkNvbnRyb2xsZXIoRnJhbWUqKSBVTkxFU1NfRU5BQkxFRCh7fSkKLSAgICB+U3BlbGxp
bmdDb3JyZWN0aW9uQ29udHJvbGxlcigpIFVOTEVTU19FTkFCTEVEKHt9KQorICAgIEFsdGVybmF0
aXZlVGV4dENvbnRyb2xsZXIoRnJhbWUqKSBVTkxFU1NfRU5BQkxFRCh7IH0pCisgICAgfkFsdGVy
bmF0aXZlVGV4dENvbnRyb2xsZXIoKSBVTkxFU1NfRU5BQkxFRCh7IH0pCiAKLSAgICB2b2lkIHN0
YXJ0Q29ycmVjdGlvblBhbmVsVGltZXIoQ29ycmVjdGlvblBhbmVsSW5mbzo6UGFuZWxUeXBlKSBV
TkxFU1NfRU5BQkxFRCh7fSkKLSAgICB2b2lkIHN0b3BDb3JyZWN0aW9uUGFuZWxUaW1lcigpIFVO
TEVTU19FTkFCTEVEKHt9KQorICAgIHZvaWQgc3RhcnRBbHRlcm5hdGl2ZVRleHRVSVRpbWVyKEFs
dGVybmF0aXZlVGV4dFR5cGUpIFVOTEVTU19FTkFCTEVEKHsgfSkKKyAgICB2b2lkIHN0b3BBbHRl
cm5hdGl2ZVRleHRVSVRpbWVyKCkgVU5MRVNTX0VOQUJMRUQoeyB9KQogCi0gICAgdm9pZCBkaXNt
aXNzKFJlYXNvbkZvckRpc21pc3NpbmdDb3JyZWN0aW9uUGFuZWwpIFVOTEVTU19FTkFCTEVEKHt9
KQotICAgIFN0cmluZyBkaXNtaXNzU29vbihSZWFzb25Gb3JEaXNtaXNzaW5nQ29ycmVjdGlvblBh
bmVsKSBVTkxFU1NfRU5BQkxFRCh7IHJldHVybiBTdHJpbmcoKTsgfSkKKyAgICB2b2lkIGRpc21p
c3MoUmVhc29uRm9yRGlzbWlzc2luZ0FsdGVybmF0aXZlVGV4dCkgVU5MRVNTX0VOQUJMRUQoeyB9
KQogICAgIHZvaWQgc2hvdyhQYXNzUmVmUHRyPFJhbmdlPiByYW5nZVRvUmVwbGFjZSwgY29uc3Qg
U3RyaW5nJiByZXBsYWNlbWVudCkgVU5MRVNTX0VOQUJMRUQoeyBVTlVTRURfUEFSQU0ocmFuZ2VU
b1JlcGxhY2UpOyBVTlVTRURfUEFSQU0ocmVwbGFjZW1lbnQpOyB9KQogCi0gICAgdm9pZCBhcHBs
eUNvcnJlY3Rpb25QYW5lbEluZm8oY29uc3QgVmVjdG9yPERvY3VtZW50TWFya2VyOjpNYXJrZXJU
eXBlPiYpIFVOTEVTU19FTkFCTEVEKHt9KQogICAgIC8vIFJldHVybiB0cnVlIGlmIGNvcnJlY3Rp
b24gd2FzIGFwcGxpZWQsIGZhbHNlIG90aGVyd2lzZS4KICAgICBib29sIGFwcGx5QXV0b2NvcnJl
Y3Rpb25CZWZvcmVUeXBpbmdJZkFwcHJvcHJpYXRlKCkgVU5MRVNTX0VOQUJMRUQoeyByZXR1cm4g
ZmFsc2U7IH0pCiAKQEAgLTk2LDE5ICsxMDEsMTcgQEAgcHVibGljOgogICAgIHZvaWQgc3RvcFBl
bmRpbmdDb3JyZWN0aW9uKGNvbnN0IFZpc2libGVTZWxlY3Rpb24mIG9sZFNlbGVjdGlvbikgVU5M
RVNTX0VOQUJMRUQoeyBVTlVTRURfUEFSQU0ob2xkU2VsZWN0aW9uKTsgfSkKICAgICB2b2lkIGFw
cGx5UGVuZGluZ0NvcnJlY3Rpb24oY29uc3QgVmlzaWJsZVNlbGVjdGlvbiYgc2VsZWN0aW9uQWZ0
ZXJUeXBpbmcpIFVOTEVTU19FTkFCTEVEKHsgVU5VU0VEX1BBUkFNKHNlbGVjdGlvbkFmdGVyVHlw
aW5nKTsgfSkKIAotICAgIHZvaWQgaGFuZGxlQ29ycmVjdGlvblBhbmVsUmVzdWx0KGNvbnN0IFN0
cmluZyYgY29ycmVjdGlvbikgVU5MRVNTX0VOQUJMRUQoeyBVTlVTRURfUEFSQU0oY29ycmVjdGlv
bik7IH0pCi0gICAgdm9pZCBoYW5kbGVDYW5jZWxPcGVyYXRpb24oKSBVTkxFU1NfRU5BQkxFRCh7
fSkKKyAgICB2b2lkIGhhbmRsZUFsdGVybmF0aXZlVGV4dFVJUmVzdWx0KGNvbnN0IFN0cmluZyYg
cmVzdWx0KSBVTkxFU1NfRU5BQkxFRCh7IFVOVVNFRF9QQVJBTShyZXN1bHQpOyB9KQorICAgIHZv
aWQgaGFuZGxlQ2FuY2VsT3BlcmF0aW9uKCkgVU5MRVNTX0VOQUJMRUQoeyB9KQogCiAgICAgYm9v
bCBoYXNQZW5kaW5nQ29ycmVjdGlvbigpIGNvbnN0IFVOTEVTU19FTkFCTEVEKHsgcmV0dXJuIGZh
bHNlOyB9KQogICAgIGJvb2wgaXNTcGVsbGluZ01hcmtlckFsbG93ZWQoUGFzc1JlZlB0cjxSYW5n
ZT4gbWlzc3BlbGxpbmdSYW5nZSkgY29uc3QgVU5MRVNTX0VOQUJMRUQoeyBVTlVTRURfUEFSQU0o
bWlzc3BlbGxpbmdSYW5nZSk7IHJldHVybiB0cnVlOyB9KQogICAgIGJvb2wgaXNBdXRvbWF0aWNT
cGVsbGluZ0NvcnJlY3Rpb25FbmFibGVkKCkgVU5MRVNTX0VOQUJMRUQoeyByZXR1cm4gZmFsc2U7
IH0pCiAgICAgYm9vbCBzaG91bGRSZW1vdmVNYXJrZXJzVXBvbkVkaXRpbmcoKTsKIAotICAgIHZv
aWQgY29ycmVjdGlvblBhbmVsVGltZXJGaXJlZChUaW1lcjxTcGVsbGluZ0NvcnJlY3Rpb25Db250
cm9sbGVyPiopIFVOTEVTU19FTkFCTEVEKHt9KQogICAgIHZvaWQgcmVjb3JkQXV0b2NvcnJlY3Rp
b25SZXNwb25zZVJldmVyc2VkKGNvbnN0IFN0cmluZyYgcmVwbGFjZWRTdHJpbmcsIFBhc3NSZWZQ
dHI8UmFuZ2U+IHJlcGxhY2VtZW50UmFuZ2UpIFVOTEVTU19FTkFCTEVEKHsgVU5VU0VEX1BBUkFN
KHJlcGxhY2VkU3RyaW5nKTsgVU5VU0VEX1BBUkFNKHJlcGxhY2VtZW50UmFuZ2UpOyB9KQogICAg
IHZvaWQgbWFya1JldmVyc2VkKFBhc3NSZWZQdHI8UmFuZ2U+IGNoYW5nZWRSYW5nZSkgVU5MRVNT
X0VOQUJMRUQoeyBVTlVTRURfUEFSQU0oY2hhbmdlZFJhbmdlKTsgfSkKICAgICB2b2lkIG1hcmtD
b3JyZWN0aW9uKFBhc3NSZWZQdHI8UmFuZ2U+IHJlcGxhY2VkUmFuZ2UsIGNvbnN0IFN0cmluZyYg
cmVwbGFjZWRTdHJpbmcpIFVOTEVTU19FTkFCTEVEKHsgVU5VU0VEX1BBUkFNKHJlcGxhY2VkUmFu
Z2UpOyBVTlVTRURfUEFSQU0ocmVwbGFjZWRTdHJpbmcpOyB9KQotICAgIHZvaWQgcmVjb3JkU3Bl
bGxjaGVja2VyUmVzcG9uc2VGb3JNb2RpZmllZENvcnJlY3Rpb24oUmFuZ2UqIHJhbmdlT2ZDb3Jy
ZWN0aW9uLCBjb25zdCBTdHJpbmcmIGNvcnJlY3RlZCwgY29uc3QgU3RyaW5nJiBjb3JyZWN0aW9u
KSBVTkxFU1NfRU5BQkxFRCh7IFVOVVNFRF9QQVJBTShyYW5nZU9mQ29ycmVjdGlvbik7IFVOVVNF
RF9QQVJBTShjb3JyZWN0ZWQpOyBVTlVTRURfUEFSQU0oY29ycmVjdGlvbik7IH0pCiAKICAgICAv
LyBUaGlzIGZ1bmN0aW9uIHJldHVybnMgZmFsc2UgaWYgdGhlIHJlcGxhY2VtZW50IHNob3VsZCBu
b3QgYmUgY2FycmllZCBvdXQuCiAgICAgYm9vbCBwcm9jZXNzTWFya2Vyc09uVGV4dFRvQmVSZXBs
YWNlZEJ5UmVzdWx0KGNvbnN0IFRleHRDaGVja2luZ1Jlc3VsdCosIFJhbmdlKiByYW5nZVRvQmVS
ZXBsYWNlZCwgY29uc3QgU3RyaW5nJiBzdHJpbmdUb0JlUmVwbGFjZWQpIFVOTEVTU19FTkFCTEVE
KHsgVU5VU0VEX1BBUkFNKHJhbmdlVG9CZVJlcGxhY2VkKTsgVU5VU0VEX1BBUkFNKHN0cmluZ1Rv
QmVSZXBsYWNlZCk7IHJldHVybiB0cnVlOyB9KTsKQEAgLTExNiw3ICsxMTksMTEgQEAgcHVibGlj
OgogCiAjaWYgVVNFKEFVVE9DT1JSRUNUSU9OX1BBTkVMKQogcHJpdmF0ZToKKyAgICBTdHJpbmcg
ZGlzbWlzc1Nvb24oUmVhc29uRm9yRGlzbWlzc2luZ0FsdGVybmF0aXZlVGV4dCk7CisgICAgdm9p
ZCBhcHBseUFsdGVybmF0aXZlVGV4dChjb25zdCBTdHJpbmcmIGFsdGVybmF0aXZlLCBjb25zdCBW
ZWN0b3I8RG9jdW1lbnRNYXJrZXI6Ok1hcmtlclR5cGU+Jik7CisgICAgdm9pZCB0aW1lckZpcmVk
KFRpbWVyPEFsdGVybmF0aXZlVGV4dENvbnRyb2xsZXI+Kik7CiAgICAgdm9pZCByZWNvcmRBdXRv
Y29ycmVjdGlvblJlc3BvbnNlUmV2ZXJzZWQoY29uc3QgU3RyaW5nJiByZXBsYWNlZFN0cmluZywg
Y29uc3QgU3RyaW5nJiByZXBsYWNlbWVudFN0cmluZyk7CisgICAgdm9pZCByZWNvcmRTcGVsbGNo
ZWNrZXJSZXNwb25zZUZvck1vZGlmaWVkQ29ycmVjdGlvbihSYW5nZSogcmFuZ2VPZkNvcnJlY3Rp
b24sIGNvbnN0IFN0cmluZyYgY29ycmVjdGVkLCBjb25zdCBTdHJpbmcmIGNvcnJlY3Rpb24pOwog
CiAgICAgYm9vbCBzaG91bGRTdGFydFRpbWVyRm9yKGNvbnN0IERvY3VtZW50TWFya2VyKiBtYXJr
ZXIsIGludCBlbmRPZmZzZXQpIGNvbnN0CiAgICAgewpAQCAtMTMyLDkgKzEzOSw5IEBAIHByaXZh
dGU6CiAgICAgRWRpdG9yQ2xpZW50KiBtX2NsaWVudDsKICAgICBGcmFtZSogbV9mcmFtZTsKIAot
ICAgIFRpbWVyPFNwZWxsaW5nQ29ycmVjdGlvbkNvbnRyb2xsZXI+IG1fY29ycmVjdGlvblBhbmVs
VGltZXI7Ci0gICAgQ29ycmVjdGlvblBhbmVsSW5mbyBtX2NvcnJlY3Rpb25QYW5lbEluZm87Ci0g
ICAgYm9vbCBtX2NvcnJlY3Rpb25QYW5lbElzRGlzbWlzc2VkQnlFZGl0b3I7CisgICAgVGltZXI8
QWx0ZXJuYXRpdmVUZXh0Q29udHJvbGxlcj4gbV90aW1lcjsKKyAgICBBbHRlcm5hdGl2ZVRleHRJ
bmZvIG1fYWx0ZXJuYXRpdmVUZXh0SW5mbzsKKyAgICBib29sIG1faXNEaXNtaXNzZWRCeUVkaXRp
bmc7CiAKICAgICBTdHJpbmcgbV9vcmlnaW5hbFN0cmluZ0Zvckxhc3REZWxldGVkQXV0b2NvcnJl
Y3Rpb247CiAgICAgUG9zaXRpb24gbV9wb3NpdGlvbkZvckxhc3REZWxldGVkQXV0b2NvcnJlY3Rp
b247CkBAIC0xNDMsNyArMTUwLDcgQEAgcHJpdmF0ZToKIAogI3VuZGVmIFVOTEVTU19FTkFCTEVE
CiAKLWlubGluZSBib29sIFNwZWxsaW5nQ29ycmVjdGlvbkNvbnRyb2xsZXI6OnNob3VsZFJlbW92
ZU1hcmtlcnNVcG9uRWRpdGluZygpCitpbmxpbmUgYm9vbCBBbHRlcm5hdGl2ZVRleHRDb250cm9s
bGVyOjpzaG91bGRSZW1vdmVNYXJrZXJzVXBvbkVkaXRpbmcoKQogewogI2lmIFVTRShNQVJLRVJf
UkVNT1ZBTF9VUE9OX0VESVRJTkcpCiAgICAgcmV0dXJuIHRydWU7CkBAIC0xNTQsNCArMTYxLDQg
QEAgaW5saW5lIGJvb2wgU3BlbGxpbmdDb3JyZWN0aW9uQ29udHJvbGxlcgogCiB9IC8vIG5hbWVz
cGFjZSBXZWJDb3JlCiAKLSNlbmRpZiAvLyBTcGVsbGluZ0NvcnJlY3Rpb25Db250cm9sbGVyX2gK
KyNlbmRpZiAvLyBBbHRlcm5hdGl2ZVRleHRDb250cm9sbGVyX2gKSW5kZXg6IFNvdXJjZS9XZWJD
b3JlL2VkaXRpbmcvRWRpdG9yLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9lZGl0
aW5nL0VkaXRvci5jcHAJKHJldmlzaW9uIDExMjk2MSkKKysrIFNvdXJjZS9XZWJDb3JlL2VkaXRp
bmcvRWRpdG9yLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjgsNiArMjgsNyBAQAogI2luY2x1ZGUg
IkVkaXRvci5oIgogCiAjaW5jbHVkZSAiQVhPYmplY3RDYWNoZS5oIgorI2luY2x1ZGUgIkFsdGVy
bmF0aXZlVGV4dENvbnRyb2xsZXIuaCIKICNpbmNsdWRlICJBcHBseVN0eWxlQ29tbWFuZC5oIgog
I2luY2x1ZGUgIkNTU0NvbXB1dGVkU3R5bGVEZWNsYXJhdGlvbi5oIgogI2luY2x1ZGUgIkNTU1By
b3BlcnR5LmgiCkBAIC0zNyw3ICszOCw2IEBACiAjaW5jbHVkZSAiQ2FjaGVkUmVzb3VyY2VMb2Fk
ZXIuaCIKICNpbmNsdWRlICJDbGlwYm9hcmRFdmVudC5oIgogI2luY2x1ZGUgIkNvbXBvc2l0aW9u
RXZlbnQuaCIKLSNpbmNsdWRlICJTcGVsbGluZ0NvcnJlY3Rpb25Db250cm9sbGVyLmgiCiAjaW5j
bHVkZSAiQ3JlYXRlTGlua0NvbW1hbmQuaCIKICNpbmNsdWRlICJEZWxldGVCdXR0b25Db250cm9s
bGVyLmgiCiAjaW5jbHVkZSAiRGVsZXRlU2VsZWN0aW9uQ29tbWFuZC5oIgpAQCAtNDgyLDcgKzQ4
Miw3IEBAIHZvaWQgRWRpdG9yOjpyZXNwb25kVG9DaGFuZ2VkU2VsZWN0aW9uKGMKICAgICAgICAg
Y2xpZW50KCktPnJlc3BvbmRUb0NoYW5nZWRTZWxlY3Rpb24obV9mcmFtZSk7CiAgICAgc2V0U3Rh
cnROZXdLaWxsUmluZ1NlcXVlbmNlKHRydWUpOwogICAgIG1fZGVsZXRlQnV0dG9uQ29udHJvbGxl
ci0+cmVzcG9uZFRvQ2hhbmdlZFNlbGVjdGlvbihvbGRTZWxlY3Rpb24pOwotICAgIG1fc3BlbGxp
bmdDb3JyZWN0b3ItPnJlc3BvbmRUb0NoYW5nZWRTZWxlY3Rpb24ob2xkU2VsZWN0aW9uKTsKKyAg
ICBtX2FsdGVybmF0aXZlVGV4dENvbnRyb2xsZXItPnJlc3BvbmRUb0NoYW5nZWRTZWxlY3Rpb24o
b2xkU2VsZWN0aW9uKTsKIH0KIAogdm9pZCBFZGl0b3I6OnJlc3BvbmRUb0NoYW5nZWRDb250ZW50
cyhjb25zdCBWaXNpYmxlU2VsZWN0aW9uJiBlbmRpbmdTZWxlY3Rpb24pCkBAIC03ODIsNyArNzgy
LDcgQEAgdm9pZCBFZGl0b3I6OmFwcGxpZWRFZGl0aW5nKFBhc3NSZWZQdHI8QwogICAgIGRpc3Bh
dGNoRWRpdGFibGVDb250ZW50Q2hhbmdlZEV2ZW50cyhjb21wb3NpdGlvbi0+c3RhcnRpbmdSb290
RWRpdGFibGVFbGVtZW50KCksIGNvbXBvc2l0aW9uLT5lbmRpbmdSb290RWRpdGFibGVFbGVtZW50
KCkpOwogICAgIFZpc2libGVTZWxlY3Rpb24gbmV3U2VsZWN0aW9uKGNtZC0+ZW5kaW5nU2VsZWN0
aW9uKCkpOwogCi0gICAgbV9zcGVsbGluZ0NvcnJlY3Rvci0+cmVzcG9uZFRvQXBwbGllZEVkaXRp
bmcoY21kLmdldCgpKTsKKyAgICBtX2FsdGVybmF0aXZlVGV4dENvbnRyb2xsZXItPnJlc3BvbmRU
b0FwcGxpZWRFZGl0aW5nKGNtZC5nZXQoKSk7CiAKICAgICAvLyBEb24ndCBjbGVhciB0aGUgdHlw
aW5nIHN0eWxlIHdpdGggdGhpcyBzZWxlY3Rpb24gY2hhbmdlLiAgV2UgZG8gdGhvc2UgdGhpbmdz
IGVsc2V3aGVyZSBpZiBuZWNlc3NhcnkuCiAgICAgY2hhbmdlU2VsZWN0aW9uQWZ0ZXJDb21tYW5k
KG5ld1NlbGVjdGlvbiwgZmFsc2UsIGZhbHNlKTsKQEAgLTgxMiw3ICs4MTIsNyBAQCB2b2lkIEVk
aXRvcjo6dW5hcHBsaWVkRWRpdGluZyhQYXNzUmVmUHRyCiAgICAgCiAgICAgVmlzaWJsZVNlbGVj
dGlvbiBuZXdTZWxlY3Rpb24oY21kLT5zdGFydGluZ1NlbGVjdGlvbigpKTsKICAgICBjaGFuZ2VT
ZWxlY3Rpb25BZnRlckNvbW1hbmQobmV3U2VsZWN0aW9uLCB0cnVlLCB0cnVlKTsKLSAgICBtX3Nw
ZWxsaW5nQ29ycmVjdG9yLT5yZXNwb25kVG9VbmFwcGxpZWRFZGl0aW5nKGNtZC5nZXQoKSk7Cisg
ICAgbV9hbHRlcm5hdGl2ZVRleHRDb250cm9sbGVyLT5yZXNwb25kVG9VbmFwcGxpZWRFZGl0aW5n
KGNtZC5nZXQoKSk7CiAgICAgCiAgICAgbV9sYXN0RWRpdENvbW1hbmQgPSAwOwogICAgIGlmIChj
bGllbnQoKSkKQEAgLTg0NCw3ICs4NDQsNyBAQCBFZGl0b3I6OkVkaXRvcihGcmFtZSogZnJhbWUp
CiAgICAgLCBtX3Nob3VsZFN0eWxlV2l0aENTUyhmYWxzZSkKICAgICAsIG1fa2lsbFJpbmcoYWRv
cHRQdHIobmV3IEtpbGxSaW5nKSkKICAgICAsIG1fc3BlbGxDaGVja2VyKGFkb3B0UHRyKG5ldyBT
cGVsbENoZWNrZXIoZnJhbWUpKSkKLSAgICAsIG1fc3BlbGxpbmdDb3JyZWN0b3IoYWRvcHRQdHIo
bmV3IFNwZWxsaW5nQ29ycmVjdGlvbkNvbnRyb2xsZXIoZnJhbWUpKSkKKyAgICAsIG1fYWx0ZXJu
YXRpdmVUZXh0Q29udHJvbGxlcihhZG9wdFB0cihuZXcgQWx0ZXJuYXRpdmVUZXh0Q29udHJvbGxl
cihmcmFtZSkpKQogICAgICwgbV9hcmVNYXJrZWRUZXh0TWF0Y2hlc0hpZ2hsaWdodGVkKGZhbHNl
KQogICAgICwgbV9kZWZhdWx0UGFyYWdyYXBoU2VwYXJhdG9yKEVkaXRvclBhcmFncmFwaFNlcGFy
YXRvcklzRGl2KQogewpAQCAtODk1LDcgKzg5NSw3IEBAIGJvb2wgRWRpdG9yOjppbnNlcnRUZXh0
V2l0aG91dFNlbmRpbmdUZXgKICAgICBpZiAodGV4dC5sZW5ndGgoKSA9PSAxICYmIGlzUHVuY3Qo
dGV4dFswXSkgJiYgIWlzQW1iaWd1b3VzQm91bmRhcnlDaGFyYWN0ZXIodGV4dFswXSkpCiAgICAg
ICAgIHNob3VsZENvbnNpZGVyQXBwbHlpbmdBdXRvY29ycmVjdGlvbiA9IHRydWU7CiAKLSAgICBi
b29sIGF1dG9jb3JyZWN0aW9uV2FzQXBwbGllZCA9IHNob3VsZENvbnNpZGVyQXBwbHlpbmdBdXRv
Y29ycmVjdGlvbiAmJiBtX3NwZWxsaW5nQ29ycmVjdG9yLT5hcHBseUF1dG9jb3JyZWN0aW9uQmVm
b3JlVHlwaW5nSWZBcHByb3ByaWF0ZSgpOworICAgIGJvb2wgYXV0b2NvcnJlY3Rpb25XYXNBcHBs
aWVkID0gc2hvdWxkQ29uc2lkZXJBcHBseWluZ0F1dG9jb3JyZWN0aW9uICYmIG1fYWx0ZXJuYXRp
dmVUZXh0Q29udHJvbGxlci0+YXBwbHlBdXRvY29ycmVjdGlvbkJlZm9yZVR5cGluZ0lmQXBwcm9w
cmlhdGUoKTsKIAogICAgIC8vIEdldCB0aGUgc2VsZWN0aW9uIHRvIHVzZSBmb3IgdGhlIGV2ZW50
IHRoYXQgdHJpZ2dlcmVkIHRoaXMgaW5zZXJ0VGV4dC4KICAgICAvLyBJZiB0aGUgZXZlbnQgaGFu
ZGxlciBjaGFuZ2VkIHRoZSBzZWxlY3Rpb24sIHdlIG1heSB3YW50IHRvIHVzZSBhIGRpZmZlcmVu
dCBzZWxlY3Rpb24KQEAgLTkzMSw3ICs5MzEsNyBAQCBib29sIEVkaXRvcjo6aW5zZXJ0TGluZUJy
ZWFrKCkKICAgICBpZiAoIXNob3VsZEluc2VydFRleHQoIlxuIiwgbV9mcmFtZS0+c2VsZWN0aW9u
KCktPnRvTm9ybWFsaXplZFJhbmdlKCkuZ2V0KCksIEVkaXRvckluc2VydEFjdGlvblR5cGVkKSkK
ICAgICAgICAgcmV0dXJuIHRydWU7CiAKLSAgICBib29sIGF1dG9jb3JyZWN0aW9uSXNBcHBsaWVk
ID0gbV9zcGVsbGluZ0NvcnJlY3Rvci0+YXBwbHlBdXRvY29ycmVjdGlvbkJlZm9yZVR5cGluZ0lm
QXBwcm9wcmlhdGUoKTsKKyAgICBib29sIGF1dG9jb3JyZWN0aW9uSXNBcHBsaWVkID0gbV9hbHRl
cm5hdGl2ZVRleHRDb250cm9sbGVyLT5hcHBseUF1dG9jb3JyZWN0aW9uQmVmb3JlVHlwaW5nSWZB
cHByb3ByaWF0ZSgpOwogICAgIFR5cGluZ0NvbW1hbmQ6Omluc2VydExpbmVCcmVhayhtX2ZyYW1l
LT5kb2N1bWVudCgpLCBhdXRvY29ycmVjdGlvbklzQXBwbGllZCA/IFR5cGluZ0NvbW1hbmQ6OlJl
dGFpbkF1dG9jb3JyZWN0aW9uSW5kaWNhdG9yIDogMCk7CiAgICAgcmV2ZWFsU2VsZWN0aW9uQWZ0
ZXJFZGl0aW5nT3BlcmF0aW9uKCk7CiAKQEAgLTk0OSw3ICs5NDksNyBAQCBib29sIEVkaXRvcjo6
aW5zZXJ0UGFyYWdyYXBoU2VwYXJhdG9yKCkKICAgICBpZiAoIXNob3VsZEluc2VydFRleHQoIlxu
IiwgbV9mcmFtZS0+c2VsZWN0aW9uKCktPnRvTm9ybWFsaXplZFJhbmdlKCkuZ2V0KCksIEVkaXRv
ckluc2VydEFjdGlvblR5cGVkKSkKICAgICAgICAgcmV0dXJuIHRydWU7CiAKLSAgICBib29sIGF1
dG9jb3JyZWN0aW9uSXNBcHBsaWVkID0gbV9zcGVsbGluZ0NvcnJlY3Rvci0+YXBwbHlBdXRvY29y
cmVjdGlvbkJlZm9yZVR5cGluZ0lmQXBwcm9wcmlhdGUoKTsKKyAgICBib29sIGF1dG9jb3JyZWN0
aW9uSXNBcHBsaWVkID0gbV9hbHRlcm5hdGl2ZVRleHRDb250cm9sbGVyLT5hcHBseUF1dG9jb3Jy
ZWN0aW9uQmVmb3JlVHlwaW5nSWZBcHByb3ByaWF0ZSgpOwogICAgIFR5cGluZ0NvbW1hbmQ6Omlu
c2VydFBhcmFncmFwaFNlcGFyYXRvcihtX2ZyYW1lLT5kb2N1bWVudCgpLCBhdXRvY29ycmVjdGlv
bklzQXBwbGllZCA/IFR5cGluZ0NvbW1hbmQ6OlJldGFpbkF1dG9jb3JyZWN0aW9uSW5kaWNhdG9y
IDogMCk7CiAgICAgcmV2ZWFsU2VsZWN0aW9uQWZ0ZXJFZGl0aW5nT3BlcmF0aW9uKCk7CiAKQEAg
LTExNzMsNyArMTE3Myw3IEBAIHZvaWQgRWRpdG9yOjp0b2dnbGVBdXRvbWF0aWNUZXh0UmVwbGFj
ZW0KIAogYm9vbCBFZGl0b3I6OmlzQXV0b21hdGljU3BlbGxpbmdDb3JyZWN0aW9uRW5hYmxlZCgp
CiB7Ci0gICAgcmV0dXJuIG1fc3BlbGxpbmdDb3JyZWN0b3ItPmlzQXV0b21hdGljU3BlbGxpbmdD
b3JyZWN0aW9uRW5hYmxlZCgpOworICAgIHJldHVybiBtX2FsdGVybmF0aXZlVGV4dENvbnRyb2xs
ZXItPmlzQXV0b21hdGljU3BlbGxpbmdDb3JyZWN0aW9uRW5hYmxlZCgpOwogfQogCiB2b2lkIEVk
aXRvcjo6dG9nZ2xlQXV0b21hdGljU3BlbGxpbmdDb3JyZWN0aW9uKCkKQEAgLTE3NzIsNyArMTc3
Miw3IEBAIHZvaWQgRWRpdG9yOjptYXJrTWlzc3BlbGxpbmdzQWZ0ZXJUeXBpbmcKICNlbmRpZgog
CiAgICAgaWYgKHVuaWZpZWRUZXh0Q2hlY2tlckVuYWJsZWQoKSkgewotICAgICAgICBtX3NwZWxs
aW5nQ29ycmVjdG9yLT5hcHBseVBlbmRpbmdDb3JyZWN0aW9uKHNlbGVjdGlvbkFmdGVyVHlwaW5n
KTsKKyAgICAgICAgbV9hbHRlcm5hdGl2ZVRleHRDb250cm9sbGVyLT5hcHBseVBlbmRpbmdDb3Jy
ZWN0aW9uKHNlbGVjdGlvbkFmdGVyVHlwaW5nKTsKIAogICAgICAgICBUZXh0Q2hlY2tpbmdUeXBl
TWFzayB0ZXh0Q2hlY2tpbmdPcHRpb25zID0gMDsKIApAQCAtMTkxMiw3ICsxOTEyLDcgQEAgdm9p
ZCBFZGl0b3I6Om1hcmtBbGxNaXNzcGVsbGluZ3NBbmRCYWRHcgogICAgIEFTU0VSVCh1bmlmaWVk
VGV4dENoZWNrZXJFbmFibGVkKCkpOwogCiAgICAgLy8gVGhlcmUgc2hvdWxkbid0IGJlIHBlbmRp
bmcgYXV0b2NvcnJlY3Rpb24gYXQgdGhpcyBtb21lbnQuCi0gICAgQVNTRVJUKCFtX3NwZWxsaW5n
Q29ycmVjdG9yLT5oYXNQZW5kaW5nQ29ycmVjdGlvbigpKTsKKyAgICBBU1NFUlQoIW1fYWx0ZXJu
YXRpdmVUZXh0Q29udHJvbGxlci0+aGFzUGVuZGluZ0NvcnJlY3Rpb24oKSk7CiAKICAgICBib29s
IHNob3VsZE1hcmtHcmFtbWFyID0gdGV4dENoZWNraW5nT3B0aW9ucyAmIFRleHRDaGVja2luZ1R5
cGVHcmFtbWFyOwogICAgIGJvb2wgc2hvdWxkU2hvd0NvcnJlY3Rpb25QYW5lbCA9IHRleHRDaGVj
a2luZ09wdGlvbnMgJiBUZXh0Q2hlY2tpbmdUeXBlU2hvd0NvcnJlY3Rpb25QYW5lbDsKQEAgLTIw
MDUsNyArMjAwNSw3IEBAIHZvaWQgRWRpdG9yOjptYXJrQW5kUmVwbGFjZUZvcihQYXNzUmVmUHQK
ICAgICAgICAgaWYgKHNob3VsZE1hcmtTcGVsbGluZyAmJiByZXN1bHQtPnR5cGUgPT0gVGV4dENo
ZWNraW5nVHlwZVNwZWxsaW5nICYmIHJlc3VsdExvY2F0aW9uID49IHBhcmFncmFwaC5jaGVja2lu
Z1N0YXJ0KCkgJiYgcmVzdWx0TG9jYXRpb24gKyByZXN1bHRMZW5ndGggPD0gc3BlbGxpbmdSYW5n
ZUVuZE9mZnNldCAmJiAhcmVzdWx0RW5kc0F0QW1iaWd1b3VzQm91bmRhcnkpIHsKICAgICAgICAg
ICAgIEFTU0VSVChyZXN1bHRMZW5ndGggPiAwICYmIHJlc3VsdExvY2F0aW9uID49IDApOwogICAg
ICAgICAgICAgUmVmUHRyPFJhbmdlPiBtaXNzcGVsbGluZ1JhbmdlID0gcGFyYWdyYXBoLnN1YnJh
bmdlKHJlc3VsdExvY2F0aW9uLCByZXN1bHRMZW5ndGgpOwotICAgICAgICAgICAgaWYgKCFtX3Nw
ZWxsaW5nQ29ycmVjdG9yLT5pc1NwZWxsaW5nTWFya2VyQWxsb3dlZChtaXNzcGVsbGluZ1Jhbmdl
KSkKKyAgICAgICAgICAgIGlmICghbV9hbHRlcm5hdGl2ZVRleHRDb250cm9sbGVyLT5pc1NwZWxs
aW5nTWFya2VyQWxsb3dlZChtaXNzcGVsbGluZ1JhbmdlKSkKICAgICAgICAgICAgICAgICBjb250
aW51ZTsKICAgICAgICAgICAgIG1pc3NwZWxsaW5nUmFuZ2UtPnN0YXJ0Q29udGFpbmVyKCktPmRv
Y3VtZW50KCktPm1hcmtlcnMoKS0+YWRkTWFya2VyKG1pc3NwZWxsaW5nUmFuZ2UuZ2V0KCksIERv
Y3VtZW50TWFya2VyOjpTcGVsbGluZywgcmVzdWx0LT5yZXBsYWNlbWVudCk7CiAgICAgICAgIH0g
ZWxzZSBpZiAoc2hvdWxkTWFya0dyYW1tYXIgJiYgcmVzdWx0LT50eXBlID09IFRleHRDaGVja2lu
Z1R5cGVHcmFtbWFyICYmIHBhcmFncmFwaC5jaGVja2luZ1JhbmdlQ292ZXJzKHJlc3VsdExvY2F0
aW9uLCByZXN1bHRMZW5ndGgpKSB7CkBAIC0yMDQ4LDcgKzIwNDgsNyBAQCB2b2lkIEVkaXRvcjo6
bWFya0FuZFJlcGxhY2VGb3IoUGFzc1JlZlB0CiAgICAgICAgICAgICAgICAgY29udGludWU7CiAK
ICAgICAgICAgICAgIFN0cmluZyByZXBsYWNlZFN0cmluZyA9IHBsYWluVGV4dChyYW5nZVRvUmVw
bGFjZS5nZXQoKSk7Ci0gICAgICAgICAgICBib29sIGV4aXN0aW5nTWFya2Vyc1Blcm1pdFJlcGxh
Y2VtZW50ID0gbV9zcGVsbGluZ0NvcnJlY3Rvci0+cHJvY2Vzc01hcmtlcnNPblRleHRUb0JlUmVw
bGFjZWRCeVJlc3VsdChyZXN1bHQsIHJhbmdlVG9SZXBsYWNlLmdldCgpLCByZXBsYWNlZFN0cmlu
Zyk7CisgICAgICAgICAgICBib29sIGV4aXN0aW5nTWFya2Vyc1Blcm1pdFJlcGxhY2VtZW50ID0g
bV9hbHRlcm5hdGl2ZVRleHRDb250cm9sbGVyLT5wcm9jZXNzTWFya2Vyc09uVGV4dFRvQmVSZXBs
YWNlZEJ5UmVzdWx0KHJlc3VsdCwgcmFuZ2VUb1JlcGxhY2UuZ2V0KCksIHJlcGxhY2VkU3RyaW5n
KTsKICAgICAgICAgICAgIGlmICghZXhpc3RpbmdNYXJrZXJzUGVybWl0UmVwbGFjZW1lbnQpCiAg
ICAgICAgICAgICAgICAgY29udGludWU7CiAKQEAgLTIwNTksNyArMjA1OSw3IEBAIHZvaWQgRWRp
dG9yOjptYXJrQW5kUmVwbGFjZUZvcihQYXNzUmVmUHQKICAgICAgICAgICAgICAgICAvLyBzaG91
bGRTaG93Q29ycmVjdGlvblBhbmVsIGNhbiBiZSB0cnVlIG9ubHkgd2hlbiB0aGUgcGFuZWwgaXMg
YXZhaWxhYmxlLgogICAgICAgICAgICAgICAgIGlmIChyZXN1bHRMb2NhdGlvbiArIHJlc3VsdExl
bmd0aCA9PSBzcGVsbGluZ1JhbmdlRW5kT2Zmc2V0KSB7CiAgICAgICAgICAgICAgICAgICAgIC8v
IFdlIG9ubHkgc2hvdyB0aGUgY29ycmVjdGlvbiBwYW5lbCBvbiB0aGUgbGFzdCB3b3JkLgotICAg
ICAgICAgICAgICAgICAgICBtX3NwZWxsaW5nQ29ycmVjdG9yLT5zaG93KHJhbmdlVG9SZXBsYWNl
LCByZXN1bHQtPnJlcGxhY2VtZW50KTsKKyAgICAgICAgICAgICAgICAgICAgbV9hbHRlcm5hdGl2
ZVRleHRDb250cm9sbGVyLT5zaG93KHJhbmdlVG9SZXBsYWNlLCByZXN1bHQtPnJlcGxhY2VtZW50
KTsKICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgfQogICAgICAg
ICAgICAgICAgIC8vIElmIHRoaXMgZnVuY3Rpb24gaXMgY2FsbGVkIGZvciBzaG93aW5nIGNvcnJl
Y3Rpb24gcGFuZWwsIHdlIGlnbm9yZSBvdGhlciBjb3JyZWN0aW9uIG9yIHJlcGxhY2VtZW50LgpA
QCAtMjA5NSw3ICsyMDk1LDcgQEAgdm9pZCBFZGl0b3I6Om1hcmtBbmRSZXBsYWNlRm9yKFBhc3NS
ZWZQdAogCiAgICAgICAgICAgICAgICAgLy8gQWRkIGEgbWFya2VyIHNvIHRoYXQgY29ycmVjdGlv
bnMgY2FuIGVhc2lseSBiZSB1bmRvbmUgYW5kIHdvbid0IGJlIHJlLWNvcnJlY3RlZC4KICAgICAg
ICAgICAgICAgICBpZiAocmVzdWx0LT50eXBlID09IFRleHRDaGVja2luZ1R5cGVDb3JyZWN0aW9u
KQotICAgICAgICAgICAgICAgICAgICBtX3NwZWxsaW5nQ29ycmVjdG9yLT5tYXJrQ29ycmVjdGlv
bihwYXJhZ3JhcGguc3VicmFuZ2UocmVzdWx0TG9jYXRpb24sIHJlcGxhY2VtZW50TGVuZ3RoKSwg
cmVwbGFjZWRTdHJpbmcpOworICAgICAgICAgICAgICAgICAgICBtX2FsdGVybmF0aXZlVGV4dENv
bnRyb2xsZXItPm1hcmtDb3JyZWN0aW9uKHBhcmFncmFwaC5zdWJyYW5nZShyZXN1bHRMb2NhdGlv
biwgcmVwbGFjZW1lbnRMZW5ndGgpLCByZXBsYWNlZFN0cmluZyk7CiAgICAgICAgICAgICB9CiAg
ICAgICAgIH0KICAgICB9CkBAIC0yMTI4LDEyICsyMTI4LDEyIEBAIHZvaWQgRWRpdG9yOjpjaGFu
Z2VCYWNrVG9SZXBsYWNlZFN0cmluZygKICAgICBpZiAoIXNob3VsZEluc2VydFRleHQocmVwbGFj
ZWRTdHJpbmcsIHNlbGVjdGlvbi5nZXQoKSwgRWRpdG9ySW5zZXJ0QWN0aW9uUGFzdGVkKSkKICAg
ICAgICAgcmV0dXJuOwogICAgIAotICAgIG1fc3BlbGxpbmdDb3JyZWN0b3ItPnJlY29yZEF1dG9j
b3JyZWN0aW9uUmVzcG9uc2VSZXZlcnNlZChyZXBsYWNlZFN0cmluZywgc2VsZWN0aW9uKTsKKyAg
ICBtX2FsdGVybmF0aXZlVGV4dENvbnRyb2xsZXItPnJlY29yZEF1dG9jb3JyZWN0aW9uUmVzcG9u
c2VSZXZlcnNlZChyZXBsYWNlZFN0cmluZywgc2VsZWN0aW9uKTsKICAgICBUZXh0Q2hlY2tpbmdQ
YXJhZ3JhcGggcGFyYWdyYXBoKHNlbGVjdGlvbik7CiAgICAgcmVwbGFjZVNlbGVjdGlvbldpdGhU
ZXh0KHJlcGxhY2VkU3RyaW5nLCBmYWxzZSwgZmFsc2UpOwogICAgIFJlZlB0cjxSYW5nZT4gY2hh
bmdlZFJhbmdlID0gcGFyYWdyYXBoLnN1YnJhbmdlKHBhcmFncmFwaC5jaGVja2luZ1N0YXJ0KCks
IHJlcGxhY2VkU3RyaW5nLmxlbmd0aCgpKTsKICAgICBjaGFuZ2VkUmFuZ2UtPnN0YXJ0Q29udGFp
bmVyKCktPmRvY3VtZW50KCktPm1hcmtlcnMoKS0+YWRkTWFya2VyKGNoYW5nZWRSYW5nZS5nZXQo
KSwgRG9jdW1lbnRNYXJrZXI6OlJlcGxhY2VtZW50LCBTdHJpbmcoKSk7Ci0gICAgbV9zcGVsbGlu
Z0NvcnJlY3Rvci0+bWFya1JldmVyc2VkKGNoYW5nZWRSYW5nZS5nZXQoKSk7CisgICAgbV9hbHRl
cm5hdGl2ZVRleHRDb250cm9sbGVyLT5tYXJrUmV2ZXJzZWQoY2hhbmdlZFJhbmdlLmdldCgpKTsK
IH0KIAogCkBAIC0yMTU3LDEyICsyMTU3LDEyIEBAIHZvaWQgRWRpdG9yOjptYXJrTWlzc3BlbGxp
bmdzQW5kQmFkR3JhbW0KIAogdm9pZCBFZGl0b3I6OnVuYXBwbGllZFNwZWxsQ29ycmVjdGlvbihj
b25zdCBWaXNpYmxlU2VsZWN0aW9uJiBzZWxlY3Rpb25PZkNvcnJlY3RlZCwgY29uc3QgU3RyaW5n
JiBjb3JyZWN0ZWQsIGNvbnN0IFN0cmluZyYgY29ycmVjdGlvbikKIHsKLSAgICBtX3NwZWxsaW5n
Q29ycmVjdG9yLT5yZXNwb25kVG9VbmFwcGxpZWRTcGVsbENvcnJlY3Rpb24oc2VsZWN0aW9uT2ZD
b3JyZWN0ZWQsIGNvcnJlY3RlZCwgY29ycmVjdGlvbik7CisgICAgbV9hbHRlcm5hdGl2ZVRleHRD
b250cm9sbGVyLT5yZXNwb25kVG9VbmFwcGxpZWRTcGVsbENvcnJlY3Rpb24oc2VsZWN0aW9uT2ZD
b3JyZWN0ZWQsIGNvcnJlY3RlZCwgY29ycmVjdGlvbik7CiB9CiAKIHZvaWQgRWRpdG9yOjp1cGRh
dGVNYXJrZXJzRm9yV29yZHNBZmZlY3RlZEJ5RWRpdGluZyhib29sIGRvTm90UmVtb3ZlSWZTZWxl
Y3Rpb25BdFdvcmRCb3VuZGFyeSkKIHsKLSAgICBpZiAoIW1fc3BlbGxpbmdDb3JyZWN0b3ItPnNo
b3VsZFJlbW92ZU1hcmtlcnNVcG9uRWRpdGluZygpKQorICAgIGlmICghbV9hbHRlcm5hdGl2ZVRl
eHRDb250cm9sbGVyLT5zaG91bGRSZW1vdmVNYXJrZXJzVXBvbkVkaXRpbmcoKSkKICAgICAgICAg
cmV0dXJuOwogCiAgICAgLy8gV2Ugd2FudCB0byByZW1vdmUgdGhlIG1hcmtlcnMgZnJvbSBhIHdv
cmQgaWYgYW4gZWRpdGluZyBjb21tYW5kIHdpbGwgY2hhbmdlIHRoZSB3b3JkLiBUaGlzIGNhbiBo
YXBwZW4gaW4gb25lIG9mCkBAIC0yMjMyLDcgKzIyMzIsNyBAQCB2b2lkIEVkaXRvcjo6dXBkYXRl
TWFya2Vyc0ZvcldvcmRzQWZmZWN0CiAKIHZvaWQgRWRpdG9yOjpkZWxldGVkQXV0b2NvcnJlY3Rp
b25BdFBvc2l0aW9uKGNvbnN0IFBvc2l0aW9uJiBwb3NpdGlvbiwgY29uc3QgU3RyaW5nJiBvcmln
aW5hbFN0cmluZykKIHsKLSAgICBtX3NwZWxsaW5nQ29ycmVjdG9yLT5kZWxldGVkQXV0b2NvcnJl
Y3Rpb25BdFBvc2l0aW9uKHBvc2l0aW9uLCBvcmlnaW5hbFN0cmluZyk7CisgICAgbV9hbHRlcm5h
dGl2ZVRleHRDb250cm9sbGVyLT5kZWxldGVkQXV0b2NvcnJlY3Rpb25BdFBvc2l0aW9uKHBvc2l0
aW9uLCBvcmlnaW5hbFN0cmluZyk7CiB9CiAKIFBhc3NSZWZQdHI8UmFuZ2U+IEVkaXRvcjo6cmFu
Z2VGb3JQb2ludChjb25zdCBJbnRQb2ludCYgd2luZG93UG9pbnQpCkBAIC0yMzU3LDIwICsyMzU3
LDIwIEBAIHZvaWQgRWRpdG9yOjphZGRUb0tpbGxSaW5nKFJhbmdlKiByYW5nZSwKICAgICBtX3No
b3VsZFN0YXJ0TmV3S2lsbFJpbmdTZXF1ZW5jZSA9IGZhbHNlOwogfQogCi12b2lkIEVkaXRvcjo6
c3RhcnRDb3JyZWN0aW9uUGFuZWxUaW1lcigpCit2b2lkIEVkaXRvcjo6c3RhcnRBbHRlcm5hdGl2
ZVRleHRVSVRpbWVyKCkKIHsKLSAgICBtX3NwZWxsaW5nQ29ycmVjdG9yLT5zdGFydENvcnJlY3Rp
b25QYW5lbFRpbWVyKENvcnJlY3Rpb25QYW5lbEluZm86OlBhbmVsVHlwZUNvcnJlY3Rpb24pOwor
ICAgIG1fYWx0ZXJuYXRpdmVUZXh0Q29udHJvbGxlci0+c3RhcnRBbHRlcm5hdGl2ZVRleHRVSVRp
bWVyKEFsdGVybmF0aXZlVGV4dFR5cGVDb3JyZWN0aW9uKTsKIH0KIAotdm9pZCBFZGl0b3I6Omhh
bmRsZUNvcnJlY3Rpb25QYW5lbFJlc3VsdChjb25zdCBTdHJpbmcmIGNvcnJlY3Rpb24pCit2b2lk
IEVkaXRvcjo6aGFuZGxlQWx0ZXJuYXRpdmVUZXh0VUlSZXN1bHQoY29uc3QgU3RyaW5nJiBjb3Jy
ZWN0aW9uKQogewotICAgIG1fc3BlbGxpbmdDb3JyZWN0b3ItPmhhbmRsZUNvcnJlY3Rpb25QYW5l
bFJlc3VsdChjb3JyZWN0aW9uKTsKKyAgICBtX2FsdGVybmF0aXZlVGV4dENvbnRyb2xsZXItPmhh
bmRsZUFsdGVybmF0aXZlVGV4dFVJUmVzdWx0KGNvcnJlY3Rpb24pOwogfQogCiAKIHZvaWQgRWRp
dG9yOjpkaXNtaXNzQ29ycmVjdGlvblBhbmVsQXNJZ25vcmVkKCkKIHsKLSAgICBtX3NwZWxsaW5n
Q29ycmVjdG9yLT5kaXNtaXNzKFJlYXNvbkZvckRpc21pc3NpbmdDb3JyZWN0aW9uUGFuZWxJZ25v
cmVkKTsKKyAgICBtX2FsdGVybmF0aXZlVGV4dENvbnRyb2xsZXItPmRpc21pc3MoUmVhc29uRm9y
RGlzbWlzc2luZ0FsdGVybmF0aXZlVGV4dElnbm9yZWQpOwogfQogCiBib29sIEVkaXRvcjo6aW5z
aWRlVmlzaWJsZUFyZWEoY29uc3QgTGF5b3V0UG9pbnQmIHBvaW50KSBjb25zdApAQCAtMjg4Niw3
ICsyODg2LDcgQEAgdm9pZCBFZGl0b3I6OnNldE1hcmtlZFRleHRNYXRjaGVzQXJlSGlnaAogCiB2
b2lkIEVkaXRvcjo6cmVzcG9uZFRvQ2hhbmdlZFNlbGVjdGlvbihjb25zdCBWaXNpYmxlU2VsZWN0
aW9uJiBvbGRTZWxlY3Rpb24sIEZyYW1lU2VsZWN0aW9uOjpTZXRTZWxlY3Rpb25PcHRpb25zIG9w
dGlvbnMpCiB7Ci0gICAgbV9zcGVsbGluZ0NvcnJlY3Rvci0+c3RvcFBlbmRpbmdDb3JyZWN0aW9u
KG9sZFNlbGVjdGlvbik7CisgICAgbV9hbHRlcm5hdGl2ZVRleHRDb250cm9sbGVyLT5zdG9wUGVu
ZGluZ0NvcnJlY3Rpb24ob2xkU2VsZWN0aW9uKTsKIAogICAgIGJvb2wgY2xvc2VUeXBpbmcgPSBv
cHRpb25zICYgRnJhbWVTZWxlY3Rpb246OkNsb3NlVHlwaW5nOwogICAgIGJvb2wgaXNDb250aW51
b3VzU3BlbGxDaGVja2luZ0VuYWJsZWQgPSB0aGlzLT5pc0NvbnRpbnVvdXNTcGVsbENoZWNraW5n
RW5hYmxlZCgpOwpJbmRleDogU291cmNlL1dlYkNvcmUvZWRpdGluZy9FZGl0b3IuaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0VkaXRvci5oCShyZXZpc2lvbiAxMTI5NjEp
CisrKyBTb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0VkaXRvci5oCSh3b3JraW5nIGNvcHkpCkBAIC02
MSw3ICs2MSw3IEBAIGNsYXNzIFBhc3RlYm9hcmQ7CiBjbGFzcyBTaW1wbGVGb250RGF0YTsKIGNs
YXNzIFNwZWxsQ2hlY2tlcjsKIGNsYXNzIFNwZWxsQ2hlY2tSZXF1ZXN0OwotY2xhc3MgU3BlbGxp
bmdDb3JyZWN0aW9uQ29udHJvbGxlcjsKK2NsYXNzIEFsdGVybmF0aXZlVGV4dENvbnRyb2xsZXI7
CiBjbGFzcyBTdHlsZVByb3BlcnR5U2V0OwogY2xhc3MgVGV4dDsKIGNsYXNzIFRleHRDaGVja2Vy
Q2xpZW50OwpAQCAtMzE5LDkgKzMxOSw5IEBAIHB1YmxpYzoKIAogICAgIHZvaWQgYWRkVG9LaWxs
UmluZyhSYW5nZSosIGJvb2wgcHJlcGVuZCk7CiAKLSAgICB2b2lkIHN0YXJ0Q29ycmVjdGlvblBh
bmVsVGltZXIoKTsKKyAgICB2b2lkIHN0YXJ0QWx0ZXJuYXRpdmVUZXh0VUlUaW1lcigpOwogICAg
IC8vIElmIHVzZXIgY29uZmlybWVkIGEgY29ycmVjdGlvbiBpbiB0aGUgY29ycmVjdGlvbiBwYW5l
bCwgY29ycmVjdGlvbiBoYXMgbm9uLXplcm8gbGVuZ3RoLCBvdGhlcndpc2UgaXQgbWVhbnMgdGhh
dCB1c2VyIGhhcyBkaXNtaXNzZWQgdGhlIHBhbmVsLgotICAgIHZvaWQgaGFuZGxlQ29ycmVjdGlv
blBhbmVsUmVzdWx0KGNvbnN0IFN0cmluZyYgY29ycmVjdGlvbik7CisgICAgdm9pZCBoYW5kbGVB
bHRlcm5hdGl2ZVRleHRVSVJlc3VsdChjb25zdCBTdHJpbmcmIGNvcnJlY3Rpb24pOwogICAgIHZv
aWQgZGlzbWlzc0NvcnJlY3Rpb25QYW5lbEFzSWdub3JlZCgpOwogCiAgICAgdm9pZCBwYXN0ZUFz
RnJhZ21lbnQoUGFzc1JlZlB0cjxEb2N1bWVudEZyYWdtZW50PiwgYm9vbCBzbWFydFJlcGxhY2Us
IGJvb2wgbWF0Y2hTdHlsZSk7CkBAIC00MDEsNyArNDAxLDcgQEAgcHJpdmF0ZToKICAgICBib29s
IG1fc2hvdWxkU3R5bGVXaXRoQ1NTOwogICAgIE93blB0cjxLaWxsUmluZz4gbV9raWxsUmluZzsK
ICAgICBPd25QdHI8U3BlbGxDaGVja2VyPiBtX3NwZWxsQ2hlY2tlcjsKLSAgICBPd25QdHI8U3Bl
bGxpbmdDb3JyZWN0aW9uQ29udHJvbGxlcj4gbV9zcGVsbGluZ0NvcnJlY3RvcjsKKyAgICBPd25Q
dHI8QWx0ZXJuYXRpdmVUZXh0Q29udHJvbGxlcj4gbV9hbHRlcm5hdGl2ZVRleHRDb250cm9sbGVy
OwogICAgIFZpc2libGVTZWxlY3Rpb24gbV9tYXJrOwogICAgIGJvb2wgbV9hcmVNYXJrZWRUZXh0
TWF0Y2hlc0hpZ2hsaWdodGVkOwogICAgIEVkaXRvclBhcmFncmFwaFNlcGFyYXRvciBtX2RlZmF1
bHRQYXJhZ3JhcGhTZXBhcmF0b3I7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9lZGl0aW5nL1NwZWxs
aW5nQ29ycmVjdGlvbkNvbW1hbmQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2Vk
aXRpbmcvU3BlbGxpbmdDb3JyZWN0aW9uQ29tbWFuZC5jcHAJKHJldmlzaW9uIDExMjk2MSkKKysr
IFNvdXJjZS9XZWJDb3JlL2VkaXRpbmcvU3BlbGxpbmdDb3JyZWN0aW9uQ29tbWFuZC5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTI2LDEyICsyNiwxMiBAQAogI2luY2x1ZGUgImNvbmZpZy5oIgogI2lu
Y2x1ZGUgIlNwZWxsaW5nQ29ycmVjdGlvbkNvbW1hbmQuaCIKIAorI2luY2x1ZGUgIkFsdGVybmF0
aXZlVGV4dENvbnRyb2xsZXIuaCIKICNpbmNsdWRlICJEb2N1bWVudC5oIgogI2luY2x1ZGUgIkRv
Y3VtZW50RnJhZ21lbnQuaCIKICNpbmNsdWRlICJGcmFtZS5oIgogI2luY2x1ZGUgIlJlcGxhY2VT
ZWxlY3Rpb25Db21tYW5kLmgiCiAjaW5jbHVkZSAiU2V0U2VsZWN0aW9uQ29tbWFuZC5oIgotI2lu
Y2x1ZGUgIlNwZWxsaW5nQ29ycmVjdGlvbkNvbnRyb2xsZXIuaCIKICNpbmNsdWRlICJUZXh0SXRl
cmF0b3IuaCIKICNpbmNsdWRlICJtYXJrdXAuaCIKIApJbmRleDogU291cmNlL1dlYkNvcmUvZWRp
dGluZy9TcGVsbGluZ0NvcnJlY3Rpb25Db250cm9sbGVyLmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvV2ViQ29yZS9lZGl0aW5nL1NwZWxsaW5nQ29ycmVjdGlvbkNvbnRyb2xsZXIuY3BwCShyZXZp
c2lvbiAxMTI5NjEpCisrKyBTb3VyY2UvV2ViQ29yZS9lZGl0aW5nL1NwZWxsaW5nQ29ycmVjdGlv
bkNvbnRyb2xsZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDU2NSArMCwwIEBACi0vKgotICog
Q29weXJpZ2h0IChDKSAyMDA2LCAyMDA3LCAyMDA4IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAwOCBOb2tpYSBDb3Jwb3JhdGlvbiBhbmQvb3IgaXRz
IHN1YnNpZGlhcnkoLWllcykKLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJj
ZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJl
IHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJl
IG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0
aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4g
YmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
IGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3Zp
ZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJ
REVEIEJZIEFQUExFIENPTVBVVEVSLCBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCi0gKiBFWFBSRVNT
IE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRI
RQotICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBG
T1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQg
U0hBTEwgQVBQTEUgQ09NUFVURVIsIElOQy4gT1IKLSAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUg
Rk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAotICogRVhFTVBM
QVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLAotICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9T
UyBPRiBVU0UsIERBVEEsIE9SCi0gKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04p
IEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCi0gKiBPRiBMSUFCSUxJVFksIFdIRVRI
RVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcg
TkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVT
RQotICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElU
WSBPRiBTVUNIIERBTUFHRS4gCi0gKi8KLQotI2luY2x1ZGUgImNvbmZpZy5oIgotI2luY2x1ZGUg
IlNwZWxsaW5nQ29ycmVjdGlvbkNvbnRyb2xsZXIuaCIKLQotI2luY2x1ZGUgIkRvY3VtZW50TWFy
a2VyQ29udHJvbGxlci5oIgotI2luY2x1ZGUgIkVkaXRDb21tYW5kLmgiCi0jaW5jbHVkZSAiRWRp
dG9yQ2xpZW50LmgiCi0jaW5jbHVkZSAiRmxvYXRRdWFkLmgiCi0jaW5jbHVkZSAiRnJhbWUuaCIK
LSNpbmNsdWRlICJGcmFtZVZpZXcuaCIKLSNpbmNsdWRlICJQYWdlLmgiCi0jaW5jbHVkZSAiU3Bl
bGxpbmdDb3JyZWN0aW9uQ29tbWFuZC5oIgotI2luY2x1ZGUgIlRleHRDaGVja2VyQ2xpZW50Lmgi
Ci0jaW5jbHVkZSAiVGV4dENoZWNraW5nSGVscGVyLmgiCi0jaW5jbHVkZSAiVGV4dEl0ZXJhdG9y
LmgiCi0jaW5jbHVkZSAiVmlzaWJsZVNlbGVjdGlvbi5oIgotI2luY2x1ZGUgImh0bWxlZGl0aW5n
LmgiCi0jaW5jbHVkZSAibWFya3VwLmgiCi0jaW5jbHVkZSAidmlzaWJsZV91bml0cy5oIgotCi1u
YW1lc3BhY2UgV2ViQ29yZSB7Ci0KLXVzaW5nIG5hbWVzcGFjZSBzdGQ7Ci11c2luZyBuYW1lc3Bh
Y2UgV1RGOwotCi0jaWYgVVNFKEFVVE9DT1JSRUNUSU9OX1BBTkVMKQotCi1zdGF0aWMgY29uc3Qg
VmVjdG9yPERvY3VtZW50TWFya2VyOjpNYXJrZXJUeXBlPiYgbWFya2VyVHlwZXNGb3JBdXRvY29y
cmVjdGlvbigpCi17Ci0gICAgREVGSU5FX1NUQVRJQ19MT0NBTChWZWN0b3I8RG9jdW1lbnRNYXJr
ZXI6Ok1hcmtlclR5cGU+LCBtYXJrZXJUeXBlc0ZvckF1dG9Db3JyZWN0aW9uLCAoKSk7Ci0gICAg
aWYgKG1hcmtlclR5cGVzRm9yQXV0b0NvcnJlY3Rpb24uaXNFbXB0eSgpKSB7Ci0gICAgICAgIG1h
cmtlclR5cGVzRm9yQXV0b0NvcnJlY3Rpb24uYXBwZW5kKERvY3VtZW50TWFya2VyOjpSZXBsYWNl
bWVudCk7Ci0gICAgICAgIG1hcmtlclR5cGVzRm9yQXV0b0NvcnJlY3Rpb24uYXBwZW5kKERvY3Vt
ZW50TWFya2VyOjpDb3JyZWN0aW9uSW5kaWNhdG9yKTsKLSAgICAgICAgbWFya2VyVHlwZXNGb3JB
dXRvQ29ycmVjdGlvbi5hcHBlbmQoRG9jdW1lbnRNYXJrZXI6OlNwZWxsQ2hlY2tpbmdFeGVtcHRp
b24pOwotICAgICAgICBtYXJrZXJUeXBlc0ZvckF1dG9Db3JyZWN0aW9uLmFwcGVuZChEb2N1bWVu
dE1hcmtlcjo6QXV0b2NvcnJlY3RlZCk7Ci0gICAgfQotICAgIHJldHVybiBtYXJrZXJUeXBlc0Zv
ckF1dG9Db3JyZWN0aW9uOwotfQotCi1zdGF0aWMgY29uc3QgVmVjdG9yPERvY3VtZW50TWFya2Vy
OjpNYXJrZXJUeXBlPiYgbWFya2VyVHlwZXNGb3JSZXBsYWNlbWVudCgpCi17Ci0gICAgREVGSU5F
X1NUQVRJQ19MT0NBTChWZWN0b3I8RG9jdW1lbnRNYXJrZXI6Ok1hcmtlclR5cGU+LCBtYXJrZXJU
eXBlc0ZvclJlcGxhY2VtZW50LCAoKSk7Ci0gICAgaWYgKG1hcmtlclR5cGVzRm9yUmVwbGFjZW1l
bnQuaXNFbXB0eSgpKSB7Ci0gICAgICAgIG1hcmtlclR5cGVzRm9yUmVwbGFjZW1lbnQuYXBwZW5k
KERvY3VtZW50TWFya2VyOjpSZXBsYWNlbWVudCk7Ci0gICAgICAgIG1hcmtlclR5cGVzRm9yUmVw
bGFjZW1lbnQuYXBwZW5kKERvY3VtZW50TWFya2VyOjpTcGVsbENoZWNraW5nRXhlbXB0aW9uKTsK
LSAgICB9Ci0gICAgcmV0dXJuIG1hcmtlclR5cGVzRm9yUmVwbGFjZW1lbnQ7Ci19Ci0KLXN0YXRp
YyBib29sIG1hcmtlcnNIYXZlSWRlbnRpY2FsRGVzY3JpcHRpb24oY29uc3QgVmVjdG9yPERvY3Vt
ZW50TWFya2VyKj4mIG1hcmtlcnMpCi17Ci0gICAgaWYgKG1hcmtlcnMuaXNFbXB0eSgpKQotICAg
ICAgICByZXR1cm4gdHJ1ZTsKLQotICAgIGNvbnN0IFN0cmluZyYgZGVzY3JpcHRpb24gPSBtYXJr
ZXJzWzBdLT5kZXNjcmlwdGlvbigpOwotICAgIGZvciAoc2l6ZV90IGkgPSAxOyBpIDwgbWFya2Vy
cy5zaXplKCk7ICsraSkgewotICAgICAgICBpZiAoZGVzY3JpcHRpb24gIT0gbWFya2Vyc1tpXS0+
ZGVzY3JpcHRpb24oKSkKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci0gICAgcmV0
dXJuIHRydWU7Ci19Ci0KLVNwZWxsaW5nQ29ycmVjdGlvbkNvbnRyb2xsZXI6OlNwZWxsaW5nQ29y
cmVjdGlvbkNvbnRyb2xsZXIoRnJhbWUqIGZyYW1lKQotICAgIDogbV9mcmFtZShmcmFtZSkKLSAg
ICAsIG1fY29ycmVjdGlvblBhbmVsVGltZXIodGhpcywgJlNwZWxsaW5nQ29ycmVjdGlvbkNvbnRy
b2xsZXI6OmNvcnJlY3Rpb25QYW5lbFRpbWVyRmlyZWQpCi17Ci19Ci0KLVNwZWxsaW5nQ29ycmVj
dGlvbkNvbnRyb2xsZXI6On5TcGVsbGluZ0NvcnJlY3Rpb25Db250cm9sbGVyKCkKLXsKLSAgICBk
aXNtaXNzKFJlYXNvbkZvckRpc21pc3NpbmdDb3JyZWN0aW9uUGFuZWxJZ25vcmVkKTsKLX0KLQot
dm9pZCBTcGVsbGluZ0NvcnJlY3Rpb25Db250cm9sbGVyOjpzdGFydENvcnJlY3Rpb25QYW5lbFRp
bWVyKENvcnJlY3Rpb25QYW5lbEluZm86OlBhbmVsVHlwZSB0eXBlKQotewotICAgIGNvbnN0IGRv
dWJsZSBjb3JyZWN0aW9uUGFuZWxUaW1lckludGVydmFsID0gMC4zOwotICAgIGlmICghaXNBdXRv
bWF0aWNTcGVsbGluZ0NvcnJlY3Rpb25FbmFibGVkKCkpCi0gICAgICAgIHJldHVybjsKLQotICAg
IC8vIElmIHR5cGUgaXMgUGFuZWxUeXBlUmV2ZXJzaW9uLCB0aGVuIHRoZSBuZXcgcmFuZ2UgaGFz
IGJlZW4gc2V0LiBTbyB3ZSBzaG91bGRuJ3QgY2xlYXIgaXQuCi0gICAgaWYgKHR5cGUgPT0gQ29y
cmVjdGlvblBhbmVsSW5mbzo6UGFuZWxUeXBlQ29ycmVjdGlvbikKLSAgICAgICAgbV9jb3JyZWN0
aW9uUGFuZWxJbmZvLnJhbmdlVG9CZVJlcGxhY2VkLmNsZWFyKCk7Ci0gICAgbV9jb3JyZWN0aW9u
UGFuZWxJbmZvLnBhbmVsVHlwZSA9IHR5cGU7Ci0gICAgbV9jb3JyZWN0aW9uUGFuZWxUaW1lci5z
dGFydE9uZVNob3QoY29ycmVjdGlvblBhbmVsVGltZXJJbnRlcnZhbCk7Ci19Ci0KLXZvaWQgU3Bl
bGxpbmdDb3JyZWN0aW9uQ29udHJvbGxlcjo6c3RvcENvcnJlY3Rpb25QYW5lbFRpbWVyKCkKLXsK
LSAgICBtX2NvcnJlY3Rpb25QYW5lbFRpbWVyLnN0b3AoKTsKLSAgICBtX2NvcnJlY3Rpb25QYW5l
bEluZm8ucmFuZ2VUb0JlUmVwbGFjZWQuY2xlYXIoKTsKLX0KLQotdm9pZCBTcGVsbGluZ0NvcnJl
Y3Rpb25Db250cm9sbGVyOjpzdG9wUGVuZGluZ0NvcnJlY3Rpb24oY29uc3QgVmlzaWJsZVNlbGVj
dGlvbiYgb2xkU2VsZWN0aW9uKQotewotICAgIC8vIE1ha2Ugc3VyZSB0aGVyZSdzIG5vIHBlbmRp
bmcgYXV0b2NvcnJlY3Rpb24gYmVmb3JlIHdlIGNhbGwgbWFya01pc3NwZWxsaW5nc0FuZEJhZEdy
YW1tYXIoKSBiZWxvdy4KLSAgICBWaXNpYmxlU2VsZWN0aW9uIGN1cnJlbnRTZWxlY3Rpb24obV9m
cmFtZS0+c2VsZWN0aW9uKCktPnNlbGVjdGlvbigpKTsKLSAgICBpZiAoY3VycmVudFNlbGVjdGlv
biA9PSBvbGRTZWxlY3Rpb24pCi0gICAgICAgIHJldHVybjsKLQotICAgIHN0b3BDb3JyZWN0aW9u
UGFuZWxUaW1lcigpOwotICAgIGRpc21pc3MoUmVhc29uRm9yRGlzbWlzc2luZ0NvcnJlY3Rpb25Q
YW5lbElnbm9yZWQpOwotfQotCi12b2lkIFNwZWxsaW5nQ29ycmVjdGlvbkNvbnRyb2xsZXI6OmFw
cGx5UGVuZGluZ0NvcnJlY3Rpb24oY29uc3QgVmlzaWJsZVNlbGVjdGlvbiYgc2VsZWN0aW9uQWZ0
ZXJUeXBpbmcpCi17Ci0gICAgLy8gQXBwbHkgcGVuZGluZyBhdXRvY29ycmVjdGlvbiBiZWZvcmUg
bmV4dCByb3VuZCBvZiBzcGVsbCBjaGVja2luZy4KLSAgICBib29sIGRvQXBwbHlDb3JyZWN0aW9u
ID0gdHJ1ZTsKLSAgICBWaXNpYmxlUG9zaXRpb24gc3RhcnRPZlNlbGVjdGlvbiA9IHNlbGVjdGlv
bkFmdGVyVHlwaW5nLnZpc2libGVTdGFydCgpOwotICAgIFZpc2libGVTZWxlY3Rpb24gY3VycmVu
dFdvcmQgPSBWaXNpYmxlU2VsZWN0aW9uKHN0YXJ0T2ZXb3JkKHN0YXJ0T2ZTZWxlY3Rpb24sIExl
ZnRXb3JkSWZPbkJvdW5kYXJ5KSwgZW5kT2ZXb3JkKHN0YXJ0T2ZTZWxlY3Rpb24sIFJpZ2h0V29y
ZElmT25Cb3VuZGFyeSkpOwotICAgIGlmIChjdXJyZW50V29yZC52aXNpYmxlRW5kKCkgPT0gc3Rh
cnRPZlNlbGVjdGlvbikgewotICAgICAgICBTdHJpbmcgd29yZFRleHQgPSBwbGFpblRleHQoY3Vy
cmVudFdvcmQudG9Ob3JtYWxpemVkUmFuZ2UoKS5nZXQoKSk7Ci0gICAgICAgIGlmICh3b3JkVGV4
dC5sZW5ndGgoKSA+IDAgJiYgaXNBbWJpZ3VvdXNCb3VuZGFyeUNoYXJhY3Rlcih3b3JkVGV4dFt3
b3JkVGV4dC5sZW5ndGgoKSAtIDFdKSkKLSAgICAgICAgICAgIGRvQXBwbHlDb3JyZWN0aW9uID0g
ZmFsc2U7Ci0gICAgfQotICAgIGlmIChkb0FwcGx5Q29ycmVjdGlvbikKLSAgICAgICAgaGFuZGxl
Q29ycmVjdGlvblBhbmVsUmVzdWx0KGRpc21pc3NTb29uKFJlYXNvbkZvckRpc21pc3NpbmdDb3Jy
ZWN0aW9uUGFuZWxBY2NlcHRlZCkpOyAKLSAgICBlbHNlCi0gICAgICAgIG1fY29ycmVjdGlvblBh
bmVsSW5mby5yYW5nZVRvQmVSZXBsYWNlZC5jbGVhcigpOwotfQotCi1ib29sIFNwZWxsaW5nQ29y
cmVjdGlvbkNvbnRyb2xsZXI6Omhhc1BlbmRpbmdDb3JyZWN0aW9uKCkgY29uc3QKLXsKLSAgICBy
ZXR1cm4gbV9jb3JyZWN0aW9uUGFuZWxJbmZvLnJhbmdlVG9CZVJlcGxhY2VkOwotfQotCi1ib29s
IFNwZWxsaW5nQ29ycmVjdGlvbkNvbnRyb2xsZXI6OmlzU3BlbGxpbmdNYXJrZXJBbGxvd2VkKFBh
c3NSZWZQdHI8UmFuZ2U+IG1pc3NwZWxsaW5nUmFuZ2UpIGNvbnN0Ci17Ci0gICAgcmV0dXJuICFt
X2ZyYW1lLT5kb2N1bWVudCgpLT5tYXJrZXJzKCktPmhhc01hcmtlcnMobWlzc3BlbGxpbmdSYW5n
ZS5nZXQoKSwgRG9jdW1lbnRNYXJrZXI6OlNwZWxsQ2hlY2tpbmdFeGVtcHRpb24pOwotfQotCi12
b2lkIFNwZWxsaW5nQ29ycmVjdGlvbkNvbnRyb2xsZXI6OnNob3coUGFzc1JlZlB0cjxSYW5nZT4g
cmFuZ2VUb1JlcGxhY2UsIGNvbnN0IFN0cmluZyYgcmVwbGFjZW1lbnQpCi17Ci0gICAgRmxvYXRS
ZWN0IGJvdW5kaW5nQm94ID0gcm9vdFZpZXdSZWN0Rm9yUmFuZ2UocmFuZ2VUb1JlcGxhY2UuZ2V0
KCkpOwotICAgIGlmIChib3VuZGluZ0JveC5pc0VtcHR5KCkpCi0gICAgICAgIHJldHVybjsKLSAg
ICBtX2NvcnJlY3Rpb25QYW5lbEluZm8ucmVwbGFjZWRTdHJpbmcgPSBwbGFpblRleHQocmFuZ2VU
b1JlcGxhY2UuZ2V0KCkpOwotICAgIG1fY29ycmVjdGlvblBhbmVsSW5mby5yYW5nZVRvQmVSZXBs
YWNlZCA9IHJhbmdlVG9SZXBsYWNlOwotICAgIG1fY29ycmVjdGlvblBhbmVsSW5mby5yZXBsYWNl
bWVudFN0cmluZyA9IHJlcGxhY2VtZW50OwotICAgIG1fY29ycmVjdGlvblBhbmVsSW5mby5pc0Fj
dGl2ZSA9IHRydWU7Ci0gICAgY2xpZW50KCktPnNob3dDb3JyZWN0aW9uUGFuZWwobV9jb3JyZWN0
aW9uUGFuZWxJbmZvLnBhbmVsVHlwZSwgYm91bmRpbmdCb3gsIG1fY29ycmVjdGlvblBhbmVsSW5m
by5yZXBsYWNlZFN0cmluZywgcmVwbGFjZW1lbnQsIFZlY3RvcjxTdHJpbmc+KCkpOwotfQotCi12
b2lkIFNwZWxsaW5nQ29ycmVjdGlvbkNvbnRyb2xsZXI6OmhhbmRsZUNhbmNlbE9wZXJhdGlvbigp
Ci17Ci0gICAgaWYgKCFtX2NvcnJlY3Rpb25QYW5lbEluZm8uaXNBY3RpdmUpCi0gICAgICAgIHJl
dHVybjsKLSAgICBtX2NvcnJlY3Rpb25QYW5lbEluZm8uaXNBY3RpdmUgPSBmYWxzZTsKLSAgICBk
aXNtaXNzKFJlYXNvbkZvckRpc21pc3NpbmdDb3JyZWN0aW9uUGFuZWxDYW5jZWxsZWQpOwotfQot
Ci12b2lkIFNwZWxsaW5nQ29ycmVjdGlvbkNvbnRyb2xsZXI6OmRpc21pc3MoUmVhc29uRm9yRGlz
bWlzc2luZ0NvcnJlY3Rpb25QYW5lbCByZWFzb25Gb3JEaXNtaXNzaW5nKQotewotICAgIGlmICgh
bV9jb3JyZWN0aW9uUGFuZWxJbmZvLmlzQWN0aXZlKQotICAgICAgICByZXR1cm47Ci0gICAgbV9j
b3JyZWN0aW9uUGFuZWxJbmZvLmlzQWN0aXZlID0gZmFsc2U7Ci0gICAgbV9jb3JyZWN0aW9uUGFu
ZWxJc0Rpc21pc3NlZEJ5RWRpdG9yID0gdHJ1ZTsKLSAgICBpZiAoY2xpZW50KCkpCi0gICAgICAg
IGNsaWVudCgpLT5kaXNtaXNzQ29ycmVjdGlvblBhbmVsKHJlYXNvbkZvckRpc21pc3NpbmcpOwot
fQotCi1TdHJpbmcgU3BlbGxpbmdDb3JyZWN0aW9uQ29udHJvbGxlcjo6ZGlzbWlzc1Nvb24oUmVh
c29uRm9yRGlzbWlzc2luZ0NvcnJlY3Rpb25QYW5lbCByZWFzb25Gb3JEaXNtaXNzaW5nKQotewot
ICAgIGlmICghbV9jb3JyZWN0aW9uUGFuZWxJbmZvLmlzQWN0aXZlKQotICAgICAgICByZXR1cm4g
U3RyaW5nKCk7Ci0gICAgbV9jb3JyZWN0aW9uUGFuZWxJbmZvLmlzQWN0aXZlID0gZmFsc2U7Ci0g
ICAgbV9jb3JyZWN0aW9uUGFuZWxJc0Rpc21pc3NlZEJ5RWRpdG9yID0gdHJ1ZTsKLSAgICBpZiAo
IWNsaWVudCgpKQotICAgICAgICByZXR1cm4gU3RyaW5nKCk7Ci0gICAgcmV0dXJuIGNsaWVudCgp
LT5kaXNtaXNzQ29ycmVjdGlvblBhbmVsU29vbihyZWFzb25Gb3JEaXNtaXNzaW5nKTsKLX0KLQot
dm9pZCBTcGVsbGluZ0NvcnJlY3Rpb25Db250cm9sbGVyOjphcHBseUNvcnJlY3Rpb25QYW5lbElu
Zm8oY29uc3QgVmVjdG9yPERvY3VtZW50TWFya2VyOjpNYXJrZXJUeXBlPiYgbWFya2VyVHlwZXNU
b0FkZCkKLXsKLSAgICBpZiAoIW1fY29ycmVjdGlvblBhbmVsSW5mby5yYW5nZVRvQmVSZXBsYWNl
ZCkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgRXhjZXB0aW9uQ29kZSBlYyA9IDA7Ci0gICAgUmVm
UHRyPFJhbmdlPiBwYXJhZ3JhcGhSYW5nZUNvbnRhaW5pbmdDb3JyZWN0aW9uID0gbV9jb3JyZWN0
aW9uUGFuZWxJbmZvLnJhbmdlVG9CZVJlcGxhY2VkLT5jbG9uZVJhbmdlKGVjKTsKLSAgICBpZiAo
ZWMpCi0gICAgICAgIHJldHVybjsKLQotICAgIHNldFN0YXJ0KHBhcmFncmFwaFJhbmdlQ29udGFp
bmluZ0NvcnJlY3Rpb24uZ2V0KCksIHN0YXJ0T2ZQYXJhZ3JhcGgobV9jb3JyZWN0aW9uUGFuZWxJ
bmZvLnJhbmdlVG9CZVJlcGxhY2VkLT5zdGFydFBvc2l0aW9uKCkpKTsKLSAgICBzZXRFbmQocGFy
YWdyYXBoUmFuZ2VDb250YWluaW5nQ29ycmVjdGlvbi5nZXQoKSwgZW5kT2ZQYXJhZ3JhcGgobV9j
b3JyZWN0aW9uUGFuZWxJbmZvLnJhbmdlVG9CZVJlcGxhY2VkLT5lbmRQb3NpdGlvbigpKSk7Ci0K
LSAgICAvLyBBZnRlciB3ZSByZXBsYWNlIHRoZSB3b3JkIGF0IHJhbmdlIHJhbmdlVG9CZVJlcGxh
Y2VkLCB3ZSBuZWVkIHRvIGFkZCBtYXJrZXJzIHRvIHRoYXQgcmFuZ2UuCi0gICAgLy8gSG93ZXZl
ciwgb25jZSB0aGUgcmVwbGFjZW1lbnQgdG9vayBwbGFjZSwgdGhlIHZhbHVlIG9mIHJhbmdlVG9C
ZVJlcGxhY2VkIGlzIG5vdCB2YWxpZCBhbnltb3JlLgotICAgIC8vIFNvIGJlZm9yZSB3ZSBjYXJy
eSBvdXQgdGhlIHJlcGxhY2VtZW50LCB3ZSBuZWVkIHRvIHN0b3JlIHRoZSBzdGFydCBwb3NpdGlv
biBvZiByYW5nZVRvQmVSZXBsYWNlZAotICAgIC8vIHJlbGF0aXZlIHRvIHRoZSBzdGFydCBwb3Np
dGlvbiBvZiB0aGUgY29udGFpbmluZyBwYXJhZ3JhcGguIFdlIHVzZSBjb3JyZWN0aW9uU3RhcnRP
ZmZzZXRJblBhcmFncmFwaAotICAgIC8vIHRvIHN0b3JlIHRoaXMgdmFsdWUuIEluIG9yZGVyIHRv
IG9idGFpbiB0aGlzIG9mZnNldCwgd2UgbmVlZCB0byBmaXJzdCBjcmVhdGUgYSByYW5nZQotICAg
IC8vIHdoaWNoIHNwYW5zIGZyb20gdGhlIHN0YXJ0IG9mIHBhcmFncmFwaCB0byB0aGUgc3RhcnQg
cG9zaXRpb24gb2YgcmFuZ2VUb0JlUmVwbGFjZWQuCi0gICAgUmVmUHRyPFJhbmdlPiBjb3JyZWN0
aW9uU3RhcnRPZmZzZXRJblBhcmFncmFwaEFzUmFuZ2UgPSBSYW5nZTo6Y3JlYXRlKHBhcmFncmFw
aFJhbmdlQ29udGFpbmluZ0NvcnJlY3Rpb24tPnN0YXJ0Q29udGFpbmVyKGVjKS0+ZG9jdW1lbnQo
KSwgcGFyYWdyYXBoUmFuZ2VDb250YWluaW5nQ29ycmVjdGlvbi0+c3RhcnRQb3NpdGlvbigpLCBw
YXJhZ3JhcGhSYW5nZUNvbnRhaW5pbmdDb3JyZWN0aW9uLT5zdGFydFBvc2l0aW9uKCkpOwotICAg
IGlmIChlYykKLSAgICAgICAgcmV0dXJuOwotCi0gICAgUG9zaXRpb24gc3RhcnRQb3NpdGlvbk9m
UmFuZ2VUb0JlUmVwbGFjZWQgPSBtX2NvcnJlY3Rpb25QYW5lbEluZm8ucmFuZ2VUb0JlUmVwbGFj
ZWQtPnN0YXJ0UG9zaXRpb24oKTsKLSAgICBjb3JyZWN0aW9uU3RhcnRPZmZzZXRJblBhcmFncmFw
aEFzUmFuZ2UtPnNldEVuZChzdGFydFBvc2l0aW9uT2ZSYW5nZVRvQmVSZXBsYWNlZC5jb250YWlu
ZXJOb2RlKCksIHN0YXJ0UG9zaXRpb25PZlJhbmdlVG9CZVJlcGxhY2VkLmNvbXB1dGVPZmZzZXRJ
bkNvbnRhaW5lck5vZGUoKSwgZWMpOwotICAgIGlmIChlYykKLSAgICAgICAgcmV0dXJuOwotCi0g
ICAgLy8gVGFrZSBub3RlIG9mIHRoZSBsb2NhdGlvbiBvZiBhdXRvY29ycmVjdGlvbiBzbyB0aGF0
IHdlIGNhbiBhZGQgbWFya2VyIGFmdGVyIHRoZSByZXBsYWNlbWVudCB0b29rIHBsYWNlLgotICAg
IGludCBjb3JyZWN0aW9uU3RhcnRPZmZzZXRJblBhcmFncmFwaCA9IFRleHRJdGVyYXRvcjo6cmFu
Z2VMZW5ndGgoY29ycmVjdGlvblN0YXJ0T2Zmc2V0SW5QYXJhZ3JhcGhBc1JhbmdlLmdldCgpKTsK
LQotICAgIC8vIENsb25lIHRoZSByYW5nZSwgc2luY2UgdGhlIGNhbGxlciBvZiB0aGlzIG1ldGhv
ZCBtYXkgd2FudCB0byBrZWVwIHRoZSBvcmlnaW5hbCByYW5nZSBhcm91bmQuCi0gICAgUmVmUHRy
PFJhbmdlPiByYW5nZVRvQmVSZXBsYWNlZCA9IG1fY29ycmVjdGlvblBhbmVsSW5mby5yYW5nZVRv
QmVSZXBsYWNlZC0+Y2xvbmVSYW5nZShlYyk7Ci0gICAgYXBwbHlDb21tYW5kKFNwZWxsaW5nQ29y
cmVjdGlvbkNvbW1hbmQ6OmNyZWF0ZShyYW5nZVRvQmVSZXBsYWNlZCwgbV9jb3JyZWN0aW9uUGFu
ZWxJbmZvLnJlcGxhY2VtZW50U3RyaW5nKSk7Ci0gICAgc2V0RW5kKHBhcmFncmFwaFJhbmdlQ29u
dGFpbmluZ0NvcnJlY3Rpb24uZ2V0KCksIG1fZnJhbWUtPnNlbGVjdGlvbigpLT5zZWxlY3Rpb24o
KS5zdGFydCgpKTsKLSAgICBSZWZQdHI8UmFuZ2U+IHJlcGxhY2VtZW50UmFuZ2UgPSBUZXh0SXRl
cmF0b3I6OnN1YnJhbmdlKHBhcmFncmFwaFJhbmdlQ29udGFpbmluZ0NvcnJlY3Rpb24uZ2V0KCks
IGNvcnJlY3Rpb25TdGFydE9mZnNldEluUGFyYWdyYXBoLCAgbV9jb3JyZWN0aW9uUGFuZWxJbmZv
LnJlcGxhY2VtZW50U3RyaW5nLmxlbmd0aCgpKTsKLSAgICBTdHJpbmcgbmV3VGV4dCA9IHBsYWlu
VGV4dChyZXBsYWNlbWVudFJhbmdlLmdldCgpKTsKLQotICAgIC8vIENoZWNrIHRvIHNlZSBpZiBy
ZXBsYWNlbWVudCBzdWNjZWVkZWQuCi0gICAgaWYgKG5ld1RleHQgIT0gbV9jb3JyZWN0aW9uUGFu
ZWxJbmZvLnJlcGxhY2VtZW50U3RyaW5nKQotICAgICAgICByZXR1cm47Ci0KLSAgICBEb2N1bWVu
dE1hcmtlckNvbnRyb2xsZXIqIG1hcmtlcnMgPSByZXBsYWNlbWVudFJhbmdlLT5zdGFydENvbnRh
aW5lcigpLT5kb2N1bWVudCgpLT5tYXJrZXJzKCk7Ci0gICAgc2l6ZV90IHNpemUgPSBtYXJrZXJU
eXBlc1RvQWRkLnNpemUoKTsKLSAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IHNpemU7ICsraSkg
ewotICAgICAgICBEb2N1bWVudE1hcmtlcjo6TWFya2VyVHlwZSBtYXJrZXJUeXBlID0gbWFya2Vy
VHlwZXNUb0FkZFtpXTsKLSAgICAgICAgU3RyaW5nIGRlc2NyaXB0aW9uOwotICAgICAgICBpZiAo
bV9jb3JyZWN0aW9uUGFuZWxJbmZvLnBhbmVsVHlwZSAhPSBDb3JyZWN0aW9uUGFuZWxJbmZvOjpQ
YW5lbFR5cGVSZXZlcnNpb24gJiYgKG1hcmtlclR5cGUgPT0gRG9jdW1lbnRNYXJrZXI6OlJlcGxh
Y2VtZW50IHx8IG1hcmtlclR5cGUgPT0gRG9jdW1lbnRNYXJrZXI6OkF1dG9jb3JyZWN0ZWQpKQot
ICAgICAgICAgICAgZGVzY3JpcHRpb24gPSBtX2NvcnJlY3Rpb25QYW5lbEluZm8ucmVwbGFjZWRT
dHJpbmc7Ci0gICAgICAgIG1hcmtlcnMtPmFkZE1hcmtlcihyZXBsYWNlbWVudFJhbmdlLmdldCgp
LCBtYXJrZXJUeXBlLCBkZXNjcmlwdGlvbik7Ci0gICAgfQotfQotCi1ib29sIFNwZWxsaW5nQ29y
cmVjdGlvbkNvbnRyb2xsZXI6OmFwcGx5QXV0b2NvcnJlY3Rpb25CZWZvcmVUeXBpbmdJZkFwcHJv
cHJpYXRlKCkKLXsKLSAgICBpZiAoIW1fY29ycmVjdGlvblBhbmVsSW5mby5yYW5nZVRvQmVSZXBs
YWNlZCB8fCAhbV9jb3JyZWN0aW9uUGFuZWxJbmZvLmlzQWN0aXZlKQotICAgICAgICByZXR1cm4g
ZmFsc2U7Ci0KLSAgICBpZiAobV9jb3JyZWN0aW9uUGFuZWxJbmZvLnBhbmVsVHlwZSAhPSBDb3Jy
ZWN0aW9uUGFuZWxJbmZvOjpQYW5lbFR5cGVDb3JyZWN0aW9uKQotICAgICAgICByZXR1cm4gZmFs
c2U7Ci0KLSAgICBQb3NpdGlvbiBjYXJldFBvc2l0aW9uID0gbV9mcmFtZS0+c2VsZWN0aW9uKCkt
PnNlbGVjdGlvbigpLnN0YXJ0KCk7Ci0KLSAgICBpZiAobV9jb3JyZWN0aW9uUGFuZWxJbmZvLnJh
bmdlVG9CZVJlcGxhY2VkLT5lbmRQb3NpdGlvbigpID09IGNhcmV0UG9zaXRpb24pIHsKLSAgICAg
ICAgaGFuZGxlQ29ycmVjdGlvblBhbmVsUmVzdWx0KGRpc21pc3NTb29uKFJlYXNvbkZvckRpc21p
c3NpbmdDb3JyZWN0aW9uUGFuZWxBY2NlcHRlZCkpOwotICAgICAgICByZXR1cm4gdHJ1ZTsKLSAg
ICB9IAotICAgIAotICAgIC8vIFBlbmRpbmcgY29ycmVjdGlvbiBzaG91bGQgYWx3YXlzIGJlIHdo
ZXJlIGNhcmV0IGlzLiBCdXQgaW4gY2FzZSB0aGlzIGlzIG5vdCBhbHdheXMgdHJ1ZSwgd2Ugc3Rp
bGwgd2FudCB0byBkaXNtaXNzIHRoZSBwYW5lbCB3aXRob3V0IGFjY2VwdGluZyB0aGUgY29ycmVj
dGlvbi4KLSAgICBBU1NFUlQobV9jb3JyZWN0aW9uUGFuZWxJbmZvLnJhbmdlVG9CZVJlcGxhY2Vk
LT5lbmRQb3NpdGlvbigpID09IGNhcmV0UG9zaXRpb24pOwotICAgIGRpc21pc3MoUmVhc29uRm9y
RGlzbWlzc2luZ0NvcnJlY3Rpb25QYW5lbElnbm9yZWQpOwotICAgIHJldHVybiBmYWxzZTsKLX0K
LQotdm9pZCBTcGVsbGluZ0NvcnJlY3Rpb25Db250cm9sbGVyOjpyZXNwb25kVG9VbmFwcGxpZWRT
cGVsbENvcnJlY3Rpb24oY29uc3QgVmlzaWJsZVNlbGVjdGlvbiYgc2VsZWN0aW9uT2ZDb3JyZWN0
ZWQsIGNvbnN0IFN0cmluZyYgY29ycmVjdGVkLCBjb25zdCBTdHJpbmcmIGNvcnJlY3Rpb24pCi17
Ci0gICAgY2xpZW50KCktPnJlY29yZEF1dG9jb3JyZWN0aW9uUmVzcG9uc2UoRWRpdG9yQ2xpZW50
OjpBdXRvY29ycmVjdGlvblJldmVydGVkLCBjb3JyZWN0ZWQsIGNvcnJlY3Rpb24pOwotICAgIG1f
ZnJhbWUtPmRvY3VtZW50KCktPnVwZGF0ZUxheW91dCgpOwotICAgIG1fZnJhbWUtPnNlbGVjdGlv
bigpLT5zZXRTZWxlY3Rpb24oc2VsZWN0aW9uT2ZDb3JyZWN0ZWQsIEZyYW1lU2VsZWN0aW9uOjpD
bG9zZVR5cGluZyB8IEZyYW1lU2VsZWN0aW9uOjpDbGVhclR5cGluZ1N0eWxlIHwgRnJhbWVTZWxl
Y3Rpb246OlNwZWxsQ29ycmVjdGlvblRyaWdnZXJlZCk7Ci0gICAgUmVmUHRyPFJhbmdlPiByYW5n
ZSA9IFJhbmdlOjpjcmVhdGUobV9mcmFtZS0+ZG9jdW1lbnQoKSwgbV9mcmFtZS0+c2VsZWN0aW9u
KCktPnNlbGVjdGlvbigpLnN0YXJ0KCksIG1fZnJhbWUtPnNlbGVjdGlvbigpLT5zZWxlY3Rpb24o
KS5lbmQoKSk7Ci0KLSAgICBEb2N1bWVudE1hcmtlckNvbnRyb2xsZXIqIG1hcmtlcnMgPSBtX2Zy
YW1lLT5kb2N1bWVudCgpLT5tYXJrZXJzKCk7Ci0gICAgbWFya2Vycy0+cmVtb3ZlTWFya2Vycyhy
YW5nZS5nZXQoKSwgRG9jdW1lbnRNYXJrZXI6OlNwZWxsaW5nIHwgRG9jdW1lbnRNYXJrZXI6OkF1
dG9jb3JyZWN0ZWQsIERvY3VtZW50TWFya2VyQ29udHJvbGxlcjo6UmVtb3ZlUGFydGlhbGx5T3Zl
cmxhcHBpbmdNYXJrZXIpOwotICAgIG1hcmtlcnMtPmFkZE1hcmtlcihyYW5nZS5nZXQoKSwgRG9j
dW1lbnRNYXJrZXI6OlJlcGxhY2VtZW50KTsKLSAgICBtYXJrZXJzLT5hZGRNYXJrZXIocmFuZ2Uu
Z2V0KCksIERvY3VtZW50TWFya2VyOjpTcGVsbENoZWNraW5nRXhlbXB0aW9uKTsKLX0KLQotdm9p
ZCBTcGVsbGluZ0NvcnJlY3Rpb25Db250cm9sbGVyOjpjb3JyZWN0aW9uUGFuZWxUaW1lckZpcmVk
KFRpbWVyPFNwZWxsaW5nQ29ycmVjdGlvbkNvbnRyb2xsZXI+KikKLXsKLSAgICBtX2NvcnJlY3Rp
b25QYW5lbElzRGlzbWlzc2VkQnlFZGl0b3IgPSBmYWxzZTsKLSAgICBzd2l0Y2ggKG1fY29ycmVj
dGlvblBhbmVsSW5mby5wYW5lbFR5cGUpIHsKLSAgICBjYXNlIENvcnJlY3Rpb25QYW5lbEluZm86
OlBhbmVsVHlwZUNvcnJlY3Rpb246IHsKLSAgICAgICAgVmlzaWJsZVNlbGVjdGlvbiBzZWxlY3Rp
b24obV9mcmFtZS0+c2VsZWN0aW9uKCktPnNlbGVjdGlvbigpKTsKLSAgICAgICAgVmlzaWJsZVBv
c2l0aW9uIHN0YXJ0KHNlbGVjdGlvbi5zdGFydCgpLCBzZWxlY3Rpb24uYWZmaW5pdHkoKSk7Ci0g
ICAgICAgIFZpc2libGVQb3NpdGlvbiBwID0gc3RhcnRPZldvcmQoc3RhcnQsIExlZnRXb3JkSWZP
bkJvdW5kYXJ5KTsKLSAgICAgICAgVmlzaWJsZVNlbGVjdGlvbiBhZGphY2VudFdvcmRzID0gVmlz
aWJsZVNlbGVjdGlvbihwLCBzdGFydCk7Ci0gICAgICAgIG1fZnJhbWUtPmVkaXRvcigpLT5tYXJr
QWxsTWlzc3BlbGxpbmdzQW5kQmFkR3JhbW1hckluUmFuZ2VzKFRleHRDaGVja2luZ1R5cGVTcGVs
bGluZyB8IFRleHRDaGVja2luZ1R5cGVTaG93Q29ycmVjdGlvblBhbmVsLCBhZGphY2VudFdvcmRz
LnRvTm9ybWFsaXplZFJhbmdlKCkuZ2V0KCksIDApOwotICAgIH0KLSAgICAgICAgYnJlYWs7Ci0g
ICAgY2FzZSBDb3JyZWN0aW9uUGFuZWxJbmZvOjpQYW5lbFR5cGVSZXZlcnNpb246IHsKLSAgICAg
ICAgaWYgKCFtX2NvcnJlY3Rpb25QYW5lbEluZm8ucmFuZ2VUb0JlUmVwbGFjZWQpCi0gICAgICAg
ICAgICBicmVhazsKLSAgICAgICAgbV9jb3JyZWN0aW9uUGFuZWxJbmZvLmlzQWN0aXZlID0gdHJ1
ZTsKLSAgICAgICAgbV9jb3JyZWN0aW9uUGFuZWxJbmZvLnJlcGxhY2VkU3RyaW5nID0gcGxhaW5U
ZXh0KG1fY29ycmVjdGlvblBhbmVsSW5mby5yYW5nZVRvQmVSZXBsYWNlZC5nZXQoKSk7Ci0gICAg
ICAgIEZsb2F0UmVjdCBib3VuZGluZ0JveCA9IHJvb3RWaWV3UmVjdEZvclJhbmdlKG1fY29ycmVj
dGlvblBhbmVsSW5mby5yYW5nZVRvQmVSZXBsYWNlZC5nZXQoKSk7Ci0gICAgICAgIGlmICghYm91
bmRpbmdCb3guaXNFbXB0eSgpKQotICAgICAgICAgICAgY2xpZW50KCktPnNob3dDb3JyZWN0aW9u
UGFuZWwobV9jb3JyZWN0aW9uUGFuZWxJbmZvLnBhbmVsVHlwZSwgYm91bmRpbmdCb3gsIG1fY29y
cmVjdGlvblBhbmVsSW5mby5yZXBsYWNlZFN0cmluZywgbV9jb3JyZWN0aW9uUGFuZWxJbmZvLnJl
cGxhY2VtZW50U3RyaW5nLCBWZWN0b3I8U3RyaW5nPigpKTsKLSAgICB9Ci0gICAgICAgIGJyZWFr
OwotICAgIGNhc2UgQ29ycmVjdGlvblBhbmVsSW5mbzo6UGFuZWxUeXBlU3BlbGxpbmdTdWdnZXN0
aW9uczogewotICAgICAgICBpZiAoIW1fY29ycmVjdGlvblBhbmVsSW5mby5yYW5nZVRvQmVSZXBs
YWNlZCB8fCBwbGFpblRleHQobV9jb3JyZWN0aW9uUGFuZWxJbmZvLnJhbmdlVG9CZVJlcGxhY2Vk
LmdldCgpKSAhPSBtX2NvcnJlY3Rpb25QYW5lbEluZm8ucmVwbGFjZWRTdHJpbmcpCi0gICAgICAg
ICAgICBicmVhazsKLSAgICAgICAgU3RyaW5nIHBhcmFncmFwaFRleHQgPSBwbGFpblRleHQoVGV4
dENoZWNraW5nUGFyYWdyYXBoKG1fY29ycmVjdGlvblBhbmVsSW5mby5yYW5nZVRvQmVSZXBsYWNl
ZCkucGFyYWdyYXBoUmFuZ2UoKS5nZXQoKSk7Ci0gICAgICAgIFZlY3RvcjxTdHJpbmc+IHN1Z2dl
c3Rpb25zOwotICAgICAgICB0ZXh0Q2hlY2tlcigpLT5nZXRHdWVzc2VzRm9yV29yZChtX2NvcnJl
Y3Rpb25QYW5lbEluZm8ucmVwbGFjZWRTdHJpbmcsIHBhcmFncmFwaFRleHQsIHN1Z2dlc3Rpb25z
KTsKLSAgICAgICAgaWYgKHN1Z2dlc3Rpb25zLmlzRW1wdHkoKSkgewotICAgICAgICAgICAgbV9j
b3JyZWN0aW9uUGFuZWxJbmZvLnJhbmdlVG9CZVJlcGxhY2VkLmNsZWFyKCk7Ci0gICAgICAgICAg
ICBicmVhazsKLSAgICAgICAgfQotICAgICAgICBTdHJpbmcgdG9wU3VnZ2VzdGlvbiA9IHN1Z2dl
c3Rpb25zLmZpcnN0KCk7Ci0gICAgICAgIHN1Z2dlc3Rpb25zLnJlbW92ZSgwKTsKLSAgICAgICAg
bV9jb3JyZWN0aW9uUGFuZWxJbmZvLmlzQWN0aXZlID0gdHJ1ZTsKLSAgICAgICAgRmxvYXRSZWN0
IGJvdW5kaW5nQm94ID0gcm9vdFZpZXdSZWN0Rm9yUmFuZ2UobV9jb3JyZWN0aW9uUGFuZWxJbmZv
LnJhbmdlVG9CZVJlcGxhY2VkLmdldCgpKTsKLSAgICAgICAgaWYgKCFib3VuZGluZ0JveC5pc0Vt
cHR5KCkpCi0gICAgICAgICAgICBjbGllbnQoKS0+c2hvd0NvcnJlY3Rpb25QYW5lbChtX2NvcnJl
Y3Rpb25QYW5lbEluZm8ucGFuZWxUeXBlLCBib3VuZGluZ0JveCwgbV9jb3JyZWN0aW9uUGFuZWxJ
bmZvLnJlcGxhY2VkU3RyaW5nLCB0b3BTdWdnZXN0aW9uLCBzdWdnZXN0aW9ucyk7Ci0gICAgfQot
ICAgICAgICBicmVhazsKLSAgICB9Ci19Ci0KLXZvaWQgU3BlbGxpbmdDb3JyZWN0aW9uQ29udHJv
bGxlcjo6aGFuZGxlQ29ycmVjdGlvblBhbmVsUmVzdWx0KGNvbnN0IFN0cmluZyYgY29ycmVjdGlv
bikKLXsKLSAgICBSYW5nZSogcmVwbGFjZWRSYW5nZSA9IG1fY29ycmVjdGlvblBhbmVsSW5mby5y
YW5nZVRvQmVSZXBsYWNlZC5nZXQoKTsKLSAgICBpZiAoIXJlcGxhY2VkUmFuZ2UgfHwgbV9mcmFt
ZS0+ZG9jdW1lbnQoKSAhPSByZXBsYWNlZFJhbmdlLT5vd25lckRvY3VtZW50KCkpCi0gICAgICAg
IHJldHVybjsKLQotICAgIFN0cmluZyBjdXJyZW50V29yZCA9IHBsYWluVGV4dChtX2NvcnJlY3Rp
b25QYW5lbEluZm8ucmFuZ2VUb0JlUmVwbGFjZWQuZ2V0KCkpOwotICAgIC8vIENoZWNrIHRvIHNl
ZSBpZiB0aGUgd29yZCB3ZSBhcmUgYWJvdXQgdG8gY29ycmVjdCBoYXMgYmVlbiBjaGFuZ2VkIGJl
dHdlZW4gdGltZXIgZmlyaW5nIGFuZCBjYWxsYmFjayBiZWluZyB0cmlnZ2VyZWQuCi0gICAgaWYg
KGN1cnJlbnRXb3JkICE9IG1fY29ycmVjdGlvblBhbmVsSW5mby5yZXBsYWNlZFN0cmluZykKLSAg
ICAgICAgcmV0dXJuOwotCi0gICAgbV9jb3JyZWN0aW9uUGFuZWxJbmZvLmlzQWN0aXZlID0gZmFs
c2U7Ci0KLSAgICBzd2l0Y2ggKG1fY29ycmVjdGlvblBhbmVsSW5mby5wYW5lbFR5cGUpIHsKLSAg
ICBjYXNlIENvcnJlY3Rpb25QYW5lbEluZm86OlBhbmVsVHlwZUNvcnJlY3Rpb246Ci0gICAgICAg
IGlmIChjb3JyZWN0aW9uLmxlbmd0aCgpKSB7Ci0gICAgICAgICAgICBtX2NvcnJlY3Rpb25QYW5l
bEluZm8ucmVwbGFjZW1lbnRTdHJpbmcgPSBjb3JyZWN0aW9uOwotICAgICAgICAgICAgYXBwbHlD
b3JyZWN0aW9uUGFuZWxJbmZvKG1hcmtlclR5cGVzRm9yQXV0b2NvcnJlY3Rpb24oKSk7Ci0gICAg
ICAgIH0gZWxzZSBpZiAoIW1fY29ycmVjdGlvblBhbmVsSXNEaXNtaXNzZWRCeUVkaXRvcikKLSAg
ICAgICAgICAgIHJlcGxhY2VkUmFuZ2UtPnN0YXJ0Q29udGFpbmVyKCktPmRvY3VtZW50KCktPm1h
cmtlcnMoKS0+YWRkTWFya2VyKHJlcGxhY2VkUmFuZ2UsIERvY3VtZW50TWFya2VyOjpSZWplY3Rl
ZENvcnJlY3Rpb24sIG1fY29ycmVjdGlvblBhbmVsSW5mby5yZXBsYWNlZFN0cmluZyk7Ci0gICAg
ICAgIGJyZWFrOwotICAgIGNhc2UgQ29ycmVjdGlvblBhbmVsSW5mbzo6UGFuZWxUeXBlUmV2ZXJz
aW9uOgotICAgIGNhc2UgQ29ycmVjdGlvblBhbmVsSW5mbzo6UGFuZWxUeXBlU3BlbGxpbmdTdWdn
ZXN0aW9uczoKLSAgICAgICAgaWYgKGNvcnJlY3Rpb24ubGVuZ3RoKCkpIHsKLSAgICAgICAgICAg
IG1fY29ycmVjdGlvblBhbmVsSW5mby5yZXBsYWNlbWVudFN0cmluZyA9IGNvcnJlY3Rpb247Ci0g
ICAgICAgICAgICBhcHBseUNvcnJlY3Rpb25QYW5lbEluZm8obWFya2VyVHlwZXNGb3JSZXBsYWNl
bWVudCgpKTsKLSAgICAgICAgfQotICAgICAgICBicmVhazsKLSAgICB9Ci0KLSAgICBtX2NvcnJl
Y3Rpb25QYW5lbEluZm8ucmFuZ2VUb0JlUmVwbGFjZWQuY2xlYXIoKTsKLX0KLQotYm9vbCBTcGVs
bGluZ0NvcnJlY3Rpb25Db250cm9sbGVyOjppc0F1dG9tYXRpY1NwZWxsaW5nQ29ycmVjdGlvbkVu
YWJsZWQoKQotewotICAgIHJldHVybiBjbGllbnQoKSAmJiBjbGllbnQoKS0+aXNBdXRvbWF0aWNT
cGVsbGluZ0NvcnJlY3Rpb25FbmFibGVkKCk7Ci19Ci0KLUZsb2F0UmVjdCBTcGVsbGluZ0NvcnJl
Y3Rpb25Db250cm9sbGVyOjpyb290Vmlld1JlY3RGb3JSYW5nZShjb25zdCBSYW5nZSogcmFuZ2Up
IGNvbnN0Ci17Ci0gICAgRnJhbWVWaWV3KiB2aWV3ID0gbV9mcmFtZS0+dmlldygpOwotICAgIGlm
ICghdmlldykKLSAgICAgICAgcmV0dXJuIEZsb2F0UmVjdCgpOwotICAgIFZlY3RvcjxGbG9hdFF1
YWQ+IHRleHRRdWFkczsKLSAgICByYW5nZS0+dGV4dFF1YWRzKHRleHRRdWFkcyk7Ci0gICAgRmxv
YXRSZWN0IGJvdW5kaW5nUmVjdDsKLSAgICBzaXplX3Qgc2l6ZSA9IHRleHRRdWFkcy5zaXplKCk7
Ci0gICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBzaXplOyArK2kpCi0gICAgICAgIGJvdW5kaW5n
UmVjdC51bml0ZSh0ZXh0UXVhZHNbaV0uYm91bmRpbmdCb3goKSk7Ci0gICAgcmV0dXJuIHZpZXct
PmNvbnRlbnRzVG9Sb290VmlldyhJbnRSZWN0KGJvdW5kaW5nUmVjdCkpOwotfSAgICAgICAgCi0K
LXZvaWQgU3BlbGxpbmdDb3JyZWN0aW9uQ29udHJvbGxlcjo6cmVzcG9uZFRvQ2hhbmdlZFNlbGVj
dGlvbihjb25zdCBWaXNpYmxlU2VsZWN0aW9uJiBvbGRTZWxlY3Rpb24pCi17Ci0gICAgVmlzaWJs
ZVNlbGVjdGlvbiBjdXJyZW50U2VsZWN0aW9uKG1fZnJhbWUtPnNlbGVjdGlvbigpLT5zZWxlY3Rp
b24oKSk7Ci0gICAgLy8gV2hlbiB1c2VyIG1vdmVzIGNhcmV0IHRvIHRoZSBlbmQgb2YgYXV0b2Nv
cnJlY3RlZCB3b3JkIGFuZCBwYXVzZXMsIHdlIHNob3cgdGhlIHBhbmVsCi0gICAgLy8gY29udGFp
bmluZyB0aGUgb3JpZ2luYWwgcHJlLWNvcnJlY3Rpb24gd29yZCBzbyB0aGF0IHVzZXIgY2FuIHF1
aWNrbHkgcmV2ZXJ0IHRoZQotICAgIC8vIHVuZGVzaXJlZCBhdXRvY29ycmVjdGlvbi4gSGVyZSwg
d2Ugc3RhcnQgY29ycmVjdGlvbiBwYW5lbCB0aW1lciBvbmNlIHdlIGNvbmZpcm0gdGhhdAotICAg
IC8vIHRoZSBuZXcgY2FyZXQgcG9zaXRpb24gaXMgYXQgdGhlIGVuZCBvZiBhIHdvcmQuCi0gICAg
aWYgKCFjdXJyZW50U2VsZWN0aW9uLmlzQ2FyZXQoKSB8fCBjdXJyZW50U2VsZWN0aW9uID09IG9s
ZFNlbGVjdGlvbikKLSAgICAgICAgcmV0dXJuOwotCi0gICAgVmlzaWJsZVBvc2l0aW9uIHNlbGVj
dGlvblBvc2l0aW9uID0gY3VycmVudFNlbGVjdGlvbi5zdGFydCgpOwotICAgIAotICAgIC8vIENy
ZWF0aW5nIGEgVmlzaWJsZSBwb3NpdGlvbiB0cmlnZ2VycyBhIGxheW91dCBhbmQgdGhlcmUgaXMg
bm8KLSAgICAvLyBndWFyYW50ZWUgdGhhdCB0aGUgc2VsZWN0aW9uIGlzIHN0aWxsIHZhbGlkLgot
ICAgIGlmIChzZWxlY3Rpb25Qb3NpdGlvbi5pc051bGwoKSkKLSAgICAgICAgcmV0dXJuOwotICAg
IAotICAgIFZpc2libGVQb3NpdGlvbiBlbmRQb3NpdGlvbk9mV29yZCA9IGVuZE9mV29yZChzZWxl
Y3Rpb25Qb3NpdGlvbiwgTGVmdFdvcmRJZk9uQm91bmRhcnkpOwotICAgIGlmIChzZWxlY3Rpb25Q
b3NpdGlvbiAhPSBlbmRQb3NpdGlvbk9mV29yZCkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgUG9z
aXRpb24gcG9zaXRpb24gPSBlbmRQb3NpdGlvbk9mV29yZC5kZWVwRXF1aXZhbGVudCgpOwotICAg
IGlmIChwb3NpdGlvbi5hbmNob3JUeXBlKCkgIT0gUG9zaXRpb246OlBvc2l0aW9uSXNPZmZzZXRJ
bkFuY2hvcikKLSAgICAgICAgcmV0dXJuOwotCi0gICAgTm9kZSogbm9kZSA9IHBvc2l0aW9uLmNv
bnRhaW5lck5vZGUoKTsKLSAgICBpbnQgZW5kT2Zmc2V0ID0gcG9zaXRpb24ub2Zmc2V0SW5Db250
YWluZXJOb2RlKCk7Ci0gICAgVmVjdG9yPERvY3VtZW50TWFya2VyKj4gbWFya2VycyA9IG5vZGUt
PmRvY3VtZW50KCktPm1hcmtlcnMoKS0+bWFya2Vyc0Zvcihub2RlKTsKLSAgICBzaXplX3QgbWFy
a2VyQ291bnQgPSBtYXJrZXJzLnNpemUoKTsKLSAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IG1h
cmtlckNvdW50OyArK2kpIHsKLSAgICAgICAgY29uc3QgRG9jdW1lbnRNYXJrZXIqIG1hcmtlciA9
IG1hcmtlcnNbaV07Ci0gICAgICAgIGlmICghc2hvdWxkU3RhcnRUaW1lckZvcihtYXJrZXIsIGVu
ZE9mZnNldCkpCi0gICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgUmVmUHRyPFJhbmdlPiB3
b3JkUmFuZ2UgPSBSYW5nZTo6Y3JlYXRlKG1fZnJhbWUtPmRvY3VtZW50KCksIG5vZGUsIG1hcmtl
ci0+c3RhcnRPZmZzZXQoKSwgbm9kZSwgbWFya2VyLT5lbmRPZmZzZXQoKSk7Ci0gICAgICAgIFN0
cmluZyBjdXJyZW50V29yZCA9IHBsYWluVGV4dCh3b3JkUmFuZ2UuZ2V0KCkpOwotICAgICAgICBp
ZiAoIWN1cnJlbnRXb3JkLmxlbmd0aCgpKQotICAgICAgICAgICAgY29udGludWU7Ci0KLSAgICAg
ICAgbV9jb3JyZWN0aW9uUGFuZWxJbmZvLnJhbmdlVG9CZVJlcGxhY2VkID0gd29yZFJhbmdlOwot
ICAgICAgICBtX2NvcnJlY3Rpb25QYW5lbEluZm8ucmVwbGFjZWRTdHJpbmcgPSBjdXJyZW50V29y
ZDsKLSAgICAgICAgaWYgKG1hcmtlci0+dHlwZSgpID09IERvY3VtZW50TWFya2VyOjpTcGVsbGlu
ZykKLSAgICAgICAgICAgIHN0YXJ0Q29ycmVjdGlvblBhbmVsVGltZXIoQ29ycmVjdGlvblBhbmVs
SW5mbzo6UGFuZWxUeXBlU3BlbGxpbmdTdWdnZXN0aW9ucyk7Ci0gICAgICAgIGVsc2UgewotICAg
ICAgICAgICAgbV9jb3JyZWN0aW9uUGFuZWxJbmZvLnJlcGxhY2VtZW50U3RyaW5nID0gbWFya2Vy
LT5kZXNjcmlwdGlvbigpOwotICAgICAgICAgICAgc3RhcnRDb3JyZWN0aW9uUGFuZWxUaW1lcihD
b3JyZWN0aW9uUGFuZWxJbmZvOjpQYW5lbFR5cGVSZXZlcnNpb24pOwotICAgICAgICB9Ci0KLSAg
ICAgICAgYnJlYWs7Ci0gICAgfQotfQotCi12b2lkIFNwZWxsaW5nQ29ycmVjdGlvbkNvbnRyb2xs
ZXI6OnJlc3BvbmRUb0FwcGxpZWRFZGl0aW5nKENvbXBvc2l0ZUVkaXRDb21tYW5kKiBjb21tYW5k
KQotewotICAgIGlmIChjb21tYW5kLT5pc1RvcExldmVsQ29tbWFuZCgpICYmICFjb21tYW5kLT5z
aG91bGRSZXRhaW5BdXRvY29ycmVjdGlvbkluZGljYXRvcigpKQotICAgICAgICBtX2ZyYW1lLT5k
b2N1bWVudCgpLT5tYXJrZXJzKCktPnJlbW92ZU1hcmtlcnMoRG9jdW1lbnRNYXJrZXI6OkNvcnJl
Y3Rpb25JbmRpY2F0b3IpOwotCi0gICAgbWFya1ByZWNlZGluZ1doaXRlc3BhY2VGb3JEZWxldGVk
QXV0b2NvcnJlY3Rpb25BZnRlckNvbW1hbmQoY29tbWFuZCk7Ci0gICAgbV9vcmlnaW5hbFN0cmlu
Z0Zvckxhc3REZWxldGVkQXV0b2NvcnJlY3Rpb24gPSBTdHJpbmcoKTsKLX0KLQotdm9pZCBTcGVs
bGluZ0NvcnJlY3Rpb25Db250cm9sbGVyOjpyZXNwb25kVG9VbmFwcGxpZWRFZGl0aW5nKEVkaXRD
b21tYW5kQ29tcG9zaXRpb24qIGNvbW1hbmQpCi17Ci0gICAgaWYgKCFjb21tYW5kLT53YXNDcmVh
dGVMaW5rQ29tbWFuZCgpKQotICAgICAgICByZXR1cm47Ci0gICAgUmVmUHRyPFJhbmdlPiByYW5n
ZSA9IFJhbmdlOjpjcmVhdGUobV9mcmFtZS0+ZG9jdW1lbnQoKSwgY29tbWFuZC0+c3RhcnRpbmdT
ZWxlY3Rpb24oKS5zdGFydCgpLCBjb21tYW5kLT5zdGFydGluZ1NlbGVjdGlvbigpLmVuZCgpKTsK
LSAgICBpZiAoIXJhbmdlKQotICAgICAgICByZXR1cm47Ci0gICAgRG9jdW1lbnRNYXJrZXJDb250
cm9sbGVyKiBtYXJrZXJzID0gbV9mcmFtZS0+ZG9jdW1lbnQoKS0+bWFya2VycygpOwotICAgIG1h
cmtlcnMtPmFkZE1hcmtlcihyYW5nZS5nZXQoKSwgRG9jdW1lbnRNYXJrZXI6OlJlcGxhY2VtZW50
KTsKLSAgICBtYXJrZXJzLT5hZGRNYXJrZXIocmFuZ2UuZ2V0KCksIERvY3VtZW50TWFya2VyOjpT
cGVsbENoZWNraW5nRXhlbXB0aW9uKTsKLX0KLQotRWRpdG9yQ2xpZW50KiBTcGVsbGluZ0NvcnJl
Y3Rpb25Db250cm9sbGVyOjpjbGllbnQoKQotewotICAgIHJldHVybiBtX2ZyYW1lLT5wYWdlKCkg
PyBtX2ZyYW1lLT5wYWdlKCktPmVkaXRvckNsaWVudCgpIDogMDsKLX0KLQotVGV4dENoZWNrZXJD
bGllbnQqIFNwZWxsaW5nQ29ycmVjdGlvbkNvbnRyb2xsZXI6OnRleHRDaGVja2VyKCkKLXsKLSAg
ICBpZiAoRWRpdG9yQ2xpZW50KiBvd25lciA9IGNsaWVudCgpKQotICAgICAgICByZXR1cm4gb3du
ZXItPnRleHRDaGVja2VyKCk7Ci0gICAgcmV0dXJuIDA7Ci19Ci0KLXZvaWQgU3BlbGxpbmdDb3Jy
ZWN0aW9uQ29udHJvbGxlcjo6cmVjb3JkQXV0b2NvcnJlY3Rpb25SZXNwb25zZVJldmVyc2VkKGNv
bnN0IFN0cmluZyYgcmVwbGFjZWRTdHJpbmcsIGNvbnN0IFN0cmluZyYgcmVwbGFjZW1lbnRTdHJp
bmcpCi17Ci0gICAgY2xpZW50KCktPnJlY29yZEF1dG9jb3JyZWN0aW9uUmVzcG9uc2UoRWRpdG9y
Q2xpZW50OjpBdXRvY29ycmVjdGlvblJldmVydGVkLCByZXBsYWNlZFN0cmluZywgcmVwbGFjZW1l
bnRTdHJpbmcpOwotfQotCi12b2lkIFNwZWxsaW5nQ29ycmVjdGlvbkNvbnRyb2xsZXI6OnJlY29y
ZEF1dG9jb3JyZWN0aW9uUmVzcG9uc2VSZXZlcnNlZChjb25zdCBTdHJpbmcmIHJlcGxhY2VkU3Ry
aW5nLCBQYXNzUmVmUHRyPFJhbmdlPiByZXBsYWNlbWVudFJhbmdlKQotewotICAgIHJlY29yZEF1
dG9jb3JyZWN0aW9uUmVzcG9uc2VSZXZlcnNlZChyZXBsYWNlZFN0cmluZywgcGxhaW5UZXh0KHJl
cGxhY2VtZW50UmFuZ2UuZ2V0KCkpKTsKLX0KLQotdm9pZCBTcGVsbGluZ0NvcnJlY3Rpb25Db250
cm9sbGVyOjptYXJrUmV2ZXJzZWQoUGFzc1JlZlB0cjxSYW5nZT4gY2hhbmdlZFJhbmdlKQotewot
ICAgIGNoYW5nZWRSYW5nZS0+c3RhcnRDb250YWluZXIoKS0+ZG9jdW1lbnQoKS0+bWFya2Vycygp
LT5yZW1vdmVNYXJrZXJzKGNoYW5nZWRSYW5nZS5nZXQoKSwgRG9jdW1lbnRNYXJrZXI6OkF1dG9j
b3JyZWN0ZWQsIERvY3VtZW50TWFya2VyQ29udHJvbGxlcjo6UmVtb3ZlUGFydGlhbGx5T3Zlcmxh
cHBpbmdNYXJrZXIpOwotICAgIGNoYW5nZWRSYW5nZS0+c3RhcnRDb250YWluZXIoKS0+ZG9jdW1l
bnQoKS0+bWFya2VycygpLT5hZGRNYXJrZXIoY2hhbmdlZFJhbmdlLmdldCgpLCBEb2N1bWVudE1h
cmtlcjo6U3BlbGxDaGVja2luZ0V4ZW1wdGlvbik7Ci19Ci0KLXZvaWQgU3BlbGxpbmdDb3JyZWN0
aW9uQ29udHJvbGxlcjo6bWFya0NvcnJlY3Rpb24oUGFzc1JlZlB0cjxSYW5nZT4gcmVwbGFjZWRS
YW5nZSwgY29uc3QgU3RyaW5nJiByZXBsYWNlZFN0cmluZykKLXsKLSAgICBWZWN0b3I8RG9jdW1l
bnRNYXJrZXI6Ok1hcmtlclR5cGU+IG1hcmtlclR5cGVzVG9BZGQgPSBtYXJrZXJUeXBlc0ZvckF1
dG9jb3JyZWN0aW9uKCk7Ci0gICAgRG9jdW1lbnRNYXJrZXJDb250cm9sbGVyKiBtYXJrZXJzID0g
cmVwbGFjZWRSYW5nZS0+c3RhcnRDb250YWluZXIoKS0+ZG9jdW1lbnQoKS0+bWFya2VycygpOwot
ICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgbWFya2VyVHlwZXNUb0FkZC5zaXplKCk7ICsraSkg
ewotICAgICAgICBEb2N1bWVudE1hcmtlcjo6TWFya2VyVHlwZSBtYXJrZXJUeXBlID0gbWFya2Vy
VHlwZXNUb0FkZFtpXTsKLSAgICAgICAgaWYgKG1hcmtlclR5cGUgPT0gRG9jdW1lbnRNYXJrZXI6
OlJlcGxhY2VtZW50IHx8IG1hcmtlclR5cGUgPT0gRG9jdW1lbnRNYXJrZXI6OkF1dG9jb3JyZWN0
ZWQpCi0gICAgICAgICAgICBtYXJrZXJzLT5hZGRNYXJrZXIocmVwbGFjZWRSYW5nZS5nZXQoKSwg
bWFya2VyVHlwZSwgcmVwbGFjZWRTdHJpbmcpOwotICAgICAgICBlbHNlCi0gICAgICAgICAgICBt
YXJrZXJzLT5hZGRNYXJrZXIocmVwbGFjZWRSYW5nZS5nZXQoKSwgbWFya2VyVHlwZSk7Ci0gICAg
fQotfQotCi12b2lkIFNwZWxsaW5nQ29ycmVjdGlvbkNvbnRyb2xsZXI6OnJlY29yZFNwZWxsY2hl
Y2tlclJlc3BvbnNlRm9yTW9kaWZpZWRDb3JyZWN0aW9uKFJhbmdlKiByYW5nZU9mQ29ycmVjdGlv
biwgY29uc3QgU3RyaW5nJiBjb3JyZWN0ZWQsIGNvbnN0IFN0cmluZyYgY29ycmVjdGlvbikKLXsK
LSAgICBpZiAoIXJhbmdlT2ZDb3JyZWN0aW9uKQotICAgICAgICByZXR1cm47Ci0gICAgRG9jdW1l
bnRNYXJrZXJDb250cm9sbGVyKiBtYXJrZXJzID0gcmFuZ2VPZkNvcnJlY3Rpb24tPnN0YXJ0Q29u
dGFpbmVyKCktPmRvY3VtZW50KCktPm1hcmtlcnMoKTsKLSAgICBWZWN0b3I8RG9jdW1lbnRNYXJr
ZXIqPiBjb3JyZWN0ZWRPbmNlTWFya2VycyA9IG1hcmtlcnMtPm1hcmtlcnNJblJhbmdlKHJhbmdl
T2ZDb3JyZWN0aW9uLCBEb2N1bWVudE1hcmtlcjo6QXV0b2NvcnJlY3RlZCk7Ci0gICAgaWYgKGNv
cnJlY3RlZE9uY2VNYXJrZXJzLmlzRW1wdHkoKSkKLSAgICAgICAgcmV0dXJuOwotICAgIAotICAg
IC8vIFNwZWxsaW5nIGNvcnJlY3RlZCB0ZXh0IGhhcyBiZWVuIGVkaXRlZC4gV2UgbmVlZCB0byBk
ZXRlcm1pbmUgd2hldGhlciB1c2VyIGhhcyByZXZlcnRlZCBpdCB0byBvcmlnaW5hbCB0ZXh0IG9y
Ci0gICAgLy8gZWRpdGVkIGl0IHRvIHNvbWV0aGluZyBlbHNlLCBhbmQgbm90aWZ5IHNwZWxsY2hl
Y2tlciBhY2NvcmRpbmdseS4KLSAgICBpZiAobWFya2Vyc0hhdmVJZGVudGljYWxEZXNjcmlwdGlv
bihjb3JyZWN0ZWRPbmNlTWFya2VycykgJiYgY29ycmVjdGVkT25jZU1hcmtlcnNbMF0tPmRlc2Ny
aXB0aW9uKCkgPT0gY29ycmVjdGVkKQotICAgICAgICBjbGllbnQoKS0+cmVjb3JkQXV0b2NvcnJl
Y3Rpb25SZXNwb25zZShFZGl0b3JDbGllbnQ6OkF1dG9jb3JyZWN0aW9uUmV2ZXJ0ZWQsIGNvcnJl
Y3RlZCwgY29ycmVjdGlvbik7Ci0gICAgZWxzZQotICAgICAgICBjbGllbnQoKS0+cmVjb3JkQXV0
b2NvcnJlY3Rpb25SZXNwb25zZShFZGl0b3JDbGllbnQ6OkF1dG9jb3JyZWN0aW9uRWRpdGVkLCBj
b3JyZWN0ZWQsIGNvcnJlY3Rpb24pOwotICAgIG1hcmtlcnMtPnJlbW92ZU1hcmtlcnMocmFuZ2VP
ZkNvcnJlY3Rpb24sIERvY3VtZW50TWFya2VyOjpBdXRvY29ycmVjdGVkLCBEb2N1bWVudE1hcmtl
ckNvbnRyb2xsZXI6OlJlbW92ZVBhcnRpYWxseU92ZXJsYXBwaW5nTWFya2VyKTsKLX0KLQotdm9p
ZCBTcGVsbGluZ0NvcnJlY3Rpb25Db250cm9sbGVyOjpkZWxldGVkQXV0b2NvcnJlY3Rpb25BdFBv
c2l0aW9uKGNvbnN0IFBvc2l0aW9uJiBwb3NpdGlvbiwgY29uc3QgU3RyaW5nJiBvcmlnaW5hbFN0
cmluZykKLXsKLSAgICBtX29yaWdpbmFsU3RyaW5nRm9yTGFzdERlbGV0ZWRBdXRvY29ycmVjdGlv
biA9IG9yaWdpbmFsU3RyaW5nOwotICAgIG1fcG9zaXRpb25Gb3JMYXN0RGVsZXRlZEF1dG9jb3Jy
ZWN0aW9uID0gcG9zaXRpb247Ci19Ci0KLXZvaWQgU3BlbGxpbmdDb3JyZWN0aW9uQ29udHJvbGxl
cjo6bWFya1ByZWNlZGluZ1doaXRlc3BhY2VGb3JEZWxldGVkQXV0b2NvcnJlY3Rpb25BZnRlckNv
bW1hbmQoRWRpdENvbW1hbmQqIGNvbW1hbmQpCi17Ci0gICAgUG9zaXRpb24gZW5kT2ZTZWxlY3Rp
b24gPSBjb21tYW5kLT5lbmRpbmdTZWxlY3Rpb24oKS5lbmQoKTsKLSAgICBpZiAoZW5kT2ZTZWxl
Y3Rpb24gIT0gbV9wb3NpdGlvbkZvckxhc3REZWxldGVkQXV0b2NvcnJlY3Rpb24pCi0gICAgICAg
IHJldHVybjsKLQotICAgIFBvc2l0aW9uIHByZWNlZGluZ0NoYXJhY3RlclBvc2l0aW9uID0gZW5k
T2ZTZWxlY3Rpb24ucHJldmlvdXMoKTsKLSAgICBpZiAoZW5kT2ZTZWxlY3Rpb24gPT0gcHJlY2Vk
aW5nQ2hhcmFjdGVyUG9zaXRpb24pCi0gICAgICAgIHJldHVybjsKLQotICAgIFJlZlB0cjxSYW5n
ZT4gcHJlY2VkaW5nQ2hhcmFjdGVyUmFuZ2UgPSBSYW5nZTo6Y3JlYXRlKG1fZnJhbWUtPmRvY3Vt
ZW50KCksIHByZWNlZGluZ0NoYXJhY3RlclBvc2l0aW9uLCBlbmRPZlNlbGVjdGlvbik7Ci0gICAg
U3RyaW5nIHN0cmluZyA9IHBsYWluVGV4dChwcmVjZWRpbmdDaGFyYWN0ZXJSYW5nZS5nZXQoKSk7
Ci0gICAgaWYgKHN0cmluZy5pc0VtcHR5KCkgfHwgIWlzV2hpdGVzcGFjZShzdHJpbmdbc3RyaW5n
Lmxlbmd0aCgpIC0gMV0pKQotICAgICAgICByZXR1cm47Ci0KLSAgICAvLyBNYXJrIHRoaXMgd2hp
dGVzcGFjZSB0byBpbmRpY2F0ZSB3ZSBoYXZlIGRlbGV0ZWQgYW4gYXV0b2NvcnJlY3Rpb24gZm9s
bG93aW5nIHRoaXMKLSAgICAvLyB3aGl0ZXNwYWNlLiBTbyBpZiB0aGUgdXNlciB0eXBlcyB0aGUg
c2FtZSBvcmlnaW5hbCB3b3JkIGFnYWluIGF0IHRoaXMgcG9zaXRpb24sIHdlCi0gICAgLy8gd29u
J3QgYXV0b2NvcnJlY3QgaXQgYWdhaW4uCi0gICAgbV9mcmFtZS0+ZG9jdW1lbnQoKS0+bWFya2Vy
cygpLT5hZGRNYXJrZXIocHJlY2VkaW5nQ2hhcmFjdGVyUmFuZ2UuZ2V0KCksIERvY3VtZW50TWFy
a2VyOjpEZWxldGVkQXV0b2NvcnJlY3Rpb24sIG1fb3JpZ2luYWxTdHJpbmdGb3JMYXN0RGVsZXRl
ZEF1dG9jb3JyZWN0aW9uKTsKLX0KLQotYm9vbCBTcGVsbGluZ0NvcnJlY3Rpb25Db250cm9sbGVy
Ojpwcm9jZXNzTWFya2Vyc09uVGV4dFRvQmVSZXBsYWNlZEJ5UmVzdWx0KGNvbnN0IFRleHRDaGVj
a2luZ1Jlc3VsdCogcmVzdWx0LCBSYW5nZSogcmFuZ2VUb0JlUmVwbGFjZWQsIGNvbnN0IFN0cmlu
ZyYgc3RyaW5nVG9CZVJlcGxhY2VkKQotewotICAgIERvY3VtZW50TWFya2VyQ29udHJvbGxlciog
bWFya2VyQ29udHJvbGxlciA9IG1fZnJhbWUtPmRvY3VtZW50KCktPm1hcmtlcnMoKTsKLSAgICBp
ZiAobWFya2VyQ29udHJvbGxlci0+aGFzTWFya2VycyhyYW5nZVRvQmVSZXBsYWNlZCwgRG9jdW1l
bnRNYXJrZXI6OlJlcGxhY2VtZW50KSkgewotICAgICAgICBpZiAocmVzdWx0LT50eXBlID09IFRl
eHRDaGVja2luZ1R5cGVDb3JyZWN0aW9uKQotICAgICAgICAgICAgcmVjb3JkU3BlbGxjaGVja2Vy
UmVzcG9uc2VGb3JNb2RpZmllZENvcnJlY3Rpb24ocmFuZ2VUb0JlUmVwbGFjZWQsIHN0cmluZ1Rv
QmVSZXBsYWNlZCwgcmVzdWx0LT5yZXBsYWNlbWVudCk7Ci0gICAgICAgIHJldHVybiBmYWxzZTsK
LSAgICB9Ci0KLSAgICBpZiAobWFya2VyQ29udHJvbGxlci0+aGFzTWFya2VycyhyYW5nZVRvQmVS
ZXBsYWNlZCwgRG9jdW1lbnRNYXJrZXI6OlJlamVjdGVkQ29ycmVjdGlvbikpCi0gICAgICAgIHJl
dHVybiBmYWxzZTsKLQotICAgIFBvc2l0aW9uIGJlZ2lubmluZ09mUmFuZ2UgPSByYW5nZVRvQmVS
ZXBsYWNlZC0+c3RhcnRQb3NpdGlvbigpOwotICAgIFBvc2l0aW9uIHByZWNlZGluZ0NoYXJhY3Rl
clBvc2l0aW9uID0gYmVnaW5uaW5nT2ZSYW5nZS5wcmV2aW91cygpOwotICAgIFJlZlB0cjxSYW5n
ZT4gcHJlY2VkaW5nQ2hhcmFjdGVyUmFuZ2UgPSBSYW5nZTo6Y3JlYXRlKG1fZnJhbWUtPmRvY3Vt
ZW50KCksIHByZWNlZGluZ0NoYXJhY3RlclBvc2l0aW9uLCBiZWdpbm5pbmdPZlJhbmdlKTsKLQot
ICAgIFZlY3RvcjxEb2N1bWVudE1hcmtlcio+IG1hcmtlcnMgPSBtYXJrZXJDb250cm9sbGVyLT5t
YXJrZXJzSW5SYW5nZShwcmVjZWRpbmdDaGFyYWN0ZXJSYW5nZS5nZXQoKSwgRG9jdW1lbnRNYXJr
ZXI6OkRlbGV0ZWRBdXRvY29ycmVjdGlvbik7Ci0KLSAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8
IG1hcmtlcnMuc2l6ZSgpOyArK2kpIHsKLSAgICAgICAgaWYgKG1hcmtlcnNbaV0tPmRlc2NyaXB0
aW9uKCkgPT0gc3RyaW5nVG9CZVJlcGxhY2VkKQotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwot
ICAgIH0KLQotICAgIHJldHVybiB0cnVlOwotfQotICAgIAotI2VuZGlmCi0KLX0gLy8gbmFtZXNw
YWNlIFdlYkNvcmUKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2VkaXRpbmcvU3BlbGxpbmdDb3JyZWN0
aW9uQ29udHJvbGxlci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2VkaXRpbmcvU3Bl
bGxpbmdDb3JyZWN0aW9uQ29udHJvbGxlci5oCShyZXZpc2lvbiAxMTI5NjEpCisrKyBTb3VyY2Uv
V2ViQ29yZS9lZGl0aW5nL1NwZWxsaW5nQ29ycmVjdGlvbkNvbnRyb2xsZXIuaAkod29ya2luZyBj
b3B5KQpAQCAtMSwxNTcgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMCBBcHBsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBp
biBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRp
b24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMK
LSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCBy
ZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRp
b25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFs
cyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJ
UyBQUk9WSURFRCBCWSBBUFBMRSBDT01QVVRFUiwgSU5DLiBgYEFTIElTJycgQU5EIEFOWQotICog
RVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLCBUSEUKLSAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJ
VE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5P
IEVWRU5UIFNIQUxMIEFQUExFIENPTVBVVEVSLCBJTkMuIE9SCi0gKiBDT05UUklCVVRPUlMgQkUg
TElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKLSAq
IEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywKLSAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklD
RVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgotICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJS
VVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQotICogT0YgTElBQklMSVRZ
LCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5D
TFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9G
IFRIRSBVU0UKLSAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9T
U0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotI2lmbmRlZiBTcGVsbGluZ0NvcnJlY3Rp
b25Db250cm9sbGVyX2gKLSNkZWZpbmUgU3BlbGxpbmdDb3JyZWN0aW9uQ29udHJvbGxlcl9oCi0K
LSNpbmNsdWRlICJEb2N1bWVudE1hcmtlci5oIgotI2luY2x1ZGUgIlJhbmdlLmgiCi0jaW5jbHVk
ZSAiVGV4dENoZWNraW5nLmgiCi0jaW5jbHVkZSAiVGltZXIuaCIKLSNpbmNsdWRlICJWaXNpYmxl
U2VsZWN0aW9uLmgiCi0jaW5jbHVkZSA8d3RmL05vbmNvcHlhYmxlLmg+Ci0jaW5jbHVkZSA8d3Rm
L1VudXNlZFBhcmFtLmg+Ci0KLW5hbWVzcGFjZSBXZWJDb3JlIHsKLQotY2xhc3MgQ29tcG9zaXRl
RWRpdENvbW1hbmQ7Ci1jbGFzcyBFZGl0b3JDbGllbnQ7Ci1jbGFzcyBFZGl0Q29tbWFuZDsKLWNs
YXNzIEVkaXRDb21tYW5kQ29tcG9zaXRpb247Ci1jbGFzcyBGcmFtZTsKLWNsYXNzIFRleHRDaGVj
a2VyQ2xpZW50OwotCi1zdHJ1Y3QgQ29ycmVjdGlvblBhbmVsSW5mbyB7Ci0gICAgZW51bSBQYW5l
bFR5cGUgewotICAgICAgICBQYW5lbFR5cGVDb3JyZWN0aW9uID0gMCwKLSAgICAgICAgUGFuZWxU
eXBlUmV2ZXJzaW9uLAotICAgICAgICBQYW5lbFR5cGVTcGVsbGluZ1N1Z2dlc3Rpb25zCi0gICAg
fTsKLQotICAgIFJlZlB0cjxSYW5nZT4gcmFuZ2VUb0JlUmVwbGFjZWQ7Ci0gICAgU3RyaW5nIHJl
cGxhY2VkU3RyaW5nOwotICAgIFN0cmluZyByZXBsYWNlbWVudFN0cmluZzsKLSAgICBQYW5lbFR5
cGUgcGFuZWxUeXBlOwotICAgIGJvb2wgaXNBY3RpdmU7Ci19OwotCi1zdHJ1Y3QgVGV4dENoZWNr
aW5nUmVzdWx0OwotCi1lbnVtIFJlYXNvbkZvckRpc21pc3NpbmdDb3JyZWN0aW9uUGFuZWwgewot
ICAgIFJlYXNvbkZvckRpc21pc3NpbmdDb3JyZWN0aW9uUGFuZWxDYW5jZWxsZWQgPSAwLAotICAg
IFJlYXNvbkZvckRpc21pc3NpbmdDb3JyZWN0aW9uUGFuZWxJZ25vcmVkLAotICAgIFJlYXNvbkZv
ckRpc21pc3NpbmdDb3JyZWN0aW9uUGFuZWxBY2NlcHRlZAotfTsKLQotI2lmIFVTRShBVVRPQ09S
UkVDVElPTl9QQU5FTCkKLSNkZWZpbmUgVU5MRVNTX0VOQUJMRUQoZnVuY3Rpb25Cb2R5KSA7Ci0j
ZWxzZQotI2RlZmluZSBVTkxFU1NfRU5BQkxFRChmdW5jdGlvbkJvZHkpIGZ1bmN0aW9uQm9keQot
I2VuZGlmCi0KLWNsYXNzIFNwZWxsaW5nQ29ycmVjdGlvbkNvbnRyb2xsZXIgewotICAgIFdURl9N
QUtFX05PTkNPUFlBQkxFKFNwZWxsaW5nQ29ycmVjdGlvbkNvbnRyb2xsZXIpOyBXVEZfTUFLRV9G
QVNUX0FMTE9DQVRFRDsKLXB1YmxpYzoKLSAgICBTcGVsbGluZ0NvcnJlY3Rpb25Db250cm9sbGVy
KEZyYW1lKikgVU5MRVNTX0VOQUJMRUQoe30pCi0gICAgflNwZWxsaW5nQ29ycmVjdGlvbkNvbnRy
b2xsZXIoKSBVTkxFU1NfRU5BQkxFRCh7fSkKLQotICAgIHZvaWQgc3RhcnRDb3JyZWN0aW9uUGFu
ZWxUaW1lcihDb3JyZWN0aW9uUGFuZWxJbmZvOjpQYW5lbFR5cGUpIFVOTEVTU19FTkFCTEVEKHt9
KQotICAgIHZvaWQgc3RvcENvcnJlY3Rpb25QYW5lbFRpbWVyKCkgVU5MRVNTX0VOQUJMRUQoe30p
Ci0KLSAgICB2b2lkIGRpc21pc3MoUmVhc29uRm9yRGlzbWlzc2luZ0NvcnJlY3Rpb25QYW5lbCkg
VU5MRVNTX0VOQUJMRUQoe30pCi0gICAgU3RyaW5nIGRpc21pc3NTb29uKFJlYXNvbkZvckRpc21p
c3NpbmdDb3JyZWN0aW9uUGFuZWwpIFVOTEVTU19FTkFCTEVEKHsgcmV0dXJuIFN0cmluZygpOyB9
KQotICAgIHZvaWQgc2hvdyhQYXNzUmVmUHRyPFJhbmdlPiByYW5nZVRvUmVwbGFjZSwgY29uc3Qg
U3RyaW5nJiByZXBsYWNlbWVudCkgVU5MRVNTX0VOQUJMRUQoeyBVTlVTRURfUEFSQU0ocmFuZ2VU
b1JlcGxhY2UpOyBVTlVTRURfUEFSQU0ocmVwbGFjZW1lbnQpOyB9KQotCi0gICAgdm9pZCBhcHBs
eUNvcnJlY3Rpb25QYW5lbEluZm8oY29uc3QgVmVjdG9yPERvY3VtZW50TWFya2VyOjpNYXJrZXJU
eXBlPiYpIFVOTEVTU19FTkFCTEVEKHt9KQotICAgIC8vIFJldHVybiB0cnVlIGlmIGNvcnJlY3Rp
b24gd2FzIGFwcGxpZWQsIGZhbHNlIG90aGVyd2lzZS4KLSAgICBib29sIGFwcGx5QXV0b2NvcnJl
Y3Rpb25CZWZvcmVUeXBpbmdJZkFwcHJvcHJpYXRlKCkgVU5MRVNTX0VOQUJMRUQoeyByZXR1cm4g
ZmFsc2U7IH0pCi0KLSAgICB2b2lkIHJlc3BvbmRUb1VuYXBwbGllZFNwZWxsQ29ycmVjdGlvbihj
b25zdCBWaXNpYmxlU2VsZWN0aW9uJiwgY29uc3QgU3RyaW5nJiBjb3JyZWN0ZWQsIGNvbnN0IFN0
cmluZyYgY29ycmVjdGlvbikgVU5MRVNTX0VOQUJMRUQoeyBVTlVTRURfUEFSQU0oY29ycmVjdGVk
KTsgVU5VU0VEX1BBUkFNKGNvcnJlY3Rpb24pOyB9KQotICAgIHZvaWQgcmVzcG9uZFRvQXBwbGll
ZEVkaXRpbmcoQ29tcG9zaXRlRWRpdENvbW1hbmQqKSBVTkxFU1NfRU5BQkxFRCh7IH0pCi0gICAg
dm9pZCByZXNwb25kVG9VbmFwcGxpZWRFZGl0aW5nKEVkaXRDb21tYW5kQ29tcG9zaXRpb24qKSBV
TkxFU1NfRU5BQkxFRCh7IH0pCi0gICAgdm9pZCByZXNwb25kVG9DaGFuZ2VkU2VsZWN0aW9uKGNv
bnN0IFZpc2libGVTZWxlY3Rpb24mIG9sZFNlbGVjdGlvbikgVU5MRVNTX0VOQUJMRUQoeyBVTlVT
RURfUEFSQU0ob2xkU2VsZWN0aW9uKTsgfSkKLQotICAgIHZvaWQgc3RvcFBlbmRpbmdDb3JyZWN0
aW9uKGNvbnN0IFZpc2libGVTZWxlY3Rpb24mIG9sZFNlbGVjdGlvbikgVU5MRVNTX0VOQUJMRUQo
eyBVTlVTRURfUEFSQU0ob2xkU2VsZWN0aW9uKTsgfSkKLSAgICB2b2lkIGFwcGx5UGVuZGluZ0Nv
cnJlY3Rpb24oY29uc3QgVmlzaWJsZVNlbGVjdGlvbiYgc2VsZWN0aW9uQWZ0ZXJUeXBpbmcpIFVO
TEVTU19FTkFCTEVEKHsgVU5VU0VEX1BBUkFNKHNlbGVjdGlvbkFmdGVyVHlwaW5nKTsgfSkKLQot
ICAgIHZvaWQgaGFuZGxlQ29ycmVjdGlvblBhbmVsUmVzdWx0KGNvbnN0IFN0cmluZyYgY29ycmVj
dGlvbikgVU5MRVNTX0VOQUJMRUQoeyBVTlVTRURfUEFSQU0oY29ycmVjdGlvbik7IH0pCi0gICAg
dm9pZCBoYW5kbGVDYW5jZWxPcGVyYXRpb24oKSBVTkxFU1NfRU5BQkxFRCh7fSkKLQotICAgIGJv
b2wgaGFzUGVuZGluZ0NvcnJlY3Rpb24oKSBjb25zdCBVTkxFU1NfRU5BQkxFRCh7IHJldHVybiBm
YWxzZTsgfSkKLSAgICBib29sIGlzU3BlbGxpbmdNYXJrZXJBbGxvd2VkKFBhc3NSZWZQdHI8UmFu
Z2U+IG1pc3NwZWxsaW5nUmFuZ2UpIGNvbnN0IFVOTEVTU19FTkFCTEVEKHsgVU5VU0VEX1BBUkFN
KG1pc3NwZWxsaW5nUmFuZ2UpOyByZXR1cm4gdHJ1ZTsgfSkKLSAgICBib29sIGlzQXV0b21hdGlj
U3BlbGxpbmdDb3JyZWN0aW9uRW5hYmxlZCgpIFVOTEVTU19FTkFCTEVEKHsgcmV0dXJuIGZhbHNl
OyB9KQotICAgIGJvb2wgc2hvdWxkUmVtb3ZlTWFya2Vyc1Vwb25FZGl0aW5nKCk7Ci0KLSAgICB2
b2lkIGNvcnJlY3Rpb25QYW5lbFRpbWVyRmlyZWQoVGltZXI8U3BlbGxpbmdDb3JyZWN0aW9uQ29u
dHJvbGxlcj4qKSBVTkxFU1NfRU5BQkxFRCh7fSkKLSAgICB2b2lkIHJlY29yZEF1dG9jb3JyZWN0
aW9uUmVzcG9uc2VSZXZlcnNlZChjb25zdCBTdHJpbmcmIHJlcGxhY2VkU3RyaW5nLCBQYXNzUmVm
UHRyPFJhbmdlPiByZXBsYWNlbWVudFJhbmdlKSBVTkxFU1NfRU5BQkxFRCh7IFVOVVNFRF9QQVJB
TShyZXBsYWNlZFN0cmluZyk7IFVOVVNFRF9QQVJBTShyZXBsYWNlbWVudFJhbmdlKTsgfSkKLSAg
ICB2b2lkIG1hcmtSZXZlcnNlZChQYXNzUmVmUHRyPFJhbmdlPiBjaGFuZ2VkUmFuZ2UpIFVOTEVT
U19FTkFCTEVEKHsgVU5VU0VEX1BBUkFNKGNoYW5nZWRSYW5nZSk7IH0pCi0gICAgdm9pZCBtYXJr
Q29ycmVjdGlvbihQYXNzUmVmUHRyPFJhbmdlPiByZXBsYWNlZFJhbmdlLCBjb25zdCBTdHJpbmcm
IHJlcGxhY2VkU3RyaW5nKSBVTkxFU1NfRU5BQkxFRCh7IFVOVVNFRF9QQVJBTShyZXBsYWNlZFJh
bmdlKTsgVU5VU0VEX1BBUkFNKHJlcGxhY2VkU3RyaW5nKTsgfSkKLSAgICB2b2lkIHJlY29yZFNw
ZWxsY2hlY2tlclJlc3BvbnNlRm9yTW9kaWZpZWRDb3JyZWN0aW9uKFJhbmdlKiByYW5nZU9mQ29y
cmVjdGlvbiwgY29uc3QgU3RyaW5nJiBjb3JyZWN0ZWQsIGNvbnN0IFN0cmluZyYgY29ycmVjdGlv
bikgVU5MRVNTX0VOQUJMRUQoeyBVTlVTRURfUEFSQU0ocmFuZ2VPZkNvcnJlY3Rpb24pOyBVTlVT
RURfUEFSQU0oY29ycmVjdGVkKTsgVU5VU0VEX1BBUkFNKGNvcnJlY3Rpb24pOyB9KQotCi0gICAg
Ly8gVGhpcyBmdW5jdGlvbiByZXR1cm5zIGZhbHNlIGlmIHRoZSByZXBsYWNlbWVudCBzaG91bGQg
bm90IGJlIGNhcnJpZWQgb3V0LgotICAgIGJvb2wgcHJvY2Vzc01hcmtlcnNPblRleHRUb0JlUmVw
bGFjZWRCeVJlc3VsdChjb25zdCBUZXh0Q2hlY2tpbmdSZXN1bHQqLCBSYW5nZSogcmFuZ2VUb0Jl
UmVwbGFjZWQsIGNvbnN0IFN0cmluZyYgc3RyaW5nVG9CZVJlcGxhY2VkKSBVTkxFU1NfRU5BQkxF
RCh7IFVOVVNFRF9QQVJBTShyYW5nZVRvQmVSZXBsYWNlZCk7IFVOVVNFRF9QQVJBTShzdHJpbmdU
b0JlUmVwbGFjZWQpOyByZXR1cm4gdHJ1ZTsgfSk7Ci0gICAgdm9pZCBkZWxldGVkQXV0b2NvcnJl
Y3Rpb25BdFBvc2l0aW9uKGNvbnN0IFBvc2l0aW9uJiwgY29uc3QgU3RyaW5nJiBvcmlnaW5hbFN0
cmluZykgVU5MRVNTX0VOQUJMRUQoeyBVTlVTRURfUEFSQU0ob3JpZ2luYWxTdHJpbmcpOyB9KQot
Ci0jaWYgVVNFKEFVVE9DT1JSRUNUSU9OX1BBTkVMKQotcHJpdmF0ZToKLSAgICB2b2lkIHJlY29y
ZEF1dG9jb3JyZWN0aW9uUmVzcG9uc2VSZXZlcnNlZChjb25zdCBTdHJpbmcmIHJlcGxhY2VkU3Ry
aW5nLCBjb25zdCBTdHJpbmcmIHJlcGxhY2VtZW50U3RyaW5nKTsKLQotICAgIGJvb2wgc2hvdWxk
U3RhcnRUaW1lckZvcihjb25zdCBEb2N1bWVudE1hcmtlciogbWFya2VyLCBpbnQgZW5kT2Zmc2V0
KSBjb25zdAotICAgIHsKLSAgICAgICAgcmV0dXJuICgoKG1hcmtlci0+dHlwZSgpID09IERvY3Vt
ZW50TWFya2VyOjpSZXBsYWNlbWVudCAmJiAhbWFya2VyLT5kZXNjcmlwdGlvbigpLmlzTnVsbCgp
KSAKLSAgICAgICAgICAgICAgICAgfHwgbWFya2VyLT50eXBlKCkgPT0gRG9jdW1lbnRNYXJrZXI6
OlNwZWxsaW5nKSAmJiBzdGF0aWNfY2FzdDxpbnQ+KG1hcmtlci0+ZW5kT2Zmc2V0KCkpID09IGVu
ZE9mZnNldCk7Ci0gICAgfQotCi0gICAgRWRpdG9yQ2xpZW50KiBjbGllbnQoKTsKLSAgICBUZXh0
Q2hlY2tlckNsaWVudCogdGV4dENoZWNrZXIoKTsKLSAgICBGbG9hdFJlY3Qgcm9vdFZpZXdSZWN0
Rm9yUmFuZ2UoY29uc3QgUmFuZ2UqKSBjb25zdDsKLSAgICB2b2lkIG1hcmtQcmVjZWRpbmdXaGl0
ZXNwYWNlRm9yRGVsZXRlZEF1dG9jb3JyZWN0aW9uQWZ0ZXJDb21tYW5kKEVkaXRDb21tYW5kKik7
Ci0KLSAgICBFZGl0b3JDbGllbnQqIG1fY2xpZW50OwotICAgIEZyYW1lKiBtX2ZyYW1lOwotCi0g
ICAgVGltZXI8U3BlbGxpbmdDb3JyZWN0aW9uQ29udHJvbGxlcj4gbV9jb3JyZWN0aW9uUGFuZWxU
aW1lcjsKLSAgICBDb3JyZWN0aW9uUGFuZWxJbmZvIG1fY29ycmVjdGlvblBhbmVsSW5mbzsKLSAg
ICBib29sIG1fY29ycmVjdGlvblBhbmVsSXNEaXNtaXNzZWRCeUVkaXRvcjsKLQotICAgIFN0cmlu
ZyBtX29yaWdpbmFsU3RyaW5nRm9yTGFzdERlbGV0ZWRBdXRvY29ycmVjdGlvbjsKLSAgICBQb3Np
dGlvbiBtX3Bvc2l0aW9uRm9yTGFzdERlbGV0ZWRBdXRvY29ycmVjdGlvbjsKLSNlbmRpZgotfTsK
LQotI3VuZGVmIFVOTEVTU19FTkFCTEVECi0KLWlubGluZSBib29sIFNwZWxsaW5nQ29ycmVjdGlv
bkNvbnRyb2xsZXI6OnNob3VsZFJlbW92ZU1hcmtlcnNVcG9uRWRpdGluZygpCi17Ci0jaWYgVVNF
KE1BUktFUl9SRU1PVkFMX1VQT05fRURJVElORykKLSAgICByZXR1cm4gdHJ1ZTsKLSNlbHNlCi0g
ICAgcmV0dXJuIGZhbHNlOwotI2VuZGlmCi19Ci0KLX0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKLQot
I2VuZGlmIC8vIFNwZWxsaW5nQ29ycmVjdGlvbkNvbnRyb2xsZXJfaApJbmRleDogU291cmNlL1dl
YkNvcmUvZWRpdGluZy9UeXBpbmdDb21tYW5kLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9lZGl0aW5nL1R5cGluZ0NvbW1hbmQuY3BwCShyZXZpc2lvbiAxMTI5NjEpCisrKyBTb3Vy
Y2UvV2ViQ29yZS9lZGl0aW5nL1R5cGluZ0NvbW1hbmQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0z
MjgsNyArMzI4LDcgQEAgdm9pZCBUeXBpbmdDb21tYW5kOjptYXJrTWlzc3BlbGxpbmdzQWZ0ZQog
ICAgICAgICAgICAgICAgIHN0cmlwcGVkUHJldmlvdXNXb3JkID0gcGxhaW5UZXh0KHJhbmdlLmdl
dCgpKS5zdHJpcFdoaXRlU3BhY2UoKTsKICAgICAgICAgICAgIGZyYW1lLT5lZGl0b3IoKS0+bWFy
a01pc3NwZWxsaW5nc0FmdGVyVHlwaW5nVG9Xb3JkKHAxLCBlbmRpbmdTZWxlY3Rpb24oKSwgIXN0
cmlwcGVkUHJldmlvdXNXb3JkLmlzRW1wdHkoKSk7CiAgICAgICAgIH0gZWxzZSBpZiAoY29tbWFu
ZFR5cGUgPT0gVHlwaW5nQ29tbWFuZDo6SW5zZXJ0VGV4dCkKLSAgICAgICAgICAgIGZyYW1lLT5l
ZGl0b3IoKS0+c3RhcnRDb3JyZWN0aW9uUGFuZWxUaW1lcigpOworICAgICAgICAgICAgZnJhbWUt
PmVkaXRvcigpLT5zdGFydEFsdGVybmF0aXZlVGV4dFVJVGltZXIoKTsKICAgICB9CiB9CiAKSW5k
ZXg6IFNvdXJjZS9XZWJDb3JlL2xvYWRlci9FbXB0eUNsaWVudHMuaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV2ViQ29yZS9sb2FkZXIvRW1wdHlDbGllbnRzLmgJKHJldmlzaW9uIDExMjk2MSkKKysr
IFNvdXJjZS9XZWJDb3JlL2xvYWRlci9FbXB0eUNsaWVudHMuaAkod29ya2luZyBjb3B5KQpAQCAt
NTIwLDkgKzUyMCw5IEBAIHB1YmxpYzoKICAgICBUZXh0Q2hlY2tlckNsaWVudCogdGV4dENoZWNr
ZXIoKSB7IHJldHVybiAmbV90ZXh0Q2hlY2tlckNsaWVudDsgfQogCiAjaWYgVVNFKEFVVE9DT1JS
RUNUSU9OX1BBTkVMKQotICAgIHZpcnR1YWwgdm9pZCBzaG93Q29ycmVjdGlvblBhbmVsKENvcnJl
Y3Rpb25QYW5lbEluZm86OlBhbmVsVHlwZSwgY29uc3QgRmxvYXRSZWN0JiwgY29uc3QgU3RyaW5n
JiwgY29uc3QgU3RyaW5nJiwgY29uc3QgVmVjdG9yPFN0cmluZz4mKSB7IH0KLSAgICB2aXJ0dWFs
IHZvaWQgZGlzbWlzc0NvcnJlY3Rpb25QYW5lbChSZWFzb25Gb3JEaXNtaXNzaW5nQ29ycmVjdGlv
blBhbmVsKSB7IH0KLSAgICB2aXJ0dWFsIFN0cmluZyBkaXNtaXNzQ29ycmVjdGlvblBhbmVsU29v
bihSZWFzb25Gb3JEaXNtaXNzaW5nQ29ycmVjdGlvblBhbmVsKSB7IHJldHVybiBTdHJpbmcoKTsg
fQorICAgIHZpcnR1YWwgdm9pZCBzaG93Q29ycmVjdGlvblBhbmVsKEFsdGVybmF0aXZlVGV4dFR5
cGUsIGNvbnN0IEZsb2F0UmVjdCYsIGNvbnN0IFN0cmluZyYsIGNvbnN0IFN0cmluZyYsIGNvbnN0
IFZlY3RvcjxTdHJpbmc+JikgeyB9CisgICAgdmlydHVhbCB2b2lkIGRpc21pc3NDb3JyZWN0aW9u
UGFuZWwoUmVhc29uRm9yRGlzbWlzc2luZ0FsdGVybmF0aXZlVGV4dCkgeyB9CisgICAgdmlydHVh
bCBTdHJpbmcgZGlzbWlzc0NvcnJlY3Rpb25QYW5lbFNvb24oUmVhc29uRm9yRGlzbWlzc2luZ0Fs
dGVybmF0aXZlVGV4dCkgeyByZXR1cm4gU3RyaW5nKCk7IH0KICAgICB2aXJ0dWFsIHZvaWQgcmVj
b3JkQXV0b2NvcnJlY3Rpb25SZXNwb25zZShBdXRvY29ycmVjdGlvblJlc3BvbnNlVHlwZSwgY29u
c3QgU3RyaW5nJiwgY29uc3QgU3RyaW5nJikgeyB9CiAjZW5kaWYKICAgICB2aXJ0dWFsIHZvaWQg
dXBkYXRlU3BlbGxpbmdVSVdpdGhHcmFtbWFyU3RyaW5nKGNvbnN0IFN0cmluZyYsIGNvbnN0IEdy
YW1tYXJEZXRhaWwmKSB7IH0KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BhZ2UvRWRpdG9yQ2xpZW50
LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGFnZS9FZGl0b3JDbGllbnQuaAkocmV2
aXNpb24gMTEyOTYxKQorKysgU291cmNlL1dlYkNvcmUvcGFnZS9FZGl0b3JDbGllbnQuaAkod29y
a2luZyBjb3B5KQpAQCAtMjcsNyArMjcsNyBAQAogI2lmbmRlZiBFZGl0b3JDbGllbnRfaAogI2Rl
ZmluZSBFZGl0b3JDbGllbnRfaAogCi0jaW5jbHVkZSAiU3BlbGxpbmdDb3JyZWN0aW9uQ29udHJv
bGxlci5oIgorI2luY2x1ZGUgIkFsdGVybmF0aXZlVGV4dENvbnRyb2xsZXIuaCIKICNpbmNsdWRl
ICJFZGl0b3JJbnNlcnRBY3Rpb24uaCIKICNpbmNsdWRlICJGbG9hdFJlY3QuaCIKICNpbmNsdWRl
ICJUZXh0QWZmaW5pdHkuaCIKQEAgLTE1Miw5ICsxNTIsOSBAQCBwdWJsaWM6CiAgICAgfTsKIAog
I2lmIFVTRShBVVRPQ09SUkVDVElPTl9QQU5FTCkKLSAgICB2aXJ0dWFsIHZvaWQgc2hvd0NvcnJl
Y3Rpb25QYW5lbChDb3JyZWN0aW9uUGFuZWxJbmZvOjpQYW5lbFR5cGUsIGNvbnN0IEZsb2F0UmVj
dCYgYm91bmRpbmdCb3hPZlJlcGxhY2VkU3RyaW5nLCBjb25zdCBTdHJpbmcmIHJlcGxhY2VkU3Ry
aW5nLCBjb25zdCBTdHJpbmcmIHJlcGxhY21lbnRTdHJpbmcsIGNvbnN0IFZlY3RvcjxTdHJpbmc+
JiBhbHRlcm5hdGl2ZVJlcGxhY2VtZW50U3RyaW5ncykgPSAwOwotICAgIHZpcnR1YWwgdm9pZCBk
aXNtaXNzQ29ycmVjdGlvblBhbmVsKFJlYXNvbkZvckRpc21pc3NpbmdDb3JyZWN0aW9uUGFuZWwp
ID0gMDsKLSAgICB2aXJ0dWFsIFN0cmluZyBkaXNtaXNzQ29ycmVjdGlvblBhbmVsU29vbihSZWFz
b25Gb3JEaXNtaXNzaW5nQ29ycmVjdGlvblBhbmVsKSA9IDA7CisgICAgdmlydHVhbCB2b2lkIHNo
b3dDb3JyZWN0aW9uUGFuZWwoQWx0ZXJuYXRpdmVUZXh0VHlwZSwgY29uc3QgRmxvYXRSZWN0JiBi
b3VuZGluZ0JveE9mUmVwbGFjZWRTdHJpbmcsIGNvbnN0IFN0cmluZyYgcmVwbGFjZWRTdHJpbmcs
IGNvbnN0IFN0cmluZyYgcmVwbGFjbWVudFN0cmluZywgY29uc3QgVmVjdG9yPFN0cmluZz4mIGFs
dGVybmF0aXZlUmVwbGFjZW1lbnRTdHJpbmdzKSA9IDA7CisgICAgdmlydHVhbCB2b2lkIGRpc21p
c3NDb3JyZWN0aW9uUGFuZWwoUmVhc29uRm9yRGlzbWlzc2luZ0FsdGVybmF0aXZlVGV4dCkgPSAw
OworICAgIHZpcnR1YWwgU3RyaW5nIGRpc21pc3NDb3JyZWN0aW9uUGFuZWxTb29uKFJlYXNvbkZv
ckRpc21pc3NpbmdBbHRlcm5hdGl2ZVRleHQpID0gMDsKICAgICB2aXJ0dWFsIHZvaWQgcmVjb3Jk
QXV0b2NvcnJlY3Rpb25SZXNwb25zZShBdXRvY29ycmVjdGlvblJlc3BvbnNlVHlwZSwgY29uc3Qg
U3RyaW5nJiByZXBsYWNlZFN0cmluZywgY29uc3QgU3RyaW5nJiByZXBsYWNlbWVudFN0cmluZykg
PSAwOwogI2VuZGlmCiAKSW5kZXg6IFNvdXJjZS9XZWJLaXQyL0NoYW5nZUxvZwo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvV2ViS2l0Mi9DaGFuZ2VMb2cJKHJldmlzaW9uIDExMjk2MSkKKysrIFNvdXJj
ZS9XZWJLaXQyL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDUzIEBACisyMDEy
LTA0LTAyICBKaWEgUHUgIDxqcHVAYXBwbGUuY29tPgorCisgICAgICAgIFJlbmFtZSBTcGVsbGlu
Z0NvcnJlY3Rpb25Db250cm9sbGVyIHRvIEFsdGVybmF0aXZlVGV4dENvbnRyb2xsZXIuCisgICAg
ICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD04Mjk0MgorCisgICAg
ICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFRoZXNlIGNoYW5nZXMg
YXJlIHNpbXBseSBmb3IgYWRvcHRpbmcgbmV3IGNsYXNzIG5hbWVzLgorCisgICAgICAgICogVUlQ
cm9jZXNzL0FQSS9tYWMvUGFnZUNsaWVudEltcGwuaDoKKyAgICAgICAgKFBhZ2VDbGllbnRJbXBs
KToKKyAgICAgICAgKiBVSVByb2Nlc3MvQVBJL21hYy9QYWdlQ2xpZW50SW1wbC5tbToKKyAgICAg
ICAgKFdlYktpdDo6UGFnZUNsaWVudEltcGw6OnNob3dDb3JyZWN0aW9uUGFuZWwpOgorICAgICAg
ICAoV2ViS2l0OjpQYWdlQ2xpZW50SW1wbDo6ZGlzbWlzc0NvcnJlY3Rpb25QYW5lbCk6CisgICAg
ICAgIChXZWJLaXQ6OlBhZ2VDbGllbnRJbXBsOjpkaXNtaXNzQ29ycmVjdGlvblBhbmVsU29vbik6
CisgICAgICAgICogVUlQcm9jZXNzL0FQSS9tYWMvV0tWaWV3Lm1tOgorICAgICAgICAoLVtXS1Zp
ZXcgaGFuZGxlQ29ycmVjdGlvblBhbmVsUmVzdWx0Ol0pOgorICAgICAgICAqIFVJUHJvY2Vzcy9Q
YWdlQ2xpZW50Lmg6CisgICAgICAgIChQYWdlQ2xpZW50KToKKyAgICAgICAgKiBVSVByb2Nlc3Mv
V2ViUGFnZVByb3h5LmNwcDoKKyAgICAgICAgKFdlYktpdDo6V2ViUGFnZVByb3h5OjpkaWRDb21t
aXRMb2FkRm9yRnJhbWUpOgorICAgICAgICAoV2ViS2l0OjpXZWJQYWdlUHJveHk6OnBhZ2VEaWRT
Y3JvbGwpOgorICAgICAgICAoV2ViS2l0OjpXZWJQYWdlUHJveHk6OnByb2Nlc3NEaWRDcmFzaCk6
CisgICAgICAgIChXZWJLaXQ6OldlYlBhZ2VQcm94eTo6c2hvd0NvcnJlY3Rpb25QYW5lbCk6Cisg
ICAgICAgIChXZWJLaXQ6OldlYlBhZ2VQcm94eTo6ZGlzbWlzc0NvcnJlY3Rpb25QYW5lbCk6Cisg
ICAgICAgIChXZWJLaXQ6OldlYlBhZ2VQcm94eTo6ZGlzbWlzc0NvcnJlY3Rpb25QYW5lbFNvb24p
OgorICAgICAgICAoV2ViS2l0OjpXZWJQYWdlUHJveHk6OmhhbmRsZUFsdGVybmF0aXZlVGV4dFVJ
UmVzdWx0KToKKyAgICAgICAgKiBVSVByb2Nlc3MvV2ViUGFnZVByb3h5Lmg6CisgICAgICAgIChX
ZWJQYWdlUHJveHkpOgorICAgICAgICAqIFVJUHJvY2Vzcy9tYWMvQ29ycmVjdGlvblBhbmVsLmg6
CisgICAgICAgIChDb3JyZWN0aW9uUGFuZWwpOgorICAgICAgICAqIFVJUHJvY2Vzcy9tYWMvQ29y
cmVjdGlvblBhbmVsLm1tOgorICAgICAgICAoY29ycmVjdGlvbkluZGljYXRvclR5cGUpOgorICAg
ICAgICAoV2ViS2l0OjpDb3JyZWN0aW9uUGFuZWw6OkNvcnJlY3Rpb25QYW5lbCk6CisgICAgICAg
IChXZWJLaXQ6OkNvcnJlY3Rpb25QYW5lbDo6fkNvcnJlY3Rpb25QYW5lbCk6CisgICAgICAgIChX
ZWJLaXQ6OkNvcnJlY3Rpb25QYW5lbDo6c2hvdyk6CisgICAgICAgIChXZWJLaXQ6OkNvcnJlY3Rp
b25QYW5lbDo6ZGlzbWlzcyk6CisgICAgICAgIChXZWJLaXQ6OkNvcnJlY3Rpb25QYW5lbDo6ZGlz
bWlzc0ludGVybmFsKToKKyAgICAgICAgKFdlYktpdDo6Q29ycmVjdGlvblBhbmVsOjpoYW5kbGVB
Y2NlcHRlZFJlcGxhY2VtZW50KToKKyAgICAgICAgKiBXZWJQcm9jZXNzL1dlYkNvcmVTdXBwb3J0
L1dlYkVkaXRvckNsaWVudC5oOgorICAgICAgICAqIFdlYlByb2Nlc3MvV2ViQ29yZVN1cHBvcnQv
bWFjL1dlYkVkaXRvckNsaWVudE1hYy5tbToKKyAgICAgICAgKFdlYktpdDo6V2ViRWRpdG9yQ2xp
ZW50OjpzaG93Q29ycmVjdGlvblBhbmVsKToKKyAgICAgICAgKFdlYktpdDo6V2ViRWRpdG9yQ2xp
ZW50OjpkaXNtaXNzQ29ycmVjdGlvblBhbmVsKToKKyAgICAgICAgKFdlYktpdDo6V2ViRWRpdG9y
Q2xpZW50OjpkaXNtaXNzQ29ycmVjdGlvblBhbmVsU29vbik6CisgICAgICAgICogV2ViUHJvY2Vz
cy9XZWJQYWdlL1dlYlBhZ2UuY3BwOgorICAgICAgICAoV2ViS2l0OjpXZWJQYWdlOjpoYW5kbGVB
bHRlcm5hdGl2ZVRleHRVSVJlc3VsdCk6CisgICAgICAgICogV2ViUHJvY2Vzcy9XZWJQYWdlL1dl
YlBhZ2UuaDoKKyAgICAgICAgKFdlYlBhZ2UpOgorICAgICAgICAqIFdlYlByb2Nlc3MvV2ViUGFn
ZS9XZWJQYWdlLm1lc3NhZ2VzLmluOgorCiAyMDEyLTA0LTAyICBBbmRlcnMgQ2FybHNzb24gIDxh
bmRlcnNjYUBhcHBsZS5jb20+CiAKICAgICAgICAgQ2FsbCBOUFBfU2V0VmFsdWUgd2l0aCBXS05W
Q0FMYXllclJlbmRlclNlcnZlclBvcnQgd2hlbiBhIFdLVmlldyBpcyBtb3ZlZCBmcm9tIGEgYnVm
ZmVyZWQgdG8gYW4gdW5idWZmZXJlZCB3aW5kb3csIG9yIHZpY2UgdmVyc2EKSW5kZXg6IFNvdXJj
ZS9XZWJLaXQyL1VJUHJvY2Vzcy9QYWdlQ2xpZW50LmgKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dl
YktpdDIvVUlQcm9jZXNzL1BhZ2VDbGllbnQuaAkocmV2aXNpb24gMTEyOTYxKQorKysgU291cmNl
L1dlYktpdDIvVUlQcm9jZXNzL1BhZ2VDbGllbnQuaAkod29ya2luZyBjb3B5KQpAQCAtMjksOCAr
MjksOCBAQAogI2luY2x1ZGUgIlNoYXJlYWJsZUJpdG1hcC5oIgogI2luY2x1ZGUgIldlYlBhZ2VQ
cm94eS5oIgogI2luY2x1ZGUgIldlYlBvcHVwTWVudVByb3h5LmgiCisjaW5jbHVkZSA8V2ViQ29y
ZS9BbHRlcm5hdGl2ZVRleHRDb250cm9sbGVyLmg+CiAjaW5jbHVkZSA8V2ViQ29yZS9FZGl0b3JD
bGllbnQuaD4KLSNpbmNsdWRlIDxXZWJDb3JlL1NwZWxsaW5nQ29ycmVjdGlvbkNvbnRyb2xsZXIu
aD4KICNpbmNsdWRlIDx3dGYvRm9yd2FyZC5oPgogCiAjaWYgUExBVEZPUk0oTUFDKQpAQCAtMTg1
LDkgKzE4NSw5IEBAIHB1YmxpYzoKICAgICB2aXJ0dWFsIENHQ29udGV4dFJlZiBjb250YWluaW5n
V2luZG93R3JhcGhpY3NDb250ZXh0KCkgPSAwOwogICAgIHZpcnR1YWwgdm9pZCBkaWRQZXJmb3Jt
RGljdGlvbmFyeUxvb2t1cChjb25zdCBTdHJpbmcmLCBkb3VibGUgc2NhbGVGYWN0b3IsIGNvbnN0
IERpY3Rpb25hcnlQb3B1cEluZm8mKSA9IDA7CiAgICAgdmlydHVhbCB2b2lkIGRpc21pc3NEaWN0
aW9uYXJ5TG9va3VwUGFuZWwoKSA9IDA7Ci0gICAgdmlydHVhbCB2b2lkIHNob3dDb3JyZWN0aW9u
UGFuZWwoV2ViQ29yZTo6Q29ycmVjdGlvblBhbmVsSW5mbzo6UGFuZWxUeXBlLCBjb25zdCBXZWJD
b3JlOjpGbG9hdFJlY3QmIGJvdW5kaW5nQm94T2ZSZXBsYWNlZFN0cmluZywgY29uc3QgU3RyaW5n
JiByZXBsYWNlZFN0cmluZywgY29uc3QgU3RyaW5nJiByZXBsYWNlbWVudFN0cmluZywgY29uc3Qg
VmVjdG9yPFN0cmluZz4mIGFsdGVybmF0aXZlUmVwbGFjZW1lbnRTdHJpbmdzKSA9IDA7Ci0gICAg
dmlydHVhbCB2b2lkIGRpc21pc3NDb3JyZWN0aW9uUGFuZWwoV2ViQ29yZTo6UmVhc29uRm9yRGlz
bWlzc2luZ0NvcnJlY3Rpb25QYW5lbCkgPSAwOwotICAgIHZpcnR1YWwgU3RyaW5nIGRpc21pc3ND
b3JyZWN0aW9uUGFuZWxTb29uKFdlYkNvcmU6OlJlYXNvbkZvckRpc21pc3NpbmdDb3JyZWN0aW9u
UGFuZWwpID0gMDsKKyAgICB2aXJ0dWFsIHZvaWQgc2hvd0NvcnJlY3Rpb25QYW5lbChXZWJDb3Jl
OjpBbHRlcm5hdGl2ZVRleHRUeXBlLCBjb25zdCBXZWJDb3JlOjpGbG9hdFJlY3QmIGJvdW5kaW5n
Qm94T2ZSZXBsYWNlZFN0cmluZywgY29uc3QgU3RyaW5nJiByZXBsYWNlZFN0cmluZywgY29uc3Qg
U3RyaW5nJiByZXBsYWNlbWVudFN0cmluZywgY29uc3QgVmVjdG9yPFN0cmluZz4mIGFsdGVybmF0
aXZlUmVwbGFjZW1lbnRTdHJpbmdzKSA9IDA7CisgICAgdmlydHVhbCB2b2lkIGRpc21pc3NDb3Jy
ZWN0aW9uUGFuZWwoV2ViQ29yZTo6UmVhc29uRm9yRGlzbWlzc2luZ0FsdGVybmF0aXZlVGV4dCkg
PSAwOworICAgIHZpcnR1YWwgU3RyaW5nIGRpc21pc3NDb3JyZWN0aW9uUGFuZWxTb29uKFdlYkNv
cmU6OlJlYXNvbkZvckRpc21pc3NpbmdBbHRlcm5hdGl2ZVRleHQpID0gMDsKICAgICB2aXJ0dWFs
IHZvaWQgcmVjb3JkQXV0b2NvcnJlY3Rpb25SZXNwb25zZShXZWJDb3JlOjpFZGl0b3JDbGllbnQ6
OkF1dG9jb3JyZWN0aW9uUmVzcG9uc2VUeXBlLCBjb25zdCBTdHJpbmcmIHJlcGxhY2VkU3RyaW5n
LCBjb25zdCBTdHJpbmcmIHJlcGxhY2VtZW50U3RyaW5nKSA9IDA7CiAgICAgdmlydHVhbCB2b2lk
IHJlY29tbWVuZGVkU2Nyb2xsYmFyU3R5bGVEaWRDaGFuZ2UoaW50MzJfdCBuZXdTdHlsZSkgPSAw
OwogICAgIApJbmRleDogU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL1dlYlBhZ2VQcm94eS5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL1dlYlBhZ2VQcm94eS5jcHAJ
KHJldmlzaW9uIDExMjk2MSkKKysrIFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9XZWJQYWdlUHJv
eHkuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xODEyLDcgKzE4MTIsNyBAQCB2b2lkIFdlYlBhZ2VQ
cm94eTo6ZGlkQ29tbWl0TG9hZEZvckZyYW1lCiAgICAgbV9wYWdlQ2xpZW50LT5yZXNldFRleHRJ
bnB1dFN0YXRlKCk7CiAjaWYgIWRlZmluZWQoQlVJTERJTkdfT05fU05PV19MRU9QQVJEKQogICAg
IC8vIEZJWE1FOiBTaG91bGQgdGhpcyBiZSBtb3ZlZCBpbnNpZGUgcmVzZXRUZXh0SW5wdXRTdGF0
ZSgpPwotICAgIGRpc21pc3NDb3JyZWN0aW9uUGFuZWwoUmVhc29uRm9yRGlzbWlzc2luZ0NvcnJl
Y3Rpb25QYW5lbElnbm9yZWQpOworICAgIGRpc21pc3NDb3JyZWN0aW9uUGFuZWwoUmVhc29uRm9y
RGlzbWlzc2luZ0FsdGVybmF0aXZlVGV4dElnbm9yZWQpOwogICAgIG1fcGFnZUNsaWVudC0+ZGlz
bWlzc0RpY3Rpb25hcnlMb29rdXBQYW5lbCgpOwogI2VuZGlmCiAjZW5kaWYKQEAgLTIzNjksNyAr
MjM2OSw3IEBAIHZvaWQgV2ViUGFnZVByb3h5OjpwYWdlRGlkU2Nyb2xsKCkKIHsKICAgICBtX3Vp
Q2xpZW50LnBhZ2VEaWRTY3JvbGwodGhpcyk7CiAjaWYgUExBVEZPUk0oTUFDKSAmJiAhZGVmaW5l
ZChCVUlMRElOR19PTl9TTk9XX0xFT1BBUkQpCi0gICAgZGlzbWlzc0NvcnJlY3Rpb25QYW5lbChS
ZWFzb25Gb3JEaXNtaXNzaW5nQ29ycmVjdGlvblBhbmVsSWdub3JlZCk7CisgICAgZGlzbWlzc0Nv
cnJlY3Rpb25QYW5lbChSZWFzb25Gb3JEaXNtaXNzaW5nQWx0ZXJuYXRpdmVUZXh0SWdub3JlZCk7
CiAjZW5kaWYKIH0KIApAQCAtMzM1Myw3ICszMzUzLDcgQEAgdm9pZCBXZWJQYWdlUHJveHk6OnBy
b2Nlc3NEaWRDcmFzaCgpCiAjZW5kaWYKIAogI2lmIFBMQVRGT1JNKE1BQykgJiYgIWRlZmluZWQo
QlVJTERJTkdfT05fU05PV19MRU9QQVJEKQotICAgIGRpc21pc3NDb3JyZWN0aW9uUGFuZWwoUmVh
c29uRm9yRGlzbWlzc2luZ0NvcnJlY3Rpb25QYW5lbElnbm9yZWQpOworICAgIGRpc21pc3NDb3Jy
ZWN0aW9uUGFuZWwoUmVhc29uRm9yRGlzbWlzc2luZ0FsdGVybmF0aXZlVGV4dElnbm9yZWQpOwog
ICAgIG1fcGFnZUNsaWVudC0+ZGlzbWlzc0RpY3Rpb25hcnlMb29rdXBQYW5lbCgpOwogI2VuZGlm
CiB9CkBAIC0zNjg5LDE3ICszNjg5LDE3IEBAIHZvaWQgV2ViUGFnZVByb3h5OjpzdWJzdGl0dXRp
b25zUGFuZWxJc1MKICNpZiAhZGVmaW5lZChCVUlMRElOR19PTl9TTk9XX0xFT1BBUkQpCiB2b2lk
IFdlYlBhZ2VQcm94eTo6c2hvd0NvcnJlY3Rpb25QYW5lbChpbnQzMl90IHBhbmVsVHlwZSwgY29u
c3QgRmxvYXRSZWN0JiBib3VuZGluZ0JveE9mUmVwbGFjZWRTdHJpbmcsIGNvbnN0IFN0cmluZyYg
cmVwbGFjZWRTdHJpbmcsIGNvbnN0IFN0cmluZyYgcmVwbGFjZW1lbnRTdHJpbmcsIGNvbnN0IFZl
Y3RvcjxTdHJpbmc+JiBhbHRlcm5hdGl2ZVJlcGxhY2VtZW50U3RyaW5ncykKIHsKLSAgICBtX3Bh
Z2VDbGllbnQtPnNob3dDb3JyZWN0aW9uUGFuZWwoKENvcnJlY3Rpb25QYW5lbEluZm86OlBhbmVs
VHlwZSlwYW5lbFR5cGUsIGJvdW5kaW5nQm94T2ZSZXBsYWNlZFN0cmluZywgcmVwbGFjZWRTdHJp
bmcsIHJlcGxhY2VtZW50U3RyaW5nLCBhbHRlcm5hdGl2ZVJlcGxhY2VtZW50U3RyaW5ncyk7Cisg
ICAgbV9wYWdlQ2xpZW50LT5zaG93Q29ycmVjdGlvblBhbmVsKChBbHRlcm5hdGl2ZVRleHRUeXBl
KXBhbmVsVHlwZSwgYm91bmRpbmdCb3hPZlJlcGxhY2VkU3RyaW5nLCByZXBsYWNlZFN0cmluZywg
cmVwbGFjZW1lbnRTdHJpbmcsIGFsdGVybmF0aXZlUmVwbGFjZW1lbnRTdHJpbmdzKTsKIH0KIAog
dm9pZCBXZWJQYWdlUHJveHk6OmRpc21pc3NDb3JyZWN0aW9uUGFuZWwoaW50MzJfdCByZWFzb24p
CiB7Ci0gICAgbV9wYWdlQ2xpZW50LT5kaXNtaXNzQ29ycmVjdGlvblBhbmVsKChSZWFzb25Gb3JE
aXNtaXNzaW5nQ29ycmVjdGlvblBhbmVsKXJlYXNvbik7CisgICAgbV9wYWdlQ2xpZW50LT5kaXNt
aXNzQ29ycmVjdGlvblBhbmVsKChSZWFzb25Gb3JEaXNtaXNzaW5nQWx0ZXJuYXRpdmVUZXh0KXJl
YXNvbik7CiB9CiAKIHZvaWQgV2ViUGFnZVByb3h5OjpkaXNtaXNzQ29ycmVjdGlvblBhbmVsU29v
bihpbnQzMl90IHJlYXNvbiwgU3RyaW5nJiByZXN1bHQpCiB7Ci0gICAgcmVzdWx0ID0gbV9wYWdl
Q2xpZW50LT5kaXNtaXNzQ29ycmVjdGlvblBhbmVsU29vbigoUmVhc29uRm9yRGlzbWlzc2luZ0Nv
cnJlY3Rpb25QYW5lbClyZWFzb24pOworICAgIHJlc3VsdCA9IG1fcGFnZUNsaWVudC0+ZGlzbWlz
c0NvcnJlY3Rpb25QYW5lbFNvb24oKFJlYXNvbkZvckRpc21pc3NpbmdBbHRlcm5hdGl2ZVRleHQp
cmVhc29uKTsKIH0KIAogdm9pZCBXZWJQYWdlUHJveHk6OnJlY29yZEF1dG9jb3JyZWN0aW9uUmVz
cG9uc2UoaW50MzJfdCByZXNwb25zZVR5cGUsIGNvbnN0IFN0cmluZyYgcmVwbGFjZWRTdHJpbmcs
IGNvbnN0IFN0cmluZyYgcmVwbGFjZW1lbnRTdHJpbmcpCkBAIC0zNzA4LDExICszNzA4LDExIEBA
IHZvaWQgV2ViUGFnZVByb3h5OjpyZWNvcmRBdXRvY29ycmVjdGlvblIKIH0KICNlbmRpZiAvLyAh
ZGVmaW5lZChCVUlMRElOR19PTl9TTk9XX0xFT1BBUkQpCiAKLXZvaWQgV2ViUGFnZVByb3h5Ojpo
YW5kbGVDb3JyZWN0aW9uUGFuZWxSZXN1bHQoY29uc3QgU3RyaW5nJiByZXN1bHQpCit2b2lkIFdl
YlBhZ2VQcm94eTo6aGFuZGxlQWx0ZXJuYXRpdmVUZXh0VUlSZXN1bHQoY29uc3QgU3RyaW5nJiBy
ZXN1bHQpCiB7CiAjaWYgIWRlZmluZWQoQlVJTERJTkdfT05fU05PV19MRU9QQVJEKQogICAgIGlm
ICghaXNDbG9zZWQoKSkKLSAgICAgICAgcHJvY2VzcygpLT5zZW5kKE1lc3NhZ2VzOjpXZWJQYWdl
OjpIYW5kbGVDb3JyZWN0aW9uUGFuZWxSZXN1bHQocmVzdWx0KSwgbV9wYWdlSUQsIDApOworICAg
ICAgICBwcm9jZXNzKCktPnNlbmQoTWVzc2FnZXM6OldlYlBhZ2U6OkhhbmRsZUFsdGVybmF0aXZl
VGV4dFVJUmVzdWx0KHJlc3VsdCksIG1fcGFnZUlELCAwKTsKICNlbmRpZgogfQogI2VuZGlmIC8v
IFBMQVRGT1JNKE1BQykKSW5kZXg6IFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9XZWJQYWdlUHJv
eHkuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvV2ViUGFnZVByb3h5
LmgJKHJldmlzaW9uIDExMjk2MSkKKysrIFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9XZWJQYWdl
UHJveHkuaAkod29ya2luZyBjb3B5KQpAQCAtNjExLDcgKzYxMSw3IEBAIHB1YmxpYzoKICAgICB2
b2lkIGZsYXNoQmFja2luZ1N0b3JlVXBkYXRlcyhjb25zdCBWZWN0b3I8V2ViQ29yZTo6SW50UmVj
dD4mIHVwZGF0ZVJlY3RzKTsKIAogI2lmIFBMQVRGT1JNKE1BQykKLSAgICB2b2lkIGhhbmRsZUNv
cnJlY3Rpb25QYW5lbFJlc3VsdChjb25zdCBTdHJpbmcmIHJlc3VsdCk7CisgICAgdm9pZCBoYW5k
bGVBbHRlcm5hdGl2ZVRleHRVSVJlc3VsdChjb25zdCBTdHJpbmcmIHJlc3VsdCk7CiAjZW5kaWYK
IAogICAgIHN0YXRpYyB2b2lkIHNldERlYnVnUGFpbnRGbGFncyhXS1BhZ2VEZWJ1Z1BhaW50Rmxh
Z3MgZmxhZ3MpIHsgc19kZWJ1Z1BhaW50RmxhZ3MgPSBmbGFnczsgfQpJbmRleDogU291cmNlL1dl
YktpdDIvVUlQcm9jZXNzL0FQSS9tYWMvUGFnZUNsaWVudEltcGwuaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL21hYy9QYWdlQ2xpZW50SW1wbC5oCShyZXZpc2lv
biAxMTI5NjEpCisrKyBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL21hYy9QYWdlQ2xpZW50
SW1wbC5oCSh3b3JraW5nIGNvcHkpCkBAIC0xMjAsOSArMTIwLDkgQEAgcHJpdmF0ZToKICAgICB2
aXJ0dWFsIHZvaWQgZGlkUGVyZm9ybURpY3Rpb25hcnlMb29rdXAoY29uc3QgU3RyaW5nJiwgZG91
YmxlIHNjYWxlRmFjdG9yLCBjb25zdCBEaWN0aW9uYXJ5UG9wdXBJbmZvJik7CiAgICAgdmlydHVh
bCB2b2lkIGRpc21pc3NEaWN0aW9uYXJ5TG9va3VwUGFuZWwoKTsKIAotICAgIHZpcnR1YWwgdm9p
ZCBzaG93Q29ycmVjdGlvblBhbmVsKFdlYkNvcmU6OkNvcnJlY3Rpb25QYW5lbEluZm86OlBhbmVs
VHlwZSwgY29uc3QgV2ViQ29yZTo6RmxvYXRSZWN0JiBib3VuZGluZ0JveE9mUmVwbGFjZWRTdHJp
bmcsIGNvbnN0IFN0cmluZyYgcmVwbGFjZWRTdHJpbmcsIGNvbnN0IFN0cmluZyYgcmVwbGFjZW1l
bnRTdHJpbmcsIGNvbnN0IFZlY3RvcjxTdHJpbmc+JiBhbHRlcm5hdGl2ZVJlcGxhY2VtZW50U3Ry
aW5ncyk7Ci0gICAgdmlydHVhbCB2b2lkIGRpc21pc3NDb3JyZWN0aW9uUGFuZWwoV2ViQ29yZTo6
UmVhc29uRm9yRGlzbWlzc2luZ0NvcnJlY3Rpb25QYW5lbCk7Ci0gICAgdmlydHVhbCBTdHJpbmcg
ZGlzbWlzc0NvcnJlY3Rpb25QYW5lbFNvb24oV2ViQ29yZTo6UmVhc29uRm9yRGlzbWlzc2luZ0Nv
cnJlY3Rpb25QYW5lbCk7CisgICAgdmlydHVhbCB2b2lkIHNob3dDb3JyZWN0aW9uUGFuZWwoV2Vi
Q29yZTo6QWx0ZXJuYXRpdmVUZXh0VHlwZSwgY29uc3QgV2ViQ29yZTo6RmxvYXRSZWN0JiBib3Vu
ZGluZ0JveE9mUmVwbGFjZWRTdHJpbmcsIGNvbnN0IFN0cmluZyYgcmVwbGFjZWRTdHJpbmcsIGNv
bnN0IFN0cmluZyYgcmVwbGFjZW1lbnRTdHJpbmcsIGNvbnN0IFZlY3RvcjxTdHJpbmc+JiBhbHRl
cm5hdGl2ZVJlcGxhY2VtZW50U3RyaW5ncyk7CisgICAgdmlydHVhbCB2b2lkIGRpc21pc3NDb3Jy
ZWN0aW9uUGFuZWwoV2ViQ29yZTo6UmVhc29uRm9yRGlzbWlzc2luZ0FsdGVybmF0aXZlVGV4dCk7
CisgICAgdmlydHVhbCBTdHJpbmcgZGlzbWlzc0NvcnJlY3Rpb25QYW5lbFNvb24oV2ViQ29yZTo6
UmVhc29uRm9yRGlzbWlzc2luZ0FsdGVybmF0aXZlVGV4dCk7CiAgICAgdmlydHVhbCB2b2lkIHJl
Y29yZEF1dG9jb3JyZWN0aW9uUmVzcG9uc2UoV2ViQ29yZTo6RWRpdG9yQ2xpZW50OjpBdXRvY29y
cmVjdGlvblJlc3BvbnNlVHlwZSwgY29uc3QgU3RyaW5nJiByZXBsYWNlZFN0cmluZywgY29uc3Qg
U3RyaW5nJiByZXBsYWNlbWVudFN0cmluZyk7CiAKICAgICB2aXJ0dWFsIHZvaWQgcmVjb21tZW5k
ZWRTY3JvbGxiYXJTdHlsZURpZENoYW5nZShpbnQzMl90IG5ld1N0eWxlKTsKSW5kZXg6IFNvdXJj
ZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvbWFjL1BhZ2VDbGllbnRJbXBsLm1tCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvbWFjL1BhZ2VDbGllbnRJbXBsLm1tCShy
ZXZpc2lvbiAxMTI5NjEpCisrKyBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL21hYy9QYWdl
Q2xpZW50SW1wbC5tbQkod29ya2luZyBjb3B5KQpAQCAtNDYzLDcgKzQ2Myw3IEBAIHZvaWQgUGFn
ZUNsaWVudEltcGw6OmRpc21pc3NEaWN0aW9uYXJ5TG8KICNlbmRpZgogfQogCi12b2lkIFBhZ2VD
bGllbnRJbXBsOjpzaG93Q29ycmVjdGlvblBhbmVsKENvcnJlY3Rpb25QYW5lbEluZm86OlBhbmVs
VHlwZSB0eXBlLCBjb25zdCBGbG9hdFJlY3QmIGJvdW5kaW5nQm94T2ZSZXBsYWNlZFN0cmluZywg
Y29uc3QgU3RyaW5nJiByZXBsYWNlZFN0cmluZywgY29uc3QgU3RyaW5nJiByZXBsYWNlbWVudFN0
cmluZywgY29uc3QgVmVjdG9yPFN0cmluZz4mIGFsdGVybmF0aXZlUmVwbGFjZW1lbnRTdHJpbmdz
KQordm9pZCBQYWdlQ2xpZW50SW1wbDo6c2hvd0NvcnJlY3Rpb25QYW5lbChBbHRlcm5hdGl2ZVRl
eHRUeXBlIHR5cGUsIGNvbnN0IEZsb2F0UmVjdCYgYm91bmRpbmdCb3hPZlJlcGxhY2VkU3RyaW5n
LCBjb25zdCBTdHJpbmcmIHJlcGxhY2VkU3RyaW5nLCBjb25zdCBTdHJpbmcmIHJlcGxhY2VtZW50
U3RyaW5nLCBjb25zdCBWZWN0b3I8U3RyaW5nPiYgYWx0ZXJuYXRpdmVSZXBsYWNlbWVudFN0cmlu
Z3MpCiB7CiAjaWYgIWRlZmluZWQoQlVJTERJTkdfT05fU05PV19MRU9QQVJEKQogICAgIGlmICgh
aXNWaWV3VmlzaWJsZSgpIHx8ICFpc1ZpZXdJbldpbmRvdygpKQpAQCAtNDcyLDE0ICs0NzIsMTQg
QEAgdm9pZCBQYWdlQ2xpZW50SW1wbDo6c2hvd0NvcnJlY3Rpb25QYW5lbAogI2VuZGlmCiB9CiAK
LXZvaWQgUGFnZUNsaWVudEltcGw6OmRpc21pc3NDb3JyZWN0aW9uUGFuZWwoUmVhc29uRm9yRGlz
bWlzc2luZ0NvcnJlY3Rpb25QYW5lbCByZWFzb24pCit2b2lkIFBhZ2VDbGllbnRJbXBsOjpkaXNt
aXNzQ29ycmVjdGlvblBhbmVsKFJlYXNvbkZvckRpc21pc3NpbmdBbHRlcm5hdGl2ZVRleHQgcmVh
c29uKQogewogI2lmICFkZWZpbmVkKEJVSUxESU5HX09OX1NOT1dfTEVPUEFSRCkKICAgICBtX2Nv
cnJlY3Rpb25QYW5lbC5kaXNtaXNzKHJlYXNvbik7CiAjZW5kaWYKIH0KIAotU3RyaW5nIFBhZ2VD
bGllbnRJbXBsOjpkaXNtaXNzQ29ycmVjdGlvblBhbmVsU29vbihXZWJDb3JlOjpSZWFzb25Gb3JE
aXNtaXNzaW5nQ29ycmVjdGlvblBhbmVsIHJlYXNvbikKK1N0cmluZyBQYWdlQ2xpZW50SW1wbDo6
ZGlzbWlzc0NvcnJlY3Rpb25QYW5lbFNvb24oV2ViQ29yZTo6UmVhc29uRm9yRGlzbWlzc2luZ0Fs
dGVybmF0aXZlVGV4dCByZWFzb24pCiB7CiAjaWYgIWRlZmluZWQoQlVJTERJTkdfT05fU05PV19M
RU9QQVJEKQogICAgIHJldHVybiBtX2NvcnJlY3Rpb25QYW5lbC5kaXNtaXNzKHJlYXNvbik7Cklu
ZGV4OiBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL21hYy9XS1ZpZXcubW0KPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9tYWMvV0tWaWV3Lm1tCShyZXZpc2lv
biAxMTI5NjEpCisrKyBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL21hYy9XS1ZpZXcubW0J
KHdvcmtpbmcgY29weSkKQEAgLTI4NTIsNyArMjg1Miw3IEBAIC0gKE5TSW50ZWdlcilzcGVsbENo
ZWNrZXJEb2N1bWVudFRhZwogCiAtICh2b2lkKWhhbmRsZUNvcnJlY3Rpb25QYW5lbFJlc3VsdDoo
TlNTdHJpbmcqKXJlc3VsdAogewotICAgIF9kYXRhLT5fcGFnZS0+aGFuZGxlQ29ycmVjdGlvblBh
bmVsUmVzdWx0KHJlc3VsdCk7CisgICAgX2RhdGEtPl9wYWdlLT5oYW5kbGVBbHRlcm5hdGl2ZVRl
eHRVSVJlc3VsdChyZXN1bHQpOwogfQogCiBAZW5kCkluZGV4OiBTb3VyY2UvV2ViS2l0Mi9VSVBy
b2Nlc3MvbWFjL0NvcnJlY3Rpb25QYW5lbC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQy
L1VJUHJvY2Vzcy9tYWMvQ29ycmVjdGlvblBhbmVsLmgJKHJldmlzaW9uIDExMjk2MSkKKysrIFNv
dXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9tYWMvQ29ycmVjdGlvblBhbmVsLmgJKHdvcmtpbmcgY29w
eSkKQEAgLTI4LDcgKzI4LDcgQEAKIAogI2lmICFkZWZpbmVkKEJVSUxESU5HX09OX1NOT1dfTEVP
UEFSRCkKICNpbXBvcnQgPEFwcEtpdC9OU1NwZWxsQ2hlY2tlci5oPgotI2ltcG9ydCA8V2ViQ29y
ZS9TcGVsbGluZ0NvcnJlY3Rpb25Db250cm9sbGVyLmg+CisjaW1wb3J0IDxXZWJDb3JlL0FsdGVy
bmF0aXZlVGV4dENvbnRyb2xsZXIuaD4KICNpbXBvcnQgPHd0Zi9SZXRhaW5QdHIuaD4KIAogQGNs
YXNzIFdLVmlldzsKQEAgLTM5LDE3ICszOSwxNyBAQCBjbGFzcyBDb3JyZWN0aW9uUGFuZWwgewog
cHVibGljOgogICAgIENvcnJlY3Rpb25QYW5lbCgpOwogICAgIH5Db3JyZWN0aW9uUGFuZWwoKTsK
LSAgICB2b2lkIHNob3coV0tWaWV3KiwgV2ViQ29yZTo6Q29ycmVjdGlvblBhbmVsSW5mbzo6UGFu
ZWxUeXBlLCBjb25zdCBXZWJDb3JlOjpGbG9hdFJlY3QmIGJvdW5kaW5nQm94T2ZSZXBsYWNlZFN0
cmluZywgY29uc3QgU3RyaW5nJiByZXBsYWNlZFN0cmluZywgY29uc3QgU3RyaW5nJiByZXBsYWNl
bWVudFN0cmluZywgY29uc3QgVmVjdG9yPFN0cmluZz4mIGFsdGVybmF0aXZlUmVwbGFjZW1lbnRT
dHJpbmdzKTsKLSAgICBTdHJpbmcgZGlzbWlzcyhXZWJDb3JlOjpSZWFzb25Gb3JEaXNtaXNzaW5n
Q29ycmVjdGlvblBhbmVsKTsKKyAgICB2b2lkIHNob3coV0tWaWV3KiwgV2ViQ29yZTo6QWx0ZXJu
YXRpdmVUZXh0VHlwZSwgY29uc3QgV2ViQ29yZTo6RmxvYXRSZWN0JiBib3VuZGluZ0JveE9mUmVw
bGFjZWRTdHJpbmcsIGNvbnN0IFN0cmluZyYgcmVwbGFjZWRTdHJpbmcsIGNvbnN0IFN0cmluZyYg
cmVwbGFjZW1lbnRTdHJpbmcsIGNvbnN0IFZlY3RvcjxTdHJpbmc+JiBhbHRlcm5hdGl2ZVJlcGxh
Y2VtZW50U3RyaW5ncyk7CisgICAgU3RyaW5nIGRpc21pc3MoV2ViQ29yZTo6UmVhc29uRm9yRGlz
bWlzc2luZ0FsdGVybmF0aXZlVGV4dCk7CiAgICAgc3RhdGljIHZvaWQgcmVjb3JkQXV0b2NvcnJl
Y3Rpb25SZXNwb25zZShXS1ZpZXcqLCBOU0NvcnJlY3Rpb25SZXNwb25zZSwgY29uc3QgU3RyaW5n
JiByZXBsYWNlZFN0cmluZywgY29uc3QgU3RyaW5nJiByZXBsYWNlbWVudFN0cmluZyk7CiAKIHBy
aXZhdGU6CiAgICAgYm9vbCBpc1Nob3dpbmcoKSBjb25zdCB7IHJldHVybiBtX3ZpZXc7IH0KLSAg
ICBTdHJpbmcgZGlzbWlzc0ludGVybmFsKFdlYkNvcmU6OlJlYXNvbkZvckRpc21pc3NpbmdDb3Jy
ZWN0aW9uUGFuZWwsIGJvb2wgZGlzbWlzc2luZ0V4dGVybmFsbHkpOworICAgIFN0cmluZyBkaXNt
aXNzSW50ZXJuYWwoV2ViQ29yZTo6UmVhc29uRm9yRGlzbWlzc2luZ0FsdGVybmF0aXZlVGV4dCwg
Ym9vbCBkaXNtaXNzaW5nRXh0ZXJuYWxseSk7CiAgICAgdm9pZCBoYW5kbGVBY2NlcHRlZFJlcGxh
Y2VtZW50KE5TU3RyaW5nKiBhY2NlcHRlZFJlcGxhY2VtZW50LCBOU1N0cmluZyogcmVwbGFjZWQs
IE5TU3RyaW5nKiBwcm9wb3NlZFJlcGxhY2VtZW50LCBOU0NvcnJlY3Rpb25JbmRpY2F0b3JUeXBl
KTsKIAogICAgIGJvb2wgbV93YXNEaXNtaXNzZWRFeHRlcm5hbGx5OwotICAgIFdlYkNvcmU6OlJl
YXNvbkZvckRpc21pc3NpbmdDb3JyZWN0aW9uUGFuZWwgbV9yZWFzb25Gb3JEaXNtaXNzaW5nOwor
ICAgIFdlYkNvcmU6OlJlYXNvbkZvckRpc21pc3NpbmdBbHRlcm5hdGl2ZVRleHQgbV9yZWFzb25G
b3JEaXNtaXNzaW5nOwogICAgIFJldGFpblB0cjxXS1ZpZXc+IG1fdmlldzsKICAgICBSZXRhaW5Q
dHI8TlNTdHJpbmc+IG1fcmVzdWx0Rm9yRGlzbWlzc2FsOwogfTsKSW5kZXg6IFNvdXJjZS9XZWJL
aXQyL1VJUHJvY2Vzcy9tYWMvQ29ycmVjdGlvblBhbmVsLm1tCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9XZWJLaXQyL1VJUHJvY2Vzcy9tYWMvQ29ycmVjdGlvblBhbmVsLm1tCShyZXZpc2lvbiAxMTI5
NjEpCisrKyBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvbWFjL0NvcnJlY3Rpb25QYW5lbC5tbQko
d29ya2luZyBjb3B5KQpAQCAtMzMsMTQgKzMzLDE0IEBACiAKIHVzaW5nIG5hbWVzcGFjZSBXZWJD
b3JlOwogCi1zdGF0aWMgaW5saW5lIE5TQ29ycmVjdGlvbkluZGljYXRvclR5cGUgY29ycmVjdGlv
bkluZGljYXRvclR5cGUoQ29ycmVjdGlvblBhbmVsSW5mbzo6UGFuZWxUeXBlIHBhbmVsVHlwZSkK
K3N0YXRpYyBpbmxpbmUgTlNDb3JyZWN0aW9uSW5kaWNhdG9yVHlwZSBjb3JyZWN0aW9uSW5kaWNh
dG9yVHlwZShBbHRlcm5hdGl2ZVRleHRUeXBlIGFsdGVybmF0aXZlVGV4dFR5cGUpCiB7Ci0gICAg
c3dpdGNoIChwYW5lbFR5cGUpIHsKLSAgICBjYXNlIENvcnJlY3Rpb25QYW5lbEluZm86OlBhbmVs
VHlwZUNvcnJlY3Rpb246CisgICAgc3dpdGNoIChhbHRlcm5hdGl2ZVRleHRUeXBlKSB7CisgICAg
Y2FzZSBBbHRlcm5hdGl2ZVRleHRUeXBlQ29ycmVjdGlvbjoKICAgICAgICAgcmV0dXJuIE5TQ29y
cmVjdGlvbkluZGljYXRvclR5cGVEZWZhdWx0OwotICAgIGNhc2UgQ29ycmVjdGlvblBhbmVsSW5m
bzo6UGFuZWxUeXBlUmV2ZXJzaW9uOgorICAgIGNhc2UgQWx0ZXJuYXRpdmVUZXh0VHlwZVJldmVy
c2lvbjoKICAgICAgICAgcmV0dXJuIE5TQ29ycmVjdGlvbkluZGljYXRvclR5cGVSZXZlcnNpb247
Ci0gICAgY2FzZSBDb3JyZWN0aW9uUGFuZWxJbmZvOjpQYW5lbFR5cGVTcGVsbGluZ1N1Z2dlc3Rp
b25zOgorICAgIGNhc2UgQWx0ZXJuYXRpdmVUZXh0VHlwZVNwZWxsaW5nU3VnZ2VzdGlvbnM6CiAg
ICAgICAgIHJldHVybiBOU0NvcnJlY3Rpb25JbmRpY2F0b3JUeXBlR3Vlc3NlczsKICAgICB9CiAg
ICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CkBAIC01MSwxOCArNTEsMTggQEAgbmFtZXNwYWNlIFdl
YktpdCB7CiAKIENvcnJlY3Rpb25QYW5lbDo6Q29ycmVjdGlvblBhbmVsKCkKICAgICA6IG1fd2Fz
RGlzbWlzc2VkRXh0ZXJuYWxseShmYWxzZSkKLSAgICAsIG1fcmVhc29uRm9yRGlzbWlzc2luZyhS
ZWFzb25Gb3JEaXNtaXNzaW5nQ29ycmVjdGlvblBhbmVsSWdub3JlZCkKKyAgICAsIG1fcmVhc29u
Rm9yRGlzbWlzc2luZyhSZWFzb25Gb3JEaXNtaXNzaW5nQWx0ZXJuYXRpdmVUZXh0SWdub3JlZCkK
IHsKIH0KIAogQ29ycmVjdGlvblBhbmVsOjp+Q29ycmVjdGlvblBhbmVsKCkKIHsKLSAgICBkaXNt
aXNzSW50ZXJuYWwoUmVhc29uRm9yRGlzbWlzc2luZ0NvcnJlY3Rpb25QYW5lbElnbm9yZWQsIGZh
bHNlKTsKKyAgICBkaXNtaXNzSW50ZXJuYWwoUmVhc29uRm9yRGlzbWlzc2luZ0FsdGVybmF0aXZl
VGV4dElnbm9yZWQsIGZhbHNlKTsKIH0KIAotdm9pZCBDb3JyZWN0aW9uUGFuZWw6OnNob3coV0tW
aWV3KiB2aWV3LCBDb3JyZWN0aW9uUGFuZWxJbmZvOjpQYW5lbFR5cGUgdHlwZSwgY29uc3QgRmxv
YXRSZWN0JiBib3VuZGluZ0JveE9mUmVwbGFjZWRTdHJpbmcsIGNvbnN0IFN0cmluZyYgcmVwbGFj
ZWRTdHJpbmcsIGNvbnN0IFN0cmluZyYgcmVwbGFjZW1lbnRTdHJpbmcsIGNvbnN0IFZlY3RvcjxT
dHJpbmc+JiBhbHRlcm5hdGl2ZVJlcGxhY2VtZW50U3RyaW5ncykKK3ZvaWQgQ29ycmVjdGlvblBh
bmVsOjpzaG93KFdLVmlldyogdmlldywgQWx0ZXJuYXRpdmVUZXh0VHlwZSB0eXBlLCBjb25zdCBG
bG9hdFJlY3QmIGJvdW5kaW5nQm94T2ZSZXBsYWNlZFN0cmluZywgY29uc3QgU3RyaW5nJiByZXBs
YWNlZFN0cmluZywgY29uc3QgU3RyaW5nJiByZXBsYWNlbWVudFN0cmluZywgY29uc3QgVmVjdG9y
PFN0cmluZz4mIGFsdGVybmF0aXZlUmVwbGFjZW1lbnRTdHJpbmdzKQogewotICAgIGRpc21pc3NJ
bnRlcm5hbChSZWFzb25Gb3JEaXNtaXNzaW5nQ29ycmVjdGlvblBhbmVsSWdub3JlZCwgZmFsc2Up
OworICAgIGRpc21pc3NJbnRlcm5hbChSZWFzb25Gb3JEaXNtaXNzaW5nQWx0ZXJuYXRpdmVUZXh0
SWdub3JlZCwgZmFsc2UpOwogICAgIAogICAgIGlmICghdmlldykKICAgICAgICAgcmV0dXJuOwpA
QCAtODYsMTIgKzg2LDEyIEBAIHZvaWQgQ29ycmVjdGlvblBhbmVsOjpzaG93KFdLVmlldyogdmll
dywKICAgICB9XTsKIH0KIAotU3RyaW5nIENvcnJlY3Rpb25QYW5lbDo6ZGlzbWlzcyhSZWFzb25G
b3JEaXNtaXNzaW5nQ29ycmVjdGlvblBhbmVsIHJlYXNvbikKK1N0cmluZyBDb3JyZWN0aW9uUGFu
ZWw6OmRpc21pc3MoUmVhc29uRm9yRGlzbWlzc2luZ0FsdGVybmF0aXZlVGV4dCByZWFzb24pCiB7
CiAgICAgcmV0dXJuIGRpc21pc3NJbnRlcm5hbChyZWFzb24sIHRydWUpOwogfQogCi1TdHJpbmcg
Q29ycmVjdGlvblBhbmVsOjpkaXNtaXNzSW50ZXJuYWwoUmVhc29uRm9yRGlzbWlzc2luZ0NvcnJl
Y3Rpb25QYW5lbCByZWFzb24sIGJvb2wgZGlzbWlzc2luZ0V4dGVybmFsbHkpCitTdHJpbmcgQ29y
cmVjdGlvblBhbmVsOjpkaXNtaXNzSW50ZXJuYWwoUmVhc29uRm9yRGlzbWlzc2luZ0FsdGVybmF0
aXZlVGV4dCByZWFzb24sIGJvb2wgZGlzbWlzc2luZ0V4dGVybmFsbHkpCiB7CiAgICAgaWYgKCFp
c1Nob3dpbmcoKSkKICAgICAgICAgcmV0dXJuIFN0cmluZygpOwpAQCAtMTIxLDcgKzEyMSw3IEBA
IHZvaWQgQ29ycmVjdGlvblBhbmVsOjpoYW5kbGVBY2NlcHRlZFJlcGwKICAgICAgICAgaWYgKGFj
Y2VwdGVkUmVwbGFjZW1lbnQpCiAgICAgICAgICAgICBbc3BlbGxDaGVja2VyIHJlY29yZFJlc3Bv
bnNlOk5TQ29ycmVjdGlvblJlc3BvbnNlQWNjZXB0ZWQgdG9Db3JyZWN0aW9uOmFjY2VwdGVkUmVw
bGFjZW1lbnQgZm9yV29yZDpyZXBsYWNlZCBsYW5ndWFnZTpuaWwgaW5TcGVsbERvY3VtZW50V2l0
aFRhZzpkb2N1bWVudFRhZ107CiAgICAgICAgIGVsc2UgewotICAgICAgICAgICAgaWYgKCFtX3dh
c0Rpc21pc3NlZEV4dGVybmFsbHkgfHwgbV9yZWFzb25Gb3JEaXNtaXNzaW5nID09IFJlYXNvbkZv
ckRpc21pc3NpbmdDb3JyZWN0aW9uUGFuZWxDYW5jZWxsZWQpCisgICAgICAgICAgICBpZiAoIW1f
d2FzRGlzbWlzc2VkRXh0ZXJuYWxseSB8fCBtX3JlYXNvbkZvckRpc21pc3NpbmcgPT0gUmVhc29u
Rm9yRGlzbWlzc2luZ0FsdGVybmF0aXZlVGV4dENhbmNlbGxlZCkKICAgICAgICAgICAgICAgICBb
c3BlbGxDaGVja2VyIHJlY29yZFJlc3BvbnNlOk5TQ29ycmVjdGlvblJlc3BvbnNlUmVqZWN0ZWQg
dG9Db3JyZWN0aW9uOnByb3Bvc2VkUmVwbGFjZW1lbnQgZm9yV29yZDpyZXBsYWNlZCBsYW5ndWFn
ZTpuaWwgaW5TcGVsbERvY3VtZW50V2l0aFRhZzpkb2N1bWVudFRhZ107CiAgICAgICAgICAgICBl
bHNlCiAgICAgICAgICAgICAgICAgW3NwZWxsQ2hlY2tlciByZWNvcmRSZXNwb25zZTpOU0NvcnJl
Y3Rpb25SZXNwb25zZUlnbm9yZWQgdG9Db3JyZWN0aW9uOnByb3Bvc2VkUmVwbGFjZW1lbnQgZm9y
V29yZDpyZXBsYWNlZCBsYW5ndWFnZTpuaWwgaW5TcGVsbERvY3VtZW50V2l0aFRhZzpkb2N1bWVu
dFRhZ107CkluZGV4OiBTb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYkNvcmVTdXBwb3J0L1dl
YkVkaXRvckNsaWVudC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3Mv
V2ViQ29yZVN1cHBvcnQvV2ViRWRpdG9yQ2xpZW50LmgJKHJldmlzaW9uIDExMjk2MSkKKysrIFNv
dXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViQ29yZVN1cHBvcnQvV2ViRWRpdG9yQ2xpZW50LmgJ
KHdvcmtpbmcgY29weSkKQEAgLTE0Myw5ICsxNDMsOSBAQCBwcml2YXRlOgogICAgIHZpcnR1YWwg
dm9pZCBzZXRJbnB1dE1ldGhvZFN0YXRlKGJvb2wgZW5hYmxlZCkgT1ZFUlJJREU7CiAgICAgdmly
dHVhbCB2b2lkIHJlcXVlc3RDaGVja2luZ09mU3RyaW5nKFdlYkNvcmU6OlNwZWxsQ2hlY2tlcios
IGNvbnN0IFdlYkNvcmU6OlRleHRDaGVja2luZ1JlcXVlc3QmKSBPVkVSUklERTsKICNpZiBQTEFU
Rk9STShNQUMpICYmICFkZWZpbmVkKEJVSUxESU5HX09OX1NOT1dfTEVPUEFSRCkKLSAgICB2aXJ0
dWFsIHZvaWQgc2hvd0NvcnJlY3Rpb25QYW5lbChXZWJDb3JlOjpDb3JyZWN0aW9uUGFuZWxJbmZv
OjpQYW5lbFR5cGUsIGNvbnN0IFdlYkNvcmU6OkZsb2F0UmVjdCYgYm91bmRpbmdCb3hPZlJlcGxh
Y2VkU3RyaW5nLCBjb25zdCBTdHJpbmcmIHJlcGxhY2VkU3RyaW5nLCBjb25zdCBTdHJpbmcmIHJl
cGxhY2VtZW50U3RyaW5nLCBjb25zdCBWZWN0b3I8U3RyaW5nPiYgYWx0ZXJuYXRpdmVSZXBsYWNl
bWVudFN0cmluZ3MpIE9WRVJSSURFOwotICAgIHZpcnR1YWwgdm9pZCBkaXNtaXNzQ29ycmVjdGlv
blBhbmVsKFdlYkNvcmU6OlJlYXNvbkZvckRpc21pc3NpbmdDb3JyZWN0aW9uUGFuZWwpIE9WRVJS
SURFOwotICAgIHZpcnR1YWwgU3RyaW5nIGRpc21pc3NDb3JyZWN0aW9uUGFuZWxTb29uKFdlYkNv
cmU6OlJlYXNvbkZvckRpc21pc3NpbmdDb3JyZWN0aW9uUGFuZWwpIE9WRVJSSURFOworICAgIHZp
cnR1YWwgdm9pZCBzaG93Q29ycmVjdGlvblBhbmVsKFdlYkNvcmU6OkFsdGVybmF0aXZlVGV4dFR5
cGUsIGNvbnN0IFdlYkNvcmU6OkZsb2F0UmVjdCYgYm91bmRpbmdCb3hPZlJlcGxhY2VkU3RyaW5n
LCBjb25zdCBTdHJpbmcmIHJlcGxhY2VkU3RyaW5nLCBjb25zdCBTdHJpbmcmIHJlcGxhY2VtZW50
U3RyaW5nLCBjb25zdCBWZWN0b3I8U3RyaW5nPiYgYWx0ZXJuYXRpdmVSZXBsYWNlbWVudFN0cmlu
Z3MpIE9WRVJSSURFOworICAgIHZpcnR1YWwgdm9pZCBkaXNtaXNzQ29ycmVjdGlvblBhbmVsKFdl
YkNvcmU6OlJlYXNvbkZvckRpc21pc3NpbmdBbHRlcm5hdGl2ZVRleHQpIE9WRVJSSURFOworICAg
IHZpcnR1YWwgU3RyaW5nIGRpc21pc3NDb3JyZWN0aW9uUGFuZWxTb29uKFdlYkNvcmU6OlJlYXNv
bkZvckRpc21pc3NpbmdBbHRlcm5hdGl2ZVRleHQpIE9WRVJSSURFOwogICAgIHZpcnR1YWwgdm9p
ZCByZWNvcmRBdXRvY29ycmVjdGlvblJlc3BvbnNlKEF1dG9jb3JyZWN0aW9uUmVzcG9uc2VUeXBl
LCBjb25zdCBTdHJpbmcmIHJlcGxhY2VkU3RyaW5nLCBjb25zdCBTdHJpbmcmIHJlcGxhY2VtZW50
U3RyaW5nKSBPVkVSUklERTsKICNlbmRpZgogI2lmIFBMQVRGT1JNKEdUSykKSW5kZXg6IFNvdXJj
ZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViQ29yZVN1cHBvcnQvbWFjL1dlYkVkaXRvckNsaWVudE1h
Yy5tbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYkNvcmVTdXBw
b3J0L21hYy9XZWJFZGl0b3JDbGllbnRNYWMubW0JKHJldmlzaW9uIDExMjk2MSkKKysrIFNvdXJj
ZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViQ29yZVN1cHBvcnQvbWFjL1dlYkVkaXRvckNsaWVudE1h
Yy5tbQkod29ya2luZyBjb3B5KQpAQCAtMjM5LDE3ICsyMzksMTcgQEAgdm9pZCBXZWJFZGl0b3JD
bGllbnQ6OmNoZWNrVGV4dE9mUGFyYWdyYQogfQogCiAjaWYgIWRlZmluZWQoQlVJTERJTkdfT05f
U05PV19MRU9QQVJEKQotdm9pZCBXZWJFZGl0b3JDbGllbnQ6OnNob3dDb3JyZWN0aW9uUGFuZWwo
V2ViQ29yZTo6Q29ycmVjdGlvblBhbmVsSW5mbzo6UGFuZWxUeXBlIHR5cGUsIGNvbnN0IFdlYkNv
cmU6OkZsb2F0UmVjdCYgYm91bmRpbmdCb3hPZlJlcGxhY2VkU3RyaW5nLCBjb25zdCBTdHJpbmcm
IHJlcGxhY2VkU3RyaW5nLCBjb25zdCBTdHJpbmcmIHJlcGxhY2VtZW50U3RyaW5nLCBjb25zdCBW
ZWN0b3I8U3RyaW5nPiYgYWx0ZXJuYXRpdmVSZXBsYWNlbWVudFN0cmluZ3MpCit2b2lkIFdlYkVk
aXRvckNsaWVudDo6c2hvd0NvcnJlY3Rpb25QYW5lbChXZWJDb3JlOjpBbHRlcm5hdGl2ZVRleHRU
eXBlIHR5cGUsIGNvbnN0IFdlYkNvcmU6OkZsb2F0UmVjdCYgYm91bmRpbmdCb3hPZlJlcGxhY2Vk
U3RyaW5nLCBjb25zdCBTdHJpbmcmIHJlcGxhY2VkU3RyaW5nLCBjb25zdCBTdHJpbmcmIHJlcGxh
Y2VtZW50U3RyaW5nLCBjb25zdCBWZWN0b3I8U3RyaW5nPiYgYWx0ZXJuYXRpdmVSZXBsYWNlbWVu
dFN0cmluZ3MpCiB7CiAgICAgbV9wYWdlLT5zZW5kKE1lc3NhZ2VzOjpXZWJQYWdlUHJveHk6OlNo
b3dDb3JyZWN0aW9uUGFuZWwodHlwZSwgYm91bmRpbmdCb3hPZlJlcGxhY2VkU3RyaW5nLCByZXBs
YWNlZFN0cmluZywgcmVwbGFjZW1lbnRTdHJpbmcsIGFsdGVybmF0aXZlUmVwbGFjZW1lbnRTdHJp
bmdzKSk7CiB9CiAKLXZvaWQgV2ViRWRpdG9yQ2xpZW50OjpkaXNtaXNzQ29ycmVjdGlvblBhbmVs
KFdlYkNvcmU6OlJlYXNvbkZvckRpc21pc3NpbmdDb3JyZWN0aW9uUGFuZWwgcmVhc29uKQordm9p
ZCBXZWJFZGl0b3JDbGllbnQ6OmRpc21pc3NDb3JyZWN0aW9uUGFuZWwoV2ViQ29yZTo6UmVhc29u
Rm9yRGlzbWlzc2luZ0FsdGVybmF0aXZlVGV4dCByZWFzb24pCiB7CiAgICAgbV9wYWdlLT5zZW5k
KE1lc3NhZ2VzOjpXZWJQYWdlUHJveHk6OkRpc21pc3NDb3JyZWN0aW9uUGFuZWwocmVhc29uKSk7
CiB9CiAKLVN0cmluZyBXZWJFZGl0b3JDbGllbnQ6OmRpc21pc3NDb3JyZWN0aW9uUGFuZWxTb29u
KFdlYkNvcmU6OlJlYXNvbkZvckRpc21pc3NpbmdDb3JyZWN0aW9uUGFuZWwgcmVhc29uKQorU3Ry
aW5nIFdlYkVkaXRvckNsaWVudDo6ZGlzbWlzc0NvcnJlY3Rpb25QYW5lbFNvb24oV2ViQ29yZTo6
UmVhc29uRm9yRGlzbWlzc2luZ0FsdGVybmF0aXZlVGV4dCByZWFzb24pCiB7CiAgICAgU3RyaW5n
IHJlc3VsdDsKICAgICBtX3BhZ2UtPnNlbmRTeW5jKE1lc3NhZ2VzOjpXZWJQYWdlUHJveHk6OkRp
c21pc3NDb3JyZWN0aW9uUGFuZWxTb29uKHJlYXNvbiksIE1lc3NhZ2VzOjpXZWJQYWdlUHJveHk6
OkRpc21pc3NDb3JyZWN0aW9uUGFuZWxTb29uOjpSZXBseShyZXN1bHQpKTsKSW5kZXg6IFNvdXJj
ZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9XZWJQYWdlLmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvV2ViUGFnZS5jcHAJKHJldmlzaW9uIDEx
Mjk2MSkKKysrIFNvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9XZWJQYWdlLmNwcAko
d29ya2luZyBjb3B5KQpAQCAtMzAyMCwxMiArMzAyMCwxMiBAQCBib29sIFdlYlBhZ2U6OmNhbkhh
bmRsZVJlcXVlc3QoY29uc3QgV2ViCiB9CiAKICNpZiBQTEFURk9STShNQUMpICYmICFkZWZpbmVk
KEJVSUxESU5HX09OX1NOT1dfTEVPUEFSRCkKLXZvaWQgV2ViUGFnZTo6aGFuZGxlQ29ycmVjdGlv
blBhbmVsUmVzdWx0KGNvbnN0IFN0cmluZyYgcmVzdWx0KQordm9pZCBXZWJQYWdlOjpoYW5kbGVB
bHRlcm5hdGl2ZVRleHRVSVJlc3VsdChjb25zdCBTdHJpbmcmIHJlc3VsdCkKIHsKICAgICBGcmFt
ZSogZnJhbWUgPSBtX3BhZ2UtPmZvY3VzQ29udHJvbGxlcigpLT5mb2N1c2VkT3JNYWluRnJhbWUo
KTsKICAgICBpZiAoIWZyYW1lKQogICAgICAgICByZXR1cm47Ci0gICAgZnJhbWUtPmVkaXRvcigp
LT5oYW5kbGVDb3JyZWN0aW9uUGFuZWxSZXN1bHQocmVzdWx0KTsKKyAgICBmcmFtZS0+ZWRpdG9y
KCktPmhhbmRsZUFsdGVybmF0aXZlVGV4dFVJUmVzdWx0KHJlc3VsdCk7CiB9CiAjZW5kaWYKIApJ
bmRleDogU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL1dlYlBhZ2UuaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvV2ViUGFnZS5oCShyZXZp
c2lvbiAxMTI5NjEpCisrKyBTb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvV2ViUGFn
ZS5oCSh3b3JraW5nIGNvcHkpCkBAIC00ODcsNyArNDg3LDcgQEAgcHVibGljOgogICAgIHZvaWQg
dW5tYXJrQWxsQmFkR3JhbW1hcigpOwogCiAjaWYgUExBVEZPUk0oTUFDKSAmJiAhZGVmaW5lZChC
VUlMRElOR19PTl9TTk9XX0xFT1BBUkQpCi0gICAgdm9pZCBoYW5kbGVDb3JyZWN0aW9uUGFuZWxS
ZXN1bHQoY29uc3QgU3RyaW5nJik7CisgICAgdm9pZCBoYW5kbGVBbHRlcm5hdGl2ZVRleHRVSVJl
c3VsdChjb25zdCBTdHJpbmcmKTsKICNlbmRpZgogCiAgICAgLy8gRm9yIHRlc3RpbmcgcHVycG9z
ZS4KSW5kZXg6IFNvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9XZWJQYWdlLm1lc3Nh
Z2VzLmluCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9X
ZWJQYWdlLm1lc3NhZ2VzLmluCShyZXZpc2lvbiAxMTI5NjEpCisrKyBTb3VyY2UvV2ViS2l0Mi9X
ZWJQcm9jZXNzL1dlYlBhZ2UvV2ViUGFnZS5tZXNzYWdlcy5pbgkod29ya2luZyBjb3B5KQpAQCAt
MjU4LDYgKzI1OCw2IEBAIG1lc3NhZ2VzIC0+IFdlYlBhZ2UgewogI2VuZGlmCiAKICNpZiBQTEFU
Rk9STShNQUMpICYmICFkZWZpbmVkKEJVSUxESU5HX09OX1NOT1dfTEVPUEFSRCkKLSAgICBIYW5k
bGVDb3JyZWN0aW9uUGFuZWxSZXN1bHQoU3RyaW5nIHJlc3VsdCkKKyAgICBIYW5kbGVBbHRlcm5h
dGl2ZVRleHRVSVJlc3VsdChTdHJpbmcgcmVzdWx0KQogI2VuZGlmCiB9CkluZGV4OiBTb3VyY2Uv
V2ViS2l0L21hYy9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9tYWMvQ2hh
bmdlTG9nCShyZXZpc2lvbiAxMTI5NjEpCisrKyBTb3VyY2UvV2ViS2l0L21hYy9DaGFuZ2VMb2cJ
KHdvcmtpbmcgY29weSkKQEAgLTEsMyArMSwzMSBAQAorMjAxMi0wNC0wMiAgSmlhIFB1ICA8anB1
QGFwcGxlLmNvbT4KKworICAgICAgICBSZW5hbWUgU3BlbGxpbmdDb3JyZWN0aW9uQ29udHJvbGxl
ciB0byBBbHRlcm5hdGl2ZVRleHRDb250cm9sbGVyLgorICAgICAgICBodHRwczovL2J1Z3Mud2Vi
a2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9ODI5NDIKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JP
RFkgKE9PUFMhKS4KKworICAgICAgICBUaGVzZSBjaGFuZ2VzIGFyZSBzaW1wbHkgYWRvcHRpbmcg
bmV3IGNsYXNzIG5hbWVzLgorCisgICAgICAgICogV2ViQ29yZVN1cHBvcnQvQ29ycmVjdGlvblBh
bmVsLmg6CisgICAgICAgIChDb3JyZWN0aW9uUGFuZWwpOgorICAgICAgICAqIFdlYkNvcmVTdXBw
b3J0L0NvcnJlY3Rpb25QYW5lbC5tbToKKyAgICAgICAgKGNvcnJlY3Rpb25JbmRpY2F0b3JUeXBl
KToKKyAgICAgICAgKENvcnJlY3Rpb25QYW5lbDo6Q29ycmVjdGlvblBhbmVsKToKKyAgICAgICAg
KENvcnJlY3Rpb25QYW5lbDo6fkNvcnJlY3Rpb25QYW5lbCk6CisgICAgICAgIChDb3JyZWN0aW9u
UGFuZWw6OnNob3cpOgorICAgICAgICAoQ29ycmVjdGlvblBhbmVsOjpkaXNtaXNzKToKKyAgICAg
ICAgKENvcnJlY3Rpb25QYW5lbDo6ZGlzbWlzc0ludGVybmFsKToKKyAgICAgICAgKENvcnJlY3Rp
b25QYW5lbDo6aGFuZGxlQWNjZXB0ZWRSZXBsYWNlbWVudCk6CisgICAgICAgICogV2ViQ29yZVN1
cHBvcnQvV2ViRWRpdG9yQ2xpZW50Lmg6CisgICAgICAgICogV2ViQ29yZVN1cHBvcnQvV2ViRWRp
dG9yQ2xpZW50Lm1tOgorICAgICAgICAoV2ViRWRpdG9yQ2xpZW50Ojp+V2ViRWRpdG9yQ2xpZW50
KToKKyAgICAgICAgKFdlYkVkaXRvckNsaWVudDo6c2hvd0NvcnJlY3Rpb25QYW5lbCk6CisgICAg
ICAgIChXZWJFZGl0b3JDbGllbnQ6OmRpc21pc3NDb3JyZWN0aW9uUGFuZWwpOgorICAgICAgICAo
V2ViRWRpdG9yQ2xpZW50OjpkaXNtaXNzQ29ycmVjdGlvblBhbmVsU29vbik6CisgICAgICAgICog
V2ViVmlldy9XZWJWaWV3Lm1tOgorICAgICAgICAoLVtXZWJWaWV3IGhhbmRsZUNvcnJlY3Rpb25Q
YW5lbFJlc3VsdDpdKToKKwogMjAxMi0wNC0wMSAgSm9uIExlZSAgPGpvbmxlZUBhcHBsZS5jb20+
CiAKICAgICAgICAgUmVuYW1lIG5vdGlmaWNhdGlvbiBwcm9wZXJ0aWVzIGFuZCBmdW5jdGlvbnMK
SW5kZXg6IFNvdXJjZS9XZWJLaXQvbWFjL1dlYkNvcmVTdXBwb3J0L0NvcnJlY3Rpb25QYW5lbC5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvbWFjL1dlYkNvcmVTdXBwb3J0L0NvcnJlY3Rp
b25QYW5lbC5oCShyZXZpc2lvbiAxMTI5NjEpCisrKyBTb3VyY2UvV2ViS2l0L21hYy9XZWJDb3Jl
U3VwcG9ydC9Db3JyZWN0aW9uUGFuZWwuaAkod29ya2luZyBjb3B5KQpAQCAtMjgsNyArMjgsNyBA
QAogCiAjaWYgIWRlZmluZWQoQlVJTERJTkdfT05fTEVPUEFSRCkgJiYgIWRlZmluZWQoQlVJTERJ
TkdfT05fU05PV19MRU9QQVJEKQogI2ltcG9ydCA8QXBwS2l0L05TU3BlbGxDaGVja2VyLmg+Ci0j
aW1wb3J0IDxXZWJDb3JlL1NwZWxsaW5nQ29ycmVjdGlvbkNvbnRyb2xsZXIuaD4KKyNpbXBvcnQg
PFdlYkNvcmUvQWx0ZXJuYXRpdmVUZXh0Q29udHJvbGxlci5oPgogI2ltcG9ydCA8d3RmL1JldGFp
blB0ci5oPgogCiBAY2xhc3MgV2ViVmlldzsKQEAgLTM4LDE3ICszOCwxNyBAQCBjbGFzcyBDb3Jy
ZWN0aW9uUGFuZWwgewogcHVibGljOgogICAgIENvcnJlY3Rpb25QYW5lbCgpOwogICAgIH5Db3Jy
ZWN0aW9uUGFuZWwoKTsKLSAgICB2b2lkIHNob3coV2ViVmlldyosIFdlYkNvcmU6OkNvcnJlY3Rp
b25QYW5lbEluZm86OlBhbmVsVHlwZSwgY29uc3QgV2ViQ29yZTo6RmxvYXRSZWN0JiBib3VuZGlu
Z0JveE9mUmVwbGFjZWRTdHJpbmcsIGNvbnN0IFN0cmluZyYgcmVwbGFjZWRTdHJpbmcsIGNvbnN0
IFN0cmluZyYgcmVwbGFjZW1lbnRTdHJpbmcsIGNvbnN0IFZlY3RvcjxTdHJpbmc+JiBhbHRlcm5h
dGl2ZVJlcGxhY2VtZW50U3RyaW5ncyk7Ci0gICAgU3RyaW5nIGRpc21pc3MoV2ViQ29yZTo6UmVh
c29uRm9yRGlzbWlzc2luZ0NvcnJlY3Rpb25QYW5lbCk7CisgICAgdm9pZCBzaG93KFdlYlZpZXcq
LCBXZWJDb3JlOjpBbHRlcm5hdGl2ZVRleHRUeXBlLCBjb25zdCBXZWJDb3JlOjpGbG9hdFJlY3Qm
IGJvdW5kaW5nQm94T2ZSZXBsYWNlZFN0cmluZywgY29uc3QgU3RyaW5nJiByZXBsYWNlZFN0cmlu
ZywgY29uc3QgU3RyaW5nJiByZXBsYWNlbWVudFN0cmluZywgY29uc3QgVmVjdG9yPFN0cmluZz4m
IGFsdGVybmF0aXZlUmVwbGFjZW1lbnRTdHJpbmdzKTsKKyAgICBTdHJpbmcgZGlzbWlzcyhXZWJD
b3JlOjpSZWFzb25Gb3JEaXNtaXNzaW5nQWx0ZXJuYXRpdmVUZXh0KTsKICAgICBzdGF0aWMgdm9p
ZCByZWNvcmRBdXRvY29ycmVjdGlvblJlc3BvbnNlKFdlYlZpZXcqLCBOU0NvcnJlY3Rpb25SZXNw
b25zZSwgY29uc3QgU3RyaW5nJiByZXBsYWNlZFN0cmluZywgY29uc3QgU3RyaW5nJiByZXBsYWNl
bWVudFN0cmluZyk7CiAKIHByaXZhdGU6CiAgICAgYm9vbCBpc1Nob3dpbmcoKSBjb25zdCB7IHJl
dHVybiBtX3ZpZXc7IH0KLSAgICBTdHJpbmcgZGlzbWlzc0ludGVybmFsKFdlYkNvcmU6OlJlYXNv
bkZvckRpc21pc3NpbmdDb3JyZWN0aW9uUGFuZWwsIGJvb2wgZGlzbWlzc2luZ0V4dGVybmFsbHkp
OworICAgIFN0cmluZyBkaXNtaXNzSW50ZXJuYWwoV2ViQ29yZTo6UmVhc29uRm9yRGlzbWlzc2lu
Z0FsdGVybmF0aXZlVGV4dCwgYm9vbCBkaXNtaXNzaW5nRXh0ZXJuYWxseSk7CiAgICAgdm9pZCBo
YW5kbGVBY2NlcHRlZFJlcGxhY2VtZW50KE5TU3RyaW5nKiBhY2NlcHRlZFJlcGxhY2VtZW50LCBO
U1N0cmluZyogcmVwbGFjZWQsIE5TU3RyaW5nKiBwcm9wb3NlZFJlcGxhY2VtZW50LCBOU0NvcnJl
Y3Rpb25JbmRpY2F0b3JUeXBlKTsKIAogICAgIGJvb2wgbV93YXNEaXNtaXNzZWRFeHRlcm5hbGx5
OwotICAgIFdlYkNvcmU6OlJlYXNvbkZvckRpc21pc3NpbmdDb3JyZWN0aW9uUGFuZWwgbV9yZWFz
b25Gb3JEaXNtaXNzaW5nOworICAgIFdlYkNvcmU6OlJlYXNvbkZvckRpc21pc3NpbmdBbHRlcm5h
dGl2ZVRleHQgbV9yZWFzb25Gb3JEaXNtaXNzaW5nOwogICAgIFJldGFpblB0cjxXZWJWaWV3PiBt
X3ZpZXc7CiAgICAgUmV0YWluUHRyPE5TU3RyaW5nPiBtX3Jlc3VsdEZvckRpc21pc3NhbDsKIH07
CkluZGV4OiBTb3VyY2UvV2ViS2l0L21hYy9XZWJDb3JlU3VwcG9ydC9Db3JyZWN0aW9uUGFuZWwu
bW0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9tYWMvV2ViQ29yZVN1cHBvcnQvQ29ycmVj
dGlvblBhbmVsLm1tCShyZXZpc2lvbiAxMTI5NjEpCisrKyBTb3VyY2UvV2ViS2l0L21hYy9XZWJD
b3JlU3VwcG9ydC9Db3JyZWN0aW9uUGFuZWwubW0JKHdvcmtpbmcgY29weSkKQEAgLTMwLDE0ICsz
MCwxNCBAQAogI2lmICFkZWZpbmVkKEJVSUxESU5HX09OX0xFT1BBUkQpICYmICFkZWZpbmVkKEJV
SUxESU5HX09OX1NOT1dfTEVPUEFSRCkKIHVzaW5nIG5hbWVzcGFjZSBXZWJDb3JlOwogCi1zdGF0
aWMgaW5saW5lIE5TQ29ycmVjdGlvbkluZGljYXRvclR5cGUgY29ycmVjdGlvbkluZGljYXRvclR5
cGUoQ29ycmVjdGlvblBhbmVsSW5mbzo6UGFuZWxUeXBlIHBhbmVsVHlwZSkKK3N0YXRpYyBpbmxp
bmUgTlNDb3JyZWN0aW9uSW5kaWNhdG9yVHlwZSBjb3JyZWN0aW9uSW5kaWNhdG9yVHlwZShBbHRl
cm5hdGl2ZVRleHRUeXBlIGFsdGVybmF0aXZlVGV4dFR5cGUpCiB7Ci0gICAgc3dpdGNoIChwYW5l
bFR5cGUpIHsKLSAgICBjYXNlIENvcnJlY3Rpb25QYW5lbEluZm86OlBhbmVsVHlwZUNvcnJlY3Rp
b246CisgICAgc3dpdGNoIChhbHRlcm5hdGl2ZVRleHRUeXBlKSB7CisgICAgY2FzZSBBbHRlcm5h
dGl2ZVRleHRUeXBlQ29ycmVjdGlvbjoKICAgICAgICAgcmV0dXJuIE5TQ29ycmVjdGlvbkluZGlj
YXRvclR5cGVEZWZhdWx0OwotICAgIGNhc2UgQ29ycmVjdGlvblBhbmVsSW5mbzo6UGFuZWxUeXBl
UmV2ZXJzaW9uOgorICAgIGNhc2UgQWx0ZXJuYXRpdmVUZXh0VHlwZVJldmVyc2lvbjoKICAgICAg
ICAgcmV0dXJuIE5TQ29ycmVjdGlvbkluZGljYXRvclR5cGVSZXZlcnNpb247Ci0gICAgY2FzZSBD
b3JyZWN0aW9uUGFuZWxJbmZvOjpQYW5lbFR5cGVTcGVsbGluZ1N1Z2dlc3Rpb25zOgorICAgIGNh
c2UgQWx0ZXJuYXRpdmVUZXh0VHlwZVNwZWxsaW5nU3VnZ2VzdGlvbnM6CiAgICAgICAgIHJldHVy
biBOU0NvcnJlY3Rpb25JbmRpY2F0b3JUeXBlR3Vlc3NlczsKICAgICB9CiAgICAgQVNTRVJUX05P
VF9SRUFDSEVEKCk7CkBAIC00NiwxOCArNDYsMTggQEAgc3RhdGljIGlubGluZSBOU0NvcnJlY3Rp
b25JbmRpY2F0b3JUeXBlIAogCiBDb3JyZWN0aW9uUGFuZWw6OkNvcnJlY3Rpb25QYW5lbCgpCiAg
ICAgOiBtX3dhc0Rpc21pc3NlZEV4dGVybmFsbHkoZmFsc2UpCi0gICAgLCBtX3JlYXNvbkZvckRp
c21pc3NpbmcoUmVhc29uRm9yRGlzbWlzc2luZ0NvcnJlY3Rpb25QYW5lbElnbm9yZWQpCisgICAg
LCBtX3JlYXNvbkZvckRpc21pc3NpbmcoUmVhc29uRm9yRGlzbWlzc2luZ0FsdGVybmF0aXZlVGV4
dElnbm9yZWQpCiB7CiB9CiAKIENvcnJlY3Rpb25QYW5lbDo6fkNvcnJlY3Rpb25QYW5lbCgpCiB7
Ci0gICAgZGlzbWlzc0ludGVybmFsKFJlYXNvbkZvckRpc21pc3NpbmdDb3JyZWN0aW9uUGFuZWxJ
Z25vcmVkLCBmYWxzZSk7CisgICAgZGlzbWlzc0ludGVybmFsKFJlYXNvbkZvckRpc21pc3NpbmdB
bHRlcm5hdGl2ZVRleHRJZ25vcmVkLCBmYWxzZSk7CiB9CiAKLXZvaWQgQ29ycmVjdGlvblBhbmVs
OjpzaG93KFdlYlZpZXcqIHZpZXcsIENvcnJlY3Rpb25QYW5lbEluZm86OlBhbmVsVHlwZSB0eXBl
LCBjb25zdCBGbG9hdFJlY3QmIGJvdW5kaW5nQm94T2ZSZXBsYWNlZFN0cmluZywgY29uc3QgU3Ry
aW5nJiByZXBsYWNlZFN0cmluZywgY29uc3QgU3RyaW5nJiByZXBsYWNlbWVudFN0cmluZywgY29u
c3QgVmVjdG9yPFN0cmluZz4mIGFsdGVybmF0aXZlUmVwbGFjZW1lbnRTdHJpbmdzKQordm9pZCBD
b3JyZWN0aW9uUGFuZWw6OnNob3coV2ViVmlldyogdmlldywgQWx0ZXJuYXRpdmVUZXh0VHlwZSB0
eXBlLCBjb25zdCBGbG9hdFJlY3QmIGJvdW5kaW5nQm94T2ZSZXBsYWNlZFN0cmluZywgY29uc3Qg
U3RyaW5nJiByZXBsYWNlZFN0cmluZywgY29uc3QgU3RyaW5nJiByZXBsYWNlbWVudFN0cmluZywg
Y29uc3QgVmVjdG9yPFN0cmluZz4mIGFsdGVybmF0aXZlUmVwbGFjZW1lbnRTdHJpbmdzKQogewot
ICAgIGRpc21pc3NJbnRlcm5hbChSZWFzb25Gb3JEaXNtaXNzaW5nQ29ycmVjdGlvblBhbmVsSWdu
b3JlZCwgZmFsc2UpOworICAgIGRpc21pc3NJbnRlcm5hbChSZWFzb25Gb3JEaXNtaXNzaW5nQWx0
ZXJuYXRpdmVUZXh0SWdub3JlZCwgZmFsc2UpOwogICAgIAogICAgIGlmICghdmlldykKICAgICAg
ICAgcmV0dXJuOwpAQCAtODAsMTIgKzgwLDEyIEBAIHZvaWQgQ29ycmVjdGlvblBhbmVsOjpzaG93
KFdlYlZpZXcqIHZpZXcKICAgICB9XTsKIH0KIAotU3RyaW5nIENvcnJlY3Rpb25QYW5lbDo6ZGlz
bWlzcyhSZWFzb25Gb3JEaXNtaXNzaW5nQ29ycmVjdGlvblBhbmVsIHJlYXNvbikKK1N0cmluZyBD
b3JyZWN0aW9uUGFuZWw6OmRpc21pc3MoUmVhc29uRm9yRGlzbWlzc2luZ0FsdGVybmF0aXZlVGV4
dCByZWFzb24pCiB7CiAgICAgcmV0dXJuIGRpc21pc3NJbnRlcm5hbChyZWFzb24sIHRydWUpOwog
fQogCi1TdHJpbmcgQ29ycmVjdGlvblBhbmVsOjpkaXNtaXNzSW50ZXJuYWwoUmVhc29uRm9yRGlz
bWlzc2luZ0NvcnJlY3Rpb25QYW5lbCByZWFzb24sIGJvb2wgZGlzbWlzc2luZ0V4dGVybmFsbHkp
CitTdHJpbmcgQ29ycmVjdGlvblBhbmVsOjpkaXNtaXNzSW50ZXJuYWwoUmVhc29uRm9yRGlzbWlz
c2luZ0FsdGVybmF0aXZlVGV4dCByZWFzb24sIGJvb2wgZGlzbWlzc2luZ0V4dGVybmFsbHkpCiB7
CiAgICAgaWYgKCFpc1Nob3dpbmcoKSkKICAgICAgICAgcmV0dXJuIFN0cmluZygpOwpAQCAtMTE1
LDcgKzExNSw3IEBAIHZvaWQgQ29ycmVjdGlvblBhbmVsOjpoYW5kbGVBY2NlcHRlZFJlcGwKICAg
ICAgICAgaWYgKGFjY2VwdGVkUmVwbGFjZW1lbnQpCiAgICAgICAgICAgICBbc3BlbGxDaGVja2Vy
IHJlY29yZFJlc3BvbnNlOk5TQ29ycmVjdGlvblJlc3BvbnNlQWNjZXB0ZWQgdG9Db3JyZWN0aW9u
OmFjY2VwdGVkUmVwbGFjZW1lbnQgZm9yV29yZDpyZXBsYWNlZCBsYW5ndWFnZTpuaWwgaW5TcGVs
bERvY3VtZW50V2l0aFRhZzpkb2N1bWVudFRhZ107CiAgICAgICAgIGVsc2UgewotICAgICAgICAg
ICAgaWYgKCFtX3dhc0Rpc21pc3NlZEV4dGVybmFsbHkgfHwgbV9yZWFzb25Gb3JEaXNtaXNzaW5n
ID09IFJlYXNvbkZvckRpc21pc3NpbmdDb3JyZWN0aW9uUGFuZWxDYW5jZWxsZWQpCisgICAgICAg
ICAgICBpZiAoIW1fd2FzRGlzbWlzc2VkRXh0ZXJuYWxseSB8fCBtX3JlYXNvbkZvckRpc21pc3Np
bmcgPT0gUmVhc29uRm9yRGlzbWlzc2luZ0FsdGVybmF0aXZlVGV4dENhbmNlbGxlZCkKICAgICAg
ICAgICAgICAgICBbc3BlbGxDaGVja2VyIHJlY29yZFJlc3BvbnNlOk5TQ29ycmVjdGlvblJlc3Bv
bnNlUmVqZWN0ZWQgdG9Db3JyZWN0aW9uOnByb3Bvc2VkUmVwbGFjZW1lbnQgZm9yV29yZDpyZXBs
YWNlZCBsYW5ndWFnZTpuaWwgaW5TcGVsbERvY3VtZW50V2l0aFRhZzpkb2N1bWVudFRhZ107CiAg
ICAgICAgICAgICBlbHNlCiAgICAgICAgICAgICAgICAgW3NwZWxsQ2hlY2tlciByZWNvcmRSZXNw
b25zZTpOU0NvcnJlY3Rpb25SZXNwb25zZUlnbm9yZWQgdG9Db3JyZWN0aW9uOnByb3Bvc2VkUmVw
bGFjZW1lbnQgZm9yV29yZDpyZXBsYWNlZCBsYW5ndWFnZTpuaWwgaW5TcGVsbERvY3VtZW50V2l0
aFRhZzpkb2N1bWVudFRhZ107CkluZGV4OiBTb3VyY2UvV2ViS2l0L21hYy9XZWJDb3JlU3VwcG9y
dC9XZWJFZGl0b3JDbGllbnQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L21hYy9XZWJD
b3JlU3VwcG9ydC9XZWJFZGl0b3JDbGllbnQuaAkocmV2aXNpb24gMTEyOTYxKQorKysgU291cmNl
L1dlYktpdC9tYWMvV2ViQ29yZVN1cHBvcnQvV2ViRWRpdG9yQ2xpZW50LmgJKHdvcmtpbmcgY29w
eSkKQEAgLTEzNyw5ICsxMzcsOSBAQCBwdWJsaWM6CiAgICAgdmlydHVhbCB2b2lkIHNldElucHV0
TWV0aG9kU3RhdGUoYm9vbCBlbmFibGVkKSBPVkVSUklERTsKICAgICB2aXJ0dWFsIHZvaWQgcmVx
dWVzdENoZWNraW5nT2ZTdHJpbmcoV2ViQ29yZTo6U3BlbGxDaGVja2VyKiwgY29uc3QgV2ViQ29y
ZTo6VGV4dENoZWNraW5nUmVxdWVzdCYpIE9WRVJSSURFOwogI2lmICFkZWZpbmVkKEJVSUxESU5H
X09OX0xFT1BBUkQpICYmICFkZWZpbmVkKEJVSUxESU5HX09OX1NOT1dfTEVPUEFSRCkKLSAgICB2
aXJ0dWFsIHZvaWQgc2hvd0NvcnJlY3Rpb25QYW5lbChXZWJDb3JlOjpDb3JyZWN0aW9uUGFuZWxJ
bmZvOjpQYW5lbFR5cGUsIGNvbnN0IFdlYkNvcmU6OkZsb2F0UmVjdCYgYm91bmRpbmdCb3hPZlJl
cGxhY2VkU3RyaW5nLCBjb25zdCBTdHJpbmcmIHJlcGxhY2VkU3RyaW5nLCBjb25zdCBTdHJpbmcm
IHJlcGxhY2VtZW50U3RyaW5nLCBjb25zdCBWZWN0b3I8U3RyaW5nPiYgYWx0ZXJuYXRpdmVSZXBs
YWNlbWVudFN0cmluZ3MpIE9WRVJSSURFOwotICAgIHZpcnR1YWwgdm9pZCBkaXNtaXNzQ29ycmVj
dGlvblBhbmVsKFdlYkNvcmU6OlJlYXNvbkZvckRpc21pc3NpbmdDb3JyZWN0aW9uUGFuZWwpIE9W
RVJSSURFOwotICAgIHZpcnR1YWwgU3RyaW5nIGRpc21pc3NDb3JyZWN0aW9uUGFuZWxTb29uKFdl
YkNvcmU6OlJlYXNvbkZvckRpc21pc3NpbmdDb3JyZWN0aW9uUGFuZWwpIE9WRVJSSURFOworICAg
IHZpcnR1YWwgdm9pZCBzaG93Q29ycmVjdGlvblBhbmVsKFdlYkNvcmU6OkFsdGVybmF0aXZlVGV4
dFR5cGUsIGNvbnN0IFdlYkNvcmU6OkZsb2F0UmVjdCYgYm91bmRpbmdCb3hPZlJlcGxhY2VkU3Ry
aW5nLCBjb25zdCBTdHJpbmcmIHJlcGxhY2VkU3RyaW5nLCBjb25zdCBTdHJpbmcmIHJlcGxhY2Vt
ZW50U3RyaW5nLCBjb25zdCBWZWN0b3I8U3RyaW5nPiYgYWx0ZXJuYXRpdmVSZXBsYWNlbWVudFN0
cmluZ3MpIE9WRVJSSURFOworICAgIHZpcnR1YWwgdm9pZCBkaXNtaXNzQ29ycmVjdGlvblBhbmVs
KFdlYkNvcmU6OlJlYXNvbkZvckRpc21pc3NpbmdBbHRlcm5hdGl2ZVRleHQpIE9WRVJSSURFOwor
ICAgIHZpcnR1YWwgU3RyaW5nIGRpc21pc3NDb3JyZWN0aW9uUGFuZWxTb29uKFdlYkNvcmU6OlJl
YXNvbkZvckRpc21pc3NpbmdBbHRlcm5hdGl2ZVRleHQpIE9WRVJSSURFOwogICAgIHZpcnR1YWwg
dm9pZCByZWNvcmRBdXRvY29ycmVjdGlvblJlc3BvbnNlKEF1dG9jb3JyZWN0aW9uUmVzcG9uc2VU
eXBlLCBjb25zdCBTdHJpbmcmIHJlcGxhY2VkU3RyaW5nLCBjb25zdCBTdHJpbmcmIHJlcGxhY2Vt
ZW50U3RyaW5nKSBPVkVSUklERTsKICNlbmRpZgogcHJpdmF0ZToKSW5kZXg6IFNvdXJjZS9XZWJL
aXQvbWFjL1dlYkNvcmVTdXBwb3J0L1dlYkVkaXRvckNsaWVudC5tbQo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV2ViS2l0L21hYy9XZWJDb3JlU3VwcG9ydC9XZWJFZGl0b3JDbGllbnQubW0JKHJldmlz
aW9uIDExMjk2MSkKKysrIFNvdXJjZS9XZWJLaXQvbWFjL1dlYkNvcmVTdXBwb3J0L1dlYkVkaXRv
ckNsaWVudC5tbQkod29ya2luZyBjb3B5KQpAQCAtMTkwLDcgKzE5MCw3IEBAIFdlYkVkaXRvckNs
aWVudDo6V2ViRWRpdG9yQ2xpZW50KFdlYlZpZXcKIFdlYkVkaXRvckNsaWVudDo6fldlYkVkaXRv
ckNsaWVudCgpCiB7CiAjaWYgIWRlZmluZWQoQlVJTERJTkdfT05fTEVPUEFSRCkgJiYgIWRlZmlu
ZWQoQlVJTERJTkdfT05fU05PV19MRU9QQVJEKQotICAgIGRpc21pc3NDb3JyZWN0aW9uUGFuZWwo
UmVhc29uRm9yRGlzbWlzc2luZ0NvcnJlY3Rpb25QYW5lbElnbm9yZWQpOworICAgIGRpc21pc3ND
b3JyZWN0aW9uUGFuZWwoUmVhc29uRm9yRGlzbWlzc2luZ0FsdGVybmF0aXZlVGV4dElnbm9yZWQp
OwogI2VuZGlmCiB9CiAKQEAgLTg2NywxNyArODY3LDE3IEBAIHZvaWQgV2ViRWRpdG9yQ2xpZW50
Ojp1cGRhdGVTcGVsbGluZ1VJV2kKIH0KIAogI2lmICFkZWZpbmVkKEJVSUxESU5HX09OX0xFT1BB
UkQpICYmICFkZWZpbmVkKEJVSUxESU5HX09OX1NOT1dfTEVPUEFSRCkKLXZvaWQgV2ViRWRpdG9y
Q2xpZW50OjpzaG93Q29ycmVjdGlvblBhbmVsKENvcnJlY3Rpb25QYW5lbEluZm86OlBhbmVsVHlw
ZSBwYW5lbFR5cGUsIGNvbnN0IEZsb2F0UmVjdCYgYm91bmRpbmdCb3hPZlJlcGxhY2VkU3RyaW5n
LCBjb25zdCBTdHJpbmcmIHJlcGxhY2VkU3RyaW5nLCBjb25zdCBTdHJpbmcmIHJlcGxhY2VtZW50
U3RyaW5nLCBjb25zdCBWZWN0b3I8U3RyaW5nPiYgYWx0ZXJuYXRpdmVSZXBsYWNlbWVudFN0cmlu
Z3MpCit2b2lkIFdlYkVkaXRvckNsaWVudDo6c2hvd0NvcnJlY3Rpb25QYW5lbChBbHRlcm5hdGl2
ZVRleHRUeXBlIHBhbmVsVHlwZSwgY29uc3QgRmxvYXRSZWN0JiBib3VuZGluZ0JveE9mUmVwbGFj
ZWRTdHJpbmcsIGNvbnN0IFN0cmluZyYgcmVwbGFjZWRTdHJpbmcsIGNvbnN0IFN0cmluZyYgcmVw
bGFjZW1lbnRTdHJpbmcsIGNvbnN0IFZlY3RvcjxTdHJpbmc+JiBhbHRlcm5hdGl2ZVJlcGxhY2Vt
ZW50U3RyaW5ncykKIHsKICAgICBtX2NvcnJlY3Rpb25QYW5lbC5zaG93KG1fd2ViVmlldywgcGFu
ZWxUeXBlLCBib3VuZGluZ0JveE9mUmVwbGFjZWRTdHJpbmcsIHJlcGxhY2VkU3RyaW5nLCByZXBs
YWNlbWVudFN0cmluZywgYWx0ZXJuYXRpdmVSZXBsYWNlbWVudFN0cmluZ3MpOwogfQogCi12b2lk
IFdlYkVkaXRvckNsaWVudDo6ZGlzbWlzc0NvcnJlY3Rpb25QYW5lbChSZWFzb25Gb3JEaXNtaXNz
aW5nQ29ycmVjdGlvblBhbmVsIHJlYXNvbkZvckRpc21pc3NpbmcpCit2b2lkIFdlYkVkaXRvckNs
aWVudDo6ZGlzbWlzc0NvcnJlY3Rpb25QYW5lbChSZWFzb25Gb3JEaXNtaXNzaW5nQWx0ZXJuYXRp
dmVUZXh0IHJlYXNvbkZvckRpc21pc3NpbmcpCiB7CiAgICAgbV9jb3JyZWN0aW9uUGFuZWwuZGlz
bWlzcyhyZWFzb25Gb3JEaXNtaXNzaW5nKTsKIH0KIAotU3RyaW5nIFdlYkVkaXRvckNsaWVudDo6
ZGlzbWlzc0NvcnJlY3Rpb25QYW5lbFNvb24oUmVhc29uRm9yRGlzbWlzc2luZ0NvcnJlY3Rpb25Q
YW5lbCByZWFzb25Gb3JEaXNtaXNzaW5nKQorU3RyaW5nIFdlYkVkaXRvckNsaWVudDo6ZGlzbWlz
c0NvcnJlY3Rpb25QYW5lbFNvb24oUmVhc29uRm9yRGlzbWlzc2luZ0FsdGVybmF0aXZlVGV4dCBy
ZWFzb25Gb3JEaXNtaXNzaW5nKQogewogICAgIHJldHVybiBtX2NvcnJlY3Rpb25QYW5lbC5kaXNt
aXNzKHJlYXNvbkZvckRpc21pc3NpbmcpOwogfQpJbmRleDogU291cmNlL1dlYktpdC9tYWMvV2Vi
Vmlldy9XZWJWaWV3Lm1tCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvbWFjL1dlYlZpZXcv
V2ViVmlldy5tbQkocmV2aXNpb24gMTEyOTYxKQorKysgU291cmNlL1dlYktpdC9tYWMvV2ViVmll
dy9XZWJWaWV3Lm1tCSh3b3JraW5nIGNvcHkpCkBAIC01NDg4LDcgKzU0ODgsNyBAQCAtICh2b2lk
KWhhbmRsZUNvcnJlY3Rpb25QYW5lbFJlc3VsdDooTlNTCiAgICAgV2ViRnJhbWUgKndlYkZyYW1l
ID0gW3NlbGYgX3NlbGVjdGVkT3JNYWluRnJhbWVdOwogICAgIEZyYW1lKiBjb3JlRnJhbWUgPSBj
b3JlKHdlYkZyYW1lKTsKICAgICBpZiAoY29yZUZyYW1lKQotICAgICAgICBjb3JlRnJhbWUtPmVk
aXRvcigpLT5oYW5kbGVDb3JyZWN0aW9uUGFuZWxSZXN1bHQocmVzdWx0KTsKKyAgICAgICAgY29y
ZUZyYW1lLT5lZGl0b3IoKS0+aGFuZGxlQWx0ZXJuYXRpdmVUZXh0VUlSZXN1bHQocmVzdWx0KTsK
IH0KICNlbmRpZgogCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>135254</attachid>
            <date>2012-04-02 18:55:33 -0700</date>
            <delta_ts>2012-04-02 18:59:36 -0700</delta_ts>
            <desc>Attempt to fix gtk build.</desc>
            <filename>bug-82942-20120402185531.patch</filename>
            <type>text/plain</type>
            <size>182734</size>
            <attacher name="Jia Pu">jiapu.mail</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDExMjk2MSkKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDEwNyBAQAorMjAxMi0wNC0wMiAgSmlhIFB1
ICA8anB1QGFwcGxlLmNvbT4KKworICAgICAgICBSZW5hbWUgU3BlbGxpbmdDb3JyZWN0aW9uQ29u
dHJvbGxlciB0byBBbHRlcm5hdGl2ZVRleHRDb250cm9sbGVyLgorICAgICAgICBodHRwczovL2J1
Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9ODI5NDIKKworICAgICAgICBSZXZpZXdlZCBi
eSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBObyBuZXcgdGVzdHMsIHNpbmNlIHRoZXJlJ3Mg
bm8gY2hhbmdlIG9mIGZ1bmNhdGlvbmFsaXRpZXMuCisKKyAgICAgICAgVGhpcyBwYXRjaCByZW5h
bWVzIFNwZWxsaW5nQ29ycmVjdGlvbkNvbnRyb2xsZXIgdG8gQWx0ZXJuYXRpdmVUZXh0Q29udHJv
bGxlciwgQ29ycmVjdGlvblBhbmVsSW5mbyB0bworICAgICAgICBBbHRlcm5hdGl2ZVRleHRJbmZv
LCBDb3JyZWN0aW9uUGFuZWxJbmZvOjpDb3JyZXRpb25QYW5lbFR5cGUgdG8gQWx0ZXJuYXRpdmVU
ZXh0VHlwZSwgYW5kIFJlYXNvbkZvckRpc21pc3NpbmdDb3JyZWN0aW9uUGFuZWwKKyAgICAgICAg
dG8gUmVhc29uRm9yRGlzbWlzc2luZ0FsdGVybmF0aXZlVGV4dC4gQWxsIHRoZXNlIHJlbmFtaW5n
IHJlZmxlY3RzIHRoZSBmYWN0IHRoYXQgdGhpcyBjbGFzcyBjb250cm9scyBjaGFuZ2UKKyAgICAg
ICAgb2YgdGV4dCBjYXVzZWQgYnkgYm90aCBzcGVsbCBjaGVja2luZyBhbmQgYWx0ZXJuYXRpdmUg
ZGljdGF0aW9uIHJlc3VsdHMuIEl0IGFsc28gcmVuYW1lcyBhIGNvdXBsZSBvZiBmdW5jdGlvbnMK
KyAgICAgICAgaW4gdGhlIG9yaWdpbmFsIFNwZWxsaW5nQ29ycmVjdGlvbkNvbnRyb2xsZXIgY2xh
c3MgZm9yIHRoZSBzYW1lIHJlYXNvbi4KKworICAgICAgICBTcGVsbGluZ0NvcnJlY3Rpb25QYW5l
bDo6cmVwbGFjZW1lbnRTdHJpbmcgaGFzIGJlZW4gcmVwbGFjZWQgYnkgQWx0ZXJuYXRpdmVUZXh0
SW5mbzo6ZGV0YWlscyB3aGljaCBpcyBhbiBvYmplY3QKKyAgICAgICAgdGhhdCBjYW4gYmUgaW5z
dGFudGlhdGVkIHdpdGggZGlmZmVyZW50IHN1YmNsYXNzZXMuCisKKyAgICAgICAgKiBDTWFrZUxp
c3RzLnR4dDoKKyAgICAgICAgKiBHTlVtYWtlZmlsZS5saXN0LmFtOgorICAgICAgICAqIFRhcmdl
dC5wcmk6CisgICAgICAgICogV2ViQ29yZS5leHAuaW46CisgICAgICAgICogV2ViQ29yZS5neXBp
OgorICAgICAgICAqIFdlYkNvcmUudmNwcm9qL1dlYkNvcmUudmNwcm9qOgorICAgICAgICAqIFdl
YkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvajoKKyAgICAgICAgKiBlZGl0aW5nL0FsdGVy
bmF0aXZlVGV4dENvbnRyb2xsZXIuY3BwOiBDb3BpZWQgZnJvbSBTb3VyY2UvV2ViQ29yZS9lZGl0
aW5nL1NwZWxsaW5nQ29ycmVjdGlvbkNvbnRyb2xsZXIuY3BwLgorICAgICAgICAoQXV0b2NvcnJl
Y3Rpb25BbHRlcm5hdGl2ZURldGFpbHMpOgorICAgICAgICAoV2ViQ29yZTo6QXV0b2NvcnJlY3Rp
b25BbHRlcm5hdGl2ZURldGFpbHM6OmNyZWF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpBdXRvY29y
cmVjdGlvbkFsdGVybmF0aXZlRGV0YWlsczo6cmVwbGFjZW1lbnRTdHJpbmcpOgorICAgICAgICAo
V2ViQ29yZTo6QXV0b2NvcnJlY3Rpb25BbHRlcm5hdGl2ZURldGFpbHM6OkF1dG9jb3JyZWN0aW9u
QWx0ZXJuYXRpdmVEZXRhaWxzKToKKyAgICAgICAgKFdlYkNvcmUpOgorICAgICAgICAoV2ViQ29y
ZTo6QWx0ZXJuYXRpdmVUZXh0Q29udHJvbGxlcjo6QWx0ZXJuYXRpdmVUZXh0Q29udHJvbGxlcik6
CisgICAgICAgIChXZWJDb3JlOjpBbHRlcm5hdGl2ZVRleHRDb250cm9sbGVyOjp+QWx0ZXJuYXRp
dmVUZXh0Q29udHJvbGxlcik6CisgICAgICAgIChXZWJDb3JlOjpBbHRlcm5hdGl2ZVRleHRDb250
cm9sbGVyOjpzdGFydEFsdGVybmF0aXZlVGV4dFVJVGltZXIpOgorICAgICAgICAoV2ViQ29yZTo6
QWx0ZXJuYXRpdmVUZXh0Q29udHJvbGxlcjo6c3RvcEFsdGVybmF0aXZlVGV4dFVJVGltZXIpOgor
ICAgICAgICAoV2ViQ29yZTo6QWx0ZXJuYXRpdmVUZXh0Q29udHJvbGxlcjo6c3RvcFBlbmRpbmdD
b3JyZWN0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OkFsdGVybmF0aXZlVGV4dENvbnRyb2xsZXI6
OmFwcGx5UGVuZGluZ0NvcnJlY3Rpb24pOgorICAgICAgICAoV2ViQ29yZTo6QWx0ZXJuYXRpdmVU
ZXh0Q29udHJvbGxlcjo6aGFzUGVuZGluZ0NvcnJlY3Rpb24pOgorICAgICAgICAoV2ViQ29yZTo6
QWx0ZXJuYXRpdmVUZXh0Q29udHJvbGxlcjo6aXNTcGVsbGluZ01hcmtlckFsbG93ZWQpOgorICAg
ICAgICAoV2ViQ29yZTo6QWx0ZXJuYXRpdmVUZXh0Q29udHJvbGxlcjo6c2hvdyk6CisgICAgICAg
IChXZWJDb3JlOjpBbHRlcm5hdGl2ZVRleHRDb250cm9sbGVyOjpoYW5kbGVDYW5jZWxPcGVyYXRp
b24pOgorICAgICAgICAoV2ViQ29yZTo6QWx0ZXJuYXRpdmVUZXh0Q29udHJvbGxlcjo6ZGlzbWlz
cyk6CisgICAgICAgIChXZWJDb3JlOjpBbHRlcm5hdGl2ZVRleHRDb250cm9sbGVyOjpkaXNtaXNz
U29vbik6CisgICAgICAgIChXZWJDb3JlOjpBbHRlcm5hdGl2ZVRleHRDb250cm9sbGVyOjphcHBs
eUFsdGVybmF0aXZlVGV4dCk6CisgICAgICAgIChXZWJDb3JlOjpBbHRlcm5hdGl2ZVRleHRDb250
cm9sbGVyOjphcHBseUF1dG9jb3JyZWN0aW9uQmVmb3JlVHlwaW5nSWZBcHByb3ByaWF0ZSk6Cisg
ICAgICAgIChXZWJDb3JlOjpBbHRlcm5hdGl2ZVRleHRDb250cm9sbGVyOjpyZXNwb25kVG9VbmFw
cGxpZWRTcGVsbENvcnJlY3Rpb24pOgorICAgICAgICAoV2ViQ29yZTo6QWx0ZXJuYXRpdmVUZXh0
Q29udHJvbGxlcjo6dGltZXJGaXJlZCk6CisgICAgICAgIChXZWJDb3JlOjpBbHRlcm5hdGl2ZVRl
eHRDb250cm9sbGVyOjpoYW5kbGVBbHRlcm5hdGl2ZVRleHRVSVJlc3VsdCk6CisgICAgICAgIChX
ZWJDb3JlOjpBbHRlcm5hdGl2ZVRleHRDb250cm9sbGVyOjppc0F1dG9tYXRpY1NwZWxsaW5nQ29y
cmVjdGlvbkVuYWJsZWQpOgorICAgICAgICAoV2ViQ29yZTo6QWx0ZXJuYXRpdmVUZXh0Q29udHJv
bGxlcjo6cm9vdFZpZXdSZWN0Rm9yUmFuZ2UpOgorICAgICAgICAoV2ViQ29yZTo6QWx0ZXJuYXRp
dmVUZXh0Q29udHJvbGxlcjo6cmVzcG9uZFRvQ2hhbmdlZFNlbGVjdGlvbik6CisgICAgICAgIChX
ZWJDb3JlOjpBbHRlcm5hdGl2ZVRleHRDb250cm9sbGVyOjpyZXNwb25kVG9BcHBsaWVkRWRpdGlu
Zyk6CisgICAgICAgIChXZWJDb3JlOjpBbHRlcm5hdGl2ZVRleHRDb250cm9sbGVyOjpyZXNwb25k
VG9VbmFwcGxpZWRFZGl0aW5nKToKKyAgICAgICAgKFdlYkNvcmU6OkFsdGVybmF0aXZlVGV4dENv
bnRyb2xsZXI6OmNsaWVudCk6CisgICAgICAgIChXZWJDb3JlOjpBbHRlcm5hdGl2ZVRleHRDb250
cm9sbGVyOjp0ZXh0Q2hlY2tlcik6CisgICAgICAgIChXZWJDb3JlOjpBbHRlcm5hdGl2ZVRleHRD
b250cm9sbGVyOjpyZWNvcmRBdXRvY29ycmVjdGlvblJlc3BvbnNlUmV2ZXJzZWQpOgorICAgICAg
ICAoV2ViQ29yZTo6QWx0ZXJuYXRpdmVUZXh0Q29udHJvbGxlcjo6bWFya1JldmVyc2VkKToKKyAg
ICAgICAgKFdlYkNvcmU6OkFsdGVybmF0aXZlVGV4dENvbnRyb2xsZXI6Om1hcmtDb3JyZWN0aW9u
KToKKyAgICAgICAgKFdlYkNvcmU6OkFsdGVybmF0aXZlVGV4dENvbnRyb2xsZXI6OnJlY29yZFNw
ZWxsY2hlY2tlclJlc3BvbnNlRm9yTW9kaWZpZWRDb3JyZWN0aW9uKToKKyAgICAgICAgKFdlYkNv
cmU6OkFsdGVybmF0aXZlVGV4dENvbnRyb2xsZXI6OmRlbGV0ZWRBdXRvY29ycmVjdGlvbkF0UG9z
aXRpb24pOgorICAgICAgICAoV2ViQ29yZTo6QWx0ZXJuYXRpdmVUZXh0Q29udHJvbGxlcjo6bWFy
a1ByZWNlZGluZ1doaXRlc3BhY2VGb3JEZWxldGVkQXV0b2NvcnJlY3Rpb25BZnRlckNvbW1hbmQp
OgorICAgICAgICAoV2ViQ29yZTo6QWx0ZXJuYXRpdmVUZXh0Q29udHJvbGxlcjo6cHJvY2Vzc01h
cmtlcnNPblRleHRUb0JlUmVwbGFjZWRCeVJlc3VsdCk6CisgICAgICAgICogZWRpdGluZy9BbHRl
cm5hdGl2ZVRleHRDb250cm9sbGVyLmg6IENvcGllZCBmcm9tIFNvdXJjZS9XZWJDb3JlL2VkaXRp
bmcvU3BlbGxpbmdDb3JyZWN0aW9uQ29udHJvbGxlci5oLgorICAgICAgICAoQWx0ZXJuYXRpdmVU
ZXh0RGV0YWlscyk6CisgICAgICAgIChXZWJDb3JlOjpBbHRlcm5hdGl2ZVRleHREZXRhaWxzOjpB
bHRlcm5hdGl2ZVRleHREZXRhaWxzKToKKyAgICAgICAgKFdlYkNvcmU6OkFsdGVybmF0aXZlVGV4
dERldGFpbHM6On5BbHRlcm5hdGl2ZVRleHREZXRhaWxzKToKKyAgICAgICAgKFdlYkNvcmUpOgor
ICAgICAgICAoQWx0ZXJuYXRpdmVUZXh0SW5mbyk6CisgICAgICAgIChBbHRlcm5hdGl2ZVRleHRD
b250cm9sbGVyKToKKyAgICAgICAgKFdlYkNvcmU6OkFsdGVybmF0aXZlVGV4dENvbnRyb2xsZXI6
OlVOTEVTU19FTkFCTEVEKToKKyAgICAgICAgKFdlYkNvcmU6OkFsdGVybmF0aXZlVGV4dENvbnRy
b2xsZXI6OnNob3VsZFJlbW92ZU1hcmtlcnNVcG9uRWRpdGluZyk6CisgICAgICAgICogZWRpdGlu
Zy9FZGl0b3IuY3BwOgorICAgICAgICAoV2ViQ29yZTo6RWRpdG9yOjpyZXNwb25kVG9DaGFuZ2Vk
U2VsZWN0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OkVkaXRvcjo6YXBwbGllZEVkaXRpbmcpOgor
ICAgICAgICAoV2ViQ29yZTo6RWRpdG9yOjp1bmFwcGxpZWRFZGl0aW5nKToKKyAgICAgICAgKFdl
YkNvcmU6OkVkaXRvcjo6RWRpdG9yKToKKyAgICAgICAgKFdlYkNvcmU6OkVkaXRvcjo6aW5zZXJ0
VGV4dFdpdGhvdXRTZW5kaW5nVGV4dEV2ZW50KToKKyAgICAgICAgKFdlYkNvcmU6OkVkaXRvcjo6
aW5zZXJ0TGluZUJyZWFrKToKKyAgICAgICAgKFdlYkNvcmU6OkVkaXRvcjo6aW5zZXJ0UGFyYWdy
YXBoU2VwYXJhdG9yKToKKyAgICAgICAgKFdlYkNvcmU6OkVkaXRvcjo6aXNBdXRvbWF0aWNTcGVs
bGluZ0NvcnJlY3Rpb25FbmFibGVkKToKKyAgICAgICAgKFdlYkNvcmU6OkVkaXRvcjo6bWFya01p
c3NwZWxsaW5nc0FmdGVyVHlwaW5nVG9Xb3JkKToKKyAgICAgICAgKFdlYkNvcmU6OkVkaXRvcjo6
bWFya0FsbE1pc3NwZWxsaW5nc0FuZEJhZEdyYW1tYXJJblJhbmdlcyk6CisgICAgICAgIChXZWJD
b3JlOjpFZGl0b3I6Om1hcmtBbmRSZXBsYWNlRm9yKToKKyAgICAgICAgKFdlYkNvcmU6OkVkaXRv
cjo6Y2hhbmdlQmFja1RvUmVwbGFjZWRTdHJpbmcpOgorICAgICAgICAoV2ViQ29yZTo6RWRpdG9y
Ojp1bmFwcGxpZWRTcGVsbENvcnJlY3Rpb24pOgorICAgICAgICAoV2ViQ29yZTo6RWRpdG9yOjp1
cGRhdGVNYXJrZXJzRm9yV29yZHNBZmZlY3RlZEJ5RWRpdGluZyk6CisgICAgICAgIChXZWJDb3Jl
OjpFZGl0b3I6OmRlbGV0ZWRBdXRvY29ycmVjdGlvbkF0UG9zaXRpb24pOgorICAgICAgICAoV2Vi
Q29yZTo6RWRpdG9yOjpzdGFydEFsdGVybmF0aXZlVGV4dFVJVGltZXIpOgorICAgICAgICAoV2Vi
Q29yZTo6RWRpdG9yOjpoYW5kbGVBbHRlcm5hdGl2ZVRleHRVSVJlc3VsdCk6CisgICAgICAgIChX
ZWJDb3JlOjpFZGl0b3I6OmRpc21pc3NDb3JyZWN0aW9uUGFuZWxBc0lnbm9yZWQpOgorICAgICAg
ICAqIGVkaXRpbmcvRWRpdG9yLmg6CisgICAgICAgIChXZWJDb3JlKToKKyAgICAgICAgKEVkaXRv
cik6CisgICAgICAgICogZWRpdGluZy9TcGVsbGluZ0NvcnJlY3Rpb25Db21tYW5kLmNwcDoKKyAg
ICAgICAgKiBlZGl0aW5nL1NwZWxsaW5nQ29ycmVjdGlvbkNvbnRyb2xsZXIuY3BwOiBSZW1vdmVk
LgorICAgICAgICAqIGVkaXRpbmcvU3BlbGxpbmdDb3JyZWN0aW9uQ29udHJvbGxlci5oOiBSZW1v
dmVkLgorICAgICAgICAqIGVkaXRpbmcvVHlwaW5nQ29tbWFuZC5jcHA6CisgICAgICAgIChXZWJD
b3JlOjpUeXBpbmdDb21tYW5kOjptYXJrTWlzc3BlbGxpbmdzQWZ0ZXJUeXBpbmcpOgorICAgICAg
ICAqIGxvYWRlci9FbXB0eUNsaWVudHMuaDoKKyAgICAgICAgKFdlYkNvcmU6OkVtcHR5RWRpdG9y
Q2xpZW50OjpzaG93Q29ycmVjdGlvblBhbmVsKToKKyAgICAgICAgKFdlYkNvcmU6OkVtcHR5RWRp
dG9yQ2xpZW50OjpkaXNtaXNzQ29ycmVjdGlvblBhbmVsKToKKyAgICAgICAgKFdlYkNvcmU6OkVt
cHR5RWRpdG9yQ2xpZW50OjpkaXNtaXNzQ29ycmVjdGlvblBhbmVsU29vbik6CisgICAgICAgICog
cGFnZS9FZGl0b3JDbGllbnQuaDoKKwogMjAxMi0wNC0wMiAgRGFuaWVsIENoZW5nICA8ZGNoZW5n
QGNocm9taXVtLm9yZz4KIAogICAgICAgICBIYXZpbmcgYSBkcm9wIGhhbmRsZXIgcHJldmVudHMg
bmF2aWdhdGlvbiBvbiBkcm9wIGV2ZW4gaWYgZXZlbnQgaXMgbm90IGNhbmNlbGxlZApJbmRleDog
U291cmNlL1dlYkNvcmUvQ01ha2VMaXN0cy50eHQKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNv
cmUvQ01ha2VMaXN0cy50eHQJKHJldmlzaW9uIDExMjk2MSkKKysrIFNvdXJjZS9XZWJDb3JlL0NN
YWtlTGlzdHMudHh0CSh3b3JraW5nIGNvcHkpCkBAIC02NTQsNiArNjU0LDcgQEAgU0VUKFdlYkNv
cmVfU09VUkNFUwogCiAgICAgZG9tL2RlZmF1bHQvUGxhdGZvcm1NZXNzYWdlUG9ydENoYW5uZWwu
Y3BwCiAKKyAgICBlZGl0aW5nL0FsdGVybmF0aXZlVGV4dENvbnRyb2xsZXIuY3BwCiAgICAgZWRp
dGluZy9BcHBlbmROb2RlQ29tbWFuZC5jcHAKICAgICBlZGl0aW5nL0FwcGx5QmxvY2tFbGVtZW50
Q29tbWFuZC5jcHAKICAgICBlZGl0aW5nL0FwcGx5U3R5bGVDb21tYW5kLmNwcApAQCAtNjkzLDcg
KzY5NCw2IEBAIFNFVChXZWJDb3JlX1NPVVJDRVMKICAgICBlZGl0aW5nL1NldFNlbGVjdGlvbkNv
bW1hbmQuY3BwCiAgICAgZWRpdGluZy9TbWFydFJlcGxhY2UuY3BwCiAgICAgZWRpdGluZy9TcGVs
bENoZWNrZXIuY3BwCi0gICAgZWRpdGluZy9TcGVsbGluZ0NvcnJlY3Rpb25Db250cm9sbGVyLmNw
cAogICAgIGVkaXRpbmcvU3BlbGxpbmdDb3JyZWN0aW9uQ29tbWFuZC5jcHAKICAgICBlZGl0aW5n
L1NwbGl0RWxlbWVudENvbW1hbmQuY3BwCiAgICAgZWRpdGluZy9TcGxpdFRleHROb2RlQ29tbWFu
ZC5jcHAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL0dOVW1ha2VmaWxlLmxpc3QuYW0KPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL1dlYkNvcmUvR05VbWFrZWZpbGUubGlzdC5hbQkocmV2aXNpb24gMTEyOTYx
KQorKysgU291cmNlL1dlYkNvcmUvR05VbWFrZWZpbGUubGlzdC5hbQkod29ya2luZyBjb3B5KQpA
QCAtMjAwMCw2ICsyMDAwLDggQEAgd2ViY29yZV9zb3VyY2VzICs9IFwKIAlTb3VyY2UvV2ViQ29y
ZS9kb20vV2hlZWxFdmVudC5oIFwKIAlTb3VyY2UvV2ViQ29yZS9kb20vV2luZG93RXZlbnRDb250
ZXh0LmNwcCBcCiAJU291cmNlL1dlYkNvcmUvZG9tL1dpbmRvd0V2ZW50Q29udGV4dC5oIFwKKwlT
b3VyY2UvV2ViQ29yZS9lZGl0aW5nL0FsdGVybmF0aXZlVGV4dENvbnRyb2xsZXIuY3BwIFwKKwlT
b3VyY2UvV2ViQ29yZS9lZGl0aW5nL0FsdGVybmF0aXZlVGV4dENvbnRyb2xsZXIuaCBcCiAJU291
cmNlL1dlYkNvcmUvZWRpdGluZy9BcHBlbmROb2RlQ29tbWFuZC5jcHAgXAogCVNvdXJjZS9XZWJD
b3JlL2VkaXRpbmcvQXBwZW5kTm9kZUNvbW1hbmQuaCBcCiAJU291cmNlL1dlYkNvcmUvZWRpdGlu
Zy9BcHBseUJsb2NrRWxlbWVudENvbW1hbmQuY3BwIFwKQEAgLTIwODksOCArMjA5MSw2IEBAIHdl
YmNvcmVfc291cmNlcyArPSBcCiAJU291cmNlL1dlYkNvcmUvZWRpdGluZy9TbWFydFJlcGxhY2VJ
Q1UuY3BwIFwKIAlTb3VyY2UvV2ViQ29yZS9lZGl0aW5nL1NwZWxsQ2hlY2tlci5jcHAgXAogCVNv
dXJjZS9XZWJDb3JlL2VkaXRpbmcvU3BlbGxDaGVja2VyLmggXAotCVNvdXJjZS9XZWJDb3JlL2Vk
aXRpbmcvU3BlbGxpbmdDb3JyZWN0aW9uQ29udHJvbGxlci5jcHAgXAotCVNvdXJjZS9XZWJDb3Jl
L2VkaXRpbmcvU3BlbGxpbmdDb3JyZWN0aW9uQ29udHJvbGxlci5oIFwKIAlTb3VyY2UvV2ViQ29y
ZS9lZGl0aW5nL1NwZWxsaW5nQ29ycmVjdGlvbkNvbW1hbmQuY3BwIFwKIAlTb3VyY2UvV2ViQ29y
ZS9lZGl0aW5nL1NwZWxsaW5nQ29ycmVjdGlvbkNvbW1hbmQuaCBcCiAJU291cmNlL1dlYkNvcmUv
ZWRpdGluZy9TcGxpdEVsZW1lbnRDb21tYW5kLmNwcCBcCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9U
YXJnZXQucHJpCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL1RhcmdldC5wcmkJKHJldmlz
aW9uIDExMjk2MSkKKysrIFNvdXJjZS9XZWJDb3JlL1RhcmdldC5wcmkJKHdvcmtpbmcgY29weSkK
QEAgLTYyOCw2ICs2MjgsNyBAQCBTT1VSQ0VTICs9IFwKICAgICBkb20vV2hlZWxFdmVudC5jcHAg
XAogICAgIGRvbS9XaW5kb3dFdmVudENvbnRleHQuY3BwIFwKICAgICBkb20vZGVmYXVsdC9QbGF0
Zm9ybU1lc3NhZ2VQb3J0Q2hhbm5lbC5jcHAgXAorICAgIGVkaXRpbmcvQWx0ZXJuYXRpdmVUZXh0
Q29udHJvbGxlci5jcHAgXAogICAgIGVkaXRpbmcvQXBwZW5kTm9kZUNvbW1hbmQuY3BwIFwKICAg
ICBlZGl0aW5nL0FwcGx5QmxvY2tFbGVtZW50Q29tbWFuZC5jcHAgXAogICAgIGVkaXRpbmcvQXBw
bHlTdHlsZUNvbW1hbmQuY3BwIFwKQEAgLTY2OSw3ICs2NzAsNiBAQCBTT1VSQ0VTICs9IFwKICAg
ICBlZGl0aW5nL1NldFNlbGVjdGlvbkNvbW1hbmQuY3BwIFwKICAgICBlZGl0aW5nL1NwZWxsQ2hl
Y2tlci5jcHAgXAogICAgIGVkaXRpbmcvU3BlbGxpbmdDb3JyZWN0aW9uQ29tbWFuZC5jcHAgXAot
ICAgIGVkaXRpbmcvU3BlbGxpbmdDb3JyZWN0aW9uQ29udHJvbGxlci5jcHAgXAogICAgIGVkaXRp
bmcvU3BsaXRFbGVtZW50Q29tbWFuZC5jcHAgXAogICAgIGVkaXRpbmcvU3BsaXRUZXh0Tm9kZUNv
bW1hbmQuY3BwIFwKICAgICBlZGl0aW5nL1NwbGl0VGV4dE5vZGVDb250YWluaW5nRWxlbWVudENv
bW1hbmQuY3BwIFwKQEAgLTE3NTksNiArMTc1OSw3IEBAIEhFQURFUlMgKz0gXAogICAgIGRvbS9X
ZWJLaXROYW1lZEZsb3cuaCBcCiAgICAgZG9tL1dlYktpdFRyYW5zaXRpb25FdmVudC5oIFwKICAg
ICBkb20vV2hlZWxFdmVudC5oIFwKKyAgICBlZGl0aW5nL0FsdGVybmF0aXZlVGV4dENvbnRyb2xs
ZXIuaCBcCiAgICAgZWRpdGluZy9BcHBlbmROb2RlQ29tbWFuZC5oIFwKICAgICBlZGl0aW5nL0Fw
cGx5QmxvY2tFbGVtZW50Q29tbWFuZC5oIFwKICAgICBlZGl0aW5nL0FwcGx5U3R5bGVDb21tYW5k
LmggXApAQCAtMTgwMCw3ICsxODAxLDYgQEAgSEVBREVSUyArPSBcCiAgICAgZWRpdGluZy9TZXRO
b2RlQXR0cmlidXRlQ29tbWFuZC5oIFwKICAgICBlZGl0aW5nL1NtYXJ0UmVwbGFjZS5oIFwKICAg
ICBlZGl0aW5nL1NwZWxsaW5nQ29ycmVjdGlvbkNvbW1hbmQuaCBcCi0gICAgZWRpdGluZy9TcGVs
bGluZ0NvcnJlY3Rpb25Db250cm9sbGVyLmggXAogICAgIGVkaXRpbmcvU3BsaXRFbGVtZW50Q29t
bWFuZC5oIFwKICAgICBlZGl0aW5nL1NwbGl0VGV4dE5vZGVDb21tYW5kLmggXAogICAgIGVkaXRp
bmcvU3BsaXRUZXh0Tm9kZUNvbnRhaW5pbmdFbGVtZW50Q29tbWFuZC5oIFwKSW5kZXg6IFNvdXJj
ZS9XZWJDb3JlL1dlYkNvcmUuZXhwLmluCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL1dl
YkNvcmUuZXhwLmluCShyZXZpc2lvbiAxMTI5NjEpCisrKyBTb3VyY2UvV2ViQ29yZS9XZWJDb3Jl
LmV4cC5pbgkod29ya2luZyBjb3B5KQpAQCAtODg3LDExICs4ODcsMTEgQEAgX19aTjdXZWJDb3Jl
NkVkaXRvcjI0cmVwbGFjZVNlbGVjdGlvbldpdAogX19aTjdXZWJDb3JlNkVkaXRvcjI2ZGVjcmVh
c2VTZWxlY3Rpb25MaXN0TGV2ZWxFdgogX19aTjdXZWJDb3JlNkVkaXRvcjI2aW5jcmVhc2VTZWxl
Y3Rpb25MaXN0TGV2ZWxFdgogX19aTjdXZWJDb3JlNkVkaXRvcjI2d3JpdGVTZWxlY3Rpb25Ub1Bh
c3RlYm9hcmRFUktOM1dURjZTdHJpbmdFUktOUzFfNlZlY3RvcklTMl9MbTBFRUUKLV9fWk43V2Vi
Q29yZTZFZGl0b3IyN2hhbmRsZUNvcnJlY3Rpb25QYW5lbFJlc3VsdEVSS04zV1RGNlN0cmluZ0UK
IF9fWk43V2ViQ29yZTZFZGl0b3IyN3JlYWRTZWxlY3Rpb25Gcm9tUGFzdGVib2FyZEVSS04zV1RG
NlN0cmluZ0UKIF9fWk43V2ViQ29yZTZFZGl0b3IyOHJlcGxhY2VTZWxlY3Rpb25XaXRoRnJhZ21l
bnRFTjNXVEYxMFBhc3NSZWZQdHJJTlNfMTZEb2N1bWVudEZyYWdtZW50RUVFYmJiCiBfX1pON1dl
YkNvcmU2RWRpdG9yMjljYW5EZWNyZWFzZVNlbGVjdGlvbkxpc3RMZXZlbEV2CiBfX1pON1dlYkNv
cmU2RWRpdG9yMjljYW5JbmNyZWFzZVNlbGVjdGlvbkxpc3RMZXZlbEV2CitfX1pON1dlYkNvcmU2
RWRpdG9yMjloYW5kbGVBbHRlcm5hdGl2ZVRleHRVSVJlc3VsdEVSS04zV1RGNlN0cmluZ0UKIF9f
Wk43V2ViQ29yZTZFZGl0b3IzMGRlbGV0ZVNlbGVjdGlvbldpdGhTbWFydERlbGV0ZUViCiBfX1pO
N1dlYkNvcmU2RWRpdG9yMzBwYXN0ZUFzUGxhaW5UZXh0QnlwYXNzaW5nREhUTUxFdgogX19aTjdX
ZWJDb3JlNkVkaXRvcjMyZ3Vlc3Nlc0ZvclVuZ3JhbW1hdGljYWxTZWxlY3Rpb25FdgpJbmRleDog
U291cmNlL1dlYkNvcmUvV2ViQ29yZS5neXBpCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3Jl
L1dlYkNvcmUuZ3lwaQkocmV2aXNpb24gMTEyOTYxKQorKysgU291cmNlL1dlYkNvcmUvV2ViQ29y
ZS5neXBpCSh3b3JraW5nIGNvcHkpCkBAIC0yNTAzLDYgKzI1MDMsOCBAQAogICAgICAgICAgICAg
J2Nzcy9XZWJLaXRDU1NTaGFkZXJWYWx1ZS5jcHAnLAogICAgICAgICAgICAgJ2Nzcy9XZWJLaXRD
U1NTaGFkZXJWYWx1ZS5oJywKICAgICAgICAgICAgICdjc3MvV2ViS2l0Q1NTVHJhbnNmb3JtVmFs
dWUuY3BwJywKKyAgICAgICAgICAgICdlZGl0aW5nL0FsdGVybmF0aXZlVGV4dENvbnRyb2xsZXIu
Y3BwJywKKyAgICAgICAgICAgICdlZGl0aW5nL0FsdGVybmF0aXZlVGV4dENvbnRyb2xsZXIuaCcs
CiAgICAgICAgICAgICAnZWRpdGluZy9BcHBlbmROb2RlQ29tbWFuZC5jcHAnLAogICAgICAgICAg
ICAgJ2VkaXRpbmcvQXBwZW5kTm9kZUNvbW1hbmQuaCcsCiAgICAgICAgICAgICAnZWRpdGluZy9B
cHBseUJsb2NrRWxlbWVudENvbW1hbmQuY3BwJywKQEAgLTI1NzIsOCArMjU3NCw2IEBACiAgICAg
ICAgICAgICAnZWRpdGluZy9TbWFydFJlcGxhY2VJQ1UuY3BwJywKICAgICAgICAgICAgICdlZGl0
aW5nL1NwZWxsQ2hlY2tlci5jcHAnLAogICAgICAgICAgICAgJ2VkaXRpbmcvU3BlbGxDaGVja2Vy
LmgnLAotICAgICAgICAgICAgJ2VkaXRpbmcvU3BlbGxpbmdDb3JyZWN0aW9uQ29udHJvbGxlci5j
cHAnLAotICAgICAgICAgICAgJ2VkaXRpbmcvU3BlbGxpbmdDb3JyZWN0aW9uQ29udHJvbGxlci5o
JywKICAgICAgICAgICAgICdlZGl0aW5nL1NwZWxsaW5nQ29ycmVjdGlvbkNvbW1hbmQuY3BwJywK
ICAgICAgICAgICAgICdlZGl0aW5nL1NwZWxsaW5nQ29ycmVjdGlvbkNvbW1hbmQuaCcsCiAgICAg
ICAgICAgICAnZWRpdGluZy9TcGxpdEVsZW1lbnRDb21tYW5kLmNwcCcsCkluZGV4OiBTb3VyY2Uv
V2ViQ29yZS9XZWJDb3JlLnZjcHJvai9XZWJDb3JlLnZjcHJvago9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvV2ViQ29yZS9XZWJDb3JlLnZjcHJvai9XZWJDb3JlLnZjcHJvagkocmV2aXNpb24gMTEyOTYx
KQorKysgU291cmNlL1dlYkNvcmUvV2ViQ29yZS52Y3Byb2ovV2ViQ29yZS52Y3Byb2oJKHdvcmtp
bmcgY29weSkKQEAgLTU0MDc0LDYgKzU0MDc0LDYyIEBACiAJCQkJPgogCQkJPC9GaWxlPgogCQk8
L0ZpbHRlcj4KKwkJPEZpbGUKKwkJCQlSZWxhdGl2ZVBhdGg9Ii4uXGVkaXRpbmdcQWx0ZXJuYXRp
dmVUZXh0Q29udHJvbGxlci5jcHAiCisJCQkJPgorCQkJCTxGaWxlQ29uZmlndXJhdGlvbgorCQkJ
CQlOYW1lPSJEZWJ1Z3xXaW4zMiIKKwkJCQkJRXhjbHVkZWRGcm9tQnVpbGQ9InRydWUiCisJCQkJ
CT4KKwkJCQkJPFRvb2wKKwkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiCisJCQkJCS8+CisJ
CQkJPC9GaWxlQ29uZmlndXJhdGlvbj4KKwkJCQk8RmlsZUNvbmZpZ3VyYXRpb24KKwkJCQkJTmFt
ZT0iUmVsZWFzZXxXaW4zMiIKKwkJCQkJRXhjbHVkZWRGcm9tQnVpbGQ9InRydWUiCisJCQkJCT4K
KwkJCQkJPFRvb2wKKwkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiCisJCQkJCS8+CisJCQkJ
PC9GaWxlQ29uZmlndXJhdGlvbj4KKwkJCQk8RmlsZUNvbmZpZ3VyYXRpb24KKwkJCQkJTmFtZT0i
RGVidWdfQ2Fpcm9fQ0ZMaXRlfFdpbjMyIgorCQkJCQlFeGNsdWRlZEZyb21CdWlsZD0idHJ1ZSIK
KwkJCQkJPgorCQkJCQk8VG9vbAorCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCIKKwkJCQkJ
Lz4KKwkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPgorCQkJCTxGaWxlQ29uZmlndXJhdGlvbgorCQkJ
CQlOYW1lPSJSZWxlYXNlX0NhaXJvX0NGTGl0ZXxXaW4zMiIKKwkJCQkJRXhjbHVkZWRGcm9tQnVp
bGQ9InRydWUiCisJCQkJCT4KKwkJCQkJPFRvb2wKKwkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRv
b2wiCisJCQkJCS8+CisJCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4KKwkJCQk8RmlsZUNvbmZpZ3Vy
YXRpb24KKwkJCQkJTmFtZT0iRGVidWdfQWxsfFdpbjMyIgorCQkJCQlFeGNsdWRlZEZyb21CdWls
ZD0idHJ1ZSIKKwkJCQkJPgorCQkJCQk8VG9vbAorCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9v
bCIKKwkJCQkJLz4KKwkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPgorCQkJCTxGaWxlQ29uZmlndXJh
dGlvbgorCQkJCQlOYW1lPSJSZWxlYXNlX0xUQ0d8V2luMzIiCisJCQkJCUV4Y2x1ZGVkRnJvbUJ1
aWxkPSJ0cnVlIgorCQkJCQk+CisJCQkJCTxUb29sCisJCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJU
b29sIgorCQkJCQkvPgorCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+CisJCQk8L0ZpbGU+CisJCQk8
RmlsZQorCQkJCVJlbGF0aXZlUGF0aD0iLi5cZWRpdGluZ1xBbHRlcm5hdGl2ZVRleHRDb250cm9s
bGVyLmgiCisJCQkJPgorCQkJPC9GaWxlPgogCQk8RmlsdGVyCiAJCQlOYW1lPSJlZGl0aW5nIgog
CQkJPgpAQCAtNTY0NTQsNjIgKzU2NTEwLDYgQEAKIAkJCQk+CiAJCQk8L0ZpbGU+CiAJCQk8Rmls
ZQotCQkJCVJlbGF0aXZlUGF0aD0iLi5cZWRpdGluZ1xTcGVsbGluZ0NvcnJlY3Rpb25Db250cm9s
bGVyLmNwcCIKLQkJCQk+Ci0JCQkJPEZpbGVDb25maWd1cmF0aW9uCi0JCQkJCU5hbWU9IkRlYnVn
fFdpbjMyIgotCQkJCQlFeGNsdWRlZEZyb21CdWlsZD0idHJ1ZSIKLQkJCQkJPgotCQkJCQk8VG9v
bAotCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCIKLQkJCQkJLz4KLQkJCQk8L0ZpbGVDb25m
aWd1cmF0aW9uPgotCQkJCTxGaWxlQ29uZmlndXJhdGlvbgotCQkJCQlOYW1lPSJSZWxlYXNlfFdp
bjMyIgotCQkJCQlFeGNsdWRlZEZyb21CdWlsZD0idHJ1ZSIKLQkJCQkJPgotCQkJCQk8VG9vbAot
CQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCIKLQkJCQkJLz4KLQkJCQk8L0ZpbGVDb25maWd1
cmF0aW9uPgotCQkJCTxGaWxlQ29uZmlndXJhdGlvbgotCQkJCQlOYW1lPSJEZWJ1Z19DYWlyb19D
RkxpdGV8V2luMzIiCi0JCQkJCUV4Y2x1ZGVkRnJvbUJ1aWxkPSJ0cnVlIgotCQkJCQk+Ci0JCQkJ
CTxUb29sCi0JCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIgotCQkJCQkvPgotCQkJCTwvRmls
ZUNvbmZpZ3VyYXRpb24+Ci0JCQkJPEZpbGVDb25maWd1cmF0aW9uCi0JCQkJCU5hbWU9IlJlbGVh
c2VfQ2Fpcm9fQ0ZMaXRlfFdpbjMyIgotCQkJCQlFeGNsdWRlZEZyb21CdWlsZD0idHJ1ZSIKLQkJ
CQkJPgotCQkJCQk8VG9vbAotCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCIKLQkJCQkJLz4K
LQkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPgotCQkJCTxGaWxlQ29uZmlndXJhdGlvbgotCQkJCQlO
YW1lPSJEZWJ1Z19BbGx8V2luMzIiCi0JCQkJCUV4Y2x1ZGVkRnJvbUJ1aWxkPSJ0cnVlIgotCQkJ
CQk+Ci0JCQkJCTxUb29sCi0JCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIgotCQkJCQkvPgot
CQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+Ci0JCQkJPEZpbGVDb25maWd1cmF0aW9uCi0JCQkJCU5h
bWU9IlJlbGVhc2VfTFRDR3xXaW4zMiIKLQkJCQkJRXhjbHVkZWRGcm9tQnVpbGQ9InRydWUiCi0J
CQkJCT4KLQkJCQkJPFRvb2wKLQkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiCi0JCQkJCS8+
Ci0JCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4KLQkJCTwvRmlsZT4KLQkJCTxGaWxlCi0JCQkJUmVs
YXRpdmVQYXRoPSIuLlxlZGl0aW5nXFNwZWxsaW5nQ29ycmVjdGlvbkNvbnRyb2xsZXIuaCIKLQkJ
CQk+Ci0JCQk8L0ZpbGU+Ci0JCQk8RmlsZQogCQkJCVJlbGF0aXZlUGF0aD0iLi5cZWRpdGluZ1xT
cGxpdEVsZW1lbnRDb21tYW5kLmNwcCIKIAkJCQk+CiAJCQkJPEZpbGVDb25maWd1cmF0aW9uCklu
ZGV4OiBTb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhw
cm9qCShyZXZpc2lvbiAxMTI5NjEpCisrKyBTb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJv
ai9wcm9qZWN0LnBieHByb2oJKHdvcmtpbmcgY29weSkKQEAgLTM3MDEsOCArMzcwMSw2IEBACiAJ
CUE2MjJBOEZGMTIyQzQ0QTYwMEE3ODVCMyAvKiBHZW5lcmljQmluZGluZy5oIGluIEhlYWRlcnMg
Ki8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQTYyMkE4RjkxMjJDNDRBNjAwQTc4
NUIzIC8qIEdlbmVyaWNCaW5kaW5nLmggKi87IH07CiAJCUE2RDE2OTYyMTM0NkI0OUIwMDBFQjc3
MCAvKiBTaGFkb3dSb290LmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsg
ZmlsZVJlZiA9IEE2RDE2OTYxMTM0NkI0OUIwMDBFQjc3MCAvKiBTaGFkb3dSb290LmNwcCAqLzsg
fTsKIAkJQTZEMTY5NjQxMzQ2QjRDMTAwMEVCNzcwIC8qIFNoYWRvd1Jvb3QuaCBpbiBIZWFkZXJz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEE2RDE2OTYzMTM0NkI0QzEwMDBF
Qjc3MCAvKiBTaGFkb3dSb290LmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0
ZSwgKTsgfTsgfTsKLQkJQTcwMDVDQ0MxMzMwQzRCQTAwMENDMEJBIC8qIFNwZWxsaW5nQ29ycmVj
dGlvbkNvbnRyb2xsZXIuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gQTcwMDVDQ0ExMzMwQzRCQTAwMENDMEJBIC8qIFNwZWxsaW5nQ29ycmVjdGlvbkNv
bnRyb2xsZXIuY3BwICovOyB9OwotCQlBNzAwNUNDRDEzMzBDNEJBMDAwQ0MwQkEgLyogU3BlbGxp
bmdDb3JyZWN0aW9uQ29udHJvbGxlci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gQTcwMDVDQ0IxMzMwQzRCQTAwMENDMEJBIC8qIFNwZWxsaW5nQ29ycmVj
dGlvbkNvbnRyb2xsZXIuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCAp
OyB9OyB9OwogCQlBNzE1MUJEODEyRjE1NThGMDA1QTBGNjQgLyogVGV4dENoZWNrZXJDbGllbnQu
aCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEE3MTUxQkQ3
MTJGMTU1OEYwMDVBMEY2NCAvKiBUZXh0Q2hlY2tlckNsaWVudC5oICovOyBzZXR0aW5ncyA9IHtB
VFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCUE3MTVFNjUyMTM0QkJCRUMwMEQ4RTcx
MyAvKiBQcm9ncmVzc1NoYWRvd0VsZW1lbnQuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gQTcxNUU2NTAxMzRCQkJFQzAwRDhFNzEzIC8qIFByb2dyZXNz
U2hhZG93RWxlbWVudC5jcHAgKi87IH07CiAJCUE3MTVFNjUzMTM0QkJCRUMwMEQ4RTcxMyAvKiBQ
cm9ncmVzc1NoYWRvd0VsZW1lbnQuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmls
ZTsgZmlsZVJlZiA9IEE3MTVFNjUxMTM0QkJCRUMwMEQ4RTcxMyAvKiBQcm9ncmVzc1NoYWRvd0Vs
ZW1lbnQuaCAqLzsgfTsKQEAgLTU3MzIsNiArNTczMCw4IEBACiAJCUNFQTM5NDlDMTFENDVDREEw
MDMwOTRDRiAvKiBTdGF0aWNIYXNoU2V0Tm9kZUxpc3QuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQ0VBMzk0OUExMUQ0NUNEQTAwMzA5NENGIC8qIFN0
YXRpY0hhc2hTZXROb2RlTGlzdC5jcHAgKi87IH07CiAJCUNFQTM5NDlEMTFENDVDREEwMDMwOTRD
RiAvKiBTdGF0aWNIYXNoU2V0Tm9kZUxpc3QuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1
aWxkRmlsZTsgZmlsZVJlZiA9IENFQTM5NDlCMTFENDVDREEwMDMwOTRDRiAvKiBTdGF0aWNIYXNo
U2V0Tm9kZUxpc3QuaCAqLzsgfTsKIAkJQ0VDQ0ZDM0IxNDE5NzNENTAwMkEwQUMxIC8qIERlY29k
ZUVzY2FwZVNlcXVlbmNlcy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gQ0VDQ0ZDM0ExNDE5NzNENTAwMkEwQUMxIC8qIERlY29kZUVzY2FwZVNlcXVlbmNl
cy5oICovOyB9OworCQlDRURCM0NFRTE1MkE3NEE3MDA4RjM2RDQgLyogQWx0ZXJuYXRpdmVUZXh0
Q29udHJvbGxlci5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVS
ZWYgPSBDRURCM0NFQzE1MkE3NEE3MDA4RjM2RDQgLyogQWx0ZXJuYXRpdmVUZXh0Q29udHJvbGxl
ci5jcHAgKi87IH07CisJCUNFREIzQ0VGMTUyQTc0QTcwMDhGMzZENCAvKiBBbHRlcm5hdGl2ZVRl
eHRDb250cm9sbGVyLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVS
ZWYgPSBDRURCM0NFRDE1MkE3NEE3MDA4RjM2RDQgLyogQWx0ZXJuYXRpdmVUZXh0Q29udHJvbGxl
ci5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCUNF
RjQxOENFMTE3OTY3OEMwMDlEMTEyQyAvKiBWaWV3cG9ydEFyZ3VtZW50cy5jcHAgaW4gU291cmNl
cyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBDRUY0MThDQzExNzk2NzhDMDA5
RDExMkMgLyogVmlld3BvcnRBcmd1bWVudHMuY3BwICovOyB9OwogCQlDRUY0MThDRjExNzk2NzhD
MDA5RDExMkMgLyogVmlld3BvcnRBcmd1bWVudHMuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IENFRjQxOENEMTE3OTY3OEMwMDlEMTEyQyAvKiBWaWV3cG9y
dEFyZ3VtZW50cy5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07
IH07CiAJCUQwMDBFQkEyMTFCREFGRDQwMEM0NzcyNiAvKiBGcmFtZUxvYWRlclN0YXRlTWFjaGlu
ZS5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBEMDAw
RUJBMDExQkRBRkQ0MDBDNDc3MjYgLyogRnJhbWVMb2FkZXJTdGF0ZU1hY2hpbmUuY3BwICovOyB9
OwpAQCAtMTA3MDgsOCArMTA3MDgsNiBAQAogCQlBNjIyQThGOTEyMkM0NEE2MDBBNzg1QjMgLyog
R2VuZXJpY0JpbmRpbmcuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gR2VuZXJp
Y0JpbmRpbmcuaDsgcGF0aCA9IGdlbmVyaWMvR2VuZXJpY0JpbmRpbmcuaDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKIAkJQTZEMTY5NjExMzQ2QjQ5QjAwMEVCNzcwIC8qIFNoYWRvd1Jvb3Qu
Y3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gU2hhZG93Um9vdC5jcHA7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUE2RDE2OTYzMTM0NkI0QzEwMDBFQjc3MCAv
KiBTaGFkb3dSb290LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFNoYWRvd1Jv
b3QuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJQTcwMDVDQ0ExMzMwQzRCQTAwMEND
MEJBIC8qIFNwZWxsaW5nQ29ycmVjdGlvbkNvbnRyb2xsZXIuY3BwICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jcHAuY3BwOyBwYXRoID0gU3BlbGxpbmdDb3JyZWN0aW9uQ29udHJvbGxlci5jcHA7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCUE3MDA1Q0NCMTMzMEM0QkEwMDBDQzBCQSAvKiBT
cGVsbGluZ0NvcnJlY3Rpb25Db250cm9sbGVyLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsg
cGF0aCA9IFNwZWxsaW5nQ29ycmVjdGlvbkNvbnRyb2xsZXIuaDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKIAkJQTcxNTFCRDcxMkYxNTU4RjAwNUEwRjY0IC8qIFRleHRDaGVja2VyQ2xpZW50
LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFRleHRDaGVja2VyQ2xpZW50Lmg7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUE3MTVFNjUwMTM0QkJCRUMwMEQ4RTcxMyAv
KiBQcm9ncmVzc1NoYWRvd0VsZW1lbnQuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3Bw
OyBwYXRoID0gUHJvZ3Jlc3NTaGFkb3dFbGVtZW50LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKIAkJQTcxNUU2NTExMzRCQkJFQzAwRDhFNzEzIC8qIFByb2dyZXNzU2hhZG93RWxlbWVu
dC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBQcm9ncmVzc1NoYWRvd0VsZW1l
bnQuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTEyODI4LDYgKzEyODI2LDggQEAK
IAkJQ0VBMzk0OUExMUQ0NUNEQTAwMzA5NENGIC8qIFN0YXRpY0hhc2hTZXROb2RlTGlzdC5jcHAg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBTdGF0aWNIYXNoU2V0Tm9kZUxp
c3QuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlDRUEzOTQ5QjExRDQ1Q0RBMDAz
MDk0Q0YgLyogU3RhdGljSGFzaFNldE5vZGVMaXN0LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMu
aDsgcGF0aCA9IFN0YXRpY0hhc2hTZXROb2RlTGlzdC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OwogCQlDRUNDRkMzQTE0MTk3M0Q1MDAyQTBBQzEgLyogRGVjb2RlRXNjYXBlU2VxdWVuY2Vz
LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IERlY29kZUVzY2FwZVNlcXVlbmNl
cy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlDRURCM0NFQzE1MkE3NEE3MDA4RjM2
RDQgLyogQWx0ZXJuYXRpdmVUZXh0Q29udHJvbGxlci5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmNwcC5jcHA7IHBhdGggPSBBbHRlcm5hdGl2ZVRleHRDb250cm9sbGVyLmNwcDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKKwkJQ0VEQjNDRUQxNTJBNzRBNzAwOEYzNkQ0IC8qIEFsdGVybmF0
aXZlVGV4dENvbnRyb2xsZXIuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gQWx0
ZXJuYXRpdmVUZXh0Q29udHJvbGxlci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlD
RUY0MThDQzExNzk2NzhDMDA5RDExMkMgLyogVmlld3BvcnRBcmd1bWVudHMuY3BwICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gVmlld3BvcnRBcmd1bWVudHMuY3BwOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlDRUY0MThDRDExNzk2NzhDMDA5RDExMkMgLyogVmll
d3BvcnRBcmd1bWVudHMuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gVmlld3Bv
cnRBcmd1bWVudHMuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJRDAwMEVCQTAxMUJE
QUZENDAwQzQ3NzI2IC8qIEZyYW1lTG9hZGVyU3RhdGVNYWNoaW5lLmNwcCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEZyYW1lTG9hZGVyU3RhdGVNYWNoaW5lLmNwcDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTE2NTkzLDYgKzE2NTkzLDggQEAKIAkJCWlzYSA9
IFBCWEdyb3VwOwogCQkJY2hpbGRyZW4gPSAoCiAJCQkJRUQ1MDFEQzkwQjI0OUYzOTAwQUUxOEQ5
IC8qIG1hYyAqLywKKwkJCQlDRURCM0NFQzE1MkE3NEE3MDA4RjM2RDQgLyogQWx0ZXJuYXRpdmVU
ZXh0Q29udHJvbGxlci5jcHAgKi8sCisJCQkJQ0VEQjNDRUQxNTJBNzRBNzAwOEYzNkQ0IC8qIEFs
dGVybmF0aXZlVGV4dENvbnRyb2xsZXIuaCAqLywKIAkJCQk5MzMwOUQ4NzA5OUU2NDkxMDA1NkU1
ODEgLyogQXBwZW5kTm9kZUNvbW1hbmQuY3BwICovLAogCQkJCTkzMzA5RDg4MDk5RTY0OTEwMDU2
RTU4MSAvKiBBcHBlbmROb2RlQ29tbWFuZC5oICovLAogCQkJCTlCNDE3MDYzMTI1NjYyQjMwMDZC
MjhGQyAvKiBBcHBseUJsb2NrRWxlbWVudENvbW1hbmQuY3BwICovLApAQCAtMTY2ODQsOCArMTY2
ODYsNiBAQAogCQkJCUE3OEZFMTNBMTIzNjZCMTAwMEFDRThEMCAvKiBTcGVsbENoZWNrZXIuaCAq
LywKIAkJCQlCOERCREI0OTEzMEIwRjhBMDBGNUNEQjEgLyogU3BlbGxpbmdDb3JyZWN0aW9uQ29t
bWFuZC5jcHAgKi8sCiAJCQkJQjhEQkRCNEExMzBCMEY4QTAwRjVDREIxIC8qIFNwZWxsaW5nQ29y
cmVjdGlvbkNvbW1hbmQuaCAqLywKLQkJCQlBNzAwNUNDQTEzMzBDNEJBMDAwQ0MwQkEgLyogU3Bl
bGxpbmdDb3JyZWN0aW9uQ29udHJvbGxlci5jcHAgKi8sCi0JCQkJQTcwMDVDQ0IxMzMwQzRCQTAw
MENDMEJBIC8qIFNwZWxsaW5nQ29ycmVjdGlvbkNvbnRyb2xsZXIuaCAqLywKIAkJCQk5MzMwOURD
MjA5OUU2NDkxMDA1NkU1ODEgLyogU3BsaXRFbGVtZW50Q29tbWFuZC5jcHAgKi8sCiAJCQkJOTMz
MDlEQzMwOTlFNjQ5MTAwNTZFNTgxIC8qIFNwbGl0RWxlbWVudENvbW1hbmQuaCAqLywKIAkJCQk5
MzMwOURDNDA5OUU2NDkxMDA1NkU1ODEgLyogU3BsaXRUZXh0Tm9kZUNvbW1hbmQuY3BwICovLApA
QCAtMjE1MTksNiArMjE1MTksNyBAQAogCQkJaXNhID0gUEJYSGVhZGVyc0J1aWxkUGhhc2U7CiAJ
CQlidWlsZEFjdGlvbk1hc2sgPSAyMTQ3NDgzNjQ3OwogCQkJZmlsZXMgPSAoCisJCQkJQ0VEQjND
RUYxNTJBNzRBNzAwOEYzNkQ0IC8qIEFsdGVybmF0aXZlVGV4dENvbnRyb2xsZXIuaCBpbiBIZWFk
ZXJzICovLAogCQkJCUU0QzE3ODlCMEVFNjkwMzgwMDgyNEQ2OSAvKiBDU1NTZWxlY3Rvckxpc3Qu
aCBpbiBIZWFkZXJzICovLAogCQkJCUU0QkJFRDREMTRGQ0RCQTEwMDNGMEI5OCAvKiBTdHlsZVJ1
bGUuaCBpbiBIZWFkZXJzICovLAogCQkJCTk3QkM2OURCMTUwNUYwNzYwMDFCNzRBQyAvKiBBYnN0
cmFjdERhdGFiYXNlLmggaW4gSGVhZGVycyAqLywKQEAgLTI0MTA1LDcgKzI0MTA2LDYgQEAKIAkJ
CQk3NTQxNUIwMDEyOTU4RDVFMDAzQUQ2NjkgLyogU3BlZWNoSW5wdXRSZXN1bHRMaXN0LmggaW4g
SGVhZGVycyAqLywKIAkJCQlBNzhGRTEzQzEyMzY2QjEwMDBBQ0U4RDAgLyogU3BlbGxDaGVja2Vy
LmggaW4gSGVhZGVycyAqLywKIAkJCQlCOERCREI0RTEzMEIwRjhBMDBGNUNEQjEgLyogU3BlbGxp
bmdDb3JyZWN0aW9uQ29tbWFuZC5oIGluIEhlYWRlcnMgKi8sCi0JCQkJQTcwMDVDQ0QxMzMwQzRC
QTAwMENDMEJBIC8qIFNwZWxsaW5nQ29ycmVjdGlvbkNvbnRyb2xsZXIuaCBpbiBIZWFkZXJzICov
LAogCQkJCTkzMzA5RTEyMDk5RTY0OTIwMDU2RTU4MSAvKiBTcGxpdEVsZW1lbnRDb21tYW5kLmgg
aW4gSGVhZGVycyAqLywKIAkJCQk5MzMwOUUxNDA5OUU2NDkyMDA1NkU1ODEgLyogU3BsaXRUZXh0
Tm9kZUNvbW1hbmQuaCBpbiBIZWFkZXJzICovLAogCQkJCTkzMzA5RTE2MDk5RTY0OTIwMDU2RTU4
MSAvKiBTcGxpdFRleHROb2RlQ29udGFpbmluZ0VsZW1lbnRDb21tYW5kLmggaW4gSGVhZGVycyAq
LywKQEAgLTI0NjkzLDEwICsyNDY5MywxMCBAQAogCQkJCTkzRjE5OUVEMDgyNDVFNTkwMDFFOUFC
QyAvKiBYU0xUUHJvY2Vzc29yLmggaW4gSGVhZGVycyAqLywKIAkJCQlFMUJFNTEyRTBDRjZDNTEy
MDAyRUE5NTkgLyogWFNMVFVuaWNvZGVTb3J0LmggaW4gSGVhZGVycyAqLywKIAkJCQk5NzdFMkUw
RjEyRjBGQzlDMDBDMTMzNzkgLyogWFNTQXVkaXRvci5oIGluIEhlYWRlcnMgKi8sCi0gICAgICAg
ICAgICAgICAgRkQ1ODFGQUYxNTIwRjkxRjAwM0E3QTc1IC8qIE9zY2lsbGF0b3IuaCBpbiBIZWFk
ZXJzICovLAotICAgICAgICAgICAgICAgIEZENTgxRkI1MTUyMEY5M0IwMDNBN0E3NSAvKiBXYXZl
VGFibGUuaCBpbiBIZWFkZXJzICovLAotICAgICAgICAgICAgICAgIEZERUE2MjQzMTUyMTAyRTIw
MDQ3OURGMCAvKiBKU09zY2lsbGF0b3IuaCBpbiBIZWFkZXJzICovLAotICAgICAgICAgICAgICAg
IEZERUE2MjQ3MTUyMTAyRkMwMDQ3OURGMCAvKiBKU1dhdmVUYWJsZS5oIGluIEhlYWRlcnMgKi8s
CisJCQkJRkQ1ODFGQUYxNTIwRjkxRjAwM0E3QTc1IC8qIE9zY2lsbGF0b3IuaCBpbiBIZWFkZXJz
ICovLAorCQkJCUZENTgxRkI1MTUyMEY5M0IwMDNBN0E3NSAvKiBXYXZlVGFibGUuaCBpbiBIZWFk
ZXJzICovLAorCQkJCUZERUE2MjQzMTUyMTAyRTIwMDQ3OURGMCAvKiBKU09zY2lsbGF0b3IuaCBp
biBIZWFkZXJzICovLAorCQkJCUZERUE2MjQ3MTUyMTAyRkMwMDQ3OURGMCAvKiBKU1dhdmVUYWJs
ZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJRkQ1MzczNTMxMzdCNjUxODAwMDA4RENFIC8qIFplcm9Q
b2xlLmggaW4gSGVhZGVycyAqLywKIAkJCQkxQTM1ODZFMDE1MjY0QzQ1MDAyMkE2NTkgLyogUmVu
ZGVyTXVsdGlDb2x1bW5GbG93VGhyZWFkLmggaW4gSGVhZGVycyAqLywKIAkJCQlFMUIyNTEwNzE1
MkEwQkIwMDA2OUI3NzkgLyogU3R5bGVQcm9wZXJ0eVNob3J0aGFuZC5oIGluIEhlYWRlcnMgKi8s
CkBAIC0yNzIyMiw3ICsyNzIyMiw2IEBACiAJCQkJNzU0MTVDMjkxMjlBOTkyMDAwM0FENjY5IC8q
IFNwZWVjaElucHV0UmVzdWx0TGlzdC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlBNzhGRTEzQjEy
MzY2QjEwMDBBQ0U4RDAgLyogU3BlbGxDaGVja2VyLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUI4
REJEQjREMTMwQjBGOEEwMEY1Q0RCMSAvKiBTcGVsbGluZ0NvcnJlY3Rpb25Db21tYW5kLmNwcCBp
biBTb3VyY2VzICovLAotCQkJCUE3MDA1Q0NDMTMzMEM0QkEwMDBDQzBCQSAvKiBTcGVsbGluZ0Nv
cnJlY3Rpb25Db250cm9sbGVyLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTkzMzA5RTExMDk5RTY0
OTIwMDU2RTU4MSAvKiBTcGxpdEVsZW1lbnRDb21tYW5kLmNwcCBpbiBTb3VyY2VzICovLAogCQkJ
CTkzMzA5RTEzMDk5RTY0OTIwMDU2RTU4MSAvKiBTcGxpdFRleHROb2RlQ29tbWFuZC5jcHAgaW4g
U291cmNlcyAqLywKIAkJCQk5MzMwOUUxNTA5OUU2NDkyMDA1NkU1ODEgLyogU3BsaXRUZXh0Tm9k
ZUNvbnRhaW5pbmdFbGVtZW50Q29tbWFuZC5jcHAgaW4gU291cmNlcyAqLywKQEAgLTI3Njk1LDYg
KzI3Njk0LDcgQEAKIAkJCQkxQTM1ODZFMTE1MjY0Rjk1MDAyMkE2NTkgLyogU1ZHQW5pbWF0ZWRJ
bnRlZ2VyT3B0aW9uYWxJbnRlZ2VyLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTFBM0ZGOUMzMTUy
NjUzNTkwMDIyODhBMSAvKiBSZW5kZXJOYW1lZEZsb3dUaHJlYWQuY3BwIGluIFNvdXJjZXMgKi8s
CiAJCQkJRTFCMjUxMDYxNTJBMEJBRjAwNjlCNzc5IC8qIFN0eWxlUHJvcGVydHlTaG9ydGhhbmQu
Y3BwIGluIFNvdXJjZXMgKi8sCisJCQkJQ0VEQjNDRUUxNTJBNzRBNzAwOEYzNkQ0IC8qIEFsdGVy
bmF0aXZlVGV4dENvbnRyb2xsZXIuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkpOwogCQkJcnVuT25s
eUZvckRlcGxveW1lbnRQb3N0cHJvY2Vzc2luZyA9IDA7CiAJCX07CkluZGV4OiBTb3VyY2UvV2Vi
Q29yZS9lZGl0aW5nL0FsdGVybmF0aXZlVGV4dENvbnRyb2xsZXIuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9XZWJDb3JlL2VkaXRpbmcvQWx0ZXJuYXRpdmVUZXh0Q29udHJvbGxlci5jcHAJKHJl
dmlzaW9uIDExMjgzMCkJKGZyb20gU291cmNlL1dlYkNvcmUvZWRpdGluZy9TcGVsbGluZ0NvcnJl
Y3Rpb25Db250cm9sbGVyLmNwcDoxMTI4MzApCisrKyBTb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0Fs
dGVybmF0aXZlVGV4dENvbnRyb2xsZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNTY1
IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA2LCAyMDA3LCAyMDA4IEFwcGxlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAwOCBOb2tpYSBDb3Jwb3JhdGlv
biBhbmQvb3IgaXRzIHN1YnNpZGlhcnkoLWllcykKKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQg
dXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlm
aWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0
aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBt
dXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3Ry
aWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdo
dAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0
ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRX
QVJFIElTIFBST1ZJREVEIEJZIEFQUExFIENPTVBVVEVSLCBJTkMuIGBgQVMgSVMnJyBBTkQgQU5Z
CisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBB
TkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAg
SU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgQ09NUFVURVIsIElOQy4gT1IKKyAqIENPTlRSSUJVVE9S
UyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFM
LAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBT
RVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJ
TlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFC
SUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAq
IChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBP
VVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRI
RSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5o
IgorI2luY2x1ZGUgIlNwZWxsaW5nQ29ycmVjdGlvbkNvbnRyb2xsZXIuaCIKKworI2luY2x1ZGUg
IkRvY3VtZW50TWFya2VyQ29udHJvbGxlci5oIgorI2luY2x1ZGUgIkVkaXRDb21tYW5kLmgiCisj
aW5jbHVkZSAiRWRpdG9yQ2xpZW50LmgiCisjaW5jbHVkZSAiRmxvYXRRdWFkLmgiCisjaW5jbHVk
ZSAiRnJhbWUuaCIKKyNpbmNsdWRlICJGcmFtZVZpZXcuaCIKKyNpbmNsdWRlICJQYWdlLmgiCisj
aW5jbHVkZSAiU3BlbGxpbmdDb3JyZWN0aW9uQ29tbWFuZC5oIgorI2luY2x1ZGUgIlRleHRDaGVj
a2VyQ2xpZW50LmgiCisjaW5jbHVkZSAiVGV4dENoZWNraW5nSGVscGVyLmgiCisjaW5jbHVkZSAi
VGV4dEl0ZXJhdG9yLmgiCisjaW5jbHVkZSAiVmlzaWJsZVNlbGVjdGlvbi5oIgorI2luY2x1ZGUg
Imh0bWxlZGl0aW5nLmgiCisjaW5jbHVkZSAibWFya3VwLmgiCisjaW5jbHVkZSAidmlzaWJsZV91
bml0cy5oIgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK3VzaW5nIG5hbWVzcGFjZSBzdGQ7Cit1
c2luZyBuYW1lc3BhY2UgV1RGOworCisjaWYgVVNFKEFVVE9DT1JSRUNUSU9OX1BBTkVMKQorCitz
dGF0aWMgY29uc3QgVmVjdG9yPERvY3VtZW50TWFya2VyOjpNYXJrZXJUeXBlPiYgbWFya2VyVHlw
ZXNGb3JBdXRvY29ycmVjdGlvbigpCit7CisgICAgREVGSU5FX1NUQVRJQ19MT0NBTChWZWN0b3I8
RG9jdW1lbnRNYXJrZXI6Ok1hcmtlclR5cGU+LCBtYXJrZXJUeXBlc0ZvckF1dG9Db3JyZWN0aW9u
LCAoKSk7CisgICAgaWYgKG1hcmtlclR5cGVzRm9yQXV0b0NvcnJlY3Rpb24uaXNFbXB0eSgpKSB7
CisgICAgICAgIG1hcmtlclR5cGVzRm9yQXV0b0NvcnJlY3Rpb24uYXBwZW5kKERvY3VtZW50TWFy
a2VyOjpSZXBsYWNlbWVudCk7CisgICAgICAgIG1hcmtlclR5cGVzRm9yQXV0b0NvcnJlY3Rpb24u
YXBwZW5kKERvY3VtZW50TWFya2VyOjpDb3JyZWN0aW9uSW5kaWNhdG9yKTsKKyAgICAgICAgbWFy
a2VyVHlwZXNGb3JBdXRvQ29ycmVjdGlvbi5hcHBlbmQoRG9jdW1lbnRNYXJrZXI6OlNwZWxsQ2hl
Y2tpbmdFeGVtcHRpb24pOworICAgICAgICBtYXJrZXJUeXBlc0ZvckF1dG9Db3JyZWN0aW9uLmFw
cGVuZChEb2N1bWVudE1hcmtlcjo6QXV0b2NvcnJlY3RlZCk7CisgICAgfQorICAgIHJldHVybiBt
YXJrZXJUeXBlc0ZvckF1dG9Db3JyZWN0aW9uOworfQorCitzdGF0aWMgY29uc3QgVmVjdG9yPERv
Y3VtZW50TWFya2VyOjpNYXJrZXJUeXBlPiYgbWFya2VyVHlwZXNGb3JSZXBsYWNlbWVudCgpCit7
CisgICAgREVGSU5FX1NUQVRJQ19MT0NBTChWZWN0b3I8RG9jdW1lbnRNYXJrZXI6Ok1hcmtlclR5
cGU+LCBtYXJrZXJUeXBlc0ZvclJlcGxhY2VtZW50LCAoKSk7CisgICAgaWYgKG1hcmtlclR5cGVz
Rm9yUmVwbGFjZW1lbnQuaXNFbXB0eSgpKSB7CisgICAgICAgIG1hcmtlclR5cGVzRm9yUmVwbGFj
ZW1lbnQuYXBwZW5kKERvY3VtZW50TWFya2VyOjpSZXBsYWNlbWVudCk7CisgICAgICAgIG1hcmtl
clR5cGVzRm9yUmVwbGFjZW1lbnQuYXBwZW5kKERvY3VtZW50TWFya2VyOjpTcGVsbENoZWNraW5n
RXhlbXB0aW9uKTsKKyAgICB9CisgICAgcmV0dXJuIG1hcmtlclR5cGVzRm9yUmVwbGFjZW1lbnQ7
Cit9CisKK3N0YXRpYyBib29sIG1hcmtlcnNIYXZlSWRlbnRpY2FsRGVzY3JpcHRpb24oY29uc3Qg
VmVjdG9yPERvY3VtZW50TWFya2VyKj4mIG1hcmtlcnMpCit7CisgICAgaWYgKG1hcmtlcnMuaXNF
bXB0eSgpKQorICAgICAgICByZXR1cm4gdHJ1ZTsKKworICAgIGNvbnN0IFN0cmluZyYgZGVzY3Jp
cHRpb24gPSBtYXJrZXJzWzBdLT5kZXNjcmlwdGlvbigpOworICAgIGZvciAoc2l6ZV90IGkgPSAx
OyBpIDwgbWFya2Vycy5zaXplKCk7ICsraSkgeworICAgICAgICBpZiAoZGVzY3JpcHRpb24gIT0g
bWFya2Vyc1tpXS0+ZGVzY3JpcHRpb24oKSkKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAg
ICB9CisgICAgcmV0dXJuIHRydWU7Cit9CisKK1NwZWxsaW5nQ29ycmVjdGlvbkNvbnRyb2xsZXI6
OlNwZWxsaW5nQ29ycmVjdGlvbkNvbnRyb2xsZXIoRnJhbWUqIGZyYW1lKQorICAgIDogbV9mcmFt
ZShmcmFtZSkKKyAgICAsIG1fY29ycmVjdGlvblBhbmVsVGltZXIodGhpcywgJlNwZWxsaW5nQ29y
cmVjdGlvbkNvbnRyb2xsZXI6OmNvcnJlY3Rpb25QYW5lbFRpbWVyRmlyZWQpCit7Cit9CisKK1Nw
ZWxsaW5nQ29ycmVjdGlvbkNvbnRyb2xsZXI6On5TcGVsbGluZ0NvcnJlY3Rpb25Db250cm9sbGVy
KCkKK3sKKyAgICBkaXNtaXNzKFJlYXNvbkZvckRpc21pc3NpbmdDb3JyZWN0aW9uUGFuZWxJZ25v
cmVkKTsKK30KKwordm9pZCBTcGVsbGluZ0NvcnJlY3Rpb25Db250cm9sbGVyOjpzdGFydENvcnJl
Y3Rpb25QYW5lbFRpbWVyKENvcnJlY3Rpb25QYW5lbEluZm86OlBhbmVsVHlwZSB0eXBlKQorewor
ICAgIGNvbnN0IGRvdWJsZSBjb3JyZWN0aW9uUGFuZWxUaW1lckludGVydmFsID0gMC4zOworICAg
IGlmICghaXNBdXRvbWF0aWNTcGVsbGluZ0NvcnJlY3Rpb25FbmFibGVkKCkpCisgICAgICAgIHJl
dHVybjsKKworICAgIC8vIElmIHR5cGUgaXMgUGFuZWxUeXBlUmV2ZXJzaW9uLCB0aGVuIHRoZSBu
ZXcgcmFuZ2UgaGFzIGJlZW4gc2V0LiBTbyB3ZSBzaG91bGRuJ3QgY2xlYXIgaXQuCisgICAgaWYg
KHR5cGUgPT0gQ29ycmVjdGlvblBhbmVsSW5mbzo6UGFuZWxUeXBlQ29ycmVjdGlvbikKKyAgICAg
ICAgbV9jb3JyZWN0aW9uUGFuZWxJbmZvLnJhbmdlVG9CZVJlcGxhY2VkLmNsZWFyKCk7CisgICAg
bV9jb3JyZWN0aW9uUGFuZWxJbmZvLnBhbmVsVHlwZSA9IHR5cGU7CisgICAgbV9jb3JyZWN0aW9u
UGFuZWxUaW1lci5zdGFydE9uZVNob3QoY29ycmVjdGlvblBhbmVsVGltZXJJbnRlcnZhbCk7Cit9
CisKK3ZvaWQgU3BlbGxpbmdDb3JyZWN0aW9uQ29udHJvbGxlcjo6c3RvcENvcnJlY3Rpb25QYW5l
bFRpbWVyKCkKK3sKKyAgICBtX2NvcnJlY3Rpb25QYW5lbFRpbWVyLnN0b3AoKTsKKyAgICBtX2Nv
cnJlY3Rpb25QYW5lbEluZm8ucmFuZ2VUb0JlUmVwbGFjZWQuY2xlYXIoKTsKK30KKwordm9pZCBT
cGVsbGluZ0NvcnJlY3Rpb25Db250cm9sbGVyOjpzdG9wUGVuZGluZ0NvcnJlY3Rpb24oY29uc3Qg
VmlzaWJsZVNlbGVjdGlvbiYgb2xkU2VsZWN0aW9uKQoreworICAgIC8vIE1ha2Ugc3VyZSB0aGVy
ZSdzIG5vIHBlbmRpbmcgYXV0b2NvcnJlY3Rpb24gYmVmb3JlIHdlIGNhbGwgbWFya01pc3NwZWxs
aW5nc0FuZEJhZEdyYW1tYXIoKSBiZWxvdy4KKyAgICBWaXNpYmxlU2VsZWN0aW9uIGN1cnJlbnRT
ZWxlY3Rpb24obV9mcmFtZS0+c2VsZWN0aW9uKCktPnNlbGVjdGlvbigpKTsKKyAgICBpZiAoY3Vy
cmVudFNlbGVjdGlvbiA9PSBvbGRTZWxlY3Rpb24pCisgICAgICAgIHJldHVybjsKKworICAgIHN0
b3BDb3JyZWN0aW9uUGFuZWxUaW1lcigpOworICAgIGRpc21pc3MoUmVhc29uRm9yRGlzbWlzc2lu
Z0NvcnJlY3Rpb25QYW5lbElnbm9yZWQpOworfQorCit2b2lkIFNwZWxsaW5nQ29ycmVjdGlvbkNv
bnRyb2xsZXI6OmFwcGx5UGVuZGluZ0NvcnJlY3Rpb24oY29uc3QgVmlzaWJsZVNlbGVjdGlvbiYg
c2VsZWN0aW9uQWZ0ZXJUeXBpbmcpCit7CisgICAgLy8gQXBwbHkgcGVuZGluZyBhdXRvY29ycmVj
dGlvbiBiZWZvcmUgbmV4dCByb3VuZCBvZiBzcGVsbCBjaGVja2luZy4KKyAgICBib29sIGRvQXBw
bHlDb3JyZWN0aW9uID0gdHJ1ZTsKKyAgICBWaXNpYmxlUG9zaXRpb24gc3RhcnRPZlNlbGVjdGlv
biA9IHNlbGVjdGlvbkFmdGVyVHlwaW5nLnZpc2libGVTdGFydCgpOworICAgIFZpc2libGVTZWxl
Y3Rpb24gY3VycmVudFdvcmQgPSBWaXNpYmxlU2VsZWN0aW9uKHN0YXJ0T2ZXb3JkKHN0YXJ0T2ZT
ZWxlY3Rpb24sIExlZnRXb3JkSWZPbkJvdW5kYXJ5KSwgZW5kT2ZXb3JkKHN0YXJ0T2ZTZWxlY3Rp
b24sIFJpZ2h0V29yZElmT25Cb3VuZGFyeSkpOworICAgIGlmIChjdXJyZW50V29yZC52aXNpYmxl
RW5kKCkgPT0gc3RhcnRPZlNlbGVjdGlvbikgeworICAgICAgICBTdHJpbmcgd29yZFRleHQgPSBw
bGFpblRleHQoY3VycmVudFdvcmQudG9Ob3JtYWxpemVkUmFuZ2UoKS5nZXQoKSk7CisgICAgICAg
IGlmICh3b3JkVGV4dC5sZW5ndGgoKSA+IDAgJiYgaXNBbWJpZ3VvdXNCb3VuZGFyeUNoYXJhY3Rl
cih3b3JkVGV4dFt3b3JkVGV4dC5sZW5ndGgoKSAtIDFdKSkKKyAgICAgICAgICAgIGRvQXBwbHlD
b3JyZWN0aW9uID0gZmFsc2U7CisgICAgfQorICAgIGlmIChkb0FwcGx5Q29ycmVjdGlvbikKKyAg
ICAgICAgaGFuZGxlQ29ycmVjdGlvblBhbmVsUmVzdWx0KGRpc21pc3NTb29uKFJlYXNvbkZvckRp
c21pc3NpbmdDb3JyZWN0aW9uUGFuZWxBY2NlcHRlZCkpOyAKKyAgICBlbHNlCisgICAgICAgIG1f
Y29ycmVjdGlvblBhbmVsSW5mby5yYW5nZVRvQmVSZXBsYWNlZC5jbGVhcigpOworfQorCitib29s
IFNwZWxsaW5nQ29ycmVjdGlvbkNvbnRyb2xsZXI6Omhhc1BlbmRpbmdDb3JyZWN0aW9uKCkgY29u
c3QKK3sKKyAgICByZXR1cm4gbV9jb3JyZWN0aW9uUGFuZWxJbmZvLnJhbmdlVG9CZVJlcGxhY2Vk
OworfQorCitib29sIFNwZWxsaW5nQ29ycmVjdGlvbkNvbnRyb2xsZXI6OmlzU3BlbGxpbmdNYXJr
ZXJBbGxvd2VkKFBhc3NSZWZQdHI8UmFuZ2U+IG1pc3NwZWxsaW5nUmFuZ2UpIGNvbnN0Cit7Cisg
ICAgcmV0dXJuICFtX2ZyYW1lLT5kb2N1bWVudCgpLT5tYXJrZXJzKCktPmhhc01hcmtlcnMobWlz
c3BlbGxpbmdSYW5nZS5nZXQoKSwgRG9jdW1lbnRNYXJrZXI6OlNwZWxsQ2hlY2tpbmdFeGVtcHRp
b24pOworfQorCit2b2lkIFNwZWxsaW5nQ29ycmVjdGlvbkNvbnRyb2xsZXI6OnNob3coUGFzc1Jl
ZlB0cjxSYW5nZT4gcmFuZ2VUb1JlcGxhY2UsIGNvbnN0IFN0cmluZyYgcmVwbGFjZW1lbnQpCit7
CisgICAgRmxvYXRSZWN0IGJvdW5kaW5nQm94ID0gcm9vdFZpZXdSZWN0Rm9yUmFuZ2UocmFuZ2VU
b1JlcGxhY2UuZ2V0KCkpOworICAgIGlmIChib3VuZGluZ0JveC5pc0VtcHR5KCkpCisgICAgICAg
IHJldHVybjsKKyAgICBtX2NvcnJlY3Rpb25QYW5lbEluZm8ucmVwbGFjZWRTdHJpbmcgPSBwbGFp
blRleHQocmFuZ2VUb1JlcGxhY2UuZ2V0KCkpOworICAgIG1fY29ycmVjdGlvblBhbmVsSW5mby5y
YW5nZVRvQmVSZXBsYWNlZCA9IHJhbmdlVG9SZXBsYWNlOworICAgIG1fY29ycmVjdGlvblBhbmVs
SW5mby5yZXBsYWNlbWVudFN0cmluZyA9IHJlcGxhY2VtZW50OworICAgIG1fY29ycmVjdGlvblBh
bmVsSW5mby5pc0FjdGl2ZSA9IHRydWU7CisgICAgY2xpZW50KCktPnNob3dDb3JyZWN0aW9uUGFu
ZWwobV9jb3JyZWN0aW9uUGFuZWxJbmZvLnBhbmVsVHlwZSwgYm91bmRpbmdCb3gsIG1fY29ycmVj
dGlvblBhbmVsSW5mby5yZXBsYWNlZFN0cmluZywgcmVwbGFjZW1lbnQsIFZlY3RvcjxTdHJpbmc+
KCkpOworfQorCit2b2lkIFNwZWxsaW5nQ29ycmVjdGlvbkNvbnRyb2xsZXI6OmhhbmRsZUNhbmNl
bE9wZXJhdGlvbigpCit7CisgICAgaWYgKCFtX2NvcnJlY3Rpb25QYW5lbEluZm8uaXNBY3RpdmUp
CisgICAgICAgIHJldHVybjsKKyAgICBtX2NvcnJlY3Rpb25QYW5lbEluZm8uaXNBY3RpdmUgPSBm
YWxzZTsKKyAgICBkaXNtaXNzKFJlYXNvbkZvckRpc21pc3NpbmdDb3JyZWN0aW9uUGFuZWxDYW5j
ZWxsZWQpOworfQorCit2b2lkIFNwZWxsaW5nQ29ycmVjdGlvbkNvbnRyb2xsZXI6OmRpc21pc3Mo
UmVhc29uRm9yRGlzbWlzc2luZ0NvcnJlY3Rpb25QYW5lbCByZWFzb25Gb3JEaXNtaXNzaW5nKQor
eworICAgIGlmICghbV9jb3JyZWN0aW9uUGFuZWxJbmZvLmlzQWN0aXZlKQorICAgICAgICByZXR1
cm47CisgICAgbV9jb3JyZWN0aW9uUGFuZWxJbmZvLmlzQWN0aXZlID0gZmFsc2U7CisgICAgbV9j
b3JyZWN0aW9uUGFuZWxJc0Rpc21pc3NlZEJ5RWRpdG9yID0gdHJ1ZTsKKyAgICBpZiAoY2xpZW50
KCkpCisgICAgICAgIGNsaWVudCgpLT5kaXNtaXNzQ29ycmVjdGlvblBhbmVsKHJlYXNvbkZvckRp
c21pc3NpbmcpOworfQorCitTdHJpbmcgU3BlbGxpbmdDb3JyZWN0aW9uQ29udHJvbGxlcjo6ZGlz
bWlzc1Nvb24oUmVhc29uRm9yRGlzbWlzc2luZ0NvcnJlY3Rpb25QYW5lbCByZWFzb25Gb3JEaXNt
aXNzaW5nKQoreworICAgIGlmICghbV9jb3JyZWN0aW9uUGFuZWxJbmZvLmlzQWN0aXZlKQorICAg
ICAgICByZXR1cm4gU3RyaW5nKCk7CisgICAgbV9jb3JyZWN0aW9uUGFuZWxJbmZvLmlzQWN0aXZl
ID0gZmFsc2U7CisgICAgbV9jb3JyZWN0aW9uUGFuZWxJc0Rpc21pc3NlZEJ5RWRpdG9yID0gdHJ1
ZTsKKyAgICBpZiAoIWNsaWVudCgpKQorICAgICAgICByZXR1cm4gU3RyaW5nKCk7CisgICAgcmV0
dXJuIGNsaWVudCgpLT5kaXNtaXNzQ29ycmVjdGlvblBhbmVsU29vbihyZWFzb25Gb3JEaXNtaXNz
aW5nKTsKK30KKwordm9pZCBTcGVsbGluZ0NvcnJlY3Rpb25Db250cm9sbGVyOjphcHBseUNvcnJl
Y3Rpb25QYW5lbEluZm8oY29uc3QgVmVjdG9yPERvY3VtZW50TWFya2VyOjpNYXJrZXJUeXBlPiYg
bWFya2VyVHlwZXNUb0FkZCkKK3sKKyAgICBpZiAoIW1fY29ycmVjdGlvblBhbmVsSW5mby5yYW5n
ZVRvQmVSZXBsYWNlZCkKKyAgICAgICAgcmV0dXJuOworCisgICAgRXhjZXB0aW9uQ29kZSBlYyA9
IDA7CisgICAgUmVmUHRyPFJhbmdlPiBwYXJhZ3JhcGhSYW5nZUNvbnRhaW5pbmdDb3JyZWN0aW9u
ID0gbV9jb3JyZWN0aW9uUGFuZWxJbmZvLnJhbmdlVG9CZVJlcGxhY2VkLT5jbG9uZVJhbmdlKGVj
KTsKKyAgICBpZiAoZWMpCisgICAgICAgIHJldHVybjsKKworICAgIHNldFN0YXJ0KHBhcmFncmFw
aFJhbmdlQ29udGFpbmluZ0NvcnJlY3Rpb24uZ2V0KCksIHN0YXJ0T2ZQYXJhZ3JhcGgobV9jb3Jy
ZWN0aW9uUGFuZWxJbmZvLnJhbmdlVG9CZVJlcGxhY2VkLT5zdGFydFBvc2l0aW9uKCkpKTsKKyAg
ICBzZXRFbmQocGFyYWdyYXBoUmFuZ2VDb250YWluaW5nQ29ycmVjdGlvbi5nZXQoKSwgZW5kT2ZQ
YXJhZ3JhcGgobV9jb3JyZWN0aW9uUGFuZWxJbmZvLnJhbmdlVG9CZVJlcGxhY2VkLT5lbmRQb3Np
dGlvbigpKSk7CisKKyAgICAvLyBBZnRlciB3ZSByZXBsYWNlIHRoZSB3b3JkIGF0IHJhbmdlIHJh
bmdlVG9CZVJlcGxhY2VkLCB3ZSBuZWVkIHRvIGFkZCBtYXJrZXJzIHRvIHRoYXQgcmFuZ2UuCisg
ICAgLy8gSG93ZXZlciwgb25jZSB0aGUgcmVwbGFjZW1lbnQgdG9vayBwbGFjZSwgdGhlIHZhbHVl
IG9mIHJhbmdlVG9CZVJlcGxhY2VkIGlzIG5vdCB2YWxpZCBhbnltb3JlLgorICAgIC8vIFNvIGJl
Zm9yZSB3ZSBjYXJyeSBvdXQgdGhlIHJlcGxhY2VtZW50LCB3ZSBuZWVkIHRvIHN0b3JlIHRoZSBz
dGFydCBwb3NpdGlvbiBvZiByYW5nZVRvQmVSZXBsYWNlZAorICAgIC8vIHJlbGF0aXZlIHRvIHRo
ZSBzdGFydCBwb3NpdGlvbiBvZiB0aGUgY29udGFpbmluZyBwYXJhZ3JhcGguIFdlIHVzZSBjb3Jy
ZWN0aW9uU3RhcnRPZmZzZXRJblBhcmFncmFwaAorICAgIC8vIHRvIHN0b3JlIHRoaXMgdmFsdWUu
IEluIG9yZGVyIHRvIG9idGFpbiB0aGlzIG9mZnNldCwgd2UgbmVlZCB0byBmaXJzdCBjcmVhdGUg
YSByYW5nZQorICAgIC8vIHdoaWNoIHNwYW5zIGZyb20gdGhlIHN0YXJ0IG9mIHBhcmFncmFwaCB0
byB0aGUgc3RhcnQgcG9zaXRpb24gb2YgcmFuZ2VUb0JlUmVwbGFjZWQuCisgICAgUmVmUHRyPFJh
bmdlPiBjb3JyZWN0aW9uU3RhcnRPZmZzZXRJblBhcmFncmFwaEFzUmFuZ2UgPSBSYW5nZTo6Y3Jl
YXRlKHBhcmFncmFwaFJhbmdlQ29udGFpbmluZ0NvcnJlY3Rpb24tPnN0YXJ0Q29udGFpbmVyKGVj
KS0+ZG9jdW1lbnQoKSwgcGFyYWdyYXBoUmFuZ2VDb250YWluaW5nQ29ycmVjdGlvbi0+c3RhcnRQ
b3NpdGlvbigpLCBwYXJhZ3JhcGhSYW5nZUNvbnRhaW5pbmdDb3JyZWN0aW9uLT5zdGFydFBvc2l0
aW9uKCkpOworICAgIGlmIChlYykKKyAgICAgICAgcmV0dXJuOworCisgICAgUG9zaXRpb24gc3Rh
cnRQb3NpdGlvbk9mUmFuZ2VUb0JlUmVwbGFjZWQgPSBtX2NvcnJlY3Rpb25QYW5lbEluZm8ucmFu
Z2VUb0JlUmVwbGFjZWQtPnN0YXJ0UG9zaXRpb24oKTsKKyAgICBjb3JyZWN0aW9uU3RhcnRPZmZz
ZXRJblBhcmFncmFwaEFzUmFuZ2UtPnNldEVuZChzdGFydFBvc2l0aW9uT2ZSYW5nZVRvQmVSZXBs
YWNlZC5jb250YWluZXJOb2RlKCksIHN0YXJ0UG9zaXRpb25PZlJhbmdlVG9CZVJlcGxhY2VkLmNv
bXB1dGVPZmZzZXRJbkNvbnRhaW5lck5vZGUoKSwgZWMpOworICAgIGlmIChlYykKKyAgICAgICAg
cmV0dXJuOworCisgICAgLy8gVGFrZSBub3RlIG9mIHRoZSBsb2NhdGlvbiBvZiBhdXRvY29ycmVj
dGlvbiBzbyB0aGF0IHdlIGNhbiBhZGQgbWFya2VyIGFmdGVyIHRoZSByZXBsYWNlbWVudCB0b29r
IHBsYWNlLgorICAgIGludCBjb3JyZWN0aW9uU3RhcnRPZmZzZXRJblBhcmFncmFwaCA9IFRleHRJ
dGVyYXRvcjo6cmFuZ2VMZW5ndGgoY29ycmVjdGlvblN0YXJ0T2Zmc2V0SW5QYXJhZ3JhcGhBc1Jh
bmdlLmdldCgpKTsKKworICAgIC8vIENsb25lIHRoZSByYW5nZSwgc2luY2UgdGhlIGNhbGxlciBv
ZiB0aGlzIG1ldGhvZCBtYXkgd2FudCB0byBrZWVwIHRoZSBvcmlnaW5hbCByYW5nZSBhcm91bmQu
CisgICAgUmVmUHRyPFJhbmdlPiByYW5nZVRvQmVSZXBsYWNlZCA9IG1fY29ycmVjdGlvblBhbmVs
SW5mby5yYW5nZVRvQmVSZXBsYWNlZC0+Y2xvbmVSYW5nZShlYyk7CisgICAgYXBwbHlDb21tYW5k
KFNwZWxsaW5nQ29ycmVjdGlvbkNvbW1hbmQ6OmNyZWF0ZShyYW5nZVRvQmVSZXBsYWNlZCwgbV9j
b3JyZWN0aW9uUGFuZWxJbmZvLnJlcGxhY2VtZW50U3RyaW5nKSk7CisgICAgc2V0RW5kKHBhcmFn
cmFwaFJhbmdlQ29udGFpbmluZ0NvcnJlY3Rpb24uZ2V0KCksIG1fZnJhbWUtPnNlbGVjdGlvbigp
LT5zZWxlY3Rpb24oKS5zdGFydCgpKTsKKyAgICBSZWZQdHI8UmFuZ2U+IHJlcGxhY2VtZW50UmFu
Z2UgPSBUZXh0SXRlcmF0b3I6OnN1YnJhbmdlKHBhcmFncmFwaFJhbmdlQ29udGFpbmluZ0NvcnJl
Y3Rpb24uZ2V0KCksIGNvcnJlY3Rpb25TdGFydE9mZnNldEluUGFyYWdyYXBoLCAgbV9jb3JyZWN0
aW9uUGFuZWxJbmZvLnJlcGxhY2VtZW50U3RyaW5nLmxlbmd0aCgpKTsKKyAgICBTdHJpbmcgbmV3
VGV4dCA9IHBsYWluVGV4dChyZXBsYWNlbWVudFJhbmdlLmdldCgpKTsKKworICAgIC8vIENoZWNr
IHRvIHNlZSBpZiByZXBsYWNlbWVudCBzdWNjZWVkZWQuCisgICAgaWYgKG5ld1RleHQgIT0gbV9j
b3JyZWN0aW9uUGFuZWxJbmZvLnJlcGxhY2VtZW50U3RyaW5nKQorICAgICAgICByZXR1cm47CisK
KyAgICBEb2N1bWVudE1hcmtlckNvbnRyb2xsZXIqIG1hcmtlcnMgPSByZXBsYWNlbWVudFJhbmdl
LT5zdGFydENvbnRhaW5lcigpLT5kb2N1bWVudCgpLT5tYXJrZXJzKCk7CisgICAgc2l6ZV90IHNp
emUgPSBtYXJrZXJUeXBlc1RvQWRkLnNpemUoKTsKKyAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8
IHNpemU7ICsraSkgeworICAgICAgICBEb2N1bWVudE1hcmtlcjo6TWFya2VyVHlwZSBtYXJrZXJU
eXBlID0gbWFya2VyVHlwZXNUb0FkZFtpXTsKKyAgICAgICAgU3RyaW5nIGRlc2NyaXB0aW9uOwor
ICAgICAgICBpZiAobV9jb3JyZWN0aW9uUGFuZWxJbmZvLnBhbmVsVHlwZSAhPSBDb3JyZWN0aW9u
UGFuZWxJbmZvOjpQYW5lbFR5cGVSZXZlcnNpb24gJiYgKG1hcmtlclR5cGUgPT0gRG9jdW1lbnRN
YXJrZXI6OlJlcGxhY2VtZW50IHx8IG1hcmtlclR5cGUgPT0gRG9jdW1lbnRNYXJrZXI6OkF1dG9j
b3JyZWN0ZWQpKQorICAgICAgICAgICAgZGVzY3JpcHRpb24gPSBtX2NvcnJlY3Rpb25QYW5lbElu
Zm8ucmVwbGFjZWRTdHJpbmc7CisgICAgICAgIG1hcmtlcnMtPmFkZE1hcmtlcihyZXBsYWNlbWVu
dFJhbmdlLmdldCgpLCBtYXJrZXJUeXBlLCBkZXNjcmlwdGlvbik7CisgICAgfQorfQorCitib29s
IFNwZWxsaW5nQ29ycmVjdGlvbkNvbnRyb2xsZXI6OmFwcGx5QXV0b2NvcnJlY3Rpb25CZWZvcmVU
eXBpbmdJZkFwcHJvcHJpYXRlKCkKK3sKKyAgICBpZiAoIW1fY29ycmVjdGlvblBhbmVsSW5mby5y
YW5nZVRvQmVSZXBsYWNlZCB8fCAhbV9jb3JyZWN0aW9uUGFuZWxJbmZvLmlzQWN0aXZlKQorICAg
ICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBpZiAobV9jb3JyZWN0aW9uUGFuZWxJbmZvLnBhbmVs
VHlwZSAhPSBDb3JyZWN0aW9uUGFuZWxJbmZvOjpQYW5lbFR5cGVDb3JyZWN0aW9uKQorICAgICAg
ICByZXR1cm4gZmFsc2U7CisKKyAgICBQb3NpdGlvbiBjYXJldFBvc2l0aW9uID0gbV9mcmFtZS0+
c2VsZWN0aW9uKCktPnNlbGVjdGlvbigpLnN0YXJ0KCk7CisKKyAgICBpZiAobV9jb3JyZWN0aW9u
UGFuZWxJbmZvLnJhbmdlVG9CZVJlcGxhY2VkLT5lbmRQb3NpdGlvbigpID09IGNhcmV0UG9zaXRp
b24pIHsKKyAgICAgICAgaGFuZGxlQ29ycmVjdGlvblBhbmVsUmVzdWx0KGRpc21pc3NTb29uKFJl
YXNvbkZvckRpc21pc3NpbmdDb3JyZWN0aW9uUGFuZWxBY2NlcHRlZCkpOworICAgICAgICByZXR1
cm4gdHJ1ZTsKKyAgICB9IAorICAgIAorICAgIC8vIFBlbmRpbmcgY29ycmVjdGlvbiBzaG91bGQg
YWx3YXlzIGJlIHdoZXJlIGNhcmV0IGlzLiBCdXQgaW4gY2FzZSB0aGlzIGlzIG5vdCBhbHdheXMg
dHJ1ZSwgd2Ugc3RpbGwgd2FudCB0byBkaXNtaXNzIHRoZSBwYW5lbCB3aXRob3V0IGFjY2VwdGlu
ZyB0aGUgY29ycmVjdGlvbi4KKyAgICBBU1NFUlQobV9jb3JyZWN0aW9uUGFuZWxJbmZvLnJhbmdl
VG9CZVJlcGxhY2VkLT5lbmRQb3NpdGlvbigpID09IGNhcmV0UG9zaXRpb24pOworICAgIGRpc21p
c3MoUmVhc29uRm9yRGlzbWlzc2luZ0NvcnJlY3Rpb25QYW5lbElnbm9yZWQpOworICAgIHJldHVy
biBmYWxzZTsKK30KKwordm9pZCBTcGVsbGluZ0NvcnJlY3Rpb25Db250cm9sbGVyOjpyZXNwb25k
VG9VbmFwcGxpZWRTcGVsbENvcnJlY3Rpb24oY29uc3QgVmlzaWJsZVNlbGVjdGlvbiYgc2VsZWN0
aW9uT2ZDb3JyZWN0ZWQsIGNvbnN0IFN0cmluZyYgY29ycmVjdGVkLCBjb25zdCBTdHJpbmcmIGNv
cnJlY3Rpb24pCit7CisgICAgY2xpZW50KCktPnJlY29yZEF1dG9jb3JyZWN0aW9uUmVzcG9uc2Uo
RWRpdG9yQ2xpZW50OjpBdXRvY29ycmVjdGlvblJldmVydGVkLCBjb3JyZWN0ZWQsIGNvcnJlY3Rp
b24pOworICAgIG1fZnJhbWUtPmRvY3VtZW50KCktPnVwZGF0ZUxheW91dCgpOworICAgIG1fZnJh
bWUtPnNlbGVjdGlvbigpLT5zZXRTZWxlY3Rpb24oc2VsZWN0aW9uT2ZDb3JyZWN0ZWQsIEZyYW1l
U2VsZWN0aW9uOjpDbG9zZVR5cGluZyB8IEZyYW1lU2VsZWN0aW9uOjpDbGVhclR5cGluZ1N0eWxl
IHwgRnJhbWVTZWxlY3Rpb246OlNwZWxsQ29ycmVjdGlvblRyaWdnZXJlZCk7CisgICAgUmVmUHRy
PFJhbmdlPiByYW5nZSA9IFJhbmdlOjpjcmVhdGUobV9mcmFtZS0+ZG9jdW1lbnQoKSwgbV9mcmFt
ZS0+c2VsZWN0aW9uKCktPnNlbGVjdGlvbigpLnN0YXJ0KCksIG1fZnJhbWUtPnNlbGVjdGlvbigp
LT5zZWxlY3Rpb24oKS5lbmQoKSk7CisKKyAgICBEb2N1bWVudE1hcmtlckNvbnRyb2xsZXIqIG1h
cmtlcnMgPSBtX2ZyYW1lLT5kb2N1bWVudCgpLT5tYXJrZXJzKCk7CisgICAgbWFya2Vycy0+cmVt
b3ZlTWFya2VycyhyYW5nZS5nZXQoKSwgRG9jdW1lbnRNYXJrZXI6OlNwZWxsaW5nIHwgRG9jdW1l
bnRNYXJrZXI6OkF1dG9jb3JyZWN0ZWQsIERvY3VtZW50TWFya2VyQ29udHJvbGxlcjo6UmVtb3Zl
UGFydGlhbGx5T3ZlcmxhcHBpbmdNYXJrZXIpOworICAgIG1hcmtlcnMtPmFkZE1hcmtlcihyYW5n
ZS5nZXQoKSwgRG9jdW1lbnRNYXJrZXI6OlJlcGxhY2VtZW50KTsKKyAgICBtYXJrZXJzLT5hZGRN
YXJrZXIocmFuZ2UuZ2V0KCksIERvY3VtZW50TWFya2VyOjpTcGVsbENoZWNraW5nRXhlbXB0aW9u
KTsKK30KKwordm9pZCBTcGVsbGluZ0NvcnJlY3Rpb25Db250cm9sbGVyOjpjb3JyZWN0aW9uUGFu
ZWxUaW1lckZpcmVkKFRpbWVyPFNwZWxsaW5nQ29ycmVjdGlvbkNvbnRyb2xsZXI+KikKK3sKKyAg
ICBtX2NvcnJlY3Rpb25QYW5lbElzRGlzbWlzc2VkQnlFZGl0b3IgPSBmYWxzZTsKKyAgICBzd2l0
Y2ggKG1fY29ycmVjdGlvblBhbmVsSW5mby5wYW5lbFR5cGUpIHsKKyAgICBjYXNlIENvcnJlY3Rp
b25QYW5lbEluZm86OlBhbmVsVHlwZUNvcnJlY3Rpb246IHsKKyAgICAgICAgVmlzaWJsZVNlbGVj
dGlvbiBzZWxlY3Rpb24obV9mcmFtZS0+c2VsZWN0aW9uKCktPnNlbGVjdGlvbigpKTsKKyAgICAg
ICAgVmlzaWJsZVBvc2l0aW9uIHN0YXJ0KHNlbGVjdGlvbi5zdGFydCgpLCBzZWxlY3Rpb24uYWZm
aW5pdHkoKSk7CisgICAgICAgIFZpc2libGVQb3NpdGlvbiBwID0gc3RhcnRPZldvcmQoc3RhcnQs
IExlZnRXb3JkSWZPbkJvdW5kYXJ5KTsKKyAgICAgICAgVmlzaWJsZVNlbGVjdGlvbiBhZGphY2Vu
dFdvcmRzID0gVmlzaWJsZVNlbGVjdGlvbihwLCBzdGFydCk7CisgICAgICAgIG1fZnJhbWUtPmVk
aXRvcigpLT5tYXJrQWxsTWlzc3BlbGxpbmdzQW5kQmFkR3JhbW1hckluUmFuZ2VzKFRleHRDaGVj
a2luZ1R5cGVTcGVsbGluZyB8IFRleHRDaGVja2luZ1R5cGVTaG93Q29ycmVjdGlvblBhbmVsLCBh
ZGphY2VudFdvcmRzLnRvTm9ybWFsaXplZFJhbmdlKCkuZ2V0KCksIDApOworICAgIH0KKyAgICAg
ICAgYnJlYWs7CisgICAgY2FzZSBDb3JyZWN0aW9uUGFuZWxJbmZvOjpQYW5lbFR5cGVSZXZlcnNp
b246IHsKKyAgICAgICAgaWYgKCFtX2NvcnJlY3Rpb25QYW5lbEluZm8ucmFuZ2VUb0JlUmVwbGFj
ZWQpCisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgbV9jb3JyZWN0aW9uUGFuZWxJbmZvLmlz
QWN0aXZlID0gdHJ1ZTsKKyAgICAgICAgbV9jb3JyZWN0aW9uUGFuZWxJbmZvLnJlcGxhY2VkU3Ry
aW5nID0gcGxhaW5UZXh0KG1fY29ycmVjdGlvblBhbmVsSW5mby5yYW5nZVRvQmVSZXBsYWNlZC5n
ZXQoKSk7CisgICAgICAgIEZsb2F0UmVjdCBib3VuZGluZ0JveCA9IHJvb3RWaWV3UmVjdEZvclJh
bmdlKG1fY29ycmVjdGlvblBhbmVsSW5mby5yYW5nZVRvQmVSZXBsYWNlZC5nZXQoKSk7CisgICAg
ICAgIGlmICghYm91bmRpbmdCb3guaXNFbXB0eSgpKQorICAgICAgICAgICAgY2xpZW50KCktPnNo
b3dDb3JyZWN0aW9uUGFuZWwobV9jb3JyZWN0aW9uUGFuZWxJbmZvLnBhbmVsVHlwZSwgYm91bmRp
bmdCb3gsIG1fY29ycmVjdGlvblBhbmVsSW5mby5yZXBsYWNlZFN0cmluZywgbV9jb3JyZWN0aW9u
UGFuZWxJbmZvLnJlcGxhY2VtZW50U3RyaW5nLCBWZWN0b3I8U3RyaW5nPigpKTsKKyAgICB9Cisg
ICAgICAgIGJyZWFrOworICAgIGNhc2UgQ29ycmVjdGlvblBhbmVsSW5mbzo6UGFuZWxUeXBlU3Bl
bGxpbmdTdWdnZXN0aW9uczogeworICAgICAgICBpZiAoIW1fY29ycmVjdGlvblBhbmVsSW5mby5y
YW5nZVRvQmVSZXBsYWNlZCB8fCBwbGFpblRleHQobV9jb3JyZWN0aW9uUGFuZWxJbmZvLnJhbmdl
VG9CZVJlcGxhY2VkLmdldCgpKSAhPSBtX2NvcnJlY3Rpb25QYW5lbEluZm8ucmVwbGFjZWRTdHJp
bmcpCisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgU3RyaW5nIHBhcmFncmFwaFRleHQgPSBw
bGFpblRleHQoVGV4dENoZWNraW5nUGFyYWdyYXBoKG1fY29ycmVjdGlvblBhbmVsSW5mby5yYW5n
ZVRvQmVSZXBsYWNlZCkucGFyYWdyYXBoUmFuZ2UoKS5nZXQoKSk7CisgICAgICAgIFZlY3RvcjxT
dHJpbmc+IHN1Z2dlc3Rpb25zOworICAgICAgICB0ZXh0Q2hlY2tlcigpLT5nZXRHdWVzc2VzRm9y
V29yZChtX2NvcnJlY3Rpb25QYW5lbEluZm8ucmVwbGFjZWRTdHJpbmcsIHBhcmFncmFwaFRleHQs
IHN1Z2dlc3Rpb25zKTsKKyAgICAgICAgaWYgKHN1Z2dlc3Rpb25zLmlzRW1wdHkoKSkgeworICAg
ICAgICAgICAgbV9jb3JyZWN0aW9uUGFuZWxJbmZvLnJhbmdlVG9CZVJlcGxhY2VkLmNsZWFyKCk7
CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgICAgICBTdHJpbmcgdG9wU3VnZ2Vz
dGlvbiA9IHN1Z2dlc3Rpb25zLmZpcnN0KCk7CisgICAgICAgIHN1Z2dlc3Rpb25zLnJlbW92ZSgw
KTsKKyAgICAgICAgbV9jb3JyZWN0aW9uUGFuZWxJbmZvLmlzQWN0aXZlID0gdHJ1ZTsKKyAgICAg
ICAgRmxvYXRSZWN0IGJvdW5kaW5nQm94ID0gcm9vdFZpZXdSZWN0Rm9yUmFuZ2UobV9jb3JyZWN0
aW9uUGFuZWxJbmZvLnJhbmdlVG9CZVJlcGxhY2VkLmdldCgpKTsKKyAgICAgICAgaWYgKCFib3Vu
ZGluZ0JveC5pc0VtcHR5KCkpCisgICAgICAgICAgICBjbGllbnQoKS0+c2hvd0NvcnJlY3Rpb25Q
YW5lbChtX2NvcnJlY3Rpb25QYW5lbEluZm8ucGFuZWxUeXBlLCBib3VuZGluZ0JveCwgbV9jb3Jy
ZWN0aW9uUGFuZWxJbmZvLnJlcGxhY2VkU3RyaW5nLCB0b3BTdWdnZXN0aW9uLCBzdWdnZXN0aW9u
cyk7CisgICAgfQorICAgICAgICBicmVhazsKKyAgICB9Cit9CisKK3ZvaWQgU3BlbGxpbmdDb3Jy
ZWN0aW9uQ29udHJvbGxlcjo6aGFuZGxlQ29ycmVjdGlvblBhbmVsUmVzdWx0KGNvbnN0IFN0cmlu
ZyYgY29ycmVjdGlvbikKK3sKKyAgICBSYW5nZSogcmVwbGFjZWRSYW5nZSA9IG1fY29ycmVjdGlv
blBhbmVsSW5mby5yYW5nZVRvQmVSZXBsYWNlZC5nZXQoKTsKKyAgICBpZiAoIXJlcGxhY2VkUmFu
Z2UgfHwgbV9mcmFtZS0+ZG9jdW1lbnQoKSAhPSByZXBsYWNlZFJhbmdlLT5vd25lckRvY3VtZW50
KCkpCisgICAgICAgIHJldHVybjsKKworICAgIFN0cmluZyBjdXJyZW50V29yZCA9IHBsYWluVGV4
dChtX2NvcnJlY3Rpb25QYW5lbEluZm8ucmFuZ2VUb0JlUmVwbGFjZWQuZ2V0KCkpOworICAgIC8v
IENoZWNrIHRvIHNlZSBpZiB0aGUgd29yZCB3ZSBhcmUgYWJvdXQgdG8gY29ycmVjdCBoYXMgYmVl
biBjaGFuZ2VkIGJldHdlZW4gdGltZXIgZmlyaW5nIGFuZCBjYWxsYmFjayBiZWluZyB0cmlnZ2Vy
ZWQuCisgICAgaWYgKGN1cnJlbnRXb3JkICE9IG1fY29ycmVjdGlvblBhbmVsSW5mby5yZXBsYWNl
ZFN0cmluZykKKyAgICAgICAgcmV0dXJuOworCisgICAgbV9jb3JyZWN0aW9uUGFuZWxJbmZvLmlz
QWN0aXZlID0gZmFsc2U7CisKKyAgICBzd2l0Y2ggKG1fY29ycmVjdGlvblBhbmVsSW5mby5wYW5l
bFR5cGUpIHsKKyAgICBjYXNlIENvcnJlY3Rpb25QYW5lbEluZm86OlBhbmVsVHlwZUNvcnJlY3Rp
b246CisgICAgICAgIGlmIChjb3JyZWN0aW9uLmxlbmd0aCgpKSB7CisgICAgICAgICAgICBtX2Nv
cnJlY3Rpb25QYW5lbEluZm8ucmVwbGFjZW1lbnRTdHJpbmcgPSBjb3JyZWN0aW9uOworICAgICAg
ICAgICAgYXBwbHlDb3JyZWN0aW9uUGFuZWxJbmZvKG1hcmtlclR5cGVzRm9yQXV0b2NvcnJlY3Rp
b24oKSk7CisgICAgICAgIH0gZWxzZSBpZiAoIW1fY29ycmVjdGlvblBhbmVsSXNEaXNtaXNzZWRC
eUVkaXRvcikKKyAgICAgICAgICAgIHJlcGxhY2VkUmFuZ2UtPnN0YXJ0Q29udGFpbmVyKCktPmRv
Y3VtZW50KCktPm1hcmtlcnMoKS0+YWRkTWFya2VyKHJlcGxhY2VkUmFuZ2UsIERvY3VtZW50TWFy
a2VyOjpSZWplY3RlZENvcnJlY3Rpb24sIG1fY29ycmVjdGlvblBhbmVsSW5mby5yZXBsYWNlZFN0
cmluZyk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgQ29ycmVjdGlvblBhbmVsSW5mbzo6UGFu
ZWxUeXBlUmV2ZXJzaW9uOgorICAgIGNhc2UgQ29ycmVjdGlvblBhbmVsSW5mbzo6UGFuZWxUeXBl
U3BlbGxpbmdTdWdnZXN0aW9uczoKKyAgICAgICAgaWYgKGNvcnJlY3Rpb24ubGVuZ3RoKCkpIHsK
KyAgICAgICAgICAgIG1fY29ycmVjdGlvblBhbmVsSW5mby5yZXBsYWNlbWVudFN0cmluZyA9IGNv
cnJlY3Rpb247CisgICAgICAgICAgICBhcHBseUNvcnJlY3Rpb25QYW5lbEluZm8obWFya2VyVHlw
ZXNGb3JSZXBsYWNlbWVudCgpKTsKKyAgICAgICAgfQorICAgICAgICBicmVhazsKKyAgICB9CisK
KyAgICBtX2NvcnJlY3Rpb25QYW5lbEluZm8ucmFuZ2VUb0JlUmVwbGFjZWQuY2xlYXIoKTsKK30K
KworYm9vbCBTcGVsbGluZ0NvcnJlY3Rpb25Db250cm9sbGVyOjppc0F1dG9tYXRpY1NwZWxsaW5n
Q29ycmVjdGlvbkVuYWJsZWQoKQoreworICAgIHJldHVybiBjbGllbnQoKSAmJiBjbGllbnQoKS0+
aXNBdXRvbWF0aWNTcGVsbGluZ0NvcnJlY3Rpb25FbmFibGVkKCk7Cit9CisKK0Zsb2F0UmVjdCBT
cGVsbGluZ0NvcnJlY3Rpb25Db250cm9sbGVyOjpyb290Vmlld1JlY3RGb3JSYW5nZShjb25zdCBS
YW5nZSogcmFuZ2UpIGNvbnN0Cit7CisgICAgRnJhbWVWaWV3KiB2aWV3ID0gbV9mcmFtZS0+dmll
dygpOworICAgIGlmICghdmlldykKKyAgICAgICAgcmV0dXJuIEZsb2F0UmVjdCgpOworICAgIFZl
Y3RvcjxGbG9hdFF1YWQ+IHRleHRRdWFkczsKKyAgICByYW5nZS0+dGV4dFF1YWRzKHRleHRRdWFk
cyk7CisgICAgRmxvYXRSZWN0IGJvdW5kaW5nUmVjdDsKKyAgICBzaXplX3Qgc2l6ZSA9IHRleHRR
dWFkcy5zaXplKCk7CisgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBzaXplOyArK2kpCisgICAg
ICAgIGJvdW5kaW5nUmVjdC51bml0ZSh0ZXh0UXVhZHNbaV0uYm91bmRpbmdCb3goKSk7CisgICAg
cmV0dXJuIHZpZXctPmNvbnRlbnRzVG9Sb290VmlldyhJbnRSZWN0KGJvdW5kaW5nUmVjdCkpOwor
fSAgICAgICAgCisKK3ZvaWQgU3BlbGxpbmdDb3JyZWN0aW9uQ29udHJvbGxlcjo6cmVzcG9uZFRv
Q2hhbmdlZFNlbGVjdGlvbihjb25zdCBWaXNpYmxlU2VsZWN0aW9uJiBvbGRTZWxlY3Rpb24pCit7
CisgICAgVmlzaWJsZVNlbGVjdGlvbiBjdXJyZW50U2VsZWN0aW9uKG1fZnJhbWUtPnNlbGVjdGlv
bigpLT5zZWxlY3Rpb24oKSk7CisgICAgLy8gV2hlbiB1c2VyIG1vdmVzIGNhcmV0IHRvIHRoZSBl
bmQgb2YgYXV0b2NvcnJlY3RlZCB3b3JkIGFuZCBwYXVzZXMsIHdlIHNob3cgdGhlIHBhbmVsCisg
ICAgLy8gY29udGFpbmluZyB0aGUgb3JpZ2luYWwgcHJlLWNvcnJlY3Rpb24gd29yZCBzbyB0aGF0
IHVzZXIgY2FuIHF1aWNrbHkgcmV2ZXJ0IHRoZQorICAgIC8vIHVuZGVzaXJlZCBhdXRvY29ycmVj
dGlvbi4gSGVyZSwgd2Ugc3RhcnQgY29ycmVjdGlvbiBwYW5lbCB0aW1lciBvbmNlIHdlIGNvbmZp
cm0gdGhhdAorICAgIC8vIHRoZSBuZXcgY2FyZXQgcG9zaXRpb24gaXMgYXQgdGhlIGVuZCBvZiBh
IHdvcmQuCisgICAgaWYgKCFjdXJyZW50U2VsZWN0aW9uLmlzQ2FyZXQoKSB8fCBjdXJyZW50U2Vs
ZWN0aW9uID09IG9sZFNlbGVjdGlvbikKKyAgICAgICAgcmV0dXJuOworCisgICAgVmlzaWJsZVBv
c2l0aW9uIHNlbGVjdGlvblBvc2l0aW9uID0gY3VycmVudFNlbGVjdGlvbi5zdGFydCgpOworICAg
IAorICAgIC8vIENyZWF0aW5nIGEgVmlzaWJsZSBwb3NpdGlvbiB0cmlnZ2VycyBhIGxheW91dCBh
bmQgdGhlcmUgaXMgbm8KKyAgICAvLyBndWFyYW50ZWUgdGhhdCB0aGUgc2VsZWN0aW9uIGlzIHN0
aWxsIHZhbGlkLgorICAgIGlmIChzZWxlY3Rpb25Qb3NpdGlvbi5pc051bGwoKSkKKyAgICAgICAg
cmV0dXJuOworICAgIAorICAgIFZpc2libGVQb3NpdGlvbiBlbmRQb3NpdGlvbk9mV29yZCA9IGVu
ZE9mV29yZChzZWxlY3Rpb25Qb3NpdGlvbiwgTGVmdFdvcmRJZk9uQm91bmRhcnkpOworICAgIGlm
IChzZWxlY3Rpb25Qb3NpdGlvbiAhPSBlbmRQb3NpdGlvbk9mV29yZCkKKyAgICAgICAgcmV0dXJu
OworCisgICAgUG9zaXRpb24gcG9zaXRpb24gPSBlbmRQb3NpdGlvbk9mV29yZC5kZWVwRXF1aXZh
bGVudCgpOworICAgIGlmIChwb3NpdGlvbi5hbmNob3JUeXBlKCkgIT0gUG9zaXRpb246OlBvc2l0
aW9uSXNPZmZzZXRJbkFuY2hvcikKKyAgICAgICAgcmV0dXJuOworCisgICAgTm9kZSogbm9kZSA9
IHBvc2l0aW9uLmNvbnRhaW5lck5vZGUoKTsKKyAgICBpbnQgZW5kT2Zmc2V0ID0gcG9zaXRpb24u
b2Zmc2V0SW5Db250YWluZXJOb2RlKCk7CisgICAgVmVjdG9yPERvY3VtZW50TWFya2VyKj4gbWFy
a2VycyA9IG5vZGUtPmRvY3VtZW50KCktPm1hcmtlcnMoKS0+bWFya2Vyc0Zvcihub2RlKTsKKyAg
ICBzaXplX3QgbWFya2VyQ291bnQgPSBtYXJrZXJzLnNpemUoKTsKKyAgICBmb3IgKHNpemVfdCBp
ID0gMDsgaSA8IG1hcmtlckNvdW50OyArK2kpIHsKKyAgICAgICAgY29uc3QgRG9jdW1lbnRNYXJr
ZXIqIG1hcmtlciA9IG1hcmtlcnNbaV07CisgICAgICAgIGlmICghc2hvdWxkU3RhcnRUaW1lckZv
cihtYXJrZXIsIGVuZE9mZnNldCkpCisgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgUmVm
UHRyPFJhbmdlPiB3b3JkUmFuZ2UgPSBSYW5nZTo6Y3JlYXRlKG1fZnJhbWUtPmRvY3VtZW50KCks
IG5vZGUsIG1hcmtlci0+c3RhcnRPZmZzZXQoKSwgbm9kZSwgbWFya2VyLT5lbmRPZmZzZXQoKSk7
CisgICAgICAgIFN0cmluZyBjdXJyZW50V29yZCA9IHBsYWluVGV4dCh3b3JkUmFuZ2UuZ2V0KCkp
OworICAgICAgICBpZiAoIWN1cnJlbnRXb3JkLmxlbmd0aCgpKQorICAgICAgICAgICAgY29udGlu
dWU7CisKKyAgICAgICAgbV9jb3JyZWN0aW9uUGFuZWxJbmZvLnJhbmdlVG9CZVJlcGxhY2VkID0g
d29yZFJhbmdlOworICAgICAgICBtX2NvcnJlY3Rpb25QYW5lbEluZm8ucmVwbGFjZWRTdHJpbmcg
PSBjdXJyZW50V29yZDsKKyAgICAgICAgaWYgKG1hcmtlci0+dHlwZSgpID09IERvY3VtZW50TWFy
a2VyOjpTcGVsbGluZykKKyAgICAgICAgICAgIHN0YXJ0Q29ycmVjdGlvblBhbmVsVGltZXIoQ29y
cmVjdGlvblBhbmVsSW5mbzo6UGFuZWxUeXBlU3BlbGxpbmdTdWdnZXN0aW9ucyk7CisgICAgICAg
IGVsc2UgeworICAgICAgICAgICAgbV9jb3JyZWN0aW9uUGFuZWxJbmZvLnJlcGxhY2VtZW50U3Ry
aW5nID0gbWFya2VyLT5kZXNjcmlwdGlvbigpOworICAgICAgICAgICAgc3RhcnRDb3JyZWN0aW9u
UGFuZWxUaW1lcihDb3JyZWN0aW9uUGFuZWxJbmZvOjpQYW5lbFR5cGVSZXZlcnNpb24pOworICAg
ICAgICB9CisKKyAgICAgICAgYnJlYWs7CisgICAgfQorfQorCit2b2lkIFNwZWxsaW5nQ29ycmVj
dGlvbkNvbnRyb2xsZXI6OnJlc3BvbmRUb0FwcGxpZWRFZGl0aW5nKENvbXBvc2l0ZUVkaXRDb21t
YW5kKiBjb21tYW5kKQoreworICAgIGlmIChjb21tYW5kLT5pc1RvcExldmVsQ29tbWFuZCgpICYm
ICFjb21tYW5kLT5zaG91bGRSZXRhaW5BdXRvY29ycmVjdGlvbkluZGljYXRvcigpKQorICAgICAg
ICBtX2ZyYW1lLT5kb2N1bWVudCgpLT5tYXJrZXJzKCktPnJlbW92ZU1hcmtlcnMoRG9jdW1lbnRN
YXJrZXI6OkNvcnJlY3Rpb25JbmRpY2F0b3IpOworCisgICAgbWFya1ByZWNlZGluZ1doaXRlc3Bh
Y2VGb3JEZWxldGVkQXV0b2NvcnJlY3Rpb25BZnRlckNvbW1hbmQoY29tbWFuZCk7CisgICAgbV9v
cmlnaW5hbFN0cmluZ0Zvckxhc3REZWxldGVkQXV0b2NvcnJlY3Rpb24gPSBTdHJpbmcoKTsKK30K
Kwordm9pZCBTcGVsbGluZ0NvcnJlY3Rpb25Db250cm9sbGVyOjpyZXNwb25kVG9VbmFwcGxpZWRF
ZGl0aW5nKEVkaXRDb21tYW5kQ29tcG9zaXRpb24qIGNvbW1hbmQpCit7CisgICAgaWYgKCFjb21t
YW5kLT53YXNDcmVhdGVMaW5rQ29tbWFuZCgpKQorICAgICAgICByZXR1cm47CisgICAgUmVmUHRy
PFJhbmdlPiByYW5nZSA9IFJhbmdlOjpjcmVhdGUobV9mcmFtZS0+ZG9jdW1lbnQoKSwgY29tbWFu
ZC0+c3RhcnRpbmdTZWxlY3Rpb24oKS5zdGFydCgpLCBjb21tYW5kLT5zdGFydGluZ1NlbGVjdGlv
bigpLmVuZCgpKTsKKyAgICBpZiAoIXJhbmdlKQorICAgICAgICByZXR1cm47CisgICAgRG9jdW1l
bnRNYXJrZXJDb250cm9sbGVyKiBtYXJrZXJzID0gbV9mcmFtZS0+ZG9jdW1lbnQoKS0+bWFya2Vy
cygpOworICAgIG1hcmtlcnMtPmFkZE1hcmtlcihyYW5nZS5nZXQoKSwgRG9jdW1lbnRNYXJrZXI6
OlJlcGxhY2VtZW50KTsKKyAgICBtYXJrZXJzLT5hZGRNYXJrZXIocmFuZ2UuZ2V0KCksIERvY3Vt
ZW50TWFya2VyOjpTcGVsbENoZWNraW5nRXhlbXB0aW9uKTsKK30KKworRWRpdG9yQ2xpZW50KiBT
cGVsbGluZ0NvcnJlY3Rpb25Db250cm9sbGVyOjpjbGllbnQoKQoreworICAgIHJldHVybiBtX2Zy
YW1lLT5wYWdlKCkgPyBtX2ZyYW1lLT5wYWdlKCktPmVkaXRvckNsaWVudCgpIDogMDsKK30KKwor
VGV4dENoZWNrZXJDbGllbnQqIFNwZWxsaW5nQ29ycmVjdGlvbkNvbnRyb2xsZXI6OnRleHRDaGVj
a2VyKCkKK3sKKyAgICBpZiAoRWRpdG9yQ2xpZW50KiBvd25lciA9IGNsaWVudCgpKQorICAgICAg
ICByZXR1cm4gb3duZXItPnRleHRDaGVja2VyKCk7CisgICAgcmV0dXJuIDA7Cit9CisKK3ZvaWQg
U3BlbGxpbmdDb3JyZWN0aW9uQ29udHJvbGxlcjo6cmVjb3JkQXV0b2NvcnJlY3Rpb25SZXNwb25z
ZVJldmVyc2VkKGNvbnN0IFN0cmluZyYgcmVwbGFjZWRTdHJpbmcsIGNvbnN0IFN0cmluZyYgcmVw
bGFjZW1lbnRTdHJpbmcpCit7CisgICAgY2xpZW50KCktPnJlY29yZEF1dG9jb3JyZWN0aW9uUmVz
cG9uc2UoRWRpdG9yQ2xpZW50OjpBdXRvY29ycmVjdGlvblJldmVydGVkLCByZXBsYWNlZFN0cmlu
ZywgcmVwbGFjZW1lbnRTdHJpbmcpOworfQorCit2b2lkIFNwZWxsaW5nQ29ycmVjdGlvbkNvbnRy
b2xsZXI6OnJlY29yZEF1dG9jb3JyZWN0aW9uUmVzcG9uc2VSZXZlcnNlZChjb25zdCBTdHJpbmcm
IHJlcGxhY2VkU3RyaW5nLCBQYXNzUmVmUHRyPFJhbmdlPiByZXBsYWNlbWVudFJhbmdlKQorewor
ICAgIHJlY29yZEF1dG9jb3JyZWN0aW9uUmVzcG9uc2VSZXZlcnNlZChyZXBsYWNlZFN0cmluZywg
cGxhaW5UZXh0KHJlcGxhY2VtZW50UmFuZ2UuZ2V0KCkpKTsKK30KKwordm9pZCBTcGVsbGluZ0Nv
cnJlY3Rpb25Db250cm9sbGVyOjptYXJrUmV2ZXJzZWQoUGFzc1JlZlB0cjxSYW5nZT4gY2hhbmdl
ZFJhbmdlKQoreworICAgIGNoYW5nZWRSYW5nZS0+c3RhcnRDb250YWluZXIoKS0+ZG9jdW1lbnQo
KS0+bWFya2VycygpLT5yZW1vdmVNYXJrZXJzKGNoYW5nZWRSYW5nZS5nZXQoKSwgRG9jdW1lbnRN
YXJrZXI6OkF1dG9jb3JyZWN0ZWQsIERvY3VtZW50TWFya2VyQ29udHJvbGxlcjo6UmVtb3ZlUGFy
dGlhbGx5T3ZlcmxhcHBpbmdNYXJrZXIpOworICAgIGNoYW5nZWRSYW5nZS0+c3RhcnRDb250YWlu
ZXIoKS0+ZG9jdW1lbnQoKS0+bWFya2VycygpLT5hZGRNYXJrZXIoY2hhbmdlZFJhbmdlLmdldCgp
LCBEb2N1bWVudE1hcmtlcjo6U3BlbGxDaGVja2luZ0V4ZW1wdGlvbik7Cit9CisKK3ZvaWQgU3Bl
bGxpbmdDb3JyZWN0aW9uQ29udHJvbGxlcjo6bWFya0NvcnJlY3Rpb24oUGFzc1JlZlB0cjxSYW5n
ZT4gcmVwbGFjZWRSYW5nZSwgY29uc3QgU3RyaW5nJiByZXBsYWNlZFN0cmluZykKK3sKKyAgICBW
ZWN0b3I8RG9jdW1lbnRNYXJrZXI6Ok1hcmtlclR5cGU+IG1hcmtlclR5cGVzVG9BZGQgPSBtYXJr
ZXJUeXBlc0ZvckF1dG9jb3JyZWN0aW9uKCk7CisgICAgRG9jdW1lbnRNYXJrZXJDb250cm9sbGVy
KiBtYXJrZXJzID0gcmVwbGFjZWRSYW5nZS0+c3RhcnRDb250YWluZXIoKS0+ZG9jdW1lbnQoKS0+
bWFya2VycygpOworICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgbWFya2VyVHlwZXNUb0FkZC5z
aXplKCk7ICsraSkgeworICAgICAgICBEb2N1bWVudE1hcmtlcjo6TWFya2VyVHlwZSBtYXJrZXJU
eXBlID0gbWFya2VyVHlwZXNUb0FkZFtpXTsKKyAgICAgICAgaWYgKG1hcmtlclR5cGUgPT0gRG9j
dW1lbnRNYXJrZXI6OlJlcGxhY2VtZW50IHx8IG1hcmtlclR5cGUgPT0gRG9jdW1lbnRNYXJrZXI6
OkF1dG9jb3JyZWN0ZWQpCisgICAgICAgICAgICBtYXJrZXJzLT5hZGRNYXJrZXIocmVwbGFjZWRS
YW5nZS5nZXQoKSwgbWFya2VyVHlwZSwgcmVwbGFjZWRTdHJpbmcpOworICAgICAgICBlbHNlCisg
ICAgICAgICAgICBtYXJrZXJzLT5hZGRNYXJrZXIocmVwbGFjZWRSYW5nZS5nZXQoKSwgbWFya2Vy
VHlwZSk7CisgICAgfQorfQorCit2b2lkIFNwZWxsaW5nQ29ycmVjdGlvbkNvbnRyb2xsZXI6OnJl
Y29yZFNwZWxsY2hlY2tlclJlc3BvbnNlRm9yTW9kaWZpZWRDb3JyZWN0aW9uKFJhbmdlKiByYW5n
ZU9mQ29ycmVjdGlvbiwgY29uc3QgU3RyaW5nJiBjb3JyZWN0ZWQsIGNvbnN0IFN0cmluZyYgY29y
cmVjdGlvbikKK3sKKyAgICBpZiAoIXJhbmdlT2ZDb3JyZWN0aW9uKQorICAgICAgICByZXR1cm47
CisgICAgRG9jdW1lbnRNYXJrZXJDb250cm9sbGVyKiBtYXJrZXJzID0gcmFuZ2VPZkNvcnJlY3Rp
b24tPnN0YXJ0Q29udGFpbmVyKCktPmRvY3VtZW50KCktPm1hcmtlcnMoKTsKKyAgICBWZWN0b3I8
RG9jdW1lbnRNYXJrZXIqPiBjb3JyZWN0ZWRPbmNlTWFya2VycyA9IG1hcmtlcnMtPm1hcmtlcnNJ
blJhbmdlKHJhbmdlT2ZDb3JyZWN0aW9uLCBEb2N1bWVudE1hcmtlcjo6QXV0b2NvcnJlY3RlZCk7
CisgICAgaWYgKGNvcnJlY3RlZE9uY2VNYXJrZXJzLmlzRW1wdHkoKSkKKyAgICAgICAgcmV0dXJu
OworICAgIAorICAgIC8vIFNwZWxsaW5nIGNvcnJlY3RlZCB0ZXh0IGhhcyBiZWVuIGVkaXRlZC4g
V2UgbmVlZCB0byBkZXRlcm1pbmUgd2hldGhlciB1c2VyIGhhcyByZXZlcnRlZCBpdCB0byBvcmln
aW5hbCB0ZXh0IG9yCisgICAgLy8gZWRpdGVkIGl0IHRvIHNvbWV0aGluZyBlbHNlLCBhbmQgbm90
aWZ5IHNwZWxsY2hlY2tlciBhY2NvcmRpbmdseS4KKyAgICBpZiAobWFya2Vyc0hhdmVJZGVudGlj
YWxEZXNjcmlwdGlvbihjb3JyZWN0ZWRPbmNlTWFya2VycykgJiYgY29ycmVjdGVkT25jZU1hcmtl
cnNbMF0tPmRlc2NyaXB0aW9uKCkgPT0gY29ycmVjdGVkKQorICAgICAgICBjbGllbnQoKS0+cmVj
b3JkQXV0b2NvcnJlY3Rpb25SZXNwb25zZShFZGl0b3JDbGllbnQ6OkF1dG9jb3JyZWN0aW9uUmV2
ZXJ0ZWQsIGNvcnJlY3RlZCwgY29ycmVjdGlvbik7CisgICAgZWxzZQorICAgICAgICBjbGllbnQo
KS0+cmVjb3JkQXV0b2NvcnJlY3Rpb25SZXNwb25zZShFZGl0b3JDbGllbnQ6OkF1dG9jb3JyZWN0
aW9uRWRpdGVkLCBjb3JyZWN0ZWQsIGNvcnJlY3Rpb24pOworICAgIG1hcmtlcnMtPnJlbW92ZU1h
cmtlcnMocmFuZ2VPZkNvcnJlY3Rpb24sIERvY3VtZW50TWFya2VyOjpBdXRvY29ycmVjdGVkLCBE
b2N1bWVudE1hcmtlckNvbnRyb2xsZXI6OlJlbW92ZVBhcnRpYWxseU92ZXJsYXBwaW5nTWFya2Vy
KTsKK30KKwordm9pZCBTcGVsbGluZ0NvcnJlY3Rpb25Db250cm9sbGVyOjpkZWxldGVkQXV0b2Nv
cnJlY3Rpb25BdFBvc2l0aW9uKGNvbnN0IFBvc2l0aW9uJiBwb3NpdGlvbiwgY29uc3QgU3RyaW5n
JiBvcmlnaW5hbFN0cmluZykKK3sKKyAgICBtX29yaWdpbmFsU3RyaW5nRm9yTGFzdERlbGV0ZWRB
dXRvY29ycmVjdGlvbiA9IG9yaWdpbmFsU3RyaW5nOworICAgIG1fcG9zaXRpb25Gb3JMYXN0RGVs
ZXRlZEF1dG9jb3JyZWN0aW9uID0gcG9zaXRpb247Cit9CisKK3ZvaWQgU3BlbGxpbmdDb3JyZWN0
aW9uQ29udHJvbGxlcjo6bWFya1ByZWNlZGluZ1doaXRlc3BhY2VGb3JEZWxldGVkQXV0b2NvcnJl
Y3Rpb25BZnRlckNvbW1hbmQoRWRpdENvbW1hbmQqIGNvbW1hbmQpCit7CisgICAgUG9zaXRpb24g
ZW5kT2ZTZWxlY3Rpb24gPSBjb21tYW5kLT5lbmRpbmdTZWxlY3Rpb24oKS5lbmQoKTsKKyAgICBp
ZiAoZW5kT2ZTZWxlY3Rpb24gIT0gbV9wb3NpdGlvbkZvckxhc3REZWxldGVkQXV0b2NvcnJlY3Rp
b24pCisgICAgICAgIHJldHVybjsKKworICAgIFBvc2l0aW9uIHByZWNlZGluZ0NoYXJhY3RlclBv
c2l0aW9uID0gZW5kT2ZTZWxlY3Rpb24ucHJldmlvdXMoKTsKKyAgICBpZiAoZW5kT2ZTZWxlY3Rp
b24gPT0gcHJlY2VkaW5nQ2hhcmFjdGVyUG9zaXRpb24pCisgICAgICAgIHJldHVybjsKKworICAg
IFJlZlB0cjxSYW5nZT4gcHJlY2VkaW5nQ2hhcmFjdGVyUmFuZ2UgPSBSYW5nZTo6Y3JlYXRlKG1f
ZnJhbWUtPmRvY3VtZW50KCksIHByZWNlZGluZ0NoYXJhY3RlclBvc2l0aW9uLCBlbmRPZlNlbGVj
dGlvbik7CisgICAgU3RyaW5nIHN0cmluZyA9IHBsYWluVGV4dChwcmVjZWRpbmdDaGFyYWN0ZXJS
YW5nZS5nZXQoKSk7CisgICAgaWYgKHN0cmluZy5pc0VtcHR5KCkgfHwgIWlzV2hpdGVzcGFjZShz
dHJpbmdbc3RyaW5nLmxlbmd0aCgpIC0gMV0pKQorICAgICAgICByZXR1cm47CisKKyAgICAvLyBN
YXJrIHRoaXMgd2hpdGVzcGFjZSB0byBpbmRpY2F0ZSB3ZSBoYXZlIGRlbGV0ZWQgYW4gYXV0b2Nv
cnJlY3Rpb24gZm9sbG93aW5nIHRoaXMKKyAgICAvLyB3aGl0ZXNwYWNlLiBTbyBpZiB0aGUgdXNl
ciB0eXBlcyB0aGUgc2FtZSBvcmlnaW5hbCB3b3JkIGFnYWluIGF0IHRoaXMgcG9zaXRpb24sIHdl
CisgICAgLy8gd29uJ3QgYXV0b2NvcnJlY3QgaXQgYWdhaW4uCisgICAgbV9mcmFtZS0+ZG9jdW1l
bnQoKS0+bWFya2VycygpLT5hZGRNYXJrZXIocHJlY2VkaW5nQ2hhcmFjdGVyUmFuZ2UuZ2V0KCks
IERvY3VtZW50TWFya2VyOjpEZWxldGVkQXV0b2NvcnJlY3Rpb24sIG1fb3JpZ2luYWxTdHJpbmdG
b3JMYXN0RGVsZXRlZEF1dG9jb3JyZWN0aW9uKTsKK30KKworYm9vbCBTcGVsbGluZ0NvcnJlY3Rp
b25Db250cm9sbGVyOjpwcm9jZXNzTWFya2Vyc09uVGV4dFRvQmVSZXBsYWNlZEJ5UmVzdWx0KGNv
bnN0IFRleHRDaGVja2luZ1Jlc3VsdCogcmVzdWx0LCBSYW5nZSogcmFuZ2VUb0JlUmVwbGFjZWQs
IGNvbnN0IFN0cmluZyYgc3RyaW5nVG9CZVJlcGxhY2VkKQoreworICAgIERvY3VtZW50TWFya2Vy
Q29udHJvbGxlciogbWFya2VyQ29udHJvbGxlciA9IG1fZnJhbWUtPmRvY3VtZW50KCktPm1hcmtl
cnMoKTsKKyAgICBpZiAobWFya2VyQ29udHJvbGxlci0+aGFzTWFya2VycyhyYW5nZVRvQmVSZXBs
YWNlZCwgRG9jdW1lbnRNYXJrZXI6OlJlcGxhY2VtZW50KSkgeworICAgICAgICBpZiAocmVzdWx0
LT50eXBlID09IFRleHRDaGVja2luZ1R5cGVDb3JyZWN0aW9uKQorICAgICAgICAgICAgcmVjb3Jk
U3BlbGxjaGVja2VyUmVzcG9uc2VGb3JNb2RpZmllZENvcnJlY3Rpb24ocmFuZ2VUb0JlUmVwbGFj
ZWQsIHN0cmluZ1RvQmVSZXBsYWNlZCwgcmVzdWx0LT5yZXBsYWNlbWVudCk7CisgICAgICAgIHJl
dHVybiBmYWxzZTsKKyAgICB9CisKKyAgICBpZiAobWFya2VyQ29udHJvbGxlci0+aGFzTWFya2Vy
cyhyYW5nZVRvQmVSZXBsYWNlZCwgRG9jdW1lbnRNYXJrZXI6OlJlamVjdGVkQ29ycmVjdGlvbikp
CisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIFBvc2l0aW9uIGJlZ2lubmluZ09mUmFuZ2Ug
PSByYW5nZVRvQmVSZXBsYWNlZC0+c3RhcnRQb3NpdGlvbigpOworICAgIFBvc2l0aW9uIHByZWNl
ZGluZ0NoYXJhY3RlclBvc2l0aW9uID0gYmVnaW5uaW5nT2ZSYW5nZS5wcmV2aW91cygpOworICAg
IFJlZlB0cjxSYW5nZT4gcHJlY2VkaW5nQ2hhcmFjdGVyUmFuZ2UgPSBSYW5nZTo6Y3JlYXRlKG1f
ZnJhbWUtPmRvY3VtZW50KCksIHByZWNlZGluZ0NoYXJhY3RlclBvc2l0aW9uLCBiZWdpbm5pbmdP
ZlJhbmdlKTsKKworICAgIFZlY3RvcjxEb2N1bWVudE1hcmtlcio+IG1hcmtlcnMgPSBtYXJrZXJD
b250cm9sbGVyLT5tYXJrZXJzSW5SYW5nZShwcmVjZWRpbmdDaGFyYWN0ZXJSYW5nZS5nZXQoKSwg
RG9jdW1lbnRNYXJrZXI6OkRlbGV0ZWRBdXRvY29ycmVjdGlvbik7CisKKyAgICBmb3IgKHNpemVf
dCBpID0gMDsgaSA8IG1hcmtlcnMuc2l6ZSgpOyArK2kpIHsKKyAgICAgICAgaWYgKG1hcmtlcnNb
aV0tPmRlc2NyaXB0aW9uKCkgPT0gc3RyaW5nVG9CZVJlcGxhY2VkKQorICAgICAgICAgICAgcmV0
dXJuIGZhbHNlOworICAgIH0KKworICAgIHJldHVybiB0cnVlOworfQorICAgIAorI2VuZGlmCisK
K30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2VkaXRpbmcvQWx0
ZXJuYXRpdmVUZXh0Q29udHJvbGxlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUv
ZWRpdGluZy9BbHRlcm5hdGl2ZVRleHRDb250cm9sbGVyLmNwcAkocmV2aXNpb24gMTEyODMwKQor
KysgU291cmNlL1dlYkNvcmUvZWRpdGluZy9BbHRlcm5hdGl2ZVRleHRDb250cm9sbGVyLmNwcAko
d29ya2luZyBjb3B5KQpAQCAtMjUsNyArMjUsNyBAQAogICovCiAKICNpbmNsdWRlICJjb25maWcu
aCIKLSNpbmNsdWRlICJTcGVsbGluZ0NvcnJlY3Rpb25Db250cm9sbGVyLmgiCisjaW5jbHVkZSAi
QWx0ZXJuYXRpdmVUZXh0Q29udHJvbGxlci5oIgogCiAjaW5jbHVkZSAiRG9jdW1lbnRNYXJrZXJD
b250cm9sbGVyLmgiCiAjaW5jbHVkZSAiRWRpdENvbW1hbmQuaCIKQEAgLTQ4LDYgKzQ4LDIyIEBA
IG5hbWVzcGFjZSBXZWJDb3JlIHsKIHVzaW5nIG5hbWVzcGFjZSBzdGQ7CiB1c2luZyBuYW1lc3Bh
Y2UgV1RGOwogCitjbGFzcyBBdXRvY29ycmVjdGlvbkFsdGVybmF0aXZlRGV0YWlscyA6IHB1Ymxp
YyBBbHRlcm5hdGl2ZVRleHREZXRhaWxzIHsKK3B1YmxpYzoKKyAgICBzdGF0aWMgUGFzc1JlZlB0
cjxBdXRvY29ycmVjdGlvbkFsdGVybmF0aXZlRGV0YWlscz4gY3JlYXRlKGNvbnN0IFN0cmluZyYg
cmVwbGFjZW1lbnRTdHJpbmcpCisgICAgeworICAgICAgICByZXR1cm4gYWRvcHRSZWYobmV3IEF1
dG9jb3JyZWN0aW9uQWx0ZXJuYXRpdmVEZXRhaWxzKHJlcGxhY2VtZW50U3RyaW5nKSk7CisgICAg
fQorICAgIAorICAgIGNvbnN0IFN0cmluZyYgcmVwbGFjZW1lbnRTdHJpbmcoKSBjb25zdCB7IHJl
dHVybiBtX3JlcGxhY2VtZW50U3RyaW5nOyB9Citwcml2YXRlOgorICAgIEF1dG9jb3JyZWN0aW9u
QWx0ZXJuYXRpdmVEZXRhaWxzKGNvbnN0IFN0cmluZyYgcmVwbGFjZW1lbnRTdHJpbmcpCisgICAg
OiBtX3JlcGxhY2VtZW50U3RyaW5nKHJlcGxhY2VtZW50U3RyaW5nKQorICAgIHsgfQorICAgIAor
ICAgIFN0cmluZyBtX3JlcGxhY2VtZW50U3RyaW5nOworfTsKKwogI2lmIFVTRShBVVRPQ09SUkVD
VElPTl9QQU5FTCkKIAogc3RhdGljIGNvbnN0IFZlY3RvcjxEb2N1bWVudE1hcmtlcjo6TWFya2Vy
VHlwZT4mIG1hcmtlclR5cGVzRm9yQXV0b2NvcnJlY3Rpb24oKQpAQCAtODUsNDggKzEwMSw0OCBA
QCBzdGF0aWMgYm9vbCBtYXJrZXJzSGF2ZUlkZW50aWNhbERlc2NyaXB0CiAgICAgcmV0dXJuIHRy
dWU7CiB9CiAKLVNwZWxsaW5nQ29ycmVjdGlvbkNvbnRyb2xsZXI6OlNwZWxsaW5nQ29ycmVjdGlv
bkNvbnRyb2xsZXIoRnJhbWUqIGZyYW1lKQorQWx0ZXJuYXRpdmVUZXh0Q29udHJvbGxlcjo6QWx0
ZXJuYXRpdmVUZXh0Q29udHJvbGxlcihGcmFtZSogZnJhbWUpCiAgICAgOiBtX2ZyYW1lKGZyYW1l
KQotICAgICwgbV9jb3JyZWN0aW9uUGFuZWxUaW1lcih0aGlzLCAmU3BlbGxpbmdDb3JyZWN0aW9u
Q29udHJvbGxlcjo6Y29ycmVjdGlvblBhbmVsVGltZXJGaXJlZCkKKyAgICAsIG1fdGltZXIodGhp
cywgJkFsdGVybmF0aXZlVGV4dENvbnRyb2xsZXI6OnRpbWVyRmlyZWQpCiB7CiB9CiAKLVNwZWxs
aW5nQ29ycmVjdGlvbkNvbnRyb2xsZXI6On5TcGVsbGluZ0NvcnJlY3Rpb25Db250cm9sbGVyKCkK
K0FsdGVybmF0aXZlVGV4dENvbnRyb2xsZXI6On5BbHRlcm5hdGl2ZVRleHRDb250cm9sbGVyKCkK
IHsKLSAgICBkaXNtaXNzKFJlYXNvbkZvckRpc21pc3NpbmdDb3JyZWN0aW9uUGFuZWxJZ25vcmVk
KTsKKyAgICBkaXNtaXNzKFJlYXNvbkZvckRpc21pc3NpbmdBbHRlcm5hdGl2ZVRleHRJZ25vcmVk
KTsKIH0KIAotdm9pZCBTcGVsbGluZ0NvcnJlY3Rpb25Db250cm9sbGVyOjpzdGFydENvcnJlY3Rp
b25QYW5lbFRpbWVyKENvcnJlY3Rpb25QYW5lbEluZm86OlBhbmVsVHlwZSB0eXBlKQordm9pZCBB
bHRlcm5hdGl2ZVRleHRDb250cm9sbGVyOjpzdGFydEFsdGVybmF0aXZlVGV4dFVJVGltZXIoQWx0
ZXJuYXRpdmVUZXh0VHlwZSB0eXBlKQogewogICAgIGNvbnN0IGRvdWJsZSBjb3JyZWN0aW9uUGFu
ZWxUaW1lckludGVydmFsID0gMC4zOwogICAgIGlmICghaXNBdXRvbWF0aWNTcGVsbGluZ0NvcnJl
Y3Rpb25FbmFibGVkKCkpCiAgICAgICAgIHJldHVybjsKIAogICAgIC8vIElmIHR5cGUgaXMgUGFu
ZWxUeXBlUmV2ZXJzaW9uLCB0aGVuIHRoZSBuZXcgcmFuZ2UgaGFzIGJlZW4gc2V0LiBTbyB3ZSBz
aG91bGRuJ3QgY2xlYXIgaXQuCi0gICAgaWYgKHR5cGUgPT0gQ29ycmVjdGlvblBhbmVsSW5mbzo6
UGFuZWxUeXBlQ29ycmVjdGlvbikKLSAgICAgICAgbV9jb3JyZWN0aW9uUGFuZWxJbmZvLnJhbmdl
VG9CZVJlcGxhY2VkLmNsZWFyKCk7Ci0gICAgbV9jb3JyZWN0aW9uUGFuZWxJbmZvLnBhbmVsVHlw
ZSA9IHR5cGU7Ci0gICAgbV9jb3JyZWN0aW9uUGFuZWxUaW1lci5zdGFydE9uZVNob3QoY29ycmVj
dGlvblBhbmVsVGltZXJJbnRlcnZhbCk7CisgICAgaWYgKHR5cGUgPT0gQWx0ZXJuYXRpdmVUZXh0
VHlwZUNvcnJlY3Rpb24pCisgICAgICAgIG1fYWx0ZXJuYXRpdmVUZXh0SW5mby5yYW5nZVdpdGhB
bHRlcm5hdGl2ZS5jbGVhcigpOworICAgIG1fYWx0ZXJuYXRpdmVUZXh0SW5mby50eXBlID0gdHlw
ZTsKKyAgICBtX3RpbWVyLnN0YXJ0T25lU2hvdChjb3JyZWN0aW9uUGFuZWxUaW1lckludGVydmFs
KTsKIH0KIAotdm9pZCBTcGVsbGluZ0NvcnJlY3Rpb25Db250cm9sbGVyOjpzdG9wQ29ycmVjdGlv
blBhbmVsVGltZXIoKQordm9pZCBBbHRlcm5hdGl2ZVRleHRDb250cm9sbGVyOjpzdG9wQWx0ZXJu
YXRpdmVUZXh0VUlUaW1lcigpCiB7Ci0gICAgbV9jb3JyZWN0aW9uUGFuZWxUaW1lci5zdG9wKCk7
Ci0gICAgbV9jb3JyZWN0aW9uUGFuZWxJbmZvLnJhbmdlVG9CZVJlcGxhY2VkLmNsZWFyKCk7Cisg
ICAgbV90aW1lci5zdG9wKCk7CisgICAgbV9hbHRlcm5hdGl2ZVRleHRJbmZvLnJhbmdlV2l0aEFs
dGVybmF0aXZlLmNsZWFyKCk7CiB9CiAKLXZvaWQgU3BlbGxpbmdDb3JyZWN0aW9uQ29udHJvbGxl
cjo6c3RvcFBlbmRpbmdDb3JyZWN0aW9uKGNvbnN0IFZpc2libGVTZWxlY3Rpb24mIG9sZFNlbGVj
dGlvbikKK3ZvaWQgQWx0ZXJuYXRpdmVUZXh0Q29udHJvbGxlcjo6c3RvcFBlbmRpbmdDb3JyZWN0
aW9uKGNvbnN0IFZpc2libGVTZWxlY3Rpb24mIG9sZFNlbGVjdGlvbikKIHsKICAgICAvLyBNYWtl
IHN1cmUgdGhlcmUncyBubyBwZW5kaW5nIGF1dG9jb3JyZWN0aW9uIGJlZm9yZSB3ZSBjYWxsIG1h
cmtNaXNzcGVsbGluZ3NBbmRCYWRHcmFtbWFyKCkgYmVsb3cuCiAgICAgVmlzaWJsZVNlbGVjdGlv
biBjdXJyZW50U2VsZWN0aW9uKG1fZnJhbWUtPnNlbGVjdGlvbigpLT5zZWxlY3Rpb24oKSk7CiAg
ICAgaWYgKGN1cnJlbnRTZWxlY3Rpb24gPT0gb2xkU2VsZWN0aW9uKQogICAgICAgICByZXR1cm47
CiAKLSAgICBzdG9wQ29ycmVjdGlvblBhbmVsVGltZXIoKTsKLSAgICBkaXNtaXNzKFJlYXNvbkZv
ckRpc21pc3NpbmdDb3JyZWN0aW9uUGFuZWxJZ25vcmVkKTsKKyAgICBzdG9wQWx0ZXJuYXRpdmVU
ZXh0VUlUaW1lcigpOworICAgIGRpc21pc3MoUmVhc29uRm9yRGlzbWlzc2luZ0FsdGVybmF0aXZl
VGV4dElnbm9yZWQpOwogfQogCi12b2lkIFNwZWxsaW5nQ29ycmVjdGlvbkNvbnRyb2xsZXI6OmFw
cGx5UGVuZGluZ0NvcnJlY3Rpb24oY29uc3QgVmlzaWJsZVNlbGVjdGlvbiYgc2VsZWN0aW9uQWZ0
ZXJUeXBpbmcpCit2b2lkIEFsdGVybmF0aXZlVGV4dENvbnRyb2xsZXI6OmFwcGx5UGVuZGluZ0Nv
cnJlY3Rpb24oY29uc3QgVmlzaWJsZVNlbGVjdGlvbiYgc2VsZWN0aW9uQWZ0ZXJUeXBpbmcpCiB7
CiAgICAgLy8gQXBwbHkgcGVuZGluZyBhdXRvY29ycmVjdGlvbiBiZWZvcmUgbmV4dCByb3VuZCBv
ZiBzcGVsbCBjaGVja2luZy4KICAgICBib29sIGRvQXBwbHlDb3JyZWN0aW9uID0gdHJ1ZTsKQEAg
LTEzOCw4NyArMTU0LDg3IEBAIHZvaWQgU3BlbGxpbmdDb3JyZWN0aW9uQ29udHJvbGxlcjo6YXBw
bHkKICAgICAgICAgICAgIGRvQXBwbHlDb3JyZWN0aW9uID0gZmFsc2U7CiAgICAgfQogICAgIGlm
IChkb0FwcGx5Q29ycmVjdGlvbikKLSAgICAgICAgaGFuZGxlQ29ycmVjdGlvblBhbmVsUmVzdWx0
KGRpc21pc3NTb29uKFJlYXNvbkZvckRpc21pc3NpbmdDb3JyZWN0aW9uUGFuZWxBY2NlcHRlZCkp
OyAKKyAgICAgICAgaGFuZGxlQWx0ZXJuYXRpdmVUZXh0VUlSZXN1bHQoZGlzbWlzc1Nvb24oUmVh
c29uRm9yRGlzbWlzc2luZ0FsdGVybmF0aXZlVGV4dEFjY2VwdGVkKSk7IAogICAgIGVsc2UKLSAg
ICAgICAgbV9jb3JyZWN0aW9uUGFuZWxJbmZvLnJhbmdlVG9CZVJlcGxhY2VkLmNsZWFyKCk7Cisg
ICAgICAgIG1fYWx0ZXJuYXRpdmVUZXh0SW5mby5yYW5nZVdpdGhBbHRlcm5hdGl2ZS5jbGVhcigp
OwogfQogCi1ib29sIFNwZWxsaW5nQ29ycmVjdGlvbkNvbnRyb2xsZXI6Omhhc1BlbmRpbmdDb3Jy
ZWN0aW9uKCkgY29uc3QKK2Jvb2wgQWx0ZXJuYXRpdmVUZXh0Q29udHJvbGxlcjo6aGFzUGVuZGlu
Z0NvcnJlY3Rpb24oKSBjb25zdAogewotICAgIHJldHVybiBtX2NvcnJlY3Rpb25QYW5lbEluZm8u
cmFuZ2VUb0JlUmVwbGFjZWQ7CisgICAgcmV0dXJuIG1fYWx0ZXJuYXRpdmVUZXh0SW5mby5yYW5n
ZVdpdGhBbHRlcm5hdGl2ZTsKIH0KIAotYm9vbCBTcGVsbGluZ0NvcnJlY3Rpb25Db250cm9sbGVy
Ojppc1NwZWxsaW5nTWFya2VyQWxsb3dlZChQYXNzUmVmUHRyPFJhbmdlPiBtaXNzcGVsbGluZ1Jh
bmdlKSBjb25zdAorYm9vbCBBbHRlcm5hdGl2ZVRleHRDb250cm9sbGVyOjppc1NwZWxsaW5nTWFy
a2VyQWxsb3dlZChQYXNzUmVmUHRyPFJhbmdlPiBtaXNzcGVsbGluZ1JhbmdlKSBjb25zdAogewog
ICAgIHJldHVybiAhbV9mcmFtZS0+ZG9jdW1lbnQoKS0+bWFya2VycygpLT5oYXNNYXJrZXJzKG1p
c3NwZWxsaW5nUmFuZ2UuZ2V0KCksIERvY3VtZW50TWFya2VyOjpTcGVsbENoZWNraW5nRXhlbXB0
aW9uKTsKIH0KIAotdm9pZCBTcGVsbGluZ0NvcnJlY3Rpb25Db250cm9sbGVyOjpzaG93KFBhc3NS
ZWZQdHI8UmFuZ2U+IHJhbmdlVG9SZXBsYWNlLCBjb25zdCBTdHJpbmcmIHJlcGxhY2VtZW50KQor
dm9pZCBBbHRlcm5hdGl2ZVRleHRDb250cm9sbGVyOjpzaG93KFBhc3NSZWZQdHI8UmFuZ2U+IHJh
bmdlVG9SZXBsYWNlLCBjb25zdCBTdHJpbmcmIHJlcGxhY2VtZW50KQogewogICAgIEZsb2F0UmVj
dCBib3VuZGluZ0JveCA9IHJvb3RWaWV3UmVjdEZvclJhbmdlKHJhbmdlVG9SZXBsYWNlLmdldCgp
KTsKICAgICBpZiAoYm91bmRpbmdCb3guaXNFbXB0eSgpKQogICAgICAgICByZXR1cm47Ci0gICAg
bV9jb3JyZWN0aW9uUGFuZWxJbmZvLnJlcGxhY2VkU3RyaW5nID0gcGxhaW5UZXh0KHJhbmdlVG9S
ZXBsYWNlLmdldCgpKTsKLSAgICBtX2NvcnJlY3Rpb25QYW5lbEluZm8ucmFuZ2VUb0JlUmVwbGFj
ZWQgPSByYW5nZVRvUmVwbGFjZTsKLSAgICBtX2NvcnJlY3Rpb25QYW5lbEluZm8ucmVwbGFjZW1l
bnRTdHJpbmcgPSByZXBsYWNlbWVudDsKLSAgICBtX2NvcnJlY3Rpb25QYW5lbEluZm8uaXNBY3Rp
dmUgPSB0cnVlOwotICAgIGNsaWVudCgpLT5zaG93Q29ycmVjdGlvblBhbmVsKG1fY29ycmVjdGlv
blBhbmVsSW5mby5wYW5lbFR5cGUsIGJvdW5kaW5nQm94LCBtX2NvcnJlY3Rpb25QYW5lbEluZm8u
cmVwbGFjZWRTdHJpbmcsIHJlcGxhY2VtZW50LCBWZWN0b3I8U3RyaW5nPigpKTsKKyAgICBtX2Fs
dGVybmF0aXZlVGV4dEluZm8ub3JpZ2luYWxUZXh0ID0gcGxhaW5UZXh0KHJhbmdlVG9SZXBsYWNl
LmdldCgpKTsKKyAgICBtX2FsdGVybmF0aXZlVGV4dEluZm8ucmFuZ2VXaXRoQWx0ZXJuYXRpdmUg
PSByYW5nZVRvUmVwbGFjZTsKKyAgICBtX2FsdGVybmF0aXZlVGV4dEluZm8uZGV0YWlscyA9IEF1
dG9jb3JyZWN0aW9uQWx0ZXJuYXRpdmVEZXRhaWxzOjpjcmVhdGUocmVwbGFjZW1lbnQpOworICAg
IG1fYWx0ZXJuYXRpdmVUZXh0SW5mby5pc0FjdGl2ZSA9IHRydWU7CisgICAgY2xpZW50KCktPnNo
b3dDb3JyZWN0aW9uUGFuZWwobV9hbHRlcm5hdGl2ZVRleHRJbmZvLnR5cGUsIGJvdW5kaW5nQm94
LCBtX2FsdGVybmF0aXZlVGV4dEluZm8ub3JpZ2luYWxUZXh0LCByZXBsYWNlbWVudCwgVmVjdG9y
PFN0cmluZz4oKSk7CiB9CiAKLXZvaWQgU3BlbGxpbmdDb3JyZWN0aW9uQ29udHJvbGxlcjo6aGFu
ZGxlQ2FuY2VsT3BlcmF0aW9uKCkKK3ZvaWQgQWx0ZXJuYXRpdmVUZXh0Q29udHJvbGxlcjo6aGFu
ZGxlQ2FuY2VsT3BlcmF0aW9uKCkKIHsKLSAgICBpZiAoIW1fY29ycmVjdGlvblBhbmVsSW5mby5p
c0FjdGl2ZSkKKyAgICBpZiAoIW1fYWx0ZXJuYXRpdmVUZXh0SW5mby5pc0FjdGl2ZSkKICAgICAg
ICAgcmV0dXJuOwotICAgIG1fY29ycmVjdGlvblBhbmVsSW5mby5pc0FjdGl2ZSA9IGZhbHNlOwot
ICAgIGRpc21pc3MoUmVhc29uRm9yRGlzbWlzc2luZ0NvcnJlY3Rpb25QYW5lbENhbmNlbGxlZCk7
CisgICAgbV9hbHRlcm5hdGl2ZVRleHRJbmZvLmlzQWN0aXZlID0gZmFsc2U7CisgICAgZGlzbWlz
cyhSZWFzb25Gb3JEaXNtaXNzaW5nQWx0ZXJuYXRpdmVUZXh0Q2FuY2VsbGVkKTsKIH0KIAotdm9p
ZCBTcGVsbGluZ0NvcnJlY3Rpb25Db250cm9sbGVyOjpkaXNtaXNzKFJlYXNvbkZvckRpc21pc3Np
bmdDb3JyZWN0aW9uUGFuZWwgcmVhc29uRm9yRGlzbWlzc2luZykKK3ZvaWQgQWx0ZXJuYXRpdmVU
ZXh0Q29udHJvbGxlcjo6ZGlzbWlzcyhSZWFzb25Gb3JEaXNtaXNzaW5nQWx0ZXJuYXRpdmVUZXh0
IHJlYXNvbkZvckRpc21pc3NpbmcpCiB7Ci0gICAgaWYgKCFtX2NvcnJlY3Rpb25QYW5lbEluZm8u
aXNBY3RpdmUpCisgICAgaWYgKCFtX2FsdGVybmF0aXZlVGV4dEluZm8uaXNBY3RpdmUpCiAgICAg
ICAgIHJldHVybjsKLSAgICBtX2NvcnJlY3Rpb25QYW5lbEluZm8uaXNBY3RpdmUgPSBmYWxzZTsK
LSAgICBtX2NvcnJlY3Rpb25QYW5lbElzRGlzbWlzc2VkQnlFZGl0b3IgPSB0cnVlOworICAgIG1f
YWx0ZXJuYXRpdmVUZXh0SW5mby5pc0FjdGl2ZSA9IGZhbHNlOworICAgIG1faXNEaXNtaXNzZWRC
eUVkaXRpbmcgPSB0cnVlOwogICAgIGlmIChjbGllbnQoKSkKICAgICAgICAgY2xpZW50KCktPmRp
c21pc3NDb3JyZWN0aW9uUGFuZWwocmVhc29uRm9yRGlzbWlzc2luZyk7CiB9CiAKLVN0cmluZyBT
cGVsbGluZ0NvcnJlY3Rpb25Db250cm9sbGVyOjpkaXNtaXNzU29vbihSZWFzb25Gb3JEaXNtaXNz
aW5nQ29ycmVjdGlvblBhbmVsIHJlYXNvbkZvckRpc21pc3NpbmcpCitTdHJpbmcgQWx0ZXJuYXRp
dmVUZXh0Q29udHJvbGxlcjo6ZGlzbWlzc1Nvb24oUmVhc29uRm9yRGlzbWlzc2luZ0FsdGVybmF0
aXZlVGV4dCByZWFzb25Gb3JEaXNtaXNzaW5nKQogewotICAgIGlmICghbV9jb3JyZWN0aW9uUGFu
ZWxJbmZvLmlzQWN0aXZlKQorICAgIGlmICghbV9hbHRlcm5hdGl2ZVRleHRJbmZvLmlzQWN0aXZl
KQogICAgICAgICByZXR1cm4gU3RyaW5nKCk7Ci0gICAgbV9jb3JyZWN0aW9uUGFuZWxJbmZvLmlz
QWN0aXZlID0gZmFsc2U7Ci0gICAgbV9jb3JyZWN0aW9uUGFuZWxJc0Rpc21pc3NlZEJ5RWRpdG9y
ID0gdHJ1ZTsKKyAgICBtX2FsdGVybmF0aXZlVGV4dEluZm8uaXNBY3RpdmUgPSBmYWxzZTsKKyAg
ICBtX2lzRGlzbWlzc2VkQnlFZGl0aW5nID0gdHJ1ZTsKICAgICBpZiAoIWNsaWVudCgpKQogICAg
ICAgICByZXR1cm4gU3RyaW5nKCk7CiAgICAgcmV0dXJuIGNsaWVudCgpLT5kaXNtaXNzQ29ycmVj
dGlvblBhbmVsU29vbihyZWFzb25Gb3JEaXNtaXNzaW5nKTsKIH0KIAotdm9pZCBTcGVsbGluZ0Nv
cnJlY3Rpb25Db250cm9sbGVyOjphcHBseUNvcnJlY3Rpb25QYW5lbEluZm8oY29uc3QgVmVjdG9y
PERvY3VtZW50TWFya2VyOjpNYXJrZXJUeXBlPiYgbWFya2VyVHlwZXNUb0FkZCkKK3ZvaWQgQWx0
ZXJuYXRpdmVUZXh0Q29udHJvbGxlcjo6YXBwbHlBbHRlcm5hdGl2ZVRleHQoY29uc3QgU3RyaW5n
JiBhbHRlcm5hdGl2ZSwgY29uc3QgVmVjdG9yPERvY3VtZW50TWFya2VyOjpNYXJrZXJUeXBlPiYg
bWFya2VyVHlwZXNUb0FkZCkKIHsKLSAgICBpZiAoIW1fY29ycmVjdGlvblBhbmVsSW5mby5yYW5n
ZVRvQmVSZXBsYWNlZCkKKyAgICBpZiAoIW1fYWx0ZXJuYXRpdmVUZXh0SW5mby5yYW5nZVdpdGhB
bHRlcm5hdGl2ZSkKICAgICAgICAgcmV0dXJuOwogCiAgICAgRXhjZXB0aW9uQ29kZSBlYyA9IDA7
Ci0gICAgUmVmUHRyPFJhbmdlPiBwYXJhZ3JhcGhSYW5nZUNvbnRhaW5pbmdDb3JyZWN0aW9uID0g
bV9jb3JyZWN0aW9uUGFuZWxJbmZvLnJhbmdlVG9CZVJlcGxhY2VkLT5jbG9uZVJhbmdlKGVjKTsK
KyAgICBSZWZQdHI8UmFuZ2U+IHBhcmFncmFwaFJhbmdlQ29udGFpbmluZ0NvcnJlY3Rpb24gPSBt
X2FsdGVybmF0aXZlVGV4dEluZm8ucmFuZ2VXaXRoQWx0ZXJuYXRpdmUtPmNsb25lUmFuZ2UoZWMp
OwogICAgIGlmIChlYykKICAgICAgICAgcmV0dXJuOwogCi0gICAgc2V0U3RhcnQocGFyYWdyYXBo
UmFuZ2VDb250YWluaW5nQ29ycmVjdGlvbi5nZXQoKSwgc3RhcnRPZlBhcmFncmFwaChtX2NvcnJl
Y3Rpb25QYW5lbEluZm8ucmFuZ2VUb0JlUmVwbGFjZWQtPnN0YXJ0UG9zaXRpb24oKSkpOwotICAg
IHNldEVuZChwYXJhZ3JhcGhSYW5nZUNvbnRhaW5pbmdDb3JyZWN0aW9uLmdldCgpLCBlbmRPZlBh
cmFncmFwaChtX2NvcnJlY3Rpb25QYW5lbEluZm8ucmFuZ2VUb0JlUmVwbGFjZWQtPmVuZFBvc2l0
aW9uKCkpKTsKKyAgICBzZXRTdGFydChwYXJhZ3JhcGhSYW5nZUNvbnRhaW5pbmdDb3JyZWN0aW9u
LmdldCgpLCBzdGFydE9mUGFyYWdyYXBoKG1fYWx0ZXJuYXRpdmVUZXh0SW5mby5yYW5nZVdpdGhB
bHRlcm5hdGl2ZS0+c3RhcnRQb3NpdGlvbigpKSk7CisgICAgc2V0RW5kKHBhcmFncmFwaFJhbmdl
Q29udGFpbmluZ0NvcnJlY3Rpb24uZ2V0KCksIGVuZE9mUGFyYWdyYXBoKG1fYWx0ZXJuYXRpdmVU
ZXh0SW5mby5yYW5nZVdpdGhBbHRlcm5hdGl2ZS0+ZW5kUG9zaXRpb24oKSkpOwogCi0gICAgLy8g
QWZ0ZXIgd2UgcmVwbGFjZSB0aGUgd29yZCBhdCByYW5nZSByYW5nZVRvQmVSZXBsYWNlZCwgd2Ug
bmVlZCB0byBhZGQgbWFya2VycyB0byB0aGF0IHJhbmdlLgotICAgIC8vIEhvd2V2ZXIsIG9uY2Ug
dGhlIHJlcGxhY2VtZW50IHRvb2sgcGxhY2UsIHRoZSB2YWx1ZSBvZiByYW5nZVRvQmVSZXBsYWNl
ZCBpcyBub3QgdmFsaWQgYW55bW9yZS4KLSAgICAvLyBTbyBiZWZvcmUgd2UgY2Fycnkgb3V0IHRo
ZSByZXBsYWNlbWVudCwgd2UgbmVlZCB0byBzdG9yZSB0aGUgc3RhcnQgcG9zaXRpb24gb2YgcmFu
Z2VUb0JlUmVwbGFjZWQKKyAgICAvLyBBZnRlciB3ZSByZXBsYWNlIHRoZSB3b3JkIGF0IHJhbmdl
IHJhbmdlV2l0aEFsdGVybmF0aXZlLCB3ZSBuZWVkIHRvIGFkZCBtYXJrZXJzIHRvIHRoYXQgcmFu
Z2UuCisgICAgLy8gSG93ZXZlciwgb25jZSB0aGUgcmVwbGFjZW1lbnQgdG9vayBwbGFjZSwgdGhl
IHZhbHVlIG9mIHJhbmdlV2l0aEFsdGVybmF0aXZlIGlzIG5vdCB2YWxpZCBhbnltb3JlLgorICAg
IC8vIFNvIGJlZm9yZSB3ZSBjYXJyeSBvdXQgdGhlIHJlcGxhY2VtZW50LCB3ZSBuZWVkIHRvIHN0
b3JlIHRoZSBzdGFydCBwb3NpdGlvbiBvZiByYW5nZVdpdGhBbHRlcm5hdGl2ZQogICAgIC8vIHJl
bGF0aXZlIHRvIHRoZSBzdGFydCBwb3NpdGlvbiBvZiB0aGUgY29udGFpbmluZyBwYXJhZ3JhcGgu
IFdlIHVzZSBjb3JyZWN0aW9uU3RhcnRPZmZzZXRJblBhcmFncmFwaAogICAgIC8vIHRvIHN0b3Jl
IHRoaXMgdmFsdWUuIEluIG9yZGVyIHRvIG9idGFpbiB0aGlzIG9mZnNldCwgd2UgbmVlZCB0byBm
aXJzdCBjcmVhdGUgYSByYW5nZQotICAgIC8vIHdoaWNoIHNwYW5zIGZyb20gdGhlIHN0YXJ0IG9m
IHBhcmFncmFwaCB0byB0aGUgc3RhcnQgcG9zaXRpb24gb2YgcmFuZ2VUb0JlUmVwbGFjZWQuCisg
ICAgLy8gd2hpY2ggc3BhbnMgZnJvbSB0aGUgc3RhcnQgb2YgcGFyYWdyYXBoIHRvIHRoZSBzdGFy
dCBwb3NpdGlvbiBvZiByYW5nZVdpdGhBbHRlcm5hdGl2ZS4KICAgICBSZWZQdHI8UmFuZ2U+IGNv
cnJlY3Rpb25TdGFydE9mZnNldEluUGFyYWdyYXBoQXNSYW5nZSA9IFJhbmdlOjpjcmVhdGUocGFy
YWdyYXBoUmFuZ2VDb250YWluaW5nQ29ycmVjdGlvbi0+c3RhcnRDb250YWluZXIoZWMpLT5kb2N1
bWVudCgpLCBwYXJhZ3JhcGhSYW5nZUNvbnRhaW5pbmdDb3JyZWN0aW9uLT5zdGFydFBvc2l0aW9u
KCksIHBhcmFncmFwaFJhbmdlQ29udGFpbmluZ0NvcnJlY3Rpb24tPnN0YXJ0UG9zaXRpb24oKSk7
CiAgICAgaWYgKGVjKQogICAgICAgICByZXR1cm47CiAKLSAgICBQb3NpdGlvbiBzdGFydFBvc2l0
aW9uT2ZSYW5nZVRvQmVSZXBsYWNlZCA9IG1fY29ycmVjdGlvblBhbmVsSW5mby5yYW5nZVRvQmVS
ZXBsYWNlZC0+c3RhcnRQb3NpdGlvbigpOwotICAgIGNvcnJlY3Rpb25TdGFydE9mZnNldEluUGFy
YWdyYXBoQXNSYW5nZS0+c2V0RW5kKHN0YXJ0UG9zaXRpb25PZlJhbmdlVG9CZVJlcGxhY2VkLmNv
bnRhaW5lck5vZGUoKSwgc3RhcnRQb3NpdGlvbk9mUmFuZ2VUb0JlUmVwbGFjZWQuY29tcHV0ZU9m
ZnNldEluQ29udGFpbmVyTm9kZSgpLCBlYyk7CisgICAgUG9zaXRpb24gc3RhcnRQb3NpdGlvbk9m
cmFuZ2VXaXRoQWx0ZXJuYXRpdmUgPSBtX2FsdGVybmF0aXZlVGV4dEluZm8ucmFuZ2VXaXRoQWx0
ZXJuYXRpdmUtPnN0YXJ0UG9zaXRpb24oKTsKKyAgICBjb3JyZWN0aW9uU3RhcnRPZmZzZXRJblBh
cmFncmFwaEFzUmFuZ2UtPnNldEVuZChzdGFydFBvc2l0aW9uT2ZyYW5nZVdpdGhBbHRlcm5hdGl2
ZS5jb250YWluZXJOb2RlKCksIHN0YXJ0UG9zaXRpb25PZnJhbmdlV2l0aEFsdGVybmF0aXZlLmNv
bXB1dGVPZmZzZXRJbkNvbnRhaW5lck5vZGUoKSwgZWMpOwogICAgIGlmIChlYykKICAgICAgICAg
cmV0dXJuOwogCkBAIC0yMjYsMTQgKzI0MiwxNCBAQCB2b2lkIFNwZWxsaW5nQ29ycmVjdGlvbkNv
bnRyb2xsZXI6OmFwcGx5CiAgICAgaW50IGNvcnJlY3Rpb25TdGFydE9mZnNldEluUGFyYWdyYXBo
ID0gVGV4dEl0ZXJhdG9yOjpyYW5nZUxlbmd0aChjb3JyZWN0aW9uU3RhcnRPZmZzZXRJblBhcmFn
cmFwaEFzUmFuZ2UuZ2V0KCkpOwogCiAgICAgLy8gQ2xvbmUgdGhlIHJhbmdlLCBzaW5jZSB0aGUg
Y2FsbGVyIG9mIHRoaXMgbWV0aG9kIG1heSB3YW50IHRvIGtlZXAgdGhlIG9yaWdpbmFsIHJhbmdl
IGFyb3VuZC4KLSAgICBSZWZQdHI8UmFuZ2U+IHJhbmdlVG9CZVJlcGxhY2VkID0gbV9jb3JyZWN0
aW9uUGFuZWxJbmZvLnJhbmdlVG9CZVJlcGxhY2VkLT5jbG9uZVJhbmdlKGVjKTsKLSAgICBhcHBs
eUNvbW1hbmQoU3BlbGxpbmdDb3JyZWN0aW9uQ29tbWFuZDo6Y3JlYXRlKHJhbmdlVG9CZVJlcGxh
Y2VkLCBtX2NvcnJlY3Rpb25QYW5lbEluZm8ucmVwbGFjZW1lbnRTdHJpbmcpKTsKKyAgICBSZWZQ
dHI8UmFuZ2U+IHJhbmdlV2l0aEFsdGVybmF0aXZlID0gbV9hbHRlcm5hdGl2ZVRleHRJbmZvLnJh
bmdlV2l0aEFsdGVybmF0aXZlLT5jbG9uZVJhbmdlKGVjKTsKKyAgICBhcHBseUNvbW1hbmQoU3Bl
bGxpbmdDb3JyZWN0aW9uQ29tbWFuZDo6Y3JlYXRlKHJhbmdlV2l0aEFsdGVybmF0aXZlLCBhbHRl
cm5hdGl2ZSkpOwogICAgIHNldEVuZChwYXJhZ3JhcGhSYW5nZUNvbnRhaW5pbmdDb3JyZWN0aW9u
LmdldCgpLCBtX2ZyYW1lLT5zZWxlY3Rpb24oKS0+c2VsZWN0aW9uKCkuc3RhcnQoKSk7Ci0gICAg
UmVmUHRyPFJhbmdlPiByZXBsYWNlbWVudFJhbmdlID0gVGV4dEl0ZXJhdG9yOjpzdWJyYW5nZShw
YXJhZ3JhcGhSYW5nZUNvbnRhaW5pbmdDb3JyZWN0aW9uLmdldCgpLCBjb3JyZWN0aW9uU3RhcnRP
ZmZzZXRJblBhcmFncmFwaCwgIG1fY29ycmVjdGlvblBhbmVsSW5mby5yZXBsYWNlbWVudFN0cmlu
Zy5sZW5ndGgoKSk7CisgICAgUmVmUHRyPFJhbmdlPiByZXBsYWNlbWVudFJhbmdlID0gVGV4dEl0
ZXJhdG9yOjpzdWJyYW5nZShwYXJhZ3JhcGhSYW5nZUNvbnRhaW5pbmdDb3JyZWN0aW9uLmdldCgp
LCBjb3JyZWN0aW9uU3RhcnRPZmZzZXRJblBhcmFncmFwaCwgYWx0ZXJuYXRpdmUubGVuZ3RoKCkp
OwogICAgIFN0cmluZyBuZXdUZXh0ID0gcGxhaW5UZXh0KHJlcGxhY2VtZW50UmFuZ2UuZ2V0KCkp
OwogCiAgICAgLy8gQ2hlY2sgdG8gc2VlIGlmIHJlcGxhY2VtZW50IHN1Y2NlZWRlZC4KLSAgICBp
ZiAobmV3VGV4dCAhPSBtX2NvcnJlY3Rpb25QYW5lbEluZm8ucmVwbGFjZW1lbnRTdHJpbmcpCisg
ICAgaWYgKG5ld1RleHQgIT0gYWx0ZXJuYXRpdmUpCiAgICAgICAgIHJldHVybjsKIAogICAgIERv
Y3VtZW50TWFya2VyQ29udHJvbGxlciogbWFya2VycyA9IHJlcGxhY2VtZW50UmFuZ2UtPnN0YXJ0
Q29udGFpbmVyKCktPmRvY3VtZW50KCktPm1hcmtlcnMoKTsKQEAgLTI0MSwzNCArMjU3LDM0IEBA
IHZvaWQgU3BlbGxpbmdDb3JyZWN0aW9uQ29udHJvbGxlcjo6YXBwbHkKICAgICBmb3IgKHNpemVf
dCBpID0gMDsgaSA8IHNpemU7ICsraSkgewogICAgICAgICBEb2N1bWVudE1hcmtlcjo6TWFya2Vy
VHlwZSBtYXJrZXJUeXBlID0gbWFya2VyVHlwZXNUb0FkZFtpXTsKICAgICAgICAgU3RyaW5nIGRl
c2NyaXB0aW9uOwotICAgICAgICBpZiAobV9jb3JyZWN0aW9uUGFuZWxJbmZvLnBhbmVsVHlwZSAh
PSBDb3JyZWN0aW9uUGFuZWxJbmZvOjpQYW5lbFR5cGVSZXZlcnNpb24gJiYgKG1hcmtlclR5cGUg
PT0gRG9jdW1lbnRNYXJrZXI6OlJlcGxhY2VtZW50IHx8IG1hcmtlclR5cGUgPT0gRG9jdW1lbnRN
YXJrZXI6OkF1dG9jb3JyZWN0ZWQpKQotICAgICAgICAgICAgZGVzY3JpcHRpb24gPSBtX2NvcnJl
Y3Rpb25QYW5lbEluZm8ucmVwbGFjZWRTdHJpbmc7CisgICAgICAgIGlmIChtX2FsdGVybmF0aXZl
VGV4dEluZm8udHlwZSAhPSBBbHRlcm5hdGl2ZVRleHRUeXBlUmV2ZXJzaW9uICYmIChtYXJrZXJU
eXBlID09IERvY3VtZW50TWFya2VyOjpSZXBsYWNlbWVudCB8fCBtYXJrZXJUeXBlID09IERvY3Vt
ZW50TWFya2VyOjpBdXRvY29ycmVjdGVkKSkKKyAgICAgICAgICAgIGRlc2NyaXB0aW9uID0gbV9h
bHRlcm5hdGl2ZVRleHRJbmZvLm9yaWdpbmFsVGV4dDsKICAgICAgICAgbWFya2Vycy0+YWRkTWFy
a2VyKHJlcGxhY2VtZW50UmFuZ2UuZ2V0KCksIG1hcmtlclR5cGUsIGRlc2NyaXB0aW9uKTsKICAg
ICB9CiB9CiAKLWJvb2wgU3BlbGxpbmdDb3JyZWN0aW9uQ29udHJvbGxlcjo6YXBwbHlBdXRvY29y
cmVjdGlvbkJlZm9yZVR5cGluZ0lmQXBwcm9wcmlhdGUoKQorYm9vbCBBbHRlcm5hdGl2ZVRleHRD
b250cm9sbGVyOjphcHBseUF1dG9jb3JyZWN0aW9uQmVmb3JlVHlwaW5nSWZBcHByb3ByaWF0ZSgp
CiB7Ci0gICAgaWYgKCFtX2NvcnJlY3Rpb25QYW5lbEluZm8ucmFuZ2VUb0JlUmVwbGFjZWQgfHwg
IW1fY29ycmVjdGlvblBhbmVsSW5mby5pc0FjdGl2ZSkKKyAgICBpZiAoIW1fYWx0ZXJuYXRpdmVU
ZXh0SW5mby5yYW5nZVdpdGhBbHRlcm5hdGl2ZSB8fCAhbV9hbHRlcm5hdGl2ZVRleHRJbmZvLmlz
QWN0aXZlKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKLSAgICBpZiAobV9jb3JyZWN0aW9uUGFu
ZWxJbmZvLnBhbmVsVHlwZSAhPSBDb3JyZWN0aW9uUGFuZWxJbmZvOjpQYW5lbFR5cGVDb3JyZWN0
aW9uKQorICAgIGlmIChtX2FsdGVybmF0aXZlVGV4dEluZm8udHlwZSAhPSBBbHRlcm5hdGl2ZVRl
eHRUeXBlQ29ycmVjdGlvbikKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCiAgICAgUG9zaXRpb24g
Y2FyZXRQb3NpdGlvbiA9IG1fZnJhbWUtPnNlbGVjdGlvbigpLT5zZWxlY3Rpb24oKS5zdGFydCgp
OwogCi0gICAgaWYgKG1fY29ycmVjdGlvblBhbmVsSW5mby5yYW5nZVRvQmVSZXBsYWNlZC0+ZW5k
UG9zaXRpb24oKSA9PSBjYXJldFBvc2l0aW9uKSB7Ci0gICAgICAgIGhhbmRsZUNvcnJlY3Rpb25Q
YW5lbFJlc3VsdChkaXNtaXNzU29vbihSZWFzb25Gb3JEaXNtaXNzaW5nQ29ycmVjdGlvblBhbmVs
QWNjZXB0ZWQpKTsKKyAgICBpZiAobV9hbHRlcm5hdGl2ZVRleHRJbmZvLnJhbmdlV2l0aEFsdGVy
bmF0aXZlLT5lbmRQb3NpdGlvbigpID09IGNhcmV0UG9zaXRpb24pIHsKKyAgICAgICAgaGFuZGxl
QWx0ZXJuYXRpdmVUZXh0VUlSZXN1bHQoZGlzbWlzc1Nvb24oUmVhc29uRm9yRGlzbWlzc2luZ0Fs
dGVybmF0aXZlVGV4dEFjY2VwdGVkKSk7CiAgICAgICAgIHJldHVybiB0cnVlOwogICAgIH0gCiAg
ICAgCiAgICAgLy8gUGVuZGluZyBjb3JyZWN0aW9uIHNob3VsZCBhbHdheXMgYmUgd2hlcmUgY2Fy
ZXQgaXMuIEJ1dCBpbiBjYXNlIHRoaXMgaXMgbm90IGFsd2F5cyB0cnVlLCB3ZSBzdGlsbCB3YW50
IHRvIGRpc21pc3MgdGhlIHBhbmVsIHdpdGhvdXQgYWNjZXB0aW5nIHRoZSBjb3JyZWN0aW9uLgot
ICAgIEFTU0VSVChtX2NvcnJlY3Rpb25QYW5lbEluZm8ucmFuZ2VUb0JlUmVwbGFjZWQtPmVuZFBv
c2l0aW9uKCkgPT0gY2FyZXRQb3NpdGlvbik7Ci0gICAgZGlzbWlzcyhSZWFzb25Gb3JEaXNtaXNz
aW5nQ29ycmVjdGlvblBhbmVsSWdub3JlZCk7CisgICAgQVNTRVJUKG1fYWx0ZXJuYXRpdmVUZXh0
SW5mby5yYW5nZVdpdGhBbHRlcm5hdGl2ZS0+ZW5kUG9zaXRpb24oKSA9PSBjYXJldFBvc2l0aW9u
KTsKKyAgICBkaXNtaXNzKFJlYXNvbkZvckRpc21pc3NpbmdBbHRlcm5hdGl2ZVRleHRJZ25vcmVk
KTsKICAgICByZXR1cm4gZmFsc2U7CiB9CiAKLXZvaWQgU3BlbGxpbmdDb3JyZWN0aW9uQ29udHJv
bGxlcjo6cmVzcG9uZFRvVW5hcHBsaWVkU3BlbGxDb3JyZWN0aW9uKGNvbnN0IFZpc2libGVTZWxl
Y3Rpb24mIHNlbGVjdGlvbk9mQ29ycmVjdGVkLCBjb25zdCBTdHJpbmcmIGNvcnJlY3RlZCwgY29u
c3QgU3RyaW5nJiBjb3JyZWN0aW9uKQordm9pZCBBbHRlcm5hdGl2ZVRleHRDb250cm9sbGVyOjpy
ZXNwb25kVG9VbmFwcGxpZWRTcGVsbENvcnJlY3Rpb24oY29uc3QgVmlzaWJsZVNlbGVjdGlvbiYg
c2VsZWN0aW9uT2ZDb3JyZWN0ZWQsIGNvbnN0IFN0cmluZyYgY29ycmVjdGVkLCBjb25zdCBTdHJp
bmcmIGNvcnJlY3Rpb24pCiB7CiAgICAgY2xpZW50KCktPnJlY29yZEF1dG9jb3JyZWN0aW9uUmVz
cG9uc2UoRWRpdG9yQ2xpZW50OjpBdXRvY29ycmVjdGlvblJldmVydGVkLCBjb3JyZWN0ZWQsIGNv
cnJlY3Rpb24pOwogICAgIG1fZnJhbWUtPmRvY3VtZW50KCktPnVwZGF0ZUxheW91dCgpOwpAQCAt
MjgxLDExICsyOTcsMTEgQEAgdm9pZCBTcGVsbGluZ0NvcnJlY3Rpb25Db250cm9sbGVyOjpyZXNw
bwogICAgIG1hcmtlcnMtPmFkZE1hcmtlcihyYW5nZS5nZXQoKSwgRG9jdW1lbnRNYXJrZXI6OlNw
ZWxsQ2hlY2tpbmdFeGVtcHRpb24pOwogfQogCi12b2lkIFNwZWxsaW5nQ29ycmVjdGlvbkNvbnRy
b2xsZXI6OmNvcnJlY3Rpb25QYW5lbFRpbWVyRmlyZWQoVGltZXI8U3BlbGxpbmdDb3JyZWN0aW9u
Q29udHJvbGxlcj4qKQordm9pZCBBbHRlcm5hdGl2ZVRleHRDb250cm9sbGVyOjp0aW1lckZpcmVk
KFRpbWVyPEFsdGVybmF0aXZlVGV4dENvbnRyb2xsZXI+KikKIHsKLSAgICBtX2NvcnJlY3Rpb25Q
YW5lbElzRGlzbWlzc2VkQnlFZGl0b3IgPSBmYWxzZTsKLSAgICBzd2l0Y2ggKG1fY29ycmVjdGlv
blBhbmVsSW5mby5wYW5lbFR5cGUpIHsKLSAgICBjYXNlIENvcnJlY3Rpb25QYW5lbEluZm86OlBh
bmVsVHlwZUNvcnJlY3Rpb246IHsKKyAgICBtX2lzRGlzbWlzc2VkQnlFZGl0aW5nID0gZmFsc2U7
CisgICAgc3dpdGNoIChtX2FsdGVybmF0aXZlVGV4dEluZm8udHlwZSkgeworICAgIGNhc2UgQWx0
ZXJuYXRpdmVUZXh0VHlwZUNvcnJlY3Rpb246IHsKICAgICAgICAgVmlzaWJsZVNlbGVjdGlvbiBz
ZWxlY3Rpb24obV9mcmFtZS0+c2VsZWN0aW9uKCktPnNlbGVjdGlvbigpKTsKICAgICAgICAgVmlz
aWJsZVBvc2l0aW9uIHN0YXJ0KHNlbGVjdGlvbi5zdGFydCgpLCBzZWxlY3Rpb24uYWZmaW5pdHko
KSk7CiAgICAgICAgIFZpc2libGVQb3NpdGlvbiBwID0gc3RhcnRPZldvcmQoc3RhcnQsIExlZnRX
b3JkSWZPbkJvdW5kYXJ5KTsKQEAgLTI5Myw3NiArMzA5LDc1IEBAIHZvaWQgU3BlbGxpbmdDb3Jy
ZWN0aW9uQ29udHJvbGxlcjo6Y29ycmUKICAgICAgICAgbV9mcmFtZS0+ZWRpdG9yKCktPm1hcmtB
bGxNaXNzcGVsbGluZ3NBbmRCYWRHcmFtbWFySW5SYW5nZXMoVGV4dENoZWNraW5nVHlwZVNwZWxs
aW5nIHwgVGV4dENoZWNraW5nVHlwZVNob3dDb3JyZWN0aW9uUGFuZWwsIGFkamFjZW50V29yZHMu
dG9Ob3JtYWxpemVkUmFuZ2UoKS5nZXQoKSwgMCk7CiAgICAgfQogICAgICAgICBicmVhazsKLSAg
ICBjYXNlIENvcnJlY3Rpb25QYW5lbEluZm86OlBhbmVsVHlwZVJldmVyc2lvbjogewotICAgICAg
ICBpZiAoIW1fY29ycmVjdGlvblBhbmVsSW5mby5yYW5nZVRvQmVSZXBsYWNlZCkKKyAgICBjYXNl
IEFsdGVybmF0aXZlVGV4dFR5cGVSZXZlcnNpb246IHsKKyAgICAgICAgaWYgKCFtX2FsdGVybmF0
aXZlVGV4dEluZm8ucmFuZ2VXaXRoQWx0ZXJuYXRpdmUpCiAgICAgICAgICAgICBicmVhazsKLSAg
ICAgICAgbV9jb3JyZWN0aW9uUGFuZWxJbmZvLmlzQWN0aXZlID0gdHJ1ZTsKLSAgICAgICAgbV9j
b3JyZWN0aW9uUGFuZWxJbmZvLnJlcGxhY2VkU3RyaW5nID0gcGxhaW5UZXh0KG1fY29ycmVjdGlv
blBhbmVsSW5mby5yYW5nZVRvQmVSZXBsYWNlZC5nZXQoKSk7Ci0gICAgICAgIEZsb2F0UmVjdCBi
b3VuZGluZ0JveCA9IHJvb3RWaWV3UmVjdEZvclJhbmdlKG1fY29ycmVjdGlvblBhbmVsSW5mby5y
YW5nZVRvQmVSZXBsYWNlZC5nZXQoKSk7Ci0gICAgICAgIGlmICghYm91bmRpbmdCb3guaXNFbXB0
eSgpKQotICAgICAgICAgICAgY2xpZW50KCktPnNob3dDb3JyZWN0aW9uUGFuZWwobV9jb3JyZWN0
aW9uUGFuZWxJbmZvLnBhbmVsVHlwZSwgYm91bmRpbmdCb3gsIG1fY29ycmVjdGlvblBhbmVsSW5m
by5yZXBsYWNlZFN0cmluZywgbV9jb3JyZWN0aW9uUGFuZWxJbmZvLnJlcGxhY2VtZW50U3RyaW5n
LCBWZWN0b3I8U3RyaW5nPigpKTsKKyAgICAgICAgbV9hbHRlcm5hdGl2ZVRleHRJbmZvLmlzQWN0
aXZlID0gdHJ1ZTsKKyAgICAgICAgbV9hbHRlcm5hdGl2ZVRleHRJbmZvLm9yaWdpbmFsVGV4dCA9
IHBsYWluVGV4dChtX2FsdGVybmF0aXZlVGV4dEluZm8ucmFuZ2VXaXRoQWx0ZXJuYXRpdmUuZ2V0
KCkpOworICAgICAgICBGbG9hdFJlY3QgYm91bmRpbmdCb3ggPSByb290Vmlld1JlY3RGb3JSYW5n
ZShtX2FsdGVybmF0aXZlVGV4dEluZm8ucmFuZ2VXaXRoQWx0ZXJuYXRpdmUuZ2V0KCkpOworICAg
ICAgICBpZiAoIWJvdW5kaW5nQm94LmlzRW1wdHkoKSkgeworICAgICAgICAgICAgY29uc3QgQXV0
b2NvcnJlY3Rpb25BbHRlcm5hdGl2ZURldGFpbHMqIGRldGFpbHMgPSBzdGF0aWNfY2FzdDxjb25z
dCBBdXRvY29ycmVjdGlvbkFsdGVybmF0aXZlRGV0YWlscyo+KG1fYWx0ZXJuYXRpdmVUZXh0SW5m
by5kZXRhaWxzLmdldCgpKTsKKyAgICAgICAgICAgIGNsaWVudCgpLT5zaG93Q29ycmVjdGlvblBh
bmVsKG1fYWx0ZXJuYXRpdmVUZXh0SW5mby50eXBlLCBib3VuZGluZ0JveCwgbV9hbHRlcm5hdGl2
ZVRleHRJbmZvLm9yaWdpbmFsVGV4dCwgZGV0YWlscy0+cmVwbGFjZW1lbnRTdHJpbmcoKSwgVmVj
dG9yPFN0cmluZz4oKSk7CisgICAgICAgIH0KICAgICB9CiAgICAgICAgIGJyZWFrOwotICAgIGNh
c2UgQ29ycmVjdGlvblBhbmVsSW5mbzo6UGFuZWxUeXBlU3BlbGxpbmdTdWdnZXN0aW9uczogewot
ICAgICAgICBpZiAoIW1fY29ycmVjdGlvblBhbmVsSW5mby5yYW5nZVRvQmVSZXBsYWNlZCB8fCBw
bGFpblRleHQobV9jb3JyZWN0aW9uUGFuZWxJbmZvLnJhbmdlVG9CZVJlcGxhY2VkLmdldCgpKSAh
PSBtX2NvcnJlY3Rpb25QYW5lbEluZm8ucmVwbGFjZWRTdHJpbmcpCisgICAgY2FzZSBBbHRlcm5h
dGl2ZVRleHRUeXBlU3BlbGxpbmdTdWdnZXN0aW9uczogeworICAgICAgICBpZiAoIW1fYWx0ZXJu
YXRpdmVUZXh0SW5mby5yYW5nZVdpdGhBbHRlcm5hdGl2ZSB8fCBwbGFpblRleHQobV9hbHRlcm5h
dGl2ZVRleHRJbmZvLnJhbmdlV2l0aEFsdGVybmF0aXZlLmdldCgpKSAhPSBtX2FsdGVybmF0aXZl
VGV4dEluZm8ub3JpZ2luYWxUZXh0KQogICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIFN0cmlu
ZyBwYXJhZ3JhcGhUZXh0ID0gcGxhaW5UZXh0KFRleHRDaGVja2luZ1BhcmFncmFwaChtX2NvcnJl
Y3Rpb25QYW5lbEluZm8ucmFuZ2VUb0JlUmVwbGFjZWQpLnBhcmFncmFwaFJhbmdlKCkuZ2V0KCkp
OworICAgICAgICBTdHJpbmcgcGFyYWdyYXBoVGV4dCA9IHBsYWluVGV4dChUZXh0Q2hlY2tpbmdQ
YXJhZ3JhcGgobV9hbHRlcm5hdGl2ZVRleHRJbmZvLnJhbmdlV2l0aEFsdGVybmF0aXZlKS5wYXJh
Z3JhcGhSYW5nZSgpLmdldCgpKTsKICAgICAgICAgVmVjdG9yPFN0cmluZz4gc3VnZ2VzdGlvbnM7
Ci0gICAgICAgIHRleHRDaGVja2VyKCktPmdldEd1ZXNzZXNGb3JXb3JkKG1fY29ycmVjdGlvblBh
bmVsSW5mby5yZXBsYWNlZFN0cmluZywgcGFyYWdyYXBoVGV4dCwgc3VnZ2VzdGlvbnMpOworICAg
ICAgICB0ZXh0Q2hlY2tlcigpLT5nZXRHdWVzc2VzRm9yV29yZChtX2FsdGVybmF0aXZlVGV4dElu
Zm8ub3JpZ2luYWxUZXh0LCBwYXJhZ3JhcGhUZXh0LCBzdWdnZXN0aW9ucyk7CiAgICAgICAgIGlm
IChzdWdnZXN0aW9ucy5pc0VtcHR5KCkpIHsKLSAgICAgICAgICAgIG1fY29ycmVjdGlvblBhbmVs
SW5mby5yYW5nZVRvQmVSZXBsYWNlZC5jbGVhcigpOworICAgICAgICAgICAgbV9hbHRlcm5hdGl2
ZVRleHRJbmZvLnJhbmdlV2l0aEFsdGVybmF0aXZlLmNsZWFyKCk7CiAgICAgICAgICAgICBicmVh
azsKICAgICAgICAgfQogICAgICAgICBTdHJpbmcgdG9wU3VnZ2VzdGlvbiA9IHN1Z2dlc3Rpb25z
LmZpcnN0KCk7CiAgICAgICAgIHN1Z2dlc3Rpb25zLnJlbW92ZSgwKTsKLSAgICAgICAgbV9jb3Jy
ZWN0aW9uUGFuZWxJbmZvLmlzQWN0aXZlID0gdHJ1ZTsKLSAgICAgICAgRmxvYXRSZWN0IGJvdW5k
aW5nQm94ID0gcm9vdFZpZXdSZWN0Rm9yUmFuZ2UobV9jb3JyZWN0aW9uUGFuZWxJbmZvLnJhbmdl
VG9CZVJlcGxhY2VkLmdldCgpKTsKKyAgICAgICAgbV9hbHRlcm5hdGl2ZVRleHRJbmZvLmlzQWN0
aXZlID0gdHJ1ZTsKKyAgICAgICAgRmxvYXRSZWN0IGJvdW5kaW5nQm94ID0gcm9vdFZpZXdSZWN0
Rm9yUmFuZ2UobV9hbHRlcm5hdGl2ZVRleHRJbmZvLnJhbmdlV2l0aEFsdGVybmF0aXZlLmdldCgp
KTsKICAgICAgICAgaWYgKCFib3VuZGluZ0JveC5pc0VtcHR5KCkpCi0gICAgICAgICAgICBjbGll
bnQoKS0+c2hvd0NvcnJlY3Rpb25QYW5lbChtX2NvcnJlY3Rpb25QYW5lbEluZm8ucGFuZWxUeXBl
LCBib3VuZGluZ0JveCwgbV9jb3JyZWN0aW9uUGFuZWxJbmZvLnJlcGxhY2VkU3RyaW5nLCB0b3BT
dWdnZXN0aW9uLCBzdWdnZXN0aW9ucyk7CisgICAgICAgICAgICBjbGllbnQoKS0+c2hvd0NvcnJl
Y3Rpb25QYW5lbChtX2FsdGVybmF0aXZlVGV4dEluZm8udHlwZSwgYm91bmRpbmdCb3gsIG1fYWx0
ZXJuYXRpdmVUZXh0SW5mby5vcmlnaW5hbFRleHQsIHRvcFN1Z2dlc3Rpb24sIHN1Z2dlc3Rpb25z
KTsKICAgICB9CiAgICAgICAgIGJyZWFrOwogICAgIH0KIH0KIAotdm9pZCBTcGVsbGluZ0NvcnJl
Y3Rpb25Db250cm9sbGVyOjpoYW5kbGVDb3JyZWN0aW9uUGFuZWxSZXN1bHQoY29uc3QgU3RyaW5n
JiBjb3JyZWN0aW9uKQordm9pZCBBbHRlcm5hdGl2ZVRleHRDb250cm9sbGVyOjpoYW5kbGVBbHRl
cm5hdGl2ZVRleHRVSVJlc3VsdChjb25zdCBTdHJpbmcmIHJlc3VsdCkKIHsKLSAgICBSYW5nZSog
cmVwbGFjZWRSYW5nZSA9IG1fY29ycmVjdGlvblBhbmVsSW5mby5yYW5nZVRvQmVSZXBsYWNlZC5n
ZXQoKTsKKyAgICBSYW5nZSogcmVwbGFjZWRSYW5nZSA9IG1fYWx0ZXJuYXRpdmVUZXh0SW5mby5y
YW5nZVdpdGhBbHRlcm5hdGl2ZS5nZXQoKTsKICAgICBpZiAoIXJlcGxhY2VkUmFuZ2UgfHwgbV9m
cmFtZS0+ZG9jdW1lbnQoKSAhPSByZXBsYWNlZFJhbmdlLT5vd25lckRvY3VtZW50KCkpCiAgICAg
ICAgIHJldHVybjsKIAotICAgIFN0cmluZyBjdXJyZW50V29yZCA9IHBsYWluVGV4dChtX2NvcnJl
Y3Rpb25QYW5lbEluZm8ucmFuZ2VUb0JlUmVwbGFjZWQuZ2V0KCkpOworICAgIFN0cmluZyBjdXJy
ZW50V29yZCA9IHBsYWluVGV4dChtX2FsdGVybmF0aXZlVGV4dEluZm8ucmFuZ2VXaXRoQWx0ZXJu
YXRpdmUuZ2V0KCkpOwogICAgIC8vIENoZWNrIHRvIHNlZSBpZiB0aGUgd29yZCB3ZSBhcmUgYWJv
dXQgdG8gY29ycmVjdCBoYXMgYmVlbiBjaGFuZ2VkIGJldHdlZW4gdGltZXIgZmlyaW5nIGFuZCBj
YWxsYmFjayBiZWluZyB0cmlnZ2VyZWQuCi0gICAgaWYgKGN1cnJlbnRXb3JkICE9IG1fY29ycmVj
dGlvblBhbmVsSW5mby5yZXBsYWNlZFN0cmluZykKKyAgICBpZiAoY3VycmVudFdvcmQgIT0gbV9h
bHRlcm5hdGl2ZVRleHRJbmZvLm9yaWdpbmFsVGV4dCkKICAgICAgICAgcmV0dXJuOwogCi0gICAg
bV9jb3JyZWN0aW9uUGFuZWxJbmZvLmlzQWN0aXZlID0gZmFsc2U7CisgICAgbV9hbHRlcm5hdGl2
ZVRleHRJbmZvLmlzQWN0aXZlID0gZmFsc2U7CiAKLSAgICBzd2l0Y2ggKG1fY29ycmVjdGlvblBh
bmVsSW5mby5wYW5lbFR5cGUpIHsKLSAgICBjYXNlIENvcnJlY3Rpb25QYW5lbEluZm86OlBhbmVs
VHlwZUNvcnJlY3Rpb246Ci0gICAgICAgIGlmIChjb3JyZWN0aW9uLmxlbmd0aCgpKSB7Ci0gICAg
ICAgICAgICBtX2NvcnJlY3Rpb25QYW5lbEluZm8ucmVwbGFjZW1lbnRTdHJpbmcgPSBjb3JyZWN0
aW9uOwotICAgICAgICAgICAgYXBwbHlDb3JyZWN0aW9uUGFuZWxJbmZvKG1hcmtlclR5cGVzRm9y
QXV0b2NvcnJlY3Rpb24oKSk7Ci0gICAgICAgIH0gZWxzZSBpZiAoIW1fY29ycmVjdGlvblBhbmVs
SXNEaXNtaXNzZWRCeUVkaXRvcikKLSAgICAgICAgICAgIHJlcGxhY2VkUmFuZ2UtPnN0YXJ0Q29u
dGFpbmVyKCktPmRvY3VtZW50KCktPm1hcmtlcnMoKS0+YWRkTWFya2VyKHJlcGxhY2VkUmFuZ2Us
IERvY3VtZW50TWFya2VyOjpSZWplY3RlZENvcnJlY3Rpb24sIG1fY29ycmVjdGlvblBhbmVsSW5m
by5yZXBsYWNlZFN0cmluZyk7CisgICAgc3dpdGNoIChtX2FsdGVybmF0aXZlVGV4dEluZm8udHlw
ZSkgeworICAgIGNhc2UgQWx0ZXJuYXRpdmVUZXh0VHlwZUNvcnJlY3Rpb246CisgICAgICAgIGlm
IChyZXN1bHQubGVuZ3RoKCkpCisgICAgICAgICAgICBhcHBseUFsdGVybmF0aXZlVGV4dChyZXN1
bHQsIG1hcmtlclR5cGVzRm9yQXV0b2NvcnJlY3Rpb24oKSk7CisgICAgICAgIGVsc2UgaWYgKCFt
X2lzRGlzbWlzc2VkQnlFZGl0aW5nKQorICAgICAgICAgICAgcmVwbGFjZWRSYW5nZS0+c3RhcnRD
b250YWluZXIoKS0+ZG9jdW1lbnQoKS0+bWFya2VycygpLT5hZGRNYXJrZXIocmVwbGFjZWRSYW5n
ZSwgRG9jdW1lbnRNYXJrZXI6OlJlamVjdGVkQ29ycmVjdGlvbiwgbV9hbHRlcm5hdGl2ZVRleHRJ
bmZvLm9yaWdpbmFsVGV4dCk7CiAgICAgICAgIGJyZWFrOwotICAgIGNhc2UgQ29ycmVjdGlvblBh
bmVsSW5mbzo6UGFuZWxUeXBlUmV2ZXJzaW9uOgotICAgIGNhc2UgQ29ycmVjdGlvblBhbmVsSW5m
bzo6UGFuZWxUeXBlU3BlbGxpbmdTdWdnZXN0aW9uczoKLSAgICAgICAgaWYgKGNvcnJlY3Rpb24u
bGVuZ3RoKCkpIHsKLSAgICAgICAgICAgIG1fY29ycmVjdGlvblBhbmVsSW5mby5yZXBsYWNlbWVu
dFN0cmluZyA9IGNvcnJlY3Rpb247Ci0gICAgICAgICAgICBhcHBseUNvcnJlY3Rpb25QYW5lbElu
Zm8obWFya2VyVHlwZXNGb3JSZXBsYWNlbWVudCgpKTsKLSAgICAgICAgfQorICAgIGNhc2UgQWx0
ZXJuYXRpdmVUZXh0VHlwZVJldmVyc2lvbjoKKyAgICBjYXNlIEFsdGVybmF0aXZlVGV4dFR5cGVT
cGVsbGluZ1N1Z2dlc3Rpb25zOgorICAgICAgICBpZiAocmVzdWx0Lmxlbmd0aCgpKQorICAgICAg
ICAgICAgYXBwbHlBbHRlcm5hdGl2ZVRleHQocmVzdWx0LCBtYXJrZXJUeXBlc0ZvclJlcGxhY2Vt
ZW50KCkpOwogICAgICAgICBicmVhazsKICAgICB9CiAKLSAgICBtX2NvcnJlY3Rpb25QYW5lbElu
Zm8ucmFuZ2VUb0JlUmVwbGFjZWQuY2xlYXIoKTsKKyAgICBtX2FsdGVybmF0aXZlVGV4dEluZm8u
cmFuZ2VXaXRoQWx0ZXJuYXRpdmUuY2xlYXIoKTsKIH0KIAotYm9vbCBTcGVsbGluZ0NvcnJlY3Rp
b25Db250cm9sbGVyOjppc0F1dG9tYXRpY1NwZWxsaW5nQ29ycmVjdGlvbkVuYWJsZWQoKQorYm9v
bCBBbHRlcm5hdGl2ZVRleHRDb250cm9sbGVyOjppc0F1dG9tYXRpY1NwZWxsaW5nQ29ycmVjdGlv
bkVuYWJsZWQoKQogewogICAgIHJldHVybiBjbGllbnQoKSAmJiBjbGllbnQoKS0+aXNBdXRvbWF0
aWNTcGVsbGluZ0NvcnJlY3Rpb25FbmFibGVkKCk7CiB9CiAKLUZsb2F0UmVjdCBTcGVsbGluZ0Nv
cnJlY3Rpb25Db250cm9sbGVyOjpyb290Vmlld1JlY3RGb3JSYW5nZShjb25zdCBSYW5nZSogcmFu
Z2UpIGNvbnN0CitGbG9hdFJlY3QgQWx0ZXJuYXRpdmVUZXh0Q29udHJvbGxlcjo6cm9vdFZpZXdS
ZWN0Rm9yUmFuZ2UoY29uc3QgUmFuZ2UqIHJhbmdlKSBjb25zdAogewogICAgIEZyYW1lVmlldyog
dmlldyA9IG1fZnJhbWUtPnZpZXcoKTsKICAgICBpZiAoIXZpZXcpCkBAIC0zNzYsNyArMzkxLDcg
QEAgRmxvYXRSZWN0IFNwZWxsaW5nQ29ycmVjdGlvbkNvbnRyb2xsZXI6OgogICAgIHJldHVybiB2
aWV3LT5jb250ZW50c1RvUm9vdFZpZXcoSW50UmVjdChib3VuZGluZ1JlY3QpKTsKIH0gICAgICAg
IAogCi12b2lkIFNwZWxsaW5nQ29ycmVjdGlvbkNvbnRyb2xsZXI6OnJlc3BvbmRUb0NoYW5nZWRT
ZWxlY3Rpb24oY29uc3QgVmlzaWJsZVNlbGVjdGlvbiYgb2xkU2VsZWN0aW9uKQordm9pZCBBbHRl
cm5hdGl2ZVRleHRDb250cm9sbGVyOjpyZXNwb25kVG9DaGFuZ2VkU2VsZWN0aW9uKGNvbnN0IFZp
c2libGVTZWxlY3Rpb24mIG9sZFNlbGVjdGlvbikKIHsKICAgICBWaXNpYmxlU2VsZWN0aW9uIGN1
cnJlbnRTZWxlY3Rpb24obV9mcmFtZS0+c2VsZWN0aW9uKCktPnNlbGVjdGlvbigpKTsKICAgICAv
LyBXaGVuIHVzZXIgbW92ZXMgY2FyZXQgdG8gdGhlIGVuZCBvZiBhdXRvY29ycmVjdGVkIHdvcmQg
YW5kIHBhdXNlcywgd2Ugc2hvdyB0aGUgcGFuZWwKQEAgLTQxNCwyMCArNDI5LDIwIEBAIHZvaWQg
U3BlbGxpbmdDb3JyZWN0aW9uQ29udHJvbGxlcjo6cmVzcG8KICAgICAgICAgaWYgKCFjdXJyZW50
V29yZC5sZW5ndGgoKSkKICAgICAgICAgICAgIGNvbnRpbnVlOwogCi0gICAgICAgIG1fY29ycmVj
dGlvblBhbmVsSW5mby5yYW5nZVRvQmVSZXBsYWNlZCA9IHdvcmRSYW5nZTsKLSAgICAgICAgbV9j
b3JyZWN0aW9uUGFuZWxJbmZvLnJlcGxhY2VkU3RyaW5nID0gY3VycmVudFdvcmQ7CisgICAgICAg
IG1fYWx0ZXJuYXRpdmVUZXh0SW5mby5yYW5nZVdpdGhBbHRlcm5hdGl2ZSA9IHdvcmRSYW5nZTsK
KyAgICAgICAgbV9hbHRlcm5hdGl2ZVRleHRJbmZvLm9yaWdpbmFsVGV4dCA9IGN1cnJlbnRXb3Jk
OwogICAgICAgICBpZiAobWFya2VyLT50eXBlKCkgPT0gRG9jdW1lbnRNYXJrZXI6OlNwZWxsaW5n
KQotICAgICAgICAgICAgc3RhcnRDb3JyZWN0aW9uUGFuZWxUaW1lcihDb3JyZWN0aW9uUGFuZWxJ
bmZvOjpQYW5lbFR5cGVTcGVsbGluZ1N1Z2dlc3Rpb25zKTsKKyAgICAgICAgICAgIHN0YXJ0QWx0
ZXJuYXRpdmVUZXh0VUlUaW1lcihBbHRlcm5hdGl2ZVRleHRUeXBlU3BlbGxpbmdTdWdnZXN0aW9u
cyk7CiAgICAgICAgIGVsc2UgewotICAgICAgICAgICAgbV9jb3JyZWN0aW9uUGFuZWxJbmZvLnJl
cGxhY2VtZW50U3RyaW5nID0gbWFya2VyLT5kZXNjcmlwdGlvbigpOwotICAgICAgICAgICAgc3Rh
cnRDb3JyZWN0aW9uUGFuZWxUaW1lcihDb3JyZWN0aW9uUGFuZWxJbmZvOjpQYW5lbFR5cGVSZXZl
cnNpb24pOworICAgICAgICAgICAgbV9hbHRlcm5hdGl2ZVRleHRJbmZvLmRldGFpbHMgPSBBdXRv
Y29ycmVjdGlvbkFsdGVybmF0aXZlRGV0YWlsczo6Y3JlYXRlKG1hcmtlci0+ZGVzY3JpcHRpb24o
KSk7CisgICAgICAgICAgICBzdGFydEFsdGVybmF0aXZlVGV4dFVJVGltZXIoQWx0ZXJuYXRpdmVU
ZXh0VHlwZVJldmVyc2lvbik7CiAgICAgICAgIH0KIAogICAgICAgICBicmVhazsKICAgICB9CiB9
CiAKLXZvaWQgU3BlbGxpbmdDb3JyZWN0aW9uQ29udHJvbGxlcjo6cmVzcG9uZFRvQXBwbGllZEVk
aXRpbmcoQ29tcG9zaXRlRWRpdENvbW1hbmQqIGNvbW1hbmQpCit2b2lkIEFsdGVybmF0aXZlVGV4
dENvbnRyb2xsZXI6OnJlc3BvbmRUb0FwcGxpZWRFZGl0aW5nKENvbXBvc2l0ZUVkaXRDb21tYW5k
KiBjb21tYW5kKQogewogICAgIGlmIChjb21tYW5kLT5pc1RvcExldmVsQ29tbWFuZCgpICYmICFj
b21tYW5kLT5zaG91bGRSZXRhaW5BdXRvY29ycmVjdGlvbkluZGljYXRvcigpKQogICAgICAgICBt
X2ZyYW1lLT5kb2N1bWVudCgpLT5tYXJrZXJzKCktPnJlbW92ZU1hcmtlcnMoRG9jdW1lbnRNYXJr
ZXI6OkNvcnJlY3Rpb25JbmRpY2F0b3IpOwpAQCAtNDM2LDcgKzQ1MSw3IEBAIHZvaWQgU3BlbGxp
bmdDb3JyZWN0aW9uQ29udHJvbGxlcjo6cmVzcG8KICAgICBtX29yaWdpbmFsU3RyaW5nRm9yTGFz
dERlbGV0ZWRBdXRvY29ycmVjdGlvbiA9IFN0cmluZygpOwogfQogCi12b2lkIFNwZWxsaW5nQ29y
cmVjdGlvbkNvbnRyb2xsZXI6OnJlc3BvbmRUb1VuYXBwbGllZEVkaXRpbmcoRWRpdENvbW1hbmRD
b21wb3NpdGlvbiogY29tbWFuZCkKK3ZvaWQgQWx0ZXJuYXRpdmVUZXh0Q29udHJvbGxlcjo6cmVz
cG9uZFRvVW5hcHBsaWVkRWRpdGluZyhFZGl0Q29tbWFuZENvbXBvc2l0aW9uKiBjb21tYW5kKQog
ewogICAgIGlmICghY29tbWFuZC0+d2FzQ3JlYXRlTGlua0NvbW1hbmQoKSkKICAgICAgICAgcmV0
dXJuOwpAQCAtNDQ4LDM1ICs0NjMsMzUgQEAgdm9pZCBTcGVsbGluZ0NvcnJlY3Rpb25Db250cm9s
bGVyOjpyZXNwbwogICAgIG1hcmtlcnMtPmFkZE1hcmtlcihyYW5nZS5nZXQoKSwgRG9jdW1lbnRN
YXJrZXI6OlNwZWxsQ2hlY2tpbmdFeGVtcHRpb24pOwogfQogCi1FZGl0b3JDbGllbnQqIFNwZWxs
aW5nQ29ycmVjdGlvbkNvbnRyb2xsZXI6OmNsaWVudCgpCitFZGl0b3JDbGllbnQqIEFsdGVybmF0
aXZlVGV4dENvbnRyb2xsZXI6OmNsaWVudCgpCiB7CiAgICAgcmV0dXJuIG1fZnJhbWUtPnBhZ2Uo
KSA/IG1fZnJhbWUtPnBhZ2UoKS0+ZWRpdG9yQ2xpZW50KCkgOiAwOwogfQogCi1UZXh0Q2hlY2tl
ckNsaWVudCogU3BlbGxpbmdDb3JyZWN0aW9uQ29udHJvbGxlcjo6dGV4dENoZWNrZXIoKQorVGV4
dENoZWNrZXJDbGllbnQqIEFsdGVybmF0aXZlVGV4dENvbnRyb2xsZXI6OnRleHRDaGVja2VyKCkK
IHsKICAgICBpZiAoRWRpdG9yQ2xpZW50KiBvd25lciA9IGNsaWVudCgpKQogICAgICAgICByZXR1
cm4gb3duZXItPnRleHRDaGVja2VyKCk7CiAgICAgcmV0dXJuIDA7CiB9CiAKLXZvaWQgU3BlbGxp
bmdDb3JyZWN0aW9uQ29udHJvbGxlcjo6cmVjb3JkQXV0b2NvcnJlY3Rpb25SZXNwb25zZVJldmVy
c2VkKGNvbnN0IFN0cmluZyYgcmVwbGFjZWRTdHJpbmcsIGNvbnN0IFN0cmluZyYgcmVwbGFjZW1l
bnRTdHJpbmcpCit2b2lkIEFsdGVybmF0aXZlVGV4dENvbnRyb2xsZXI6OnJlY29yZEF1dG9jb3Jy
ZWN0aW9uUmVzcG9uc2VSZXZlcnNlZChjb25zdCBTdHJpbmcmIHJlcGxhY2VkU3RyaW5nLCBjb25z
dCBTdHJpbmcmIHJlcGxhY2VtZW50U3RyaW5nKQogewogICAgIGNsaWVudCgpLT5yZWNvcmRBdXRv
Y29ycmVjdGlvblJlc3BvbnNlKEVkaXRvckNsaWVudDo6QXV0b2NvcnJlY3Rpb25SZXZlcnRlZCwg
cmVwbGFjZWRTdHJpbmcsIHJlcGxhY2VtZW50U3RyaW5nKTsKIH0KIAotdm9pZCBTcGVsbGluZ0Nv
cnJlY3Rpb25Db250cm9sbGVyOjpyZWNvcmRBdXRvY29ycmVjdGlvblJlc3BvbnNlUmV2ZXJzZWQo
Y29uc3QgU3RyaW5nJiByZXBsYWNlZFN0cmluZywgUGFzc1JlZlB0cjxSYW5nZT4gcmVwbGFjZW1l
bnRSYW5nZSkKK3ZvaWQgQWx0ZXJuYXRpdmVUZXh0Q29udHJvbGxlcjo6cmVjb3JkQXV0b2NvcnJl
Y3Rpb25SZXNwb25zZVJldmVyc2VkKGNvbnN0IFN0cmluZyYgcmVwbGFjZWRTdHJpbmcsIFBhc3NS
ZWZQdHI8UmFuZ2U+IHJlcGxhY2VtZW50UmFuZ2UpCiB7CiAgICAgcmVjb3JkQXV0b2NvcnJlY3Rp
b25SZXNwb25zZVJldmVyc2VkKHJlcGxhY2VkU3RyaW5nLCBwbGFpblRleHQocmVwbGFjZW1lbnRS
YW5nZS5nZXQoKSkpOwogfQogCi12b2lkIFNwZWxsaW5nQ29ycmVjdGlvbkNvbnRyb2xsZXI6Om1h
cmtSZXZlcnNlZChQYXNzUmVmUHRyPFJhbmdlPiBjaGFuZ2VkUmFuZ2UpCit2b2lkIEFsdGVybmF0
aXZlVGV4dENvbnRyb2xsZXI6Om1hcmtSZXZlcnNlZChQYXNzUmVmUHRyPFJhbmdlPiBjaGFuZ2Vk
UmFuZ2UpCiB7CiAgICAgY2hhbmdlZFJhbmdlLT5zdGFydENvbnRhaW5lcigpLT5kb2N1bWVudCgp
LT5tYXJrZXJzKCktPnJlbW92ZU1hcmtlcnMoY2hhbmdlZFJhbmdlLmdldCgpLCBEb2N1bWVudE1h
cmtlcjo6QXV0b2NvcnJlY3RlZCwgRG9jdW1lbnRNYXJrZXJDb250cm9sbGVyOjpSZW1vdmVQYXJ0
aWFsbHlPdmVybGFwcGluZ01hcmtlcik7CiAgICAgY2hhbmdlZFJhbmdlLT5zdGFydENvbnRhaW5l
cigpLT5kb2N1bWVudCgpLT5tYXJrZXJzKCktPmFkZE1hcmtlcihjaGFuZ2VkUmFuZ2UuZ2V0KCks
IERvY3VtZW50TWFya2VyOjpTcGVsbENoZWNraW5nRXhlbXB0aW9uKTsKIH0KIAotdm9pZCBTcGVs
bGluZ0NvcnJlY3Rpb25Db250cm9sbGVyOjptYXJrQ29ycmVjdGlvbihQYXNzUmVmUHRyPFJhbmdl
PiByZXBsYWNlZFJhbmdlLCBjb25zdCBTdHJpbmcmIHJlcGxhY2VkU3RyaW5nKQordm9pZCBBbHRl
cm5hdGl2ZVRleHRDb250cm9sbGVyOjptYXJrQ29ycmVjdGlvbihQYXNzUmVmUHRyPFJhbmdlPiBy
ZXBsYWNlZFJhbmdlLCBjb25zdCBTdHJpbmcmIHJlcGxhY2VkU3RyaW5nKQogewogICAgIFZlY3Rv
cjxEb2N1bWVudE1hcmtlcjo6TWFya2VyVHlwZT4gbWFya2VyVHlwZXNUb0FkZCA9IG1hcmtlclR5
cGVzRm9yQXV0b2NvcnJlY3Rpb24oKTsKICAgICBEb2N1bWVudE1hcmtlckNvbnRyb2xsZXIqIG1h
cmtlcnMgPSByZXBsYWNlZFJhbmdlLT5zdGFydENvbnRhaW5lcigpLT5kb2N1bWVudCgpLT5tYXJr
ZXJzKCk7CkBAIC00ODksNyArNTA0LDcgQEAgdm9pZCBTcGVsbGluZ0NvcnJlY3Rpb25Db250cm9s
bGVyOjptYXJrQwogICAgIH0KIH0KIAotdm9pZCBTcGVsbGluZ0NvcnJlY3Rpb25Db250cm9sbGVy
OjpyZWNvcmRTcGVsbGNoZWNrZXJSZXNwb25zZUZvck1vZGlmaWVkQ29ycmVjdGlvbihSYW5nZSog
cmFuZ2VPZkNvcnJlY3Rpb24sIGNvbnN0IFN0cmluZyYgY29ycmVjdGVkLCBjb25zdCBTdHJpbmcm
IGNvcnJlY3Rpb24pCit2b2lkIEFsdGVybmF0aXZlVGV4dENvbnRyb2xsZXI6OnJlY29yZFNwZWxs
Y2hlY2tlclJlc3BvbnNlRm9yTW9kaWZpZWRDb3JyZWN0aW9uKFJhbmdlKiByYW5nZU9mQ29ycmVj
dGlvbiwgY29uc3QgU3RyaW5nJiBjb3JyZWN0ZWQsIGNvbnN0IFN0cmluZyYgY29ycmVjdGlvbikK
IHsKICAgICBpZiAoIXJhbmdlT2ZDb3JyZWN0aW9uKQogICAgICAgICByZXR1cm47CkBAIC01MDcs
MTMgKzUyMiwxMyBAQCB2b2lkIFNwZWxsaW5nQ29ycmVjdGlvbkNvbnRyb2xsZXI6OnJlY29yCiAg
ICAgbWFya2Vycy0+cmVtb3ZlTWFya2VycyhyYW5nZU9mQ29ycmVjdGlvbiwgRG9jdW1lbnRNYXJr
ZXI6OkF1dG9jb3JyZWN0ZWQsIERvY3VtZW50TWFya2VyQ29udHJvbGxlcjo6UmVtb3ZlUGFydGlh
bGx5T3ZlcmxhcHBpbmdNYXJrZXIpOwogfQogCi12b2lkIFNwZWxsaW5nQ29ycmVjdGlvbkNvbnRy
b2xsZXI6OmRlbGV0ZWRBdXRvY29ycmVjdGlvbkF0UG9zaXRpb24oY29uc3QgUG9zaXRpb24mIHBv
c2l0aW9uLCBjb25zdCBTdHJpbmcmIG9yaWdpbmFsU3RyaW5nKQordm9pZCBBbHRlcm5hdGl2ZVRl
eHRDb250cm9sbGVyOjpkZWxldGVkQXV0b2NvcnJlY3Rpb25BdFBvc2l0aW9uKGNvbnN0IFBvc2l0
aW9uJiBwb3NpdGlvbiwgY29uc3QgU3RyaW5nJiBvcmlnaW5hbFN0cmluZykKIHsKICAgICBtX29y
aWdpbmFsU3RyaW5nRm9yTGFzdERlbGV0ZWRBdXRvY29ycmVjdGlvbiA9IG9yaWdpbmFsU3RyaW5n
OwogICAgIG1fcG9zaXRpb25Gb3JMYXN0RGVsZXRlZEF1dG9jb3JyZWN0aW9uID0gcG9zaXRpb247
CiB9CiAKLXZvaWQgU3BlbGxpbmdDb3JyZWN0aW9uQ29udHJvbGxlcjo6bWFya1ByZWNlZGluZ1do
aXRlc3BhY2VGb3JEZWxldGVkQXV0b2NvcnJlY3Rpb25BZnRlckNvbW1hbmQoRWRpdENvbW1hbmQq
IGNvbW1hbmQpCit2b2lkIEFsdGVybmF0aXZlVGV4dENvbnRyb2xsZXI6Om1hcmtQcmVjZWRpbmdX
aGl0ZXNwYWNlRm9yRGVsZXRlZEF1dG9jb3JyZWN0aW9uQWZ0ZXJDb21tYW5kKEVkaXRDb21tYW5k
KiBjb21tYW5kKQogewogICAgIFBvc2l0aW9uIGVuZE9mU2VsZWN0aW9uID0gY29tbWFuZC0+ZW5k
aW5nU2VsZWN0aW9uKCkuZW5kKCk7CiAgICAgaWYgKGVuZE9mU2VsZWN0aW9uICE9IG1fcG9zaXRp
b25Gb3JMYXN0RGVsZXRlZEF1dG9jb3JyZWN0aW9uKQpAQCAtNTM0LDE5ICs1NDksMTkgQEAgdm9p
ZCBTcGVsbGluZ0NvcnJlY3Rpb25Db250cm9sbGVyOjptYXJrUAogICAgIG1fZnJhbWUtPmRvY3Vt
ZW50KCktPm1hcmtlcnMoKS0+YWRkTWFya2VyKHByZWNlZGluZ0NoYXJhY3RlclJhbmdlLmdldCgp
LCBEb2N1bWVudE1hcmtlcjo6RGVsZXRlZEF1dG9jb3JyZWN0aW9uLCBtX29yaWdpbmFsU3RyaW5n
Rm9yTGFzdERlbGV0ZWRBdXRvY29ycmVjdGlvbik7CiB9CiAKLWJvb2wgU3BlbGxpbmdDb3JyZWN0
aW9uQ29udHJvbGxlcjo6cHJvY2Vzc01hcmtlcnNPblRleHRUb0JlUmVwbGFjZWRCeVJlc3VsdChj
b25zdCBUZXh0Q2hlY2tpbmdSZXN1bHQqIHJlc3VsdCwgUmFuZ2UqIHJhbmdlVG9CZVJlcGxhY2Vk
LCBjb25zdCBTdHJpbmcmIHN0cmluZ1RvQmVSZXBsYWNlZCkKK2Jvb2wgQWx0ZXJuYXRpdmVUZXh0
Q29udHJvbGxlcjo6cHJvY2Vzc01hcmtlcnNPblRleHRUb0JlUmVwbGFjZWRCeVJlc3VsdChjb25z
dCBUZXh0Q2hlY2tpbmdSZXN1bHQqIHJlc3VsdCwgUmFuZ2UqIHJhbmdlV2l0aEFsdGVybmF0aXZl
LCBjb25zdCBTdHJpbmcmIHN0cmluZ1RvQmVSZXBsYWNlZCkKIHsKICAgICBEb2N1bWVudE1hcmtl
ckNvbnRyb2xsZXIqIG1hcmtlckNvbnRyb2xsZXIgPSBtX2ZyYW1lLT5kb2N1bWVudCgpLT5tYXJr
ZXJzKCk7Ci0gICAgaWYgKG1hcmtlckNvbnRyb2xsZXItPmhhc01hcmtlcnMocmFuZ2VUb0JlUmVw
bGFjZWQsIERvY3VtZW50TWFya2VyOjpSZXBsYWNlbWVudCkpIHsKKyAgICBpZiAobWFya2VyQ29u
dHJvbGxlci0+aGFzTWFya2VycyhyYW5nZVdpdGhBbHRlcm5hdGl2ZSwgRG9jdW1lbnRNYXJrZXI6
OlJlcGxhY2VtZW50KSkgewogICAgICAgICBpZiAocmVzdWx0LT50eXBlID09IFRleHRDaGVja2lu
Z1R5cGVDb3JyZWN0aW9uKQotICAgICAgICAgICAgcmVjb3JkU3BlbGxjaGVja2VyUmVzcG9uc2VG
b3JNb2RpZmllZENvcnJlY3Rpb24ocmFuZ2VUb0JlUmVwbGFjZWQsIHN0cmluZ1RvQmVSZXBsYWNl
ZCwgcmVzdWx0LT5yZXBsYWNlbWVudCk7CisgICAgICAgICAgICByZWNvcmRTcGVsbGNoZWNrZXJS
ZXNwb25zZUZvck1vZGlmaWVkQ29ycmVjdGlvbihyYW5nZVdpdGhBbHRlcm5hdGl2ZSwgc3RyaW5n
VG9CZVJlcGxhY2VkLCByZXN1bHQtPnJlcGxhY2VtZW50KTsKICAgICAgICAgcmV0dXJuIGZhbHNl
OwogICAgIH0KIAotICAgIGlmIChtYXJrZXJDb250cm9sbGVyLT5oYXNNYXJrZXJzKHJhbmdlVG9C
ZVJlcGxhY2VkLCBEb2N1bWVudE1hcmtlcjo6UmVqZWN0ZWRDb3JyZWN0aW9uKSkKKyAgICBpZiAo
bWFya2VyQ29udHJvbGxlci0+aGFzTWFya2VycyhyYW5nZVdpdGhBbHRlcm5hdGl2ZSwgRG9jdW1l
bnRNYXJrZXI6OlJlamVjdGVkQ29ycmVjdGlvbikpCiAgICAgICAgIHJldHVybiBmYWxzZTsKIAot
ICAgIFBvc2l0aW9uIGJlZ2lubmluZ09mUmFuZ2UgPSByYW5nZVRvQmVSZXBsYWNlZC0+c3RhcnRQ
b3NpdGlvbigpOworICAgIFBvc2l0aW9uIGJlZ2lubmluZ09mUmFuZ2UgPSByYW5nZVdpdGhBbHRl
cm5hdGl2ZS0+c3RhcnRQb3NpdGlvbigpOwogICAgIFBvc2l0aW9uIHByZWNlZGluZ0NoYXJhY3Rl
clBvc2l0aW9uID0gYmVnaW5uaW5nT2ZSYW5nZS5wcmV2aW91cygpOwogICAgIFJlZlB0cjxSYW5n
ZT4gcHJlY2VkaW5nQ2hhcmFjdGVyUmFuZ2UgPSBSYW5nZTo6Y3JlYXRlKG1fZnJhbWUtPmRvY3Vt
ZW50KCksIHByZWNlZGluZ0NoYXJhY3RlclBvc2l0aW9uLCBiZWdpbm5pbmdPZlJhbmdlKTsKIApJ
bmRleDogU291cmNlL1dlYkNvcmUvZWRpdGluZy9BbHRlcm5hdGl2ZVRleHRDb250cm9sbGVyLmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvZWRpdGluZy9BbHRlcm5hdGl2ZVRleHRDb250
cm9sbGVyLmgJKHJldmlzaW9uIDExMjgzMCkJKGZyb20gU291cmNlL1dlYkNvcmUvZWRpdGluZy9T
cGVsbGluZ0NvcnJlY3Rpb25Db250cm9sbGVyLmg6MTEyODMwKQorKysgU291cmNlL1dlYkNvcmUv
ZWRpdGluZy9BbHRlcm5hdGl2ZVRleHRDb250cm9sbGVyLmgJKHdvcmtpbmcgY29weSkKQEAgLTAs
MCArMSwxNTcgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTAgQXBwbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFu
ZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVy
bWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0
OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5h
cnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4g
dGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQg
d2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQg
QlkgQVBQTEUgQ09NUFVURVIsIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1Ig
SU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisg
KiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBB
IFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFM
TCBBUFBMRSBDT01QVVRFUiwgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1Ig
QU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlks
IE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
CisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9G
IFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9X
RVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJ
TiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdM
SUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisg
KiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9G
IFNVQ0ggREFNQUdFLgorICovCisKKyNpZm5kZWYgU3BlbGxpbmdDb3JyZWN0aW9uQ29udHJvbGxl
cl9oCisjZGVmaW5lIFNwZWxsaW5nQ29ycmVjdGlvbkNvbnRyb2xsZXJfaAorCisjaW5jbHVkZSAi
RG9jdW1lbnRNYXJrZXIuaCIKKyNpbmNsdWRlICJSYW5nZS5oIgorI2luY2x1ZGUgIlRleHRDaGVj
a2luZy5oIgorI2luY2x1ZGUgIlRpbWVyLmgiCisjaW5jbHVkZSAiVmlzaWJsZVNlbGVjdGlvbi5o
IgorI2luY2x1ZGUgPHd0Zi9Ob25jb3B5YWJsZS5oPgorI2luY2x1ZGUgPHd0Zi9VbnVzZWRQYXJh
bS5oPgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK2NsYXNzIENvbXBvc2l0ZUVkaXRDb21tYW5k
OworY2xhc3MgRWRpdG9yQ2xpZW50OworY2xhc3MgRWRpdENvbW1hbmQ7CitjbGFzcyBFZGl0Q29t
bWFuZENvbXBvc2l0aW9uOworY2xhc3MgRnJhbWU7CitjbGFzcyBUZXh0Q2hlY2tlckNsaWVudDsK
Kworc3RydWN0IENvcnJlY3Rpb25QYW5lbEluZm8geworICAgIGVudW0gUGFuZWxUeXBlIHsKKyAg
ICAgICAgUGFuZWxUeXBlQ29ycmVjdGlvbiA9IDAsCisgICAgICAgIFBhbmVsVHlwZVJldmVyc2lv
biwKKyAgICAgICAgUGFuZWxUeXBlU3BlbGxpbmdTdWdnZXN0aW9ucworICAgIH07CisKKyAgICBS
ZWZQdHI8UmFuZ2U+IHJhbmdlVG9CZVJlcGxhY2VkOworICAgIFN0cmluZyByZXBsYWNlZFN0cmlu
ZzsKKyAgICBTdHJpbmcgcmVwbGFjZW1lbnRTdHJpbmc7CisgICAgUGFuZWxUeXBlIHBhbmVsVHlw
ZTsKKyAgICBib29sIGlzQWN0aXZlOworfTsKKworc3RydWN0IFRleHRDaGVja2luZ1Jlc3VsdDsK
KworZW51bSBSZWFzb25Gb3JEaXNtaXNzaW5nQ29ycmVjdGlvblBhbmVsIHsKKyAgICBSZWFzb25G
b3JEaXNtaXNzaW5nQ29ycmVjdGlvblBhbmVsQ2FuY2VsbGVkID0gMCwKKyAgICBSZWFzb25Gb3JE
aXNtaXNzaW5nQ29ycmVjdGlvblBhbmVsSWdub3JlZCwKKyAgICBSZWFzb25Gb3JEaXNtaXNzaW5n
Q29ycmVjdGlvblBhbmVsQWNjZXB0ZWQKK307CisKKyNpZiBVU0UoQVVUT0NPUlJFQ1RJT05fUEFO
RUwpCisjZGVmaW5lIFVOTEVTU19FTkFCTEVEKGZ1bmN0aW9uQm9keSkgOworI2Vsc2UKKyNkZWZp
bmUgVU5MRVNTX0VOQUJMRUQoZnVuY3Rpb25Cb2R5KSBmdW5jdGlvbkJvZHkKKyNlbmRpZgorCitj
bGFzcyBTcGVsbGluZ0NvcnJlY3Rpb25Db250cm9sbGVyIHsKKyAgICBXVEZfTUFLRV9OT05DT1BZ
QUJMRShTcGVsbGluZ0NvcnJlY3Rpb25Db250cm9sbGVyKTsgV1RGX01BS0VfRkFTVF9BTExPQ0FU
RUQ7CitwdWJsaWM6CisgICAgU3BlbGxpbmdDb3JyZWN0aW9uQ29udHJvbGxlcihGcmFtZSopIFVO
TEVTU19FTkFCTEVEKHt9KQorICAgIH5TcGVsbGluZ0NvcnJlY3Rpb25Db250cm9sbGVyKCkgVU5M
RVNTX0VOQUJMRUQoe30pCisKKyAgICB2b2lkIHN0YXJ0Q29ycmVjdGlvblBhbmVsVGltZXIoQ29y
cmVjdGlvblBhbmVsSW5mbzo6UGFuZWxUeXBlKSBVTkxFU1NfRU5BQkxFRCh7fSkKKyAgICB2b2lk
IHN0b3BDb3JyZWN0aW9uUGFuZWxUaW1lcigpIFVOTEVTU19FTkFCTEVEKHt9KQorCisgICAgdm9p
ZCBkaXNtaXNzKFJlYXNvbkZvckRpc21pc3NpbmdDb3JyZWN0aW9uUGFuZWwpIFVOTEVTU19FTkFC
TEVEKHt9KQorICAgIFN0cmluZyBkaXNtaXNzU29vbihSZWFzb25Gb3JEaXNtaXNzaW5nQ29ycmVj
dGlvblBhbmVsKSBVTkxFU1NfRU5BQkxFRCh7IHJldHVybiBTdHJpbmcoKTsgfSkKKyAgICB2b2lk
IHNob3coUGFzc1JlZlB0cjxSYW5nZT4gcmFuZ2VUb1JlcGxhY2UsIGNvbnN0IFN0cmluZyYgcmVw
bGFjZW1lbnQpIFVOTEVTU19FTkFCTEVEKHsgVU5VU0VEX1BBUkFNKHJhbmdlVG9SZXBsYWNlKTsg
VU5VU0VEX1BBUkFNKHJlcGxhY2VtZW50KTsgfSkKKworICAgIHZvaWQgYXBwbHlDb3JyZWN0aW9u
UGFuZWxJbmZvKGNvbnN0IFZlY3RvcjxEb2N1bWVudE1hcmtlcjo6TWFya2VyVHlwZT4mKSBVTkxF
U1NfRU5BQkxFRCh7fSkKKyAgICAvLyBSZXR1cm4gdHJ1ZSBpZiBjb3JyZWN0aW9uIHdhcyBhcHBs
aWVkLCBmYWxzZSBvdGhlcndpc2UuCisgICAgYm9vbCBhcHBseUF1dG9jb3JyZWN0aW9uQmVmb3Jl
VHlwaW5nSWZBcHByb3ByaWF0ZSgpIFVOTEVTU19FTkFCTEVEKHsgcmV0dXJuIGZhbHNlOyB9KQor
CisgICAgdm9pZCByZXNwb25kVG9VbmFwcGxpZWRTcGVsbENvcnJlY3Rpb24oY29uc3QgVmlzaWJs
ZVNlbGVjdGlvbiYsIGNvbnN0IFN0cmluZyYgY29ycmVjdGVkLCBjb25zdCBTdHJpbmcmIGNvcnJl
Y3Rpb24pIFVOTEVTU19FTkFCTEVEKHsgVU5VU0VEX1BBUkFNKGNvcnJlY3RlZCk7IFVOVVNFRF9Q
QVJBTShjb3JyZWN0aW9uKTsgfSkKKyAgICB2b2lkIHJlc3BvbmRUb0FwcGxpZWRFZGl0aW5nKENv
bXBvc2l0ZUVkaXRDb21tYW5kKikgVU5MRVNTX0VOQUJMRUQoeyB9KQorICAgIHZvaWQgcmVzcG9u
ZFRvVW5hcHBsaWVkRWRpdGluZyhFZGl0Q29tbWFuZENvbXBvc2l0aW9uKikgVU5MRVNTX0VOQUJM
RUQoeyB9KQorICAgIHZvaWQgcmVzcG9uZFRvQ2hhbmdlZFNlbGVjdGlvbihjb25zdCBWaXNpYmxl
U2VsZWN0aW9uJiBvbGRTZWxlY3Rpb24pIFVOTEVTU19FTkFCTEVEKHsgVU5VU0VEX1BBUkFNKG9s
ZFNlbGVjdGlvbik7IH0pCisKKyAgICB2b2lkIHN0b3BQZW5kaW5nQ29ycmVjdGlvbihjb25zdCBW
aXNpYmxlU2VsZWN0aW9uJiBvbGRTZWxlY3Rpb24pIFVOTEVTU19FTkFCTEVEKHsgVU5VU0VEX1BB
UkFNKG9sZFNlbGVjdGlvbik7IH0pCisgICAgdm9pZCBhcHBseVBlbmRpbmdDb3JyZWN0aW9uKGNv
bnN0IFZpc2libGVTZWxlY3Rpb24mIHNlbGVjdGlvbkFmdGVyVHlwaW5nKSBVTkxFU1NfRU5BQkxF
RCh7IFVOVVNFRF9QQVJBTShzZWxlY3Rpb25BZnRlclR5cGluZyk7IH0pCisKKyAgICB2b2lkIGhh
bmRsZUNvcnJlY3Rpb25QYW5lbFJlc3VsdChjb25zdCBTdHJpbmcmIGNvcnJlY3Rpb24pIFVOTEVT
U19FTkFCTEVEKHsgVU5VU0VEX1BBUkFNKGNvcnJlY3Rpb24pOyB9KQorICAgIHZvaWQgaGFuZGxl
Q2FuY2VsT3BlcmF0aW9uKCkgVU5MRVNTX0VOQUJMRUQoe30pCisKKyAgICBib29sIGhhc1BlbmRp
bmdDb3JyZWN0aW9uKCkgY29uc3QgVU5MRVNTX0VOQUJMRUQoeyByZXR1cm4gZmFsc2U7IH0pCisg
ICAgYm9vbCBpc1NwZWxsaW5nTWFya2VyQWxsb3dlZChQYXNzUmVmUHRyPFJhbmdlPiBtaXNzcGVs
bGluZ1JhbmdlKSBjb25zdCBVTkxFU1NfRU5BQkxFRCh7IFVOVVNFRF9QQVJBTShtaXNzcGVsbGlu
Z1JhbmdlKTsgcmV0dXJuIHRydWU7IH0pCisgICAgYm9vbCBpc0F1dG9tYXRpY1NwZWxsaW5nQ29y
cmVjdGlvbkVuYWJsZWQoKSBVTkxFU1NfRU5BQkxFRCh7IHJldHVybiBmYWxzZTsgfSkKKyAgICBi
b29sIHNob3VsZFJlbW92ZU1hcmtlcnNVcG9uRWRpdGluZygpOworCisgICAgdm9pZCBjb3JyZWN0
aW9uUGFuZWxUaW1lckZpcmVkKFRpbWVyPFNwZWxsaW5nQ29ycmVjdGlvbkNvbnRyb2xsZXI+Kikg
VU5MRVNTX0VOQUJMRUQoe30pCisgICAgdm9pZCByZWNvcmRBdXRvY29ycmVjdGlvblJlc3BvbnNl
UmV2ZXJzZWQoY29uc3QgU3RyaW5nJiByZXBsYWNlZFN0cmluZywgUGFzc1JlZlB0cjxSYW5nZT4g
cmVwbGFjZW1lbnRSYW5nZSkgVU5MRVNTX0VOQUJMRUQoeyBVTlVTRURfUEFSQU0ocmVwbGFjZWRT
dHJpbmcpOyBVTlVTRURfUEFSQU0ocmVwbGFjZW1lbnRSYW5nZSk7IH0pCisgICAgdm9pZCBtYXJr
UmV2ZXJzZWQoUGFzc1JlZlB0cjxSYW5nZT4gY2hhbmdlZFJhbmdlKSBVTkxFU1NfRU5BQkxFRCh7
IFVOVVNFRF9QQVJBTShjaGFuZ2VkUmFuZ2UpOyB9KQorICAgIHZvaWQgbWFya0NvcnJlY3Rpb24o
UGFzc1JlZlB0cjxSYW5nZT4gcmVwbGFjZWRSYW5nZSwgY29uc3QgU3RyaW5nJiByZXBsYWNlZFN0
cmluZykgVU5MRVNTX0VOQUJMRUQoeyBVTlVTRURfUEFSQU0ocmVwbGFjZWRSYW5nZSk7IFVOVVNF
RF9QQVJBTShyZXBsYWNlZFN0cmluZyk7IH0pCisgICAgdm9pZCByZWNvcmRTcGVsbGNoZWNrZXJS
ZXNwb25zZUZvck1vZGlmaWVkQ29ycmVjdGlvbihSYW5nZSogcmFuZ2VPZkNvcnJlY3Rpb24sIGNv
bnN0IFN0cmluZyYgY29ycmVjdGVkLCBjb25zdCBTdHJpbmcmIGNvcnJlY3Rpb24pIFVOTEVTU19F
TkFCTEVEKHsgVU5VU0VEX1BBUkFNKHJhbmdlT2ZDb3JyZWN0aW9uKTsgVU5VU0VEX1BBUkFNKGNv
cnJlY3RlZCk7IFVOVVNFRF9QQVJBTShjb3JyZWN0aW9uKTsgfSkKKworICAgIC8vIFRoaXMgZnVu
Y3Rpb24gcmV0dXJucyBmYWxzZSBpZiB0aGUgcmVwbGFjZW1lbnQgc2hvdWxkIG5vdCBiZSBjYXJy
aWVkIG91dC4KKyAgICBib29sIHByb2Nlc3NNYXJrZXJzT25UZXh0VG9CZVJlcGxhY2VkQnlSZXN1
bHQoY29uc3QgVGV4dENoZWNraW5nUmVzdWx0KiwgUmFuZ2UqIHJhbmdlVG9CZVJlcGxhY2VkLCBj
b25zdCBTdHJpbmcmIHN0cmluZ1RvQmVSZXBsYWNlZCkgVU5MRVNTX0VOQUJMRUQoeyBVTlVTRURf
UEFSQU0ocmFuZ2VUb0JlUmVwbGFjZWQpOyBVTlVTRURfUEFSQU0oc3RyaW5nVG9CZVJlcGxhY2Vk
KTsgcmV0dXJuIHRydWU7IH0pOworICAgIHZvaWQgZGVsZXRlZEF1dG9jb3JyZWN0aW9uQXRQb3Np
dGlvbihjb25zdCBQb3NpdGlvbiYsIGNvbnN0IFN0cmluZyYgb3JpZ2luYWxTdHJpbmcpIFVOTEVT
U19FTkFCTEVEKHsgVU5VU0VEX1BBUkFNKG9yaWdpbmFsU3RyaW5nKTsgfSkKKworI2lmIFVTRShB
VVRPQ09SUkVDVElPTl9QQU5FTCkKK3ByaXZhdGU6CisgICAgdm9pZCByZWNvcmRBdXRvY29ycmVj
dGlvblJlc3BvbnNlUmV2ZXJzZWQoY29uc3QgU3RyaW5nJiByZXBsYWNlZFN0cmluZywgY29uc3Qg
U3RyaW5nJiByZXBsYWNlbWVudFN0cmluZyk7CisKKyAgICBib29sIHNob3VsZFN0YXJ0VGltZXJG
b3IoY29uc3QgRG9jdW1lbnRNYXJrZXIqIG1hcmtlciwgaW50IGVuZE9mZnNldCkgY29uc3QKKyAg
ICB7CisgICAgICAgIHJldHVybiAoKChtYXJrZXItPnR5cGUoKSA9PSBEb2N1bWVudE1hcmtlcjo6
UmVwbGFjZW1lbnQgJiYgIW1hcmtlci0+ZGVzY3JpcHRpb24oKS5pc051bGwoKSkgCisgICAgICAg
ICAgICAgICAgIHx8IG1hcmtlci0+dHlwZSgpID09IERvY3VtZW50TWFya2VyOjpTcGVsbGluZykg
JiYgc3RhdGljX2Nhc3Q8aW50PihtYXJrZXItPmVuZE9mZnNldCgpKSA9PSBlbmRPZmZzZXQpOwor
ICAgIH0KKworICAgIEVkaXRvckNsaWVudCogY2xpZW50KCk7CisgICAgVGV4dENoZWNrZXJDbGll
bnQqIHRleHRDaGVja2VyKCk7CisgICAgRmxvYXRSZWN0IHJvb3RWaWV3UmVjdEZvclJhbmdlKGNv
bnN0IFJhbmdlKikgY29uc3Q7CisgICAgdm9pZCBtYXJrUHJlY2VkaW5nV2hpdGVzcGFjZUZvckRl
bGV0ZWRBdXRvY29ycmVjdGlvbkFmdGVyQ29tbWFuZChFZGl0Q29tbWFuZCopOworCisgICAgRWRp
dG9yQ2xpZW50KiBtX2NsaWVudDsKKyAgICBGcmFtZSogbV9mcmFtZTsKKworICAgIFRpbWVyPFNw
ZWxsaW5nQ29ycmVjdGlvbkNvbnRyb2xsZXI+IG1fY29ycmVjdGlvblBhbmVsVGltZXI7CisgICAg
Q29ycmVjdGlvblBhbmVsSW5mbyBtX2NvcnJlY3Rpb25QYW5lbEluZm87CisgICAgYm9vbCBtX2Nv
cnJlY3Rpb25QYW5lbElzRGlzbWlzc2VkQnlFZGl0b3I7CisKKyAgICBTdHJpbmcgbV9vcmlnaW5h
bFN0cmluZ0Zvckxhc3REZWxldGVkQXV0b2NvcnJlY3Rpb247CisgICAgUG9zaXRpb24gbV9wb3Np
dGlvbkZvckxhc3REZWxldGVkQXV0b2NvcnJlY3Rpb247CisjZW5kaWYKK307CisKKyN1bmRlZiBV
TkxFU1NfRU5BQkxFRAorCitpbmxpbmUgYm9vbCBTcGVsbGluZ0NvcnJlY3Rpb25Db250cm9sbGVy
OjpzaG91bGRSZW1vdmVNYXJrZXJzVXBvbkVkaXRpbmcoKQoreworI2lmIFVTRShNQVJLRVJfUkVN
T1ZBTF9VUE9OX0VESVRJTkcpCisgICAgcmV0dXJuIHRydWU7CisjZWxzZQorICAgIHJldHVybiBm
YWxzZTsKKyNlbmRpZgorfQorCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKKyNlbmRpZiAvLyBT
cGVsbGluZ0NvcnJlY3Rpb25Db250cm9sbGVyX2gKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2VkaXRp
bmcvQWx0ZXJuYXRpdmVUZXh0Q29udHJvbGxlci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJD
b3JlL2VkaXRpbmcvQWx0ZXJuYXRpdmVUZXh0Q29udHJvbGxlci5oCShyZXZpc2lvbiAxMTI4MzAp
CisrKyBTb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0FsdGVybmF0aXZlVGV4dENvbnRyb2xsZXIuaAko
d29ya2luZyBjb3B5KQpAQCAtMjMsOCArMjMsOCBAQAogICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZF
TiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KICAqLwogCi0j
aWZuZGVmIFNwZWxsaW5nQ29ycmVjdGlvbkNvbnRyb2xsZXJfaAotI2RlZmluZSBTcGVsbGluZ0Nv
cnJlY3Rpb25Db250cm9sbGVyX2gKKyNpZm5kZWYgQWx0ZXJuYXRpdmVUZXh0Q29udHJvbGxlcl9o
CisjZGVmaW5lIEFsdGVybmF0aXZlVGV4dENvbnRyb2xsZXJfaAogCiAjaW5jbHVkZSAiRG9jdW1l
bnRNYXJrZXIuaCIKICNpbmNsdWRlICJSYW5nZS5oIgpAQCAtNDMsNDggKzQzLDU2IEBAIGNsYXNz
IEVkaXRDb21tYW5kQ29tcG9zaXRpb247CiBjbGFzcyBGcmFtZTsKIGNsYXNzIFRleHRDaGVja2Vy
Q2xpZW50OwogCi1zdHJ1Y3QgQ29ycmVjdGlvblBhbmVsSW5mbyB7Ci0gICAgZW51bSBQYW5lbFR5
cGUgewotICAgICAgICBQYW5lbFR5cGVDb3JyZWN0aW9uID0gMCwKLSAgICAgICAgUGFuZWxUeXBl
UmV2ZXJzaW9uLAotICAgICAgICBQYW5lbFR5cGVTcGVsbGluZ1N1Z2dlc3Rpb25zCi0gICAgfTsK
LQotICAgIFJlZlB0cjxSYW5nZT4gcmFuZ2VUb0JlUmVwbGFjZWQ7Ci0gICAgU3RyaW5nIHJlcGxh
Y2VkU3RyaW5nOwotICAgIFN0cmluZyByZXBsYWNlbWVudFN0cmluZzsKLSAgICBQYW5lbFR5cGUg
cGFuZWxUeXBlOworY2xhc3MgQWx0ZXJuYXRpdmVUZXh0RGV0YWlscyA6IHB1YmxpYyBSZWZDb3Vu
dGVkPEFsdGVybmF0aXZlVGV4dERldGFpbHM+IHsKK3B1YmxpYzoKKyAgICBBbHRlcm5hdGl2ZVRl
eHREZXRhaWxzKCkgeyB9CisgICAgdmlydHVhbCB+QWx0ZXJuYXRpdmVUZXh0RGV0YWlscygpIHsg
fQorfTsKKworZW51bSBBbHRlcm5hdGl2ZVRleHRUeXBlIHsKKyAgICBBbHRlcm5hdGl2ZVRleHRU
eXBlQ29ycmVjdGlvbiA9IDAsCisgICAgQWx0ZXJuYXRpdmVUZXh0VHlwZVJldmVyc2lvbiwKKyAg
ICBBbHRlcm5hdGl2ZVRleHRUeXBlU3BlbGxpbmdTdWdnZXN0aW9ucywKK307CisKK3N0cnVjdCBB
bHRlcm5hdGl2ZVRleHRJbmZvIHsKKyAgICBSZWZQdHI8UmFuZ2U+IHJhbmdlV2l0aEFsdGVybmF0
aXZlOwogICAgIGJvb2wgaXNBY3RpdmU7CisgICAgQWx0ZXJuYXRpdmVUZXh0VHlwZSB0eXBlOwor
ICAgIFN0cmluZyBvcmlnaW5hbFRleHQ7CisgICAgUmVmUHRyPEFsdGVybmF0aXZlVGV4dERldGFp
bHM+IGRldGFpbHM7CiB9OwogCiBzdHJ1Y3QgVGV4dENoZWNraW5nUmVzdWx0OwogCi1lbnVtIFJl
YXNvbkZvckRpc21pc3NpbmdDb3JyZWN0aW9uUGFuZWwgewotICAgIFJlYXNvbkZvckRpc21pc3Np
bmdDb3JyZWN0aW9uUGFuZWxDYW5jZWxsZWQgPSAwLAotICAgIFJlYXNvbkZvckRpc21pc3NpbmdD
b3JyZWN0aW9uUGFuZWxJZ25vcmVkLAotICAgIFJlYXNvbkZvckRpc21pc3NpbmdDb3JyZWN0aW9u
UGFuZWxBY2NlcHRlZAorZW51bSBSZWFzb25Gb3JEaXNtaXNzaW5nQWx0ZXJuYXRpdmVUZXh0IHsK
KyAgICBSZWFzb25Gb3JEaXNtaXNzaW5nQWx0ZXJuYXRpdmVUZXh0Q2FuY2VsbGVkID0gMCwKKyAg
ICBSZWFzb25Gb3JEaXNtaXNzaW5nQWx0ZXJuYXRpdmVUZXh0SWdub3JlZCwKKyAgICBSZWFzb25G
b3JEaXNtaXNzaW5nQWx0ZXJuYXRpdmVUZXh0QWNjZXB0ZWQKIH07CiAKICNpZiBVU0UoQVVUT0NP
UlJFQ1RJT05fUEFORUwpCi0jZGVmaW5lIFVOTEVTU19FTkFCTEVEKGZ1bmN0aW9uQm9keSkgOwor
Ly8gVGhlc2UgYmFja3NsYXNoZXMgYXJlIGZvciBtYWtpbmcgc3R5bGUgY2hlY2tlciBoYXBweS4K
KyNkZWZpbmUgVU5MRVNTX0VOQUJMRUQoZnVuY3Rpb25Cb2R5KSBcCis7XAorCiAjZWxzZQogI2Rl
ZmluZSBVTkxFU1NfRU5BQkxFRChmdW5jdGlvbkJvZHkpIGZ1bmN0aW9uQm9keQogI2VuZGlmCiAK
LWNsYXNzIFNwZWxsaW5nQ29ycmVjdGlvbkNvbnRyb2xsZXIgewotICAgIFdURl9NQUtFX05PTkNP
UFlBQkxFKFNwZWxsaW5nQ29ycmVjdGlvbkNvbnRyb2xsZXIpOyBXVEZfTUFLRV9GQVNUX0FMTE9D
QVRFRDsKK2NsYXNzIEFsdGVybmF0aXZlVGV4dENvbnRyb2xsZXIgeworICAgIFdURl9NQUtFX05P
TkNPUFlBQkxFKEFsdGVybmF0aXZlVGV4dENvbnRyb2xsZXIpOworICAgIFdURl9NQUtFX0ZBU1Rf
QUxMT0NBVEVEOwogcHVibGljOgotICAgIFNwZWxsaW5nQ29ycmVjdGlvbkNvbnRyb2xsZXIoRnJh
bWUqKSBVTkxFU1NfRU5BQkxFRCh7fSkKLSAgICB+U3BlbGxpbmdDb3JyZWN0aW9uQ29udHJvbGxl
cigpIFVOTEVTU19FTkFCTEVEKHt9KQorICAgIEFsdGVybmF0aXZlVGV4dENvbnRyb2xsZXIoRnJh
bWUqKSBVTkxFU1NfRU5BQkxFRCh7IH0pCisgICAgfkFsdGVybmF0aXZlVGV4dENvbnRyb2xsZXIo
KSBVTkxFU1NfRU5BQkxFRCh7IH0pCiAKLSAgICB2b2lkIHN0YXJ0Q29ycmVjdGlvblBhbmVsVGlt
ZXIoQ29ycmVjdGlvblBhbmVsSW5mbzo6UGFuZWxUeXBlKSBVTkxFU1NfRU5BQkxFRCh7fSkKLSAg
ICB2b2lkIHN0b3BDb3JyZWN0aW9uUGFuZWxUaW1lcigpIFVOTEVTU19FTkFCTEVEKHt9KQorICAg
IHZvaWQgc3RhcnRBbHRlcm5hdGl2ZVRleHRVSVRpbWVyKEFsdGVybmF0aXZlVGV4dFR5cGUpIFVO
TEVTU19FTkFCTEVEKHsgfSkKKyAgICB2b2lkIHN0b3BBbHRlcm5hdGl2ZVRleHRVSVRpbWVyKCkg
VU5MRVNTX0VOQUJMRUQoeyB9KQogCi0gICAgdm9pZCBkaXNtaXNzKFJlYXNvbkZvckRpc21pc3Np
bmdDb3JyZWN0aW9uUGFuZWwpIFVOTEVTU19FTkFCTEVEKHt9KQotICAgIFN0cmluZyBkaXNtaXNz
U29vbihSZWFzb25Gb3JEaXNtaXNzaW5nQ29ycmVjdGlvblBhbmVsKSBVTkxFU1NfRU5BQkxFRCh7
IHJldHVybiBTdHJpbmcoKTsgfSkKKyAgICB2b2lkIGRpc21pc3MoUmVhc29uRm9yRGlzbWlzc2lu
Z0FsdGVybmF0aXZlVGV4dCkgVU5MRVNTX0VOQUJMRUQoeyB9KQogICAgIHZvaWQgc2hvdyhQYXNz
UmVmUHRyPFJhbmdlPiByYW5nZVRvUmVwbGFjZSwgY29uc3QgU3RyaW5nJiByZXBsYWNlbWVudCkg
VU5MRVNTX0VOQUJMRUQoeyBVTlVTRURfUEFSQU0ocmFuZ2VUb1JlcGxhY2UpOyBVTlVTRURfUEFS
QU0ocmVwbGFjZW1lbnQpOyB9KQogCi0gICAgdm9pZCBhcHBseUNvcnJlY3Rpb25QYW5lbEluZm8o
Y29uc3QgVmVjdG9yPERvY3VtZW50TWFya2VyOjpNYXJrZXJUeXBlPiYpIFVOTEVTU19FTkFCTEVE
KHt9KQogICAgIC8vIFJldHVybiB0cnVlIGlmIGNvcnJlY3Rpb24gd2FzIGFwcGxpZWQsIGZhbHNl
IG90aGVyd2lzZS4KICAgICBib29sIGFwcGx5QXV0b2NvcnJlY3Rpb25CZWZvcmVUeXBpbmdJZkFw
cHJvcHJpYXRlKCkgVU5MRVNTX0VOQUJMRUQoeyByZXR1cm4gZmFsc2U7IH0pCiAKQEAgLTk2LDE5
ICsxMDQsMTcgQEAgcHVibGljOgogICAgIHZvaWQgc3RvcFBlbmRpbmdDb3JyZWN0aW9uKGNvbnN0
IFZpc2libGVTZWxlY3Rpb24mIG9sZFNlbGVjdGlvbikgVU5MRVNTX0VOQUJMRUQoeyBVTlVTRURf
UEFSQU0ob2xkU2VsZWN0aW9uKTsgfSkKICAgICB2b2lkIGFwcGx5UGVuZGluZ0NvcnJlY3Rpb24o
Y29uc3QgVmlzaWJsZVNlbGVjdGlvbiYgc2VsZWN0aW9uQWZ0ZXJUeXBpbmcpIFVOTEVTU19FTkFC
TEVEKHsgVU5VU0VEX1BBUkFNKHNlbGVjdGlvbkFmdGVyVHlwaW5nKTsgfSkKIAotICAgIHZvaWQg
aGFuZGxlQ29ycmVjdGlvblBhbmVsUmVzdWx0KGNvbnN0IFN0cmluZyYgY29ycmVjdGlvbikgVU5M
RVNTX0VOQUJMRUQoeyBVTlVTRURfUEFSQU0oY29ycmVjdGlvbik7IH0pCi0gICAgdm9pZCBoYW5k
bGVDYW5jZWxPcGVyYXRpb24oKSBVTkxFU1NfRU5BQkxFRCh7fSkKKyAgICB2b2lkIGhhbmRsZUFs
dGVybmF0aXZlVGV4dFVJUmVzdWx0KGNvbnN0IFN0cmluZyYgcmVzdWx0KSBVTkxFU1NfRU5BQkxF
RCh7IFVOVVNFRF9QQVJBTShyZXN1bHQpOyB9KQorICAgIHZvaWQgaGFuZGxlQ2FuY2VsT3BlcmF0
aW9uKCkgVU5MRVNTX0VOQUJMRUQoeyB9KQogCiAgICAgYm9vbCBoYXNQZW5kaW5nQ29ycmVjdGlv
bigpIGNvbnN0IFVOTEVTU19FTkFCTEVEKHsgcmV0dXJuIGZhbHNlOyB9KQogICAgIGJvb2wgaXNT
cGVsbGluZ01hcmtlckFsbG93ZWQoUGFzc1JlZlB0cjxSYW5nZT4gbWlzc3BlbGxpbmdSYW5nZSkg
Y29uc3QgVU5MRVNTX0VOQUJMRUQoeyBVTlVTRURfUEFSQU0obWlzc3BlbGxpbmdSYW5nZSk7IHJl
dHVybiB0cnVlOyB9KQogICAgIGJvb2wgaXNBdXRvbWF0aWNTcGVsbGluZ0NvcnJlY3Rpb25FbmFi
bGVkKCkgVU5MRVNTX0VOQUJMRUQoeyByZXR1cm4gZmFsc2U7IH0pCiAgICAgYm9vbCBzaG91bGRS
ZW1vdmVNYXJrZXJzVXBvbkVkaXRpbmcoKTsKIAotICAgIHZvaWQgY29ycmVjdGlvblBhbmVsVGlt
ZXJGaXJlZChUaW1lcjxTcGVsbGluZ0NvcnJlY3Rpb25Db250cm9sbGVyPiopIFVOTEVTU19FTkFC
TEVEKHt9KQogICAgIHZvaWQgcmVjb3JkQXV0b2NvcnJlY3Rpb25SZXNwb25zZVJldmVyc2VkKGNv
bnN0IFN0cmluZyYgcmVwbGFjZWRTdHJpbmcsIFBhc3NSZWZQdHI8UmFuZ2U+IHJlcGxhY2VtZW50
UmFuZ2UpIFVOTEVTU19FTkFCTEVEKHsgVU5VU0VEX1BBUkFNKHJlcGxhY2VkU3RyaW5nKTsgVU5V
U0VEX1BBUkFNKHJlcGxhY2VtZW50UmFuZ2UpOyB9KQogICAgIHZvaWQgbWFya1JldmVyc2VkKFBh
c3NSZWZQdHI8UmFuZ2U+IGNoYW5nZWRSYW5nZSkgVU5MRVNTX0VOQUJMRUQoeyBVTlVTRURfUEFS
QU0oY2hhbmdlZFJhbmdlKTsgfSkKICAgICB2b2lkIG1hcmtDb3JyZWN0aW9uKFBhc3NSZWZQdHI8
UmFuZ2U+IHJlcGxhY2VkUmFuZ2UsIGNvbnN0IFN0cmluZyYgcmVwbGFjZWRTdHJpbmcpIFVOTEVT
U19FTkFCTEVEKHsgVU5VU0VEX1BBUkFNKHJlcGxhY2VkUmFuZ2UpOyBVTlVTRURfUEFSQU0ocmVw
bGFjZWRTdHJpbmcpOyB9KQotICAgIHZvaWQgcmVjb3JkU3BlbGxjaGVja2VyUmVzcG9uc2VGb3JN
b2RpZmllZENvcnJlY3Rpb24oUmFuZ2UqIHJhbmdlT2ZDb3JyZWN0aW9uLCBjb25zdCBTdHJpbmcm
IGNvcnJlY3RlZCwgY29uc3QgU3RyaW5nJiBjb3JyZWN0aW9uKSBVTkxFU1NfRU5BQkxFRCh7IFVO
VVNFRF9QQVJBTShyYW5nZU9mQ29ycmVjdGlvbik7IFVOVVNFRF9QQVJBTShjb3JyZWN0ZWQpOyBV
TlVTRURfUEFSQU0oY29ycmVjdGlvbik7IH0pCiAKICAgICAvLyBUaGlzIGZ1bmN0aW9uIHJldHVy
bnMgZmFsc2UgaWYgdGhlIHJlcGxhY2VtZW50IHNob3VsZCBub3QgYmUgY2FycmllZCBvdXQuCiAg
ICAgYm9vbCBwcm9jZXNzTWFya2Vyc09uVGV4dFRvQmVSZXBsYWNlZEJ5UmVzdWx0KGNvbnN0IFRl
eHRDaGVja2luZ1Jlc3VsdCosIFJhbmdlKiByYW5nZVRvQmVSZXBsYWNlZCwgY29uc3QgU3RyaW5n
JiBzdHJpbmdUb0JlUmVwbGFjZWQpIFVOTEVTU19FTkFCTEVEKHsgVU5VU0VEX1BBUkFNKHJhbmdl
VG9CZVJlcGxhY2VkKTsgVU5VU0VEX1BBUkFNKHN0cmluZ1RvQmVSZXBsYWNlZCk7IHJldHVybiB0
cnVlOyB9KTsKQEAgLTExNiw3ICsxMjIsMTEgQEAgcHVibGljOgogCiAjaWYgVVNFKEFVVE9DT1JS
RUNUSU9OX1BBTkVMKQogcHJpdmF0ZToKKyAgICBTdHJpbmcgZGlzbWlzc1Nvb24oUmVhc29uRm9y
RGlzbWlzc2luZ0FsdGVybmF0aXZlVGV4dCk7CisgICAgdm9pZCBhcHBseUFsdGVybmF0aXZlVGV4
dChjb25zdCBTdHJpbmcmIGFsdGVybmF0aXZlLCBjb25zdCBWZWN0b3I8RG9jdW1lbnRNYXJrZXI6
Ok1hcmtlclR5cGU+Jik7CisgICAgdm9pZCB0aW1lckZpcmVkKFRpbWVyPEFsdGVybmF0aXZlVGV4
dENvbnRyb2xsZXI+Kik7CiAgICAgdm9pZCByZWNvcmRBdXRvY29ycmVjdGlvblJlc3BvbnNlUmV2
ZXJzZWQoY29uc3QgU3RyaW5nJiByZXBsYWNlZFN0cmluZywgY29uc3QgU3RyaW5nJiByZXBsYWNl
bWVudFN0cmluZyk7CisgICAgdm9pZCByZWNvcmRTcGVsbGNoZWNrZXJSZXNwb25zZUZvck1vZGlm
aWVkQ29ycmVjdGlvbihSYW5nZSogcmFuZ2VPZkNvcnJlY3Rpb24sIGNvbnN0IFN0cmluZyYgY29y
cmVjdGVkLCBjb25zdCBTdHJpbmcmIGNvcnJlY3Rpb24pOwogCiAgICAgYm9vbCBzaG91bGRTdGFy
dFRpbWVyRm9yKGNvbnN0IERvY3VtZW50TWFya2VyKiBtYXJrZXIsIGludCBlbmRPZmZzZXQpIGNv
bnN0CiAgICAgewpAQCAtMTMyLDkgKzE0Miw5IEBAIHByaXZhdGU6CiAgICAgRWRpdG9yQ2xpZW50
KiBtX2NsaWVudDsKICAgICBGcmFtZSogbV9mcmFtZTsKIAotICAgIFRpbWVyPFNwZWxsaW5nQ29y
cmVjdGlvbkNvbnRyb2xsZXI+IG1fY29ycmVjdGlvblBhbmVsVGltZXI7Ci0gICAgQ29ycmVjdGlv
blBhbmVsSW5mbyBtX2NvcnJlY3Rpb25QYW5lbEluZm87Ci0gICAgYm9vbCBtX2NvcnJlY3Rpb25Q
YW5lbElzRGlzbWlzc2VkQnlFZGl0b3I7CisgICAgVGltZXI8QWx0ZXJuYXRpdmVUZXh0Q29udHJv
bGxlcj4gbV90aW1lcjsKKyAgICBBbHRlcm5hdGl2ZVRleHRJbmZvIG1fYWx0ZXJuYXRpdmVUZXh0
SW5mbzsKKyAgICBib29sIG1faXNEaXNtaXNzZWRCeUVkaXRpbmc7CiAKICAgICBTdHJpbmcgbV9v
cmlnaW5hbFN0cmluZ0Zvckxhc3REZWxldGVkQXV0b2NvcnJlY3Rpb247CiAgICAgUG9zaXRpb24g
bV9wb3NpdGlvbkZvckxhc3REZWxldGVkQXV0b2NvcnJlY3Rpb247CkBAIC0xNDMsNyArMTUzLDcg
QEAgcHJpdmF0ZToKIAogI3VuZGVmIFVOTEVTU19FTkFCTEVECiAKLWlubGluZSBib29sIFNwZWxs
aW5nQ29ycmVjdGlvbkNvbnRyb2xsZXI6OnNob3VsZFJlbW92ZU1hcmtlcnNVcG9uRWRpdGluZygp
CitpbmxpbmUgYm9vbCBBbHRlcm5hdGl2ZVRleHRDb250cm9sbGVyOjpzaG91bGRSZW1vdmVNYXJr
ZXJzVXBvbkVkaXRpbmcoKQogewogI2lmIFVTRShNQVJLRVJfUkVNT1ZBTF9VUE9OX0VESVRJTkcp
CiAgICAgcmV0dXJuIHRydWU7CkBAIC0xNTQsNCArMTY0LDQgQEAgaW5saW5lIGJvb2wgU3BlbGxp
bmdDb3JyZWN0aW9uQ29udHJvbGxlcgogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCiAKLSNlbmRp
ZiAvLyBTcGVsbGluZ0NvcnJlY3Rpb25Db250cm9sbGVyX2gKKyNlbmRpZiAvLyBBbHRlcm5hdGl2
ZVRleHRDb250cm9sbGVyX2gKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2VkaXRpbmcvRWRpdG9yLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0VkaXRvci5jcHAJKHJldmlz
aW9uIDExMjk2MSkKKysrIFNvdXJjZS9XZWJDb3JlL2VkaXRpbmcvRWRpdG9yLmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtMjgsNiArMjgsNyBAQAogI2luY2x1ZGUgIkVkaXRvci5oIgogCiAjaW5jbHVk
ZSAiQVhPYmplY3RDYWNoZS5oIgorI2luY2x1ZGUgIkFsdGVybmF0aXZlVGV4dENvbnRyb2xsZXIu
aCIKICNpbmNsdWRlICJBcHBseVN0eWxlQ29tbWFuZC5oIgogI2luY2x1ZGUgIkNTU0NvbXB1dGVk
U3R5bGVEZWNsYXJhdGlvbi5oIgogI2luY2x1ZGUgIkNTU1Byb3BlcnR5LmgiCkBAIC0zNyw3ICsz
OCw2IEBACiAjaW5jbHVkZSAiQ2FjaGVkUmVzb3VyY2VMb2FkZXIuaCIKICNpbmNsdWRlICJDbGlw
Ym9hcmRFdmVudC5oIgogI2luY2x1ZGUgIkNvbXBvc2l0aW9uRXZlbnQuaCIKLSNpbmNsdWRlICJT
cGVsbGluZ0NvcnJlY3Rpb25Db250cm9sbGVyLmgiCiAjaW5jbHVkZSAiQ3JlYXRlTGlua0NvbW1h
bmQuaCIKICNpbmNsdWRlICJEZWxldGVCdXR0b25Db250cm9sbGVyLmgiCiAjaW5jbHVkZSAiRGVs
ZXRlU2VsZWN0aW9uQ29tbWFuZC5oIgpAQCAtNDgyLDcgKzQ4Miw3IEBAIHZvaWQgRWRpdG9yOjpy
ZXNwb25kVG9DaGFuZ2VkU2VsZWN0aW9uKGMKICAgICAgICAgY2xpZW50KCktPnJlc3BvbmRUb0No
YW5nZWRTZWxlY3Rpb24obV9mcmFtZSk7CiAgICAgc2V0U3RhcnROZXdLaWxsUmluZ1NlcXVlbmNl
KHRydWUpOwogICAgIG1fZGVsZXRlQnV0dG9uQ29udHJvbGxlci0+cmVzcG9uZFRvQ2hhbmdlZFNl
bGVjdGlvbihvbGRTZWxlY3Rpb24pOwotICAgIG1fc3BlbGxpbmdDb3JyZWN0b3ItPnJlc3BvbmRU
b0NoYW5nZWRTZWxlY3Rpb24ob2xkU2VsZWN0aW9uKTsKKyAgICBtX2FsdGVybmF0aXZlVGV4dENv
bnRyb2xsZXItPnJlc3BvbmRUb0NoYW5nZWRTZWxlY3Rpb24ob2xkU2VsZWN0aW9uKTsKIH0KIAog
dm9pZCBFZGl0b3I6OnJlc3BvbmRUb0NoYW5nZWRDb250ZW50cyhjb25zdCBWaXNpYmxlU2VsZWN0
aW9uJiBlbmRpbmdTZWxlY3Rpb24pCkBAIC03ODIsNyArNzgyLDcgQEAgdm9pZCBFZGl0b3I6OmFw
cGxpZWRFZGl0aW5nKFBhc3NSZWZQdHI8QwogICAgIGRpc3BhdGNoRWRpdGFibGVDb250ZW50Q2hh
bmdlZEV2ZW50cyhjb21wb3NpdGlvbi0+c3RhcnRpbmdSb290RWRpdGFibGVFbGVtZW50KCksIGNv
bXBvc2l0aW9uLT5lbmRpbmdSb290RWRpdGFibGVFbGVtZW50KCkpOwogICAgIFZpc2libGVTZWxl
Y3Rpb24gbmV3U2VsZWN0aW9uKGNtZC0+ZW5kaW5nU2VsZWN0aW9uKCkpOwogCi0gICAgbV9zcGVs
bGluZ0NvcnJlY3Rvci0+cmVzcG9uZFRvQXBwbGllZEVkaXRpbmcoY21kLmdldCgpKTsKKyAgICBt
X2FsdGVybmF0aXZlVGV4dENvbnRyb2xsZXItPnJlc3BvbmRUb0FwcGxpZWRFZGl0aW5nKGNtZC5n
ZXQoKSk7CiAKICAgICAvLyBEb24ndCBjbGVhciB0aGUgdHlwaW5nIHN0eWxlIHdpdGggdGhpcyBz
ZWxlY3Rpb24gY2hhbmdlLiAgV2UgZG8gdGhvc2UgdGhpbmdzIGVsc2V3aGVyZSBpZiBuZWNlc3Nh
cnkuCiAgICAgY2hhbmdlU2VsZWN0aW9uQWZ0ZXJDb21tYW5kKG5ld1NlbGVjdGlvbiwgZmFsc2Us
IGZhbHNlKTsKQEAgLTgxMiw3ICs4MTIsNyBAQCB2b2lkIEVkaXRvcjo6dW5hcHBsaWVkRWRpdGlu
ZyhQYXNzUmVmUHRyCiAgICAgCiAgICAgVmlzaWJsZVNlbGVjdGlvbiBuZXdTZWxlY3Rpb24oY21k
LT5zdGFydGluZ1NlbGVjdGlvbigpKTsKICAgICBjaGFuZ2VTZWxlY3Rpb25BZnRlckNvbW1hbmQo
bmV3U2VsZWN0aW9uLCB0cnVlLCB0cnVlKTsKLSAgICBtX3NwZWxsaW5nQ29ycmVjdG9yLT5yZXNw
b25kVG9VbmFwcGxpZWRFZGl0aW5nKGNtZC5nZXQoKSk7CisgICAgbV9hbHRlcm5hdGl2ZVRleHRD
b250cm9sbGVyLT5yZXNwb25kVG9VbmFwcGxpZWRFZGl0aW5nKGNtZC5nZXQoKSk7CiAgICAgCiAg
ICAgbV9sYXN0RWRpdENvbW1hbmQgPSAwOwogICAgIGlmIChjbGllbnQoKSkKQEAgLTg0NCw3ICs4
NDQsNyBAQCBFZGl0b3I6OkVkaXRvcihGcmFtZSogZnJhbWUpCiAgICAgLCBtX3Nob3VsZFN0eWxl
V2l0aENTUyhmYWxzZSkKICAgICAsIG1fa2lsbFJpbmcoYWRvcHRQdHIobmV3IEtpbGxSaW5nKSkK
ICAgICAsIG1fc3BlbGxDaGVja2VyKGFkb3B0UHRyKG5ldyBTcGVsbENoZWNrZXIoZnJhbWUpKSkK
LSAgICAsIG1fc3BlbGxpbmdDb3JyZWN0b3IoYWRvcHRQdHIobmV3IFNwZWxsaW5nQ29ycmVjdGlv
bkNvbnRyb2xsZXIoZnJhbWUpKSkKKyAgICAsIG1fYWx0ZXJuYXRpdmVUZXh0Q29udHJvbGxlcihh
ZG9wdFB0cihuZXcgQWx0ZXJuYXRpdmVUZXh0Q29udHJvbGxlcihmcmFtZSkpKQogICAgICwgbV9h
cmVNYXJrZWRUZXh0TWF0Y2hlc0hpZ2hsaWdodGVkKGZhbHNlKQogICAgICwgbV9kZWZhdWx0UGFy
YWdyYXBoU2VwYXJhdG9yKEVkaXRvclBhcmFncmFwaFNlcGFyYXRvcklzRGl2KQogewpAQCAtODk1
LDcgKzg5NSw3IEBAIGJvb2wgRWRpdG9yOjppbnNlcnRUZXh0V2l0aG91dFNlbmRpbmdUZXgKICAg
ICBpZiAodGV4dC5sZW5ndGgoKSA9PSAxICYmIGlzUHVuY3QodGV4dFswXSkgJiYgIWlzQW1iaWd1
b3VzQm91bmRhcnlDaGFyYWN0ZXIodGV4dFswXSkpCiAgICAgICAgIHNob3VsZENvbnNpZGVyQXBw
bHlpbmdBdXRvY29ycmVjdGlvbiA9IHRydWU7CiAKLSAgICBib29sIGF1dG9jb3JyZWN0aW9uV2Fz
QXBwbGllZCA9IHNob3VsZENvbnNpZGVyQXBwbHlpbmdBdXRvY29ycmVjdGlvbiAmJiBtX3NwZWxs
aW5nQ29ycmVjdG9yLT5hcHBseUF1dG9jb3JyZWN0aW9uQmVmb3JlVHlwaW5nSWZBcHByb3ByaWF0
ZSgpOworICAgIGJvb2wgYXV0b2NvcnJlY3Rpb25XYXNBcHBsaWVkID0gc2hvdWxkQ29uc2lkZXJB
cHBseWluZ0F1dG9jb3JyZWN0aW9uICYmIG1fYWx0ZXJuYXRpdmVUZXh0Q29udHJvbGxlci0+YXBw
bHlBdXRvY29ycmVjdGlvbkJlZm9yZVR5cGluZ0lmQXBwcm9wcmlhdGUoKTsKIAogICAgIC8vIEdl
dCB0aGUgc2VsZWN0aW9uIHRvIHVzZSBmb3IgdGhlIGV2ZW50IHRoYXQgdHJpZ2dlcmVkIHRoaXMg
aW5zZXJ0VGV4dC4KICAgICAvLyBJZiB0aGUgZXZlbnQgaGFuZGxlciBjaGFuZ2VkIHRoZSBzZWxl
Y3Rpb24sIHdlIG1heSB3YW50IHRvIHVzZSBhIGRpZmZlcmVudCBzZWxlY3Rpb24KQEAgLTkzMSw3
ICs5MzEsNyBAQCBib29sIEVkaXRvcjo6aW5zZXJ0TGluZUJyZWFrKCkKICAgICBpZiAoIXNob3Vs
ZEluc2VydFRleHQoIlxuIiwgbV9mcmFtZS0+c2VsZWN0aW9uKCktPnRvTm9ybWFsaXplZFJhbmdl
KCkuZ2V0KCksIEVkaXRvckluc2VydEFjdGlvblR5cGVkKSkKICAgICAgICAgcmV0dXJuIHRydWU7
CiAKLSAgICBib29sIGF1dG9jb3JyZWN0aW9uSXNBcHBsaWVkID0gbV9zcGVsbGluZ0NvcnJlY3Rv
ci0+YXBwbHlBdXRvY29ycmVjdGlvbkJlZm9yZVR5cGluZ0lmQXBwcm9wcmlhdGUoKTsKKyAgICBi
b29sIGF1dG9jb3JyZWN0aW9uSXNBcHBsaWVkID0gbV9hbHRlcm5hdGl2ZVRleHRDb250cm9sbGVy
LT5hcHBseUF1dG9jb3JyZWN0aW9uQmVmb3JlVHlwaW5nSWZBcHByb3ByaWF0ZSgpOwogICAgIFR5
cGluZ0NvbW1hbmQ6Omluc2VydExpbmVCcmVhayhtX2ZyYW1lLT5kb2N1bWVudCgpLCBhdXRvY29y
cmVjdGlvbklzQXBwbGllZCA/IFR5cGluZ0NvbW1hbmQ6OlJldGFpbkF1dG9jb3JyZWN0aW9uSW5k
aWNhdG9yIDogMCk7CiAgICAgcmV2ZWFsU2VsZWN0aW9uQWZ0ZXJFZGl0aW5nT3BlcmF0aW9uKCk7
CiAKQEAgLTk0OSw3ICs5NDksNyBAQCBib29sIEVkaXRvcjo6aW5zZXJ0UGFyYWdyYXBoU2VwYXJh
dG9yKCkKICAgICBpZiAoIXNob3VsZEluc2VydFRleHQoIlxuIiwgbV9mcmFtZS0+c2VsZWN0aW9u
KCktPnRvTm9ybWFsaXplZFJhbmdlKCkuZ2V0KCksIEVkaXRvckluc2VydEFjdGlvblR5cGVkKSkK
ICAgICAgICAgcmV0dXJuIHRydWU7CiAKLSAgICBib29sIGF1dG9jb3JyZWN0aW9uSXNBcHBsaWVk
ID0gbV9zcGVsbGluZ0NvcnJlY3Rvci0+YXBwbHlBdXRvY29ycmVjdGlvbkJlZm9yZVR5cGluZ0lm
QXBwcm9wcmlhdGUoKTsKKyAgICBib29sIGF1dG9jb3JyZWN0aW9uSXNBcHBsaWVkID0gbV9hbHRl
cm5hdGl2ZVRleHRDb250cm9sbGVyLT5hcHBseUF1dG9jb3JyZWN0aW9uQmVmb3JlVHlwaW5nSWZB
cHByb3ByaWF0ZSgpOwogICAgIFR5cGluZ0NvbW1hbmQ6Omluc2VydFBhcmFncmFwaFNlcGFyYXRv
cihtX2ZyYW1lLT5kb2N1bWVudCgpLCBhdXRvY29ycmVjdGlvbklzQXBwbGllZCA/IFR5cGluZ0Nv
bW1hbmQ6OlJldGFpbkF1dG9jb3JyZWN0aW9uSW5kaWNhdG9yIDogMCk7CiAgICAgcmV2ZWFsU2Vs
ZWN0aW9uQWZ0ZXJFZGl0aW5nT3BlcmF0aW9uKCk7CiAKQEAgLTExNzMsNyArMTE3Myw3IEBAIHZv
aWQgRWRpdG9yOjp0b2dnbGVBdXRvbWF0aWNUZXh0UmVwbGFjZW0KIAogYm9vbCBFZGl0b3I6Omlz
QXV0b21hdGljU3BlbGxpbmdDb3JyZWN0aW9uRW5hYmxlZCgpCiB7Ci0gICAgcmV0dXJuIG1fc3Bl
bGxpbmdDb3JyZWN0b3ItPmlzQXV0b21hdGljU3BlbGxpbmdDb3JyZWN0aW9uRW5hYmxlZCgpOwor
ICAgIHJldHVybiBtX2FsdGVybmF0aXZlVGV4dENvbnRyb2xsZXItPmlzQXV0b21hdGljU3BlbGxp
bmdDb3JyZWN0aW9uRW5hYmxlZCgpOwogfQogCiB2b2lkIEVkaXRvcjo6dG9nZ2xlQXV0b21hdGlj
U3BlbGxpbmdDb3JyZWN0aW9uKCkKQEAgLTE3NzIsNyArMTc3Miw3IEBAIHZvaWQgRWRpdG9yOjpt
YXJrTWlzc3BlbGxpbmdzQWZ0ZXJUeXBpbmcKICNlbmRpZgogCiAgICAgaWYgKHVuaWZpZWRUZXh0
Q2hlY2tlckVuYWJsZWQoKSkgewotICAgICAgICBtX3NwZWxsaW5nQ29ycmVjdG9yLT5hcHBseVBl
bmRpbmdDb3JyZWN0aW9uKHNlbGVjdGlvbkFmdGVyVHlwaW5nKTsKKyAgICAgICAgbV9hbHRlcm5h
dGl2ZVRleHRDb250cm9sbGVyLT5hcHBseVBlbmRpbmdDb3JyZWN0aW9uKHNlbGVjdGlvbkFmdGVy
VHlwaW5nKTsKIAogICAgICAgICBUZXh0Q2hlY2tpbmdUeXBlTWFzayB0ZXh0Q2hlY2tpbmdPcHRp
b25zID0gMDsKIApAQCAtMTkxMiw3ICsxOTEyLDcgQEAgdm9pZCBFZGl0b3I6Om1hcmtBbGxNaXNz
cGVsbGluZ3NBbmRCYWRHcgogICAgIEFTU0VSVCh1bmlmaWVkVGV4dENoZWNrZXJFbmFibGVkKCkp
OwogCiAgICAgLy8gVGhlcmUgc2hvdWxkbid0IGJlIHBlbmRpbmcgYXV0b2NvcnJlY3Rpb24gYXQg
dGhpcyBtb21lbnQuCi0gICAgQVNTRVJUKCFtX3NwZWxsaW5nQ29ycmVjdG9yLT5oYXNQZW5kaW5n
Q29ycmVjdGlvbigpKTsKKyAgICBBU1NFUlQoIW1fYWx0ZXJuYXRpdmVUZXh0Q29udHJvbGxlci0+
aGFzUGVuZGluZ0NvcnJlY3Rpb24oKSk7CiAKICAgICBib29sIHNob3VsZE1hcmtHcmFtbWFyID0g
dGV4dENoZWNraW5nT3B0aW9ucyAmIFRleHRDaGVja2luZ1R5cGVHcmFtbWFyOwogICAgIGJvb2wg
c2hvdWxkU2hvd0NvcnJlY3Rpb25QYW5lbCA9IHRleHRDaGVja2luZ09wdGlvbnMgJiBUZXh0Q2hl
Y2tpbmdUeXBlU2hvd0NvcnJlY3Rpb25QYW5lbDsKQEAgLTIwMDUsNyArMjAwNSw3IEBAIHZvaWQg
RWRpdG9yOjptYXJrQW5kUmVwbGFjZUZvcihQYXNzUmVmUHQKICAgICAgICAgaWYgKHNob3VsZE1h
cmtTcGVsbGluZyAmJiByZXN1bHQtPnR5cGUgPT0gVGV4dENoZWNraW5nVHlwZVNwZWxsaW5nICYm
IHJlc3VsdExvY2F0aW9uID49IHBhcmFncmFwaC5jaGVja2luZ1N0YXJ0KCkgJiYgcmVzdWx0TG9j
YXRpb24gKyByZXN1bHRMZW5ndGggPD0gc3BlbGxpbmdSYW5nZUVuZE9mZnNldCAmJiAhcmVzdWx0
RW5kc0F0QW1iaWd1b3VzQm91bmRhcnkpIHsKICAgICAgICAgICAgIEFTU0VSVChyZXN1bHRMZW5n
dGggPiAwICYmIHJlc3VsdExvY2F0aW9uID49IDApOwogICAgICAgICAgICAgUmVmUHRyPFJhbmdl
PiBtaXNzcGVsbGluZ1JhbmdlID0gcGFyYWdyYXBoLnN1YnJhbmdlKHJlc3VsdExvY2F0aW9uLCBy
ZXN1bHRMZW5ndGgpOwotICAgICAgICAgICAgaWYgKCFtX3NwZWxsaW5nQ29ycmVjdG9yLT5pc1Nw
ZWxsaW5nTWFya2VyQWxsb3dlZChtaXNzcGVsbGluZ1JhbmdlKSkKKyAgICAgICAgICAgIGlmICgh
bV9hbHRlcm5hdGl2ZVRleHRDb250cm9sbGVyLT5pc1NwZWxsaW5nTWFya2VyQWxsb3dlZChtaXNz
cGVsbGluZ1JhbmdlKSkKICAgICAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgICAgIG1p
c3NwZWxsaW5nUmFuZ2UtPnN0YXJ0Q29udGFpbmVyKCktPmRvY3VtZW50KCktPm1hcmtlcnMoKS0+
YWRkTWFya2VyKG1pc3NwZWxsaW5nUmFuZ2UuZ2V0KCksIERvY3VtZW50TWFya2VyOjpTcGVsbGlu
ZywgcmVzdWx0LT5yZXBsYWNlbWVudCk7CiAgICAgICAgIH0gZWxzZSBpZiAoc2hvdWxkTWFya0dy
YW1tYXIgJiYgcmVzdWx0LT50eXBlID09IFRleHRDaGVja2luZ1R5cGVHcmFtbWFyICYmIHBhcmFn
cmFwaC5jaGVja2luZ1JhbmdlQ292ZXJzKHJlc3VsdExvY2F0aW9uLCByZXN1bHRMZW5ndGgpKSB7
CkBAIC0yMDQ4LDcgKzIwNDgsNyBAQCB2b2lkIEVkaXRvcjo6bWFya0FuZFJlcGxhY2VGb3IoUGFz
c1JlZlB0CiAgICAgICAgICAgICAgICAgY29udGludWU7CiAKICAgICAgICAgICAgIFN0cmluZyBy
ZXBsYWNlZFN0cmluZyA9IHBsYWluVGV4dChyYW5nZVRvUmVwbGFjZS5nZXQoKSk7Ci0gICAgICAg
ICAgICBib29sIGV4aXN0aW5nTWFya2Vyc1Blcm1pdFJlcGxhY2VtZW50ID0gbV9zcGVsbGluZ0Nv
cnJlY3Rvci0+cHJvY2Vzc01hcmtlcnNPblRleHRUb0JlUmVwbGFjZWRCeVJlc3VsdChyZXN1bHQs
IHJhbmdlVG9SZXBsYWNlLmdldCgpLCByZXBsYWNlZFN0cmluZyk7CisgICAgICAgICAgICBib29s
IGV4aXN0aW5nTWFya2Vyc1Blcm1pdFJlcGxhY2VtZW50ID0gbV9hbHRlcm5hdGl2ZVRleHRDb250
cm9sbGVyLT5wcm9jZXNzTWFya2Vyc09uVGV4dFRvQmVSZXBsYWNlZEJ5UmVzdWx0KHJlc3VsdCwg
cmFuZ2VUb1JlcGxhY2UuZ2V0KCksIHJlcGxhY2VkU3RyaW5nKTsKICAgICAgICAgICAgIGlmICgh
ZXhpc3RpbmdNYXJrZXJzUGVybWl0UmVwbGFjZW1lbnQpCiAgICAgICAgICAgICAgICAgY29udGlu
dWU7CiAKQEAgLTIwNTksNyArMjA1OSw3IEBAIHZvaWQgRWRpdG9yOjptYXJrQW5kUmVwbGFjZUZv
cihQYXNzUmVmUHQKICAgICAgICAgICAgICAgICAvLyBzaG91bGRTaG93Q29ycmVjdGlvblBhbmVs
IGNhbiBiZSB0cnVlIG9ubHkgd2hlbiB0aGUgcGFuZWwgaXMgYXZhaWxhYmxlLgogICAgICAgICAg
ICAgICAgIGlmIChyZXN1bHRMb2NhdGlvbiArIHJlc3VsdExlbmd0aCA9PSBzcGVsbGluZ1Jhbmdl
RW5kT2Zmc2V0KSB7CiAgICAgICAgICAgICAgICAgICAgIC8vIFdlIG9ubHkgc2hvdyB0aGUgY29y
cmVjdGlvbiBwYW5lbCBvbiB0aGUgbGFzdCB3b3JkLgotICAgICAgICAgICAgICAgICAgICBtX3Nw
ZWxsaW5nQ29ycmVjdG9yLT5zaG93KHJhbmdlVG9SZXBsYWNlLCByZXN1bHQtPnJlcGxhY2VtZW50
KTsKKyAgICAgICAgICAgICAgICAgICAgbV9hbHRlcm5hdGl2ZVRleHRDb250cm9sbGVyLT5zaG93
KHJhbmdlVG9SZXBsYWNlLCByZXN1bHQtPnJlcGxhY2VtZW50KTsKICAgICAgICAgICAgICAgICAg
ICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgIC8vIElmIHRoaXMg
ZnVuY3Rpb24gaXMgY2FsbGVkIGZvciBzaG93aW5nIGNvcnJlY3Rpb24gcGFuZWwsIHdlIGlnbm9y
ZSBvdGhlciBjb3JyZWN0aW9uIG9yIHJlcGxhY2VtZW50LgpAQCAtMjA5NSw3ICsyMDk1LDcgQEAg
dm9pZCBFZGl0b3I6Om1hcmtBbmRSZXBsYWNlRm9yKFBhc3NSZWZQdAogCiAgICAgICAgICAgICAg
ICAgLy8gQWRkIGEgbWFya2VyIHNvIHRoYXQgY29ycmVjdGlvbnMgY2FuIGVhc2lseSBiZSB1bmRv
bmUgYW5kIHdvbid0IGJlIHJlLWNvcnJlY3RlZC4KICAgICAgICAgICAgICAgICBpZiAocmVzdWx0
LT50eXBlID09IFRleHRDaGVja2luZ1R5cGVDb3JyZWN0aW9uKQotICAgICAgICAgICAgICAgICAg
ICBtX3NwZWxsaW5nQ29ycmVjdG9yLT5tYXJrQ29ycmVjdGlvbihwYXJhZ3JhcGguc3VicmFuZ2Uo
cmVzdWx0TG9jYXRpb24sIHJlcGxhY2VtZW50TGVuZ3RoKSwgcmVwbGFjZWRTdHJpbmcpOworICAg
ICAgICAgICAgICAgICAgICBtX2FsdGVybmF0aXZlVGV4dENvbnRyb2xsZXItPm1hcmtDb3JyZWN0
aW9uKHBhcmFncmFwaC5zdWJyYW5nZShyZXN1bHRMb2NhdGlvbiwgcmVwbGFjZW1lbnRMZW5ndGgp
LCByZXBsYWNlZFN0cmluZyk7CiAgICAgICAgICAgICB9CiAgICAgICAgIH0KICAgICB9CkBAIC0y
MTI4LDEyICsyMTI4LDEyIEBAIHZvaWQgRWRpdG9yOjpjaGFuZ2VCYWNrVG9SZXBsYWNlZFN0cmlu
ZygKICAgICBpZiAoIXNob3VsZEluc2VydFRleHQocmVwbGFjZWRTdHJpbmcsIHNlbGVjdGlvbi5n
ZXQoKSwgRWRpdG9ySW5zZXJ0QWN0aW9uUGFzdGVkKSkKICAgICAgICAgcmV0dXJuOwogICAgIAot
ICAgIG1fc3BlbGxpbmdDb3JyZWN0b3ItPnJlY29yZEF1dG9jb3JyZWN0aW9uUmVzcG9uc2VSZXZl
cnNlZChyZXBsYWNlZFN0cmluZywgc2VsZWN0aW9uKTsKKyAgICBtX2FsdGVybmF0aXZlVGV4dENv
bnRyb2xsZXItPnJlY29yZEF1dG9jb3JyZWN0aW9uUmVzcG9uc2VSZXZlcnNlZChyZXBsYWNlZFN0
cmluZywgc2VsZWN0aW9uKTsKICAgICBUZXh0Q2hlY2tpbmdQYXJhZ3JhcGggcGFyYWdyYXBoKHNl
bGVjdGlvbik7CiAgICAgcmVwbGFjZVNlbGVjdGlvbldpdGhUZXh0KHJlcGxhY2VkU3RyaW5nLCBm
YWxzZSwgZmFsc2UpOwogICAgIFJlZlB0cjxSYW5nZT4gY2hhbmdlZFJhbmdlID0gcGFyYWdyYXBo
LnN1YnJhbmdlKHBhcmFncmFwaC5jaGVja2luZ1N0YXJ0KCksIHJlcGxhY2VkU3RyaW5nLmxlbmd0
aCgpKTsKICAgICBjaGFuZ2VkUmFuZ2UtPnN0YXJ0Q29udGFpbmVyKCktPmRvY3VtZW50KCktPm1h
cmtlcnMoKS0+YWRkTWFya2VyKGNoYW5nZWRSYW5nZS5nZXQoKSwgRG9jdW1lbnRNYXJrZXI6OlJl
cGxhY2VtZW50LCBTdHJpbmcoKSk7Ci0gICAgbV9zcGVsbGluZ0NvcnJlY3Rvci0+bWFya1JldmVy
c2VkKGNoYW5nZWRSYW5nZS5nZXQoKSk7CisgICAgbV9hbHRlcm5hdGl2ZVRleHRDb250cm9sbGVy
LT5tYXJrUmV2ZXJzZWQoY2hhbmdlZFJhbmdlLmdldCgpKTsKIH0KIAogCkBAIC0yMTU3LDEyICsy
MTU3LDEyIEBAIHZvaWQgRWRpdG9yOjptYXJrTWlzc3BlbGxpbmdzQW5kQmFkR3JhbW0KIAogdm9p
ZCBFZGl0b3I6OnVuYXBwbGllZFNwZWxsQ29ycmVjdGlvbihjb25zdCBWaXNpYmxlU2VsZWN0aW9u
JiBzZWxlY3Rpb25PZkNvcnJlY3RlZCwgY29uc3QgU3RyaW5nJiBjb3JyZWN0ZWQsIGNvbnN0IFN0
cmluZyYgY29ycmVjdGlvbikKIHsKLSAgICBtX3NwZWxsaW5nQ29ycmVjdG9yLT5yZXNwb25kVG9V
bmFwcGxpZWRTcGVsbENvcnJlY3Rpb24oc2VsZWN0aW9uT2ZDb3JyZWN0ZWQsIGNvcnJlY3RlZCwg
Y29ycmVjdGlvbik7CisgICAgbV9hbHRlcm5hdGl2ZVRleHRDb250cm9sbGVyLT5yZXNwb25kVG9V
bmFwcGxpZWRTcGVsbENvcnJlY3Rpb24oc2VsZWN0aW9uT2ZDb3JyZWN0ZWQsIGNvcnJlY3RlZCwg
Y29ycmVjdGlvbik7CiB9CiAKIHZvaWQgRWRpdG9yOjp1cGRhdGVNYXJrZXJzRm9yV29yZHNBZmZl
Y3RlZEJ5RWRpdGluZyhib29sIGRvTm90UmVtb3ZlSWZTZWxlY3Rpb25BdFdvcmRCb3VuZGFyeSkK
IHsKLSAgICBpZiAoIW1fc3BlbGxpbmdDb3JyZWN0b3ItPnNob3VsZFJlbW92ZU1hcmtlcnNVcG9u
RWRpdGluZygpKQorICAgIGlmICghbV9hbHRlcm5hdGl2ZVRleHRDb250cm9sbGVyLT5zaG91bGRS
ZW1vdmVNYXJrZXJzVXBvbkVkaXRpbmcoKSkKICAgICAgICAgcmV0dXJuOwogCiAgICAgLy8gV2Ug
d2FudCB0byByZW1vdmUgdGhlIG1hcmtlcnMgZnJvbSBhIHdvcmQgaWYgYW4gZWRpdGluZyBjb21t
YW5kIHdpbGwgY2hhbmdlIHRoZSB3b3JkLiBUaGlzIGNhbiBoYXBwZW4gaW4gb25lIG9mCkBAIC0y
MjMyLDcgKzIyMzIsNyBAQCB2b2lkIEVkaXRvcjo6dXBkYXRlTWFya2Vyc0ZvcldvcmRzQWZmZWN0
CiAKIHZvaWQgRWRpdG9yOjpkZWxldGVkQXV0b2NvcnJlY3Rpb25BdFBvc2l0aW9uKGNvbnN0IFBv
c2l0aW9uJiBwb3NpdGlvbiwgY29uc3QgU3RyaW5nJiBvcmlnaW5hbFN0cmluZykKIHsKLSAgICBt
X3NwZWxsaW5nQ29ycmVjdG9yLT5kZWxldGVkQXV0b2NvcnJlY3Rpb25BdFBvc2l0aW9uKHBvc2l0
aW9uLCBvcmlnaW5hbFN0cmluZyk7CisgICAgbV9hbHRlcm5hdGl2ZVRleHRDb250cm9sbGVyLT5k
ZWxldGVkQXV0b2NvcnJlY3Rpb25BdFBvc2l0aW9uKHBvc2l0aW9uLCBvcmlnaW5hbFN0cmluZyk7
CiB9CiAKIFBhc3NSZWZQdHI8UmFuZ2U+IEVkaXRvcjo6cmFuZ2VGb3JQb2ludChjb25zdCBJbnRQ
b2ludCYgd2luZG93UG9pbnQpCkBAIC0yMzU3LDIwICsyMzU3LDIwIEBAIHZvaWQgRWRpdG9yOjph
ZGRUb0tpbGxSaW5nKFJhbmdlKiByYW5nZSwKICAgICBtX3Nob3VsZFN0YXJ0TmV3S2lsbFJpbmdT
ZXF1ZW5jZSA9IGZhbHNlOwogfQogCi12b2lkIEVkaXRvcjo6c3RhcnRDb3JyZWN0aW9uUGFuZWxU
aW1lcigpCit2b2lkIEVkaXRvcjo6c3RhcnRBbHRlcm5hdGl2ZVRleHRVSVRpbWVyKCkKIHsKLSAg
ICBtX3NwZWxsaW5nQ29ycmVjdG9yLT5zdGFydENvcnJlY3Rpb25QYW5lbFRpbWVyKENvcnJlY3Rp
b25QYW5lbEluZm86OlBhbmVsVHlwZUNvcnJlY3Rpb24pOworICAgIG1fYWx0ZXJuYXRpdmVUZXh0
Q29udHJvbGxlci0+c3RhcnRBbHRlcm5hdGl2ZVRleHRVSVRpbWVyKEFsdGVybmF0aXZlVGV4dFR5
cGVDb3JyZWN0aW9uKTsKIH0KIAotdm9pZCBFZGl0b3I6OmhhbmRsZUNvcnJlY3Rpb25QYW5lbFJl
c3VsdChjb25zdCBTdHJpbmcmIGNvcnJlY3Rpb24pCit2b2lkIEVkaXRvcjo6aGFuZGxlQWx0ZXJu
YXRpdmVUZXh0VUlSZXN1bHQoY29uc3QgU3RyaW5nJiBjb3JyZWN0aW9uKQogewotICAgIG1fc3Bl
bGxpbmdDb3JyZWN0b3ItPmhhbmRsZUNvcnJlY3Rpb25QYW5lbFJlc3VsdChjb3JyZWN0aW9uKTsK
KyAgICBtX2FsdGVybmF0aXZlVGV4dENvbnRyb2xsZXItPmhhbmRsZUFsdGVybmF0aXZlVGV4dFVJ
UmVzdWx0KGNvcnJlY3Rpb24pOwogfQogCiAKIHZvaWQgRWRpdG9yOjpkaXNtaXNzQ29ycmVjdGlv
blBhbmVsQXNJZ25vcmVkKCkKIHsKLSAgICBtX3NwZWxsaW5nQ29ycmVjdG9yLT5kaXNtaXNzKFJl
YXNvbkZvckRpc21pc3NpbmdDb3JyZWN0aW9uUGFuZWxJZ25vcmVkKTsKKyAgICBtX2FsdGVybmF0
aXZlVGV4dENvbnRyb2xsZXItPmRpc21pc3MoUmVhc29uRm9yRGlzbWlzc2luZ0FsdGVybmF0aXZl
VGV4dElnbm9yZWQpOwogfQogCiBib29sIEVkaXRvcjo6aW5zaWRlVmlzaWJsZUFyZWEoY29uc3Qg
TGF5b3V0UG9pbnQmIHBvaW50KSBjb25zdApAQCAtMjg4Niw3ICsyODg2LDcgQEAgdm9pZCBFZGl0
b3I6OnNldE1hcmtlZFRleHRNYXRjaGVzQXJlSGlnaAogCiB2b2lkIEVkaXRvcjo6cmVzcG9uZFRv
Q2hhbmdlZFNlbGVjdGlvbihjb25zdCBWaXNpYmxlU2VsZWN0aW9uJiBvbGRTZWxlY3Rpb24sIEZy
YW1lU2VsZWN0aW9uOjpTZXRTZWxlY3Rpb25PcHRpb25zIG9wdGlvbnMpCiB7Ci0gICAgbV9zcGVs
bGluZ0NvcnJlY3Rvci0+c3RvcFBlbmRpbmdDb3JyZWN0aW9uKG9sZFNlbGVjdGlvbik7CisgICAg
bV9hbHRlcm5hdGl2ZVRleHRDb250cm9sbGVyLT5zdG9wUGVuZGluZ0NvcnJlY3Rpb24ob2xkU2Vs
ZWN0aW9uKTsKIAogICAgIGJvb2wgY2xvc2VUeXBpbmcgPSBvcHRpb25zICYgRnJhbWVTZWxlY3Rp
b246OkNsb3NlVHlwaW5nOwogICAgIGJvb2wgaXNDb250aW51b3VzU3BlbGxDaGVja2luZ0VuYWJs
ZWQgPSB0aGlzLT5pc0NvbnRpbnVvdXNTcGVsbENoZWNraW5nRW5hYmxlZCgpOwpJbmRleDogU291
cmNlL1dlYkNvcmUvZWRpdGluZy9FZGl0b3IuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29y
ZS9lZGl0aW5nL0VkaXRvci5oCShyZXZpc2lvbiAxMTI5NjEpCisrKyBTb3VyY2UvV2ViQ29yZS9l
ZGl0aW5nL0VkaXRvci5oCSh3b3JraW5nIGNvcHkpCkBAIC02MSw3ICs2MSw3IEBAIGNsYXNzIFBh
c3RlYm9hcmQ7CiBjbGFzcyBTaW1wbGVGb250RGF0YTsKIGNsYXNzIFNwZWxsQ2hlY2tlcjsKIGNs
YXNzIFNwZWxsQ2hlY2tSZXF1ZXN0OwotY2xhc3MgU3BlbGxpbmdDb3JyZWN0aW9uQ29udHJvbGxl
cjsKK2NsYXNzIEFsdGVybmF0aXZlVGV4dENvbnRyb2xsZXI7CiBjbGFzcyBTdHlsZVByb3BlcnR5
U2V0OwogY2xhc3MgVGV4dDsKIGNsYXNzIFRleHRDaGVja2VyQ2xpZW50OwpAQCAtMzE5LDkgKzMx
OSw5IEBAIHB1YmxpYzoKIAogICAgIHZvaWQgYWRkVG9LaWxsUmluZyhSYW5nZSosIGJvb2wgcHJl
cGVuZCk7CiAKLSAgICB2b2lkIHN0YXJ0Q29ycmVjdGlvblBhbmVsVGltZXIoKTsKKyAgICB2b2lk
IHN0YXJ0QWx0ZXJuYXRpdmVUZXh0VUlUaW1lcigpOwogICAgIC8vIElmIHVzZXIgY29uZmlybWVk
IGEgY29ycmVjdGlvbiBpbiB0aGUgY29ycmVjdGlvbiBwYW5lbCwgY29ycmVjdGlvbiBoYXMgbm9u
LXplcm8gbGVuZ3RoLCBvdGhlcndpc2UgaXQgbWVhbnMgdGhhdCB1c2VyIGhhcyBkaXNtaXNzZWQg
dGhlIHBhbmVsLgotICAgIHZvaWQgaGFuZGxlQ29ycmVjdGlvblBhbmVsUmVzdWx0KGNvbnN0IFN0
cmluZyYgY29ycmVjdGlvbik7CisgICAgdm9pZCBoYW5kbGVBbHRlcm5hdGl2ZVRleHRVSVJlc3Vs
dChjb25zdCBTdHJpbmcmIGNvcnJlY3Rpb24pOwogICAgIHZvaWQgZGlzbWlzc0NvcnJlY3Rpb25Q
YW5lbEFzSWdub3JlZCgpOwogCiAgICAgdm9pZCBwYXN0ZUFzRnJhZ21lbnQoUGFzc1JlZlB0cjxE
b2N1bWVudEZyYWdtZW50PiwgYm9vbCBzbWFydFJlcGxhY2UsIGJvb2wgbWF0Y2hTdHlsZSk7CkBA
IC00MDEsNyArNDAxLDcgQEAgcHJpdmF0ZToKICAgICBib29sIG1fc2hvdWxkU3R5bGVXaXRoQ1NT
OwogICAgIE93blB0cjxLaWxsUmluZz4gbV9raWxsUmluZzsKICAgICBPd25QdHI8U3BlbGxDaGVj
a2VyPiBtX3NwZWxsQ2hlY2tlcjsKLSAgICBPd25QdHI8U3BlbGxpbmdDb3JyZWN0aW9uQ29udHJv
bGxlcj4gbV9zcGVsbGluZ0NvcnJlY3RvcjsKKyAgICBPd25QdHI8QWx0ZXJuYXRpdmVUZXh0Q29u
dHJvbGxlcj4gbV9hbHRlcm5hdGl2ZVRleHRDb250cm9sbGVyOwogICAgIFZpc2libGVTZWxlY3Rp
b24gbV9tYXJrOwogICAgIGJvb2wgbV9hcmVNYXJrZWRUZXh0TWF0Y2hlc0hpZ2hsaWdodGVkOwog
ICAgIEVkaXRvclBhcmFncmFwaFNlcGFyYXRvciBtX2RlZmF1bHRQYXJhZ3JhcGhTZXBhcmF0b3I7
CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9lZGl0aW5nL1NwZWxsaW5nQ29ycmVjdGlvbkNvbW1hbmQu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2VkaXRpbmcvU3BlbGxpbmdDb3JyZWN0
aW9uQ29tbWFuZC5jcHAJKHJldmlzaW9uIDExMjk2MSkKKysrIFNvdXJjZS9XZWJDb3JlL2VkaXRp
bmcvU3BlbGxpbmdDb3JyZWN0aW9uQ29tbWFuZC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI2LDEy
ICsyNiwxMiBAQAogI2luY2x1ZGUgImNvbmZpZy5oIgogI2luY2x1ZGUgIlNwZWxsaW5nQ29ycmVj
dGlvbkNvbW1hbmQuaCIKIAorI2luY2x1ZGUgIkFsdGVybmF0aXZlVGV4dENvbnRyb2xsZXIuaCIK
ICNpbmNsdWRlICJEb2N1bWVudC5oIgogI2luY2x1ZGUgIkRvY3VtZW50RnJhZ21lbnQuaCIKICNp
bmNsdWRlICJGcmFtZS5oIgogI2luY2x1ZGUgIlJlcGxhY2VTZWxlY3Rpb25Db21tYW5kLmgiCiAj
aW5jbHVkZSAiU2V0U2VsZWN0aW9uQ29tbWFuZC5oIgotI2luY2x1ZGUgIlNwZWxsaW5nQ29ycmVj
dGlvbkNvbnRyb2xsZXIuaCIKICNpbmNsdWRlICJUZXh0SXRlcmF0b3IuaCIKICNpbmNsdWRlICJt
YXJrdXAuaCIKIApJbmRleDogU291cmNlL1dlYkNvcmUvZWRpdGluZy9TcGVsbGluZ0NvcnJlY3Rp
b25Db250cm9sbGVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9lZGl0aW5nL1Nw
ZWxsaW5nQ29ycmVjdGlvbkNvbnRyb2xsZXIuY3BwCShyZXZpc2lvbiAxMTI5NjEpCisrKyBTb3Vy
Y2UvV2ViQ29yZS9lZGl0aW5nL1NwZWxsaW5nQ29ycmVjdGlvbkNvbnRyb2xsZXIuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC0xLDU2NSArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDA2LCAy
MDA3LCAyMDA4IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAo
QykgMjAwOCBOb2tpYSBDb3Jwb3JhdGlvbiBhbmQvb3IgaXRzIHN1YnNpZGlhcnkoLWllcykKLSAq
Ci0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3
aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0
aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJp
YnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0g
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXBy
b2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1l
bnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1
dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIENPTVBVVEVS
LCBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCi0gKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElF
UywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQotICogSU1QTElFRCBXQVJSQU5U
SUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQ
VVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgQ09NUFVURVIs
IElOQy4gT1IKLSAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElS
RUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAotICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFM
IERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogUFJPQ1VSRU1FTlQg
T0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCi0g
KiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBP
TiBBTlkgVEhFT1JZCi0gKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklD
VCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJ
U0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotICogT0YgVEhJUyBTT0ZUV0FS
RSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCi0g
Ki8KLQotI2luY2x1ZGUgImNvbmZpZy5oIgotI2luY2x1ZGUgIlNwZWxsaW5nQ29ycmVjdGlvbkNv
bnRyb2xsZXIuaCIKLQotI2luY2x1ZGUgIkRvY3VtZW50TWFya2VyQ29udHJvbGxlci5oIgotI2lu
Y2x1ZGUgIkVkaXRDb21tYW5kLmgiCi0jaW5jbHVkZSAiRWRpdG9yQ2xpZW50LmgiCi0jaW5jbHVk
ZSAiRmxvYXRRdWFkLmgiCi0jaW5jbHVkZSAiRnJhbWUuaCIKLSNpbmNsdWRlICJGcmFtZVZpZXcu
aCIKLSNpbmNsdWRlICJQYWdlLmgiCi0jaW5jbHVkZSAiU3BlbGxpbmdDb3JyZWN0aW9uQ29tbWFu
ZC5oIgotI2luY2x1ZGUgIlRleHRDaGVja2VyQ2xpZW50LmgiCi0jaW5jbHVkZSAiVGV4dENoZWNr
aW5nSGVscGVyLmgiCi0jaW5jbHVkZSAiVGV4dEl0ZXJhdG9yLmgiCi0jaW5jbHVkZSAiVmlzaWJs
ZVNlbGVjdGlvbi5oIgotI2luY2x1ZGUgImh0bWxlZGl0aW5nLmgiCi0jaW5jbHVkZSAibWFya3Vw
LmgiCi0jaW5jbHVkZSAidmlzaWJsZV91bml0cy5oIgotCi1uYW1lc3BhY2UgV2ViQ29yZSB7Ci0K
LXVzaW5nIG5hbWVzcGFjZSBzdGQ7Ci11c2luZyBuYW1lc3BhY2UgV1RGOwotCi0jaWYgVVNFKEFV
VE9DT1JSRUNUSU9OX1BBTkVMKQotCi1zdGF0aWMgY29uc3QgVmVjdG9yPERvY3VtZW50TWFya2Vy
OjpNYXJrZXJUeXBlPiYgbWFya2VyVHlwZXNGb3JBdXRvY29ycmVjdGlvbigpCi17Ci0gICAgREVG
SU5FX1NUQVRJQ19MT0NBTChWZWN0b3I8RG9jdW1lbnRNYXJrZXI6Ok1hcmtlclR5cGU+LCBtYXJr
ZXJUeXBlc0ZvckF1dG9Db3JyZWN0aW9uLCAoKSk7Ci0gICAgaWYgKG1hcmtlclR5cGVzRm9yQXV0
b0NvcnJlY3Rpb24uaXNFbXB0eSgpKSB7Ci0gICAgICAgIG1hcmtlclR5cGVzRm9yQXV0b0NvcnJl
Y3Rpb24uYXBwZW5kKERvY3VtZW50TWFya2VyOjpSZXBsYWNlbWVudCk7Ci0gICAgICAgIG1hcmtl
clR5cGVzRm9yQXV0b0NvcnJlY3Rpb24uYXBwZW5kKERvY3VtZW50TWFya2VyOjpDb3JyZWN0aW9u
SW5kaWNhdG9yKTsKLSAgICAgICAgbWFya2VyVHlwZXNGb3JBdXRvQ29ycmVjdGlvbi5hcHBlbmQo
RG9jdW1lbnRNYXJrZXI6OlNwZWxsQ2hlY2tpbmdFeGVtcHRpb24pOwotICAgICAgICBtYXJrZXJU
eXBlc0ZvckF1dG9Db3JyZWN0aW9uLmFwcGVuZChEb2N1bWVudE1hcmtlcjo6QXV0b2NvcnJlY3Rl
ZCk7Ci0gICAgfQotICAgIHJldHVybiBtYXJrZXJUeXBlc0ZvckF1dG9Db3JyZWN0aW9uOwotfQot
Ci1zdGF0aWMgY29uc3QgVmVjdG9yPERvY3VtZW50TWFya2VyOjpNYXJrZXJUeXBlPiYgbWFya2Vy
VHlwZXNGb3JSZXBsYWNlbWVudCgpCi17Ci0gICAgREVGSU5FX1NUQVRJQ19MT0NBTChWZWN0b3I8
RG9jdW1lbnRNYXJrZXI6Ok1hcmtlclR5cGU+LCBtYXJrZXJUeXBlc0ZvclJlcGxhY2VtZW50LCAo
KSk7Ci0gICAgaWYgKG1hcmtlclR5cGVzRm9yUmVwbGFjZW1lbnQuaXNFbXB0eSgpKSB7Ci0gICAg
ICAgIG1hcmtlclR5cGVzRm9yUmVwbGFjZW1lbnQuYXBwZW5kKERvY3VtZW50TWFya2VyOjpSZXBs
YWNlbWVudCk7Ci0gICAgICAgIG1hcmtlclR5cGVzRm9yUmVwbGFjZW1lbnQuYXBwZW5kKERvY3Vt
ZW50TWFya2VyOjpTcGVsbENoZWNraW5nRXhlbXB0aW9uKTsKLSAgICB9Ci0gICAgcmV0dXJuIG1h
cmtlclR5cGVzRm9yUmVwbGFjZW1lbnQ7Ci19Ci0KLXN0YXRpYyBib29sIG1hcmtlcnNIYXZlSWRl
bnRpY2FsRGVzY3JpcHRpb24oY29uc3QgVmVjdG9yPERvY3VtZW50TWFya2VyKj4mIG1hcmtlcnMp
Ci17Ci0gICAgaWYgKG1hcmtlcnMuaXNFbXB0eSgpKQotICAgICAgICByZXR1cm4gdHJ1ZTsKLQot
ICAgIGNvbnN0IFN0cmluZyYgZGVzY3JpcHRpb24gPSBtYXJrZXJzWzBdLT5kZXNjcmlwdGlvbigp
OwotICAgIGZvciAoc2l6ZV90IGkgPSAxOyBpIDwgbWFya2Vycy5zaXplKCk7ICsraSkgewotICAg
ICAgICBpZiAoZGVzY3JpcHRpb24gIT0gbWFya2Vyc1tpXS0+ZGVzY3JpcHRpb24oKSkKLSAgICAg
ICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci0gICAgcmV0dXJuIHRydWU7Ci19Ci0KLVNwZWxs
aW5nQ29ycmVjdGlvbkNvbnRyb2xsZXI6OlNwZWxsaW5nQ29ycmVjdGlvbkNvbnRyb2xsZXIoRnJh
bWUqIGZyYW1lKQotICAgIDogbV9mcmFtZShmcmFtZSkKLSAgICAsIG1fY29ycmVjdGlvblBhbmVs
VGltZXIodGhpcywgJlNwZWxsaW5nQ29ycmVjdGlvbkNvbnRyb2xsZXI6OmNvcnJlY3Rpb25QYW5l
bFRpbWVyRmlyZWQpCi17Ci19Ci0KLVNwZWxsaW5nQ29ycmVjdGlvbkNvbnRyb2xsZXI6On5TcGVs
bGluZ0NvcnJlY3Rpb25Db250cm9sbGVyKCkKLXsKLSAgICBkaXNtaXNzKFJlYXNvbkZvckRpc21p
c3NpbmdDb3JyZWN0aW9uUGFuZWxJZ25vcmVkKTsKLX0KLQotdm9pZCBTcGVsbGluZ0NvcnJlY3Rp
b25Db250cm9sbGVyOjpzdGFydENvcnJlY3Rpb25QYW5lbFRpbWVyKENvcnJlY3Rpb25QYW5lbElu
Zm86OlBhbmVsVHlwZSB0eXBlKQotewotICAgIGNvbnN0IGRvdWJsZSBjb3JyZWN0aW9uUGFuZWxU
aW1lckludGVydmFsID0gMC4zOwotICAgIGlmICghaXNBdXRvbWF0aWNTcGVsbGluZ0NvcnJlY3Rp
b25FbmFibGVkKCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIC8vIElmIHR5cGUgaXMgUGFuZWxU
eXBlUmV2ZXJzaW9uLCB0aGVuIHRoZSBuZXcgcmFuZ2UgaGFzIGJlZW4gc2V0LiBTbyB3ZSBzaG91
bGRuJ3QgY2xlYXIgaXQuCi0gICAgaWYgKHR5cGUgPT0gQ29ycmVjdGlvblBhbmVsSW5mbzo6UGFu
ZWxUeXBlQ29ycmVjdGlvbikKLSAgICAgICAgbV9jb3JyZWN0aW9uUGFuZWxJbmZvLnJhbmdlVG9C
ZVJlcGxhY2VkLmNsZWFyKCk7Ci0gICAgbV9jb3JyZWN0aW9uUGFuZWxJbmZvLnBhbmVsVHlwZSA9
IHR5cGU7Ci0gICAgbV9jb3JyZWN0aW9uUGFuZWxUaW1lci5zdGFydE9uZVNob3QoY29ycmVjdGlv
blBhbmVsVGltZXJJbnRlcnZhbCk7Ci19Ci0KLXZvaWQgU3BlbGxpbmdDb3JyZWN0aW9uQ29udHJv
bGxlcjo6c3RvcENvcnJlY3Rpb25QYW5lbFRpbWVyKCkKLXsKLSAgICBtX2NvcnJlY3Rpb25QYW5l
bFRpbWVyLnN0b3AoKTsKLSAgICBtX2NvcnJlY3Rpb25QYW5lbEluZm8ucmFuZ2VUb0JlUmVwbGFj
ZWQuY2xlYXIoKTsKLX0KLQotdm9pZCBTcGVsbGluZ0NvcnJlY3Rpb25Db250cm9sbGVyOjpzdG9w
UGVuZGluZ0NvcnJlY3Rpb24oY29uc3QgVmlzaWJsZVNlbGVjdGlvbiYgb2xkU2VsZWN0aW9uKQot
ewotICAgIC8vIE1ha2Ugc3VyZSB0aGVyZSdzIG5vIHBlbmRpbmcgYXV0b2NvcnJlY3Rpb24gYmVm
b3JlIHdlIGNhbGwgbWFya01pc3NwZWxsaW5nc0FuZEJhZEdyYW1tYXIoKSBiZWxvdy4KLSAgICBW
aXNpYmxlU2VsZWN0aW9uIGN1cnJlbnRTZWxlY3Rpb24obV9mcmFtZS0+c2VsZWN0aW9uKCktPnNl
bGVjdGlvbigpKTsKLSAgICBpZiAoY3VycmVudFNlbGVjdGlvbiA9PSBvbGRTZWxlY3Rpb24pCi0g
ICAgICAgIHJldHVybjsKLQotICAgIHN0b3BDb3JyZWN0aW9uUGFuZWxUaW1lcigpOwotICAgIGRp
c21pc3MoUmVhc29uRm9yRGlzbWlzc2luZ0NvcnJlY3Rpb25QYW5lbElnbm9yZWQpOwotfQotCi12
b2lkIFNwZWxsaW5nQ29ycmVjdGlvbkNvbnRyb2xsZXI6OmFwcGx5UGVuZGluZ0NvcnJlY3Rpb24o
Y29uc3QgVmlzaWJsZVNlbGVjdGlvbiYgc2VsZWN0aW9uQWZ0ZXJUeXBpbmcpCi17Ci0gICAgLy8g
QXBwbHkgcGVuZGluZyBhdXRvY29ycmVjdGlvbiBiZWZvcmUgbmV4dCByb3VuZCBvZiBzcGVsbCBj
aGVja2luZy4KLSAgICBib29sIGRvQXBwbHlDb3JyZWN0aW9uID0gdHJ1ZTsKLSAgICBWaXNpYmxl
UG9zaXRpb24gc3RhcnRPZlNlbGVjdGlvbiA9IHNlbGVjdGlvbkFmdGVyVHlwaW5nLnZpc2libGVT
dGFydCgpOwotICAgIFZpc2libGVTZWxlY3Rpb24gY3VycmVudFdvcmQgPSBWaXNpYmxlU2VsZWN0
aW9uKHN0YXJ0T2ZXb3JkKHN0YXJ0T2ZTZWxlY3Rpb24sIExlZnRXb3JkSWZPbkJvdW5kYXJ5KSwg
ZW5kT2ZXb3JkKHN0YXJ0T2ZTZWxlY3Rpb24sIFJpZ2h0V29yZElmT25Cb3VuZGFyeSkpOwotICAg
IGlmIChjdXJyZW50V29yZC52aXNpYmxlRW5kKCkgPT0gc3RhcnRPZlNlbGVjdGlvbikgewotICAg
ICAgICBTdHJpbmcgd29yZFRleHQgPSBwbGFpblRleHQoY3VycmVudFdvcmQudG9Ob3JtYWxpemVk
UmFuZ2UoKS5nZXQoKSk7Ci0gICAgICAgIGlmICh3b3JkVGV4dC5sZW5ndGgoKSA+IDAgJiYgaXNB
bWJpZ3VvdXNCb3VuZGFyeUNoYXJhY3Rlcih3b3JkVGV4dFt3b3JkVGV4dC5sZW5ndGgoKSAtIDFd
KSkKLSAgICAgICAgICAgIGRvQXBwbHlDb3JyZWN0aW9uID0gZmFsc2U7Ci0gICAgfQotICAgIGlm
IChkb0FwcGx5Q29ycmVjdGlvbikKLSAgICAgICAgaGFuZGxlQ29ycmVjdGlvblBhbmVsUmVzdWx0
KGRpc21pc3NTb29uKFJlYXNvbkZvckRpc21pc3NpbmdDb3JyZWN0aW9uUGFuZWxBY2NlcHRlZCkp
OyAKLSAgICBlbHNlCi0gICAgICAgIG1fY29ycmVjdGlvblBhbmVsSW5mby5yYW5nZVRvQmVSZXBs
YWNlZC5jbGVhcigpOwotfQotCi1ib29sIFNwZWxsaW5nQ29ycmVjdGlvbkNvbnRyb2xsZXI6Omhh
c1BlbmRpbmdDb3JyZWN0aW9uKCkgY29uc3QKLXsKLSAgICByZXR1cm4gbV9jb3JyZWN0aW9uUGFu
ZWxJbmZvLnJhbmdlVG9CZVJlcGxhY2VkOwotfQotCi1ib29sIFNwZWxsaW5nQ29ycmVjdGlvbkNv
bnRyb2xsZXI6OmlzU3BlbGxpbmdNYXJrZXJBbGxvd2VkKFBhc3NSZWZQdHI8UmFuZ2U+IG1pc3Nw
ZWxsaW5nUmFuZ2UpIGNvbnN0Ci17Ci0gICAgcmV0dXJuICFtX2ZyYW1lLT5kb2N1bWVudCgpLT5t
YXJrZXJzKCktPmhhc01hcmtlcnMobWlzc3BlbGxpbmdSYW5nZS5nZXQoKSwgRG9jdW1lbnRNYXJr
ZXI6OlNwZWxsQ2hlY2tpbmdFeGVtcHRpb24pOwotfQotCi12b2lkIFNwZWxsaW5nQ29ycmVjdGlv
bkNvbnRyb2xsZXI6OnNob3coUGFzc1JlZlB0cjxSYW5nZT4gcmFuZ2VUb1JlcGxhY2UsIGNvbnN0
IFN0cmluZyYgcmVwbGFjZW1lbnQpCi17Ci0gICAgRmxvYXRSZWN0IGJvdW5kaW5nQm94ID0gcm9v
dFZpZXdSZWN0Rm9yUmFuZ2UocmFuZ2VUb1JlcGxhY2UuZ2V0KCkpOwotICAgIGlmIChib3VuZGlu
Z0JveC5pc0VtcHR5KCkpCi0gICAgICAgIHJldHVybjsKLSAgICBtX2NvcnJlY3Rpb25QYW5lbElu
Zm8ucmVwbGFjZWRTdHJpbmcgPSBwbGFpblRleHQocmFuZ2VUb1JlcGxhY2UuZ2V0KCkpOwotICAg
IG1fY29ycmVjdGlvblBhbmVsSW5mby5yYW5nZVRvQmVSZXBsYWNlZCA9IHJhbmdlVG9SZXBsYWNl
OwotICAgIG1fY29ycmVjdGlvblBhbmVsSW5mby5yZXBsYWNlbWVudFN0cmluZyA9IHJlcGxhY2Vt
ZW50OwotICAgIG1fY29ycmVjdGlvblBhbmVsSW5mby5pc0FjdGl2ZSA9IHRydWU7Ci0gICAgY2xp
ZW50KCktPnNob3dDb3JyZWN0aW9uUGFuZWwobV9jb3JyZWN0aW9uUGFuZWxJbmZvLnBhbmVsVHlw
ZSwgYm91bmRpbmdCb3gsIG1fY29ycmVjdGlvblBhbmVsSW5mby5yZXBsYWNlZFN0cmluZywgcmVw
bGFjZW1lbnQsIFZlY3RvcjxTdHJpbmc+KCkpOwotfQotCi12b2lkIFNwZWxsaW5nQ29ycmVjdGlv
bkNvbnRyb2xsZXI6OmhhbmRsZUNhbmNlbE9wZXJhdGlvbigpCi17Ci0gICAgaWYgKCFtX2NvcnJl
Y3Rpb25QYW5lbEluZm8uaXNBY3RpdmUpCi0gICAgICAgIHJldHVybjsKLSAgICBtX2NvcnJlY3Rp
b25QYW5lbEluZm8uaXNBY3RpdmUgPSBmYWxzZTsKLSAgICBkaXNtaXNzKFJlYXNvbkZvckRpc21p
c3NpbmdDb3JyZWN0aW9uUGFuZWxDYW5jZWxsZWQpOwotfQotCi12b2lkIFNwZWxsaW5nQ29ycmVj
dGlvbkNvbnRyb2xsZXI6OmRpc21pc3MoUmVhc29uRm9yRGlzbWlzc2luZ0NvcnJlY3Rpb25QYW5l
bCByZWFzb25Gb3JEaXNtaXNzaW5nKQotewotICAgIGlmICghbV9jb3JyZWN0aW9uUGFuZWxJbmZv
LmlzQWN0aXZlKQotICAgICAgICByZXR1cm47Ci0gICAgbV9jb3JyZWN0aW9uUGFuZWxJbmZvLmlz
QWN0aXZlID0gZmFsc2U7Ci0gICAgbV9jb3JyZWN0aW9uUGFuZWxJc0Rpc21pc3NlZEJ5RWRpdG9y
ID0gdHJ1ZTsKLSAgICBpZiAoY2xpZW50KCkpCi0gICAgICAgIGNsaWVudCgpLT5kaXNtaXNzQ29y
cmVjdGlvblBhbmVsKHJlYXNvbkZvckRpc21pc3NpbmcpOwotfQotCi1TdHJpbmcgU3BlbGxpbmdD
b3JyZWN0aW9uQ29udHJvbGxlcjo6ZGlzbWlzc1Nvb24oUmVhc29uRm9yRGlzbWlzc2luZ0NvcnJl
Y3Rpb25QYW5lbCByZWFzb25Gb3JEaXNtaXNzaW5nKQotewotICAgIGlmICghbV9jb3JyZWN0aW9u
UGFuZWxJbmZvLmlzQWN0aXZlKQotICAgICAgICByZXR1cm4gU3RyaW5nKCk7Ci0gICAgbV9jb3Jy
ZWN0aW9uUGFuZWxJbmZvLmlzQWN0aXZlID0gZmFsc2U7Ci0gICAgbV9jb3JyZWN0aW9uUGFuZWxJ
c0Rpc21pc3NlZEJ5RWRpdG9yID0gdHJ1ZTsKLSAgICBpZiAoIWNsaWVudCgpKQotICAgICAgICBy
ZXR1cm4gU3RyaW5nKCk7Ci0gICAgcmV0dXJuIGNsaWVudCgpLT5kaXNtaXNzQ29ycmVjdGlvblBh
bmVsU29vbihyZWFzb25Gb3JEaXNtaXNzaW5nKTsKLX0KLQotdm9pZCBTcGVsbGluZ0NvcnJlY3Rp
b25Db250cm9sbGVyOjphcHBseUNvcnJlY3Rpb25QYW5lbEluZm8oY29uc3QgVmVjdG9yPERvY3Vt
ZW50TWFya2VyOjpNYXJrZXJUeXBlPiYgbWFya2VyVHlwZXNUb0FkZCkKLXsKLSAgICBpZiAoIW1f
Y29ycmVjdGlvblBhbmVsSW5mby5yYW5nZVRvQmVSZXBsYWNlZCkKLSAgICAgICAgcmV0dXJuOwot
Ci0gICAgRXhjZXB0aW9uQ29kZSBlYyA9IDA7Ci0gICAgUmVmUHRyPFJhbmdlPiBwYXJhZ3JhcGhS
YW5nZUNvbnRhaW5pbmdDb3JyZWN0aW9uID0gbV9jb3JyZWN0aW9uUGFuZWxJbmZvLnJhbmdlVG9C
ZVJlcGxhY2VkLT5jbG9uZVJhbmdlKGVjKTsKLSAgICBpZiAoZWMpCi0gICAgICAgIHJldHVybjsK
LQotICAgIHNldFN0YXJ0KHBhcmFncmFwaFJhbmdlQ29udGFpbmluZ0NvcnJlY3Rpb24uZ2V0KCks
IHN0YXJ0T2ZQYXJhZ3JhcGgobV9jb3JyZWN0aW9uUGFuZWxJbmZvLnJhbmdlVG9CZVJlcGxhY2Vk
LT5zdGFydFBvc2l0aW9uKCkpKTsKLSAgICBzZXRFbmQocGFyYWdyYXBoUmFuZ2VDb250YWluaW5n
Q29ycmVjdGlvbi5nZXQoKSwgZW5kT2ZQYXJhZ3JhcGgobV9jb3JyZWN0aW9uUGFuZWxJbmZvLnJh
bmdlVG9CZVJlcGxhY2VkLT5lbmRQb3NpdGlvbigpKSk7Ci0KLSAgICAvLyBBZnRlciB3ZSByZXBs
YWNlIHRoZSB3b3JkIGF0IHJhbmdlIHJhbmdlVG9CZVJlcGxhY2VkLCB3ZSBuZWVkIHRvIGFkZCBt
YXJrZXJzIHRvIHRoYXQgcmFuZ2UuCi0gICAgLy8gSG93ZXZlciwgb25jZSB0aGUgcmVwbGFjZW1l
bnQgdG9vayBwbGFjZSwgdGhlIHZhbHVlIG9mIHJhbmdlVG9CZVJlcGxhY2VkIGlzIG5vdCB2YWxp
ZCBhbnltb3JlLgotICAgIC8vIFNvIGJlZm9yZSB3ZSBjYXJyeSBvdXQgdGhlIHJlcGxhY2VtZW50
LCB3ZSBuZWVkIHRvIHN0b3JlIHRoZSBzdGFydCBwb3NpdGlvbiBvZiByYW5nZVRvQmVSZXBsYWNl
ZAotICAgIC8vIHJlbGF0aXZlIHRvIHRoZSBzdGFydCBwb3NpdGlvbiBvZiB0aGUgY29udGFpbmlu
ZyBwYXJhZ3JhcGguIFdlIHVzZSBjb3JyZWN0aW9uU3RhcnRPZmZzZXRJblBhcmFncmFwaAotICAg
IC8vIHRvIHN0b3JlIHRoaXMgdmFsdWUuIEluIG9yZGVyIHRvIG9idGFpbiB0aGlzIG9mZnNldCwg
d2UgbmVlZCB0byBmaXJzdCBjcmVhdGUgYSByYW5nZQotICAgIC8vIHdoaWNoIHNwYW5zIGZyb20g
dGhlIHN0YXJ0IG9mIHBhcmFncmFwaCB0byB0aGUgc3RhcnQgcG9zaXRpb24gb2YgcmFuZ2VUb0Jl
UmVwbGFjZWQuCi0gICAgUmVmUHRyPFJhbmdlPiBjb3JyZWN0aW9uU3RhcnRPZmZzZXRJblBhcmFn
cmFwaEFzUmFuZ2UgPSBSYW5nZTo6Y3JlYXRlKHBhcmFncmFwaFJhbmdlQ29udGFpbmluZ0NvcnJl
Y3Rpb24tPnN0YXJ0Q29udGFpbmVyKGVjKS0+ZG9jdW1lbnQoKSwgcGFyYWdyYXBoUmFuZ2VDb250
YWluaW5nQ29ycmVjdGlvbi0+c3RhcnRQb3NpdGlvbigpLCBwYXJhZ3JhcGhSYW5nZUNvbnRhaW5p
bmdDb3JyZWN0aW9uLT5zdGFydFBvc2l0aW9uKCkpOwotICAgIGlmIChlYykKLSAgICAgICAgcmV0
dXJuOwotCi0gICAgUG9zaXRpb24gc3RhcnRQb3NpdGlvbk9mUmFuZ2VUb0JlUmVwbGFjZWQgPSBt
X2NvcnJlY3Rpb25QYW5lbEluZm8ucmFuZ2VUb0JlUmVwbGFjZWQtPnN0YXJ0UG9zaXRpb24oKTsK
LSAgICBjb3JyZWN0aW9uU3RhcnRPZmZzZXRJblBhcmFncmFwaEFzUmFuZ2UtPnNldEVuZChzdGFy
dFBvc2l0aW9uT2ZSYW5nZVRvQmVSZXBsYWNlZC5jb250YWluZXJOb2RlKCksIHN0YXJ0UG9zaXRp
b25PZlJhbmdlVG9CZVJlcGxhY2VkLmNvbXB1dGVPZmZzZXRJbkNvbnRhaW5lck5vZGUoKSwgZWMp
OwotICAgIGlmIChlYykKLSAgICAgICAgcmV0dXJuOwotCi0gICAgLy8gVGFrZSBub3RlIG9mIHRo
ZSBsb2NhdGlvbiBvZiBhdXRvY29ycmVjdGlvbiBzbyB0aGF0IHdlIGNhbiBhZGQgbWFya2VyIGFm
dGVyIHRoZSByZXBsYWNlbWVudCB0b29rIHBsYWNlLgotICAgIGludCBjb3JyZWN0aW9uU3RhcnRP
ZmZzZXRJblBhcmFncmFwaCA9IFRleHRJdGVyYXRvcjo6cmFuZ2VMZW5ndGgoY29ycmVjdGlvblN0
YXJ0T2Zmc2V0SW5QYXJhZ3JhcGhBc1JhbmdlLmdldCgpKTsKLQotICAgIC8vIENsb25lIHRoZSBy
YW5nZSwgc2luY2UgdGhlIGNhbGxlciBvZiB0aGlzIG1ldGhvZCBtYXkgd2FudCB0byBrZWVwIHRo
ZSBvcmlnaW5hbCByYW5nZSBhcm91bmQuCi0gICAgUmVmUHRyPFJhbmdlPiByYW5nZVRvQmVSZXBs
YWNlZCA9IG1fY29ycmVjdGlvblBhbmVsSW5mby5yYW5nZVRvQmVSZXBsYWNlZC0+Y2xvbmVSYW5n
ZShlYyk7Ci0gICAgYXBwbHlDb21tYW5kKFNwZWxsaW5nQ29ycmVjdGlvbkNvbW1hbmQ6OmNyZWF0
ZShyYW5nZVRvQmVSZXBsYWNlZCwgbV9jb3JyZWN0aW9uUGFuZWxJbmZvLnJlcGxhY2VtZW50U3Ry
aW5nKSk7Ci0gICAgc2V0RW5kKHBhcmFncmFwaFJhbmdlQ29udGFpbmluZ0NvcnJlY3Rpb24uZ2V0
KCksIG1fZnJhbWUtPnNlbGVjdGlvbigpLT5zZWxlY3Rpb24oKS5zdGFydCgpKTsKLSAgICBSZWZQ
dHI8UmFuZ2U+IHJlcGxhY2VtZW50UmFuZ2UgPSBUZXh0SXRlcmF0b3I6OnN1YnJhbmdlKHBhcmFn
cmFwaFJhbmdlQ29udGFpbmluZ0NvcnJlY3Rpb24uZ2V0KCksIGNvcnJlY3Rpb25TdGFydE9mZnNl
dEluUGFyYWdyYXBoLCAgbV9jb3JyZWN0aW9uUGFuZWxJbmZvLnJlcGxhY2VtZW50U3RyaW5nLmxl
bmd0aCgpKTsKLSAgICBTdHJpbmcgbmV3VGV4dCA9IHBsYWluVGV4dChyZXBsYWNlbWVudFJhbmdl
LmdldCgpKTsKLQotICAgIC8vIENoZWNrIHRvIHNlZSBpZiByZXBsYWNlbWVudCBzdWNjZWVkZWQu
Ci0gICAgaWYgKG5ld1RleHQgIT0gbV9jb3JyZWN0aW9uUGFuZWxJbmZvLnJlcGxhY2VtZW50U3Ry
aW5nKQotICAgICAgICByZXR1cm47Ci0KLSAgICBEb2N1bWVudE1hcmtlckNvbnRyb2xsZXIqIG1h
cmtlcnMgPSByZXBsYWNlbWVudFJhbmdlLT5zdGFydENvbnRhaW5lcigpLT5kb2N1bWVudCgpLT5t
YXJrZXJzKCk7Ci0gICAgc2l6ZV90IHNpemUgPSBtYXJrZXJUeXBlc1RvQWRkLnNpemUoKTsKLSAg
ICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IHNpemU7ICsraSkgewotICAgICAgICBEb2N1bWVudE1h
cmtlcjo6TWFya2VyVHlwZSBtYXJrZXJUeXBlID0gbWFya2VyVHlwZXNUb0FkZFtpXTsKLSAgICAg
ICAgU3RyaW5nIGRlc2NyaXB0aW9uOwotICAgICAgICBpZiAobV9jb3JyZWN0aW9uUGFuZWxJbmZv
LnBhbmVsVHlwZSAhPSBDb3JyZWN0aW9uUGFuZWxJbmZvOjpQYW5lbFR5cGVSZXZlcnNpb24gJiYg
KG1hcmtlclR5cGUgPT0gRG9jdW1lbnRNYXJrZXI6OlJlcGxhY2VtZW50IHx8IG1hcmtlclR5cGUg
PT0gRG9jdW1lbnRNYXJrZXI6OkF1dG9jb3JyZWN0ZWQpKQotICAgICAgICAgICAgZGVzY3JpcHRp
b24gPSBtX2NvcnJlY3Rpb25QYW5lbEluZm8ucmVwbGFjZWRTdHJpbmc7Ci0gICAgICAgIG1hcmtl
cnMtPmFkZE1hcmtlcihyZXBsYWNlbWVudFJhbmdlLmdldCgpLCBtYXJrZXJUeXBlLCBkZXNjcmlw
dGlvbik7Ci0gICAgfQotfQotCi1ib29sIFNwZWxsaW5nQ29ycmVjdGlvbkNvbnRyb2xsZXI6OmFw
cGx5QXV0b2NvcnJlY3Rpb25CZWZvcmVUeXBpbmdJZkFwcHJvcHJpYXRlKCkKLXsKLSAgICBpZiAo
IW1fY29ycmVjdGlvblBhbmVsSW5mby5yYW5nZVRvQmVSZXBsYWNlZCB8fCAhbV9jb3JyZWN0aW9u
UGFuZWxJbmZvLmlzQWN0aXZlKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICBpZiAobV9j
b3JyZWN0aW9uUGFuZWxJbmZvLnBhbmVsVHlwZSAhPSBDb3JyZWN0aW9uUGFuZWxJbmZvOjpQYW5l
bFR5cGVDb3JyZWN0aW9uKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICBQb3NpdGlvbiBj
YXJldFBvc2l0aW9uID0gbV9mcmFtZS0+c2VsZWN0aW9uKCktPnNlbGVjdGlvbigpLnN0YXJ0KCk7
Ci0KLSAgICBpZiAobV9jb3JyZWN0aW9uUGFuZWxJbmZvLnJhbmdlVG9CZVJlcGxhY2VkLT5lbmRQ
b3NpdGlvbigpID09IGNhcmV0UG9zaXRpb24pIHsKLSAgICAgICAgaGFuZGxlQ29ycmVjdGlvblBh
bmVsUmVzdWx0KGRpc21pc3NTb29uKFJlYXNvbkZvckRpc21pc3NpbmdDb3JyZWN0aW9uUGFuZWxB
Y2NlcHRlZCkpOwotICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICB9IAotICAgIAotICAgIC8vIFBl
bmRpbmcgY29ycmVjdGlvbiBzaG91bGQgYWx3YXlzIGJlIHdoZXJlIGNhcmV0IGlzLiBCdXQgaW4g
Y2FzZSB0aGlzIGlzIG5vdCBhbHdheXMgdHJ1ZSwgd2Ugc3RpbGwgd2FudCB0byBkaXNtaXNzIHRo
ZSBwYW5lbCB3aXRob3V0IGFjY2VwdGluZyB0aGUgY29ycmVjdGlvbi4KLSAgICBBU1NFUlQobV9j
b3JyZWN0aW9uUGFuZWxJbmZvLnJhbmdlVG9CZVJlcGxhY2VkLT5lbmRQb3NpdGlvbigpID09IGNh
cmV0UG9zaXRpb24pOwotICAgIGRpc21pc3MoUmVhc29uRm9yRGlzbWlzc2luZ0NvcnJlY3Rpb25Q
YW5lbElnbm9yZWQpOwotICAgIHJldHVybiBmYWxzZTsKLX0KLQotdm9pZCBTcGVsbGluZ0NvcnJl
Y3Rpb25Db250cm9sbGVyOjpyZXNwb25kVG9VbmFwcGxpZWRTcGVsbENvcnJlY3Rpb24oY29uc3Qg
VmlzaWJsZVNlbGVjdGlvbiYgc2VsZWN0aW9uT2ZDb3JyZWN0ZWQsIGNvbnN0IFN0cmluZyYgY29y
cmVjdGVkLCBjb25zdCBTdHJpbmcmIGNvcnJlY3Rpb24pCi17Ci0gICAgY2xpZW50KCktPnJlY29y
ZEF1dG9jb3JyZWN0aW9uUmVzcG9uc2UoRWRpdG9yQ2xpZW50OjpBdXRvY29ycmVjdGlvblJldmVy
dGVkLCBjb3JyZWN0ZWQsIGNvcnJlY3Rpb24pOwotICAgIG1fZnJhbWUtPmRvY3VtZW50KCktPnVw
ZGF0ZUxheW91dCgpOwotICAgIG1fZnJhbWUtPnNlbGVjdGlvbigpLT5zZXRTZWxlY3Rpb24oc2Vs
ZWN0aW9uT2ZDb3JyZWN0ZWQsIEZyYW1lU2VsZWN0aW9uOjpDbG9zZVR5cGluZyB8IEZyYW1lU2Vs
ZWN0aW9uOjpDbGVhclR5cGluZ1N0eWxlIHwgRnJhbWVTZWxlY3Rpb246OlNwZWxsQ29ycmVjdGlv
blRyaWdnZXJlZCk7Ci0gICAgUmVmUHRyPFJhbmdlPiByYW5nZSA9IFJhbmdlOjpjcmVhdGUobV9m
cmFtZS0+ZG9jdW1lbnQoKSwgbV9mcmFtZS0+c2VsZWN0aW9uKCktPnNlbGVjdGlvbigpLnN0YXJ0
KCksIG1fZnJhbWUtPnNlbGVjdGlvbigpLT5zZWxlY3Rpb24oKS5lbmQoKSk7Ci0KLSAgICBEb2N1
bWVudE1hcmtlckNvbnRyb2xsZXIqIG1hcmtlcnMgPSBtX2ZyYW1lLT5kb2N1bWVudCgpLT5tYXJr
ZXJzKCk7Ci0gICAgbWFya2Vycy0+cmVtb3ZlTWFya2VycyhyYW5nZS5nZXQoKSwgRG9jdW1lbnRN
YXJrZXI6OlNwZWxsaW5nIHwgRG9jdW1lbnRNYXJrZXI6OkF1dG9jb3JyZWN0ZWQsIERvY3VtZW50
TWFya2VyQ29udHJvbGxlcjo6UmVtb3ZlUGFydGlhbGx5T3ZlcmxhcHBpbmdNYXJrZXIpOwotICAg
IG1hcmtlcnMtPmFkZE1hcmtlcihyYW5nZS5nZXQoKSwgRG9jdW1lbnRNYXJrZXI6OlJlcGxhY2Vt
ZW50KTsKLSAgICBtYXJrZXJzLT5hZGRNYXJrZXIocmFuZ2UuZ2V0KCksIERvY3VtZW50TWFya2Vy
OjpTcGVsbENoZWNraW5nRXhlbXB0aW9uKTsKLX0KLQotdm9pZCBTcGVsbGluZ0NvcnJlY3Rpb25D
b250cm9sbGVyOjpjb3JyZWN0aW9uUGFuZWxUaW1lckZpcmVkKFRpbWVyPFNwZWxsaW5nQ29ycmVj
dGlvbkNvbnRyb2xsZXI+KikKLXsKLSAgICBtX2NvcnJlY3Rpb25QYW5lbElzRGlzbWlzc2VkQnlF
ZGl0b3IgPSBmYWxzZTsKLSAgICBzd2l0Y2ggKG1fY29ycmVjdGlvblBhbmVsSW5mby5wYW5lbFR5
cGUpIHsKLSAgICBjYXNlIENvcnJlY3Rpb25QYW5lbEluZm86OlBhbmVsVHlwZUNvcnJlY3Rpb246
IHsKLSAgICAgICAgVmlzaWJsZVNlbGVjdGlvbiBzZWxlY3Rpb24obV9mcmFtZS0+c2VsZWN0aW9u
KCktPnNlbGVjdGlvbigpKTsKLSAgICAgICAgVmlzaWJsZVBvc2l0aW9uIHN0YXJ0KHNlbGVjdGlv
bi5zdGFydCgpLCBzZWxlY3Rpb24uYWZmaW5pdHkoKSk7Ci0gICAgICAgIFZpc2libGVQb3NpdGlv
biBwID0gc3RhcnRPZldvcmQoc3RhcnQsIExlZnRXb3JkSWZPbkJvdW5kYXJ5KTsKLSAgICAgICAg
VmlzaWJsZVNlbGVjdGlvbiBhZGphY2VudFdvcmRzID0gVmlzaWJsZVNlbGVjdGlvbihwLCBzdGFy
dCk7Ci0gICAgICAgIG1fZnJhbWUtPmVkaXRvcigpLT5tYXJrQWxsTWlzc3BlbGxpbmdzQW5kQmFk
R3JhbW1hckluUmFuZ2VzKFRleHRDaGVja2luZ1R5cGVTcGVsbGluZyB8IFRleHRDaGVja2luZ1R5
cGVTaG93Q29ycmVjdGlvblBhbmVsLCBhZGphY2VudFdvcmRzLnRvTm9ybWFsaXplZFJhbmdlKCku
Z2V0KCksIDApOwotICAgIH0KLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBDb3JyZWN0aW9uUGFu
ZWxJbmZvOjpQYW5lbFR5cGVSZXZlcnNpb246IHsKLSAgICAgICAgaWYgKCFtX2NvcnJlY3Rpb25Q
YW5lbEluZm8ucmFuZ2VUb0JlUmVwbGFjZWQpCi0gICAgICAgICAgICBicmVhazsKLSAgICAgICAg
bV9jb3JyZWN0aW9uUGFuZWxJbmZvLmlzQWN0aXZlID0gdHJ1ZTsKLSAgICAgICAgbV9jb3JyZWN0
aW9uUGFuZWxJbmZvLnJlcGxhY2VkU3RyaW5nID0gcGxhaW5UZXh0KG1fY29ycmVjdGlvblBhbmVs
SW5mby5yYW5nZVRvQmVSZXBsYWNlZC5nZXQoKSk7Ci0gICAgICAgIEZsb2F0UmVjdCBib3VuZGlu
Z0JveCA9IHJvb3RWaWV3UmVjdEZvclJhbmdlKG1fY29ycmVjdGlvblBhbmVsSW5mby5yYW5nZVRv
QmVSZXBsYWNlZC5nZXQoKSk7Ci0gICAgICAgIGlmICghYm91bmRpbmdCb3guaXNFbXB0eSgpKQot
ICAgICAgICAgICAgY2xpZW50KCktPnNob3dDb3JyZWN0aW9uUGFuZWwobV9jb3JyZWN0aW9uUGFu
ZWxJbmZvLnBhbmVsVHlwZSwgYm91bmRpbmdCb3gsIG1fY29ycmVjdGlvblBhbmVsSW5mby5yZXBs
YWNlZFN0cmluZywgbV9jb3JyZWN0aW9uUGFuZWxJbmZvLnJlcGxhY2VtZW50U3RyaW5nLCBWZWN0
b3I8U3RyaW5nPigpKTsKLSAgICB9Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgQ29ycmVjdGlv
blBhbmVsSW5mbzo6UGFuZWxUeXBlU3BlbGxpbmdTdWdnZXN0aW9uczogewotICAgICAgICBpZiAo
IW1fY29ycmVjdGlvblBhbmVsSW5mby5yYW5nZVRvQmVSZXBsYWNlZCB8fCBwbGFpblRleHQobV9j
b3JyZWN0aW9uUGFuZWxJbmZvLnJhbmdlVG9CZVJlcGxhY2VkLmdldCgpKSAhPSBtX2NvcnJlY3Rp
b25QYW5lbEluZm8ucmVwbGFjZWRTdHJpbmcpCi0gICAgICAgICAgICBicmVhazsKLSAgICAgICAg
U3RyaW5nIHBhcmFncmFwaFRleHQgPSBwbGFpblRleHQoVGV4dENoZWNraW5nUGFyYWdyYXBoKG1f
Y29ycmVjdGlvblBhbmVsSW5mby5yYW5nZVRvQmVSZXBsYWNlZCkucGFyYWdyYXBoUmFuZ2UoKS5n
ZXQoKSk7Ci0gICAgICAgIFZlY3RvcjxTdHJpbmc+IHN1Z2dlc3Rpb25zOwotICAgICAgICB0ZXh0
Q2hlY2tlcigpLT5nZXRHdWVzc2VzRm9yV29yZChtX2NvcnJlY3Rpb25QYW5lbEluZm8ucmVwbGFj
ZWRTdHJpbmcsIHBhcmFncmFwaFRleHQsIHN1Z2dlc3Rpb25zKTsKLSAgICAgICAgaWYgKHN1Z2dl
c3Rpb25zLmlzRW1wdHkoKSkgewotICAgICAgICAgICAgbV9jb3JyZWN0aW9uUGFuZWxJbmZvLnJh
bmdlVG9CZVJlcGxhY2VkLmNsZWFyKCk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQot
ICAgICAgICBTdHJpbmcgdG9wU3VnZ2VzdGlvbiA9IHN1Z2dlc3Rpb25zLmZpcnN0KCk7Ci0gICAg
ICAgIHN1Z2dlc3Rpb25zLnJlbW92ZSgwKTsKLSAgICAgICAgbV9jb3JyZWN0aW9uUGFuZWxJbmZv
LmlzQWN0aXZlID0gdHJ1ZTsKLSAgICAgICAgRmxvYXRSZWN0IGJvdW5kaW5nQm94ID0gcm9vdFZp
ZXdSZWN0Rm9yUmFuZ2UobV9jb3JyZWN0aW9uUGFuZWxJbmZvLnJhbmdlVG9CZVJlcGxhY2VkLmdl
dCgpKTsKLSAgICAgICAgaWYgKCFib3VuZGluZ0JveC5pc0VtcHR5KCkpCi0gICAgICAgICAgICBj
bGllbnQoKS0+c2hvd0NvcnJlY3Rpb25QYW5lbChtX2NvcnJlY3Rpb25QYW5lbEluZm8ucGFuZWxU
eXBlLCBib3VuZGluZ0JveCwgbV9jb3JyZWN0aW9uUGFuZWxJbmZvLnJlcGxhY2VkU3RyaW5nLCB0
b3BTdWdnZXN0aW9uLCBzdWdnZXN0aW9ucyk7Ci0gICAgfQotICAgICAgICBicmVhazsKLSAgICB9
Ci19Ci0KLXZvaWQgU3BlbGxpbmdDb3JyZWN0aW9uQ29udHJvbGxlcjo6aGFuZGxlQ29ycmVjdGlv
blBhbmVsUmVzdWx0KGNvbnN0IFN0cmluZyYgY29ycmVjdGlvbikKLXsKLSAgICBSYW5nZSogcmVw
bGFjZWRSYW5nZSA9IG1fY29ycmVjdGlvblBhbmVsSW5mby5yYW5nZVRvQmVSZXBsYWNlZC5nZXQo
KTsKLSAgICBpZiAoIXJlcGxhY2VkUmFuZ2UgfHwgbV9mcmFtZS0+ZG9jdW1lbnQoKSAhPSByZXBs
YWNlZFJhbmdlLT5vd25lckRvY3VtZW50KCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIFN0cmlu
ZyBjdXJyZW50V29yZCA9IHBsYWluVGV4dChtX2NvcnJlY3Rpb25QYW5lbEluZm8ucmFuZ2VUb0Jl
UmVwbGFjZWQuZ2V0KCkpOwotICAgIC8vIENoZWNrIHRvIHNlZSBpZiB0aGUgd29yZCB3ZSBhcmUg
YWJvdXQgdG8gY29ycmVjdCBoYXMgYmVlbiBjaGFuZ2VkIGJldHdlZW4gdGltZXIgZmlyaW5nIGFu
ZCBjYWxsYmFjayBiZWluZyB0cmlnZ2VyZWQuCi0gICAgaWYgKGN1cnJlbnRXb3JkICE9IG1fY29y
cmVjdGlvblBhbmVsSW5mby5yZXBsYWNlZFN0cmluZykKLSAgICAgICAgcmV0dXJuOwotCi0gICAg
bV9jb3JyZWN0aW9uUGFuZWxJbmZvLmlzQWN0aXZlID0gZmFsc2U7Ci0KLSAgICBzd2l0Y2ggKG1f
Y29ycmVjdGlvblBhbmVsSW5mby5wYW5lbFR5cGUpIHsKLSAgICBjYXNlIENvcnJlY3Rpb25QYW5l
bEluZm86OlBhbmVsVHlwZUNvcnJlY3Rpb246Ci0gICAgICAgIGlmIChjb3JyZWN0aW9uLmxlbmd0
aCgpKSB7Ci0gICAgICAgICAgICBtX2NvcnJlY3Rpb25QYW5lbEluZm8ucmVwbGFjZW1lbnRTdHJp
bmcgPSBjb3JyZWN0aW9uOwotICAgICAgICAgICAgYXBwbHlDb3JyZWN0aW9uUGFuZWxJbmZvKG1h
cmtlclR5cGVzRm9yQXV0b2NvcnJlY3Rpb24oKSk7Ci0gICAgICAgIH0gZWxzZSBpZiAoIW1fY29y
cmVjdGlvblBhbmVsSXNEaXNtaXNzZWRCeUVkaXRvcikKLSAgICAgICAgICAgIHJlcGxhY2VkUmFu
Z2UtPnN0YXJ0Q29udGFpbmVyKCktPmRvY3VtZW50KCktPm1hcmtlcnMoKS0+YWRkTWFya2VyKHJl
cGxhY2VkUmFuZ2UsIERvY3VtZW50TWFya2VyOjpSZWplY3RlZENvcnJlY3Rpb24sIG1fY29ycmVj
dGlvblBhbmVsSW5mby5yZXBsYWNlZFN0cmluZyk7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2Ug
Q29ycmVjdGlvblBhbmVsSW5mbzo6UGFuZWxUeXBlUmV2ZXJzaW9uOgotICAgIGNhc2UgQ29ycmVj
dGlvblBhbmVsSW5mbzo6UGFuZWxUeXBlU3BlbGxpbmdTdWdnZXN0aW9uczoKLSAgICAgICAgaWYg
KGNvcnJlY3Rpb24ubGVuZ3RoKCkpIHsKLSAgICAgICAgICAgIG1fY29ycmVjdGlvblBhbmVsSW5m
by5yZXBsYWNlbWVudFN0cmluZyA9IGNvcnJlY3Rpb247Ci0gICAgICAgICAgICBhcHBseUNvcnJl
Y3Rpb25QYW5lbEluZm8obWFya2VyVHlwZXNGb3JSZXBsYWNlbWVudCgpKTsKLSAgICAgICAgfQot
ICAgICAgICBicmVhazsKLSAgICB9Ci0KLSAgICBtX2NvcnJlY3Rpb25QYW5lbEluZm8ucmFuZ2VU
b0JlUmVwbGFjZWQuY2xlYXIoKTsKLX0KLQotYm9vbCBTcGVsbGluZ0NvcnJlY3Rpb25Db250cm9s
bGVyOjppc0F1dG9tYXRpY1NwZWxsaW5nQ29ycmVjdGlvbkVuYWJsZWQoKQotewotICAgIHJldHVy
biBjbGllbnQoKSAmJiBjbGllbnQoKS0+aXNBdXRvbWF0aWNTcGVsbGluZ0NvcnJlY3Rpb25FbmFi
bGVkKCk7Ci19Ci0KLUZsb2F0UmVjdCBTcGVsbGluZ0NvcnJlY3Rpb25Db250cm9sbGVyOjpyb290
Vmlld1JlY3RGb3JSYW5nZShjb25zdCBSYW5nZSogcmFuZ2UpIGNvbnN0Ci17Ci0gICAgRnJhbWVW
aWV3KiB2aWV3ID0gbV9mcmFtZS0+dmlldygpOwotICAgIGlmICghdmlldykKLSAgICAgICAgcmV0
dXJuIEZsb2F0UmVjdCgpOwotICAgIFZlY3RvcjxGbG9hdFF1YWQ+IHRleHRRdWFkczsKLSAgICBy
YW5nZS0+dGV4dFF1YWRzKHRleHRRdWFkcyk7Ci0gICAgRmxvYXRSZWN0IGJvdW5kaW5nUmVjdDsK
LSAgICBzaXplX3Qgc2l6ZSA9IHRleHRRdWFkcy5zaXplKCk7Ci0gICAgZm9yIChzaXplX3QgaSA9
IDA7IGkgPCBzaXplOyArK2kpCi0gICAgICAgIGJvdW5kaW5nUmVjdC51bml0ZSh0ZXh0UXVhZHNb
aV0uYm91bmRpbmdCb3goKSk7Ci0gICAgcmV0dXJuIHZpZXctPmNvbnRlbnRzVG9Sb290VmlldyhJ
bnRSZWN0KGJvdW5kaW5nUmVjdCkpOwotfSAgICAgICAgCi0KLXZvaWQgU3BlbGxpbmdDb3JyZWN0
aW9uQ29udHJvbGxlcjo6cmVzcG9uZFRvQ2hhbmdlZFNlbGVjdGlvbihjb25zdCBWaXNpYmxlU2Vs
ZWN0aW9uJiBvbGRTZWxlY3Rpb24pCi17Ci0gICAgVmlzaWJsZVNlbGVjdGlvbiBjdXJyZW50U2Vs
ZWN0aW9uKG1fZnJhbWUtPnNlbGVjdGlvbigpLT5zZWxlY3Rpb24oKSk7Ci0gICAgLy8gV2hlbiB1
c2VyIG1vdmVzIGNhcmV0IHRvIHRoZSBlbmQgb2YgYXV0b2NvcnJlY3RlZCB3b3JkIGFuZCBwYXVz
ZXMsIHdlIHNob3cgdGhlIHBhbmVsCi0gICAgLy8gY29udGFpbmluZyB0aGUgb3JpZ2luYWwgcHJl
LWNvcnJlY3Rpb24gd29yZCBzbyB0aGF0IHVzZXIgY2FuIHF1aWNrbHkgcmV2ZXJ0IHRoZQotICAg
IC8vIHVuZGVzaXJlZCBhdXRvY29ycmVjdGlvbi4gSGVyZSwgd2Ugc3RhcnQgY29ycmVjdGlvbiBw
YW5lbCB0aW1lciBvbmNlIHdlIGNvbmZpcm0gdGhhdAotICAgIC8vIHRoZSBuZXcgY2FyZXQgcG9z
aXRpb24gaXMgYXQgdGhlIGVuZCBvZiBhIHdvcmQuCi0gICAgaWYgKCFjdXJyZW50U2VsZWN0aW9u
LmlzQ2FyZXQoKSB8fCBjdXJyZW50U2VsZWN0aW9uID09IG9sZFNlbGVjdGlvbikKLSAgICAgICAg
cmV0dXJuOwotCi0gICAgVmlzaWJsZVBvc2l0aW9uIHNlbGVjdGlvblBvc2l0aW9uID0gY3VycmVu
dFNlbGVjdGlvbi5zdGFydCgpOwotICAgIAotICAgIC8vIENyZWF0aW5nIGEgVmlzaWJsZSBwb3Np
dGlvbiB0cmlnZ2VycyBhIGxheW91dCBhbmQgdGhlcmUgaXMgbm8KLSAgICAvLyBndWFyYW50ZWUg
dGhhdCB0aGUgc2VsZWN0aW9uIGlzIHN0aWxsIHZhbGlkLgotICAgIGlmIChzZWxlY3Rpb25Qb3Np
dGlvbi5pc051bGwoKSkKLSAgICAgICAgcmV0dXJuOwotICAgIAotICAgIFZpc2libGVQb3NpdGlv
biBlbmRQb3NpdGlvbk9mV29yZCA9IGVuZE9mV29yZChzZWxlY3Rpb25Qb3NpdGlvbiwgTGVmdFdv
cmRJZk9uQm91bmRhcnkpOwotICAgIGlmIChzZWxlY3Rpb25Qb3NpdGlvbiAhPSBlbmRQb3NpdGlv
bk9mV29yZCkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgUG9zaXRpb24gcG9zaXRpb24gPSBlbmRQ
b3NpdGlvbk9mV29yZC5kZWVwRXF1aXZhbGVudCgpOwotICAgIGlmIChwb3NpdGlvbi5hbmNob3JU
eXBlKCkgIT0gUG9zaXRpb246OlBvc2l0aW9uSXNPZmZzZXRJbkFuY2hvcikKLSAgICAgICAgcmV0
dXJuOwotCi0gICAgTm9kZSogbm9kZSA9IHBvc2l0aW9uLmNvbnRhaW5lck5vZGUoKTsKLSAgICBp
bnQgZW5kT2Zmc2V0ID0gcG9zaXRpb24ub2Zmc2V0SW5Db250YWluZXJOb2RlKCk7Ci0gICAgVmVj
dG9yPERvY3VtZW50TWFya2VyKj4gbWFya2VycyA9IG5vZGUtPmRvY3VtZW50KCktPm1hcmtlcnMo
KS0+bWFya2Vyc0Zvcihub2RlKTsKLSAgICBzaXplX3QgbWFya2VyQ291bnQgPSBtYXJrZXJzLnNp
emUoKTsKLSAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IG1hcmtlckNvdW50OyArK2kpIHsKLSAg
ICAgICAgY29uc3QgRG9jdW1lbnRNYXJrZXIqIG1hcmtlciA9IG1hcmtlcnNbaV07Ci0gICAgICAg
IGlmICghc2hvdWxkU3RhcnRUaW1lckZvcihtYXJrZXIsIGVuZE9mZnNldCkpCi0gICAgICAgICAg
ICBjb250aW51ZTsKLSAgICAgICAgUmVmUHRyPFJhbmdlPiB3b3JkUmFuZ2UgPSBSYW5nZTo6Y3Jl
YXRlKG1fZnJhbWUtPmRvY3VtZW50KCksIG5vZGUsIG1hcmtlci0+c3RhcnRPZmZzZXQoKSwgbm9k
ZSwgbWFya2VyLT5lbmRPZmZzZXQoKSk7Ci0gICAgICAgIFN0cmluZyBjdXJyZW50V29yZCA9IHBs
YWluVGV4dCh3b3JkUmFuZ2UuZ2V0KCkpOwotICAgICAgICBpZiAoIWN1cnJlbnRXb3JkLmxlbmd0
aCgpKQotICAgICAgICAgICAgY29udGludWU7Ci0KLSAgICAgICAgbV9jb3JyZWN0aW9uUGFuZWxJ
bmZvLnJhbmdlVG9CZVJlcGxhY2VkID0gd29yZFJhbmdlOwotICAgICAgICBtX2NvcnJlY3Rpb25Q
YW5lbEluZm8ucmVwbGFjZWRTdHJpbmcgPSBjdXJyZW50V29yZDsKLSAgICAgICAgaWYgKG1hcmtl
ci0+dHlwZSgpID09IERvY3VtZW50TWFya2VyOjpTcGVsbGluZykKLSAgICAgICAgICAgIHN0YXJ0
Q29ycmVjdGlvblBhbmVsVGltZXIoQ29ycmVjdGlvblBhbmVsSW5mbzo6UGFuZWxUeXBlU3BlbGxp
bmdTdWdnZXN0aW9ucyk7Ci0gICAgICAgIGVsc2UgewotICAgICAgICAgICAgbV9jb3JyZWN0aW9u
UGFuZWxJbmZvLnJlcGxhY2VtZW50U3RyaW5nID0gbWFya2VyLT5kZXNjcmlwdGlvbigpOwotICAg
ICAgICAgICAgc3RhcnRDb3JyZWN0aW9uUGFuZWxUaW1lcihDb3JyZWN0aW9uUGFuZWxJbmZvOjpQ
YW5lbFR5cGVSZXZlcnNpb24pOwotICAgICAgICB9Ci0KLSAgICAgICAgYnJlYWs7Ci0gICAgfQot
fQotCi12b2lkIFNwZWxsaW5nQ29ycmVjdGlvbkNvbnRyb2xsZXI6OnJlc3BvbmRUb0FwcGxpZWRF
ZGl0aW5nKENvbXBvc2l0ZUVkaXRDb21tYW5kKiBjb21tYW5kKQotewotICAgIGlmIChjb21tYW5k
LT5pc1RvcExldmVsQ29tbWFuZCgpICYmICFjb21tYW5kLT5zaG91bGRSZXRhaW5BdXRvY29ycmVj
dGlvbkluZGljYXRvcigpKQotICAgICAgICBtX2ZyYW1lLT5kb2N1bWVudCgpLT5tYXJrZXJzKCkt
PnJlbW92ZU1hcmtlcnMoRG9jdW1lbnRNYXJrZXI6OkNvcnJlY3Rpb25JbmRpY2F0b3IpOwotCi0g
ICAgbWFya1ByZWNlZGluZ1doaXRlc3BhY2VGb3JEZWxldGVkQXV0b2NvcnJlY3Rpb25BZnRlckNv
bW1hbmQoY29tbWFuZCk7Ci0gICAgbV9vcmlnaW5hbFN0cmluZ0Zvckxhc3REZWxldGVkQXV0b2Nv
cnJlY3Rpb24gPSBTdHJpbmcoKTsKLX0KLQotdm9pZCBTcGVsbGluZ0NvcnJlY3Rpb25Db250cm9s
bGVyOjpyZXNwb25kVG9VbmFwcGxpZWRFZGl0aW5nKEVkaXRDb21tYW5kQ29tcG9zaXRpb24qIGNv
bW1hbmQpCi17Ci0gICAgaWYgKCFjb21tYW5kLT53YXNDcmVhdGVMaW5rQ29tbWFuZCgpKQotICAg
ICAgICByZXR1cm47Ci0gICAgUmVmUHRyPFJhbmdlPiByYW5nZSA9IFJhbmdlOjpjcmVhdGUobV9m
cmFtZS0+ZG9jdW1lbnQoKSwgY29tbWFuZC0+c3RhcnRpbmdTZWxlY3Rpb24oKS5zdGFydCgpLCBj
b21tYW5kLT5zdGFydGluZ1NlbGVjdGlvbigpLmVuZCgpKTsKLSAgICBpZiAoIXJhbmdlKQotICAg
ICAgICByZXR1cm47Ci0gICAgRG9jdW1lbnRNYXJrZXJDb250cm9sbGVyKiBtYXJrZXJzID0gbV9m
cmFtZS0+ZG9jdW1lbnQoKS0+bWFya2VycygpOwotICAgIG1hcmtlcnMtPmFkZE1hcmtlcihyYW5n
ZS5nZXQoKSwgRG9jdW1lbnRNYXJrZXI6OlJlcGxhY2VtZW50KTsKLSAgICBtYXJrZXJzLT5hZGRN
YXJrZXIocmFuZ2UuZ2V0KCksIERvY3VtZW50TWFya2VyOjpTcGVsbENoZWNraW5nRXhlbXB0aW9u
KTsKLX0KLQotRWRpdG9yQ2xpZW50KiBTcGVsbGluZ0NvcnJlY3Rpb25Db250cm9sbGVyOjpjbGll
bnQoKQotewotICAgIHJldHVybiBtX2ZyYW1lLT5wYWdlKCkgPyBtX2ZyYW1lLT5wYWdlKCktPmVk
aXRvckNsaWVudCgpIDogMDsKLX0KLQotVGV4dENoZWNrZXJDbGllbnQqIFNwZWxsaW5nQ29ycmVj
dGlvbkNvbnRyb2xsZXI6OnRleHRDaGVja2VyKCkKLXsKLSAgICBpZiAoRWRpdG9yQ2xpZW50KiBv
d25lciA9IGNsaWVudCgpKQotICAgICAgICByZXR1cm4gb3duZXItPnRleHRDaGVja2VyKCk7Ci0g
ICAgcmV0dXJuIDA7Ci19Ci0KLXZvaWQgU3BlbGxpbmdDb3JyZWN0aW9uQ29udHJvbGxlcjo6cmVj
b3JkQXV0b2NvcnJlY3Rpb25SZXNwb25zZVJldmVyc2VkKGNvbnN0IFN0cmluZyYgcmVwbGFjZWRT
dHJpbmcsIGNvbnN0IFN0cmluZyYgcmVwbGFjZW1lbnRTdHJpbmcpCi17Ci0gICAgY2xpZW50KCkt
PnJlY29yZEF1dG9jb3JyZWN0aW9uUmVzcG9uc2UoRWRpdG9yQ2xpZW50OjpBdXRvY29ycmVjdGlv
blJldmVydGVkLCByZXBsYWNlZFN0cmluZywgcmVwbGFjZW1lbnRTdHJpbmcpOwotfQotCi12b2lk
IFNwZWxsaW5nQ29ycmVjdGlvbkNvbnRyb2xsZXI6OnJlY29yZEF1dG9jb3JyZWN0aW9uUmVzcG9u
c2VSZXZlcnNlZChjb25zdCBTdHJpbmcmIHJlcGxhY2VkU3RyaW5nLCBQYXNzUmVmUHRyPFJhbmdl
PiByZXBsYWNlbWVudFJhbmdlKQotewotICAgIHJlY29yZEF1dG9jb3JyZWN0aW9uUmVzcG9uc2VS
ZXZlcnNlZChyZXBsYWNlZFN0cmluZywgcGxhaW5UZXh0KHJlcGxhY2VtZW50UmFuZ2UuZ2V0KCkp
KTsKLX0KLQotdm9pZCBTcGVsbGluZ0NvcnJlY3Rpb25Db250cm9sbGVyOjptYXJrUmV2ZXJzZWQo
UGFzc1JlZlB0cjxSYW5nZT4gY2hhbmdlZFJhbmdlKQotewotICAgIGNoYW5nZWRSYW5nZS0+c3Rh
cnRDb250YWluZXIoKS0+ZG9jdW1lbnQoKS0+bWFya2VycygpLT5yZW1vdmVNYXJrZXJzKGNoYW5n
ZWRSYW5nZS5nZXQoKSwgRG9jdW1lbnRNYXJrZXI6OkF1dG9jb3JyZWN0ZWQsIERvY3VtZW50TWFy
a2VyQ29udHJvbGxlcjo6UmVtb3ZlUGFydGlhbGx5T3ZlcmxhcHBpbmdNYXJrZXIpOwotICAgIGNo
YW5nZWRSYW5nZS0+c3RhcnRDb250YWluZXIoKS0+ZG9jdW1lbnQoKS0+bWFya2VycygpLT5hZGRN
YXJrZXIoY2hhbmdlZFJhbmdlLmdldCgpLCBEb2N1bWVudE1hcmtlcjo6U3BlbGxDaGVja2luZ0V4
ZW1wdGlvbik7Ci19Ci0KLXZvaWQgU3BlbGxpbmdDb3JyZWN0aW9uQ29udHJvbGxlcjo6bWFya0Nv
cnJlY3Rpb24oUGFzc1JlZlB0cjxSYW5nZT4gcmVwbGFjZWRSYW5nZSwgY29uc3QgU3RyaW5nJiBy
ZXBsYWNlZFN0cmluZykKLXsKLSAgICBWZWN0b3I8RG9jdW1lbnRNYXJrZXI6Ok1hcmtlclR5cGU+
IG1hcmtlclR5cGVzVG9BZGQgPSBtYXJrZXJUeXBlc0ZvckF1dG9jb3JyZWN0aW9uKCk7Ci0gICAg
RG9jdW1lbnRNYXJrZXJDb250cm9sbGVyKiBtYXJrZXJzID0gcmVwbGFjZWRSYW5nZS0+c3RhcnRD
b250YWluZXIoKS0+ZG9jdW1lbnQoKS0+bWFya2VycygpOwotICAgIGZvciAoc2l6ZV90IGkgPSAw
OyBpIDwgbWFya2VyVHlwZXNUb0FkZC5zaXplKCk7ICsraSkgewotICAgICAgICBEb2N1bWVudE1h
cmtlcjo6TWFya2VyVHlwZSBtYXJrZXJUeXBlID0gbWFya2VyVHlwZXNUb0FkZFtpXTsKLSAgICAg
ICAgaWYgKG1hcmtlclR5cGUgPT0gRG9jdW1lbnRNYXJrZXI6OlJlcGxhY2VtZW50IHx8IG1hcmtl
clR5cGUgPT0gRG9jdW1lbnRNYXJrZXI6OkF1dG9jb3JyZWN0ZWQpCi0gICAgICAgICAgICBtYXJr
ZXJzLT5hZGRNYXJrZXIocmVwbGFjZWRSYW5nZS5nZXQoKSwgbWFya2VyVHlwZSwgcmVwbGFjZWRT
dHJpbmcpOwotICAgICAgICBlbHNlCi0gICAgICAgICAgICBtYXJrZXJzLT5hZGRNYXJrZXIocmVw
bGFjZWRSYW5nZS5nZXQoKSwgbWFya2VyVHlwZSk7Ci0gICAgfQotfQotCi12b2lkIFNwZWxsaW5n
Q29ycmVjdGlvbkNvbnRyb2xsZXI6OnJlY29yZFNwZWxsY2hlY2tlclJlc3BvbnNlRm9yTW9kaWZp
ZWRDb3JyZWN0aW9uKFJhbmdlKiByYW5nZU9mQ29ycmVjdGlvbiwgY29uc3QgU3RyaW5nJiBjb3Jy
ZWN0ZWQsIGNvbnN0IFN0cmluZyYgY29ycmVjdGlvbikKLXsKLSAgICBpZiAoIXJhbmdlT2ZDb3Jy
ZWN0aW9uKQotICAgICAgICByZXR1cm47Ci0gICAgRG9jdW1lbnRNYXJrZXJDb250cm9sbGVyKiBt
YXJrZXJzID0gcmFuZ2VPZkNvcnJlY3Rpb24tPnN0YXJ0Q29udGFpbmVyKCktPmRvY3VtZW50KCkt
Pm1hcmtlcnMoKTsKLSAgICBWZWN0b3I8RG9jdW1lbnRNYXJrZXIqPiBjb3JyZWN0ZWRPbmNlTWFy
a2VycyA9IG1hcmtlcnMtPm1hcmtlcnNJblJhbmdlKHJhbmdlT2ZDb3JyZWN0aW9uLCBEb2N1bWVu
dE1hcmtlcjo6QXV0b2NvcnJlY3RlZCk7Ci0gICAgaWYgKGNvcnJlY3RlZE9uY2VNYXJrZXJzLmlz
RW1wdHkoKSkKLSAgICAgICAgcmV0dXJuOwotICAgIAotICAgIC8vIFNwZWxsaW5nIGNvcnJlY3Rl
ZCB0ZXh0IGhhcyBiZWVuIGVkaXRlZC4gV2UgbmVlZCB0byBkZXRlcm1pbmUgd2hldGhlciB1c2Vy
IGhhcyByZXZlcnRlZCBpdCB0byBvcmlnaW5hbCB0ZXh0IG9yCi0gICAgLy8gZWRpdGVkIGl0IHRv
IHNvbWV0aGluZyBlbHNlLCBhbmQgbm90aWZ5IHNwZWxsY2hlY2tlciBhY2NvcmRpbmdseS4KLSAg
ICBpZiAobWFya2Vyc0hhdmVJZGVudGljYWxEZXNjcmlwdGlvbihjb3JyZWN0ZWRPbmNlTWFya2Vy
cykgJiYgY29ycmVjdGVkT25jZU1hcmtlcnNbMF0tPmRlc2NyaXB0aW9uKCkgPT0gY29ycmVjdGVk
KQotICAgICAgICBjbGllbnQoKS0+cmVjb3JkQXV0b2NvcnJlY3Rpb25SZXNwb25zZShFZGl0b3JD
bGllbnQ6OkF1dG9jb3JyZWN0aW9uUmV2ZXJ0ZWQsIGNvcnJlY3RlZCwgY29ycmVjdGlvbik7Ci0g
ICAgZWxzZQotICAgICAgICBjbGllbnQoKS0+cmVjb3JkQXV0b2NvcnJlY3Rpb25SZXNwb25zZShF
ZGl0b3JDbGllbnQ6OkF1dG9jb3JyZWN0aW9uRWRpdGVkLCBjb3JyZWN0ZWQsIGNvcnJlY3Rpb24p
OwotICAgIG1hcmtlcnMtPnJlbW92ZU1hcmtlcnMocmFuZ2VPZkNvcnJlY3Rpb24sIERvY3VtZW50
TWFya2VyOjpBdXRvY29ycmVjdGVkLCBEb2N1bWVudE1hcmtlckNvbnRyb2xsZXI6OlJlbW92ZVBh
cnRpYWxseU92ZXJsYXBwaW5nTWFya2VyKTsKLX0KLQotdm9pZCBTcGVsbGluZ0NvcnJlY3Rpb25D
b250cm9sbGVyOjpkZWxldGVkQXV0b2NvcnJlY3Rpb25BdFBvc2l0aW9uKGNvbnN0IFBvc2l0aW9u
JiBwb3NpdGlvbiwgY29uc3QgU3RyaW5nJiBvcmlnaW5hbFN0cmluZykKLXsKLSAgICBtX29yaWdp
bmFsU3RyaW5nRm9yTGFzdERlbGV0ZWRBdXRvY29ycmVjdGlvbiA9IG9yaWdpbmFsU3RyaW5nOwot
ICAgIG1fcG9zaXRpb25Gb3JMYXN0RGVsZXRlZEF1dG9jb3JyZWN0aW9uID0gcG9zaXRpb247Ci19
Ci0KLXZvaWQgU3BlbGxpbmdDb3JyZWN0aW9uQ29udHJvbGxlcjo6bWFya1ByZWNlZGluZ1doaXRl
c3BhY2VGb3JEZWxldGVkQXV0b2NvcnJlY3Rpb25BZnRlckNvbW1hbmQoRWRpdENvbW1hbmQqIGNv
bW1hbmQpCi17Ci0gICAgUG9zaXRpb24gZW5kT2ZTZWxlY3Rpb24gPSBjb21tYW5kLT5lbmRpbmdT
ZWxlY3Rpb24oKS5lbmQoKTsKLSAgICBpZiAoZW5kT2ZTZWxlY3Rpb24gIT0gbV9wb3NpdGlvbkZv
ckxhc3REZWxldGVkQXV0b2NvcnJlY3Rpb24pCi0gICAgICAgIHJldHVybjsKLQotICAgIFBvc2l0
aW9uIHByZWNlZGluZ0NoYXJhY3RlclBvc2l0aW9uID0gZW5kT2ZTZWxlY3Rpb24ucHJldmlvdXMo
KTsKLSAgICBpZiAoZW5kT2ZTZWxlY3Rpb24gPT0gcHJlY2VkaW5nQ2hhcmFjdGVyUG9zaXRpb24p
Ci0gICAgICAgIHJldHVybjsKLQotICAgIFJlZlB0cjxSYW5nZT4gcHJlY2VkaW5nQ2hhcmFjdGVy
UmFuZ2UgPSBSYW5nZTo6Y3JlYXRlKG1fZnJhbWUtPmRvY3VtZW50KCksIHByZWNlZGluZ0NoYXJh
Y3RlclBvc2l0aW9uLCBlbmRPZlNlbGVjdGlvbik7Ci0gICAgU3RyaW5nIHN0cmluZyA9IHBsYWlu
VGV4dChwcmVjZWRpbmdDaGFyYWN0ZXJSYW5nZS5nZXQoKSk7Ci0gICAgaWYgKHN0cmluZy5pc0Vt
cHR5KCkgfHwgIWlzV2hpdGVzcGFjZShzdHJpbmdbc3RyaW5nLmxlbmd0aCgpIC0gMV0pKQotICAg
ICAgICByZXR1cm47Ci0KLSAgICAvLyBNYXJrIHRoaXMgd2hpdGVzcGFjZSB0byBpbmRpY2F0ZSB3
ZSBoYXZlIGRlbGV0ZWQgYW4gYXV0b2NvcnJlY3Rpb24gZm9sbG93aW5nIHRoaXMKLSAgICAvLyB3
aGl0ZXNwYWNlLiBTbyBpZiB0aGUgdXNlciB0eXBlcyB0aGUgc2FtZSBvcmlnaW5hbCB3b3JkIGFn
YWluIGF0IHRoaXMgcG9zaXRpb24sIHdlCi0gICAgLy8gd29uJ3QgYXV0b2NvcnJlY3QgaXQgYWdh
aW4uCi0gICAgbV9mcmFtZS0+ZG9jdW1lbnQoKS0+bWFya2VycygpLT5hZGRNYXJrZXIocHJlY2Vk
aW5nQ2hhcmFjdGVyUmFuZ2UuZ2V0KCksIERvY3VtZW50TWFya2VyOjpEZWxldGVkQXV0b2NvcnJl
Y3Rpb24sIG1fb3JpZ2luYWxTdHJpbmdGb3JMYXN0RGVsZXRlZEF1dG9jb3JyZWN0aW9uKTsKLX0K
LQotYm9vbCBTcGVsbGluZ0NvcnJlY3Rpb25Db250cm9sbGVyOjpwcm9jZXNzTWFya2Vyc09uVGV4
dFRvQmVSZXBsYWNlZEJ5UmVzdWx0KGNvbnN0IFRleHRDaGVja2luZ1Jlc3VsdCogcmVzdWx0LCBS
YW5nZSogcmFuZ2VUb0JlUmVwbGFjZWQsIGNvbnN0IFN0cmluZyYgc3RyaW5nVG9CZVJlcGxhY2Vk
KQotewotICAgIERvY3VtZW50TWFya2VyQ29udHJvbGxlciogbWFya2VyQ29udHJvbGxlciA9IG1f
ZnJhbWUtPmRvY3VtZW50KCktPm1hcmtlcnMoKTsKLSAgICBpZiAobWFya2VyQ29udHJvbGxlci0+
aGFzTWFya2VycyhyYW5nZVRvQmVSZXBsYWNlZCwgRG9jdW1lbnRNYXJrZXI6OlJlcGxhY2VtZW50
KSkgewotICAgICAgICBpZiAocmVzdWx0LT50eXBlID09IFRleHRDaGVja2luZ1R5cGVDb3JyZWN0
aW9uKQotICAgICAgICAgICAgcmVjb3JkU3BlbGxjaGVja2VyUmVzcG9uc2VGb3JNb2RpZmllZENv
cnJlY3Rpb24ocmFuZ2VUb0JlUmVwbGFjZWQsIHN0cmluZ1RvQmVSZXBsYWNlZCwgcmVzdWx0LT5y
ZXBsYWNlbWVudCk7Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci0KLSAgICBpZiAobWFy
a2VyQ29udHJvbGxlci0+aGFzTWFya2VycyhyYW5nZVRvQmVSZXBsYWNlZCwgRG9jdW1lbnRNYXJr
ZXI6OlJlamVjdGVkQ29ycmVjdGlvbikpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIFBv
c2l0aW9uIGJlZ2lubmluZ09mUmFuZ2UgPSByYW5nZVRvQmVSZXBsYWNlZC0+c3RhcnRQb3NpdGlv
bigpOwotICAgIFBvc2l0aW9uIHByZWNlZGluZ0NoYXJhY3RlclBvc2l0aW9uID0gYmVnaW5uaW5n
T2ZSYW5nZS5wcmV2aW91cygpOwotICAgIFJlZlB0cjxSYW5nZT4gcHJlY2VkaW5nQ2hhcmFjdGVy
UmFuZ2UgPSBSYW5nZTo6Y3JlYXRlKG1fZnJhbWUtPmRvY3VtZW50KCksIHByZWNlZGluZ0NoYXJh
Y3RlclBvc2l0aW9uLCBiZWdpbm5pbmdPZlJhbmdlKTsKLQotICAgIFZlY3RvcjxEb2N1bWVudE1h
cmtlcio+IG1hcmtlcnMgPSBtYXJrZXJDb250cm9sbGVyLT5tYXJrZXJzSW5SYW5nZShwcmVjZWRp
bmdDaGFyYWN0ZXJSYW5nZS5nZXQoKSwgRG9jdW1lbnRNYXJrZXI6OkRlbGV0ZWRBdXRvY29ycmVj
dGlvbik7Ci0KLSAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IG1hcmtlcnMuc2l6ZSgpOyArK2kp
IHsKLSAgICAgICAgaWYgKG1hcmtlcnNbaV0tPmRlc2NyaXB0aW9uKCkgPT0gc3RyaW5nVG9CZVJl
cGxhY2VkKQotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLQotICAgIHJldHVybiB0
cnVlOwotfQotICAgIAotI2VuZGlmCi0KLX0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKSW5kZXg6IFNv
dXJjZS9XZWJDb3JlL2VkaXRpbmcvU3BlbGxpbmdDb3JyZWN0aW9uQ29udHJvbGxlci5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2VkaXRpbmcvU3BlbGxpbmdDb3JyZWN0aW9uQ29udHJv
bGxlci5oCShyZXZpc2lvbiAxMTI5NjEpCisrKyBTb3VyY2UvV2ViQ29yZS9lZGl0aW5nL1NwZWxs
aW5nQ29ycmVjdGlvbkNvbnRyb2xsZXIuaAkod29ya2luZyBjb3B5KQpAQCAtMSwxNTcgKzAsMCBA
QAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm
b3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv
dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBS
ZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHly
aWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11
c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAg
IGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBk
aXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBD
T01QVVRFUiwgSU5DLiBgYEFTIElTJycgQU5EIEFOWQotICogRVhQUkVTUyBPUiBJTVBMSUVEIFdB
UlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKLSAqIElNUExJRUQg
V0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxB
UgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIENP
TVBVVEVSLCBJTkMuIE9SCi0gKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNU
LCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKLSAqIEVYRU1QTEFSWSwgT1IgQ09OU0VR
VUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFBST0NV
UkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRB
LCBPUgotICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNF
RCBBTkQgT04gQU5ZIFRIRU9SWQotICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNU
LCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1Ig
T1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLSAqIE9GIFRISVMg
U09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1B
R0UuCi0gKi8KLQotI2lmbmRlZiBTcGVsbGluZ0NvcnJlY3Rpb25Db250cm9sbGVyX2gKLSNkZWZp
bmUgU3BlbGxpbmdDb3JyZWN0aW9uQ29udHJvbGxlcl9oCi0KLSNpbmNsdWRlICJEb2N1bWVudE1h
cmtlci5oIgotI2luY2x1ZGUgIlJhbmdlLmgiCi0jaW5jbHVkZSAiVGV4dENoZWNraW5nLmgiCi0j
aW5jbHVkZSAiVGltZXIuaCIKLSNpbmNsdWRlICJWaXNpYmxlU2VsZWN0aW9uLmgiCi0jaW5jbHVk
ZSA8d3RmL05vbmNvcHlhYmxlLmg+Ci0jaW5jbHVkZSA8d3RmL1VudXNlZFBhcmFtLmg+Ci0KLW5h
bWVzcGFjZSBXZWJDb3JlIHsKLQotY2xhc3MgQ29tcG9zaXRlRWRpdENvbW1hbmQ7Ci1jbGFzcyBF
ZGl0b3JDbGllbnQ7Ci1jbGFzcyBFZGl0Q29tbWFuZDsKLWNsYXNzIEVkaXRDb21tYW5kQ29tcG9z
aXRpb247Ci1jbGFzcyBGcmFtZTsKLWNsYXNzIFRleHRDaGVja2VyQ2xpZW50OwotCi1zdHJ1Y3Qg
Q29ycmVjdGlvblBhbmVsSW5mbyB7Ci0gICAgZW51bSBQYW5lbFR5cGUgewotICAgICAgICBQYW5l
bFR5cGVDb3JyZWN0aW9uID0gMCwKLSAgICAgICAgUGFuZWxUeXBlUmV2ZXJzaW9uLAotICAgICAg
ICBQYW5lbFR5cGVTcGVsbGluZ1N1Z2dlc3Rpb25zCi0gICAgfTsKLQotICAgIFJlZlB0cjxSYW5n
ZT4gcmFuZ2VUb0JlUmVwbGFjZWQ7Ci0gICAgU3RyaW5nIHJlcGxhY2VkU3RyaW5nOwotICAgIFN0
cmluZyByZXBsYWNlbWVudFN0cmluZzsKLSAgICBQYW5lbFR5cGUgcGFuZWxUeXBlOwotICAgIGJv
b2wgaXNBY3RpdmU7Ci19OwotCi1zdHJ1Y3QgVGV4dENoZWNraW5nUmVzdWx0OwotCi1lbnVtIFJl
YXNvbkZvckRpc21pc3NpbmdDb3JyZWN0aW9uUGFuZWwgewotICAgIFJlYXNvbkZvckRpc21pc3Np
bmdDb3JyZWN0aW9uUGFuZWxDYW5jZWxsZWQgPSAwLAotICAgIFJlYXNvbkZvckRpc21pc3NpbmdD
b3JyZWN0aW9uUGFuZWxJZ25vcmVkLAotICAgIFJlYXNvbkZvckRpc21pc3NpbmdDb3JyZWN0aW9u
UGFuZWxBY2NlcHRlZAotfTsKLQotI2lmIFVTRShBVVRPQ09SUkVDVElPTl9QQU5FTCkKLSNkZWZp
bmUgVU5MRVNTX0VOQUJMRUQoZnVuY3Rpb25Cb2R5KSA7Ci0jZWxzZQotI2RlZmluZSBVTkxFU1Nf
RU5BQkxFRChmdW5jdGlvbkJvZHkpIGZ1bmN0aW9uQm9keQotI2VuZGlmCi0KLWNsYXNzIFNwZWxs
aW5nQ29ycmVjdGlvbkNvbnRyb2xsZXIgewotICAgIFdURl9NQUtFX05PTkNPUFlBQkxFKFNwZWxs
aW5nQ29ycmVjdGlvbkNvbnRyb2xsZXIpOyBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsKLXB1Ymxp
YzoKLSAgICBTcGVsbGluZ0NvcnJlY3Rpb25Db250cm9sbGVyKEZyYW1lKikgVU5MRVNTX0VOQUJM
RUQoe30pCi0gICAgflNwZWxsaW5nQ29ycmVjdGlvbkNvbnRyb2xsZXIoKSBVTkxFU1NfRU5BQkxF
RCh7fSkKLQotICAgIHZvaWQgc3RhcnRDb3JyZWN0aW9uUGFuZWxUaW1lcihDb3JyZWN0aW9uUGFu
ZWxJbmZvOjpQYW5lbFR5cGUpIFVOTEVTU19FTkFCTEVEKHt9KQotICAgIHZvaWQgc3RvcENvcnJl
Y3Rpb25QYW5lbFRpbWVyKCkgVU5MRVNTX0VOQUJMRUQoe30pCi0KLSAgICB2b2lkIGRpc21pc3Mo
UmVhc29uRm9yRGlzbWlzc2luZ0NvcnJlY3Rpb25QYW5lbCkgVU5MRVNTX0VOQUJMRUQoe30pCi0g
ICAgU3RyaW5nIGRpc21pc3NTb29uKFJlYXNvbkZvckRpc21pc3NpbmdDb3JyZWN0aW9uUGFuZWwp
IFVOTEVTU19FTkFCTEVEKHsgcmV0dXJuIFN0cmluZygpOyB9KQotICAgIHZvaWQgc2hvdyhQYXNz
UmVmUHRyPFJhbmdlPiByYW5nZVRvUmVwbGFjZSwgY29uc3QgU3RyaW5nJiByZXBsYWNlbWVudCkg
VU5MRVNTX0VOQUJMRUQoeyBVTlVTRURfUEFSQU0ocmFuZ2VUb1JlcGxhY2UpOyBVTlVTRURfUEFS
QU0ocmVwbGFjZW1lbnQpOyB9KQotCi0gICAgdm9pZCBhcHBseUNvcnJlY3Rpb25QYW5lbEluZm8o
Y29uc3QgVmVjdG9yPERvY3VtZW50TWFya2VyOjpNYXJrZXJUeXBlPiYpIFVOTEVTU19FTkFCTEVE
KHt9KQotICAgIC8vIFJldHVybiB0cnVlIGlmIGNvcnJlY3Rpb24gd2FzIGFwcGxpZWQsIGZhbHNl
IG90aGVyd2lzZS4KLSAgICBib29sIGFwcGx5QXV0b2NvcnJlY3Rpb25CZWZvcmVUeXBpbmdJZkFw
cHJvcHJpYXRlKCkgVU5MRVNTX0VOQUJMRUQoeyByZXR1cm4gZmFsc2U7IH0pCi0KLSAgICB2b2lk
IHJlc3BvbmRUb1VuYXBwbGllZFNwZWxsQ29ycmVjdGlvbihjb25zdCBWaXNpYmxlU2VsZWN0aW9u
JiwgY29uc3QgU3RyaW5nJiBjb3JyZWN0ZWQsIGNvbnN0IFN0cmluZyYgY29ycmVjdGlvbikgVU5M
RVNTX0VOQUJMRUQoeyBVTlVTRURfUEFSQU0oY29ycmVjdGVkKTsgVU5VU0VEX1BBUkFNKGNvcnJl
Y3Rpb24pOyB9KQotICAgIHZvaWQgcmVzcG9uZFRvQXBwbGllZEVkaXRpbmcoQ29tcG9zaXRlRWRp
dENvbW1hbmQqKSBVTkxFU1NfRU5BQkxFRCh7IH0pCi0gICAgdm9pZCByZXNwb25kVG9VbmFwcGxp
ZWRFZGl0aW5nKEVkaXRDb21tYW5kQ29tcG9zaXRpb24qKSBVTkxFU1NfRU5BQkxFRCh7IH0pCi0g
ICAgdm9pZCByZXNwb25kVG9DaGFuZ2VkU2VsZWN0aW9uKGNvbnN0IFZpc2libGVTZWxlY3Rpb24m
IG9sZFNlbGVjdGlvbikgVU5MRVNTX0VOQUJMRUQoeyBVTlVTRURfUEFSQU0ob2xkU2VsZWN0aW9u
KTsgfSkKLQotICAgIHZvaWQgc3RvcFBlbmRpbmdDb3JyZWN0aW9uKGNvbnN0IFZpc2libGVTZWxl
Y3Rpb24mIG9sZFNlbGVjdGlvbikgVU5MRVNTX0VOQUJMRUQoeyBVTlVTRURfUEFSQU0ob2xkU2Vs
ZWN0aW9uKTsgfSkKLSAgICB2b2lkIGFwcGx5UGVuZGluZ0NvcnJlY3Rpb24oY29uc3QgVmlzaWJs
ZVNlbGVjdGlvbiYgc2VsZWN0aW9uQWZ0ZXJUeXBpbmcpIFVOTEVTU19FTkFCTEVEKHsgVU5VU0VE
X1BBUkFNKHNlbGVjdGlvbkFmdGVyVHlwaW5nKTsgfSkKLQotICAgIHZvaWQgaGFuZGxlQ29ycmVj
dGlvblBhbmVsUmVzdWx0KGNvbnN0IFN0cmluZyYgY29ycmVjdGlvbikgVU5MRVNTX0VOQUJMRUQo
eyBVTlVTRURfUEFSQU0oY29ycmVjdGlvbik7IH0pCi0gICAgdm9pZCBoYW5kbGVDYW5jZWxPcGVy
YXRpb24oKSBVTkxFU1NfRU5BQkxFRCh7fSkKLQotICAgIGJvb2wgaGFzUGVuZGluZ0NvcnJlY3Rp
b24oKSBjb25zdCBVTkxFU1NfRU5BQkxFRCh7IHJldHVybiBmYWxzZTsgfSkKLSAgICBib29sIGlz
U3BlbGxpbmdNYXJrZXJBbGxvd2VkKFBhc3NSZWZQdHI8UmFuZ2U+IG1pc3NwZWxsaW5nUmFuZ2Up
IGNvbnN0IFVOTEVTU19FTkFCTEVEKHsgVU5VU0VEX1BBUkFNKG1pc3NwZWxsaW5nUmFuZ2UpOyBy
ZXR1cm4gdHJ1ZTsgfSkKLSAgICBib29sIGlzQXV0b21hdGljU3BlbGxpbmdDb3JyZWN0aW9uRW5h
YmxlZCgpIFVOTEVTU19FTkFCTEVEKHsgcmV0dXJuIGZhbHNlOyB9KQotICAgIGJvb2wgc2hvdWxk
UmVtb3ZlTWFya2Vyc1Vwb25FZGl0aW5nKCk7Ci0KLSAgICB2b2lkIGNvcnJlY3Rpb25QYW5lbFRp
bWVyRmlyZWQoVGltZXI8U3BlbGxpbmdDb3JyZWN0aW9uQ29udHJvbGxlcj4qKSBVTkxFU1NfRU5B
QkxFRCh7fSkKLSAgICB2b2lkIHJlY29yZEF1dG9jb3JyZWN0aW9uUmVzcG9uc2VSZXZlcnNlZChj
b25zdCBTdHJpbmcmIHJlcGxhY2VkU3RyaW5nLCBQYXNzUmVmUHRyPFJhbmdlPiByZXBsYWNlbWVu
dFJhbmdlKSBVTkxFU1NfRU5BQkxFRCh7IFVOVVNFRF9QQVJBTShyZXBsYWNlZFN0cmluZyk7IFVO
VVNFRF9QQVJBTShyZXBsYWNlbWVudFJhbmdlKTsgfSkKLSAgICB2b2lkIG1hcmtSZXZlcnNlZChQ
YXNzUmVmUHRyPFJhbmdlPiBjaGFuZ2VkUmFuZ2UpIFVOTEVTU19FTkFCTEVEKHsgVU5VU0VEX1BB
UkFNKGNoYW5nZWRSYW5nZSk7IH0pCi0gICAgdm9pZCBtYXJrQ29ycmVjdGlvbihQYXNzUmVmUHRy
PFJhbmdlPiByZXBsYWNlZFJhbmdlLCBjb25zdCBTdHJpbmcmIHJlcGxhY2VkU3RyaW5nKSBVTkxF
U1NfRU5BQkxFRCh7IFVOVVNFRF9QQVJBTShyZXBsYWNlZFJhbmdlKTsgVU5VU0VEX1BBUkFNKHJl
cGxhY2VkU3RyaW5nKTsgfSkKLSAgICB2b2lkIHJlY29yZFNwZWxsY2hlY2tlclJlc3BvbnNlRm9y
TW9kaWZpZWRDb3JyZWN0aW9uKFJhbmdlKiByYW5nZU9mQ29ycmVjdGlvbiwgY29uc3QgU3RyaW5n
JiBjb3JyZWN0ZWQsIGNvbnN0IFN0cmluZyYgY29ycmVjdGlvbikgVU5MRVNTX0VOQUJMRUQoeyBV
TlVTRURfUEFSQU0ocmFuZ2VPZkNvcnJlY3Rpb24pOyBVTlVTRURfUEFSQU0oY29ycmVjdGVkKTsg
VU5VU0VEX1BBUkFNKGNvcnJlY3Rpb24pOyB9KQotCi0gICAgLy8gVGhpcyBmdW5jdGlvbiByZXR1
cm5zIGZhbHNlIGlmIHRoZSByZXBsYWNlbWVudCBzaG91bGQgbm90IGJlIGNhcnJpZWQgb3V0Lgot
ICAgIGJvb2wgcHJvY2Vzc01hcmtlcnNPblRleHRUb0JlUmVwbGFjZWRCeVJlc3VsdChjb25zdCBU
ZXh0Q2hlY2tpbmdSZXN1bHQqLCBSYW5nZSogcmFuZ2VUb0JlUmVwbGFjZWQsIGNvbnN0IFN0cmlu
ZyYgc3RyaW5nVG9CZVJlcGxhY2VkKSBVTkxFU1NfRU5BQkxFRCh7IFVOVVNFRF9QQVJBTShyYW5n
ZVRvQmVSZXBsYWNlZCk7IFVOVVNFRF9QQVJBTShzdHJpbmdUb0JlUmVwbGFjZWQpOyByZXR1cm4g
dHJ1ZTsgfSk7Ci0gICAgdm9pZCBkZWxldGVkQXV0b2NvcnJlY3Rpb25BdFBvc2l0aW9uKGNvbnN0
IFBvc2l0aW9uJiwgY29uc3QgU3RyaW5nJiBvcmlnaW5hbFN0cmluZykgVU5MRVNTX0VOQUJMRUQo
eyBVTlVTRURfUEFSQU0ob3JpZ2luYWxTdHJpbmcpOyB9KQotCi0jaWYgVVNFKEFVVE9DT1JSRUNU
SU9OX1BBTkVMKQotcHJpdmF0ZToKLSAgICB2b2lkIHJlY29yZEF1dG9jb3JyZWN0aW9uUmVzcG9u
c2VSZXZlcnNlZChjb25zdCBTdHJpbmcmIHJlcGxhY2VkU3RyaW5nLCBjb25zdCBTdHJpbmcmIHJl
cGxhY2VtZW50U3RyaW5nKTsKLQotICAgIGJvb2wgc2hvdWxkU3RhcnRUaW1lckZvcihjb25zdCBE
b2N1bWVudE1hcmtlciogbWFya2VyLCBpbnQgZW5kT2Zmc2V0KSBjb25zdAotICAgIHsKLSAgICAg
ICAgcmV0dXJuICgoKG1hcmtlci0+dHlwZSgpID09IERvY3VtZW50TWFya2VyOjpSZXBsYWNlbWVu
dCAmJiAhbWFya2VyLT5kZXNjcmlwdGlvbigpLmlzTnVsbCgpKSAKLSAgICAgICAgICAgICAgICAg
fHwgbWFya2VyLT50eXBlKCkgPT0gRG9jdW1lbnRNYXJrZXI6OlNwZWxsaW5nKSAmJiBzdGF0aWNf
Y2FzdDxpbnQ+KG1hcmtlci0+ZW5kT2Zmc2V0KCkpID09IGVuZE9mZnNldCk7Ci0gICAgfQotCi0g
ICAgRWRpdG9yQ2xpZW50KiBjbGllbnQoKTsKLSAgICBUZXh0Q2hlY2tlckNsaWVudCogdGV4dENo
ZWNrZXIoKTsKLSAgICBGbG9hdFJlY3Qgcm9vdFZpZXdSZWN0Rm9yUmFuZ2UoY29uc3QgUmFuZ2Uq
KSBjb25zdDsKLSAgICB2b2lkIG1hcmtQcmVjZWRpbmdXaGl0ZXNwYWNlRm9yRGVsZXRlZEF1dG9j
b3JyZWN0aW9uQWZ0ZXJDb21tYW5kKEVkaXRDb21tYW5kKik7Ci0KLSAgICBFZGl0b3JDbGllbnQq
IG1fY2xpZW50OwotICAgIEZyYW1lKiBtX2ZyYW1lOwotCi0gICAgVGltZXI8U3BlbGxpbmdDb3Jy
ZWN0aW9uQ29udHJvbGxlcj4gbV9jb3JyZWN0aW9uUGFuZWxUaW1lcjsKLSAgICBDb3JyZWN0aW9u
UGFuZWxJbmZvIG1fY29ycmVjdGlvblBhbmVsSW5mbzsKLSAgICBib29sIG1fY29ycmVjdGlvblBh
bmVsSXNEaXNtaXNzZWRCeUVkaXRvcjsKLQotICAgIFN0cmluZyBtX29yaWdpbmFsU3RyaW5nRm9y
TGFzdERlbGV0ZWRBdXRvY29ycmVjdGlvbjsKLSAgICBQb3NpdGlvbiBtX3Bvc2l0aW9uRm9yTGFz
dERlbGV0ZWRBdXRvY29ycmVjdGlvbjsKLSNlbmRpZgotfTsKLQotI3VuZGVmIFVOTEVTU19FTkFC
TEVECi0KLWlubGluZSBib29sIFNwZWxsaW5nQ29ycmVjdGlvbkNvbnRyb2xsZXI6OnNob3VsZFJl
bW92ZU1hcmtlcnNVcG9uRWRpdGluZygpCi17Ci0jaWYgVVNFKE1BUktFUl9SRU1PVkFMX1VQT05f
RURJVElORykKLSAgICByZXR1cm4gdHJ1ZTsKLSNlbHNlCi0gICAgcmV0dXJuIGZhbHNlOwotI2Vu
ZGlmCi19Ci0KLX0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKLQotI2VuZGlmIC8vIFNwZWxsaW5nQ29y
cmVjdGlvbkNvbnRyb2xsZXJfaApJbmRleDogU291cmNlL1dlYkNvcmUvZWRpdGluZy9UeXBpbmdD
b21tYW5kLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9lZGl0aW5nL1R5cGluZ0Nv
bW1hbmQuY3BwCShyZXZpc2lvbiAxMTI5NjEpCisrKyBTb3VyY2UvV2ViQ29yZS9lZGl0aW5nL1R5
cGluZ0NvbW1hbmQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMjgsNyArMzI4LDcgQEAgdm9pZCBU
eXBpbmdDb21tYW5kOjptYXJrTWlzc3BlbGxpbmdzQWZ0ZQogICAgICAgICAgICAgICAgIHN0cmlw
cGVkUHJldmlvdXNXb3JkID0gcGxhaW5UZXh0KHJhbmdlLmdldCgpKS5zdHJpcFdoaXRlU3BhY2Uo
KTsKICAgICAgICAgICAgIGZyYW1lLT5lZGl0b3IoKS0+bWFya01pc3NwZWxsaW5nc0FmdGVyVHlw
aW5nVG9Xb3JkKHAxLCBlbmRpbmdTZWxlY3Rpb24oKSwgIXN0cmlwcGVkUHJldmlvdXNXb3JkLmlz
RW1wdHkoKSk7CiAgICAgICAgIH0gZWxzZSBpZiAoY29tbWFuZFR5cGUgPT0gVHlwaW5nQ29tbWFu
ZDo6SW5zZXJ0VGV4dCkKLSAgICAgICAgICAgIGZyYW1lLT5lZGl0b3IoKS0+c3RhcnRDb3JyZWN0
aW9uUGFuZWxUaW1lcigpOworICAgICAgICAgICAgZnJhbWUtPmVkaXRvcigpLT5zdGFydEFsdGVy
bmF0aXZlVGV4dFVJVGltZXIoKTsKICAgICB9CiB9CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2xv
YWRlci9FbXB0eUNsaWVudHMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9sb2FkZXIv
RW1wdHlDbGllbnRzLmgJKHJldmlzaW9uIDExMjk2MSkKKysrIFNvdXJjZS9XZWJDb3JlL2xvYWRl
ci9FbXB0eUNsaWVudHMuaAkod29ya2luZyBjb3B5KQpAQCAtNTIwLDkgKzUyMCw5IEBAIHB1Ymxp
YzoKICAgICBUZXh0Q2hlY2tlckNsaWVudCogdGV4dENoZWNrZXIoKSB7IHJldHVybiAmbV90ZXh0
Q2hlY2tlckNsaWVudDsgfQogCiAjaWYgVVNFKEFVVE9DT1JSRUNUSU9OX1BBTkVMKQotICAgIHZp
cnR1YWwgdm9pZCBzaG93Q29ycmVjdGlvblBhbmVsKENvcnJlY3Rpb25QYW5lbEluZm86OlBhbmVs
VHlwZSwgY29uc3QgRmxvYXRSZWN0JiwgY29uc3QgU3RyaW5nJiwgY29uc3QgU3RyaW5nJiwgY29u
c3QgVmVjdG9yPFN0cmluZz4mKSB7IH0KLSAgICB2aXJ0dWFsIHZvaWQgZGlzbWlzc0NvcnJlY3Rp
b25QYW5lbChSZWFzb25Gb3JEaXNtaXNzaW5nQ29ycmVjdGlvblBhbmVsKSB7IH0KLSAgICB2aXJ0
dWFsIFN0cmluZyBkaXNtaXNzQ29ycmVjdGlvblBhbmVsU29vbihSZWFzb25Gb3JEaXNtaXNzaW5n
Q29ycmVjdGlvblBhbmVsKSB7IHJldHVybiBTdHJpbmcoKTsgfQorICAgIHZpcnR1YWwgdm9pZCBz
aG93Q29ycmVjdGlvblBhbmVsKEFsdGVybmF0aXZlVGV4dFR5cGUsIGNvbnN0IEZsb2F0UmVjdCYs
IGNvbnN0IFN0cmluZyYsIGNvbnN0IFN0cmluZyYsIGNvbnN0IFZlY3RvcjxTdHJpbmc+JikgeyB9
CisgICAgdmlydHVhbCB2b2lkIGRpc21pc3NDb3JyZWN0aW9uUGFuZWwoUmVhc29uRm9yRGlzbWlz
c2luZ0FsdGVybmF0aXZlVGV4dCkgeyB9CisgICAgdmlydHVhbCBTdHJpbmcgZGlzbWlzc0NvcnJl
Y3Rpb25QYW5lbFNvb24oUmVhc29uRm9yRGlzbWlzc2luZ0FsdGVybmF0aXZlVGV4dCkgeyByZXR1
cm4gU3RyaW5nKCk7IH0KICAgICB2aXJ0dWFsIHZvaWQgcmVjb3JkQXV0b2NvcnJlY3Rpb25SZXNw
b25zZShBdXRvY29ycmVjdGlvblJlc3BvbnNlVHlwZSwgY29uc3QgU3RyaW5nJiwgY29uc3QgU3Ry
aW5nJikgeyB9CiAjZW5kaWYKICAgICB2aXJ0dWFsIHZvaWQgdXBkYXRlU3BlbGxpbmdVSVdpdGhH
cmFtbWFyU3RyaW5nKGNvbnN0IFN0cmluZyYsIGNvbnN0IEdyYW1tYXJEZXRhaWwmKSB7IH0KSW5k
ZXg6IFNvdXJjZS9XZWJDb3JlL3BhZ2UvRWRpdG9yQ2xpZW50LmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1dlYkNvcmUvcGFnZS9FZGl0b3JDbGllbnQuaAkocmV2aXNpb24gMTEyOTYxKQorKysgU291
cmNlL1dlYkNvcmUvcGFnZS9FZGl0b3JDbGllbnQuaAkod29ya2luZyBjb3B5KQpAQCAtMjcsNyAr
MjcsNyBAQAogI2lmbmRlZiBFZGl0b3JDbGllbnRfaAogI2RlZmluZSBFZGl0b3JDbGllbnRfaAog
Ci0jaW5jbHVkZSAiU3BlbGxpbmdDb3JyZWN0aW9uQ29udHJvbGxlci5oIgorI2luY2x1ZGUgIkFs
dGVybmF0aXZlVGV4dENvbnRyb2xsZXIuaCIKICNpbmNsdWRlICJFZGl0b3JJbnNlcnRBY3Rpb24u
aCIKICNpbmNsdWRlICJGbG9hdFJlY3QuaCIKICNpbmNsdWRlICJUZXh0QWZmaW5pdHkuaCIKQEAg
LTE1Miw5ICsxNTIsOSBAQCBwdWJsaWM6CiAgICAgfTsKIAogI2lmIFVTRShBVVRPQ09SUkVDVElP
Tl9QQU5FTCkKLSAgICB2aXJ0dWFsIHZvaWQgc2hvd0NvcnJlY3Rpb25QYW5lbChDb3JyZWN0aW9u
UGFuZWxJbmZvOjpQYW5lbFR5cGUsIGNvbnN0IEZsb2F0UmVjdCYgYm91bmRpbmdCb3hPZlJlcGxh
Y2VkU3RyaW5nLCBjb25zdCBTdHJpbmcmIHJlcGxhY2VkU3RyaW5nLCBjb25zdCBTdHJpbmcmIHJl
cGxhY21lbnRTdHJpbmcsIGNvbnN0IFZlY3RvcjxTdHJpbmc+JiBhbHRlcm5hdGl2ZVJlcGxhY2Vt
ZW50U3RyaW5ncykgPSAwOwotICAgIHZpcnR1YWwgdm9pZCBkaXNtaXNzQ29ycmVjdGlvblBhbmVs
KFJlYXNvbkZvckRpc21pc3NpbmdDb3JyZWN0aW9uUGFuZWwpID0gMDsKLSAgICB2aXJ0dWFsIFN0
cmluZyBkaXNtaXNzQ29ycmVjdGlvblBhbmVsU29vbihSZWFzb25Gb3JEaXNtaXNzaW5nQ29ycmVj
dGlvblBhbmVsKSA9IDA7CisgICAgdmlydHVhbCB2b2lkIHNob3dDb3JyZWN0aW9uUGFuZWwoQWx0
ZXJuYXRpdmVUZXh0VHlwZSwgY29uc3QgRmxvYXRSZWN0JiBib3VuZGluZ0JveE9mUmVwbGFjZWRT
dHJpbmcsIGNvbnN0IFN0cmluZyYgcmVwbGFjZWRTdHJpbmcsIGNvbnN0IFN0cmluZyYgcmVwbGFj
bWVudFN0cmluZywgY29uc3QgVmVjdG9yPFN0cmluZz4mIGFsdGVybmF0aXZlUmVwbGFjZW1lbnRT
dHJpbmdzKSA9IDA7CisgICAgdmlydHVhbCB2b2lkIGRpc21pc3NDb3JyZWN0aW9uUGFuZWwoUmVh
c29uRm9yRGlzbWlzc2luZ0FsdGVybmF0aXZlVGV4dCkgPSAwOworICAgIHZpcnR1YWwgU3RyaW5n
IGRpc21pc3NDb3JyZWN0aW9uUGFuZWxTb29uKFJlYXNvbkZvckRpc21pc3NpbmdBbHRlcm5hdGl2
ZVRleHQpID0gMDsKICAgICB2aXJ0dWFsIHZvaWQgcmVjb3JkQXV0b2NvcnJlY3Rpb25SZXNwb25z
ZShBdXRvY29ycmVjdGlvblJlc3BvbnNlVHlwZSwgY29uc3QgU3RyaW5nJiByZXBsYWNlZFN0cmlu
ZywgY29uc3QgU3RyaW5nJiByZXBsYWNlbWVudFN0cmluZykgPSAwOwogI2VuZGlmCiAKSW5kZXg6
IFNvdXJjZS9XZWJLaXQyL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0Mi9D
aGFuZ2VMb2cJKHJldmlzaW9uIDExMjk2MSkKKysrIFNvdXJjZS9XZWJLaXQyL0NoYW5nZUxvZwko
d29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDUzIEBACisyMDEyLTA0LTAyICBKaWEgUHUgIDxqcHVA
YXBwbGUuY29tPgorCisgICAgICAgIFJlbmFtZSBTcGVsbGluZ0NvcnJlY3Rpb25Db250cm9sbGVy
IHRvIEFsdGVybmF0aXZlVGV4dENvbnRyb2xsZXIuCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJr
aXQub3JnL3Nob3dfYnVnLmNnaT9pZD04Mjk0MgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9E
WSAoT09QUyEpLgorCisgICAgICAgIFRoZXNlIGNoYW5nZXMgYXJlIHNpbXBseSBmb3IgYWRvcHRp
bmcgbmV3IGNsYXNzIG5hbWVzLgorCisgICAgICAgICogVUlQcm9jZXNzL0FQSS9tYWMvUGFnZUNs
aWVudEltcGwuaDoKKyAgICAgICAgKFBhZ2VDbGllbnRJbXBsKToKKyAgICAgICAgKiBVSVByb2Nl
c3MvQVBJL21hYy9QYWdlQ2xpZW50SW1wbC5tbToKKyAgICAgICAgKFdlYktpdDo6UGFnZUNsaWVu
dEltcGw6OnNob3dDb3JyZWN0aW9uUGFuZWwpOgorICAgICAgICAoV2ViS2l0OjpQYWdlQ2xpZW50
SW1wbDo6ZGlzbWlzc0NvcnJlY3Rpb25QYW5lbCk6CisgICAgICAgIChXZWJLaXQ6OlBhZ2VDbGll
bnRJbXBsOjpkaXNtaXNzQ29ycmVjdGlvblBhbmVsU29vbik6CisgICAgICAgICogVUlQcm9jZXNz
L0FQSS9tYWMvV0tWaWV3Lm1tOgorICAgICAgICAoLVtXS1ZpZXcgaGFuZGxlQ29ycmVjdGlvblBh
bmVsUmVzdWx0Ol0pOgorICAgICAgICAqIFVJUHJvY2Vzcy9QYWdlQ2xpZW50Lmg6CisgICAgICAg
IChQYWdlQ2xpZW50KToKKyAgICAgICAgKiBVSVByb2Nlc3MvV2ViUGFnZVByb3h5LmNwcDoKKyAg
ICAgICAgKFdlYktpdDo6V2ViUGFnZVByb3h5OjpkaWRDb21taXRMb2FkRm9yRnJhbWUpOgorICAg
ICAgICAoV2ViS2l0OjpXZWJQYWdlUHJveHk6OnBhZ2VEaWRTY3JvbGwpOgorICAgICAgICAoV2Vi
S2l0OjpXZWJQYWdlUHJveHk6OnByb2Nlc3NEaWRDcmFzaCk6CisgICAgICAgIChXZWJLaXQ6Oldl
YlBhZ2VQcm94eTo6c2hvd0NvcnJlY3Rpb25QYW5lbCk6CisgICAgICAgIChXZWJLaXQ6OldlYlBh
Z2VQcm94eTo6ZGlzbWlzc0NvcnJlY3Rpb25QYW5lbCk6CisgICAgICAgIChXZWJLaXQ6OldlYlBh
Z2VQcm94eTo6ZGlzbWlzc0NvcnJlY3Rpb25QYW5lbFNvb24pOgorICAgICAgICAoV2ViS2l0OjpX
ZWJQYWdlUHJveHk6OmhhbmRsZUFsdGVybmF0aXZlVGV4dFVJUmVzdWx0KToKKyAgICAgICAgKiBV
SVByb2Nlc3MvV2ViUGFnZVByb3h5Lmg6CisgICAgICAgIChXZWJQYWdlUHJveHkpOgorICAgICAg
ICAqIFVJUHJvY2Vzcy9tYWMvQ29ycmVjdGlvblBhbmVsLmg6CisgICAgICAgIChDb3JyZWN0aW9u
UGFuZWwpOgorICAgICAgICAqIFVJUHJvY2Vzcy9tYWMvQ29ycmVjdGlvblBhbmVsLm1tOgorICAg
ICAgICAoY29ycmVjdGlvbkluZGljYXRvclR5cGUpOgorICAgICAgICAoV2ViS2l0OjpDb3JyZWN0
aW9uUGFuZWw6OkNvcnJlY3Rpb25QYW5lbCk6CisgICAgICAgIChXZWJLaXQ6OkNvcnJlY3Rpb25Q
YW5lbDo6fkNvcnJlY3Rpb25QYW5lbCk6CisgICAgICAgIChXZWJLaXQ6OkNvcnJlY3Rpb25QYW5l
bDo6c2hvdyk6CisgICAgICAgIChXZWJLaXQ6OkNvcnJlY3Rpb25QYW5lbDo6ZGlzbWlzcyk6Cisg
ICAgICAgIChXZWJLaXQ6OkNvcnJlY3Rpb25QYW5lbDo6ZGlzbWlzc0ludGVybmFsKToKKyAgICAg
ICAgKFdlYktpdDo6Q29ycmVjdGlvblBhbmVsOjpoYW5kbGVBY2NlcHRlZFJlcGxhY2VtZW50KToK
KyAgICAgICAgKiBXZWJQcm9jZXNzL1dlYkNvcmVTdXBwb3J0L1dlYkVkaXRvckNsaWVudC5oOgor
ICAgICAgICAqIFdlYlByb2Nlc3MvV2ViQ29yZVN1cHBvcnQvbWFjL1dlYkVkaXRvckNsaWVudE1h
Yy5tbToKKyAgICAgICAgKFdlYktpdDo6V2ViRWRpdG9yQ2xpZW50OjpzaG93Q29ycmVjdGlvblBh
bmVsKToKKyAgICAgICAgKFdlYktpdDo6V2ViRWRpdG9yQ2xpZW50OjpkaXNtaXNzQ29ycmVjdGlv
blBhbmVsKToKKyAgICAgICAgKFdlYktpdDo6V2ViRWRpdG9yQ2xpZW50OjpkaXNtaXNzQ29ycmVj
dGlvblBhbmVsU29vbik6CisgICAgICAgICogV2ViUHJvY2Vzcy9XZWJQYWdlL1dlYlBhZ2UuY3Bw
OgorICAgICAgICAoV2ViS2l0OjpXZWJQYWdlOjpoYW5kbGVBbHRlcm5hdGl2ZVRleHRVSVJlc3Vs
dCk6CisgICAgICAgICogV2ViUHJvY2Vzcy9XZWJQYWdlL1dlYlBhZ2UuaDoKKyAgICAgICAgKFdl
YlBhZ2UpOgorICAgICAgICAqIFdlYlByb2Nlc3MvV2ViUGFnZS9XZWJQYWdlLm1lc3NhZ2VzLmlu
OgorCiAyMDEyLTA0LTAyICBBbmRlcnMgQ2FybHNzb24gIDxhbmRlcnNjYUBhcHBsZS5jb20+CiAK
ICAgICAgICAgQ2FsbCBOUFBfU2V0VmFsdWUgd2l0aCBXS05WQ0FMYXllclJlbmRlclNlcnZlclBv
cnQgd2hlbiBhIFdLVmlldyBpcyBtb3ZlZCBmcm9tIGEgYnVmZmVyZWQgdG8gYW4gdW5idWZmZXJl
ZCB3aW5kb3csIG9yIHZpY2UgdmVyc2EKSW5kZXg6IFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9Q
YWdlQ2xpZW50LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL1BhZ2VD
bGllbnQuaAkocmV2aXNpb24gMTEyOTYxKQorKysgU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL1Bh
Z2VDbGllbnQuaAkod29ya2luZyBjb3B5KQpAQCAtMjksOCArMjksOCBAQAogI2luY2x1ZGUgIlNo
YXJlYWJsZUJpdG1hcC5oIgogI2luY2x1ZGUgIldlYlBhZ2VQcm94eS5oIgogI2luY2x1ZGUgIldl
YlBvcHVwTWVudVByb3h5LmgiCisjaW5jbHVkZSA8V2ViQ29yZS9BbHRlcm5hdGl2ZVRleHRDb250
cm9sbGVyLmg+CiAjaW5jbHVkZSA8V2ViQ29yZS9FZGl0b3JDbGllbnQuaD4KLSNpbmNsdWRlIDxX
ZWJDb3JlL1NwZWxsaW5nQ29ycmVjdGlvbkNvbnRyb2xsZXIuaD4KICNpbmNsdWRlIDx3dGYvRm9y
d2FyZC5oPgogCiAjaWYgUExBVEZPUk0oTUFDKQpAQCAtMTg1LDkgKzE4NSw5IEBAIHB1YmxpYzoK
ICAgICB2aXJ0dWFsIENHQ29udGV4dFJlZiBjb250YWluaW5nV2luZG93R3JhcGhpY3NDb250ZXh0
KCkgPSAwOwogICAgIHZpcnR1YWwgdm9pZCBkaWRQZXJmb3JtRGljdGlvbmFyeUxvb2t1cChjb25z
dCBTdHJpbmcmLCBkb3VibGUgc2NhbGVGYWN0b3IsIGNvbnN0IERpY3Rpb25hcnlQb3B1cEluZm8m
KSA9IDA7CiAgICAgdmlydHVhbCB2b2lkIGRpc21pc3NEaWN0aW9uYXJ5TG9va3VwUGFuZWwoKSA9
IDA7Ci0gICAgdmlydHVhbCB2b2lkIHNob3dDb3JyZWN0aW9uUGFuZWwoV2ViQ29yZTo6Q29ycmVj
dGlvblBhbmVsSW5mbzo6UGFuZWxUeXBlLCBjb25zdCBXZWJDb3JlOjpGbG9hdFJlY3QmIGJvdW5k
aW5nQm94T2ZSZXBsYWNlZFN0cmluZywgY29uc3QgU3RyaW5nJiByZXBsYWNlZFN0cmluZywgY29u
c3QgU3RyaW5nJiByZXBsYWNlbWVudFN0cmluZywgY29uc3QgVmVjdG9yPFN0cmluZz4mIGFsdGVy
bmF0aXZlUmVwbGFjZW1lbnRTdHJpbmdzKSA9IDA7Ci0gICAgdmlydHVhbCB2b2lkIGRpc21pc3ND
b3JyZWN0aW9uUGFuZWwoV2ViQ29yZTo6UmVhc29uRm9yRGlzbWlzc2luZ0NvcnJlY3Rpb25QYW5l
bCkgPSAwOwotICAgIHZpcnR1YWwgU3RyaW5nIGRpc21pc3NDb3JyZWN0aW9uUGFuZWxTb29uKFdl
YkNvcmU6OlJlYXNvbkZvckRpc21pc3NpbmdDb3JyZWN0aW9uUGFuZWwpID0gMDsKKyAgICB2aXJ0
dWFsIHZvaWQgc2hvd0NvcnJlY3Rpb25QYW5lbChXZWJDb3JlOjpBbHRlcm5hdGl2ZVRleHRUeXBl
LCBjb25zdCBXZWJDb3JlOjpGbG9hdFJlY3QmIGJvdW5kaW5nQm94T2ZSZXBsYWNlZFN0cmluZywg
Y29uc3QgU3RyaW5nJiByZXBsYWNlZFN0cmluZywgY29uc3QgU3RyaW5nJiByZXBsYWNlbWVudFN0
cmluZywgY29uc3QgVmVjdG9yPFN0cmluZz4mIGFsdGVybmF0aXZlUmVwbGFjZW1lbnRTdHJpbmdz
KSA9IDA7CisgICAgdmlydHVhbCB2b2lkIGRpc21pc3NDb3JyZWN0aW9uUGFuZWwoV2ViQ29yZTo6
UmVhc29uRm9yRGlzbWlzc2luZ0FsdGVybmF0aXZlVGV4dCkgPSAwOworICAgIHZpcnR1YWwgU3Ry
aW5nIGRpc21pc3NDb3JyZWN0aW9uUGFuZWxTb29uKFdlYkNvcmU6OlJlYXNvbkZvckRpc21pc3Np
bmdBbHRlcm5hdGl2ZVRleHQpID0gMDsKICAgICB2aXJ0dWFsIHZvaWQgcmVjb3JkQXV0b2NvcnJl
Y3Rpb25SZXNwb25zZShXZWJDb3JlOjpFZGl0b3JDbGllbnQ6OkF1dG9jb3JyZWN0aW9uUmVzcG9u
c2VUeXBlLCBjb25zdCBTdHJpbmcmIHJlcGxhY2VkU3RyaW5nLCBjb25zdCBTdHJpbmcmIHJlcGxh
Y2VtZW50U3RyaW5nKSA9IDA7CiAgICAgdmlydHVhbCB2b2lkIHJlY29tbWVuZGVkU2Nyb2xsYmFy
U3R5bGVEaWRDaGFuZ2UoaW50MzJfdCBuZXdTdHlsZSkgPSAwOwogICAgIApJbmRleDogU291cmNl
L1dlYktpdDIvVUlQcm9jZXNzL1dlYlBhZ2VQcm94eS5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1dlYktpdDIvVUlQcm9jZXNzL1dlYlBhZ2VQcm94eS5jcHAJKHJldmlzaW9uIDExMjk2MSkKKysr
IFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9XZWJQYWdlUHJveHkuY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC0xODEyLDcgKzE4MTIsNyBAQCB2b2lkIFdlYlBhZ2VQcm94eTo6ZGlkQ29tbWl0TG9hZEZv
ckZyYW1lCiAgICAgbV9wYWdlQ2xpZW50LT5yZXNldFRleHRJbnB1dFN0YXRlKCk7CiAjaWYgIWRl
ZmluZWQoQlVJTERJTkdfT05fU05PV19MRU9QQVJEKQogICAgIC8vIEZJWE1FOiBTaG91bGQgdGhp
cyBiZSBtb3ZlZCBpbnNpZGUgcmVzZXRUZXh0SW5wdXRTdGF0ZSgpPwotICAgIGRpc21pc3NDb3Jy
ZWN0aW9uUGFuZWwoUmVhc29uRm9yRGlzbWlzc2luZ0NvcnJlY3Rpb25QYW5lbElnbm9yZWQpOwor
ICAgIGRpc21pc3NDb3JyZWN0aW9uUGFuZWwoUmVhc29uRm9yRGlzbWlzc2luZ0FsdGVybmF0aXZl
VGV4dElnbm9yZWQpOwogICAgIG1fcGFnZUNsaWVudC0+ZGlzbWlzc0RpY3Rpb25hcnlMb29rdXBQ
YW5lbCgpOwogI2VuZGlmCiAjZW5kaWYKQEAgLTIzNjksNyArMjM2OSw3IEBAIHZvaWQgV2ViUGFn
ZVByb3h5OjpwYWdlRGlkU2Nyb2xsKCkKIHsKICAgICBtX3VpQ2xpZW50LnBhZ2VEaWRTY3JvbGwo
dGhpcyk7CiAjaWYgUExBVEZPUk0oTUFDKSAmJiAhZGVmaW5lZChCVUlMRElOR19PTl9TTk9XX0xF
T1BBUkQpCi0gICAgZGlzbWlzc0NvcnJlY3Rpb25QYW5lbChSZWFzb25Gb3JEaXNtaXNzaW5nQ29y
cmVjdGlvblBhbmVsSWdub3JlZCk7CisgICAgZGlzbWlzc0NvcnJlY3Rpb25QYW5lbChSZWFzb25G
b3JEaXNtaXNzaW5nQWx0ZXJuYXRpdmVUZXh0SWdub3JlZCk7CiAjZW5kaWYKIH0KIApAQCAtMzM1
Myw3ICszMzUzLDcgQEAgdm9pZCBXZWJQYWdlUHJveHk6OnByb2Nlc3NEaWRDcmFzaCgpCiAjZW5k
aWYKIAogI2lmIFBMQVRGT1JNKE1BQykgJiYgIWRlZmluZWQoQlVJTERJTkdfT05fU05PV19MRU9Q
QVJEKQotICAgIGRpc21pc3NDb3JyZWN0aW9uUGFuZWwoUmVhc29uRm9yRGlzbWlzc2luZ0NvcnJl
Y3Rpb25QYW5lbElnbm9yZWQpOworICAgIGRpc21pc3NDb3JyZWN0aW9uUGFuZWwoUmVhc29uRm9y
RGlzbWlzc2luZ0FsdGVybmF0aXZlVGV4dElnbm9yZWQpOwogICAgIG1fcGFnZUNsaWVudC0+ZGlz
bWlzc0RpY3Rpb25hcnlMb29rdXBQYW5lbCgpOwogI2VuZGlmCiB9CkBAIC0zNjg5LDE3ICszNjg5
LDE3IEBAIHZvaWQgV2ViUGFnZVByb3h5OjpzdWJzdGl0dXRpb25zUGFuZWxJc1MKICNpZiAhZGVm
aW5lZChCVUlMRElOR19PTl9TTk9XX0xFT1BBUkQpCiB2b2lkIFdlYlBhZ2VQcm94eTo6c2hvd0Nv
cnJlY3Rpb25QYW5lbChpbnQzMl90IHBhbmVsVHlwZSwgY29uc3QgRmxvYXRSZWN0JiBib3VuZGlu
Z0JveE9mUmVwbGFjZWRTdHJpbmcsIGNvbnN0IFN0cmluZyYgcmVwbGFjZWRTdHJpbmcsIGNvbnN0
IFN0cmluZyYgcmVwbGFjZW1lbnRTdHJpbmcsIGNvbnN0IFZlY3RvcjxTdHJpbmc+JiBhbHRlcm5h
dGl2ZVJlcGxhY2VtZW50U3RyaW5ncykKIHsKLSAgICBtX3BhZ2VDbGllbnQtPnNob3dDb3JyZWN0
aW9uUGFuZWwoKENvcnJlY3Rpb25QYW5lbEluZm86OlBhbmVsVHlwZSlwYW5lbFR5cGUsIGJvdW5k
aW5nQm94T2ZSZXBsYWNlZFN0cmluZywgcmVwbGFjZWRTdHJpbmcsIHJlcGxhY2VtZW50U3RyaW5n
LCBhbHRlcm5hdGl2ZVJlcGxhY2VtZW50U3RyaW5ncyk7CisgICAgbV9wYWdlQ2xpZW50LT5zaG93
Q29ycmVjdGlvblBhbmVsKChBbHRlcm5hdGl2ZVRleHRUeXBlKXBhbmVsVHlwZSwgYm91bmRpbmdC
b3hPZlJlcGxhY2VkU3RyaW5nLCByZXBsYWNlZFN0cmluZywgcmVwbGFjZW1lbnRTdHJpbmcsIGFs
dGVybmF0aXZlUmVwbGFjZW1lbnRTdHJpbmdzKTsKIH0KIAogdm9pZCBXZWJQYWdlUHJveHk6OmRp
c21pc3NDb3JyZWN0aW9uUGFuZWwoaW50MzJfdCByZWFzb24pCiB7Ci0gICAgbV9wYWdlQ2xpZW50
LT5kaXNtaXNzQ29ycmVjdGlvblBhbmVsKChSZWFzb25Gb3JEaXNtaXNzaW5nQ29ycmVjdGlvblBh
bmVsKXJlYXNvbik7CisgICAgbV9wYWdlQ2xpZW50LT5kaXNtaXNzQ29ycmVjdGlvblBhbmVsKChS
ZWFzb25Gb3JEaXNtaXNzaW5nQWx0ZXJuYXRpdmVUZXh0KXJlYXNvbik7CiB9CiAKIHZvaWQgV2Vi
UGFnZVByb3h5OjpkaXNtaXNzQ29ycmVjdGlvblBhbmVsU29vbihpbnQzMl90IHJlYXNvbiwgU3Ry
aW5nJiByZXN1bHQpCiB7Ci0gICAgcmVzdWx0ID0gbV9wYWdlQ2xpZW50LT5kaXNtaXNzQ29ycmVj
dGlvblBhbmVsU29vbigoUmVhc29uRm9yRGlzbWlzc2luZ0NvcnJlY3Rpb25QYW5lbClyZWFzb24p
OworICAgIHJlc3VsdCA9IG1fcGFnZUNsaWVudC0+ZGlzbWlzc0NvcnJlY3Rpb25QYW5lbFNvb24o
KFJlYXNvbkZvckRpc21pc3NpbmdBbHRlcm5hdGl2ZVRleHQpcmVhc29uKTsKIH0KIAogdm9pZCBX
ZWJQYWdlUHJveHk6OnJlY29yZEF1dG9jb3JyZWN0aW9uUmVzcG9uc2UoaW50MzJfdCByZXNwb25z
ZVR5cGUsIGNvbnN0IFN0cmluZyYgcmVwbGFjZWRTdHJpbmcsIGNvbnN0IFN0cmluZyYgcmVwbGFj
ZW1lbnRTdHJpbmcpCkBAIC0zNzA4LDExICszNzA4LDExIEBAIHZvaWQgV2ViUGFnZVByb3h5Ojpy
ZWNvcmRBdXRvY29ycmVjdGlvblIKIH0KICNlbmRpZiAvLyAhZGVmaW5lZChCVUlMRElOR19PTl9T
Tk9XX0xFT1BBUkQpCiAKLXZvaWQgV2ViUGFnZVByb3h5OjpoYW5kbGVDb3JyZWN0aW9uUGFuZWxS
ZXN1bHQoY29uc3QgU3RyaW5nJiByZXN1bHQpCit2b2lkIFdlYlBhZ2VQcm94eTo6aGFuZGxlQWx0
ZXJuYXRpdmVUZXh0VUlSZXN1bHQoY29uc3QgU3RyaW5nJiByZXN1bHQpCiB7CiAjaWYgIWRlZmlu
ZWQoQlVJTERJTkdfT05fU05PV19MRU9QQVJEKQogICAgIGlmICghaXNDbG9zZWQoKSkKLSAgICAg
ICAgcHJvY2VzcygpLT5zZW5kKE1lc3NhZ2VzOjpXZWJQYWdlOjpIYW5kbGVDb3JyZWN0aW9uUGFu
ZWxSZXN1bHQocmVzdWx0KSwgbV9wYWdlSUQsIDApOworICAgICAgICBwcm9jZXNzKCktPnNlbmQo
TWVzc2FnZXM6OldlYlBhZ2U6OkhhbmRsZUFsdGVybmF0aXZlVGV4dFVJUmVzdWx0KHJlc3VsdCks
IG1fcGFnZUlELCAwKTsKICNlbmRpZgogfQogI2VuZGlmIC8vIFBMQVRGT1JNKE1BQykKSW5kZXg6
IFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9XZWJQYWdlUHJveHkuaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvV2ViUGFnZVByb3h5LmgJKHJldmlzaW9uIDExMjk2MSkK
KysrIFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9XZWJQYWdlUHJveHkuaAkod29ya2luZyBjb3B5
KQpAQCAtNjExLDcgKzYxMSw3IEBAIHB1YmxpYzoKICAgICB2b2lkIGZsYXNoQmFja2luZ1N0b3Jl
VXBkYXRlcyhjb25zdCBWZWN0b3I8V2ViQ29yZTo6SW50UmVjdD4mIHVwZGF0ZVJlY3RzKTsKIAog
I2lmIFBMQVRGT1JNKE1BQykKLSAgICB2b2lkIGhhbmRsZUNvcnJlY3Rpb25QYW5lbFJlc3VsdChj
b25zdCBTdHJpbmcmIHJlc3VsdCk7CisgICAgdm9pZCBoYW5kbGVBbHRlcm5hdGl2ZVRleHRVSVJl
c3VsdChjb25zdCBTdHJpbmcmIHJlc3VsdCk7CiAjZW5kaWYKIAogICAgIHN0YXRpYyB2b2lkIHNl
dERlYnVnUGFpbnRGbGFncyhXS1BhZ2VEZWJ1Z1BhaW50RmxhZ3MgZmxhZ3MpIHsgc19kZWJ1Z1Bh
aW50RmxhZ3MgPSBmbGFnczsgfQpJbmRleDogU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9t
YWMvUGFnZUNsaWVudEltcGwuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nl
c3MvQVBJL21hYy9QYWdlQ2xpZW50SW1wbC5oCShyZXZpc2lvbiAxMTI5NjEpCisrKyBTb3VyY2Uv
V2ViS2l0Mi9VSVByb2Nlc3MvQVBJL21hYy9QYWdlQ2xpZW50SW1wbC5oCSh3b3JraW5nIGNvcHkp
CkBAIC0xMjAsOSArMTIwLDkgQEAgcHJpdmF0ZToKICAgICB2aXJ0dWFsIHZvaWQgZGlkUGVyZm9y
bURpY3Rpb25hcnlMb29rdXAoY29uc3QgU3RyaW5nJiwgZG91YmxlIHNjYWxlRmFjdG9yLCBjb25z
dCBEaWN0aW9uYXJ5UG9wdXBJbmZvJik7CiAgICAgdmlydHVhbCB2b2lkIGRpc21pc3NEaWN0aW9u
YXJ5TG9va3VwUGFuZWwoKTsKIAotICAgIHZpcnR1YWwgdm9pZCBzaG93Q29ycmVjdGlvblBhbmVs
KFdlYkNvcmU6OkNvcnJlY3Rpb25QYW5lbEluZm86OlBhbmVsVHlwZSwgY29uc3QgV2ViQ29yZTo6
RmxvYXRSZWN0JiBib3VuZGluZ0JveE9mUmVwbGFjZWRTdHJpbmcsIGNvbnN0IFN0cmluZyYgcmVw
bGFjZWRTdHJpbmcsIGNvbnN0IFN0cmluZyYgcmVwbGFjZW1lbnRTdHJpbmcsIGNvbnN0IFZlY3Rv
cjxTdHJpbmc+JiBhbHRlcm5hdGl2ZVJlcGxhY2VtZW50U3RyaW5ncyk7Ci0gICAgdmlydHVhbCB2
b2lkIGRpc21pc3NDb3JyZWN0aW9uUGFuZWwoV2ViQ29yZTo6UmVhc29uRm9yRGlzbWlzc2luZ0Nv
cnJlY3Rpb25QYW5lbCk7Ci0gICAgdmlydHVhbCBTdHJpbmcgZGlzbWlzc0NvcnJlY3Rpb25QYW5l
bFNvb24oV2ViQ29yZTo6UmVhc29uRm9yRGlzbWlzc2luZ0NvcnJlY3Rpb25QYW5lbCk7CisgICAg
dmlydHVhbCB2b2lkIHNob3dDb3JyZWN0aW9uUGFuZWwoV2ViQ29yZTo6QWx0ZXJuYXRpdmVUZXh0
VHlwZSwgY29uc3QgV2ViQ29yZTo6RmxvYXRSZWN0JiBib3VuZGluZ0JveE9mUmVwbGFjZWRTdHJp
bmcsIGNvbnN0IFN0cmluZyYgcmVwbGFjZWRTdHJpbmcsIGNvbnN0IFN0cmluZyYgcmVwbGFjZW1l
bnRTdHJpbmcsIGNvbnN0IFZlY3RvcjxTdHJpbmc+JiBhbHRlcm5hdGl2ZVJlcGxhY2VtZW50U3Ry
aW5ncyk7CisgICAgdmlydHVhbCB2b2lkIGRpc21pc3NDb3JyZWN0aW9uUGFuZWwoV2ViQ29yZTo6
UmVhc29uRm9yRGlzbWlzc2luZ0FsdGVybmF0aXZlVGV4dCk7CisgICAgdmlydHVhbCBTdHJpbmcg
ZGlzbWlzc0NvcnJlY3Rpb25QYW5lbFNvb24oV2ViQ29yZTo6UmVhc29uRm9yRGlzbWlzc2luZ0Fs
dGVybmF0aXZlVGV4dCk7CiAgICAgdmlydHVhbCB2b2lkIHJlY29yZEF1dG9jb3JyZWN0aW9uUmVz
cG9uc2UoV2ViQ29yZTo6RWRpdG9yQ2xpZW50OjpBdXRvY29ycmVjdGlvblJlc3BvbnNlVHlwZSwg
Y29uc3QgU3RyaW5nJiByZXBsYWNlZFN0cmluZywgY29uc3QgU3RyaW5nJiByZXBsYWNlbWVudFN0
cmluZyk7CiAKICAgICB2aXJ0dWFsIHZvaWQgcmVjb21tZW5kZWRTY3JvbGxiYXJTdHlsZURpZENo
YW5nZShpbnQzMl90IG5ld1N0eWxlKTsKSW5kZXg6IFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9B
UEkvbWFjL1BhZ2VDbGllbnRJbXBsLm1tCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQyL1VJ
UHJvY2Vzcy9BUEkvbWFjL1BhZ2VDbGllbnRJbXBsLm1tCShyZXZpc2lvbiAxMTI5NjEpCisrKyBT
b3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL21hYy9QYWdlQ2xpZW50SW1wbC5tbQkod29ya2lu
ZyBjb3B5KQpAQCAtNDYzLDcgKzQ2Myw3IEBAIHZvaWQgUGFnZUNsaWVudEltcGw6OmRpc21pc3NE
aWN0aW9uYXJ5TG8KICNlbmRpZgogfQogCi12b2lkIFBhZ2VDbGllbnRJbXBsOjpzaG93Q29ycmVj
dGlvblBhbmVsKENvcnJlY3Rpb25QYW5lbEluZm86OlBhbmVsVHlwZSB0eXBlLCBjb25zdCBGbG9h
dFJlY3QmIGJvdW5kaW5nQm94T2ZSZXBsYWNlZFN0cmluZywgY29uc3QgU3RyaW5nJiByZXBsYWNl
ZFN0cmluZywgY29uc3QgU3RyaW5nJiByZXBsYWNlbWVudFN0cmluZywgY29uc3QgVmVjdG9yPFN0
cmluZz4mIGFsdGVybmF0aXZlUmVwbGFjZW1lbnRTdHJpbmdzKQordm9pZCBQYWdlQ2xpZW50SW1w
bDo6c2hvd0NvcnJlY3Rpb25QYW5lbChBbHRlcm5hdGl2ZVRleHRUeXBlIHR5cGUsIGNvbnN0IEZs
b2F0UmVjdCYgYm91bmRpbmdCb3hPZlJlcGxhY2VkU3RyaW5nLCBjb25zdCBTdHJpbmcmIHJlcGxh
Y2VkU3RyaW5nLCBjb25zdCBTdHJpbmcmIHJlcGxhY2VtZW50U3RyaW5nLCBjb25zdCBWZWN0b3I8
U3RyaW5nPiYgYWx0ZXJuYXRpdmVSZXBsYWNlbWVudFN0cmluZ3MpCiB7CiAjaWYgIWRlZmluZWQo
QlVJTERJTkdfT05fU05PV19MRU9QQVJEKQogICAgIGlmICghaXNWaWV3VmlzaWJsZSgpIHx8ICFp
c1ZpZXdJbldpbmRvdygpKQpAQCAtNDcyLDE0ICs0NzIsMTQgQEAgdm9pZCBQYWdlQ2xpZW50SW1w
bDo6c2hvd0NvcnJlY3Rpb25QYW5lbAogI2VuZGlmCiB9CiAKLXZvaWQgUGFnZUNsaWVudEltcGw6
OmRpc21pc3NDb3JyZWN0aW9uUGFuZWwoUmVhc29uRm9yRGlzbWlzc2luZ0NvcnJlY3Rpb25QYW5l
bCByZWFzb24pCit2b2lkIFBhZ2VDbGllbnRJbXBsOjpkaXNtaXNzQ29ycmVjdGlvblBhbmVsKFJl
YXNvbkZvckRpc21pc3NpbmdBbHRlcm5hdGl2ZVRleHQgcmVhc29uKQogewogI2lmICFkZWZpbmVk
KEJVSUxESU5HX09OX1NOT1dfTEVPUEFSRCkKICAgICBtX2NvcnJlY3Rpb25QYW5lbC5kaXNtaXNz
KHJlYXNvbik7CiAjZW5kaWYKIH0KIAotU3RyaW5nIFBhZ2VDbGllbnRJbXBsOjpkaXNtaXNzQ29y
cmVjdGlvblBhbmVsU29vbihXZWJDb3JlOjpSZWFzb25Gb3JEaXNtaXNzaW5nQ29ycmVjdGlvblBh
bmVsIHJlYXNvbikKK1N0cmluZyBQYWdlQ2xpZW50SW1wbDo6ZGlzbWlzc0NvcnJlY3Rpb25QYW5l
bFNvb24oV2ViQ29yZTo6UmVhc29uRm9yRGlzbWlzc2luZ0FsdGVybmF0aXZlVGV4dCByZWFzb24p
CiB7CiAjaWYgIWRlZmluZWQoQlVJTERJTkdfT05fU05PV19MRU9QQVJEKQogICAgIHJldHVybiBt
X2NvcnJlY3Rpb25QYW5lbC5kaXNtaXNzKHJlYXNvbik7CkluZGV4OiBTb3VyY2UvV2ViS2l0Mi9V
SVByb2Nlc3MvQVBJL21hYy9XS1ZpZXcubW0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdDIv
VUlQcm9jZXNzL0FQSS9tYWMvV0tWaWV3Lm1tCShyZXZpc2lvbiAxMTI5NjEpCisrKyBTb3VyY2Uv
V2ViS2l0Mi9VSVByb2Nlc3MvQVBJL21hYy9XS1ZpZXcubW0JKHdvcmtpbmcgY29weSkKQEAgLTI4
NTIsNyArMjg1Miw3IEBAIC0gKE5TSW50ZWdlcilzcGVsbENoZWNrZXJEb2N1bWVudFRhZwogCiAt
ICh2b2lkKWhhbmRsZUNvcnJlY3Rpb25QYW5lbFJlc3VsdDooTlNTdHJpbmcqKXJlc3VsdAogewot
ICAgIF9kYXRhLT5fcGFnZS0+aGFuZGxlQ29ycmVjdGlvblBhbmVsUmVzdWx0KHJlc3VsdCk7Cisg
ICAgX2RhdGEtPl9wYWdlLT5oYW5kbGVBbHRlcm5hdGl2ZVRleHRVSVJlc3VsdChyZXN1bHQpOwog
fQogCiBAZW5kCkluZGV4OiBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvbWFjL0NvcnJlY3Rpb25Q
YW5lbC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9tYWMvQ29ycmVj
dGlvblBhbmVsLmgJKHJldmlzaW9uIDExMjk2MSkKKysrIFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vz
cy9tYWMvQ29ycmVjdGlvblBhbmVsLmgJKHdvcmtpbmcgY29weSkKQEAgLTI4LDcgKzI4LDcgQEAK
IAogI2lmICFkZWZpbmVkKEJVSUxESU5HX09OX1NOT1dfTEVPUEFSRCkKICNpbXBvcnQgPEFwcEtp
dC9OU1NwZWxsQ2hlY2tlci5oPgotI2ltcG9ydCA8V2ViQ29yZS9TcGVsbGluZ0NvcnJlY3Rpb25D
b250cm9sbGVyLmg+CisjaW1wb3J0IDxXZWJDb3JlL0FsdGVybmF0aXZlVGV4dENvbnRyb2xsZXIu
aD4KICNpbXBvcnQgPHd0Zi9SZXRhaW5QdHIuaD4KIAogQGNsYXNzIFdLVmlldzsKQEAgLTM5LDE3
ICszOSwxNyBAQCBjbGFzcyBDb3JyZWN0aW9uUGFuZWwgewogcHVibGljOgogICAgIENvcnJlY3Rp
b25QYW5lbCgpOwogICAgIH5Db3JyZWN0aW9uUGFuZWwoKTsKLSAgICB2b2lkIHNob3coV0tWaWV3
KiwgV2ViQ29yZTo6Q29ycmVjdGlvblBhbmVsSW5mbzo6UGFuZWxUeXBlLCBjb25zdCBXZWJDb3Jl
OjpGbG9hdFJlY3QmIGJvdW5kaW5nQm94T2ZSZXBsYWNlZFN0cmluZywgY29uc3QgU3RyaW5nJiBy
ZXBsYWNlZFN0cmluZywgY29uc3QgU3RyaW5nJiByZXBsYWNlbWVudFN0cmluZywgY29uc3QgVmVj
dG9yPFN0cmluZz4mIGFsdGVybmF0aXZlUmVwbGFjZW1lbnRTdHJpbmdzKTsKLSAgICBTdHJpbmcg
ZGlzbWlzcyhXZWJDb3JlOjpSZWFzb25Gb3JEaXNtaXNzaW5nQ29ycmVjdGlvblBhbmVsKTsKKyAg
ICB2b2lkIHNob3coV0tWaWV3KiwgV2ViQ29yZTo6QWx0ZXJuYXRpdmVUZXh0VHlwZSwgY29uc3Qg
V2ViQ29yZTo6RmxvYXRSZWN0JiBib3VuZGluZ0JveE9mUmVwbGFjZWRTdHJpbmcsIGNvbnN0IFN0
cmluZyYgcmVwbGFjZWRTdHJpbmcsIGNvbnN0IFN0cmluZyYgcmVwbGFjZW1lbnRTdHJpbmcsIGNv
bnN0IFZlY3RvcjxTdHJpbmc+JiBhbHRlcm5hdGl2ZVJlcGxhY2VtZW50U3RyaW5ncyk7CisgICAg
U3RyaW5nIGRpc21pc3MoV2ViQ29yZTo6UmVhc29uRm9yRGlzbWlzc2luZ0FsdGVybmF0aXZlVGV4
dCk7CiAgICAgc3RhdGljIHZvaWQgcmVjb3JkQXV0b2NvcnJlY3Rpb25SZXNwb25zZShXS1ZpZXcq
LCBOU0NvcnJlY3Rpb25SZXNwb25zZSwgY29uc3QgU3RyaW5nJiByZXBsYWNlZFN0cmluZywgY29u
c3QgU3RyaW5nJiByZXBsYWNlbWVudFN0cmluZyk7CiAKIHByaXZhdGU6CiAgICAgYm9vbCBpc1No
b3dpbmcoKSBjb25zdCB7IHJldHVybiBtX3ZpZXc7IH0KLSAgICBTdHJpbmcgZGlzbWlzc0ludGVy
bmFsKFdlYkNvcmU6OlJlYXNvbkZvckRpc21pc3NpbmdDb3JyZWN0aW9uUGFuZWwsIGJvb2wgZGlz
bWlzc2luZ0V4dGVybmFsbHkpOworICAgIFN0cmluZyBkaXNtaXNzSW50ZXJuYWwoV2ViQ29yZTo6
UmVhc29uRm9yRGlzbWlzc2luZ0FsdGVybmF0aXZlVGV4dCwgYm9vbCBkaXNtaXNzaW5nRXh0ZXJu
YWxseSk7CiAgICAgdm9pZCBoYW5kbGVBY2NlcHRlZFJlcGxhY2VtZW50KE5TU3RyaW5nKiBhY2Nl
cHRlZFJlcGxhY2VtZW50LCBOU1N0cmluZyogcmVwbGFjZWQsIE5TU3RyaW5nKiBwcm9wb3NlZFJl
cGxhY2VtZW50LCBOU0NvcnJlY3Rpb25JbmRpY2F0b3JUeXBlKTsKIAogICAgIGJvb2wgbV93YXNE
aXNtaXNzZWRFeHRlcm5hbGx5OwotICAgIFdlYkNvcmU6OlJlYXNvbkZvckRpc21pc3NpbmdDb3Jy
ZWN0aW9uUGFuZWwgbV9yZWFzb25Gb3JEaXNtaXNzaW5nOworICAgIFdlYkNvcmU6OlJlYXNvbkZv
ckRpc21pc3NpbmdBbHRlcm5hdGl2ZVRleHQgbV9yZWFzb25Gb3JEaXNtaXNzaW5nOwogICAgIFJl
dGFpblB0cjxXS1ZpZXc+IG1fdmlldzsKICAgICBSZXRhaW5QdHI8TlNTdHJpbmc+IG1fcmVzdWx0
Rm9yRGlzbWlzc2FsOwogfTsKSW5kZXg6IFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9tYWMvQ29y
cmVjdGlvblBhbmVsLm1tCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9t
YWMvQ29ycmVjdGlvblBhbmVsLm1tCShyZXZpc2lvbiAxMTI5NjEpCisrKyBTb3VyY2UvV2ViS2l0
Mi9VSVByb2Nlc3MvbWFjL0NvcnJlY3Rpb25QYW5lbC5tbQkod29ya2luZyBjb3B5KQpAQCAtMzMs
MTQgKzMzLDE0IEBACiAKIHVzaW5nIG5hbWVzcGFjZSBXZWJDb3JlOwogCi1zdGF0aWMgaW5saW5l
IE5TQ29ycmVjdGlvbkluZGljYXRvclR5cGUgY29ycmVjdGlvbkluZGljYXRvclR5cGUoQ29ycmVj
dGlvblBhbmVsSW5mbzo6UGFuZWxUeXBlIHBhbmVsVHlwZSkKK3N0YXRpYyBpbmxpbmUgTlNDb3Jy
ZWN0aW9uSW5kaWNhdG9yVHlwZSBjb3JyZWN0aW9uSW5kaWNhdG9yVHlwZShBbHRlcm5hdGl2ZVRl
eHRUeXBlIGFsdGVybmF0aXZlVGV4dFR5cGUpCiB7Ci0gICAgc3dpdGNoIChwYW5lbFR5cGUpIHsK
LSAgICBjYXNlIENvcnJlY3Rpb25QYW5lbEluZm86OlBhbmVsVHlwZUNvcnJlY3Rpb246CisgICAg
c3dpdGNoIChhbHRlcm5hdGl2ZVRleHRUeXBlKSB7CisgICAgY2FzZSBBbHRlcm5hdGl2ZVRleHRU
eXBlQ29ycmVjdGlvbjoKICAgICAgICAgcmV0dXJuIE5TQ29ycmVjdGlvbkluZGljYXRvclR5cGVE
ZWZhdWx0OwotICAgIGNhc2UgQ29ycmVjdGlvblBhbmVsSW5mbzo6UGFuZWxUeXBlUmV2ZXJzaW9u
OgorICAgIGNhc2UgQWx0ZXJuYXRpdmVUZXh0VHlwZVJldmVyc2lvbjoKICAgICAgICAgcmV0dXJu
IE5TQ29ycmVjdGlvbkluZGljYXRvclR5cGVSZXZlcnNpb247Ci0gICAgY2FzZSBDb3JyZWN0aW9u
UGFuZWxJbmZvOjpQYW5lbFR5cGVTcGVsbGluZ1N1Z2dlc3Rpb25zOgorICAgIGNhc2UgQWx0ZXJu
YXRpdmVUZXh0VHlwZVNwZWxsaW5nU3VnZ2VzdGlvbnM6CiAgICAgICAgIHJldHVybiBOU0NvcnJl
Y3Rpb25JbmRpY2F0b3JUeXBlR3Vlc3NlczsKICAgICB9CiAgICAgQVNTRVJUX05PVF9SRUFDSEVE
KCk7CkBAIC01MSwxOCArNTEsMTggQEAgbmFtZXNwYWNlIFdlYktpdCB7CiAKIENvcnJlY3Rpb25Q
YW5lbDo6Q29ycmVjdGlvblBhbmVsKCkKICAgICA6IG1fd2FzRGlzbWlzc2VkRXh0ZXJuYWxseShm
YWxzZSkKLSAgICAsIG1fcmVhc29uRm9yRGlzbWlzc2luZyhSZWFzb25Gb3JEaXNtaXNzaW5nQ29y
cmVjdGlvblBhbmVsSWdub3JlZCkKKyAgICAsIG1fcmVhc29uRm9yRGlzbWlzc2luZyhSZWFzb25G
b3JEaXNtaXNzaW5nQWx0ZXJuYXRpdmVUZXh0SWdub3JlZCkKIHsKIH0KIAogQ29ycmVjdGlvblBh
bmVsOjp+Q29ycmVjdGlvblBhbmVsKCkKIHsKLSAgICBkaXNtaXNzSW50ZXJuYWwoUmVhc29uRm9y
RGlzbWlzc2luZ0NvcnJlY3Rpb25QYW5lbElnbm9yZWQsIGZhbHNlKTsKKyAgICBkaXNtaXNzSW50
ZXJuYWwoUmVhc29uRm9yRGlzbWlzc2luZ0FsdGVybmF0aXZlVGV4dElnbm9yZWQsIGZhbHNlKTsK
IH0KIAotdm9pZCBDb3JyZWN0aW9uUGFuZWw6OnNob3coV0tWaWV3KiB2aWV3LCBDb3JyZWN0aW9u
UGFuZWxJbmZvOjpQYW5lbFR5cGUgdHlwZSwgY29uc3QgRmxvYXRSZWN0JiBib3VuZGluZ0JveE9m
UmVwbGFjZWRTdHJpbmcsIGNvbnN0IFN0cmluZyYgcmVwbGFjZWRTdHJpbmcsIGNvbnN0IFN0cmlu
ZyYgcmVwbGFjZW1lbnRTdHJpbmcsIGNvbnN0IFZlY3RvcjxTdHJpbmc+JiBhbHRlcm5hdGl2ZVJl
cGxhY2VtZW50U3RyaW5ncykKK3ZvaWQgQ29ycmVjdGlvblBhbmVsOjpzaG93KFdLVmlldyogdmll
dywgQWx0ZXJuYXRpdmVUZXh0VHlwZSB0eXBlLCBjb25zdCBGbG9hdFJlY3QmIGJvdW5kaW5nQm94
T2ZSZXBsYWNlZFN0cmluZywgY29uc3QgU3RyaW5nJiByZXBsYWNlZFN0cmluZywgY29uc3QgU3Ry
aW5nJiByZXBsYWNlbWVudFN0cmluZywgY29uc3QgVmVjdG9yPFN0cmluZz4mIGFsdGVybmF0aXZl
UmVwbGFjZW1lbnRTdHJpbmdzKQogewotICAgIGRpc21pc3NJbnRlcm5hbChSZWFzb25Gb3JEaXNt
aXNzaW5nQ29ycmVjdGlvblBhbmVsSWdub3JlZCwgZmFsc2UpOworICAgIGRpc21pc3NJbnRlcm5h
bChSZWFzb25Gb3JEaXNtaXNzaW5nQWx0ZXJuYXRpdmVUZXh0SWdub3JlZCwgZmFsc2UpOwogICAg
IAogICAgIGlmICghdmlldykKICAgICAgICAgcmV0dXJuOwpAQCAtODYsMTIgKzg2LDEyIEBAIHZv
aWQgQ29ycmVjdGlvblBhbmVsOjpzaG93KFdLVmlldyogdmlldywKICAgICB9XTsKIH0KIAotU3Ry
aW5nIENvcnJlY3Rpb25QYW5lbDo6ZGlzbWlzcyhSZWFzb25Gb3JEaXNtaXNzaW5nQ29ycmVjdGlv
blBhbmVsIHJlYXNvbikKK1N0cmluZyBDb3JyZWN0aW9uUGFuZWw6OmRpc21pc3MoUmVhc29uRm9y
RGlzbWlzc2luZ0FsdGVybmF0aXZlVGV4dCByZWFzb24pCiB7CiAgICAgcmV0dXJuIGRpc21pc3NJ
bnRlcm5hbChyZWFzb24sIHRydWUpOwogfQogCi1TdHJpbmcgQ29ycmVjdGlvblBhbmVsOjpkaXNt
aXNzSW50ZXJuYWwoUmVhc29uRm9yRGlzbWlzc2luZ0NvcnJlY3Rpb25QYW5lbCByZWFzb24sIGJv
b2wgZGlzbWlzc2luZ0V4dGVybmFsbHkpCitTdHJpbmcgQ29ycmVjdGlvblBhbmVsOjpkaXNtaXNz
SW50ZXJuYWwoUmVhc29uRm9yRGlzbWlzc2luZ0FsdGVybmF0aXZlVGV4dCByZWFzb24sIGJvb2wg
ZGlzbWlzc2luZ0V4dGVybmFsbHkpCiB7CiAgICAgaWYgKCFpc1Nob3dpbmcoKSkKICAgICAgICAg
cmV0dXJuIFN0cmluZygpOwpAQCAtMTIxLDcgKzEyMSw3IEBAIHZvaWQgQ29ycmVjdGlvblBhbmVs
OjpoYW5kbGVBY2NlcHRlZFJlcGwKICAgICAgICAgaWYgKGFjY2VwdGVkUmVwbGFjZW1lbnQpCiAg
ICAgICAgICAgICBbc3BlbGxDaGVja2VyIHJlY29yZFJlc3BvbnNlOk5TQ29ycmVjdGlvblJlc3Bv
bnNlQWNjZXB0ZWQgdG9Db3JyZWN0aW9uOmFjY2VwdGVkUmVwbGFjZW1lbnQgZm9yV29yZDpyZXBs
YWNlZCBsYW5ndWFnZTpuaWwgaW5TcGVsbERvY3VtZW50V2l0aFRhZzpkb2N1bWVudFRhZ107CiAg
ICAgICAgIGVsc2UgewotICAgICAgICAgICAgaWYgKCFtX3dhc0Rpc21pc3NlZEV4dGVybmFsbHkg
fHwgbV9yZWFzb25Gb3JEaXNtaXNzaW5nID09IFJlYXNvbkZvckRpc21pc3NpbmdDb3JyZWN0aW9u
UGFuZWxDYW5jZWxsZWQpCisgICAgICAgICAgICBpZiAoIW1fd2FzRGlzbWlzc2VkRXh0ZXJuYWxs
eSB8fCBtX3JlYXNvbkZvckRpc21pc3NpbmcgPT0gUmVhc29uRm9yRGlzbWlzc2luZ0FsdGVybmF0
aXZlVGV4dENhbmNlbGxlZCkKICAgICAgICAgICAgICAgICBbc3BlbGxDaGVja2VyIHJlY29yZFJl
c3BvbnNlOk5TQ29ycmVjdGlvblJlc3BvbnNlUmVqZWN0ZWQgdG9Db3JyZWN0aW9uOnByb3Bvc2Vk
UmVwbGFjZW1lbnQgZm9yV29yZDpyZXBsYWNlZCBsYW5ndWFnZTpuaWwgaW5TcGVsbERvY3VtZW50
V2l0aFRhZzpkb2N1bWVudFRhZ107CiAgICAgICAgICAgICBlbHNlCiAgICAgICAgICAgICAgICAg
W3NwZWxsQ2hlY2tlciByZWNvcmRSZXNwb25zZTpOU0NvcnJlY3Rpb25SZXNwb25zZUlnbm9yZWQg
dG9Db3JyZWN0aW9uOnByb3Bvc2VkUmVwbGFjZW1lbnQgZm9yV29yZDpyZXBsYWNlZCBsYW5ndWFn
ZTpuaWwgaW5TcGVsbERvY3VtZW50V2l0aFRhZzpkb2N1bWVudFRhZ107CkluZGV4OiBTb3VyY2Uv
V2ViS2l0Mi9XZWJQcm9jZXNzL1dlYkNvcmVTdXBwb3J0L1dlYkVkaXRvckNsaWVudC5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViQ29yZVN1cHBvcnQvV2ViRWRp
dG9yQ2xpZW50LmgJKHJldmlzaW9uIDExMjk2MSkKKysrIFNvdXJjZS9XZWJLaXQyL1dlYlByb2Nl
c3MvV2ViQ29yZVN1cHBvcnQvV2ViRWRpdG9yQ2xpZW50LmgJKHdvcmtpbmcgY29weSkKQEAgLTE0
Myw5ICsxNDMsOSBAQCBwcml2YXRlOgogICAgIHZpcnR1YWwgdm9pZCBzZXRJbnB1dE1ldGhvZFN0
YXRlKGJvb2wgZW5hYmxlZCkgT1ZFUlJJREU7CiAgICAgdmlydHVhbCB2b2lkIHJlcXVlc3RDaGVj
a2luZ09mU3RyaW5nKFdlYkNvcmU6OlNwZWxsQ2hlY2tlciosIGNvbnN0IFdlYkNvcmU6OlRleHRD
aGVja2luZ1JlcXVlc3QmKSBPVkVSUklERTsKICNpZiBQTEFURk9STShNQUMpICYmICFkZWZpbmVk
KEJVSUxESU5HX09OX1NOT1dfTEVPUEFSRCkKLSAgICB2aXJ0dWFsIHZvaWQgc2hvd0NvcnJlY3Rp
b25QYW5lbChXZWJDb3JlOjpDb3JyZWN0aW9uUGFuZWxJbmZvOjpQYW5lbFR5cGUsIGNvbnN0IFdl
YkNvcmU6OkZsb2F0UmVjdCYgYm91bmRpbmdCb3hPZlJlcGxhY2VkU3RyaW5nLCBjb25zdCBTdHJp
bmcmIHJlcGxhY2VkU3RyaW5nLCBjb25zdCBTdHJpbmcmIHJlcGxhY2VtZW50U3RyaW5nLCBjb25z
dCBWZWN0b3I8U3RyaW5nPiYgYWx0ZXJuYXRpdmVSZXBsYWNlbWVudFN0cmluZ3MpIE9WRVJSSURF
OwotICAgIHZpcnR1YWwgdm9pZCBkaXNtaXNzQ29ycmVjdGlvblBhbmVsKFdlYkNvcmU6OlJlYXNv
bkZvckRpc21pc3NpbmdDb3JyZWN0aW9uUGFuZWwpIE9WRVJSSURFOwotICAgIHZpcnR1YWwgU3Ry
aW5nIGRpc21pc3NDb3JyZWN0aW9uUGFuZWxTb29uKFdlYkNvcmU6OlJlYXNvbkZvckRpc21pc3Np
bmdDb3JyZWN0aW9uUGFuZWwpIE9WRVJSSURFOworICAgIHZpcnR1YWwgdm9pZCBzaG93Q29ycmVj
dGlvblBhbmVsKFdlYkNvcmU6OkFsdGVybmF0aXZlVGV4dFR5cGUsIGNvbnN0IFdlYkNvcmU6OkZs
b2F0UmVjdCYgYm91bmRpbmdCb3hPZlJlcGxhY2VkU3RyaW5nLCBjb25zdCBTdHJpbmcmIHJlcGxh
Y2VkU3RyaW5nLCBjb25zdCBTdHJpbmcmIHJlcGxhY2VtZW50U3RyaW5nLCBjb25zdCBWZWN0b3I8
U3RyaW5nPiYgYWx0ZXJuYXRpdmVSZXBsYWNlbWVudFN0cmluZ3MpIE9WRVJSSURFOworICAgIHZp
cnR1YWwgdm9pZCBkaXNtaXNzQ29ycmVjdGlvblBhbmVsKFdlYkNvcmU6OlJlYXNvbkZvckRpc21p
c3NpbmdBbHRlcm5hdGl2ZVRleHQpIE9WRVJSSURFOworICAgIHZpcnR1YWwgU3RyaW5nIGRpc21p
c3NDb3JyZWN0aW9uUGFuZWxTb29uKFdlYkNvcmU6OlJlYXNvbkZvckRpc21pc3NpbmdBbHRlcm5h
dGl2ZVRleHQpIE9WRVJSSURFOwogICAgIHZpcnR1YWwgdm9pZCByZWNvcmRBdXRvY29ycmVjdGlv
blJlc3BvbnNlKEF1dG9jb3JyZWN0aW9uUmVzcG9uc2VUeXBlLCBjb25zdCBTdHJpbmcmIHJlcGxh
Y2VkU3RyaW5nLCBjb25zdCBTdHJpbmcmIHJlcGxhY2VtZW50U3RyaW5nKSBPVkVSUklERTsKICNl
bmRpZgogI2lmIFBMQVRGT1JNKEdUSykKSW5kZXg6IFNvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3Mv
V2ViQ29yZVN1cHBvcnQvbWFjL1dlYkVkaXRvckNsaWVudE1hYy5tbQo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYkNvcmVTdXBwb3J0L21hYy9XZWJFZGl0b3JDbGll
bnRNYWMubW0JKHJldmlzaW9uIDExMjk2MSkKKysrIFNvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3Mv
V2ViQ29yZVN1cHBvcnQvbWFjL1dlYkVkaXRvckNsaWVudE1hYy5tbQkod29ya2luZyBjb3B5KQpA
QCAtMjM5LDE3ICsyMzksMTcgQEAgdm9pZCBXZWJFZGl0b3JDbGllbnQ6OmNoZWNrVGV4dE9mUGFy
YWdyYQogfQogCiAjaWYgIWRlZmluZWQoQlVJTERJTkdfT05fU05PV19MRU9QQVJEKQotdm9pZCBX
ZWJFZGl0b3JDbGllbnQ6OnNob3dDb3JyZWN0aW9uUGFuZWwoV2ViQ29yZTo6Q29ycmVjdGlvblBh
bmVsSW5mbzo6UGFuZWxUeXBlIHR5cGUsIGNvbnN0IFdlYkNvcmU6OkZsb2F0UmVjdCYgYm91bmRp
bmdCb3hPZlJlcGxhY2VkU3RyaW5nLCBjb25zdCBTdHJpbmcmIHJlcGxhY2VkU3RyaW5nLCBjb25z
dCBTdHJpbmcmIHJlcGxhY2VtZW50U3RyaW5nLCBjb25zdCBWZWN0b3I8U3RyaW5nPiYgYWx0ZXJu
YXRpdmVSZXBsYWNlbWVudFN0cmluZ3MpCit2b2lkIFdlYkVkaXRvckNsaWVudDo6c2hvd0NvcnJl
Y3Rpb25QYW5lbChXZWJDb3JlOjpBbHRlcm5hdGl2ZVRleHRUeXBlIHR5cGUsIGNvbnN0IFdlYkNv
cmU6OkZsb2F0UmVjdCYgYm91bmRpbmdCb3hPZlJlcGxhY2VkU3RyaW5nLCBjb25zdCBTdHJpbmcm
IHJlcGxhY2VkU3RyaW5nLCBjb25zdCBTdHJpbmcmIHJlcGxhY2VtZW50U3RyaW5nLCBjb25zdCBW
ZWN0b3I8U3RyaW5nPiYgYWx0ZXJuYXRpdmVSZXBsYWNlbWVudFN0cmluZ3MpCiB7CiAgICAgbV9w
YWdlLT5zZW5kKE1lc3NhZ2VzOjpXZWJQYWdlUHJveHk6OlNob3dDb3JyZWN0aW9uUGFuZWwodHlw
ZSwgYm91bmRpbmdCb3hPZlJlcGxhY2VkU3RyaW5nLCByZXBsYWNlZFN0cmluZywgcmVwbGFjZW1l
bnRTdHJpbmcsIGFsdGVybmF0aXZlUmVwbGFjZW1lbnRTdHJpbmdzKSk7CiB9CiAKLXZvaWQgV2Vi
RWRpdG9yQ2xpZW50OjpkaXNtaXNzQ29ycmVjdGlvblBhbmVsKFdlYkNvcmU6OlJlYXNvbkZvckRp
c21pc3NpbmdDb3JyZWN0aW9uUGFuZWwgcmVhc29uKQordm9pZCBXZWJFZGl0b3JDbGllbnQ6OmRp
c21pc3NDb3JyZWN0aW9uUGFuZWwoV2ViQ29yZTo6UmVhc29uRm9yRGlzbWlzc2luZ0FsdGVybmF0
aXZlVGV4dCByZWFzb24pCiB7CiAgICAgbV9wYWdlLT5zZW5kKE1lc3NhZ2VzOjpXZWJQYWdlUHJv
eHk6OkRpc21pc3NDb3JyZWN0aW9uUGFuZWwocmVhc29uKSk7CiB9CiAKLVN0cmluZyBXZWJFZGl0
b3JDbGllbnQ6OmRpc21pc3NDb3JyZWN0aW9uUGFuZWxTb29uKFdlYkNvcmU6OlJlYXNvbkZvckRp
c21pc3NpbmdDb3JyZWN0aW9uUGFuZWwgcmVhc29uKQorU3RyaW5nIFdlYkVkaXRvckNsaWVudDo6
ZGlzbWlzc0NvcnJlY3Rpb25QYW5lbFNvb24oV2ViQ29yZTo6UmVhc29uRm9yRGlzbWlzc2luZ0Fs
dGVybmF0aXZlVGV4dCByZWFzb24pCiB7CiAgICAgU3RyaW5nIHJlc3VsdDsKICAgICBtX3BhZ2Ut
PnNlbmRTeW5jKE1lc3NhZ2VzOjpXZWJQYWdlUHJveHk6OkRpc21pc3NDb3JyZWN0aW9uUGFuZWxT
b29uKHJlYXNvbiksIE1lc3NhZ2VzOjpXZWJQYWdlUHJveHk6OkRpc21pc3NDb3JyZWN0aW9uUGFu
ZWxTb29uOjpSZXBseShyZXN1bHQpKTsKSW5kZXg6IFNvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3Mv
V2ViUGFnZS9XZWJQYWdlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0Mi9XZWJQcm9j
ZXNzL1dlYlBhZ2UvV2ViUGFnZS5jcHAJKHJldmlzaW9uIDExMjk2MSkKKysrIFNvdXJjZS9XZWJL
aXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9XZWJQYWdlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzAy
MCwxMiArMzAyMCwxMiBAQCBib29sIFdlYlBhZ2U6OmNhbkhhbmRsZVJlcXVlc3QoY29uc3QgV2Vi
CiB9CiAKICNpZiBQTEFURk9STShNQUMpICYmICFkZWZpbmVkKEJVSUxESU5HX09OX1NOT1dfTEVP
UEFSRCkKLXZvaWQgV2ViUGFnZTo6aGFuZGxlQ29ycmVjdGlvblBhbmVsUmVzdWx0KGNvbnN0IFN0
cmluZyYgcmVzdWx0KQordm9pZCBXZWJQYWdlOjpoYW5kbGVBbHRlcm5hdGl2ZVRleHRVSVJlc3Vs
dChjb25zdCBTdHJpbmcmIHJlc3VsdCkKIHsKICAgICBGcmFtZSogZnJhbWUgPSBtX3BhZ2UtPmZv
Y3VzQ29udHJvbGxlcigpLT5mb2N1c2VkT3JNYWluRnJhbWUoKTsKICAgICBpZiAoIWZyYW1lKQog
ICAgICAgICByZXR1cm47Ci0gICAgZnJhbWUtPmVkaXRvcigpLT5oYW5kbGVDb3JyZWN0aW9uUGFu
ZWxSZXN1bHQocmVzdWx0KTsKKyAgICBmcmFtZS0+ZWRpdG9yKCktPmhhbmRsZUFsdGVybmF0aXZl
VGV4dFVJUmVzdWx0KHJlc3VsdCk7CiB9CiAjZW5kaWYKIApJbmRleDogU291cmNlL1dlYktpdDIv
V2ViUHJvY2Vzcy9XZWJQYWdlL1dlYlBhZ2UuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0
Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvV2ViUGFnZS5oCShyZXZpc2lvbiAxMTI5NjEpCisrKyBTb3Vy
Y2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvV2ViUGFnZS5oCSh3b3JraW5nIGNvcHkpCkBA
IC00ODcsNyArNDg3LDcgQEAgcHVibGljOgogICAgIHZvaWQgdW5tYXJrQWxsQmFkR3JhbW1hcigp
OwogCiAjaWYgUExBVEZPUk0oTUFDKSAmJiAhZGVmaW5lZChCVUlMRElOR19PTl9TTk9XX0xFT1BB
UkQpCi0gICAgdm9pZCBoYW5kbGVDb3JyZWN0aW9uUGFuZWxSZXN1bHQoY29uc3QgU3RyaW5nJik7
CisgICAgdm9pZCBoYW5kbGVBbHRlcm5hdGl2ZVRleHRVSVJlc3VsdChjb25zdCBTdHJpbmcmKTsK
ICNlbmRpZgogCiAgICAgLy8gRm9yIHRlc3RpbmcgcHVycG9zZS4KSW5kZXg6IFNvdXJjZS9XZWJL
aXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9XZWJQYWdlLm1lc3NhZ2VzLmluCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9XZWJQYWdlLm1lc3NhZ2VzLmluCShy
ZXZpc2lvbiAxMTI5NjEpCisrKyBTb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvV2Vi
UGFnZS5tZXNzYWdlcy5pbgkod29ya2luZyBjb3B5KQpAQCAtMjU4LDYgKzI1OCw2IEBAIG1lc3Nh
Z2VzIC0+IFdlYlBhZ2UgewogI2VuZGlmCiAKICNpZiBQTEFURk9STShNQUMpICYmICFkZWZpbmVk
KEJVSUxESU5HX09OX1NOT1dfTEVPUEFSRCkKLSAgICBIYW5kbGVDb3JyZWN0aW9uUGFuZWxSZXN1
bHQoU3RyaW5nIHJlc3VsdCkKKyAgICBIYW5kbGVBbHRlcm5hdGl2ZVRleHRVSVJlc3VsdChTdHJp
bmcgcmVzdWx0KQogI2VuZGlmCiB9CkluZGV4OiBTb3VyY2UvV2ViS2l0L21hYy9DaGFuZ2VMb2cK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9tYWMvQ2hhbmdlTG9nCShyZXZpc2lvbiAxMTI5
NjEpCisrKyBTb3VyY2UvV2ViS2l0L21hYy9DaGFuZ2VMb2cJKHdvcmtpbmcgY29weSkKQEAgLTEs
MyArMSwzMSBAQAorMjAxMi0wNC0wMiAgSmlhIFB1ICA8anB1QGFwcGxlLmNvbT4KKworICAgICAg
ICBSZW5hbWUgU3BlbGxpbmdDb3JyZWN0aW9uQ29udHJvbGxlciB0byBBbHRlcm5hdGl2ZVRleHRD
b250cm9sbGVyLgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/
aWQ9ODI5NDIKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAg
ICBUaGVzZSBjaGFuZ2VzIGFyZSBzaW1wbHkgYWRvcHRpbmcgbmV3IGNsYXNzIG5hbWVzLgorCisg
ICAgICAgICogV2ViQ29yZVN1cHBvcnQvQ29ycmVjdGlvblBhbmVsLmg6CisgICAgICAgIChDb3Jy
ZWN0aW9uUGFuZWwpOgorICAgICAgICAqIFdlYkNvcmVTdXBwb3J0L0NvcnJlY3Rpb25QYW5lbC5t
bToKKyAgICAgICAgKGNvcnJlY3Rpb25JbmRpY2F0b3JUeXBlKToKKyAgICAgICAgKENvcnJlY3Rp
b25QYW5lbDo6Q29ycmVjdGlvblBhbmVsKToKKyAgICAgICAgKENvcnJlY3Rpb25QYW5lbDo6fkNv
cnJlY3Rpb25QYW5lbCk6CisgICAgICAgIChDb3JyZWN0aW9uUGFuZWw6OnNob3cpOgorICAgICAg
ICAoQ29ycmVjdGlvblBhbmVsOjpkaXNtaXNzKToKKyAgICAgICAgKENvcnJlY3Rpb25QYW5lbDo6
ZGlzbWlzc0ludGVybmFsKToKKyAgICAgICAgKENvcnJlY3Rpb25QYW5lbDo6aGFuZGxlQWNjZXB0
ZWRSZXBsYWNlbWVudCk6CisgICAgICAgICogV2ViQ29yZVN1cHBvcnQvV2ViRWRpdG9yQ2xpZW50
Lmg6CisgICAgICAgICogV2ViQ29yZVN1cHBvcnQvV2ViRWRpdG9yQ2xpZW50Lm1tOgorICAgICAg
ICAoV2ViRWRpdG9yQ2xpZW50Ojp+V2ViRWRpdG9yQ2xpZW50KToKKyAgICAgICAgKFdlYkVkaXRv
ckNsaWVudDo6c2hvd0NvcnJlY3Rpb25QYW5lbCk6CisgICAgICAgIChXZWJFZGl0b3JDbGllbnQ6
OmRpc21pc3NDb3JyZWN0aW9uUGFuZWwpOgorICAgICAgICAoV2ViRWRpdG9yQ2xpZW50OjpkaXNt
aXNzQ29ycmVjdGlvblBhbmVsU29vbik6CisgICAgICAgICogV2ViVmlldy9XZWJWaWV3Lm1tOgor
ICAgICAgICAoLVtXZWJWaWV3IGhhbmRsZUNvcnJlY3Rpb25QYW5lbFJlc3VsdDpdKToKKwogMjAx
Mi0wNC0wMSAgSm9uIExlZSAgPGpvbmxlZUBhcHBsZS5jb20+CiAKICAgICAgICAgUmVuYW1lIG5v
dGlmaWNhdGlvbiBwcm9wZXJ0aWVzIGFuZCBmdW5jdGlvbnMKSW5kZXg6IFNvdXJjZS9XZWJLaXQv
bWFjL1dlYkNvcmVTdXBwb3J0L0NvcnJlY3Rpb25QYW5lbC5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9XZWJLaXQvbWFjL1dlYkNvcmVTdXBwb3J0L0NvcnJlY3Rpb25QYW5lbC5oCShyZXZpc2lvbiAx
MTI5NjEpCisrKyBTb3VyY2UvV2ViS2l0L21hYy9XZWJDb3JlU3VwcG9ydC9Db3JyZWN0aW9uUGFu
ZWwuaAkod29ya2luZyBjb3B5KQpAQCAtMjgsNyArMjgsNyBAQAogCiAjaWYgIWRlZmluZWQoQlVJ
TERJTkdfT05fTEVPUEFSRCkgJiYgIWRlZmluZWQoQlVJTERJTkdfT05fU05PV19MRU9QQVJEKQog
I2ltcG9ydCA8QXBwS2l0L05TU3BlbGxDaGVja2VyLmg+Ci0jaW1wb3J0IDxXZWJDb3JlL1NwZWxs
aW5nQ29ycmVjdGlvbkNvbnRyb2xsZXIuaD4KKyNpbXBvcnQgPFdlYkNvcmUvQWx0ZXJuYXRpdmVU
ZXh0Q29udHJvbGxlci5oPgogI2ltcG9ydCA8d3RmL1JldGFpblB0ci5oPgogCiBAY2xhc3MgV2Vi
VmlldzsKQEAgLTM4LDE3ICszOCwxNyBAQCBjbGFzcyBDb3JyZWN0aW9uUGFuZWwgewogcHVibGlj
OgogICAgIENvcnJlY3Rpb25QYW5lbCgpOwogICAgIH5Db3JyZWN0aW9uUGFuZWwoKTsKLSAgICB2
b2lkIHNob3coV2ViVmlldyosIFdlYkNvcmU6OkNvcnJlY3Rpb25QYW5lbEluZm86OlBhbmVsVHlw
ZSwgY29uc3QgV2ViQ29yZTo6RmxvYXRSZWN0JiBib3VuZGluZ0JveE9mUmVwbGFjZWRTdHJpbmcs
IGNvbnN0IFN0cmluZyYgcmVwbGFjZWRTdHJpbmcsIGNvbnN0IFN0cmluZyYgcmVwbGFjZW1lbnRT
dHJpbmcsIGNvbnN0IFZlY3RvcjxTdHJpbmc+JiBhbHRlcm5hdGl2ZVJlcGxhY2VtZW50U3RyaW5n
cyk7Ci0gICAgU3RyaW5nIGRpc21pc3MoV2ViQ29yZTo6UmVhc29uRm9yRGlzbWlzc2luZ0NvcnJl
Y3Rpb25QYW5lbCk7CisgICAgdm9pZCBzaG93KFdlYlZpZXcqLCBXZWJDb3JlOjpBbHRlcm5hdGl2
ZVRleHRUeXBlLCBjb25zdCBXZWJDb3JlOjpGbG9hdFJlY3QmIGJvdW5kaW5nQm94T2ZSZXBsYWNl
ZFN0cmluZywgY29uc3QgU3RyaW5nJiByZXBsYWNlZFN0cmluZywgY29uc3QgU3RyaW5nJiByZXBs
YWNlbWVudFN0cmluZywgY29uc3QgVmVjdG9yPFN0cmluZz4mIGFsdGVybmF0aXZlUmVwbGFjZW1l
bnRTdHJpbmdzKTsKKyAgICBTdHJpbmcgZGlzbWlzcyhXZWJDb3JlOjpSZWFzb25Gb3JEaXNtaXNz
aW5nQWx0ZXJuYXRpdmVUZXh0KTsKICAgICBzdGF0aWMgdm9pZCByZWNvcmRBdXRvY29ycmVjdGlv
blJlc3BvbnNlKFdlYlZpZXcqLCBOU0NvcnJlY3Rpb25SZXNwb25zZSwgY29uc3QgU3RyaW5nJiBy
ZXBsYWNlZFN0cmluZywgY29uc3QgU3RyaW5nJiByZXBsYWNlbWVudFN0cmluZyk7CiAKIHByaXZh
dGU6CiAgICAgYm9vbCBpc1Nob3dpbmcoKSBjb25zdCB7IHJldHVybiBtX3ZpZXc7IH0KLSAgICBT
dHJpbmcgZGlzbWlzc0ludGVybmFsKFdlYkNvcmU6OlJlYXNvbkZvckRpc21pc3NpbmdDb3JyZWN0
aW9uUGFuZWwsIGJvb2wgZGlzbWlzc2luZ0V4dGVybmFsbHkpOworICAgIFN0cmluZyBkaXNtaXNz
SW50ZXJuYWwoV2ViQ29yZTo6UmVhc29uRm9yRGlzbWlzc2luZ0FsdGVybmF0aXZlVGV4dCwgYm9v
bCBkaXNtaXNzaW5nRXh0ZXJuYWxseSk7CiAgICAgdm9pZCBoYW5kbGVBY2NlcHRlZFJlcGxhY2Vt
ZW50KE5TU3RyaW5nKiBhY2NlcHRlZFJlcGxhY2VtZW50LCBOU1N0cmluZyogcmVwbGFjZWQsIE5T
U3RyaW5nKiBwcm9wb3NlZFJlcGxhY2VtZW50LCBOU0NvcnJlY3Rpb25JbmRpY2F0b3JUeXBlKTsK
IAogICAgIGJvb2wgbV93YXNEaXNtaXNzZWRFeHRlcm5hbGx5OwotICAgIFdlYkNvcmU6OlJlYXNv
bkZvckRpc21pc3NpbmdDb3JyZWN0aW9uUGFuZWwgbV9yZWFzb25Gb3JEaXNtaXNzaW5nOworICAg
IFdlYkNvcmU6OlJlYXNvbkZvckRpc21pc3NpbmdBbHRlcm5hdGl2ZVRleHQgbV9yZWFzb25Gb3JE
aXNtaXNzaW5nOwogICAgIFJldGFpblB0cjxXZWJWaWV3PiBtX3ZpZXc7CiAgICAgUmV0YWluUHRy
PE5TU3RyaW5nPiBtX3Jlc3VsdEZvckRpc21pc3NhbDsKIH07CkluZGV4OiBTb3VyY2UvV2ViS2l0
L21hYy9XZWJDb3JlU3VwcG9ydC9Db3JyZWN0aW9uUGFuZWwubW0KPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1dlYktpdC9tYWMvV2ViQ29yZVN1cHBvcnQvQ29ycmVjdGlvblBhbmVsLm1tCShyZXZpc2lv
biAxMTI5NjEpCisrKyBTb3VyY2UvV2ViS2l0L21hYy9XZWJDb3JlU3VwcG9ydC9Db3JyZWN0aW9u
UGFuZWwubW0JKHdvcmtpbmcgY29weSkKQEAgLTMwLDE0ICszMCwxNCBAQAogI2lmICFkZWZpbmVk
KEJVSUxESU5HX09OX0xFT1BBUkQpICYmICFkZWZpbmVkKEJVSUxESU5HX09OX1NOT1dfTEVPUEFS
RCkKIHVzaW5nIG5hbWVzcGFjZSBXZWJDb3JlOwogCi1zdGF0aWMgaW5saW5lIE5TQ29ycmVjdGlv
bkluZGljYXRvclR5cGUgY29ycmVjdGlvbkluZGljYXRvclR5cGUoQ29ycmVjdGlvblBhbmVsSW5m
bzo6UGFuZWxUeXBlIHBhbmVsVHlwZSkKK3N0YXRpYyBpbmxpbmUgTlNDb3JyZWN0aW9uSW5kaWNh
dG9yVHlwZSBjb3JyZWN0aW9uSW5kaWNhdG9yVHlwZShBbHRlcm5hdGl2ZVRleHRUeXBlIGFsdGVy
bmF0aXZlVGV4dFR5cGUpCiB7Ci0gICAgc3dpdGNoIChwYW5lbFR5cGUpIHsKLSAgICBjYXNlIENv
cnJlY3Rpb25QYW5lbEluZm86OlBhbmVsVHlwZUNvcnJlY3Rpb246CisgICAgc3dpdGNoIChhbHRl
cm5hdGl2ZVRleHRUeXBlKSB7CisgICAgY2FzZSBBbHRlcm5hdGl2ZVRleHRUeXBlQ29ycmVjdGlv
bjoKICAgICAgICAgcmV0dXJuIE5TQ29ycmVjdGlvbkluZGljYXRvclR5cGVEZWZhdWx0OwotICAg
IGNhc2UgQ29ycmVjdGlvblBhbmVsSW5mbzo6UGFuZWxUeXBlUmV2ZXJzaW9uOgorICAgIGNhc2Ug
QWx0ZXJuYXRpdmVUZXh0VHlwZVJldmVyc2lvbjoKICAgICAgICAgcmV0dXJuIE5TQ29ycmVjdGlv
bkluZGljYXRvclR5cGVSZXZlcnNpb247Ci0gICAgY2FzZSBDb3JyZWN0aW9uUGFuZWxJbmZvOjpQ
YW5lbFR5cGVTcGVsbGluZ1N1Z2dlc3Rpb25zOgorICAgIGNhc2UgQWx0ZXJuYXRpdmVUZXh0VHlw
ZVNwZWxsaW5nU3VnZ2VzdGlvbnM6CiAgICAgICAgIHJldHVybiBOU0NvcnJlY3Rpb25JbmRpY2F0
b3JUeXBlR3Vlc3NlczsKICAgICB9CiAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CkBAIC00Niwx
OCArNDYsMTggQEAgc3RhdGljIGlubGluZSBOU0NvcnJlY3Rpb25JbmRpY2F0b3JUeXBlIAogCiBD
b3JyZWN0aW9uUGFuZWw6OkNvcnJlY3Rpb25QYW5lbCgpCiAgICAgOiBtX3dhc0Rpc21pc3NlZEV4
dGVybmFsbHkoZmFsc2UpCi0gICAgLCBtX3JlYXNvbkZvckRpc21pc3NpbmcoUmVhc29uRm9yRGlz
bWlzc2luZ0NvcnJlY3Rpb25QYW5lbElnbm9yZWQpCisgICAgLCBtX3JlYXNvbkZvckRpc21pc3Np
bmcoUmVhc29uRm9yRGlzbWlzc2luZ0FsdGVybmF0aXZlVGV4dElnbm9yZWQpCiB7CiB9CiAKIENv
cnJlY3Rpb25QYW5lbDo6fkNvcnJlY3Rpb25QYW5lbCgpCiB7Ci0gICAgZGlzbWlzc0ludGVybmFs
KFJlYXNvbkZvckRpc21pc3NpbmdDb3JyZWN0aW9uUGFuZWxJZ25vcmVkLCBmYWxzZSk7CisgICAg
ZGlzbWlzc0ludGVybmFsKFJlYXNvbkZvckRpc21pc3NpbmdBbHRlcm5hdGl2ZVRleHRJZ25vcmVk
LCBmYWxzZSk7CiB9CiAKLXZvaWQgQ29ycmVjdGlvblBhbmVsOjpzaG93KFdlYlZpZXcqIHZpZXcs
IENvcnJlY3Rpb25QYW5lbEluZm86OlBhbmVsVHlwZSB0eXBlLCBjb25zdCBGbG9hdFJlY3QmIGJv
dW5kaW5nQm94T2ZSZXBsYWNlZFN0cmluZywgY29uc3QgU3RyaW5nJiByZXBsYWNlZFN0cmluZywg
Y29uc3QgU3RyaW5nJiByZXBsYWNlbWVudFN0cmluZywgY29uc3QgVmVjdG9yPFN0cmluZz4mIGFs
dGVybmF0aXZlUmVwbGFjZW1lbnRTdHJpbmdzKQordm9pZCBDb3JyZWN0aW9uUGFuZWw6OnNob3co
V2ViVmlldyogdmlldywgQWx0ZXJuYXRpdmVUZXh0VHlwZSB0eXBlLCBjb25zdCBGbG9hdFJlY3Qm
IGJvdW5kaW5nQm94T2ZSZXBsYWNlZFN0cmluZywgY29uc3QgU3RyaW5nJiByZXBsYWNlZFN0cmlu
ZywgY29uc3QgU3RyaW5nJiByZXBsYWNlbWVudFN0cmluZywgY29uc3QgVmVjdG9yPFN0cmluZz4m
IGFsdGVybmF0aXZlUmVwbGFjZW1lbnRTdHJpbmdzKQogewotICAgIGRpc21pc3NJbnRlcm5hbChS
ZWFzb25Gb3JEaXNtaXNzaW5nQ29ycmVjdGlvblBhbmVsSWdub3JlZCwgZmFsc2UpOworICAgIGRp
c21pc3NJbnRlcm5hbChSZWFzb25Gb3JEaXNtaXNzaW5nQWx0ZXJuYXRpdmVUZXh0SWdub3JlZCwg
ZmFsc2UpOwogICAgIAogICAgIGlmICghdmlldykKICAgICAgICAgcmV0dXJuOwpAQCAtODAsMTIg
KzgwLDEyIEBAIHZvaWQgQ29ycmVjdGlvblBhbmVsOjpzaG93KFdlYlZpZXcqIHZpZXcKICAgICB9
XTsKIH0KIAotU3RyaW5nIENvcnJlY3Rpb25QYW5lbDo6ZGlzbWlzcyhSZWFzb25Gb3JEaXNtaXNz
aW5nQ29ycmVjdGlvblBhbmVsIHJlYXNvbikKK1N0cmluZyBDb3JyZWN0aW9uUGFuZWw6OmRpc21p
c3MoUmVhc29uRm9yRGlzbWlzc2luZ0FsdGVybmF0aXZlVGV4dCByZWFzb24pCiB7CiAgICAgcmV0
dXJuIGRpc21pc3NJbnRlcm5hbChyZWFzb24sIHRydWUpOwogfQogCi1TdHJpbmcgQ29ycmVjdGlv
blBhbmVsOjpkaXNtaXNzSW50ZXJuYWwoUmVhc29uRm9yRGlzbWlzc2luZ0NvcnJlY3Rpb25QYW5l
bCByZWFzb24sIGJvb2wgZGlzbWlzc2luZ0V4dGVybmFsbHkpCitTdHJpbmcgQ29ycmVjdGlvblBh
bmVsOjpkaXNtaXNzSW50ZXJuYWwoUmVhc29uRm9yRGlzbWlzc2luZ0FsdGVybmF0aXZlVGV4dCBy
ZWFzb24sIGJvb2wgZGlzbWlzc2luZ0V4dGVybmFsbHkpCiB7CiAgICAgaWYgKCFpc1Nob3dpbmco
KSkKICAgICAgICAgcmV0dXJuIFN0cmluZygpOwpAQCAtMTE1LDcgKzExNSw3IEBAIHZvaWQgQ29y
cmVjdGlvblBhbmVsOjpoYW5kbGVBY2NlcHRlZFJlcGwKICAgICAgICAgaWYgKGFjY2VwdGVkUmVw
bGFjZW1lbnQpCiAgICAgICAgICAgICBbc3BlbGxDaGVja2VyIHJlY29yZFJlc3BvbnNlOk5TQ29y
cmVjdGlvblJlc3BvbnNlQWNjZXB0ZWQgdG9Db3JyZWN0aW9uOmFjY2VwdGVkUmVwbGFjZW1lbnQg
Zm9yV29yZDpyZXBsYWNlZCBsYW5ndWFnZTpuaWwgaW5TcGVsbERvY3VtZW50V2l0aFRhZzpkb2N1
bWVudFRhZ107CiAgICAgICAgIGVsc2UgewotICAgICAgICAgICAgaWYgKCFtX3dhc0Rpc21pc3Nl
ZEV4dGVybmFsbHkgfHwgbV9yZWFzb25Gb3JEaXNtaXNzaW5nID09IFJlYXNvbkZvckRpc21pc3Np
bmdDb3JyZWN0aW9uUGFuZWxDYW5jZWxsZWQpCisgICAgICAgICAgICBpZiAoIW1fd2FzRGlzbWlz
c2VkRXh0ZXJuYWxseSB8fCBtX3JlYXNvbkZvckRpc21pc3NpbmcgPT0gUmVhc29uRm9yRGlzbWlz
c2luZ0FsdGVybmF0aXZlVGV4dENhbmNlbGxlZCkKICAgICAgICAgICAgICAgICBbc3BlbGxDaGVj
a2VyIHJlY29yZFJlc3BvbnNlOk5TQ29ycmVjdGlvblJlc3BvbnNlUmVqZWN0ZWQgdG9Db3JyZWN0
aW9uOnByb3Bvc2VkUmVwbGFjZW1lbnQgZm9yV29yZDpyZXBsYWNlZCBsYW5ndWFnZTpuaWwgaW5T
cGVsbERvY3VtZW50V2l0aFRhZzpkb2N1bWVudFRhZ107CiAgICAgICAgICAgICBlbHNlCiAgICAg
ICAgICAgICAgICAgW3NwZWxsQ2hlY2tlciByZWNvcmRSZXNwb25zZTpOU0NvcnJlY3Rpb25SZXNw
b25zZUlnbm9yZWQgdG9Db3JyZWN0aW9uOnByb3Bvc2VkUmVwbGFjZW1lbnQgZm9yV29yZDpyZXBs
YWNlZCBsYW5ndWFnZTpuaWwgaW5TcGVsbERvY3VtZW50V2l0aFRhZzpkb2N1bWVudFRhZ107Cklu
ZGV4OiBTb3VyY2UvV2ViS2l0L21hYy9XZWJDb3JlU3VwcG9ydC9XZWJFZGl0b3JDbGllbnQuaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L21hYy9XZWJDb3JlU3VwcG9ydC9XZWJFZGl0b3JD
bGllbnQuaAkocmV2aXNpb24gMTEyOTYxKQorKysgU291cmNlL1dlYktpdC9tYWMvV2ViQ29yZVN1
cHBvcnQvV2ViRWRpdG9yQ2xpZW50LmgJKHdvcmtpbmcgY29weSkKQEAgLTEzNyw5ICsxMzcsOSBA
QCBwdWJsaWM6CiAgICAgdmlydHVhbCB2b2lkIHNldElucHV0TWV0aG9kU3RhdGUoYm9vbCBlbmFi
bGVkKSBPVkVSUklERTsKICAgICB2aXJ0dWFsIHZvaWQgcmVxdWVzdENoZWNraW5nT2ZTdHJpbmco
V2ViQ29yZTo6U3BlbGxDaGVja2VyKiwgY29uc3QgV2ViQ29yZTo6VGV4dENoZWNraW5nUmVxdWVz
dCYpIE9WRVJSSURFOwogI2lmICFkZWZpbmVkKEJVSUxESU5HX09OX0xFT1BBUkQpICYmICFkZWZp
bmVkKEJVSUxESU5HX09OX1NOT1dfTEVPUEFSRCkKLSAgICB2aXJ0dWFsIHZvaWQgc2hvd0NvcnJl
Y3Rpb25QYW5lbChXZWJDb3JlOjpDb3JyZWN0aW9uUGFuZWxJbmZvOjpQYW5lbFR5cGUsIGNvbnN0
IFdlYkNvcmU6OkZsb2F0UmVjdCYgYm91bmRpbmdCb3hPZlJlcGxhY2VkU3RyaW5nLCBjb25zdCBT
dHJpbmcmIHJlcGxhY2VkU3RyaW5nLCBjb25zdCBTdHJpbmcmIHJlcGxhY2VtZW50U3RyaW5nLCBj
b25zdCBWZWN0b3I8U3RyaW5nPiYgYWx0ZXJuYXRpdmVSZXBsYWNlbWVudFN0cmluZ3MpIE9WRVJS
SURFOwotICAgIHZpcnR1YWwgdm9pZCBkaXNtaXNzQ29ycmVjdGlvblBhbmVsKFdlYkNvcmU6OlJl
YXNvbkZvckRpc21pc3NpbmdDb3JyZWN0aW9uUGFuZWwpIE9WRVJSSURFOwotICAgIHZpcnR1YWwg
U3RyaW5nIGRpc21pc3NDb3JyZWN0aW9uUGFuZWxTb29uKFdlYkNvcmU6OlJlYXNvbkZvckRpc21p
c3NpbmdDb3JyZWN0aW9uUGFuZWwpIE9WRVJSSURFOworICAgIHZpcnR1YWwgdm9pZCBzaG93Q29y
cmVjdGlvblBhbmVsKFdlYkNvcmU6OkFsdGVybmF0aXZlVGV4dFR5cGUsIGNvbnN0IFdlYkNvcmU6
OkZsb2F0UmVjdCYgYm91bmRpbmdCb3hPZlJlcGxhY2VkU3RyaW5nLCBjb25zdCBTdHJpbmcmIHJl
cGxhY2VkU3RyaW5nLCBjb25zdCBTdHJpbmcmIHJlcGxhY2VtZW50U3RyaW5nLCBjb25zdCBWZWN0
b3I8U3RyaW5nPiYgYWx0ZXJuYXRpdmVSZXBsYWNlbWVudFN0cmluZ3MpIE9WRVJSSURFOworICAg
IHZpcnR1YWwgdm9pZCBkaXNtaXNzQ29ycmVjdGlvblBhbmVsKFdlYkNvcmU6OlJlYXNvbkZvckRp
c21pc3NpbmdBbHRlcm5hdGl2ZVRleHQpIE9WRVJSSURFOworICAgIHZpcnR1YWwgU3RyaW5nIGRp
c21pc3NDb3JyZWN0aW9uUGFuZWxTb29uKFdlYkNvcmU6OlJlYXNvbkZvckRpc21pc3NpbmdBbHRl
cm5hdGl2ZVRleHQpIE9WRVJSSURFOwogICAgIHZpcnR1YWwgdm9pZCByZWNvcmRBdXRvY29ycmVj
dGlvblJlc3BvbnNlKEF1dG9jb3JyZWN0aW9uUmVzcG9uc2VUeXBlLCBjb25zdCBTdHJpbmcmIHJl
cGxhY2VkU3RyaW5nLCBjb25zdCBTdHJpbmcmIHJlcGxhY2VtZW50U3RyaW5nKSBPVkVSUklERTsK
ICNlbmRpZgogcHJpdmF0ZToKSW5kZXg6IFNvdXJjZS9XZWJLaXQvbWFjL1dlYkNvcmVTdXBwb3J0
L1dlYkVkaXRvckNsaWVudC5tbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L21hYy9XZWJD
b3JlU3VwcG9ydC9XZWJFZGl0b3JDbGllbnQubW0JKHJldmlzaW9uIDExMjk2MSkKKysrIFNvdXJj
ZS9XZWJLaXQvbWFjL1dlYkNvcmVTdXBwb3J0L1dlYkVkaXRvckNsaWVudC5tbQkod29ya2luZyBj
b3B5KQpAQCAtMTkwLDcgKzE5MCw3IEBAIFdlYkVkaXRvckNsaWVudDo6V2ViRWRpdG9yQ2xpZW50
KFdlYlZpZXcKIFdlYkVkaXRvckNsaWVudDo6fldlYkVkaXRvckNsaWVudCgpCiB7CiAjaWYgIWRl
ZmluZWQoQlVJTERJTkdfT05fTEVPUEFSRCkgJiYgIWRlZmluZWQoQlVJTERJTkdfT05fU05PV19M
RU9QQVJEKQotICAgIGRpc21pc3NDb3JyZWN0aW9uUGFuZWwoUmVhc29uRm9yRGlzbWlzc2luZ0Nv
cnJlY3Rpb25QYW5lbElnbm9yZWQpOworICAgIGRpc21pc3NDb3JyZWN0aW9uUGFuZWwoUmVhc29u
Rm9yRGlzbWlzc2luZ0FsdGVybmF0aXZlVGV4dElnbm9yZWQpOwogI2VuZGlmCiB9CiAKQEAgLTg2
NywxNyArODY3LDE3IEBAIHZvaWQgV2ViRWRpdG9yQ2xpZW50Ojp1cGRhdGVTcGVsbGluZ1VJV2kK
IH0KIAogI2lmICFkZWZpbmVkKEJVSUxESU5HX09OX0xFT1BBUkQpICYmICFkZWZpbmVkKEJVSUxE
SU5HX09OX1NOT1dfTEVPUEFSRCkKLXZvaWQgV2ViRWRpdG9yQ2xpZW50OjpzaG93Q29ycmVjdGlv
blBhbmVsKENvcnJlY3Rpb25QYW5lbEluZm86OlBhbmVsVHlwZSBwYW5lbFR5cGUsIGNvbnN0IEZs
b2F0UmVjdCYgYm91bmRpbmdCb3hPZlJlcGxhY2VkU3RyaW5nLCBjb25zdCBTdHJpbmcmIHJlcGxh
Y2VkU3RyaW5nLCBjb25zdCBTdHJpbmcmIHJlcGxhY2VtZW50U3RyaW5nLCBjb25zdCBWZWN0b3I8
U3RyaW5nPiYgYWx0ZXJuYXRpdmVSZXBsYWNlbWVudFN0cmluZ3MpCit2b2lkIFdlYkVkaXRvckNs
aWVudDo6c2hvd0NvcnJlY3Rpb25QYW5lbChBbHRlcm5hdGl2ZVRleHRUeXBlIHBhbmVsVHlwZSwg
Y29uc3QgRmxvYXRSZWN0JiBib3VuZGluZ0JveE9mUmVwbGFjZWRTdHJpbmcsIGNvbnN0IFN0cmlu
ZyYgcmVwbGFjZWRTdHJpbmcsIGNvbnN0IFN0cmluZyYgcmVwbGFjZW1lbnRTdHJpbmcsIGNvbnN0
IFZlY3RvcjxTdHJpbmc+JiBhbHRlcm5hdGl2ZVJlcGxhY2VtZW50U3RyaW5ncykKIHsKICAgICBt
X2NvcnJlY3Rpb25QYW5lbC5zaG93KG1fd2ViVmlldywgcGFuZWxUeXBlLCBib3VuZGluZ0JveE9m
UmVwbGFjZWRTdHJpbmcsIHJlcGxhY2VkU3RyaW5nLCByZXBsYWNlbWVudFN0cmluZywgYWx0ZXJu
YXRpdmVSZXBsYWNlbWVudFN0cmluZ3MpOwogfQogCi12b2lkIFdlYkVkaXRvckNsaWVudDo6ZGlz
bWlzc0NvcnJlY3Rpb25QYW5lbChSZWFzb25Gb3JEaXNtaXNzaW5nQ29ycmVjdGlvblBhbmVsIHJl
YXNvbkZvckRpc21pc3NpbmcpCit2b2lkIFdlYkVkaXRvckNsaWVudDo6ZGlzbWlzc0NvcnJlY3Rp
b25QYW5lbChSZWFzb25Gb3JEaXNtaXNzaW5nQWx0ZXJuYXRpdmVUZXh0IHJlYXNvbkZvckRpc21p
c3NpbmcpCiB7CiAgICAgbV9jb3JyZWN0aW9uUGFuZWwuZGlzbWlzcyhyZWFzb25Gb3JEaXNtaXNz
aW5nKTsKIH0KIAotU3RyaW5nIFdlYkVkaXRvckNsaWVudDo6ZGlzbWlzc0NvcnJlY3Rpb25QYW5l
bFNvb24oUmVhc29uRm9yRGlzbWlzc2luZ0NvcnJlY3Rpb25QYW5lbCByZWFzb25Gb3JEaXNtaXNz
aW5nKQorU3RyaW5nIFdlYkVkaXRvckNsaWVudDo6ZGlzbWlzc0NvcnJlY3Rpb25QYW5lbFNvb24o
UmVhc29uRm9yRGlzbWlzc2luZ0FsdGVybmF0aXZlVGV4dCByZWFzb25Gb3JEaXNtaXNzaW5nKQog
ewogICAgIHJldHVybiBtX2NvcnJlY3Rpb25QYW5lbC5kaXNtaXNzKHJlYXNvbkZvckRpc21pc3Np
bmcpOwogfQpJbmRleDogU291cmNlL1dlYktpdC9tYWMvV2ViVmlldy9XZWJWaWV3Lm1tCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvbWFjL1dlYlZpZXcvV2ViVmlldy5tbQkocmV2aXNpb24g
MTEyOTYxKQorKysgU291cmNlL1dlYktpdC9tYWMvV2ViVmlldy9XZWJWaWV3Lm1tCSh3b3JraW5n
IGNvcHkpCkBAIC01NDg4LDcgKzU0ODgsNyBAQCAtICh2b2lkKWhhbmRsZUNvcnJlY3Rpb25QYW5l
bFJlc3VsdDooTlNTCiAgICAgV2ViRnJhbWUgKndlYkZyYW1lID0gW3NlbGYgX3NlbGVjdGVkT3JN
YWluRnJhbWVdOwogICAgIEZyYW1lKiBjb3JlRnJhbWUgPSBjb3JlKHdlYkZyYW1lKTsKICAgICBp
ZiAoY29yZUZyYW1lKQotICAgICAgICBjb3JlRnJhbWUtPmVkaXRvcigpLT5oYW5kbGVDb3JyZWN0
aW9uUGFuZWxSZXN1bHQocmVzdWx0KTsKKyAgICAgICAgY29yZUZyYW1lLT5lZGl0b3IoKS0+aGFu
ZGxlQWx0ZXJuYXRpdmVUZXh0VUlSZXN1bHQocmVzdWx0KTsKIH0KICNlbmRpZgogCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>135257</attachid>
            <date>2012-04-02 19:06:53 -0700</date>
            <delta_ts>2012-04-03 10:03:15 -0700</delta_ts>
            <desc>Attempt to fix gtk and windows build.</desc>
            <filename>bug-82942-20120402190651.patch</filename>
            <type>text/plain</type>
            <size>183501</size>
            <attacher name="Jia Pu">jiapu.mail</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDExMjk2MSkKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDEwNyBAQAorMjAxMi0wNC0wMiAgSmlhIFB1
ICA8anB1QGFwcGxlLmNvbT4KKworICAgICAgICBSZW5hbWUgU3BlbGxpbmdDb3JyZWN0aW9uQ29u
dHJvbGxlciB0byBBbHRlcm5hdGl2ZVRleHRDb250cm9sbGVyLgorICAgICAgICBodHRwczovL2J1
Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9ODI5NDIKKworICAgICAgICBSZXZpZXdlZCBi
eSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBObyBuZXcgdGVzdHMsIHNpbmNlIHRoZXJlJ3Mg
bm8gY2hhbmdlIG9mIGZ1bmNhdGlvbmFsaXRpZXMuCisKKyAgICAgICAgVGhpcyBwYXRjaCByZW5h
bWVzIFNwZWxsaW5nQ29ycmVjdGlvbkNvbnRyb2xsZXIgdG8gQWx0ZXJuYXRpdmVUZXh0Q29udHJv
bGxlciwgQ29ycmVjdGlvblBhbmVsSW5mbyB0bworICAgICAgICBBbHRlcm5hdGl2ZVRleHRJbmZv
LCBDb3JyZWN0aW9uUGFuZWxJbmZvOjpDb3JyZXRpb25QYW5lbFR5cGUgdG8gQWx0ZXJuYXRpdmVU
ZXh0VHlwZSwgYW5kIFJlYXNvbkZvckRpc21pc3NpbmdDb3JyZWN0aW9uUGFuZWwKKyAgICAgICAg
dG8gUmVhc29uRm9yRGlzbWlzc2luZ0FsdGVybmF0aXZlVGV4dC4gQWxsIHRoZXNlIHJlbmFtaW5n
IHJlZmxlY3RzIHRoZSBmYWN0IHRoYXQgdGhpcyBjbGFzcyBjb250cm9scyBjaGFuZ2UKKyAgICAg
ICAgb2YgdGV4dCBjYXVzZWQgYnkgYm90aCBzcGVsbCBjaGVja2luZyBhbmQgYWx0ZXJuYXRpdmUg
ZGljdGF0aW9uIHJlc3VsdHMuIEl0IGFsc28gcmVuYW1lcyBhIGNvdXBsZSBvZiBmdW5jdGlvbnMK
KyAgICAgICAgaW4gdGhlIG9yaWdpbmFsIFNwZWxsaW5nQ29ycmVjdGlvbkNvbnRyb2xsZXIgY2xh
c3MgZm9yIHRoZSBzYW1lIHJlYXNvbi4KKworICAgICAgICBTcGVsbGluZ0NvcnJlY3Rpb25QYW5l
bDo6cmVwbGFjZW1lbnRTdHJpbmcgaGFzIGJlZW4gcmVwbGFjZWQgYnkgQWx0ZXJuYXRpdmVUZXh0
SW5mbzo6ZGV0YWlscyB3aGljaCBpcyBhbiBvYmplY3QKKyAgICAgICAgdGhhdCBjYW4gYmUgaW5z
dGFudGlhdGVkIHdpdGggZGlmZmVyZW50IHN1YmNsYXNzZXMuCisKKyAgICAgICAgKiBDTWFrZUxp
c3RzLnR4dDoKKyAgICAgICAgKiBHTlVtYWtlZmlsZS5saXN0LmFtOgorICAgICAgICAqIFRhcmdl
dC5wcmk6CisgICAgICAgICogV2ViQ29yZS5leHAuaW46CisgICAgICAgICogV2ViQ29yZS5neXBp
OgorICAgICAgICAqIFdlYkNvcmUudmNwcm9qL1dlYkNvcmUudmNwcm9qOgorICAgICAgICAqIFdl
YkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvajoKKyAgICAgICAgKiBlZGl0aW5nL0FsdGVy
bmF0aXZlVGV4dENvbnRyb2xsZXIuY3BwOiBDb3BpZWQgZnJvbSBTb3VyY2UvV2ViQ29yZS9lZGl0
aW5nL1NwZWxsaW5nQ29ycmVjdGlvbkNvbnRyb2xsZXIuY3BwLgorICAgICAgICAoQXV0b2NvcnJl
Y3Rpb25BbHRlcm5hdGl2ZURldGFpbHMpOgorICAgICAgICAoV2ViQ29yZTo6QXV0b2NvcnJlY3Rp
b25BbHRlcm5hdGl2ZURldGFpbHM6OmNyZWF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpBdXRvY29y
cmVjdGlvbkFsdGVybmF0aXZlRGV0YWlsczo6cmVwbGFjZW1lbnRTdHJpbmcpOgorICAgICAgICAo
V2ViQ29yZTo6QXV0b2NvcnJlY3Rpb25BbHRlcm5hdGl2ZURldGFpbHM6OkF1dG9jb3JyZWN0aW9u
QWx0ZXJuYXRpdmVEZXRhaWxzKToKKyAgICAgICAgKFdlYkNvcmUpOgorICAgICAgICAoV2ViQ29y
ZTo6QWx0ZXJuYXRpdmVUZXh0Q29udHJvbGxlcjo6QWx0ZXJuYXRpdmVUZXh0Q29udHJvbGxlcik6
CisgICAgICAgIChXZWJDb3JlOjpBbHRlcm5hdGl2ZVRleHRDb250cm9sbGVyOjp+QWx0ZXJuYXRp
dmVUZXh0Q29udHJvbGxlcik6CisgICAgICAgIChXZWJDb3JlOjpBbHRlcm5hdGl2ZVRleHRDb250
cm9sbGVyOjpzdGFydEFsdGVybmF0aXZlVGV4dFVJVGltZXIpOgorICAgICAgICAoV2ViQ29yZTo6
QWx0ZXJuYXRpdmVUZXh0Q29udHJvbGxlcjo6c3RvcEFsdGVybmF0aXZlVGV4dFVJVGltZXIpOgor
ICAgICAgICAoV2ViQ29yZTo6QWx0ZXJuYXRpdmVUZXh0Q29udHJvbGxlcjo6c3RvcFBlbmRpbmdD
b3JyZWN0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OkFsdGVybmF0aXZlVGV4dENvbnRyb2xsZXI6
OmFwcGx5UGVuZGluZ0NvcnJlY3Rpb24pOgorICAgICAgICAoV2ViQ29yZTo6QWx0ZXJuYXRpdmVU
ZXh0Q29udHJvbGxlcjo6aGFzUGVuZGluZ0NvcnJlY3Rpb24pOgorICAgICAgICAoV2ViQ29yZTo6
QWx0ZXJuYXRpdmVUZXh0Q29udHJvbGxlcjo6aXNTcGVsbGluZ01hcmtlckFsbG93ZWQpOgorICAg
ICAgICAoV2ViQ29yZTo6QWx0ZXJuYXRpdmVUZXh0Q29udHJvbGxlcjo6c2hvdyk6CisgICAgICAg
IChXZWJDb3JlOjpBbHRlcm5hdGl2ZVRleHRDb250cm9sbGVyOjpoYW5kbGVDYW5jZWxPcGVyYXRp
b24pOgorICAgICAgICAoV2ViQ29yZTo6QWx0ZXJuYXRpdmVUZXh0Q29udHJvbGxlcjo6ZGlzbWlz
cyk6CisgICAgICAgIChXZWJDb3JlOjpBbHRlcm5hdGl2ZVRleHRDb250cm9sbGVyOjpkaXNtaXNz
U29vbik6CisgICAgICAgIChXZWJDb3JlOjpBbHRlcm5hdGl2ZVRleHRDb250cm9sbGVyOjphcHBs
eUFsdGVybmF0aXZlVGV4dCk6CisgICAgICAgIChXZWJDb3JlOjpBbHRlcm5hdGl2ZVRleHRDb250
cm9sbGVyOjphcHBseUF1dG9jb3JyZWN0aW9uQmVmb3JlVHlwaW5nSWZBcHByb3ByaWF0ZSk6Cisg
ICAgICAgIChXZWJDb3JlOjpBbHRlcm5hdGl2ZVRleHRDb250cm9sbGVyOjpyZXNwb25kVG9VbmFw
cGxpZWRTcGVsbENvcnJlY3Rpb24pOgorICAgICAgICAoV2ViQ29yZTo6QWx0ZXJuYXRpdmVUZXh0
Q29udHJvbGxlcjo6dGltZXJGaXJlZCk6CisgICAgICAgIChXZWJDb3JlOjpBbHRlcm5hdGl2ZVRl
eHRDb250cm9sbGVyOjpoYW5kbGVBbHRlcm5hdGl2ZVRleHRVSVJlc3VsdCk6CisgICAgICAgIChX
ZWJDb3JlOjpBbHRlcm5hdGl2ZVRleHRDb250cm9sbGVyOjppc0F1dG9tYXRpY1NwZWxsaW5nQ29y
cmVjdGlvbkVuYWJsZWQpOgorICAgICAgICAoV2ViQ29yZTo6QWx0ZXJuYXRpdmVUZXh0Q29udHJv
bGxlcjo6cm9vdFZpZXdSZWN0Rm9yUmFuZ2UpOgorICAgICAgICAoV2ViQ29yZTo6QWx0ZXJuYXRp
dmVUZXh0Q29udHJvbGxlcjo6cmVzcG9uZFRvQ2hhbmdlZFNlbGVjdGlvbik6CisgICAgICAgIChX
ZWJDb3JlOjpBbHRlcm5hdGl2ZVRleHRDb250cm9sbGVyOjpyZXNwb25kVG9BcHBsaWVkRWRpdGlu
Zyk6CisgICAgICAgIChXZWJDb3JlOjpBbHRlcm5hdGl2ZVRleHRDb250cm9sbGVyOjpyZXNwb25k
VG9VbmFwcGxpZWRFZGl0aW5nKToKKyAgICAgICAgKFdlYkNvcmU6OkFsdGVybmF0aXZlVGV4dENv
bnRyb2xsZXI6OmNsaWVudCk6CisgICAgICAgIChXZWJDb3JlOjpBbHRlcm5hdGl2ZVRleHRDb250
cm9sbGVyOjp0ZXh0Q2hlY2tlcik6CisgICAgICAgIChXZWJDb3JlOjpBbHRlcm5hdGl2ZVRleHRD
b250cm9sbGVyOjpyZWNvcmRBdXRvY29ycmVjdGlvblJlc3BvbnNlUmV2ZXJzZWQpOgorICAgICAg
ICAoV2ViQ29yZTo6QWx0ZXJuYXRpdmVUZXh0Q29udHJvbGxlcjo6bWFya1JldmVyc2VkKToKKyAg
ICAgICAgKFdlYkNvcmU6OkFsdGVybmF0aXZlVGV4dENvbnRyb2xsZXI6Om1hcmtDb3JyZWN0aW9u
KToKKyAgICAgICAgKFdlYkNvcmU6OkFsdGVybmF0aXZlVGV4dENvbnRyb2xsZXI6OnJlY29yZFNw
ZWxsY2hlY2tlclJlc3BvbnNlRm9yTW9kaWZpZWRDb3JyZWN0aW9uKToKKyAgICAgICAgKFdlYkNv
cmU6OkFsdGVybmF0aXZlVGV4dENvbnRyb2xsZXI6OmRlbGV0ZWRBdXRvY29ycmVjdGlvbkF0UG9z
aXRpb24pOgorICAgICAgICAoV2ViQ29yZTo6QWx0ZXJuYXRpdmVUZXh0Q29udHJvbGxlcjo6bWFy
a1ByZWNlZGluZ1doaXRlc3BhY2VGb3JEZWxldGVkQXV0b2NvcnJlY3Rpb25BZnRlckNvbW1hbmQp
OgorICAgICAgICAoV2ViQ29yZTo6QWx0ZXJuYXRpdmVUZXh0Q29udHJvbGxlcjo6cHJvY2Vzc01h
cmtlcnNPblRleHRUb0JlUmVwbGFjZWRCeVJlc3VsdCk6CisgICAgICAgICogZWRpdGluZy9BbHRl
cm5hdGl2ZVRleHRDb250cm9sbGVyLmg6IENvcGllZCBmcm9tIFNvdXJjZS9XZWJDb3JlL2VkaXRp
bmcvU3BlbGxpbmdDb3JyZWN0aW9uQ29udHJvbGxlci5oLgorICAgICAgICAoQWx0ZXJuYXRpdmVU
ZXh0RGV0YWlscyk6CisgICAgICAgIChXZWJDb3JlOjpBbHRlcm5hdGl2ZVRleHREZXRhaWxzOjpB
bHRlcm5hdGl2ZVRleHREZXRhaWxzKToKKyAgICAgICAgKFdlYkNvcmU6OkFsdGVybmF0aXZlVGV4
dERldGFpbHM6On5BbHRlcm5hdGl2ZVRleHREZXRhaWxzKToKKyAgICAgICAgKFdlYkNvcmUpOgor
ICAgICAgICAoQWx0ZXJuYXRpdmVUZXh0SW5mbyk6CisgICAgICAgIChBbHRlcm5hdGl2ZVRleHRD
b250cm9sbGVyKToKKyAgICAgICAgKFdlYkNvcmU6OkFsdGVybmF0aXZlVGV4dENvbnRyb2xsZXI6
OnNob3VsZFJlbW92ZU1hcmtlcnNVcG9uRWRpdGluZyk6CisgICAgICAgICogZWRpdGluZy9FZGl0
aW5nQWxsSW5PbmUuY3BwOgorICAgICAgICAqIGVkaXRpbmcvRWRpdG9yLmNwcDoKKyAgICAgICAg
KFdlYkNvcmU6OkVkaXRvcjo6cmVzcG9uZFRvQ2hhbmdlZFNlbGVjdGlvbik6CisgICAgICAgIChX
ZWJDb3JlOjpFZGl0b3I6OmFwcGxpZWRFZGl0aW5nKToKKyAgICAgICAgKFdlYkNvcmU6OkVkaXRv
cjo6dW5hcHBsaWVkRWRpdGluZyk6CisgICAgICAgIChXZWJDb3JlOjpFZGl0b3I6OkVkaXRvcik6
CisgICAgICAgIChXZWJDb3JlOjpFZGl0b3I6Omluc2VydFRleHRXaXRob3V0U2VuZGluZ1RleHRF
dmVudCk6CisgICAgICAgIChXZWJDb3JlOjpFZGl0b3I6Omluc2VydExpbmVCcmVhayk6CisgICAg
ICAgIChXZWJDb3JlOjpFZGl0b3I6Omluc2VydFBhcmFncmFwaFNlcGFyYXRvcik6CisgICAgICAg
IChXZWJDb3JlOjpFZGl0b3I6OmlzQXV0b21hdGljU3BlbGxpbmdDb3JyZWN0aW9uRW5hYmxlZCk6
CisgICAgICAgIChXZWJDb3JlOjpFZGl0b3I6Om1hcmtNaXNzcGVsbGluZ3NBZnRlclR5cGluZ1Rv
V29yZCk6CisgICAgICAgIChXZWJDb3JlOjpFZGl0b3I6Om1hcmtBbGxNaXNzcGVsbGluZ3NBbmRC
YWRHcmFtbWFySW5SYW5nZXMpOgorICAgICAgICAoV2ViQ29yZTo6RWRpdG9yOjptYXJrQW5kUmVw
bGFjZUZvcik6CisgICAgICAgIChXZWJDb3JlOjpFZGl0b3I6OmNoYW5nZUJhY2tUb1JlcGxhY2Vk
U3RyaW5nKToKKyAgICAgICAgKFdlYkNvcmU6OkVkaXRvcjo6dW5hcHBsaWVkU3BlbGxDb3JyZWN0
aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OkVkaXRvcjo6dXBkYXRlTWFya2Vyc0ZvcldvcmRzQWZm
ZWN0ZWRCeUVkaXRpbmcpOgorICAgICAgICAoV2ViQ29yZTo6RWRpdG9yOjpkZWxldGVkQXV0b2Nv
cnJlY3Rpb25BdFBvc2l0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OkVkaXRvcjo6c3RhcnRBbHRl
cm5hdGl2ZVRleHRVSVRpbWVyKToKKyAgICAgICAgKFdlYkNvcmU6OkVkaXRvcjo6aGFuZGxlQWx0
ZXJuYXRpdmVUZXh0VUlSZXN1bHQpOgorICAgICAgICAoV2ViQ29yZTo6RWRpdG9yOjpkaXNtaXNz
Q29ycmVjdGlvblBhbmVsQXNJZ25vcmVkKToKKyAgICAgICAgKiBlZGl0aW5nL0VkaXRvci5oOgor
ICAgICAgICAoV2ViQ29yZSk6CisgICAgICAgIChFZGl0b3IpOgorICAgICAgICAqIGVkaXRpbmcv
U3BlbGxpbmdDb3JyZWN0aW9uQ29tbWFuZC5jcHA6CisgICAgICAgICogZWRpdGluZy9TcGVsbGlu
Z0NvcnJlY3Rpb25Db250cm9sbGVyLmNwcDogUmVtb3ZlZC4KKyAgICAgICAgKiBlZGl0aW5nL1Nw
ZWxsaW5nQ29ycmVjdGlvbkNvbnRyb2xsZXIuaDogUmVtb3ZlZC4KKyAgICAgICAgKiBlZGl0aW5n
L1R5cGluZ0NvbW1hbmQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6VHlwaW5nQ29tbWFuZDo6bWFy
a01pc3NwZWxsaW5nc0FmdGVyVHlwaW5nKToKKyAgICAgICAgKiBsb2FkZXIvRW1wdHlDbGllbnRz
Lmg6CisgICAgICAgIChXZWJDb3JlOjpFbXB0eUVkaXRvckNsaWVudDo6c2hvd0NvcnJlY3Rpb25Q
YW5lbCk6CisgICAgICAgIChXZWJDb3JlOjpFbXB0eUVkaXRvckNsaWVudDo6ZGlzbWlzc0NvcnJl
Y3Rpb25QYW5lbCk6CisgICAgICAgIChXZWJDb3JlOjpFbXB0eUVkaXRvckNsaWVudDo6ZGlzbWlz
c0NvcnJlY3Rpb25QYW5lbFNvb24pOgorICAgICAgICAqIHBhZ2UvRWRpdG9yQ2xpZW50Lmg6CisK
IDIwMTItMDQtMDIgIERhbmllbCBDaGVuZyAgPGRjaGVuZ0BjaHJvbWl1bS5vcmc+CiAKICAgICAg
ICAgSGF2aW5nIGEgZHJvcCBoYW5kbGVyIHByZXZlbnRzIG5hdmlnYXRpb24gb24gZHJvcCBldmVu
IGlmIGV2ZW50IGlzIG5vdCBjYW5jZWxsZWQKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NNYWtlTGlz
dHMudHh0Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL0NNYWtlTGlzdHMudHh0CShyZXZp
c2lvbiAxMTI5NjEpCisrKyBTb3VyY2UvV2ViQ29yZS9DTWFrZUxpc3RzLnR4dAkod29ya2luZyBj
b3B5KQpAQCAtNjU0LDYgKzY1NCw3IEBAIFNFVChXZWJDb3JlX1NPVVJDRVMKIAogICAgIGRvbS9k
ZWZhdWx0L1BsYXRmb3JtTWVzc2FnZVBvcnRDaGFubmVsLmNwcAogCisgICAgZWRpdGluZy9BbHRl
cm5hdGl2ZVRleHRDb250cm9sbGVyLmNwcAogICAgIGVkaXRpbmcvQXBwZW5kTm9kZUNvbW1hbmQu
Y3BwCiAgICAgZWRpdGluZy9BcHBseUJsb2NrRWxlbWVudENvbW1hbmQuY3BwCiAgICAgZWRpdGlu
Zy9BcHBseVN0eWxlQ29tbWFuZC5jcHAKQEAgLTY5Myw3ICs2OTQsNiBAQCBTRVQoV2ViQ29yZV9T
T1VSQ0VTCiAgICAgZWRpdGluZy9TZXRTZWxlY3Rpb25Db21tYW5kLmNwcAogICAgIGVkaXRpbmcv
U21hcnRSZXBsYWNlLmNwcAogICAgIGVkaXRpbmcvU3BlbGxDaGVja2VyLmNwcAotICAgIGVkaXRp
bmcvU3BlbGxpbmdDb3JyZWN0aW9uQ29udHJvbGxlci5jcHAKICAgICBlZGl0aW5nL1NwZWxsaW5n
Q29ycmVjdGlvbkNvbW1hbmQuY3BwCiAgICAgZWRpdGluZy9TcGxpdEVsZW1lbnRDb21tYW5kLmNw
cAogICAgIGVkaXRpbmcvU3BsaXRUZXh0Tm9kZUNvbW1hbmQuY3BwCkluZGV4OiBTb3VyY2UvV2Vi
Q29yZS9HTlVtYWtlZmlsZS5saXN0LmFtCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL0dO
VW1ha2VmaWxlLmxpc3QuYW0JKHJldmlzaW9uIDExMjk2MSkKKysrIFNvdXJjZS9XZWJDb3JlL0dO
VW1ha2VmaWxlLmxpc3QuYW0JKHdvcmtpbmcgY29weSkKQEAgLTIwMDAsNiArMjAwMCw4IEBAIHdl
YmNvcmVfc291cmNlcyArPSBcCiAJU291cmNlL1dlYkNvcmUvZG9tL1doZWVsRXZlbnQuaCBcCiAJ
U291cmNlL1dlYkNvcmUvZG9tL1dpbmRvd0V2ZW50Q29udGV4dC5jcHAgXAogCVNvdXJjZS9XZWJD
b3JlL2RvbS9XaW5kb3dFdmVudENvbnRleHQuaCBcCisJU291cmNlL1dlYkNvcmUvZWRpdGluZy9B
bHRlcm5hdGl2ZVRleHRDb250cm9sbGVyLmNwcCBcCisJU291cmNlL1dlYkNvcmUvZWRpdGluZy9B
bHRlcm5hdGl2ZVRleHRDb250cm9sbGVyLmggXAogCVNvdXJjZS9XZWJDb3JlL2VkaXRpbmcvQXBw
ZW5kTm9kZUNvbW1hbmQuY3BwIFwKIAlTb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0FwcGVuZE5vZGVD
b21tYW5kLmggXAogCVNvdXJjZS9XZWJDb3JlL2VkaXRpbmcvQXBwbHlCbG9ja0VsZW1lbnRDb21t
YW5kLmNwcCBcCkBAIC0yMDg5LDggKzIwOTEsNiBAQCB3ZWJjb3JlX3NvdXJjZXMgKz0gXAogCVNv
dXJjZS9XZWJDb3JlL2VkaXRpbmcvU21hcnRSZXBsYWNlSUNVLmNwcCBcCiAJU291cmNlL1dlYkNv
cmUvZWRpdGluZy9TcGVsbENoZWNrZXIuY3BwIFwKIAlTb3VyY2UvV2ViQ29yZS9lZGl0aW5nL1Nw
ZWxsQ2hlY2tlci5oIFwKLQlTb3VyY2UvV2ViQ29yZS9lZGl0aW5nL1NwZWxsaW5nQ29ycmVjdGlv
bkNvbnRyb2xsZXIuY3BwIFwKLQlTb3VyY2UvV2ViQ29yZS9lZGl0aW5nL1NwZWxsaW5nQ29ycmVj
dGlvbkNvbnRyb2xsZXIuaCBcCiAJU291cmNlL1dlYkNvcmUvZWRpdGluZy9TcGVsbGluZ0NvcnJl
Y3Rpb25Db21tYW5kLmNwcCBcCiAJU291cmNlL1dlYkNvcmUvZWRpdGluZy9TcGVsbGluZ0NvcnJl
Y3Rpb25Db21tYW5kLmggXAogCVNvdXJjZS9XZWJDb3JlL2VkaXRpbmcvU3BsaXRFbGVtZW50Q29t
bWFuZC5jcHAgXApJbmRleDogU291cmNlL1dlYkNvcmUvVGFyZ2V0LnByaQo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvV2ViQ29yZS9UYXJnZXQucHJpCShyZXZpc2lvbiAxMTI5NjEpCisrKyBTb3VyY2Uv
V2ViQ29yZS9UYXJnZXQucHJpCSh3b3JraW5nIGNvcHkpCkBAIC02MjgsNiArNjI4LDcgQEAgU09V
UkNFUyArPSBcCiAgICAgZG9tL1doZWVsRXZlbnQuY3BwIFwKICAgICBkb20vV2luZG93RXZlbnRD
b250ZXh0LmNwcCBcCiAgICAgZG9tL2RlZmF1bHQvUGxhdGZvcm1NZXNzYWdlUG9ydENoYW5uZWwu
Y3BwIFwKKyAgICBlZGl0aW5nL0FsdGVybmF0aXZlVGV4dENvbnRyb2xsZXIuY3BwIFwKICAgICBl
ZGl0aW5nL0FwcGVuZE5vZGVDb21tYW5kLmNwcCBcCiAgICAgZWRpdGluZy9BcHBseUJsb2NrRWxl
bWVudENvbW1hbmQuY3BwIFwKICAgICBlZGl0aW5nL0FwcGx5U3R5bGVDb21tYW5kLmNwcCBcCkBA
IC02NjksNyArNjcwLDYgQEAgU09VUkNFUyArPSBcCiAgICAgZWRpdGluZy9TZXRTZWxlY3Rpb25D
b21tYW5kLmNwcCBcCiAgICAgZWRpdGluZy9TcGVsbENoZWNrZXIuY3BwIFwKICAgICBlZGl0aW5n
L1NwZWxsaW5nQ29ycmVjdGlvbkNvbW1hbmQuY3BwIFwKLSAgICBlZGl0aW5nL1NwZWxsaW5nQ29y
cmVjdGlvbkNvbnRyb2xsZXIuY3BwIFwKICAgICBlZGl0aW5nL1NwbGl0RWxlbWVudENvbW1hbmQu
Y3BwIFwKICAgICBlZGl0aW5nL1NwbGl0VGV4dE5vZGVDb21tYW5kLmNwcCBcCiAgICAgZWRpdGlu
Zy9TcGxpdFRleHROb2RlQ29udGFpbmluZ0VsZW1lbnRDb21tYW5kLmNwcCBcCkBAIC0xNzU5LDYg
KzE3NTksNyBAQCBIRUFERVJTICs9IFwKICAgICBkb20vV2ViS2l0TmFtZWRGbG93LmggXAogICAg
IGRvbS9XZWJLaXRUcmFuc2l0aW9uRXZlbnQuaCBcCiAgICAgZG9tL1doZWVsRXZlbnQuaCBcCisg
ICAgZWRpdGluZy9BbHRlcm5hdGl2ZVRleHRDb250cm9sbGVyLmggXAogICAgIGVkaXRpbmcvQXBw
ZW5kTm9kZUNvbW1hbmQuaCBcCiAgICAgZWRpdGluZy9BcHBseUJsb2NrRWxlbWVudENvbW1hbmQu
aCBcCiAgICAgZWRpdGluZy9BcHBseVN0eWxlQ29tbWFuZC5oIFwKQEAgLTE4MDAsNyArMTgwMSw2
IEBAIEhFQURFUlMgKz0gXAogICAgIGVkaXRpbmcvU2V0Tm9kZUF0dHJpYnV0ZUNvbW1hbmQuaCBc
CiAgICAgZWRpdGluZy9TbWFydFJlcGxhY2UuaCBcCiAgICAgZWRpdGluZy9TcGVsbGluZ0NvcnJl
Y3Rpb25Db21tYW5kLmggXAotICAgIGVkaXRpbmcvU3BlbGxpbmdDb3JyZWN0aW9uQ29udHJvbGxl
ci5oIFwKICAgICBlZGl0aW5nL1NwbGl0RWxlbWVudENvbW1hbmQuaCBcCiAgICAgZWRpdGluZy9T
cGxpdFRleHROb2RlQ29tbWFuZC5oIFwKICAgICBlZGl0aW5nL1NwbGl0VGV4dE5vZGVDb250YWlu
aW5nRWxlbWVudENvbW1hbmQuaCBcCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9XZWJDb3JlLmV4cC5p
bgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9XZWJDb3JlLmV4cC5pbgkocmV2aXNpb24g
MTEyOTYxKQorKysgU291cmNlL1dlYkNvcmUvV2ViQ29yZS5leHAuaW4JKHdvcmtpbmcgY29weSkK
QEAgLTg4NywxMSArODg3LDExIEBAIF9fWk43V2ViQ29yZTZFZGl0b3IyNHJlcGxhY2VTZWxlY3Rp
b25XaXQKIF9fWk43V2ViQ29yZTZFZGl0b3IyNmRlY3JlYXNlU2VsZWN0aW9uTGlzdExldmVsRXYK
IF9fWk43V2ViQ29yZTZFZGl0b3IyNmluY3JlYXNlU2VsZWN0aW9uTGlzdExldmVsRXYKIF9fWk43
V2ViQ29yZTZFZGl0b3IyNndyaXRlU2VsZWN0aW9uVG9QYXN0ZWJvYXJkRVJLTjNXVEY2U3RyaW5n
RVJLTlMxXzZWZWN0b3JJUzJfTG0wRUVFCi1fX1pON1dlYkNvcmU2RWRpdG9yMjdoYW5kbGVDb3Jy
ZWN0aW9uUGFuZWxSZXN1bHRFUktOM1dURjZTdHJpbmdFCiBfX1pON1dlYkNvcmU2RWRpdG9yMjdy
ZWFkU2VsZWN0aW9uRnJvbVBhc3RlYm9hcmRFUktOM1dURjZTdHJpbmdFCiBfX1pON1dlYkNvcmU2
RWRpdG9yMjhyZXBsYWNlU2VsZWN0aW9uV2l0aEZyYWdtZW50RU4zV1RGMTBQYXNzUmVmUHRySU5T
XzE2RG9jdW1lbnRGcmFnbWVudEVFRWJiYgogX19aTjdXZWJDb3JlNkVkaXRvcjI5Y2FuRGVjcmVh
c2VTZWxlY3Rpb25MaXN0TGV2ZWxFdgogX19aTjdXZWJDb3JlNkVkaXRvcjI5Y2FuSW5jcmVhc2VT
ZWxlY3Rpb25MaXN0TGV2ZWxFdgorX19aTjdXZWJDb3JlNkVkaXRvcjI5aGFuZGxlQWx0ZXJuYXRp
dmVUZXh0VUlSZXN1bHRFUktOM1dURjZTdHJpbmdFCiBfX1pON1dlYkNvcmU2RWRpdG9yMzBkZWxl
dGVTZWxlY3Rpb25XaXRoU21hcnREZWxldGVFYgogX19aTjdXZWJDb3JlNkVkaXRvcjMwcGFzdGVB
c1BsYWluVGV4dEJ5cGFzc2luZ0RIVE1MRXYKIF9fWk43V2ViQ29yZTZFZGl0b3IzMmd1ZXNzZXNG
b3JVbmdyYW1tYXRpY2FsU2VsZWN0aW9uRXYKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL1dlYkNvcmUu
Z3lwaQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9XZWJDb3JlLmd5cGkJKHJldmlzaW9u
IDExMjk2MSkKKysrIFNvdXJjZS9XZWJDb3JlL1dlYkNvcmUuZ3lwaQkod29ya2luZyBjb3B5KQpA
QCAtMjUwMyw2ICsyNTAzLDggQEAKICAgICAgICAgICAgICdjc3MvV2ViS2l0Q1NTU2hhZGVyVmFs
dWUuY3BwJywKICAgICAgICAgICAgICdjc3MvV2ViS2l0Q1NTU2hhZGVyVmFsdWUuaCcsCiAgICAg
ICAgICAgICAnY3NzL1dlYktpdENTU1RyYW5zZm9ybVZhbHVlLmNwcCcsCisgICAgICAgICAgICAn
ZWRpdGluZy9BbHRlcm5hdGl2ZVRleHRDb250cm9sbGVyLmNwcCcsCisgICAgICAgICAgICAnZWRp
dGluZy9BbHRlcm5hdGl2ZVRleHRDb250cm9sbGVyLmgnLAogICAgICAgICAgICAgJ2VkaXRpbmcv
QXBwZW5kTm9kZUNvbW1hbmQuY3BwJywKICAgICAgICAgICAgICdlZGl0aW5nL0FwcGVuZE5vZGVD
b21tYW5kLmgnLAogICAgICAgICAgICAgJ2VkaXRpbmcvQXBwbHlCbG9ja0VsZW1lbnRDb21tYW5k
LmNwcCcsCkBAIC0yNTcyLDggKzI1NzQsNiBAQAogICAgICAgICAgICAgJ2VkaXRpbmcvU21hcnRS
ZXBsYWNlSUNVLmNwcCcsCiAgICAgICAgICAgICAnZWRpdGluZy9TcGVsbENoZWNrZXIuY3BwJywK
ICAgICAgICAgICAgICdlZGl0aW5nL1NwZWxsQ2hlY2tlci5oJywKLSAgICAgICAgICAgICdlZGl0
aW5nL1NwZWxsaW5nQ29ycmVjdGlvbkNvbnRyb2xsZXIuY3BwJywKLSAgICAgICAgICAgICdlZGl0
aW5nL1NwZWxsaW5nQ29ycmVjdGlvbkNvbnRyb2xsZXIuaCcsCiAgICAgICAgICAgICAnZWRpdGlu
Zy9TcGVsbGluZ0NvcnJlY3Rpb25Db21tYW5kLmNwcCcsCiAgICAgICAgICAgICAnZWRpdGluZy9T
cGVsbGluZ0NvcnJlY3Rpb25Db21tYW5kLmgnLAogICAgICAgICAgICAgJ2VkaXRpbmcvU3BsaXRF
bGVtZW50Q29tbWFuZC5jcHAnLApJbmRleDogU291cmNlL1dlYkNvcmUvV2ViQ29yZS52Y3Byb2ov
V2ViQ29yZS52Y3Byb2oKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvV2ViQ29yZS52Y3By
b2ovV2ViQ29yZS52Y3Byb2oJKHJldmlzaW9uIDExMjk2MSkKKysrIFNvdXJjZS9XZWJDb3JlL1dl
YkNvcmUudmNwcm9qL1dlYkNvcmUudmNwcm9qCSh3b3JraW5nIGNvcHkpCkBAIC01NDA3NCw2ICs1
NDA3NCw2MiBAQAogCQkJCT4KIAkJCTwvRmlsZT4KIAkJPC9GaWx0ZXI+CisJCTxGaWxlCisJCQkJ
UmVsYXRpdmVQYXRoPSIuLlxlZGl0aW5nXEFsdGVybmF0aXZlVGV4dENvbnRyb2xsZXIuY3BwIgor
CQkJCT4KKwkJCQk8RmlsZUNvbmZpZ3VyYXRpb24KKwkJCQkJTmFtZT0iRGVidWd8V2luMzIiCisJ
CQkJCUV4Y2x1ZGVkRnJvbUJ1aWxkPSJ0cnVlIgorCQkJCQk+CisJCQkJCTxUb29sCisJCQkJCQlO
YW1lPSJWQ0NMQ29tcGlsZXJUb29sIgorCQkJCQkvPgorCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+
CisJCQkJPEZpbGVDb25maWd1cmF0aW9uCisJCQkJCU5hbWU9IlJlbGVhc2V8V2luMzIiCisJCQkJ
CUV4Y2x1ZGVkRnJvbUJ1aWxkPSJ0cnVlIgorCQkJCQk+CisJCQkJCTxUb29sCisJCQkJCQlOYW1l
PSJWQ0NMQ29tcGlsZXJUb29sIgorCQkJCQkvPgorCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+CisJ
CQkJPEZpbGVDb25maWd1cmF0aW9uCisJCQkJCU5hbWU9IkRlYnVnX0NhaXJvX0NGTGl0ZXxXaW4z
MiIKKwkJCQkJRXhjbHVkZWRGcm9tQnVpbGQ9InRydWUiCisJCQkJCT4KKwkJCQkJPFRvb2wKKwkJ
CQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiCisJCQkJCS8+CisJCQkJPC9GaWxlQ29uZmlndXJh
dGlvbj4KKwkJCQk8RmlsZUNvbmZpZ3VyYXRpb24KKwkJCQkJTmFtZT0iUmVsZWFzZV9DYWlyb19D
RkxpdGV8V2luMzIiCisJCQkJCUV4Y2x1ZGVkRnJvbUJ1aWxkPSJ0cnVlIgorCQkJCQk+CisJCQkJ
CTxUb29sCisJCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIgorCQkJCQkvPgorCQkJCTwvRmls
ZUNvbmZpZ3VyYXRpb24+CisJCQkJPEZpbGVDb25maWd1cmF0aW9uCisJCQkJCU5hbWU9IkRlYnVn
X0FsbHxXaW4zMiIKKwkJCQkJRXhjbHVkZWRGcm9tQnVpbGQ9InRydWUiCisJCQkJCT4KKwkJCQkJ
PFRvb2wKKwkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiCisJCQkJCS8+CisJCQkJPC9GaWxl
Q29uZmlndXJhdGlvbj4KKwkJCQk8RmlsZUNvbmZpZ3VyYXRpb24KKwkJCQkJTmFtZT0iUmVsZWFz
ZV9MVENHfFdpbjMyIgorCQkJCQlFeGNsdWRlZEZyb21CdWlsZD0idHJ1ZSIKKwkJCQkJPgorCQkJ
CQk8VG9vbAorCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCIKKwkJCQkJLz4KKwkJCQk8L0Zp
bGVDb25maWd1cmF0aW9uPgorCQkJPC9GaWxlPgorCQkJPEZpbGUKKwkJCQlSZWxhdGl2ZVBhdGg9
Ii4uXGVkaXRpbmdcQWx0ZXJuYXRpdmVUZXh0Q29udHJvbGxlci5oIgorCQkJCT4KKwkJCTwvRmls
ZT4KIAkJPEZpbHRlcgogCQkJTmFtZT0iZWRpdGluZyIKIAkJCT4KQEAgLTU2NDU0LDYyICs1NjUx
MCw2IEBACiAJCQkJPgogCQkJPC9GaWxlPgogCQkJPEZpbGUKLQkJCQlSZWxhdGl2ZVBhdGg9Ii4u
XGVkaXRpbmdcU3BlbGxpbmdDb3JyZWN0aW9uQ29udHJvbGxlci5jcHAiCi0JCQkJPgotCQkJCTxG
aWxlQ29uZmlndXJhdGlvbgotCQkJCQlOYW1lPSJEZWJ1Z3xXaW4zMiIKLQkJCQkJRXhjbHVkZWRG
cm9tQnVpbGQ9InRydWUiCi0JCQkJCT4KLQkJCQkJPFRvb2wKLQkJCQkJCU5hbWU9IlZDQ0xDb21w
aWxlclRvb2wiCi0JCQkJCS8+Ci0JCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4KLQkJCQk8RmlsZUNv
bmZpZ3VyYXRpb24KLQkJCQkJTmFtZT0iUmVsZWFzZXxXaW4zMiIKLQkJCQkJRXhjbHVkZWRGcm9t
QnVpbGQ9InRydWUiCi0JCQkJCT4KLQkJCQkJPFRvb2wKLQkJCQkJCU5hbWU9IlZDQ0xDb21waWxl
clRvb2wiCi0JCQkJCS8+Ci0JCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4KLQkJCQk8RmlsZUNvbmZp
Z3VyYXRpb24KLQkJCQkJTmFtZT0iRGVidWdfQ2Fpcm9fQ0ZMaXRlfFdpbjMyIgotCQkJCQlFeGNs
dWRlZEZyb21CdWlsZD0idHJ1ZSIKLQkJCQkJPgotCQkJCQk8VG9vbAotCQkJCQkJTmFtZT0iVkND
TENvbXBpbGVyVG9vbCIKLQkJCQkJLz4KLQkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPgotCQkJCTxG
aWxlQ29uZmlndXJhdGlvbgotCQkJCQlOYW1lPSJSZWxlYXNlX0NhaXJvX0NGTGl0ZXxXaW4zMiIK
LQkJCQkJRXhjbHVkZWRGcm9tQnVpbGQ9InRydWUiCi0JCQkJCT4KLQkJCQkJPFRvb2wKLQkJCQkJ
CU5hbWU9IlZDQ0xDb21waWxlclRvb2wiCi0JCQkJCS8+Ci0JCQkJPC9GaWxlQ29uZmlndXJhdGlv
bj4KLQkJCQk8RmlsZUNvbmZpZ3VyYXRpb24KLQkJCQkJTmFtZT0iRGVidWdfQWxsfFdpbjMyIgot
CQkJCQlFeGNsdWRlZEZyb21CdWlsZD0idHJ1ZSIKLQkJCQkJPgotCQkJCQk8VG9vbAotCQkJCQkJ
TmFtZT0iVkNDTENvbXBpbGVyVG9vbCIKLQkJCQkJLz4KLQkJCQk8L0ZpbGVDb25maWd1cmF0aW9u
PgotCQkJCTxGaWxlQ29uZmlndXJhdGlvbgotCQkJCQlOYW1lPSJSZWxlYXNlX0xUQ0d8V2luMzIi
Ci0JCQkJCUV4Y2x1ZGVkRnJvbUJ1aWxkPSJ0cnVlIgotCQkJCQk+Ci0JCQkJCTxUb29sCi0JCQkJ
CQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIgotCQkJCQkvPgotCQkJCTwvRmlsZUNvbmZpZ3VyYXRp
b24+Ci0JCQk8L0ZpbGU+Ci0JCQk8RmlsZQotCQkJCVJlbGF0aXZlUGF0aD0iLi5cZWRpdGluZ1xT
cGVsbGluZ0NvcnJlY3Rpb25Db250cm9sbGVyLmgiCi0JCQkJPgotCQkJPC9GaWxlPgotCQkJPEZp
bGUKIAkJCQlSZWxhdGl2ZVBhdGg9Ii4uXGVkaXRpbmdcU3BsaXRFbGVtZW50Q29tbWFuZC5jcHAi
CiAJCQkJPgogCQkJCTxGaWxlQ29uZmlndXJhdGlvbgpJbmRleDogU291cmNlL1dlYkNvcmUvV2Vi
Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJD
b3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagkocmV2aXNpb24gMTEyOTYxKQor
KysgU291cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCSh3b3Jr
aW5nIGNvcHkpCkBAIC0zNzAxLDggKzM3MDEsNiBAQAogCQlBNjIyQThGRjEyMkM0NEE2MDBBNzg1
QjMgLyogR2VuZXJpY0JpbmRpbmcuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmls
ZTsgZmlsZVJlZiA9IEE2MjJBOEY5MTIyQzQ0QTYwMEE3ODVCMyAvKiBHZW5lcmljQmluZGluZy5o
ICovOyB9OwogCQlBNkQxNjk2MjEzNDZCNDlCMDAwRUI3NzAgLyogU2hhZG93Um9vdC5jcHAgaW4g
U291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBBNkQxNjk2MTEzNDZC
NDlCMDAwRUI3NzAgLyogU2hhZG93Um9vdC5jcHAgKi87IH07CiAJCUE2RDE2OTY0MTM0NkI0QzEw
MDBFQjc3MCAvKiBTaGFkb3dSb290LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSBBNkQxNjk2MzEzNDZCNEMxMDAwRUI3NzAgLyogU2hhZG93Um9vdC5oICov
OyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07Ci0JCUE3MDA1Q0ND
MTMzMEM0QkEwMDBDQzBCQSAvKiBTcGVsbGluZ0NvcnJlY3Rpb25Db250cm9sbGVyLmNwcCBpbiBT
b3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEE3MDA1Q0NBMTMzMEM0
QkEwMDBDQzBCQSAvKiBTcGVsbGluZ0NvcnJlY3Rpb25Db250cm9sbGVyLmNwcCAqLzsgfTsKLQkJ
QTcwMDVDQ0QxMzMwQzRCQTAwMENDMEJBIC8qIFNwZWxsaW5nQ29ycmVjdGlvbkNvbnRyb2xsZXIu
aCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEE3MDA1Q0NC
MTMzMEM0QkEwMDBDQzBCQSAvKiBTcGVsbGluZ0NvcnJlY3Rpb25Db250cm9sbGVyLmggKi87IHNl
dHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJQTcxNTFCRDgxMkYx
NTU4RjAwNUEwRjY0IC8qIFRleHRDaGVja2VyQ2xpZW50LmggaW4gSGVhZGVycyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBBNzE1MUJENzEyRjE1NThGMDA1QTBGNjQgLyogVGV4
dENoZWNrZXJDbGllbnQuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCAp
OyB9OyB9OwogCQlBNzE1RTY1MjEzNEJCQkVDMDBEOEU3MTMgLyogUHJvZ3Jlc3NTaGFkb3dFbGVt
ZW50LmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEE3
MTVFNjUwMTM0QkJCRUMwMEQ4RTcxMyAvKiBQcm9ncmVzc1NoYWRvd0VsZW1lbnQuY3BwICovOyB9
OwogCQlBNzE1RTY1MzEzNEJCQkVDMDBEOEU3MTMgLyogUHJvZ3Jlc3NTaGFkb3dFbGVtZW50Lmgg
aW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBBNzE1RTY1MTEz
NEJCQkVDMDBEOEU3MTMgLyogUHJvZ3Jlc3NTaGFkb3dFbGVtZW50LmggKi87IH07CkBAIC01NzMy
LDYgKzU3MzAsOCBAQAogCQlDRUEzOTQ5QzExRDQ1Q0RBMDAzMDk0Q0YgLyogU3RhdGljSGFzaFNl
dE5vZGVMaXN0LmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJl
ZiA9IENFQTM5NDlBMTFENDVDREEwMDMwOTRDRiAvKiBTdGF0aWNIYXNoU2V0Tm9kZUxpc3QuY3Bw
ICovOyB9OwogCQlDRUEzOTQ5RDExRDQ1Q0RBMDAzMDk0Q0YgLyogU3RhdGljSGFzaFNldE5vZGVM
aXN0LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBDRUEz
OTQ5QjExRDQ1Q0RBMDAzMDk0Q0YgLyogU3RhdGljSGFzaFNldE5vZGVMaXN0LmggKi87IH07CiAJ
CUNFQ0NGQzNCMTQxOTczRDUwMDJBMEFDMSAvKiBEZWNvZGVFc2NhcGVTZXF1ZW5jZXMuaCBpbiBI
ZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IENFQ0NGQzNBMTQxOTcz
RDUwMDJBMEFDMSAvKiBEZWNvZGVFc2NhcGVTZXF1ZW5jZXMuaCAqLzsgfTsKKwkJQ0VEQjNDRUUx
NTJBNzRBNzAwOEYzNkQ0IC8qIEFsdGVybmF0aXZlVGV4dENvbnRyb2xsZXIuY3BwIGluIFNvdXJj
ZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQ0VEQjNDRUMxNTJBNzRBNzAw
OEYzNkQ0IC8qIEFsdGVybmF0aXZlVGV4dENvbnRyb2xsZXIuY3BwICovOyB9OworCQlDRURCM0NF
RjE1MkE3NEE3MDA4RjM2RDQgLyogQWx0ZXJuYXRpdmVUZXh0Q29udHJvbGxlci5oIGluIEhlYWRl
cnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQ0VEQjNDRUQxNTJBNzRBNzAw
OEYzNkQ0IC8qIEFsdGVybmF0aXZlVGV4dENvbnRyb2xsZXIuaCAqLzsgc2V0dGluZ3MgPSB7QVRU
UklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQlDRUY0MThDRTExNzk2NzhDMDA5RDExMkMg
LyogVmlld3BvcnRBcmd1bWVudHMuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gQ0VGNDE4Q0MxMTc5Njc4QzAwOUQxMTJDIC8qIFZpZXdwb3J0QXJndW1l
bnRzLmNwcCAqLzsgfTsKIAkJQ0VGNDE4Q0YxMTc5Njc4QzAwOUQxMTJDIC8qIFZpZXdwb3J0QXJn
dW1lbnRzLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBD
RUY0MThDRDExNzk2NzhDMDA5RDExMkMgLyogVmlld3BvcnRBcmd1bWVudHMuaCAqLzsgc2V0dGlu
Z3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQlEMDAwRUJBMjExQkRBRkQ0
MDBDNDc3MjYgLyogRnJhbWVMb2FkZXJTdGF0ZU1hY2hpbmUuY3BwIGluIFNvdXJjZXMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRDAwMEVCQTAxMUJEQUZENDAwQzQ3NzI2IC8q
IEZyYW1lTG9hZGVyU3RhdGVNYWNoaW5lLmNwcCAqLzsgfTsKQEAgLTEwNzA4LDggKzEwNzA4LDYg
QEAKIAkJQTYyMkE4RjkxMjJDNDRBNjAwQTc4NUIzIC8qIEdlbmVyaWNCaW5kaW5nLmggKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IEdlbmVyaWNCaW5kaW5nLmg7IHBhdGggPSBnZW5l
cmljL0dlbmVyaWNCaW5kaW5nLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUE2RDE2
OTYxMTM0NkI0OUIwMDBFQjc3MCAvKiBTaGFkb3dSb290LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuY3BwLmNwcDsgcGF0aCA9IFNoYWRvd1Jvb3QuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OwogCQlBNkQxNjk2MzEzNDZCNEMxMDAwRUI3NzAgLyogU2hhZG93Um9vdC5oICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBTaGFkb3dSb290Lmg7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07Ci0JCUE3MDA1Q0NBMTMzMEM0QkEwMDBDQzBCQSAvKiBTcGVsbGluZ0NvcnJlY3Rp
b25Db250cm9sbGVyLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFNw
ZWxsaW5nQ29ycmVjdGlvbkNvbnRyb2xsZXIuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OwotCQlBNzAwNUNDQjEzMzBDNEJBMDAwQ0MwQkEgLyogU3BlbGxpbmdDb3JyZWN0aW9uQ29udHJv
bGxlci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBTcGVsbGluZ0NvcnJlY3Rp
b25Db250cm9sbGVyLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUE3MTUxQkQ3MTJG
MTU1OEYwMDVBMEY2NCAvKiBUZXh0Q2hlY2tlckNsaWVudC5oICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jLmg7IHBhdGggPSBUZXh0Q2hlY2tlckNsaWVudC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OwogCQlBNzE1RTY1MDEzNEJCQkVDMDBEOEU3MTMgLyogUHJvZ3Jlc3NTaGFkb3dFbGVtZW50
LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFByb2dyZXNzU2hhZG93
RWxlbWVudC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUE3MTVFNjUxMTM0QkJC
RUMwMEQ4RTcxMyAvKiBQcm9ncmVzc1NoYWRvd0VsZW1lbnQuaCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuYy5oOyBwYXRoID0gUHJvZ3Jlc3NTaGFkb3dFbGVtZW50Lmg7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CkBAIC0xMjgyOCw2ICsxMjgyNiw4IEBACiAJCUNFQTM5NDlBMTFENDVDREEwMDMw
OTRDRiAvKiBTdGF0aWNIYXNoU2V0Tm9kZUxpc3QuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
cHAuY3BwOyBwYXRoID0gU3RhdGljSGFzaFNldE5vZGVMaXN0LmNwcDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKIAkJQ0VBMzk0OUIxMUQ0NUNEQTAwMzA5NENGIC8qIFN0YXRpY0hhc2hTZXRO
b2RlTGlzdC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBTdGF0aWNIYXNoU2V0
Tm9kZUxpc3QuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQ0VDQ0ZDM0ExNDE5NzNE
NTAwMkEwQUMxIC8qIERlY29kZUVzY2FwZVNlcXVlbmNlcy5oICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jLmg7IHBhdGggPSBEZWNvZGVFc2NhcGVTZXF1ZW5jZXMuaDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKKwkJQ0VEQjNDRUMxNTJBNzRBNzAwOEYzNkQ0IC8qIEFsdGVybmF0aXZlVGV4dENv
bnRyb2xsZXIuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9
IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gQWx0ZXJu
YXRpdmVUZXh0Q29udHJvbGxlci5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUNF
REIzQ0VEMTUyQTc0QTcwMDhGMzZENCAvKiBBbHRlcm5hdGl2ZVRleHRDb250cm9sbGVyLmggKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEFsdGVybmF0aXZlVGV4dENvbnRyb2xsZXIu
aDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQ0VGNDE4Q0MxMTc5Njc4QzAwOUQxMTJD
IC8qIFZpZXdwb3J0QXJndW1lbnRzLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsg
cGF0aCA9IFZpZXdwb3J0QXJndW1lbnRzLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
IAkJQ0VGNDE4Q0QxMTc5Njc4QzAwOUQxMTJDIC8qIFZpZXdwb3J0QXJndW1lbnRzLmggKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFZpZXdwb3J0QXJndW1lbnRzLmg7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CiAJCUQwMDBFQkEwMTFCREFGRDQwMEM0NzcyNiAvKiBGcmFtZUxv
YWRlclN0YXRlTWFjaGluZS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVu
Y29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGgg
PSBGcmFtZUxvYWRlclN0YXRlTWFjaGluZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CkBAIC0xNjU5Myw2ICsxNjU5Myw4IEBACiAJCQlpc2EgPSBQQlhHcm91cDsKIAkJCWNoaWxkcmVu
ID0gKAogCQkJCUVENTAxREM5MEIyNDlGMzkwMEFFMThEOSAvKiBtYWMgKi8sCisJCQkJQ0VEQjND
RUMxNTJBNzRBNzAwOEYzNkQ0IC8qIEFsdGVybmF0aXZlVGV4dENvbnRyb2xsZXIuY3BwICovLAor
CQkJCUNFREIzQ0VEMTUyQTc0QTcwMDhGMzZENCAvKiBBbHRlcm5hdGl2ZVRleHRDb250cm9sbGVy
LmggKi8sCiAJCQkJOTMzMDlEODcwOTlFNjQ5MTAwNTZFNTgxIC8qIEFwcGVuZE5vZGVDb21tYW5k
LmNwcCAqLywKIAkJCQk5MzMwOUQ4ODA5OUU2NDkxMDA1NkU1ODEgLyogQXBwZW5kTm9kZUNvbW1h
bmQuaCAqLywKIAkJCQk5QjQxNzA2MzEyNTY2MkIzMDA2QjI4RkMgLyogQXBwbHlCbG9ja0VsZW1l
bnRDb21tYW5kLmNwcCAqLywKQEAgLTE2Njg0LDggKzE2Njg2LDYgQEAKIAkJCQlBNzhGRTEzQTEy
MzY2QjEwMDBBQ0U4RDAgLyogU3BlbGxDaGVja2VyLmggKi8sCiAJCQkJQjhEQkRCNDkxMzBCMEY4
QTAwRjVDREIxIC8qIFNwZWxsaW5nQ29ycmVjdGlvbkNvbW1hbmQuY3BwICovLAogCQkJCUI4REJE
QjRBMTMwQjBGOEEwMEY1Q0RCMSAvKiBTcGVsbGluZ0NvcnJlY3Rpb25Db21tYW5kLmggKi8sCi0J
CQkJQTcwMDVDQ0ExMzMwQzRCQTAwMENDMEJBIC8qIFNwZWxsaW5nQ29ycmVjdGlvbkNvbnRyb2xs
ZXIuY3BwICovLAotCQkJCUE3MDA1Q0NCMTMzMEM0QkEwMDBDQzBCQSAvKiBTcGVsbGluZ0NvcnJl
Y3Rpb25Db250cm9sbGVyLmggKi8sCiAJCQkJOTMzMDlEQzIwOTlFNjQ5MTAwNTZFNTgxIC8qIFNw
bGl0RWxlbWVudENvbW1hbmQuY3BwICovLAogCQkJCTkzMzA5REMzMDk5RTY0OTEwMDU2RTU4MSAv
KiBTcGxpdEVsZW1lbnRDb21tYW5kLmggKi8sCiAJCQkJOTMzMDlEQzQwOTlFNjQ5MTAwNTZFNTgx
IC8qIFNwbGl0VGV4dE5vZGVDb21tYW5kLmNwcCAqLywKQEAgLTIxNTE5LDYgKzIxNTE5LDcgQEAK
IAkJCWlzYSA9IFBCWEhlYWRlcnNCdWlsZFBoYXNlOwogCQkJYnVpbGRBY3Rpb25NYXNrID0gMjE0
NzQ4MzY0NzsKIAkJCWZpbGVzID0gKAorCQkJCUNFREIzQ0VGMTUyQTc0QTcwMDhGMzZENCAvKiBB
bHRlcm5hdGl2ZVRleHRDb250cm9sbGVyLmggaW4gSGVhZGVycyAqLywKIAkJCQlFNEMxNzg5QjBF
RTY5MDM4MDA4MjRENjkgLyogQ1NTU2VsZWN0b3JMaXN0LmggaW4gSGVhZGVycyAqLywKIAkJCQlF
NEJCRUQ0RDE0RkNEQkExMDAzRjBCOTggLyogU3R5bGVSdWxlLmggaW4gSGVhZGVycyAqLywKIAkJ
CQk5N0JDNjlEQjE1MDVGMDc2MDAxQjc0QUMgLyogQWJzdHJhY3REYXRhYmFzZS5oIGluIEhlYWRl
cnMgKi8sCkBAIC0yNDEwNSw3ICsyNDEwNiw2IEBACiAJCQkJNzU0MTVCMDAxMjk1OEQ1RTAwM0FE
NjY5IC8qIFNwZWVjaElucHV0UmVzdWx0TGlzdC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQTc4RkUx
M0MxMjM2NkIxMDAwQUNFOEQwIC8qIFNwZWxsQ2hlY2tlci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJ
QjhEQkRCNEUxMzBCMEY4QTAwRjVDREIxIC8qIFNwZWxsaW5nQ29ycmVjdGlvbkNvbW1hbmQuaCBp
biBIZWFkZXJzICovLAotCQkJCUE3MDA1Q0NEMTMzMEM0QkEwMDBDQzBCQSAvKiBTcGVsbGluZ0Nv
cnJlY3Rpb25Db250cm9sbGVyLmggaW4gSGVhZGVycyAqLywKIAkJCQk5MzMwOUUxMjA5OUU2NDky
MDA1NkU1ODEgLyogU3BsaXRFbGVtZW50Q29tbWFuZC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJOTMz
MDlFMTQwOTlFNjQ5MjAwNTZFNTgxIC8qIFNwbGl0VGV4dE5vZGVDb21tYW5kLmggaW4gSGVhZGVy
cyAqLywKIAkJCQk5MzMwOUUxNjA5OUU2NDkyMDA1NkU1ODEgLyogU3BsaXRUZXh0Tm9kZUNvbnRh
aW5pbmdFbGVtZW50Q29tbWFuZC5oIGluIEhlYWRlcnMgKi8sCkBAIC0yNDY5MywxMCArMjQ2OTMs
MTAgQEAKIAkJCQk5M0YxOTlFRDA4MjQ1RTU5MDAxRTlBQkMgLyogWFNMVFByb2Nlc3Nvci5oIGlu
IEhlYWRlcnMgKi8sCiAJCQkJRTFCRTUxMkUwQ0Y2QzUxMjAwMkVBOTU5IC8qIFhTTFRVbmljb2Rl
U29ydC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJOTc3RTJFMEYxMkYwRkM5QzAwQzEzMzc5IC8qIFhT
U0F1ZGl0b3IuaCBpbiBIZWFkZXJzICovLAotICAgICAgICAgICAgICAgIEZENTgxRkFGMTUyMEY5
MUYwMDNBN0E3NSAvKiBPc2NpbGxhdG9yLmggaW4gSGVhZGVycyAqLywKLSAgICAgICAgICAgICAg
ICBGRDU4MUZCNTE1MjBGOTNCMDAzQTdBNzUgLyogV2F2ZVRhYmxlLmggaW4gSGVhZGVycyAqLywK
LSAgICAgICAgICAgICAgICBGREVBNjI0MzE1MjEwMkUyMDA0NzlERjAgLyogSlNPc2NpbGxhdG9y
LmggaW4gSGVhZGVycyAqLywKLSAgICAgICAgICAgICAgICBGREVBNjI0NzE1MjEwMkZDMDA0NzlE
RjAgLyogSlNXYXZlVGFibGUuaCBpbiBIZWFkZXJzICovLAorCQkJCUZENTgxRkFGMTUyMEY5MUYw
MDNBN0E3NSAvKiBPc2NpbGxhdG9yLmggaW4gSGVhZGVycyAqLywKKwkJCQlGRDU4MUZCNTE1MjBG
OTNCMDAzQTdBNzUgLyogV2F2ZVRhYmxlLmggaW4gSGVhZGVycyAqLywKKwkJCQlGREVBNjI0MzE1
MjEwMkUyMDA0NzlERjAgLyogSlNPc2NpbGxhdG9yLmggaW4gSGVhZGVycyAqLywKKwkJCQlGREVB
NjI0NzE1MjEwMkZDMDA0NzlERjAgLyogSlNXYXZlVGFibGUuaCBpbiBIZWFkZXJzICovLAogCQkJ
CUZENTM3MzUzMTM3QjY1MTgwMDAwOERDRSAvKiBaZXJvUG9sZS5oIGluIEhlYWRlcnMgKi8sCiAJ
CQkJMUEzNTg2RTAxNTI2NEM0NTAwMjJBNjU5IC8qIFJlbmRlck11bHRpQ29sdW1uRmxvd1RocmVh
ZC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJRTFCMjUxMDcxNTJBMEJCMDAwNjlCNzc5IC8qIFN0eWxl
UHJvcGVydHlTaG9ydGhhbmQuaCBpbiBIZWFkZXJzICovLApAQCAtMjcyMjIsNyArMjcyMjIsNiBA
QAogCQkJCTc1NDE1QzI5MTI5QTk5MjAwMDNBRDY2OSAvKiBTcGVlY2hJbnB1dFJlc3VsdExpc3Qu
Y3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQTc4RkUxM0IxMjM2NkIxMDAwQUNFOEQwIC8qIFNwZWxs
Q2hlY2tlci5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlCOERCREI0RDEzMEIwRjhBMDBGNUNEQjEg
LyogU3BlbGxpbmdDb3JyZWN0aW9uQ29tbWFuZC5jcHAgaW4gU291cmNlcyAqLywKLQkJCQlBNzAw
NUNDQzEzMzBDNEJBMDAwQ0MwQkEgLyogU3BlbGxpbmdDb3JyZWN0aW9uQ29udHJvbGxlci5jcHAg
aW4gU291cmNlcyAqLywKIAkJCQk5MzMwOUUxMTA5OUU2NDkyMDA1NkU1ODEgLyogU3BsaXRFbGVt
ZW50Q29tbWFuZC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk5MzMwOUUxMzA5OUU2NDkyMDA1NkU1
ODEgLyogU3BsaXRUZXh0Tm9kZUNvbW1hbmQuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJOTMzMDlF
MTUwOTlFNjQ5MjAwNTZFNTgxIC8qIFNwbGl0VGV4dE5vZGVDb250YWluaW5nRWxlbWVudENvbW1h
bmQuY3BwIGluIFNvdXJjZXMgKi8sCkBAIC0yNzY5NSw2ICsyNzY5NCw3IEBACiAJCQkJMUEzNTg2
RTExNTI2NEY5NTAwMjJBNjU5IC8qIFNWR0FuaW1hdGVkSW50ZWdlck9wdGlvbmFsSW50ZWdlci5j
cHAgaW4gU291cmNlcyAqLywKIAkJCQkxQTNGRjlDMzE1MjY1MzU5MDAyMjg4QTEgLyogUmVuZGVy
TmFtZWRGbG93VGhyZWFkLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUUxQjI1MTA2MTUyQTBCQUYw
MDY5Qjc3OSAvKiBTdHlsZVByb3BlcnR5U2hvcnRoYW5kLmNwcCBpbiBTb3VyY2VzICovLAorCQkJ
CUNFREIzQ0VFMTUyQTc0QTcwMDhGMzZENCAvKiBBbHRlcm5hdGl2ZVRleHRDb250cm9sbGVyLmNw
cCBpbiBTb3VyY2VzICovLAogCQkJKTsKIAkJCXJ1bk9ubHlGb3JEZXBsb3ltZW50UG9zdHByb2Nl
c3NpbmcgPSAwOwogCQl9OwpJbmRleDogU291cmNlL1dlYkNvcmUvZWRpdGluZy9BbHRlcm5hdGl2
ZVRleHRDb250cm9sbGVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9lZGl0aW5n
L0FsdGVybmF0aXZlVGV4dENvbnRyb2xsZXIuY3BwCShyZXZpc2lvbiAxMTI4MzApCShmcm9tIFNv
dXJjZS9XZWJDb3JlL2VkaXRpbmcvU3BlbGxpbmdDb3JyZWN0aW9uQ29udHJvbGxlci5jcHA6MTEy
ODMwKQorKysgU291cmNlL1dlYkNvcmUvZWRpdGluZy9BbHRlcm5hdGl2ZVRleHRDb250cm9sbGVy
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDU2NSBAQAorLyoKKyAqIENvcHlyaWdodCAo
QykgMjAwNiwgMjAwNywgMjAwOCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBD
b3B5cmlnaHQgKEMpIDIwMDggTm9raWEgQ29ycG9yYXRpb24gYW5kL29yIGl0cyBzdWJzaWRpYXJ5
KC1pZXMpCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFy
eSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQg
cHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAx
LiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNv
cHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3Jt
IG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAq
ICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRo
ZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBM
RSBDT01QVVRFUiwgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVE
IFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJ
RUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElD
VUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExF
IENPTVBVVEVSLCBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElS
RUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09O
U0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBS
T0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBE
QVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENB
VVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRS
QUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0Ug
T1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRI
SVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBE
QU1BR0UuIAorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJTcGVsbGluZ0Nv
cnJlY3Rpb25Db250cm9sbGVyLmgiCisKKyNpbmNsdWRlICJEb2N1bWVudE1hcmtlckNvbnRyb2xs
ZXIuaCIKKyNpbmNsdWRlICJFZGl0Q29tbWFuZC5oIgorI2luY2x1ZGUgIkVkaXRvckNsaWVudC5o
IgorI2luY2x1ZGUgIkZsb2F0UXVhZC5oIgorI2luY2x1ZGUgIkZyYW1lLmgiCisjaW5jbHVkZSAi
RnJhbWVWaWV3LmgiCisjaW5jbHVkZSAiUGFnZS5oIgorI2luY2x1ZGUgIlNwZWxsaW5nQ29ycmVj
dGlvbkNvbW1hbmQuaCIKKyNpbmNsdWRlICJUZXh0Q2hlY2tlckNsaWVudC5oIgorI2luY2x1ZGUg
IlRleHRDaGVja2luZ0hlbHBlci5oIgorI2luY2x1ZGUgIlRleHRJdGVyYXRvci5oIgorI2luY2x1
ZGUgIlZpc2libGVTZWxlY3Rpb24uaCIKKyNpbmNsdWRlICJodG1sZWRpdGluZy5oIgorI2luY2x1
ZGUgIm1hcmt1cC5oIgorI2luY2x1ZGUgInZpc2libGVfdW5pdHMuaCIKKworbmFtZXNwYWNlIFdl
YkNvcmUgeworCit1c2luZyBuYW1lc3BhY2Ugc3RkOwordXNpbmcgbmFtZXNwYWNlIFdURjsKKwor
I2lmIFVTRShBVVRPQ09SUkVDVElPTl9QQU5FTCkKKworc3RhdGljIGNvbnN0IFZlY3RvcjxEb2N1
bWVudE1hcmtlcjo6TWFya2VyVHlwZT4mIG1hcmtlclR5cGVzRm9yQXV0b2NvcnJlY3Rpb24oKQor
eworICAgIERFRklORV9TVEFUSUNfTE9DQUwoVmVjdG9yPERvY3VtZW50TWFya2VyOjpNYXJrZXJU
eXBlPiwgbWFya2VyVHlwZXNGb3JBdXRvQ29ycmVjdGlvbiwgKCkpOworICAgIGlmIChtYXJrZXJU
eXBlc0ZvckF1dG9Db3JyZWN0aW9uLmlzRW1wdHkoKSkgeworICAgICAgICBtYXJrZXJUeXBlc0Zv
ckF1dG9Db3JyZWN0aW9uLmFwcGVuZChEb2N1bWVudE1hcmtlcjo6UmVwbGFjZW1lbnQpOworICAg
ICAgICBtYXJrZXJUeXBlc0ZvckF1dG9Db3JyZWN0aW9uLmFwcGVuZChEb2N1bWVudE1hcmtlcjo6
Q29ycmVjdGlvbkluZGljYXRvcik7CisgICAgICAgIG1hcmtlclR5cGVzRm9yQXV0b0NvcnJlY3Rp
b24uYXBwZW5kKERvY3VtZW50TWFya2VyOjpTcGVsbENoZWNraW5nRXhlbXB0aW9uKTsKKyAgICAg
ICAgbWFya2VyVHlwZXNGb3JBdXRvQ29ycmVjdGlvbi5hcHBlbmQoRG9jdW1lbnRNYXJrZXI6OkF1
dG9jb3JyZWN0ZWQpOworICAgIH0KKyAgICByZXR1cm4gbWFya2VyVHlwZXNGb3JBdXRvQ29ycmVj
dGlvbjsKK30KKworc3RhdGljIGNvbnN0IFZlY3RvcjxEb2N1bWVudE1hcmtlcjo6TWFya2VyVHlw
ZT4mIG1hcmtlclR5cGVzRm9yUmVwbGFjZW1lbnQoKQoreworICAgIERFRklORV9TVEFUSUNfTE9D
QUwoVmVjdG9yPERvY3VtZW50TWFya2VyOjpNYXJrZXJUeXBlPiwgbWFya2VyVHlwZXNGb3JSZXBs
YWNlbWVudCwgKCkpOworICAgIGlmIChtYXJrZXJUeXBlc0ZvclJlcGxhY2VtZW50LmlzRW1wdHko
KSkgeworICAgICAgICBtYXJrZXJUeXBlc0ZvclJlcGxhY2VtZW50LmFwcGVuZChEb2N1bWVudE1h
cmtlcjo6UmVwbGFjZW1lbnQpOworICAgICAgICBtYXJrZXJUeXBlc0ZvclJlcGxhY2VtZW50LmFw
cGVuZChEb2N1bWVudE1hcmtlcjo6U3BlbGxDaGVja2luZ0V4ZW1wdGlvbik7CisgICAgfQorICAg
IHJldHVybiBtYXJrZXJUeXBlc0ZvclJlcGxhY2VtZW50OworfQorCitzdGF0aWMgYm9vbCBtYXJr
ZXJzSGF2ZUlkZW50aWNhbERlc2NyaXB0aW9uKGNvbnN0IFZlY3RvcjxEb2N1bWVudE1hcmtlcio+
JiBtYXJrZXJzKQoreworICAgIGlmIChtYXJrZXJzLmlzRW1wdHkoKSkKKyAgICAgICAgcmV0dXJu
IHRydWU7CisKKyAgICBjb25zdCBTdHJpbmcmIGRlc2NyaXB0aW9uID0gbWFya2Vyc1swXS0+ZGVz
Y3JpcHRpb24oKTsKKyAgICBmb3IgKHNpemVfdCBpID0gMTsgaSA8IG1hcmtlcnMuc2l6ZSgpOyAr
K2kpIHsKKyAgICAgICAgaWYgKGRlc2NyaXB0aW9uICE9IG1hcmtlcnNbaV0tPmRlc2NyaXB0aW9u
KCkpCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorICAgIHJldHVybiB0cnVlOwor
fQorCitTcGVsbGluZ0NvcnJlY3Rpb25Db250cm9sbGVyOjpTcGVsbGluZ0NvcnJlY3Rpb25Db250
cm9sbGVyKEZyYW1lKiBmcmFtZSkKKyAgICA6IG1fZnJhbWUoZnJhbWUpCisgICAgLCBtX2NvcnJl
Y3Rpb25QYW5lbFRpbWVyKHRoaXMsICZTcGVsbGluZ0NvcnJlY3Rpb25Db250cm9sbGVyOjpjb3Jy
ZWN0aW9uUGFuZWxUaW1lckZpcmVkKQoreworfQorCitTcGVsbGluZ0NvcnJlY3Rpb25Db250cm9s
bGVyOjp+U3BlbGxpbmdDb3JyZWN0aW9uQ29udHJvbGxlcigpCit7CisgICAgZGlzbWlzcyhSZWFz
b25Gb3JEaXNtaXNzaW5nQ29ycmVjdGlvblBhbmVsSWdub3JlZCk7Cit9CisKK3ZvaWQgU3BlbGxp
bmdDb3JyZWN0aW9uQ29udHJvbGxlcjo6c3RhcnRDb3JyZWN0aW9uUGFuZWxUaW1lcihDb3JyZWN0
aW9uUGFuZWxJbmZvOjpQYW5lbFR5cGUgdHlwZSkKK3sKKyAgICBjb25zdCBkb3VibGUgY29ycmVj
dGlvblBhbmVsVGltZXJJbnRlcnZhbCA9IDAuMzsKKyAgICBpZiAoIWlzQXV0b21hdGljU3BlbGxp
bmdDb3JyZWN0aW9uRW5hYmxlZCgpKQorICAgICAgICByZXR1cm47CisKKyAgICAvLyBJZiB0eXBl
IGlzIFBhbmVsVHlwZVJldmVyc2lvbiwgdGhlbiB0aGUgbmV3IHJhbmdlIGhhcyBiZWVuIHNldC4g
U28gd2Ugc2hvdWxkbid0IGNsZWFyIGl0LgorICAgIGlmICh0eXBlID09IENvcnJlY3Rpb25QYW5l
bEluZm86OlBhbmVsVHlwZUNvcnJlY3Rpb24pCisgICAgICAgIG1fY29ycmVjdGlvblBhbmVsSW5m
by5yYW5nZVRvQmVSZXBsYWNlZC5jbGVhcigpOworICAgIG1fY29ycmVjdGlvblBhbmVsSW5mby5w
YW5lbFR5cGUgPSB0eXBlOworICAgIG1fY29ycmVjdGlvblBhbmVsVGltZXIuc3RhcnRPbmVTaG90
KGNvcnJlY3Rpb25QYW5lbFRpbWVySW50ZXJ2YWwpOworfQorCit2b2lkIFNwZWxsaW5nQ29ycmVj
dGlvbkNvbnRyb2xsZXI6OnN0b3BDb3JyZWN0aW9uUGFuZWxUaW1lcigpCit7CisgICAgbV9jb3Jy
ZWN0aW9uUGFuZWxUaW1lci5zdG9wKCk7CisgICAgbV9jb3JyZWN0aW9uUGFuZWxJbmZvLnJhbmdl
VG9CZVJlcGxhY2VkLmNsZWFyKCk7Cit9CisKK3ZvaWQgU3BlbGxpbmdDb3JyZWN0aW9uQ29udHJv
bGxlcjo6c3RvcFBlbmRpbmdDb3JyZWN0aW9uKGNvbnN0IFZpc2libGVTZWxlY3Rpb24mIG9sZFNl
bGVjdGlvbikKK3sKKyAgICAvLyBNYWtlIHN1cmUgdGhlcmUncyBubyBwZW5kaW5nIGF1dG9jb3Jy
ZWN0aW9uIGJlZm9yZSB3ZSBjYWxsIG1hcmtNaXNzcGVsbGluZ3NBbmRCYWRHcmFtbWFyKCkgYmVs
b3cuCisgICAgVmlzaWJsZVNlbGVjdGlvbiBjdXJyZW50U2VsZWN0aW9uKG1fZnJhbWUtPnNlbGVj
dGlvbigpLT5zZWxlY3Rpb24oKSk7CisgICAgaWYgKGN1cnJlbnRTZWxlY3Rpb24gPT0gb2xkU2Vs
ZWN0aW9uKQorICAgICAgICByZXR1cm47CisKKyAgICBzdG9wQ29ycmVjdGlvblBhbmVsVGltZXIo
KTsKKyAgICBkaXNtaXNzKFJlYXNvbkZvckRpc21pc3NpbmdDb3JyZWN0aW9uUGFuZWxJZ25vcmVk
KTsKK30KKwordm9pZCBTcGVsbGluZ0NvcnJlY3Rpb25Db250cm9sbGVyOjphcHBseVBlbmRpbmdD
b3JyZWN0aW9uKGNvbnN0IFZpc2libGVTZWxlY3Rpb24mIHNlbGVjdGlvbkFmdGVyVHlwaW5nKQor
eworICAgIC8vIEFwcGx5IHBlbmRpbmcgYXV0b2NvcnJlY3Rpb24gYmVmb3JlIG5leHQgcm91bmQg
b2Ygc3BlbGwgY2hlY2tpbmcuCisgICAgYm9vbCBkb0FwcGx5Q29ycmVjdGlvbiA9IHRydWU7Cisg
ICAgVmlzaWJsZVBvc2l0aW9uIHN0YXJ0T2ZTZWxlY3Rpb24gPSBzZWxlY3Rpb25BZnRlclR5cGlu
Zy52aXNpYmxlU3RhcnQoKTsKKyAgICBWaXNpYmxlU2VsZWN0aW9uIGN1cnJlbnRXb3JkID0gVmlz
aWJsZVNlbGVjdGlvbihzdGFydE9mV29yZChzdGFydE9mU2VsZWN0aW9uLCBMZWZ0V29yZElmT25C
b3VuZGFyeSksIGVuZE9mV29yZChzdGFydE9mU2VsZWN0aW9uLCBSaWdodFdvcmRJZk9uQm91bmRh
cnkpKTsKKyAgICBpZiAoY3VycmVudFdvcmQudmlzaWJsZUVuZCgpID09IHN0YXJ0T2ZTZWxlY3Rp
b24pIHsKKyAgICAgICAgU3RyaW5nIHdvcmRUZXh0ID0gcGxhaW5UZXh0KGN1cnJlbnRXb3JkLnRv
Tm9ybWFsaXplZFJhbmdlKCkuZ2V0KCkpOworICAgICAgICBpZiAod29yZFRleHQubGVuZ3RoKCkg
PiAwICYmIGlzQW1iaWd1b3VzQm91bmRhcnlDaGFyYWN0ZXIod29yZFRleHRbd29yZFRleHQubGVu
Z3RoKCkgLSAxXSkpCisgICAgICAgICAgICBkb0FwcGx5Q29ycmVjdGlvbiA9IGZhbHNlOworICAg
IH0KKyAgICBpZiAoZG9BcHBseUNvcnJlY3Rpb24pCisgICAgICAgIGhhbmRsZUNvcnJlY3Rpb25Q
YW5lbFJlc3VsdChkaXNtaXNzU29vbihSZWFzb25Gb3JEaXNtaXNzaW5nQ29ycmVjdGlvblBhbmVs
QWNjZXB0ZWQpKTsgCisgICAgZWxzZQorICAgICAgICBtX2NvcnJlY3Rpb25QYW5lbEluZm8ucmFu
Z2VUb0JlUmVwbGFjZWQuY2xlYXIoKTsKK30KKworYm9vbCBTcGVsbGluZ0NvcnJlY3Rpb25Db250
cm9sbGVyOjpoYXNQZW5kaW5nQ29ycmVjdGlvbigpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1fY29y
cmVjdGlvblBhbmVsSW5mby5yYW5nZVRvQmVSZXBsYWNlZDsKK30KKworYm9vbCBTcGVsbGluZ0Nv
cnJlY3Rpb25Db250cm9sbGVyOjppc1NwZWxsaW5nTWFya2VyQWxsb3dlZChQYXNzUmVmUHRyPFJh
bmdlPiBtaXNzcGVsbGluZ1JhbmdlKSBjb25zdAoreworICAgIHJldHVybiAhbV9mcmFtZS0+ZG9j
dW1lbnQoKS0+bWFya2VycygpLT5oYXNNYXJrZXJzKG1pc3NwZWxsaW5nUmFuZ2UuZ2V0KCksIERv
Y3VtZW50TWFya2VyOjpTcGVsbENoZWNraW5nRXhlbXB0aW9uKTsKK30KKwordm9pZCBTcGVsbGlu
Z0NvcnJlY3Rpb25Db250cm9sbGVyOjpzaG93KFBhc3NSZWZQdHI8UmFuZ2U+IHJhbmdlVG9SZXBs
YWNlLCBjb25zdCBTdHJpbmcmIHJlcGxhY2VtZW50KQoreworICAgIEZsb2F0UmVjdCBib3VuZGlu
Z0JveCA9IHJvb3RWaWV3UmVjdEZvclJhbmdlKHJhbmdlVG9SZXBsYWNlLmdldCgpKTsKKyAgICBp
ZiAoYm91bmRpbmdCb3guaXNFbXB0eSgpKQorICAgICAgICByZXR1cm47CisgICAgbV9jb3JyZWN0
aW9uUGFuZWxJbmZvLnJlcGxhY2VkU3RyaW5nID0gcGxhaW5UZXh0KHJhbmdlVG9SZXBsYWNlLmdl
dCgpKTsKKyAgICBtX2NvcnJlY3Rpb25QYW5lbEluZm8ucmFuZ2VUb0JlUmVwbGFjZWQgPSByYW5n
ZVRvUmVwbGFjZTsKKyAgICBtX2NvcnJlY3Rpb25QYW5lbEluZm8ucmVwbGFjZW1lbnRTdHJpbmcg
PSByZXBsYWNlbWVudDsKKyAgICBtX2NvcnJlY3Rpb25QYW5lbEluZm8uaXNBY3RpdmUgPSB0cnVl
OworICAgIGNsaWVudCgpLT5zaG93Q29ycmVjdGlvblBhbmVsKG1fY29ycmVjdGlvblBhbmVsSW5m
by5wYW5lbFR5cGUsIGJvdW5kaW5nQm94LCBtX2NvcnJlY3Rpb25QYW5lbEluZm8ucmVwbGFjZWRT
dHJpbmcsIHJlcGxhY2VtZW50LCBWZWN0b3I8U3RyaW5nPigpKTsKK30KKwordm9pZCBTcGVsbGlu
Z0NvcnJlY3Rpb25Db250cm9sbGVyOjpoYW5kbGVDYW5jZWxPcGVyYXRpb24oKQoreworICAgIGlm
ICghbV9jb3JyZWN0aW9uUGFuZWxJbmZvLmlzQWN0aXZlKQorICAgICAgICByZXR1cm47CisgICAg
bV9jb3JyZWN0aW9uUGFuZWxJbmZvLmlzQWN0aXZlID0gZmFsc2U7CisgICAgZGlzbWlzcyhSZWFz
b25Gb3JEaXNtaXNzaW5nQ29ycmVjdGlvblBhbmVsQ2FuY2VsbGVkKTsKK30KKwordm9pZCBTcGVs
bGluZ0NvcnJlY3Rpb25Db250cm9sbGVyOjpkaXNtaXNzKFJlYXNvbkZvckRpc21pc3NpbmdDb3Jy
ZWN0aW9uUGFuZWwgcmVhc29uRm9yRGlzbWlzc2luZykKK3sKKyAgICBpZiAoIW1fY29ycmVjdGlv
blBhbmVsSW5mby5pc0FjdGl2ZSkKKyAgICAgICAgcmV0dXJuOworICAgIG1fY29ycmVjdGlvblBh
bmVsSW5mby5pc0FjdGl2ZSA9IGZhbHNlOworICAgIG1fY29ycmVjdGlvblBhbmVsSXNEaXNtaXNz
ZWRCeUVkaXRvciA9IHRydWU7CisgICAgaWYgKGNsaWVudCgpKQorICAgICAgICBjbGllbnQoKS0+
ZGlzbWlzc0NvcnJlY3Rpb25QYW5lbChyZWFzb25Gb3JEaXNtaXNzaW5nKTsKK30KKworU3RyaW5n
IFNwZWxsaW5nQ29ycmVjdGlvbkNvbnRyb2xsZXI6OmRpc21pc3NTb29uKFJlYXNvbkZvckRpc21p
c3NpbmdDb3JyZWN0aW9uUGFuZWwgcmVhc29uRm9yRGlzbWlzc2luZykKK3sKKyAgICBpZiAoIW1f
Y29ycmVjdGlvblBhbmVsSW5mby5pc0FjdGl2ZSkKKyAgICAgICAgcmV0dXJuIFN0cmluZygpOwor
ICAgIG1fY29ycmVjdGlvblBhbmVsSW5mby5pc0FjdGl2ZSA9IGZhbHNlOworICAgIG1fY29ycmVj
dGlvblBhbmVsSXNEaXNtaXNzZWRCeUVkaXRvciA9IHRydWU7CisgICAgaWYgKCFjbGllbnQoKSkK
KyAgICAgICAgcmV0dXJuIFN0cmluZygpOworICAgIHJldHVybiBjbGllbnQoKS0+ZGlzbWlzc0Nv
cnJlY3Rpb25QYW5lbFNvb24ocmVhc29uRm9yRGlzbWlzc2luZyk7Cit9CisKK3ZvaWQgU3BlbGxp
bmdDb3JyZWN0aW9uQ29udHJvbGxlcjo6YXBwbHlDb3JyZWN0aW9uUGFuZWxJbmZvKGNvbnN0IFZl
Y3RvcjxEb2N1bWVudE1hcmtlcjo6TWFya2VyVHlwZT4mIG1hcmtlclR5cGVzVG9BZGQpCit7Cisg
ICAgaWYgKCFtX2NvcnJlY3Rpb25QYW5lbEluZm8ucmFuZ2VUb0JlUmVwbGFjZWQpCisgICAgICAg
IHJldHVybjsKKworICAgIEV4Y2VwdGlvbkNvZGUgZWMgPSAwOworICAgIFJlZlB0cjxSYW5nZT4g
cGFyYWdyYXBoUmFuZ2VDb250YWluaW5nQ29ycmVjdGlvbiA9IG1fY29ycmVjdGlvblBhbmVsSW5m
by5yYW5nZVRvQmVSZXBsYWNlZC0+Y2xvbmVSYW5nZShlYyk7CisgICAgaWYgKGVjKQorICAgICAg
ICByZXR1cm47CisKKyAgICBzZXRTdGFydChwYXJhZ3JhcGhSYW5nZUNvbnRhaW5pbmdDb3JyZWN0
aW9uLmdldCgpLCBzdGFydE9mUGFyYWdyYXBoKG1fY29ycmVjdGlvblBhbmVsSW5mby5yYW5nZVRv
QmVSZXBsYWNlZC0+c3RhcnRQb3NpdGlvbigpKSk7CisgICAgc2V0RW5kKHBhcmFncmFwaFJhbmdl
Q29udGFpbmluZ0NvcnJlY3Rpb24uZ2V0KCksIGVuZE9mUGFyYWdyYXBoKG1fY29ycmVjdGlvblBh
bmVsSW5mby5yYW5nZVRvQmVSZXBsYWNlZC0+ZW5kUG9zaXRpb24oKSkpOworCisgICAgLy8gQWZ0
ZXIgd2UgcmVwbGFjZSB0aGUgd29yZCBhdCByYW5nZSByYW5nZVRvQmVSZXBsYWNlZCwgd2UgbmVl
ZCB0byBhZGQgbWFya2VycyB0byB0aGF0IHJhbmdlLgorICAgIC8vIEhvd2V2ZXIsIG9uY2UgdGhl
IHJlcGxhY2VtZW50IHRvb2sgcGxhY2UsIHRoZSB2YWx1ZSBvZiByYW5nZVRvQmVSZXBsYWNlZCBp
cyBub3QgdmFsaWQgYW55bW9yZS4KKyAgICAvLyBTbyBiZWZvcmUgd2UgY2Fycnkgb3V0IHRoZSBy
ZXBsYWNlbWVudCwgd2UgbmVlZCB0byBzdG9yZSB0aGUgc3RhcnQgcG9zaXRpb24gb2YgcmFuZ2VU
b0JlUmVwbGFjZWQKKyAgICAvLyByZWxhdGl2ZSB0byB0aGUgc3RhcnQgcG9zaXRpb24gb2YgdGhl
IGNvbnRhaW5pbmcgcGFyYWdyYXBoLiBXZSB1c2UgY29ycmVjdGlvblN0YXJ0T2Zmc2V0SW5QYXJh
Z3JhcGgKKyAgICAvLyB0byBzdG9yZSB0aGlzIHZhbHVlLiBJbiBvcmRlciB0byBvYnRhaW4gdGhp
cyBvZmZzZXQsIHdlIG5lZWQgdG8gZmlyc3QgY3JlYXRlIGEgcmFuZ2UKKyAgICAvLyB3aGljaCBz
cGFucyBmcm9tIHRoZSBzdGFydCBvZiBwYXJhZ3JhcGggdG8gdGhlIHN0YXJ0IHBvc2l0aW9uIG9m
IHJhbmdlVG9CZVJlcGxhY2VkLgorICAgIFJlZlB0cjxSYW5nZT4gY29ycmVjdGlvblN0YXJ0T2Zm
c2V0SW5QYXJhZ3JhcGhBc1JhbmdlID0gUmFuZ2U6OmNyZWF0ZShwYXJhZ3JhcGhSYW5nZUNvbnRh
aW5pbmdDb3JyZWN0aW9uLT5zdGFydENvbnRhaW5lcihlYyktPmRvY3VtZW50KCksIHBhcmFncmFw
aFJhbmdlQ29udGFpbmluZ0NvcnJlY3Rpb24tPnN0YXJ0UG9zaXRpb24oKSwgcGFyYWdyYXBoUmFu
Z2VDb250YWluaW5nQ29ycmVjdGlvbi0+c3RhcnRQb3NpdGlvbigpKTsKKyAgICBpZiAoZWMpCisg
ICAgICAgIHJldHVybjsKKworICAgIFBvc2l0aW9uIHN0YXJ0UG9zaXRpb25PZlJhbmdlVG9CZVJl
cGxhY2VkID0gbV9jb3JyZWN0aW9uUGFuZWxJbmZvLnJhbmdlVG9CZVJlcGxhY2VkLT5zdGFydFBv
c2l0aW9uKCk7CisgICAgY29ycmVjdGlvblN0YXJ0T2Zmc2V0SW5QYXJhZ3JhcGhBc1JhbmdlLT5z
ZXRFbmQoc3RhcnRQb3NpdGlvbk9mUmFuZ2VUb0JlUmVwbGFjZWQuY29udGFpbmVyTm9kZSgpLCBz
dGFydFBvc2l0aW9uT2ZSYW5nZVRvQmVSZXBsYWNlZC5jb21wdXRlT2Zmc2V0SW5Db250YWluZXJO
b2RlKCksIGVjKTsKKyAgICBpZiAoZWMpCisgICAgICAgIHJldHVybjsKKworICAgIC8vIFRha2Ug
bm90ZSBvZiB0aGUgbG9jYXRpb24gb2YgYXV0b2NvcnJlY3Rpb24gc28gdGhhdCB3ZSBjYW4gYWRk
IG1hcmtlciBhZnRlciB0aGUgcmVwbGFjZW1lbnQgdG9vayBwbGFjZS4KKyAgICBpbnQgY29ycmVj
dGlvblN0YXJ0T2Zmc2V0SW5QYXJhZ3JhcGggPSBUZXh0SXRlcmF0b3I6OnJhbmdlTGVuZ3RoKGNv
cnJlY3Rpb25TdGFydE9mZnNldEluUGFyYWdyYXBoQXNSYW5nZS5nZXQoKSk7CisKKyAgICAvLyBD
bG9uZSB0aGUgcmFuZ2UsIHNpbmNlIHRoZSBjYWxsZXIgb2YgdGhpcyBtZXRob2QgbWF5IHdhbnQg
dG8ga2VlcCB0aGUgb3JpZ2luYWwgcmFuZ2UgYXJvdW5kLgorICAgIFJlZlB0cjxSYW5nZT4gcmFu
Z2VUb0JlUmVwbGFjZWQgPSBtX2NvcnJlY3Rpb25QYW5lbEluZm8ucmFuZ2VUb0JlUmVwbGFjZWQt
PmNsb25lUmFuZ2UoZWMpOworICAgIGFwcGx5Q29tbWFuZChTcGVsbGluZ0NvcnJlY3Rpb25Db21t
YW5kOjpjcmVhdGUocmFuZ2VUb0JlUmVwbGFjZWQsIG1fY29ycmVjdGlvblBhbmVsSW5mby5yZXBs
YWNlbWVudFN0cmluZykpOworICAgIHNldEVuZChwYXJhZ3JhcGhSYW5nZUNvbnRhaW5pbmdDb3Jy
ZWN0aW9uLmdldCgpLCBtX2ZyYW1lLT5zZWxlY3Rpb24oKS0+c2VsZWN0aW9uKCkuc3RhcnQoKSk7
CisgICAgUmVmUHRyPFJhbmdlPiByZXBsYWNlbWVudFJhbmdlID0gVGV4dEl0ZXJhdG9yOjpzdWJy
YW5nZShwYXJhZ3JhcGhSYW5nZUNvbnRhaW5pbmdDb3JyZWN0aW9uLmdldCgpLCBjb3JyZWN0aW9u
U3RhcnRPZmZzZXRJblBhcmFncmFwaCwgIG1fY29ycmVjdGlvblBhbmVsSW5mby5yZXBsYWNlbWVu
dFN0cmluZy5sZW5ndGgoKSk7CisgICAgU3RyaW5nIG5ld1RleHQgPSBwbGFpblRleHQocmVwbGFj
ZW1lbnRSYW5nZS5nZXQoKSk7CisKKyAgICAvLyBDaGVjayB0byBzZWUgaWYgcmVwbGFjZW1lbnQg
c3VjY2VlZGVkLgorICAgIGlmIChuZXdUZXh0ICE9IG1fY29ycmVjdGlvblBhbmVsSW5mby5yZXBs
YWNlbWVudFN0cmluZykKKyAgICAgICAgcmV0dXJuOworCisgICAgRG9jdW1lbnRNYXJrZXJDb250
cm9sbGVyKiBtYXJrZXJzID0gcmVwbGFjZW1lbnRSYW5nZS0+c3RhcnRDb250YWluZXIoKS0+ZG9j
dW1lbnQoKS0+bWFya2VycygpOworICAgIHNpemVfdCBzaXplID0gbWFya2VyVHlwZXNUb0FkZC5z
aXplKCk7CisgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBzaXplOyArK2kpIHsKKyAgICAgICAg
RG9jdW1lbnRNYXJrZXI6Ok1hcmtlclR5cGUgbWFya2VyVHlwZSA9IG1hcmtlclR5cGVzVG9BZGRb
aV07CisgICAgICAgIFN0cmluZyBkZXNjcmlwdGlvbjsKKyAgICAgICAgaWYgKG1fY29ycmVjdGlv
blBhbmVsSW5mby5wYW5lbFR5cGUgIT0gQ29ycmVjdGlvblBhbmVsSW5mbzo6UGFuZWxUeXBlUmV2
ZXJzaW9uICYmIChtYXJrZXJUeXBlID09IERvY3VtZW50TWFya2VyOjpSZXBsYWNlbWVudCB8fCBt
YXJrZXJUeXBlID09IERvY3VtZW50TWFya2VyOjpBdXRvY29ycmVjdGVkKSkKKyAgICAgICAgICAg
IGRlc2NyaXB0aW9uID0gbV9jb3JyZWN0aW9uUGFuZWxJbmZvLnJlcGxhY2VkU3RyaW5nOworICAg
ICAgICBtYXJrZXJzLT5hZGRNYXJrZXIocmVwbGFjZW1lbnRSYW5nZS5nZXQoKSwgbWFya2VyVHlw
ZSwgZGVzY3JpcHRpb24pOworICAgIH0KK30KKworYm9vbCBTcGVsbGluZ0NvcnJlY3Rpb25Db250
cm9sbGVyOjphcHBseUF1dG9jb3JyZWN0aW9uQmVmb3JlVHlwaW5nSWZBcHByb3ByaWF0ZSgpCit7
CisgICAgaWYgKCFtX2NvcnJlY3Rpb25QYW5lbEluZm8ucmFuZ2VUb0JlUmVwbGFjZWQgfHwgIW1f
Y29ycmVjdGlvblBhbmVsSW5mby5pc0FjdGl2ZSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisg
ICAgaWYgKG1fY29ycmVjdGlvblBhbmVsSW5mby5wYW5lbFR5cGUgIT0gQ29ycmVjdGlvblBhbmVs
SW5mbzo6UGFuZWxUeXBlQ29ycmVjdGlvbikKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAg
UG9zaXRpb24gY2FyZXRQb3NpdGlvbiA9IG1fZnJhbWUtPnNlbGVjdGlvbigpLT5zZWxlY3Rpb24o
KS5zdGFydCgpOworCisgICAgaWYgKG1fY29ycmVjdGlvblBhbmVsSW5mby5yYW5nZVRvQmVSZXBs
YWNlZC0+ZW5kUG9zaXRpb24oKSA9PSBjYXJldFBvc2l0aW9uKSB7CisgICAgICAgIGhhbmRsZUNv
cnJlY3Rpb25QYW5lbFJlc3VsdChkaXNtaXNzU29vbihSZWFzb25Gb3JEaXNtaXNzaW5nQ29ycmVj
dGlvblBhbmVsQWNjZXB0ZWQpKTsKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgfSAKKyAgICAK
KyAgICAvLyBQZW5kaW5nIGNvcnJlY3Rpb24gc2hvdWxkIGFsd2F5cyBiZSB3aGVyZSBjYXJldCBp
cy4gQnV0IGluIGNhc2UgdGhpcyBpcyBub3QgYWx3YXlzIHRydWUsIHdlIHN0aWxsIHdhbnQgdG8g
ZGlzbWlzcyB0aGUgcGFuZWwgd2l0aG91dCBhY2NlcHRpbmcgdGhlIGNvcnJlY3Rpb24uCisgICAg
QVNTRVJUKG1fY29ycmVjdGlvblBhbmVsSW5mby5yYW5nZVRvQmVSZXBsYWNlZC0+ZW5kUG9zaXRp
b24oKSA9PSBjYXJldFBvc2l0aW9uKTsKKyAgICBkaXNtaXNzKFJlYXNvbkZvckRpc21pc3NpbmdD
b3JyZWN0aW9uUGFuZWxJZ25vcmVkKTsKKyAgICByZXR1cm4gZmFsc2U7Cit9CisKK3ZvaWQgU3Bl
bGxpbmdDb3JyZWN0aW9uQ29udHJvbGxlcjo6cmVzcG9uZFRvVW5hcHBsaWVkU3BlbGxDb3JyZWN0
aW9uKGNvbnN0IFZpc2libGVTZWxlY3Rpb24mIHNlbGVjdGlvbk9mQ29ycmVjdGVkLCBjb25zdCBT
dHJpbmcmIGNvcnJlY3RlZCwgY29uc3QgU3RyaW5nJiBjb3JyZWN0aW9uKQoreworICAgIGNsaWVu
dCgpLT5yZWNvcmRBdXRvY29ycmVjdGlvblJlc3BvbnNlKEVkaXRvckNsaWVudDo6QXV0b2NvcnJl
Y3Rpb25SZXZlcnRlZCwgY29ycmVjdGVkLCBjb3JyZWN0aW9uKTsKKyAgICBtX2ZyYW1lLT5kb2N1
bWVudCgpLT51cGRhdGVMYXlvdXQoKTsKKyAgICBtX2ZyYW1lLT5zZWxlY3Rpb24oKS0+c2V0U2Vs
ZWN0aW9uKHNlbGVjdGlvbk9mQ29ycmVjdGVkLCBGcmFtZVNlbGVjdGlvbjo6Q2xvc2VUeXBpbmcg
fCBGcmFtZVNlbGVjdGlvbjo6Q2xlYXJUeXBpbmdTdHlsZSB8IEZyYW1lU2VsZWN0aW9uOjpTcGVs
bENvcnJlY3Rpb25UcmlnZ2VyZWQpOworICAgIFJlZlB0cjxSYW5nZT4gcmFuZ2UgPSBSYW5nZTo6
Y3JlYXRlKG1fZnJhbWUtPmRvY3VtZW50KCksIG1fZnJhbWUtPnNlbGVjdGlvbigpLT5zZWxlY3Rp
b24oKS5zdGFydCgpLCBtX2ZyYW1lLT5zZWxlY3Rpb24oKS0+c2VsZWN0aW9uKCkuZW5kKCkpOwor
CisgICAgRG9jdW1lbnRNYXJrZXJDb250cm9sbGVyKiBtYXJrZXJzID0gbV9mcmFtZS0+ZG9jdW1l
bnQoKS0+bWFya2VycygpOworICAgIG1hcmtlcnMtPnJlbW92ZU1hcmtlcnMocmFuZ2UuZ2V0KCks
IERvY3VtZW50TWFya2VyOjpTcGVsbGluZyB8IERvY3VtZW50TWFya2VyOjpBdXRvY29ycmVjdGVk
LCBEb2N1bWVudE1hcmtlckNvbnRyb2xsZXI6OlJlbW92ZVBhcnRpYWxseU92ZXJsYXBwaW5nTWFy
a2VyKTsKKyAgICBtYXJrZXJzLT5hZGRNYXJrZXIocmFuZ2UuZ2V0KCksIERvY3VtZW50TWFya2Vy
OjpSZXBsYWNlbWVudCk7CisgICAgbWFya2Vycy0+YWRkTWFya2VyKHJhbmdlLmdldCgpLCBEb2N1
bWVudE1hcmtlcjo6U3BlbGxDaGVja2luZ0V4ZW1wdGlvbik7Cit9CisKK3ZvaWQgU3BlbGxpbmdD
b3JyZWN0aW9uQ29udHJvbGxlcjo6Y29ycmVjdGlvblBhbmVsVGltZXJGaXJlZChUaW1lcjxTcGVs
bGluZ0NvcnJlY3Rpb25Db250cm9sbGVyPiopCit7CisgICAgbV9jb3JyZWN0aW9uUGFuZWxJc0Rp
c21pc3NlZEJ5RWRpdG9yID0gZmFsc2U7CisgICAgc3dpdGNoIChtX2NvcnJlY3Rpb25QYW5lbElu
Zm8ucGFuZWxUeXBlKSB7CisgICAgY2FzZSBDb3JyZWN0aW9uUGFuZWxJbmZvOjpQYW5lbFR5cGVD
b3JyZWN0aW9uOiB7CisgICAgICAgIFZpc2libGVTZWxlY3Rpb24gc2VsZWN0aW9uKG1fZnJhbWUt
PnNlbGVjdGlvbigpLT5zZWxlY3Rpb24oKSk7CisgICAgICAgIFZpc2libGVQb3NpdGlvbiBzdGFy
dChzZWxlY3Rpb24uc3RhcnQoKSwgc2VsZWN0aW9uLmFmZmluaXR5KCkpOworICAgICAgICBWaXNp
YmxlUG9zaXRpb24gcCA9IHN0YXJ0T2ZXb3JkKHN0YXJ0LCBMZWZ0V29yZElmT25Cb3VuZGFyeSk7
CisgICAgICAgIFZpc2libGVTZWxlY3Rpb24gYWRqYWNlbnRXb3JkcyA9IFZpc2libGVTZWxlY3Rp
b24ocCwgc3RhcnQpOworICAgICAgICBtX2ZyYW1lLT5lZGl0b3IoKS0+bWFya0FsbE1pc3NwZWxs
aW5nc0FuZEJhZEdyYW1tYXJJblJhbmdlcyhUZXh0Q2hlY2tpbmdUeXBlU3BlbGxpbmcgfCBUZXh0
Q2hlY2tpbmdUeXBlU2hvd0NvcnJlY3Rpb25QYW5lbCwgYWRqYWNlbnRXb3Jkcy50b05vcm1hbGl6
ZWRSYW5nZSgpLmdldCgpLCAwKTsKKyAgICB9CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgQ29y
cmVjdGlvblBhbmVsSW5mbzo6UGFuZWxUeXBlUmV2ZXJzaW9uOiB7CisgICAgICAgIGlmICghbV9j
b3JyZWN0aW9uUGFuZWxJbmZvLnJhbmdlVG9CZVJlcGxhY2VkKQorICAgICAgICAgICAgYnJlYWs7
CisgICAgICAgIG1fY29ycmVjdGlvblBhbmVsSW5mby5pc0FjdGl2ZSA9IHRydWU7CisgICAgICAg
IG1fY29ycmVjdGlvblBhbmVsSW5mby5yZXBsYWNlZFN0cmluZyA9IHBsYWluVGV4dChtX2NvcnJl
Y3Rpb25QYW5lbEluZm8ucmFuZ2VUb0JlUmVwbGFjZWQuZ2V0KCkpOworICAgICAgICBGbG9hdFJl
Y3QgYm91bmRpbmdCb3ggPSByb290Vmlld1JlY3RGb3JSYW5nZShtX2NvcnJlY3Rpb25QYW5lbElu
Zm8ucmFuZ2VUb0JlUmVwbGFjZWQuZ2V0KCkpOworICAgICAgICBpZiAoIWJvdW5kaW5nQm94Lmlz
RW1wdHkoKSkKKyAgICAgICAgICAgIGNsaWVudCgpLT5zaG93Q29ycmVjdGlvblBhbmVsKG1fY29y
cmVjdGlvblBhbmVsSW5mby5wYW5lbFR5cGUsIGJvdW5kaW5nQm94LCBtX2NvcnJlY3Rpb25QYW5l
bEluZm8ucmVwbGFjZWRTdHJpbmcsIG1fY29ycmVjdGlvblBhbmVsSW5mby5yZXBsYWNlbWVudFN0
cmluZywgVmVjdG9yPFN0cmluZz4oKSk7CisgICAgfQorICAgICAgICBicmVhazsKKyAgICBjYXNl
IENvcnJlY3Rpb25QYW5lbEluZm86OlBhbmVsVHlwZVNwZWxsaW5nU3VnZ2VzdGlvbnM6IHsKKyAg
ICAgICAgaWYgKCFtX2NvcnJlY3Rpb25QYW5lbEluZm8ucmFuZ2VUb0JlUmVwbGFjZWQgfHwgcGxh
aW5UZXh0KG1fY29ycmVjdGlvblBhbmVsSW5mby5yYW5nZVRvQmVSZXBsYWNlZC5nZXQoKSkgIT0g
bV9jb3JyZWN0aW9uUGFuZWxJbmZvLnJlcGxhY2VkU3RyaW5nKQorICAgICAgICAgICAgYnJlYWs7
CisgICAgICAgIFN0cmluZyBwYXJhZ3JhcGhUZXh0ID0gcGxhaW5UZXh0KFRleHRDaGVja2luZ1Bh
cmFncmFwaChtX2NvcnJlY3Rpb25QYW5lbEluZm8ucmFuZ2VUb0JlUmVwbGFjZWQpLnBhcmFncmFw
aFJhbmdlKCkuZ2V0KCkpOworICAgICAgICBWZWN0b3I8U3RyaW5nPiBzdWdnZXN0aW9uczsKKyAg
ICAgICAgdGV4dENoZWNrZXIoKS0+Z2V0R3Vlc3Nlc0ZvcldvcmQobV9jb3JyZWN0aW9uUGFuZWxJ
bmZvLnJlcGxhY2VkU3RyaW5nLCBwYXJhZ3JhcGhUZXh0LCBzdWdnZXN0aW9ucyk7CisgICAgICAg
IGlmIChzdWdnZXN0aW9ucy5pc0VtcHR5KCkpIHsKKyAgICAgICAgICAgIG1fY29ycmVjdGlvblBh
bmVsSW5mby5yYW5nZVRvQmVSZXBsYWNlZC5jbGVhcigpOworICAgICAgICAgICAgYnJlYWs7Cisg
ICAgICAgIH0KKyAgICAgICAgU3RyaW5nIHRvcFN1Z2dlc3Rpb24gPSBzdWdnZXN0aW9ucy5maXJz
dCgpOworICAgICAgICBzdWdnZXN0aW9ucy5yZW1vdmUoMCk7CisgICAgICAgIG1fY29ycmVjdGlv
blBhbmVsSW5mby5pc0FjdGl2ZSA9IHRydWU7CisgICAgICAgIEZsb2F0UmVjdCBib3VuZGluZ0Jv
eCA9IHJvb3RWaWV3UmVjdEZvclJhbmdlKG1fY29ycmVjdGlvblBhbmVsSW5mby5yYW5nZVRvQmVS
ZXBsYWNlZC5nZXQoKSk7CisgICAgICAgIGlmICghYm91bmRpbmdCb3guaXNFbXB0eSgpKQorICAg
ICAgICAgICAgY2xpZW50KCktPnNob3dDb3JyZWN0aW9uUGFuZWwobV9jb3JyZWN0aW9uUGFuZWxJ
bmZvLnBhbmVsVHlwZSwgYm91bmRpbmdCb3gsIG1fY29ycmVjdGlvblBhbmVsSW5mby5yZXBsYWNl
ZFN0cmluZywgdG9wU3VnZ2VzdGlvbiwgc3VnZ2VzdGlvbnMpOworICAgIH0KKyAgICAgICAgYnJl
YWs7CisgICAgfQorfQorCit2b2lkIFNwZWxsaW5nQ29ycmVjdGlvbkNvbnRyb2xsZXI6OmhhbmRs
ZUNvcnJlY3Rpb25QYW5lbFJlc3VsdChjb25zdCBTdHJpbmcmIGNvcnJlY3Rpb24pCit7CisgICAg
UmFuZ2UqIHJlcGxhY2VkUmFuZ2UgPSBtX2NvcnJlY3Rpb25QYW5lbEluZm8ucmFuZ2VUb0JlUmVw
bGFjZWQuZ2V0KCk7CisgICAgaWYgKCFyZXBsYWNlZFJhbmdlIHx8IG1fZnJhbWUtPmRvY3VtZW50
KCkgIT0gcmVwbGFjZWRSYW5nZS0+b3duZXJEb2N1bWVudCgpKQorICAgICAgICByZXR1cm47CisK
KyAgICBTdHJpbmcgY3VycmVudFdvcmQgPSBwbGFpblRleHQobV9jb3JyZWN0aW9uUGFuZWxJbmZv
LnJhbmdlVG9CZVJlcGxhY2VkLmdldCgpKTsKKyAgICAvLyBDaGVjayB0byBzZWUgaWYgdGhlIHdv
cmQgd2UgYXJlIGFib3V0IHRvIGNvcnJlY3QgaGFzIGJlZW4gY2hhbmdlZCBiZXR3ZWVuIHRpbWVy
IGZpcmluZyBhbmQgY2FsbGJhY2sgYmVpbmcgdHJpZ2dlcmVkLgorICAgIGlmIChjdXJyZW50V29y
ZCAhPSBtX2NvcnJlY3Rpb25QYW5lbEluZm8ucmVwbGFjZWRTdHJpbmcpCisgICAgICAgIHJldHVy
bjsKKworICAgIG1fY29ycmVjdGlvblBhbmVsSW5mby5pc0FjdGl2ZSA9IGZhbHNlOworCisgICAg
c3dpdGNoIChtX2NvcnJlY3Rpb25QYW5lbEluZm8ucGFuZWxUeXBlKSB7CisgICAgY2FzZSBDb3Jy
ZWN0aW9uUGFuZWxJbmZvOjpQYW5lbFR5cGVDb3JyZWN0aW9uOgorICAgICAgICBpZiAoY29ycmVj
dGlvbi5sZW5ndGgoKSkgeworICAgICAgICAgICAgbV9jb3JyZWN0aW9uUGFuZWxJbmZvLnJlcGxh
Y2VtZW50U3RyaW5nID0gY29ycmVjdGlvbjsKKyAgICAgICAgICAgIGFwcGx5Q29ycmVjdGlvblBh
bmVsSW5mbyhtYXJrZXJUeXBlc0ZvckF1dG9jb3JyZWN0aW9uKCkpOworICAgICAgICB9IGVsc2Ug
aWYgKCFtX2NvcnJlY3Rpb25QYW5lbElzRGlzbWlzc2VkQnlFZGl0b3IpCisgICAgICAgICAgICBy
ZXBsYWNlZFJhbmdlLT5zdGFydENvbnRhaW5lcigpLT5kb2N1bWVudCgpLT5tYXJrZXJzKCktPmFk
ZE1hcmtlcihyZXBsYWNlZFJhbmdlLCBEb2N1bWVudE1hcmtlcjo6UmVqZWN0ZWRDb3JyZWN0aW9u
LCBtX2NvcnJlY3Rpb25QYW5lbEluZm8ucmVwbGFjZWRTdHJpbmcpOworICAgICAgICBicmVhazsK
KyAgICBjYXNlIENvcnJlY3Rpb25QYW5lbEluZm86OlBhbmVsVHlwZVJldmVyc2lvbjoKKyAgICBj
YXNlIENvcnJlY3Rpb25QYW5lbEluZm86OlBhbmVsVHlwZVNwZWxsaW5nU3VnZ2VzdGlvbnM6Cisg
ICAgICAgIGlmIChjb3JyZWN0aW9uLmxlbmd0aCgpKSB7CisgICAgICAgICAgICBtX2NvcnJlY3Rp
b25QYW5lbEluZm8ucmVwbGFjZW1lbnRTdHJpbmcgPSBjb3JyZWN0aW9uOworICAgICAgICAgICAg
YXBwbHlDb3JyZWN0aW9uUGFuZWxJbmZvKG1hcmtlclR5cGVzRm9yUmVwbGFjZW1lbnQoKSk7Cisg
ICAgICAgIH0KKyAgICAgICAgYnJlYWs7CisgICAgfQorCisgICAgbV9jb3JyZWN0aW9uUGFuZWxJ
bmZvLnJhbmdlVG9CZVJlcGxhY2VkLmNsZWFyKCk7Cit9CisKK2Jvb2wgU3BlbGxpbmdDb3JyZWN0
aW9uQ29udHJvbGxlcjo6aXNBdXRvbWF0aWNTcGVsbGluZ0NvcnJlY3Rpb25FbmFibGVkKCkKK3sK
KyAgICByZXR1cm4gY2xpZW50KCkgJiYgY2xpZW50KCktPmlzQXV0b21hdGljU3BlbGxpbmdDb3Jy
ZWN0aW9uRW5hYmxlZCgpOworfQorCitGbG9hdFJlY3QgU3BlbGxpbmdDb3JyZWN0aW9uQ29udHJv
bGxlcjo6cm9vdFZpZXdSZWN0Rm9yUmFuZ2UoY29uc3QgUmFuZ2UqIHJhbmdlKSBjb25zdAorewor
ICAgIEZyYW1lVmlldyogdmlldyA9IG1fZnJhbWUtPnZpZXcoKTsKKyAgICBpZiAoIXZpZXcpCisg
ICAgICAgIHJldHVybiBGbG9hdFJlY3QoKTsKKyAgICBWZWN0b3I8RmxvYXRRdWFkPiB0ZXh0UXVh
ZHM7CisgICAgcmFuZ2UtPnRleHRRdWFkcyh0ZXh0UXVhZHMpOworICAgIEZsb2F0UmVjdCBib3Vu
ZGluZ1JlY3Q7CisgICAgc2l6ZV90IHNpemUgPSB0ZXh0UXVhZHMuc2l6ZSgpOworICAgIGZvciAo
c2l6ZV90IGkgPSAwOyBpIDwgc2l6ZTsgKytpKQorICAgICAgICBib3VuZGluZ1JlY3QudW5pdGUo
dGV4dFF1YWRzW2ldLmJvdW5kaW5nQm94KCkpOworICAgIHJldHVybiB2aWV3LT5jb250ZW50c1Rv
Um9vdFZpZXcoSW50UmVjdChib3VuZGluZ1JlY3QpKTsKK30gICAgICAgIAorCit2b2lkIFNwZWxs
aW5nQ29ycmVjdGlvbkNvbnRyb2xsZXI6OnJlc3BvbmRUb0NoYW5nZWRTZWxlY3Rpb24oY29uc3Qg
VmlzaWJsZVNlbGVjdGlvbiYgb2xkU2VsZWN0aW9uKQoreworICAgIFZpc2libGVTZWxlY3Rpb24g
Y3VycmVudFNlbGVjdGlvbihtX2ZyYW1lLT5zZWxlY3Rpb24oKS0+c2VsZWN0aW9uKCkpOworICAg
IC8vIFdoZW4gdXNlciBtb3ZlcyBjYXJldCB0byB0aGUgZW5kIG9mIGF1dG9jb3JyZWN0ZWQgd29y
ZCBhbmQgcGF1c2VzLCB3ZSBzaG93IHRoZSBwYW5lbAorICAgIC8vIGNvbnRhaW5pbmcgdGhlIG9y
aWdpbmFsIHByZS1jb3JyZWN0aW9uIHdvcmQgc28gdGhhdCB1c2VyIGNhbiBxdWlja2x5IHJldmVy
dCB0aGUKKyAgICAvLyB1bmRlc2lyZWQgYXV0b2NvcnJlY3Rpb24uIEhlcmUsIHdlIHN0YXJ0IGNv
cnJlY3Rpb24gcGFuZWwgdGltZXIgb25jZSB3ZSBjb25maXJtIHRoYXQKKyAgICAvLyB0aGUgbmV3
IGNhcmV0IHBvc2l0aW9uIGlzIGF0IHRoZSBlbmQgb2YgYSB3b3JkLgorICAgIGlmICghY3VycmVu
dFNlbGVjdGlvbi5pc0NhcmV0KCkgfHwgY3VycmVudFNlbGVjdGlvbiA9PSBvbGRTZWxlY3Rpb24p
CisgICAgICAgIHJldHVybjsKKworICAgIFZpc2libGVQb3NpdGlvbiBzZWxlY3Rpb25Qb3NpdGlv
biA9IGN1cnJlbnRTZWxlY3Rpb24uc3RhcnQoKTsKKyAgICAKKyAgICAvLyBDcmVhdGluZyBhIFZp
c2libGUgcG9zaXRpb24gdHJpZ2dlcnMgYSBsYXlvdXQgYW5kIHRoZXJlIGlzIG5vCisgICAgLy8g
Z3VhcmFudGVlIHRoYXQgdGhlIHNlbGVjdGlvbiBpcyBzdGlsbCB2YWxpZC4KKyAgICBpZiAoc2Vs
ZWN0aW9uUG9zaXRpb24uaXNOdWxsKCkpCisgICAgICAgIHJldHVybjsKKyAgICAKKyAgICBWaXNp
YmxlUG9zaXRpb24gZW5kUG9zaXRpb25PZldvcmQgPSBlbmRPZldvcmQoc2VsZWN0aW9uUG9zaXRp
b24sIExlZnRXb3JkSWZPbkJvdW5kYXJ5KTsKKyAgICBpZiAoc2VsZWN0aW9uUG9zaXRpb24gIT0g
ZW5kUG9zaXRpb25PZldvcmQpCisgICAgICAgIHJldHVybjsKKworICAgIFBvc2l0aW9uIHBvc2l0
aW9uID0gZW5kUG9zaXRpb25PZldvcmQuZGVlcEVxdWl2YWxlbnQoKTsKKyAgICBpZiAocG9zaXRp
b24uYW5jaG9yVHlwZSgpICE9IFBvc2l0aW9uOjpQb3NpdGlvbklzT2Zmc2V0SW5BbmNob3IpCisg
ICAgICAgIHJldHVybjsKKworICAgIE5vZGUqIG5vZGUgPSBwb3NpdGlvbi5jb250YWluZXJOb2Rl
KCk7CisgICAgaW50IGVuZE9mZnNldCA9IHBvc2l0aW9uLm9mZnNldEluQ29udGFpbmVyTm9kZSgp
OworICAgIFZlY3RvcjxEb2N1bWVudE1hcmtlcio+IG1hcmtlcnMgPSBub2RlLT5kb2N1bWVudCgp
LT5tYXJrZXJzKCktPm1hcmtlcnNGb3Iobm9kZSk7CisgICAgc2l6ZV90IG1hcmtlckNvdW50ID0g
bWFya2Vycy5zaXplKCk7CisgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBtYXJrZXJDb3VudDsg
KytpKSB7CisgICAgICAgIGNvbnN0IERvY3VtZW50TWFya2VyKiBtYXJrZXIgPSBtYXJrZXJzW2ld
OworICAgICAgICBpZiAoIXNob3VsZFN0YXJ0VGltZXJGb3IobWFya2VyLCBlbmRPZmZzZXQpKQor
ICAgICAgICAgICAgY29udGludWU7CisgICAgICAgIFJlZlB0cjxSYW5nZT4gd29yZFJhbmdlID0g
UmFuZ2U6OmNyZWF0ZShtX2ZyYW1lLT5kb2N1bWVudCgpLCBub2RlLCBtYXJrZXItPnN0YXJ0T2Zm
c2V0KCksIG5vZGUsIG1hcmtlci0+ZW5kT2Zmc2V0KCkpOworICAgICAgICBTdHJpbmcgY3VycmVu
dFdvcmQgPSBwbGFpblRleHQod29yZFJhbmdlLmdldCgpKTsKKyAgICAgICAgaWYgKCFjdXJyZW50
V29yZC5sZW5ndGgoKSkKKyAgICAgICAgICAgIGNvbnRpbnVlOworCisgICAgICAgIG1fY29ycmVj
dGlvblBhbmVsSW5mby5yYW5nZVRvQmVSZXBsYWNlZCA9IHdvcmRSYW5nZTsKKyAgICAgICAgbV9j
b3JyZWN0aW9uUGFuZWxJbmZvLnJlcGxhY2VkU3RyaW5nID0gY3VycmVudFdvcmQ7CisgICAgICAg
IGlmIChtYXJrZXItPnR5cGUoKSA9PSBEb2N1bWVudE1hcmtlcjo6U3BlbGxpbmcpCisgICAgICAg
ICAgICBzdGFydENvcnJlY3Rpb25QYW5lbFRpbWVyKENvcnJlY3Rpb25QYW5lbEluZm86OlBhbmVs
VHlwZVNwZWxsaW5nU3VnZ2VzdGlvbnMpOworICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgIG1f
Y29ycmVjdGlvblBhbmVsSW5mby5yZXBsYWNlbWVudFN0cmluZyA9IG1hcmtlci0+ZGVzY3JpcHRp
b24oKTsKKyAgICAgICAgICAgIHN0YXJ0Q29ycmVjdGlvblBhbmVsVGltZXIoQ29ycmVjdGlvblBh
bmVsSW5mbzo6UGFuZWxUeXBlUmV2ZXJzaW9uKTsKKyAgICAgICAgfQorCisgICAgICAgIGJyZWFr
OworICAgIH0KK30KKwordm9pZCBTcGVsbGluZ0NvcnJlY3Rpb25Db250cm9sbGVyOjpyZXNwb25k
VG9BcHBsaWVkRWRpdGluZyhDb21wb3NpdGVFZGl0Q29tbWFuZCogY29tbWFuZCkKK3sKKyAgICBp
ZiAoY29tbWFuZC0+aXNUb3BMZXZlbENvbW1hbmQoKSAmJiAhY29tbWFuZC0+c2hvdWxkUmV0YWlu
QXV0b2NvcnJlY3Rpb25JbmRpY2F0b3IoKSkKKyAgICAgICAgbV9mcmFtZS0+ZG9jdW1lbnQoKS0+
bWFya2VycygpLT5yZW1vdmVNYXJrZXJzKERvY3VtZW50TWFya2VyOjpDb3JyZWN0aW9uSW5kaWNh
dG9yKTsKKworICAgIG1hcmtQcmVjZWRpbmdXaGl0ZXNwYWNlRm9yRGVsZXRlZEF1dG9jb3JyZWN0
aW9uQWZ0ZXJDb21tYW5kKGNvbW1hbmQpOworICAgIG1fb3JpZ2luYWxTdHJpbmdGb3JMYXN0RGVs
ZXRlZEF1dG9jb3JyZWN0aW9uID0gU3RyaW5nKCk7Cit9CisKK3ZvaWQgU3BlbGxpbmdDb3JyZWN0
aW9uQ29udHJvbGxlcjo6cmVzcG9uZFRvVW5hcHBsaWVkRWRpdGluZyhFZGl0Q29tbWFuZENvbXBv
c2l0aW9uKiBjb21tYW5kKQoreworICAgIGlmICghY29tbWFuZC0+d2FzQ3JlYXRlTGlua0NvbW1h
bmQoKSkKKyAgICAgICAgcmV0dXJuOworICAgIFJlZlB0cjxSYW5nZT4gcmFuZ2UgPSBSYW5nZTo6
Y3JlYXRlKG1fZnJhbWUtPmRvY3VtZW50KCksIGNvbW1hbmQtPnN0YXJ0aW5nU2VsZWN0aW9uKCku
c3RhcnQoKSwgY29tbWFuZC0+c3RhcnRpbmdTZWxlY3Rpb24oKS5lbmQoKSk7CisgICAgaWYgKCFy
YW5nZSkKKyAgICAgICAgcmV0dXJuOworICAgIERvY3VtZW50TWFya2VyQ29udHJvbGxlciogbWFy
a2VycyA9IG1fZnJhbWUtPmRvY3VtZW50KCktPm1hcmtlcnMoKTsKKyAgICBtYXJrZXJzLT5hZGRN
YXJrZXIocmFuZ2UuZ2V0KCksIERvY3VtZW50TWFya2VyOjpSZXBsYWNlbWVudCk7CisgICAgbWFy
a2Vycy0+YWRkTWFya2VyKHJhbmdlLmdldCgpLCBEb2N1bWVudE1hcmtlcjo6U3BlbGxDaGVja2lu
Z0V4ZW1wdGlvbik7Cit9CisKK0VkaXRvckNsaWVudCogU3BlbGxpbmdDb3JyZWN0aW9uQ29udHJv
bGxlcjo6Y2xpZW50KCkKK3sKKyAgICByZXR1cm4gbV9mcmFtZS0+cGFnZSgpID8gbV9mcmFtZS0+
cGFnZSgpLT5lZGl0b3JDbGllbnQoKSA6IDA7Cit9CisKK1RleHRDaGVja2VyQ2xpZW50KiBTcGVs
bGluZ0NvcnJlY3Rpb25Db250cm9sbGVyOjp0ZXh0Q2hlY2tlcigpCit7CisgICAgaWYgKEVkaXRv
ckNsaWVudCogb3duZXIgPSBjbGllbnQoKSkKKyAgICAgICAgcmV0dXJuIG93bmVyLT50ZXh0Q2hl
Y2tlcigpOworICAgIHJldHVybiAwOworfQorCit2b2lkIFNwZWxsaW5nQ29ycmVjdGlvbkNvbnRy
b2xsZXI6OnJlY29yZEF1dG9jb3JyZWN0aW9uUmVzcG9uc2VSZXZlcnNlZChjb25zdCBTdHJpbmcm
IHJlcGxhY2VkU3RyaW5nLCBjb25zdCBTdHJpbmcmIHJlcGxhY2VtZW50U3RyaW5nKQoreworICAg
IGNsaWVudCgpLT5yZWNvcmRBdXRvY29ycmVjdGlvblJlc3BvbnNlKEVkaXRvckNsaWVudDo6QXV0
b2NvcnJlY3Rpb25SZXZlcnRlZCwgcmVwbGFjZWRTdHJpbmcsIHJlcGxhY2VtZW50U3RyaW5nKTsK
K30KKwordm9pZCBTcGVsbGluZ0NvcnJlY3Rpb25Db250cm9sbGVyOjpyZWNvcmRBdXRvY29ycmVj
dGlvblJlc3BvbnNlUmV2ZXJzZWQoY29uc3QgU3RyaW5nJiByZXBsYWNlZFN0cmluZywgUGFzc1Jl
ZlB0cjxSYW5nZT4gcmVwbGFjZW1lbnRSYW5nZSkKK3sKKyAgICByZWNvcmRBdXRvY29ycmVjdGlv
blJlc3BvbnNlUmV2ZXJzZWQocmVwbGFjZWRTdHJpbmcsIHBsYWluVGV4dChyZXBsYWNlbWVudFJh
bmdlLmdldCgpKSk7Cit9CisKK3ZvaWQgU3BlbGxpbmdDb3JyZWN0aW9uQ29udHJvbGxlcjo6bWFy
a1JldmVyc2VkKFBhc3NSZWZQdHI8UmFuZ2U+IGNoYW5nZWRSYW5nZSkKK3sKKyAgICBjaGFuZ2Vk
UmFuZ2UtPnN0YXJ0Q29udGFpbmVyKCktPmRvY3VtZW50KCktPm1hcmtlcnMoKS0+cmVtb3ZlTWFy
a2VycyhjaGFuZ2VkUmFuZ2UuZ2V0KCksIERvY3VtZW50TWFya2VyOjpBdXRvY29ycmVjdGVkLCBE
b2N1bWVudE1hcmtlckNvbnRyb2xsZXI6OlJlbW92ZVBhcnRpYWxseU92ZXJsYXBwaW5nTWFya2Vy
KTsKKyAgICBjaGFuZ2VkUmFuZ2UtPnN0YXJ0Q29udGFpbmVyKCktPmRvY3VtZW50KCktPm1hcmtl
cnMoKS0+YWRkTWFya2VyKGNoYW5nZWRSYW5nZS5nZXQoKSwgRG9jdW1lbnRNYXJrZXI6OlNwZWxs
Q2hlY2tpbmdFeGVtcHRpb24pOworfQorCit2b2lkIFNwZWxsaW5nQ29ycmVjdGlvbkNvbnRyb2xs
ZXI6Om1hcmtDb3JyZWN0aW9uKFBhc3NSZWZQdHI8UmFuZ2U+IHJlcGxhY2VkUmFuZ2UsIGNvbnN0
IFN0cmluZyYgcmVwbGFjZWRTdHJpbmcpCit7CisgICAgVmVjdG9yPERvY3VtZW50TWFya2VyOjpN
YXJrZXJUeXBlPiBtYXJrZXJUeXBlc1RvQWRkID0gbWFya2VyVHlwZXNGb3JBdXRvY29ycmVjdGlv
bigpOworICAgIERvY3VtZW50TWFya2VyQ29udHJvbGxlciogbWFya2VycyA9IHJlcGxhY2VkUmFu
Z2UtPnN0YXJ0Q29udGFpbmVyKCktPmRvY3VtZW50KCktPm1hcmtlcnMoKTsKKyAgICBmb3IgKHNp
emVfdCBpID0gMDsgaSA8IG1hcmtlclR5cGVzVG9BZGQuc2l6ZSgpOyArK2kpIHsKKyAgICAgICAg
RG9jdW1lbnRNYXJrZXI6Ok1hcmtlclR5cGUgbWFya2VyVHlwZSA9IG1hcmtlclR5cGVzVG9BZGRb
aV07CisgICAgICAgIGlmIChtYXJrZXJUeXBlID09IERvY3VtZW50TWFya2VyOjpSZXBsYWNlbWVu
dCB8fCBtYXJrZXJUeXBlID09IERvY3VtZW50TWFya2VyOjpBdXRvY29ycmVjdGVkKQorICAgICAg
ICAgICAgbWFya2Vycy0+YWRkTWFya2VyKHJlcGxhY2VkUmFuZ2UuZ2V0KCksIG1hcmtlclR5cGUs
IHJlcGxhY2VkU3RyaW5nKTsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgbWFya2Vycy0+YWRk
TWFya2VyKHJlcGxhY2VkUmFuZ2UuZ2V0KCksIG1hcmtlclR5cGUpOworICAgIH0KK30KKwordm9p
ZCBTcGVsbGluZ0NvcnJlY3Rpb25Db250cm9sbGVyOjpyZWNvcmRTcGVsbGNoZWNrZXJSZXNwb25z
ZUZvck1vZGlmaWVkQ29ycmVjdGlvbihSYW5nZSogcmFuZ2VPZkNvcnJlY3Rpb24sIGNvbnN0IFN0
cmluZyYgY29ycmVjdGVkLCBjb25zdCBTdHJpbmcmIGNvcnJlY3Rpb24pCit7CisgICAgaWYgKCFy
YW5nZU9mQ29ycmVjdGlvbikKKyAgICAgICAgcmV0dXJuOworICAgIERvY3VtZW50TWFya2VyQ29u
dHJvbGxlciogbWFya2VycyA9IHJhbmdlT2ZDb3JyZWN0aW9uLT5zdGFydENvbnRhaW5lcigpLT5k
b2N1bWVudCgpLT5tYXJrZXJzKCk7CisgICAgVmVjdG9yPERvY3VtZW50TWFya2VyKj4gY29ycmVj
dGVkT25jZU1hcmtlcnMgPSBtYXJrZXJzLT5tYXJrZXJzSW5SYW5nZShyYW5nZU9mQ29ycmVjdGlv
biwgRG9jdW1lbnRNYXJrZXI6OkF1dG9jb3JyZWN0ZWQpOworICAgIGlmIChjb3JyZWN0ZWRPbmNl
TWFya2Vycy5pc0VtcHR5KCkpCisgICAgICAgIHJldHVybjsKKyAgICAKKyAgICAvLyBTcGVsbGlu
ZyBjb3JyZWN0ZWQgdGV4dCBoYXMgYmVlbiBlZGl0ZWQuIFdlIG5lZWQgdG8gZGV0ZXJtaW5lIHdo
ZXRoZXIgdXNlciBoYXMgcmV2ZXJ0ZWQgaXQgdG8gb3JpZ2luYWwgdGV4dCBvcgorICAgIC8vIGVk
aXRlZCBpdCB0byBzb21ldGhpbmcgZWxzZSwgYW5kIG5vdGlmeSBzcGVsbGNoZWNrZXIgYWNjb3Jk
aW5nbHkuCisgICAgaWYgKG1hcmtlcnNIYXZlSWRlbnRpY2FsRGVzY3JpcHRpb24oY29ycmVjdGVk
T25jZU1hcmtlcnMpICYmIGNvcnJlY3RlZE9uY2VNYXJrZXJzWzBdLT5kZXNjcmlwdGlvbigpID09
IGNvcnJlY3RlZCkKKyAgICAgICAgY2xpZW50KCktPnJlY29yZEF1dG9jb3JyZWN0aW9uUmVzcG9u
c2UoRWRpdG9yQ2xpZW50OjpBdXRvY29ycmVjdGlvblJldmVydGVkLCBjb3JyZWN0ZWQsIGNvcnJl
Y3Rpb24pOworICAgIGVsc2UKKyAgICAgICAgY2xpZW50KCktPnJlY29yZEF1dG9jb3JyZWN0aW9u
UmVzcG9uc2UoRWRpdG9yQ2xpZW50OjpBdXRvY29ycmVjdGlvbkVkaXRlZCwgY29ycmVjdGVkLCBj
b3JyZWN0aW9uKTsKKyAgICBtYXJrZXJzLT5yZW1vdmVNYXJrZXJzKHJhbmdlT2ZDb3JyZWN0aW9u
LCBEb2N1bWVudE1hcmtlcjo6QXV0b2NvcnJlY3RlZCwgRG9jdW1lbnRNYXJrZXJDb250cm9sbGVy
OjpSZW1vdmVQYXJ0aWFsbHlPdmVybGFwcGluZ01hcmtlcik7Cit9CisKK3ZvaWQgU3BlbGxpbmdD
b3JyZWN0aW9uQ29udHJvbGxlcjo6ZGVsZXRlZEF1dG9jb3JyZWN0aW9uQXRQb3NpdGlvbihjb25z
dCBQb3NpdGlvbiYgcG9zaXRpb24sIGNvbnN0IFN0cmluZyYgb3JpZ2luYWxTdHJpbmcpCit7Cisg
ICAgbV9vcmlnaW5hbFN0cmluZ0Zvckxhc3REZWxldGVkQXV0b2NvcnJlY3Rpb24gPSBvcmlnaW5h
bFN0cmluZzsKKyAgICBtX3Bvc2l0aW9uRm9yTGFzdERlbGV0ZWRBdXRvY29ycmVjdGlvbiA9IHBv
c2l0aW9uOworfQorCit2b2lkIFNwZWxsaW5nQ29ycmVjdGlvbkNvbnRyb2xsZXI6Om1hcmtQcmVj
ZWRpbmdXaGl0ZXNwYWNlRm9yRGVsZXRlZEF1dG9jb3JyZWN0aW9uQWZ0ZXJDb21tYW5kKEVkaXRD
b21tYW5kKiBjb21tYW5kKQoreworICAgIFBvc2l0aW9uIGVuZE9mU2VsZWN0aW9uID0gY29tbWFu
ZC0+ZW5kaW5nU2VsZWN0aW9uKCkuZW5kKCk7CisgICAgaWYgKGVuZE9mU2VsZWN0aW9uICE9IG1f
cG9zaXRpb25Gb3JMYXN0RGVsZXRlZEF1dG9jb3JyZWN0aW9uKQorICAgICAgICByZXR1cm47CisK
KyAgICBQb3NpdGlvbiBwcmVjZWRpbmdDaGFyYWN0ZXJQb3NpdGlvbiA9IGVuZE9mU2VsZWN0aW9u
LnByZXZpb3VzKCk7CisgICAgaWYgKGVuZE9mU2VsZWN0aW9uID09IHByZWNlZGluZ0NoYXJhY3Rl
clBvc2l0aW9uKQorICAgICAgICByZXR1cm47CisKKyAgICBSZWZQdHI8UmFuZ2U+IHByZWNlZGlu
Z0NoYXJhY3RlclJhbmdlID0gUmFuZ2U6OmNyZWF0ZShtX2ZyYW1lLT5kb2N1bWVudCgpLCBwcmVj
ZWRpbmdDaGFyYWN0ZXJQb3NpdGlvbiwgZW5kT2ZTZWxlY3Rpb24pOworICAgIFN0cmluZyBzdHJp
bmcgPSBwbGFpblRleHQocHJlY2VkaW5nQ2hhcmFjdGVyUmFuZ2UuZ2V0KCkpOworICAgIGlmIChz
dHJpbmcuaXNFbXB0eSgpIHx8ICFpc1doaXRlc3BhY2Uoc3RyaW5nW3N0cmluZy5sZW5ndGgoKSAt
IDFdKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgLy8gTWFyayB0aGlzIHdoaXRlc3BhY2UgdG8g
aW5kaWNhdGUgd2UgaGF2ZSBkZWxldGVkIGFuIGF1dG9jb3JyZWN0aW9uIGZvbGxvd2luZyB0aGlz
CisgICAgLy8gd2hpdGVzcGFjZS4gU28gaWYgdGhlIHVzZXIgdHlwZXMgdGhlIHNhbWUgb3JpZ2lu
YWwgd29yZCBhZ2FpbiBhdCB0aGlzIHBvc2l0aW9uLCB3ZQorICAgIC8vIHdvbid0IGF1dG9jb3Jy
ZWN0IGl0IGFnYWluLgorICAgIG1fZnJhbWUtPmRvY3VtZW50KCktPm1hcmtlcnMoKS0+YWRkTWFy
a2VyKHByZWNlZGluZ0NoYXJhY3RlclJhbmdlLmdldCgpLCBEb2N1bWVudE1hcmtlcjo6RGVsZXRl
ZEF1dG9jb3JyZWN0aW9uLCBtX29yaWdpbmFsU3RyaW5nRm9yTGFzdERlbGV0ZWRBdXRvY29ycmVj
dGlvbik7Cit9CisKK2Jvb2wgU3BlbGxpbmdDb3JyZWN0aW9uQ29udHJvbGxlcjo6cHJvY2Vzc01h
cmtlcnNPblRleHRUb0JlUmVwbGFjZWRCeVJlc3VsdChjb25zdCBUZXh0Q2hlY2tpbmdSZXN1bHQq
IHJlc3VsdCwgUmFuZ2UqIHJhbmdlVG9CZVJlcGxhY2VkLCBjb25zdCBTdHJpbmcmIHN0cmluZ1Rv
QmVSZXBsYWNlZCkKK3sKKyAgICBEb2N1bWVudE1hcmtlckNvbnRyb2xsZXIqIG1hcmtlckNvbnRy
b2xsZXIgPSBtX2ZyYW1lLT5kb2N1bWVudCgpLT5tYXJrZXJzKCk7CisgICAgaWYgKG1hcmtlckNv
bnRyb2xsZXItPmhhc01hcmtlcnMocmFuZ2VUb0JlUmVwbGFjZWQsIERvY3VtZW50TWFya2VyOjpS
ZXBsYWNlbWVudCkpIHsKKyAgICAgICAgaWYgKHJlc3VsdC0+dHlwZSA9PSBUZXh0Q2hlY2tpbmdU
eXBlQ29ycmVjdGlvbikKKyAgICAgICAgICAgIHJlY29yZFNwZWxsY2hlY2tlclJlc3BvbnNlRm9y
TW9kaWZpZWRDb3JyZWN0aW9uKHJhbmdlVG9CZVJlcGxhY2VkLCBzdHJpbmdUb0JlUmVwbGFjZWQs
IHJlc3VsdC0+cmVwbGFjZW1lbnQpOworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorCisg
ICAgaWYgKG1hcmtlckNvbnRyb2xsZXItPmhhc01hcmtlcnMocmFuZ2VUb0JlUmVwbGFjZWQsIERv
Y3VtZW50TWFya2VyOjpSZWplY3RlZENvcnJlY3Rpb24pKQorICAgICAgICByZXR1cm4gZmFsc2U7
CisKKyAgICBQb3NpdGlvbiBiZWdpbm5pbmdPZlJhbmdlID0gcmFuZ2VUb0JlUmVwbGFjZWQtPnN0
YXJ0UG9zaXRpb24oKTsKKyAgICBQb3NpdGlvbiBwcmVjZWRpbmdDaGFyYWN0ZXJQb3NpdGlvbiA9
IGJlZ2lubmluZ09mUmFuZ2UucHJldmlvdXMoKTsKKyAgICBSZWZQdHI8UmFuZ2U+IHByZWNlZGlu
Z0NoYXJhY3RlclJhbmdlID0gUmFuZ2U6OmNyZWF0ZShtX2ZyYW1lLT5kb2N1bWVudCgpLCBwcmVj
ZWRpbmdDaGFyYWN0ZXJQb3NpdGlvbiwgYmVnaW5uaW5nT2ZSYW5nZSk7CisKKyAgICBWZWN0b3I8
RG9jdW1lbnRNYXJrZXIqPiBtYXJrZXJzID0gbWFya2VyQ29udHJvbGxlci0+bWFya2Vyc0luUmFu
Z2UocHJlY2VkaW5nQ2hhcmFjdGVyUmFuZ2UuZ2V0KCksIERvY3VtZW50TWFya2VyOjpEZWxldGVk
QXV0b2NvcnJlY3Rpb24pOworCisgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBtYXJrZXJzLnNp
emUoKTsgKytpKSB7CisgICAgICAgIGlmIChtYXJrZXJzW2ldLT5kZXNjcmlwdGlvbigpID09IHN0
cmluZ1RvQmVSZXBsYWNlZCkKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisKKyAg
ICByZXR1cm4gdHJ1ZTsKK30KKyAgICAKKyNlbmRpZgorCit9IC8vIG5hbWVzcGFjZSBXZWJDb3Jl
CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0FsdGVybmF0aXZlVGV4dENvbnRyb2xsZXIu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2VkaXRpbmcvQWx0ZXJuYXRpdmVUZXh0
Q29udHJvbGxlci5jcHAJKHJldmlzaW9uIDExMjgzMCkKKysrIFNvdXJjZS9XZWJDb3JlL2VkaXRp
bmcvQWx0ZXJuYXRpdmVUZXh0Q29udHJvbGxlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI1LDcg
KzI1LDcgQEAKICAqLwogCiAjaW5jbHVkZSAiY29uZmlnLmgiCi0jaW5jbHVkZSAiU3BlbGxpbmdD
b3JyZWN0aW9uQ29udHJvbGxlci5oIgorI2luY2x1ZGUgIkFsdGVybmF0aXZlVGV4dENvbnRyb2xs
ZXIuaCIKIAogI2luY2x1ZGUgIkRvY3VtZW50TWFya2VyQ29udHJvbGxlci5oIgogI2luY2x1ZGUg
IkVkaXRDb21tYW5kLmgiCkBAIC00OCw2ICs0OCwyMiBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiB1
c2luZyBuYW1lc3BhY2Ugc3RkOwogdXNpbmcgbmFtZXNwYWNlIFdURjsKIAorY2xhc3MgQXV0b2Nv
cnJlY3Rpb25BbHRlcm5hdGl2ZURldGFpbHMgOiBwdWJsaWMgQWx0ZXJuYXRpdmVUZXh0RGV0YWls
cyB7CitwdWJsaWM6CisgICAgc3RhdGljIFBhc3NSZWZQdHI8QXV0b2NvcnJlY3Rpb25BbHRlcm5h
dGl2ZURldGFpbHM+IGNyZWF0ZShjb25zdCBTdHJpbmcmIHJlcGxhY2VtZW50U3RyaW5nKQorICAg
IHsKKyAgICAgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBBdXRvY29ycmVjdGlvbkFsdGVybmF0aXZl
RGV0YWlscyhyZXBsYWNlbWVudFN0cmluZykpOworICAgIH0KKyAgICAKKyAgICBjb25zdCBTdHJp
bmcmIHJlcGxhY2VtZW50U3RyaW5nKCkgY29uc3QgeyByZXR1cm4gbV9yZXBsYWNlbWVudFN0cmlu
ZzsgfQorcHJpdmF0ZToKKyAgICBBdXRvY29ycmVjdGlvbkFsdGVybmF0aXZlRGV0YWlscyhjb25z
dCBTdHJpbmcmIHJlcGxhY2VtZW50U3RyaW5nKQorICAgIDogbV9yZXBsYWNlbWVudFN0cmluZyhy
ZXBsYWNlbWVudFN0cmluZykKKyAgICB7IH0KKyAgICAKKyAgICBTdHJpbmcgbV9yZXBsYWNlbWVu
dFN0cmluZzsKK307CisKICNpZiBVU0UoQVVUT0NPUlJFQ1RJT05fUEFORUwpCiAKIHN0YXRpYyBj
b25zdCBWZWN0b3I8RG9jdW1lbnRNYXJrZXI6Ok1hcmtlclR5cGU+JiBtYXJrZXJUeXBlc0ZvckF1
dG9jb3JyZWN0aW9uKCkKQEAgLTg1LDQ4ICsxMDEsNDggQEAgc3RhdGljIGJvb2wgbWFya2Vyc0hh
dmVJZGVudGljYWxEZXNjcmlwdAogICAgIHJldHVybiB0cnVlOwogfQogCi1TcGVsbGluZ0NvcnJl
Y3Rpb25Db250cm9sbGVyOjpTcGVsbGluZ0NvcnJlY3Rpb25Db250cm9sbGVyKEZyYW1lKiBmcmFt
ZSkKK0FsdGVybmF0aXZlVGV4dENvbnRyb2xsZXI6OkFsdGVybmF0aXZlVGV4dENvbnRyb2xsZXIo
RnJhbWUqIGZyYW1lKQogICAgIDogbV9mcmFtZShmcmFtZSkKLSAgICAsIG1fY29ycmVjdGlvblBh
bmVsVGltZXIodGhpcywgJlNwZWxsaW5nQ29ycmVjdGlvbkNvbnRyb2xsZXI6OmNvcnJlY3Rpb25Q
YW5lbFRpbWVyRmlyZWQpCisgICAgLCBtX3RpbWVyKHRoaXMsICZBbHRlcm5hdGl2ZVRleHRDb250
cm9sbGVyOjp0aW1lckZpcmVkKQogewogfQogCi1TcGVsbGluZ0NvcnJlY3Rpb25Db250cm9sbGVy
Ojp+U3BlbGxpbmdDb3JyZWN0aW9uQ29udHJvbGxlcigpCitBbHRlcm5hdGl2ZVRleHRDb250cm9s
bGVyOjp+QWx0ZXJuYXRpdmVUZXh0Q29udHJvbGxlcigpCiB7Ci0gICAgZGlzbWlzcyhSZWFzb25G
b3JEaXNtaXNzaW5nQ29ycmVjdGlvblBhbmVsSWdub3JlZCk7CisgICAgZGlzbWlzcyhSZWFzb25G
b3JEaXNtaXNzaW5nQWx0ZXJuYXRpdmVUZXh0SWdub3JlZCk7CiB9CiAKLXZvaWQgU3BlbGxpbmdD
b3JyZWN0aW9uQ29udHJvbGxlcjo6c3RhcnRDb3JyZWN0aW9uUGFuZWxUaW1lcihDb3JyZWN0aW9u
UGFuZWxJbmZvOjpQYW5lbFR5cGUgdHlwZSkKK3ZvaWQgQWx0ZXJuYXRpdmVUZXh0Q29udHJvbGxl
cjo6c3RhcnRBbHRlcm5hdGl2ZVRleHRVSVRpbWVyKEFsdGVybmF0aXZlVGV4dFR5cGUgdHlwZSkK
IHsKICAgICBjb25zdCBkb3VibGUgY29ycmVjdGlvblBhbmVsVGltZXJJbnRlcnZhbCA9IDAuMzsK
ICAgICBpZiAoIWlzQXV0b21hdGljU3BlbGxpbmdDb3JyZWN0aW9uRW5hYmxlZCgpKQogICAgICAg
ICByZXR1cm47CiAKICAgICAvLyBJZiB0eXBlIGlzIFBhbmVsVHlwZVJldmVyc2lvbiwgdGhlbiB0
aGUgbmV3IHJhbmdlIGhhcyBiZWVuIHNldC4gU28gd2Ugc2hvdWxkbid0IGNsZWFyIGl0LgotICAg
IGlmICh0eXBlID09IENvcnJlY3Rpb25QYW5lbEluZm86OlBhbmVsVHlwZUNvcnJlY3Rpb24pCi0g
ICAgICAgIG1fY29ycmVjdGlvblBhbmVsSW5mby5yYW5nZVRvQmVSZXBsYWNlZC5jbGVhcigpOwot
ICAgIG1fY29ycmVjdGlvblBhbmVsSW5mby5wYW5lbFR5cGUgPSB0eXBlOwotICAgIG1fY29ycmVj
dGlvblBhbmVsVGltZXIuc3RhcnRPbmVTaG90KGNvcnJlY3Rpb25QYW5lbFRpbWVySW50ZXJ2YWwp
OworICAgIGlmICh0eXBlID09IEFsdGVybmF0aXZlVGV4dFR5cGVDb3JyZWN0aW9uKQorICAgICAg
ICBtX2FsdGVybmF0aXZlVGV4dEluZm8ucmFuZ2VXaXRoQWx0ZXJuYXRpdmUuY2xlYXIoKTsKKyAg
ICBtX2FsdGVybmF0aXZlVGV4dEluZm8udHlwZSA9IHR5cGU7CisgICAgbV90aW1lci5zdGFydE9u
ZVNob3QoY29ycmVjdGlvblBhbmVsVGltZXJJbnRlcnZhbCk7CiB9CiAKLXZvaWQgU3BlbGxpbmdD
b3JyZWN0aW9uQ29udHJvbGxlcjo6c3RvcENvcnJlY3Rpb25QYW5lbFRpbWVyKCkKK3ZvaWQgQWx0
ZXJuYXRpdmVUZXh0Q29udHJvbGxlcjo6c3RvcEFsdGVybmF0aXZlVGV4dFVJVGltZXIoKQogewot
ICAgIG1fY29ycmVjdGlvblBhbmVsVGltZXIuc3RvcCgpOwotICAgIG1fY29ycmVjdGlvblBhbmVs
SW5mby5yYW5nZVRvQmVSZXBsYWNlZC5jbGVhcigpOworICAgIG1fdGltZXIuc3RvcCgpOworICAg
IG1fYWx0ZXJuYXRpdmVUZXh0SW5mby5yYW5nZVdpdGhBbHRlcm5hdGl2ZS5jbGVhcigpOwogfQog
Ci12b2lkIFNwZWxsaW5nQ29ycmVjdGlvbkNvbnRyb2xsZXI6OnN0b3BQZW5kaW5nQ29ycmVjdGlv
bihjb25zdCBWaXNpYmxlU2VsZWN0aW9uJiBvbGRTZWxlY3Rpb24pCit2b2lkIEFsdGVybmF0aXZl
VGV4dENvbnRyb2xsZXI6OnN0b3BQZW5kaW5nQ29ycmVjdGlvbihjb25zdCBWaXNpYmxlU2VsZWN0
aW9uJiBvbGRTZWxlY3Rpb24pCiB7CiAgICAgLy8gTWFrZSBzdXJlIHRoZXJlJ3Mgbm8gcGVuZGlu
ZyBhdXRvY29ycmVjdGlvbiBiZWZvcmUgd2UgY2FsbCBtYXJrTWlzc3BlbGxpbmdzQW5kQmFkR3Jh
bW1hcigpIGJlbG93LgogICAgIFZpc2libGVTZWxlY3Rpb24gY3VycmVudFNlbGVjdGlvbihtX2Zy
YW1lLT5zZWxlY3Rpb24oKS0+c2VsZWN0aW9uKCkpOwogICAgIGlmIChjdXJyZW50U2VsZWN0aW9u
ID09IG9sZFNlbGVjdGlvbikKICAgICAgICAgcmV0dXJuOwogCi0gICAgc3RvcENvcnJlY3Rpb25Q
YW5lbFRpbWVyKCk7Ci0gICAgZGlzbWlzcyhSZWFzb25Gb3JEaXNtaXNzaW5nQ29ycmVjdGlvblBh
bmVsSWdub3JlZCk7CisgICAgc3RvcEFsdGVybmF0aXZlVGV4dFVJVGltZXIoKTsKKyAgICBkaXNt
aXNzKFJlYXNvbkZvckRpc21pc3NpbmdBbHRlcm5hdGl2ZVRleHRJZ25vcmVkKTsKIH0KIAotdm9p
ZCBTcGVsbGluZ0NvcnJlY3Rpb25Db250cm9sbGVyOjphcHBseVBlbmRpbmdDb3JyZWN0aW9uKGNv
bnN0IFZpc2libGVTZWxlY3Rpb24mIHNlbGVjdGlvbkFmdGVyVHlwaW5nKQordm9pZCBBbHRlcm5h
dGl2ZVRleHRDb250cm9sbGVyOjphcHBseVBlbmRpbmdDb3JyZWN0aW9uKGNvbnN0IFZpc2libGVT
ZWxlY3Rpb24mIHNlbGVjdGlvbkFmdGVyVHlwaW5nKQogewogICAgIC8vIEFwcGx5IHBlbmRpbmcg
YXV0b2NvcnJlY3Rpb24gYmVmb3JlIG5leHQgcm91bmQgb2Ygc3BlbGwgY2hlY2tpbmcuCiAgICAg
Ym9vbCBkb0FwcGx5Q29ycmVjdGlvbiA9IHRydWU7CkBAIC0xMzgsODcgKzE1NCw4NyBAQCB2b2lk
IFNwZWxsaW5nQ29ycmVjdGlvbkNvbnRyb2xsZXI6OmFwcGx5CiAgICAgICAgICAgICBkb0FwcGx5
Q29ycmVjdGlvbiA9IGZhbHNlOwogICAgIH0KICAgICBpZiAoZG9BcHBseUNvcnJlY3Rpb24pCi0g
ICAgICAgIGhhbmRsZUNvcnJlY3Rpb25QYW5lbFJlc3VsdChkaXNtaXNzU29vbihSZWFzb25Gb3JE
aXNtaXNzaW5nQ29ycmVjdGlvblBhbmVsQWNjZXB0ZWQpKTsgCisgICAgICAgIGhhbmRsZUFsdGVy
bmF0aXZlVGV4dFVJUmVzdWx0KGRpc21pc3NTb29uKFJlYXNvbkZvckRpc21pc3NpbmdBbHRlcm5h
dGl2ZVRleHRBY2NlcHRlZCkpOyAKICAgICBlbHNlCi0gICAgICAgIG1fY29ycmVjdGlvblBhbmVs
SW5mby5yYW5nZVRvQmVSZXBsYWNlZC5jbGVhcigpOworICAgICAgICBtX2FsdGVybmF0aXZlVGV4
dEluZm8ucmFuZ2VXaXRoQWx0ZXJuYXRpdmUuY2xlYXIoKTsKIH0KIAotYm9vbCBTcGVsbGluZ0Nv
cnJlY3Rpb25Db250cm9sbGVyOjpoYXNQZW5kaW5nQ29ycmVjdGlvbigpIGNvbnN0Citib29sIEFs
dGVybmF0aXZlVGV4dENvbnRyb2xsZXI6Omhhc1BlbmRpbmdDb3JyZWN0aW9uKCkgY29uc3QKIHsK
LSAgICByZXR1cm4gbV9jb3JyZWN0aW9uUGFuZWxJbmZvLnJhbmdlVG9CZVJlcGxhY2VkOworICAg
IHJldHVybiBtX2FsdGVybmF0aXZlVGV4dEluZm8ucmFuZ2VXaXRoQWx0ZXJuYXRpdmU7CiB9CiAK
LWJvb2wgU3BlbGxpbmdDb3JyZWN0aW9uQ29udHJvbGxlcjo6aXNTcGVsbGluZ01hcmtlckFsbG93
ZWQoUGFzc1JlZlB0cjxSYW5nZT4gbWlzc3BlbGxpbmdSYW5nZSkgY29uc3QKK2Jvb2wgQWx0ZXJu
YXRpdmVUZXh0Q29udHJvbGxlcjo6aXNTcGVsbGluZ01hcmtlckFsbG93ZWQoUGFzc1JlZlB0cjxS
YW5nZT4gbWlzc3BlbGxpbmdSYW5nZSkgY29uc3QKIHsKICAgICByZXR1cm4gIW1fZnJhbWUtPmRv
Y3VtZW50KCktPm1hcmtlcnMoKS0+aGFzTWFya2VycyhtaXNzcGVsbGluZ1JhbmdlLmdldCgpLCBE
b2N1bWVudE1hcmtlcjo6U3BlbGxDaGVja2luZ0V4ZW1wdGlvbik7CiB9CiAKLXZvaWQgU3BlbGxp
bmdDb3JyZWN0aW9uQ29udHJvbGxlcjo6c2hvdyhQYXNzUmVmUHRyPFJhbmdlPiByYW5nZVRvUmVw
bGFjZSwgY29uc3QgU3RyaW5nJiByZXBsYWNlbWVudCkKK3ZvaWQgQWx0ZXJuYXRpdmVUZXh0Q29u
dHJvbGxlcjo6c2hvdyhQYXNzUmVmUHRyPFJhbmdlPiByYW5nZVRvUmVwbGFjZSwgY29uc3QgU3Ry
aW5nJiByZXBsYWNlbWVudCkKIHsKICAgICBGbG9hdFJlY3QgYm91bmRpbmdCb3ggPSByb290Vmll
d1JlY3RGb3JSYW5nZShyYW5nZVRvUmVwbGFjZS5nZXQoKSk7CiAgICAgaWYgKGJvdW5kaW5nQm94
LmlzRW1wdHkoKSkKICAgICAgICAgcmV0dXJuOwotICAgIG1fY29ycmVjdGlvblBhbmVsSW5mby5y
ZXBsYWNlZFN0cmluZyA9IHBsYWluVGV4dChyYW5nZVRvUmVwbGFjZS5nZXQoKSk7Ci0gICAgbV9j
b3JyZWN0aW9uUGFuZWxJbmZvLnJhbmdlVG9CZVJlcGxhY2VkID0gcmFuZ2VUb1JlcGxhY2U7Ci0g
ICAgbV9jb3JyZWN0aW9uUGFuZWxJbmZvLnJlcGxhY2VtZW50U3RyaW5nID0gcmVwbGFjZW1lbnQ7
Ci0gICAgbV9jb3JyZWN0aW9uUGFuZWxJbmZvLmlzQWN0aXZlID0gdHJ1ZTsKLSAgICBjbGllbnQo
KS0+c2hvd0NvcnJlY3Rpb25QYW5lbChtX2NvcnJlY3Rpb25QYW5lbEluZm8ucGFuZWxUeXBlLCBi
b3VuZGluZ0JveCwgbV9jb3JyZWN0aW9uUGFuZWxJbmZvLnJlcGxhY2VkU3RyaW5nLCByZXBsYWNl
bWVudCwgVmVjdG9yPFN0cmluZz4oKSk7CisgICAgbV9hbHRlcm5hdGl2ZVRleHRJbmZvLm9yaWdp
bmFsVGV4dCA9IHBsYWluVGV4dChyYW5nZVRvUmVwbGFjZS5nZXQoKSk7CisgICAgbV9hbHRlcm5h
dGl2ZVRleHRJbmZvLnJhbmdlV2l0aEFsdGVybmF0aXZlID0gcmFuZ2VUb1JlcGxhY2U7CisgICAg
bV9hbHRlcm5hdGl2ZVRleHRJbmZvLmRldGFpbHMgPSBBdXRvY29ycmVjdGlvbkFsdGVybmF0aXZl
RGV0YWlsczo6Y3JlYXRlKHJlcGxhY2VtZW50KTsKKyAgICBtX2FsdGVybmF0aXZlVGV4dEluZm8u
aXNBY3RpdmUgPSB0cnVlOworICAgIGNsaWVudCgpLT5zaG93Q29ycmVjdGlvblBhbmVsKG1fYWx0
ZXJuYXRpdmVUZXh0SW5mby50eXBlLCBib3VuZGluZ0JveCwgbV9hbHRlcm5hdGl2ZVRleHRJbmZv
Lm9yaWdpbmFsVGV4dCwgcmVwbGFjZW1lbnQsIFZlY3RvcjxTdHJpbmc+KCkpOwogfQogCi12b2lk
IFNwZWxsaW5nQ29ycmVjdGlvbkNvbnRyb2xsZXI6OmhhbmRsZUNhbmNlbE9wZXJhdGlvbigpCit2
b2lkIEFsdGVybmF0aXZlVGV4dENvbnRyb2xsZXI6OmhhbmRsZUNhbmNlbE9wZXJhdGlvbigpCiB7
Ci0gICAgaWYgKCFtX2NvcnJlY3Rpb25QYW5lbEluZm8uaXNBY3RpdmUpCisgICAgaWYgKCFtX2Fs
dGVybmF0aXZlVGV4dEluZm8uaXNBY3RpdmUpCiAgICAgICAgIHJldHVybjsKLSAgICBtX2NvcnJl
Y3Rpb25QYW5lbEluZm8uaXNBY3RpdmUgPSBmYWxzZTsKLSAgICBkaXNtaXNzKFJlYXNvbkZvckRp
c21pc3NpbmdDb3JyZWN0aW9uUGFuZWxDYW5jZWxsZWQpOworICAgIG1fYWx0ZXJuYXRpdmVUZXh0
SW5mby5pc0FjdGl2ZSA9IGZhbHNlOworICAgIGRpc21pc3MoUmVhc29uRm9yRGlzbWlzc2luZ0Fs
dGVybmF0aXZlVGV4dENhbmNlbGxlZCk7CiB9CiAKLXZvaWQgU3BlbGxpbmdDb3JyZWN0aW9uQ29u
dHJvbGxlcjo6ZGlzbWlzcyhSZWFzb25Gb3JEaXNtaXNzaW5nQ29ycmVjdGlvblBhbmVsIHJlYXNv
bkZvckRpc21pc3NpbmcpCit2b2lkIEFsdGVybmF0aXZlVGV4dENvbnRyb2xsZXI6OmRpc21pc3Mo
UmVhc29uRm9yRGlzbWlzc2luZ0FsdGVybmF0aXZlVGV4dCByZWFzb25Gb3JEaXNtaXNzaW5nKQog
ewotICAgIGlmICghbV9jb3JyZWN0aW9uUGFuZWxJbmZvLmlzQWN0aXZlKQorICAgIGlmICghbV9h
bHRlcm5hdGl2ZVRleHRJbmZvLmlzQWN0aXZlKQogICAgICAgICByZXR1cm47Ci0gICAgbV9jb3Jy
ZWN0aW9uUGFuZWxJbmZvLmlzQWN0aXZlID0gZmFsc2U7Ci0gICAgbV9jb3JyZWN0aW9uUGFuZWxJ
c0Rpc21pc3NlZEJ5RWRpdG9yID0gdHJ1ZTsKKyAgICBtX2FsdGVybmF0aXZlVGV4dEluZm8uaXNB
Y3RpdmUgPSBmYWxzZTsKKyAgICBtX2lzRGlzbWlzc2VkQnlFZGl0aW5nID0gdHJ1ZTsKICAgICBp
ZiAoY2xpZW50KCkpCiAgICAgICAgIGNsaWVudCgpLT5kaXNtaXNzQ29ycmVjdGlvblBhbmVsKHJl
YXNvbkZvckRpc21pc3NpbmcpOwogfQogCi1TdHJpbmcgU3BlbGxpbmdDb3JyZWN0aW9uQ29udHJv
bGxlcjo6ZGlzbWlzc1Nvb24oUmVhc29uRm9yRGlzbWlzc2luZ0NvcnJlY3Rpb25QYW5lbCByZWFz
b25Gb3JEaXNtaXNzaW5nKQorU3RyaW5nIEFsdGVybmF0aXZlVGV4dENvbnRyb2xsZXI6OmRpc21p
c3NTb29uKFJlYXNvbkZvckRpc21pc3NpbmdBbHRlcm5hdGl2ZVRleHQgcmVhc29uRm9yRGlzbWlz
c2luZykKIHsKLSAgICBpZiAoIW1fY29ycmVjdGlvblBhbmVsSW5mby5pc0FjdGl2ZSkKKyAgICBp
ZiAoIW1fYWx0ZXJuYXRpdmVUZXh0SW5mby5pc0FjdGl2ZSkKICAgICAgICAgcmV0dXJuIFN0cmlu
ZygpOwotICAgIG1fY29ycmVjdGlvblBhbmVsSW5mby5pc0FjdGl2ZSA9IGZhbHNlOwotICAgIG1f
Y29ycmVjdGlvblBhbmVsSXNEaXNtaXNzZWRCeUVkaXRvciA9IHRydWU7CisgICAgbV9hbHRlcm5h
dGl2ZVRleHRJbmZvLmlzQWN0aXZlID0gZmFsc2U7CisgICAgbV9pc0Rpc21pc3NlZEJ5RWRpdGlu
ZyA9IHRydWU7CiAgICAgaWYgKCFjbGllbnQoKSkKICAgICAgICAgcmV0dXJuIFN0cmluZygpOwog
ICAgIHJldHVybiBjbGllbnQoKS0+ZGlzbWlzc0NvcnJlY3Rpb25QYW5lbFNvb24ocmVhc29uRm9y
RGlzbWlzc2luZyk7CiB9CiAKLXZvaWQgU3BlbGxpbmdDb3JyZWN0aW9uQ29udHJvbGxlcjo6YXBw
bHlDb3JyZWN0aW9uUGFuZWxJbmZvKGNvbnN0IFZlY3RvcjxEb2N1bWVudE1hcmtlcjo6TWFya2Vy
VHlwZT4mIG1hcmtlclR5cGVzVG9BZGQpCit2b2lkIEFsdGVybmF0aXZlVGV4dENvbnRyb2xsZXI6
OmFwcGx5QWx0ZXJuYXRpdmVUZXh0KGNvbnN0IFN0cmluZyYgYWx0ZXJuYXRpdmUsIGNvbnN0IFZl
Y3RvcjxEb2N1bWVudE1hcmtlcjo6TWFya2VyVHlwZT4mIG1hcmtlclR5cGVzVG9BZGQpCiB7Ci0g
ICAgaWYgKCFtX2NvcnJlY3Rpb25QYW5lbEluZm8ucmFuZ2VUb0JlUmVwbGFjZWQpCisgICAgaWYg
KCFtX2FsdGVybmF0aXZlVGV4dEluZm8ucmFuZ2VXaXRoQWx0ZXJuYXRpdmUpCiAgICAgICAgIHJl
dHVybjsKIAogICAgIEV4Y2VwdGlvbkNvZGUgZWMgPSAwOwotICAgIFJlZlB0cjxSYW5nZT4gcGFy
YWdyYXBoUmFuZ2VDb250YWluaW5nQ29ycmVjdGlvbiA9IG1fY29ycmVjdGlvblBhbmVsSW5mby5y
YW5nZVRvQmVSZXBsYWNlZC0+Y2xvbmVSYW5nZShlYyk7CisgICAgUmVmUHRyPFJhbmdlPiBwYXJh
Z3JhcGhSYW5nZUNvbnRhaW5pbmdDb3JyZWN0aW9uID0gbV9hbHRlcm5hdGl2ZVRleHRJbmZvLnJh
bmdlV2l0aEFsdGVybmF0aXZlLT5jbG9uZVJhbmdlKGVjKTsKICAgICBpZiAoZWMpCiAgICAgICAg
IHJldHVybjsKIAotICAgIHNldFN0YXJ0KHBhcmFncmFwaFJhbmdlQ29udGFpbmluZ0NvcnJlY3Rp
b24uZ2V0KCksIHN0YXJ0T2ZQYXJhZ3JhcGgobV9jb3JyZWN0aW9uUGFuZWxJbmZvLnJhbmdlVG9C
ZVJlcGxhY2VkLT5zdGFydFBvc2l0aW9uKCkpKTsKLSAgICBzZXRFbmQocGFyYWdyYXBoUmFuZ2VD
b250YWluaW5nQ29ycmVjdGlvbi5nZXQoKSwgZW5kT2ZQYXJhZ3JhcGgobV9jb3JyZWN0aW9uUGFu
ZWxJbmZvLnJhbmdlVG9CZVJlcGxhY2VkLT5lbmRQb3NpdGlvbigpKSk7CisgICAgc2V0U3RhcnQo
cGFyYWdyYXBoUmFuZ2VDb250YWluaW5nQ29ycmVjdGlvbi5nZXQoKSwgc3RhcnRPZlBhcmFncmFw
aChtX2FsdGVybmF0aXZlVGV4dEluZm8ucmFuZ2VXaXRoQWx0ZXJuYXRpdmUtPnN0YXJ0UG9zaXRp
b24oKSkpOworICAgIHNldEVuZChwYXJhZ3JhcGhSYW5nZUNvbnRhaW5pbmdDb3JyZWN0aW9uLmdl
dCgpLCBlbmRPZlBhcmFncmFwaChtX2FsdGVybmF0aXZlVGV4dEluZm8ucmFuZ2VXaXRoQWx0ZXJu
YXRpdmUtPmVuZFBvc2l0aW9uKCkpKTsKIAotICAgIC8vIEFmdGVyIHdlIHJlcGxhY2UgdGhlIHdv
cmQgYXQgcmFuZ2UgcmFuZ2VUb0JlUmVwbGFjZWQsIHdlIG5lZWQgdG8gYWRkIG1hcmtlcnMgdG8g
dGhhdCByYW5nZS4KLSAgICAvLyBIb3dldmVyLCBvbmNlIHRoZSByZXBsYWNlbWVudCB0b29rIHBs
YWNlLCB0aGUgdmFsdWUgb2YgcmFuZ2VUb0JlUmVwbGFjZWQgaXMgbm90IHZhbGlkIGFueW1vcmUu
Ci0gICAgLy8gU28gYmVmb3JlIHdlIGNhcnJ5IG91dCB0aGUgcmVwbGFjZW1lbnQsIHdlIG5lZWQg
dG8gc3RvcmUgdGhlIHN0YXJ0IHBvc2l0aW9uIG9mIHJhbmdlVG9CZVJlcGxhY2VkCisgICAgLy8g
QWZ0ZXIgd2UgcmVwbGFjZSB0aGUgd29yZCBhdCByYW5nZSByYW5nZVdpdGhBbHRlcm5hdGl2ZSwg
d2UgbmVlZCB0byBhZGQgbWFya2VycyB0byB0aGF0IHJhbmdlLgorICAgIC8vIEhvd2V2ZXIsIG9u
Y2UgdGhlIHJlcGxhY2VtZW50IHRvb2sgcGxhY2UsIHRoZSB2YWx1ZSBvZiByYW5nZVdpdGhBbHRl
cm5hdGl2ZSBpcyBub3QgdmFsaWQgYW55bW9yZS4KKyAgICAvLyBTbyBiZWZvcmUgd2UgY2Fycnkg
b3V0IHRoZSByZXBsYWNlbWVudCwgd2UgbmVlZCB0byBzdG9yZSB0aGUgc3RhcnQgcG9zaXRpb24g
b2YgcmFuZ2VXaXRoQWx0ZXJuYXRpdmUKICAgICAvLyByZWxhdGl2ZSB0byB0aGUgc3RhcnQgcG9z
aXRpb24gb2YgdGhlIGNvbnRhaW5pbmcgcGFyYWdyYXBoLiBXZSB1c2UgY29ycmVjdGlvblN0YXJ0
T2Zmc2V0SW5QYXJhZ3JhcGgKICAgICAvLyB0byBzdG9yZSB0aGlzIHZhbHVlLiBJbiBvcmRlciB0
byBvYnRhaW4gdGhpcyBvZmZzZXQsIHdlIG5lZWQgdG8gZmlyc3QgY3JlYXRlIGEgcmFuZ2UKLSAg
ICAvLyB3aGljaCBzcGFucyBmcm9tIHRoZSBzdGFydCBvZiBwYXJhZ3JhcGggdG8gdGhlIHN0YXJ0
IHBvc2l0aW9uIG9mIHJhbmdlVG9CZVJlcGxhY2VkLgorICAgIC8vIHdoaWNoIHNwYW5zIGZyb20g
dGhlIHN0YXJ0IG9mIHBhcmFncmFwaCB0byB0aGUgc3RhcnQgcG9zaXRpb24gb2YgcmFuZ2VXaXRo
QWx0ZXJuYXRpdmUuCiAgICAgUmVmUHRyPFJhbmdlPiBjb3JyZWN0aW9uU3RhcnRPZmZzZXRJblBh
cmFncmFwaEFzUmFuZ2UgPSBSYW5nZTo6Y3JlYXRlKHBhcmFncmFwaFJhbmdlQ29udGFpbmluZ0Nv
cnJlY3Rpb24tPnN0YXJ0Q29udGFpbmVyKGVjKS0+ZG9jdW1lbnQoKSwgcGFyYWdyYXBoUmFuZ2VD
b250YWluaW5nQ29ycmVjdGlvbi0+c3RhcnRQb3NpdGlvbigpLCBwYXJhZ3JhcGhSYW5nZUNvbnRh
aW5pbmdDb3JyZWN0aW9uLT5zdGFydFBvc2l0aW9uKCkpOwogICAgIGlmIChlYykKICAgICAgICAg
cmV0dXJuOwogCi0gICAgUG9zaXRpb24gc3RhcnRQb3NpdGlvbk9mUmFuZ2VUb0JlUmVwbGFjZWQg
PSBtX2NvcnJlY3Rpb25QYW5lbEluZm8ucmFuZ2VUb0JlUmVwbGFjZWQtPnN0YXJ0UG9zaXRpb24o
KTsKLSAgICBjb3JyZWN0aW9uU3RhcnRPZmZzZXRJblBhcmFncmFwaEFzUmFuZ2UtPnNldEVuZChz
dGFydFBvc2l0aW9uT2ZSYW5nZVRvQmVSZXBsYWNlZC5jb250YWluZXJOb2RlKCksIHN0YXJ0UG9z
aXRpb25PZlJhbmdlVG9CZVJlcGxhY2VkLmNvbXB1dGVPZmZzZXRJbkNvbnRhaW5lck5vZGUoKSwg
ZWMpOworICAgIFBvc2l0aW9uIHN0YXJ0UG9zaXRpb25PZnJhbmdlV2l0aEFsdGVybmF0aXZlID0g
bV9hbHRlcm5hdGl2ZVRleHRJbmZvLnJhbmdlV2l0aEFsdGVybmF0aXZlLT5zdGFydFBvc2l0aW9u
KCk7CisgICAgY29ycmVjdGlvblN0YXJ0T2Zmc2V0SW5QYXJhZ3JhcGhBc1JhbmdlLT5zZXRFbmQo
c3RhcnRQb3NpdGlvbk9mcmFuZ2VXaXRoQWx0ZXJuYXRpdmUuY29udGFpbmVyTm9kZSgpLCBzdGFy
dFBvc2l0aW9uT2ZyYW5nZVdpdGhBbHRlcm5hdGl2ZS5jb21wdXRlT2Zmc2V0SW5Db250YWluZXJO
b2RlKCksIGVjKTsKICAgICBpZiAoZWMpCiAgICAgICAgIHJldHVybjsKIApAQCAtMjI2LDE0ICsy
NDIsMTQgQEAgdm9pZCBTcGVsbGluZ0NvcnJlY3Rpb25Db250cm9sbGVyOjphcHBseQogICAgIGlu
dCBjb3JyZWN0aW9uU3RhcnRPZmZzZXRJblBhcmFncmFwaCA9IFRleHRJdGVyYXRvcjo6cmFuZ2VM
ZW5ndGgoY29ycmVjdGlvblN0YXJ0T2Zmc2V0SW5QYXJhZ3JhcGhBc1JhbmdlLmdldCgpKTsKIAog
ICAgIC8vIENsb25lIHRoZSByYW5nZSwgc2luY2UgdGhlIGNhbGxlciBvZiB0aGlzIG1ldGhvZCBt
YXkgd2FudCB0byBrZWVwIHRoZSBvcmlnaW5hbCByYW5nZSBhcm91bmQuCi0gICAgUmVmUHRyPFJh
bmdlPiByYW5nZVRvQmVSZXBsYWNlZCA9IG1fY29ycmVjdGlvblBhbmVsSW5mby5yYW5nZVRvQmVS
ZXBsYWNlZC0+Y2xvbmVSYW5nZShlYyk7Ci0gICAgYXBwbHlDb21tYW5kKFNwZWxsaW5nQ29ycmVj
dGlvbkNvbW1hbmQ6OmNyZWF0ZShyYW5nZVRvQmVSZXBsYWNlZCwgbV9jb3JyZWN0aW9uUGFuZWxJ
bmZvLnJlcGxhY2VtZW50U3RyaW5nKSk7CisgICAgUmVmUHRyPFJhbmdlPiByYW5nZVdpdGhBbHRl
cm5hdGl2ZSA9IG1fYWx0ZXJuYXRpdmVUZXh0SW5mby5yYW5nZVdpdGhBbHRlcm5hdGl2ZS0+Y2xv
bmVSYW5nZShlYyk7CisgICAgYXBwbHlDb21tYW5kKFNwZWxsaW5nQ29ycmVjdGlvbkNvbW1hbmQ6
OmNyZWF0ZShyYW5nZVdpdGhBbHRlcm5hdGl2ZSwgYWx0ZXJuYXRpdmUpKTsKICAgICBzZXRFbmQo
cGFyYWdyYXBoUmFuZ2VDb250YWluaW5nQ29ycmVjdGlvbi5nZXQoKSwgbV9mcmFtZS0+c2VsZWN0
aW9uKCktPnNlbGVjdGlvbigpLnN0YXJ0KCkpOwotICAgIFJlZlB0cjxSYW5nZT4gcmVwbGFjZW1l
bnRSYW5nZSA9IFRleHRJdGVyYXRvcjo6c3VicmFuZ2UocGFyYWdyYXBoUmFuZ2VDb250YWluaW5n
Q29ycmVjdGlvbi5nZXQoKSwgY29ycmVjdGlvblN0YXJ0T2Zmc2V0SW5QYXJhZ3JhcGgsICBtX2Nv
cnJlY3Rpb25QYW5lbEluZm8ucmVwbGFjZW1lbnRTdHJpbmcubGVuZ3RoKCkpOworICAgIFJlZlB0
cjxSYW5nZT4gcmVwbGFjZW1lbnRSYW5nZSA9IFRleHRJdGVyYXRvcjo6c3VicmFuZ2UocGFyYWdy
YXBoUmFuZ2VDb250YWluaW5nQ29ycmVjdGlvbi5nZXQoKSwgY29ycmVjdGlvblN0YXJ0T2Zmc2V0
SW5QYXJhZ3JhcGgsIGFsdGVybmF0aXZlLmxlbmd0aCgpKTsKICAgICBTdHJpbmcgbmV3VGV4dCA9
IHBsYWluVGV4dChyZXBsYWNlbWVudFJhbmdlLmdldCgpKTsKIAogICAgIC8vIENoZWNrIHRvIHNl
ZSBpZiByZXBsYWNlbWVudCBzdWNjZWVkZWQuCi0gICAgaWYgKG5ld1RleHQgIT0gbV9jb3JyZWN0
aW9uUGFuZWxJbmZvLnJlcGxhY2VtZW50U3RyaW5nKQorICAgIGlmIChuZXdUZXh0ICE9IGFsdGVy
bmF0aXZlKQogICAgICAgICByZXR1cm47CiAKICAgICBEb2N1bWVudE1hcmtlckNvbnRyb2xsZXIq
IG1hcmtlcnMgPSByZXBsYWNlbWVudFJhbmdlLT5zdGFydENvbnRhaW5lcigpLT5kb2N1bWVudCgp
LT5tYXJrZXJzKCk7CkBAIC0yNDEsMzQgKzI1NywzNCBAQCB2b2lkIFNwZWxsaW5nQ29ycmVjdGlv
bkNvbnRyb2xsZXI6OmFwcGx5CiAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBzaXplOyArK2kp
IHsKICAgICAgICAgRG9jdW1lbnRNYXJrZXI6Ok1hcmtlclR5cGUgbWFya2VyVHlwZSA9IG1hcmtl
clR5cGVzVG9BZGRbaV07CiAgICAgICAgIFN0cmluZyBkZXNjcmlwdGlvbjsKLSAgICAgICAgaWYg
KG1fY29ycmVjdGlvblBhbmVsSW5mby5wYW5lbFR5cGUgIT0gQ29ycmVjdGlvblBhbmVsSW5mbzo6
UGFuZWxUeXBlUmV2ZXJzaW9uICYmIChtYXJrZXJUeXBlID09IERvY3VtZW50TWFya2VyOjpSZXBs
YWNlbWVudCB8fCBtYXJrZXJUeXBlID09IERvY3VtZW50TWFya2VyOjpBdXRvY29ycmVjdGVkKSkK
LSAgICAgICAgICAgIGRlc2NyaXB0aW9uID0gbV9jb3JyZWN0aW9uUGFuZWxJbmZvLnJlcGxhY2Vk
U3RyaW5nOworICAgICAgICBpZiAobV9hbHRlcm5hdGl2ZVRleHRJbmZvLnR5cGUgIT0gQWx0ZXJu
YXRpdmVUZXh0VHlwZVJldmVyc2lvbiAmJiAobWFya2VyVHlwZSA9PSBEb2N1bWVudE1hcmtlcjo6
UmVwbGFjZW1lbnQgfHwgbWFya2VyVHlwZSA9PSBEb2N1bWVudE1hcmtlcjo6QXV0b2NvcnJlY3Rl
ZCkpCisgICAgICAgICAgICBkZXNjcmlwdGlvbiA9IG1fYWx0ZXJuYXRpdmVUZXh0SW5mby5vcmln
aW5hbFRleHQ7CiAgICAgICAgIG1hcmtlcnMtPmFkZE1hcmtlcihyZXBsYWNlbWVudFJhbmdlLmdl
dCgpLCBtYXJrZXJUeXBlLCBkZXNjcmlwdGlvbik7CiAgICAgfQogfQogCi1ib29sIFNwZWxsaW5n
Q29ycmVjdGlvbkNvbnRyb2xsZXI6OmFwcGx5QXV0b2NvcnJlY3Rpb25CZWZvcmVUeXBpbmdJZkFw
cHJvcHJpYXRlKCkKK2Jvb2wgQWx0ZXJuYXRpdmVUZXh0Q29udHJvbGxlcjo6YXBwbHlBdXRvY29y
cmVjdGlvbkJlZm9yZVR5cGluZ0lmQXBwcm9wcmlhdGUoKQogewotICAgIGlmICghbV9jb3JyZWN0
aW9uUGFuZWxJbmZvLnJhbmdlVG9CZVJlcGxhY2VkIHx8ICFtX2NvcnJlY3Rpb25QYW5lbEluZm8u
aXNBY3RpdmUpCisgICAgaWYgKCFtX2FsdGVybmF0aXZlVGV4dEluZm8ucmFuZ2VXaXRoQWx0ZXJu
YXRpdmUgfHwgIW1fYWx0ZXJuYXRpdmVUZXh0SW5mby5pc0FjdGl2ZSkKICAgICAgICAgcmV0dXJu
IGZhbHNlOwogCi0gICAgaWYgKG1fY29ycmVjdGlvblBhbmVsSW5mby5wYW5lbFR5cGUgIT0gQ29y
cmVjdGlvblBhbmVsSW5mbzo6UGFuZWxUeXBlQ29ycmVjdGlvbikKKyAgICBpZiAobV9hbHRlcm5h
dGl2ZVRleHRJbmZvLnR5cGUgIT0gQWx0ZXJuYXRpdmVUZXh0VHlwZUNvcnJlY3Rpb24pCiAgICAg
ICAgIHJldHVybiBmYWxzZTsKIAogICAgIFBvc2l0aW9uIGNhcmV0UG9zaXRpb24gPSBtX2ZyYW1l
LT5zZWxlY3Rpb24oKS0+c2VsZWN0aW9uKCkuc3RhcnQoKTsKIAotICAgIGlmIChtX2NvcnJlY3Rp
b25QYW5lbEluZm8ucmFuZ2VUb0JlUmVwbGFjZWQtPmVuZFBvc2l0aW9uKCkgPT0gY2FyZXRQb3Np
dGlvbikgewotICAgICAgICBoYW5kbGVDb3JyZWN0aW9uUGFuZWxSZXN1bHQoZGlzbWlzc1Nvb24o
UmVhc29uRm9yRGlzbWlzc2luZ0NvcnJlY3Rpb25QYW5lbEFjY2VwdGVkKSk7CisgICAgaWYgKG1f
YWx0ZXJuYXRpdmVUZXh0SW5mby5yYW5nZVdpdGhBbHRlcm5hdGl2ZS0+ZW5kUG9zaXRpb24oKSA9
PSBjYXJldFBvc2l0aW9uKSB7CisgICAgICAgIGhhbmRsZUFsdGVybmF0aXZlVGV4dFVJUmVzdWx0
KGRpc21pc3NTb29uKFJlYXNvbkZvckRpc21pc3NpbmdBbHRlcm5hdGl2ZVRleHRBY2NlcHRlZCkp
OwogICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICB9IAogICAgIAogICAgIC8vIFBlbmRpbmcgY29y
cmVjdGlvbiBzaG91bGQgYWx3YXlzIGJlIHdoZXJlIGNhcmV0IGlzLiBCdXQgaW4gY2FzZSB0aGlz
IGlzIG5vdCBhbHdheXMgdHJ1ZSwgd2Ugc3RpbGwgd2FudCB0byBkaXNtaXNzIHRoZSBwYW5lbCB3
aXRob3V0IGFjY2VwdGluZyB0aGUgY29ycmVjdGlvbi4KLSAgICBBU1NFUlQobV9jb3JyZWN0aW9u
UGFuZWxJbmZvLnJhbmdlVG9CZVJlcGxhY2VkLT5lbmRQb3NpdGlvbigpID09IGNhcmV0UG9zaXRp
b24pOwotICAgIGRpc21pc3MoUmVhc29uRm9yRGlzbWlzc2luZ0NvcnJlY3Rpb25QYW5lbElnbm9y
ZWQpOworICAgIEFTU0VSVChtX2FsdGVybmF0aXZlVGV4dEluZm8ucmFuZ2VXaXRoQWx0ZXJuYXRp
dmUtPmVuZFBvc2l0aW9uKCkgPT0gY2FyZXRQb3NpdGlvbik7CisgICAgZGlzbWlzcyhSZWFzb25G
b3JEaXNtaXNzaW5nQWx0ZXJuYXRpdmVUZXh0SWdub3JlZCk7CiAgICAgcmV0dXJuIGZhbHNlOwog
fQogCi12b2lkIFNwZWxsaW5nQ29ycmVjdGlvbkNvbnRyb2xsZXI6OnJlc3BvbmRUb1VuYXBwbGll
ZFNwZWxsQ29ycmVjdGlvbihjb25zdCBWaXNpYmxlU2VsZWN0aW9uJiBzZWxlY3Rpb25PZkNvcnJl
Y3RlZCwgY29uc3QgU3RyaW5nJiBjb3JyZWN0ZWQsIGNvbnN0IFN0cmluZyYgY29ycmVjdGlvbikK
K3ZvaWQgQWx0ZXJuYXRpdmVUZXh0Q29udHJvbGxlcjo6cmVzcG9uZFRvVW5hcHBsaWVkU3BlbGxD
b3JyZWN0aW9uKGNvbnN0IFZpc2libGVTZWxlY3Rpb24mIHNlbGVjdGlvbk9mQ29ycmVjdGVkLCBj
b25zdCBTdHJpbmcmIGNvcnJlY3RlZCwgY29uc3QgU3RyaW5nJiBjb3JyZWN0aW9uKQogewogICAg
IGNsaWVudCgpLT5yZWNvcmRBdXRvY29ycmVjdGlvblJlc3BvbnNlKEVkaXRvckNsaWVudDo6QXV0
b2NvcnJlY3Rpb25SZXZlcnRlZCwgY29ycmVjdGVkLCBjb3JyZWN0aW9uKTsKICAgICBtX2ZyYW1l
LT5kb2N1bWVudCgpLT51cGRhdGVMYXlvdXQoKTsKQEAgLTI4MSwxMSArMjk3LDExIEBAIHZvaWQg
U3BlbGxpbmdDb3JyZWN0aW9uQ29udHJvbGxlcjo6cmVzcG8KICAgICBtYXJrZXJzLT5hZGRNYXJr
ZXIocmFuZ2UuZ2V0KCksIERvY3VtZW50TWFya2VyOjpTcGVsbENoZWNraW5nRXhlbXB0aW9uKTsK
IH0KIAotdm9pZCBTcGVsbGluZ0NvcnJlY3Rpb25Db250cm9sbGVyOjpjb3JyZWN0aW9uUGFuZWxU
aW1lckZpcmVkKFRpbWVyPFNwZWxsaW5nQ29ycmVjdGlvbkNvbnRyb2xsZXI+KikKK3ZvaWQgQWx0
ZXJuYXRpdmVUZXh0Q29udHJvbGxlcjo6dGltZXJGaXJlZChUaW1lcjxBbHRlcm5hdGl2ZVRleHRD
b250cm9sbGVyPiopCiB7Ci0gICAgbV9jb3JyZWN0aW9uUGFuZWxJc0Rpc21pc3NlZEJ5RWRpdG9y
ID0gZmFsc2U7Ci0gICAgc3dpdGNoIChtX2NvcnJlY3Rpb25QYW5lbEluZm8ucGFuZWxUeXBlKSB7
Ci0gICAgY2FzZSBDb3JyZWN0aW9uUGFuZWxJbmZvOjpQYW5lbFR5cGVDb3JyZWN0aW9uOiB7Cisg
ICAgbV9pc0Rpc21pc3NlZEJ5RWRpdGluZyA9IGZhbHNlOworICAgIHN3aXRjaCAobV9hbHRlcm5h
dGl2ZVRleHRJbmZvLnR5cGUpIHsKKyAgICBjYXNlIEFsdGVybmF0aXZlVGV4dFR5cGVDb3JyZWN0
aW9uOiB7CiAgICAgICAgIFZpc2libGVTZWxlY3Rpb24gc2VsZWN0aW9uKG1fZnJhbWUtPnNlbGVj
dGlvbigpLT5zZWxlY3Rpb24oKSk7CiAgICAgICAgIFZpc2libGVQb3NpdGlvbiBzdGFydChzZWxl
Y3Rpb24uc3RhcnQoKSwgc2VsZWN0aW9uLmFmZmluaXR5KCkpOwogICAgICAgICBWaXNpYmxlUG9z
aXRpb24gcCA9IHN0YXJ0T2ZXb3JkKHN0YXJ0LCBMZWZ0V29yZElmT25Cb3VuZGFyeSk7CkBAIC0y
OTMsNzYgKzMwOSw3NSBAQCB2b2lkIFNwZWxsaW5nQ29ycmVjdGlvbkNvbnRyb2xsZXI6OmNvcnJl
CiAgICAgICAgIG1fZnJhbWUtPmVkaXRvcigpLT5tYXJrQWxsTWlzc3BlbGxpbmdzQW5kQmFkR3Jh
bW1hckluUmFuZ2VzKFRleHRDaGVja2luZ1R5cGVTcGVsbGluZyB8IFRleHRDaGVja2luZ1R5cGVT
aG93Q29ycmVjdGlvblBhbmVsLCBhZGphY2VudFdvcmRzLnRvTm9ybWFsaXplZFJhbmdlKCkuZ2V0
KCksIDApOwogICAgIH0KICAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBDb3JyZWN0aW9uUGFuZWxJ
bmZvOjpQYW5lbFR5cGVSZXZlcnNpb246IHsKLSAgICAgICAgaWYgKCFtX2NvcnJlY3Rpb25QYW5l
bEluZm8ucmFuZ2VUb0JlUmVwbGFjZWQpCisgICAgY2FzZSBBbHRlcm5hdGl2ZVRleHRUeXBlUmV2
ZXJzaW9uOiB7CisgICAgICAgIGlmICghbV9hbHRlcm5hdGl2ZVRleHRJbmZvLnJhbmdlV2l0aEFs
dGVybmF0aXZlKQogICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIG1fY29ycmVjdGlvblBhbmVs
SW5mby5pc0FjdGl2ZSA9IHRydWU7Ci0gICAgICAgIG1fY29ycmVjdGlvblBhbmVsSW5mby5yZXBs
YWNlZFN0cmluZyA9IHBsYWluVGV4dChtX2NvcnJlY3Rpb25QYW5lbEluZm8ucmFuZ2VUb0JlUmVw
bGFjZWQuZ2V0KCkpOwotICAgICAgICBGbG9hdFJlY3QgYm91bmRpbmdCb3ggPSByb290Vmlld1Jl
Y3RGb3JSYW5nZShtX2NvcnJlY3Rpb25QYW5lbEluZm8ucmFuZ2VUb0JlUmVwbGFjZWQuZ2V0KCkp
OwotICAgICAgICBpZiAoIWJvdW5kaW5nQm94LmlzRW1wdHkoKSkKLSAgICAgICAgICAgIGNsaWVu
dCgpLT5zaG93Q29ycmVjdGlvblBhbmVsKG1fY29ycmVjdGlvblBhbmVsSW5mby5wYW5lbFR5cGUs
IGJvdW5kaW5nQm94LCBtX2NvcnJlY3Rpb25QYW5lbEluZm8ucmVwbGFjZWRTdHJpbmcsIG1fY29y
cmVjdGlvblBhbmVsSW5mby5yZXBsYWNlbWVudFN0cmluZywgVmVjdG9yPFN0cmluZz4oKSk7Cisg
ICAgICAgIG1fYWx0ZXJuYXRpdmVUZXh0SW5mby5pc0FjdGl2ZSA9IHRydWU7CisgICAgICAgIG1f
YWx0ZXJuYXRpdmVUZXh0SW5mby5vcmlnaW5hbFRleHQgPSBwbGFpblRleHQobV9hbHRlcm5hdGl2
ZVRleHRJbmZvLnJhbmdlV2l0aEFsdGVybmF0aXZlLmdldCgpKTsKKyAgICAgICAgRmxvYXRSZWN0
IGJvdW5kaW5nQm94ID0gcm9vdFZpZXdSZWN0Rm9yUmFuZ2UobV9hbHRlcm5hdGl2ZVRleHRJbmZv
LnJhbmdlV2l0aEFsdGVybmF0aXZlLmdldCgpKTsKKyAgICAgICAgaWYgKCFib3VuZGluZ0JveC5p
c0VtcHR5KCkpIHsKKyAgICAgICAgICAgIGNvbnN0IEF1dG9jb3JyZWN0aW9uQWx0ZXJuYXRpdmVE
ZXRhaWxzKiBkZXRhaWxzID0gc3RhdGljX2Nhc3Q8Y29uc3QgQXV0b2NvcnJlY3Rpb25BbHRlcm5h
dGl2ZURldGFpbHMqPihtX2FsdGVybmF0aXZlVGV4dEluZm8uZGV0YWlscy5nZXQoKSk7CisgICAg
ICAgICAgICBjbGllbnQoKS0+c2hvd0NvcnJlY3Rpb25QYW5lbChtX2FsdGVybmF0aXZlVGV4dElu
Zm8udHlwZSwgYm91bmRpbmdCb3gsIG1fYWx0ZXJuYXRpdmVUZXh0SW5mby5vcmlnaW5hbFRleHQs
IGRldGFpbHMtPnJlcGxhY2VtZW50U3RyaW5nKCksIFZlY3RvcjxTdHJpbmc+KCkpOworICAgICAg
ICB9CiAgICAgfQogICAgICAgICBicmVhazsKLSAgICBjYXNlIENvcnJlY3Rpb25QYW5lbEluZm86
OlBhbmVsVHlwZVNwZWxsaW5nU3VnZ2VzdGlvbnM6IHsKLSAgICAgICAgaWYgKCFtX2NvcnJlY3Rp
b25QYW5lbEluZm8ucmFuZ2VUb0JlUmVwbGFjZWQgfHwgcGxhaW5UZXh0KG1fY29ycmVjdGlvblBh
bmVsSW5mby5yYW5nZVRvQmVSZXBsYWNlZC5nZXQoKSkgIT0gbV9jb3JyZWN0aW9uUGFuZWxJbmZv
LnJlcGxhY2VkU3RyaW5nKQorICAgIGNhc2UgQWx0ZXJuYXRpdmVUZXh0VHlwZVNwZWxsaW5nU3Vn
Z2VzdGlvbnM6IHsKKyAgICAgICAgaWYgKCFtX2FsdGVybmF0aXZlVGV4dEluZm8ucmFuZ2VXaXRo
QWx0ZXJuYXRpdmUgfHwgcGxhaW5UZXh0KG1fYWx0ZXJuYXRpdmVUZXh0SW5mby5yYW5nZVdpdGhB
bHRlcm5hdGl2ZS5nZXQoKSkgIT0gbV9hbHRlcm5hdGl2ZVRleHRJbmZvLm9yaWdpbmFsVGV4dCkK
ICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBTdHJpbmcgcGFyYWdyYXBoVGV4dCA9IHBsYWlu
VGV4dChUZXh0Q2hlY2tpbmdQYXJhZ3JhcGgobV9jb3JyZWN0aW9uUGFuZWxJbmZvLnJhbmdlVG9C
ZVJlcGxhY2VkKS5wYXJhZ3JhcGhSYW5nZSgpLmdldCgpKTsKKyAgICAgICAgU3RyaW5nIHBhcmFn
cmFwaFRleHQgPSBwbGFpblRleHQoVGV4dENoZWNraW5nUGFyYWdyYXBoKG1fYWx0ZXJuYXRpdmVU
ZXh0SW5mby5yYW5nZVdpdGhBbHRlcm5hdGl2ZSkucGFyYWdyYXBoUmFuZ2UoKS5nZXQoKSk7CiAg
ICAgICAgIFZlY3RvcjxTdHJpbmc+IHN1Z2dlc3Rpb25zOwotICAgICAgICB0ZXh0Q2hlY2tlcigp
LT5nZXRHdWVzc2VzRm9yV29yZChtX2NvcnJlY3Rpb25QYW5lbEluZm8ucmVwbGFjZWRTdHJpbmcs
IHBhcmFncmFwaFRleHQsIHN1Z2dlc3Rpb25zKTsKKyAgICAgICAgdGV4dENoZWNrZXIoKS0+Z2V0
R3Vlc3Nlc0ZvcldvcmQobV9hbHRlcm5hdGl2ZVRleHRJbmZvLm9yaWdpbmFsVGV4dCwgcGFyYWdy
YXBoVGV4dCwgc3VnZ2VzdGlvbnMpOwogICAgICAgICBpZiAoc3VnZ2VzdGlvbnMuaXNFbXB0eSgp
KSB7Ci0gICAgICAgICAgICBtX2NvcnJlY3Rpb25QYW5lbEluZm8ucmFuZ2VUb0JlUmVwbGFjZWQu
Y2xlYXIoKTsKKyAgICAgICAgICAgIG1fYWx0ZXJuYXRpdmVUZXh0SW5mby5yYW5nZVdpdGhBbHRl
cm5hdGl2ZS5jbGVhcigpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KICAgICAgICAg
U3RyaW5nIHRvcFN1Z2dlc3Rpb24gPSBzdWdnZXN0aW9ucy5maXJzdCgpOwogICAgICAgICBzdWdn
ZXN0aW9ucy5yZW1vdmUoMCk7Ci0gICAgICAgIG1fY29ycmVjdGlvblBhbmVsSW5mby5pc0FjdGl2
ZSA9IHRydWU7Ci0gICAgICAgIEZsb2F0UmVjdCBib3VuZGluZ0JveCA9IHJvb3RWaWV3UmVjdEZv
clJhbmdlKG1fY29ycmVjdGlvblBhbmVsSW5mby5yYW5nZVRvQmVSZXBsYWNlZC5nZXQoKSk7Cisg
ICAgICAgIG1fYWx0ZXJuYXRpdmVUZXh0SW5mby5pc0FjdGl2ZSA9IHRydWU7CisgICAgICAgIEZs
b2F0UmVjdCBib3VuZGluZ0JveCA9IHJvb3RWaWV3UmVjdEZvclJhbmdlKG1fYWx0ZXJuYXRpdmVU
ZXh0SW5mby5yYW5nZVdpdGhBbHRlcm5hdGl2ZS5nZXQoKSk7CiAgICAgICAgIGlmICghYm91bmRp
bmdCb3guaXNFbXB0eSgpKQotICAgICAgICAgICAgY2xpZW50KCktPnNob3dDb3JyZWN0aW9uUGFu
ZWwobV9jb3JyZWN0aW9uUGFuZWxJbmZvLnBhbmVsVHlwZSwgYm91bmRpbmdCb3gsIG1fY29ycmVj
dGlvblBhbmVsSW5mby5yZXBsYWNlZFN0cmluZywgdG9wU3VnZ2VzdGlvbiwgc3VnZ2VzdGlvbnMp
OworICAgICAgICAgICAgY2xpZW50KCktPnNob3dDb3JyZWN0aW9uUGFuZWwobV9hbHRlcm5hdGl2
ZVRleHRJbmZvLnR5cGUsIGJvdW5kaW5nQm94LCBtX2FsdGVybmF0aXZlVGV4dEluZm8ub3JpZ2lu
YWxUZXh0LCB0b3BTdWdnZXN0aW9uLCBzdWdnZXN0aW9ucyk7CiAgICAgfQogICAgICAgICBicmVh
azsKICAgICB9CiB9CiAKLXZvaWQgU3BlbGxpbmdDb3JyZWN0aW9uQ29udHJvbGxlcjo6aGFuZGxl
Q29ycmVjdGlvblBhbmVsUmVzdWx0KGNvbnN0IFN0cmluZyYgY29ycmVjdGlvbikKK3ZvaWQgQWx0
ZXJuYXRpdmVUZXh0Q29udHJvbGxlcjo6aGFuZGxlQWx0ZXJuYXRpdmVUZXh0VUlSZXN1bHQoY29u
c3QgU3RyaW5nJiByZXN1bHQpCiB7Ci0gICAgUmFuZ2UqIHJlcGxhY2VkUmFuZ2UgPSBtX2NvcnJl
Y3Rpb25QYW5lbEluZm8ucmFuZ2VUb0JlUmVwbGFjZWQuZ2V0KCk7CisgICAgUmFuZ2UqIHJlcGxh
Y2VkUmFuZ2UgPSBtX2FsdGVybmF0aXZlVGV4dEluZm8ucmFuZ2VXaXRoQWx0ZXJuYXRpdmUuZ2V0
KCk7CiAgICAgaWYgKCFyZXBsYWNlZFJhbmdlIHx8IG1fZnJhbWUtPmRvY3VtZW50KCkgIT0gcmVw
bGFjZWRSYW5nZS0+b3duZXJEb2N1bWVudCgpKQogICAgICAgICByZXR1cm47CiAKLSAgICBTdHJp
bmcgY3VycmVudFdvcmQgPSBwbGFpblRleHQobV9jb3JyZWN0aW9uUGFuZWxJbmZvLnJhbmdlVG9C
ZVJlcGxhY2VkLmdldCgpKTsKKyAgICBTdHJpbmcgY3VycmVudFdvcmQgPSBwbGFpblRleHQobV9h
bHRlcm5hdGl2ZVRleHRJbmZvLnJhbmdlV2l0aEFsdGVybmF0aXZlLmdldCgpKTsKICAgICAvLyBD
aGVjayB0byBzZWUgaWYgdGhlIHdvcmQgd2UgYXJlIGFib3V0IHRvIGNvcnJlY3QgaGFzIGJlZW4g
Y2hhbmdlZCBiZXR3ZWVuIHRpbWVyIGZpcmluZyBhbmQgY2FsbGJhY2sgYmVpbmcgdHJpZ2dlcmVk
LgotICAgIGlmIChjdXJyZW50V29yZCAhPSBtX2NvcnJlY3Rpb25QYW5lbEluZm8ucmVwbGFjZWRT
dHJpbmcpCisgICAgaWYgKGN1cnJlbnRXb3JkICE9IG1fYWx0ZXJuYXRpdmVUZXh0SW5mby5vcmln
aW5hbFRleHQpCiAgICAgICAgIHJldHVybjsKIAotICAgIG1fY29ycmVjdGlvblBhbmVsSW5mby5p
c0FjdGl2ZSA9IGZhbHNlOworICAgIG1fYWx0ZXJuYXRpdmVUZXh0SW5mby5pc0FjdGl2ZSA9IGZh
bHNlOwogCi0gICAgc3dpdGNoIChtX2NvcnJlY3Rpb25QYW5lbEluZm8ucGFuZWxUeXBlKSB7Ci0g
ICAgY2FzZSBDb3JyZWN0aW9uUGFuZWxJbmZvOjpQYW5lbFR5cGVDb3JyZWN0aW9uOgotICAgICAg
ICBpZiAoY29ycmVjdGlvbi5sZW5ndGgoKSkgewotICAgICAgICAgICAgbV9jb3JyZWN0aW9uUGFu
ZWxJbmZvLnJlcGxhY2VtZW50U3RyaW5nID0gY29ycmVjdGlvbjsKLSAgICAgICAgICAgIGFwcGx5
Q29ycmVjdGlvblBhbmVsSW5mbyhtYXJrZXJUeXBlc0ZvckF1dG9jb3JyZWN0aW9uKCkpOwotICAg
ICAgICB9IGVsc2UgaWYgKCFtX2NvcnJlY3Rpb25QYW5lbElzRGlzbWlzc2VkQnlFZGl0b3IpCi0g
ICAgICAgICAgICByZXBsYWNlZFJhbmdlLT5zdGFydENvbnRhaW5lcigpLT5kb2N1bWVudCgpLT5t
YXJrZXJzKCktPmFkZE1hcmtlcihyZXBsYWNlZFJhbmdlLCBEb2N1bWVudE1hcmtlcjo6UmVqZWN0
ZWRDb3JyZWN0aW9uLCBtX2NvcnJlY3Rpb25QYW5lbEluZm8ucmVwbGFjZWRTdHJpbmcpOworICAg
IHN3aXRjaCAobV9hbHRlcm5hdGl2ZVRleHRJbmZvLnR5cGUpIHsKKyAgICBjYXNlIEFsdGVybmF0
aXZlVGV4dFR5cGVDb3JyZWN0aW9uOgorICAgICAgICBpZiAocmVzdWx0Lmxlbmd0aCgpKQorICAg
ICAgICAgICAgYXBwbHlBbHRlcm5hdGl2ZVRleHQocmVzdWx0LCBtYXJrZXJUeXBlc0ZvckF1dG9j
b3JyZWN0aW9uKCkpOworICAgICAgICBlbHNlIGlmICghbV9pc0Rpc21pc3NlZEJ5RWRpdGluZykK
KyAgICAgICAgICAgIHJlcGxhY2VkUmFuZ2UtPnN0YXJ0Q29udGFpbmVyKCktPmRvY3VtZW50KCkt
Pm1hcmtlcnMoKS0+YWRkTWFya2VyKHJlcGxhY2VkUmFuZ2UsIERvY3VtZW50TWFya2VyOjpSZWpl
Y3RlZENvcnJlY3Rpb24sIG1fYWx0ZXJuYXRpdmVUZXh0SW5mby5vcmlnaW5hbFRleHQpOwogICAg
ICAgICBicmVhazsKLSAgICBjYXNlIENvcnJlY3Rpb25QYW5lbEluZm86OlBhbmVsVHlwZVJldmVy
c2lvbjoKLSAgICBjYXNlIENvcnJlY3Rpb25QYW5lbEluZm86OlBhbmVsVHlwZVNwZWxsaW5nU3Vn
Z2VzdGlvbnM6Ci0gICAgICAgIGlmIChjb3JyZWN0aW9uLmxlbmd0aCgpKSB7Ci0gICAgICAgICAg
ICBtX2NvcnJlY3Rpb25QYW5lbEluZm8ucmVwbGFjZW1lbnRTdHJpbmcgPSBjb3JyZWN0aW9uOwot
ICAgICAgICAgICAgYXBwbHlDb3JyZWN0aW9uUGFuZWxJbmZvKG1hcmtlclR5cGVzRm9yUmVwbGFj
ZW1lbnQoKSk7Ci0gICAgICAgIH0KKyAgICBjYXNlIEFsdGVybmF0aXZlVGV4dFR5cGVSZXZlcnNp
b246CisgICAgY2FzZSBBbHRlcm5hdGl2ZVRleHRUeXBlU3BlbGxpbmdTdWdnZXN0aW9uczoKKyAg
ICAgICAgaWYgKHJlc3VsdC5sZW5ndGgoKSkKKyAgICAgICAgICAgIGFwcGx5QWx0ZXJuYXRpdmVU
ZXh0KHJlc3VsdCwgbWFya2VyVHlwZXNGb3JSZXBsYWNlbWVudCgpKTsKICAgICAgICAgYnJlYWs7
CiAgICAgfQogCi0gICAgbV9jb3JyZWN0aW9uUGFuZWxJbmZvLnJhbmdlVG9CZVJlcGxhY2VkLmNs
ZWFyKCk7CisgICAgbV9hbHRlcm5hdGl2ZVRleHRJbmZvLnJhbmdlV2l0aEFsdGVybmF0aXZlLmNs
ZWFyKCk7CiB9CiAKLWJvb2wgU3BlbGxpbmdDb3JyZWN0aW9uQ29udHJvbGxlcjo6aXNBdXRvbWF0
aWNTcGVsbGluZ0NvcnJlY3Rpb25FbmFibGVkKCkKK2Jvb2wgQWx0ZXJuYXRpdmVUZXh0Q29udHJv
bGxlcjo6aXNBdXRvbWF0aWNTcGVsbGluZ0NvcnJlY3Rpb25FbmFibGVkKCkKIHsKICAgICByZXR1
cm4gY2xpZW50KCkgJiYgY2xpZW50KCktPmlzQXV0b21hdGljU3BlbGxpbmdDb3JyZWN0aW9uRW5h
YmxlZCgpOwogfQogCi1GbG9hdFJlY3QgU3BlbGxpbmdDb3JyZWN0aW9uQ29udHJvbGxlcjo6cm9v
dFZpZXdSZWN0Rm9yUmFuZ2UoY29uc3QgUmFuZ2UqIHJhbmdlKSBjb25zdAorRmxvYXRSZWN0IEFs
dGVybmF0aXZlVGV4dENvbnRyb2xsZXI6OnJvb3RWaWV3UmVjdEZvclJhbmdlKGNvbnN0IFJhbmdl
KiByYW5nZSkgY29uc3QKIHsKICAgICBGcmFtZVZpZXcqIHZpZXcgPSBtX2ZyYW1lLT52aWV3KCk7
CiAgICAgaWYgKCF2aWV3KQpAQCAtMzc2LDcgKzM5MSw3IEBAIEZsb2F0UmVjdCBTcGVsbGluZ0Nv
cnJlY3Rpb25Db250cm9sbGVyOjoKICAgICByZXR1cm4gdmlldy0+Y29udGVudHNUb1Jvb3RWaWV3
KEludFJlY3QoYm91bmRpbmdSZWN0KSk7CiB9ICAgICAgICAKIAotdm9pZCBTcGVsbGluZ0NvcnJl
Y3Rpb25Db250cm9sbGVyOjpyZXNwb25kVG9DaGFuZ2VkU2VsZWN0aW9uKGNvbnN0IFZpc2libGVT
ZWxlY3Rpb24mIG9sZFNlbGVjdGlvbikKK3ZvaWQgQWx0ZXJuYXRpdmVUZXh0Q29udHJvbGxlcjo6
cmVzcG9uZFRvQ2hhbmdlZFNlbGVjdGlvbihjb25zdCBWaXNpYmxlU2VsZWN0aW9uJiBvbGRTZWxl
Y3Rpb24pCiB7CiAgICAgVmlzaWJsZVNlbGVjdGlvbiBjdXJyZW50U2VsZWN0aW9uKG1fZnJhbWUt
PnNlbGVjdGlvbigpLT5zZWxlY3Rpb24oKSk7CiAgICAgLy8gV2hlbiB1c2VyIG1vdmVzIGNhcmV0
IHRvIHRoZSBlbmQgb2YgYXV0b2NvcnJlY3RlZCB3b3JkIGFuZCBwYXVzZXMsIHdlIHNob3cgdGhl
IHBhbmVsCkBAIC00MTQsMjAgKzQyOSwyMCBAQCB2b2lkIFNwZWxsaW5nQ29ycmVjdGlvbkNvbnRy
b2xsZXI6OnJlc3BvCiAgICAgICAgIGlmICghY3VycmVudFdvcmQubGVuZ3RoKCkpCiAgICAgICAg
ICAgICBjb250aW51ZTsKIAotICAgICAgICBtX2NvcnJlY3Rpb25QYW5lbEluZm8ucmFuZ2VUb0Jl
UmVwbGFjZWQgPSB3b3JkUmFuZ2U7Ci0gICAgICAgIG1fY29ycmVjdGlvblBhbmVsSW5mby5yZXBs
YWNlZFN0cmluZyA9IGN1cnJlbnRXb3JkOworICAgICAgICBtX2FsdGVybmF0aXZlVGV4dEluZm8u
cmFuZ2VXaXRoQWx0ZXJuYXRpdmUgPSB3b3JkUmFuZ2U7CisgICAgICAgIG1fYWx0ZXJuYXRpdmVU
ZXh0SW5mby5vcmlnaW5hbFRleHQgPSBjdXJyZW50V29yZDsKICAgICAgICAgaWYgKG1hcmtlci0+
dHlwZSgpID09IERvY3VtZW50TWFya2VyOjpTcGVsbGluZykKLSAgICAgICAgICAgIHN0YXJ0Q29y
cmVjdGlvblBhbmVsVGltZXIoQ29ycmVjdGlvblBhbmVsSW5mbzo6UGFuZWxUeXBlU3BlbGxpbmdT
dWdnZXN0aW9ucyk7CisgICAgICAgICAgICBzdGFydEFsdGVybmF0aXZlVGV4dFVJVGltZXIoQWx0
ZXJuYXRpdmVUZXh0VHlwZVNwZWxsaW5nU3VnZ2VzdGlvbnMpOwogICAgICAgICBlbHNlIHsKLSAg
ICAgICAgICAgIG1fY29ycmVjdGlvblBhbmVsSW5mby5yZXBsYWNlbWVudFN0cmluZyA9IG1hcmtl
ci0+ZGVzY3JpcHRpb24oKTsKLSAgICAgICAgICAgIHN0YXJ0Q29ycmVjdGlvblBhbmVsVGltZXIo
Q29ycmVjdGlvblBhbmVsSW5mbzo6UGFuZWxUeXBlUmV2ZXJzaW9uKTsKKyAgICAgICAgICAgIG1f
YWx0ZXJuYXRpdmVUZXh0SW5mby5kZXRhaWxzID0gQXV0b2NvcnJlY3Rpb25BbHRlcm5hdGl2ZURl
dGFpbHM6OmNyZWF0ZShtYXJrZXItPmRlc2NyaXB0aW9uKCkpOworICAgICAgICAgICAgc3RhcnRB
bHRlcm5hdGl2ZVRleHRVSVRpbWVyKEFsdGVybmF0aXZlVGV4dFR5cGVSZXZlcnNpb24pOwogICAg
ICAgICB9CiAKICAgICAgICAgYnJlYWs7CiAgICAgfQogfQogCi12b2lkIFNwZWxsaW5nQ29ycmVj
dGlvbkNvbnRyb2xsZXI6OnJlc3BvbmRUb0FwcGxpZWRFZGl0aW5nKENvbXBvc2l0ZUVkaXRDb21t
YW5kKiBjb21tYW5kKQordm9pZCBBbHRlcm5hdGl2ZVRleHRDb250cm9sbGVyOjpyZXNwb25kVG9B
cHBsaWVkRWRpdGluZyhDb21wb3NpdGVFZGl0Q29tbWFuZCogY29tbWFuZCkKIHsKICAgICBpZiAo
Y29tbWFuZC0+aXNUb3BMZXZlbENvbW1hbmQoKSAmJiAhY29tbWFuZC0+c2hvdWxkUmV0YWluQXV0
b2NvcnJlY3Rpb25JbmRpY2F0b3IoKSkKICAgICAgICAgbV9mcmFtZS0+ZG9jdW1lbnQoKS0+bWFy
a2VycygpLT5yZW1vdmVNYXJrZXJzKERvY3VtZW50TWFya2VyOjpDb3JyZWN0aW9uSW5kaWNhdG9y
KTsKQEAgLTQzNiw3ICs0NTEsNyBAQCB2b2lkIFNwZWxsaW5nQ29ycmVjdGlvbkNvbnRyb2xsZXI6
OnJlc3BvCiAgICAgbV9vcmlnaW5hbFN0cmluZ0Zvckxhc3REZWxldGVkQXV0b2NvcnJlY3Rpb24g
PSBTdHJpbmcoKTsKIH0KIAotdm9pZCBTcGVsbGluZ0NvcnJlY3Rpb25Db250cm9sbGVyOjpyZXNw
b25kVG9VbmFwcGxpZWRFZGl0aW5nKEVkaXRDb21tYW5kQ29tcG9zaXRpb24qIGNvbW1hbmQpCit2
b2lkIEFsdGVybmF0aXZlVGV4dENvbnRyb2xsZXI6OnJlc3BvbmRUb1VuYXBwbGllZEVkaXRpbmco
RWRpdENvbW1hbmRDb21wb3NpdGlvbiogY29tbWFuZCkKIHsKICAgICBpZiAoIWNvbW1hbmQtPndh
c0NyZWF0ZUxpbmtDb21tYW5kKCkpCiAgICAgICAgIHJldHVybjsKQEAgLTQ0OCwzNSArNDYzLDM1
IEBAIHZvaWQgU3BlbGxpbmdDb3JyZWN0aW9uQ29udHJvbGxlcjo6cmVzcG8KICAgICBtYXJrZXJz
LT5hZGRNYXJrZXIocmFuZ2UuZ2V0KCksIERvY3VtZW50TWFya2VyOjpTcGVsbENoZWNraW5nRXhl
bXB0aW9uKTsKIH0KIAotRWRpdG9yQ2xpZW50KiBTcGVsbGluZ0NvcnJlY3Rpb25Db250cm9sbGVy
OjpjbGllbnQoKQorRWRpdG9yQ2xpZW50KiBBbHRlcm5hdGl2ZVRleHRDb250cm9sbGVyOjpjbGll
bnQoKQogewogICAgIHJldHVybiBtX2ZyYW1lLT5wYWdlKCkgPyBtX2ZyYW1lLT5wYWdlKCktPmVk
aXRvckNsaWVudCgpIDogMDsKIH0KIAotVGV4dENoZWNrZXJDbGllbnQqIFNwZWxsaW5nQ29ycmVj
dGlvbkNvbnRyb2xsZXI6OnRleHRDaGVja2VyKCkKK1RleHRDaGVja2VyQ2xpZW50KiBBbHRlcm5h
dGl2ZVRleHRDb250cm9sbGVyOjp0ZXh0Q2hlY2tlcigpCiB7CiAgICAgaWYgKEVkaXRvckNsaWVu
dCogb3duZXIgPSBjbGllbnQoKSkKICAgICAgICAgcmV0dXJuIG93bmVyLT50ZXh0Q2hlY2tlcigp
OwogICAgIHJldHVybiAwOwogfQogCi12b2lkIFNwZWxsaW5nQ29ycmVjdGlvbkNvbnRyb2xsZXI6
OnJlY29yZEF1dG9jb3JyZWN0aW9uUmVzcG9uc2VSZXZlcnNlZChjb25zdCBTdHJpbmcmIHJlcGxh
Y2VkU3RyaW5nLCBjb25zdCBTdHJpbmcmIHJlcGxhY2VtZW50U3RyaW5nKQordm9pZCBBbHRlcm5h
dGl2ZVRleHRDb250cm9sbGVyOjpyZWNvcmRBdXRvY29ycmVjdGlvblJlc3BvbnNlUmV2ZXJzZWQo
Y29uc3QgU3RyaW5nJiByZXBsYWNlZFN0cmluZywgY29uc3QgU3RyaW5nJiByZXBsYWNlbWVudFN0
cmluZykKIHsKICAgICBjbGllbnQoKS0+cmVjb3JkQXV0b2NvcnJlY3Rpb25SZXNwb25zZShFZGl0
b3JDbGllbnQ6OkF1dG9jb3JyZWN0aW9uUmV2ZXJ0ZWQsIHJlcGxhY2VkU3RyaW5nLCByZXBsYWNl
bWVudFN0cmluZyk7CiB9CiAKLXZvaWQgU3BlbGxpbmdDb3JyZWN0aW9uQ29udHJvbGxlcjo6cmVj
b3JkQXV0b2NvcnJlY3Rpb25SZXNwb25zZVJldmVyc2VkKGNvbnN0IFN0cmluZyYgcmVwbGFjZWRT
dHJpbmcsIFBhc3NSZWZQdHI8UmFuZ2U+IHJlcGxhY2VtZW50UmFuZ2UpCit2b2lkIEFsdGVybmF0
aXZlVGV4dENvbnRyb2xsZXI6OnJlY29yZEF1dG9jb3JyZWN0aW9uUmVzcG9uc2VSZXZlcnNlZChj
b25zdCBTdHJpbmcmIHJlcGxhY2VkU3RyaW5nLCBQYXNzUmVmUHRyPFJhbmdlPiByZXBsYWNlbWVu
dFJhbmdlKQogewogICAgIHJlY29yZEF1dG9jb3JyZWN0aW9uUmVzcG9uc2VSZXZlcnNlZChyZXBs
YWNlZFN0cmluZywgcGxhaW5UZXh0KHJlcGxhY2VtZW50UmFuZ2UuZ2V0KCkpKTsKIH0KIAotdm9p
ZCBTcGVsbGluZ0NvcnJlY3Rpb25Db250cm9sbGVyOjptYXJrUmV2ZXJzZWQoUGFzc1JlZlB0cjxS
YW5nZT4gY2hhbmdlZFJhbmdlKQordm9pZCBBbHRlcm5hdGl2ZVRleHRDb250cm9sbGVyOjptYXJr
UmV2ZXJzZWQoUGFzc1JlZlB0cjxSYW5nZT4gY2hhbmdlZFJhbmdlKQogewogICAgIGNoYW5nZWRS
YW5nZS0+c3RhcnRDb250YWluZXIoKS0+ZG9jdW1lbnQoKS0+bWFya2VycygpLT5yZW1vdmVNYXJr
ZXJzKGNoYW5nZWRSYW5nZS5nZXQoKSwgRG9jdW1lbnRNYXJrZXI6OkF1dG9jb3JyZWN0ZWQsIERv
Y3VtZW50TWFya2VyQ29udHJvbGxlcjo6UmVtb3ZlUGFydGlhbGx5T3ZlcmxhcHBpbmdNYXJrZXIp
OwogICAgIGNoYW5nZWRSYW5nZS0+c3RhcnRDb250YWluZXIoKS0+ZG9jdW1lbnQoKS0+bWFya2Vy
cygpLT5hZGRNYXJrZXIoY2hhbmdlZFJhbmdlLmdldCgpLCBEb2N1bWVudE1hcmtlcjo6U3BlbGxD
aGVja2luZ0V4ZW1wdGlvbik7CiB9CiAKLXZvaWQgU3BlbGxpbmdDb3JyZWN0aW9uQ29udHJvbGxl
cjo6bWFya0NvcnJlY3Rpb24oUGFzc1JlZlB0cjxSYW5nZT4gcmVwbGFjZWRSYW5nZSwgY29uc3Qg
U3RyaW5nJiByZXBsYWNlZFN0cmluZykKK3ZvaWQgQWx0ZXJuYXRpdmVUZXh0Q29udHJvbGxlcjo6
bWFya0NvcnJlY3Rpb24oUGFzc1JlZlB0cjxSYW5nZT4gcmVwbGFjZWRSYW5nZSwgY29uc3QgU3Ry
aW5nJiByZXBsYWNlZFN0cmluZykKIHsKICAgICBWZWN0b3I8RG9jdW1lbnRNYXJrZXI6Ok1hcmtl
clR5cGU+IG1hcmtlclR5cGVzVG9BZGQgPSBtYXJrZXJUeXBlc0ZvckF1dG9jb3JyZWN0aW9uKCk7
CiAgICAgRG9jdW1lbnRNYXJrZXJDb250cm9sbGVyKiBtYXJrZXJzID0gcmVwbGFjZWRSYW5nZS0+
c3RhcnRDb250YWluZXIoKS0+ZG9jdW1lbnQoKS0+bWFya2VycygpOwpAQCAtNDg5LDcgKzUwNCw3
IEBAIHZvaWQgU3BlbGxpbmdDb3JyZWN0aW9uQ29udHJvbGxlcjo6bWFya0MKICAgICB9CiB9CiAK
LXZvaWQgU3BlbGxpbmdDb3JyZWN0aW9uQ29udHJvbGxlcjo6cmVjb3JkU3BlbGxjaGVja2VyUmVz
cG9uc2VGb3JNb2RpZmllZENvcnJlY3Rpb24oUmFuZ2UqIHJhbmdlT2ZDb3JyZWN0aW9uLCBjb25z
dCBTdHJpbmcmIGNvcnJlY3RlZCwgY29uc3QgU3RyaW5nJiBjb3JyZWN0aW9uKQordm9pZCBBbHRl
cm5hdGl2ZVRleHRDb250cm9sbGVyOjpyZWNvcmRTcGVsbGNoZWNrZXJSZXNwb25zZUZvck1vZGlm
aWVkQ29ycmVjdGlvbihSYW5nZSogcmFuZ2VPZkNvcnJlY3Rpb24sIGNvbnN0IFN0cmluZyYgY29y
cmVjdGVkLCBjb25zdCBTdHJpbmcmIGNvcnJlY3Rpb24pCiB7CiAgICAgaWYgKCFyYW5nZU9mQ29y
cmVjdGlvbikKICAgICAgICAgcmV0dXJuOwpAQCAtNTA3LDEzICs1MjIsMTMgQEAgdm9pZCBTcGVs
bGluZ0NvcnJlY3Rpb25Db250cm9sbGVyOjpyZWNvcgogICAgIG1hcmtlcnMtPnJlbW92ZU1hcmtl
cnMocmFuZ2VPZkNvcnJlY3Rpb24sIERvY3VtZW50TWFya2VyOjpBdXRvY29ycmVjdGVkLCBEb2N1
bWVudE1hcmtlckNvbnRyb2xsZXI6OlJlbW92ZVBhcnRpYWxseU92ZXJsYXBwaW5nTWFya2VyKTsK
IH0KIAotdm9pZCBTcGVsbGluZ0NvcnJlY3Rpb25Db250cm9sbGVyOjpkZWxldGVkQXV0b2NvcnJl
Y3Rpb25BdFBvc2l0aW9uKGNvbnN0IFBvc2l0aW9uJiBwb3NpdGlvbiwgY29uc3QgU3RyaW5nJiBv
cmlnaW5hbFN0cmluZykKK3ZvaWQgQWx0ZXJuYXRpdmVUZXh0Q29udHJvbGxlcjo6ZGVsZXRlZEF1
dG9jb3JyZWN0aW9uQXRQb3NpdGlvbihjb25zdCBQb3NpdGlvbiYgcG9zaXRpb24sIGNvbnN0IFN0
cmluZyYgb3JpZ2luYWxTdHJpbmcpCiB7CiAgICAgbV9vcmlnaW5hbFN0cmluZ0Zvckxhc3REZWxl
dGVkQXV0b2NvcnJlY3Rpb24gPSBvcmlnaW5hbFN0cmluZzsKICAgICBtX3Bvc2l0aW9uRm9yTGFz
dERlbGV0ZWRBdXRvY29ycmVjdGlvbiA9IHBvc2l0aW9uOwogfQogCi12b2lkIFNwZWxsaW5nQ29y
cmVjdGlvbkNvbnRyb2xsZXI6Om1hcmtQcmVjZWRpbmdXaGl0ZXNwYWNlRm9yRGVsZXRlZEF1dG9j
b3JyZWN0aW9uQWZ0ZXJDb21tYW5kKEVkaXRDb21tYW5kKiBjb21tYW5kKQordm9pZCBBbHRlcm5h
dGl2ZVRleHRDb250cm9sbGVyOjptYXJrUHJlY2VkaW5nV2hpdGVzcGFjZUZvckRlbGV0ZWRBdXRv
Y29ycmVjdGlvbkFmdGVyQ29tbWFuZChFZGl0Q29tbWFuZCogY29tbWFuZCkKIHsKICAgICBQb3Np
dGlvbiBlbmRPZlNlbGVjdGlvbiA9IGNvbW1hbmQtPmVuZGluZ1NlbGVjdGlvbigpLmVuZCgpOwog
ICAgIGlmIChlbmRPZlNlbGVjdGlvbiAhPSBtX3Bvc2l0aW9uRm9yTGFzdERlbGV0ZWRBdXRvY29y
cmVjdGlvbikKQEAgLTUzNCwxOSArNTQ5LDE5IEBAIHZvaWQgU3BlbGxpbmdDb3JyZWN0aW9uQ29u
dHJvbGxlcjo6bWFya1AKICAgICBtX2ZyYW1lLT5kb2N1bWVudCgpLT5tYXJrZXJzKCktPmFkZE1h
cmtlcihwcmVjZWRpbmdDaGFyYWN0ZXJSYW5nZS5nZXQoKSwgRG9jdW1lbnRNYXJrZXI6OkRlbGV0
ZWRBdXRvY29ycmVjdGlvbiwgbV9vcmlnaW5hbFN0cmluZ0Zvckxhc3REZWxldGVkQXV0b2NvcnJl
Y3Rpb24pOwogfQogCi1ib29sIFNwZWxsaW5nQ29ycmVjdGlvbkNvbnRyb2xsZXI6OnByb2Nlc3NN
YXJrZXJzT25UZXh0VG9CZVJlcGxhY2VkQnlSZXN1bHQoY29uc3QgVGV4dENoZWNraW5nUmVzdWx0
KiByZXN1bHQsIFJhbmdlKiByYW5nZVRvQmVSZXBsYWNlZCwgY29uc3QgU3RyaW5nJiBzdHJpbmdU
b0JlUmVwbGFjZWQpCitib29sIEFsdGVybmF0aXZlVGV4dENvbnRyb2xsZXI6OnByb2Nlc3NNYXJr
ZXJzT25UZXh0VG9CZVJlcGxhY2VkQnlSZXN1bHQoY29uc3QgVGV4dENoZWNraW5nUmVzdWx0KiBy
ZXN1bHQsIFJhbmdlKiByYW5nZVdpdGhBbHRlcm5hdGl2ZSwgY29uc3QgU3RyaW5nJiBzdHJpbmdU
b0JlUmVwbGFjZWQpCiB7CiAgICAgRG9jdW1lbnRNYXJrZXJDb250cm9sbGVyKiBtYXJrZXJDb250
cm9sbGVyID0gbV9mcmFtZS0+ZG9jdW1lbnQoKS0+bWFya2VycygpOwotICAgIGlmIChtYXJrZXJD
b250cm9sbGVyLT5oYXNNYXJrZXJzKHJhbmdlVG9CZVJlcGxhY2VkLCBEb2N1bWVudE1hcmtlcjo6
UmVwbGFjZW1lbnQpKSB7CisgICAgaWYgKG1hcmtlckNvbnRyb2xsZXItPmhhc01hcmtlcnMocmFu
Z2VXaXRoQWx0ZXJuYXRpdmUsIERvY3VtZW50TWFya2VyOjpSZXBsYWNlbWVudCkpIHsKICAgICAg
ICAgaWYgKHJlc3VsdC0+dHlwZSA9PSBUZXh0Q2hlY2tpbmdUeXBlQ29ycmVjdGlvbikKLSAgICAg
ICAgICAgIHJlY29yZFNwZWxsY2hlY2tlclJlc3BvbnNlRm9yTW9kaWZpZWRDb3JyZWN0aW9uKHJh
bmdlVG9CZVJlcGxhY2VkLCBzdHJpbmdUb0JlUmVwbGFjZWQsIHJlc3VsdC0+cmVwbGFjZW1lbnQp
OworICAgICAgICAgICAgcmVjb3JkU3BlbGxjaGVja2VyUmVzcG9uc2VGb3JNb2RpZmllZENvcnJl
Y3Rpb24ocmFuZ2VXaXRoQWx0ZXJuYXRpdmUsIHN0cmluZ1RvQmVSZXBsYWNlZCwgcmVzdWx0LT5y
ZXBsYWNlbWVudCk7CiAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICB9CiAKLSAgICBpZiAobWFy
a2VyQ29udHJvbGxlci0+aGFzTWFya2VycyhyYW5nZVRvQmVSZXBsYWNlZCwgRG9jdW1lbnRNYXJr
ZXI6OlJlamVjdGVkQ29ycmVjdGlvbikpCisgICAgaWYgKG1hcmtlckNvbnRyb2xsZXItPmhhc01h
cmtlcnMocmFuZ2VXaXRoQWx0ZXJuYXRpdmUsIERvY3VtZW50TWFya2VyOjpSZWplY3RlZENvcnJl
Y3Rpb24pKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKLSAgICBQb3NpdGlvbiBiZWdpbm5pbmdP
ZlJhbmdlID0gcmFuZ2VUb0JlUmVwbGFjZWQtPnN0YXJ0UG9zaXRpb24oKTsKKyAgICBQb3NpdGlv
biBiZWdpbm5pbmdPZlJhbmdlID0gcmFuZ2VXaXRoQWx0ZXJuYXRpdmUtPnN0YXJ0UG9zaXRpb24o
KTsKICAgICBQb3NpdGlvbiBwcmVjZWRpbmdDaGFyYWN0ZXJQb3NpdGlvbiA9IGJlZ2lubmluZ09m
UmFuZ2UucHJldmlvdXMoKTsKICAgICBSZWZQdHI8UmFuZ2U+IHByZWNlZGluZ0NoYXJhY3RlclJh
bmdlID0gUmFuZ2U6OmNyZWF0ZShtX2ZyYW1lLT5kb2N1bWVudCgpLCBwcmVjZWRpbmdDaGFyYWN0
ZXJQb3NpdGlvbiwgYmVnaW5uaW5nT2ZSYW5nZSk7CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2Vk
aXRpbmcvQWx0ZXJuYXRpdmVUZXh0Q29udHJvbGxlci5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9X
ZWJDb3JlL2VkaXRpbmcvQWx0ZXJuYXRpdmVUZXh0Q29udHJvbGxlci5oCShyZXZpc2lvbiAxMTI4
MzApCShmcm9tIFNvdXJjZS9XZWJDb3JlL2VkaXRpbmcvU3BlbGxpbmdDb3JyZWN0aW9uQ29udHJv
bGxlci5oOjExMjgzMCkKKysrIFNvdXJjZS9XZWJDb3JlL2VkaXRpbmcvQWx0ZXJuYXRpdmVUZXh0
Q29udHJvbGxlci5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMTU3IEBACisvKgorICogQ29w
eXJpZ2h0IChDKSAyMDEwIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBS
ZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9y
IHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRo
ZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9u
cyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2Ug
dGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlv
biBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4K
KyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIENPTVBVVEVSLCBJTkMu
IGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9G
IE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NF
IEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgQ09NUFVURVIsIElOQy4g
T1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJ
TkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFH
RVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VC
U1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9G
SVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkg
VEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFC
SUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFS
SVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZF
TiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisj
aWZuZGVmIFNwZWxsaW5nQ29ycmVjdGlvbkNvbnRyb2xsZXJfaAorI2RlZmluZSBTcGVsbGluZ0Nv
cnJlY3Rpb25Db250cm9sbGVyX2gKKworI2luY2x1ZGUgIkRvY3VtZW50TWFya2VyLmgiCisjaW5j
bHVkZSAiUmFuZ2UuaCIKKyNpbmNsdWRlICJUZXh0Q2hlY2tpbmcuaCIKKyNpbmNsdWRlICJUaW1l
ci5oIgorI2luY2x1ZGUgIlZpc2libGVTZWxlY3Rpb24uaCIKKyNpbmNsdWRlIDx3dGYvTm9uY29w
eWFibGUuaD4KKyNpbmNsdWRlIDx3dGYvVW51c2VkUGFyYW0uaD4KKworbmFtZXNwYWNlIFdlYkNv
cmUgeworCitjbGFzcyBDb21wb3NpdGVFZGl0Q29tbWFuZDsKK2NsYXNzIEVkaXRvckNsaWVudDsK
K2NsYXNzIEVkaXRDb21tYW5kOworY2xhc3MgRWRpdENvbW1hbmRDb21wb3NpdGlvbjsKK2NsYXNz
IEZyYW1lOworY2xhc3MgVGV4dENoZWNrZXJDbGllbnQ7CisKK3N0cnVjdCBDb3JyZWN0aW9uUGFu
ZWxJbmZvIHsKKyAgICBlbnVtIFBhbmVsVHlwZSB7CisgICAgICAgIFBhbmVsVHlwZUNvcnJlY3Rp
b24gPSAwLAorICAgICAgICBQYW5lbFR5cGVSZXZlcnNpb24sCisgICAgICAgIFBhbmVsVHlwZVNw
ZWxsaW5nU3VnZ2VzdGlvbnMKKyAgICB9OworCisgICAgUmVmUHRyPFJhbmdlPiByYW5nZVRvQmVS
ZXBsYWNlZDsKKyAgICBTdHJpbmcgcmVwbGFjZWRTdHJpbmc7CisgICAgU3RyaW5nIHJlcGxhY2Vt
ZW50U3RyaW5nOworICAgIFBhbmVsVHlwZSBwYW5lbFR5cGU7CisgICAgYm9vbCBpc0FjdGl2ZTsK
K307CisKK3N0cnVjdCBUZXh0Q2hlY2tpbmdSZXN1bHQ7CisKK2VudW0gUmVhc29uRm9yRGlzbWlz
c2luZ0NvcnJlY3Rpb25QYW5lbCB7CisgICAgUmVhc29uRm9yRGlzbWlzc2luZ0NvcnJlY3Rpb25Q
YW5lbENhbmNlbGxlZCA9IDAsCisgICAgUmVhc29uRm9yRGlzbWlzc2luZ0NvcnJlY3Rpb25QYW5l
bElnbm9yZWQsCisgICAgUmVhc29uRm9yRGlzbWlzc2luZ0NvcnJlY3Rpb25QYW5lbEFjY2VwdGVk
Cit9OworCisjaWYgVVNFKEFVVE9DT1JSRUNUSU9OX1BBTkVMKQorI2RlZmluZSBVTkxFU1NfRU5B
QkxFRChmdW5jdGlvbkJvZHkpIDsKKyNlbHNlCisjZGVmaW5lIFVOTEVTU19FTkFCTEVEKGZ1bmN0
aW9uQm9keSkgZnVuY3Rpb25Cb2R5CisjZW5kaWYKKworY2xhc3MgU3BlbGxpbmdDb3JyZWN0aW9u
Q29udHJvbGxlciB7CisgICAgV1RGX01BS0VfTk9OQ09QWUFCTEUoU3BlbGxpbmdDb3JyZWN0aW9u
Q29udHJvbGxlcik7IFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOworcHVibGljOgorICAgIFNwZWxs
aW5nQ29ycmVjdGlvbkNvbnRyb2xsZXIoRnJhbWUqKSBVTkxFU1NfRU5BQkxFRCh7fSkKKyAgICB+
U3BlbGxpbmdDb3JyZWN0aW9uQ29udHJvbGxlcigpIFVOTEVTU19FTkFCTEVEKHt9KQorCisgICAg
dm9pZCBzdGFydENvcnJlY3Rpb25QYW5lbFRpbWVyKENvcnJlY3Rpb25QYW5lbEluZm86OlBhbmVs
VHlwZSkgVU5MRVNTX0VOQUJMRUQoe30pCisgICAgdm9pZCBzdG9wQ29ycmVjdGlvblBhbmVsVGlt
ZXIoKSBVTkxFU1NfRU5BQkxFRCh7fSkKKworICAgIHZvaWQgZGlzbWlzcyhSZWFzb25Gb3JEaXNt
aXNzaW5nQ29ycmVjdGlvblBhbmVsKSBVTkxFU1NfRU5BQkxFRCh7fSkKKyAgICBTdHJpbmcgZGlz
bWlzc1Nvb24oUmVhc29uRm9yRGlzbWlzc2luZ0NvcnJlY3Rpb25QYW5lbCkgVU5MRVNTX0VOQUJM
RUQoeyByZXR1cm4gU3RyaW5nKCk7IH0pCisgICAgdm9pZCBzaG93KFBhc3NSZWZQdHI8UmFuZ2U+
IHJhbmdlVG9SZXBsYWNlLCBjb25zdCBTdHJpbmcmIHJlcGxhY2VtZW50KSBVTkxFU1NfRU5BQkxF
RCh7IFVOVVNFRF9QQVJBTShyYW5nZVRvUmVwbGFjZSk7IFVOVVNFRF9QQVJBTShyZXBsYWNlbWVu
dCk7IH0pCisKKyAgICB2b2lkIGFwcGx5Q29ycmVjdGlvblBhbmVsSW5mbyhjb25zdCBWZWN0b3I8
RG9jdW1lbnRNYXJrZXI6Ok1hcmtlclR5cGU+JikgVU5MRVNTX0VOQUJMRUQoe30pCisgICAgLy8g
UmV0dXJuIHRydWUgaWYgY29ycmVjdGlvbiB3YXMgYXBwbGllZCwgZmFsc2Ugb3RoZXJ3aXNlLgor
ICAgIGJvb2wgYXBwbHlBdXRvY29ycmVjdGlvbkJlZm9yZVR5cGluZ0lmQXBwcm9wcmlhdGUoKSBV
TkxFU1NfRU5BQkxFRCh7IHJldHVybiBmYWxzZTsgfSkKKworICAgIHZvaWQgcmVzcG9uZFRvVW5h
cHBsaWVkU3BlbGxDb3JyZWN0aW9uKGNvbnN0IFZpc2libGVTZWxlY3Rpb24mLCBjb25zdCBTdHJp
bmcmIGNvcnJlY3RlZCwgY29uc3QgU3RyaW5nJiBjb3JyZWN0aW9uKSBVTkxFU1NfRU5BQkxFRCh7
IFVOVVNFRF9QQVJBTShjb3JyZWN0ZWQpOyBVTlVTRURfUEFSQU0oY29ycmVjdGlvbik7IH0pCisg
ICAgdm9pZCByZXNwb25kVG9BcHBsaWVkRWRpdGluZyhDb21wb3NpdGVFZGl0Q29tbWFuZCopIFVO
TEVTU19FTkFCTEVEKHsgfSkKKyAgICB2b2lkIHJlc3BvbmRUb1VuYXBwbGllZEVkaXRpbmcoRWRp
dENvbW1hbmRDb21wb3NpdGlvbiopIFVOTEVTU19FTkFCTEVEKHsgfSkKKyAgICB2b2lkIHJlc3Bv
bmRUb0NoYW5nZWRTZWxlY3Rpb24oY29uc3QgVmlzaWJsZVNlbGVjdGlvbiYgb2xkU2VsZWN0aW9u
KSBVTkxFU1NfRU5BQkxFRCh7IFVOVVNFRF9QQVJBTShvbGRTZWxlY3Rpb24pOyB9KQorCisgICAg
dm9pZCBzdG9wUGVuZGluZ0NvcnJlY3Rpb24oY29uc3QgVmlzaWJsZVNlbGVjdGlvbiYgb2xkU2Vs
ZWN0aW9uKSBVTkxFU1NfRU5BQkxFRCh7IFVOVVNFRF9QQVJBTShvbGRTZWxlY3Rpb24pOyB9KQor
ICAgIHZvaWQgYXBwbHlQZW5kaW5nQ29ycmVjdGlvbihjb25zdCBWaXNpYmxlU2VsZWN0aW9uJiBz
ZWxlY3Rpb25BZnRlclR5cGluZykgVU5MRVNTX0VOQUJMRUQoeyBVTlVTRURfUEFSQU0oc2VsZWN0
aW9uQWZ0ZXJUeXBpbmcpOyB9KQorCisgICAgdm9pZCBoYW5kbGVDb3JyZWN0aW9uUGFuZWxSZXN1
bHQoY29uc3QgU3RyaW5nJiBjb3JyZWN0aW9uKSBVTkxFU1NfRU5BQkxFRCh7IFVOVVNFRF9QQVJB
TShjb3JyZWN0aW9uKTsgfSkKKyAgICB2b2lkIGhhbmRsZUNhbmNlbE9wZXJhdGlvbigpIFVOTEVT
U19FTkFCTEVEKHt9KQorCisgICAgYm9vbCBoYXNQZW5kaW5nQ29ycmVjdGlvbigpIGNvbnN0IFVO
TEVTU19FTkFCTEVEKHsgcmV0dXJuIGZhbHNlOyB9KQorICAgIGJvb2wgaXNTcGVsbGluZ01hcmtl
ckFsbG93ZWQoUGFzc1JlZlB0cjxSYW5nZT4gbWlzc3BlbGxpbmdSYW5nZSkgY29uc3QgVU5MRVNT
X0VOQUJMRUQoeyBVTlVTRURfUEFSQU0obWlzc3BlbGxpbmdSYW5nZSk7IHJldHVybiB0cnVlOyB9
KQorICAgIGJvb2wgaXNBdXRvbWF0aWNTcGVsbGluZ0NvcnJlY3Rpb25FbmFibGVkKCkgVU5MRVNT
X0VOQUJMRUQoeyByZXR1cm4gZmFsc2U7IH0pCisgICAgYm9vbCBzaG91bGRSZW1vdmVNYXJrZXJz
VXBvbkVkaXRpbmcoKTsKKworICAgIHZvaWQgY29ycmVjdGlvblBhbmVsVGltZXJGaXJlZChUaW1l
cjxTcGVsbGluZ0NvcnJlY3Rpb25Db250cm9sbGVyPiopIFVOTEVTU19FTkFCTEVEKHt9KQorICAg
IHZvaWQgcmVjb3JkQXV0b2NvcnJlY3Rpb25SZXNwb25zZVJldmVyc2VkKGNvbnN0IFN0cmluZyYg
cmVwbGFjZWRTdHJpbmcsIFBhc3NSZWZQdHI8UmFuZ2U+IHJlcGxhY2VtZW50UmFuZ2UpIFVOTEVT
U19FTkFCTEVEKHsgVU5VU0VEX1BBUkFNKHJlcGxhY2VkU3RyaW5nKTsgVU5VU0VEX1BBUkFNKHJl
cGxhY2VtZW50UmFuZ2UpOyB9KQorICAgIHZvaWQgbWFya1JldmVyc2VkKFBhc3NSZWZQdHI8UmFu
Z2U+IGNoYW5nZWRSYW5nZSkgVU5MRVNTX0VOQUJMRUQoeyBVTlVTRURfUEFSQU0oY2hhbmdlZFJh
bmdlKTsgfSkKKyAgICB2b2lkIG1hcmtDb3JyZWN0aW9uKFBhc3NSZWZQdHI8UmFuZ2U+IHJlcGxh
Y2VkUmFuZ2UsIGNvbnN0IFN0cmluZyYgcmVwbGFjZWRTdHJpbmcpIFVOTEVTU19FTkFCTEVEKHsg
VU5VU0VEX1BBUkFNKHJlcGxhY2VkUmFuZ2UpOyBVTlVTRURfUEFSQU0ocmVwbGFjZWRTdHJpbmcp
OyB9KQorICAgIHZvaWQgcmVjb3JkU3BlbGxjaGVja2VyUmVzcG9uc2VGb3JNb2RpZmllZENvcnJl
Y3Rpb24oUmFuZ2UqIHJhbmdlT2ZDb3JyZWN0aW9uLCBjb25zdCBTdHJpbmcmIGNvcnJlY3RlZCwg
Y29uc3QgU3RyaW5nJiBjb3JyZWN0aW9uKSBVTkxFU1NfRU5BQkxFRCh7IFVOVVNFRF9QQVJBTShy
YW5nZU9mQ29ycmVjdGlvbik7IFVOVVNFRF9QQVJBTShjb3JyZWN0ZWQpOyBVTlVTRURfUEFSQU0o
Y29ycmVjdGlvbik7IH0pCisKKyAgICAvLyBUaGlzIGZ1bmN0aW9uIHJldHVybnMgZmFsc2UgaWYg
dGhlIHJlcGxhY2VtZW50IHNob3VsZCBub3QgYmUgY2FycmllZCBvdXQuCisgICAgYm9vbCBwcm9j
ZXNzTWFya2Vyc09uVGV4dFRvQmVSZXBsYWNlZEJ5UmVzdWx0KGNvbnN0IFRleHRDaGVja2luZ1Jl
c3VsdCosIFJhbmdlKiByYW5nZVRvQmVSZXBsYWNlZCwgY29uc3QgU3RyaW5nJiBzdHJpbmdUb0Jl
UmVwbGFjZWQpIFVOTEVTU19FTkFCTEVEKHsgVU5VU0VEX1BBUkFNKHJhbmdlVG9CZVJlcGxhY2Vk
KTsgVU5VU0VEX1BBUkFNKHN0cmluZ1RvQmVSZXBsYWNlZCk7IHJldHVybiB0cnVlOyB9KTsKKyAg
ICB2b2lkIGRlbGV0ZWRBdXRvY29ycmVjdGlvbkF0UG9zaXRpb24oY29uc3QgUG9zaXRpb24mLCBj
b25zdCBTdHJpbmcmIG9yaWdpbmFsU3RyaW5nKSBVTkxFU1NfRU5BQkxFRCh7IFVOVVNFRF9QQVJB
TShvcmlnaW5hbFN0cmluZyk7IH0pCisKKyNpZiBVU0UoQVVUT0NPUlJFQ1RJT05fUEFORUwpCitw
cml2YXRlOgorICAgIHZvaWQgcmVjb3JkQXV0b2NvcnJlY3Rpb25SZXNwb25zZVJldmVyc2VkKGNv
bnN0IFN0cmluZyYgcmVwbGFjZWRTdHJpbmcsIGNvbnN0IFN0cmluZyYgcmVwbGFjZW1lbnRTdHJp
bmcpOworCisgICAgYm9vbCBzaG91bGRTdGFydFRpbWVyRm9yKGNvbnN0IERvY3VtZW50TWFya2Vy
KiBtYXJrZXIsIGludCBlbmRPZmZzZXQpIGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4gKCgo
bWFya2VyLT50eXBlKCkgPT0gRG9jdW1lbnRNYXJrZXI6OlJlcGxhY2VtZW50ICYmICFtYXJrZXIt
PmRlc2NyaXB0aW9uKCkuaXNOdWxsKCkpIAorICAgICAgICAgICAgICAgICB8fCBtYXJrZXItPnR5
cGUoKSA9PSBEb2N1bWVudE1hcmtlcjo6U3BlbGxpbmcpICYmIHN0YXRpY19jYXN0PGludD4obWFy
a2VyLT5lbmRPZmZzZXQoKSkgPT0gZW5kT2Zmc2V0KTsKKyAgICB9CisKKyAgICBFZGl0b3JDbGll
bnQqIGNsaWVudCgpOworICAgIFRleHRDaGVja2VyQ2xpZW50KiB0ZXh0Q2hlY2tlcigpOworICAg
IEZsb2F0UmVjdCByb290Vmlld1JlY3RGb3JSYW5nZShjb25zdCBSYW5nZSopIGNvbnN0OworICAg
IHZvaWQgbWFya1ByZWNlZGluZ1doaXRlc3BhY2VGb3JEZWxldGVkQXV0b2NvcnJlY3Rpb25BZnRl
ckNvbW1hbmQoRWRpdENvbW1hbmQqKTsKKworICAgIEVkaXRvckNsaWVudCogbV9jbGllbnQ7Cisg
ICAgRnJhbWUqIG1fZnJhbWU7CisKKyAgICBUaW1lcjxTcGVsbGluZ0NvcnJlY3Rpb25Db250cm9s
bGVyPiBtX2NvcnJlY3Rpb25QYW5lbFRpbWVyOworICAgIENvcnJlY3Rpb25QYW5lbEluZm8gbV9j
b3JyZWN0aW9uUGFuZWxJbmZvOworICAgIGJvb2wgbV9jb3JyZWN0aW9uUGFuZWxJc0Rpc21pc3Nl
ZEJ5RWRpdG9yOworCisgICAgU3RyaW5nIG1fb3JpZ2luYWxTdHJpbmdGb3JMYXN0RGVsZXRlZEF1
dG9jb3JyZWN0aW9uOworICAgIFBvc2l0aW9uIG1fcG9zaXRpb25Gb3JMYXN0RGVsZXRlZEF1dG9j
b3JyZWN0aW9uOworI2VuZGlmCit9OworCisjdW5kZWYgVU5MRVNTX0VOQUJMRUQKKworaW5saW5l
IGJvb2wgU3BlbGxpbmdDb3JyZWN0aW9uQ29udHJvbGxlcjo6c2hvdWxkUmVtb3ZlTWFya2Vyc1Vw
b25FZGl0aW5nKCkKK3sKKyNpZiBVU0UoTUFSS0VSX1JFTU9WQUxfVVBPTl9FRElUSU5HKQorICAg
IHJldHVybiB0cnVlOworI2Vsc2UKKyAgICByZXR1cm4gZmFsc2U7CisjZW5kaWYKK30KKworfSAv
LyBuYW1lc3BhY2UgV2ViQ29yZQorCisjZW5kaWYgLy8gU3BlbGxpbmdDb3JyZWN0aW9uQ29udHJv
bGxlcl9oCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0FsdGVybmF0aXZlVGV4dENvbnRy
b2xsZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0FsdGVybmF0aXZl
VGV4dENvbnRyb2xsZXIuaAkocmV2aXNpb24gMTEyODMwKQorKysgU291cmNlL1dlYkNvcmUvZWRp
dGluZy9BbHRlcm5hdGl2ZVRleHRDb250cm9sbGVyLmgJKHdvcmtpbmcgY29weSkKQEAgLTIzLDgg
KzIzLDggQEAKICAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9T
U0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCiAgKi8KIAotI2lmbmRlZiBTcGVsbGluZ0NvcnJlY3Rp
b25Db250cm9sbGVyX2gKLSNkZWZpbmUgU3BlbGxpbmdDb3JyZWN0aW9uQ29udHJvbGxlcl9oCisj
aWZuZGVmIEFsdGVybmF0aXZlVGV4dENvbnRyb2xsZXJfaAorI2RlZmluZSBBbHRlcm5hdGl2ZVRl
eHRDb250cm9sbGVyX2gKIAogI2luY2x1ZGUgIkRvY3VtZW50TWFya2VyLmgiCiAjaW5jbHVkZSAi
UmFuZ2UuaCIKQEAgLTQzLDQ4ICs0Myw1NiBAQCBjbGFzcyBFZGl0Q29tbWFuZENvbXBvc2l0aW9u
OwogY2xhc3MgRnJhbWU7CiBjbGFzcyBUZXh0Q2hlY2tlckNsaWVudDsKIAotc3RydWN0IENvcnJl
Y3Rpb25QYW5lbEluZm8gewotICAgIGVudW0gUGFuZWxUeXBlIHsKLSAgICAgICAgUGFuZWxUeXBl
Q29ycmVjdGlvbiA9IDAsCi0gICAgICAgIFBhbmVsVHlwZVJldmVyc2lvbiwKLSAgICAgICAgUGFu
ZWxUeXBlU3BlbGxpbmdTdWdnZXN0aW9ucwotICAgIH07Ci0KLSAgICBSZWZQdHI8UmFuZ2U+IHJh
bmdlVG9CZVJlcGxhY2VkOwotICAgIFN0cmluZyByZXBsYWNlZFN0cmluZzsKLSAgICBTdHJpbmcg
cmVwbGFjZW1lbnRTdHJpbmc7Ci0gICAgUGFuZWxUeXBlIHBhbmVsVHlwZTsKK2NsYXNzIEFsdGVy
bmF0aXZlVGV4dERldGFpbHMgOiBwdWJsaWMgUmVmQ291bnRlZDxBbHRlcm5hdGl2ZVRleHREZXRh
aWxzPiB7CitwdWJsaWM6CisgICAgQWx0ZXJuYXRpdmVUZXh0RGV0YWlscygpIHsgfQorICAgIHZp
cnR1YWwgfkFsdGVybmF0aXZlVGV4dERldGFpbHMoKSB7IH0KK307CisKK2VudW0gQWx0ZXJuYXRp
dmVUZXh0VHlwZSB7CisgICAgQWx0ZXJuYXRpdmVUZXh0VHlwZUNvcnJlY3Rpb24gPSAwLAorICAg
IEFsdGVybmF0aXZlVGV4dFR5cGVSZXZlcnNpb24sCisgICAgQWx0ZXJuYXRpdmVUZXh0VHlwZVNw
ZWxsaW5nU3VnZ2VzdGlvbnMsCit9OworCitzdHJ1Y3QgQWx0ZXJuYXRpdmVUZXh0SW5mbyB7Cisg
ICAgUmVmUHRyPFJhbmdlPiByYW5nZVdpdGhBbHRlcm5hdGl2ZTsKICAgICBib29sIGlzQWN0aXZl
OworICAgIEFsdGVybmF0aXZlVGV4dFR5cGUgdHlwZTsKKyAgICBTdHJpbmcgb3JpZ2luYWxUZXh0
OworICAgIFJlZlB0cjxBbHRlcm5hdGl2ZVRleHREZXRhaWxzPiBkZXRhaWxzOwogfTsKIAogc3Ry
dWN0IFRleHRDaGVja2luZ1Jlc3VsdDsKIAotZW51bSBSZWFzb25Gb3JEaXNtaXNzaW5nQ29ycmVj
dGlvblBhbmVsIHsKLSAgICBSZWFzb25Gb3JEaXNtaXNzaW5nQ29ycmVjdGlvblBhbmVsQ2FuY2Vs
bGVkID0gMCwKLSAgICBSZWFzb25Gb3JEaXNtaXNzaW5nQ29ycmVjdGlvblBhbmVsSWdub3JlZCwK
LSAgICBSZWFzb25Gb3JEaXNtaXNzaW5nQ29ycmVjdGlvblBhbmVsQWNjZXB0ZWQKK2VudW0gUmVh
c29uRm9yRGlzbWlzc2luZ0FsdGVybmF0aXZlVGV4dCB7CisgICAgUmVhc29uRm9yRGlzbWlzc2lu
Z0FsdGVybmF0aXZlVGV4dENhbmNlbGxlZCA9IDAsCisgICAgUmVhc29uRm9yRGlzbWlzc2luZ0Fs
dGVybmF0aXZlVGV4dElnbm9yZWQsCisgICAgUmVhc29uRm9yRGlzbWlzc2luZ0FsdGVybmF0aXZl
VGV4dEFjY2VwdGVkCiB9OwogCiAjaWYgVVNFKEFVVE9DT1JSRUNUSU9OX1BBTkVMKQotI2RlZmlu
ZSBVTkxFU1NfRU5BQkxFRChmdW5jdGlvbkJvZHkpIDsKKy8vIFRoZXNlIGJhY2tzbGFzaGVzIGFy
ZSBmb3IgbWFraW5nIHN0eWxlIGNoZWNrZXIgaGFwcHkuCisjZGVmaW5lIFVOTEVTU19FTkFCTEVE
KGZ1bmN0aW9uQm9keSkgXAorO1wKKwogI2Vsc2UKICNkZWZpbmUgVU5MRVNTX0VOQUJMRUQoZnVu
Y3Rpb25Cb2R5KSBmdW5jdGlvbkJvZHkKICNlbmRpZgogCi1jbGFzcyBTcGVsbGluZ0NvcnJlY3Rp
b25Db250cm9sbGVyIHsKLSAgICBXVEZfTUFLRV9OT05DT1BZQUJMRShTcGVsbGluZ0NvcnJlY3Rp
b25Db250cm9sbGVyKTsgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7CitjbGFzcyBBbHRlcm5hdGl2
ZVRleHRDb250cm9sbGVyIHsKKyAgICBXVEZfTUFLRV9OT05DT1BZQUJMRShBbHRlcm5hdGl2ZVRl
eHRDb250cm9sbGVyKTsKKyAgICBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsKIHB1YmxpYzoKLSAg
ICBTcGVsbGluZ0NvcnJlY3Rpb25Db250cm9sbGVyKEZyYW1lKikgVU5MRVNTX0VOQUJMRUQoe30p
Ci0gICAgflNwZWxsaW5nQ29ycmVjdGlvbkNvbnRyb2xsZXIoKSBVTkxFU1NfRU5BQkxFRCh7fSkK
KyAgICBBbHRlcm5hdGl2ZVRleHRDb250cm9sbGVyKEZyYW1lKikgVU5MRVNTX0VOQUJMRUQoeyB9
KQorICAgIH5BbHRlcm5hdGl2ZVRleHRDb250cm9sbGVyKCkgVU5MRVNTX0VOQUJMRUQoeyB9KQog
Ci0gICAgdm9pZCBzdGFydENvcnJlY3Rpb25QYW5lbFRpbWVyKENvcnJlY3Rpb25QYW5lbEluZm86
OlBhbmVsVHlwZSkgVU5MRVNTX0VOQUJMRUQoe30pCi0gICAgdm9pZCBzdG9wQ29ycmVjdGlvblBh
bmVsVGltZXIoKSBVTkxFU1NfRU5BQkxFRCh7fSkKKyAgICB2b2lkIHN0YXJ0QWx0ZXJuYXRpdmVU
ZXh0VUlUaW1lcihBbHRlcm5hdGl2ZVRleHRUeXBlKSBVTkxFU1NfRU5BQkxFRCh7IH0pCisgICAg
dm9pZCBzdG9wQWx0ZXJuYXRpdmVUZXh0VUlUaW1lcigpIFVOTEVTU19FTkFCTEVEKHsgfSkKIAot
ICAgIHZvaWQgZGlzbWlzcyhSZWFzb25Gb3JEaXNtaXNzaW5nQ29ycmVjdGlvblBhbmVsKSBVTkxF
U1NfRU5BQkxFRCh7fSkKLSAgICBTdHJpbmcgZGlzbWlzc1Nvb24oUmVhc29uRm9yRGlzbWlzc2lu
Z0NvcnJlY3Rpb25QYW5lbCkgVU5MRVNTX0VOQUJMRUQoeyByZXR1cm4gU3RyaW5nKCk7IH0pCisg
ICAgdm9pZCBkaXNtaXNzKFJlYXNvbkZvckRpc21pc3NpbmdBbHRlcm5hdGl2ZVRleHQpIFVOTEVT
U19FTkFCTEVEKHsgfSkKICAgICB2b2lkIHNob3coUGFzc1JlZlB0cjxSYW5nZT4gcmFuZ2VUb1Jl
cGxhY2UsIGNvbnN0IFN0cmluZyYgcmVwbGFjZW1lbnQpIFVOTEVTU19FTkFCTEVEKHsgVU5VU0VE
X1BBUkFNKHJhbmdlVG9SZXBsYWNlKTsgVU5VU0VEX1BBUkFNKHJlcGxhY2VtZW50KTsgfSkKIAot
ICAgIHZvaWQgYXBwbHlDb3JyZWN0aW9uUGFuZWxJbmZvKGNvbnN0IFZlY3RvcjxEb2N1bWVudE1h
cmtlcjo6TWFya2VyVHlwZT4mKSBVTkxFU1NfRU5BQkxFRCh7fSkKICAgICAvLyBSZXR1cm4gdHJ1
ZSBpZiBjb3JyZWN0aW9uIHdhcyBhcHBsaWVkLCBmYWxzZSBvdGhlcndpc2UuCiAgICAgYm9vbCBh
cHBseUF1dG9jb3JyZWN0aW9uQmVmb3JlVHlwaW5nSWZBcHByb3ByaWF0ZSgpIFVOTEVTU19FTkFC
TEVEKHsgcmV0dXJuIGZhbHNlOyB9KQogCkBAIC05NiwxOSArMTA0LDE3IEBAIHB1YmxpYzoKICAg
ICB2b2lkIHN0b3BQZW5kaW5nQ29ycmVjdGlvbihjb25zdCBWaXNpYmxlU2VsZWN0aW9uJiBvbGRT
ZWxlY3Rpb24pIFVOTEVTU19FTkFCTEVEKHsgVU5VU0VEX1BBUkFNKG9sZFNlbGVjdGlvbik7IH0p
CiAgICAgdm9pZCBhcHBseVBlbmRpbmdDb3JyZWN0aW9uKGNvbnN0IFZpc2libGVTZWxlY3Rpb24m
IHNlbGVjdGlvbkFmdGVyVHlwaW5nKSBVTkxFU1NfRU5BQkxFRCh7IFVOVVNFRF9QQVJBTShzZWxl
Y3Rpb25BZnRlclR5cGluZyk7IH0pCiAKLSAgICB2b2lkIGhhbmRsZUNvcnJlY3Rpb25QYW5lbFJl
c3VsdChjb25zdCBTdHJpbmcmIGNvcnJlY3Rpb24pIFVOTEVTU19FTkFCTEVEKHsgVU5VU0VEX1BB
UkFNKGNvcnJlY3Rpb24pOyB9KQotICAgIHZvaWQgaGFuZGxlQ2FuY2VsT3BlcmF0aW9uKCkgVU5M
RVNTX0VOQUJMRUQoe30pCisgICAgdm9pZCBoYW5kbGVBbHRlcm5hdGl2ZVRleHRVSVJlc3VsdChj
b25zdCBTdHJpbmcmIHJlc3VsdCkgVU5MRVNTX0VOQUJMRUQoeyBVTlVTRURfUEFSQU0ocmVzdWx0
KTsgfSkKKyAgICB2b2lkIGhhbmRsZUNhbmNlbE9wZXJhdGlvbigpIFVOTEVTU19FTkFCTEVEKHsg
fSkKIAogICAgIGJvb2wgaGFzUGVuZGluZ0NvcnJlY3Rpb24oKSBjb25zdCBVTkxFU1NfRU5BQkxF
RCh7IHJldHVybiBmYWxzZTsgfSkKICAgICBib29sIGlzU3BlbGxpbmdNYXJrZXJBbGxvd2VkKFBh
c3NSZWZQdHI8UmFuZ2U+IG1pc3NwZWxsaW5nUmFuZ2UpIGNvbnN0IFVOTEVTU19FTkFCTEVEKHsg
VU5VU0VEX1BBUkFNKG1pc3NwZWxsaW5nUmFuZ2UpOyByZXR1cm4gdHJ1ZTsgfSkKICAgICBib29s
IGlzQXV0b21hdGljU3BlbGxpbmdDb3JyZWN0aW9uRW5hYmxlZCgpIFVOTEVTU19FTkFCTEVEKHsg
cmV0dXJuIGZhbHNlOyB9KQogICAgIGJvb2wgc2hvdWxkUmVtb3ZlTWFya2Vyc1Vwb25FZGl0aW5n
KCk7CiAKLSAgICB2b2lkIGNvcnJlY3Rpb25QYW5lbFRpbWVyRmlyZWQoVGltZXI8U3BlbGxpbmdD
b3JyZWN0aW9uQ29udHJvbGxlcj4qKSBVTkxFU1NfRU5BQkxFRCh7fSkKICAgICB2b2lkIHJlY29y
ZEF1dG9jb3JyZWN0aW9uUmVzcG9uc2VSZXZlcnNlZChjb25zdCBTdHJpbmcmIHJlcGxhY2VkU3Ry
aW5nLCBQYXNzUmVmUHRyPFJhbmdlPiByZXBsYWNlbWVudFJhbmdlKSBVTkxFU1NfRU5BQkxFRCh7
IFVOVVNFRF9QQVJBTShyZXBsYWNlZFN0cmluZyk7IFVOVVNFRF9QQVJBTShyZXBsYWNlbWVudFJh
bmdlKTsgfSkKICAgICB2b2lkIG1hcmtSZXZlcnNlZChQYXNzUmVmUHRyPFJhbmdlPiBjaGFuZ2Vk
UmFuZ2UpIFVOTEVTU19FTkFCTEVEKHsgVU5VU0VEX1BBUkFNKGNoYW5nZWRSYW5nZSk7IH0pCiAg
ICAgdm9pZCBtYXJrQ29ycmVjdGlvbihQYXNzUmVmUHRyPFJhbmdlPiByZXBsYWNlZFJhbmdlLCBj
b25zdCBTdHJpbmcmIHJlcGxhY2VkU3RyaW5nKSBVTkxFU1NfRU5BQkxFRCh7IFVOVVNFRF9QQVJB
TShyZXBsYWNlZFJhbmdlKTsgVU5VU0VEX1BBUkFNKHJlcGxhY2VkU3RyaW5nKTsgfSkKLSAgICB2
b2lkIHJlY29yZFNwZWxsY2hlY2tlclJlc3BvbnNlRm9yTW9kaWZpZWRDb3JyZWN0aW9uKFJhbmdl
KiByYW5nZU9mQ29ycmVjdGlvbiwgY29uc3QgU3RyaW5nJiBjb3JyZWN0ZWQsIGNvbnN0IFN0cmlu
ZyYgY29ycmVjdGlvbikgVU5MRVNTX0VOQUJMRUQoeyBVTlVTRURfUEFSQU0ocmFuZ2VPZkNvcnJl
Y3Rpb24pOyBVTlVTRURfUEFSQU0oY29ycmVjdGVkKTsgVU5VU0VEX1BBUkFNKGNvcnJlY3Rpb24p
OyB9KQogCiAgICAgLy8gVGhpcyBmdW5jdGlvbiByZXR1cm5zIGZhbHNlIGlmIHRoZSByZXBsYWNl
bWVudCBzaG91bGQgbm90IGJlIGNhcnJpZWQgb3V0LgogICAgIGJvb2wgcHJvY2Vzc01hcmtlcnNP
blRleHRUb0JlUmVwbGFjZWRCeVJlc3VsdChjb25zdCBUZXh0Q2hlY2tpbmdSZXN1bHQqLCBSYW5n
ZSogcmFuZ2VUb0JlUmVwbGFjZWQsIGNvbnN0IFN0cmluZyYgc3RyaW5nVG9CZVJlcGxhY2VkKSBV
TkxFU1NfRU5BQkxFRCh7IFVOVVNFRF9QQVJBTShyYW5nZVRvQmVSZXBsYWNlZCk7IFVOVVNFRF9Q
QVJBTShzdHJpbmdUb0JlUmVwbGFjZWQpOyByZXR1cm4gdHJ1ZTsgfSk7CkBAIC0xMTYsNyArMTIy
LDExIEBAIHB1YmxpYzoKIAogI2lmIFVTRShBVVRPQ09SUkVDVElPTl9QQU5FTCkKIHByaXZhdGU6
CisgICAgU3RyaW5nIGRpc21pc3NTb29uKFJlYXNvbkZvckRpc21pc3NpbmdBbHRlcm5hdGl2ZVRl
eHQpOworICAgIHZvaWQgYXBwbHlBbHRlcm5hdGl2ZVRleHQoY29uc3QgU3RyaW5nJiBhbHRlcm5h
dGl2ZSwgY29uc3QgVmVjdG9yPERvY3VtZW50TWFya2VyOjpNYXJrZXJUeXBlPiYpOworICAgIHZv
aWQgdGltZXJGaXJlZChUaW1lcjxBbHRlcm5hdGl2ZVRleHRDb250cm9sbGVyPiopOwogICAgIHZv
aWQgcmVjb3JkQXV0b2NvcnJlY3Rpb25SZXNwb25zZVJldmVyc2VkKGNvbnN0IFN0cmluZyYgcmVw
bGFjZWRTdHJpbmcsIGNvbnN0IFN0cmluZyYgcmVwbGFjZW1lbnRTdHJpbmcpOworICAgIHZvaWQg
cmVjb3JkU3BlbGxjaGVja2VyUmVzcG9uc2VGb3JNb2RpZmllZENvcnJlY3Rpb24oUmFuZ2UqIHJh
bmdlT2ZDb3JyZWN0aW9uLCBjb25zdCBTdHJpbmcmIGNvcnJlY3RlZCwgY29uc3QgU3RyaW5nJiBj
b3JyZWN0aW9uKTsKIAogICAgIGJvb2wgc2hvdWxkU3RhcnRUaW1lckZvcihjb25zdCBEb2N1bWVu
dE1hcmtlciogbWFya2VyLCBpbnQgZW5kT2Zmc2V0KSBjb25zdAogICAgIHsKQEAgLTEzMiw5ICsx
NDIsOSBAQCBwcml2YXRlOgogICAgIEVkaXRvckNsaWVudCogbV9jbGllbnQ7CiAgICAgRnJhbWUq
IG1fZnJhbWU7CiAKLSAgICBUaW1lcjxTcGVsbGluZ0NvcnJlY3Rpb25Db250cm9sbGVyPiBtX2Nv
cnJlY3Rpb25QYW5lbFRpbWVyOwotICAgIENvcnJlY3Rpb25QYW5lbEluZm8gbV9jb3JyZWN0aW9u
UGFuZWxJbmZvOwotICAgIGJvb2wgbV9jb3JyZWN0aW9uUGFuZWxJc0Rpc21pc3NlZEJ5RWRpdG9y
OworICAgIFRpbWVyPEFsdGVybmF0aXZlVGV4dENvbnRyb2xsZXI+IG1fdGltZXI7CisgICAgQWx0
ZXJuYXRpdmVUZXh0SW5mbyBtX2FsdGVybmF0aXZlVGV4dEluZm87CisgICAgYm9vbCBtX2lzRGlz
bWlzc2VkQnlFZGl0aW5nOwogCiAgICAgU3RyaW5nIG1fb3JpZ2luYWxTdHJpbmdGb3JMYXN0RGVs
ZXRlZEF1dG9jb3JyZWN0aW9uOwogICAgIFBvc2l0aW9uIG1fcG9zaXRpb25Gb3JMYXN0RGVsZXRl
ZEF1dG9jb3JyZWN0aW9uOwpAQCAtMTQzLDcgKzE1Myw3IEBAIHByaXZhdGU6CiAKICN1bmRlZiBV
TkxFU1NfRU5BQkxFRAogCi1pbmxpbmUgYm9vbCBTcGVsbGluZ0NvcnJlY3Rpb25Db250cm9sbGVy
OjpzaG91bGRSZW1vdmVNYXJrZXJzVXBvbkVkaXRpbmcoKQoraW5saW5lIGJvb2wgQWx0ZXJuYXRp
dmVUZXh0Q29udHJvbGxlcjo6c2hvdWxkUmVtb3ZlTWFya2Vyc1Vwb25FZGl0aW5nKCkKIHsKICNp
ZiBVU0UoTUFSS0VSX1JFTU9WQUxfVVBPTl9FRElUSU5HKQogICAgIHJldHVybiB0cnVlOwpAQCAt
MTU0LDQgKzE2NCw0IEBAIGlubGluZSBib29sIFNwZWxsaW5nQ29ycmVjdGlvbkNvbnRyb2xsZXIK
IAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQogCi0jZW5kaWYgLy8gU3BlbGxpbmdDb3JyZWN0aW9u
Q29udHJvbGxlcl9oCisjZW5kaWYgLy8gQWx0ZXJuYXRpdmVUZXh0Q29udHJvbGxlcl9oCkluZGV4
OiBTb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0VkaXRpbmdBbGxJbk9uZS5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1dlYkNvcmUvZWRpdGluZy9FZGl0aW5nQWxsSW5PbmUuY3BwCShyZXZpc2lvbiAx
MTI5NjEpCisrKyBTb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0VkaXRpbmdBbGxJbk9uZS5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTI1LDYgKzI1LDcgQEAKIAogLy8gVGhpcyBhbGwtaW4tb25lIGNwcCBm
aWxlIGN1dHMgZG93biBvbiB0ZW1wbGF0ZSBibG9hdCB0byBhbGxvdyB1cyB0byBidWlsZCBvdXIg
V2luZG93cyByZWxlYXNlIGJ1aWxkLgogCisjaW5jbHVkZSA8QWx0ZXJuYXRpdmVUZXh0Q29udHJv
bGxlci5jcHA+CiAjaW5jbHVkZSA8QXBwZW5kTm9kZUNvbW1hbmQuY3BwPgogI2luY2x1ZGUgPEFw
cGx5QmxvY2tFbGVtZW50Q29tbWFuZC5jcHA+CiAjaW5jbHVkZSA8QXBwbHlTdHlsZUNvbW1hbmQu
Y3BwPgpAQCAtNjUsNyArNjYsNiBAQAogI2luY2x1ZGUgPFNtYXJ0UmVwbGFjZS5jcHA+CiAjaW5j
bHVkZSA8U21hcnRSZXBsYWNlQ0YuY3BwPgogI2luY2x1ZGUgPFNwZWxsaW5nQ29ycmVjdGlvbkNv
bW1hbmQuY3BwPgotI2luY2x1ZGUgPFNwZWxsaW5nQ29ycmVjdGlvbkNvbnRyb2xsZXIuY3BwPgog
I2luY2x1ZGUgPFNwZWxsQ2hlY2tlci5jcHA+CiAjaW5jbHVkZSA8U3BsaXRFbGVtZW50Q29tbWFu
ZC5jcHA+CiAjaW5jbHVkZSA8U3BsaXRUZXh0Tm9kZUNvbW1hbmQuY3BwPgpJbmRleDogU291cmNl
L1dlYkNvcmUvZWRpdGluZy9FZGl0b3IuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3Jl
L2VkaXRpbmcvRWRpdG9yLmNwcAkocmV2aXNpb24gMTEyOTYxKQorKysgU291cmNlL1dlYkNvcmUv
ZWRpdGluZy9FZGl0b3IuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yOCw2ICsyOCw3IEBACiAjaW5j
bHVkZSAiRWRpdG9yLmgiCiAKICNpbmNsdWRlICJBWE9iamVjdENhY2hlLmgiCisjaW5jbHVkZSAi
QWx0ZXJuYXRpdmVUZXh0Q29udHJvbGxlci5oIgogI2luY2x1ZGUgIkFwcGx5U3R5bGVDb21tYW5k
LmgiCiAjaW5jbHVkZSAiQ1NTQ29tcHV0ZWRTdHlsZURlY2xhcmF0aW9uLmgiCiAjaW5jbHVkZSAi
Q1NTUHJvcGVydHkuaCIKQEAgLTM3LDcgKzM4LDYgQEAKICNpbmNsdWRlICJDYWNoZWRSZXNvdXJj
ZUxvYWRlci5oIgogI2luY2x1ZGUgIkNsaXBib2FyZEV2ZW50LmgiCiAjaW5jbHVkZSAiQ29tcG9z
aXRpb25FdmVudC5oIgotI2luY2x1ZGUgIlNwZWxsaW5nQ29ycmVjdGlvbkNvbnRyb2xsZXIuaCIK
ICNpbmNsdWRlICJDcmVhdGVMaW5rQ29tbWFuZC5oIgogI2luY2x1ZGUgIkRlbGV0ZUJ1dHRvbkNv
bnRyb2xsZXIuaCIKICNpbmNsdWRlICJEZWxldGVTZWxlY3Rpb25Db21tYW5kLmgiCkBAIC00ODIs
NyArNDgyLDcgQEAgdm9pZCBFZGl0b3I6OnJlc3BvbmRUb0NoYW5nZWRTZWxlY3Rpb24oYwogICAg
ICAgICBjbGllbnQoKS0+cmVzcG9uZFRvQ2hhbmdlZFNlbGVjdGlvbihtX2ZyYW1lKTsKICAgICBz
ZXRTdGFydE5ld0tpbGxSaW5nU2VxdWVuY2UodHJ1ZSk7CiAgICAgbV9kZWxldGVCdXR0b25Db250
cm9sbGVyLT5yZXNwb25kVG9DaGFuZ2VkU2VsZWN0aW9uKG9sZFNlbGVjdGlvbik7Ci0gICAgbV9z
cGVsbGluZ0NvcnJlY3Rvci0+cmVzcG9uZFRvQ2hhbmdlZFNlbGVjdGlvbihvbGRTZWxlY3Rpb24p
OworICAgIG1fYWx0ZXJuYXRpdmVUZXh0Q29udHJvbGxlci0+cmVzcG9uZFRvQ2hhbmdlZFNlbGVj
dGlvbihvbGRTZWxlY3Rpb24pOwogfQogCiB2b2lkIEVkaXRvcjo6cmVzcG9uZFRvQ2hhbmdlZENv
bnRlbnRzKGNvbnN0IFZpc2libGVTZWxlY3Rpb24mIGVuZGluZ1NlbGVjdGlvbikKQEAgLTc4Miw3
ICs3ODIsNyBAQCB2b2lkIEVkaXRvcjo6YXBwbGllZEVkaXRpbmcoUGFzc1JlZlB0cjxDCiAgICAg
ZGlzcGF0Y2hFZGl0YWJsZUNvbnRlbnRDaGFuZ2VkRXZlbnRzKGNvbXBvc2l0aW9uLT5zdGFydGlu
Z1Jvb3RFZGl0YWJsZUVsZW1lbnQoKSwgY29tcG9zaXRpb24tPmVuZGluZ1Jvb3RFZGl0YWJsZUVs
ZW1lbnQoKSk7CiAgICAgVmlzaWJsZVNlbGVjdGlvbiBuZXdTZWxlY3Rpb24oY21kLT5lbmRpbmdT
ZWxlY3Rpb24oKSk7CiAKLSAgICBtX3NwZWxsaW5nQ29ycmVjdG9yLT5yZXNwb25kVG9BcHBsaWVk
RWRpdGluZyhjbWQuZ2V0KCkpOworICAgIG1fYWx0ZXJuYXRpdmVUZXh0Q29udHJvbGxlci0+cmVz
cG9uZFRvQXBwbGllZEVkaXRpbmcoY21kLmdldCgpKTsKIAogICAgIC8vIERvbid0IGNsZWFyIHRo
ZSB0eXBpbmcgc3R5bGUgd2l0aCB0aGlzIHNlbGVjdGlvbiBjaGFuZ2UuICBXZSBkbyB0aG9zZSB0
aGluZ3MgZWxzZXdoZXJlIGlmIG5lY2Vzc2FyeS4KICAgICBjaGFuZ2VTZWxlY3Rpb25BZnRlckNv
bW1hbmQobmV3U2VsZWN0aW9uLCBmYWxzZSwgZmFsc2UpOwpAQCAtODEyLDcgKzgxMiw3IEBAIHZv
aWQgRWRpdG9yOjp1bmFwcGxpZWRFZGl0aW5nKFBhc3NSZWZQdHIKICAgICAKICAgICBWaXNpYmxl
U2VsZWN0aW9uIG5ld1NlbGVjdGlvbihjbWQtPnN0YXJ0aW5nU2VsZWN0aW9uKCkpOwogICAgIGNo
YW5nZVNlbGVjdGlvbkFmdGVyQ29tbWFuZChuZXdTZWxlY3Rpb24sIHRydWUsIHRydWUpOwotICAg
IG1fc3BlbGxpbmdDb3JyZWN0b3ItPnJlc3BvbmRUb1VuYXBwbGllZEVkaXRpbmcoY21kLmdldCgp
KTsKKyAgICBtX2FsdGVybmF0aXZlVGV4dENvbnRyb2xsZXItPnJlc3BvbmRUb1VuYXBwbGllZEVk
aXRpbmcoY21kLmdldCgpKTsKICAgICAKICAgICBtX2xhc3RFZGl0Q29tbWFuZCA9IDA7CiAgICAg
aWYgKGNsaWVudCgpKQpAQCAtODQ0LDcgKzg0NCw3IEBAIEVkaXRvcjo6RWRpdG9yKEZyYW1lKiBm
cmFtZSkKICAgICAsIG1fc2hvdWxkU3R5bGVXaXRoQ1NTKGZhbHNlKQogICAgICwgbV9raWxsUmlu
ZyhhZG9wdFB0cihuZXcgS2lsbFJpbmcpKQogICAgICwgbV9zcGVsbENoZWNrZXIoYWRvcHRQdHIo
bmV3IFNwZWxsQ2hlY2tlcihmcmFtZSkpKQotICAgICwgbV9zcGVsbGluZ0NvcnJlY3RvcihhZG9w
dFB0cihuZXcgU3BlbGxpbmdDb3JyZWN0aW9uQ29udHJvbGxlcihmcmFtZSkpKQorICAgICwgbV9h
bHRlcm5hdGl2ZVRleHRDb250cm9sbGVyKGFkb3B0UHRyKG5ldyBBbHRlcm5hdGl2ZVRleHRDb250
cm9sbGVyKGZyYW1lKSkpCiAgICAgLCBtX2FyZU1hcmtlZFRleHRNYXRjaGVzSGlnaGxpZ2h0ZWQo
ZmFsc2UpCiAgICAgLCBtX2RlZmF1bHRQYXJhZ3JhcGhTZXBhcmF0b3IoRWRpdG9yUGFyYWdyYXBo
U2VwYXJhdG9ySXNEaXYpCiB7CkBAIC04OTUsNyArODk1LDcgQEAgYm9vbCBFZGl0b3I6Omluc2Vy
dFRleHRXaXRob3V0U2VuZGluZ1RleAogICAgIGlmICh0ZXh0Lmxlbmd0aCgpID09IDEgJiYgaXNQ
dW5jdCh0ZXh0WzBdKSAmJiAhaXNBbWJpZ3VvdXNCb3VuZGFyeUNoYXJhY3Rlcih0ZXh0WzBdKSkK
ICAgICAgICAgc2hvdWxkQ29uc2lkZXJBcHBseWluZ0F1dG9jb3JyZWN0aW9uID0gdHJ1ZTsKIAot
ICAgIGJvb2wgYXV0b2NvcnJlY3Rpb25XYXNBcHBsaWVkID0gc2hvdWxkQ29uc2lkZXJBcHBseWlu
Z0F1dG9jb3JyZWN0aW9uICYmIG1fc3BlbGxpbmdDb3JyZWN0b3ItPmFwcGx5QXV0b2NvcnJlY3Rp
b25CZWZvcmVUeXBpbmdJZkFwcHJvcHJpYXRlKCk7CisgICAgYm9vbCBhdXRvY29ycmVjdGlvbldh
c0FwcGxpZWQgPSBzaG91bGRDb25zaWRlckFwcGx5aW5nQXV0b2NvcnJlY3Rpb24gJiYgbV9hbHRl
cm5hdGl2ZVRleHRDb250cm9sbGVyLT5hcHBseUF1dG9jb3JyZWN0aW9uQmVmb3JlVHlwaW5nSWZB
cHByb3ByaWF0ZSgpOwogCiAgICAgLy8gR2V0IHRoZSBzZWxlY3Rpb24gdG8gdXNlIGZvciB0aGUg
ZXZlbnQgdGhhdCB0cmlnZ2VyZWQgdGhpcyBpbnNlcnRUZXh0LgogICAgIC8vIElmIHRoZSBldmVu
dCBoYW5kbGVyIGNoYW5nZWQgdGhlIHNlbGVjdGlvbiwgd2UgbWF5IHdhbnQgdG8gdXNlIGEgZGlm
ZmVyZW50IHNlbGVjdGlvbgpAQCAtOTMxLDcgKzkzMSw3IEBAIGJvb2wgRWRpdG9yOjppbnNlcnRM
aW5lQnJlYWsoKQogICAgIGlmICghc2hvdWxkSW5zZXJ0VGV4dCgiXG4iLCBtX2ZyYW1lLT5zZWxl
Y3Rpb24oKS0+dG9Ob3JtYWxpemVkUmFuZ2UoKS5nZXQoKSwgRWRpdG9ySW5zZXJ0QWN0aW9uVHlw
ZWQpKQogICAgICAgICByZXR1cm4gdHJ1ZTsKIAotICAgIGJvb2wgYXV0b2NvcnJlY3Rpb25Jc0Fw
cGxpZWQgPSBtX3NwZWxsaW5nQ29ycmVjdG9yLT5hcHBseUF1dG9jb3JyZWN0aW9uQmVmb3JlVHlw
aW5nSWZBcHByb3ByaWF0ZSgpOworICAgIGJvb2wgYXV0b2NvcnJlY3Rpb25Jc0FwcGxpZWQgPSBt
X2FsdGVybmF0aXZlVGV4dENvbnRyb2xsZXItPmFwcGx5QXV0b2NvcnJlY3Rpb25CZWZvcmVUeXBp
bmdJZkFwcHJvcHJpYXRlKCk7CiAgICAgVHlwaW5nQ29tbWFuZDo6aW5zZXJ0TGluZUJyZWFrKG1f
ZnJhbWUtPmRvY3VtZW50KCksIGF1dG9jb3JyZWN0aW9uSXNBcHBsaWVkID8gVHlwaW5nQ29tbWFu
ZDo6UmV0YWluQXV0b2NvcnJlY3Rpb25JbmRpY2F0b3IgOiAwKTsKICAgICByZXZlYWxTZWxlY3Rp
b25BZnRlckVkaXRpbmdPcGVyYXRpb24oKTsKIApAQCAtOTQ5LDcgKzk0OSw3IEBAIGJvb2wgRWRp
dG9yOjppbnNlcnRQYXJhZ3JhcGhTZXBhcmF0b3IoKQogICAgIGlmICghc2hvdWxkSW5zZXJ0VGV4
dCgiXG4iLCBtX2ZyYW1lLT5zZWxlY3Rpb24oKS0+dG9Ob3JtYWxpemVkUmFuZ2UoKS5nZXQoKSwg
RWRpdG9ySW5zZXJ0QWN0aW9uVHlwZWQpKQogICAgICAgICByZXR1cm4gdHJ1ZTsKIAotICAgIGJv
b2wgYXV0b2NvcnJlY3Rpb25Jc0FwcGxpZWQgPSBtX3NwZWxsaW5nQ29ycmVjdG9yLT5hcHBseUF1
dG9jb3JyZWN0aW9uQmVmb3JlVHlwaW5nSWZBcHByb3ByaWF0ZSgpOworICAgIGJvb2wgYXV0b2Nv
cnJlY3Rpb25Jc0FwcGxpZWQgPSBtX2FsdGVybmF0aXZlVGV4dENvbnRyb2xsZXItPmFwcGx5QXV0
b2NvcnJlY3Rpb25CZWZvcmVUeXBpbmdJZkFwcHJvcHJpYXRlKCk7CiAgICAgVHlwaW5nQ29tbWFu
ZDo6aW5zZXJ0UGFyYWdyYXBoU2VwYXJhdG9yKG1fZnJhbWUtPmRvY3VtZW50KCksIGF1dG9jb3Jy
ZWN0aW9uSXNBcHBsaWVkID8gVHlwaW5nQ29tbWFuZDo6UmV0YWluQXV0b2NvcnJlY3Rpb25JbmRp
Y2F0b3IgOiAwKTsKICAgICByZXZlYWxTZWxlY3Rpb25BZnRlckVkaXRpbmdPcGVyYXRpb24oKTsK
IApAQCAtMTE3Myw3ICsxMTczLDcgQEAgdm9pZCBFZGl0b3I6OnRvZ2dsZUF1dG9tYXRpY1RleHRS
ZXBsYWNlbQogCiBib29sIEVkaXRvcjo6aXNBdXRvbWF0aWNTcGVsbGluZ0NvcnJlY3Rpb25FbmFi
bGVkKCkKIHsKLSAgICByZXR1cm4gbV9zcGVsbGluZ0NvcnJlY3Rvci0+aXNBdXRvbWF0aWNTcGVs
bGluZ0NvcnJlY3Rpb25FbmFibGVkKCk7CisgICAgcmV0dXJuIG1fYWx0ZXJuYXRpdmVUZXh0Q29u
dHJvbGxlci0+aXNBdXRvbWF0aWNTcGVsbGluZ0NvcnJlY3Rpb25FbmFibGVkKCk7CiB9CiAKIHZv
aWQgRWRpdG9yOjp0b2dnbGVBdXRvbWF0aWNTcGVsbGluZ0NvcnJlY3Rpb24oKQpAQCAtMTc3Miw3
ICsxNzcyLDcgQEAgdm9pZCBFZGl0b3I6Om1hcmtNaXNzcGVsbGluZ3NBZnRlclR5cGluZwogI2Vu
ZGlmCiAKICAgICBpZiAodW5pZmllZFRleHRDaGVja2VyRW5hYmxlZCgpKSB7Ci0gICAgICAgIG1f
c3BlbGxpbmdDb3JyZWN0b3ItPmFwcGx5UGVuZGluZ0NvcnJlY3Rpb24oc2VsZWN0aW9uQWZ0ZXJU
eXBpbmcpOworICAgICAgICBtX2FsdGVybmF0aXZlVGV4dENvbnRyb2xsZXItPmFwcGx5UGVuZGlu
Z0NvcnJlY3Rpb24oc2VsZWN0aW9uQWZ0ZXJUeXBpbmcpOwogCiAgICAgICAgIFRleHRDaGVja2lu
Z1R5cGVNYXNrIHRleHRDaGVja2luZ09wdGlvbnMgPSAwOwogCkBAIC0xOTEyLDcgKzE5MTIsNyBA
QCB2b2lkIEVkaXRvcjo6bWFya0FsbE1pc3NwZWxsaW5nc0FuZEJhZEdyCiAgICAgQVNTRVJUKHVu
aWZpZWRUZXh0Q2hlY2tlckVuYWJsZWQoKSk7CiAKICAgICAvLyBUaGVyZSBzaG91bGRuJ3QgYmUg
cGVuZGluZyBhdXRvY29ycmVjdGlvbiBhdCB0aGlzIG1vbWVudC4KLSAgICBBU1NFUlQoIW1fc3Bl
bGxpbmdDb3JyZWN0b3ItPmhhc1BlbmRpbmdDb3JyZWN0aW9uKCkpOworICAgIEFTU0VSVCghbV9h
bHRlcm5hdGl2ZVRleHRDb250cm9sbGVyLT5oYXNQZW5kaW5nQ29ycmVjdGlvbigpKTsKIAogICAg
IGJvb2wgc2hvdWxkTWFya0dyYW1tYXIgPSB0ZXh0Q2hlY2tpbmdPcHRpb25zICYgVGV4dENoZWNr
aW5nVHlwZUdyYW1tYXI7CiAgICAgYm9vbCBzaG91bGRTaG93Q29ycmVjdGlvblBhbmVsID0gdGV4
dENoZWNraW5nT3B0aW9ucyAmIFRleHRDaGVja2luZ1R5cGVTaG93Q29ycmVjdGlvblBhbmVsOwpA
QCAtMjAwNSw3ICsyMDA1LDcgQEAgdm9pZCBFZGl0b3I6Om1hcmtBbmRSZXBsYWNlRm9yKFBhc3NS
ZWZQdAogICAgICAgICBpZiAoc2hvdWxkTWFya1NwZWxsaW5nICYmIHJlc3VsdC0+dHlwZSA9PSBU
ZXh0Q2hlY2tpbmdUeXBlU3BlbGxpbmcgJiYgcmVzdWx0TG9jYXRpb24gPj0gcGFyYWdyYXBoLmNo
ZWNraW5nU3RhcnQoKSAmJiByZXN1bHRMb2NhdGlvbiArIHJlc3VsdExlbmd0aCA8PSBzcGVsbGlu
Z1JhbmdlRW5kT2Zmc2V0ICYmICFyZXN1bHRFbmRzQXRBbWJpZ3VvdXNCb3VuZGFyeSkgewogICAg
ICAgICAgICAgQVNTRVJUKHJlc3VsdExlbmd0aCA+IDAgJiYgcmVzdWx0TG9jYXRpb24gPj0gMCk7
CiAgICAgICAgICAgICBSZWZQdHI8UmFuZ2U+IG1pc3NwZWxsaW5nUmFuZ2UgPSBwYXJhZ3JhcGgu
c3VicmFuZ2UocmVzdWx0TG9jYXRpb24sIHJlc3VsdExlbmd0aCk7Ci0gICAgICAgICAgICBpZiAo
IW1fc3BlbGxpbmdDb3JyZWN0b3ItPmlzU3BlbGxpbmdNYXJrZXJBbGxvd2VkKG1pc3NwZWxsaW5n
UmFuZ2UpKQorICAgICAgICAgICAgaWYgKCFtX2FsdGVybmF0aXZlVGV4dENvbnRyb2xsZXItPmlz
U3BlbGxpbmdNYXJrZXJBbGxvd2VkKG1pc3NwZWxsaW5nUmFuZ2UpKQogICAgICAgICAgICAgICAg
IGNvbnRpbnVlOwogICAgICAgICAgICAgbWlzc3BlbGxpbmdSYW5nZS0+c3RhcnRDb250YWluZXIo
KS0+ZG9jdW1lbnQoKS0+bWFya2VycygpLT5hZGRNYXJrZXIobWlzc3BlbGxpbmdSYW5nZS5nZXQo
KSwgRG9jdW1lbnRNYXJrZXI6OlNwZWxsaW5nLCByZXN1bHQtPnJlcGxhY2VtZW50KTsKICAgICAg
ICAgfSBlbHNlIGlmIChzaG91bGRNYXJrR3JhbW1hciAmJiByZXN1bHQtPnR5cGUgPT0gVGV4dENo
ZWNraW5nVHlwZUdyYW1tYXIgJiYgcGFyYWdyYXBoLmNoZWNraW5nUmFuZ2VDb3ZlcnMocmVzdWx0
TG9jYXRpb24sIHJlc3VsdExlbmd0aCkpIHsKQEAgLTIwNDgsNyArMjA0OCw3IEBAIHZvaWQgRWRp
dG9yOjptYXJrQW5kUmVwbGFjZUZvcihQYXNzUmVmUHQKICAgICAgICAgICAgICAgICBjb250aW51
ZTsKIAogICAgICAgICAgICAgU3RyaW5nIHJlcGxhY2VkU3RyaW5nID0gcGxhaW5UZXh0KHJhbmdl
VG9SZXBsYWNlLmdldCgpKTsKLSAgICAgICAgICAgIGJvb2wgZXhpc3RpbmdNYXJrZXJzUGVybWl0
UmVwbGFjZW1lbnQgPSBtX3NwZWxsaW5nQ29ycmVjdG9yLT5wcm9jZXNzTWFya2Vyc09uVGV4dFRv
QmVSZXBsYWNlZEJ5UmVzdWx0KHJlc3VsdCwgcmFuZ2VUb1JlcGxhY2UuZ2V0KCksIHJlcGxhY2Vk
U3RyaW5nKTsKKyAgICAgICAgICAgIGJvb2wgZXhpc3RpbmdNYXJrZXJzUGVybWl0UmVwbGFjZW1l
bnQgPSBtX2FsdGVybmF0aXZlVGV4dENvbnRyb2xsZXItPnByb2Nlc3NNYXJrZXJzT25UZXh0VG9C
ZVJlcGxhY2VkQnlSZXN1bHQocmVzdWx0LCByYW5nZVRvUmVwbGFjZS5nZXQoKSwgcmVwbGFjZWRT
dHJpbmcpOwogICAgICAgICAgICAgaWYgKCFleGlzdGluZ01hcmtlcnNQZXJtaXRSZXBsYWNlbWVu
dCkKICAgICAgICAgICAgICAgICBjb250aW51ZTsKIApAQCAtMjA1OSw3ICsyMDU5LDcgQEAgdm9p
ZCBFZGl0b3I6Om1hcmtBbmRSZXBsYWNlRm9yKFBhc3NSZWZQdAogICAgICAgICAgICAgICAgIC8v
IHNob3VsZFNob3dDb3JyZWN0aW9uUGFuZWwgY2FuIGJlIHRydWUgb25seSB3aGVuIHRoZSBwYW5l
bCBpcyBhdmFpbGFibGUuCiAgICAgICAgICAgICAgICAgaWYgKHJlc3VsdExvY2F0aW9uICsgcmVz
dWx0TGVuZ3RoID09IHNwZWxsaW5nUmFuZ2VFbmRPZmZzZXQpIHsKICAgICAgICAgICAgICAgICAg
ICAgLy8gV2Ugb25seSBzaG93IHRoZSBjb3JyZWN0aW9uIHBhbmVsIG9uIHRoZSBsYXN0IHdvcmQu
Ci0gICAgICAgICAgICAgICAgICAgIG1fc3BlbGxpbmdDb3JyZWN0b3ItPnNob3cocmFuZ2VUb1Jl
cGxhY2UsIHJlc3VsdC0+cmVwbGFjZW1lbnQpOworICAgICAgICAgICAgICAgICAgICBtX2FsdGVy
bmF0aXZlVGV4dENvbnRyb2xsZXItPnNob3cocmFuZ2VUb1JlcGxhY2UsIHJlc3VsdC0+cmVwbGFj
ZW1lbnQpOwogICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgICB9CiAg
ICAgICAgICAgICAgICAgLy8gSWYgdGhpcyBmdW5jdGlvbiBpcyBjYWxsZWQgZm9yIHNob3dpbmcg
Y29ycmVjdGlvbiBwYW5lbCwgd2UgaWdub3JlIG90aGVyIGNvcnJlY3Rpb24gb3IgcmVwbGFjZW1l
bnQuCkBAIC0yMDk1LDcgKzIwOTUsNyBAQCB2b2lkIEVkaXRvcjo6bWFya0FuZFJlcGxhY2VGb3Io
UGFzc1JlZlB0CiAKICAgICAgICAgICAgICAgICAvLyBBZGQgYSBtYXJrZXIgc28gdGhhdCBjb3Jy
ZWN0aW9ucyBjYW4gZWFzaWx5IGJlIHVuZG9uZSBhbmQgd29uJ3QgYmUgcmUtY29ycmVjdGVkLgog
ICAgICAgICAgICAgICAgIGlmIChyZXN1bHQtPnR5cGUgPT0gVGV4dENoZWNraW5nVHlwZUNvcnJl
Y3Rpb24pCi0gICAgICAgICAgICAgICAgICAgIG1fc3BlbGxpbmdDb3JyZWN0b3ItPm1hcmtDb3Jy
ZWN0aW9uKHBhcmFncmFwaC5zdWJyYW5nZShyZXN1bHRMb2NhdGlvbiwgcmVwbGFjZW1lbnRMZW5n
dGgpLCByZXBsYWNlZFN0cmluZyk7CisgICAgICAgICAgICAgICAgICAgIG1fYWx0ZXJuYXRpdmVU
ZXh0Q29udHJvbGxlci0+bWFya0NvcnJlY3Rpb24ocGFyYWdyYXBoLnN1YnJhbmdlKHJlc3VsdExv
Y2F0aW9uLCByZXBsYWNlbWVudExlbmd0aCksIHJlcGxhY2VkU3RyaW5nKTsKICAgICAgICAgICAg
IH0KICAgICAgICAgfQogICAgIH0KQEAgLTIxMjgsMTIgKzIxMjgsMTIgQEAgdm9pZCBFZGl0b3I6
OmNoYW5nZUJhY2tUb1JlcGxhY2VkU3RyaW5nKAogICAgIGlmICghc2hvdWxkSW5zZXJ0VGV4dChy
ZXBsYWNlZFN0cmluZywgc2VsZWN0aW9uLmdldCgpLCBFZGl0b3JJbnNlcnRBY3Rpb25QYXN0ZWQp
KQogICAgICAgICByZXR1cm47CiAgICAgCi0gICAgbV9zcGVsbGluZ0NvcnJlY3Rvci0+cmVjb3Jk
QXV0b2NvcnJlY3Rpb25SZXNwb25zZVJldmVyc2VkKHJlcGxhY2VkU3RyaW5nLCBzZWxlY3Rpb24p
OworICAgIG1fYWx0ZXJuYXRpdmVUZXh0Q29udHJvbGxlci0+cmVjb3JkQXV0b2NvcnJlY3Rpb25S
ZXNwb25zZVJldmVyc2VkKHJlcGxhY2VkU3RyaW5nLCBzZWxlY3Rpb24pOwogICAgIFRleHRDaGVj
a2luZ1BhcmFncmFwaCBwYXJhZ3JhcGgoc2VsZWN0aW9uKTsKICAgICByZXBsYWNlU2VsZWN0aW9u
V2l0aFRleHQocmVwbGFjZWRTdHJpbmcsIGZhbHNlLCBmYWxzZSk7CiAgICAgUmVmUHRyPFJhbmdl
PiBjaGFuZ2VkUmFuZ2UgPSBwYXJhZ3JhcGguc3VicmFuZ2UocGFyYWdyYXBoLmNoZWNraW5nU3Rh
cnQoKSwgcmVwbGFjZWRTdHJpbmcubGVuZ3RoKCkpOwogICAgIGNoYW5nZWRSYW5nZS0+c3RhcnRD
b250YWluZXIoKS0+ZG9jdW1lbnQoKS0+bWFya2VycygpLT5hZGRNYXJrZXIoY2hhbmdlZFJhbmdl
LmdldCgpLCBEb2N1bWVudE1hcmtlcjo6UmVwbGFjZW1lbnQsIFN0cmluZygpKTsKLSAgICBtX3Nw
ZWxsaW5nQ29ycmVjdG9yLT5tYXJrUmV2ZXJzZWQoY2hhbmdlZFJhbmdlLmdldCgpKTsKKyAgICBt
X2FsdGVybmF0aXZlVGV4dENvbnRyb2xsZXItPm1hcmtSZXZlcnNlZChjaGFuZ2VkUmFuZ2UuZ2V0
KCkpOwogfQogCiAKQEAgLTIxNTcsMTIgKzIxNTcsMTIgQEAgdm9pZCBFZGl0b3I6Om1hcmtNaXNz
cGVsbGluZ3NBbmRCYWRHcmFtbQogCiB2b2lkIEVkaXRvcjo6dW5hcHBsaWVkU3BlbGxDb3JyZWN0
aW9uKGNvbnN0IFZpc2libGVTZWxlY3Rpb24mIHNlbGVjdGlvbk9mQ29ycmVjdGVkLCBjb25zdCBT
dHJpbmcmIGNvcnJlY3RlZCwgY29uc3QgU3RyaW5nJiBjb3JyZWN0aW9uKQogewotICAgIG1fc3Bl
bGxpbmdDb3JyZWN0b3ItPnJlc3BvbmRUb1VuYXBwbGllZFNwZWxsQ29ycmVjdGlvbihzZWxlY3Rp
b25PZkNvcnJlY3RlZCwgY29ycmVjdGVkLCBjb3JyZWN0aW9uKTsKKyAgICBtX2FsdGVybmF0aXZl
VGV4dENvbnRyb2xsZXItPnJlc3BvbmRUb1VuYXBwbGllZFNwZWxsQ29ycmVjdGlvbihzZWxlY3Rp
b25PZkNvcnJlY3RlZCwgY29ycmVjdGVkLCBjb3JyZWN0aW9uKTsKIH0KIAogdm9pZCBFZGl0b3I6
OnVwZGF0ZU1hcmtlcnNGb3JXb3Jkc0FmZmVjdGVkQnlFZGl0aW5nKGJvb2wgZG9Ob3RSZW1vdmVJ
ZlNlbGVjdGlvbkF0V29yZEJvdW5kYXJ5KQogewotICAgIGlmICghbV9zcGVsbGluZ0NvcnJlY3Rv
ci0+c2hvdWxkUmVtb3ZlTWFya2Vyc1Vwb25FZGl0aW5nKCkpCisgICAgaWYgKCFtX2FsdGVybmF0
aXZlVGV4dENvbnRyb2xsZXItPnNob3VsZFJlbW92ZU1hcmtlcnNVcG9uRWRpdGluZygpKQogICAg
ICAgICByZXR1cm47CiAKICAgICAvLyBXZSB3YW50IHRvIHJlbW92ZSB0aGUgbWFya2VycyBmcm9t
IGEgd29yZCBpZiBhbiBlZGl0aW5nIGNvbW1hbmQgd2lsbCBjaGFuZ2UgdGhlIHdvcmQuIFRoaXMg
Y2FuIGhhcHBlbiBpbiBvbmUgb2YKQEAgLTIyMzIsNyArMjIzMiw3IEBAIHZvaWQgRWRpdG9yOjp1
cGRhdGVNYXJrZXJzRm9yV29yZHNBZmZlY3QKIAogdm9pZCBFZGl0b3I6OmRlbGV0ZWRBdXRvY29y
cmVjdGlvbkF0UG9zaXRpb24oY29uc3QgUG9zaXRpb24mIHBvc2l0aW9uLCBjb25zdCBTdHJpbmcm
IG9yaWdpbmFsU3RyaW5nKQogewotICAgIG1fc3BlbGxpbmdDb3JyZWN0b3ItPmRlbGV0ZWRBdXRv
Y29ycmVjdGlvbkF0UG9zaXRpb24ocG9zaXRpb24sIG9yaWdpbmFsU3RyaW5nKTsKKyAgICBtX2Fs
dGVybmF0aXZlVGV4dENvbnRyb2xsZXItPmRlbGV0ZWRBdXRvY29ycmVjdGlvbkF0UG9zaXRpb24o
cG9zaXRpb24sIG9yaWdpbmFsU3RyaW5nKTsKIH0KIAogUGFzc1JlZlB0cjxSYW5nZT4gRWRpdG9y
OjpyYW5nZUZvclBvaW50KGNvbnN0IEludFBvaW50JiB3aW5kb3dQb2ludCkKQEAgLTIzNTcsMjAg
KzIzNTcsMjAgQEAgdm9pZCBFZGl0b3I6OmFkZFRvS2lsbFJpbmcoUmFuZ2UqIHJhbmdlLAogICAg
IG1fc2hvdWxkU3RhcnROZXdLaWxsUmluZ1NlcXVlbmNlID0gZmFsc2U7CiB9CiAKLXZvaWQgRWRp
dG9yOjpzdGFydENvcnJlY3Rpb25QYW5lbFRpbWVyKCkKK3ZvaWQgRWRpdG9yOjpzdGFydEFsdGVy
bmF0aXZlVGV4dFVJVGltZXIoKQogewotICAgIG1fc3BlbGxpbmdDb3JyZWN0b3ItPnN0YXJ0Q29y
cmVjdGlvblBhbmVsVGltZXIoQ29ycmVjdGlvblBhbmVsSW5mbzo6UGFuZWxUeXBlQ29ycmVjdGlv
bik7CisgICAgbV9hbHRlcm5hdGl2ZVRleHRDb250cm9sbGVyLT5zdGFydEFsdGVybmF0aXZlVGV4
dFVJVGltZXIoQWx0ZXJuYXRpdmVUZXh0VHlwZUNvcnJlY3Rpb24pOwogfQogCi12b2lkIEVkaXRv
cjo6aGFuZGxlQ29ycmVjdGlvblBhbmVsUmVzdWx0KGNvbnN0IFN0cmluZyYgY29ycmVjdGlvbikK
K3ZvaWQgRWRpdG9yOjpoYW5kbGVBbHRlcm5hdGl2ZVRleHRVSVJlc3VsdChjb25zdCBTdHJpbmcm
IGNvcnJlY3Rpb24pCiB7Ci0gICAgbV9zcGVsbGluZ0NvcnJlY3Rvci0+aGFuZGxlQ29ycmVjdGlv
blBhbmVsUmVzdWx0KGNvcnJlY3Rpb24pOworICAgIG1fYWx0ZXJuYXRpdmVUZXh0Q29udHJvbGxl
ci0+aGFuZGxlQWx0ZXJuYXRpdmVUZXh0VUlSZXN1bHQoY29ycmVjdGlvbik7CiB9CiAKIAogdm9p
ZCBFZGl0b3I6OmRpc21pc3NDb3JyZWN0aW9uUGFuZWxBc0lnbm9yZWQoKQogewotICAgIG1fc3Bl
bGxpbmdDb3JyZWN0b3ItPmRpc21pc3MoUmVhc29uRm9yRGlzbWlzc2luZ0NvcnJlY3Rpb25QYW5l
bElnbm9yZWQpOworICAgIG1fYWx0ZXJuYXRpdmVUZXh0Q29udHJvbGxlci0+ZGlzbWlzcyhSZWFz
b25Gb3JEaXNtaXNzaW5nQWx0ZXJuYXRpdmVUZXh0SWdub3JlZCk7CiB9CiAKIGJvb2wgRWRpdG9y
OjppbnNpZGVWaXNpYmxlQXJlYShjb25zdCBMYXlvdXRQb2ludCYgcG9pbnQpIGNvbnN0CkBAIC0y
ODg2LDcgKzI4ODYsNyBAQCB2b2lkIEVkaXRvcjo6c2V0TWFya2VkVGV4dE1hdGNoZXNBcmVIaWdo
CiAKIHZvaWQgRWRpdG9yOjpyZXNwb25kVG9DaGFuZ2VkU2VsZWN0aW9uKGNvbnN0IFZpc2libGVT
ZWxlY3Rpb24mIG9sZFNlbGVjdGlvbiwgRnJhbWVTZWxlY3Rpb246OlNldFNlbGVjdGlvbk9wdGlv
bnMgb3B0aW9ucykKIHsKLSAgICBtX3NwZWxsaW5nQ29ycmVjdG9yLT5zdG9wUGVuZGluZ0NvcnJl
Y3Rpb24ob2xkU2VsZWN0aW9uKTsKKyAgICBtX2FsdGVybmF0aXZlVGV4dENvbnRyb2xsZXItPnN0
b3BQZW5kaW5nQ29ycmVjdGlvbihvbGRTZWxlY3Rpb24pOwogCiAgICAgYm9vbCBjbG9zZVR5cGlu
ZyA9IG9wdGlvbnMgJiBGcmFtZVNlbGVjdGlvbjo6Q2xvc2VUeXBpbmc7CiAgICAgYm9vbCBpc0Nv
bnRpbnVvdXNTcGVsbENoZWNraW5nRW5hYmxlZCA9IHRoaXMtPmlzQ29udGludW91c1NwZWxsQ2hl
Y2tpbmdFbmFibGVkKCk7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0VkaXRvci5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2VkaXRpbmcvRWRpdG9yLmgJKHJldmlzaW9uIDEx
Mjk2MSkKKysrIFNvdXJjZS9XZWJDb3JlL2VkaXRpbmcvRWRpdG9yLmgJKHdvcmtpbmcgY29weSkK
QEAgLTYxLDcgKzYxLDcgQEAgY2xhc3MgUGFzdGVib2FyZDsKIGNsYXNzIFNpbXBsZUZvbnREYXRh
OwogY2xhc3MgU3BlbGxDaGVja2VyOwogY2xhc3MgU3BlbGxDaGVja1JlcXVlc3Q7Ci1jbGFzcyBT
cGVsbGluZ0NvcnJlY3Rpb25Db250cm9sbGVyOworY2xhc3MgQWx0ZXJuYXRpdmVUZXh0Q29udHJv
bGxlcjsKIGNsYXNzIFN0eWxlUHJvcGVydHlTZXQ7CiBjbGFzcyBUZXh0OwogY2xhc3MgVGV4dENo
ZWNrZXJDbGllbnQ7CkBAIC0zMTksOSArMzE5LDkgQEAgcHVibGljOgogCiAgICAgdm9pZCBhZGRU
b0tpbGxSaW5nKFJhbmdlKiwgYm9vbCBwcmVwZW5kKTsKIAotICAgIHZvaWQgc3RhcnRDb3JyZWN0
aW9uUGFuZWxUaW1lcigpOworICAgIHZvaWQgc3RhcnRBbHRlcm5hdGl2ZVRleHRVSVRpbWVyKCk7
CiAgICAgLy8gSWYgdXNlciBjb25maXJtZWQgYSBjb3JyZWN0aW9uIGluIHRoZSBjb3JyZWN0aW9u
IHBhbmVsLCBjb3JyZWN0aW9uIGhhcyBub24temVybyBsZW5ndGgsIG90aGVyd2lzZSBpdCBtZWFu
cyB0aGF0IHVzZXIgaGFzIGRpc21pc3NlZCB0aGUgcGFuZWwuCi0gICAgdm9pZCBoYW5kbGVDb3Jy
ZWN0aW9uUGFuZWxSZXN1bHQoY29uc3QgU3RyaW5nJiBjb3JyZWN0aW9uKTsKKyAgICB2b2lkIGhh
bmRsZUFsdGVybmF0aXZlVGV4dFVJUmVzdWx0KGNvbnN0IFN0cmluZyYgY29ycmVjdGlvbik7CiAg
ICAgdm9pZCBkaXNtaXNzQ29ycmVjdGlvblBhbmVsQXNJZ25vcmVkKCk7CiAKICAgICB2b2lkIHBh
c3RlQXNGcmFnbWVudChQYXNzUmVmUHRyPERvY3VtZW50RnJhZ21lbnQ+LCBib29sIHNtYXJ0UmVw
bGFjZSwgYm9vbCBtYXRjaFN0eWxlKTsKQEAgLTQwMSw3ICs0MDEsNyBAQCBwcml2YXRlOgogICAg
IGJvb2wgbV9zaG91bGRTdHlsZVdpdGhDU1M7CiAgICAgT3duUHRyPEtpbGxSaW5nPiBtX2tpbGxS
aW5nOwogICAgIE93blB0cjxTcGVsbENoZWNrZXI+IG1fc3BlbGxDaGVja2VyOwotICAgIE93blB0
cjxTcGVsbGluZ0NvcnJlY3Rpb25Db250cm9sbGVyPiBtX3NwZWxsaW5nQ29ycmVjdG9yOworICAg
IE93blB0cjxBbHRlcm5hdGl2ZVRleHRDb250cm9sbGVyPiBtX2FsdGVybmF0aXZlVGV4dENvbnRy
b2xsZXI7CiAgICAgVmlzaWJsZVNlbGVjdGlvbiBtX21hcms7CiAgICAgYm9vbCBtX2FyZU1hcmtl
ZFRleHRNYXRjaGVzSGlnaGxpZ2h0ZWQ7CiAgICAgRWRpdG9yUGFyYWdyYXBoU2VwYXJhdG9yIG1f
ZGVmYXVsdFBhcmFncmFwaFNlcGFyYXRvcjsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2VkaXRpbmcv
U3BlbGxpbmdDb3JyZWN0aW9uQ29tbWFuZC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNv
cmUvZWRpdGluZy9TcGVsbGluZ0NvcnJlY3Rpb25Db21tYW5kLmNwcAkocmV2aXNpb24gMTEyOTYx
KQorKysgU291cmNlL1dlYkNvcmUvZWRpdGluZy9TcGVsbGluZ0NvcnJlY3Rpb25Db21tYW5kLmNw
cAkod29ya2luZyBjb3B5KQpAQCAtMjYsMTIgKzI2LDEyIEBACiAjaW5jbHVkZSAiY29uZmlnLmgi
CiAjaW5jbHVkZSAiU3BlbGxpbmdDb3JyZWN0aW9uQ29tbWFuZC5oIgogCisjaW5jbHVkZSAiQWx0
ZXJuYXRpdmVUZXh0Q29udHJvbGxlci5oIgogI2luY2x1ZGUgIkRvY3VtZW50LmgiCiAjaW5jbHVk
ZSAiRG9jdW1lbnRGcmFnbWVudC5oIgogI2luY2x1ZGUgIkZyYW1lLmgiCiAjaW5jbHVkZSAiUmVw
bGFjZVNlbGVjdGlvbkNvbW1hbmQuaCIKICNpbmNsdWRlICJTZXRTZWxlY3Rpb25Db21tYW5kLmgi
Ci0jaW5jbHVkZSAiU3BlbGxpbmdDb3JyZWN0aW9uQ29udHJvbGxlci5oIgogI2luY2x1ZGUgIlRl
eHRJdGVyYXRvci5oIgogI2luY2x1ZGUgIm1hcmt1cC5oIgogCkluZGV4OiBTb3VyY2UvV2ViQ29y
ZS9lZGl0aW5nL1NwZWxsaW5nQ29ycmVjdGlvbkNvbnRyb2xsZXIuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9XZWJDb3JlL2VkaXRpbmcvU3BlbGxpbmdDb3JyZWN0aW9uQ29udHJvbGxlci5jcHAJ
KHJldmlzaW9uIDExMjk2MSkKKysrIFNvdXJjZS9XZWJDb3JlL2VkaXRpbmcvU3BlbGxpbmdDb3Jy
ZWN0aW9uQ29udHJvbGxlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNTY1ICswLDAgQEAKLS8q
Ci0gKiBDb3B5cmlnaHQgKEMpIDIwMDYsIDIwMDcsIDIwMDggQXBwbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDA4IE5va2lhIENvcnBvcmF0aW9uIGFuZC9v
ciBpdHMgc3Vic2lkaWFyeSgtaWVzKQotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4g
c291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9u
LCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0g
KiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0
YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9u
cyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMg
cHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMg
UFJPVklERUQgQlkgQVBQTEUgQ09NUFVURVIsIElOQy4gYGBBUyBJUycnIEFORCBBTlkKLSAqIEVY
UFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywgVEhFCi0gKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRO
RVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBF
VkVOVCBTSEFMTCBBUFBMRSBDT01QVVRFUiwgSU5DLiBPUgotICogQ09OVFJJQlVUT1JTIEJFIExJ
QUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCi0gKiBF
WEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sCi0gKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VT
OyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKLSAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQ
VElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKLSAqIE9GIExJQUJJTElUWSwg
V0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xV
RElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBU
SEUgVVNFCi0gKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJ
QklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKLSAqLwotCi0jaW5jbHVkZSAiY29uZmlnLmgiCi0jaW5j
bHVkZSAiU3BlbGxpbmdDb3JyZWN0aW9uQ29udHJvbGxlci5oIgotCi0jaW5jbHVkZSAiRG9jdW1l
bnRNYXJrZXJDb250cm9sbGVyLmgiCi0jaW5jbHVkZSAiRWRpdENvbW1hbmQuaCIKLSNpbmNsdWRl
ICJFZGl0b3JDbGllbnQuaCIKLSNpbmNsdWRlICJGbG9hdFF1YWQuaCIKLSNpbmNsdWRlICJGcmFt
ZS5oIgotI2luY2x1ZGUgIkZyYW1lVmlldy5oIgotI2luY2x1ZGUgIlBhZ2UuaCIKLSNpbmNsdWRl
ICJTcGVsbGluZ0NvcnJlY3Rpb25Db21tYW5kLmgiCi0jaW5jbHVkZSAiVGV4dENoZWNrZXJDbGll
bnQuaCIKLSNpbmNsdWRlICJUZXh0Q2hlY2tpbmdIZWxwZXIuaCIKLSNpbmNsdWRlICJUZXh0SXRl
cmF0b3IuaCIKLSNpbmNsdWRlICJWaXNpYmxlU2VsZWN0aW9uLmgiCi0jaW5jbHVkZSAiaHRtbGVk
aXRpbmcuaCIKLSNpbmNsdWRlICJtYXJrdXAuaCIKLSNpbmNsdWRlICJ2aXNpYmxlX3VuaXRzLmgi
Ci0KLW5hbWVzcGFjZSBXZWJDb3JlIHsKLQotdXNpbmcgbmFtZXNwYWNlIHN0ZDsKLXVzaW5nIG5h
bWVzcGFjZSBXVEY7Ci0KLSNpZiBVU0UoQVVUT0NPUlJFQ1RJT05fUEFORUwpCi0KLXN0YXRpYyBj
b25zdCBWZWN0b3I8RG9jdW1lbnRNYXJrZXI6Ok1hcmtlclR5cGU+JiBtYXJrZXJUeXBlc0ZvckF1
dG9jb3JyZWN0aW9uKCkKLXsKLSAgICBERUZJTkVfU1RBVElDX0xPQ0FMKFZlY3RvcjxEb2N1bWVu
dE1hcmtlcjo6TWFya2VyVHlwZT4sIG1hcmtlclR5cGVzRm9yQXV0b0NvcnJlY3Rpb24sICgpKTsK
LSAgICBpZiAobWFya2VyVHlwZXNGb3JBdXRvQ29ycmVjdGlvbi5pc0VtcHR5KCkpIHsKLSAgICAg
ICAgbWFya2VyVHlwZXNGb3JBdXRvQ29ycmVjdGlvbi5hcHBlbmQoRG9jdW1lbnRNYXJrZXI6OlJl
cGxhY2VtZW50KTsKLSAgICAgICAgbWFya2VyVHlwZXNGb3JBdXRvQ29ycmVjdGlvbi5hcHBlbmQo
RG9jdW1lbnRNYXJrZXI6OkNvcnJlY3Rpb25JbmRpY2F0b3IpOwotICAgICAgICBtYXJrZXJUeXBl
c0ZvckF1dG9Db3JyZWN0aW9uLmFwcGVuZChEb2N1bWVudE1hcmtlcjo6U3BlbGxDaGVja2luZ0V4
ZW1wdGlvbik7Ci0gICAgICAgIG1hcmtlclR5cGVzRm9yQXV0b0NvcnJlY3Rpb24uYXBwZW5kKERv
Y3VtZW50TWFya2VyOjpBdXRvY29ycmVjdGVkKTsKLSAgICB9Ci0gICAgcmV0dXJuIG1hcmtlclR5
cGVzRm9yQXV0b0NvcnJlY3Rpb247Ci19Ci0KLXN0YXRpYyBjb25zdCBWZWN0b3I8RG9jdW1lbnRN
YXJrZXI6Ok1hcmtlclR5cGU+JiBtYXJrZXJUeXBlc0ZvclJlcGxhY2VtZW50KCkKLXsKLSAgICBE
RUZJTkVfU1RBVElDX0xPQ0FMKFZlY3RvcjxEb2N1bWVudE1hcmtlcjo6TWFya2VyVHlwZT4sIG1h
cmtlclR5cGVzRm9yUmVwbGFjZW1lbnQsICgpKTsKLSAgICBpZiAobWFya2VyVHlwZXNGb3JSZXBs
YWNlbWVudC5pc0VtcHR5KCkpIHsKLSAgICAgICAgbWFya2VyVHlwZXNGb3JSZXBsYWNlbWVudC5h
cHBlbmQoRG9jdW1lbnRNYXJrZXI6OlJlcGxhY2VtZW50KTsKLSAgICAgICAgbWFya2VyVHlwZXNG
b3JSZXBsYWNlbWVudC5hcHBlbmQoRG9jdW1lbnRNYXJrZXI6OlNwZWxsQ2hlY2tpbmdFeGVtcHRp
b24pOwotICAgIH0KLSAgICByZXR1cm4gbWFya2VyVHlwZXNGb3JSZXBsYWNlbWVudDsKLX0KLQot
c3RhdGljIGJvb2wgbWFya2Vyc0hhdmVJZGVudGljYWxEZXNjcmlwdGlvbihjb25zdCBWZWN0b3I8
RG9jdW1lbnRNYXJrZXIqPiYgbWFya2VycykKLXsKLSAgICBpZiAobWFya2Vycy5pc0VtcHR5KCkp
Ci0gICAgICAgIHJldHVybiB0cnVlOwotCi0gICAgY29uc3QgU3RyaW5nJiBkZXNjcmlwdGlvbiA9
IG1hcmtlcnNbMF0tPmRlc2NyaXB0aW9uKCk7Ci0gICAgZm9yIChzaXplX3QgaSA9IDE7IGkgPCBt
YXJrZXJzLnNpemUoKTsgKytpKSB7Ci0gICAgICAgIGlmIChkZXNjcmlwdGlvbiAhPSBtYXJrZXJz
W2ldLT5kZXNjcmlwdGlvbigpKQotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLSAg
ICByZXR1cm4gdHJ1ZTsKLX0KLQotU3BlbGxpbmdDb3JyZWN0aW9uQ29udHJvbGxlcjo6U3BlbGxp
bmdDb3JyZWN0aW9uQ29udHJvbGxlcihGcmFtZSogZnJhbWUpCi0gICAgOiBtX2ZyYW1lKGZyYW1l
KQotICAgICwgbV9jb3JyZWN0aW9uUGFuZWxUaW1lcih0aGlzLCAmU3BlbGxpbmdDb3JyZWN0aW9u
Q29udHJvbGxlcjo6Y29ycmVjdGlvblBhbmVsVGltZXJGaXJlZCkKLXsKLX0KLQotU3BlbGxpbmdD
b3JyZWN0aW9uQ29udHJvbGxlcjo6flNwZWxsaW5nQ29ycmVjdGlvbkNvbnRyb2xsZXIoKQotewot
ICAgIGRpc21pc3MoUmVhc29uRm9yRGlzbWlzc2luZ0NvcnJlY3Rpb25QYW5lbElnbm9yZWQpOwot
fQotCi12b2lkIFNwZWxsaW5nQ29ycmVjdGlvbkNvbnRyb2xsZXI6OnN0YXJ0Q29ycmVjdGlvblBh
bmVsVGltZXIoQ29ycmVjdGlvblBhbmVsSW5mbzo6UGFuZWxUeXBlIHR5cGUpCi17Ci0gICAgY29u
c3QgZG91YmxlIGNvcnJlY3Rpb25QYW5lbFRpbWVySW50ZXJ2YWwgPSAwLjM7Ci0gICAgaWYgKCFp
c0F1dG9tYXRpY1NwZWxsaW5nQ29ycmVjdGlvbkVuYWJsZWQoKSkKLSAgICAgICAgcmV0dXJuOwot
Ci0gICAgLy8gSWYgdHlwZSBpcyBQYW5lbFR5cGVSZXZlcnNpb24sIHRoZW4gdGhlIG5ldyByYW5n
ZSBoYXMgYmVlbiBzZXQuIFNvIHdlIHNob3VsZG4ndCBjbGVhciBpdC4KLSAgICBpZiAodHlwZSA9
PSBDb3JyZWN0aW9uUGFuZWxJbmZvOjpQYW5lbFR5cGVDb3JyZWN0aW9uKQotICAgICAgICBtX2Nv
cnJlY3Rpb25QYW5lbEluZm8ucmFuZ2VUb0JlUmVwbGFjZWQuY2xlYXIoKTsKLSAgICBtX2NvcnJl
Y3Rpb25QYW5lbEluZm8ucGFuZWxUeXBlID0gdHlwZTsKLSAgICBtX2NvcnJlY3Rpb25QYW5lbFRp
bWVyLnN0YXJ0T25lU2hvdChjb3JyZWN0aW9uUGFuZWxUaW1lckludGVydmFsKTsKLX0KLQotdm9p
ZCBTcGVsbGluZ0NvcnJlY3Rpb25Db250cm9sbGVyOjpzdG9wQ29ycmVjdGlvblBhbmVsVGltZXIo
KQotewotICAgIG1fY29ycmVjdGlvblBhbmVsVGltZXIuc3RvcCgpOwotICAgIG1fY29ycmVjdGlv
blBhbmVsSW5mby5yYW5nZVRvQmVSZXBsYWNlZC5jbGVhcigpOwotfQotCi12b2lkIFNwZWxsaW5n
Q29ycmVjdGlvbkNvbnRyb2xsZXI6OnN0b3BQZW5kaW5nQ29ycmVjdGlvbihjb25zdCBWaXNpYmxl
U2VsZWN0aW9uJiBvbGRTZWxlY3Rpb24pCi17Ci0gICAgLy8gTWFrZSBzdXJlIHRoZXJlJ3Mgbm8g
cGVuZGluZyBhdXRvY29ycmVjdGlvbiBiZWZvcmUgd2UgY2FsbCBtYXJrTWlzc3BlbGxpbmdzQW5k
QmFkR3JhbW1hcigpIGJlbG93LgotICAgIFZpc2libGVTZWxlY3Rpb24gY3VycmVudFNlbGVjdGlv
bihtX2ZyYW1lLT5zZWxlY3Rpb24oKS0+c2VsZWN0aW9uKCkpOwotICAgIGlmIChjdXJyZW50U2Vs
ZWN0aW9uID09IG9sZFNlbGVjdGlvbikKLSAgICAgICAgcmV0dXJuOwotCi0gICAgc3RvcENvcnJl
Y3Rpb25QYW5lbFRpbWVyKCk7Ci0gICAgZGlzbWlzcyhSZWFzb25Gb3JEaXNtaXNzaW5nQ29ycmVj
dGlvblBhbmVsSWdub3JlZCk7Ci19Ci0KLXZvaWQgU3BlbGxpbmdDb3JyZWN0aW9uQ29udHJvbGxl
cjo6YXBwbHlQZW5kaW5nQ29ycmVjdGlvbihjb25zdCBWaXNpYmxlU2VsZWN0aW9uJiBzZWxlY3Rp
b25BZnRlclR5cGluZykKLXsKLSAgICAvLyBBcHBseSBwZW5kaW5nIGF1dG9jb3JyZWN0aW9uIGJl
Zm9yZSBuZXh0IHJvdW5kIG9mIHNwZWxsIGNoZWNraW5nLgotICAgIGJvb2wgZG9BcHBseUNvcnJl
Y3Rpb24gPSB0cnVlOwotICAgIFZpc2libGVQb3NpdGlvbiBzdGFydE9mU2VsZWN0aW9uID0gc2Vs
ZWN0aW9uQWZ0ZXJUeXBpbmcudmlzaWJsZVN0YXJ0KCk7Ci0gICAgVmlzaWJsZVNlbGVjdGlvbiBj
dXJyZW50V29yZCA9IFZpc2libGVTZWxlY3Rpb24oc3RhcnRPZldvcmQoc3RhcnRPZlNlbGVjdGlv
biwgTGVmdFdvcmRJZk9uQm91bmRhcnkpLCBlbmRPZldvcmQoc3RhcnRPZlNlbGVjdGlvbiwgUmln
aHRXb3JkSWZPbkJvdW5kYXJ5KSk7Ci0gICAgaWYgKGN1cnJlbnRXb3JkLnZpc2libGVFbmQoKSA9
PSBzdGFydE9mU2VsZWN0aW9uKSB7Ci0gICAgICAgIFN0cmluZyB3b3JkVGV4dCA9IHBsYWluVGV4
dChjdXJyZW50V29yZC50b05vcm1hbGl6ZWRSYW5nZSgpLmdldCgpKTsKLSAgICAgICAgaWYgKHdv
cmRUZXh0Lmxlbmd0aCgpID4gMCAmJiBpc0FtYmlndW91c0JvdW5kYXJ5Q2hhcmFjdGVyKHdvcmRU
ZXh0W3dvcmRUZXh0Lmxlbmd0aCgpIC0gMV0pKQotICAgICAgICAgICAgZG9BcHBseUNvcnJlY3Rp
b24gPSBmYWxzZTsKLSAgICB9Ci0gICAgaWYgKGRvQXBwbHlDb3JyZWN0aW9uKQotICAgICAgICBo
YW5kbGVDb3JyZWN0aW9uUGFuZWxSZXN1bHQoZGlzbWlzc1Nvb24oUmVhc29uRm9yRGlzbWlzc2lu
Z0NvcnJlY3Rpb25QYW5lbEFjY2VwdGVkKSk7IAotICAgIGVsc2UKLSAgICAgICAgbV9jb3JyZWN0
aW9uUGFuZWxJbmZvLnJhbmdlVG9CZVJlcGxhY2VkLmNsZWFyKCk7Ci19Ci0KLWJvb2wgU3BlbGxp
bmdDb3JyZWN0aW9uQ29udHJvbGxlcjo6aGFzUGVuZGluZ0NvcnJlY3Rpb24oKSBjb25zdAotewot
ICAgIHJldHVybiBtX2NvcnJlY3Rpb25QYW5lbEluZm8ucmFuZ2VUb0JlUmVwbGFjZWQ7Ci19Ci0K
LWJvb2wgU3BlbGxpbmdDb3JyZWN0aW9uQ29udHJvbGxlcjo6aXNTcGVsbGluZ01hcmtlckFsbG93
ZWQoUGFzc1JlZlB0cjxSYW5nZT4gbWlzc3BlbGxpbmdSYW5nZSkgY29uc3QKLXsKLSAgICByZXR1
cm4gIW1fZnJhbWUtPmRvY3VtZW50KCktPm1hcmtlcnMoKS0+aGFzTWFya2VycyhtaXNzcGVsbGlu
Z1JhbmdlLmdldCgpLCBEb2N1bWVudE1hcmtlcjo6U3BlbGxDaGVja2luZ0V4ZW1wdGlvbik7Ci19
Ci0KLXZvaWQgU3BlbGxpbmdDb3JyZWN0aW9uQ29udHJvbGxlcjo6c2hvdyhQYXNzUmVmUHRyPFJh
bmdlPiByYW5nZVRvUmVwbGFjZSwgY29uc3QgU3RyaW5nJiByZXBsYWNlbWVudCkKLXsKLSAgICBG
bG9hdFJlY3QgYm91bmRpbmdCb3ggPSByb290Vmlld1JlY3RGb3JSYW5nZShyYW5nZVRvUmVwbGFj
ZS5nZXQoKSk7Ci0gICAgaWYgKGJvdW5kaW5nQm94LmlzRW1wdHkoKSkKLSAgICAgICAgcmV0dXJu
OwotICAgIG1fY29ycmVjdGlvblBhbmVsSW5mby5yZXBsYWNlZFN0cmluZyA9IHBsYWluVGV4dChy
YW5nZVRvUmVwbGFjZS5nZXQoKSk7Ci0gICAgbV9jb3JyZWN0aW9uUGFuZWxJbmZvLnJhbmdlVG9C
ZVJlcGxhY2VkID0gcmFuZ2VUb1JlcGxhY2U7Ci0gICAgbV9jb3JyZWN0aW9uUGFuZWxJbmZvLnJl
cGxhY2VtZW50U3RyaW5nID0gcmVwbGFjZW1lbnQ7Ci0gICAgbV9jb3JyZWN0aW9uUGFuZWxJbmZv
LmlzQWN0aXZlID0gdHJ1ZTsKLSAgICBjbGllbnQoKS0+c2hvd0NvcnJlY3Rpb25QYW5lbChtX2Nv
cnJlY3Rpb25QYW5lbEluZm8ucGFuZWxUeXBlLCBib3VuZGluZ0JveCwgbV9jb3JyZWN0aW9uUGFu
ZWxJbmZvLnJlcGxhY2VkU3RyaW5nLCByZXBsYWNlbWVudCwgVmVjdG9yPFN0cmluZz4oKSk7Ci19
Ci0KLXZvaWQgU3BlbGxpbmdDb3JyZWN0aW9uQ29udHJvbGxlcjo6aGFuZGxlQ2FuY2VsT3BlcmF0
aW9uKCkKLXsKLSAgICBpZiAoIW1fY29ycmVjdGlvblBhbmVsSW5mby5pc0FjdGl2ZSkKLSAgICAg
ICAgcmV0dXJuOwotICAgIG1fY29ycmVjdGlvblBhbmVsSW5mby5pc0FjdGl2ZSA9IGZhbHNlOwot
ICAgIGRpc21pc3MoUmVhc29uRm9yRGlzbWlzc2luZ0NvcnJlY3Rpb25QYW5lbENhbmNlbGxlZCk7
Ci19Ci0KLXZvaWQgU3BlbGxpbmdDb3JyZWN0aW9uQ29udHJvbGxlcjo6ZGlzbWlzcyhSZWFzb25G
b3JEaXNtaXNzaW5nQ29ycmVjdGlvblBhbmVsIHJlYXNvbkZvckRpc21pc3NpbmcpCi17Ci0gICAg
aWYgKCFtX2NvcnJlY3Rpb25QYW5lbEluZm8uaXNBY3RpdmUpCi0gICAgICAgIHJldHVybjsKLSAg
ICBtX2NvcnJlY3Rpb25QYW5lbEluZm8uaXNBY3RpdmUgPSBmYWxzZTsKLSAgICBtX2NvcnJlY3Rp
b25QYW5lbElzRGlzbWlzc2VkQnlFZGl0b3IgPSB0cnVlOwotICAgIGlmIChjbGllbnQoKSkKLSAg
ICAgICAgY2xpZW50KCktPmRpc21pc3NDb3JyZWN0aW9uUGFuZWwocmVhc29uRm9yRGlzbWlzc2lu
Zyk7Ci19Ci0KLVN0cmluZyBTcGVsbGluZ0NvcnJlY3Rpb25Db250cm9sbGVyOjpkaXNtaXNzU29v
bihSZWFzb25Gb3JEaXNtaXNzaW5nQ29ycmVjdGlvblBhbmVsIHJlYXNvbkZvckRpc21pc3Npbmcp
Ci17Ci0gICAgaWYgKCFtX2NvcnJlY3Rpb25QYW5lbEluZm8uaXNBY3RpdmUpCi0gICAgICAgIHJl
dHVybiBTdHJpbmcoKTsKLSAgICBtX2NvcnJlY3Rpb25QYW5lbEluZm8uaXNBY3RpdmUgPSBmYWxz
ZTsKLSAgICBtX2NvcnJlY3Rpb25QYW5lbElzRGlzbWlzc2VkQnlFZGl0b3IgPSB0cnVlOwotICAg
IGlmICghY2xpZW50KCkpCi0gICAgICAgIHJldHVybiBTdHJpbmcoKTsKLSAgICByZXR1cm4gY2xp
ZW50KCktPmRpc21pc3NDb3JyZWN0aW9uUGFuZWxTb29uKHJlYXNvbkZvckRpc21pc3NpbmcpOwot
fQotCi12b2lkIFNwZWxsaW5nQ29ycmVjdGlvbkNvbnRyb2xsZXI6OmFwcGx5Q29ycmVjdGlvblBh
bmVsSW5mbyhjb25zdCBWZWN0b3I8RG9jdW1lbnRNYXJrZXI6Ok1hcmtlclR5cGU+JiBtYXJrZXJU
eXBlc1RvQWRkKQotewotICAgIGlmICghbV9jb3JyZWN0aW9uUGFuZWxJbmZvLnJhbmdlVG9CZVJl
cGxhY2VkKQotICAgICAgICByZXR1cm47Ci0KLSAgICBFeGNlcHRpb25Db2RlIGVjID0gMDsKLSAg
ICBSZWZQdHI8UmFuZ2U+IHBhcmFncmFwaFJhbmdlQ29udGFpbmluZ0NvcnJlY3Rpb24gPSBtX2Nv
cnJlY3Rpb25QYW5lbEluZm8ucmFuZ2VUb0JlUmVwbGFjZWQtPmNsb25lUmFuZ2UoZWMpOwotICAg
IGlmIChlYykKLSAgICAgICAgcmV0dXJuOwotCi0gICAgc2V0U3RhcnQocGFyYWdyYXBoUmFuZ2VD
b250YWluaW5nQ29ycmVjdGlvbi5nZXQoKSwgc3RhcnRPZlBhcmFncmFwaChtX2NvcnJlY3Rpb25Q
YW5lbEluZm8ucmFuZ2VUb0JlUmVwbGFjZWQtPnN0YXJ0UG9zaXRpb24oKSkpOwotICAgIHNldEVu
ZChwYXJhZ3JhcGhSYW5nZUNvbnRhaW5pbmdDb3JyZWN0aW9uLmdldCgpLCBlbmRPZlBhcmFncmFw
aChtX2NvcnJlY3Rpb25QYW5lbEluZm8ucmFuZ2VUb0JlUmVwbGFjZWQtPmVuZFBvc2l0aW9uKCkp
KTsKLQotICAgIC8vIEFmdGVyIHdlIHJlcGxhY2UgdGhlIHdvcmQgYXQgcmFuZ2UgcmFuZ2VUb0Jl
UmVwbGFjZWQsIHdlIG5lZWQgdG8gYWRkIG1hcmtlcnMgdG8gdGhhdCByYW5nZS4KLSAgICAvLyBI
b3dldmVyLCBvbmNlIHRoZSByZXBsYWNlbWVudCB0b29rIHBsYWNlLCB0aGUgdmFsdWUgb2YgcmFu
Z2VUb0JlUmVwbGFjZWQgaXMgbm90IHZhbGlkIGFueW1vcmUuCi0gICAgLy8gU28gYmVmb3JlIHdl
IGNhcnJ5IG91dCB0aGUgcmVwbGFjZW1lbnQsIHdlIG5lZWQgdG8gc3RvcmUgdGhlIHN0YXJ0IHBv
c2l0aW9uIG9mIHJhbmdlVG9CZVJlcGxhY2VkCi0gICAgLy8gcmVsYXRpdmUgdG8gdGhlIHN0YXJ0
IHBvc2l0aW9uIG9mIHRoZSBjb250YWluaW5nIHBhcmFncmFwaC4gV2UgdXNlIGNvcnJlY3Rpb25T
dGFydE9mZnNldEluUGFyYWdyYXBoCi0gICAgLy8gdG8gc3RvcmUgdGhpcyB2YWx1ZS4gSW4gb3Jk
ZXIgdG8gb2J0YWluIHRoaXMgb2Zmc2V0LCB3ZSBuZWVkIHRvIGZpcnN0IGNyZWF0ZSBhIHJhbmdl
Ci0gICAgLy8gd2hpY2ggc3BhbnMgZnJvbSB0aGUgc3RhcnQgb2YgcGFyYWdyYXBoIHRvIHRoZSBz
dGFydCBwb3NpdGlvbiBvZiByYW5nZVRvQmVSZXBsYWNlZC4KLSAgICBSZWZQdHI8UmFuZ2U+IGNv
cnJlY3Rpb25TdGFydE9mZnNldEluUGFyYWdyYXBoQXNSYW5nZSA9IFJhbmdlOjpjcmVhdGUocGFy
YWdyYXBoUmFuZ2VDb250YWluaW5nQ29ycmVjdGlvbi0+c3RhcnRDb250YWluZXIoZWMpLT5kb2N1
bWVudCgpLCBwYXJhZ3JhcGhSYW5nZUNvbnRhaW5pbmdDb3JyZWN0aW9uLT5zdGFydFBvc2l0aW9u
KCksIHBhcmFncmFwaFJhbmdlQ29udGFpbmluZ0NvcnJlY3Rpb24tPnN0YXJ0UG9zaXRpb24oKSk7
Ci0gICAgaWYgKGVjKQotICAgICAgICByZXR1cm47Ci0KLSAgICBQb3NpdGlvbiBzdGFydFBvc2l0
aW9uT2ZSYW5nZVRvQmVSZXBsYWNlZCA9IG1fY29ycmVjdGlvblBhbmVsSW5mby5yYW5nZVRvQmVS
ZXBsYWNlZC0+c3RhcnRQb3NpdGlvbigpOwotICAgIGNvcnJlY3Rpb25TdGFydE9mZnNldEluUGFy
YWdyYXBoQXNSYW5nZS0+c2V0RW5kKHN0YXJ0UG9zaXRpb25PZlJhbmdlVG9CZVJlcGxhY2VkLmNv
bnRhaW5lck5vZGUoKSwgc3RhcnRQb3NpdGlvbk9mUmFuZ2VUb0JlUmVwbGFjZWQuY29tcHV0ZU9m
ZnNldEluQ29udGFpbmVyTm9kZSgpLCBlYyk7Ci0gICAgaWYgKGVjKQotICAgICAgICByZXR1cm47
Ci0KLSAgICAvLyBUYWtlIG5vdGUgb2YgdGhlIGxvY2F0aW9uIG9mIGF1dG9jb3JyZWN0aW9uIHNv
IHRoYXQgd2UgY2FuIGFkZCBtYXJrZXIgYWZ0ZXIgdGhlIHJlcGxhY2VtZW50IHRvb2sgcGxhY2Uu
Ci0gICAgaW50IGNvcnJlY3Rpb25TdGFydE9mZnNldEluUGFyYWdyYXBoID0gVGV4dEl0ZXJhdG9y
OjpyYW5nZUxlbmd0aChjb3JyZWN0aW9uU3RhcnRPZmZzZXRJblBhcmFncmFwaEFzUmFuZ2UuZ2V0
KCkpOwotCi0gICAgLy8gQ2xvbmUgdGhlIHJhbmdlLCBzaW5jZSB0aGUgY2FsbGVyIG9mIHRoaXMg
bWV0aG9kIG1heSB3YW50IHRvIGtlZXAgdGhlIG9yaWdpbmFsIHJhbmdlIGFyb3VuZC4KLSAgICBS
ZWZQdHI8UmFuZ2U+IHJhbmdlVG9CZVJlcGxhY2VkID0gbV9jb3JyZWN0aW9uUGFuZWxJbmZvLnJh
bmdlVG9CZVJlcGxhY2VkLT5jbG9uZVJhbmdlKGVjKTsKLSAgICBhcHBseUNvbW1hbmQoU3BlbGxp
bmdDb3JyZWN0aW9uQ29tbWFuZDo6Y3JlYXRlKHJhbmdlVG9CZVJlcGxhY2VkLCBtX2NvcnJlY3Rp
b25QYW5lbEluZm8ucmVwbGFjZW1lbnRTdHJpbmcpKTsKLSAgICBzZXRFbmQocGFyYWdyYXBoUmFu
Z2VDb250YWluaW5nQ29ycmVjdGlvbi5nZXQoKSwgbV9mcmFtZS0+c2VsZWN0aW9uKCktPnNlbGVj
dGlvbigpLnN0YXJ0KCkpOwotICAgIFJlZlB0cjxSYW5nZT4gcmVwbGFjZW1lbnRSYW5nZSA9IFRl
eHRJdGVyYXRvcjo6c3VicmFuZ2UocGFyYWdyYXBoUmFuZ2VDb250YWluaW5nQ29ycmVjdGlvbi5n
ZXQoKSwgY29ycmVjdGlvblN0YXJ0T2Zmc2V0SW5QYXJhZ3JhcGgsICBtX2NvcnJlY3Rpb25QYW5l
bEluZm8ucmVwbGFjZW1lbnRTdHJpbmcubGVuZ3RoKCkpOwotICAgIFN0cmluZyBuZXdUZXh0ID0g
cGxhaW5UZXh0KHJlcGxhY2VtZW50UmFuZ2UuZ2V0KCkpOwotCi0gICAgLy8gQ2hlY2sgdG8gc2Vl
IGlmIHJlcGxhY2VtZW50IHN1Y2NlZWRlZC4KLSAgICBpZiAobmV3VGV4dCAhPSBtX2NvcnJlY3Rp
b25QYW5lbEluZm8ucmVwbGFjZW1lbnRTdHJpbmcpCi0gICAgICAgIHJldHVybjsKLQotICAgIERv
Y3VtZW50TWFya2VyQ29udHJvbGxlciogbWFya2VycyA9IHJlcGxhY2VtZW50UmFuZ2UtPnN0YXJ0
Q29udGFpbmVyKCktPmRvY3VtZW50KCktPm1hcmtlcnMoKTsKLSAgICBzaXplX3Qgc2l6ZSA9IG1h
cmtlclR5cGVzVG9BZGQuc2l6ZSgpOwotICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgc2l6ZTsg
KytpKSB7Ci0gICAgICAgIERvY3VtZW50TWFya2VyOjpNYXJrZXJUeXBlIG1hcmtlclR5cGUgPSBt
YXJrZXJUeXBlc1RvQWRkW2ldOwotICAgICAgICBTdHJpbmcgZGVzY3JpcHRpb247Ci0gICAgICAg
IGlmIChtX2NvcnJlY3Rpb25QYW5lbEluZm8ucGFuZWxUeXBlICE9IENvcnJlY3Rpb25QYW5lbElu
Zm86OlBhbmVsVHlwZVJldmVyc2lvbiAmJiAobWFya2VyVHlwZSA9PSBEb2N1bWVudE1hcmtlcjo6
UmVwbGFjZW1lbnQgfHwgbWFya2VyVHlwZSA9PSBEb2N1bWVudE1hcmtlcjo6QXV0b2NvcnJlY3Rl
ZCkpCi0gICAgICAgICAgICBkZXNjcmlwdGlvbiA9IG1fY29ycmVjdGlvblBhbmVsSW5mby5yZXBs
YWNlZFN0cmluZzsKLSAgICAgICAgbWFya2Vycy0+YWRkTWFya2VyKHJlcGxhY2VtZW50UmFuZ2Uu
Z2V0KCksIG1hcmtlclR5cGUsIGRlc2NyaXB0aW9uKTsKLSAgICB9Ci19Ci0KLWJvb2wgU3BlbGxp
bmdDb3JyZWN0aW9uQ29udHJvbGxlcjo6YXBwbHlBdXRvY29ycmVjdGlvbkJlZm9yZVR5cGluZ0lm
QXBwcm9wcmlhdGUoKQotewotICAgIGlmICghbV9jb3JyZWN0aW9uUGFuZWxJbmZvLnJhbmdlVG9C
ZVJlcGxhY2VkIHx8ICFtX2NvcnJlY3Rpb25QYW5lbEluZm8uaXNBY3RpdmUpCi0gICAgICAgIHJl
dHVybiBmYWxzZTsKLQotICAgIGlmIChtX2NvcnJlY3Rpb25QYW5lbEluZm8ucGFuZWxUeXBlICE9
IENvcnJlY3Rpb25QYW5lbEluZm86OlBhbmVsVHlwZUNvcnJlY3Rpb24pCi0gICAgICAgIHJldHVy
biBmYWxzZTsKLQotICAgIFBvc2l0aW9uIGNhcmV0UG9zaXRpb24gPSBtX2ZyYW1lLT5zZWxlY3Rp
b24oKS0+c2VsZWN0aW9uKCkuc3RhcnQoKTsKLQotICAgIGlmIChtX2NvcnJlY3Rpb25QYW5lbElu
Zm8ucmFuZ2VUb0JlUmVwbGFjZWQtPmVuZFBvc2l0aW9uKCkgPT0gY2FyZXRQb3NpdGlvbikgewot
ICAgICAgICBoYW5kbGVDb3JyZWN0aW9uUGFuZWxSZXN1bHQoZGlzbWlzc1Nvb24oUmVhc29uRm9y
RGlzbWlzc2luZ0NvcnJlY3Rpb25QYW5lbEFjY2VwdGVkKSk7Ci0gICAgICAgIHJldHVybiB0cnVl
OwotICAgIH0gCi0gICAgCi0gICAgLy8gUGVuZGluZyBjb3JyZWN0aW9uIHNob3VsZCBhbHdheXMg
YmUgd2hlcmUgY2FyZXQgaXMuIEJ1dCBpbiBjYXNlIHRoaXMgaXMgbm90IGFsd2F5cyB0cnVlLCB3
ZSBzdGlsbCB3YW50IHRvIGRpc21pc3MgdGhlIHBhbmVsIHdpdGhvdXQgYWNjZXB0aW5nIHRoZSBj
b3JyZWN0aW9uLgotICAgIEFTU0VSVChtX2NvcnJlY3Rpb25QYW5lbEluZm8ucmFuZ2VUb0JlUmVw
bGFjZWQtPmVuZFBvc2l0aW9uKCkgPT0gY2FyZXRQb3NpdGlvbik7Ci0gICAgZGlzbWlzcyhSZWFz
b25Gb3JEaXNtaXNzaW5nQ29ycmVjdGlvblBhbmVsSWdub3JlZCk7Ci0gICAgcmV0dXJuIGZhbHNl
OwotfQotCi12b2lkIFNwZWxsaW5nQ29ycmVjdGlvbkNvbnRyb2xsZXI6OnJlc3BvbmRUb1VuYXBw
bGllZFNwZWxsQ29ycmVjdGlvbihjb25zdCBWaXNpYmxlU2VsZWN0aW9uJiBzZWxlY3Rpb25PZkNv
cnJlY3RlZCwgY29uc3QgU3RyaW5nJiBjb3JyZWN0ZWQsIGNvbnN0IFN0cmluZyYgY29ycmVjdGlv
bikKLXsKLSAgICBjbGllbnQoKS0+cmVjb3JkQXV0b2NvcnJlY3Rpb25SZXNwb25zZShFZGl0b3JD
bGllbnQ6OkF1dG9jb3JyZWN0aW9uUmV2ZXJ0ZWQsIGNvcnJlY3RlZCwgY29ycmVjdGlvbik7Ci0g
ICAgbV9mcmFtZS0+ZG9jdW1lbnQoKS0+dXBkYXRlTGF5b3V0KCk7Ci0gICAgbV9mcmFtZS0+c2Vs
ZWN0aW9uKCktPnNldFNlbGVjdGlvbihzZWxlY3Rpb25PZkNvcnJlY3RlZCwgRnJhbWVTZWxlY3Rp
b246OkNsb3NlVHlwaW5nIHwgRnJhbWVTZWxlY3Rpb246OkNsZWFyVHlwaW5nU3R5bGUgfCBGcmFt
ZVNlbGVjdGlvbjo6U3BlbGxDb3JyZWN0aW9uVHJpZ2dlcmVkKTsKLSAgICBSZWZQdHI8UmFuZ2U+
IHJhbmdlID0gUmFuZ2U6OmNyZWF0ZShtX2ZyYW1lLT5kb2N1bWVudCgpLCBtX2ZyYW1lLT5zZWxl
Y3Rpb24oKS0+c2VsZWN0aW9uKCkuc3RhcnQoKSwgbV9mcmFtZS0+c2VsZWN0aW9uKCktPnNlbGVj
dGlvbigpLmVuZCgpKTsKLQotICAgIERvY3VtZW50TWFya2VyQ29udHJvbGxlciogbWFya2VycyA9
IG1fZnJhbWUtPmRvY3VtZW50KCktPm1hcmtlcnMoKTsKLSAgICBtYXJrZXJzLT5yZW1vdmVNYXJr
ZXJzKHJhbmdlLmdldCgpLCBEb2N1bWVudE1hcmtlcjo6U3BlbGxpbmcgfCBEb2N1bWVudE1hcmtl
cjo6QXV0b2NvcnJlY3RlZCwgRG9jdW1lbnRNYXJrZXJDb250cm9sbGVyOjpSZW1vdmVQYXJ0aWFs
bHlPdmVybGFwcGluZ01hcmtlcik7Ci0gICAgbWFya2Vycy0+YWRkTWFya2VyKHJhbmdlLmdldCgp
LCBEb2N1bWVudE1hcmtlcjo6UmVwbGFjZW1lbnQpOwotICAgIG1hcmtlcnMtPmFkZE1hcmtlcihy
YW5nZS5nZXQoKSwgRG9jdW1lbnRNYXJrZXI6OlNwZWxsQ2hlY2tpbmdFeGVtcHRpb24pOwotfQot
Ci12b2lkIFNwZWxsaW5nQ29ycmVjdGlvbkNvbnRyb2xsZXI6OmNvcnJlY3Rpb25QYW5lbFRpbWVy
RmlyZWQoVGltZXI8U3BlbGxpbmdDb3JyZWN0aW9uQ29udHJvbGxlcj4qKQotewotICAgIG1fY29y
cmVjdGlvblBhbmVsSXNEaXNtaXNzZWRCeUVkaXRvciA9IGZhbHNlOwotICAgIHN3aXRjaCAobV9j
b3JyZWN0aW9uUGFuZWxJbmZvLnBhbmVsVHlwZSkgewotICAgIGNhc2UgQ29ycmVjdGlvblBhbmVs
SW5mbzo6UGFuZWxUeXBlQ29ycmVjdGlvbjogewotICAgICAgICBWaXNpYmxlU2VsZWN0aW9uIHNl
bGVjdGlvbihtX2ZyYW1lLT5zZWxlY3Rpb24oKS0+c2VsZWN0aW9uKCkpOwotICAgICAgICBWaXNp
YmxlUG9zaXRpb24gc3RhcnQoc2VsZWN0aW9uLnN0YXJ0KCksIHNlbGVjdGlvbi5hZmZpbml0eSgp
KTsKLSAgICAgICAgVmlzaWJsZVBvc2l0aW9uIHAgPSBzdGFydE9mV29yZChzdGFydCwgTGVmdFdv
cmRJZk9uQm91bmRhcnkpOwotICAgICAgICBWaXNpYmxlU2VsZWN0aW9uIGFkamFjZW50V29yZHMg
PSBWaXNpYmxlU2VsZWN0aW9uKHAsIHN0YXJ0KTsKLSAgICAgICAgbV9mcmFtZS0+ZWRpdG9yKCkt
Pm1hcmtBbGxNaXNzcGVsbGluZ3NBbmRCYWRHcmFtbWFySW5SYW5nZXMoVGV4dENoZWNraW5nVHlw
ZVNwZWxsaW5nIHwgVGV4dENoZWNraW5nVHlwZVNob3dDb3JyZWN0aW9uUGFuZWwsIGFkamFjZW50
V29yZHMudG9Ob3JtYWxpemVkUmFuZ2UoKS5nZXQoKSwgMCk7Ci0gICAgfQotICAgICAgICBicmVh
azsKLSAgICBjYXNlIENvcnJlY3Rpb25QYW5lbEluZm86OlBhbmVsVHlwZVJldmVyc2lvbjogewot
ICAgICAgICBpZiAoIW1fY29ycmVjdGlvblBhbmVsSW5mby5yYW5nZVRvQmVSZXBsYWNlZCkKLSAg
ICAgICAgICAgIGJyZWFrOwotICAgICAgICBtX2NvcnJlY3Rpb25QYW5lbEluZm8uaXNBY3RpdmUg
PSB0cnVlOwotICAgICAgICBtX2NvcnJlY3Rpb25QYW5lbEluZm8ucmVwbGFjZWRTdHJpbmcgPSBw
bGFpblRleHQobV9jb3JyZWN0aW9uUGFuZWxJbmZvLnJhbmdlVG9CZVJlcGxhY2VkLmdldCgpKTsK
LSAgICAgICAgRmxvYXRSZWN0IGJvdW5kaW5nQm94ID0gcm9vdFZpZXdSZWN0Rm9yUmFuZ2UobV9j
b3JyZWN0aW9uUGFuZWxJbmZvLnJhbmdlVG9CZVJlcGxhY2VkLmdldCgpKTsKLSAgICAgICAgaWYg
KCFib3VuZGluZ0JveC5pc0VtcHR5KCkpCi0gICAgICAgICAgICBjbGllbnQoKS0+c2hvd0NvcnJl
Y3Rpb25QYW5lbChtX2NvcnJlY3Rpb25QYW5lbEluZm8ucGFuZWxUeXBlLCBib3VuZGluZ0JveCwg
bV9jb3JyZWN0aW9uUGFuZWxJbmZvLnJlcGxhY2VkU3RyaW5nLCBtX2NvcnJlY3Rpb25QYW5lbElu
Zm8ucmVwbGFjZW1lbnRTdHJpbmcsIFZlY3RvcjxTdHJpbmc+KCkpOwotICAgIH0KLSAgICAgICAg
YnJlYWs7Ci0gICAgY2FzZSBDb3JyZWN0aW9uUGFuZWxJbmZvOjpQYW5lbFR5cGVTcGVsbGluZ1N1
Z2dlc3Rpb25zOiB7Ci0gICAgICAgIGlmICghbV9jb3JyZWN0aW9uUGFuZWxJbmZvLnJhbmdlVG9C
ZVJlcGxhY2VkIHx8IHBsYWluVGV4dChtX2NvcnJlY3Rpb25QYW5lbEluZm8ucmFuZ2VUb0JlUmVw
bGFjZWQuZ2V0KCkpICE9IG1fY29ycmVjdGlvblBhbmVsSW5mby5yZXBsYWNlZFN0cmluZykKLSAg
ICAgICAgICAgIGJyZWFrOwotICAgICAgICBTdHJpbmcgcGFyYWdyYXBoVGV4dCA9IHBsYWluVGV4
dChUZXh0Q2hlY2tpbmdQYXJhZ3JhcGgobV9jb3JyZWN0aW9uUGFuZWxJbmZvLnJhbmdlVG9CZVJl
cGxhY2VkKS5wYXJhZ3JhcGhSYW5nZSgpLmdldCgpKTsKLSAgICAgICAgVmVjdG9yPFN0cmluZz4g
c3VnZ2VzdGlvbnM7Ci0gICAgICAgIHRleHRDaGVja2VyKCktPmdldEd1ZXNzZXNGb3JXb3JkKG1f
Y29ycmVjdGlvblBhbmVsSW5mby5yZXBsYWNlZFN0cmluZywgcGFyYWdyYXBoVGV4dCwgc3VnZ2Vz
dGlvbnMpOwotICAgICAgICBpZiAoc3VnZ2VzdGlvbnMuaXNFbXB0eSgpKSB7Ci0gICAgICAgICAg
ICBtX2NvcnJlY3Rpb25QYW5lbEluZm8ucmFuZ2VUb0JlUmVwbGFjZWQuY2xlYXIoKTsKLSAgICAg
ICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAgICAgIFN0cmluZyB0b3BTdWdnZXN0aW9uID0g
c3VnZ2VzdGlvbnMuZmlyc3QoKTsKLSAgICAgICAgc3VnZ2VzdGlvbnMucmVtb3ZlKDApOwotICAg
ICAgICBtX2NvcnJlY3Rpb25QYW5lbEluZm8uaXNBY3RpdmUgPSB0cnVlOwotICAgICAgICBGbG9h
dFJlY3QgYm91bmRpbmdCb3ggPSByb290Vmlld1JlY3RGb3JSYW5nZShtX2NvcnJlY3Rpb25QYW5l
bEluZm8ucmFuZ2VUb0JlUmVwbGFjZWQuZ2V0KCkpOwotICAgICAgICBpZiAoIWJvdW5kaW5nQm94
LmlzRW1wdHkoKSkKLSAgICAgICAgICAgIGNsaWVudCgpLT5zaG93Q29ycmVjdGlvblBhbmVsKG1f
Y29ycmVjdGlvblBhbmVsSW5mby5wYW5lbFR5cGUsIGJvdW5kaW5nQm94LCBtX2NvcnJlY3Rpb25Q
YW5lbEluZm8ucmVwbGFjZWRTdHJpbmcsIHRvcFN1Z2dlc3Rpb24sIHN1Z2dlc3Rpb25zKTsKLSAg
ICB9Ci0gICAgICAgIGJyZWFrOwotICAgIH0KLX0KLQotdm9pZCBTcGVsbGluZ0NvcnJlY3Rpb25D
b250cm9sbGVyOjpoYW5kbGVDb3JyZWN0aW9uUGFuZWxSZXN1bHQoY29uc3QgU3RyaW5nJiBjb3Jy
ZWN0aW9uKQotewotICAgIFJhbmdlKiByZXBsYWNlZFJhbmdlID0gbV9jb3JyZWN0aW9uUGFuZWxJ
bmZvLnJhbmdlVG9CZVJlcGxhY2VkLmdldCgpOwotICAgIGlmICghcmVwbGFjZWRSYW5nZSB8fCBt
X2ZyYW1lLT5kb2N1bWVudCgpICE9IHJlcGxhY2VkUmFuZ2UtPm93bmVyRG9jdW1lbnQoKSkKLSAg
ICAgICAgcmV0dXJuOwotCi0gICAgU3RyaW5nIGN1cnJlbnRXb3JkID0gcGxhaW5UZXh0KG1fY29y
cmVjdGlvblBhbmVsSW5mby5yYW5nZVRvQmVSZXBsYWNlZC5nZXQoKSk7Ci0gICAgLy8gQ2hlY2sg
dG8gc2VlIGlmIHRoZSB3b3JkIHdlIGFyZSBhYm91dCB0byBjb3JyZWN0IGhhcyBiZWVuIGNoYW5n
ZWQgYmV0d2VlbiB0aW1lciBmaXJpbmcgYW5kIGNhbGxiYWNrIGJlaW5nIHRyaWdnZXJlZC4KLSAg
ICBpZiAoY3VycmVudFdvcmQgIT0gbV9jb3JyZWN0aW9uUGFuZWxJbmZvLnJlcGxhY2VkU3RyaW5n
KQotICAgICAgICByZXR1cm47Ci0KLSAgICBtX2NvcnJlY3Rpb25QYW5lbEluZm8uaXNBY3RpdmUg
PSBmYWxzZTsKLQotICAgIHN3aXRjaCAobV9jb3JyZWN0aW9uUGFuZWxJbmZvLnBhbmVsVHlwZSkg
ewotICAgIGNhc2UgQ29ycmVjdGlvblBhbmVsSW5mbzo6UGFuZWxUeXBlQ29ycmVjdGlvbjoKLSAg
ICAgICAgaWYgKGNvcnJlY3Rpb24ubGVuZ3RoKCkpIHsKLSAgICAgICAgICAgIG1fY29ycmVjdGlv
blBhbmVsSW5mby5yZXBsYWNlbWVudFN0cmluZyA9IGNvcnJlY3Rpb247Ci0gICAgICAgICAgICBh
cHBseUNvcnJlY3Rpb25QYW5lbEluZm8obWFya2VyVHlwZXNGb3JBdXRvY29ycmVjdGlvbigpKTsK
LSAgICAgICAgfSBlbHNlIGlmICghbV9jb3JyZWN0aW9uUGFuZWxJc0Rpc21pc3NlZEJ5RWRpdG9y
KQotICAgICAgICAgICAgcmVwbGFjZWRSYW5nZS0+c3RhcnRDb250YWluZXIoKS0+ZG9jdW1lbnQo
KS0+bWFya2VycygpLT5hZGRNYXJrZXIocmVwbGFjZWRSYW5nZSwgRG9jdW1lbnRNYXJrZXI6OlJl
amVjdGVkQ29ycmVjdGlvbiwgbV9jb3JyZWN0aW9uUGFuZWxJbmZvLnJlcGxhY2VkU3RyaW5nKTsK
LSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBDb3JyZWN0aW9uUGFuZWxJbmZvOjpQYW5lbFR5cGVS
ZXZlcnNpb246Ci0gICAgY2FzZSBDb3JyZWN0aW9uUGFuZWxJbmZvOjpQYW5lbFR5cGVTcGVsbGlu
Z1N1Z2dlc3Rpb25zOgotICAgICAgICBpZiAoY29ycmVjdGlvbi5sZW5ndGgoKSkgewotICAgICAg
ICAgICAgbV9jb3JyZWN0aW9uUGFuZWxJbmZvLnJlcGxhY2VtZW50U3RyaW5nID0gY29ycmVjdGlv
bjsKLSAgICAgICAgICAgIGFwcGx5Q29ycmVjdGlvblBhbmVsSW5mbyhtYXJrZXJUeXBlc0ZvclJl
cGxhY2VtZW50KCkpOwotICAgICAgICB9Ci0gICAgICAgIGJyZWFrOwotICAgIH0KLQotICAgIG1f
Y29ycmVjdGlvblBhbmVsSW5mby5yYW5nZVRvQmVSZXBsYWNlZC5jbGVhcigpOwotfQotCi1ib29s
IFNwZWxsaW5nQ29ycmVjdGlvbkNvbnRyb2xsZXI6OmlzQXV0b21hdGljU3BlbGxpbmdDb3JyZWN0
aW9uRW5hYmxlZCgpCi17Ci0gICAgcmV0dXJuIGNsaWVudCgpICYmIGNsaWVudCgpLT5pc0F1dG9t
YXRpY1NwZWxsaW5nQ29ycmVjdGlvbkVuYWJsZWQoKTsKLX0KLQotRmxvYXRSZWN0IFNwZWxsaW5n
Q29ycmVjdGlvbkNvbnRyb2xsZXI6OnJvb3RWaWV3UmVjdEZvclJhbmdlKGNvbnN0IFJhbmdlKiBy
YW5nZSkgY29uc3QKLXsKLSAgICBGcmFtZVZpZXcqIHZpZXcgPSBtX2ZyYW1lLT52aWV3KCk7Ci0g
ICAgaWYgKCF2aWV3KQotICAgICAgICByZXR1cm4gRmxvYXRSZWN0KCk7Ci0gICAgVmVjdG9yPEZs
b2F0UXVhZD4gdGV4dFF1YWRzOwotICAgIHJhbmdlLT50ZXh0UXVhZHModGV4dFF1YWRzKTsKLSAg
ICBGbG9hdFJlY3QgYm91bmRpbmdSZWN0OwotICAgIHNpemVfdCBzaXplID0gdGV4dFF1YWRzLnNp
emUoKTsKLSAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IHNpemU7ICsraSkKLSAgICAgICAgYm91
bmRpbmdSZWN0LnVuaXRlKHRleHRRdWFkc1tpXS5ib3VuZGluZ0JveCgpKTsKLSAgICByZXR1cm4g
dmlldy0+Y29udGVudHNUb1Jvb3RWaWV3KEludFJlY3QoYm91bmRpbmdSZWN0KSk7Ci19ICAgICAg
ICAKLQotdm9pZCBTcGVsbGluZ0NvcnJlY3Rpb25Db250cm9sbGVyOjpyZXNwb25kVG9DaGFuZ2Vk
U2VsZWN0aW9uKGNvbnN0IFZpc2libGVTZWxlY3Rpb24mIG9sZFNlbGVjdGlvbikKLXsKLSAgICBW
aXNpYmxlU2VsZWN0aW9uIGN1cnJlbnRTZWxlY3Rpb24obV9mcmFtZS0+c2VsZWN0aW9uKCktPnNl
bGVjdGlvbigpKTsKLSAgICAvLyBXaGVuIHVzZXIgbW92ZXMgY2FyZXQgdG8gdGhlIGVuZCBvZiBh
dXRvY29ycmVjdGVkIHdvcmQgYW5kIHBhdXNlcywgd2Ugc2hvdyB0aGUgcGFuZWwKLSAgICAvLyBj
b250YWluaW5nIHRoZSBvcmlnaW5hbCBwcmUtY29ycmVjdGlvbiB3b3JkIHNvIHRoYXQgdXNlciBj
YW4gcXVpY2tseSByZXZlcnQgdGhlCi0gICAgLy8gdW5kZXNpcmVkIGF1dG9jb3JyZWN0aW9uLiBI
ZXJlLCB3ZSBzdGFydCBjb3JyZWN0aW9uIHBhbmVsIHRpbWVyIG9uY2Ugd2UgY29uZmlybSB0aGF0
Ci0gICAgLy8gdGhlIG5ldyBjYXJldCBwb3NpdGlvbiBpcyBhdCB0aGUgZW5kIG9mIGEgd29yZC4K
LSAgICBpZiAoIWN1cnJlbnRTZWxlY3Rpb24uaXNDYXJldCgpIHx8IGN1cnJlbnRTZWxlY3Rpb24g
PT0gb2xkU2VsZWN0aW9uKQotICAgICAgICByZXR1cm47Ci0KLSAgICBWaXNpYmxlUG9zaXRpb24g
c2VsZWN0aW9uUG9zaXRpb24gPSBjdXJyZW50U2VsZWN0aW9uLnN0YXJ0KCk7Ci0gICAgCi0gICAg
Ly8gQ3JlYXRpbmcgYSBWaXNpYmxlIHBvc2l0aW9uIHRyaWdnZXJzIGEgbGF5b3V0IGFuZCB0aGVy
ZSBpcyBubwotICAgIC8vIGd1YXJhbnRlZSB0aGF0IHRoZSBzZWxlY3Rpb24gaXMgc3RpbGwgdmFs
aWQuCi0gICAgaWYgKHNlbGVjdGlvblBvc2l0aW9uLmlzTnVsbCgpKQotICAgICAgICByZXR1cm47
Ci0gICAgCi0gICAgVmlzaWJsZVBvc2l0aW9uIGVuZFBvc2l0aW9uT2ZXb3JkID0gZW5kT2ZXb3Jk
KHNlbGVjdGlvblBvc2l0aW9uLCBMZWZ0V29yZElmT25Cb3VuZGFyeSk7Ci0gICAgaWYgKHNlbGVj
dGlvblBvc2l0aW9uICE9IGVuZFBvc2l0aW9uT2ZXb3JkKQotICAgICAgICByZXR1cm47Ci0KLSAg
ICBQb3NpdGlvbiBwb3NpdGlvbiA9IGVuZFBvc2l0aW9uT2ZXb3JkLmRlZXBFcXVpdmFsZW50KCk7
Ci0gICAgaWYgKHBvc2l0aW9uLmFuY2hvclR5cGUoKSAhPSBQb3NpdGlvbjo6UG9zaXRpb25Jc09m
ZnNldEluQW5jaG9yKQotICAgICAgICByZXR1cm47Ci0KLSAgICBOb2RlKiBub2RlID0gcG9zaXRp
b24uY29udGFpbmVyTm9kZSgpOwotICAgIGludCBlbmRPZmZzZXQgPSBwb3NpdGlvbi5vZmZzZXRJ
bkNvbnRhaW5lck5vZGUoKTsKLSAgICBWZWN0b3I8RG9jdW1lbnRNYXJrZXIqPiBtYXJrZXJzID0g
bm9kZS0+ZG9jdW1lbnQoKS0+bWFya2VycygpLT5tYXJrZXJzRm9yKG5vZGUpOwotICAgIHNpemVf
dCBtYXJrZXJDb3VudCA9IG1hcmtlcnMuc2l6ZSgpOwotICAgIGZvciAoc2l6ZV90IGkgPSAwOyBp
IDwgbWFya2VyQ291bnQ7ICsraSkgewotICAgICAgICBjb25zdCBEb2N1bWVudE1hcmtlciogbWFy
a2VyID0gbWFya2Vyc1tpXTsKLSAgICAgICAgaWYgKCFzaG91bGRTdGFydFRpbWVyRm9yKG1hcmtl
ciwgZW5kT2Zmc2V0KSkKLSAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICBSZWZQdHI8UmFu
Z2U+IHdvcmRSYW5nZSA9IFJhbmdlOjpjcmVhdGUobV9mcmFtZS0+ZG9jdW1lbnQoKSwgbm9kZSwg
bWFya2VyLT5zdGFydE9mZnNldCgpLCBub2RlLCBtYXJrZXItPmVuZE9mZnNldCgpKTsKLSAgICAg
ICAgU3RyaW5nIGN1cnJlbnRXb3JkID0gcGxhaW5UZXh0KHdvcmRSYW5nZS5nZXQoKSk7Ci0gICAg
ICAgIGlmICghY3VycmVudFdvcmQubGVuZ3RoKCkpCi0gICAgICAgICAgICBjb250aW51ZTsKLQot
ICAgICAgICBtX2NvcnJlY3Rpb25QYW5lbEluZm8ucmFuZ2VUb0JlUmVwbGFjZWQgPSB3b3JkUmFu
Z2U7Ci0gICAgICAgIG1fY29ycmVjdGlvblBhbmVsSW5mby5yZXBsYWNlZFN0cmluZyA9IGN1cnJl
bnRXb3JkOwotICAgICAgICBpZiAobWFya2VyLT50eXBlKCkgPT0gRG9jdW1lbnRNYXJrZXI6OlNw
ZWxsaW5nKQotICAgICAgICAgICAgc3RhcnRDb3JyZWN0aW9uUGFuZWxUaW1lcihDb3JyZWN0aW9u
UGFuZWxJbmZvOjpQYW5lbFR5cGVTcGVsbGluZ1N1Z2dlc3Rpb25zKTsKLSAgICAgICAgZWxzZSB7
Ci0gICAgICAgICAgICBtX2NvcnJlY3Rpb25QYW5lbEluZm8ucmVwbGFjZW1lbnRTdHJpbmcgPSBt
YXJrZXItPmRlc2NyaXB0aW9uKCk7Ci0gICAgICAgICAgICBzdGFydENvcnJlY3Rpb25QYW5lbFRp
bWVyKENvcnJlY3Rpb25QYW5lbEluZm86OlBhbmVsVHlwZVJldmVyc2lvbik7Ci0gICAgICAgIH0K
LQotICAgICAgICBicmVhazsKLSAgICB9Ci19Ci0KLXZvaWQgU3BlbGxpbmdDb3JyZWN0aW9uQ29u
dHJvbGxlcjo6cmVzcG9uZFRvQXBwbGllZEVkaXRpbmcoQ29tcG9zaXRlRWRpdENvbW1hbmQqIGNv
bW1hbmQpCi17Ci0gICAgaWYgKGNvbW1hbmQtPmlzVG9wTGV2ZWxDb21tYW5kKCkgJiYgIWNvbW1h
bmQtPnNob3VsZFJldGFpbkF1dG9jb3JyZWN0aW9uSW5kaWNhdG9yKCkpCi0gICAgICAgIG1fZnJh
bWUtPmRvY3VtZW50KCktPm1hcmtlcnMoKS0+cmVtb3ZlTWFya2VycyhEb2N1bWVudE1hcmtlcjo6
Q29ycmVjdGlvbkluZGljYXRvcik7Ci0KLSAgICBtYXJrUHJlY2VkaW5nV2hpdGVzcGFjZUZvckRl
bGV0ZWRBdXRvY29ycmVjdGlvbkFmdGVyQ29tbWFuZChjb21tYW5kKTsKLSAgICBtX29yaWdpbmFs
U3RyaW5nRm9yTGFzdERlbGV0ZWRBdXRvY29ycmVjdGlvbiA9IFN0cmluZygpOwotfQotCi12b2lk
IFNwZWxsaW5nQ29ycmVjdGlvbkNvbnRyb2xsZXI6OnJlc3BvbmRUb1VuYXBwbGllZEVkaXRpbmco
RWRpdENvbW1hbmRDb21wb3NpdGlvbiogY29tbWFuZCkKLXsKLSAgICBpZiAoIWNvbW1hbmQtPndh
c0NyZWF0ZUxpbmtDb21tYW5kKCkpCi0gICAgICAgIHJldHVybjsKLSAgICBSZWZQdHI8UmFuZ2U+
IHJhbmdlID0gUmFuZ2U6OmNyZWF0ZShtX2ZyYW1lLT5kb2N1bWVudCgpLCBjb21tYW5kLT5zdGFy
dGluZ1NlbGVjdGlvbigpLnN0YXJ0KCksIGNvbW1hbmQtPnN0YXJ0aW5nU2VsZWN0aW9uKCkuZW5k
KCkpOwotICAgIGlmICghcmFuZ2UpCi0gICAgICAgIHJldHVybjsKLSAgICBEb2N1bWVudE1hcmtl
ckNvbnRyb2xsZXIqIG1hcmtlcnMgPSBtX2ZyYW1lLT5kb2N1bWVudCgpLT5tYXJrZXJzKCk7Ci0g
ICAgbWFya2Vycy0+YWRkTWFya2VyKHJhbmdlLmdldCgpLCBEb2N1bWVudE1hcmtlcjo6UmVwbGFj
ZW1lbnQpOwotICAgIG1hcmtlcnMtPmFkZE1hcmtlcihyYW5nZS5nZXQoKSwgRG9jdW1lbnRNYXJr
ZXI6OlNwZWxsQ2hlY2tpbmdFeGVtcHRpb24pOwotfQotCi1FZGl0b3JDbGllbnQqIFNwZWxsaW5n
Q29ycmVjdGlvbkNvbnRyb2xsZXI6OmNsaWVudCgpCi17Ci0gICAgcmV0dXJuIG1fZnJhbWUtPnBh
Z2UoKSA/IG1fZnJhbWUtPnBhZ2UoKS0+ZWRpdG9yQ2xpZW50KCkgOiAwOwotfQotCi1UZXh0Q2hl
Y2tlckNsaWVudCogU3BlbGxpbmdDb3JyZWN0aW9uQ29udHJvbGxlcjo6dGV4dENoZWNrZXIoKQot
ewotICAgIGlmIChFZGl0b3JDbGllbnQqIG93bmVyID0gY2xpZW50KCkpCi0gICAgICAgIHJldHVy
biBvd25lci0+dGV4dENoZWNrZXIoKTsKLSAgICByZXR1cm4gMDsKLX0KLQotdm9pZCBTcGVsbGlu
Z0NvcnJlY3Rpb25Db250cm9sbGVyOjpyZWNvcmRBdXRvY29ycmVjdGlvblJlc3BvbnNlUmV2ZXJz
ZWQoY29uc3QgU3RyaW5nJiByZXBsYWNlZFN0cmluZywgY29uc3QgU3RyaW5nJiByZXBsYWNlbWVu
dFN0cmluZykKLXsKLSAgICBjbGllbnQoKS0+cmVjb3JkQXV0b2NvcnJlY3Rpb25SZXNwb25zZShF
ZGl0b3JDbGllbnQ6OkF1dG9jb3JyZWN0aW9uUmV2ZXJ0ZWQsIHJlcGxhY2VkU3RyaW5nLCByZXBs
YWNlbWVudFN0cmluZyk7Ci19Ci0KLXZvaWQgU3BlbGxpbmdDb3JyZWN0aW9uQ29udHJvbGxlcjo6
cmVjb3JkQXV0b2NvcnJlY3Rpb25SZXNwb25zZVJldmVyc2VkKGNvbnN0IFN0cmluZyYgcmVwbGFj
ZWRTdHJpbmcsIFBhc3NSZWZQdHI8UmFuZ2U+IHJlcGxhY2VtZW50UmFuZ2UpCi17Ci0gICAgcmVj
b3JkQXV0b2NvcnJlY3Rpb25SZXNwb25zZVJldmVyc2VkKHJlcGxhY2VkU3RyaW5nLCBwbGFpblRl
eHQocmVwbGFjZW1lbnRSYW5nZS5nZXQoKSkpOwotfQotCi12b2lkIFNwZWxsaW5nQ29ycmVjdGlv
bkNvbnRyb2xsZXI6Om1hcmtSZXZlcnNlZChQYXNzUmVmUHRyPFJhbmdlPiBjaGFuZ2VkUmFuZ2Up
Ci17Ci0gICAgY2hhbmdlZFJhbmdlLT5zdGFydENvbnRhaW5lcigpLT5kb2N1bWVudCgpLT5tYXJr
ZXJzKCktPnJlbW92ZU1hcmtlcnMoY2hhbmdlZFJhbmdlLmdldCgpLCBEb2N1bWVudE1hcmtlcjo6
QXV0b2NvcnJlY3RlZCwgRG9jdW1lbnRNYXJrZXJDb250cm9sbGVyOjpSZW1vdmVQYXJ0aWFsbHlP
dmVybGFwcGluZ01hcmtlcik7Ci0gICAgY2hhbmdlZFJhbmdlLT5zdGFydENvbnRhaW5lcigpLT5k
b2N1bWVudCgpLT5tYXJrZXJzKCktPmFkZE1hcmtlcihjaGFuZ2VkUmFuZ2UuZ2V0KCksIERvY3Vt
ZW50TWFya2VyOjpTcGVsbENoZWNraW5nRXhlbXB0aW9uKTsKLX0KLQotdm9pZCBTcGVsbGluZ0Nv
cnJlY3Rpb25Db250cm9sbGVyOjptYXJrQ29ycmVjdGlvbihQYXNzUmVmUHRyPFJhbmdlPiByZXBs
YWNlZFJhbmdlLCBjb25zdCBTdHJpbmcmIHJlcGxhY2VkU3RyaW5nKQotewotICAgIFZlY3RvcjxE
b2N1bWVudE1hcmtlcjo6TWFya2VyVHlwZT4gbWFya2VyVHlwZXNUb0FkZCA9IG1hcmtlclR5cGVz
Rm9yQXV0b2NvcnJlY3Rpb24oKTsKLSAgICBEb2N1bWVudE1hcmtlckNvbnRyb2xsZXIqIG1hcmtl
cnMgPSByZXBsYWNlZFJhbmdlLT5zdGFydENvbnRhaW5lcigpLT5kb2N1bWVudCgpLT5tYXJrZXJz
KCk7Ci0gICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBtYXJrZXJUeXBlc1RvQWRkLnNpemUoKTsg
KytpKSB7Ci0gICAgICAgIERvY3VtZW50TWFya2VyOjpNYXJrZXJUeXBlIG1hcmtlclR5cGUgPSBt
YXJrZXJUeXBlc1RvQWRkW2ldOwotICAgICAgICBpZiAobWFya2VyVHlwZSA9PSBEb2N1bWVudE1h
cmtlcjo6UmVwbGFjZW1lbnQgfHwgbWFya2VyVHlwZSA9PSBEb2N1bWVudE1hcmtlcjo6QXV0b2Nv
cnJlY3RlZCkKLSAgICAgICAgICAgIG1hcmtlcnMtPmFkZE1hcmtlcihyZXBsYWNlZFJhbmdlLmdl
dCgpLCBtYXJrZXJUeXBlLCByZXBsYWNlZFN0cmluZyk7Ci0gICAgICAgIGVsc2UKLSAgICAgICAg
ICAgIG1hcmtlcnMtPmFkZE1hcmtlcihyZXBsYWNlZFJhbmdlLmdldCgpLCBtYXJrZXJUeXBlKTsK
LSAgICB9Ci19Ci0KLXZvaWQgU3BlbGxpbmdDb3JyZWN0aW9uQ29udHJvbGxlcjo6cmVjb3JkU3Bl
bGxjaGVja2VyUmVzcG9uc2VGb3JNb2RpZmllZENvcnJlY3Rpb24oUmFuZ2UqIHJhbmdlT2ZDb3Jy
ZWN0aW9uLCBjb25zdCBTdHJpbmcmIGNvcnJlY3RlZCwgY29uc3QgU3RyaW5nJiBjb3JyZWN0aW9u
KQotewotICAgIGlmICghcmFuZ2VPZkNvcnJlY3Rpb24pCi0gICAgICAgIHJldHVybjsKLSAgICBE
b2N1bWVudE1hcmtlckNvbnRyb2xsZXIqIG1hcmtlcnMgPSByYW5nZU9mQ29ycmVjdGlvbi0+c3Rh
cnRDb250YWluZXIoKS0+ZG9jdW1lbnQoKS0+bWFya2VycygpOwotICAgIFZlY3RvcjxEb2N1bWVu
dE1hcmtlcio+IGNvcnJlY3RlZE9uY2VNYXJrZXJzID0gbWFya2Vycy0+bWFya2Vyc0luUmFuZ2Uo
cmFuZ2VPZkNvcnJlY3Rpb24sIERvY3VtZW50TWFya2VyOjpBdXRvY29ycmVjdGVkKTsKLSAgICBp
ZiAoY29ycmVjdGVkT25jZU1hcmtlcnMuaXNFbXB0eSgpKQotICAgICAgICByZXR1cm47Ci0gICAg
Ci0gICAgLy8gU3BlbGxpbmcgY29ycmVjdGVkIHRleHQgaGFzIGJlZW4gZWRpdGVkLiBXZSBuZWVk
IHRvIGRldGVybWluZSB3aGV0aGVyIHVzZXIgaGFzIHJldmVydGVkIGl0IHRvIG9yaWdpbmFsIHRl
eHQgb3IKLSAgICAvLyBlZGl0ZWQgaXQgdG8gc29tZXRoaW5nIGVsc2UsIGFuZCBub3RpZnkgc3Bl
bGxjaGVja2VyIGFjY29yZGluZ2x5LgotICAgIGlmIChtYXJrZXJzSGF2ZUlkZW50aWNhbERlc2Ny
aXB0aW9uKGNvcnJlY3RlZE9uY2VNYXJrZXJzKSAmJiBjb3JyZWN0ZWRPbmNlTWFya2Vyc1swXS0+
ZGVzY3JpcHRpb24oKSA9PSBjb3JyZWN0ZWQpCi0gICAgICAgIGNsaWVudCgpLT5yZWNvcmRBdXRv
Y29ycmVjdGlvblJlc3BvbnNlKEVkaXRvckNsaWVudDo6QXV0b2NvcnJlY3Rpb25SZXZlcnRlZCwg
Y29ycmVjdGVkLCBjb3JyZWN0aW9uKTsKLSAgICBlbHNlCi0gICAgICAgIGNsaWVudCgpLT5yZWNv
cmRBdXRvY29ycmVjdGlvblJlc3BvbnNlKEVkaXRvckNsaWVudDo6QXV0b2NvcnJlY3Rpb25FZGl0
ZWQsIGNvcnJlY3RlZCwgY29ycmVjdGlvbik7Ci0gICAgbWFya2Vycy0+cmVtb3ZlTWFya2Vycyhy
YW5nZU9mQ29ycmVjdGlvbiwgRG9jdW1lbnRNYXJrZXI6OkF1dG9jb3JyZWN0ZWQsIERvY3VtZW50
TWFya2VyQ29udHJvbGxlcjo6UmVtb3ZlUGFydGlhbGx5T3ZlcmxhcHBpbmdNYXJrZXIpOwotfQot
Ci12b2lkIFNwZWxsaW5nQ29ycmVjdGlvbkNvbnRyb2xsZXI6OmRlbGV0ZWRBdXRvY29ycmVjdGlv
bkF0UG9zaXRpb24oY29uc3QgUG9zaXRpb24mIHBvc2l0aW9uLCBjb25zdCBTdHJpbmcmIG9yaWdp
bmFsU3RyaW5nKQotewotICAgIG1fb3JpZ2luYWxTdHJpbmdGb3JMYXN0RGVsZXRlZEF1dG9jb3Jy
ZWN0aW9uID0gb3JpZ2luYWxTdHJpbmc7Ci0gICAgbV9wb3NpdGlvbkZvckxhc3REZWxldGVkQXV0
b2NvcnJlY3Rpb24gPSBwb3NpdGlvbjsKLX0KLQotdm9pZCBTcGVsbGluZ0NvcnJlY3Rpb25Db250
cm9sbGVyOjptYXJrUHJlY2VkaW5nV2hpdGVzcGFjZUZvckRlbGV0ZWRBdXRvY29ycmVjdGlvbkFm
dGVyQ29tbWFuZChFZGl0Q29tbWFuZCogY29tbWFuZCkKLXsKLSAgICBQb3NpdGlvbiBlbmRPZlNl
bGVjdGlvbiA9IGNvbW1hbmQtPmVuZGluZ1NlbGVjdGlvbigpLmVuZCgpOwotICAgIGlmIChlbmRP
ZlNlbGVjdGlvbiAhPSBtX3Bvc2l0aW9uRm9yTGFzdERlbGV0ZWRBdXRvY29ycmVjdGlvbikKLSAg
ICAgICAgcmV0dXJuOwotCi0gICAgUG9zaXRpb24gcHJlY2VkaW5nQ2hhcmFjdGVyUG9zaXRpb24g
PSBlbmRPZlNlbGVjdGlvbi5wcmV2aW91cygpOwotICAgIGlmIChlbmRPZlNlbGVjdGlvbiA9PSBw
cmVjZWRpbmdDaGFyYWN0ZXJQb3NpdGlvbikKLSAgICAgICAgcmV0dXJuOwotCi0gICAgUmVmUHRy
PFJhbmdlPiBwcmVjZWRpbmdDaGFyYWN0ZXJSYW5nZSA9IFJhbmdlOjpjcmVhdGUobV9mcmFtZS0+
ZG9jdW1lbnQoKSwgcHJlY2VkaW5nQ2hhcmFjdGVyUG9zaXRpb24sIGVuZE9mU2VsZWN0aW9uKTsK
LSAgICBTdHJpbmcgc3RyaW5nID0gcGxhaW5UZXh0KHByZWNlZGluZ0NoYXJhY3RlclJhbmdlLmdl
dCgpKTsKLSAgICBpZiAoc3RyaW5nLmlzRW1wdHkoKSB8fCAhaXNXaGl0ZXNwYWNlKHN0cmluZ1tz
dHJpbmcubGVuZ3RoKCkgLSAxXSkpCi0gICAgICAgIHJldHVybjsKLQotICAgIC8vIE1hcmsgdGhp
cyB3aGl0ZXNwYWNlIHRvIGluZGljYXRlIHdlIGhhdmUgZGVsZXRlZCBhbiBhdXRvY29ycmVjdGlv
biBmb2xsb3dpbmcgdGhpcwotICAgIC8vIHdoaXRlc3BhY2UuIFNvIGlmIHRoZSB1c2VyIHR5cGVz
IHRoZSBzYW1lIG9yaWdpbmFsIHdvcmQgYWdhaW4gYXQgdGhpcyBwb3NpdGlvbiwgd2UKLSAgICAv
LyB3b24ndCBhdXRvY29ycmVjdCBpdCBhZ2Fpbi4KLSAgICBtX2ZyYW1lLT5kb2N1bWVudCgpLT5t
YXJrZXJzKCktPmFkZE1hcmtlcihwcmVjZWRpbmdDaGFyYWN0ZXJSYW5nZS5nZXQoKSwgRG9jdW1l
bnRNYXJrZXI6OkRlbGV0ZWRBdXRvY29ycmVjdGlvbiwgbV9vcmlnaW5hbFN0cmluZ0Zvckxhc3RE
ZWxldGVkQXV0b2NvcnJlY3Rpb24pOwotfQotCi1ib29sIFNwZWxsaW5nQ29ycmVjdGlvbkNvbnRy
b2xsZXI6OnByb2Nlc3NNYXJrZXJzT25UZXh0VG9CZVJlcGxhY2VkQnlSZXN1bHQoY29uc3QgVGV4
dENoZWNraW5nUmVzdWx0KiByZXN1bHQsIFJhbmdlKiByYW5nZVRvQmVSZXBsYWNlZCwgY29uc3Qg
U3RyaW5nJiBzdHJpbmdUb0JlUmVwbGFjZWQpCi17Ci0gICAgRG9jdW1lbnRNYXJrZXJDb250cm9s
bGVyKiBtYXJrZXJDb250cm9sbGVyID0gbV9mcmFtZS0+ZG9jdW1lbnQoKS0+bWFya2VycygpOwot
ICAgIGlmIChtYXJrZXJDb250cm9sbGVyLT5oYXNNYXJrZXJzKHJhbmdlVG9CZVJlcGxhY2VkLCBE
b2N1bWVudE1hcmtlcjo6UmVwbGFjZW1lbnQpKSB7Ci0gICAgICAgIGlmIChyZXN1bHQtPnR5cGUg
PT0gVGV4dENoZWNraW5nVHlwZUNvcnJlY3Rpb24pCi0gICAgICAgICAgICByZWNvcmRTcGVsbGNo
ZWNrZXJSZXNwb25zZUZvck1vZGlmaWVkQ29ycmVjdGlvbihyYW5nZVRvQmVSZXBsYWNlZCwgc3Ry
aW5nVG9CZVJlcGxhY2VkLCByZXN1bHQtPnJlcGxhY2VtZW50KTsKLSAgICAgICAgcmV0dXJuIGZh
bHNlOwotICAgIH0KLQotICAgIGlmIChtYXJrZXJDb250cm9sbGVyLT5oYXNNYXJrZXJzKHJhbmdl
VG9CZVJlcGxhY2VkLCBEb2N1bWVudE1hcmtlcjo6UmVqZWN0ZWRDb3JyZWN0aW9uKSkKLSAgICAg
ICAgcmV0dXJuIGZhbHNlOwotCi0gICAgUG9zaXRpb24gYmVnaW5uaW5nT2ZSYW5nZSA9IHJhbmdl
VG9CZVJlcGxhY2VkLT5zdGFydFBvc2l0aW9uKCk7Ci0gICAgUG9zaXRpb24gcHJlY2VkaW5nQ2hh
cmFjdGVyUG9zaXRpb24gPSBiZWdpbm5pbmdPZlJhbmdlLnByZXZpb3VzKCk7Ci0gICAgUmVmUHRy
PFJhbmdlPiBwcmVjZWRpbmdDaGFyYWN0ZXJSYW5nZSA9IFJhbmdlOjpjcmVhdGUobV9mcmFtZS0+
ZG9jdW1lbnQoKSwgcHJlY2VkaW5nQ2hhcmFjdGVyUG9zaXRpb24sIGJlZ2lubmluZ09mUmFuZ2Up
OwotCi0gICAgVmVjdG9yPERvY3VtZW50TWFya2VyKj4gbWFya2VycyA9IG1hcmtlckNvbnRyb2xs
ZXItPm1hcmtlcnNJblJhbmdlKHByZWNlZGluZ0NoYXJhY3RlclJhbmdlLmdldCgpLCBEb2N1bWVu
dE1hcmtlcjo6RGVsZXRlZEF1dG9jb3JyZWN0aW9uKTsKLQotICAgIGZvciAoc2l6ZV90IGkgPSAw
OyBpIDwgbWFya2Vycy5zaXplKCk7ICsraSkgewotICAgICAgICBpZiAobWFya2Vyc1tpXS0+ZGVz
Y3JpcHRpb24oKSA9PSBzdHJpbmdUb0JlUmVwbGFjZWQpCi0gICAgICAgICAgICByZXR1cm4gZmFs
c2U7Ci0gICAgfQotCi0gICAgcmV0dXJuIHRydWU7Ci19Ci0gICAgCi0jZW5kaWYKLQotfSAvLyBu
YW1lc3BhY2UgV2ViQ29yZQpJbmRleDogU291cmNlL1dlYkNvcmUvZWRpdGluZy9TcGVsbGluZ0Nv
cnJlY3Rpb25Db250cm9sbGVyLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvZWRpdGlu
Zy9TcGVsbGluZ0NvcnJlY3Rpb25Db250cm9sbGVyLmgJKHJldmlzaW9uIDExMjk2MSkKKysrIFNv
dXJjZS9XZWJDb3JlL2VkaXRpbmcvU3BlbGxpbmdDb3JyZWN0aW9uQ29udHJvbGxlci5oCSh3b3Jr
aW5nIGNvcHkpCkBAIC0xLDE1NyArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEwIEFw
cGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQg
dXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlm
aWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0
aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBt
dXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3Ry
aWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdo
dAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0
ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRX
QVJFIElTIFBST1ZJREVEIEJZIEFQUExFIENPTVBVVEVSLCBJTkMuIGBgQVMgSVMnJyBBTkQgQU5Z
Ci0gKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sIFRIRQotICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBB
TkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAg
SU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgQ09NUFVURVIsIElOQy4gT1IKLSAqIENPTlRSSUJVVE9S
UyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFM
LAotICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLAotICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBT
RVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCi0gKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJ
TlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCi0gKiBPRiBMSUFC
SUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAq
IChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBP
VVQgT0YgVEhFIFVTRQotICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRI
RSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0jaWZuZGVmIFNwZWxsaW5nQ29y
cmVjdGlvbkNvbnRyb2xsZXJfaAotI2RlZmluZSBTcGVsbGluZ0NvcnJlY3Rpb25Db250cm9sbGVy
X2gKLQotI2luY2x1ZGUgIkRvY3VtZW50TWFya2VyLmgiCi0jaW5jbHVkZSAiUmFuZ2UuaCIKLSNp
bmNsdWRlICJUZXh0Q2hlY2tpbmcuaCIKLSNpbmNsdWRlICJUaW1lci5oIgotI2luY2x1ZGUgIlZp
c2libGVTZWxlY3Rpb24uaCIKLSNpbmNsdWRlIDx3dGYvTm9uY29weWFibGUuaD4KLSNpbmNsdWRl
IDx3dGYvVW51c2VkUGFyYW0uaD4KLQotbmFtZXNwYWNlIFdlYkNvcmUgewotCi1jbGFzcyBDb21w
b3NpdGVFZGl0Q29tbWFuZDsKLWNsYXNzIEVkaXRvckNsaWVudDsKLWNsYXNzIEVkaXRDb21tYW5k
OwotY2xhc3MgRWRpdENvbW1hbmRDb21wb3NpdGlvbjsKLWNsYXNzIEZyYW1lOwotY2xhc3MgVGV4
dENoZWNrZXJDbGllbnQ7Ci0KLXN0cnVjdCBDb3JyZWN0aW9uUGFuZWxJbmZvIHsKLSAgICBlbnVt
IFBhbmVsVHlwZSB7Ci0gICAgICAgIFBhbmVsVHlwZUNvcnJlY3Rpb24gPSAwLAotICAgICAgICBQ
YW5lbFR5cGVSZXZlcnNpb24sCi0gICAgICAgIFBhbmVsVHlwZVNwZWxsaW5nU3VnZ2VzdGlvbnMK
LSAgICB9OwotCi0gICAgUmVmUHRyPFJhbmdlPiByYW5nZVRvQmVSZXBsYWNlZDsKLSAgICBTdHJp
bmcgcmVwbGFjZWRTdHJpbmc7Ci0gICAgU3RyaW5nIHJlcGxhY2VtZW50U3RyaW5nOwotICAgIFBh
bmVsVHlwZSBwYW5lbFR5cGU7Ci0gICAgYm9vbCBpc0FjdGl2ZTsKLX07Ci0KLXN0cnVjdCBUZXh0
Q2hlY2tpbmdSZXN1bHQ7Ci0KLWVudW0gUmVhc29uRm9yRGlzbWlzc2luZ0NvcnJlY3Rpb25QYW5l
bCB7Ci0gICAgUmVhc29uRm9yRGlzbWlzc2luZ0NvcnJlY3Rpb25QYW5lbENhbmNlbGxlZCA9IDAs
Ci0gICAgUmVhc29uRm9yRGlzbWlzc2luZ0NvcnJlY3Rpb25QYW5lbElnbm9yZWQsCi0gICAgUmVh
c29uRm9yRGlzbWlzc2luZ0NvcnJlY3Rpb25QYW5lbEFjY2VwdGVkCi19OwotCi0jaWYgVVNFKEFV
VE9DT1JSRUNUSU9OX1BBTkVMKQotI2RlZmluZSBVTkxFU1NfRU5BQkxFRChmdW5jdGlvbkJvZHkp
IDsKLSNlbHNlCi0jZGVmaW5lIFVOTEVTU19FTkFCTEVEKGZ1bmN0aW9uQm9keSkgZnVuY3Rpb25C
b2R5Ci0jZW5kaWYKLQotY2xhc3MgU3BlbGxpbmdDb3JyZWN0aW9uQ29udHJvbGxlciB7Ci0gICAg
V1RGX01BS0VfTk9OQ09QWUFCTEUoU3BlbGxpbmdDb3JyZWN0aW9uQ29udHJvbGxlcik7IFdURl9N
QUtFX0ZBU1RfQUxMT0NBVEVEOwotcHVibGljOgotICAgIFNwZWxsaW5nQ29ycmVjdGlvbkNvbnRy
b2xsZXIoRnJhbWUqKSBVTkxFU1NfRU5BQkxFRCh7fSkKLSAgICB+U3BlbGxpbmdDb3JyZWN0aW9u
Q29udHJvbGxlcigpIFVOTEVTU19FTkFCTEVEKHt9KQotCi0gICAgdm9pZCBzdGFydENvcnJlY3Rp
b25QYW5lbFRpbWVyKENvcnJlY3Rpb25QYW5lbEluZm86OlBhbmVsVHlwZSkgVU5MRVNTX0VOQUJM
RUQoe30pCi0gICAgdm9pZCBzdG9wQ29ycmVjdGlvblBhbmVsVGltZXIoKSBVTkxFU1NfRU5BQkxF
RCh7fSkKLQotICAgIHZvaWQgZGlzbWlzcyhSZWFzb25Gb3JEaXNtaXNzaW5nQ29ycmVjdGlvblBh
bmVsKSBVTkxFU1NfRU5BQkxFRCh7fSkKLSAgICBTdHJpbmcgZGlzbWlzc1Nvb24oUmVhc29uRm9y
RGlzbWlzc2luZ0NvcnJlY3Rpb25QYW5lbCkgVU5MRVNTX0VOQUJMRUQoeyByZXR1cm4gU3RyaW5n
KCk7IH0pCi0gICAgdm9pZCBzaG93KFBhc3NSZWZQdHI8UmFuZ2U+IHJhbmdlVG9SZXBsYWNlLCBj
b25zdCBTdHJpbmcmIHJlcGxhY2VtZW50KSBVTkxFU1NfRU5BQkxFRCh7IFVOVVNFRF9QQVJBTShy
YW5nZVRvUmVwbGFjZSk7IFVOVVNFRF9QQVJBTShyZXBsYWNlbWVudCk7IH0pCi0KLSAgICB2b2lk
IGFwcGx5Q29ycmVjdGlvblBhbmVsSW5mbyhjb25zdCBWZWN0b3I8RG9jdW1lbnRNYXJrZXI6Ok1h
cmtlclR5cGU+JikgVU5MRVNTX0VOQUJMRUQoe30pCi0gICAgLy8gUmV0dXJuIHRydWUgaWYgY29y
cmVjdGlvbiB3YXMgYXBwbGllZCwgZmFsc2Ugb3RoZXJ3aXNlLgotICAgIGJvb2wgYXBwbHlBdXRv
Y29ycmVjdGlvbkJlZm9yZVR5cGluZ0lmQXBwcm9wcmlhdGUoKSBVTkxFU1NfRU5BQkxFRCh7IHJl
dHVybiBmYWxzZTsgfSkKLQotICAgIHZvaWQgcmVzcG9uZFRvVW5hcHBsaWVkU3BlbGxDb3JyZWN0
aW9uKGNvbnN0IFZpc2libGVTZWxlY3Rpb24mLCBjb25zdCBTdHJpbmcmIGNvcnJlY3RlZCwgY29u
c3QgU3RyaW5nJiBjb3JyZWN0aW9uKSBVTkxFU1NfRU5BQkxFRCh7IFVOVVNFRF9QQVJBTShjb3Jy
ZWN0ZWQpOyBVTlVTRURfUEFSQU0oY29ycmVjdGlvbik7IH0pCi0gICAgdm9pZCByZXNwb25kVG9B
cHBsaWVkRWRpdGluZyhDb21wb3NpdGVFZGl0Q29tbWFuZCopIFVOTEVTU19FTkFCTEVEKHsgfSkK
LSAgICB2b2lkIHJlc3BvbmRUb1VuYXBwbGllZEVkaXRpbmcoRWRpdENvbW1hbmRDb21wb3NpdGlv
biopIFVOTEVTU19FTkFCTEVEKHsgfSkKLSAgICB2b2lkIHJlc3BvbmRUb0NoYW5nZWRTZWxlY3Rp
b24oY29uc3QgVmlzaWJsZVNlbGVjdGlvbiYgb2xkU2VsZWN0aW9uKSBVTkxFU1NfRU5BQkxFRCh7
IFVOVVNFRF9QQVJBTShvbGRTZWxlY3Rpb24pOyB9KQotCi0gICAgdm9pZCBzdG9wUGVuZGluZ0Nv
cnJlY3Rpb24oY29uc3QgVmlzaWJsZVNlbGVjdGlvbiYgb2xkU2VsZWN0aW9uKSBVTkxFU1NfRU5B
QkxFRCh7IFVOVVNFRF9QQVJBTShvbGRTZWxlY3Rpb24pOyB9KQotICAgIHZvaWQgYXBwbHlQZW5k
aW5nQ29ycmVjdGlvbihjb25zdCBWaXNpYmxlU2VsZWN0aW9uJiBzZWxlY3Rpb25BZnRlclR5cGlu
ZykgVU5MRVNTX0VOQUJMRUQoeyBVTlVTRURfUEFSQU0oc2VsZWN0aW9uQWZ0ZXJUeXBpbmcpOyB9
KQotCi0gICAgdm9pZCBoYW5kbGVDb3JyZWN0aW9uUGFuZWxSZXN1bHQoY29uc3QgU3RyaW5nJiBj
b3JyZWN0aW9uKSBVTkxFU1NfRU5BQkxFRCh7IFVOVVNFRF9QQVJBTShjb3JyZWN0aW9uKTsgfSkK
LSAgICB2b2lkIGhhbmRsZUNhbmNlbE9wZXJhdGlvbigpIFVOTEVTU19FTkFCTEVEKHt9KQotCi0g
ICAgYm9vbCBoYXNQZW5kaW5nQ29ycmVjdGlvbigpIGNvbnN0IFVOTEVTU19FTkFCTEVEKHsgcmV0
dXJuIGZhbHNlOyB9KQotICAgIGJvb2wgaXNTcGVsbGluZ01hcmtlckFsbG93ZWQoUGFzc1JlZlB0
cjxSYW5nZT4gbWlzc3BlbGxpbmdSYW5nZSkgY29uc3QgVU5MRVNTX0VOQUJMRUQoeyBVTlVTRURf
UEFSQU0obWlzc3BlbGxpbmdSYW5nZSk7IHJldHVybiB0cnVlOyB9KQotICAgIGJvb2wgaXNBdXRv
bWF0aWNTcGVsbGluZ0NvcnJlY3Rpb25FbmFibGVkKCkgVU5MRVNTX0VOQUJMRUQoeyByZXR1cm4g
ZmFsc2U7IH0pCi0gICAgYm9vbCBzaG91bGRSZW1vdmVNYXJrZXJzVXBvbkVkaXRpbmcoKTsKLQot
ICAgIHZvaWQgY29ycmVjdGlvblBhbmVsVGltZXJGaXJlZChUaW1lcjxTcGVsbGluZ0NvcnJlY3Rp
b25Db250cm9sbGVyPiopIFVOTEVTU19FTkFCTEVEKHt9KQotICAgIHZvaWQgcmVjb3JkQXV0b2Nv
cnJlY3Rpb25SZXNwb25zZVJldmVyc2VkKGNvbnN0IFN0cmluZyYgcmVwbGFjZWRTdHJpbmcsIFBh
c3NSZWZQdHI8UmFuZ2U+IHJlcGxhY2VtZW50UmFuZ2UpIFVOTEVTU19FTkFCTEVEKHsgVU5VU0VE
X1BBUkFNKHJlcGxhY2VkU3RyaW5nKTsgVU5VU0VEX1BBUkFNKHJlcGxhY2VtZW50UmFuZ2UpOyB9
KQotICAgIHZvaWQgbWFya1JldmVyc2VkKFBhc3NSZWZQdHI8UmFuZ2U+IGNoYW5nZWRSYW5nZSkg
VU5MRVNTX0VOQUJMRUQoeyBVTlVTRURfUEFSQU0oY2hhbmdlZFJhbmdlKTsgfSkKLSAgICB2b2lk
IG1hcmtDb3JyZWN0aW9uKFBhc3NSZWZQdHI8UmFuZ2U+IHJlcGxhY2VkUmFuZ2UsIGNvbnN0IFN0
cmluZyYgcmVwbGFjZWRTdHJpbmcpIFVOTEVTU19FTkFCTEVEKHsgVU5VU0VEX1BBUkFNKHJlcGxh
Y2VkUmFuZ2UpOyBVTlVTRURfUEFSQU0ocmVwbGFjZWRTdHJpbmcpOyB9KQotICAgIHZvaWQgcmVj
b3JkU3BlbGxjaGVja2VyUmVzcG9uc2VGb3JNb2RpZmllZENvcnJlY3Rpb24oUmFuZ2UqIHJhbmdl
T2ZDb3JyZWN0aW9uLCBjb25zdCBTdHJpbmcmIGNvcnJlY3RlZCwgY29uc3QgU3RyaW5nJiBjb3Jy
ZWN0aW9uKSBVTkxFU1NfRU5BQkxFRCh7IFVOVVNFRF9QQVJBTShyYW5nZU9mQ29ycmVjdGlvbik7
IFVOVVNFRF9QQVJBTShjb3JyZWN0ZWQpOyBVTlVTRURfUEFSQU0oY29ycmVjdGlvbik7IH0pCi0K
LSAgICAvLyBUaGlzIGZ1bmN0aW9uIHJldHVybnMgZmFsc2UgaWYgdGhlIHJlcGxhY2VtZW50IHNo
b3VsZCBub3QgYmUgY2FycmllZCBvdXQuCi0gICAgYm9vbCBwcm9jZXNzTWFya2Vyc09uVGV4dFRv
QmVSZXBsYWNlZEJ5UmVzdWx0KGNvbnN0IFRleHRDaGVja2luZ1Jlc3VsdCosIFJhbmdlKiByYW5n
ZVRvQmVSZXBsYWNlZCwgY29uc3QgU3RyaW5nJiBzdHJpbmdUb0JlUmVwbGFjZWQpIFVOTEVTU19F
TkFCTEVEKHsgVU5VU0VEX1BBUkFNKHJhbmdlVG9CZVJlcGxhY2VkKTsgVU5VU0VEX1BBUkFNKHN0
cmluZ1RvQmVSZXBsYWNlZCk7IHJldHVybiB0cnVlOyB9KTsKLSAgICB2b2lkIGRlbGV0ZWRBdXRv
Y29ycmVjdGlvbkF0UG9zaXRpb24oY29uc3QgUG9zaXRpb24mLCBjb25zdCBTdHJpbmcmIG9yaWdp
bmFsU3RyaW5nKSBVTkxFU1NfRU5BQkxFRCh7IFVOVVNFRF9QQVJBTShvcmlnaW5hbFN0cmluZyk7
IH0pCi0KLSNpZiBVU0UoQVVUT0NPUlJFQ1RJT05fUEFORUwpCi1wcml2YXRlOgotICAgIHZvaWQg
cmVjb3JkQXV0b2NvcnJlY3Rpb25SZXNwb25zZVJldmVyc2VkKGNvbnN0IFN0cmluZyYgcmVwbGFj
ZWRTdHJpbmcsIGNvbnN0IFN0cmluZyYgcmVwbGFjZW1lbnRTdHJpbmcpOwotCi0gICAgYm9vbCBz
aG91bGRTdGFydFRpbWVyRm9yKGNvbnN0IERvY3VtZW50TWFya2VyKiBtYXJrZXIsIGludCBlbmRP
ZmZzZXQpIGNvbnN0Ci0gICAgewotICAgICAgICByZXR1cm4gKCgobWFya2VyLT50eXBlKCkgPT0g
RG9jdW1lbnRNYXJrZXI6OlJlcGxhY2VtZW50ICYmICFtYXJrZXItPmRlc2NyaXB0aW9uKCkuaXNO
dWxsKCkpIAotICAgICAgICAgICAgICAgICB8fCBtYXJrZXItPnR5cGUoKSA9PSBEb2N1bWVudE1h
cmtlcjo6U3BlbGxpbmcpICYmIHN0YXRpY19jYXN0PGludD4obWFya2VyLT5lbmRPZmZzZXQoKSkg
PT0gZW5kT2Zmc2V0KTsKLSAgICB9Ci0KLSAgICBFZGl0b3JDbGllbnQqIGNsaWVudCgpOwotICAg
IFRleHRDaGVja2VyQ2xpZW50KiB0ZXh0Q2hlY2tlcigpOwotICAgIEZsb2F0UmVjdCByb290Vmll
d1JlY3RGb3JSYW5nZShjb25zdCBSYW5nZSopIGNvbnN0OwotICAgIHZvaWQgbWFya1ByZWNlZGlu
Z1doaXRlc3BhY2VGb3JEZWxldGVkQXV0b2NvcnJlY3Rpb25BZnRlckNvbW1hbmQoRWRpdENvbW1h
bmQqKTsKLQotICAgIEVkaXRvckNsaWVudCogbV9jbGllbnQ7Ci0gICAgRnJhbWUqIG1fZnJhbWU7
Ci0KLSAgICBUaW1lcjxTcGVsbGluZ0NvcnJlY3Rpb25Db250cm9sbGVyPiBtX2NvcnJlY3Rpb25Q
YW5lbFRpbWVyOwotICAgIENvcnJlY3Rpb25QYW5lbEluZm8gbV9jb3JyZWN0aW9uUGFuZWxJbmZv
OwotICAgIGJvb2wgbV9jb3JyZWN0aW9uUGFuZWxJc0Rpc21pc3NlZEJ5RWRpdG9yOwotCi0gICAg
U3RyaW5nIG1fb3JpZ2luYWxTdHJpbmdGb3JMYXN0RGVsZXRlZEF1dG9jb3JyZWN0aW9uOwotICAg
IFBvc2l0aW9uIG1fcG9zaXRpb25Gb3JMYXN0RGVsZXRlZEF1dG9jb3JyZWN0aW9uOwotI2VuZGlm
Ci19OwotCi0jdW5kZWYgVU5MRVNTX0VOQUJMRUQKLQotaW5saW5lIGJvb2wgU3BlbGxpbmdDb3Jy
ZWN0aW9uQ29udHJvbGxlcjo6c2hvdWxkUmVtb3ZlTWFya2Vyc1Vwb25FZGl0aW5nKCkKLXsKLSNp
ZiBVU0UoTUFSS0VSX1JFTU9WQUxfVVBPTl9FRElUSU5HKQotICAgIHJldHVybiB0cnVlOwotI2Vs
c2UKLSAgICByZXR1cm4gZmFsc2U7Ci0jZW5kaWYKLX0KLQotfSAvLyBuYW1lc3BhY2UgV2ViQ29y
ZQotCi0jZW5kaWYgLy8gU3BlbGxpbmdDb3JyZWN0aW9uQ29udHJvbGxlcl9oCkluZGV4OiBTb3Vy
Y2UvV2ViQ29yZS9lZGl0aW5nL1R5cGluZ0NvbW1hbmQuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9XZWJDb3JlL2VkaXRpbmcvVHlwaW5nQ29tbWFuZC5jcHAJKHJldmlzaW9uIDExMjk2MSkKKysr
IFNvdXJjZS9XZWJDb3JlL2VkaXRpbmcvVHlwaW5nQ29tbWFuZC5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTMyOCw3ICszMjgsNyBAQCB2b2lkIFR5cGluZ0NvbW1hbmQ6Om1hcmtNaXNzcGVsbGluZ3NB
ZnRlCiAgICAgICAgICAgICAgICAgc3RyaXBwZWRQcmV2aW91c1dvcmQgPSBwbGFpblRleHQocmFu
Z2UuZ2V0KCkpLnN0cmlwV2hpdGVTcGFjZSgpOwogICAgICAgICAgICAgZnJhbWUtPmVkaXRvcigp
LT5tYXJrTWlzc3BlbGxpbmdzQWZ0ZXJUeXBpbmdUb1dvcmQocDEsIGVuZGluZ1NlbGVjdGlvbigp
LCAhc3RyaXBwZWRQcmV2aW91c1dvcmQuaXNFbXB0eSgpKTsKICAgICAgICAgfSBlbHNlIGlmIChj
b21tYW5kVHlwZSA9PSBUeXBpbmdDb21tYW5kOjpJbnNlcnRUZXh0KQotICAgICAgICAgICAgZnJh
bWUtPmVkaXRvcigpLT5zdGFydENvcnJlY3Rpb25QYW5lbFRpbWVyKCk7CisgICAgICAgICAgICBm
cmFtZS0+ZWRpdG9yKCktPnN0YXJ0QWx0ZXJuYXRpdmVUZXh0VUlUaW1lcigpOwogICAgIH0KIH0K
IApJbmRleDogU291cmNlL1dlYkNvcmUvbG9hZGVyL0VtcHR5Q2xpZW50cy5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9XZWJDb3JlL2xvYWRlci9FbXB0eUNsaWVudHMuaAkocmV2aXNpb24gMTEyOTYx
KQorKysgU291cmNlL1dlYkNvcmUvbG9hZGVyL0VtcHR5Q2xpZW50cy5oCSh3b3JraW5nIGNvcHkp
CkBAIC01MjAsOSArNTIwLDkgQEAgcHVibGljOgogICAgIFRleHRDaGVja2VyQ2xpZW50KiB0ZXh0
Q2hlY2tlcigpIHsgcmV0dXJuICZtX3RleHRDaGVja2VyQ2xpZW50OyB9CiAKICNpZiBVU0UoQVVU
T0NPUlJFQ1RJT05fUEFORUwpCi0gICAgdmlydHVhbCB2b2lkIHNob3dDb3JyZWN0aW9uUGFuZWwo
Q29ycmVjdGlvblBhbmVsSW5mbzo6UGFuZWxUeXBlLCBjb25zdCBGbG9hdFJlY3QmLCBjb25zdCBT
dHJpbmcmLCBjb25zdCBTdHJpbmcmLCBjb25zdCBWZWN0b3I8U3RyaW5nPiYpIHsgfQotICAgIHZp
cnR1YWwgdm9pZCBkaXNtaXNzQ29ycmVjdGlvblBhbmVsKFJlYXNvbkZvckRpc21pc3NpbmdDb3Jy
ZWN0aW9uUGFuZWwpIHsgfQotICAgIHZpcnR1YWwgU3RyaW5nIGRpc21pc3NDb3JyZWN0aW9uUGFu
ZWxTb29uKFJlYXNvbkZvckRpc21pc3NpbmdDb3JyZWN0aW9uUGFuZWwpIHsgcmV0dXJuIFN0cmlu
ZygpOyB9CisgICAgdmlydHVhbCB2b2lkIHNob3dDb3JyZWN0aW9uUGFuZWwoQWx0ZXJuYXRpdmVU
ZXh0VHlwZSwgY29uc3QgRmxvYXRSZWN0JiwgY29uc3QgU3RyaW5nJiwgY29uc3QgU3RyaW5nJiwg
Y29uc3QgVmVjdG9yPFN0cmluZz4mKSB7IH0KKyAgICB2aXJ0dWFsIHZvaWQgZGlzbWlzc0NvcnJl
Y3Rpb25QYW5lbChSZWFzb25Gb3JEaXNtaXNzaW5nQWx0ZXJuYXRpdmVUZXh0KSB7IH0KKyAgICB2
aXJ0dWFsIFN0cmluZyBkaXNtaXNzQ29ycmVjdGlvblBhbmVsU29vbihSZWFzb25Gb3JEaXNtaXNz
aW5nQWx0ZXJuYXRpdmVUZXh0KSB7IHJldHVybiBTdHJpbmcoKTsgfQogICAgIHZpcnR1YWwgdm9p
ZCByZWNvcmRBdXRvY29ycmVjdGlvblJlc3BvbnNlKEF1dG9jb3JyZWN0aW9uUmVzcG9uc2VUeXBl
LCBjb25zdCBTdHJpbmcmLCBjb25zdCBTdHJpbmcmKSB7IH0KICNlbmRpZgogICAgIHZpcnR1YWwg
dm9pZCB1cGRhdGVTcGVsbGluZ1VJV2l0aEdyYW1tYXJTdHJpbmcoY29uc3QgU3RyaW5nJiwgY29u
c3QgR3JhbW1hckRldGFpbCYpIHsgfQpJbmRleDogU291cmNlL1dlYkNvcmUvcGFnZS9FZGl0b3JD
bGllbnQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wYWdlL0VkaXRvckNsaWVudC5o
CShyZXZpc2lvbiAxMTI5NjEpCisrKyBTb3VyY2UvV2ViQ29yZS9wYWdlL0VkaXRvckNsaWVudC5o
CSh3b3JraW5nIGNvcHkpCkBAIC0yNyw3ICsyNyw3IEBACiAjaWZuZGVmIEVkaXRvckNsaWVudF9o
CiAjZGVmaW5lIEVkaXRvckNsaWVudF9oCiAKLSNpbmNsdWRlICJTcGVsbGluZ0NvcnJlY3Rpb25D
b250cm9sbGVyLmgiCisjaW5jbHVkZSAiQWx0ZXJuYXRpdmVUZXh0Q29udHJvbGxlci5oIgogI2lu
Y2x1ZGUgIkVkaXRvckluc2VydEFjdGlvbi5oIgogI2luY2x1ZGUgIkZsb2F0UmVjdC5oIgogI2lu
Y2x1ZGUgIlRleHRBZmZpbml0eS5oIgpAQCAtMTUyLDkgKzE1Miw5IEBAIHB1YmxpYzoKICAgICB9
OwogCiAjaWYgVVNFKEFVVE9DT1JSRUNUSU9OX1BBTkVMKQotICAgIHZpcnR1YWwgdm9pZCBzaG93
Q29ycmVjdGlvblBhbmVsKENvcnJlY3Rpb25QYW5lbEluZm86OlBhbmVsVHlwZSwgY29uc3QgRmxv
YXRSZWN0JiBib3VuZGluZ0JveE9mUmVwbGFjZWRTdHJpbmcsIGNvbnN0IFN0cmluZyYgcmVwbGFj
ZWRTdHJpbmcsIGNvbnN0IFN0cmluZyYgcmVwbGFjbWVudFN0cmluZywgY29uc3QgVmVjdG9yPFN0
cmluZz4mIGFsdGVybmF0aXZlUmVwbGFjZW1lbnRTdHJpbmdzKSA9IDA7Ci0gICAgdmlydHVhbCB2
b2lkIGRpc21pc3NDb3JyZWN0aW9uUGFuZWwoUmVhc29uRm9yRGlzbWlzc2luZ0NvcnJlY3Rpb25Q
YW5lbCkgPSAwOwotICAgIHZpcnR1YWwgU3RyaW5nIGRpc21pc3NDb3JyZWN0aW9uUGFuZWxTb29u
KFJlYXNvbkZvckRpc21pc3NpbmdDb3JyZWN0aW9uUGFuZWwpID0gMDsKKyAgICB2aXJ0dWFsIHZv
aWQgc2hvd0NvcnJlY3Rpb25QYW5lbChBbHRlcm5hdGl2ZVRleHRUeXBlLCBjb25zdCBGbG9hdFJl
Y3QmIGJvdW5kaW5nQm94T2ZSZXBsYWNlZFN0cmluZywgY29uc3QgU3RyaW5nJiByZXBsYWNlZFN0
cmluZywgY29uc3QgU3RyaW5nJiByZXBsYWNtZW50U3RyaW5nLCBjb25zdCBWZWN0b3I8U3RyaW5n
PiYgYWx0ZXJuYXRpdmVSZXBsYWNlbWVudFN0cmluZ3MpID0gMDsKKyAgICB2aXJ0dWFsIHZvaWQg
ZGlzbWlzc0NvcnJlY3Rpb25QYW5lbChSZWFzb25Gb3JEaXNtaXNzaW5nQWx0ZXJuYXRpdmVUZXh0
KSA9IDA7CisgICAgdmlydHVhbCBTdHJpbmcgZGlzbWlzc0NvcnJlY3Rpb25QYW5lbFNvb24oUmVh
c29uRm9yRGlzbWlzc2luZ0FsdGVybmF0aXZlVGV4dCkgPSAwOwogICAgIHZpcnR1YWwgdm9pZCBy
ZWNvcmRBdXRvY29ycmVjdGlvblJlc3BvbnNlKEF1dG9jb3JyZWN0aW9uUmVzcG9uc2VUeXBlLCBj
b25zdCBTdHJpbmcmIHJlcGxhY2VkU3RyaW5nLCBjb25zdCBTdHJpbmcmIHJlcGxhY2VtZW50U3Ry
aW5nKSA9IDA7CiAjZW5kaWYKIApJbmRleDogU291cmNlL1dlYktpdDIvQ2hhbmdlTG9nCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQyL0NoYW5nZUxvZwkocmV2aXNpb24gMTEyOTYxKQorKysg
U291cmNlL1dlYktpdDIvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsNTMgQEAK
KzIwMTItMDQtMDIgIEppYSBQdSAgPGpwdUBhcHBsZS5jb20+CisKKyAgICAgICAgUmVuYW1lIFNw
ZWxsaW5nQ29ycmVjdGlvbkNvbnRyb2xsZXIgdG8gQWx0ZXJuYXRpdmVUZXh0Q29udHJvbGxlci4K
KyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTgyOTQyCisK
KyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgVGhlc2UgY2hh
bmdlcyBhcmUgc2ltcGx5IGZvciBhZG9wdGluZyBuZXcgY2xhc3MgbmFtZXMuCisKKyAgICAgICAg
KiBVSVByb2Nlc3MvQVBJL21hYy9QYWdlQ2xpZW50SW1wbC5oOgorICAgICAgICAoUGFnZUNsaWVu
dEltcGwpOgorICAgICAgICAqIFVJUHJvY2Vzcy9BUEkvbWFjL1BhZ2VDbGllbnRJbXBsLm1tOgor
ICAgICAgICAoV2ViS2l0OjpQYWdlQ2xpZW50SW1wbDo6c2hvd0NvcnJlY3Rpb25QYW5lbCk6Cisg
ICAgICAgIChXZWJLaXQ6OlBhZ2VDbGllbnRJbXBsOjpkaXNtaXNzQ29ycmVjdGlvblBhbmVsKToK
KyAgICAgICAgKFdlYktpdDo6UGFnZUNsaWVudEltcGw6OmRpc21pc3NDb3JyZWN0aW9uUGFuZWxT
b29uKToKKyAgICAgICAgKiBVSVByb2Nlc3MvQVBJL21hYy9XS1ZpZXcubW06CisgICAgICAgICgt
W1dLVmlldyBoYW5kbGVDb3JyZWN0aW9uUGFuZWxSZXN1bHQ6XSk6CisgICAgICAgICogVUlQcm9j
ZXNzL1BhZ2VDbGllbnQuaDoKKyAgICAgICAgKFBhZ2VDbGllbnQpOgorICAgICAgICAqIFVJUHJv
Y2Vzcy9XZWJQYWdlUHJveHkuY3BwOgorICAgICAgICAoV2ViS2l0OjpXZWJQYWdlUHJveHk6OmRp
ZENvbW1pdExvYWRGb3JGcmFtZSk6CisgICAgICAgIChXZWJLaXQ6OldlYlBhZ2VQcm94eTo6cGFn
ZURpZFNjcm9sbCk6CisgICAgICAgIChXZWJLaXQ6OldlYlBhZ2VQcm94eTo6cHJvY2Vzc0RpZENy
YXNoKToKKyAgICAgICAgKFdlYktpdDo6V2ViUGFnZVByb3h5OjpzaG93Q29ycmVjdGlvblBhbmVs
KToKKyAgICAgICAgKFdlYktpdDo6V2ViUGFnZVByb3h5OjpkaXNtaXNzQ29ycmVjdGlvblBhbmVs
KToKKyAgICAgICAgKFdlYktpdDo6V2ViUGFnZVByb3h5OjpkaXNtaXNzQ29ycmVjdGlvblBhbmVs
U29vbik6CisgICAgICAgIChXZWJLaXQ6OldlYlBhZ2VQcm94eTo6aGFuZGxlQWx0ZXJuYXRpdmVU
ZXh0VUlSZXN1bHQpOgorICAgICAgICAqIFVJUHJvY2Vzcy9XZWJQYWdlUHJveHkuaDoKKyAgICAg
ICAgKFdlYlBhZ2VQcm94eSk6CisgICAgICAgICogVUlQcm9jZXNzL21hYy9Db3JyZWN0aW9uUGFu
ZWwuaDoKKyAgICAgICAgKENvcnJlY3Rpb25QYW5lbCk6CisgICAgICAgICogVUlQcm9jZXNzL21h
Yy9Db3JyZWN0aW9uUGFuZWwubW06CisgICAgICAgIChjb3JyZWN0aW9uSW5kaWNhdG9yVHlwZSk6
CisgICAgICAgIChXZWJLaXQ6OkNvcnJlY3Rpb25QYW5lbDo6Q29ycmVjdGlvblBhbmVsKToKKyAg
ICAgICAgKFdlYktpdDo6Q29ycmVjdGlvblBhbmVsOjp+Q29ycmVjdGlvblBhbmVsKToKKyAgICAg
ICAgKFdlYktpdDo6Q29ycmVjdGlvblBhbmVsOjpzaG93KToKKyAgICAgICAgKFdlYktpdDo6Q29y
cmVjdGlvblBhbmVsOjpkaXNtaXNzKToKKyAgICAgICAgKFdlYktpdDo6Q29ycmVjdGlvblBhbmVs
OjpkaXNtaXNzSW50ZXJuYWwpOgorICAgICAgICAoV2ViS2l0OjpDb3JyZWN0aW9uUGFuZWw6Omhh
bmRsZUFjY2VwdGVkUmVwbGFjZW1lbnQpOgorICAgICAgICAqIFdlYlByb2Nlc3MvV2ViQ29yZVN1
cHBvcnQvV2ViRWRpdG9yQ2xpZW50Lmg6CisgICAgICAgICogV2ViUHJvY2Vzcy9XZWJDb3JlU3Vw
cG9ydC9tYWMvV2ViRWRpdG9yQ2xpZW50TWFjLm1tOgorICAgICAgICAoV2ViS2l0OjpXZWJFZGl0
b3JDbGllbnQ6OnNob3dDb3JyZWN0aW9uUGFuZWwpOgorICAgICAgICAoV2ViS2l0OjpXZWJFZGl0
b3JDbGllbnQ6OmRpc21pc3NDb3JyZWN0aW9uUGFuZWwpOgorICAgICAgICAoV2ViS2l0OjpXZWJF
ZGl0b3JDbGllbnQ6OmRpc21pc3NDb3JyZWN0aW9uUGFuZWxTb29uKToKKyAgICAgICAgKiBXZWJQ
cm9jZXNzL1dlYlBhZ2UvV2ViUGFnZS5jcHA6CisgICAgICAgIChXZWJLaXQ6OldlYlBhZ2U6Omhh
bmRsZUFsdGVybmF0aXZlVGV4dFVJUmVzdWx0KToKKyAgICAgICAgKiBXZWJQcm9jZXNzL1dlYlBh
Z2UvV2ViUGFnZS5oOgorICAgICAgICAoV2ViUGFnZSk6CisgICAgICAgICogV2ViUHJvY2Vzcy9X
ZWJQYWdlL1dlYlBhZ2UubWVzc2FnZXMuaW46CisKIDIwMTItMDQtMDIgIEFuZGVycyBDYXJsc3Nv
biAgPGFuZGVyc2NhQGFwcGxlLmNvbT4KIAogICAgICAgICBDYWxsIE5QUF9TZXRWYWx1ZSB3aXRo
IFdLTlZDQUxheWVyUmVuZGVyU2VydmVyUG9ydCB3aGVuIGEgV0tWaWV3IGlzIG1vdmVkIGZyb20g
YSBidWZmZXJlZCB0byBhbiB1bmJ1ZmZlcmVkIHdpbmRvdywgb3IgdmljZSB2ZXJzYQpJbmRleDog
U291cmNlL1dlYktpdDIvVUlQcm9jZXNzL1BhZ2VDbGllbnQuaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvV2ViS2l0Mi9VSVByb2Nlc3MvUGFnZUNsaWVudC5oCShyZXZpc2lvbiAxMTI5NjEpCisrKyBT
b3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvUGFnZUNsaWVudC5oCSh3b3JraW5nIGNvcHkpCkBAIC0y
OSw4ICsyOSw4IEBACiAjaW5jbHVkZSAiU2hhcmVhYmxlQml0bWFwLmgiCiAjaW5jbHVkZSAiV2Vi
UGFnZVByb3h5LmgiCiAjaW5jbHVkZSAiV2ViUG9wdXBNZW51UHJveHkuaCIKKyNpbmNsdWRlIDxX
ZWJDb3JlL0FsdGVybmF0aXZlVGV4dENvbnRyb2xsZXIuaD4KICNpbmNsdWRlIDxXZWJDb3JlL0Vk
aXRvckNsaWVudC5oPgotI2luY2x1ZGUgPFdlYkNvcmUvU3BlbGxpbmdDb3JyZWN0aW9uQ29udHJv
bGxlci5oPgogI2luY2x1ZGUgPHd0Zi9Gb3J3YXJkLmg+CiAKICNpZiBQTEFURk9STShNQUMpCkBA
IC0xODUsOSArMTg1LDkgQEAgcHVibGljOgogICAgIHZpcnR1YWwgQ0dDb250ZXh0UmVmIGNvbnRh
aW5pbmdXaW5kb3dHcmFwaGljc0NvbnRleHQoKSA9IDA7CiAgICAgdmlydHVhbCB2b2lkIGRpZFBl
cmZvcm1EaWN0aW9uYXJ5TG9va3VwKGNvbnN0IFN0cmluZyYsIGRvdWJsZSBzY2FsZUZhY3Rvciwg
Y29uc3QgRGljdGlvbmFyeVBvcHVwSW5mbyYpID0gMDsKICAgICB2aXJ0dWFsIHZvaWQgZGlzbWlz
c0RpY3Rpb25hcnlMb29rdXBQYW5lbCgpID0gMDsKLSAgICB2aXJ0dWFsIHZvaWQgc2hvd0NvcnJl
Y3Rpb25QYW5lbChXZWJDb3JlOjpDb3JyZWN0aW9uUGFuZWxJbmZvOjpQYW5lbFR5cGUsIGNvbnN0
IFdlYkNvcmU6OkZsb2F0UmVjdCYgYm91bmRpbmdCb3hPZlJlcGxhY2VkU3RyaW5nLCBjb25zdCBT
dHJpbmcmIHJlcGxhY2VkU3RyaW5nLCBjb25zdCBTdHJpbmcmIHJlcGxhY2VtZW50U3RyaW5nLCBj
b25zdCBWZWN0b3I8U3RyaW5nPiYgYWx0ZXJuYXRpdmVSZXBsYWNlbWVudFN0cmluZ3MpID0gMDsK
LSAgICB2aXJ0dWFsIHZvaWQgZGlzbWlzc0NvcnJlY3Rpb25QYW5lbChXZWJDb3JlOjpSZWFzb25G
b3JEaXNtaXNzaW5nQ29ycmVjdGlvblBhbmVsKSA9IDA7Ci0gICAgdmlydHVhbCBTdHJpbmcgZGlz
bWlzc0NvcnJlY3Rpb25QYW5lbFNvb24oV2ViQ29yZTo6UmVhc29uRm9yRGlzbWlzc2luZ0NvcnJl
Y3Rpb25QYW5lbCkgPSAwOworICAgIHZpcnR1YWwgdm9pZCBzaG93Q29ycmVjdGlvblBhbmVsKFdl
YkNvcmU6OkFsdGVybmF0aXZlVGV4dFR5cGUsIGNvbnN0IFdlYkNvcmU6OkZsb2F0UmVjdCYgYm91
bmRpbmdCb3hPZlJlcGxhY2VkU3RyaW5nLCBjb25zdCBTdHJpbmcmIHJlcGxhY2VkU3RyaW5nLCBj
b25zdCBTdHJpbmcmIHJlcGxhY2VtZW50U3RyaW5nLCBjb25zdCBWZWN0b3I8U3RyaW5nPiYgYWx0
ZXJuYXRpdmVSZXBsYWNlbWVudFN0cmluZ3MpID0gMDsKKyAgICB2aXJ0dWFsIHZvaWQgZGlzbWlz
c0NvcnJlY3Rpb25QYW5lbChXZWJDb3JlOjpSZWFzb25Gb3JEaXNtaXNzaW5nQWx0ZXJuYXRpdmVU
ZXh0KSA9IDA7CisgICAgdmlydHVhbCBTdHJpbmcgZGlzbWlzc0NvcnJlY3Rpb25QYW5lbFNvb24o
V2ViQ29yZTo6UmVhc29uRm9yRGlzbWlzc2luZ0FsdGVybmF0aXZlVGV4dCkgPSAwOwogICAgIHZp
cnR1YWwgdm9pZCByZWNvcmRBdXRvY29ycmVjdGlvblJlc3BvbnNlKFdlYkNvcmU6OkVkaXRvckNs
aWVudDo6QXV0b2NvcnJlY3Rpb25SZXNwb25zZVR5cGUsIGNvbnN0IFN0cmluZyYgcmVwbGFjZWRT
dHJpbmcsIGNvbnN0IFN0cmluZyYgcmVwbGFjZW1lbnRTdHJpbmcpID0gMDsKICAgICB2aXJ0dWFs
IHZvaWQgcmVjb21tZW5kZWRTY3JvbGxiYXJTdHlsZURpZENoYW5nZShpbnQzMl90IG5ld1N0eWxl
KSA9IDA7CiAgICAgCkluZGV4OiBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvV2ViUGFnZVByb3h5
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvV2ViUGFnZVByb3h5
LmNwcAkocmV2aXNpb24gMTEyOTYxKQorKysgU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL1dlYlBh
Z2VQcm94eS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE4MTIsNyArMTgxMiw3IEBAIHZvaWQgV2Vi
UGFnZVByb3h5OjpkaWRDb21taXRMb2FkRm9yRnJhbWUKICAgICBtX3BhZ2VDbGllbnQtPnJlc2V0
VGV4dElucHV0U3RhdGUoKTsKICNpZiAhZGVmaW5lZChCVUlMRElOR19PTl9TTk9XX0xFT1BBUkQp
CiAgICAgLy8gRklYTUU6IFNob3VsZCB0aGlzIGJlIG1vdmVkIGluc2lkZSByZXNldFRleHRJbnB1
dFN0YXRlKCk/Ci0gICAgZGlzbWlzc0NvcnJlY3Rpb25QYW5lbChSZWFzb25Gb3JEaXNtaXNzaW5n
Q29ycmVjdGlvblBhbmVsSWdub3JlZCk7CisgICAgZGlzbWlzc0NvcnJlY3Rpb25QYW5lbChSZWFz
b25Gb3JEaXNtaXNzaW5nQWx0ZXJuYXRpdmVUZXh0SWdub3JlZCk7CiAgICAgbV9wYWdlQ2xpZW50
LT5kaXNtaXNzRGljdGlvbmFyeUxvb2t1cFBhbmVsKCk7CiAjZW5kaWYKICNlbmRpZgpAQCAtMjM2
OSw3ICsyMzY5LDcgQEAgdm9pZCBXZWJQYWdlUHJveHk6OnBhZ2VEaWRTY3JvbGwoKQogewogICAg
IG1fdWlDbGllbnQucGFnZURpZFNjcm9sbCh0aGlzKTsKICNpZiBQTEFURk9STShNQUMpICYmICFk
ZWZpbmVkKEJVSUxESU5HX09OX1NOT1dfTEVPUEFSRCkKLSAgICBkaXNtaXNzQ29ycmVjdGlvblBh
bmVsKFJlYXNvbkZvckRpc21pc3NpbmdDb3JyZWN0aW9uUGFuZWxJZ25vcmVkKTsKKyAgICBkaXNt
aXNzQ29ycmVjdGlvblBhbmVsKFJlYXNvbkZvckRpc21pc3NpbmdBbHRlcm5hdGl2ZVRleHRJZ25v
cmVkKTsKICNlbmRpZgogfQogCkBAIC0zMzUzLDcgKzMzNTMsNyBAQCB2b2lkIFdlYlBhZ2VQcm94
eTo6cHJvY2Vzc0RpZENyYXNoKCkKICNlbmRpZgogCiAjaWYgUExBVEZPUk0oTUFDKSAmJiAhZGVm
aW5lZChCVUlMRElOR19PTl9TTk9XX0xFT1BBUkQpCi0gICAgZGlzbWlzc0NvcnJlY3Rpb25QYW5l
bChSZWFzb25Gb3JEaXNtaXNzaW5nQ29ycmVjdGlvblBhbmVsSWdub3JlZCk7CisgICAgZGlzbWlz
c0NvcnJlY3Rpb25QYW5lbChSZWFzb25Gb3JEaXNtaXNzaW5nQWx0ZXJuYXRpdmVUZXh0SWdub3Jl
ZCk7CiAgICAgbV9wYWdlQ2xpZW50LT5kaXNtaXNzRGljdGlvbmFyeUxvb2t1cFBhbmVsKCk7CiAj
ZW5kaWYKIH0KQEAgLTM2ODksMTcgKzM2ODksMTcgQEAgdm9pZCBXZWJQYWdlUHJveHk6OnN1YnN0
aXR1dGlvbnNQYW5lbElzUwogI2lmICFkZWZpbmVkKEJVSUxESU5HX09OX1NOT1dfTEVPUEFSRCkK
IHZvaWQgV2ViUGFnZVByb3h5OjpzaG93Q29ycmVjdGlvblBhbmVsKGludDMyX3QgcGFuZWxUeXBl
LCBjb25zdCBGbG9hdFJlY3QmIGJvdW5kaW5nQm94T2ZSZXBsYWNlZFN0cmluZywgY29uc3QgU3Ry
aW5nJiByZXBsYWNlZFN0cmluZywgY29uc3QgU3RyaW5nJiByZXBsYWNlbWVudFN0cmluZywgY29u
c3QgVmVjdG9yPFN0cmluZz4mIGFsdGVybmF0aXZlUmVwbGFjZW1lbnRTdHJpbmdzKQogewotICAg
IG1fcGFnZUNsaWVudC0+c2hvd0NvcnJlY3Rpb25QYW5lbCgoQ29ycmVjdGlvblBhbmVsSW5mbzo6
UGFuZWxUeXBlKXBhbmVsVHlwZSwgYm91bmRpbmdCb3hPZlJlcGxhY2VkU3RyaW5nLCByZXBsYWNl
ZFN0cmluZywgcmVwbGFjZW1lbnRTdHJpbmcsIGFsdGVybmF0aXZlUmVwbGFjZW1lbnRTdHJpbmdz
KTsKKyAgICBtX3BhZ2VDbGllbnQtPnNob3dDb3JyZWN0aW9uUGFuZWwoKEFsdGVybmF0aXZlVGV4
dFR5cGUpcGFuZWxUeXBlLCBib3VuZGluZ0JveE9mUmVwbGFjZWRTdHJpbmcsIHJlcGxhY2VkU3Ry
aW5nLCByZXBsYWNlbWVudFN0cmluZywgYWx0ZXJuYXRpdmVSZXBsYWNlbWVudFN0cmluZ3MpOwog
fQogCiB2b2lkIFdlYlBhZ2VQcm94eTo6ZGlzbWlzc0NvcnJlY3Rpb25QYW5lbChpbnQzMl90IHJl
YXNvbikKIHsKLSAgICBtX3BhZ2VDbGllbnQtPmRpc21pc3NDb3JyZWN0aW9uUGFuZWwoKFJlYXNv
bkZvckRpc21pc3NpbmdDb3JyZWN0aW9uUGFuZWwpcmVhc29uKTsKKyAgICBtX3BhZ2VDbGllbnQt
PmRpc21pc3NDb3JyZWN0aW9uUGFuZWwoKFJlYXNvbkZvckRpc21pc3NpbmdBbHRlcm5hdGl2ZVRl
eHQpcmVhc29uKTsKIH0KIAogdm9pZCBXZWJQYWdlUHJveHk6OmRpc21pc3NDb3JyZWN0aW9uUGFu
ZWxTb29uKGludDMyX3QgcmVhc29uLCBTdHJpbmcmIHJlc3VsdCkKIHsKLSAgICByZXN1bHQgPSBt
X3BhZ2VDbGllbnQtPmRpc21pc3NDb3JyZWN0aW9uUGFuZWxTb29uKChSZWFzb25Gb3JEaXNtaXNz
aW5nQ29ycmVjdGlvblBhbmVsKXJlYXNvbik7CisgICAgcmVzdWx0ID0gbV9wYWdlQ2xpZW50LT5k
aXNtaXNzQ29ycmVjdGlvblBhbmVsU29vbigoUmVhc29uRm9yRGlzbWlzc2luZ0FsdGVybmF0aXZl
VGV4dClyZWFzb24pOwogfQogCiB2b2lkIFdlYlBhZ2VQcm94eTo6cmVjb3JkQXV0b2NvcnJlY3Rp
b25SZXNwb25zZShpbnQzMl90IHJlc3BvbnNlVHlwZSwgY29uc3QgU3RyaW5nJiByZXBsYWNlZFN0
cmluZywgY29uc3QgU3RyaW5nJiByZXBsYWNlbWVudFN0cmluZykKQEAgLTM3MDgsMTEgKzM3MDgs
MTEgQEAgdm9pZCBXZWJQYWdlUHJveHk6OnJlY29yZEF1dG9jb3JyZWN0aW9uUgogfQogI2VuZGlm
IC8vICFkZWZpbmVkKEJVSUxESU5HX09OX1NOT1dfTEVPUEFSRCkKIAotdm9pZCBXZWJQYWdlUHJv
eHk6OmhhbmRsZUNvcnJlY3Rpb25QYW5lbFJlc3VsdChjb25zdCBTdHJpbmcmIHJlc3VsdCkKK3Zv
aWQgV2ViUGFnZVByb3h5OjpoYW5kbGVBbHRlcm5hdGl2ZVRleHRVSVJlc3VsdChjb25zdCBTdHJp
bmcmIHJlc3VsdCkKIHsKICNpZiAhZGVmaW5lZChCVUlMRElOR19PTl9TTk9XX0xFT1BBUkQpCiAg
ICAgaWYgKCFpc0Nsb3NlZCgpKQotICAgICAgICBwcm9jZXNzKCktPnNlbmQoTWVzc2FnZXM6Oldl
YlBhZ2U6OkhhbmRsZUNvcnJlY3Rpb25QYW5lbFJlc3VsdChyZXN1bHQpLCBtX3BhZ2VJRCwgMCk7
CisgICAgICAgIHByb2Nlc3MoKS0+c2VuZChNZXNzYWdlczo6V2ViUGFnZTo6SGFuZGxlQWx0ZXJu
YXRpdmVUZXh0VUlSZXN1bHQocmVzdWx0KSwgbV9wYWdlSUQsIDApOwogI2VuZGlmCiB9CiAjZW5k
aWYgLy8gUExBVEZPUk0oTUFDKQpJbmRleDogU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL1dlYlBh
Z2VQcm94eS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9XZWJQYWdl
UHJveHkuaAkocmV2aXNpb24gMTEyOTYxKQorKysgU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL1dl
YlBhZ2VQcm94eS5oCSh3b3JraW5nIGNvcHkpCkBAIC02MTEsNyArNjExLDcgQEAgcHVibGljOgog
ICAgIHZvaWQgZmxhc2hCYWNraW5nU3RvcmVVcGRhdGVzKGNvbnN0IFZlY3RvcjxXZWJDb3JlOjpJ
bnRSZWN0PiYgdXBkYXRlUmVjdHMpOwogCiAjaWYgUExBVEZPUk0oTUFDKQotICAgIHZvaWQgaGFu
ZGxlQ29ycmVjdGlvblBhbmVsUmVzdWx0KGNvbnN0IFN0cmluZyYgcmVzdWx0KTsKKyAgICB2b2lk
IGhhbmRsZUFsdGVybmF0aXZlVGV4dFVJUmVzdWx0KGNvbnN0IFN0cmluZyYgcmVzdWx0KTsKICNl
bmRpZgogCiAgICAgc3RhdGljIHZvaWQgc2V0RGVidWdQYWludEZsYWdzKFdLUGFnZURlYnVnUGFp
bnRGbGFncyBmbGFncykgeyBzX2RlYnVnUGFpbnRGbGFncyA9IGZsYWdzOyB9CkluZGV4OiBTb3Vy
Y2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL21hYy9QYWdlQ2xpZW50SW1wbC5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvbWFjL1BhZ2VDbGllbnRJbXBsLmgJKHJl
dmlzaW9uIDExMjk2MSkKKysrIFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvbWFjL1BhZ2VD
bGllbnRJbXBsLmgJKHdvcmtpbmcgY29weSkKQEAgLTEyMCw5ICsxMjAsOSBAQCBwcml2YXRlOgog
ICAgIHZpcnR1YWwgdm9pZCBkaWRQZXJmb3JtRGljdGlvbmFyeUxvb2t1cChjb25zdCBTdHJpbmcm
LCBkb3VibGUgc2NhbGVGYWN0b3IsIGNvbnN0IERpY3Rpb25hcnlQb3B1cEluZm8mKTsKICAgICB2
aXJ0dWFsIHZvaWQgZGlzbWlzc0RpY3Rpb25hcnlMb29rdXBQYW5lbCgpOwogCi0gICAgdmlydHVh
bCB2b2lkIHNob3dDb3JyZWN0aW9uUGFuZWwoV2ViQ29yZTo6Q29ycmVjdGlvblBhbmVsSW5mbzo6
UGFuZWxUeXBlLCBjb25zdCBXZWJDb3JlOjpGbG9hdFJlY3QmIGJvdW5kaW5nQm94T2ZSZXBsYWNl
ZFN0cmluZywgY29uc3QgU3RyaW5nJiByZXBsYWNlZFN0cmluZywgY29uc3QgU3RyaW5nJiByZXBs
YWNlbWVudFN0cmluZywgY29uc3QgVmVjdG9yPFN0cmluZz4mIGFsdGVybmF0aXZlUmVwbGFjZW1l
bnRTdHJpbmdzKTsKLSAgICB2aXJ0dWFsIHZvaWQgZGlzbWlzc0NvcnJlY3Rpb25QYW5lbChXZWJD
b3JlOjpSZWFzb25Gb3JEaXNtaXNzaW5nQ29ycmVjdGlvblBhbmVsKTsKLSAgICB2aXJ0dWFsIFN0
cmluZyBkaXNtaXNzQ29ycmVjdGlvblBhbmVsU29vbihXZWJDb3JlOjpSZWFzb25Gb3JEaXNtaXNz
aW5nQ29ycmVjdGlvblBhbmVsKTsKKyAgICB2aXJ0dWFsIHZvaWQgc2hvd0NvcnJlY3Rpb25QYW5l
bChXZWJDb3JlOjpBbHRlcm5hdGl2ZVRleHRUeXBlLCBjb25zdCBXZWJDb3JlOjpGbG9hdFJlY3Qm
IGJvdW5kaW5nQm94T2ZSZXBsYWNlZFN0cmluZywgY29uc3QgU3RyaW5nJiByZXBsYWNlZFN0cmlu
ZywgY29uc3QgU3RyaW5nJiByZXBsYWNlbWVudFN0cmluZywgY29uc3QgVmVjdG9yPFN0cmluZz4m
IGFsdGVybmF0aXZlUmVwbGFjZW1lbnRTdHJpbmdzKTsKKyAgICB2aXJ0dWFsIHZvaWQgZGlzbWlz
c0NvcnJlY3Rpb25QYW5lbChXZWJDb3JlOjpSZWFzb25Gb3JEaXNtaXNzaW5nQWx0ZXJuYXRpdmVU
ZXh0KTsKKyAgICB2aXJ0dWFsIFN0cmluZyBkaXNtaXNzQ29ycmVjdGlvblBhbmVsU29vbihXZWJD
b3JlOjpSZWFzb25Gb3JEaXNtaXNzaW5nQWx0ZXJuYXRpdmVUZXh0KTsKICAgICB2aXJ0dWFsIHZv
aWQgcmVjb3JkQXV0b2NvcnJlY3Rpb25SZXNwb25zZShXZWJDb3JlOjpFZGl0b3JDbGllbnQ6OkF1
dG9jb3JyZWN0aW9uUmVzcG9uc2VUeXBlLCBjb25zdCBTdHJpbmcmIHJlcGxhY2VkU3RyaW5nLCBj
b25zdCBTdHJpbmcmIHJlcGxhY2VtZW50U3RyaW5nKTsKIAogICAgIHZpcnR1YWwgdm9pZCByZWNv
bW1lbmRlZFNjcm9sbGJhclN0eWxlRGlkQ2hhbmdlKGludDMyX3QgbmV3U3R5bGUpOwpJbmRleDog
U291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9tYWMvUGFnZUNsaWVudEltcGwubW0KPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9tYWMvUGFnZUNsaWVudEltcGwu
bW0JKHJldmlzaW9uIDExMjk2MSkKKysrIFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvbWFj
L1BhZ2VDbGllbnRJbXBsLm1tCSh3b3JraW5nIGNvcHkpCkBAIC00NjMsNyArNDYzLDcgQEAgdm9p
ZCBQYWdlQ2xpZW50SW1wbDo6ZGlzbWlzc0RpY3Rpb25hcnlMbwogI2VuZGlmCiB9CiAKLXZvaWQg
UGFnZUNsaWVudEltcGw6OnNob3dDb3JyZWN0aW9uUGFuZWwoQ29ycmVjdGlvblBhbmVsSW5mbzo6
UGFuZWxUeXBlIHR5cGUsIGNvbnN0IEZsb2F0UmVjdCYgYm91bmRpbmdCb3hPZlJlcGxhY2VkU3Ry
aW5nLCBjb25zdCBTdHJpbmcmIHJlcGxhY2VkU3RyaW5nLCBjb25zdCBTdHJpbmcmIHJlcGxhY2Vt
ZW50U3RyaW5nLCBjb25zdCBWZWN0b3I8U3RyaW5nPiYgYWx0ZXJuYXRpdmVSZXBsYWNlbWVudFN0
cmluZ3MpCit2b2lkIFBhZ2VDbGllbnRJbXBsOjpzaG93Q29ycmVjdGlvblBhbmVsKEFsdGVybmF0
aXZlVGV4dFR5cGUgdHlwZSwgY29uc3QgRmxvYXRSZWN0JiBib3VuZGluZ0JveE9mUmVwbGFjZWRT
dHJpbmcsIGNvbnN0IFN0cmluZyYgcmVwbGFjZWRTdHJpbmcsIGNvbnN0IFN0cmluZyYgcmVwbGFj
ZW1lbnRTdHJpbmcsIGNvbnN0IFZlY3RvcjxTdHJpbmc+JiBhbHRlcm5hdGl2ZVJlcGxhY2VtZW50
U3RyaW5ncykKIHsKICNpZiAhZGVmaW5lZChCVUlMRElOR19PTl9TTk9XX0xFT1BBUkQpCiAgICAg
aWYgKCFpc1ZpZXdWaXNpYmxlKCkgfHwgIWlzVmlld0luV2luZG93KCkpCkBAIC00NzIsMTQgKzQ3
MiwxNCBAQCB2b2lkIFBhZ2VDbGllbnRJbXBsOjpzaG93Q29ycmVjdGlvblBhbmVsCiAjZW5kaWYK
IH0KIAotdm9pZCBQYWdlQ2xpZW50SW1wbDo6ZGlzbWlzc0NvcnJlY3Rpb25QYW5lbChSZWFzb25G
b3JEaXNtaXNzaW5nQ29ycmVjdGlvblBhbmVsIHJlYXNvbikKK3ZvaWQgUGFnZUNsaWVudEltcGw6
OmRpc21pc3NDb3JyZWN0aW9uUGFuZWwoUmVhc29uRm9yRGlzbWlzc2luZ0FsdGVybmF0aXZlVGV4
dCByZWFzb24pCiB7CiAjaWYgIWRlZmluZWQoQlVJTERJTkdfT05fU05PV19MRU9QQVJEKQogICAg
IG1fY29ycmVjdGlvblBhbmVsLmRpc21pc3MocmVhc29uKTsKICNlbmRpZgogfQogCi1TdHJpbmcg
UGFnZUNsaWVudEltcGw6OmRpc21pc3NDb3JyZWN0aW9uUGFuZWxTb29uKFdlYkNvcmU6OlJlYXNv
bkZvckRpc21pc3NpbmdDb3JyZWN0aW9uUGFuZWwgcmVhc29uKQorU3RyaW5nIFBhZ2VDbGllbnRJ
bXBsOjpkaXNtaXNzQ29ycmVjdGlvblBhbmVsU29vbihXZWJDb3JlOjpSZWFzb25Gb3JEaXNtaXNz
aW5nQWx0ZXJuYXRpdmVUZXh0IHJlYXNvbikKIHsKICNpZiAhZGVmaW5lZChCVUlMRElOR19PTl9T
Tk9XX0xFT1BBUkQpCiAgICAgcmV0dXJuIG1fY29ycmVjdGlvblBhbmVsLmRpc21pc3MocmVhc29u
KTsKSW5kZXg6IFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvbWFjL1dLVmlldy5tbQo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL21hYy9XS1ZpZXcubW0JKHJl
dmlzaW9uIDExMjk2MSkKKysrIFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvbWFjL1dLVmll
dy5tbQkod29ya2luZyBjb3B5KQpAQCAtMjg1Miw3ICsyODUyLDcgQEAgLSAoTlNJbnRlZ2VyKXNw
ZWxsQ2hlY2tlckRvY3VtZW50VGFnCiAKIC0gKHZvaWQpaGFuZGxlQ29ycmVjdGlvblBhbmVsUmVz
dWx0OihOU1N0cmluZyopcmVzdWx0CiB7Ci0gICAgX2RhdGEtPl9wYWdlLT5oYW5kbGVDb3JyZWN0
aW9uUGFuZWxSZXN1bHQocmVzdWx0KTsKKyAgICBfZGF0YS0+X3BhZ2UtPmhhbmRsZUFsdGVybmF0
aXZlVGV4dFVJUmVzdWx0KHJlc3VsdCk7CiB9CiAKIEBlbmQKSW5kZXg6IFNvdXJjZS9XZWJLaXQy
L1VJUHJvY2Vzcy9tYWMvQ29ycmVjdGlvblBhbmVsLmgKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dl
YktpdDIvVUlQcm9jZXNzL21hYy9Db3JyZWN0aW9uUGFuZWwuaAkocmV2aXNpb24gMTEyOTYxKQor
KysgU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL21hYy9Db3JyZWN0aW9uUGFuZWwuaAkod29ya2lu
ZyBjb3B5KQpAQCAtMjgsNyArMjgsNyBAQAogCiAjaWYgIWRlZmluZWQoQlVJTERJTkdfT05fU05P
V19MRU9QQVJEKQogI2ltcG9ydCA8QXBwS2l0L05TU3BlbGxDaGVja2VyLmg+Ci0jaW1wb3J0IDxX
ZWJDb3JlL1NwZWxsaW5nQ29ycmVjdGlvbkNvbnRyb2xsZXIuaD4KKyNpbXBvcnQgPFdlYkNvcmUv
QWx0ZXJuYXRpdmVUZXh0Q29udHJvbGxlci5oPgogI2ltcG9ydCA8d3RmL1JldGFpblB0ci5oPgog
CiBAY2xhc3MgV0tWaWV3OwpAQCAtMzksMTcgKzM5LDE3IEBAIGNsYXNzIENvcnJlY3Rpb25QYW5l
bCB7CiBwdWJsaWM6CiAgICAgQ29ycmVjdGlvblBhbmVsKCk7CiAgICAgfkNvcnJlY3Rpb25QYW5l
bCgpOwotICAgIHZvaWQgc2hvdyhXS1ZpZXcqLCBXZWJDb3JlOjpDb3JyZWN0aW9uUGFuZWxJbmZv
OjpQYW5lbFR5cGUsIGNvbnN0IFdlYkNvcmU6OkZsb2F0UmVjdCYgYm91bmRpbmdCb3hPZlJlcGxh
Y2VkU3RyaW5nLCBjb25zdCBTdHJpbmcmIHJlcGxhY2VkU3RyaW5nLCBjb25zdCBTdHJpbmcmIHJl
cGxhY2VtZW50U3RyaW5nLCBjb25zdCBWZWN0b3I8U3RyaW5nPiYgYWx0ZXJuYXRpdmVSZXBsYWNl
bWVudFN0cmluZ3MpOwotICAgIFN0cmluZyBkaXNtaXNzKFdlYkNvcmU6OlJlYXNvbkZvckRpc21p
c3NpbmdDb3JyZWN0aW9uUGFuZWwpOworICAgIHZvaWQgc2hvdyhXS1ZpZXcqLCBXZWJDb3JlOjpB
bHRlcm5hdGl2ZVRleHRUeXBlLCBjb25zdCBXZWJDb3JlOjpGbG9hdFJlY3QmIGJvdW5kaW5nQm94
T2ZSZXBsYWNlZFN0cmluZywgY29uc3QgU3RyaW5nJiByZXBsYWNlZFN0cmluZywgY29uc3QgU3Ry
aW5nJiByZXBsYWNlbWVudFN0cmluZywgY29uc3QgVmVjdG9yPFN0cmluZz4mIGFsdGVybmF0aXZl
UmVwbGFjZW1lbnRTdHJpbmdzKTsKKyAgICBTdHJpbmcgZGlzbWlzcyhXZWJDb3JlOjpSZWFzb25G
b3JEaXNtaXNzaW5nQWx0ZXJuYXRpdmVUZXh0KTsKICAgICBzdGF0aWMgdm9pZCByZWNvcmRBdXRv
Y29ycmVjdGlvblJlc3BvbnNlKFdLVmlldyosIE5TQ29ycmVjdGlvblJlc3BvbnNlLCBjb25zdCBT
dHJpbmcmIHJlcGxhY2VkU3RyaW5nLCBjb25zdCBTdHJpbmcmIHJlcGxhY2VtZW50U3RyaW5nKTsK
IAogcHJpdmF0ZToKICAgICBib29sIGlzU2hvd2luZygpIGNvbnN0IHsgcmV0dXJuIG1fdmlldzsg
fQotICAgIFN0cmluZyBkaXNtaXNzSW50ZXJuYWwoV2ViQ29yZTo6UmVhc29uRm9yRGlzbWlzc2lu
Z0NvcnJlY3Rpb25QYW5lbCwgYm9vbCBkaXNtaXNzaW5nRXh0ZXJuYWxseSk7CisgICAgU3RyaW5n
IGRpc21pc3NJbnRlcm5hbChXZWJDb3JlOjpSZWFzb25Gb3JEaXNtaXNzaW5nQWx0ZXJuYXRpdmVU
ZXh0LCBib29sIGRpc21pc3NpbmdFeHRlcm5hbGx5KTsKICAgICB2b2lkIGhhbmRsZUFjY2VwdGVk
UmVwbGFjZW1lbnQoTlNTdHJpbmcqIGFjY2VwdGVkUmVwbGFjZW1lbnQsIE5TU3RyaW5nKiByZXBs
YWNlZCwgTlNTdHJpbmcqIHByb3Bvc2VkUmVwbGFjZW1lbnQsIE5TQ29ycmVjdGlvbkluZGljYXRv
clR5cGUpOwogCiAgICAgYm9vbCBtX3dhc0Rpc21pc3NlZEV4dGVybmFsbHk7Ci0gICAgV2ViQ29y
ZTo6UmVhc29uRm9yRGlzbWlzc2luZ0NvcnJlY3Rpb25QYW5lbCBtX3JlYXNvbkZvckRpc21pc3Np
bmc7CisgICAgV2ViQ29yZTo6UmVhc29uRm9yRGlzbWlzc2luZ0FsdGVybmF0aXZlVGV4dCBtX3Jl
YXNvbkZvckRpc21pc3Npbmc7CiAgICAgUmV0YWluUHRyPFdLVmlldz4gbV92aWV3OwogICAgIFJl
dGFpblB0cjxOU1N0cmluZz4gbV9yZXN1bHRGb3JEaXNtaXNzYWw7CiB9OwpJbmRleDogU291cmNl
L1dlYktpdDIvVUlQcm9jZXNzL21hYy9Db3JyZWN0aW9uUGFuZWwubW0KPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1dlYktpdDIvVUlQcm9jZXNzL21hYy9Db3JyZWN0aW9uUGFuZWwubW0JKHJldmlzaW9u
IDExMjk2MSkKKysrIFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9tYWMvQ29ycmVjdGlvblBhbmVs
Lm1tCSh3b3JraW5nIGNvcHkpCkBAIC0zMywxNCArMzMsMTQgQEAKIAogdXNpbmcgbmFtZXNwYWNl
IFdlYkNvcmU7CiAKLXN0YXRpYyBpbmxpbmUgTlNDb3JyZWN0aW9uSW5kaWNhdG9yVHlwZSBjb3Jy
ZWN0aW9uSW5kaWNhdG9yVHlwZShDb3JyZWN0aW9uUGFuZWxJbmZvOjpQYW5lbFR5cGUgcGFuZWxU
eXBlKQorc3RhdGljIGlubGluZSBOU0NvcnJlY3Rpb25JbmRpY2F0b3JUeXBlIGNvcnJlY3Rpb25J
bmRpY2F0b3JUeXBlKEFsdGVybmF0aXZlVGV4dFR5cGUgYWx0ZXJuYXRpdmVUZXh0VHlwZSkKIHsK
LSAgICBzd2l0Y2ggKHBhbmVsVHlwZSkgewotICAgIGNhc2UgQ29ycmVjdGlvblBhbmVsSW5mbzo6
UGFuZWxUeXBlQ29ycmVjdGlvbjoKKyAgICBzd2l0Y2ggKGFsdGVybmF0aXZlVGV4dFR5cGUpIHsK
KyAgICBjYXNlIEFsdGVybmF0aXZlVGV4dFR5cGVDb3JyZWN0aW9uOgogICAgICAgICByZXR1cm4g
TlNDb3JyZWN0aW9uSW5kaWNhdG9yVHlwZURlZmF1bHQ7Ci0gICAgY2FzZSBDb3JyZWN0aW9uUGFu
ZWxJbmZvOjpQYW5lbFR5cGVSZXZlcnNpb246CisgICAgY2FzZSBBbHRlcm5hdGl2ZVRleHRUeXBl
UmV2ZXJzaW9uOgogICAgICAgICByZXR1cm4gTlNDb3JyZWN0aW9uSW5kaWNhdG9yVHlwZVJldmVy
c2lvbjsKLSAgICBjYXNlIENvcnJlY3Rpb25QYW5lbEluZm86OlBhbmVsVHlwZVNwZWxsaW5nU3Vn
Z2VzdGlvbnM6CisgICAgY2FzZSBBbHRlcm5hdGl2ZVRleHRUeXBlU3BlbGxpbmdTdWdnZXN0aW9u
czoKICAgICAgICAgcmV0dXJuIE5TQ29ycmVjdGlvbkluZGljYXRvclR5cGVHdWVzc2VzOwogICAg
IH0KICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKQEAgLTUxLDE4ICs1MSwxOCBAQCBuYW1lc3Bh
Y2UgV2ViS2l0IHsKIAogQ29ycmVjdGlvblBhbmVsOjpDb3JyZWN0aW9uUGFuZWwoKQogICAgIDog
bV93YXNEaXNtaXNzZWRFeHRlcm5hbGx5KGZhbHNlKQotICAgICwgbV9yZWFzb25Gb3JEaXNtaXNz
aW5nKFJlYXNvbkZvckRpc21pc3NpbmdDb3JyZWN0aW9uUGFuZWxJZ25vcmVkKQorICAgICwgbV9y
ZWFzb25Gb3JEaXNtaXNzaW5nKFJlYXNvbkZvckRpc21pc3NpbmdBbHRlcm5hdGl2ZVRleHRJZ25v
cmVkKQogewogfQogCiBDb3JyZWN0aW9uUGFuZWw6On5Db3JyZWN0aW9uUGFuZWwoKQogewotICAg
IGRpc21pc3NJbnRlcm5hbChSZWFzb25Gb3JEaXNtaXNzaW5nQ29ycmVjdGlvblBhbmVsSWdub3Jl
ZCwgZmFsc2UpOworICAgIGRpc21pc3NJbnRlcm5hbChSZWFzb25Gb3JEaXNtaXNzaW5nQWx0ZXJu
YXRpdmVUZXh0SWdub3JlZCwgZmFsc2UpOwogfQogCi12b2lkIENvcnJlY3Rpb25QYW5lbDo6c2hv
dyhXS1ZpZXcqIHZpZXcsIENvcnJlY3Rpb25QYW5lbEluZm86OlBhbmVsVHlwZSB0eXBlLCBjb25z
dCBGbG9hdFJlY3QmIGJvdW5kaW5nQm94T2ZSZXBsYWNlZFN0cmluZywgY29uc3QgU3RyaW5nJiBy
ZXBsYWNlZFN0cmluZywgY29uc3QgU3RyaW5nJiByZXBsYWNlbWVudFN0cmluZywgY29uc3QgVmVj
dG9yPFN0cmluZz4mIGFsdGVybmF0aXZlUmVwbGFjZW1lbnRTdHJpbmdzKQordm9pZCBDb3JyZWN0
aW9uUGFuZWw6OnNob3coV0tWaWV3KiB2aWV3LCBBbHRlcm5hdGl2ZVRleHRUeXBlIHR5cGUsIGNv
bnN0IEZsb2F0UmVjdCYgYm91bmRpbmdCb3hPZlJlcGxhY2VkU3RyaW5nLCBjb25zdCBTdHJpbmcm
IHJlcGxhY2VkU3RyaW5nLCBjb25zdCBTdHJpbmcmIHJlcGxhY2VtZW50U3RyaW5nLCBjb25zdCBW
ZWN0b3I8U3RyaW5nPiYgYWx0ZXJuYXRpdmVSZXBsYWNlbWVudFN0cmluZ3MpCiB7Ci0gICAgZGlz
bWlzc0ludGVybmFsKFJlYXNvbkZvckRpc21pc3NpbmdDb3JyZWN0aW9uUGFuZWxJZ25vcmVkLCBm
YWxzZSk7CisgICAgZGlzbWlzc0ludGVybmFsKFJlYXNvbkZvckRpc21pc3NpbmdBbHRlcm5hdGl2
ZVRleHRJZ25vcmVkLCBmYWxzZSk7CiAgICAgCiAgICAgaWYgKCF2aWV3KQogICAgICAgICByZXR1
cm47CkBAIC04NiwxMiArODYsMTIgQEAgdm9pZCBDb3JyZWN0aW9uUGFuZWw6OnNob3coV0tWaWV3
KiB2aWV3LAogICAgIH1dOwogfQogCi1TdHJpbmcgQ29ycmVjdGlvblBhbmVsOjpkaXNtaXNzKFJl
YXNvbkZvckRpc21pc3NpbmdDb3JyZWN0aW9uUGFuZWwgcmVhc29uKQorU3RyaW5nIENvcnJlY3Rp
b25QYW5lbDo6ZGlzbWlzcyhSZWFzb25Gb3JEaXNtaXNzaW5nQWx0ZXJuYXRpdmVUZXh0IHJlYXNv
bikKIHsKICAgICByZXR1cm4gZGlzbWlzc0ludGVybmFsKHJlYXNvbiwgdHJ1ZSk7CiB9CiAKLVN0
cmluZyBDb3JyZWN0aW9uUGFuZWw6OmRpc21pc3NJbnRlcm5hbChSZWFzb25Gb3JEaXNtaXNzaW5n
Q29ycmVjdGlvblBhbmVsIHJlYXNvbiwgYm9vbCBkaXNtaXNzaW5nRXh0ZXJuYWxseSkKK1N0cmlu
ZyBDb3JyZWN0aW9uUGFuZWw6OmRpc21pc3NJbnRlcm5hbChSZWFzb25Gb3JEaXNtaXNzaW5nQWx0
ZXJuYXRpdmVUZXh0IHJlYXNvbiwgYm9vbCBkaXNtaXNzaW5nRXh0ZXJuYWxseSkKIHsKICAgICBp
ZiAoIWlzU2hvd2luZygpKQogICAgICAgICByZXR1cm4gU3RyaW5nKCk7CkBAIC0xMjEsNyArMTIx
LDcgQEAgdm9pZCBDb3JyZWN0aW9uUGFuZWw6OmhhbmRsZUFjY2VwdGVkUmVwbAogICAgICAgICBp
ZiAoYWNjZXB0ZWRSZXBsYWNlbWVudCkKICAgICAgICAgICAgIFtzcGVsbENoZWNrZXIgcmVjb3Jk
UmVzcG9uc2U6TlNDb3JyZWN0aW9uUmVzcG9uc2VBY2NlcHRlZCB0b0NvcnJlY3Rpb246YWNjZXB0
ZWRSZXBsYWNlbWVudCBmb3JXb3JkOnJlcGxhY2VkIGxhbmd1YWdlOm5pbCBpblNwZWxsRG9jdW1l
bnRXaXRoVGFnOmRvY3VtZW50VGFnXTsKICAgICAgICAgZWxzZSB7Ci0gICAgICAgICAgICBpZiAo
IW1fd2FzRGlzbWlzc2VkRXh0ZXJuYWxseSB8fCBtX3JlYXNvbkZvckRpc21pc3NpbmcgPT0gUmVh
c29uRm9yRGlzbWlzc2luZ0NvcnJlY3Rpb25QYW5lbENhbmNlbGxlZCkKKyAgICAgICAgICAgIGlm
ICghbV93YXNEaXNtaXNzZWRFeHRlcm5hbGx5IHx8IG1fcmVhc29uRm9yRGlzbWlzc2luZyA9PSBS
ZWFzb25Gb3JEaXNtaXNzaW5nQWx0ZXJuYXRpdmVUZXh0Q2FuY2VsbGVkKQogICAgICAgICAgICAg
ICAgIFtzcGVsbENoZWNrZXIgcmVjb3JkUmVzcG9uc2U6TlNDb3JyZWN0aW9uUmVzcG9uc2VSZWpl
Y3RlZCB0b0NvcnJlY3Rpb246cHJvcG9zZWRSZXBsYWNlbWVudCBmb3JXb3JkOnJlcGxhY2VkIGxh
bmd1YWdlOm5pbCBpblNwZWxsRG9jdW1lbnRXaXRoVGFnOmRvY3VtZW50VGFnXTsKICAgICAgICAg
ICAgIGVsc2UKICAgICAgICAgICAgICAgICBbc3BlbGxDaGVja2VyIHJlY29yZFJlc3BvbnNlOk5T
Q29ycmVjdGlvblJlc3BvbnNlSWdub3JlZCB0b0NvcnJlY3Rpb246cHJvcG9zZWRSZXBsYWNlbWVu
dCBmb3JXb3JkOnJlcGxhY2VkIGxhbmd1YWdlOm5pbCBpblNwZWxsRG9jdW1lbnRXaXRoVGFnOmRv
Y3VtZW50VGFnXTsKSW5kZXg6IFNvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViQ29yZVN1cHBv
cnQvV2ViRWRpdG9yQ2xpZW50LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdDIvV2ViUHJv
Y2Vzcy9XZWJDb3JlU3VwcG9ydC9XZWJFZGl0b3JDbGllbnQuaAkocmV2aXNpb24gMTEyOTYxKQor
KysgU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJDb3JlU3VwcG9ydC9XZWJFZGl0b3JDbGll
bnQuaAkod29ya2luZyBjb3B5KQpAQCAtMTQzLDkgKzE0Myw5IEBAIHByaXZhdGU6CiAgICAgdmly
dHVhbCB2b2lkIHNldElucHV0TWV0aG9kU3RhdGUoYm9vbCBlbmFibGVkKSBPVkVSUklERTsKICAg
ICB2aXJ0dWFsIHZvaWQgcmVxdWVzdENoZWNraW5nT2ZTdHJpbmcoV2ViQ29yZTo6U3BlbGxDaGVj
a2VyKiwgY29uc3QgV2ViQ29yZTo6VGV4dENoZWNraW5nUmVxdWVzdCYpIE9WRVJSSURFOwogI2lm
IFBMQVRGT1JNKE1BQykgJiYgIWRlZmluZWQoQlVJTERJTkdfT05fU05PV19MRU9QQVJEKQotICAg
IHZpcnR1YWwgdm9pZCBzaG93Q29ycmVjdGlvblBhbmVsKFdlYkNvcmU6OkNvcnJlY3Rpb25QYW5l
bEluZm86OlBhbmVsVHlwZSwgY29uc3QgV2ViQ29yZTo6RmxvYXRSZWN0JiBib3VuZGluZ0JveE9m
UmVwbGFjZWRTdHJpbmcsIGNvbnN0IFN0cmluZyYgcmVwbGFjZWRTdHJpbmcsIGNvbnN0IFN0cmlu
ZyYgcmVwbGFjZW1lbnRTdHJpbmcsIGNvbnN0IFZlY3RvcjxTdHJpbmc+JiBhbHRlcm5hdGl2ZVJl
cGxhY2VtZW50U3RyaW5ncykgT1ZFUlJJREU7Ci0gICAgdmlydHVhbCB2b2lkIGRpc21pc3NDb3Jy
ZWN0aW9uUGFuZWwoV2ViQ29yZTo6UmVhc29uRm9yRGlzbWlzc2luZ0NvcnJlY3Rpb25QYW5lbCkg
T1ZFUlJJREU7Ci0gICAgdmlydHVhbCBTdHJpbmcgZGlzbWlzc0NvcnJlY3Rpb25QYW5lbFNvb24o
V2ViQ29yZTo6UmVhc29uRm9yRGlzbWlzc2luZ0NvcnJlY3Rpb25QYW5lbCkgT1ZFUlJJREU7Cisg
ICAgdmlydHVhbCB2b2lkIHNob3dDb3JyZWN0aW9uUGFuZWwoV2ViQ29yZTo6QWx0ZXJuYXRpdmVU
ZXh0VHlwZSwgY29uc3QgV2ViQ29yZTo6RmxvYXRSZWN0JiBib3VuZGluZ0JveE9mUmVwbGFjZWRT
dHJpbmcsIGNvbnN0IFN0cmluZyYgcmVwbGFjZWRTdHJpbmcsIGNvbnN0IFN0cmluZyYgcmVwbGFj
ZW1lbnRTdHJpbmcsIGNvbnN0IFZlY3RvcjxTdHJpbmc+JiBhbHRlcm5hdGl2ZVJlcGxhY2VtZW50
U3RyaW5ncykgT1ZFUlJJREU7CisgICAgdmlydHVhbCB2b2lkIGRpc21pc3NDb3JyZWN0aW9uUGFu
ZWwoV2ViQ29yZTo6UmVhc29uRm9yRGlzbWlzc2luZ0FsdGVybmF0aXZlVGV4dCkgT1ZFUlJJREU7
CisgICAgdmlydHVhbCBTdHJpbmcgZGlzbWlzc0NvcnJlY3Rpb25QYW5lbFNvb24oV2ViQ29yZTo6
UmVhc29uRm9yRGlzbWlzc2luZ0FsdGVybmF0aXZlVGV4dCkgT1ZFUlJJREU7CiAgICAgdmlydHVh
bCB2b2lkIHJlY29yZEF1dG9jb3JyZWN0aW9uUmVzcG9uc2UoQXV0b2NvcnJlY3Rpb25SZXNwb25z
ZVR5cGUsIGNvbnN0IFN0cmluZyYgcmVwbGFjZWRTdHJpbmcsIGNvbnN0IFN0cmluZyYgcmVwbGFj
ZW1lbnRTdHJpbmcpIE9WRVJSSURFOwogI2VuZGlmCiAjaWYgUExBVEZPUk0oR1RLKQpJbmRleDog
U291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJDb3JlU3VwcG9ydC9tYWMvV2ViRWRpdG9yQ2xp
ZW50TWFjLm1tCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViQ29y
ZVN1cHBvcnQvbWFjL1dlYkVkaXRvckNsaWVudE1hYy5tbQkocmV2aXNpb24gMTEyOTYxKQorKysg
U291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJDb3JlU3VwcG9ydC9tYWMvV2ViRWRpdG9yQ2xp
ZW50TWFjLm1tCSh3b3JraW5nIGNvcHkpCkBAIC0yMzksMTcgKzIzOSwxNyBAQCB2b2lkIFdlYkVk
aXRvckNsaWVudDo6Y2hlY2tUZXh0T2ZQYXJhZ3JhCiB9CiAKICNpZiAhZGVmaW5lZChCVUlMRElO
R19PTl9TTk9XX0xFT1BBUkQpCi12b2lkIFdlYkVkaXRvckNsaWVudDo6c2hvd0NvcnJlY3Rpb25Q
YW5lbChXZWJDb3JlOjpDb3JyZWN0aW9uUGFuZWxJbmZvOjpQYW5lbFR5cGUgdHlwZSwgY29uc3Qg
V2ViQ29yZTo6RmxvYXRSZWN0JiBib3VuZGluZ0JveE9mUmVwbGFjZWRTdHJpbmcsIGNvbnN0IFN0
cmluZyYgcmVwbGFjZWRTdHJpbmcsIGNvbnN0IFN0cmluZyYgcmVwbGFjZW1lbnRTdHJpbmcsIGNv
bnN0IFZlY3RvcjxTdHJpbmc+JiBhbHRlcm5hdGl2ZVJlcGxhY2VtZW50U3RyaW5ncykKK3ZvaWQg
V2ViRWRpdG9yQ2xpZW50OjpzaG93Q29ycmVjdGlvblBhbmVsKFdlYkNvcmU6OkFsdGVybmF0aXZl
VGV4dFR5cGUgdHlwZSwgY29uc3QgV2ViQ29yZTo6RmxvYXRSZWN0JiBib3VuZGluZ0JveE9mUmVw
bGFjZWRTdHJpbmcsIGNvbnN0IFN0cmluZyYgcmVwbGFjZWRTdHJpbmcsIGNvbnN0IFN0cmluZyYg
cmVwbGFjZW1lbnRTdHJpbmcsIGNvbnN0IFZlY3RvcjxTdHJpbmc+JiBhbHRlcm5hdGl2ZVJlcGxh
Y2VtZW50U3RyaW5ncykKIHsKICAgICBtX3BhZ2UtPnNlbmQoTWVzc2FnZXM6OldlYlBhZ2VQcm94
eTo6U2hvd0NvcnJlY3Rpb25QYW5lbCh0eXBlLCBib3VuZGluZ0JveE9mUmVwbGFjZWRTdHJpbmcs
IHJlcGxhY2VkU3RyaW5nLCByZXBsYWNlbWVudFN0cmluZywgYWx0ZXJuYXRpdmVSZXBsYWNlbWVu
dFN0cmluZ3MpKTsKIH0KIAotdm9pZCBXZWJFZGl0b3JDbGllbnQ6OmRpc21pc3NDb3JyZWN0aW9u
UGFuZWwoV2ViQ29yZTo6UmVhc29uRm9yRGlzbWlzc2luZ0NvcnJlY3Rpb25QYW5lbCByZWFzb24p
Cit2b2lkIFdlYkVkaXRvckNsaWVudDo6ZGlzbWlzc0NvcnJlY3Rpb25QYW5lbChXZWJDb3JlOjpS
ZWFzb25Gb3JEaXNtaXNzaW5nQWx0ZXJuYXRpdmVUZXh0IHJlYXNvbikKIHsKICAgICBtX3BhZ2Ut
PnNlbmQoTWVzc2FnZXM6OldlYlBhZ2VQcm94eTo6RGlzbWlzc0NvcnJlY3Rpb25QYW5lbChyZWFz
b24pKTsKIH0KIAotU3RyaW5nIFdlYkVkaXRvckNsaWVudDo6ZGlzbWlzc0NvcnJlY3Rpb25QYW5l
bFNvb24oV2ViQ29yZTo6UmVhc29uRm9yRGlzbWlzc2luZ0NvcnJlY3Rpb25QYW5lbCByZWFzb24p
CitTdHJpbmcgV2ViRWRpdG9yQ2xpZW50OjpkaXNtaXNzQ29ycmVjdGlvblBhbmVsU29vbihXZWJD
b3JlOjpSZWFzb25Gb3JEaXNtaXNzaW5nQWx0ZXJuYXRpdmVUZXh0IHJlYXNvbikKIHsKICAgICBT
dHJpbmcgcmVzdWx0OwogICAgIG1fcGFnZS0+c2VuZFN5bmMoTWVzc2FnZXM6OldlYlBhZ2VQcm94
eTo6RGlzbWlzc0NvcnJlY3Rpb25QYW5lbFNvb24ocmVhc29uKSwgTWVzc2FnZXM6OldlYlBhZ2VQ
cm94eTo6RGlzbWlzc0NvcnJlY3Rpb25QYW5lbFNvb246OlJlcGx5KHJlc3VsdCkpOwpJbmRleDog
U291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL1dlYlBhZ2UuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9XZWJQYWdlLmNwcAkocmV2aXNp
b24gMTEyOTYxKQorKysgU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL1dlYlBhZ2Uu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMDIwLDEyICszMDIwLDEyIEBAIGJvb2wgV2ViUGFnZTo6
Y2FuSGFuZGxlUmVxdWVzdChjb25zdCBXZWIKIH0KIAogI2lmIFBMQVRGT1JNKE1BQykgJiYgIWRl
ZmluZWQoQlVJTERJTkdfT05fU05PV19MRU9QQVJEKQotdm9pZCBXZWJQYWdlOjpoYW5kbGVDb3Jy
ZWN0aW9uUGFuZWxSZXN1bHQoY29uc3QgU3RyaW5nJiByZXN1bHQpCit2b2lkIFdlYlBhZ2U6Omhh
bmRsZUFsdGVybmF0aXZlVGV4dFVJUmVzdWx0KGNvbnN0IFN0cmluZyYgcmVzdWx0KQogewogICAg
IEZyYW1lKiBmcmFtZSA9IG1fcGFnZS0+Zm9jdXNDb250cm9sbGVyKCktPmZvY3VzZWRPck1haW5G
cmFtZSgpOwogICAgIGlmICghZnJhbWUpCiAgICAgICAgIHJldHVybjsKLSAgICBmcmFtZS0+ZWRp
dG9yKCktPmhhbmRsZUNvcnJlY3Rpb25QYW5lbFJlc3VsdChyZXN1bHQpOworICAgIGZyYW1lLT5l
ZGl0b3IoKS0+aGFuZGxlQWx0ZXJuYXRpdmVUZXh0VUlSZXN1bHQocmVzdWx0KTsKIH0KICNlbmRp
ZgogCkluZGV4OiBTb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvV2ViUGFnZS5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9XZWJQYWdlLmgJ
KHJldmlzaW9uIDExMjk2MSkKKysrIFNvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9X
ZWJQYWdlLmgJKHdvcmtpbmcgY29weSkKQEAgLTQ4Nyw3ICs0ODcsNyBAQCBwdWJsaWM6CiAgICAg
dm9pZCB1bm1hcmtBbGxCYWRHcmFtbWFyKCk7CiAKICNpZiBQTEFURk9STShNQUMpICYmICFkZWZp
bmVkKEJVSUxESU5HX09OX1NOT1dfTEVPUEFSRCkKLSAgICB2b2lkIGhhbmRsZUNvcnJlY3Rpb25Q
YW5lbFJlc3VsdChjb25zdCBTdHJpbmcmKTsKKyAgICB2b2lkIGhhbmRsZUFsdGVybmF0aXZlVGV4
dFVJUmVzdWx0KGNvbnN0IFN0cmluZyYpOwogI2VuZGlmCiAKICAgICAvLyBGb3IgdGVzdGluZyBw
dXJwb3NlLgpJbmRleDogU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL1dlYlBhZ2Uu
bWVzc2FnZXMuaW4KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQ
YWdlL1dlYlBhZ2UubWVzc2FnZXMuaW4JKHJldmlzaW9uIDExMjk2MSkKKysrIFNvdXJjZS9XZWJL
aXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9XZWJQYWdlLm1lc3NhZ2VzLmluCSh3b3JraW5nIGNvcHkp
CkBAIC0yNTgsNiArMjU4LDYgQEAgbWVzc2FnZXMgLT4gV2ViUGFnZSB7CiAjZW5kaWYKIAogI2lm
IFBMQVRGT1JNKE1BQykgJiYgIWRlZmluZWQoQlVJTERJTkdfT05fU05PV19MRU9QQVJEKQotICAg
IEhhbmRsZUNvcnJlY3Rpb25QYW5lbFJlc3VsdChTdHJpbmcgcmVzdWx0KQorICAgIEhhbmRsZUFs
dGVybmF0aXZlVGV4dFVJUmVzdWx0KFN0cmluZyByZXN1bHQpCiAjZW5kaWYKIH0KSW5kZXg6IFNv
dXJjZS9XZWJLaXQvbWFjL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L21h
Yy9DaGFuZ2VMb2cJKHJldmlzaW9uIDExMjk2MSkKKysrIFNvdXJjZS9XZWJLaXQvbWFjL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDMxIEBACisyMDEyLTA0LTAyICBKaWEgUHUg
IDxqcHVAYXBwbGUuY29tPgorCisgICAgICAgIFJlbmFtZSBTcGVsbGluZ0NvcnJlY3Rpb25Db250
cm9sbGVyIHRvIEFsdGVybmF0aXZlVGV4dENvbnRyb2xsZXIuCisgICAgICAgIGh0dHBzOi8vYnVn
cy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD04Mjk0MgorCisgICAgICAgIFJldmlld2VkIGJ5
IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFRoZXNlIGNoYW5nZXMgYXJlIHNpbXBseSBhZG9w
dGluZyBuZXcgY2xhc3MgbmFtZXMuCisKKyAgICAgICAgKiBXZWJDb3JlU3VwcG9ydC9Db3JyZWN0
aW9uUGFuZWwuaDoKKyAgICAgICAgKENvcnJlY3Rpb25QYW5lbCk6CisgICAgICAgICogV2ViQ29y
ZVN1cHBvcnQvQ29ycmVjdGlvblBhbmVsLm1tOgorICAgICAgICAoY29ycmVjdGlvbkluZGljYXRv
clR5cGUpOgorICAgICAgICAoQ29ycmVjdGlvblBhbmVsOjpDb3JyZWN0aW9uUGFuZWwpOgorICAg
ICAgICAoQ29ycmVjdGlvblBhbmVsOjp+Q29ycmVjdGlvblBhbmVsKToKKyAgICAgICAgKENvcnJl
Y3Rpb25QYW5lbDo6c2hvdyk6CisgICAgICAgIChDb3JyZWN0aW9uUGFuZWw6OmRpc21pc3MpOgor
ICAgICAgICAoQ29ycmVjdGlvblBhbmVsOjpkaXNtaXNzSW50ZXJuYWwpOgorICAgICAgICAoQ29y
cmVjdGlvblBhbmVsOjpoYW5kbGVBY2NlcHRlZFJlcGxhY2VtZW50KToKKyAgICAgICAgKiBXZWJD
b3JlU3VwcG9ydC9XZWJFZGl0b3JDbGllbnQuaDoKKyAgICAgICAgKiBXZWJDb3JlU3VwcG9ydC9X
ZWJFZGl0b3JDbGllbnQubW06CisgICAgICAgIChXZWJFZGl0b3JDbGllbnQ6On5XZWJFZGl0b3JD
bGllbnQpOgorICAgICAgICAoV2ViRWRpdG9yQ2xpZW50OjpzaG93Q29ycmVjdGlvblBhbmVsKToK
KyAgICAgICAgKFdlYkVkaXRvckNsaWVudDo6ZGlzbWlzc0NvcnJlY3Rpb25QYW5lbCk6CisgICAg
ICAgIChXZWJFZGl0b3JDbGllbnQ6OmRpc21pc3NDb3JyZWN0aW9uUGFuZWxTb29uKToKKyAgICAg
ICAgKiBXZWJWaWV3L1dlYlZpZXcubW06CisgICAgICAgICgtW1dlYlZpZXcgaGFuZGxlQ29ycmVj
dGlvblBhbmVsUmVzdWx0Ol0pOgorCiAyMDEyLTA0LTAxICBKb24gTGVlICA8am9ubGVlQGFwcGxl
LmNvbT4KIAogICAgICAgICBSZW5hbWUgbm90aWZpY2F0aW9uIHByb3BlcnRpZXMgYW5kIGZ1bmN0
aW9ucwpJbmRleDogU291cmNlL1dlYktpdC9tYWMvV2ViQ29yZVN1cHBvcnQvQ29ycmVjdGlvblBh
bmVsLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9tYWMvV2ViQ29yZVN1cHBvcnQvQ29y
cmVjdGlvblBhbmVsLmgJKHJldmlzaW9uIDExMjk2MSkKKysrIFNvdXJjZS9XZWJLaXQvbWFjL1dl
YkNvcmVTdXBwb3J0L0NvcnJlY3Rpb25QYW5lbC5oCSh3b3JraW5nIGNvcHkpCkBAIC0yOCw3ICsy
OCw3IEBACiAKICNpZiAhZGVmaW5lZChCVUlMRElOR19PTl9MRU9QQVJEKSAmJiAhZGVmaW5lZChC
VUlMRElOR19PTl9TTk9XX0xFT1BBUkQpCiAjaW1wb3J0IDxBcHBLaXQvTlNTcGVsbENoZWNrZXIu
aD4KLSNpbXBvcnQgPFdlYkNvcmUvU3BlbGxpbmdDb3JyZWN0aW9uQ29udHJvbGxlci5oPgorI2lt
cG9ydCA8V2ViQ29yZS9BbHRlcm5hdGl2ZVRleHRDb250cm9sbGVyLmg+CiAjaW1wb3J0IDx3dGYv
UmV0YWluUHRyLmg+CiAKIEBjbGFzcyBXZWJWaWV3OwpAQCAtMzgsMTcgKzM4LDE3IEBAIGNsYXNz
IENvcnJlY3Rpb25QYW5lbCB7CiBwdWJsaWM6CiAgICAgQ29ycmVjdGlvblBhbmVsKCk7CiAgICAg
fkNvcnJlY3Rpb25QYW5lbCgpOwotICAgIHZvaWQgc2hvdyhXZWJWaWV3KiwgV2ViQ29yZTo6Q29y
cmVjdGlvblBhbmVsSW5mbzo6UGFuZWxUeXBlLCBjb25zdCBXZWJDb3JlOjpGbG9hdFJlY3QmIGJv
dW5kaW5nQm94T2ZSZXBsYWNlZFN0cmluZywgY29uc3QgU3RyaW5nJiByZXBsYWNlZFN0cmluZywg
Y29uc3QgU3RyaW5nJiByZXBsYWNlbWVudFN0cmluZywgY29uc3QgVmVjdG9yPFN0cmluZz4mIGFs
dGVybmF0aXZlUmVwbGFjZW1lbnRTdHJpbmdzKTsKLSAgICBTdHJpbmcgZGlzbWlzcyhXZWJDb3Jl
OjpSZWFzb25Gb3JEaXNtaXNzaW5nQ29ycmVjdGlvblBhbmVsKTsKKyAgICB2b2lkIHNob3coV2Vi
VmlldyosIFdlYkNvcmU6OkFsdGVybmF0aXZlVGV4dFR5cGUsIGNvbnN0IFdlYkNvcmU6OkZsb2F0
UmVjdCYgYm91bmRpbmdCb3hPZlJlcGxhY2VkU3RyaW5nLCBjb25zdCBTdHJpbmcmIHJlcGxhY2Vk
U3RyaW5nLCBjb25zdCBTdHJpbmcmIHJlcGxhY2VtZW50U3RyaW5nLCBjb25zdCBWZWN0b3I8U3Ry
aW5nPiYgYWx0ZXJuYXRpdmVSZXBsYWNlbWVudFN0cmluZ3MpOworICAgIFN0cmluZyBkaXNtaXNz
KFdlYkNvcmU6OlJlYXNvbkZvckRpc21pc3NpbmdBbHRlcm5hdGl2ZVRleHQpOwogICAgIHN0YXRp
YyB2b2lkIHJlY29yZEF1dG9jb3JyZWN0aW9uUmVzcG9uc2UoV2ViVmlldyosIE5TQ29ycmVjdGlv
blJlc3BvbnNlLCBjb25zdCBTdHJpbmcmIHJlcGxhY2VkU3RyaW5nLCBjb25zdCBTdHJpbmcmIHJl
cGxhY2VtZW50U3RyaW5nKTsKIAogcHJpdmF0ZToKICAgICBib29sIGlzU2hvd2luZygpIGNvbnN0
IHsgcmV0dXJuIG1fdmlldzsgfQotICAgIFN0cmluZyBkaXNtaXNzSW50ZXJuYWwoV2ViQ29yZTo6
UmVhc29uRm9yRGlzbWlzc2luZ0NvcnJlY3Rpb25QYW5lbCwgYm9vbCBkaXNtaXNzaW5nRXh0ZXJu
YWxseSk7CisgICAgU3RyaW5nIGRpc21pc3NJbnRlcm5hbChXZWJDb3JlOjpSZWFzb25Gb3JEaXNt
aXNzaW5nQWx0ZXJuYXRpdmVUZXh0LCBib29sIGRpc21pc3NpbmdFeHRlcm5hbGx5KTsKICAgICB2
b2lkIGhhbmRsZUFjY2VwdGVkUmVwbGFjZW1lbnQoTlNTdHJpbmcqIGFjY2VwdGVkUmVwbGFjZW1l
bnQsIE5TU3RyaW5nKiByZXBsYWNlZCwgTlNTdHJpbmcqIHByb3Bvc2VkUmVwbGFjZW1lbnQsIE5T
Q29ycmVjdGlvbkluZGljYXRvclR5cGUpOwogCiAgICAgYm9vbCBtX3dhc0Rpc21pc3NlZEV4dGVy
bmFsbHk7Ci0gICAgV2ViQ29yZTo6UmVhc29uRm9yRGlzbWlzc2luZ0NvcnJlY3Rpb25QYW5lbCBt
X3JlYXNvbkZvckRpc21pc3Npbmc7CisgICAgV2ViQ29yZTo6UmVhc29uRm9yRGlzbWlzc2luZ0Fs
dGVybmF0aXZlVGV4dCBtX3JlYXNvbkZvckRpc21pc3Npbmc7CiAgICAgUmV0YWluUHRyPFdlYlZp
ZXc+IG1fdmlldzsKICAgICBSZXRhaW5QdHI8TlNTdHJpbmc+IG1fcmVzdWx0Rm9yRGlzbWlzc2Fs
OwogfTsKSW5kZXg6IFNvdXJjZS9XZWJLaXQvbWFjL1dlYkNvcmVTdXBwb3J0L0NvcnJlY3Rpb25Q
YW5lbC5tbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L21hYy9XZWJDb3JlU3VwcG9ydC9D
b3JyZWN0aW9uUGFuZWwubW0JKHJldmlzaW9uIDExMjk2MSkKKysrIFNvdXJjZS9XZWJLaXQvbWFj
L1dlYkNvcmVTdXBwb3J0L0NvcnJlY3Rpb25QYW5lbC5tbQkod29ya2luZyBjb3B5KQpAQCAtMzAs
MTQgKzMwLDE0IEBACiAjaWYgIWRlZmluZWQoQlVJTERJTkdfT05fTEVPUEFSRCkgJiYgIWRlZmlu
ZWQoQlVJTERJTkdfT05fU05PV19MRU9QQVJEKQogdXNpbmcgbmFtZXNwYWNlIFdlYkNvcmU7CiAK
LXN0YXRpYyBpbmxpbmUgTlNDb3JyZWN0aW9uSW5kaWNhdG9yVHlwZSBjb3JyZWN0aW9uSW5kaWNh
dG9yVHlwZShDb3JyZWN0aW9uUGFuZWxJbmZvOjpQYW5lbFR5cGUgcGFuZWxUeXBlKQorc3RhdGlj
IGlubGluZSBOU0NvcnJlY3Rpb25JbmRpY2F0b3JUeXBlIGNvcnJlY3Rpb25JbmRpY2F0b3JUeXBl
KEFsdGVybmF0aXZlVGV4dFR5cGUgYWx0ZXJuYXRpdmVUZXh0VHlwZSkKIHsKLSAgICBzd2l0Y2gg
KHBhbmVsVHlwZSkgewotICAgIGNhc2UgQ29ycmVjdGlvblBhbmVsSW5mbzo6UGFuZWxUeXBlQ29y
cmVjdGlvbjoKKyAgICBzd2l0Y2ggKGFsdGVybmF0aXZlVGV4dFR5cGUpIHsKKyAgICBjYXNlIEFs
dGVybmF0aXZlVGV4dFR5cGVDb3JyZWN0aW9uOgogICAgICAgICByZXR1cm4gTlNDb3JyZWN0aW9u
SW5kaWNhdG9yVHlwZURlZmF1bHQ7Ci0gICAgY2FzZSBDb3JyZWN0aW9uUGFuZWxJbmZvOjpQYW5l
bFR5cGVSZXZlcnNpb246CisgICAgY2FzZSBBbHRlcm5hdGl2ZVRleHRUeXBlUmV2ZXJzaW9uOgog
ICAgICAgICByZXR1cm4gTlNDb3JyZWN0aW9uSW5kaWNhdG9yVHlwZVJldmVyc2lvbjsKLSAgICBj
YXNlIENvcnJlY3Rpb25QYW5lbEluZm86OlBhbmVsVHlwZVNwZWxsaW5nU3VnZ2VzdGlvbnM6Cisg
ICAgY2FzZSBBbHRlcm5hdGl2ZVRleHRUeXBlU3BlbGxpbmdTdWdnZXN0aW9uczoKICAgICAgICAg
cmV0dXJuIE5TQ29ycmVjdGlvbkluZGljYXRvclR5cGVHdWVzc2VzOwogICAgIH0KICAgICBBU1NF
UlRfTk9UX1JFQUNIRUQoKTsKQEAgLTQ2LDE4ICs0NiwxOCBAQCBzdGF0aWMgaW5saW5lIE5TQ29y
cmVjdGlvbkluZGljYXRvclR5cGUgCiAKIENvcnJlY3Rpb25QYW5lbDo6Q29ycmVjdGlvblBhbmVs
KCkKICAgICA6IG1fd2FzRGlzbWlzc2VkRXh0ZXJuYWxseShmYWxzZSkKLSAgICAsIG1fcmVhc29u
Rm9yRGlzbWlzc2luZyhSZWFzb25Gb3JEaXNtaXNzaW5nQ29ycmVjdGlvblBhbmVsSWdub3JlZCkK
KyAgICAsIG1fcmVhc29uRm9yRGlzbWlzc2luZyhSZWFzb25Gb3JEaXNtaXNzaW5nQWx0ZXJuYXRp
dmVUZXh0SWdub3JlZCkKIHsKIH0KIAogQ29ycmVjdGlvblBhbmVsOjp+Q29ycmVjdGlvblBhbmVs
KCkKIHsKLSAgICBkaXNtaXNzSW50ZXJuYWwoUmVhc29uRm9yRGlzbWlzc2luZ0NvcnJlY3Rpb25Q
YW5lbElnbm9yZWQsIGZhbHNlKTsKKyAgICBkaXNtaXNzSW50ZXJuYWwoUmVhc29uRm9yRGlzbWlz
c2luZ0FsdGVybmF0aXZlVGV4dElnbm9yZWQsIGZhbHNlKTsKIH0KIAotdm9pZCBDb3JyZWN0aW9u
UGFuZWw6OnNob3coV2ViVmlldyogdmlldywgQ29ycmVjdGlvblBhbmVsSW5mbzo6UGFuZWxUeXBl
IHR5cGUsIGNvbnN0IEZsb2F0UmVjdCYgYm91bmRpbmdCb3hPZlJlcGxhY2VkU3RyaW5nLCBjb25z
dCBTdHJpbmcmIHJlcGxhY2VkU3RyaW5nLCBjb25zdCBTdHJpbmcmIHJlcGxhY2VtZW50U3RyaW5n
LCBjb25zdCBWZWN0b3I8U3RyaW5nPiYgYWx0ZXJuYXRpdmVSZXBsYWNlbWVudFN0cmluZ3MpCit2
b2lkIENvcnJlY3Rpb25QYW5lbDo6c2hvdyhXZWJWaWV3KiB2aWV3LCBBbHRlcm5hdGl2ZVRleHRU
eXBlIHR5cGUsIGNvbnN0IEZsb2F0UmVjdCYgYm91bmRpbmdCb3hPZlJlcGxhY2VkU3RyaW5nLCBj
b25zdCBTdHJpbmcmIHJlcGxhY2VkU3RyaW5nLCBjb25zdCBTdHJpbmcmIHJlcGxhY2VtZW50U3Ry
aW5nLCBjb25zdCBWZWN0b3I8U3RyaW5nPiYgYWx0ZXJuYXRpdmVSZXBsYWNlbWVudFN0cmluZ3Mp
CiB7Ci0gICAgZGlzbWlzc0ludGVybmFsKFJlYXNvbkZvckRpc21pc3NpbmdDb3JyZWN0aW9uUGFu
ZWxJZ25vcmVkLCBmYWxzZSk7CisgICAgZGlzbWlzc0ludGVybmFsKFJlYXNvbkZvckRpc21pc3Np
bmdBbHRlcm5hdGl2ZVRleHRJZ25vcmVkLCBmYWxzZSk7CiAgICAgCiAgICAgaWYgKCF2aWV3KQog
ICAgICAgICByZXR1cm47CkBAIC04MCwxMiArODAsMTIgQEAgdm9pZCBDb3JyZWN0aW9uUGFuZWw6
OnNob3coV2ViVmlldyogdmlldwogICAgIH1dOwogfQogCi1TdHJpbmcgQ29ycmVjdGlvblBhbmVs
OjpkaXNtaXNzKFJlYXNvbkZvckRpc21pc3NpbmdDb3JyZWN0aW9uUGFuZWwgcmVhc29uKQorU3Ry
aW5nIENvcnJlY3Rpb25QYW5lbDo6ZGlzbWlzcyhSZWFzb25Gb3JEaXNtaXNzaW5nQWx0ZXJuYXRp
dmVUZXh0IHJlYXNvbikKIHsKICAgICByZXR1cm4gZGlzbWlzc0ludGVybmFsKHJlYXNvbiwgdHJ1
ZSk7CiB9CiAKLVN0cmluZyBDb3JyZWN0aW9uUGFuZWw6OmRpc21pc3NJbnRlcm5hbChSZWFzb25G
b3JEaXNtaXNzaW5nQ29ycmVjdGlvblBhbmVsIHJlYXNvbiwgYm9vbCBkaXNtaXNzaW5nRXh0ZXJu
YWxseSkKK1N0cmluZyBDb3JyZWN0aW9uUGFuZWw6OmRpc21pc3NJbnRlcm5hbChSZWFzb25Gb3JE
aXNtaXNzaW5nQWx0ZXJuYXRpdmVUZXh0IHJlYXNvbiwgYm9vbCBkaXNtaXNzaW5nRXh0ZXJuYWxs
eSkKIHsKICAgICBpZiAoIWlzU2hvd2luZygpKQogICAgICAgICByZXR1cm4gU3RyaW5nKCk7CkBA
IC0xMTUsNyArMTE1LDcgQEAgdm9pZCBDb3JyZWN0aW9uUGFuZWw6OmhhbmRsZUFjY2VwdGVkUmVw
bAogICAgICAgICBpZiAoYWNjZXB0ZWRSZXBsYWNlbWVudCkKICAgICAgICAgICAgIFtzcGVsbENo
ZWNrZXIgcmVjb3JkUmVzcG9uc2U6TlNDb3JyZWN0aW9uUmVzcG9uc2VBY2NlcHRlZCB0b0NvcnJl
Y3Rpb246YWNjZXB0ZWRSZXBsYWNlbWVudCBmb3JXb3JkOnJlcGxhY2VkIGxhbmd1YWdlOm5pbCBp
blNwZWxsRG9jdW1lbnRXaXRoVGFnOmRvY3VtZW50VGFnXTsKICAgICAgICAgZWxzZSB7Ci0gICAg
ICAgICAgICBpZiAoIW1fd2FzRGlzbWlzc2VkRXh0ZXJuYWxseSB8fCBtX3JlYXNvbkZvckRpc21p
c3NpbmcgPT0gUmVhc29uRm9yRGlzbWlzc2luZ0NvcnJlY3Rpb25QYW5lbENhbmNlbGxlZCkKKyAg
ICAgICAgICAgIGlmICghbV93YXNEaXNtaXNzZWRFeHRlcm5hbGx5IHx8IG1fcmVhc29uRm9yRGlz
bWlzc2luZyA9PSBSZWFzb25Gb3JEaXNtaXNzaW5nQWx0ZXJuYXRpdmVUZXh0Q2FuY2VsbGVkKQog
ICAgICAgICAgICAgICAgIFtzcGVsbENoZWNrZXIgcmVjb3JkUmVzcG9uc2U6TlNDb3JyZWN0aW9u
UmVzcG9uc2VSZWplY3RlZCB0b0NvcnJlY3Rpb246cHJvcG9zZWRSZXBsYWNlbWVudCBmb3JXb3Jk
OnJlcGxhY2VkIGxhbmd1YWdlOm5pbCBpblNwZWxsRG9jdW1lbnRXaXRoVGFnOmRvY3VtZW50VGFn
XTsKICAgICAgICAgICAgIGVsc2UKICAgICAgICAgICAgICAgICBbc3BlbGxDaGVja2VyIHJlY29y
ZFJlc3BvbnNlOk5TQ29ycmVjdGlvblJlc3BvbnNlSWdub3JlZCB0b0NvcnJlY3Rpb246cHJvcG9z
ZWRSZXBsYWNlbWVudCBmb3JXb3JkOnJlcGxhY2VkIGxhbmd1YWdlOm5pbCBpblNwZWxsRG9jdW1l
bnRXaXRoVGFnOmRvY3VtZW50VGFnXTsKSW5kZXg6IFNvdXJjZS9XZWJLaXQvbWFjL1dlYkNvcmVT
dXBwb3J0L1dlYkVkaXRvckNsaWVudC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvbWFj
L1dlYkNvcmVTdXBwb3J0L1dlYkVkaXRvckNsaWVudC5oCShyZXZpc2lvbiAxMTI5NjEpCisrKyBT
b3VyY2UvV2ViS2l0L21hYy9XZWJDb3JlU3VwcG9ydC9XZWJFZGl0b3JDbGllbnQuaAkod29ya2lu
ZyBjb3B5KQpAQCAtMTM3LDkgKzEzNyw5IEBAIHB1YmxpYzoKICAgICB2aXJ0dWFsIHZvaWQgc2V0
SW5wdXRNZXRob2RTdGF0ZShib29sIGVuYWJsZWQpIE9WRVJSSURFOwogICAgIHZpcnR1YWwgdm9p
ZCByZXF1ZXN0Q2hlY2tpbmdPZlN0cmluZyhXZWJDb3JlOjpTcGVsbENoZWNrZXIqLCBjb25zdCBX
ZWJDb3JlOjpUZXh0Q2hlY2tpbmdSZXF1ZXN0JikgT1ZFUlJJREU7CiAjaWYgIWRlZmluZWQoQlVJ
TERJTkdfT05fTEVPUEFSRCkgJiYgIWRlZmluZWQoQlVJTERJTkdfT05fU05PV19MRU9QQVJEKQot
ICAgIHZpcnR1YWwgdm9pZCBzaG93Q29ycmVjdGlvblBhbmVsKFdlYkNvcmU6OkNvcnJlY3Rpb25Q
YW5lbEluZm86OlBhbmVsVHlwZSwgY29uc3QgV2ViQ29yZTo6RmxvYXRSZWN0JiBib3VuZGluZ0Jv
eE9mUmVwbGFjZWRTdHJpbmcsIGNvbnN0IFN0cmluZyYgcmVwbGFjZWRTdHJpbmcsIGNvbnN0IFN0
cmluZyYgcmVwbGFjZW1lbnRTdHJpbmcsIGNvbnN0IFZlY3RvcjxTdHJpbmc+JiBhbHRlcm5hdGl2
ZVJlcGxhY2VtZW50U3RyaW5ncykgT1ZFUlJJREU7Ci0gICAgdmlydHVhbCB2b2lkIGRpc21pc3ND
b3JyZWN0aW9uUGFuZWwoV2ViQ29yZTo6UmVhc29uRm9yRGlzbWlzc2luZ0NvcnJlY3Rpb25QYW5l
bCkgT1ZFUlJJREU7Ci0gICAgdmlydHVhbCBTdHJpbmcgZGlzbWlzc0NvcnJlY3Rpb25QYW5lbFNv
b24oV2ViQ29yZTo6UmVhc29uRm9yRGlzbWlzc2luZ0NvcnJlY3Rpb25QYW5lbCkgT1ZFUlJJREU7
CisgICAgdmlydHVhbCB2b2lkIHNob3dDb3JyZWN0aW9uUGFuZWwoV2ViQ29yZTo6QWx0ZXJuYXRp
dmVUZXh0VHlwZSwgY29uc3QgV2ViQ29yZTo6RmxvYXRSZWN0JiBib3VuZGluZ0JveE9mUmVwbGFj
ZWRTdHJpbmcsIGNvbnN0IFN0cmluZyYgcmVwbGFjZWRTdHJpbmcsIGNvbnN0IFN0cmluZyYgcmVw
bGFjZW1lbnRTdHJpbmcsIGNvbnN0IFZlY3RvcjxTdHJpbmc+JiBhbHRlcm5hdGl2ZVJlcGxhY2Vt
ZW50U3RyaW5ncykgT1ZFUlJJREU7CisgICAgdmlydHVhbCB2b2lkIGRpc21pc3NDb3JyZWN0aW9u
UGFuZWwoV2ViQ29yZTo6UmVhc29uRm9yRGlzbWlzc2luZ0FsdGVybmF0aXZlVGV4dCkgT1ZFUlJJ
REU7CisgICAgdmlydHVhbCBTdHJpbmcgZGlzbWlzc0NvcnJlY3Rpb25QYW5lbFNvb24oV2ViQ29y
ZTo6UmVhc29uRm9yRGlzbWlzc2luZ0FsdGVybmF0aXZlVGV4dCkgT1ZFUlJJREU7CiAgICAgdmly
dHVhbCB2b2lkIHJlY29yZEF1dG9jb3JyZWN0aW9uUmVzcG9uc2UoQXV0b2NvcnJlY3Rpb25SZXNw
b25zZVR5cGUsIGNvbnN0IFN0cmluZyYgcmVwbGFjZWRTdHJpbmcsIGNvbnN0IFN0cmluZyYgcmVw
bGFjZW1lbnRTdHJpbmcpIE9WRVJSSURFOwogI2VuZGlmCiBwcml2YXRlOgpJbmRleDogU291cmNl
L1dlYktpdC9tYWMvV2ViQ29yZVN1cHBvcnQvV2ViRWRpdG9yQ2xpZW50Lm1tCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9XZWJLaXQvbWFjL1dlYkNvcmVTdXBwb3J0L1dlYkVkaXRvckNsaWVudC5tbQko
cmV2aXNpb24gMTEyOTYxKQorKysgU291cmNlL1dlYktpdC9tYWMvV2ViQ29yZVN1cHBvcnQvV2Vi
RWRpdG9yQ2xpZW50Lm1tCSh3b3JraW5nIGNvcHkpCkBAIC0xOTAsNyArMTkwLDcgQEAgV2ViRWRp
dG9yQ2xpZW50OjpXZWJFZGl0b3JDbGllbnQoV2ViVmlldwogV2ViRWRpdG9yQ2xpZW50Ojp+V2Vi
RWRpdG9yQ2xpZW50KCkKIHsKICNpZiAhZGVmaW5lZChCVUlMRElOR19PTl9MRU9QQVJEKSAmJiAh
ZGVmaW5lZChCVUlMRElOR19PTl9TTk9XX0xFT1BBUkQpCi0gICAgZGlzbWlzc0NvcnJlY3Rpb25Q
YW5lbChSZWFzb25Gb3JEaXNtaXNzaW5nQ29ycmVjdGlvblBhbmVsSWdub3JlZCk7CisgICAgZGlz
bWlzc0NvcnJlY3Rpb25QYW5lbChSZWFzb25Gb3JEaXNtaXNzaW5nQWx0ZXJuYXRpdmVUZXh0SWdu
b3JlZCk7CiAjZW5kaWYKIH0KIApAQCAtODY3LDE3ICs4NjcsMTcgQEAgdm9pZCBXZWJFZGl0b3JD
bGllbnQ6OnVwZGF0ZVNwZWxsaW5nVUlXaQogfQogCiAjaWYgIWRlZmluZWQoQlVJTERJTkdfT05f
TEVPUEFSRCkgJiYgIWRlZmluZWQoQlVJTERJTkdfT05fU05PV19MRU9QQVJEKQotdm9pZCBXZWJF
ZGl0b3JDbGllbnQ6OnNob3dDb3JyZWN0aW9uUGFuZWwoQ29ycmVjdGlvblBhbmVsSW5mbzo6UGFu
ZWxUeXBlIHBhbmVsVHlwZSwgY29uc3QgRmxvYXRSZWN0JiBib3VuZGluZ0JveE9mUmVwbGFjZWRT
dHJpbmcsIGNvbnN0IFN0cmluZyYgcmVwbGFjZWRTdHJpbmcsIGNvbnN0IFN0cmluZyYgcmVwbGFj
ZW1lbnRTdHJpbmcsIGNvbnN0IFZlY3RvcjxTdHJpbmc+JiBhbHRlcm5hdGl2ZVJlcGxhY2VtZW50
U3RyaW5ncykKK3ZvaWQgV2ViRWRpdG9yQ2xpZW50OjpzaG93Q29ycmVjdGlvblBhbmVsKEFsdGVy
bmF0aXZlVGV4dFR5cGUgcGFuZWxUeXBlLCBjb25zdCBGbG9hdFJlY3QmIGJvdW5kaW5nQm94T2ZS
ZXBsYWNlZFN0cmluZywgY29uc3QgU3RyaW5nJiByZXBsYWNlZFN0cmluZywgY29uc3QgU3RyaW5n
JiByZXBsYWNlbWVudFN0cmluZywgY29uc3QgVmVjdG9yPFN0cmluZz4mIGFsdGVybmF0aXZlUmVw
bGFjZW1lbnRTdHJpbmdzKQogewogICAgIG1fY29ycmVjdGlvblBhbmVsLnNob3cobV93ZWJWaWV3
LCBwYW5lbFR5cGUsIGJvdW5kaW5nQm94T2ZSZXBsYWNlZFN0cmluZywgcmVwbGFjZWRTdHJpbmcs
IHJlcGxhY2VtZW50U3RyaW5nLCBhbHRlcm5hdGl2ZVJlcGxhY2VtZW50U3RyaW5ncyk7CiB9CiAK
LXZvaWQgV2ViRWRpdG9yQ2xpZW50OjpkaXNtaXNzQ29ycmVjdGlvblBhbmVsKFJlYXNvbkZvckRp
c21pc3NpbmdDb3JyZWN0aW9uUGFuZWwgcmVhc29uRm9yRGlzbWlzc2luZykKK3ZvaWQgV2ViRWRp
dG9yQ2xpZW50OjpkaXNtaXNzQ29ycmVjdGlvblBhbmVsKFJlYXNvbkZvckRpc21pc3NpbmdBbHRl
cm5hdGl2ZVRleHQgcmVhc29uRm9yRGlzbWlzc2luZykKIHsKICAgICBtX2NvcnJlY3Rpb25QYW5l
bC5kaXNtaXNzKHJlYXNvbkZvckRpc21pc3NpbmcpOwogfQogCi1TdHJpbmcgV2ViRWRpdG9yQ2xp
ZW50OjpkaXNtaXNzQ29ycmVjdGlvblBhbmVsU29vbihSZWFzb25Gb3JEaXNtaXNzaW5nQ29ycmVj
dGlvblBhbmVsIHJlYXNvbkZvckRpc21pc3NpbmcpCitTdHJpbmcgV2ViRWRpdG9yQ2xpZW50Ojpk
aXNtaXNzQ29ycmVjdGlvblBhbmVsU29vbihSZWFzb25Gb3JEaXNtaXNzaW5nQWx0ZXJuYXRpdmVU
ZXh0IHJlYXNvbkZvckRpc21pc3NpbmcpCiB7CiAgICAgcmV0dXJuIG1fY29ycmVjdGlvblBhbmVs
LmRpc21pc3MocmVhc29uRm9yRGlzbWlzc2luZyk7CiB9CkluZGV4OiBTb3VyY2UvV2ViS2l0L21h
Yy9XZWJWaWV3L1dlYlZpZXcubW0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9tYWMvV2Vi
Vmlldy9XZWJWaWV3Lm1tCShyZXZpc2lvbiAxMTI5NjEpCisrKyBTb3VyY2UvV2ViS2l0L21hYy9X
ZWJWaWV3L1dlYlZpZXcubW0JKHdvcmtpbmcgY29weSkKQEAgLTU0ODgsNyArNTQ4OCw3IEBAIC0g
KHZvaWQpaGFuZGxlQ29ycmVjdGlvblBhbmVsUmVzdWx0OihOU1MKICAgICBXZWJGcmFtZSAqd2Vi
RnJhbWUgPSBbc2VsZiBfc2VsZWN0ZWRPck1haW5GcmFtZV07CiAgICAgRnJhbWUqIGNvcmVGcmFt
ZSA9IGNvcmUod2ViRnJhbWUpOwogICAgIGlmIChjb3JlRnJhbWUpCi0gICAgICAgIGNvcmVGcmFt
ZS0+ZWRpdG9yKCktPmhhbmRsZUNvcnJlY3Rpb25QYW5lbFJlc3VsdChyZXN1bHQpOworICAgICAg
ICBjb3JlRnJhbWUtPmVkaXRvcigpLT5oYW5kbGVBbHRlcm5hdGl2ZVRleHRVSVJlc3VsdChyZXN1
bHQpOwogfQogI2VuZGlmCiAK
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>135349</attachid>
            <date>2012-04-03 10:03:20 -0700</date>
            <delta_ts>2012-04-03 14:56:17 -0700</delta_ts>
            <desc>Resolved conflict with TOT.</desc>
            <filename>bug-82942-20120403100318.patch</filename>
            <type>text/plain</type>
            <size>183316</size>
            <attacher name="Jia Pu">jiapu.mail</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDExMzA0NCkKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDEwNyBAQAorMjAxMi0wNC0wMyAgSmlhIFB1
ICA8anB1QGFwcGxlLmNvbT4KKworICAgICAgICBSZW5hbWUgU3BlbGxpbmdDb3JyZWN0aW9uQ29u
dHJvbGxlciB0byBBbHRlcm5hdGl2ZVRleHRDb250cm9sbGVyLgorICAgICAgICBodHRwczovL2J1
Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9ODI5NDIKKworICAgICAgICBSZXZpZXdlZCBi
eSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBObyBuZXcgdGVzdHMsIHNpbmNlIHRoZXJlJ3Mg
bm8gY2hhbmdlIG9mIGZ1bmNhdGlvbmFsaXRpZXMuCisKKyAgICAgICAgVGhpcyBwYXRjaCByZW5h
bWVzIFNwZWxsaW5nQ29ycmVjdGlvbkNvbnRyb2xsZXIgdG8gQWx0ZXJuYXRpdmVUZXh0Q29udHJv
bGxlciwgQ29ycmVjdGlvblBhbmVsSW5mbyB0bworICAgICAgICBBbHRlcm5hdGl2ZVRleHRJbmZv
LCBDb3JyZWN0aW9uUGFuZWxJbmZvOjpDb3JyZXRpb25QYW5lbFR5cGUgdG8gQWx0ZXJuYXRpdmVU
ZXh0VHlwZSwgYW5kIFJlYXNvbkZvckRpc21pc3NpbmdDb3JyZWN0aW9uUGFuZWwKKyAgICAgICAg
dG8gUmVhc29uRm9yRGlzbWlzc2luZ0FsdGVybmF0aXZlVGV4dC4gQWxsIHRoZXNlIHJlbmFtaW5n
IHJlZmxlY3RzIHRoZSBmYWN0IHRoYXQgdGhpcyBjbGFzcyBjb250cm9scyBjaGFuZ2UKKyAgICAg
ICAgb2YgdGV4dCBjYXVzZWQgYnkgYm90aCBzcGVsbCBjaGVja2luZyBhbmQgYWx0ZXJuYXRpdmUg
ZGljdGF0aW9uIHJlc3VsdHMuIEl0IGFsc28gcmVuYW1lcyBhIGNvdXBsZSBvZiBmdW5jdGlvbnMK
KyAgICAgICAgaW4gdGhlIG9yaWdpbmFsIFNwZWxsaW5nQ29ycmVjdGlvbkNvbnRyb2xsZXIgY2xh
c3MgZm9yIHRoZSBzYW1lIHJlYXNvbi4KKworICAgICAgICBTcGVsbGluZ0NvcnJlY3Rpb25QYW5l
bDo6cmVwbGFjZW1lbnRTdHJpbmcgaGFzIGJlZW4gcmVwbGFjZWQgYnkgQWx0ZXJuYXRpdmVUZXh0
SW5mbzo6ZGV0YWlscyB3aGljaCBpcyBhbiBvYmplY3QKKyAgICAgICAgdGhhdCBjYW4gYmUgaW5z
dGFudGlhdGVkIHdpdGggZGlmZmVyZW50IHN1YmNsYXNzZXMuCisKKyAgICAgICAgKiBDTWFrZUxp
c3RzLnR4dDoKKyAgICAgICAgKiBHTlVtYWtlZmlsZS5saXN0LmFtOgorICAgICAgICAqIFRhcmdl
dC5wcmk6CisgICAgICAgICogV2ViQ29yZS5leHAuaW46CisgICAgICAgICogV2ViQ29yZS5neXBp
OgorICAgICAgICAqIFdlYkNvcmUudmNwcm9qL1dlYkNvcmUudmNwcm9qOgorICAgICAgICAqIFdl
YkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvajoKKyAgICAgICAgKiBlZGl0aW5nL0FsdGVy
bmF0aXZlVGV4dENvbnRyb2xsZXIuY3BwOiBDb3BpZWQgZnJvbSBTb3VyY2UvV2ViQ29yZS9lZGl0
aW5nL1NwZWxsaW5nQ29ycmVjdGlvbkNvbnRyb2xsZXIuY3BwLgorICAgICAgICAoQXV0b2NvcnJl
Y3Rpb25BbHRlcm5hdGl2ZURldGFpbHMpOgorICAgICAgICAoV2ViQ29yZTo6QXV0b2NvcnJlY3Rp
b25BbHRlcm5hdGl2ZURldGFpbHM6OmNyZWF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpBdXRvY29y
cmVjdGlvbkFsdGVybmF0aXZlRGV0YWlsczo6cmVwbGFjZW1lbnRTdHJpbmcpOgorICAgICAgICAo
V2ViQ29yZTo6QXV0b2NvcnJlY3Rpb25BbHRlcm5hdGl2ZURldGFpbHM6OkF1dG9jb3JyZWN0aW9u
QWx0ZXJuYXRpdmVEZXRhaWxzKToKKyAgICAgICAgKFdlYkNvcmUpOgorICAgICAgICAoV2ViQ29y
ZTo6QWx0ZXJuYXRpdmVUZXh0Q29udHJvbGxlcjo6QWx0ZXJuYXRpdmVUZXh0Q29udHJvbGxlcik6
CisgICAgICAgIChXZWJDb3JlOjpBbHRlcm5hdGl2ZVRleHRDb250cm9sbGVyOjp+QWx0ZXJuYXRp
dmVUZXh0Q29udHJvbGxlcik6CisgICAgICAgIChXZWJDb3JlOjpBbHRlcm5hdGl2ZVRleHRDb250
cm9sbGVyOjpzdGFydEFsdGVybmF0aXZlVGV4dFVJVGltZXIpOgorICAgICAgICAoV2ViQ29yZTo6
QWx0ZXJuYXRpdmVUZXh0Q29udHJvbGxlcjo6c3RvcEFsdGVybmF0aXZlVGV4dFVJVGltZXIpOgor
ICAgICAgICAoV2ViQ29yZTo6QWx0ZXJuYXRpdmVUZXh0Q29udHJvbGxlcjo6c3RvcFBlbmRpbmdD
b3JyZWN0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OkFsdGVybmF0aXZlVGV4dENvbnRyb2xsZXI6
OmFwcGx5UGVuZGluZ0NvcnJlY3Rpb24pOgorICAgICAgICAoV2ViQ29yZTo6QWx0ZXJuYXRpdmVU
ZXh0Q29udHJvbGxlcjo6aGFzUGVuZGluZ0NvcnJlY3Rpb24pOgorICAgICAgICAoV2ViQ29yZTo6
QWx0ZXJuYXRpdmVUZXh0Q29udHJvbGxlcjo6aXNTcGVsbGluZ01hcmtlckFsbG93ZWQpOgorICAg
ICAgICAoV2ViQ29yZTo6QWx0ZXJuYXRpdmVUZXh0Q29udHJvbGxlcjo6c2hvdyk6CisgICAgICAg
IChXZWJDb3JlOjpBbHRlcm5hdGl2ZVRleHRDb250cm9sbGVyOjpoYW5kbGVDYW5jZWxPcGVyYXRp
b24pOgorICAgICAgICAoV2ViQ29yZTo6QWx0ZXJuYXRpdmVUZXh0Q29udHJvbGxlcjo6ZGlzbWlz
cyk6CisgICAgICAgIChXZWJDb3JlOjpBbHRlcm5hdGl2ZVRleHRDb250cm9sbGVyOjpkaXNtaXNz
U29vbik6CisgICAgICAgIChXZWJDb3JlOjpBbHRlcm5hdGl2ZVRleHRDb250cm9sbGVyOjphcHBs
eUFsdGVybmF0aXZlVGV4dCk6CisgICAgICAgIChXZWJDb3JlOjpBbHRlcm5hdGl2ZVRleHRDb250
cm9sbGVyOjphcHBseUF1dG9jb3JyZWN0aW9uQmVmb3JlVHlwaW5nSWZBcHByb3ByaWF0ZSk6Cisg
ICAgICAgIChXZWJDb3JlOjpBbHRlcm5hdGl2ZVRleHRDb250cm9sbGVyOjpyZXNwb25kVG9VbmFw
cGxpZWRTcGVsbENvcnJlY3Rpb24pOgorICAgICAgICAoV2ViQ29yZTo6QWx0ZXJuYXRpdmVUZXh0
Q29udHJvbGxlcjo6dGltZXJGaXJlZCk6CisgICAgICAgIChXZWJDb3JlOjpBbHRlcm5hdGl2ZVRl
eHRDb250cm9sbGVyOjpoYW5kbGVBbHRlcm5hdGl2ZVRleHRVSVJlc3VsdCk6CisgICAgICAgIChX
ZWJDb3JlOjpBbHRlcm5hdGl2ZVRleHRDb250cm9sbGVyOjppc0F1dG9tYXRpY1NwZWxsaW5nQ29y
cmVjdGlvbkVuYWJsZWQpOgorICAgICAgICAoV2ViQ29yZTo6QWx0ZXJuYXRpdmVUZXh0Q29udHJv
bGxlcjo6cm9vdFZpZXdSZWN0Rm9yUmFuZ2UpOgorICAgICAgICAoV2ViQ29yZTo6QWx0ZXJuYXRp
dmVUZXh0Q29udHJvbGxlcjo6cmVzcG9uZFRvQ2hhbmdlZFNlbGVjdGlvbik6CisgICAgICAgIChX
ZWJDb3JlOjpBbHRlcm5hdGl2ZVRleHRDb250cm9sbGVyOjpyZXNwb25kVG9BcHBsaWVkRWRpdGlu
Zyk6CisgICAgICAgIChXZWJDb3JlOjpBbHRlcm5hdGl2ZVRleHRDb250cm9sbGVyOjpyZXNwb25k
VG9VbmFwcGxpZWRFZGl0aW5nKToKKyAgICAgICAgKFdlYkNvcmU6OkFsdGVybmF0aXZlVGV4dENv
bnRyb2xsZXI6OmNsaWVudCk6CisgICAgICAgIChXZWJDb3JlOjpBbHRlcm5hdGl2ZVRleHRDb250
cm9sbGVyOjp0ZXh0Q2hlY2tlcik6CisgICAgICAgIChXZWJDb3JlOjpBbHRlcm5hdGl2ZVRleHRD
b250cm9sbGVyOjpyZWNvcmRBdXRvY29ycmVjdGlvblJlc3BvbnNlUmV2ZXJzZWQpOgorICAgICAg
ICAoV2ViQ29yZTo6QWx0ZXJuYXRpdmVUZXh0Q29udHJvbGxlcjo6bWFya1JldmVyc2VkKToKKyAg
ICAgICAgKFdlYkNvcmU6OkFsdGVybmF0aXZlVGV4dENvbnRyb2xsZXI6Om1hcmtDb3JyZWN0aW9u
KToKKyAgICAgICAgKFdlYkNvcmU6OkFsdGVybmF0aXZlVGV4dENvbnRyb2xsZXI6OnJlY29yZFNw
ZWxsY2hlY2tlclJlc3BvbnNlRm9yTW9kaWZpZWRDb3JyZWN0aW9uKToKKyAgICAgICAgKFdlYkNv
cmU6OkFsdGVybmF0aXZlVGV4dENvbnRyb2xsZXI6OmRlbGV0ZWRBdXRvY29ycmVjdGlvbkF0UG9z
aXRpb24pOgorICAgICAgICAoV2ViQ29yZTo6QWx0ZXJuYXRpdmVUZXh0Q29udHJvbGxlcjo6bWFy
a1ByZWNlZGluZ1doaXRlc3BhY2VGb3JEZWxldGVkQXV0b2NvcnJlY3Rpb25BZnRlckNvbW1hbmQp
OgorICAgICAgICAoV2ViQ29yZTo6QWx0ZXJuYXRpdmVUZXh0Q29udHJvbGxlcjo6cHJvY2Vzc01h
cmtlcnNPblRleHRUb0JlUmVwbGFjZWRCeVJlc3VsdCk6CisgICAgICAgICogZWRpdGluZy9BbHRl
cm5hdGl2ZVRleHRDb250cm9sbGVyLmg6IENvcGllZCBmcm9tIFNvdXJjZS9XZWJDb3JlL2VkaXRp
bmcvU3BlbGxpbmdDb3JyZWN0aW9uQ29udHJvbGxlci5oLgorICAgICAgICAoQWx0ZXJuYXRpdmVU
ZXh0RGV0YWlscyk6CisgICAgICAgIChXZWJDb3JlOjpBbHRlcm5hdGl2ZVRleHREZXRhaWxzOjpB
bHRlcm5hdGl2ZVRleHREZXRhaWxzKToKKyAgICAgICAgKFdlYkNvcmU6OkFsdGVybmF0aXZlVGV4
dERldGFpbHM6On5BbHRlcm5hdGl2ZVRleHREZXRhaWxzKToKKyAgICAgICAgKFdlYkNvcmUpOgor
ICAgICAgICAoQWx0ZXJuYXRpdmVUZXh0SW5mbyk6CisgICAgICAgIChBbHRlcm5hdGl2ZVRleHRD
b250cm9sbGVyKToKKyAgICAgICAgKFdlYkNvcmU6OkFsdGVybmF0aXZlVGV4dENvbnRyb2xsZXI6
OnNob3VsZFJlbW92ZU1hcmtlcnNVcG9uRWRpdGluZyk6CisgICAgICAgICogZWRpdGluZy9FZGl0
aW5nQWxsSW5PbmUuY3BwOgorICAgICAgICAqIGVkaXRpbmcvRWRpdG9yLmNwcDoKKyAgICAgICAg
KFdlYkNvcmU6OkVkaXRvcjo6cmVzcG9uZFRvQ2hhbmdlZFNlbGVjdGlvbik6CisgICAgICAgIChX
ZWJDb3JlOjpFZGl0b3I6OmFwcGxpZWRFZGl0aW5nKToKKyAgICAgICAgKFdlYkNvcmU6OkVkaXRv
cjo6dW5hcHBsaWVkRWRpdGluZyk6CisgICAgICAgIChXZWJDb3JlOjpFZGl0b3I6OkVkaXRvcik6
CisgICAgICAgIChXZWJDb3JlOjpFZGl0b3I6Omluc2VydFRleHRXaXRob3V0U2VuZGluZ1RleHRF
dmVudCk6CisgICAgICAgIChXZWJDb3JlOjpFZGl0b3I6Omluc2VydExpbmVCcmVhayk6CisgICAg
ICAgIChXZWJDb3JlOjpFZGl0b3I6Omluc2VydFBhcmFncmFwaFNlcGFyYXRvcik6CisgICAgICAg
IChXZWJDb3JlOjpFZGl0b3I6OmlzQXV0b21hdGljU3BlbGxpbmdDb3JyZWN0aW9uRW5hYmxlZCk6
CisgICAgICAgIChXZWJDb3JlOjpFZGl0b3I6Om1hcmtNaXNzcGVsbGluZ3NBZnRlclR5cGluZ1Rv
V29yZCk6CisgICAgICAgIChXZWJDb3JlOjpFZGl0b3I6Om1hcmtBbGxNaXNzcGVsbGluZ3NBbmRC
YWRHcmFtbWFySW5SYW5nZXMpOgorICAgICAgICAoV2ViQ29yZTo6RWRpdG9yOjptYXJrQW5kUmVw
bGFjZUZvcik6CisgICAgICAgIChXZWJDb3JlOjpFZGl0b3I6OmNoYW5nZUJhY2tUb1JlcGxhY2Vk
U3RyaW5nKToKKyAgICAgICAgKFdlYkNvcmU6OkVkaXRvcjo6dW5hcHBsaWVkU3BlbGxDb3JyZWN0
aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OkVkaXRvcjo6dXBkYXRlTWFya2Vyc0ZvcldvcmRzQWZm
ZWN0ZWRCeUVkaXRpbmcpOgorICAgICAgICAoV2ViQ29yZTo6RWRpdG9yOjpkZWxldGVkQXV0b2Nv
cnJlY3Rpb25BdFBvc2l0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OkVkaXRvcjo6c3RhcnRBbHRl
cm5hdGl2ZVRleHRVSVRpbWVyKToKKyAgICAgICAgKFdlYkNvcmU6OkVkaXRvcjo6aGFuZGxlQWx0
ZXJuYXRpdmVUZXh0VUlSZXN1bHQpOgorICAgICAgICAoV2ViQ29yZTo6RWRpdG9yOjpkaXNtaXNz
Q29ycmVjdGlvblBhbmVsQXNJZ25vcmVkKToKKyAgICAgICAgKiBlZGl0aW5nL0VkaXRvci5oOgor
ICAgICAgICAoV2ViQ29yZSk6CisgICAgICAgIChFZGl0b3IpOgorICAgICAgICAqIGVkaXRpbmcv
U3BlbGxpbmdDb3JyZWN0aW9uQ29tbWFuZC5jcHA6CisgICAgICAgICogZWRpdGluZy9TcGVsbGlu
Z0NvcnJlY3Rpb25Db250cm9sbGVyLmNwcDogUmVtb3ZlZC4KKyAgICAgICAgKiBlZGl0aW5nL1Nw
ZWxsaW5nQ29ycmVjdGlvbkNvbnRyb2xsZXIuaDogUmVtb3ZlZC4KKyAgICAgICAgKiBlZGl0aW5n
L1R5cGluZ0NvbW1hbmQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6VHlwaW5nQ29tbWFuZDo6bWFy
a01pc3NwZWxsaW5nc0FmdGVyVHlwaW5nKToKKyAgICAgICAgKiBsb2FkZXIvRW1wdHlDbGllbnRz
Lmg6CisgICAgICAgIChXZWJDb3JlOjpFbXB0eUVkaXRvckNsaWVudDo6c2hvd0NvcnJlY3Rpb25Q
YW5lbCk6CisgICAgICAgIChXZWJDb3JlOjpFbXB0eUVkaXRvckNsaWVudDo6ZGlzbWlzc0NvcnJl
Y3Rpb25QYW5lbCk6CisgICAgICAgIChXZWJDb3JlOjpFbXB0eUVkaXRvckNsaWVudDo6ZGlzbWlz
c0NvcnJlY3Rpb25QYW5lbFNvb24pOgorICAgICAgICAqIHBhZ2UvRWRpdG9yQ2xpZW50Lmg6CisK
IDIwMTItMDQtMDMgIEFsZXhpcyBNZW5hcmQgIDxhbGV4aXMubWVuYXJkQG9wZW5ib3NzYS5vcmc+
CiAKICAgICAgICAgW1BhcnQgM10gV2Ugc2hvdWxkIHVzZSBDU1NQcm9wZXJ0eUlEIHJhdGhlciB0
aGFuIGludGVnZXJzIHdoZW4gbWFuaXB1bGF0aW5nIENTUyBwcm9wZXJ0eSBpZHMuCkluZGV4OiBT
b3VyY2UvV2ViQ29yZS9DTWFrZUxpc3RzLnR4dAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29y
ZS9DTWFrZUxpc3RzLnR4dAkocmV2aXNpb24gMTEzMDQ0KQorKysgU291cmNlL1dlYkNvcmUvQ01h
a2VMaXN0cy50eHQJKHdvcmtpbmcgY29weSkKQEAgLTY1NCw2ICs2NTQsNyBAQCBTRVQoV2ViQ29y
ZV9TT1VSQ0VTCiAKICAgICBkb20vZGVmYXVsdC9QbGF0Zm9ybU1lc3NhZ2VQb3J0Q2hhbm5lbC5j
cHAKIAorICAgIGVkaXRpbmcvQWx0ZXJuYXRpdmVUZXh0Q29udHJvbGxlci5jcHAKICAgICBlZGl0
aW5nL0FwcGVuZE5vZGVDb21tYW5kLmNwcAogICAgIGVkaXRpbmcvQXBwbHlCbG9ja0VsZW1lbnRD
b21tYW5kLmNwcAogICAgIGVkaXRpbmcvQXBwbHlTdHlsZUNvbW1hbmQuY3BwCkBAIC02OTMsNyAr
Njk0LDYgQEAgU0VUKFdlYkNvcmVfU09VUkNFUwogICAgIGVkaXRpbmcvU2V0U2VsZWN0aW9uQ29t
bWFuZC5jcHAKICAgICBlZGl0aW5nL1NtYXJ0UmVwbGFjZS5jcHAKICAgICBlZGl0aW5nL1NwZWxs
Q2hlY2tlci5jcHAKLSAgICBlZGl0aW5nL1NwZWxsaW5nQ29ycmVjdGlvbkNvbnRyb2xsZXIuY3Bw
CiAgICAgZWRpdGluZy9TcGVsbGluZ0NvcnJlY3Rpb25Db21tYW5kLmNwcAogICAgIGVkaXRpbmcv
U3BsaXRFbGVtZW50Q29tbWFuZC5jcHAKICAgICBlZGl0aW5nL1NwbGl0VGV4dE5vZGVDb21tYW5k
LmNwcApJbmRleDogU291cmNlL1dlYkNvcmUvR05VbWFrZWZpbGUubGlzdC5hbQo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvV2ViQ29yZS9HTlVtYWtlZmlsZS5saXN0LmFtCShyZXZpc2lvbiAxMTMwNDQp
CisrKyBTb3VyY2UvV2ViQ29yZS9HTlVtYWtlZmlsZS5saXN0LmFtCSh3b3JraW5nIGNvcHkpCkBA
IC0yMDAxLDYgKzIwMDEsOCBAQCB3ZWJjb3JlX3NvdXJjZXMgKz0gXAogCVNvdXJjZS9XZWJDb3Jl
L2RvbS9XaGVlbEV2ZW50LmggXAogCVNvdXJjZS9XZWJDb3JlL2RvbS9XaW5kb3dFdmVudENvbnRl
eHQuY3BwIFwKIAlTb3VyY2UvV2ViQ29yZS9kb20vV2luZG93RXZlbnRDb250ZXh0LmggXAorCVNv
dXJjZS9XZWJDb3JlL2VkaXRpbmcvQWx0ZXJuYXRpdmVUZXh0Q29udHJvbGxlci5jcHAgXAorCVNv
dXJjZS9XZWJDb3JlL2VkaXRpbmcvQWx0ZXJuYXRpdmVUZXh0Q29udHJvbGxlci5oIFwKIAlTb3Vy
Y2UvV2ViQ29yZS9lZGl0aW5nL0FwcGVuZE5vZGVDb21tYW5kLmNwcCBcCiAJU291cmNlL1dlYkNv
cmUvZWRpdGluZy9BcHBlbmROb2RlQ29tbWFuZC5oIFwKIAlTb3VyY2UvV2ViQ29yZS9lZGl0aW5n
L0FwcGx5QmxvY2tFbGVtZW50Q29tbWFuZC5jcHAgXApAQCAtMjA5MCw4ICsyMDkyLDYgQEAgd2Vi
Y29yZV9zb3VyY2VzICs9IFwKIAlTb3VyY2UvV2ViQ29yZS9lZGl0aW5nL1NtYXJ0UmVwbGFjZUlD
VS5jcHAgXAogCVNvdXJjZS9XZWJDb3JlL2VkaXRpbmcvU3BlbGxDaGVja2VyLmNwcCBcCiAJU291
cmNlL1dlYkNvcmUvZWRpdGluZy9TcGVsbENoZWNrZXIuaCBcCi0JU291cmNlL1dlYkNvcmUvZWRp
dGluZy9TcGVsbGluZ0NvcnJlY3Rpb25Db250cm9sbGVyLmNwcCBcCi0JU291cmNlL1dlYkNvcmUv
ZWRpdGluZy9TcGVsbGluZ0NvcnJlY3Rpb25Db250cm9sbGVyLmggXAogCVNvdXJjZS9XZWJDb3Jl
L2VkaXRpbmcvU3BlbGxpbmdDb3JyZWN0aW9uQ29tbWFuZC5jcHAgXAogCVNvdXJjZS9XZWJDb3Jl
L2VkaXRpbmcvU3BlbGxpbmdDb3JyZWN0aW9uQ29tbWFuZC5oIFwKIAlTb3VyY2UvV2ViQ29yZS9l
ZGl0aW5nL1NwbGl0RWxlbWVudENvbW1hbmQuY3BwIFwKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL1Rh
cmdldC5wcmkKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvVGFyZ2V0LnByaQkocmV2aXNp
b24gMTEzMDQ0KQorKysgU291cmNlL1dlYkNvcmUvVGFyZ2V0LnByaQkod29ya2luZyBjb3B5KQpA
QCAtNjI4LDYgKzYyOCw3IEBAIFNPVVJDRVMgKz0gXAogICAgIGRvbS9XaGVlbEV2ZW50LmNwcCBc
CiAgICAgZG9tL1dpbmRvd0V2ZW50Q29udGV4dC5jcHAgXAogICAgIGRvbS9kZWZhdWx0L1BsYXRm
b3JtTWVzc2FnZVBvcnRDaGFubmVsLmNwcCBcCisgICAgZWRpdGluZy9BbHRlcm5hdGl2ZVRleHRD
b250cm9sbGVyLmNwcCBcCiAgICAgZWRpdGluZy9BcHBlbmROb2RlQ29tbWFuZC5jcHAgXAogICAg
IGVkaXRpbmcvQXBwbHlCbG9ja0VsZW1lbnRDb21tYW5kLmNwcCBcCiAgICAgZWRpdGluZy9BcHBs
eVN0eWxlQ29tbWFuZC5jcHAgXApAQCAtNjY5LDcgKzY3MCw2IEBAIFNPVVJDRVMgKz0gXAogICAg
IGVkaXRpbmcvU2V0U2VsZWN0aW9uQ29tbWFuZC5jcHAgXAogICAgIGVkaXRpbmcvU3BlbGxDaGVj
a2VyLmNwcCBcCiAgICAgZWRpdGluZy9TcGVsbGluZ0NvcnJlY3Rpb25Db21tYW5kLmNwcCBcCi0g
ICAgZWRpdGluZy9TcGVsbGluZ0NvcnJlY3Rpb25Db250cm9sbGVyLmNwcCBcCiAgICAgZWRpdGlu
Zy9TcGxpdEVsZW1lbnRDb21tYW5kLmNwcCBcCiAgICAgZWRpdGluZy9TcGxpdFRleHROb2RlQ29t
bWFuZC5jcHAgXAogICAgIGVkaXRpbmcvU3BsaXRUZXh0Tm9kZUNvbnRhaW5pbmdFbGVtZW50Q29t
bWFuZC5jcHAgXApAQCAtMTc2MCw2ICsxNzYwLDcgQEAgSEVBREVSUyArPSBcCiAgICAgZG9tL1dl
YktpdE5hbWVkRmxvdy5oIFwKICAgICBkb20vV2ViS2l0VHJhbnNpdGlvbkV2ZW50LmggXAogICAg
IGRvbS9XaGVlbEV2ZW50LmggXAorICAgIGVkaXRpbmcvQWx0ZXJuYXRpdmVUZXh0Q29udHJvbGxl
ci5oIFwKICAgICBlZGl0aW5nL0FwcGVuZE5vZGVDb21tYW5kLmggXAogICAgIGVkaXRpbmcvQXBw
bHlCbG9ja0VsZW1lbnRDb21tYW5kLmggXAogICAgIGVkaXRpbmcvQXBwbHlTdHlsZUNvbW1hbmQu
aCBcCkBAIC0xODAxLDcgKzE4MDIsNiBAQCBIRUFERVJTICs9IFwKICAgICBlZGl0aW5nL1NldE5v
ZGVBdHRyaWJ1dGVDb21tYW5kLmggXAogICAgIGVkaXRpbmcvU21hcnRSZXBsYWNlLmggXAogICAg
IGVkaXRpbmcvU3BlbGxpbmdDb3JyZWN0aW9uQ29tbWFuZC5oIFwKLSAgICBlZGl0aW5nL1NwZWxs
aW5nQ29ycmVjdGlvbkNvbnRyb2xsZXIuaCBcCiAgICAgZWRpdGluZy9TcGxpdEVsZW1lbnRDb21t
YW5kLmggXAogICAgIGVkaXRpbmcvU3BsaXRUZXh0Tm9kZUNvbW1hbmQuaCBcCiAgICAgZWRpdGlu
Zy9TcGxpdFRleHROb2RlQ29udGFpbmluZ0VsZW1lbnRDb21tYW5kLmggXApJbmRleDogU291cmNl
L1dlYkNvcmUvV2ViQ29yZS5leHAuaW4KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvV2Vi
Q29yZS5leHAuaW4JKHJldmlzaW9uIDExMzA0NCkKKysrIFNvdXJjZS9XZWJDb3JlL1dlYkNvcmUu
ZXhwLmluCSh3b3JraW5nIGNvcHkpCkBAIC04ODcsMTEgKzg4NywxMSBAQCBfX1pON1dlYkNvcmU2
RWRpdG9yMjRyZXBsYWNlU2VsZWN0aW9uV2l0CiBfX1pON1dlYkNvcmU2RWRpdG9yMjZkZWNyZWFz
ZVNlbGVjdGlvbkxpc3RMZXZlbEV2CiBfX1pON1dlYkNvcmU2RWRpdG9yMjZpbmNyZWFzZVNlbGVj
dGlvbkxpc3RMZXZlbEV2CiBfX1pON1dlYkNvcmU2RWRpdG9yMjZ3cml0ZVNlbGVjdGlvblRvUGFz
dGVib2FyZEVSS04zV1RGNlN0cmluZ0VSS05TMV82VmVjdG9ySVMyX0xtMEVFRQotX19aTjdXZWJD
b3JlNkVkaXRvcjI3aGFuZGxlQ29ycmVjdGlvblBhbmVsUmVzdWx0RVJLTjNXVEY2U3RyaW5nRQog
X19aTjdXZWJDb3JlNkVkaXRvcjI3cmVhZFNlbGVjdGlvbkZyb21QYXN0ZWJvYXJkRVJLTjNXVEY2
U3RyaW5nRQogX19aTjdXZWJDb3JlNkVkaXRvcjI4cmVwbGFjZVNlbGVjdGlvbldpdGhGcmFnbWVu
dEVOM1dURjEwUGFzc1JlZlB0cklOU18xNkRvY3VtZW50RnJhZ21lbnRFRUViYmIKIF9fWk43V2Vi
Q29yZTZFZGl0b3IyOWNhbkRlY3JlYXNlU2VsZWN0aW9uTGlzdExldmVsRXYKIF9fWk43V2ViQ29y
ZTZFZGl0b3IyOWNhbkluY3JlYXNlU2VsZWN0aW9uTGlzdExldmVsRXYKK19fWk43V2ViQ29yZTZF
ZGl0b3IyOWhhbmRsZUFsdGVybmF0aXZlVGV4dFVJUmVzdWx0RVJLTjNXVEY2U3RyaW5nRQogX19a
TjdXZWJDb3JlNkVkaXRvcjMwZGVsZXRlU2VsZWN0aW9uV2l0aFNtYXJ0RGVsZXRlRWIKIF9fWk43
V2ViQ29yZTZFZGl0b3IzMHBhc3RlQXNQbGFpblRleHRCeXBhc3NpbmdESFRNTEV2CiBfX1pON1dl
YkNvcmU2RWRpdG9yMzJndWVzc2VzRm9yVW5ncmFtbWF0aWNhbFNlbGVjdGlvbkV2CkluZGV4OiBT
b3VyY2UvV2ViQ29yZS9XZWJDb3JlLmd5cGkKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUv
V2ViQ29yZS5neXBpCShyZXZpc2lvbiAxMTMwNDQpCisrKyBTb3VyY2UvV2ViQ29yZS9XZWJDb3Jl
Lmd5cGkJKHdvcmtpbmcgY29weSkKQEAgLTI1MDQsNiArMjUwNCw4IEBACiAgICAgICAgICAgICAn
Y3NzL1dlYktpdENTU1NoYWRlclZhbHVlLmNwcCcsCiAgICAgICAgICAgICAnY3NzL1dlYktpdENT
U1NoYWRlclZhbHVlLmgnLAogICAgICAgICAgICAgJ2Nzcy9XZWJLaXRDU1NUcmFuc2Zvcm1WYWx1
ZS5jcHAnLAorICAgICAgICAgICAgJ2VkaXRpbmcvQWx0ZXJuYXRpdmVUZXh0Q29udHJvbGxlci5j
cHAnLAorICAgICAgICAgICAgJ2VkaXRpbmcvQWx0ZXJuYXRpdmVUZXh0Q29udHJvbGxlci5oJywK
ICAgICAgICAgICAgICdlZGl0aW5nL0FwcGVuZE5vZGVDb21tYW5kLmNwcCcsCiAgICAgICAgICAg
ICAnZWRpdGluZy9BcHBlbmROb2RlQ29tbWFuZC5oJywKICAgICAgICAgICAgICdlZGl0aW5nL0Fw
cGx5QmxvY2tFbGVtZW50Q29tbWFuZC5jcHAnLApAQCAtMjU3Myw4ICsyNTc1LDYgQEAKICAgICAg
ICAgICAgICdlZGl0aW5nL1NtYXJ0UmVwbGFjZUlDVS5jcHAnLAogICAgICAgICAgICAgJ2VkaXRp
bmcvU3BlbGxDaGVja2VyLmNwcCcsCiAgICAgICAgICAgICAnZWRpdGluZy9TcGVsbENoZWNrZXIu
aCcsCi0gICAgICAgICAgICAnZWRpdGluZy9TcGVsbGluZ0NvcnJlY3Rpb25Db250cm9sbGVyLmNw
cCcsCi0gICAgICAgICAgICAnZWRpdGluZy9TcGVsbGluZ0NvcnJlY3Rpb25Db250cm9sbGVyLmgn
LAogICAgICAgICAgICAgJ2VkaXRpbmcvU3BlbGxpbmdDb3JyZWN0aW9uQ29tbWFuZC5jcHAnLAog
ICAgICAgICAgICAgJ2VkaXRpbmcvU3BlbGxpbmdDb3JyZWN0aW9uQ29tbWFuZC5oJywKICAgICAg
ICAgICAgICdlZGl0aW5nL1NwbGl0RWxlbWVudENvbW1hbmQuY3BwJywKSW5kZXg6IFNvdXJjZS9X
ZWJDb3JlL1dlYkNvcmUudmNwcm9qL1dlYkNvcmUudmNwcm9qCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9XZWJDb3JlL1dlYkNvcmUudmNwcm9qL1dlYkNvcmUudmNwcm9qCShyZXZpc2lvbiAxMTMwNDQp
CisrKyBTb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnZjcHJvai9XZWJDb3JlLnZjcHJvagkod29ya2lu
ZyBjb3B5KQpAQCAtNTQwODYsNiArNTQwODYsNjIgQEAKIAkJCQk+CiAJCQk8L0ZpbGU+CiAJCTwv
RmlsdGVyPgorCQk8RmlsZQorCQkJCVJlbGF0aXZlUGF0aD0iLi5cZWRpdGluZ1xBbHRlcm5hdGl2
ZVRleHRDb250cm9sbGVyLmNwcCIKKwkJCQk+CisJCQkJPEZpbGVDb25maWd1cmF0aW9uCisJCQkJ
CU5hbWU9IkRlYnVnfFdpbjMyIgorCQkJCQlFeGNsdWRlZEZyb21CdWlsZD0idHJ1ZSIKKwkJCQkJ
PgorCQkJCQk8VG9vbAorCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCIKKwkJCQkJLz4KKwkJ
CQk8L0ZpbGVDb25maWd1cmF0aW9uPgorCQkJCTxGaWxlQ29uZmlndXJhdGlvbgorCQkJCQlOYW1l
PSJSZWxlYXNlfFdpbjMyIgorCQkJCQlFeGNsdWRlZEZyb21CdWlsZD0idHJ1ZSIKKwkJCQkJPgor
CQkJCQk8VG9vbAorCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCIKKwkJCQkJLz4KKwkJCQk8
L0ZpbGVDb25maWd1cmF0aW9uPgorCQkJCTxGaWxlQ29uZmlndXJhdGlvbgorCQkJCQlOYW1lPSJE
ZWJ1Z19DYWlyb19DRkxpdGV8V2luMzIiCisJCQkJCUV4Y2x1ZGVkRnJvbUJ1aWxkPSJ0cnVlIgor
CQkJCQk+CisJCQkJCTxUb29sCisJCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIgorCQkJCQkv
PgorCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+CisJCQkJPEZpbGVDb25maWd1cmF0aW9uCisJCQkJ
CU5hbWU9IlJlbGVhc2VfQ2Fpcm9fQ0ZMaXRlfFdpbjMyIgorCQkJCQlFeGNsdWRlZEZyb21CdWls
ZD0idHJ1ZSIKKwkJCQkJPgorCQkJCQk8VG9vbAorCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9v
bCIKKwkJCQkJLz4KKwkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPgorCQkJCTxGaWxlQ29uZmlndXJh
dGlvbgorCQkJCQlOYW1lPSJEZWJ1Z19BbGx8V2luMzIiCisJCQkJCUV4Y2x1ZGVkRnJvbUJ1aWxk
PSJ0cnVlIgorCQkJCQk+CisJCQkJCTxUb29sCisJCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29s
IgorCQkJCQkvPgorCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+CisJCQkJPEZpbGVDb25maWd1cmF0
aW9uCisJCQkJCU5hbWU9IlJlbGVhc2VfTFRDR3xXaW4zMiIKKwkJCQkJRXhjbHVkZWRGcm9tQnVp
bGQ9InRydWUiCisJCQkJCT4KKwkJCQkJPFRvb2wKKwkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRv
b2wiCisJCQkJCS8+CisJCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4KKwkJCTwvRmlsZT4KKwkJCTxG
aWxlCisJCQkJUmVsYXRpdmVQYXRoPSIuLlxlZGl0aW5nXEFsdGVybmF0aXZlVGV4dENvbnRyb2xs
ZXIuaCIKKwkJCQk+CisJCQk8L0ZpbGU+CiAJCTxGaWx0ZXIKIAkJCU5hbWU9ImVkaXRpbmciCiAJ
CQk+CkBAIC01NjQ2Niw2MiArNTY1MjIsNiBAQAogCQkJCT4KIAkJCTwvRmlsZT4KIAkJCTxGaWxl
Ci0JCQkJUmVsYXRpdmVQYXRoPSIuLlxlZGl0aW5nXFNwZWxsaW5nQ29ycmVjdGlvbkNvbnRyb2xs
ZXIuY3BwIgotCQkJCT4KLQkJCQk8RmlsZUNvbmZpZ3VyYXRpb24KLQkJCQkJTmFtZT0iRGVidWd8
V2luMzIiCi0JCQkJCUV4Y2x1ZGVkRnJvbUJ1aWxkPSJ0cnVlIgotCQkJCQk+Ci0JCQkJCTxUb29s
Ci0JCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIgotCQkJCQkvPgotCQkJCTwvRmlsZUNvbmZp
Z3VyYXRpb24+Ci0JCQkJPEZpbGVDb25maWd1cmF0aW9uCi0JCQkJCU5hbWU9IlJlbGVhc2V8V2lu
MzIiCi0JCQkJCUV4Y2x1ZGVkRnJvbUJ1aWxkPSJ0cnVlIgotCQkJCQk+Ci0JCQkJCTxUb29sCi0J
CQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIgotCQkJCQkvPgotCQkJCTwvRmlsZUNvbmZpZ3Vy
YXRpb24+Ci0JCQkJPEZpbGVDb25maWd1cmF0aW9uCi0JCQkJCU5hbWU9IkRlYnVnX0NhaXJvX0NG
TGl0ZXxXaW4zMiIKLQkJCQkJRXhjbHVkZWRGcm9tQnVpbGQ9InRydWUiCi0JCQkJCT4KLQkJCQkJ
PFRvb2wKLQkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiCi0JCQkJCS8+Ci0JCQkJPC9GaWxl
Q29uZmlndXJhdGlvbj4KLQkJCQk8RmlsZUNvbmZpZ3VyYXRpb24KLQkJCQkJTmFtZT0iUmVsZWFz
ZV9DYWlyb19DRkxpdGV8V2luMzIiCi0JCQkJCUV4Y2x1ZGVkRnJvbUJ1aWxkPSJ0cnVlIgotCQkJ
CQk+Ci0JCQkJCTxUb29sCi0JCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIgotCQkJCQkvPgot
CQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+Ci0JCQkJPEZpbGVDb25maWd1cmF0aW9uCi0JCQkJCU5h
bWU9IkRlYnVnX0FsbHxXaW4zMiIKLQkJCQkJRXhjbHVkZWRGcm9tQnVpbGQ9InRydWUiCi0JCQkJ
CT4KLQkJCQkJPFRvb2wKLQkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiCi0JCQkJCS8+Ci0J
CQkJPC9GaWxlQ29uZmlndXJhdGlvbj4KLQkJCQk8RmlsZUNvbmZpZ3VyYXRpb24KLQkJCQkJTmFt
ZT0iUmVsZWFzZV9MVENHfFdpbjMyIgotCQkJCQlFeGNsdWRlZEZyb21CdWlsZD0idHJ1ZSIKLQkJ
CQkJPgotCQkJCQk8VG9vbAotCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCIKLQkJCQkJLz4K
LQkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPgotCQkJPC9GaWxlPgotCQkJPEZpbGUKLQkJCQlSZWxh
dGl2ZVBhdGg9Ii4uXGVkaXRpbmdcU3BlbGxpbmdDb3JyZWN0aW9uQ29udHJvbGxlci5oIgotCQkJ
CT4KLQkJCTwvRmlsZT4KLQkJCTxGaWxlCiAJCQkJUmVsYXRpdmVQYXRoPSIuLlxlZGl0aW5nXFNw
bGl0RWxlbWVudENvbW1hbmQuY3BwIgogCQkJCT4KIAkJCQk8RmlsZUNvbmZpZ3VyYXRpb24KSW5k
ZXg6IFNvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvago9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHBy
b2oJKHJldmlzaW9uIDExMzA0NCkKKysrIFNvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9q
L3Byb2plY3QucGJ4cHJvagkod29ya2luZyBjb3B5KQpAQCAtMzcwNCw4ICszNzA0LDYgQEAKIAkJ
QTYyMkE4RkYxMjJDNDRBNjAwQTc4NUIzIC8qIEdlbmVyaWNCaW5kaW5nLmggaW4gSGVhZGVycyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBBNjIyQThGOTEyMkM0NEE2MDBBNzg1
QjMgLyogR2VuZXJpY0JpbmRpbmcuaCAqLzsgfTsKIAkJQTZEMTY5NjIxMzQ2QjQ5QjAwMEVCNzcw
IC8qIFNoYWRvd1Jvb3QuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gQTZEMTY5NjExMzQ2QjQ5QjAwMEVCNzcwIC8qIFNoYWRvd1Jvb3QuY3BwICovOyB9
OwogCQlBNkQxNjk2NDEzNDZCNEMxMDAwRUI3NzAgLyogU2hhZG93Um9vdC5oIGluIEhlYWRlcnMg
Ki8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQTZEMTY5NjMxMzQ2QjRDMTAwMEVC
NzcwIC8qIFNoYWRvd1Jvb3QuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRl
LCApOyB9OyB9OwotCQlBNzAwNUNDQzEzMzBDNEJBMDAwQ0MwQkEgLyogU3BlbGxpbmdDb3JyZWN0
aW9uQ29udHJvbGxlci5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSBBNzAwNUNDQTEzMzBDNEJBMDAwQ0MwQkEgLyogU3BlbGxpbmdDb3JyZWN0aW9uQ29u
dHJvbGxlci5jcHAgKi87IH07Ci0JCUE3MDA1Q0NEMTMzMEM0QkEwMDBDQzBCQSAvKiBTcGVsbGlu
Z0NvcnJlY3Rpb25Db250cm9sbGVyLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSBBNzAwNUNDQjEzMzBDNEJBMDAwQ0MwQkEgLyogU3BlbGxpbmdDb3JyZWN0
aW9uQ29udHJvbGxlci5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7
IH07IH07CiAJCUE3MTUxQkQ4MTJGMTU1OEYwMDVBMEY2NCAvKiBUZXh0Q2hlY2tlckNsaWVudC5o
IGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQTcxNTFCRDcx
MkYxNTU4RjAwNUEwRjY0IC8qIFRleHRDaGVja2VyQ2xpZW50LmggKi87IHNldHRpbmdzID0ge0FU
VFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJQTcxNUU2NTIxMzRCQkJFQzAwRDhFNzEz
IC8qIFByb2dyZXNzU2hhZG93RWxlbWVudC5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSBBNzE1RTY1MDEzNEJCQkVDMDBEOEU3MTMgLyogUHJvZ3Jlc3NT
aGFkb3dFbGVtZW50LmNwcCAqLzsgfTsKIAkJQTcxNUU2NTMxMzRCQkJFQzAwRDhFNzEzIC8qIFBy
b2dyZXNzU2hhZG93RWxlbWVudC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gQTcxNUU2NTExMzRCQkJFQzAwRDhFNzEzIC8qIFByb2dyZXNzU2hhZG93RWxl
bWVudC5oICovOyB9OwpAQCAtNTczMiw2ICs1NzMwLDggQEAKIAkJQ0UwMkYwQzQxMUU4M0FERDAw
QzY2ODRBIC8qIFNjcmlwdENvbnRyb2xsZXJCYXNlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBDRTAyRjBDMzExRTgzQUREMDBDNjY4NEEgLyogU2NyaXB0
Q29udHJvbGxlckJhc2UuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCAp
OyB9OyB9OwogCQlDRTA1N0ZBNTEyMjA3MzExMDBBNDc2RDUgLyogRG9jdW1lbnRNYXJrZXJDb250
cm9sbGVyLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9
IENFMDU3RkEzMTIyMDczMTEwMEE0NzZENSAvKiBEb2N1bWVudE1hcmtlckNvbnRyb2xsZXIuY3Bw
ICovOyB9OwogCQlDRTA1N0ZBNjEyMjA3MzExMDBBNDc2RDUgLyogRG9jdW1lbnRNYXJrZXJDb250
cm9sbGVyLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBD
RTA1N0ZBNDEyMjA3MzExMDBBNDc2RDUgLyogRG9jdW1lbnRNYXJrZXJDb250cm9sbGVyLmggKi87
IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKKwkJQ0UwOEMzRDEx
NTJCNTk5QTAwMjFCOEMyIC8qIEFsdGVybmF0aXZlVGV4dENvbnRyb2xsZXIuY3BwIGluIFNvdXJj
ZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQ0UwOEMzQ0YxNTJCNTk5QTAw
MjFCOEMyIC8qIEFsdGVybmF0aXZlVGV4dENvbnRyb2xsZXIuY3BwICovOyB9OworCQlDRTA4QzNE
MjE1MkI1OTlBMDAyMUI4QzIgLyogQWx0ZXJuYXRpdmVUZXh0Q29udHJvbGxlci5oIGluIEhlYWRl
cnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQ0UwOEMzRDAxNTJCNTk5QTAw
MjFCOEMyIC8qIEFsdGVybmF0aXZlVGV4dENvbnRyb2xsZXIuaCAqLzsgc2V0dGluZ3MgPSB7QVRU
UklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQlDRTU0RkQzODEwMTZEOUE2MDA4QjQ0Qzgg
LyogU2NyaXB0U291cmNlUHJvdmlkZXIuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IENFNTRGRDM3MTAxNkQ5QTYwMDhCNDRDOCAvKiBTY3JpcHRTb3VyY2VQ
cm92aWRlci5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07
CiAJCUNFQTM5NDlDMTFENDVDREEwMDMwOTRDRiAvKiBTdGF0aWNIYXNoU2V0Tm9kZUxpc3QuY3Bw
IGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQ0VBMzk0OUEx
MUQ0NUNEQTAwMzA5NENGIC8qIFN0YXRpY0hhc2hTZXROb2RlTGlzdC5jcHAgKi87IH07CiAJCUNF
QTM5NDlEMTFENDVDREEwMDMwOTRDRiAvKiBTdGF0aWNIYXNoU2V0Tm9kZUxpc3QuaCBpbiBIZWFk
ZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IENFQTM5NDlCMTFENDVDREEw
MDMwOTRDRiAvKiBTdGF0aWNIYXNoU2V0Tm9kZUxpc3QuaCAqLzsgfTsKQEAgLTEwNzE1LDggKzEw
NzE1LDYgQEAKIAkJQTYyMkE4RjkxMjJDNDRBNjAwQTc4NUIzIC8qIEdlbmVyaWNCaW5kaW5nLmgg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IEdlbmVyaWNCaW5kaW5nLmg7IHBhdGgg
PSBnZW5lcmljL0dlbmVyaWNCaW5kaW5nLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJ
CUE2RDE2OTYxMTM0NkI0OUIwMDBFQjc3MCAvKiBTaGFkb3dSb290LmNwcCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFNoYWRvd1Jvb3QuY3BwOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OwogCQlBNkQxNjk2MzEzNDZCNEMxMDAwRUI3NzAgLyogU2hhZG93Um9vdC5oICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBTaGFkb3dSb290Lmg7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07Ci0JCUE3MDA1Q0NBMTMzMEM0QkEwMDBDQzBCQSAvKiBTcGVsbGluZ0Nv
cnJlY3Rpb25Db250cm9sbGVyLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0
aCA9IFNwZWxsaW5nQ29ycmVjdGlvbkNvbnRyb2xsZXIuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OwotCQlBNzAwNUNDQjEzMzBDNEJBMDAwQ0MwQkEgLyogU3BlbGxpbmdDb3JyZWN0aW9u
Q29udHJvbGxlci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9
IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBTcGVsbGluZ0Nv
cnJlY3Rpb25Db250cm9sbGVyLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUE3MTUx
QkQ3MTJGMTU1OEYwMDVBMEY2NCAvKiBUZXh0Q2hlY2tlckNsaWVudC5oICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jLmg7IHBhdGggPSBUZXh0Q2hlY2tlckNsaWVudC5oOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OwogCQlBNzE1RTY1MDEzNEJCQkVDMDBEOEU3MTMgLyogUHJvZ3Jlc3NTaGFkb3dF
bGVtZW50LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFByb2dyZXNz
U2hhZG93RWxlbWVudC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUE3MTVFNjUx
MTM0QkJCRUMwMEQ4RTcxMyAvKiBQcm9ncmVzc1NoYWRvd0VsZW1lbnQuaCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuYy5oOyBwYXRoID0gUHJvZ3Jlc3NTaGFkb3dFbGVtZW50Lmg7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CkBAIC0xMjgzMSw2ICsxMjgyOSw4IEBACiAJCUNFMDJGMEMzMTFFODNB
REQwMEM2Njg0QSAvKiBTY3JpcHRDb250cm9sbGVyQmFzZS5oICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jLmg7IHBhdGggPSBTY3JpcHRDb250cm9sbGVyQmFzZS5oOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OwogCQlDRTA1N0ZBMzEyMjA3MzExMDBBNDc2RDUgLyogRG9jdW1lbnRNYXJrZXJDb250
cm9sbGVyLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IERvY3VtZW50
TWFya2VyQ29udHJvbGxlci5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUNFMDU3
RkE0MTIyMDczMTEwMEE0NzZENSAvKiBEb2N1bWVudE1hcmtlckNvbnRyb2xsZXIuaCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gRG9jdW1lbnRNYXJrZXJDb250cm9sbGVyLmg7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUNFMDhDM0NGMTUyQjU5OUEwMDIxQjhDMiAvKiBB
bHRlcm5hdGl2ZVRleHRDb250cm9sbGVyLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNw
cDsgcGF0aCA9IEFsdGVybmF0aXZlVGV4dENvbnRyb2xsZXIuY3BwOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OworCQlDRTA4QzNEMDE1MkI1OTlBMDAyMUI4QzIgLyogQWx0ZXJuYXRpdmVUZXh0
Q29udHJvbGxlci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9
IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBBbHRlcm5hdGl2
ZVRleHRDb250cm9sbGVyLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUNFNTRGRDM3
MTAxNkQ5QTYwMDhCNDRDOCAvKiBTY3JpcHRTb3VyY2VQcm92aWRlci5oICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jLmg7IHBhdGggPSBTY3JpcHRTb3VyY2VQcm92aWRlci5oOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OwogCQlDRTVDQjFCMzE0RURBQjZGMDBCQjI3OTUgLyogRXZlbnRTZW5kZXIu
aCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gRXZlbnRTZW5kZXIuaDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQ0VBMzk0OUExMUQ0NUNEQTAwMzA5NENGIC8qIFN0YXRp
Y0hhc2hTZXROb2RlTGlzdC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVu
Y29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGgg
PSBTdGF0aWNIYXNoU2V0Tm9kZUxpc3QuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpA
QCAtMTY2MDMsNiArMTY2MDMsOCBAQAogCQkJaXNhID0gUEJYR3JvdXA7CiAJCQljaGlsZHJlbiA9
ICgKIAkJCQlFRDUwMURDOTBCMjQ5RjM5MDBBRTE4RDkgLyogbWFjICovLAorCQkJCUNFMDhDM0NG
MTUyQjU5OUEwMDIxQjhDMiAvKiBBbHRlcm5hdGl2ZVRleHRDb250cm9sbGVyLmNwcCAqLywKKwkJ
CQlDRTA4QzNEMDE1MkI1OTlBMDAyMUI4QzIgLyogQWx0ZXJuYXRpdmVUZXh0Q29udHJvbGxlci5o
ICovLAogCQkJCTkzMzA5RDg3MDk5RTY0OTEwMDU2RTU4MSAvKiBBcHBlbmROb2RlQ29tbWFuZC5j
cHAgKi8sCiAJCQkJOTMzMDlEODgwOTlFNjQ5MTAwNTZFNTgxIC8qIEFwcGVuZE5vZGVDb21tYW5k
LmggKi8sCiAJCQkJOUI0MTcwNjMxMjU2NjJCMzAwNkIyOEZDIC8qIEFwcGx5QmxvY2tFbGVtZW50
Q29tbWFuZC5jcHAgKi8sCkBAIC0xNjY5NCw4ICsxNjY5Niw2IEBACiAJCQkJQTc4RkUxM0ExMjM2
NkIxMDAwQUNFOEQwIC8qIFNwZWxsQ2hlY2tlci5oICovLAogCQkJCUI4REJEQjQ5MTMwQjBGOEEw
MEY1Q0RCMSAvKiBTcGVsbGluZ0NvcnJlY3Rpb25Db21tYW5kLmNwcCAqLywKIAkJCQlCOERCREI0
QTEzMEIwRjhBMDBGNUNEQjEgLyogU3BlbGxpbmdDb3JyZWN0aW9uQ29tbWFuZC5oICovLAotCQkJ
CUE3MDA1Q0NBMTMzMEM0QkEwMDBDQzBCQSAvKiBTcGVsbGluZ0NvcnJlY3Rpb25Db250cm9sbGVy
LmNwcCAqLywKLQkJCQlBNzAwNUNDQjEzMzBDNEJBMDAwQ0MwQkEgLyogU3BlbGxpbmdDb3JyZWN0
aW9uQ29udHJvbGxlci5oICovLAogCQkJCTkzMzA5REMyMDk5RTY0OTEwMDU2RTU4MSAvKiBTcGxp
dEVsZW1lbnRDb21tYW5kLmNwcCAqLywKIAkJCQk5MzMwOURDMzA5OUU2NDkxMDA1NkU1ODEgLyog
U3BsaXRFbGVtZW50Q29tbWFuZC5oICovLAogCQkJCTkzMzA5REM0MDk5RTY0OTEwMDU2RTU4MSAv
KiBTcGxpdFRleHROb2RlQ29tbWFuZC5jcHAgKi8sCkBAIC0yNDExOCw3ICsyNDExOCw2IEBACiAJ
CQkJNzU0MTVCMDAxMjk1OEQ1RTAwM0FENjY5IC8qIFNwZWVjaElucHV0UmVzdWx0TGlzdC5oIGlu
IEhlYWRlcnMgKi8sCiAJCQkJQTc4RkUxM0MxMjM2NkIxMDAwQUNFOEQwIC8qIFNwZWxsQ2hlY2tl
ci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQjhEQkRCNEUxMzBCMEY4QTAwRjVDREIxIC8qIFNwZWxs
aW5nQ29ycmVjdGlvbkNvbW1hbmQuaCBpbiBIZWFkZXJzICovLAotCQkJCUE3MDA1Q0NEMTMzMEM0
QkEwMDBDQzBCQSAvKiBTcGVsbGluZ0NvcnJlY3Rpb25Db250cm9sbGVyLmggaW4gSGVhZGVycyAq
LywKIAkJCQk5MzMwOUUxMjA5OUU2NDkyMDA1NkU1ODEgLyogU3BsaXRFbGVtZW50Q29tbWFuZC5o
IGluIEhlYWRlcnMgKi8sCiAJCQkJOTMzMDlFMTQwOTlFNjQ5MjAwNTZFNTgxIC8qIFNwbGl0VGV4
dE5vZGVDb21tYW5kLmggaW4gSGVhZGVycyAqLywKIAkJCQk5MzMwOUUxNjA5OUU2NDkyMDA1NkU1
ODEgLyogU3BsaXRUZXh0Tm9kZUNvbnRhaW5pbmdFbGVtZW50Q29tbWFuZC5oIGluIEhlYWRlcnMg
Ki8sCkBAIC0yNDcwNiwxMyArMjQ3MDUsMTQgQEAKIAkJCQk5M0YxOTlFRDA4MjQ1RTU5MDAxRTlB
QkMgLyogWFNMVFByb2Nlc3Nvci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJRTFCRTUxMkUwQ0Y2QzUx
MjAwMkVBOTU5IC8qIFhTTFRVbmljb2RlU29ydC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJOTc3RTJF
MEYxMkYwRkM5QzAwQzEzMzc5IC8qIFhTU0F1ZGl0b3IuaCBpbiBIZWFkZXJzICovLAotICAgICAg
ICAgICAgICAgIEZENTgxRkFGMTUyMEY5MUYwMDNBN0E3NSAvKiBPc2NpbGxhdG9yLmggaW4gSGVh
ZGVycyAqLywKLSAgICAgICAgICAgICAgICBGRDU4MUZCNTE1MjBGOTNCMDAzQTdBNzUgLyogV2F2
ZVRhYmxlLmggaW4gSGVhZGVycyAqLywKLSAgICAgICAgICAgICAgICBGREVBNjI0MzE1MjEwMkUy
MDA0NzlERjAgLyogSlNPc2NpbGxhdG9yLmggaW4gSGVhZGVycyAqLywKLSAgICAgICAgICAgICAg
ICBGREVBNjI0NzE1MjEwMkZDMDA0NzlERjAgLyogSlNXYXZlVGFibGUuaCBpbiBIZWFkZXJzICov
LAorCQkJCUZENTgxRkFGMTUyMEY5MUYwMDNBN0E3NSAvKiBPc2NpbGxhdG9yLmggaW4gSGVhZGVy
cyAqLywKKwkJCQlGRDU4MUZCNTE1MjBGOTNCMDAzQTdBNzUgLyogV2F2ZVRhYmxlLmggaW4gSGVh
ZGVycyAqLywKKwkJCQlGREVBNjI0MzE1MjEwMkUyMDA0NzlERjAgLyogSlNPc2NpbGxhdG9yLmgg
aW4gSGVhZGVycyAqLywKKwkJCQlGREVBNjI0NzE1MjEwMkZDMDA0NzlERjAgLyogSlNXYXZlVGFi
bGUuaCBpbiBIZWFkZXJzICovLAogCQkJCUZENTM3MzUzMTM3QjY1MTgwMDAwOERDRSAvKiBaZXJv
UG9sZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMUEzNTg2RTAxNTI2NEM0NTAwMjJBNjU5IC8qIFJl
bmRlck11bHRpQ29sdW1uRmxvd1RocmVhZC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJRTFCMjUxMDcx
NTJBMEJCMDAwNjlCNzc5IC8qIFN0eWxlUHJvcGVydHlTaG9ydGhhbmQuaCBpbiBIZWFkZXJzICov
LAorCQkJCUNFMDhDM0QyMTUyQjU5OUEwMDIxQjhDMiAvKiBBbHRlcm5hdGl2ZVRleHRDb250cm9s
bGVyLmggaW4gSGVhZGVycyAqLywKIAkJCSk7CiAJCQlydW5Pbmx5Rm9yRGVwbG95bWVudFBvc3Rw
cm9jZXNzaW5nID0gMDsKIAkJfTsKQEAgLTI3MjM2LDcgKzI3MjM2LDYgQEAKIAkJCQk3NTQxNUMy
OTEyOUE5OTIwMDAzQUQ2NjkgLyogU3BlZWNoSW5wdXRSZXN1bHRMaXN0LmNwcCBpbiBTb3VyY2Vz
ICovLAogCQkJCUE3OEZFMTNCMTIzNjZCMTAwMEFDRThEMCAvKiBTcGVsbENoZWNrZXIuY3BwIGlu
IFNvdXJjZXMgKi8sCiAJCQkJQjhEQkRCNEQxMzBCMEY4QTAwRjVDREIxIC8qIFNwZWxsaW5nQ29y
cmVjdGlvbkNvbW1hbmQuY3BwIGluIFNvdXJjZXMgKi8sCi0JCQkJQTcwMDVDQ0MxMzMwQzRCQTAw
MENDMEJBIC8qIFNwZWxsaW5nQ29ycmVjdGlvbkNvbnRyb2xsZXIuY3BwIGluIFNvdXJjZXMgKi8s
CiAJCQkJOTMzMDlFMTEwOTlFNjQ5MjAwNTZFNTgxIC8qIFNwbGl0RWxlbWVudENvbW1hbmQuY3Bw
IGluIFNvdXJjZXMgKi8sCiAJCQkJOTMzMDlFMTMwOTlFNjQ5MjAwNTZFNTgxIC8qIFNwbGl0VGV4
dE5vZGVDb21tYW5kLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTkzMzA5RTE1MDk5RTY0OTIwMDU2
RTU4MSAvKiBTcGxpdFRleHROb2RlQ29udGFpbmluZ0VsZW1lbnRDb21tYW5kLmNwcCBpbiBTb3Vy
Y2VzICovLApAQCAtMjc3MTEsNiArMjc3MTAsNyBAQAogCQkJCTFBM0ZGOUMzMTUyNjUzNTkwMDIy
ODhBMSAvKiBSZW5kZXJOYW1lZEZsb3dUaHJlYWQuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJRTFC
MjUxMDYxNTJBMEJBRjAwNjlCNzc5IC8qIFN0eWxlUHJvcGVydHlTaG9ydGhhbmQuY3BwIGluIFNv
dXJjZXMgKi8sCiAJCQkJNzFDQzdBMjAxNTJBMEJGRTAwOUVFQUY5IC8qIFNWR0FuaW1hdGVkRW51
bWVyYXRpb24uY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJQ0UwOEMzRDExNTJCNTk5QTAwMjFCOEMy
IC8qIEFsdGVybmF0aXZlVGV4dENvbnRyb2xsZXIuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkpOwog
CQkJcnVuT25seUZvckRlcGxveW1lbnRQb3N0cHJvY2Vzc2luZyA9IDA7CiAJCX07CkluZGV4OiBT
b3VyY2UvV2ViQ29yZS9lZGl0aW5nL0FsdGVybmF0aXZlVGV4dENvbnRyb2xsZXIuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2VkaXRpbmcvQWx0ZXJuYXRpdmVUZXh0Q29udHJvbGxl
ci5jcHAJKHJldmlzaW9uIDExMjgzMCkJKGZyb20gU291cmNlL1dlYkNvcmUvZWRpdGluZy9TcGVs
bGluZ0NvcnJlY3Rpb25Db250cm9sbGVyLmNwcDoxMTI4MzApCisrKyBTb3VyY2UvV2ViQ29yZS9l
ZGl0aW5nL0FsdGVybmF0aXZlVGV4dENvbnRyb2xsZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0w
LDAgKzEsNTY1IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA2LCAyMDA3LCAyMDA4IEFwcGxl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAwOCBOb2tpYSBD
b3Jwb3JhdGlvbiBhbmQvb3IgaXRzIHN1YnNpZGlhcnkoLWllcykKKyAqCisgKiBSZWRpc3RyaWJ1
dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQK
KyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dp
bmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3Vy
Y2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAy
LiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3Zl
IGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Ig
b3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBU
SElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIENPTVBVVEVSLCBJTkMuIGBgQVMgSVMn
JyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5U
QUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVND
TEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgQ09NUFVURVIsIElOQy4gT1IKKyAqIENP
TlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFM
LCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBH
T09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBC
VVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisg
KiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9S
IFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4g
QU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJ
U0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2luY2x1ZGUg
ImNvbmZpZy5oIgorI2luY2x1ZGUgIlNwZWxsaW5nQ29ycmVjdGlvbkNvbnRyb2xsZXIuaCIKKwor
I2luY2x1ZGUgIkRvY3VtZW50TWFya2VyQ29udHJvbGxlci5oIgorI2luY2x1ZGUgIkVkaXRDb21t
YW5kLmgiCisjaW5jbHVkZSAiRWRpdG9yQ2xpZW50LmgiCisjaW5jbHVkZSAiRmxvYXRRdWFkLmgi
CisjaW5jbHVkZSAiRnJhbWUuaCIKKyNpbmNsdWRlICJGcmFtZVZpZXcuaCIKKyNpbmNsdWRlICJQ
YWdlLmgiCisjaW5jbHVkZSAiU3BlbGxpbmdDb3JyZWN0aW9uQ29tbWFuZC5oIgorI2luY2x1ZGUg
IlRleHRDaGVja2VyQ2xpZW50LmgiCisjaW5jbHVkZSAiVGV4dENoZWNraW5nSGVscGVyLmgiCisj
aW5jbHVkZSAiVGV4dEl0ZXJhdG9yLmgiCisjaW5jbHVkZSAiVmlzaWJsZVNlbGVjdGlvbi5oIgor
I2luY2x1ZGUgImh0bWxlZGl0aW5nLmgiCisjaW5jbHVkZSAibWFya3VwLmgiCisjaW5jbHVkZSAi
dmlzaWJsZV91bml0cy5oIgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK3VzaW5nIG5hbWVzcGFj
ZSBzdGQ7Cit1c2luZyBuYW1lc3BhY2UgV1RGOworCisjaWYgVVNFKEFVVE9DT1JSRUNUSU9OX1BB
TkVMKQorCitzdGF0aWMgY29uc3QgVmVjdG9yPERvY3VtZW50TWFya2VyOjpNYXJrZXJUeXBlPiYg
bWFya2VyVHlwZXNGb3JBdXRvY29ycmVjdGlvbigpCit7CisgICAgREVGSU5FX1NUQVRJQ19MT0NB
TChWZWN0b3I8RG9jdW1lbnRNYXJrZXI6Ok1hcmtlclR5cGU+LCBtYXJrZXJUeXBlc0ZvckF1dG9D
b3JyZWN0aW9uLCAoKSk7CisgICAgaWYgKG1hcmtlclR5cGVzRm9yQXV0b0NvcnJlY3Rpb24uaXNF
bXB0eSgpKSB7CisgICAgICAgIG1hcmtlclR5cGVzRm9yQXV0b0NvcnJlY3Rpb24uYXBwZW5kKERv
Y3VtZW50TWFya2VyOjpSZXBsYWNlbWVudCk7CisgICAgICAgIG1hcmtlclR5cGVzRm9yQXV0b0Nv
cnJlY3Rpb24uYXBwZW5kKERvY3VtZW50TWFya2VyOjpDb3JyZWN0aW9uSW5kaWNhdG9yKTsKKyAg
ICAgICAgbWFya2VyVHlwZXNGb3JBdXRvQ29ycmVjdGlvbi5hcHBlbmQoRG9jdW1lbnRNYXJrZXI6
OlNwZWxsQ2hlY2tpbmdFeGVtcHRpb24pOworICAgICAgICBtYXJrZXJUeXBlc0ZvckF1dG9Db3Jy
ZWN0aW9uLmFwcGVuZChEb2N1bWVudE1hcmtlcjo6QXV0b2NvcnJlY3RlZCk7CisgICAgfQorICAg
IHJldHVybiBtYXJrZXJUeXBlc0ZvckF1dG9Db3JyZWN0aW9uOworfQorCitzdGF0aWMgY29uc3Qg
VmVjdG9yPERvY3VtZW50TWFya2VyOjpNYXJrZXJUeXBlPiYgbWFya2VyVHlwZXNGb3JSZXBsYWNl
bWVudCgpCit7CisgICAgREVGSU5FX1NUQVRJQ19MT0NBTChWZWN0b3I8RG9jdW1lbnRNYXJrZXI6
Ok1hcmtlclR5cGU+LCBtYXJrZXJUeXBlc0ZvclJlcGxhY2VtZW50LCAoKSk7CisgICAgaWYgKG1h
cmtlclR5cGVzRm9yUmVwbGFjZW1lbnQuaXNFbXB0eSgpKSB7CisgICAgICAgIG1hcmtlclR5cGVz
Rm9yUmVwbGFjZW1lbnQuYXBwZW5kKERvY3VtZW50TWFya2VyOjpSZXBsYWNlbWVudCk7CisgICAg
ICAgIG1hcmtlclR5cGVzRm9yUmVwbGFjZW1lbnQuYXBwZW5kKERvY3VtZW50TWFya2VyOjpTcGVs
bENoZWNraW5nRXhlbXB0aW9uKTsKKyAgICB9CisgICAgcmV0dXJuIG1hcmtlclR5cGVzRm9yUmVw
bGFjZW1lbnQ7Cit9CisKK3N0YXRpYyBib29sIG1hcmtlcnNIYXZlSWRlbnRpY2FsRGVzY3JpcHRp
b24oY29uc3QgVmVjdG9yPERvY3VtZW50TWFya2VyKj4mIG1hcmtlcnMpCit7CisgICAgaWYgKG1h
cmtlcnMuaXNFbXB0eSgpKQorICAgICAgICByZXR1cm4gdHJ1ZTsKKworICAgIGNvbnN0IFN0cmlu
ZyYgZGVzY3JpcHRpb24gPSBtYXJrZXJzWzBdLT5kZXNjcmlwdGlvbigpOworICAgIGZvciAoc2l6
ZV90IGkgPSAxOyBpIDwgbWFya2Vycy5zaXplKCk7ICsraSkgeworICAgICAgICBpZiAoZGVzY3Jp
cHRpb24gIT0gbWFya2Vyc1tpXS0+ZGVzY3JpcHRpb24oKSkKKyAgICAgICAgICAgIHJldHVybiBm
YWxzZTsKKyAgICB9CisgICAgcmV0dXJuIHRydWU7Cit9CisKK1NwZWxsaW5nQ29ycmVjdGlvbkNv
bnRyb2xsZXI6OlNwZWxsaW5nQ29ycmVjdGlvbkNvbnRyb2xsZXIoRnJhbWUqIGZyYW1lKQorICAg
IDogbV9mcmFtZShmcmFtZSkKKyAgICAsIG1fY29ycmVjdGlvblBhbmVsVGltZXIodGhpcywgJlNw
ZWxsaW5nQ29ycmVjdGlvbkNvbnRyb2xsZXI6OmNvcnJlY3Rpb25QYW5lbFRpbWVyRmlyZWQpCit7
Cit9CisKK1NwZWxsaW5nQ29ycmVjdGlvbkNvbnRyb2xsZXI6On5TcGVsbGluZ0NvcnJlY3Rpb25D
b250cm9sbGVyKCkKK3sKKyAgICBkaXNtaXNzKFJlYXNvbkZvckRpc21pc3NpbmdDb3JyZWN0aW9u
UGFuZWxJZ25vcmVkKTsKK30KKwordm9pZCBTcGVsbGluZ0NvcnJlY3Rpb25Db250cm9sbGVyOjpz
dGFydENvcnJlY3Rpb25QYW5lbFRpbWVyKENvcnJlY3Rpb25QYW5lbEluZm86OlBhbmVsVHlwZSB0
eXBlKQoreworICAgIGNvbnN0IGRvdWJsZSBjb3JyZWN0aW9uUGFuZWxUaW1lckludGVydmFsID0g
MC4zOworICAgIGlmICghaXNBdXRvbWF0aWNTcGVsbGluZ0NvcnJlY3Rpb25FbmFibGVkKCkpCisg
ICAgICAgIHJldHVybjsKKworICAgIC8vIElmIHR5cGUgaXMgUGFuZWxUeXBlUmV2ZXJzaW9uLCB0
aGVuIHRoZSBuZXcgcmFuZ2UgaGFzIGJlZW4gc2V0LiBTbyB3ZSBzaG91bGRuJ3QgY2xlYXIgaXQu
CisgICAgaWYgKHR5cGUgPT0gQ29ycmVjdGlvblBhbmVsSW5mbzo6UGFuZWxUeXBlQ29ycmVjdGlv
bikKKyAgICAgICAgbV9jb3JyZWN0aW9uUGFuZWxJbmZvLnJhbmdlVG9CZVJlcGxhY2VkLmNsZWFy
KCk7CisgICAgbV9jb3JyZWN0aW9uUGFuZWxJbmZvLnBhbmVsVHlwZSA9IHR5cGU7CisgICAgbV9j
b3JyZWN0aW9uUGFuZWxUaW1lci5zdGFydE9uZVNob3QoY29ycmVjdGlvblBhbmVsVGltZXJJbnRl
cnZhbCk7Cit9CisKK3ZvaWQgU3BlbGxpbmdDb3JyZWN0aW9uQ29udHJvbGxlcjo6c3RvcENvcnJl
Y3Rpb25QYW5lbFRpbWVyKCkKK3sKKyAgICBtX2NvcnJlY3Rpb25QYW5lbFRpbWVyLnN0b3AoKTsK
KyAgICBtX2NvcnJlY3Rpb25QYW5lbEluZm8ucmFuZ2VUb0JlUmVwbGFjZWQuY2xlYXIoKTsKK30K
Kwordm9pZCBTcGVsbGluZ0NvcnJlY3Rpb25Db250cm9sbGVyOjpzdG9wUGVuZGluZ0NvcnJlY3Rp
b24oY29uc3QgVmlzaWJsZVNlbGVjdGlvbiYgb2xkU2VsZWN0aW9uKQoreworICAgIC8vIE1ha2Ug
c3VyZSB0aGVyZSdzIG5vIHBlbmRpbmcgYXV0b2NvcnJlY3Rpb24gYmVmb3JlIHdlIGNhbGwgbWFy
a01pc3NwZWxsaW5nc0FuZEJhZEdyYW1tYXIoKSBiZWxvdy4KKyAgICBWaXNpYmxlU2VsZWN0aW9u
IGN1cnJlbnRTZWxlY3Rpb24obV9mcmFtZS0+c2VsZWN0aW9uKCktPnNlbGVjdGlvbigpKTsKKyAg
ICBpZiAoY3VycmVudFNlbGVjdGlvbiA9PSBvbGRTZWxlY3Rpb24pCisgICAgICAgIHJldHVybjsK
KworICAgIHN0b3BDb3JyZWN0aW9uUGFuZWxUaW1lcigpOworICAgIGRpc21pc3MoUmVhc29uRm9y
RGlzbWlzc2luZ0NvcnJlY3Rpb25QYW5lbElnbm9yZWQpOworfQorCit2b2lkIFNwZWxsaW5nQ29y
cmVjdGlvbkNvbnRyb2xsZXI6OmFwcGx5UGVuZGluZ0NvcnJlY3Rpb24oY29uc3QgVmlzaWJsZVNl
bGVjdGlvbiYgc2VsZWN0aW9uQWZ0ZXJUeXBpbmcpCit7CisgICAgLy8gQXBwbHkgcGVuZGluZyBh
dXRvY29ycmVjdGlvbiBiZWZvcmUgbmV4dCByb3VuZCBvZiBzcGVsbCBjaGVja2luZy4KKyAgICBi
b29sIGRvQXBwbHlDb3JyZWN0aW9uID0gdHJ1ZTsKKyAgICBWaXNpYmxlUG9zaXRpb24gc3RhcnRP
ZlNlbGVjdGlvbiA9IHNlbGVjdGlvbkFmdGVyVHlwaW5nLnZpc2libGVTdGFydCgpOworICAgIFZp
c2libGVTZWxlY3Rpb24gY3VycmVudFdvcmQgPSBWaXNpYmxlU2VsZWN0aW9uKHN0YXJ0T2ZXb3Jk
KHN0YXJ0T2ZTZWxlY3Rpb24sIExlZnRXb3JkSWZPbkJvdW5kYXJ5KSwgZW5kT2ZXb3JkKHN0YXJ0
T2ZTZWxlY3Rpb24sIFJpZ2h0V29yZElmT25Cb3VuZGFyeSkpOworICAgIGlmIChjdXJyZW50V29y
ZC52aXNpYmxlRW5kKCkgPT0gc3RhcnRPZlNlbGVjdGlvbikgeworICAgICAgICBTdHJpbmcgd29y
ZFRleHQgPSBwbGFpblRleHQoY3VycmVudFdvcmQudG9Ob3JtYWxpemVkUmFuZ2UoKS5nZXQoKSk7
CisgICAgICAgIGlmICh3b3JkVGV4dC5sZW5ndGgoKSA+IDAgJiYgaXNBbWJpZ3VvdXNCb3VuZGFy
eUNoYXJhY3Rlcih3b3JkVGV4dFt3b3JkVGV4dC5sZW5ndGgoKSAtIDFdKSkKKyAgICAgICAgICAg
IGRvQXBwbHlDb3JyZWN0aW9uID0gZmFsc2U7CisgICAgfQorICAgIGlmIChkb0FwcGx5Q29ycmVj
dGlvbikKKyAgICAgICAgaGFuZGxlQ29ycmVjdGlvblBhbmVsUmVzdWx0KGRpc21pc3NTb29uKFJl
YXNvbkZvckRpc21pc3NpbmdDb3JyZWN0aW9uUGFuZWxBY2NlcHRlZCkpOyAKKyAgICBlbHNlCisg
ICAgICAgIG1fY29ycmVjdGlvblBhbmVsSW5mby5yYW5nZVRvQmVSZXBsYWNlZC5jbGVhcigpOwor
fQorCitib29sIFNwZWxsaW5nQ29ycmVjdGlvbkNvbnRyb2xsZXI6Omhhc1BlbmRpbmdDb3JyZWN0
aW9uKCkgY29uc3QKK3sKKyAgICByZXR1cm4gbV9jb3JyZWN0aW9uUGFuZWxJbmZvLnJhbmdlVG9C
ZVJlcGxhY2VkOworfQorCitib29sIFNwZWxsaW5nQ29ycmVjdGlvbkNvbnRyb2xsZXI6OmlzU3Bl
bGxpbmdNYXJrZXJBbGxvd2VkKFBhc3NSZWZQdHI8UmFuZ2U+IG1pc3NwZWxsaW5nUmFuZ2UpIGNv
bnN0Cit7CisgICAgcmV0dXJuICFtX2ZyYW1lLT5kb2N1bWVudCgpLT5tYXJrZXJzKCktPmhhc01h
cmtlcnMobWlzc3BlbGxpbmdSYW5nZS5nZXQoKSwgRG9jdW1lbnRNYXJrZXI6OlNwZWxsQ2hlY2tp
bmdFeGVtcHRpb24pOworfQorCit2b2lkIFNwZWxsaW5nQ29ycmVjdGlvbkNvbnRyb2xsZXI6OnNo
b3coUGFzc1JlZlB0cjxSYW5nZT4gcmFuZ2VUb1JlcGxhY2UsIGNvbnN0IFN0cmluZyYgcmVwbGFj
ZW1lbnQpCit7CisgICAgRmxvYXRSZWN0IGJvdW5kaW5nQm94ID0gcm9vdFZpZXdSZWN0Rm9yUmFu
Z2UocmFuZ2VUb1JlcGxhY2UuZ2V0KCkpOworICAgIGlmIChib3VuZGluZ0JveC5pc0VtcHR5KCkp
CisgICAgICAgIHJldHVybjsKKyAgICBtX2NvcnJlY3Rpb25QYW5lbEluZm8ucmVwbGFjZWRTdHJp
bmcgPSBwbGFpblRleHQocmFuZ2VUb1JlcGxhY2UuZ2V0KCkpOworICAgIG1fY29ycmVjdGlvblBh
bmVsSW5mby5yYW5nZVRvQmVSZXBsYWNlZCA9IHJhbmdlVG9SZXBsYWNlOworICAgIG1fY29ycmVj
dGlvblBhbmVsSW5mby5yZXBsYWNlbWVudFN0cmluZyA9IHJlcGxhY2VtZW50OworICAgIG1fY29y
cmVjdGlvblBhbmVsSW5mby5pc0FjdGl2ZSA9IHRydWU7CisgICAgY2xpZW50KCktPnNob3dDb3Jy
ZWN0aW9uUGFuZWwobV9jb3JyZWN0aW9uUGFuZWxJbmZvLnBhbmVsVHlwZSwgYm91bmRpbmdCb3gs
IG1fY29ycmVjdGlvblBhbmVsSW5mby5yZXBsYWNlZFN0cmluZywgcmVwbGFjZW1lbnQsIFZlY3Rv
cjxTdHJpbmc+KCkpOworfQorCit2b2lkIFNwZWxsaW5nQ29ycmVjdGlvbkNvbnRyb2xsZXI6Omhh
bmRsZUNhbmNlbE9wZXJhdGlvbigpCit7CisgICAgaWYgKCFtX2NvcnJlY3Rpb25QYW5lbEluZm8u
aXNBY3RpdmUpCisgICAgICAgIHJldHVybjsKKyAgICBtX2NvcnJlY3Rpb25QYW5lbEluZm8uaXNB
Y3RpdmUgPSBmYWxzZTsKKyAgICBkaXNtaXNzKFJlYXNvbkZvckRpc21pc3NpbmdDb3JyZWN0aW9u
UGFuZWxDYW5jZWxsZWQpOworfQorCit2b2lkIFNwZWxsaW5nQ29ycmVjdGlvbkNvbnRyb2xsZXI6
OmRpc21pc3MoUmVhc29uRm9yRGlzbWlzc2luZ0NvcnJlY3Rpb25QYW5lbCByZWFzb25Gb3JEaXNt
aXNzaW5nKQoreworICAgIGlmICghbV9jb3JyZWN0aW9uUGFuZWxJbmZvLmlzQWN0aXZlKQorICAg
ICAgICByZXR1cm47CisgICAgbV9jb3JyZWN0aW9uUGFuZWxJbmZvLmlzQWN0aXZlID0gZmFsc2U7
CisgICAgbV9jb3JyZWN0aW9uUGFuZWxJc0Rpc21pc3NlZEJ5RWRpdG9yID0gdHJ1ZTsKKyAgICBp
ZiAoY2xpZW50KCkpCisgICAgICAgIGNsaWVudCgpLT5kaXNtaXNzQ29ycmVjdGlvblBhbmVsKHJl
YXNvbkZvckRpc21pc3NpbmcpOworfQorCitTdHJpbmcgU3BlbGxpbmdDb3JyZWN0aW9uQ29udHJv
bGxlcjo6ZGlzbWlzc1Nvb24oUmVhc29uRm9yRGlzbWlzc2luZ0NvcnJlY3Rpb25QYW5lbCByZWFz
b25Gb3JEaXNtaXNzaW5nKQoreworICAgIGlmICghbV9jb3JyZWN0aW9uUGFuZWxJbmZvLmlzQWN0
aXZlKQorICAgICAgICByZXR1cm4gU3RyaW5nKCk7CisgICAgbV9jb3JyZWN0aW9uUGFuZWxJbmZv
LmlzQWN0aXZlID0gZmFsc2U7CisgICAgbV9jb3JyZWN0aW9uUGFuZWxJc0Rpc21pc3NlZEJ5RWRp
dG9yID0gdHJ1ZTsKKyAgICBpZiAoIWNsaWVudCgpKQorICAgICAgICByZXR1cm4gU3RyaW5nKCk7
CisgICAgcmV0dXJuIGNsaWVudCgpLT5kaXNtaXNzQ29ycmVjdGlvblBhbmVsU29vbihyZWFzb25G
b3JEaXNtaXNzaW5nKTsKK30KKwordm9pZCBTcGVsbGluZ0NvcnJlY3Rpb25Db250cm9sbGVyOjph
cHBseUNvcnJlY3Rpb25QYW5lbEluZm8oY29uc3QgVmVjdG9yPERvY3VtZW50TWFya2VyOjpNYXJr
ZXJUeXBlPiYgbWFya2VyVHlwZXNUb0FkZCkKK3sKKyAgICBpZiAoIW1fY29ycmVjdGlvblBhbmVs
SW5mby5yYW5nZVRvQmVSZXBsYWNlZCkKKyAgICAgICAgcmV0dXJuOworCisgICAgRXhjZXB0aW9u
Q29kZSBlYyA9IDA7CisgICAgUmVmUHRyPFJhbmdlPiBwYXJhZ3JhcGhSYW5nZUNvbnRhaW5pbmdD
b3JyZWN0aW9uID0gbV9jb3JyZWN0aW9uUGFuZWxJbmZvLnJhbmdlVG9CZVJlcGxhY2VkLT5jbG9u
ZVJhbmdlKGVjKTsKKyAgICBpZiAoZWMpCisgICAgICAgIHJldHVybjsKKworICAgIHNldFN0YXJ0
KHBhcmFncmFwaFJhbmdlQ29udGFpbmluZ0NvcnJlY3Rpb24uZ2V0KCksIHN0YXJ0T2ZQYXJhZ3Jh
cGgobV9jb3JyZWN0aW9uUGFuZWxJbmZvLnJhbmdlVG9CZVJlcGxhY2VkLT5zdGFydFBvc2l0aW9u
KCkpKTsKKyAgICBzZXRFbmQocGFyYWdyYXBoUmFuZ2VDb250YWluaW5nQ29ycmVjdGlvbi5nZXQo
KSwgZW5kT2ZQYXJhZ3JhcGgobV9jb3JyZWN0aW9uUGFuZWxJbmZvLnJhbmdlVG9CZVJlcGxhY2Vk
LT5lbmRQb3NpdGlvbigpKSk7CisKKyAgICAvLyBBZnRlciB3ZSByZXBsYWNlIHRoZSB3b3JkIGF0
IHJhbmdlIHJhbmdlVG9CZVJlcGxhY2VkLCB3ZSBuZWVkIHRvIGFkZCBtYXJrZXJzIHRvIHRoYXQg
cmFuZ2UuCisgICAgLy8gSG93ZXZlciwgb25jZSB0aGUgcmVwbGFjZW1lbnQgdG9vayBwbGFjZSwg
dGhlIHZhbHVlIG9mIHJhbmdlVG9CZVJlcGxhY2VkIGlzIG5vdCB2YWxpZCBhbnltb3JlLgorICAg
IC8vIFNvIGJlZm9yZSB3ZSBjYXJyeSBvdXQgdGhlIHJlcGxhY2VtZW50LCB3ZSBuZWVkIHRvIHN0
b3JlIHRoZSBzdGFydCBwb3NpdGlvbiBvZiByYW5nZVRvQmVSZXBsYWNlZAorICAgIC8vIHJlbGF0
aXZlIHRvIHRoZSBzdGFydCBwb3NpdGlvbiBvZiB0aGUgY29udGFpbmluZyBwYXJhZ3JhcGguIFdl
IHVzZSBjb3JyZWN0aW9uU3RhcnRPZmZzZXRJblBhcmFncmFwaAorICAgIC8vIHRvIHN0b3JlIHRo
aXMgdmFsdWUuIEluIG9yZGVyIHRvIG9idGFpbiB0aGlzIG9mZnNldCwgd2UgbmVlZCB0byBmaXJz
dCBjcmVhdGUgYSByYW5nZQorICAgIC8vIHdoaWNoIHNwYW5zIGZyb20gdGhlIHN0YXJ0IG9mIHBh
cmFncmFwaCB0byB0aGUgc3RhcnQgcG9zaXRpb24gb2YgcmFuZ2VUb0JlUmVwbGFjZWQuCisgICAg
UmVmUHRyPFJhbmdlPiBjb3JyZWN0aW9uU3RhcnRPZmZzZXRJblBhcmFncmFwaEFzUmFuZ2UgPSBS
YW5nZTo6Y3JlYXRlKHBhcmFncmFwaFJhbmdlQ29udGFpbmluZ0NvcnJlY3Rpb24tPnN0YXJ0Q29u
dGFpbmVyKGVjKS0+ZG9jdW1lbnQoKSwgcGFyYWdyYXBoUmFuZ2VDb250YWluaW5nQ29ycmVjdGlv
bi0+c3RhcnRQb3NpdGlvbigpLCBwYXJhZ3JhcGhSYW5nZUNvbnRhaW5pbmdDb3JyZWN0aW9uLT5z
dGFydFBvc2l0aW9uKCkpOworICAgIGlmIChlYykKKyAgICAgICAgcmV0dXJuOworCisgICAgUG9z
aXRpb24gc3RhcnRQb3NpdGlvbk9mUmFuZ2VUb0JlUmVwbGFjZWQgPSBtX2NvcnJlY3Rpb25QYW5l
bEluZm8ucmFuZ2VUb0JlUmVwbGFjZWQtPnN0YXJ0UG9zaXRpb24oKTsKKyAgICBjb3JyZWN0aW9u
U3RhcnRPZmZzZXRJblBhcmFncmFwaEFzUmFuZ2UtPnNldEVuZChzdGFydFBvc2l0aW9uT2ZSYW5n
ZVRvQmVSZXBsYWNlZC5jb250YWluZXJOb2RlKCksIHN0YXJ0UG9zaXRpb25PZlJhbmdlVG9CZVJl
cGxhY2VkLmNvbXB1dGVPZmZzZXRJbkNvbnRhaW5lck5vZGUoKSwgZWMpOworICAgIGlmIChlYykK
KyAgICAgICAgcmV0dXJuOworCisgICAgLy8gVGFrZSBub3RlIG9mIHRoZSBsb2NhdGlvbiBvZiBh
dXRvY29ycmVjdGlvbiBzbyB0aGF0IHdlIGNhbiBhZGQgbWFya2VyIGFmdGVyIHRoZSByZXBsYWNl
bWVudCB0b29rIHBsYWNlLgorICAgIGludCBjb3JyZWN0aW9uU3RhcnRPZmZzZXRJblBhcmFncmFw
aCA9IFRleHRJdGVyYXRvcjo6cmFuZ2VMZW5ndGgoY29ycmVjdGlvblN0YXJ0T2Zmc2V0SW5QYXJh
Z3JhcGhBc1JhbmdlLmdldCgpKTsKKworICAgIC8vIENsb25lIHRoZSByYW5nZSwgc2luY2UgdGhl
IGNhbGxlciBvZiB0aGlzIG1ldGhvZCBtYXkgd2FudCB0byBrZWVwIHRoZSBvcmlnaW5hbCByYW5n
ZSBhcm91bmQuCisgICAgUmVmUHRyPFJhbmdlPiByYW5nZVRvQmVSZXBsYWNlZCA9IG1fY29ycmVj
dGlvblBhbmVsSW5mby5yYW5nZVRvQmVSZXBsYWNlZC0+Y2xvbmVSYW5nZShlYyk7CisgICAgYXBw
bHlDb21tYW5kKFNwZWxsaW5nQ29ycmVjdGlvbkNvbW1hbmQ6OmNyZWF0ZShyYW5nZVRvQmVSZXBs
YWNlZCwgbV9jb3JyZWN0aW9uUGFuZWxJbmZvLnJlcGxhY2VtZW50U3RyaW5nKSk7CisgICAgc2V0
RW5kKHBhcmFncmFwaFJhbmdlQ29udGFpbmluZ0NvcnJlY3Rpb24uZ2V0KCksIG1fZnJhbWUtPnNl
bGVjdGlvbigpLT5zZWxlY3Rpb24oKS5zdGFydCgpKTsKKyAgICBSZWZQdHI8UmFuZ2U+IHJlcGxh
Y2VtZW50UmFuZ2UgPSBUZXh0SXRlcmF0b3I6OnN1YnJhbmdlKHBhcmFncmFwaFJhbmdlQ29udGFp
bmluZ0NvcnJlY3Rpb24uZ2V0KCksIGNvcnJlY3Rpb25TdGFydE9mZnNldEluUGFyYWdyYXBoLCAg
bV9jb3JyZWN0aW9uUGFuZWxJbmZvLnJlcGxhY2VtZW50U3RyaW5nLmxlbmd0aCgpKTsKKyAgICBT
dHJpbmcgbmV3VGV4dCA9IHBsYWluVGV4dChyZXBsYWNlbWVudFJhbmdlLmdldCgpKTsKKworICAg
IC8vIENoZWNrIHRvIHNlZSBpZiByZXBsYWNlbWVudCBzdWNjZWVkZWQuCisgICAgaWYgKG5ld1Rl
eHQgIT0gbV9jb3JyZWN0aW9uUGFuZWxJbmZvLnJlcGxhY2VtZW50U3RyaW5nKQorICAgICAgICBy
ZXR1cm47CisKKyAgICBEb2N1bWVudE1hcmtlckNvbnRyb2xsZXIqIG1hcmtlcnMgPSByZXBsYWNl
bWVudFJhbmdlLT5zdGFydENvbnRhaW5lcigpLT5kb2N1bWVudCgpLT5tYXJrZXJzKCk7CisgICAg
c2l6ZV90IHNpemUgPSBtYXJrZXJUeXBlc1RvQWRkLnNpemUoKTsKKyAgICBmb3IgKHNpemVfdCBp
ID0gMDsgaSA8IHNpemU7ICsraSkgeworICAgICAgICBEb2N1bWVudE1hcmtlcjo6TWFya2VyVHlw
ZSBtYXJrZXJUeXBlID0gbWFya2VyVHlwZXNUb0FkZFtpXTsKKyAgICAgICAgU3RyaW5nIGRlc2Ny
aXB0aW9uOworICAgICAgICBpZiAobV9jb3JyZWN0aW9uUGFuZWxJbmZvLnBhbmVsVHlwZSAhPSBD
b3JyZWN0aW9uUGFuZWxJbmZvOjpQYW5lbFR5cGVSZXZlcnNpb24gJiYgKG1hcmtlclR5cGUgPT0g
RG9jdW1lbnRNYXJrZXI6OlJlcGxhY2VtZW50IHx8IG1hcmtlclR5cGUgPT0gRG9jdW1lbnRNYXJr
ZXI6OkF1dG9jb3JyZWN0ZWQpKQorICAgICAgICAgICAgZGVzY3JpcHRpb24gPSBtX2NvcnJlY3Rp
b25QYW5lbEluZm8ucmVwbGFjZWRTdHJpbmc7CisgICAgICAgIG1hcmtlcnMtPmFkZE1hcmtlcihy
ZXBsYWNlbWVudFJhbmdlLmdldCgpLCBtYXJrZXJUeXBlLCBkZXNjcmlwdGlvbik7CisgICAgfQor
fQorCitib29sIFNwZWxsaW5nQ29ycmVjdGlvbkNvbnRyb2xsZXI6OmFwcGx5QXV0b2NvcnJlY3Rp
b25CZWZvcmVUeXBpbmdJZkFwcHJvcHJpYXRlKCkKK3sKKyAgICBpZiAoIW1fY29ycmVjdGlvblBh
bmVsSW5mby5yYW5nZVRvQmVSZXBsYWNlZCB8fCAhbV9jb3JyZWN0aW9uUGFuZWxJbmZvLmlzQWN0
aXZlKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBpZiAobV9jb3JyZWN0aW9uUGFuZWxJ
bmZvLnBhbmVsVHlwZSAhPSBDb3JyZWN0aW9uUGFuZWxJbmZvOjpQYW5lbFR5cGVDb3JyZWN0aW9u
KQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBQb3NpdGlvbiBjYXJldFBvc2l0aW9uID0g
bV9mcmFtZS0+c2VsZWN0aW9uKCktPnNlbGVjdGlvbigpLnN0YXJ0KCk7CisKKyAgICBpZiAobV9j
b3JyZWN0aW9uUGFuZWxJbmZvLnJhbmdlVG9CZVJlcGxhY2VkLT5lbmRQb3NpdGlvbigpID09IGNh
cmV0UG9zaXRpb24pIHsKKyAgICAgICAgaGFuZGxlQ29ycmVjdGlvblBhbmVsUmVzdWx0KGRpc21p
c3NTb29uKFJlYXNvbkZvckRpc21pc3NpbmdDb3JyZWN0aW9uUGFuZWxBY2NlcHRlZCkpOworICAg
ICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9IAorICAgIAorICAgIC8vIFBlbmRpbmcgY29ycmVjdGlv
biBzaG91bGQgYWx3YXlzIGJlIHdoZXJlIGNhcmV0IGlzLiBCdXQgaW4gY2FzZSB0aGlzIGlzIG5v
dCBhbHdheXMgdHJ1ZSwgd2Ugc3RpbGwgd2FudCB0byBkaXNtaXNzIHRoZSBwYW5lbCB3aXRob3V0
IGFjY2VwdGluZyB0aGUgY29ycmVjdGlvbi4KKyAgICBBU1NFUlQobV9jb3JyZWN0aW9uUGFuZWxJ
bmZvLnJhbmdlVG9CZVJlcGxhY2VkLT5lbmRQb3NpdGlvbigpID09IGNhcmV0UG9zaXRpb24pOwor
ICAgIGRpc21pc3MoUmVhc29uRm9yRGlzbWlzc2luZ0NvcnJlY3Rpb25QYW5lbElnbm9yZWQpOwor
ICAgIHJldHVybiBmYWxzZTsKK30KKwordm9pZCBTcGVsbGluZ0NvcnJlY3Rpb25Db250cm9sbGVy
OjpyZXNwb25kVG9VbmFwcGxpZWRTcGVsbENvcnJlY3Rpb24oY29uc3QgVmlzaWJsZVNlbGVjdGlv
biYgc2VsZWN0aW9uT2ZDb3JyZWN0ZWQsIGNvbnN0IFN0cmluZyYgY29ycmVjdGVkLCBjb25zdCBT
dHJpbmcmIGNvcnJlY3Rpb24pCit7CisgICAgY2xpZW50KCktPnJlY29yZEF1dG9jb3JyZWN0aW9u
UmVzcG9uc2UoRWRpdG9yQ2xpZW50OjpBdXRvY29ycmVjdGlvblJldmVydGVkLCBjb3JyZWN0ZWQs
IGNvcnJlY3Rpb24pOworICAgIG1fZnJhbWUtPmRvY3VtZW50KCktPnVwZGF0ZUxheW91dCgpOwor
ICAgIG1fZnJhbWUtPnNlbGVjdGlvbigpLT5zZXRTZWxlY3Rpb24oc2VsZWN0aW9uT2ZDb3JyZWN0
ZWQsIEZyYW1lU2VsZWN0aW9uOjpDbG9zZVR5cGluZyB8IEZyYW1lU2VsZWN0aW9uOjpDbGVhclR5
cGluZ1N0eWxlIHwgRnJhbWVTZWxlY3Rpb246OlNwZWxsQ29ycmVjdGlvblRyaWdnZXJlZCk7Cisg
ICAgUmVmUHRyPFJhbmdlPiByYW5nZSA9IFJhbmdlOjpjcmVhdGUobV9mcmFtZS0+ZG9jdW1lbnQo
KSwgbV9mcmFtZS0+c2VsZWN0aW9uKCktPnNlbGVjdGlvbigpLnN0YXJ0KCksIG1fZnJhbWUtPnNl
bGVjdGlvbigpLT5zZWxlY3Rpb24oKS5lbmQoKSk7CisKKyAgICBEb2N1bWVudE1hcmtlckNvbnRy
b2xsZXIqIG1hcmtlcnMgPSBtX2ZyYW1lLT5kb2N1bWVudCgpLT5tYXJrZXJzKCk7CisgICAgbWFy
a2Vycy0+cmVtb3ZlTWFya2VycyhyYW5nZS5nZXQoKSwgRG9jdW1lbnRNYXJrZXI6OlNwZWxsaW5n
IHwgRG9jdW1lbnRNYXJrZXI6OkF1dG9jb3JyZWN0ZWQsIERvY3VtZW50TWFya2VyQ29udHJvbGxl
cjo6UmVtb3ZlUGFydGlhbGx5T3ZlcmxhcHBpbmdNYXJrZXIpOworICAgIG1hcmtlcnMtPmFkZE1h
cmtlcihyYW5nZS5nZXQoKSwgRG9jdW1lbnRNYXJrZXI6OlJlcGxhY2VtZW50KTsKKyAgICBtYXJr
ZXJzLT5hZGRNYXJrZXIocmFuZ2UuZ2V0KCksIERvY3VtZW50TWFya2VyOjpTcGVsbENoZWNraW5n
RXhlbXB0aW9uKTsKK30KKwordm9pZCBTcGVsbGluZ0NvcnJlY3Rpb25Db250cm9sbGVyOjpjb3Jy
ZWN0aW9uUGFuZWxUaW1lckZpcmVkKFRpbWVyPFNwZWxsaW5nQ29ycmVjdGlvbkNvbnRyb2xsZXI+
KikKK3sKKyAgICBtX2NvcnJlY3Rpb25QYW5lbElzRGlzbWlzc2VkQnlFZGl0b3IgPSBmYWxzZTsK
KyAgICBzd2l0Y2ggKG1fY29ycmVjdGlvblBhbmVsSW5mby5wYW5lbFR5cGUpIHsKKyAgICBjYXNl
IENvcnJlY3Rpb25QYW5lbEluZm86OlBhbmVsVHlwZUNvcnJlY3Rpb246IHsKKyAgICAgICAgVmlz
aWJsZVNlbGVjdGlvbiBzZWxlY3Rpb24obV9mcmFtZS0+c2VsZWN0aW9uKCktPnNlbGVjdGlvbigp
KTsKKyAgICAgICAgVmlzaWJsZVBvc2l0aW9uIHN0YXJ0KHNlbGVjdGlvbi5zdGFydCgpLCBzZWxl
Y3Rpb24uYWZmaW5pdHkoKSk7CisgICAgICAgIFZpc2libGVQb3NpdGlvbiBwID0gc3RhcnRPZldv
cmQoc3RhcnQsIExlZnRXb3JkSWZPbkJvdW5kYXJ5KTsKKyAgICAgICAgVmlzaWJsZVNlbGVjdGlv
biBhZGphY2VudFdvcmRzID0gVmlzaWJsZVNlbGVjdGlvbihwLCBzdGFydCk7CisgICAgICAgIG1f
ZnJhbWUtPmVkaXRvcigpLT5tYXJrQWxsTWlzc3BlbGxpbmdzQW5kQmFkR3JhbW1hckluUmFuZ2Vz
KFRleHRDaGVja2luZ1R5cGVTcGVsbGluZyB8IFRleHRDaGVja2luZ1R5cGVTaG93Q29ycmVjdGlv
blBhbmVsLCBhZGphY2VudFdvcmRzLnRvTm9ybWFsaXplZFJhbmdlKCkuZ2V0KCksIDApOworICAg
IH0KKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBDb3JyZWN0aW9uUGFuZWxJbmZvOjpQYW5lbFR5
cGVSZXZlcnNpb246IHsKKyAgICAgICAgaWYgKCFtX2NvcnJlY3Rpb25QYW5lbEluZm8ucmFuZ2VU
b0JlUmVwbGFjZWQpCisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgbV9jb3JyZWN0aW9uUGFu
ZWxJbmZvLmlzQWN0aXZlID0gdHJ1ZTsKKyAgICAgICAgbV9jb3JyZWN0aW9uUGFuZWxJbmZvLnJl
cGxhY2VkU3RyaW5nID0gcGxhaW5UZXh0KG1fY29ycmVjdGlvblBhbmVsSW5mby5yYW5nZVRvQmVS
ZXBsYWNlZC5nZXQoKSk7CisgICAgICAgIEZsb2F0UmVjdCBib3VuZGluZ0JveCA9IHJvb3RWaWV3
UmVjdEZvclJhbmdlKG1fY29ycmVjdGlvblBhbmVsSW5mby5yYW5nZVRvQmVSZXBsYWNlZC5nZXQo
KSk7CisgICAgICAgIGlmICghYm91bmRpbmdCb3guaXNFbXB0eSgpKQorICAgICAgICAgICAgY2xp
ZW50KCktPnNob3dDb3JyZWN0aW9uUGFuZWwobV9jb3JyZWN0aW9uUGFuZWxJbmZvLnBhbmVsVHlw
ZSwgYm91bmRpbmdCb3gsIG1fY29ycmVjdGlvblBhbmVsSW5mby5yZXBsYWNlZFN0cmluZywgbV9j
b3JyZWN0aW9uUGFuZWxJbmZvLnJlcGxhY2VtZW50U3RyaW5nLCBWZWN0b3I8U3RyaW5nPigpKTsK
KyAgICB9CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgQ29ycmVjdGlvblBhbmVsSW5mbzo6UGFu
ZWxUeXBlU3BlbGxpbmdTdWdnZXN0aW9uczogeworICAgICAgICBpZiAoIW1fY29ycmVjdGlvblBh
bmVsSW5mby5yYW5nZVRvQmVSZXBsYWNlZCB8fCBwbGFpblRleHQobV9jb3JyZWN0aW9uUGFuZWxJ
bmZvLnJhbmdlVG9CZVJlcGxhY2VkLmdldCgpKSAhPSBtX2NvcnJlY3Rpb25QYW5lbEluZm8ucmVw
bGFjZWRTdHJpbmcpCisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgU3RyaW5nIHBhcmFncmFw
aFRleHQgPSBwbGFpblRleHQoVGV4dENoZWNraW5nUGFyYWdyYXBoKG1fY29ycmVjdGlvblBhbmVs
SW5mby5yYW5nZVRvQmVSZXBsYWNlZCkucGFyYWdyYXBoUmFuZ2UoKS5nZXQoKSk7CisgICAgICAg
IFZlY3RvcjxTdHJpbmc+IHN1Z2dlc3Rpb25zOworICAgICAgICB0ZXh0Q2hlY2tlcigpLT5nZXRH
dWVzc2VzRm9yV29yZChtX2NvcnJlY3Rpb25QYW5lbEluZm8ucmVwbGFjZWRTdHJpbmcsIHBhcmFn
cmFwaFRleHQsIHN1Z2dlc3Rpb25zKTsKKyAgICAgICAgaWYgKHN1Z2dlc3Rpb25zLmlzRW1wdHko
KSkgeworICAgICAgICAgICAgbV9jb3JyZWN0aW9uUGFuZWxJbmZvLnJhbmdlVG9CZVJlcGxhY2Vk
LmNsZWFyKCk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgICAgICBTdHJpbmcg
dG9wU3VnZ2VzdGlvbiA9IHN1Z2dlc3Rpb25zLmZpcnN0KCk7CisgICAgICAgIHN1Z2dlc3Rpb25z
LnJlbW92ZSgwKTsKKyAgICAgICAgbV9jb3JyZWN0aW9uUGFuZWxJbmZvLmlzQWN0aXZlID0gdHJ1
ZTsKKyAgICAgICAgRmxvYXRSZWN0IGJvdW5kaW5nQm94ID0gcm9vdFZpZXdSZWN0Rm9yUmFuZ2Uo
bV9jb3JyZWN0aW9uUGFuZWxJbmZvLnJhbmdlVG9CZVJlcGxhY2VkLmdldCgpKTsKKyAgICAgICAg
aWYgKCFib3VuZGluZ0JveC5pc0VtcHR5KCkpCisgICAgICAgICAgICBjbGllbnQoKS0+c2hvd0Nv
cnJlY3Rpb25QYW5lbChtX2NvcnJlY3Rpb25QYW5lbEluZm8ucGFuZWxUeXBlLCBib3VuZGluZ0Jv
eCwgbV9jb3JyZWN0aW9uUGFuZWxJbmZvLnJlcGxhY2VkU3RyaW5nLCB0b3BTdWdnZXN0aW9uLCBz
dWdnZXN0aW9ucyk7CisgICAgfQorICAgICAgICBicmVhazsKKyAgICB9Cit9CisKK3ZvaWQgU3Bl
bGxpbmdDb3JyZWN0aW9uQ29udHJvbGxlcjo6aGFuZGxlQ29ycmVjdGlvblBhbmVsUmVzdWx0KGNv
bnN0IFN0cmluZyYgY29ycmVjdGlvbikKK3sKKyAgICBSYW5nZSogcmVwbGFjZWRSYW5nZSA9IG1f
Y29ycmVjdGlvblBhbmVsSW5mby5yYW5nZVRvQmVSZXBsYWNlZC5nZXQoKTsKKyAgICBpZiAoIXJl
cGxhY2VkUmFuZ2UgfHwgbV9mcmFtZS0+ZG9jdW1lbnQoKSAhPSByZXBsYWNlZFJhbmdlLT5vd25l
ckRvY3VtZW50KCkpCisgICAgICAgIHJldHVybjsKKworICAgIFN0cmluZyBjdXJyZW50V29yZCA9
IHBsYWluVGV4dChtX2NvcnJlY3Rpb25QYW5lbEluZm8ucmFuZ2VUb0JlUmVwbGFjZWQuZ2V0KCkp
OworICAgIC8vIENoZWNrIHRvIHNlZSBpZiB0aGUgd29yZCB3ZSBhcmUgYWJvdXQgdG8gY29ycmVj
dCBoYXMgYmVlbiBjaGFuZ2VkIGJldHdlZW4gdGltZXIgZmlyaW5nIGFuZCBjYWxsYmFjayBiZWlu
ZyB0cmlnZ2VyZWQuCisgICAgaWYgKGN1cnJlbnRXb3JkICE9IG1fY29ycmVjdGlvblBhbmVsSW5m
by5yZXBsYWNlZFN0cmluZykKKyAgICAgICAgcmV0dXJuOworCisgICAgbV9jb3JyZWN0aW9uUGFu
ZWxJbmZvLmlzQWN0aXZlID0gZmFsc2U7CisKKyAgICBzd2l0Y2ggKG1fY29ycmVjdGlvblBhbmVs
SW5mby5wYW5lbFR5cGUpIHsKKyAgICBjYXNlIENvcnJlY3Rpb25QYW5lbEluZm86OlBhbmVsVHlw
ZUNvcnJlY3Rpb246CisgICAgICAgIGlmIChjb3JyZWN0aW9uLmxlbmd0aCgpKSB7CisgICAgICAg
ICAgICBtX2NvcnJlY3Rpb25QYW5lbEluZm8ucmVwbGFjZW1lbnRTdHJpbmcgPSBjb3JyZWN0aW9u
OworICAgICAgICAgICAgYXBwbHlDb3JyZWN0aW9uUGFuZWxJbmZvKG1hcmtlclR5cGVzRm9yQXV0
b2NvcnJlY3Rpb24oKSk7CisgICAgICAgIH0gZWxzZSBpZiAoIW1fY29ycmVjdGlvblBhbmVsSXNE
aXNtaXNzZWRCeUVkaXRvcikKKyAgICAgICAgICAgIHJlcGxhY2VkUmFuZ2UtPnN0YXJ0Q29udGFp
bmVyKCktPmRvY3VtZW50KCktPm1hcmtlcnMoKS0+YWRkTWFya2VyKHJlcGxhY2VkUmFuZ2UsIERv
Y3VtZW50TWFya2VyOjpSZWplY3RlZENvcnJlY3Rpb24sIG1fY29ycmVjdGlvblBhbmVsSW5mby5y
ZXBsYWNlZFN0cmluZyk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgQ29ycmVjdGlvblBhbmVs
SW5mbzo6UGFuZWxUeXBlUmV2ZXJzaW9uOgorICAgIGNhc2UgQ29ycmVjdGlvblBhbmVsSW5mbzo6
UGFuZWxUeXBlU3BlbGxpbmdTdWdnZXN0aW9uczoKKyAgICAgICAgaWYgKGNvcnJlY3Rpb24ubGVu
Z3RoKCkpIHsKKyAgICAgICAgICAgIG1fY29ycmVjdGlvblBhbmVsSW5mby5yZXBsYWNlbWVudFN0
cmluZyA9IGNvcnJlY3Rpb247CisgICAgICAgICAgICBhcHBseUNvcnJlY3Rpb25QYW5lbEluZm8o
bWFya2VyVHlwZXNGb3JSZXBsYWNlbWVudCgpKTsKKyAgICAgICAgfQorICAgICAgICBicmVhazsK
KyAgICB9CisKKyAgICBtX2NvcnJlY3Rpb25QYW5lbEluZm8ucmFuZ2VUb0JlUmVwbGFjZWQuY2xl
YXIoKTsKK30KKworYm9vbCBTcGVsbGluZ0NvcnJlY3Rpb25Db250cm9sbGVyOjppc0F1dG9tYXRp
Y1NwZWxsaW5nQ29ycmVjdGlvbkVuYWJsZWQoKQoreworICAgIHJldHVybiBjbGllbnQoKSAmJiBj
bGllbnQoKS0+aXNBdXRvbWF0aWNTcGVsbGluZ0NvcnJlY3Rpb25FbmFibGVkKCk7Cit9CisKK0Zs
b2F0UmVjdCBTcGVsbGluZ0NvcnJlY3Rpb25Db250cm9sbGVyOjpyb290Vmlld1JlY3RGb3JSYW5n
ZShjb25zdCBSYW5nZSogcmFuZ2UpIGNvbnN0Cit7CisgICAgRnJhbWVWaWV3KiB2aWV3ID0gbV9m
cmFtZS0+dmlldygpOworICAgIGlmICghdmlldykKKyAgICAgICAgcmV0dXJuIEZsb2F0UmVjdCgp
OworICAgIFZlY3RvcjxGbG9hdFF1YWQ+IHRleHRRdWFkczsKKyAgICByYW5nZS0+dGV4dFF1YWRz
KHRleHRRdWFkcyk7CisgICAgRmxvYXRSZWN0IGJvdW5kaW5nUmVjdDsKKyAgICBzaXplX3Qgc2l6
ZSA9IHRleHRRdWFkcy5zaXplKCk7CisgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBzaXplOyAr
K2kpCisgICAgICAgIGJvdW5kaW5nUmVjdC51bml0ZSh0ZXh0UXVhZHNbaV0uYm91bmRpbmdCb3go
KSk7CisgICAgcmV0dXJuIHZpZXctPmNvbnRlbnRzVG9Sb290VmlldyhJbnRSZWN0KGJvdW5kaW5n
UmVjdCkpOworfSAgICAgICAgCisKK3ZvaWQgU3BlbGxpbmdDb3JyZWN0aW9uQ29udHJvbGxlcjo6
cmVzcG9uZFRvQ2hhbmdlZFNlbGVjdGlvbihjb25zdCBWaXNpYmxlU2VsZWN0aW9uJiBvbGRTZWxl
Y3Rpb24pCit7CisgICAgVmlzaWJsZVNlbGVjdGlvbiBjdXJyZW50U2VsZWN0aW9uKG1fZnJhbWUt
PnNlbGVjdGlvbigpLT5zZWxlY3Rpb24oKSk7CisgICAgLy8gV2hlbiB1c2VyIG1vdmVzIGNhcmV0
IHRvIHRoZSBlbmQgb2YgYXV0b2NvcnJlY3RlZCB3b3JkIGFuZCBwYXVzZXMsIHdlIHNob3cgdGhl
IHBhbmVsCisgICAgLy8gY29udGFpbmluZyB0aGUgb3JpZ2luYWwgcHJlLWNvcnJlY3Rpb24gd29y
ZCBzbyB0aGF0IHVzZXIgY2FuIHF1aWNrbHkgcmV2ZXJ0IHRoZQorICAgIC8vIHVuZGVzaXJlZCBh
dXRvY29ycmVjdGlvbi4gSGVyZSwgd2Ugc3RhcnQgY29ycmVjdGlvbiBwYW5lbCB0aW1lciBvbmNl
IHdlIGNvbmZpcm0gdGhhdAorICAgIC8vIHRoZSBuZXcgY2FyZXQgcG9zaXRpb24gaXMgYXQgdGhl
IGVuZCBvZiBhIHdvcmQuCisgICAgaWYgKCFjdXJyZW50U2VsZWN0aW9uLmlzQ2FyZXQoKSB8fCBj
dXJyZW50U2VsZWN0aW9uID09IG9sZFNlbGVjdGlvbikKKyAgICAgICAgcmV0dXJuOworCisgICAg
VmlzaWJsZVBvc2l0aW9uIHNlbGVjdGlvblBvc2l0aW9uID0gY3VycmVudFNlbGVjdGlvbi5zdGFy
dCgpOworICAgIAorICAgIC8vIENyZWF0aW5nIGEgVmlzaWJsZSBwb3NpdGlvbiB0cmlnZ2VycyBh
IGxheW91dCBhbmQgdGhlcmUgaXMgbm8KKyAgICAvLyBndWFyYW50ZWUgdGhhdCB0aGUgc2VsZWN0
aW9uIGlzIHN0aWxsIHZhbGlkLgorICAgIGlmIChzZWxlY3Rpb25Qb3NpdGlvbi5pc051bGwoKSkK
KyAgICAgICAgcmV0dXJuOworICAgIAorICAgIFZpc2libGVQb3NpdGlvbiBlbmRQb3NpdGlvbk9m
V29yZCA9IGVuZE9mV29yZChzZWxlY3Rpb25Qb3NpdGlvbiwgTGVmdFdvcmRJZk9uQm91bmRhcnkp
OworICAgIGlmIChzZWxlY3Rpb25Qb3NpdGlvbiAhPSBlbmRQb3NpdGlvbk9mV29yZCkKKyAgICAg
ICAgcmV0dXJuOworCisgICAgUG9zaXRpb24gcG9zaXRpb24gPSBlbmRQb3NpdGlvbk9mV29yZC5k
ZWVwRXF1aXZhbGVudCgpOworICAgIGlmIChwb3NpdGlvbi5hbmNob3JUeXBlKCkgIT0gUG9zaXRp
b246OlBvc2l0aW9uSXNPZmZzZXRJbkFuY2hvcikKKyAgICAgICAgcmV0dXJuOworCisgICAgTm9k
ZSogbm9kZSA9IHBvc2l0aW9uLmNvbnRhaW5lck5vZGUoKTsKKyAgICBpbnQgZW5kT2Zmc2V0ID0g
cG9zaXRpb24ub2Zmc2V0SW5Db250YWluZXJOb2RlKCk7CisgICAgVmVjdG9yPERvY3VtZW50TWFy
a2VyKj4gbWFya2VycyA9IG5vZGUtPmRvY3VtZW50KCktPm1hcmtlcnMoKS0+bWFya2Vyc0Zvcihu
b2RlKTsKKyAgICBzaXplX3QgbWFya2VyQ291bnQgPSBtYXJrZXJzLnNpemUoKTsKKyAgICBmb3Ig
KHNpemVfdCBpID0gMDsgaSA8IG1hcmtlckNvdW50OyArK2kpIHsKKyAgICAgICAgY29uc3QgRG9j
dW1lbnRNYXJrZXIqIG1hcmtlciA9IG1hcmtlcnNbaV07CisgICAgICAgIGlmICghc2hvdWxkU3Rh
cnRUaW1lckZvcihtYXJrZXIsIGVuZE9mZnNldCkpCisgICAgICAgICAgICBjb250aW51ZTsKKyAg
ICAgICAgUmVmUHRyPFJhbmdlPiB3b3JkUmFuZ2UgPSBSYW5nZTo6Y3JlYXRlKG1fZnJhbWUtPmRv
Y3VtZW50KCksIG5vZGUsIG1hcmtlci0+c3RhcnRPZmZzZXQoKSwgbm9kZSwgbWFya2VyLT5lbmRP
ZmZzZXQoKSk7CisgICAgICAgIFN0cmluZyBjdXJyZW50V29yZCA9IHBsYWluVGV4dCh3b3JkUmFu
Z2UuZ2V0KCkpOworICAgICAgICBpZiAoIWN1cnJlbnRXb3JkLmxlbmd0aCgpKQorICAgICAgICAg
ICAgY29udGludWU7CisKKyAgICAgICAgbV9jb3JyZWN0aW9uUGFuZWxJbmZvLnJhbmdlVG9CZVJl
cGxhY2VkID0gd29yZFJhbmdlOworICAgICAgICBtX2NvcnJlY3Rpb25QYW5lbEluZm8ucmVwbGFj
ZWRTdHJpbmcgPSBjdXJyZW50V29yZDsKKyAgICAgICAgaWYgKG1hcmtlci0+dHlwZSgpID09IERv
Y3VtZW50TWFya2VyOjpTcGVsbGluZykKKyAgICAgICAgICAgIHN0YXJ0Q29ycmVjdGlvblBhbmVs
VGltZXIoQ29ycmVjdGlvblBhbmVsSW5mbzo6UGFuZWxUeXBlU3BlbGxpbmdTdWdnZXN0aW9ucyk7
CisgICAgICAgIGVsc2UgeworICAgICAgICAgICAgbV9jb3JyZWN0aW9uUGFuZWxJbmZvLnJlcGxh
Y2VtZW50U3RyaW5nID0gbWFya2VyLT5kZXNjcmlwdGlvbigpOworICAgICAgICAgICAgc3RhcnRD
b3JyZWN0aW9uUGFuZWxUaW1lcihDb3JyZWN0aW9uUGFuZWxJbmZvOjpQYW5lbFR5cGVSZXZlcnNp
b24pOworICAgICAgICB9CisKKyAgICAgICAgYnJlYWs7CisgICAgfQorfQorCit2b2lkIFNwZWxs
aW5nQ29ycmVjdGlvbkNvbnRyb2xsZXI6OnJlc3BvbmRUb0FwcGxpZWRFZGl0aW5nKENvbXBvc2l0
ZUVkaXRDb21tYW5kKiBjb21tYW5kKQoreworICAgIGlmIChjb21tYW5kLT5pc1RvcExldmVsQ29t
bWFuZCgpICYmICFjb21tYW5kLT5zaG91bGRSZXRhaW5BdXRvY29ycmVjdGlvbkluZGljYXRvcigp
KQorICAgICAgICBtX2ZyYW1lLT5kb2N1bWVudCgpLT5tYXJrZXJzKCktPnJlbW92ZU1hcmtlcnMo
RG9jdW1lbnRNYXJrZXI6OkNvcnJlY3Rpb25JbmRpY2F0b3IpOworCisgICAgbWFya1ByZWNlZGlu
Z1doaXRlc3BhY2VGb3JEZWxldGVkQXV0b2NvcnJlY3Rpb25BZnRlckNvbW1hbmQoY29tbWFuZCk7
CisgICAgbV9vcmlnaW5hbFN0cmluZ0Zvckxhc3REZWxldGVkQXV0b2NvcnJlY3Rpb24gPSBTdHJp
bmcoKTsKK30KKwordm9pZCBTcGVsbGluZ0NvcnJlY3Rpb25Db250cm9sbGVyOjpyZXNwb25kVG9V
bmFwcGxpZWRFZGl0aW5nKEVkaXRDb21tYW5kQ29tcG9zaXRpb24qIGNvbW1hbmQpCit7CisgICAg
aWYgKCFjb21tYW5kLT53YXNDcmVhdGVMaW5rQ29tbWFuZCgpKQorICAgICAgICByZXR1cm47Cisg
ICAgUmVmUHRyPFJhbmdlPiByYW5nZSA9IFJhbmdlOjpjcmVhdGUobV9mcmFtZS0+ZG9jdW1lbnQo
KSwgY29tbWFuZC0+c3RhcnRpbmdTZWxlY3Rpb24oKS5zdGFydCgpLCBjb21tYW5kLT5zdGFydGlu
Z1NlbGVjdGlvbigpLmVuZCgpKTsKKyAgICBpZiAoIXJhbmdlKQorICAgICAgICByZXR1cm47Cisg
ICAgRG9jdW1lbnRNYXJrZXJDb250cm9sbGVyKiBtYXJrZXJzID0gbV9mcmFtZS0+ZG9jdW1lbnQo
KS0+bWFya2VycygpOworICAgIG1hcmtlcnMtPmFkZE1hcmtlcihyYW5nZS5nZXQoKSwgRG9jdW1l
bnRNYXJrZXI6OlJlcGxhY2VtZW50KTsKKyAgICBtYXJrZXJzLT5hZGRNYXJrZXIocmFuZ2UuZ2V0
KCksIERvY3VtZW50TWFya2VyOjpTcGVsbENoZWNraW5nRXhlbXB0aW9uKTsKK30KKworRWRpdG9y
Q2xpZW50KiBTcGVsbGluZ0NvcnJlY3Rpb25Db250cm9sbGVyOjpjbGllbnQoKQoreworICAgIHJl
dHVybiBtX2ZyYW1lLT5wYWdlKCkgPyBtX2ZyYW1lLT5wYWdlKCktPmVkaXRvckNsaWVudCgpIDog
MDsKK30KKworVGV4dENoZWNrZXJDbGllbnQqIFNwZWxsaW5nQ29ycmVjdGlvbkNvbnRyb2xsZXI6
OnRleHRDaGVja2VyKCkKK3sKKyAgICBpZiAoRWRpdG9yQ2xpZW50KiBvd25lciA9IGNsaWVudCgp
KQorICAgICAgICByZXR1cm4gb3duZXItPnRleHRDaGVja2VyKCk7CisgICAgcmV0dXJuIDA7Cit9
CisKK3ZvaWQgU3BlbGxpbmdDb3JyZWN0aW9uQ29udHJvbGxlcjo6cmVjb3JkQXV0b2NvcnJlY3Rp
b25SZXNwb25zZVJldmVyc2VkKGNvbnN0IFN0cmluZyYgcmVwbGFjZWRTdHJpbmcsIGNvbnN0IFN0
cmluZyYgcmVwbGFjZW1lbnRTdHJpbmcpCit7CisgICAgY2xpZW50KCktPnJlY29yZEF1dG9jb3Jy
ZWN0aW9uUmVzcG9uc2UoRWRpdG9yQ2xpZW50OjpBdXRvY29ycmVjdGlvblJldmVydGVkLCByZXBs
YWNlZFN0cmluZywgcmVwbGFjZW1lbnRTdHJpbmcpOworfQorCit2b2lkIFNwZWxsaW5nQ29ycmVj
dGlvbkNvbnRyb2xsZXI6OnJlY29yZEF1dG9jb3JyZWN0aW9uUmVzcG9uc2VSZXZlcnNlZChjb25z
dCBTdHJpbmcmIHJlcGxhY2VkU3RyaW5nLCBQYXNzUmVmUHRyPFJhbmdlPiByZXBsYWNlbWVudFJh
bmdlKQoreworICAgIHJlY29yZEF1dG9jb3JyZWN0aW9uUmVzcG9uc2VSZXZlcnNlZChyZXBsYWNl
ZFN0cmluZywgcGxhaW5UZXh0KHJlcGxhY2VtZW50UmFuZ2UuZ2V0KCkpKTsKK30KKwordm9pZCBT
cGVsbGluZ0NvcnJlY3Rpb25Db250cm9sbGVyOjptYXJrUmV2ZXJzZWQoUGFzc1JlZlB0cjxSYW5n
ZT4gY2hhbmdlZFJhbmdlKQoreworICAgIGNoYW5nZWRSYW5nZS0+c3RhcnRDb250YWluZXIoKS0+
ZG9jdW1lbnQoKS0+bWFya2VycygpLT5yZW1vdmVNYXJrZXJzKGNoYW5nZWRSYW5nZS5nZXQoKSwg
RG9jdW1lbnRNYXJrZXI6OkF1dG9jb3JyZWN0ZWQsIERvY3VtZW50TWFya2VyQ29udHJvbGxlcjo6
UmVtb3ZlUGFydGlhbGx5T3ZlcmxhcHBpbmdNYXJrZXIpOworICAgIGNoYW5nZWRSYW5nZS0+c3Rh
cnRDb250YWluZXIoKS0+ZG9jdW1lbnQoKS0+bWFya2VycygpLT5hZGRNYXJrZXIoY2hhbmdlZFJh
bmdlLmdldCgpLCBEb2N1bWVudE1hcmtlcjo6U3BlbGxDaGVja2luZ0V4ZW1wdGlvbik7Cit9CisK
K3ZvaWQgU3BlbGxpbmdDb3JyZWN0aW9uQ29udHJvbGxlcjo6bWFya0NvcnJlY3Rpb24oUGFzc1Jl
ZlB0cjxSYW5nZT4gcmVwbGFjZWRSYW5nZSwgY29uc3QgU3RyaW5nJiByZXBsYWNlZFN0cmluZykK
K3sKKyAgICBWZWN0b3I8RG9jdW1lbnRNYXJrZXI6Ok1hcmtlclR5cGU+IG1hcmtlclR5cGVzVG9B
ZGQgPSBtYXJrZXJUeXBlc0ZvckF1dG9jb3JyZWN0aW9uKCk7CisgICAgRG9jdW1lbnRNYXJrZXJD
b250cm9sbGVyKiBtYXJrZXJzID0gcmVwbGFjZWRSYW5nZS0+c3RhcnRDb250YWluZXIoKS0+ZG9j
dW1lbnQoKS0+bWFya2VycygpOworICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgbWFya2VyVHlw
ZXNUb0FkZC5zaXplKCk7ICsraSkgeworICAgICAgICBEb2N1bWVudE1hcmtlcjo6TWFya2VyVHlw
ZSBtYXJrZXJUeXBlID0gbWFya2VyVHlwZXNUb0FkZFtpXTsKKyAgICAgICAgaWYgKG1hcmtlclR5
cGUgPT0gRG9jdW1lbnRNYXJrZXI6OlJlcGxhY2VtZW50IHx8IG1hcmtlclR5cGUgPT0gRG9jdW1l
bnRNYXJrZXI6OkF1dG9jb3JyZWN0ZWQpCisgICAgICAgICAgICBtYXJrZXJzLT5hZGRNYXJrZXIo
cmVwbGFjZWRSYW5nZS5nZXQoKSwgbWFya2VyVHlwZSwgcmVwbGFjZWRTdHJpbmcpOworICAgICAg
ICBlbHNlCisgICAgICAgICAgICBtYXJrZXJzLT5hZGRNYXJrZXIocmVwbGFjZWRSYW5nZS5nZXQo
KSwgbWFya2VyVHlwZSk7CisgICAgfQorfQorCit2b2lkIFNwZWxsaW5nQ29ycmVjdGlvbkNvbnRy
b2xsZXI6OnJlY29yZFNwZWxsY2hlY2tlclJlc3BvbnNlRm9yTW9kaWZpZWRDb3JyZWN0aW9uKFJh
bmdlKiByYW5nZU9mQ29ycmVjdGlvbiwgY29uc3QgU3RyaW5nJiBjb3JyZWN0ZWQsIGNvbnN0IFN0
cmluZyYgY29ycmVjdGlvbikKK3sKKyAgICBpZiAoIXJhbmdlT2ZDb3JyZWN0aW9uKQorICAgICAg
ICByZXR1cm47CisgICAgRG9jdW1lbnRNYXJrZXJDb250cm9sbGVyKiBtYXJrZXJzID0gcmFuZ2VP
ZkNvcnJlY3Rpb24tPnN0YXJ0Q29udGFpbmVyKCktPmRvY3VtZW50KCktPm1hcmtlcnMoKTsKKyAg
ICBWZWN0b3I8RG9jdW1lbnRNYXJrZXIqPiBjb3JyZWN0ZWRPbmNlTWFya2VycyA9IG1hcmtlcnMt
Pm1hcmtlcnNJblJhbmdlKHJhbmdlT2ZDb3JyZWN0aW9uLCBEb2N1bWVudE1hcmtlcjo6QXV0b2Nv
cnJlY3RlZCk7CisgICAgaWYgKGNvcnJlY3RlZE9uY2VNYXJrZXJzLmlzRW1wdHkoKSkKKyAgICAg
ICAgcmV0dXJuOworICAgIAorICAgIC8vIFNwZWxsaW5nIGNvcnJlY3RlZCB0ZXh0IGhhcyBiZWVu
IGVkaXRlZC4gV2UgbmVlZCB0byBkZXRlcm1pbmUgd2hldGhlciB1c2VyIGhhcyByZXZlcnRlZCBp
dCB0byBvcmlnaW5hbCB0ZXh0IG9yCisgICAgLy8gZWRpdGVkIGl0IHRvIHNvbWV0aGluZyBlbHNl
LCBhbmQgbm90aWZ5IHNwZWxsY2hlY2tlciBhY2NvcmRpbmdseS4KKyAgICBpZiAobWFya2Vyc0hh
dmVJZGVudGljYWxEZXNjcmlwdGlvbihjb3JyZWN0ZWRPbmNlTWFya2VycykgJiYgY29ycmVjdGVk
T25jZU1hcmtlcnNbMF0tPmRlc2NyaXB0aW9uKCkgPT0gY29ycmVjdGVkKQorICAgICAgICBjbGll
bnQoKS0+cmVjb3JkQXV0b2NvcnJlY3Rpb25SZXNwb25zZShFZGl0b3JDbGllbnQ6OkF1dG9jb3Jy
ZWN0aW9uUmV2ZXJ0ZWQsIGNvcnJlY3RlZCwgY29ycmVjdGlvbik7CisgICAgZWxzZQorICAgICAg
ICBjbGllbnQoKS0+cmVjb3JkQXV0b2NvcnJlY3Rpb25SZXNwb25zZShFZGl0b3JDbGllbnQ6OkF1
dG9jb3JyZWN0aW9uRWRpdGVkLCBjb3JyZWN0ZWQsIGNvcnJlY3Rpb24pOworICAgIG1hcmtlcnMt
PnJlbW92ZU1hcmtlcnMocmFuZ2VPZkNvcnJlY3Rpb24sIERvY3VtZW50TWFya2VyOjpBdXRvY29y
cmVjdGVkLCBEb2N1bWVudE1hcmtlckNvbnRyb2xsZXI6OlJlbW92ZVBhcnRpYWxseU92ZXJsYXBw
aW5nTWFya2VyKTsKK30KKwordm9pZCBTcGVsbGluZ0NvcnJlY3Rpb25Db250cm9sbGVyOjpkZWxl
dGVkQXV0b2NvcnJlY3Rpb25BdFBvc2l0aW9uKGNvbnN0IFBvc2l0aW9uJiBwb3NpdGlvbiwgY29u
c3QgU3RyaW5nJiBvcmlnaW5hbFN0cmluZykKK3sKKyAgICBtX29yaWdpbmFsU3RyaW5nRm9yTGFz
dERlbGV0ZWRBdXRvY29ycmVjdGlvbiA9IG9yaWdpbmFsU3RyaW5nOworICAgIG1fcG9zaXRpb25G
b3JMYXN0RGVsZXRlZEF1dG9jb3JyZWN0aW9uID0gcG9zaXRpb247Cit9CisKK3ZvaWQgU3BlbGxp
bmdDb3JyZWN0aW9uQ29udHJvbGxlcjo6bWFya1ByZWNlZGluZ1doaXRlc3BhY2VGb3JEZWxldGVk
QXV0b2NvcnJlY3Rpb25BZnRlckNvbW1hbmQoRWRpdENvbW1hbmQqIGNvbW1hbmQpCit7CisgICAg
UG9zaXRpb24gZW5kT2ZTZWxlY3Rpb24gPSBjb21tYW5kLT5lbmRpbmdTZWxlY3Rpb24oKS5lbmQo
KTsKKyAgICBpZiAoZW5kT2ZTZWxlY3Rpb24gIT0gbV9wb3NpdGlvbkZvckxhc3REZWxldGVkQXV0
b2NvcnJlY3Rpb24pCisgICAgICAgIHJldHVybjsKKworICAgIFBvc2l0aW9uIHByZWNlZGluZ0No
YXJhY3RlclBvc2l0aW9uID0gZW5kT2ZTZWxlY3Rpb24ucHJldmlvdXMoKTsKKyAgICBpZiAoZW5k
T2ZTZWxlY3Rpb24gPT0gcHJlY2VkaW5nQ2hhcmFjdGVyUG9zaXRpb24pCisgICAgICAgIHJldHVy
bjsKKworICAgIFJlZlB0cjxSYW5nZT4gcHJlY2VkaW5nQ2hhcmFjdGVyUmFuZ2UgPSBSYW5nZTo6
Y3JlYXRlKG1fZnJhbWUtPmRvY3VtZW50KCksIHByZWNlZGluZ0NoYXJhY3RlclBvc2l0aW9uLCBl
bmRPZlNlbGVjdGlvbik7CisgICAgU3RyaW5nIHN0cmluZyA9IHBsYWluVGV4dChwcmVjZWRpbmdD
aGFyYWN0ZXJSYW5nZS5nZXQoKSk7CisgICAgaWYgKHN0cmluZy5pc0VtcHR5KCkgfHwgIWlzV2hp
dGVzcGFjZShzdHJpbmdbc3RyaW5nLmxlbmd0aCgpIC0gMV0pKQorICAgICAgICByZXR1cm47CisK
KyAgICAvLyBNYXJrIHRoaXMgd2hpdGVzcGFjZSB0byBpbmRpY2F0ZSB3ZSBoYXZlIGRlbGV0ZWQg
YW4gYXV0b2NvcnJlY3Rpb24gZm9sbG93aW5nIHRoaXMKKyAgICAvLyB3aGl0ZXNwYWNlLiBTbyBp
ZiB0aGUgdXNlciB0eXBlcyB0aGUgc2FtZSBvcmlnaW5hbCB3b3JkIGFnYWluIGF0IHRoaXMgcG9z
aXRpb24sIHdlCisgICAgLy8gd29uJ3QgYXV0b2NvcnJlY3QgaXQgYWdhaW4uCisgICAgbV9mcmFt
ZS0+ZG9jdW1lbnQoKS0+bWFya2VycygpLT5hZGRNYXJrZXIocHJlY2VkaW5nQ2hhcmFjdGVyUmFu
Z2UuZ2V0KCksIERvY3VtZW50TWFya2VyOjpEZWxldGVkQXV0b2NvcnJlY3Rpb24sIG1fb3JpZ2lu
YWxTdHJpbmdGb3JMYXN0RGVsZXRlZEF1dG9jb3JyZWN0aW9uKTsKK30KKworYm9vbCBTcGVsbGlu
Z0NvcnJlY3Rpb25Db250cm9sbGVyOjpwcm9jZXNzTWFya2Vyc09uVGV4dFRvQmVSZXBsYWNlZEJ5
UmVzdWx0KGNvbnN0IFRleHRDaGVja2luZ1Jlc3VsdCogcmVzdWx0LCBSYW5nZSogcmFuZ2VUb0Jl
UmVwbGFjZWQsIGNvbnN0IFN0cmluZyYgc3RyaW5nVG9CZVJlcGxhY2VkKQoreworICAgIERvY3Vt
ZW50TWFya2VyQ29udHJvbGxlciogbWFya2VyQ29udHJvbGxlciA9IG1fZnJhbWUtPmRvY3VtZW50
KCktPm1hcmtlcnMoKTsKKyAgICBpZiAobWFya2VyQ29udHJvbGxlci0+aGFzTWFya2VycyhyYW5n
ZVRvQmVSZXBsYWNlZCwgRG9jdW1lbnRNYXJrZXI6OlJlcGxhY2VtZW50KSkgeworICAgICAgICBp
ZiAocmVzdWx0LT50eXBlID09IFRleHRDaGVja2luZ1R5cGVDb3JyZWN0aW9uKQorICAgICAgICAg
ICAgcmVjb3JkU3BlbGxjaGVja2VyUmVzcG9uc2VGb3JNb2RpZmllZENvcnJlY3Rpb24ocmFuZ2VU
b0JlUmVwbGFjZWQsIHN0cmluZ1RvQmVSZXBsYWNlZCwgcmVzdWx0LT5yZXBsYWNlbWVudCk7Cisg
ICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisKKyAgICBpZiAobWFya2VyQ29udHJvbGxlci0+
aGFzTWFya2VycyhyYW5nZVRvQmVSZXBsYWNlZCwgRG9jdW1lbnRNYXJrZXI6OlJlamVjdGVkQ29y
cmVjdGlvbikpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIFBvc2l0aW9uIGJlZ2lubmlu
Z09mUmFuZ2UgPSByYW5nZVRvQmVSZXBsYWNlZC0+c3RhcnRQb3NpdGlvbigpOworICAgIFBvc2l0
aW9uIHByZWNlZGluZ0NoYXJhY3RlclBvc2l0aW9uID0gYmVnaW5uaW5nT2ZSYW5nZS5wcmV2aW91
cygpOworICAgIFJlZlB0cjxSYW5nZT4gcHJlY2VkaW5nQ2hhcmFjdGVyUmFuZ2UgPSBSYW5nZTo6
Y3JlYXRlKG1fZnJhbWUtPmRvY3VtZW50KCksIHByZWNlZGluZ0NoYXJhY3RlclBvc2l0aW9uLCBi
ZWdpbm5pbmdPZlJhbmdlKTsKKworICAgIFZlY3RvcjxEb2N1bWVudE1hcmtlcio+IG1hcmtlcnMg
PSBtYXJrZXJDb250cm9sbGVyLT5tYXJrZXJzSW5SYW5nZShwcmVjZWRpbmdDaGFyYWN0ZXJSYW5n
ZS5nZXQoKSwgRG9jdW1lbnRNYXJrZXI6OkRlbGV0ZWRBdXRvY29ycmVjdGlvbik7CisKKyAgICBm
b3IgKHNpemVfdCBpID0gMDsgaSA8IG1hcmtlcnMuc2l6ZSgpOyArK2kpIHsKKyAgICAgICAgaWYg
KG1hcmtlcnNbaV0tPmRlc2NyaXB0aW9uKCkgPT0gc3RyaW5nVG9CZVJlcGxhY2VkKQorICAgICAg
ICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKworICAgIHJldHVybiB0cnVlOworfQorICAgIAor
I2VuZGlmCisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2Vk
aXRpbmcvQWx0ZXJuYXRpdmVUZXh0Q29udHJvbGxlci5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1dlYkNvcmUvZWRpdGluZy9BbHRlcm5hdGl2ZVRleHRDb250cm9sbGVyLmNwcAkocmV2aXNpb24g
MTEyODMwKQorKysgU291cmNlL1dlYkNvcmUvZWRpdGluZy9BbHRlcm5hdGl2ZVRleHRDb250cm9s
bGVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjUsNyArMjUsNyBAQAogICovCiAKICNpbmNsdWRl
ICJjb25maWcuaCIKLSNpbmNsdWRlICJTcGVsbGluZ0NvcnJlY3Rpb25Db250cm9sbGVyLmgiCisj
aW5jbHVkZSAiQWx0ZXJuYXRpdmVUZXh0Q29udHJvbGxlci5oIgogCiAjaW5jbHVkZSAiRG9jdW1l
bnRNYXJrZXJDb250cm9sbGVyLmgiCiAjaW5jbHVkZSAiRWRpdENvbW1hbmQuaCIKQEAgLTQ4LDYg
KzQ4LDIyIEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKIHVzaW5nIG5hbWVzcGFjZSBzdGQ7CiB1c2lu
ZyBuYW1lc3BhY2UgV1RGOwogCitjbGFzcyBBdXRvY29ycmVjdGlvbkFsdGVybmF0aXZlRGV0YWls
cyA6IHB1YmxpYyBBbHRlcm5hdGl2ZVRleHREZXRhaWxzIHsKK3B1YmxpYzoKKyAgICBzdGF0aWMg
UGFzc1JlZlB0cjxBdXRvY29ycmVjdGlvbkFsdGVybmF0aXZlRGV0YWlscz4gY3JlYXRlKGNvbnN0
IFN0cmluZyYgcmVwbGFjZW1lbnRTdHJpbmcpCisgICAgeworICAgICAgICByZXR1cm4gYWRvcHRS
ZWYobmV3IEF1dG9jb3JyZWN0aW9uQWx0ZXJuYXRpdmVEZXRhaWxzKHJlcGxhY2VtZW50U3RyaW5n
KSk7CisgICAgfQorICAgIAorICAgIGNvbnN0IFN0cmluZyYgcmVwbGFjZW1lbnRTdHJpbmcoKSBj
b25zdCB7IHJldHVybiBtX3JlcGxhY2VtZW50U3RyaW5nOyB9Citwcml2YXRlOgorICAgIEF1dG9j
b3JyZWN0aW9uQWx0ZXJuYXRpdmVEZXRhaWxzKGNvbnN0IFN0cmluZyYgcmVwbGFjZW1lbnRTdHJp
bmcpCisgICAgOiBtX3JlcGxhY2VtZW50U3RyaW5nKHJlcGxhY2VtZW50U3RyaW5nKQorICAgIHsg
fQorICAgIAorICAgIFN0cmluZyBtX3JlcGxhY2VtZW50U3RyaW5nOworfTsKKwogI2lmIFVTRShB
VVRPQ09SUkVDVElPTl9QQU5FTCkKIAogc3RhdGljIGNvbnN0IFZlY3RvcjxEb2N1bWVudE1hcmtl
cjo6TWFya2VyVHlwZT4mIG1hcmtlclR5cGVzRm9yQXV0b2NvcnJlY3Rpb24oKQpAQCAtODUsNDgg
KzEwMSw0OCBAQCBzdGF0aWMgYm9vbCBtYXJrZXJzSGF2ZUlkZW50aWNhbERlc2NyaXB0CiAgICAg
cmV0dXJuIHRydWU7CiB9CiAKLVNwZWxsaW5nQ29ycmVjdGlvbkNvbnRyb2xsZXI6OlNwZWxsaW5n
Q29ycmVjdGlvbkNvbnRyb2xsZXIoRnJhbWUqIGZyYW1lKQorQWx0ZXJuYXRpdmVUZXh0Q29udHJv
bGxlcjo6QWx0ZXJuYXRpdmVUZXh0Q29udHJvbGxlcihGcmFtZSogZnJhbWUpCiAgICAgOiBtX2Zy
YW1lKGZyYW1lKQotICAgICwgbV9jb3JyZWN0aW9uUGFuZWxUaW1lcih0aGlzLCAmU3BlbGxpbmdD
b3JyZWN0aW9uQ29udHJvbGxlcjo6Y29ycmVjdGlvblBhbmVsVGltZXJGaXJlZCkKKyAgICAsIG1f
dGltZXIodGhpcywgJkFsdGVybmF0aXZlVGV4dENvbnRyb2xsZXI6OnRpbWVyRmlyZWQpCiB7CiB9
CiAKLVNwZWxsaW5nQ29ycmVjdGlvbkNvbnRyb2xsZXI6On5TcGVsbGluZ0NvcnJlY3Rpb25Db250
cm9sbGVyKCkKK0FsdGVybmF0aXZlVGV4dENvbnRyb2xsZXI6On5BbHRlcm5hdGl2ZVRleHRDb250
cm9sbGVyKCkKIHsKLSAgICBkaXNtaXNzKFJlYXNvbkZvckRpc21pc3NpbmdDb3JyZWN0aW9uUGFu
ZWxJZ25vcmVkKTsKKyAgICBkaXNtaXNzKFJlYXNvbkZvckRpc21pc3NpbmdBbHRlcm5hdGl2ZVRl
eHRJZ25vcmVkKTsKIH0KIAotdm9pZCBTcGVsbGluZ0NvcnJlY3Rpb25Db250cm9sbGVyOjpzdGFy
dENvcnJlY3Rpb25QYW5lbFRpbWVyKENvcnJlY3Rpb25QYW5lbEluZm86OlBhbmVsVHlwZSB0eXBl
KQordm9pZCBBbHRlcm5hdGl2ZVRleHRDb250cm9sbGVyOjpzdGFydEFsdGVybmF0aXZlVGV4dFVJ
VGltZXIoQWx0ZXJuYXRpdmVUZXh0VHlwZSB0eXBlKQogewogICAgIGNvbnN0IGRvdWJsZSBjb3Jy
ZWN0aW9uUGFuZWxUaW1lckludGVydmFsID0gMC4zOwogICAgIGlmICghaXNBdXRvbWF0aWNTcGVs
bGluZ0NvcnJlY3Rpb25FbmFibGVkKCkpCiAgICAgICAgIHJldHVybjsKIAogICAgIC8vIElmIHR5
cGUgaXMgUGFuZWxUeXBlUmV2ZXJzaW9uLCB0aGVuIHRoZSBuZXcgcmFuZ2UgaGFzIGJlZW4gc2V0
LiBTbyB3ZSBzaG91bGRuJ3QgY2xlYXIgaXQuCi0gICAgaWYgKHR5cGUgPT0gQ29ycmVjdGlvblBh
bmVsSW5mbzo6UGFuZWxUeXBlQ29ycmVjdGlvbikKLSAgICAgICAgbV9jb3JyZWN0aW9uUGFuZWxJ
bmZvLnJhbmdlVG9CZVJlcGxhY2VkLmNsZWFyKCk7Ci0gICAgbV9jb3JyZWN0aW9uUGFuZWxJbmZv
LnBhbmVsVHlwZSA9IHR5cGU7Ci0gICAgbV9jb3JyZWN0aW9uUGFuZWxUaW1lci5zdGFydE9uZVNo
b3QoY29ycmVjdGlvblBhbmVsVGltZXJJbnRlcnZhbCk7CisgICAgaWYgKHR5cGUgPT0gQWx0ZXJu
YXRpdmVUZXh0VHlwZUNvcnJlY3Rpb24pCisgICAgICAgIG1fYWx0ZXJuYXRpdmVUZXh0SW5mby5y
YW5nZVdpdGhBbHRlcm5hdGl2ZS5jbGVhcigpOworICAgIG1fYWx0ZXJuYXRpdmVUZXh0SW5mby50
eXBlID0gdHlwZTsKKyAgICBtX3RpbWVyLnN0YXJ0T25lU2hvdChjb3JyZWN0aW9uUGFuZWxUaW1l
ckludGVydmFsKTsKIH0KIAotdm9pZCBTcGVsbGluZ0NvcnJlY3Rpb25Db250cm9sbGVyOjpzdG9w
Q29ycmVjdGlvblBhbmVsVGltZXIoKQordm9pZCBBbHRlcm5hdGl2ZVRleHRDb250cm9sbGVyOjpz
dG9wQWx0ZXJuYXRpdmVUZXh0VUlUaW1lcigpCiB7Ci0gICAgbV9jb3JyZWN0aW9uUGFuZWxUaW1l
ci5zdG9wKCk7Ci0gICAgbV9jb3JyZWN0aW9uUGFuZWxJbmZvLnJhbmdlVG9CZVJlcGxhY2VkLmNs
ZWFyKCk7CisgICAgbV90aW1lci5zdG9wKCk7CisgICAgbV9hbHRlcm5hdGl2ZVRleHRJbmZvLnJh
bmdlV2l0aEFsdGVybmF0aXZlLmNsZWFyKCk7CiB9CiAKLXZvaWQgU3BlbGxpbmdDb3JyZWN0aW9u
Q29udHJvbGxlcjo6c3RvcFBlbmRpbmdDb3JyZWN0aW9uKGNvbnN0IFZpc2libGVTZWxlY3Rpb24m
IG9sZFNlbGVjdGlvbikKK3ZvaWQgQWx0ZXJuYXRpdmVUZXh0Q29udHJvbGxlcjo6c3RvcFBlbmRp
bmdDb3JyZWN0aW9uKGNvbnN0IFZpc2libGVTZWxlY3Rpb24mIG9sZFNlbGVjdGlvbikKIHsKICAg
ICAvLyBNYWtlIHN1cmUgdGhlcmUncyBubyBwZW5kaW5nIGF1dG9jb3JyZWN0aW9uIGJlZm9yZSB3
ZSBjYWxsIG1hcmtNaXNzcGVsbGluZ3NBbmRCYWRHcmFtbWFyKCkgYmVsb3cuCiAgICAgVmlzaWJs
ZVNlbGVjdGlvbiBjdXJyZW50U2VsZWN0aW9uKG1fZnJhbWUtPnNlbGVjdGlvbigpLT5zZWxlY3Rp
b24oKSk7CiAgICAgaWYgKGN1cnJlbnRTZWxlY3Rpb24gPT0gb2xkU2VsZWN0aW9uKQogICAgICAg
ICByZXR1cm47CiAKLSAgICBzdG9wQ29ycmVjdGlvblBhbmVsVGltZXIoKTsKLSAgICBkaXNtaXNz
KFJlYXNvbkZvckRpc21pc3NpbmdDb3JyZWN0aW9uUGFuZWxJZ25vcmVkKTsKKyAgICBzdG9wQWx0
ZXJuYXRpdmVUZXh0VUlUaW1lcigpOworICAgIGRpc21pc3MoUmVhc29uRm9yRGlzbWlzc2luZ0Fs
dGVybmF0aXZlVGV4dElnbm9yZWQpOwogfQogCi12b2lkIFNwZWxsaW5nQ29ycmVjdGlvbkNvbnRy
b2xsZXI6OmFwcGx5UGVuZGluZ0NvcnJlY3Rpb24oY29uc3QgVmlzaWJsZVNlbGVjdGlvbiYgc2Vs
ZWN0aW9uQWZ0ZXJUeXBpbmcpCit2b2lkIEFsdGVybmF0aXZlVGV4dENvbnRyb2xsZXI6OmFwcGx5
UGVuZGluZ0NvcnJlY3Rpb24oY29uc3QgVmlzaWJsZVNlbGVjdGlvbiYgc2VsZWN0aW9uQWZ0ZXJU
eXBpbmcpCiB7CiAgICAgLy8gQXBwbHkgcGVuZGluZyBhdXRvY29ycmVjdGlvbiBiZWZvcmUgbmV4
dCByb3VuZCBvZiBzcGVsbCBjaGVja2luZy4KICAgICBib29sIGRvQXBwbHlDb3JyZWN0aW9uID0g
dHJ1ZTsKQEAgLTEzOCw4NyArMTU0LDg3IEBAIHZvaWQgU3BlbGxpbmdDb3JyZWN0aW9uQ29udHJv
bGxlcjo6YXBwbHkKICAgICAgICAgICAgIGRvQXBwbHlDb3JyZWN0aW9uID0gZmFsc2U7CiAgICAg
fQogICAgIGlmIChkb0FwcGx5Q29ycmVjdGlvbikKLSAgICAgICAgaGFuZGxlQ29ycmVjdGlvblBh
bmVsUmVzdWx0KGRpc21pc3NTb29uKFJlYXNvbkZvckRpc21pc3NpbmdDb3JyZWN0aW9uUGFuZWxB
Y2NlcHRlZCkpOyAKKyAgICAgICAgaGFuZGxlQWx0ZXJuYXRpdmVUZXh0VUlSZXN1bHQoZGlzbWlz
c1Nvb24oUmVhc29uRm9yRGlzbWlzc2luZ0FsdGVybmF0aXZlVGV4dEFjY2VwdGVkKSk7IAogICAg
IGVsc2UKLSAgICAgICAgbV9jb3JyZWN0aW9uUGFuZWxJbmZvLnJhbmdlVG9CZVJlcGxhY2VkLmNs
ZWFyKCk7CisgICAgICAgIG1fYWx0ZXJuYXRpdmVUZXh0SW5mby5yYW5nZVdpdGhBbHRlcm5hdGl2
ZS5jbGVhcigpOwogfQogCi1ib29sIFNwZWxsaW5nQ29ycmVjdGlvbkNvbnRyb2xsZXI6Omhhc1Bl
bmRpbmdDb3JyZWN0aW9uKCkgY29uc3QKK2Jvb2wgQWx0ZXJuYXRpdmVUZXh0Q29udHJvbGxlcjo6
aGFzUGVuZGluZ0NvcnJlY3Rpb24oKSBjb25zdAogewotICAgIHJldHVybiBtX2NvcnJlY3Rpb25Q
YW5lbEluZm8ucmFuZ2VUb0JlUmVwbGFjZWQ7CisgICAgcmV0dXJuIG1fYWx0ZXJuYXRpdmVUZXh0
SW5mby5yYW5nZVdpdGhBbHRlcm5hdGl2ZTsKIH0KIAotYm9vbCBTcGVsbGluZ0NvcnJlY3Rpb25D
b250cm9sbGVyOjppc1NwZWxsaW5nTWFya2VyQWxsb3dlZChQYXNzUmVmUHRyPFJhbmdlPiBtaXNz
cGVsbGluZ1JhbmdlKSBjb25zdAorYm9vbCBBbHRlcm5hdGl2ZVRleHRDb250cm9sbGVyOjppc1Nw
ZWxsaW5nTWFya2VyQWxsb3dlZChQYXNzUmVmUHRyPFJhbmdlPiBtaXNzcGVsbGluZ1JhbmdlKSBj
b25zdAogewogICAgIHJldHVybiAhbV9mcmFtZS0+ZG9jdW1lbnQoKS0+bWFya2VycygpLT5oYXNN
YXJrZXJzKG1pc3NwZWxsaW5nUmFuZ2UuZ2V0KCksIERvY3VtZW50TWFya2VyOjpTcGVsbENoZWNr
aW5nRXhlbXB0aW9uKTsKIH0KIAotdm9pZCBTcGVsbGluZ0NvcnJlY3Rpb25Db250cm9sbGVyOjpz
aG93KFBhc3NSZWZQdHI8UmFuZ2U+IHJhbmdlVG9SZXBsYWNlLCBjb25zdCBTdHJpbmcmIHJlcGxh
Y2VtZW50KQordm9pZCBBbHRlcm5hdGl2ZVRleHRDb250cm9sbGVyOjpzaG93KFBhc3NSZWZQdHI8
UmFuZ2U+IHJhbmdlVG9SZXBsYWNlLCBjb25zdCBTdHJpbmcmIHJlcGxhY2VtZW50KQogewogICAg
IEZsb2F0UmVjdCBib3VuZGluZ0JveCA9IHJvb3RWaWV3UmVjdEZvclJhbmdlKHJhbmdlVG9SZXBs
YWNlLmdldCgpKTsKICAgICBpZiAoYm91bmRpbmdCb3guaXNFbXB0eSgpKQogICAgICAgICByZXR1
cm47Ci0gICAgbV9jb3JyZWN0aW9uUGFuZWxJbmZvLnJlcGxhY2VkU3RyaW5nID0gcGxhaW5UZXh0
KHJhbmdlVG9SZXBsYWNlLmdldCgpKTsKLSAgICBtX2NvcnJlY3Rpb25QYW5lbEluZm8ucmFuZ2VU
b0JlUmVwbGFjZWQgPSByYW5nZVRvUmVwbGFjZTsKLSAgICBtX2NvcnJlY3Rpb25QYW5lbEluZm8u
cmVwbGFjZW1lbnRTdHJpbmcgPSByZXBsYWNlbWVudDsKLSAgICBtX2NvcnJlY3Rpb25QYW5lbElu
Zm8uaXNBY3RpdmUgPSB0cnVlOwotICAgIGNsaWVudCgpLT5zaG93Q29ycmVjdGlvblBhbmVsKG1f
Y29ycmVjdGlvblBhbmVsSW5mby5wYW5lbFR5cGUsIGJvdW5kaW5nQm94LCBtX2NvcnJlY3Rpb25Q
YW5lbEluZm8ucmVwbGFjZWRTdHJpbmcsIHJlcGxhY2VtZW50LCBWZWN0b3I8U3RyaW5nPigpKTsK
KyAgICBtX2FsdGVybmF0aXZlVGV4dEluZm8ub3JpZ2luYWxUZXh0ID0gcGxhaW5UZXh0KHJhbmdl
VG9SZXBsYWNlLmdldCgpKTsKKyAgICBtX2FsdGVybmF0aXZlVGV4dEluZm8ucmFuZ2VXaXRoQWx0
ZXJuYXRpdmUgPSByYW5nZVRvUmVwbGFjZTsKKyAgICBtX2FsdGVybmF0aXZlVGV4dEluZm8uZGV0
YWlscyA9IEF1dG9jb3JyZWN0aW9uQWx0ZXJuYXRpdmVEZXRhaWxzOjpjcmVhdGUocmVwbGFjZW1l
bnQpOworICAgIG1fYWx0ZXJuYXRpdmVUZXh0SW5mby5pc0FjdGl2ZSA9IHRydWU7CisgICAgY2xp
ZW50KCktPnNob3dDb3JyZWN0aW9uUGFuZWwobV9hbHRlcm5hdGl2ZVRleHRJbmZvLnR5cGUsIGJv
dW5kaW5nQm94LCBtX2FsdGVybmF0aXZlVGV4dEluZm8ub3JpZ2luYWxUZXh0LCByZXBsYWNlbWVu
dCwgVmVjdG9yPFN0cmluZz4oKSk7CiB9CiAKLXZvaWQgU3BlbGxpbmdDb3JyZWN0aW9uQ29udHJv
bGxlcjo6aGFuZGxlQ2FuY2VsT3BlcmF0aW9uKCkKK3ZvaWQgQWx0ZXJuYXRpdmVUZXh0Q29udHJv
bGxlcjo6aGFuZGxlQ2FuY2VsT3BlcmF0aW9uKCkKIHsKLSAgICBpZiAoIW1fY29ycmVjdGlvblBh
bmVsSW5mby5pc0FjdGl2ZSkKKyAgICBpZiAoIW1fYWx0ZXJuYXRpdmVUZXh0SW5mby5pc0FjdGl2
ZSkKICAgICAgICAgcmV0dXJuOwotICAgIG1fY29ycmVjdGlvblBhbmVsSW5mby5pc0FjdGl2ZSA9
IGZhbHNlOwotICAgIGRpc21pc3MoUmVhc29uRm9yRGlzbWlzc2luZ0NvcnJlY3Rpb25QYW5lbENh
bmNlbGxlZCk7CisgICAgbV9hbHRlcm5hdGl2ZVRleHRJbmZvLmlzQWN0aXZlID0gZmFsc2U7Cisg
ICAgZGlzbWlzcyhSZWFzb25Gb3JEaXNtaXNzaW5nQWx0ZXJuYXRpdmVUZXh0Q2FuY2VsbGVkKTsK
IH0KIAotdm9pZCBTcGVsbGluZ0NvcnJlY3Rpb25Db250cm9sbGVyOjpkaXNtaXNzKFJlYXNvbkZv
ckRpc21pc3NpbmdDb3JyZWN0aW9uUGFuZWwgcmVhc29uRm9yRGlzbWlzc2luZykKK3ZvaWQgQWx0
ZXJuYXRpdmVUZXh0Q29udHJvbGxlcjo6ZGlzbWlzcyhSZWFzb25Gb3JEaXNtaXNzaW5nQWx0ZXJu
YXRpdmVUZXh0IHJlYXNvbkZvckRpc21pc3NpbmcpCiB7Ci0gICAgaWYgKCFtX2NvcnJlY3Rpb25Q
YW5lbEluZm8uaXNBY3RpdmUpCisgICAgaWYgKCFtX2FsdGVybmF0aXZlVGV4dEluZm8uaXNBY3Rp
dmUpCiAgICAgICAgIHJldHVybjsKLSAgICBtX2NvcnJlY3Rpb25QYW5lbEluZm8uaXNBY3RpdmUg
PSBmYWxzZTsKLSAgICBtX2NvcnJlY3Rpb25QYW5lbElzRGlzbWlzc2VkQnlFZGl0b3IgPSB0cnVl
OworICAgIG1fYWx0ZXJuYXRpdmVUZXh0SW5mby5pc0FjdGl2ZSA9IGZhbHNlOworICAgIG1faXNE
aXNtaXNzZWRCeUVkaXRpbmcgPSB0cnVlOwogICAgIGlmIChjbGllbnQoKSkKICAgICAgICAgY2xp
ZW50KCktPmRpc21pc3NDb3JyZWN0aW9uUGFuZWwocmVhc29uRm9yRGlzbWlzc2luZyk7CiB9CiAK
LVN0cmluZyBTcGVsbGluZ0NvcnJlY3Rpb25Db250cm9sbGVyOjpkaXNtaXNzU29vbihSZWFzb25G
b3JEaXNtaXNzaW5nQ29ycmVjdGlvblBhbmVsIHJlYXNvbkZvckRpc21pc3NpbmcpCitTdHJpbmcg
QWx0ZXJuYXRpdmVUZXh0Q29udHJvbGxlcjo6ZGlzbWlzc1Nvb24oUmVhc29uRm9yRGlzbWlzc2lu
Z0FsdGVybmF0aXZlVGV4dCByZWFzb25Gb3JEaXNtaXNzaW5nKQogewotICAgIGlmICghbV9jb3Jy
ZWN0aW9uUGFuZWxJbmZvLmlzQWN0aXZlKQorICAgIGlmICghbV9hbHRlcm5hdGl2ZVRleHRJbmZv
LmlzQWN0aXZlKQogICAgICAgICByZXR1cm4gU3RyaW5nKCk7Ci0gICAgbV9jb3JyZWN0aW9uUGFu
ZWxJbmZvLmlzQWN0aXZlID0gZmFsc2U7Ci0gICAgbV9jb3JyZWN0aW9uUGFuZWxJc0Rpc21pc3Nl
ZEJ5RWRpdG9yID0gdHJ1ZTsKKyAgICBtX2FsdGVybmF0aXZlVGV4dEluZm8uaXNBY3RpdmUgPSBm
YWxzZTsKKyAgICBtX2lzRGlzbWlzc2VkQnlFZGl0aW5nID0gdHJ1ZTsKICAgICBpZiAoIWNsaWVu
dCgpKQogICAgICAgICByZXR1cm4gU3RyaW5nKCk7CiAgICAgcmV0dXJuIGNsaWVudCgpLT5kaXNt
aXNzQ29ycmVjdGlvblBhbmVsU29vbihyZWFzb25Gb3JEaXNtaXNzaW5nKTsKIH0KIAotdm9pZCBT
cGVsbGluZ0NvcnJlY3Rpb25Db250cm9sbGVyOjphcHBseUNvcnJlY3Rpb25QYW5lbEluZm8oY29u
c3QgVmVjdG9yPERvY3VtZW50TWFya2VyOjpNYXJrZXJUeXBlPiYgbWFya2VyVHlwZXNUb0FkZCkK
K3ZvaWQgQWx0ZXJuYXRpdmVUZXh0Q29udHJvbGxlcjo6YXBwbHlBbHRlcm5hdGl2ZVRleHQoY29u
c3QgU3RyaW5nJiBhbHRlcm5hdGl2ZSwgY29uc3QgVmVjdG9yPERvY3VtZW50TWFya2VyOjpNYXJr
ZXJUeXBlPiYgbWFya2VyVHlwZXNUb0FkZCkKIHsKLSAgICBpZiAoIW1fY29ycmVjdGlvblBhbmVs
SW5mby5yYW5nZVRvQmVSZXBsYWNlZCkKKyAgICBpZiAoIW1fYWx0ZXJuYXRpdmVUZXh0SW5mby5y
YW5nZVdpdGhBbHRlcm5hdGl2ZSkKICAgICAgICAgcmV0dXJuOwogCiAgICAgRXhjZXB0aW9uQ29k
ZSBlYyA9IDA7Ci0gICAgUmVmUHRyPFJhbmdlPiBwYXJhZ3JhcGhSYW5nZUNvbnRhaW5pbmdDb3Jy
ZWN0aW9uID0gbV9jb3JyZWN0aW9uUGFuZWxJbmZvLnJhbmdlVG9CZVJlcGxhY2VkLT5jbG9uZVJh
bmdlKGVjKTsKKyAgICBSZWZQdHI8UmFuZ2U+IHBhcmFncmFwaFJhbmdlQ29udGFpbmluZ0NvcnJl
Y3Rpb24gPSBtX2FsdGVybmF0aXZlVGV4dEluZm8ucmFuZ2VXaXRoQWx0ZXJuYXRpdmUtPmNsb25l
UmFuZ2UoZWMpOwogICAgIGlmIChlYykKICAgICAgICAgcmV0dXJuOwogCi0gICAgc2V0U3RhcnQo
cGFyYWdyYXBoUmFuZ2VDb250YWluaW5nQ29ycmVjdGlvbi5nZXQoKSwgc3RhcnRPZlBhcmFncmFw
aChtX2NvcnJlY3Rpb25QYW5lbEluZm8ucmFuZ2VUb0JlUmVwbGFjZWQtPnN0YXJ0UG9zaXRpb24o
KSkpOwotICAgIHNldEVuZChwYXJhZ3JhcGhSYW5nZUNvbnRhaW5pbmdDb3JyZWN0aW9uLmdldCgp
LCBlbmRPZlBhcmFncmFwaChtX2NvcnJlY3Rpb25QYW5lbEluZm8ucmFuZ2VUb0JlUmVwbGFjZWQt
PmVuZFBvc2l0aW9uKCkpKTsKKyAgICBzZXRTdGFydChwYXJhZ3JhcGhSYW5nZUNvbnRhaW5pbmdD
b3JyZWN0aW9uLmdldCgpLCBzdGFydE9mUGFyYWdyYXBoKG1fYWx0ZXJuYXRpdmVUZXh0SW5mby5y
YW5nZVdpdGhBbHRlcm5hdGl2ZS0+c3RhcnRQb3NpdGlvbigpKSk7CisgICAgc2V0RW5kKHBhcmFn
cmFwaFJhbmdlQ29udGFpbmluZ0NvcnJlY3Rpb24uZ2V0KCksIGVuZE9mUGFyYWdyYXBoKG1fYWx0
ZXJuYXRpdmVUZXh0SW5mby5yYW5nZVdpdGhBbHRlcm5hdGl2ZS0+ZW5kUG9zaXRpb24oKSkpOwog
Ci0gICAgLy8gQWZ0ZXIgd2UgcmVwbGFjZSB0aGUgd29yZCBhdCByYW5nZSByYW5nZVRvQmVSZXBs
YWNlZCwgd2UgbmVlZCB0byBhZGQgbWFya2VycyB0byB0aGF0IHJhbmdlLgotICAgIC8vIEhvd2V2
ZXIsIG9uY2UgdGhlIHJlcGxhY2VtZW50IHRvb2sgcGxhY2UsIHRoZSB2YWx1ZSBvZiByYW5nZVRv
QmVSZXBsYWNlZCBpcyBub3QgdmFsaWQgYW55bW9yZS4KLSAgICAvLyBTbyBiZWZvcmUgd2UgY2Fy
cnkgb3V0IHRoZSByZXBsYWNlbWVudCwgd2UgbmVlZCB0byBzdG9yZSB0aGUgc3RhcnQgcG9zaXRp
b24gb2YgcmFuZ2VUb0JlUmVwbGFjZWQKKyAgICAvLyBBZnRlciB3ZSByZXBsYWNlIHRoZSB3b3Jk
IGF0IHJhbmdlIHJhbmdlV2l0aEFsdGVybmF0aXZlLCB3ZSBuZWVkIHRvIGFkZCBtYXJrZXJzIHRv
IHRoYXQgcmFuZ2UuCisgICAgLy8gSG93ZXZlciwgb25jZSB0aGUgcmVwbGFjZW1lbnQgdG9vayBw
bGFjZSwgdGhlIHZhbHVlIG9mIHJhbmdlV2l0aEFsdGVybmF0aXZlIGlzIG5vdCB2YWxpZCBhbnlt
b3JlLgorICAgIC8vIFNvIGJlZm9yZSB3ZSBjYXJyeSBvdXQgdGhlIHJlcGxhY2VtZW50LCB3ZSBu
ZWVkIHRvIHN0b3JlIHRoZSBzdGFydCBwb3NpdGlvbiBvZiByYW5nZVdpdGhBbHRlcm5hdGl2ZQog
ICAgIC8vIHJlbGF0aXZlIHRvIHRoZSBzdGFydCBwb3NpdGlvbiBvZiB0aGUgY29udGFpbmluZyBw
YXJhZ3JhcGguIFdlIHVzZSBjb3JyZWN0aW9uU3RhcnRPZmZzZXRJblBhcmFncmFwaAogICAgIC8v
IHRvIHN0b3JlIHRoaXMgdmFsdWUuIEluIG9yZGVyIHRvIG9idGFpbiB0aGlzIG9mZnNldCwgd2Ug
bmVlZCB0byBmaXJzdCBjcmVhdGUgYSByYW5nZQotICAgIC8vIHdoaWNoIHNwYW5zIGZyb20gdGhl
IHN0YXJ0IG9mIHBhcmFncmFwaCB0byB0aGUgc3RhcnQgcG9zaXRpb24gb2YgcmFuZ2VUb0JlUmVw
bGFjZWQuCisgICAgLy8gd2hpY2ggc3BhbnMgZnJvbSB0aGUgc3RhcnQgb2YgcGFyYWdyYXBoIHRv
IHRoZSBzdGFydCBwb3NpdGlvbiBvZiByYW5nZVdpdGhBbHRlcm5hdGl2ZS4KICAgICBSZWZQdHI8
UmFuZ2U+IGNvcnJlY3Rpb25TdGFydE9mZnNldEluUGFyYWdyYXBoQXNSYW5nZSA9IFJhbmdlOjpj
cmVhdGUocGFyYWdyYXBoUmFuZ2VDb250YWluaW5nQ29ycmVjdGlvbi0+c3RhcnRDb250YWluZXIo
ZWMpLT5kb2N1bWVudCgpLCBwYXJhZ3JhcGhSYW5nZUNvbnRhaW5pbmdDb3JyZWN0aW9uLT5zdGFy
dFBvc2l0aW9uKCksIHBhcmFncmFwaFJhbmdlQ29udGFpbmluZ0NvcnJlY3Rpb24tPnN0YXJ0UG9z
aXRpb24oKSk7CiAgICAgaWYgKGVjKQogICAgICAgICByZXR1cm47CiAKLSAgICBQb3NpdGlvbiBz
dGFydFBvc2l0aW9uT2ZSYW5nZVRvQmVSZXBsYWNlZCA9IG1fY29ycmVjdGlvblBhbmVsSW5mby5y
YW5nZVRvQmVSZXBsYWNlZC0+c3RhcnRQb3NpdGlvbigpOwotICAgIGNvcnJlY3Rpb25TdGFydE9m
ZnNldEluUGFyYWdyYXBoQXNSYW5nZS0+c2V0RW5kKHN0YXJ0UG9zaXRpb25PZlJhbmdlVG9CZVJl
cGxhY2VkLmNvbnRhaW5lck5vZGUoKSwgc3RhcnRQb3NpdGlvbk9mUmFuZ2VUb0JlUmVwbGFjZWQu
Y29tcHV0ZU9mZnNldEluQ29udGFpbmVyTm9kZSgpLCBlYyk7CisgICAgUG9zaXRpb24gc3RhcnRQ
b3NpdGlvbk9mcmFuZ2VXaXRoQWx0ZXJuYXRpdmUgPSBtX2FsdGVybmF0aXZlVGV4dEluZm8ucmFu
Z2VXaXRoQWx0ZXJuYXRpdmUtPnN0YXJ0UG9zaXRpb24oKTsKKyAgICBjb3JyZWN0aW9uU3RhcnRP
ZmZzZXRJblBhcmFncmFwaEFzUmFuZ2UtPnNldEVuZChzdGFydFBvc2l0aW9uT2ZyYW5nZVdpdGhB
bHRlcm5hdGl2ZS5jb250YWluZXJOb2RlKCksIHN0YXJ0UG9zaXRpb25PZnJhbmdlV2l0aEFsdGVy
bmF0aXZlLmNvbXB1dGVPZmZzZXRJbkNvbnRhaW5lck5vZGUoKSwgZWMpOwogICAgIGlmIChlYykK
ICAgICAgICAgcmV0dXJuOwogCkBAIC0yMjYsMTQgKzI0MiwxNCBAQCB2b2lkIFNwZWxsaW5nQ29y
cmVjdGlvbkNvbnRyb2xsZXI6OmFwcGx5CiAgICAgaW50IGNvcnJlY3Rpb25TdGFydE9mZnNldElu
UGFyYWdyYXBoID0gVGV4dEl0ZXJhdG9yOjpyYW5nZUxlbmd0aChjb3JyZWN0aW9uU3RhcnRPZmZz
ZXRJblBhcmFncmFwaEFzUmFuZ2UuZ2V0KCkpOwogCiAgICAgLy8gQ2xvbmUgdGhlIHJhbmdlLCBz
aW5jZSB0aGUgY2FsbGVyIG9mIHRoaXMgbWV0aG9kIG1heSB3YW50IHRvIGtlZXAgdGhlIG9yaWdp
bmFsIHJhbmdlIGFyb3VuZC4KLSAgICBSZWZQdHI8UmFuZ2U+IHJhbmdlVG9CZVJlcGxhY2VkID0g
bV9jb3JyZWN0aW9uUGFuZWxJbmZvLnJhbmdlVG9CZVJlcGxhY2VkLT5jbG9uZVJhbmdlKGVjKTsK
LSAgICBhcHBseUNvbW1hbmQoU3BlbGxpbmdDb3JyZWN0aW9uQ29tbWFuZDo6Y3JlYXRlKHJhbmdl
VG9CZVJlcGxhY2VkLCBtX2NvcnJlY3Rpb25QYW5lbEluZm8ucmVwbGFjZW1lbnRTdHJpbmcpKTsK
KyAgICBSZWZQdHI8UmFuZ2U+IHJhbmdlV2l0aEFsdGVybmF0aXZlID0gbV9hbHRlcm5hdGl2ZVRl
eHRJbmZvLnJhbmdlV2l0aEFsdGVybmF0aXZlLT5jbG9uZVJhbmdlKGVjKTsKKyAgICBhcHBseUNv
bW1hbmQoU3BlbGxpbmdDb3JyZWN0aW9uQ29tbWFuZDo6Y3JlYXRlKHJhbmdlV2l0aEFsdGVybmF0
aXZlLCBhbHRlcm5hdGl2ZSkpOwogICAgIHNldEVuZChwYXJhZ3JhcGhSYW5nZUNvbnRhaW5pbmdD
b3JyZWN0aW9uLmdldCgpLCBtX2ZyYW1lLT5zZWxlY3Rpb24oKS0+c2VsZWN0aW9uKCkuc3RhcnQo
KSk7Ci0gICAgUmVmUHRyPFJhbmdlPiByZXBsYWNlbWVudFJhbmdlID0gVGV4dEl0ZXJhdG9yOjpz
dWJyYW5nZShwYXJhZ3JhcGhSYW5nZUNvbnRhaW5pbmdDb3JyZWN0aW9uLmdldCgpLCBjb3JyZWN0
aW9uU3RhcnRPZmZzZXRJblBhcmFncmFwaCwgIG1fY29ycmVjdGlvblBhbmVsSW5mby5yZXBsYWNl
bWVudFN0cmluZy5sZW5ndGgoKSk7CisgICAgUmVmUHRyPFJhbmdlPiByZXBsYWNlbWVudFJhbmdl
ID0gVGV4dEl0ZXJhdG9yOjpzdWJyYW5nZShwYXJhZ3JhcGhSYW5nZUNvbnRhaW5pbmdDb3JyZWN0
aW9uLmdldCgpLCBjb3JyZWN0aW9uU3RhcnRPZmZzZXRJblBhcmFncmFwaCwgYWx0ZXJuYXRpdmUu
bGVuZ3RoKCkpOwogICAgIFN0cmluZyBuZXdUZXh0ID0gcGxhaW5UZXh0KHJlcGxhY2VtZW50UmFu
Z2UuZ2V0KCkpOwogCiAgICAgLy8gQ2hlY2sgdG8gc2VlIGlmIHJlcGxhY2VtZW50IHN1Y2NlZWRl
ZC4KLSAgICBpZiAobmV3VGV4dCAhPSBtX2NvcnJlY3Rpb25QYW5lbEluZm8ucmVwbGFjZW1lbnRT
dHJpbmcpCisgICAgaWYgKG5ld1RleHQgIT0gYWx0ZXJuYXRpdmUpCiAgICAgICAgIHJldHVybjsK
IAogICAgIERvY3VtZW50TWFya2VyQ29udHJvbGxlciogbWFya2VycyA9IHJlcGxhY2VtZW50UmFu
Z2UtPnN0YXJ0Q29udGFpbmVyKCktPmRvY3VtZW50KCktPm1hcmtlcnMoKTsKQEAgLTI0MSwzNCAr
MjU3LDM0IEBAIHZvaWQgU3BlbGxpbmdDb3JyZWN0aW9uQ29udHJvbGxlcjo6YXBwbHkKICAgICBm
b3IgKHNpemVfdCBpID0gMDsgaSA8IHNpemU7ICsraSkgewogICAgICAgICBEb2N1bWVudE1hcmtl
cjo6TWFya2VyVHlwZSBtYXJrZXJUeXBlID0gbWFya2VyVHlwZXNUb0FkZFtpXTsKICAgICAgICAg
U3RyaW5nIGRlc2NyaXB0aW9uOwotICAgICAgICBpZiAobV9jb3JyZWN0aW9uUGFuZWxJbmZvLnBh
bmVsVHlwZSAhPSBDb3JyZWN0aW9uUGFuZWxJbmZvOjpQYW5lbFR5cGVSZXZlcnNpb24gJiYgKG1h
cmtlclR5cGUgPT0gRG9jdW1lbnRNYXJrZXI6OlJlcGxhY2VtZW50IHx8IG1hcmtlclR5cGUgPT0g
RG9jdW1lbnRNYXJrZXI6OkF1dG9jb3JyZWN0ZWQpKQotICAgICAgICAgICAgZGVzY3JpcHRpb24g
PSBtX2NvcnJlY3Rpb25QYW5lbEluZm8ucmVwbGFjZWRTdHJpbmc7CisgICAgICAgIGlmIChtX2Fs
dGVybmF0aXZlVGV4dEluZm8udHlwZSAhPSBBbHRlcm5hdGl2ZVRleHRUeXBlUmV2ZXJzaW9uICYm
IChtYXJrZXJUeXBlID09IERvY3VtZW50TWFya2VyOjpSZXBsYWNlbWVudCB8fCBtYXJrZXJUeXBl
ID09IERvY3VtZW50TWFya2VyOjpBdXRvY29ycmVjdGVkKSkKKyAgICAgICAgICAgIGRlc2NyaXB0
aW9uID0gbV9hbHRlcm5hdGl2ZVRleHRJbmZvLm9yaWdpbmFsVGV4dDsKICAgICAgICAgbWFya2Vy
cy0+YWRkTWFya2VyKHJlcGxhY2VtZW50UmFuZ2UuZ2V0KCksIG1hcmtlclR5cGUsIGRlc2NyaXB0
aW9uKTsKICAgICB9CiB9CiAKLWJvb2wgU3BlbGxpbmdDb3JyZWN0aW9uQ29udHJvbGxlcjo6YXBw
bHlBdXRvY29ycmVjdGlvbkJlZm9yZVR5cGluZ0lmQXBwcm9wcmlhdGUoKQorYm9vbCBBbHRlcm5h
dGl2ZVRleHRDb250cm9sbGVyOjphcHBseUF1dG9jb3JyZWN0aW9uQmVmb3JlVHlwaW5nSWZBcHBy
b3ByaWF0ZSgpCiB7Ci0gICAgaWYgKCFtX2NvcnJlY3Rpb25QYW5lbEluZm8ucmFuZ2VUb0JlUmVw
bGFjZWQgfHwgIW1fY29ycmVjdGlvblBhbmVsSW5mby5pc0FjdGl2ZSkKKyAgICBpZiAoIW1fYWx0
ZXJuYXRpdmVUZXh0SW5mby5yYW5nZVdpdGhBbHRlcm5hdGl2ZSB8fCAhbV9hbHRlcm5hdGl2ZVRl
eHRJbmZvLmlzQWN0aXZlKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKLSAgICBpZiAobV9jb3Jy
ZWN0aW9uUGFuZWxJbmZvLnBhbmVsVHlwZSAhPSBDb3JyZWN0aW9uUGFuZWxJbmZvOjpQYW5lbFR5
cGVDb3JyZWN0aW9uKQorICAgIGlmIChtX2FsdGVybmF0aXZlVGV4dEluZm8udHlwZSAhPSBBbHRl
cm5hdGl2ZVRleHRUeXBlQ29ycmVjdGlvbikKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCiAgICAg
UG9zaXRpb24gY2FyZXRQb3NpdGlvbiA9IG1fZnJhbWUtPnNlbGVjdGlvbigpLT5zZWxlY3Rpb24o
KS5zdGFydCgpOwogCi0gICAgaWYgKG1fY29ycmVjdGlvblBhbmVsSW5mby5yYW5nZVRvQmVSZXBs
YWNlZC0+ZW5kUG9zaXRpb24oKSA9PSBjYXJldFBvc2l0aW9uKSB7Ci0gICAgICAgIGhhbmRsZUNv
cnJlY3Rpb25QYW5lbFJlc3VsdChkaXNtaXNzU29vbihSZWFzb25Gb3JEaXNtaXNzaW5nQ29ycmVj
dGlvblBhbmVsQWNjZXB0ZWQpKTsKKyAgICBpZiAobV9hbHRlcm5hdGl2ZVRleHRJbmZvLnJhbmdl
V2l0aEFsdGVybmF0aXZlLT5lbmRQb3NpdGlvbigpID09IGNhcmV0UG9zaXRpb24pIHsKKyAgICAg
ICAgaGFuZGxlQWx0ZXJuYXRpdmVUZXh0VUlSZXN1bHQoZGlzbWlzc1Nvb24oUmVhc29uRm9yRGlz
bWlzc2luZ0FsdGVybmF0aXZlVGV4dEFjY2VwdGVkKSk7CiAgICAgICAgIHJldHVybiB0cnVlOwog
ICAgIH0gCiAgICAgCiAgICAgLy8gUGVuZGluZyBjb3JyZWN0aW9uIHNob3VsZCBhbHdheXMgYmUg
d2hlcmUgY2FyZXQgaXMuIEJ1dCBpbiBjYXNlIHRoaXMgaXMgbm90IGFsd2F5cyB0cnVlLCB3ZSBz
dGlsbCB3YW50IHRvIGRpc21pc3MgdGhlIHBhbmVsIHdpdGhvdXQgYWNjZXB0aW5nIHRoZSBjb3Jy
ZWN0aW9uLgotICAgIEFTU0VSVChtX2NvcnJlY3Rpb25QYW5lbEluZm8ucmFuZ2VUb0JlUmVwbGFj
ZWQtPmVuZFBvc2l0aW9uKCkgPT0gY2FyZXRQb3NpdGlvbik7Ci0gICAgZGlzbWlzcyhSZWFzb25G
b3JEaXNtaXNzaW5nQ29ycmVjdGlvblBhbmVsSWdub3JlZCk7CisgICAgQVNTRVJUKG1fYWx0ZXJu
YXRpdmVUZXh0SW5mby5yYW5nZVdpdGhBbHRlcm5hdGl2ZS0+ZW5kUG9zaXRpb24oKSA9PSBjYXJl
dFBvc2l0aW9uKTsKKyAgICBkaXNtaXNzKFJlYXNvbkZvckRpc21pc3NpbmdBbHRlcm5hdGl2ZVRl
eHRJZ25vcmVkKTsKICAgICByZXR1cm4gZmFsc2U7CiB9CiAKLXZvaWQgU3BlbGxpbmdDb3JyZWN0
aW9uQ29udHJvbGxlcjo6cmVzcG9uZFRvVW5hcHBsaWVkU3BlbGxDb3JyZWN0aW9uKGNvbnN0IFZp
c2libGVTZWxlY3Rpb24mIHNlbGVjdGlvbk9mQ29ycmVjdGVkLCBjb25zdCBTdHJpbmcmIGNvcnJl
Y3RlZCwgY29uc3QgU3RyaW5nJiBjb3JyZWN0aW9uKQordm9pZCBBbHRlcm5hdGl2ZVRleHRDb250
cm9sbGVyOjpyZXNwb25kVG9VbmFwcGxpZWRTcGVsbENvcnJlY3Rpb24oY29uc3QgVmlzaWJsZVNl
bGVjdGlvbiYgc2VsZWN0aW9uT2ZDb3JyZWN0ZWQsIGNvbnN0IFN0cmluZyYgY29ycmVjdGVkLCBj
b25zdCBTdHJpbmcmIGNvcnJlY3Rpb24pCiB7CiAgICAgY2xpZW50KCktPnJlY29yZEF1dG9jb3Jy
ZWN0aW9uUmVzcG9uc2UoRWRpdG9yQ2xpZW50OjpBdXRvY29ycmVjdGlvblJldmVydGVkLCBjb3Jy
ZWN0ZWQsIGNvcnJlY3Rpb24pOwogICAgIG1fZnJhbWUtPmRvY3VtZW50KCktPnVwZGF0ZUxheW91
dCgpOwpAQCAtMjgxLDExICsyOTcsMTEgQEAgdm9pZCBTcGVsbGluZ0NvcnJlY3Rpb25Db250cm9s
bGVyOjpyZXNwbwogICAgIG1hcmtlcnMtPmFkZE1hcmtlcihyYW5nZS5nZXQoKSwgRG9jdW1lbnRN
YXJrZXI6OlNwZWxsQ2hlY2tpbmdFeGVtcHRpb24pOwogfQogCi12b2lkIFNwZWxsaW5nQ29ycmVj
dGlvbkNvbnRyb2xsZXI6OmNvcnJlY3Rpb25QYW5lbFRpbWVyRmlyZWQoVGltZXI8U3BlbGxpbmdD
b3JyZWN0aW9uQ29udHJvbGxlcj4qKQordm9pZCBBbHRlcm5hdGl2ZVRleHRDb250cm9sbGVyOjp0
aW1lckZpcmVkKFRpbWVyPEFsdGVybmF0aXZlVGV4dENvbnRyb2xsZXI+KikKIHsKLSAgICBtX2Nv
cnJlY3Rpb25QYW5lbElzRGlzbWlzc2VkQnlFZGl0b3IgPSBmYWxzZTsKLSAgICBzd2l0Y2ggKG1f
Y29ycmVjdGlvblBhbmVsSW5mby5wYW5lbFR5cGUpIHsKLSAgICBjYXNlIENvcnJlY3Rpb25QYW5l
bEluZm86OlBhbmVsVHlwZUNvcnJlY3Rpb246IHsKKyAgICBtX2lzRGlzbWlzc2VkQnlFZGl0aW5n
ID0gZmFsc2U7CisgICAgc3dpdGNoIChtX2FsdGVybmF0aXZlVGV4dEluZm8udHlwZSkgeworICAg
IGNhc2UgQWx0ZXJuYXRpdmVUZXh0VHlwZUNvcnJlY3Rpb246IHsKICAgICAgICAgVmlzaWJsZVNl
bGVjdGlvbiBzZWxlY3Rpb24obV9mcmFtZS0+c2VsZWN0aW9uKCktPnNlbGVjdGlvbigpKTsKICAg
ICAgICAgVmlzaWJsZVBvc2l0aW9uIHN0YXJ0KHNlbGVjdGlvbi5zdGFydCgpLCBzZWxlY3Rpb24u
YWZmaW5pdHkoKSk7CiAgICAgICAgIFZpc2libGVQb3NpdGlvbiBwID0gc3RhcnRPZldvcmQoc3Rh
cnQsIExlZnRXb3JkSWZPbkJvdW5kYXJ5KTsKQEAgLTI5Myw3NiArMzA5LDc1IEBAIHZvaWQgU3Bl
bGxpbmdDb3JyZWN0aW9uQ29udHJvbGxlcjo6Y29ycmUKICAgICAgICAgbV9mcmFtZS0+ZWRpdG9y
KCktPm1hcmtBbGxNaXNzcGVsbGluZ3NBbmRCYWRHcmFtbWFySW5SYW5nZXMoVGV4dENoZWNraW5n
VHlwZVNwZWxsaW5nIHwgVGV4dENoZWNraW5nVHlwZVNob3dDb3JyZWN0aW9uUGFuZWwsIGFkamFj
ZW50V29yZHMudG9Ob3JtYWxpemVkUmFuZ2UoKS5nZXQoKSwgMCk7CiAgICAgfQogICAgICAgICBi
cmVhazsKLSAgICBjYXNlIENvcnJlY3Rpb25QYW5lbEluZm86OlBhbmVsVHlwZVJldmVyc2lvbjog
ewotICAgICAgICBpZiAoIW1fY29ycmVjdGlvblBhbmVsSW5mby5yYW5nZVRvQmVSZXBsYWNlZCkK
KyAgICBjYXNlIEFsdGVybmF0aXZlVGV4dFR5cGVSZXZlcnNpb246IHsKKyAgICAgICAgaWYgKCFt
X2FsdGVybmF0aXZlVGV4dEluZm8ucmFuZ2VXaXRoQWx0ZXJuYXRpdmUpCiAgICAgICAgICAgICBi
cmVhazsKLSAgICAgICAgbV9jb3JyZWN0aW9uUGFuZWxJbmZvLmlzQWN0aXZlID0gdHJ1ZTsKLSAg
ICAgICAgbV9jb3JyZWN0aW9uUGFuZWxJbmZvLnJlcGxhY2VkU3RyaW5nID0gcGxhaW5UZXh0KG1f
Y29ycmVjdGlvblBhbmVsSW5mby5yYW5nZVRvQmVSZXBsYWNlZC5nZXQoKSk7Ci0gICAgICAgIEZs
b2F0UmVjdCBib3VuZGluZ0JveCA9IHJvb3RWaWV3UmVjdEZvclJhbmdlKG1fY29ycmVjdGlvblBh
bmVsSW5mby5yYW5nZVRvQmVSZXBsYWNlZC5nZXQoKSk7Ci0gICAgICAgIGlmICghYm91bmRpbmdC
b3guaXNFbXB0eSgpKQotICAgICAgICAgICAgY2xpZW50KCktPnNob3dDb3JyZWN0aW9uUGFuZWwo
bV9jb3JyZWN0aW9uUGFuZWxJbmZvLnBhbmVsVHlwZSwgYm91bmRpbmdCb3gsIG1fY29ycmVjdGlv
blBhbmVsSW5mby5yZXBsYWNlZFN0cmluZywgbV9jb3JyZWN0aW9uUGFuZWxJbmZvLnJlcGxhY2Vt
ZW50U3RyaW5nLCBWZWN0b3I8U3RyaW5nPigpKTsKKyAgICAgICAgbV9hbHRlcm5hdGl2ZVRleHRJ
bmZvLmlzQWN0aXZlID0gdHJ1ZTsKKyAgICAgICAgbV9hbHRlcm5hdGl2ZVRleHRJbmZvLm9yaWdp
bmFsVGV4dCA9IHBsYWluVGV4dChtX2FsdGVybmF0aXZlVGV4dEluZm8ucmFuZ2VXaXRoQWx0ZXJu
YXRpdmUuZ2V0KCkpOworICAgICAgICBGbG9hdFJlY3QgYm91bmRpbmdCb3ggPSByb290Vmlld1Jl
Y3RGb3JSYW5nZShtX2FsdGVybmF0aXZlVGV4dEluZm8ucmFuZ2VXaXRoQWx0ZXJuYXRpdmUuZ2V0
KCkpOworICAgICAgICBpZiAoIWJvdW5kaW5nQm94LmlzRW1wdHkoKSkgeworICAgICAgICAgICAg
Y29uc3QgQXV0b2NvcnJlY3Rpb25BbHRlcm5hdGl2ZURldGFpbHMqIGRldGFpbHMgPSBzdGF0aWNf
Y2FzdDxjb25zdCBBdXRvY29ycmVjdGlvbkFsdGVybmF0aXZlRGV0YWlscyo+KG1fYWx0ZXJuYXRp
dmVUZXh0SW5mby5kZXRhaWxzLmdldCgpKTsKKyAgICAgICAgICAgIGNsaWVudCgpLT5zaG93Q29y
cmVjdGlvblBhbmVsKG1fYWx0ZXJuYXRpdmVUZXh0SW5mby50eXBlLCBib3VuZGluZ0JveCwgbV9h
bHRlcm5hdGl2ZVRleHRJbmZvLm9yaWdpbmFsVGV4dCwgZGV0YWlscy0+cmVwbGFjZW1lbnRTdHJp
bmcoKSwgVmVjdG9yPFN0cmluZz4oKSk7CisgICAgICAgIH0KICAgICB9CiAgICAgICAgIGJyZWFr
OwotICAgIGNhc2UgQ29ycmVjdGlvblBhbmVsSW5mbzo6UGFuZWxUeXBlU3BlbGxpbmdTdWdnZXN0
aW9uczogewotICAgICAgICBpZiAoIW1fY29ycmVjdGlvblBhbmVsSW5mby5yYW5nZVRvQmVSZXBs
YWNlZCB8fCBwbGFpblRleHQobV9jb3JyZWN0aW9uUGFuZWxJbmZvLnJhbmdlVG9CZVJlcGxhY2Vk
LmdldCgpKSAhPSBtX2NvcnJlY3Rpb25QYW5lbEluZm8ucmVwbGFjZWRTdHJpbmcpCisgICAgY2Fz
ZSBBbHRlcm5hdGl2ZVRleHRUeXBlU3BlbGxpbmdTdWdnZXN0aW9uczogeworICAgICAgICBpZiAo
IW1fYWx0ZXJuYXRpdmVUZXh0SW5mby5yYW5nZVdpdGhBbHRlcm5hdGl2ZSB8fCBwbGFpblRleHQo
bV9hbHRlcm5hdGl2ZVRleHRJbmZvLnJhbmdlV2l0aEFsdGVybmF0aXZlLmdldCgpKSAhPSBtX2Fs
dGVybmF0aXZlVGV4dEluZm8ub3JpZ2luYWxUZXh0KQogICAgICAgICAgICAgYnJlYWs7Ci0gICAg
ICAgIFN0cmluZyBwYXJhZ3JhcGhUZXh0ID0gcGxhaW5UZXh0KFRleHRDaGVja2luZ1BhcmFncmFw
aChtX2NvcnJlY3Rpb25QYW5lbEluZm8ucmFuZ2VUb0JlUmVwbGFjZWQpLnBhcmFncmFwaFJhbmdl
KCkuZ2V0KCkpOworICAgICAgICBTdHJpbmcgcGFyYWdyYXBoVGV4dCA9IHBsYWluVGV4dChUZXh0
Q2hlY2tpbmdQYXJhZ3JhcGgobV9hbHRlcm5hdGl2ZVRleHRJbmZvLnJhbmdlV2l0aEFsdGVybmF0
aXZlKS5wYXJhZ3JhcGhSYW5nZSgpLmdldCgpKTsKICAgICAgICAgVmVjdG9yPFN0cmluZz4gc3Vn
Z2VzdGlvbnM7Ci0gICAgICAgIHRleHRDaGVja2VyKCktPmdldEd1ZXNzZXNGb3JXb3JkKG1fY29y
cmVjdGlvblBhbmVsSW5mby5yZXBsYWNlZFN0cmluZywgcGFyYWdyYXBoVGV4dCwgc3VnZ2VzdGlv
bnMpOworICAgICAgICB0ZXh0Q2hlY2tlcigpLT5nZXRHdWVzc2VzRm9yV29yZChtX2FsdGVybmF0
aXZlVGV4dEluZm8ub3JpZ2luYWxUZXh0LCBwYXJhZ3JhcGhUZXh0LCBzdWdnZXN0aW9ucyk7CiAg
ICAgICAgIGlmIChzdWdnZXN0aW9ucy5pc0VtcHR5KCkpIHsKLSAgICAgICAgICAgIG1fY29ycmVj
dGlvblBhbmVsSW5mby5yYW5nZVRvQmVSZXBsYWNlZC5jbGVhcigpOworICAgICAgICAgICAgbV9h
bHRlcm5hdGl2ZVRleHRJbmZvLnJhbmdlV2l0aEFsdGVybmF0aXZlLmNsZWFyKCk7CiAgICAgICAg
ICAgICBicmVhazsKICAgICAgICAgfQogICAgICAgICBTdHJpbmcgdG9wU3VnZ2VzdGlvbiA9IHN1
Z2dlc3Rpb25zLmZpcnN0KCk7CiAgICAgICAgIHN1Z2dlc3Rpb25zLnJlbW92ZSgwKTsKLSAgICAg
ICAgbV9jb3JyZWN0aW9uUGFuZWxJbmZvLmlzQWN0aXZlID0gdHJ1ZTsKLSAgICAgICAgRmxvYXRS
ZWN0IGJvdW5kaW5nQm94ID0gcm9vdFZpZXdSZWN0Rm9yUmFuZ2UobV9jb3JyZWN0aW9uUGFuZWxJ
bmZvLnJhbmdlVG9CZVJlcGxhY2VkLmdldCgpKTsKKyAgICAgICAgbV9hbHRlcm5hdGl2ZVRleHRJ
bmZvLmlzQWN0aXZlID0gdHJ1ZTsKKyAgICAgICAgRmxvYXRSZWN0IGJvdW5kaW5nQm94ID0gcm9v
dFZpZXdSZWN0Rm9yUmFuZ2UobV9hbHRlcm5hdGl2ZVRleHRJbmZvLnJhbmdlV2l0aEFsdGVybmF0
aXZlLmdldCgpKTsKICAgICAgICAgaWYgKCFib3VuZGluZ0JveC5pc0VtcHR5KCkpCi0gICAgICAg
ICAgICBjbGllbnQoKS0+c2hvd0NvcnJlY3Rpb25QYW5lbChtX2NvcnJlY3Rpb25QYW5lbEluZm8u
cGFuZWxUeXBlLCBib3VuZGluZ0JveCwgbV9jb3JyZWN0aW9uUGFuZWxJbmZvLnJlcGxhY2VkU3Ry
aW5nLCB0b3BTdWdnZXN0aW9uLCBzdWdnZXN0aW9ucyk7CisgICAgICAgICAgICBjbGllbnQoKS0+
c2hvd0NvcnJlY3Rpb25QYW5lbChtX2FsdGVybmF0aXZlVGV4dEluZm8udHlwZSwgYm91bmRpbmdC
b3gsIG1fYWx0ZXJuYXRpdmVUZXh0SW5mby5vcmlnaW5hbFRleHQsIHRvcFN1Z2dlc3Rpb24sIHN1
Z2dlc3Rpb25zKTsKICAgICB9CiAgICAgICAgIGJyZWFrOwogICAgIH0KIH0KIAotdm9pZCBTcGVs
bGluZ0NvcnJlY3Rpb25Db250cm9sbGVyOjpoYW5kbGVDb3JyZWN0aW9uUGFuZWxSZXN1bHQoY29u
c3QgU3RyaW5nJiBjb3JyZWN0aW9uKQordm9pZCBBbHRlcm5hdGl2ZVRleHRDb250cm9sbGVyOjpo
YW5kbGVBbHRlcm5hdGl2ZVRleHRVSVJlc3VsdChjb25zdCBTdHJpbmcmIHJlc3VsdCkKIHsKLSAg
ICBSYW5nZSogcmVwbGFjZWRSYW5nZSA9IG1fY29ycmVjdGlvblBhbmVsSW5mby5yYW5nZVRvQmVS
ZXBsYWNlZC5nZXQoKTsKKyAgICBSYW5nZSogcmVwbGFjZWRSYW5nZSA9IG1fYWx0ZXJuYXRpdmVU
ZXh0SW5mby5yYW5nZVdpdGhBbHRlcm5hdGl2ZS5nZXQoKTsKICAgICBpZiAoIXJlcGxhY2VkUmFu
Z2UgfHwgbV9mcmFtZS0+ZG9jdW1lbnQoKSAhPSByZXBsYWNlZFJhbmdlLT5vd25lckRvY3VtZW50
KCkpCiAgICAgICAgIHJldHVybjsKIAotICAgIFN0cmluZyBjdXJyZW50V29yZCA9IHBsYWluVGV4
dChtX2NvcnJlY3Rpb25QYW5lbEluZm8ucmFuZ2VUb0JlUmVwbGFjZWQuZ2V0KCkpOworICAgIFN0
cmluZyBjdXJyZW50V29yZCA9IHBsYWluVGV4dChtX2FsdGVybmF0aXZlVGV4dEluZm8ucmFuZ2VX
aXRoQWx0ZXJuYXRpdmUuZ2V0KCkpOwogICAgIC8vIENoZWNrIHRvIHNlZSBpZiB0aGUgd29yZCB3
ZSBhcmUgYWJvdXQgdG8gY29ycmVjdCBoYXMgYmVlbiBjaGFuZ2VkIGJldHdlZW4gdGltZXIgZmly
aW5nIGFuZCBjYWxsYmFjayBiZWluZyB0cmlnZ2VyZWQuCi0gICAgaWYgKGN1cnJlbnRXb3JkICE9
IG1fY29ycmVjdGlvblBhbmVsSW5mby5yZXBsYWNlZFN0cmluZykKKyAgICBpZiAoY3VycmVudFdv
cmQgIT0gbV9hbHRlcm5hdGl2ZVRleHRJbmZvLm9yaWdpbmFsVGV4dCkKICAgICAgICAgcmV0dXJu
OwogCi0gICAgbV9jb3JyZWN0aW9uUGFuZWxJbmZvLmlzQWN0aXZlID0gZmFsc2U7CisgICAgbV9h
bHRlcm5hdGl2ZVRleHRJbmZvLmlzQWN0aXZlID0gZmFsc2U7CiAKLSAgICBzd2l0Y2ggKG1fY29y
cmVjdGlvblBhbmVsSW5mby5wYW5lbFR5cGUpIHsKLSAgICBjYXNlIENvcnJlY3Rpb25QYW5lbElu
Zm86OlBhbmVsVHlwZUNvcnJlY3Rpb246Ci0gICAgICAgIGlmIChjb3JyZWN0aW9uLmxlbmd0aCgp
KSB7Ci0gICAgICAgICAgICBtX2NvcnJlY3Rpb25QYW5lbEluZm8ucmVwbGFjZW1lbnRTdHJpbmcg
PSBjb3JyZWN0aW9uOwotICAgICAgICAgICAgYXBwbHlDb3JyZWN0aW9uUGFuZWxJbmZvKG1hcmtl
clR5cGVzRm9yQXV0b2NvcnJlY3Rpb24oKSk7Ci0gICAgICAgIH0gZWxzZSBpZiAoIW1fY29ycmVj
dGlvblBhbmVsSXNEaXNtaXNzZWRCeUVkaXRvcikKLSAgICAgICAgICAgIHJlcGxhY2VkUmFuZ2Ut
PnN0YXJ0Q29udGFpbmVyKCktPmRvY3VtZW50KCktPm1hcmtlcnMoKS0+YWRkTWFya2VyKHJlcGxh
Y2VkUmFuZ2UsIERvY3VtZW50TWFya2VyOjpSZWplY3RlZENvcnJlY3Rpb24sIG1fY29ycmVjdGlv
blBhbmVsSW5mby5yZXBsYWNlZFN0cmluZyk7CisgICAgc3dpdGNoIChtX2FsdGVybmF0aXZlVGV4
dEluZm8udHlwZSkgeworICAgIGNhc2UgQWx0ZXJuYXRpdmVUZXh0VHlwZUNvcnJlY3Rpb246Cisg
ICAgICAgIGlmIChyZXN1bHQubGVuZ3RoKCkpCisgICAgICAgICAgICBhcHBseUFsdGVybmF0aXZl
VGV4dChyZXN1bHQsIG1hcmtlclR5cGVzRm9yQXV0b2NvcnJlY3Rpb24oKSk7CisgICAgICAgIGVs
c2UgaWYgKCFtX2lzRGlzbWlzc2VkQnlFZGl0aW5nKQorICAgICAgICAgICAgcmVwbGFjZWRSYW5n
ZS0+c3RhcnRDb250YWluZXIoKS0+ZG9jdW1lbnQoKS0+bWFya2VycygpLT5hZGRNYXJrZXIocmVw
bGFjZWRSYW5nZSwgRG9jdW1lbnRNYXJrZXI6OlJlamVjdGVkQ29ycmVjdGlvbiwgbV9hbHRlcm5h
dGl2ZVRleHRJbmZvLm9yaWdpbmFsVGV4dCk7CiAgICAgICAgIGJyZWFrOwotICAgIGNhc2UgQ29y
cmVjdGlvblBhbmVsSW5mbzo6UGFuZWxUeXBlUmV2ZXJzaW9uOgotICAgIGNhc2UgQ29ycmVjdGlv
blBhbmVsSW5mbzo6UGFuZWxUeXBlU3BlbGxpbmdTdWdnZXN0aW9uczoKLSAgICAgICAgaWYgKGNv
cnJlY3Rpb24ubGVuZ3RoKCkpIHsKLSAgICAgICAgICAgIG1fY29ycmVjdGlvblBhbmVsSW5mby5y
ZXBsYWNlbWVudFN0cmluZyA9IGNvcnJlY3Rpb247Ci0gICAgICAgICAgICBhcHBseUNvcnJlY3Rp
b25QYW5lbEluZm8obWFya2VyVHlwZXNGb3JSZXBsYWNlbWVudCgpKTsKLSAgICAgICAgfQorICAg
IGNhc2UgQWx0ZXJuYXRpdmVUZXh0VHlwZVJldmVyc2lvbjoKKyAgICBjYXNlIEFsdGVybmF0aXZl
VGV4dFR5cGVTcGVsbGluZ1N1Z2dlc3Rpb25zOgorICAgICAgICBpZiAocmVzdWx0Lmxlbmd0aCgp
KQorICAgICAgICAgICAgYXBwbHlBbHRlcm5hdGl2ZVRleHQocmVzdWx0LCBtYXJrZXJUeXBlc0Zv
clJlcGxhY2VtZW50KCkpOwogICAgICAgICBicmVhazsKICAgICB9CiAKLSAgICBtX2NvcnJlY3Rp
b25QYW5lbEluZm8ucmFuZ2VUb0JlUmVwbGFjZWQuY2xlYXIoKTsKKyAgICBtX2FsdGVybmF0aXZl
VGV4dEluZm8ucmFuZ2VXaXRoQWx0ZXJuYXRpdmUuY2xlYXIoKTsKIH0KIAotYm9vbCBTcGVsbGlu
Z0NvcnJlY3Rpb25Db250cm9sbGVyOjppc0F1dG9tYXRpY1NwZWxsaW5nQ29ycmVjdGlvbkVuYWJs
ZWQoKQorYm9vbCBBbHRlcm5hdGl2ZVRleHRDb250cm9sbGVyOjppc0F1dG9tYXRpY1NwZWxsaW5n
Q29ycmVjdGlvbkVuYWJsZWQoKQogewogICAgIHJldHVybiBjbGllbnQoKSAmJiBjbGllbnQoKS0+
aXNBdXRvbWF0aWNTcGVsbGluZ0NvcnJlY3Rpb25FbmFibGVkKCk7CiB9CiAKLUZsb2F0UmVjdCBT
cGVsbGluZ0NvcnJlY3Rpb25Db250cm9sbGVyOjpyb290Vmlld1JlY3RGb3JSYW5nZShjb25zdCBS
YW5nZSogcmFuZ2UpIGNvbnN0CitGbG9hdFJlY3QgQWx0ZXJuYXRpdmVUZXh0Q29udHJvbGxlcjo6
cm9vdFZpZXdSZWN0Rm9yUmFuZ2UoY29uc3QgUmFuZ2UqIHJhbmdlKSBjb25zdAogewogICAgIEZy
YW1lVmlldyogdmlldyA9IG1fZnJhbWUtPnZpZXcoKTsKICAgICBpZiAoIXZpZXcpCkBAIC0zNzYs
NyArMzkxLDcgQEAgRmxvYXRSZWN0IFNwZWxsaW5nQ29ycmVjdGlvbkNvbnRyb2xsZXI6OgogICAg
IHJldHVybiB2aWV3LT5jb250ZW50c1RvUm9vdFZpZXcoSW50UmVjdChib3VuZGluZ1JlY3QpKTsK
IH0gICAgICAgIAogCi12b2lkIFNwZWxsaW5nQ29ycmVjdGlvbkNvbnRyb2xsZXI6OnJlc3BvbmRU
b0NoYW5nZWRTZWxlY3Rpb24oY29uc3QgVmlzaWJsZVNlbGVjdGlvbiYgb2xkU2VsZWN0aW9uKQor
dm9pZCBBbHRlcm5hdGl2ZVRleHRDb250cm9sbGVyOjpyZXNwb25kVG9DaGFuZ2VkU2VsZWN0aW9u
KGNvbnN0IFZpc2libGVTZWxlY3Rpb24mIG9sZFNlbGVjdGlvbikKIHsKICAgICBWaXNpYmxlU2Vs
ZWN0aW9uIGN1cnJlbnRTZWxlY3Rpb24obV9mcmFtZS0+c2VsZWN0aW9uKCktPnNlbGVjdGlvbigp
KTsKICAgICAvLyBXaGVuIHVzZXIgbW92ZXMgY2FyZXQgdG8gdGhlIGVuZCBvZiBhdXRvY29ycmVj
dGVkIHdvcmQgYW5kIHBhdXNlcywgd2Ugc2hvdyB0aGUgcGFuZWwKQEAgLTQxNCwyMCArNDI5LDIw
IEBAIHZvaWQgU3BlbGxpbmdDb3JyZWN0aW9uQ29udHJvbGxlcjo6cmVzcG8KICAgICAgICAgaWYg
KCFjdXJyZW50V29yZC5sZW5ndGgoKSkKICAgICAgICAgICAgIGNvbnRpbnVlOwogCi0gICAgICAg
IG1fY29ycmVjdGlvblBhbmVsSW5mby5yYW5nZVRvQmVSZXBsYWNlZCA9IHdvcmRSYW5nZTsKLSAg
ICAgICAgbV9jb3JyZWN0aW9uUGFuZWxJbmZvLnJlcGxhY2VkU3RyaW5nID0gY3VycmVudFdvcmQ7
CisgICAgICAgIG1fYWx0ZXJuYXRpdmVUZXh0SW5mby5yYW5nZVdpdGhBbHRlcm5hdGl2ZSA9IHdv
cmRSYW5nZTsKKyAgICAgICAgbV9hbHRlcm5hdGl2ZVRleHRJbmZvLm9yaWdpbmFsVGV4dCA9IGN1
cnJlbnRXb3JkOwogICAgICAgICBpZiAobWFya2VyLT50eXBlKCkgPT0gRG9jdW1lbnRNYXJrZXI6
OlNwZWxsaW5nKQotICAgICAgICAgICAgc3RhcnRDb3JyZWN0aW9uUGFuZWxUaW1lcihDb3JyZWN0
aW9uUGFuZWxJbmZvOjpQYW5lbFR5cGVTcGVsbGluZ1N1Z2dlc3Rpb25zKTsKKyAgICAgICAgICAg
IHN0YXJ0QWx0ZXJuYXRpdmVUZXh0VUlUaW1lcihBbHRlcm5hdGl2ZVRleHRUeXBlU3BlbGxpbmdT
dWdnZXN0aW9ucyk7CiAgICAgICAgIGVsc2UgewotICAgICAgICAgICAgbV9jb3JyZWN0aW9uUGFu
ZWxJbmZvLnJlcGxhY2VtZW50U3RyaW5nID0gbWFya2VyLT5kZXNjcmlwdGlvbigpOwotICAgICAg
ICAgICAgc3RhcnRDb3JyZWN0aW9uUGFuZWxUaW1lcihDb3JyZWN0aW9uUGFuZWxJbmZvOjpQYW5l
bFR5cGVSZXZlcnNpb24pOworICAgICAgICAgICAgbV9hbHRlcm5hdGl2ZVRleHRJbmZvLmRldGFp
bHMgPSBBdXRvY29ycmVjdGlvbkFsdGVybmF0aXZlRGV0YWlsczo6Y3JlYXRlKG1hcmtlci0+ZGVz
Y3JpcHRpb24oKSk7CisgICAgICAgICAgICBzdGFydEFsdGVybmF0aXZlVGV4dFVJVGltZXIoQWx0
ZXJuYXRpdmVUZXh0VHlwZVJldmVyc2lvbik7CiAgICAgICAgIH0KIAogICAgICAgICBicmVhazsK
ICAgICB9CiB9CiAKLXZvaWQgU3BlbGxpbmdDb3JyZWN0aW9uQ29udHJvbGxlcjo6cmVzcG9uZFRv
QXBwbGllZEVkaXRpbmcoQ29tcG9zaXRlRWRpdENvbW1hbmQqIGNvbW1hbmQpCit2b2lkIEFsdGVy
bmF0aXZlVGV4dENvbnRyb2xsZXI6OnJlc3BvbmRUb0FwcGxpZWRFZGl0aW5nKENvbXBvc2l0ZUVk
aXRDb21tYW5kKiBjb21tYW5kKQogewogICAgIGlmIChjb21tYW5kLT5pc1RvcExldmVsQ29tbWFu
ZCgpICYmICFjb21tYW5kLT5zaG91bGRSZXRhaW5BdXRvY29ycmVjdGlvbkluZGljYXRvcigpKQog
ICAgICAgICBtX2ZyYW1lLT5kb2N1bWVudCgpLT5tYXJrZXJzKCktPnJlbW92ZU1hcmtlcnMoRG9j
dW1lbnRNYXJrZXI6OkNvcnJlY3Rpb25JbmRpY2F0b3IpOwpAQCAtNDM2LDcgKzQ1MSw3IEBAIHZv
aWQgU3BlbGxpbmdDb3JyZWN0aW9uQ29udHJvbGxlcjo6cmVzcG8KICAgICBtX29yaWdpbmFsU3Ry
aW5nRm9yTGFzdERlbGV0ZWRBdXRvY29ycmVjdGlvbiA9IFN0cmluZygpOwogfQogCi12b2lkIFNw
ZWxsaW5nQ29ycmVjdGlvbkNvbnRyb2xsZXI6OnJlc3BvbmRUb1VuYXBwbGllZEVkaXRpbmcoRWRp
dENvbW1hbmRDb21wb3NpdGlvbiogY29tbWFuZCkKK3ZvaWQgQWx0ZXJuYXRpdmVUZXh0Q29udHJv
bGxlcjo6cmVzcG9uZFRvVW5hcHBsaWVkRWRpdGluZyhFZGl0Q29tbWFuZENvbXBvc2l0aW9uKiBj
b21tYW5kKQogewogICAgIGlmICghY29tbWFuZC0+d2FzQ3JlYXRlTGlua0NvbW1hbmQoKSkKICAg
ICAgICAgcmV0dXJuOwpAQCAtNDQ4LDM1ICs0NjMsMzUgQEAgdm9pZCBTcGVsbGluZ0NvcnJlY3Rp
b25Db250cm9sbGVyOjpyZXNwbwogICAgIG1hcmtlcnMtPmFkZE1hcmtlcihyYW5nZS5nZXQoKSwg
RG9jdW1lbnRNYXJrZXI6OlNwZWxsQ2hlY2tpbmdFeGVtcHRpb24pOwogfQogCi1FZGl0b3JDbGll
bnQqIFNwZWxsaW5nQ29ycmVjdGlvbkNvbnRyb2xsZXI6OmNsaWVudCgpCitFZGl0b3JDbGllbnQq
IEFsdGVybmF0aXZlVGV4dENvbnRyb2xsZXI6OmNsaWVudCgpCiB7CiAgICAgcmV0dXJuIG1fZnJh
bWUtPnBhZ2UoKSA/IG1fZnJhbWUtPnBhZ2UoKS0+ZWRpdG9yQ2xpZW50KCkgOiAwOwogfQogCi1U
ZXh0Q2hlY2tlckNsaWVudCogU3BlbGxpbmdDb3JyZWN0aW9uQ29udHJvbGxlcjo6dGV4dENoZWNr
ZXIoKQorVGV4dENoZWNrZXJDbGllbnQqIEFsdGVybmF0aXZlVGV4dENvbnRyb2xsZXI6OnRleHRD
aGVja2VyKCkKIHsKICAgICBpZiAoRWRpdG9yQ2xpZW50KiBvd25lciA9IGNsaWVudCgpKQogICAg
ICAgICByZXR1cm4gb3duZXItPnRleHRDaGVja2VyKCk7CiAgICAgcmV0dXJuIDA7CiB9CiAKLXZv
aWQgU3BlbGxpbmdDb3JyZWN0aW9uQ29udHJvbGxlcjo6cmVjb3JkQXV0b2NvcnJlY3Rpb25SZXNw
b25zZVJldmVyc2VkKGNvbnN0IFN0cmluZyYgcmVwbGFjZWRTdHJpbmcsIGNvbnN0IFN0cmluZyYg
cmVwbGFjZW1lbnRTdHJpbmcpCit2b2lkIEFsdGVybmF0aXZlVGV4dENvbnRyb2xsZXI6OnJlY29y
ZEF1dG9jb3JyZWN0aW9uUmVzcG9uc2VSZXZlcnNlZChjb25zdCBTdHJpbmcmIHJlcGxhY2VkU3Ry
aW5nLCBjb25zdCBTdHJpbmcmIHJlcGxhY2VtZW50U3RyaW5nKQogewogICAgIGNsaWVudCgpLT5y
ZWNvcmRBdXRvY29ycmVjdGlvblJlc3BvbnNlKEVkaXRvckNsaWVudDo6QXV0b2NvcnJlY3Rpb25S
ZXZlcnRlZCwgcmVwbGFjZWRTdHJpbmcsIHJlcGxhY2VtZW50U3RyaW5nKTsKIH0KIAotdm9pZCBT
cGVsbGluZ0NvcnJlY3Rpb25Db250cm9sbGVyOjpyZWNvcmRBdXRvY29ycmVjdGlvblJlc3BvbnNl
UmV2ZXJzZWQoY29uc3QgU3RyaW5nJiByZXBsYWNlZFN0cmluZywgUGFzc1JlZlB0cjxSYW5nZT4g
cmVwbGFjZW1lbnRSYW5nZSkKK3ZvaWQgQWx0ZXJuYXRpdmVUZXh0Q29udHJvbGxlcjo6cmVjb3Jk
QXV0b2NvcnJlY3Rpb25SZXNwb25zZVJldmVyc2VkKGNvbnN0IFN0cmluZyYgcmVwbGFjZWRTdHJp
bmcsIFBhc3NSZWZQdHI8UmFuZ2U+IHJlcGxhY2VtZW50UmFuZ2UpCiB7CiAgICAgcmVjb3JkQXV0
b2NvcnJlY3Rpb25SZXNwb25zZVJldmVyc2VkKHJlcGxhY2VkU3RyaW5nLCBwbGFpblRleHQocmVw
bGFjZW1lbnRSYW5nZS5nZXQoKSkpOwogfQogCi12b2lkIFNwZWxsaW5nQ29ycmVjdGlvbkNvbnRy
b2xsZXI6Om1hcmtSZXZlcnNlZChQYXNzUmVmUHRyPFJhbmdlPiBjaGFuZ2VkUmFuZ2UpCit2b2lk
IEFsdGVybmF0aXZlVGV4dENvbnRyb2xsZXI6Om1hcmtSZXZlcnNlZChQYXNzUmVmUHRyPFJhbmdl
PiBjaGFuZ2VkUmFuZ2UpCiB7CiAgICAgY2hhbmdlZFJhbmdlLT5zdGFydENvbnRhaW5lcigpLT5k
b2N1bWVudCgpLT5tYXJrZXJzKCktPnJlbW92ZU1hcmtlcnMoY2hhbmdlZFJhbmdlLmdldCgpLCBE
b2N1bWVudE1hcmtlcjo6QXV0b2NvcnJlY3RlZCwgRG9jdW1lbnRNYXJrZXJDb250cm9sbGVyOjpS
ZW1vdmVQYXJ0aWFsbHlPdmVybGFwcGluZ01hcmtlcik7CiAgICAgY2hhbmdlZFJhbmdlLT5zdGFy
dENvbnRhaW5lcigpLT5kb2N1bWVudCgpLT5tYXJrZXJzKCktPmFkZE1hcmtlcihjaGFuZ2VkUmFu
Z2UuZ2V0KCksIERvY3VtZW50TWFya2VyOjpTcGVsbENoZWNraW5nRXhlbXB0aW9uKTsKIH0KIAot
dm9pZCBTcGVsbGluZ0NvcnJlY3Rpb25Db250cm9sbGVyOjptYXJrQ29ycmVjdGlvbihQYXNzUmVm
UHRyPFJhbmdlPiByZXBsYWNlZFJhbmdlLCBjb25zdCBTdHJpbmcmIHJlcGxhY2VkU3RyaW5nKQor
dm9pZCBBbHRlcm5hdGl2ZVRleHRDb250cm9sbGVyOjptYXJrQ29ycmVjdGlvbihQYXNzUmVmUHRy
PFJhbmdlPiByZXBsYWNlZFJhbmdlLCBjb25zdCBTdHJpbmcmIHJlcGxhY2VkU3RyaW5nKQogewog
ICAgIFZlY3RvcjxEb2N1bWVudE1hcmtlcjo6TWFya2VyVHlwZT4gbWFya2VyVHlwZXNUb0FkZCA9
IG1hcmtlclR5cGVzRm9yQXV0b2NvcnJlY3Rpb24oKTsKICAgICBEb2N1bWVudE1hcmtlckNvbnRy
b2xsZXIqIG1hcmtlcnMgPSByZXBsYWNlZFJhbmdlLT5zdGFydENvbnRhaW5lcigpLT5kb2N1bWVu
dCgpLT5tYXJrZXJzKCk7CkBAIC00ODksNyArNTA0LDcgQEAgdm9pZCBTcGVsbGluZ0NvcnJlY3Rp
b25Db250cm9sbGVyOjptYXJrQwogICAgIH0KIH0KIAotdm9pZCBTcGVsbGluZ0NvcnJlY3Rpb25D
b250cm9sbGVyOjpyZWNvcmRTcGVsbGNoZWNrZXJSZXNwb25zZUZvck1vZGlmaWVkQ29ycmVjdGlv
bihSYW5nZSogcmFuZ2VPZkNvcnJlY3Rpb24sIGNvbnN0IFN0cmluZyYgY29ycmVjdGVkLCBjb25z
dCBTdHJpbmcmIGNvcnJlY3Rpb24pCit2b2lkIEFsdGVybmF0aXZlVGV4dENvbnRyb2xsZXI6OnJl
Y29yZFNwZWxsY2hlY2tlclJlc3BvbnNlRm9yTW9kaWZpZWRDb3JyZWN0aW9uKFJhbmdlKiByYW5n
ZU9mQ29ycmVjdGlvbiwgY29uc3QgU3RyaW5nJiBjb3JyZWN0ZWQsIGNvbnN0IFN0cmluZyYgY29y
cmVjdGlvbikKIHsKICAgICBpZiAoIXJhbmdlT2ZDb3JyZWN0aW9uKQogICAgICAgICByZXR1cm47
CkBAIC01MDcsMTMgKzUyMiwxMyBAQCB2b2lkIFNwZWxsaW5nQ29ycmVjdGlvbkNvbnRyb2xsZXI6
OnJlY29yCiAgICAgbWFya2Vycy0+cmVtb3ZlTWFya2VycyhyYW5nZU9mQ29ycmVjdGlvbiwgRG9j
dW1lbnRNYXJrZXI6OkF1dG9jb3JyZWN0ZWQsIERvY3VtZW50TWFya2VyQ29udHJvbGxlcjo6UmVt
b3ZlUGFydGlhbGx5T3ZlcmxhcHBpbmdNYXJrZXIpOwogfQogCi12b2lkIFNwZWxsaW5nQ29ycmVj
dGlvbkNvbnRyb2xsZXI6OmRlbGV0ZWRBdXRvY29ycmVjdGlvbkF0UG9zaXRpb24oY29uc3QgUG9z
aXRpb24mIHBvc2l0aW9uLCBjb25zdCBTdHJpbmcmIG9yaWdpbmFsU3RyaW5nKQordm9pZCBBbHRl
cm5hdGl2ZVRleHRDb250cm9sbGVyOjpkZWxldGVkQXV0b2NvcnJlY3Rpb25BdFBvc2l0aW9uKGNv
bnN0IFBvc2l0aW9uJiBwb3NpdGlvbiwgY29uc3QgU3RyaW5nJiBvcmlnaW5hbFN0cmluZykKIHsK
ICAgICBtX29yaWdpbmFsU3RyaW5nRm9yTGFzdERlbGV0ZWRBdXRvY29ycmVjdGlvbiA9IG9yaWdp
bmFsU3RyaW5nOwogICAgIG1fcG9zaXRpb25Gb3JMYXN0RGVsZXRlZEF1dG9jb3JyZWN0aW9uID0g
cG9zaXRpb247CiB9CiAKLXZvaWQgU3BlbGxpbmdDb3JyZWN0aW9uQ29udHJvbGxlcjo6bWFya1By
ZWNlZGluZ1doaXRlc3BhY2VGb3JEZWxldGVkQXV0b2NvcnJlY3Rpb25BZnRlckNvbW1hbmQoRWRp
dENvbW1hbmQqIGNvbW1hbmQpCit2b2lkIEFsdGVybmF0aXZlVGV4dENvbnRyb2xsZXI6Om1hcmtQ
cmVjZWRpbmdXaGl0ZXNwYWNlRm9yRGVsZXRlZEF1dG9jb3JyZWN0aW9uQWZ0ZXJDb21tYW5kKEVk
aXRDb21tYW5kKiBjb21tYW5kKQogewogICAgIFBvc2l0aW9uIGVuZE9mU2VsZWN0aW9uID0gY29t
bWFuZC0+ZW5kaW5nU2VsZWN0aW9uKCkuZW5kKCk7CiAgICAgaWYgKGVuZE9mU2VsZWN0aW9uICE9
IG1fcG9zaXRpb25Gb3JMYXN0RGVsZXRlZEF1dG9jb3JyZWN0aW9uKQpAQCAtNTM0LDE5ICs1NDks
MTkgQEAgdm9pZCBTcGVsbGluZ0NvcnJlY3Rpb25Db250cm9sbGVyOjptYXJrUAogICAgIG1fZnJh
bWUtPmRvY3VtZW50KCktPm1hcmtlcnMoKS0+YWRkTWFya2VyKHByZWNlZGluZ0NoYXJhY3RlclJh
bmdlLmdldCgpLCBEb2N1bWVudE1hcmtlcjo6RGVsZXRlZEF1dG9jb3JyZWN0aW9uLCBtX29yaWdp
bmFsU3RyaW5nRm9yTGFzdERlbGV0ZWRBdXRvY29ycmVjdGlvbik7CiB9CiAKLWJvb2wgU3BlbGxp
bmdDb3JyZWN0aW9uQ29udHJvbGxlcjo6cHJvY2Vzc01hcmtlcnNPblRleHRUb0JlUmVwbGFjZWRC
eVJlc3VsdChjb25zdCBUZXh0Q2hlY2tpbmdSZXN1bHQqIHJlc3VsdCwgUmFuZ2UqIHJhbmdlVG9C
ZVJlcGxhY2VkLCBjb25zdCBTdHJpbmcmIHN0cmluZ1RvQmVSZXBsYWNlZCkKK2Jvb2wgQWx0ZXJu
YXRpdmVUZXh0Q29udHJvbGxlcjo6cHJvY2Vzc01hcmtlcnNPblRleHRUb0JlUmVwbGFjZWRCeVJl
c3VsdChjb25zdCBUZXh0Q2hlY2tpbmdSZXN1bHQqIHJlc3VsdCwgUmFuZ2UqIHJhbmdlV2l0aEFs
dGVybmF0aXZlLCBjb25zdCBTdHJpbmcmIHN0cmluZ1RvQmVSZXBsYWNlZCkKIHsKICAgICBEb2N1
bWVudE1hcmtlckNvbnRyb2xsZXIqIG1hcmtlckNvbnRyb2xsZXIgPSBtX2ZyYW1lLT5kb2N1bWVu
dCgpLT5tYXJrZXJzKCk7Ci0gICAgaWYgKG1hcmtlckNvbnRyb2xsZXItPmhhc01hcmtlcnMocmFu
Z2VUb0JlUmVwbGFjZWQsIERvY3VtZW50TWFya2VyOjpSZXBsYWNlbWVudCkpIHsKKyAgICBpZiAo
bWFya2VyQ29udHJvbGxlci0+aGFzTWFya2VycyhyYW5nZVdpdGhBbHRlcm5hdGl2ZSwgRG9jdW1l
bnRNYXJrZXI6OlJlcGxhY2VtZW50KSkgewogICAgICAgICBpZiAocmVzdWx0LT50eXBlID09IFRl
eHRDaGVja2luZ1R5cGVDb3JyZWN0aW9uKQotICAgICAgICAgICAgcmVjb3JkU3BlbGxjaGVja2Vy
UmVzcG9uc2VGb3JNb2RpZmllZENvcnJlY3Rpb24ocmFuZ2VUb0JlUmVwbGFjZWQsIHN0cmluZ1Rv
QmVSZXBsYWNlZCwgcmVzdWx0LT5yZXBsYWNlbWVudCk7CisgICAgICAgICAgICByZWNvcmRTcGVs
bGNoZWNrZXJSZXNwb25zZUZvck1vZGlmaWVkQ29ycmVjdGlvbihyYW5nZVdpdGhBbHRlcm5hdGl2
ZSwgc3RyaW5nVG9CZVJlcGxhY2VkLCByZXN1bHQtPnJlcGxhY2VtZW50KTsKICAgICAgICAgcmV0
dXJuIGZhbHNlOwogICAgIH0KIAotICAgIGlmIChtYXJrZXJDb250cm9sbGVyLT5oYXNNYXJrZXJz
KHJhbmdlVG9CZVJlcGxhY2VkLCBEb2N1bWVudE1hcmtlcjo6UmVqZWN0ZWRDb3JyZWN0aW9uKSkK
KyAgICBpZiAobWFya2VyQ29udHJvbGxlci0+aGFzTWFya2VycyhyYW5nZVdpdGhBbHRlcm5hdGl2
ZSwgRG9jdW1lbnRNYXJrZXI6OlJlamVjdGVkQ29ycmVjdGlvbikpCiAgICAgICAgIHJldHVybiBm
YWxzZTsKIAotICAgIFBvc2l0aW9uIGJlZ2lubmluZ09mUmFuZ2UgPSByYW5nZVRvQmVSZXBsYWNl
ZC0+c3RhcnRQb3NpdGlvbigpOworICAgIFBvc2l0aW9uIGJlZ2lubmluZ09mUmFuZ2UgPSByYW5n
ZVdpdGhBbHRlcm5hdGl2ZS0+c3RhcnRQb3NpdGlvbigpOwogICAgIFBvc2l0aW9uIHByZWNlZGlu
Z0NoYXJhY3RlclBvc2l0aW9uID0gYmVnaW5uaW5nT2ZSYW5nZS5wcmV2aW91cygpOwogICAgIFJl
ZlB0cjxSYW5nZT4gcHJlY2VkaW5nQ2hhcmFjdGVyUmFuZ2UgPSBSYW5nZTo6Y3JlYXRlKG1fZnJh
bWUtPmRvY3VtZW50KCksIHByZWNlZGluZ0NoYXJhY3RlclBvc2l0aW9uLCBiZWdpbm5pbmdPZlJh
bmdlKTsKIApJbmRleDogU291cmNlL1dlYkNvcmUvZWRpdGluZy9BbHRlcm5hdGl2ZVRleHRDb250
cm9sbGVyLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvZWRpdGluZy9BbHRlcm5hdGl2
ZVRleHRDb250cm9sbGVyLmgJKHJldmlzaW9uIDExMjgzMCkJKGZyb20gU291cmNlL1dlYkNvcmUv
ZWRpdGluZy9TcGVsbGluZ0NvcnJlY3Rpb25Db250cm9sbGVyLmg6MTEyODMwKQorKysgU291cmNl
L1dlYkNvcmUvZWRpdGluZy9BbHRlcm5hdGl2ZVRleHRDb250cm9sbGVyLmgJKHdvcmtpbmcgY29w
eSkKQEAgLTAsMCArMSwxNTcgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTAgQXBwbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4g
c291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9u
LCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisg
KiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0
YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9u
cyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMg
cHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMg
UFJPVklERUQgQlkgQVBQTEUgQ09NUFVURVIsIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVY
UFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRO
RVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBF
VkVOVCBTSEFMTCBBUFBMRSBDT01QVVRFUiwgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJ
QUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBF
WEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VT
OyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQ
VElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwg
V0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xV
RElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBU
SEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJ
QklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpZm5kZWYgU3BlbGxpbmdDb3JyZWN0aW9u
Q29udHJvbGxlcl9oCisjZGVmaW5lIFNwZWxsaW5nQ29ycmVjdGlvbkNvbnRyb2xsZXJfaAorCisj
aW5jbHVkZSAiRG9jdW1lbnRNYXJrZXIuaCIKKyNpbmNsdWRlICJSYW5nZS5oIgorI2luY2x1ZGUg
IlRleHRDaGVja2luZy5oIgorI2luY2x1ZGUgIlRpbWVyLmgiCisjaW5jbHVkZSAiVmlzaWJsZVNl
bGVjdGlvbi5oIgorI2luY2x1ZGUgPHd0Zi9Ob25jb3B5YWJsZS5oPgorI2luY2x1ZGUgPHd0Zi9V
bnVzZWRQYXJhbS5oPgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK2NsYXNzIENvbXBvc2l0ZUVk
aXRDb21tYW5kOworY2xhc3MgRWRpdG9yQ2xpZW50OworY2xhc3MgRWRpdENvbW1hbmQ7CitjbGFz
cyBFZGl0Q29tbWFuZENvbXBvc2l0aW9uOworY2xhc3MgRnJhbWU7CitjbGFzcyBUZXh0Q2hlY2tl
ckNsaWVudDsKKworc3RydWN0IENvcnJlY3Rpb25QYW5lbEluZm8geworICAgIGVudW0gUGFuZWxU
eXBlIHsKKyAgICAgICAgUGFuZWxUeXBlQ29ycmVjdGlvbiA9IDAsCisgICAgICAgIFBhbmVsVHlw
ZVJldmVyc2lvbiwKKyAgICAgICAgUGFuZWxUeXBlU3BlbGxpbmdTdWdnZXN0aW9ucworICAgIH07
CisKKyAgICBSZWZQdHI8UmFuZ2U+IHJhbmdlVG9CZVJlcGxhY2VkOworICAgIFN0cmluZyByZXBs
YWNlZFN0cmluZzsKKyAgICBTdHJpbmcgcmVwbGFjZW1lbnRTdHJpbmc7CisgICAgUGFuZWxUeXBl
IHBhbmVsVHlwZTsKKyAgICBib29sIGlzQWN0aXZlOworfTsKKworc3RydWN0IFRleHRDaGVja2lu
Z1Jlc3VsdDsKKworZW51bSBSZWFzb25Gb3JEaXNtaXNzaW5nQ29ycmVjdGlvblBhbmVsIHsKKyAg
ICBSZWFzb25Gb3JEaXNtaXNzaW5nQ29ycmVjdGlvblBhbmVsQ2FuY2VsbGVkID0gMCwKKyAgICBS
ZWFzb25Gb3JEaXNtaXNzaW5nQ29ycmVjdGlvblBhbmVsSWdub3JlZCwKKyAgICBSZWFzb25Gb3JE
aXNtaXNzaW5nQ29ycmVjdGlvblBhbmVsQWNjZXB0ZWQKK307CisKKyNpZiBVU0UoQVVUT0NPUlJF
Q1RJT05fUEFORUwpCisjZGVmaW5lIFVOTEVTU19FTkFCTEVEKGZ1bmN0aW9uQm9keSkgOworI2Vs
c2UKKyNkZWZpbmUgVU5MRVNTX0VOQUJMRUQoZnVuY3Rpb25Cb2R5KSBmdW5jdGlvbkJvZHkKKyNl
bmRpZgorCitjbGFzcyBTcGVsbGluZ0NvcnJlY3Rpb25Db250cm9sbGVyIHsKKyAgICBXVEZfTUFL
RV9OT05DT1BZQUJMRShTcGVsbGluZ0NvcnJlY3Rpb25Db250cm9sbGVyKTsgV1RGX01BS0VfRkFT
VF9BTExPQ0FURUQ7CitwdWJsaWM6CisgICAgU3BlbGxpbmdDb3JyZWN0aW9uQ29udHJvbGxlcihG
cmFtZSopIFVOTEVTU19FTkFCTEVEKHt9KQorICAgIH5TcGVsbGluZ0NvcnJlY3Rpb25Db250cm9s
bGVyKCkgVU5MRVNTX0VOQUJMRUQoe30pCisKKyAgICB2b2lkIHN0YXJ0Q29ycmVjdGlvblBhbmVs
VGltZXIoQ29ycmVjdGlvblBhbmVsSW5mbzo6UGFuZWxUeXBlKSBVTkxFU1NfRU5BQkxFRCh7fSkK
KyAgICB2b2lkIHN0b3BDb3JyZWN0aW9uUGFuZWxUaW1lcigpIFVOTEVTU19FTkFCTEVEKHt9KQor
CisgICAgdm9pZCBkaXNtaXNzKFJlYXNvbkZvckRpc21pc3NpbmdDb3JyZWN0aW9uUGFuZWwpIFVO
TEVTU19FTkFCTEVEKHt9KQorICAgIFN0cmluZyBkaXNtaXNzU29vbihSZWFzb25Gb3JEaXNtaXNz
aW5nQ29ycmVjdGlvblBhbmVsKSBVTkxFU1NfRU5BQkxFRCh7IHJldHVybiBTdHJpbmcoKTsgfSkK
KyAgICB2b2lkIHNob3coUGFzc1JlZlB0cjxSYW5nZT4gcmFuZ2VUb1JlcGxhY2UsIGNvbnN0IFN0
cmluZyYgcmVwbGFjZW1lbnQpIFVOTEVTU19FTkFCTEVEKHsgVU5VU0VEX1BBUkFNKHJhbmdlVG9S
ZXBsYWNlKTsgVU5VU0VEX1BBUkFNKHJlcGxhY2VtZW50KTsgfSkKKworICAgIHZvaWQgYXBwbHlD
b3JyZWN0aW9uUGFuZWxJbmZvKGNvbnN0IFZlY3RvcjxEb2N1bWVudE1hcmtlcjo6TWFya2VyVHlw
ZT4mKSBVTkxFU1NfRU5BQkxFRCh7fSkKKyAgICAvLyBSZXR1cm4gdHJ1ZSBpZiBjb3JyZWN0aW9u
IHdhcyBhcHBsaWVkLCBmYWxzZSBvdGhlcndpc2UuCisgICAgYm9vbCBhcHBseUF1dG9jb3JyZWN0
aW9uQmVmb3JlVHlwaW5nSWZBcHByb3ByaWF0ZSgpIFVOTEVTU19FTkFCTEVEKHsgcmV0dXJuIGZh
bHNlOyB9KQorCisgICAgdm9pZCByZXNwb25kVG9VbmFwcGxpZWRTcGVsbENvcnJlY3Rpb24oY29u
c3QgVmlzaWJsZVNlbGVjdGlvbiYsIGNvbnN0IFN0cmluZyYgY29ycmVjdGVkLCBjb25zdCBTdHJp
bmcmIGNvcnJlY3Rpb24pIFVOTEVTU19FTkFCTEVEKHsgVU5VU0VEX1BBUkFNKGNvcnJlY3RlZCk7
IFVOVVNFRF9QQVJBTShjb3JyZWN0aW9uKTsgfSkKKyAgICB2b2lkIHJlc3BvbmRUb0FwcGxpZWRF
ZGl0aW5nKENvbXBvc2l0ZUVkaXRDb21tYW5kKikgVU5MRVNTX0VOQUJMRUQoeyB9KQorICAgIHZv
aWQgcmVzcG9uZFRvVW5hcHBsaWVkRWRpdGluZyhFZGl0Q29tbWFuZENvbXBvc2l0aW9uKikgVU5M
RVNTX0VOQUJMRUQoeyB9KQorICAgIHZvaWQgcmVzcG9uZFRvQ2hhbmdlZFNlbGVjdGlvbihjb25z
dCBWaXNpYmxlU2VsZWN0aW9uJiBvbGRTZWxlY3Rpb24pIFVOTEVTU19FTkFCTEVEKHsgVU5VU0VE
X1BBUkFNKG9sZFNlbGVjdGlvbik7IH0pCisKKyAgICB2b2lkIHN0b3BQZW5kaW5nQ29ycmVjdGlv
bihjb25zdCBWaXNpYmxlU2VsZWN0aW9uJiBvbGRTZWxlY3Rpb24pIFVOTEVTU19FTkFCTEVEKHsg
VU5VU0VEX1BBUkFNKG9sZFNlbGVjdGlvbik7IH0pCisgICAgdm9pZCBhcHBseVBlbmRpbmdDb3Jy
ZWN0aW9uKGNvbnN0IFZpc2libGVTZWxlY3Rpb24mIHNlbGVjdGlvbkFmdGVyVHlwaW5nKSBVTkxF
U1NfRU5BQkxFRCh7IFVOVVNFRF9QQVJBTShzZWxlY3Rpb25BZnRlclR5cGluZyk7IH0pCisKKyAg
ICB2b2lkIGhhbmRsZUNvcnJlY3Rpb25QYW5lbFJlc3VsdChjb25zdCBTdHJpbmcmIGNvcnJlY3Rp
b24pIFVOTEVTU19FTkFCTEVEKHsgVU5VU0VEX1BBUkFNKGNvcnJlY3Rpb24pOyB9KQorICAgIHZv
aWQgaGFuZGxlQ2FuY2VsT3BlcmF0aW9uKCkgVU5MRVNTX0VOQUJMRUQoe30pCisKKyAgICBib29s
IGhhc1BlbmRpbmdDb3JyZWN0aW9uKCkgY29uc3QgVU5MRVNTX0VOQUJMRUQoeyByZXR1cm4gZmFs
c2U7IH0pCisgICAgYm9vbCBpc1NwZWxsaW5nTWFya2VyQWxsb3dlZChQYXNzUmVmUHRyPFJhbmdl
PiBtaXNzcGVsbGluZ1JhbmdlKSBjb25zdCBVTkxFU1NfRU5BQkxFRCh7IFVOVVNFRF9QQVJBTSht
aXNzcGVsbGluZ1JhbmdlKTsgcmV0dXJuIHRydWU7IH0pCisgICAgYm9vbCBpc0F1dG9tYXRpY1Nw
ZWxsaW5nQ29ycmVjdGlvbkVuYWJsZWQoKSBVTkxFU1NfRU5BQkxFRCh7IHJldHVybiBmYWxzZTsg
fSkKKyAgICBib29sIHNob3VsZFJlbW92ZU1hcmtlcnNVcG9uRWRpdGluZygpOworCisgICAgdm9p
ZCBjb3JyZWN0aW9uUGFuZWxUaW1lckZpcmVkKFRpbWVyPFNwZWxsaW5nQ29ycmVjdGlvbkNvbnRy
b2xsZXI+KikgVU5MRVNTX0VOQUJMRUQoe30pCisgICAgdm9pZCByZWNvcmRBdXRvY29ycmVjdGlv
blJlc3BvbnNlUmV2ZXJzZWQoY29uc3QgU3RyaW5nJiByZXBsYWNlZFN0cmluZywgUGFzc1JlZlB0
cjxSYW5nZT4gcmVwbGFjZW1lbnRSYW5nZSkgVU5MRVNTX0VOQUJMRUQoeyBVTlVTRURfUEFSQU0o
cmVwbGFjZWRTdHJpbmcpOyBVTlVTRURfUEFSQU0ocmVwbGFjZW1lbnRSYW5nZSk7IH0pCisgICAg
dm9pZCBtYXJrUmV2ZXJzZWQoUGFzc1JlZlB0cjxSYW5nZT4gY2hhbmdlZFJhbmdlKSBVTkxFU1Nf
RU5BQkxFRCh7IFVOVVNFRF9QQVJBTShjaGFuZ2VkUmFuZ2UpOyB9KQorICAgIHZvaWQgbWFya0Nv
cnJlY3Rpb24oUGFzc1JlZlB0cjxSYW5nZT4gcmVwbGFjZWRSYW5nZSwgY29uc3QgU3RyaW5nJiBy
ZXBsYWNlZFN0cmluZykgVU5MRVNTX0VOQUJMRUQoeyBVTlVTRURfUEFSQU0ocmVwbGFjZWRSYW5n
ZSk7IFVOVVNFRF9QQVJBTShyZXBsYWNlZFN0cmluZyk7IH0pCisgICAgdm9pZCByZWNvcmRTcGVs
bGNoZWNrZXJSZXNwb25zZUZvck1vZGlmaWVkQ29ycmVjdGlvbihSYW5nZSogcmFuZ2VPZkNvcnJl
Y3Rpb24sIGNvbnN0IFN0cmluZyYgY29ycmVjdGVkLCBjb25zdCBTdHJpbmcmIGNvcnJlY3Rpb24p
IFVOTEVTU19FTkFCTEVEKHsgVU5VU0VEX1BBUkFNKHJhbmdlT2ZDb3JyZWN0aW9uKTsgVU5VU0VE
X1BBUkFNKGNvcnJlY3RlZCk7IFVOVVNFRF9QQVJBTShjb3JyZWN0aW9uKTsgfSkKKworICAgIC8v
IFRoaXMgZnVuY3Rpb24gcmV0dXJucyBmYWxzZSBpZiB0aGUgcmVwbGFjZW1lbnQgc2hvdWxkIG5v
dCBiZSBjYXJyaWVkIG91dC4KKyAgICBib29sIHByb2Nlc3NNYXJrZXJzT25UZXh0VG9CZVJlcGxh
Y2VkQnlSZXN1bHQoY29uc3QgVGV4dENoZWNraW5nUmVzdWx0KiwgUmFuZ2UqIHJhbmdlVG9CZVJl
cGxhY2VkLCBjb25zdCBTdHJpbmcmIHN0cmluZ1RvQmVSZXBsYWNlZCkgVU5MRVNTX0VOQUJMRUQo
eyBVTlVTRURfUEFSQU0ocmFuZ2VUb0JlUmVwbGFjZWQpOyBVTlVTRURfUEFSQU0oc3RyaW5nVG9C
ZVJlcGxhY2VkKTsgcmV0dXJuIHRydWU7IH0pOworICAgIHZvaWQgZGVsZXRlZEF1dG9jb3JyZWN0
aW9uQXRQb3NpdGlvbihjb25zdCBQb3NpdGlvbiYsIGNvbnN0IFN0cmluZyYgb3JpZ2luYWxTdHJp
bmcpIFVOTEVTU19FTkFCTEVEKHsgVU5VU0VEX1BBUkFNKG9yaWdpbmFsU3RyaW5nKTsgfSkKKwor
I2lmIFVTRShBVVRPQ09SUkVDVElPTl9QQU5FTCkKK3ByaXZhdGU6CisgICAgdm9pZCByZWNvcmRB
dXRvY29ycmVjdGlvblJlc3BvbnNlUmV2ZXJzZWQoY29uc3QgU3RyaW5nJiByZXBsYWNlZFN0cmlu
ZywgY29uc3QgU3RyaW5nJiByZXBsYWNlbWVudFN0cmluZyk7CisKKyAgICBib29sIHNob3VsZFN0
YXJ0VGltZXJGb3IoY29uc3QgRG9jdW1lbnRNYXJrZXIqIG1hcmtlciwgaW50IGVuZE9mZnNldCkg
Y29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiAoKChtYXJrZXItPnR5cGUoKSA9PSBEb2N1bWVu
dE1hcmtlcjo6UmVwbGFjZW1lbnQgJiYgIW1hcmtlci0+ZGVzY3JpcHRpb24oKS5pc051bGwoKSkg
CisgICAgICAgICAgICAgICAgIHx8IG1hcmtlci0+dHlwZSgpID09IERvY3VtZW50TWFya2VyOjpT
cGVsbGluZykgJiYgc3RhdGljX2Nhc3Q8aW50PihtYXJrZXItPmVuZE9mZnNldCgpKSA9PSBlbmRP
ZmZzZXQpOworICAgIH0KKworICAgIEVkaXRvckNsaWVudCogY2xpZW50KCk7CisgICAgVGV4dENo
ZWNrZXJDbGllbnQqIHRleHRDaGVja2VyKCk7CisgICAgRmxvYXRSZWN0IHJvb3RWaWV3UmVjdEZv
clJhbmdlKGNvbnN0IFJhbmdlKikgY29uc3Q7CisgICAgdm9pZCBtYXJrUHJlY2VkaW5nV2hpdGVz
cGFjZUZvckRlbGV0ZWRBdXRvY29ycmVjdGlvbkFmdGVyQ29tbWFuZChFZGl0Q29tbWFuZCopOwor
CisgICAgRWRpdG9yQ2xpZW50KiBtX2NsaWVudDsKKyAgICBGcmFtZSogbV9mcmFtZTsKKworICAg
IFRpbWVyPFNwZWxsaW5nQ29ycmVjdGlvbkNvbnRyb2xsZXI+IG1fY29ycmVjdGlvblBhbmVsVGlt
ZXI7CisgICAgQ29ycmVjdGlvblBhbmVsSW5mbyBtX2NvcnJlY3Rpb25QYW5lbEluZm87CisgICAg
Ym9vbCBtX2NvcnJlY3Rpb25QYW5lbElzRGlzbWlzc2VkQnlFZGl0b3I7CisKKyAgICBTdHJpbmcg
bV9vcmlnaW5hbFN0cmluZ0Zvckxhc3REZWxldGVkQXV0b2NvcnJlY3Rpb247CisgICAgUG9zaXRp
b24gbV9wb3NpdGlvbkZvckxhc3REZWxldGVkQXV0b2NvcnJlY3Rpb247CisjZW5kaWYKK307CisK
KyN1bmRlZiBVTkxFU1NfRU5BQkxFRAorCitpbmxpbmUgYm9vbCBTcGVsbGluZ0NvcnJlY3Rpb25D
b250cm9sbGVyOjpzaG91bGRSZW1vdmVNYXJrZXJzVXBvbkVkaXRpbmcoKQoreworI2lmIFVTRShN
QVJLRVJfUkVNT1ZBTF9VUE9OX0VESVRJTkcpCisgICAgcmV0dXJuIHRydWU7CisjZWxzZQorICAg
IHJldHVybiBmYWxzZTsKKyNlbmRpZgorfQorCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKKyNl
bmRpZiAvLyBTcGVsbGluZ0NvcnJlY3Rpb25Db250cm9sbGVyX2gKSW5kZXg6IFNvdXJjZS9XZWJD
b3JlL2VkaXRpbmcvQWx0ZXJuYXRpdmVUZXh0Q29udHJvbGxlci5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9XZWJDb3JlL2VkaXRpbmcvQWx0ZXJuYXRpdmVUZXh0Q29udHJvbGxlci5oCShyZXZpc2lv
biAxMTI4MzApCisrKyBTb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0FsdGVybmF0aXZlVGV4dENvbnRy
b2xsZXIuaAkod29ya2luZyBjb3B5KQpAQCAtMjMsOCArMjMsOCBAQAogICogT0YgVEhJUyBTT0ZU
V0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4K
ICAqLwogCi0jaWZuZGVmIFNwZWxsaW5nQ29ycmVjdGlvbkNvbnRyb2xsZXJfaAotI2RlZmluZSBT
cGVsbGluZ0NvcnJlY3Rpb25Db250cm9sbGVyX2gKKyNpZm5kZWYgQWx0ZXJuYXRpdmVUZXh0Q29u
dHJvbGxlcl9oCisjZGVmaW5lIEFsdGVybmF0aXZlVGV4dENvbnRyb2xsZXJfaAogCiAjaW5jbHVk
ZSAiRG9jdW1lbnRNYXJrZXIuaCIKICNpbmNsdWRlICJSYW5nZS5oIgpAQCAtNDMsNDggKzQzLDU2
IEBAIGNsYXNzIEVkaXRDb21tYW5kQ29tcG9zaXRpb247CiBjbGFzcyBGcmFtZTsKIGNsYXNzIFRl
eHRDaGVja2VyQ2xpZW50OwogCi1zdHJ1Y3QgQ29ycmVjdGlvblBhbmVsSW5mbyB7Ci0gICAgZW51
bSBQYW5lbFR5cGUgewotICAgICAgICBQYW5lbFR5cGVDb3JyZWN0aW9uID0gMCwKLSAgICAgICAg
UGFuZWxUeXBlUmV2ZXJzaW9uLAotICAgICAgICBQYW5lbFR5cGVTcGVsbGluZ1N1Z2dlc3Rpb25z
Ci0gICAgfTsKLQotICAgIFJlZlB0cjxSYW5nZT4gcmFuZ2VUb0JlUmVwbGFjZWQ7Ci0gICAgU3Ry
aW5nIHJlcGxhY2VkU3RyaW5nOwotICAgIFN0cmluZyByZXBsYWNlbWVudFN0cmluZzsKLSAgICBQ
YW5lbFR5cGUgcGFuZWxUeXBlOworY2xhc3MgQWx0ZXJuYXRpdmVUZXh0RGV0YWlscyA6IHB1Ymxp
YyBSZWZDb3VudGVkPEFsdGVybmF0aXZlVGV4dERldGFpbHM+IHsKK3B1YmxpYzoKKyAgICBBbHRl
cm5hdGl2ZVRleHREZXRhaWxzKCkgeyB9CisgICAgdmlydHVhbCB+QWx0ZXJuYXRpdmVUZXh0RGV0
YWlscygpIHsgfQorfTsKKworZW51bSBBbHRlcm5hdGl2ZVRleHRUeXBlIHsKKyAgICBBbHRlcm5h
dGl2ZVRleHRUeXBlQ29ycmVjdGlvbiA9IDAsCisgICAgQWx0ZXJuYXRpdmVUZXh0VHlwZVJldmVy
c2lvbiwKKyAgICBBbHRlcm5hdGl2ZVRleHRUeXBlU3BlbGxpbmdTdWdnZXN0aW9ucywKK307CisK
K3N0cnVjdCBBbHRlcm5hdGl2ZVRleHRJbmZvIHsKKyAgICBSZWZQdHI8UmFuZ2U+IHJhbmdlV2l0
aEFsdGVybmF0aXZlOwogICAgIGJvb2wgaXNBY3RpdmU7CisgICAgQWx0ZXJuYXRpdmVUZXh0VHlw
ZSB0eXBlOworICAgIFN0cmluZyBvcmlnaW5hbFRleHQ7CisgICAgUmVmUHRyPEFsdGVybmF0aXZl
VGV4dERldGFpbHM+IGRldGFpbHM7CiB9OwogCiBzdHJ1Y3QgVGV4dENoZWNraW5nUmVzdWx0Owog
Ci1lbnVtIFJlYXNvbkZvckRpc21pc3NpbmdDb3JyZWN0aW9uUGFuZWwgewotICAgIFJlYXNvbkZv
ckRpc21pc3NpbmdDb3JyZWN0aW9uUGFuZWxDYW5jZWxsZWQgPSAwLAotICAgIFJlYXNvbkZvckRp
c21pc3NpbmdDb3JyZWN0aW9uUGFuZWxJZ25vcmVkLAotICAgIFJlYXNvbkZvckRpc21pc3NpbmdD
b3JyZWN0aW9uUGFuZWxBY2NlcHRlZAorZW51bSBSZWFzb25Gb3JEaXNtaXNzaW5nQWx0ZXJuYXRp
dmVUZXh0IHsKKyAgICBSZWFzb25Gb3JEaXNtaXNzaW5nQWx0ZXJuYXRpdmVUZXh0Q2FuY2VsbGVk
ID0gMCwKKyAgICBSZWFzb25Gb3JEaXNtaXNzaW5nQWx0ZXJuYXRpdmVUZXh0SWdub3JlZCwKKyAg
ICBSZWFzb25Gb3JEaXNtaXNzaW5nQWx0ZXJuYXRpdmVUZXh0QWNjZXB0ZWQKIH07CiAKICNpZiBV
U0UoQVVUT0NPUlJFQ1RJT05fUEFORUwpCi0jZGVmaW5lIFVOTEVTU19FTkFCTEVEKGZ1bmN0aW9u
Qm9keSkgOworLy8gVGhlc2UgYmFja3NsYXNoZXMgYXJlIGZvciBtYWtpbmcgc3R5bGUgY2hlY2tl
ciBoYXBweS4KKyNkZWZpbmUgVU5MRVNTX0VOQUJMRUQoZnVuY3Rpb25Cb2R5KSBcCis7XAorCiAj
ZWxzZQogI2RlZmluZSBVTkxFU1NfRU5BQkxFRChmdW5jdGlvbkJvZHkpIGZ1bmN0aW9uQm9keQog
I2VuZGlmCiAKLWNsYXNzIFNwZWxsaW5nQ29ycmVjdGlvbkNvbnRyb2xsZXIgewotICAgIFdURl9N
QUtFX05PTkNPUFlBQkxFKFNwZWxsaW5nQ29ycmVjdGlvbkNvbnRyb2xsZXIpOyBXVEZfTUFLRV9G
QVNUX0FMTE9DQVRFRDsKK2NsYXNzIEFsdGVybmF0aXZlVGV4dENvbnRyb2xsZXIgeworICAgIFdU
Rl9NQUtFX05PTkNPUFlBQkxFKEFsdGVybmF0aXZlVGV4dENvbnRyb2xsZXIpOworICAgIFdURl9N
QUtFX0ZBU1RfQUxMT0NBVEVEOwogcHVibGljOgotICAgIFNwZWxsaW5nQ29ycmVjdGlvbkNvbnRy
b2xsZXIoRnJhbWUqKSBVTkxFU1NfRU5BQkxFRCh7fSkKLSAgICB+U3BlbGxpbmdDb3JyZWN0aW9u
Q29udHJvbGxlcigpIFVOTEVTU19FTkFCTEVEKHt9KQorICAgIEFsdGVybmF0aXZlVGV4dENvbnRy
b2xsZXIoRnJhbWUqKSBVTkxFU1NfRU5BQkxFRCh7IH0pCisgICAgfkFsdGVybmF0aXZlVGV4dENv
bnRyb2xsZXIoKSBVTkxFU1NfRU5BQkxFRCh7IH0pCiAKLSAgICB2b2lkIHN0YXJ0Q29ycmVjdGlv
blBhbmVsVGltZXIoQ29ycmVjdGlvblBhbmVsSW5mbzo6UGFuZWxUeXBlKSBVTkxFU1NfRU5BQkxF
RCh7fSkKLSAgICB2b2lkIHN0b3BDb3JyZWN0aW9uUGFuZWxUaW1lcigpIFVOTEVTU19FTkFCTEVE
KHt9KQorICAgIHZvaWQgc3RhcnRBbHRlcm5hdGl2ZVRleHRVSVRpbWVyKEFsdGVybmF0aXZlVGV4
dFR5cGUpIFVOTEVTU19FTkFCTEVEKHsgfSkKKyAgICB2b2lkIHN0b3BBbHRlcm5hdGl2ZVRleHRV
SVRpbWVyKCkgVU5MRVNTX0VOQUJMRUQoeyB9KQogCi0gICAgdm9pZCBkaXNtaXNzKFJlYXNvbkZv
ckRpc21pc3NpbmdDb3JyZWN0aW9uUGFuZWwpIFVOTEVTU19FTkFCTEVEKHt9KQotICAgIFN0cmlu
ZyBkaXNtaXNzU29vbihSZWFzb25Gb3JEaXNtaXNzaW5nQ29ycmVjdGlvblBhbmVsKSBVTkxFU1Nf
RU5BQkxFRCh7IHJldHVybiBTdHJpbmcoKTsgfSkKKyAgICB2b2lkIGRpc21pc3MoUmVhc29uRm9y
RGlzbWlzc2luZ0FsdGVybmF0aXZlVGV4dCkgVU5MRVNTX0VOQUJMRUQoeyB9KQogICAgIHZvaWQg
c2hvdyhQYXNzUmVmUHRyPFJhbmdlPiByYW5nZVRvUmVwbGFjZSwgY29uc3QgU3RyaW5nJiByZXBs
YWNlbWVudCkgVU5MRVNTX0VOQUJMRUQoeyBVTlVTRURfUEFSQU0ocmFuZ2VUb1JlcGxhY2UpOyBV
TlVTRURfUEFSQU0ocmVwbGFjZW1lbnQpOyB9KQogCi0gICAgdm9pZCBhcHBseUNvcnJlY3Rpb25Q
YW5lbEluZm8oY29uc3QgVmVjdG9yPERvY3VtZW50TWFya2VyOjpNYXJrZXJUeXBlPiYpIFVOTEVT
U19FTkFCTEVEKHt9KQogICAgIC8vIFJldHVybiB0cnVlIGlmIGNvcnJlY3Rpb24gd2FzIGFwcGxp
ZWQsIGZhbHNlIG90aGVyd2lzZS4KICAgICBib29sIGFwcGx5QXV0b2NvcnJlY3Rpb25CZWZvcmVU
eXBpbmdJZkFwcHJvcHJpYXRlKCkgVU5MRVNTX0VOQUJMRUQoeyByZXR1cm4gZmFsc2U7IH0pCiAK
QEAgLTk2LDE5ICsxMDQsMTcgQEAgcHVibGljOgogICAgIHZvaWQgc3RvcFBlbmRpbmdDb3JyZWN0
aW9uKGNvbnN0IFZpc2libGVTZWxlY3Rpb24mIG9sZFNlbGVjdGlvbikgVU5MRVNTX0VOQUJMRUQo
eyBVTlVTRURfUEFSQU0ob2xkU2VsZWN0aW9uKTsgfSkKICAgICB2b2lkIGFwcGx5UGVuZGluZ0Nv
cnJlY3Rpb24oY29uc3QgVmlzaWJsZVNlbGVjdGlvbiYgc2VsZWN0aW9uQWZ0ZXJUeXBpbmcpIFVO
TEVTU19FTkFCTEVEKHsgVU5VU0VEX1BBUkFNKHNlbGVjdGlvbkFmdGVyVHlwaW5nKTsgfSkKIAot
ICAgIHZvaWQgaGFuZGxlQ29ycmVjdGlvblBhbmVsUmVzdWx0KGNvbnN0IFN0cmluZyYgY29ycmVj
dGlvbikgVU5MRVNTX0VOQUJMRUQoeyBVTlVTRURfUEFSQU0oY29ycmVjdGlvbik7IH0pCi0gICAg
dm9pZCBoYW5kbGVDYW5jZWxPcGVyYXRpb24oKSBVTkxFU1NfRU5BQkxFRCh7fSkKKyAgICB2b2lk
IGhhbmRsZUFsdGVybmF0aXZlVGV4dFVJUmVzdWx0KGNvbnN0IFN0cmluZyYgcmVzdWx0KSBVTkxF
U1NfRU5BQkxFRCh7IFVOVVNFRF9QQVJBTShyZXN1bHQpOyB9KQorICAgIHZvaWQgaGFuZGxlQ2Fu
Y2VsT3BlcmF0aW9uKCkgVU5MRVNTX0VOQUJMRUQoeyB9KQogCiAgICAgYm9vbCBoYXNQZW5kaW5n
Q29ycmVjdGlvbigpIGNvbnN0IFVOTEVTU19FTkFCTEVEKHsgcmV0dXJuIGZhbHNlOyB9KQogICAg
IGJvb2wgaXNTcGVsbGluZ01hcmtlckFsbG93ZWQoUGFzc1JlZlB0cjxSYW5nZT4gbWlzc3BlbGxp
bmdSYW5nZSkgY29uc3QgVU5MRVNTX0VOQUJMRUQoeyBVTlVTRURfUEFSQU0obWlzc3BlbGxpbmdS
YW5nZSk7IHJldHVybiB0cnVlOyB9KQogICAgIGJvb2wgaXNBdXRvbWF0aWNTcGVsbGluZ0NvcnJl
Y3Rpb25FbmFibGVkKCkgVU5MRVNTX0VOQUJMRUQoeyByZXR1cm4gZmFsc2U7IH0pCiAgICAgYm9v
bCBzaG91bGRSZW1vdmVNYXJrZXJzVXBvbkVkaXRpbmcoKTsKIAotICAgIHZvaWQgY29ycmVjdGlv
blBhbmVsVGltZXJGaXJlZChUaW1lcjxTcGVsbGluZ0NvcnJlY3Rpb25Db250cm9sbGVyPiopIFVO
TEVTU19FTkFCTEVEKHt9KQogICAgIHZvaWQgcmVjb3JkQXV0b2NvcnJlY3Rpb25SZXNwb25zZVJl
dmVyc2VkKGNvbnN0IFN0cmluZyYgcmVwbGFjZWRTdHJpbmcsIFBhc3NSZWZQdHI8UmFuZ2U+IHJl
cGxhY2VtZW50UmFuZ2UpIFVOTEVTU19FTkFCTEVEKHsgVU5VU0VEX1BBUkFNKHJlcGxhY2VkU3Ry
aW5nKTsgVU5VU0VEX1BBUkFNKHJlcGxhY2VtZW50UmFuZ2UpOyB9KQogICAgIHZvaWQgbWFya1Jl
dmVyc2VkKFBhc3NSZWZQdHI8UmFuZ2U+IGNoYW5nZWRSYW5nZSkgVU5MRVNTX0VOQUJMRUQoeyBV
TlVTRURfUEFSQU0oY2hhbmdlZFJhbmdlKTsgfSkKICAgICB2b2lkIG1hcmtDb3JyZWN0aW9uKFBh
c3NSZWZQdHI8UmFuZ2U+IHJlcGxhY2VkUmFuZ2UsIGNvbnN0IFN0cmluZyYgcmVwbGFjZWRTdHJp
bmcpIFVOTEVTU19FTkFCTEVEKHsgVU5VU0VEX1BBUkFNKHJlcGxhY2VkUmFuZ2UpOyBVTlVTRURf
UEFSQU0ocmVwbGFjZWRTdHJpbmcpOyB9KQotICAgIHZvaWQgcmVjb3JkU3BlbGxjaGVja2VyUmVz
cG9uc2VGb3JNb2RpZmllZENvcnJlY3Rpb24oUmFuZ2UqIHJhbmdlT2ZDb3JyZWN0aW9uLCBjb25z
dCBTdHJpbmcmIGNvcnJlY3RlZCwgY29uc3QgU3RyaW5nJiBjb3JyZWN0aW9uKSBVTkxFU1NfRU5B
QkxFRCh7IFVOVVNFRF9QQVJBTShyYW5nZU9mQ29ycmVjdGlvbik7IFVOVVNFRF9QQVJBTShjb3Jy
ZWN0ZWQpOyBVTlVTRURfUEFSQU0oY29ycmVjdGlvbik7IH0pCiAKICAgICAvLyBUaGlzIGZ1bmN0
aW9uIHJldHVybnMgZmFsc2UgaWYgdGhlIHJlcGxhY2VtZW50IHNob3VsZCBub3QgYmUgY2Fycmll
ZCBvdXQuCiAgICAgYm9vbCBwcm9jZXNzTWFya2Vyc09uVGV4dFRvQmVSZXBsYWNlZEJ5UmVzdWx0
KGNvbnN0IFRleHRDaGVja2luZ1Jlc3VsdCosIFJhbmdlKiByYW5nZVRvQmVSZXBsYWNlZCwgY29u
c3QgU3RyaW5nJiBzdHJpbmdUb0JlUmVwbGFjZWQpIFVOTEVTU19FTkFCTEVEKHsgVU5VU0VEX1BB
UkFNKHJhbmdlVG9CZVJlcGxhY2VkKTsgVU5VU0VEX1BBUkFNKHN0cmluZ1RvQmVSZXBsYWNlZCk7
IHJldHVybiB0cnVlOyB9KTsKQEAgLTExNiw3ICsxMjIsMTEgQEAgcHVibGljOgogCiAjaWYgVVNF
KEFVVE9DT1JSRUNUSU9OX1BBTkVMKQogcHJpdmF0ZToKKyAgICBTdHJpbmcgZGlzbWlzc1Nvb24o
UmVhc29uRm9yRGlzbWlzc2luZ0FsdGVybmF0aXZlVGV4dCk7CisgICAgdm9pZCBhcHBseUFsdGVy
bmF0aXZlVGV4dChjb25zdCBTdHJpbmcmIGFsdGVybmF0aXZlLCBjb25zdCBWZWN0b3I8RG9jdW1l
bnRNYXJrZXI6Ok1hcmtlclR5cGU+Jik7CisgICAgdm9pZCB0aW1lckZpcmVkKFRpbWVyPEFsdGVy
bmF0aXZlVGV4dENvbnRyb2xsZXI+Kik7CiAgICAgdm9pZCByZWNvcmRBdXRvY29ycmVjdGlvblJl
c3BvbnNlUmV2ZXJzZWQoY29uc3QgU3RyaW5nJiByZXBsYWNlZFN0cmluZywgY29uc3QgU3RyaW5n
JiByZXBsYWNlbWVudFN0cmluZyk7CisgICAgdm9pZCByZWNvcmRTcGVsbGNoZWNrZXJSZXNwb25z
ZUZvck1vZGlmaWVkQ29ycmVjdGlvbihSYW5nZSogcmFuZ2VPZkNvcnJlY3Rpb24sIGNvbnN0IFN0
cmluZyYgY29ycmVjdGVkLCBjb25zdCBTdHJpbmcmIGNvcnJlY3Rpb24pOwogCiAgICAgYm9vbCBz
aG91bGRTdGFydFRpbWVyRm9yKGNvbnN0IERvY3VtZW50TWFya2VyKiBtYXJrZXIsIGludCBlbmRP
ZmZzZXQpIGNvbnN0CiAgICAgewpAQCAtMTMyLDkgKzE0Miw5IEBAIHByaXZhdGU6CiAgICAgRWRp
dG9yQ2xpZW50KiBtX2NsaWVudDsKICAgICBGcmFtZSogbV9mcmFtZTsKIAotICAgIFRpbWVyPFNw
ZWxsaW5nQ29ycmVjdGlvbkNvbnRyb2xsZXI+IG1fY29ycmVjdGlvblBhbmVsVGltZXI7Ci0gICAg
Q29ycmVjdGlvblBhbmVsSW5mbyBtX2NvcnJlY3Rpb25QYW5lbEluZm87Ci0gICAgYm9vbCBtX2Nv
cnJlY3Rpb25QYW5lbElzRGlzbWlzc2VkQnlFZGl0b3I7CisgICAgVGltZXI8QWx0ZXJuYXRpdmVU
ZXh0Q29udHJvbGxlcj4gbV90aW1lcjsKKyAgICBBbHRlcm5hdGl2ZVRleHRJbmZvIG1fYWx0ZXJu
YXRpdmVUZXh0SW5mbzsKKyAgICBib29sIG1faXNEaXNtaXNzZWRCeUVkaXRpbmc7CiAKICAgICBT
dHJpbmcgbV9vcmlnaW5hbFN0cmluZ0Zvckxhc3REZWxldGVkQXV0b2NvcnJlY3Rpb247CiAgICAg
UG9zaXRpb24gbV9wb3NpdGlvbkZvckxhc3REZWxldGVkQXV0b2NvcnJlY3Rpb247CkBAIC0xNDMs
NyArMTUzLDcgQEAgcHJpdmF0ZToKIAogI3VuZGVmIFVOTEVTU19FTkFCTEVECiAKLWlubGluZSBi
b29sIFNwZWxsaW5nQ29ycmVjdGlvbkNvbnRyb2xsZXI6OnNob3VsZFJlbW92ZU1hcmtlcnNVcG9u
RWRpdGluZygpCitpbmxpbmUgYm9vbCBBbHRlcm5hdGl2ZVRleHRDb250cm9sbGVyOjpzaG91bGRS
ZW1vdmVNYXJrZXJzVXBvbkVkaXRpbmcoKQogewogI2lmIFVTRShNQVJLRVJfUkVNT1ZBTF9VUE9O
X0VESVRJTkcpCiAgICAgcmV0dXJuIHRydWU7CkBAIC0xNTQsNCArMTY0LDQgQEAgaW5saW5lIGJv
b2wgU3BlbGxpbmdDb3JyZWN0aW9uQ29udHJvbGxlcgogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3Jl
CiAKLSNlbmRpZiAvLyBTcGVsbGluZ0NvcnJlY3Rpb25Db250cm9sbGVyX2gKKyNlbmRpZiAvLyBB
bHRlcm5hdGl2ZVRleHRDb250cm9sbGVyX2gKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2VkaXRpbmcv
RWRpdGluZ0FsbEluT25lLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9lZGl0aW5n
L0VkaXRpbmdBbGxJbk9uZS5jcHAJKHJldmlzaW9uIDExMzA0NCkKKysrIFNvdXJjZS9XZWJDb3Jl
L2VkaXRpbmcvRWRpdGluZ0FsbEluT25lLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjUsNiArMjUs
NyBAQAogCiAvLyBUaGlzIGFsbC1pbi1vbmUgY3BwIGZpbGUgY3V0cyBkb3duIG9uIHRlbXBsYXRl
IGJsb2F0IHRvIGFsbG93IHVzIHRvIGJ1aWxkIG91ciBXaW5kb3dzIHJlbGVhc2UgYnVpbGQuCiAK
KyNpbmNsdWRlIDxBbHRlcm5hdGl2ZVRleHRDb250cm9sbGVyLmNwcD4KICNpbmNsdWRlIDxBcHBl
bmROb2RlQ29tbWFuZC5jcHA+CiAjaW5jbHVkZSA8QXBwbHlCbG9ja0VsZW1lbnRDb21tYW5kLmNw
cD4KICNpbmNsdWRlIDxBcHBseVN0eWxlQ29tbWFuZC5jcHA+CkBAIC02NSw3ICs2Niw2IEBACiAj
aW5jbHVkZSA8U21hcnRSZXBsYWNlLmNwcD4KICNpbmNsdWRlIDxTbWFydFJlcGxhY2VDRi5jcHA+
CiAjaW5jbHVkZSA8U3BlbGxpbmdDb3JyZWN0aW9uQ29tbWFuZC5jcHA+Ci0jaW5jbHVkZSA8U3Bl
bGxpbmdDb3JyZWN0aW9uQ29udHJvbGxlci5jcHA+CiAjaW5jbHVkZSA8U3BlbGxDaGVja2VyLmNw
cD4KICNpbmNsdWRlIDxTcGxpdEVsZW1lbnRDb21tYW5kLmNwcD4KICNpbmNsdWRlIDxTcGxpdFRl
eHROb2RlQ29tbWFuZC5jcHA+CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0VkaXRvci5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvZWRpdGluZy9FZGl0b3IuY3BwCShyZXZp
c2lvbiAxMTMwNDQpCisrKyBTb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0VkaXRvci5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTI4LDYgKzI4LDcgQEAKICNpbmNsdWRlICJFZGl0b3IuaCIKIAogI2luY2x1
ZGUgIkFYT2JqZWN0Q2FjaGUuaCIKKyNpbmNsdWRlICJBbHRlcm5hdGl2ZVRleHRDb250cm9sbGVy
LmgiCiAjaW5jbHVkZSAiQXBwbHlTdHlsZUNvbW1hbmQuaCIKICNpbmNsdWRlICJDU1NDb21wdXRl
ZFN0eWxlRGVjbGFyYXRpb24uaCIKICNpbmNsdWRlICJDU1NQcm9wZXJ0eS5oIgpAQCAtMzcsNyAr
MzgsNiBAQAogI2luY2x1ZGUgIkNhY2hlZFJlc291cmNlTG9hZGVyLmgiCiAjaW5jbHVkZSAiQ2xp
cGJvYXJkRXZlbnQuaCIKICNpbmNsdWRlICJDb21wb3NpdGlvbkV2ZW50LmgiCi0jaW5jbHVkZSAi
U3BlbGxpbmdDb3JyZWN0aW9uQ29udHJvbGxlci5oIgogI2luY2x1ZGUgIkNyZWF0ZUxpbmtDb21t
YW5kLmgiCiAjaW5jbHVkZSAiRGVsZXRlQnV0dG9uQ29udHJvbGxlci5oIgogI2luY2x1ZGUgIkRl
bGV0ZVNlbGVjdGlvbkNvbW1hbmQuaCIKQEAgLTQ4Miw3ICs0ODIsNyBAQCB2b2lkIEVkaXRvcjo6
cmVzcG9uZFRvQ2hhbmdlZFNlbGVjdGlvbihjCiAgICAgICAgIGNsaWVudCgpLT5yZXNwb25kVG9D
aGFuZ2VkU2VsZWN0aW9uKG1fZnJhbWUpOwogICAgIHNldFN0YXJ0TmV3S2lsbFJpbmdTZXF1ZW5j
ZSh0cnVlKTsKICAgICBtX2RlbGV0ZUJ1dHRvbkNvbnRyb2xsZXItPnJlc3BvbmRUb0NoYW5nZWRT
ZWxlY3Rpb24ob2xkU2VsZWN0aW9uKTsKLSAgICBtX3NwZWxsaW5nQ29ycmVjdG9yLT5yZXNwb25k
VG9DaGFuZ2VkU2VsZWN0aW9uKG9sZFNlbGVjdGlvbik7CisgICAgbV9hbHRlcm5hdGl2ZVRleHRD
b250cm9sbGVyLT5yZXNwb25kVG9DaGFuZ2VkU2VsZWN0aW9uKG9sZFNlbGVjdGlvbik7CiB9CiAK
IHZvaWQgRWRpdG9yOjpyZXNwb25kVG9DaGFuZ2VkQ29udGVudHMoY29uc3QgVmlzaWJsZVNlbGVj
dGlvbiYgZW5kaW5nU2VsZWN0aW9uKQpAQCAtNzgyLDcgKzc4Miw3IEBAIHZvaWQgRWRpdG9yOjph
cHBsaWVkRWRpdGluZyhQYXNzUmVmUHRyPEMKICAgICBkaXNwYXRjaEVkaXRhYmxlQ29udGVudENo
YW5nZWRFdmVudHMoY29tcG9zaXRpb24tPnN0YXJ0aW5nUm9vdEVkaXRhYmxlRWxlbWVudCgpLCBj
b21wb3NpdGlvbi0+ZW5kaW5nUm9vdEVkaXRhYmxlRWxlbWVudCgpKTsKICAgICBWaXNpYmxlU2Vs
ZWN0aW9uIG5ld1NlbGVjdGlvbihjbWQtPmVuZGluZ1NlbGVjdGlvbigpKTsKIAotICAgIG1fc3Bl
bGxpbmdDb3JyZWN0b3ItPnJlc3BvbmRUb0FwcGxpZWRFZGl0aW5nKGNtZC5nZXQoKSk7CisgICAg
bV9hbHRlcm5hdGl2ZVRleHRDb250cm9sbGVyLT5yZXNwb25kVG9BcHBsaWVkRWRpdGluZyhjbWQu
Z2V0KCkpOwogCiAgICAgLy8gRG9uJ3QgY2xlYXIgdGhlIHR5cGluZyBzdHlsZSB3aXRoIHRoaXMg
c2VsZWN0aW9uIGNoYW5nZS4gIFdlIGRvIHRob3NlIHRoaW5ncyBlbHNld2hlcmUgaWYgbmVjZXNz
YXJ5LgogICAgIGNoYW5nZVNlbGVjdGlvbkFmdGVyQ29tbWFuZChuZXdTZWxlY3Rpb24sIGZhbHNl
LCBmYWxzZSk7CkBAIC04MTIsNyArODEyLDcgQEAgdm9pZCBFZGl0b3I6OnVuYXBwbGllZEVkaXRp
bmcoUGFzc1JlZlB0cgogICAgIAogICAgIFZpc2libGVTZWxlY3Rpb24gbmV3U2VsZWN0aW9uKGNt
ZC0+c3RhcnRpbmdTZWxlY3Rpb24oKSk7CiAgICAgY2hhbmdlU2VsZWN0aW9uQWZ0ZXJDb21tYW5k
KG5ld1NlbGVjdGlvbiwgdHJ1ZSwgdHJ1ZSk7Ci0gICAgbV9zcGVsbGluZ0NvcnJlY3Rvci0+cmVz
cG9uZFRvVW5hcHBsaWVkRWRpdGluZyhjbWQuZ2V0KCkpOworICAgIG1fYWx0ZXJuYXRpdmVUZXh0
Q29udHJvbGxlci0+cmVzcG9uZFRvVW5hcHBsaWVkRWRpdGluZyhjbWQuZ2V0KCkpOwogICAgIAog
ICAgIG1fbGFzdEVkaXRDb21tYW5kID0gMDsKICAgICBpZiAoY2xpZW50KCkpCkBAIC04NDQsNyAr
ODQ0LDcgQEAgRWRpdG9yOjpFZGl0b3IoRnJhbWUqIGZyYW1lKQogICAgICwgbV9zaG91bGRTdHls
ZVdpdGhDU1MoZmFsc2UpCiAgICAgLCBtX2tpbGxSaW5nKGFkb3B0UHRyKG5ldyBLaWxsUmluZykp
CiAgICAgLCBtX3NwZWxsQ2hlY2tlcihhZG9wdFB0cihuZXcgU3BlbGxDaGVja2VyKGZyYW1lKSkp
Ci0gICAgLCBtX3NwZWxsaW5nQ29ycmVjdG9yKGFkb3B0UHRyKG5ldyBTcGVsbGluZ0NvcnJlY3Rp
b25Db250cm9sbGVyKGZyYW1lKSkpCisgICAgLCBtX2FsdGVybmF0aXZlVGV4dENvbnRyb2xsZXIo
YWRvcHRQdHIobmV3IEFsdGVybmF0aXZlVGV4dENvbnRyb2xsZXIoZnJhbWUpKSkKICAgICAsIG1f
YXJlTWFya2VkVGV4dE1hdGNoZXNIaWdobGlnaHRlZChmYWxzZSkKICAgICAsIG1fZGVmYXVsdFBh
cmFncmFwaFNlcGFyYXRvcihFZGl0b3JQYXJhZ3JhcGhTZXBhcmF0b3JJc0RpdikKIHsKQEAgLTg5
NSw3ICs4OTUsNyBAQCBib29sIEVkaXRvcjo6aW5zZXJ0VGV4dFdpdGhvdXRTZW5kaW5nVGV4CiAg
ICAgaWYgKHRleHQubGVuZ3RoKCkgPT0gMSAmJiBpc1B1bmN0KHRleHRbMF0pICYmICFpc0FtYmln
dW91c0JvdW5kYXJ5Q2hhcmFjdGVyKHRleHRbMF0pKQogICAgICAgICBzaG91bGRDb25zaWRlckFw
cGx5aW5nQXV0b2NvcnJlY3Rpb24gPSB0cnVlOwogCi0gICAgYm9vbCBhdXRvY29ycmVjdGlvbldh
c0FwcGxpZWQgPSBzaG91bGRDb25zaWRlckFwcGx5aW5nQXV0b2NvcnJlY3Rpb24gJiYgbV9zcGVs
bGluZ0NvcnJlY3Rvci0+YXBwbHlBdXRvY29ycmVjdGlvbkJlZm9yZVR5cGluZ0lmQXBwcm9wcmlh
dGUoKTsKKyAgICBib29sIGF1dG9jb3JyZWN0aW9uV2FzQXBwbGllZCA9IHNob3VsZENvbnNpZGVy
QXBwbHlpbmdBdXRvY29ycmVjdGlvbiAmJiBtX2FsdGVybmF0aXZlVGV4dENvbnRyb2xsZXItPmFw
cGx5QXV0b2NvcnJlY3Rpb25CZWZvcmVUeXBpbmdJZkFwcHJvcHJpYXRlKCk7CiAKICAgICAvLyBH
ZXQgdGhlIHNlbGVjdGlvbiB0byB1c2UgZm9yIHRoZSBldmVudCB0aGF0IHRyaWdnZXJlZCB0aGlz
IGluc2VydFRleHQuCiAgICAgLy8gSWYgdGhlIGV2ZW50IGhhbmRsZXIgY2hhbmdlZCB0aGUgc2Vs
ZWN0aW9uLCB3ZSBtYXkgd2FudCB0byB1c2UgYSBkaWZmZXJlbnQgc2VsZWN0aW9uCkBAIC05MzEs
NyArOTMxLDcgQEAgYm9vbCBFZGl0b3I6Omluc2VydExpbmVCcmVhaygpCiAgICAgaWYgKCFzaG91
bGRJbnNlcnRUZXh0KCJcbiIsIG1fZnJhbWUtPnNlbGVjdGlvbigpLT50b05vcm1hbGl6ZWRSYW5n
ZSgpLmdldCgpLCBFZGl0b3JJbnNlcnRBY3Rpb25UeXBlZCkpCiAgICAgICAgIHJldHVybiB0cnVl
OwogCi0gICAgYm9vbCBhdXRvY29ycmVjdGlvbklzQXBwbGllZCA9IG1fc3BlbGxpbmdDb3JyZWN0
b3ItPmFwcGx5QXV0b2NvcnJlY3Rpb25CZWZvcmVUeXBpbmdJZkFwcHJvcHJpYXRlKCk7CisgICAg
Ym9vbCBhdXRvY29ycmVjdGlvbklzQXBwbGllZCA9IG1fYWx0ZXJuYXRpdmVUZXh0Q29udHJvbGxl
ci0+YXBwbHlBdXRvY29ycmVjdGlvbkJlZm9yZVR5cGluZ0lmQXBwcm9wcmlhdGUoKTsKICAgICBU
eXBpbmdDb21tYW5kOjppbnNlcnRMaW5lQnJlYWsobV9mcmFtZS0+ZG9jdW1lbnQoKSwgYXV0b2Nv
cnJlY3Rpb25Jc0FwcGxpZWQgPyBUeXBpbmdDb21tYW5kOjpSZXRhaW5BdXRvY29ycmVjdGlvbklu
ZGljYXRvciA6IDApOwogICAgIHJldmVhbFNlbGVjdGlvbkFmdGVyRWRpdGluZ09wZXJhdGlvbigp
OwogCkBAIC05NDksNyArOTQ5LDcgQEAgYm9vbCBFZGl0b3I6Omluc2VydFBhcmFncmFwaFNlcGFy
YXRvcigpCiAgICAgaWYgKCFzaG91bGRJbnNlcnRUZXh0KCJcbiIsIG1fZnJhbWUtPnNlbGVjdGlv
bigpLT50b05vcm1hbGl6ZWRSYW5nZSgpLmdldCgpLCBFZGl0b3JJbnNlcnRBY3Rpb25UeXBlZCkp
CiAgICAgICAgIHJldHVybiB0cnVlOwogCi0gICAgYm9vbCBhdXRvY29ycmVjdGlvbklzQXBwbGll
ZCA9IG1fc3BlbGxpbmdDb3JyZWN0b3ItPmFwcGx5QXV0b2NvcnJlY3Rpb25CZWZvcmVUeXBpbmdJ
ZkFwcHJvcHJpYXRlKCk7CisgICAgYm9vbCBhdXRvY29ycmVjdGlvbklzQXBwbGllZCA9IG1fYWx0
ZXJuYXRpdmVUZXh0Q29udHJvbGxlci0+YXBwbHlBdXRvY29ycmVjdGlvbkJlZm9yZVR5cGluZ0lm
QXBwcm9wcmlhdGUoKTsKICAgICBUeXBpbmdDb21tYW5kOjppbnNlcnRQYXJhZ3JhcGhTZXBhcmF0
b3IobV9mcmFtZS0+ZG9jdW1lbnQoKSwgYXV0b2NvcnJlY3Rpb25Jc0FwcGxpZWQgPyBUeXBpbmdD
b21tYW5kOjpSZXRhaW5BdXRvY29ycmVjdGlvbkluZGljYXRvciA6IDApOwogICAgIHJldmVhbFNl
bGVjdGlvbkFmdGVyRWRpdGluZ09wZXJhdGlvbigpOwogCkBAIC0xMTczLDcgKzExNzMsNyBAQCB2
b2lkIEVkaXRvcjo6dG9nZ2xlQXV0b21hdGljVGV4dFJlcGxhY2VtCiAKIGJvb2wgRWRpdG9yOjpp
c0F1dG9tYXRpY1NwZWxsaW5nQ29ycmVjdGlvbkVuYWJsZWQoKQogewotICAgIHJldHVybiBtX3Nw
ZWxsaW5nQ29ycmVjdG9yLT5pc0F1dG9tYXRpY1NwZWxsaW5nQ29ycmVjdGlvbkVuYWJsZWQoKTsK
KyAgICByZXR1cm4gbV9hbHRlcm5hdGl2ZVRleHRDb250cm9sbGVyLT5pc0F1dG9tYXRpY1NwZWxs
aW5nQ29ycmVjdGlvbkVuYWJsZWQoKTsKIH0KIAogdm9pZCBFZGl0b3I6OnRvZ2dsZUF1dG9tYXRp
Y1NwZWxsaW5nQ29ycmVjdGlvbigpCkBAIC0xNzcyLDcgKzE3NzIsNyBAQCB2b2lkIEVkaXRvcjo6
bWFya01pc3NwZWxsaW5nc0FmdGVyVHlwaW5nCiAjZW5kaWYKIAogICAgIGlmICh1bmlmaWVkVGV4
dENoZWNrZXJFbmFibGVkKCkpIHsKLSAgICAgICAgbV9zcGVsbGluZ0NvcnJlY3Rvci0+YXBwbHlQ
ZW5kaW5nQ29ycmVjdGlvbihzZWxlY3Rpb25BZnRlclR5cGluZyk7CisgICAgICAgIG1fYWx0ZXJu
YXRpdmVUZXh0Q29udHJvbGxlci0+YXBwbHlQZW5kaW5nQ29ycmVjdGlvbihzZWxlY3Rpb25BZnRl
clR5cGluZyk7CiAKICAgICAgICAgVGV4dENoZWNraW5nVHlwZU1hc2sgdGV4dENoZWNraW5nT3B0
aW9ucyA9IDA7CiAKQEAgLTE5MTIsNyArMTkxMiw3IEBAIHZvaWQgRWRpdG9yOjptYXJrQWxsTWlz
c3BlbGxpbmdzQW5kQmFkR3IKICAgICBBU1NFUlQodW5pZmllZFRleHRDaGVja2VyRW5hYmxlZCgp
KTsKIAogICAgIC8vIFRoZXJlIHNob3VsZG4ndCBiZSBwZW5kaW5nIGF1dG9jb3JyZWN0aW9uIGF0
IHRoaXMgbW9tZW50LgotICAgIEFTU0VSVCghbV9zcGVsbGluZ0NvcnJlY3Rvci0+aGFzUGVuZGlu
Z0NvcnJlY3Rpb24oKSk7CisgICAgQVNTRVJUKCFtX2FsdGVybmF0aXZlVGV4dENvbnRyb2xsZXIt
Pmhhc1BlbmRpbmdDb3JyZWN0aW9uKCkpOwogCiAgICAgYm9vbCBzaG91bGRNYXJrR3JhbW1hciA9
IHRleHRDaGVja2luZ09wdGlvbnMgJiBUZXh0Q2hlY2tpbmdUeXBlR3JhbW1hcjsKICAgICBib29s
IHNob3VsZFNob3dDb3JyZWN0aW9uUGFuZWwgPSB0ZXh0Q2hlY2tpbmdPcHRpb25zICYgVGV4dENo
ZWNraW5nVHlwZVNob3dDb3JyZWN0aW9uUGFuZWw7CkBAIC0yMDA1LDcgKzIwMDUsNyBAQCB2b2lk
IEVkaXRvcjo6bWFya0FuZFJlcGxhY2VGb3IoUGFzc1JlZlB0CiAgICAgICAgIGlmIChzaG91bGRN
YXJrU3BlbGxpbmcgJiYgcmVzdWx0LT50eXBlID09IFRleHRDaGVja2luZ1R5cGVTcGVsbGluZyAm
JiByZXN1bHRMb2NhdGlvbiA+PSBwYXJhZ3JhcGguY2hlY2tpbmdTdGFydCgpICYmIHJlc3VsdExv
Y2F0aW9uICsgcmVzdWx0TGVuZ3RoIDw9IHNwZWxsaW5nUmFuZ2VFbmRPZmZzZXQgJiYgIXJlc3Vs
dEVuZHNBdEFtYmlndW91c0JvdW5kYXJ5KSB7CiAgICAgICAgICAgICBBU1NFUlQocmVzdWx0TGVu
Z3RoID4gMCAmJiByZXN1bHRMb2NhdGlvbiA+PSAwKTsKICAgICAgICAgICAgIFJlZlB0cjxSYW5n
ZT4gbWlzc3BlbGxpbmdSYW5nZSA9IHBhcmFncmFwaC5zdWJyYW5nZShyZXN1bHRMb2NhdGlvbiwg
cmVzdWx0TGVuZ3RoKTsKLSAgICAgICAgICAgIGlmICghbV9zcGVsbGluZ0NvcnJlY3Rvci0+aXNT
cGVsbGluZ01hcmtlckFsbG93ZWQobWlzc3BlbGxpbmdSYW5nZSkpCisgICAgICAgICAgICBpZiAo
IW1fYWx0ZXJuYXRpdmVUZXh0Q29udHJvbGxlci0+aXNTcGVsbGluZ01hcmtlckFsbG93ZWQobWlz
c3BlbGxpbmdSYW5nZSkpCiAgICAgICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgICAgICBt
aXNzcGVsbGluZ1JhbmdlLT5zdGFydENvbnRhaW5lcigpLT5kb2N1bWVudCgpLT5tYXJrZXJzKCkt
PmFkZE1hcmtlcihtaXNzcGVsbGluZ1JhbmdlLmdldCgpLCBEb2N1bWVudE1hcmtlcjo6U3BlbGxp
bmcsIHJlc3VsdC0+cmVwbGFjZW1lbnQpOwogICAgICAgICB9IGVsc2UgaWYgKHNob3VsZE1hcmtH
cmFtbWFyICYmIHJlc3VsdC0+dHlwZSA9PSBUZXh0Q2hlY2tpbmdUeXBlR3JhbW1hciAmJiBwYXJh
Z3JhcGguY2hlY2tpbmdSYW5nZUNvdmVycyhyZXN1bHRMb2NhdGlvbiwgcmVzdWx0TGVuZ3RoKSkg
ewpAQCAtMjA0OCw3ICsyMDQ4LDcgQEAgdm9pZCBFZGl0b3I6Om1hcmtBbmRSZXBsYWNlRm9yKFBh
c3NSZWZQdAogICAgICAgICAgICAgICAgIGNvbnRpbnVlOwogCiAgICAgICAgICAgICBTdHJpbmcg
cmVwbGFjZWRTdHJpbmcgPSBwbGFpblRleHQocmFuZ2VUb1JlcGxhY2UuZ2V0KCkpOwotICAgICAg
ICAgICAgYm9vbCBleGlzdGluZ01hcmtlcnNQZXJtaXRSZXBsYWNlbWVudCA9IG1fc3BlbGxpbmdD
b3JyZWN0b3ItPnByb2Nlc3NNYXJrZXJzT25UZXh0VG9CZVJlcGxhY2VkQnlSZXN1bHQocmVzdWx0
LCByYW5nZVRvUmVwbGFjZS5nZXQoKSwgcmVwbGFjZWRTdHJpbmcpOworICAgICAgICAgICAgYm9v
bCBleGlzdGluZ01hcmtlcnNQZXJtaXRSZXBsYWNlbWVudCA9IG1fYWx0ZXJuYXRpdmVUZXh0Q29u
dHJvbGxlci0+cHJvY2Vzc01hcmtlcnNPblRleHRUb0JlUmVwbGFjZWRCeVJlc3VsdChyZXN1bHQs
IHJhbmdlVG9SZXBsYWNlLmdldCgpLCByZXBsYWNlZFN0cmluZyk7CiAgICAgICAgICAgICBpZiAo
IWV4aXN0aW5nTWFya2Vyc1Blcm1pdFJlcGxhY2VtZW50KQogICAgICAgICAgICAgICAgIGNvbnRp
bnVlOwogCkBAIC0yMDU5LDcgKzIwNTksNyBAQCB2b2lkIEVkaXRvcjo6bWFya0FuZFJlcGxhY2VG
b3IoUGFzc1JlZlB0CiAgICAgICAgICAgICAgICAgLy8gc2hvdWxkU2hvd0NvcnJlY3Rpb25QYW5l
bCBjYW4gYmUgdHJ1ZSBvbmx5IHdoZW4gdGhlIHBhbmVsIGlzIGF2YWlsYWJsZS4KICAgICAgICAg
ICAgICAgICBpZiAocmVzdWx0TG9jYXRpb24gKyByZXN1bHRMZW5ndGggPT0gc3BlbGxpbmdSYW5n
ZUVuZE9mZnNldCkgewogICAgICAgICAgICAgICAgICAgICAvLyBXZSBvbmx5IHNob3cgdGhlIGNv
cnJlY3Rpb24gcGFuZWwgb24gdGhlIGxhc3Qgd29yZC4KLSAgICAgICAgICAgICAgICAgICAgbV9z
cGVsbGluZ0NvcnJlY3Rvci0+c2hvdyhyYW5nZVRvUmVwbGFjZSwgcmVzdWx0LT5yZXBsYWNlbWVu
dCk7CisgICAgICAgICAgICAgICAgICAgIG1fYWx0ZXJuYXRpdmVUZXh0Q29udHJvbGxlci0+c2hv
dyhyYW5nZVRvUmVwbGFjZSwgcmVzdWx0LT5yZXBsYWNlbWVudCk7CiAgICAgICAgICAgICAgICAg
ICAgIGJyZWFrOwogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAvLyBJZiB0aGlz
IGZ1bmN0aW9uIGlzIGNhbGxlZCBmb3Igc2hvd2luZyBjb3JyZWN0aW9uIHBhbmVsLCB3ZSBpZ25v
cmUgb3RoZXIgY29ycmVjdGlvbiBvciByZXBsYWNlbWVudC4KQEAgLTIwOTUsNyArMjA5NSw3IEBA
IHZvaWQgRWRpdG9yOjptYXJrQW5kUmVwbGFjZUZvcihQYXNzUmVmUHQKIAogICAgICAgICAgICAg
ICAgIC8vIEFkZCBhIG1hcmtlciBzbyB0aGF0IGNvcnJlY3Rpb25zIGNhbiBlYXNpbHkgYmUgdW5k
b25lIGFuZCB3b24ndCBiZSByZS1jb3JyZWN0ZWQuCiAgICAgICAgICAgICAgICAgaWYgKHJlc3Vs
dC0+dHlwZSA9PSBUZXh0Q2hlY2tpbmdUeXBlQ29ycmVjdGlvbikKLSAgICAgICAgICAgICAgICAg
ICAgbV9zcGVsbGluZ0NvcnJlY3Rvci0+bWFya0NvcnJlY3Rpb24ocGFyYWdyYXBoLnN1YnJhbmdl
KHJlc3VsdExvY2F0aW9uLCByZXBsYWNlbWVudExlbmd0aCksIHJlcGxhY2VkU3RyaW5nKTsKKyAg
ICAgICAgICAgICAgICAgICAgbV9hbHRlcm5hdGl2ZVRleHRDb250cm9sbGVyLT5tYXJrQ29ycmVj
dGlvbihwYXJhZ3JhcGguc3VicmFuZ2UocmVzdWx0TG9jYXRpb24sIHJlcGxhY2VtZW50TGVuZ3Ro
KSwgcmVwbGFjZWRTdHJpbmcpOwogICAgICAgICAgICAgfQogICAgICAgICB9CiAgICAgfQpAQCAt
MjEyOCwxMiArMjEyOCwxMiBAQCB2b2lkIEVkaXRvcjo6Y2hhbmdlQmFja1RvUmVwbGFjZWRTdHJp
bmcoCiAgICAgaWYgKCFzaG91bGRJbnNlcnRUZXh0KHJlcGxhY2VkU3RyaW5nLCBzZWxlY3Rpb24u
Z2V0KCksIEVkaXRvckluc2VydEFjdGlvblBhc3RlZCkpCiAgICAgICAgIHJldHVybjsKICAgICAK
LSAgICBtX3NwZWxsaW5nQ29ycmVjdG9yLT5yZWNvcmRBdXRvY29ycmVjdGlvblJlc3BvbnNlUmV2
ZXJzZWQocmVwbGFjZWRTdHJpbmcsIHNlbGVjdGlvbik7CisgICAgbV9hbHRlcm5hdGl2ZVRleHRD
b250cm9sbGVyLT5yZWNvcmRBdXRvY29ycmVjdGlvblJlc3BvbnNlUmV2ZXJzZWQocmVwbGFjZWRT
dHJpbmcsIHNlbGVjdGlvbik7CiAgICAgVGV4dENoZWNraW5nUGFyYWdyYXBoIHBhcmFncmFwaChz
ZWxlY3Rpb24pOwogICAgIHJlcGxhY2VTZWxlY3Rpb25XaXRoVGV4dChyZXBsYWNlZFN0cmluZywg
ZmFsc2UsIGZhbHNlKTsKICAgICBSZWZQdHI8UmFuZ2U+IGNoYW5nZWRSYW5nZSA9IHBhcmFncmFw
aC5zdWJyYW5nZShwYXJhZ3JhcGguY2hlY2tpbmdTdGFydCgpLCByZXBsYWNlZFN0cmluZy5sZW5n
dGgoKSk7CiAgICAgY2hhbmdlZFJhbmdlLT5zdGFydENvbnRhaW5lcigpLT5kb2N1bWVudCgpLT5t
YXJrZXJzKCktPmFkZE1hcmtlcihjaGFuZ2VkUmFuZ2UuZ2V0KCksIERvY3VtZW50TWFya2VyOjpS
ZXBsYWNlbWVudCwgU3RyaW5nKCkpOwotICAgIG1fc3BlbGxpbmdDb3JyZWN0b3ItPm1hcmtSZXZl
cnNlZChjaGFuZ2VkUmFuZ2UuZ2V0KCkpOworICAgIG1fYWx0ZXJuYXRpdmVUZXh0Q29udHJvbGxl
ci0+bWFya1JldmVyc2VkKGNoYW5nZWRSYW5nZS5nZXQoKSk7CiB9CiAKIApAQCAtMjE1NywxMiAr
MjE1NywxMiBAQCB2b2lkIEVkaXRvcjo6bWFya01pc3NwZWxsaW5nc0FuZEJhZEdyYW1tCiAKIHZv
aWQgRWRpdG9yOjp1bmFwcGxpZWRTcGVsbENvcnJlY3Rpb24oY29uc3QgVmlzaWJsZVNlbGVjdGlv
biYgc2VsZWN0aW9uT2ZDb3JyZWN0ZWQsIGNvbnN0IFN0cmluZyYgY29ycmVjdGVkLCBjb25zdCBT
dHJpbmcmIGNvcnJlY3Rpb24pCiB7Ci0gICAgbV9zcGVsbGluZ0NvcnJlY3Rvci0+cmVzcG9uZFRv
VW5hcHBsaWVkU3BlbGxDb3JyZWN0aW9uKHNlbGVjdGlvbk9mQ29ycmVjdGVkLCBjb3JyZWN0ZWQs
IGNvcnJlY3Rpb24pOworICAgIG1fYWx0ZXJuYXRpdmVUZXh0Q29udHJvbGxlci0+cmVzcG9uZFRv
VW5hcHBsaWVkU3BlbGxDb3JyZWN0aW9uKHNlbGVjdGlvbk9mQ29ycmVjdGVkLCBjb3JyZWN0ZWQs
IGNvcnJlY3Rpb24pOwogfQogCiB2b2lkIEVkaXRvcjo6dXBkYXRlTWFya2Vyc0ZvcldvcmRzQWZm
ZWN0ZWRCeUVkaXRpbmcoYm9vbCBkb05vdFJlbW92ZUlmU2VsZWN0aW9uQXRXb3JkQm91bmRhcnkp
CiB7Ci0gICAgaWYgKCFtX3NwZWxsaW5nQ29ycmVjdG9yLT5zaG91bGRSZW1vdmVNYXJrZXJzVXBv
bkVkaXRpbmcoKSkKKyAgICBpZiAoIW1fYWx0ZXJuYXRpdmVUZXh0Q29udHJvbGxlci0+c2hvdWxk
UmVtb3ZlTWFya2Vyc1Vwb25FZGl0aW5nKCkpCiAgICAgICAgIHJldHVybjsKIAogICAgIC8vIFdl
IHdhbnQgdG8gcmVtb3ZlIHRoZSBtYXJrZXJzIGZyb20gYSB3b3JkIGlmIGFuIGVkaXRpbmcgY29t
bWFuZCB3aWxsIGNoYW5nZSB0aGUgd29yZC4gVGhpcyBjYW4gaGFwcGVuIGluIG9uZSBvZgpAQCAt
MjIzMiw3ICsyMjMyLDcgQEAgdm9pZCBFZGl0b3I6OnVwZGF0ZU1hcmtlcnNGb3JXb3Jkc0FmZmVj
dAogCiB2b2lkIEVkaXRvcjo6ZGVsZXRlZEF1dG9jb3JyZWN0aW9uQXRQb3NpdGlvbihjb25zdCBQ
b3NpdGlvbiYgcG9zaXRpb24sIGNvbnN0IFN0cmluZyYgb3JpZ2luYWxTdHJpbmcpCiB7Ci0gICAg
bV9zcGVsbGluZ0NvcnJlY3Rvci0+ZGVsZXRlZEF1dG9jb3JyZWN0aW9uQXRQb3NpdGlvbihwb3Np
dGlvbiwgb3JpZ2luYWxTdHJpbmcpOworICAgIG1fYWx0ZXJuYXRpdmVUZXh0Q29udHJvbGxlci0+
ZGVsZXRlZEF1dG9jb3JyZWN0aW9uQXRQb3NpdGlvbihwb3NpdGlvbiwgb3JpZ2luYWxTdHJpbmcp
OwogfQogCiBQYXNzUmVmUHRyPFJhbmdlPiBFZGl0b3I6OnJhbmdlRm9yUG9pbnQoY29uc3QgSW50
UG9pbnQmIHdpbmRvd1BvaW50KQpAQCAtMjM1NywyMCArMjM1NywyMCBAQCB2b2lkIEVkaXRvcjo6
YWRkVG9LaWxsUmluZyhSYW5nZSogcmFuZ2UsCiAgICAgbV9zaG91bGRTdGFydE5ld0tpbGxSaW5n
U2VxdWVuY2UgPSBmYWxzZTsKIH0KIAotdm9pZCBFZGl0b3I6OnN0YXJ0Q29ycmVjdGlvblBhbmVs
VGltZXIoKQordm9pZCBFZGl0b3I6OnN0YXJ0QWx0ZXJuYXRpdmVUZXh0VUlUaW1lcigpCiB7Ci0g
ICAgbV9zcGVsbGluZ0NvcnJlY3Rvci0+c3RhcnRDb3JyZWN0aW9uUGFuZWxUaW1lcihDb3JyZWN0
aW9uUGFuZWxJbmZvOjpQYW5lbFR5cGVDb3JyZWN0aW9uKTsKKyAgICBtX2FsdGVybmF0aXZlVGV4
dENvbnRyb2xsZXItPnN0YXJ0QWx0ZXJuYXRpdmVUZXh0VUlUaW1lcihBbHRlcm5hdGl2ZVRleHRU
eXBlQ29ycmVjdGlvbik7CiB9CiAKLXZvaWQgRWRpdG9yOjpoYW5kbGVDb3JyZWN0aW9uUGFuZWxS
ZXN1bHQoY29uc3QgU3RyaW5nJiBjb3JyZWN0aW9uKQordm9pZCBFZGl0b3I6OmhhbmRsZUFsdGVy
bmF0aXZlVGV4dFVJUmVzdWx0KGNvbnN0IFN0cmluZyYgY29ycmVjdGlvbikKIHsKLSAgICBtX3Nw
ZWxsaW5nQ29ycmVjdG9yLT5oYW5kbGVDb3JyZWN0aW9uUGFuZWxSZXN1bHQoY29ycmVjdGlvbik7
CisgICAgbV9hbHRlcm5hdGl2ZVRleHRDb250cm9sbGVyLT5oYW5kbGVBbHRlcm5hdGl2ZVRleHRV
SVJlc3VsdChjb3JyZWN0aW9uKTsKIH0KIAogCiB2b2lkIEVkaXRvcjo6ZGlzbWlzc0NvcnJlY3Rp
b25QYW5lbEFzSWdub3JlZCgpCiB7Ci0gICAgbV9zcGVsbGluZ0NvcnJlY3Rvci0+ZGlzbWlzcyhS
ZWFzb25Gb3JEaXNtaXNzaW5nQ29ycmVjdGlvblBhbmVsSWdub3JlZCk7CisgICAgbV9hbHRlcm5h
dGl2ZVRleHRDb250cm9sbGVyLT5kaXNtaXNzKFJlYXNvbkZvckRpc21pc3NpbmdBbHRlcm5hdGl2
ZVRleHRJZ25vcmVkKTsKIH0KIAogYm9vbCBFZGl0b3I6Omluc2lkZVZpc2libGVBcmVhKGNvbnN0
IExheW91dFBvaW50JiBwb2ludCkgY29uc3QKQEAgLTI4ODYsNyArMjg4Niw3IEBAIHZvaWQgRWRp
dG9yOjpzZXRNYXJrZWRUZXh0TWF0Y2hlc0FyZUhpZ2gKIAogdm9pZCBFZGl0b3I6OnJlc3BvbmRU
b0NoYW5nZWRTZWxlY3Rpb24oY29uc3QgVmlzaWJsZVNlbGVjdGlvbiYgb2xkU2VsZWN0aW9uLCBG
cmFtZVNlbGVjdGlvbjo6U2V0U2VsZWN0aW9uT3B0aW9ucyBvcHRpb25zKQogewotICAgIG1fc3Bl
bGxpbmdDb3JyZWN0b3ItPnN0b3BQZW5kaW5nQ29ycmVjdGlvbihvbGRTZWxlY3Rpb24pOworICAg
IG1fYWx0ZXJuYXRpdmVUZXh0Q29udHJvbGxlci0+c3RvcFBlbmRpbmdDb3JyZWN0aW9uKG9sZFNl
bGVjdGlvbik7CiAKICAgICBib29sIGNsb3NlVHlwaW5nID0gb3B0aW9ucyAmIEZyYW1lU2VsZWN0
aW9uOjpDbG9zZVR5cGluZzsKICAgICBib29sIGlzQ29udGludW91c1NwZWxsQ2hlY2tpbmdFbmFi
bGVkID0gdGhpcy0+aXNDb250aW51b3VzU3BlbGxDaGVja2luZ0VuYWJsZWQoKTsKSW5kZXg6IFNv
dXJjZS9XZWJDb3JlL2VkaXRpbmcvRWRpdG9yLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNv
cmUvZWRpdGluZy9FZGl0b3IuaAkocmV2aXNpb24gMTEzMDQ0KQorKysgU291cmNlL1dlYkNvcmUv
ZWRpdGluZy9FZGl0b3IuaAkod29ya2luZyBjb3B5KQpAQCAtNjEsNyArNjEsNyBAQCBjbGFzcyBQ
YXN0ZWJvYXJkOwogY2xhc3MgU2ltcGxlRm9udERhdGE7CiBjbGFzcyBTcGVsbENoZWNrZXI7CiBj
bGFzcyBTcGVsbENoZWNrUmVxdWVzdDsKLWNsYXNzIFNwZWxsaW5nQ29ycmVjdGlvbkNvbnRyb2xs
ZXI7CitjbGFzcyBBbHRlcm5hdGl2ZVRleHRDb250cm9sbGVyOwogY2xhc3MgU3R5bGVQcm9wZXJ0
eVNldDsKIGNsYXNzIFRleHQ7CiBjbGFzcyBUZXh0Q2hlY2tlckNsaWVudDsKQEAgLTMxOSw5ICsz
MTksOSBAQCBwdWJsaWM6CiAKICAgICB2b2lkIGFkZFRvS2lsbFJpbmcoUmFuZ2UqLCBib29sIHBy
ZXBlbmQpOwogCi0gICAgdm9pZCBzdGFydENvcnJlY3Rpb25QYW5lbFRpbWVyKCk7CisgICAgdm9p
ZCBzdGFydEFsdGVybmF0aXZlVGV4dFVJVGltZXIoKTsKICAgICAvLyBJZiB1c2VyIGNvbmZpcm1l
ZCBhIGNvcnJlY3Rpb24gaW4gdGhlIGNvcnJlY3Rpb24gcGFuZWwsIGNvcnJlY3Rpb24gaGFzIG5v
bi16ZXJvIGxlbmd0aCwgb3RoZXJ3aXNlIGl0IG1lYW5zIHRoYXQgdXNlciBoYXMgZGlzbWlzc2Vk
IHRoZSBwYW5lbC4KLSAgICB2b2lkIGhhbmRsZUNvcnJlY3Rpb25QYW5lbFJlc3VsdChjb25zdCBT
dHJpbmcmIGNvcnJlY3Rpb24pOworICAgIHZvaWQgaGFuZGxlQWx0ZXJuYXRpdmVUZXh0VUlSZXN1
bHQoY29uc3QgU3RyaW5nJiBjb3JyZWN0aW9uKTsKICAgICB2b2lkIGRpc21pc3NDb3JyZWN0aW9u
UGFuZWxBc0lnbm9yZWQoKTsKIAogICAgIHZvaWQgcGFzdGVBc0ZyYWdtZW50KFBhc3NSZWZQdHI8
RG9jdW1lbnRGcmFnbWVudD4sIGJvb2wgc21hcnRSZXBsYWNlLCBib29sIG1hdGNoU3R5bGUpOwpA
QCAtNDAxLDcgKzQwMSw3IEBAIHByaXZhdGU6CiAgICAgYm9vbCBtX3Nob3VsZFN0eWxlV2l0aENT
UzsKICAgICBPd25QdHI8S2lsbFJpbmc+IG1fa2lsbFJpbmc7CiAgICAgT3duUHRyPFNwZWxsQ2hl
Y2tlcj4gbV9zcGVsbENoZWNrZXI7Ci0gICAgT3duUHRyPFNwZWxsaW5nQ29ycmVjdGlvbkNvbnRy
b2xsZXI+IG1fc3BlbGxpbmdDb3JyZWN0b3I7CisgICAgT3duUHRyPEFsdGVybmF0aXZlVGV4dENv
bnRyb2xsZXI+IG1fYWx0ZXJuYXRpdmVUZXh0Q29udHJvbGxlcjsKICAgICBWaXNpYmxlU2VsZWN0
aW9uIG1fbWFyazsKICAgICBib29sIG1fYXJlTWFya2VkVGV4dE1hdGNoZXNIaWdobGlnaHRlZDsK
ICAgICBFZGl0b3JQYXJhZ3JhcGhTZXBhcmF0b3IgbV9kZWZhdWx0UGFyYWdyYXBoU2VwYXJhdG9y
OwpJbmRleDogU291cmNlL1dlYkNvcmUvZWRpdGluZy9TcGVsbGluZ0NvcnJlY3Rpb25Db21tYW5k
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9lZGl0aW5nL1NwZWxsaW5nQ29ycmVj
dGlvbkNvbW1hbmQuY3BwCShyZXZpc2lvbiAxMTMwNDQpCisrKyBTb3VyY2UvV2ViQ29yZS9lZGl0
aW5nL1NwZWxsaW5nQ29ycmVjdGlvbkNvbW1hbmQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yNiwx
MiArMjYsMTIgQEAKICNpbmNsdWRlICJjb25maWcuaCIKICNpbmNsdWRlICJTcGVsbGluZ0NvcnJl
Y3Rpb25Db21tYW5kLmgiCiAKKyNpbmNsdWRlICJBbHRlcm5hdGl2ZVRleHRDb250cm9sbGVyLmgi
CiAjaW5jbHVkZSAiRG9jdW1lbnQuaCIKICNpbmNsdWRlICJEb2N1bWVudEZyYWdtZW50LmgiCiAj
aW5jbHVkZSAiRnJhbWUuaCIKICNpbmNsdWRlICJSZXBsYWNlU2VsZWN0aW9uQ29tbWFuZC5oIgog
I2luY2x1ZGUgIlNldFNlbGVjdGlvbkNvbW1hbmQuaCIKLSNpbmNsdWRlICJTcGVsbGluZ0NvcnJl
Y3Rpb25Db250cm9sbGVyLmgiCiAjaW5jbHVkZSAiVGV4dEl0ZXJhdG9yLmgiCiAjaW5jbHVkZSAi
bWFya3VwLmgiCiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2VkaXRpbmcvU3BlbGxpbmdDb3JyZWN0
aW9uQ29udHJvbGxlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvZWRpdGluZy9T
cGVsbGluZ0NvcnJlY3Rpb25Db250cm9sbGVyLmNwcAkocmV2aXNpb24gMTEzMDQ0KQorKysgU291
cmNlL1dlYkNvcmUvZWRpdGluZy9TcGVsbGluZ0NvcnJlY3Rpb25Db250cm9sbGVyLmNwcAkod29y
a2luZyBjb3B5KQpAQCAtMSw1NjUgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAwNiwg
MjAwNywgMjAwOCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQg
KEMpIDIwMDggTm9raWEgQ29ycG9yYXRpb24gYW5kL29yIGl0cyBzdWJzaWRpYXJ5KC1pZXMpCi0g
KgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywg
d2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQg
dGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3Ry
aWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAot
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVw
cm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3Vt
ZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmli
dXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBDT01QVVRF
UiwgSU5DLiBgYEFTIElTJycgQU5EIEFOWQotICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJ
RVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKLSAqIElNUExJRUQgV0FSUkFO
VElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICog
UFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIENPTVBVVEVS
LCBJTkMuIE9SCi0gKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJ
UkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKLSAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElB
TCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFBST0NVUkVNRU5U
IE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgot
ICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQg
T04gQU5ZIFRIRU9SWQotICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJ
Q1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJX
SVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLSAqIE9GIFRISVMgU09GVFdB
UkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAot
ICovCi0KLSNpbmNsdWRlICJjb25maWcuaCIKLSNpbmNsdWRlICJTcGVsbGluZ0NvcnJlY3Rpb25D
b250cm9sbGVyLmgiCi0KLSNpbmNsdWRlICJEb2N1bWVudE1hcmtlckNvbnRyb2xsZXIuaCIKLSNp
bmNsdWRlICJFZGl0Q29tbWFuZC5oIgotI2luY2x1ZGUgIkVkaXRvckNsaWVudC5oIgotI2luY2x1
ZGUgIkZsb2F0UXVhZC5oIgotI2luY2x1ZGUgIkZyYW1lLmgiCi0jaW5jbHVkZSAiRnJhbWVWaWV3
LmgiCi0jaW5jbHVkZSAiUGFnZS5oIgotI2luY2x1ZGUgIlNwZWxsaW5nQ29ycmVjdGlvbkNvbW1h
bmQuaCIKLSNpbmNsdWRlICJUZXh0Q2hlY2tlckNsaWVudC5oIgotI2luY2x1ZGUgIlRleHRDaGVj
a2luZ0hlbHBlci5oIgotI2luY2x1ZGUgIlRleHRJdGVyYXRvci5oIgotI2luY2x1ZGUgIlZpc2li
bGVTZWxlY3Rpb24uaCIKLSNpbmNsdWRlICJodG1sZWRpdGluZy5oIgotI2luY2x1ZGUgIm1hcmt1
cC5oIgotI2luY2x1ZGUgInZpc2libGVfdW5pdHMuaCIKLQotbmFtZXNwYWNlIFdlYkNvcmUgewot
Ci11c2luZyBuYW1lc3BhY2Ugc3RkOwotdXNpbmcgbmFtZXNwYWNlIFdURjsKLQotI2lmIFVTRShB
VVRPQ09SUkVDVElPTl9QQU5FTCkKLQotc3RhdGljIGNvbnN0IFZlY3RvcjxEb2N1bWVudE1hcmtl
cjo6TWFya2VyVHlwZT4mIG1hcmtlclR5cGVzRm9yQXV0b2NvcnJlY3Rpb24oKQotewotICAgIERF
RklORV9TVEFUSUNfTE9DQUwoVmVjdG9yPERvY3VtZW50TWFya2VyOjpNYXJrZXJUeXBlPiwgbWFy
a2VyVHlwZXNGb3JBdXRvQ29ycmVjdGlvbiwgKCkpOwotICAgIGlmIChtYXJrZXJUeXBlc0ZvckF1
dG9Db3JyZWN0aW9uLmlzRW1wdHkoKSkgewotICAgICAgICBtYXJrZXJUeXBlc0ZvckF1dG9Db3Jy
ZWN0aW9uLmFwcGVuZChEb2N1bWVudE1hcmtlcjo6UmVwbGFjZW1lbnQpOwotICAgICAgICBtYXJr
ZXJUeXBlc0ZvckF1dG9Db3JyZWN0aW9uLmFwcGVuZChEb2N1bWVudE1hcmtlcjo6Q29ycmVjdGlv
bkluZGljYXRvcik7Ci0gICAgICAgIG1hcmtlclR5cGVzRm9yQXV0b0NvcnJlY3Rpb24uYXBwZW5k
KERvY3VtZW50TWFya2VyOjpTcGVsbENoZWNraW5nRXhlbXB0aW9uKTsKLSAgICAgICAgbWFya2Vy
VHlwZXNGb3JBdXRvQ29ycmVjdGlvbi5hcHBlbmQoRG9jdW1lbnRNYXJrZXI6OkF1dG9jb3JyZWN0
ZWQpOwotICAgIH0KLSAgICByZXR1cm4gbWFya2VyVHlwZXNGb3JBdXRvQ29ycmVjdGlvbjsKLX0K
LQotc3RhdGljIGNvbnN0IFZlY3RvcjxEb2N1bWVudE1hcmtlcjo6TWFya2VyVHlwZT4mIG1hcmtl
clR5cGVzRm9yUmVwbGFjZW1lbnQoKQotewotICAgIERFRklORV9TVEFUSUNfTE9DQUwoVmVjdG9y
PERvY3VtZW50TWFya2VyOjpNYXJrZXJUeXBlPiwgbWFya2VyVHlwZXNGb3JSZXBsYWNlbWVudCwg
KCkpOwotICAgIGlmIChtYXJrZXJUeXBlc0ZvclJlcGxhY2VtZW50LmlzRW1wdHkoKSkgewotICAg
ICAgICBtYXJrZXJUeXBlc0ZvclJlcGxhY2VtZW50LmFwcGVuZChEb2N1bWVudE1hcmtlcjo6UmVw
bGFjZW1lbnQpOwotICAgICAgICBtYXJrZXJUeXBlc0ZvclJlcGxhY2VtZW50LmFwcGVuZChEb2N1
bWVudE1hcmtlcjo6U3BlbGxDaGVja2luZ0V4ZW1wdGlvbik7Ci0gICAgfQotICAgIHJldHVybiBt
YXJrZXJUeXBlc0ZvclJlcGxhY2VtZW50OwotfQotCi1zdGF0aWMgYm9vbCBtYXJrZXJzSGF2ZUlk
ZW50aWNhbERlc2NyaXB0aW9uKGNvbnN0IFZlY3RvcjxEb2N1bWVudE1hcmtlcio+JiBtYXJrZXJz
KQotewotICAgIGlmIChtYXJrZXJzLmlzRW1wdHkoKSkKLSAgICAgICAgcmV0dXJuIHRydWU7Ci0K
LSAgICBjb25zdCBTdHJpbmcmIGRlc2NyaXB0aW9uID0gbWFya2Vyc1swXS0+ZGVzY3JpcHRpb24o
KTsKLSAgICBmb3IgKHNpemVfdCBpID0gMTsgaSA8IG1hcmtlcnMuc2l6ZSgpOyArK2kpIHsKLSAg
ICAgICAgaWYgKGRlc2NyaXB0aW9uICE9IG1hcmtlcnNbaV0tPmRlc2NyaXB0aW9uKCkpCi0gICAg
ICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQotICAgIHJldHVybiB0cnVlOwotfQotCi1TcGVs
bGluZ0NvcnJlY3Rpb25Db250cm9sbGVyOjpTcGVsbGluZ0NvcnJlY3Rpb25Db250cm9sbGVyKEZy
YW1lKiBmcmFtZSkKLSAgICA6IG1fZnJhbWUoZnJhbWUpCi0gICAgLCBtX2NvcnJlY3Rpb25QYW5l
bFRpbWVyKHRoaXMsICZTcGVsbGluZ0NvcnJlY3Rpb25Db250cm9sbGVyOjpjb3JyZWN0aW9uUGFu
ZWxUaW1lckZpcmVkKQotewotfQotCi1TcGVsbGluZ0NvcnJlY3Rpb25Db250cm9sbGVyOjp+U3Bl
bGxpbmdDb3JyZWN0aW9uQ29udHJvbGxlcigpCi17Ci0gICAgZGlzbWlzcyhSZWFzb25Gb3JEaXNt
aXNzaW5nQ29ycmVjdGlvblBhbmVsSWdub3JlZCk7Ci19Ci0KLXZvaWQgU3BlbGxpbmdDb3JyZWN0
aW9uQ29udHJvbGxlcjo6c3RhcnRDb3JyZWN0aW9uUGFuZWxUaW1lcihDb3JyZWN0aW9uUGFuZWxJ
bmZvOjpQYW5lbFR5cGUgdHlwZSkKLXsKLSAgICBjb25zdCBkb3VibGUgY29ycmVjdGlvblBhbmVs
VGltZXJJbnRlcnZhbCA9IDAuMzsKLSAgICBpZiAoIWlzQXV0b21hdGljU3BlbGxpbmdDb3JyZWN0
aW9uRW5hYmxlZCgpKQotICAgICAgICByZXR1cm47Ci0KLSAgICAvLyBJZiB0eXBlIGlzIFBhbmVs
VHlwZVJldmVyc2lvbiwgdGhlbiB0aGUgbmV3IHJhbmdlIGhhcyBiZWVuIHNldC4gU28gd2Ugc2hv
dWxkbid0IGNsZWFyIGl0LgotICAgIGlmICh0eXBlID09IENvcnJlY3Rpb25QYW5lbEluZm86OlBh
bmVsVHlwZUNvcnJlY3Rpb24pCi0gICAgICAgIG1fY29ycmVjdGlvblBhbmVsSW5mby5yYW5nZVRv
QmVSZXBsYWNlZC5jbGVhcigpOwotICAgIG1fY29ycmVjdGlvblBhbmVsSW5mby5wYW5lbFR5cGUg
PSB0eXBlOwotICAgIG1fY29ycmVjdGlvblBhbmVsVGltZXIuc3RhcnRPbmVTaG90KGNvcnJlY3Rp
b25QYW5lbFRpbWVySW50ZXJ2YWwpOwotfQotCi12b2lkIFNwZWxsaW5nQ29ycmVjdGlvbkNvbnRy
b2xsZXI6OnN0b3BDb3JyZWN0aW9uUGFuZWxUaW1lcigpCi17Ci0gICAgbV9jb3JyZWN0aW9uUGFu
ZWxUaW1lci5zdG9wKCk7Ci0gICAgbV9jb3JyZWN0aW9uUGFuZWxJbmZvLnJhbmdlVG9CZVJlcGxh
Y2VkLmNsZWFyKCk7Ci19Ci0KLXZvaWQgU3BlbGxpbmdDb3JyZWN0aW9uQ29udHJvbGxlcjo6c3Rv
cFBlbmRpbmdDb3JyZWN0aW9uKGNvbnN0IFZpc2libGVTZWxlY3Rpb24mIG9sZFNlbGVjdGlvbikK
LXsKLSAgICAvLyBNYWtlIHN1cmUgdGhlcmUncyBubyBwZW5kaW5nIGF1dG9jb3JyZWN0aW9uIGJl
Zm9yZSB3ZSBjYWxsIG1hcmtNaXNzcGVsbGluZ3NBbmRCYWRHcmFtbWFyKCkgYmVsb3cuCi0gICAg
VmlzaWJsZVNlbGVjdGlvbiBjdXJyZW50U2VsZWN0aW9uKG1fZnJhbWUtPnNlbGVjdGlvbigpLT5z
ZWxlY3Rpb24oKSk7Ci0gICAgaWYgKGN1cnJlbnRTZWxlY3Rpb24gPT0gb2xkU2VsZWN0aW9uKQot
ICAgICAgICByZXR1cm47Ci0KLSAgICBzdG9wQ29ycmVjdGlvblBhbmVsVGltZXIoKTsKLSAgICBk
aXNtaXNzKFJlYXNvbkZvckRpc21pc3NpbmdDb3JyZWN0aW9uUGFuZWxJZ25vcmVkKTsKLX0KLQot
dm9pZCBTcGVsbGluZ0NvcnJlY3Rpb25Db250cm9sbGVyOjphcHBseVBlbmRpbmdDb3JyZWN0aW9u
KGNvbnN0IFZpc2libGVTZWxlY3Rpb24mIHNlbGVjdGlvbkFmdGVyVHlwaW5nKQotewotICAgIC8v
IEFwcGx5IHBlbmRpbmcgYXV0b2NvcnJlY3Rpb24gYmVmb3JlIG5leHQgcm91bmQgb2Ygc3BlbGwg
Y2hlY2tpbmcuCi0gICAgYm9vbCBkb0FwcGx5Q29ycmVjdGlvbiA9IHRydWU7Ci0gICAgVmlzaWJs
ZVBvc2l0aW9uIHN0YXJ0T2ZTZWxlY3Rpb24gPSBzZWxlY3Rpb25BZnRlclR5cGluZy52aXNpYmxl
U3RhcnQoKTsKLSAgICBWaXNpYmxlU2VsZWN0aW9uIGN1cnJlbnRXb3JkID0gVmlzaWJsZVNlbGVj
dGlvbihzdGFydE9mV29yZChzdGFydE9mU2VsZWN0aW9uLCBMZWZ0V29yZElmT25Cb3VuZGFyeSks
IGVuZE9mV29yZChzdGFydE9mU2VsZWN0aW9uLCBSaWdodFdvcmRJZk9uQm91bmRhcnkpKTsKLSAg
ICBpZiAoY3VycmVudFdvcmQudmlzaWJsZUVuZCgpID09IHN0YXJ0T2ZTZWxlY3Rpb24pIHsKLSAg
ICAgICAgU3RyaW5nIHdvcmRUZXh0ID0gcGxhaW5UZXh0KGN1cnJlbnRXb3JkLnRvTm9ybWFsaXpl
ZFJhbmdlKCkuZ2V0KCkpOwotICAgICAgICBpZiAod29yZFRleHQubGVuZ3RoKCkgPiAwICYmIGlz
QW1iaWd1b3VzQm91bmRhcnlDaGFyYWN0ZXIod29yZFRleHRbd29yZFRleHQubGVuZ3RoKCkgLSAx
XSkpCi0gICAgICAgICAgICBkb0FwcGx5Q29ycmVjdGlvbiA9IGZhbHNlOwotICAgIH0KLSAgICBp
ZiAoZG9BcHBseUNvcnJlY3Rpb24pCi0gICAgICAgIGhhbmRsZUNvcnJlY3Rpb25QYW5lbFJlc3Vs
dChkaXNtaXNzU29vbihSZWFzb25Gb3JEaXNtaXNzaW5nQ29ycmVjdGlvblBhbmVsQWNjZXB0ZWQp
KTsgCi0gICAgZWxzZQotICAgICAgICBtX2NvcnJlY3Rpb25QYW5lbEluZm8ucmFuZ2VUb0JlUmVw
bGFjZWQuY2xlYXIoKTsKLX0KLQotYm9vbCBTcGVsbGluZ0NvcnJlY3Rpb25Db250cm9sbGVyOjpo
YXNQZW5kaW5nQ29ycmVjdGlvbigpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIG1fY29ycmVjdGlvblBh
bmVsSW5mby5yYW5nZVRvQmVSZXBsYWNlZDsKLX0KLQotYm9vbCBTcGVsbGluZ0NvcnJlY3Rpb25D
b250cm9sbGVyOjppc1NwZWxsaW5nTWFya2VyQWxsb3dlZChQYXNzUmVmUHRyPFJhbmdlPiBtaXNz
cGVsbGluZ1JhbmdlKSBjb25zdAotewotICAgIHJldHVybiAhbV9mcmFtZS0+ZG9jdW1lbnQoKS0+
bWFya2VycygpLT5oYXNNYXJrZXJzKG1pc3NwZWxsaW5nUmFuZ2UuZ2V0KCksIERvY3VtZW50TWFy
a2VyOjpTcGVsbENoZWNraW5nRXhlbXB0aW9uKTsKLX0KLQotdm9pZCBTcGVsbGluZ0NvcnJlY3Rp
b25Db250cm9sbGVyOjpzaG93KFBhc3NSZWZQdHI8UmFuZ2U+IHJhbmdlVG9SZXBsYWNlLCBjb25z
dCBTdHJpbmcmIHJlcGxhY2VtZW50KQotewotICAgIEZsb2F0UmVjdCBib3VuZGluZ0JveCA9IHJv
b3RWaWV3UmVjdEZvclJhbmdlKHJhbmdlVG9SZXBsYWNlLmdldCgpKTsKLSAgICBpZiAoYm91bmRp
bmdCb3guaXNFbXB0eSgpKQotICAgICAgICByZXR1cm47Ci0gICAgbV9jb3JyZWN0aW9uUGFuZWxJ
bmZvLnJlcGxhY2VkU3RyaW5nID0gcGxhaW5UZXh0KHJhbmdlVG9SZXBsYWNlLmdldCgpKTsKLSAg
ICBtX2NvcnJlY3Rpb25QYW5lbEluZm8ucmFuZ2VUb0JlUmVwbGFjZWQgPSByYW5nZVRvUmVwbGFj
ZTsKLSAgICBtX2NvcnJlY3Rpb25QYW5lbEluZm8ucmVwbGFjZW1lbnRTdHJpbmcgPSByZXBsYWNl
bWVudDsKLSAgICBtX2NvcnJlY3Rpb25QYW5lbEluZm8uaXNBY3RpdmUgPSB0cnVlOwotICAgIGNs
aWVudCgpLT5zaG93Q29ycmVjdGlvblBhbmVsKG1fY29ycmVjdGlvblBhbmVsSW5mby5wYW5lbFR5
cGUsIGJvdW5kaW5nQm94LCBtX2NvcnJlY3Rpb25QYW5lbEluZm8ucmVwbGFjZWRTdHJpbmcsIHJl
cGxhY2VtZW50LCBWZWN0b3I8U3RyaW5nPigpKTsKLX0KLQotdm9pZCBTcGVsbGluZ0NvcnJlY3Rp
b25Db250cm9sbGVyOjpoYW5kbGVDYW5jZWxPcGVyYXRpb24oKQotewotICAgIGlmICghbV9jb3Jy
ZWN0aW9uUGFuZWxJbmZvLmlzQWN0aXZlKQotICAgICAgICByZXR1cm47Ci0gICAgbV9jb3JyZWN0
aW9uUGFuZWxJbmZvLmlzQWN0aXZlID0gZmFsc2U7Ci0gICAgZGlzbWlzcyhSZWFzb25Gb3JEaXNt
aXNzaW5nQ29ycmVjdGlvblBhbmVsQ2FuY2VsbGVkKTsKLX0KLQotdm9pZCBTcGVsbGluZ0NvcnJl
Y3Rpb25Db250cm9sbGVyOjpkaXNtaXNzKFJlYXNvbkZvckRpc21pc3NpbmdDb3JyZWN0aW9uUGFu
ZWwgcmVhc29uRm9yRGlzbWlzc2luZykKLXsKLSAgICBpZiAoIW1fY29ycmVjdGlvblBhbmVsSW5m
by5pc0FjdGl2ZSkKLSAgICAgICAgcmV0dXJuOwotICAgIG1fY29ycmVjdGlvblBhbmVsSW5mby5p
c0FjdGl2ZSA9IGZhbHNlOwotICAgIG1fY29ycmVjdGlvblBhbmVsSXNEaXNtaXNzZWRCeUVkaXRv
ciA9IHRydWU7Ci0gICAgaWYgKGNsaWVudCgpKQotICAgICAgICBjbGllbnQoKS0+ZGlzbWlzc0Nv
cnJlY3Rpb25QYW5lbChyZWFzb25Gb3JEaXNtaXNzaW5nKTsKLX0KLQotU3RyaW5nIFNwZWxsaW5n
Q29ycmVjdGlvbkNvbnRyb2xsZXI6OmRpc21pc3NTb29uKFJlYXNvbkZvckRpc21pc3NpbmdDb3Jy
ZWN0aW9uUGFuZWwgcmVhc29uRm9yRGlzbWlzc2luZykKLXsKLSAgICBpZiAoIW1fY29ycmVjdGlv
blBhbmVsSW5mby5pc0FjdGl2ZSkKLSAgICAgICAgcmV0dXJuIFN0cmluZygpOwotICAgIG1fY29y
cmVjdGlvblBhbmVsSW5mby5pc0FjdGl2ZSA9IGZhbHNlOwotICAgIG1fY29ycmVjdGlvblBhbmVs
SXNEaXNtaXNzZWRCeUVkaXRvciA9IHRydWU7Ci0gICAgaWYgKCFjbGllbnQoKSkKLSAgICAgICAg
cmV0dXJuIFN0cmluZygpOwotICAgIHJldHVybiBjbGllbnQoKS0+ZGlzbWlzc0NvcnJlY3Rpb25Q
YW5lbFNvb24ocmVhc29uRm9yRGlzbWlzc2luZyk7Ci19Ci0KLXZvaWQgU3BlbGxpbmdDb3JyZWN0
aW9uQ29udHJvbGxlcjo6YXBwbHlDb3JyZWN0aW9uUGFuZWxJbmZvKGNvbnN0IFZlY3RvcjxEb2N1
bWVudE1hcmtlcjo6TWFya2VyVHlwZT4mIG1hcmtlclR5cGVzVG9BZGQpCi17Ci0gICAgaWYgKCFt
X2NvcnJlY3Rpb25QYW5lbEluZm8ucmFuZ2VUb0JlUmVwbGFjZWQpCi0gICAgICAgIHJldHVybjsK
LQotICAgIEV4Y2VwdGlvbkNvZGUgZWMgPSAwOwotICAgIFJlZlB0cjxSYW5nZT4gcGFyYWdyYXBo
UmFuZ2VDb250YWluaW5nQ29ycmVjdGlvbiA9IG1fY29ycmVjdGlvblBhbmVsSW5mby5yYW5nZVRv
QmVSZXBsYWNlZC0+Y2xvbmVSYW5nZShlYyk7Ci0gICAgaWYgKGVjKQotICAgICAgICByZXR1cm47
Ci0KLSAgICBzZXRTdGFydChwYXJhZ3JhcGhSYW5nZUNvbnRhaW5pbmdDb3JyZWN0aW9uLmdldCgp
LCBzdGFydE9mUGFyYWdyYXBoKG1fY29ycmVjdGlvblBhbmVsSW5mby5yYW5nZVRvQmVSZXBsYWNl
ZC0+c3RhcnRQb3NpdGlvbigpKSk7Ci0gICAgc2V0RW5kKHBhcmFncmFwaFJhbmdlQ29udGFpbmlu
Z0NvcnJlY3Rpb24uZ2V0KCksIGVuZE9mUGFyYWdyYXBoKG1fY29ycmVjdGlvblBhbmVsSW5mby5y
YW5nZVRvQmVSZXBsYWNlZC0+ZW5kUG9zaXRpb24oKSkpOwotCi0gICAgLy8gQWZ0ZXIgd2UgcmVw
bGFjZSB0aGUgd29yZCBhdCByYW5nZSByYW5nZVRvQmVSZXBsYWNlZCwgd2UgbmVlZCB0byBhZGQg
bWFya2VycyB0byB0aGF0IHJhbmdlLgotICAgIC8vIEhvd2V2ZXIsIG9uY2UgdGhlIHJlcGxhY2Vt
ZW50IHRvb2sgcGxhY2UsIHRoZSB2YWx1ZSBvZiByYW5nZVRvQmVSZXBsYWNlZCBpcyBub3QgdmFs
aWQgYW55bW9yZS4KLSAgICAvLyBTbyBiZWZvcmUgd2UgY2Fycnkgb3V0IHRoZSByZXBsYWNlbWVu
dCwgd2UgbmVlZCB0byBzdG9yZSB0aGUgc3RhcnQgcG9zaXRpb24gb2YgcmFuZ2VUb0JlUmVwbGFj
ZWQKLSAgICAvLyByZWxhdGl2ZSB0byB0aGUgc3RhcnQgcG9zaXRpb24gb2YgdGhlIGNvbnRhaW5p
bmcgcGFyYWdyYXBoLiBXZSB1c2UgY29ycmVjdGlvblN0YXJ0T2Zmc2V0SW5QYXJhZ3JhcGgKLSAg
ICAvLyB0byBzdG9yZSB0aGlzIHZhbHVlLiBJbiBvcmRlciB0byBvYnRhaW4gdGhpcyBvZmZzZXQs
IHdlIG5lZWQgdG8gZmlyc3QgY3JlYXRlIGEgcmFuZ2UKLSAgICAvLyB3aGljaCBzcGFucyBmcm9t
IHRoZSBzdGFydCBvZiBwYXJhZ3JhcGggdG8gdGhlIHN0YXJ0IHBvc2l0aW9uIG9mIHJhbmdlVG9C
ZVJlcGxhY2VkLgotICAgIFJlZlB0cjxSYW5nZT4gY29ycmVjdGlvblN0YXJ0T2Zmc2V0SW5QYXJh
Z3JhcGhBc1JhbmdlID0gUmFuZ2U6OmNyZWF0ZShwYXJhZ3JhcGhSYW5nZUNvbnRhaW5pbmdDb3Jy
ZWN0aW9uLT5zdGFydENvbnRhaW5lcihlYyktPmRvY3VtZW50KCksIHBhcmFncmFwaFJhbmdlQ29u
dGFpbmluZ0NvcnJlY3Rpb24tPnN0YXJ0UG9zaXRpb24oKSwgcGFyYWdyYXBoUmFuZ2VDb250YWlu
aW5nQ29ycmVjdGlvbi0+c3RhcnRQb3NpdGlvbigpKTsKLSAgICBpZiAoZWMpCi0gICAgICAgIHJl
dHVybjsKLQotICAgIFBvc2l0aW9uIHN0YXJ0UG9zaXRpb25PZlJhbmdlVG9CZVJlcGxhY2VkID0g
bV9jb3JyZWN0aW9uUGFuZWxJbmZvLnJhbmdlVG9CZVJlcGxhY2VkLT5zdGFydFBvc2l0aW9uKCk7
Ci0gICAgY29ycmVjdGlvblN0YXJ0T2Zmc2V0SW5QYXJhZ3JhcGhBc1JhbmdlLT5zZXRFbmQoc3Rh
cnRQb3NpdGlvbk9mUmFuZ2VUb0JlUmVwbGFjZWQuY29udGFpbmVyTm9kZSgpLCBzdGFydFBvc2l0
aW9uT2ZSYW5nZVRvQmVSZXBsYWNlZC5jb21wdXRlT2Zmc2V0SW5Db250YWluZXJOb2RlKCksIGVj
KTsKLSAgICBpZiAoZWMpCi0gICAgICAgIHJldHVybjsKLQotICAgIC8vIFRha2Ugbm90ZSBvZiB0
aGUgbG9jYXRpb24gb2YgYXV0b2NvcnJlY3Rpb24gc28gdGhhdCB3ZSBjYW4gYWRkIG1hcmtlciBh
ZnRlciB0aGUgcmVwbGFjZW1lbnQgdG9vayBwbGFjZS4KLSAgICBpbnQgY29ycmVjdGlvblN0YXJ0
T2Zmc2V0SW5QYXJhZ3JhcGggPSBUZXh0SXRlcmF0b3I6OnJhbmdlTGVuZ3RoKGNvcnJlY3Rpb25T
dGFydE9mZnNldEluUGFyYWdyYXBoQXNSYW5nZS5nZXQoKSk7Ci0KLSAgICAvLyBDbG9uZSB0aGUg
cmFuZ2UsIHNpbmNlIHRoZSBjYWxsZXIgb2YgdGhpcyBtZXRob2QgbWF5IHdhbnQgdG8ga2VlcCB0
aGUgb3JpZ2luYWwgcmFuZ2UgYXJvdW5kLgotICAgIFJlZlB0cjxSYW5nZT4gcmFuZ2VUb0JlUmVw
bGFjZWQgPSBtX2NvcnJlY3Rpb25QYW5lbEluZm8ucmFuZ2VUb0JlUmVwbGFjZWQtPmNsb25lUmFu
Z2UoZWMpOwotICAgIGFwcGx5Q29tbWFuZChTcGVsbGluZ0NvcnJlY3Rpb25Db21tYW5kOjpjcmVh
dGUocmFuZ2VUb0JlUmVwbGFjZWQsIG1fY29ycmVjdGlvblBhbmVsSW5mby5yZXBsYWNlbWVudFN0
cmluZykpOwotICAgIHNldEVuZChwYXJhZ3JhcGhSYW5nZUNvbnRhaW5pbmdDb3JyZWN0aW9uLmdl
dCgpLCBtX2ZyYW1lLT5zZWxlY3Rpb24oKS0+c2VsZWN0aW9uKCkuc3RhcnQoKSk7Ci0gICAgUmVm
UHRyPFJhbmdlPiByZXBsYWNlbWVudFJhbmdlID0gVGV4dEl0ZXJhdG9yOjpzdWJyYW5nZShwYXJh
Z3JhcGhSYW5nZUNvbnRhaW5pbmdDb3JyZWN0aW9uLmdldCgpLCBjb3JyZWN0aW9uU3RhcnRPZmZz
ZXRJblBhcmFncmFwaCwgIG1fY29ycmVjdGlvblBhbmVsSW5mby5yZXBsYWNlbWVudFN0cmluZy5s
ZW5ndGgoKSk7Ci0gICAgU3RyaW5nIG5ld1RleHQgPSBwbGFpblRleHQocmVwbGFjZW1lbnRSYW5n
ZS5nZXQoKSk7Ci0KLSAgICAvLyBDaGVjayB0byBzZWUgaWYgcmVwbGFjZW1lbnQgc3VjY2VlZGVk
LgotICAgIGlmIChuZXdUZXh0ICE9IG1fY29ycmVjdGlvblBhbmVsSW5mby5yZXBsYWNlbWVudFN0
cmluZykKLSAgICAgICAgcmV0dXJuOwotCi0gICAgRG9jdW1lbnRNYXJrZXJDb250cm9sbGVyKiBt
YXJrZXJzID0gcmVwbGFjZW1lbnRSYW5nZS0+c3RhcnRDb250YWluZXIoKS0+ZG9jdW1lbnQoKS0+
bWFya2VycygpOwotICAgIHNpemVfdCBzaXplID0gbWFya2VyVHlwZXNUb0FkZC5zaXplKCk7Ci0g
ICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBzaXplOyArK2kpIHsKLSAgICAgICAgRG9jdW1lbnRN
YXJrZXI6Ok1hcmtlclR5cGUgbWFya2VyVHlwZSA9IG1hcmtlclR5cGVzVG9BZGRbaV07Ci0gICAg
ICAgIFN0cmluZyBkZXNjcmlwdGlvbjsKLSAgICAgICAgaWYgKG1fY29ycmVjdGlvblBhbmVsSW5m
by5wYW5lbFR5cGUgIT0gQ29ycmVjdGlvblBhbmVsSW5mbzo6UGFuZWxUeXBlUmV2ZXJzaW9uICYm
IChtYXJrZXJUeXBlID09IERvY3VtZW50TWFya2VyOjpSZXBsYWNlbWVudCB8fCBtYXJrZXJUeXBl
ID09IERvY3VtZW50TWFya2VyOjpBdXRvY29ycmVjdGVkKSkKLSAgICAgICAgICAgIGRlc2NyaXB0
aW9uID0gbV9jb3JyZWN0aW9uUGFuZWxJbmZvLnJlcGxhY2VkU3RyaW5nOwotICAgICAgICBtYXJr
ZXJzLT5hZGRNYXJrZXIocmVwbGFjZW1lbnRSYW5nZS5nZXQoKSwgbWFya2VyVHlwZSwgZGVzY3Jp
cHRpb24pOwotICAgIH0KLX0KLQotYm9vbCBTcGVsbGluZ0NvcnJlY3Rpb25Db250cm9sbGVyOjph
cHBseUF1dG9jb3JyZWN0aW9uQmVmb3JlVHlwaW5nSWZBcHByb3ByaWF0ZSgpCi17Ci0gICAgaWYg
KCFtX2NvcnJlY3Rpb25QYW5lbEluZm8ucmFuZ2VUb0JlUmVwbGFjZWQgfHwgIW1fY29ycmVjdGlv
blBhbmVsSW5mby5pc0FjdGl2ZSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgaWYgKG1f
Y29ycmVjdGlvblBhbmVsSW5mby5wYW5lbFR5cGUgIT0gQ29ycmVjdGlvblBhbmVsSW5mbzo6UGFu
ZWxUeXBlQ29ycmVjdGlvbikKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgUG9zaXRpb24g
Y2FyZXRQb3NpdGlvbiA9IG1fZnJhbWUtPnNlbGVjdGlvbigpLT5zZWxlY3Rpb24oKS5zdGFydCgp
OwotCi0gICAgaWYgKG1fY29ycmVjdGlvblBhbmVsSW5mby5yYW5nZVRvQmVSZXBsYWNlZC0+ZW5k
UG9zaXRpb24oKSA9PSBjYXJldFBvc2l0aW9uKSB7Ci0gICAgICAgIGhhbmRsZUNvcnJlY3Rpb25Q
YW5lbFJlc3VsdChkaXNtaXNzU29vbihSZWFzb25Gb3JEaXNtaXNzaW5nQ29ycmVjdGlvblBhbmVs
QWNjZXB0ZWQpKTsKLSAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgfSAKLSAgICAKLSAgICAvLyBQ
ZW5kaW5nIGNvcnJlY3Rpb24gc2hvdWxkIGFsd2F5cyBiZSB3aGVyZSBjYXJldCBpcy4gQnV0IGlu
IGNhc2UgdGhpcyBpcyBub3QgYWx3YXlzIHRydWUsIHdlIHN0aWxsIHdhbnQgdG8gZGlzbWlzcyB0
aGUgcGFuZWwgd2l0aG91dCBhY2NlcHRpbmcgdGhlIGNvcnJlY3Rpb24uCi0gICAgQVNTRVJUKG1f
Y29ycmVjdGlvblBhbmVsSW5mby5yYW5nZVRvQmVSZXBsYWNlZC0+ZW5kUG9zaXRpb24oKSA9PSBj
YXJldFBvc2l0aW9uKTsKLSAgICBkaXNtaXNzKFJlYXNvbkZvckRpc21pc3NpbmdDb3JyZWN0aW9u
UGFuZWxJZ25vcmVkKTsKLSAgICByZXR1cm4gZmFsc2U7Ci19Ci0KLXZvaWQgU3BlbGxpbmdDb3Jy
ZWN0aW9uQ29udHJvbGxlcjo6cmVzcG9uZFRvVW5hcHBsaWVkU3BlbGxDb3JyZWN0aW9uKGNvbnN0
IFZpc2libGVTZWxlY3Rpb24mIHNlbGVjdGlvbk9mQ29ycmVjdGVkLCBjb25zdCBTdHJpbmcmIGNv
cnJlY3RlZCwgY29uc3QgU3RyaW5nJiBjb3JyZWN0aW9uKQotewotICAgIGNsaWVudCgpLT5yZWNv
cmRBdXRvY29ycmVjdGlvblJlc3BvbnNlKEVkaXRvckNsaWVudDo6QXV0b2NvcnJlY3Rpb25SZXZl
cnRlZCwgY29ycmVjdGVkLCBjb3JyZWN0aW9uKTsKLSAgICBtX2ZyYW1lLT5kb2N1bWVudCgpLT51
cGRhdGVMYXlvdXQoKTsKLSAgICBtX2ZyYW1lLT5zZWxlY3Rpb24oKS0+c2V0U2VsZWN0aW9uKHNl
bGVjdGlvbk9mQ29ycmVjdGVkLCBGcmFtZVNlbGVjdGlvbjo6Q2xvc2VUeXBpbmcgfCBGcmFtZVNl
bGVjdGlvbjo6Q2xlYXJUeXBpbmdTdHlsZSB8IEZyYW1lU2VsZWN0aW9uOjpTcGVsbENvcnJlY3Rp
b25UcmlnZ2VyZWQpOwotICAgIFJlZlB0cjxSYW5nZT4gcmFuZ2UgPSBSYW5nZTo6Y3JlYXRlKG1f
ZnJhbWUtPmRvY3VtZW50KCksIG1fZnJhbWUtPnNlbGVjdGlvbigpLT5zZWxlY3Rpb24oKS5zdGFy
dCgpLCBtX2ZyYW1lLT5zZWxlY3Rpb24oKS0+c2VsZWN0aW9uKCkuZW5kKCkpOwotCi0gICAgRG9j
dW1lbnRNYXJrZXJDb250cm9sbGVyKiBtYXJrZXJzID0gbV9mcmFtZS0+ZG9jdW1lbnQoKS0+bWFy
a2VycygpOwotICAgIG1hcmtlcnMtPnJlbW92ZU1hcmtlcnMocmFuZ2UuZ2V0KCksIERvY3VtZW50
TWFya2VyOjpTcGVsbGluZyB8IERvY3VtZW50TWFya2VyOjpBdXRvY29ycmVjdGVkLCBEb2N1bWVu
dE1hcmtlckNvbnRyb2xsZXI6OlJlbW92ZVBhcnRpYWxseU92ZXJsYXBwaW5nTWFya2VyKTsKLSAg
ICBtYXJrZXJzLT5hZGRNYXJrZXIocmFuZ2UuZ2V0KCksIERvY3VtZW50TWFya2VyOjpSZXBsYWNl
bWVudCk7Ci0gICAgbWFya2Vycy0+YWRkTWFya2VyKHJhbmdlLmdldCgpLCBEb2N1bWVudE1hcmtl
cjo6U3BlbGxDaGVja2luZ0V4ZW1wdGlvbik7Ci19Ci0KLXZvaWQgU3BlbGxpbmdDb3JyZWN0aW9u
Q29udHJvbGxlcjo6Y29ycmVjdGlvblBhbmVsVGltZXJGaXJlZChUaW1lcjxTcGVsbGluZ0NvcnJl
Y3Rpb25Db250cm9sbGVyPiopCi17Ci0gICAgbV9jb3JyZWN0aW9uUGFuZWxJc0Rpc21pc3NlZEJ5
RWRpdG9yID0gZmFsc2U7Ci0gICAgc3dpdGNoIChtX2NvcnJlY3Rpb25QYW5lbEluZm8ucGFuZWxU
eXBlKSB7Ci0gICAgY2FzZSBDb3JyZWN0aW9uUGFuZWxJbmZvOjpQYW5lbFR5cGVDb3JyZWN0aW9u
OiB7Ci0gICAgICAgIFZpc2libGVTZWxlY3Rpb24gc2VsZWN0aW9uKG1fZnJhbWUtPnNlbGVjdGlv
bigpLT5zZWxlY3Rpb24oKSk7Ci0gICAgICAgIFZpc2libGVQb3NpdGlvbiBzdGFydChzZWxlY3Rp
b24uc3RhcnQoKSwgc2VsZWN0aW9uLmFmZmluaXR5KCkpOwotICAgICAgICBWaXNpYmxlUG9zaXRp
b24gcCA9IHN0YXJ0T2ZXb3JkKHN0YXJ0LCBMZWZ0V29yZElmT25Cb3VuZGFyeSk7Ci0gICAgICAg
IFZpc2libGVTZWxlY3Rpb24gYWRqYWNlbnRXb3JkcyA9IFZpc2libGVTZWxlY3Rpb24ocCwgc3Rh
cnQpOwotICAgICAgICBtX2ZyYW1lLT5lZGl0b3IoKS0+bWFya0FsbE1pc3NwZWxsaW5nc0FuZEJh
ZEdyYW1tYXJJblJhbmdlcyhUZXh0Q2hlY2tpbmdUeXBlU3BlbGxpbmcgfCBUZXh0Q2hlY2tpbmdU
eXBlU2hvd0NvcnJlY3Rpb25QYW5lbCwgYWRqYWNlbnRXb3Jkcy50b05vcm1hbGl6ZWRSYW5nZSgp
LmdldCgpLCAwKTsKLSAgICB9Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgQ29ycmVjdGlvblBh
bmVsSW5mbzo6UGFuZWxUeXBlUmV2ZXJzaW9uOiB7Ci0gICAgICAgIGlmICghbV9jb3JyZWN0aW9u
UGFuZWxJbmZvLnJhbmdlVG9CZVJlcGxhY2VkKQotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAg
IG1fY29ycmVjdGlvblBhbmVsSW5mby5pc0FjdGl2ZSA9IHRydWU7Ci0gICAgICAgIG1fY29ycmVj
dGlvblBhbmVsSW5mby5yZXBsYWNlZFN0cmluZyA9IHBsYWluVGV4dChtX2NvcnJlY3Rpb25QYW5l
bEluZm8ucmFuZ2VUb0JlUmVwbGFjZWQuZ2V0KCkpOwotICAgICAgICBGbG9hdFJlY3QgYm91bmRp
bmdCb3ggPSByb290Vmlld1JlY3RGb3JSYW5nZShtX2NvcnJlY3Rpb25QYW5lbEluZm8ucmFuZ2VU
b0JlUmVwbGFjZWQuZ2V0KCkpOwotICAgICAgICBpZiAoIWJvdW5kaW5nQm94LmlzRW1wdHkoKSkK
LSAgICAgICAgICAgIGNsaWVudCgpLT5zaG93Q29ycmVjdGlvblBhbmVsKG1fY29ycmVjdGlvblBh
bmVsSW5mby5wYW5lbFR5cGUsIGJvdW5kaW5nQm94LCBtX2NvcnJlY3Rpb25QYW5lbEluZm8ucmVw
bGFjZWRTdHJpbmcsIG1fY29ycmVjdGlvblBhbmVsSW5mby5yZXBsYWNlbWVudFN0cmluZywgVmVj
dG9yPFN0cmluZz4oKSk7Ci0gICAgfQotICAgICAgICBicmVhazsKLSAgICBjYXNlIENvcnJlY3Rp
b25QYW5lbEluZm86OlBhbmVsVHlwZVNwZWxsaW5nU3VnZ2VzdGlvbnM6IHsKLSAgICAgICAgaWYg
KCFtX2NvcnJlY3Rpb25QYW5lbEluZm8ucmFuZ2VUb0JlUmVwbGFjZWQgfHwgcGxhaW5UZXh0KG1f
Y29ycmVjdGlvblBhbmVsSW5mby5yYW5nZVRvQmVSZXBsYWNlZC5nZXQoKSkgIT0gbV9jb3JyZWN0
aW9uUGFuZWxJbmZvLnJlcGxhY2VkU3RyaW5nKQotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAg
IFN0cmluZyBwYXJhZ3JhcGhUZXh0ID0gcGxhaW5UZXh0KFRleHRDaGVja2luZ1BhcmFncmFwaCht
X2NvcnJlY3Rpb25QYW5lbEluZm8ucmFuZ2VUb0JlUmVwbGFjZWQpLnBhcmFncmFwaFJhbmdlKCku
Z2V0KCkpOwotICAgICAgICBWZWN0b3I8U3RyaW5nPiBzdWdnZXN0aW9uczsKLSAgICAgICAgdGV4
dENoZWNrZXIoKS0+Z2V0R3Vlc3Nlc0ZvcldvcmQobV9jb3JyZWN0aW9uUGFuZWxJbmZvLnJlcGxh
Y2VkU3RyaW5nLCBwYXJhZ3JhcGhUZXh0LCBzdWdnZXN0aW9ucyk7Ci0gICAgICAgIGlmIChzdWdn
ZXN0aW9ucy5pc0VtcHR5KCkpIHsKLSAgICAgICAgICAgIG1fY29ycmVjdGlvblBhbmVsSW5mby5y
YW5nZVRvQmVSZXBsYWNlZC5jbGVhcigpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0K
LSAgICAgICAgU3RyaW5nIHRvcFN1Z2dlc3Rpb24gPSBzdWdnZXN0aW9ucy5maXJzdCgpOwotICAg
ICAgICBzdWdnZXN0aW9ucy5yZW1vdmUoMCk7Ci0gICAgICAgIG1fY29ycmVjdGlvblBhbmVsSW5m
by5pc0FjdGl2ZSA9IHRydWU7Ci0gICAgICAgIEZsb2F0UmVjdCBib3VuZGluZ0JveCA9IHJvb3RW
aWV3UmVjdEZvclJhbmdlKG1fY29ycmVjdGlvblBhbmVsSW5mby5yYW5nZVRvQmVSZXBsYWNlZC5n
ZXQoKSk7Ci0gICAgICAgIGlmICghYm91bmRpbmdCb3guaXNFbXB0eSgpKQotICAgICAgICAgICAg
Y2xpZW50KCktPnNob3dDb3JyZWN0aW9uUGFuZWwobV9jb3JyZWN0aW9uUGFuZWxJbmZvLnBhbmVs
VHlwZSwgYm91bmRpbmdCb3gsIG1fY29ycmVjdGlvblBhbmVsSW5mby5yZXBsYWNlZFN0cmluZywg
dG9wU3VnZ2VzdGlvbiwgc3VnZ2VzdGlvbnMpOwotICAgIH0KLSAgICAgICAgYnJlYWs7Ci0gICAg
fQotfQotCi12b2lkIFNwZWxsaW5nQ29ycmVjdGlvbkNvbnRyb2xsZXI6OmhhbmRsZUNvcnJlY3Rp
b25QYW5lbFJlc3VsdChjb25zdCBTdHJpbmcmIGNvcnJlY3Rpb24pCi17Ci0gICAgUmFuZ2UqIHJl
cGxhY2VkUmFuZ2UgPSBtX2NvcnJlY3Rpb25QYW5lbEluZm8ucmFuZ2VUb0JlUmVwbGFjZWQuZ2V0
KCk7Ci0gICAgaWYgKCFyZXBsYWNlZFJhbmdlIHx8IG1fZnJhbWUtPmRvY3VtZW50KCkgIT0gcmVw
bGFjZWRSYW5nZS0+b3duZXJEb2N1bWVudCgpKQotICAgICAgICByZXR1cm47Ci0KLSAgICBTdHJp
bmcgY3VycmVudFdvcmQgPSBwbGFpblRleHQobV9jb3JyZWN0aW9uUGFuZWxJbmZvLnJhbmdlVG9C
ZVJlcGxhY2VkLmdldCgpKTsKLSAgICAvLyBDaGVjayB0byBzZWUgaWYgdGhlIHdvcmQgd2UgYXJl
IGFib3V0IHRvIGNvcnJlY3QgaGFzIGJlZW4gY2hhbmdlZCBiZXR3ZWVuIHRpbWVyIGZpcmluZyBh
bmQgY2FsbGJhY2sgYmVpbmcgdHJpZ2dlcmVkLgotICAgIGlmIChjdXJyZW50V29yZCAhPSBtX2Nv
cnJlY3Rpb25QYW5lbEluZm8ucmVwbGFjZWRTdHJpbmcpCi0gICAgICAgIHJldHVybjsKLQotICAg
IG1fY29ycmVjdGlvblBhbmVsSW5mby5pc0FjdGl2ZSA9IGZhbHNlOwotCi0gICAgc3dpdGNoICht
X2NvcnJlY3Rpb25QYW5lbEluZm8ucGFuZWxUeXBlKSB7Ci0gICAgY2FzZSBDb3JyZWN0aW9uUGFu
ZWxJbmZvOjpQYW5lbFR5cGVDb3JyZWN0aW9uOgotICAgICAgICBpZiAoY29ycmVjdGlvbi5sZW5n
dGgoKSkgewotICAgICAgICAgICAgbV9jb3JyZWN0aW9uUGFuZWxJbmZvLnJlcGxhY2VtZW50U3Ry
aW5nID0gY29ycmVjdGlvbjsKLSAgICAgICAgICAgIGFwcGx5Q29ycmVjdGlvblBhbmVsSW5mbyht
YXJrZXJUeXBlc0ZvckF1dG9jb3JyZWN0aW9uKCkpOwotICAgICAgICB9IGVsc2UgaWYgKCFtX2Nv
cnJlY3Rpb25QYW5lbElzRGlzbWlzc2VkQnlFZGl0b3IpCi0gICAgICAgICAgICByZXBsYWNlZFJh
bmdlLT5zdGFydENvbnRhaW5lcigpLT5kb2N1bWVudCgpLT5tYXJrZXJzKCktPmFkZE1hcmtlcihy
ZXBsYWNlZFJhbmdlLCBEb2N1bWVudE1hcmtlcjo6UmVqZWN0ZWRDb3JyZWN0aW9uLCBtX2NvcnJl
Y3Rpb25QYW5lbEluZm8ucmVwbGFjZWRTdHJpbmcpOwotICAgICAgICBicmVhazsKLSAgICBjYXNl
IENvcnJlY3Rpb25QYW5lbEluZm86OlBhbmVsVHlwZVJldmVyc2lvbjoKLSAgICBjYXNlIENvcnJl
Y3Rpb25QYW5lbEluZm86OlBhbmVsVHlwZVNwZWxsaW5nU3VnZ2VzdGlvbnM6Ci0gICAgICAgIGlm
IChjb3JyZWN0aW9uLmxlbmd0aCgpKSB7Ci0gICAgICAgICAgICBtX2NvcnJlY3Rpb25QYW5lbElu
Zm8ucmVwbGFjZW1lbnRTdHJpbmcgPSBjb3JyZWN0aW9uOwotICAgICAgICAgICAgYXBwbHlDb3Jy
ZWN0aW9uUGFuZWxJbmZvKG1hcmtlclR5cGVzRm9yUmVwbGFjZW1lbnQoKSk7Ci0gICAgICAgIH0K
LSAgICAgICAgYnJlYWs7Ci0gICAgfQotCi0gICAgbV9jb3JyZWN0aW9uUGFuZWxJbmZvLnJhbmdl
VG9CZVJlcGxhY2VkLmNsZWFyKCk7Ci19Ci0KLWJvb2wgU3BlbGxpbmdDb3JyZWN0aW9uQ29udHJv
bGxlcjo6aXNBdXRvbWF0aWNTcGVsbGluZ0NvcnJlY3Rpb25FbmFibGVkKCkKLXsKLSAgICByZXR1
cm4gY2xpZW50KCkgJiYgY2xpZW50KCktPmlzQXV0b21hdGljU3BlbGxpbmdDb3JyZWN0aW9uRW5h
YmxlZCgpOwotfQotCi1GbG9hdFJlY3QgU3BlbGxpbmdDb3JyZWN0aW9uQ29udHJvbGxlcjo6cm9v
dFZpZXdSZWN0Rm9yUmFuZ2UoY29uc3QgUmFuZ2UqIHJhbmdlKSBjb25zdAotewotICAgIEZyYW1l
VmlldyogdmlldyA9IG1fZnJhbWUtPnZpZXcoKTsKLSAgICBpZiAoIXZpZXcpCi0gICAgICAgIHJl
dHVybiBGbG9hdFJlY3QoKTsKLSAgICBWZWN0b3I8RmxvYXRRdWFkPiB0ZXh0UXVhZHM7Ci0gICAg
cmFuZ2UtPnRleHRRdWFkcyh0ZXh0UXVhZHMpOwotICAgIEZsb2F0UmVjdCBib3VuZGluZ1JlY3Q7
Ci0gICAgc2l6ZV90IHNpemUgPSB0ZXh0UXVhZHMuc2l6ZSgpOwotICAgIGZvciAoc2l6ZV90IGkg
PSAwOyBpIDwgc2l6ZTsgKytpKQotICAgICAgICBib3VuZGluZ1JlY3QudW5pdGUodGV4dFF1YWRz
W2ldLmJvdW5kaW5nQm94KCkpOwotICAgIHJldHVybiB2aWV3LT5jb250ZW50c1RvUm9vdFZpZXco
SW50UmVjdChib3VuZGluZ1JlY3QpKTsKLX0gICAgICAgIAotCi12b2lkIFNwZWxsaW5nQ29ycmVj
dGlvbkNvbnRyb2xsZXI6OnJlc3BvbmRUb0NoYW5nZWRTZWxlY3Rpb24oY29uc3QgVmlzaWJsZVNl
bGVjdGlvbiYgb2xkU2VsZWN0aW9uKQotewotICAgIFZpc2libGVTZWxlY3Rpb24gY3VycmVudFNl
bGVjdGlvbihtX2ZyYW1lLT5zZWxlY3Rpb24oKS0+c2VsZWN0aW9uKCkpOwotICAgIC8vIFdoZW4g
dXNlciBtb3ZlcyBjYXJldCB0byB0aGUgZW5kIG9mIGF1dG9jb3JyZWN0ZWQgd29yZCBhbmQgcGF1
c2VzLCB3ZSBzaG93IHRoZSBwYW5lbAotICAgIC8vIGNvbnRhaW5pbmcgdGhlIG9yaWdpbmFsIHBy
ZS1jb3JyZWN0aW9uIHdvcmQgc28gdGhhdCB1c2VyIGNhbiBxdWlja2x5IHJldmVydCB0aGUKLSAg
ICAvLyB1bmRlc2lyZWQgYXV0b2NvcnJlY3Rpb24uIEhlcmUsIHdlIHN0YXJ0IGNvcnJlY3Rpb24g
cGFuZWwgdGltZXIgb25jZSB3ZSBjb25maXJtIHRoYXQKLSAgICAvLyB0aGUgbmV3IGNhcmV0IHBv
c2l0aW9uIGlzIGF0IHRoZSBlbmQgb2YgYSB3b3JkLgotICAgIGlmICghY3VycmVudFNlbGVjdGlv
bi5pc0NhcmV0KCkgfHwgY3VycmVudFNlbGVjdGlvbiA9PSBvbGRTZWxlY3Rpb24pCi0gICAgICAg
IHJldHVybjsKLQotICAgIFZpc2libGVQb3NpdGlvbiBzZWxlY3Rpb25Qb3NpdGlvbiA9IGN1cnJl
bnRTZWxlY3Rpb24uc3RhcnQoKTsKLSAgICAKLSAgICAvLyBDcmVhdGluZyBhIFZpc2libGUgcG9z
aXRpb24gdHJpZ2dlcnMgYSBsYXlvdXQgYW5kIHRoZXJlIGlzIG5vCi0gICAgLy8gZ3VhcmFudGVl
IHRoYXQgdGhlIHNlbGVjdGlvbiBpcyBzdGlsbCB2YWxpZC4KLSAgICBpZiAoc2VsZWN0aW9uUG9z
aXRpb24uaXNOdWxsKCkpCi0gICAgICAgIHJldHVybjsKLSAgICAKLSAgICBWaXNpYmxlUG9zaXRp
b24gZW5kUG9zaXRpb25PZldvcmQgPSBlbmRPZldvcmQoc2VsZWN0aW9uUG9zaXRpb24sIExlZnRX
b3JkSWZPbkJvdW5kYXJ5KTsKLSAgICBpZiAoc2VsZWN0aW9uUG9zaXRpb24gIT0gZW5kUG9zaXRp
b25PZldvcmQpCi0gICAgICAgIHJldHVybjsKLQotICAgIFBvc2l0aW9uIHBvc2l0aW9uID0gZW5k
UG9zaXRpb25PZldvcmQuZGVlcEVxdWl2YWxlbnQoKTsKLSAgICBpZiAocG9zaXRpb24uYW5jaG9y
VHlwZSgpICE9IFBvc2l0aW9uOjpQb3NpdGlvbklzT2Zmc2V0SW5BbmNob3IpCi0gICAgICAgIHJl
dHVybjsKLQotICAgIE5vZGUqIG5vZGUgPSBwb3NpdGlvbi5jb250YWluZXJOb2RlKCk7Ci0gICAg
aW50IGVuZE9mZnNldCA9IHBvc2l0aW9uLm9mZnNldEluQ29udGFpbmVyTm9kZSgpOwotICAgIFZl
Y3RvcjxEb2N1bWVudE1hcmtlcio+IG1hcmtlcnMgPSBub2RlLT5kb2N1bWVudCgpLT5tYXJrZXJz
KCktPm1hcmtlcnNGb3Iobm9kZSk7Ci0gICAgc2l6ZV90IG1hcmtlckNvdW50ID0gbWFya2Vycy5z
aXplKCk7Ci0gICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBtYXJrZXJDb3VudDsgKytpKSB7Ci0g
ICAgICAgIGNvbnN0IERvY3VtZW50TWFya2VyKiBtYXJrZXIgPSBtYXJrZXJzW2ldOwotICAgICAg
ICBpZiAoIXNob3VsZFN0YXJ0VGltZXJGb3IobWFya2VyLCBlbmRPZmZzZXQpKQotICAgICAgICAg
ICAgY29udGludWU7Ci0gICAgICAgIFJlZlB0cjxSYW5nZT4gd29yZFJhbmdlID0gUmFuZ2U6OmNy
ZWF0ZShtX2ZyYW1lLT5kb2N1bWVudCgpLCBub2RlLCBtYXJrZXItPnN0YXJ0T2Zmc2V0KCksIG5v
ZGUsIG1hcmtlci0+ZW5kT2Zmc2V0KCkpOwotICAgICAgICBTdHJpbmcgY3VycmVudFdvcmQgPSBw
bGFpblRleHQod29yZFJhbmdlLmdldCgpKTsKLSAgICAgICAgaWYgKCFjdXJyZW50V29yZC5sZW5n
dGgoKSkKLSAgICAgICAgICAgIGNvbnRpbnVlOwotCi0gICAgICAgIG1fY29ycmVjdGlvblBhbmVs
SW5mby5yYW5nZVRvQmVSZXBsYWNlZCA9IHdvcmRSYW5nZTsKLSAgICAgICAgbV9jb3JyZWN0aW9u
UGFuZWxJbmZvLnJlcGxhY2VkU3RyaW5nID0gY3VycmVudFdvcmQ7Ci0gICAgICAgIGlmIChtYXJr
ZXItPnR5cGUoKSA9PSBEb2N1bWVudE1hcmtlcjo6U3BlbGxpbmcpCi0gICAgICAgICAgICBzdGFy
dENvcnJlY3Rpb25QYW5lbFRpbWVyKENvcnJlY3Rpb25QYW5lbEluZm86OlBhbmVsVHlwZVNwZWxs
aW5nU3VnZ2VzdGlvbnMpOwotICAgICAgICBlbHNlIHsKLSAgICAgICAgICAgIG1fY29ycmVjdGlv
blBhbmVsSW5mby5yZXBsYWNlbWVudFN0cmluZyA9IG1hcmtlci0+ZGVzY3JpcHRpb24oKTsKLSAg
ICAgICAgICAgIHN0YXJ0Q29ycmVjdGlvblBhbmVsVGltZXIoQ29ycmVjdGlvblBhbmVsSW5mbzo6
UGFuZWxUeXBlUmV2ZXJzaW9uKTsKLSAgICAgICAgfQotCi0gICAgICAgIGJyZWFrOwotICAgIH0K
LX0KLQotdm9pZCBTcGVsbGluZ0NvcnJlY3Rpb25Db250cm9sbGVyOjpyZXNwb25kVG9BcHBsaWVk
RWRpdGluZyhDb21wb3NpdGVFZGl0Q29tbWFuZCogY29tbWFuZCkKLXsKLSAgICBpZiAoY29tbWFu
ZC0+aXNUb3BMZXZlbENvbW1hbmQoKSAmJiAhY29tbWFuZC0+c2hvdWxkUmV0YWluQXV0b2NvcnJl
Y3Rpb25JbmRpY2F0b3IoKSkKLSAgICAgICAgbV9mcmFtZS0+ZG9jdW1lbnQoKS0+bWFya2Vycygp
LT5yZW1vdmVNYXJrZXJzKERvY3VtZW50TWFya2VyOjpDb3JyZWN0aW9uSW5kaWNhdG9yKTsKLQot
ICAgIG1hcmtQcmVjZWRpbmdXaGl0ZXNwYWNlRm9yRGVsZXRlZEF1dG9jb3JyZWN0aW9uQWZ0ZXJD
b21tYW5kKGNvbW1hbmQpOwotICAgIG1fb3JpZ2luYWxTdHJpbmdGb3JMYXN0RGVsZXRlZEF1dG9j
b3JyZWN0aW9uID0gU3RyaW5nKCk7Ci19Ci0KLXZvaWQgU3BlbGxpbmdDb3JyZWN0aW9uQ29udHJv
bGxlcjo6cmVzcG9uZFRvVW5hcHBsaWVkRWRpdGluZyhFZGl0Q29tbWFuZENvbXBvc2l0aW9uKiBj
b21tYW5kKQotewotICAgIGlmICghY29tbWFuZC0+d2FzQ3JlYXRlTGlua0NvbW1hbmQoKSkKLSAg
ICAgICAgcmV0dXJuOwotICAgIFJlZlB0cjxSYW5nZT4gcmFuZ2UgPSBSYW5nZTo6Y3JlYXRlKG1f
ZnJhbWUtPmRvY3VtZW50KCksIGNvbW1hbmQtPnN0YXJ0aW5nU2VsZWN0aW9uKCkuc3RhcnQoKSwg
Y29tbWFuZC0+c3RhcnRpbmdTZWxlY3Rpb24oKS5lbmQoKSk7Ci0gICAgaWYgKCFyYW5nZSkKLSAg
ICAgICAgcmV0dXJuOwotICAgIERvY3VtZW50TWFya2VyQ29udHJvbGxlciogbWFya2VycyA9IG1f
ZnJhbWUtPmRvY3VtZW50KCktPm1hcmtlcnMoKTsKLSAgICBtYXJrZXJzLT5hZGRNYXJrZXIocmFu
Z2UuZ2V0KCksIERvY3VtZW50TWFya2VyOjpSZXBsYWNlbWVudCk7Ci0gICAgbWFya2Vycy0+YWRk
TWFya2VyKHJhbmdlLmdldCgpLCBEb2N1bWVudE1hcmtlcjo6U3BlbGxDaGVja2luZ0V4ZW1wdGlv
bik7Ci19Ci0KLUVkaXRvckNsaWVudCogU3BlbGxpbmdDb3JyZWN0aW9uQ29udHJvbGxlcjo6Y2xp
ZW50KCkKLXsKLSAgICByZXR1cm4gbV9mcmFtZS0+cGFnZSgpID8gbV9mcmFtZS0+cGFnZSgpLT5l
ZGl0b3JDbGllbnQoKSA6IDA7Ci19Ci0KLVRleHRDaGVja2VyQ2xpZW50KiBTcGVsbGluZ0NvcnJl
Y3Rpb25Db250cm9sbGVyOjp0ZXh0Q2hlY2tlcigpCi17Ci0gICAgaWYgKEVkaXRvckNsaWVudCog
b3duZXIgPSBjbGllbnQoKSkKLSAgICAgICAgcmV0dXJuIG93bmVyLT50ZXh0Q2hlY2tlcigpOwot
ICAgIHJldHVybiAwOwotfQotCi12b2lkIFNwZWxsaW5nQ29ycmVjdGlvbkNvbnRyb2xsZXI6OnJl
Y29yZEF1dG9jb3JyZWN0aW9uUmVzcG9uc2VSZXZlcnNlZChjb25zdCBTdHJpbmcmIHJlcGxhY2Vk
U3RyaW5nLCBjb25zdCBTdHJpbmcmIHJlcGxhY2VtZW50U3RyaW5nKQotewotICAgIGNsaWVudCgp
LT5yZWNvcmRBdXRvY29ycmVjdGlvblJlc3BvbnNlKEVkaXRvckNsaWVudDo6QXV0b2NvcnJlY3Rp
b25SZXZlcnRlZCwgcmVwbGFjZWRTdHJpbmcsIHJlcGxhY2VtZW50U3RyaW5nKTsKLX0KLQotdm9p
ZCBTcGVsbGluZ0NvcnJlY3Rpb25Db250cm9sbGVyOjpyZWNvcmRBdXRvY29ycmVjdGlvblJlc3Bv
bnNlUmV2ZXJzZWQoY29uc3QgU3RyaW5nJiByZXBsYWNlZFN0cmluZywgUGFzc1JlZlB0cjxSYW5n
ZT4gcmVwbGFjZW1lbnRSYW5nZSkKLXsKLSAgICByZWNvcmRBdXRvY29ycmVjdGlvblJlc3BvbnNl
UmV2ZXJzZWQocmVwbGFjZWRTdHJpbmcsIHBsYWluVGV4dChyZXBsYWNlbWVudFJhbmdlLmdldCgp
KSk7Ci19Ci0KLXZvaWQgU3BlbGxpbmdDb3JyZWN0aW9uQ29udHJvbGxlcjo6bWFya1JldmVyc2Vk
KFBhc3NSZWZQdHI8UmFuZ2U+IGNoYW5nZWRSYW5nZSkKLXsKLSAgICBjaGFuZ2VkUmFuZ2UtPnN0
YXJ0Q29udGFpbmVyKCktPmRvY3VtZW50KCktPm1hcmtlcnMoKS0+cmVtb3ZlTWFya2VycyhjaGFu
Z2VkUmFuZ2UuZ2V0KCksIERvY3VtZW50TWFya2VyOjpBdXRvY29ycmVjdGVkLCBEb2N1bWVudE1h
cmtlckNvbnRyb2xsZXI6OlJlbW92ZVBhcnRpYWxseU92ZXJsYXBwaW5nTWFya2VyKTsKLSAgICBj
aGFuZ2VkUmFuZ2UtPnN0YXJ0Q29udGFpbmVyKCktPmRvY3VtZW50KCktPm1hcmtlcnMoKS0+YWRk
TWFya2VyKGNoYW5nZWRSYW5nZS5nZXQoKSwgRG9jdW1lbnRNYXJrZXI6OlNwZWxsQ2hlY2tpbmdF
eGVtcHRpb24pOwotfQotCi12b2lkIFNwZWxsaW5nQ29ycmVjdGlvbkNvbnRyb2xsZXI6Om1hcmtD
b3JyZWN0aW9uKFBhc3NSZWZQdHI8UmFuZ2U+IHJlcGxhY2VkUmFuZ2UsIGNvbnN0IFN0cmluZyYg
cmVwbGFjZWRTdHJpbmcpCi17Ci0gICAgVmVjdG9yPERvY3VtZW50TWFya2VyOjpNYXJrZXJUeXBl
PiBtYXJrZXJUeXBlc1RvQWRkID0gbWFya2VyVHlwZXNGb3JBdXRvY29ycmVjdGlvbigpOwotICAg
IERvY3VtZW50TWFya2VyQ29udHJvbGxlciogbWFya2VycyA9IHJlcGxhY2VkUmFuZ2UtPnN0YXJ0
Q29udGFpbmVyKCktPmRvY3VtZW50KCktPm1hcmtlcnMoKTsKLSAgICBmb3IgKHNpemVfdCBpID0g
MDsgaSA8IG1hcmtlclR5cGVzVG9BZGQuc2l6ZSgpOyArK2kpIHsKLSAgICAgICAgRG9jdW1lbnRN
YXJrZXI6Ok1hcmtlclR5cGUgbWFya2VyVHlwZSA9IG1hcmtlclR5cGVzVG9BZGRbaV07Ci0gICAg
ICAgIGlmIChtYXJrZXJUeXBlID09IERvY3VtZW50TWFya2VyOjpSZXBsYWNlbWVudCB8fCBtYXJr
ZXJUeXBlID09IERvY3VtZW50TWFya2VyOjpBdXRvY29ycmVjdGVkKQotICAgICAgICAgICAgbWFy
a2Vycy0+YWRkTWFya2VyKHJlcGxhY2VkUmFuZ2UuZ2V0KCksIG1hcmtlclR5cGUsIHJlcGxhY2Vk
U3RyaW5nKTsKLSAgICAgICAgZWxzZQotICAgICAgICAgICAgbWFya2Vycy0+YWRkTWFya2VyKHJl
cGxhY2VkUmFuZ2UuZ2V0KCksIG1hcmtlclR5cGUpOwotICAgIH0KLX0KLQotdm9pZCBTcGVsbGlu
Z0NvcnJlY3Rpb25Db250cm9sbGVyOjpyZWNvcmRTcGVsbGNoZWNrZXJSZXNwb25zZUZvck1vZGlm
aWVkQ29ycmVjdGlvbihSYW5nZSogcmFuZ2VPZkNvcnJlY3Rpb24sIGNvbnN0IFN0cmluZyYgY29y
cmVjdGVkLCBjb25zdCBTdHJpbmcmIGNvcnJlY3Rpb24pCi17Ci0gICAgaWYgKCFyYW5nZU9mQ29y
cmVjdGlvbikKLSAgICAgICAgcmV0dXJuOwotICAgIERvY3VtZW50TWFya2VyQ29udHJvbGxlciog
bWFya2VycyA9IHJhbmdlT2ZDb3JyZWN0aW9uLT5zdGFydENvbnRhaW5lcigpLT5kb2N1bWVudCgp
LT5tYXJrZXJzKCk7Ci0gICAgVmVjdG9yPERvY3VtZW50TWFya2VyKj4gY29ycmVjdGVkT25jZU1h
cmtlcnMgPSBtYXJrZXJzLT5tYXJrZXJzSW5SYW5nZShyYW5nZU9mQ29ycmVjdGlvbiwgRG9jdW1l
bnRNYXJrZXI6OkF1dG9jb3JyZWN0ZWQpOwotICAgIGlmIChjb3JyZWN0ZWRPbmNlTWFya2Vycy5p
c0VtcHR5KCkpCi0gICAgICAgIHJldHVybjsKLSAgICAKLSAgICAvLyBTcGVsbGluZyBjb3JyZWN0
ZWQgdGV4dCBoYXMgYmVlbiBlZGl0ZWQuIFdlIG5lZWQgdG8gZGV0ZXJtaW5lIHdoZXRoZXIgdXNl
ciBoYXMgcmV2ZXJ0ZWQgaXQgdG8gb3JpZ2luYWwgdGV4dCBvcgotICAgIC8vIGVkaXRlZCBpdCB0
byBzb21ldGhpbmcgZWxzZSwgYW5kIG5vdGlmeSBzcGVsbGNoZWNrZXIgYWNjb3JkaW5nbHkuCi0g
ICAgaWYgKG1hcmtlcnNIYXZlSWRlbnRpY2FsRGVzY3JpcHRpb24oY29ycmVjdGVkT25jZU1hcmtl
cnMpICYmIGNvcnJlY3RlZE9uY2VNYXJrZXJzWzBdLT5kZXNjcmlwdGlvbigpID09IGNvcnJlY3Rl
ZCkKLSAgICAgICAgY2xpZW50KCktPnJlY29yZEF1dG9jb3JyZWN0aW9uUmVzcG9uc2UoRWRpdG9y
Q2xpZW50OjpBdXRvY29ycmVjdGlvblJldmVydGVkLCBjb3JyZWN0ZWQsIGNvcnJlY3Rpb24pOwot
ICAgIGVsc2UKLSAgICAgICAgY2xpZW50KCktPnJlY29yZEF1dG9jb3JyZWN0aW9uUmVzcG9uc2Uo
RWRpdG9yQ2xpZW50OjpBdXRvY29ycmVjdGlvbkVkaXRlZCwgY29ycmVjdGVkLCBjb3JyZWN0aW9u
KTsKLSAgICBtYXJrZXJzLT5yZW1vdmVNYXJrZXJzKHJhbmdlT2ZDb3JyZWN0aW9uLCBEb2N1bWVu
dE1hcmtlcjo6QXV0b2NvcnJlY3RlZCwgRG9jdW1lbnRNYXJrZXJDb250cm9sbGVyOjpSZW1vdmVQ
YXJ0aWFsbHlPdmVybGFwcGluZ01hcmtlcik7Ci19Ci0KLXZvaWQgU3BlbGxpbmdDb3JyZWN0aW9u
Q29udHJvbGxlcjo6ZGVsZXRlZEF1dG9jb3JyZWN0aW9uQXRQb3NpdGlvbihjb25zdCBQb3NpdGlv
biYgcG9zaXRpb24sIGNvbnN0IFN0cmluZyYgb3JpZ2luYWxTdHJpbmcpCi17Ci0gICAgbV9vcmln
aW5hbFN0cmluZ0Zvckxhc3REZWxldGVkQXV0b2NvcnJlY3Rpb24gPSBvcmlnaW5hbFN0cmluZzsK
LSAgICBtX3Bvc2l0aW9uRm9yTGFzdERlbGV0ZWRBdXRvY29ycmVjdGlvbiA9IHBvc2l0aW9uOwot
fQotCi12b2lkIFNwZWxsaW5nQ29ycmVjdGlvbkNvbnRyb2xsZXI6Om1hcmtQcmVjZWRpbmdXaGl0
ZXNwYWNlRm9yRGVsZXRlZEF1dG9jb3JyZWN0aW9uQWZ0ZXJDb21tYW5kKEVkaXRDb21tYW5kKiBj
b21tYW5kKQotewotICAgIFBvc2l0aW9uIGVuZE9mU2VsZWN0aW9uID0gY29tbWFuZC0+ZW5kaW5n
U2VsZWN0aW9uKCkuZW5kKCk7Ci0gICAgaWYgKGVuZE9mU2VsZWN0aW9uICE9IG1fcG9zaXRpb25G
b3JMYXN0RGVsZXRlZEF1dG9jb3JyZWN0aW9uKQotICAgICAgICByZXR1cm47Ci0KLSAgICBQb3Np
dGlvbiBwcmVjZWRpbmdDaGFyYWN0ZXJQb3NpdGlvbiA9IGVuZE9mU2VsZWN0aW9uLnByZXZpb3Vz
KCk7Ci0gICAgaWYgKGVuZE9mU2VsZWN0aW9uID09IHByZWNlZGluZ0NoYXJhY3RlclBvc2l0aW9u
KQotICAgICAgICByZXR1cm47Ci0KLSAgICBSZWZQdHI8UmFuZ2U+IHByZWNlZGluZ0NoYXJhY3Rl
clJhbmdlID0gUmFuZ2U6OmNyZWF0ZShtX2ZyYW1lLT5kb2N1bWVudCgpLCBwcmVjZWRpbmdDaGFy
YWN0ZXJQb3NpdGlvbiwgZW5kT2ZTZWxlY3Rpb24pOwotICAgIFN0cmluZyBzdHJpbmcgPSBwbGFp
blRleHQocHJlY2VkaW5nQ2hhcmFjdGVyUmFuZ2UuZ2V0KCkpOwotICAgIGlmIChzdHJpbmcuaXNF
bXB0eSgpIHx8ICFpc1doaXRlc3BhY2Uoc3RyaW5nW3N0cmluZy5sZW5ndGgoKSAtIDFdKSkKLSAg
ICAgICAgcmV0dXJuOwotCi0gICAgLy8gTWFyayB0aGlzIHdoaXRlc3BhY2UgdG8gaW5kaWNhdGUg
d2UgaGF2ZSBkZWxldGVkIGFuIGF1dG9jb3JyZWN0aW9uIGZvbGxvd2luZyB0aGlzCi0gICAgLy8g
d2hpdGVzcGFjZS4gU28gaWYgdGhlIHVzZXIgdHlwZXMgdGhlIHNhbWUgb3JpZ2luYWwgd29yZCBh
Z2FpbiBhdCB0aGlzIHBvc2l0aW9uLCB3ZQotICAgIC8vIHdvbid0IGF1dG9jb3JyZWN0IGl0IGFn
YWluLgotICAgIG1fZnJhbWUtPmRvY3VtZW50KCktPm1hcmtlcnMoKS0+YWRkTWFya2VyKHByZWNl
ZGluZ0NoYXJhY3RlclJhbmdlLmdldCgpLCBEb2N1bWVudE1hcmtlcjo6RGVsZXRlZEF1dG9jb3Jy
ZWN0aW9uLCBtX29yaWdpbmFsU3RyaW5nRm9yTGFzdERlbGV0ZWRBdXRvY29ycmVjdGlvbik7Ci19
Ci0KLWJvb2wgU3BlbGxpbmdDb3JyZWN0aW9uQ29udHJvbGxlcjo6cHJvY2Vzc01hcmtlcnNPblRl
eHRUb0JlUmVwbGFjZWRCeVJlc3VsdChjb25zdCBUZXh0Q2hlY2tpbmdSZXN1bHQqIHJlc3VsdCwg
UmFuZ2UqIHJhbmdlVG9CZVJlcGxhY2VkLCBjb25zdCBTdHJpbmcmIHN0cmluZ1RvQmVSZXBsYWNl
ZCkKLXsKLSAgICBEb2N1bWVudE1hcmtlckNvbnRyb2xsZXIqIG1hcmtlckNvbnRyb2xsZXIgPSBt
X2ZyYW1lLT5kb2N1bWVudCgpLT5tYXJrZXJzKCk7Ci0gICAgaWYgKG1hcmtlckNvbnRyb2xsZXIt
Pmhhc01hcmtlcnMocmFuZ2VUb0JlUmVwbGFjZWQsIERvY3VtZW50TWFya2VyOjpSZXBsYWNlbWVu
dCkpIHsKLSAgICAgICAgaWYgKHJlc3VsdC0+dHlwZSA9PSBUZXh0Q2hlY2tpbmdUeXBlQ29ycmVj
dGlvbikKLSAgICAgICAgICAgIHJlY29yZFNwZWxsY2hlY2tlclJlc3BvbnNlRm9yTW9kaWZpZWRD
b3JyZWN0aW9uKHJhbmdlVG9CZVJlcGxhY2VkLCBzdHJpbmdUb0JlUmVwbGFjZWQsIHJlc3VsdC0+
cmVwbGFjZW1lbnQpOwotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQotCi0gICAgaWYgKG1h
cmtlckNvbnRyb2xsZXItPmhhc01hcmtlcnMocmFuZ2VUb0JlUmVwbGFjZWQsIERvY3VtZW50TWFy
a2VyOjpSZWplY3RlZENvcnJlY3Rpb24pKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICBQ
b3NpdGlvbiBiZWdpbm5pbmdPZlJhbmdlID0gcmFuZ2VUb0JlUmVwbGFjZWQtPnN0YXJ0UG9zaXRp
b24oKTsKLSAgICBQb3NpdGlvbiBwcmVjZWRpbmdDaGFyYWN0ZXJQb3NpdGlvbiA9IGJlZ2lubmlu
Z09mUmFuZ2UucHJldmlvdXMoKTsKLSAgICBSZWZQdHI8UmFuZ2U+IHByZWNlZGluZ0NoYXJhY3Rl
clJhbmdlID0gUmFuZ2U6OmNyZWF0ZShtX2ZyYW1lLT5kb2N1bWVudCgpLCBwcmVjZWRpbmdDaGFy
YWN0ZXJQb3NpdGlvbiwgYmVnaW5uaW5nT2ZSYW5nZSk7Ci0KLSAgICBWZWN0b3I8RG9jdW1lbnRN
YXJrZXIqPiBtYXJrZXJzID0gbWFya2VyQ29udHJvbGxlci0+bWFya2Vyc0luUmFuZ2UocHJlY2Vk
aW5nQ2hhcmFjdGVyUmFuZ2UuZ2V0KCksIERvY3VtZW50TWFya2VyOjpEZWxldGVkQXV0b2NvcnJl
Y3Rpb24pOwotCi0gICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBtYXJrZXJzLnNpemUoKTsgKytp
KSB7Ci0gICAgICAgIGlmIChtYXJrZXJzW2ldLT5kZXNjcmlwdGlvbigpID09IHN0cmluZ1RvQmVS
ZXBsYWNlZCkKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci0KLSAgICByZXR1cm4g
dHJ1ZTsKLX0KLSAgICAKLSNlbmRpZgotCi19IC8vIG5hbWVzcGFjZSBXZWJDb3JlCkluZGV4OiBT
b3VyY2UvV2ViQ29yZS9lZGl0aW5nL1NwZWxsaW5nQ29ycmVjdGlvbkNvbnRyb2xsZXIuaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9lZGl0aW5nL1NwZWxsaW5nQ29ycmVjdGlvbkNvbnRy
b2xsZXIuaAkocmV2aXNpb24gMTEzMDQ0KQorKysgU291cmNlL1dlYkNvcmUvZWRpdGluZy9TcGVs
bGluZ0NvcnJlY3Rpb25Db250cm9sbGVyLmgJKHdvcmtpbmcgY29weSkKQEAgLTEsMTU3ICswLDAg
QEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTAgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg
Zm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHBy
b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4g
UmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5
cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBt
dXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAg
ICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUg
ZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUg
Q09NUFVURVIsIElOQy4gYGBBUyBJUycnIEFORCBBTlkKLSAqIEVYUFJFU1MgT1IgSU1QTElFRCBX
QVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCi0gKiBJTVBMSUVE
IFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VM
QVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBD
T01QVVRFUiwgSU5DLiBPUgotICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVD
VCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCi0gKiBFWEVNUExBUlksIE9SIENPTlNF
UVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBQUk9D
VVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFU
QSwgT1IKLSAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVT
RUQgQU5EIE9OIEFOWSBUSEVPUlkKLSAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFD
VCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9S
IE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0gKiBPRiBUSElT
IFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFN
QUdFLgotICovCi0KLSNpZm5kZWYgU3BlbGxpbmdDb3JyZWN0aW9uQ29udHJvbGxlcl9oCi0jZGVm
aW5lIFNwZWxsaW5nQ29ycmVjdGlvbkNvbnRyb2xsZXJfaAotCi0jaW5jbHVkZSAiRG9jdW1lbnRN
YXJrZXIuaCIKLSNpbmNsdWRlICJSYW5nZS5oIgotI2luY2x1ZGUgIlRleHRDaGVja2luZy5oIgot
I2luY2x1ZGUgIlRpbWVyLmgiCi0jaW5jbHVkZSAiVmlzaWJsZVNlbGVjdGlvbi5oIgotI2luY2x1
ZGUgPHd0Zi9Ob25jb3B5YWJsZS5oPgotI2luY2x1ZGUgPHd0Zi9VbnVzZWRQYXJhbS5oPgotCi1u
YW1lc3BhY2UgV2ViQ29yZSB7Ci0KLWNsYXNzIENvbXBvc2l0ZUVkaXRDb21tYW5kOwotY2xhc3Mg
RWRpdG9yQ2xpZW50OwotY2xhc3MgRWRpdENvbW1hbmQ7Ci1jbGFzcyBFZGl0Q29tbWFuZENvbXBv
c2l0aW9uOwotY2xhc3MgRnJhbWU7Ci1jbGFzcyBUZXh0Q2hlY2tlckNsaWVudDsKLQotc3RydWN0
IENvcnJlY3Rpb25QYW5lbEluZm8gewotICAgIGVudW0gUGFuZWxUeXBlIHsKLSAgICAgICAgUGFu
ZWxUeXBlQ29ycmVjdGlvbiA9IDAsCi0gICAgICAgIFBhbmVsVHlwZVJldmVyc2lvbiwKLSAgICAg
ICAgUGFuZWxUeXBlU3BlbGxpbmdTdWdnZXN0aW9ucwotICAgIH07Ci0KLSAgICBSZWZQdHI8UmFu
Z2U+IHJhbmdlVG9CZVJlcGxhY2VkOwotICAgIFN0cmluZyByZXBsYWNlZFN0cmluZzsKLSAgICBT
dHJpbmcgcmVwbGFjZW1lbnRTdHJpbmc7Ci0gICAgUGFuZWxUeXBlIHBhbmVsVHlwZTsKLSAgICBi
b29sIGlzQWN0aXZlOwotfTsKLQotc3RydWN0IFRleHRDaGVja2luZ1Jlc3VsdDsKLQotZW51bSBS
ZWFzb25Gb3JEaXNtaXNzaW5nQ29ycmVjdGlvblBhbmVsIHsKLSAgICBSZWFzb25Gb3JEaXNtaXNz
aW5nQ29ycmVjdGlvblBhbmVsQ2FuY2VsbGVkID0gMCwKLSAgICBSZWFzb25Gb3JEaXNtaXNzaW5n
Q29ycmVjdGlvblBhbmVsSWdub3JlZCwKLSAgICBSZWFzb25Gb3JEaXNtaXNzaW5nQ29ycmVjdGlv
blBhbmVsQWNjZXB0ZWQKLX07Ci0KLSNpZiBVU0UoQVVUT0NPUlJFQ1RJT05fUEFORUwpCi0jZGVm
aW5lIFVOTEVTU19FTkFCTEVEKGZ1bmN0aW9uQm9keSkgOwotI2Vsc2UKLSNkZWZpbmUgVU5MRVNT
X0VOQUJMRUQoZnVuY3Rpb25Cb2R5KSBmdW5jdGlvbkJvZHkKLSNlbmRpZgotCi1jbGFzcyBTcGVs
bGluZ0NvcnJlY3Rpb25Db250cm9sbGVyIHsKLSAgICBXVEZfTUFLRV9OT05DT1BZQUJMRShTcGVs
bGluZ0NvcnJlY3Rpb25Db250cm9sbGVyKTsgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7Ci1wdWJs
aWM6Ci0gICAgU3BlbGxpbmdDb3JyZWN0aW9uQ29udHJvbGxlcihGcmFtZSopIFVOTEVTU19FTkFC
TEVEKHt9KQotICAgIH5TcGVsbGluZ0NvcnJlY3Rpb25Db250cm9sbGVyKCkgVU5MRVNTX0VOQUJM
RUQoe30pCi0KLSAgICB2b2lkIHN0YXJ0Q29ycmVjdGlvblBhbmVsVGltZXIoQ29ycmVjdGlvblBh
bmVsSW5mbzo6UGFuZWxUeXBlKSBVTkxFU1NfRU5BQkxFRCh7fSkKLSAgICB2b2lkIHN0b3BDb3Jy
ZWN0aW9uUGFuZWxUaW1lcigpIFVOTEVTU19FTkFCTEVEKHt9KQotCi0gICAgdm9pZCBkaXNtaXNz
KFJlYXNvbkZvckRpc21pc3NpbmdDb3JyZWN0aW9uUGFuZWwpIFVOTEVTU19FTkFCTEVEKHt9KQot
ICAgIFN0cmluZyBkaXNtaXNzU29vbihSZWFzb25Gb3JEaXNtaXNzaW5nQ29ycmVjdGlvblBhbmVs
KSBVTkxFU1NfRU5BQkxFRCh7IHJldHVybiBTdHJpbmcoKTsgfSkKLSAgICB2b2lkIHNob3coUGFz
c1JlZlB0cjxSYW5nZT4gcmFuZ2VUb1JlcGxhY2UsIGNvbnN0IFN0cmluZyYgcmVwbGFjZW1lbnQp
IFVOTEVTU19FTkFCTEVEKHsgVU5VU0VEX1BBUkFNKHJhbmdlVG9SZXBsYWNlKTsgVU5VU0VEX1BB
UkFNKHJlcGxhY2VtZW50KTsgfSkKLQotICAgIHZvaWQgYXBwbHlDb3JyZWN0aW9uUGFuZWxJbmZv
KGNvbnN0IFZlY3RvcjxEb2N1bWVudE1hcmtlcjo6TWFya2VyVHlwZT4mKSBVTkxFU1NfRU5BQkxF
RCh7fSkKLSAgICAvLyBSZXR1cm4gdHJ1ZSBpZiBjb3JyZWN0aW9uIHdhcyBhcHBsaWVkLCBmYWxz
ZSBvdGhlcndpc2UuCi0gICAgYm9vbCBhcHBseUF1dG9jb3JyZWN0aW9uQmVmb3JlVHlwaW5nSWZB
cHByb3ByaWF0ZSgpIFVOTEVTU19FTkFCTEVEKHsgcmV0dXJuIGZhbHNlOyB9KQotCi0gICAgdm9p
ZCByZXNwb25kVG9VbmFwcGxpZWRTcGVsbENvcnJlY3Rpb24oY29uc3QgVmlzaWJsZVNlbGVjdGlv
biYsIGNvbnN0IFN0cmluZyYgY29ycmVjdGVkLCBjb25zdCBTdHJpbmcmIGNvcnJlY3Rpb24pIFVO
TEVTU19FTkFCTEVEKHsgVU5VU0VEX1BBUkFNKGNvcnJlY3RlZCk7IFVOVVNFRF9QQVJBTShjb3Jy
ZWN0aW9uKTsgfSkKLSAgICB2b2lkIHJlc3BvbmRUb0FwcGxpZWRFZGl0aW5nKENvbXBvc2l0ZUVk
aXRDb21tYW5kKikgVU5MRVNTX0VOQUJMRUQoeyB9KQotICAgIHZvaWQgcmVzcG9uZFRvVW5hcHBs
aWVkRWRpdGluZyhFZGl0Q29tbWFuZENvbXBvc2l0aW9uKikgVU5MRVNTX0VOQUJMRUQoeyB9KQot
ICAgIHZvaWQgcmVzcG9uZFRvQ2hhbmdlZFNlbGVjdGlvbihjb25zdCBWaXNpYmxlU2VsZWN0aW9u
JiBvbGRTZWxlY3Rpb24pIFVOTEVTU19FTkFCTEVEKHsgVU5VU0VEX1BBUkFNKG9sZFNlbGVjdGlv
bik7IH0pCi0KLSAgICB2b2lkIHN0b3BQZW5kaW5nQ29ycmVjdGlvbihjb25zdCBWaXNpYmxlU2Vs
ZWN0aW9uJiBvbGRTZWxlY3Rpb24pIFVOTEVTU19FTkFCTEVEKHsgVU5VU0VEX1BBUkFNKG9sZFNl
bGVjdGlvbik7IH0pCi0gICAgdm9pZCBhcHBseVBlbmRpbmdDb3JyZWN0aW9uKGNvbnN0IFZpc2li
bGVTZWxlY3Rpb24mIHNlbGVjdGlvbkFmdGVyVHlwaW5nKSBVTkxFU1NfRU5BQkxFRCh7IFVOVVNF
RF9QQVJBTShzZWxlY3Rpb25BZnRlclR5cGluZyk7IH0pCi0KLSAgICB2b2lkIGhhbmRsZUNvcnJl
Y3Rpb25QYW5lbFJlc3VsdChjb25zdCBTdHJpbmcmIGNvcnJlY3Rpb24pIFVOTEVTU19FTkFCTEVE
KHsgVU5VU0VEX1BBUkFNKGNvcnJlY3Rpb24pOyB9KQotICAgIHZvaWQgaGFuZGxlQ2FuY2VsT3Bl
cmF0aW9uKCkgVU5MRVNTX0VOQUJMRUQoe30pCi0KLSAgICBib29sIGhhc1BlbmRpbmdDb3JyZWN0
aW9uKCkgY29uc3QgVU5MRVNTX0VOQUJMRUQoeyByZXR1cm4gZmFsc2U7IH0pCi0gICAgYm9vbCBp
c1NwZWxsaW5nTWFya2VyQWxsb3dlZChQYXNzUmVmUHRyPFJhbmdlPiBtaXNzcGVsbGluZ1Jhbmdl
KSBjb25zdCBVTkxFU1NfRU5BQkxFRCh7IFVOVVNFRF9QQVJBTShtaXNzcGVsbGluZ1JhbmdlKTsg
cmV0dXJuIHRydWU7IH0pCi0gICAgYm9vbCBpc0F1dG9tYXRpY1NwZWxsaW5nQ29ycmVjdGlvbkVu
YWJsZWQoKSBVTkxFU1NfRU5BQkxFRCh7IHJldHVybiBmYWxzZTsgfSkKLSAgICBib29sIHNob3Vs
ZFJlbW92ZU1hcmtlcnNVcG9uRWRpdGluZygpOwotCi0gICAgdm9pZCBjb3JyZWN0aW9uUGFuZWxU
aW1lckZpcmVkKFRpbWVyPFNwZWxsaW5nQ29ycmVjdGlvbkNvbnRyb2xsZXI+KikgVU5MRVNTX0VO
QUJMRUQoe30pCi0gICAgdm9pZCByZWNvcmRBdXRvY29ycmVjdGlvblJlc3BvbnNlUmV2ZXJzZWQo
Y29uc3QgU3RyaW5nJiByZXBsYWNlZFN0cmluZywgUGFzc1JlZlB0cjxSYW5nZT4gcmVwbGFjZW1l
bnRSYW5nZSkgVU5MRVNTX0VOQUJMRUQoeyBVTlVTRURfUEFSQU0ocmVwbGFjZWRTdHJpbmcpOyBV
TlVTRURfUEFSQU0ocmVwbGFjZW1lbnRSYW5nZSk7IH0pCi0gICAgdm9pZCBtYXJrUmV2ZXJzZWQo
UGFzc1JlZlB0cjxSYW5nZT4gY2hhbmdlZFJhbmdlKSBVTkxFU1NfRU5BQkxFRCh7IFVOVVNFRF9Q
QVJBTShjaGFuZ2VkUmFuZ2UpOyB9KQotICAgIHZvaWQgbWFya0NvcnJlY3Rpb24oUGFzc1JlZlB0
cjxSYW5nZT4gcmVwbGFjZWRSYW5nZSwgY29uc3QgU3RyaW5nJiByZXBsYWNlZFN0cmluZykgVU5M
RVNTX0VOQUJMRUQoeyBVTlVTRURfUEFSQU0ocmVwbGFjZWRSYW5nZSk7IFVOVVNFRF9QQVJBTShy
ZXBsYWNlZFN0cmluZyk7IH0pCi0gICAgdm9pZCByZWNvcmRTcGVsbGNoZWNrZXJSZXNwb25zZUZv
ck1vZGlmaWVkQ29ycmVjdGlvbihSYW5nZSogcmFuZ2VPZkNvcnJlY3Rpb24sIGNvbnN0IFN0cmlu
ZyYgY29ycmVjdGVkLCBjb25zdCBTdHJpbmcmIGNvcnJlY3Rpb24pIFVOTEVTU19FTkFCTEVEKHsg
VU5VU0VEX1BBUkFNKHJhbmdlT2ZDb3JyZWN0aW9uKTsgVU5VU0VEX1BBUkFNKGNvcnJlY3RlZCk7
IFVOVVNFRF9QQVJBTShjb3JyZWN0aW9uKTsgfSkKLQotICAgIC8vIFRoaXMgZnVuY3Rpb24gcmV0
dXJucyBmYWxzZSBpZiB0aGUgcmVwbGFjZW1lbnQgc2hvdWxkIG5vdCBiZSBjYXJyaWVkIG91dC4K
LSAgICBib29sIHByb2Nlc3NNYXJrZXJzT25UZXh0VG9CZVJlcGxhY2VkQnlSZXN1bHQoY29uc3Qg
VGV4dENoZWNraW5nUmVzdWx0KiwgUmFuZ2UqIHJhbmdlVG9CZVJlcGxhY2VkLCBjb25zdCBTdHJp
bmcmIHN0cmluZ1RvQmVSZXBsYWNlZCkgVU5MRVNTX0VOQUJMRUQoeyBVTlVTRURfUEFSQU0ocmFu
Z2VUb0JlUmVwbGFjZWQpOyBVTlVTRURfUEFSQU0oc3RyaW5nVG9CZVJlcGxhY2VkKTsgcmV0dXJu
IHRydWU7IH0pOwotICAgIHZvaWQgZGVsZXRlZEF1dG9jb3JyZWN0aW9uQXRQb3NpdGlvbihjb25z
dCBQb3NpdGlvbiYsIGNvbnN0IFN0cmluZyYgb3JpZ2luYWxTdHJpbmcpIFVOTEVTU19FTkFCTEVE
KHsgVU5VU0VEX1BBUkFNKG9yaWdpbmFsU3RyaW5nKTsgfSkKLQotI2lmIFVTRShBVVRPQ09SUkVD
VElPTl9QQU5FTCkKLXByaXZhdGU6Ci0gICAgdm9pZCByZWNvcmRBdXRvY29ycmVjdGlvblJlc3Bv
bnNlUmV2ZXJzZWQoY29uc3QgU3RyaW5nJiByZXBsYWNlZFN0cmluZywgY29uc3QgU3RyaW5nJiBy
ZXBsYWNlbWVudFN0cmluZyk7Ci0KLSAgICBib29sIHNob3VsZFN0YXJ0VGltZXJGb3IoY29uc3Qg
RG9jdW1lbnRNYXJrZXIqIG1hcmtlciwgaW50IGVuZE9mZnNldCkgY29uc3QKLSAgICB7Ci0gICAg
ICAgIHJldHVybiAoKChtYXJrZXItPnR5cGUoKSA9PSBEb2N1bWVudE1hcmtlcjo6UmVwbGFjZW1l
bnQgJiYgIW1hcmtlci0+ZGVzY3JpcHRpb24oKS5pc051bGwoKSkgCi0gICAgICAgICAgICAgICAg
IHx8IG1hcmtlci0+dHlwZSgpID09IERvY3VtZW50TWFya2VyOjpTcGVsbGluZykgJiYgc3RhdGlj
X2Nhc3Q8aW50PihtYXJrZXItPmVuZE9mZnNldCgpKSA9PSBlbmRPZmZzZXQpOwotICAgIH0KLQot
ICAgIEVkaXRvckNsaWVudCogY2xpZW50KCk7Ci0gICAgVGV4dENoZWNrZXJDbGllbnQqIHRleHRD
aGVja2VyKCk7Ci0gICAgRmxvYXRSZWN0IHJvb3RWaWV3UmVjdEZvclJhbmdlKGNvbnN0IFJhbmdl
KikgY29uc3Q7Ci0gICAgdm9pZCBtYXJrUHJlY2VkaW5nV2hpdGVzcGFjZUZvckRlbGV0ZWRBdXRv
Y29ycmVjdGlvbkFmdGVyQ29tbWFuZChFZGl0Q29tbWFuZCopOwotCi0gICAgRWRpdG9yQ2xpZW50
KiBtX2NsaWVudDsKLSAgICBGcmFtZSogbV9mcmFtZTsKLQotICAgIFRpbWVyPFNwZWxsaW5nQ29y
cmVjdGlvbkNvbnRyb2xsZXI+IG1fY29ycmVjdGlvblBhbmVsVGltZXI7Ci0gICAgQ29ycmVjdGlv
blBhbmVsSW5mbyBtX2NvcnJlY3Rpb25QYW5lbEluZm87Ci0gICAgYm9vbCBtX2NvcnJlY3Rpb25Q
YW5lbElzRGlzbWlzc2VkQnlFZGl0b3I7Ci0KLSAgICBTdHJpbmcgbV9vcmlnaW5hbFN0cmluZ0Zv
ckxhc3REZWxldGVkQXV0b2NvcnJlY3Rpb247Ci0gICAgUG9zaXRpb24gbV9wb3NpdGlvbkZvckxh
c3REZWxldGVkQXV0b2NvcnJlY3Rpb247Ci0jZW5kaWYKLX07Ci0KLSN1bmRlZiBVTkxFU1NfRU5B
QkxFRAotCi1pbmxpbmUgYm9vbCBTcGVsbGluZ0NvcnJlY3Rpb25Db250cm9sbGVyOjpzaG91bGRS
ZW1vdmVNYXJrZXJzVXBvbkVkaXRpbmcoKQotewotI2lmIFVTRShNQVJLRVJfUkVNT1ZBTF9VUE9O
X0VESVRJTkcpCi0gICAgcmV0dXJuIHRydWU7Ci0jZWxzZQotICAgIHJldHVybiBmYWxzZTsKLSNl
bmRpZgotfQotCi19IC8vIG5hbWVzcGFjZSBXZWJDb3JlCi0KLSNlbmRpZiAvLyBTcGVsbGluZ0Nv
cnJlY3Rpb25Db250cm9sbGVyX2gKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2VkaXRpbmcvVHlwaW5n
Q29tbWFuZC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvZWRpdGluZy9UeXBpbmdD
b21tYW5kLmNwcAkocmV2aXNpb24gMTEzMDQ0KQorKysgU291cmNlL1dlYkNvcmUvZWRpdGluZy9U
eXBpbmdDb21tYW5kLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzI4LDcgKzMyOCw3IEBAIHZvaWQg
VHlwaW5nQ29tbWFuZDo6bWFya01pc3NwZWxsaW5nc0FmdGUKICAgICAgICAgICAgICAgICBzdHJp
cHBlZFByZXZpb3VzV29yZCA9IHBsYWluVGV4dChyYW5nZS5nZXQoKSkuc3RyaXBXaGl0ZVNwYWNl
KCk7CiAgICAgICAgICAgICBmcmFtZS0+ZWRpdG9yKCktPm1hcmtNaXNzcGVsbGluZ3NBZnRlclR5
cGluZ1RvV29yZChwMSwgZW5kaW5nU2VsZWN0aW9uKCksICFzdHJpcHBlZFByZXZpb3VzV29yZC5p
c0VtcHR5KCkpOwogICAgICAgICB9IGVsc2UgaWYgKGNvbW1hbmRUeXBlID09IFR5cGluZ0NvbW1h
bmQ6Okluc2VydFRleHQpCi0gICAgICAgICAgICBmcmFtZS0+ZWRpdG9yKCktPnN0YXJ0Q29ycmVj
dGlvblBhbmVsVGltZXIoKTsKKyAgICAgICAgICAgIGZyYW1lLT5lZGl0b3IoKS0+c3RhcnRBbHRl
cm5hdGl2ZVRleHRVSVRpbWVyKCk7CiAgICAgfQogfQogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9s
b2FkZXIvRW1wdHlDbGllbnRzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvbG9hZGVy
L0VtcHR5Q2xpZW50cy5oCShyZXZpc2lvbiAxMTMwNDQpCisrKyBTb3VyY2UvV2ViQ29yZS9sb2Fk
ZXIvRW1wdHlDbGllbnRzLmgJKHdvcmtpbmcgY29weSkKQEAgLTUyMCw5ICs1MjAsOSBAQCBwdWJs
aWM6CiAgICAgVGV4dENoZWNrZXJDbGllbnQqIHRleHRDaGVja2VyKCkgeyByZXR1cm4gJm1fdGV4
dENoZWNrZXJDbGllbnQ7IH0KIAogI2lmIFVTRShBVVRPQ09SUkVDVElPTl9QQU5FTCkKLSAgICB2
aXJ0dWFsIHZvaWQgc2hvd0NvcnJlY3Rpb25QYW5lbChDb3JyZWN0aW9uUGFuZWxJbmZvOjpQYW5l
bFR5cGUsIGNvbnN0IEZsb2F0UmVjdCYsIGNvbnN0IFN0cmluZyYsIGNvbnN0IFN0cmluZyYsIGNv
bnN0IFZlY3RvcjxTdHJpbmc+JikgeyB9Ci0gICAgdmlydHVhbCB2b2lkIGRpc21pc3NDb3JyZWN0
aW9uUGFuZWwoUmVhc29uRm9yRGlzbWlzc2luZ0NvcnJlY3Rpb25QYW5lbCkgeyB9Ci0gICAgdmly
dHVhbCBTdHJpbmcgZGlzbWlzc0NvcnJlY3Rpb25QYW5lbFNvb24oUmVhc29uRm9yRGlzbWlzc2lu
Z0NvcnJlY3Rpb25QYW5lbCkgeyByZXR1cm4gU3RyaW5nKCk7IH0KKyAgICB2aXJ0dWFsIHZvaWQg
c2hvd0NvcnJlY3Rpb25QYW5lbChBbHRlcm5hdGl2ZVRleHRUeXBlLCBjb25zdCBGbG9hdFJlY3Qm
LCBjb25zdCBTdHJpbmcmLCBjb25zdCBTdHJpbmcmLCBjb25zdCBWZWN0b3I8U3RyaW5nPiYpIHsg
fQorICAgIHZpcnR1YWwgdm9pZCBkaXNtaXNzQ29ycmVjdGlvblBhbmVsKFJlYXNvbkZvckRpc21p
c3NpbmdBbHRlcm5hdGl2ZVRleHQpIHsgfQorICAgIHZpcnR1YWwgU3RyaW5nIGRpc21pc3NDb3Jy
ZWN0aW9uUGFuZWxTb29uKFJlYXNvbkZvckRpc21pc3NpbmdBbHRlcm5hdGl2ZVRleHQpIHsgcmV0
dXJuIFN0cmluZygpOyB9CiAgICAgdmlydHVhbCB2b2lkIHJlY29yZEF1dG9jb3JyZWN0aW9uUmVz
cG9uc2UoQXV0b2NvcnJlY3Rpb25SZXNwb25zZVR5cGUsIGNvbnN0IFN0cmluZyYsIGNvbnN0IFN0
cmluZyYpIHsgfQogI2VuZGlmCiAgICAgdmlydHVhbCB2b2lkIHVwZGF0ZVNwZWxsaW5nVUlXaXRo
R3JhbW1hclN0cmluZyhjb25zdCBTdHJpbmcmLCBjb25zdCBHcmFtbWFyRGV0YWlsJikgeyB9Cklu
ZGV4OiBTb3VyY2UvV2ViQ29yZS9wYWdlL0VkaXRvckNsaWVudC5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9XZWJDb3JlL3BhZ2UvRWRpdG9yQ2xpZW50LmgJKHJldmlzaW9uIDExMzA0NCkKKysrIFNv
dXJjZS9XZWJDb3JlL3BhZ2UvRWRpdG9yQ2xpZW50LmgJKHdvcmtpbmcgY29weSkKQEAgLTI3LDcg
KzI3LDcgQEAKICNpZm5kZWYgRWRpdG9yQ2xpZW50X2gKICNkZWZpbmUgRWRpdG9yQ2xpZW50X2gK
IAotI2luY2x1ZGUgIlNwZWxsaW5nQ29ycmVjdGlvbkNvbnRyb2xsZXIuaCIKKyNpbmNsdWRlICJB
bHRlcm5hdGl2ZVRleHRDb250cm9sbGVyLmgiCiAjaW5jbHVkZSAiRWRpdG9ySW5zZXJ0QWN0aW9u
LmgiCiAjaW5jbHVkZSAiRmxvYXRSZWN0LmgiCiAjaW5jbHVkZSAiVGV4dEFmZmluaXR5LmgiCkBA
IC0xNTIsOSArMTUyLDkgQEAgcHVibGljOgogICAgIH07CiAKICNpZiBVU0UoQVVUT0NPUlJFQ1RJ
T05fUEFORUwpCi0gICAgdmlydHVhbCB2b2lkIHNob3dDb3JyZWN0aW9uUGFuZWwoQ29ycmVjdGlv
blBhbmVsSW5mbzo6UGFuZWxUeXBlLCBjb25zdCBGbG9hdFJlY3QmIGJvdW5kaW5nQm94T2ZSZXBs
YWNlZFN0cmluZywgY29uc3QgU3RyaW5nJiByZXBsYWNlZFN0cmluZywgY29uc3QgU3RyaW5nJiBy
ZXBsYWNtZW50U3RyaW5nLCBjb25zdCBWZWN0b3I8U3RyaW5nPiYgYWx0ZXJuYXRpdmVSZXBsYWNl
bWVudFN0cmluZ3MpID0gMDsKLSAgICB2aXJ0dWFsIHZvaWQgZGlzbWlzc0NvcnJlY3Rpb25QYW5l
bChSZWFzb25Gb3JEaXNtaXNzaW5nQ29ycmVjdGlvblBhbmVsKSA9IDA7Ci0gICAgdmlydHVhbCBT
dHJpbmcgZGlzbWlzc0NvcnJlY3Rpb25QYW5lbFNvb24oUmVhc29uRm9yRGlzbWlzc2luZ0NvcnJl
Y3Rpb25QYW5lbCkgPSAwOworICAgIHZpcnR1YWwgdm9pZCBzaG93Q29ycmVjdGlvblBhbmVsKEFs
dGVybmF0aXZlVGV4dFR5cGUsIGNvbnN0IEZsb2F0UmVjdCYgYm91bmRpbmdCb3hPZlJlcGxhY2Vk
U3RyaW5nLCBjb25zdCBTdHJpbmcmIHJlcGxhY2VkU3RyaW5nLCBjb25zdCBTdHJpbmcmIHJlcGxh
Y21lbnRTdHJpbmcsIGNvbnN0IFZlY3RvcjxTdHJpbmc+JiBhbHRlcm5hdGl2ZVJlcGxhY2VtZW50
U3RyaW5ncykgPSAwOworICAgIHZpcnR1YWwgdm9pZCBkaXNtaXNzQ29ycmVjdGlvblBhbmVsKFJl
YXNvbkZvckRpc21pc3NpbmdBbHRlcm5hdGl2ZVRleHQpID0gMDsKKyAgICB2aXJ0dWFsIFN0cmlu
ZyBkaXNtaXNzQ29ycmVjdGlvblBhbmVsU29vbihSZWFzb25Gb3JEaXNtaXNzaW5nQWx0ZXJuYXRp
dmVUZXh0KSA9IDA7CiAgICAgdmlydHVhbCB2b2lkIHJlY29yZEF1dG9jb3JyZWN0aW9uUmVzcG9u
c2UoQXV0b2NvcnJlY3Rpb25SZXNwb25zZVR5cGUsIGNvbnN0IFN0cmluZyYgcmVwbGFjZWRTdHJp
bmcsIGNvbnN0IFN0cmluZyYgcmVwbGFjZW1lbnRTdHJpbmcpID0gMDsKICNlbmRpZgogCkluZGV4
OiBTb3VyY2UvV2ViS2l0Mi9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdDIv
Q2hhbmdlTG9nCShyZXZpc2lvbiAxMTMwNDQpCisrKyBTb3VyY2UvV2ViS2l0Mi9DaGFuZ2VMb2cJ
KHdvcmtpbmcgY29weSkKQEAgLTEsMyArMSw1MyBAQAorMjAxMi0wNC0wMyAgSmlhIFB1ICA8anB1
QGFwcGxlLmNvbT4KKworICAgICAgICBSZW5hbWUgU3BlbGxpbmdDb3JyZWN0aW9uQ29udHJvbGxl
ciB0byBBbHRlcm5hdGl2ZVRleHRDb250cm9sbGVyLgorICAgICAgICBodHRwczovL2J1Z3Mud2Vi
a2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9ODI5NDIKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JP
RFkgKE9PUFMhKS4KKworICAgICAgICBUaGVzZSBjaGFuZ2VzIGFyZSBzaW1wbHkgZm9yIGFkb3B0
aW5nIG5ldyBjbGFzcyBuYW1lcy4KKworICAgICAgICAqIFVJUHJvY2Vzcy9BUEkvbWFjL1BhZ2VD
bGllbnRJbXBsLmg6CisgICAgICAgIChQYWdlQ2xpZW50SW1wbCk6CisgICAgICAgICogVUlQcm9j
ZXNzL0FQSS9tYWMvUGFnZUNsaWVudEltcGwubW06CisgICAgICAgIChXZWJLaXQ6OlBhZ2VDbGll
bnRJbXBsOjpzaG93Q29ycmVjdGlvblBhbmVsKToKKyAgICAgICAgKFdlYktpdDo6UGFnZUNsaWVu
dEltcGw6OmRpc21pc3NDb3JyZWN0aW9uUGFuZWwpOgorICAgICAgICAoV2ViS2l0OjpQYWdlQ2xp
ZW50SW1wbDo6ZGlzbWlzc0NvcnJlY3Rpb25QYW5lbFNvb24pOgorICAgICAgICAqIFVJUHJvY2Vz
cy9BUEkvbWFjL1dLVmlldy5tbToKKyAgICAgICAgKC1bV0tWaWV3IGhhbmRsZUNvcnJlY3Rpb25Q
YW5lbFJlc3VsdDpdKToKKyAgICAgICAgKiBVSVByb2Nlc3MvUGFnZUNsaWVudC5oOgorICAgICAg
ICAoUGFnZUNsaWVudCk6CisgICAgICAgICogVUlQcm9jZXNzL1dlYlBhZ2VQcm94eS5jcHA6Cisg
ICAgICAgIChXZWJLaXQ6OldlYlBhZ2VQcm94eTo6ZGlkQ29tbWl0TG9hZEZvckZyYW1lKToKKyAg
ICAgICAgKFdlYktpdDo6V2ViUGFnZVByb3h5OjpwYWdlRGlkU2Nyb2xsKToKKyAgICAgICAgKFdl
YktpdDo6V2ViUGFnZVByb3h5Ojpwcm9jZXNzRGlkQ3Jhc2gpOgorICAgICAgICAoV2ViS2l0OjpX
ZWJQYWdlUHJveHk6OnNob3dDb3JyZWN0aW9uUGFuZWwpOgorICAgICAgICAoV2ViS2l0OjpXZWJQ
YWdlUHJveHk6OmRpc21pc3NDb3JyZWN0aW9uUGFuZWwpOgorICAgICAgICAoV2ViS2l0OjpXZWJQ
YWdlUHJveHk6OmRpc21pc3NDb3JyZWN0aW9uUGFuZWxTb29uKToKKyAgICAgICAgKFdlYktpdDo6
V2ViUGFnZVByb3h5OjpoYW5kbGVBbHRlcm5hdGl2ZVRleHRVSVJlc3VsdCk6CisgICAgICAgICog
VUlQcm9jZXNzL1dlYlBhZ2VQcm94eS5oOgorICAgICAgICAoV2ViUGFnZVByb3h5KToKKyAgICAg
ICAgKiBVSVByb2Nlc3MvbWFjL0NvcnJlY3Rpb25QYW5lbC5oOgorICAgICAgICAoQ29ycmVjdGlv
blBhbmVsKToKKyAgICAgICAgKiBVSVByb2Nlc3MvbWFjL0NvcnJlY3Rpb25QYW5lbC5tbToKKyAg
ICAgICAgKGNvcnJlY3Rpb25JbmRpY2F0b3JUeXBlKToKKyAgICAgICAgKFdlYktpdDo6Q29ycmVj
dGlvblBhbmVsOjpDb3JyZWN0aW9uUGFuZWwpOgorICAgICAgICAoV2ViS2l0OjpDb3JyZWN0aW9u
UGFuZWw6On5Db3JyZWN0aW9uUGFuZWwpOgorICAgICAgICAoV2ViS2l0OjpDb3JyZWN0aW9uUGFu
ZWw6OnNob3cpOgorICAgICAgICAoV2ViS2l0OjpDb3JyZWN0aW9uUGFuZWw6OmRpc21pc3MpOgor
ICAgICAgICAoV2ViS2l0OjpDb3JyZWN0aW9uUGFuZWw6OmRpc21pc3NJbnRlcm5hbCk6CisgICAg
ICAgIChXZWJLaXQ6OkNvcnJlY3Rpb25QYW5lbDo6aGFuZGxlQWNjZXB0ZWRSZXBsYWNlbWVudCk6
CisgICAgICAgICogV2ViUHJvY2Vzcy9XZWJDb3JlU3VwcG9ydC9XZWJFZGl0b3JDbGllbnQuaDoK
KyAgICAgICAgKiBXZWJQcm9jZXNzL1dlYkNvcmVTdXBwb3J0L21hYy9XZWJFZGl0b3JDbGllbnRN
YWMubW06CisgICAgICAgIChXZWJLaXQ6OldlYkVkaXRvckNsaWVudDo6c2hvd0NvcnJlY3Rpb25Q
YW5lbCk6CisgICAgICAgIChXZWJLaXQ6OldlYkVkaXRvckNsaWVudDo6ZGlzbWlzc0NvcnJlY3Rp
b25QYW5lbCk6CisgICAgICAgIChXZWJLaXQ6OldlYkVkaXRvckNsaWVudDo6ZGlzbWlzc0NvcnJl
Y3Rpb25QYW5lbFNvb24pOgorICAgICAgICAqIFdlYlByb2Nlc3MvV2ViUGFnZS9XZWJQYWdlLmNw
cDoKKyAgICAgICAgKFdlYktpdDo6V2ViUGFnZTo6aGFuZGxlQWx0ZXJuYXRpdmVUZXh0VUlSZXN1
bHQpOgorICAgICAgICAqIFdlYlByb2Nlc3MvV2ViUGFnZS9XZWJQYWdlLmg6CisgICAgICAgIChX
ZWJQYWdlKToKKyAgICAgICAgKiBXZWJQcm9jZXNzL1dlYlBhZ2UvV2ViUGFnZS5tZXNzYWdlcy5p
bjoKKwogMjAxMi0wNC0wMyAgQmFsYXpzIEtlbGVtZW4gIDxrYmFsYXpzQHdlYmtpdC5vcmc+CiAK
ICAgICAgICAgW1F0XVtXSzJdIEFTU0VSVCghKG91dHB1dEJ5dGVzLnNpemUoKSAlIHNpemVvZihV
Q2hhcikpKSBpbiBQbHVnaW5Qcm9jZXNzUHJveHlRdC5jcHAKSW5kZXg6IFNvdXJjZS9XZWJLaXQy
L1VJUHJvY2Vzcy9QYWdlQ2xpZW50LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdDIvVUlQ
cm9jZXNzL1BhZ2VDbGllbnQuaAkocmV2aXNpb24gMTEzMDQ0KQorKysgU291cmNlL1dlYktpdDIv
VUlQcm9jZXNzL1BhZ2VDbGllbnQuaAkod29ya2luZyBjb3B5KQpAQCAtMjksOCArMjksOCBAQAog
I2luY2x1ZGUgIlNoYXJlYWJsZUJpdG1hcC5oIgogI2luY2x1ZGUgIldlYlBhZ2VQcm94eS5oIgog
I2luY2x1ZGUgIldlYlBvcHVwTWVudVByb3h5LmgiCisjaW5jbHVkZSA8V2ViQ29yZS9BbHRlcm5h
dGl2ZVRleHRDb250cm9sbGVyLmg+CiAjaW5jbHVkZSA8V2ViQ29yZS9FZGl0b3JDbGllbnQuaD4K
LSNpbmNsdWRlIDxXZWJDb3JlL1NwZWxsaW5nQ29ycmVjdGlvbkNvbnRyb2xsZXIuaD4KICNpbmNs
dWRlIDx3dGYvRm9yd2FyZC5oPgogCiAjaWYgUExBVEZPUk0oTUFDKQpAQCAtMTg1LDkgKzE4NSw5
IEBAIHB1YmxpYzoKICAgICB2aXJ0dWFsIENHQ29udGV4dFJlZiBjb250YWluaW5nV2luZG93R3Jh
cGhpY3NDb250ZXh0KCkgPSAwOwogICAgIHZpcnR1YWwgdm9pZCBkaWRQZXJmb3JtRGljdGlvbmFy
eUxvb2t1cChjb25zdCBTdHJpbmcmLCBkb3VibGUgc2NhbGVGYWN0b3IsIGNvbnN0IERpY3Rpb25h
cnlQb3B1cEluZm8mKSA9IDA7CiAgICAgdmlydHVhbCB2b2lkIGRpc21pc3NEaWN0aW9uYXJ5TG9v
a3VwUGFuZWwoKSA9IDA7Ci0gICAgdmlydHVhbCB2b2lkIHNob3dDb3JyZWN0aW9uUGFuZWwoV2Vi
Q29yZTo6Q29ycmVjdGlvblBhbmVsSW5mbzo6UGFuZWxUeXBlLCBjb25zdCBXZWJDb3JlOjpGbG9h
dFJlY3QmIGJvdW5kaW5nQm94T2ZSZXBsYWNlZFN0cmluZywgY29uc3QgU3RyaW5nJiByZXBsYWNl
ZFN0cmluZywgY29uc3QgU3RyaW5nJiByZXBsYWNlbWVudFN0cmluZywgY29uc3QgVmVjdG9yPFN0
cmluZz4mIGFsdGVybmF0aXZlUmVwbGFjZW1lbnRTdHJpbmdzKSA9IDA7Ci0gICAgdmlydHVhbCB2
b2lkIGRpc21pc3NDb3JyZWN0aW9uUGFuZWwoV2ViQ29yZTo6UmVhc29uRm9yRGlzbWlzc2luZ0Nv
cnJlY3Rpb25QYW5lbCkgPSAwOwotICAgIHZpcnR1YWwgU3RyaW5nIGRpc21pc3NDb3JyZWN0aW9u
UGFuZWxTb29uKFdlYkNvcmU6OlJlYXNvbkZvckRpc21pc3NpbmdDb3JyZWN0aW9uUGFuZWwpID0g
MDsKKyAgICB2aXJ0dWFsIHZvaWQgc2hvd0NvcnJlY3Rpb25QYW5lbChXZWJDb3JlOjpBbHRlcm5h
dGl2ZVRleHRUeXBlLCBjb25zdCBXZWJDb3JlOjpGbG9hdFJlY3QmIGJvdW5kaW5nQm94T2ZSZXBs
YWNlZFN0cmluZywgY29uc3QgU3RyaW5nJiByZXBsYWNlZFN0cmluZywgY29uc3QgU3RyaW5nJiBy
ZXBsYWNlbWVudFN0cmluZywgY29uc3QgVmVjdG9yPFN0cmluZz4mIGFsdGVybmF0aXZlUmVwbGFj
ZW1lbnRTdHJpbmdzKSA9IDA7CisgICAgdmlydHVhbCB2b2lkIGRpc21pc3NDb3JyZWN0aW9uUGFu
ZWwoV2ViQ29yZTo6UmVhc29uRm9yRGlzbWlzc2luZ0FsdGVybmF0aXZlVGV4dCkgPSAwOworICAg
IHZpcnR1YWwgU3RyaW5nIGRpc21pc3NDb3JyZWN0aW9uUGFuZWxTb29uKFdlYkNvcmU6OlJlYXNv
bkZvckRpc21pc3NpbmdBbHRlcm5hdGl2ZVRleHQpID0gMDsKICAgICB2aXJ0dWFsIHZvaWQgcmVj
b3JkQXV0b2NvcnJlY3Rpb25SZXNwb25zZShXZWJDb3JlOjpFZGl0b3JDbGllbnQ6OkF1dG9jb3Jy
ZWN0aW9uUmVzcG9uc2VUeXBlLCBjb25zdCBTdHJpbmcmIHJlcGxhY2VkU3RyaW5nLCBjb25zdCBT
dHJpbmcmIHJlcGxhY2VtZW50U3RyaW5nKSA9IDA7CiAgICAgdmlydHVhbCB2b2lkIHJlY29tbWVu
ZGVkU2Nyb2xsYmFyU3R5bGVEaWRDaGFuZ2UoaW50MzJfdCBuZXdTdHlsZSkgPSAwOwogICAgIApJ
bmRleDogU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL1dlYlBhZ2VQcm94eS5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL1dlYlBhZ2VQcm94eS5jcHAJKHJldmlzaW9u
IDExMzA0NCkKKysrIFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9XZWJQYWdlUHJveHkuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC0xODIyLDcgKzE4MjIsNyBAQCB2b2lkIFdlYlBhZ2VQcm94eTo6ZGlk
Q29tbWl0TG9hZEZvckZyYW1lCiAgICAgbV9wYWdlQ2xpZW50LT5yZXNldFRleHRJbnB1dFN0YXRl
KCk7CiAjaWYgIWRlZmluZWQoQlVJTERJTkdfT05fU05PV19MRU9QQVJEKQogICAgIC8vIEZJWE1F
OiBTaG91bGQgdGhpcyBiZSBtb3ZlZCBpbnNpZGUgcmVzZXRUZXh0SW5wdXRTdGF0ZSgpPwotICAg
IGRpc21pc3NDb3JyZWN0aW9uUGFuZWwoUmVhc29uRm9yRGlzbWlzc2luZ0NvcnJlY3Rpb25QYW5l
bElnbm9yZWQpOworICAgIGRpc21pc3NDb3JyZWN0aW9uUGFuZWwoUmVhc29uRm9yRGlzbWlzc2lu
Z0FsdGVybmF0aXZlVGV4dElnbm9yZWQpOwogICAgIG1fcGFnZUNsaWVudC0+ZGlzbWlzc0RpY3Rp
b25hcnlMb29rdXBQYW5lbCgpOwogI2VuZGlmCiAjZW5kaWYKQEAgLTIzNzksNyArMjM3OSw3IEBA
IHZvaWQgV2ViUGFnZVByb3h5OjpwYWdlRGlkU2Nyb2xsKCkKIHsKICAgICBtX3VpQ2xpZW50LnBh
Z2VEaWRTY3JvbGwodGhpcyk7CiAjaWYgUExBVEZPUk0oTUFDKSAmJiAhZGVmaW5lZChCVUlMRElO
R19PTl9TTk9XX0xFT1BBUkQpCi0gICAgZGlzbWlzc0NvcnJlY3Rpb25QYW5lbChSZWFzb25Gb3JE
aXNtaXNzaW5nQ29ycmVjdGlvblBhbmVsSWdub3JlZCk7CisgICAgZGlzbWlzc0NvcnJlY3Rpb25Q
YW5lbChSZWFzb25Gb3JEaXNtaXNzaW5nQWx0ZXJuYXRpdmVUZXh0SWdub3JlZCk7CiAjZW5kaWYK
IH0KIApAQCAtMzM2Myw3ICszMzYzLDcgQEAgdm9pZCBXZWJQYWdlUHJveHk6OnByb2Nlc3NEaWRD
cmFzaCgpCiAjZW5kaWYKIAogI2lmIFBMQVRGT1JNKE1BQykgJiYgIWRlZmluZWQoQlVJTERJTkdf
T05fU05PV19MRU9QQVJEKQotICAgIGRpc21pc3NDb3JyZWN0aW9uUGFuZWwoUmVhc29uRm9yRGlz
bWlzc2luZ0NvcnJlY3Rpb25QYW5lbElnbm9yZWQpOworICAgIGRpc21pc3NDb3JyZWN0aW9uUGFu
ZWwoUmVhc29uRm9yRGlzbWlzc2luZ0FsdGVybmF0aXZlVGV4dElnbm9yZWQpOwogICAgIG1fcGFn
ZUNsaWVudC0+ZGlzbWlzc0RpY3Rpb25hcnlMb29rdXBQYW5lbCgpOwogI2VuZGlmCiB9CkBAIC0z
Njk5LDE3ICszNjk5LDE3IEBAIHZvaWQgV2ViUGFnZVByb3h5OjpzdWJzdGl0dXRpb25zUGFuZWxJ
c1MKICNpZiAhZGVmaW5lZChCVUlMRElOR19PTl9TTk9XX0xFT1BBUkQpCiB2b2lkIFdlYlBhZ2VQ
cm94eTo6c2hvd0NvcnJlY3Rpb25QYW5lbChpbnQzMl90IHBhbmVsVHlwZSwgY29uc3QgRmxvYXRS
ZWN0JiBib3VuZGluZ0JveE9mUmVwbGFjZWRTdHJpbmcsIGNvbnN0IFN0cmluZyYgcmVwbGFjZWRT
dHJpbmcsIGNvbnN0IFN0cmluZyYgcmVwbGFjZW1lbnRTdHJpbmcsIGNvbnN0IFZlY3RvcjxTdHJp
bmc+JiBhbHRlcm5hdGl2ZVJlcGxhY2VtZW50U3RyaW5ncykKIHsKLSAgICBtX3BhZ2VDbGllbnQt
PnNob3dDb3JyZWN0aW9uUGFuZWwoKENvcnJlY3Rpb25QYW5lbEluZm86OlBhbmVsVHlwZSlwYW5l
bFR5cGUsIGJvdW5kaW5nQm94T2ZSZXBsYWNlZFN0cmluZywgcmVwbGFjZWRTdHJpbmcsIHJlcGxh
Y2VtZW50U3RyaW5nLCBhbHRlcm5hdGl2ZVJlcGxhY2VtZW50U3RyaW5ncyk7CisgICAgbV9wYWdl
Q2xpZW50LT5zaG93Q29ycmVjdGlvblBhbmVsKChBbHRlcm5hdGl2ZVRleHRUeXBlKXBhbmVsVHlw
ZSwgYm91bmRpbmdCb3hPZlJlcGxhY2VkU3RyaW5nLCByZXBsYWNlZFN0cmluZywgcmVwbGFjZW1l
bnRTdHJpbmcsIGFsdGVybmF0aXZlUmVwbGFjZW1lbnRTdHJpbmdzKTsKIH0KIAogdm9pZCBXZWJQ
YWdlUHJveHk6OmRpc21pc3NDb3JyZWN0aW9uUGFuZWwoaW50MzJfdCByZWFzb24pCiB7Ci0gICAg
bV9wYWdlQ2xpZW50LT5kaXNtaXNzQ29ycmVjdGlvblBhbmVsKChSZWFzb25Gb3JEaXNtaXNzaW5n
Q29ycmVjdGlvblBhbmVsKXJlYXNvbik7CisgICAgbV9wYWdlQ2xpZW50LT5kaXNtaXNzQ29ycmVj
dGlvblBhbmVsKChSZWFzb25Gb3JEaXNtaXNzaW5nQWx0ZXJuYXRpdmVUZXh0KXJlYXNvbik7CiB9
CiAKIHZvaWQgV2ViUGFnZVByb3h5OjpkaXNtaXNzQ29ycmVjdGlvblBhbmVsU29vbihpbnQzMl90
IHJlYXNvbiwgU3RyaW5nJiByZXN1bHQpCiB7Ci0gICAgcmVzdWx0ID0gbV9wYWdlQ2xpZW50LT5k
aXNtaXNzQ29ycmVjdGlvblBhbmVsU29vbigoUmVhc29uRm9yRGlzbWlzc2luZ0NvcnJlY3Rpb25Q
YW5lbClyZWFzb24pOworICAgIHJlc3VsdCA9IG1fcGFnZUNsaWVudC0+ZGlzbWlzc0NvcnJlY3Rp
b25QYW5lbFNvb24oKFJlYXNvbkZvckRpc21pc3NpbmdBbHRlcm5hdGl2ZVRleHQpcmVhc29uKTsK
IH0KIAogdm9pZCBXZWJQYWdlUHJveHk6OnJlY29yZEF1dG9jb3JyZWN0aW9uUmVzcG9uc2UoaW50
MzJfdCByZXNwb25zZVR5cGUsIGNvbnN0IFN0cmluZyYgcmVwbGFjZWRTdHJpbmcsIGNvbnN0IFN0
cmluZyYgcmVwbGFjZW1lbnRTdHJpbmcpCkBAIC0zNzE4LDExICszNzE4LDExIEBAIHZvaWQgV2Vi
UGFnZVByb3h5OjpyZWNvcmRBdXRvY29ycmVjdGlvblIKIH0KICNlbmRpZiAvLyAhZGVmaW5lZChC
VUlMRElOR19PTl9TTk9XX0xFT1BBUkQpCiAKLXZvaWQgV2ViUGFnZVByb3h5OjpoYW5kbGVDb3Jy
ZWN0aW9uUGFuZWxSZXN1bHQoY29uc3QgU3RyaW5nJiByZXN1bHQpCit2b2lkIFdlYlBhZ2VQcm94
eTo6aGFuZGxlQWx0ZXJuYXRpdmVUZXh0VUlSZXN1bHQoY29uc3QgU3RyaW5nJiByZXN1bHQpCiB7
CiAjaWYgIWRlZmluZWQoQlVJTERJTkdfT05fU05PV19MRU9QQVJEKQogICAgIGlmICghaXNDbG9z
ZWQoKSkKLSAgICAgICAgcHJvY2VzcygpLT5zZW5kKE1lc3NhZ2VzOjpXZWJQYWdlOjpIYW5kbGVD
b3JyZWN0aW9uUGFuZWxSZXN1bHQocmVzdWx0KSwgbV9wYWdlSUQsIDApOworICAgICAgICBwcm9j
ZXNzKCktPnNlbmQoTWVzc2FnZXM6OldlYlBhZ2U6OkhhbmRsZUFsdGVybmF0aXZlVGV4dFVJUmVz
dWx0KHJlc3VsdCksIG1fcGFnZUlELCAwKTsKICNlbmRpZgogfQogI2VuZGlmIC8vIFBMQVRGT1JN
KE1BQykKSW5kZXg6IFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9XZWJQYWdlUHJveHkuaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvV2ViUGFnZVByb3h5LmgJKHJldmlz
aW9uIDExMzA0NCkKKysrIFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9XZWJQYWdlUHJveHkuaAko
d29ya2luZyBjb3B5KQpAQCAtNjExLDcgKzYxMSw3IEBAIHB1YmxpYzoKICAgICB2b2lkIGZsYXNo
QmFja2luZ1N0b3JlVXBkYXRlcyhjb25zdCBWZWN0b3I8V2ViQ29yZTo6SW50UmVjdD4mIHVwZGF0
ZVJlY3RzKTsKIAogI2lmIFBMQVRGT1JNKE1BQykKLSAgICB2b2lkIGhhbmRsZUNvcnJlY3Rpb25Q
YW5lbFJlc3VsdChjb25zdCBTdHJpbmcmIHJlc3VsdCk7CisgICAgdm9pZCBoYW5kbGVBbHRlcm5h
dGl2ZVRleHRVSVJlc3VsdChjb25zdCBTdHJpbmcmIHJlc3VsdCk7CiAjZW5kaWYKIAogICAgIHN0
YXRpYyB2b2lkIHNldERlYnVnUGFpbnRGbGFncyhXS1BhZ2VEZWJ1Z1BhaW50RmxhZ3MgZmxhZ3Mp
IHsgc19kZWJ1Z1BhaW50RmxhZ3MgPSBmbGFnczsgfQpJbmRleDogU291cmNlL1dlYktpdDIvVUlQ
cm9jZXNzL0FQSS9tYWMvUGFnZUNsaWVudEltcGwuaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
S2l0Mi9VSVByb2Nlc3MvQVBJL21hYy9QYWdlQ2xpZW50SW1wbC5oCShyZXZpc2lvbiAxMTMwNDQp
CisrKyBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL21hYy9QYWdlQ2xpZW50SW1wbC5oCSh3
b3JraW5nIGNvcHkpCkBAIC0xMjAsOSArMTIwLDkgQEAgcHJpdmF0ZToKICAgICB2aXJ0dWFsIHZv
aWQgZGlkUGVyZm9ybURpY3Rpb25hcnlMb29rdXAoY29uc3QgU3RyaW5nJiwgZG91YmxlIHNjYWxl
RmFjdG9yLCBjb25zdCBEaWN0aW9uYXJ5UG9wdXBJbmZvJik7CiAgICAgdmlydHVhbCB2b2lkIGRp
c21pc3NEaWN0aW9uYXJ5TG9va3VwUGFuZWwoKTsKIAotICAgIHZpcnR1YWwgdm9pZCBzaG93Q29y
cmVjdGlvblBhbmVsKFdlYkNvcmU6OkNvcnJlY3Rpb25QYW5lbEluZm86OlBhbmVsVHlwZSwgY29u
c3QgV2ViQ29yZTo6RmxvYXRSZWN0JiBib3VuZGluZ0JveE9mUmVwbGFjZWRTdHJpbmcsIGNvbnN0
IFN0cmluZyYgcmVwbGFjZWRTdHJpbmcsIGNvbnN0IFN0cmluZyYgcmVwbGFjZW1lbnRTdHJpbmcs
IGNvbnN0IFZlY3RvcjxTdHJpbmc+JiBhbHRlcm5hdGl2ZVJlcGxhY2VtZW50U3RyaW5ncyk7Ci0g
ICAgdmlydHVhbCB2b2lkIGRpc21pc3NDb3JyZWN0aW9uUGFuZWwoV2ViQ29yZTo6UmVhc29uRm9y
RGlzbWlzc2luZ0NvcnJlY3Rpb25QYW5lbCk7Ci0gICAgdmlydHVhbCBTdHJpbmcgZGlzbWlzc0Nv
cnJlY3Rpb25QYW5lbFNvb24oV2ViQ29yZTo6UmVhc29uRm9yRGlzbWlzc2luZ0NvcnJlY3Rpb25Q
YW5lbCk7CisgICAgdmlydHVhbCB2b2lkIHNob3dDb3JyZWN0aW9uUGFuZWwoV2ViQ29yZTo6QWx0
ZXJuYXRpdmVUZXh0VHlwZSwgY29uc3QgV2ViQ29yZTo6RmxvYXRSZWN0JiBib3VuZGluZ0JveE9m
UmVwbGFjZWRTdHJpbmcsIGNvbnN0IFN0cmluZyYgcmVwbGFjZWRTdHJpbmcsIGNvbnN0IFN0cmlu
ZyYgcmVwbGFjZW1lbnRTdHJpbmcsIGNvbnN0IFZlY3RvcjxTdHJpbmc+JiBhbHRlcm5hdGl2ZVJl
cGxhY2VtZW50U3RyaW5ncyk7CisgICAgdmlydHVhbCB2b2lkIGRpc21pc3NDb3JyZWN0aW9uUGFu
ZWwoV2ViQ29yZTo6UmVhc29uRm9yRGlzbWlzc2luZ0FsdGVybmF0aXZlVGV4dCk7CisgICAgdmly
dHVhbCBTdHJpbmcgZGlzbWlzc0NvcnJlY3Rpb25QYW5lbFNvb24oV2ViQ29yZTo6UmVhc29uRm9y
RGlzbWlzc2luZ0FsdGVybmF0aXZlVGV4dCk7CiAgICAgdmlydHVhbCB2b2lkIHJlY29yZEF1dG9j
b3JyZWN0aW9uUmVzcG9uc2UoV2ViQ29yZTo6RWRpdG9yQ2xpZW50OjpBdXRvY29ycmVjdGlvblJl
c3BvbnNlVHlwZSwgY29uc3QgU3RyaW5nJiByZXBsYWNlZFN0cmluZywgY29uc3QgU3RyaW5nJiBy
ZXBsYWNlbWVudFN0cmluZyk7CiAKICAgICB2aXJ0dWFsIHZvaWQgcmVjb21tZW5kZWRTY3JvbGxi
YXJTdHlsZURpZENoYW5nZShpbnQzMl90IG5ld1N0eWxlKTsKSW5kZXg6IFNvdXJjZS9XZWJLaXQy
L1VJUHJvY2Vzcy9BUEkvbWFjL1BhZ2VDbGllbnRJbXBsLm1tCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvbWFjL1BhZ2VDbGllbnRJbXBsLm1tCShyZXZpc2lvbiAx
MTMwNDQpCisrKyBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL21hYy9QYWdlQ2xpZW50SW1w
bC5tbQkod29ya2luZyBjb3B5KQpAQCAtNDYzLDcgKzQ2Myw3IEBAIHZvaWQgUGFnZUNsaWVudElt
cGw6OmRpc21pc3NEaWN0aW9uYXJ5TG8KICNlbmRpZgogfQogCi12b2lkIFBhZ2VDbGllbnRJbXBs
OjpzaG93Q29ycmVjdGlvblBhbmVsKENvcnJlY3Rpb25QYW5lbEluZm86OlBhbmVsVHlwZSB0eXBl
LCBjb25zdCBGbG9hdFJlY3QmIGJvdW5kaW5nQm94T2ZSZXBsYWNlZFN0cmluZywgY29uc3QgU3Ry
aW5nJiByZXBsYWNlZFN0cmluZywgY29uc3QgU3RyaW5nJiByZXBsYWNlbWVudFN0cmluZywgY29u
c3QgVmVjdG9yPFN0cmluZz4mIGFsdGVybmF0aXZlUmVwbGFjZW1lbnRTdHJpbmdzKQordm9pZCBQ
YWdlQ2xpZW50SW1wbDo6c2hvd0NvcnJlY3Rpb25QYW5lbChBbHRlcm5hdGl2ZVRleHRUeXBlIHR5
cGUsIGNvbnN0IEZsb2F0UmVjdCYgYm91bmRpbmdCb3hPZlJlcGxhY2VkU3RyaW5nLCBjb25zdCBT
dHJpbmcmIHJlcGxhY2VkU3RyaW5nLCBjb25zdCBTdHJpbmcmIHJlcGxhY2VtZW50U3RyaW5nLCBj
b25zdCBWZWN0b3I8U3RyaW5nPiYgYWx0ZXJuYXRpdmVSZXBsYWNlbWVudFN0cmluZ3MpCiB7CiAj
aWYgIWRlZmluZWQoQlVJTERJTkdfT05fU05PV19MRU9QQVJEKQogICAgIGlmICghaXNWaWV3Vmlz
aWJsZSgpIHx8ICFpc1ZpZXdJbldpbmRvdygpKQpAQCAtNDcyLDE0ICs0NzIsMTQgQEAgdm9pZCBQ
YWdlQ2xpZW50SW1wbDo6c2hvd0NvcnJlY3Rpb25QYW5lbAogI2VuZGlmCiB9CiAKLXZvaWQgUGFn
ZUNsaWVudEltcGw6OmRpc21pc3NDb3JyZWN0aW9uUGFuZWwoUmVhc29uRm9yRGlzbWlzc2luZ0Nv
cnJlY3Rpb25QYW5lbCByZWFzb24pCit2b2lkIFBhZ2VDbGllbnRJbXBsOjpkaXNtaXNzQ29ycmVj
dGlvblBhbmVsKFJlYXNvbkZvckRpc21pc3NpbmdBbHRlcm5hdGl2ZVRleHQgcmVhc29uKQogewog
I2lmICFkZWZpbmVkKEJVSUxESU5HX09OX1NOT1dfTEVPUEFSRCkKICAgICBtX2NvcnJlY3Rpb25Q
YW5lbC5kaXNtaXNzKHJlYXNvbik7CiAjZW5kaWYKIH0KIAotU3RyaW5nIFBhZ2VDbGllbnRJbXBs
OjpkaXNtaXNzQ29ycmVjdGlvblBhbmVsU29vbihXZWJDb3JlOjpSZWFzb25Gb3JEaXNtaXNzaW5n
Q29ycmVjdGlvblBhbmVsIHJlYXNvbikKK1N0cmluZyBQYWdlQ2xpZW50SW1wbDo6ZGlzbWlzc0Nv
cnJlY3Rpb25QYW5lbFNvb24oV2ViQ29yZTo6UmVhc29uRm9yRGlzbWlzc2luZ0FsdGVybmF0aXZl
VGV4dCByZWFzb24pCiB7CiAjaWYgIWRlZmluZWQoQlVJTERJTkdfT05fU05PV19MRU9QQVJEKQog
ICAgIHJldHVybiBtX2NvcnJlY3Rpb25QYW5lbC5kaXNtaXNzKHJlYXNvbik7CkluZGV4OiBTb3Vy
Y2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL21hYy9XS1ZpZXcubW0KPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9tYWMvV0tWaWV3Lm1tCShyZXZpc2lvbiAxMTMwNDQp
CisrKyBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL21hYy9XS1ZpZXcubW0JKHdvcmtpbmcg
Y29weSkKQEAgLTI4NTIsNyArMjg1Miw3IEBAIC0gKE5TSW50ZWdlcilzcGVsbENoZWNrZXJEb2N1
bWVudFRhZwogCiAtICh2b2lkKWhhbmRsZUNvcnJlY3Rpb25QYW5lbFJlc3VsdDooTlNTdHJpbmcq
KXJlc3VsdAogewotICAgIF9kYXRhLT5fcGFnZS0+aGFuZGxlQ29ycmVjdGlvblBhbmVsUmVzdWx0
KHJlc3VsdCk7CisgICAgX2RhdGEtPl9wYWdlLT5oYW5kbGVBbHRlcm5hdGl2ZVRleHRVSVJlc3Vs
dChyZXN1bHQpOwogfQogCiBAZW5kCkluZGV4OiBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvbWFj
L0NvcnJlY3Rpb25QYW5lbC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vz
cy9tYWMvQ29ycmVjdGlvblBhbmVsLmgJKHJldmlzaW9uIDExMzA0NCkKKysrIFNvdXJjZS9XZWJL
aXQyL1VJUHJvY2Vzcy9tYWMvQ29ycmVjdGlvblBhbmVsLmgJKHdvcmtpbmcgY29weSkKQEAgLTI4
LDcgKzI4LDcgQEAKIAogI2lmICFkZWZpbmVkKEJVSUxESU5HX09OX1NOT1dfTEVPUEFSRCkKICNp
bXBvcnQgPEFwcEtpdC9OU1NwZWxsQ2hlY2tlci5oPgotI2ltcG9ydCA8V2ViQ29yZS9TcGVsbGlu
Z0NvcnJlY3Rpb25Db250cm9sbGVyLmg+CisjaW1wb3J0IDxXZWJDb3JlL0FsdGVybmF0aXZlVGV4
dENvbnRyb2xsZXIuaD4KICNpbXBvcnQgPHd0Zi9SZXRhaW5QdHIuaD4KIAogQGNsYXNzIFdLVmll
dzsKQEAgLTM5LDE3ICszOSwxNyBAQCBjbGFzcyBDb3JyZWN0aW9uUGFuZWwgewogcHVibGljOgog
ICAgIENvcnJlY3Rpb25QYW5lbCgpOwogICAgIH5Db3JyZWN0aW9uUGFuZWwoKTsKLSAgICB2b2lk
IHNob3coV0tWaWV3KiwgV2ViQ29yZTo6Q29ycmVjdGlvblBhbmVsSW5mbzo6UGFuZWxUeXBlLCBj
b25zdCBXZWJDb3JlOjpGbG9hdFJlY3QmIGJvdW5kaW5nQm94T2ZSZXBsYWNlZFN0cmluZywgY29u
c3QgU3RyaW5nJiByZXBsYWNlZFN0cmluZywgY29uc3QgU3RyaW5nJiByZXBsYWNlbWVudFN0cmlu
ZywgY29uc3QgVmVjdG9yPFN0cmluZz4mIGFsdGVybmF0aXZlUmVwbGFjZW1lbnRTdHJpbmdzKTsK
LSAgICBTdHJpbmcgZGlzbWlzcyhXZWJDb3JlOjpSZWFzb25Gb3JEaXNtaXNzaW5nQ29ycmVjdGlv
blBhbmVsKTsKKyAgICB2b2lkIHNob3coV0tWaWV3KiwgV2ViQ29yZTo6QWx0ZXJuYXRpdmVUZXh0
VHlwZSwgY29uc3QgV2ViQ29yZTo6RmxvYXRSZWN0JiBib3VuZGluZ0JveE9mUmVwbGFjZWRTdHJp
bmcsIGNvbnN0IFN0cmluZyYgcmVwbGFjZWRTdHJpbmcsIGNvbnN0IFN0cmluZyYgcmVwbGFjZW1l
bnRTdHJpbmcsIGNvbnN0IFZlY3RvcjxTdHJpbmc+JiBhbHRlcm5hdGl2ZVJlcGxhY2VtZW50U3Ry
aW5ncyk7CisgICAgU3RyaW5nIGRpc21pc3MoV2ViQ29yZTo6UmVhc29uRm9yRGlzbWlzc2luZ0Fs
dGVybmF0aXZlVGV4dCk7CiAgICAgc3RhdGljIHZvaWQgcmVjb3JkQXV0b2NvcnJlY3Rpb25SZXNw
b25zZShXS1ZpZXcqLCBOU0NvcnJlY3Rpb25SZXNwb25zZSwgY29uc3QgU3RyaW5nJiByZXBsYWNl
ZFN0cmluZywgY29uc3QgU3RyaW5nJiByZXBsYWNlbWVudFN0cmluZyk7CiAKIHByaXZhdGU6CiAg
ICAgYm9vbCBpc1Nob3dpbmcoKSBjb25zdCB7IHJldHVybiBtX3ZpZXc7IH0KLSAgICBTdHJpbmcg
ZGlzbWlzc0ludGVybmFsKFdlYkNvcmU6OlJlYXNvbkZvckRpc21pc3NpbmdDb3JyZWN0aW9uUGFu
ZWwsIGJvb2wgZGlzbWlzc2luZ0V4dGVybmFsbHkpOworICAgIFN0cmluZyBkaXNtaXNzSW50ZXJu
YWwoV2ViQ29yZTo6UmVhc29uRm9yRGlzbWlzc2luZ0FsdGVybmF0aXZlVGV4dCwgYm9vbCBkaXNt
aXNzaW5nRXh0ZXJuYWxseSk7CiAgICAgdm9pZCBoYW5kbGVBY2NlcHRlZFJlcGxhY2VtZW50KE5T
U3RyaW5nKiBhY2NlcHRlZFJlcGxhY2VtZW50LCBOU1N0cmluZyogcmVwbGFjZWQsIE5TU3RyaW5n
KiBwcm9wb3NlZFJlcGxhY2VtZW50LCBOU0NvcnJlY3Rpb25JbmRpY2F0b3JUeXBlKTsKIAogICAg
IGJvb2wgbV93YXNEaXNtaXNzZWRFeHRlcm5hbGx5OwotICAgIFdlYkNvcmU6OlJlYXNvbkZvckRp
c21pc3NpbmdDb3JyZWN0aW9uUGFuZWwgbV9yZWFzb25Gb3JEaXNtaXNzaW5nOworICAgIFdlYkNv
cmU6OlJlYXNvbkZvckRpc21pc3NpbmdBbHRlcm5hdGl2ZVRleHQgbV9yZWFzb25Gb3JEaXNtaXNz
aW5nOwogICAgIFJldGFpblB0cjxXS1ZpZXc+IG1fdmlldzsKICAgICBSZXRhaW5QdHI8TlNTdHJp
bmc+IG1fcmVzdWx0Rm9yRGlzbWlzc2FsOwogfTsKSW5kZXg6IFNvdXJjZS9XZWJLaXQyL1VJUHJv
Y2Vzcy9tYWMvQ29ycmVjdGlvblBhbmVsLm1tCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQy
L1VJUHJvY2Vzcy9tYWMvQ29ycmVjdGlvblBhbmVsLm1tCShyZXZpc2lvbiAxMTMwNDQpCisrKyBT
b3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvbWFjL0NvcnJlY3Rpb25QYW5lbC5tbQkod29ya2luZyBj
b3B5KQpAQCAtMzMsMTQgKzMzLDE0IEBACiAKIHVzaW5nIG5hbWVzcGFjZSBXZWJDb3JlOwogCi1z
dGF0aWMgaW5saW5lIE5TQ29ycmVjdGlvbkluZGljYXRvclR5cGUgY29ycmVjdGlvbkluZGljYXRv
clR5cGUoQ29ycmVjdGlvblBhbmVsSW5mbzo6UGFuZWxUeXBlIHBhbmVsVHlwZSkKK3N0YXRpYyBp
bmxpbmUgTlNDb3JyZWN0aW9uSW5kaWNhdG9yVHlwZSBjb3JyZWN0aW9uSW5kaWNhdG9yVHlwZShB
bHRlcm5hdGl2ZVRleHRUeXBlIGFsdGVybmF0aXZlVGV4dFR5cGUpCiB7Ci0gICAgc3dpdGNoIChw
YW5lbFR5cGUpIHsKLSAgICBjYXNlIENvcnJlY3Rpb25QYW5lbEluZm86OlBhbmVsVHlwZUNvcnJl
Y3Rpb246CisgICAgc3dpdGNoIChhbHRlcm5hdGl2ZVRleHRUeXBlKSB7CisgICAgY2FzZSBBbHRl
cm5hdGl2ZVRleHRUeXBlQ29ycmVjdGlvbjoKICAgICAgICAgcmV0dXJuIE5TQ29ycmVjdGlvbklu
ZGljYXRvclR5cGVEZWZhdWx0OwotICAgIGNhc2UgQ29ycmVjdGlvblBhbmVsSW5mbzo6UGFuZWxU
eXBlUmV2ZXJzaW9uOgorICAgIGNhc2UgQWx0ZXJuYXRpdmVUZXh0VHlwZVJldmVyc2lvbjoKICAg
ICAgICAgcmV0dXJuIE5TQ29ycmVjdGlvbkluZGljYXRvclR5cGVSZXZlcnNpb247Ci0gICAgY2Fz
ZSBDb3JyZWN0aW9uUGFuZWxJbmZvOjpQYW5lbFR5cGVTcGVsbGluZ1N1Z2dlc3Rpb25zOgorICAg
IGNhc2UgQWx0ZXJuYXRpdmVUZXh0VHlwZVNwZWxsaW5nU3VnZ2VzdGlvbnM6CiAgICAgICAgIHJl
dHVybiBOU0NvcnJlY3Rpb25JbmRpY2F0b3JUeXBlR3Vlc3NlczsKICAgICB9CiAgICAgQVNTRVJU
X05PVF9SRUFDSEVEKCk7CkBAIC01MSwxOCArNTEsMTggQEAgbmFtZXNwYWNlIFdlYktpdCB7CiAK
IENvcnJlY3Rpb25QYW5lbDo6Q29ycmVjdGlvblBhbmVsKCkKICAgICA6IG1fd2FzRGlzbWlzc2Vk
RXh0ZXJuYWxseShmYWxzZSkKLSAgICAsIG1fcmVhc29uRm9yRGlzbWlzc2luZyhSZWFzb25Gb3JE
aXNtaXNzaW5nQ29ycmVjdGlvblBhbmVsSWdub3JlZCkKKyAgICAsIG1fcmVhc29uRm9yRGlzbWlz
c2luZyhSZWFzb25Gb3JEaXNtaXNzaW5nQWx0ZXJuYXRpdmVUZXh0SWdub3JlZCkKIHsKIH0KIAog
Q29ycmVjdGlvblBhbmVsOjp+Q29ycmVjdGlvblBhbmVsKCkKIHsKLSAgICBkaXNtaXNzSW50ZXJu
YWwoUmVhc29uRm9yRGlzbWlzc2luZ0NvcnJlY3Rpb25QYW5lbElnbm9yZWQsIGZhbHNlKTsKKyAg
ICBkaXNtaXNzSW50ZXJuYWwoUmVhc29uRm9yRGlzbWlzc2luZ0FsdGVybmF0aXZlVGV4dElnbm9y
ZWQsIGZhbHNlKTsKIH0KIAotdm9pZCBDb3JyZWN0aW9uUGFuZWw6OnNob3coV0tWaWV3KiB2aWV3
LCBDb3JyZWN0aW9uUGFuZWxJbmZvOjpQYW5lbFR5cGUgdHlwZSwgY29uc3QgRmxvYXRSZWN0JiBi
b3VuZGluZ0JveE9mUmVwbGFjZWRTdHJpbmcsIGNvbnN0IFN0cmluZyYgcmVwbGFjZWRTdHJpbmcs
IGNvbnN0IFN0cmluZyYgcmVwbGFjZW1lbnRTdHJpbmcsIGNvbnN0IFZlY3RvcjxTdHJpbmc+JiBh
bHRlcm5hdGl2ZVJlcGxhY2VtZW50U3RyaW5ncykKK3ZvaWQgQ29ycmVjdGlvblBhbmVsOjpzaG93
KFdLVmlldyogdmlldywgQWx0ZXJuYXRpdmVUZXh0VHlwZSB0eXBlLCBjb25zdCBGbG9hdFJlY3Qm
IGJvdW5kaW5nQm94T2ZSZXBsYWNlZFN0cmluZywgY29uc3QgU3RyaW5nJiByZXBsYWNlZFN0cmlu
ZywgY29uc3QgU3RyaW5nJiByZXBsYWNlbWVudFN0cmluZywgY29uc3QgVmVjdG9yPFN0cmluZz4m
IGFsdGVybmF0aXZlUmVwbGFjZW1lbnRTdHJpbmdzKQogewotICAgIGRpc21pc3NJbnRlcm5hbChS
ZWFzb25Gb3JEaXNtaXNzaW5nQ29ycmVjdGlvblBhbmVsSWdub3JlZCwgZmFsc2UpOworICAgIGRp
c21pc3NJbnRlcm5hbChSZWFzb25Gb3JEaXNtaXNzaW5nQWx0ZXJuYXRpdmVUZXh0SWdub3JlZCwg
ZmFsc2UpOwogICAgIAogICAgIGlmICghdmlldykKICAgICAgICAgcmV0dXJuOwpAQCAtODYsMTIg
Kzg2LDEyIEBAIHZvaWQgQ29ycmVjdGlvblBhbmVsOjpzaG93KFdLVmlldyogdmlldywKICAgICB9
XTsKIH0KIAotU3RyaW5nIENvcnJlY3Rpb25QYW5lbDo6ZGlzbWlzcyhSZWFzb25Gb3JEaXNtaXNz
aW5nQ29ycmVjdGlvblBhbmVsIHJlYXNvbikKK1N0cmluZyBDb3JyZWN0aW9uUGFuZWw6OmRpc21p
c3MoUmVhc29uRm9yRGlzbWlzc2luZ0FsdGVybmF0aXZlVGV4dCByZWFzb24pCiB7CiAgICAgcmV0
dXJuIGRpc21pc3NJbnRlcm5hbChyZWFzb24sIHRydWUpOwogfQogCi1TdHJpbmcgQ29ycmVjdGlv
blBhbmVsOjpkaXNtaXNzSW50ZXJuYWwoUmVhc29uRm9yRGlzbWlzc2luZ0NvcnJlY3Rpb25QYW5l
bCByZWFzb24sIGJvb2wgZGlzbWlzc2luZ0V4dGVybmFsbHkpCitTdHJpbmcgQ29ycmVjdGlvblBh
bmVsOjpkaXNtaXNzSW50ZXJuYWwoUmVhc29uRm9yRGlzbWlzc2luZ0FsdGVybmF0aXZlVGV4dCBy
ZWFzb24sIGJvb2wgZGlzbWlzc2luZ0V4dGVybmFsbHkpCiB7CiAgICAgaWYgKCFpc1Nob3dpbmco
KSkKICAgICAgICAgcmV0dXJuIFN0cmluZygpOwpAQCAtMTIxLDcgKzEyMSw3IEBAIHZvaWQgQ29y
cmVjdGlvblBhbmVsOjpoYW5kbGVBY2NlcHRlZFJlcGwKICAgICAgICAgaWYgKGFjY2VwdGVkUmVw
bGFjZW1lbnQpCiAgICAgICAgICAgICBbc3BlbGxDaGVja2VyIHJlY29yZFJlc3BvbnNlOk5TQ29y
cmVjdGlvblJlc3BvbnNlQWNjZXB0ZWQgdG9Db3JyZWN0aW9uOmFjY2VwdGVkUmVwbGFjZW1lbnQg
Zm9yV29yZDpyZXBsYWNlZCBsYW5ndWFnZTpuaWwgaW5TcGVsbERvY3VtZW50V2l0aFRhZzpkb2N1
bWVudFRhZ107CiAgICAgICAgIGVsc2UgewotICAgICAgICAgICAgaWYgKCFtX3dhc0Rpc21pc3Nl
ZEV4dGVybmFsbHkgfHwgbV9yZWFzb25Gb3JEaXNtaXNzaW5nID09IFJlYXNvbkZvckRpc21pc3Np
bmdDb3JyZWN0aW9uUGFuZWxDYW5jZWxsZWQpCisgICAgICAgICAgICBpZiAoIW1fd2FzRGlzbWlz
c2VkRXh0ZXJuYWxseSB8fCBtX3JlYXNvbkZvckRpc21pc3NpbmcgPT0gUmVhc29uRm9yRGlzbWlz
c2luZ0FsdGVybmF0aXZlVGV4dENhbmNlbGxlZCkKICAgICAgICAgICAgICAgICBbc3BlbGxDaGVj
a2VyIHJlY29yZFJlc3BvbnNlOk5TQ29ycmVjdGlvblJlc3BvbnNlUmVqZWN0ZWQgdG9Db3JyZWN0
aW9uOnByb3Bvc2VkUmVwbGFjZW1lbnQgZm9yV29yZDpyZXBsYWNlZCBsYW5ndWFnZTpuaWwgaW5T
cGVsbERvY3VtZW50V2l0aFRhZzpkb2N1bWVudFRhZ107CiAgICAgICAgICAgICBlbHNlCiAgICAg
ICAgICAgICAgICAgW3NwZWxsQ2hlY2tlciByZWNvcmRSZXNwb25zZTpOU0NvcnJlY3Rpb25SZXNw
b25zZUlnbm9yZWQgdG9Db3JyZWN0aW9uOnByb3Bvc2VkUmVwbGFjZW1lbnQgZm9yV29yZDpyZXBs
YWNlZCBsYW5ndWFnZTpuaWwgaW5TcGVsbERvY3VtZW50V2l0aFRhZzpkb2N1bWVudFRhZ107Cklu
ZGV4OiBTb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYkNvcmVTdXBwb3J0L1dlYkVkaXRvckNs
aWVudC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViQ29yZVN1
cHBvcnQvV2ViRWRpdG9yQ2xpZW50LmgJKHJldmlzaW9uIDExMzA0NCkKKysrIFNvdXJjZS9XZWJL
aXQyL1dlYlByb2Nlc3MvV2ViQ29yZVN1cHBvcnQvV2ViRWRpdG9yQ2xpZW50LmgJKHdvcmtpbmcg
Y29weSkKQEAgLTE0Myw5ICsxNDMsOSBAQCBwcml2YXRlOgogICAgIHZpcnR1YWwgdm9pZCBzZXRJ
bnB1dE1ldGhvZFN0YXRlKGJvb2wgZW5hYmxlZCkgT1ZFUlJJREU7CiAgICAgdmlydHVhbCB2b2lk
IHJlcXVlc3RDaGVja2luZ09mU3RyaW5nKFdlYkNvcmU6OlNwZWxsQ2hlY2tlciosIGNvbnN0IFdl
YkNvcmU6OlRleHRDaGVja2luZ1JlcXVlc3QmKSBPVkVSUklERTsKICNpZiBQTEFURk9STShNQUMp
ICYmICFkZWZpbmVkKEJVSUxESU5HX09OX1NOT1dfTEVPUEFSRCkKLSAgICB2aXJ0dWFsIHZvaWQg
c2hvd0NvcnJlY3Rpb25QYW5lbChXZWJDb3JlOjpDb3JyZWN0aW9uUGFuZWxJbmZvOjpQYW5lbFR5
cGUsIGNvbnN0IFdlYkNvcmU6OkZsb2F0UmVjdCYgYm91bmRpbmdCb3hPZlJlcGxhY2VkU3RyaW5n
LCBjb25zdCBTdHJpbmcmIHJlcGxhY2VkU3RyaW5nLCBjb25zdCBTdHJpbmcmIHJlcGxhY2VtZW50
U3RyaW5nLCBjb25zdCBWZWN0b3I8U3RyaW5nPiYgYWx0ZXJuYXRpdmVSZXBsYWNlbWVudFN0cmlu
Z3MpIE9WRVJSSURFOwotICAgIHZpcnR1YWwgdm9pZCBkaXNtaXNzQ29ycmVjdGlvblBhbmVsKFdl
YkNvcmU6OlJlYXNvbkZvckRpc21pc3NpbmdDb3JyZWN0aW9uUGFuZWwpIE9WRVJSSURFOwotICAg
IHZpcnR1YWwgU3RyaW5nIGRpc21pc3NDb3JyZWN0aW9uUGFuZWxTb29uKFdlYkNvcmU6OlJlYXNv
bkZvckRpc21pc3NpbmdDb3JyZWN0aW9uUGFuZWwpIE9WRVJSSURFOworICAgIHZpcnR1YWwgdm9p
ZCBzaG93Q29ycmVjdGlvblBhbmVsKFdlYkNvcmU6OkFsdGVybmF0aXZlVGV4dFR5cGUsIGNvbnN0
IFdlYkNvcmU6OkZsb2F0UmVjdCYgYm91bmRpbmdCb3hPZlJlcGxhY2VkU3RyaW5nLCBjb25zdCBT
dHJpbmcmIHJlcGxhY2VkU3RyaW5nLCBjb25zdCBTdHJpbmcmIHJlcGxhY2VtZW50U3RyaW5nLCBj
b25zdCBWZWN0b3I8U3RyaW5nPiYgYWx0ZXJuYXRpdmVSZXBsYWNlbWVudFN0cmluZ3MpIE9WRVJS
SURFOworICAgIHZpcnR1YWwgdm9pZCBkaXNtaXNzQ29ycmVjdGlvblBhbmVsKFdlYkNvcmU6OlJl
YXNvbkZvckRpc21pc3NpbmdBbHRlcm5hdGl2ZVRleHQpIE9WRVJSSURFOworICAgIHZpcnR1YWwg
U3RyaW5nIGRpc21pc3NDb3JyZWN0aW9uUGFuZWxTb29uKFdlYkNvcmU6OlJlYXNvbkZvckRpc21p
c3NpbmdBbHRlcm5hdGl2ZVRleHQpIE9WRVJSSURFOwogICAgIHZpcnR1YWwgdm9pZCByZWNvcmRB
dXRvY29ycmVjdGlvblJlc3BvbnNlKEF1dG9jb3JyZWN0aW9uUmVzcG9uc2VUeXBlLCBjb25zdCBT
dHJpbmcmIHJlcGxhY2VkU3RyaW5nLCBjb25zdCBTdHJpbmcmIHJlcGxhY2VtZW50U3RyaW5nKSBP
VkVSUklERTsKICNlbmRpZgogI2lmIFBMQVRGT1JNKEdUSykKSW5kZXg6IFNvdXJjZS9XZWJLaXQy
L1dlYlByb2Nlc3MvV2ViQ29yZVN1cHBvcnQvbWFjL1dlYkVkaXRvckNsaWVudE1hYy5tbQo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYkNvcmVTdXBwb3J0L21hYy9X
ZWJFZGl0b3JDbGllbnRNYWMubW0JKHJldmlzaW9uIDExMzA0NCkKKysrIFNvdXJjZS9XZWJLaXQy
L1dlYlByb2Nlc3MvV2ViQ29yZVN1cHBvcnQvbWFjL1dlYkVkaXRvckNsaWVudE1hYy5tbQkod29y
a2luZyBjb3B5KQpAQCAtMjM5LDE3ICsyMzksMTcgQEAgdm9pZCBXZWJFZGl0b3JDbGllbnQ6OmNo
ZWNrVGV4dE9mUGFyYWdyYQogfQogCiAjaWYgIWRlZmluZWQoQlVJTERJTkdfT05fU05PV19MRU9Q
QVJEKQotdm9pZCBXZWJFZGl0b3JDbGllbnQ6OnNob3dDb3JyZWN0aW9uUGFuZWwoV2ViQ29yZTo6
Q29ycmVjdGlvblBhbmVsSW5mbzo6UGFuZWxUeXBlIHR5cGUsIGNvbnN0IFdlYkNvcmU6OkZsb2F0
UmVjdCYgYm91bmRpbmdCb3hPZlJlcGxhY2VkU3RyaW5nLCBjb25zdCBTdHJpbmcmIHJlcGxhY2Vk
U3RyaW5nLCBjb25zdCBTdHJpbmcmIHJlcGxhY2VtZW50U3RyaW5nLCBjb25zdCBWZWN0b3I8U3Ry
aW5nPiYgYWx0ZXJuYXRpdmVSZXBsYWNlbWVudFN0cmluZ3MpCit2b2lkIFdlYkVkaXRvckNsaWVu
dDo6c2hvd0NvcnJlY3Rpb25QYW5lbChXZWJDb3JlOjpBbHRlcm5hdGl2ZVRleHRUeXBlIHR5cGUs
IGNvbnN0IFdlYkNvcmU6OkZsb2F0UmVjdCYgYm91bmRpbmdCb3hPZlJlcGxhY2VkU3RyaW5nLCBj
b25zdCBTdHJpbmcmIHJlcGxhY2VkU3RyaW5nLCBjb25zdCBTdHJpbmcmIHJlcGxhY2VtZW50U3Ry
aW5nLCBjb25zdCBWZWN0b3I8U3RyaW5nPiYgYWx0ZXJuYXRpdmVSZXBsYWNlbWVudFN0cmluZ3Mp
CiB7CiAgICAgbV9wYWdlLT5zZW5kKE1lc3NhZ2VzOjpXZWJQYWdlUHJveHk6OlNob3dDb3JyZWN0
aW9uUGFuZWwodHlwZSwgYm91bmRpbmdCb3hPZlJlcGxhY2VkU3RyaW5nLCByZXBsYWNlZFN0cmlu
ZywgcmVwbGFjZW1lbnRTdHJpbmcsIGFsdGVybmF0aXZlUmVwbGFjZW1lbnRTdHJpbmdzKSk7CiB9
CiAKLXZvaWQgV2ViRWRpdG9yQ2xpZW50OjpkaXNtaXNzQ29ycmVjdGlvblBhbmVsKFdlYkNvcmU6
OlJlYXNvbkZvckRpc21pc3NpbmdDb3JyZWN0aW9uUGFuZWwgcmVhc29uKQordm9pZCBXZWJFZGl0
b3JDbGllbnQ6OmRpc21pc3NDb3JyZWN0aW9uUGFuZWwoV2ViQ29yZTo6UmVhc29uRm9yRGlzbWlz
c2luZ0FsdGVybmF0aXZlVGV4dCByZWFzb24pCiB7CiAgICAgbV9wYWdlLT5zZW5kKE1lc3NhZ2Vz
OjpXZWJQYWdlUHJveHk6OkRpc21pc3NDb3JyZWN0aW9uUGFuZWwocmVhc29uKSk7CiB9CiAKLVN0
cmluZyBXZWJFZGl0b3JDbGllbnQ6OmRpc21pc3NDb3JyZWN0aW9uUGFuZWxTb29uKFdlYkNvcmU6
OlJlYXNvbkZvckRpc21pc3NpbmdDb3JyZWN0aW9uUGFuZWwgcmVhc29uKQorU3RyaW5nIFdlYkVk
aXRvckNsaWVudDo6ZGlzbWlzc0NvcnJlY3Rpb25QYW5lbFNvb24oV2ViQ29yZTo6UmVhc29uRm9y
RGlzbWlzc2luZ0FsdGVybmF0aXZlVGV4dCByZWFzb24pCiB7CiAgICAgU3RyaW5nIHJlc3VsdDsK
ICAgICBtX3BhZ2UtPnNlbmRTeW5jKE1lc3NhZ2VzOjpXZWJQYWdlUHJveHk6OkRpc21pc3NDb3Jy
ZWN0aW9uUGFuZWxTb29uKHJlYXNvbiksIE1lc3NhZ2VzOjpXZWJQYWdlUHJveHk6OkRpc21pc3ND
b3JyZWN0aW9uUGFuZWxTb29uOjpSZXBseShyZXN1bHQpKTsKSW5kZXg6IFNvdXJjZS9XZWJLaXQy
L1dlYlByb2Nlc3MvV2ViUGFnZS9XZWJQYWdlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
S2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvV2ViUGFnZS5jcHAJKHJldmlzaW9uIDExMzA0NCkKKysr
IFNvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9XZWJQYWdlLmNwcAkod29ya2luZyBj
b3B5KQpAQCAtMzAyMCwxMiArMzAyMCwxMiBAQCBib29sIFdlYlBhZ2U6OmNhbkhhbmRsZVJlcXVl
c3QoY29uc3QgV2ViCiB9CiAKICNpZiBQTEFURk9STShNQUMpICYmICFkZWZpbmVkKEJVSUxESU5H
X09OX1NOT1dfTEVPUEFSRCkKLXZvaWQgV2ViUGFnZTo6aGFuZGxlQ29ycmVjdGlvblBhbmVsUmVz
dWx0KGNvbnN0IFN0cmluZyYgcmVzdWx0KQordm9pZCBXZWJQYWdlOjpoYW5kbGVBbHRlcm5hdGl2
ZVRleHRVSVJlc3VsdChjb25zdCBTdHJpbmcmIHJlc3VsdCkKIHsKICAgICBGcmFtZSogZnJhbWUg
PSBtX3BhZ2UtPmZvY3VzQ29udHJvbGxlcigpLT5mb2N1c2VkT3JNYWluRnJhbWUoKTsKICAgICBp
ZiAoIWZyYW1lKQogICAgICAgICByZXR1cm47Ci0gICAgZnJhbWUtPmVkaXRvcigpLT5oYW5kbGVD
b3JyZWN0aW9uUGFuZWxSZXN1bHQocmVzdWx0KTsKKyAgICBmcmFtZS0+ZWRpdG9yKCktPmhhbmRs
ZUFsdGVybmF0aXZlVGV4dFVJUmVzdWx0KHJlc3VsdCk7CiB9CiAjZW5kaWYKIApJbmRleDogU291
cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL1dlYlBhZ2UuaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvV2ViUGFnZS5oCShyZXZpc2lvbiAxMTMw
NDQpCisrKyBTb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvV2ViUGFnZS5oCSh3b3Jr
aW5nIGNvcHkpCkBAIC00ODcsNyArNDg3LDcgQEAgcHVibGljOgogICAgIHZvaWQgdW5tYXJrQWxs
QmFkR3JhbW1hcigpOwogCiAjaWYgUExBVEZPUk0oTUFDKSAmJiAhZGVmaW5lZChCVUlMRElOR19P
Tl9TTk9XX0xFT1BBUkQpCi0gICAgdm9pZCBoYW5kbGVDb3JyZWN0aW9uUGFuZWxSZXN1bHQoY29u
c3QgU3RyaW5nJik7CisgICAgdm9pZCBoYW5kbGVBbHRlcm5hdGl2ZVRleHRVSVJlc3VsdChjb25z
dCBTdHJpbmcmKTsKICNlbmRpZgogCiAgICAgLy8gRm9yIHRlc3RpbmcgcHVycG9zZS4KSW5kZXg6
IFNvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9XZWJQYWdlLm1lc3NhZ2VzLmluCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9XZWJQYWdlLm1l
c3NhZ2VzLmluCShyZXZpc2lvbiAxMTMwNDQpCisrKyBTb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNz
L1dlYlBhZ2UvV2ViUGFnZS5tZXNzYWdlcy5pbgkod29ya2luZyBjb3B5KQpAQCAtMjU4LDYgKzI1
OCw2IEBAIG1lc3NhZ2VzIC0+IFdlYlBhZ2UgewogI2VuZGlmCiAKICNpZiBQTEFURk9STShNQUMp
ICYmICFkZWZpbmVkKEJVSUxESU5HX09OX1NOT1dfTEVPUEFSRCkKLSAgICBIYW5kbGVDb3JyZWN0
aW9uUGFuZWxSZXN1bHQoU3RyaW5nIHJlc3VsdCkKKyAgICBIYW5kbGVBbHRlcm5hdGl2ZVRleHRV
SVJlc3VsdChTdHJpbmcgcmVzdWx0KQogI2VuZGlmCiB9CkluZGV4OiBTb3VyY2UvV2ViS2l0L21h
Yy9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9tYWMvQ2hhbmdlTG9nCShy
ZXZpc2lvbiAxMTMwNDQpCisrKyBTb3VyY2UvV2ViS2l0L21hYy9DaGFuZ2VMb2cJKHdvcmtpbmcg
Y29weSkKQEAgLTEsMyArMSwzMSBAQAorMjAxMi0wNC0wMiAgSmlhIFB1ICA8anB1QGFwcGxlLmNv
bT4KKworICAgICAgICBSZW5hbWUgU3BlbGxpbmdDb3JyZWN0aW9uQ29udHJvbGxlciB0byBBbHRl
cm5hdGl2ZVRleHRDb250cm9sbGVyLgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9z
aG93X2J1Zy5jZ2k/aWQ9ODI5NDIKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMh
KS4KKworICAgICAgICBUaGVzZSBjaGFuZ2VzIGFyZSBzaW1wbHkgYWRvcHRpbmcgbmV3IGNsYXNz
IG5hbWVzLgorCisgICAgICAgICogV2ViQ29yZVN1cHBvcnQvQ29ycmVjdGlvblBhbmVsLmg6Cisg
ICAgICAgIChDb3JyZWN0aW9uUGFuZWwpOgorICAgICAgICAqIFdlYkNvcmVTdXBwb3J0L0NvcnJl
Y3Rpb25QYW5lbC5tbToKKyAgICAgICAgKGNvcnJlY3Rpb25JbmRpY2F0b3JUeXBlKToKKyAgICAg
ICAgKENvcnJlY3Rpb25QYW5lbDo6Q29ycmVjdGlvblBhbmVsKToKKyAgICAgICAgKENvcnJlY3Rp
b25QYW5lbDo6fkNvcnJlY3Rpb25QYW5lbCk6CisgICAgICAgIChDb3JyZWN0aW9uUGFuZWw6OnNo
b3cpOgorICAgICAgICAoQ29ycmVjdGlvblBhbmVsOjpkaXNtaXNzKToKKyAgICAgICAgKENvcnJl
Y3Rpb25QYW5lbDo6ZGlzbWlzc0ludGVybmFsKToKKyAgICAgICAgKENvcnJlY3Rpb25QYW5lbDo6
aGFuZGxlQWNjZXB0ZWRSZXBsYWNlbWVudCk6CisgICAgICAgICogV2ViQ29yZVN1cHBvcnQvV2Vi
RWRpdG9yQ2xpZW50Lmg6CisgICAgICAgICogV2ViQ29yZVN1cHBvcnQvV2ViRWRpdG9yQ2xpZW50
Lm1tOgorICAgICAgICAoV2ViRWRpdG9yQ2xpZW50Ojp+V2ViRWRpdG9yQ2xpZW50KToKKyAgICAg
ICAgKFdlYkVkaXRvckNsaWVudDo6c2hvd0NvcnJlY3Rpb25QYW5lbCk6CisgICAgICAgIChXZWJF
ZGl0b3JDbGllbnQ6OmRpc21pc3NDb3JyZWN0aW9uUGFuZWwpOgorICAgICAgICAoV2ViRWRpdG9y
Q2xpZW50OjpkaXNtaXNzQ29ycmVjdGlvblBhbmVsU29vbik6CisgICAgICAgICogV2ViVmlldy9X
ZWJWaWV3Lm1tOgorICAgICAgICAoLVtXZWJWaWV3IGhhbmRsZUNvcnJlY3Rpb25QYW5lbFJlc3Vs
dDpdKToKKwogMjAxMi0wNC0wMSAgSm9uIExlZSAgPGpvbmxlZUBhcHBsZS5jb20+CiAKICAgICAg
ICAgUmVuYW1lIG5vdGlmaWNhdGlvbiBwcm9wZXJ0aWVzIGFuZCBmdW5jdGlvbnMKSW5kZXg6IFNv
dXJjZS9XZWJLaXQvbWFjL1dlYkNvcmVTdXBwb3J0L0NvcnJlY3Rpb25QYW5lbC5oCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9XZWJLaXQvbWFjL1dlYkNvcmVTdXBwb3J0L0NvcnJlY3Rpb25QYW5lbC5o
CShyZXZpc2lvbiAxMTMwNDQpCisrKyBTb3VyY2UvV2ViS2l0L21hYy9XZWJDb3JlU3VwcG9ydC9D
b3JyZWN0aW9uUGFuZWwuaAkod29ya2luZyBjb3B5KQpAQCAtMjgsNyArMjgsNyBAQAogCiAjaWYg
IWRlZmluZWQoQlVJTERJTkdfT05fTEVPUEFSRCkgJiYgIWRlZmluZWQoQlVJTERJTkdfT05fU05P
V19MRU9QQVJEKQogI2ltcG9ydCA8QXBwS2l0L05TU3BlbGxDaGVja2VyLmg+Ci0jaW1wb3J0IDxX
ZWJDb3JlL1NwZWxsaW5nQ29ycmVjdGlvbkNvbnRyb2xsZXIuaD4KKyNpbXBvcnQgPFdlYkNvcmUv
QWx0ZXJuYXRpdmVUZXh0Q29udHJvbGxlci5oPgogI2ltcG9ydCA8d3RmL1JldGFpblB0ci5oPgog
CiBAY2xhc3MgV2ViVmlldzsKQEAgLTM4LDE3ICszOCwxNyBAQCBjbGFzcyBDb3JyZWN0aW9uUGFu
ZWwgewogcHVibGljOgogICAgIENvcnJlY3Rpb25QYW5lbCgpOwogICAgIH5Db3JyZWN0aW9uUGFu
ZWwoKTsKLSAgICB2b2lkIHNob3coV2ViVmlldyosIFdlYkNvcmU6OkNvcnJlY3Rpb25QYW5lbElu
Zm86OlBhbmVsVHlwZSwgY29uc3QgV2ViQ29yZTo6RmxvYXRSZWN0JiBib3VuZGluZ0JveE9mUmVw
bGFjZWRTdHJpbmcsIGNvbnN0IFN0cmluZyYgcmVwbGFjZWRTdHJpbmcsIGNvbnN0IFN0cmluZyYg
cmVwbGFjZW1lbnRTdHJpbmcsIGNvbnN0IFZlY3RvcjxTdHJpbmc+JiBhbHRlcm5hdGl2ZVJlcGxh
Y2VtZW50U3RyaW5ncyk7Ci0gICAgU3RyaW5nIGRpc21pc3MoV2ViQ29yZTo6UmVhc29uRm9yRGlz
bWlzc2luZ0NvcnJlY3Rpb25QYW5lbCk7CisgICAgdm9pZCBzaG93KFdlYlZpZXcqLCBXZWJDb3Jl
OjpBbHRlcm5hdGl2ZVRleHRUeXBlLCBjb25zdCBXZWJDb3JlOjpGbG9hdFJlY3QmIGJvdW5kaW5n
Qm94T2ZSZXBsYWNlZFN0cmluZywgY29uc3QgU3RyaW5nJiByZXBsYWNlZFN0cmluZywgY29uc3Qg
U3RyaW5nJiByZXBsYWNlbWVudFN0cmluZywgY29uc3QgVmVjdG9yPFN0cmluZz4mIGFsdGVybmF0
aXZlUmVwbGFjZW1lbnRTdHJpbmdzKTsKKyAgICBTdHJpbmcgZGlzbWlzcyhXZWJDb3JlOjpSZWFz
b25Gb3JEaXNtaXNzaW5nQWx0ZXJuYXRpdmVUZXh0KTsKICAgICBzdGF0aWMgdm9pZCByZWNvcmRB
dXRvY29ycmVjdGlvblJlc3BvbnNlKFdlYlZpZXcqLCBOU0NvcnJlY3Rpb25SZXNwb25zZSwgY29u
c3QgU3RyaW5nJiByZXBsYWNlZFN0cmluZywgY29uc3QgU3RyaW5nJiByZXBsYWNlbWVudFN0cmlu
Zyk7CiAKIHByaXZhdGU6CiAgICAgYm9vbCBpc1Nob3dpbmcoKSBjb25zdCB7IHJldHVybiBtX3Zp
ZXc7IH0KLSAgICBTdHJpbmcgZGlzbWlzc0ludGVybmFsKFdlYkNvcmU6OlJlYXNvbkZvckRpc21p
c3NpbmdDb3JyZWN0aW9uUGFuZWwsIGJvb2wgZGlzbWlzc2luZ0V4dGVybmFsbHkpOworICAgIFN0
cmluZyBkaXNtaXNzSW50ZXJuYWwoV2ViQ29yZTo6UmVhc29uRm9yRGlzbWlzc2luZ0FsdGVybmF0
aXZlVGV4dCwgYm9vbCBkaXNtaXNzaW5nRXh0ZXJuYWxseSk7CiAgICAgdm9pZCBoYW5kbGVBY2Nl
cHRlZFJlcGxhY2VtZW50KE5TU3RyaW5nKiBhY2NlcHRlZFJlcGxhY2VtZW50LCBOU1N0cmluZyog
cmVwbGFjZWQsIE5TU3RyaW5nKiBwcm9wb3NlZFJlcGxhY2VtZW50LCBOU0NvcnJlY3Rpb25JbmRp
Y2F0b3JUeXBlKTsKIAogICAgIGJvb2wgbV93YXNEaXNtaXNzZWRFeHRlcm5hbGx5OwotICAgIFdl
YkNvcmU6OlJlYXNvbkZvckRpc21pc3NpbmdDb3JyZWN0aW9uUGFuZWwgbV9yZWFzb25Gb3JEaXNt
aXNzaW5nOworICAgIFdlYkNvcmU6OlJlYXNvbkZvckRpc21pc3NpbmdBbHRlcm5hdGl2ZVRleHQg
bV9yZWFzb25Gb3JEaXNtaXNzaW5nOwogICAgIFJldGFpblB0cjxXZWJWaWV3PiBtX3ZpZXc7CiAg
ICAgUmV0YWluUHRyPE5TU3RyaW5nPiBtX3Jlc3VsdEZvckRpc21pc3NhbDsKIH07CkluZGV4OiBT
b3VyY2UvV2ViS2l0L21hYy9XZWJDb3JlU3VwcG9ydC9Db3JyZWN0aW9uUGFuZWwubW0KPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1dlYktpdC9tYWMvV2ViQ29yZVN1cHBvcnQvQ29ycmVjdGlvblBhbmVs
Lm1tCShyZXZpc2lvbiAxMTMwNDQpCisrKyBTb3VyY2UvV2ViS2l0L21hYy9XZWJDb3JlU3VwcG9y
dC9Db3JyZWN0aW9uUGFuZWwubW0JKHdvcmtpbmcgY29weSkKQEAgLTMwLDE0ICszMCwxNCBAQAog
I2lmICFkZWZpbmVkKEJVSUxESU5HX09OX0xFT1BBUkQpICYmICFkZWZpbmVkKEJVSUxESU5HX09O
X1NOT1dfTEVPUEFSRCkKIHVzaW5nIG5hbWVzcGFjZSBXZWJDb3JlOwogCi1zdGF0aWMgaW5saW5l
IE5TQ29ycmVjdGlvbkluZGljYXRvclR5cGUgY29ycmVjdGlvbkluZGljYXRvclR5cGUoQ29ycmVj
dGlvblBhbmVsSW5mbzo6UGFuZWxUeXBlIHBhbmVsVHlwZSkKK3N0YXRpYyBpbmxpbmUgTlNDb3Jy
ZWN0aW9uSW5kaWNhdG9yVHlwZSBjb3JyZWN0aW9uSW5kaWNhdG9yVHlwZShBbHRlcm5hdGl2ZVRl
eHRUeXBlIGFsdGVybmF0aXZlVGV4dFR5cGUpCiB7Ci0gICAgc3dpdGNoIChwYW5lbFR5cGUpIHsK
LSAgICBjYXNlIENvcnJlY3Rpb25QYW5lbEluZm86OlBhbmVsVHlwZUNvcnJlY3Rpb246CisgICAg
c3dpdGNoIChhbHRlcm5hdGl2ZVRleHRUeXBlKSB7CisgICAgY2FzZSBBbHRlcm5hdGl2ZVRleHRU
eXBlQ29ycmVjdGlvbjoKICAgICAgICAgcmV0dXJuIE5TQ29ycmVjdGlvbkluZGljYXRvclR5cGVE
ZWZhdWx0OwotICAgIGNhc2UgQ29ycmVjdGlvblBhbmVsSW5mbzo6UGFuZWxUeXBlUmV2ZXJzaW9u
OgorICAgIGNhc2UgQWx0ZXJuYXRpdmVUZXh0VHlwZVJldmVyc2lvbjoKICAgICAgICAgcmV0dXJu
IE5TQ29ycmVjdGlvbkluZGljYXRvclR5cGVSZXZlcnNpb247Ci0gICAgY2FzZSBDb3JyZWN0aW9u
UGFuZWxJbmZvOjpQYW5lbFR5cGVTcGVsbGluZ1N1Z2dlc3Rpb25zOgorICAgIGNhc2UgQWx0ZXJu
YXRpdmVUZXh0VHlwZVNwZWxsaW5nU3VnZ2VzdGlvbnM6CiAgICAgICAgIHJldHVybiBOU0NvcnJl
Y3Rpb25JbmRpY2F0b3JUeXBlR3Vlc3NlczsKICAgICB9CiAgICAgQVNTRVJUX05PVF9SRUFDSEVE
KCk7CkBAIC00NiwxOCArNDYsMTggQEAgc3RhdGljIGlubGluZSBOU0NvcnJlY3Rpb25JbmRpY2F0
b3JUeXBlIAogCiBDb3JyZWN0aW9uUGFuZWw6OkNvcnJlY3Rpb25QYW5lbCgpCiAgICAgOiBtX3dh
c0Rpc21pc3NlZEV4dGVybmFsbHkoZmFsc2UpCi0gICAgLCBtX3JlYXNvbkZvckRpc21pc3Npbmco
UmVhc29uRm9yRGlzbWlzc2luZ0NvcnJlY3Rpb25QYW5lbElnbm9yZWQpCisgICAgLCBtX3JlYXNv
bkZvckRpc21pc3NpbmcoUmVhc29uRm9yRGlzbWlzc2luZ0FsdGVybmF0aXZlVGV4dElnbm9yZWQp
CiB7CiB9CiAKIENvcnJlY3Rpb25QYW5lbDo6fkNvcnJlY3Rpb25QYW5lbCgpCiB7Ci0gICAgZGlz
bWlzc0ludGVybmFsKFJlYXNvbkZvckRpc21pc3NpbmdDb3JyZWN0aW9uUGFuZWxJZ25vcmVkLCBm
YWxzZSk7CisgICAgZGlzbWlzc0ludGVybmFsKFJlYXNvbkZvckRpc21pc3NpbmdBbHRlcm5hdGl2
ZVRleHRJZ25vcmVkLCBmYWxzZSk7CiB9CiAKLXZvaWQgQ29ycmVjdGlvblBhbmVsOjpzaG93KFdl
YlZpZXcqIHZpZXcsIENvcnJlY3Rpb25QYW5lbEluZm86OlBhbmVsVHlwZSB0eXBlLCBjb25zdCBG
bG9hdFJlY3QmIGJvdW5kaW5nQm94T2ZSZXBsYWNlZFN0cmluZywgY29uc3QgU3RyaW5nJiByZXBs
YWNlZFN0cmluZywgY29uc3QgU3RyaW5nJiByZXBsYWNlbWVudFN0cmluZywgY29uc3QgVmVjdG9y
PFN0cmluZz4mIGFsdGVybmF0aXZlUmVwbGFjZW1lbnRTdHJpbmdzKQordm9pZCBDb3JyZWN0aW9u
UGFuZWw6OnNob3coV2ViVmlldyogdmlldywgQWx0ZXJuYXRpdmVUZXh0VHlwZSB0eXBlLCBjb25z
dCBGbG9hdFJlY3QmIGJvdW5kaW5nQm94T2ZSZXBsYWNlZFN0cmluZywgY29uc3QgU3RyaW5nJiBy
ZXBsYWNlZFN0cmluZywgY29uc3QgU3RyaW5nJiByZXBsYWNlbWVudFN0cmluZywgY29uc3QgVmVj
dG9yPFN0cmluZz4mIGFsdGVybmF0aXZlUmVwbGFjZW1lbnRTdHJpbmdzKQogewotICAgIGRpc21p
c3NJbnRlcm5hbChSZWFzb25Gb3JEaXNtaXNzaW5nQ29ycmVjdGlvblBhbmVsSWdub3JlZCwgZmFs
c2UpOworICAgIGRpc21pc3NJbnRlcm5hbChSZWFzb25Gb3JEaXNtaXNzaW5nQWx0ZXJuYXRpdmVU
ZXh0SWdub3JlZCwgZmFsc2UpOwogICAgIAogICAgIGlmICghdmlldykKICAgICAgICAgcmV0dXJu
OwpAQCAtODAsMTIgKzgwLDEyIEBAIHZvaWQgQ29ycmVjdGlvblBhbmVsOjpzaG93KFdlYlZpZXcq
IHZpZXcKICAgICB9XTsKIH0KIAotU3RyaW5nIENvcnJlY3Rpb25QYW5lbDo6ZGlzbWlzcyhSZWFz
b25Gb3JEaXNtaXNzaW5nQ29ycmVjdGlvblBhbmVsIHJlYXNvbikKK1N0cmluZyBDb3JyZWN0aW9u
UGFuZWw6OmRpc21pc3MoUmVhc29uRm9yRGlzbWlzc2luZ0FsdGVybmF0aXZlVGV4dCByZWFzb24p
CiB7CiAgICAgcmV0dXJuIGRpc21pc3NJbnRlcm5hbChyZWFzb24sIHRydWUpOwogfQogCi1TdHJp
bmcgQ29ycmVjdGlvblBhbmVsOjpkaXNtaXNzSW50ZXJuYWwoUmVhc29uRm9yRGlzbWlzc2luZ0Nv
cnJlY3Rpb25QYW5lbCByZWFzb24sIGJvb2wgZGlzbWlzc2luZ0V4dGVybmFsbHkpCitTdHJpbmcg
Q29ycmVjdGlvblBhbmVsOjpkaXNtaXNzSW50ZXJuYWwoUmVhc29uRm9yRGlzbWlzc2luZ0FsdGVy
bmF0aXZlVGV4dCByZWFzb24sIGJvb2wgZGlzbWlzc2luZ0V4dGVybmFsbHkpCiB7CiAgICAgaWYg
KCFpc1Nob3dpbmcoKSkKICAgICAgICAgcmV0dXJuIFN0cmluZygpOwpAQCAtMTE1LDcgKzExNSw3
IEBAIHZvaWQgQ29ycmVjdGlvblBhbmVsOjpoYW5kbGVBY2NlcHRlZFJlcGwKICAgICAgICAgaWYg
KGFjY2VwdGVkUmVwbGFjZW1lbnQpCiAgICAgICAgICAgICBbc3BlbGxDaGVja2VyIHJlY29yZFJl
c3BvbnNlOk5TQ29ycmVjdGlvblJlc3BvbnNlQWNjZXB0ZWQgdG9Db3JyZWN0aW9uOmFjY2VwdGVk
UmVwbGFjZW1lbnQgZm9yV29yZDpyZXBsYWNlZCBsYW5ndWFnZTpuaWwgaW5TcGVsbERvY3VtZW50
V2l0aFRhZzpkb2N1bWVudFRhZ107CiAgICAgICAgIGVsc2UgewotICAgICAgICAgICAgaWYgKCFt
X3dhc0Rpc21pc3NlZEV4dGVybmFsbHkgfHwgbV9yZWFzb25Gb3JEaXNtaXNzaW5nID09IFJlYXNv
bkZvckRpc21pc3NpbmdDb3JyZWN0aW9uUGFuZWxDYW5jZWxsZWQpCisgICAgICAgICAgICBpZiAo
IW1fd2FzRGlzbWlzc2VkRXh0ZXJuYWxseSB8fCBtX3JlYXNvbkZvckRpc21pc3NpbmcgPT0gUmVh
c29uRm9yRGlzbWlzc2luZ0FsdGVybmF0aXZlVGV4dENhbmNlbGxlZCkKICAgICAgICAgICAgICAg
ICBbc3BlbGxDaGVja2VyIHJlY29yZFJlc3BvbnNlOk5TQ29ycmVjdGlvblJlc3BvbnNlUmVqZWN0
ZWQgdG9Db3JyZWN0aW9uOnByb3Bvc2VkUmVwbGFjZW1lbnQgZm9yV29yZDpyZXBsYWNlZCBsYW5n
dWFnZTpuaWwgaW5TcGVsbERvY3VtZW50V2l0aFRhZzpkb2N1bWVudFRhZ107CiAgICAgICAgICAg
ICBlbHNlCiAgICAgICAgICAgICAgICAgW3NwZWxsQ2hlY2tlciByZWNvcmRSZXNwb25zZTpOU0Nv
cnJlY3Rpb25SZXNwb25zZUlnbm9yZWQgdG9Db3JyZWN0aW9uOnByb3Bvc2VkUmVwbGFjZW1lbnQg
Zm9yV29yZDpyZXBsYWNlZCBsYW5ndWFnZTpuaWwgaW5TcGVsbERvY3VtZW50V2l0aFRhZzpkb2N1
bWVudFRhZ107CkluZGV4OiBTb3VyY2UvV2ViS2l0L21hYy9XZWJDb3JlU3VwcG9ydC9XZWJFZGl0
b3JDbGllbnQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L21hYy9XZWJDb3JlU3VwcG9y
dC9XZWJFZGl0b3JDbGllbnQuaAkocmV2aXNpb24gMTEzMDQ0KQorKysgU291cmNlL1dlYktpdC9t
YWMvV2ViQ29yZVN1cHBvcnQvV2ViRWRpdG9yQ2xpZW50LmgJKHdvcmtpbmcgY29weSkKQEAgLTEz
Nyw5ICsxMzcsOSBAQCBwdWJsaWM6CiAgICAgdmlydHVhbCB2b2lkIHNldElucHV0TWV0aG9kU3Rh
dGUoYm9vbCBlbmFibGVkKSBPVkVSUklERTsKICAgICB2aXJ0dWFsIHZvaWQgcmVxdWVzdENoZWNr
aW5nT2ZTdHJpbmcoV2ViQ29yZTo6U3BlbGxDaGVja2VyKiwgY29uc3QgV2ViQ29yZTo6VGV4dENo
ZWNraW5nUmVxdWVzdCYpIE9WRVJSSURFOwogI2lmICFkZWZpbmVkKEJVSUxESU5HX09OX0xFT1BB
UkQpICYmICFkZWZpbmVkKEJVSUxESU5HX09OX1NOT1dfTEVPUEFSRCkKLSAgICB2aXJ0dWFsIHZv
aWQgc2hvd0NvcnJlY3Rpb25QYW5lbChXZWJDb3JlOjpDb3JyZWN0aW9uUGFuZWxJbmZvOjpQYW5l
bFR5cGUsIGNvbnN0IFdlYkNvcmU6OkZsb2F0UmVjdCYgYm91bmRpbmdCb3hPZlJlcGxhY2VkU3Ry
aW5nLCBjb25zdCBTdHJpbmcmIHJlcGxhY2VkU3RyaW5nLCBjb25zdCBTdHJpbmcmIHJlcGxhY2Vt
ZW50U3RyaW5nLCBjb25zdCBWZWN0b3I8U3RyaW5nPiYgYWx0ZXJuYXRpdmVSZXBsYWNlbWVudFN0
cmluZ3MpIE9WRVJSSURFOwotICAgIHZpcnR1YWwgdm9pZCBkaXNtaXNzQ29ycmVjdGlvblBhbmVs
KFdlYkNvcmU6OlJlYXNvbkZvckRpc21pc3NpbmdDb3JyZWN0aW9uUGFuZWwpIE9WRVJSSURFOwot
ICAgIHZpcnR1YWwgU3RyaW5nIGRpc21pc3NDb3JyZWN0aW9uUGFuZWxTb29uKFdlYkNvcmU6OlJl
YXNvbkZvckRpc21pc3NpbmdDb3JyZWN0aW9uUGFuZWwpIE9WRVJSSURFOworICAgIHZpcnR1YWwg
dm9pZCBzaG93Q29ycmVjdGlvblBhbmVsKFdlYkNvcmU6OkFsdGVybmF0aXZlVGV4dFR5cGUsIGNv
bnN0IFdlYkNvcmU6OkZsb2F0UmVjdCYgYm91bmRpbmdCb3hPZlJlcGxhY2VkU3RyaW5nLCBjb25z
dCBTdHJpbmcmIHJlcGxhY2VkU3RyaW5nLCBjb25zdCBTdHJpbmcmIHJlcGxhY2VtZW50U3RyaW5n
LCBjb25zdCBWZWN0b3I8U3RyaW5nPiYgYWx0ZXJuYXRpdmVSZXBsYWNlbWVudFN0cmluZ3MpIE9W
RVJSSURFOworICAgIHZpcnR1YWwgdm9pZCBkaXNtaXNzQ29ycmVjdGlvblBhbmVsKFdlYkNvcmU6
OlJlYXNvbkZvckRpc21pc3NpbmdBbHRlcm5hdGl2ZVRleHQpIE9WRVJSSURFOworICAgIHZpcnR1
YWwgU3RyaW5nIGRpc21pc3NDb3JyZWN0aW9uUGFuZWxTb29uKFdlYkNvcmU6OlJlYXNvbkZvckRp
c21pc3NpbmdBbHRlcm5hdGl2ZVRleHQpIE9WRVJSSURFOwogICAgIHZpcnR1YWwgdm9pZCByZWNv
cmRBdXRvY29ycmVjdGlvblJlc3BvbnNlKEF1dG9jb3JyZWN0aW9uUmVzcG9uc2VUeXBlLCBjb25z
dCBTdHJpbmcmIHJlcGxhY2VkU3RyaW5nLCBjb25zdCBTdHJpbmcmIHJlcGxhY2VtZW50U3RyaW5n
KSBPVkVSUklERTsKICNlbmRpZgogcHJpdmF0ZToKSW5kZXg6IFNvdXJjZS9XZWJLaXQvbWFjL1dl
YkNvcmVTdXBwb3J0L1dlYkVkaXRvckNsaWVudC5tbQo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
S2l0L21hYy9XZWJDb3JlU3VwcG9ydC9XZWJFZGl0b3JDbGllbnQubW0JKHJldmlzaW9uIDExMzA0
NCkKKysrIFNvdXJjZS9XZWJLaXQvbWFjL1dlYkNvcmVTdXBwb3J0L1dlYkVkaXRvckNsaWVudC5t
bQkod29ya2luZyBjb3B5KQpAQCAtMTkwLDcgKzE5MCw3IEBAIFdlYkVkaXRvckNsaWVudDo6V2Vi
RWRpdG9yQ2xpZW50KFdlYlZpZXcKIFdlYkVkaXRvckNsaWVudDo6fldlYkVkaXRvckNsaWVudCgp
CiB7CiAjaWYgIWRlZmluZWQoQlVJTERJTkdfT05fTEVPUEFSRCkgJiYgIWRlZmluZWQoQlVJTERJ
TkdfT05fU05PV19MRU9QQVJEKQotICAgIGRpc21pc3NDb3JyZWN0aW9uUGFuZWwoUmVhc29uRm9y
RGlzbWlzc2luZ0NvcnJlY3Rpb25QYW5lbElnbm9yZWQpOworICAgIGRpc21pc3NDb3JyZWN0aW9u
UGFuZWwoUmVhc29uRm9yRGlzbWlzc2luZ0FsdGVybmF0aXZlVGV4dElnbm9yZWQpOwogI2VuZGlm
CiB9CiAKQEAgLTg2NywxNyArODY3LDE3IEBAIHZvaWQgV2ViRWRpdG9yQ2xpZW50Ojp1cGRhdGVT
cGVsbGluZ1VJV2kKIH0KIAogI2lmICFkZWZpbmVkKEJVSUxESU5HX09OX0xFT1BBUkQpICYmICFk
ZWZpbmVkKEJVSUxESU5HX09OX1NOT1dfTEVPUEFSRCkKLXZvaWQgV2ViRWRpdG9yQ2xpZW50Ojpz
aG93Q29ycmVjdGlvblBhbmVsKENvcnJlY3Rpb25QYW5lbEluZm86OlBhbmVsVHlwZSBwYW5lbFR5
cGUsIGNvbnN0IEZsb2F0UmVjdCYgYm91bmRpbmdCb3hPZlJlcGxhY2VkU3RyaW5nLCBjb25zdCBT
dHJpbmcmIHJlcGxhY2VkU3RyaW5nLCBjb25zdCBTdHJpbmcmIHJlcGxhY2VtZW50U3RyaW5nLCBj
b25zdCBWZWN0b3I8U3RyaW5nPiYgYWx0ZXJuYXRpdmVSZXBsYWNlbWVudFN0cmluZ3MpCit2b2lk
IFdlYkVkaXRvckNsaWVudDo6c2hvd0NvcnJlY3Rpb25QYW5lbChBbHRlcm5hdGl2ZVRleHRUeXBl
IHBhbmVsVHlwZSwgY29uc3QgRmxvYXRSZWN0JiBib3VuZGluZ0JveE9mUmVwbGFjZWRTdHJpbmcs
IGNvbnN0IFN0cmluZyYgcmVwbGFjZWRTdHJpbmcsIGNvbnN0IFN0cmluZyYgcmVwbGFjZW1lbnRT
dHJpbmcsIGNvbnN0IFZlY3RvcjxTdHJpbmc+JiBhbHRlcm5hdGl2ZVJlcGxhY2VtZW50U3RyaW5n
cykKIHsKICAgICBtX2NvcnJlY3Rpb25QYW5lbC5zaG93KG1fd2ViVmlldywgcGFuZWxUeXBlLCBi
b3VuZGluZ0JveE9mUmVwbGFjZWRTdHJpbmcsIHJlcGxhY2VkU3RyaW5nLCByZXBsYWNlbWVudFN0
cmluZywgYWx0ZXJuYXRpdmVSZXBsYWNlbWVudFN0cmluZ3MpOwogfQogCi12b2lkIFdlYkVkaXRv
ckNsaWVudDo6ZGlzbWlzc0NvcnJlY3Rpb25QYW5lbChSZWFzb25Gb3JEaXNtaXNzaW5nQ29ycmVj
dGlvblBhbmVsIHJlYXNvbkZvckRpc21pc3NpbmcpCit2b2lkIFdlYkVkaXRvckNsaWVudDo6ZGlz
bWlzc0NvcnJlY3Rpb25QYW5lbChSZWFzb25Gb3JEaXNtaXNzaW5nQWx0ZXJuYXRpdmVUZXh0IHJl
YXNvbkZvckRpc21pc3NpbmcpCiB7CiAgICAgbV9jb3JyZWN0aW9uUGFuZWwuZGlzbWlzcyhyZWFz
b25Gb3JEaXNtaXNzaW5nKTsKIH0KIAotU3RyaW5nIFdlYkVkaXRvckNsaWVudDo6ZGlzbWlzc0Nv
cnJlY3Rpb25QYW5lbFNvb24oUmVhc29uRm9yRGlzbWlzc2luZ0NvcnJlY3Rpb25QYW5lbCByZWFz
b25Gb3JEaXNtaXNzaW5nKQorU3RyaW5nIFdlYkVkaXRvckNsaWVudDo6ZGlzbWlzc0NvcnJlY3Rp
b25QYW5lbFNvb24oUmVhc29uRm9yRGlzbWlzc2luZ0FsdGVybmF0aXZlVGV4dCByZWFzb25Gb3JE
aXNtaXNzaW5nKQogewogICAgIHJldHVybiBtX2NvcnJlY3Rpb25QYW5lbC5kaXNtaXNzKHJlYXNv
bkZvckRpc21pc3NpbmcpOwogfQpJbmRleDogU291cmNlL1dlYktpdC9tYWMvV2ViVmlldy9XZWJW
aWV3Lm1tCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvbWFjL1dlYlZpZXcvV2ViVmlldy5t
bQkocmV2aXNpb24gMTEzMDQ0KQorKysgU291cmNlL1dlYktpdC9tYWMvV2ViVmlldy9XZWJWaWV3
Lm1tCSh3b3JraW5nIGNvcHkpCkBAIC01NDg4LDcgKzU0ODgsNyBAQCAtICh2b2lkKWhhbmRsZUNv
cnJlY3Rpb25QYW5lbFJlc3VsdDooTlNTCiAgICAgV2ViRnJhbWUgKndlYkZyYW1lID0gW3NlbGYg
X3NlbGVjdGVkT3JNYWluRnJhbWVdOwogICAgIEZyYW1lKiBjb3JlRnJhbWUgPSBjb3JlKHdlYkZy
YW1lKTsKICAgICBpZiAoY29yZUZyYW1lKQotICAgICAgICBjb3JlRnJhbWUtPmVkaXRvcigpLT5o
YW5kbGVDb3JyZWN0aW9uUGFuZWxSZXN1bHQocmVzdWx0KTsKKyAgICAgICAgY29yZUZyYW1lLT5l
ZGl0b3IoKS0+aGFuZGxlQWx0ZXJuYXRpdmVUZXh0VUlSZXN1bHQocmVzdWx0KTsKIH0KICNlbmRp
ZgogCg==
</data>
<flag name="review"
          id="139827"
          type_id="1"
          status="+"
          setter="enrica"
    />
    <flag name="commit-queue"
          id="139828"
          type_id="3"
          status="-"
          setter="webkit.review.bot"
    />
          </attachment>
      

    </bug>

</bugzilla>