<?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>98268</bug_id>
          
          <creation_ts>2012-10-03 08:06:10 -0700</creation_ts>
          <short_desc>[Qt] Make RenderThemeQStyle/ScrollbarThemeQStyle compile without QStyle/QtWidgets</short_desc>
          <delta_ts>2012-10-09 00:51:42 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>New Bugs</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          <blocked>88162</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Simon Hausmann">hausmann</reporter>
          <assigned_to name="Simon Hausmann">hausmann</assigned_to>
          <cc>pierre.rossi</cc>
    
    <cc>vestbo</cc>
    
    <cc>webkit.review.bot</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>733707</commentid>
    <comment_count>0</comment_count>
    <who name="Simon Hausmann">hausmann</who>
    <bug_when>2012-10-03 08:06:10 -0700</bug_when>
    <thetext>[Qt] Make RenderThemeQStyle/ScrollbarThemeQStyle compile without QStyle/QtWidgets</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>733709</commentid>
    <comment_count>1</comment_count>
      <attachid>166896</attachid>
    <who name="Simon Hausmann">hausmann</who>
    <bug_when>2012-10-03 08:08:41 -0700</bug_when>
    <thetext>Created attachment 166896
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>733713</commentid>
    <comment_count>2</comment_count>
      <attachid>166898</attachid>
    <who name="Simon Hausmann">hausmann</who>
    <bug_when>2012-10-03 08:09:48 -0700</bug_when>
    <thetext>Created attachment 166898
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>733715</commentid>
    <comment_count>3</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-10-03 08:12:46 -0700</bug_when>
    <thetext>Attachment 166898 did not pass style-queue:

Failed to run &quot;[&apos;Tools/Scripts/check-webkit-style&apos;, &apos;--diff-files&apos;, u&apos;Source/WebCore/ChangeLog&apos;, u&apos;Source/WebCor...&quot; exit_code: 1
Source/WebKit/qt/WebCoreSupport/QWebStyle.cpp:274:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
Source/WebCore/platform/qt/QStyleInterface.h:76:  Extra space before last semicolon. If this should be an empty statement, use { } instead.  [whitespace/semicolon] [5]
Source/WebCore/platform/qt/RenderThemeQStyle.cpp:280:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
Source/WebCore/platform/qt/RenderThemeQStyle.cpp:283:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
Source/WebCore/platform/qt/RenderThemeQStyle.cpp:301:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
Source/WebCore/platform/qt/RenderThemeQStyle.cpp:390:  When wrapping a line, only indent 4 spaces.  [whitespace/indent] [3]
Source/WebCore/platform/qt/RenderThemeQStyle.cpp:420:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
Source/WebCore/platform/qt/RenderThemeQStyle.cpp:430:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
Source/WebCore/platform/qt/RenderThemeQStyle.cpp:474:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
Source/WebCore/platform/qt/RenderThemeQStyle.cpp:504:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
Source/WebCore/platform/qt/RenderThemeQStyle.cpp:516:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
Source/WebCore/platform/qt/RenderThemeQStyle.cpp:529:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
Source/WebCore/platform/qt/RenderThemeQStyle.cpp:541:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
Source/WebCore/platform/qt/ScrollbarThemeQStyle.cpp:137:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
Source/WebCore/platform/qt/ScrollbarThemeQStyle.cpp:138:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
Source/WebCore/platform/qt/ScrollbarThemeQStyle.cpp:143:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
Total errors found: 16 in 14 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>733720</commentid>
    <comment_count>4</comment_count>
      <attachid>166899</attachid>
    <who name="Simon Hausmann">hausmann</who>
    <bug_when>2012-10-03 08:21:39 -0700</bug_when>
    <thetext>Created attachment 166899
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>733722</commentid>
    <comment_count>5</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-10-03 08:27:20 -0700</bug_when>
    <thetext>Attachment 166899 did not pass style-queue:

Failed to run &quot;[&apos;Tools/Scripts/check-webkit-style&apos;, &apos;--diff-files&apos;, u&apos;Source/WebCore/ChangeLog&apos;, u&apos;Source/WebCor...&quot; exit_code: 1
Source/WebKit/qt/WebCoreSupport/QWebStyle.cpp:274:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
Source/WebCore/platform/qt/QStyleInterface.h:76:  Extra space before last semicolon. If this should be an empty statement, use { } instead.  [whitespace/semicolon] [5]
Source/WebCore/platform/qt/RenderThemeQStyle.cpp:280:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
Source/WebCore/platform/qt/RenderThemeQStyle.cpp:283:  When wrapping a line, only indent 4 spaces.  [whitespace/indent] [3]
Source/WebCore/platform/qt/RenderThemeQStyle.cpp:390:  When wrapping a line, only indent 4 spaces.  [whitespace/indent] [3]
Source/WebCore/platform/qt/RenderThemeQStyle.cpp:430:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
Source/WebCore/platform/qt/RenderThemeQStyle.cpp:474:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
Source/WebCore/platform/qt/RenderThemeQStyle.cpp:504:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
Source/WebCore/platform/qt/RenderThemeQStyle.cpp:516:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
Source/WebCore/platform/qt/RenderThemeQStyle.cpp:529:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
Total errors found: 10 in 14 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>733724</commentid>
    <comment_count>6</comment_count>
      <attachid>166900</attachid>
    <who name="Simon Hausmann">hausmann</who>
    <bug_when>2012-10-03 08:31:06 -0700</bug_when>
    <thetext>Created attachment 166900
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>733726</commentid>
    <comment_count>7</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-10-03 08:33:44 -0700</bug_when>
    <thetext>Attachment 166900 did not pass style-queue:

Failed to run &quot;[&apos;Tools/Scripts/check-webkit-style&apos;, &apos;--diff-files&apos;, u&apos;Source/WebCore/ChangeLog&apos;, u&apos;Source/WebCor...&quot; exit_code: 1
Source/WebKit/qt/WebCoreSupport/QWebStyle.cpp:274:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
Source/WebCore/platform/qt/QStyleInterface.h:76:  Extra space before last semicolon. If this should be an empty statement, use { } instead.  [whitespace/semicolon] [5]
Source/WebCore/platform/qt/RenderThemeQStyle.cpp:388:  When wrapping a line, only indent 4 spaces.  [whitespace/indent] [3]
Total errors found: 3 in 14 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>733728</commentid>
    <comment_count>8</comment_count>
      <attachid>166902</attachid>
    <who name="Simon Hausmann">hausmann</who>
    <bug_when>2012-10-03 08:34:32 -0700</bug_when>
    <thetext>Created attachment 166902
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>733736</commentid>
    <comment_count>9</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-10-03 08:39:23 -0700</bug_when>
    <thetext>Attachment 166902 did not pass style-queue:

Failed to run &quot;[&apos;Tools/Scripts/check-webkit-style&apos;, &apos;--diff-files&apos;, u&apos;Source/WebCore/ChangeLog&apos;, u&apos;Source/WebCor...&quot; exit_code: 1
Source/WebKit/qt/WebCoreSupport/QWebStyle.cpp:274:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
Source/WebCore/platform/qt/QStyleInterface.h:76:  Extra space before last semicolon. If this should be an empty statement, use { } instead.  [whitespace/semicolon] [5]
Total errors found: 2 in 14 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>734546</commentid>
    <comment_count>10</comment_count>
      <attachid>167062</attachid>
    <who name="Simon Hausmann">hausmann</who>
    <bug_when>2012-10-04 02:53:25 -0700</bug_when>
    <thetext>Created attachment 167062
Patch

New patch with better ChangeLog description</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>734548</commentid>
    <comment_count>11</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-10-04 02:57:50 -0700</bug_when>
    <thetext>Attachment 167062 did not pass style-queue:

Failed to run &quot;[&apos;Tools/Scripts/check-webkit-style&apos;, &apos;--diff-files&apos;, u&apos;Source/WebCore/ChangeLog&apos;, u&apos;Source/WebCor...&quot; exit_code: 1
Source/WebKit/qt/WebCoreSupport/QWebStyle.cpp:274:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
Source/WebCore/platform/qt/QStyleInterface.h:76:  Extra space before last semicolon. If this should be an empty statement, use { } instead.  [whitespace/semicolon] [5]
Total errors found: 2 in 14 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>734557</commentid>
    <comment_count>12</comment_count>
    <who name="Simon Hausmann">hausmann</who>
    <bug_when>2012-10-04 03:11:10 -0700</bug_when>
    <thetext>The patch attached is one big combined change. Individual changes that are too small for trunk but illustrate the refactoring are at

    https://github.com/tronical/webkit/commits/rendertheme-split-individual</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>734624</commentid>
    <comment_count>13</comment_count>
      <attachid>167088</attachid>
    <who name="Simon Hausmann">hausmann</who>
    <bug_when>2012-10-04 05:54:28 -0700</bug_when>
    <thetext>Created attachment 167088
Patch

Updated patch with changes as per review with Tor Arne and Pierre</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>734628</commentid>
    <comment_count>14</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-10-04 05:57:51 -0700</bug_when>
    <thetext>Attachment 167088 did not pass style-queue:

Failed to run &quot;[&apos;Tools/Scripts/check-webkit-style&apos;, &apos;--diff-files&apos;, u&apos;Source/WebCore/ChangeLog&apos;, u&apos;Source/WebCor...&quot; exit_code: 1
Source/WebKit/qt/WebCoreSupport/QStyleFacadeImp.cpp:256:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
Source/WebCore/platform/qt/QStyleFacade.h:76:  Extra space before last semicolon. If this should be an empty statement, use { } instead.  [whitespace/semicolon] [5]
Total errors found: 2 in 14 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>735565</commentid>
    <comment_count>15</comment_count>
      <attachid>167088</attachid>
    <who name="Tor Arne Vestbø">vestbo</who>
    <bug_when>2012-10-05 04:21:20 -0700</bug_when>
    <thetext>Comment on attachment 167088
Patch

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

r=me

&gt;&gt; Source/WebKit/qt/WebCoreSupport/QStyleFacadeImp.cpp:256
&gt;&gt; +       style()-&gt;drawControl(QStyle::CE_RadioButton, &amp;option, painter, widget);
&gt; 
&gt; Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]

nitpick before landing</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>735591</commentid>
    <comment_count>16</comment_count>
    <who name="Simon Hausmann">hausmann</who>
    <bug_when>2012-10-05 05:36:28 -0700</bug_when>
    <thetext>Reverted r130495 for reason:

Made WK2 tests crash

Committed r130496: &lt;http://trac.webkit.org/changeset/130496&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>737497</commentid>
    <comment_count>17</comment_count>
    <who name="Simon Hausmann">hausmann</who>
    <bug_when>2012-10-09 00:51:42 -0700</bug_when>
    <thetext>Committed r130723: &lt;http://trac.webkit.org/changeset/130723&gt;</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>166896</attachid>
            <date>2012-10-03 08:08:41 -0700</date>
            <delta_ts>2012-10-03 08:09:43 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-98268-20121003171049.patch</filename>
            <type>text/plain</type>
            <size>132573</size>
            <attacher name="Simon Hausmann">hausmann</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTI5NjEwCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggM2E3OWM4MDNhOWM2MWIy
YzFkMTZjZmI3ZmU1YWJlMWMyNDQ0NDhmMC4uYzU4YTEyODJlYzU3YjgzMGFmOWIxYjNkZWY2Njc4
MWJkYTU5MzQ2YyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDk4IEBACisyMDEyLTEwLTAzICBTaW1v
biBIYXVzbWFubiAgPHNpbW9uLmhhdXNtYW5uQGRpZ2lhLmNvbT4KKworICAgICAgICBbUXRdIE1h
a2UgUmVuZGVyVGhlbWVRU3R5bGUvU2Nyb2xsYmFyVGhlbWVRU3R5bGUgY29tcGlsZSB3aXRob3V0
IFFTdHlsZS9RdFdpZGdldHMKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19i
dWcuY2dpP2lkPTk4MjY4CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisK
KyAgICAgICAgRXh0cmFjdGVkIFFTdHlsZS9RV2lkZ2V0IHJlbGF0ZWQgY29kZSBpbnRvIGEgUVdl
YlN0eWxlIGNsYXNzIHRoYXQgaW1wbGVtZW50cyB0aGUgUVN0eWxlSW50ZXJmYWNlIGludGVyZmFj
ZS4KKworICAgICAgICAqIFRhcmdldC5wcmk6CisgICAgICAgICogcGxhdGZvcm0vcXQvUVN0eWxl
SW50ZXJmYWNlLmNwcDogQWRkZWQuCisgICAgICAgIChXZWJDb3JlKToKKyAgICAgICAgKFdlYkNv
cmU6OlFTdHlsZUludGVyZmFjZTo6c3R5bGVGb3JQYWdlKToKKyAgICAgICAgKiBwbGF0Zm9ybS9x
dC9RU3R5bGVJbnRlcmZhY2UuaDogQWRkZWQuCisgICAgICAgIChXZWJDb3JlKToKKyAgICAgICAg
KFFTdHlsZUludGVyZmFjZSk6CisgICAgICAgIChXZWJDb3JlOjpRU3R5bGVJbnRlcmZhY2U6On5R
U3R5bGVJbnRlcmZhY2UpOgorICAgICAgICAoV2ViQ29yZTo6UVN0eWxlSW50ZXJmYWNlT3B0aW9u
OjpRU3R5bGVJbnRlcmZhY2VPcHRpb24pOgorICAgICAgICAoUVN0eWxlSW50ZXJmYWNlT3B0aW9u
KToKKyAgICAgICAgKiBwbGF0Zm9ybS9xdC9SZW5kZXJUaGVtZVFTdHlsZS5jcHA6IFJlbmFtZWQg
ZnJvbSBTb3VyY2UvV2ViS2l0L3F0L1dlYkNvcmVTdXBwb3J0L1JlbmRlclRoZW1lUVN0eWxlLmNw
cC4KKyAgICAgICAgKFdlYkNvcmUpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGhlbWVRU3R5
bGU6OmdldFN0eWxlUGFpbnRlcik6CisgICAgICAgIChXZWJDb3JlOjpTdHlsZVBhaW50ZXJRU3R5
bGU6OlN0eWxlUGFpbnRlclFTdHlsZSk6CisgICAgICAgIChXZWJDb3JlOjpTdHlsZVBhaW50ZXJR
U3R5bGU6OmluaXQpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGhlbWVRU3R5bGU6OmNyZWF0
ZSk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJUaGVtZVFTdHlsZTo6c2V0U3R5bGVGYWN0b3J5
RnVuY3Rpb24pOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGhlbWVRU3R5bGU6OnN0eWxlRmFj
dG9yeSk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJUaGVtZVFTdHlsZTo6UmVuZGVyVGhlbWVR
U3R5bGUpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGhlbWVRU3R5bGU6On5SZW5kZXJUaGVt
ZVFTdHlsZSk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJUaGVtZVFTdHlsZTo6c2V0UGFsZXR0
ZUZyb21QYWdlQ2xpZW50SWZFeGlzdHMpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGhlbWVR
U3R5bGU6OmluZmxhdGVCdXR0b25SZWN0KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRoZW1l
UVN0eWxlOjpjb21wdXRlU2l6ZUJhc2VkT25TdHlsZSk6CisgICAgICAgIChXZWJDb3JlOjpSZW5k
ZXJUaGVtZVFTdHlsZTo6YWRqdXN0QnV0dG9uU3R5bGUpOgorICAgICAgICAoV2ViQ29yZTo6UmVu
ZGVyVGhlbWVRU3R5bGU6OnNldEJ1dHRvblBhZGRpbmcpOgorICAgICAgICAoV2ViQ29yZTo6UmVu
ZGVyVGhlbWVRU3R5bGU6OnBhaW50QnV0dG9uKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRo
ZW1lUVN0eWxlOjpwYWludFRleHRGaWVsZCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJUaGVt
ZVFTdHlsZTo6YWRqdXN0VGV4dEFyZWFTdHlsZSk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJU
aGVtZVFTdHlsZTo6cGFpbnRUZXh0QXJlYSk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJUaGVt
ZVFTdHlsZTo6c2V0UG9wdXBQYWRkaW5nKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRoZW1l
UVN0eWxlOjpjb2xvclBhbGV0dGUpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGhlbWVRU3R5
bGU6OnBhaW50TWVudUxpc3QpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGhlbWVRU3R5bGU6
OmFkanVzdE1lbnVMaXN0QnV0dG9uU3R5bGUpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGhl
bWVRU3R5bGU6OnBhaW50TWVudUxpc3RCdXR0b24pOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVy
VGhlbWVRU3R5bGU6OmFuaW1hdGlvbkR1cmF0aW9uRm9yUHJvZ3Jlc3NCYXIpOgorICAgICAgICAo
V2ViQ29yZTo6UmVuZGVyVGhlbWVRU3R5bGU6OnBhaW50UHJvZ3Jlc3NCYXIpOgorICAgICAgICAo
V2ViQ29yZTo6UmVuZGVyVGhlbWVRU3R5bGU6OnBhaW50U2xpZGVyVHJhY2spOgorICAgICAgICAo
V2ViQ29yZTo6UmVuZGVyVGhlbWVRU3R5bGU6OmFkanVzdFNsaWRlclRyYWNrU3R5bGUpOgorICAg
ICAgICAoV2ViQ29yZTo6UmVuZGVyVGhlbWVRU3R5bGU6OnBhaW50U2xpZGVyVGh1bWIpOgorICAg
ICAgICAoV2ViQ29yZTo6UmVuZGVyVGhlbWVRU3R5bGU6OmFkanVzdFNsaWRlclRodW1iU3R5bGUp
OgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGhlbWVRU3R5bGU6OnBhaW50U2VhcmNoRmllbGQp
OgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGhlbWVRU3R5bGU6OmFkanVzdFNlYXJjaEZpZWxk
RGVjb3JhdGlvblN0eWxlKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRoZW1lUVN0eWxlOjpw
YWludFNlYXJjaEZpZWxkRGVjb3JhdGlvbik6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJUaGVt
ZVFTdHlsZTo6YWRqdXN0U2VhcmNoRmllbGRSZXN1bHRzRGVjb3JhdGlvblN0eWxlKToKKyAgICAg
ICAgKFdlYkNvcmU6OlJlbmRlclRoZW1lUVN0eWxlOjpwYWludFNlYXJjaEZpZWxkUmVzdWx0c0Rl
Y29yYXRpb24pOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGhlbWVRU3R5bGU6OnBhaW50SW5u
ZXJTcGluQnV0dG9uKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRoZW1lUVN0eWxlOjppbml0
aWFsaXplQ29tbW9uUVN0eWxlT3B0aW9ucyk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJUaGVt
ZVFTdHlsZTo6YWRqdXN0U2xpZGVyVGh1bWJTaXplKToKKyAgICAgICAgKiBwbGF0Zm9ybS9xdC9S
ZW5kZXJUaGVtZVFTdHlsZS5oOiBSZW5hbWVkIGZyb20gU291cmNlL1dlYktpdC9xdC9XZWJDb3Jl
U3VwcG9ydC9SZW5kZXJUaGVtZVFTdHlsZS5oLgorICAgICAgICAoV2ViQ29yZSk6CisgICAgICAg
IChSZW5kZXJUaGVtZVFTdHlsZSk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJUaGVtZVFTdHls
ZTo6c3R5bGVJbnRlcmZhY2UpOgorICAgICAgICAoU3R5bGVQYWludGVyUVN0eWxlKToKKyAgICAg
ICAgKFdlYkNvcmU6OlN0eWxlUGFpbnRlclFTdHlsZTo6aXNWYWxpZCk6CisgICAgICAgIChXZWJD
b3JlOjpTdHlsZVBhaW50ZXJRU3R5bGU6OnBhaW50QnV0dG9uKToKKyAgICAgICAgKFdlYkNvcmU6
OlN0eWxlUGFpbnRlclFTdHlsZTo6cGFpbnRUZXh0RmllbGQpOgorICAgICAgICAoV2ViQ29yZTo6
U3R5bGVQYWludGVyUVN0eWxlOjpwYWludENvbWJvQm94KToKKyAgICAgICAgKFdlYkNvcmU6OlN0
eWxlUGFpbnRlclFTdHlsZTo6cGFpbnRDb21ib0JveEFycm93KToKKyAgICAgICAgKFdlYkNvcmU6
OlN0eWxlUGFpbnRlclFTdHlsZTo6cGFpbnRTbGlkZXJUcmFjayk6CisgICAgICAgIChXZWJDb3Jl
OjpTdHlsZVBhaW50ZXJRU3R5bGU6OnBhaW50U2xpZGVyVGh1bWIpOgorICAgICAgICAoV2ViQ29y
ZTo6U3R5bGVQYWludGVyUVN0eWxlOjpwYWludElubmVyU3BpbkJ1dHRvbik6CisgICAgICAgIChX
ZWJDb3JlOjpTdHlsZVBhaW50ZXJRU3R5bGU6OnBhaW50UHJvZ3Jlc3NCYXIpOgorICAgICAgICAo
V2ViQ29yZTo6U3R5bGVQYWludGVyUVN0eWxlOjpwYWludFNjcm9sbENvcm5lcik6CisgICAgICAg
IChXZWJDb3JlOjpTdHlsZVBhaW50ZXJRU3R5bGU6OnBhaW50U2Nyb2xsQmFyKToKKyAgICAgICAg
KiBwbGF0Zm9ybS9xdC9TY3JvbGxiYXJUaGVtZVFTdHlsZS5jcHA6IFJlbmFtZWQgZnJvbSBTb3Vy
Y2UvV2ViS2l0L3F0L1dlYkNvcmVTdXBwb3J0L1Njcm9sbGJhclRoZW1lUVN0eWxlLmNwcC4KKyAg
ICAgICAgKFdlYkNvcmUpOgorICAgICAgICAoV2ViQ29yZTo6U2Nyb2xsYmFyVGhlbWVRU3R5bGU6
OlNjcm9sbGJhclRoZW1lUVN0eWxlKToKKyAgICAgICAgKFdlYkNvcmU6OlNjcm9sbGJhclRoZW1l
UVN0eWxlOjp+U2Nyb2xsYmFyVGhlbWVRU3R5bGUpOgorICAgICAgICAoV2ViQ29yZTo6c2NQYXJ0
KToKKyAgICAgICAgKFdlYkNvcmU6OnNjcm9sbGJhclBhcnQpOgorICAgICAgICAoV2ViQ29yZTo6
aW5pdFNsaWRlclN0eWxlT3B0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OlNjcm9sbGJhclRoZW1l
UVN0eWxlOjpwYWludCk6CisgICAgICAgIChXZWJDb3JlOjpTY3JvbGxiYXJUaGVtZVFTdHlsZTo6
aGl0VGVzdCk6CisgICAgICAgIChXZWJDb3JlOjpTY3JvbGxiYXJUaGVtZVFTdHlsZTo6c2hvdWxk
Q2VudGVyT25UaHVtYik6CisgICAgICAgIChXZWJDb3JlOjpTY3JvbGxiYXJUaGVtZVFTdHlsZTo6
aW52YWxpZGF0ZVBhcnQpOgorICAgICAgICAoV2ViQ29yZTo6U2Nyb2xsYmFyVGhlbWVRU3R5bGU6
OnNjcm9sbGJhclRoaWNrbmVzcyk6CisgICAgICAgIChXZWJDb3JlOjpTY3JvbGxiYXJUaGVtZVFT
dHlsZTo6dGh1bWJQb3NpdGlvbik6CisgICAgICAgIChXZWJDb3JlOjpTY3JvbGxiYXJUaGVtZVFT
dHlsZTo6dGh1bWJMZW5ndGgpOgorICAgICAgICAoV2ViQ29yZTo6U2Nyb2xsYmFyVGhlbWVRU3R5
bGU6OnRyYWNrUG9zaXRpb24pOgorICAgICAgICAoV2ViQ29yZTo6U2Nyb2xsYmFyVGhlbWVRU3R5
bGU6OnRyYWNrTGVuZ3RoKToKKyAgICAgICAgKFdlYkNvcmU6OlNjcm9sbGJhclRoZW1lUVN0eWxl
OjpwYWludFNjcm9sbENvcm5lcik6CisgICAgICAgICogcGxhdGZvcm0vcXQvU2Nyb2xsYmFyVGhl
bWVRU3R5bGUuaDogUmVuYW1lZCBmcm9tIFNvdXJjZS9XZWJLaXQvcXQvV2ViQ29yZVN1cHBvcnQv
U2Nyb2xsYmFyVGhlbWVRU3R5bGUuaC4KKyAgICAgICAgKFdlYkNvcmUpOgorICAgICAgICAoU2Ny
b2xsYmFyVGhlbWVRU3R5bGUpOgorICAgICAgICAoV2ViQ29yZTo6U2Nyb2xsYmFyVGhlbWVRU3R5
bGU6OnN0eWxlSW50ZXJmYWNlKToKKwogMjAxMi0wOS0yNiAgWmFuIERvYmVyc2VrICA8emFuZG9i
ZXJzZWtAZ21haWwuY29tPgogCiAgICAgICAgIFtHVEtdIEVuYWJsZSBzb21lIG9mIHRoZSB1bnN0
YWJsZSBDU1MgZmVhdHVyZXMKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nIGIv
U291cmNlL1dlYktpdC9DaGFuZ2VMb2cKaW5kZXggYTA5ZThkZjBkYzdmN2IxYjcwNTY4OTIwNTVm
MmI0ZTk1Y2FiZWFkZi4uYTU2NTg3ZmI0NjZhOTJiYWQ1N2M0ZjhlOTZiNGYzYzI5MWNjMjBkYSAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYktpdC9D
aGFuZ2VMb2cKQEAgLTEsMyArMSwxNCBAQAorMjAxMi0xMC0wMyAgU2ltb24gSGF1c21hbm4gIDxz
aW1vbi5oYXVzbWFubkBkaWdpYS5jb20+CisKKyAgICAgICAgW1F0XSBNYWtlIFJlbmRlclRoZW1l
UVN0eWxlL1Njcm9sbGJhclRoZW1lUVN0eWxlIGNvbXBpbGUgd2l0aG91dCBRU3R5bGUvUXRXaWRn
ZXRzCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD05ODI2
OAorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIEV4dHJh
Y3RlZCBRU3R5bGUvUVdpZGdldCByZWxhdGVkIGNvZGUgaW50byBhIFFXZWJTdHlsZSBjbGFzcyB0
aGF0IGltcGxlbWVudHMgdGhlIFFTdHlsZUludGVyZmFjZSBpbnRlcmZhY2UuCisKKyAgICAgICAg
KiBXZWJLaXQxLnBybzoKKwogMjAxMi0wOS0yNCAgQXJ2aWQgTmlsc3NvbiAgPGFuaWxzc29uQHJp
bS5jb20+CiAKICAgICAgICAgW0JsYWNrQmVycnldIEFkZCBjb29raWUgZGF0YWJhc2UgQVBJCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L3F0L0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJLaXQvcXQv
Q2hhbmdlTG9nCmluZGV4IDYxMmI4NjdkMjAxNTNiNGIyOTkxMWE1YjU3MTExN2U2ZWVmNmNmMzYu
LjQ3MTM4ODg4N2M0MjljNTEwMGE3MTk2ZmFkMGQ5YWMzY2Q3YzEzYWYgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJLaXQvcXQvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XZWJLaXQvcXQvQ2hhbmdlTG9n
CkBAIC0xLDMgKzEsNTggQEAKKzIwMTItMTAtMDMgIFNpbW9uIEhhdXNtYW5uICA8c2ltb24uaGF1
c21hbm5AZGlnaWEuY29tPgorCisgICAgICAgIFtRdF0gTWFrZSBSZW5kZXJUaGVtZVFTdHlsZS9T
Y3JvbGxiYXJUaGVtZVFTdHlsZSBjb21waWxlIHdpdGhvdXQgUVN0eWxlL1F0V2lkZ2V0cworICAg
ICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9OTgyNjgKKworICAg
ICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBFeHRyYWN0ZWQgUVN0
eWxlL1FXaWRnZXQgcmVsYXRlZCBjb2RlIGludG8gYSBRV2ViU3R5bGUgY2xhc3MgdGhhdCBpbXBs
ZW1lbnRzIHRoZSBRU3R5bGVJbnRlcmZhY2UgaW50ZXJmYWNlLgorCisgICAgICAgICogV2ViQ29y
ZVN1cHBvcnQvSW5pdFdlYkNvcmVRdC5jcHA6CisgICAgICAgIChXZWJDb3JlOjppbml0aWFsaXpl
V2ViQ29yZVF0KToKKyAgICAgICAgKiBXZWJDb3JlU3VwcG9ydC9RV2ViU3R5bGUuY3BwOiBBZGRl
ZC4KKyAgICAgICAgKFdlYktpdCk6CisgICAgICAgIChXZWJLaXQ6OmNvbnZlcnRUb1FTdHlsZVN0
YXRlKToKKyAgICAgICAgKFdlYktpdDo6Y29udmVydFRvUVN0eWxlU3ViQ29udHJvbCk6CisgICAg
ICAgIChXZWJLaXQ6OmluaXRHZW5lcmljU3R5bGVPcHRpb24pOgorICAgICAgICAoV2ViS2l0Ojpp
bml0U3BlY2lmaWNTdHlsZU9wdGlvbik6CisgICAgICAgIChNYXBwZWRTdHlsZU9wdGlvbik6Cisg
ICAgICAgIChXZWJLaXQ6Ok1hcHBlZFN0eWxlT3B0aW9uOjpNYXBwZWRTdHlsZU9wdGlvbik6Cisg
ICAgICAgIChXZWJLaXQ6OmNvbnZlcnRQaXhlbE1ldHJpYyk6CisgICAgICAgIChXZWJLaXQ6OmNv
bnZlcnRUb1FTdHlsZUludGVyZmFjZVN1YkNvbnRyb2wpOgorICAgICAgICAoV2ViS2l0OjpRV2Vi
U3R5bGU6OlFXZWJTdHlsZSk6CisgICAgICAgIChXZWJLaXQ6OlFXZWJTdHlsZTo6flFXZWJTdHls
ZSk6CisgICAgICAgIChXZWJLaXQ6OlFXZWJTdHlsZTo6YnV0dG9uU3ViRWxlbWVudFJlY3QpOgor
ICAgICAgICAoV2ViS2l0OjpRV2ViU3R5bGU6OmZpbmRGcmFtZUxpbmVXaWR0aCk6CisgICAgICAg
IChXZWJLaXQ6OlFXZWJTdHlsZTo6c2ltcGxlUGl4ZWxNZXRyaWMpOgorICAgICAgICAoV2ViS2l0
OjpRV2ViU3R5bGU6OmJ1dHRvbk1hcmdpbik6CisgICAgICAgIChXZWJLaXQ6OlFXZWJTdHlsZTo6
c2xpZGVyTGVuZ3RoKToKKyAgICAgICAgKFdlYktpdDo6UVdlYlN0eWxlOjpzbGlkZXJUaGlja25l
c3MpOgorICAgICAgICAoV2ViS2l0OjpRV2ViU3R5bGU6OnByb2dyZXNzQmFyQ2h1bmtXaWR0aCk6
CisgICAgICAgIChXZWJLaXQ6OlFXZWJTdHlsZTo6Z2V0QnV0dG9uTWV0cmljcyk6CisgICAgICAg
IChXZWJLaXQ6OlFXZWJTdHlsZTo6c2l6ZUZyb21Db250ZW50cyk6CisgICAgICAgIChXZWJLaXQ6
OlFXZWJTdHlsZTo6cGFpbnRCdXR0b24pOgorICAgICAgICAoV2ViS2l0OjpRV2ViU3R5bGU6OnBh
aW50VGV4dEZpZWxkKToKKyAgICAgICAgKFdlYktpdDo6UVdlYlN0eWxlOjpwYWludENvbWJvQm94
KToKKyAgICAgICAgKFdlYktpdDo6UVdlYlN0eWxlOjpwYWludENvbWJvQm94QXJyb3cpOgorICAg
ICAgICAoV2ViS2l0OjpRV2ViU3R5bGU6OnBhaW50U2xpZGVyVHJhY2spOgorICAgICAgICAoV2Vi
S2l0OjpRV2ViU3R5bGU6OnBhaW50U2xpZGVyVGh1bWIpOgorICAgICAgICAoV2ViS2l0OjpRV2Vi
U3R5bGU6OnBhaW50SW5uZXJTcGluQnV0dG9uKToKKyAgICAgICAgKFdlYktpdDo6UVdlYlN0eWxl
OjpwYWludFByb2dyZXNzQmFyKToKKyAgICAgICAgKFdlYktpdDo6UVdlYlN0eWxlOjpzY3JvbGxC
YXJFeHRlbnQpOgorICAgICAgICAoV2ViS2l0OjpRV2ViU3R5bGU6OnNjcm9sbEJhck1pZGRsZUNs
aWNrQWJzb2x1dGVQb3NpdGlvblN0eWxlSGludCk6CisgICAgICAgIChXZWJLaXQ6OlFXZWJTdHls
ZTo6cGFpbnRTY3JvbGxDb3JuZXIpOgorICAgICAgICAoV2ViS2l0OjpRV2ViU3R5bGU6OmhpdFRl
c3RTY3JvbGxCYXIpOgorICAgICAgICAoV2ViS2l0OjpRV2ViU3R5bGU6OnNjcm9sbEJhclN1YkNv
bnRyb2xSZWN0KToKKyAgICAgICAgKFdlYktpdDo6UVdlYlN0eWxlOjpwYWludFNjcm9sbEJhcik6
CisgICAgICAgIChXZWJLaXQ6OlFXZWJTdHlsZTo6d2lkZ2V0Rm9yUGFpbnRlcik6CisgICAgICAg
IChXZWJLaXQ6OlFXZWJTdHlsZTo6aXNWYWxpZCk6CisgICAgICAgIChXZWJLaXQ6OlFXZWJTdHls
ZTo6ZW5zdXJlU3R5bGUpOgorICAgICAgICAqIFdlYkNvcmVTdXBwb3J0L1FXZWJTdHlsZS5oOiBB
ZGRlZC4KKyAgICAgICAgKFdlYkNvcmUpOgorICAgICAgICAoV2ViS2l0KToKKyAgICAgICAgKFFX
ZWJTdHlsZSk6CisgICAgICAgIChXZWJLaXQ6OlFXZWJTdHlsZTo6Y3JlYXRlKToKKwogMjAxMi0w
OS0yNiAgU2ltb24gSGF1c21hbm4gIDxzaW1vbi5oYXVzbWFubkBkaWdpYS5jb20+CiAKICAgICAg
ICAgW1F0XSBSZW1vdmUgUXQgUXVpY2sgMSBzdXBwb3J0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9UYXJnZXQucHJpIGIvU291cmNlL1dlYkNvcmUvVGFyZ2V0LnByaQppbmRleCAyNDdjMjBl
YzVjMzZiYzQ2Y2UyODAwMGY1NDA4OWUwMTkzYWFhZmVjLi40MzZlYWU5MDIzMTg3NzEwODk0MGE3
M2M4N2JkZTA1NjJjZTExYmE5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9UYXJnZXQucHJp
CisrKyBiL1NvdXJjZS9XZWJDb3JlL1RhcmdldC5wcmkKQEAgLTIyMjksOCArMjIyOSwxMSBAQCBI
RUFERVJTICs9IFwKICAgICBwbGF0Zm9ybS9xdC9DbGlwYm9hcmRRdC5oIFwKICAgICBwbGF0Zm9y
bS9xdC9Db29raWVKYXJRdC5oIFwKICAgICBwbGF0Zm9ybS9xdC9RV2ViUGFnZUNsaWVudC5oIFwK
KyAgICBwbGF0Zm9ybS9xdC9RU3R5bGVJbnRlcmZhY2UuaCBcCisgICAgcGxhdGZvcm0vcXQvUmVu
ZGVyVGhlbWVRU3R5bGUuaCBcCiAgICAgcGxhdGZvcm0vcXQvUmVuZGVyVGhlbWVRdC5oIFwKICAg
ICBwbGF0Zm9ybS9xdC9SZW5kZXJUaGVtZVF0TW9iaWxlLmggXAorICAgIHBsYXRmb3JtL3F0L1Nj
cm9sbGJhclRoZW1lUVN0eWxlLmggXAogICAgIHBsYXRmb3JtL3F0L1VzZXJBZ2VudFF0LmggXAog
ICAgIHBsYXRmb3JtL1Njcm9sbGFibGVBcmVhLmggXAogICAgIHBsYXRmb3JtL1Njcm9sbEFuaW1h
dG9yLmggXApAQCAtMjgwMSw4ICsyODA0LDExIEBAIFNPVVJDRVMgKz0gXAogICAgIHBsYXRmb3Jt
L3F0L1Bhc3RlYm9hcmRRdC5jcHAgXAogICAgIHBsYXRmb3JtL3F0L1BsYXRmb3JtS2V5Ym9hcmRF
dmVudFF0LmNwcCBcCiAgICAgcGxhdGZvcm0vcXQvUGxhdGZvcm1TY3JlZW5RdC5jcHAgXAorICAg
IHBsYXRmb3JtL3F0L1FTdHlsZUludGVyZmFjZS5jcHAgXAorICAgIHBsYXRmb3JtL3F0L1JlbmRl
clRoZW1lUVN0eWxlLmNwcCBcCiAgICAgcGxhdGZvcm0vcXQvUmVuZGVyVGhlbWVRdC5jcHAgXAog
ICAgIHBsYXRmb3JtL3F0L1JlbmRlclRoZW1lUXRNb2JpbGUuY3BwIFwKKyAgICBwbGF0Zm9ybS9x
dC9TY3JvbGxiYXJUaGVtZVFTdHlsZS5jcHAgXAogICAgIHBsYXRmb3JtL3F0L1Njcm9sbGJhclRo
ZW1lUXQuY3BwIFwKICAgICBwbGF0Zm9ybS9xdC9TY3JvbGxWaWV3UXQuY3BwIFwKICAgICBwbGF0
Zm9ybS9xdC9TaGFyZWRUaW1lclF0LmNwcCBcCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9xdC9RU3R5bGVJbnRlcmZhY2UuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
cXQvUVN0eWxlSW50ZXJmYWNlLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5mY2Q2ZTUyZTBlZTQ5Njk1M2Y1ZTg1
YTViYWE4YzhhM2M4ZGUyMmY0Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vcXQvUVN0eWxlSW50ZXJmYWNlLmNwcApAQCAtMCwwICsxLDQ2IEBACisvKgorICogVGhp
cyBmaWxlIGlzIHBhcnQgb2YgdGhlIHRoZW1lIGltcGxlbWVudGF0aW9uIGZvciBmb3JtIGNvbnRy
b2xzIGluIFdlYkNvcmUuCisgKgorICogQ29weXJpZ2h0IChDKSAyMDEyIERpZ2lhIFBsYyBhbmQv
b3IgaXRzIHN1YnNpZGlhcnkoLWllcykuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTEtMjAxMiBOb2tp
YSBDb3Jwb3JhdGlvbiBhbmQvb3IgaXRzIHN1YnNpZGlhcnkoLWllcykuCisgKgorICogVGhpcyBs
aWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgor
ICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQ
dWJsaWMKKyAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5k
YXRpb247IGVpdGhlcgorICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBv
cHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmli
dXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQg
QU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1F
UkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0
aGUgR05VCisgKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWls
cy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGli
cmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsg
c2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bworICogdGhlIEZyZWUg
U29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9v
ciwKKyAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgorICoKKyAqLworCisjaW5jbHVkZSAi
Y29uZmlnLmgiCisjaW5jbHVkZSAiUVN0eWxlSW50ZXJmYWNlLmgiCisKKyNpbmNsdWRlICJRV2Vi
UGFnZUNsaWVudC5oIgorI2luY2x1ZGUgPENocm9tZS5oPgorI2luY2x1ZGUgPENocm9tZUNsaWVu
dC5oPgorI2luY2x1ZGUgPFBhZ2UuaD4KKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitRU3R5bGUq
IFFTdHlsZUludGVyZmFjZTo6c3R5bGVGb3JQYWdlKFBhZ2UqIHBhZ2UpCit7CisgICAgaWYgKCFw
YWdlKQorICAgICAgICByZXR1cm4gMDsKKyAgICBRV2ViUGFnZUNsaWVudCogcGFnZUNsaWVudCA9
IHBhZ2UtPmNocm9tZSgpLT5jbGllbnQoKS0+cGxhdGZvcm1QYWdlQ2xpZW50KCk7CisKKyAgICBp
ZiAoIXBhZ2VDbGllbnQpCisgICAgICAgIHJldHVybiAwOworCisgICAgcmV0dXJuIHBhZ2VDbGll
bnQtPnN0eWxlKCk7Cit9CisKK30KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L3F0L1FTdHlsZUludGVyZmFjZS5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vcXQvUVN0eWxl
SW50ZXJmYWNlLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uZTIxNTg4ODZjMjE0MzVlMTc4YmZhNzk0NDQxNDVjYTFk
ZTdmMGYwNQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3F0L1FT
dHlsZUludGVyZmFjZS5oCkBAIC0wLDAgKzEsMjA1IEBACisvKgorICogVGhpcyBmaWxlIGlzIHBh
cnQgb2YgdGhlIHRoZW1lIGltcGxlbWVudGF0aW9uIGZvciBmb3JtIGNvbnRyb2xzIGluIFdlYkNv
cmUuCisgKgorICogQ29weXJpZ2h0IChDKSAyMDEyIERpZ2lhIFBsYyBhbmQvb3IgaXRzIHN1YnNp
ZGlhcnkoLWllcykuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTEtMjAxMiBOb2tpYSBDb3Jwb3JhdGlv
biBhbmQvb3IgaXRzIHN1YnNpZGlhcnkoLWllcykuCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGZy
ZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0
IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAqIExp
Y2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhl
cgorICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBs
YXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUg
aG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZ
OyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElU
WSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiBM
aWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZ
b3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFs
IFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxl
IENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bworICogdGhlIEZyZWUgU29mdHdhcmUgRm91
bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKKyAqIEJvc3Rv
biwgTUEgMDIxMTAtMTMwMSwgVVNBLgorICoKKyAqLworI2lmbmRlZiBRU3R5bGVJbnRlcmZhY2Vf
aAorI2RlZmluZSBRU3R5bGVJbnRlcmZhY2VfaAorCisjaW5jbHVkZSA8UVBhbGV0dGU+CisjaW5j
bHVkZSA8UVJlY3Q+CisKK1FUX0JFR0lOX05BTUVTUEFDRQorY2xhc3MgUVN0eWxlOworUVRfRU5E
X05BTUVTUEFDRQorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK2NsYXNzIFBhZ2U7CitjbGFzcyBR
U3R5bGVJbnRlcmZhY2VPcHRpb247CisKK2NsYXNzIFFTdHlsZUludGVyZmFjZSB7CitwdWJsaWM6
CisgICAgZW51bSBCdXR0b25TdWJFbGVtZW50IHsKKyAgICAgICAgUHVzaEJ1dHRvbkxheW91dEl0
ZW0sCisgICAgICAgIFB1c2hCdXR0b25Db250ZW50cworICAgIH07CisKKyNkZWZpbmUgRk9SX0VB
Q0hfTUFQUEVEX1NUQVRFKEYsIFNFUEFSQVRPUikgXAorICAgIEYoU3RhdGVfTm9uZSwgMHgwMDAw
MDAwMCkgU0VQQVJBVE9SIFwKKyAgICBGKFN0YXRlX0VuYWJsZWQsIDB4MDAwMDAwMDEpIFNFUEFS
QVRPUiBcCisgICAgRihTdGF0ZV9SYWlzZWQsIDB4MDAwMDAwMDIpIFNFUEFSQVRPUiBcCisgICAg
RihTdGF0ZV9TdW5rZW4sIDB4MDAwMDAwMDQpIFNFUEFSQVRPUiBcCisgICAgRihTdGF0ZV9PZmYs
IDB4MDAwMDAwMDgpIFNFUEFSQVRPUiBcCisgICAgRihTdGF0ZV9Ob0NoYW5nZSwgMHgwMDAwMDAx
MCkgU0VQQVJBVE9SIFwKKyAgICBGKFN0YXRlX09uLCAweDAwMDAwMDIwKSBTRVBBUkFUT1IgXAor
ICAgIEYoU3RhdGVfRG93bkFycm93LCAweDAwMDAwMDQwKSBTRVBBUkFUT1IgXAorICAgIEYoU3Rh
dGVfSG9yaXpvbnRhbCwgMHgwMDAwMDA4MCkgU0VQQVJBVE9SIFwKKyAgICBGKFN0YXRlX0hhc0Zv
Y3VzLCAweDAwMDAwMTAwKSBTRVBBUkFUT1IgXAorICAgIEYoU3RhdGVfVG9wLCAweDAwMDAwMjAw
KSBTRVBBUkFUT1IgXAorICAgIEYoU3RhdGVfQm90dG9tLCAweDAwMDAwNDAwKSBTRVBBUkFUT1Ig
XAorICAgIEYoU3RhdGVfRm9jdXNBdEJvcmRlciwgMHgwMDAwMDgwMCkgU0VQQVJBVE9SIFwKKyAg
ICBGKFN0YXRlX0F1dG9SYWlzZSwgMHgwMDAwMTAwMCkgU0VQQVJBVE9SIFwKKyAgICBGKFN0YXRl
X01vdXNlT3ZlciwgMHgwMDAwMjAwMCkgU0VQQVJBVE9SIFwKKyAgICBGKFN0YXRlX1VwQXJyb3cs
IDB4MDAwMDQwMDApIFNFUEFSQVRPUiBcCisgICAgRihTdGF0ZV9TZWxlY3RlZCwgMHgwMDAwODAw
MCkgU0VQQVJBVE9SIFwKKyAgICBGKFN0YXRlX0FjdGl2ZSwgMHgwMDAxMDAwMCkgU0VQQVJBVE9S
IFwKKyAgICBGKFN0YXRlX1dpbmRvdywgMHgwMDAyMDAwMCkgU0VQQVJBVE9SIFwKKyAgICBGKFN0
YXRlX09wZW4sIDB4MDAwNDAwMDApIFNFUEFSQVRPUiBcCisgICAgRihTdGF0ZV9DaGlsZHJlbiwg
MHgwMDA4MDAwMCkgU0VQQVJBVE9SIFwKKyAgICBGKFN0YXRlX0l0ZW0sIDB4MDAxMDAwMDApIFNF
UEFSQVRPUiBcCisgICAgRihTdGF0ZV9TaWJsaW5nLCAweDAwMjAwMDAwKSBTRVBBUkFUT1IgXAor
ICAgIEYoU3RhdGVfRWRpdGluZywgMHgwMDQwMDAwMCkgU0VQQVJBVE9SIFwKKyAgICBGKFN0YXRl
X0tleWJvYXJkRm9jdXNDaGFuZ2UsIDB4MDA4MDAwMDApIFNFUEFSQVRPUiBcCisgICAgRihTdGF0
ZV9SZWFkT25seSwgMHgwMjAwMDAwMCkgU0VQQVJBVE9SIFwKKyAgICBGKFN0YXRlX1NtYWxsLCAw
eDA0MDAwMDAwKSBTRVBBUkFUT1IgXAorICAgIEYoU3RhdGVfTWluaSwgMHgwODAwMDAwKQorCisj
ZGVmaW5lIENPTU1BICwKKyNkZWZpbmUgU0VNSUNPTE9OIDsKKyNkZWZpbmUgREVGSU5FX01BUFBF
RF9TVEFURShOYW1lLCBWYWx1ZSkgXAorICAgIE5hbWUgPSBWYWx1ZQorCisgICAgLy8gIyMjIFJl
bW92ZSB1bnVzZWQgc3RhdGVzLgorICAgIGVudW0gU3RhdGVGbGFnIHsKKyAgICAgICAgRk9SX0VB
Q0hfTUFQUEVEX1NUQVRFKERFRklORV9NQVBQRURfU1RBVEUsIENPTU1BKQorICAgIH07CisgICAg
UV9ERUNMQVJFX0ZMQUdTKFN0YXRlLCBTdGF0ZUZsYWcpCisKKyNkZWZpbmUgRk9SX0VBQ0hfTUFQ
UEVEX01FVFJJQyhGLCBTRVBBUkFUT1IpIFwKKyAgICBGKFBNX0J1dHRvbk1hcmdpbikgU0VQQVJB
VE9SIFwKKyAgICBGKFBNX0RlZmF1bHRGcmFtZVdpZHRoKSBTRVBBUkFUT1IgXAorICAgIEYoUE1f
SW5kaWNhdG9yV2lkdGgpIFNFUEFSQVRPUiBcCisgICAgRihQTV9FeGNsdXNpdmVJbmRpY2F0b3JX
aWR0aCkgU0VQQVJBVE9SIFwKKyAgICBGKFBNX0J1dHRvbkljb25TaXplKQorCisjZGVmaW5lIERF
RklORV9NRVRSSUMoRikgRgorCisgICAgZW51bSBQaXhlbE1ldHJpYyB7CisgICAgICAgIEZPUl9F
QUNIX01BUFBFRF9NRVRSSUMoREVGSU5FX01FVFJJQywgQ09NTUEpCisgICAgfTsKKworICAgIGVu
dW0gQ29udGVudHNUeXBlIHsKKyAgICAgICAgQ1RfQ29tYm9Cb3gsCisgICAgICAgIENUX1B1c2hC
dXR0b24KKyAgICB9OworCisjZGVmaW5lIEZPUl9FQUNIX1NVQkNPTlRST0woRiwgU0VQQVJBVE9S
KSBcCisgICAgRihTQ19Ob25lLCAweDAwMDAwMDAwKSBTRVBBUkFUT1IgXAorICAgIEYoU0NfU2Ny
b2xsQmFyQWRkTGluZSwgMHgwMDAwMDAwMSkgU0VQQVJBVE9SIFwKKyAgICBGKFNDX1Njcm9sbEJh
clN1YkxpbmUsIDB4MDAwMDAwMDIpIFNFUEFSQVRPUiBcCisgICAgRihTQ19TY3JvbGxCYXJBZGRQ
YWdlLCAweDAwMDAwMDA0KSBTRVBBUkFUT1IgXAorICAgIEYoU0NfU2Nyb2xsQmFyU3ViUGFnZSwg
MHgwMDAwMDAwOCkgU0VQQVJBVE9SIFwKKyAgICBGKFNDX1Njcm9sbEJhckZpcnN0LCAweDAwMDAw
MDEwKSBTRVBBUkFUT1IgXAorICAgIEYoU0NfU2Nyb2xsQmFyTGFzdCwgMHgwMDAwMDAyMCkgU0VQ
QVJBVE9SIFwKKyAgICBGKFNDX1Njcm9sbEJhclNsaWRlciwgMHgwMDAwMDA0MCkgU0VQQVJBVE9S
IFwKKyAgICBGKFNDX1Njcm9sbEJhckdyb292ZSwgMHgwMDAwMDA4MCkKKworI2RlZmluZSBERUZJ
TkVfU1VCQ09OVFJPTChGLCBWYWx1ZSkgRgorCisgICAgZW51bSBTdWJDb250cm9sIHsKKyAgICAg
ICAgRk9SX0VBQ0hfU1VCQ09OVFJPTChERUZJTkVfU1VCQ09OVFJPTCwgQ09NTUEpCisgICAgfTsK
KworICAgIHZpcnR1YWwgflFTdHlsZUludGVyZmFjZSgpIHsgfQorCisgICAgdmlydHVhbCBRUmVj
dCBidXR0b25TdWJFbGVtZW50UmVjdChCdXR0b25TdWJFbGVtZW50IGJ1dHRvbkVsZW1lbnQsIFN0
YXRlLCBjb25zdCBRUmVjdCYgb3JpZ2luYWxSZWN0KSBjb25zdCA9IDA7CisKKyAgICB2aXJ0dWFs
IGludCBmaW5kRnJhbWVMaW5lV2lkdGgoKSBjb25zdCA9IDA7CisgICAgdmlydHVhbCBpbnQgc2lt
cGxlUGl4ZWxNZXRyaWMoUGl4ZWxNZXRyaWMsIFN0YXRlID0gU3RhdGVfTm9uZSwgUU9iamVjdCog
d2lkZ2V0ID0gMCkgY29uc3QgPSAwOworICAgIHZpcnR1YWwgaW50IGJ1dHRvbk1hcmdpbihTdGF0
ZSwgY29uc3QgUVJlY3QmIG9yaWdpbmFsUmVjdCkgY29uc3QgPSAwOworICAgIHZpcnR1YWwgaW50
IHNsaWRlckxlbmd0aChRdDo6T3JpZW50YXRpb24pIGNvbnN0ID0gMDsKKyAgICB2aXJ0dWFsIGlu
dCBzbGlkZXJUaGlja25lc3MoUXQ6Ok9yaWVudGF0aW9uKSBjb25zdCA9IDA7CisgICAgdmlydHVh
bCBpbnQgcHJvZ3Jlc3NCYXJDaHVua1dpZHRoKGNvbnN0IFFTaXplJikgY29uc3QgPSAwOworICAg
IHZpcnR1YWwgdm9pZCBnZXRCdXR0b25NZXRyaWNzKFFTdHJpbmcqIGJ1dHRvbkZvbnRGYW1pbHks
IGludCogYnV0dG9uRm9udFBpeGVsU2l6ZSkgY29uc3QgPSAwOworCisgICAgdmlydHVhbCBRU2l6
ZSBzaXplRnJvbUNvbnRlbnRzKENvbnRlbnRzVHlwZSwgU3RhdGUsIGNvbnN0IFFTaXplJiBjb250
ZW50c1NpemUpIGNvbnN0ID0gMDsKKworICAgIGVudW0gQnV0dG9uVHlwZSB7CisgICAgICAgIFB1
c2hCdXR0b24sCisgICAgICAgIFJhZGlvQnV0dG9uLAorICAgICAgICBDaGVja0JveAorICAgIH07
CisKKyAgICB2aXJ0dWFsIHZvaWQgcGFpbnRCdXR0b24oUVBhaW50ZXIqLCBCdXR0b25UeXBlLCBj
b25zdCBRU3R5bGVJbnRlcmZhY2VPcHRpb24mLCBRT2JqZWN0ICp3aWRnZXQpID0gMDsKKyAgICB2
aXJ0dWFsIHZvaWQgcGFpbnRUZXh0RmllbGQoUVBhaW50ZXIqLCBjb25zdCBRU3R5bGVJbnRlcmZh
Y2VPcHRpb24mLCBRT2JqZWN0KiB3aWRnZXRPYmopID0gMDsKKyAgICB2aXJ0dWFsIHZvaWQgcGFp
bnRDb21ib0JveChRUGFpbnRlciosIGNvbnN0IFFTdHlsZUludGVyZmFjZU9wdGlvbiYsIFFPYmpl
Y3QgKndpZGdldE9iaikgPSAwOworICAgIHZpcnR1YWwgdm9pZCBwYWludENvbWJvQm94QXJyb3co
UVBhaW50ZXIqLCBjb25zdCBRU3R5bGVJbnRlcmZhY2VPcHRpb24mLCBRT2JqZWN0ICp3aWRnZXRP
YmopID0gMDsKKworICAgIHZpcnR1YWwgdm9pZCBwYWludFNsaWRlclRyYWNrKFFQYWludGVyKiwg
Y29uc3QgUVN0eWxlSW50ZXJmYWNlT3B0aW9uJiwgUU9iamVjdCAqd2lkZ2V0T2JqKSA9IDA7Cisg
ICAgdmlydHVhbCB2b2lkIHBhaW50U2xpZGVyVGh1bWIoUVBhaW50ZXIqLCBjb25zdCBRU3R5bGVJ
bnRlcmZhY2VPcHRpb24mLCBRT2JqZWN0ICp3aWRnZXRPYmopID0gMDsKKyAgICB2aXJ0dWFsIHZv
aWQgcGFpbnRJbm5lclNwaW5CdXR0b24oUVBhaW50ZXIqLCBjb25zdCBRU3R5bGVJbnRlcmZhY2VP
cHRpb24mLCBib29sIHNwaW5Cb3hVcCwgUU9iamVjdCogd2lkZ2V0T2JqKSA9IDA7CisgICAgdmly
dHVhbCB2b2lkIHBhaW50UHJvZ3Jlc3NCYXIoUVBhaW50ZXIqLCBjb25zdCBRU3R5bGVJbnRlcmZh
Y2VPcHRpb24mLCBkb3VibGUgcHJvZ3Jlc3MsIGRvdWJsZSBhbmltYXRpb25Qcm9ncmVzcywgUU9i
amVjdCogd2lkZ2V0T2JqKSA9IDA7CisKKyAgICB2aXJ0dWFsIGludCBzY3JvbGxCYXJFeHRlbnQo
Ym9vbCBtaW5pKSA9IDA7CisgICAgdmlydHVhbCBib29sIHNjcm9sbEJhck1pZGRsZUNsaWNrQWJz
b2x1dGVQb3NpdGlvblN0eWxlSGludCgpIGNvbnN0ID0gMDsKKyAgICB2aXJ0dWFsIHZvaWQgcGFp
bnRTY3JvbGxDb3JuZXIoUVBhaW50ZXIqLCBjb25zdCBRUmVjdCYsIFFPYmplY3QqIHdpZGdldE9i
aikgPSAwOworCisgICAgdmlydHVhbCBTdWJDb250cm9sIGhpdFRlc3RTY3JvbGxCYXIoY29uc3Qg
UVN0eWxlSW50ZXJmYWNlT3B0aW9uJiwgY29uc3QgUVBvaW50JiBwb3MpID0gMDsKKyAgICB2aXJ0
dWFsIFFSZWN0IHNjcm9sbEJhclN1YkNvbnRyb2xSZWN0KGNvbnN0IFFTdHlsZUludGVyZmFjZU9w
dGlvbiYsIFN1YkNvbnRyb2wpID0gMDsKKyAgICB2aXJ0dWFsIHZvaWQgcGFpbnRTY3JvbGxCYXIo
UVBhaW50ZXIqLCBjb25zdCBRU3R5bGVJbnRlcmZhY2VPcHRpb24mLCBRT2JqZWN0KiB3aWRnZXRP
YmopID0gMDsKKworICAgIHZpcnR1YWwgUU9iamVjdCogd2lkZ2V0Rm9yUGFpbnRlcihRUGFpbnRl
ciopID0gMDsKKworICAgIHZpcnR1YWwgYm9vbCBpc1ZhbGlkKCkgY29uc3QgPSAwOworCisgICAg
c3RhdGljIFFTdHlsZSogc3R5bGVGb3JQYWdlKFBhZ2UqKTsKK307CisKK1FfREVDTEFSRV9PUEVS
QVRPUlNfRk9SX0ZMQUdTKFFTdHlsZUludGVyZmFjZTo6U3RhdGUpCisKK3N0cnVjdCBRU3R5bGVJ
bnRlcmZhY2VPcHRpb24geworICAgIFFTdHlsZUludGVyZmFjZU9wdGlvbigpCisgICAgICAgIDog
c3RhdGUoUVN0eWxlSW50ZXJmYWNlOjpTdGF0ZV9Ob25lKQorICAgICAgICAsIGRpcmVjdGlvbihR
dDo6TGF5b3V0RGlyZWN0aW9uQXV0bykKKyAgICB7CisgICAgICAgIHNsaWRlci5vcmllbnRhdGlv
biA9IFF0OjpIb3Jpem9udGFsOworICAgICAgICBzbGlkZXIudXBzaWRlRG93biA9IGZhbHNlOwor
ICAgICAgICBzbGlkZXIubWluaW11bSA9IDA7CisgICAgICAgIHNsaWRlci5tYXhpbXVtID0gMDsK
KyAgICAgICAgc2xpZGVyLnBvc2l0aW9uID0gMDsKKyAgICAgICAgc2xpZGVyLnZhbHVlID0gMDsK
KyAgICAgICAgc2xpZGVyLnNpbmdsZVN0ZXAgPSAwOworICAgICAgICBzbGlkZXIucGFnZVN0ZXAg
PSAwOworICAgICAgICBzbGlkZXIuYWN0aXZlU3ViQ29udHJvbHMgPSBRU3R5bGVJbnRlcmZhY2U6
OlNDX05vbmU7CisgICAgfQorCisgICAgUVN0eWxlSW50ZXJmYWNlOjpTdGF0ZSBzdGF0ZTsKKyAg
ICBRUmVjdCByZWN0OworICAgIFF0OjpMYXlvdXREaXJlY3Rpb24gZGlyZWN0aW9uOworICAgIFFQ
YWxldHRlIHBhbGV0dGU7CisKKyAgICAvLyBTbGlkZXIgZmVhdHVyZXMKKyAgICBzdHJ1Y3Qgewor
ICAgICAgICBRdDo6T3JpZW50YXRpb24gb3JpZW50YXRpb247CisgICAgICAgIGJvb2wgdXBzaWRl
RG93bjsKKyAgICAgICAgaW50IG1pbmltdW07CisgICAgICAgIGludCBtYXhpbXVtOworICAgICAg
ICBpbnQgcG9zaXRpb247CisgICAgICAgIGludCB2YWx1ZTsKKyAgICAgICAgaW50IHNpbmdsZVN0
ZXA7CisgICAgICAgIGludCBwYWdlU3RlcDsKKyAgICAgICAgUVN0eWxlSW50ZXJmYWNlOjpTdWJD
b250cm9sIGFjdGl2ZVN1YkNvbnRyb2xzOworICAgIH0gc2xpZGVyOworfTsKKworfQorCisjZW5k
aWYgLy8gUVN0eWxlSW50ZXJmYWNlX2gKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL3F0L1JlbmRlclRoZW1lUVN0eWxlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3F0
L1JlbmRlclRoZW1lUVN0eWxlLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi40MDhkMDAzZThjNzcxNjQxMTFmYTY4
NzAxZTEwYWUzN2UxZGI5ZTg1Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vcXQvUmVuZGVyVGhlbWVRU3R5bGUuY3BwCkBAIC0wLDAgKzEsNjMwIEBACisvKgorICog
VGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIFdlYktpdCBwcm9qZWN0LgorICoKKyAqIENvcHlyaWdo
dCAoQykgMjAwOC0yMDEyIE5va2lhIENvcnBvcmF0aW9uIGFuZC9vciBpdHMgc3Vic2lkaWFyeSgt
aWVzKQorICoKKyAqIENvcHlyaWdodCAoQykgMjAwNiBaYWNrIFJ1c2luIDx6YWNrQGtkZS5vcmc+
CisgKiAgICAgICAgICAgICAgIDIwMDYgRGlyayBNdWVsbGVyIDxtdWVsbGVyQGtkZS5vcmc+Cisg
KiAgICAgICAgICAgICAgIDIwMDYgTmlrb2xhcyBaaW1tZXJtYW5uIDx6aW1tZXJtYW5uQGtkZS5v
cmc+CisgKiBDb3B5cmlnaHQgKEMpIDIwMDggSG9sZ2VyIEhhbnMgUGV0ZXIgRnJleXRoZXIKKyAq
CisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNv
ZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRl
ciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNl
IGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAq
IHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIg
dmVyc2lvbi4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUg
dGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0
aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3Ig
RklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogTGlicmFy
eSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNo
b3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJs
aWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZ
SU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRp
b24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCisgKiBCb3N0b24sIE1B
IDAyMTEwLTEzMDEsIFVTQS4KKyAqCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1
ZGUgIlJlbmRlclRoZW1lUVN0eWxlLmgiCisKKyNpbmNsdWRlICJDU1NGb250U2VsZWN0b3IuaCIK
KyNpbmNsdWRlICJDU1NWYWx1ZUtleXdvcmRzLmgiCisjaW5jbHVkZSAiQ2hyb21lLmgiCisjaW5j
bHVkZSAiQ2hyb21lQ2xpZW50LmgiCisjaW5jbHVkZSAiQ29sb3IuaCIKKyNpbmNsdWRlICJEb2N1
bWVudC5oIgorI2luY2x1ZGUgIkZvbnQuaCIKKyNpbmNsdWRlICJGb250U2VsZWN0b3IuaCIKKyNp
bmNsdWRlICJHcmFwaGljc0NvbnRleHQuaCIKKyNpbmNsdWRlICJIVE1MSW5wdXRFbGVtZW50Lmgi
CisjaW5jbHVkZSAiSFRNTE5hbWVzLmgiCisjaW5jbHVkZSAiTG9jYWxpemVkU3RyaW5ncy5oIgor
I2luY2x1ZGUgIk5vdEltcGxlbWVudGVkLmgiCisjaW5jbHVkZSAiUGFnZS5oIgorI2luY2x1ZGUg
IlBhaW50SW5mby5oIgorI2luY2x1ZGUgIlFXZWJQYWdlQ2xpZW50LmgiCisjaW5jbHVkZSAiUmVu
ZGVyQm94LmgiCisjaWYgRU5BQkxFKFBST0dSRVNTX0VMRU1FTlQpCisjaW5jbHVkZSAiUmVuZGVy
UHJvZ3Jlc3MuaCIKKyNlbmRpZgorI2luY2x1ZGUgIlJlbmRlclNsaWRlci5oIgorI2luY2x1ZGUg
IlNjcm9sbGJhclRoZW1lUVN0eWxlLmgiCisjaW5jbHVkZSAiU2xpZGVyVGh1bWJFbGVtZW50Lmgi
CisjaW5jbHVkZSAiU3R5bGVSZXNvbHZlci5oIgorI2luY2x1ZGUgIlVzZXJBZ2VudFN0eWxlU2hl
ZXRzLmgiCisKKyNpbmNsdWRlIDxRUGFpbnRlcj4KKworbmFtZXNwYWNlIFdlYkNvcmUgeworCit1
c2luZyBuYW1lc3BhY2UgSFRNTE5hbWVzOworCitRU2hhcmVkUG9pbnRlcjxTdHlsZVBhaW50ZXI+
IFJlbmRlclRoZW1lUVN0eWxlOjpnZXRTdHlsZVBhaW50ZXIoY29uc3QgUGFpbnRJbmZvJiBwYWlu
dEluZm8pCit7CisgICAgcmV0dXJuIFFTaGFyZWRQb2ludGVyPFN0eWxlUGFpbnRlcj4obmV3IFN0
eWxlUGFpbnRlclFTdHlsZSh0aGlzLCBwYWludEluZm8sIC8qUmVuZGVyT2JqZWN0Ki8wKSk7Cit9
CisKK1N0eWxlUGFpbnRlclFTdHlsZTo6U3R5bGVQYWludGVyUVN0eWxlKFJlbmRlclRoZW1lUVN0
eWxlKiB0aGVtZSwgY29uc3QgUGFpbnRJbmZvJiBwYWludEluZm8sIFJlbmRlck9iamVjdCogcmVu
ZGVyT2JqZWN0KQorICAgIDogU3R5bGVQYWludGVyKHRoZW1lLCBwYWludEluZm8pCisgICAgLCBz
dHlsZUludGVyZmFjZSh0aGVtZS0+c3R5bGVJbnRlcmZhY2UoKSkKKyAgICAsIGFwcGVhcmFuY2Uo
Tm9Db250cm9sUGFydCkKK3sKKyAgICBpbml0KHBhaW50SW5mby5jb250ZXh0ID8gcGFpbnRJbmZv
LmNvbnRleHQgOiAwKTsKKyAgICBpZiAocmVuZGVyT2JqZWN0KQorICAgICAgICBhcHBlYXJhbmNl
ID0gdGhlbWUtPmluaXRpYWxpemVDb21tb25RU3R5bGVPcHRpb25zKHN0eWxlT3B0aW9uLCByZW5k
ZXJPYmplY3QpOworfQorCitTdHlsZVBhaW50ZXJRU3R5bGU6OlN0eWxlUGFpbnRlclFTdHlsZShT
Y3JvbGxiYXJUaGVtZVFTdHlsZSogdGhlbWUsIEdyYXBoaWNzQ29udGV4dCogY29udGV4dCkKKyAg
ICA6IFN0eWxlUGFpbnRlcigpCisgICAgLCBzdHlsZUludGVyZmFjZSh0aGVtZS0+c3R5bGVJbnRl
cmZhY2UoKSkKKyAgICAsIGFwcGVhcmFuY2UoTm9Db250cm9sUGFydCkKK3sKKyAgICBpbml0KGNv
bnRleHQpOworfQorCit2b2lkIFN0eWxlUGFpbnRlclFTdHlsZTo6aW5pdChHcmFwaGljc0NvbnRl
eHQqIGNvbnRleHQpCit7CisgICAgcGFpbnRlciA9IHN0YXRpY19jYXN0PFFQYWludGVyKj4oY29u
dGV4dC0+cGxhdGZvcm1Db250ZXh0KCkpOworICAgIHdpZGdldCA9IHN0eWxlSW50ZXJmYWNlLT53
aWRnZXRGb3JQYWludGVyKHBhaW50ZXIpOworCisgICAgaWYgKHdpZGdldCkgeworICAgICAgICBz
dHlsZU9wdGlvbi5wYWxldHRlID0gd2lkZ2V0LT5wcm9wZXJ0eSgicGFsZXR0ZSIpLnZhbHVlPFFQ
YWxldHRlPigpOworICAgICAgICBzdHlsZU9wdGlvbi5yZWN0ID0gd2lkZ2V0LT5wcm9wZXJ0eSgi
cmVjdCIpLnZhbHVlPFFSZWN0PigpOworICAgICAgICBzdHlsZU9wdGlvbi5kaXJlY3Rpb24gPSBz
dGF0aWNfY2FzdDxRdDo6TGF5b3V0RGlyZWN0aW9uPih3aWRnZXQtPnByb3BlcnR5KCJsYXlvdXRE
aXJlY3Rpb24iKS50b0ludCgpKTsKKyAgICB9CisKKyAgICBTdHlsZVBhaW50ZXI6OmluaXQoY29u
dGV4dCk7Cit9CisKK1Bhc3NSZWZQdHI8UmVuZGVyVGhlbWU+IFJlbmRlclRoZW1lUVN0eWxlOjpj
cmVhdGUoUGFnZSogcGFnZSkKK3sKKyAgICByZXR1cm4gYWRvcHRSZWYobmV3IFJlbmRlclRoZW1l
UVN0eWxlKHBhZ2UpKTsKK30KKworc3RhdGljIFF0U3R5bGVGYWN0b3J5RnVuY3Rpb24gc3R5bGVG
YWN0b3J5RnVuY3Rpb247CisKK3ZvaWQgUmVuZGVyVGhlbWVRU3R5bGU6OnNldFN0eWxlRmFjdG9y
eUZ1bmN0aW9uKFF0U3R5bGVGYWN0b3J5RnVuY3Rpb24gZnVuY3Rpb24pCit7CisgICAgc3R5bGVG
YWN0b3J5RnVuY3Rpb24gPSBmdW5jdGlvbjsKK30KKworUXRTdHlsZUZhY3RvcnlGdW5jdGlvbiBS
ZW5kZXJUaGVtZVFTdHlsZTo6c3R5bGVGYWN0b3J5KCkKK3sKKyAgICByZXR1cm4gc3R5bGVGYWN0
b3J5RnVuY3Rpb247Cit9CisKK1JlbmRlclRoZW1lUVN0eWxlOjpSZW5kZXJUaGVtZVFTdHlsZShQ
YWdlKiBwYWdlKQorICAgIDogUmVuZGVyVGhlbWVRdChwYWdlKQorICAgICwgbV9zdHlsZUludGVy
ZmFjZShhZG9wdFB0cihzdHlsZUZhY3RvcnlGdW5jdGlvbihwYWdlKSkpCit7CisgICAgaW50IGJ1
dHRvblBpeGVsU2l6ZSA9IDA7CisgICAgbV9zdHlsZUludGVyZmFjZS0+Z2V0QnV0dG9uTWV0cmlj
cygmbV9idXR0b25Gb250RmFtaWx5LCAmYnV0dG9uUGl4ZWxTaXplKTsKKyNpZmRlZiBRX1dTX01B
QworICAgIG1fYnV0dG9uRm9udFBpeGVsU2l6ZSA9IGJ1dHRvblBpeGVsU2l6ZTsKKyNlbmRpZgor
fQorCitSZW5kZXJUaGVtZVFTdHlsZTo6flJlbmRlclRoZW1lUVN0eWxlKCkKK3sKK30KKwordm9p
ZCBSZW5kZXJUaGVtZVFTdHlsZTo6c2V0UGFsZXR0ZUZyb21QYWdlQ2xpZW50SWZFeGlzdHMoUVBh
bGV0dGUmIHBhbGV0dGUpIGNvbnN0Cit7CisgICAgaWYgKCFtX3BhZ2UpCisgICAgICAgIHJldHVy
bjsKKworICAgIEFTU0VSVChtX3BhZ2UtPmNocm9tZSgpKTsKKyAgICBDaHJvbWVDbGllbnQqIGNo
cm9tZUNsaWVudCA9IG1fcGFnZS0+Y2hyb21lKCktPmNsaWVudCgpOworICAgIGlmICghY2hyb21l
Q2xpZW50KQorICAgICAgICByZXR1cm47CisKKyAgICBpZiAoUVdlYlBhZ2VDbGllbnQqIHBhZ2VD
bGllbnQgPSBjaHJvbWVDbGllbnQtPnBsYXRmb3JtUGFnZUNsaWVudCgpKQorICAgICAgICBwYWxl
dHRlID0gcGFnZUNsaWVudC0+cGFsZXR0ZSgpOworfQorCitRUmVjdCBSZW5kZXJUaGVtZVFTdHls
ZTo6aW5mbGF0ZUJ1dHRvblJlY3QoY29uc3QgUVJlY3QmIG9yaWdpbmFsUmVjdCkgY29uc3QKK3sK
KyAgICBRUmVjdCBsYXlvdXRSZWN0ID0gbV9zdHlsZUludGVyZmFjZS0+YnV0dG9uU3ViRWxlbWVu
dFJlY3QoUVN0eWxlSW50ZXJmYWNlOjpQdXNoQnV0dG9uTGF5b3V0SXRlbSwgUVN0eWxlSW50ZXJm
YWNlOjpTdGF0ZV9TbWFsbCwgb3JpZ2luYWxSZWN0KTsKKyAgICBpZiAoIWxheW91dFJlY3QuaXNO
dWxsKCkpIHsKKyAgICAgICAgaW50IHBhZGRpbmdMZWZ0ID0gbGF5b3V0UmVjdC5sZWZ0KCkgLSBv
cmlnaW5hbFJlY3QubGVmdCgpOworICAgICAgICBpbnQgcGFkZGluZ1JpZ2h0ID0gb3JpZ2luYWxS
ZWN0LnJpZ2h0KCkgLSBsYXlvdXRSZWN0LnJpZ2h0KCk7CisgICAgICAgIGludCBwYWRkaW5nVG9w
ID0gbGF5b3V0UmVjdC50b3AoKSAtIG9yaWdpbmFsUmVjdC50b3AoKTsKKyAgICAgICAgaW50IHBh
ZGRpbmdCb3R0b20gPSBvcmlnaW5hbFJlY3QuYm90dG9tKCkgLSBsYXlvdXRSZWN0LmJvdHRvbSgp
OworCisgICAgICAgIHJldHVybiBvcmlnaW5hbFJlY3QuYWRqdXN0ZWQoLXBhZGRpbmdMZWZ0LCAt
cGFkZGluZ1RvcCwgcGFkZGluZ1JpZ2h0LCBwYWRkaW5nQm90dG9tKTsKKyAgICB9CisgICAgcmV0
dXJuIG9yaWdpbmFsUmVjdDsKK30KKwordm9pZCBSZW5kZXJUaGVtZVFTdHlsZTo6Y29tcHV0ZVNp
emVCYXNlZE9uU3R5bGUoUmVuZGVyU3R5bGUqIHJlbmRlclN0eWxlKSBjb25zdAoreworICAgIFFT
aXplIHNpemUoMCwgMCk7CisgICAgY29uc3QgUUZvbnRNZXRyaWNzIGZtKHJlbmRlclN0eWxlLT5m
b250KCkuc3ludGhldGljRm9udCgpKTsKKworICAgIHN3aXRjaCAocmVuZGVyU3R5bGUtPmFwcGVh
cmFuY2UoKSkgeworICAgIGNhc2UgVGV4dEFyZWFQYXJ0OgorICAgIGNhc2UgU2VhcmNoRmllbGRQ
YXJ0OgorICAgIGNhc2UgVGV4dEZpZWxkUGFydDogeworICAgICAgICBpbnQgcGFkZGluZyA9IG1f
c3R5bGVJbnRlcmZhY2UtPmZpbmRGcmFtZUxpbmVXaWR0aCgpOworICAgICAgICByZW5kZXJTdHls
ZS0+c2V0UGFkZGluZ0xlZnQoTGVuZ3RoKHBhZGRpbmcsIEZpeGVkKSk7CisgICAgICAgIHJlbmRl
clN0eWxlLT5zZXRQYWRkaW5nUmlnaHQoTGVuZ3RoKHBhZGRpbmcsIEZpeGVkKSk7CisgICAgICAg
IHJlbmRlclN0eWxlLT5zZXRQYWRkaW5nVG9wKExlbmd0aChwYWRkaW5nLCBGaXhlZCkpOworICAg
ICAgICByZW5kZXJTdHlsZS0+c2V0UGFkZGluZ0JvdHRvbShMZW5ndGgocGFkZGluZywgRml4ZWQp
KTsKKyAgICAgICAgYnJlYWs7CisgICAgfQorICAgIGRlZmF1bHQ6CisgICAgICAgIGJyZWFrOwor
ICAgIH0KKyAgICAvLyBJZiB0aGUgd2lkdGggYW5kIGhlaWdodCBhcmUgYm90aCBzcGVjaWZpZWQs
IHRoZW4gd2UgaGF2ZSBub3RoaW5nIHRvIGRvLgorICAgIGlmICghcmVuZGVyU3R5bGUtPndpZHRo
KCkuaXNJbnRyaW5zaWNPckF1dG8oKSAmJiAhcmVuZGVyU3R5bGUtPmhlaWdodCgpLmlzQXV0bygp
KQorICAgICAgICByZXR1cm47CisKKyAgICBzd2l0Y2ggKHJlbmRlclN0eWxlLT5hcHBlYXJhbmNl
KCkpIHsKKyAgICBjYXNlIENoZWNrYm94UGFydDogeworICAgICAgICBpbnQgY2hlY2tCb3hXaWR0
aCA9IG1fc3R5bGVJbnRlcmZhY2UtPnNpbXBsZVBpeGVsTWV0cmljKFFTdHlsZUludGVyZmFjZTo6
UE1fSW5kaWNhdG9yV2lkdGgsIFFTdHlsZUludGVyZmFjZTo6U3RhdGVfU21hbGwpOworICAgICAg
ICBjaGVja0JveFdpZHRoICo9IHJlbmRlclN0eWxlLT5lZmZlY3RpdmVab29tKCk7CisgICAgICAg
IHNpemUgPSBRU2l6ZShjaGVja0JveFdpZHRoLCBjaGVja0JveFdpZHRoKTsKKyAgICAgICAgYnJl
YWs7CisgICAgfQorICAgIGNhc2UgUmFkaW9QYXJ0OiB7CisgICAgICAgIGludCByYWRpb1dpZHRo
ID0gbV9zdHlsZUludGVyZmFjZS0+c2ltcGxlUGl4ZWxNZXRyaWMoUVN0eWxlSW50ZXJmYWNlOjpQ
TV9FeGNsdXNpdmVJbmRpY2F0b3JXaWR0aCwgUVN0eWxlSW50ZXJmYWNlOjpTdGF0ZV9TbWFsbCk7
CisgICAgICAgIHJhZGlvV2lkdGggKj0gcmVuZGVyU3R5bGUtPmVmZmVjdGl2ZVpvb20oKTsKKyAg
ICAgICAgc2l6ZSA9IFFTaXplKHJhZGlvV2lkdGgsIHJhZGlvV2lkdGgpOworICAgICAgICBicmVh
azsKKyAgICB9CisgICAgY2FzZSBQdXNoQnV0dG9uUGFydDoKKyAgICBjYXNlIEJ1dHRvblBhcnQ6
IHsKKyAgICAgICAgUVNpemUgY29udGVudFNpemUgPSBmbS5zaXplKFF0OjpUZXh0U2hvd01uZW1v
bmljLCBRU3RyaW5nOjpmcm9tTGF0aW4xKCJYIikpOworICAgICAgICBRU2l6ZSBwdXNoQnV0dG9u
U2l6ZSA9IG1fc3R5bGVJbnRlcmZhY2UtPnNpemVGcm9tQ29udGVudHMoUVN0eWxlSW50ZXJmYWNl
OjpDVF9QdXNoQnV0dG9uLCBRU3R5bGVJbnRlcmZhY2U6OlN0YXRlX1NtYWxsLCBjb250ZW50U2l6
ZSk7CisgICAgICAgIFFSZWN0IGxheW91dFJlY3QgPSBtX3N0eWxlSW50ZXJmYWNlLT5idXR0b25T
dWJFbGVtZW50UmVjdChRU3R5bGVJbnRlcmZhY2U6OlB1c2hCdXR0b25MYXlvdXRJdGVtLCBRU3R5
bGVJbnRlcmZhY2U6OlN0YXRlX1NtYWxsLCBRUmVjdCgwLCAwLCBwdXNoQnV0dG9uU2l6ZS53aWR0
aCgpLCBwdXNoQnV0dG9uU2l6ZS5oZWlnaHQoKSkpOworCisgICAgICAgIC8vIElmIHRoZSBzdHls
ZSBzdXBwb3J0cyBsYXlvdXQgcmVjdHMgd2UgdXNlIHRoYXQsIGFuZCAgY29tcGVuc2F0ZSBhY2Nv
cmRpbmdseQorICAgICAgICAvLyBpbiBwYWludEJ1dHRvbigpIGJlbG93LgorICAgICAgICBpZiAo
IWxheW91dFJlY3QuaXNOdWxsKCkpCisgICAgICAgICAgICBzaXplLnNldEhlaWdodChsYXlvdXRS
ZWN0LmhlaWdodCgpKTsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgc2l6ZS5zZXRIZWlnaHQo
cHVzaEJ1dHRvblNpemUuaGVpZ2h0KCkpOworCisgICAgICAgIGJyZWFrOworICAgIH0KKyAgICBj
YXNlIE1lbnVsaXN0UGFydDogeworICAgICAgICBpbnQgY29udGVudEhlaWdodCA9IHFNYXgoZm0u
bGluZVNwYWNpbmcoKSwgMTQpICsgMjsKKyAgICAgICAgUVNpemUgbWVudUxpc3RTaXplID0gbV9z
dHlsZUludGVyZmFjZS0+c2l6ZUZyb21Db250ZW50cyhRU3R5bGVJbnRlcmZhY2U6OkNUX0NvbWJv
Qm94LCBRU3R5bGVJbnRlcmZhY2U6OlN0YXRlX1NtYWxsLCBRU2l6ZSgwLCBjb250ZW50SGVpZ2h0
KSk7CisgICAgICAgIHNpemUuc2V0SGVpZ2h0KG1lbnVMaXN0U2l6ZS5oZWlnaHQoKSk7CisgICAg
ICAgIGJyZWFrOworICAgIH0KKyAgICBkZWZhdWx0OgorICAgICAgICBicmVhazsKKyAgICB9CisK
KyAgICAvLyBGSVhNRTogQ2hlY2sgaXMgZmxhd2VkLCBzaW5jZSBpdCBkb2Vzbid0IHRha2UgbWlu
LXdpZHRoL21heC13aWR0aCBpbnRvIGFjY291bnQuCisgICAgaWYgKHJlbmRlclN0eWxlLT53aWR0
aCgpLmlzSW50cmluc2ljT3JBdXRvKCkgJiYgc2l6ZS53aWR0aCgpID4gMCkKKyAgICAgICAgcmVu
ZGVyU3R5bGUtPnNldE1pbldpZHRoKExlbmd0aChzaXplLndpZHRoKCksIEZpeGVkKSk7CisgICAg
aWYgKHJlbmRlclN0eWxlLT5oZWlnaHQoKS5pc0F1dG8oKSAmJiBzaXplLmhlaWdodCgpID4gMCkK
KyAgICAgICAgcmVuZGVyU3R5bGUtPnNldE1pbkhlaWdodChMZW5ndGgoc2l6ZS5oZWlnaHQoKSwg
Rml4ZWQpKTsKK30KKworCisKK3ZvaWQgUmVuZGVyVGhlbWVRU3R5bGU6OmFkanVzdEJ1dHRvblN0
eWxlKFN0eWxlUmVzb2x2ZXIqIHN0eWxlUmVzb2x2ZXIsIFJlbmRlclN0eWxlKiBzdHlsZSwgRWxl
bWVudCopIGNvbnN0Cit7CisgICAgLy8gRGl0Y2ggdGhlIGJvcmRlci4KKyAgICBzdHlsZS0+cmVz
ZXRCb3JkZXIoKTsKKworI2lmZGVmIFFfV1NfTUFDCisgICAgaWYgKHN0eWxlLT5hcHBlYXJhbmNl
KCkgPT0gUHVzaEJ1dHRvblBhcnQpIHsKKyAgICAgICAgLy8gVGhlIE1hYyBwb3J0cyBpZ25vcmUg
dGhlIHNwZWNpZmllZCBoZWlnaHQgZm9yIDxpbnB1dCB0eXBlPSJidXR0b24iPiBlbGVtZW50cwor
ICAgICAgICAvLyB1bmxlc3MgYSBib3JkZXIgYW5kL29yIGJhY2tncm91bmQgQ1NTIHByb3BlcnR5
IGlzIGFsc28gc3BlY2lmaWVkLgorICAgICAgICBzdHlsZS0+c2V0SGVpZ2h0KExlbmd0aChBdXRv
KSk7CisgICAgfQorI2VuZGlmCisKKyAgICBGb250RGVzY3JpcHRpb24gZm9udERlc2NyaXB0aW9u
ID0gc3R5bGUtPmZvbnREZXNjcmlwdGlvbigpOworICAgIGZvbnREZXNjcmlwdGlvbi5zZXRJc0Fi
c29sdXRlU2l6ZSh0cnVlKTsKKworI2lmZGVmIFFfV1NfTUFDIC8vIFVzZSBmaXhlZCBmb250IHNp
emUgYW5kIGZhbWlseSBvbiBNYWMgKGxpa2UgU2FmYXJpIGRvZXMpCisgICAgZm9udERlc2NyaXB0
aW9uLnNldFNwZWNpZmllZFNpemUobV9idXR0b25Gb250UGl4ZWxTaXplKTsKKyAgICBmb250RGVz
Y3JpcHRpb24uc2V0Q29tcHV0ZWRTaXplKG1fYnV0dG9uRm9udFBpeGVsU2l6ZSk7CisjZWxzZQor
ICAgIGZvbnREZXNjcmlwdGlvbi5zZXRTcGVjaWZpZWRTaXplKHN0eWxlLT5mb250U2l6ZSgpKTsK
KyAgICBmb250RGVzY3JpcHRpb24uc2V0Q29tcHV0ZWRTaXplKHN0eWxlLT5mb250U2l6ZSgpKTsK
KyNlbmRpZgorCisgICAgRm9udEZhbWlseSBmb250RmFtaWx5OworICAgIGZvbnRGYW1pbHkuc2V0
RmFtaWx5KG1fYnV0dG9uRm9udEZhbWlseSk7CisgICAgZm9udERlc2NyaXB0aW9uLnNldEZhbWls
eShmb250RmFtaWx5KTsKKyAgICBzdHlsZS0+c2V0Rm9udERlc2NyaXB0aW9uKGZvbnREZXNjcmlw
dGlvbik7CisgICAgc3R5bGUtPmZvbnQoKS51cGRhdGUoc3R5bGVSZXNvbHZlci0+Zm9udFNlbGVj
dG9yKCkpOworICAgIHN0eWxlLT5zZXRMaW5lSGVpZ2h0KFJlbmRlclN0eWxlOjppbml0aWFsTGlu
ZUhlaWdodCgpKTsKKyAgICBzZXRCdXR0b25TaXplKHN0eWxlKTsKKyAgICBzZXRCdXR0b25QYWRk
aW5nKHN0eWxlKTsKK30KKwordm9pZCBSZW5kZXJUaGVtZVFTdHlsZTo6c2V0QnV0dG9uUGFkZGlu
ZyhSZW5kZXJTdHlsZSogc3R5bGUpIGNvbnN0Cit7CisgICAgLy8gRmFrZSBhIGJ1dHRvbiByZWN0
IGhlcmUsIHNpbmNlIHdlJ3JlIGp1c3QgY29tcHV0aW5nIGRlbHRhcworICAgIFFSZWN0IG9yaWdp
bmFsUmVjdCA9IFFSZWN0KDAsIDAsIDEwMCwgMzApOworCisgICAgLy8gRGVmYXVsdCBwYWRkaW5n
IGlzIGJhc2VkIG9uIHRoZSBidXR0b24gbWFyZ2luIHBpeGVsIG1ldHJpYworICAgIGludCBidXR0
b25NYXJnaW4gPSBtX3N0eWxlSW50ZXJmYWNlLT5idXR0b25NYXJnaW4oUVN0eWxlSW50ZXJmYWNl
OjpTdGF0ZV9TbWFsbCwgb3JpZ2luYWxSZWN0KTsKKyAgICBpbnQgcGFkZGluZ0xlZnQgPSBidXR0
b25NYXJnaW47CisgICAgaW50IHBhZGRpbmdSaWdodCA9IGJ1dHRvbk1hcmdpbjsKKyAgICBpbnQg
cGFkZGluZ1RvcCA9IGJ1dHRvbk1hcmdpbjsKKyAgICBpbnQgcGFkZGluZ0JvdHRvbSA9IGJ1dHRv
bk1hcmdpbjsKKworICAgIC8vIFRoZW4gY2hlY2sgaWYgdGhlIHN0eWxlIHVzZXMgbGF5b3V0IG1h
cmdpbnMKKyAgICBRUmVjdCBsYXlvdXRSZWN0ID0gbV9zdHlsZUludGVyZmFjZS0+YnV0dG9uU3Vi
RWxlbWVudFJlY3QoUVN0eWxlSW50ZXJmYWNlOjpQdXNoQnV0dG9uTGF5b3V0SXRlbSwKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFFTdHls
ZUludGVyZmFjZTo6U3RhdGVfU21hbGwsIG9yaWdpbmFsUmVjdCk7CisgICAgaWYgKCFsYXlvdXRS
ZWN0LmlzTnVsbCgpKSB7CisgICAgICAgIFFSZWN0IGNvbnRlbnRzUmVjdCA9IG1fc3R5bGVJbnRl
cmZhY2UtPmJ1dHRvblN1YkVsZW1lbnRSZWN0KFFTdHlsZUludGVyZmFjZTo6UHVzaEJ1dHRvbkNv
bnRlbnRzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgUVN0eWxlSW50ZXJmYWNlOjpTdGF0ZV9TbWFsbCwgb3JpZ2luYWxSZWN0
KTsKKyAgICAgICAgcGFkZGluZ0xlZnQgPSBjb250ZW50c1JlY3QubGVmdCgpIC0gbGF5b3V0UmVj
dC5sZWZ0KCk7CisgICAgICAgIHBhZGRpbmdSaWdodCA9IGxheW91dFJlY3QucmlnaHQoKSAtIGNv
bnRlbnRzUmVjdC5yaWdodCgpOworICAgICAgICBwYWRkaW5nVG9wID0gY29udGVudHNSZWN0LnRv
cCgpIC0gbGF5b3V0UmVjdC50b3AoKTsKKworICAgICAgICAvLyBDYW4ndCB1c2UgdGhpcyByaWdo
dCBub3cgYmVjYXVzZSB3ZSBkb24ndCBoYXZlIHRoZSBiYXNlbGluZSB0byBjb21wZW5zYXRlCisg
ICAgICAgIC8vIHBhZGRpbmdCb3R0b20gPSBsYXlvdXRSZWN0LmJvdHRvbSgpIC0gY29udGVudHNS
ZWN0LmJvdHRvbSgpOworICAgIH0KKyAgICBzdHlsZS0+c2V0UGFkZGluZ0xlZnQoTGVuZ3RoKHBh
ZGRpbmdMZWZ0LCBGaXhlZCkpOworICAgIHN0eWxlLT5zZXRQYWRkaW5nUmlnaHQoTGVuZ3RoKHBh
ZGRpbmdSaWdodCwgRml4ZWQpKTsKKyAgICBzdHlsZS0+c2V0UGFkZGluZ1RvcChMZW5ndGgocGFk
ZGluZ1RvcCwgRml4ZWQpKTsKKyAgICBzdHlsZS0+c2V0UGFkZGluZ0JvdHRvbShMZW5ndGgocGFk
ZGluZ0JvdHRvbSwgRml4ZWQpKTsKK30KKworYm9vbCBSZW5kZXJUaGVtZVFTdHlsZTo6cGFpbnRC
dXR0b24oUmVuZGVyT2JqZWN0KiBvLCBjb25zdCBQYWludEluZm8mIGksIGNvbnN0IEludFJlY3Qm
IHIpCit7CisgICAgU3R5bGVQYWludGVyUVN0eWxlIHAodGhpcywgaSwgbyk7CisgICAgaWYgKCFw
LmlzVmFsaWQoKSkKKyAgICAgICByZXR1cm4gdHJ1ZTsKKworICAgIHAuc3R5bGVPcHRpb24ucmVj
dCA9IHI7CisgICAgcC5zdHlsZU9wdGlvbi5zdGF0ZSB8PSBRU3R5bGVJbnRlcmZhY2U6OlN0YXRl
X1NtYWxsOworCisgICAgaWYgKHAuYXBwZWFyYW5jZSA9PSBQdXNoQnV0dG9uUGFydCB8fCBwLmFw
cGVhcmFuY2UgPT0gQnV0dG9uUGFydCkgeworICAgICAgICBwLnN0eWxlT3B0aW9uLnJlY3QgPSBp
bmZsYXRlQnV0dG9uUmVjdChwLnN0eWxlT3B0aW9uLnJlY3QpOworICAgICAgICBwLnBhaW50QnV0
dG9uKFFTdHlsZUludGVyZmFjZTo6UHVzaEJ1dHRvbik7CisgICAgfSBlbHNlIGlmIChwLmFwcGVh
cmFuY2UgPT0gUmFkaW9QYXJ0KQorICAgICAgICBwLnBhaW50QnV0dG9uKFFTdHlsZUludGVyZmFj
ZTo6UmFkaW9CdXR0b24pOworICAgIGVsc2UgaWYgKHAuYXBwZWFyYW5jZSA9PSBDaGVja2JveFBh
cnQpCisgICAgICAgIHAucGFpbnRCdXR0b24oUVN0eWxlSW50ZXJmYWNlOjpDaGVja0JveCk7CisK
KyAgICByZXR1cm4gZmFsc2U7Cit9CisKK2Jvb2wgUmVuZGVyVGhlbWVRU3R5bGU6OnBhaW50VGV4
dEZpZWxkKFJlbmRlck9iamVjdCogbywgY29uc3QgUGFpbnRJbmZvJiBpLCBjb25zdCBJbnRSZWN0
JiByKQoreworICAgIFN0eWxlUGFpbnRlclFTdHlsZSBwKHRoaXMsIGksIG8pOworICAgIGlmICgh
cC5pc1ZhbGlkKCkpCisgICAgICAgIHJldHVybiB0cnVlOworCisgICAgcC5zdHlsZU9wdGlvbi5y
ZWN0ID0gcjsKKyAgICBwLnN0eWxlT3B0aW9uLnN0YXRlIHw9IFFTdHlsZUludGVyZmFjZTo6U3Rh
dGVfU3Vua2VuOworCisgICAgLy8gR2V0IHRoZSBjb3JyZWN0IHRoZW1lIGRhdGEgZm9yIGEgdGV4
dCBmaWVsZAorICAgIGlmIChwLmFwcGVhcmFuY2UgIT0gVGV4dEZpZWxkUGFydAorICAgICAgICAm
JiBwLmFwcGVhcmFuY2UgIT0gU2VhcmNoRmllbGRQYXJ0CisgICAgICAgICYmIHAuYXBwZWFyYW5j
ZSAhPSBUZXh0QXJlYVBhcnQKKyAgICAgICAgJiYgcC5hcHBlYXJhbmNlICE9IExpc3Rib3hQYXJ0
KQorICAgICAgICByZXR1cm4gdHJ1ZTsKKworICAgIC8vIE5vdyBwYWludCB0aGUgdGV4dCBmaWVs
ZC4KKyAgICBwLnBhaW50VGV4dEZpZWxkKCk7CisgICAgcmV0dXJuIGZhbHNlOworfQorCit2b2lk
IFJlbmRlclRoZW1lUVN0eWxlOjphZGp1c3RUZXh0QXJlYVN0eWxlKFN0eWxlUmVzb2x2ZXIqIHN0
eWxlUmVzb2x2ZXIsIFJlbmRlclN0eWxlKiBzdHlsZSwgRWxlbWVudCogZWxlbWVudCkgY29uc3QK
K3sKKyAgICBhZGp1c3RUZXh0RmllbGRTdHlsZShzdHlsZVJlc29sdmVyLCBzdHlsZSwgZWxlbWVu
dCk7Cit9CisKK2Jvb2wgUmVuZGVyVGhlbWVRU3R5bGU6OnBhaW50VGV4dEFyZWEoUmVuZGVyT2Jq
ZWN0KiBvLCBjb25zdCBQYWludEluZm8mIGksIGNvbnN0IEludFJlY3QmIHIpCit7CisgICAgcmV0
dXJuIHBhaW50VGV4dEZpZWxkKG8sIGksIHIpOworfQorCit2b2lkIFJlbmRlclRoZW1lUVN0eWxl
OjpzZXRQb3B1cFBhZGRpbmcoUmVuZGVyU3R5bGUqIHN0eWxlKSBjb25zdAoreworICAgIGNvbnN0
IGludCBwYWRkaW5nTGVmdCA9IDQ7CisgICAgY29uc3QgaW50IHBhZGRpbmdSaWdodCA9IHN0eWxl
LT53aWR0aCgpLmlzRml4ZWQoKSB8fCBzdHlsZS0+d2lkdGgoKS5pc1BlcmNlbnQoKSA/IDUgOiA4
OworCisgICAgc3R5bGUtPnNldFBhZGRpbmdMZWZ0KExlbmd0aChwYWRkaW5nTGVmdCwgRml4ZWQp
KTsKKworICAgIGludCB3ID0gbV9zdHlsZUludGVyZmFjZS0+c2ltcGxlUGl4ZWxNZXRyaWMoUVN0
eWxlSW50ZXJmYWNlOjpQTV9CdXR0b25JY29uU2l6ZSk7CisgICAgc3R5bGUtPnNldFBhZGRpbmdS
aWdodChMZW5ndGgocGFkZGluZ1JpZ2h0ICsgdywgRml4ZWQpKTsKKworICAgIHN0eWxlLT5zZXRQ
YWRkaW5nVG9wKExlbmd0aCgyLCBGaXhlZCkpOworICAgIHN0eWxlLT5zZXRQYWRkaW5nQm90dG9t
KExlbmd0aCgyLCBGaXhlZCkpOworfQorCitRUGFsZXR0ZSBSZW5kZXJUaGVtZVFTdHlsZTo6Y29s
b3JQYWxldHRlKCkgY29uc3QKK3sKKyAgICBRUGFsZXR0ZSBwYWxldHRlID0gUmVuZGVyVGhlbWVR
dDo6Y29sb3JQYWxldHRlKCk7CisgICAgc2V0UGFsZXR0ZUZyb21QYWdlQ2xpZW50SWZFeGlzdHMo
cGFsZXR0ZSk7CisgICAgcmV0dXJuIHBhbGV0dGU7Cit9CisKK2Jvb2wgUmVuZGVyVGhlbWVRU3R5
bGU6OnBhaW50TWVudUxpc3QoUmVuZGVyT2JqZWN0KiBvLCBjb25zdCBQYWludEluZm8mIGksIGNv
bnN0IEludFJlY3QmIHIpCit7CisgICAgU3R5bGVQYWludGVyUVN0eWxlIHAodGhpcywgaSwgbyk7
CisgICAgaWYgKCFwLmlzVmFsaWQoKSkKKyAgICAgICAgcmV0dXJuIHRydWU7CisKKyAgICBwLnN0
eWxlT3B0aW9uLnJlY3QgPSByOworICAgIHAucGFpbnRDb21ib0JveCgpOworICAgIHJldHVybiBm
YWxzZTsKK30KKwordm9pZCBSZW5kZXJUaGVtZVFTdHlsZTo6YWRqdXN0TWVudUxpc3RCdXR0b25T
dHlsZShTdHlsZVJlc29sdmVyKiBzdHlsZVJlc29sdmVyLCBSZW5kZXJTdHlsZSogc3R5bGUsIEVs
ZW1lbnQqIGUpIGNvbnN0Cit7CisgICAgLy8gV09SS0FST1VORCBiZWNhdXNlIGh0bWwuY3NzIHNw
ZWNpZmllcyAtd2Via2l0LWJvcmRlci1yYWRpdXMgZm9yIDxzZWxlY3Q+IHNvIHdlIG92ZXJyaWRl
IGl0IGhlcmUKKyAgICAvLyBzZWUgYWxzbyBodHRwOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVn
LmNnaT9pZD0xODM5OQorICAgIHN0eWxlLT5yZXNldEJvcmRlclJhZGl1cygpOworCisgICAgUmVu
ZGVyVGhlbWVRdDo6YWRqdXN0TWVudUxpc3RCdXR0b25TdHlsZShzdHlsZVJlc29sdmVyLCBzdHls
ZSwgZSk7Cit9CisKK2Jvb2wgUmVuZGVyVGhlbWVRU3R5bGU6OnBhaW50TWVudUxpc3RCdXR0b24o
UmVuZGVyT2JqZWN0KiBvLCBjb25zdCBQYWludEluZm8mIGksCisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgY29uc3QgSW50UmVjdCYgcikKK3sKKyAgICBTdHlsZVBhaW50
ZXJRU3R5bGUgcCh0aGlzLCBpLCBvKTsKKyAgICBpZiAoIXAuaXNWYWxpZCgpKQorICAgICAgICBy
ZXR1cm4gdHJ1ZTsKKworICAgIHAuc3R5bGVPcHRpb24ucmVjdCA9IHI7CisgICAgcC5wYWludENv
bWJvQm94QXJyb3coKTsKKyAgICByZXR1cm4gZmFsc2U7Cit9CisKKyNpZiBFTkFCTEUoUFJPR1JF
U1NfRUxFTUVOVCkKK2RvdWJsZSBSZW5kZXJUaGVtZVFTdHlsZTo6YW5pbWF0aW9uRHVyYXRpb25G
b3JQcm9ncmVzc0JhcihSZW5kZXJQcm9ncmVzcyogcmVuZGVyUHJvZ3Jlc3MpIGNvbnN0Cit7Cisg
ICAgaWYgKHJlbmRlclByb2dyZXNzLT5wb3NpdGlvbigpID49IDApCisgICAgICAgIHJldHVybiAw
OworCisgICAgSW50U2l6ZSBzaXplID0gcmVuZGVyUHJvZ3Jlc3MtPnBpeGVsU25hcHBlZFNpemUo
KTsKKyAgICAvLyBGSVhNRTogVW50aWwgaHR0cDovL2J1Z3JlcG9ydHMucXQubm9raWEuY29tL2Jy
b3dzZS9RVEJVRy05MTcxIGlzIGZpeGVkLAorICAgIC8vIHdlIHNpbXVsYXRlIG9uZSBzcXVhcmUg
YW5pbWF0aW5nIGFjcm9zcyB0aGUgcHJvZ3Jlc3MgYmFyLgorICAgIHJldHVybiAoc2l6ZS53aWR0
aCgpIC8gbV9zdHlsZUludGVyZmFjZS0+cHJvZ3Jlc3NCYXJDaHVua1dpZHRoKHNpemUpKSAqIGFu
aW1hdGlvblJlcGVhdEludGVydmFsRm9yUHJvZ3Jlc3NCYXIocmVuZGVyUHJvZ3Jlc3MpOworfQor
Citib29sIFJlbmRlclRoZW1lUVN0eWxlOjpwYWludFByb2dyZXNzQmFyKFJlbmRlck9iamVjdCog
bywgY29uc3QgUGFpbnRJbmZvJiBwaSwgY29uc3QgSW50UmVjdCYgcikKK3sKKyAgICBpZiAoIW8t
PmlzUHJvZ3Jlc3MoKSkKKyAgICAgICAgcmV0dXJuIHRydWU7CisKKyAgICBTdHlsZVBhaW50ZXJR
U3R5bGUgcCh0aGlzLCBwaSwgbyk7CisgICAgaWYgKCFwLmlzVmFsaWQoKSkKKyAgICAgICByZXR1
cm4gdHJ1ZTsKKworICAgIHAuc3R5bGVPcHRpb24ucmVjdCA9IHI7CisgICAgUmVuZGVyUHJvZ3Jl
c3MqIHJlbmRlclByb2dyZXNzID0gdG9SZW5kZXJQcm9ncmVzcyhvKTsKKyAgICBwLnBhaW50UHJv
Z3Jlc3NCYXIocmVuZGVyUHJvZ3Jlc3MtPnBvc2l0aW9uKCksIHJlbmRlclByb2dyZXNzLT5hbmlt
YXRpb25Qcm9ncmVzcygpKTsKKyAgICByZXR1cm4gZmFsc2U7Cit9CisjZW5kaWYKKworYm9vbCBS
ZW5kZXJUaGVtZVFTdHlsZTo6cGFpbnRTbGlkZXJUcmFjayhSZW5kZXJPYmplY3QqIG8sIGNvbnN0
IFBhaW50SW5mbyYgcGksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29u
c3QgSW50UmVjdCYgcikKK3sKKyAgICBTdHlsZVBhaW50ZXJRU3R5bGUgcCh0aGlzLCBwaSwgbyk7
CisgICAgaWYgKCFwLmlzVmFsaWQoKSkKKyAgICAgICAgcmV0dXJuIHRydWU7CisKKyAgICBjb25z
dCBRUG9pbnQgdG9wTGVmdCA9IHIubG9jYXRpb24oKTsKKyAgICBwLnBhaW50ZXItPnRyYW5zbGF0
ZSh0b3BMZWZ0KTsKKworICAgIHAuc3R5bGVPcHRpb24ucmVjdCA9IHI7CisgICAgcC5zdHlsZU9w
dGlvbi5yZWN0Lm1vdmVUbyhRUG9pbnQoMCwgMCkpOworCisgICAgaWYgKHAuYXBwZWFyYW5jZSA9
PSBTbGlkZXJWZXJ0aWNhbFBhcnQpCisgICAgICAgIHAuc3R5bGVPcHRpb24uc2xpZGVyLm9yaWVu
dGF0aW9uID0gUXQ6OlZlcnRpY2FsOworCisgICAgaWYgKGlzUHJlc3NlZChvKSkKKyAgICAgICAg
cC5zdHlsZU9wdGlvbi5zdGF0ZSB8PSBRU3R5bGVJbnRlcmZhY2U6OlN0YXRlX1N1bmtlbjsKKwor
ICAgIC8vIHNvbWUgc3R5bGVzIG5lZWQgdGhpcyB0byBzaG93IGEgaGlnaGxpZ2h0IG9uIG9uZSBz
aWRlIG9mIHRoZSBncm9vdmUKKyAgICBIVE1MSW5wdXRFbGVtZW50KiBzbGlkZXIgPSBvLT5ub2Rl
KCktPnRvSW5wdXRFbGVtZW50KCk7CisgICAgaWYgKHNsaWRlcikgeworICAgICAgICBwLnN0eWxl
T3B0aW9uLnNsaWRlci51cHNpZGVEb3duID0gKHAuYXBwZWFyYW5jZSA9PSBTbGlkZXJIb3Jpem9u
dGFsUGFydCkgJiYgIW8tPnN0eWxlKCktPmlzTGVmdFRvUmlnaHREaXJlY3Rpb24oKTsKKyAgICAg
ICAgLy8gVXNlIHRoZSB3aWR0aCBhcyBhIG11bHRpcGxpZXIgaW4gY2FzZSB0aGUgc2xpZGVyIHZh
bHVlcyBhcmUgPD0gMQorICAgICAgICBjb25zdCBpbnQgd2lkdGggPSByLndpZHRoKCkgPiAwID8g
ci53aWR0aCgpIDogMTAwOworICAgICAgICBwLnN0eWxlT3B0aW9uLnNsaWRlci5tYXhpbXVtID0g
c2xpZGVyLT5tYXhpbXVtKCkgKiB3aWR0aDsKKyAgICAgICAgcC5zdHlsZU9wdGlvbi5zbGlkZXIu
bWluaW11bSA9IHNsaWRlci0+bWluaW11bSgpICogd2lkdGg7CisgICAgICAgIGlmICghcC5zdHls
ZU9wdGlvbi5zbGlkZXIudXBzaWRlRG93bikKKyAgICAgICAgICAgIHAuc3R5bGVPcHRpb24uc2xp
ZGVyLnBvc2l0aW9uID0gc2xpZGVyLT52YWx1ZUFzTnVtYmVyKCkgKiB3aWR0aDsKKyAgICAgICAg
ZWxzZQorICAgICAgICAgICAgcC5zdHlsZU9wdGlvbi5zbGlkZXIucG9zaXRpb24gPSBwLnN0eWxl
T3B0aW9uLnNsaWRlci5taW5pbXVtICsgcC5zdHlsZU9wdGlvbi5zbGlkZXIubWF4aW11bSAtIHNs
aWRlci0+dmFsdWVBc051bWJlcigpICogd2lkdGg7CisgICAgfQorCisgICAgcC5wYWludFNsaWRl
clRyYWNrKCk7CisKKyAgICBwLnBhaW50ZXItPnRyYW5zbGF0ZSgtdG9wTGVmdCk7CisgICAgcmV0
dXJuIGZhbHNlOworfQorCit2b2lkIFJlbmRlclRoZW1lUVN0eWxlOjphZGp1c3RTbGlkZXJUcmFj
a1N0eWxlKFN0eWxlUmVzb2x2ZXIqLCBSZW5kZXJTdHlsZSogc3R5bGUsIEVsZW1lbnQqKSBjb25z
dAoreworICAgIHN0eWxlLT5zZXRCb3hTaGFkb3cobnVsbHB0cik7Cit9CisKK2Jvb2wgUmVuZGVy
VGhlbWVRU3R5bGU6OnBhaW50U2xpZGVyVGh1bWIoUmVuZGVyT2JqZWN0KiBvLCBjb25zdCBQYWlu
dEluZm8mIHBpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IElu
dFJlY3QmIHIpCit7CisgICAgU3R5bGVQYWludGVyUVN0eWxlIHAodGhpcywgcGksIG8pOworICAg
IGlmICghcC5pc1ZhbGlkKCkpCisgICAgICAgIHJldHVybiB0cnVlOworCisgICAgY29uc3QgUVBv
aW50IHRvcExlZnQgPSByLmxvY2F0aW9uKCk7CisgICAgcC5wYWludGVyLT50cmFuc2xhdGUodG9w
TGVmdCk7CisKKyAgICBwLnN0eWxlT3B0aW9uLnJlY3QgPSByOworICAgIHAuc3R5bGVPcHRpb24u
cmVjdC5tb3ZlVG8oUVBvaW50KDAsIDApKTsKKyAgICBwLnN0eWxlT3B0aW9uLnNsaWRlci5vcmll
bnRhdGlvbiA9IFF0OjpIb3Jpem9udGFsOworICAgIGlmIChwLmFwcGVhcmFuY2UgPT0gU2xpZGVy
VGh1bWJWZXJ0aWNhbFBhcnQpCisgICAgICAgIHAuc3R5bGVPcHRpb24uc2xpZGVyLm9yaWVudGF0
aW9uID0gUXQ6OlZlcnRpY2FsOworICAgIGlmIChpc1ByZXNzZWQobykpCisgICAgICAgIHAuc3R5
bGVPcHRpb24uc3RhdGUgfD0gUVN0eWxlSW50ZXJmYWNlOjpTdGF0ZV9TdW5rZW47CisKKyAgICBw
LnBhaW50U2xpZGVyVGh1bWIoKTsKKworICAgIHAucGFpbnRlci0+dHJhbnNsYXRlKC10b3BMZWZ0
KTsKKyAgICByZXR1cm4gZmFsc2U7Cit9CisKK3ZvaWQgUmVuZGVyVGhlbWVRU3R5bGU6OmFkanVz
dFNsaWRlclRodW1iU3R5bGUoU3R5bGVSZXNvbHZlciogc3R5bGVSZXNvbHZlciwgUmVuZGVyU3R5
bGUqIHN0eWxlLCBFbGVtZW50KiBlbGVtZW50KSBjb25zdAoreworICAgIFJlbmRlclRoZW1lOjph
ZGp1c3RTbGlkZXJUaHVtYlN0eWxlKHN0eWxlUmVzb2x2ZXIsIHN0eWxlLCBlbGVtZW50KTsKKyAg
ICBzdHlsZS0+c2V0Qm94U2hhZG93KG51bGxwdHIpOworfQorCitib29sIFJlbmRlclRoZW1lUVN0
eWxlOjpwYWludFNlYXJjaEZpZWxkKFJlbmRlck9iamVjdCogbywgY29uc3QgUGFpbnRJbmZvJiBw
aSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBJbnRSZWN0JiBy
KQoreworICAgIHJldHVybiBwYWludFRleHRGaWVsZChvLCBwaSwgcik7Cit9CisKK3ZvaWQgUmVu
ZGVyVGhlbWVRU3R5bGU6OmFkanVzdFNlYXJjaEZpZWxkRGVjb3JhdGlvblN0eWxlKFN0eWxlUmVz
b2x2ZXIqIHN0eWxlUmVzb2x2ZXIsIFJlbmRlclN0eWxlKiBzdHlsZSwgRWxlbWVudCogZSkgY29u
c3QKK3sKKyAgICBub3RJbXBsZW1lbnRlZCgpOworICAgIFJlbmRlclRoZW1lOjphZGp1c3RTZWFy
Y2hGaWVsZERlY29yYXRpb25TdHlsZShzdHlsZVJlc29sdmVyLCBzdHlsZSwgZSk7Cit9CisKK2Jv
b2wgUmVuZGVyVGhlbWVRU3R5bGU6OnBhaW50U2VhcmNoRmllbGREZWNvcmF0aW9uKFJlbmRlck9i
amVjdCogbywgY29uc3QgUGFpbnRJbmZvJiBwaSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgY29uc3QgSW50UmVjdCYgcikKK3sKKyAgICBub3RJbXBsZW1l
bnRlZCgpOworICAgIHJldHVybiBSZW5kZXJUaGVtZTo6cGFpbnRTZWFyY2hGaWVsZERlY29yYXRp
b24obywgcGksIHIpOworfQorCit2b2lkIFJlbmRlclRoZW1lUVN0eWxlOjphZGp1c3RTZWFyY2hG
aWVsZFJlc3VsdHNEZWNvcmF0aW9uU3R5bGUoU3R5bGVSZXNvbHZlciogc3R5bGVSZXNvbHZlciwg
UmVuZGVyU3R5bGUqIHN0eWxlLCBFbGVtZW50KiBlKSBjb25zdAoreworICAgIG5vdEltcGxlbWVu
dGVkKCk7CisgICAgUmVuZGVyVGhlbWU6OmFkanVzdFNlYXJjaEZpZWxkUmVzdWx0c0RlY29yYXRp
b25TdHlsZShzdHlsZVJlc29sdmVyLCBzdHlsZSwgZSk7Cit9CisKK2Jvb2wgUmVuZGVyVGhlbWVR
U3R5bGU6OnBhaW50U2VhcmNoRmllbGRSZXN1bHRzRGVjb3JhdGlvbihSZW5kZXJPYmplY3QqIG8s
IGNvbnN0IFBhaW50SW5mbyYgcGksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBjb25zdCBJbnRSZWN0JiByKQoreworICAgIG5vdEltcGxlbWVu
dGVkKCk7CisgICAgcmV0dXJuIFJlbmRlclRoZW1lOjpwYWludFNlYXJjaEZpZWxkUmVzdWx0c0Rl
Y29yYXRpb24obywgcGksIHIpOworfQorCisjaWZuZGVmIFFUX05PX1NQSU5CT1gKKworYm9vbCBS
ZW5kZXJUaGVtZVFTdHlsZTo6cGFpbnRJbm5lclNwaW5CdXR0b24oUmVuZGVyT2JqZWN0KiBvLCBj
b25zdCBQYWludEluZm8mIHBhaW50SW5mbywgY29uc3QgSW50UmVjdCYgcmVjdCkKK3sKKyAgICBT
dHlsZVBhaW50ZXJRU3R5bGUgcCh0aGlzLCBwYWludEluZm8sIG8pOworICAgIGlmICghcC5pc1Zh
bGlkKCkpCisgICAgICAgcmV0dXJuIHRydWU7CisKKyAgICBwLnN0eWxlT3B0aW9uLnJlY3QgPSBy
ZWN0OworICAgIHAucGFpbnRJbm5lclNwaW5CdXR0b24oaXNTcGluVXBCdXR0b25QYXJ0UHJlc3Nl
ZChvKSk7CisgICAgcmV0dXJuIGZhbHNlOworfQorI2VuZGlmCisKK0NvbnRyb2xQYXJ0IFJlbmRl
clRoZW1lUVN0eWxlOjppbml0aWFsaXplQ29tbW9uUVN0eWxlT3B0aW9ucyhRU3R5bGVJbnRlcmZh
Y2VPcHRpb24gJm9wdGlvbiwgUmVuZGVyT2JqZWN0KiBvKSBjb25zdAoreworICAgIC8vIERlZmF1
bHQgYml0czogbm8gZm9jdXMsIG5vIG1vdXNlIG92ZXIKKyAgICBvcHRpb24uc3RhdGUgJj0gfihR
U3R5bGVJbnRlcmZhY2U6OlN0YXRlX0hhc0ZvY3VzIHwgUVN0eWxlSW50ZXJmYWNlOjpTdGF0ZV9N
b3VzZU92ZXIpOworCisgICAgaWYgKGlzUmVhZE9ubHlDb250cm9sKG8pKQorICAgICAgICAvLyBS
ZWFkb25seSBpcyBzdXBwb3J0ZWQgb24gdGV4dGZpZWxkcy4KKyAgICAgICAgb3B0aW9uLnN0YXRl
IHw9IFFTdHlsZUludGVyZmFjZTo6U3RhdGVfUmVhZE9ubHk7CisKKyAgICBvcHRpb24uZGlyZWN0
aW9uID0gUXQ6OkxlZnRUb1JpZ2h0OworCisgICAgaWYgKGlzSG92ZXJlZChvKSkKKyAgICAgICAg
b3B0aW9uLnN0YXRlIHw9IFFTdHlsZUludGVyZmFjZTo6U3RhdGVfTW91c2VPdmVyOworCisgICAg
c2V0UGFsZXR0ZUZyb21QYWdlQ2xpZW50SWZFeGlzdHMob3B0aW9uLnBhbGV0dGUpOworCisgICAg
aWYgKCFpc0VuYWJsZWQobykpIHsKKyAgICAgICAgb3B0aW9uLnBhbGV0dGUuc2V0Q3VycmVudENv
bG9yR3JvdXAoUVBhbGV0dGU6OkRpc2FibGVkKTsKKyAgICAgICAgb3B0aW9uLnN0YXRlICY9IH5R
U3R5bGVJbnRlcmZhY2U6OlN0YXRlX0VuYWJsZWQ7CisgICAgfQorCisgICAgUmVuZGVyU3R5bGUq
IHN0eWxlID0gby0+c3R5bGUoKTsKKyAgICBpZiAoIXN0eWxlKQorICAgICAgICByZXR1cm4gTm9D
b250cm9sUGFydDsKKworICAgIENvbnRyb2xQYXJ0IHJlc3VsdCA9IHN0eWxlLT5hcHBlYXJhbmNl
KCk7CisgICAgaWYgKHN1cHBvcnRzRm9jdXMocmVzdWx0KSAmJiBpc0ZvY3VzZWQobykpIHsKKyAg
ICAgICAgb3B0aW9uLnN0YXRlIHw9IFFTdHlsZUludGVyZmFjZTo6U3RhdGVfSGFzRm9jdXM7Cisg
ICAgICAgIG9wdGlvbi5zdGF0ZSB8PSBRU3R5bGVJbnRlcmZhY2U6OlN0YXRlX0tleWJvYXJkRm9j
dXNDaGFuZ2U7CisgICAgfQorCisgICAgaWYgKHN0eWxlLT5kaXJlY3Rpb24oKSA9PSBXZWJDb3Jl
OjpSVEwpCisgICAgICAgIG9wdGlvbi5kaXJlY3Rpb24gPSBRdDo6UmlnaHRUb0xlZnQ7CisKKyAg
ICBzd2l0Y2ggKHJlc3VsdCkgeworICAgIGNhc2UgUHVzaEJ1dHRvblBhcnQ6CisgICAgY2FzZSBT
cXVhcmVCdXR0b25QYXJ0OgorICAgIGNhc2UgQnV0dG9uUGFydDoKKyAgICBjYXNlIEJ1dHRvbkJl
dmVsUGFydDoKKyAgICBjYXNlIExpc3RJdGVtUGFydDoKKyAgICBjYXNlIE1lbnVsaXN0QnV0dG9u
UGFydDoKKyAgICBjYXNlIElubmVyU3BpbkJ1dHRvblBhcnQ6CisgICAgY2FzZSBTZWFyY2hGaWVs
ZFJlc3VsdHNCdXR0b25QYXJ0OgorICAgIGNhc2UgU2VhcmNoRmllbGRDYW5jZWxCdXR0b25QYXJ0
OiB7CisgICAgICAgIGlmIChpc1ByZXNzZWQobykpCisgICAgICAgICAgICBvcHRpb24uc3RhdGUg
fD0gUVN0eWxlSW50ZXJmYWNlOjpTdGF0ZV9TdW5rZW47CisgICAgICAgIGVsc2UgaWYgKHJlc3Vs
dCA9PSBQdXNoQnV0dG9uUGFydCB8fCByZXN1bHQgPT0gQnV0dG9uUGFydCkKKyAgICAgICAgICAg
IG9wdGlvbi5zdGF0ZSB8PSBRU3R5bGVJbnRlcmZhY2U6OlN0YXRlX1JhaXNlZDsKKyAgICAgICAg
YnJlYWs7CisgICAgfQorICAgIGNhc2UgUmFkaW9QYXJ0OgorICAgIGNhc2UgQ2hlY2tib3hQYXJ0
OgorICAgICAgICBvcHRpb24uc3RhdGUgfD0gKGlzQ2hlY2tlZChvKSA/IFFTdHlsZUludGVyZmFj
ZTo6U3RhdGVfT24gOiBRU3R5bGVJbnRlcmZhY2U6OlN0YXRlX09mZik7CisgICAgfQorCisgICAg
cmV0dXJuIHJlc3VsdDsKK30KKwordm9pZCBSZW5kZXJUaGVtZVFTdHlsZTo6YWRqdXN0U2xpZGVy
VGh1bWJTaXplKFJlbmRlclN0eWxlKiBzdHlsZSwgRWxlbWVudCogZWxlbWVudCkgY29uc3QKK3sK
KyAgICBjb25zdCBDb250cm9sUGFydCBwYXJ0ID0gc3R5bGUtPmFwcGVhcmFuY2UoKTsKKyAgICBp
ZiAocGFydCA9PSBTbGlkZXJUaHVtYkhvcml6b250YWxQYXJ0IHx8IHBhcnQgPT0gU2xpZGVyVGh1
bWJWZXJ0aWNhbFBhcnQpIHsKKyAgICAgICAgUXQ6Ok9yaWVudGF0aW9uIG9yaWVudGF0aW9uID0g
UXQ6Okhvcml6b250YWw7CisgICAgICAgIGlmIChwYXJ0ID09IFNsaWRlclRodW1iVmVydGljYWxQ
YXJ0KQorICAgICAgICAgICAgb3JpZW50YXRpb24gPSBRdDo6VmVydGljYWw7CisKKyAgICAgICAg
aW50IGxlbmd0aCA9IG1fc3R5bGVJbnRlcmZhY2UtPnNsaWRlckxlbmd0aChvcmllbnRhdGlvbik7
CisgICAgICAgIGludCB0aGlja25lc3MgPSBtX3N0eWxlSW50ZXJmYWNlLT5zbGlkZXJUaGlja25l
c3Mob3JpZW50YXRpb24pOworICAgICAgICBpZiAob3JpZW50YXRpb24gPT0gUXQ6OlZlcnRpY2Fs
KSB7CisgICAgICAgICAgICBzdHlsZS0+c2V0V2lkdGgoTGVuZ3RoKHRoaWNrbmVzcywgRml4ZWQp
KTsKKyAgICAgICAgICAgIHN0eWxlLT5zZXRIZWlnaHQoTGVuZ3RoKGxlbmd0aCwgRml4ZWQpKTsK
KyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIHN0eWxlLT5zZXRXaWR0aChMZW5ndGgobGVu
Z3RoLCBGaXhlZCkpOworICAgICAgICAgICAgc3R5bGUtPnNldEhlaWdodChMZW5ndGgodGhpY2tu
ZXNzLCBGaXhlZCkpOworICAgICAgICB9CisgICAgfSBlbHNlCisgICAgICAgIFJlbmRlclRoZW1l
UXQ6OmFkanVzdFNsaWRlclRodW1iU2l6ZShzdHlsZSwgZWxlbWVudCk7Cit9CisKK30KKworLy8g
dmltOiB0cz00IHN3PTQgZXQKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3F0
L1JlbmRlclRoZW1lUVN0eWxlLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9xdC9SZW5kZXJU
aGVtZVFTdHlsZS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjVjNzMwNDM5YzE5ODBmYTc4OGM1NzcwMjczOWQzODA4
OGZlZDRjNzAKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9xdC9S
ZW5kZXJUaGVtZVFTdHlsZS5oCkBAIC0wLDAgKzEsMTU5IEBACisvKgorICogVGhpcyBmaWxlIGlz
IHBhcnQgb2YgdGhlIHRoZW1lIGltcGxlbWVudGF0aW9uIGZvciBmb3JtIGNvbnRyb2xzIGluIFdl
YkNvcmUuCisgKgorICogQ29weXJpZ2h0IChDKSAyMDExLTIwMTIgTm9raWEgQ29ycG9yYXRpb24g
YW5kL29yIGl0cyBzdWJzaWRpYXJ5KC1pZXMpLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBmcmVl
IHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1
bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgKiBMaWNl
bnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIK
KyAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0
ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhv
cGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsg
d2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkg
b3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogTGli
cmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91
IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQ
dWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBD
T1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5k
YXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCisgKiBCb3N0b24s
IE1BIDAyMTEwLTEzMDEsIFVTQS4KKyAqCisgKi8KKyNpZm5kZWYgUmVuZGVyVGhlbWVRU3R5bGVf
aAorI2RlZmluZSBSZW5kZXJUaGVtZVFTdHlsZV9oCisKKyNpbmNsdWRlICJRU3R5bGVJbnRlcmZh
Y2UuaCIKKyNpbmNsdWRlICJSZW5kZXJUaGVtZVF0LmgiCisKK25hbWVzcGFjZSBXZWJDb3JlIHsK
KworY2xhc3MgU2Nyb2xsYmFyVGhlbWVRU3R5bGU7CisKK2NsYXNzIFBhZ2U7CitjbGFzcyBRU3R5
bGVJbnRlcmZhY2U7CitzdHJ1Y3QgUVN0eWxlSW50ZXJmYWNlT3B0aW9uOworCit0eXBlZGVmIFFT
dHlsZUludGVyZmFjZSogKCpRdFN0eWxlRmFjdG9yeUZ1bmN0aW9uKShQYWdlKik7CisKK2NsYXNz
IFJlbmRlclRoZW1lUVN0eWxlIDogcHVibGljIFJlbmRlclRoZW1lUXQgeworcHJpdmF0ZToKKyAg
ICBmcmllbmQgY2xhc3MgU3R5bGVQYWludGVyUVN0eWxlOworCisgICAgUmVuZGVyVGhlbWVRU3R5
bGUoUGFnZSopOworICAgIHZpcnR1YWwgflJlbmRlclRoZW1lUVN0eWxlKCk7CisKK3B1YmxpYzoK
KyAgICBzdGF0aWMgUGFzc1JlZlB0cjxSZW5kZXJUaGVtZT4gY3JlYXRlKFBhZ2UqKTsKKworICAg
IHN0YXRpYyB2b2lkIHNldFN0eWxlRmFjdG9yeUZ1bmN0aW9uKFF0U3R5bGVGYWN0b3J5RnVuY3Rp
b24pOworICAgIHN0YXRpYyBRdFN0eWxlRmFjdG9yeUZ1bmN0aW9uIHN0eWxlRmFjdG9yeSgpOwor
CisgICAgdmlydHVhbCB2b2lkIGFkanVzdFNsaWRlclRodW1iU2l6ZShSZW5kZXJTdHlsZSosIEVs
ZW1lbnQqKSBjb25zdDsKKworICAgIFFTdHlsZUludGVyZmFjZSogc3R5bGVJbnRlcmZhY2UoKSB7
IHJldHVybiBtX3N0eWxlSW50ZXJmYWNlLmdldCgpOyB9CisKK3Byb3RlY3RlZDoKKyAgICB2aXJ0
dWFsIHZvaWQgYWRqdXN0QnV0dG9uU3R5bGUoU3R5bGVSZXNvbHZlciosIFJlbmRlclN0eWxlKiwg
RWxlbWVudCopIGNvbnN0OworICAgIHZpcnR1YWwgYm9vbCBwYWludEJ1dHRvbihSZW5kZXJPYmpl
Y3QqLCBjb25zdCBQYWludEluZm8mLCBjb25zdCBJbnRSZWN0Jik7CisKKyAgICB2aXJ0dWFsIGJv
b2wgcGFpbnRUZXh0RmllbGQoUmVuZGVyT2JqZWN0KiwgY29uc3QgUGFpbnRJbmZvJiwgY29uc3Qg
SW50UmVjdCYpOworCisgICAgdmlydHVhbCBib29sIHBhaW50VGV4dEFyZWEoUmVuZGVyT2JqZWN0
KiwgY29uc3QgUGFpbnRJbmZvJiwgY29uc3QgSW50UmVjdCYpOworICAgIHZpcnR1YWwgdm9pZCBh
ZGp1c3RUZXh0QXJlYVN0eWxlKFN0eWxlUmVzb2x2ZXIqLCBSZW5kZXJTdHlsZSosIEVsZW1lbnQq
KSBjb25zdDsKKworICAgIHZpcnR1YWwgYm9vbCBwYWludE1lbnVMaXN0KFJlbmRlck9iamVjdCos
IGNvbnN0IFBhaW50SW5mbyYsIGNvbnN0IEludFJlY3QmKTsKKworICAgIHZpcnR1YWwgYm9vbCBw
YWludE1lbnVMaXN0QnV0dG9uKFJlbmRlck9iamVjdCosIGNvbnN0IFBhaW50SW5mbyYsIGNvbnN0
IEludFJlY3QmKTsKKyAgICB2aXJ0dWFsIHZvaWQgYWRqdXN0TWVudUxpc3RCdXR0b25TdHlsZShT
dHlsZVJlc29sdmVyKiwgUmVuZGVyU3R5bGUqLCBFbGVtZW50KikgY29uc3Q7CisKKyNpZiBFTkFC
TEUoUFJPR1JFU1NfRUxFTUVOVCkKKyAgICAvLyBSZXR1cm5zIHRoZSBkdXJhdGlvbiBvZiB0aGUg
YW5pbWF0aW9uIGZvciB0aGUgcHJvZ3Jlc3MgYmFyLgorICAgIHZpcnR1YWwgZG91YmxlIGFuaW1h
dGlvbkR1cmF0aW9uRm9yUHJvZ3Jlc3NCYXIoUmVuZGVyUHJvZ3Jlc3MqKSBjb25zdDsKKyAgICB2
aXJ0dWFsIGJvb2wgcGFpbnRQcm9ncmVzc0JhcihSZW5kZXJPYmplY3QqLCBjb25zdCBQYWludElu
Zm8mLCBjb25zdCBJbnRSZWN0Jik7CisjZW5kaWYKKworICAgIHZpcnR1YWwgYm9vbCBwYWludFNs
aWRlclRyYWNrKFJlbmRlck9iamVjdCosIGNvbnN0IFBhaW50SW5mbyYsIGNvbnN0IEludFJlY3Qm
KTsKKyAgICB2aXJ0dWFsIHZvaWQgYWRqdXN0U2xpZGVyVHJhY2tTdHlsZShTdHlsZVJlc29sdmVy
KiwgUmVuZGVyU3R5bGUqLCBFbGVtZW50KikgY29uc3Q7CisKKyAgICB2aXJ0dWFsIGJvb2wgcGFp
bnRTbGlkZXJUaHVtYihSZW5kZXJPYmplY3QqLCBjb25zdCBQYWludEluZm8mLCBjb25zdCBJbnRS
ZWN0Jik7CisgICAgdmlydHVhbCB2b2lkIGFkanVzdFNsaWRlclRodW1iU3R5bGUoU3R5bGVSZXNv
bHZlciosIFJlbmRlclN0eWxlKiwgRWxlbWVudCopIGNvbnN0OworCisgICAgdmlydHVhbCBib29s
IHBhaW50U2VhcmNoRmllbGQoUmVuZGVyT2JqZWN0KiwgY29uc3QgUGFpbnRJbmZvJiwgY29uc3Qg
SW50UmVjdCYpOworCisgICAgdmlydHVhbCB2b2lkIGFkanVzdFNlYXJjaEZpZWxkRGVjb3JhdGlv
blN0eWxlKFN0eWxlUmVzb2x2ZXIqLCBSZW5kZXJTdHlsZSosIEVsZW1lbnQqKSBjb25zdDsKKyAg
ICB2aXJ0dWFsIGJvb2wgcGFpbnRTZWFyY2hGaWVsZERlY29yYXRpb24oUmVuZGVyT2JqZWN0Kiwg
Y29uc3QgUGFpbnRJbmZvJiwgY29uc3QgSW50UmVjdCYpOworCisgICAgdmlydHVhbCB2b2lkIGFk
anVzdFNlYXJjaEZpZWxkUmVzdWx0c0RlY29yYXRpb25TdHlsZShTdHlsZVJlc29sdmVyKiwgUmVu
ZGVyU3R5bGUqLCBFbGVtZW50KikgY29uc3Q7CisgICAgdmlydHVhbCBib29sIHBhaW50U2VhcmNo
RmllbGRSZXN1bHRzRGVjb3JhdGlvbihSZW5kZXJPYmplY3QqLCBjb25zdCBQYWludEluZm8mLCBj
b25zdCBJbnRSZWN0Jik7CisKKyNpZm5kZWYgUVRfTk9fU1BJTkJPWAorICAgIHZpcnR1YWwgYm9v
bCBwYWludElubmVyU3BpbkJ1dHRvbihSZW5kZXJPYmplY3QqLCBjb25zdCBQYWludEluZm8mLCBj
b25zdCBJbnRSZWN0Jik7CisjZW5kaWYKKworcHJvdGVjdGVkOgorICAgIHZpcnR1YWwgdm9pZCBj
b21wdXRlU2l6ZUJhc2VkT25TdHlsZShSZW5kZXJTdHlsZSopIGNvbnN0OworCisgICAgdmlydHVh
bCBRU2hhcmVkUG9pbnRlcjxTdHlsZVBhaW50ZXI+IGdldFN0eWxlUGFpbnRlcihjb25zdCBQYWlu
dEluZm8mKTsKKworICAgIHZpcnR1YWwgUVJlY3QgaW5mbGF0ZUJ1dHRvblJlY3QoY29uc3QgUVJl
Y3QmIG9yaWdpbmFsUmVjdCkgY29uc3Q7CisKKyAgICB2aXJ0dWFsIHZvaWQgc2V0UG9wdXBQYWRk
aW5nKFJlbmRlclN0eWxlKikgY29uc3Q7CisKKyAgICB2aXJ0dWFsIFFQYWxldHRlIGNvbG9yUGFs
ZXR0ZSgpIGNvbnN0OworCitwcml2YXRlOgorICAgIENvbnRyb2xQYXJ0IGluaXRpYWxpemVDb21t
b25RU3R5bGVPcHRpb25zKFFTdHlsZUludGVyZmFjZU9wdGlvbiYsIFJlbmRlck9iamVjdCopIGNv
bnN0OworCisgICAgdm9pZCBzZXRCdXR0b25QYWRkaW5nKFJlbmRlclN0eWxlKikgY29uc3Q7CisK
KyAgICB2b2lkIHNldFBhbGV0dGVGcm9tUGFnZUNsaWVudElmRXhpc3RzKFFQYWxldHRlJikgY29u
c3Q7CisKKyNpZmRlZiBRX09TX01BQworICAgIGludCBtX2J1dHRvbkZvbnRQaXhlbFNpemU7Cisj
ZW5kaWYKKworICAgIE93blB0cjxRU3R5bGVJbnRlcmZhY2U+IG1fc3R5bGVJbnRlcmZhY2U7Cit9
OworCitjbGFzcyBTdHlsZVBhaW50ZXJRU3R5bGUgOiBwdWJsaWMgU3R5bGVQYWludGVyIHsKK3B1
YmxpYzoKKyAgICBleHBsaWNpdCBTdHlsZVBhaW50ZXJRU3R5bGUoUmVuZGVyVGhlbWVRU3R5bGUq
LCBjb25zdCBQYWludEluZm8mLCBSZW5kZXJPYmplY3QqKTsKKyAgICBleHBsaWNpdCBTdHlsZVBh
aW50ZXJRU3R5bGUoU2Nyb2xsYmFyVGhlbWVRU3R5bGUqLCBHcmFwaGljc0NvbnRleHQqKTsKKwor
ICAgIGJvb2wgaXNWYWxpZCgpIGNvbnN0IHsgcmV0dXJuIHN0eWxlSW50ZXJmYWNlICYmIHN0eWxl
SW50ZXJmYWNlLT5pc1ZhbGlkKCkgJiYgU3R5bGVQYWludGVyOjppc1ZhbGlkKCk7IH0KKworICAg
IFFPYmplY3QqIHdpZGdldDsKKyAgICBRU3R5bGVJbnRlcmZhY2UqIHN0eWxlSW50ZXJmYWNlOwor
ICAgIFFTdHlsZUludGVyZmFjZU9wdGlvbiBzdHlsZU9wdGlvbjsKKyAgICBDb250cm9sUGFydCBh
cHBlYXJhbmNlOworCisgICAgdm9pZCBwYWludEJ1dHRvbihRU3R5bGVJbnRlcmZhY2U6OkJ1dHRv
blR5cGUgdHlwZSkKKyAgICB7IHN0eWxlSW50ZXJmYWNlLT5wYWludEJ1dHRvbihwYWludGVyLCB0
eXBlLCBzdHlsZU9wdGlvbiwgd2lkZ2V0KTsgfQorICAgIHZvaWQgcGFpbnRUZXh0RmllbGQoKQor
ICAgIHsgc3R5bGVJbnRlcmZhY2UtPnBhaW50VGV4dEZpZWxkKHBhaW50ZXIsIHN0eWxlT3B0aW9u
LCB3aWRnZXQpOyB9CisgICAgdm9pZCBwYWludENvbWJvQm94KCkKKyAgICB7IHN0eWxlSW50ZXJm
YWNlLT5wYWludENvbWJvQm94KHBhaW50ZXIsIHN0eWxlT3B0aW9uLCB3aWRnZXQpOyB9CisgICAg
dm9pZCBwYWludENvbWJvQm94QXJyb3coKQorICAgIHsgc3R5bGVJbnRlcmZhY2UtPnBhaW50Q29t
Ym9Cb3hBcnJvdyhwYWludGVyLCBzdHlsZU9wdGlvbiwgd2lkZ2V0KTsgfQorICAgIHZvaWQgcGFp
bnRTbGlkZXJUcmFjaygpCisgICAgeyBzdHlsZUludGVyZmFjZS0+cGFpbnRTbGlkZXJUcmFjayhw
YWludGVyLCBzdHlsZU9wdGlvbiwgd2lkZ2V0KTsgfQorICAgIHZvaWQgcGFpbnRTbGlkZXJUaHVt
YigpCisgICAgeyBzdHlsZUludGVyZmFjZS0+cGFpbnRTbGlkZXJUaHVtYihwYWludGVyLCBzdHls
ZU9wdGlvbiwgd2lkZ2V0KTsgfQorICAgIHZvaWQgcGFpbnRJbm5lclNwaW5CdXR0b24oYm9vbCBz
cGluQm94VXApCisgICAgeyBzdHlsZUludGVyZmFjZS0+cGFpbnRJbm5lclNwaW5CdXR0b24ocGFp
bnRlciwgc3R5bGVPcHRpb24sIHNwaW5Cb3hVcCwgd2lkZ2V0KTsgfQorICAgIHZvaWQgcGFpbnRQ
cm9ncmVzc0Jhcihkb3VibGUgcHJvZ3Jlc3MsIGRvdWJsZSBhbmltYXRpb25Qcm9ncmVzcykKKyAg
ICB7IHN0eWxlSW50ZXJmYWNlLT5wYWludFByb2dyZXNzQmFyKHBhaW50ZXIsIHN0eWxlT3B0aW9u
LCBwcm9ncmVzcywgYW5pbWF0aW9uUHJvZ3Jlc3MsIHdpZGdldCk7IH0KKyAgICB2b2lkIHBhaW50
U2Nyb2xsQ29ybmVyKGNvbnN0IFFSZWN0JiByZWN0KQorICAgIHsgc3R5bGVJbnRlcmZhY2UtPnBh
aW50U2Nyb2xsQ29ybmVyKHBhaW50ZXIsIHJlY3QsIHdpZGdldCk7IH0KKyAgICB2b2lkIHBhaW50
U2Nyb2xsQmFyKCkKKyAgICB7IHN0eWxlSW50ZXJmYWNlLT5wYWludFNjcm9sbEJhcihwYWludGVy
LCBzdHlsZU9wdGlvbiwgd2lkZ2V0KTsgfQorCitwcml2YXRlOgorICAgIHZvaWQgaW5pdChHcmFw
aGljc0NvbnRleHQqKTsKKworICAgIFFfRElTQUJMRV9DT1BZKFN0eWxlUGFpbnRlclFTdHlsZSkK
K307CisKK30KKworI2VuZGlmIC8vIFJlbmRlclRoZW1lUVN0eWxlX2gKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL3F0L1Njcm9sbGJhclRoZW1lUVN0eWxlLmNwcCBiL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL3F0L1Njcm9sbGJhclRoZW1lUVN0eWxlLmNwcApuZXcgZmlsZSBt
b2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
Li42MTE1OGM4MzRmYmRmN2NmZDU3M2I5MzMxNzFlN2FmYjA2N2Y0ZTNjCi0tLSAvZGV2L251bGwK
KysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vcXQvU2Nyb2xsYmFyVGhlbWVRU3R5bGUuY3Bw
CkBAIC0wLDAgKzEsMjIxIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA3LCAyMDA4IEFwcGxl
IEluYy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAwNyBTdGFpa29z
IENvbXB1dGluZyBTZXJ2aWNlcyBJbmMuIDxpbmZvQHN0YWlrb3MubmV0PgorICogQ29weXJpZ2h0
IChDKSAyMDA4IE5va2lhIENvcnBvcmF0aW9uIGFuZC9vciBpdHMgc3Vic2lkaWFyeSgtaWVzKQor
ICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMs
IHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVk
IHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0
cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJl
cHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1
bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJp
YnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBg
YEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBN
RVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBB
UkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRS
SUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBT
UEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09E
UyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJ
TkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBP
RiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRP
UlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5Z
IFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VE
IE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29u
ZmlnLmgiCisjaW5jbHVkZSAiU2Nyb2xsYmFyVGhlbWVRU3R5bGUuaCIKKworI2luY2x1ZGUgIkdy
YXBoaWNzQ29udGV4dC5oIgorI2luY2x1ZGUgIlBsYXRmb3JtTW91c2VFdmVudC5oIgorI2luY2x1
ZGUgIlJlbmRlclRoZW1lUVN0eWxlLmgiCisjaW5jbHVkZSAiU2Nyb2xsVmlldy5oIgorI2luY2x1
ZGUgIlNjcm9sbGJhci5oIgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK1Njcm9sbGJhclRoZW1l
UVN0eWxlOjpTY3JvbGxiYXJUaGVtZVFTdHlsZSgpCit7CisgICAgbV9zdHlsZUludGVyZmFjZSA9
IGFkb3B0UHRyKFJlbmRlclRoZW1lUVN0eWxlOjpzdHlsZUZhY3RvcnkoKSgvKnBhZ2UqLyAwKSk7
Cit9CisKK1Njcm9sbGJhclRoZW1lUVN0eWxlOjp+U2Nyb2xsYmFyVGhlbWVRU3R5bGUoKQorewor
fQorCitzdGF0aWMgUVN0eWxlSW50ZXJmYWNlOjpTdWJDb250cm9sIHNjUGFydChjb25zdCBTY3Jv
bGxiYXJQYXJ0JiBwYXJ0KQoreworICAgIHN3aXRjaCAocGFydCkgeworICAgIGNhc2UgTm9QYXJ0
OgorICAgICAgICByZXR1cm4gUVN0eWxlSW50ZXJmYWNlOjpTQ19Ob25lOworICAgIGNhc2UgQmFj
a0J1dHRvblN0YXJ0UGFydDoKKyAgICBjYXNlIEJhY2tCdXR0b25FbmRQYXJ0OgorICAgICAgICBy
ZXR1cm4gUVN0eWxlSW50ZXJmYWNlOjpTQ19TY3JvbGxCYXJTdWJMaW5lOworICAgIGNhc2UgQmFj
a1RyYWNrUGFydDoKKyAgICAgICAgcmV0dXJuIFFTdHlsZUludGVyZmFjZTo6U0NfU2Nyb2xsQmFy
U3ViUGFnZTsKKyAgICBjYXNlIFRodW1iUGFydDoKKyAgICAgICAgcmV0dXJuIFFTdHlsZUludGVy
ZmFjZTo6U0NfU2Nyb2xsQmFyU2xpZGVyOworICAgIGNhc2UgRm9yd2FyZFRyYWNrUGFydDoKKyAg
ICAgICAgcmV0dXJuIFFTdHlsZUludGVyZmFjZTo6U0NfU2Nyb2xsQmFyQWRkUGFnZTsKKyAgICBj
YXNlIEZvcndhcmRCdXR0b25TdGFydFBhcnQ6CisgICAgY2FzZSBGb3J3YXJkQnV0dG9uRW5kUGFy
dDoKKyAgICAgICAgcmV0dXJuIFFTdHlsZUludGVyZmFjZTo6U0NfU2Nyb2xsQmFyQWRkTGluZTsK
KyAgICB9CisKKyAgICByZXR1cm4gUVN0eWxlSW50ZXJmYWNlOjpTQ19Ob25lOworfQorCitzdGF0
aWMgU2Nyb2xsYmFyUGFydCBzY3JvbGxiYXJQYXJ0KGNvbnN0IFFTdHlsZUludGVyZmFjZTo6U3Vi
Q29udHJvbCYgc2MpCit7CisgICAgc3dpdGNoIChzYykgeworICAgIGNhc2UgUVN0eWxlSW50ZXJm
YWNlOjpTQ19Ob25lOgorICAgICAgICByZXR1cm4gTm9QYXJ0OworICAgIGNhc2UgUVN0eWxlSW50
ZXJmYWNlOjpTQ19TY3JvbGxCYXJTdWJMaW5lOgorICAgICAgICByZXR1cm4gQmFja0J1dHRvblN0
YXJ0UGFydDsKKyAgICBjYXNlIFFTdHlsZUludGVyZmFjZTo6U0NfU2Nyb2xsQmFyU3ViUGFnZToK
KyAgICAgICAgcmV0dXJuIEJhY2tUcmFja1BhcnQ7CisgICAgY2FzZSBRU3R5bGVJbnRlcmZhY2U6
OlNDX1Njcm9sbEJhclNsaWRlcjoKKyAgICAgICAgcmV0dXJuIFRodW1iUGFydDsKKyAgICBjYXNl
IFFTdHlsZUludGVyZmFjZTo6U0NfU2Nyb2xsQmFyQWRkUGFnZToKKyAgICAgICAgcmV0dXJuIEZv
cndhcmRUcmFja1BhcnQ7CisgICAgY2FzZSBRU3R5bGVJbnRlcmZhY2U6OlNDX1Njcm9sbEJhckFk
ZExpbmU6CisgICAgICAgIHJldHVybiBGb3J3YXJkQnV0dG9uU3RhcnRQYXJ0OworICAgIH0KKyAg
ICByZXR1cm4gTm9QYXJ0OworfQorCitzdGF0aWMgUVN0eWxlSW50ZXJmYWNlT3B0aW9uIGluaXRT
bGlkZXJTdHlsZU9wdGlvbihTY3JvbGxiYXJUaGVtZUNsaWVudCogc2Nyb2xsYmFyLCBRT2JqZWN0
KiB3aWRnZXQgPSAwKQoreworICAgIFFTdHlsZUludGVyZmFjZU9wdGlvbiBvcHQ7CisgICAgaWYg
KHdpZGdldCkgeworICAgICAgICBvcHQucGFsZXR0ZSA9IHdpZGdldC0+cHJvcGVydHkoInBhbGV0
dGUiKS52YWx1ZTxRUGFsZXR0ZT4oKTsKKyAgICAgICAgb3B0LnJlY3QgPSB3aWRnZXQtPnByb3Bl
cnR5KCJyZWN0IikudmFsdWU8UVJlY3Q+KCk7CisgICAgICAgIG9wdC5kaXJlY3Rpb24gPSBzdGF0
aWNfY2FzdDxRdDo6TGF5b3V0RGlyZWN0aW9uPih3aWRnZXQtPnByb3BlcnR5KCJsYXlvdXREaXJl
Y3Rpb24iKS50b0ludCgpKTsKKyAgICB9IGVsc2UKKyAgICAgICAgb3B0LnN0YXRlIHw9IFFTdHls
ZUludGVyZmFjZTo6U3RhdGVfQWN0aXZlOworCisgICAgb3B0LnN0YXRlICY9IH5RU3R5bGVJbnRl
cmZhY2U6OlN0YXRlX0hhc0ZvY3VzOworCisgICAgb3B0LnJlY3QgPSBzY3JvbGxiYXItPmZyYW1l
UmVjdCgpOworICAgIGlmIChzY3JvbGxiYXItPmVuYWJsZWQoKSkKKyAgICAgICAgb3B0LnN0YXRl
IHw9IFFTdHlsZUludGVyZmFjZTo6U3RhdGVfRW5hYmxlZDsKKyAgICBpZiAoc2Nyb2xsYmFyLT5j
b250cm9sU2l6ZSgpICE9IFJlZ3VsYXJTY3JvbGxiYXIpCisgICAgICAgIG9wdC5zdGF0ZSB8PSBR
U3R5bGVJbnRlcmZhY2U6OlN0YXRlX01pbmk7CisgICAgb3B0LnNsaWRlci5vcmllbnRhdGlvbiA9
IChzY3JvbGxiYXItPm9yaWVudGF0aW9uKCkgPT0gVmVydGljYWxTY3JvbGxiYXIpID8gUXQ6OlZl
cnRpY2FsIDogUXQ6Okhvcml6b250YWw7CisKKyAgICBpZiAoc2Nyb2xsYmFyLT5vcmllbnRhdGlv
bigpID09IEhvcml6b250YWxTY3JvbGxiYXIpCisgICAgICAgIG9wdC5zdGF0ZSB8PSBRU3R5bGVJ
bnRlcmZhY2U6OlN0YXRlX0hvcml6b250YWw7CisgICAgZWxzZQorICAgICAgICBvcHQuc3RhdGUg
Jj0gflFTdHlsZUludGVyZmFjZTo6U3RhdGVfSG9yaXpvbnRhbDsKKworICAgIG9wdC5zbGlkZXIu
dmFsdWUgPSBzY3JvbGxiYXItPnZhbHVlKCk7CisgICAgb3B0LnNsaWRlci5wb3NpdGlvbiA9IG9w
dC5zbGlkZXIudmFsdWU7CisgICAgb3B0LnNsaWRlci5wYWdlU3RlcCA9IHNjcm9sbGJhci0+cGFn
ZVN0ZXAoKTsKKyAgICBvcHQuc2xpZGVyLnNpbmdsZVN0ZXAgPSBzY3JvbGxiYXItPmxpbmVTdGVw
KCk7CisgICAgb3B0LnNsaWRlci5taW5pbXVtID0gMDsKKyAgICBvcHQuc2xpZGVyLm1heGltdW0g
PSBxTWF4KDAsIHNjcm9sbGJhci0+bWF4aW11bSgpKTsKKyAgICBTY3JvbGxiYXJQYXJ0IHByZXNz
ZWRQYXJ0ID0gc2Nyb2xsYmFyLT5wcmVzc2VkUGFydCgpOworICAgIFNjcm9sbGJhclBhcnQgaG92
ZXJlZFBhcnQgPSBzY3JvbGxiYXItPmhvdmVyZWRQYXJ0KCk7CisgICAgaWYgKHByZXNzZWRQYXJ0
ICE9IE5vUGFydCkgeworICAgICAgICBvcHQuc2xpZGVyLmFjdGl2ZVN1YkNvbnRyb2xzID0gc2NQ
YXJ0KHNjcm9sbGJhci0+cHJlc3NlZFBhcnQoKSk7CisgICAgICAgIGlmIChwcmVzc2VkUGFydCA9
PSBCYWNrQnV0dG9uU3RhcnRQYXJ0IHx8IHByZXNzZWRQYXJ0ID09IEZvcndhcmRCdXR0b25TdGFy
dFBhcnQKKyAgICAgICAgICAgIHx8IHByZXNzZWRQYXJ0ID09IEJhY2tCdXR0b25FbmRQYXJ0IHx8
IHByZXNzZWRQYXJ0ID09IEZvcndhcmRCdXR0b25FbmRQYXJ0CisgICAgICAgICAgICB8fCBwcmVz
c2VkUGFydCA9PSBUaHVtYlBhcnQpCisgICAgICAgICAgICBvcHQuc3RhdGUgfD0gUVN0eWxlSW50
ZXJmYWNlOjpTdGF0ZV9TdW5rZW47CisgICAgfSBlbHNlCisgICAgICAgIG9wdC5zbGlkZXIuYWN0
aXZlU3ViQ29udHJvbHMgPSBzY1BhcnQoaG92ZXJlZFBhcnQpOworICAgIGlmIChob3ZlcmVkUGFy
dCAhPSBOb1BhcnQpCisgICAgICAgIG9wdC5zdGF0ZSB8PSBRU3R5bGVJbnRlcmZhY2U6OlN0YXRl
X01vdXNlT3ZlcjsKKyAgICByZXR1cm4gb3B0OworfQorCitib29sIFNjcm9sbGJhclRoZW1lUVN0
eWxlOjpwYWludChTY3JvbGxiYXJUaGVtZUNsaWVudCogc2Nyb2xsYmFyLCBHcmFwaGljc0NvbnRl
eHQqIGdyYXBoaWNzQ29udGV4dCwgY29uc3QgSW50UmVjdCYgZGlydHlSZWN0KQoreworICAgIGlm
IChncmFwaGljc0NvbnRleHQtPnVwZGF0aW5nQ29udHJvbFRpbnRzKCkpIHsKKyAgICAgICBzY3Jv
bGxiYXItPmludmFsaWRhdGVSZWN0KGRpcnR5UmVjdCk7CisgICAgICAgcmV0dXJuIGZhbHNlOwor
ICAgIH0KKworICAgIFN0eWxlUGFpbnRlclFTdHlsZSBwKHRoaXMsIGdyYXBoaWNzQ29udGV4dCk7
CisgICAgaWYgKCFwLmlzVmFsaWQoKSkKKyAgICAgIHJldHVybiB0cnVlOworCisgICAgcC5wYWlu
dGVyLT5zYXZlKCk7CisgICAgcC5zdHlsZU9wdGlvbiA9IGluaXRTbGlkZXJTdHlsZU9wdGlvbihz
Y3JvbGxiYXIsIHAud2lkZ2V0KTsKKworICAgIHAucGFpbnRlci0+c2V0Q2xpcFJlY3QocC5zdHls
ZU9wdGlvbi5yZWN0LmludGVyc2VjdGVkKGRpcnR5UmVjdCksIFF0OjpJbnRlcnNlY3RDbGlwKTsK
KyAgICBwLnBhaW50U2Nyb2xsQmFyKCk7CisgICAgcC5wYWludGVyLT5yZXN0b3JlKCk7CisgICAg
cmV0dXJuIHRydWU7Cit9CisKK1Njcm9sbGJhclBhcnQgU2Nyb2xsYmFyVGhlbWVRU3R5bGU6Omhp
dFRlc3QoU2Nyb2xsYmFyVGhlbWVDbGllbnQqIHNjcm9sbGJhciwgY29uc3QgUGxhdGZvcm1Nb3Vz
ZUV2ZW50JiBldnQpCit7CisgICAgUVN0eWxlSW50ZXJmYWNlT3B0aW9uIG9wdCA9IGluaXRTbGlk
ZXJTdHlsZU9wdGlvbihzY3JvbGxiYXIpOworICAgIGNvbnN0IFFQb2ludCBwb3MgPSBzY3JvbGxi
YXItPmNvbnZlcnRGcm9tQ29udGFpbmluZ1dpbmRvdyhldnQucG9zaXRpb24oKSk7CisgICAgb3B0
LnJlY3QubW92ZVRvKFFQb2ludCgwLCAwKSk7CisgICAgUVN0eWxlSW50ZXJmYWNlOjpTdWJDb250
cm9sIHNjID0gbV9zdHlsZUludGVyZmFjZS0+aGl0VGVzdFNjcm9sbEJhcihvcHQsIHBvcyk7Cisg
ICAgcmV0dXJuIHNjcm9sbGJhclBhcnQoc2MpOworfQorCitib29sIFNjcm9sbGJhclRoZW1lUVN0
eWxlOjpzaG91bGRDZW50ZXJPblRodW1iKFNjcm9sbGJhclRoZW1lQ2xpZW50KiwgY29uc3QgUGxh
dGZvcm1Nb3VzZUV2ZW50JiBldnQpCit7CisgICAgLy8gTWlkZGxlIGNsaWNrIGNlbnRlcnMgc2xp
ZGVyIHRodW1iIChpZiBzdXBwb3J0ZWQpLgorICAgIHJldHVybiBtX3N0eWxlSW50ZXJmYWNlLT5z
Y3JvbGxCYXJNaWRkbGVDbGlja0Fic29sdXRlUG9zaXRpb25TdHlsZUhpbnQoKSAmJiBldnQuYnV0
dG9uKCkgPT0gTWlkZGxlQnV0dG9uOworfQorCit2b2lkIFNjcm9sbGJhclRoZW1lUVN0eWxlOjpp
bnZhbGlkYXRlUGFydChTY3JvbGxiYXJUaGVtZUNsaWVudCogc2Nyb2xsYmFyLCBTY3JvbGxiYXJQ
YXJ0KQoreworICAgIC8vIEZJWE1FOiBEbyBtb3JlIHByZWNpc2UgaW52YWxpZGF0aW9uLgorICAg
IHNjcm9sbGJhci0+aW52YWxpZGF0ZSgpOworfQorCitpbnQgU2Nyb2xsYmFyVGhlbWVRU3R5bGU6
OnNjcm9sbGJhclRoaWNrbmVzcyhTY3JvbGxiYXJDb250cm9sU2l6ZSBjb250cm9sU2l6ZSkKK3sK
KyAgICBjb25zdCBib29sIG1pbmkgPSBjb250cm9sU2l6ZSAhPSBSZWd1bGFyU2Nyb2xsYmFyOwor
ICAgIHJldHVybiBtX3N0eWxlSW50ZXJmYWNlLT5zY3JvbGxCYXJFeHRlbnQobWluaSk7Cit9CisK
K2ludCBTY3JvbGxiYXJUaGVtZVFTdHlsZTo6dGh1bWJQb3NpdGlvbihTY3JvbGxiYXJUaGVtZUNs
aWVudCogc2Nyb2xsYmFyKQoreworICAgIGlmIChzY3JvbGxiYXItPmVuYWJsZWQoKSkgeworICAg
ICAgICBmbG9hdCBwb3MgPSAoZmxvYXQpc2Nyb2xsYmFyLT5jdXJyZW50UG9zKCkgKiAodHJhY2tM
ZW5ndGgoc2Nyb2xsYmFyKSAtIHRodW1iTGVuZ3RoKHNjcm9sbGJhcikpIC8gc2Nyb2xsYmFyLT5t
YXhpbXVtKCk7CisgICAgICAgIHJldHVybiAocG9zIDwgMSAmJiBwb3MgPiAwKSA/IDEgOiBwb3M7
CisgICAgfQorICAgIHJldHVybiAwOworfQorCitpbnQgU2Nyb2xsYmFyVGhlbWVRU3R5bGU6OnRo
dW1iTGVuZ3RoKFNjcm9sbGJhclRoZW1lQ2xpZW50KiBzY3JvbGxiYXIpCit7CisgICAgUVN0eWxl
SW50ZXJmYWNlT3B0aW9uIG9wdCA9IGluaXRTbGlkZXJTdHlsZU9wdGlvbihzY3JvbGxiYXIpOwor
ICAgIFFSZWN0IHRodW1iID0gbV9zdHlsZUludGVyZmFjZS0+c2Nyb2xsQmFyU3ViQ29udHJvbFJl
Y3Qob3B0LCBRU3R5bGVJbnRlcmZhY2U6OlNDX1Njcm9sbEJhclNsaWRlcik7CisgICAgcmV0dXJu
IHNjcm9sbGJhci0+b3JpZW50YXRpb24oKSA9PSBIb3Jpem9udGFsU2Nyb2xsYmFyID8gdGh1bWIu
d2lkdGgoKSA6IHRodW1iLmhlaWdodCgpOworfQorCitpbnQgU2Nyb2xsYmFyVGhlbWVRU3R5bGU6
OnRyYWNrUG9zaXRpb24oU2Nyb2xsYmFyVGhlbWVDbGllbnQqIHNjcm9sbGJhcikKK3sKKyAgICBR
U3R5bGVJbnRlcmZhY2VPcHRpb24gb3B0ID0gaW5pdFNsaWRlclN0eWxlT3B0aW9uKHNjcm9sbGJh
cik7CisgICAgUVJlY3QgdHJhY2sgPSBtX3N0eWxlSW50ZXJmYWNlLT5zY3JvbGxCYXJTdWJDb250
cm9sUmVjdChvcHQsIFFTdHlsZUludGVyZmFjZTo6U0NfU2Nyb2xsQmFyR3Jvb3ZlKTsKKyAgICBy
ZXR1cm4gc2Nyb2xsYmFyLT5vcmllbnRhdGlvbigpID09IEhvcml6b250YWxTY3JvbGxiYXIgPyB0
cmFjay54KCkgLSBzY3JvbGxiYXItPngoKSA6IHRyYWNrLnkoKSAtIHNjcm9sbGJhci0+eSgpOwor
fQorCitpbnQgU2Nyb2xsYmFyVGhlbWVRU3R5bGU6OnRyYWNrTGVuZ3RoKFNjcm9sbGJhclRoZW1l
Q2xpZW50KiBzY3JvbGxiYXIpCit7CisgICAgUVN0eWxlSW50ZXJmYWNlT3B0aW9uIG9wdCA9IGlu
aXRTbGlkZXJTdHlsZU9wdGlvbihzY3JvbGxiYXIpOworICAgIFFSZWN0IHRyYWNrID0gbV9zdHls
ZUludGVyZmFjZS0+c2Nyb2xsQmFyU3ViQ29udHJvbFJlY3Qob3B0LCBRU3R5bGVJbnRlcmZhY2U6
OlNDX1Njcm9sbEJhckdyb292ZSk7CisgICAgcmV0dXJuIHNjcm9sbGJhci0+b3JpZW50YXRpb24o
KSA9PSBIb3Jpem9udGFsU2Nyb2xsYmFyID8gdHJhY2sud2lkdGgoKSA6IHRyYWNrLmhlaWdodCgp
OworfQorCit2b2lkIFNjcm9sbGJhclRoZW1lUVN0eWxlOjpwYWludFNjcm9sbENvcm5lcihTY3Jv
bGxWaWV3KiwgR3JhcGhpY3NDb250ZXh0KiBjb250ZXh0LCBjb25zdCBJbnRSZWN0JiByZWN0KQor
eworICAgIFN0eWxlUGFpbnRlclFTdHlsZSBwKHRoaXMsIGNvbnRleHQpOworICAgIGlmICghcC5p
c1ZhbGlkKCkpCisgICAgICAgIHJldHVybjsKKworICAgIHAucGFpbnRTY3JvbGxDb3JuZXIocmVj
dCk7Cit9CisKK30KKwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vcXQvU2Ny
b2xsYmFyVGhlbWVRU3R5bGUuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3F0L1Njcm9sbGJh
clRoZW1lUVN0eWxlLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uNzA3M2ZiMTcwYWZlYWY5NTYyZGI0OWQ2ODA0NmNh
OWZiMjk1M2U2YQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3F0
L1Njcm9sbGJhclRoZW1lUVN0eWxlLmgKQEAgLTAsMCArMSw2NSBAQAorLyoKKyAqIENvcHlyaWdo
dCAoQykgMjAwOCBBcHBsZSBJbmMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCisgKgorICogUmVkaXN0
cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRo
b3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9s
bG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Yg
c291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgor
ICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5k
L29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgor
ICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQg
QU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElU
WSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVE
LiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJ
QUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBF
WEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VT
OyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQ
VElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwg
V0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xV
RElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBU
SEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJ
QklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpZm5kZWYgU2Nyb2xsYmFyVGhlbWVRU3R5
bGVfaAorI2RlZmluZSBTY3JvbGxiYXJUaGVtZVFTdHlsZV9oCisKKyNpbmNsdWRlICJTY3JvbGxi
YXJUaGVtZS5oIgorCisjaW5jbHVkZSA8UXRDb3JlL3FnbG9iYWwuaD4KKworbmFtZXNwYWNlIFdl
YkNvcmUgeworCitjbGFzcyBRU3R5bGVJbnRlcmZhY2U7CisKK2NsYXNzIFNjcm9sbGJhclRoZW1l
UVN0eWxlIDogcHVibGljIFNjcm9sbGJhclRoZW1lIHsKK3B1YmxpYzoKKyAgICBTY3JvbGxiYXJU
aGVtZVFTdHlsZSgpOworICAgIHZpcnR1YWwgflNjcm9sbGJhclRoZW1lUVN0eWxlKCk7CisKKyAg
ICB2aXJ0dWFsIGJvb2wgcGFpbnQoU2Nyb2xsYmFyVGhlbWVDbGllbnQqLCBHcmFwaGljc0NvbnRl
eHQqLCBjb25zdCBJbnRSZWN0JiBkaXJ0eVJlY3QpOworICAgIHZpcnR1YWwgdm9pZCBwYWludFNj
cm9sbENvcm5lcihTY3JvbGxWaWV3KiwgR3JhcGhpY3NDb250ZXh0KiwgY29uc3QgSW50UmVjdCYg
Y29ybmVyUmVjdCk7CisKKyAgICB2aXJ0dWFsIFNjcm9sbGJhclBhcnQgaGl0VGVzdChTY3JvbGxi
YXJUaGVtZUNsaWVudCosIGNvbnN0IFBsYXRmb3JtTW91c2VFdmVudCYpOworCisgICAgdmlydHVh
bCBib29sIHNob3VsZENlbnRlck9uVGh1bWIoU2Nyb2xsYmFyVGhlbWVDbGllbnQqLCBjb25zdCBQ
bGF0Zm9ybU1vdXNlRXZlbnQmKTsKKworICAgIHZpcnR1YWwgdm9pZCBpbnZhbGlkYXRlUGFydChT
Y3JvbGxiYXJUaGVtZUNsaWVudCosIFNjcm9sbGJhclBhcnQpOworCisgICAgdmlydHVhbCBpbnQg
dGh1bWJQb3NpdGlvbihTY3JvbGxiYXJUaGVtZUNsaWVudCopOworICAgIHZpcnR1YWwgaW50IHRo
dW1iTGVuZ3RoKFNjcm9sbGJhclRoZW1lQ2xpZW50Kik7CisgICAgdmlydHVhbCBpbnQgdHJhY2tQ
b3NpdGlvbihTY3JvbGxiYXJUaGVtZUNsaWVudCopOworICAgIHZpcnR1YWwgaW50IHRyYWNrTGVu
Z3RoKFNjcm9sbGJhclRoZW1lQ2xpZW50Kik7CisKKyAgICB2aXJ0dWFsIGludCBzY3JvbGxiYXJU
aGlja25lc3MoU2Nyb2xsYmFyQ29udHJvbFNpemUgPSBSZWd1bGFyU2Nyb2xsYmFyKTsKKworICAg
IFFTdHlsZUludGVyZmFjZSogc3R5bGVJbnRlcmZhY2UoKSB7IHJldHVybiBtX3N0eWxlSW50ZXJm
YWNlLmdldCgpOyB9CisKK3ByaXZhdGU6CisgICAgT3duUHRyPFFTdHlsZUludGVyZmFjZT4gbV9z
dHlsZUludGVyZmFjZTsKK307CisKK30KKyNlbmRpZgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktp
dC9XZWJLaXQxLnBybyBiL1NvdXJjZS9XZWJLaXQvV2ViS2l0MS5wcm8KaW5kZXggYWUyM2M0ZWNh
NDQxMmEwNjUyM2FiZWI2ODBhYjg0MzgwNjc5YjI0NS4uMzgwYTQ5MjA2YjM2YzM5NmEwMDg4Nzdk
ZDlkNWZiMDJhOTc2OTc2NCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9XZWJLaXQxLnBybwor
KysgYi9Tb3VyY2UvV2ViS2l0L1dlYktpdDEucHJvCkBAIC00OSwxMiArNDksMTEgQEAgU09VUkNF
UyArPSBcCiAgICAgJCRQV0QvcXQvV2ViQ29yZVN1cHBvcnQvUGFnZUNsaWVudFF0LmNwcCBcCiAg
ICAgJCRQV0QvcXQvV2ViQ29yZVN1cHBvcnQvUG9wdXBNZW51UXQuY3BwIFwKICAgICAkJFBXRC9x
dC9XZWJDb3JlU3VwcG9ydC9RdFBsYXRmb3JtUGx1Z2luLmNwcCBcCi0gICAgJCRQV0QvcXQvV2Vi
Q29yZVN1cHBvcnQvUmVuZGVyVGhlbWVRU3R5bGUuY3BwIFwKLSAgICAkJFBXRC9xdC9XZWJDb3Jl
U3VwcG9ydC9TY3JvbGxiYXJUaGVtZVFTdHlsZS5jcHAgXAogICAgICQkUFdEL3F0L1dlYkNvcmVT
dXBwb3J0L1NlYXJjaFBvcHVwTWVudVF0LmNwcCBcCiAgICAgJCRQV0QvcXQvV2ViQ29yZVN1cHBv
cnQvVGV4dENoZWNrZXJDbGllbnRRdC5jcHAgXAogICAgICQkUFdEL3F0L1dlYkNvcmVTdXBwb3J0
L1BsYXRmb3JtU3RyYXRlZ2llc1F0LmNwcCBcCi0gICAgJCRQV0QvcXQvV2ViQ29yZVN1cHBvcnQv
V2ViRXZlbnRDb252ZXJzaW9uLmNwcAorICAgICQkUFdEL3F0L1dlYkNvcmVTdXBwb3J0L1dlYkV2
ZW50Q29udmVyc2lvbi5jcHAgXAorICAgICQkUFdEL3F0L1dlYkNvcmVTdXBwb3J0L1FXZWJTdHls
ZS5jcHAgXAogCiBIRUFERVJTICs9IFwKICAgICAkJFBXRC9xdC9BcGkvcXdlYmZyYW1lLmggXApA
QCAtODcsMTIgKzg2LDExIEBAIEhFQURFUlMgKz0gXAogICAgICQkUFdEL3F0L1dlYkNvcmVTdXBw
b3J0L1BhZ2VDbGllbnRRdC5oIFwKICAgICAkJFBXRC9xdC9XZWJDb3JlU3VwcG9ydC9Qb3B1cE1l
bnVRdC5oIFwKICAgICAkJFBXRC9xdC9XZWJDb3JlU3VwcG9ydC9RdFBsYXRmb3JtUGx1Z2luLmgg
XAotICAgICQkUFdEL3F0L1dlYkNvcmVTdXBwb3J0L1JlbmRlclRoZW1lUVN0eWxlLmggXAotICAg
ICQkUFdEL3F0L1dlYkNvcmVTdXBwb3J0L1Njcm9sbGJhclRoZW1lUVN0eWxlLmggXAogICAgICQk
UFdEL3F0L1dlYkNvcmVTdXBwb3J0L1NlYXJjaFBvcHVwTWVudVF0LmggXAogICAgICQkUFdEL3F0
L1dlYkNvcmVTdXBwb3J0L1RleHRDaGVja2VyQ2xpZW50UXQuaCBcCiAgICAgJCRQV0QvcXQvV2Vi
Q29yZVN1cHBvcnQvUGxhdGZvcm1TdHJhdGVnaWVzUXQuaCBcCi0gICAgJCRQV0QvcXQvV2ViQ29y
ZVN1cHBvcnQvV2ViRXZlbnRDb252ZXJzaW9uLmgKKyAgICAkJFBXRC9xdC9XZWJDb3JlU3VwcG9y
dC9XZWJFdmVudENvbnZlcnNpb24uaCBcCisgICAgJCRQV0QvcXQvV2ViQ29yZVN1cHBvcnQvUVdl
YlN0eWxlLmgKIAogY29udGFpbnMoUVRfQ09ORklHLGFjY2Vzc2liaWxpdHkpIHsKICAgICBTT1VS
Q0VTICs9ICQkUFdEL3F0L0FwaS9xd2Vidmlld2FjY2Vzc2libGUuY3BwCmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViS2l0L3F0L1dlYkNvcmVTdXBwb3J0L0luaXRXZWJDb3JlUXQuY3BwIGIvU291cmNl
L1dlYktpdC9xdC9XZWJDb3JlU3VwcG9ydC9Jbml0V2ViQ29yZVF0LmNwcAppbmRleCBjNjNjY2Iw
NDJiMDU0MzJjZTk1MmY1NTE5ZTUwYTUyMzQ4OTdlOWMxLi42N2VkMTA5ODk2MzBjMzdkYzI0ZTcy
MzYwYmNkYzE5YzZkN2VkZmVlIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L3F0L1dlYkNvcmVT
dXBwb3J0L0luaXRXZWJDb3JlUXQuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvcXQvV2ViQ29yZVN1
cHBvcnQvSW5pdFdlYkNvcmVRdC5jcHAKQEAgLTMzLDYgKzMzLDcgQEAKICNpbmNsdWRlICJJbWFn
ZS5oIgogI2luY2x1ZGUgIk5vdEltcGxlbWVudGVkLmgiCiAjaW5jbHVkZSAiUGxhdGZvcm1TdHJh
dGVnaWVzUXQuaCIKKyNpbmNsdWRlICJRV2ViU3R5bGUuaCIKICNpbmNsdWRlICJSZW5kZXJUaGVt
ZVFTdHlsZS5oIgogI2luY2x1ZGUgIlNjcmlwdENvbnRyb2xsZXIuaCIKICNpbmNsdWRlICJTY3Jv
bGxiYXJUaGVtZVFTdHlsZS5oIgpAQCAtNzYsNiArNzcsNyBAQCB2b2lkIGluaXRpYWxpemVXZWJD
b3JlUXQoKQogICAgIFBsYXRmb3JtU3RyYXRlZ2llc1F0Ojppbml0aWFsaXplKCk7CiAgICAgUXRX
ZWJFbGVtZW50UnVudGltZTo6aW5pdGlhbGl6ZSgpOwogCisgICAgUmVuZGVyVGhlbWVRU3R5bGU6
OnNldFN0eWxlRmFjdG9yeUZ1bmN0aW9uKFdlYktpdDo6UVdlYlN0eWxlOjpjcmVhdGUpOwogICAg
IFJlbmRlclRoZW1lUXQ6OnNldEN1c3RvbVRoZW1lKFJlbmRlclRoZW1lUVN0eWxlOjpjcmVhdGUs
IG5ldyBTY3JvbGxiYXJUaGVtZVFTdHlsZSk7CiAKICNpZiBVU0UoUVRLSVQpCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViS2l0L3F0L1dlYkNvcmVTdXBwb3J0L1FXZWJTdHlsZS5jcHAgYi9Tb3VyY2Uv
V2ViS2l0L3F0L1dlYkNvcmVTdXBwb3J0L1FXZWJTdHlsZS5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2
NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uMmZmOWVi
YjNmMDk0OGM5YjVmMmJiZWEyZmJkZTFmM2Y1NzY4MTY2YQotLS0gL2Rldi9udWxsCisrKyBiL1Nv
dXJjZS9XZWJLaXQvcXQvV2ViQ29yZVN1cHBvcnQvUVdlYlN0eWxlLmNwcApAQCAtMCwwICsxLDU0
MyBAQAorLyoKKyAqIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSB0aGVtZSBpbXBsZW1lbnRhdGlv
biBmb3IgZm9ybSBjb250cm9scyBpbiBXZWJDb3JlLgorICoKKyAqIENvcHlyaWdodCAoQykgMjAx
MiBEaWdpYSBQbGMgYW5kL29yIGl0cyBzdWJzaWRpYXJ5KC1pZXMpLgorICogQ29weXJpZ2h0IChD
KSAyMDExLTIwMTIgTm9raWEgQ29ycG9yYXRpb24gYW5kL29yIGl0cyBzdWJzaWRpYXJ5KC1pZXMp
LgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJp
YnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBM
aWJyYXJ5IEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJl
ZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5z
ZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIGxp
YnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwK
KyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdh
cnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFS
IFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNl
IGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29w
eSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0
aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUg
dG8KKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0
cmVldCwgRmlmdGggRmxvb3IsCisgKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKyAqCisg
Ki8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorCisjaW5jbHVkZSAiUVdlYlN0eWxlLmgiCisKKyNp
bmNsdWRlIDxRQXBwbGljYXRpb24+CisjaW5jbHVkZSA8UUxpbmVFZGl0PgorI2luY2x1ZGUgPFFN
YWNTdHlsZT4KKyNpbmNsdWRlIDxRUGFpbnRlcj4KKyNpbmNsdWRlIDxRUHVzaEJ1dHRvbj4KKyNp
Zm5kZWYgUVRfTk9fU1RZTEVfUExBU1RJUVVFCisjaW5jbHVkZSA8UVBsYXN0aXF1ZVN0eWxlPgor
I2VuZGlmCisjaW5jbHVkZSA8UVN0eWxlRmFjdG9yeT4KKyNpbmNsdWRlIDxRU3R5bGVPcHRpb24+
CisKKyNpbmNsdWRlIDxRV2ViUGFnZUNsaWVudC5oPgorCit1c2luZyBuYW1lc3BhY2UgV2ViQ29y
ZTsKKworbmFtZXNwYWNlIFdlYktpdCB7CisKK3N0YXRpYyBRU3R5bGU6OlN0YXRlIGNvbnZlcnRU
b1FTdHlsZVN0YXRlKFFTdHlsZUludGVyZmFjZTo6U3RhdGUgc3RhdGUpCit7CisgICAgUVN0eWxl
OjpTdGF0ZSByZXN1bHQ7CisjZGVmaW5lIENPTlZFUlRfU1RBVEUoUHJveGllZFN0YXRlLCBWYWx1
ZSkgXAorICAgIGlmIChzdGF0ZSAmIFFTdHlsZUludGVyZmFjZTo6UHJveGllZFN0YXRlKSBcCisg
ICAgICAgIHJlc3VsdCB8PSBRU3R5bGU6OlByb3hpZWRTdGF0ZTsKKworICAgIEZPUl9FQUNIX01B
UFBFRF9TVEFURShDT05WRVJUX1NUQVRFLCApCisKKyN1bmRlZiBDT05WRVJUX1NUQVRFCisKKyAg
ICByZXR1cm4gcmVzdWx0OworfQorCitzdGF0aWMgUVN0eWxlOjpTdWJDb250cm9sIGNvbnZlcnRU
b1FTdHlsZVN1YkNvbnRyb2woUVN0eWxlSW50ZXJmYWNlOjpTdWJDb250cm9sIHNjKQoreworI2Rl
ZmluZSBDT05WRVJUX1NVQkNPTlRST0woRiwgVmFsdWUpIFwKKyAgICBjYXNlIFFTdHlsZUludGVy
ZmFjZTo6RjogcmV0dXJuIFFTdHlsZTo6RgorCisgICAgc3dpdGNoIChzYykgeworICAgICAgICBG
T1JfRUFDSF9TVUJDT05UUk9MKENPTlZFUlRfU1VCQ09OVFJPTCwgU0VNSUNPTE9OKTsKKyAgICB9
CisgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgcmV0dXJuIFFTdHlsZTo6U0NfTm9uZTsK
KyN1bmRlZiBDT05WRVJUX1NVQkNPTlRST0wKK30KKworc3RhdGljIHZvaWQgaW5pdEdlbmVyaWNT
dHlsZU9wdGlvbihRU3R5bGVPcHRpb24qIG9wdGlvbiwgUVdpZGdldCogd2lkZ2V0LCBjb25zdCBR
U3R5bGVJbnRlcmZhY2VPcHRpb24mIGludGVyZmFjZU9wdGlvbikKK3sKKyAgICBpZiAod2lkZ2V0
KQorICAgICAgICBvcHRpb24tPmluaXQod2lkZ2V0KTsKKyAgICBlbHNlCisgICAgICAgIC8vIElm
IGEgd2lkZ2V0IGlzIG5vdCBkaXJlY3RseSBhdmFpbGFibGUgZm9yIHJlbmRlcmluZywgd2UgZmFs
bGJhY2sgdG8gZGVmYXVsdAorICAgICAgICAvLyB2YWx1ZSBmb3IgYW4gYWN0aXZlIHdpZGdldC4K
KyAgICAgICAgb3B0aW9uLT5zdGF0ZSA9IFFTdHlsZTo6U3RhdGVfQWN0aXZlIHwgUVN0eWxlOjpT
dGF0ZV9FbmFibGVkOworCisgICAgb3B0aW9uLT5yZWN0ID0gaW50ZXJmYWNlT3B0aW9uLnJlY3Q7
CisgICAgb3B0aW9uLT5zdGF0ZSA9IGNvbnZlcnRUb1FTdHlsZVN0YXRlKGludGVyZmFjZU9wdGlv
bi5zdGF0ZSk7CisgICAgb3B0aW9uLT5kaXJlY3Rpb24gPSBpbnRlcmZhY2VPcHRpb24uZGlyZWN0
aW9uOworICAgIG9wdGlvbi0+cGFsZXR0ZSA9IGludGVyZmFjZU9wdGlvbi5wYWxldHRlOworfQor
CitzdGF0aWMgdm9pZCBpbml0U3BlY2lmaWNTdHlsZU9wdGlvbihRU3R5bGVPcHRpb24qLCBjb25z
dCBRU3R5bGVJbnRlcmZhY2VPcHRpb24mKQoreworfQorCitzdGF0aWMgdm9pZCBpbml0U3BlY2lm
aWNTdHlsZU9wdGlvbihRU3R5bGVPcHRpb25TbGlkZXIqIHNsaWRlck9wdGlvbiwgY29uc3QgUVN0
eWxlSW50ZXJmYWNlT3B0aW9uJiBpbnRlcmZhY2VPcHRpb24pCit7CisgICAgc2xpZGVyT3B0aW9u
LT5vcmllbnRhdGlvbiA9IGludGVyZmFjZU9wdGlvbi5zbGlkZXIub3JpZW50YXRpb247CisgICAg
c2xpZGVyT3B0aW9uLT51cHNpZGVEb3duID0gaW50ZXJmYWNlT3B0aW9uLnNsaWRlci51cHNpZGVE
b3duOworICAgIHNsaWRlck9wdGlvbi0+bWluaW11bSA9IGludGVyZmFjZU9wdGlvbi5zbGlkZXIu
bWluaW11bTsKKyAgICBzbGlkZXJPcHRpb24tPm1heGltdW0gPSBpbnRlcmZhY2VPcHRpb24uc2xp
ZGVyLm1heGltdW07CisgICAgc2xpZGVyT3B0aW9uLT5zbGlkZXJQb3NpdGlvbiA9IGludGVyZmFj
ZU9wdGlvbi5zbGlkZXIucG9zaXRpb247CisgICAgc2xpZGVyT3B0aW9uLT5zbGlkZXJWYWx1ZSA9
IGludGVyZmFjZU9wdGlvbi5zbGlkZXIudmFsdWU7CisgICAgc2xpZGVyT3B0aW9uLT5zaW5nbGVT
dGVwID0gaW50ZXJmYWNlT3B0aW9uLnNsaWRlci5zaW5nbGVTdGVwOworICAgIHNsaWRlck9wdGlv
bi0+cGFnZVN0ZXAgPSBpbnRlcmZhY2VPcHRpb24uc2xpZGVyLnBhZ2VTdGVwOworICAgIHNsaWRl
ck9wdGlvbi0+YWN0aXZlU3ViQ29udHJvbHMgPSBjb252ZXJ0VG9RU3R5bGVTdWJDb250cm9sKGlu
dGVyZmFjZU9wdGlvbi5zbGlkZXIuYWN0aXZlU3ViQ29udHJvbHMpOworfQorCit0ZW1wbGF0ZSA8
dHlwZW5hbWUgU3R5bGVPcHRpb24+CitjbGFzcyBNYXBwZWRTdHlsZU9wdGlvbiA6IHB1YmxpYyBT
dHlsZU9wdGlvbiB7CisKK3B1YmxpYzoKKyAgICBNYXBwZWRTdHlsZU9wdGlvbihRV2lkZ2V0KiB3
aWRnZXQsIGNvbnN0IFFTdHlsZUludGVyZmFjZU9wdGlvbiYgaW50ZXJmYWNlT3B0aW9uKQorICAg
IHsKKyAgICAgICAgaW5pdEdlbmVyaWNTdHlsZU9wdGlvbih0aGlzLCB3aWRnZXQsIGludGVyZmFj
ZU9wdGlvbik7CisgICAgICAgIGluaXRTcGVjaWZpY1N0eWxlT3B0aW9uKHRoaXMsIGludGVyZmFj
ZU9wdGlvbik7CisgICAgfQorfTsKKworc3RhdGljIFFTdHlsZTo6UGl4ZWxNZXRyaWMgY29udmVy
dFBpeGVsTWV0cmljKFFTdHlsZUludGVyZmFjZTo6UGl4ZWxNZXRyaWMgc3RhdGUpCit7CisjZGVm
aW5lIENPTlZFUlRfTUVUUklDKE1ldHJpYykgXAorICAgIGNhc2UgUVN0eWxlSW50ZXJmYWNlOjpN
ZXRyaWM6IHJldHVybiBRU3R5bGU6Ok1ldHJpYworCisgICAgc3dpdGNoIChzdGF0ZSkgeworICAg
ICAgICBGT1JfRUFDSF9NQVBQRURfTUVUUklDKENPTlZFUlRfTUVUUklDLCBTRU1JQ09MT04pOwor
ICAgIH0KKyAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICByZXR1cm4gUVN0eWxlOjpQTV9D
dXN0b21CYXNlOworCisjdW5kZWYgQ09OVkVSVF9NRVRSSUMKK30KKworc3RhdGljIFFTdHlsZUlu
dGVyZmFjZTo6U3ViQ29udHJvbCBjb252ZXJ0VG9RU3R5bGVJbnRlcmZhY2VTdWJDb250cm9sKFFT
dHlsZTo6U3ViQ29udHJvbCBzYykKK3sKKyNkZWZpbmUgQ09OVkVSVF9TVUJDT05UUk9MKEYsIFZh
bHVlKSBcCisgICAgY2FzZSBRU3R5bGU6OkY6IHJldHVybiBRU3R5bGVJbnRlcmZhY2U6OkYKKwor
ICAgIHN3aXRjaCAoc2MpIHsKKyAgICAgICAgRk9SX0VBQ0hfU1VCQ09OVFJPTChDT05WRVJUX1NV
QkNPTlRST0wsIFNFTUlDT0xPTik7CisgICAgfQorICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwor
ICAgIHJldHVybiBRU3R5bGVJbnRlcmZhY2U6OlNDX05vbmU7CisjdW5kZWYgQ09OVkVSVF9TVUJD
T05UUk9MCit9CisKK1FXZWJTdHlsZTo6UVdlYlN0eWxlKFBhZ2UqIHBhZ2UpCisgICAgOiBtX3Bh
Z2UocGFnZSkKKyAgICAsIG1fc3R5bGUoMCkKK3sKKyAgICBtX2ZhbGxiYWNrU3R5bGUgPSBRU3R5
bGVGYWN0b3J5OjpjcmVhdGUoUUxhdGluMVN0cmluZygid2luZG93cyIpKTsKKyAgICBtX293bkZh
bGxiYWNrU3R5bGUgPSB0cnVlOworICAgIGlmICghbV9mYWxsYmFja1N0eWxlKSB7CisgICAgICAg
IG1fZmFsbGJhY2tTdHlsZSA9IFFBcHBsaWNhdGlvbjo6c3R5bGUoKTsKKyAgICAgICAgbV9vd25G
YWxsYmFja1N0eWxlID0gZmFsc2U7CisgICAgfQorfQorCitRV2ViU3R5bGU6On5RV2ViU3R5bGUo
KQoreworICAgIGlmIChtX293bkZhbGxiYWNrU3R5bGUpCisgICAgICAgIGRlbGV0ZSBtX2ZhbGxi
YWNrU3R5bGU7Cit9CisKK1FSZWN0IFFXZWJTdHlsZTo6YnV0dG9uU3ViRWxlbWVudFJlY3QoUVN0
eWxlSW50ZXJmYWNlOjpCdXR0b25TdWJFbGVtZW50IGJ1dHRvbkVsZW1lbnQsIFN0YXRlIHN0YXRl
LCBjb25zdCBRUmVjdCYgb3JpZ2luYWxSZWN0KSBjb25zdAoreworICAgIGVuc3VyZVN0eWxlKCk7
CisKKyAgICBRU3R5bGVPcHRpb25CdXR0b24gb3B0aW9uOworICAgIG9wdGlvbi5zdGF0ZSA9IGNv
bnZlcnRUb1FTdHlsZVN0YXRlKHN0YXRlKTsKKyAgICBvcHRpb24ucmVjdCA9IG9yaWdpbmFsUmVj
dDsKKworICAgIFFTdHlsZTo6U3ViRWxlbWVudCBzdWJFbGVtZW50ID0gUVN0eWxlOjpTRV9DdXN0
b21CYXNlOworICAgIHN3aXRjaCAoYnV0dG9uRWxlbWVudCkgeworICAgIGNhc2UgUHVzaEJ1dHRv
bkxheW91dEl0ZW06IHN1YkVsZW1lbnQgPSBRU3R5bGU6OlNFX1B1c2hCdXR0b25MYXlvdXRJdGVt
OyBicmVhazsKKyAgICBjYXNlIFB1c2hCdXR0b25Db250ZW50czogc3ViRWxlbWVudCA9IFFTdHls
ZTo6U0VfUHVzaEJ1dHRvbkNvbnRlbnRzOyBicmVhazsKKyAgICBkZWZhdWx0OiBBU1NFUlRfTk9U
X1JFQUNIRUQoKTsKKyAgICB9CisgICAgcmV0dXJuIG1fc3R5bGUtPnN1YkVsZW1lbnRSZWN0KHN1
YkVsZW1lbnQsICZvcHRpb24pOworfQorCitpbnQgUVdlYlN0eWxlOjpmaW5kRnJhbWVMaW5lV2lk
dGgoKSBjb25zdAoreworICAgIGVuc3VyZVN0eWxlKCk7CisKKyAgICBpZiAoIW1fbGluZUVkaXQp
CisgICAgICAgIG1fbGluZUVkaXQucmVzZXQobmV3IFFMaW5lRWRpdCgpKTsKKworICAgIHJldHVy
biBtX3N0eWxlLT5waXhlbE1ldHJpYyhRU3R5bGU6OlBNX0RlZmF1bHRGcmFtZVdpZHRoLCAwLCBt
X2xpbmVFZGl0LmRhdGEoKSk7Cit9CisKK2ludCBRV2ViU3R5bGU6OnNpbXBsZVBpeGVsTWV0cmlj
KFFTdHlsZUludGVyZmFjZTo6UGl4ZWxNZXRyaWMgbWV0cmljLCBTdGF0ZSBzdGF0ZSwgUU9iamVj
dCAqd2lkZ2V0KSBjb25zdAoreworICAgIGVuc3VyZVN0eWxlKCk7CisKKyAgICBRU3R5bGVPcHRp
b24gb3B0OworICAgIG9wdC5zdGF0ZSA9IGNvbnZlcnRUb1FTdHlsZVN0YXRlKHN0YXRlKTsKKyAg
ICByZXR1cm4gbV9zdHlsZS0+cGl4ZWxNZXRyaWMoY29udmVydFBpeGVsTWV0cmljKG1ldHJpYyks
ICZvcHQsIHFvYmplY3RfY2FzdDxRV2lkZ2V0Kj4od2lkZ2V0KSk7Cit9CisKK2ludCBRV2ViU3R5
bGU6OmJ1dHRvbk1hcmdpbihTdGF0ZSBzdGF0ZSwgY29uc3QgUVJlY3QmIG9yaWdpbmFsUmVjdCkg
Y29uc3QKK3sKKyAgICBlbnN1cmVTdHlsZSgpOworCisgICAgUVN0eWxlT3B0aW9uQnV0dG9uIHN0
eWxlT3B0aW9uOworICAgIHN0eWxlT3B0aW9uLnN0YXRlID0gY29udmVydFRvUVN0eWxlU3RhdGUo
c3RhdGUpOworICAgIHN0eWxlT3B0aW9uLnJlY3QgPSBvcmlnaW5hbFJlY3Q7CisgICAgcmV0dXJu
IG1fc3R5bGUtPnBpeGVsTWV0cmljKFFTdHlsZTo6UE1fQnV0dG9uTWFyZ2luLCAmc3R5bGVPcHRp
b24sIDApOworfQorCitpbnQgUVdlYlN0eWxlOjpzbGlkZXJMZW5ndGgoUXQ6Ok9yaWVudGF0aW9u
IG9yaWVudGF0aW9uKSBjb25zdAoreworICAgIGVuc3VyZVN0eWxlKCk7CisKKyAgICBRU3R5bGVP
cHRpb25TbGlkZXIgb3B0OworICAgIG9wdC5vcmllbnRhdGlvbiA9IG9yaWVudGF0aW9uOworICAg
IHJldHVybiBtX3N0eWxlLT5waXhlbE1ldHJpYyhRU3R5bGU6OlBNX1NsaWRlckxlbmd0aCwgJm9w
dCk7Cit9CisKK2ludCBRV2ViU3R5bGU6OnNsaWRlclRoaWNrbmVzcyhRdDo6T3JpZW50YXRpb24g
b3JpZW50YXRpb24pIGNvbnN0Cit7CisgICAgZW5zdXJlU3R5bGUoKTsKKworICAgIFFTdHlsZU9w
dGlvblNsaWRlciBvcHQ7CisgICAgb3B0Lm9yaWVudGF0aW9uID0gb3JpZW50YXRpb247CisgICAg
cmV0dXJuIG1fc3R5bGUtPnBpeGVsTWV0cmljKFFTdHlsZTo6UE1fU2xpZGVyVGhpY2tuZXNzLCAm
b3B0KTsKK30KKworaW50IFFXZWJTdHlsZTo6cHJvZ3Jlc3NCYXJDaHVua1dpZHRoKGNvbnN0IFFT
aXplJiBzaXplKSBjb25zdAoreworICAgIGVuc3VyZVN0eWxlKCk7CisKKyAgICBRU3R5bGVPcHRp
b25Qcm9ncmVzc0JhclYyIG9wdGlvbjsKKyAgICBvcHRpb24ucmVjdC5zZXRTaXplKHNpemUpOwor
ICAgIC8vIEZJWE1FOiBVbnRpbCBodHRwOi8vYnVncmVwb3J0cy5xdC5ub2tpYS5jb20vYnJvd3Nl
L1FUQlVHLTkxNzEgaXMgZml4ZWQsCisgICAgLy8gd2Ugc2ltdWxhdGUgb25lIHNxdWFyZSBhbmlt
YXRpbmcgYWNyb3NzIHRoZSBwcm9ncmVzcyBiYXIuCisgICAgcmV0dXJuIG1fc3R5bGUtPnBpeGVs
TWV0cmljKFFTdHlsZTo6UE1fUHJvZ3Jlc3NCYXJDaHVua1dpZHRoLCAmb3B0aW9uKTsKK30KKwor
dm9pZCBRV2ViU3R5bGU6OmdldEJ1dHRvbk1ldHJpY3MoUVN0cmluZyAqYnV0dG9uRm9udEZhbWls
eSwgaW50ICpidXR0b25Gb250UGl4ZWxTaXplKSBjb25zdAoreworICAgIFFQdXNoQnV0dG9uIGJ1
dHRvbjsKKyAgICBRRm9udCBkZWZhdWx0QnV0dG9uRm9udCA9IFFBcHBsaWNhdGlvbjo6Zm9udCgm
YnV0dG9uKTsKKyAgICAqYnV0dG9uRm9udEZhbWlseSA9IGRlZmF1bHRCdXR0b25Gb250LmZhbWls
eSgpOworICAgICpidXR0b25Gb250UGl4ZWxTaXplID0gMDsKKyNpZmRlZiBRX1dTX01BQworICAg
IGJ1dHRvbi5zZXRBdHRyaWJ1dGUoUXQ6OldBX01hY1NtYWxsU2l6ZSk7CisgICAgUUZvbnRJbmZv
IGZvbnRJbmZvKGRlZmF1bHRCdXR0b25Gb250KTsKKyAgICAqYnV0dG9uRm9udFBpeGVsU2l6ZSA9
IGZvbnRJbmZvLnBpeGVsU2l6ZSgpOworI2VuZGlmCit9CisKK1FTaXplIFFXZWJTdHlsZTo6c2l6
ZUZyb21Db250ZW50cyhRU3R5bGVJbnRlcmZhY2U6OkNvbnRlbnRzVHlwZSB0eXBlLCBRU3R5bGVJ
bnRlcmZhY2U6OlN0YXRlIHN0YXRlLCBjb25zdCBRU2l6ZSYgY29udGVudHNTaXplKSBjb25zdAor
eworICAgIGVuc3VyZVN0eWxlKCk7CisKKyAgICBRU3R5bGVPcHRpb24gb3B0OworICAgIG9wdC5z
dGF0ZSA9IGNvbnZlcnRUb1FTdHlsZVN0YXRlKHN0YXRlKTsKKworICAgIFFTdHlsZTo6Q29udGVu
dHNUeXBlIGNvbnRlbnRzVHlwZSA9IFFTdHlsZTo6Q1RfQ3VzdG9tQmFzZTsKKyAgICBzd2l0Y2gg
KHR5cGUpIHsKKyAgICBjYXNlIFFTdHlsZUludGVyZmFjZTo6Q1RfQ29tYm9Cb3g6IGNvbnRlbnRz
VHlwZSA9IFFTdHlsZTo6Q1RfQ29tYm9Cb3g7IGJyZWFrOworICAgIGNhc2UgUVN0eWxlSW50ZXJm
YWNlOjpDVF9QdXNoQnV0dG9uOiBjb250ZW50c1R5cGUgPSBRU3R5bGU6OkNUX1B1c2hCdXR0b247
IGJyZWFrOworICAgIH0KKworICAgIHJldHVybiBtX3N0eWxlLT5zaXplRnJvbUNvbnRlbnRzKGNv
bnRlbnRzVHlwZSwgJm9wdCwgY29udGVudHNTaXplKTsKK30KKwordm9pZCBRV2ViU3R5bGU6OnBh
aW50QnV0dG9uKFFQYWludGVyKiBwYWludGVyLCBRU3R5bGVJbnRlcmZhY2U6OkJ1dHRvblR5cGUg
dHlwZSwgY29uc3QgUVN0eWxlSW50ZXJmYWNlT3B0aW9uICZwcm94eU9wdGlvbiwgUU9iamVjdCAq
d2lkZ2V0T2JqKQoreworICAgIGVuc3VyZVN0eWxlKCk7CisKKyAgICBRV2lkZ2V0KiB3aWRnZXQg
PSBxb2JqZWN0X2Nhc3Q8UVdpZGdldCo+KHdpZGdldE9iaik7CisgICAgTWFwcGVkU3R5bGVPcHRp
b248UVN0eWxlT3B0aW9uQnV0dG9uPiBvcHRpb24od2lkZ2V0LCBwcm94eU9wdGlvbik7CisKKyAg
ICBpZiAodHlwZSA9PSBQdXNoQnV0dG9uKSB7CisgICAgICAgIG1fc3R5bGUtPmRyYXdDb250cm9s
KFFTdHlsZTo6Q0VfUHVzaEJ1dHRvbiwgJm9wdGlvbiwgcGFpbnRlciwgd2lkZ2V0KTsKKyAgICB9
IGVsc2UgaWYgKHR5cGUgPT0gUmFkaW9CdXR0b24pCisgICAgICAgbV9zdHlsZS0+ZHJhd0NvbnRy
b2woUVN0eWxlOjpDRV9SYWRpb0J1dHRvbiwgJm9wdGlvbiwgcGFpbnRlciwgd2lkZ2V0KTsKKyAg
ICBlbHNlIGlmICh0eXBlID09IENoZWNrQm94KQorICAgICAgICBtX3N0eWxlLT5kcmF3Q29udHJv
bChRU3R5bGU6OkNFX0NoZWNrQm94LCAmb3B0aW9uLCBwYWludGVyLCB3aWRnZXQpOworfQorCit2
b2lkIFFXZWJTdHlsZTo6cGFpbnRUZXh0RmllbGQoUVBhaW50ZXIgKnBhaW50ZXIsIGNvbnN0IFFT
dHlsZUludGVyZmFjZU9wdGlvbiAmcHJveHlPcHRpb24sIFFPYmplY3QgKndpZGdldE9iaikKK3sK
KyAgICBlbnN1cmVTdHlsZSgpOworCisgICAgUVdpZGdldCogd2lkZ2V0ID0gcW9iamVjdF9jYXN0
PFFXaWRnZXQqPih3aWRnZXRPYmopOworCisgICAgTWFwcGVkU3R5bGVPcHRpb248UVN0eWxlT3B0
aW9uRnJhbWVWMj4gcGFuZWwod2lkZ2V0LCBwcm94eU9wdGlvbik7CisKKyAgICBwYW5lbC5saW5l
V2lkdGggPSBmaW5kRnJhbWVMaW5lV2lkdGgoKTsKKyAgICBwYW5lbC5mZWF0dXJlcyA9IFFTdHls
ZU9wdGlvbkZyYW1lVjI6Ok5vbmU7CisKKyAgICBtX3N0eWxlLT5kcmF3UHJpbWl0aXZlKFFTdHls
ZTo6UEVfUGFuZWxMaW5lRWRpdCwgJnBhbmVsLCBwYWludGVyLCB3aWRnZXQpOworfQorCit2b2lk
IFFXZWJTdHlsZTo6cGFpbnRDb21ib0JveChRUGFpbnRlciAqcGFpbnRlciwgY29uc3QgUVN0eWxl
SW50ZXJmYWNlT3B0aW9uICZwcm94eU9wdGlvbiwgUU9iamVjdCogd2lkZ2V0T2JqKQoreworICAg
IGVuc3VyZVN0eWxlKCk7CisgICAgUVdpZGdldCogd2lkZ2V0ID0gcW9iamVjdF9jYXN0PFFXaWRn
ZXQqPih3aWRnZXRPYmopOworCisgICAgTWFwcGVkU3R5bGVPcHRpb248UVN0eWxlT3B0aW9uQ29t
Ym9Cb3g+IG9wdCh3aWRnZXQsIHByb3h5T3B0aW9uKTsKKworICAgIEludFJlY3QgcmVjdCA9IG9w
dC5yZWN0OworCisjaWYgZGVmaW5lZChRX1dTX01BQykgJiYgIWRlZmluZWQoUVRfTk9fU1RZTEVf
TUFDKQorICAgIC8vIFFNYWNTdHlsZSBtYWtlcyB0aGUgY29tYm8gYm94ZXMgYSBsaXR0bGUgYml0
IHNtYWxsZXIgdG8gbGVhdmUgc3BhY2UgZm9yIHRoZSBmb2N1cyByZWN0LgorICAgIC8vIEJlY2F1
c2Ugb2YgaXQsIHRoZSBjb21ibyBidXR0b24gaXMgZHJhd24gYXQgYSBwb2ludCB0byB0aGUgbGVm
dCBvZiB3aGVyZSBpdCB3YXMgZXhwZWN0IHRvIGJlIGFuZCBtYXkgZW5kIHVwCisgICAgLy8gb3Zl
cmxhcHBlZCB3aXRoIHRoZSB0ZXh0LiBUaGlzIHdpbGwgZm9yY2UgUU1hY1N0eWxlIHRvIGRyYXcg
dGhlIGNvbWJvIGJveCB3aXRoIHRoZSBleHBlY3RlZCB3aWR0aC4KKyAgICBpZiAocW9iamVjdF9j
YXN0PFFNYWNTdHlsZSo+KG1fc3R5bGUpKQorICAgICAgICByZWN0LmluZmxhdGVYKDMpOworI2Vu
ZGlmCisKKyAgICBjb25zdCBRUG9pbnQgdG9wTGVmdCA9IHJlY3QubG9jYXRpb24oKTsKKyAgICBw
YWludGVyLT50cmFuc2xhdGUodG9wTGVmdCk7CisgICAgb3B0LnJlY3QubW92ZVRvKFFQb2ludCgw
LCAwKSk7CisgICAgb3B0LnJlY3Quc2V0U2l6ZShyZWN0LnNpemUoKSk7CisKKyAgICBtX3N0eWxl
LT5kcmF3Q29tcGxleENvbnRyb2woUVN0eWxlOjpDQ19Db21ib0JveCwgJm9wdCwgcGFpbnRlciwg
d2lkZ2V0KTsKKyAgICBwYWludGVyLT50cmFuc2xhdGUoLXRvcExlZnQpOworfQorCit2b2lkIFFX
ZWJTdHlsZTo6cGFpbnRDb21ib0JveEFycm93KFFQYWludGVyICpwYWludGVyLCBjb25zdCBRU3R5
bGVJbnRlcmZhY2VPcHRpb24gJnByb3h5T3B0aW9uLCBRT2JqZWN0ICp3aWRnZXRPYmopCit7Cisg
ICAgZW5zdXJlU3R5bGUoKTsKKyAgICBRV2lkZ2V0KiB3aWRnZXQgPSBxb2JqZWN0X2Nhc3Q8UVdp
ZGdldCo+KHdpZGdldE9iaik7CisKKyAgICBNYXBwZWRTdHlsZU9wdGlvbjxRU3R5bGVPcHRpb25D
b21ib0JveD4gb3B0KHdpZGdldCwgcHJveHlPcHRpb24pOworICAgIG9wdC5zdWJDb250cm9scyA9
IFFTdHlsZTo6U0NfQ29tYm9Cb3hBcnJvdzsKKyAgICAvLyBmb3IgZHJhd2luZyB0aGUgY29tYm8g
Ym94IGFycm93LCByZWx5IG9ubHkgb24gdGhlIGZhbGxiYWNrIHN0eWxlCisgICAgbV9mYWxsYmFj
a1N0eWxlLT5kcmF3Q29tcGxleENvbnRyb2woUVN0eWxlOjpDQ19Db21ib0JveCwgJm9wdCwgcGFp
bnRlciwgd2lkZ2V0KTsKK30KKwordm9pZCBRV2ViU3R5bGU6OnBhaW50U2xpZGVyVHJhY2soUVBh
aW50ZXIqIHBhaW50ZXIsIGNvbnN0IFFTdHlsZUludGVyZmFjZU9wdGlvbiYgcHJveHlPcHRpb24s
IFFPYmplY3QgKndpZGdldE9iaikKK3sKKyAgICBlbnN1cmVTdHlsZSgpOworICAgIFFXaWRnZXQq
IHdpZGdldCA9IHFvYmplY3RfY2FzdDxRV2lkZ2V0Kj4od2lkZ2V0T2JqKTsKKworICAgIE1hcHBl
ZFN0eWxlT3B0aW9uPFFTdHlsZU9wdGlvblNsaWRlcj4gb3B0aW9uKHdpZGdldCwgcHJveHlPcHRp
b24pOworICAgIG9wdGlvbi5zdWJDb250cm9scyA9IFFTdHlsZTo6U0NfU2xpZGVyR3Jvb3ZlOwor
CisgICAgb3B0aW9uLnVwc2lkZURvd24gPSBwcm94eU9wdGlvbi5zbGlkZXIudXBzaWRlRG93bjsK
KyAgICBvcHRpb24ubWluaW11bSA9IHByb3h5T3B0aW9uLnNsaWRlci5taW5pbXVtOworICAgIG9w
dGlvbi5tYXhpbXVtID0gcHJveHlPcHRpb24uc2xpZGVyLm1heGltdW07CisgICAgb3B0aW9uLnNs
aWRlclBvc2l0aW9uID0gcHJveHlPcHRpb24uc2xpZGVyLnBvc2l0aW9uOworICAgIG9wdGlvbi5v
cmllbnRhdGlvbiA9IHByb3h5T3B0aW9uLnNsaWRlci5vcmllbnRhdGlvbjsKKworICAgIG1fc3R5
bGUtPmRyYXdDb21wbGV4Q29udHJvbChRU3R5bGU6OkNDX1NsaWRlciwgJm9wdGlvbiwgcGFpbnRl
ciwgd2lkZ2V0KTsKKworICAgIGlmIChvcHRpb24uc3RhdGUgJiBRU3R5bGU6OlN0YXRlX0hhc0Zv
Y3VzKSB7CisgICAgICAgIFFTdHlsZU9wdGlvbkZvY3VzUmVjdCBmb2N1c09wdGlvbjsKKyAgICAg
ICAgZm9jdXNPcHRpb24ucmVjdCA9IG9wdGlvbi5yZWN0OworICAgICAgICBtX3N0eWxlLT5kcmF3
UHJpbWl0aXZlKFFTdHlsZTo6UEVfRnJhbWVGb2N1c1JlY3QsICZmb2N1c09wdGlvbiwgcGFpbnRl
ciwgd2lkZ2V0KTsKKyAgICB9Cit9CisKK3ZvaWQgUVdlYlN0eWxlOjpwYWludFNsaWRlclRodW1i
KFFQYWludGVyKiBwYWludGVyLCBjb25zdCBRU3R5bGVJbnRlcmZhY2VPcHRpb24mIHByb3h5T3B0
aW9uLCBRT2JqZWN0ICp3aWRnZXRPYmopCit7CisgICAgZW5zdXJlU3R5bGUoKTsKKyAgICBRV2lk
Z2V0KiB3aWRnZXQgPSBxb2JqZWN0X2Nhc3Q8UVdpZGdldCo+KHdpZGdldE9iaik7CisKKyAgICBN
YXBwZWRTdHlsZU9wdGlvbjxRU3R5bGVPcHRpb25TbGlkZXI+IG9wdGlvbih3aWRnZXQsIHByb3h5
T3B0aW9uKTsKKworICAgIG9wdGlvbi5zdWJDb250cm9scyA9IFFTdHlsZTo6U0NfU2xpZGVySGFu
ZGxlOworICAgIGlmIChvcHRpb24uc3RhdGUgJiBRU3R5bGU6OlN0YXRlX1N1bmtlbikKKyAgICAg
ICAgb3B0aW9uLmFjdGl2ZVN1YkNvbnRyb2xzID0gUVN0eWxlOjpTQ19TbGlkZXJIYW5kbGU7CisK
KyAgICBtX3N0eWxlLT5kcmF3Q29tcGxleENvbnRyb2woUVN0eWxlOjpDQ19TbGlkZXIsICZvcHRp
b24sIHBhaW50ZXIsIHdpZGdldCk7Cit9CisKK3ZvaWQgUVdlYlN0eWxlOjpwYWludElubmVyU3Bp
bkJ1dHRvbihRUGFpbnRlciogcGFpbnRlciwgY29uc3QgUVN0eWxlSW50ZXJmYWNlT3B0aW9uJiBw
cm94eU9wdGlvbiwgYm9vbCBzcGluQm94VXAsIFFPYmplY3QqIHdpZGdldE9iaikKK3sKKyAgICBl
bnN1cmVTdHlsZSgpOworICAgIFFXaWRnZXQqIHdpZGdldCA9IHFvYmplY3RfY2FzdDxRV2lkZ2V0
Kj4od2lkZ2V0T2JqKTsKKworICAgIE1hcHBlZFN0eWxlT3B0aW9uPFFTdHlsZU9wdGlvblNwaW5C
b3g+IG9wdGlvbih3aWRnZXQsIHByb3h5T3B0aW9uKTsKKworICAgIG9wdGlvbi5zdWJDb250cm9s
cyA9IFFTdHlsZTo6U0NfU3BpbkJveFVwIHwgUVN0eWxlOjpTQ19TcGluQm94RG93bjsKKyAgICBp
ZiAoIShvcHRpb24uc3RhdGUgJiBRU3R5bGU6OlN0YXRlX1JlYWRPbmx5KSkgeworICAgICAgICBp
ZiAob3B0aW9uLnN0YXRlICYgUVN0eWxlOjpTdGF0ZV9FbmFibGVkKQorICAgICAgICAgICAgb3B0
aW9uLnN0ZXBFbmFibGVkID0gUUFic3RyYWN0U3BpbkJveDo6U3RlcFVwRW5hYmxlZCB8IFFBYnN0
cmFjdFNwaW5Cb3g6OlN0ZXBEb3duRW5hYmxlZDsKKyAgICAgICAgaWYgKG9wdGlvbi5zdGF0ZSAm
IFFTdHlsZTo6U3RhdGVfU3Vua2VuKSB7CisgICAgICAgICAgICBpZiAoc3BpbkJveFVwKQorICAg
ICAgICAgICAgICAgIG9wdGlvbi5hY3RpdmVTdWJDb250cm9scyA9IFFTdHlsZTo6U0NfU3BpbkJv
eFVwOworICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgIG9wdGlvbi5hY3RpdmVTdWJD
b250cm9scyA9IFFTdHlsZTo6U0NfU3BpbkJveERvd247CisgICAgICAgIH0KKyAgICB9CisKKyAg
ICBJbnRSZWN0IGJ1dHRvblJlY3QgPSBvcHRpb24ucmVjdDsKKyAgICAvLyBEZWZhdWx0IHRvIG1v
dmluZyB0aGUgYnV0dG9ucyBhIGxpdHRsZSBiaXQgd2l0aGluIHRoZSBlZGl0b3IgZnJhbWUuCisg
ICAgaW50IGluZmxhdGVYID0gLTI7CisgICAgaW50IGluZmxhdGVZID0gLTI7CisjaWYgZGVmaW5l
ZChRX1dTX01BQykgJiYgIWRlZmluZWQoUVRfTk9fU1RZTEVfTUFDKQorICAgIC8vIFFNYWNTdHls
ZSB3aWxsIHBvc2l0aW9uIHRoZSBhcXVhIGJ1dHRvbnMgZmx1c2ggdG8gdGhlIHJpZ2h0LgorICAg
IC8vIFRoaXMgd2lsbCBtb3ZlIHRoZW0gbW9yZSB3aXRoaW4gdGhlIGNvbnRyb2wgZm9yIGJldHRl
ciBzdHlsZSwgYSBsYQorICAgIC8vIENocm9taXVtIGxvb2sgJiBmZWVsLgorICAgIGlmIChxb2Jq
ZWN0X2Nhc3Q8UU1hY1N0eWxlKj4obV9zdHlsZSkpIHsKKyAgICAgICAgaW5mbGF0ZVggPSAtNDsK
KyAgICAgICAgLy8gUmVuZGVyIG1pbmkgYXF1YSBzcGluIGJ1dHRvbnMgZm9yIFFNYWNTdHlsZSB0
byBmaXQgbmljZWx5IGludG8KKyAgICAgICAgLy8gdGhlIGVkaXRvciBhcmVhLCBsaWtlIENocm9t
aXVtLgorICAgICAgICBvcHRpb24uc3RhdGUgfD0gUVN0eWxlOjpTdGF0ZV9NaW5pOworICAgIH0K
KyNlbmRpZgorI2lmICFkZWZpbmVkKFFUX05PX1NUWUxFX1BMQVNUSVFVRSkKKyAgICAvLyBRUGxh
c3RpcXVlU3R5bGUgbG9va3MgYmVzdCB3aGVuIHRoZSBzcGluIGJ1dHRvbnMgYXJlIGZsdXNoIHdp
dGggdGhlIGZyYW1lJ3MgZWRnZS4KKyAgICBpZiAocW9iamVjdF9jYXN0PFFQbGFzdGlxdWVTdHls
ZSo+KG1fc3R5bGUpKSB7CisgICAgICAgIGluZmxhdGVYID0gMDsKKyAgICAgICAgaW5mbGF0ZVkg
PSAwOworICAgIH0KKyNlbmRpZgorCisgICAgYnV0dG9uUmVjdC5pbmZsYXRlWChpbmZsYXRlWCk7
CisgICAgYnV0dG9uUmVjdC5pbmZsYXRlWShpbmZsYXRlWSk7CisgICAgb3B0aW9uLnJlY3QgPSBi
dXR0b25SZWN0OworCisgICAgbV9zdHlsZS0+ZHJhd0NvbXBsZXhDb250cm9sKFFTdHlsZTo6Q0Nf
U3BpbkJveCwgJm9wdGlvbiwgcGFpbnRlciwgd2lkZ2V0KTsKK30KKwordm9pZCBRV2ViU3R5bGU6
OnBhaW50UHJvZ3Jlc3NCYXIoUVBhaW50ZXIqIHBhaW50ZXIsIGNvbnN0IFFTdHlsZUludGVyZmFj
ZU9wdGlvbiYgcHJveHlPcHRpb24sIGRvdWJsZSBwcm9ncmVzcywgZG91YmxlIGFuaW1hdGlvblBy
b2dyZXNzLCBRT2JqZWN0ICp3aWRnZXRPYmopCit7CisgICAgZW5zdXJlU3R5bGUoKTsKKyAgICBR
V2lkZ2V0KiB3aWRnZXQgPSBxb2JqZWN0X2Nhc3Q8UVdpZGdldCo+KHdpZGdldE9iaik7CisKKyAg
ICBNYXBwZWRTdHlsZU9wdGlvbjxRU3R5bGVPcHRpb25Qcm9ncmVzc0JhclYyPiBvcHRpb24od2lk
Z2V0LCBwcm94eU9wdGlvbik7CisKKyAgICBvcHRpb24ubWF4aW11bSA9IHN0ZDo6bnVtZXJpY19s
aW1pdHM8aW50Pjo6bWF4KCk7CisgICAgb3B0aW9uLm1pbmltdW0gPSAwOworICAgIG9wdGlvbi5w
cm9ncmVzcyA9IHByb2dyZXNzICogc3RkOjpudW1lcmljX2xpbWl0czxpbnQ+OjptYXgoKTsKKwor
ICAgIGNvbnN0IFFQb2ludCB0b3BMZWZ0ID0gb3B0aW9uLnJlY3QudG9wTGVmdCgpOworICAgIHBh
aW50ZXItPnRyYW5zbGF0ZSh0b3BMZWZ0KTsKKyAgICBvcHRpb24ucmVjdC5tb3ZlVG8oUVBvaW50
KDAsIDApKTsKKworICAgIGlmIChwcm9ncmVzcyA8IDApIHsKKyAgICAgICAgLy8gRklYTUU6IFVu
dGlsIGh0dHA6Ly9idWdyZXBvcnRzLnF0Lm5va2lhLmNvbS9icm93c2UvUVRCVUctOTE3MSBpcyBm
aXhlZCwKKyAgICAgICAgLy8gd2Ugc2ltdWxhdGUgb25lIHNxdWFyZSBhbmltYXRpbmcgYWNyb3Nz
IHRoZSBwcm9ncmVzcyBiYXIuCisgICAgICAgIG1fc3R5bGUtPmRyYXdDb250cm9sKFFTdHlsZTo6
Q0VfUHJvZ3Jlc3NCYXJHcm9vdmUsICZvcHRpb24sIHBhaW50ZXIsIHdpZGdldCk7CisgICAgICAg
IGludCBjaHVua1dpZHRoID0gbV9zdHlsZS0+cGl4ZWxNZXRyaWMoUVN0eWxlOjpQTV9Qcm9ncmVz
c0JhckNodW5rV2lkdGgsICZvcHRpb24pOworICAgICAgICBRQ29sb3IgY29sb3IgPSAob3B0aW9u
LnBhbGV0dGUuaGlnaGxpZ2h0KCkgPT0gb3B0aW9uLnBhbGV0dGUuYmFja2dyb3VuZCgpKSA/IG9w
dGlvbi5wYWxldHRlLmNvbG9yKFFQYWxldHRlOjpBY3RpdmUsIFFQYWxldHRlOjpIaWdobGlnaHQp
IDogb3B0aW9uLnBhbGV0dGUuY29sb3IoUVBhbGV0dGU6OkhpZ2hsaWdodCk7CisgICAgICAgIGlm
IChvcHRpb24uZGlyZWN0aW9uID09IFF0OjpSaWdodFRvTGVmdCkKKyAgICAgICAgICAgIHBhaW50
ZXItPmZpbGxSZWN0KG9wdGlvbi5yZWN0LnJpZ2h0KCkgLSBjaHVua1dpZHRoICAtIGFuaW1hdGlv
blByb2dyZXNzICogb3B0aW9uLnJlY3Qud2lkdGgoKSwgMCwgY2h1bmtXaWR0aCwgb3B0aW9uLnJl
Y3QuaGVpZ2h0KCksIGNvbG9yKTsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgcGFpbnRlci0+
ZmlsbFJlY3QoYW5pbWF0aW9uUHJvZ3Jlc3MgKiBvcHRpb24ucmVjdC53aWR0aCgpLCAwLCBjaHVu
a1dpZHRoLCBvcHRpb24ucmVjdC5oZWlnaHQoKSwgY29sb3IpOworICAgIH0gZWxzZQorICAgICAg
ICBtX3N0eWxlLT5kcmF3Q29udHJvbChRU3R5bGU6OkNFX1Byb2dyZXNzQmFyLCAmb3B0aW9uLCBw
YWludGVyLCB3aWRnZXQpOworCisgICAgcGFpbnRlci0+dHJhbnNsYXRlKC10b3BMZWZ0KTsKK30K
KworaW50IFFXZWJTdHlsZTo6c2Nyb2xsQmFyRXh0ZW50KGJvb2wgbWluaSkKK3sKKyAgICBlbnN1
cmVTdHlsZSgpOworCisgICAgUVN0eWxlT3B0aW9uU2xpZGVyIG87CisgICAgby5vcmllbnRhdGlv
biA9IFF0OjpWZXJ0aWNhbDsKKyAgICBvLnN0YXRlICY9IH5RU3R5bGU6OlN0YXRlX0hvcml6b250
YWw7CisgICAgaWYgKG1pbmkpCisgICAgICAgIG8uc3RhdGUgfD0gUVN0eWxlOjpTdGF0ZV9NaW5p
OworICAgIHJldHVybiBtX3N0eWxlLT5waXhlbE1ldHJpYyhRU3R5bGU6OlBNX1Njcm9sbEJhckV4
dGVudCwgJm8sIDApOworfQorCitib29sIFFXZWJTdHlsZTo6c2Nyb2xsQmFyTWlkZGxlQ2xpY2tB
YnNvbHV0ZVBvc2l0aW9uU3R5bGVIaW50KCkgY29uc3QKK3sKKyAgICBlbnN1cmVTdHlsZSgpOwor
ICAgIHJldHVybiBtX3N0eWxlLT5zdHlsZUhpbnQoUVN0eWxlOjpTSF9TY3JvbGxCYXJfTWlkZGxl
Q2xpY2tBYnNvbHV0ZVBvc2l0aW9uKTsKK30KKwordm9pZCBRV2ViU3R5bGU6OnBhaW50U2Nyb2xs
Q29ybmVyKFFQYWludGVyKiBwYWludGVyLCBjb25zdCBRUmVjdCYgcmVjdCwgUU9iamVjdCogd2lk
Z2V0T2JqKQoreworICAgIGVuc3VyZVN0eWxlKCk7CisgICAgUVdpZGdldCogd2lkZ2V0ID0gcW9i
amVjdF9jYXN0PFFXaWRnZXQqPih3aWRnZXRPYmopOworCisgICAgUVN0eWxlT3B0aW9uIG9wdGlv
bjsKKyAgICBvcHRpb24ucmVjdCA9IHJlY3Q7CisgICAgbV9zdHlsZS0+ZHJhd1ByaW1pdGl2ZShR
U3R5bGU6OlBFX1BhbmVsU2Nyb2xsQXJlYUNvcm5lciwgJm9wdGlvbiwgcGFpbnRlciwgd2lkZ2V0
KTsKK30KKworUVN0eWxlSW50ZXJmYWNlOjpTdWJDb250cm9sIFFXZWJTdHlsZTo6aGl0VGVzdFNj
cm9sbEJhcihjb25zdCBRU3R5bGVJbnRlcmZhY2VPcHRpb24gJnByb3h5T3B0aW9uLCBjb25zdCBR
UG9pbnQgJnBvcykKK3sKKyAgICBlbnN1cmVTdHlsZSgpOworICAgIE1hcHBlZFN0eWxlT3B0aW9u
PFFTdHlsZU9wdGlvblNsaWRlcj4gb3B0KDAsIHByb3h5T3B0aW9uKTsKKyAgICBRU3R5bGU6OlN1
YkNvbnRyb2wgc2MgPSBtX3N0eWxlLT5oaXRUZXN0Q29tcGxleENvbnRyb2woUVN0eWxlOjpDQ19T
Y3JvbGxCYXIsICZvcHQsIHBvcywgMCk7CisgICAgcmV0dXJuIGNvbnZlcnRUb1FTdHlsZUludGVy
ZmFjZVN1YkNvbnRyb2woc2MpOworfQorCitRUmVjdCBRV2ViU3R5bGU6OnNjcm9sbEJhclN1YkNv
bnRyb2xSZWN0KGNvbnN0IFFTdHlsZUludGVyZmFjZU9wdGlvbiAmcHJveHlPcHRpb24sIFFTdHls
ZUludGVyZmFjZTo6U3ViQ29udHJvbCBzdWJDb250cm9sKQoreworICAgIGVuc3VyZVN0eWxlKCk7
CisgICAgTWFwcGVkU3R5bGVPcHRpb248UVN0eWxlT3B0aW9uU2xpZGVyPiBvcHQoMCwgcHJveHlP
cHRpb24pOworICAgIHJldHVybiBtX3N0eWxlLT5zdWJDb250cm9sUmVjdChRU3R5bGU6OkNDX1Nj
cm9sbEJhciwgJm9wdCwgY29udmVydFRvUVN0eWxlU3ViQ29udHJvbChzdWJDb250cm9sKSwgMCk7
Cit9CisKK3ZvaWQgUVdlYlN0eWxlOjpwYWludFNjcm9sbEJhcihRUGFpbnRlciAqcGFpbnRlciwg
Y29uc3QgUVN0eWxlSW50ZXJmYWNlT3B0aW9uICZwcm94eU9wdGlvbiwgUU9iamVjdCAqd2lkZ2V0
T2JqKQoreworICAgIGVuc3VyZVN0eWxlKCk7CisgICAgUVdpZGdldCogd2lkZ2V0ID0gcW9iamVj
dF9jYXN0PFFXaWRnZXQqPih3aWRnZXRPYmopOworCisgICAgTWFwcGVkU3R5bGVPcHRpb248UVN0
eWxlT3B0aW9uU2xpZGVyPiBvcHQod2lkZ2V0LCBwcm94eU9wdGlvbik7CisKKyNpZmRlZiBRX1dT
X01BQworICAgIC8vIEZJWE1FOiBXZSBhbHNvIG5lZWQgdG8gY2hlY2sgdGhlIHdpZGdldCBzdHls
ZSBidXQgdG9kYXkgU2Nyb2xsYmFyVGhlbWUgaXMgbm90IGF3YXJlIG9mIHRoZSBwYWdlIHNvIHdl
CisgICAgLy8gY2FuJ3QgZ2V0IHRoZSB3aWRnZXQuCisgICAgaWYgKHFvYmplY3RfY2FzdDxRTWFj
U3R5bGUqPihtX3N0eWxlKSkKKyAgICAgICAgbV9zdHlsZS0+ZHJhd0NvbXBsZXhDb250cm9sKFFT
dHlsZTo6Q0NfU2Nyb2xsQmFyLCAmb3B0LCBwYWludGVyLCB3aWRnZXQpOworICAgIGVsc2UKKyNl
bmRpZgorICAgIHsKKyAgICAgICAgLy8gVGhlIFFTdHlsZSBleHBlY3RzIHRoZSBiYWNrZ3JvdW5k
IHRvIGJlIGFscmVhZHkgZmlsbGVkLgorICAgICAgICBwYWludGVyLT5maWxsUmVjdChvcHQucmVj
dCwgb3B0LnBhbGV0dGUuYmFja2dyb3VuZCgpKTsKKworICAgICAgICBjb25zdCBRUG9pbnQgdG9w
TGVmdCA9IG9wdC5yZWN0LnRvcExlZnQoKTsKKyAgICAgICAgcGFpbnRlci0+dHJhbnNsYXRlKHRv
cExlZnQpOworICAgICAgICBvcHQucmVjdC5tb3ZlVG8oUVBvaW50KDAsIDApKTsKKyAgICAgICAg
bV9zdHlsZS0+ZHJhd0NvbXBsZXhDb250cm9sKFFTdHlsZTo6Q0NfU2Nyb2xsQmFyLCAmb3B0LCBw
YWludGVyLCB3aWRnZXQpOworICAgICAgICBvcHQucmVjdC5tb3ZlVG8odG9wTGVmdCk7CisgICAg
fQorfQorCitRT2JqZWN0KiBRV2ViU3R5bGU6OndpZGdldEZvclBhaW50ZXIoUVBhaW50ZXIqIHBh
aW50ZXIpCit7CisgICAgUVBhaW50RGV2aWNlKiBkZXYgPSAwOworICAgIGlmIChwYWludGVyKQor
ICAgICAgICBkZXYgPSBwYWludGVyLT5kZXZpY2UoKTsKKyAgICBpZiAoZGV2ICYmIGRldi0+ZGV2
VHlwZSgpID09IFFJbnRlcm5hbDo6V2lkZ2V0KQorICAgICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8
UVdpZGdldCo+KGRldik7CisgICAgcmV0dXJuIDA7Cit9CisKK2Jvb2wgUVdlYlN0eWxlOjppc1Zh
bGlkKCkgY29uc3QKK3sKKyAgICBlbnN1cmVTdHlsZSgpOworICAgIHJldHVybiBtX3N0eWxlOwor
fQorCit2b2lkIFFXZWJTdHlsZTo6ZW5zdXJlU3R5bGUoKSBjb25zdAoreworICAgIGlmIChtX3N0
eWxlKQorICAgICAgICByZXR1cm47CisKKyAgICBtX3N0eWxlID0gUVN0eWxlSW50ZXJmYWNlOjpz
dHlsZUZvclBhZ2UobV9wYWdlKTsKKworICAgIGlmICghbV9zdHlsZSkKKyAgICAgICAgbV9zdHls
ZSA9IFFBcHBsaWNhdGlvbjo6c3R5bGUoKTsKK30KKworfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YktpdC9xdC9XZWJDb3JlU3VwcG9ydC9RV2ViU3R5bGUuaCBiL1NvdXJjZS9XZWJLaXQvcXQvV2Vi
Q29yZVN1cHBvcnQvUVdlYlN0eWxlLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uZGNhNTdlYWY0ODMyMWQ3YWY2Y2M4
NjUzZThmOTA0NDc4NjU1MjRmZQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJLaXQvcXQv
V2ViQ29yZVN1cHBvcnQvUVdlYlN0eWxlLmgKQEAgLTAsMCArMSw5NyBAQAorLyoKKyAqIFRoaXMg
ZmlsZSBpcyBwYXJ0IG9mIHRoZSB0aGVtZSBpbXBsZW1lbnRhdGlvbiBmb3IgZm9ybSBjb250cm9s
cyBpbiBXZWJDb3JlLgorICoKKyAqIENvcHlyaWdodCAoQykgMjAxMiBEaWdpYSBQbGMgYW5kL29y
IGl0cyBzdWJzaWRpYXJ5KC1pZXMpLgorICogQ29weXJpZ2h0IChDKSAyMDExLTIwMTIgTm9raWEg
Q29ycG9yYXRpb24gYW5kL29yIGl0cyBzdWJzaWRpYXJ5KC1pZXMpLgorICoKKyAqIFRoaXMgbGli
cmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAq
IG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVi
bGljCisgKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0
aW9uOyBlaXRoZXIKKyAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0
aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0
ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFO
WSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJD
SEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhl
IEdOVQorICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMu
CisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJh
cnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNl
ZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KKyAqIHRoZSBGcmVlIFNv
ZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3Is
CisgKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKyAqCisgKi8KKyNpZm5kZWYgUVdlYlN0
eWxlX2gKKyNkZWZpbmUgUVdlYlN0eWxlX2gKKworI2luY2x1ZGUgPFFTdHlsZUludGVyZmFjZS5o
PgorCitRVF9CRUdJTl9OQU1FU1BBQ0UKK2NsYXNzIFFTdHlsZTsKK2NsYXNzIFFMaW5lRWRpdDsK
K2NsYXNzIFFTdHlsZU9wdGlvbjsKK2NsYXNzIFFTdHlsZU9wdGlvblNsaWRlcjsKK2NsYXNzIFFQ
YWludGVyOworY2xhc3MgUU9iamVjdDsKK1FUX0VORF9OQU1FU1BBQ0UKKworbmFtZXNwYWNlIFdl
YkNvcmUgeworY2xhc3MgUGFnZTsKK30KKworbmFtZXNwYWNlIFdlYktpdCB7CisKK2NsYXNzIFFX
ZWJTdHlsZSA6IHB1YmxpYyBXZWJDb3JlOjpRU3R5bGVJbnRlcmZhY2UgeworcHVibGljOgorICAg
IFFXZWJTdHlsZShXZWJDb3JlOjpQYWdlKiA9IDApOworICAgIHZpcnR1YWwgflFXZWJTdHlsZSgp
OworCisgICAgc3RhdGljIFdlYkNvcmU6OlFTdHlsZUludGVyZmFjZSogY3JlYXRlKFdlYkNvcmU6
OlBhZ2UqKQorICAgIHsgcmV0dXJuIG5ldyBRV2ViU3R5bGUocGFnZSk7IH0KKworICAgIHZpcnR1
YWwgUVJlY3QgYnV0dG9uU3ViRWxlbWVudFJlY3QoQnV0dG9uU3ViRWxlbWVudCwgU3RhdGUsIGNv
bnN0IFFSZWN0JiBvcmlnaW5hbFJlY3QpIGNvbnN0OworCisgICAgdmlydHVhbCBpbnQgZmluZEZy
YW1lTGluZVdpZHRoKCkgY29uc3Q7CisgICAgdmlydHVhbCBpbnQgc2ltcGxlUGl4ZWxNZXRyaWMo
UGl4ZWxNZXRyaWMsIFN0YXRlID0gU3RhdGVfTm9uZSwgUU9iamVjdCogd2lkZ2V0ID0gMCkgY29u
c3Q7CisgICAgdmlydHVhbCBpbnQgYnV0dG9uTWFyZ2luKFN0YXRlLCBjb25zdCBRUmVjdCYgb3Jp
Z2luYWxSZWN0KSBjb25zdDsKKyAgICB2aXJ0dWFsIGludCBzbGlkZXJMZW5ndGgoUXQ6Ok9yaWVu
dGF0aW9uKSBjb25zdDsKKyAgICB2aXJ0dWFsIGludCBzbGlkZXJUaGlja25lc3MoUXQ6Ok9yaWVu
dGF0aW9uKSBjb25zdDsKKyAgICB2aXJ0dWFsIGludCBwcm9ncmVzc0JhckNodW5rV2lkdGgoY29u
c3QgUVNpemUmKSBjb25zdDsKKyAgICB2aXJ0dWFsIHZvaWQgZ2V0QnV0dG9uTWV0cmljcyhRU3Ry
aW5nKiBidXR0b25Gb250RmFtaWx5LCBpbnQqIGJ1dHRvbkZvbnRQaXhlbFNpemUpIGNvbnN0Owor
CisgICAgdmlydHVhbCBRU2l6ZSBzaXplRnJvbUNvbnRlbnRzKENvbnRlbnRzVHlwZSwgUVN0eWxl
SW50ZXJmYWNlOjpTdGF0ZSwgY29uc3QgUVNpemUmKSBjb25zdDsKKworICAgIHZpcnR1YWwgdm9p
ZCBwYWludEJ1dHRvbihRUGFpbnRlciosIEJ1dHRvblR5cGUsIGNvbnN0IFdlYkNvcmU6OlFTdHls
ZUludGVyZmFjZU9wdGlvbiAmcHJveHlPcHRpb24sIFFPYmplY3QgKndpZGdldCk7CisgICAgdmly
dHVhbCB2b2lkIHBhaW50VGV4dEZpZWxkKFFQYWludGVyKiwgY29uc3QgV2ViQ29yZTo6UVN0eWxl
SW50ZXJmYWNlT3B0aW9uJiwgUU9iamVjdCogd2lkZ2V0T2JqKTsKKyAgICB2aXJ0dWFsIHZvaWQg
cGFpbnRDb21ib0JveChRUGFpbnRlciosIGNvbnN0IFdlYkNvcmU6OlFTdHlsZUludGVyZmFjZU9w
dGlvbiYsIFFPYmplY3QgKndpZGdldE9iaik7CisgICAgdmlydHVhbCB2b2lkIHBhaW50Q29tYm9C
b3hBcnJvdyhRUGFpbnRlciosIGNvbnN0IFdlYkNvcmU6OlFTdHlsZUludGVyZmFjZU9wdGlvbiYs
IFFPYmplY3QgKndpZGdldE9iaik7CisKKyAgICB2aXJ0dWFsIHZvaWQgcGFpbnRTbGlkZXJUcmFj
ayhRUGFpbnRlciosIGNvbnN0IFdlYkNvcmU6OlFTdHlsZUludGVyZmFjZU9wdGlvbiYsIFFPYmpl
Y3QgKndpZGdldE9iaik7CisgICAgdmlydHVhbCB2b2lkIHBhaW50U2xpZGVyVGh1bWIoUVBhaW50
ZXIqLCBjb25zdCBXZWJDb3JlOjpRU3R5bGVJbnRlcmZhY2VPcHRpb24mLCBRT2JqZWN0ICp3aWRn
ZXRPYmopOworICAgIHZpcnR1YWwgdm9pZCBwYWludElubmVyU3BpbkJ1dHRvbihRUGFpbnRlcios
IGNvbnN0IFdlYkNvcmU6OlFTdHlsZUludGVyZmFjZU9wdGlvbiYsIGJvb2wgc3BpbkJveFVwLCBR
T2JqZWN0KiB3aWRnZXRPYmopOworICAgIHZpcnR1YWwgdm9pZCBwYWludFByb2dyZXNzQmFyKFFQ
YWludGVyKiwgY29uc3QgV2ViQ29yZTo6UVN0eWxlSW50ZXJmYWNlT3B0aW9uJiwgZG91YmxlIHBy
b2dyZXNzLCBkb3VibGUgYW5pbWF0aW9uUHJvZ3Jlc3MsIFFPYmplY3QqIHdpZGdldE9iaik7CisK
KyAgICB2aXJ0dWFsIGludCBzY3JvbGxCYXJFeHRlbnQoYm9vbCBtaW5pKTsKKyAgICB2aXJ0dWFs
IGJvb2wgc2Nyb2xsQmFyTWlkZGxlQ2xpY2tBYnNvbHV0ZVBvc2l0aW9uU3R5bGVIaW50KCkgY29u
c3Q7CisgICAgdmlydHVhbCB2b2lkIHBhaW50U2Nyb2xsQ29ybmVyKFFQYWludGVyKiwgY29uc3Qg
UVJlY3QmLCBRT2JqZWN0KiB3aWRnZXRPYmopOworCisgICAgdmlydHVhbCBTdWJDb250cm9sIGhp
dFRlc3RTY3JvbGxCYXIoY29uc3QgV2ViQ29yZTo6UVN0eWxlSW50ZXJmYWNlT3B0aW9uJiwgY29u
c3QgUVBvaW50JiBwb3MpOworICAgIHZpcnR1YWwgUVJlY3Qgc2Nyb2xsQmFyU3ViQ29udHJvbFJl
Y3QoY29uc3QgV2ViQ29yZTo6UVN0eWxlSW50ZXJmYWNlT3B0aW9uJiwgU3ViQ29udHJvbCk7Cisg
ICAgdmlydHVhbCB2b2lkIHBhaW50U2Nyb2xsQmFyKFFQYWludGVyKiwgY29uc3QgV2ViQ29yZTo6
UVN0eWxlSW50ZXJmYWNlT3B0aW9uJiwgUU9iamVjdCogd2lkZ2V0T2JqKTsKKworICAgIHZpcnR1
YWwgUU9iamVjdCogd2lkZ2V0Rm9yUGFpbnRlcihRUGFpbnRlciopOworCisgICAgdmlydHVhbCBi
b29sIGlzVmFsaWQoKSBjb25zdDsKKworcHJpdmF0ZToKKyAgICB2b2lkIGVuc3VyZVN0eWxlKCkg
Y29uc3Q7CisKKyAgICBXZWJDb3JlOjpQYWdlKiBtX3BhZ2U7CisgICAgbXV0YWJsZSBRU3R5bGUq
IG1fc3R5bGU7CisgICAgUVN0eWxlKiBtX2ZhbGxiYWNrU3R5bGU7CisgICAgYm9vbCBtX293bkZh
bGxiYWNrU3R5bGU7CisgICAgbXV0YWJsZSBRU2NvcGVkUG9pbnRlcjxRTGluZUVkaXQ+IG1fbGlu
ZUVkaXQ7Cit9OworCit9CisKKyNlbmRpZiAvLyBRV2ViU3R5bGVfaApkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYktpdC9xdC9XZWJDb3JlU3VwcG9ydC9SZW5kZXJUaGVtZVFTdHlsZS5jcHAgYi9Tb3Vy
Y2UvV2ViS2l0L3F0L1dlYkNvcmVTdXBwb3J0L1JlbmRlclRoZW1lUVN0eWxlLmNwcApkZWxldGVk
IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOGJjMGRmNDk3NDUzNTlkNjY4ODc3Y2E4N2Q0YmViNTIy
OTcyNDFmNy4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9T
b3VyY2UvV2ViS2l0L3F0L1dlYkNvcmVTdXBwb3J0L1JlbmRlclRoZW1lUVN0eWxlLmNwcAorKysg
L2Rldi9udWxsCkBAIC0xLDgyNyArMCwwIEBACi0vKgotICogVGhpcyBmaWxlIGlzIHBhcnQgb2Yg
dGhlIFdlYktpdCBwcm9qZWN0LgotICoKLSAqIENvcHlyaWdodCAoQykgMjAwOC0yMDEyIE5va2lh
IENvcnBvcmF0aW9uIGFuZC9vciBpdHMgc3Vic2lkaWFyeSgtaWVzKQotICoKLSAqIENvcHlyaWdo
dCAoQykgMjAwNiBaYWNrIFJ1c2luIDx6YWNrQGtkZS5vcmc+Ci0gKiAgICAgICAgICAgICAgIDIw
MDYgRGlyayBNdWVsbGVyIDxtdWVsbGVyQGtkZS5vcmc+Ci0gKiAgICAgICAgICAgICAgIDIwMDYg
Tmlrb2xhcyBaaW1tZXJtYW5uIDx6aW1tZXJtYW5uQGtkZS5vcmc+Ci0gKiBDb3B5cmlnaHQgKEMp
IDIwMDggSG9sZ2VyIEhhbnMgUGV0ZXIgRnJleXRoZXIKLSAqCi0gKiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgotICoKLSAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlz
dHJpYnV0ZSBpdCBhbmQvb3IKLSAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdO
VSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCi0gKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUg
RnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKLSAqIHZlcnNpb24gMiBvZiB0aGUgTGlj
ZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqCi0gKiBUaGlz
IGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1
bCwKLSAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVk
IHdhcnJhbnR5IG9mCi0gKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNV
TEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQotICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNl
bnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKgotICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEg
Y29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQotICogYWxvbmcg
d2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3Jp
dGUgdG8KLSAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGlu
IFN0cmVldCwgRmlmdGggRmxvb3IsCi0gKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KLSAq
Ci0gKi8KLQotI2luY2x1ZGUgImNvbmZpZy5oIgotI2luY2x1ZGUgIlJlbmRlclRoZW1lUVN0eWxl
LmgiCi0KLSNpbmNsdWRlICJDU1NGb250U2VsZWN0b3IuaCIKLSNpbmNsdWRlICJDU1NWYWx1ZUtl
eXdvcmRzLmgiCi0jaW5jbHVkZSAiQ2hyb21lLmgiCi0jaW5jbHVkZSAiQ2hyb21lQ2xpZW50Lmgi
Ci0jaW5jbHVkZSAiQ29sb3IuaCIKLSNpbmNsdWRlICJEb2N1bWVudC5oIgotI2luY2x1ZGUgIkZv
bnQuaCIKLSNpbmNsdWRlICJGb250U2VsZWN0b3IuaCIKLSNpbmNsdWRlICJHcmFwaGljc0NvbnRl
eHQuaCIKLSNpbmNsdWRlICJIVE1MSW5wdXRFbGVtZW50LmgiCi0jaW5jbHVkZSAiSFRNTE5hbWVz
LmgiCi0jaW5jbHVkZSAiTG9jYWxpemVkU3RyaW5ncy5oIgotI2luY2x1ZGUgIk5vdEltcGxlbWVu
dGVkLmgiCi0jaW5jbHVkZSAiUGFnZS5oIgotI2luY2x1ZGUgIlBhaW50SW5mby5oIgotI2luY2x1
ZGUgIlFXZWJQYWdlQ2xpZW50LmgiCi0jaW5jbHVkZSAiUmVuZGVyQm94LmgiCi0jaWYgRU5BQkxF
KFBST0dSRVNTX0VMRU1FTlQpCi0jaW5jbHVkZSAiUmVuZGVyUHJvZ3Jlc3MuaCIKLSNlbmRpZgot
I2luY2x1ZGUgIlJlbmRlclNsaWRlci5oIgotI2luY2x1ZGUgIlNjcm9sbGJhclRoZW1lUVN0eWxl
LmgiCi0jaW5jbHVkZSAiU2xpZGVyVGh1bWJFbGVtZW50LmgiCi0jaW5jbHVkZSAiU3R5bGVSZXNv
bHZlci5oIgotI2luY2x1ZGUgIlVzZXJBZ2VudFN0eWxlU2hlZXRzLmgiCi0KLSNpbmNsdWRlIDxR
QXBwbGljYXRpb24+Ci0jaW5jbHVkZSA8UUNvbG9yPgotI2luY2x1ZGUgPFFGaWxlPgotI2luY2x1
ZGUgPFFGb250TWV0cmljcz4KLSNpbmNsdWRlIDxRTGluZUVkaXQ+Ci0jaW5jbHVkZSA8UU1hY1N0
eWxlPgotI2luY2x1ZGUgPFFQYWludGVyPgotI2lmbmRlZiBRVF9OT19TVFlMRV9QTEFTVElRVUUK
LSNpbmNsdWRlIDxRUGxhc3RpcXVlU3R5bGU+Ci0jZW5kaWYKLSNpbmNsdWRlIDxRUHVzaEJ1dHRv
bj4KLSNpbmNsdWRlIDxRU3R5bGVGYWN0b3J5PgotI2luY2x1ZGUgPFFTdHlsZU9wdGlvbkJ1dHRv
bj4KLSNpbmNsdWRlIDxRU3R5bGVPcHRpb25GcmFtZVYyPgotI2lmIEVOQUJMRShQUk9HUkVTU19F
TEVNRU5UKQotI2luY2x1ZGUgPFFTdHlsZU9wdGlvblByb2dyZXNzQmFyVjI+Ci0jZW5kaWYKLSNp
bmNsdWRlIDxRU3R5bGVPcHRpb25TbGlkZXI+Ci0jaW5jbHVkZSA8UVdpZGdldD4KLQotbmFtZXNw
YWNlIFdlYkNvcmUgewotCi11c2luZyBuYW1lc3BhY2UgSFRNTE5hbWVzOwotCi1pbmxpbmUgc3Rh
dGljIHZvaWQgaW5pdFN0eWxlT3B0aW9uKFFXaWRnZXQqIHdpZGdldCwgUVN0eWxlT3B0aW9uJiBv
cHRpb24pCi17Ci0gICAgaWYgKHdpZGdldCkKLSAgICAgICAgb3B0aW9uLmluaXRGcm9tKHdpZGdl
dCk7Ci0gICAgZWxzZSB7Ci0gICAgICAgIC8vIElmIGEgd2lkZ2V0IGlzIG5vdCBkaXJlY3RseSBh
dmFpbGFibGUgZm9yIHJlbmRlcmluZywgd2UgZmFsbGJhY2sgdG8gZGVmYXVsdAotICAgICAgICAv
LyB2YWx1ZSBmb3IgYW4gYWN0aXZlIHdpZGdldC4KLSAgICAgICAgb3B0aW9uLnN0YXRlID0gUVN0
eWxlOjpTdGF0ZV9BY3RpdmUgfCBRU3R5bGU6OlN0YXRlX0VuYWJsZWQ7Ci0gICAgfQotfQotCi0K
LVFTaGFyZWRQb2ludGVyPFN0eWxlUGFpbnRlcj4gUmVuZGVyVGhlbWVRU3R5bGU6OmdldFN0eWxl
UGFpbnRlcihjb25zdCBQYWludEluZm8mIHBhaW50SW5mbykKLXsKLSAgICByZXR1cm4gUVNoYXJl
ZFBvaW50ZXI8U3R5bGVQYWludGVyPihuZXcgU3R5bGVQYWludGVyUVN0eWxlKHRoaXMsIHBhaW50
SW5mbykpOwotfQotCi1TdHlsZVBhaW50ZXJRU3R5bGU6OlN0eWxlUGFpbnRlclFTdHlsZShSZW5k
ZXJUaGVtZVFTdHlsZSogdGhlbWUsIGNvbnN0IFBhaW50SW5mbyYgcGFpbnRJbmZvKQotICAgIDog
U3R5bGVQYWludGVyKHRoZW1lLCBwYWludEluZm8pCi17Ci0gICAgaW5pdChwYWludEluZm8uY29u
dGV4dCA/IHBhaW50SW5mby5jb250ZXh0IDogMCwgdGhlbWUtPnFTdHlsZSgpKTsKLX0KLQotU3R5
bGVQYWludGVyUVN0eWxlOjpTdHlsZVBhaW50ZXJRU3R5bGUoU2Nyb2xsYmFyVGhlbWVRU3R5bGUq
IHRoZW1lLCBHcmFwaGljc0NvbnRleHQqIGNvbnRleHQpCi0gICAgOiBTdHlsZVBhaW50ZXIoKQot
ewotICAgIGluaXQoY29udGV4dCwgdGhlbWUtPnN0eWxlKCkpOwotfQotCi12b2lkIFN0eWxlUGFp
bnRlclFTdHlsZTo6aW5pdChHcmFwaGljc0NvbnRleHQqIGNvbnRleHQsIFFTdHlsZSogdGhlbWVT
dHlsZSkKLXsKLSAgICBwYWludGVyID0gc3RhdGljX2Nhc3Q8UVBhaW50ZXIqPihjb250ZXh0LT5w
bGF0Zm9ybUNvbnRleHQoKSk7Ci0gICAgd2lkZ2V0ID0gMDsKLSAgICBRUGFpbnREZXZpY2UqIGRl
diA9IDA7Ci0gICAgaWYgKHBhaW50ZXIpCi0gICAgICAgIGRldiA9IHBhaW50ZXItPmRldmljZSgp
OwotICAgIGlmIChkZXYgJiYgZGV2LT5kZXZUeXBlKCkgPT0gUUludGVybmFsOjpXaWRnZXQpCi0g
ICAgICAgIHdpZGdldCA9IHN0YXRpY19jYXN0PFFXaWRnZXQqPihkZXYpOwotICAgIHN0eWxlID0g
dGhlbWVTdHlsZTsKLQotICAgIFN0eWxlUGFpbnRlcjo6aW5pdChjb250ZXh0KTsKLX0KLQotUGFz
c1JlZlB0cjxSZW5kZXJUaGVtZT4gUmVuZGVyVGhlbWVRU3R5bGU6OmNyZWF0ZShQYWdlKiBwYWdl
KQotewotICAgIHJldHVybiBhZG9wdFJlZihuZXcgUmVuZGVyVGhlbWVRU3R5bGUocGFnZSkpOwot
fQotCi1SZW5kZXJUaGVtZVFTdHlsZTo6UmVuZGVyVGhlbWVRU3R5bGUoUGFnZSogcGFnZSkKLSAg
ICA6IFJlbmRlclRoZW1lUXQocGFnZSkKLSNpZm5kZWYgUVRfTk9fTElORUVESVQKLSAgICAsIG1f
bGluZUVkaXQoMCkKLSNlbmRpZgotewotICAgIFFQdXNoQnV0dG9uIGJ1dHRvbjsKLSAgICBRRm9u
dCBkZWZhdWx0QnV0dG9uRm9udCA9IFFBcHBsaWNhdGlvbjo6Zm9udCgmYnV0dG9uKTsKLSAgICBt
X2J1dHRvbkZvbnRGYW1pbHkgPSBkZWZhdWx0QnV0dG9uRm9udC5mYW1pbHkoKTsKLSNpZmRlZiBR
X1dTX01BQwotICAgIGJ1dHRvbi5zZXRBdHRyaWJ1dGUoUXQ6OldBX01hY1NtYWxsU2l6ZSk7Ci0g
ICAgUUZvbnRJbmZvIGZvbnRJbmZvKGRlZmF1bHRCdXR0b25Gb250KTsKLSAgICBtX2J1dHRvbkZv
bnRQaXhlbFNpemUgPSBmb250SW5mby5waXhlbFNpemUoKTsKLSNlbmRpZgotCi0gICAgbV9mYWxs
YmFja1N0eWxlID0gUVN0eWxlRmFjdG9yeTo6Y3JlYXRlKFFMYXRpbjFTdHJpbmcoIndpbmRvd3Mi
KSk7Ci19Ci0KLVJlbmRlclRoZW1lUVN0eWxlOjp+UmVuZGVyVGhlbWVRU3R5bGUoKQotewotICAg
IGRlbGV0ZSBtX2ZhbGxiYWNrU3R5bGU7Ci0jaWZuZGVmIFFUX05PX0xJTkVFRElUCi0gICAgZGVs
ZXRlIG1fbGluZUVkaXQ7Ci0jZW5kaWYKLX0KLQotCi0vLyBmb3Igc29tZSB3aWRnZXQgcGFpbnRp
bmcsIHdlIG5lZWQgdG8gZmFsbGJhY2sgdG8gV2luZG93cyBzdHlsZQotUVN0eWxlKiBSZW5kZXJU
aGVtZVFTdHlsZTo6ZmFsbGJhY2tTdHlsZSgpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIChtX2ZhbGxi
YWNrU3R5bGUpID8gbV9mYWxsYmFja1N0eWxlIDogUUFwcGxpY2F0aW9uOjpzdHlsZSgpOwotfQot
Ci12b2lkIFJlbmRlclRoZW1lUVN0eWxlOjpzZXRQYWxldHRlRnJvbVBhZ2VDbGllbnRJZkV4aXN0
cyhRUGFsZXR0ZSYgcGFsZXR0ZSkgY29uc3QKLXsKLSAgICBpZiAoIW1fcGFnZSkKLSAgICAgICAg
cmV0dXJuOwotCi0gICAgQVNTRVJUKG1fcGFnZS0+Y2hyb21lKCkpOwotICAgIENocm9tZUNsaWVu
dCogY2hyb21lQ2xpZW50ID0gbV9wYWdlLT5jaHJvbWUoKS0+Y2xpZW50KCk7Ci0gICAgaWYgKCFj
aHJvbWVDbGllbnQpCi0gICAgICAgIHJldHVybjsKLQotICAgIGlmIChRV2ViUGFnZUNsaWVudCog
cGFnZUNsaWVudCA9IGNocm9tZUNsaWVudC0+cGxhdGZvcm1QYWdlQ2xpZW50KCkpCi0gICAgICAg
IHBhbGV0dGUgPSBwYWdlQ2xpZW50LT5wYWxldHRlKCk7Ci19Ci0KLVFTdHlsZSogUmVuZGVyVGhl
bWVRU3R5bGU6OnFTdHlsZSgpIGNvbnN0Ci17Ci0gICAgaWYgKG1fcGFnZSkgewotICAgICAgICBR
V2ViUGFnZUNsaWVudCogcGFnZUNsaWVudCA9IG1fcGFnZS0+Y2hyb21lKCktPmNsaWVudCgpLT5w
bGF0Zm9ybVBhZ2VDbGllbnQoKTsKLQotICAgICAgICBpZiAocGFnZUNsaWVudCkKLSAgICAgICAg
ICAgIHJldHVybiBwYWdlQ2xpZW50LT5zdHlsZSgpOwotICAgIH0KLQotICAgIHJldHVybiBRQXBw
bGljYXRpb246OnN0eWxlKCk7Ci19Ci0KLWludCBSZW5kZXJUaGVtZVFTdHlsZTo6ZmluZEZyYW1l
TGluZVdpZHRoKFFTdHlsZSogc3R5bGUpIGNvbnN0Ci17Ci0jaWZuZGVmIFFUX05PX0xJTkVFRElU
Ci0gICAgaWYgKCFtX2xpbmVFZGl0KQotICAgICAgICBtX2xpbmVFZGl0ID0gbmV3IFFMaW5lRWRp
dCgpOwotI2VuZGlmCi0KLSAgICBRU3R5bGVPcHRpb25GcmFtZVYyIG9wdDsKLSAgICBRV2lkZ2V0
KiB3aWRnZXQgPSAwOwotI2lmbmRlZiBRVF9OT19MSU5FRURJVAotICAgIHdpZGdldCA9IG1fbGlu
ZUVkaXQ7Ci0jZW5kaWYKLSAgICByZXR1cm4gc3R5bGUtPnBpeGVsTWV0cmljKFFTdHlsZTo6UE1f
RGVmYXVsdEZyYW1lV2lkdGgsICZvcHQsIHdpZGdldCk7Ci19Ci0KLVFSZWN0IFJlbmRlclRoZW1l
UVN0eWxlOjppbmZsYXRlQnV0dG9uUmVjdChjb25zdCBRUmVjdCYgb3JpZ2luYWxSZWN0KSBjb25z
dAotewotICAgIFFTdHlsZU9wdGlvbkJ1dHRvbiBvcHRpb247Ci0gICAgb3B0aW9uLnN0YXRlIHw9
IFFTdHlsZTo6U3RhdGVfU21hbGw7Ci0gICAgb3B0aW9uLnJlY3QgPSBvcmlnaW5hbFJlY3Q7Ci0K
LSAgICBRUmVjdCBsYXlvdXRSZWN0ID0gcVN0eWxlKCktPnN1YkVsZW1lbnRSZWN0KFFTdHlsZTo6
U0VfUHVzaEJ1dHRvbkxheW91dEl0ZW0sICZvcHRpb24sIDApOwotICAgIGlmICghbGF5b3V0UmVj
dC5pc051bGwoKSkgewotICAgICAgICBpbnQgcGFkZGluZ0xlZnQgPSBsYXlvdXRSZWN0LmxlZnQo
KSAtIG9yaWdpbmFsUmVjdC5sZWZ0KCk7Ci0gICAgICAgIGludCBwYWRkaW5nUmlnaHQgPSBvcmln
aW5hbFJlY3QucmlnaHQoKSAtIGxheW91dFJlY3QucmlnaHQoKTsKLSAgICAgICAgaW50IHBhZGRp
bmdUb3AgPSBsYXlvdXRSZWN0LnRvcCgpIC0gb3JpZ2luYWxSZWN0LnRvcCgpOwotICAgICAgICBp
bnQgcGFkZGluZ0JvdHRvbSA9IG9yaWdpbmFsUmVjdC5ib3R0b20oKSAtIGxheW91dFJlY3QuYm90
dG9tKCk7Ci0KLSAgICAgICAgcmV0dXJuIG9yaWdpbmFsUmVjdC5hZGp1c3RlZCgtcGFkZGluZ0xl
ZnQsIC1wYWRkaW5nVG9wLCBwYWRkaW5nUmlnaHQsIHBhZGRpbmdCb3R0b20pOwotICAgIH0KLSAg
ICByZXR1cm4gb3JpZ2luYWxSZWN0OwotfQotCi12b2lkIFJlbmRlclRoZW1lUVN0eWxlOjpjb21w
dXRlU2l6ZUJhc2VkT25TdHlsZShSZW5kZXJTdHlsZSogcmVuZGVyU3R5bGUpIGNvbnN0Ci17Ci0g
ICAgUVNpemUgc2l6ZSgwLCAwKTsKLSAgICBjb25zdCBRRm9udE1ldHJpY3MgZm0ocmVuZGVyU3R5
bGUtPmZvbnQoKS5zeW50aGV0aWNGb250KCkpOwotICAgIFFTdHlsZSogc3R5bGUgPSBxU3R5bGUo
KTsKLQotICAgIHN3aXRjaCAocmVuZGVyU3R5bGUtPmFwcGVhcmFuY2UoKSkgewotICAgIGNhc2Ug
VGV4dEFyZWFQYXJ0OgotICAgIGNhc2UgU2VhcmNoRmllbGRQYXJ0OgotICAgIGNhc2UgVGV4dEZp
ZWxkUGFydDogewotICAgICAgICBpbnQgcGFkZGluZyA9IGZpbmRGcmFtZUxpbmVXaWR0aChzdHls
ZSk7Ci0gICAgICAgIHJlbmRlclN0eWxlLT5zZXRQYWRkaW5nTGVmdChMZW5ndGgocGFkZGluZywg
Rml4ZWQpKTsKLSAgICAgICAgcmVuZGVyU3R5bGUtPnNldFBhZGRpbmdSaWdodChMZW5ndGgocGFk
ZGluZywgRml4ZWQpKTsKLSAgICAgICAgcmVuZGVyU3R5bGUtPnNldFBhZGRpbmdUb3AoTGVuZ3Ro
KHBhZGRpbmcsIEZpeGVkKSk7Ci0gICAgICAgIHJlbmRlclN0eWxlLT5zZXRQYWRkaW5nQm90dG9t
KExlbmd0aChwYWRkaW5nLCBGaXhlZCkpOwotICAgICAgICBicmVhazsKLSAgICB9Ci0gICAgZGVm
YXVsdDoKLSAgICAgICAgYnJlYWs7Ci0gICAgfQotICAgIC8vIElmIHRoZSB3aWR0aCBhbmQgaGVp
Z2h0IGFyZSBib3RoIHNwZWNpZmllZCwgdGhlbiB3ZSBoYXZlIG5vdGhpbmcgdG8gZG8uCi0gICAg
aWYgKCFyZW5kZXJTdHlsZS0+d2lkdGgoKS5pc0ludHJpbnNpY09yQXV0bygpICYmICFyZW5kZXJT
dHlsZS0+aGVpZ2h0KCkuaXNBdXRvKCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIHN3aXRjaCAo
cmVuZGVyU3R5bGUtPmFwcGVhcmFuY2UoKSkgewotICAgIGNhc2UgQ2hlY2tib3hQYXJ0OiB7Ci0g
ICAgICAgIFFTdHlsZU9wdGlvbiBzdHlsZU9wdGlvbjsKLSAgICAgICAgc3R5bGVPcHRpb24uc3Rh
dGUgfD0gUVN0eWxlOjpTdGF0ZV9TbWFsbDsKLSAgICAgICAgaW50IGNoZWNrQm94V2lkdGggPSBz
dHlsZS0+cGl4ZWxNZXRyaWMoUVN0eWxlOjpQTV9JbmRpY2F0b3JXaWR0aCwgJnN0eWxlT3B0aW9u
KTsKLSAgICAgICAgY2hlY2tCb3hXaWR0aCAqPSByZW5kZXJTdHlsZS0+ZWZmZWN0aXZlWm9vbSgp
OwotICAgICAgICBzaXplID0gUVNpemUoY2hlY2tCb3hXaWR0aCwgY2hlY2tCb3hXaWR0aCk7Ci0g
ICAgICAgIGJyZWFrOwotICAgIH0KLSAgICBjYXNlIFJhZGlvUGFydDogewotICAgICAgICBRU3R5
bGVPcHRpb24gc3R5bGVPcHRpb247Ci0gICAgICAgIHN0eWxlT3B0aW9uLnN0YXRlIHw9IFFTdHls
ZTo6U3RhdGVfU21hbGw7Ci0gICAgICAgIGludCByYWRpb1dpZHRoID0gc3R5bGUtPnBpeGVsTWV0
cmljKFFTdHlsZTo6UE1fRXhjbHVzaXZlSW5kaWNhdG9yV2lkdGgsICZzdHlsZU9wdGlvbik7Ci0g
ICAgICAgIHJhZGlvV2lkdGggKj0gcmVuZGVyU3R5bGUtPmVmZmVjdGl2ZVpvb20oKTsKLSAgICAg
ICAgc2l6ZSA9IFFTaXplKHJhZGlvV2lkdGgsIHJhZGlvV2lkdGgpOwotICAgICAgICBicmVhazsK
LSAgICB9Ci0gICAgY2FzZSBQdXNoQnV0dG9uUGFydDoKLSAgICBjYXNlIEJ1dHRvblBhcnQ6IHsK
LSAgICAgICAgUVN0eWxlT3B0aW9uQnV0dG9uIHN0eWxlT3B0aW9uOwotICAgICAgICBzdHlsZU9w
dGlvbi5zdGF0ZSB8PSBRU3R5bGU6OlN0YXRlX1NtYWxsOwotICAgICAgICBRU2l6ZSBjb250ZW50
U2l6ZSA9IGZtLnNpemUoUXQ6OlRleHRTaG93TW5lbW9uaWMsIFFTdHJpbmc6OmZyb21MYXRpbjEo
IlgiKSk7Ci0gICAgICAgIFFTaXplIHB1c2hCdXR0b25TaXplID0gc3R5bGUtPnNpemVGcm9tQ29u
dGVudHMoUVN0eWxlOjpDVF9QdXNoQnV0dG9uLAotICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICZzdHlsZU9wdGlvbiwgY29udGVudFNpemUsIDAp
OwotICAgICAgICBzdHlsZU9wdGlvbi5yZWN0ID0gUVJlY3QoMCwgMCwgcHVzaEJ1dHRvblNpemUu
d2lkdGgoKSwgcHVzaEJ1dHRvblNpemUuaGVpZ2h0KCkpOwotICAgICAgICBRUmVjdCBsYXlvdXRS
ZWN0ID0gc3R5bGUtPnN1YkVsZW1lbnRSZWN0KFFTdHlsZTo6U0VfUHVzaEJ1dHRvbkxheW91dEl0
ZW0sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJnN0
eWxlT3B0aW9uLCAwKTsKLQotICAgICAgICAvLyBJZiB0aGUgc3R5bGUgc3VwcG9ydHMgbGF5b3V0
IHJlY3RzIHdlIHVzZSB0aGF0LCBhbmQgIGNvbXBlbnNhdGUgYWNjb3JkaW5nbHkKLSAgICAgICAg
Ly8gaW4gcGFpbnRCdXR0b24oKSBiZWxvdy4KLSAgICAgICAgaWYgKCFsYXlvdXRSZWN0LmlzTnVs
bCgpKQotICAgICAgICAgICAgc2l6ZS5zZXRIZWlnaHQobGF5b3V0UmVjdC5oZWlnaHQoKSk7Ci0g
ICAgICAgIGVsc2UKLSAgICAgICAgICAgIHNpemUuc2V0SGVpZ2h0KHB1c2hCdXR0b25TaXplLmhl
aWdodCgpKTsKLQotICAgICAgICBicmVhazsKLSAgICB9Ci0gICAgY2FzZSBNZW51bGlzdFBhcnQ6
IHsKLSAgICAgICAgUVN0eWxlT3B0aW9uQ29tYm9Cb3ggc3R5bGVPcHRpb247Ci0gICAgICAgIHN0
eWxlT3B0aW9uLnN0YXRlIHw9IFFTdHlsZTo6U3RhdGVfU21hbGw7Ci0gICAgICAgIGludCBjb250
ZW50SGVpZ2h0ID0gcU1heChmbS5saW5lU3BhY2luZygpLCAxNCkgKyAyOwotICAgICAgICBRU2l6
ZSBtZW51TGlzdFNpemUgPSBzdHlsZS0+c2l6ZUZyb21Db250ZW50cyhRU3R5bGU6OkNUX0NvbWJv
Qm94LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAmc3R5bGVPcHRpb24sIFFTaXplKDAsIGNvbnRlbnRIZWlnaHQpLCAwKTsKLSAgICAgICAgc2l6
ZS5zZXRIZWlnaHQobWVudUxpc3RTaXplLmhlaWdodCgpKTsKLSAgICAgICAgYnJlYWs7Ci0gICAg
fQotICAgIGRlZmF1bHQ6Ci0gICAgICAgIGJyZWFrOwotICAgIH0KLQotICAgIC8vIEZJWE1FOiBD
aGVjayBpcyBmbGF3ZWQsIHNpbmNlIGl0IGRvZXNuJ3QgdGFrZSBtaW4td2lkdGgvbWF4LXdpZHRo
IGludG8gYWNjb3VudC4KLSAgICBpZiAocmVuZGVyU3R5bGUtPndpZHRoKCkuaXNJbnRyaW5zaWNP
ckF1dG8oKSAmJiBzaXplLndpZHRoKCkgPiAwKQotICAgICAgICByZW5kZXJTdHlsZS0+c2V0TWlu
V2lkdGgoTGVuZ3RoKHNpemUud2lkdGgoKSwgRml4ZWQpKTsKLSAgICBpZiAocmVuZGVyU3R5bGUt
PmhlaWdodCgpLmlzQXV0bygpICYmIHNpemUuaGVpZ2h0KCkgPiAwKQotICAgICAgICByZW5kZXJT
dHlsZS0+c2V0TWluSGVpZ2h0KExlbmd0aChzaXplLmhlaWdodCgpLCBGaXhlZCkpOwotfQotCi0K
LQotdm9pZCBSZW5kZXJUaGVtZVFTdHlsZTo6YWRqdXN0QnV0dG9uU3R5bGUoU3R5bGVSZXNvbHZl
ciogc3R5bGVSZXNvbHZlciwgUmVuZGVyU3R5bGUqIHN0eWxlLCBFbGVtZW50KikgY29uc3QKLXsK
LSAgICAvLyBEaXRjaCB0aGUgYm9yZGVyLgotICAgIHN0eWxlLT5yZXNldEJvcmRlcigpOwotCi0j
aWZkZWYgUV9XU19NQUMKLSAgICBpZiAoc3R5bGUtPmFwcGVhcmFuY2UoKSA9PSBQdXNoQnV0dG9u
UGFydCkgewotICAgICAgICAvLyBUaGUgTWFjIHBvcnRzIGlnbm9yZSB0aGUgc3BlY2lmaWVkIGhl
aWdodCBmb3IgPGlucHV0IHR5cGU9ImJ1dHRvbiI+IGVsZW1lbnRzCi0gICAgICAgIC8vIHVubGVz
cyBhIGJvcmRlciBhbmQvb3IgYmFja2dyb3VuZCBDU1MgcHJvcGVydHkgaXMgYWxzbyBzcGVjaWZp
ZWQuCi0gICAgICAgIHN0eWxlLT5zZXRIZWlnaHQoTGVuZ3RoKEF1dG8pKTsKLSAgICB9Ci0jZW5k
aWYKLQotICAgIEZvbnREZXNjcmlwdGlvbiBmb250RGVzY3JpcHRpb24gPSBzdHlsZS0+Zm9udERl
c2NyaXB0aW9uKCk7Ci0gICAgZm9udERlc2NyaXB0aW9uLnNldElzQWJzb2x1dGVTaXplKHRydWUp
OwotCi0jaWZkZWYgUV9XU19NQUMgLy8gVXNlIGZpeGVkIGZvbnQgc2l6ZSBhbmQgZmFtaWx5IG9u
IE1hYyAobGlrZSBTYWZhcmkgZG9lcykKLSAgICBmb250RGVzY3JpcHRpb24uc2V0U3BlY2lmaWVk
U2l6ZShtX2J1dHRvbkZvbnRQaXhlbFNpemUpOwotICAgIGZvbnREZXNjcmlwdGlvbi5zZXRDb21w
dXRlZFNpemUobV9idXR0b25Gb250UGl4ZWxTaXplKTsKLSNlbHNlCi0gICAgZm9udERlc2NyaXB0
aW9uLnNldFNwZWNpZmllZFNpemUoc3R5bGUtPmZvbnRTaXplKCkpOwotICAgIGZvbnREZXNjcmlw
dGlvbi5zZXRDb21wdXRlZFNpemUoc3R5bGUtPmZvbnRTaXplKCkpOwotI2VuZGlmCi0KLSAgICBG
b250RmFtaWx5IGZvbnRGYW1pbHk7Ci0gICAgZm9udEZhbWlseS5zZXRGYW1pbHkobV9idXR0b25G
b250RmFtaWx5KTsKLSAgICBmb250RGVzY3JpcHRpb24uc2V0RmFtaWx5KGZvbnRGYW1pbHkpOwot
ICAgIHN0eWxlLT5zZXRGb250RGVzY3JpcHRpb24oZm9udERlc2NyaXB0aW9uKTsKLSAgICBzdHls
ZS0+Zm9udCgpLnVwZGF0ZShzdHlsZVJlc29sdmVyLT5mb250U2VsZWN0b3IoKSk7Ci0gICAgc3R5
bGUtPnNldExpbmVIZWlnaHQoUmVuZGVyU3R5bGU6OmluaXRpYWxMaW5lSGVpZ2h0KCkpOwotICAg
IHNldEJ1dHRvblNpemUoc3R5bGUpOwotICAgIHNldEJ1dHRvblBhZGRpbmcoc3R5bGUpOwotfQot
Ci12b2lkIFJlbmRlclRoZW1lUVN0eWxlOjpzZXRCdXR0b25QYWRkaW5nKFJlbmRlclN0eWxlKiBz
dHlsZSkgY29uc3QKLXsKLSAgICBRU3R5bGVPcHRpb25CdXR0b24gc3R5bGVPcHRpb247Ci0gICAg
c3R5bGVPcHRpb24uc3RhdGUgfD0gUVN0eWxlOjpTdGF0ZV9TbWFsbDsKLQotICAgIC8vIEZha2Ug
YSBidXR0b24gcmVjdCBoZXJlLCBzaW5jZSB3ZSdyZSBqdXN0IGNvbXB1dGluZyBkZWx0YXMKLSAg
ICBRUmVjdCBvcmlnaW5hbFJlY3QgPSBRUmVjdCgwLCAwLCAxMDAsIDMwKTsKLSAgICBzdHlsZU9w
dGlvbi5yZWN0ID0gb3JpZ2luYWxSZWN0OwotCi0gICAgLy8gRGVmYXVsdCBwYWRkaW5nIGlzIGJh
c2VkIG9uIHRoZSBidXR0b24gbWFyZ2luIHBpeGVsIG1ldHJpYwotICAgIGludCBidXR0b25NYXJn
aW4gPSBxU3R5bGUoKS0+cGl4ZWxNZXRyaWMoUVN0eWxlOjpQTV9CdXR0b25NYXJnaW4sICZzdHls
ZU9wdGlvbiwgMCk7Ci0gICAgaW50IHBhZGRpbmdMZWZ0ID0gYnV0dG9uTWFyZ2luOwotICAgIGlu
dCBwYWRkaW5nUmlnaHQgPSBidXR0b25NYXJnaW47Ci0gICAgaW50IHBhZGRpbmdUb3AgPSBidXR0
b25NYXJnaW47Ci0gICAgaW50IHBhZGRpbmdCb3R0b20gPSBidXR0b25NYXJnaW47Ci0KLSAgICAv
LyBUaGVuIGNoZWNrIGlmIHRoZSBzdHlsZSB1c2VzIGxheW91dCBtYXJnaW5zCi0gICAgUVJlY3Qg
bGF5b3V0UmVjdCA9IHFTdHlsZSgpLT5zdWJFbGVtZW50UmVjdChRU3R5bGU6OlNFX1B1c2hCdXR0
b25MYXlvdXRJdGVtLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgJnN0eWxlT3B0aW9uLCAwKTsKLSAgICBpZiAoIWxheW91dFJlY3QuaXNOdWxsKCkpIHsK
LSAgICAgICAgUVJlY3QgY29udGVudHNSZWN0ID0gcVN0eWxlKCktPnN1YkVsZW1lbnRSZWN0KFFT
dHlsZTo6U0VfUHVzaEJ1dHRvbkNvbnRlbnRzLAotICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgJnN0eWxlT3B0aW9uLCAwKTsKLSAgICAgICAgcGFk
ZGluZ0xlZnQgPSBjb250ZW50c1JlY3QubGVmdCgpIC0gbGF5b3V0UmVjdC5sZWZ0KCk7Ci0gICAg
ICAgIHBhZGRpbmdSaWdodCA9IGxheW91dFJlY3QucmlnaHQoKSAtIGNvbnRlbnRzUmVjdC5yaWdo
dCgpOwotICAgICAgICBwYWRkaW5nVG9wID0gY29udGVudHNSZWN0LnRvcCgpIC0gbGF5b3V0UmVj
dC50b3AoKTsKLQotICAgICAgICAvLyBDYW4ndCB1c2UgdGhpcyByaWdodCBub3cgYmVjYXVzZSB3
ZSBkb24ndCBoYXZlIHRoZSBiYXNlbGluZSB0byBjb21wZW5zYXRlCi0gICAgICAgIC8vIHBhZGRp
bmdCb3R0b20gPSBsYXlvdXRSZWN0LmJvdHRvbSgpIC0gY29udGVudHNSZWN0LmJvdHRvbSgpOwot
ICAgIH0KLSAgICBzdHlsZS0+c2V0UGFkZGluZ0xlZnQoTGVuZ3RoKHBhZGRpbmdMZWZ0LCBGaXhl
ZCkpOwotICAgIHN0eWxlLT5zZXRQYWRkaW5nUmlnaHQoTGVuZ3RoKHBhZGRpbmdSaWdodCwgRml4
ZWQpKTsKLSAgICBzdHlsZS0+c2V0UGFkZGluZ1RvcChMZW5ndGgocGFkZGluZ1RvcCwgRml4ZWQp
KTsKLSAgICBzdHlsZS0+c2V0UGFkZGluZ0JvdHRvbShMZW5ndGgocGFkZGluZ0JvdHRvbSwgRml4
ZWQpKTsKLX0KLQotYm9vbCBSZW5kZXJUaGVtZVFTdHlsZTo6cGFpbnRCdXR0b24oUmVuZGVyT2Jq
ZWN0KiBvLCBjb25zdCBQYWludEluZm8mIGksIGNvbnN0IEludFJlY3QmIHIpCi17Ci0gICAgU3R5
bGVQYWludGVyUVN0eWxlIHAodGhpcywgaSk7Ci0gICAgaWYgKCFwLmlzVmFsaWQoKSkKLSAgICAg
ICByZXR1cm4gdHJ1ZTsKLQotICAgIFFTdHlsZU9wdGlvbkJ1dHRvbiBvcHRpb247Ci0gICAgaW5p
dFN0eWxlT3B0aW9uKHAud2lkZ2V0LCBvcHRpb24pOwotICAgIG9wdGlvbi5yZWN0ID0gcjsKLSAg
ICBvcHRpb24uc3RhdGUgfD0gUVN0eWxlOjpTdGF0ZV9TbWFsbDsKLQotICAgIENvbnRyb2xQYXJ0
IGFwcGVhcmFuY2UgPSBpbml0aWFsaXplQ29tbW9uUVN0eWxlT3B0aW9ucyhvcHRpb24sIG8pOwot
ICAgIGlmIChhcHBlYXJhbmNlID09IFB1c2hCdXR0b25QYXJ0IHx8IGFwcGVhcmFuY2UgPT0gQnV0
dG9uUGFydCkgewotICAgICAgICBvcHRpb24ucmVjdCA9IGluZmxhdGVCdXR0b25SZWN0KG9wdGlv
bi5yZWN0KTsKLSAgICAgICAgcC5kcmF3Q29udHJvbChRU3R5bGU6OkNFX1B1c2hCdXR0b24sIG9w
dGlvbik7Ci0gICAgfSBlbHNlIGlmIChhcHBlYXJhbmNlID09IFJhZGlvUGFydCkKLSAgICAgICBw
LmRyYXdDb250cm9sKFFTdHlsZTo6Q0VfUmFkaW9CdXR0b24sIG9wdGlvbik7Ci0gICAgZWxzZSBp
ZiAoYXBwZWFyYW5jZSA9PSBDaGVja2JveFBhcnQpCi0gICAgICAgcC5kcmF3Q29udHJvbChRU3R5
bGU6OkNFX0NoZWNrQm94LCBvcHRpb24pOwotCi0gICAgcmV0dXJuIGZhbHNlOwotfQotCi1ib29s
IFJlbmRlclRoZW1lUVN0eWxlOjpwYWludFRleHRGaWVsZChSZW5kZXJPYmplY3QqIG8sIGNvbnN0
IFBhaW50SW5mbyYgaSwgY29uc3QgSW50UmVjdCYgcikKLXsKLSAgICBTdHlsZVBhaW50ZXJRU3R5
bGUgcCh0aGlzLCBpKTsKLSAgICBpZiAoIXAuaXNWYWxpZCgpKQotICAgICAgICByZXR1cm4gdHJ1
ZTsKLQotICAgIFFTdHlsZU9wdGlvbkZyYW1lVjIgcGFuZWw7Ci0gICAgaW5pdFN0eWxlT3B0aW9u
KHAud2lkZ2V0LCBwYW5lbCk7Ci0gICAgcGFuZWwucmVjdCA9IHI7Ci0gICAgcGFuZWwubGluZVdp
ZHRoID0gZmluZEZyYW1lTGluZVdpZHRoKHFTdHlsZSgpKTsKLSAgICBwYW5lbC5zdGF0ZSB8PSBR
U3R5bGU6OlN0YXRlX1N1bmtlbjsKLSAgICBwYW5lbC5mZWF0dXJlcyA9IFFTdHlsZU9wdGlvbkZy
YW1lVjI6Ok5vbmU7Ci0KLSAgICAvLyBHZXQgdGhlIGNvcnJlY3QgdGhlbWUgZGF0YSBmb3IgYSB0
ZXh0IGZpZWxkCi0gICAgQ29udHJvbFBhcnQgYXBwZWFyYW5jZSA9IGluaXRpYWxpemVDb21tb25R
U3R5bGVPcHRpb25zKHBhbmVsLCBvKTsKLSAgICBpZiAoYXBwZWFyYW5jZSAhPSBUZXh0RmllbGRQ
YXJ0Ci0gICAgICAgICYmIGFwcGVhcmFuY2UgIT0gU2VhcmNoRmllbGRQYXJ0Ci0gICAgICAgICYm
IGFwcGVhcmFuY2UgIT0gVGV4dEFyZWFQYXJ0Ci0gICAgICAgICYmIGFwcGVhcmFuY2UgIT0gTGlz
dGJveFBhcnQpCi0gICAgICAgIHJldHVybiB0cnVlOwotCi0gICAgLy8gTm93IHBhaW50IHRoZSB0
ZXh0IGZpZWxkLgotICAgIHAuZHJhd1ByaW1pdGl2ZShRU3R5bGU6OlBFX1BhbmVsTGluZUVkaXQs
IHBhbmVsKTsKLSAgICByZXR1cm4gZmFsc2U7Ci19Ci0KLXZvaWQgUmVuZGVyVGhlbWVRU3R5bGU6
OmFkanVzdFRleHRBcmVhU3R5bGUoU3R5bGVSZXNvbHZlciogc3R5bGVSZXNvbHZlciwgUmVuZGVy
U3R5bGUqIHN0eWxlLCBFbGVtZW50KiBlbGVtZW50KSBjb25zdAotewotICAgIGFkanVzdFRleHRG
aWVsZFN0eWxlKHN0eWxlUmVzb2x2ZXIsIHN0eWxlLCBlbGVtZW50KTsKLX0KLQotYm9vbCBSZW5k
ZXJUaGVtZVFTdHlsZTo6cGFpbnRUZXh0QXJlYShSZW5kZXJPYmplY3QqIG8sIGNvbnN0IFBhaW50
SW5mbyYgaSwgY29uc3QgSW50UmVjdCYgcikKLXsKLSAgICByZXR1cm4gcGFpbnRUZXh0RmllbGQo
bywgaSwgcik7Ci19Ci0KLXZvaWQgUmVuZGVyVGhlbWVRU3R5bGU6OnNldFBvcHVwUGFkZGluZyhS
ZW5kZXJTdHlsZSogc3R5bGUpIGNvbnN0Ci17Ci0gICAgY29uc3QgaW50IHBhZGRpbmdMZWZ0ID0g
NDsKLSAgICBjb25zdCBpbnQgcGFkZGluZ1JpZ2h0ID0gc3R5bGUtPndpZHRoKCkuaXNGaXhlZCgp
IHx8IHN0eWxlLT53aWR0aCgpLmlzUGVyY2VudCgpID8gNSA6IDg7Ci0KLSAgICBzdHlsZS0+c2V0
UGFkZGluZ0xlZnQoTGVuZ3RoKHBhZGRpbmdMZWZ0LCBGaXhlZCkpOwotCi0gICAgUVN0eWxlT3B0
aW9uQ29tYm9Cb3ggb3B0OwotICAgIGludCB3ID0gcVN0eWxlKCktPnBpeGVsTWV0cmljKFFTdHls
ZTo6UE1fQnV0dG9uSWNvblNpemUsICZvcHQsIDApOwotICAgIHN0eWxlLT5zZXRQYWRkaW5nUmln
aHQoTGVuZ3RoKHBhZGRpbmdSaWdodCArIHcsIEZpeGVkKSk7Ci0KLSAgICBzdHlsZS0+c2V0UGFk
ZGluZ1RvcChMZW5ndGgoMiwgRml4ZWQpKTsKLSAgICBzdHlsZS0+c2V0UGFkZGluZ0JvdHRvbShM
ZW5ndGgoMiwgRml4ZWQpKTsKLX0KLQotUVBhbGV0dGUgUmVuZGVyVGhlbWVRU3R5bGU6OmNvbG9y
UGFsZXR0ZSgpIGNvbnN0Ci17Ci0gICAgUVBhbGV0dGUgcGFsZXR0ZSA9IFJlbmRlclRoZW1lUXQ6
OmNvbG9yUGFsZXR0ZSgpOwotICAgIHNldFBhbGV0dGVGcm9tUGFnZUNsaWVudElmRXhpc3RzKHBh
bGV0dGUpOwotICAgIHJldHVybiBwYWxldHRlOwotfQotCi1ib29sIFJlbmRlclRoZW1lUVN0eWxl
OjpwYWludE1lbnVMaXN0KFJlbmRlck9iamVjdCogbywgY29uc3QgUGFpbnRJbmZvJiBpLCBjb25z
dCBJbnRSZWN0JiByKQotewotICAgIFN0eWxlUGFpbnRlclFTdHlsZSBwKHRoaXMsIGkpOwotICAg
IGlmICghcC5pc1ZhbGlkKCkpCi0gICAgICAgIHJldHVybiB0cnVlOwotCi0gICAgUVN0eWxlT3B0
aW9uQ29tYm9Cb3ggb3B0OwotICAgIGluaXRTdHlsZU9wdGlvbihwLndpZGdldCwgb3B0KTsKLSAg
ICBpbml0aWFsaXplQ29tbW9uUVN0eWxlT3B0aW9ucyhvcHQsIG8pOwotCi0gICAgSW50UmVjdCBy
ZWN0ID0gcjsKLQotI2lmIGRlZmluZWQoUV9XU19NQUMpICYmICFkZWZpbmVkKFFUX05PX1NUWUxF
X01BQykKLSAgICAvLyBRTWFjU3R5bGUgbWFrZXMgdGhlIGNvbWJvIGJveGVzIGEgbGl0dGxlIGJp
dCBzbWFsbGVyIHRvIGxlYXZlIHNwYWNlIGZvciB0aGUgZm9jdXMgcmVjdC4KLSAgICAvLyBCZWNh
dXNlIG9mIGl0LCB0aGUgY29tYm8gYnV0dG9uIGlzIGRyYXduIGF0IGEgcG9pbnQgdG8gdGhlIGxl
ZnQgb2Ygd2hlcmUgaXQgd2FzIGV4cGVjdCB0byBiZSBhbmQgbWF5IGVuZCB1cAotICAgIC8vIG92
ZXJsYXBwZWQgd2l0aCB0aGUgdGV4dC4gVGhpcyB3aWxsIGZvcmNlIFFNYWNTdHlsZSB0byBkcmF3
IHRoZSBjb21ibyBib3ggd2l0aCB0aGUgZXhwZWN0ZWQgd2lkdGguCi0gICAgaWYgKHFvYmplY3Rf
Y2FzdDxRTWFjU3R5bGUqPihwLnN0eWxlKSkKLSAgICAgICAgcmVjdC5pbmZsYXRlWCgzKTsKLSNl
bmRpZgotCi0gICAgY29uc3QgUVBvaW50IHRvcExlZnQgPSByZWN0LmxvY2F0aW9uKCk7Ci0gICAg
cC5wYWludGVyLT50cmFuc2xhdGUodG9wTGVmdCk7Ci0gICAgb3B0LnJlY3QubW92ZVRvKFFQb2lu
dCgwLCAwKSk7Ci0gICAgb3B0LnJlY3Quc2V0U2l6ZShyZWN0LnNpemUoKSk7Ci0KLSAgICBwLmRy
YXdDb21wbGV4Q29udHJvbChRU3R5bGU6OkNDX0NvbWJvQm94LCBvcHQpOwotICAgIHAucGFpbnRl
ci0+dHJhbnNsYXRlKC10b3BMZWZ0KTsKLSAgICByZXR1cm4gZmFsc2U7Ci19Ci0KLXZvaWQgUmVu
ZGVyVGhlbWVRU3R5bGU6OmFkanVzdE1lbnVMaXN0QnV0dG9uU3R5bGUoU3R5bGVSZXNvbHZlciog
c3R5bGVSZXNvbHZlciwgUmVuZGVyU3R5bGUqIHN0eWxlLCBFbGVtZW50KiBlKSBjb25zdAotewot
ICAgIC8vIFdPUktBUk9VTkQgYmVjYXVzZSBodG1sLmNzcyBzcGVjaWZpZXMgLXdlYmtpdC1ib3Jk
ZXItcmFkaXVzIGZvciA8c2VsZWN0PiBzbyB3ZSBvdmVycmlkZSBpdCBoZXJlCi0gICAgLy8gc2Vl
IGFsc28gaHR0cDovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTgzOTkKLSAgICBz
dHlsZS0+cmVzZXRCb3JkZXJSYWRpdXMoKTsKLQotICAgIFJlbmRlclRoZW1lUXQ6OmFkanVzdE1l
bnVMaXN0QnV0dG9uU3R5bGUoc3R5bGVSZXNvbHZlciwgc3R5bGUsIGUpOwotfQotCi1ib29sIFJl
bmRlclRoZW1lUVN0eWxlOjpwYWludE1lbnVMaXN0QnV0dG9uKFJlbmRlck9iamVjdCogbywgY29u
c3QgUGFpbnRJbmZvJiBpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IGNvbnN0IEludFJlY3QmIHIpCi17Ci0gICAgU3R5bGVQYWludGVyUVN0eWxlIHAodGhpcywgaSk7
Ci0gICAgaWYgKCFwLmlzVmFsaWQoKSkKLSAgICAgICAgcmV0dXJuIHRydWU7Ci0KLSAgICBRU3R5
bGVPcHRpb25Db21ib0JveCBvcHRpb247Ci0gICAgaW5pdFN0eWxlT3B0aW9uKHAud2lkZ2V0LCBv
cHRpb24pOwotICAgIGluaXRpYWxpemVDb21tb25RU3R5bGVPcHRpb25zKG9wdGlvbiwgbyk7Ci0g
ICAgb3B0aW9uLnJlY3QgPSByOwotCi0gICAgLy8gZm9yIGRyYXdpbmcgdGhlIGNvbWJvIGJveCBh
cnJvdywgcmVseSBvbmx5IG9uIHRoZSBmYWxsYmFjayBzdHlsZQotICAgIHAuc3R5bGUgPSBmYWxs
YmFja1N0eWxlKCk7Ci0gICAgb3B0aW9uLnN1YkNvbnRyb2xzID0gUVN0eWxlOjpTQ19Db21ib0Jv
eEFycm93OwotICAgIHAuZHJhd0NvbXBsZXhDb250cm9sKFFTdHlsZTo6Q0NfQ29tYm9Cb3gsIG9w
dGlvbik7Ci0KLSAgICByZXR1cm4gZmFsc2U7Ci19Ci0KLSNpZiBFTkFCTEUoUFJPR1JFU1NfRUxF
TUVOVCkKLWRvdWJsZSBSZW5kZXJUaGVtZVFTdHlsZTo6YW5pbWF0aW9uRHVyYXRpb25Gb3JQcm9n
cmVzc0JhcihSZW5kZXJQcm9ncmVzcyogcmVuZGVyUHJvZ3Jlc3MpIGNvbnN0Ci17Ci0gICAgaWYg
KHJlbmRlclByb2dyZXNzLT5wb3NpdGlvbigpID49IDApCi0gICAgICAgIHJldHVybiAwOwotCi0g
ICAgUVN0eWxlT3B0aW9uUHJvZ3Jlc3NCYXJWMiBvcHRpb247Ci0gICAgb3B0aW9uLnJlY3Quc2V0
U2l6ZShyZW5kZXJQcm9ncmVzcy0+cGl4ZWxTbmFwcGVkU2l6ZSgpKTsKLSAgICAvLyBGSVhNRTog
VW50aWwgaHR0cDovL2J1Z3JlcG9ydHMucXQubm9raWEuY29tL2Jyb3dzZS9RVEJVRy05MTcxIGlz
IGZpeGVkLAotICAgIC8vIHdlIHNpbXVsYXRlIG9uZSBzcXVhcmUgYW5pbWF0aW5nIGFjcm9zcyB0
aGUgcHJvZ3Jlc3MgYmFyLgotICAgIHJldHVybiAob3B0aW9uLnJlY3Qud2lkdGgoKSAvIHFTdHls
ZSgpLT5waXhlbE1ldHJpYyhRU3R5bGU6OlBNX1Byb2dyZXNzQmFyQ2h1bmtXaWR0aCwgJm9wdGlv
bikpICogYW5pbWF0aW9uUmVwZWF0SW50ZXJ2YWxGb3JQcm9ncmVzc0JhcihyZW5kZXJQcm9ncmVz
cyk7Ci19Ci0KLWJvb2wgUmVuZGVyVGhlbWVRU3R5bGU6OnBhaW50UHJvZ3Jlc3NCYXIoUmVuZGVy
T2JqZWN0KiBvLCBjb25zdCBQYWludEluZm8mIHBpLCBjb25zdCBJbnRSZWN0JiByKQotewotICAg
IGlmICghby0+aXNQcm9ncmVzcygpKQotICAgICAgICByZXR1cm4gdHJ1ZTsKLQotICAgIFN0eWxl
UGFpbnRlclFTdHlsZSBwKHRoaXMsIHBpKTsKLSAgICBpZiAoIXAuaXNWYWxpZCgpKQotICAgICAg
IHJldHVybiB0cnVlOwotCi0gICAgUVN0eWxlT3B0aW9uUHJvZ3Jlc3NCYXJWMiBvcHRpb247Ci0g
ICAgaW5pdFN0eWxlT3B0aW9uKHAud2lkZ2V0LCBvcHRpb24pOwotICAgIGluaXRpYWxpemVDb21t
b25RU3R5bGVPcHRpb25zKG9wdGlvbiwgbyk7Ci0KLSAgICBSZW5kZXJQcm9ncmVzcyogcmVuZGVy
UHJvZ3Jlc3MgPSB0b1JlbmRlclByb2dyZXNzKG8pOwotICAgIG9wdGlvbi5yZWN0ID0gcjsKLSAg
ICBvcHRpb24ubWF4aW11bSA9IHN0ZDo6bnVtZXJpY19saW1pdHM8aW50Pjo6bWF4KCk7Ci0gICAg
b3B0aW9uLm1pbmltdW0gPSAwOwotICAgIG9wdGlvbi5wcm9ncmVzcyA9IChyZW5kZXJQcm9ncmVz
cy0+cG9zaXRpb24oKSAqIHN0ZDo6bnVtZXJpY19saW1pdHM8aW50Pjo6bWF4KCkpOwotCi0gICAg
Y29uc3QgUVBvaW50IHRvcExlZnQgPSByLmxvY2F0aW9uKCk7Ci0gICAgcC5wYWludGVyLT50cmFu
c2xhdGUodG9wTGVmdCk7Ci0gICAgb3B0aW9uLnJlY3QubW92ZVRvKFFQb2ludCgwLCAwKSk7Ci0g
ICAgb3B0aW9uLnJlY3Quc2V0U2l6ZShyLnNpemUoKSk7Ci0KLSAgICBpZiAob3B0aW9uLnByb2dy
ZXNzIDwgMCkgewotICAgICAgICAvLyBGSVhNRTogVW50aWwgaHR0cDovL2J1Z3JlcG9ydHMucXQu
bm9raWEuY29tL2Jyb3dzZS9RVEJVRy05MTcxIGlzIGZpeGVkLAotICAgICAgICAvLyB3ZSBzaW11
bGF0ZSBvbmUgc3F1YXJlIGFuaW1hdGluZyBhY3Jvc3MgdGhlIHByb2dyZXNzIGJhci4KLSAgICAg
ICAgcC5kcmF3Q29udHJvbChRU3R5bGU6OkNFX1Byb2dyZXNzQmFyR3Jvb3ZlLCBvcHRpb24pOwot
ICAgICAgICBpbnQgY2h1bmtXaWR0aCA9IHFTdHlsZSgpLT5waXhlbE1ldHJpYyhRU3R5bGU6OlBN
X1Byb2dyZXNzQmFyQ2h1bmtXaWR0aCwgJm9wdGlvbik7Ci0gICAgICAgIFFDb2xvciBjb2xvciA9
IChvcHRpb24ucGFsZXR0ZS5oaWdobGlnaHQoKSA9PSBvcHRpb24ucGFsZXR0ZS5iYWNrZ3JvdW5k
KCkpID8gb3B0aW9uLnBhbGV0dGUuY29sb3IoUVBhbGV0dGU6OkFjdGl2ZSwgUVBhbGV0dGU6Okhp
Z2hsaWdodCkgOiBvcHRpb24ucGFsZXR0ZS5jb2xvcihRUGFsZXR0ZTo6SGlnaGxpZ2h0KTsKLSAg
ICAgICAgaWYgKHJlbmRlclByb2dyZXNzLT5zdHlsZSgpLT5kaXJlY3Rpb24oKSA9PSBSVEwpCi0g
ICAgICAgICAgICBwLnBhaW50ZXItPmZpbGxSZWN0KG9wdGlvbi5yZWN0LnJpZ2h0KCkgLSBjaHVu
a1dpZHRoICAtIHJlbmRlclByb2dyZXNzLT5hbmltYXRpb25Qcm9ncmVzcygpICogb3B0aW9uLnJl
Y3Qud2lkdGgoKSwgMCwgY2h1bmtXaWR0aCwgb3B0aW9uLnJlY3QuaGVpZ2h0KCksIGNvbG9yKTsK
LSAgICAgICAgZWxzZQotICAgICAgICAgICAgcC5wYWludGVyLT5maWxsUmVjdChyZW5kZXJQcm9n
cmVzcy0+YW5pbWF0aW9uUHJvZ3Jlc3MoKSAqIG9wdGlvbi5yZWN0LndpZHRoKCksIDAsIGNodW5r
V2lkdGgsIG9wdGlvbi5yZWN0LmhlaWdodCgpLCBjb2xvcik7Ci0gICAgfSBlbHNlCi0gICAgICAg
IHAuZHJhd0NvbnRyb2woUVN0eWxlOjpDRV9Qcm9ncmVzc0Jhciwgb3B0aW9uKTsKLQotICAgIHAu
cGFpbnRlci0+dHJhbnNsYXRlKC10b3BMZWZ0KTsKLQotICAgIHJldHVybiBmYWxzZTsKLX0KLSNl
bmRpZgotCi1ib29sIFJlbmRlclRoZW1lUVN0eWxlOjpwYWludFNsaWRlclRyYWNrKFJlbmRlck9i
amVjdCogbywgY29uc3QgUGFpbnRJbmZvJiBwaSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBjb25zdCBJbnRSZWN0JiByKQotewotICAgIFN0eWxlUGFpbnRlclFTdHlsZSBw
KHRoaXMsIHBpKTsKLSAgICBpZiAoIXAuaXNWYWxpZCgpKQotICAgICAgICByZXR1cm4gdHJ1ZTsK
LQotICAgIGNvbnN0IFFQb2ludCB0b3BMZWZ0ID0gci5sb2NhdGlvbigpOwotICAgIHAucGFpbnRl
ci0+dHJhbnNsYXRlKHRvcExlZnQpOwotCi0gICAgUVN0eWxlT3B0aW9uU2xpZGVyIG9wdGlvbjsK
LSAgICBpbml0U3R5bGVPcHRpb24ocC53aWRnZXQsIG9wdGlvbik7Ci0gICAgb3B0aW9uLnN1YkNv
bnRyb2xzID0gUVN0eWxlOjpTQ19TbGlkZXJHcm9vdmU7Ci0gICAgQ29udHJvbFBhcnQgYXBwZWFy
YW5jZSA9IGluaXRpYWxpemVDb21tb25RU3R5bGVPcHRpb25zKG9wdGlvbiwgbyk7Ci0gICAgb3B0
aW9uLnJlY3QgPSByOwotICAgIG9wdGlvbi5yZWN0Lm1vdmVUbyhRUG9pbnQoMCwgMCkpOwotICAg
IGlmIChhcHBlYXJhbmNlID09IFNsaWRlclZlcnRpY2FsUGFydCkKLSAgICAgICAgb3B0aW9uLm9y
aWVudGF0aW9uID0gUXQ6OlZlcnRpY2FsOwotICAgIGlmIChpc1ByZXNzZWQobykpCi0gICAgICAg
IG9wdGlvbi5zdGF0ZSB8PSBRU3R5bGU6OlN0YXRlX1N1bmtlbjsKLQotICAgIC8vIHNvbWUgc3R5
bGVzIG5lZWQgdGhpcyB0byBzaG93IGEgaGlnaGxpZ2h0IG9uIG9uZSBzaWRlIG9mIHRoZSBncm9v
dmUKLSAgICBIVE1MSW5wdXRFbGVtZW50KiBzbGlkZXIgPSBvLT5ub2RlKCktPnRvSW5wdXRFbGVt
ZW50KCk7Ci0gICAgaWYgKHNsaWRlcikgewotICAgICAgICBvcHRpb24udXBzaWRlRG93biA9IChh
cHBlYXJhbmNlID09IFNsaWRlckhvcml6b250YWxQYXJ0KSAmJiAhby0+c3R5bGUoKS0+aXNMZWZ0
VG9SaWdodERpcmVjdGlvbigpOwotICAgICAgICAvLyBVc2UgdGhlIHdpZHRoIGFzIGEgbXVsdGlw
bGllciBpbiBjYXNlIHRoZSBzbGlkZXIgdmFsdWVzIGFyZSA8PSAxCi0gICAgICAgIGNvbnN0IGlu
dCB3aWR0aCA9IHIud2lkdGgoKSA+IDAgPyByLndpZHRoKCkgOiAxMDA7Ci0gICAgICAgIG9wdGlv
bi5tYXhpbXVtID0gc2xpZGVyLT5tYXhpbXVtKCkgKiB3aWR0aDsKLSAgICAgICAgb3B0aW9uLm1p
bmltdW0gPSBzbGlkZXItPm1pbmltdW0oKSAqIHdpZHRoOwotICAgICAgICBpZiAoIW9wdGlvbi51
cHNpZGVEb3duKQotICAgICAgICAgICAgb3B0aW9uLnNsaWRlclBvc2l0aW9uID0gc2xpZGVyLT52
YWx1ZUFzTnVtYmVyKCkgKiB3aWR0aDsKLSAgICAgICAgZWxzZQotICAgICAgICAgICAgb3B0aW9u
LnNsaWRlclBvc2l0aW9uID0gb3B0aW9uLm1pbmltdW0gKyBvcHRpb24ubWF4aW11bSAtIHNsaWRl
ci0+dmFsdWVBc051bWJlcigpICogd2lkdGg7Ci0gICAgfQotCi0gICAgcC5kcmF3Q29tcGxleENv
bnRyb2woUVN0eWxlOjpDQ19TbGlkZXIsIG9wdGlvbik7Ci0KLSAgICBpZiAob3B0aW9uLnN0YXRl
ICYgUVN0eWxlOjpTdGF0ZV9IYXNGb2N1cykgewotICAgICAgICBRU3R5bGVPcHRpb25Gb2N1c1Jl
Y3QgZm9jdXNPcHRpb247Ci0gICAgICAgIGZvY3VzT3B0aW9uLnJlY3QgPSByOwotICAgICAgICBw
LmRyYXdQcmltaXRpdmUoUVN0eWxlOjpQRV9GcmFtZUZvY3VzUmVjdCwgZm9jdXNPcHRpb24pOwot
ICAgIH0KLSAgICBwLnBhaW50ZXItPnRyYW5zbGF0ZSgtdG9wTGVmdCk7Ci0gICAgcmV0dXJuIGZh
bHNlOwotfQotCi12b2lkIFJlbmRlclRoZW1lUVN0eWxlOjphZGp1c3RTbGlkZXJUcmFja1N0eWxl
KFN0eWxlUmVzb2x2ZXIqLCBSZW5kZXJTdHlsZSogc3R5bGUsIEVsZW1lbnQqKSBjb25zdAotewot
ICAgIHN0eWxlLT5zZXRCb3hTaGFkb3cobnVsbHB0cik7Ci19Ci0KLWJvb2wgUmVuZGVyVGhlbWVR
U3R5bGU6OnBhaW50U2xpZGVyVGh1bWIoUmVuZGVyT2JqZWN0KiBvLCBjb25zdCBQYWludEluZm8m
IHBpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IEludFJlY3Qm
IHIpCi17Ci0gICAgU3R5bGVQYWludGVyUVN0eWxlIHAodGhpcywgcGkpOwotICAgIGlmICghcC5p
c1ZhbGlkKCkpCi0gICAgICAgIHJldHVybiB0cnVlOwotCi0gICAgY29uc3QgUVBvaW50IHRvcExl
ZnQgPSByLmxvY2F0aW9uKCk7Ci0gICAgcC5wYWludGVyLT50cmFuc2xhdGUodG9wTGVmdCk7Ci0K
LSAgICBRU3R5bGVPcHRpb25TbGlkZXIgb3B0aW9uOwotICAgIGluaXRTdHlsZU9wdGlvbihwLndp
ZGdldCwgb3B0aW9uKTsKLSAgICBvcHRpb24uc3ViQ29udHJvbHMgPSBRU3R5bGU6OlNDX1NsaWRl
ckhhbmRsZTsKLSAgICBDb250cm9sUGFydCBhcHBlYXJhbmNlID0gaW5pdGlhbGl6ZUNvbW1vblFT
dHlsZU9wdGlvbnMob3B0aW9uLCBvKTsKLSAgICBvcHRpb24ucmVjdCA9IHI7Ci0gICAgb3B0aW9u
LnJlY3QubW92ZVRvKFFQb2ludCgwLCAwKSk7Ci0gICAgaWYgKGFwcGVhcmFuY2UgPT0gU2xpZGVy
VGh1bWJWZXJ0aWNhbFBhcnQpCi0gICAgICAgIG9wdGlvbi5vcmllbnRhdGlvbiA9IFF0OjpWZXJ0
aWNhbDsKLSAgICBpZiAoaXNQcmVzc2VkKG8pKSB7Ci0gICAgICAgIG9wdGlvbi5hY3RpdmVTdWJD
b250cm9scyA9IFFTdHlsZTo6U0NfU2xpZGVySGFuZGxlOwotICAgICAgICBvcHRpb24uc3RhdGUg
fD0gUVN0eWxlOjpTdGF0ZV9TdW5rZW47Ci0gICAgfQotCi0gICAgcC5kcmF3Q29tcGxleENvbnRy
b2woUVN0eWxlOjpDQ19TbGlkZXIsIG9wdGlvbik7Ci0gICAgcC5wYWludGVyLT50cmFuc2xhdGUo
LXRvcExlZnQpOwotICAgIHJldHVybiBmYWxzZTsKLX0KLQotdm9pZCBSZW5kZXJUaGVtZVFTdHls
ZTo6YWRqdXN0U2xpZGVyVGh1bWJTdHlsZShTdHlsZVJlc29sdmVyKiBzdHlsZVJlc29sdmVyLCBS
ZW5kZXJTdHlsZSogc3R5bGUsIEVsZW1lbnQqIGVsZW1lbnQpIGNvbnN0Ci17Ci0gICAgUmVuZGVy
VGhlbWU6OmFkanVzdFNsaWRlclRodW1iU3R5bGUoc3R5bGVSZXNvbHZlciwgc3R5bGUsIGVsZW1l
bnQpOwotICAgIHN0eWxlLT5zZXRCb3hTaGFkb3cobnVsbHB0cik7Ci19Ci0KLWJvb2wgUmVuZGVy
VGhlbWVRU3R5bGU6OnBhaW50U2VhcmNoRmllbGQoUmVuZGVyT2JqZWN0KiBvLCBjb25zdCBQYWlu
dEluZm8mIHBpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IElu
dFJlY3QmIHIpCi17Ci0gICAgcmV0dXJuIHBhaW50VGV4dEZpZWxkKG8sIHBpLCByKTsKLX0KLQot
dm9pZCBSZW5kZXJUaGVtZVFTdHlsZTo6YWRqdXN0U2VhcmNoRmllbGREZWNvcmF0aW9uU3R5bGUo
U3R5bGVSZXNvbHZlciogc3R5bGVSZXNvbHZlciwgUmVuZGVyU3R5bGUqIHN0eWxlLCBFbGVtZW50
KiBlKSBjb25zdAotewotICAgIG5vdEltcGxlbWVudGVkKCk7Ci0gICAgUmVuZGVyVGhlbWU6OmFk
anVzdFNlYXJjaEZpZWxkRGVjb3JhdGlvblN0eWxlKHN0eWxlUmVzb2x2ZXIsIHN0eWxlLCBlKTsK
LX0KLQotYm9vbCBSZW5kZXJUaGVtZVFTdHlsZTo6cGFpbnRTZWFyY2hGaWVsZERlY29yYXRpb24o
UmVuZGVyT2JqZWN0KiBvLCBjb25zdCBQYWludEluZm8mIHBpLAotICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBJbnRSZWN0JiByKQotewotICAgIG5v
dEltcGxlbWVudGVkKCk7Ci0gICAgcmV0dXJuIFJlbmRlclRoZW1lOjpwYWludFNlYXJjaEZpZWxk
RGVjb3JhdGlvbihvLCBwaSwgcik7Ci19Ci0KLXZvaWQgUmVuZGVyVGhlbWVRU3R5bGU6OmFkanVz
dFNlYXJjaEZpZWxkUmVzdWx0c0RlY29yYXRpb25TdHlsZShTdHlsZVJlc29sdmVyKiBzdHlsZVJl
c29sdmVyLCBSZW5kZXJTdHlsZSogc3R5bGUsIEVsZW1lbnQqIGUpIGNvbnN0Ci17Ci0gICAgbm90
SW1wbGVtZW50ZWQoKTsKLSAgICBSZW5kZXJUaGVtZTo6YWRqdXN0U2VhcmNoRmllbGRSZXN1bHRz
RGVjb3JhdGlvblN0eWxlKHN0eWxlUmVzb2x2ZXIsIHN0eWxlLCBlKTsKLX0KLQotYm9vbCBSZW5k
ZXJUaGVtZVFTdHlsZTo6cGFpbnRTZWFyY2hGaWVsZFJlc3VsdHNEZWNvcmF0aW9uKFJlbmRlck9i
amVjdCogbywgY29uc3QgUGFpbnRJbmZvJiBwaSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IEludFJlY3QmIHIpCi17Ci0gICAgbm90
SW1wbGVtZW50ZWQoKTsKLSAgICByZXR1cm4gUmVuZGVyVGhlbWU6OnBhaW50U2VhcmNoRmllbGRS
ZXN1bHRzRGVjb3JhdGlvbihvLCBwaSwgcik7Ci19Ci0KLSNpZm5kZWYgUVRfTk9fU1BJTkJPWAot
Ci1ib29sIFJlbmRlclRoZW1lUVN0eWxlOjpwYWludElubmVyU3BpbkJ1dHRvbihSZW5kZXJPYmpl
Y3QqIG8sIGNvbnN0IFBhaW50SW5mbyYgcGFpbnRJbmZvLCBjb25zdCBJbnRSZWN0JiByZWN0KQot
ewotICAgIFN0eWxlUGFpbnRlclFTdHlsZSBwKHRoaXMsIHBhaW50SW5mbyk7Ci0gICAgaWYgKCFw
LmlzVmFsaWQoKSkKLSAgICAgICByZXR1cm4gdHJ1ZTsKLQotICAgIFFTdHlsZU9wdGlvblNwaW5C
b3ggb3B0aW9uOwotICAgIGluaXRTdHlsZU9wdGlvbihwLndpZGdldCwgb3B0aW9uKTsKLSAgICBv
cHRpb24uc3ViQ29udHJvbHMgPSBRU3R5bGU6OlNDX1NwaW5Cb3hVcCB8IFFTdHlsZTo6U0NfU3Bp
bkJveERvd247Ci0gICAgaWYgKCFpc1JlYWRPbmx5Q29udHJvbChvKSkgewotICAgICAgICBpZiAo
aXNFbmFibGVkKG8pKQotICAgICAgICAgICAgb3B0aW9uLnN0ZXBFbmFibGVkID0gUUFic3RyYWN0
U3BpbkJveDo6U3RlcFVwRW5hYmxlZCB8IFFBYnN0cmFjdFNwaW5Cb3g6OlN0ZXBEb3duRW5hYmxl
ZDsKLSAgICAgICAgaWYgKGlzUHJlc3NlZChvKSkgewotICAgICAgICAgICAgb3B0aW9uLnN0YXRl
IHw9IFFTdHlsZTo6U3RhdGVfU3Vua2VuOwotICAgICAgICAgICAgaWYgKGlzU3BpblVwQnV0dG9u
UGFydFByZXNzZWQobykpCi0gICAgICAgICAgICAgICAgb3B0aW9uLmFjdGl2ZVN1YkNvbnRyb2xz
ID0gUVN0eWxlOjpTQ19TcGluQm94VXA7Ci0gICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAg
ICAgb3B0aW9uLmFjdGl2ZVN1YkNvbnRyb2xzID0gUVN0eWxlOjpTQ19TcGluQm94RG93bjsKLSAg
ICAgICAgfQotICAgIH0KLSAgICAvLyBSZW5kZXIgdGhlIHNwaW4gYnV0dG9ucyBmb3IgTFRSIG9y
IFJUTCBhY2NvcmRpbmdseS4KLSAgICBvcHRpb24uZGlyZWN0aW9uID0gby0+c3R5bGUoKS0+aXNM
ZWZ0VG9SaWdodERpcmVjdGlvbigpID8gUXQ6OkxlZnRUb1JpZ2h0IDogUXQ6OlJpZ2h0VG9MZWZ0
OwotCi0gICAgSW50UmVjdCBidXR0b25SZWN0ID0gcmVjdDsKLSAgICAvLyBEZWZhdWx0IHRvIG1v
dmluZyB0aGUgYnV0dG9ucyBhIGxpdHRsZSBiaXQgd2l0aGluIHRoZSBlZGl0b3IgZnJhbWUuCi0g
ICAgaW50IGluZmxhdGVYID0gLTI7Ci0gICAgaW50IGluZmxhdGVZID0gLTI7Ci0jaWYgZGVmaW5l
ZChRX1dTX01BQykgJiYgIWRlZmluZWQoUVRfTk9fU1RZTEVfTUFDKQotICAgIC8vIFFNYWNTdHls
ZSB3aWxsIHBvc2l0aW9uIHRoZSBhcXVhIGJ1dHRvbnMgZmx1c2ggdG8gdGhlIHJpZ2h0LgotICAg
IC8vIFRoaXMgd2lsbCBtb3ZlIHRoZW0gbW9yZSB3aXRoaW4gdGhlIGNvbnRyb2wgZm9yIGJldHRl
ciBzdHlsZSwgYSBsYQotICAgIC8vIENocm9taXVtIGxvb2sgJiBmZWVsLgotICAgIGlmIChxb2Jq
ZWN0X2Nhc3Q8UU1hY1N0eWxlKj4ocC5zdHlsZSkpIHsKLSAgICAgICAgaW5mbGF0ZVggPSAtNDsK
LSAgICAgICAgLy8gUmVuZGVyIG1pbmkgYXF1YSBzcGluIGJ1dHRvbnMgZm9yIFFNYWNTdHlsZSB0
byBmaXQgbmljZWx5IGludG8KLSAgICAgICAgLy8gdGhlIGVkaXRvciBhcmVhLCBsaWtlIENocm9t
aXVtLgotICAgICAgICBvcHRpb24uc3RhdGUgfD0gUVN0eWxlOjpTdGF0ZV9NaW5pOwotICAgIH0K
LSNlbmRpZgotI2lmICFkZWZpbmVkKFFUX05PX1NUWUxFX1BMQVNUSVFVRSkKLSAgICAvLyBRUGxh
c3RpcXVlU3R5bGUgbG9va3MgYmVzdCB3aGVuIHRoZSBzcGluIGJ1dHRvbnMgYXJlIGZsdXNoIHdp
dGggdGhlIGZyYW1lJ3MgZWRnZS4KLSAgICBpZiAocW9iamVjdF9jYXN0PFFQbGFzdGlxdWVTdHls
ZSo+KHAuc3R5bGUpKSB7Ci0gICAgICAgIGluZmxhdGVYID0gMDsKLSAgICAgICAgaW5mbGF0ZVkg
PSAwOwotICAgIH0KLSNlbmRpZgotCi0gICAgYnV0dG9uUmVjdC5pbmZsYXRlWChpbmZsYXRlWCk7
Ci0gICAgYnV0dG9uUmVjdC5pbmZsYXRlWShpbmZsYXRlWSk7Ci0gICAgb3B0aW9uLnJlY3QgPSBi
dXR0b25SZWN0OwotCi0gICAgcC5kcmF3Q29tcGxleENvbnRyb2woUVN0eWxlOjpDQ19TcGluQm94
LCBvcHRpb24pOwotICAgIHJldHVybiBmYWxzZTsKLX0KLSNlbmRpZgotCi1Db250cm9sUGFydCBS
ZW5kZXJUaGVtZVFTdHlsZTo6aW5pdGlhbGl6ZUNvbW1vblFTdHlsZU9wdGlvbnMoUVN0eWxlT3B0
aW9uJiBvcHRpb24sIFJlbmRlck9iamVjdCogbykgY29uc3QKLXsKLSAgICAvLyBEZWZhdWx0IGJp
dHM6IG5vIGZvY3VzLCBubyBtb3VzZSBvdmVyCi0gICAgb3B0aW9uLnN0YXRlICY9IH4oUVN0eWxl
OjpTdGF0ZV9IYXNGb2N1cyB8IFFTdHlsZTo6U3RhdGVfTW91c2VPdmVyKTsKLQotICAgIGlmIChp
c1JlYWRPbmx5Q29udHJvbChvKSkKLSAgICAgICAgLy8gUmVhZG9ubHkgaXMgc3VwcG9ydGVkIG9u
IHRleHRmaWVsZHMuCi0gICAgICAgIG9wdGlvbi5zdGF0ZSB8PSBRU3R5bGU6OlN0YXRlX1JlYWRP
bmx5OwotCi0gICAgb3B0aW9uLmRpcmVjdGlvbiA9IFF0OjpMZWZ0VG9SaWdodDsKLQotICAgIGlm
IChpc0hvdmVyZWQobykpCi0gICAgICAgIG9wdGlvbi5zdGF0ZSB8PSBRU3R5bGU6OlN0YXRlX01v
dXNlT3ZlcjsKLQotICAgIHNldFBhbGV0dGVGcm9tUGFnZUNsaWVudElmRXhpc3RzKG9wdGlvbi5w
YWxldHRlKTsKLQotICAgIGlmICghaXNFbmFibGVkKG8pKSB7Ci0gICAgICAgIG9wdGlvbi5wYWxl
dHRlLnNldEN1cnJlbnRDb2xvckdyb3VwKFFQYWxldHRlOjpEaXNhYmxlZCk7Ci0gICAgICAgIG9w
dGlvbi5zdGF0ZSAmPSB+UVN0eWxlOjpTdGF0ZV9FbmFibGVkOwotICAgIH0KLQotICAgIFJlbmRl
clN0eWxlKiBzdHlsZSA9IG8tPnN0eWxlKCk7Ci0gICAgaWYgKCFzdHlsZSkKLSAgICAgICAgcmV0
dXJuIE5vQ29udHJvbFBhcnQ7Ci0KLSAgICBDb250cm9sUGFydCByZXN1bHQgPSBzdHlsZS0+YXBw
ZWFyYW5jZSgpOwotICAgIGlmIChzdXBwb3J0c0ZvY3VzKHJlc3VsdCkgJiYgaXNGb2N1c2VkKG8p
KSB7Ci0gICAgICAgIG9wdGlvbi5zdGF0ZSB8PSBRU3R5bGU6OlN0YXRlX0hhc0ZvY3VzOwotICAg
ICAgICBvcHRpb24uc3RhdGUgfD0gUVN0eWxlOjpTdGF0ZV9LZXlib2FyZEZvY3VzQ2hhbmdlOwot
ICAgIH0KLQotICAgIGlmIChzdHlsZS0+ZGlyZWN0aW9uKCkgPT0gV2ViQ29yZTo6UlRMKQotICAg
ICAgICBvcHRpb24uZGlyZWN0aW9uID0gUXQ6OlJpZ2h0VG9MZWZ0OwotCi0gICAgc3dpdGNoIChy
ZXN1bHQpIHsKLSAgICBjYXNlIFB1c2hCdXR0b25QYXJ0OgotICAgIGNhc2UgU3F1YXJlQnV0dG9u
UGFydDoKLSAgICBjYXNlIEJ1dHRvblBhcnQ6Ci0gICAgY2FzZSBCdXR0b25CZXZlbFBhcnQ6Ci0g
ICAgY2FzZSBMaXN0SXRlbVBhcnQ6Ci0gICAgY2FzZSBNZW51bGlzdEJ1dHRvblBhcnQ6Ci0gICAg
Y2FzZSBTZWFyY2hGaWVsZFJlc3VsdHNCdXR0b25QYXJ0OgotICAgIGNhc2UgU2VhcmNoRmllbGRD
YW5jZWxCdXR0b25QYXJ0OiB7Ci0gICAgICAgIGlmIChpc1ByZXNzZWQobykpCi0gICAgICAgICAg
ICBvcHRpb24uc3RhdGUgfD0gUVN0eWxlOjpTdGF0ZV9TdW5rZW47Ci0gICAgICAgIGVsc2UgaWYg
KHJlc3VsdCA9PSBQdXNoQnV0dG9uUGFydCB8fCByZXN1bHQgPT0gQnV0dG9uUGFydCkKLSAgICAg
ICAgICAgIG9wdGlvbi5zdGF0ZSB8PSBRU3R5bGU6OlN0YXRlX1JhaXNlZDsKLSAgICAgICAgYnJl
YWs7Ci0gICAgfQotICAgIGNhc2UgUmFkaW9QYXJ0OgotICAgIGNhc2UgQ2hlY2tib3hQYXJ0Ogot
ICAgICAgICBvcHRpb24uc3RhdGUgfD0gKGlzQ2hlY2tlZChvKSA/IFFTdHlsZTo6U3RhdGVfT24g
OiBRU3R5bGU6OlN0YXRlX09mZik7Ci0gICAgfQotCi0gICAgcmV0dXJuIHJlc3VsdDsKLX0KLQot
dm9pZCBSZW5kZXJUaGVtZVFTdHlsZTo6YWRqdXN0U2xpZGVyVGh1bWJTaXplKFJlbmRlclN0eWxl
KiBzdHlsZSwgRWxlbWVudCogZWxlbWVudCkgY29uc3QKLXsKLSAgICBjb25zdCBDb250cm9sUGFy
dCBwYXJ0ID0gc3R5bGUtPmFwcGVhcmFuY2UoKTsKLSAgICBpZiAocGFydCA9PSBTbGlkZXJUaHVt
Ykhvcml6b250YWxQYXJ0IHx8IHBhcnQgPT0gU2xpZGVyVGh1bWJWZXJ0aWNhbFBhcnQpIHsKLSAg
ICAgICAgUVN0eWxlT3B0aW9uU2xpZGVyIG9wdGlvbjsKLSAgICAgICAgaWYgKHBhcnQgPT0gU2xp
ZGVyVGh1bWJWZXJ0aWNhbFBhcnQpCi0gICAgICAgICAgICBvcHRpb24ub3JpZW50YXRpb24gPSBR
dDo6VmVydGljYWw7Ci0KLSAgICAgICAgUVN0eWxlKiBxc3R5bGUgPSBxU3R5bGUoKTsKLQotICAg
ICAgICBpbnQgbGVuZ3RoID0gcXN0eWxlLT5waXhlbE1ldHJpYyhRU3R5bGU6OlBNX1NsaWRlckxl
bmd0aCwgJm9wdGlvbik7Ci0gICAgICAgIGludCB0aGlja25lc3MgPSBxc3R5bGUtPnBpeGVsTWV0
cmljKFFTdHlsZTo6UE1fU2xpZGVyVGhpY2tuZXNzLCAmb3B0aW9uKTsKLSAgICAgICAgaWYgKG9w
dGlvbi5vcmllbnRhdGlvbiA9PSBRdDo6VmVydGljYWwpIHsKLSAgICAgICAgICAgIHN0eWxlLT5z
ZXRXaWR0aChMZW5ndGgodGhpY2tuZXNzLCBGaXhlZCkpOwotICAgICAgICAgICAgc3R5bGUtPnNl
dEhlaWdodChMZW5ndGgobGVuZ3RoLCBGaXhlZCkpOwotICAgICAgICB9IGVsc2UgewotICAgICAg
ICAgICAgc3R5bGUtPnNldFdpZHRoKExlbmd0aChsZW5ndGgsIEZpeGVkKSk7Ci0gICAgICAgICAg
ICBzdHlsZS0+c2V0SGVpZ2h0KExlbmd0aCh0aGlja25lc3MsIEZpeGVkKSk7Ci0gICAgICAgIH0K
LSAgICB9IGVsc2UKLSAgICAgICAgUmVuZGVyVGhlbWVRdDo6YWRqdXN0U2xpZGVyVGh1bWJTaXpl
KHN0eWxlLCBlbGVtZW50KTsKLX0KLQotfQotCi0vLyB2aW06IHRzPTQgc3c9NCBldApkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYktpdC9xdC9XZWJDb3JlU3VwcG9ydC9SZW5kZXJUaGVtZVFTdHlsZS5o
IGIvU291cmNlL1dlYktpdC9xdC9XZWJDb3JlU3VwcG9ydC9SZW5kZXJUaGVtZVFTdHlsZS5oCmRl
bGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyY2M5OTkzMDgwNDUwZjkzOTEyNzhkNDk4NzFl
NTcxOTI1ZDBlMWFmLi4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0t
LSBhL1NvdXJjZS9XZWJLaXQvcXQvV2ViQ29yZVN1cHBvcnQvUmVuZGVyVGhlbWVRU3R5bGUuaAor
KysgL2Rldi9udWxsCkBAIC0xLDE0OCArMCwwIEBACi0vKgotICogVGhpcyBmaWxlIGlzIHBhcnQg
b2YgdGhlIHRoZW1lIGltcGxlbWVudGF0aW9uIGZvciBmb3JtIGNvbnRyb2xzIGluIFdlYkNvcmUu
Ci0gKgotICogQ29weXJpZ2h0IChDKSAyMDExLTIwMTIgTm9raWEgQ29ycG9yYXRpb24gYW5kL29y
IGl0cyBzdWJzaWRpYXJ5KC1pZXMpLgotICoKLSAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3
YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKLSAqIG1vZGlmeSBpdCB1bmRlciB0
aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCi0gKiBMaWNlbnNlIGFz
IHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKLSAqIHZl
cnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVy
c2lvbi4KLSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhh
dCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91
dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklU
TkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQotICogTGlicmFyeSBH
ZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKgotICogWW91IHNob3Vs
ZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMg
TGljZW5zZQotICogYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5H
LkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KLSAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24s
IEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCi0gKiBCb3N0b24sIE1BIDAy
MTEwLTEzMDEsIFVTQS4KLSAqCi0gKi8KLSNpZm5kZWYgUmVuZGVyVGhlbWVRU3R5bGVfaAotI2Rl
ZmluZSBSZW5kZXJUaGVtZVFTdHlsZV9oCi0KLSNpbmNsdWRlICJSZW5kZXJUaGVtZVF0LmgiCi0K
LSNpbmNsdWRlIDxRU3R5bGU+Ci0KLVFUX0JFR0lOX05BTUVTUEFDRQotI2lmbmRlZiBRVF9OT19M
SU5FRURJVAotY2xhc3MgUUxpbmVFZGl0OwotI2VuZGlmCi1jbGFzcyBRUGFpbnRlcjsKLWNsYXNz
IFFXaWRnZXQ7Ci1RVF9FTkRfTkFNRVNQQUNFCi0KLW5hbWVzcGFjZSBXZWJDb3JlIHsKLQotY2xh
c3MgU2Nyb2xsYmFyVGhlbWVRU3R5bGU7Ci0KLWNsYXNzIFJlbmRlclRoZW1lUVN0eWxlIDogcHVi
bGljIFJlbmRlclRoZW1lUXQgewotcHJpdmF0ZToKLSAgICBSZW5kZXJUaGVtZVFTdHlsZShQYWdl
Kik7Ci0gICAgdmlydHVhbCB+UmVuZGVyVGhlbWVRU3R5bGUoKTsKLQotcHVibGljOgotICAgIHN0
YXRpYyBQYXNzUmVmUHRyPFJlbmRlclRoZW1lPiBjcmVhdGUoUGFnZSopOwotCi0gICAgdmlydHVh
bCB2b2lkIGFkanVzdFNsaWRlclRodW1iU2l6ZShSZW5kZXJTdHlsZSosIEVsZW1lbnQqKSBjb25z
dDsKLQotICAgIFFTdHlsZSogcVN0eWxlKCkgY29uc3Q7Ci0KLXByb3RlY3RlZDoKLSAgICB2aXJ0
dWFsIHZvaWQgYWRqdXN0QnV0dG9uU3R5bGUoU3R5bGVSZXNvbHZlciosIFJlbmRlclN0eWxlKiwg
RWxlbWVudCopIGNvbnN0OwotICAgIHZpcnR1YWwgYm9vbCBwYWludEJ1dHRvbihSZW5kZXJPYmpl
Y3QqLCBjb25zdCBQYWludEluZm8mLCBjb25zdCBJbnRSZWN0Jik7Ci0KLSAgICB2aXJ0dWFsIGJv
b2wgcGFpbnRUZXh0RmllbGQoUmVuZGVyT2JqZWN0KiwgY29uc3QgUGFpbnRJbmZvJiwgY29uc3Qg
SW50UmVjdCYpOwotCi0gICAgdmlydHVhbCBib29sIHBhaW50VGV4dEFyZWEoUmVuZGVyT2JqZWN0
KiwgY29uc3QgUGFpbnRJbmZvJiwgY29uc3QgSW50UmVjdCYpOwotICAgIHZpcnR1YWwgdm9pZCBh
ZGp1c3RUZXh0QXJlYVN0eWxlKFN0eWxlUmVzb2x2ZXIqLCBSZW5kZXJTdHlsZSosIEVsZW1lbnQq
KSBjb25zdDsKLQotICAgIHZpcnR1YWwgYm9vbCBwYWludE1lbnVMaXN0KFJlbmRlck9iamVjdCos
IGNvbnN0IFBhaW50SW5mbyYsIGNvbnN0IEludFJlY3QmKTsKLQotICAgIHZpcnR1YWwgYm9vbCBw
YWludE1lbnVMaXN0QnV0dG9uKFJlbmRlck9iamVjdCosIGNvbnN0IFBhaW50SW5mbyYsIGNvbnN0
IEludFJlY3QmKTsKLSAgICB2aXJ0dWFsIHZvaWQgYWRqdXN0TWVudUxpc3RCdXR0b25TdHlsZShT
dHlsZVJlc29sdmVyKiwgUmVuZGVyU3R5bGUqLCBFbGVtZW50KikgY29uc3Q7Ci0KLSNpZiBFTkFC
TEUoUFJPR1JFU1NfRUxFTUVOVCkKLSAgICAvLyBSZXR1cm5zIHRoZSBkdXJhdGlvbiBvZiB0aGUg
YW5pbWF0aW9uIGZvciB0aGUgcHJvZ3Jlc3MgYmFyLgotICAgIHZpcnR1YWwgZG91YmxlIGFuaW1h
dGlvbkR1cmF0aW9uRm9yUHJvZ3Jlc3NCYXIoUmVuZGVyUHJvZ3Jlc3MqKSBjb25zdDsKLSAgICB2
aXJ0dWFsIGJvb2wgcGFpbnRQcm9ncmVzc0JhcihSZW5kZXJPYmplY3QqLCBjb25zdCBQYWludElu
Zm8mLCBjb25zdCBJbnRSZWN0Jik7Ci0jZW5kaWYKLQotICAgIHZpcnR1YWwgYm9vbCBwYWludFNs
aWRlclRyYWNrKFJlbmRlck9iamVjdCosIGNvbnN0IFBhaW50SW5mbyYsIGNvbnN0IEludFJlY3Qm
KTsKLSAgICB2aXJ0dWFsIHZvaWQgYWRqdXN0U2xpZGVyVHJhY2tTdHlsZShTdHlsZVJlc29sdmVy
KiwgUmVuZGVyU3R5bGUqLCBFbGVtZW50KikgY29uc3Q7Ci0KLSAgICB2aXJ0dWFsIGJvb2wgcGFp
bnRTbGlkZXJUaHVtYihSZW5kZXJPYmplY3QqLCBjb25zdCBQYWludEluZm8mLCBjb25zdCBJbnRS
ZWN0Jik7Ci0gICAgdmlydHVhbCB2b2lkIGFkanVzdFNsaWRlclRodW1iU3R5bGUoU3R5bGVSZXNv
bHZlciosIFJlbmRlclN0eWxlKiwgRWxlbWVudCopIGNvbnN0OwotCi0gICAgdmlydHVhbCBib29s
IHBhaW50U2VhcmNoRmllbGQoUmVuZGVyT2JqZWN0KiwgY29uc3QgUGFpbnRJbmZvJiwgY29uc3Qg
SW50UmVjdCYpOwotCi0gICAgdmlydHVhbCB2b2lkIGFkanVzdFNlYXJjaEZpZWxkRGVjb3JhdGlv
blN0eWxlKFN0eWxlUmVzb2x2ZXIqLCBSZW5kZXJTdHlsZSosIEVsZW1lbnQqKSBjb25zdDsKLSAg
ICB2aXJ0dWFsIGJvb2wgcGFpbnRTZWFyY2hGaWVsZERlY29yYXRpb24oUmVuZGVyT2JqZWN0Kiwg
Y29uc3QgUGFpbnRJbmZvJiwgY29uc3QgSW50UmVjdCYpOwotCi0gICAgdmlydHVhbCB2b2lkIGFk
anVzdFNlYXJjaEZpZWxkUmVzdWx0c0RlY29yYXRpb25TdHlsZShTdHlsZVJlc29sdmVyKiwgUmVu
ZGVyU3R5bGUqLCBFbGVtZW50KikgY29uc3Q7Ci0gICAgdmlydHVhbCBib29sIHBhaW50U2VhcmNo
RmllbGRSZXN1bHRzRGVjb3JhdGlvbihSZW5kZXJPYmplY3QqLCBjb25zdCBQYWludEluZm8mLCBj
b25zdCBJbnRSZWN0Jik7Ci0KLSNpZm5kZWYgUVRfTk9fU1BJTkJPWAotICAgIHZpcnR1YWwgYm9v
bCBwYWludElubmVyU3BpbkJ1dHRvbihSZW5kZXJPYmplY3QqLCBjb25zdCBQYWludEluZm8mLCBj
b25zdCBJbnRSZWN0Jik7Ci0jZW5kaWYKLQotcHJvdGVjdGVkOgotICAgIHZpcnR1YWwgdm9pZCBj
b21wdXRlU2l6ZUJhc2VkT25TdHlsZShSZW5kZXJTdHlsZSopIGNvbnN0OwotCi0gICAgdmlydHVh
bCBRU2hhcmVkUG9pbnRlcjxTdHlsZVBhaW50ZXI+IGdldFN0eWxlUGFpbnRlcihjb25zdCBQYWlu
dEluZm8mKTsKLQotICAgIHZpcnR1YWwgUVJlY3QgaW5mbGF0ZUJ1dHRvblJlY3QoY29uc3QgUVJl
Y3QmIG9yaWdpbmFsUmVjdCkgY29uc3Q7Ci0KLSAgICB2aXJ0dWFsIHZvaWQgc2V0UG9wdXBQYWRk
aW5nKFJlbmRlclN0eWxlKikgY29uc3Q7Ci0KLSAgICB2aXJ0dWFsIFFQYWxldHRlIGNvbG9yUGFs
ZXR0ZSgpIGNvbnN0OwotCi1wcml2YXRlOgotICAgIENvbnRyb2xQYXJ0IGluaXRpYWxpemVDb21t
b25RU3R5bGVPcHRpb25zKFFTdHlsZU9wdGlvbiYsIFJlbmRlck9iamVjdCopIGNvbnN0OwotCi0g
ICAgdm9pZCBzZXRCdXR0b25QYWRkaW5nKFJlbmRlclN0eWxlKikgY29uc3Q7Ci0KLSAgICBpbnQg
ZmluZEZyYW1lTGluZVdpZHRoKFFTdHlsZSopIGNvbnN0OwotCi0gICAgUVN0eWxlKiBmYWxsYmFj
a1N0eWxlKCkgY29uc3Q7Ci0KLSAgICB2b2lkIHNldFBhbGV0dGVGcm9tUGFnZUNsaWVudElmRXhp
c3RzKFFQYWxldHRlJikgY29uc3Q7Ci0KLSNpZmRlZiBRX09TX01BQwotICAgIGludCBtX2J1dHRv
bkZvbnRQaXhlbFNpemU7Ci0jZW5kaWYKLQotICAgIFFTdHlsZSogbV9mYWxsYmFja1N0eWxlOwot
I2lmbmRlZiBRVF9OT19MSU5FRURJVAotICAgIG11dGFibGUgUUxpbmVFZGl0KiBtX2xpbmVFZGl0
OwotI2VuZGlmCi19OwotCi1jbGFzcyBTdHlsZVBhaW50ZXJRU3R5bGUgOiBwdWJsaWMgU3R5bGVQ
YWludGVyIHsKLXB1YmxpYzoKLSAgICBleHBsaWNpdCBTdHlsZVBhaW50ZXJRU3R5bGUoUmVuZGVy
VGhlbWVRU3R5bGUqLCBjb25zdCBQYWludEluZm8mKTsKLSAgICBleHBsaWNpdCBTdHlsZVBhaW50
ZXJRU3R5bGUoU2Nyb2xsYmFyVGhlbWVRU3R5bGUqLCBHcmFwaGljc0NvbnRleHQqKTsKLQotICAg
IGJvb2wgaXNWYWxpZCgpIGNvbnN0IHsgcmV0dXJuIHN0eWxlICYmIFN0eWxlUGFpbnRlcjo6aXNW
YWxpZCgpOyB9Ci0KLSAgICBRV2lkZ2V0KiB3aWRnZXQ7Ci0gICAgUVN0eWxlKiBzdHlsZTsKLQot
ICAgIHZvaWQgZHJhd1ByaW1pdGl2ZShRU3R5bGU6OlByaW1pdGl2ZUVsZW1lbnQgcGUsIGNvbnN0
IFFTdHlsZU9wdGlvbiYgb3B0KQotICAgIHsgc3R5bGUtPmRyYXdQcmltaXRpdmUocGUsICZvcHQs
IHBhaW50ZXIsIHdpZGdldCk7IH0KLSAgICB2b2lkIGRyYXdDb250cm9sKFFTdHlsZTo6Q29udHJv
bEVsZW1lbnQgY2UsIGNvbnN0IFFTdHlsZU9wdGlvbiYgb3B0KQotICAgIHsgc3R5bGUtPmRyYXdD
b250cm9sKGNlLCAmb3B0LCBwYWludGVyLCB3aWRnZXQpOyB9Ci0gICAgdm9pZCBkcmF3Q29tcGxl
eENvbnRyb2woUVN0eWxlOjpDb21wbGV4Q29udHJvbCBjYywgY29uc3QgUVN0eWxlT3B0aW9uQ29t
cGxleCYgb3B0KQotICAgIHsgc3R5bGUtPmRyYXdDb21wbGV4Q29udHJvbChjYywgJm9wdCwgcGFp
bnRlciwgd2lkZ2V0KTsgfQotCi1wcml2YXRlOgotICAgIHZvaWQgaW5pdChHcmFwaGljc0NvbnRl
eHQqLCBRU3R5bGUqKTsKLQotICAgIFFfRElTQUJMRV9DT1BZKFN0eWxlUGFpbnRlclFTdHlsZSkK
LX07Ci0KLX0KLQotI2VuZGlmIC8vIFJlbmRlclRoZW1lUVN0eWxlX2gKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJLaXQvcXQvV2ViQ29yZVN1cHBvcnQvU2Nyb2xsYmFyVGhlbWVRU3R5bGUuY3BwIGIv
U291cmNlL1dlYktpdC9xdC9XZWJDb3JlU3VwcG9ydC9TY3JvbGxiYXJUaGVtZVFTdHlsZS5jcHAK
ZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGIwODI3ZmVhNGUwOTIyMGYwYWEzOTJhN2E1
ZDlkYzRjM2E2NjhiZTMuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAK
LS0tIGEvU291cmNlL1dlYktpdC9xdC9XZWJDb3JlU3VwcG9ydC9TY3JvbGxiYXJUaGVtZVFTdHls
ZS5jcHAKKysrIC9kZXYvbnVsbApAQCAtMSwyNTMgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAo
QykgMjAwNywgMjAwOCBBcHBsZSBJbmMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCi0gKiBDb3B5cmln
aHQgKEMpIDIwMDcgU3RhaWtvcyBDb21wdXRpbmcgU2VydmljZXMgSW5jLiA8aW5mb0BzdGFpa29z
Lm5ldD4KLSAqIENvcHlyaWdodCAoQykgMjAwOCBOb2tpYSBDb3Jwb3JhdGlvbiBhbmQvb3IgaXRz
IHN1YnNpZGlhcnkoLWllcykKLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJj
ZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJl
IHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJl
IG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0
aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4g
YmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
IGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3Zp
ZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJ
REVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKLSAqIEVYUFJFU1MgT1IgSU1QTElF
RCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCi0gKiBJTVBM
SUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJ
Q1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBM
RSBJTkMuIE9SCi0gKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJ
UkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKLSAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElB
TCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFBST0NVUkVNRU5U
IE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgot
ICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQg
T04gQU5ZIFRIRU9SWQotICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJ
Q1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJX
SVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLSAqIE9GIFRISVMgU09GVFdB
UkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0g
Ki8KLQotI2luY2x1ZGUgImNvbmZpZy5oIgotI2luY2x1ZGUgIlNjcm9sbGJhclRoZW1lUVN0eWxl
LmgiCi0KLSNpbmNsdWRlICJHcmFwaGljc0NvbnRleHQuaCIKLSNpbmNsdWRlICJQbGF0Zm9ybU1v
dXNlRXZlbnQuaCIKLSNpbmNsdWRlICJSZW5kZXJUaGVtZVFTdHlsZS5oIgotI2luY2x1ZGUgIlJl
bmRlclRoZW1lUXRNb2JpbGUuaCIKLSNpbmNsdWRlICJTY3JvbGxWaWV3LmgiCi0jaW5jbHVkZSAi
U2Nyb2xsYmFyLmgiCi0KLSNpbmNsdWRlIDxRQXBwbGljYXRpb24+Ci0jaWZkZWYgUV9XU19NQUMK
LSNpbmNsdWRlIDxRTWFjU3R5bGU+Ci0jZW5kaWYKLSNpbmNsdWRlIDxRTWVudT4KLSNpbmNsdWRl
IDxRUGFpbnRlcj4KLSNpbmNsdWRlIDxRU3R5bGU+Ci0jaW5jbHVkZSA8UVN0eWxlT3B0aW9uU2xp
ZGVyPgotCi1uYW1lc3BhY2UgV2ViQ29yZSB7Ci0KLVNjcm9sbGJhclRoZW1lUVN0eWxlOjp+U2Ny
b2xsYmFyVGhlbWVRU3R5bGUoKQotewotfQotCi1zdGF0aWMgUVN0eWxlOjpTdWJDb250cm9sIHNj
UGFydChjb25zdCBTY3JvbGxiYXJQYXJ0JiBwYXJ0KQotewotICAgIHN3aXRjaCAocGFydCkgewot
ICAgIGNhc2UgTm9QYXJ0OgotICAgICAgICByZXR1cm4gUVN0eWxlOjpTQ19Ob25lOwotICAgIGNh
c2UgQmFja0J1dHRvblN0YXJ0UGFydDoKLSAgICBjYXNlIEJhY2tCdXR0b25FbmRQYXJ0OgotICAg
ICAgICByZXR1cm4gUVN0eWxlOjpTQ19TY3JvbGxCYXJTdWJMaW5lOwotICAgIGNhc2UgQmFja1Ry
YWNrUGFydDoKLSAgICAgICAgcmV0dXJuIFFTdHlsZTo6U0NfU2Nyb2xsQmFyU3ViUGFnZTsKLSAg
ICBjYXNlIFRodW1iUGFydDoKLSAgICAgICAgcmV0dXJuIFFTdHlsZTo6U0NfU2Nyb2xsQmFyU2xp
ZGVyOwotICAgIGNhc2UgRm9yd2FyZFRyYWNrUGFydDoKLSAgICAgICAgcmV0dXJuIFFTdHlsZTo6
U0NfU2Nyb2xsQmFyQWRkUGFnZTsKLSAgICBjYXNlIEZvcndhcmRCdXR0b25TdGFydFBhcnQ6Ci0g
ICAgY2FzZSBGb3J3YXJkQnV0dG9uRW5kUGFydDoKLSAgICAgICAgcmV0dXJuIFFTdHlsZTo6U0Nf
U2Nyb2xsQmFyQWRkTGluZTsKLSAgICB9Ci0KLSAgICByZXR1cm4gUVN0eWxlOjpTQ19Ob25lOwot
fQotCi1zdGF0aWMgU2Nyb2xsYmFyUGFydCBzY3JvbGxiYXJQYXJ0KGNvbnN0IFFTdHlsZTo6U3Vi
Q29udHJvbCYgc2MpCi17Ci0gICAgc3dpdGNoIChzYykgewotICAgIGNhc2UgUVN0eWxlOjpTQ19O
b25lOgotICAgICAgICByZXR1cm4gTm9QYXJ0OwotICAgIGNhc2UgUVN0eWxlOjpTQ19TY3JvbGxC
YXJTdWJMaW5lOgotICAgICAgICByZXR1cm4gQmFja0J1dHRvblN0YXJ0UGFydDsKLSAgICBjYXNl
IFFTdHlsZTo6U0NfU2Nyb2xsQmFyU3ViUGFnZToKLSAgICAgICAgcmV0dXJuIEJhY2tUcmFja1Bh
cnQ7Ci0gICAgY2FzZSBRU3R5bGU6OlNDX1Njcm9sbEJhclNsaWRlcjoKLSAgICAgICAgcmV0dXJu
IFRodW1iUGFydDsKLSAgICBjYXNlIFFTdHlsZTo6U0NfU2Nyb2xsQmFyQWRkUGFnZToKLSAgICAg
ICAgcmV0dXJuIEZvcndhcmRUcmFja1BhcnQ7Ci0gICAgY2FzZSBRU3R5bGU6OlNDX1Njcm9sbEJh
ckFkZExpbmU6Ci0gICAgICAgIHJldHVybiBGb3J3YXJkQnV0dG9uU3RhcnRQYXJ0OwotICAgIH0K
LSAgICByZXR1cm4gTm9QYXJ0OwotfQotCi1zdGF0aWMgUVN0eWxlT3B0aW9uU2xpZGVyKiBzdHls
ZU9wdGlvblNsaWRlcihTY3JvbGxiYXJUaGVtZUNsaWVudCogc2Nyb2xsYmFyLCBRV2lkZ2V0KiB3
aWRnZXQgPSAwKQotewotICAgIHN0YXRpYyBRU3R5bGVPcHRpb25TbGlkZXIgb3B0OwotICAgIGlm
ICh3aWRnZXQpCi0gICAgICAgIG9wdC5pbml0RnJvbSh3aWRnZXQpOwotICAgIGVsc2UKLSAgICAg
ICAgb3B0LnN0YXRlIHw9IFFTdHlsZTo6U3RhdGVfQWN0aXZlOwotCi0gICAgb3B0LnN0YXRlICY9
IH5RU3R5bGU6OlN0YXRlX0hhc0ZvY3VzOwotCi0gICAgb3B0LnJlY3QgPSBzY3JvbGxiYXItPmZy
YW1lUmVjdCgpOwotICAgIGlmIChzY3JvbGxiYXItPmVuYWJsZWQoKSkKLSAgICAgICAgb3B0LnN0
YXRlIHw9IFFTdHlsZTo6U3RhdGVfRW5hYmxlZDsKLSAgICBpZiAoc2Nyb2xsYmFyLT5jb250cm9s
U2l6ZSgpICE9IFJlZ3VsYXJTY3JvbGxiYXIpCi0gICAgICAgIG9wdC5zdGF0ZSB8PSBRU3R5bGU6
OlN0YXRlX01pbmk7Ci0gICAgb3B0Lm9yaWVudGF0aW9uID0gKHNjcm9sbGJhci0+b3JpZW50YXRp
b24oKSA9PSBWZXJ0aWNhbFNjcm9sbGJhcikgPyBRdDo6VmVydGljYWwgOiBRdDo6SG9yaXpvbnRh
bDsKLQotICAgIGlmIChzY3JvbGxiYXItPm9yaWVudGF0aW9uKCkgPT0gSG9yaXpvbnRhbFNjcm9s
bGJhcikKLSAgICAgICAgb3B0LnN0YXRlIHw9IFFTdHlsZTo6U3RhdGVfSG9yaXpvbnRhbDsKLSAg
ICBlbHNlCi0gICAgICAgIG9wdC5zdGF0ZSAmPSB+UVN0eWxlOjpTdGF0ZV9Ib3Jpem9udGFsOwot
Ci0gICAgb3B0LnNsaWRlclZhbHVlID0gc2Nyb2xsYmFyLT52YWx1ZSgpOwotICAgIG9wdC5zbGlk
ZXJQb3NpdGlvbiA9IG9wdC5zbGlkZXJWYWx1ZTsKLSAgICBvcHQucGFnZVN0ZXAgPSBzY3JvbGxi
YXItPnBhZ2VTdGVwKCk7Ci0gICAgb3B0LnNpbmdsZVN0ZXAgPSBzY3JvbGxiYXItPmxpbmVTdGVw
KCk7Ci0gICAgb3B0Lm1pbmltdW0gPSAwOwotICAgIG9wdC5tYXhpbXVtID0gcU1heCgwLCBzY3Jv
bGxiYXItPm1heGltdW0oKSk7Ci0gICAgU2Nyb2xsYmFyUGFydCBwcmVzc2VkUGFydCA9IHNjcm9s
bGJhci0+cHJlc3NlZFBhcnQoKTsKLSAgICBTY3JvbGxiYXJQYXJ0IGhvdmVyZWRQYXJ0ID0gc2Ny
b2xsYmFyLT5ob3ZlcmVkUGFydCgpOwotICAgIGlmIChwcmVzc2VkUGFydCAhPSBOb1BhcnQpIHsK
LSAgICAgICAgb3B0LmFjdGl2ZVN1YkNvbnRyb2xzID0gc2NQYXJ0KHNjcm9sbGJhci0+cHJlc3Nl
ZFBhcnQoKSk7Ci0gICAgICAgIGlmIChwcmVzc2VkUGFydCA9PSBCYWNrQnV0dG9uU3RhcnRQYXJ0
IHx8IHByZXNzZWRQYXJ0ID09IEZvcndhcmRCdXR0b25TdGFydFBhcnQKLSAgICAgICAgICAgIHx8
IHByZXNzZWRQYXJ0ID09IEJhY2tCdXR0b25FbmRQYXJ0IHx8IHByZXNzZWRQYXJ0ID09IEZvcndh
cmRCdXR0b25FbmRQYXJ0Ci0gICAgICAgICAgICB8fCBwcmVzc2VkUGFydCA9PSBUaHVtYlBhcnQp
Ci0gICAgICAgICAgICBvcHQuc3RhdGUgfD0gUVN0eWxlOjpTdGF0ZV9TdW5rZW47Ci0gICAgfSBl
bHNlCi0gICAgICAgIG9wdC5hY3RpdmVTdWJDb250cm9scyA9IHNjUGFydChob3ZlcmVkUGFydCk7
Ci0gICAgaWYgKGhvdmVyZWRQYXJ0ICE9IE5vUGFydCkKLSAgICAgICAgb3B0LnN0YXRlIHw9IFFT
dHlsZTo6U3RhdGVfTW91c2VPdmVyOwotICAgIHJldHVybiAmb3B0OwotfQotCi1ib29sIFNjcm9s
bGJhclRoZW1lUVN0eWxlOjpwYWludChTY3JvbGxiYXJUaGVtZUNsaWVudCogc2Nyb2xsYmFyLCBH
cmFwaGljc0NvbnRleHQqIGdyYXBoaWNzQ29udGV4dCwgY29uc3QgSW50UmVjdCYgZGlydHlSZWN0
KQotewotICAgIGlmIChncmFwaGljc0NvbnRleHQtPnVwZGF0aW5nQ29udHJvbFRpbnRzKCkpIHsK
LSAgICAgICBzY3JvbGxiYXItPmludmFsaWRhdGVSZWN0KGRpcnR5UmVjdCk7Ci0gICAgICAgcmV0
dXJuIGZhbHNlOwotICAgIH0KLQotICAgIFN0eWxlUGFpbnRlclFTdHlsZSBwKHRoaXMsIGdyYXBo
aWNzQ29udGV4dCk7Ci0gICAgaWYgKCFwLmlzVmFsaWQoKSkKLSAgICAgIHJldHVybiB0cnVlOwot
Ci0gICAgcC5wYWludGVyLT5zYXZlKCk7Ci0gICAgUVN0eWxlT3B0aW9uU2xpZGVyKiBvcHQgPSBz
dHlsZU9wdGlvblNsaWRlcihzY3JvbGxiYXIsIHAud2lkZ2V0KTsKLQotICAgIHAucGFpbnRlci0+
c2V0Q2xpcFJlY3Qob3B0LT5yZWN0LmludGVyc2VjdGVkKGRpcnR5UmVjdCksIFF0OjpJbnRlcnNl
Y3RDbGlwKTsKLQotI2lmZGVmIFFfV1NfTUFDCi0gICAgLy8gRklYTUU6IFdlIGFsc28gbmVlZCB0
byBjaGVjayB0aGUgd2lkZ2V0IHN0eWxlIGJ1dCB0b2RheSBTY3JvbGxiYXJUaGVtZSBpcyBub3Qg
YXdhcmUgb2YgdGhlIHBhZ2Ugc28gd2UKLSAgICAvLyBjYW4ndCBnZXQgdGhlIHdpZGdldC4KLSAg
ICBpZiAocW9iamVjdF9jYXN0PFFNYWNTdHlsZSo+KHN0eWxlKCkpKQotICAgICAgICBwLmRyYXdD
b21wbGV4Q29udHJvbChRU3R5bGU6OkNDX1Njcm9sbEJhciwgKm9wdCk7Ci0gICAgZWxzZQotI2Vu
ZGlmCi0gICAgewotICAgICAgICAvLyBUaGUgUVN0eWxlIGV4cGVjdHMgdGhlIGJhY2tncm91bmQg
dG8gYmUgYWxyZWFkeSBmaWxsZWQuCi0gICAgICAgIHAucGFpbnRlci0+ZmlsbFJlY3Qob3B0LT5y
ZWN0LCBvcHQtPnBhbGV0dGUuYmFja2dyb3VuZCgpKTsKLQotICAgICAgICBjb25zdCBRUG9pbnQg
dG9wTGVmdCA9IG9wdC0+cmVjdC50b3BMZWZ0KCk7Ci0gICAgICAgIHAucGFpbnRlci0+dHJhbnNs
YXRlKHRvcExlZnQpOwotICAgICAgICBvcHQtPnJlY3QubW92ZVRvKFFQb2ludCgwLCAwKSk7Ci0g
ICAgICAgIHAuZHJhd0NvbXBsZXhDb250cm9sKFFTdHlsZTo6Q0NfU2Nyb2xsQmFyLCAqb3B0KTsK
LSAgICAgICAgb3B0LT5yZWN0Lm1vdmVUbyh0b3BMZWZ0KTsKLSAgICB9Ci0gICAgcC5wYWludGVy
LT5yZXN0b3JlKCk7Ci0KLSAgICByZXR1cm4gdHJ1ZTsKLX0KLQotU2Nyb2xsYmFyUGFydCBTY3Jv
bGxiYXJUaGVtZVFTdHlsZTo6aGl0VGVzdChTY3JvbGxiYXJUaGVtZUNsaWVudCogc2Nyb2xsYmFy
LCBjb25zdCBQbGF0Zm9ybU1vdXNlRXZlbnQmIGV2dCkKLXsKLSAgICBRU3R5bGVPcHRpb25TbGlk
ZXIqIG9wdCA9IHN0eWxlT3B0aW9uU2xpZGVyKHNjcm9sbGJhcik7Ci0gICAgY29uc3QgUVBvaW50
IHBvcyA9IHNjcm9sbGJhci0+Y29udmVydEZyb21Db250YWluaW5nV2luZG93KGV2dC5wb3NpdGlv
bigpKTsKLSAgICBvcHQtPnJlY3QubW92ZVRvKFFQb2ludCgwLCAwKSk7Ci0gICAgUVN0eWxlOjpT
dWJDb250cm9sIHNjID0gc3R5bGUoKS0+aGl0VGVzdENvbXBsZXhDb250cm9sKFFTdHlsZTo6Q0Nf
U2Nyb2xsQmFyLCBvcHQsIHBvcywgMCk7Ci0gICAgcmV0dXJuIHNjcm9sbGJhclBhcnQoc2MpOwot
fQotCi1ib29sIFNjcm9sbGJhclRoZW1lUVN0eWxlOjpzaG91bGRDZW50ZXJPblRodW1iKFNjcm9s
bGJhclRoZW1lQ2xpZW50KiwgY29uc3QgUGxhdGZvcm1Nb3VzZUV2ZW50JiBldnQpCi17Ci0gICAg
Ly8gTWlkZGxlIGNsaWNrIGNlbnRlcnMgc2xpZGVyIHRodW1iIChpZiBzdXBwb3J0ZWQpLgotICAg
IHJldHVybiBzdHlsZSgpLT5zdHlsZUhpbnQoUVN0eWxlOjpTSF9TY3JvbGxCYXJfTWlkZGxlQ2xp
Y2tBYnNvbHV0ZVBvc2l0aW9uKSAmJiBldnQuYnV0dG9uKCkgPT0gTWlkZGxlQnV0dG9uOwotfQot
Ci12b2lkIFNjcm9sbGJhclRoZW1lUVN0eWxlOjppbnZhbGlkYXRlUGFydChTY3JvbGxiYXJUaGVt
ZUNsaWVudCogc2Nyb2xsYmFyLCBTY3JvbGxiYXJQYXJ0KQotewotICAgIC8vIEZJWE1FOiBEbyBt
b3JlIHByZWNpc2UgaW52YWxpZGF0aW9uLgotICAgIHNjcm9sbGJhci0+aW52YWxpZGF0ZSgpOwot
fQotCi1pbnQgU2Nyb2xsYmFyVGhlbWVRU3R5bGU6OnNjcm9sbGJhclRoaWNrbmVzcyhTY3JvbGxi
YXJDb250cm9sU2l6ZSBjb250cm9sU2l6ZSkKLXsKLSAgICBRU3R5bGVPcHRpb25TbGlkZXIgbzsK
LSAgICBvLm9yaWVudGF0aW9uID0gUXQ6OlZlcnRpY2FsOwotICAgIG8uc3RhdGUgJj0gflFTdHls
ZTo6U3RhdGVfSG9yaXpvbnRhbDsKLSAgICBpZiAoY29udHJvbFNpemUgIT0gUmVndWxhclNjcm9s
bGJhcikKLSAgICAgICAgby5zdGF0ZSB8PSBRU3R5bGU6OlN0YXRlX01pbmk7Ci0gICAgcmV0dXJu
IHN0eWxlKCktPnBpeGVsTWV0cmljKFFTdHlsZTo6UE1fU2Nyb2xsQmFyRXh0ZW50LCAmbywgMCk7
Ci19Ci0KLWludCBTY3JvbGxiYXJUaGVtZVFTdHlsZTo6dGh1bWJQb3NpdGlvbihTY3JvbGxiYXJU
aGVtZUNsaWVudCogc2Nyb2xsYmFyKQotewotICAgIGlmIChzY3JvbGxiYXItPmVuYWJsZWQoKSkg
ewotICAgICAgICBmbG9hdCBwb3MgPSAoZmxvYXQpc2Nyb2xsYmFyLT5jdXJyZW50UG9zKCkgKiAo
dHJhY2tMZW5ndGgoc2Nyb2xsYmFyKSAtIHRodW1iTGVuZ3RoKHNjcm9sbGJhcikpIC8gc2Nyb2xs
YmFyLT5tYXhpbXVtKCk7Ci0gICAgICAgIHJldHVybiAocG9zIDwgMSAmJiBwb3MgPiAwKSA/IDEg
OiBwb3M7Ci0gICAgfQotICAgIHJldHVybiAwOwotfQotCi1pbnQgU2Nyb2xsYmFyVGhlbWVRU3R5
bGU6OnRodW1iTGVuZ3RoKFNjcm9sbGJhclRoZW1lQ2xpZW50KiBzY3JvbGxiYXIpCi17Ci0gICAg
UVN0eWxlT3B0aW9uU2xpZGVyKiBvcHQgPSBzdHlsZU9wdGlvblNsaWRlcihzY3JvbGxiYXIpOwot
ICAgIEludFJlY3QgdGh1bWIgPSBzdHlsZSgpLT5zdWJDb250cm9sUmVjdChRU3R5bGU6OkNDX1Nj
cm9sbEJhciwgb3B0LCBRU3R5bGU6OlNDX1Njcm9sbEJhclNsaWRlciwgMCk7Ci0gICAgcmV0dXJu
IHNjcm9sbGJhci0+b3JpZW50YXRpb24oKSA9PSBIb3Jpem9udGFsU2Nyb2xsYmFyID8gdGh1bWIu
d2lkdGgoKSA6IHRodW1iLmhlaWdodCgpOwotfQotCi1pbnQgU2Nyb2xsYmFyVGhlbWVRU3R5bGU6
OnRyYWNrUG9zaXRpb24oU2Nyb2xsYmFyVGhlbWVDbGllbnQqIHNjcm9sbGJhcikKLXsKLSAgICBR
U3R5bGVPcHRpb25TbGlkZXIqIG9wdCA9IHN0eWxlT3B0aW9uU2xpZGVyKHNjcm9sbGJhcik7Ci0g
ICAgSW50UmVjdCB0cmFjayA9IHN0eWxlKCktPnN1YkNvbnRyb2xSZWN0KFFTdHlsZTo6Q0NfU2Ny
b2xsQmFyLCBvcHQsIFFTdHlsZTo6U0NfU2Nyb2xsQmFyR3Jvb3ZlLCAwKTsKLSAgICByZXR1cm4g
c2Nyb2xsYmFyLT5vcmllbnRhdGlvbigpID09IEhvcml6b250YWxTY3JvbGxiYXIgPyB0cmFjay54
KCkgLSBzY3JvbGxiYXItPngoKSA6IHRyYWNrLnkoKSAtIHNjcm9sbGJhci0+eSgpOwotfQotCi1p
bnQgU2Nyb2xsYmFyVGhlbWVRU3R5bGU6OnRyYWNrTGVuZ3RoKFNjcm9sbGJhclRoZW1lQ2xpZW50
KiBzY3JvbGxiYXIpCi17Ci0gICAgUVN0eWxlT3B0aW9uU2xpZGVyKiBvcHQgPSBzdHlsZU9wdGlv
blNsaWRlcihzY3JvbGxiYXIpOwotICAgIEludFJlY3QgdHJhY2sgPSBzdHlsZSgpLT5zdWJDb250
cm9sUmVjdChRU3R5bGU6OkNDX1Njcm9sbEJhciwgb3B0LCBRU3R5bGU6OlNDX1Njcm9sbEJhckdy
b292ZSwgMCk7Ci0gICAgcmV0dXJuIHNjcm9sbGJhci0+b3JpZW50YXRpb24oKSA9PSBIb3Jpem9u
dGFsU2Nyb2xsYmFyID8gdHJhY2sud2lkdGgoKSA6IHRyYWNrLmhlaWdodCgpOwotfQotCi12b2lk
IFNjcm9sbGJhclRoZW1lUVN0eWxlOjpwYWludFNjcm9sbENvcm5lcihTY3JvbGxWaWV3KiwgR3Jh
cGhpY3NDb250ZXh0KiBjb250ZXh0LCBjb25zdCBJbnRSZWN0JiByZWN0KQotewotICAgIFN0eWxl
UGFpbnRlclFTdHlsZSBwKHRoaXMsIGNvbnRleHQpOwotICAgIGlmICghcC5pc1ZhbGlkKCkpCi0g
ICAgICAgIHJldHVybjsKLQotICAgIFFTdHlsZU9wdGlvbiBvcHRpb247Ci0gICAgb3B0aW9uLnJl
Y3QgPSByZWN0OwotICAgIHAuZHJhd1ByaW1pdGl2ZShRU3R5bGU6OlBFX1BhbmVsU2Nyb2xsQXJl
YUNvcm5lciwgb3B0aW9uKTsKLX0KLQotUVN0eWxlKiBTY3JvbGxiYXJUaGVtZVFTdHlsZTo6c3R5
bGUoKSBjb25zdAotewotICAgIHJldHVybiBRQXBwbGljYXRpb246OnN0eWxlKCk7Ci19Ci0KLX0K
LQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9xdC9XZWJDb3JlU3VwcG9ydC9TY3JvbGxiYXJU
aGVtZVFTdHlsZS5oIGIvU291cmNlL1dlYktpdC9xdC9XZWJDb3JlU3VwcG9ydC9TY3JvbGxiYXJU
aGVtZVFTdHlsZS5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyNTM3YjlhZTQ0YjQ1
OGRkNzAyMjVhMDVlMDNkYmExYzcyYTNkZGUwLi4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJLaXQvcXQvV2ViQ29yZVN1cHBvcnQvU2Nyb2xs
YmFyVGhlbWVRU3R5bGUuaAorKysgL2Rldi9udWxsCkBAIC0xLDYzICswLDAgQEAKLS8qCi0gKiBD
b3B5cmlnaHQgKEMpIDIwMDggQXBwbGUgSW5jLiBBbGwgUmlnaHRzIFJlc2VydmVkLgotICoKLSAq
IFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGgg
b3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQg
dGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRp
b25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVj
ZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0
aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9u
LgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElT
JycgQU5EIEFOWQotICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKLSAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFO
VEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElT
Q0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKLSAqIENPTlRSSUJVVE9S
UyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFM
LAotICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLAotICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBT
RVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCi0gKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJ
TlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCi0gKiBPRiBMSUFC
SUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAq
IChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBP
VVQgT0YgVEhFIFVTRQotICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRI
RSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0jaWZuZGVmIFNjcm9sbGJhclRo
ZW1lUVN0eWxlX2gKLSNkZWZpbmUgU2Nyb2xsYmFyVGhlbWVRU3R5bGVfaAotCi0jaW5jbHVkZSAi
U2Nyb2xsYmFyVGhlbWUuaCIKLQotI2luY2x1ZGUgPFF0Q29yZS9xZ2xvYmFsLmg+Ci0KLVFUX0JF
R0lOX05BTUVTUEFDRQotY2xhc3MgUVN0eWxlOwotUVRfRU5EX05BTUVTUEFDRQotCi1uYW1lc3Bh
Y2UgV2ViQ29yZSB7Ci0KLWNsYXNzIFNjcm9sbGJhclRoZW1lUVN0eWxlIDogcHVibGljIFNjcm9s
bGJhclRoZW1lIHsKLXB1YmxpYzoKLSAgICB2aXJ0dWFsIH5TY3JvbGxiYXJUaGVtZVFTdHlsZSgp
OwotCi0gICAgdmlydHVhbCBib29sIHBhaW50KFNjcm9sbGJhclRoZW1lQ2xpZW50KiwgR3JhcGhp
Y3NDb250ZXh0KiwgY29uc3QgSW50UmVjdCYgZGlydHlSZWN0KTsKLSAgICB2aXJ0dWFsIHZvaWQg
cGFpbnRTY3JvbGxDb3JuZXIoU2Nyb2xsVmlldyosIEdyYXBoaWNzQ29udGV4dCosIGNvbnN0IElu
dFJlY3QmIGNvcm5lclJlY3QpOwotCi0gICAgdmlydHVhbCBTY3JvbGxiYXJQYXJ0IGhpdFRlc3Qo
U2Nyb2xsYmFyVGhlbWVDbGllbnQqLCBjb25zdCBQbGF0Zm9ybU1vdXNlRXZlbnQmKTsKLQotICAg
IHZpcnR1YWwgYm9vbCBzaG91bGRDZW50ZXJPblRodW1iKFNjcm9sbGJhclRoZW1lQ2xpZW50Kiwg
Y29uc3QgUGxhdGZvcm1Nb3VzZUV2ZW50Jik7Ci0KLSAgICB2aXJ0dWFsIHZvaWQgaW52YWxpZGF0
ZVBhcnQoU2Nyb2xsYmFyVGhlbWVDbGllbnQqLCBTY3JvbGxiYXJQYXJ0KTsKLQotICAgIHZpcnR1
YWwgaW50IHRodW1iUG9zaXRpb24oU2Nyb2xsYmFyVGhlbWVDbGllbnQqKTsKLSAgICB2aXJ0dWFs
IGludCB0aHVtYkxlbmd0aChTY3JvbGxiYXJUaGVtZUNsaWVudCopOwotICAgIHZpcnR1YWwgaW50
IHRyYWNrUG9zaXRpb24oU2Nyb2xsYmFyVGhlbWVDbGllbnQqKTsKLSAgICB2aXJ0dWFsIGludCB0
cmFja0xlbmd0aChTY3JvbGxiYXJUaGVtZUNsaWVudCopOwotCi0gICAgdmlydHVhbCBpbnQgc2Ny
b2xsYmFyVGhpY2tuZXNzKFNjcm9sbGJhckNvbnRyb2xTaXplID0gUmVndWxhclNjcm9sbGJhcik7
Ci0KLSAgICBRU3R5bGUqIHN0eWxlKCkgY29uc3Q7Ci19OwotCi19Ci0jZW5kaWYK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>166898</attachid>
            <date>2012-10-03 08:09:48 -0700</date>
            <delta_ts>2012-10-03 08:21:34 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-98268-20121003171156.patch</filename>
            <type>text/plain</type>
            <size>132578</size>
            <attacher name="Simon Hausmann">hausmann</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTI5NjEwCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggM2E3OWM4MDNhOWM2MWIy
YzFkMTZjZmI3ZmU1YWJlMWMyNDQ0NDhmMC4uYzU4YTEyODJlYzU3YjgzMGFmOWIxYjNkZWY2Njc4
MWJkYTU5MzQ2YyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDk4IEBACisyMDEyLTEwLTAzICBTaW1v
biBIYXVzbWFubiAgPHNpbW9uLmhhdXNtYW5uQGRpZ2lhLmNvbT4KKworICAgICAgICBbUXRdIE1h
a2UgUmVuZGVyVGhlbWVRU3R5bGUvU2Nyb2xsYmFyVGhlbWVRU3R5bGUgY29tcGlsZSB3aXRob3V0
IFFTdHlsZS9RdFdpZGdldHMKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19i
dWcuY2dpP2lkPTk4MjY4CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisK
KyAgICAgICAgRXh0cmFjdGVkIFFTdHlsZS9RV2lkZ2V0IHJlbGF0ZWQgY29kZSBpbnRvIGEgUVdl
YlN0eWxlIGNsYXNzIHRoYXQgaW1wbGVtZW50cyB0aGUgUVN0eWxlSW50ZXJmYWNlIGludGVyZmFj
ZS4KKworICAgICAgICAqIFRhcmdldC5wcmk6CisgICAgICAgICogcGxhdGZvcm0vcXQvUVN0eWxl
SW50ZXJmYWNlLmNwcDogQWRkZWQuCisgICAgICAgIChXZWJDb3JlKToKKyAgICAgICAgKFdlYkNv
cmU6OlFTdHlsZUludGVyZmFjZTo6c3R5bGVGb3JQYWdlKToKKyAgICAgICAgKiBwbGF0Zm9ybS9x
dC9RU3R5bGVJbnRlcmZhY2UuaDogQWRkZWQuCisgICAgICAgIChXZWJDb3JlKToKKyAgICAgICAg
KFFTdHlsZUludGVyZmFjZSk6CisgICAgICAgIChXZWJDb3JlOjpRU3R5bGVJbnRlcmZhY2U6On5R
U3R5bGVJbnRlcmZhY2UpOgorICAgICAgICAoV2ViQ29yZTo6UVN0eWxlSW50ZXJmYWNlT3B0aW9u
OjpRU3R5bGVJbnRlcmZhY2VPcHRpb24pOgorICAgICAgICAoUVN0eWxlSW50ZXJmYWNlT3B0aW9u
KToKKyAgICAgICAgKiBwbGF0Zm9ybS9xdC9SZW5kZXJUaGVtZVFTdHlsZS5jcHA6IFJlbmFtZWQg
ZnJvbSBTb3VyY2UvV2ViS2l0L3F0L1dlYkNvcmVTdXBwb3J0L1JlbmRlclRoZW1lUVN0eWxlLmNw
cC4KKyAgICAgICAgKFdlYkNvcmUpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGhlbWVRU3R5
bGU6OmdldFN0eWxlUGFpbnRlcik6CisgICAgICAgIChXZWJDb3JlOjpTdHlsZVBhaW50ZXJRU3R5
bGU6OlN0eWxlUGFpbnRlclFTdHlsZSk6CisgICAgICAgIChXZWJDb3JlOjpTdHlsZVBhaW50ZXJR
U3R5bGU6OmluaXQpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGhlbWVRU3R5bGU6OmNyZWF0
ZSk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJUaGVtZVFTdHlsZTo6c2V0U3R5bGVGYWN0b3J5
RnVuY3Rpb24pOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGhlbWVRU3R5bGU6OnN0eWxlRmFj
dG9yeSk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJUaGVtZVFTdHlsZTo6UmVuZGVyVGhlbWVR
U3R5bGUpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGhlbWVRU3R5bGU6On5SZW5kZXJUaGVt
ZVFTdHlsZSk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJUaGVtZVFTdHlsZTo6c2V0UGFsZXR0
ZUZyb21QYWdlQ2xpZW50SWZFeGlzdHMpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGhlbWVR
U3R5bGU6OmluZmxhdGVCdXR0b25SZWN0KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRoZW1l
UVN0eWxlOjpjb21wdXRlU2l6ZUJhc2VkT25TdHlsZSk6CisgICAgICAgIChXZWJDb3JlOjpSZW5k
ZXJUaGVtZVFTdHlsZTo6YWRqdXN0QnV0dG9uU3R5bGUpOgorICAgICAgICAoV2ViQ29yZTo6UmVu
ZGVyVGhlbWVRU3R5bGU6OnNldEJ1dHRvblBhZGRpbmcpOgorICAgICAgICAoV2ViQ29yZTo6UmVu
ZGVyVGhlbWVRU3R5bGU6OnBhaW50QnV0dG9uKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRo
ZW1lUVN0eWxlOjpwYWludFRleHRGaWVsZCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJUaGVt
ZVFTdHlsZTo6YWRqdXN0VGV4dEFyZWFTdHlsZSk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJU
aGVtZVFTdHlsZTo6cGFpbnRUZXh0QXJlYSk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJUaGVt
ZVFTdHlsZTo6c2V0UG9wdXBQYWRkaW5nKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRoZW1l
UVN0eWxlOjpjb2xvclBhbGV0dGUpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGhlbWVRU3R5
bGU6OnBhaW50TWVudUxpc3QpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGhlbWVRU3R5bGU6
OmFkanVzdE1lbnVMaXN0QnV0dG9uU3R5bGUpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGhl
bWVRU3R5bGU6OnBhaW50TWVudUxpc3RCdXR0b24pOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVy
VGhlbWVRU3R5bGU6OmFuaW1hdGlvbkR1cmF0aW9uRm9yUHJvZ3Jlc3NCYXIpOgorICAgICAgICAo
V2ViQ29yZTo6UmVuZGVyVGhlbWVRU3R5bGU6OnBhaW50UHJvZ3Jlc3NCYXIpOgorICAgICAgICAo
V2ViQ29yZTo6UmVuZGVyVGhlbWVRU3R5bGU6OnBhaW50U2xpZGVyVHJhY2spOgorICAgICAgICAo
V2ViQ29yZTo6UmVuZGVyVGhlbWVRU3R5bGU6OmFkanVzdFNsaWRlclRyYWNrU3R5bGUpOgorICAg
ICAgICAoV2ViQ29yZTo6UmVuZGVyVGhlbWVRU3R5bGU6OnBhaW50U2xpZGVyVGh1bWIpOgorICAg
ICAgICAoV2ViQ29yZTo6UmVuZGVyVGhlbWVRU3R5bGU6OmFkanVzdFNsaWRlclRodW1iU3R5bGUp
OgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGhlbWVRU3R5bGU6OnBhaW50U2VhcmNoRmllbGQp
OgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGhlbWVRU3R5bGU6OmFkanVzdFNlYXJjaEZpZWxk
RGVjb3JhdGlvblN0eWxlKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRoZW1lUVN0eWxlOjpw
YWludFNlYXJjaEZpZWxkRGVjb3JhdGlvbik6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJUaGVt
ZVFTdHlsZTo6YWRqdXN0U2VhcmNoRmllbGRSZXN1bHRzRGVjb3JhdGlvblN0eWxlKToKKyAgICAg
ICAgKFdlYkNvcmU6OlJlbmRlclRoZW1lUVN0eWxlOjpwYWludFNlYXJjaEZpZWxkUmVzdWx0c0Rl
Y29yYXRpb24pOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGhlbWVRU3R5bGU6OnBhaW50SW5u
ZXJTcGluQnV0dG9uKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRoZW1lUVN0eWxlOjppbml0
aWFsaXplQ29tbW9uUVN0eWxlT3B0aW9ucyk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJUaGVt
ZVFTdHlsZTo6YWRqdXN0U2xpZGVyVGh1bWJTaXplKToKKyAgICAgICAgKiBwbGF0Zm9ybS9xdC9S
ZW5kZXJUaGVtZVFTdHlsZS5oOiBSZW5hbWVkIGZyb20gU291cmNlL1dlYktpdC9xdC9XZWJDb3Jl
U3VwcG9ydC9SZW5kZXJUaGVtZVFTdHlsZS5oLgorICAgICAgICAoV2ViQ29yZSk6CisgICAgICAg
IChSZW5kZXJUaGVtZVFTdHlsZSk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJUaGVtZVFTdHls
ZTo6c3R5bGVJbnRlcmZhY2UpOgorICAgICAgICAoU3R5bGVQYWludGVyUVN0eWxlKToKKyAgICAg
ICAgKFdlYkNvcmU6OlN0eWxlUGFpbnRlclFTdHlsZTo6aXNWYWxpZCk6CisgICAgICAgIChXZWJD
b3JlOjpTdHlsZVBhaW50ZXJRU3R5bGU6OnBhaW50QnV0dG9uKToKKyAgICAgICAgKFdlYkNvcmU6
OlN0eWxlUGFpbnRlclFTdHlsZTo6cGFpbnRUZXh0RmllbGQpOgorICAgICAgICAoV2ViQ29yZTo6
U3R5bGVQYWludGVyUVN0eWxlOjpwYWludENvbWJvQm94KToKKyAgICAgICAgKFdlYkNvcmU6OlN0
eWxlUGFpbnRlclFTdHlsZTo6cGFpbnRDb21ib0JveEFycm93KToKKyAgICAgICAgKFdlYkNvcmU6
OlN0eWxlUGFpbnRlclFTdHlsZTo6cGFpbnRTbGlkZXJUcmFjayk6CisgICAgICAgIChXZWJDb3Jl
OjpTdHlsZVBhaW50ZXJRU3R5bGU6OnBhaW50U2xpZGVyVGh1bWIpOgorICAgICAgICAoV2ViQ29y
ZTo6U3R5bGVQYWludGVyUVN0eWxlOjpwYWludElubmVyU3BpbkJ1dHRvbik6CisgICAgICAgIChX
ZWJDb3JlOjpTdHlsZVBhaW50ZXJRU3R5bGU6OnBhaW50UHJvZ3Jlc3NCYXIpOgorICAgICAgICAo
V2ViQ29yZTo6U3R5bGVQYWludGVyUVN0eWxlOjpwYWludFNjcm9sbENvcm5lcik6CisgICAgICAg
IChXZWJDb3JlOjpTdHlsZVBhaW50ZXJRU3R5bGU6OnBhaW50U2Nyb2xsQmFyKToKKyAgICAgICAg
KiBwbGF0Zm9ybS9xdC9TY3JvbGxiYXJUaGVtZVFTdHlsZS5jcHA6IFJlbmFtZWQgZnJvbSBTb3Vy
Y2UvV2ViS2l0L3F0L1dlYkNvcmVTdXBwb3J0L1Njcm9sbGJhclRoZW1lUVN0eWxlLmNwcC4KKyAg
ICAgICAgKFdlYkNvcmUpOgorICAgICAgICAoV2ViQ29yZTo6U2Nyb2xsYmFyVGhlbWVRU3R5bGU6
OlNjcm9sbGJhclRoZW1lUVN0eWxlKToKKyAgICAgICAgKFdlYkNvcmU6OlNjcm9sbGJhclRoZW1l
UVN0eWxlOjp+U2Nyb2xsYmFyVGhlbWVRU3R5bGUpOgorICAgICAgICAoV2ViQ29yZTo6c2NQYXJ0
KToKKyAgICAgICAgKFdlYkNvcmU6OnNjcm9sbGJhclBhcnQpOgorICAgICAgICAoV2ViQ29yZTo6
aW5pdFNsaWRlclN0eWxlT3B0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OlNjcm9sbGJhclRoZW1l
UVN0eWxlOjpwYWludCk6CisgICAgICAgIChXZWJDb3JlOjpTY3JvbGxiYXJUaGVtZVFTdHlsZTo6
aGl0VGVzdCk6CisgICAgICAgIChXZWJDb3JlOjpTY3JvbGxiYXJUaGVtZVFTdHlsZTo6c2hvdWxk
Q2VudGVyT25UaHVtYik6CisgICAgICAgIChXZWJDb3JlOjpTY3JvbGxiYXJUaGVtZVFTdHlsZTo6
aW52YWxpZGF0ZVBhcnQpOgorICAgICAgICAoV2ViQ29yZTo6U2Nyb2xsYmFyVGhlbWVRU3R5bGU6
OnNjcm9sbGJhclRoaWNrbmVzcyk6CisgICAgICAgIChXZWJDb3JlOjpTY3JvbGxiYXJUaGVtZVFT
dHlsZTo6dGh1bWJQb3NpdGlvbik6CisgICAgICAgIChXZWJDb3JlOjpTY3JvbGxiYXJUaGVtZVFT
dHlsZTo6dGh1bWJMZW5ndGgpOgorICAgICAgICAoV2ViQ29yZTo6U2Nyb2xsYmFyVGhlbWVRU3R5
bGU6OnRyYWNrUG9zaXRpb24pOgorICAgICAgICAoV2ViQ29yZTo6U2Nyb2xsYmFyVGhlbWVRU3R5
bGU6OnRyYWNrTGVuZ3RoKToKKyAgICAgICAgKFdlYkNvcmU6OlNjcm9sbGJhclRoZW1lUVN0eWxl
OjpwYWludFNjcm9sbENvcm5lcik6CisgICAgICAgICogcGxhdGZvcm0vcXQvU2Nyb2xsYmFyVGhl
bWVRU3R5bGUuaDogUmVuYW1lZCBmcm9tIFNvdXJjZS9XZWJLaXQvcXQvV2ViQ29yZVN1cHBvcnQv
U2Nyb2xsYmFyVGhlbWVRU3R5bGUuaC4KKyAgICAgICAgKFdlYkNvcmUpOgorICAgICAgICAoU2Ny
b2xsYmFyVGhlbWVRU3R5bGUpOgorICAgICAgICAoV2ViQ29yZTo6U2Nyb2xsYmFyVGhlbWVRU3R5
bGU6OnN0eWxlSW50ZXJmYWNlKToKKwogMjAxMi0wOS0yNiAgWmFuIERvYmVyc2VrICA8emFuZG9i
ZXJzZWtAZ21haWwuY29tPgogCiAgICAgICAgIFtHVEtdIEVuYWJsZSBzb21lIG9mIHRoZSB1bnN0
YWJsZSBDU1MgZmVhdHVyZXMKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nIGIv
U291cmNlL1dlYktpdC9DaGFuZ2VMb2cKaW5kZXggYTA5ZThkZjBkYzdmN2IxYjcwNTY4OTIwNTVm
MmI0ZTk1Y2FiZWFkZi4uYTU2NTg3ZmI0NjZhOTJiYWQ1N2M0ZjhlOTZiNGYzYzI5MWNjMjBkYSAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYktpdC9D
aGFuZ2VMb2cKQEAgLTEsMyArMSwxNCBAQAorMjAxMi0xMC0wMyAgU2ltb24gSGF1c21hbm4gIDxz
aW1vbi5oYXVzbWFubkBkaWdpYS5jb20+CisKKyAgICAgICAgW1F0XSBNYWtlIFJlbmRlclRoZW1l
UVN0eWxlL1Njcm9sbGJhclRoZW1lUVN0eWxlIGNvbXBpbGUgd2l0aG91dCBRU3R5bGUvUXRXaWRn
ZXRzCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD05ODI2
OAorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIEV4dHJh
Y3RlZCBRU3R5bGUvUVdpZGdldCByZWxhdGVkIGNvZGUgaW50byBhIFFXZWJTdHlsZSBjbGFzcyB0
aGF0IGltcGxlbWVudHMgdGhlIFFTdHlsZUludGVyZmFjZSBpbnRlcmZhY2UuCisKKyAgICAgICAg
KiBXZWJLaXQxLnBybzoKKwogMjAxMi0wOS0yNCAgQXJ2aWQgTmlsc3NvbiAgPGFuaWxzc29uQHJp
bS5jb20+CiAKICAgICAgICAgW0JsYWNrQmVycnldIEFkZCBjb29raWUgZGF0YWJhc2UgQVBJCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L3F0L0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJLaXQvcXQv
Q2hhbmdlTG9nCmluZGV4IDYxMmI4NjdkMjAxNTNiNGIyOTkxMWE1YjU3MTExN2U2ZWVmNmNmMzYu
LjQ3MTM4ODg4N2M0MjljNTEwMGE3MTk2ZmFkMGQ5YWMzY2Q3YzEzYWYgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJLaXQvcXQvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XZWJLaXQvcXQvQ2hhbmdlTG9n
CkBAIC0xLDMgKzEsNTggQEAKKzIwMTItMTAtMDMgIFNpbW9uIEhhdXNtYW5uICA8c2ltb24uaGF1
c21hbm5AZGlnaWEuY29tPgorCisgICAgICAgIFtRdF0gTWFrZSBSZW5kZXJUaGVtZVFTdHlsZS9T
Y3JvbGxiYXJUaGVtZVFTdHlsZSBjb21waWxlIHdpdGhvdXQgUVN0eWxlL1F0V2lkZ2V0cworICAg
ICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9OTgyNjgKKworICAg
ICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBFeHRyYWN0ZWQgUVN0
eWxlL1FXaWRnZXQgcmVsYXRlZCBjb2RlIGludG8gYSBRV2ViU3R5bGUgY2xhc3MgdGhhdCBpbXBs
ZW1lbnRzIHRoZSBRU3R5bGVJbnRlcmZhY2UgaW50ZXJmYWNlLgorCisgICAgICAgICogV2ViQ29y
ZVN1cHBvcnQvSW5pdFdlYkNvcmVRdC5jcHA6CisgICAgICAgIChXZWJDb3JlOjppbml0aWFsaXpl
V2ViQ29yZVF0KToKKyAgICAgICAgKiBXZWJDb3JlU3VwcG9ydC9RV2ViU3R5bGUuY3BwOiBBZGRl
ZC4KKyAgICAgICAgKFdlYktpdCk6CisgICAgICAgIChXZWJLaXQ6OmNvbnZlcnRUb1FTdHlsZVN0
YXRlKToKKyAgICAgICAgKFdlYktpdDo6Y29udmVydFRvUVN0eWxlU3ViQ29udHJvbCk6CisgICAg
ICAgIChXZWJLaXQ6OmluaXRHZW5lcmljU3R5bGVPcHRpb24pOgorICAgICAgICAoV2ViS2l0Ojpp
bml0U3BlY2lmaWNTdHlsZU9wdGlvbik6CisgICAgICAgIChNYXBwZWRTdHlsZU9wdGlvbik6Cisg
ICAgICAgIChXZWJLaXQ6Ok1hcHBlZFN0eWxlT3B0aW9uOjpNYXBwZWRTdHlsZU9wdGlvbik6Cisg
ICAgICAgIChXZWJLaXQ6OmNvbnZlcnRQaXhlbE1ldHJpYyk6CisgICAgICAgIChXZWJLaXQ6OmNv
bnZlcnRUb1FTdHlsZUludGVyZmFjZVN1YkNvbnRyb2wpOgorICAgICAgICAoV2ViS2l0OjpRV2Vi
U3R5bGU6OlFXZWJTdHlsZSk6CisgICAgICAgIChXZWJLaXQ6OlFXZWJTdHlsZTo6flFXZWJTdHls
ZSk6CisgICAgICAgIChXZWJLaXQ6OlFXZWJTdHlsZTo6YnV0dG9uU3ViRWxlbWVudFJlY3QpOgor
ICAgICAgICAoV2ViS2l0OjpRV2ViU3R5bGU6OmZpbmRGcmFtZUxpbmVXaWR0aCk6CisgICAgICAg
IChXZWJLaXQ6OlFXZWJTdHlsZTo6c2ltcGxlUGl4ZWxNZXRyaWMpOgorICAgICAgICAoV2ViS2l0
OjpRV2ViU3R5bGU6OmJ1dHRvbk1hcmdpbik6CisgICAgICAgIChXZWJLaXQ6OlFXZWJTdHlsZTo6
c2xpZGVyTGVuZ3RoKToKKyAgICAgICAgKFdlYktpdDo6UVdlYlN0eWxlOjpzbGlkZXJUaGlja25l
c3MpOgorICAgICAgICAoV2ViS2l0OjpRV2ViU3R5bGU6OnByb2dyZXNzQmFyQ2h1bmtXaWR0aCk6
CisgICAgICAgIChXZWJLaXQ6OlFXZWJTdHlsZTo6Z2V0QnV0dG9uTWV0cmljcyk6CisgICAgICAg
IChXZWJLaXQ6OlFXZWJTdHlsZTo6c2l6ZUZyb21Db250ZW50cyk6CisgICAgICAgIChXZWJLaXQ6
OlFXZWJTdHlsZTo6cGFpbnRCdXR0b24pOgorICAgICAgICAoV2ViS2l0OjpRV2ViU3R5bGU6OnBh
aW50VGV4dEZpZWxkKToKKyAgICAgICAgKFdlYktpdDo6UVdlYlN0eWxlOjpwYWludENvbWJvQm94
KToKKyAgICAgICAgKFdlYktpdDo6UVdlYlN0eWxlOjpwYWludENvbWJvQm94QXJyb3cpOgorICAg
ICAgICAoV2ViS2l0OjpRV2ViU3R5bGU6OnBhaW50U2xpZGVyVHJhY2spOgorICAgICAgICAoV2Vi
S2l0OjpRV2ViU3R5bGU6OnBhaW50U2xpZGVyVGh1bWIpOgorICAgICAgICAoV2ViS2l0OjpRV2Vi
U3R5bGU6OnBhaW50SW5uZXJTcGluQnV0dG9uKToKKyAgICAgICAgKFdlYktpdDo6UVdlYlN0eWxl
OjpwYWludFByb2dyZXNzQmFyKToKKyAgICAgICAgKFdlYktpdDo6UVdlYlN0eWxlOjpzY3JvbGxC
YXJFeHRlbnQpOgorICAgICAgICAoV2ViS2l0OjpRV2ViU3R5bGU6OnNjcm9sbEJhck1pZGRsZUNs
aWNrQWJzb2x1dGVQb3NpdGlvblN0eWxlSGludCk6CisgICAgICAgIChXZWJLaXQ6OlFXZWJTdHls
ZTo6cGFpbnRTY3JvbGxDb3JuZXIpOgorICAgICAgICAoV2ViS2l0OjpRV2ViU3R5bGU6OmhpdFRl
c3RTY3JvbGxCYXIpOgorICAgICAgICAoV2ViS2l0OjpRV2ViU3R5bGU6OnNjcm9sbEJhclN1YkNv
bnRyb2xSZWN0KToKKyAgICAgICAgKFdlYktpdDo6UVdlYlN0eWxlOjpwYWludFNjcm9sbEJhcik6
CisgICAgICAgIChXZWJLaXQ6OlFXZWJTdHlsZTo6d2lkZ2V0Rm9yUGFpbnRlcik6CisgICAgICAg
IChXZWJLaXQ6OlFXZWJTdHlsZTo6aXNWYWxpZCk6CisgICAgICAgIChXZWJLaXQ6OlFXZWJTdHls
ZTo6ZW5zdXJlU3R5bGUpOgorICAgICAgICAqIFdlYkNvcmVTdXBwb3J0L1FXZWJTdHlsZS5oOiBB
ZGRlZC4KKyAgICAgICAgKFdlYkNvcmUpOgorICAgICAgICAoV2ViS2l0KToKKyAgICAgICAgKFFX
ZWJTdHlsZSk6CisgICAgICAgIChXZWJLaXQ6OlFXZWJTdHlsZTo6Y3JlYXRlKToKKwogMjAxMi0w
OS0yNiAgU2ltb24gSGF1c21hbm4gIDxzaW1vbi5oYXVzbWFubkBkaWdpYS5jb20+CiAKICAgICAg
ICAgW1F0XSBSZW1vdmUgUXQgUXVpY2sgMSBzdXBwb3J0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9UYXJnZXQucHJpIGIvU291cmNlL1dlYkNvcmUvVGFyZ2V0LnByaQppbmRleCAyNDdjMjBl
YzVjMzZiYzQ2Y2UyODAwMGY1NDA4OWUwMTkzYWFhZmVjLi40MzZlYWU5MDIzMTg3NzEwODk0MGE3
M2M4N2JkZTA1NjJjZTExYmE5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9UYXJnZXQucHJp
CisrKyBiL1NvdXJjZS9XZWJDb3JlL1RhcmdldC5wcmkKQEAgLTIyMjksOCArMjIyOSwxMSBAQCBI
RUFERVJTICs9IFwKICAgICBwbGF0Zm9ybS9xdC9DbGlwYm9hcmRRdC5oIFwKICAgICBwbGF0Zm9y
bS9xdC9Db29raWVKYXJRdC5oIFwKICAgICBwbGF0Zm9ybS9xdC9RV2ViUGFnZUNsaWVudC5oIFwK
KyAgICBwbGF0Zm9ybS9xdC9RU3R5bGVJbnRlcmZhY2UuaCBcCisgICAgcGxhdGZvcm0vcXQvUmVu
ZGVyVGhlbWVRU3R5bGUuaCBcCiAgICAgcGxhdGZvcm0vcXQvUmVuZGVyVGhlbWVRdC5oIFwKICAg
ICBwbGF0Zm9ybS9xdC9SZW5kZXJUaGVtZVF0TW9iaWxlLmggXAorICAgIHBsYXRmb3JtL3F0L1Nj
cm9sbGJhclRoZW1lUVN0eWxlLmggXAogICAgIHBsYXRmb3JtL3F0L1VzZXJBZ2VudFF0LmggXAog
ICAgIHBsYXRmb3JtL1Njcm9sbGFibGVBcmVhLmggXAogICAgIHBsYXRmb3JtL1Njcm9sbEFuaW1h
dG9yLmggXApAQCAtMjgwMSw4ICsyODA0LDExIEBAIFNPVVJDRVMgKz0gXAogICAgIHBsYXRmb3Jt
L3F0L1Bhc3RlYm9hcmRRdC5jcHAgXAogICAgIHBsYXRmb3JtL3F0L1BsYXRmb3JtS2V5Ym9hcmRF
dmVudFF0LmNwcCBcCiAgICAgcGxhdGZvcm0vcXQvUGxhdGZvcm1TY3JlZW5RdC5jcHAgXAorICAg
IHBsYXRmb3JtL3F0L1FTdHlsZUludGVyZmFjZS5jcHAgXAorICAgIHBsYXRmb3JtL3F0L1JlbmRl
clRoZW1lUVN0eWxlLmNwcCBcCiAgICAgcGxhdGZvcm0vcXQvUmVuZGVyVGhlbWVRdC5jcHAgXAog
ICAgIHBsYXRmb3JtL3F0L1JlbmRlclRoZW1lUXRNb2JpbGUuY3BwIFwKKyAgICBwbGF0Zm9ybS9x
dC9TY3JvbGxiYXJUaGVtZVFTdHlsZS5jcHAgXAogICAgIHBsYXRmb3JtL3F0L1Njcm9sbGJhclRo
ZW1lUXQuY3BwIFwKICAgICBwbGF0Zm9ybS9xdC9TY3JvbGxWaWV3UXQuY3BwIFwKICAgICBwbGF0
Zm9ybS9xdC9TaGFyZWRUaW1lclF0LmNwcCBcCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9xdC9RU3R5bGVJbnRlcmZhY2UuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
cXQvUVN0eWxlSW50ZXJmYWNlLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5mY2Q2ZTUyZTBlZTQ5Njk1M2Y1ZTg1
YTViYWE4YzhhM2M4ZGUyMmY0Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vcXQvUVN0eWxlSW50ZXJmYWNlLmNwcApAQCAtMCwwICsxLDQ2IEBACisvKgorICogVGhp
cyBmaWxlIGlzIHBhcnQgb2YgdGhlIHRoZW1lIGltcGxlbWVudGF0aW9uIGZvciBmb3JtIGNvbnRy
b2xzIGluIFdlYkNvcmUuCisgKgorICogQ29weXJpZ2h0IChDKSAyMDEyIERpZ2lhIFBsYyBhbmQv
b3IgaXRzIHN1YnNpZGlhcnkoLWllcykuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTEtMjAxMiBOb2tp
YSBDb3Jwb3JhdGlvbiBhbmQvb3IgaXRzIHN1YnNpZGlhcnkoLWllcykuCisgKgorICogVGhpcyBs
aWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgor
ICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQ
dWJsaWMKKyAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5k
YXRpb247IGVpdGhlcgorICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBv
cHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmli
dXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQg
QU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1F
UkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0
aGUgR05VCisgKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWls
cy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGli
cmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsg
c2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bworICogdGhlIEZyZWUg
U29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9v
ciwKKyAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgorICoKKyAqLworCisjaW5jbHVkZSAi
Y29uZmlnLmgiCisjaW5jbHVkZSAiUVN0eWxlSW50ZXJmYWNlLmgiCisKKyNpbmNsdWRlICJRV2Vi
UGFnZUNsaWVudC5oIgorI2luY2x1ZGUgPENocm9tZS5oPgorI2luY2x1ZGUgPENocm9tZUNsaWVu
dC5oPgorI2luY2x1ZGUgPFBhZ2UuaD4KKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitRU3R5bGUq
IFFTdHlsZUludGVyZmFjZTo6c3R5bGVGb3JQYWdlKFBhZ2UqIHBhZ2UpCit7CisgICAgaWYgKCFw
YWdlKQorICAgICAgICByZXR1cm4gMDsKKyAgICBRV2ViUGFnZUNsaWVudCogcGFnZUNsaWVudCA9
IHBhZ2UtPmNocm9tZSgpLT5jbGllbnQoKS0+cGxhdGZvcm1QYWdlQ2xpZW50KCk7CisKKyAgICBp
ZiAoIXBhZ2VDbGllbnQpCisgICAgICAgIHJldHVybiAwOworCisgICAgcmV0dXJuIHBhZ2VDbGll
bnQtPnN0eWxlKCk7Cit9CisKK30KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L3F0L1FTdHlsZUludGVyZmFjZS5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vcXQvUVN0eWxl
SW50ZXJmYWNlLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uZTIxNTg4ODZjMjE0MzVlMTc4YmZhNzk0NDQxNDVjYTFk
ZTdmMGYwNQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3F0L1FT
dHlsZUludGVyZmFjZS5oCkBAIC0wLDAgKzEsMjA1IEBACisvKgorICogVGhpcyBmaWxlIGlzIHBh
cnQgb2YgdGhlIHRoZW1lIGltcGxlbWVudGF0aW9uIGZvciBmb3JtIGNvbnRyb2xzIGluIFdlYkNv
cmUuCisgKgorICogQ29weXJpZ2h0IChDKSAyMDEyIERpZ2lhIFBsYyBhbmQvb3IgaXRzIHN1YnNp
ZGlhcnkoLWllcykuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTEtMjAxMiBOb2tpYSBDb3Jwb3JhdGlv
biBhbmQvb3IgaXRzIHN1YnNpZGlhcnkoLWllcykuCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGZy
ZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0
IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAqIExp
Y2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhl
cgorICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBs
YXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUg
aG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZ
OyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElU
WSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiBM
aWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZ
b3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFs
IFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxl
IENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bworICogdGhlIEZyZWUgU29mdHdhcmUgRm91
bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKKyAqIEJvc3Rv
biwgTUEgMDIxMTAtMTMwMSwgVVNBLgorICoKKyAqLworI2lmbmRlZiBRU3R5bGVJbnRlcmZhY2Vf
aAorI2RlZmluZSBRU3R5bGVJbnRlcmZhY2VfaAorCisjaW5jbHVkZSA8UVBhbGV0dGU+CisjaW5j
bHVkZSA8UVJlY3Q+CisKK1FUX0JFR0lOX05BTUVTUEFDRQorY2xhc3MgUVN0eWxlOworUVRfRU5E
X05BTUVTUEFDRQorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK2NsYXNzIFBhZ2U7CitjbGFzcyBR
U3R5bGVJbnRlcmZhY2VPcHRpb247CisKK2NsYXNzIFFTdHlsZUludGVyZmFjZSB7CitwdWJsaWM6
CisgICAgZW51bSBCdXR0b25TdWJFbGVtZW50IHsKKyAgICAgICAgUHVzaEJ1dHRvbkxheW91dEl0
ZW0sCisgICAgICAgIFB1c2hCdXR0b25Db250ZW50cworICAgIH07CisKKyNkZWZpbmUgRk9SX0VB
Q0hfTUFQUEVEX1NUQVRFKEYsIFNFUEFSQVRPUikgXAorICAgIEYoU3RhdGVfTm9uZSwgMHgwMDAw
MDAwMCkgU0VQQVJBVE9SIFwKKyAgICBGKFN0YXRlX0VuYWJsZWQsIDB4MDAwMDAwMDEpIFNFUEFS
QVRPUiBcCisgICAgRihTdGF0ZV9SYWlzZWQsIDB4MDAwMDAwMDIpIFNFUEFSQVRPUiBcCisgICAg
RihTdGF0ZV9TdW5rZW4sIDB4MDAwMDAwMDQpIFNFUEFSQVRPUiBcCisgICAgRihTdGF0ZV9PZmYs
IDB4MDAwMDAwMDgpIFNFUEFSQVRPUiBcCisgICAgRihTdGF0ZV9Ob0NoYW5nZSwgMHgwMDAwMDAx
MCkgU0VQQVJBVE9SIFwKKyAgICBGKFN0YXRlX09uLCAweDAwMDAwMDIwKSBTRVBBUkFUT1IgXAor
ICAgIEYoU3RhdGVfRG93bkFycm93LCAweDAwMDAwMDQwKSBTRVBBUkFUT1IgXAorICAgIEYoU3Rh
dGVfSG9yaXpvbnRhbCwgMHgwMDAwMDA4MCkgU0VQQVJBVE9SIFwKKyAgICBGKFN0YXRlX0hhc0Zv
Y3VzLCAweDAwMDAwMTAwKSBTRVBBUkFUT1IgXAorICAgIEYoU3RhdGVfVG9wLCAweDAwMDAwMjAw
KSBTRVBBUkFUT1IgXAorICAgIEYoU3RhdGVfQm90dG9tLCAweDAwMDAwNDAwKSBTRVBBUkFUT1Ig
XAorICAgIEYoU3RhdGVfRm9jdXNBdEJvcmRlciwgMHgwMDAwMDgwMCkgU0VQQVJBVE9SIFwKKyAg
ICBGKFN0YXRlX0F1dG9SYWlzZSwgMHgwMDAwMTAwMCkgU0VQQVJBVE9SIFwKKyAgICBGKFN0YXRl
X01vdXNlT3ZlciwgMHgwMDAwMjAwMCkgU0VQQVJBVE9SIFwKKyAgICBGKFN0YXRlX1VwQXJyb3cs
IDB4MDAwMDQwMDApIFNFUEFSQVRPUiBcCisgICAgRihTdGF0ZV9TZWxlY3RlZCwgMHgwMDAwODAw
MCkgU0VQQVJBVE9SIFwKKyAgICBGKFN0YXRlX0FjdGl2ZSwgMHgwMDAxMDAwMCkgU0VQQVJBVE9S
IFwKKyAgICBGKFN0YXRlX1dpbmRvdywgMHgwMDAyMDAwMCkgU0VQQVJBVE9SIFwKKyAgICBGKFN0
YXRlX09wZW4sIDB4MDAwNDAwMDApIFNFUEFSQVRPUiBcCisgICAgRihTdGF0ZV9DaGlsZHJlbiwg
MHgwMDA4MDAwMCkgU0VQQVJBVE9SIFwKKyAgICBGKFN0YXRlX0l0ZW0sIDB4MDAxMDAwMDApIFNF
UEFSQVRPUiBcCisgICAgRihTdGF0ZV9TaWJsaW5nLCAweDAwMjAwMDAwKSBTRVBBUkFUT1IgXAor
ICAgIEYoU3RhdGVfRWRpdGluZywgMHgwMDQwMDAwMCkgU0VQQVJBVE9SIFwKKyAgICBGKFN0YXRl
X0tleWJvYXJkRm9jdXNDaGFuZ2UsIDB4MDA4MDAwMDApIFNFUEFSQVRPUiBcCisgICAgRihTdGF0
ZV9SZWFkT25seSwgMHgwMjAwMDAwMCkgU0VQQVJBVE9SIFwKKyAgICBGKFN0YXRlX1NtYWxsLCAw
eDA0MDAwMDAwKSBTRVBBUkFUT1IgXAorICAgIEYoU3RhdGVfTWluaSwgMHgwODAwMDAwKQorCisj
ZGVmaW5lIENPTU1BICwKKyNkZWZpbmUgU0VNSUNPTE9OIDsKKyNkZWZpbmUgREVGSU5FX01BUFBF
RF9TVEFURShOYW1lLCBWYWx1ZSkgXAorICAgIE5hbWUgPSBWYWx1ZQorCisgICAgLy8gIyMjIFJl
bW92ZSB1bnVzZWQgc3RhdGVzLgorICAgIGVudW0gU3RhdGVGbGFnIHsKKyAgICAgICAgRk9SX0VB
Q0hfTUFQUEVEX1NUQVRFKERFRklORV9NQVBQRURfU1RBVEUsIENPTU1BKQorICAgIH07CisgICAg
UV9ERUNMQVJFX0ZMQUdTKFN0YXRlLCBTdGF0ZUZsYWcpCisKKyNkZWZpbmUgRk9SX0VBQ0hfTUFQ
UEVEX01FVFJJQyhGLCBTRVBBUkFUT1IpIFwKKyAgICBGKFBNX0J1dHRvbk1hcmdpbikgU0VQQVJB
VE9SIFwKKyAgICBGKFBNX0RlZmF1bHRGcmFtZVdpZHRoKSBTRVBBUkFUT1IgXAorICAgIEYoUE1f
SW5kaWNhdG9yV2lkdGgpIFNFUEFSQVRPUiBcCisgICAgRihQTV9FeGNsdXNpdmVJbmRpY2F0b3JX
aWR0aCkgU0VQQVJBVE9SIFwKKyAgICBGKFBNX0J1dHRvbkljb25TaXplKQorCisjZGVmaW5lIERF
RklORV9NRVRSSUMoRikgRgorCisgICAgZW51bSBQaXhlbE1ldHJpYyB7CisgICAgICAgIEZPUl9F
QUNIX01BUFBFRF9NRVRSSUMoREVGSU5FX01FVFJJQywgQ09NTUEpCisgICAgfTsKKworICAgIGVu
dW0gQ29udGVudHNUeXBlIHsKKyAgICAgICAgQ1RfQ29tYm9Cb3gsCisgICAgICAgIENUX1B1c2hC
dXR0b24KKyAgICB9OworCisjZGVmaW5lIEZPUl9FQUNIX1NVQkNPTlRST0woRiwgU0VQQVJBVE9S
KSBcCisgICAgRihTQ19Ob25lLCAweDAwMDAwMDAwKSBTRVBBUkFUT1IgXAorICAgIEYoU0NfU2Ny
b2xsQmFyQWRkTGluZSwgMHgwMDAwMDAwMSkgU0VQQVJBVE9SIFwKKyAgICBGKFNDX1Njcm9sbEJh
clN1YkxpbmUsIDB4MDAwMDAwMDIpIFNFUEFSQVRPUiBcCisgICAgRihTQ19TY3JvbGxCYXJBZGRQ
YWdlLCAweDAwMDAwMDA0KSBTRVBBUkFUT1IgXAorICAgIEYoU0NfU2Nyb2xsQmFyU3ViUGFnZSwg
MHgwMDAwMDAwOCkgU0VQQVJBVE9SIFwKKyAgICBGKFNDX1Njcm9sbEJhckZpcnN0LCAweDAwMDAw
MDEwKSBTRVBBUkFUT1IgXAorICAgIEYoU0NfU2Nyb2xsQmFyTGFzdCwgMHgwMDAwMDAyMCkgU0VQ
QVJBVE9SIFwKKyAgICBGKFNDX1Njcm9sbEJhclNsaWRlciwgMHgwMDAwMDA0MCkgU0VQQVJBVE9S
IFwKKyAgICBGKFNDX1Njcm9sbEJhckdyb292ZSwgMHgwMDAwMDA4MCkKKworI2RlZmluZSBERUZJ
TkVfU1VCQ09OVFJPTChGLCBWYWx1ZSkgRgorCisgICAgZW51bSBTdWJDb250cm9sIHsKKyAgICAg
ICAgRk9SX0VBQ0hfU1VCQ09OVFJPTChERUZJTkVfU1VCQ09OVFJPTCwgQ09NTUEpCisgICAgfTsK
KworICAgIHZpcnR1YWwgflFTdHlsZUludGVyZmFjZSgpIHsgfQorCisgICAgdmlydHVhbCBRUmVj
dCBidXR0b25TdWJFbGVtZW50UmVjdChCdXR0b25TdWJFbGVtZW50IGJ1dHRvbkVsZW1lbnQsIFN0
YXRlLCBjb25zdCBRUmVjdCYgb3JpZ2luYWxSZWN0KSBjb25zdCA9IDA7CisKKyAgICB2aXJ0dWFs
IGludCBmaW5kRnJhbWVMaW5lV2lkdGgoKSBjb25zdCA9IDA7CisgICAgdmlydHVhbCBpbnQgc2lt
cGxlUGl4ZWxNZXRyaWMoUGl4ZWxNZXRyaWMsIFN0YXRlID0gU3RhdGVfTm9uZSwgUU9iamVjdCog
d2lkZ2V0ID0gMCkgY29uc3QgPSAwOworICAgIHZpcnR1YWwgaW50IGJ1dHRvbk1hcmdpbihTdGF0
ZSwgY29uc3QgUVJlY3QmIG9yaWdpbmFsUmVjdCkgY29uc3QgPSAwOworICAgIHZpcnR1YWwgaW50
IHNsaWRlckxlbmd0aChRdDo6T3JpZW50YXRpb24pIGNvbnN0ID0gMDsKKyAgICB2aXJ0dWFsIGlu
dCBzbGlkZXJUaGlja25lc3MoUXQ6Ok9yaWVudGF0aW9uKSBjb25zdCA9IDA7CisgICAgdmlydHVh
bCBpbnQgcHJvZ3Jlc3NCYXJDaHVua1dpZHRoKGNvbnN0IFFTaXplJikgY29uc3QgPSAwOworICAg
IHZpcnR1YWwgdm9pZCBnZXRCdXR0b25NZXRyaWNzKFFTdHJpbmcqIGJ1dHRvbkZvbnRGYW1pbHks
IGludCogYnV0dG9uRm9udFBpeGVsU2l6ZSkgY29uc3QgPSAwOworCisgICAgdmlydHVhbCBRU2l6
ZSBzaXplRnJvbUNvbnRlbnRzKENvbnRlbnRzVHlwZSwgU3RhdGUsIGNvbnN0IFFTaXplJiBjb250
ZW50c1NpemUpIGNvbnN0ID0gMDsKKworICAgIGVudW0gQnV0dG9uVHlwZSB7CisgICAgICAgIFB1
c2hCdXR0b24sCisgICAgICAgIFJhZGlvQnV0dG9uLAorICAgICAgICBDaGVja0JveAorICAgIH07
CisKKyAgICB2aXJ0dWFsIHZvaWQgcGFpbnRCdXR0b24oUVBhaW50ZXIqLCBCdXR0b25UeXBlLCBj
b25zdCBRU3R5bGVJbnRlcmZhY2VPcHRpb24mLCBRT2JqZWN0ICp3aWRnZXQpID0gMDsKKyAgICB2
aXJ0dWFsIHZvaWQgcGFpbnRUZXh0RmllbGQoUVBhaW50ZXIqLCBjb25zdCBRU3R5bGVJbnRlcmZh
Y2VPcHRpb24mLCBRT2JqZWN0KiB3aWRnZXRPYmopID0gMDsKKyAgICB2aXJ0dWFsIHZvaWQgcGFp
bnRDb21ib0JveChRUGFpbnRlciosIGNvbnN0IFFTdHlsZUludGVyZmFjZU9wdGlvbiYsIFFPYmpl
Y3QgKndpZGdldE9iaikgPSAwOworICAgIHZpcnR1YWwgdm9pZCBwYWludENvbWJvQm94QXJyb3co
UVBhaW50ZXIqLCBjb25zdCBRU3R5bGVJbnRlcmZhY2VPcHRpb24mLCBRT2JqZWN0ICp3aWRnZXRP
YmopID0gMDsKKworICAgIHZpcnR1YWwgdm9pZCBwYWludFNsaWRlclRyYWNrKFFQYWludGVyKiwg
Y29uc3QgUVN0eWxlSW50ZXJmYWNlT3B0aW9uJiwgUU9iamVjdCAqd2lkZ2V0T2JqKSA9IDA7Cisg
ICAgdmlydHVhbCB2b2lkIHBhaW50U2xpZGVyVGh1bWIoUVBhaW50ZXIqLCBjb25zdCBRU3R5bGVJ
bnRlcmZhY2VPcHRpb24mLCBRT2JqZWN0ICp3aWRnZXRPYmopID0gMDsKKyAgICB2aXJ0dWFsIHZv
aWQgcGFpbnRJbm5lclNwaW5CdXR0b24oUVBhaW50ZXIqLCBjb25zdCBRU3R5bGVJbnRlcmZhY2VP
cHRpb24mLCBib29sIHNwaW5Cb3hVcCwgUU9iamVjdCogd2lkZ2V0T2JqKSA9IDA7CisgICAgdmly
dHVhbCB2b2lkIHBhaW50UHJvZ3Jlc3NCYXIoUVBhaW50ZXIqLCBjb25zdCBRU3R5bGVJbnRlcmZh
Y2VPcHRpb24mLCBkb3VibGUgcHJvZ3Jlc3MsIGRvdWJsZSBhbmltYXRpb25Qcm9ncmVzcywgUU9i
amVjdCogd2lkZ2V0T2JqKSA9IDA7CisKKyAgICB2aXJ0dWFsIGludCBzY3JvbGxCYXJFeHRlbnQo
Ym9vbCBtaW5pKSA9IDA7CisgICAgdmlydHVhbCBib29sIHNjcm9sbEJhck1pZGRsZUNsaWNrQWJz
b2x1dGVQb3NpdGlvblN0eWxlSGludCgpIGNvbnN0ID0gMDsKKyAgICB2aXJ0dWFsIHZvaWQgcGFp
bnRTY3JvbGxDb3JuZXIoUVBhaW50ZXIqLCBjb25zdCBRUmVjdCYsIFFPYmplY3QqIHdpZGdldE9i
aikgPSAwOworCisgICAgdmlydHVhbCBTdWJDb250cm9sIGhpdFRlc3RTY3JvbGxCYXIoY29uc3Qg
UVN0eWxlSW50ZXJmYWNlT3B0aW9uJiwgY29uc3QgUVBvaW50JiBwb3MpID0gMDsKKyAgICB2aXJ0
dWFsIFFSZWN0IHNjcm9sbEJhclN1YkNvbnRyb2xSZWN0KGNvbnN0IFFTdHlsZUludGVyZmFjZU9w
dGlvbiYsIFN1YkNvbnRyb2wpID0gMDsKKyAgICB2aXJ0dWFsIHZvaWQgcGFpbnRTY3JvbGxCYXIo
UVBhaW50ZXIqLCBjb25zdCBRU3R5bGVJbnRlcmZhY2VPcHRpb24mLCBRT2JqZWN0KiB3aWRnZXRP
YmopID0gMDsKKworICAgIHZpcnR1YWwgUU9iamVjdCogd2lkZ2V0Rm9yUGFpbnRlcihRUGFpbnRl
ciopID0gMDsKKworICAgIHZpcnR1YWwgYm9vbCBpc1ZhbGlkKCkgY29uc3QgPSAwOworCisgICAg
c3RhdGljIFFTdHlsZSogc3R5bGVGb3JQYWdlKFBhZ2UqKTsKK307CisKK1FfREVDTEFSRV9PUEVS
QVRPUlNfRk9SX0ZMQUdTKFFTdHlsZUludGVyZmFjZTo6U3RhdGUpCisKK3N0cnVjdCBRU3R5bGVJ
bnRlcmZhY2VPcHRpb24geworICAgIFFTdHlsZUludGVyZmFjZU9wdGlvbigpCisgICAgICAgIDog
c3RhdGUoUVN0eWxlSW50ZXJmYWNlOjpTdGF0ZV9Ob25lKQorICAgICAgICAsIGRpcmVjdGlvbihR
dDo6TGF5b3V0RGlyZWN0aW9uQXV0bykKKyAgICB7CisgICAgICAgIHNsaWRlci5vcmllbnRhdGlv
biA9IFF0OjpIb3Jpem9udGFsOworICAgICAgICBzbGlkZXIudXBzaWRlRG93biA9IGZhbHNlOwor
ICAgICAgICBzbGlkZXIubWluaW11bSA9IDA7CisgICAgICAgIHNsaWRlci5tYXhpbXVtID0gMDsK
KyAgICAgICAgc2xpZGVyLnBvc2l0aW9uID0gMDsKKyAgICAgICAgc2xpZGVyLnZhbHVlID0gMDsK
KyAgICAgICAgc2xpZGVyLnNpbmdsZVN0ZXAgPSAwOworICAgICAgICBzbGlkZXIucGFnZVN0ZXAg
PSAwOworICAgICAgICBzbGlkZXIuYWN0aXZlU3ViQ29udHJvbHMgPSBRU3R5bGVJbnRlcmZhY2U6
OlNDX05vbmU7CisgICAgfQorCisgICAgUVN0eWxlSW50ZXJmYWNlOjpTdGF0ZSBzdGF0ZTsKKyAg
ICBRUmVjdCByZWN0OworICAgIFF0OjpMYXlvdXREaXJlY3Rpb24gZGlyZWN0aW9uOworICAgIFFQ
YWxldHRlIHBhbGV0dGU7CisKKyAgICAvLyBTbGlkZXIgZmVhdHVyZXMKKyAgICBzdHJ1Y3Qgewor
ICAgICAgICBRdDo6T3JpZW50YXRpb24gb3JpZW50YXRpb247CisgICAgICAgIGJvb2wgdXBzaWRl
RG93bjsKKyAgICAgICAgaW50IG1pbmltdW07CisgICAgICAgIGludCBtYXhpbXVtOworICAgICAg
ICBpbnQgcG9zaXRpb247CisgICAgICAgIGludCB2YWx1ZTsKKyAgICAgICAgaW50IHNpbmdsZVN0
ZXA7CisgICAgICAgIGludCBwYWdlU3RlcDsKKyAgICAgICAgUVN0eWxlSW50ZXJmYWNlOjpTdWJD
b250cm9sIGFjdGl2ZVN1YkNvbnRyb2xzOworICAgIH0gc2xpZGVyOworfTsKKworfQorCisjZW5k
aWYgLy8gUVN0eWxlSW50ZXJmYWNlX2gKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL3F0L1JlbmRlclRoZW1lUVN0eWxlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3F0
L1JlbmRlclRoZW1lUVN0eWxlLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi40MDhkMDAzZThjNzcxNjQxMTFmYTY4
NzAxZTEwYWUzN2UxZGI5ZTg1Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vcXQvUmVuZGVyVGhlbWVRU3R5bGUuY3BwCkBAIC0wLDAgKzEsNjMwIEBACisvKgorICog
VGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIFdlYktpdCBwcm9qZWN0LgorICoKKyAqIENvcHlyaWdo
dCAoQykgMjAwOC0yMDEyIE5va2lhIENvcnBvcmF0aW9uIGFuZC9vciBpdHMgc3Vic2lkaWFyeSgt
aWVzKQorICoKKyAqIENvcHlyaWdodCAoQykgMjAwNiBaYWNrIFJ1c2luIDx6YWNrQGtkZS5vcmc+
CisgKiAgICAgICAgICAgICAgIDIwMDYgRGlyayBNdWVsbGVyIDxtdWVsbGVyQGtkZS5vcmc+Cisg
KiAgICAgICAgICAgICAgIDIwMDYgTmlrb2xhcyBaaW1tZXJtYW5uIDx6aW1tZXJtYW5uQGtkZS5v
cmc+CisgKiBDb3B5cmlnaHQgKEMpIDIwMDggSG9sZ2VyIEhhbnMgUGV0ZXIgRnJleXRoZXIKKyAq
CisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNv
ZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRl
ciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNl
IGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAq
IHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIg
dmVyc2lvbi4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUg
dGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0
aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3Ig
RklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogTGlicmFy
eSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNo
b3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJs
aWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZ
SU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRp
b24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCisgKiBCb3N0b24sIE1B
IDAyMTEwLTEzMDEsIFVTQS4KKyAqCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1
ZGUgIlJlbmRlclRoZW1lUVN0eWxlLmgiCisKKyNpbmNsdWRlICJDU1NGb250U2VsZWN0b3IuaCIK
KyNpbmNsdWRlICJDU1NWYWx1ZUtleXdvcmRzLmgiCisjaW5jbHVkZSAiQ2hyb21lLmgiCisjaW5j
bHVkZSAiQ2hyb21lQ2xpZW50LmgiCisjaW5jbHVkZSAiQ29sb3IuaCIKKyNpbmNsdWRlICJEb2N1
bWVudC5oIgorI2luY2x1ZGUgIkZvbnQuaCIKKyNpbmNsdWRlICJGb250U2VsZWN0b3IuaCIKKyNp
bmNsdWRlICJHcmFwaGljc0NvbnRleHQuaCIKKyNpbmNsdWRlICJIVE1MSW5wdXRFbGVtZW50Lmgi
CisjaW5jbHVkZSAiSFRNTE5hbWVzLmgiCisjaW5jbHVkZSAiTG9jYWxpemVkU3RyaW5ncy5oIgor
I2luY2x1ZGUgIk5vdEltcGxlbWVudGVkLmgiCisjaW5jbHVkZSAiUGFnZS5oIgorI2luY2x1ZGUg
IlBhaW50SW5mby5oIgorI2luY2x1ZGUgIlFXZWJQYWdlQ2xpZW50LmgiCisjaW5jbHVkZSAiUmVu
ZGVyQm94LmgiCisjaWYgRU5BQkxFKFBST0dSRVNTX0VMRU1FTlQpCisjaW5jbHVkZSAiUmVuZGVy
UHJvZ3Jlc3MuaCIKKyNlbmRpZgorI2luY2x1ZGUgIlJlbmRlclNsaWRlci5oIgorI2luY2x1ZGUg
IlNjcm9sbGJhclRoZW1lUVN0eWxlLmgiCisjaW5jbHVkZSAiU2xpZGVyVGh1bWJFbGVtZW50Lmgi
CisjaW5jbHVkZSAiU3R5bGVSZXNvbHZlci5oIgorI2luY2x1ZGUgIlVzZXJBZ2VudFN0eWxlU2hl
ZXRzLmgiCisKKyNpbmNsdWRlIDxRUGFpbnRlcj4KKworbmFtZXNwYWNlIFdlYkNvcmUgeworCit1
c2luZyBuYW1lc3BhY2UgSFRNTE5hbWVzOworCitRU2hhcmVkUG9pbnRlcjxTdHlsZVBhaW50ZXI+
IFJlbmRlclRoZW1lUVN0eWxlOjpnZXRTdHlsZVBhaW50ZXIoY29uc3QgUGFpbnRJbmZvJiBwYWlu
dEluZm8pCit7CisgICAgcmV0dXJuIFFTaGFyZWRQb2ludGVyPFN0eWxlUGFpbnRlcj4obmV3IFN0
eWxlUGFpbnRlclFTdHlsZSh0aGlzLCBwYWludEluZm8sIC8qUmVuZGVyT2JqZWN0Ki8wKSk7Cit9
CisKK1N0eWxlUGFpbnRlclFTdHlsZTo6U3R5bGVQYWludGVyUVN0eWxlKFJlbmRlclRoZW1lUVN0
eWxlKiB0aGVtZSwgY29uc3QgUGFpbnRJbmZvJiBwYWludEluZm8sIFJlbmRlck9iamVjdCogcmVu
ZGVyT2JqZWN0KQorICAgIDogU3R5bGVQYWludGVyKHRoZW1lLCBwYWludEluZm8pCisgICAgLCBz
dHlsZUludGVyZmFjZSh0aGVtZS0+c3R5bGVJbnRlcmZhY2UoKSkKKyAgICAsIGFwcGVhcmFuY2Uo
Tm9Db250cm9sUGFydCkKK3sKKyAgICBpbml0KHBhaW50SW5mby5jb250ZXh0ID8gcGFpbnRJbmZv
LmNvbnRleHQgOiAwKTsKKyAgICBpZiAocmVuZGVyT2JqZWN0KQorICAgICAgICBhcHBlYXJhbmNl
ID0gdGhlbWUtPmluaXRpYWxpemVDb21tb25RU3R5bGVPcHRpb25zKHN0eWxlT3B0aW9uLCByZW5k
ZXJPYmplY3QpOworfQorCitTdHlsZVBhaW50ZXJRU3R5bGU6OlN0eWxlUGFpbnRlclFTdHlsZShT
Y3JvbGxiYXJUaGVtZVFTdHlsZSogdGhlbWUsIEdyYXBoaWNzQ29udGV4dCogY29udGV4dCkKKyAg
ICA6IFN0eWxlUGFpbnRlcigpCisgICAgLCBzdHlsZUludGVyZmFjZSh0aGVtZS0+c3R5bGVJbnRl
cmZhY2UoKSkKKyAgICAsIGFwcGVhcmFuY2UoTm9Db250cm9sUGFydCkKK3sKKyAgICBpbml0KGNv
bnRleHQpOworfQorCit2b2lkIFN0eWxlUGFpbnRlclFTdHlsZTo6aW5pdChHcmFwaGljc0NvbnRl
eHQqIGNvbnRleHQpCit7CisgICAgcGFpbnRlciA9IHN0YXRpY19jYXN0PFFQYWludGVyKj4oY29u
dGV4dC0+cGxhdGZvcm1Db250ZXh0KCkpOworICAgIHdpZGdldCA9IHN0eWxlSW50ZXJmYWNlLT53
aWRnZXRGb3JQYWludGVyKHBhaW50ZXIpOworCisgICAgaWYgKHdpZGdldCkgeworICAgICAgICBz
dHlsZU9wdGlvbi5wYWxldHRlID0gd2lkZ2V0LT5wcm9wZXJ0eSgicGFsZXR0ZSIpLnZhbHVlPFFQ
YWxldHRlPigpOworICAgICAgICBzdHlsZU9wdGlvbi5yZWN0ID0gd2lkZ2V0LT5wcm9wZXJ0eSgi
cmVjdCIpLnZhbHVlPFFSZWN0PigpOworICAgICAgICBzdHlsZU9wdGlvbi5kaXJlY3Rpb24gPSBz
dGF0aWNfY2FzdDxRdDo6TGF5b3V0RGlyZWN0aW9uPih3aWRnZXQtPnByb3BlcnR5KCJsYXlvdXRE
aXJlY3Rpb24iKS50b0ludCgpKTsKKyAgICB9CisKKyAgICBTdHlsZVBhaW50ZXI6OmluaXQoY29u
dGV4dCk7Cit9CisKK1Bhc3NSZWZQdHI8UmVuZGVyVGhlbWU+IFJlbmRlclRoZW1lUVN0eWxlOjpj
cmVhdGUoUGFnZSogcGFnZSkKK3sKKyAgICByZXR1cm4gYWRvcHRSZWYobmV3IFJlbmRlclRoZW1l
UVN0eWxlKHBhZ2UpKTsKK30KKworc3RhdGljIFF0U3R5bGVGYWN0b3J5RnVuY3Rpb24gc3R5bGVG
YWN0b3J5RnVuY3Rpb247CisKK3ZvaWQgUmVuZGVyVGhlbWVRU3R5bGU6OnNldFN0eWxlRmFjdG9y
eUZ1bmN0aW9uKFF0U3R5bGVGYWN0b3J5RnVuY3Rpb24gZnVuY3Rpb24pCit7CisgICAgc3R5bGVG
YWN0b3J5RnVuY3Rpb24gPSBmdW5jdGlvbjsKK30KKworUXRTdHlsZUZhY3RvcnlGdW5jdGlvbiBS
ZW5kZXJUaGVtZVFTdHlsZTo6c3R5bGVGYWN0b3J5KCkKK3sKKyAgICByZXR1cm4gc3R5bGVGYWN0
b3J5RnVuY3Rpb247Cit9CisKK1JlbmRlclRoZW1lUVN0eWxlOjpSZW5kZXJUaGVtZVFTdHlsZShQ
YWdlKiBwYWdlKQorICAgIDogUmVuZGVyVGhlbWVRdChwYWdlKQorICAgICwgbV9zdHlsZUludGVy
ZmFjZShhZG9wdFB0cihzdHlsZUZhY3RvcnlGdW5jdGlvbihwYWdlKSkpCit7CisgICAgaW50IGJ1
dHRvblBpeGVsU2l6ZSA9IDA7CisgICAgbV9zdHlsZUludGVyZmFjZS0+Z2V0QnV0dG9uTWV0cmlj
cygmbV9idXR0b25Gb250RmFtaWx5LCAmYnV0dG9uUGl4ZWxTaXplKTsKKyNpZmRlZiBRX1dTX01B
QworICAgIG1fYnV0dG9uRm9udFBpeGVsU2l6ZSA9IGJ1dHRvblBpeGVsU2l6ZTsKKyNlbmRpZgor
fQorCitSZW5kZXJUaGVtZVFTdHlsZTo6flJlbmRlclRoZW1lUVN0eWxlKCkKK3sKK30KKwordm9p
ZCBSZW5kZXJUaGVtZVFTdHlsZTo6c2V0UGFsZXR0ZUZyb21QYWdlQ2xpZW50SWZFeGlzdHMoUVBh
bGV0dGUmIHBhbGV0dGUpIGNvbnN0Cit7CisgICAgaWYgKCFtX3BhZ2UpCisgICAgICAgIHJldHVy
bjsKKworICAgIEFTU0VSVChtX3BhZ2UtPmNocm9tZSgpKTsKKyAgICBDaHJvbWVDbGllbnQqIGNo
cm9tZUNsaWVudCA9IG1fcGFnZS0+Y2hyb21lKCktPmNsaWVudCgpOworICAgIGlmICghY2hyb21l
Q2xpZW50KQorICAgICAgICByZXR1cm47CisKKyAgICBpZiAoUVdlYlBhZ2VDbGllbnQqIHBhZ2VD
bGllbnQgPSBjaHJvbWVDbGllbnQtPnBsYXRmb3JtUGFnZUNsaWVudCgpKQorICAgICAgICBwYWxl
dHRlID0gcGFnZUNsaWVudC0+cGFsZXR0ZSgpOworfQorCitRUmVjdCBSZW5kZXJUaGVtZVFTdHls
ZTo6aW5mbGF0ZUJ1dHRvblJlY3QoY29uc3QgUVJlY3QmIG9yaWdpbmFsUmVjdCkgY29uc3QKK3sK
KyAgICBRUmVjdCBsYXlvdXRSZWN0ID0gbV9zdHlsZUludGVyZmFjZS0+YnV0dG9uU3ViRWxlbWVu
dFJlY3QoUVN0eWxlSW50ZXJmYWNlOjpQdXNoQnV0dG9uTGF5b3V0SXRlbSwgUVN0eWxlSW50ZXJm
YWNlOjpTdGF0ZV9TbWFsbCwgb3JpZ2luYWxSZWN0KTsKKyAgICBpZiAoIWxheW91dFJlY3QuaXNO
dWxsKCkpIHsKKyAgICAgICAgaW50IHBhZGRpbmdMZWZ0ID0gbGF5b3V0UmVjdC5sZWZ0KCkgLSBv
cmlnaW5hbFJlY3QubGVmdCgpOworICAgICAgICBpbnQgcGFkZGluZ1JpZ2h0ID0gb3JpZ2luYWxS
ZWN0LnJpZ2h0KCkgLSBsYXlvdXRSZWN0LnJpZ2h0KCk7CisgICAgICAgIGludCBwYWRkaW5nVG9w
ID0gbGF5b3V0UmVjdC50b3AoKSAtIG9yaWdpbmFsUmVjdC50b3AoKTsKKyAgICAgICAgaW50IHBh
ZGRpbmdCb3R0b20gPSBvcmlnaW5hbFJlY3QuYm90dG9tKCkgLSBsYXlvdXRSZWN0LmJvdHRvbSgp
OworCisgICAgICAgIHJldHVybiBvcmlnaW5hbFJlY3QuYWRqdXN0ZWQoLXBhZGRpbmdMZWZ0LCAt
cGFkZGluZ1RvcCwgcGFkZGluZ1JpZ2h0LCBwYWRkaW5nQm90dG9tKTsKKyAgICB9CisgICAgcmV0
dXJuIG9yaWdpbmFsUmVjdDsKK30KKwordm9pZCBSZW5kZXJUaGVtZVFTdHlsZTo6Y29tcHV0ZVNp
emVCYXNlZE9uU3R5bGUoUmVuZGVyU3R5bGUqIHJlbmRlclN0eWxlKSBjb25zdAoreworICAgIFFT
aXplIHNpemUoMCwgMCk7CisgICAgY29uc3QgUUZvbnRNZXRyaWNzIGZtKHJlbmRlclN0eWxlLT5m
b250KCkuc3ludGhldGljRm9udCgpKTsKKworICAgIHN3aXRjaCAocmVuZGVyU3R5bGUtPmFwcGVh
cmFuY2UoKSkgeworICAgIGNhc2UgVGV4dEFyZWFQYXJ0OgorICAgIGNhc2UgU2VhcmNoRmllbGRQ
YXJ0OgorICAgIGNhc2UgVGV4dEZpZWxkUGFydDogeworICAgICAgICBpbnQgcGFkZGluZyA9IG1f
c3R5bGVJbnRlcmZhY2UtPmZpbmRGcmFtZUxpbmVXaWR0aCgpOworICAgICAgICByZW5kZXJTdHls
ZS0+c2V0UGFkZGluZ0xlZnQoTGVuZ3RoKHBhZGRpbmcsIEZpeGVkKSk7CisgICAgICAgIHJlbmRl
clN0eWxlLT5zZXRQYWRkaW5nUmlnaHQoTGVuZ3RoKHBhZGRpbmcsIEZpeGVkKSk7CisgICAgICAg
IHJlbmRlclN0eWxlLT5zZXRQYWRkaW5nVG9wKExlbmd0aChwYWRkaW5nLCBGaXhlZCkpOworICAg
ICAgICByZW5kZXJTdHlsZS0+c2V0UGFkZGluZ0JvdHRvbShMZW5ndGgocGFkZGluZywgRml4ZWQp
KTsKKyAgICAgICAgYnJlYWs7CisgICAgfQorICAgIGRlZmF1bHQ6CisgICAgICAgIGJyZWFrOwor
ICAgIH0KKyAgICAvLyBJZiB0aGUgd2lkdGggYW5kIGhlaWdodCBhcmUgYm90aCBzcGVjaWZpZWQs
IHRoZW4gd2UgaGF2ZSBub3RoaW5nIHRvIGRvLgorICAgIGlmICghcmVuZGVyU3R5bGUtPndpZHRo
KCkuaXNJbnRyaW5zaWNPckF1dG8oKSAmJiAhcmVuZGVyU3R5bGUtPmhlaWdodCgpLmlzQXV0bygp
KQorICAgICAgICByZXR1cm47CisKKyAgICBzd2l0Y2ggKHJlbmRlclN0eWxlLT5hcHBlYXJhbmNl
KCkpIHsKKyAgICBjYXNlIENoZWNrYm94UGFydDogeworICAgICAgICBpbnQgY2hlY2tCb3hXaWR0
aCA9IG1fc3R5bGVJbnRlcmZhY2UtPnNpbXBsZVBpeGVsTWV0cmljKFFTdHlsZUludGVyZmFjZTo6
UE1fSW5kaWNhdG9yV2lkdGgsIFFTdHlsZUludGVyZmFjZTo6U3RhdGVfU21hbGwpOworICAgICAg
ICBjaGVja0JveFdpZHRoICo9IHJlbmRlclN0eWxlLT5lZmZlY3RpdmVab29tKCk7CisgICAgICAg
IHNpemUgPSBRU2l6ZShjaGVja0JveFdpZHRoLCBjaGVja0JveFdpZHRoKTsKKyAgICAgICAgYnJl
YWs7CisgICAgfQorICAgIGNhc2UgUmFkaW9QYXJ0OiB7CisgICAgICAgIGludCByYWRpb1dpZHRo
ID0gbV9zdHlsZUludGVyZmFjZS0+c2ltcGxlUGl4ZWxNZXRyaWMoUVN0eWxlSW50ZXJmYWNlOjpQ
TV9FeGNsdXNpdmVJbmRpY2F0b3JXaWR0aCwgUVN0eWxlSW50ZXJmYWNlOjpTdGF0ZV9TbWFsbCk7
CisgICAgICAgIHJhZGlvV2lkdGggKj0gcmVuZGVyU3R5bGUtPmVmZmVjdGl2ZVpvb20oKTsKKyAg
ICAgICAgc2l6ZSA9IFFTaXplKHJhZGlvV2lkdGgsIHJhZGlvV2lkdGgpOworICAgICAgICBicmVh
azsKKyAgICB9CisgICAgY2FzZSBQdXNoQnV0dG9uUGFydDoKKyAgICBjYXNlIEJ1dHRvblBhcnQ6
IHsKKyAgICAgICAgUVNpemUgY29udGVudFNpemUgPSBmbS5zaXplKFF0OjpUZXh0U2hvd01uZW1v
bmljLCBRU3RyaW5nOjpmcm9tTGF0aW4xKCJYIikpOworICAgICAgICBRU2l6ZSBwdXNoQnV0dG9u
U2l6ZSA9IG1fc3R5bGVJbnRlcmZhY2UtPnNpemVGcm9tQ29udGVudHMoUVN0eWxlSW50ZXJmYWNl
OjpDVF9QdXNoQnV0dG9uLCBRU3R5bGVJbnRlcmZhY2U6OlN0YXRlX1NtYWxsLCBjb250ZW50U2l6
ZSk7CisgICAgICAgIFFSZWN0IGxheW91dFJlY3QgPSBtX3N0eWxlSW50ZXJmYWNlLT5idXR0b25T
dWJFbGVtZW50UmVjdChRU3R5bGVJbnRlcmZhY2U6OlB1c2hCdXR0b25MYXlvdXRJdGVtLCBRU3R5
bGVJbnRlcmZhY2U6OlN0YXRlX1NtYWxsLCBRUmVjdCgwLCAwLCBwdXNoQnV0dG9uU2l6ZS53aWR0
aCgpLCBwdXNoQnV0dG9uU2l6ZS5oZWlnaHQoKSkpOworCisgICAgICAgIC8vIElmIHRoZSBzdHls
ZSBzdXBwb3J0cyBsYXlvdXQgcmVjdHMgd2UgdXNlIHRoYXQsIGFuZCAgY29tcGVuc2F0ZSBhY2Nv
cmRpbmdseQorICAgICAgICAvLyBpbiBwYWludEJ1dHRvbigpIGJlbG93LgorICAgICAgICBpZiAo
IWxheW91dFJlY3QuaXNOdWxsKCkpCisgICAgICAgICAgICBzaXplLnNldEhlaWdodChsYXlvdXRS
ZWN0LmhlaWdodCgpKTsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgc2l6ZS5zZXRIZWlnaHQo
cHVzaEJ1dHRvblNpemUuaGVpZ2h0KCkpOworCisgICAgICAgIGJyZWFrOworICAgIH0KKyAgICBj
YXNlIE1lbnVsaXN0UGFydDogeworICAgICAgICBpbnQgY29udGVudEhlaWdodCA9IHFNYXgoZm0u
bGluZVNwYWNpbmcoKSwgMTQpICsgMjsKKyAgICAgICAgUVNpemUgbWVudUxpc3RTaXplID0gbV9z
dHlsZUludGVyZmFjZS0+c2l6ZUZyb21Db250ZW50cyhRU3R5bGVJbnRlcmZhY2U6OkNUX0NvbWJv
Qm94LCBRU3R5bGVJbnRlcmZhY2U6OlN0YXRlX1NtYWxsLCBRU2l6ZSgwLCBjb250ZW50SGVpZ2h0
KSk7CisgICAgICAgIHNpemUuc2V0SGVpZ2h0KG1lbnVMaXN0U2l6ZS5oZWlnaHQoKSk7CisgICAg
ICAgIGJyZWFrOworICAgIH0KKyAgICBkZWZhdWx0OgorICAgICAgICBicmVhazsKKyAgICB9CisK
KyAgICAvLyBGSVhNRTogQ2hlY2sgaXMgZmxhd2VkLCBzaW5jZSBpdCBkb2Vzbid0IHRha2UgbWlu
LXdpZHRoL21heC13aWR0aCBpbnRvIGFjY291bnQuCisgICAgaWYgKHJlbmRlclN0eWxlLT53aWR0
aCgpLmlzSW50cmluc2ljT3JBdXRvKCkgJiYgc2l6ZS53aWR0aCgpID4gMCkKKyAgICAgICAgcmVu
ZGVyU3R5bGUtPnNldE1pbldpZHRoKExlbmd0aChzaXplLndpZHRoKCksIEZpeGVkKSk7CisgICAg
aWYgKHJlbmRlclN0eWxlLT5oZWlnaHQoKS5pc0F1dG8oKSAmJiBzaXplLmhlaWdodCgpID4gMCkK
KyAgICAgICAgcmVuZGVyU3R5bGUtPnNldE1pbkhlaWdodChMZW5ndGgoc2l6ZS5oZWlnaHQoKSwg
Rml4ZWQpKTsKK30KKworCisKK3ZvaWQgUmVuZGVyVGhlbWVRU3R5bGU6OmFkanVzdEJ1dHRvblN0
eWxlKFN0eWxlUmVzb2x2ZXIqIHN0eWxlUmVzb2x2ZXIsIFJlbmRlclN0eWxlKiBzdHlsZSwgRWxl
bWVudCopIGNvbnN0Cit7CisgICAgLy8gRGl0Y2ggdGhlIGJvcmRlci4KKyAgICBzdHlsZS0+cmVz
ZXRCb3JkZXIoKTsKKworI2lmZGVmIFFfV1NfTUFDCisgICAgaWYgKHN0eWxlLT5hcHBlYXJhbmNl
KCkgPT0gUHVzaEJ1dHRvblBhcnQpIHsKKyAgICAgICAgLy8gVGhlIE1hYyBwb3J0cyBpZ25vcmUg
dGhlIHNwZWNpZmllZCBoZWlnaHQgZm9yIDxpbnB1dCB0eXBlPSJidXR0b24iPiBlbGVtZW50cwor
ICAgICAgICAvLyB1bmxlc3MgYSBib3JkZXIgYW5kL29yIGJhY2tncm91bmQgQ1NTIHByb3BlcnR5
IGlzIGFsc28gc3BlY2lmaWVkLgorICAgICAgICBzdHlsZS0+c2V0SGVpZ2h0KExlbmd0aChBdXRv
KSk7CisgICAgfQorI2VuZGlmCisKKyAgICBGb250RGVzY3JpcHRpb24gZm9udERlc2NyaXB0aW9u
ID0gc3R5bGUtPmZvbnREZXNjcmlwdGlvbigpOworICAgIGZvbnREZXNjcmlwdGlvbi5zZXRJc0Fi
c29sdXRlU2l6ZSh0cnVlKTsKKworI2lmZGVmIFFfV1NfTUFDIC8vIFVzZSBmaXhlZCBmb250IHNp
emUgYW5kIGZhbWlseSBvbiBNYWMgKGxpa2UgU2FmYXJpIGRvZXMpCisgICAgZm9udERlc2NyaXB0
aW9uLnNldFNwZWNpZmllZFNpemUobV9idXR0b25Gb250UGl4ZWxTaXplKTsKKyAgICBmb250RGVz
Y3JpcHRpb24uc2V0Q29tcHV0ZWRTaXplKG1fYnV0dG9uRm9udFBpeGVsU2l6ZSk7CisjZWxzZQor
ICAgIGZvbnREZXNjcmlwdGlvbi5zZXRTcGVjaWZpZWRTaXplKHN0eWxlLT5mb250U2l6ZSgpKTsK
KyAgICBmb250RGVzY3JpcHRpb24uc2V0Q29tcHV0ZWRTaXplKHN0eWxlLT5mb250U2l6ZSgpKTsK
KyNlbmRpZgorCisgICAgRm9udEZhbWlseSBmb250RmFtaWx5OworICAgIGZvbnRGYW1pbHkuc2V0
RmFtaWx5KG1fYnV0dG9uRm9udEZhbWlseSk7CisgICAgZm9udERlc2NyaXB0aW9uLnNldEZhbWls
eShmb250RmFtaWx5KTsKKyAgICBzdHlsZS0+c2V0Rm9udERlc2NyaXB0aW9uKGZvbnREZXNjcmlw
dGlvbik7CisgICAgc3R5bGUtPmZvbnQoKS51cGRhdGUoc3R5bGVSZXNvbHZlci0+Zm9udFNlbGVj
dG9yKCkpOworICAgIHN0eWxlLT5zZXRMaW5lSGVpZ2h0KFJlbmRlclN0eWxlOjppbml0aWFsTGlu
ZUhlaWdodCgpKTsKKyAgICBzZXRCdXR0b25TaXplKHN0eWxlKTsKKyAgICBzZXRCdXR0b25QYWRk
aW5nKHN0eWxlKTsKK30KKwordm9pZCBSZW5kZXJUaGVtZVFTdHlsZTo6c2V0QnV0dG9uUGFkZGlu
ZyhSZW5kZXJTdHlsZSogc3R5bGUpIGNvbnN0Cit7CisgICAgLy8gRmFrZSBhIGJ1dHRvbiByZWN0
IGhlcmUsIHNpbmNlIHdlJ3JlIGp1c3QgY29tcHV0aW5nIGRlbHRhcworICAgIFFSZWN0IG9yaWdp
bmFsUmVjdCA9IFFSZWN0KDAsIDAsIDEwMCwgMzApOworCisgICAgLy8gRGVmYXVsdCBwYWRkaW5n
IGlzIGJhc2VkIG9uIHRoZSBidXR0b24gbWFyZ2luIHBpeGVsIG1ldHJpYworICAgIGludCBidXR0
b25NYXJnaW4gPSBtX3N0eWxlSW50ZXJmYWNlLT5idXR0b25NYXJnaW4oUVN0eWxlSW50ZXJmYWNl
OjpTdGF0ZV9TbWFsbCwgb3JpZ2luYWxSZWN0KTsKKyAgICBpbnQgcGFkZGluZ0xlZnQgPSBidXR0
b25NYXJnaW47CisgICAgaW50IHBhZGRpbmdSaWdodCA9IGJ1dHRvbk1hcmdpbjsKKyAgICBpbnQg
cGFkZGluZ1RvcCA9IGJ1dHRvbk1hcmdpbjsKKyAgICBpbnQgcGFkZGluZ0JvdHRvbSA9IGJ1dHRv
bk1hcmdpbjsKKworICAgIC8vIFRoZW4gY2hlY2sgaWYgdGhlIHN0eWxlIHVzZXMgbGF5b3V0IG1h
cmdpbnMKKyAgICBRUmVjdCBsYXlvdXRSZWN0ID0gbV9zdHlsZUludGVyZmFjZS0+YnV0dG9uU3Vi
RWxlbWVudFJlY3QoUVN0eWxlSW50ZXJmYWNlOjpQdXNoQnV0dG9uTGF5b3V0SXRlbSwKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFFTdHls
ZUludGVyZmFjZTo6U3RhdGVfU21hbGwsIG9yaWdpbmFsUmVjdCk7CisgICAgaWYgKCFsYXlvdXRS
ZWN0LmlzTnVsbCgpKSB7CisgICAgICAgIFFSZWN0IGNvbnRlbnRzUmVjdCA9IG1fc3R5bGVJbnRl
cmZhY2UtPmJ1dHRvblN1YkVsZW1lbnRSZWN0KFFTdHlsZUludGVyZmFjZTo6UHVzaEJ1dHRvbkNv
bnRlbnRzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgUVN0eWxlSW50ZXJmYWNlOjpTdGF0ZV9TbWFsbCwgb3JpZ2luYWxSZWN0
KTsKKyAgICAgICAgcGFkZGluZ0xlZnQgPSBjb250ZW50c1JlY3QubGVmdCgpIC0gbGF5b3V0UmVj
dC5sZWZ0KCk7CisgICAgICAgIHBhZGRpbmdSaWdodCA9IGxheW91dFJlY3QucmlnaHQoKSAtIGNv
bnRlbnRzUmVjdC5yaWdodCgpOworICAgICAgICBwYWRkaW5nVG9wID0gY29udGVudHNSZWN0LnRv
cCgpIC0gbGF5b3V0UmVjdC50b3AoKTsKKworICAgICAgICAvLyBDYW4ndCB1c2UgdGhpcyByaWdo
dCBub3cgYmVjYXVzZSB3ZSBkb24ndCBoYXZlIHRoZSBiYXNlbGluZSB0byBjb21wZW5zYXRlCisg
ICAgICAgIC8vIHBhZGRpbmdCb3R0b20gPSBsYXlvdXRSZWN0LmJvdHRvbSgpIC0gY29udGVudHNS
ZWN0LmJvdHRvbSgpOworICAgIH0KKyAgICBzdHlsZS0+c2V0UGFkZGluZ0xlZnQoTGVuZ3RoKHBh
ZGRpbmdMZWZ0LCBGaXhlZCkpOworICAgIHN0eWxlLT5zZXRQYWRkaW5nUmlnaHQoTGVuZ3RoKHBh
ZGRpbmdSaWdodCwgRml4ZWQpKTsKKyAgICBzdHlsZS0+c2V0UGFkZGluZ1RvcChMZW5ndGgocGFk
ZGluZ1RvcCwgRml4ZWQpKTsKKyAgICBzdHlsZS0+c2V0UGFkZGluZ0JvdHRvbShMZW5ndGgocGFk
ZGluZ0JvdHRvbSwgRml4ZWQpKTsKK30KKworYm9vbCBSZW5kZXJUaGVtZVFTdHlsZTo6cGFpbnRC
dXR0b24oUmVuZGVyT2JqZWN0KiBvLCBjb25zdCBQYWludEluZm8mIGksIGNvbnN0IEludFJlY3Qm
IHIpCit7CisgICAgU3R5bGVQYWludGVyUVN0eWxlIHAodGhpcywgaSwgbyk7CisgICAgaWYgKCFw
LmlzVmFsaWQoKSkKKyAgICAgICByZXR1cm4gdHJ1ZTsKKworICAgIHAuc3R5bGVPcHRpb24ucmVj
dCA9IHI7CisgICAgcC5zdHlsZU9wdGlvbi5zdGF0ZSB8PSBRU3R5bGVJbnRlcmZhY2U6OlN0YXRl
X1NtYWxsOworCisgICAgaWYgKHAuYXBwZWFyYW5jZSA9PSBQdXNoQnV0dG9uUGFydCB8fCBwLmFw
cGVhcmFuY2UgPT0gQnV0dG9uUGFydCkgeworICAgICAgICBwLnN0eWxlT3B0aW9uLnJlY3QgPSBp
bmZsYXRlQnV0dG9uUmVjdChwLnN0eWxlT3B0aW9uLnJlY3QpOworICAgICAgICBwLnBhaW50QnV0
dG9uKFFTdHlsZUludGVyZmFjZTo6UHVzaEJ1dHRvbik7CisgICAgfSBlbHNlIGlmIChwLmFwcGVh
cmFuY2UgPT0gUmFkaW9QYXJ0KQorICAgICAgICBwLnBhaW50QnV0dG9uKFFTdHlsZUludGVyZmFj
ZTo6UmFkaW9CdXR0b24pOworICAgIGVsc2UgaWYgKHAuYXBwZWFyYW5jZSA9PSBDaGVja2JveFBh
cnQpCisgICAgICAgIHAucGFpbnRCdXR0b24oUVN0eWxlSW50ZXJmYWNlOjpDaGVja0JveCk7CisK
KyAgICByZXR1cm4gZmFsc2U7Cit9CisKK2Jvb2wgUmVuZGVyVGhlbWVRU3R5bGU6OnBhaW50VGV4
dEZpZWxkKFJlbmRlck9iamVjdCogbywgY29uc3QgUGFpbnRJbmZvJiBpLCBjb25zdCBJbnRSZWN0
JiByKQoreworICAgIFN0eWxlUGFpbnRlclFTdHlsZSBwKHRoaXMsIGksIG8pOworICAgIGlmICgh
cC5pc1ZhbGlkKCkpCisgICAgICAgIHJldHVybiB0cnVlOworCisgICAgcC5zdHlsZU9wdGlvbi5y
ZWN0ID0gcjsKKyAgICBwLnN0eWxlT3B0aW9uLnN0YXRlIHw9IFFTdHlsZUludGVyZmFjZTo6U3Rh
dGVfU3Vua2VuOworCisgICAgLy8gR2V0IHRoZSBjb3JyZWN0IHRoZW1lIGRhdGEgZm9yIGEgdGV4
dCBmaWVsZAorICAgIGlmIChwLmFwcGVhcmFuY2UgIT0gVGV4dEZpZWxkUGFydAorICAgICAgICAm
JiBwLmFwcGVhcmFuY2UgIT0gU2VhcmNoRmllbGRQYXJ0CisgICAgICAgICYmIHAuYXBwZWFyYW5j
ZSAhPSBUZXh0QXJlYVBhcnQKKyAgICAgICAgJiYgcC5hcHBlYXJhbmNlICE9IExpc3Rib3hQYXJ0
KQorICAgICAgICByZXR1cm4gdHJ1ZTsKKworICAgIC8vIE5vdyBwYWludCB0aGUgdGV4dCBmaWVs
ZC4KKyAgICBwLnBhaW50VGV4dEZpZWxkKCk7CisgICAgcmV0dXJuIGZhbHNlOworfQorCit2b2lk
IFJlbmRlclRoZW1lUVN0eWxlOjphZGp1c3RUZXh0QXJlYVN0eWxlKFN0eWxlUmVzb2x2ZXIqIHN0
eWxlUmVzb2x2ZXIsIFJlbmRlclN0eWxlKiBzdHlsZSwgRWxlbWVudCogZWxlbWVudCkgY29uc3QK
K3sKKyAgICBhZGp1c3RUZXh0RmllbGRTdHlsZShzdHlsZVJlc29sdmVyLCBzdHlsZSwgZWxlbWVu
dCk7Cit9CisKK2Jvb2wgUmVuZGVyVGhlbWVRU3R5bGU6OnBhaW50VGV4dEFyZWEoUmVuZGVyT2Jq
ZWN0KiBvLCBjb25zdCBQYWludEluZm8mIGksIGNvbnN0IEludFJlY3QmIHIpCit7CisgICAgcmV0
dXJuIHBhaW50VGV4dEZpZWxkKG8sIGksIHIpOworfQorCit2b2lkIFJlbmRlclRoZW1lUVN0eWxl
OjpzZXRQb3B1cFBhZGRpbmcoUmVuZGVyU3R5bGUqIHN0eWxlKSBjb25zdAoreworICAgIGNvbnN0
IGludCBwYWRkaW5nTGVmdCA9IDQ7CisgICAgY29uc3QgaW50IHBhZGRpbmdSaWdodCA9IHN0eWxl
LT53aWR0aCgpLmlzRml4ZWQoKSB8fCBzdHlsZS0+d2lkdGgoKS5pc1BlcmNlbnQoKSA/IDUgOiA4
OworCisgICAgc3R5bGUtPnNldFBhZGRpbmdMZWZ0KExlbmd0aChwYWRkaW5nTGVmdCwgRml4ZWQp
KTsKKworICAgIGludCB3ID0gbV9zdHlsZUludGVyZmFjZS0+c2ltcGxlUGl4ZWxNZXRyaWMoUVN0
eWxlSW50ZXJmYWNlOjpQTV9CdXR0b25JY29uU2l6ZSk7CisgICAgc3R5bGUtPnNldFBhZGRpbmdS
aWdodChMZW5ndGgocGFkZGluZ1JpZ2h0ICsgdywgRml4ZWQpKTsKKworICAgIHN0eWxlLT5zZXRQ
YWRkaW5nVG9wKExlbmd0aCgyLCBGaXhlZCkpOworICAgIHN0eWxlLT5zZXRQYWRkaW5nQm90dG9t
KExlbmd0aCgyLCBGaXhlZCkpOworfQorCitRUGFsZXR0ZSBSZW5kZXJUaGVtZVFTdHlsZTo6Y29s
b3JQYWxldHRlKCkgY29uc3QKK3sKKyAgICBRUGFsZXR0ZSBwYWxldHRlID0gUmVuZGVyVGhlbWVR
dDo6Y29sb3JQYWxldHRlKCk7CisgICAgc2V0UGFsZXR0ZUZyb21QYWdlQ2xpZW50SWZFeGlzdHMo
cGFsZXR0ZSk7CisgICAgcmV0dXJuIHBhbGV0dGU7Cit9CisKK2Jvb2wgUmVuZGVyVGhlbWVRU3R5
bGU6OnBhaW50TWVudUxpc3QoUmVuZGVyT2JqZWN0KiBvLCBjb25zdCBQYWludEluZm8mIGksIGNv
bnN0IEludFJlY3QmIHIpCit7CisgICAgU3R5bGVQYWludGVyUVN0eWxlIHAodGhpcywgaSwgbyk7
CisgICAgaWYgKCFwLmlzVmFsaWQoKSkKKyAgICAgICAgcmV0dXJuIHRydWU7CisKKyAgICBwLnN0
eWxlT3B0aW9uLnJlY3QgPSByOworICAgIHAucGFpbnRDb21ib0JveCgpOworICAgIHJldHVybiBm
YWxzZTsKK30KKwordm9pZCBSZW5kZXJUaGVtZVFTdHlsZTo6YWRqdXN0TWVudUxpc3RCdXR0b25T
dHlsZShTdHlsZVJlc29sdmVyKiBzdHlsZVJlc29sdmVyLCBSZW5kZXJTdHlsZSogc3R5bGUsIEVs
ZW1lbnQqIGUpIGNvbnN0Cit7CisgICAgLy8gV09SS0FST1VORCBiZWNhdXNlIGh0bWwuY3NzIHNw
ZWNpZmllcyAtd2Via2l0LWJvcmRlci1yYWRpdXMgZm9yIDxzZWxlY3Q+IHNvIHdlIG92ZXJyaWRl
IGl0IGhlcmUKKyAgICAvLyBzZWUgYWxzbyBodHRwOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVn
LmNnaT9pZD0xODM5OQorICAgIHN0eWxlLT5yZXNldEJvcmRlclJhZGl1cygpOworCisgICAgUmVu
ZGVyVGhlbWVRdDo6YWRqdXN0TWVudUxpc3RCdXR0b25TdHlsZShzdHlsZVJlc29sdmVyLCBzdHls
ZSwgZSk7Cit9CisKK2Jvb2wgUmVuZGVyVGhlbWVRU3R5bGU6OnBhaW50TWVudUxpc3RCdXR0b24o
UmVuZGVyT2JqZWN0KiBvLCBjb25zdCBQYWludEluZm8mIGksCisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgY29uc3QgSW50UmVjdCYgcikKK3sKKyAgICBTdHlsZVBhaW50
ZXJRU3R5bGUgcCh0aGlzLCBpLCBvKTsKKyAgICBpZiAoIXAuaXNWYWxpZCgpKQorICAgICAgICBy
ZXR1cm4gdHJ1ZTsKKworICAgIHAuc3R5bGVPcHRpb24ucmVjdCA9IHI7CisgICAgcC5wYWludENv
bWJvQm94QXJyb3coKTsKKyAgICByZXR1cm4gZmFsc2U7Cit9CisKKyNpZiBFTkFCTEUoUFJPR1JF
U1NfRUxFTUVOVCkKK2RvdWJsZSBSZW5kZXJUaGVtZVFTdHlsZTo6YW5pbWF0aW9uRHVyYXRpb25G
b3JQcm9ncmVzc0JhcihSZW5kZXJQcm9ncmVzcyogcmVuZGVyUHJvZ3Jlc3MpIGNvbnN0Cit7Cisg
ICAgaWYgKHJlbmRlclByb2dyZXNzLT5wb3NpdGlvbigpID49IDApCisgICAgICAgIHJldHVybiAw
OworCisgICAgSW50U2l6ZSBzaXplID0gcmVuZGVyUHJvZ3Jlc3MtPnBpeGVsU25hcHBlZFNpemUo
KTsKKyAgICAvLyBGSVhNRTogVW50aWwgaHR0cDovL2J1Z3JlcG9ydHMucXQubm9raWEuY29tL2Jy
b3dzZS9RVEJVRy05MTcxIGlzIGZpeGVkLAorICAgIC8vIHdlIHNpbXVsYXRlIG9uZSBzcXVhcmUg
YW5pbWF0aW5nIGFjcm9zcyB0aGUgcHJvZ3Jlc3MgYmFyLgorICAgIHJldHVybiAoc2l6ZS53aWR0
aCgpIC8gbV9zdHlsZUludGVyZmFjZS0+cHJvZ3Jlc3NCYXJDaHVua1dpZHRoKHNpemUpKSAqIGFu
aW1hdGlvblJlcGVhdEludGVydmFsRm9yUHJvZ3Jlc3NCYXIocmVuZGVyUHJvZ3Jlc3MpOworfQor
Citib29sIFJlbmRlclRoZW1lUVN0eWxlOjpwYWludFByb2dyZXNzQmFyKFJlbmRlck9iamVjdCog
bywgY29uc3QgUGFpbnRJbmZvJiBwaSwgY29uc3QgSW50UmVjdCYgcikKK3sKKyAgICBpZiAoIW8t
PmlzUHJvZ3Jlc3MoKSkKKyAgICAgICAgcmV0dXJuIHRydWU7CisKKyAgICBTdHlsZVBhaW50ZXJR
U3R5bGUgcCh0aGlzLCBwaSwgbyk7CisgICAgaWYgKCFwLmlzVmFsaWQoKSkKKyAgICAgICByZXR1
cm4gdHJ1ZTsKKworICAgIHAuc3R5bGVPcHRpb24ucmVjdCA9IHI7CisgICAgUmVuZGVyUHJvZ3Jl
c3MqIHJlbmRlclByb2dyZXNzID0gdG9SZW5kZXJQcm9ncmVzcyhvKTsKKyAgICBwLnBhaW50UHJv
Z3Jlc3NCYXIocmVuZGVyUHJvZ3Jlc3MtPnBvc2l0aW9uKCksIHJlbmRlclByb2dyZXNzLT5hbmlt
YXRpb25Qcm9ncmVzcygpKTsKKyAgICByZXR1cm4gZmFsc2U7Cit9CisjZW5kaWYKKworYm9vbCBS
ZW5kZXJUaGVtZVFTdHlsZTo6cGFpbnRTbGlkZXJUcmFjayhSZW5kZXJPYmplY3QqIG8sIGNvbnN0
IFBhaW50SW5mbyYgcGksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29u
c3QgSW50UmVjdCYgcikKK3sKKyAgICBTdHlsZVBhaW50ZXJRU3R5bGUgcCh0aGlzLCBwaSwgbyk7
CisgICAgaWYgKCFwLmlzVmFsaWQoKSkKKyAgICAgICAgcmV0dXJuIHRydWU7CisKKyAgICBjb25z
dCBRUG9pbnQgdG9wTGVmdCA9IHIubG9jYXRpb24oKTsKKyAgICBwLnBhaW50ZXItPnRyYW5zbGF0
ZSh0b3BMZWZ0KTsKKworICAgIHAuc3R5bGVPcHRpb24ucmVjdCA9IHI7CisgICAgcC5zdHlsZU9w
dGlvbi5yZWN0Lm1vdmVUbyhRUG9pbnQoMCwgMCkpOworCisgICAgaWYgKHAuYXBwZWFyYW5jZSA9
PSBTbGlkZXJWZXJ0aWNhbFBhcnQpCisgICAgICAgIHAuc3R5bGVPcHRpb24uc2xpZGVyLm9yaWVu
dGF0aW9uID0gUXQ6OlZlcnRpY2FsOworCisgICAgaWYgKGlzUHJlc3NlZChvKSkKKyAgICAgICAg
cC5zdHlsZU9wdGlvbi5zdGF0ZSB8PSBRU3R5bGVJbnRlcmZhY2U6OlN0YXRlX1N1bmtlbjsKKwor
ICAgIC8vIHNvbWUgc3R5bGVzIG5lZWQgdGhpcyB0byBzaG93IGEgaGlnaGxpZ2h0IG9uIG9uZSBz
aWRlIG9mIHRoZSBncm9vdmUKKyAgICBIVE1MSW5wdXRFbGVtZW50KiBzbGlkZXIgPSBvLT5ub2Rl
KCktPnRvSW5wdXRFbGVtZW50KCk7CisgICAgaWYgKHNsaWRlcikgeworICAgICAgICBwLnN0eWxl
T3B0aW9uLnNsaWRlci51cHNpZGVEb3duID0gKHAuYXBwZWFyYW5jZSA9PSBTbGlkZXJIb3Jpem9u
dGFsUGFydCkgJiYgIW8tPnN0eWxlKCktPmlzTGVmdFRvUmlnaHREaXJlY3Rpb24oKTsKKyAgICAg
ICAgLy8gVXNlIHRoZSB3aWR0aCBhcyBhIG11bHRpcGxpZXIgaW4gY2FzZSB0aGUgc2xpZGVyIHZh
bHVlcyBhcmUgPD0gMQorICAgICAgICBjb25zdCBpbnQgd2lkdGggPSByLndpZHRoKCkgPiAwID8g
ci53aWR0aCgpIDogMTAwOworICAgICAgICBwLnN0eWxlT3B0aW9uLnNsaWRlci5tYXhpbXVtID0g
c2xpZGVyLT5tYXhpbXVtKCkgKiB3aWR0aDsKKyAgICAgICAgcC5zdHlsZU9wdGlvbi5zbGlkZXIu
bWluaW11bSA9IHNsaWRlci0+bWluaW11bSgpICogd2lkdGg7CisgICAgICAgIGlmICghcC5zdHls
ZU9wdGlvbi5zbGlkZXIudXBzaWRlRG93bikKKyAgICAgICAgICAgIHAuc3R5bGVPcHRpb24uc2xp
ZGVyLnBvc2l0aW9uID0gc2xpZGVyLT52YWx1ZUFzTnVtYmVyKCkgKiB3aWR0aDsKKyAgICAgICAg
ZWxzZQorICAgICAgICAgICAgcC5zdHlsZU9wdGlvbi5zbGlkZXIucG9zaXRpb24gPSBwLnN0eWxl
T3B0aW9uLnNsaWRlci5taW5pbXVtICsgcC5zdHlsZU9wdGlvbi5zbGlkZXIubWF4aW11bSAtIHNs
aWRlci0+dmFsdWVBc051bWJlcigpICogd2lkdGg7CisgICAgfQorCisgICAgcC5wYWludFNsaWRl
clRyYWNrKCk7CisKKyAgICBwLnBhaW50ZXItPnRyYW5zbGF0ZSgtdG9wTGVmdCk7CisgICAgcmV0
dXJuIGZhbHNlOworfQorCit2b2lkIFJlbmRlclRoZW1lUVN0eWxlOjphZGp1c3RTbGlkZXJUcmFj
a1N0eWxlKFN0eWxlUmVzb2x2ZXIqLCBSZW5kZXJTdHlsZSogc3R5bGUsIEVsZW1lbnQqKSBjb25z
dAoreworICAgIHN0eWxlLT5zZXRCb3hTaGFkb3cobnVsbHB0cik7Cit9CisKK2Jvb2wgUmVuZGVy
VGhlbWVRU3R5bGU6OnBhaW50U2xpZGVyVGh1bWIoUmVuZGVyT2JqZWN0KiBvLCBjb25zdCBQYWlu
dEluZm8mIHBpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IElu
dFJlY3QmIHIpCit7CisgICAgU3R5bGVQYWludGVyUVN0eWxlIHAodGhpcywgcGksIG8pOworICAg
IGlmICghcC5pc1ZhbGlkKCkpCisgICAgICAgIHJldHVybiB0cnVlOworCisgICAgY29uc3QgUVBv
aW50IHRvcExlZnQgPSByLmxvY2F0aW9uKCk7CisgICAgcC5wYWludGVyLT50cmFuc2xhdGUodG9w
TGVmdCk7CisKKyAgICBwLnN0eWxlT3B0aW9uLnJlY3QgPSByOworICAgIHAuc3R5bGVPcHRpb24u
cmVjdC5tb3ZlVG8oUVBvaW50KDAsIDApKTsKKyAgICBwLnN0eWxlT3B0aW9uLnNsaWRlci5vcmll
bnRhdGlvbiA9IFF0OjpIb3Jpem9udGFsOworICAgIGlmIChwLmFwcGVhcmFuY2UgPT0gU2xpZGVy
VGh1bWJWZXJ0aWNhbFBhcnQpCisgICAgICAgIHAuc3R5bGVPcHRpb24uc2xpZGVyLm9yaWVudGF0
aW9uID0gUXQ6OlZlcnRpY2FsOworICAgIGlmIChpc1ByZXNzZWQobykpCisgICAgICAgIHAuc3R5
bGVPcHRpb24uc3RhdGUgfD0gUVN0eWxlSW50ZXJmYWNlOjpTdGF0ZV9TdW5rZW47CisKKyAgICBw
LnBhaW50U2xpZGVyVGh1bWIoKTsKKworICAgIHAucGFpbnRlci0+dHJhbnNsYXRlKC10b3BMZWZ0
KTsKKyAgICByZXR1cm4gZmFsc2U7Cit9CisKK3ZvaWQgUmVuZGVyVGhlbWVRU3R5bGU6OmFkanVz
dFNsaWRlclRodW1iU3R5bGUoU3R5bGVSZXNvbHZlciogc3R5bGVSZXNvbHZlciwgUmVuZGVyU3R5
bGUqIHN0eWxlLCBFbGVtZW50KiBlbGVtZW50KSBjb25zdAoreworICAgIFJlbmRlclRoZW1lOjph
ZGp1c3RTbGlkZXJUaHVtYlN0eWxlKHN0eWxlUmVzb2x2ZXIsIHN0eWxlLCBlbGVtZW50KTsKKyAg
ICBzdHlsZS0+c2V0Qm94U2hhZG93KG51bGxwdHIpOworfQorCitib29sIFJlbmRlclRoZW1lUVN0
eWxlOjpwYWludFNlYXJjaEZpZWxkKFJlbmRlck9iamVjdCogbywgY29uc3QgUGFpbnRJbmZvJiBw
aSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBJbnRSZWN0JiBy
KQoreworICAgIHJldHVybiBwYWludFRleHRGaWVsZChvLCBwaSwgcik7Cit9CisKK3ZvaWQgUmVu
ZGVyVGhlbWVRU3R5bGU6OmFkanVzdFNlYXJjaEZpZWxkRGVjb3JhdGlvblN0eWxlKFN0eWxlUmVz
b2x2ZXIqIHN0eWxlUmVzb2x2ZXIsIFJlbmRlclN0eWxlKiBzdHlsZSwgRWxlbWVudCogZSkgY29u
c3QKK3sKKyAgICBub3RJbXBsZW1lbnRlZCgpOworICAgIFJlbmRlclRoZW1lOjphZGp1c3RTZWFy
Y2hGaWVsZERlY29yYXRpb25TdHlsZShzdHlsZVJlc29sdmVyLCBzdHlsZSwgZSk7Cit9CisKK2Jv
b2wgUmVuZGVyVGhlbWVRU3R5bGU6OnBhaW50U2VhcmNoRmllbGREZWNvcmF0aW9uKFJlbmRlck9i
amVjdCogbywgY29uc3QgUGFpbnRJbmZvJiBwaSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgY29uc3QgSW50UmVjdCYgcikKK3sKKyAgICBub3RJbXBsZW1l
bnRlZCgpOworICAgIHJldHVybiBSZW5kZXJUaGVtZTo6cGFpbnRTZWFyY2hGaWVsZERlY29yYXRp
b24obywgcGksIHIpOworfQorCit2b2lkIFJlbmRlclRoZW1lUVN0eWxlOjphZGp1c3RTZWFyY2hG
aWVsZFJlc3VsdHNEZWNvcmF0aW9uU3R5bGUoU3R5bGVSZXNvbHZlciogc3R5bGVSZXNvbHZlciwg
UmVuZGVyU3R5bGUqIHN0eWxlLCBFbGVtZW50KiBlKSBjb25zdAoreworICAgIG5vdEltcGxlbWVu
dGVkKCk7CisgICAgUmVuZGVyVGhlbWU6OmFkanVzdFNlYXJjaEZpZWxkUmVzdWx0c0RlY29yYXRp
b25TdHlsZShzdHlsZVJlc29sdmVyLCBzdHlsZSwgZSk7Cit9CisKK2Jvb2wgUmVuZGVyVGhlbWVR
U3R5bGU6OnBhaW50U2VhcmNoRmllbGRSZXN1bHRzRGVjb3JhdGlvbihSZW5kZXJPYmplY3QqIG8s
IGNvbnN0IFBhaW50SW5mbyYgcGksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBjb25zdCBJbnRSZWN0JiByKQoreworICAgIG5vdEltcGxlbWVu
dGVkKCk7CisgICAgcmV0dXJuIFJlbmRlclRoZW1lOjpwYWludFNlYXJjaEZpZWxkUmVzdWx0c0Rl
Y29yYXRpb24obywgcGksIHIpOworfQorCisjaWZuZGVmIFFUX05PX1NQSU5CT1gKKworYm9vbCBS
ZW5kZXJUaGVtZVFTdHlsZTo6cGFpbnRJbm5lclNwaW5CdXR0b24oUmVuZGVyT2JqZWN0KiBvLCBj
b25zdCBQYWludEluZm8mIHBhaW50SW5mbywgY29uc3QgSW50UmVjdCYgcmVjdCkKK3sKKyAgICBT
dHlsZVBhaW50ZXJRU3R5bGUgcCh0aGlzLCBwYWludEluZm8sIG8pOworICAgIGlmICghcC5pc1Zh
bGlkKCkpCisgICAgICAgcmV0dXJuIHRydWU7CisKKyAgICBwLnN0eWxlT3B0aW9uLnJlY3QgPSBy
ZWN0OworICAgIHAucGFpbnRJbm5lclNwaW5CdXR0b24oaXNTcGluVXBCdXR0b25QYXJ0UHJlc3Nl
ZChvKSk7CisgICAgcmV0dXJuIGZhbHNlOworfQorI2VuZGlmCisKK0NvbnRyb2xQYXJ0IFJlbmRl
clRoZW1lUVN0eWxlOjppbml0aWFsaXplQ29tbW9uUVN0eWxlT3B0aW9ucyhRU3R5bGVJbnRlcmZh
Y2VPcHRpb24gJm9wdGlvbiwgUmVuZGVyT2JqZWN0KiBvKSBjb25zdAoreworICAgIC8vIERlZmF1
bHQgYml0czogbm8gZm9jdXMsIG5vIG1vdXNlIG92ZXIKKyAgICBvcHRpb24uc3RhdGUgJj0gfihR
U3R5bGVJbnRlcmZhY2U6OlN0YXRlX0hhc0ZvY3VzIHwgUVN0eWxlSW50ZXJmYWNlOjpTdGF0ZV9N
b3VzZU92ZXIpOworCisgICAgaWYgKGlzUmVhZE9ubHlDb250cm9sKG8pKQorICAgICAgICAvLyBS
ZWFkb25seSBpcyBzdXBwb3J0ZWQgb24gdGV4dGZpZWxkcy4KKyAgICAgICAgb3B0aW9uLnN0YXRl
IHw9IFFTdHlsZUludGVyZmFjZTo6U3RhdGVfUmVhZE9ubHk7CisKKyAgICBvcHRpb24uZGlyZWN0
aW9uID0gUXQ6OkxlZnRUb1JpZ2h0OworCisgICAgaWYgKGlzSG92ZXJlZChvKSkKKyAgICAgICAg
b3B0aW9uLnN0YXRlIHw9IFFTdHlsZUludGVyZmFjZTo6U3RhdGVfTW91c2VPdmVyOworCisgICAg
c2V0UGFsZXR0ZUZyb21QYWdlQ2xpZW50SWZFeGlzdHMob3B0aW9uLnBhbGV0dGUpOworCisgICAg
aWYgKCFpc0VuYWJsZWQobykpIHsKKyAgICAgICAgb3B0aW9uLnBhbGV0dGUuc2V0Q3VycmVudENv
bG9yR3JvdXAoUVBhbGV0dGU6OkRpc2FibGVkKTsKKyAgICAgICAgb3B0aW9uLnN0YXRlICY9IH5R
U3R5bGVJbnRlcmZhY2U6OlN0YXRlX0VuYWJsZWQ7CisgICAgfQorCisgICAgUmVuZGVyU3R5bGUq
IHN0eWxlID0gby0+c3R5bGUoKTsKKyAgICBpZiAoIXN0eWxlKQorICAgICAgICByZXR1cm4gTm9D
b250cm9sUGFydDsKKworICAgIENvbnRyb2xQYXJ0IHJlc3VsdCA9IHN0eWxlLT5hcHBlYXJhbmNl
KCk7CisgICAgaWYgKHN1cHBvcnRzRm9jdXMocmVzdWx0KSAmJiBpc0ZvY3VzZWQobykpIHsKKyAg
ICAgICAgb3B0aW9uLnN0YXRlIHw9IFFTdHlsZUludGVyZmFjZTo6U3RhdGVfSGFzRm9jdXM7Cisg
ICAgICAgIG9wdGlvbi5zdGF0ZSB8PSBRU3R5bGVJbnRlcmZhY2U6OlN0YXRlX0tleWJvYXJkRm9j
dXNDaGFuZ2U7CisgICAgfQorCisgICAgaWYgKHN0eWxlLT5kaXJlY3Rpb24oKSA9PSBXZWJDb3Jl
OjpSVEwpCisgICAgICAgIG9wdGlvbi5kaXJlY3Rpb24gPSBRdDo6UmlnaHRUb0xlZnQ7CisKKyAg
ICBzd2l0Y2ggKHJlc3VsdCkgeworICAgIGNhc2UgUHVzaEJ1dHRvblBhcnQ6CisgICAgY2FzZSBT
cXVhcmVCdXR0b25QYXJ0OgorICAgIGNhc2UgQnV0dG9uUGFydDoKKyAgICBjYXNlIEJ1dHRvbkJl
dmVsUGFydDoKKyAgICBjYXNlIExpc3RJdGVtUGFydDoKKyAgICBjYXNlIE1lbnVsaXN0QnV0dG9u
UGFydDoKKyAgICBjYXNlIElubmVyU3BpbkJ1dHRvblBhcnQ6CisgICAgY2FzZSBTZWFyY2hGaWVs
ZFJlc3VsdHNCdXR0b25QYXJ0OgorICAgIGNhc2UgU2VhcmNoRmllbGRDYW5jZWxCdXR0b25QYXJ0
OiB7CisgICAgICAgIGlmIChpc1ByZXNzZWQobykpCisgICAgICAgICAgICBvcHRpb24uc3RhdGUg
fD0gUVN0eWxlSW50ZXJmYWNlOjpTdGF0ZV9TdW5rZW47CisgICAgICAgIGVsc2UgaWYgKHJlc3Vs
dCA9PSBQdXNoQnV0dG9uUGFydCB8fCByZXN1bHQgPT0gQnV0dG9uUGFydCkKKyAgICAgICAgICAg
IG9wdGlvbi5zdGF0ZSB8PSBRU3R5bGVJbnRlcmZhY2U6OlN0YXRlX1JhaXNlZDsKKyAgICAgICAg
YnJlYWs7CisgICAgfQorICAgIGNhc2UgUmFkaW9QYXJ0OgorICAgIGNhc2UgQ2hlY2tib3hQYXJ0
OgorICAgICAgICBvcHRpb24uc3RhdGUgfD0gKGlzQ2hlY2tlZChvKSA/IFFTdHlsZUludGVyZmFj
ZTo6U3RhdGVfT24gOiBRU3R5bGVJbnRlcmZhY2U6OlN0YXRlX09mZik7CisgICAgfQorCisgICAg
cmV0dXJuIHJlc3VsdDsKK30KKwordm9pZCBSZW5kZXJUaGVtZVFTdHlsZTo6YWRqdXN0U2xpZGVy
VGh1bWJTaXplKFJlbmRlclN0eWxlKiBzdHlsZSwgRWxlbWVudCogZWxlbWVudCkgY29uc3QKK3sK
KyAgICBjb25zdCBDb250cm9sUGFydCBwYXJ0ID0gc3R5bGUtPmFwcGVhcmFuY2UoKTsKKyAgICBp
ZiAocGFydCA9PSBTbGlkZXJUaHVtYkhvcml6b250YWxQYXJ0IHx8IHBhcnQgPT0gU2xpZGVyVGh1
bWJWZXJ0aWNhbFBhcnQpIHsKKyAgICAgICAgUXQ6Ok9yaWVudGF0aW9uIG9yaWVudGF0aW9uID0g
UXQ6Okhvcml6b250YWw7CisgICAgICAgIGlmIChwYXJ0ID09IFNsaWRlclRodW1iVmVydGljYWxQ
YXJ0KQorICAgICAgICAgICAgb3JpZW50YXRpb24gPSBRdDo6VmVydGljYWw7CisKKyAgICAgICAg
aW50IGxlbmd0aCA9IG1fc3R5bGVJbnRlcmZhY2UtPnNsaWRlckxlbmd0aChvcmllbnRhdGlvbik7
CisgICAgICAgIGludCB0aGlja25lc3MgPSBtX3N0eWxlSW50ZXJmYWNlLT5zbGlkZXJUaGlja25l
c3Mob3JpZW50YXRpb24pOworICAgICAgICBpZiAob3JpZW50YXRpb24gPT0gUXQ6OlZlcnRpY2Fs
KSB7CisgICAgICAgICAgICBzdHlsZS0+c2V0V2lkdGgoTGVuZ3RoKHRoaWNrbmVzcywgRml4ZWQp
KTsKKyAgICAgICAgICAgIHN0eWxlLT5zZXRIZWlnaHQoTGVuZ3RoKGxlbmd0aCwgRml4ZWQpKTsK
KyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIHN0eWxlLT5zZXRXaWR0aChMZW5ndGgobGVu
Z3RoLCBGaXhlZCkpOworICAgICAgICAgICAgc3R5bGUtPnNldEhlaWdodChMZW5ndGgodGhpY2tu
ZXNzLCBGaXhlZCkpOworICAgICAgICB9CisgICAgfSBlbHNlCisgICAgICAgIFJlbmRlclRoZW1l
UXQ6OmFkanVzdFNsaWRlclRodW1iU2l6ZShzdHlsZSwgZWxlbWVudCk7Cit9CisKK30KKworLy8g
dmltOiB0cz00IHN3PTQgZXQKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3F0
L1JlbmRlclRoZW1lUVN0eWxlLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9xdC9SZW5kZXJU
aGVtZVFTdHlsZS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjVjNzMwNDM5YzE5ODBmYTc4OGM1NzcwMjczOWQzODA4
OGZlZDRjNzAKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9xdC9S
ZW5kZXJUaGVtZVFTdHlsZS5oCkBAIC0wLDAgKzEsMTU5IEBACisvKgorICogVGhpcyBmaWxlIGlz
IHBhcnQgb2YgdGhlIHRoZW1lIGltcGxlbWVudGF0aW9uIGZvciBmb3JtIGNvbnRyb2xzIGluIFdl
YkNvcmUuCisgKgorICogQ29weXJpZ2h0IChDKSAyMDExLTIwMTIgTm9raWEgQ29ycG9yYXRpb24g
YW5kL29yIGl0cyBzdWJzaWRpYXJ5KC1pZXMpLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBmcmVl
IHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1
bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgKiBMaWNl
bnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIK
KyAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0
ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhv
cGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsg
d2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkg
b3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogTGli
cmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91
IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQ
dWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBD
T1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5k
YXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCisgKiBCb3N0b24s
IE1BIDAyMTEwLTEzMDEsIFVTQS4KKyAqCisgKi8KKyNpZm5kZWYgUmVuZGVyVGhlbWVRU3R5bGVf
aAorI2RlZmluZSBSZW5kZXJUaGVtZVFTdHlsZV9oCisKKyNpbmNsdWRlICJRU3R5bGVJbnRlcmZh
Y2UuaCIKKyNpbmNsdWRlICJSZW5kZXJUaGVtZVF0LmgiCisKK25hbWVzcGFjZSBXZWJDb3JlIHsK
KworY2xhc3MgU2Nyb2xsYmFyVGhlbWVRU3R5bGU7CisKK2NsYXNzIFBhZ2U7CitjbGFzcyBRU3R5
bGVJbnRlcmZhY2U7CitzdHJ1Y3QgUVN0eWxlSW50ZXJmYWNlT3B0aW9uOworCit0eXBlZGVmIFFT
dHlsZUludGVyZmFjZSogKCpRdFN0eWxlRmFjdG9yeUZ1bmN0aW9uKShQYWdlKik7CisKK2NsYXNz
IFJlbmRlclRoZW1lUVN0eWxlIDogcHVibGljIFJlbmRlclRoZW1lUXQgeworcHJpdmF0ZToKKyAg
ICBmcmllbmQgY2xhc3MgU3R5bGVQYWludGVyUVN0eWxlOworCisgICAgUmVuZGVyVGhlbWVRU3R5
bGUoUGFnZSopOworICAgIHZpcnR1YWwgflJlbmRlclRoZW1lUVN0eWxlKCk7CisKK3B1YmxpYzoK
KyAgICBzdGF0aWMgUGFzc1JlZlB0cjxSZW5kZXJUaGVtZT4gY3JlYXRlKFBhZ2UqKTsKKworICAg
IHN0YXRpYyB2b2lkIHNldFN0eWxlRmFjdG9yeUZ1bmN0aW9uKFF0U3R5bGVGYWN0b3J5RnVuY3Rp
b24pOworICAgIHN0YXRpYyBRdFN0eWxlRmFjdG9yeUZ1bmN0aW9uIHN0eWxlRmFjdG9yeSgpOwor
CisgICAgdmlydHVhbCB2b2lkIGFkanVzdFNsaWRlclRodW1iU2l6ZShSZW5kZXJTdHlsZSosIEVs
ZW1lbnQqKSBjb25zdDsKKworICAgIFFTdHlsZUludGVyZmFjZSogc3R5bGVJbnRlcmZhY2UoKSB7
IHJldHVybiBtX3N0eWxlSW50ZXJmYWNlLmdldCgpOyB9CisKK3Byb3RlY3RlZDoKKyAgICB2aXJ0
dWFsIHZvaWQgYWRqdXN0QnV0dG9uU3R5bGUoU3R5bGVSZXNvbHZlciosIFJlbmRlclN0eWxlKiwg
RWxlbWVudCopIGNvbnN0OworICAgIHZpcnR1YWwgYm9vbCBwYWludEJ1dHRvbihSZW5kZXJPYmpl
Y3QqLCBjb25zdCBQYWludEluZm8mLCBjb25zdCBJbnRSZWN0Jik7CisKKyAgICB2aXJ0dWFsIGJv
b2wgcGFpbnRUZXh0RmllbGQoUmVuZGVyT2JqZWN0KiwgY29uc3QgUGFpbnRJbmZvJiwgY29uc3Qg
SW50UmVjdCYpOworCisgICAgdmlydHVhbCBib29sIHBhaW50VGV4dEFyZWEoUmVuZGVyT2JqZWN0
KiwgY29uc3QgUGFpbnRJbmZvJiwgY29uc3QgSW50UmVjdCYpOworICAgIHZpcnR1YWwgdm9pZCBh
ZGp1c3RUZXh0QXJlYVN0eWxlKFN0eWxlUmVzb2x2ZXIqLCBSZW5kZXJTdHlsZSosIEVsZW1lbnQq
KSBjb25zdDsKKworICAgIHZpcnR1YWwgYm9vbCBwYWludE1lbnVMaXN0KFJlbmRlck9iamVjdCos
IGNvbnN0IFBhaW50SW5mbyYsIGNvbnN0IEludFJlY3QmKTsKKworICAgIHZpcnR1YWwgYm9vbCBw
YWludE1lbnVMaXN0QnV0dG9uKFJlbmRlck9iamVjdCosIGNvbnN0IFBhaW50SW5mbyYsIGNvbnN0
IEludFJlY3QmKTsKKyAgICB2aXJ0dWFsIHZvaWQgYWRqdXN0TWVudUxpc3RCdXR0b25TdHlsZShT
dHlsZVJlc29sdmVyKiwgUmVuZGVyU3R5bGUqLCBFbGVtZW50KikgY29uc3Q7CisKKyNpZiBFTkFC
TEUoUFJPR1JFU1NfRUxFTUVOVCkKKyAgICAvLyBSZXR1cm5zIHRoZSBkdXJhdGlvbiBvZiB0aGUg
YW5pbWF0aW9uIGZvciB0aGUgcHJvZ3Jlc3MgYmFyLgorICAgIHZpcnR1YWwgZG91YmxlIGFuaW1h
dGlvbkR1cmF0aW9uRm9yUHJvZ3Jlc3NCYXIoUmVuZGVyUHJvZ3Jlc3MqKSBjb25zdDsKKyAgICB2
aXJ0dWFsIGJvb2wgcGFpbnRQcm9ncmVzc0JhcihSZW5kZXJPYmplY3QqLCBjb25zdCBQYWludElu
Zm8mLCBjb25zdCBJbnRSZWN0Jik7CisjZW5kaWYKKworICAgIHZpcnR1YWwgYm9vbCBwYWludFNs
aWRlclRyYWNrKFJlbmRlck9iamVjdCosIGNvbnN0IFBhaW50SW5mbyYsIGNvbnN0IEludFJlY3Qm
KTsKKyAgICB2aXJ0dWFsIHZvaWQgYWRqdXN0U2xpZGVyVHJhY2tTdHlsZShTdHlsZVJlc29sdmVy
KiwgUmVuZGVyU3R5bGUqLCBFbGVtZW50KikgY29uc3Q7CisKKyAgICB2aXJ0dWFsIGJvb2wgcGFp
bnRTbGlkZXJUaHVtYihSZW5kZXJPYmplY3QqLCBjb25zdCBQYWludEluZm8mLCBjb25zdCBJbnRS
ZWN0Jik7CisgICAgdmlydHVhbCB2b2lkIGFkanVzdFNsaWRlclRodW1iU3R5bGUoU3R5bGVSZXNv
bHZlciosIFJlbmRlclN0eWxlKiwgRWxlbWVudCopIGNvbnN0OworCisgICAgdmlydHVhbCBib29s
IHBhaW50U2VhcmNoRmllbGQoUmVuZGVyT2JqZWN0KiwgY29uc3QgUGFpbnRJbmZvJiwgY29uc3Qg
SW50UmVjdCYpOworCisgICAgdmlydHVhbCB2b2lkIGFkanVzdFNlYXJjaEZpZWxkRGVjb3JhdGlv
blN0eWxlKFN0eWxlUmVzb2x2ZXIqLCBSZW5kZXJTdHlsZSosIEVsZW1lbnQqKSBjb25zdDsKKyAg
ICB2aXJ0dWFsIGJvb2wgcGFpbnRTZWFyY2hGaWVsZERlY29yYXRpb24oUmVuZGVyT2JqZWN0Kiwg
Y29uc3QgUGFpbnRJbmZvJiwgY29uc3QgSW50UmVjdCYpOworCisgICAgdmlydHVhbCB2b2lkIGFk
anVzdFNlYXJjaEZpZWxkUmVzdWx0c0RlY29yYXRpb25TdHlsZShTdHlsZVJlc29sdmVyKiwgUmVu
ZGVyU3R5bGUqLCBFbGVtZW50KikgY29uc3Q7CisgICAgdmlydHVhbCBib29sIHBhaW50U2VhcmNo
RmllbGRSZXN1bHRzRGVjb3JhdGlvbihSZW5kZXJPYmplY3QqLCBjb25zdCBQYWludEluZm8mLCBj
b25zdCBJbnRSZWN0Jik7CisKKyNpZm5kZWYgUVRfTk9fU1BJTkJPWAorICAgIHZpcnR1YWwgYm9v
bCBwYWludElubmVyU3BpbkJ1dHRvbihSZW5kZXJPYmplY3QqLCBjb25zdCBQYWludEluZm8mLCBj
b25zdCBJbnRSZWN0Jik7CisjZW5kaWYKKworcHJvdGVjdGVkOgorICAgIHZpcnR1YWwgdm9pZCBj
b21wdXRlU2l6ZUJhc2VkT25TdHlsZShSZW5kZXJTdHlsZSopIGNvbnN0OworCisgICAgdmlydHVh
bCBRU2hhcmVkUG9pbnRlcjxTdHlsZVBhaW50ZXI+IGdldFN0eWxlUGFpbnRlcihjb25zdCBQYWlu
dEluZm8mKTsKKworICAgIHZpcnR1YWwgUVJlY3QgaW5mbGF0ZUJ1dHRvblJlY3QoY29uc3QgUVJl
Y3QmIG9yaWdpbmFsUmVjdCkgY29uc3Q7CisKKyAgICB2aXJ0dWFsIHZvaWQgc2V0UG9wdXBQYWRk
aW5nKFJlbmRlclN0eWxlKikgY29uc3Q7CisKKyAgICB2aXJ0dWFsIFFQYWxldHRlIGNvbG9yUGFs
ZXR0ZSgpIGNvbnN0OworCitwcml2YXRlOgorICAgIENvbnRyb2xQYXJ0IGluaXRpYWxpemVDb21t
b25RU3R5bGVPcHRpb25zKFFTdHlsZUludGVyZmFjZU9wdGlvbiYsIFJlbmRlck9iamVjdCopIGNv
bnN0OworCisgICAgdm9pZCBzZXRCdXR0b25QYWRkaW5nKFJlbmRlclN0eWxlKikgY29uc3Q7CisK
KyAgICB2b2lkIHNldFBhbGV0dGVGcm9tUGFnZUNsaWVudElmRXhpc3RzKFFQYWxldHRlJikgY29u
c3Q7CisKKyNpZmRlZiBRX09TX01BQworICAgIGludCBtX2J1dHRvbkZvbnRQaXhlbFNpemU7Cisj
ZW5kaWYKKworICAgIE93blB0cjxRU3R5bGVJbnRlcmZhY2U+IG1fc3R5bGVJbnRlcmZhY2U7Cit9
OworCitjbGFzcyBTdHlsZVBhaW50ZXJRU3R5bGUgOiBwdWJsaWMgU3R5bGVQYWludGVyIHsKK3B1
YmxpYzoKKyAgICBleHBsaWNpdCBTdHlsZVBhaW50ZXJRU3R5bGUoUmVuZGVyVGhlbWVRU3R5bGUq
LCBjb25zdCBQYWludEluZm8mLCBSZW5kZXJPYmplY3QqKTsKKyAgICBleHBsaWNpdCBTdHlsZVBh
aW50ZXJRU3R5bGUoU2Nyb2xsYmFyVGhlbWVRU3R5bGUqLCBHcmFwaGljc0NvbnRleHQqKTsKKwor
ICAgIGJvb2wgaXNWYWxpZCgpIGNvbnN0IHsgcmV0dXJuIHN0eWxlSW50ZXJmYWNlICYmIHN0eWxl
SW50ZXJmYWNlLT5pc1ZhbGlkKCkgJiYgU3R5bGVQYWludGVyOjppc1ZhbGlkKCk7IH0KKworICAg
IFFPYmplY3QqIHdpZGdldDsKKyAgICBRU3R5bGVJbnRlcmZhY2UqIHN0eWxlSW50ZXJmYWNlOwor
ICAgIFFTdHlsZUludGVyZmFjZU9wdGlvbiBzdHlsZU9wdGlvbjsKKyAgICBDb250cm9sUGFydCBh
cHBlYXJhbmNlOworCisgICAgdm9pZCBwYWludEJ1dHRvbihRU3R5bGVJbnRlcmZhY2U6OkJ1dHRv
blR5cGUgdHlwZSkKKyAgICB7IHN0eWxlSW50ZXJmYWNlLT5wYWludEJ1dHRvbihwYWludGVyLCB0
eXBlLCBzdHlsZU9wdGlvbiwgd2lkZ2V0KTsgfQorICAgIHZvaWQgcGFpbnRUZXh0RmllbGQoKQor
ICAgIHsgc3R5bGVJbnRlcmZhY2UtPnBhaW50VGV4dEZpZWxkKHBhaW50ZXIsIHN0eWxlT3B0aW9u
LCB3aWRnZXQpOyB9CisgICAgdm9pZCBwYWludENvbWJvQm94KCkKKyAgICB7IHN0eWxlSW50ZXJm
YWNlLT5wYWludENvbWJvQm94KHBhaW50ZXIsIHN0eWxlT3B0aW9uLCB3aWRnZXQpOyB9CisgICAg
dm9pZCBwYWludENvbWJvQm94QXJyb3coKQorICAgIHsgc3R5bGVJbnRlcmZhY2UtPnBhaW50Q29t
Ym9Cb3hBcnJvdyhwYWludGVyLCBzdHlsZU9wdGlvbiwgd2lkZ2V0KTsgfQorICAgIHZvaWQgcGFp
bnRTbGlkZXJUcmFjaygpCisgICAgeyBzdHlsZUludGVyZmFjZS0+cGFpbnRTbGlkZXJUcmFjayhw
YWludGVyLCBzdHlsZU9wdGlvbiwgd2lkZ2V0KTsgfQorICAgIHZvaWQgcGFpbnRTbGlkZXJUaHVt
YigpCisgICAgeyBzdHlsZUludGVyZmFjZS0+cGFpbnRTbGlkZXJUaHVtYihwYWludGVyLCBzdHls
ZU9wdGlvbiwgd2lkZ2V0KTsgfQorICAgIHZvaWQgcGFpbnRJbm5lclNwaW5CdXR0b24oYm9vbCBz
cGluQm94VXApCisgICAgeyBzdHlsZUludGVyZmFjZS0+cGFpbnRJbm5lclNwaW5CdXR0b24ocGFp
bnRlciwgc3R5bGVPcHRpb24sIHNwaW5Cb3hVcCwgd2lkZ2V0KTsgfQorICAgIHZvaWQgcGFpbnRQ
cm9ncmVzc0Jhcihkb3VibGUgcHJvZ3Jlc3MsIGRvdWJsZSBhbmltYXRpb25Qcm9ncmVzcykKKyAg
ICB7IHN0eWxlSW50ZXJmYWNlLT5wYWludFByb2dyZXNzQmFyKHBhaW50ZXIsIHN0eWxlT3B0aW9u
LCBwcm9ncmVzcywgYW5pbWF0aW9uUHJvZ3Jlc3MsIHdpZGdldCk7IH0KKyAgICB2b2lkIHBhaW50
U2Nyb2xsQ29ybmVyKGNvbnN0IFFSZWN0JiByZWN0KQorICAgIHsgc3R5bGVJbnRlcmZhY2UtPnBh
aW50U2Nyb2xsQ29ybmVyKHBhaW50ZXIsIHJlY3QsIHdpZGdldCk7IH0KKyAgICB2b2lkIHBhaW50
U2Nyb2xsQmFyKCkKKyAgICB7IHN0eWxlSW50ZXJmYWNlLT5wYWludFNjcm9sbEJhcihwYWludGVy
LCBzdHlsZU9wdGlvbiwgd2lkZ2V0KTsgfQorCitwcml2YXRlOgorICAgIHZvaWQgaW5pdChHcmFw
aGljc0NvbnRleHQqKTsKKworICAgIFFfRElTQUJMRV9DT1BZKFN0eWxlUGFpbnRlclFTdHlsZSkK
K307CisKK30KKworI2VuZGlmIC8vIFJlbmRlclRoZW1lUVN0eWxlX2gKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL3F0L1Njcm9sbGJhclRoZW1lUVN0eWxlLmNwcCBiL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL3F0L1Njcm9sbGJhclRoZW1lUVN0eWxlLmNwcApuZXcgZmlsZSBt
b2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
Li42MTE1OGM4MzRmYmRmN2NmZDU3M2I5MzMxNzFlN2FmYjA2N2Y0ZTNjCi0tLSAvZGV2L251bGwK
KysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vcXQvU2Nyb2xsYmFyVGhlbWVRU3R5bGUuY3Bw
CkBAIC0wLDAgKzEsMjIxIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA3LCAyMDA4IEFwcGxl
IEluYy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAwNyBTdGFpa29z
IENvbXB1dGluZyBTZXJ2aWNlcyBJbmMuIDxpbmZvQHN0YWlrb3MubmV0PgorICogQ29weXJpZ2h0
IChDKSAyMDA4IE5va2lhIENvcnBvcmF0aW9uIGFuZC9vciBpdHMgc3Vic2lkaWFyeSgtaWVzKQor
ICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMs
IHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVk
IHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0
cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJl
cHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1
bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJp
YnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBg
YEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBN
RVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBB
UkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRS
SUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBT
UEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09E
UyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJ
TkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBP
RiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRP
UlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5Z
IFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VE
IE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29u
ZmlnLmgiCisjaW5jbHVkZSAiU2Nyb2xsYmFyVGhlbWVRU3R5bGUuaCIKKworI2luY2x1ZGUgIkdy
YXBoaWNzQ29udGV4dC5oIgorI2luY2x1ZGUgIlBsYXRmb3JtTW91c2VFdmVudC5oIgorI2luY2x1
ZGUgIlJlbmRlclRoZW1lUVN0eWxlLmgiCisjaW5jbHVkZSAiU2Nyb2xsVmlldy5oIgorI2luY2x1
ZGUgIlNjcm9sbGJhci5oIgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK1Njcm9sbGJhclRoZW1l
UVN0eWxlOjpTY3JvbGxiYXJUaGVtZVFTdHlsZSgpCit7CisgICAgbV9zdHlsZUludGVyZmFjZSA9
IGFkb3B0UHRyKFJlbmRlclRoZW1lUVN0eWxlOjpzdHlsZUZhY3RvcnkoKSgvKnBhZ2UqLyAwKSk7
Cit9CisKK1Njcm9sbGJhclRoZW1lUVN0eWxlOjp+U2Nyb2xsYmFyVGhlbWVRU3R5bGUoKQorewor
fQorCitzdGF0aWMgUVN0eWxlSW50ZXJmYWNlOjpTdWJDb250cm9sIHNjUGFydChjb25zdCBTY3Jv
bGxiYXJQYXJ0JiBwYXJ0KQoreworICAgIHN3aXRjaCAocGFydCkgeworICAgIGNhc2UgTm9QYXJ0
OgorICAgICAgICByZXR1cm4gUVN0eWxlSW50ZXJmYWNlOjpTQ19Ob25lOworICAgIGNhc2UgQmFj
a0J1dHRvblN0YXJ0UGFydDoKKyAgICBjYXNlIEJhY2tCdXR0b25FbmRQYXJ0OgorICAgICAgICBy
ZXR1cm4gUVN0eWxlSW50ZXJmYWNlOjpTQ19TY3JvbGxCYXJTdWJMaW5lOworICAgIGNhc2UgQmFj
a1RyYWNrUGFydDoKKyAgICAgICAgcmV0dXJuIFFTdHlsZUludGVyZmFjZTo6U0NfU2Nyb2xsQmFy
U3ViUGFnZTsKKyAgICBjYXNlIFRodW1iUGFydDoKKyAgICAgICAgcmV0dXJuIFFTdHlsZUludGVy
ZmFjZTo6U0NfU2Nyb2xsQmFyU2xpZGVyOworICAgIGNhc2UgRm9yd2FyZFRyYWNrUGFydDoKKyAg
ICAgICAgcmV0dXJuIFFTdHlsZUludGVyZmFjZTo6U0NfU2Nyb2xsQmFyQWRkUGFnZTsKKyAgICBj
YXNlIEZvcndhcmRCdXR0b25TdGFydFBhcnQ6CisgICAgY2FzZSBGb3J3YXJkQnV0dG9uRW5kUGFy
dDoKKyAgICAgICAgcmV0dXJuIFFTdHlsZUludGVyZmFjZTo6U0NfU2Nyb2xsQmFyQWRkTGluZTsK
KyAgICB9CisKKyAgICByZXR1cm4gUVN0eWxlSW50ZXJmYWNlOjpTQ19Ob25lOworfQorCitzdGF0
aWMgU2Nyb2xsYmFyUGFydCBzY3JvbGxiYXJQYXJ0KGNvbnN0IFFTdHlsZUludGVyZmFjZTo6U3Vi
Q29udHJvbCYgc2MpCit7CisgICAgc3dpdGNoIChzYykgeworICAgIGNhc2UgUVN0eWxlSW50ZXJm
YWNlOjpTQ19Ob25lOgorICAgICAgICByZXR1cm4gTm9QYXJ0OworICAgIGNhc2UgUVN0eWxlSW50
ZXJmYWNlOjpTQ19TY3JvbGxCYXJTdWJMaW5lOgorICAgICAgICByZXR1cm4gQmFja0J1dHRvblN0
YXJ0UGFydDsKKyAgICBjYXNlIFFTdHlsZUludGVyZmFjZTo6U0NfU2Nyb2xsQmFyU3ViUGFnZToK
KyAgICAgICAgcmV0dXJuIEJhY2tUcmFja1BhcnQ7CisgICAgY2FzZSBRU3R5bGVJbnRlcmZhY2U6
OlNDX1Njcm9sbEJhclNsaWRlcjoKKyAgICAgICAgcmV0dXJuIFRodW1iUGFydDsKKyAgICBjYXNl
IFFTdHlsZUludGVyZmFjZTo6U0NfU2Nyb2xsQmFyQWRkUGFnZToKKyAgICAgICAgcmV0dXJuIEZv
cndhcmRUcmFja1BhcnQ7CisgICAgY2FzZSBRU3R5bGVJbnRlcmZhY2U6OlNDX1Njcm9sbEJhckFk
ZExpbmU6CisgICAgICAgIHJldHVybiBGb3J3YXJkQnV0dG9uU3RhcnRQYXJ0OworICAgIH0KKyAg
ICByZXR1cm4gTm9QYXJ0OworfQorCitzdGF0aWMgUVN0eWxlSW50ZXJmYWNlT3B0aW9uIGluaXRT
bGlkZXJTdHlsZU9wdGlvbihTY3JvbGxiYXJUaGVtZUNsaWVudCogc2Nyb2xsYmFyLCBRT2JqZWN0
KiB3aWRnZXQgPSAwKQoreworICAgIFFTdHlsZUludGVyZmFjZU9wdGlvbiBvcHQ7CisgICAgaWYg
KHdpZGdldCkgeworICAgICAgICBvcHQucGFsZXR0ZSA9IHdpZGdldC0+cHJvcGVydHkoInBhbGV0
dGUiKS52YWx1ZTxRUGFsZXR0ZT4oKTsKKyAgICAgICAgb3B0LnJlY3QgPSB3aWRnZXQtPnByb3Bl
cnR5KCJyZWN0IikudmFsdWU8UVJlY3Q+KCk7CisgICAgICAgIG9wdC5kaXJlY3Rpb24gPSBzdGF0
aWNfY2FzdDxRdDo6TGF5b3V0RGlyZWN0aW9uPih3aWRnZXQtPnByb3BlcnR5KCJsYXlvdXREaXJl
Y3Rpb24iKS50b0ludCgpKTsKKyAgICB9IGVsc2UKKyAgICAgICAgb3B0LnN0YXRlIHw9IFFTdHls
ZUludGVyZmFjZTo6U3RhdGVfQWN0aXZlOworCisgICAgb3B0LnN0YXRlICY9IH5RU3R5bGVJbnRl
cmZhY2U6OlN0YXRlX0hhc0ZvY3VzOworCisgICAgb3B0LnJlY3QgPSBzY3JvbGxiYXItPmZyYW1l
UmVjdCgpOworICAgIGlmIChzY3JvbGxiYXItPmVuYWJsZWQoKSkKKyAgICAgICAgb3B0LnN0YXRl
IHw9IFFTdHlsZUludGVyZmFjZTo6U3RhdGVfRW5hYmxlZDsKKyAgICBpZiAoc2Nyb2xsYmFyLT5j
b250cm9sU2l6ZSgpICE9IFJlZ3VsYXJTY3JvbGxiYXIpCisgICAgICAgIG9wdC5zdGF0ZSB8PSBR
U3R5bGVJbnRlcmZhY2U6OlN0YXRlX01pbmk7CisgICAgb3B0LnNsaWRlci5vcmllbnRhdGlvbiA9
IChzY3JvbGxiYXItPm9yaWVudGF0aW9uKCkgPT0gVmVydGljYWxTY3JvbGxiYXIpID8gUXQ6OlZl
cnRpY2FsIDogUXQ6Okhvcml6b250YWw7CisKKyAgICBpZiAoc2Nyb2xsYmFyLT5vcmllbnRhdGlv
bigpID09IEhvcml6b250YWxTY3JvbGxiYXIpCisgICAgICAgIG9wdC5zdGF0ZSB8PSBRU3R5bGVJ
bnRlcmZhY2U6OlN0YXRlX0hvcml6b250YWw7CisgICAgZWxzZQorICAgICAgICBvcHQuc3RhdGUg
Jj0gflFTdHlsZUludGVyZmFjZTo6U3RhdGVfSG9yaXpvbnRhbDsKKworICAgIG9wdC5zbGlkZXIu
dmFsdWUgPSBzY3JvbGxiYXItPnZhbHVlKCk7CisgICAgb3B0LnNsaWRlci5wb3NpdGlvbiA9IG9w
dC5zbGlkZXIudmFsdWU7CisgICAgb3B0LnNsaWRlci5wYWdlU3RlcCA9IHNjcm9sbGJhci0+cGFn
ZVN0ZXAoKTsKKyAgICBvcHQuc2xpZGVyLnNpbmdsZVN0ZXAgPSBzY3JvbGxiYXItPmxpbmVTdGVw
KCk7CisgICAgb3B0LnNsaWRlci5taW5pbXVtID0gMDsKKyAgICBvcHQuc2xpZGVyLm1heGltdW0g
PSBxTWF4KDAsIHNjcm9sbGJhci0+bWF4aW11bSgpKTsKKyAgICBTY3JvbGxiYXJQYXJ0IHByZXNz
ZWRQYXJ0ID0gc2Nyb2xsYmFyLT5wcmVzc2VkUGFydCgpOworICAgIFNjcm9sbGJhclBhcnQgaG92
ZXJlZFBhcnQgPSBzY3JvbGxiYXItPmhvdmVyZWRQYXJ0KCk7CisgICAgaWYgKHByZXNzZWRQYXJ0
ICE9IE5vUGFydCkgeworICAgICAgICBvcHQuc2xpZGVyLmFjdGl2ZVN1YkNvbnRyb2xzID0gc2NQ
YXJ0KHNjcm9sbGJhci0+cHJlc3NlZFBhcnQoKSk7CisgICAgICAgIGlmIChwcmVzc2VkUGFydCA9
PSBCYWNrQnV0dG9uU3RhcnRQYXJ0IHx8IHByZXNzZWRQYXJ0ID09IEZvcndhcmRCdXR0b25TdGFy
dFBhcnQKKyAgICAgICAgICAgIHx8IHByZXNzZWRQYXJ0ID09IEJhY2tCdXR0b25FbmRQYXJ0IHx8
IHByZXNzZWRQYXJ0ID09IEZvcndhcmRCdXR0b25FbmRQYXJ0CisgICAgICAgICAgICB8fCBwcmVz
c2VkUGFydCA9PSBUaHVtYlBhcnQpCisgICAgICAgICAgICBvcHQuc3RhdGUgfD0gUVN0eWxlSW50
ZXJmYWNlOjpTdGF0ZV9TdW5rZW47CisgICAgfSBlbHNlCisgICAgICAgIG9wdC5zbGlkZXIuYWN0
aXZlU3ViQ29udHJvbHMgPSBzY1BhcnQoaG92ZXJlZFBhcnQpOworICAgIGlmIChob3ZlcmVkUGFy
dCAhPSBOb1BhcnQpCisgICAgICAgIG9wdC5zdGF0ZSB8PSBRU3R5bGVJbnRlcmZhY2U6OlN0YXRl
X01vdXNlT3ZlcjsKKyAgICByZXR1cm4gb3B0OworfQorCitib29sIFNjcm9sbGJhclRoZW1lUVN0
eWxlOjpwYWludChTY3JvbGxiYXJUaGVtZUNsaWVudCogc2Nyb2xsYmFyLCBHcmFwaGljc0NvbnRl
eHQqIGdyYXBoaWNzQ29udGV4dCwgY29uc3QgSW50UmVjdCYgZGlydHlSZWN0KQoreworICAgIGlm
IChncmFwaGljc0NvbnRleHQtPnVwZGF0aW5nQ29udHJvbFRpbnRzKCkpIHsKKyAgICAgICBzY3Jv
bGxiYXItPmludmFsaWRhdGVSZWN0KGRpcnR5UmVjdCk7CisgICAgICAgcmV0dXJuIGZhbHNlOwor
ICAgIH0KKworICAgIFN0eWxlUGFpbnRlclFTdHlsZSBwKHRoaXMsIGdyYXBoaWNzQ29udGV4dCk7
CisgICAgaWYgKCFwLmlzVmFsaWQoKSkKKyAgICAgIHJldHVybiB0cnVlOworCisgICAgcC5wYWlu
dGVyLT5zYXZlKCk7CisgICAgcC5zdHlsZU9wdGlvbiA9IGluaXRTbGlkZXJTdHlsZU9wdGlvbihz
Y3JvbGxiYXIsIHAud2lkZ2V0KTsKKworICAgIHAucGFpbnRlci0+c2V0Q2xpcFJlY3QocC5zdHls
ZU9wdGlvbi5yZWN0LmludGVyc2VjdGVkKGRpcnR5UmVjdCksIFF0OjpJbnRlcnNlY3RDbGlwKTsK
KyAgICBwLnBhaW50U2Nyb2xsQmFyKCk7CisgICAgcC5wYWludGVyLT5yZXN0b3JlKCk7CisgICAg
cmV0dXJuIHRydWU7Cit9CisKK1Njcm9sbGJhclBhcnQgU2Nyb2xsYmFyVGhlbWVRU3R5bGU6Omhp
dFRlc3QoU2Nyb2xsYmFyVGhlbWVDbGllbnQqIHNjcm9sbGJhciwgY29uc3QgUGxhdGZvcm1Nb3Vz
ZUV2ZW50JiBldnQpCit7CisgICAgUVN0eWxlSW50ZXJmYWNlT3B0aW9uIG9wdCA9IGluaXRTbGlk
ZXJTdHlsZU9wdGlvbihzY3JvbGxiYXIpOworICAgIGNvbnN0IFFQb2ludCBwb3MgPSBzY3JvbGxi
YXItPmNvbnZlcnRGcm9tQ29udGFpbmluZ1dpbmRvdyhldnQucG9zaXRpb24oKSk7CisgICAgb3B0
LnJlY3QubW92ZVRvKFFQb2ludCgwLCAwKSk7CisgICAgUVN0eWxlSW50ZXJmYWNlOjpTdWJDb250
cm9sIHNjID0gbV9zdHlsZUludGVyZmFjZS0+aGl0VGVzdFNjcm9sbEJhcihvcHQsIHBvcyk7Cisg
ICAgcmV0dXJuIHNjcm9sbGJhclBhcnQoc2MpOworfQorCitib29sIFNjcm9sbGJhclRoZW1lUVN0
eWxlOjpzaG91bGRDZW50ZXJPblRodW1iKFNjcm9sbGJhclRoZW1lQ2xpZW50KiwgY29uc3QgUGxh
dGZvcm1Nb3VzZUV2ZW50JiBldnQpCit7CisgICAgLy8gTWlkZGxlIGNsaWNrIGNlbnRlcnMgc2xp
ZGVyIHRodW1iIChpZiBzdXBwb3J0ZWQpLgorICAgIHJldHVybiBtX3N0eWxlSW50ZXJmYWNlLT5z
Y3JvbGxCYXJNaWRkbGVDbGlja0Fic29sdXRlUG9zaXRpb25TdHlsZUhpbnQoKSAmJiBldnQuYnV0
dG9uKCkgPT0gTWlkZGxlQnV0dG9uOworfQorCit2b2lkIFNjcm9sbGJhclRoZW1lUVN0eWxlOjpp
bnZhbGlkYXRlUGFydChTY3JvbGxiYXJUaGVtZUNsaWVudCogc2Nyb2xsYmFyLCBTY3JvbGxiYXJQ
YXJ0KQoreworICAgIC8vIEZJWE1FOiBEbyBtb3JlIHByZWNpc2UgaW52YWxpZGF0aW9uLgorICAg
IHNjcm9sbGJhci0+aW52YWxpZGF0ZSgpOworfQorCitpbnQgU2Nyb2xsYmFyVGhlbWVRU3R5bGU6
OnNjcm9sbGJhclRoaWNrbmVzcyhTY3JvbGxiYXJDb250cm9sU2l6ZSBjb250cm9sU2l6ZSkKK3sK
KyAgICBjb25zdCBib29sIG1pbmkgPSBjb250cm9sU2l6ZSAhPSBSZWd1bGFyU2Nyb2xsYmFyOwor
ICAgIHJldHVybiBtX3N0eWxlSW50ZXJmYWNlLT5zY3JvbGxCYXJFeHRlbnQobWluaSk7Cit9CisK
K2ludCBTY3JvbGxiYXJUaGVtZVFTdHlsZTo6dGh1bWJQb3NpdGlvbihTY3JvbGxiYXJUaGVtZUNs
aWVudCogc2Nyb2xsYmFyKQoreworICAgIGlmIChzY3JvbGxiYXItPmVuYWJsZWQoKSkgeworICAg
ICAgICBmbG9hdCBwb3MgPSAoZmxvYXQpc2Nyb2xsYmFyLT5jdXJyZW50UG9zKCkgKiAodHJhY2tM
ZW5ndGgoc2Nyb2xsYmFyKSAtIHRodW1iTGVuZ3RoKHNjcm9sbGJhcikpIC8gc2Nyb2xsYmFyLT5t
YXhpbXVtKCk7CisgICAgICAgIHJldHVybiAocG9zIDwgMSAmJiBwb3MgPiAwKSA/IDEgOiBwb3M7
CisgICAgfQorICAgIHJldHVybiAwOworfQorCitpbnQgU2Nyb2xsYmFyVGhlbWVRU3R5bGU6OnRo
dW1iTGVuZ3RoKFNjcm9sbGJhclRoZW1lQ2xpZW50KiBzY3JvbGxiYXIpCit7CisgICAgUVN0eWxl
SW50ZXJmYWNlT3B0aW9uIG9wdCA9IGluaXRTbGlkZXJTdHlsZU9wdGlvbihzY3JvbGxiYXIpOwor
ICAgIFFSZWN0IHRodW1iID0gbV9zdHlsZUludGVyZmFjZS0+c2Nyb2xsQmFyU3ViQ29udHJvbFJl
Y3Qob3B0LCBRU3R5bGVJbnRlcmZhY2U6OlNDX1Njcm9sbEJhclNsaWRlcik7CisgICAgcmV0dXJu
IHNjcm9sbGJhci0+b3JpZW50YXRpb24oKSA9PSBIb3Jpem9udGFsU2Nyb2xsYmFyID8gdGh1bWIu
d2lkdGgoKSA6IHRodW1iLmhlaWdodCgpOworfQorCitpbnQgU2Nyb2xsYmFyVGhlbWVRU3R5bGU6
OnRyYWNrUG9zaXRpb24oU2Nyb2xsYmFyVGhlbWVDbGllbnQqIHNjcm9sbGJhcikKK3sKKyAgICBR
U3R5bGVJbnRlcmZhY2VPcHRpb24gb3B0ID0gaW5pdFNsaWRlclN0eWxlT3B0aW9uKHNjcm9sbGJh
cik7CisgICAgUVJlY3QgdHJhY2sgPSBtX3N0eWxlSW50ZXJmYWNlLT5zY3JvbGxCYXJTdWJDb250
cm9sUmVjdChvcHQsIFFTdHlsZUludGVyZmFjZTo6U0NfU2Nyb2xsQmFyR3Jvb3ZlKTsKKyAgICBy
ZXR1cm4gc2Nyb2xsYmFyLT5vcmllbnRhdGlvbigpID09IEhvcml6b250YWxTY3JvbGxiYXIgPyB0
cmFjay54KCkgLSBzY3JvbGxiYXItPngoKSA6IHRyYWNrLnkoKSAtIHNjcm9sbGJhci0+eSgpOwor
fQorCitpbnQgU2Nyb2xsYmFyVGhlbWVRU3R5bGU6OnRyYWNrTGVuZ3RoKFNjcm9sbGJhclRoZW1l
Q2xpZW50KiBzY3JvbGxiYXIpCit7CisgICAgUVN0eWxlSW50ZXJmYWNlT3B0aW9uIG9wdCA9IGlu
aXRTbGlkZXJTdHlsZU9wdGlvbihzY3JvbGxiYXIpOworICAgIFFSZWN0IHRyYWNrID0gbV9zdHls
ZUludGVyZmFjZS0+c2Nyb2xsQmFyU3ViQ29udHJvbFJlY3Qob3B0LCBRU3R5bGVJbnRlcmZhY2U6
OlNDX1Njcm9sbEJhckdyb292ZSk7CisgICAgcmV0dXJuIHNjcm9sbGJhci0+b3JpZW50YXRpb24o
KSA9PSBIb3Jpem9udGFsU2Nyb2xsYmFyID8gdHJhY2sud2lkdGgoKSA6IHRyYWNrLmhlaWdodCgp
OworfQorCit2b2lkIFNjcm9sbGJhclRoZW1lUVN0eWxlOjpwYWludFNjcm9sbENvcm5lcihTY3Jv
bGxWaWV3KiwgR3JhcGhpY3NDb250ZXh0KiBjb250ZXh0LCBjb25zdCBJbnRSZWN0JiByZWN0KQor
eworICAgIFN0eWxlUGFpbnRlclFTdHlsZSBwKHRoaXMsIGNvbnRleHQpOworICAgIGlmICghcC5p
c1ZhbGlkKCkpCisgICAgICAgIHJldHVybjsKKworICAgIHAucGFpbnRTY3JvbGxDb3JuZXIocmVj
dCk7Cit9CisKK30KKwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vcXQvU2Ny
b2xsYmFyVGhlbWVRU3R5bGUuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3F0L1Njcm9sbGJh
clRoZW1lUVN0eWxlLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uNzA3M2ZiMTcwYWZlYWY5NTYyZGI0OWQ2ODA0NmNh
OWZiMjk1M2U2YQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3F0
L1Njcm9sbGJhclRoZW1lUVN0eWxlLmgKQEAgLTAsMCArMSw2NSBAQAorLyoKKyAqIENvcHlyaWdo
dCAoQykgMjAwOCBBcHBsZSBJbmMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCisgKgorICogUmVkaXN0
cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRo
b3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9s
bG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Yg
c291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgor
ICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5k
L29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgor
ICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQg
QU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElU
WSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVE
LiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJ
QUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBF
WEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VT
OyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQ
VElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwg
V0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xV
RElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBU
SEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJ
QklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpZm5kZWYgU2Nyb2xsYmFyVGhlbWVRU3R5
bGVfaAorI2RlZmluZSBTY3JvbGxiYXJUaGVtZVFTdHlsZV9oCisKKyNpbmNsdWRlICJTY3JvbGxi
YXJUaGVtZS5oIgorCisjaW5jbHVkZSA8UXRDb3JlL3FnbG9iYWwuaD4KKworbmFtZXNwYWNlIFdl
YkNvcmUgeworCitjbGFzcyBRU3R5bGVJbnRlcmZhY2U7CisKK2NsYXNzIFNjcm9sbGJhclRoZW1l
UVN0eWxlIDogcHVibGljIFNjcm9sbGJhclRoZW1lIHsKK3B1YmxpYzoKKyAgICBTY3JvbGxiYXJU
aGVtZVFTdHlsZSgpOworICAgIHZpcnR1YWwgflNjcm9sbGJhclRoZW1lUVN0eWxlKCk7CisKKyAg
ICB2aXJ0dWFsIGJvb2wgcGFpbnQoU2Nyb2xsYmFyVGhlbWVDbGllbnQqLCBHcmFwaGljc0NvbnRl
eHQqLCBjb25zdCBJbnRSZWN0JiBkaXJ0eVJlY3QpOworICAgIHZpcnR1YWwgdm9pZCBwYWludFNj
cm9sbENvcm5lcihTY3JvbGxWaWV3KiwgR3JhcGhpY3NDb250ZXh0KiwgY29uc3QgSW50UmVjdCYg
Y29ybmVyUmVjdCk7CisKKyAgICB2aXJ0dWFsIFNjcm9sbGJhclBhcnQgaGl0VGVzdChTY3JvbGxi
YXJUaGVtZUNsaWVudCosIGNvbnN0IFBsYXRmb3JtTW91c2VFdmVudCYpOworCisgICAgdmlydHVh
bCBib29sIHNob3VsZENlbnRlck9uVGh1bWIoU2Nyb2xsYmFyVGhlbWVDbGllbnQqLCBjb25zdCBQ
bGF0Zm9ybU1vdXNlRXZlbnQmKTsKKworICAgIHZpcnR1YWwgdm9pZCBpbnZhbGlkYXRlUGFydChT
Y3JvbGxiYXJUaGVtZUNsaWVudCosIFNjcm9sbGJhclBhcnQpOworCisgICAgdmlydHVhbCBpbnQg
dGh1bWJQb3NpdGlvbihTY3JvbGxiYXJUaGVtZUNsaWVudCopOworICAgIHZpcnR1YWwgaW50IHRo
dW1iTGVuZ3RoKFNjcm9sbGJhclRoZW1lQ2xpZW50Kik7CisgICAgdmlydHVhbCBpbnQgdHJhY2tQ
b3NpdGlvbihTY3JvbGxiYXJUaGVtZUNsaWVudCopOworICAgIHZpcnR1YWwgaW50IHRyYWNrTGVu
Z3RoKFNjcm9sbGJhclRoZW1lQ2xpZW50Kik7CisKKyAgICB2aXJ0dWFsIGludCBzY3JvbGxiYXJU
aGlja25lc3MoU2Nyb2xsYmFyQ29udHJvbFNpemUgPSBSZWd1bGFyU2Nyb2xsYmFyKTsKKworICAg
IFFTdHlsZUludGVyZmFjZSogc3R5bGVJbnRlcmZhY2UoKSB7IHJldHVybiBtX3N0eWxlSW50ZXJm
YWNlLmdldCgpOyB9CisKK3ByaXZhdGU6CisgICAgT3duUHRyPFFTdHlsZUludGVyZmFjZT4gbV9z
dHlsZUludGVyZmFjZTsKK307CisKK30KKyNlbmRpZgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktp
dC9XZWJLaXQxLnBybyBiL1NvdXJjZS9XZWJLaXQvV2ViS2l0MS5wcm8KaW5kZXggYWUyM2M0ZWNh
NDQxMmEwNjUyM2FiZWI2ODBhYjg0MzgwNjc5YjI0NS4uMzgwYTQ5MjA2YjM2YzM5NmEwMDg4Nzdk
ZDlkNWZiMDJhOTc2OTc2NCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9XZWJLaXQxLnBybwor
KysgYi9Tb3VyY2UvV2ViS2l0L1dlYktpdDEucHJvCkBAIC00OSwxMiArNDksMTEgQEAgU09VUkNF
UyArPSBcCiAgICAgJCRQV0QvcXQvV2ViQ29yZVN1cHBvcnQvUGFnZUNsaWVudFF0LmNwcCBcCiAg
ICAgJCRQV0QvcXQvV2ViQ29yZVN1cHBvcnQvUG9wdXBNZW51UXQuY3BwIFwKICAgICAkJFBXRC9x
dC9XZWJDb3JlU3VwcG9ydC9RdFBsYXRmb3JtUGx1Z2luLmNwcCBcCi0gICAgJCRQV0QvcXQvV2Vi
Q29yZVN1cHBvcnQvUmVuZGVyVGhlbWVRU3R5bGUuY3BwIFwKLSAgICAkJFBXRC9xdC9XZWJDb3Jl
U3VwcG9ydC9TY3JvbGxiYXJUaGVtZVFTdHlsZS5jcHAgXAogICAgICQkUFdEL3F0L1dlYkNvcmVT
dXBwb3J0L1NlYXJjaFBvcHVwTWVudVF0LmNwcCBcCiAgICAgJCRQV0QvcXQvV2ViQ29yZVN1cHBv
cnQvVGV4dENoZWNrZXJDbGllbnRRdC5jcHAgXAogICAgICQkUFdEL3F0L1dlYkNvcmVTdXBwb3J0
L1BsYXRmb3JtU3RyYXRlZ2llc1F0LmNwcCBcCi0gICAgJCRQV0QvcXQvV2ViQ29yZVN1cHBvcnQv
V2ViRXZlbnRDb252ZXJzaW9uLmNwcAorICAgICQkUFdEL3F0L1dlYkNvcmVTdXBwb3J0L1dlYkV2
ZW50Q29udmVyc2lvbi5jcHAgXAorICAgICQkUFdEL3F0L1dlYkNvcmVTdXBwb3J0L1FXZWJTdHls
ZS5jcHAgXAogCiBIRUFERVJTICs9IFwKICAgICAkJFBXRC9xdC9BcGkvcXdlYmZyYW1lLmggXApA
QCAtODcsMTIgKzg2LDExIEBAIEhFQURFUlMgKz0gXAogICAgICQkUFdEL3F0L1dlYkNvcmVTdXBw
b3J0L1BhZ2VDbGllbnRRdC5oIFwKICAgICAkJFBXRC9xdC9XZWJDb3JlU3VwcG9ydC9Qb3B1cE1l
bnVRdC5oIFwKICAgICAkJFBXRC9xdC9XZWJDb3JlU3VwcG9ydC9RdFBsYXRmb3JtUGx1Z2luLmgg
XAotICAgICQkUFdEL3F0L1dlYkNvcmVTdXBwb3J0L1JlbmRlclRoZW1lUVN0eWxlLmggXAotICAg
ICQkUFdEL3F0L1dlYkNvcmVTdXBwb3J0L1Njcm9sbGJhclRoZW1lUVN0eWxlLmggXAogICAgICQk
UFdEL3F0L1dlYkNvcmVTdXBwb3J0L1NlYXJjaFBvcHVwTWVudVF0LmggXAogICAgICQkUFdEL3F0
L1dlYkNvcmVTdXBwb3J0L1RleHRDaGVja2VyQ2xpZW50UXQuaCBcCiAgICAgJCRQV0QvcXQvV2Vi
Q29yZVN1cHBvcnQvUGxhdGZvcm1TdHJhdGVnaWVzUXQuaCBcCi0gICAgJCRQV0QvcXQvV2ViQ29y
ZVN1cHBvcnQvV2ViRXZlbnRDb252ZXJzaW9uLmgKKyAgICAkJFBXRC9xdC9XZWJDb3JlU3VwcG9y
dC9XZWJFdmVudENvbnZlcnNpb24uaCBcCisgICAgJCRQV0QvcXQvV2ViQ29yZVN1cHBvcnQvUVdl
YlN0eWxlLmgKIAogY29udGFpbnMoUVRfQ09ORklHLGFjY2Vzc2liaWxpdHkpIHsKICAgICBTT1VS
Q0VTICs9ICQkUFdEL3F0L0FwaS9xd2Vidmlld2FjY2Vzc2libGUuY3BwCmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViS2l0L3F0L1dlYkNvcmVTdXBwb3J0L0luaXRXZWJDb3JlUXQuY3BwIGIvU291cmNl
L1dlYktpdC9xdC9XZWJDb3JlU3VwcG9ydC9Jbml0V2ViQ29yZVF0LmNwcAppbmRleCBjNjNjY2Iw
NDJiMDU0MzJjZTk1MmY1NTE5ZTUwYTUyMzQ4OTdlOWMxLi42N2VkMTA5ODk2MzBjMzdkYzI0ZTcy
MzYwYmNkYzE5YzZkN2VkZmVlIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L3F0L1dlYkNvcmVT
dXBwb3J0L0luaXRXZWJDb3JlUXQuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvcXQvV2ViQ29yZVN1
cHBvcnQvSW5pdFdlYkNvcmVRdC5jcHAKQEAgLTMzLDYgKzMzLDcgQEAKICNpbmNsdWRlICJJbWFn
ZS5oIgogI2luY2x1ZGUgIk5vdEltcGxlbWVudGVkLmgiCiAjaW5jbHVkZSAiUGxhdGZvcm1TdHJh
dGVnaWVzUXQuaCIKKyNpbmNsdWRlICJRV2ViU3R5bGUuaCIKICNpbmNsdWRlICJSZW5kZXJUaGVt
ZVFTdHlsZS5oIgogI2luY2x1ZGUgIlNjcmlwdENvbnRyb2xsZXIuaCIKICNpbmNsdWRlICJTY3Jv
bGxiYXJUaGVtZVFTdHlsZS5oIgpAQCAtNzYsNiArNzcsNyBAQCB2b2lkIGluaXRpYWxpemVXZWJD
b3JlUXQoKQogICAgIFBsYXRmb3JtU3RyYXRlZ2llc1F0Ojppbml0aWFsaXplKCk7CiAgICAgUXRX
ZWJFbGVtZW50UnVudGltZTo6aW5pdGlhbGl6ZSgpOwogCisgICAgUmVuZGVyVGhlbWVRU3R5bGU6
OnNldFN0eWxlRmFjdG9yeUZ1bmN0aW9uKFdlYktpdDo6UVdlYlN0eWxlOjpjcmVhdGUpOwogICAg
IFJlbmRlclRoZW1lUXQ6OnNldEN1c3RvbVRoZW1lKFJlbmRlclRoZW1lUVN0eWxlOjpjcmVhdGUs
IG5ldyBTY3JvbGxiYXJUaGVtZVFTdHlsZSk7CiAKICNpZiBVU0UoUVRLSVQpCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViS2l0L3F0L1dlYkNvcmVTdXBwb3J0L1FXZWJTdHlsZS5jcHAgYi9Tb3VyY2Uv
V2ViS2l0L3F0L1dlYkNvcmVTdXBwb3J0L1FXZWJTdHlsZS5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2
NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uMmZmOWVi
YjNmMDk0OGM5YjVmMmJiZWEyZmJkZTFmM2Y1NzY4MTY2YQotLS0gL2Rldi9udWxsCisrKyBiL1Nv
dXJjZS9XZWJLaXQvcXQvV2ViQ29yZVN1cHBvcnQvUVdlYlN0eWxlLmNwcApAQCAtMCwwICsxLDU0
MyBAQAorLyoKKyAqIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSB0aGVtZSBpbXBsZW1lbnRhdGlv
biBmb3IgZm9ybSBjb250cm9scyBpbiBXZWJDb3JlLgorICoKKyAqIENvcHlyaWdodCAoQykgMjAx
MiBEaWdpYSBQbGMgYW5kL29yIGl0cyBzdWJzaWRpYXJ5KC1pZXMpLgorICogQ29weXJpZ2h0IChD
KSAyMDExLTIwMTIgTm9raWEgQ29ycG9yYXRpb24gYW5kL29yIGl0cyBzdWJzaWRpYXJ5KC1pZXMp
LgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJp
YnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBM
aWJyYXJ5IEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJl
ZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5z
ZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIGxp
YnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwK
KyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdh
cnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFS
IFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNl
IGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29w
eSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0
aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUg
dG8KKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0
cmVldCwgRmlmdGggRmxvb3IsCisgKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKyAqCisg
Ki8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorCisjaW5jbHVkZSAiUVdlYlN0eWxlLmgiCisKKyNp
bmNsdWRlIDxRQXBwbGljYXRpb24+CisjaW5jbHVkZSA8UUxpbmVFZGl0PgorI2luY2x1ZGUgPFFN
YWNTdHlsZT4KKyNpbmNsdWRlIDxRUGFpbnRlcj4KKyNpbmNsdWRlIDxRUHVzaEJ1dHRvbj4KKyNp
Zm5kZWYgUVRfTk9fU1RZTEVfUExBU1RJUVVFCisjaW5jbHVkZSA8UVBsYXN0aXF1ZVN0eWxlPgor
I2VuZGlmCisjaW5jbHVkZSA8UVN0eWxlRmFjdG9yeT4KKyNpbmNsdWRlIDxRU3R5bGVPcHRpb24+
CisKKyNpbmNsdWRlIDxRV2ViUGFnZUNsaWVudC5oPgorCit1c2luZyBuYW1lc3BhY2UgV2ViQ29y
ZTsKKworbmFtZXNwYWNlIFdlYktpdCB7CisKK3N0YXRpYyBRU3R5bGU6OlN0YXRlIGNvbnZlcnRU
b1FTdHlsZVN0YXRlKFFTdHlsZUludGVyZmFjZTo6U3RhdGUgc3RhdGUpCit7CisgICAgUVN0eWxl
OjpTdGF0ZSByZXN1bHQ7CisjZGVmaW5lIENPTlZFUlRfU1RBVEUoUHJveGllZFN0YXRlLCBWYWx1
ZSkgXAorICAgIGlmIChzdGF0ZSAmIFFTdHlsZUludGVyZmFjZTo6UHJveGllZFN0YXRlKSBcCisg
ICAgICAgIHJlc3VsdCB8PSBRU3R5bGU6OlByb3hpZWRTdGF0ZTsKKworICAgIEZPUl9FQUNIX01B
UFBFRF9TVEFURShDT05WRVJUX1NUQVRFLCApCisKKyN1bmRlZiBDT05WRVJUX1NUQVRFCisKKyAg
ICByZXR1cm4gcmVzdWx0OworfQorCitzdGF0aWMgUVN0eWxlOjpTdWJDb250cm9sIGNvbnZlcnRU
b1FTdHlsZVN1YkNvbnRyb2woUVN0eWxlSW50ZXJmYWNlOjpTdWJDb250cm9sIHNjKQoreworI2Rl
ZmluZSBDT05WRVJUX1NVQkNPTlRST0woRiwgVmFsdWUpIFwKKyAgICBjYXNlIFFTdHlsZUludGVy
ZmFjZTo6RjogcmV0dXJuIFFTdHlsZTo6RgorCisgICAgc3dpdGNoIChzYykgeworICAgICAgICBG
T1JfRUFDSF9TVUJDT05UUk9MKENPTlZFUlRfU1VCQ09OVFJPTCwgU0VNSUNPTE9OKTsKKyAgICB9
CisgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgcmV0dXJuIFFTdHlsZTo6U0NfTm9uZTsK
KyN1bmRlZiBDT05WRVJUX1NVQkNPTlRST0wKK30KKworc3RhdGljIHZvaWQgaW5pdEdlbmVyaWNT
dHlsZU9wdGlvbihRU3R5bGVPcHRpb24qIG9wdGlvbiwgUVdpZGdldCogd2lkZ2V0LCBjb25zdCBR
U3R5bGVJbnRlcmZhY2VPcHRpb24mIGludGVyZmFjZU9wdGlvbikKK3sKKyAgICBpZiAod2lkZ2V0
KQorICAgICAgICBvcHRpb24tPmluaXQod2lkZ2V0KTsKKyAgICBlbHNlCisgICAgICAgIC8vIElm
IGEgd2lkZ2V0IGlzIG5vdCBkaXJlY3RseSBhdmFpbGFibGUgZm9yIHJlbmRlcmluZywgd2UgZmFs
bGJhY2sgdG8gZGVmYXVsdAorICAgICAgICAvLyB2YWx1ZSBmb3IgYW4gYWN0aXZlIHdpZGdldC4K
KyAgICAgICAgb3B0aW9uLT5zdGF0ZSA9IFFTdHlsZTo6U3RhdGVfQWN0aXZlIHwgUVN0eWxlOjpT
dGF0ZV9FbmFibGVkOworCisgICAgb3B0aW9uLT5yZWN0ID0gaW50ZXJmYWNlT3B0aW9uLnJlY3Q7
CisgICAgb3B0aW9uLT5zdGF0ZSA9IGNvbnZlcnRUb1FTdHlsZVN0YXRlKGludGVyZmFjZU9wdGlv
bi5zdGF0ZSk7CisgICAgb3B0aW9uLT5kaXJlY3Rpb24gPSBpbnRlcmZhY2VPcHRpb24uZGlyZWN0
aW9uOworICAgIG9wdGlvbi0+cGFsZXR0ZSA9IGludGVyZmFjZU9wdGlvbi5wYWxldHRlOworfQor
CitzdGF0aWMgdm9pZCBpbml0U3BlY2lmaWNTdHlsZU9wdGlvbihRU3R5bGVPcHRpb24qLCBjb25z
dCBRU3R5bGVJbnRlcmZhY2VPcHRpb24mKQoreworfQorCitzdGF0aWMgdm9pZCBpbml0U3BlY2lm
aWNTdHlsZU9wdGlvbihRU3R5bGVPcHRpb25TbGlkZXIqIHNsaWRlck9wdGlvbiwgY29uc3QgUVN0
eWxlSW50ZXJmYWNlT3B0aW9uJiBpbnRlcmZhY2VPcHRpb24pCit7CisgICAgc2xpZGVyT3B0aW9u
LT5vcmllbnRhdGlvbiA9IGludGVyZmFjZU9wdGlvbi5zbGlkZXIub3JpZW50YXRpb247CisgICAg
c2xpZGVyT3B0aW9uLT51cHNpZGVEb3duID0gaW50ZXJmYWNlT3B0aW9uLnNsaWRlci51cHNpZGVE
b3duOworICAgIHNsaWRlck9wdGlvbi0+bWluaW11bSA9IGludGVyZmFjZU9wdGlvbi5zbGlkZXIu
bWluaW11bTsKKyAgICBzbGlkZXJPcHRpb24tPm1heGltdW0gPSBpbnRlcmZhY2VPcHRpb24uc2xp
ZGVyLm1heGltdW07CisgICAgc2xpZGVyT3B0aW9uLT5zbGlkZXJQb3NpdGlvbiA9IGludGVyZmFj
ZU9wdGlvbi5zbGlkZXIucG9zaXRpb247CisgICAgc2xpZGVyT3B0aW9uLT5zbGlkZXJWYWx1ZSA9
IGludGVyZmFjZU9wdGlvbi5zbGlkZXIudmFsdWU7CisgICAgc2xpZGVyT3B0aW9uLT5zaW5nbGVT
dGVwID0gaW50ZXJmYWNlT3B0aW9uLnNsaWRlci5zaW5nbGVTdGVwOworICAgIHNsaWRlck9wdGlv
bi0+cGFnZVN0ZXAgPSBpbnRlcmZhY2VPcHRpb24uc2xpZGVyLnBhZ2VTdGVwOworICAgIHNsaWRl
ck9wdGlvbi0+YWN0aXZlU3ViQ29udHJvbHMgPSBjb252ZXJ0VG9RU3R5bGVTdWJDb250cm9sKGlu
dGVyZmFjZU9wdGlvbi5zbGlkZXIuYWN0aXZlU3ViQ29udHJvbHMpOworfQorCit0ZW1wbGF0ZSA8
dHlwZW5hbWUgU3R5bGVPcHRpb24+CitjbGFzcyBNYXBwZWRTdHlsZU9wdGlvbiA6IHB1YmxpYyBT
dHlsZU9wdGlvbiB7CisKK3B1YmxpYzoKKyAgICBNYXBwZWRTdHlsZU9wdGlvbihRV2lkZ2V0KiB3
aWRnZXQsIGNvbnN0IFFTdHlsZUludGVyZmFjZU9wdGlvbiYgaW50ZXJmYWNlT3B0aW9uKQorICAg
IHsKKyAgICAgICAgaW5pdEdlbmVyaWNTdHlsZU9wdGlvbih0aGlzLCB3aWRnZXQsIGludGVyZmFj
ZU9wdGlvbik7CisgICAgICAgIGluaXRTcGVjaWZpY1N0eWxlT3B0aW9uKHRoaXMsIGludGVyZmFj
ZU9wdGlvbik7CisgICAgfQorfTsKKworc3RhdGljIFFTdHlsZTo6UGl4ZWxNZXRyaWMgY29udmVy
dFBpeGVsTWV0cmljKFFTdHlsZUludGVyZmFjZTo6UGl4ZWxNZXRyaWMgc3RhdGUpCit7CisjZGVm
aW5lIENPTlZFUlRfTUVUUklDKE1ldHJpYykgXAorICAgIGNhc2UgUVN0eWxlSW50ZXJmYWNlOjpN
ZXRyaWM6IHJldHVybiBRU3R5bGU6Ok1ldHJpYworCisgICAgc3dpdGNoIChzdGF0ZSkgeworICAg
ICAgICBGT1JfRUFDSF9NQVBQRURfTUVUUklDKENPTlZFUlRfTUVUUklDLCBTRU1JQ09MT04pOwor
ICAgIH0KKyAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICByZXR1cm4gUVN0eWxlOjpQTV9D
dXN0b21CYXNlOworCisjdW5kZWYgQ09OVkVSVF9NRVRSSUMKK30KKworc3RhdGljIFFTdHlsZUlu
dGVyZmFjZTo6U3ViQ29udHJvbCBjb252ZXJ0VG9RU3R5bGVJbnRlcmZhY2VTdWJDb250cm9sKFFT
dHlsZTo6U3ViQ29udHJvbCBzYykKK3sKKyNkZWZpbmUgQ09OVkVSVF9TVUJDT05UUk9MKEYsIFZh
bHVlKSBcCisgICAgY2FzZSBRU3R5bGU6OkY6IHJldHVybiBRU3R5bGVJbnRlcmZhY2U6OkYKKwor
ICAgIHN3aXRjaCAoc2MpIHsKKyAgICAgICAgRk9SX0VBQ0hfU1VCQ09OVFJPTChDT05WRVJUX1NV
QkNPTlRST0wsIFNFTUlDT0xPTik7CisgICAgfQorICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwor
ICAgIHJldHVybiBRU3R5bGVJbnRlcmZhY2U6OlNDX05vbmU7CisjdW5kZWYgQ09OVkVSVF9TVUJD
T05UUk9MCit9CisKK1FXZWJTdHlsZTo6UVdlYlN0eWxlKFBhZ2UqIHBhZ2UpCisgICAgOiBtX3Bh
Z2UocGFnZSkKKyAgICAsIG1fc3R5bGUoMCkKK3sKKyAgICBtX2ZhbGxiYWNrU3R5bGUgPSBRU3R5
bGVGYWN0b3J5OjpjcmVhdGUoUUxhdGluMVN0cmluZygid2luZG93cyIpKTsKKyAgICBtX293bkZh
bGxiYWNrU3R5bGUgPSB0cnVlOworICAgIGlmICghbV9mYWxsYmFja1N0eWxlKSB7CisgICAgICAg
IG1fZmFsbGJhY2tTdHlsZSA9IFFBcHBsaWNhdGlvbjo6c3R5bGUoKTsKKyAgICAgICAgbV9vd25G
YWxsYmFja1N0eWxlID0gZmFsc2U7CisgICAgfQorfQorCitRV2ViU3R5bGU6On5RV2ViU3R5bGUo
KQoreworICAgIGlmIChtX293bkZhbGxiYWNrU3R5bGUpCisgICAgICAgIGRlbGV0ZSBtX2ZhbGxi
YWNrU3R5bGU7Cit9CisKK1FSZWN0IFFXZWJTdHlsZTo6YnV0dG9uU3ViRWxlbWVudFJlY3QoUVN0
eWxlSW50ZXJmYWNlOjpCdXR0b25TdWJFbGVtZW50IGJ1dHRvbkVsZW1lbnQsIFN0YXRlIHN0YXRl
LCBjb25zdCBRUmVjdCYgb3JpZ2luYWxSZWN0KSBjb25zdAoreworICAgIGVuc3VyZVN0eWxlKCk7
CisKKyAgICBRU3R5bGVPcHRpb25CdXR0b24gb3B0aW9uOworICAgIG9wdGlvbi5zdGF0ZSA9IGNv
bnZlcnRUb1FTdHlsZVN0YXRlKHN0YXRlKTsKKyAgICBvcHRpb24ucmVjdCA9IG9yaWdpbmFsUmVj
dDsKKworICAgIFFTdHlsZTo6U3ViRWxlbWVudCBzdWJFbGVtZW50ID0gUVN0eWxlOjpTRV9DdXN0
b21CYXNlOworICAgIHN3aXRjaCAoYnV0dG9uRWxlbWVudCkgeworICAgIGNhc2UgUHVzaEJ1dHRv
bkxheW91dEl0ZW06IHN1YkVsZW1lbnQgPSBRU3R5bGU6OlNFX1B1c2hCdXR0b25MYXlvdXRJdGVt
OyBicmVhazsKKyAgICBjYXNlIFB1c2hCdXR0b25Db250ZW50czogc3ViRWxlbWVudCA9IFFTdHls
ZTo6U0VfUHVzaEJ1dHRvbkNvbnRlbnRzOyBicmVhazsKKyAgICBkZWZhdWx0OiBBU1NFUlRfTk9U
X1JFQUNIRUQoKTsKKyAgICB9CisgICAgcmV0dXJuIG1fc3R5bGUtPnN1YkVsZW1lbnRSZWN0KHN1
YkVsZW1lbnQsICZvcHRpb24pOworfQorCitpbnQgUVdlYlN0eWxlOjpmaW5kRnJhbWVMaW5lV2lk
dGgoKSBjb25zdAoreworICAgIGVuc3VyZVN0eWxlKCk7CisKKyAgICBpZiAoIW1fbGluZUVkaXQp
CisgICAgICAgIG1fbGluZUVkaXQucmVzZXQobmV3IFFMaW5lRWRpdCgpKTsKKworICAgIHJldHVy
biBtX3N0eWxlLT5waXhlbE1ldHJpYyhRU3R5bGU6OlBNX0RlZmF1bHRGcmFtZVdpZHRoLCAwLCBt
X2xpbmVFZGl0LmRhdGEoKSk7Cit9CisKK2ludCBRV2ViU3R5bGU6OnNpbXBsZVBpeGVsTWV0cmlj
KFFTdHlsZUludGVyZmFjZTo6UGl4ZWxNZXRyaWMgbWV0cmljLCBTdGF0ZSBzdGF0ZSwgUU9iamVj
dCAqd2lkZ2V0KSBjb25zdAoreworICAgIGVuc3VyZVN0eWxlKCk7CisKKyAgICBRU3R5bGVPcHRp
b24gb3B0OworICAgIG9wdC5zdGF0ZSA9IGNvbnZlcnRUb1FTdHlsZVN0YXRlKHN0YXRlKTsKKyAg
ICByZXR1cm4gbV9zdHlsZS0+cGl4ZWxNZXRyaWMoY29udmVydFBpeGVsTWV0cmljKG1ldHJpYyks
ICZvcHQsIHFvYmplY3RfY2FzdDxRV2lkZ2V0Kj4od2lkZ2V0KSk7Cit9CisKK2ludCBRV2ViU3R5
bGU6OmJ1dHRvbk1hcmdpbihTdGF0ZSBzdGF0ZSwgY29uc3QgUVJlY3QmIG9yaWdpbmFsUmVjdCkg
Y29uc3QKK3sKKyAgICBlbnN1cmVTdHlsZSgpOworCisgICAgUVN0eWxlT3B0aW9uQnV0dG9uIHN0
eWxlT3B0aW9uOworICAgIHN0eWxlT3B0aW9uLnN0YXRlID0gY29udmVydFRvUVN0eWxlU3RhdGUo
c3RhdGUpOworICAgIHN0eWxlT3B0aW9uLnJlY3QgPSBvcmlnaW5hbFJlY3Q7CisgICAgcmV0dXJu
IG1fc3R5bGUtPnBpeGVsTWV0cmljKFFTdHlsZTo6UE1fQnV0dG9uTWFyZ2luLCAmc3R5bGVPcHRp
b24sIDApOworfQorCitpbnQgUVdlYlN0eWxlOjpzbGlkZXJMZW5ndGgoUXQ6Ok9yaWVudGF0aW9u
IG9yaWVudGF0aW9uKSBjb25zdAoreworICAgIGVuc3VyZVN0eWxlKCk7CisKKyAgICBRU3R5bGVP
cHRpb25TbGlkZXIgb3B0OworICAgIG9wdC5vcmllbnRhdGlvbiA9IG9yaWVudGF0aW9uOworICAg
IHJldHVybiBtX3N0eWxlLT5waXhlbE1ldHJpYyhRU3R5bGU6OlBNX1NsaWRlckxlbmd0aCwgJm9w
dCk7Cit9CisKK2ludCBRV2ViU3R5bGU6OnNsaWRlclRoaWNrbmVzcyhRdDo6T3JpZW50YXRpb24g
b3JpZW50YXRpb24pIGNvbnN0Cit7CisgICAgZW5zdXJlU3R5bGUoKTsKKworICAgIFFTdHlsZU9w
dGlvblNsaWRlciBvcHQ7CisgICAgb3B0Lm9yaWVudGF0aW9uID0gb3JpZW50YXRpb247CisgICAg
cmV0dXJuIG1fc3R5bGUtPnBpeGVsTWV0cmljKFFTdHlsZTo6UE1fU2xpZGVyVGhpY2tuZXNzLCAm
b3B0KTsKK30KKworaW50IFFXZWJTdHlsZTo6cHJvZ3Jlc3NCYXJDaHVua1dpZHRoKGNvbnN0IFFT
aXplJiBzaXplKSBjb25zdAoreworICAgIGVuc3VyZVN0eWxlKCk7CisKKyAgICBRU3R5bGVPcHRp
b25Qcm9ncmVzc0JhclYyIG9wdGlvbjsKKyAgICBvcHRpb24ucmVjdC5zZXRTaXplKHNpemUpOwor
ICAgIC8vIEZJWE1FOiBVbnRpbCBodHRwOi8vYnVncmVwb3J0cy5xdC5ub2tpYS5jb20vYnJvd3Nl
L1FUQlVHLTkxNzEgaXMgZml4ZWQsCisgICAgLy8gd2Ugc2ltdWxhdGUgb25lIHNxdWFyZSBhbmlt
YXRpbmcgYWNyb3NzIHRoZSBwcm9ncmVzcyBiYXIuCisgICAgcmV0dXJuIG1fc3R5bGUtPnBpeGVs
TWV0cmljKFFTdHlsZTo6UE1fUHJvZ3Jlc3NCYXJDaHVua1dpZHRoLCAmb3B0aW9uKTsKK30KKwor
dm9pZCBRV2ViU3R5bGU6OmdldEJ1dHRvbk1ldHJpY3MoUVN0cmluZyAqYnV0dG9uRm9udEZhbWls
eSwgaW50ICpidXR0b25Gb250UGl4ZWxTaXplKSBjb25zdAoreworICAgIFFQdXNoQnV0dG9uIGJ1
dHRvbjsKKyAgICBRRm9udCBkZWZhdWx0QnV0dG9uRm9udCA9IFFBcHBsaWNhdGlvbjo6Zm9udCgm
YnV0dG9uKTsKKyAgICAqYnV0dG9uRm9udEZhbWlseSA9IGRlZmF1bHRCdXR0b25Gb250LmZhbWls
eSgpOworICAgICpidXR0b25Gb250UGl4ZWxTaXplID0gMDsKKyNpZmRlZiBRX1dTX01BQworICAg
IGJ1dHRvbi5zZXRBdHRyaWJ1dGUoUXQ6OldBX01hY1NtYWxsU2l6ZSk7CisgICAgUUZvbnRJbmZv
IGZvbnRJbmZvKGRlZmF1bHRCdXR0b25Gb250KTsKKyAgICAqYnV0dG9uRm9udFBpeGVsU2l6ZSA9
IGZvbnRJbmZvLnBpeGVsU2l6ZSgpOworI2VuZGlmCit9CisKK1FTaXplIFFXZWJTdHlsZTo6c2l6
ZUZyb21Db250ZW50cyhRU3R5bGVJbnRlcmZhY2U6OkNvbnRlbnRzVHlwZSB0eXBlLCBRU3R5bGVJ
bnRlcmZhY2U6OlN0YXRlIHN0YXRlLCBjb25zdCBRU2l6ZSYgY29udGVudHNTaXplKSBjb25zdAor
eworICAgIGVuc3VyZVN0eWxlKCk7CisKKyAgICBRU3R5bGVPcHRpb24gb3B0OworICAgIG9wdC5z
dGF0ZSA9IGNvbnZlcnRUb1FTdHlsZVN0YXRlKHN0YXRlKTsKKworICAgIFFTdHlsZTo6Q29udGVu
dHNUeXBlIGNvbnRlbnRzVHlwZSA9IFFTdHlsZTo6Q1RfQ3VzdG9tQmFzZTsKKyAgICBzd2l0Y2gg
KHR5cGUpIHsKKyAgICBjYXNlIFFTdHlsZUludGVyZmFjZTo6Q1RfQ29tYm9Cb3g6IGNvbnRlbnRz
VHlwZSA9IFFTdHlsZTo6Q1RfQ29tYm9Cb3g7IGJyZWFrOworICAgIGNhc2UgUVN0eWxlSW50ZXJm
YWNlOjpDVF9QdXNoQnV0dG9uOiBjb250ZW50c1R5cGUgPSBRU3R5bGU6OkNUX1B1c2hCdXR0b247
IGJyZWFrOworICAgIH0KKworICAgIHJldHVybiBtX3N0eWxlLT5zaXplRnJvbUNvbnRlbnRzKGNv
bnRlbnRzVHlwZSwgJm9wdCwgY29udGVudHNTaXplKTsKK30KKwordm9pZCBRV2ViU3R5bGU6OnBh
aW50QnV0dG9uKFFQYWludGVyKiBwYWludGVyLCBRU3R5bGVJbnRlcmZhY2U6OkJ1dHRvblR5cGUg
dHlwZSwgY29uc3QgUVN0eWxlSW50ZXJmYWNlT3B0aW9uICZwcm94eU9wdGlvbiwgUU9iamVjdCAq
d2lkZ2V0T2JqKQoreworICAgIGVuc3VyZVN0eWxlKCk7CisKKyAgICBRV2lkZ2V0KiB3aWRnZXQg
PSBxb2JqZWN0X2Nhc3Q8UVdpZGdldCo+KHdpZGdldE9iaik7CisgICAgTWFwcGVkU3R5bGVPcHRp
b248UVN0eWxlT3B0aW9uQnV0dG9uPiBvcHRpb24od2lkZ2V0LCBwcm94eU9wdGlvbik7CisKKyAg
ICBpZiAodHlwZSA9PSBQdXNoQnV0dG9uKSB7CisgICAgICAgIG1fc3R5bGUtPmRyYXdDb250cm9s
KFFTdHlsZTo6Q0VfUHVzaEJ1dHRvbiwgJm9wdGlvbiwgcGFpbnRlciwgd2lkZ2V0KTsKKyAgICB9
IGVsc2UgaWYgKHR5cGUgPT0gUmFkaW9CdXR0b24pCisgICAgICAgbV9zdHlsZS0+ZHJhd0NvbnRy
b2woUVN0eWxlOjpDRV9SYWRpb0J1dHRvbiwgJm9wdGlvbiwgcGFpbnRlciwgd2lkZ2V0KTsKKyAg
ICBlbHNlIGlmICh0eXBlID09IENoZWNrQm94KQorICAgICAgICBtX3N0eWxlLT5kcmF3Q29udHJv
bChRU3R5bGU6OkNFX0NoZWNrQm94LCAmb3B0aW9uLCBwYWludGVyLCB3aWRnZXQpOworfQorCit2
b2lkIFFXZWJTdHlsZTo6cGFpbnRUZXh0RmllbGQoUVBhaW50ZXIgKnBhaW50ZXIsIGNvbnN0IFFT
dHlsZUludGVyZmFjZU9wdGlvbiAmcHJveHlPcHRpb24sIFFPYmplY3QgKndpZGdldE9iaikKK3sK
KyAgICBlbnN1cmVTdHlsZSgpOworCisgICAgUVdpZGdldCogd2lkZ2V0ID0gcW9iamVjdF9jYXN0
PFFXaWRnZXQqPih3aWRnZXRPYmopOworCisgICAgTWFwcGVkU3R5bGVPcHRpb248UVN0eWxlT3B0
aW9uRnJhbWVWMj4gcGFuZWwod2lkZ2V0LCBwcm94eU9wdGlvbik7CisKKyAgICBwYW5lbC5saW5l
V2lkdGggPSBmaW5kRnJhbWVMaW5lV2lkdGgoKTsKKyAgICBwYW5lbC5mZWF0dXJlcyA9IFFTdHls
ZU9wdGlvbkZyYW1lVjI6Ok5vbmU7CisKKyAgICBtX3N0eWxlLT5kcmF3UHJpbWl0aXZlKFFTdHls
ZTo6UEVfUGFuZWxMaW5lRWRpdCwgJnBhbmVsLCBwYWludGVyLCB3aWRnZXQpOworfQorCit2b2lk
IFFXZWJTdHlsZTo6cGFpbnRDb21ib0JveChRUGFpbnRlciAqcGFpbnRlciwgY29uc3QgUVN0eWxl
SW50ZXJmYWNlT3B0aW9uICZwcm94eU9wdGlvbiwgUU9iamVjdCogd2lkZ2V0T2JqKQoreworICAg
IGVuc3VyZVN0eWxlKCk7CisgICAgUVdpZGdldCogd2lkZ2V0ID0gcW9iamVjdF9jYXN0PFFXaWRn
ZXQqPih3aWRnZXRPYmopOworCisgICAgTWFwcGVkU3R5bGVPcHRpb248UVN0eWxlT3B0aW9uQ29t
Ym9Cb3g+IG9wdCh3aWRnZXQsIHByb3h5T3B0aW9uKTsKKworICAgIEludFJlY3QgcmVjdCA9IG9w
dC5yZWN0OworCisjaWYgZGVmaW5lZChRX1dTX01BQykgJiYgIWRlZmluZWQoUVRfTk9fU1RZTEVf
TUFDKQorICAgIC8vIFFNYWNTdHlsZSBtYWtlcyB0aGUgY29tYm8gYm94ZXMgYSBsaXR0bGUgYml0
IHNtYWxsZXIgdG8gbGVhdmUgc3BhY2UgZm9yIHRoZSBmb2N1cyByZWN0LgorICAgIC8vIEJlY2F1
c2Ugb2YgaXQsIHRoZSBjb21ibyBidXR0b24gaXMgZHJhd24gYXQgYSBwb2ludCB0byB0aGUgbGVm
dCBvZiB3aGVyZSBpdCB3YXMgZXhwZWN0IHRvIGJlIGFuZCBtYXkgZW5kIHVwCisgICAgLy8gb3Zl
cmxhcHBlZCB3aXRoIHRoZSB0ZXh0LiBUaGlzIHdpbGwgZm9yY2UgUU1hY1N0eWxlIHRvIGRyYXcg
dGhlIGNvbWJvIGJveCB3aXRoIHRoZSBleHBlY3RlZCB3aWR0aC4KKyAgICBpZiAocW9iamVjdF9j
YXN0PFFNYWNTdHlsZSo+KG1fc3R5bGUpKQorICAgICAgICByZWN0LmluZmxhdGVYKDMpOworI2Vu
ZGlmCisKKyAgICBjb25zdCBRUG9pbnQgdG9wTGVmdCA9IHJlY3QubG9jYXRpb24oKTsKKyAgICBw
YWludGVyLT50cmFuc2xhdGUodG9wTGVmdCk7CisgICAgb3B0LnJlY3QubW92ZVRvKFFQb2ludCgw
LCAwKSk7CisgICAgb3B0LnJlY3Quc2V0U2l6ZShyZWN0LnNpemUoKSk7CisKKyAgICBtX3N0eWxl
LT5kcmF3Q29tcGxleENvbnRyb2woUVN0eWxlOjpDQ19Db21ib0JveCwgJm9wdCwgcGFpbnRlciwg
d2lkZ2V0KTsKKyAgICBwYWludGVyLT50cmFuc2xhdGUoLXRvcExlZnQpOworfQorCit2b2lkIFFX
ZWJTdHlsZTo6cGFpbnRDb21ib0JveEFycm93KFFQYWludGVyICpwYWludGVyLCBjb25zdCBRU3R5
bGVJbnRlcmZhY2VPcHRpb24gJnByb3h5T3B0aW9uLCBRT2JqZWN0ICp3aWRnZXRPYmopCit7Cisg
ICAgZW5zdXJlU3R5bGUoKTsKKyAgICBRV2lkZ2V0KiB3aWRnZXQgPSBxb2JqZWN0X2Nhc3Q8UVdp
ZGdldCo+KHdpZGdldE9iaik7CisKKyAgICBNYXBwZWRTdHlsZU9wdGlvbjxRU3R5bGVPcHRpb25D
b21ib0JveD4gb3B0KHdpZGdldCwgcHJveHlPcHRpb24pOworICAgIG9wdC5zdWJDb250cm9scyA9
IFFTdHlsZTo6U0NfQ29tYm9Cb3hBcnJvdzsKKyAgICAvLyBmb3IgZHJhd2luZyB0aGUgY29tYm8g
Ym94IGFycm93LCByZWx5IG9ubHkgb24gdGhlIGZhbGxiYWNrIHN0eWxlCisgICAgbV9mYWxsYmFj
a1N0eWxlLT5kcmF3Q29tcGxleENvbnRyb2woUVN0eWxlOjpDQ19Db21ib0JveCwgJm9wdCwgcGFp
bnRlciwgd2lkZ2V0KTsKK30KKwordm9pZCBRV2ViU3R5bGU6OnBhaW50U2xpZGVyVHJhY2soUVBh
aW50ZXIqIHBhaW50ZXIsIGNvbnN0IFFTdHlsZUludGVyZmFjZU9wdGlvbiYgcHJveHlPcHRpb24s
IFFPYmplY3QgKndpZGdldE9iaikKK3sKKyAgICBlbnN1cmVTdHlsZSgpOworICAgIFFXaWRnZXQq
IHdpZGdldCA9IHFvYmplY3RfY2FzdDxRV2lkZ2V0Kj4od2lkZ2V0T2JqKTsKKworICAgIE1hcHBl
ZFN0eWxlT3B0aW9uPFFTdHlsZU9wdGlvblNsaWRlcj4gb3B0aW9uKHdpZGdldCwgcHJveHlPcHRp
b24pOworICAgIG9wdGlvbi5zdWJDb250cm9scyA9IFFTdHlsZTo6U0NfU2xpZGVyR3Jvb3ZlOwor
CisgICAgb3B0aW9uLnVwc2lkZURvd24gPSBwcm94eU9wdGlvbi5zbGlkZXIudXBzaWRlRG93bjsK
KyAgICBvcHRpb24ubWluaW11bSA9IHByb3h5T3B0aW9uLnNsaWRlci5taW5pbXVtOworICAgIG9w
dGlvbi5tYXhpbXVtID0gcHJveHlPcHRpb24uc2xpZGVyLm1heGltdW07CisgICAgb3B0aW9uLnNs
aWRlclBvc2l0aW9uID0gcHJveHlPcHRpb24uc2xpZGVyLnBvc2l0aW9uOworICAgIG9wdGlvbi5v
cmllbnRhdGlvbiA9IHByb3h5T3B0aW9uLnNsaWRlci5vcmllbnRhdGlvbjsKKworICAgIG1fc3R5
bGUtPmRyYXdDb21wbGV4Q29udHJvbChRU3R5bGU6OkNDX1NsaWRlciwgJm9wdGlvbiwgcGFpbnRl
ciwgd2lkZ2V0KTsKKworICAgIGlmIChvcHRpb24uc3RhdGUgJiBRU3R5bGU6OlN0YXRlX0hhc0Zv
Y3VzKSB7CisgICAgICAgIFFTdHlsZU9wdGlvbkZvY3VzUmVjdCBmb2N1c09wdGlvbjsKKyAgICAg
ICAgZm9jdXNPcHRpb24ucmVjdCA9IG9wdGlvbi5yZWN0OworICAgICAgICBtX3N0eWxlLT5kcmF3
UHJpbWl0aXZlKFFTdHlsZTo6UEVfRnJhbWVGb2N1c1JlY3QsICZmb2N1c09wdGlvbiwgcGFpbnRl
ciwgd2lkZ2V0KTsKKyAgICB9Cit9CisKK3ZvaWQgUVdlYlN0eWxlOjpwYWludFNsaWRlclRodW1i
KFFQYWludGVyKiBwYWludGVyLCBjb25zdCBRU3R5bGVJbnRlcmZhY2VPcHRpb24mIHByb3h5T3B0
aW9uLCBRT2JqZWN0ICp3aWRnZXRPYmopCit7CisgICAgZW5zdXJlU3R5bGUoKTsKKyAgICBRV2lk
Z2V0KiB3aWRnZXQgPSBxb2JqZWN0X2Nhc3Q8UVdpZGdldCo+KHdpZGdldE9iaik7CisKKyAgICBN
YXBwZWRTdHlsZU9wdGlvbjxRU3R5bGVPcHRpb25TbGlkZXI+IG9wdGlvbih3aWRnZXQsIHByb3h5
T3B0aW9uKTsKKworICAgIG9wdGlvbi5zdWJDb250cm9scyA9IFFTdHlsZTo6U0NfU2xpZGVySGFu
ZGxlOworICAgIGlmIChvcHRpb24uc3RhdGUgJiBRU3R5bGU6OlN0YXRlX1N1bmtlbikKKyAgICAg
ICAgb3B0aW9uLmFjdGl2ZVN1YkNvbnRyb2xzID0gUVN0eWxlOjpTQ19TbGlkZXJIYW5kbGU7CisK
KyAgICBtX3N0eWxlLT5kcmF3Q29tcGxleENvbnRyb2woUVN0eWxlOjpDQ19TbGlkZXIsICZvcHRp
b24sIHBhaW50ZXIsIHdpZGdldCk7Cit9CisKK3ZvaWQgUVdlYlN0eWxlOjpwYWludElubmVyU3Bp
bkJ1dHRvbihRUGFpbnRlciogcGFpbnRlciwgY29uc3QgUVN0eWxlSW50ZXJmYWNlT3B0aW9uJiBw
cm94eU9wdGlvbiwgYm9vbCBzcGluQm94VXAsIFFPYmplY3QqIHdpZGdldE9iaikKK3sKKyAgICBl
bnN1cmVTdHlsZSgpOworICAgIFFXaWRnZXQqIHdpZGdldCA9IHFvYmplY3RfY2FzdDxRV2lkZ2V0
Kj4od2lkZ2V0T2JqKTsKKworICAgIE1hcHBlZFN0eWxlT3B0aW9uPFFTdHlsZU9wdGlvblNwaW5C
b3g+IG9wdGlvbih3aWRnZXQsIHByb3h5T3B0aW9uKTsKKworICAgIG9wdGlvbi5zdWJDb250cm9s
cyA9IFFTdHlsZTo6U0NfU3BpbkJveFVwIHwgUVN0eWxlOjpTQ19TcGluQm94RG93bjsKKyAgICBp
ZiAoIShvcHRpb24uc3RhdGUgJiBRU3R5bGU6OlN0YXRlX1JlYWRPbmx5KSkgeworICAgICAgICBp
ZiAob3B0aW9uLnN0YXRlICYgUVN0eWxlOjpTdGF0ZV9FbmFibGVkKQorICAgICAgICAgICAgb3B0
aW9uLnN0ZXBFbmFibGVkID0gUUFic3RyYWN0U3BpbkJveDo6U3RlcFVwRW5hYmxlZCB8IFFBYnN0
cmFjdFNwaW5Cb3g6OlN0ZXBEb3duRW5hYmxlZDsKKyAgICAgICAgaWYgKG9wdGlvbi5zdGF0ZSAm
IFFTdHlsZTo6U3RhdGVfU3Vua2VuKSB7CisgICAgICAgICAgICBpZiAoc3BpbkJveFVwKQorICAg
ICAgICAgICAgICAgIG9wdGlvbi5hY3RpdmVTdWJDb250cm9scyA9IFFTdHlsZTo6U0NfU3BpbkJv
eFVwOworICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgIG9wdGlvbi5hY3RpdmVTdWJD
b250cm9scyA9IFFTdHlsZTo6U0NfU3BpbkJveERvd247CisgICAgICAgIH0KKyAgICB9CisKKyAg
ICBJbnRSZWN0IGJ1dHRvblJlY3QgPSBvcHRpb24ucmVjdDsKKyAgICAvLyBEZWZhdWx0IHRvIG1v
dmluZyB0aGUgYnV0dG9ucyBhIGxpdHRsZSBiaXQgd2l0aGluIHRoZSBlZGl0b3IgZnJhbWUuCisg
ICAgaW50IGluZmxhdGVYID0gLTI7CisgICAgaW50IGluZmxhdGVZID0gLTI7CisjaWYgZGVmaW5l
ZChRX1dTX01BQykgJiYgIWRlZmluZWQoUVRfTk9fU1RZTEVfTUFDKQorICAgIC8vIFFNYWNTdHls
ZSB3aWxsIHBvc2l0aW9uIHRoZSBhcXVhIGJ1dHRvbnMgZmx1c2ggdG8gdGhlIHJpZ2h0LgorICAg
IC8vIFRoaXMgd2lsbCBtb3ZlIHRoZW0gbW9yZSB3aXRoaW4gdGhlIGNvbnRyb2wgZm9yIGJldHRl
ciBzdHlsZSwgYSBsYQorICAgIC8vIENocm9taXVtIGxvb2sgJiBmZWVsLgorICAgIGlmIChxb2Jq
ZWN0X2Nhc3Q8UU1hY1N0eWxlKj4obV9zdHlsZSkpIHsKKyAgICAgICAgaW5mbGF0ZVggPSAtNDsK
KyAgICAgICAgLy8gUmVuZGVyIG1pbmkgYXF1YSBzcGluIGJ1dHRvbnMgZm9yIFFNYWNTdHlsZSB0
byBmaXQgbmljZWx5IGludG8KKyAgICAgICAgLy8gdGhlIGVkaXRvciBhcmVhLCBsaWtlIENocm9t
aXVtLgorICAgICAgICBvcHRpb24uc3RhdGUgfD0gUVN0eWxlOjpTdGF0ZV9NaW5pOworICAgIH0K
KyNlbmRpZgorI2lmICFkZWZpbmVkKFFUX05PX1NUWUxFX1BMQVNUSVFVRSkKKyAgICAvLyBRUGxh
c3RpcXVlU3R5bGUgbG9va3MgYmVzdCB3aGVuIHRoZSBzcGluIGJ1dHRvbnMgYXJlIGZsdXNoIHdp
dGggdGhlIGZyYW1lJ3MgZWRnZS4KKyAgICBpZiAocW9iamVjdF9jYXN0PFFQbGFzdGlxdWVTdHls
ZSo+KG1fc3R5bGUpKSB7CisgICAgICAgIGluZmxhdGVYID0gMDsKKyAgICAgICAgaW5mbGF0ZVkg
PSAwOworICAgIH0KKyNlbmRpZgorCisgICAgYnV0dG9uUmVjdC5pbmZsYXRlWChpbmZsYXRlWCk7
CisgICAgYnV0dG9uUmVjdC5pbmZsYXRlWShpbmZsYXRlWSk7CisgICAgb3B0aW9uLnJlY3QgPSBi
dXR0b25SZWN0OworCisgICAgbV9zdHlsZS0+ZHJhd0NvbXBsZXhDb250cm9sKFFTdHlsZTo6Q0Nf
U3BpbkJveCwgJm9wdGlvbiwgcGFpbnRlciwgd2lkZ2V0KTsKK30KKwordm9pZCBRV2ViU3R5bGU6
OnBhaW50UHJvZ3Jlc3NCYXIoUVBhaW50ZXIqIHBhaW50ZXIsIGNvbnN0IFFTdHlsZUludGVyZmFj
ZU9wdGlvbiYgcHJveHlPcHRpb24sIGRvdWJsZSBwcm9ncmVzcywgZG91YmxlIGFuaW1hdGlvblBy
b2dyZXNzLCBRT2JqZWN0ICp3aWRnZXRPYmopCit7CisgICAgZW5zdXJlU3R5bGUoKTsKKyAgICBR
V2lkZ2V0KiB3aWRnZXQgPSBxb2JqZWN0X2Nhc3Q8UVdpZGdldCo+KHdpZGdldE9iaik7CisKKyAg
ICBNYXBwZWRTdHlsZU9wdGlvbjxRU3R5bGVPcHRpb25Qcm9ncmVzc0JhclYyPiBvcHRpb24od2lk
Z2V0LCBwcm94eU9wdGlvbik7CisKKyAgICBvcHRpb24ubWF4aW11bSA9IHN0ZDo6bnVtZXJpY19s
aW1pdHM8aW50Pjo6bWF4KCk7CisgICAgb3B0aW9uLm1pbmltdW0gPSAwOworICAgIG9wdGlvbi5w
cm9ncmVzcyA9IHByb2dyZXNzICogc3RkOjpudW1lcmljX2xpbWl0czxpbnQ+OjptYXgoKTsKKwor
ICAgIGNvbnN0IFFQb2ludCB0b3BMZWZ0ID0gb3B0aW9uLnJlY3QudG9wTGVmdCgpOworICAgIHBh
aW50ZXItPnRyYW5zbGF0ZSh0b3BMZWZ0KTsKKyAgICBvcHRpb24ucmVjdC5tb3ZlVG8oUVBvaW50
KDAsIDApKTsKKworICAgIGlmIChwcm9ncmVzcyA8IDApIHsKKyAgICAgICAgLy8gRklYTUU6IFVu
dGlsIGh0dHA6Ly9idWdyZXBvcnRzLnF0Lm5va2lhLmNvbS9icm93c2UvUVRCVUctOTE3MSBpcyBm
aXhlZCwKKyAgICAgICAgLy8gd2Ugc2ltdWxhdGUgb25lIHNxdWFyZSBhbmltYXRpbmcgYWNyb3Nz
IHRoZSBwcm9ncmVzcyBiYXIuCisgICAgICAgIG1fc3R5bGUtPmRyYXdDb250cm9sKFFTdHlsZTo6
Q0VfUHJvZ3Jlc3NCYXJHcm9vdmUsICZvcHRpb24sIHBhaW50ZXIsIHdpZGdldCk7CisgICAgICAg
IGludCBjaHVua1dpZHRoID0gbV9zdHlsZS0+cGl4ZWxNZXRyaWMoUVN0eWxlOjpQTV9Qcm9ncmVz
c0JhckNodW5rV2lkdGgsICZvcHRpb24pOworICAgICAgICBRQ29sb3IgY29sb3IgPSAob3B0aW9u
LnBhbGV0dGUuaGlnaGxpZ2h0KCkgPT0gb3B0aW9uLnBhbGV0dGUuYmFja2dyb3VuZCgpKSA/IG9w
dGlvbi5wYWxldHRlLmNvbG9yKFFQYWxldHRlOjpBY3RpdmUsIFFQYWxldHRlOjpIaWdobGlnaHQp
IDogb3B0aW9uLnBhbGV0dGUuY29sb3IoUVBhbGV0dGU6OkhpZ2hsaWdodCk7CisgICAgICAgIGlm
IChvcHRpb24uZGlyZWN0aW9uID09IFF0OjpSaWdodFRvTGVmdCkKKyAgICAgICAgICAgIHBhaW50
ZXItPmZpbGxSZWN0KG9wdGlvbi5yZWN0LnJpZ2h0KCkgLSBjaHVua1dpZHRoICAtIGFuaW1hdGlv
blByb2dyZXNzICogb3B0aW9uLnJlY3Qud2lkdGgoKSwgMCwgY2h1bmtXaWR0aCwgb3B0aW9uLnJl
Y3QuaGVpZ2h0KCksIGNvbG9yKTsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgcGFpbnRlci0+
ZmlsbFJlY3QoYW5pbWF0aW9uUHJvZ3Jlc3MgKiBvcHRpb24ucmVjdC53aWR0aCgpLCAwLCBjaHVu
a1dpZHRoLCBvcHRpb24ucmVjdC5oZWlnaHQoKSwgY29sb3IpOworICAgIH0gZWxzZQorICAgICAg
ICBtX3N0eWxlLT5kcmF3Q29udHJvbChRU3R5bGU6OkNFX1Byb2dyZXNzQmFyLCAmb3B0aW9uLCBw
YWludGVyLCB3aWRnZXQpOworCisgICAgcGFpbnRlci0+dHJhbnNsYXRlKC10b3BMZWZ0KTsKK30K
KworaW50IFFXZWJTdHlsZTo6c2Nyb2xsQmFyRXh0ZW50KGJvb2wgbWluaSkKK3sKKyAgICBlbnN1
cmVTdHlsZSgpOworCisgICAgUVN0eWxlT3B0aW9uU2xpZGVyIG87CisgICAgby5vcmllbnRhdGlv
biA9IFF0OjpWZXJ0aWNhbDsKKyAgICBvLnN0YXRlICY9IH5RU3R5bGU6OlN0YXRlX0hvcml6b250
YWw7CisgICAgaWYgKG1pbmkpCisgICAgICAgIG8uc3RhdGUgfD0gUVN0eWxlOjpTdGF0ZV9NaW5p
OworICAgIHJldHVybiBtX3N0eWxlLT5waXhlbE1ldHJpYyhRU3R5bGU6OlBNX1Njcm9sbEJhckV4
dGVudCwgJm8sIDApOworfQorCitib29sIFFXZWJTdHlsZTo6c2Nyb2xsQmFyTWlkZGxlQ2xpY2tB
YnNvbHV0ZVBvc2l0aW9uU3R5bGVIaW50KCkgY29uc3QKK3sKKyAgICBlbnN1cmVTdHlsZSgpOwor
ICAgIHJldHVybiBtX3N0eWxlLT5zdHlsZUhpbnQoUVN0eWxlOjpTSF9TY3JvbGxCYXJfTWlkZGxl
Q2xpY2tBYnNvbHV0ZVBvc2l0aW9uKTsKK30KKwordm9pZCBRV2ViU3R5bGU6OnBhaW50U2Nyb2xs
Q29ybmVyKFFQYWludGVyKiBwYWludGVyLCBjb25zdCBRUmVjdCYgcmVjdCwgUU9iamVjdCogd2lk
Z2V0T2JqKQoreworICAgIGVuc3VyZVN0eWxlKCk7CisgICAgUVdpZGdldCogd2lkZ2V0ID0gcW9i
amVjdF9jYXN0PFFXaWRnZXQqPih3aWRnZXRPYmopOworCisgICAgUVN0eWxlT3B0aW9uIG9wdGlv
bjsKKyAgICBvcHRpb24ucmVjdCA9IHJlY3Q7CisgICAgbV9zdHlsZS0+ZHJhd1ByaW1pdGl2ZShR
U3R5bGU6OlBFX1BhbmVsU2Nyb2xsQXJlYUNvcm5lciwgJm9wdGlvbiwgcGFpbnRlciwgd2lkZ2V0
KTsKK30KKworUVN0eWxlSW50ZXJmYWNlOjpTdWJDb250cm9sIFFXZWJTdHlsZTo6aGl0VGVzdFNj
cm9sbEJhcihjb25zdCBRU3R5bGVJbnRlcmZhY2VPcHRpb24gJnByb3h5T3B0aW9uLCBjb25zdCBR
UG9pbnQgJnBvcykKK3sKKyAgICBlbnN1cmVTdHlsZSgpOworICAgIE1hcHBlZFN0eWxlT3B0aW9u
PFFTdHlsZU9wdGlvblNsaWRlcj4gb3B0KDAsIHByb3h5T3B0aW9uKTsKKyAgICBRU3R5bGU6OlN1
YkNvbnRyb2wgc2MgPSBtX3N0eWxlLT5oaXRUZXN0Q29tcGxleENvbnRyb2woUVN0eWxlOjpDQ19T
Y3JvbGxCYXIsICZvcHQsIHBvcywgMCk7CisgICAgcmV0dXJuIGNvbnZlcnRUb1FTdHlsZUludGVy
ZmFjZVN1YkNvbnRyb2woc2MpOworfQorCitRUmVjdCBRV2ViU3R5bGU6OnNjcm9sbEJhclN1YkNv
bnRyb2xSZWN0KGNvbnN0IFFTdHlsZUludGVyZmFjZU9wdGlvbiAmcHJveHlPcHRpb24sIFFTdHls
ZUludGVyZmFjZTo6U3ViQ29udHJvbCBzdWJDb250cm9sKQoreworICAgIGVuc3VyZVN0eWxlKCk7
CisgICAgTWFwcGVkU3R5bGVPcHRpb248UVN0eWxlT3B0aW9uU2xpZGVyPiBvcHQoMCwgcHJveHlP
cHRpb24pOworICAgIHJldHVybiBtX3N0eWxlLT5zdWJDb250cm9sUmVjdChRU3R5bGU6OkNDX1Nj
cm9sbEJhciwgJm9wdCwgY29udmVydFRvUVN0eWxlU3ViQ29udHJvbChzdWJDb250cm9sKSwgMCk7
Cit9CisKK3ZvaWQgUVdlYlN0eWxlOjpwYWludFNjcm9sbEJhcihRUGFpbnRlciAqcGFpbnRlciwg
Y29uc3QgUVN0eWxlSW50ZXJmYWNlT3B0aW9uICZwcm94eU9wdGlvbiwgUU9iamVjdCAqd2lkZ2V0
T2JqKQoreworICAgIGVuc3VyZVN0eWxlKCk7CisgICAgUVdpZGdldCogd2lkZ2V0ID0gcW9iamVj
dF9jYXN0PFFXaWRnZXQqPih3aWRnZXRPYmopOworCisgICAgTWFwcGVkU3R5bGVPcHRpb248UVN0
eWxlT3B0aW9uU2xpZGVyPiBvcHQod2lkZ2V0LCBwcm94eU9wdGlvbik7CisKKyNpZmRlZiBRX1dT
X01BQworICAgIC8vIEZJWE1FOiBXZSBhbHNvIG5lZWQgdG8gY2hlY2sgdGhlIHdpZGdldCBzdHls
ZSBidXQgdG9kYXkgU2Nyb2xsYmFyVGhlbWUgaXMgbm90IGF3YXJlIG9mIHRoZSBwYWdlIHNvIHdl
CisgICAgLy8gY2FuJ3QgZ2V0IHRoZSB3aWRnZXQuCisgICAgaWYgKHFvYmplY3RfY2FzdDxRTWFj
U3R5bGUqPihtX3N0eWxlKSkKKyAgICAgICAgbV9zdHlsZS0+ZHJhd0NvbXBsZXhDb250cm9sKFFT
dHlsZTo6Q0NfU2Nyb2xsQmFyLCAmb3B0LCBwYWludGVyLCB3aWRnZXQpOworICAgIGVsc2UKKyNl
bmRpZgorICAgIHsKKyAgICAgICAgLy8gVGhlIFFTdHlsZSBleHBlY3RzIHRoZSBiYWNrZ3JvdW5k
IHRvIGJlIGFscmVhZHkgZmlsbGVkLgorICAgICAgICBwYWludGVyLT5maWxsUmVjdChvcHQucmVj
dCwgb3B0LnBhbGV0dGUuYmFja2dyb3VuZCgpKTsKKworICAgICAgICBjb25zdCBRUG9pbnQgdG9w
TGVmdCA9IG9wdC5yZWN0LnRvcExlZnQoKTsKKyAgICAgICAgcGFpbnRlci0+dHJhbnNsYXRlKHRv
cExlZnQpOworICAgICAgICBvcHQucmVjdC5tb3ZlVG8oUVBvaW50KDAsIDApKTsKKyAgICAgICAg
bV9zdHlsZS0+ZHJhd0NvbXBsZXhDb250cm9sKFFTdHlsZTo6Q0NfU2Nyb2xsQmFyLCAmb3B0LCBw
YWludGVyLCB3aWRnZXQpOworICAgICAgICBvcHQucmVjdC5tb3ZlVG8odG9wTGVmdCk7CisgICAg
fQorfQorCitRT2JqZWN0KiBRV2ViU3R5bGU6OndpZGdldEZvclBhaW50ZXIoUVBhaW50ZXIqIHBh
aW50ZXIpCit7CisgICAgUVBhaW50RGV2aWNlKiBkZXYgPSAwOworICAgIGlmIChwYWludGVyKQor
ICAgICAgICBkZXYgPSBwYWludGVyLT5kZXZpY2UoKTsKKyAgICBpZiAoZGV2ICYmIGRldi0+ZGV2
VHlwZSgpID09IFFJbnRlcm5hbDo6V2lkZ2V0KQorICAgICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8
UVdpZGdldCo+KGRldik7CisgICAgcmV0dXJuIDA7Cit9CisKK2Jvb2wgUVdlYlN0eWxlOjppc1Zh
bGlkKCkgY29uc3QKK3sKKyAgICBlbnN1cmVTdHlsZSgpOworICAgIHJldHVybiBtX3N0eWxlOwor
fQorCit2b2lkIFFXZWJTdHlsZTo6ZW5zdXJlU3R5bGUoKSBjb25zdAoreworICAgIGlmIChtX3N0
eWxlKQorICAgICAgICByZXR1cm47CisKKyAgICBtX3N0eWxlID0gUVN0eWxlSW50ZXJmYWNlOjpz
dHlsZUZvclBhZ2UobV9wYWdlKTsKKworICAgIGlmICghbV9zdHlsZSkKKyAgICAgICAgbV9zdHls
ZSA9IFFBcHBsaWNhdGlvbjo6c3R5bGUoKTsKK30KKworfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YktpdC9xdC9XZWJDb3JlU3VwcG9ydC9RV2ViU3R5bGUuaCBiL1NvdXJjZS9XZWJLaXQvcXQvV2Vi
Q29yZVN1cHBvcnQvUVdlYlN0eWxlLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uNzBlOWU0ZGRlMDg1ZTFhZWM2NzE2
NTcyZDQ5NjNhZTY1MzlhNzI3MwotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJLaXQvcXQv
V2ViQ29yZVN1cHBvcnQvUVdlYlN0eWxlLmgKQEAgLTAsMCArMSw5NyBAQAorLyoKKyAqIFRoaXMg
ZmlsZSBpcyBwYXJ0IG9mIHRoZSB0aGVtZSBpbXBsZW1lbnRhdGlvbiBmb3IgZm9ybSBjb250cm9s
cyBpbiBXZWJDb3JlLgorICoKKyAqIENvcHlyaWdodCAoQykgMjAxMiBEaWdpYSBQbGMgYW5kL29y
IGl0cyBzdWJzaWRpYXJ5KC1pZXMpLgorICogQ29weXJpZ2h0IChDKSAyMDExLTIwMTIgTm9raWEg
Q29ycG9yYXRpb24gYW5kL29yIGl0cyBzdWJzaWRpYXJ5KC1pZXMpLgorICoKKyAqIFRoaXMgbGli
cmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAq
IG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVi
bGljCisgKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0
aW9uOyBlaXRoZXIKKyAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0
aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0
ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFO
WSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJD
SEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhl
IEdOVQorICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMu
CisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJh
cnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNl
ZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KKyAqIHRoZSBGcmVlIFNv
ZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3Is
CisgKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKyAqCisgKi8KKyNpZm5kZWYgUVdlYlN0
eWxlX2gKKyNkZWZpbmUgUVdlYlN0eWxlX2gKKworI2luY2x1ZGUgPFFTdHlsZUludGVyZmFjZS5o
PgorCitRVF9CRUdJTl9OQU1FU1BBQ0UKK2NsYXNzIFFTdHlsZTsKK2NsYXNzIFFMaW5lRWRpdDsK
K2NsYXNzIFFTdHlsZU9wdGlvbjsKK2NsYXNzIFFTdHlsZU9wdGlvblNsaWRlcjsKK2NsYXNzIFFQ
YWludGVyOworY2xhc3MgUU9iamVjdDsKK1FUX0VORF9OQU1FU1BBQ0UKKworbmFtZXNwYWNlIFdl
YkNvcmUgeworY2xhc3MgUGFnZTsKK30KKworbmFtZXNwYWNlIFdlYktpdCB7CisKK2NsYXNzIFFX
ZWJTdHlsZSA6IHB1YmxpYyBXZWJDb3JlOjpRU3R5bGVJbnRlcmZhY2UgeworcHVibGljOgorICAg
IFFXZWJTdHlsZShXZWJDb3JlOjpQYWdlKiA9IDApOworICAgIHZpcnR1YWwgflFXZWJTdHlsZSgp
OworCisgICAgc3RhdGljIFdlYkNvcmU6OlFTdHlsZUludGVyZmFjZSogY3JlYXRlKFdlYkNvcmU6
OlBhZ2UqIHBhZ2UpCisgICAgeyByZXR1cm4gbmV3IFFXZWJTdHlsZShwYWdlKTsgfQorCisgICAg
dmlydHVhbCBRUmVjdCBidXR0b25TdWJFbGVtZW50UmVjdChCdXR0b25TdWJFbGVtZW50LCBTdGF0
ZSwgY29uc3QgUVJlY3QmIG9yaWdpbmFsUmVjdCkgY29uc3Q7CisKKyAgICB2aXJ0dWFsIGludCBm
aW5kRnJhbWVMaW5lV2lkdGgoKSBjb25zdDsKKyAgICB2aXJ0dWFsIGludCBzaW1wbGVQaXhlbE1l
dHJpYyhQaXhlbE1ldHJpYywgU3RhdGUgPSBTdGF0ZV9Ob25lLCBRT2JqZWN0KiB3aWRnZXQgPSAw
KSBjb25zdDsKKyAgICB2aXJ0dWFsIGludCBidXR0b25NYXJnaW4oU3RhdGUsIGNvbnN0IFFSZWN0
JiBvcmlnaW5hbFJlY3QpIGNvbnN0OworICAgIHZpcnR1YWwgaW50IHNsaWRlckxlbmd0aChRdDo6
T3JpZW50YXRpb24pIGNvbnN0OworICAgIHZpcnR1YWwgaW50IHNsaWRlclRoaWNrbmVzcyhRdDo6
T3JpZW50YXRpb24pIGNvbnN0OworICAgIHZpcnR1YWwgaW50IHByb2dyZXNzQmFyQ2h1bmtXaWR0
aChjb25zdCBRU2l6ZSYpIGNvbnN0OworICAgIHZpcnR1YWwgdm9pZCBnZXRCdXR0b25NZXRyaWNz
KFFTdHJpbmcqIGJ1dHRvbkZvbnRGYW1pbHksIGludCogYnV0dG9uRm9udFBpeGVsU2l6ZSkgY29u
c3Q7CisKKyAgICB2aXJ0dWFsIFFTaXplIHNpemVGcm9tQ29udGVudHMoQ29udGVudHNUeXBlLCBR
U3R5bGVJbnRlcmZhY2U6OlN0YXRlLCBjb25zdCBRU2l6ZSYpIGNvbnN0OworCisgICAgdmlydHVh
bCB2b2lkIHBhaW50QnV0dG9uKFFQYWludGVyKiwgQnV0dG9uVHlwZSwgY29uc3QgV2ViQ29yZTo6
UVN0eWxlSW50ZXJmYWNlT3B0aW9uICZwcm94eU9wdGlvbiwgUU9iamVjdCAqd2lkZ2V0KTsKKyAg
ICB2aXJ0dWFsIHZvaWQgcGFpbnRUZXh0RmllbGQoUVBhaW50ZXIqLCBjb25zdCBXZWJDb3JlOjpR
U3R5bGVJbnRlcmZhY2VPcHRpb24mLCBRT2JqZWN0KiB3aWRnZXRPYmopOworICAgIHZpcnR1YWwg
dm9pZCBwYWludENvbWJvQm94KFFQYWludGVyKiwgY29uc3QgV2ViQ29yZTo6UVN0eWxlSW50ZXJm
YWNlT3B0aW9uJiwgUU9iamVjdCAqd2lkZ2V0T2JqKTsKKyAgICB2aXJ0dWFsIHZvaWQgcGFpbnRD
b21ib0JveEFycm93KFFQYWludGVyKiwgY29uc3QgV2ViQ29yZTo6UVN0eWxlSW50ZXJmYWNlT3B0
aW9uJiwgUU9iamVjdCAqd2lkZ2V0T2JqKTsKKworICAgIHZpcnR1YWwgdm9pZCBwYWludFNsaWRl
clRyYWNrKFFQYWludGVyKiwgY29uc3QgV2ViQ29yZTo6UVN0eWxlSW50ZXJmYWNlT3B0aW9uJiwg
UU9iamVjdCAqd2lkZ2V0T2JqKTsKKyAgICB2aXJ0dWFsIHZvaWQgcGFpbnRTbGlkZXJUaHVtYihR
UGFpbnRlciosIGNvbnN0IFdlYkNvcmU6OlFTdHlsZUludGVyZmFjZU9wdGlvbiYsIFFPYmplY3Qg
KndpZGdldE9iaik7CisgICAgdmlydHVhbCB2b2lkIHBhaW50SW5uZXJTcGluQnV0dG9uKFFQYWlu
dGVyKiwgY29uc3QgV2ViQ29yZTo6UVN0eWxlSW50ZXJmYWNlT3B0aW9uJiwgYm9vbCBzcGluQm94
VXAsIFFPYmplY3QqIHdpZGdldE9iaik7CisgICAgdmlydHVhbCB2b2lkIHBhaW50UHJvZ3Jlc3NC
YXIoUVBhaW50ZXIqLCBjb25zdCBXZWJDb3JlOjpRU3R5bGVJbnRlcmZhY2VPcHRpb24mLCBkb3Vi
bGUgcHJvZ3Jlc3MsIGRvdWJsZSBhbmltYXRpb25Qcm9ncmVzcywgUU9iamVjdCogd2lkZ2V0T2Jq
KTsKKworICAgIHZpcnR1YWwgaW50IHNjcm9sbEJhckV4dGVudChib29sIG1pbmkpOworICAgIHZp
cnR1YWwgYm9vbCBzY3JvbGxCYXJNaWRkbGVDbGlja0Fic29sdXRlUG9zaXRpb25TdHlsZUhpbnQo
KSBjb25zdDsKKyAgICB2aXJ0dWFsIHZvaWQgcGFpbnRTY3JvbGxDb3JuZXIoUVBhaW50ZXIqLCBj
b25zdCBRUmVjdCYsIFFPYmplY3QqIHdpZGdldE9iaik7CisKKyAgICB2aXJ0dWFsIFN1YkNvbnRy
b2wgaGl0VGVzdFNjcm9sbEJhcihjb25zdCBXZWJDb3JlOjpRU3R5bGVJbnRlcmZhY2VPcHRpb24m
LCBjb25zdCBRUG9pbnQmIHBvcyk7CisgICAgdmlydHVhbCBRUmVjdCBzY3JvbGxCYXJTdWJDb250
cm9sUmVjdChjb25zdCBXZWJDb3JlOjpRU3R5bGVJbnRlcmZhY2VPcHRpb24mLCBTdWJDb250cm9s
KTsKKyAgICB2aXJ0dWFsIHZvaWQgcGFpbnRTY3JvbGxCYXIoUVBhaW50ZXIqLCBjb25zdCBXZWJD
b3JlOjpRU3R5bGVJbnRlcmZhY2VPcHRpb24mLCBRT2JqZWN0KiB3aWRnZXRPYmopOworCisgICAg
dmlydHVhbCBRT2JqZWN0KiB3aWRnZXRGb3JQYWludGVyKFFQYWludGVyKik7CisKKyAgICB2aXJ0
dWFsIGJvb2wgaXNWYWxpZCgpIGNvbnN0OworCitwcml2YXRlOgorICAgIHZvaWQgZW5zdXJlU3R5
bGUoKSBjb25zdDsKKworICAgIFdlYkNvcmU6OlBhZ2UqIG1fcGFnZTsKKyAgICBtdXRhYmxlIFFT
dHlsZSogbV9zdHlsZTsKKyAgICBRU3R5bGUqIG1fZmFsbGJhY2tTdHlsZTsKKyAgICBib29sIG1f
b3duRmFsbGJhY2tTdHlsZTsKKyAgICBtdXRhYmxlIFFTY29wZWRQb2ludGVyPFFMaW5lRWRpdD4g
bV9saW5lRWRpdDsKK307CisKK30KKworI2VuZGlmIC8vIFFXZWJTdHlsZV9oCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViS2l0L3F0L1dlYkNvcmVTdXBwb3J0L1JlbmRlclRoZW1lUVN0eWxlLmNwcCBi
L1NvdXJjZS9XZWJLaXQvcXQvV2ViQ29yZVN1cHBvcnQvUmVuZGVyVGhlbWVRU3R5bGUuY3BwCmRl
bGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4YmMwZGY0OTc0NTM1OWQ2Njg4NzdjYTg3ZDRi
ZWI1MjI5NzI0MWY3Li4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0t
LSBhL1NvdXJjZS9XZWJLaXQvcXQvV2ViQ29yZVN1cHBvcnQvUmVuZGVyVGhlbWVRU3R5bGUuY3Bw
CisrKyAvZGV2L251bGwKQEAgLTEsODI3ICswLDAgQEAKLS8qCi0gKiBUaGlzIGZpbGUgaXMgcGFy
dCBvZiB0aGUgV2ViS2l0IHByb2plY3QuCi0gKgotICogQ29weXJpZ2h0IChDKSAyMDA4LTIwMTIg
Tm9raWEgQ29ycG9yYXRpb24gYW5kL29yIGl0cyBzdWJzaWRpYXJ5KC1pZXMpCi0gKgotICogQ29w
eXJpZ2h0IChDKSAyMDA2IFphY2sgUnVzaW4gPHphY2tAa2RlLm9yZz4KLSAqICAgICAgICAgICAg
ICAgMjAwNiBEaXJrIE11ZWxsZXIgPG11ZWxsZXJAa2RlLm9yZz4KLSAqICAgICAgICAgICAgICAg
MjAwNiBOaWtvbGFzIFppbW1lcm1hbm4gPHppbW1lcm1hbm5Aa2RlLm9yZz4KLSAqIENvcHlyaWdo
dCAoQykgMjAwOCBIb2xnZXIgSGFucyBQZXRlciBGcmV5dGhlcgotICoKLSAqIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCi0gKgotICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4g
cmVkaXN0cmlidXRlIGl0IGFuZC9vcgotICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0
aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKLSAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5
IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgotICogdmVyc2lvbiAyIG9mIHRo
ZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotICoKLSAq
IFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUg
dXNlZnVsLAotICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGlt
cGxpZWQgd2FycmFudHkgb2YKLSAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBB
UlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCi0gKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGlj
IExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSAqCi0gKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2
ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCi0gKiBh
bG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90
LCB3cml0ZSB0bwotICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJh
bmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKLSAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNB
LgotICoKLSAqLwotCi0jaW5jbHVkZSAiY29uZmlnLmgiCi0jaW5jbHVkZSAiUmVuZGVyVGhlbWVR
U3R5bGUuaCIKLQotI2luY2x1ZGUgIkNTU0ZvbnRTZWxlY3Rvci5oIgotI2luY2x1ZGUgIkNTU1Zh
bHVlS2V5d29yZHMuaCIKLSNpbmNsdWRlICJDaHJvbWUuaCIKLSNpbmNsdWRlICJDaHJvbWVDbGll
bnQuaCIKLSNpbmNsdWRlICJDb2xvci5oIgotI2luY2x1ZGUgIkRvY3VtZW50LmgiCi0jaW5jbHVk
ZSAiRm9udC5oIgotI2luY2x1ZGUgIkZvbnRTZWxlY3Rvci5oIgotI2luY2x1ZGUgIkdyYXBoaWNz
Q29udGV4dC5oIgotI2luY2x1ZGUgIkhUTUxJbnB1dEVsZW1lbnQuaCIKLSNpbmNsdWRlICJIVE1M
TmFtZXMuaCIKLSNpbmNsdWRlICJMb2NhbGl6ZWRTdHJpbmdzLmgiCi0jaW5jbHVkZSAiTm90SW1w
bGVtZW50ZWQuaCIKLSNpbmNsdWRlICJQYWdlLmgiCi0jaW5jbHVkZSAiUGFpbnRJbmZvLmgiCi0j
aW5jbHVkZSAiUVdlYlBhZ2VDbGllbnQuaCIKLSNpbmNsdWRlICJSZW5kZXJCb3guaCIKLSNpZiBF
TkFCTEUoUFJPR1JFU1NfRUxFTUVOVCkKLSNpbmNsdWRlICJSZW5kZXJQcm9ncmVzcy5oIgotI2Vu
ZGlmCi0jaW5jbHVkZSAiUmVuZGVyU2xpZGVyLmgiCi0jaW5jbHVkZSAiU2Nyb2xsYmFyVGhlbWVR
U3R5bGUuaCIKLSNpbmNsdWRlICJTbGlkZXJUaHVtYkVsZW1lbnQuaCIKLSNpbmNsdWRlICJTdHls
ZVJlc29sdmVyLmgiCi0jaW5jbHVkZSAiVXNlckFnZW50U3R5bGVTaGVldHMuaCIKLQotI2luY2x1
ZGUgPFFBcHBsaWNhdGlvbj4KLSNpbmNsdWRlIDxRQ29sb3I+Ci0jaW5jbHVkZSA8UUZpbGU+Ci0j
aW5jbHVkZSA8UUZvbnRNZXRyaWNzPgotI2luY2x1ZGUgPFFMaW5lRWRpdD4KLSNpbmNsdWRlIDxR
TWFjU3R5bGU+Ci0jaW5jbHVkZSA8UVBhaW50ZXI+Ci0jaWZuZGVmIFFUX05PX1NUWUxFX1BMQVNU
SVFVRQotI2luY2x1ZGUgPFFQbGFzdGlxdWVTdHlsZT4KLSNlbmRpZgotI2luY2x1ZGUgPFFQdXNo
QnV0dG9uPgotI2luY2x1ZGUgPFFTdHlsZUZhY3Rvcnk+Ci0jaW5jbHVkZSA8UVN0eWxlT3B0aW9u
QnV0dG9uPgotI2luY2x1ZGUgPFFTdHlsZU9wdGlvbkZyYW1lVjI+Ci0jaWYgRU5BQkxFKFBST0dS
RVNTX0VMRU1FTlQpCi0jaW5jbHVkZSA8UVN0eWxlT3B0aW9uUHJvZ3Jlc3NCYXJWMj4KLSNlbmRp
ZgotI2luY2x1ZGUgPFFTdHlsZU9wdGlvblNsaWRlcj4KLSNpbmNsdWRlIDxRV2lkZ2V0PgotCi1u
YW1lc3BhY2UgV2ViQ29yZSB7Ci0KLXVzaW5nIG5hbWVzcGFjZSBIVE1MTmFtZXM7Ci0KLWlubGlu
ZSBzdGF0aWMgdm9pZCBpbml0U3R5bGVPcHRpb24oUVdpZGdldCogd2lkZ2V0LCBRU3R5bGVPcHRp
b24mIG9wdGlvbikKLXsKLSAgICBpZiAod2lkZ2V0KQotICAgICAgICBvcHRpb24uaW5pdEZyb20o
d2lkZ2V0KTsKLSAgICBlbHNlIHsKLSAgICAgICAgLy8gSWYgYSB3aWRnZXQgaXMgbm90IGRpcmVj
dGx5IGF2YWlsYWJsZSBmb3IgcmVuZGVyaW5nLCB3ZSBmYWxsYmFjayB0byBkZWZhdWx0Ci0gICAg
ICAgIC8vIHZhbHVlIGZvciBhbiBhY3RpdmUgd2lkZ2V0LgotICAgICAgICBvcHRpb24uc3RhdGUg
PSBRU3R5bGU6OlN0YXRlX0FjdGl2ZSB8IFFTdHlsZTo6U3RhdGVfRW5hYmxlZDsKLSAgICB9Ci19
Ci0KLQotUVNoYXJlZFBvaW50ZXI8U3R5bGVQYWludGVyPiBSZW5kZXJUaGVtZVFTdHlsZTo6Z2V0
U3R5bGVQYWludGVyKGNvbnN0IFBhaW50SW5mbyYgcGFpbnRJbmZvKQotewotICAgIHJldHVybiBR
U2hhcmVkUG9pbnRlcjxTdHlsZVBhaW50ZXI+KG5ldyBTdHlsZVBhaW50ZXJRU3R5bGUodGhpcywg
cGFpbnRJbmZvKSk7Ci19Ci0KLVN0eWxlUGFpbnRlclFTdHlsZTo6U3R5bGVQYWludGVyUVN0eWxl
KFJlbmRlclRoZW1lUVN0eWxlKiB0aGVtZSwgY29uc3QgUGFpbnRJbmZvJiBwYWludEluZm8pCi0g
ICAgOiBTdHlsZVBhaW50ZXIodGhlbWUsIHBhaW50SW5mbykKLXsKLSAgICBpbml0KHBhaW50SW5m
by5jb250ZXh0ID8gcGFpbnRJbmZvLmNvbnRleHQgOiAwLCB0aGVtZS0+cVN0eWxlKCkpOwotfQot
Ci1TdHlsZVBhaW50ZXJRU3R5bGU6OlN0eWxlUGFpbnRlclFTdHlsZShTY3JvbGxiYXJUaGVtZVFT
dHlsZSogdGhlbWUsIEdyYXBoaWNzQ29udGV4dCogY29udGV4dCkKLSAgICA6IFN0eWxlUGFpbnRl
cigpCi17Ci0gICAgaW5pdChjb250ZXh0LCB0aGVtZS0+c3R5bGUoKSk7Ci19Ci0KLXZvaWQgU3R5
bGVQYWludGVyUVN0eWxlOjppbml0KEdyYXBoaWNzQ29udGV4dCogY29udGV4dCwgUVN0eWxlKiB0
aGVtZVN0eWxlKQotewotICAgIHBhaW50ZXIgPSBzdGF0aWNfY2FzdDxRUGFpbnRlcio+KGNvbnRl
eHQtPnBsYXRmb3JtQ29udGV4dCgpKTsKLSAgICB3aWRnZXQgPSAwOwotICAgIFFQYWludERldmlj
ZSogZGV2ID0gMDsKLSAgICBpZiAocGFpbnRlcikKLSAgICAgICAgZGV2ID0gcGFpbnRlci0+ZGV2
aWNlKCk7Ci0gICAgaWYgKGRldiAmJiBkZXYtPmRldlR5cGUoKSA9PSBRSW50ZXJuYWw6OldpZGdl
dCkKLSAgICAgICAgd2lkZ2V0ID0gc3RhdGljX2Nhc3Q8UVdpZGdldCo+KGRldik7Ci0gICAgc3R5
bGUgPSB0aGVtZVN0eWxlOwotCi0gICAgU3R5bGVQYWludGVyOjppbml0KGNvbnRleHQpOwotfQot
Ci1QYXNzUmVmUHRyPFJlbmRlclRoZW1lPiBSZW5kZXJUaGVtZVFTdHlsZTo6Y3JlYXRlKFBhZ2Uq
IHBhZ2UpCi17Ci0gICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBSZW5kZXJUaGVtZVFTdHlsZShwYWdl
KSk7Ci19Ci0KLVJlbmRlclRoZW1lUVN0eWxlOjpSZW5kZXJUaGVtZVFTdHlsZShQYWdlKiBwYWdl
KQotICAgIDogUmVuZGVyVGhlbWVRdChwYWdlKQotI2lmbmRlZiBRVF9OT19MSU5FRURJVAotICAg
ICwgbV9saW5lRWRpdCgwKQotI2VuZGlmCi17Ci0gICAgUVB1c2hCdXR0b24gYnV0dG9uOwotICAg
IFFGb250IGRlZmF1bHRCdXR0b25Gb250ID0gUUFwcGxpY2F0aW9uOjpmb250KCZidXR0b24pOwot
ICAgIG1fYnV0dG9uRm9udEZhbWlseSA9IGRlZmF1bHRCdXR0b25Gb250LmZhbWlseSgpOwotI2lm
ZGVmIFFfV1NfTUFDCi0gICAgYnV0dG9uLnNldEF0dHJpYnV0ZShRdDo6V0FfTWFjU21hbGxTaXpl
KTsKLSAgICBRRm9udEluZm8gZm9udEluZm8oZGVmYXVsdEJ1dHRvbkZvbnQpOwotICAgIG1fYnV0
dG9uRm9udFBpeGVsU2l6ZSA9IGZvbnRJbmZvLnBpeGVsU2l6ZSgpOwotI2VuZGlmCi0KLSAgICBt
X2ZhbGxiYWNrU3R5bGUgPSBRU3R5bGVGYWN0b3J5OjpjcmVhdGUoUUxhdGluMVN0cmluZygid2lu
ZG93cyIpKTsKLX0KLQotUmVuZGVyVGhlbWVRU3R5bGU6On5SZW5kZXJUaGVtZVFTdHlsZSgpCi17
Ci0gICAgZGVsZXRlIG1fZmFsbGJhY2tTdHlsZTsKLSNpZm5kZWYgUVRfTk9fTElORUVESVQKLSAg
ICBkZWxldGUgbV9saW5lRWRpdDsKLSNlbmRpZgotfQotCi0KLS8vIGZvciBzb21lIHdpZGdldCBw
YWludGluZywgd2UgbmVlZCB0byBmYWxsYmFjayB0byBXaW5kb3dzIHN0eWxlCi1RU3R5bGUqIFJl
bmRlclRoZW1lUVN0eWxlOjpmYWxsYmFja1N0eWxlKCkgY29uc3QKLXsKLSAgICByZXR1cm4gKG1f
ZmFsbGJhY2tTdHlsZSkgPyBtX2ZhbGxiYWNrU3R5bGUgOiBRQXBwbGljYXRpb246OnN0eWxlKCk7
Ci19Ci0KLXZvaWQgUmVuZGVyVGhlbWVRU3R5bGU6OnNldFBhbGV0dGVGcm9tUGFnZUNsaWVudElm
RXhpc3RzKFFQYWxldHRlJiBwYWxldHRlKSBjb25zdAotewotICAgIGlmICghbV9wYWdlKQotICAg
ICAgICByZXR1cm47Ci0KLSAgICBBU1NFUlQobV9wYWdlLT5jaHJvbWUoKSk7Ci0gICAgQ2hyb21l
Q2xpZW50KiBjaHJvbWVDbGllbnQgPSBtX3BhZ2UtPmNocm9tZSgpLT5jbGllbnQoKTsKLSAgICBp
ZiAoIWNocm9tZUNsaWVudCkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgaWYgKFFXZWJQYWdlQ2xp
ZW50KiBwYWdlQ2xpZW50ID0gY2hyb21lQ2xpZW50LT5wbGF0Zm9ybVBhZ2VDbGllbnQoKSkKLSAg
ICAgICAgcGFsZXR0ZSA9IHBhZ2VDbGllbnQtPnBhbGV0dGUoKTsKLX0KLQotUVN0eWxlKiBSZW5k
ZXJUaGVtZVFTdHlsZTo6cVN0eWxlKCkgY29uc3QKLXsKLSAgICBpZiAobV9wYWdlKSB7Ci0gICAg
ICAgIFFXZWJQYWdlQ2xpZW50KiBwYWdlQ2xpZW50ID0gbV9wYWdlLT5jaHJvbWUoKS0+Y2xpZW50
KCktPnBsYXRmb3JtUGFnZUNsaWVudCgpOwotCi0gICAgICAgIGlmIChwYWdlQ2xpZW50KQotICAg
ICAgICAgICAgcmV0dXJuIHBhZ2VDbGllbnQtPnN0eWxlKCk7Ci0gICAgfQotCi0gICAgcmV0dXJu
IFFBcHBsaWNhdGlvbjo6c3R5bGUoKTsKLX0KLQotaW50IFJlbmRlclRoZW1lUVN0eWxlOjpmaW5k
RnJhbWVMaW5lV2lkdGgoUVN0eWxlKiBzdHlsZSkgY29uc3QKLXsKLSNpZm5kZWYgUVRfTk9fTElO
RUVESVQKLSAgICBpZiAoIW1fbGluZUVkaXQpCi0gICAgICAgIG1fbGluZUVkaXQgPSBuZXcgUUxp
bmVFZGl0KCk7Ci0jZW5kaWYKLQotICAgIFFTdHlsZU9wdGlvbkZyYW1lVjIgb3B0OwotICAgIFFX
aWRnZXQqIHdpZGdldCA9IDA7Ci0jaWZuZGVmIFFUX05PX0xJTkVFRElUCi0gICAgd2lkZ2V0ID0g
bV9saW5lRWRpdDsKLSNlbmRpZgotICAgIHJldHVybiBzdHlsZS0+cGl4ZWxNZXRyaWMoUVN0eWxl
OjpQTV9EZWZhdWx0RnJhbWVXaWR0aCwgJm9wdCwgd2lkZ2V0KTsKLX0KLQotUVJlY3QgUmVuZGVy
VGhlbWVRU3R5bGU6OmluZmxhdGVCdXR0b25SZWN0KGNvbnN0IFFSZWN0JiBvcmlnaW5hbFJlY3Qp
IGNvbnN0Ci17Ci0gICAgUVN0eWxlT3B0aW9uQnV0dG9uIG9wdGlvbjsKLSAgICBvcHRpb24uc3Rh
dGUgfD0gUVN0eWxlOjpTdGF0ZV9TbWFsbDsKLSAgICBvcHRpb24ucmVjdCA9IG9yaWdpbmFsUmVj
dDsKLQotICAgIFFSZWN0IGxheW91dFJlY3QgPSBxU3R5bGUoKS0+c3ViRWxlbWVudFJlY3QoUVN0
eWxlOjpTRV9QdXNoQnV0dG9uTGF5b3V0SXRlbSwgJm9wdGlvbiwgMCk7Ci0gICAgaWYgKCFsYXlv
dXRSZWN0LmlzTnVsbCgpKSB7Ci0gICAgICAgIGludCBwYWRkaW5nTGVmdCA9IGxheW91dFJlY3Qu
bGVmdCgpIC0gb3JpZ2luYWxSZWN0LmxlZnQoKTsKLSAgICAgICAgaW50IHBhZGRpbmdSaWdodCA9
IG9yaWdpbmFsUmVjdC5yaWdodCgpIC0gbGF5b3V0UmVjdC5yaWdodCgpOwotICAgICAgICBpbnQg
cGFkZGluZ1RvcCA9IGxheW91dFJlY3QudG9wKCkgLSBvcmlnaW5hbFJlY3QudG9wKCk7Ci0gICAg
ICAgIGludCBwYWRkaW5nQm90dG9tID0gb3JpZ2luYWxSZWN0LmJvdHRvbSgpIC0gbGF5b3V0UmVj
dC5ib3R0b20oKTsKLQotICAgICAgICByZXR1cm4gb3JpZ2luYWxSZWN0LmFkanVzdGVkKC1wYWRk
aW5nTGVmdCwgLXBhZGRpbmdUb3AsIHBhZGRpbmdSaWdodCwgcGFkZGluZ0JvdHRvbSk7Ci0gICAg
fQotICAgIHJldHVybiBvcmlnaW5hbFJlY3Q7Ci19Ci0KLXZvaWQgUmVuZGVyVGhlbWVRU3R5bGU6
OmNvbXB1dGVTaXplQmFzZWRPblN0eWxlKFJlbmRlclN0eWxlKiByZW5kZXJTdHlsZSkgY29uc3QK
LXsKLSAgICBRU2l6ZSBzaXplKDAsIDApOwotICAgIGNvbnN0IFFGb250TWV0cmljcyBmbShyZW5k
ZXJTdHlsZS0+Zm9udCgpLnN5bnRoZXRpY0ZvbnQoKSk7Ci0gICAgUVN0eWxlKiBzdHlsZSA9IHFT
dHlsZSgpOwotCi0gICAgc3dpdGNoIChyZW5kZXJTdHlsZS0+YXBwZWFyYW5jZSgpKSB7Ci0gICAg
Y2FzZSBUZXh0QXJlYVBhcnQ6Ci0gICAgY2FzZSBTZWFyY2hGaWVsZFBhcnQ6Ci0gICAgY2FzZSBU
ZXh0RmllbGRQYXJ0OiB7Ci0gICAgICAgIGludCBwYWRkaW5nID0gZmluZEZyYW1lTGluZVdpZHRo
KHN0eWxlKTsKLSAgICAgICAgcmVuZGVyU3R5bGUtPnNldFBhZGRpbmdMZWZ0KExlbmd0aChwYWRk
aW5nLCBGaXhlZCkpOwotICAgICAgICByZW5kZXJTdHlsZS0+c2V0UGFkZGluZ1JpZ2h0KExlbmd0
aChwYWRkaW5nLCBGaXhlZCkpOwotICAgICAgICByZW5kZXJTdHlsZS0+c2V0UGFkZGluZ1RvcChM
ZW5ndGgocGFkZGluZywgRml4ZWQpKTsKLSAgICAgICAgcmVuZGVyU3R5bGUtPnNldFBhZGRpbmdC
b3R0b20oTGVuZ3RoKHBhZGRpbmcsIEZpeGVkKSk7Ci0gICAgICAgIGJyZWFrOwotICAgIH0KLSAg
ICBkZWZhdWx0OgotICAgICAgICBicmVhazsKLSAgICB9Ci0gICAgLy8gSWYgdGhlIHdpZHRoIGFu
ZCBoZWlnaHQgYXJlIGJvdGggc3BlY2lmaWVkLCB0aGVuIHdlIGhhdmUgbm90aGluZyB0byBkby4K
LSAgICBpZiAoIXJlbmRlclN0eWxlLT53aWR0aCgpLmlzSW50cmluc2ljT3JBdXRvKCkgJiYgIXJl
bmRlclN0eWxlLT5oZWlnaHQoKS5pc0F1dG8oKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgc3dp
dGNoIChyZW5kZXJTdHlsZS0+YXBwZWFyYW5jZSgpKSB7Ci0gICAgY2FzZSBDaGVja2JveFBhcnQ6
IHsKLSAgICAgICAgUVN0eWxlT3B0aW9uIHN0eWxlT3B0aW9uOwotICAgICAgICBzdHlsZU9wdGlv
bi5zdGF0ZSB8PSBRU3R5bGU6OlN0YXRlX1NtYWxsOwotICAgICAgICBpbnQgY2hlY2tCb3hXaWR0
aCA9IHN0eWxlLT5waXhlbE1ldHJpYyhRU3R5bGU6OlBNX0luZGljYXRvcldpZHRoLCAmc3R5bGVP
cHRpb24pOwotICAgICAgICBjaGVja0JveFdpZHRoICo9IHJlbmRlclN0eWxlLT5lZmZlY3RpdmVa
b29tKCk7Ci0gICAgICAgIHNpemUgPSBRU2l6ZShjaGVja0JveFdpZHRoLCBjaGVja0JveFdpZHRo
KTsKLSAgICAgICAgYnJlYWs7Ci0gICAgfQotICAgIGNhc2UgUmFkaW9QYXJ0OiB7Ci0gICAgICAg
IFFTdHlsZU9wdGlvbiBzdHlsZU9wdGlvbjsKLSAgICAgICAgc3R5bGVPcHRpb24uc3RhdGUgfD0g
UVN0eWxlOjpTdGF0ZV9TbWFsbDsKLSAgICAgICAgaW50IHJhZGlvV2lkdGggPSBzdHlsZS0+cGl4
ZWxNZXRyaWMoUVN0eWxlOjpQTV9FeGNsdXNpdmVJbmRpY2F0b3JXaWR0aCwgJnN0eWxlT3B0aW9u
KTsKLSAgICAgICAgcmFkaW9XaWR0aCAqPSByZW5kZXJTdHlsZS0+ZWZmZWN0aXZlWm9vbSgpOwot
ICAgICAgICBzaXplID0gUVNpemUocmFkaW9XaWR0aCwgcmFkaW9XaWR0aCk7Ci0gICAgICAgIGJy
ZWFrOwotICAgIH0KLSAgICBjYXNlIFB1c2hCdXR0b25QYXJ0OgotICAgIGNhc2UgQnV0dG9uUGFy
dDogewotICAgICAgICBRU3R5bGVPcHRpb25CdXR0b24gc3R5bGVPcHRpb247Ci0gICAgICAgIHN0
eWxlT3B0aW9uLnN0YXRlIHw9IFFTdHlsZTo6U3RhdGVfU21hbGw7Ci0gICAgICAgIFFTaXplIGNv
bnRlbnRTaXplID0gZm0uc2l6ZShRdDo6VGV4dFNob3dNbmVtb25pYywgUVN0cmluZzo6ZnJvbUxh
dGluMSgiWCIpKTsKLSAgICAgICAgUVNpemUgcHVzaEJ1dHRvblNpemUgPSBzdHlsZS0+c2l6ZUZy
b21Db250ZW50cyhRU3R5bGU6OkNUX1B1c2hCdXR0b24sCi0gICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJnN0eWxlT3B0aW9uLCBjb250ZW50U2l6
ZSwgMCk7Ci0gICAgICAgIHN0eWxlT3B0aW9uLnJlY3QgPSBRUmVjdCgwLCAwLCBwdXNoQnV0dG9u
U2l6ZS53aWR0aCgpLCBwdXNoQnV0dG9uU2l6ZS5oZWlnaHQoKSk7Ci0gICAgICAgIFFSZWN0IGxh
eW91dFJlY3QgPSBzdHlsZS0+c3ViRWxlbWVudFJlY3QoUVN0eWxlOjpTRV9QdXNoQnV0dG9uTGF5
b3V0SXRlbSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAmc3R5bGVPcHRpb24sIDApOwotCi0gICAgICAgIC8vIElmIHRoZSBzdHlsZSBzdXBwb3J0cyBs
YXlvdXQgcmVjdHMgd2UgdXNlIHRoYXQsIGFuZCAgY29tcGVuc2F0ZSBhY2NvcmRpbmdseQotICAg
ICAgICAvLyBpbiBwYWludEJ1dHRvbigpIGJlbG93LgotICAgICAgICBpZiAoIWxheW91dFJlY3Qu
aXNOdWxsKCkpCi0gICAgICAgICAgICBzaXplLnNldEhlaWdodChsYXlvdXRSZWN0LmhlaWdodCgp
KTsKLSAgICAgICAgZWxzZQotICAgICAgICAgICAgc2l6ZS5zZXRIZWlnaHQocHVzaEJ1dHRvblNp
emUuaGVpZ2h0KCkpOwotCi0gICAgICAgIGJyZWFrOwotICAgIH0KLSAgICBjYXNlIE1lbnVsaXN0
UGFydDogewotICAgICAgICBRU3R5bGVPcHRpb25Db21ib0JveCBzdHlsZU9wdGlvbjsKLSAgICAg
ICAgc3R5bGVPcHRpb24uc3RhdGUgfD0gUVN0eWxlOjpTdGF0ZV9TbWFsbDsKLSAgICAgICAgaW50
IGNvbnRlbnRIZWlnaHQgPSBxTWF4KGZtLmxpbmVTcGFjaW5nKCksIDE0KSArIDI7Ci0gICAgICAg
IFFTaXplIG1lbnVMaXN0U2l6ZSA9IHN0eWxlLT5zaXplRnJvbUNvbnRlbnRzKFFTdHlsZTo6Q1Rf
Q29tYm9Cb3gsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICZzdHlsZU9wdGlvbiwgUVNpemUoMCwgY29udGVudEhlaWdodCksIDApOwotICAgICAg
ICBzaXplLnNldEhlaWdodChtZW51TGlzdFNpemUuaGVpZ2h0KCkpOwotICAgICAgICBicmVhazsK
LSAgICB9Ci0gICAgZGVmYXVsdDoKLSAgICAgICAgYnJlYWs7Ci0gICAgfQotCi0gICAgLy8gRklY
TUU6IENoZWNrIGlzIGZsYXdlZCwgc2luY2UgaXQgZG9lc24ndCB0YWtlIG1pbi13aWR0aC9tYXgt
d2lkdGggaW50byBhY2NvdW50LgotICAgIGlmIChyZW5kZXJTdHlsZS0+d2lkdGgoKS5pc0ludHJp
bnNpY09yQXV0bygpICYmIHNpemUud2lkdGgoKSA+IDApCi0gICAgICAgIHJlbmRlclN0eWxlLT5z
ZXRNaW5XaWR0aChMZW5ndGgoc2l6ZS53aWR0aCgpLCBGaXhlZCkpOwotICAgIGlmIChyZW5kZXJT
dHlsZS0+aGVpZ2h0KCkuaXNBdXRvKCkgJiYgc2l6ZS5oZWlnaHQoKSA+IDApCi0gICAgICAgIHJl
bmRlclN0eWxlLT5zZXRNaW5IZWlnaHQoTGVuZ3RoKHNpemUuaGVpZ2h0KCksIEZpeGVkKSk7Ci19
Ci0KLQotCi12b2lkIFJlbmRlclRoZW1lUVN0eWxlOjphZGp1c3RCdXR0b25TdHlsZShTdHlsZVJl
c29sdmVyKiBzdHlsZVJlc29sdmVyLCBSZW5kZXJTdHlsZSogc3R5bGUsIEVsZW1lbnQqKSBjb25z
dAotewotICAgIC8vIERpdGNoIHRoZSBib3JkZXIuCi0gICAgc3R5bGUtPnJlc2V0Qm9yZGVyKCk7
Ci0KLSNpZmRlZiBRX1dTX01BQwotICAgIGlmIChzdHlsZS0+YXBwZWFyYW5jZSgpID09IFB1c2hC
dXR0b25QYXJ0KSB7Ci0gICAgICAgIC8vIFRoZSBNYWMgcG9ydHMgaWdub3JlIHRoZSBzcGVjaWZp
ZWQgaGVpZ2h0IGZvciA8aW5wdXQgdHlwZT0iYnV0dG9uIj4gZWxlbWVudHMKLSAgICAgICAgLy8g
dW5sZXNzIGEgYm9yZGVyIGFuZC9vciBiYWNrZ3JvdW5kIENTUyBwcm9wZXJ0eSBpcyBhbHNvIHNw
ZWNpZmllZC4KLSAgICAgICAgc3R5bGUtPnNldEhlaWdodChMZW5ndGgoQXV0bykpOwotICAgIH0K
LSNlbmRpZgotCi0gICAgRm9udERlc2NyaXB0aW9uIGZvbnREZXNjcmlwdGlvbiA9IHN0eWxlLT5m
b250RGVzY3JpcHRpb24oKTsKLSAgICBmb250RGVzY3JpcHRpb24uc2V0SXNBYnNvbHV0ZVNpemUo
dHJ1ZSk7Ci0KLSNpZmRlZiBRX1dTX01BQyAvLyBVc2UgZml4ZWQgZm9udCBzaXplIGFuZCBmYW1p
bHkgb24gTWFjIChsaWtlIFNhZmFyaSBkb2VzKQotICAgIGZvbnREZXNjcmlwdGlvbi5zZXRTcGVj
aWZpZWRTaXplKG1fYnV0dG9uRm9udFBpeGVsU2l6ZSk7Ci0gICAgZm9udERlc2NyaXB0aW9uLnNl
dENvbXB1dGVkU2l6ZShtX2J1dHRvbkZvbnRQaXhlbFNpemUpOwotI2Vsc2UKLSAgICBmb250RGVz
Y3JpcHRpb24uc2V0U3BlY2lmaWVkU2l6ZShzdHlsZS0+Zm9udFNpemUoKSk7Ci0gICAgZm9udERl
c2NyaXB0aW9uLnNldENvbXB1dGVkU2l6ZShzdHlsZS0+Zm9udFNpemUoKSk7Ci0jZW5kaWYKLQot
ICAgIEZvbnRGYW1pbHkgZm9udEZhbWlseTsKLSAgICBmb250RmFtaWx5LnNldEZhbWlseShtX2J1
dHRvbkZvbnRGYW1pbHkpOwotICAgIGZvbnREZXNjcmlwdGlvbi5zZXRGYW1pbHkoZm9udEZhbWls
eSk7Ci0gICAgc3R5bGUtPnNldEZvbnREZXNjcmlwdGlvbihmb250RGVzY3JpcHRpb24pOwotICAg
IHN0eWxlLT5mb250KCkudXBkYXRlKHN0eWxlUmVzb2x2ZXItPmZvbnRTZWxlY3RvcigpKTsKLSAg
ICBzdHlsZS0+c2V0TGluZUhlaWdodChSZW5kZXJTdHlsZTo6aW5pdGlhbExpbmVIZWlnaHQoKSk7
Ci0gICAgc2V0QnV0dG9uU2l6ZShzdHlsZSk7Ci0gICAgc2V0QnV0dG9uUGFkZGluZyhzdHlsZSk7
Ci19Ci0KLXZvaWQgUmVuZGVyVGhlbWVRU3R5bGU6OnNldEJ1dHRvblBhZGRpbmcoUmVuZGVyU3R5
bGUqIHN0eWxlKSBjb25zdAotewotICAgIFFTdHlsZU9wdGlvbkJ1dHRvbiBzdHlsZU9wdGlvbjsK
LSAgICBzdHlsZU9wdGlvbi5zdGF0ZSB8PSBRU3R5bGU6OlN0YXRlX1NtYWxsOwotCi0gICAgLy8g
RmFrZSBhIGJ1dHRvbiByZWN0IGhlcmUsIHNpbmNlIHdlJ3JlIGp1c3QgY29tcHV0aW5nIGRlbHRh
cwotICAgIFFSZWN0IG9yaWdpbmFsUmVjdCA9IFFSZWN0KDAsIDAsIDEwMCwgMzApOwotICAgIHN0
eWxlT3B0aW9uLnJlY3QgPSBvcmlnaW5hbFJlY3Q7Ci0KLSAgICAvLyBEZWZhdWx0IHBhZGRpbmcg
aXMgYmFzZWQgb24gdGhlIGJ1dHRvbiBtYXJnaW4gcGl4ZWwgbWV0cmljCi0gICAgaW50IGJ1dHRv
bk1hcmdpbiA9IHFTdHlsZSgpLT5waXhlbE1ldHJpYyhRU3R5bGU6OlBNX0J1dHRvbk1hcmdpbiwg
JnN0eWxlT3B0aW9uLCAwKTsKLSAgICBpbnQgcGFkZGluZ0xlZnQgPSBidXR0b25NYXJnaW47Ci0g
ICAgaW50IHBhZGRpbmdSaWdodCA9IGJ1dHRvbk1hcmdpbjsKLSAgICBpbnQgcGFkZGluZ1RvcCA9
IGJ1dHRvbk1hcmdpbjsKLSAgICBpbnQgcGFkZGluZ0JvdHRvbSA9IGJ1dHRvbk1hcmdpbjsKLQot
ICAgIC8vIFRoZW4gY2hlY2sgaWYgdGhlIHN0eWxlIHVzZXMgbGF5b3V0IG1hcmdpbnMKLSAgICBR
UmVjdCBsYXlvdXRSZWN0ID0gcVN0eWxlKCktPnN1YkVsZW1lbnRSZWN0KFFTdHlsZTo6U0VfUHVz
aEJ1dHRvbkxheW91dEl0ZW0sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAmc3R5bGVPcHRpb24sIDApOwotICAgIGlmICghbGF5b3V0UmVjdC5pc051bGwo
KSkgewotICAgICAgICBRUmVjdCBjb250ZW50c1JlY3QgPSBxU3R5bGUoKS0+c3ViRWxlbWVudFJl
Y3QoUVN0eWxlOjpTRV9QdXNoQnV0dG9uQ29udGVudHMsCi0gICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmc3R5bGVPcHRpb24sIDApOwotICAgICAg
ICBwYWRkaW5nTGVmdCA9IGNvbnRlbnRzUmVjdC5sZWZ0KCkgLSBsYXlvdXRSZWN0LmxlZnQoKTsK
LSAgICAgICAgcGFkZGluZ1JpZ2h0ID0gbGF5b3V0UmVjdC5yaWdodCgpIC0gY29udGVudHNSZWN0
LnJpZ2h0KCk7Ci0gICAgICAgIHBhZGRpbmdUb3AgPSBjb250ZW50c1JlY3QudG9wKCkgLSBsYXlv
dXRSZWN0LnRvcCgpOwotCi0gICAgICAgIC8vIENhbid0IHVzZSB0aGlzIHJpZ2h0IG5vdyBiZWNh
dXNlIHdlIGRvbid0IGhhdmUgdGhlIGJhc2VsaW5lIHRvIGNvbXBlbnNhdGUKLSAgICAgICAgLy8g
cGFkZGluZ0JvdHRvbSA9IGxheW91dFJlY3QuYm90dG9tKCkgLSBjb250ZW50c1JlY3QuYm90dG9t
KCk7Ci0gICAgfQotICAgIHN0eWxlLT5zZXRQYWRkaW5nTGVmdChMZW5ndGgocGFkZGluZ0xlZnQs
IEZpeGVkKSk7Ci0gICAgc3R5bGUtPnNldFBhZGRpbmdSaWdodChMZW5ndGgocGFkZGluZ1JpZ2h0
LCBGaXhlZCkpOwotICAgIHN0eWxlLT5zZXRQYWRkaW5nVG9wKExlbmd0aChwYWRkaW5nVG9wLCBG
aXhlZCkpOwotICAgIHN0eWxlLT5zZXRQYWRkaW5nQm90dG9tKExlbmd0aChwYWRkaW5nQm90dG9t
LCBGaXhlZCkpOwotfQotCi1ib29sIFJlbmRlclRoZW1lUVN0eWxlOjpwYWludEJ1dHRvbihSZW5k
ZXJPYmplY3QqIG8sIGNvbnN0IFBhaW50SW5mbyYgaSwgY29uc3QgSW50UmVjdCYgcikKLXsKLSAg
ICBTdHlsZVBhaW50ZXJRU3R5bGUgcCh0aGlzLCBpKTsKLSAgICBpZiAoIXAuaXNWYWxpZCgpKQot
ICAgICAgIHJldHVybiB0cnVlOwotCi0gICAgUVN0eWxlT3B0aW9uQnV0dG9uIG9wdGlvbjsKLSAg
ICBpbml0U3R5bGVPcHRpb24ocC53aWRnZXQsIG9wdGlvbik7Ci0gICAgb3B0aW9uLnJlY3QgPSBy
OwotICAgIG9wdGlvbi5zdGF0ZSB8PSBRU3R5bGU6OlN0YXRlX1NtYWxsOwotCi0gICAgQ29udHJv
bFBhcnQgYXBwZWFyYW5jZSA9IGluaXRpYWxpemVDb21tb25RU3R5bGVPcHRpb25zKG9wdGlvbiwg
byk7Ci0gICAgaWYgKGFwcGVhcmFuY2UgPT0gUHVzaEJ1dHRvblBhcnQgfHwgYXBwZWFyYW5jZSA9
PSBCdXR0b25QYXJ0KSB7Ci0gICAgICAgIG9wdGlvbi5yZWN0ID0gaW5mbGF0ZUJ1dHRvblJlY3Qo
b3B0aW9uLnJlY3QpOwotICAgICAgICBwLmRyYXdDb250cm9sKFFTdHlsZTo6Q0VfUHVzaEJ1dHRv
biwgb3B0aW9uKTsKLSAgICB9IGVsc2UgaWYgKGFwcGVhcmFuY2UgPT0gUmFkaW9QYXJ0KQotICAg
ICAgIHAuZHJhd0NvbnRyb2woUVN0eWxlOjpDRV9SYWRpb0J1dHRvbiwgb3B0aW9uKTsKLSAgICBl
bHNlIGlmIChhcHBlYXJhbmNlID09IENoZWNrYm94UGFydCkKLSAgICAgICBwLmRyYXdDb250cm9s
KFFTdHlsZTo6Q0VfQ2hlY2tCb3gsIG9wdGlvbik7Ci0KLSAgICByZXR1cm4gZmFsc2U7Ci19Ci0K
LWJvb2wgUmVuZGVyVGhlbWVRU3R5bGU6OnBhaW50VGV4dEZpZWxkKFJlbmRlck9iamVjdCogbywg
Y29uc3QgUGFpbnRJbmZvJiBpLCBjb25zdCBJbnRSZWN0JiByKQotewotICAgIFN0eWxlUGFpbnRl
clFTdHlsZSBwKHRoaXMsIGkpOwotICAgIGlmICghcC5pc1ZhbGlkKCkpCi0gICAgICAgIHJldHVy
biB0cnVlOwotCi0gICAgUVN0eWxlT3B0aW9uRnJhbWVWMiBwYW5lbDsKLSAgICBpbml0U3R5bGVP
cHRpb24ocC53aWRnZXQsIHBhbmVsKTsKLSAgICBwYW5lbC5yZWN0ID0gcjsKLSAgICBwYW5lbC5s
aW5lV2lkdGggPSBmaW5kRnJhbWVMaW5lV2lkdGgocVN0eWxlKCkpOwotICAgIHBhbmVsLnN0YXRl
IHw9IFFTdHlsZTo6U3RhdGVfU3Vua2VuOwotICAgIHBhbmVsLmZlYXR1cmVzID0gUVN0eWxlT3B0
aW9uRnJhbWVWMjo6Tm9uZTsKLQotICAgIC8vIEdldCB0aGUgY29ycmVjdCB0aGVtZSBkYXRhIGZv
ciBhIHRleHQgZmllbGQKLSAgICBDb250cm9sUGFydCBhcHBlYXJhbmNlID0gaW5pdGlhbGl6ZUNv
bW1vblFTdHlsZU9wdGlvbnMocGFuZWwsIG8pOwotICAgIGlmIChhcHBlYXJhbmNlICE9IFRleHRG
aWVsZFBhcnQKLSAgICAgICAgJiYgYXBwZWFyYW5jZSAhPSBTZWFyY2hGaWVsZFBhcnQKLSAgICAg
ICAgJiYgYXBwZWFyYW5jZSAhPSBUZXh0QXJlYVBhcnQKLSAgICAgICAgJiYgYXBwZWFyYW5jZSAh
PSBMaXN0Ym94UGFydCkKLSAgICAgICAgcmV0dXJuIHRydWU7Ci0KLSAgICAvLyBOb3cgcGFpbnQg
dGhlIHRleHQgZmllbGQuCi0gICAgcC5kcmF3UHJpbWl0aXZlKFFTdHlsZTo6UEVfUGFuZWxMaW5l
RWRpdCwgcGFuZWwpOwotICAgIHJldHVybiBmYWxzZTsKLX0KLQotdm9pZCBSZW5kZXJUaGVtZVFT
dHlsZTo6YWRqdXN0VGV4dEFyZWFTdHlsZShTdHlsZVJlc29sdmVyKiBzdHlsZVJlc29sdmVyLCBS
ZW5kZXJTdHlsZSogc3R5bGUsIEVsZW1lbnQqIGVsZW1lbnQpIGNvbnN0Ci17Ci0gICAgYWRqdXN0
VGV4dEZpZWxkU3R5bGUoc3R5bGVSZXNvbHZlciwgc3R5bGUsIGVsZW1lbnQpOwotfQotCi1ib29s
IFJlbmRlclRoZW1lUVN0eWxlOjpwYWludFRleHRBcmVhKFJlbmRlck9iamVjdCogbywgY29uc3Qg
UGFpbnRJbmZvJiBpLCBjb25zdCBJbnRSZWN0JiByKQotewotICAgIHJldHVybiBwYWludFRleHRG
aWVsZChvLCBpLCByKTsKLX0KLQotdm9pZCBSZW5kZXJUaGVtZVFTdHlsZTo6c2V0UG9wdXBQYWRk
aW5nKFJlbmRlclN0eWxlKiBzdHlsZSkgY29uc3QKLXsKLSAgICBjb25zdCBpbnQgcGFkZGluZ0xl
ZnQgPSA0OwotICAgIGNvbnN0IGludCBwYWRkaW5nUmlnaHQgPSBzdHlsZS0+d2lkdGgoKS5pc0Zp
eGVkKCkgfHwgc3R5bGUtPndpZHRoKCkuaXNQZXJjZW50KCkgPyA1IDogODsKLQotICAgIHN0eWxl
LT5zZXRQYWRkaW5nTGVmdChMZW5ndGgocGFkZGluZ0xlZnQsIEZpeGVkKSk7Ci0KLSAgICBRU3R5
bGVPcHRpb25Db21ib0JveCBvcHQ7Ci0gICAgaW50IHcgPSBxU3R5bGUoKS0+cGl4ZWxNZXRyaWMo
UVN0eWxlOjpQTV9CdXR0b25JY29uU2l6ZSwgJm9wdCwgMCk7Ci0gICAgc3R5bGUtPnNldFBhZGRp
bmdSaWdodChMZW5ndGgocGFkZGluZ1JpZ2h0ICsgdywgRml4ZWQpKTsKLQotICAgIHN0eWxlLT5z
ZXRQYWRkaW5nVG9wKExlbmd0aCgyLCBGaXhlZCkpOwotICAgIHN0eWxlLT5zZXRQYWRkaW5nQm90
dG9tKExlbmd0aCgyLCBGaXhlZCkpOwotfQotCi1RUGFsZXR0ZSBSZW5kZXJUaGVtZVFTdHlsZTo6
Y29sb3JQYWxldHRlKCkgY29uc3QKLXsKLSAgICBRUGFsZXR0ZSBwYWxldHRlID0gUmVuZGVyVGhl
bWVRdDo6Y29sb3JQYWxldHRlKCk7Ci0gICAgc2V0UGFsZXR0ZUZyb21QYWdlQ2xpZW50SWZFeGlz
dHMocGFsZXR0ZSk7Ci0gICAgcmV0dXJuIHBhbGV0dGU7Ci19Ci0KLWJvb2wgUmVuZGVyVGhlbWVR
U3R5bGU6OnBhaW50TWVudUxpc3QoUmVuZGVyT2JqZWN0KiBvLCBjb25zdCBQYWludEluZm8mIGks
IGNvbnN0IEludFJlY3QmIHIpCi17Ci0gICAgU3R5bGVQYWludGVyUVN0eWxlIHAodGhpcywgaSk7
Ci0gICAgaWYgKCFwLmlzVmFsaWQoKSkKLSAgICAgICAgcmV0dXJuIHRydWU7Ci0KLSAgICBRU3R5
bGVPcHRpb25Db21ib0JveCBvcHQ7Ci0gICAgaW5pdFN0eWxlT3B0aW9uKHAud2lkZ2V0LCBvcHQp
OwotICAgIGluaXRpYWxpemVDb21tb25RU3R5bGVPcHRpb25zKG9wdCwgbyk7Ci0KLSAgICBJbnRS
ZWN0IHJlY3QgPSByOwotCi0jaWYgZGVmaW5lZChRX1dTX01BQykgJiYgIWRlZmluZWQoUVRfTk9f
U1RZTEVfTUFDKQotICAgIC8vIFFNYWNTdHlsZSBtYWtlcyB0aGUgY29tYm8gYm94ZXMgYSBsaXR0
bGUgYml0IHNtYWxsZXIgdG8gbGVhdmUgc3BhY2UgZm9yIHRoZSBmb2N1cyByZWN0LgotICAgIC8v
IEJlY2F1c2Ugb2YgaXQsIHRoZSBjb21ibyBidXR0b24gaXMgZHJhd24gYXQgYSBwb2ludCB0byB0
aGUgbGVmdCBvZiB3aGVyZSBpdCB3YXMgZXhwZWN0IHRvIGJlIGFuZCBtYXkgZW5kIHVwCi0gICAg
Ly8gb3ZlcmxhcHBlZCB3aXRoIHRoZSB0ZXh0LiBUaGlzIHdpbGwgZm9yY2UgUU1hY1N0eWxlIHRv
IGRyYXcgdGhlIGNvbWJvIGJveCB3aXRoIHRoZSBleHBlY3RlZCB3aWR0aC4KLSAgICBpZiAocW9i
amVjdF9jYXN0PFFNYWNTdHlsZSo+KHAuc3R5bGUpKQotICAgICAgICByZWN0LmluZmxhdGVYKDMp
OwotI2VuZGlmCi0KLSAgICBjb25zdCBRUG9pbnQgdG9wTGVmdCA9IHJlY3QubG9jYXRpb24oKTsK
LSAgICBwLnBhaW50ZXItPnRyYW5zbGF0ZSh0b3BMZWZ0KTsKLSAgICBvcHQucmVjdC5tb3ZlVG8o
UVBvaW50KDAsIDApKTsKLSAgICBvcHQucmVjdC5zZXRTaXplKHJlY3Quc2l6ZSgpKTsKLQotICAg
IHAuZHJhd0NvbXBsZXhDb250cm9sKFFTdHlsZTo6Q0NfQ29tYm9Cb3gsIG9wdCk7Ci0gICAgcC5w
YWludGVyLT50cmFuc2xhdGUoLXRvcExlZnQpOwotICAgIHJldHVybiBmYWxzZTsKLX0KLQotdm9p
ZCBSZW5kZXJUaGVtZVFTdHlsZTo6YWRqdXN0TWVudUxpc3RCdXR0b25TdHlsZShTdHlsZVJlc29s
dmVyKiBzdHlsZVJlc29sdmVyLCBSZW5kZXJTdHlsZSogc3R5bGUsIEVsZW1lbnQqIGUpIGNvbnN0
Ci17Ci0gICAgLy8gV09SS0FST1VORCBiZWNhdXNlIGh0bWwuY3NzIHNwZWNpZmllcyAtd2Via2l0
LWJvcmRlci1yYWRpdXMgZm9yIDxzZWxlY3Q+IHNvIHdlIG92ZXJyaWRlIGl0IGhlcmUKLSAgICAv
LyBzZWUgYWxzbyBodHRwOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xODM5OQot
ICAgIHN0eWxlLT5yZXNldEJvcmRlclJhZGl1cygpOwotCi0gICAgUmVuZGVyVGhlbWVRdDo6YWRq
dXN0TWVudUxpc3RCdXR0b25TdHlsZShzdHlsZVJlc29sdmVyLCBzdHlsZSwgZSk7Ci19Ci0KLWJv
b2wgUmVuZGVyVGhlbWVRU3R5bGU6OnBhaW50TWVudUxpc3RCdXR0b24oUmVuZGVyT2JqZWN0KiBv
LCBjb25zdCBQYWludEluZm8mIGksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgY29uc3QgSW50UmVjdCYgcikKLXsKLSAgICBTdHlsZVBhaW50ZXJRU3R5bGUgcCh0aGlz
LCBpKTsKLSAgICBpZiAoIXAuaXNWYWxpZCgpKQotICAgICAgICByZXR1cm4gdHJ1ZTsKLQotICAg
IFFTdHlsZU9wdGlvbkNvbWJvQm94IG9wdGlvbjsKLSAgICBpbml0U3R5bGVPcHRpb24ocC53aWRn
ZXQsIG9wdGlvbik7Ci0gICAgaW5pdGlhbGl6ZUNvbW1vblFTdHlsZU9wdGlvbnMob3B0aW9uLCBv
KTsKLSAgICBvcHRpb24ucmVjdCA9IHI7Ci0KLSAgICAvLyBmb3IgZHJhd2luZyB0aGUgY29tYm8g
Ym94IGFycm93LCByZWx5IG9ubHkgb24gdGhlIGZhbGxiYWNrIHN0eWxlCi0gICAgcC5zdHlsZSA9
IGZhbGxiYWNrU3R5bGUoKTsKLSAgICBvcHRpb24uc3ViQ29udHJvbHMgPSBRU3R5bGU6OlNDX0Nv
bWJvQm94QXJyb3c7Ci0gICAgcC5kcmF3Q29tcGxleENvbnRyb2woUVN0eWxlOjpDQ19Db21ib0Jv
eCwgb3B0aW9uKTsKLQotICAgIHJldHVybiBmYWxzZTsKLX0KLQotI2lmIEVOQUJMRShQUk9HUkVT
U19FTEVNRU5UKQotZG91YmxlIFJlbmRlclRoZW1lUVN0eWxlOjphbmltYXRpb25EdXJhdGlvbkZv
clByb2dyZXNzQmFyKFJlbmRlclByb2dyZXNzKiByZW5kZXJQcm9ncmVzcykgY29uc3QKLXsKLSAg
ICBpZiAocmVuZGVyUHJvZ3Jlc3MtPnBvc2l0aW9uKCkgPj0gMCkKLSAgICAgICAgcmV0dXJuIDA7
Ci0KLSAgICBRU3R5bGVPcHRpb25Qcm9ncmVzc0JhclYyIG9wdGlvbjsKLSAgICBvcHRpb24ucmVj
dC5zZXRTaXplKHJlbmRlclByb2dyZXNzLT5waXhlbFNuYXBwZWRTaXplKCkpOwotICAgIC8vIEZJ
WE1FOiBVbnRpbCBodHRwOi8vYnVncmVwb3J0cy5xdC5ub2tpYS5jb20vYnJvd3NlL1FUQlVHLTkx
NzEgaXMgZml4ZWQsCi0gICAgLy8gd2Ugc2ltdWxhdGUgb25lIHNxdWFyZSBhbmltYXRpbmcgYWNy
b3NzIHRoZSBwcm9ncmVzcyBiYXIuCi0gICAgcmV0dXJuIChvcHRpb24ucmVjdC53aWR0aCgpIC8g
cVN0eWxlKCktPnBpeGVsTWV0cmljKFFTdHlsZTo6UE1fUHJvZ3Jlc3NCYXJDaHVua1dpZHRoLCAm
b3B0aW9uKSkgKiBhbmltYXRpb25SZXBlYXRJbnRlcnZhbEZvclByb2dyZXNzQmFyKHJlbmRlclBy
b2dyZXNzKTsKLX0KLQotYm9vbCBSZW5kZXJUaGVtZVFTdHlsZTo6cGFpbnRQcm9ncmVzc0JhcihS
ZW5kZXJPYmplY3QqIG8sIGNvbnN0IFBhaW50SW5mbyYgcGksIGNvbnN0IEludFJlY3QmIHIpCi17
Ci0gICAgaWYgKCFvLT5pc1Byb2dyZXNzKCkpCi0gICAgICAgIHJldHVybiB0cnVlOwotCi0gICAg
U3R5bGVQYWludGVyUVN0eWxlIHAodGhpcywgcGkpOwotICAgIGlmICghcC5pc1ZhbGlkKCkpCi0g
ICAgICAgcmV0dXJuIHRydWU7Ci0KLSAgICBRU3R5bGVPcHRpb25Qcm9ncmVzc0JhclYyIG9wdGlv
bjsKLSAgICBpbml0U3R5bGVPcHRpb24ocC53aWRnZXQsIG9wdGlvbik7Ci0gICAgaW5pdGlhbGl6
ZUNvbW1vblFTdHlsZU9wdGlvbnMob3B0aW9uLCBvKTsKLQotICAgIFJlbmRlclByb2dyZXNzKiBy
ZW5kZXJQcm9ncmVzcyA9IHRvUmVuZGVyUHJvZ3Jlc3Mobyk7Ci0gICAgb3B0aW9uLnJlY3QgPSBy
OwotICAgIG9wdGlvbi5tYXhpbXVtID0gc3RkOjpudW1lcmljX2xpbWl0czxpbnQ+OjptYXgoKTsK
LSAgICBvcHRpb24ubWluaW11bSA9IDA7Ci0gICAgb3B0aW9uLnByb2dyZXNzID0gKHJlbmRlclBy
b2dyZXNzLT5wb3NpdGlvbigpICogc3RkOjpudW1lcmljX2xpbWl0czxpbnQ+OjptYXgoKSk7Ci0K
LSAgICBjb25zdCBRUG9pbnQgdG9wTGVmdCA9IHIubG9jYXRpb24oKTsKLSAgICBwLnBhaW50ZXIt
PnRyYW5zbGF0ZSh0b3BMZWZ0KTsKLSAgICBvcHRpb24ucmVjdC5tb3ZlVG8oUVBvaW50KDAsIDAp
KTsKLSAgICBvcHRpb24ucmVjdC5zZXRTaXplKHIuc2l6ZSgpKTsKLQotICAgIGlmIChvcHRpb24u
cHJvZ3Jlc3MgPCAwKSB7Ci0gICAgICAgIC8vIEZJWE1FOiBVbnRpbCBodHRwOi8vYnVncmVwb3J0
cy5xdC5ub2tpYS5jb20vYnJvd3NlL1FUQlVHLTkxNzEgaXMgZml4ZWQsCi0gICAgICAgIC8vIHdl
IHNpbXVsYXRlIG9uZSBzcXVhcmUgYW5pbWF0aW5nIGFjcm9zcyB0aGUgcHJvZ3Jlc3MgYmFyLgot
ICAgICAgICBwLmRyYXdDb250cm9sKFFTdHlsZTo6Q0VfUHJvZ3Jlc3NCYXJHcm9vdmUsIG9wdGlv
bik7Ci0gICAgICAgIGludCBjaHVua1dpZHRoID0gcVN0eWxlKCktPnBpeGVsTWV0cmljKFFTdHls
ZTo6UE1fUHJvZ3Jlc3NCYXJDaHVua1dpZHRoLCAmb3B0aW9uKTsKLSAgICAgICAgUUNvbG9yIGNv
bG9yID0gKG9wdGlvbi5wYWxldHRlLmhpZ2hsaWdodCgpID09IG9wdGlvbi5wYWxldHRlLmJhY2tn
cm91bmQoKSkgPyBvcHRpb24ucGFsZXR0ZS5jb2xvcihRUGFsZXR0ZTo6QWN0aXZlLCBRUGFsZXR0
ZTo6SGlnaGxpZ2h0KSA6IG9wdGlvbi5wYWxldHRlLmNvbG9yKFFQYWxldHRlOjpIaWdobGlnaHQp
OwotICAgICAgICBpZiAocmVuZGVyUHJvZ3Jlc3MtPnN0eWxlKCktPmRpcmVjdGlvbigpID09IFJU
TCkKLSAgICAgICAgICAgIHAucGFpbnRlci0+ZmlsbFJlY3Qob3B0aW9uLnJlY3QucmlnaHQoKSAt
IGNodW5rV2lkdGggIC0gcmVuZGVyUHJvZ3Jlc3MtPmFuaW1hdGlvblByb2dyZXNzKCkgKiBvcHRp
b24ucmVjdC53aWR0aCgpLCAwLCBjaHVua1dpZHRoLCBvcHRpb24ucmVjdC5oZWlnaHQoKSwgY29s
b3IpOwotICAgICAgICBlbHNlCi0gICAgICAgICAgICBwLnBhaW50ZXItPmZpbGxSZWN0KHJlbmRl
clByb2dyZXNzLT5hbmltYXRpb25Qcm9ncmVzcygpICogb3B0aW9uLnJlY3Qud2lkdGgoKSwgMCwg
Y2h1bmtXaWR0aCwgb3B0aW9uLnJlY3QuaGVpZ2h0KCksIGNvbG9yKTsKLSAgICB9IGVsc2UKLSAg
ICAgICAgcC5kcmF3Q29udHJvbChRU3R5bGU6OkNFX1Byb2dyZXNzQmFyLCBvcHRpb24pOwotCi0g
ICAgcC5wYWludGVyLT50cmFuc2xhdGUoLXRvcExlZnQpOwotCi0gICAgcmV0dXJuIGZhbHNlOwot
fQotI2VuZGlmCi0KLWJvb2wgUmVuZGVyVGhlbWVRU3R5bGU6OnBhaW50U2xpZGVyVHJhY2soUmVu
ZGVyT2JqZWN0KiBvLCBjb25zdCBQYWludEluZm8mIHBpLAotICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIGNvbnN0IEludFJlY3QmIHIpCi17Ci0gICAgU3R5bGVQYWludGVyUVN0
eWxlIHAodGhpcywgcGkpOwotICAgIGlmICghcC5pc1ZhbGlkKCkpCi0gICAgICAgIHJldHVybiB0
cnVlOwotCi0gICAgY29uc3QgUVBvaW50IHRvcExlZnQgPSByLmxvY2F0aW9uKCk7Ci0gICAgcC5w
YWludGVyLT50cmFuc2xhdGUodG9wTGVmdCk7Ci0KLSAgICBRU3R5bGVPcHRpb25TbGlkZXIgb3B0
aW9uOwotICAgIGluaXRTdHlsZU9wdGlvbihwLndpZGdldCwgb3B0aW9uKTsKLSAgICBvcHRpb24u
c3ViQ29udHJvbHMgPSBRU3R5bGU6OlNDX1NsaWRlckdyb292ZTsKLSAgICBDb250cm9sUGFydCBh
cHBlYXJhbmNlID0gaW5pdGlhbGl6ZUNvbW1vblFTdHlsZU9wdGlvbnMob3B0aW9uLCBvKTsKLSAg
ICBvcHRpb24ucmVjdCA9IHI7Ci0gICAgb3B0aW9uLnJlY3QubW92ZVRvKFFQb2ludCgwLCAwKSk7
Ci0gICAgaWYgKGFwcGVhcmFuY2UgPT0gU2xpZGVyVmVydGljYWxQYXJ0KQotICAgICAgICBvcHRp
b24ub3JpZW50YXRpb24gPSBRdDo6VmVydGljYWw7Ci0gICAgaWYgKGlzUHJlc3NlZChvKSkKLSAg
ICAgICAgb3B0aW9uLnN0YXRlIHw9IFFTdHlsZTo6U3RhdGVfU3Vua2VuOwotCi0gICAgLy8gc29t
ZSBzdHlsZXMgbmVlZCB0aGlzIHRvIHNob3cgYSBoaWdobGlnaHQgb24gb25lIHNpZGUgb2YgdGhl
IGdyb292ZQotICAgIEhUTUxJbnB1dEVsZW1lbnQqIHNsaWRlciA9IG8tPm5vZGUoKS0+dG9JbnB1
dEVsZW1lbnQoKTsKLSAgICBpZiAoc2xpZGVyKSB7Ci0gICAgICAgIG9wdGlvbi51cHNpZGVEb3du
ID0gKGFwcGVhcmFuY2UgPT0gU2xpZGVySG9yaXpvbnRhbFBhcnQpICYmICFvLT5zdHlsZSgpLT5p
c0xlZnRUb1JpZ2h0RGlyZWN0aW9uKCk7Ci0gICAgICAgIC8vIFVzZSB0aGUgd2lkdGggYXMgYSBt
dWx0aXBsaWVyIGluIGNhc2UgdGhlIHNsaWRlciB2YWx1ZXMgYXJlIDw9IDEKLSAgICAgICAgY29u
c3QgaW50IHdpZHRoID0gci53aWR0aCgpID4gMCA/IHIud2lkdGgoKSA6IDEwMDsKLSAgICAgICAg
b3B0aW9uLm1heGltdW0gPSBzbGlkZXItPm1heGltdW0oKSAqIHdpZHRoOwotICAgICAgICBvcHRp
b24ubWluaW11bSA9IHNsaWRlci0+bWluaW11bSgpICogd2lkdGg7Ci0gICAgICAgIGlmICghb3B0
aW9uLnVwc2lkZURvd24pCi0gICAgICAgICAgICBvcHRpb24uc2xpZGVyUG9zaXRpb24gPSBzbGlk
ZXItPnZhbHVlQXNOdW1iZXIoKSAqIHdpZHRoOwotICAgICAgICBlbHNlCi0gICAgICAgICAgICBv
cHRpb24uc2xpZGVyUG9zaXRpb24gPSBvcHRpb24ubWluaW11bSArIG9wdGlvbi5tYXhpbXVtIC0g
c2xpZGVyLT52YWx1ZUFzTnVtYmVyKCkgKiB3aWR0aDsKLSAgICB9Ci0KLSAgICBwLmRyYXdDb21w
bGV4Q29udHJvbChRU3R5bGU6OkNDX1NsaWRlciwgb3B0aW9uKTsKLQotICAgIGlmIChvcHRpb24u
c3RhdGUgJiBRU3R5bGU6OlN0YXRlX0hhc0ZvY3VzKSB7Ci0gICAgICAgIFFTdHlsZU9wdGlvbkZv
Y3VzUmVjdCBmb2N1c09wdGlvbjsKLSAgICAgICAgZm9jdXNPcHRpb24ucmVjdCA9IHI7Ci0gICAg
ICAgIHAuZHJhd1ByaW1pdGl2ZShRU3R5bGU6OlBFX0ZyYW1lRm9jdXNSZWN0LCBmb2N1c09wdGlv
bik7Ci0gICAgfQotICAgIHAucGFpbnRlci0+dHJhbnNsYXRlKC10b3BMZWZ0KTsKLSAgICByZXR1
cm4gZmFsc2U7Ci19Ci0KLXZvaWQgUmVuZGVyVGhlbWVRU3R5bGU6OmFkanVzdFNsaWRlclRyYWNr
U3R5bGUoU3R5bGVSZXNvbHZlciosIFJlbmRlclN0eWxlKiBzdHlsZSwgRWxlbWVudCopIGNvbnN0
Ci17Ci0gICAgc3R5bGUtPnNldEJveFNoYWRvdyhudWxscHRyKTsKLX0KLQotYm9vbCBSZW5kZXJU
aGVtZVFTdHlsZTo6cGFpbnRTbGlkZXJUaHVtYihSZW5kZXJPYmplY3QqIG8sIGNvbnN0IFBhaW50
SW5mbyYgcGksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgSW50
UmVjdCYgcikKLXsKLSAgICBTdHlsZVBhaW50ZXJRU3R5bGUgcCh0aGlzLCBwaSk7Ci0gICAgaWYg
KCFwLmlzVmFsaWQoKSkKLSAgICAgICAgcmV0dXJuIHRydWU7Ci0KLSAgICBjb25zdCBRUG9pbnQg
dG9wTGVmdCA9IHIubG9jYXRpb24oKTsKLSAgICBwLnBhaW50ZXItPnRyYW5zbGF0ZSh0b3BMZWZ0
KTsKLQotICAgIFFTdHlsZU9wdGlvblNsaWRlciBvcHRpb247Ci0gICAgaW5pdFN0eWxlT3B0aW9u
KHAud2lkZ2V0LCBvcHRpb24pOwotICAgIG9wdGlvbi5zdWJDb250cm9scyA9IFFTdHlsZTo6U0Nf
U2xpZGVySGFuZGxlOwotICAgIENvbnRyb2xQYXJ0IGFwcGVhcmFuY2UgPSBpbml0aWFsaXplQ29t
bW9uUVN0eWxlT3B0aW9ucyhvcHRpb24sIG8pOwotICAgIG9wdGlvbi5yZWN0ID0gcjsKLSAgICBv
cHRpb24ucmVjdC5tb3ZlVG8oUVBvaW50KDAsIDApKTsKLSAgICBpZiAoYXBwZWFyYW5jZSA9PSBT
bGlkZXJUaHVtYlZlcnRpY2FsUGFydCkKLSAgICAgICAgb3B0aW9uLm9yaWVudGF0aW9uID0gUXQ6
OlZlcnRpY2FsOwotICAgIGlmIChpc1ByZXNzZWQobykpIHsKLSAgICAgICAgb3B0aW9uLmFjdGl2
ZVN1YkNvbnRyb2xzID0gUVN0eWxlOjpTQ19TbGlkZXJIYW5kbGU7Ci0gICAgICAgIG9wdGlvbi5z
dGF0ZSB8PSBRU3R5bGU6OlN0YXRlX1N1bmtlbjsKLSAgICB9Ci0KLSAgICBwLmRyYXdDb21wbGV4
Q29udHJvbChRU3R5bGU6OkNDX1NsaWRlciwgb3B0aW9uKTsKLSAgICBwLnBhaW50ZXItPnRyYW5z
bGF0ZSgtdG9wTGVmdCk7Ci0gICAgcmV0dXJuIGZhbHNlOwotfQotCi12b2lkIFJlbmRlclRoZW1l
UVN0eWxlOjphZGp1c3RTbGlkZXJUaHVtYlN0eWxlKFN0eWxlUmVzb2x2ZXIqIHN0eWxlUmVzb2x2
ZXIsIFJlbmRlclN0eWxlKiBzdHlsZSwgRWxlbWVudCogZWxlbWVudCkgY29uc3QKLXsKLSAgICBS
ZW5kZXJUaGVtZTo6YWRqdXN0U2xpZGVyVGh1bWJTdHlsZShzdHlsZVJlc29sdmVyLCBzdHlsZSwg
ZWxlbWVudCk7Ci0gICAgc3R5bGUtPnNldEJveFNoYWRvdyhudWxscHRyKTsKLX0KLQotYm9vbCBS
ZW5kZXJUaGVtZVFTdHlsZTo6cGFpbnRTZWFyY2hGaWVsZChSZW5kZXJPYmplY3QqIG8sIGNvbnN0
IFBhaW50SW5mbyYgcGksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29u
c3QgSW50UmVjdCYgcikKLXsKLSAgICByZXR1cm4gcGFpbnRUZXh0RmllbGQobywgcGksIHIpOwot
fQotCi12b2lkIFJlbmRlclRoZW1lUVN0eWxlOjphZGp1c3RTZWFyY2hGaWVsZERlY29yYXRpb25T
dHlsZShTdHlsZVJlc29sdmVyKiBzdHlsZVJlc29sdmVyLCBSZW5kZXJTdHlsZSogc3R5bGUsIEVs
ZW1lbnQqIGUpIGNvbnN0Ci17Ci0gICAgbm90SW1wbGVtZW50ZWQoKTsKLSAgICBSZW5kZXJUaGVt
ZTo6YWRqdXN0U2VhcmNoRmllbGREZWNvcmF0aW9uU3R5bGUoc3R5bGVSZXNvbHZlciwgc3R5bGUs
IGUpOwotfQotCi1ib29sIFJlbmRlclRoZW1lUVN0eWxlOjpwYWludFNlYXJjaEZpZWxkRGVjb3Jh
dGlvbihSZW5kZXJPYmplY3QqIG8sIGNvbnN0IFBhaW50SW5mbyYgcGksCi0gICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IEludFJlY3QmIHIpCi17Ci0g
ICAgbm90SW1wbGVtZW50ZWQoKTsKLSAgICByZXR1cm4gUmVuZGVyVGhlbWU6OnBhaW50U2VhcmNo
RmllbGREZWNvcmF0aW9uKG8sIHBpLCByKTsKLX0KLQotdm9pZCBSZW5kZXJUaGVtZVFTdHlsZTo6
YWRqdXN0U2VhcmNoRmllbGRSZXN1bHRzRGVjb3JhdGlvblN0eWxlKFN0eWxlUmVzb2x2ZXIqIHN0
eWxlUmVzb2x2ZXIsIFJlbmRlclN0eWxlKiBzdHlsZSwgRWxlbWVudCogZSkgY29uc3QKLXsKLSAg
ICBub3RJbXBsZW1lbnRlZCgpOwotICAgIFJlbmRlclRoZW1lOjphZGp1c3RTZWFyY2hGaWVsZFJl
c3VsdHNEZWNvcmF0aW9uU3R5bGUoc3R5bGVSZXNvbHZlciwgc3R5bGUsIGUpOwotfQotCi1ib29s
IFJlbmRlclRoZW1lUVN0eWxlOjpwYWludFNlYXJjaEZpZWxkUmVzdWx0c0RlY29yYXRpb24oUmVu
ZGVyT2JqZWN0KiBvLCBjb25zdCBQYWludEluZm8mIHBpLAotICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgSW50UmVjdCYgcikKLXsKLSAg
ICBub3RJbXBsZW1lbnRlZCgpOwotICAgIHJldHVybiBSZW5kZXJUaGVtZTo6cGFpbnRTZWFyY2hG
aWVsZFJlc3VsdHNEZWNvcmF0aW9uKG8sIHBpLCByKTsKLX0KLQotI2lmbmRlZiBRVF9OT19TUElO
Qk9YCi0KLWJvb2wgUmVuZGVyVGhlbWVRU3R5bGU6OnBhaW50SW5uZXJTcGluQnV0dG9uKFJlbmRl
ck9iamVjdCogbywgY29uc3QgUGFpbnRJbmZvJiBwYWludEluZm8sIGNvbnN0IEludFJlY3QmIHJl
Y3QpCi17Ci0gICAgU3R5bGVQYWludGVyUVN0eWxlIHAodGhpcywgcGFpbnRJbmZvKTsKLSAgICBp
ZiAoIXAuaXNWYWxpZCgpKQotICAgICAgIHJldHVybiB0cnVlOwotCi0gICAgUVN0eWxlT3B0aW9u
U3BpbkJveCBvcHRpb247Ci0gICAgaW5pdFN0eWxlT3B0aW9uKHAud2lkZ2V0LCBvcHRpb24pOwot
ICAgIG9wdGlvbi5zdWJDb250cm9scyA9IFFTdHlsZTo6U0NfU3BpbkJveFVwIHwgUVN0eWxlOjpT
Q19TcGluQm94RG93bjsKLSAgICBpZiAoIWlzUmVhZE9ubHlDb250cm9sKG8pKSB7Ci0gICAgICAg
IGlmIChpc0VuYWJsZWQobykpCi0gICAgICAgICAgICBvcHRpb24uc3RlcEVuYWJsZWQgPSBRQWJz
dHJhY3RTcGluQm94OjpTdGVwVXBFbmFibGVkIHwgUUFic3RyYWN0U3BpbkJveDo6U3RlcERvd25F
bmFibGVkOwotICAgICAgICBpZiAoaXNQcmVzc2VkKG8pKSB7Ci0gICAgICAgICAgICBvcHRpb24u
c3RhdGUgfD0gUVN0eWxlOjpTdGF0ZV9TdW5rZW47Ci0gICAgICAgICAgICBpZiAoaXNTcGluVXBC
dXR0b25QYXJ0UHJlc3NlZChvKSkKLSAgICAgICAgICAgICAgICBvcHRpb24uYWN0aXZlU3ViQ29u
dHJvbHMgPSBRU3R5bGU6OlNDX1NwaW5Cb3hVcDsKLSAgICAgICAgICAgIGVsc2UKLSAgICAgICAg
ICAgICAgICBvcHRpb24uYWN0aXZlU3ViQ29udHJvbHMgPSBRU3R5bGU6OlNDX1NwaW5Cb3hEb3du
OwotICAgICAgICB9Ci0gICAgfQotICAgIC8vIFJlbmRlciB0aGUgc3BpbiBidXR0b25zIGZvciBM
VFIgb3IgUlRMIGFjY29yZGluZ2x5LgotICAgIG9wdGlvbi5kaXJlY3Rpb24gPSBvLT5zdHlsZSgp
LT5pc0xlZnRUb1JpZ2h0RGlyZWN0aW9uKCkgPyBRdDo6TGVmdFRvUmlnaHQgOiBRdDo6UmlnaHRU
b0xlZnQ7Ci0KLSAgICBJbnRSZWN0IGJ1dHRvblJlY3QgPSByZWN0OwotICAgIC8vIERlZmF1bHQg
dG8gbW92aW5nIHRoZSBidXR0b25zIGEgbGl0dGxlIGJpdCB3aXRoaW4gdGhlIGVkaXRvciBmcmFt
ZS4KLSAgICBpbnQgaW5mbGF0ZVggPSAtMjsKLSAgICBpbnQgaW5mbGF0ZVkgPSAtMjsKLSNpZiBk
ZWZpbmVkKFFfV1NfTUFDKSAmJiAhZGVmaW5lZChRVF9OT19TVFlMRV9NQUMpCi0gICAgLy8gUU1h
Y1N0eWxlIHdpbGwgcG9zaXRpb24gdGhlIGFxdWEgYnV0dG9ucyBmbHVzaCB0byB0aGUgcmlnaHQu
Ci0gICAgLy8gVGhpcyB3aWxsIG1vdmUgdGhlbSBtb3JlIHdpdGhpbiB0aGUgY29udHJvbCBmb3Ig
YmV0dGVyIHN0eWxlLCBhIGxhCi0gICAgLy8gQ2hyb21pdW0gbG9vayAmIGZlZWwuCi0gICAgaWYg
KHFvYmplY3RfY2FzdDxRTWFjU3R5bGUqPihwLnN0eWxlKSkgewotICAgICAgICBpbmZsYXRlWCA9
IC00OwotICAgICAgICAvLyBSZW5kZXIgbWluaSBhcXVhIHNwaW4gYnV0dG9ucyBmb3IgUU1hY1N0
eWxlIHRvIGZpdCBuaWNlbHkgaW50bwotICAgICAgICAvLyB0aGUgZWRpdG9yIGFyZWEsIGxpa2Ug
Q2hyb21pdW0uCi0gICAgICAgIG9wdGlvbi5zdGF0ZSB8PSBRU3R5bGU6OlN0YXRlX01pbmk7Ci0g
ICAgfQotI2VuZGlmCi0jaWYgIWRlZmluZWQoUVRfTk9fU1RZTEVfUExBU1RJUVVFKQotICAgIC8v
IFFQbGFzdGlxdWVTdHlsZSBsb29rcyBiZXN0IHdoZW4gdGhlIHNwaW4gYnV0dG9ucyBhcmUgZmx1
c2ggd2l0aCB0aGUgZnJhbWUncyBlZGdlLgotICAgIGlmIChxb2JqZWN0X2Nhc3Q8UVBsYXN0aXF1
ZVN0eWxlKj4ocC5zdHlsZSkpIHsKLSAgICAgICAgaW5mbGF0ZVggPSAwOwotICAgICAgICBpbmZs
YXRlWSA9IDA7Ci0gICAgfQotI2VuZGlmCi0KLSAgICBidXR0b25SZWN0LmluZmxhdGVYKGluZmxh
dGVYKTsKLSAgICBidXR0b25SZWN0LmluZmxhdGVZKGluZmxhdGVZKTsKLSAgICBvcHRpb24ucmVj
dCA9IGJ1dHRvblJlY3Q7Ci0KLSAgICBwLmRyYXdDb21wbGV4Q29udHJvbChRU3R5bGU6OkNDX1Nw
aW5Cb3gsIG9wdGlvbik7Ci0gICAgcmV0dXJuIGZhbHNlOwotfQotI2VuZGlmCi0KLUNvbnRyb2xQ
YXJ0IFJlbmRlclRoZW1lUVN0eWxlOjppbml0aWFsaXplQ29tbW9uUVN0eWxlT3B0aW9ucyhRU3R5
bGVPcHRpb24mIG9wdGlvbiwgUmVuZGVyT2JqZWN0KiBvKSBjb25zdAotewotICAgIC8vIERlZmF1
bHQgYml0czogbm8gZm9jdXMsIG5vIG1vdXNlIG92ZXIKLSAgICBvcHRpb24uc3RhdGUgJj0gfihR
U3R5bGU6OlN0YXRlX0hhc0ZvY3VzIHwgUVN0eWxlOjpTdGF0ZV9Nb3VzZU92ZXIpOwotCi0gICAg
aWYgKGlzUmVhZE9ubHlDb250cm9sKG8pKQotICAgICAgICAvLyBSZWFkb25seSBpcyBzdXBwb3J0
ZWQgb24gdGV4dGZpZWxkcy4KLSAgICAgICAgb3B0aW9uLnN0YXRlIHw9IFFTdHlsZTo6U3RhdGVf
UmVhZE9ubHk7Ci0KLSAgICBvcHRpb24uZGlyZWN0aW9uID0gUXQ6OkxlZnRUb1JpZ2h0OwotCi0g
ICAgaWYgKGlzSG92ZXJlZChvKSkKLSAgICAgICAgb3B0aW9uLnN0YXRlIHw9IFFTdHlsZTo6U3Rh
dGVfTW91c2VPdmVyOwotCi0gICAgc2V0UGFsZXR0ZUZyb21QYWdlQ2xpZW50SWZFeGlzdHMob3B0
aW9uLnBhbGV0dGUpOwotCi0gICAgaWYgKCFpc0VuYWJsZWQobykpIHsKLSAgICAgICAgb3B0aW9u
LnBhbGV0dGUuc2V0Q3VycmVudENvbG9yR3JvdXAoUVBhbGV0dGU6OkRpc2FibGVkKTsKLSAgICAg
ICAgb3B0aW9uLnN0YXRlICY9IH5RU3R5bGU6OlN0YXRlX0VuYWJsZWQ7Ci0gICAgfQotCi0gICAg
UmVuZGVyU3R5bGUqIHN0eWxlID0gby0+c3R5bGUoKTsKLSAgICBpZiAoIXN0eWxlKQotICAgICAg
ICByZXR1cm4gTm9Db250cm9sUGFydDsKLQotICAgIENvbnRyb2xQYXJ0IHJlc3VsdCA9IHN0eWxl
LT5hcHBlYXJhbmNlKCk7Ci0gICAgaWYgKHN1cHBvcnRzRm9jdXMocmVzdWx0KSAmJiBpc0ZvY3Vz
ZWQobykpIHsKLSAgICAgICAgb3B0aW9uLnN0YXRlIHw9IFFTdHlsZTo6U3RhdGVfSGFzRm9jdXM7
Ci0gICAgICAgIG9wdGlvbi5zdGF0ZSB8PSBRU3R5bGU6OlN0YXRlX0tleWJvYXJkRm9jdXNDaGFu
Z2U7Ci0gICAgfQotCi0gICAgaWYgKHN0eWxlLT5kaXJlY3Rpb24oKSA9PSBXZWJDb3JlOjpSVEwp
Ci0gICAgICAgIG9wdGlvbi5kaXJlY3Rpb24gPSBRdDo6UmlnaHRUb0xlZnQ7Ci0KLSAgICBzd2l0
Y2ggKHJlc3VsdCkgewotICAgIGNhc2UgUHVzaEJ1dHRvblBhcnQ6Ci0gICAgY2FzZSBTcXVhcmVC
dXR0b25QYXJ0OgotICAgIGNhc2UgQnV0dG9uUGFydDoKLSAgICBjYXNlIEJ1dHRvbkJldmVsUGFy
dDoKLSAgICBjYXNlIExpc3RJdGVtUGFydDoKLSAgICBjYXNlIE1lbnVsaXN0QnV0dG9uUGFydDoK
LSAgICBjYXNlIFNlYXJjaEZpZWxkUmVzdWx0c0J1dHRvblBhcnQ6Ci0gICAgY2FzZSBTZWFyY2hG
aWVsZENhbmNlbEJ1dHRvblBhcnQ6IHsKLSAgICAgICAgaWYgKGlzUHJlc3NlZChvKSkKLSAgICAg
ICAgICAgIG9wdGlvbi5zdGF0ZSB8PSBRU3R5bGU6OlN0YXRlX1N1bmtlbjsKLSAgICAgICAgZWxz
ZSBpZiAocmVzdWx0ID09IFB1c2hCdXR0b25QYXJ0IHx8IHJlc3VsdCA9PSBCdXR0b25QYXJ0KQot
ICAgICAgICAgICAgb3B0aW9uLnN0YXRlIHw9IFFTdHlsZTo6U3RhdGVfUmFpc2VkOwotICAgICAg
ICBicmVhazsKLSAgICB9Ci0gICAgY2FzZSBSYWRpb1BhcnQ6Ci0gICAgY2FzZSBDaGVja2JveFBh
cnQ6Ci0gICAgICAgIG9wdGlvbi5zdGF0ZSB8PSAoaXNDaGVja2VkKG8pID8gUVN0eWxlOjpTdGF0
ZV9PbiA6IFFTdHlsZTo6U3RhdGVfT2ZmKTsKLSAgICB9Ci0KLSAgICByZXR1cm4gcmVzdWx0Owot
fQotCi12b2lkIFJlbmRlclRoZW1lUVN0eWxlOjphZGp1c3RTbGlkZXJUaHVtYlNpemUoUmVuZGVy
U3R5bGUqIHN0eWxlLCBFbGVtZW50KiBlbGVtZW50KSBjb25zdAotewotICAgIGNvbnN0IENvbnRy
b2xQYXJ0IHBhcnQgPSBzdHlsZS0+YXBwZWFyYW5jZSgpOwotICAgIGlmIChwYXJ0ID09IFNsaWRl
clRodW1iSG9yaXpvbnRhbFBhcnQgfHwgcGFydCA9PSBTbGlkZXJUaHVtYlZlcnRpY2FsUGFydCkg
ewotICAgICAgICBRU3R5bGVPcHRpb25TbGlkZXIgb3B0aW9uOwotICAgICAgICBpZiAocGFydCA9
PSBTbGlkZXJUaHVtYlZlcnRpY2FsUGFydCkKLSAgICAgICAgICAgIG9wdGlvbi5vcmllbnRhdGlv
biA9IFF0OjpWZXJ0aWNhbDsKLQotICAgICAgICBRU3R5bGUqIHFzdHlsZSA9IHFTdHlsZSgpOwot
Ci0gICAgICAgIGludCBsZW5ndGggPSBxc3R5bGUtPnBpeGVsTWV0cmljKFFTdHlsZTo6UE1fU2xp
ZGVyTGVuZ3RoLCAmb3B0aW9uKTsKLSAgICAgICAgaW50IHRoaWNrbmVzcyA9IHFzdHlsZS0+cGl4
ZWxNZXRyaWMoUVN0eWxlOjpQTV9TbGlkZXJUaGlja25lc3MsICZvcHRpb24pOwotICAgICAgICBp
ZiAob3B0aW9uLm9yaWVudGF0aW9uID09IFF0OjpWZXJ0aWNhbCkgewotICAgICAgICAgICAgc3R5
bGUtPnNldFdpZHRoKExlbmd0aCh0aGlja25lc3MsIEZpeGVkKSk7Ci0gICAgICAgICAgICBzdHls
ZS0+c2V0SGVpZ2h0KExlbmd0aChsZW5ndGgsIEZpeGVkKSk7Ci0gICAgICAgIH0gZWxzZSB7Ci0g
ICAgICAgICAgICBzdHlsZS0+c2V0V2lkdGgoTGVuZ3RoKGxlbmd0aCwgRml4ZWQpKTsKLSAgICAg
ICAgICAgIHN0eWxlLT5zZXRIZWlnaHQoTGVuZ3RoKHRoaWNrbmVzcywgRml4ZWQpKTsKLSAgICAg
ICAgfQotICAgIH0gZWxzZQotICAgICAgICBSZW5kZXJUaGVtZVF0OjphZGp1c3RTbGlkZXJUaHVt
YlNpemUoc3R5bGUsIGVsZW1lbnQpOwotfQotCi19Ci0KLS8vIHZpbTogdHM9NCBzdz00IGV0CmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L3F0L1dlYkNvcmVTdXBwb3J0L1JlbmRlclRoZW1lUVN0
eWxlLmggYi9Tb3VyY2UvV2ViS2l0L3F0L1dlYkNvcmVTdXBwb3J0L1JlbmRlclRoZW1lUVN0eWxl
LmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDJjYzk5OTMwODA0NTBmOTM5MTI3OGQ0
OTg3MWU1NzE5MjVkMGUxYWYuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAKLS0tIGEvU291cmNlL1dlYktpdC9xdC9XZWJDb3JlU3VwcG9ydC9SZW5kZXJUaGVtZVFTdHls
ZS5oCisrKyAvZGV2L251bGwKQEAgLTEsMTQ4ICswLDAgQEAKLS8qCi0gKiBUaGlzIGZpbGUgaXMg
cGFydCBvZiB0aGUgdGhlbWUgaW1wbGVtZW50YXRpb24gZm9yIGZvcm0gY29udHJvbHMgaW4gV2Vi
Q29yZS4KLSAqCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTEtMjAxMiBOb2tpYSBDb3Jwb3JhdGlvbiBh
bmQvb3IgaXRzIHN1YnNpZGlhcnkoLWllcykuCi0gKgotICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUg
c29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgotICogbW9kaWZ5IGl0IHVu
ZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKLSAqIExpY2Vu
c2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgot
ICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRl
ciB2ZXJzaW9uLgotICoKLSAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9w
ZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3
aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAqIE1FUkNIQU5UQUJJTElUWSBv
ciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCi0gKiBMaWJy
YXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSAqCi0gKiBZb3Ug
c2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1
YmxpYyBMaWNlbnNlCi0gKiBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENP
UFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bwotICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRh
dGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKLSAqIEJvc3Rvbiwg
TUEgMDIxMTAtMTMwMSwgVVNBLgotICoKLSAqLwotI2lmbmRlZiBSZW5kZXJUaGVtZVFTdHlsZV9o
Ci0jZGVmaW5lIFJlbmRlclRoZW1lUVN0eWxlX2gKLQotI2luY2x1ZGUgIlJlbmRlclRoZW1lUXQu
aCIKLQotI2luY2x1ZGUgPFFTdHlsZT4KLQotUVRfQkVHSU5fTkFNRVNQQUNFCi0jaWZuZGVmIFFU
X05PX0xJTkVFRElUCi1jbGFzcyBRTGluZUVkaXQ7Ci0jZW5kaWYKLWNsYXNzIFFQYWludGVyOwot
Y2xhc3MgUVdpZGdldDsKLVFUX0VORF9OQU1FU1BBQ0UKLQotbmFtZXNwYWNlIFdlYkNvcmUgewot
Ci1jbGFzcyBTY3JvbGxiYXJUaGVtZVFTdHlsZTsKLQotY2xhc3MgUmVuZGVyVGhlbWVRU3R5bGUg
OiBwdWJsaWMgUmVuZGVyVGhlbWVRdCB7Ci1wcml2YXRlOgotICAgIFJlbmRlclRoZW1lUVN0eWxl
KFBhZ2UqKTsKLSAgICB2aXJ0dWFsIH5SZW5kZXJUaGVtZVFTdHlsZSgpOwotCi1wdWJsaWM6Ci0g
ICAgc3RhdGljIFBhc3NSZWZQdHI8UmVuZGVyVGhlbWU+IGNyZWF0ZShQYWdlKik7Ci0KLSAgICB2
aXJ0dWFsIHZvaWQgYWRqdXN0U2xpZGVyVGh1bWJTaXplKFJlbmRlclN0eWxlKiwgRWxlbWVudCop
IGNvbnN0OwotCi0gICAgUVN0eWxlKiBxU3R5bGUoKSBjb25zdDsKLQotcHJvdGVjdGVkOgotICAg
IHZpcnR1YWwgdm9pZCBhZGp1c3RCdXR0b25TdHlsZShTdHlsZVJlc29sdmVyKiwgUmVuZGVyU3R5
bGUqLCBFbGVtZW50KikgY29uc3Q7Ci0gICAgdmlydHVhbCBib29sIHBhaW50QnV0dG9uKFJlbmRl
ck9iamVjdCosIGNvbnN0IFBhaW50SW5mbyYsIGNvbnN0IEludFJlY3QmKTsKLQotICAgIHZpcnR1
YWwgYm9vbCBwYWludFRleHRGaWVsZChSZW5kZXJPYmplY3QqLCBjb25zdCBQYWludEluZm8mLCBj
b25zdCBJbnRSZWN0Jik7Ci0KLSAgICB2aXJ0dWFsIGJvb2wgcGFpbnRUZXh0QXJlYShSZW5kZXJP
YmplY3QqLCBjb25zdCBQYWludEluZm8mLCBjb25zdCBJbnRSZWN0Jik7Ci0gICAgdmlydHVhbCB2
b2lkIGFkanVzdFRleHRBcmVhU3R5bGUoU3R5bGVSZXNvbHZlciosIFJlbmRlclN0eWxlKiwgRWxl
bWVudCopIGNvbnN0OwotCi0gICAgdmlydHVhbCBib29sIHBhaW50TWVudUxpc3QoUmVuZGVyT2Jq
ZWN0KiwgY29uc3QgUGFpbnRJbmZvJiwgY29uc3QgSW50UmVjdCYpOwotCi0gICAgdmlydHVhbCBi
b29sIHBhaW50TWVudUxpc3RCdXR0b24oUmVuZGVyT2JqZWN0KiwgY29uc3QgUGFpbnRJbmZvJiwg
Y29uc3QgSW50UmVjdCYpOwotICAgIHZpcnR1YWwgdm9pZCBhZGp1c3RNZW51TGlzdEJ1dHRvblN0
eWxlKFN0eWxlUmVzb2x2ZXIqLCBSZW5kZXJTdHlsZSosIEVsZW1lbnQqKSBjb25zdDsKLQotI2lm
IEVOQUJMRShQUk9HUkVTU19FTEVNRU5UKQotICAgIC8vIFJldHVybnMgdGhlIGR1cmF0aW9uIG9m
IHRoZSBhbmltYXRpb24gZm9yIHRoZSBwcm9ncmVzcyBiYXIuCi0gICAgdmlydHVhbCBkb3VibGUg
YW5pbWF0aW9uRHVyYXRpb25Gb3JQcm9ncmVzc0JhcihSZW5kZXJQcm9ncmVzcyopIGNvbnN0Owot
ICAgIHZpcnR1YWwgYm9vbCBwYWludFByb2dyZXNzQmFyKFJlbmRlck9iamVjdCosIGNvbnN0IFBh
aW50SW5mbyYsIGNvbnN0IEludFJlY3QmKTsKLSNlbmRpZgotCi0gICAgdmlydHVhbCBib29sIHBh
aW50U2xpZGVyVHJhY2soUmVuZGVyT2JqZWN0KiwgY29uc3QgUGFpbnRJbmZvJiwgY29uc3QgSW50
UmVjdCYpOwotICAgIHZpcnR1YWwgdm9pZCBhZGp1c3RTbGlkZXJUcmFja1N0eWxlKFN0eWxlUmVz
b2x2ZXIqLCBSZW5kZXJTdHlsZSosIEVsZW1lbnQqKSBjb25zdDsKLQotICAgIHZpcnR1YWwgYm9v
bCBwYWludFNsaWRlclRodW1iKFJlbmRlck9iamVjdCosIGNvbnN0IFBhaW50SW5mbyYsIGNvbnN0
IEludFJlY3QmKTsKLSAgICB2aXJ0dWFsIHZvaWQgYWRqdXN0U2xpZGVyVGh1bWJTdHlsZShTdHls
ZVJlc29sdmVyKiwgUmVuZGVyU3R5bGUqLCBFbGVtZW50KikgY29uc3Q7Ci0KLSAgICB2aXJ0dWFs
IGJvb2wgcGFpbnRTZWFyY2hGaWVsZChSZW5kZXJPYmplY3QqLCBjb25zdCBQYWludEluZm8mLCBj
b25zdCBJbnRSZWN0Jik7Ci0KLSAgICB2aXJ0dWFsIHZvaWQgYWRqdXN0U2VhcmNoRmllbGREZWNv
cmF0aW9uU3R5bGUoU3R5bGVSZXNvbHZlciosIFJlbmRlclN0eWxlKiwgRWxlbWVudCopIGNvbnN0
OwotICAgIHZpcnR1YWwgYm9vbCBwYWludFNlYXJjaEZpZWxkRGVjb3JhdGlvbihSZW5kZXJPYmpl
Y3QqLCBjb25zdCBQYWludEluZm8mLCBjb25zdCBJbnRSZWN0Jik7Ci0KLSAgICB2aXJ0dWFsIHZv
aWQgYWRqdXN0U2VhcmNoRmllbGRSZXN1bHRzRGVjb3JhdGlvblN0eWxlKFN0eWxlUmVzb2x2ZXIq
LCBSZW5kZXJTdHlsZSosIEVsZW1lbnQqKSBjb25zdDsKLSAgICB2aXJ0dWFsIGJvb2wgcGFpbnRT
ZWFyY2hGaWVsZFJlc3VsdHNEZWNvcmF0aW9uKFJlbmRlck9iamVjdCosIGNvbnN0IFBhaW50SW5m
byYsIGNvbnN0IEludFJlY3QmKTsKLQotI2lmbmRlZiBRVF9OT19TUElOQk9YCi0gICAgdmlydHVh
bCBib29sIHBhaW50SW5uZXJTcGluQnV0dG9uKFJlbmRlck9iamVjdCosIGNvbnN0IFBhaW50SW5m
byYsIGNvbnN0IEludFJlY3QmKTsKLSNlbmRpZgotCi1wcm90ZWN0ZWQ6Ci0gICAgdmlydHVhbCB2
b2lkIGNvbXB1dGVTaXplQmFzZWRPblN0eWxlKFJlbmRlclN0eWxlKikgY29uc3Q7Ci0KLSAgICB2
aXJ0dWFsIFFTaGFyZWRQb2ludGVyPFN0eWxlUGFpbnRlcj4gZ2V0U3R5bGVQYWludGVyKGNvbnN0
IFBhaW50SW5mbyYpOwotCi0gICAgdmlydHVhbCBRUmVjdCBpbmZsYXRlQnV0dG9uUmVjdChjb25z
dCBRUmVjdCYgb3JpZ2luYWxSZWN0KSBjb25zdDsKLQotICAgIHZpcnR1YWwgdm9pZCBzZXRQb3B1
cFBhZGRpbmcoUmVuZGVyU3R5bGUqKSBjb25zdDsKLQotICAgIHZpcnR1YWwgUVBhbGV0dGUgY29s
b3JQYWxldHRlKCkgY29uc3Q7Ci0KLXByaXZhdGU6Ci0gICAgQ29udHJvbFBhcnQgaW5pdGlhbGl6
ZUNvbW1vblFTdHlsZU9wdGlvbnMoUVN0eWxlT3B0aW9uJiwgUmVuZGVyT2JqZWN0KikgY29uc3Q7
Ci0KLSAgICB2b2lkIHNldEJ1dHRvblBhZGRpbmcoUmVuZGVyU3R5bGUqKSBjb25zdDsKLQotICAg
IGludCBmaW5kRnJhbWVMaW5lV2lkdGgoUVN0eWxlKikgY29uc3Q7Ci0KLSAgICBRU3R5bGUqIGZh
bGxiYWNrU3R5bGUoKSBjb25zdDsKLQotICAgIHZvaWQgc2V0UGFsZXR0ZUZyb21QYWdlQ2xpZW50
SWZFeGlzdHMoUVBhbGV0dGUmKSBjb25zdDsKLQotI2lmZGVmIFFfT1NfTUFDCi0gICAgaW50IG1f
YnV0dG9uRm9udFBpeGVsU2l6ZTsKLSNlbmRpZgotCi0gICAgUVN0eWxlKiBtX2ZhbGxiYWNrU3R5
bGU7Ci0jaWZuZGVmIFFUX05PX0xJTkVFRElUCi0gICAgbXV0YWJsZSBRTGluZUVkaXQqIG1fbGlu
ZUVkaXQ7Ci0jZW5kaWYKLX07Ci0KLWNsYXNzIFN0eWxlUGFpbnRlclFTdHlsZSA6IHB1YmxpYyBT
dHlsZVBhaW50ZXIgewotcHVibGljOgotICAgIGV4cGxpY2l0IFN0eWxlUGFpbnRlclFTdHlsZShS
ZW5kZXJUaGVtZVFTdHlsZSosIGNvbnN0IFBhaW50SW5mbyYpOwotICAgIGV4cGxpY2l0IFN0eWxl
UGFpbnRlclFTdHlsZShTY3JvbGxiYXJUaGVtZVFTdHlsZSosIEdyYXBoaWNzQ29udGV4dCopOwot
Ci0gICAgYm9vbCBpc1ZhbGlkKCkgY29uc3QgeyByZXR1cm4gc3R5bGUgJiYgU3R5bGVQYWludGVy
Ojppc1ZhbGlkKCk7IH0KLQotICAgIFFXaWRnZXQqIHdpZGdldDsKLSAgICBRU3R5bGUqIHN0eWxl
OwotCi0gICAgdm9pZCBkcmF3UHJpbWl0aXZlKFFTdHlsZTo6UHJpbWl0aXZlRWxlbWVudCBwZSwg
Y29uc3QgUVN0eWxlT3B0aW9uJiBvcHQpCi0gICAgeyBzdHlsZS0+ZHJhd1ByaW1pdGl2ZShwZSwg
Jm9wdCwgcGFpbnRlciwgd2lkZ2V0KTsgfQotICAgIHZvaWQgZHJhd0NvbnRyb2woUVN0eWxlOjpD
b250cm9sRWxlbWVudCBjZSwgY29uc3QgUVN0eWxlT3B0aW9uJiBvcHQpCi0gICAgeyBzdHlsZS0+
ZHJhd0NvbnRyb2woY2UsICZvcHQsIHBhaW50ZXIsIHdpZGdldCk7IH0KLSAgICB2b2lkIGRyYXdD
b21wbGV4Q29udHJvbChRU3R5bGU6OkNvbXBsZXhDb250cm9sIGNjLCBjb25zdCBRU3R5bGVPcHRp
b25Db21wbGV4JiBvcHQpCi0gICAgeyBzdHlsZS0+ZHJhd0NvbXBsZXhDb250cm9sKGNjLCAmb3B0
LCBwYWludGVyLCB3aWRnZXQpOyB9Ci0KLXByaXZhdGU6Ci0gICAgdm9pZCBpbml0KEdyYXBoaWNz
Q29udGV4dCosIFFTdHlsZSopOwotCi0gICAgUV9ESVNBQkxFX0NPUFkoU3R5bGVQYWludGVyUVN0
eWxlKQotfTsKLQotfQotCi0jZW5kaWYgLy8gUmVuZGVyVGhlbWVRU3R5bGVfaApkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYktpdC9xdC9XZWJDb3JlU3VwcG9ydC9TY3JvbGxiYXJUaGVtZVFTdHlsZS5j
cHAgYi9Tb3VyY2UvV2ViS2l0L3F0L1dlYkNvcmVTdXBwb3J0L1Njcm9sbGJhclRoZW1lUVN0eWxl
LmNwcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYjA4MjdmZWE0ZTA5MjIwZjBhYTM5
MmE3YTVkOWRjNGMzYTY2OGJlMy4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMAotLS0gYS9Tb3VyY2UvV2ViS2l0L3F0L1dlYkNvcmVTdXBwb3J0L1Njcm9sbGJhclRoZW1l
UVN0eWxlLmNwcAorKysgL2Rldi9udWxsCkBAIC0xLDI1MyArMCwwIEBACi0vKgotICogQ29weXJp
Z2h0IChDKSAyMDA3LCAyMDA4IEFwcGxlIEluYy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KLSAqIENv
cHlyaWdodCAoQykgMjAwNyBTdGFpa29zIENvbXB1dGluZyBTZXJ2aWNlcyBJbmMuIDxpbmZvQHN0
YWlrb3MubmV0PgotICogQ29weXJpZ2h0IChDKSAyMDA4IE5va2lhIENvcnBvcmF0aW9uIGFuZC9v
ciBpdHMgc3Vic2lkaWFyeSgtaWVzKQotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4g
c291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9u
LCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0g
KiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0
YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9u
cyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMg
cHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMg
UFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQotICogRVhQUkVTUyBPUiBJ
TVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKLSAq
IElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEg
UEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxM
IEFQUExFIElOQy4gT1IKLSAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1Qs
IElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAotICogRVhFTVBMQVJZLCBPUiBDT05TRVFV
RU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogUFJPQ1VS
RU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEs
IE9SCi0gKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VE
IEFORCBPTiBBTlkgVEhFT1JZCi0gKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1Qs
IFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBP
VEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotICogT0YgVEhJUyBT
T0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFH
RS4KLSAqLwotCi0jaW5jbHVkZSAiY29uZmlnLmgiCi0jaW5jbHVkZSAiU2Nyb2xsYmFyVGhlbWVR
U3R5bGUuaCIKLQotI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dC5oIgotI2luY2x1ZGUgIlBsYXRm
b3JtTW91c2VFdmVudC5oIgotI2luY2x1ZGUgIlJlbmRlclRoZW1lUVN0eWxlLmgiCi0jaW5jbHVk
ZSAiUmVuZGVyVGhlbWVRdE1vYmlsZS5oIgotI2luY2x1ZGUgIlNjcm9sbFZpZXcuaCIKLSNpbmNs
dWRlICJTY3JvbGxiYXIuaCIKLQotI2luY2x1ZGUgPFFBcHBsaWNhdGlvbj4KLSNpZmRlZiBRX1dT
X01BQwotI2luY2x1ZGUgPFFNYWNTdHlsZT4KLSNlbmRpZgotI2luY2x1ZGUgPFFNZW51PgotI2lu
Y2x1ZGUgPFFQYWludGVyPgotI2luY2x1ZGUgPFFTdHlsZT4KLSNpbmNsdWRlIDxRU3R5bGVPcHRp
b25TbGlkZXI+Ci0KLW5hbWVzcGFjZSBXZWJDb3JlIHsKLQotU2Nyb2xsYmFyVGhlbWVRU3R5bGU6
On5TY3JvbGxiYXJUaGVtZVFTdHlsZSgpCi17Ci19Ci0KLXN0YXRpYyBRU3R5bGU6OlN1YkNvbnRy
b2wgc2NQYXJ0KGNvbnN0IFNjcm9sbGJhclBhcnQmIHBhcnQpCi17Ci0gICAgc3dpdGNoIChwYXJ0
KSB7Ci0gICAgY2FzZSBOb1BhcnQ6Ci0gICAgICAgIHJldHVybiBRU3R5bGU6OlNDX05vbmU7Ci0g
ICAgY2FzZSBCYWNrQnV0dG9uU3RhcnRQYXJ0OgotICAgIGNhc2UgQmFja0J1dHRvbkVuZFBhcnQ6
Ci0gICAgICAgIHJldHVybiBRU3R5bGU6OlNDX1Njcm9sbEJhclN1YkxpbmU7Ci0gICAgY2FzZSBC
YWNrVHJhY2tQYXJ0OgotICAgICAgICByZXR1cm4gUVN0eWxlOjpTQ19TY3JvbGxCYXJTdWJQYWdl
OwotICAgIGNhc2UgVGh1bWJQYXJ0OgotICAgICAgICByZXR1cm4gUVN0eWxlOjpTQ19TY3JvbGxC
YXJTbGlkZXI7Ci0gICAgY2FzZSBGb3J3YXJkVHJhY2tQYXJ0OgotICAgICAgICByZXR1cm4gUVN0
eWxlOjpTQ19TY3JvbGxCYXJBZGRQYWdlOwotICAgIGNhc2UgRm9yd2FyZEJ1dHRvblN0YXJ0UGFy
dDoKLSAgICBjYXNlIEZvcndhcmRCdXR0b25FbmRQYXJ0OgotICAgICAgICByZXR1cm4gUVN0eWxl
OjpTQ19TY3JvbGxCYXJBZGRMaW5lOwotICAgIH0KLQotICAgIHJldHVybiBRU3R5bGU6OlNDX05v
bmU7Ci19Ci0KLXN0YXRpYyBTY3JvbGxiYXJQYXJ0IHNjcm9sbGJhclBhcnQoY29uc3QgUVN0eWxl
OjpTdWJDb250cm9sJiBzYykKLXsKLSAgICBzd2l0Y2ggKHNjKSB7Ci0gICAgY2FzZSBRU3R5bGU6
OlNDX05vbmU6Ci0gICAgICAgIHJldHVybiBOb1BhcnQ7Ci0gICAgY2FzZSBRU3R5bGU6OlNDX1Nj
cm9sbEJhclN1YkxpbmU6Ci0gICAgICAgIHJldHVybiBCYWNrQnV0dG9uU3RhcnRQYXJ0OwotICAg
IGNhc2UgUVN0eWxlOjpTQ19TY3JvbGxCYXJTdWJQYWdlOgotICAgICAgICByZXR1cm4gQmFja1Ry
YWNrUGFydDsKLSAgICBjYXNlIFFTdHlsZTo6U0NfU2Nyb2xsQmFyU2xpZGVyOgotICAgICAgICBy
ZXR1cm4gVGh1bWJQYXJ0OwotICAgIGNhc2UgUVN0eWxlOjpTQ19TY3JvbGxCYXJBZGRQYWdlOgot
ICAgICAgICByZXR1cm4gRm9yd2FyZFRyYWNrUGFydDsKLSAgICBjYXNlIFFTdHlsZTo6U0NfU2Ny
b2xsQmFyQWRkTGluZToKLSAgICAgICAgcmV0dXJuIEZvcndhcmRCdXR0b25TdGFydFBhcnQ7Ci0g
ICAgfQotICAgIHJldHVybiBOb1BhcnQ7Ci19Ci0KLXN0YXRpYyBRU3R5bGVPcHRpb25TbGlkZXIq
IHN0eWxlT3B0aW9uU2xpZGVyKFNjcm9sbGJhclRoZW1lQ2xpZW50KiBzY3JvbGxiYXIsIFFXaWRn
ZXQqIHdpZGdldCA9IDApCi17Ci0gICAgc3RhdGljIFFTdHlsZU9wdGlvblNsaWRlciBvcHQ7Ci0g
ICAgaWYgKHdpZGdldCkKLSAgICAgICAgb3B0LmluaXRGcm9tKHdpZGdldCk7Ci0gICAgZWxzZQot
ICAgICAgICBvcHQuc3RhdGUgfD0gUVN0eWxlOjpTdGF0ZV9BY3RpdmU7Ci0KLSAgICBvcHQuc3Rh
dGUgJj0gflFTdHlsZTo6U3RhdGVfSGFzRm9jdXM7Ci0KLSAgICBvcHQucmVjdCA9IHNjcm9sbGJh
ci0+ZnJhbWVSZWN0KCk7Ci0gICAgaWYgKHNjcm9sbGJhci0+ZW5hYmxlZCgpKQotICAgICAgICBv
cHQuc3RhdGUgfD0gUVN0eWxlOjpTdGF0ZV9FbmFibGVkOwotICAgIGlmIChzY3JvbGxiYXItPmNv
bnRyb2xTaXplKCkgIT0gUmVndWxhclNjcm9sbGJhcikKLSAgICAgICAgb3B0LnN0YXRlIHw9IFFT
dHlsZTo6U3RhdGVfTWluaTsKLSAgICBvcHQub3JpZW50YXRpb24gPSAoc2Nyb2xsYmFyLT5vcmll
bnRhdGlvbigpID09IFZlcnRpY2FsU2Nyb2xsYmFyKSA/IFF0OjpWZXJ0aWNhbCA6IFF0OjpIb3Jp
em9udGFsOwotCi0gICAgaWYgKHNjcm9sbGJhci0+b3JpZW50YXRpb24oKSA9PSBIb3Jpem9udGFs
U2Nyb2xsYmFyKQotICAgICAgICBvcHQuc3RhdGUgfD0gUVN0eWxlOjpTdGF0ZV9Ib3Jpem9udGFs
OwotICAgIGVsc2UKLSAgICAgICAgb3B0LnN0YXRlICY9IH5RU3R5bGU6OlN0YXRlX0hvcml6b250
YWw7Ci0KLSAgICBvcHQuc2xpZGVyVmFsdWUgPSBzY3JvbGxiYXItPnZhbHVlKCk7Ci0gICAgb3B0
LnNsaWRlclBvc2l0aW9uID0gb3B0LnNsaWRlclZhbHVlOwotICAgIG9wdC5wYWdlU3RlcCA9IHNj
cm9sbGJhci0+cGFnZVN0ZXAoKTsKLSAgICBvcHQuc2luZ2xlU3RlcCA9IHNjcm9sbGJhci0+bGlu
ZVN0ZXAoKTsKLSAgICBvcHQubWluaW11bSA9IDA7Ci0gICAgb3B0Lm1heGltdW0gPSBxTWF4KDAs
IHNjcm9sbGJhci0+bWF4aW11bSgpKTsKLSAgICBTY3JvbGxiYXJQYXJ0IHByZXNzZWRQYXJ0ID0g
c2Nyb2xsYmFyLT5wcmVzc2VkUGFydCgpOwotICAgIFNjcm9sbGJhclBhcnQgaG92ZXJlZFBhcnQg
PSBzY3JvbGxiYXItPmhvdmVyZWRQYXJ0KCk7Ci0gICAgaWYgKHByZXNzZWRQYXJ0ICE9IE5vUGFy
dCkgewotICAgICAgICBvcHQuYWN0aXZlU3ViQ29udHJvbHMgPSBzY1BhcnQoc2Nyb2xsYmFyLT5w
cmVzc2VkUGFydCgpKTsKLSAgICAgICAgaWYgKHByZXNzZWRQYXJ0ID09IEJhY2tCdXR0b25TdGFy
dFBhcnQgfHwgcHJlc3NlZFBhcnQgPT0gRm9yd2FyZEJ1dHRvblN0YXJ0UGFydAotICAgICAgICAg
ICAgfHwgcHJlc3NlZFBhcnQgPT0gQmFja0J1dHRvbkVuZFBhcnQgfHwgcHJlc3NlZFBhcnQgPT0g
Rm9yd2FyZEJ1dHRvbkVuZFBhcnQKLSAgICAgICAgICAgIHx8IHByZXNzZWRQYXJ0ID09IFRodW1i
UGFydCkKLSAgICAgICAgICAgIG9wdC5zdGF0ZSB8PSBRU3R5bGU6OlN0YXRlX1N1bmtlbjsKLSAg
ICB9IGVsc2UKLSAgICAgICAgb3B0LmFjdGl2ZVN1YkNvbnRyb2xzID0gc2NQYXJ0KGhvdmVyZWRQ
YXJ0KTsKLSAgICBpZiAoaG92ZXJlZFBhcnQgIT0gTm9QYXJ0KQotICAgICAgICBvcHQuc3RhdGUg
fD0gUVN0eWxlOjpTdGF0ZV9Nb3VzZU92ZXI7Ci0gICAgcmV0dXJuICZvcHQ7Ci19Ci0KLWJvb2wg
U2Nyb2xsYmFyVGhlbWVRU3R5bGU6OnBhaW50KFNjcm9sbGJhclRoZW1lQ2xpZW50KiBzY3JvbGxi
YXIsIEdyYXBoaWNzQ29udGV4dCogZ3JhcGhpY3NDb250ZXh0LCBjb25zdCBJbnRSZWN0JiBkaXJ0
eVJlY3QpCi17Ci0gICAgaWYgKGdyYXBoaWNzQ29udGV4dC0+dXBkYXRpbmdDb250cm9sVGludHMo
KSkgewotICAgICAgIHNjcm9sbGJhci0+aW52YWxpZGF0ZVJlY3QoZGlydHlSZWN0KTsKLSAgICAg
ICByZXR1cm4gZmFsc2U7Ci0gICAgfQotCi0gICAgU3R5bGVQYWludGVyUVN0eWxlIHAodGhpcywg
Z3JhcGhpY3NDb250ZXh0KTsKLSAgICBpZiAoIXAuaXNWYWxpZCgpKQotICAgICAgcmV0dXJuIHRy
dWU7Ci0KLSAgICBwLnBhaW50ZXItPnNhdmUoKTsKLSAgICBRU3R5bGVPcHRpb25TbGlkZXIqIG9w
dCA9IHN0eWxlT3B0aW9uU2xpZGVyKHNjcm9sbGJhciwgcC53aWRnZXQpOwotCi0gICAgcC5wYWlu
dGVyLT5zZXRDbGlwUmVjdChvcHQtPnJlY3QuaW50ZXJzZWN0ZWQoZGlydHlSZWN0KSwgUXQ6Oklu
dGVyc2VjdENsaXApOwotCi0jaWZkZWYgUV9XU19NQUMKLSAgICAvLyBGSVhNRTogV2UgYWxzbyBu
ZWVkIHRvIGNoZWNrIHRoZSB3aWRnZXQgc3R5bGUgYnV0IHRvZGF5IFNjcm9sbGJhclRoZW1lIGlz
IG5vdCBhd2FyZSBvZiB0aGUgcGFnZSBzbyB3ZQotICAgIC8vIGNhbid0IGdldCB0aGUgd2lkZ2V0
LgotICAgIGlmIChxb2JqZWN0X2Nhc3Q8UU1hY1N0eWxlKj4oc3R5bGUoKSkpCi0gICAgICAgIHAu
ZHJhd0NvbXBsZXhDb250cm9sKFFTdHlsZTo6Q0NfU2Nyb2xsQmFyLCAqb3B0KTsKLSAgICBlbHNl
Ci0jZW5kaWYKLSAgICB7Ci0gICAgICAgIC8vIFRoZSBRU3R5bGUgZXhwZWN0cyB0aGUgYmFja2dy
b3VuZCB0byBiZSBhbHJlYWR5IGZpbGxlZC4KLSAgICAgICAgcC5wYWludGVyLT5maWxsUmVjdChv
cHQtPnJlY3QsIG9wdC0+cGFsZXR0ZS5iYWNrZ3JvdW5kKCkpOwotCi0gICAgICAgIGNvbnN0IFFQ
b2ludCB0b3BMZWZ0ID0gb3B0LT5yZWN0LnRvcExlZnQoKTsKLSAgICAgICAgcC5wYWludGVyLT50
cmFuc2xhdGUodG9wTGVmdCk7Ci0gICAgICAgIG9wdC0+cmVjdC5tb3ZlVG8oUVBvaW50KDAsIDAp
KTsKLSAgICAgICAgcC5kcmF3Q29tcGxleENvbnRyb2woUVN0eWxlOjpDQ19TY3JvbGxCYXIsICpv
cHQpOwotICAgICAgICBvcHQtPnJlY3QubW92ZVRvKHRvcExlZnQpOwotICAgIH0KLSAgICBwLnBh
aW50ZXItPnJlc3RvcmUoKTsKLQotICAgIHJldHVybiB0cnVlOwotfQotCi1TY3JvbGxiYXJQYXJ0
IFNjcm9sbGJhclRoZW1lUVN0eWxlOjpoaXRUZXN0KFNjcm9sbGJhclRoZW1lQ2xpZW50KiBzY3Jv
bGxiYXIsIGNvbnN0IFBsYXRmb3JtTW91c2VFdmVudCYgZXZ0KQotewotICAgIFFTdHlsZU9wdGlv
blNsaWRlciogb3B0ID0gc3R5bGVPcHRpb25TbGlkZXIoc2Nyb2xsYmFyKTsKLSAgICBjb25zdCBR
UG9pbnQgcG9zID0gc2Nyb2xsYmFyLT5jb252ZXJ0RnJvbUNvbnRhaW5pbmdXaW5kb3coZXZ0LnBv
c2l0aW9uKCkpOwotICAgIG9wdC0+cmVjdC5tb3ZlVG8oUVBvaW50KDAsIDApKTsKLSAgICBRU3R5
bGU6OlN1YkNvbnRyb2wgc2MgPSBzdHlsZSgpLT5oaXRUZXN0Q29tcGxleENvbnRyb2woUVN0eWxl
OjpDQ19TY3JvbGxCYXIsIG9wdCwgcG9zLCAwKTsKLSAgICByZXR1cm4gc2Nyb2xsYmFyUGFydChz
Yyk7Ci19Ci0KLWJvb2wgU2Nyb2xsYmFyVGhlbWVRU3R5bGU6OnNob3VsZENlbnRlck9uVGh1bWIo
U2Nyb2xsYmFyVGhlbWVDbGllbnQqLCBjb25zdCBQbGF0Zm9ybU1vdXNlRXZlbnQmIGV2dCkKLXsK
LSAgICAvLyBNaWRkbGUgY2xpY2sgY2VudGVycyBzbGlkZXIgdGh1bWIgKGlmIHN1cHBvcnRlZCku
Ci0gICAgcmV0dXJuIHN0eWxlKCktPnN0eWxlSGludChRU3R5bGU6OlNIX1Njcm9sbEJhcl9NaWRk
bGVDbGlja0Fic29sdXRlUG9zaXRpb24pICYmIGV2dC5idXR0b24oKSA9PSBNaWRkbGVCdXR0b247
Ci19Ci0KLXZvaWQgU2Nyb2xsYmFyVGhlbWVRU3R5bGU6OmludmFsaWRhdGVQYXJ0KFNjcm9sbGJh
clRoZW1lQ2xpZW50KiBzY3JvbGxiYXIsIFNjcm9sbGJhclBhcnQpCi17Ci0gICAgLy8gRklYTUU6
IERvIG1vcmUgcHJlY2lzZSBpbnZhbGlkYXRpb24uCi0gICAgc2Nyb2xsYmFyLT5pbnZhbGlkYXRl
KCk7Ci19Ci0KLWludCBTY3JvbGxiYXJUaGVtZVFTdHlsZTo6c2Nyb2xsYmFyVGhpY2tuZXNzKFNj
cm9sbGJhckNvbnRyb2xTaXplIGNvbnRyb2xTaXplKQotewotICAgIFFTdHlsZU9wdGlvblNsaWRl
ciBvOwotICAgIG8ub3JpZW50YXRpb24gPSBRdDo6VmVydGljYWw7Ci0gICAgby5zdGF0ZSAmPSB+
UVN0eWxlOjpTdGF0ZV9Ib3Jpem9udGFsOwotICAgIGlmIChjb250cm9sU2l6ZSAhPSBSZWd1bGFy
U2Nyb2xsYmFyKQotICAgICAgICBvLnN0YXRlIHw9IFFTdHlsZTo6U3RhdGVfTWluaTsKLSAgICBy
ZXR1cm4gc3R5bGUoKS0+cGl4ZWxNZXRyaWMoUVN0eWxlOjpQTV9TY3JvbGxCYXJFeHRlbnQsICZv
LCAwKTsKLX0KLQotaW50IFNjcm9sbGJhclRoZW1lUVN0eWxlOjp0aHVtYlBvc2l0aW9uKFNjcm9s
bGJhclRoZW1lQ2xpZW50KiBzY3JvbGxiYXIpCi17Ci0gICAgaWYgKHNjcm9sbGJhci0+ZW5hYmxl
ZCgpKSB7Ci0gICAgICAgIGZsb2F0IHBvcyA9IChmbG9hdClzY3JvbGxiYXItPmN1cnJlbnRQb3Mo
KSAqICh0cmFja0xlbmd0aChzY3JvbGxiYXIpIC0gdGh1bWJMZW5ndGgoc2Nyb2xsYmFyKSkgLyBz
Y3JvbGxiYXItPm1heGltdW0oKTsKLSAgICAgICAgcmV0dXJuIChwb3MgPCAxICYmIHBvcyA+IDAp
ID8gMSA6IHBvczsKLSAgICB9Ci0gICAgcmV0dXJuIDA7Ci19Ci0KLWludCBTY3JvbGxiYXJUaGVt
ZVFTdHlsZTo6dGh1bWJMZW5ndGgoU2Nyb2xsYmFyVGhlbWVDbGllbnQqIHNjcm9sbGJhcikKLXsK
LSAgICBRU3R5bGVPcHRpb25TbGlkZXIqIG9wdCA9IHN0eWxlT3B0aW9uU2xpZGVyKHNjcm9sbGJh
cik7Ci0gICAgSW50UmVjdCB0aHVtYiA9IHN0eWxlKCktPnN1YkNvbnRyb2xSZWN0KFFTdHlsZTo6
Q0NfU2Nyb2xsQmFyLCBvcHQsIFFTdHlsZTo6U0NfU2Nyb2xsQmFyU2xpZGVyLCAwKTsKLSAgICBy
ZXR1cm4gc2Nyb2xsYmFyLT5vcmllbnRhdGlvbigpID09IEhvcml6b250YWxTY3JvbGxiYXIgPyB0
aHVtYi53aWR0aCgpIDogdGh1bWIuaGVpZ2h0KCk7Ci19Ci0KLWludCBTY3JvbGxiYXJUaGVtZVFT
dHlsZTo6dHJhY2tQb3NpdGlvbihTY3JvbGxiYXJUaGVtZUNsaWVudCogc2Nyb2xsYmFyKQotewot
ICAgIFFTdHlsZU9wdGlvblNsaWRlciogb3B0ID0gc3R5bGVPcHRpb25TbGlkZXIoc2Nyb2xsYmFy
KTsKLSAgICBJbnRSZWN0IHRyYWNrID0gc3R5bGUoKS0+c3ViQ29udHJvbFJlY3QoUVN0eWxlOjpD
Q19TY3JvbGxCYXIsIG9wdCwgUVN0eWxlOjpTQ19TY3JvbGxCYXJHcm9vdmUsIDApOwotICAgIHJl
dHVybiBzY3JvbGxiYXItPm9yaWVudGF0aW9uKCkgPT0gSG9yaXpvbnRhbFNjcm9sbGJhciA/IHRy
YWNrLngoKSAtIHNjcm9sbGJhci0+eCgpIDogdHJhY2sueSgpIC0gc2Nyb2xsYmFyLT55KCk7Ci19
Ci0KLWludCBTY3JvbGxiYXJUaGVtZVFTdHlsZTo6dHJhY2tMZW5ndGgoU2Nyb2xsYmFyVGhlbWVD
bGllbnQqIHNjcm9sbGJhcikKLXsKLSAgICBRU3R5bGVPcHRpb25TbGlkZXIqIG9wdCA9IHN0eWxl
T3B0aW9uU2xpZGVyKHNjcm9sbGJhcik7Ci0gICAgSW50UmVjdCB0cmFjayA9IHN0eWxlKCktPnN1
YkNvbnRyb2xSZWN0KFFTdHlsZTo6Q0NfU2Nyb2xsQmFyLCBvcHQsIFFTdHlsZTo6U0NfU2Nyb2xs
QmFyR3Jvb3ZlLCAwKTsKLSAgICByZXR1cm4gc2Nyb2xsYmFyLT5vcmllbnRhdGlvbigpID09IEhv
cml6b250YWxTY3JvbGxiYXIgPyB0cmFjay53aWR0aCgpIDogdHJhY2suaGVpZ2h0KCk7Ci19Ci0K
LXZvaWQgU2Nyb2xsYmFyVGhlbWVRU3R5bGU6OnBhaW50U2Nyb2xsQ29ybmVyKFNjcm9sbFZpZXcq
LCBHcmFwaGljc0NvbnRleHQqIGNvbnRleHQsIGNvbnN0IEludFJlY3QmIHJlY3QpCi17Ci0gICAg
U3R5bGVQYWludGVyUVN0eWxlIHAodGhpcywgY29udGV4dCk7Ci0gICAgaWYgKCFwLmlzVmFsaWQo
KSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgUVN0eWxlT3B0aW9uIG9wdGlvbjsKLSAgICBvcHRp
b24ucmVjdCA9IHJlY3Q7Ci0gICAgcC5kcmF3UHJpbWl0aXZlKFFTdHlsZTo6UEVfUGFuZWxTY3Jv
bGxBcmVhQ29ybmVyLCBvcHRpb24pOwotfQotCi1RU3R5bGUqIFNjcm9sbGJhclRoZW1lUVN0eWxl
OjpzdHlsZSgpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIFFBcHBsaWNhdGlvbjo6c3R5bGUoKTsKLX0K
LQotfQotCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L3F0L1dlYkNvcmVTdXBwb3J0L1Njcm9s
bGJhclRoZW1lUVN0eWxlLmggYi9Tb3VyY2UvV2ViS2l0L3F0L1dlYkNvcmVTdXBwb3J0L1Njcm9s
bGJhclRoZW1lUVN0eWxlLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDI1MzdiOWFl
NDRiNDU4ZGQ3MDIyNWEwNWUwM2RiYTFjNzJhM2RkZTAuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1dlYktpdC9xdC9XZWJDb3JlU3VwcG9ydC9T
Y3JvbGxiYXJUaGVtZVFTdHlsZS5oCisrKyAvZGV2L251bGwKQEAgLTEsNjMgKzAsMCBAQAotLyoK
LSAqIENvcHlyaWdodCAoQykgMjAwOCBBcHBsZSBJbmMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCi0g
KgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywg
d2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQg
dGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3Ry
aWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAot
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVw
cm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3Vt
ZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmli
dXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBg
QVMgSVMnJyBBTkQgQU5ZCi0gKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQotICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1F
UkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFS
RSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgotICogQ09OVFJJ
QlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQ
RUNJQUwsCi0gKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RT
IE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKLSAqIFBST0ZJVFM7IE9SIEJVU0lO
RVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKLSAqIE9G
IExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9S
VAotICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkg
V0FZIE9VVCBPRiBUSEUgVVNFCi0gKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQg
T0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLSNpZm5kZWYgU2Nyb2xs
YmFyVGhlbWVRU3R5bGVfaAotI2RlZmluZSBTY3JvbGxiYXJUaGVtZVFTdHlsZV9oCi0KLSNpbmNs
dWRlICJTY3JvbGxiYXJUaGVtZS5oIgotCi0jaW5jbHVkZSA8UXRDb3JlL3FnbG9iYWwuaD4KLQot
UVRfQkVHSU5fTkFNRVNQQUNFCi1jbGFzcyBRU3R5bGU7Ci1RVF9FTkRfTkFNRVNQQUNFCi0KLW5h
bWVzcGFjZSBXZWJDb3JlIHsKLQotY2xhc3MgU2Nyb2xsYmFyVGhlbWVRU3R5bGUgOiBwdWJsaWMg
U2Nyb2xsYmFyVGhlbWUgewotcHVibGljOgotICAgIHZpcnR1YWwgflNjcm9sbGJhclRoZW1lUVN0
eWxlKCk7Ci0KLSAgICB2aXJ0dWFsIGJvb2wgcGFpbnQoU2Nyb2xsYmFyVGhlbWVDbGllbnQqLCBH
cmFwaGljc0NvbnRleHQqLCBjb25zdCBJbnRSZWN0JiBkaXJ0eVJlY3QpOwotICAgIHZpcnR1YWwg
dm9pZCBwYWludFNjcm9sbENvcm5lcihTY3JvbGxWaWV3KiwgR3JhcGhpY3NDb250ZXh0KiwgY29u
c3QgSW50UmVjdCYgY29ybmVyUmVjdCk7Ci0KLSAgICB2aXJ0dWFsIFNjcm9sbGJhclBhcnQgaGl0
VGVzdChTY3JvbGxiYXJUaGVtZUNsaWVudCosIGNvbnN0IFBsYXRmb3JtTW91c2VFdmVudCYpOwot
Ci0gICAgdmlydHVhbCBib29sIHNob3VsZENlbnRlck9uVGh1bWIoU2Nyb2xsYmFyVGhlbWVDbGll
bnQqLCBjb25zdCBQbGF0Zm9ybU1vdXNlRXZlbnQmKTsKLQotICAgIHZpcnR1YWwgdm9pZCBpbnZh
bGlkYXRlUGFydChTY3JvbGxiYXJUaGVtZUNsaWVudCosIFNjcm9sbGJhclBhcnQpOwotCi0gICAg
dmlydHVhbCBpbnQgdGh1bWJQb3NpdGlvbihTY3JvbGxiYXJUaGVtZUNsaWVudCopOwotICAgIHZp
cnR1YWwgaW50IHRodW1iTGVuZ3RoKFNjcm9sbGJhclRoZW1lQ2xpZW50Kik7Ci0gICAgdmlydHVh
bCBpbnQgdHJhY2tQb3NpdGlvbihTY3JvbGxiYXJUaGVtZUNsaWVudCopOwotICAgIHZpcnR1YWwg
aW50IHRyYWNrTGVuZ3RoKFNjcm9sbGJhclRoZW1lQ2xpZW50Kik7Ci0KLSAgICB2aXJ0dWFsIGlu
dCBzY3JvbGxiYXJUaGlja25lc3MoU2Nyb2xsYmFyQ29udHJvbFNpemUgPSBSZWd1bGFyU2Nyb2xs
YmFyKTsKLQotICAgIFFTdHlsZSogc3R5bGUoKSBjb25zdDsKLX07Ci0KLX0KLSNlbmRpZgo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>166899</attachid>
            <date>2012-10-03 08:21:39 -0700</date>
            <delta_ts>2012-10-03 08:31:01 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-98268-20121003172347.patch</filename>
            <type>text/plain</type>
            <size>132619</size>
            <attacher name="Simon Hausmann">hausmann</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTI5NjEwCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggM2E3OWM4MDNhOWM2MWIy
YzFkMTZjZmI3ZmU1YWJlMWMyNDQ0NDhmMC4uYzU4YTEyODJlYzU3YjgzMGFmOWIxYjNkZWY2Njc4
MWJkYTU5MzQ2YyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDk4IEBACisyMDEyLTEwLTAzICBTaW1v
biBIYXVzbWFubiAgPHNpbW9uLmhhdXNtYW5uQGRpZ2lhLmNvbT4KKworICAgICAgICBbUXRdIE1h
a2UgUmVuZGVyVGhlbWVRU3R5bGUvU2Nyb2xsYmFyVGhlbWVRU3R5bGUgY29tcGlsZSB3aXRob3V0
IFFTdHlsZS9RdFdpZGdldHMKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19i
dWcuY2dpP2lkPTk4MjY4CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisK
KyAgICAgICAgRXh0cmFjdGVkIFFTdHlsZS9RV2lkZ2V0IHJlbGF0ZWQgY29kZSBpbnRvIGEgUVdl
YlN0eWxlIGNsYXNzIHRoYXQgaW1wbGVtZW50cyB0aGUgUVN0eWxlSW50ZXJmYWNlIGludGVyZmFj
ZS4KKworICAgICAgICAqIFRhcmdldC5wcmk6CisgICAgICAgICogcGxhdGZvcm0vcXQvUVN0eWxl
SW50ZXJmYWNlLmNwcDogQWRkZWQuCisgICAgICAgIChXZWJDb3JlKToKKyAgICAgICAgKFdlYkNv
cmU6OlFTdHlsZUludGVyZmFjZTo6c3R5bGVGb3JQYWdlKToKKyAgICAgICAgKiBwbGF0Zm9ybS9x
dC9RU3R5bGVJbnRlcmZhY2UuaDogQWRkZWQuCisgICAgICAgIChXZWJDb3JlKToKKyAgICAgICAg
KFFTdHlsZUludGVyZmFjZSk6CisgICAgICAgIChXZWJDb3JlOjpRU3R5bGVJbnRlcmZhY2U6On5R
U3R5bGVJbnRlcmZhY2UpOgorICAgICAgICAoV2ViQ29yZTo6UVN0eWxlSW50ZXJmYWNlT3B0aW9u
OjpRU3R5bGVJbnRlcmZhY2VPcHRpb24pOgorICAgICAgICAoUVN0eWxlSW50ZXJmYWNlT3B0aW9u
KToKKyAgICAgICAgKiBwbGF0Zm9ybS9xdC9SZW5kZXJUaGVtZVFTdHlsZS5jcHA6IFJlbmFtZWQg
ZnJvbSBTb3VyY2UvV2ViS2l0L3F0L1dlYkNvcmVTdXBwb3J0L1JlbmRlclRoZW1lUVN0eWxlLmNw
cC4KKyAgICAgICAgKFdlYkNvcmUpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGhlbWVRU3R5
bGU6OmdldFN0eWxlUGFpbnRlcik6CisgICAgICAgIChXZWJDb3JlOjpTdHlsZVBhaW50ZXJRU3R5
bGU6OlN0eWxlUGFpbnRlclFTdHlsZSk6CisgICAgICAgIChXZWJDb3JlOjpTdHlsZVBhaW50ZXJR
U3R5bGU6OmluaXQpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGhlbWVRU3R5bGU6OmNyZWF0
ZSk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJUaGVtZVFTdHlsZTo6c2V0U3R5bGVGYWN0b3J5
RnVuY3Rpb24pOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGhlbWVRU3R5bGU6OnN0eWxlRmFj
dG9yeSk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJUaGVtZVFTdHlsZTo6UmVuZGVyVGhlbWVR
U3R5bGUpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGhlbWVRU3R5bGU6On5SZW5kZXJUaGVt
ZVFTdHlsZSk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJUaGVtZVFTdHlsZTo6c2V0UGFsZXR0
ZUZyb21QYWdlQ2xpZW50SWZFeGlzdHMpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGhlbWVR
U3R5bGU6OmluZmxhdGVCdXR0b25SZWN0KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRoZW1l
UVN0eWxlOjpjb21wdXRlU2l6ZUJhc2VkT25TdHlsZSk6CisgICAgICAgIChXZWJDb3JlOjpSZW5k
ZXJUaGVtZVFTdHlsZTo6YWRqdXN0QnV0dG9uU3R5bGUpOgorICAgICAgICAoV2ViQ29yZTo6UmVu
ZGVyVGhlbWVRU3R5bGU6OnNldEJ1dHRvblBhZGRpbmcpOgorICAgICAgICAoV2ViQ29yZTo6UmVu
ZGVyVGhlbWVRU3R5bGU6OnBhaW50QnV0dG9uKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRo
ZW1lUVN0eWxlOjpwYWludFRleHRGaWVsZCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJUaGVt
ZVFTdHlsZTo6YWRqdXN0VGV4dEFyZWFTdHlsZSk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJU
aGVtZVFTdHlsZTo6cGFpbnRUZXh0QXJlYSk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJUaGVt
ZVFTdHlsZTo6c2V0UG9wdXBQYWRkaW5nKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRoZW1l
UVN0eWxlOjpjb2xvclBhbGV0dGUpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGhlbWVRU3R5
bGU6OnBhaW50TWVudUxpc3QpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGhlbWVRU3R5bGU6
OmFkanVzdE1lbnVMaXN0QnV0dG9uU3R5bGUpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGhl
bWVRU3R5bGU6OnBhaW50TWVudUxpc3RCdXR0b24pOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVy
VGhlbWVRU3R5bGU6OmFuaW1hdGlvbkR1cmF0aW9uRm9yUHJvZ3Jlc3NCYXIpOgorICAgICAgICAo
V2ViQ29yZTo6UmVuZGVyVGhlbWVRU3R5bGU6OnBhaW50UHJvZ3Jlc3NCYXIpOgorICAgICAgICAo
V2ViQ29yZTo6UmVuZGVyVGhlbWVRU3R5bGU6OnBhaW50U2xpZGVyVHJhY2spOgorICAgICAgICAo
V2ViQ29yZTo6UmVuZGVyVGhlbWVRU3R5bGU6OmFkanVzdFNsaWRlclRyYWNrU3R5bGUpOgorICAg
ICAgICAoV2ViQ29yZTo6UmVuZGVyVGhlbWVRU3R5bGU6OnBhaW50U2xpZGVyVGh1bWIpOgorICAg
ICAgICAoV2ViQ29yZTo6UmVuZGVyVGhlbWVRU3R5bGU6OmFkanVzdFNsaWRlclRodW1iU3R5bGUp
OgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGhlbWVRU3R5bGU6OnBhaW50U2VhcmNoRmllbGQp
OgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGhlbWVRU3R5bGU6OmFkanVzdFNlYXJjaEZpZWxk
RGVjb3JhdGlvblN0eWxlKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRoZW1lUVN0eWxlOjpw
YWludFNlYXJjaEZpZWxkRGVjb3JhdGlvbik6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJUaGVt
ZVFTdHlsZTo6YWRqdXN0U2VhcmNoRmllbGRSZXN1bHRzRGVjb3JhdGlvblN0eWxlKToKKyAgICAg
ICAgKFdlYkNvcmU6OlJlbmRlclRoZW1lUVN0eWxlOjpwYWludFNlYXJjaEZpZWxkUmVzdWx0c0Rl
Y29yYXRpb24pOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGhlbWVRU3R5bGU6OnBhaW50SW5u
ZXJTcGluQnV0dG9uKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRoZW1lUVN0eWxlOjppbml0
aWFsaXplQ29tbW9uUVN0eWxlT3B0aW9ucyk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJUaGVt
ZVFTdHlsZTo6YWRqdXN0U2xpZGVyVGh1bWJTaXplKToKKyAgICAgICAgKiBwbGF0Zm9ybS9xdC9S
ZW5kZXJUaGVtZVFTdHlsZS5oOiBSZW5hbWVkIGZyb20gU291cmNlL1dlYktpdC9xdC9XZWJDb3Jl
U3VwcG9ydC9SZW5kZXJUaGVtZVFTdHlsZS5oLgorICAgICAgICAoV2ViQ29yZSk6CisgICAgICAg
IChSZW5kZXJUaGVtZVFTdHlsZSk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJUaGVtZVFTdHls
ZTo6c3R5bGVJbnRlcmZhY2UpOgorICAgICAgICAoU3R5bGVQYWludGVyUVN0eWxlKToKKyAgICAg
ICAgKFdlYkNvcmU6OlN0eWxlUGFpbnRlclFTdHlsZTo6aXNWYWxpZCk6CisgICAgICAgIChXZWJD
b3JlOjpTdHlsZVBhaW50ZXJRU3R5bGU6OnBhaW50QnV0dG9uKToKKyAgICAgICAgKFdlYkNvcmU6
OlN0eWxlUGFpbnRlclFTdHlsZTo6cGFpbnRUZXh0RmllbGQpOgorICAgICAgICAoV2ViQ29yZTo6
U3R5bGVQYWludGVyUVN0eWxlOjpwYWludENvbWJvQm94KToKKyAgICAgICAgKFdlYkNvcmU6OlN0
eWxlUGFpbnRlclFTdHlsZTo6cGFpbnRDb21ib0JveEFycm93KToKKyAgICAgICAgKFdlYkNvcmU6
OlN0eWxlUGFpbnRlclFTdHlsZTo6cGFpbnRTbGlkZXJUcmFjayk6CisgICAgICAgIChXZWJDb3Jl
OjpTdHlsZVBhaW50ZXJRU3R5bGU6OnBhaW50U2xpZGVyVGh1bWIpOgorICAgICAgICAoV2ViQ29y
ZTo6U3R5bGVQYWludGVyUVN0eWxlOjpwYWludElubmVyU3BpbkJ1dHRvbik6CisgICAgICAgIChX
ZWJDb3JlOjpTdHlsZVBhaW50ZXJRU3R5bGU6OnBhaW50UHJvZ3Jlc3NCYXIpOgorICAgICAgICAo
V2ViQ29yZTo6U3R5bGVQYWludGVyUVN0eWxlOjpwYWludFNjcm9sbENvcm5lcik6CisgICAgICAg
IChXZWJDb3JlOjpTdHlsZVBhaW50ZXJRU3R5bGU6OnBhaW50U2Nyb2xsQmFyKToKKyAgICAgICAg
KiBwbGF0Zm9ybS9xdC9TY3JvbGxiYXJUaGVtZVFTdHlsZS5jcHA6IFJlbmFtZWQgZnJvbSBTb3Vy
Y2UvV2ViS2l0L3F0L1dlYkNvcmVTdXBwb3J0L1Njcm9sbGJhclRoZW1lUVN0eWxlLmNwcC4KKyAg
ICAgICAgKFdlYkNvcmUpOgorICAgICAgICAoV2ViQ29yZTo6U2Nyb2xsYmFyVGhlbWVRU3R5bGU6
OlNjcm9sbGJhclRoZW1lUVN0eWxlKToKKyAgICAgICAgKFdlYkNvcmU6OlNjcm9sbGJhclRoZW1l
UVN0eWxlOjp+U2Nyb2xsYmFyVGhlbWVRU3R5bGUpOgorICAgICAgICAoV2ViQ29yZTo6c2NQYXJ0
KToKKyAgICAgICAgKFdlYkNvcmU6OnNjcm9sbGJhclBhcnQpOgorICAgICAgICAoV2ViQ29yZTo6
aW5pdFNsaWRlclN0eWxlT3B0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OlNjcm9sbGJhclRoZW1l
UVN0eWxlOjpwYWludCk6CisgICAgICAgIChXZWJDb3JlOjpTY3JvbGxiYXJUaGVtZVFTdHlsZTo6
aGl0VGVzdCk6CisgICAgICAgIChXZWJDb3JlOjpTY3JvbGxiYXJUaGVtZVFTdHlsZTo6c2hvdWxk
Q2VudGVyT25UaHVtYik6CisgICAgICAgIChXZWJDb3JlOjpTY3JvbGxiYXJUaGVtZVFTdHlsZTo6
aW52YWxpZGF0ZVBhcnQpOgorICAgICAgICAoV2ViQ29yZTo6U2Nyb2xsYmFyVGhlbWVRU3R5bGU6
OnNjcm9sbGJhclRoaWNrbmVzcyk6CisgICAgICAgIChXZWJDb3JlOjpTY3JvbGxiYXJUaGVtZVFT
dHlsZTo6dGh1bWJQb3NpdGlvbik6CisgICAgICAgIChXZWJDb3JlOjpTY3JvbGxiYXJUaGVtZVFT
dHlsZTo6dGh1bWJMZW5ndGgpOgorICAgICAgICAoV2ViQ29yZTo6U2Nyb2xsYmFyVGhlbWVRU3R5
bGU6OnRyYWNrUG9zaXRpb24pOgorICAgICAgICAoV2ViQ29yZTo6U2Nyb2xsYmFyVGhlbWVRU3R5
bGU6OnRyYWNrTGVuZ3RoKToKKyAgICAgICAgKFdlYkNvcmU6OlNjcm9sbGJhclRoZW1lUVN0eWxl
OjpwYWludFNjcm9sbENvcm5lcik6CisgICAgICAgICogcGxhdGZvcm0vcXQvU2Nyb2xsYmFyVGhl
bWVRU3R5bGUuaDogUmVuYW1lZCBmcm9tIFNvdXJjZS9XZWJLaXQvcXQvV2ViQ29yZVN1cHBvcnQv
U2Nyb2xsYmFyVGhlbWVRU3R5bGUuaC4KKyAgICAgICAgKFdlYkNvcmUpOgorICAgICAgICAoU2Ny
b2xsYmFyVGhlbWVRU3R5bGUpOgorICAgICAgICAoV2ViQ29yZTo6U2Nyb2xsYmFyVGhlbWVRU3R5
bGU6OnN0eWxlSW50ZXJmYWNlKToKKwogMjAxMi0wOS0yNiAgWmFuIERvYmVyc2VrICA8emFuZG9i
ZXJzZWtAZ21haWwuY29tPgogCiAgICAgICAgIFtHVEtdIEVuYWJsZSBzb21lIG9mIHRoZSB1bnN0
YWJsZSBDU1MgZmVhdHVyZXMKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nIGIv
U291cmNlL1dlYktpdC9DaGFuZ2VMb2cKaW5kZXggYTA5ZThkZjBkYzdmN2IxYjcwNTY4OTIwNTVm
MmI0ZTk1Y2FiZWFkZi4uYTU2NTg3ZmI0NjZhOTJiYWQ1N2M0ZjhlOTZiNGYzYzI5MWNjMjBkYSAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYktpdC9D
aGFuZ2VMb2cKQEAgLTEsMyArMSwxNCBAQAorMjAxMi0xMC0wMyAgU2ltb24gSGF1c21hbm4gIDxz
aW1vbi5oYXVzbWFubkBkaWdpYS5jb20+CisKKyAgICAgICAgW1F0XSBNYWtlIFJlbmRlclRoZW1l
UVN0eWxlL1Njcm9sbGJhclRoZW1lUVN0eWxlIGNvbXBpbGUgd2l0aG91dCBRU3R5bGUvUXRXaWRn
ZXRzCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD05ODI2
OAorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIEV4dHJh
Y3RlZCBRU3R5bGUvUVdpZGdldCByZWxhdGVkIGNvZGUgaW50byBhIFFXZWJTdHlsZSBjbGFzcyB0
aGF0IGltcGxlbWVudHMgdGhlIFFTdHlsZUludGVyZmFjZSBpbnRlcmZhY2UuCisKKyAgICAgICAg
KiBXZWJLaXQxLnBybzoKKwogMjAxMi0wOS0yNCAgQXJ2aWQgTmlsc3NvbiAgPGFuaWxzc29uQHJp
bS5jb20+CiAKICAgICAgICAgW0JsYWNrQmVycnldIEFkZCBjb29raWUgZGF0YWJhc2UgQVBJCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L3F0L0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJLaXQvcXQv
Q2hhbmdlTG9nCmluZGV4IDYxMmI4NjdkMjAxNTNiNGIyOTkxMWE1YjU3MTExN2U2ZWVmNmNmMzYu
LjQ3MTM4ODg4N2M0MjljNTEwMGE3MTk2ZmFkMGQ5YWMzY2Q3YzEzYWYgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJLaXQvcXQvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XZWJLaXQvcXQvQ2hhbmdlTG9n
CkBAIC0xLDMgKzEsNTggQEAKKzIwMTItMTAtMDMgIFNpbW9uIEhhdXNtYW5uICA8c2ltb24uaGF1
c21hbm5AZGlnaWEuY29tPgorCisgICAgICAgIFtRdF0gTWFrZSBSZW5kZXJUaGVtZVFTdHlsZS9T
Y3JvbGxiYXJUaGVtZVFTdHlsZSBjb21waWxlIHdpdGhvdXQgUVN0eWxlL1F0V2lkZ2V0cworICAg
ICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9OTgyNjgKKworICAg
ICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBFeHRyYWN0ZWQgUVN0
eWxlL1FXaWRnZXQgcmVsYXRlZCBjb2RlIGludG8gYSBRV2ViU3R5bGUgY2xhc3MgdGhhdCBpbXBs
ZW1lbnRzIHRoZSBRU3R5bGVJbnRlcmZhY2UgaW50ZXJmYWNlLgorCisgICAgICAgICogV2ViQ29y
ZVN1cHBvcnQvSW5pdFdlYkNvcmVRdC5jcHA6CisgICAgICAgIChXZWJDb3JlOjppbml0aWFsaXpl
V2ViQ29yZVF0KToKKyAgICAgICAgKiBXZWJDb3JlU3VwcG9ydC9RV2ViU3R5bGUuY3BwOiBBZGRl
ZC4KKyAgICAgICAgKFdlYktpdCk6CisgICAgICAgIChXZWJLaXQ6OmNvbnZlcnRUb1FTdHlsZVN0
YXRlKToKKyAgICAgICAgKFdlYktpdDo6Y29udmVydFRvUVN0eWxlU3ViQ29udHJvbCk6CisgICAg
ICAgIChXZWJLaXQ6OmluaXRHZW5lcmljU3R5bGVPcHRpb24pOgorICAgICAgICAoV2ViS2l0Ojpp
bml0U3BlY2lmaWNTdHlsZU9wdGlvbik6CisgICAgICAgIChNYXBwZWRTdHlsZU9wdGlvbik6Cisg
ICAgICAgIChXZWJLaXQ6Ok1hcHBlZFN0eWxlT3B0aW9uOjpNYXBwZWRTdHlsZU9wdGlvbik6Cisg
ICAgICAgIChXZWJLaXQ6OmNvbnZlcnRQaXhlbE1ldHJpYyk6CisgICAgICAgIChXZWJLaXQ6OmNv
bnZlcnRUb1FTdHlsZUludGVyZmFjZVN1YkNvbnRyb2wpOgorICAgICAgICAoV2ViS2l0OjpRV2Vi
U3R5bGU6OlFXZWJTdHlsZSk6CisgICAgICAgIChXZWJLaXQ6OlFXZWJTdHlsZTo6flFXZWJTdHls
ZSk6CisgICAgICAgIChXZWJLaXQ6OlFXZWJTdHlsZTo6YnV0dG9uU3ViRWxlbWVudFJlY3QpOgor
ICAgICAgICAoV2ViS2l0OjpRV2ViU3R5bGU6OmZpbmRGcmFtZUxpbmVXaWR0aCk6CisgICAgICAg
IChXZWJLaXQ6OlFXZWJTdHlsZTo6c2ltcGxlUGl4ZWxNZXRyaWMpOgorICAgICAgICAoV2ViS2l0
OjpRV2ViU3R5bGU6OmJ1dHRvbk1hcmdpbik6CisgICAgICAgIChXZWJLaXQ6OlFXZWJTdHlsZTo6
c2xpZGVyTGVuZ3RoKToKKyAgICAgICAgKFdlYktpdDo6UVdlYlN0eWxlOjpzbGlkZXJUaGlja25l
c3MpOgorICAgICAgICAoV2ViS2l0OjpRV2ViU3R5bGU6OnByb2dyZXNzQmFyQ2h1bmtXaWR0aCk6
CisgICAgICAgIChXZWJLaXQ6OlFXZWJTdHlsZTo6Z2V0QnV0dG9uTWV0cmljcyk6CisgICAgICAg
IChXZWJLaXQ6OlFXZWJTdHlsZTo6c2l6ZUZyb21Db250ZW50cyk6CisgICAgICAgIChXZWJLaXQ6
OlFXZWJTdHlsZTo6cGFpbnRCdXR0b24pOgorICAgICAgICAoV2ViS2l0OjpRV2ViU3R5bGU6OnBh
aW50VGV4dEZpZWxkKToKKyAgICAgICAgKFdlYktpdDo6UVdlYlN0eWxlOjpwYWludENvbWJvQm94
KToKKyAgICAgICAgKFdlYktpdDo6UVdlYlN0eWxlOjpwYWludENvbWJvQm94QXJyb3cpOgorICAg
ICAgICAoV2ViS2l0OjpRV2ViU3R5bGU6OnBhaW50U2xpZGVyVHJhY2spOgorICAgICAgICAoV2Vi
S2l0OjpRV2ViU3R5bGU6OnBhaW50U2xpZGVyVGh1bWIpOgorICAgICAgICAoV2ViS2l0OjpRV2Vi
U3R5bGU6OnBhaW50SW5uZXJTcGluQnV0dG9uKToKKyAgICAgICAgKFdlYktpdDo6UVdlYlN0eWxl
OjpwYWludFByb2dyZXNzQmFyKToKKyAgICAgICAgKFdlYktpdDo6UVdlYlN0eWxlOjpzY3JvbGxC
YXJFeHRlbnQpOgorICAgICAgICAoV2ViS2l0OjpRV2ViU3R5bGU6OnNjcm9sbEJhck1pZGRsZUNs
aWNrQWJzb2x1dGVQb3NpdGlvblN0eWxlSGludCk6CisgICAgICAgIChXZWJLaXQ6OlFXZWJTdHls
ZTo6cGFpbnRTY3JvbGxDb3JuZXIpOgorICAgICAgICAoV2ViS2l0OjpRV2ViU3R5bGU6OmhpdFRl
c3RTY3JvbGxCYXIpOgorICAgICAgICAoV2ViS2l0OjpRV2ViU3R5bGU6OnNjcm9sbEJhclN1YkNv
bnRyb2xSZWN0KToKKyAgICAgICAgKFdlYktpdDo6UVdlYlN0eWxlOjpwYWludFNjcm9sbEJhcik6
CisgICAgICAgIChXZWJLaXQ6OlFXZWJTdHlsZTo6d2lkZ2V0Rm9yUGFpbnRlcik6CisgICAgICAg
IChXZWJLaXQ6OlFXZWJTdHlsZTo6aXNWYWxpZCk6CisgICAgICAgIChXZWJLaXQ6OlFXZWJTdHls
ZTo6ZW5zdXJlU3R5bGUpOgorICAgICAgICAqIFdlYkNvcmVTdXBwb3J0L1FXZWJTdHlsZS5oOiBB
ZGRlZC4KKyAgICAgICAgKFdlYkNvcmUpOgorICAgICAgICAoV2ViS2l0KToKKyAgICAgICAgKFFX
ZWJTdHlsZSk6CisgICAgICAgIChXZWJLaXQ6OlFXZWJTdHlsZTo6Y3JlYXRlKToKKwogMjAxMi0w
OS0yNiAgU2ltb24gSGF1c21hbm4gIDxzaW1vbi5oYXVzbWFubkBkaWdpYS5jb20+CiAKICAgICAg
ICAgW1F0XSBSZW1vdmUgUXQgUXVpY2sgMSBzdXBwb3J0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9UYXJnZXQucHJpIGIvU291cmNlL1dlYkNvcmUvVGFyZ2V0LnByaQppbmRleCAyNDdjMjBl
YzVjMzZiYzQ2Y2UyODAwMGY1NDA4OWUwMTkzYWFhZmVjLi40MzZlYWU5MDIzMTg3NzEwODk0MGE3
M2M4N2JkZTA1NjJjZTExYmE5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9UYXJnZXQucHJp
CisrKyBiL1NvdXJjZS9XZWJDb3JlL1RhcmdldC5wcmkKQEAgLTIyMjksOCArMjIyOSwxMSBAQCBI
RUFERVJTICs9IFwKICAgICBwbGF0Zm9ybS9xdC9DbGlwYm9hcmRRdC5oIFwKICAgICBwbGF0Zm9y
bS9xdC9Db29raWVKYXJRdC5oIFwKICAgICBwbGF0Zm9ybS9xdC9RV2ViUGFnZUNsaWVudC5oIFwK
KyAgICBwbGF0Zm9ybS9xdC9RU3R5bGVJbnRlcmZhY2UuaCBcCisgICAgcGxhdGZvcm0vcXQvUmVu
ZGVyVGhlbWVRU3R5bGUuaCBcCiAgICAgcGxhdGZvcm0vcXQvUmVuZGVyVGhlbWVRdC5oIFwKICAg
ICBwbGF0Zm9ybS9xdC9SZW5kZXJUaGVtZVF0TW9iaWxlLmggXAorICAgIHBsYXRmb3JtL3F0L1Nj
cm9sbGJhclRoZW1lUVN0eWxlLmggXAogICAgIHBsYXRmb3JtL3F0L1VzZXJBZ2VudFF0LmggXAog
ICAgIHBsYXRmb3JtL1Njcm9sbGFibGVBcmVhLmggXAogICAgIHBsYXRmb3JtL1Njcm9sbEFuaW1h
dG9yLmggXApAQCAtMjgwMSw4ICsyODA0LDExIEBAIFNPVVJDRVMgKz0gXAogICAgIHBsYXRmb3Jt
L3F0L1Bhc3RlYm9hcmRRdC5jcHAgXAogICAgIHBsYXRmb3JtL3F0L1BsYXRmb3JtS2V5Ym9hcmRF
dmVudFF0LmNwcCBcCiAgICAgcGxhdGZvcm0vcXQvUGxhdGZvcm1TY3JlZW5RdC5jcHAgXAorICAg
IHBsYXRmb3JtL3F0L1FTdHlsZUludGVyZmFjZS5jcHAgXAorICAgIHBsYXRmb3JtL3F0L1JlbmRl
clRoZW1lUVN0eWxlLmNwcCBcCiAgICAgcGxhdGZvcm0vcXQvUmVuZGVyVGhlbWVRdC5jcHAgXAog
ICAgIHBsYXRmb3JtL3F0L1JlbmRlclRoZW1lUXRNb2JpbGUuY3BwIFwKKyAgICBwbGF0Zm9ybS9x
dC9TY3JvbGxiYXJUaGVtZVFTdHlsZS5jcHAgXAogICAgIHBsYXRmb3JtL3F0L1Njcm9sbGJhclRo
ZW1lUXQuY3BwIFwKICAgICBwbGF0Zm9ybS9xdC9TY3JvbGxWaWV3UXQuY3BwIFwKICAgICBwbGF0
Zm9ybS9xdC9TaGFyZWRUaW1lclF0LmNwcCBcCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9xdC9RU3R5bGVJbnRlcmZhY2UuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
cXQvUVN0eWxlSW50ZXJmYWNlLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5mY2Q2ZTUyZTBlZTQ5Njk1M2Y1ZTg1
YTViYWE4YzhhM2M4ZGUyMmY0Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vcXQvUVN0eWxlSW50ZXJmYWNlLmNwcApAQCAtMCwwICsxLDQ2IEBACisvKgorICogVGhp
cyBmaWxlIGlzIHBhcnQgb2YgdGhlIHRoZW1lIGltcGxlbWVudGF0aW9uIGZvciBmb3JtIGNvbnRy
b2xzIGluIFdlYkNvcmUuCisgKgorICogQ29weXJpZ2h0IChDKSAyMDEyIERpZ2lhIFBsYyBhbmQv
b3IgaXRzIHN1YnNpZGlhcnkoLWllcykuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTEtMjAxMiBOb2tp
YSBDb3Jwb3JhdGlvbiBhbmQvb3IgaXRzIHN1YnNpZGlhcnkoLWllcykuCisgKgorICogVGhpcyBs
aWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgor
ICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQ
dWJsaWMKKyAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5k
YXRpb247IGVpdGhlcgorICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBv
cHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmli
dXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQg
QU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1F
UkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0
aGUgR05VCisgKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWls
cy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGli
cmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsg
c2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bworICogdGhlIEZyZWUg
U29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9v
ciwKKyAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgorICoKKyAqLworCisjaW5jbHVkZSAi
Y29uZmlnLmgiCisjaW5jbHVkZSAiUVN0eWxlSW50ZXJmYWNlLmgiCisKKyNpbmNsdWRlICJRV2Vi
UGFnZUNsaWVudC5oIgorI2luY2x1ZGUgPENocm9tZS5oPgorI2luY2x1ZGUgPENocm9tZUNsaWVu
dC5oPgorI2luY2x1ZGUgPFBhZ2UuaD4KKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitRU3R5bGUq
IFFTdHlsZUludGVyZmFjZTo6c3R5bGVGb3JQYWdlKFBhZ2UqIHBhZ2UpCit7CisgICAgaWYgKCFw
YWdlKQorICAgICAgICByZXR1cm4gMDsKKyAgICBRV2ViUGFnZUNsaWVudCogcGFnZUNsaWVudCA9
IHBhZ2UtPmNocm9tZSgpLT5jbGllbnQoKS0+cGxhdGZvcm1QYWdlQ2xpZW50KCk7CisKKyAgICBp
ZiAoIXBhZ2VDbGllbnQpCisgICAgICAgIHJldHVybiAwOworCisgICAgcmV0dXJuIHBhZ2VDbGll
bnQtPnN0eWxlKCk7Cit9CisKK30KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L3F0L1FTdHlsZUludGVyZmFjZS5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vcXQvUVN0eWxl
SW50ZXJmYWNlLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uZTIxNTg4ODZjMjE0MzVlMTc4YmZhNzk0NDQxNDVjYTFk
ZTdmMGYwNQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3F0L1FT
dHlsZUludGVyZmFjZS5oCkBAIC0wLDAgKzEsMjA1IEBACisvKgorICogVGhpcyBmaWxlIGlzIHBh
cnQgb2YgdGhlIHRoZW1lIGltcGxlbWVudGF0aW9uIGZvciBmb3JtIGNvbnRyb2xzIGluIFdlYkNv
cmUuCisgKgorICogQ29weXJpZ2h0IChDKSAyMDEyIERpZ2lhIFBsYyBhbmQvb3IgaXRzIHN1YnNp
ZGlhcnkoLWllcykuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTEtMjAxMiBOb2tpYSBDb3Jwb3JhdGlv
biBhbmQvb3IgaXRzIHN1YnNpZGlhcnkoLWllcykuCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGZy
ZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0
IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAqIExp
Y2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhl
cgorICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBs
YXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUg
aG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZ
OyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElU
WSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiBM
aWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZ
b3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFs
IFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxl
IENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bworICogdGhlIEZyZWUgU29mdHdhcmUgRm91
bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKKyAqIEJvc3Rv
biwgTUEgMDIxMTAtMTMwMSwgVVNBLgorICoKKyAqLworI2lmbmRlZiBRU3R5bGVJbnRlcmZhY2Vf
aAorI2RlZmluZSBRU3R5bGVJbnRlcmZhY2VfaAorCisjaW5jbHVkZSA8UVBhbGV0dGU+CisjaW5j
bHVkZSA8UVJlY3Q+CisKK1FUX0JFR0lOX05BTUVTUEFDRQorY2xhc3MgUVN0eWxlOworUVRfRU5E
X05BTUVTUEFDRQorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK2NsYXNzIFBhZ2U7CitjbGFzcyBR
U3R5bGVJbnRlcmZhY2VPcHRpb247CisKK2NsYXNzIFFTdHlsZUludGVyZmFjZSB7CitwdWJsaWM6
CisgICAgZW51bSBCdXR0b25TdWJFbGVtZW50IHsKKyAgICAgICAgUHVzaEJ1dHRvbkxheW91dEl0
ZW0sCisgICAgICAgIFB1c2hCdXR0b25Db250ZW50cworICAgIH07CisKKyNkZWZpbmUgRk9SX0VB
Q0hfTUFQUEVEX1NUQVRFKEYsIFNFUEFSQVRPUikgXAorICAgIEYoU3RhdGVfTm9uZSwgMHgwMDAw
MDAwMCkgU0VQQVJBVE9SIFwKKyAgICBGKFN0YXRlX0VuYWJsZWQsIDB4MDAwMDAwMDEpIFNFUEFS
QVRPUiBcCisgICAgRihTdGF0ZV9SYWlzZWQsIDB4MDAwMDAwMDIpIFNFUEFSQVRPUiBcCisgICAg
RihTdGF0ZV9TdW5rZW4sIDB4MDAwMDAwMDQpIFNFUEFSQVRPUiBcCisgICAgRihTdGF0ZV9PZmYs
IDB4MDAwMDAwMDgpIFNFUEFSQVRPUiBcCisgICAgRihTdGF0ZV9Ob0NoYW5nZSwgMHgwMDAwMDAx
MCkgU0VQQVJBVE9SIFwKKyAgICBGKFN0YXRlX09uLCAweDAwMDAwMDIwKSBTRVBBUkFUT1IgXAor
ICAgIEYoU3RhdGVfRG93bkFycm93LCAweDAwMDAwMDQwKSBTRVBBUkFUT1IgXAorICAgIEYoU3Rh
dGVfSG9yaXpvbnRhbCwgMHgwMDAwMDA4MCkgU0VQQVJBVE9SIFwKKyAgICBGKFN0YXRlX0hhc0Zv
Y3VzLCAweDAwMDAwMTAwKSBTRVBBUkFUT1IgXAorICAgIEYoU3RhdGVfVG9wLCAweDAwMDAwMjAw
KSBTRVBBUkFUT1IgXAorICAgIEYoU3RhdGVfQm90dG9tLCAweDAwMDAwNDAwKSBTRVBBUkFUT1Ig
XAorICAgIEYoU3RhdGVfRm9jdXNBdEJvcmRlciwgMHgwMDAwMDgwMCkgU0VQQVJBVE9SIFwKKyAg
ICBGKFN0YXRlX0F1dG9SYWlzZSwgMHgwMDAwMTAwMCkgU0VQQVJBVE9SIFwKKyAgICBGKFN0YXRl
X01vdXNlT3ZlciwgMHgwMDAwMjAwMCkgU0VQQVJBVE9SIFwKKyAgICBGKFN0YXRlX1VwQXJyb3cs
IDB4MDAwMDQwMDApIFNFUEFSQVRPUiBcCisgICAgRihTdGF0ZV9TZWxlY3RlZCwgMHgwMDAwODAw
MCkgU0VQQVJBVE9SIFwKKyAgICBGKFN0YXRlX0FjdGl2ZSwgMHgwMDAxMDAwMCkgU0VQQVJBVE9S
IFwKKyAgICBGKFN0YXRlX1dpbmRvdywgMHgwMDAyMDAwMCkgU0VQQVJBVE9SIFwKKyAgICBGKFN0
YXRlX09wZW4sIDB4MDAwNDAwMDApIFNFUEFSQVRPUiBcCisgICAgRihTdGF0ZV9DaGlsZHJlbiwg
MHgwMDA4MDAwMCkgU0VQQVJBVE9SIFwKKyAgICBGKFN0YXRlX0l0ZW0sIDB4MDAxMDAwMDApIFNF
UEFSQVRPUiBcCisgICAgRihTdGF0ZV9TaWJsaW5nLCAweDAwMjAwMDAwKSBTRVBBUkFUT1IgXAor
ICAgIEYoU3RhdGVfRWRpdGluZywgMHgwMDQwMDAwMCkgU0VQQVJBVE9SIFwKKyAgICBGKFN0YXRl
X0tleWJvYXJkRm9jdXNDaGFuZ2UsIDB4MDA4MDAwMDApIFNFUEFSQVRPUiBcCisgICAgRihTdGF0
ZV9SZWFkT25seSwgMHgwMjAwMDAwMCkgU0VQQVJBVE9SIFwKKyAgICBGKFN0YXRlX1NtYWxsLCAw
eDA0MDAwMDAwKSBTRVBBUkFUT1IgXAorICAgIEYoU3RhdGVfTWluaSwgMHgwODAwMDAwKQorCisj
ZGVmaW5lIENPTU1BICwKKyNkZWZpbmUgU0VNSUNPTE9OIDsKKyNkZWZpbmUgREVGSU5FX01BUFBF
RF9TVEFURShOYW1lLCBWYWx1ZSkgXAorICAgIE5hbWUgPSBWYWx1ZQorCisgICAgLy8gIyMjIFJl
bW92ZSB1bnVzZWQgc3RhdGVzLgorICAgIGVudW0gU3RhdGVGbGFnIHsKKyAgICAgICAgRk9SX0VB
Q0hfTUFQUEVEX1NUQVRFKERFRklORV9NQVBQRURfU1RBVEUsIENPTU1BKQorICAgIH07CisgICAg
UV9ERUNMQVJFX0ZMQUdTKFN0YXRlLCBTdGF0ZUZsYWcpCisKKyNkZWZpbmUgRk9SX0VBQ0hfTUFQ
UEVEX01FVFJJQyhGLCBTRVBBUkFUT1IpIFwKKyAgICBGKFBNX0J1dHRvbk1hcmdpbikgU0VQQVJB
VE9SIFwKKyAgICBGKFBNX0RlZmF1bHRGcmFtZVdpZHRoKSBTRVBBUkFUT1IgXAorICAgIEYoUE1f
SW5kaWNhdG9yV2lkdGgpIFNFUEFSQVRPUiBcCisgICAgRihQTV9FeGNsdXNpdmVJbmRpY2F0b3JX
aWR0aCkgU0VQQVJBVE9SIFwKKyAgICBGKFBNX0J1dHRvbkljb25TaXplKQorCisjZGVmaW5lIERF
RklORV9NRVRSSUMoRikgRgorCisgICAgZW51bSBQaXhlbE1ldHJpYyB7CisgICAgICAgIEZPUl9F
QUNIX01BUFBFRF9NRVRSSUMoREVGSU5FX01FVFJJQywgQ09NTUEpCisgICAgfTsKKworICAgIGVu
dW0gQ29udGVudHNUeXBlIHsKKyAgICAgICAgQ1RfQ29tYm9Cb3gsCisgICAgICAgIENUX1B1c2hC
dXR0b24KKyAgICB9OworCisjZGVmaW5lIEZPUl9FQUNIX1NVQkNPTlRST0woRiwgU0VQQVJBVE9S
KSBcCisgICAgRihTQ19Ob25lLCAweDAwMDAwMDAwKSBTRVBBUkFUT1IgXAorICAgIEYoU0NfU2Ny
b2xsQmFyQWRkTGluZSwgMHgwMDAwMDAwMSkgU0VQQVJBVE9SIFwKKyAgICBGKFNDX1Njcm9sbEJh
clN1YkxpbmUsIDB4MDAwMDAwMDIpIFNFUEFSQVRPUiBcCisgICAgRihTQ19TY3JvbGxCYXJBZGRQ
YWdlLCAweDAwMDAwMDA0KSBTRVBBUkFUT1IgXAorICAgIEYoU0NfU2Nyb2xsQmFyU3ViUGFnZSwg
MHgwMDAwMDAwOCkgU0VQQVJBVE9SIFwKKyAgICBGKFNDX1Njcm9sbEJhckZpcnN0LCAweDAwMDAw
MDEwKSBTRVBBUkFUT1IgXAorICAgIEYoU0NfU2Nyb2xsQmFyTGFzdCwgMHgwMDAwMDAyMCkgU0VQ
QVJBVE9SIFwKKyAgICBGKFNDX1Njcm9sbEJhclNsaWRlciwgMHgwMDAwMDA0MCkgU0VQQVJBVE9S
IFwKKyAgICBGKFNDX1Njcm9sbEJhckdyb292ZSwgMHgwMDAwMDA4MCkKKworI2RlZmluZSBERUZJ
TkVfU1VCQ09OVFJPTChGLCBWYWx1ZSkgRgorCisgICAgZW51bSBTdWJDb250cm9sIHsKKyAgICAg
ICAgRk9SX0VBQ0hfU1VCQ09OVFJPTChERUZJTkVfU1VCQ09OVFJPTCwgQ09NTUEpCisgICAgfTsK
KworICAgIHZpcnR1YWwgflFTdHlsZUludGVyZmFjZSgpIHsgfQorCisgICAgdmlydHVhbCBRUmVj
dCBidXR0b25TdWJFbGVtZW50UmVjdChCdXR0b25TdWJFbGVtZW50IGJ1dHRvbkVsZW1lbnQsIFN0
YXRlLCBjb25zdCBRUmVjdCYgb3JpZ2luYWxSZWN0KSBjb25zdCA9IDA7CisKKyAgICB2aXJ0dWFs
IGludCBmaW5kRnJhbWVMaW5lV2lkdGgoKSBjb25zdCA9IDA7CisgICAgdmlydHVhbCBpbnQgc2lt
cGxlUGl4ZWxNZXRyaWMoUGl4ZWxNZXRyaWMsIFN0YXRlID0gU3RhdGVfTm9uZSwgUU9iamVjdCog
d2lkZ2V0ID0gMCkgY29uc3QgPSAwOworICAgIHZpcnR1YWwgaW50IGJ1dHRvbk1hcmdpbihTdGF0
ZSwgY29uc3QgUVJlY3QmIG9yaWdpbmFsUmVjdCkgY29uc3QgPSAwOworICAgIHZpcnR1YWwgaW50
IHNsaWRlckxlbmd0aChRdDo6T3JpZW50YXRpb24pIGNvbnN0ID0gMDsKKyAgICB2aXJ0dWFsIGlu
dCBzbGlkZXJUaGlja25lc3MoUXQ6Ok9yaWVudGF0aW9uKSBjb25zdCA9IDA7CisgICAgdmlydHVh
bCBpbnQgcHJvZ3Jlc3NCYXJDaHVua1dpZHRoKGNvbnN0IFFTaXplJikgY29uc3QgPSAwOworICAg
IHZpcnR1YWwgdm9pZCBnZXRCdXR0b25NZXRyaWNzKFFTdHJpbmcqIGJ1dHRvbkZvbnRGYW1pbHks
IGludCogYnV0dG9uRm9udFBpeGVsU2l6ZSkgY29uc3QgPSAwOworCisgICAgdmlydHVhbCBRU2l6
ZSBzaXplRnJvbUNvbnRlbnRzKENvbnRlbnRzVHlwZSwgU3RhdGUsIGNvbnN0IFFTaXplJiBjb250
ZW50c1NpemUpIGNvbnN0ID0gMDsKKworICAgIGVudW0gQnV0dG9uVHlwZSB7CisgICAgICAgIFB1
c2hCdXR0b24sCisgICAgICAgIFJhZGlvQnV0dG9uLAorICAgICAgICBDaGVja0JveAorICAgIH07
CisKKyAgICB2aXJ0dWFsIHZvaWQgcGFpbnRCdXR0b24oUVBhaW50ZXIqLCBCdXR0b25UeXBlLCBj
b25zdCBRU3R5bGVJbnRlcmZhY2VPcHRpb24mLCBRT2JqZWN0ICp3aWRnZXQpID0gMDsKKyAgICB2
aXJ0dWFsIHZvaWQgcGFpbnRUZXh0RmllbGQoUVBhaW50ZXIqLCBjb25zdCBRU3R5bGVJbnRlcmZh
Y2VPcHRpb24mLCBRT2JqZWN0KiB3aWRnZXRPYmopID0gMDsKKyAgICB2aXJ0dWFsIHZvaWQgcGFp
bnRDb21ib0JveChRUGFpbnRlciosIGNvbnN0IFFTdHlsZUludGVyZmFjZU9wdGlvbiYsIFFPYmpl
Y3QgKndpZGdldE9iaikgPSAwOworICAgIHZpcnR1YWwgdm9pZCBwYWludENvbWJvQm94QXJyb3co
UVBhaW50ZXIqLCBjb25zdCBRU3R5bGVJbnRlcmZhY2VPcHRpb24mLCBRT2JqZWN0ICp3aWRnZXRP
YmopID0gMDsKKworICAgIHZpcnR1YWwgdm9pZCBwYWludFNsaWRlclRyYWNrKFFQYWludGVyKiwg
Y29uc3QgUVN0eWxlSW50ZXJmYWNlT3B0aW9uJiwgUU9iamVjdCAqd2lkZ2V0T2JqKSA9IDA7Cisg
ICAgdmlydHVhbCB2b2lkIHBhaW50U2xpZGVyVGh1bWIoUVBhaW50ZXIqLCBjb25zdCBRU3R5bGVJ
bnRlcmZhY2VPcHRpb24mLCBRT2JqZWN0ICp3aWRnZXRPYmopID0gMDsKKyAgICB2aXJ0dWFsIHZv
aWQgcGFpbnRJbm5lclNwaW5CdXR0b24oUVBhaW50ZXIqLCBjb25zdCBRU3R5bGVJbnRlcmZhY2VP
cHRpb24mLCBib29sIHNwaW5Cb3hVcCwgUU9iamVjdCogd2lkZ2V0T2JqKSA9IDA7CisgICAgdmly
dHVhbCB2b2lkIHBhaW50UHJvZ3Jlc3NCYXIoUVBhaW50ZXIqLCBjb25zdCBRU3R5bGVJbnRlcmZh
Y2VPcHRpb24mLCBkb3VibGUgcHJvZ3Jlc3MsIGRvdWJsZSBhbmltYXRpb25Qcm9ncmVzcywgUU9i
amVjdCogd2lkZ2V0T2JqKSA9IDA7CisKKyAgICB2aXJ0dWFsIGludCBzY3JvbGxCYXJFeHRlbnQo
Ym9vbCBtaW5pKSA9IDA7CisgICAgdmlydHVhbCBib29sIHNjcm9sbEJhck1pZGRsZUNsaWNrQWJz
b2x1dGVQb3NpdGlvblN0eWxlSGludCgpIGNvbnN0ID0gMDsKKyAgICB2aXJ0dWFsIHZvaWQgcGFp
bnRTY3JvbGxDb3JuZXIoUVBhaW50ZXIqLCBjb25zdCBRUmVjdCYsIFFPYmplY3QqIHdpZGdldE9i
aikgPSAwOworCisgICAgdmlydHVhbCBTdWJDb250cm9sIGhpdFRlc3RTY3JvbGxCYXIoY29uc3Qg
UVN0eWxlSW50ZXJmYWNlT3B0aW9uJiwgY29uc3QgUVBvaW50JiBwb3MpID0gMDsKKyAgICB2aXJ0
dWFsIFFSZWN0IHNjcm9sbEJhclN1YkNvbnRyb2xSZWN0KGNvbnN0IFFTdHlsZUludGVyZmFjZU9w
dGlvbiYsIFN1YkNvbnRyb2wpID0gMDsKKyAgICB2aXJ0dWFsIHZvaWQgcGFpbnRTY3JvbGxCYXIo
UVBhaW50ZXIqLCBjb25zdCBRU3R5bGVJbnRlcmZhY2VPcHRpb24mLCBRT2JqZWN0KiB3aWRnZXRP
YmopID0gMDsKKworICAgIHZpcnR1YWwgUU9iamVjdCogd2lkZ2V0Rm9yUGFpbnRlcihRUGFpbnRl
ciopID0gMDsKKworICAgIHZpcnR1YWwgYm9vbCBpc1ZhbGlkKCkgY29uc3QgPSAwOworCisgICAg
c3RhdGljIFFTdHlsZSogc3R5bGVGb3JQYWdlKFBhZ2UqKTsKK307CisKK1FfREVDTEFSRV9PUEVS
QVRPUlNfRk9SX0ZMQUdTKFFTdHlsZUludGVyZmFjZTo6U3RhdGUpCisKK3N0cnVjdCBRU3R5bGVJ
bnRlcmZhY2VPcHRpb24geworICAgIFFTdHlsZUludGVyZmFjZU9wdGlvbigpCisgICAgICAgIDog
c3RhdGUoUVN0eWxlSW50ZXJmYWNlOjpTdGF0ZV9Ob25lKQorICAgICAgICAsIGRpcmVjdGlvbihR
dDo6TGF5b3V0RGlyZWN0aW9uQXV0bykKKyAgICB7CisgICAgICAgIHNsaWRlci5vcmllbnRhdGlv
biA9IFF0OjpIb3Jpem9udGFsOworICAgICAgICBzbGlkZXIudXBzaWRlRG93biA9IGZhbHNlOwor
ICAgICAgICBzbGlkZXIubWluaW11bSA9IDA7CisgICAgICAgIHNsaWRlci5tYXhpbXVtID0gMDsK
KyAgICAgICAgc2xpZGVyLnBvc2l0aW9uID0gMDsKKyAgICAgICAgc2xpZGVyLnZhbHVlID0gMDsK
KyAgICAgICAgc2xpZGVyLnNpbmdsZVN0ZXAgPSAwOworICAgICAgICBzbGlkZXIucGFnZVN0ZXAg
PSAwOworICAgICAgICBzbGlkZXIuYWN0aXZlU3ViQ29udHJvbHMgPSBRU3R5bGVJbnRlcmZhY2U6
OlNDX05vbmU7CisgICAgfQorCisgICAgUVN0eWxlSW50ZXJmYWNlOjpTdGF0ZSBzdGF0ZTsKKyAg
ICBRUmVjdCByZWN0OworICAgIFF0OjpMYXlvdXREaXJlY3Rpb24gZGlyZWN0aW9uOworICAgIFFQ
YWxldHRlIHBhbGV0dGU7CisKKyAgICAvLyBTbGlkZXIgZmVhdHVyZXMKKyAgICBzdHJ1Y3Qgewor
ICAgICAgICBRdDo6T3JpZW50YXRpb24gb3JpZW50YXRpb247CisgICAgICAgIGJvb2wgdXBzaWRl
RG93bjsKKyAgICAgICAgaW50IG1pbmltdW07CisgICAgICAgIGludCBtYXhpbXVtOworICAgICAg
ICBpbnQgcG9zaXRpb247CisgICAgICAgIGludCB2YWx1ZTsKKyAgICAgICAgaW50IHNpbmdsZVN0
ZXA7CisgICAgICAgIGludCBwYWdlU3RlcDsKKyAgICAgICAgUVN0eWxlSW50ZXJmYWNlOjpTdWJD
b250cm9sIGFjdGl2ZVN1YkNvbnRyb2xzOworICAgIH0gc2xpZGVyOworfTsKKworfQorCisjZW5k
aWYgLy8gUVN0eWxlSW50ZXJmYWNlX2gKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL3F0L1JlbmRlclRoZW1lUVN0eWxlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3F0
L1JlbmRlclRoZW1lUVN0eWxlLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi4xNmVmZDUxNzQ5OGE0NDY5MDE5NjQ3
NzQzNWQwNGRhMGQ4MDAxOWMxCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vcXQvUmVuZGVyVGhlbWVRU3R5bGUuY3BwCkBAIC0wLDAgKzEsNjMwIEBACisvKgorICog
VGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIFdlYktpdCBwcm9qZWN0LgorICoKKyAqIENvcHlyaWdo
dCAoQykgMjAwOC0yMDEyIE5va2lhIENvcnBvcmF0aW9uIGFuZC9vciBpdHMgc3Vic2lkaWFyeSgt
aWVzKQorICoKKyAqIENvcHlyaWdodCAoQykgMjAwNiBaYWNrIFJ1c2luIDx6YWNrQGtkZS5vcmc+
CisgKiAgICAgICAgICAgICAgIDIwMDYgRGlyayBNdWVsbGVyIDxtdWVsbGVyQGtkZS5vcmc+Cisg
KiAgICAgICAgICAgICAgIDIwMDYgTmlrb2xhcyBaaW1tZXJtYW5uIDx6aW1tZXJtYW5uQGtkZS5v
cmc+CisgKiBDb3B5cmlnaHQgKEMpIDIwMDggSG9sZ2VyIEhhbnMgUGV0ZXIgRnJleXRoZXIKKyAq
CisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNv
ZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRl
ciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNl
IGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAq
IHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIg
dmVyc2lvbi4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUg
dGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0
aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3Ig
RklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogTGlicmFy
eSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNo
b3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJs
aWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZ
SU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRp
b24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCisgKiBCb3N0b24sIE1B
IDAyMTEwLTEzMDEsIFVTQS4KKyAqCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1
ZGUgIlJlbmRlclRoZW1lUVN0eWxlLmgiCisKKyNpbmNsdWRlICJDU1NGb250U2VsZWN0b3IuaCIK
KyNpbmNsdWRlICJDU1NWYWx1ZUtleXdvcmRzLmgiCisjaW5jbHVkZSAiQ2hyb21lLmgiCisjaW5j
bHVkZSAiQ2hyb21lQ2xpZW50LmgiCisjaW5jbHVkZSAiQ29sb3IuaCIKKyNpbmNsdWRlICJEb2N1
bWVudC5oIgorI2luY2x1ZGUgIkZvbnQuaCIKKyNpbmNsdWRlICJGb250U2VsZWN0b3IuaCIKKyNp
bmNsdWRlICJHcmFwaGljc0NvbnRleHQuaCIKKyNpbmNsdWRlICJIVE1MSW5wdXRFbGVtZW50Lmgi
CisjaW5jbHVkZSAiSFRNTE5hbWVzLmgiCisjaW5jbHVkZSAiTG9jYWxpemVkU3RyaW5ncy5oIgor
I2luY2x1ZGUgIk5vdEltcGxlbWVudGVkLmgiCisjaW5jbHVkZSAiUGFnZS5oIgorI2luY2x1ZGUg
IlBhaW50SW5mby5oIgorI2luY2x1ZGUgIlFXZWJQYWdlQ2xpZW50LmgiCisjaW5jbHVkZSAiUmVu
ZGVyQm94LmgiCisjaWYgRU5BQkxFKFBST0dSRVNTX0VMRU1FTlQpCisjaW5jbHVkZSAiUmVuZGVy
UHJvZ3Jlc3MuaCIKKyNlbmRpZgorI2luY2x1ZGUgIlJlbmRlclNsaWRlci5oIgorI2luY2x1ZGUg
IlNjcm9sbGJhclRoZW1lUVN0eWxlLmgiCisjaW5jbHVkZSAiU2xpZGVyVGh1bWJFbGVtZW50Lmgi
CisjaW5jbHVkZSAiU3R5bGVSZXNvbHZlci5oIgorI2luY2x1ZGUgIlVzZXJBZ2VudFN0eWxlU2hl
ZXRzLmgiCisKKyNpbmNsdWRlIDxRUGFpbnRlcj4KKworbmFtZXNwYWNlIFdlYkNvcmUgeworCit1
c2luZyBuYW1lc3BhY2UgSFRNTE5hbWVzOworCitRU2hhcmVkUG9pbnRlcjxTdHlsZVBhaW50ZXI+
IFJlbmRlclRoZW1lUVN0eWxlOjpnZXRTdHlsZVBhaW50ZXIoY29uc3QgUGFpbnRJbmZvJiBwYWlu
dEluZm8pCit7CisgICAgcmV0dXJuIFFTaGFyZWRQb2ludGVyPFN0eWxlUGFpbnRlcj4obmV3IFN0
eWxlUGFpbnRlclFTdHlsZSh0aGlzLCBwYWludEluZm8sIC8qUmVuZGVyT2JqZWN0Ki8wKSk7Cit9
CisKK1N0eWxlUGFpbnRlclFTdHlsZTo6U3R5bGVQYWludGVyUVN0eWxlKFJlbmRlclRoZW1lUVN0
eWxlKiB0aGVtZSwgY29uc3QgUGFpbnRJbmZvJiBwYWludEluZm8sIFJlbmRlck9iamVjdCogcmVu
ZGVyT2JqZWN0KQorICAgIDogU3R5bGVQYWludGVyKHRoZW1lLCBwYWludEluZm8pCisgICAgLCBz
dHlsZUludGVyZmFjZSh0aGVtZS0+c3R5bGVJbnRlcmZhY2UoKSkKKyAgICAsIGFwcGVhcmFuY2Uo
Tm9Db250cm9sUGFydCkKK3sKKyAgICBpbml0KHBhaW50SW5mby5jb250ZXh0ID8gcGFpbnRJbmZv
LmNvbnRleHQgOiAwKTsKKyAgICBpZiAocmVuZGVyT2JqZWN0KQorICAgICAgICBhcHBlYXJhbmNl
ID0gdGhlbWUtPmluaXRpYWxpemVDb21tb25RU3R5bGVPcHRpb25zKHN0eWxlT3B0aW9uLCByZW5k
ZXJPYmplY3QpOworfQorCitTdHlsZVBhaW50ZXJRU3R5bGU6OlN0eWxlUGFpbnRlclFTdHlsZShT
Y3JvbGxiYXJUaGVtZVFTdHlsZSogdGhlbWUsIEdyYXBoaWNzQ29udGV4dCogY29udGV4dCkKKyAg
ICA6IFN0eWxlUGFpbnRlcigpCisgICAgLCBzdHlsZUludGVyZmFjZSh0aGVtZS0+c3R5bGVJbnRl
cmZhY2UoKSkKKyAgICAsIGFwcGVhcmFuY2UoTm9Db250cm9sUGFydCkKK3sKKyAgICBpbml0KGNv
bnRleHQpOworfQorCit2b2lkIFN0eWxlUGFpbnRlclFTdHlsZTo6aW5pdChHcmFwaGljc0NvbnRl
eHQqIGNvbnRleHQpCit7CisgICAgcGFpbnRlciA9IHN0YXRpY19jYXN0PFFQYWludGVyKj4oY29u
dGV4dC0+cGxhdGZvcm1Db250ZXh0KCkpOworICAgIHdpZGdldCA9IHN0eWxlSW50ZXJmYWNlLT53
aWRnZXRGb3JQYWludGVyKHBhaW50ZXIpOworCisgICAgaWYgKHdpZGdldCkgeworICAgICAgICBz
dHlsZU9wdGlvbi5wYWxldHRlID0gd2lkZ2V0LT5wcm9wZXJ0eSgicGFsZXR0ZSIpLnZhbHVlPFFQ
YWxldHRlPigpOworICAgICAgICBzdHlsZU9wdGlvbi5yZWN0ID0gd2lkZ2V0LT5wcm9wZXJ0eSgi
cmVjdCIpLnZhbHVlPFFSZWN0PigpOworICAgICAgICBzdHlsZU9wdGlvbi5kaXJlY3Rpb24gPSBz
dGF0aWNfY2FzdDxRdDo6TGF5b3V0RGlyZWN0aW9uPih3aWRnZXQtPnByb3BlcnR5KCJsYXlvdXRE
aXJlY3Rpb24iKS50b0ludCgpKTsKKyAgICB9CisKKyAgICBTdHlsZVBhaW50ZXI6OmluaXQoY29u
dGV4dCk7Cit9CisKK1Bhc3NSZWZQdHI8UmVuZGVyVGhlbWU+IFJlbmRlclRoZW1lUVN0eWxlOjpj
cmVhdGUoUGFnZSogcGFnZSkKK3sKKyAgICByZXR1cm4gYWRvcHRSZWYobmV3IFJlbmRlclRoZW1l
UVN0eWxlKHBhZ2UpKTsKK30KKworc3RhdGljIFF0U3R5bGVGYWN0b3J5RnVuY3Rpb24gc3R5bGVG
YWN0b3J5RnVuY3Rpb247CisKK3ZvaWQgUmVuZGVyVGhlbWVRU3R5bGU6OnNldFN0eWxlRmFjdG9y
eUZ1bmN0aW9uKFF0U3R5bGVGYWN0b3J5RnVuY3Rpb24gZnVuY3Rpb24pCit7CisgICAgc3R5bGVG
YWN0b3J5RnVuY3Rpb24gPSBmdW5jdGlvbjsKK30KKworUXRTdHlsZUZhY3RvcnlGdW5jdGlvbiBS
ZW5kZXJUaGVtZVFTdHlsZTo6c3R5bGVGYWN0b3J5KCkKK3sKKyAgICByZXR1cm4gc3R5bGVGYWN0
b3J5RnVuY3Rpb247Cit9CisKK1JlbmRlclRoZW1lUVN0eWxlOjpSZW5kZXJUaGVtZVFTdHlsZShQ
YWdlKiBwYWdlKQorICAgIDogUmVuZGVyVGhlbWVRdChwYWdlKQorICAgICwgbV9zdHlsZUludGVy
ZmFjZShhZG9wdFB0cihzdHlsZUZhY3RvcnlGdW5jdGlvbihwYWdlKSkpCit7CisgICAgaW50IGJ1
dHRvblBpeGVsU2l6ZSA9IDA7CisgICAgbV9zdHlsZUludGVyZmFjZS0+Z2V0QnV0dG9uTWV0cmlj
cygmbV9idXR0b25Gb250RmFtaWx5LCAmYnV0dG9uUGl4ZWxTaXplKTsKKyNpZmRlZiBRX1dTX01B
QworICAgIG1fYnV0dG9uRm9udFBpeGVsU2l6ZSA9IGJ1dHRvblBpeGVsU2l6ZTsKKyNlbmRpZgor
fQorCitSZW5kZXJUaGVtZVFTdHlsZTo6flJlbmRlclRoZW1lUVN0eWxlKCkKK3sKK30KKwordm9p
ZCBSZW5kZXJUaGVtZVFTdHlsZTo6c2V0UGFsZXR0ZUZyb21QYWdlQ2xpZW50SWZFeGlzdHMoUVBh
bGV0dGUmIHBhbGV0dGUpIGNvbnN0Cit7CisgICAgaWYgKCFtX3BhZ2UpCisgICAgICAgIHJldHVy
bjsKKworICAgIEFTU0VSVChtX3BhZ2UtPmNocm9tZSgpKTsKKyAgICBDaHJvbWVDbGllbnQqIGNo
cm9tZUNsaWVudCA9IG1fcGFnZS0+Y2hyb21lKCktPmNsaWVudCgpOworICAgIGlmICghY2hyb21l
Q2xpZW50KQorICAgICAgICByZXR1cm47CisKKyAgICBpZiAoUVdlYlBhZ2VDbGllbnQqIHBhZ2VD
bGllbnQgPSBjaHJvbWVDbGllbnQtPnBsYXRmb3JtUGFnZUNsaWVudCgpKQorICAgICAgICBwYWxl
dHRlID0gcGFnZUNsaWVudC0+cGFsZXR0ZSgpOworfQorCitRUmVjdCBSZW5kZXJUaGVtZVFTdHls
ZTo6aW5mbGF0ZUJ1dHRvblJlY3QoY29uc3QgUVJlY3QmIG9yaWdpbmFsUmVjdCkgY29uc3QKK3sK
KyAgICBRUmVjdCBsYXlvdXRSZWN0ID0gbV9zdHlsZUludGVyZmFjZS0+YnV0dG9uU3ViRWxlbWVu
dFJlY3QoUVN0eWxlSW50ZXJmYWNlOjpQdXNoQnV0dG9uTGF5b3V0SXRlbSwgUVN0eWxlSW50ZXJm
YWNlOjpTdGF0ZV9TbWFsbCwgb3JpZ2luYWxSZWN0KTsKKyAgICBpZiAoIWxheW91dFJlY3QuaXNO
dWxsKCkpIHsKKyAgICAgICAgaW50IHBhZGRpbmdMZWZ0ID0gbGF5b3V0UmVjdC5sZWZ0KCkgLSBv
cmlnaW5hbFJlY3QubGVmdCgpOworICAgICAgICBpbnQgcGFkZGluZ1JpZ2h0ID0gb3JpZ2luYWxS
ZWN0LnJpZ2h0KCkgLSBsYXlvdXRSZWN0LnJpZ2h0KCk7CisgICAgICAgIGludCBwYWRkaW5nVG9w
ID0gbGF5b3V0UmVjdC50b3AoKSAtIG9yaWdpbmFsUmVjdC50b3AoKTsKKyAgICAgICAgaW50IHBh
ZGRpbmdCb3R0b20gPSBvcmlnaW5hbFJlY3QuYm90dG9tKCkgLSBsYXlvdXRSZWN0LmJvdHRvbSgp
OworCisgICAgICAgIHJldHVybiBvcmlnaW5hbFJlY3QuYWRqdXN0ZWQoLXBhZGRpbmdMZWZ0LCAt
cGFkZGluZ1RvcCwgcGFkZGluZ1JpZ2h0LCBwYWRkaW5nQm90dG9tKTsKKyAgICB9CisgICAgcmV0
dXJuIG9yaWdpbmFsUmVjdDsKK30KKwordm9pZCBSZW5kZXJUaGVtZVFTdHlsZTo6Y29tcHV0ZVNp
emVCYXNlZE9uU3R5bGUoUmVuZGVyU3R5bGUqIHJlbmRlclN0eWxlKSBjb25zdAoreworICAgIFFT
aXplIHNpemUoMCwgMCk7CisgICAgY29uc3QgUUZvbnRNZXRyaWNzIGZtKHJlbmRlclN0eWxlLT5m
b250KCkuc3ludGhldGljRm9udCgpKTsKKworICAgIHN3aXRjaCAocmVuZGVyU3R5bGUtPmFwcGVh
cmFuY2UoKSkgeworICAgIGNhc2UgVGV4dEFyZWFQYXJ0OgorICAgIGNhc2UgU2VhcmNoRmllbGRQ
YXJ0OgorICAgIGNhc2UgVGV4dEZpZWxkUGFydDogeworICAgICAgICBpbnQgcGFkZGluZyA9IG1f
c3R5bGVJbnRlcmZhY2UtPmZpbmRGcmFtZUxpbmVXaWR0aCgpOworICAgICAgICByZW5kZXJTdHls
ZS0+c2V0UGFkZGluZ0xlZnQoTGVuZ3RoKHBhZGRpbmcsIEZpeGVkKSk7CisgICAgICAgIHJlbmRl
clN0eWxlLT5zZXRQYWRkaW5nUmlnaHQoTGVuZ3RoKHBhZGRpbmcsIEZpeGVkKSk7CisgICAgICAg
IHJlbmRlclN0eWxlLT5zZXRQYWRkaW5nVG9wKExlbmd0aChwYWRkaW5nLCBGaXhlZCkpOworICAg
ICAgICByZW5kZXJTdHlsZS0+c2V0UGFkZGluZ0JvdHRvbShMZW5ndGgocGFkZGluZywgRml4ZWQp
KTsKKyAgICAgICAgYnJlYWs7CisgICAgfQorICAgIGRlZmF1bHQ6CisgICAgICAgIGJyZWFrOwor
ICAgIH0KKyAgICAvLyBJZiB0aGUgd2lkdGggYW5kIGhlaWdodCBhcmUgYm90aCBzcGVjaWZpZWQs
IHRoZW4gd2UgaGF2ZSBub3RoaW5nIHRvIGRvLgorICAgIGlmICghcmVuZGVyU3R5bGUtPndpZHRo
KCkuaXNJbnRyaW5zaWNPckF1dG8oKSAmJiAhcmVuZGVyU3R5bGUtPmhlaWdodCgpLmlzQXV0bygp
KQorICAgICAgICByZXR1cm47CisKKyAgICBzd2l0Y2ggKHJlbmRlclN0eWxlLT5hcHBlYXJhbmNl
KCkpIHsKKyAgICBjYXNlIENoZWNrYm94UGFydDogeworICAgICAgICBpbnQgY2hlY2tCb3hXaWR0
aCA9IG1fc3R5bGVJbnRlcmZhY2UtPnNpbXBsZVBpeGVsTWV0cmljKFFTdHlsZUludGVyZmFjZTo6
UE1fSW5kaWNhdG9yV2lkdGgsIFFTdHlsZUludGVyZmFjZTo6U3RhdGVfU21hbGwpOworICAgICAg
ICBjaGVja0JveFdpZHRoICo9IHJlbmRlclN0eWxlLT5lZmZlY3RpdmVab29tKCk7CisgICAgICAg
IHNpemUgPSBRU2l6ZShjaGVja0JveFdpZHRoLCBjaGVja0JveFdpZHRoKTsKKyAgICAgICAgYnJl
YWs7CisgICAgfQorICAgIGNhc2UgUmFkaW9QYXJ0OiB7CisgICAgICAgIGludCByYWRpb1dpZHRo
ID0gbV9zdHlsZUludGVyZmFjZS0+c2ltcGxlUGl4ZWxNZXRyaWMoUVN0eWxlSW50ZXJmYWNlOjpQ
TV9FeGNsdXNpdmVJbmRpY2F0b3JXaWR0aCwgUVN0eWxlSW50ZXJmYWNlOjpTdGF0ZV9TbWFsbCk7
CisgICAgICAgIHJhZGlvV2lkdGggKj0gcmVuZGVyU3R5bGUtPmVmZmVjdGl2ZVpvb20oKTsKKyAg
ICAgICAgc2l6ZSA9IFFTaXplKHJhZGlvV2lkdGgsIHJhZGlvV2lkdGgpOworICAgICAgICBicmVh
azsKKyAgICB9CisgICAgY2FzZSBQdXNoQnV0dG9uUGFydDoKKyAgICBjYXNlIEJ1dHRvblBhcnQ6
IHsKKyAgICAgICAgUVNpemUgY29udGVudFNpemUgPSBmbS5zaXplKFF0OjpUZXh0U2hvd01uZW1v
bmljLCBRU3RyaW5nOjpmcm9tTGF0aW4xKCJYIikpOworICAgICAgICBRU2l6ZSBwdXNoQnV0dG9u
U2l6ZSA9IG1fc3R5bGVJbnRlcmZhY2UtPnNpemVGcm9tQ29udGVudHMoUVN0eWxlSW50ZXJmYWNl
OjpDVF9QdXNoQnV0dG9uLCBRU3R5bGVJbnRlcmZhY2U6OlN0YXRlX1NtYWxsLCBjb250ZW50U2l6
ZSk7CisgICAgICAgIFFSZWN0IGxheW91dFJlY3QgPSBtX3N0eWxlSW50ZXJmYWNlLT5idXR0b25T
dWJFbGVtZW50UmVjdChRU3R5bGVJbnRlcmZhY2U6OlB1c2hCdXR0b25MYXlvdXRJdGVtLCBRU3R5
bGVJbnRlcmZhY2U6OlN0YXRlX1NtYWxsLCBRUmVjdCgwLCAwLCBwdXNoQnV0dG9uU2l6ZS53aWR0
aCgpLCBwdXNoQnV0dG9uU2l6ZS5oZWlnaHQoKSkpOworCisgICAgICAgIC8vIElmIHRoZSBzdHls
ZSBzdXBwb3J0cyBsYXlvdXQgcmVjdHMgd2UgdXNlIHRoYXQsIGFuZCAgY29tcGVuc2F0ZSBhY2Nv
cmRpbmdseQorICAgICAgICAvLyBpbiBwYWludEJ1dHRvbigpIGJlbG93LgorICAgICAgICBpZiAo
IWxheW91dFJlY3QuaXNOdWxsKCkpCisgICAgICAgICAgICBzaXplLnNldEhlaWdodChsYXlvdXRS
ZWN0LmhlaWdodCgpKTsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgc2l6ZS5zZXRIZWlnaHQo
cHVzaEJ1dHRvblNpemUuaGVpZ2h0KCkpOworCisgICAgICAgIGJyZWFrOworICAgIH0KKyAgICBj
YXNlIE1lbnVsaXN0UGFydDogeworICAgICAgICBpbnQgY29udGVudEhlaWdodCA9IHFNYXgoZm0u
bGluZVNwYWNpbmcoKSwgMTQpICsgMjsKKyAgICAgICAgUVNpemUgbWVudUxpc3RTaXplID0gbV9z
dHlsZUludGVyZmFjZS0+c2l6ZUZyb21Db250ZW50cyhRU3R5bGVJbnRlcmZhY2U6OkNUX0NvbWJv
Qm94LCBRU3R5bGVJbnRlcmZhY2U6OlN0YXRlX1NtYWxsLCBRU2l6ZSgwLCBjb250ZW50SGVpZ2h0
KSk7CisgICAgICAgIHNpemUuc2V0SGVpZ2h0KG1lbnVMaXN0U2l6ZS5oZWlnaHQoKSk7CisgICAg
ICAgIGJyZWFrOworICAgIH0KKyAgICBkZWZhdWx0OgorICAgICAgICBicmVhazsKKyAgICB9CisK
KyAgICAvLyBGSVhNRTogQ2hlY2sgaXMgZmxhd2VkLCBzaW5jZSBpdCBkb2Vzbid0IHRha2UgbWlu
LXdpZHRoL21heC13aWR0aCBpbnRvIGFjY291bnQuCisgICAgaWYgKHJlbmRlclN0eWxlLT53aWR0
aCgpLmlzSW50cmluc2ljT3JBdXRvKCkgJiYgc2l6ZS53aWR0aCgpID4gMCkKKyAgICAgICAgcmVu
ZGVyU3R5bGUtPnNldE1pbldpZHRoKExlbmd0aChzaXplLndpZHRoKCksIEZpeGVkKSk7CisgICAg
aWYgKHJlbmRlclN0eWxlLT5oZWlnaHQoKS5pc0F1dG8oKSAmJiBzaXplLmhlaWdodCgpID4gMCkK
KyAgICAgICAgcmVuZGVyU3R5bGUtPnNldE1pbkhlaWdodChMZW5ndGgoc2l6ZS5oZWlnaHQoKSwg
Rml4ZWQpKTsKK30KKworCisKK3ZvaWQgUmVuZGVyVGhlbWVRU3R5bGU6OmFkanVzdEJ1dHRvblN0
eWxlKFN0eWxlUmVzb2x2ZXIqIHN0eWxlUmVzb2x2ZXIsIFJlbmRlclN0eWxlKiBzdHlsZSwgRWxl
bWVudCopIGNvbnN0Cit7CisgICAgLy8gRGl0Y2ggdGhlIGJvcmRlci4KKyAgICBzdHlsZS0+cmVz
ZXRCb3JkZXIoKTsKKworI2lmZGVmIFFfV1NfTUFDCisgICAgaWYgKHN0eWxlLT5hcHBlYXJhbmNl
KCkgPT0gUHVzaEJ1dHRvblBhcnQpIHsKKyAgICAgICAgLy8gVGhlIE1hYyBwb3J0cyBpZ25vcmUg
dGhlIHNwZWNpZmllZCBoZWlnaHQgZm9yIDxpbnB1dCB0eXBlPSJidXR0b24iPiBlbGVtZW50cwor
ICAgICAgICAvLyB1bmxlc3MgYSBib3JkZXIgYW5kL29yIGJhY2tncm91bmQgQ1NTIHByb3BlcnR5
IGlzIGFsc28gc3BlY2lmaWVkLgorICAgICAgICBzdHlsZS0+c2V0SGVpZ2h0KExlbmd0aChBdXRv
KSk7CisgICAgfQorI2VuZGlmCisKKyAgICBGb250RGVzY3JpcHRpb24gZm9udERlc2NyaXB0aW9u
ID0gc3R5bGUtPmZvbnREZXNjcmlwdGlvbigpOworICAgIGZvbnREZXNjcmlwdGlvbi5zZXRJc0Fi
c29sdXRlU2l6ZSh0cnVlKTsKKworI2lmZGVmIFFfV1NfTUFDIC8vIFVzZSBmaXhlZCBmb250IHNp
emUgYW5kIGZhbWlseSBvbiBNYWMgKGxpa2UgU2FmYXJpIGRvZXMpCisgICAgZm9udERlc2NyaXB0
aW9uLnNldFNwZWNpZmllZFNpemUobV9idXR0b25Gb250UGl4ZWxTaXplKTsKKyAgICBmb250RGVz
Y3JpcHRpb24uc2V0Q29tcHV0ZWRTaXplKG1fYnV0dG9uRm9udFBpeGVsU2l6ZSk7CisjZWxzZQor
ICAgIGZvbnREZXNjcmlwdGlvbi5zZXRTcGVjaWZpZWRTaXplKHN0eWxlLT5mb250U2l6ZSgpKTsK
KyAgICBmb250RGVzY3JpcHRpb24uc2V0Q29tcHV0ZWRTaXplKHN0eWxlLT5mb250U2l6ZSgpKTsK
KyNlbmRpZgorCisgICAgRm9udEZhbWlseSBmb250RmFtaWx5OworICAgIGZvbnRGYW1pbHkuc2V0
RmFtaWx5KG1fYnV0dG9uRm9udEZhbWlseSk7CisgICAgZm9udERlc2NyaXB0aW9uLnNldEZhbWls
eShmb250RmFtaWx5KTsKKyAgICBzdHlsZS0+c2V0Rm9udERlc2NyaXB0aW9uKGZvbnREZXNjcmlw
dGlvbik7CisgICAgc3R5bGUtPmZvbnQoKS51cGRhdGUoc3R5bGVSZXNvbHZlci0+Zm9udFNlbGVj
dG9yKCkpOworICAgIHN0eWxlLT5zZXRMaW5lSGVpZ2h0KFJlbmRlclN0eWxlOjppbml0aWFsTGlu
ZUhlaWdodCgpKTsKKyAgICBzZXRCdXR0b25TaXplKHN0eWxlKTsKKyAgICBzZXRCdXR0b25QYWRk
aW5nKHN0eWxlKTsKK30KKwordm9pZCBSZW5kZXJUaGVtZVFTdHlsZTo6c2V0QnV0dG9uUGFkZGlu
ZyhSZW5kZXJTdHlsZSogc3R5bGUpIGNvbnN0Cit7CisgICAgLy8gRmFrZSBhIGJ1dHRvbiByZWN0
IGhlcmUsIHNpbmNlIHdlJ3JlIGp1c3QgY29tcHV0aW5nIGRlbHRhcworICAgIFFSZWN0IG9yaWdp
bmFsUmVjdCA9IFFSZWN0KDAsIDAsIDEwMCwgMzApOworCisgICAgLy8gRGVmYXVsdCBwYWRkaW5n
IGlzIGJhc2VkIG9uIHRoZSBidXR0b24gbWFyZ2luIHBpeGVsIG1ldHJpYworICAgIGludCBidXR0
b25NYXJnaW4gPSBtX3N0eWxlSW50ZXJmYWNlLT5idXR0b25NYXJnaW4oUVN0eWxlSW50ZXJmYWNl
OjpTdGF0ZV9TbWFsbCwgb3JpZ2luYWxSZWN0KTsKKyAgICBpbnQgcGFkZGluZ0xlZnQgPSBidXR0
b25NYXJnaW47CisgICAgaW50IHBhZGRpbmdSaWdodCA9IGJ1dHRvbk1hcmdpbjsKKyAgICBpbnQg
cGFkZGluZ1RvcCA9IGJ1dHRvbk1hcmdpbjsKKyAgICBpbnQgcGFkZGluZ0JvdHRvbSA9IGJ1dHRv
bk1hcmdpbjsKKworICAgIC8vIFRoZW4gY2hlY2sgaWYgdGhlIHN0eWxlIHVzZXMgbGF5b3V0IG1h
cmdpbnMKKyAgICBRUmVjdCBsYXlvdXRSZWN0ID0gbV9zdHlsZUludGVyZmFjZS0+YnV0dG9uU3Vi
RWxlbWVudFJlY3QoUVN0eWxlSW50ZXJmYWNlOjpQdXNoQnV0dG9uTGF5b3V0SXRlbSwKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
UVN0eWxlSW50ZXJmYWNlOjpTdGF0ZV9TbWFsbCwgb3JpZ2luYWxSZWN0KTsKKyAgICBpZiAoIWxh
eW91dFJlY3QuaXNOdWxsKCkpIHsKKyAgICAgICAgUVJlY3QgY29udGVudHNSZWN0ID0gbV9zdHls
ZUludGVyZmFjZS0+YnV0dG9uU3ViRWxlbWVudFJlY3QoUVN0eWxlSW50ZXJmYWNlOjpQdXNoQnV0
dG9uQ29udGVudHMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIFFTdHlsZUludGVyZmFjZTo6U3RhdGVfU21hbGwsIG9y
aWdpbmFsUmVjdCk7CisgICAgICAgIHBhZGRpbmdMZWZ0ID0gY29udGVudHNSZWN0LmxlZnQoKSAt
IGxheW91dFJlY3QubGVmdCgpOworICAgICAgICBwYWRkaW5nUmlnaHQgPSBsYXlvdXRSZWN0LnJp
Z2h0KCkgLSBjb250ZW50c1JlY3QucmlnaHQoKTsKKyAgICAgICAgcGFkZGluZ1RvcCA9IGNvbnRl
bnRzUmVjdC50b3AoKSAtIGxheW91dFJlY3QudG9wKCk7CisKKyAgICAgICAgLy8gQ2FuJ3QgdXNl
IHRoaXMgcmlnaHQgbm93IGJlY2F1c2Ugd2UgZG9uJ3QgaGF2ZSB0aGUgYmFzZWxpbmUgdG8gY29t
cGVuc2F0ZQorICAgICAgICAvLyBwYWRkaW5nQm90dG9tID0gbGF5b3V0UmVjdC5ib3R0b20oKSAt
IGNvbnRlbnRzUmVjdC5ib3R0b20oKTsKKyAgICB9CisgICAgc3R5bGUtPnNldFBhZGRpbmdMZWZ0
KExlbmd0aChwYWRkaW5nTGVmdCwgRml4ZWQpKTsKKyAgICBzdHlsZS0+c2V0UGFkZGluZ1JpZ2h0
KExlbmd0aChwYWRkaW5nUmlnaHQsIEZpeGVkKSk7CisgICAgc3R5bGUtPnNldFBhZGRpbmdUb3Ao
TGVuZ3RoKHBhZGRpbmdUb3AsIEZpeGVkKSk7CisgICAgc3R5bGUtPnNldFBhZGRpbmdCb3R0b20o
TGVuZ3RoKHBhZGRpbmdCb3R0b20sIEZpeGVkKSk7Cit9CisKK2Jvb2wgUmVuZGVyVGhlbWVRU3R5
bGU6OnBhaW50QnV0dG9uKFJlbmRlck9iamVjdCogbywgY29uc3QgUGFpbnRJbmZvJiBpLCBjb25z
dCBJbnRSZWN0JiByKQoreworICAgIFN0eWxlUGFpbnRlclFTdHlsZSBwKHRoaXMsIGksIG8pOwor
ICAgIGlmICghcC5pc1ZhbGlkKCkpCisgICAgICAgIHJldHVybiB0cnVlOworCisgICAgcC5zdHls
ZU9wdGlvbi5yZWN0ID0gcjsKKyAgICBwLnN0eWxlT3B0aW9uLnN0YXRlIHw9IFFTdHlsZUludGVy
ZmFjZTo6U3RhdGVfU21hbGw7CisKKyAgICBpZiAocC5hcHBlYXJhbmNlID09IFB1c2hCdXR0b25Q
YXJ0IHx8IHAuYXBwZWFyYW5jZSA9PSBCdXR0b25QYXJ0KSB7CisgICAgICAgIHAuc3R5bGVPcHRp
b24ucmVjdCA9IGluZmxhdGVCdXR0b25SZWN0KHAuc3R5bGVPcHRpb24ucmVjdCk7CisgICAgICAg
IHAucGFpbnRCdXR0b24oUVN0eWxlSW50ZXJmYWNlOjpQdXNoQnV0dG9uKTsKKyAgICB9IGVsc2Ug
aWYgKHAuYXBwZWFyYW5jZSA9PSBSYWRpb1BhcnQpCisgICAgICAgIHAucGFpbnRCdXR0b24oUVN0
eWxlSW50ZXJmYWNlOjpSYWRpb0J1dHRvbik7CisgICAgZWxzZSBpZiAocC5hcHBlYXJhbmNlID09
IENoZWNrYm94UGFydCkKKyAgICAgICAgcC5wYWludEJ1dHRvbihRU3R5bGVJbnRlcmZhY2U6OkNo
ZWNrQm94KTsKKworICAgIHJldHVybiBmYWxzZTsKK30KKworYm9vbCBSZW5kZXJUaGVtZVFTdHls
ZTo6cGFpbnRUZXh0RmllbGQoUmVuZGVyT2JqZWN0KiBvLCBjb25zdCBQYWludEluZm8mIGksIGNv
bnN0IEludFJlY3QmIHIpCit7CisgICAgU3R5bGVQYWludGVyUVN0eWxlIHAodGhpcywgaSwgbyk7
CisgICAgaWYgKCFwLmlzVmFsaWQoKSkKKyAgICAgICAgcmV0dXJuIHRydWU7CisKKyAgICBwLnN0
eWxlT3B0aW9uLnJlY3QgPSByOworICAgIHAuc3R5bGVPcHRpb24uc3RhdGUgfD0gUVN0eWxlSW50
ZXJmYWNlOjpTdGF0ZV9TdW5rZW47CisKKyAgICAvLyBHZXQgdGhlIGNvcnJlY3QgdGhlbWUgZGF0
YSBmb3IgYSB0ZXh0IGZpZWxkCisgICAgaWYgKHAuYXBwZWFyYW5jZSAhPSBUZXh0RmllbGRQYXJ0
CisgICAgICAgICYmIHAuYXBwZWFyYW5jZSAhPSBTZWFyY2hGaWVsZFBhcnQKKyAgICAgICAgJiYg
cC5hcHBlYXJhbmNlICE9IFRleHRBcmVhUGFydAorICAgICAgICAmJiBwLmFwcGVhcmFuY2UgIT0g
TGlzdGJveFBhcnQpCisgICAgICAgIHJldHVybiB0cnVlOworCisgICAgLy8gTm93IHBhaW50IHRo
ZSB0ZXh0IGZpZWxkLgorICAgIHAucGFpbnRUZXh0RmllbGQoKTsKKyAgICByZXR1cm4gZmFsc2U7
Cit9CisKK3ZvaWQgUmVuZGVyVGhlbWVRU3R5bGU6OmFkanVzdFRleHRBcmVhU3R5bGUoU3R5bGVS
ZXNvbHZlciogc3R5bGVSZXNvbHZlciwgUmVuZGVyU3R5bGUqIHN0eWxlLCBFbGVtZW50KiBlbGVt
ZW50KSBjb25zdAoreworICAgIGFkanVzdFRleHRGaWVsZFN0eWxlKHN0eWxlUmVzb2x2ZXIsIHN0
eWxlLCBlbGVtZW50KTsKK30KKworYm9vbCBSZW5kZXJUaGVtZVFTdHlsZTo6cGFpbnRUZXh0QXJl
YShSZW5kZXJPYmplY3QqIG8sIGNvbnN0IFBhaW50SW5mbyYgaSwgY29uc3QgSW50UmVjdCYgcikK
K3sKKyAgICByZXR1cm4gcGFpbnRUZXh0RmllbGQobywgaSwgcik7Cit9CisKK3ZvaWQgUmVuZGVy
VGhlbWVRU3R5bGU6OnNldFBvcHVwUGFkZGluZyhSZW5kZXJTdHlsZSogc3R5bGUpIGNvbnN0Cit7
CisgICAgY29uc3QgaW50IHBhZGRpbmdMZWZ0ID0gNDsKKyAgICBjb25zdCBpbnQgcGFkZGluZ1Jp
Z2h0ID0gc3R5bGUtPndpZHRoKCkuaXNGaXhlZCgpIHx8IHN0eWxlLT53aWR0aCgpLmlzUGVyY2Vu
dCgpID8gNSA6IDg7CisKKyAgICBzdHlsZS0+c2V0UGFkZGluZ0xlZnQoTGVuZ3RoKHBhZGRpbmdM
ZWZ0LCBGaXhlZCkpOworCisgICAgaW50IHcgPSBtX3N0eWxlSW50ZXJmYWNlLT5zaW1wbGVQaXhl
bE1ldHJpYyhRU3R5bGVJbnRlcmZhY2U6OlBNX0J1dHRvbkljb25TaXplKTsKKyAgICBzdHlsZS0+
c2V0UGFkZGluZ1JpZ2h0KExlbmd0aChwYWRkaW5nUmlnaHQgKyB3LCBGaXhlZCkpOworCisgICAg
c3R5bGUtPnNldFBhZGRpbmdUb3AoTGVuZ3RoKDIsIEZpeGVkKSk7CisgICAgc3R5bGUtPnNldFBh
ZGRpbmdCb3R0b20oTGVuZ3RoKDIsIEZpeGVkKSk7Cit9CisKK1FQYWxldHRlIFJlbmRlclRoZW1l
UVN0eWxlOjpjb2xvclBhbGV0dGUoKSBjb25zdAoreworICAgIFFQYWxldHRlIHBhbGV0dGUgPSBS
ZW5kZXJUaGVtZVF0Ojpjb2xvclBhbGV0dGUoKTsKKyAgICBzZXRQYWxldHRlRnJvbVBhZ2VDbGll
bnRJZkV4aXN0cyhwYWxldHRlKTsKKyAgICByZXR1cm4gcGFsZXR0ZTsKK30KKworYm9vbCBSZW5k
ZXJUaGVtZVFTdHlsZTo6cGFpbnRNZW51TGlzdChSZW5kZXJPYmplY3QqIG8sIGNvbnN0IFBhaW50
SW5mbyYgaSwgY29uc3QgSW50UmVjdCYgcikKK3sKKyAgICBTdHlsZVBhaW50ZXJRU3R5bGUgcCh0
aGlzLCBpLCBvKTsKKyAgICBpZiAoIXAuaXNWYWxpZCgpKQorICAgICAgICByZXR1cm4gdHJ1ZTsK
KworICAgIHAuc3R5bGVPcHRpb24ucmVjdCA9IHI7CisgICAgcC5wYWludENvbWJvQm94KCk7Cisg
ICAgcmV0dXJuIGZhbHNlOworfQorCit2b2lkIFJlbmRlclRoZW1lUVN0eWxlOjphZGp1c3RNZW51
TGlzdEJ1dHRvblN0eWxlKFN0eWxlUmVzb2x2ZXIqIHN0eWxlUmVzb2x2ZXIsIFJlbmRlclN0eWxl
KiBzdHlsZSwgRWxlbWVudCogZSkgY29uc3QKK3sKKyAgICAvLyBXT1JLQVJPVU5EIGJlY2F1c2Ug
aHRtbC5jc3Mgc3BlY2lmaWVzIC13ZWJraXQtYm9yZGVyLXJhZGl1cyBmb3IgPHNlbGVjdD4gc28g
d2Ugb3ZlcnJpZGUgaXQgaGVyZQorICAgIC8vIHNlZSBhbHNvIGh0dHA6Ly9idWdzLndlYmtpdC5v
cmcvc2hvd19idWcuY2dpP2lkPTE4Mzk5CisgICAgc3R5bGUtPnJlc2V0Qm9yZGVyUmFkaXVzKCk7
CisKKyAgICBSZW5kZXJUaGVtZVF0OjphZGp1c3RNZW51TGlzdEJ1dHRvblN0eWxlKHN0eWxlUmVz
b2x2ZXIsIHN0eWxlLCBlKTsKK30KKworYm9vbCBSZW5kZXJUaGVtZVFTdHlsZTo6cGFpbnRNZW51
TGlzdEJ1dHRvbihSZW5kZXJPYmplY3QqIG8sIGNvbnN0IFBhaW50SW5mbyYgaSwKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgSW50UmVjdCYgcikKK3sK
KyAgICBTdHlsZVBhaW50ZXJRU3R5bGUgcCh0aGlzLCBpLCBvKTsKKyAgICBpZiAoIXAuaXNWYWxp
ZCgpKQorICAgICAgICByZXR1cm4gdHJ1ZTsKKworICAgIHAuc3R5bGVPcHRpb24ucmVjdCA9IHI7
CisgICAgcC5wYWludENvbWJvQm94QXJyb3coKTsKKyAgICByZXR1cm4gZmFsc2U7Cit9CisKKyNp
ZiBFTkFCTEUoUFJPR1JFU1NfRUxFTUVOVCkKK2RvdWJsZSBSZW5kZXJUaGVtZVFTdHlsZTo6YW5p
bWF0aW9uRHVyYXRpb25Gb3JQcm9ncmVzc0JhcihSZW5kZXJQcm9ncmVzcyogcmVuZGVyUHJvZ3Jl
c3MpIGNvbnN0Cit7CisgICAgaWYgKHJlbmRlclByb2dyZXNzLT5wb3NpdGlvbigpID49IDApCisg
ICAgICAgIHJldHVybiAwOworCisgICAgSW50U2l6ZSBzaXplID0gcmVuZGVyUHJvZ3Jlc3MtPnBp
eGVsU25hcHBlZFNpemUoKTsKKyAgICAvLyBGSVhNRTogVW50aWwgaHR0cDovL2J1Z3JlcG9ydHMu
cXQubm9raWEuY29tL2Jyb3dzZS9RVEJVRy05MTcxIGlzIGZpeGVkLAorICAgIC8vIHdlIHNpbXVs
YXRlIG9uZSBzcXVhcmUgYW5pbWF0aW5nIGFjcm9zcyB0aGUgcHJvZ3Jlc3MgYmFyLgorICAgIHJl
dHVybiAoc2l6ZS53aWR0aCgpIC8gbV9zdHlsZUludGVyZmFjZS0+cHJvZ3Jlc3NCYXJDaHVua1dp
ZHRoKHNpemUpKSAqIGFuaW1hdGlvblJlcGVhdEludGVydmFsRm9yUHJvZ3Jlc3NCYXIocmVuZGVy
UHJvZ3Jlc3MpOworfQorCitib29sIFJlbmRlclRoZW1lUVN0eWxlOjpwYWludFByb2dyZXNzQmFy
KFJlbmRlck9iamVjdCogbywgY29uc3QgUGFpbnRJbmZvJiBwaSwgY29uc3QgSW50UmVjdCYgcikK
K3sKKyAgICBpZiAoIW8tPmlzUHJvZ3Jlc3MoKSkKKyAgICAgICAgcmV0dXJuIHRydWU7CisKKyAg
ICBTdHlsZVBhaW50ZXJRU3R5bGUgcCh0aGlzLCBwaSwgbyk7CisgICAgaWYgKCFwLmlzVmFsaWQo
KSkKKyAgICAgICAgcmV0dXJuIHRydWU7CisKKyAgICBwLnN0eWxlT3B0aW9uLnJlY3QgPSByOwor
ICAgIFJlbmRlclByb2dyZXNzKiByZW5kZXJQcm9ncmVzcyA9IHRvUmVuZGVyUHJvZ3Jlc3Mobyk7
CisgICAgcC5wYWludFByb2dyZXNzQmFyKHJlbmRlclByb2dyZXNzLT5wb3NpdGlvbigpLCByZW5k
ZXJQcm9ncmVzcy0+YW5pbWF0aW9uUHJvZ3Jlc3MoKSk7CisgICAgcmV0dXJuIGZhbHNlOworfQor
I2VuZGlmCisKK2Jvb2wgUmVuZGVyVGhlbWVRU3R5bGU6OnBhaW50U2xpZGVyVHJhY2soUmVuZGVy
T2JqZWN0KiBvLCBjb25zdCBQYWludEluZm8mIHBpLAorICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBjb25zdCBJbnRSZWN0JiByKQoreworICAgIFN0eWxlUGFpbnRlclFT
dHlsZSBwKHRoaXMsIHBpLCBvKTsKKyAgICBpZiAoIXAuaXNWYWxpZCgpKQorICAgICAgICByZXR1
cm4gdHJ1ZTsKKworICAgIGNvbnN0IFFQb2ludCB0b3BMZWZ0ID0gci5sb2NhdGlvbigpOworICAg
IHAucGFpbnRlci0+dHJhbnNsYXRlKHRvcExlZnQpOworCisgICAgcC5zdHlsZU9wdGlvbi5yZWN0
ID0gcjsKKyAgICBwLnN0eWxlT3B0aW9uLnJlY3QubW92ZVRvKFFQb2ludCgwLCAwKSk7CisKKyAg
ICBpZiAocC5hcHBlYXJhbmNlID09IFNsaWRlclZlcnRpY2FsUGFydCkKKyAgICAgICAgcC5zdHls
ZU9wdGlvbi5zbGlkZXIub3JpZW50YXRpb24gPSBRdDo6VmVydGljYWw7CisKKyAgICBpZiAoaXNQ
cmVzc2VkKG8pKQorICAgICAgICBwLnN0eWxlT3B0aW9uLnN0YXRlIHw9IFFTdHlsZUludGVyZmFj
ZTo6U3RhdGVfU3Vua2VuOworCisgICAgLy8gc29tZSBzdHlsZXMgbmVlZCB0aGlzIHRvIHNob3cg
YSBoaWdobGlnaHQgb24gb25lIHNpZGUgb2YgdGhlIGdyb292ZQorICAgIEhUTUxJbnB1dEVsZW1l
bnQqIHNsaWRlciA9IG8tPm5vZGUoKS0+dG9JbnB1dEVsZW1lbnQoKTsKKyAgICBpZiAoc2xpZGVy
KSB7CisgICAgICAgIHAuc3R5bGVPcHRpb24uc2xpZGVyLnVwc2lkZURvd24gPSAocC5hcHBlYXJh
bmNlID09IFNsaWRlckhvcml6b250YWxQYXJ0KSAmJiAhby0+c3R5bGUoKS0+aXNMZWZ0VG9SaWdo
dERpcmVjdGlvbigpOworICAgICAgICAvLyBVc2UgdGhlIHdpZHRoIGFzIGEgbXVsdGlwbGllciBp
biBjYXNlIHRoZSBzbGlkZXIgdmFsdWVzIGFyZSA8PSAxCisgICAgICAgIGNvbnN0IGludCB3aWR0
aCA9IHIud2lkdGgoKSA+IDAgPyByLndpZHRoKCkgOiAxMDA7CisgICAgICAgIHAuc3R5bGVPcHRp
b24uc2xpZGVyLm1heGltdW0gPSBzbGlkZXItPm1heGltdW0oKSAqIHdpZHRoOworICAgICAgICBw
LnN0eWxlT3B0aW9uLnNsaWRlci5taW5pbXVtID0gc2xpZGVyLT5taW5pbXVtKCkgKiB3aWR0aDsK
KyAgICAgICAgaWYgKCFwLnN0eWxlT3B0aW9uLnNsaWRlci51cHNpZGVEb3duKQorICAgICAgICAg
ICAgcC5zdHlsZU9wdGlvbi5zbGlkZXIucG9zaXRpb24gPSBzbGlkZXItPnZhbHVlQXNOdW1iZXIo
KSAqIHdpZHRoOworICAgICAgICBlbHNlCisgICAgICAgICAgICBwLnN0eWxlT3B0aW9uLnNsaWRl
ci5wb3NpdGlvbiA9IHAuc3R5bGVPcHRpb24uc2xpZGVyLm1pbmltdW0gKyBwLnN0eWxlT3B0aW9u
LnNsaWRlci5tYXhpbXVtIC0gc2xpZGVyLT52YWx1ZUFzTnVtYmVyKCkgKiB3aWR0aDsKKyAgICB9
CisKKyAgICBwLnBhaW50U2xpZGVyVHJhY2soKTsKKworICAgIHAucGFpbnRlci0+dHJhbnNsYXRl
KC10b3BMZWZ0KTsKKyAgICByZXR1cm4gZmFsc2U7Cit9CisKK3ZvaWQgUmVuZGVyVGhlbWVRU3R5
bGU6OmFkanVzdFNsaWRlclRyYWNrU3R5bGUoU3R5bGVSZXNvbHZlciosIFJlbmRlclN0eWxlKiBz
dHlsZSwgRWxlbWVudCopIGNvbnN0Cit7CisgICAgc3R5bGUtPnNldEJveFNoYWRvdyhudWxscHRy
KTsKK30KKworYm9vbCBSZW5kZXJUaGVtZVFTdHlsZTo6cGFpbnRTbGlkZXJUaHVtYihSZW5kZXJP
YmplY3QqIG8sIGNvbnN0IFBhaW50SW5mbyYgcGksCisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIGNvbnN0IEludFJlY3QmIHIpCit7CisgICAgU3R5bGVQYWludGVyUVN0
eWxlIHAodGhpcywgcGksIG8pOworICAgIGlmICghcC5pc1ZhbGlkKCkpCisgICAgICAgIHJldHVy
biB0cnVlOworCisgICAgY29uc3QgUVBvaW50IHRvcExlZnQgPSByLmxvY2F0aW9uKCk7CisgICAg
cC5wYWludGVyLT50cmFuc2xhdGUodG9wTGVmdCk7CisKKyAgICBwLnN0eWxlT3B0aW9uLnJlY3Qg
PSByOworICAgIHAuc3R5bGVPcHRpb24ucmVjdC5tb3ZlVG8oUVBvaW50KDAsIDApKTsKKyAgICBw
LnN0eWxlT3B0aW9uLnNsaWRlci5vcmllbnRhdGlvbiA9IFF0OjpIb3Jpem9udGFsOworICAgIGlm
IChwLmFwcGVhcmFuY2UgPT0gU2xpZGVyVGh1bWJWZXJ0aWNhbFBhcnQpCisgICAgICAgIHAuc3R5
bGVPcHRpb24uc2xpZGVyLm9yaWVudGF0aW9uID0gUXQ6OlZlcnRpY2FsOworICAgIGlmIChpc1By
ZXNzZWQobykpCisgICAgICAgIHAuc3R5bGVPcHRpb24uc3RhdGUgfD0gUVN0eWxlSW50ZXJmYWNl
OjpTdGF0ZV9TdW5rZW47CisKKyAgICBwLnBhaW50U2xpZGVyVGh1bWIoKTsKKworICAgIHAucGFp
bnRlci0+dHJhbnNsYXRlKC10b3BMZWZ0KTsKKyAgICByZXR1cm4gZmFsc2U7Cit9CisKK3ZvaWQg
UmVuZGVyVGhlbWVRU3R5bGU6OmFkanVzdFNsaWRlclRodW1iU3R5bGUoU3R5bGVSZXNvbHZlciog
c3R5bGVSZXNvbHZlciwgUmVuZGVyU3R5bGUqIHN0eWxlLCBFbGVtZW50KiBlbGVtZW50KSBjb25z
dAoreworICAgIFJlbmRlclRoZW1lOjphZGp1c3RTbGlkZXJUaHVtYlN0eWxlKHN0eWxlUmVzb2x2
ZXIsIHN0eWxlLCBlbGVtZW50KTsKKyAgICBzdHlsZS0+c2V0Qm94U2hhZG93KG51bGxwdHIpOwor
fQorCitib29sIFJlbmRlclRoZW1lUVN0eWxlOjpwYWludFNlYXJjaEZpZWxkKFJlbmRlck9iamVj
dCogbywgY29uc3QgUGFpbnRJbmZvJiBwaSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgY29uc3QgSW50UmVjdCYgcikKK3sKKyAgICByZXR1cm4gcGFpbnRUZXh0Rmll
bGQobywgcGksIHIpOworfQorCit2b2lkIFJlbmRlclRoZW1lUVN0eWxlOjphZGp1c3RTZWFyY2hG
aWVsZERlY29yYXRpb25TdHlsZShTdHlsZVJlc29sdmVyKiBzdHlsZVJlc29sdmVyLCBSZW5kZXJT
dHlsZSogc3R5bGUsIEVsZW1lbnQqIGUpIGNvbnN0Cit7CisgICAgbm90SW1wbGVtZW50ZWQoKTsK
KyAgICBSZW5kZXJUaGVtZTo6YWRqdXN0U2VhcmNoRmllbGREZWNvcmF0aW9uU3R5bGUoc3R5bGVS
ZXNvbHZlciwgc3R5bGUsIGUpOworfQorCitib29sIFJlbmRlclRoZW1lUVN0eWxlOjpwYWludFNl
YXJjaEZpZWxkRGVjb3JhdGlvbihSZW5kZXJPYmplY3QqIG8sIGNvbnN0IFBhaW50SW5mbyYgcGks
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25z
dCBJbnRSZWN0JiByKQoreworICAgIG5vdEltcGxlbWVudGVkKCk7CisgICAgcmV0dXJuIFJlbmRl
clRoZW1lOjpwYWludFNlYXJjaEZpZWxkRGVjb3JhdGlvbihvLCBwaSwgcik7Cit9CisKK3ZvaWQg
UmVuZGVyVGhlbWVRU3R5bGU6OmFkanVzdFNlYXJjaEZpZWxkUmVzdWx0c0RlY29yYXRpb25TdHls
ZShTdHlsZVJlc29sdmVyKiBzdHlsZVJlc29sdmVyLCBSZW5kZXJTdHlsZSogc3R5bGUsIEVsZW1l
bnQqIGUpIGNvbnN0Cit7CisgICAgbm90SW1wbGVtZW50ZWQoKTsKKyAgICBSZW5kZXJUaGVtZTo6
YWRqdXN0U2VhcmNoRmllbGRSZXN1bHRzRGVjb3JhdGlvblN0eWxlKHN0eWxlUmVzb2x2ZXIsIHN0
eWxlLCBlKTsKK30KKworYm9vbCBSZW5kZXJUaGVtZVFTdHlsZTo6cGFpbnRTZWFyY2hGaWVsZFJl
c3VsdHNEZWNvcmF0aW9uKFJlbmRlck9iamVjdCogbywgY29uc3QgUGFpbnRJbmZvJiBwaSwKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBj
b25zdCBJbnRSZWN0JiByKQoreworICAgIG5vdEltcGxlbWVudGVkKCk7CisgICAgcmV0dXJuIFJl
bmRlclRoZW1lOjpwYWludFNlYXJjaEZpZWxkUmVzdWx0c0RlY29yYXRpb24obywgcGksIHIpOwor
fQorCisjaWZuZGVmIFFUX05PX1NQSU5CT1gKKworYm9vbCBSZW5kZXJUaGVtZVFTdHlsZTo6cGFp
bnRJbm5lclNwaW5CdXR0b24oUmVuZGVyT2JqZWN0KiBvLCBjb25zdCBQYWludEluZm8mIHBhaW50
SW5mbywgY29uc3QgSW50UmVjdCYgcmVjdCkKK3sKKyAgICBTdHlsZVBhaW50ZXJRU3R5bGUgcCh0
aGlzLCBwYWludEluZm8sIG8pOworICAgIGlmICghcC5pc1ZhbGlkKCkpCisgICAgICAgIHJldHVy
biB0cnVlOworCisgICAgcC5zdHlsZU9wdGlvbi5yZWN0ID0gcmVjdDsKKyAgICBwLnBhaW50SW5u
ZXJTcGluQnV0dG9uKGlzU3BpblVwQnV0dG9uUGFydFByZXNzZWQobykpOworICAgIHJldHVybiBm
YWxzZTsKK30KKyNlbmRpZgorCitDb250cm9sUGFydCBSZW5kZXJUaGVtZVFTdHlsZTo6aW5pdGlh
bGl6ZUNvbW1vblFTdHlsZU9wdGlvbnMoUVN0eWxlSW50ZXJmYWNlT3B0aW9uICZvcHRpb24sIFJl
bmRlck9iamVjdCogbykgY29uc3QKK3sKKyAgICAvLyBEZWZhdWx0IGJpdHM6IG5vIGZvY3VzLCBu
byBtb3VzZSBvdmVyCisgICAgb3B0aW9uLnN0YXRlICY9IH4oUVN0eWxlSW50ZXJmYWNlOjpTdGF0
ZV9IYXNGb2N1cyB8IFFTdHlsZUludGVyZmFjZTo6U3RhdGVfTW91c2VPdmVyKTsKKworICAgIGlm
IChpc1JlYWRPbmx5Q29udHJvbChvKSkKKyAgICAgICAgLy8gUmVhZG9ubHkgaXMgc3VwcG9ydGVk
IG9uIHRleHRmaWVsZHMuCisgICAgICAgIG9wdGlvbi5zdGF0ZSB8PSBRU3R5bGVJbnRlcmZhY2U6
OlN0YXRlX1JlYWRPbmx5OworCisgICAgb3B0aW9uLmRpcmVjdGlvbiA9IFF0OjpMZWZ0VG9SaWdo
dDsKKworICAgIGlmIChpc0hvdmVyZWQobykpCisgICAgICAgIG9wdGlvbi5zdGF0ZSB8PSBRU3R5
bGVJbnRlcmZhY2U6OlN0YXRlX01vdXNlT3ZlcjsKKworICAgIHNldFBhbGV0dGVGcm9tUGFnZUNs
aWVudElmRXhpc3RzKG9wdGlvbi5wYWxldHRlKTsKKworICAgIGlmICghaXNFbmFibGVkKG8pKSB7
CisgICAgICAgIG9wdGlvbi5wYWxldHRlLnNldEN1cnJlbnRDb2xvckdyb3VwKFFQYWxldHRlOjpE
aXNhYmxlZCk7CisgICAgICAgIG9wdGlvbi5zdGF0ZSAmPSB+UVN0eWxlSW50ZXJmYWNlOjpTdGF0
ZV9FbmFibGVkOworICAgIH0KKworICAgIFJlbmRlclN0eWxlKiBzdHlsZSA9IG8tPnN0eWxlKCk7
CisgICAgaWYgKCFzdHlsZSkKKyAgICAgICAgcmV0dXJuIE5vQ29udHJvbFBhcnQ7CisKKyAgICBD
b250cm9sUGFydCByZXN1bHQgPSBzdHlsZS0+YXBwZWFyYW5jZSgpOworICAgIGlmIChzdXBwb3J0
c0ZvY3VzKHJlc3VsdCkgJiYgaXNGb2N1c2VkKG8pKSB7CisgICAgICAgIG9wdGlvbi5zdGF0ZSB8
PSBRU3R5bGVJbnRlcmZhY2U6OlN0YXRlX0hhc0ZvY3VzOworICAgICAgICBvcHRpb24uc3RhdGUg
fD0gUVN0eWxlSW50ZXJmYWNlOjpTdGF0ZV9LZXlib2FyZEZvY3VzQ2hhbmdlOworICAgIH0KKwor
ICAgIGlmIChzdHlsZS0+ZGlyZWN0aW9uKCkgPT0gV2ViQ29yZTo6UlRMKQorICAgICAgICBvcHRp
b24uZGlyZWN0aW9uID0gUXQ6OlJpZ2h0VG9MZWZ0OworCisgICAgc3dpdGNoIChyZXN1bHQpIHsK
KyAgICBjYXNlIFB1c2hCdXR0b25QYXJ0OgorICAgIGNhc2UgU3F1YXJlQnV0dG9uUGFydDoKKyAg
ICBjYXNlIEJ1dHRvblBhcnQ6CisgICAgY2FzZSBCdXR0b25CZXZlbFBhcnQ6CisgICAgY2FzZSBM
aXN0SXRlbVBhcnQ6CisgICAgY2FzZSBNZW51bGlzdEJ1dHRvblBhcnQ6CisgICAgY2FzZSBJbm5l
clNwaW5CdXR0b25QYXJ0OgorICAgIGNhc2UgU2VhcmNoRmllbGRSZXN1bHRzQnV0dG9uUGFydDoK
KyAgICBjYXNlIFNlYXJjaEZpZWxkQ2FuY2VsQnV0dG9uUGFydDogeworICAgICAgICBpZiAoaXNQ
cmVzc2VkKG8pKQorICAgICAgICAgICAgb3B0aW9uLnN0YXRlIHw9IFFTdHlsZUludGVyZmFjZTo6
U3RhdGVfU3Vua2VuOworICAgICAgICBlbHNlIGlmIChyZXN1bHQgPT0gUHVzaEJ1dHRvblBhcnQg
fHwgcmVzdWx0ID09IEJ1dHRvblBhcnQpCisgICAgICAgICAgICBvcHRpb24uc3RhdGUgfD0gUVN0
eWxlSW50ZXJmYWNlOjpTdGF0ZV9SYWlzZWQ7CisgICAgICAgIGJyZWFrOworICAgIH0KKyAgICBj
YXNlIFJhZGlvUGFydDoKKyAgICBjYXNlIENoZWNrYm94UGFydDoKKyAgICAgICAgb3B0aW9uLnN0
YXRlIHw9IChpc0NoZWNrZWQobykgPyBRU3R5bGVJbnRlcmZhY2U6OlN0YXRlX09uIDogUVN0eWxl
SW50ZXJmYWNlOjpTdGF0ZV9PZmYpOworICAgIH0KKworICAgIHJldHVybiByZXN1bHQ7Cit9CisK
K3ZvaWQgUmVuZGVyVGhlbWVRU3R5bGU6OmFkanVzdFNsaWRlclRodW1iU2l6ZShSZW5kZXJTdHls
ZSogc3R5bGUsIEVsZW1lbnQqIGVsZW1lbnQpIGNvbnN0Cit7CisgICAgY29uc3QgQ29udHJvbFBh
cnQgcGFydCA9IHN0eWxlLT5hcHBlYXJhbmNlKCk7CisgICAgaWYgKHBhcnQgPT0gU2xpZGVyVGh1
bWJIb3Jpem9udGFsUGFydCB8fCBwYXJ0ID09IFNsaWRlclRodW1iVmVydGljYWxQYXJ0KSB7Cisg
ICAgICAgIFF0OjpPcmllbnRhdGlvbiBvcmllbnRhdGlvbiA9IFF0OjpIb3Jpem9udGFsOworICAg
ICAgICBpZiAocGFydCA9PSBTbGlkZXJUaHVtYlZlcnRpY2FsUGFydCkKKyAgICAgICAgICAgIG9y
aWVudGF0aW9uID0gUXQ6OlZlcnRpY2FsOworCisgICAgICAgIGludCBsZW5ndGggPSBtX3N0eWxl
SW50ZXJmYWNlLT5zbGlkZXJMZW5ndGgob3JpZW50YXRpb24pOworICAgICAgICBpbnQgdGhpY2tu
ZXNzID0gbV9zdHlsZUludGVyZmFjZS0+c2xpZGVyVGhpY2tuZXNzKG9yaWVudGF0aW9uKTsKKyAg
ICAgICAgaWYgKG9yaWVudGF0aW9uID09IFF0OjpWZXJ0aWNhbCkgeworICAgICAgICAgICAgc3R5
bGUtPnNldFdpZHRoKExlbmd0aCh0aGlja25lc3MsIEZpeGVkKSk7CisgICAgICAgICAgICBzdHls
ZS0+c2V0SGVpZ2h0KExlbmd0aChsZW5ndGgsIEZpeGVkKSk7CisgICAgICAgIH0gZWxzZSB7Cisg
ICAgICAgICAgICBzdHlsZS0+c2V0V2lkdGgoTGVuZ3RoKGxlbmd0aCwgRml4ZWQpKTsKKyAgICAg
ICAgICAgIHN0eWxlLT5zZXRIZWlnaHQoTGVuZ3RoKHRoaWNrbmVzcywgRml4ZWQpKTsKKyAgICAg
ICAgfQorICAgIH0gZWxzZQorICAgICAgICBSZW5kZXJUaGVtZVF0OjphZGp1c3RTbGlkZXJUaHVt
YlNpemUoc3R5bGUsIGVsZW1lbnQpOworfQorCit9CisKKy8vIHZpbTogdHM9NCBzdz00IGV0CmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9xdC9SZW5kZXJUaGVtZVFTdHlsZS5o
IGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vcXQvUmVuZGVyVGhlbWVRU3R5bGUuaApuZXcgZmls
ZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwLi41YzczMDQzOWMxOTgwZmE3ODhjNTc3MDI3MzlkMzgwODhmZWQ0YzcwCi0tLSAvZGV2L251
bGwKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vcXQvUmVuZGVyVGhlbWVRU3R5bGUuaApA
QCAtMCwwICsxLDE1OSBAQAorLyoKKyAqIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSB0aGVtZSBp
bXBsZW1lbnRhdGlvbiBmb3IgZm9ybSBjb250cm9scyBpbiBXZWJDb3JlLgorICoKKyAqIENvcHly
aWdodCAoQykgMjAxMS0yMDEyIE5va2lhIENvcnBvcmF0aW9uIGFuZC9vciBpdHMgc3Vic2lkaWFy
eSgtaWVzKS4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiBy
ZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRo
ZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkg
dGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiB2ZXJzaW9uIDIgb2YgdGhl
IExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICog
VGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1
c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1w
bGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFS
VElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMg
TGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZl
ZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFs
b25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3Qs
IHdyaXRlIHRvCisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFu
a2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAorICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0Eu
CisgKgorICovCisjaWZuZGVmIFJlbmRlclRoZW1lUVN0eWxlX2gKKyNkZWZpbmUgUmVuZGVyVGhl
bWVRU3R5bGVfaAorCisjaW5jbHVkZSAiUVN0eWxlSW50ZXJmYWNlLmgiCisjaW5jbHVkZSAiUmVu
ZGVyVGhlbWVRdC5oIgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK2NsYXNzIFNjcm9sbGJhclRo
ZW1lUVN0eWxlOworCitjbGFzcyBQYWdlOworY2xhc3MgUVN0eWxlSW50ZXJmYWNlOworc3RydWN0
IFFTdHlsZUludGVyZmFjZU9wdGlvbjsKKwordHlwZWRlZiBRU3R5bGVJbnRlcmZhY2UqICgqUXRT
dHlsZUZhY3RvcnlGdW5jdGlvbikoUGFnZSopOworCitjbGFzcyBSZW5kZXJUaGVtZVFTdHlsZSA6
IHB1YmxpYyBSZW5kZXJUaGVtZVF0IHsKK3ByaXZhdGU6CisgICAgZnJpZW5kIGNsYXNzIFN0eWxl
UGFpbnRlclFTdHlsZTsKKworICAgIFJlbmRlclRoZW1lUVN0eWxlKFBhZ2UqKTsKKyAgICB2aXJ0
dWFsIH5SZW5kZXJUaGVtZVFTdHlsZSgpOworCitwdWJsaWM6CisgICAgc3RhdGljIFBhc3NSZWZQ
dHI8UmVuZGVyVGhlbWU+IGNyZWF0ZShQYWdlKik7CisKKyAgICBzdGF0aWMgdm9pZCBzZXRTdHls
ZUZhY3RvcnlGdW5jdGlvbihRdFN0eWxlRmFjdG9yeUZ1bmN0aW9uKTsKKyAgICBzdGF0aWMgUXRT
dHlsZUZhY3RvcnlGdW5jdGlvbiBzdHlsZUZhY3RvcnkoKTsKKworICAgIHZpcnR1YWwgdm9pZCBh
ZGp1c3RTbGlkZXJUaHVtYlNpemUoUmVuZGVyU3R5bGUqLCBFbGVtZW50KikgY29uc3Q7CisKKyAg
ICBRU3R5bGVJbnRlcmZhY2UqIHN0eWxlSW50ZXJmYWNlKCkgeyByZXR1cm4gbV9zdHlsZUludGVy
ZmFjZS5nZXQoKTsgfQorCitwcm90ZWN0ZWQ6CisgICAgdmlydHVhbCB2b2lkIGFkanVzdEJ1dHRv
blN0eWxlKFN0eWxlUmVzb2x2ZXIqLCBSZW5kZXJTdHlsZSosIEVsZW1lbnQqKSBjb25zdDsKKyAg
ICB2aXJ0dWFsIGJvb2wgcGFpbnRCdXR0b24oUmVuZGVyT2JqZWN0KiwgY29uc3QgUGFpbnRJbmZv
JiwgY29uc3QgSW50UmVjdCYpOworCisgICAgdmlydHVhbCBib29sIHBhaW50VGV4dEZpZWxkKFJl
bmRlck9iamVjdCosIGNvbnN0IFBhaW50SW5mbyYsIGNvbnN0IEludFJlY3QmKTsKKworICAgIHZp
cnR1YWwgYm9vbCBwYWludFRleHRBcmVhKFJlbmRlck9iamVjdCosIGNvbnN0IFBhaW50SW5mbyYs
IGNvbnN0IEludFJlY3QmKTsKKyAgICB2aXJ0dWFsIHZvaWQgYWRqdXN0VGV4dEFyZWFTdHlsZShT
dHlsZVJlc29sdmVyKiwgUmVuZGVyU3R5bGUqLCBFbGVtZW50KikgY29uc3Q7CisKKyAgICB2aXJ0
dWFsIGJvb2wgcGFpbnRNZW51TGlzdChSZW5kZXJPYmplY3QqLCBjb25zdCBQYWludEluZm8mLCBj
b25zdCBJbnRSZWN0Jik7CisKKyAgICB2aXJ0dWFsIGJvb2wgcGFpbnRNZW51TGlzdEJ1dHRvbihS
ZW5kZXJPYmplY3QqLCBjb25zdCBQYWludEluZm8mLCBjb25zdCBJbnRSZWN0Jik7CisgICAgdmly
dHVhbCB2b2lkIGFkanVzdE1lbnVMaXN0QnV0dG9uU3R5bGUoU3R5bGVSZXNvbHZlciosIFJlbmRl
clN0eWxlKiwgRWxlbWVudCopIGNvbnN0OworCisjaWYgRU5BQkxFKFBST0dSRVNTX0VMRU1FTlQp
CisgICAgLy8gUmV0dXJucyB0aGUgZHVyYXRpb24gb2YgdGhlIGFuaW1hdGlvbiBmb3IgdGhlIHBy
b2dyZXNzIGJhci4KKyAgICB2aXJ0dWFsIGRvdWJsZSBhbmltYXRpb25EdXJhdGlvbkZvclByb2dy
ZXNzQmFyKFJlbmRlclByb2dyZXNzKikgY29uc3Q7CisgICAgdmlydHVhbCBib29sIHBhaW50UHJv
Z3Jlc3NCYXIoUmVuZGVyT2JqZWN0KiwgY29uc3QgUGFpbnRJbmZvJiwgY29uc3QgSW50UmVjdCYp
OworI2VuZGlmCisKKyAgICB2aXJ0dWFsIGJvb2wgcGFpbnRTbGlkZXJUcmFjayhSZW5kZXJPYmpl
Y3QqLCBjb25zdCBQYWludEluZm8mLCBjb25zdCBJbnRSZWN0Jik7CisgICAgdmlydHVhbCB2b2lk
IGFkanVzdFNsaWRlclRyYWNrU3R5bGUoU3R5bGVSZXNvbHZlciosIFJlbmRlclN0eWxlKiwgRWxl
bWVudCopIGNvbnN0OworCisgICAgdmlydHVhbCBib29sIHBhaW50U2xpZGVyVGh1bWIoUmVuZGVy
T2JqZWN0KiwgY29uc3QgUGFpbnRJbmZvJiwgY29uc3QgSW50UmVjdCYpOworICAgIHZpcnR1YWwg
dm9pZCBhZGp1c3RTbGlkZXJUaHVtYlN0eWxlKFN0eWxlUmVzb2x2ZXIqLCBSZW5kZXJTdHlsZSos
IEVsZW1lbnQqKSBjb25zdDsKKworICAgIHZpcnR1YWwgYm9vbCBwYWludFNlYXJjaEZpZWxkKFJl
bmRlck9iamVjdCosIGNvbnN0IFBhaW50SW5mbyYsIGNvbnN0IEludFJlY3QmKTsKKworICAgIHZp
cnR1YWwgdm9pZCBhZGp1c3RTZWFyY2hGaWVsZERlY29yYXRpb25TdHlsZShTdHlsZVJlc29sdmVy
KiwgUmVuZGVyU3R5bGUqLCBFbGVtZW50KikgY29uc3Q7CisgICAgdmlydHVhbCBib29sIHBhaW50
U2VhcmNoRmllbGREZWNvcmF0aW9uKFJlbmRlck9iamVjdCosIGNvbnN0IFBhaW50SW5mbyYsIGNv
bnN0IEludFJlY3QmKTsKKworICAgIHZpcnR1YWwgdm9pZCBhZGp1c3RTZWFyY2hGaWVsZFJlc3Vs
dHNEZWNvcmF0aW9uU3R5bGUoU3R5bGVSZXNvbHZlciosIFJlbmRlclN0eWxlKiwgRWxlbWVudCop
IGNvbnN0OworICAgIHZpcnR1YWwgYm9vbCBwYWludFNlYXJjaEZpZWxkUmVzdWx0c0RlY29yYXRp
b24oUmVuZGVyT2JqZWN0KiwgY29uc3QgUGFpbnRJbmZvJiwgY29uc3QgSW50UmVjdCYpOworCisj
aWZuZGVmIFFUX05PX1NQSU5CT1gKKyAgICB2aXJ0dWFsIGJvb2wgcGFpbnRJbm5lclNwaW5CdXR0
b24oUmVuZGVyT2JqZWN0KiwgY29uc3QgUGFpbnRJbmZvJiwgY29uc3QgSW50UmVjdCYpOworI2Vu
ZGlmCisKK3Byb3RlY3RlZDoKKyAgICB2aXJ0dWFsIHZvaWQgY29tcHV0ZVNpemVCYXNlZE9uU3R5
bGUoUmVuZGVyU3R5bGUqKSBjb25zdDsKKworICAgIHZpcnR1YWwgUVNoYXJlZFBvaW50ZXI8U3R5
bGVQYWludGVyPiBnZXRTdHlsZVBhaW50ZXIoY29uc3QgUGFpbnRJbmZvJik7CisKKyAgICB2aXJ0
dWFsIFFSZWN0IGluZmxhdGVCdXR0b25SZWN0KGNvbnN0IFFSZWN0JiBvcmlnaW5hbFJlY3QpIGNv
bnN0OworCisgICAgdmlydHVhbCB2b2lkIHNldFBvcHVwUGFkZGluZyhSZW5kZXJTdHlsZSopIGNv
bnN0OworCisgICAgdmlydHVhbCBRUGFsZXR0ZSBjb2xvclBhbGV0dGUoKSBjb25zdDsKKworcHJp
dmF0ZToKKyAgICBDb250cm9sUGFydCBpbml0aWFsaXplQ29tbW9uUVN0eWxlT3B0aW9ucyhRU3R5
bGVJbnRlcmZhY2VPcHRpb24mLCBSZW5kZXJPYmplY3QqKSBjb25zdDsKKworICAgIHZvaWQgc2V0
QnV0dG9uUGFkZGluZyhSZW5kZXJTdHlsZSopIGNvbnN0OworCisgICAgdm9pZCBzZXRQYWxldHRl
RnJvbVBhZ2VDbGllbnRJZkV4aXN0cyhRUGFsZXR0ZSYpIGNvbnN0OworCisjaWZkZWYgUV9PU19N
QUMKKyAgICBpbnQgbV9idXR0b25Gb250UGl4ZWxTaXplOworI2VuZGlmCisKKyAgICBPd25QdHI8
UVN0eWxlSW50ZXJmYWNlPiBtX3N0eWxlSW50ZXJmYWNlOworfTsKKworY2xhc3MgU3R5bGVQYWlu
dGVyUVN0eWxlIDogcHVibGljIFN0eWxlUGFpbnRlciB7CitwdWJsaWM6CisgICAgZXhwbGljaXQg
U3R5bGVQYWludGVyUVN0eWxlKFJlbmRlclRoZW1lUVN0eWxlKiwgY29uc3QgUGFpbnRJbmZvJiwg
UmVuZGVyT2JqZWN0Kik7CisgICAgZXhwbGljaXQgU3R5bGVQYWludGVyUVN0eWxlKFNjcm9sbGJh
clRoZW1lUVN0eWxlKiwgR3JhcGhpY3NDb250ZXh0Kik7CisKKyAgICBib29sIGlzVmFsaWQoKSBj
b25zdCB7IHJldHVybiBzdHlsZUludGVyZmFjZSAmJiBzdHlsZUludGVyZmFjZS0+aXNWYWxpZCgp
ICYmIFN0eWxlUGFpbnRlcjo6aXNWYWxpZCgpOyB9CisKKyAgICBRT2JqZWN0KiB3aWRnZXQ7Cisg
ICAgUVN0eWxlSW50ZXJmYWNlKiBzdHlsZUludGVyZmFjZTsKKyAgICBRU3R5bGVJbnRlcmZhY2VP
cHRpb24gc3R5bGVPcHRpb247CisgICAgQ29udHJvbFBhcnQgYXBwZWFyYW5jZTsKKworICAgIHZv
aWQgcGFpbnRCdXR0b24oUVN0eWxlSW50ZXJmYWNlOjpCdXR0b25UeXBlIHR5cGUpCisgICAgeyBz
dHlsZUludGVyZmFjZS0+cGFpbnRCdXR0b24ocGFpbnRlciwgdHlwZSwgc3R5bGVPcHRpb24sIHdp
ZGdldCk7IH0KKyAgICB2b2lkIHBhaW50VGV4dEZpZWxkKCkKKyAgICB7IHN0eWxlSW50ZXJmYWNl
LT5wYWludFRleHRGaWVsZChwYWludGVyLCBzdHlsZU9wdGlvbiwgd2lkZ2V0KTsgfQorICAgIHZv
aWQgcGFpbnRDb21ib0JveCgpCisgICAgeyBzdHlsZUludGVyZmFjZS0+cGFpbnRDb21ib0JveChw
YWludGVyLCBzdHlsZU9wdGlvbiwgd2lkZ2V0KTsgfQorICAgIHZvaWQgcGFpbnRDb21ib0JveEFy
cm93KCkKKyAgICB7IHN0eWxlSW50ZXJmYWNlLT5wYWludENvbWJvQm94QXJyb3cocGFpbnRlciwg
c3R5bGVPcHRpb24sIHdpZGdldCk7IH0KKyAgICB2b2lkIHBhaW50U2xpZGVyVHJhY2soKQorICAg
IHsgc3R5bGVJbnRlcmZhY2UtPnBhaW50U2xpZGVyVHJhY2socGFpbnRlciwgc3R5bGVPcHRpb24s
IHdpZGdldCk7IH0KKyAgICB2b2lkIHBhaW50U2xpZGVyVGh1bWIoKQorICAgIHsgc3R5bGVJbnRl
cmZhY2UtPnBhaW50U2xpZGVyVGh1bWIocGFpbnRlciwgc3R5bGVPcHRpb24sIHdpZGdldCk7IH0K
KyAgICB2b2lkIHBhaW50SW5uZXJTcGluQnV0dG9uKGJvb2wgc3BpbkJveFVwKQorICAgIHsgc3R5
bGVJbnRlcmZhY2UtPnBhaW50SW5uZXJTcGluQnV0dG9uKHBhaW50ZXIsIHN0eWxlT3B0aW9uLCBz
cGluQm94VXAsIHdpZGdldCk7IH0KKyAgICB2b2lkIHBhaW50UHJvZ3Jlc3NCYXIoZG91YmxlIHBy
b2dyZXNzLCBkb3VibGUgYW5pbWF0aW9uUHJvZ3Jlc3MpCisgICAgeyBzdHlsZUludGVyZmFjZS0+
cGFpbnRQcm9ncmVzc0JhcihwYWludGVyLCBzdHlsZU9wdGlvbiwgcHJvZ3Jlc3MsIGFuaW1hdGlv
blByb2dyZXNzLCB3aWRnZXQpOyB9CisgICAgdm9pZCBwYWludFNjcm9sbENvcm5lcihjb25zdCBR
UmVjdCYgcmVjdCkKKyAgICB7IHN0eWxlSW50ZXJmYWNlLT5wYWludFNjcm9sbENvcm5lcihwYWlu
dGVyLCByZWN0LCB3aWRnZXQpOyB9CisgICAgdm9pZCBwYWludFNjcm9sbEJhcigpCisgICAgeyBz
dHlsZUludGVyZmFjZS0+cGFpbnRTY3JvbGxCYXIocGFpbnRlciwgc3R5bGVPcHRpb24sIHdpZGdl
dCk7IH0KKworcHJpdmF0ZToKKyAgICB2b2lkIGluaXQoR3JhcGhpY3NDb250ZXh0Kik7CisKKyAg
ICBRX0RJU0FCTEVfQ09QWShTdHlsZVBhaW50ZXJRU3R5bGUpCit9OworCit9CisKKyNlbmRpZiAv
LyBSZW5kZXJUaGVtZVFTdHlsZV9oCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9xdC9TY3JvbGxiYXJUaGVtZVFTdHlsZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9x
dC9TY3JvbGxiYXJUaGVtZVFTdHlsZS5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uYmQ1N2I3MDVkMmYyMTJhMzQw
YWZkMGRjZjFhYzhhZDlmYWY3ZWJlZAotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL3F0L1Njcm9sbGJhclRoZW1lUVN0eWxlLmNwcApAQCAtMCwwICsxLDIyMSBAQAor
LyoKKyAqIENvcHlyaWdodCAoQykgMjAwNywgMjAwOCBBcHBsZSBJbmMuIEFsbCBSaWdodHMgUmVz
ZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDcgU3RhaWtvcyBDb21wdXRpbmcgU2VydmljZXMg
SW5jLiA8aW5mb0BzdGFpa29zLm5ldD4KKyAqIENvcHlyaWdodCAoQykgMjAwOCBOb2tpYSBDb3Jw
b3JhdGlvbiBhbmQvb3IgaXRzIHN1YnNpZGlhcnkoLWllcykKKyAqCisgKiBSZWRpc3RyaWJ1dGlv
biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAq
IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcg
Y29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2Ug
Y29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBS
ZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNv
cHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3Ro
ZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElT
IFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAq
IEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBG
SVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBO
TyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZP
UiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFS
WSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1Mg
T0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBI
T1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVS
IElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5F
R0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UK
KyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkg
T0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIlNj
cm9sbGJhclRoZW1lUVN0eWxlLmgiCisKKyNpbmNsdWRlICJHcmFwaGljc0NvbnRleHQuaCIKKyNp
bmNsdWRlICJQbGF0Zm9ybU1vdXNlRXZlbnQuaCIKKyNpbmNsdWRlICJSZW5kZXJUaGVtZVFTdHls
ZS5oIgorI2luY2x1ZGUgIlNjcm9sbFZpZXcuaCIKKyNpbmNsdWRlICJTY3JvbGxiYXIuaCIKKwor
bmFtZXNwYWNlIFdlYkNvcmUgeworCitTY3JvbGxiYXJUaGVtZVFTdHlsZTo6U2Nyb2xsYmFyVGhl
bWVRU3R5bGUoKQoreworICAgIG1fc3R5bGVJbnRlcmZhY2UgPSBhZG9wdFB0cihSZW5kZXJUaGVt
ZVFTdHlsZTo6c3R5bGVGYWN0b3J5KCkoLypwYWdlKi8gMCkpOworfQorCitTY3JvbGxiYXJUaGVt
ZVFTdHlsZTo6flNjcm9sbGJhclRoZW1lUVN0eWxlKCkKK3sKK30KKworc3RhdGljIFFTdHlsZUlu
dGVyZmFjZTo6U3ViQ29udHJvbCBzY1BhcnQoY29uc3QgU2Nyb2xsYmFyUGFydCYgcGFydCkKK3sK
KyAgICBzd2l0Y2ggKHBhcnQpIHsKKyAgICBjYXNlIE5vUGFydDoKKyAgICAgICAgcmV0dXJuIFFT
dHlsZUludGVyZmFjZTo6U0NfTm9uZTsKKyAgICBjYXNlIEJhY2tCdXR0b25TdGFydFBhcnQ6Cisg
ICAgY2FzZSBCYWNrQnV0dG9uRW5kUGFydDoKKyAgICAgICAgcmV0dXJuIFFTdHlsZUludGVyZmFj
ZTo6U0NfU2Nyb2xsQmFyU3ViTGluZTsKKyAgICBjYXNlIEJhY2tUcmFja1BhcnQ6CisgICAgICAg
IHJldHVybiBRU3R5bGVJbnRlcmZhY2U6OlNDX1Njcm9sbEJhclN1YlBhZ2U7CisgICAgY2FzZSBU
aHVtYlBhcnQ6CisgICAgICAgIHJldHVybiBRU3R5bGVJbnRlcmZhY2U6OlNDX1Njcm9sbEJhclNs
aWRlcjsKKyAgICBjYXNlIEZvcndhcmRUcmFja1BhcnQ6CisgICAgICAgIHJldHVybiBRU3R5bGVJ
bnRlcmZhY2U6OlNDX1Njcm9sbEJhckFkZFBhZ2U7CisgICAgY2FzZSBGb3J3YXJkQnV0dG9uU3Rh
cnRQYXJ0OgorICAgIGNhc2UgRm9yd2FyZEJ1dHRvbkVuZFBhcnQ6CisgICAgICAgIHJldHVybiBR
U3R5bGVJbnRlcmZhY2U6OlNDX1Njcm9sbEJhckFkZExpbmU7CisgICAgfQorCisgICAgcmV0dXJu
IFFTdHlsZUludGVyZmFjZTo6U0NfTm9uZTsKK30KKworc3RhdGljIFNjcm9sbGJhclBhcnQgc2Ny
b2xsYmFyUGFydChjb25zdCBRU3R5bGVJbnRlcmZhY2U6OlN1YkNvbnRyb2wmIHNjKQoreworICAg
IHN3aXRjaCAoc2MpIHsKKyAgICBjYXNlIFFTdHlsZUludGVyZmFjZTo6U0NfTm9uZToKKyAgICAg
ICAgcmV0dXJuIE5vUGFydDsKKyAgICBjYXNlIFFTdHlsZUludGVyZmFjZTo6U0NfU2Nyb2xsQmFy
U3ViTGluZToKKyAgICAgICAgcmV0dXJuIEJhY2tCdXR0b25TdGFydFBhcnQ7CisgICAgY2FzZSBR
U3R5bGVJbnRlcmZhY2U6OlNDX1Njcm9sbEJhclN1YlBhZ2U6CisgICAgICAgIHJldHVybiBCYWNr
VHJhY2tQYXJ0OworICAgIGNhc2UgUVN0eWxlSW50ZXJmYWNlOjpTQ19TY3JvbGxCYXJTbGlkZXI6
CisgICAgICAgIHJldHVybiBUaHVtYlBhcnQ7CisgICAgY2FzZSBRU3R5bGVJbnRlcmZhY2U6OlND
X1Njcm9sbEJhckFkZFBhZ2U6CisgICAgICAgIHJldHVybiBGb3J3YXJkVHJhY2tQYXJ0OworICAg
IGNhc2UgUVN0eWxlSW50ZXJmYWNlOjpTQ19TY3JvbGxCYXJBZGRMaW5lOgorICAgICAgICByZXR1
cm4gRm9yd2FyZEJ1dHRvblN0YXJ0UGFydDsKKyAgICB9CisgICAgcmV0dXJuIE5vUGFydDsKK30K
Kworc3RhdGljIFFTdHlsZUludGVyZmFjZU9wdGlvbiBpbml0U2xpZGVyU3R5bGVPcHRpb24oU2Ny
b2xsYmFyVGhlbWVDbGllbnQqIHNjcm9sbGJhciwgUU9iamVjdCogd2lkZ2V0ID0gMCkKK3sKKyAg
ICBRU3R5bGVJbnRlcmZhY2VPcHRpb24gb3B0OworICAgIGlmICh3aWRnZXQpIHsKKyAgICAgICAg
b3B0LnBhbGV0dGUgPSB3aWRnZXQtPnByb3BlcnR5KCJwYWxldHRlIikudmFsdWU8UVBhbGV0dGU+
KCk7CisgICAgICAgIG9wdC5yZWN0ID0gd2lkZ2V0LT5wcm9wZXJ0eSgicmVjdCIpLnZhbHVlPFFS
ZWN0PigpOworICAgICAgICBvcHQuZGlyZWN0aW9uID0gc3RhdGljX2Nhc3Q8UXQ6OkxheW91dERp
cmVjdGlvbj4od2lkZ2V0LT5wcm9wZXJ0eSgibGF5b3V0RGlyZWN0aW9uIikudG9JbnQoKSk7Cisg
ICAgfSBlbHNlCisgICAgICAgIG9wdC5zdGF0ZSB8PSBRU3R5bGVJbnRlcmZhY2U6OlN0YXRlX0Fj
dGl2ZTsKKworICAgIG9wdC5zdGF0ZSAmPSB+UVN0eWxlSW50ZXJmYWNlOjpTdGF0ZV9IYXNGb2N1
czsKKworICAgIG9wdC5yZWN0ID0gc2Nyb2xsYmFyLT5mcmFtZVJlY3QoKTsKKyAgICBpZiAoc2Ny
b2xsYmFyLT5lbmFibGVkKCkpCisgICAgICAgIG9wdC5zdGF0ZSB8PSBRU3R5bGVJbnRlcmZhY2U6
OlN0YXRlX0VuYWJsZWQ7CisgICAgaWYgKHNjcm9sbGJhci0+Y29udHJvbFNpemUoKSAhPSBSZWd1
bGFyU2Nyb2xsYmFyKQorICAgICAgICBvcHQuc3RhdGUgfD0gUVN0eWxlSW50ZXJmYWNlOjpTdGF0
ZV9NaW5pOworICAgIG9wdC5zbGlkZXIub3JpZW50YXRpb24gPSAoc2Nyb2xsYmFyLT5vcmllbnRh
dGlvbigpID09IFZlcnRpY2FsU2Nyb2xsYmFyKSA/IFF0OjpWZXJ0aWNhbCA6IFF0OjpIb3Jpem9u
dGFsOworCisgICAgaWYgKHNjcm9sbGJhci0+b3JpZW50YXRpb24oKSA9PSBIb3Jpem9udGFsU2Ny
b2xsYmFyKQorICAgICAgICBvcHQuc3RhdGUgfD0gUVN0eWxlSW50ZXJmYWNlOjpTdGF0ZV9Ib3Jp
em9udGFsOworICAgIGVsc2UKKyAgICAgICAgb3B0LnN0YXRlICY9IH5RU3R5bGVJbnRlcmZhY2U6
OlN0YXRlX0hvcml6b250YWw7CisKKyAgICBvcHQuc2xpZGVyLnZhbHVlID0gc2Nyb2xsYmFyLT52
YWx1ZSgpOworICAgIG9wdC5zbGlkZXIucG9zaXRpb24gPSBvcHQuc2xpZGVyLnZhbHVlOworICAg
IG9wdC5zbGlkZXIucGFnZVN0ZXAgPSBzY3JvbGxiYXItPnBhZ2VTdGVwKCk7CisgICAgb3B0LnNs
aWRlci5zaW5nbGVTdGVwID0gc2Nyb2xsYmFyLT5saW5lU3RlcCgpOworICAgIG9wdC5zbGlkZXIu
bWluaW11bSA9IDA7CisgICAgb3B0LnNsaWRlci5tYXhpbXVtID0gcU1heCgwLCBzY3JvbGxiYXIt
Pm1heGltdW0oKSk7CisgICAgU2Nyb2xsYmFyUGFydCBwcmVzc2VkUGFydCA9IHNjcm9sbGJhci0+
cHJlc3NlZFBhcnQoKTsKKyAgICBTY3JvbGxiYXJQYXJ0IGhvdmVyZWRQYXJ0ID0gc2Nyb2xsYmFy
LT5ob3ZlcmVkUGFydCgpOworICAgIGlmIChwcmVzc2VkUGFydCAhPSBOb1BhcnQpIHsKKyAgICAg
ICAgb3B0LnNsaWRlci5hY3RpdmVTdWJDb250cm9scyA9IHNjUGFydChzY3JvbGxiYXItPnByZXNz
ZWRQYXJ0KCkpOworICAgICAgICBpZiAocHJlc3NlZFBhcnQgPT0gQmFja0J1dHRvblN0YXJ0UGFy
dCB8fCBwcmVzc2VkUGFydCA9PSBGb3J3YXJkQnV0dG9uU3RhcnRQYXJ0CisgICAgICAgICAgICB8
fCBwcmVzc2VkUGFydCA9PSBCYWNrQnV0dG9uRW5kUGFydCB8fCBwcmVzc2VkUGFydCA9PSBGb3J3
YXJkQnV0dG9uRW5kUGFydAorICAgICAgICAgICAgfHwgcHJlc3NlZFBhcnQgPT0gVGh1bWJQYXJ0
KQorICAgICAgICAgICAgb3B0LnN0YXRlIHw9IFFTdHlsZUludGVyZmFjZTo6U3RhdGVfU3Vua2Vu
OworICAgIH0gZWxzZQorICAgICAgICBvcHQuc2xpZGVyLmFjdGl2ZVN1YkNvbnRyb2xzID0gc2NQ
YXJ0KGhvdmVyZWRQYXJ0KTsKKyAgICBpZiAoaG92ZXJlZFBhcnQgIT0gTm9QYXJ0KQorICAgICAg
ICBvcHQuc3RhdGUgfD0gUVN0eWxlSW50ZXJmYWNlOjpTdGF0ZV9Nb3VzZU92ZXI7CisgICAgcmV0
dXJuIG9wdDsKK30KKworYm9vbCBTY3JvbGxiYXJUaGVtZVFTdHlsZTo6cGFpbnQoU2Nyb2xsYmFy
VGhlbWVDbGllbnQqIHNjcm9sbGJhciwgR3JhcGhpY3NDb250ZXh0KiBncmFwaGljc0NvbnRleHQs
IGNvbnN0IEludFJlY3QmIGRpcnR5UmVjdCkKK3sKKyAgICBpZiAoZ3JhcGhpY3NDb250ZXh0LT51
cGRhdGluZ0NvbnRyb2xUaW50cygpKSB7CisgICAgICAgIHNjcm9sbGJhci0+aW52YWxpZGF0ZVJl
Y3QoZGlydHlSZWN0KTsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKworICAgIFN0eWxl
UGFpbnRlclFTdHlsZSBwKHRoaXMsIGdyYXBoaWNzQ29udGV4dCk7CisgICAgaWYgKCFwLmlzVmFs
aWQoKSkKKyAgICAgICAgcmV0dXJuIHRydWU7CisKKyAgICBwLnBhaW50ZXItPnNhdmUoKTsKKyAg
ICBwLnN0eWxlT3B0aW9uID0gaW5pdFNsaWRlclN0eWxlT3B0aW9uKHNjcm9sbGJhciwgcC53aWRn
ZXQpOworCisgICAgcC5wYWludGVyLT5zZXRDbGlwUmVjdChwLnN0eWxlT3B0aW9uLnJlY3QuaW50
ZXJzZWN0ZWQoZGlydHlSZWN0KSwgUXQ6OkludGVyc2VjdENsaXApOworICAgIHAucGFpbnRTY3Jv
bGxCYXIoKTsKKyAgICBwLnBhaW50ZXItPnJlc3RvcmUoKTsKKyAgICByZXR1cm4gdHJ1ZTsKK30K
KworU2Nyb2xsYmFyUGFydCBTY3JvbGxiYXJUaGVtZVFTdHlsZTo6aGl0VGVzdChTY3JvbGxiYXJU
aGVtZUNsaWVudCogc2Nyb2xsYmFyLCBjb25zdCBQbGF0Zm9ybU1vdXNlRXZlbnQmIGV2dCkKK3sK
KyAgICBRU3R5bGVJbnRlcmZhY2VPcHRpb24gb3B0ID0gaW5pdFNsaWRlclN0eWxlT3B0aW9uKHNj
cm9sbGJhcik7CisgICAgY29uc3QgUVBvaW50IHBvcyA9IHNjcm9sbGJhci0+Y29udmVydEZyb21D
b250YWluaW5nV2luZG93KGV2dC5wb3NpdGlvbigpKTsKKyAgICBvcHQucmVjdC5tb3ZlVG8oUVBv
aW50KDAsIDApKTsKKyAgICBRU3R5bGVJbnRlcmZhY2U6OlN1YkNvbnRyb2wgc2MgPSBtX3N0eWxl
SW50ZXJmYWNlLT5oaXRUZXN0U2Nyb2xsQmFyKG9wdCwgcG9zKTsKKyAgICByZXR1cm4gc2Nyb2xs
YmFyUGFydChzYyk7Cit9CisKK2Jvb2wgU2Nyb2xsYmFyVGhlbWVRU3R5bGU6OnNob3VsZENlbnRl
ck9uVGh1bWIoU2Nyb2xsYmFyVGhlbWVDbGllbnQqLCBjb25zdCBQbGF0Zm9ybU1vdXNlRXZlbnQm
IGV2dCkKK3sKKyAgICAvLyBNaWRkbGUgY2xpY2sgY2VudGVycyBzbGlkZXIgdGh1bWIgKGlmIHN1
cHBvcnRlZCkuCisgICAgcmV0dXJuIG1fc3R5bGVJbnRlcmZhY2UtPnNjcm9sbEJhck1pZGRsZUNs
aWNrQWJzb2x1dGVQb3NpdGlvblN0eWxlSGludCgpICYmIGV2dC5idXR0b24oKSA9PSBNaWRkbGVC
dXR0b247Cit9CisKK3ZvaWQgU2Nyb2xsYmFyVGhlbWVRU3R5bGU6OmludmFsaWRhdGVQYXJ0KFNj
cm9sbGJhclRoZW1lQ2xpZW50KiBzY3JvbGxiYXIsIFNjcm9sbGJhclBhcnQpCit7CisgICAgLy8g
RklYTUU6IERvIG1vcmUgcHJlY2lzZSBpbnZhbGlkYXRpb24uCisgICAgc2Nyb2xsYmFyLT5pbnZh
bGlkYXRlKCk7Cit9CisKK2ludCBTY3JvbGxiYXJUaGVtZVFTdHlsZTo6c2Nyb2xsYmFyVGhpY2tu
ZXNzKFNjcm9sbGJhckNvbnRyb2xTaXplIGNvbnRyb2xTaXplKQoreworICAgIGNvbnN0IGJvb2wg
bWluaSA9IGNvbnRyb2xTaXplICE9IFJlZ3VsYXJTY3JvbGxiYXI7CisgICAgcmV0dXJuIG1fc3R5
bGVJbnRlcmZhY2UtPnNjcm9sbEJhckV4dGVudChtaW5pKTsKK30KKworaW50IFNjcm9sbGJhclRo
ZW1lUVN0eWxlOjp0aHVtYlBvc2l0aW9uKFNjcm9sbGJhclRoZW1lQ2xpZW50KiBzY3JvbGxiYXIp
Cit7CisgICAgaWYgKHNjcm9sbGJhci0+ZW5hYmxlZCgpKSB7CisgICAgICAgIGZsb2F0IHBvcyA9
IChmbG9hdClzY3JvbGxiYXItPmN1cnJlbnRQb3MoKSAqICh0cmFja0xlbmd0aChzY3JvbGxiYXIp
IC0gdGh1bWJMZW5ndGgoc2Nyb2xsYmFyKSkgLyBzY3JvbGxiYXItPm1heGltdW0oKTsKKyAgICAg
ICAgcmV0dXJuIChwb3MgPCAxICYmIHBvcyA+IDApID8gMSA6IHBvczsKKyAgICB9CisgICAgcmV0
dXJuIDA7Cit9CisKK2ludCBTY3JvbGxiYXJUaGVtZVFTdHlsZTo6dGh1bWJMZW5ndGgoU2Nyb2xs
YmFyVGhlbWVDbGllbnQqIHNjcm9sbGJhcikKK3sKKyAgICBRU3R5bGVJbnRlcmZhY2VPcHRpb24g
b3B0ID0gaW5pdFNsaWRlclN0eWxlT3B0aW9uKHNjcm9sbGJhcik7CisgICAgUVJlY3QgdGh1bWIg
PSBtX3N0eWxlSW50ZXJmYWNlLT5zY3JvbGxCYXJTdWJDb250cm9sUmVjdChvcHQsIFFTdHlsZUlu
dGVyZmFjZTo6U0NfU2Nyb2xsQmFyU2xpZGVyKTsKKyAgICByZXR1cm4gc2Nyb2xsYmFyLT5vcmll
bnRhdGlvbigpID09IEhvcml6b250YWxTY3JvbGxiYXIgPyB0aHVtYi53aWR0aCgpIDogdGh1bWIu
aGVpZ2h0KCk7Cit9CisKK2ludCBTY3JvbGxiYXJUaGVtZVFTdHlsZTo6dHJhY2tQb3NpdGlvbihT
Y3JvbGxiYXJUaGVtZUNsaWVudCogc2Nyb2xsYmFyKQoreworICAgIFFTdHlsZUludGVyZmFjZU9w
dGlvbiBvcHQgPSBpbml0U2xpZGVyU3R5bGVPcHRpb24oc2Nyb2xsYmFyKTsKKyAgICBRUmVjdCB0
cmFjayA9IG1fc3R5bGVJbnRlcmZhY2UtPnNjcm9sbEJhclN1YkNvbnRyb2xSZWN0KG9wdCwgUVN0
eWxlSW50ZXJmYWNlOjpTQ19TY3JvbGxCYXJHcm9vdmUpOworICAgIHJldHVybiBzY3JvbGxiYXIt
Pm9yaWVudGF0aW9uKCkgPT0gSG9yaXpvbnRhbFNjcm9sbGJhciA/IHRyYWNrLngoKSAtIHNjcm9s
bGJhci0+eCgpIDogdHJhY2sueSgpIC0gc2Nyb2xsYmFyLT55KCk7Cit9CisKK2ludCBTY3JvbGxi
YXJUaGVtZVFTdHlsZTo6dHJhY2tMZW5ndGgoU2Nyb2xsYmFyVGhlbWVDbGllbnQqIHNjcm9sbGJh
cikKK3sKKyAgICBRU3R5bGVJbnRlcmZhY2VPcHRpb24gb3B0ID0gaW5pdFNsaWRlclN0eWxlT3B0
aW9uKHNjcm9sbGJhcik7CisgICAgUVJlY3QgdHJhY2sgPSBtX3N0eWxlSW50ZXJmYWNlLT5zY3Jv
bGxCYXJTdWJDb250cm9sUmVjdChvcHQsIFFTdHlsZUludGVyZmFjZTo6U0NfU2Nyb2xsQmFyR3Jv
b3ZlKTsKKyAgICByZXR1cm4gc2Nyb2xsYmFyLT5vcmllbnRhdGlvbigpID09IEhvcml6b250YWxT
Y3JvbGxiYXIgPyB0cmFjay53aWR0aCgpIDogdHJhY2suaGVpZ2h0KCk7Cit9CisKK3ZvaWQgU2Ny
b2xsYmFyVGhlbWVRU3R5bGU6OnBhaW50U2Nyb2xsQ29ybmVyKFNjcm9sbFZpZXcqLCBHcmFwaGlj
c0NvbnRleHQqIGNvbnRleHQsIGNvbnN0IEludFJlY3QmIHJlY3QpCit7CisgICAgU3R5bGVQYWlu
dGVyUVN0eWxlIHAodGhpcywgY29udGV4dCk7CisgICAgaWYgKCFwLmlzVmFsaWQoKSkKKyAgICAg
ICAgcmV0dXJuOworCisgICAgcC5wYWludFNjcm9sbENvcm5lcihyZWN0KTsKK30KKworfQorCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9xdC9TY3JvbGxiYXJUaGVtZVFTdHls
ZS5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vcXQvU2Nyb2xsYmFyVGhlbWVRU3R5bGUuaApu
ZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwLi43MDczZmIxNzBhZmVhZjk1NjJkYjQ5ZDY4MDQ2Y2E5ZmIyOTUzZTZhCi0tLSAv
ZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vcXQvU2Nyb2xsYmFyVGhlbWVR
U3R5bGUuaApAQCAtMCwwICsxLDY1IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA4IEFwcGxl
IEluYy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNl
IGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNh
dGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9u
cworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0
IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1
dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAor
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJp
YWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJF
IElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1Mg
T1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhF
CisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZP
UiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBT
SEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElS
RUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09O
U0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBS
T0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBE
QVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENB
VVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRS
QUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0Ug
T1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRI
SVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBE
QU1BR0UuCisgKi8KKworI2lmbmRlZiBTY3JvbGxiYXJUaGVtZVFTdHlsZV9oCisjZGVmaW5lIFNj
cm9sbGJhclRoZW1lUVN0eWxlX2gKKworI2luY2x1ZGUgIlNjcm9sbGJhclRoZW1lLmgiCisKKyNp
bmNsdWRlIDxRdENvcmUvcWdsb2JhbC5oPgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK2NsYXNz
IFFTdHlsZUludGVyZmFjZTsKKworY2xhc3MgU2Nyb2xsYmFyVGhlbWVRU3R5bGUgOiBwdWJsaWMg
U2Nyb2xsYmFyVGhlbWUgeworcHVibGljOgorICAgIFNjcm9sbGJhclRoZW1lUVN0eWxlKCk7Cisg
ICAgdmlydHVhbCB+U2Nyb2xsYmFyVGhlbWVRU3R5bGUoKTsKKworICAgIHZpcnR1YWwgYm9vbCBw
YWludChTY3JvbGxiYXJUaGVtZUNsaWVudCosIEdyYXBoaWNzQ29udGV4dCosIGNvbnN0IEludFJl
Y3QmIGRpcnR5UmVjdCk7CisgICAgdmlydHVhbCB2b2lkIHBhaW50U2Nyb2xsQ29ybmVyKFNjcm9s
bFZpZXcqLCBHcmFwaGljc0NvbnRleHQqLCBjb25zdCBJbnRSZWN0JiBjb3JuZXJSZWN0KTsKKwor
ICAgIHZpcnR1YWwgU2Nyb2xsYmFyUGFydCBoaXRUZXN0KFNjcm9sbGJhclRoZW1lQ2xpZW50Kiwg
Y29uc3QgUGxhdGZvcm1Nb3VzZUV2ZW50Jik7CisKKyAgICB2aXJ0dWFsIGJvb2wgc2hvdWxkQ2Vu
dGVyT25UaHVtYihTY3JvbGxiYXJUaGVtZUNsaWVudCosIGNvbnN0IFBsYXRmb3JtTW91c2VFdmVu
dCYpOworCisgICAgdmlydHVhbCB2b2lkIGludmFsaWRhdGVQYXJ0KFNjcm9sbGJhclRoZW1lQ2xp
ZW50KiwgU2Nyb2xsYmFyUGFydCk7CisKKyAgICB2aXJ0dWFsIGludCB0aHVtYlBvc2l0aW9uKFNj
cm9sbGJhclRoZW1lQ2xpZW50Kik7CisgICAgdmlydHVhbCBpbnQgdGh1bWJMZW5ndGgoU2Nyb2xs
YmFyVGhlbWVDbGllbnQqKTsKKyAgICB2aXJ0dWFsIGludCB0cmFja1Bvc2l0aW9uKFNjcm9sbGJh
clRoZW1lQ2xpZW50Kik7CisgICAgdmlydHVhbCBpbnQgdHJhY2tMZW5ndGgoU2Nyb2xsYmFyVGhl
bWVDbGllbnQqKTsKKworICAgIHZpcnR1YWwgaW50IHNjcm9sbGJhclRoaWNrbmVzcyhTY3JvbGxi
YXJDb250cm9sU2l6ZSA9IFJlZ3VsYXJTY3JvbGxiYXIpOworCisgICAgUVN0eWxlSW50ZXJmYWNl
KiBzdHlsZUludGVyZmFjZSgpIHsgcmV0dXJuIG1fc3R5bGVJbnRlcmZhY2UuZ2V0KCk7IH0KKwor
cHJpdmF0ZToKKyAgICBPd25QdHI8UVN0eWxlSW50ZXJmYWNlPiBtX3N0eWxlSW50ZXJmYWNlOwor
fTsKKworfQorI2VuZGlmCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1dlYktpdDEucHJvIGIv
U291cmNlL1dlYktpdC9XZWJLaXQxLnBybwppbmRleCBhZTIzYzRlY2E0NDEyYTA2NTIzYWJlYjY4
MGFiODQzODA2NzliMjQ1Li4zODBhNDkyMDZiMzZjMzk2YTAwODg3N2RkOWQ1ZmIwMmE5NzY5NzY0
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1dlYktpdDEucHJvCisrKyBiL1NvdXJjZS9XZWJL
aXQvV2ViS2l0MS5wcm8KQEAgLTQ5LDEyICs0OSwxMSBAQCBTT1VSQ0VTICs9IFwKICAgICAkJFBX
RC9xdC9XZWJDb3JlU3VwcG9ydC9QYWdlQ2xpZW50UXQuY3BwIFwKICAgICAkJFBXRC9xdC9XZWJD
b3JlU3VwcG9ydC9Qb3B1cE1lbnVRdC5jcHAgXAogICAgICQkUFdEL3F0L1dlYkNvcmVTdXBwb3J0
L1F0UGxhdGZvcm1QbHVnaW4uY3BwIFwKLSAgICAkJFBXRC9xdC9XZWJDb3JlU3VwcG9ydC9SZW5k
ZXJUaGVtZVFTdHlsZS5jcHAgXAotICAgICQkUFdEL3F0L1dlYkNvcmVTdXBwb3J0L1Njcm9sbGJh
clRoZW1lUVN0eWxlLmNwcCBcCiAgICAgJCRQV0QvcXQvV2ViQ29yZVN1cHBvcnQvU2VhcmNoUG9w
dXBNZW51UXQuY3BwIFwKICAgICAkJFBXRC9xdC9XZWJDb3JlU3VwcG9ydC9UZXh0Q2hlY2tlckNs
aWVudFF0LmNwcCBcCiAgICAgJCRQV0QvcXQvV2ViQ29yZVN1cHBvcnQvUGxhdGZvcm1TdHJhdGVn
aWVzUXQuY3BwIFwKLSAgICAkJFBXRC9xdC9XZWJDb3JlU3VwcG9ydC9XZWJFdmVudENvbnZlcnNp
b24uY3BwCisgICAgJCRQV0QvcXQvV2ViQ29yZVN1cHBvcnQvV2ViRXZlbnRDb252ZXJzaW9uLmNw
cCBcCisgICAgJCRQV0QvcXQvV2ViQ29yZVN1cHBvcnQvUVdlYlN0eWxlLmNwcCBcCiAKIEhFQURF
UlMgKz0gXAogICAgICQkUFdEL3F0L0FwaS9xd2ViZnJhbWUuaCBcCkBAIC04NywxMiArODYsMTEg
QEAgSEVBREVSUyArPSBcCiAgICAgJCRQV0QvcXQvV2ViQ29yZVN1cHBvcnQvUGFnZUNsaWVudFF0
LmggXAogICAgICQkUFdEL3F0L1dlYkNvcmVTdXBwb3J0L1BvcHVwTWVudVF0LmggXAogICAgICQk
UFdEL3F0L1dlYkNvcmVTdXBwb3J0L1F0UGxhdGZvcm1QbHVnaW4uaCBcCi0gICAgJCRQV0QvcXQv
V2ViQ29yZVN1cHBvcnQvUmVuZGVyVGhlbWVRU3R5bGUuaCBcCi0gICAgJCRQV0QvcXQvV2ViQ29y
ZVN1cHBvcnQvU2Nyb2xsYmFyVGhlbWVRU3R5bGUuaCBcCiAgICAgJCRQV0QvcXQvV2ViQ29yZVN1
cHBvcnQvU2VhcmNoUG9wdXBNZW51UXQuaCBcCiAgICAgJCRQV0QvcXQvV2ViQ29yZVN1cHBvcnQv
VGV4dENoZWNrZXJDbGllbnRRdC5oIFwKICAgICAkJFBXRC9xdC9XZWJDb3JlU3VwcG9ydC9QbGF0
Zm9ybVN0cmF0ZWdpZXNRdC5oIFwKLSAgICAkJFBXRC9xdC9XZWJDb3JlU3VwcG9ydC9XZWJFdmVu
dENvbnZlcnNpb24uaAorICAgICQkUFdEL3F0L1dlYkNvcmVTdXBwb3J0L1dlYkV2ZW50Q29udmVy
c2lvbi5oIFwKKyAgICAkJFBXRC9xdC9XZWJDb3JlU3VwcG9ydC9RV2ViU3R5bGUuaAogCiBjb250
YWlucyhRVF9DT05GSUcsYWNjZXNzaWJpbGl0eSkgewogICAgIFNPVVJDRVMgKz0gJCRQV0QvcXQv
QXBpL3F3ZWJ2aWV3YWNjZXNzaWJsZS5jcHAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvcXQv
V2ViQ29yZVN1cHBvcnQvSW5pdFdlYkNvcmVRdC5jcHAgYi9Tb3VyY2UvV2ViS2l0L3F0L1dlYkNv
cmVTdXBwb3J0L0luaXRXZWJDb3JlUXQuY3BwCmluZGV4IGM2M2NjYjA0MmIwNTQzMmNlOTUyZjU1
MTllNTBhNTIzNDg5N2U5YzEuLjY3ZWQxMDk4OTYzMGMzN2RjMjRlNzIzNjBiY2RjMTljNmQ3ZWRm
ZWUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvcXQvV2ViQ29yZVN1cHBvcnQvSW5pdFdlYkNv
cmVRdC5jcHAKKysrIGIvU291cmNlL1dlYktpdC9xdC9XZWJDb3JlU3VwcG9ydC9Jbml0V2ViQ29y
ZVF0LmNwcApAQCAtMzMsNiArMzMsNyBAQAogI2luY2x1ZGUgIkltYWdlLmgiCiAjaW5jbHVkZSAi
Tm90SW1wbGVtZW50ZWQuaCIKICNpbmNsdWRlICJQbGF0Zm9ybVN0cmF0ZWdpZXNRdC5oIgorI2lu
Y2x1ZGUgIlFXZWJTdHlsZS5oIgogI2luY2x1ZGUgIlJlbmRlclRoZW1lUVN0eWxlLmgiCiAjaW5j
bHVkZSAiU2NyaXB0Q29udHJvbGxlci5oIgogI2luY2x1ZGUgIlNjcm9sbGJhclRoZW1lUVN0eWxl
LmgiCkBAIC03Niw2ICs3Nyw3IEBAIHZvaWQgaW5pdGlhbGl6ZVdlYkNvcmVRdCgpCiAgICAgUGxh
dGZvcm1TdHJhdGVnaWVzUXQ6OmluaXRpYWxpemUoKTsKICAgICBRdFdlYkVsZW1lbnRSdW50aW1l
Ojppbml0aWFsaXplKCk7CiAKKyAgICBSZW5kZXJUaGVtZVFTdHlsZTo6c2V0U3R5bGVGYWN0b3J5
RnVuY3Rpb24oV2ViS2l0OjpRV2ViU3R5bGU6OmNyZWF0ZSk7CiAgICAgUmVuZGVyVGhlbWVRdDo6
c2V0Q3VzdG9tVGhlbWUoUmVuZGVyVGhlbWVRU3R5bGU6OmNyZWF0ZSwgbmV3IFNjcm9sbGJhclRo
ZW1lUVN0eWxlKTsKIAogI2lmIFVTRShRVEtJVCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQv
cXQvV2ViQ29yZVN1cHBvcnQvUVdlYlN0eWxlLmNwcCBiL1NvdXJjZS9XZWJLaXQvcXQvV2ViQ29y
ZVN1cHBvcnQvUVdlYlN0eWxlLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi4yZmY5ZWJiM2YwOTQ4YzliNWYyYmJl
YTJmYmRlMWYzZjU3NjgxNjZhCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYktpdC9xdC9X
ZWJDb3JlU3VwcG9ydC9RV2ViU3R5bGUuY3BwCkBAIC0wLDAgKzEsNTQzIEBACisvKgorICogVGhp
cyBmaWxlIGlzIHBhcnQgb2YgdGhlIHRoZW1lIGltcGxlbWVudGF0aW9uIGZvciBmb3JtIGNvbnRy
b2xzIGluIFdlYkNvcmUuCisgKgorICogQ29weXJpZ2h0IChDKSAyMDEyIERpZ2lhIFBsYyBhbmQv
b3IgaXRzIHN1YnNpZGlhcnkoLWllcykuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTEtMjAxMiBOb2tp
YSBDb3Jwb3JhdGlvbiBhbmQvb3IgaXRzIHN1YnNpZGlhcnkoLWllcykuCisgKgorICogVGhpcyBs
aWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgor
ICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQ
dWJsaWMKKyAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5k
YXRpb247IGVpdGhlcgorICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBv
cHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmli
dXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQg
QU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1F
UkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0
aGUgR05VCisgKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWls
cy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGli
cmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsg
c2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bworICogdGhlIEZyZWUg
U29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9v
ciwKKyAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgorICoKKyAqLworCisjaW5jbHVkZSAi
Y29uZmlnLmgiCisKKyNpbmNsdWRlICJRV2ViU3R5bGUuaCIKKworI2luY2x1ZGUgPFFBcHBsaWNh
dGlvbj4KKyNpbmNsdWRlIDxRTGluZUVkaXQ+CisjaW5jbHVkZSA8UU1hY1N0eWxlPgorI2luY2x1
ZGUgPFFQYWludGVyPgorI2luY2x1ZGUgPFFQdXNoQnV0dG9uPgorI2lmbmRlZiBRVF9OT19TVFlM
RV9QTEFTVElRVUUKKyNpbmNsdWRlIDxRUGxhc3RpcXVlU3R5bGU+CisjZW5kaWYKKyNpbmNsdWRl
IDxRU3R5bGVGYWN0b3J5PgorI2luY2x1ZGUgPFFTdHlsZU9wdGlvbj4KKworI2luY2x1ZGUgPFFX
ZWJQYWdlQ2xpZW50Lmg+CisKK3VzaW5nIG5hbWVzcGFjZSBXZWJDb3JlOworCituYW1lc3BhY2Ug
V2ViS2l0IHsKKworc3RhdGljIFFTdHlsZTo6U3RhdGUgY29udmVydFRvUVN0eWxlU3RhdGUoUVN0
eWxlSW50ZXJmYWNlOjpTdGF0ZSBzdGF0ZSkKK3sKKyAgICBRU3R5bGU6OlN0YXRlIHJlc3VsdDsK
KyNkZWZpbmUgQ09OVkVSVF9TVEFURShQcm94aWVkU3RhdGUsIFZhbHVlKSBcCisgICAgaWYgKHN0
YXRlICYgUVN0eWxlSW50ZXJmYWNlOjpQcm94aWVkU3RhdGUpIFwKKyAgICAgICAgcmVzdWx0IHw9
IFFTdHlsZTo6UHJveGllZFN0YXRlOworCisgICAgRk9SX0VBQ0hfTUFQUEVEX1NUQVRFKENPTlZF
UlRfU1RBVEUsICkKKworI3VuZGVmIENPTlZFUlRfU1RBVEUKKworICAgIHJldHVybiByZXN1bHQ7
Cit9CisKK3N0YXRpYyBRU3R5bGU6OlN1YkNvbnRyb2wgY29udmVydFRvUVN0eWxlU3ViQ29udHJv
bChRU3R5bGVJbnRlcmZhY2U6OlN1YkNvbnRyb2wgc2MpCit7CisjZGVmaW5lIENPTlZFUlRfU1VC
Q09OVFJPTChGLCBWYWx1ZSkgXAorICAgIGNhc2UgUVN0eWxlSW50ZXJmYWNlOjpGOiByZXR1cm4g
UVN0eWxlOjpGCisKKyAgICBzd2l0Y2ggKHNjKSB7CisgICAgICAgIEZPUl9FQUNIX1NVQkNPTlRS
T0woQ09OVkVSVF9TVUJDT05UUk9MLCBTRU1JQ09MT04pOworICAgIH0KKyAgICBBU1NFUlRfTk9U
X1JFQUNIRUQoKTsKKyAgICByZXR1cm4gUVN0eWxlOjpTQ19Ob25lOworI3VuZGVmIENPTlZFUlRf
U1VCQ09OVFJPTAorfQorCitzdGF0aWMgdm9pZCBpbml0R2VuZXJpY1N0eWxlT3B0aW9uKFFTdHls
ZU9wdGlvbiogb3B0aW9uLCBRV2lkZ2V0KiB3aWRnZXQsIGNvbnN0IFFTdHlsZUludGVyZmFjZU9w
dGlvbiYgaW50ZXJmYWNlT3B0aW9uKQoreworICAgIGlmICh3aWRnZXQpCisgICAgICAgIG9wdGlv
bi0+aW5pdCh3aWRnZXQpOworICAgIGVsc2UKKyAgICAgICAgLy8gSWYgYSB3aWRnZXQgaXMgbm90
IGRpcmVjdGx5IGF2YWlsYWJsZSBmb3IgcmVuZGVyaW5nLCB3ZSBmYWxsYmFjayB0byBkZWZhdWx0
CisgICAgICAgIC8vIHZhbHVlIGZvciBhbiBhY3RpdmUgd2lkZ2V0LgorICAgICAgICBvcHRpb24t
PnN0YXRlID0gUVN0eWxlOjpTdGF0ZV9BY3RpdmUgfCBRU3R5bGU6OlN0YXRlX0VuYWJsZWQ7CisK
KyAgICBvcHRpb24tPnJlY3QgPSBpbnRlcmZhY2VPcHRpb24ucmVjdDsKKyAgICBvcHRpb24tPnN0
YXRlID0gY29udmVydFRvUVN0eWxlU3RhdGUoaW50ZXJmYWNlT3B0aW9uLnN0YXRlKTsKKyAgICBv
cHRpb24tPmRpcmVjdGlvbiA9IGludGVyZmFjZU9wdGlvbi5kaXJlY3Rpb247CisgICAgb3B0aW9u
LT5wYWxldHRlID0gaW50ZXJmYWNlT3B0aW9uLnBhbGV0dGU7Cit9CisKK3N0YXRpYyB2b2lkIGlu
aXRTcGVjaWZpY1N0eWxlT3B0aW9uKFFTdHlsZU9wdGlvbiosIGNvbnN0IFFTdHlsZUludGVyZmFj
ZU9wdGlvbiYpCit7Cit9CisKK3N0YXRpYyB2b2lkIGluaXRTcGVjaWZpY1N0eWxlT3B0aW9uKFFT
dHlsZU9wdGlvblNsaWRlciogc2xpZGVyT3B0aW9uLCBjb25zdCBRU3R5bGVJbnRlcmZhY2VPcHRp
b24mIGludGVyZmFjZU9wdGlvbikKK3sKKyAgICBzbGlkZXJPcHRpb24tPm9yaWVudGF0aW9uID0g
aW50ZXJmYWNlT3B0aW9uLnNsaWRlci5vcmllbnRhdGlvbjsKKyAgICBzbGlkZXJPcHRpb24tPnVw
c2lkZURvd24gPSBpbnRlcmZhY2VPcHRpb24uc2xpZGVyLnVwc2lkZURvd247CisgICAgc2xpZGVy
T3B0aW9uLT5taW5pbXVtID0gaW50ZXJmYWNlT3B0aW9uLnNsaWRlci5taW5pbXVtOworICAgIHNs
aWRlck9wdGlvbi0+bWF4aW11bSA9IGludGVyZmFjZU9wdGlvbi5zbGlkZXIubWF4aW11bTsKKyAg
ICBzbGlkZXJPcHRpb24tPnNsaWRlclBvc2l0aW9uID0gaW50ZXJmYWNlT3B0aW9uLnNsaWRlci5w
b3NpdGlvbjsKKyAgICBzbGlkZXJPcHRpb24tPnNsaWRlclZhbHVlID0gaW50ZXJmYWNlT3B0aW9u
LnNsaWRlci52YWx1ZTsKKyAgICBzbGlkZXJPcHRpb24tPnNpbmdsZVN0ZXAgPSBpbnRlcmZhY2VP
cHRpb24uc2xpZGVyLnNpbmdsZVN0ZXA7CisgICAgc2xpZGVyT3B0aW9uLT5wYWdlU3RlcCA9IGlu
dGVyZmFjZU9wdGlvbi5zbGlkZXIucGFnZVN0ZXA7CisgICAgc2xpZGVyT3B0aW9uLT5hY3RpdmVT
dWJDb250cm9scyA9IGNvbnZlcnRUb1FTdHlsZVN1YkNvbnRyb2woaW50ZXJmYWNlT3B0aW9uLnNs
aWRlci5hY3RpdmVTdWJDb250cm9scyk7Cit9CisKK3RlbXBsYXRlIDx0eXBlbmFtZSBTdHlsZU9w
dGlvbj4KK2NsYXNzIE1hcHBlZFN0eWxlT3B0aW9uIDogcHVibGljIFN0eWxlT3B0aW9uIHsKKwor
cHVibGljOgorICAgIE1hcHBlZFN0eWxlT3B0aW9uKFFXaWRnZXQqIHdpZGdldCwgY29uc3QgUVN0
eWxlSW50ZXJmYWNlT3B0aW9uJiBpbnRlcmZhY2VPcHRpb24pCisgICAgeworICAgICAgICBpbml0
R2VuZXJpY1N0eWxlT3B0aW9uKHRoaXMsIHdpZGdldCwgaW50ZXJmYWNlT3B0aW9uKTsKKyAgICAg
ICAgaW5pdFNwZWNpZmljU3R5bGVPcHRpb24odGhpcywgaW50ZXJmYWNlT3B0aW9uKTsKKyAgICB9
Cit9OworCitzdGF0aWMgUVN0eWxlOjpQaXhlbE1ldHJpYyBjb252ZXJ0UGl4ZWxNZXRyaWMoUVN0
eWxlSW50ZXJmYWNlOjpQaXhlbE1ldHJpYyBzdGF0ZSkKK3sKKyNkZWZpbmUgQ09OVkVSVF9NRVRS
SUMoTWV0cmljKSBcCisgICAgY2FzZSBRU3R5bGVJbnRlcmZhY2U6Ok1ldHJpYzogcmV0dXJuIFFT
dHlsZTo6TWV0cmljCisKKyAgICBzd2l0Y2ggKHN0YXRlKSB7CisgICAgICAgIEZPUl9FQUNIX01B
UFBFRF9NRVRSSUMoQ09OVkVSVF9NRVRSSUMsIFNFTUlDT0xPTik7CisgICAgfQorICAgIEFTU0VS
VF9OT1RfUkVBQ0hFRCgpOworICAgIHJldHVybiBRU3R5bGU6OlBNX0N1c3RvbUJhc2U7CisKKyN1
bmRlZiBDT05WRVJUX01FVFJJQworfQorCitzdGF0aWMgUVN0eWxlSW50ZXJmYWNlOjpTdWJDb250
cm9sIGNvbnZlcnRUb1FTdHlsZUludGVyZmFjZVN1YkNvbnRyb2woUVN0eWxlOjpTdWJDb250cm9s
IHNjKQoreworI2RlZmluZSBDT05WRVJUX1NVQkNPTlRST0woRiwgVmFsdWUpIFwKKyAgICBjYXNl
IFFTdHlsZTo6RjogcmV0dXJuIFFTdHlsZUludGVyZmFjZTo6RgorCisgICAgc3dpdGNoIChzYykg
eworICAgICAgICBGT1JfRUFDSF9TVUJDT05UUk9MKENPTlZFUlRfU1VCQ09OVFJPTCwgU0VNSUNP
TE9OKTsKKyAgICB9CisgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgcmV0dXJuIFFTdHls
ZUludGVyZmFjZTo6U0NfTm9uZTsKKyN1bmRlZiBDT05WRVJUX1NVQkNPTlRST0wKK30KKworUVdl
YlN0eWxlOjpRV2ViU3R5bGUoUGFnZSogcGFnZSkKKyAgICA6IG1fcGFnZShwYWdlKQorICAgICwg
bV9zdHlsZSgwKQoreworICAgIG1fZmFsbGJhY2tTdHlsZSA9IFFTdHlsZUZhY3Rvcnk6OmNyZWF0
ZShRTGF0aW4xU3RyaW5nKCJ3aW5kb3dzIikpOworICAgIG1fb3duRmFsbGJhY2tTdHlsZSA9IHRy
dWU7CisgICAgaWYgKCFtX2ZhbGxiYWNrU3R5bGUpIHsKKyAgICAgICAgbV9mYWxsYmFja1N0eWxl
ID0gUUFwcGxpY2F0aW9uOjpzdHlsZSgpOworICAgICAgICBtX293bkZhbGxiYWNrU3R5bGUgPSBm
YWxzZTsKKyAgICB9Cit9CisKK1FXZWJTdHlsZTo6flFXZWJTdHlsZSgpCit7CisgICAgaWYgKG1f
b3duRmFsbGJhY2tTdHlsZSkKKyAgICAgICAgZGVsZXRlIG1fZmFsbGJhY2tTdHlsZTsKK30KKwor
UVJlY3QgUVdlYlN0eWxlOjpidXR0b25TdWJFbGVtZW50UmVjdChRU3R5bGVJbnRlcmZhY2U6OkJ1
dHRvblN1YkVsZW1lbnQgYnV0dG9uRWxlbWVudCwgU3RhdGUgc3RhdGUsIGNvbnN0IFFSZWN0JiBv
cmlnaW5hbFJlY3QpIGNvbnN0Cit7CisgICAgZW5zdXJlU3R5bGUoKTsKKworICAgIFFTdHlsZU9w
dGlvbkJ1dHRvbiBvcHRpb247CisgICAgb3B0aW9uLnN0YXRlID0gY29udmVydFRvUVN0eWxlU3Rh
dGUoc3RhdGUpOworICAgIG9wdGlvbi5yZWN0ID0gb3JpZ2luYWxSZWN0OworCisgICAgUVN0eWxl
OjpTdWJFbGVtZW50IHN1YkVsZW1lbnQgPSBRU3R5bGU6OlNFX0N1c3RvbUJhc2U7CisgICAgc3dp
dGNoIChidXR0b25FbGVtZW50KSB7CisgICAgY2FzZSBQdXNoQnV0dG9uTGF5b3V0SXRlbTogc3Vi
RWxlbWVudCA9IFFTdHlsZTo6U0VfUHVzaEJ1dHRvbkxheW91dEl0ZW07IGJyZWFrOworICAgIGNh
c2UgUHVzaEJ1dHRvbkNvbnRlbnRzOiBzdWJFbGVtZW50ID0gUVN0eWxlOjpTRV9QdXNoQnV0dG9u
Q29udGVudHM7IGJyZWFrOworICAgIGRlZmF1bHQ6IEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAg
IH0KKyAgICByZXR1cm4gbV9zdHlsZS0+c3ViRWxlbWVudFJlY3Qoc3ViRWxlbWVudCwgJm9wdGlv
bik7Cit9CisKK2ludCBRV2ViU3R5bGU6OmZpbmRGcmFtZUxpbmVXaWR0aCgpIGNvbnN0Cit7Cisg
ICAgZW5zdXJlU3R5bGUoKTsKKworICAgIGlmICghbV9saW5lRWRpdCkKKyAgICAgICAgbV9saW5l
RWRpdC5yZXNldChuZXcgUUxpbmVFZGl0KCkpOworCisgICAgcmV0dXJuIG1fc3R5bGUtPnBpeGVs
TWV0cmljKFFTdHlsZTo6UE1fRGVmYXVsdEZyYW1lV2lkdGgsIDAsIG1fbGluZUVkaXQuZGF0YSgp
KTsKK30KKworaW50IFFXZWJTdHlsZTo6c2ltcGxlUGl4ZWxNZXRyaWMoUVN0eWxlSW50ZXJmYWNl
OjpQaXhlbE1ldHJpYyBtZXRyaWMsIFN0YXRlIHN0YXRlLCBRT2JqZWN0ICp3aWRnZXQpIGNvbnN0
Cit7CisgICAgZW5zdXJlU3R5bGUoKTsKKworICAgIFFTdHlsZU9wdGlvbiBvcHQ7CisgICAgb3B0
LnN0YXRlID0gY29udmVydFRvUVN0eWxlU3RhdGUoc3RhdGUpOworICAgIHJldHVybiBtX3N0eWxl
LT5waXhlbE1ldHJpYyhjb252ZXJ0UGl4ZWxNZXRyaWMobWV0cmljKSwgJm9wdCwgcW9iamVjdF9j
YXN0PFFXaWRnZXQqPih3aWRnZXQpKTsKK30KKworaW50IFFXZWJTdHlsZTo6YnV0dG9uTWFyZ2lu
KFN0YXRlIHN0YXRlLCBjb25zdCBRUmVjdCYgb3JpZ2luYWxSZWN0KSBjb25zdAoreworICAgIGVu
c3VyZVN0eWxlKCk7CisKKyAgICBRU3R5bGVPcHRpb25CdXR0b24gc3R5bGVPcHRpb247CisgICAg
c3R5bGVPcHRpb24uc3RhdGUgPSBjb252ZXJ0VG9RU3R5bGVTdGF0ZShzdGF0ZSk7CisgICAgc3R5
bGVPcHRpb24ucmVjdCA9IG9yaWdpbmFsUmVjdDsKKyAgICByZXR1cm4gbV9zdHlsZS0+cGl4ZWxN
ZXRyaWMoUVN0eWxlOjpQTV9CdXR0b25NYXJnaW4sICZzdHlsZU9wdGlvbiwgMCk7Cit9CisKK2lu
dCBRV2ViU3R5bGU6OnNsaWRlckxlbmd0aChRdDo6T3JpZW50YXRpb24gb3JpZW50YXRpb24pIGNv
bnN0Cit7CisgICAgZW5zdXJlU3R5bGUoKTsKKworICAgIFFTdHlsZU9wdGlvblNsaWRlciBvcHQ7
CisgICAgb3B0Lm9yaWVudGF0aW9uID0gb3JpZW50YXRpb247CisgICAgcmV0dXJuIG1fc3R5bGUt
PnBpeGVsTWV0cmljKFFTdHlsZTo6UE1fU2xpZGVyTGVuZ3RoLCAmb3B0KTsKK30KKworaW50IFFX
ZWJTdHlsZTo6c2xpZGVyVGhpY2tuZXNzKFF0OjpPcmllbnRhdGlvbiBvcmllbnRhdGlvbikgY29u
c3QKK3sKKyAgICBlbnN1cmVTdHlsZSgpOworCisgICAgUVN0eWxlT3B0aW9uU2xpZGVyIG9wdDsK
KyAgICBvcHQub3JpZW50YXRpb24gPSBvcmllbnRhdGlvbjsKKyAgICByZXR1cm4gbV9zdHlsZS0+
cGl4ZWxNZXRyaWMoUVN0eWxlOjpQTV9TbGlkZXJUaGlja25lc3MsICZvcHQpOworfQorCitpbnQg
UVdlYlN0eWxlOjpwcm9ncmVzc0JhckNodW5rV2lkdGgoY29uc3QgUVNpemUmIHNpemUpIGNvbnN0
Cit7CisgICAgZW5zdXJlU3R5bGUoKTsKKworICAgIFFTdHlsZU9wdGlvblByb2dyZXNzQmFyVjIg
b3B0aW9uOworICAgIG9wdGlvbi5yZWN0LnNldFNpemUoc2l6ZSk7CisgICAgLy8gRklYTUU6IFVu
dGlsIGh0dHA6Ly9idWdyZXBvcnRzLnF0Lm5va2lhLmNvbS9icm93c2UvUVRCVUctOTE3MSBpcyBm
aXhlZCwKKyAgICAvLyB3ZSBzaW11bGF0ZSBvbmUgc3F1YXJlIGFuaW1hdGluZyBhY3Jvc3MgdGhl
IHByb2dyZXNzIGJhci4KKyAgICByZXR1cm4gbV9zdHlsZS0+cGl4ZWxNZXRyaWMoUVN0eWxlOjpQ
TV9Qcm9ncmVzc0JhckNodW5rV2lkdGgsICZvcHRpb24pOworfQorCit2b2lkIFFXZWJTdHlsZTo6
Z2V0QnV0dG9uTWV0cmljcyhRU3RyaW5nICpidXR0b25Gb250RmFtaWx5LCBpbnQgKmJ1dHRvbkZv
bnRQaXhlbFNpemUpIGNvbnN0Cit7CisgICAgUVB1c2hCdXR0b24gYnV0dG9uOworICAgIFFGb250
IGRlZmF1bHRCdXR0b25Gb250ID0gUUFwcGxpY2F0aW9uOjpmb250KCZidXR0b24pOworICAgICpi
dXR0b25Gb250RmFtaWx5ID0gZGVmYXVsdEJ1dHRvbkZvbnQuZmFtaWx5KCk7CisgICAgKmJ1dHRv
bkZvbnRQaXhlbFNpemUgPSAwOworI2lmZGVmIFFfV1NfTUFDCisgICAgYnV0dG9uLnNldEF0dHJp
YnV0ZShRdDo6V0FfTWFjU21hbGxTaXplKTsKKyAgICBRRm9udEluZm8gZm9udEluZm8oZGVmYXVs
dEJ1dHRvbkZvbnQpOworICAgICpidXR0b25Gb250UGl4ZWxTaXplID0gZm9udEluZm8ucGl4ZWxT
aXplKCk7CisjZW5kaWYKK30KKworUVNpemUgUVdlYlN0eWxlOjpzaXplRnJvbUNvbnRlbnRzKFFT
dHlsZUludGVyZmFjZTo6Q29udGVudHNUeXBlIHR5cGUsIFFTdHlsZUludGVyZmFjZTo6U3RhdGUg
c3RhdGUsIGNvbnN0IFFTaXplJiBjb250ZW50c1NpemUpIGNvbnN0Cit7CisgICAgZW5zdXJlU3R5
bGUoKTsKKworICAgIFFTdHlsZU9wdGlvbiBvcHQ7CisgICAgb3B0LnN0YXRlID0gY29udmVydFRv
UVN0eWxlU3RhdGUoc3RhdGUpOworCisgICAgUVN0eWxlOjpDb250ZW50c1R5cGUgY29udGVudHNU
eXBlID0gUVN0eWxlOjpDVF9DdXN0b21CYXNlOworICAgIHN3aXRjaCAodHlwZSkgeworICAgIGNh
c2UgUVN0eWxlSW50ZXJmYWNlOjpDVF9Db21ib0JveDogY29udGVudHNUeXBlID0gUVN0eWxlOjpD
VF9Db21ib0JveDsgYnJlYWs7CisgICAgY2FzZSBRU3R5bGVJbnRlcmZhY2U6OkNUX1B1c2hCdXR0
b246IGNvbnRlbnRzVHlwZSA9IFFTdHlsZTo6Q1RfUHVzaEJ1dHRvbjsgYnJlYWs7CisgICAgfQor
CisgICAgcmV0dXJuIG1fc3R5bGUtPnNpemVGcm9tQ29udGVudHMoY29udGVudHNUeXBlLCAmb3B0
LCBjb250ZW50c1NpemUpOworfQorCit2b2lkIFFXZWJTdHlsZTo6cGFpbnRCdXR0b24oUVBhaW50
ZXIqIHBhaW50ZXIsIFFTdHlsZUludGVyZmFjZTo6QnV0dG9uVHlwZSB0eXBlLCBjb25zdCBRU3R5
bGVJbnRlcmZhY2VPcHRpb24gJnByb3h5T3B0aW9uLCBRT2JqZWN0ICp3aWRnZXRPYmopCit7Cisg
ICAgZW5zdXJlU3R5bGUoKTsKKworICAgIFFXaWRnZXQqIHdpZGdldCA9IHFvYmplY3RfY2FzdDxR
V2lkZ2V0Kj4od2lkZ2V0T2JqKTsKKyAgICBNYXBwZWRTdHlsZU9wdGlvbjxRU3R5bGVPcHRpb25C
dXR0b24+IG9wdGlvbih3aWRnZXQsIHByb3h5T3B0aW9uKTsKKworICAgIGlmICh0eXBlID09IFB1
c2hCdXR0b24pIHsKKyAgICAgICAgbV9zdHlsZS0+ZHJhd0NvbnRyb2woUVN0eWxlOjpDRV9QdXNo
QnV0dG9uLCAmb3B0aW9uLCBwYWludGVyLCB3aWRnZXQpOworICAgIH0gZWxzZSBpZiAodHlwZSA9
PSBSYWRpb0J1dHRvbikKKyAgICAgICBtX3N0eWxlLT5kcmF3Q29udHJvbChRU3R5bGU6OkNFX1Jh
ZGlvQnV0dG9uLCAmb3B0aW9uLCBwYWludGVyLCB3aWRnZXQpOworICAgIGVsc2UgaWYgKHR5cGUg
PT0gQ2hlY2tCb3gpCisgICAgICAgIG1fc3R5bGUtPmRyYXdDb250cm9sKFFTdHlsZTo6Q0VfQ2hl
Y2tCb3gsICZvcHRpb24sIHBhaW50ZXIsIHdpZGdldCk7Cit9CisKK3ZvaWQgUVdlYlN0eWxlOjpw
YWludFRleHRGaWVsZChRUGFpbnRlciAqcGFpbnRlciwgY29uc3QgUVN0eWxlSW50ZXJmYWNlT3B0
aW9uICZwcm94eU9wdGlvbiwgUU9iamVjdCAqd2lkZ2V0T2JqKQoreworICAgIGVuc3VyZVN0eWxl
KCk7CisKKyAgICBRV2lkZ2V0KiB3aWRnZXQgPSBxb2JqZWN0X2Nhc3Q8UVdpZGdldCo+KHdpZGdl
dE9iaik7CisKKyAgICBNYXBwZWRTdHlsZU9wdGlvbjxRU3R5bGVPcHRpb25GcmFtZVYyPiBwYW5l
bCh3aWRnZXQsIHByb3h5T3B0aW9uKTsKKworICAgIHBhbmVsLmxpbmVXaWR0aCA9IGZpbmRGcmFt
ZUxpbmVXaWR0aCgpOworICAgIHBhbmVsLmZlYXR1cmVzID0gUVN0eWxlT3B0aW9uRnJhbWVWMjo6
Tm9uZTsKKworICAgIG1fc3R5bGUtPmRyYXdQcmltaXRpdmUoUVN0eWxlOjpQRV9QYW5lbExpbmVF
ZGl0LCAmcGFuZWwsIHBhaW50ZXIsIHdpZGdldCk7Cit9CisKK3ZvaWQgUVdlYlN0eWxlOjpwYWlu
dENvbWJvQm94KFFQYWludGVyICpwYWludGVyLCBjb25zdCBRU3R5bGVJbnRlcmZhY2VPcHRpb24g
JnByb3h5T3B0aW9uLCBRT2JqZWN0KiB3aWRnZXRPYmopCit7CisgICAgZW5zdXJlU3R5bGUoKTsK
KyAgICBRV2lkZ2V0KiB3aWRnZXQgPSBxb2JqZWN0X2Nhc3Q8UVdpZGdldCo+KHdpZGdldE9iaik7
CisKKyAgICBNYXBwZWRTdHlsZU9wdGlvbjxRU3R5bGVPcHRpb25Db21ib0JveD4gb3B0KHdpZGdl
dCwgcHJveHlPcHRpb24pOworCisgICAgSW50UmVjdCByZWN0ID0gb3B0LnJlY3Q7CisKKyNpZiBk
ZWZpbmVkKFFfV1NfTUFDKSAmJiAhZGVmaW5lZChRVF9OT19TVFlMRV9NQUMpCisgICAgLy8gUU1h
Y1N0eWxlIG1ha2VzIHRoZSBjb21ibyBib3hlcyBhIGxpdHRsZSBiaXQgc21hbGxlciB0byBsZWF2
ZSBzcGFjZSBmb3IgdGhlIGZvY3VzIHJlY3QuCisgICAgLy8gQmVjYXVzZSBvZiBpdCwgdGhlIGNv
bWJvIGJ1dHRvbiBpcyBkcmF3biBhdCBhIHBvaW50IHRvIHRoZSBsZWZ0IG9mIHdoZXJlIGl0IHdh
cyBleHBlY3QgdG8gYmUgYW5kIG1heSBlbmQgdXAKKyAgICAvLyBvdmVybGFwcGVkIHdpdGggdGhl
IHRleHQuIFRoaXMgd2lsbCBmb3JjZSBRTWFjU3R5bGUgdG8gZHJhdyB0aGUgY29tYm8gYm94IHdp
dGggdGhlIGV4cGVjdGVkIHdpZHRoLgorICAgIGlmIChxb2JqZWN0X2Nhc3Q8UU1hY1N0eWxlKj4o
bV9zdHlsZSkpCisgICAgICAgIHJlY3QuaW5mbGF0ZVgoMyk7CisjZW5kaWYKKworICAgIGNvbnN0
IFFQb2ludCB0b3BMZWZ0ID0gcmVjdC5sb2NhdGlvbigpOworICAgIHBhaW50ZXItPnRyYW5zbGF0
ZSh0b3BMZWZ0KTsKKyAgICBvcHQucmVjdC5tb3ZlVG8oUVBvaW50KDAsIDApKTsKKyAgICBvcHQu
cmVjdC5zZXRTaXplKHJlY3Quc2l6ZSgpKTsKKworICAgIG1fc3R5bGUtPmRyYXdDb21wbGV4Q29u
dHJvbChRU3R5bGU6OkNDX0NvbWJvQm94LCAmb3B0LCBwYWludGVyLCB3aWRnZXQpOworICAgIHBh
aW50ZXItPnRyYW5zbGF0ZSgtdG9wTGVmdCk7Cit9CisKK3ZvaWQgUVdlYlN0eWxlOjpwYWludENv
bWJvQm94QXJyb3coUVBhaW50ZXIgKnBhaW50ZXIsIGNvbnN0IFFTdHlsZUludGVyZmFjZU9wdGlv
biAmcHJveHlPcHRpb24sIFFPYmplY3QgKndpZGdldE9iaikKK3sKKyAgICBlbnN1cmVTdHlsZSgp
OworICAgIFFXaWRnZXQqIHdpZGdldCA9IHFvYmplY3RfY2FzdDxRV2lkZ2V0Kj4od2lkZ2V0T2Jq
KTsKKworICAgIE1hcHBlZFN0eWxlT3B0aW9uPFFTdHlsZU9wdGlvbkNvbWJvQm94PiBvcHQod2lk
Z2V0LCBwcm94eU9wdGlvbik7CisgICAgb3B0LnN1YkNvbnRyb2xzID0gUVN0eWxlOjpTQ19Db21i
b0JveEFycm93OworICAgIC8vIGZvciBkcmF3aW5nIHRoZSBjb21ibyBib3ggYXJyb3csIHJlbHkg
b25seSBvbiB0aGUgZmFsbGJhY2sgc3R5bGUKKyAgICBtX2ZhbGxiYWNrU3R5bGUtPmRyYXdDb21w
bGV4Q29udHJvbChRU3R5bGU6OkNDX0NvbWJvQm94LCAmb3B0LCBwYWludGVyLCB3aWRnZXQpOwor
fQorCit2b2lkIFFXZWJTdHlsZTo6cGFpbnRTbGlkZXJUcmFjayhRUGFpbnRlciogcGFpbnRlciwg
Y29uc3QgUVN0eWxlSW50ZXJmYWNlT3B0aW9uJiBwcm94eU9wdGlvbiwgUU9iamVjdCAqd2lkZ2V0
T2JqKQoreworICAgIGVuc3VyZVN0eWxlKCk7CisgICAgUVdpZGdldCogd2lkZ2V0ID0gcW9iamVj
dF9jYXN0PFFXaWRnZXQqPih3aWRnZXRPYmopOworCisgICAgTWFwcGVkU3R5bGVPcHRpb248UVN0
eWxlT3B0aW9uU2xpZGVyPiBvcHRpb24od2lkZ2V0LCBwcm94eU9wdGlvbik7CisgICAgb3B0aW9u
LnN1YkNvbnRyb2xzID0gUVN0eWxlOjpTQ19TbGlkZXJHcm9vdmU7CisKKyAgICBvcHRpb24udXBz
aWRlRG93biA9IHByb3h5T3B0aW9uLnNsaWRlci51cHNpZGVEb3duOworICAgIG9wdGlvbi5taW5p
bXVtID0gcHJveHlPcHRpb24uc2xpZGVyLm1pbmltdW07CisgICAgb3B0aW9uLm1heGltdW0gPSBw
cm94eU9wdGlvbi5zbGlkZXIubWF4aW11bTsKKyAgICBvcHRpb24uc2xpZGVyUG9zaXRpb24gPSBw
cm94eU9wdGlvbi5zbGlkZXIucG9zaXRpb247CisgICAgb3B0aW9uLm9yaWVudGF0aW9uID0gcHJv
eHlPcHRpb24uc2xpZGVyLm9yaWVudGF0aW9uOworCisgICAgbV9zdHlsZS0+ZHJhd0NvbXBsZXhD
b250cm9sKFFTdHlsZTo6Q0NfU2xpZGVyLCAmb3B0aW9uLCBwYWludGVyLCB3aWRnZXQpOworCisg
ICAgaWYgKG9wdGlvbi5zdGF0ZSAmIFFTdHlsZTo6U3RhdGVfSGFzRm9jdXMpIHsKKyAgICAgICAg
UVN0eWxlT3B0aW9uRm9jdXNSZWN0IGZvY3VzT3B0aW9uOworICAgICAgICBmb2N1c09wdGlvbi5y
ZWN0ID0gb3B0aW9uLnJlY3Q7CisgICAgICAgIG1fc3R5bGUtPmRyYXdQcmltaXRpdmUoUVN0eWxl
OjpQRV9GcmFtZUZvY3VzUmVjdCwgJmZvY3VzT3B0aW9uLCBwYWludGVyLCB3aWRnZXQpOworICAg
IH0KK30KKwordm9pZCBRV2ViU3R5bGU6OnBhaW50U2xpZGVyVGh1bWIoUVBhaW50ZXIqIHBhaW50
ZXIsIGNvbnN0IFFTdHlsZUludGVyZmFjZU9wdGlvbiYgcHJveHlPcHRpb24sIFFPYmplY3QgKndp
ZGdldE9iaikKK3sKKyAgICBlbnN1cmVTdHlsZSgpOworICAgIFFXaWRnZXQqIHdpZGdldCA9IHFv
YmplY3RfY2FzdDxRV2lkZ2V0Kj4od2lkZ2V0T2JqKTsKKworICAgIE1hcHBlZFN0eWxlT3B0aW9u
PFFTdHlsZU9wdGlvblNsaWRlcj4gb3B0aW9uKHdpZGdldCwgcHJveHlPcHRpb24pOworCisgICAg
b3B0aW9uLnN1YkNvbnRyb2xzID0gUVN0eWxlOjpTQ19TbGlkZXJIYW5kbGU7CisgICAgaWYgKG9w
dGlvbi5zdGF0ZSAmIFFTdHlsZTo6U3RhdGVfU3Vua2VuKQorICAgICAgICBvcHRpb24uYWN0aXZl
U3ViQ29udHJvbHMgPSBRU3R5bGU6OlNDX1NsaWRlckhhbmRsZTsKKworICAgIG1fc3R5bGUtPmRy
YXdDb21wbGV4Q29udHJvbChRU3R5bGU6OkNDX1NsaWRlciwgJm9wdGlvbiwgcGFpbnRlciwgd2lk
Z2V0KTsKK30KKwordm9pZCBRV2ViU3R5bGU6OnBhaW50SW5uZXJTcGluQnV0dG9uKFFQYWludGVy
KiBwYWludGVyLCBjb25zdCBRU3R5bGVJbnRlcmZhY2VPcHRpb24mIHByb3h5T3B0aW9uLCBib29s
IHNwaW5Cb3hVcCwgUU9iamVjdCogd2lkZ2V0T2JqKQoreworICAgIGVuc3VyZVN0eWxlKCk7Cisg
ICAgUVdpZGdldCogd2lkZ2V0ID0gcW9iamVjdF9jYXN0PFFXaWRnZXQqPih3aWRnZXRPYmopOwor
CisgICAgTWFwcGVkU3R5bGVPcHRpb248UVN0eWxlT3B0aW9uU3BpbkJveD4gb3B0aW9uKHdpZGdl
dCwgcHJveHlPcHRpb24pOworCisgICAgb3B0aW9uLnN1YkNvbnRyb2xzID0gUVN0eWxlOjpTQ19T
cGluQm94VXAgfCBRU3R5bGU6OlNDX1NwaW5Cb3hEb3duOworICAgIGlmICghKG9wdGlvbi5zdGF0
ZSAmIFFTdHlsZTo6U3RhdGVfUmVhZE9ubHkpKSB7CisgICAgICAgIGlmIChvcHRpb24uc3RhdGUg
JiBRU3R5bGU6OlN0YXRlX0VuYWJsZWQpCisgICAgICAgICAgICBvcHRpb24uc3RlcEVuYWJsZWQg
PSBRQWJzdHJhY3RTcGluQm94OjpTdGVwVXBFbmFibGVkIHwgUUFic3RyYWN0U3BpbkJveDo6U3Rl
cERvd25FbmFibGVkOworICAgICAgICBpZiAob3B0aW9uLnN0YXRlICYgUVN0eWxlOjpTdGF0ZV9T
dW5rZW4pIHsKKyAgICAgICAgICAgIGlmIChzcGluQm94VXApCisgICAgICAgICAgICAgICAgb3B0
aW9uLmFjdGl2ZVN1YkNvbnRyb2xzID0gUVN0eWxlOjpTQ19TcGluQm94VXA7CisgICAgICAgICAg
ICBlbHNlCisgICAgICAgICAgICAgICAgb3B0aW9uLmFjdGl2ZVN1YkNvbnRyb2xzID0gUVN0eWxl
OjpTQ19TcGluQm94RG93bjsKKyAgICAgICAgfQorICAgIH0KKworICAgIEludFJlY3QgYnV0dG9u
UmVjdCA9IG9wdGlvbi5yZWN0OworICAgIC8vIERlZmF1bHQgdG8gbW92aW5nIHRoZSBidXR0b25z
IGEgbGl0dGxlIGJpdCB3aXRoaW4gdGhlIGVkaXRvciBmcmFtZS4KKyAgICBpbnQgaW5mbGF0ZVgg
PSAtMjsKKyAgICBpbnQgaW5mbGF0ZVkgPSAtMjsKKyNpZiBkZWZpbmVkKFFfV1NfTUFDKSAmJiAh
ZGVmaW5lZChRVF9OT19TVFlMRV9NQUMpCisgICAgLy8gUU1hY1N0eWxlIHdpbGwgcG9zaXRpb24g
dGhlIGFxdWEgYnV0dG9ucyBmbHVzaCB0byB0aGUgcmlnaHQuCisgICAgLy8gVGhpcyB3aWxsIG1v
dmUgdGhlbSBtb3JlIHdpdGhpbiB0aGUgY29udHJvbCBmb3IgYmV0dGVyIHN0eWxlLCBhIGxhCisg
ICAgLy8gQ2hyb21pdW0gbG9vayAmIGZlZWwuCisgICAgaWYgKHFvYmplY3RfY2FzdDxRTWFjU3R5
bGUqPihtX3N0eWxlKSkgeworICAgICAgICBpbmZsYXRlWCA9IC00OworICAgICAgICAvLyBSZW5k
ZXIgbWluaSBhcXVhIHNwaW4gYnV0dG9ucyBmb3IgUU1hY1N0eWxlIHRvIGZpdCBuaWNlbHkgaW50
bworICAgICAgICAvLyB0aGUgZWRpdG9yIGFyZWEsIGxpa2UgQ2hyb21pdW0uCisgICAgICAgIG9w
dGlvbi5zdGF0ZSB8PSBRU3R5bGU6OlN0YXRlX01pbmk7CisgICAgfQorI2VuZGlmCisjaWYgIWRl
ZmluZWQoUVRfTk9fU1RZTEVfUExBU1RJUVVFKQorICAgIC8vIFFQbGFzdGlxdWVTdHlsZSBsb29r
cyBiZXN0IHdoZW4gdGhlIHNwaW4gYnV0dG9ucyBhcmUgZmx1c2ggd2l0aCB0aGUgZnJhbWUncyBl
ZGdlLgorICAgIGlmIChxb2JqZWN0X2Nhc3Q8UVBsYXN0aXF1ZVN0eWxlKj4obV9zdHlsZSkpIHsK
KyAgICAgICAgaW5mbGF0ZVggPSAwOworICAgICAgICBpbmZsYXRlWSA9IDA7CisgICAgfQorI2Vu
ZGlmCisKKyAgICBidXR0b25SZWN0LmluZmxhdGVYKGluZmxhdGVYKTsKKyAgICBidXR0b25SZWN0
LmluZmxhdGVZKGluZmxhdGVZKTsKKyAgICBvcHRpb24ucmVjdCA9IGJ1dHRvblJlY3Q7CisKKyAg
ICBtX3N0eWxlLT5kcmF3Q29tcGxleENvbnRyb2woUVN0eWxlOjpDQ19TcGluQm94LCAmb3B0aW9u
LCBwYWludGVyLCB3aWRnZXQpOworfQorCit2b2lkIFFXZWJTdHlsZTo6cGFpbnRQcm9ncmVzc0Jh
cihRUGFpbnRlciogcGFpbnRlciwgY29uc3QgUVN0eWxlSW50ZXJmYWNlT3B0aW9uJiBwcm94eU9w
dGlvbiwgZG91YmxlIHByb2dyZXNzLCBkb3VibGUgYW5pbWF0aW9uUHJvZ3Jlc3MsIFFPYmplY3Qg
KndpZGdldE9iaikKK3sKKyAgICBlbnN1cmVTdHlsZSgpOworICAgIFFXaWRnZXQqIHdpZGdldCA9
IHFvYmplY3RfY2FzdDxRV2lkZ2V0Kj4od2lkZ2V0T2JqKTsKKworICAgIE1hcHBlZFN0eWxlT3B0
aW9uPFFTdHlsZU9wdGlvblByb2dyZXNzQmFyVjI+IG9wdGlvbih3aWRnZXQsIHByb3h5T3B0aW9u
KTsKKworICAgIG9wdGlvbi5tYXhpbXVtID0gc3RkOjpudW1lcmljX2xpbWl0czxpbnQ+OjptYXgo
KTsKKyAgICBvcHRpb24ubWluaW11bSA9IDA7CisgICAgb3B0aW9uLnByb2dyZXNzID0gcHJvZ3Jl
c3MgKiBzdGQ6Om51bWVyaWNfbGltaXRzPGludD46Om1heCgpOworCisgICAgY29uc3QgUVBvaW50
IHRvcExlZnQgPSBvcHRpb24ucmVjdC50b3BMZWZ0KCk7CisgICAgcGFpbnRlci0+dHJhbnNsYXRl
KHRvcExlZnQpOworICAgIG9wdGlvbi5yZWN0Lm1vdmVUbyhRUG9pbnQoMCwgMCkpOworCisgICAg
aWYgKHByb2dyZXNzIDwgMCkgeworICAgICAgICAvLyBGSVhNRTogVW50aWwgaHR0cDovL2J1Z3Jl
cG9ydHMucXQubm9raWEuY29tL2Jyb3dzZS9RVEJVRy05MTcxIGlzIGZpeGVkLAorICAgICAgICAv
LyB3ZSBzaW11bGF0ZSBvbmUgc3F1YXJlIGFuaW1hdGluZyBhY3Jvc3MgdGhlIHByb2dyZXNzIGJh
ci4KKyAgICAgICAgbV9zdHlsZS0+ZHJhd0NvbnRyb2woUVN0eWxlOjpDRV9Qcm9ncmVzc0Jhckdy
b292ZSwgJm9wdGlvbiwgcGFpbnRlciwgd2lkZ2V0KTsKKyAgICAgICAgaW50IGNodW5rV2lkdGgg
PSBtX3N0eWxlLT5waXhlbE1ldHJpYyhRU3R5bGU6OlBNX1Byb2dyZXNzQmFyQ2h1bmtXaWR0aCwg
Jm9wdGlvbik7CisgICAgICAgIFFDb2xvciBjb2xvciA9IChvcHRpb24ucGFsZXR0ZS5oaWdobGln
aHQoKSA9PSBvcHRpb24ucGFsZXR0ZS5iYWNrZ3JvdW5kKCkpID8gb3B0aW9uLnBhbGV0dGUuY29s
b3IoUVBhbGV0dGU6OkFjdGl2ZSwgUVBhbGV0dGU6OkhpZ2hsaWdodCkgOiBvcHRpb24ucGFsZXR0
ZS5jb2xvcihRUGFsZXR0ZTo6SGlnaGxpZ2h0KTsKKyAgICAgICAgaWYgKG9wdGlvbi5kaXJlY3Rp
b24gPT0gUXQ6OlJpZ2h0VG9MZWZ0KQorICAgICAgICAgICAgcGFpbnRlci0+ZmlsbFJlY3Qob3B0
aW9uLnJlY3QucmlnaHQoKSAtIGNodW5rV2lkdGggIC0gYW5pbWF0aW9uUHJvZ3Jlc3MgKiBvcHRp
b24ucmVjdC53aWR0aCgpLCAwLCBjaHVua1dpZHRoLCBvcHRpb24ucmVjdC5oZWlnaHQoKSwgY29s
b3IpOworICAgICAgICBlbHNlCisgICAgICAgICAgICBwYWludGVyLT5maWxsUmVjdChhbmltYXRp
b25Qcm9ncmVzcyAqIG9wdGlvbi5yZWN0LndpZHRoKCksIDAsIGNodW5rV2lkdGgsIG9wdGlvbi5y
ZWN0LmhlaWdodCgpLCBjb2xvcik7CisgICAgfSBlbHNlCisgICAgICAgIG1fc3R5bGUtPmRyYXdD
b250cm9sKFFTdHlsZTo6Q0VfUHJvZ3Jlc3NCYXIsICZvcHRpb24sIHBhaW50ZXIsIHdpZGdldCk7
CisKKyAgICBwYWludGVyLT50cmFuc2xhdGUoLXRvcExlZnQpOworfQorCitpbnQgUVdlYlN0eWxl
OjpzY3JvbGxCYXJFeHRlbnQoYm9vbCBtaW5pKQoreworICAgIGVuc3VyZVN0eWxlKCk7CisKKyAg
ICBRU3R5bGVPcHRpb25TbGlkZXIgbzsKKyAgICBvLm9yaWVudGF0aW9uID0gUXQ6OlZlcnRpY2Fs
OworICAgIG8uc3RhdGUgJj0gflFTdHlsZTo6U3RhdGVfSG9yaXpvbnRhbDsKKyAgICBpZiAobWlu
aSkKKyAgICAgICAgby5zdGF0ZSB8PSBRU3R5bGU6OlN0YXRlX01pbmk7CisgICAgcmV0dXJuIG1f
c3R5bGUtPnBpeGVsTWV0cmljKFFTdHlsZTo6UE1fU2Nyb2xsQmFyRXh0ZW50LCAmbywgMCk7Cit9
CisKK2Jvb2wgUVdlYlN0eWxlOjpzY3JvbGxCYXJNaWRkbGVDbGlja0Fic29sdXRlUG9zaXRpb25T
dHlsZUhpbnQoKSBjb25zdAoreworICAgIGVuc3VyZVN0eWxlKCk7CisgICAgcmV0dXJuIG1fc3R5
bGUtPnN0eWxlSGludChRU3R5bGU6OlNIX1Njcm9sbEJhcl9NaWRkbGVDbGlja0Fic29sdXRlUG9z
aXRpb24pOworfQorCit2b2lkIFFXZWJTdHlsZTo6cGFpbnRTY3JvbGxDb3JuZXIoUVBhaW50ZXIq
IHBhaW50ZXIsIGNvbnN0IFFSZWN0JiByZWN0LCBRT2JqZWN0KiB3aWRnZXRPYmopCit7CisgICAg
ZW5zdXJlU3R5bGUoKTsKKyAgICBRV2lkZ2V0KiB3aWRnZXQgPSBxb2JqZWN0X2Nhc3Q8UVdpZGdl
dCo+KHdpZGdldE9iaik7CisKKyAgICBRU3R5bGVPcHRpb24gb3B0aW9uOworICAgIG9wdGlvbi5y
ZWN0ID0gcmVjdDsKKyAgICBtX3N0eWxlLT5kcmF3UHJpbWl0aXZlKFFTdHlsZTo6UEVfUGFuZWxT
Y3JvbGxBcmVhQ29ybmVyLCAmb3B0aW9uLCBwYWludGVyLCB3aWRnZXQpOworfQorCitRU3R5bGVJ
bnRlcmZhY2U6OlN1YkNvbnRyb2wgUVdlYlN0eWxlOjpoaXRUZXN0U2Nyb2xsQmFyKGNvbnN0IFFT
dHlsZUludGVyZmFjZU9wdGlvbiAmcHJveHlPcHRpb24sIGNvbnN0IFFQb2ludCAmcG9zKQorewor
ICAgIGVuc3VyZVN0eWxlKCk7CisgICAgTWFwcGVkU3R5bGVPcHRpb248UVN0eWxlT3B0aW9uU2xp
ZGVyPiBvcHQoMCwgcHJveHlPcHRpb24pOworICAgIFFTdHlsZTo6U3ViQ29udHJvbCBzYyA9IG1f
c3R5bGUtPmhpdFRlc3RDb21wbGV4Q29udHJvbChRU3R5bGU6OkNDX1Njcm9sbEJhciwgJm9wdCwg
cG9zLCAwKTsKKyAgICByZXR1cm4gY29udmVydFRvUVN0eWxlSW50ZXJmYWNlU3ViQ29udHJvbChz
Yyk7Cit9CisKK1FSZWN0IFFXZWJTdHlsZTo6c2Nyb2xsQmFyU3ViQ29udHJvbFJlY3QoY29uc3Qg
UVN0eWxlSW50ZXJmYWNlT3B0aW9uICZwcm94eU9wdGlvbiwgUVN0eWxlSW50ZXJmYWNlOjpTdWJD
b250cm9sIHN1YkNvbnRyb2wpCit7CisgICAgZW5zdXJlU3R5bGUoKTsKKyAgICBNYXBwZWRTdHls
ZU9wdGlvbjxRU3R5bGVPcHRpb25TbGlkZXI+IG9wdCgwLCBwcm94eU9wdGlvbik7CisgICAgcmV0
dXJuIG1fc3R5bGUtPnN1YkNvbnRyb2xSZWN0KFFTdHlsZTo6Q0NfU2Nyb2xsQmFyLCAmb3B0LCBj
b252ZXJ0VG9RU3R5bGVTdWJDb250cm9sKHN1YkNvbnRyb2wpLCAwKTsKK30KKwordm9pZCBRV2Vi
U3R5bGU6OnBhaW50U2Nyb2xsQmFyKFFQYWludGVyICpwYWludGVyLCBjb25zdCBRU3R5bGVJbnRl
cmZhY2VPcHRpb24gJnByb3h5T3B0aW9uLCBRT2JqZWN0ICp3aWRnZXRPYmopCit7CisgICAgZW5z
dXJlU3R5bGUoKTsKKyAgICBRV2lkZ2V0KiB3aWRnZXQgPSBxb2JqZWN0X2Nhc3Q8UVdpZGdldCo+
KHdpZGdldE9iaik7CisKKyAgICBNYXBwZWRTdHlsZU9wdGlvbjxRU3R5bGVPcHRpb25TbGlkZXI+
IG9wdCh3aWRnZXQsIHByb3h5T3B0aW9uKTsKKworI2lmZGVmIFFfV1NfTUFDCisgICAgLy8gRklY
TUU6IFdlIGFsc28gbmVlZCB0byBjaGVjayB0aGUgd2lkZ2V0IHN0eWxlIGJ1dCB0b2RheSBTY3Jv
bGxiYXJUaGVtZSBpcyBub3QgYXdhcmUgb2YgdGhlIHBhZ2Ugc28gd2UKKyAgICAvLyBjYW4ndCBn
ZXQgdGhlIHdpZGdldC4KKyAgICBpZiAocW9iamVjdF9jYXN0PFFNYWNTdHlsZSo+KG1fc3R5bGUp
KQorICAgICAgICBtX3N0eWxlLT5kcmF3Q29tcGxleENvbnRyb2woUVN0eWxlOjpDQ19TY3JvbGxC
YXIsICZvcHQsIHBhaW50ZXIsIHdpZGdldCk7CisgICAgZWxzZQorI2VuZGlmCisgICAgeworICAg
ICAgICAvLyBUaGUgUVN0eWxlIGV4cGVjdHMgdGhlIGJhY2tncm91bmQgdG8gYmUgYWxyZWFkeSBm
aWxsZWQuCisgICAgICAgIHBhaW50ZXItPmZpbGxSZWN0KG9wdC5yZWN0LCBvcHQucGFsZXR0ZS5i
YWNrZ3JvdW5kKCkpOworCisgICAgICAgIGNvbnN0IFFQb2ludCB0b3BMZWZ0ID0gb3B0LnJlY3Qu
dG9wTGVmdCgpOworICAgICAgICBwYWludGVyLT50cmFuc2xhdGUodG9wTGVmdCk7CisgICAgICAg
IG9wdC5yZWN0Lm1vdmVUbyhRUG9pbnQoMCwgMCkpOworICAgICAgICBtX3N0eWxlLT5kcmF3Q29t
cGxleENvbnRyb2woUVN0eWxlOjpDQ19TY3JvbGxCYXIsICZvcHQsIHBhaW50ZXIsIHdpZGdldCk7
CisgICAgICAgIG9wdC5yZWN0Lm1vdmVUbyh0b3BMZWZ0KTsKKyAgICB9Cit9CisKK1FPYmplY3Qq
IFFXZWJTdHlsZTo6d2lkZ2V0Rm9yUGFpbnRlcihRUGFpbnRlciogcGFpbnRlcikKK3sKKyAgICBR
UGFpbnREZXZpY2UqIGRldiA9IDA7CisgICAgaWYgKHBhaW50ZXIpCisgICAgICAgIGRldiA9IHBh
aW50ZXItPmRldmljZSgpOworICAgIGlmIChkZXYgJiYgZGV2LT5kZXZUeXBlKCkgPT0gUUludGVy
bmFsOjpXaWRnZXQpCisgICAgICAgIHJldHVybiBzdGF0aWNfY2FzdDxRV2lkZ2V0Kj4oZGV2KTsK
KyAgICByZXR1cm4gMDsKK30KKworYm9vbCBRV2ViU3R5bGU6OmlzVmFsaWQoKSBjb25zdAorewor
ICAgIGVuc3VyZVN0eWxlKCk7CisgICAgcmV0dXJuIG1fc3R5bGU7Cit9CisKK3ZvaWQgUVdlYlN0
eWxlOjplbnN1cmVTdHlsZSgpIGNvbnN0Cit7CisgICAgaWYgKG1fc3R5bGUpCisgICAgICAgIHJl
dHVybjsKKworICAgIG1fc3R5bGUgPSBRU3R5bGVJbnRlcmZhY2U6OnN0eWxlRm9yUGFnZShtX3Bh
Z2UpOworCisgICAgaWYgKCFtX3N0eWxlKQorICAgICAgICBtX3N0eWxlID0gUUFwcGxpY2F0aW9u
OjpzdHlsZSgpOworfQorCit9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L3F0L1dlYkNvcmVT
dXBwb3J0L1FXZWJTdHlsZS5oIGIvU291cmNlL1dlYktpdC9xdC9XZWJDb3JlU3VwcG9ydC9RV2Vi
U3R5bGUuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwLi43MGU5ZTRkZGUwODVlMWFlYzY3MTY1NzJkNDk2M2FlNjUzOWE3
MjczCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYktpdC9xdC9XZWJDb3JlU3VwcG9ydC9R
V2ViU3R5bGUuaApAQCAtMCwwICsxLDk3IEBACisvKgorICogVGhpcyBmaWxlIGlzIHBhcnQgb2Yg
dGhlIHRoZW1lIGltcGxlbWVudGF0aW9uIGZvciBmb3JtIGNvbnRyb2xzIGluIFdlYkNvcmUuCisg
KgorICogQ29weXJpZ2h0IChDKSAyMDEyIERpZ2lhIFBsYyBhbmQvb3IgaXRzIHN1YnNpZGlhcnko
LWllcykuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTEtMjAxMiBOb2tpYSBDb3Jwb3JhdGlvbiBhbmQv
b3IgaXRzIHN1YnNpZGlhcnkoLWllcykuCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29m
dHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVy
IHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2Ug
YXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICog
dmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2
ZXJzaW9uLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0
aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRo
b3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBG
SVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiBMaWJyYXJ5
IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hv
dWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1Ymxp
YyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJ
TkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bworICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlv
biwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKKyAqIEJvc3RvbiwgTUEg
MDIxMTAtMTMwMSwgVVNBLgorICoKKyAqLworI2lmbmRlZiBRV2ViU3R5bGVfaAorI2RlZmluZSBR
V2ViU3R5bGVfaAorCisjaW5jbHVkZSA8UVN0eWxlSW50ZXJmYWNlLmg+CisKK1FUX0JFR0lOX05B
TUVTUEFDRQorY2xhc3MgUVN0eWxlOworY2xhc3MgUUxpbmVFZGl0OworY2xhc3MgUVN0eWxlT3B0
aW9uOworY2xhc3MgUVN0eWxlT3B0aW9uU2xpZGVyOworY2xhc3MgUVBhaW50ZXI7CitjbGFzcyBR
T2JqZWN0OworUVRfRU5EX05BTUVTUEFDRQorCituYW1lc3BhY2UgV2ViQ29yZSB7CitjbGFzcyBQ
YWdlOworfQorCituYW1lc3BhY2UgV2ViS2l0IHsKKworY2xhc3MgUVdlYlN0eWxlIDogcHVibGlj
IFdlYkNvcmU6OlFTdHlsZUludGVyZmFjZSB7CitwdWJsaWM6CisgICAgUVdlYlN0eWxlKFdlYkNv
cmU6OlBhZ2UqID0gMCk7CisgICAgdmlydHVhbCB+UVdlYlN0eWxlKCk7CisKKyAgICBzdGF0aWMg
V2ViQ29yZTo6UVN0eWxlSW50ZXJmYWNlKiBjcmVhdGUoV2ViQ29yZTo6UGFnZSogcGFnZSkKKyAg
ICB7IHJldHVybiBuZXcgUVdlYlN0eWxlKHBhZ2UpOyB9CisKKyAgICB2aXJ0dWFsIFFSZWN0IGJ1
dHRvblN1YkVsZW1lbnRSZWN0KEJ1dHRvblN1YkVsZW1lbnQsIFN0YXRlLCBjb25zdCBRUmVjdCYg
b3JpZ2luYWxSZWN0KSBjb25zdDsKKworICAgIHZpcnR1YWwgaW50IGZpbmRGcmFtZUxpbmVXaWR0
aCgpIGNvbnN0OworICAgIHZpcnR1YWwgaW50IHNpbXBsZVBpeGVsTWV0cmljKFBpeGVsTWV0cmlj
LCBTdGF0ZSA9IFN0YXRlX05vbmUsIFFPYmplY3QqIHdpZGdldCA9IDApIGNvbnN0OworICAgIHZp
cnR1YWwgaW50IGJ1dHRvbk1hcmdpbihTdGF0ZSwgY29uc3QgUVJlY3QmIG9yaWdpbmFsUmVjdCkg
Y29uc3Q7CisgICAgdmlydHVhbCBpbnQgc2xpZGVyTGVuZ3RoKFF0OjpPcmllbnRhdGlvbikgY29u
c3Q7CisgICAgdmlydHVhbCBpbnQgc2xpZGVyVGhpY2tuZXNzKFF0OjpPcmllbnRhdGlvbikgY29u
c3Q7CisgICAgdmlydHVhbCBpbnQgcHJvZ3Jlc3NCYXJDaHVua1dpZHRoKGNvbnN0IFFTaXplJikg
Y29uc3Q7CisgICAgdmlydHVhbCB2b2lkIGdldEJ1dHRvbk1ldHJpY3MoUVN0cmluZyogYnV0dG9u
Rm9udEZhbWlseSwgaW50KiBidXR0b25Gb250UGl4ZWxTaXplKSBjb25zdDsKKworICAgIHZpcnR1
YWwgUVNpemUgc2l6ZUZyb21Db250ZW50cyhDb250ZW50c1R5cGUsIFFTdHlsZUludGVyZmFjZTo6
U3RhdGUsIGNvbnN0IFFTaXplJikgY29uc3Q7CisKKyAgICB2aXJ0dWFsIHZvaWQgcGFpbnRCdXR0
b24oUVBhaW50ZXIqLCBCdXR0b25UeXBlLCBjb25zdCBXZWJDb3JlOjpRU3R5bGVJbnRlcmZhY2VP
cHRpb24gJnByb3h5T3B0aW9uLCBRT2JqZWN0ICp3aWRnZXQpOworICAgIHZpcnR1YWwgdm9pZCBw
YWludFRleHRGaWVsZChRUGFpbnRlciosIGNvbnN0IFdlYkNvcmU6OlFTdHlsZUludGVyZmFjZU9w
dGlvbiYsIFFPYmplY3QqIHdpZGdldE9iaik7CisgICAgdmlydHVhbCB2b2lkIHBhaW50Q29tYm9C
b3goUVBhaW50ZXIqLCBjb25zdCBXZWJDb3JlOjpRU3R5bGVJbnRlcmZhY2VPcHRpb24mLCBRT2Jq
ZWN0ICp3aWRnZXRPYmopOworICAgIHZpcnR1YWwgdm9pZCBwYWludENvbWJvQm94QXJyb3coUVBh
aW50ZXIqLCBjb25zdCBXZWJDb3JlOjpRU3R5bGVJbnRlcmZhY2VPcHRpb24mLCBRT2JqZWN0ICp3
aWRnZXRPYmopOworCisgICAgdmlydHVhbCB2b2lkIHBhaW50U2xpZGVyVHJhY2soUVBhaW50ZXIq
LCBjb25zdCBXZWJDb3JlOjpRU3R5bGVJbnRlcmZhY2VPcHRpb24mLCBRT2JqZWN0ICp3aWRnZXRP
YmopOworICAgIHZpcnR1YWwgdm9pZCBwYWludFNsaWRlclRodW1iKFFQYWludGVyKiwgY29uc3Qg
V2ViQ29yZTo6UVN0eWxlSW50ZXJmYWNlT3B0aW9uJiwgUU9iamVjdCAqd2lkZ2V0T2JqKTsKKyAg
ICB2aXJ0dWFsIHZvaWQgcGFpbnRJbm5lclNwaW5CdXR0b24oUVBhaW50ZXIqLCBjb25zdCBXZWJD
b3JlOjpRU3R5bGVJbnRlcmZhY2VPcHRpb24mLCBib29sIHNwaW5Cb3hVcCwgUU9iamVjdCogd2lk
Z2V0T2JqKTsKKyAgICB2aXJ0dWFsIHZvaWQgcGFpbnRQcm9ncmVzc0JhcihRUGFpbnRlciosIGNv
bnN0IFdlYkNvcmU6OlFTdHlsZUludGVyZmFjZU9wdGlvbiYsIGRvdWJsZSBwcm9ncmVzcywgZG91
YmxlIGFuaW1hdGlvblByb2dyZXNzLCBRT2JqZWN0KiB3aWRnZXRPYmopOworCisgICAgdmlydHVh
bCBpbnQgc2Nyb2xsQmFyRXh0ZW50KGJvb2wgbWluaSk7CisgICAgdmlydHVhbCBib29sIHNjcm9s
bEJhck1pZGRsZUNsaWNrQWJzb2x1dGVQb3NpdGlvblN0eWxlSGludCgpIGNvbnN0OworICAgIHZp
cnR1YWwgdm9pZCBwYWludFNjcm9sbENvcm5lcihRUGFpbnRlciosIGNvbnN0IFFSZWN0JiwgUU9i
amVjdCogd2lkZ2V0T2JqKTsKKworICAgIHZpcnR1YWwgU3ViQ29udHJvbCBoaXRUZXN0U2Nyb2xs
QmFyKGNvbnN0IFdlYkNvcmU6OlFTdHlsZUludGVyZmFjZU9wdGlvbiYsIGNvbnN0IFFQb2ludCYg
cG9zKTsKKyAgICB2aXJ0dWFsIFFSZWN0IHNjcm9sbEJhclN1YkNvbnRyb2xSZWN0KGNvbnN0IFdl
YkNvcmU6OlFTdHlsZUludGVyZmFjZU9wdGlvbiYsIFN1YkNvbnRyb2wpOworICAgIHZpcnR1YWwg
dm9pZCBwYWludFNjcm9sbEJhcihRUGFpbnRlciosIGNvbnN0IFdlYkNvcmU6OlFTdHlsZUludGVy
ZmFjZU9wdGlvbiYsIFFPYmplY3QqIHdpZGdldE9iaik7CisKKyAgICB2aXJ0dWFsIFFPYmplY3Qq
IHdpZGdldEZvclBhaW50ZXIoUVBhaW50ZXIqKTsKKworICAgIHZpcnR1YWwgYm9vbCBpc1ZhbGlk
KCkgY29uc3Q7CisKK3ByaXZhdGU6CisgICAgdm9pZCBlbnN1cmVTdHlsZSgpIGNvbnN0OworCisg
ICAgV2ViQ29yZTo6UGFnZSogbV9wYWdlOworICAgIG11dGFibGUgUVN0eWxlKiBtX3N0eWxlOwor
ICAgIFFTdHlsZSogbV9mYWxsYmFja1N0eWxlOworICAgIGJvb2wgbV9vd25GYWxsYmFja1N0eWxl
OworICAgIG11dGFibGUgUVNjb3BlZFBvaW50ZXI8UUxpbmVFZGl0PiBtX2xpbmVFZGl0OworfTsK
KworfQorCisjZW5kaWYgLy8gUVdlYlN0eWxlX2gKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQv
cXQvV2ViQ29yZVN1cHBvcnQvUmVuZGVyVGhlbWVRU3R5bGUuY3BwIGIvU291cmNlL1dlYktpdC9x
dC9XZWJDb3JlU3VwcG9ydC9SZW5kZXJUaGVtZVFTdHlsZS5jcHAKZGVsZXRlZCBmaWxlIG1vZGUg
MTAwNjQ0CmluZGV4IDhiYzBkZjQ5NzQ1MzU5ZDY2ODg3N2NhODdkNGJlYjUyMjk3MjQxZjcuLjAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1dlYktp
dC9xdC9XZWJDb3JlU3VwcG9ydC9SZW5kZXJUaGVtZVFTdHlsZS5jcHAKKysrIC9kZXYvbnVsbApA
QCAtMSw4MjcgKzAsMCBAQAotLyoKLSAqIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBXZWJLaXQg
cHJvamVjdC4KLSAqCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDgtMjAxMiBOb2tpYSBDb3Jwb3JhdGlv
biBhbmQvb3IgaXRzIHN1YnNpZGlhcnkoLWllcykKLSAqCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDYg
WmFjayBSdXNpbiA8emFja0BrZGUub3JnPgotICogICAgICAgICAgICAgICAyMDA2IERpcmsgTXVl
bGxlciA8bXVlbGxlckBrZGUub3JnPgotICogICAgICAgICAgICAgICAyMDA2IE5pa29sYXMgWmlt
bWVybWFubiA8emltbWVybWFubkBrZGUub3JnPgotICogQ29weXJpZ2h0IChDKSAyMDA4IEhvbGdl
ciBIYW5zIFBldGVyIEZyZXl0aGVyCi0gKgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0g
KiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQg
YW5kL29yCi0gKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBH
ZW5lcmFsIFB1YmxpYwotICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdh
cmUgRm91bmRhdGlvbjsgZWl0aGVyCi0gKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChh
dCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0gKgotICogVGhpcyBsaWJyYXJ5IGlz
IGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0gKiBidXQg
V0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBv
ZgotICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NF
LiAgU2VlIHRoZSBHTlUKLSAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9y
ZSBkZXRhaWxzLgotICoKLSAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhl
IEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKLSAqIGFsb25nIHdpdGggdGhpcyBs
aWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCi0gKiB0
aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZp
ZnRoIEZsb29yLAotICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCi0gKgotICovCi0KLSNp
bmNsdWRlICJjb25maWcuaCIKLSNpbmNsdWRlICJSZW5kZXJUaGVtZVFTdHlsZS5oIgotCi0jaW5j
bHVkZSAiQ1NTRm9udFNlbGVjdG9yLmgiCi0jaW5jbHVkZSAiQ1NTVmFsdWVLZXl3b3Jkcy5oIgot
I2luY2x1ZGUgIkNocm9tZS5oIgotI2luY2x1ZGUgIkNocm9tZUNsaWVudC5oIgotI2luY2x1ZGUg
IkNvbG9yLmgiCi0jaW5jbHVkZSAiRG9jdW1lbnQuaCIKLSNpbmNsdWRlICJGb250LmgiCi0jaW5j
bHVkZSAiRm9udFNlbGVjdG9yLmgiCi0jaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0LmgiCi0jaW5j
bHVkZSAiSFRNTElucHV0RWxlbWVudC5oIgotI2luY2x1ZGUgIkhUTUxOYW1lcy5oIgotI2luY2x1
ZGUgIkxvY2FsaXplZFN0cmluZ3MuaCIKLSNpbmNsdWRlICJOb3RJbXBsZW1lbnRlZC5oIgotI2lu
Y2x1ZGUgIlBhZ2UuaCIKLSNpbmNsdWRlICJQYWludEluZm8uaCIKLSNpbmNsdWRlICJRV2ViUGFn
ZUNsaWVudC5oIgotI2luY2x1ZGUgIlJlbmRlckJveC5oIgotI2lmIEVOQUJMRShQUk9HUkVTU19F
TEVNRU5UKQotI2luY2x1ZGUgIlJlbmRlclByb2dyZXNzLmgiCi0jZW5kaWYKLSNpbmNsdWRlICJS
ZW5kZXJTbGlkZXIuaCIKLSNpbmNsdWRlICJTY3JvbGxiYXJUaGVtZVFTdHlsZS5oIgotI2luY2x1
ZGUgIlNsaWRlclRodW1iRWxlbWVudC5oIgotI2luY2x1ZGUgIlN0eWxlUmVzb2x2ZXIuaCIKLSNp
bmNsdWRlICJVc2VyQWdlbnRTdHlsZVNoZWV0cy5oIgotCi0jaW5jbHVkZSA8UUFwcGxpY2F0aW9u
PgotI2luY2x1ZGUgPFFDb2xvcj4KLSNpbmNsdWRlIDxRRmlsZT4KLSNpbmNsdWRlIDxRRm9udE1l
dHJpY3M+Ci0jaW5jbHVkZSA8UUxpbmVFZGl0PgotI2luY2x1ZGUgPFFNYWNTdHlsZT4KLSNpbmNs
dWRlIDxRUGFpbnRlcj4KLSNpZm5kZWYgUVRfTk9fU1RZTEVfUExBU1RJUVVFCi0jaW5jbHVkZSA8
UVBsYXN0aXF1ZVN0eWxlPgotI2VuZGlmCi0jaW5jbHVkZSA8UVB1c2hCdXR0b24+Ci0jaW5jbHVk
ZSA8UVN0eWxlRmFjdG9yeT4KLSNpbmNsdWRlIDxRU3R5bGVPcHRpb25CdXR0b24+Ci0jaW5jbHVk
ZSA8UVN0eWxlT3B0aW9uRnJhbWVWMj4KLSNpZiBFTkFCTEUoUFJPR1JFU1NfRUxFTUVOVCkKLSNp
bmNsdWRlIDxRU3R5bGVPcHRpb25Qcm9ncmVzc0JhclYyPgotI2VuZGlmCi0jaW5jbHVkZSA8UVN0
eWxlT3B0aW9uU2xpZGVyPgotI2luY2x1ZGUgPFFXaWRnZXQ+Ci0KLW5hbWVzcGFjZSBXZWJDb3Jl
IHsKLQotdXNpbmcgbmFtZXNwYWNlIEhUTUxOYW1lczsKLQotaW5saW5lIHN0YXRpYyB2b2lkIGlu
aXRTdHlsZU9wdGlvbihRV2lkZ2V0KiB3aWRnZXQsIFFTdHlsZU9wdGlvbiYgb3B0aW9uKQotewot
ICAgIGlmICh3aWRnZXQpCi0gICAgICAgIG9wdGlvbi5pbml0RnJvbSh3aWRnZXQpOwotICAgIGVs
c2UgewotICAgICAgICAvLyBJZiBhIHdpZGdldCBpcyBub3QgZGlyZWN0bHkgYXZhaWxhYmxlIGZv
ciByZW5kZXJpbmcsIHdlIGZhbGxiYWNrIHRvIGRlZmF1bHQKLSAgICAgICAgLy8gdmFsdWUgZm9y
IGFuIGFjdGl2ZSB3aWRnZXQuCi0gICAgICAgIG9wdGlvbi5zdGF0ZSA9IFFTdHlsZTo6U3RhdGVf
QWN0aXZlIHwgUVN0eWxlOjpTdGF0ZV9FbmFibGVkOwotICAgIH0KLX0KLQotCi1RU2hhcmVkUG9p
bnRlcjxTdHlsZVBhaW50ZXI+IFJlbmRlclRoZW1lUVN0eWxlOjpnZXRTdHlsZVBhaW50ZXIoY29u
c3QgUGFpbnRJbmZvJiBwYWludEluZm8pCi17Ci0gICAgcmV0dXJuIFFTaGFyZWRQb2ludGVyPFN0
eWxlUGFpbnRlcj4obmV3IFN0eWxlUGFpbnRlclFTdHlsZSh0aGlzLCBwYWludEluZm8pKTsKLX0K
LQotU3R5bGVQYWludGVyUVN0eWxlOjpTdHlsZVBhaW50ZXJRU3R5bGUoUmVuZGVyVGhlbWVRU3R5
bGUqIHRoZW1lLCBjb25zdCBQYWludEluZm8mIHBhaW50SW5mbykKLSAgICA6IFN0eWxlUGFpbnRl
cih0aGVtZSwgcGFpbnRJbmZvKQotewotICAgIGluaXQocGFpbnRJbmZvLmNvbnRleHQgPyBwYWlu
dEluZm8uY29udGV4dCA6IDAsIHRoZW1lLT5xU3R5bGUoKSk7Ci19Ci0KLVN0eWxlUGFpbnRlclFT
dHlsZTo6U3R5bGVQYWludGVyUVN0eWxlKFNjcm9sbGJhclRoZW1lUVN0eWxlKiB0aGVtZSwgR3Jh
cGhpY3NDb250ZXh0KiBjb250ZXh0KQotICAgIDogU3R5bGVQYWludGVyKCkKLXsKLSAgICBpbml0
KGNvbnRleHQsIHRoZW1lLT5zdHlsZSgpKTsKLX0KLQotdm9pZCBTdHlsZVBhaW50ZXJRU3R5bGU6
OmluaXQoR3JhcGhpY3NDb250ZXh0KiBjb250ZXh0LCBRU3R5bGUqIHRoZW1lU3R5bGUpCi17Ci0g
ICAgcGFpbnRlciA9IHN0YXRpY19jYXN0PFFQYWludGVyKj4oY29udGV4dC0+cGxhdGZvcm1Db250
ZXh0KCkpOwotICAgIHdpZGdldCA9IDA7Ci0gICAgUVBhaW50RGV2aWNlKiBkZXYgPSAwOwotICAg
IGlmIChwYWludGVyKQotICAgICAgICBkZXYgPSBwYWludGVyLT5kZXZpY2UoKTsKLSAgICBpZiAo
ZGV2ICYmIGRldi0+ZGV2VHlwZSgpID09IFFJbnRlcm5hbDo6V2lkZ2V0KQotICAgICAgICB3aWRn
ZXQgPSBzdGF0aWNfY2FzdDxRV2lkZ2V0Kj4oZGV2KTsKLSAgICBzdHlsZSA9IHRoZW1lU3R5bGU7
Ci0KLSAgICBTdHlsZVBhaW50ZXI6OmluaXQoY29udGV4dCk7Ci19Ci0KLVBhc3NSZWZQdHI8UmVu
ZGVyVGhlbWU+IFJlbmRlclRoZW1lUVN0eWxlOjpjcmVhdGUoUGFnZSogcGFnZSkKLXsKLSAgICBy
ZXR1cm4gYWRvcHRSZWYobmV3IFJlbmRlclRoZW1lUVN0eWxlKHBhZ2UpKTsKLX0KLQotUmVuZGVy
VGhlbWVRU3R5bGU6OlJlbmRlclRoZW1lUVN0eWxlKFBhZ2UqIHBhZ2UpCi0gICAgOiBSZW5kZXJU
aGVtZVF0KHBhZ2UpCi0jaWZuZGVmIFFUX05PX0xJTkVFRElUCi0gICAgLCBtX2xpbmVFZGl0KDAp
Ci0jZW5kaWYKLXsKLSAgICBRUHVzaEJ1dHRvbiBidXR0b247Ci0gICAgUUZvbnQgZGVmYXVsdEJ1
dHRvbkZvbnQgPSBRQXBwbGljYXRpb246OmZvbnQoJmJ1dHRvbik7Ci0gICAgbV9idXR0b25Gb250
RmFtaWx5ID0gZGVmYXVsdEJ1dHRvbkZvbnQuZmFtaWx5KCk7Ci0jaWZkZWYgUV9XU19NQUMKLSAg
ICBidXR0b24uc2V0QXR0cmlidXRlKFF0OjpXQV9NYWNTbWFsbFNpemUpOwotICAgIFFGb250SW5m
byBmb250SW5mbyhkZWZhdWx0QnV0dG9uRm9udCk7Ci0gICAgbV9idXR0b25Gb250UGl4ZWxTaXpl
ID0gZm9udEluZm8ucGl4ZWxTaXplKCk7Ci0jZW5kaWYKLQotICAgIG1fZmFsbGJhY2tTdHlsZSA9
IFFTdHlsZUZhY3Rvcnk6OmNyZWF0ZShRTGF0aW4xU3RyaW5nKCJ3aW5kb3dzIikpOwotfQotCi1S
ZW5kZXJUaGVtZVFTdHlsZTo6flJlbmRlclRoZW1lUVN0eWxlKCkKLXsKLSAgICBkZWxldGUgbV9m
YWxsYmFja1N0eWxlOwotI2lmbmRlZiBRVF9OT19MSU5FRURJVAotICAgIGRlbGV0ZSBtX2xpbmVF
ZGl0OwotI2VuZGlmCi19Ci0KLQotLy8gZm9yIHNvbWUgd2lkZ2V0IHBhaW50aW5nLCB3ZSBuZWVk
IHRvIGZhbGxiYWNrIHRvIFdpbmRvd3Mgc3R5bGUKLVFTdHlsZSogUmVuZGVyVGhlbWVRU3R5bGU6
OmZhbGxiYWNrU3R5bGUoKSBjb25zdAotewotICAgIHJldHVybiAobV9mYWxsYmFja1N0eWxlKSA/
IG1fZmFsbGJhY2tTdHlsZSA6IFFBcHBsaWNhdGlvbjo6c3R5bGUoKTsKLX0KLQotdm9pZCBSZW5k
ZXJUaGVtZVFTdHlsZTo6c2V0UGFsZXR0ZUZyb21QYWdlQ2xpZW50SWZFeGlzdHMoUVBhbGV0dGUm
IHBhbGV0dGUpIGNvbnN0Ci17Ci0gICAgaWYgKCFtX3BhZ2UpCi0gICAgICAgIHJldHVybjsKLQot
ICAgIEFTU0VSVChtX3BhZ2UtPmNocm9tZSgpKTsKLSAgICBDaHJvbWVDbGllbnQqIGNocm9tZUNs
aWVudCA9IG1fcGFnZS0+Y2hyb21lKCktPmNsaWVudCgpOwotICAgIGlmICghY2hyb21lQ2xpZW50
KQotICAgICAgICByZXR1cm47Ci0KLSAgICBpZiAoUVdlYlBhZ2VDbGllbnQqIHBhZ2VDbGllbnQg
PSBjaHJvbWVDbGllbnQtPnBsYXRmb3JtUGFnZUNsaWVudCgpKQotICAgICAgICBwYWxldHRlID0g
cGFnZUNsaWVudC0+cGFsZXR0ZSgpOwotfQotCi1RU3R5bGUqIFJlbmRlclRoZW1lUVN0eWxlOjpx
U3R5bGUoKSBjb25zdAotewotICAgIGlmIChtX3BhZ2UpIHsKLSAgICAgICAgUVdlYlBhZ2VDbGll
bnQqIHBhZ2VDbGllbnQgPSBtX3BhZ2UtPmNocm9tZSgpLT5jbGllbnQoKS0+cGxhdGZvcm1QYWdl
Q2xpZW50KCk7Ci0KLSAgICAgICAgaWYgKHBhZ2VDbGllbnQpCi0gICAgICAgICAgICByZXR1cm4g
cGFnZUNsaWVudC0+c3R5bGUoKTsKLSAgICB9Ci0KLSAgICByZXR1cm4gUUFwcGxpY2F0aW9uOjpz
dHlsZSgpOwotfQotCi1pbnQgUmVuZGVyVGhlbWVRU3R5bGU6OmZpbmRGcmFtZUxpbmVXaWR0aChR
U3R5bGUqIHN0eWxlKSBjb25zdAotewotI2lmbmRlZiBRVF9OT19MSU5FRURJVAotICAgIGlmICgh
bV9saW5lRWRpdCkKLSAgICAgICAgbV9saW5lRWRpdCA9IG5ldyBRTGluZUVkaXQoKTsKLSNlbmRp
ZgotCi0gICAgUVN0eWxlT3B0aW9uRnJhbWVWMiBvcHQ7Ci0gICAgUVdpZGdldCogd2lkZ2V0ID0g
MDsKLSNpZm5kZWYgUVRfTk9fTElORUVESVQKLSAgICB3aWRnZXQgPSBtX2xpbmVFZGl0OwotI2Vu
ZGlmCi0gICAgcmV0dXJuIHN0eWxlLT5waXhlbE1ldHJpYyhRU3R5bGU6OlBNX0RlZmF1bHRGcmFt
ZVdpZHRoLCAmb3B0LCB3aWRnZXQpOwotfQotCi1RUmVjdCBSZW5kZXJUaGVtZVFTdHlsZTo6aW5m
bGF0ZUJ1dHRvblJlY3QoY29uc3QgUVJlY3QmIG9yaWdpbmFsUmVjdCkgY29uc3QKLXsKLSAgICBR
U3R5bGVPcHRpb25CdXR0b24gb3B0aW9uOwotICAgIG9wdGlvbi5zdGF0ZSB8PSBRU3R5bGU6OlN0
YXRlX1NtYWxsOwotICAgIG9wdGlvbi5yZWN0ID0gb3JpZ2luYWxSZWN0OwotCi0gICAgUVJlY3Qg
bGF5b3V0UmVjdCA9IHFTdHlsZSgpLT5zdWJFbGVtZW50UmVjdChRU3R5bGU6OlNFX1B1c2hCdXR0
b25MYXlvdXRJdGVtLCAmb3B0aW9uLCAwKTsKLSAgICBpZiAoIWxheW91dFJlY3QuaXNOdWxsKCkp
IHsKLSAgICAgICAgaW50IHBhZGRpbmdMZWZ0ID0gbGF5b3V0UmVjdC5sZWZ0KCkgLSBvcmlnaW5h
bFJlY3QubGVmdCgpOwotICAgICAgICBpbnQgcGFkZGluZ1JpZ2h0ID0gb3JpZ2luYWxSZWN0LnJp
Z2h0KCkgLSBsYXlvdXRSZWN0LnJpZ2h0KCk7Ci0gICAgICAgIGludCBwYWRkaW5nVG9wID0gbGF5
b3V0UmVjdC50b3AoKSAtIG9yaWdpbmFsUmVjdC50b3AoKTsKLSAgICAgICAgaW50IHBhZGRpbmdC
b3R0b20gPSBvcmlnaW5hbFJlY3QuYm90dG9tKCkgLSBsYXlvdXRSZWN0LmJvdHRvbSgpOwotCi0g
ICAgICAgIHJldHVybiBvcmlnaW5hbFJlY3QuYWRqdXN0ZWQoLXBhZGRpbmdMZWZ0LCAtcGFkZGlu
Z1RvcCwgcGFkZGluZ1JpZ2h0LCBwYWRkaW5nQm90dG9tKTsKLSAgICB9Ci0gICAgcmV0dXJuIG9y
aWdpbmFsUmVjdDsKLX0KLQotdm9pZCBSZW5kZXJUaGVtZVFTdHlsZTo6Y29tcHV0ZVNpemVCYXNl
ZE9uU3R5bGUoUmVuZGVyU3R5bGUqIHJlbmRlclN0eWxlKSBjb25zdAotewotICAgIFFTaXplIHNp
emUoMCwgMCk7Ci0gICAgY29uc3QgUUZvbnRNZXRyaWNzIGZtKHJlbmRlclN0eWxlLT5mb250KCku
c3ludGhldGljRm9udCgpKTsKLSAgICBRU3R5bGUqIHN0eWxlID0gcVN0eWxlKCk7Ci0KLSAgICBz
d2l0Y2ggKHJlbmRlclN0eWxlLT5hcHBlYXJhbmNlKCkpIHsKLSAgICBjYXNlIFRleHRBcmVhUGFy
dDoKLSAgICBjYXNlIFNlYXJjaEZpZWxkUGFydDoKLSAgICBjYXNlIFRleHRGaWVsZFBhcnQ6IHsK
LSAgICAgICAgaW50IHBhZGRpbmcgPSBmaW5kRnJhbWVMaW5lV2lkdGgoc3R5bGUpOwotICAgICAg
ICByZW5kZXJTdHlsZS0+c2V0UGFkZGluZ0xlZnQoTGVuZ3RoKHBhZGRpbmcsIEZpeGVkKSk7Ci0g
ICAgICAgIHJlbmRlclN0eWxlLT5zZXRQYWRkaW5nUmlnaHQoTGVuZ3RoKHBhZGRpbmcsIEZpeGVk
KSk7Ci0gICAgICAgIHJlbmRlclN0eWxlLT5zZXRQYWRkaW5nVG9wKExlbmd0aChwYWRkaW5nLCBG
aXhlZCkpOwotICAgICAgICByZW5kZXJTdHlsZS0+c2V0UGFkZGluZ0JvdHRvbShMZW5ndGgocGFk
ZGluZywgRml4ZWQpKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgfQotICAgIGRlZmF1bHQ6Ci0gICAg
ICAgIGJyZWFrOwotICAgIH0KLSAgICAvLyBJZiB0aGUgd2lkdGggYW5kIGhlaWdodCBhcmUgYm90
aCBzcGVjaWZpZWQsIHRoZW4gd2UgaGF2ZSBub3RoaW5nIHRvIGRvLgotICAgIGlmICghcmVuZGVy
U3R5bGUtPndpZHRoKCkuaXNJbnRyaW5zaWNPckF1dG8oKSAmJiAhcmVuZGVyU3R5bGUtPmhlaWdo
dCgpLmlzQXV0bygpKQotICAgICAgICByZXR1cm47Ci0KLSAgICBzd2l0Y2ggKHJlbmRlclN0eWxl
LT5hcHBlYXJhbmNlKCkpIHsKLSAgICBjYXNlIENoZWNrYm94UGFydDogewotICAgICAgICBRU3R5
bGVPcHRpb24gc3R5bGVPcHRpb247Ci0gICAgICAgIHN0eWxlT3B0aW9uLnN0YXRlIHw9IFFTdHls
ZTo6U3RhdGVfU21hbGw7Ci0gICAgICAgIGludCBjaGVja0JveFdpZHRoID0gc3R5bGUtPnBpeGVs
TWV0cmljKFFTdHlsZTo6UE1fSW5kaWNhdG9yV2lkdGgsICZzdHlsZU9wdGlvbik7Ci0gICAgICAg
IGNoZWNrQm94V2lkdGggKj0gcmVuZGVyU3R5bGUtPmVmZmVjdGl2ZVpvb20oKTsKLSAgICAgICAg
c2l6ZSA9IFFTaXplKGNoZWNrQm94V2lkdGgsIGNoZWNrQm94V2lkdGgpOwotICAgICAgICBicmVh
azsKLSAgICB9Ci0gICAgY2FzZSBSYWRpb1BhcnQ6IHsKLSAgICAgICAgUVN0eWxlT3B0aW9uIHN0
eWxlT3B0aW9uOwotICAgICAgICBzdHlsZU9wdGlvbi5zdGF0ZSB8PSBRU3R5bGU6OlN0YXRlX1Nt
YWxsOwotICAgICAgICBpbnQgcmFkaW9XaWR0aCA9IHN0eWxlLT5waXhlbE1ldHJpYyhRU3R5bGU6
OlBNX0V4Y2x1c2l2ZUluZGljYXRvcldpZHRoLCAmc3R5bGVPcHRpb24pOwotICAgICAgICByYWRp
b1dpZHRoICo9IHJlbmRlclN0eWxlLT5lZmZlY3RpdmVab29tKCk7Ci0gICAgICAgIHNpemUgPSBR
U2l6ZShyYWRpb1dpZHRoLCByYWRpb1dpZHRoKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgfQotICAg
IGNhc2UgUHVzaEJ1dHRvblBhcnQ6Ci0gICAgY2FzZSBCdXR0b25QYXJ0OiB7Ci0gICAgICAgIFFT
dHlsZU9wdGlvbkJ1dHRvbiBzdHlsZU9wdGlvbjsKLSAgICAgICAgc3R5bGVPcHRpb24uc3RhdGUg
fD0gUVN0eWxlOjpTdGF0ZV9TbWFsbDsKLSAgICAgICAgUVNpemUgY29udGVudFNpemUgPSBmbS5z
aXplKFF0OjpUZXh0U2hvd01uZW1vbmljLCBRU3RyaW5nOjpmcm9tTGF0aW4xKCJYIikpOwotICAg
ICAgICBRU2l6ZSBwdXNoQnV0dG9uU2l6ZSA9IHN0eWxlLT5zaXplRnJvbUNvbnRlbnRzKFFTdHls
ZTo6Q1RfUHVzaEJ1dHRvbiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAmc3R5bGVPcHRpb24sIGNvbnRlbnRTaXplLCAwKTsKLSAgICAgICAg
c3R5bGVPcHRpb24ucmVjdCA9IFFSZWN0KDAsIDAsIHB1c2hCdXR0b25TaXplLndpZHRoKCksIHB1
c2hCdXR0b25TaXplLmhlaWdodCgpKTsKLSAgICAgICAgUVJlY3QgbGF5b3V0UmVjdCA9IHN0eWxl
LT5zdWJFbGVtZW50UmVjdChRU3R5bGU6OlNFX1B1c2hCdXR0b25MYXlvdXRJdGVtLAotICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZzdHlsZU9wdGlvbiwg
MCk7Ci0KLSAgICAgICAgLy8gSWYgdGhlIHN0eWxlIHN1cHBvcnRzIGxheW91dCByZWN0cyB3ZSB1
c2UgdGhhdCwgYW5kICBjb21wZW5zYXRlIGFjY29yZGluZ2x5Ci0gICAgICAgIC8vIGluIHBhaW50
QnV0dG9uKCkgYmVsb3cuCi0gICAgICAgIGlmICghbGF5b3V0UmVjdC5pc051bGwoKSkKLSAgICAg
ICAgICAgIHNpemUuc2V0SGVpZ2h0KGxheW91dFJlY3QuaGVpZ2h0KCkpOwotICAgICAgICBlbHNl
Ci0gICAgICAgICAgICBzaXplLnNldEhlaWdodChwdXNoQnV0dG9uU2l6ZS5oZWlnaHQoKSk7Ci0K
LSAgICAgICAgYnJlYWs7Ci0gICAgfQotICAgIGNhc2UgTWVudWxpc3RQYXJ0OiB7Ci0gICAgICAg
IFFTdHlsZU9wdGlvbkNvbWJvQm94IHN0eWxlT3B0aW9uOwotICAgICAgICBzdHlsZU9wdGlvbi5z
dGF0ZSB8PSBRU3R5bGU6OlN0YXRlX1NtYWxsOwotICAgICAgICBpbnQgY29udGVudEhlaWdodCA9
IHFNYXgoZm0ubGluZVNwYWNpbmcoKSwgMTQpICsgMjsKLSAgICAgICAgUVNpemUgbWVudUxpc3RT
aXplID0gc3R5bGUtPnNpemVGcm9tQ29udGVudHMoUVN0eWxlOjpDVF9Db21ib0JveCwKLSAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJnN0eWxlT3B0
aW9uLCBRU2l6ZSgwLCBjb250ZW50SGVpZ2h0KSwgMCk7Ci0gICAgICAgIHNpemUuc2V0SGVpZ2h0
KG1lbnVMaXN0U2l6ZS5oZWlnaHQoKSk7Ci0gICAgICAgIGJyZWFrOwotICAgIH0KLSAgICBkZWZh
dWx0OgotICAgICAgICBicmVhazsKLSAgICB9Ci0KLSAgICAvLyBGSVhNRTogQ2hlY2sgaXMgZmxh
d2VkLCBzaW5jZSBpdCBkb2Vzbid0IHRha2UgbWluLXdpZHRoL21heC13aWR0aCBpbnRvIGFjY291
bnQuCi0gICAgaWYgKHJlbmRlclN0eWxlLT53aWR0aCgpLmlzSW50cmluc2ljT3JBdXRvKCkgJiYg
c2l6ZS53aWR0aCgpID4gMCkKLSAgICAgICAgcmVuZGVyU3R5bGUtPnNldE1pbldpZHRoKExlbmd0
aChzaXplLndpZHRoKCksIEZpeGVkKSk7Ci0gICAgaWYgKHJlbmRlclN0eWxlLT5oZWlnaHQoKS5p
c0F1dG8oKSAmJiBzaXplLmhlaWdodCgpID4gMCkKLSAgICAgICAgcmVuZGVyU3R5bGUtPnNldE1p
bkhlaWdodChMZW5ndGgoc2l6ZS5oZWlnaHQoKSwgRml4ZWQpKTsKLX0KLQotCi0KLXZvaWQgUmVu
ZGVyVGhlbWVRU3R5bGU6OmFkanVzdEJ1dHRvblN0eWxlKFN0eWxlUmVzb2x2ZXIqIHN0eWxlUmVz
b2x2ZXIsIFJlbmRlclN0eWxlKiBzdHlsZSwgRWxlbWVudCopIGNvbnN0Ci17Ci0gICAgLy8gRGl0
Y2ggdGhlIGJvcmRlci4KLSAgICBzdHlsZS0+cmVzZXRCb3JkZXIoKTsKLQotI2lmZGVmIFFfV1Nf
TUFDCi0gICAgaWYgKHN0eWxlLT5hcHBlYXJhbmNlKCkgPT0gUHVzaEJ1dHRvblBhcnQpIHsKLSAg
ICAgICAgLy8gVGhlIE1hYyBwb3J0cyBpZ25vcmUgdGhlIHNwZWNpZmllZCBoZWlnaHQgZm9yIDxp
bnB1dCB0eXBlPSJidXR0b24iPiBlbGVtZW50cwotICAgICAgICAvLyB1bmxlc3MgYSBib3JkZXIg
YW5kL29yIGJhY2tncm91bmQgQ1NTIHByb3BlcnR5IGlzIGFsc28gc3BlY2lmaWVkLgotICAgICAg
ICBzdHlsZS0+c2V0SGVpZ2h0KExlbmd0aChBdXRvKSk7Ci0gICAgfQotI2VuZGlmCi0KLSAgICBG
b250RGVzY3JpcHRpb24gZm9udERlc2NyaXB0aW9uID0gc3R5bGUtPmZvbnREZXNjcmlwdGlvbigp
OwotICAgIGZvbnREZXNjcmlwdGlvbi5zZXRJc0Fic29sdXRlU2l6ZSh0cnVlKTsKLQotI2lmZGVm
IFFfV1NfTUFDIC8vIFVzZSBmaXhlZCBmb250IHNpemUgYW5kIGZhbWlseSBvbiBNYWMgKGxpa2Ug
U2FmYXJpIGRvZXMpCi0gICAgZm9udERlc2NyaXB0aW9uLnNldFNwZWNpZmllZFNpemUobV9idXR0
b25Gb250UGl4ZWxTaXplKTsKLSAgICBmb250RGVzY3JpcHRpb24uc2V0Q29tcHV0ZWRTaXplKG1f
YnV0dG9uRm9udFBpeGVsU2l6ZSk7Ci0jZWxzZQotICAgIGZvbnREZXNjcmlwdGlvbi5zZXRTcGVj
aWZpZWRTaXplKHN0eWxlLT5mb250U2l6ZSgpKTsKLSAgICBmb250RGVzY3JpcHRpb24uc2V0Q29t
cHV0ZWRTaXplKHN0eWxlLT5mb250U2l6ZSgpKTsKLSNlbmRpZgotCi0gICAgRm9udEZhbWlseSBm
b250RmFtaWx5OwotICAgIGZvbnRGYW1pbHkuc2V0RmFtaWx5KG1fYnV0dG9uRm9udEZhbWlseSk7
Ci0gICAgZm9udERlc2NyaXB0aW9uLnNldEZhbWlseShmb250RmFtaWx5KTsKLSAgICBzdHlsZS0+
c2V0Rm9udERlc2NyaXB0aW9uKGZvbnREZXNjcmlwdGlvbik7Ci0gICAgc3R5bGUtPmZvbnQoKS51
cGRhdGUoc3R5bGVSZXNvbHZlci0+Zm9udFNlbGVjdG9yKCkpOwotICAgIHN0eWxlLT5zZXRMaW5l
SGVpZ2h0KFJlbmRlclN0eWxlOjppbml0aWFsTGluZUhlaWdodCgpKTsKLSAgICBzZXRCdXR0b25T
aXplKHN0eWxlKTsKLSAgICBzZXRCdXR0b25QYWRkaW5nKHN0eWxlKTsKLX0KLQotdm9pZCBSZW5k
ZXJUaGVtZVFTdHlsZTo6c2V0QnV0dG9uUGFkZGluZyhSZW5kZXJTdHlsZSogc3R5bGUpIGNvbnN0
Ci17Ci0gICAgUVN0eWxlT3B0aW9uQnV0dG9uIHN0eWxlT3B0aW9uOwotICAgIHN0eWxlT3B0aW9u
LnN0YXRlIHw9IFFTdHlsZTo6U3RhdGVfU21hbGw7Ci0KLSAgICAvLyBGYWtlIGEgYnV0dG9uIHJl
Y3QgaGVyZSwgc2luY2Ugd2UncmUganVzdCBjb21wdXRpbmcgZGVsdGFzCi0gICAgUVJlY3Qgb3Jp
Z2luYWxSZWN0ID0gUVJlY3QoMCwgMCwgMTAwLCAzMCk7Ci0gICAgc3R5bGVPcHRpb24ucmVjdCA9
IG9yaWdpbmFsUmVjdDsKLQotICAgIC8vIERlZmF1bHQgcGFkZGluZyBpcyBiYXNlZCBvbiB0aGUg
YnV0dG9uIG1hcmdpbiBwaXhlbCBtZXRyaWMKLSAgICBpbnQgYnV0dG9uTWFyZ2luID0gcVN0eWxl
KCktPnBpeGVsTWV0cmljKFFTdHlsZTo6UE1fQnV0dG9uTWFyZ2luLCAmc3R5bGVPcHRpb24sIDAp
OwotICAgIGludCBwYWRkaW5nTGVmdCA9IGJ1dHRvbk1hcmdpbjsKLSAgICBpbnQgcGFkZGluZ1Jp
Z2h0ID0gYnV0dG9uTWFyZ2luOwotICAgIGludCBwYWRkaW5nVG9wID0gYnV0dG9uTWFyZ2luOwot
ICAgIGludCBwYWRkaW5nQm90dG9tID0gYnV0dG9uTWFyZ2luOwotCi0gICAgLy8gVGhlbiBjaGVj
ayBpZiB0aGUgc3R5bGUgdXNlcyBsYXlvdXQgbWFyZ2lucwotICAgIFFSZWN0IGxheW91dFJlY3Qg
PSBxU3R5bGUoKS0+c3ViRWxlbWVudFJlY3QoUVN0eWxlOjpTRV9QdXNoQnV0dG9uTGF5b3V0SXRl
bSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZzdHls
ZU9wdGlvbiwgMCk7Ci0gICAgaWYgKCFsYXlvdXRSZWN0LmlzTnVsbCgpKSB7Ci0gICAgICAgIFFS
ZWN0IGNvbnRlbnRzUmVjdCA9IHFTdHlsZSgpLT5zdWJFbGVtZW50UmVjdChRU3R5bGU6OlNFX1B1
c2hCdXR0b25Db250ZW50cywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICZzdHlsZU9wdGlvbiwgMCk7Ci0gICAgICAgIHBhZGRpbmdMZWZ0ID0g
Y29udGVudHNSZWN0LmxlZnQoKSAtIGxheW91dFJlY3QubGVmdCgpOwotICAgICAgICBwYWRkaW5n
UmlnaHQgPSBsYXlvdXRSZWN0LnJpZ2h0KCkgLSBjb250ZW50c1JlY3QucmlnaHQoKTsKLSAgICAg
ICAgcGFkZGluZ1RvcCA9IGNvbnRlbnRzUmVjdC50b3AoKSAtIGxheW91dFJlY3QudG9wKCk7Ci0K
LSAgICAgICAgLy8gQ2FuJ3QgdXNlIHRoaXMgcmlnaHQgbm93IGJlY2F1c2Ugd2UgZG9uJ3QgaGF2
ZSB0aGUgYmFzZWxpbmUgdG8gY29tcGVuc2F0ZQotICAgICAgICAvLyBwYWRkaW5nQm90dG9tID0g
bGF5b3V0UmVjdC5ib3R0b20oKSAtIGNvbnRlbnRzUmVjdC5ib3R0b20oKTsKLSAgICB9Ci0gICAg
c3R5bGUtPnNldFBhZGRpbmdMZWZ0KExlbmd0aChwYWRkaW5nTGVmdCwgRml4ZWQpKTsKLSAgICBz
dHlsZS0+c2V0UGFkZGluZ1JpZ2h0KExlbmd0aChwYWRkaW5nUmlnaHQsIEZpeGVkKSk7Ci0gICAg
c3R5bGUtPnNldFBhZGRpbmdUb3AoTGVuZ3RoKHBhZGRpbmdUb3AsIEZpeGVkKSk7Ci0gICAgc3R5
bGUtPnNldFBhZGRpbmdCb3R0b20oTGVuZ3RoKHBhZGRpbmdCb3R0b20sIEZpeGVkKSk7Ci19Ci0K
LWJvb2wgUmVuZGVyVGhlbWVRU3R5bGU6OnBhaW50QnV0dG9uKFJlbmRlck9iamVjdCogbywgY29u
c3QgUGFpbnRJbmZvJiBpLCBjb25zdCBJbnRSZWN0JiByKQotewotICAgIFN0eWxlUGFpbnRlclFT
dHlsZSBwKHRoaXMsIGkpOwotICAgIGlmICghcC5pc1ZhbGlkKCkpCi0gICAgICAgcmV0dXJuIHRy
dWU7Ci0KLSAgICBRU3R5bGVPcHRpb25CdXR0b24gb3B0aW9uOwotICAgIGluaXRTdHlsZU9wdGlv
bihwLndpZGdldCwgb3B0aW9uKTsKLSAgICBvcHRpb24ucmVjdCA9IHI7Ci0gICAgb3B0aW9uLnN0
YXRlIHw9IFFTdHlsZTo6U3RhdGVfU21hbGw7Ci0KLSAgICBDb250cm9sUGFydCBhcHBlYXJhbmNl
ID0gaW5pdGlhbGl6ZUNvbW1vblFTdHlsZU9wdGlvbnMob3B0aW9uLCBvKTsKLSAgICBpZiAoYXBw
ZWFyYW5jZSA9PSBQdXNoQnV0dG9uUGFydCB8fCBhcHBlYXJhbmNlID09IEJ1dHRvblBhcnQpIHsK
LSAgICAgICAgb3B0aW9uLnJlY3QgPSBpbmZsYXRlQnV0dG9uUmVjdChvcHRpb24ucmVjdCk7Ci0g
ICAgICAgIHAuZHJhd0NvbnRyb2woUVN0eWxlOjpDRV9QdXNoQnV0dG9uLCBvcHRpb24pOwotICAg
IH0gZWxzZSBpZiAoYXBwZWFyYW5jZSA9PSBSYWRpb1BhcnQpCi0gICAgICAgcC5kcmF3Q29udHJv
bChRU3R5bGU6OkNFX1JhZGlvQnV0dG9uLCBvcHRpb24pOwotICAgIGVsc2UgaWYgKGFwcGVhcmFu
Y2UgPT0gQ2hlY2tib3hQYXJ0KQotICAgICAgIHAuZHJhd0NvbnRyb2woUVN0eWxlOjpDRV9DaGVj
a0JveCwgb3B0aW9uKTsKLQotICAgIHJldHVybiBmYWxzZTsKLX0KLQotYm9vbCBSZW5kZXJUaGVt
ZVFTdHlsZTo6cGFpbnRUZXh0RmllbGQoUmVuZGVyT2JqZWN0KiBvLCBjb25zdCBQYWludEluZm8m
IGksIGNvbnN0IEludFJlY3QmIHIpCi17Ci0gICAgU3R5bGVQYWludGVyUVN0eWxlIHAodGhpcywg
aSk7Ci0gICAgaWYgKCFwLmlzVmFsaWQoKSkKLSAgICAgICAgcmV0dXJuIHRydWU7Ci0KLSAgICBR
U3R5bGVPcHRpb25GcmFtZVYyIHBhbmVsOwotICAgIGluaXRTdHlsZU9wdGlvbihwLndpZGdldCwg
cGFuZWwpOwotICAgIHBhbmVsLnJlY3QgPSByOwotICAgIHBhbmVsLmxpbmVXaWR0aCA9IGZpbmRG
cmFtZUxpbmVXaWR0aChxU3R5bGUoKSk7Ci0gICAgcGFuZWwuc3RhdGUgfD0gUVN0eWxlOjpTdGF0
ZV9TdW5rZW47Ci0gICAgcGFuZWwuZmVhdHVyZXMgPSBRU3R5bGVPcHRpb25GcmFtZVYyOjpOb25l
OwotCi0gICAgLy8gR2V0IHRoZSBjb3JyZWN0IHRoZW1lIGRhdGEgZm9yIGEgdGV4dCBmaWVsZAot
ICAgIENvbnRyb2xQYXJ0IGFwcGVhcmFuY2UgPSBpbml0aWFsaXplQ29tbW9uUVN0eWxlT3B0aW9u
cyhwYW5lbCwgbyk7Ci0gICAgaWYgKGFwcGVhcmFuY2UgIT0gVGV4dEZpZWxkUGFydAotICAgICAg
ICAmJiBhcHBlYXJhbmNlICE9IFNlYXJjaEZpZWxkUGFydAotICAgICAgICAmJiBhcHBlYXJhbmNl
ICE9IFRleHRBcmVhUGFydAotICAgICAgICAmJiBhcHBlYXJhbmNlICE9IExpc3Rib3hQYXJ0KQot
ICAgICAgICByZXR1cm4gdHJ1ZTsKLQotICAgIC8vIE5vdyBwYWludCB0aGUgdGV4dCBmaWVsZC4K
LSAgICBwLmRyYXdQcmltaXRpdmUoUVN0eWxlOjpQRV9QYW5lbExpbmVFZGl0LCBwYW5lbCk7Ci0g
ICAgcmV0dXJuIGZhbHNlOwotfQotCi12b2lkIFJlbmRlclRoZW1lUVN0eWxlOjphZGp1c3RUZXh0
QXJlYVN0eWxlKFN0eWxlUmVzb2x2ZXIqIHN0eWxlUmVzb2x2ZXIsIFJlbmRlclN0eWxlKiBzdHls
ZSwgRWxlbWVudCogZWxlbWVudCkgY29uc3QKLXsKLSAgICBhZGp1c3RUZXh0RmllbGRTdHlsZShz
dHlsZVJlc29sdmVyLCBzdHlsZSwgZWxlbWVudCk7Ci19Ci0KLWJvb2wgUmVuZGVyVGhlbWVRU3R5
bGU6OnBhaW50VGV4dEFyZWEoUmVuZGVyT2JqZWN0KiBvLCBjb25zdCBQYWludEluZm8mIGksIGNv
bnN0IEludFJlY3QmIHIpCi17Ci0gICAgcmV0dXJuIHBhaW50VGV4dEZpZWxkKG8sIGksIHIpOwot
fQotCi12b2lkIFJlbmRlclRoZW1lUVN0eWxlOjpzZXRQb3B1cFBhZGRpbmcoUmVuZGVyU3R5bGUq
IHN0eWxlKSBjb25zdAotewotICAgIGNvbnN0IGludCBwYWRkaW5nTGVmdCA9IDQ7Ci0gICAgY29u
c3QgaW50IHBhZGRpbmdSaWdodCA9IHN0eWxlLT53aWR0aCgpLmlzRml4ZWQoKSB8fCBzdHlsZS0+
d2lkdGgoKS5pc1BlcmNlbnQoKSA/IDUgOiA4OwotCi0gICAgc3R5bGUtPnNldFBhZGRpbmdMZWZ0
KExlbmd0aChwYWRkaW5nTGVmdCwgRml4ZWQpKTsKLQotICAgIFFTdHlsZU9wdGlvbkNvbWJvQm94
IG9wdDsKLSAgICBpbnQgdyA9IHFTdHlsZSgpLT5waXhlbE1ldHJpYyhRU3R5bGU6OlBNX0J1dHRv
bkljb25TaXplLCAmb3B0LCAwKTsKLSAgICBzdHlsZS0+c2V0UGFkZGluZ1JpZ2h0KExlbmd0aChw
YWRkaW5nUmlnaHQgKyB3LCBGaXhlZCkpOwotCi0gICAgc3R5bGUtPnNldFBhZGRpbmdUb3AoTGVu
Z3RoKDIsIEZpeGVkKSk7Ci0gICAgc3R5bGUtPnNldFBhZGRpbmdCb3R0b20oTGVuZ3RoKDIsIEZp
eGVkKSk7Ci19Ci0KLVFQYWxldHRlIFJlbmRlclRoZW1lUVN0eWxlOjpjb2xvclBhbGV0dGUoKSBj
b25zdAotewotICAgIFFQYWxldHRlIHBhbGV0dGUgPSBSZW5kZXJUaGVtZVF0Ojpjb2xvclBhbGV0
dGUoKTsKLSAgICBzZXRQYWxldHRlRnJvbVBhZ2VDbGllbnRJZkV4aXN0cyhwYWxldHRlKTsKLSAg
ICByZXR1cm4gcGFsZXR0ZTsKLX0KLQotYm9vbCBSZW5kZXJUaGVtZVFTdHlsZTo6cGFpbnRNZW51
TGlzdChSZW5kZXJPYmplY3QqIG8sIGNvbnN0IFBhaW50SW5mbyYgaSwgY29uc3QgSW50UmVjdCYg
cikKLXsKLSAgICBTdHlsZVBhaW50ZXJRU3R5bGUgcCh0aGlzLCBpKTsKLSAgICBpZiAoIXAuaXNW
YWxpZCgpKQotICAgICAgICByZXR1cm4gdHJ1ZTsKLQotICAgIFFTdHlsZU9wdGlvbkNvbWJvQm94
IG9wdDsKLSAgICBpbml0U3R5bGVPcHRpb24ocC53aWRnZXQsIG9wdCk7Ci0gICAgaW5pdGlhbGl6
ZUNvbW1vblFTdHlsZU9wdGlvbnMob3B0LCBvKTsKLQotICAgIEludFJlY3QgcmVjdCA9IHI7Ci0K
LSNpZiBkZWZpbmVkKFFfV1NfTUFDKSAmJiAhZGVmaW5lZChRVF9OT19TVFlMRV9NQUMpCi0gICAg
Ly8gUU1hY1N0eWxlIG1ha2VzIHRoZSBjb21ibyBib3hlcyBhIGxpdHRsZSBiaXQgc21hbGxlciB0
byBsZWF2ZSBzcGFjZSBmb3IgdGhlIGZvY3VzIHJlY3QuCi0gICAgLy8gQmVjYXVzZSBvZiBpdCwg
dGhlIGNvbWJvIGJ1dHRvbiBpcyBkcmF3biBhdCBhIHBvaW50IHRvIHRoZSBsZWZ0IG9mIHdoZXJl
IGl0IHdhcyBleHBlY3QgdG8gYmUgYW5kIG1heSBlbmQgdXAKLSAgICAvLyBvdmVybGFwcGVkIHdp
dGggdGhlIHRleHQuIFRoaXMgd2lsbCBmb3JjZSBRTWFjU3R5bGUgdG8gZHJhdyB0aGUgY29tYm8g
Ym94IHdpdGggdGhlIGV4cGVjdGVkIHdpZHRoLgotICAgIGlmIChxb2JqZWN0X2Nhc3Q8UU1hY1N0
eWxlKj4ocC5zdHlsZSkpCi0gICAgICAgIHJlY3QuaW5mbGF0ZVgoMyk7Ci0jZW5kaWYKLQotICAg
IGNvbnN0IFFQb2ludCB0b3BMZWZ0ID0gcmVjdC5sb2NhdGlvbigpOwotICAgIHAucGFpbnRlci0+
dHJhbnNsYXRlKHRvcExlZnQpOwotICAgIG9wdC5yZWN0Lm1vdmVUbyhRUG9pbnQoMCwgMCkpOwot
ICAgIG9wdC5yZWN0LnNldFNpemUocmVjdC5zaXplKCkpOwotCi0gICAgcC5kcmF3Q29tcGxleENv
bnRyb2woUVN0eWxlOjpDQ19Db21ib0JveCwgb3B0KTsKLSAgICBwLnBhaW50ZXItPnRyYW5zbGF0
ZSgtdG9wTGVmdCk7Ci0gICAgcmV0dXJuIGZhbHNlOwotfQotCi12b2lkIFJlbmRlclRoZW1lUVN0
eWxlOjphZGp1c3RNZW51TGlzdEJ1dHRvblN0eWxlKFN0eWxlUmVzb2x2ZXIqIHN0eWxlUmVzb2x2
ZXIsIFJlbmRlclN0eWxlKiBzdHlsZSwgRWxlbWVudCogZSkgY29uc3QKLXsKLSAgICAvLyBXT1JL
QVJPVU5EIGJlY2F1c2UgaHRtbC5jc3Mgc3BlY2lmaWVzIC13ZWJraXQtYm9yZGVyLXJhZGl1cyBm
b3IgPHNlbGVjdD4gc28gd2Ugb3ZlcnJpZGUgaXQgaGVyZQotICAgIC8vIHNlZSBhbHNvIGh0dHA6
Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE4Mzk5Ci0gICAgc3R5bGUtPnJlc2V0
Qm9yZGVyUmFkaXVzKCk7Ci0KLSAgICBSZW5kZXJUaGVtZVF0OjphZGp1c3RNZW51TGlzdEJ1dHRv
blN0eWxlKHN0eWxlUmVzb2x2ZXIsIHN0eWxlLCBlKTsKLX0KLQotYm9vbCBSZW5kZXJUaGVtZVFT
dHlsZTo6cGFpbnRNZW51TGlzdEJ1dHRvbihSZW5kZXJPYmplY3QqIG8sIGNvbnN0IFBhaW50SW5m
byYgaSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBJbnRS
ZWN0JiByKQotewotICAgIFN0eWxlUGFpbnRlclFTdHlsZSBwKHRoaXMsIGkpOwotICAgIGlmICgh
cC5pc1ZhbGlkKCkpCi0gICAgICAgIHJldHVybiB0cnVlOwotCi0gICAgUVN0eWxlT3B0aW9uQ29t
Ym9Cb3ggb3B0aW9uOwotICAgIGluaXRTdHlsZU9wdGlvbihwLndpZGdldCwgb3B0aW9uKTsKLSAg
ICBpbml0aWFsaXplQ29tbW9uUVN0eWxlT3B0aW9ucyhvcHRpb24sIG8pOwotICAgIG9wdGlvbi5y
ZWN0ID0gcjsKLQotICAgIC8vIGZvciBkcmF3aW5nIHRoZSBjb21ibyBib3ggYXJyb3csIHJlbHkg
b25seSBvbiB0aGUgZmFsbGJhY2sgc3R5bGUKLSAgICBwLnN0eWxlID0gZmFsbGJhY2tTdHlsZSgp
OwotICAgIG9wdGlvbi5zdWJDb250cm9scyA9IFFTdHlsZTo6U0NfQ29tYm9Cb3hBcnJvdzsKLSAg
ICBwLmRyYXdDb21wbGV4Q29udHJvbChRU3R5bGU6OkNDX0NvbWJvQm94LCBvcHRpb24pOwotCi0g
ICAgcmV0dXJuIGZhbHNlOwotfQotCi0jaWYgRU5BQkxFKFBST0dSRVNTX0VMRU1FTlQpCi1kb3Vi
bGUgUmVuZGVyVGhlbWVRU3R5bGU6OmFuaW1hdGlvbkR1cmF0aW9uRm9yUHJvZ3Jlc3NCYXIoUmVu
ZGVyUHJvZ3Jlc3MqIHJlbmRlclByb2dyZXNzKSBjb25zdAotewotICAgIGlmIChyZW5kZXJQcm9n
cmVzcy0+cG9zaXRpb24oKSA+PSAwKQotICAgICAgICByZXR1cm4gMDsKLQotICAgIFFTdHlsZU9w
dGlvblByb2dyZXNzQmFyVjIgb3B0aW9uOwotICAgIG9wdGlvbi5yZWN0LnNldFNpemUocmVuZGVy
UHJvZ3Jlc3MtPnBpeGVsU25hcHBlZFNpemUoKSk7Ci0gICAgLy8gRklYTUU6IFVudGlsIGh0dHA6
Ly9idWdyZXBvcnRzLnF0Lm5va2lhLmNvbS9icm93c2UvUVRCVUctOTE3MSBpcyBmaXhlZCwKLSAg
ICAvLyB3ZSBzaW11bGF0ZSBvbmUgc3F1YXJlIGFuaW1hdGluZyBhY3Jvc3MgdGhlIHByb2dyZXNz
IGJhci4KLSAgICByZXR1cm4gKG9wdGlvbi5yZWN0LndpZHRoKCkgLyBxU3R5bGUoKS0+cGl4ZWxN
ZXRyaWMoUVN0eWxlOjpQTV9Qcm9ncmVzc0JhckNodW5rV2lkdGgsICZvcHRpb24pKSAqIGFuaW1h
dGlvblJlcGVhdEludGVydmFsRm9yUHJvZ3Jlc3NCYXIocmVuZGVyUHJvZ3Jlc3MpOwotfQotCi1i
b29sIFJlbmRlclRoZW1lUVN0eWxlOjpwYWludFByb2dyZXNzQmFyKFJlbmRlck9iamVjdCogbywg
Y29uc3QgUGFpbnRJbmZvJiBwaSwgY29uc3QgSW50UmVjdCYgcikKLXsKLSAgICBpZiAoIW8tPmlz
UHJvZ3Jlc3MoKSkKLSAgICAgICAgcmV0dXJuIHRydWU7Ci0KLSAgICBTdHlsZVBhaW50ZXJRU3R5
bGUgcCh0aGlzLCBwaSk7Ci0gICAgaWYgKCFwLmlzVmFsaWQoKSkKLSAgICAgICByZXR1cm4gdHJ1
ZTsKLQotICAgIFFTdHlsZU9wdGlvblByb2dyZXNzQmFyVjIgb3B0aW9uOwotICAgIGluaXRTdHls
ZU9wdGlvbihwLndpZGdldCwgb3B0aW9uKTsKLSAgICBpbml0aWFsaXplQ29tbW9uUVN0eWxlT3B0
aW9ucyhvcHRpb24sIG8pOwotCi0gICAgUmVuZGVyUHJvZ3Jlc3MqIHJlbmRlclByb2dyZXNzID0g
dG9SZW5kZXJQcm9ncmVzcyhvKTsKLSAgICBvcHRpb24ucmVjdCA9IHI7Ci0gICAgb3B0aW9uLm1h
eGltdW0gPSBzdGQ6Om51bWVyaWNfbGltaXRzPGludD46Om1heCgpOwotICAgIG9wdGlvbi5taW5p
bXVtID0gMDsKLSAgICBvcHRpb24ucHJvZ3Jlc3MgPSAocmVuZGVyUHJvZ3Jlc3MtPnBvc2l0aW9u
KCkgKiBzdGQ6Om51bWVyaWNfbGltaXRzPGludD46Om1heCgpKTsKLQotICAgIGNvbnN0IFFQb2lu
dCB0b3BMZWZ0ID0gci5sb2NhdGlvbigpOwotICAgIHAucGFpbnRlci0+dHJhbnNsYXRlKHRvcExl
ZnQpOwotICAgIG9wdGlvbi5yZWN0Lm1vdmVUbyhRUG9pbnQoMCwgMCkpOwotICAgIG9wdGlvbi5y
ZWN0LnNldFNpemUoci5zaXplKCkpOwotCi0gICAgaWYgKG9wdGlvbi5wcm9ncmVzcyA8IDApIHsK
LSAgICAgICAgLy8gRklYTUU6IFVudGlsIGh0dHA6Ly9idWdyZXBvcnRzLnF0Lm5va2lhLmNvbS9i
cm93c2UvUVRCVUctOTE3MSBpcyBmaXhlZCwKLSAgICAgICAgLy8gd2Ugc2ltdWxhdGUgb25lIHNx
dWFyZSBhbmltYXRpbmcgYWNyb3NzIHRoZSBwcm9ncmVzcyBiYXIuCi0gICAgICAgIHAuZHJhd0Nv
bnRyb2woUVN0eWxlOjpDRV9Qcm9ncmVzc0Jhckdyb292ZSwgb3B0aW9uKTsKLSAgICAgICAgaW50
IGNodW5rV2lkdGggPSBxU3R5bGUoKS0+cGl4ZWxNZXRyaWMoUVN0eWxlOjpQTV9Qcm9ncmVzc0Jh
ckNodW5rV2lkdGgsICZvcHRpb24pOwotICAgICAgICBRQ29sb3IgY29sb3IgPSAob3B0aW9uLnBh
bGV0dGUuaGlnaGxpZ2h0KCkgPT0gb3B0aW9uLnBhbGV0dGUuYmFja2dyb3VuZCgpKSA/IG9wdGlv
bi5wYWxldHRlLmNvbG9yKFFQYWxldHRlOjpBY3RpdmUsIFFQYWxldHRlOjpIaWdobGlnaHQpIDog
b3B0aW9uLnBhbGV0dGUuY29sb3IoUVBhbGV0dGU6OkhpZ2hsaWdodCk7Ci0gICAgICAgIGlmIChy
ZW5kZXJQcm9ncmVzcy0+c3R5bGUoKS0+ZGlyZWN0aW9uKCkgPT0gUlRMKQotICAgICAgICAgICAg
cC5wYWludGVyLT5maWxsUmVjdChvcHRpb24ucmVjdC5yaWdodCgpIC0gY2h1bmtXaWR0aCAgLSBy
ZW5kZXJQcm9ncmVzcy0+YW5pbWF0aW9uUHJvZ3Jlc3MoKSAqIG9wdGlvbi5yZWN0LndpZHRoKCks
IDAsIGNodW5rV2lkdGgsIG9wdGlvbi5yZWN0LmhlaWdodCgpLCBjb2xvcik7Ci0gICAgICAgIGVs
c2UKLSAgICAgICAgICAgIHAucGFpbnRlci0+ZmlsbFJlY3QocmVuZGVyUHJvZ3Jlc3MtPmFuaW1h
dGlvblByb2dyZXNzKCkgKiBvcHRpb24ucmVjdC53aWR0aCgpLCAwLCBjaHVua1dpZHRoLCBvcHRp
b24ucmVjdC5oZWlnaHQoKSwgY29sb3IpOwotICAgIH0gZWxzZQotICAgICAgICBwLmRyYXdDb250
cm9sKFFTdHlsZTo6Q0VfUHJvZ3Jlc3NCYXIsIG9wdGlvbik7Ci0KLSAgICBwLnBhaW50ZXItPnRy
YW5zbGF0ZSgtdG9wTGVmdCk7Ci0KLSAgICByZXR1cm4gZmFsc2U7Ci19Ci0jZW5kaWYKLQotYm9v
bCBSZW5kZXJUaGVtZVFTdHlsZTo6cGFpbnRTbGlkZXJUcmFjayhSZW5kZXJPYmplY3QqIG8sIGNv
bnN0IFBhaW50SW5mbyYgcGksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
Y29uc3QgSW50UmVjdCYgcikKLXsKLSAgICBTdHlsZVBhaW50ZXJRU3R5bGUgcCh0aGlzLCBwaSk7
Ci0gICAgaWYgKCFwLmlzVmFsaWQoKSkKLSAgICAgICAgcmV0dXJuIHRydWU7Ci0KLSAgICBjb25z
dCBRUG9pbnQgdG9wTGVmdCA9IHIubG9jYXRpb24oKTsKLSAgICBwLnBhaW50ZXItPnRyYW5zbGF0
ZSh0b3BMZWZ0KTsKLQotICAgIFFTdHlsZU9wdGlvblNsaWRlciBvcHRpb247Ci0gICAgaW5pdFN0
eWxlT3B0aW9uKHAud2lkZ2V0LCBvcHRpb24pOwotICAgIG9wdGlvbi5zdWJDb250cm9scyA9IFFT
dHlsZTo6U0NfU2xpZGVyR3Jvb3ZlOwotICAgIENvbnRyb2xQYXJ0IGFwcGVhcmFuY2UgPSBpbml0
aWFsaXplQ29tbW9uUVN0eWxlT3B0aW9ucyhvcHRpb24sIG8pOwotICAgIG9wdGlvbi5yZWN0ID0g
cjsKLSAgICBvcHRpb24ucmVjdC5tb3ZlVG8oUVBvaW50KDAsIDApKTsKLSAgICBpZiAoYXBwZWFy
YW5jZSA9PSBTbGlkZXJWZXJ0aWNhbFBhcnQpCi0gICAgICAgIG9wdGlvbi5vcmllbnRhdGlvbiA9
IFF0OjpWZXJ0aWNhbDsKLSAgICBpZiAoaXNQcmVzc2VkKG8pKQotICAgICAgICBvcHRpb24uc3Rh
dGUgfD0gUVN0eWxlOjpTdGF0ZV9TdW5rZW47Ci0KLSAgICAvLyBzb21lIHN0eWxlcyBuZWVkIHRo
aXMgdG8gc2hvdyBhIGhpZ2hsaWdodCBvbiBvbmUgc2lkZSBvZiB0aGUgZ3Jvb3ZlCi0gICAgSFRN
TElucHV0RWxlbWVudCogc2xpZGVyID0gby0+bm9kZSgpLT50b0lucHV0RWxlbWVudCgpOwotICAg
IGlmIChzbGlkZXIpIHsKLSAgICAgICAgb3B0aW9uLnVwc2lkZURvd24gPSAoYXBwZWFyYW5jZSA9
PSBTbGlkZXJIb3Jpem9udGFsUGFydCkgJiYgIW8tPnN0eWxlKCktPmlzTGVmdFRvUmlnaHREaXJl
Y3Rpb24oKTsKLSAgICAgICAgLy8gVXNlIHRoZSB3aWR0aCBhcyBhIG11bHRpcGxpZXIgaW4gY2Fz
ZSB0aGUgc2xpZGVyIHZhbHVlcyBhcmUgPD0gMQotICAgICAgICBjb25zdCBpbnQgd2lkdGggPSBy
LndpZHRoKCkgPiAwID8gci53aWR0aCgpIDogMTAwOwotICAgICAgICBvcHRpb24ubWF4aW11bSA9
IHNsaWRlci0+bWF4aW11bSgpICogd2lkdGg7Ci0gICAgICAgIG9wdGlvbi5taW5pbXVtID0gc2xp
ZGVyLT5taW5pbXVtKCkgKiB3aWR0aDsKLSAgICAgICAgaWYgKCFvcHRpb24udXBzaWRlRG93bikK
LSAgICAgICAgICAgIG9wdGlvbi5zbGlkZXJQb3NpdGlvbiA9IHNsaWRlci0+dmFsdWVBc051bWJl
cigpICogd2lkdGg7Ci0gICAgICAgIGVsc2UKLSAgICAgICAgICAgIG9wdGlvbi5zbGlkZXJQb3Np
dGlvbiA9IG9wdGlvbi5taW5pbXVtICsgb3B0aW9uLm1heGltdW0gLSBzbGlkZXItPnZhbHVlQXNO
dW1iZXIoKSAqIHdpZHRoOwotICAgIH0KLQotICAgIHAuZHJhd0NvbXBsZXhDb250cm9sKFFTdHls
ZTo6Q0NfU2xpZGVyLCBvcHRpb24pOwotCi0gICAgaWYgKG9wdGlvbi5zdGF0ZSAmIFFTdHlsZTo6
U3RhdGVfSGFzRm9jdXMpIHsKLSAgICAgICAgUVN0eWxlT3B0aW9uRm9jdXNSZWN0IGZvY3VzT3B0
aW9uOwotICAgICAgICBmb2N1c09wdGlvbi5yZWN0ID0gcjsKLSAgICAgICAgcC5kcmF3UHJpbWl0
aXZlKFFTdHlsZTo6UEVfRnJhbWVGb2N1c1JlY3QsIGZvY3VzT3B0aW9uKTsKLSAgICB9Ci0gICAg
cC5wYWludGVyLT50cmFuc2xhdGUoLXRvcExlZnQpOwotICAgIHJldHVybiBmYWxzZTsKLX0KLQot
dm9pZCBSZW5kZXJUaGVtZVFTdHlsZTo6YWRqdXN0U2xpZGVyVHJhY2tTdHlsZShTdHlsZVJlc29s
dmVyKiwgUmVuZGVyU3R5bGUqIHN0eWxlLCBFbGVtZW50KikgY29uc3QKLXsKLSAgICBzdHlsZS0+
c2V0Qm94U2hhZG93KG51bGxwdHIpOwotfQotCi1ib29sIFJlbmRlclRoZW1lUVN0eWxlOjpwYWlu
dFNsaWRlclRodW1iKFJlbmRlck9iamVjdCogbywgY29uc3QgUGFpbnRJbmZvJiBwaSwKLSAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBJbnRSZWN0JiByKQotewotICAg
IFN0eWxlUGFpbnRlclFTdHlsZSBwKHRoaXMsIHBpKTsKLSAgICBpZiAoIXAuaXNWYWxpZCgpKQot
ICAgICAgICByZXR1cm4gdHJ1ZTsKLQotICAgIGNvbnN0IFFQb2ludCB0b3BMZWZ0ID0gci5sb2Nh
dGlvbigpOwotICAgIHAucGFpbnRlci0+dHJhbnNsYXRlKHRvcExlZnQpOwotCi0gICAgUVN0eWxl
T3B0aW9uU2xpZGVyIG9wdGlvbjsKLSAgICBpbml0U3R5bGVPcHRpb24ocC53aWRnZXQsIG9wdGlv
bik7Ci0gICAgb3B0aW9uLnN1YkNvbnRyb2xzID0gUVN0eWxlOjpTQ19TbGlkZXJIYW5kbGU7Ci0g
ICAgQ29udHJvbFBhcnQgYXBwZWFyYW5jZSA9IGluaXRpYWxpemVDb21tb25RU3R5bGVPcHRpb25z
KG9wdGlvbiwgbyk7Ci0gICAgb3B0aW9uLnJlY3QgPSByOwotICAgIG9wdGlvbi5yZWN0Lm1vdmVU
byhRUG9pbnQoMCwgMCkpOwotICAgIGlmIChhcHBlYXJhbmNlID09IFNsaWRlclRodW1iVmVydGlj
YWxQYXJ0KQotICAgICAgICBvcHRpb24ub3JpZW50YXRpb24gPSBRdDo6VmVydGljYWw7Ci0gICAg
aWYgKGlzUHJlc3NlZChvKSkgewotICAgICAgICBvcHRpb24uYWN0aXZlU3ViQ29udHJvbHMgPSBR
U3R5bGU6OlNDX1NsaWRlckhhbmRsZTsKLSAgICAgICAgb3B0aW9uLnN0YXRlIHw9IFFTdHlsZTo6
U3RhdGVfU3Vua2VuOwotICAgIH0KLQotICAgIHAuZHJhd0NvbXBsZXhDb250cm9sKFFTdHlsZTo6
Q0NfU2xpZGVyLCBvcHRpb24pOwotICAgIHAucGFpbnRlci0+dHJhbnNsYXRlKC10b3BMZWZ0KTsK
LSAgICByZXR1cm4gZmFsc2U7Ci19Ci0KLXZvaWQgUmVuZGVyVGhlbWVRU3R5bGU6OmFkanVzdFNs
aWRlclRodW1iU3R5bGUoU3R5bGVSZXNvbHZlciogc3R5bGVSZXNvbHZlciwgUmVuZGVyU3R5bGUq
IHN0eWxlLCBFbGVtZW50KiBlbGVtZW50KSBjb25zdAotewotICAgIFJlbmRlclRoZW1lOjphZGp1
c3RTbGlkZXJUaHVtYlN0eWxlKHN0eWxlUmVzb2x2ZXIsIHN0eWxlLCBlbGVtZW50KTsKLSAgICBz
dHlsZS0+c2V0Qm94U2hhZG93KG51bGxwdHIpOwotfQotCi1ib29sIFJlbmRlclRoZW1lUVN0eWxl
OjpwYWludFNlYXJjaEZpZWxkKFJlbmRlck9iamVjdCogbywgY29uc3QgUGFpbnRJbmZvJiBwaSwK
LSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBJbnRSZWN0JiByKQot
ewotICAgIHJldHVybiBwYWludFRleHRGaWVsZChvLCBwaSwgcik7Ci19Ci0KLXZvaWQgUmVuZGVy
VGhlbWVRU3R5bGU6OmFkanVzdFNlYXJjaEZpZWxkRGVjb3JhdGlvblN0eWxlKFN0eWxlUmVzb2x2
ZXIqIHN0eWxlUmVzb2x2ZXIsIFJlbmRlclN0eWxlKiBzdHlsZSwgRWxlbWVudCogZSkgY29uc3QK
LXsKLSAgICBub3RJbXBsZW1lbnRlZCgpOwotICAgIFJlbmRlclRoZW1lOjphZGp1c3RTZWFyY2hG
aWVsZERlY29yYXRpb25TdHlsZShzdHlsZVJlc29sdmVyLCBzdHlsZSwgZSk7Ci19Ci0KLWJvb2wg
UmVuZGVyVGhlbWVRU3R5bGU6OnBhaW50U2VhcmNoRmllbGREZWNvcmF0aW9uKFJlbmRlck9iamVj
dCogbywgY29uc3QgUGFpbnRJbmZvJiBwaSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgY29uc3QgSW50UmVjdCYgcikKLXsKLSAgICBub3RJbXBsZW1lbnRl
ZCgpOwotICAgIHJldHVybiBSZW5kZXJUaGVtZTo6cGFpbnRTZWFyY2hGaWVsZERlY29yYXRpb24o
bywgcGksIHIpOwotfQotCi12b2lkIFJlbmRlclRoZW1lUVN0eWxlOjphZGp1c3RTZWFyY2hGaWVs
ZFJlc3VsdHNEZWNvcmF0aW9uU3R5bGUoU3R5bGVSZXNvbHZlciogc3R5bGVSZXNvbHZlciwgUmVu
ZGVyU3R5bGUqIHN0eWxlLCBFbGVtZW50KiBlKSBjb25zdAotewotICAgIG5vdEltcGxlbWVudGVk
KCk7Ci0gICAgUmVuZGVyVGhlbWU6OmFkanVzdFNlYXJjaEZpZWxkUmVzdWx0c0RlY29yYXRpb25T
dHlsZShzdHlsZVJlc29sdmVyLCBzdHlsZSwgZSk7Ci19Ci0KLWJvb2wgUmVuZGVyVGhlbWVRU3R5
bGU6OnBhaW50U2VhcmNoRmllbGRSZXN1bHRzRGVjb3JhdGlvbihSZW5kZXJPYmplY3QqIG8sIGNv
bnN0IFBhaW50SW5mbyYgcGksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBjb25zdCBJbnRSZWN0JiByKQotewotICAgIG5vdEltcGxlbWVudGVk
KCk7Ci0gICAgcmV0dXJuIFJlbmRlclRoZW1lOjpwYWludFNlYXJjaEZpZWxkUmVzdWx0c0RlY29y
YXRpb24obywgcGksIHIpOwotfQotCi0jaWZuZGVmIFFUX05PX1NQSU5CT1gKLQotYm9vbCBSZW5k
ZXJUaGVtZVFTdHlsZTo6cGFpbnRJbm5lclNwaW5CdXR0b24oUmVuZGVyT2JqZWN0KiBvLCBjb25z
dCBQYWludEluZm8mIHBhaW50SW5mbywgY29uc3QgSW50UmVjdCYgcmVjdCkKLXsKLSAgICBTdHls
ZVBhaW50ZXJRU3R5bGUgcCh0aGlzLCBwYWludEluZm8pOwotICAgIGlmICghcC5pc1ZhbGlkKCkp
Ci0gICAgICAgcmV0dXJuIHRydWU7Ci0KLSAgICBRU3R5bGVPcHRpb25TcGluQm94IG9wdGlvbjsK
LSAgICBpbml0U3R5bGVPcHRpb24ocC53aWRnZXQsIG9wdGlvbik7Ci0gICAgb3B0aW9uLnN1YkNv
bnRyb2xzID0gUVN0eWxlOjpTQ19TcGluQm94VXAgfCBRU3R5bGU6OlNDX1NwaW5Cb3hEb3duOwot
ICAgIGlmICghaXNSZWFkT25seUNvbnRyb2wobykpIHsKLSAgICAgICAgaWYgKGlzRW5hYmxlZChv
KSkKLSAgICAgICAgICAgIG9wdGlvbi5zdGVwRW5hYmxlZCA9IFFBYnN0cmFjdFNwaW5Cb3g6OlN0
ZXBVcEVuYWJsZWQgfCBRQWJzdHJhY3RTcGluQm94OjpTdGVwRG93bkVuYWJsZWQ7Ci0gICAgICAg
IGlmIChpc1ByZXNzZWQobykpIHsKLSAgICAgICAgICAgIG9wdGlvbi5zdGF0ZSB8PSBRU3R5bGU6
OlN0YXRlX1N1bmtlbjsKLSAgICAgICAgICAgIGlmIChpc1NwaW5VcEJ1dHRvblBhcnRQcmVzc2Vk
KG8pKQotICAgICAgICAgICAgICAgIG9wdGlvbi5hY3RpdmVTdWJDb250cm9scyA9IFFTdHlsZTo6
U0NfU3BpbkJveFVwOwotICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgIG9wdGlvbi5h
Y3RpdmVTdWJDb250cm9scyA9IFFTdHlsZTo6U0NfU3BpbkJveERvd247Ci0gICAgICAgIH0KLSAg
ICB9Ci0gICAgLy8gUmVuZGVyIHRoZSBzcGluIGJ1dHRvbnMgZm9yIExUUiBvciBSVEwgYWNjb3Jk
aW5nbHkuCi0gICAgb3B0aW9uLmRpcmVjdGlvbiA9IG8tPnN0eWxlKCktPmlzTGVmdFRvUmlnaHRE
aXJlY3Rpb24oKSA/IFF0OjpMZWZ0VG9SaWdodCA6IFF0OjpSaWdodFRvTGVmdDsKLQotICAgIElu
dFJlY3QgYnV0dG9uUmVjdCA9IHJlY3Q7Ci0gICAgLy8gRGVmYXVsdCB0byBtb3ZpbmcgdGhlIGJ1
dHRvbnMgYSBsaXR0bGUgYml0IHdpdGhpbiB0aGUgZWRpdG9yIGZyYW1lLgotICAgIGludCBpbmZs
YXRlWCA9IC0yOwotICAgIGludCBpbmZsYXRlWSA9IC0yOwotI2lmIGRlZmluZWQoUV9XU19NQUMp
ICYmICFkZWZpbmVkKFFUX05PX1NUWUxFX01BQykKLSAgICAvLyBRTWFjU3R5bGUgd2lsbCBwb3Np
dGlvbiB0aGUgYXF1YSBidXR0b25zIGZsdXNoIHRvIHRoZSByaWdodC4KLSAgICAvLyBUaGlzIHdp
bGwgbW92ZSB0aGVtIG1vcmUgd2l0aGluIHRoZSBjb250cm9sIGZvciBiZXR0ZXIgc3R5bGUsIGEg
bGEKLSAgICAvLyBDaHJvbWl1bSBsb29rICYgZmVlbC4KLSAgICBpZiAocW9iamVjdF9jYXN0PFFN
YWNTdHlsZSo+KHAuc3R5bGUpKSB7Ci0gICAgICAgIGluZmxhdGVYID0gLTQ7Ci0gICAgICAgIC8v
IFJlbmRlciBtaW5pIGFxdWEgc3BpbiBidXR0b25zIGZvciBRTWFjU3R5bGUgdG8gZml0IG5pY2Vs
eSBpbnRvCi0gICAgICAgIC8vIHRoZSBlZGl0b3IgYXJlYSwgbGlrZSBDaHJvbWl1bS4KLSAgICAg
ICAgb3B0aW9uLnN0YXRlIHw9IFFTdHlsZTo6U3RhdGVfTWluaTsKLSAgICB9Ci0jZW5kaWYKLSNp
ZiAhZGVmaW5lZChRVF9OT19TVFlMRV9QTEFTVElRVUUpCi0gICAgLy8gUVBsYXN0aXF1ZVN0eWxl
IGxvb2tzIGJlc3Qgd2hlbiB0aGUgc3BpbiBidXR0b25zIGFyZSBmbHVzaCB3aXRoIHRoZSBmcmFt
ZSdzIGVkZ2UuCi0gICAgaWYgKHFvYmplY3RfY2FzdDxRUGxhc3RpcXVlU3R5bGUqPihwLnN0eWxl
KSkgewotICAgICAgICBpbmZsYXRlWCA9IDA7Ci0gICAgICAgIGluZmxhdGVZID0gMDsKLSAgICB9
Ci0jZW5kaWYKLQotICAgIGJ1dHRvblJlY3QuaW5mbGF0ZVgoaW5mbGF0ZVgpOwotICAgIGJ1dHRv
blJlY3QuaW5mbGF0ZVkoaW5mbGF0ZVkpOwotICAgIG9wdGlvbi5yZWN0ID0gYnV0dG9uUmVjdDsK
LQotICAgIHAuZHJhd0NvbXBsZXhDb250cm9sKFFTdHlsZTo6Q0NfU3BpbkJveCwgb3B0aW9uKTsK
LSAgICByZXR1cm4gZmFsc2U7Ci19Ci0jZW5kaWYKLQotQ29udHJvbFBhcnQgUmVuZGVyVGhlbWVR
U3R5bGU6OmluaXRpYWxpemVDb21tb25RU3R5bGVPcHRpb25zKFFTdHlsZU9wdGlvbiYgb3B0aW9u
LCBSZW5kZXJPYmplY3QqIG8pIGNvbnN0Ci17Ci0gICAgLy8gRGVmYXVsdCBiaXRzOiBubyBmb2N1
cywgbm8gbW91c2Ugb3ZlcgotICAgIG9wdGlvbi5zdGF0ZSAmPSB+KFFTdHlsZTo6U3RhdGVfSGFz
Rm9jdXMgfCBRU3R5bGU6OlN0YXRlX01vdXNlT3Zlcik7Ci0KLSAgICBpZiAoaXNSZWFkT25seUNv
bnRyb2wobykpCi0gICAgICAgIC8vIFJlYWRvbmx5IGlzIHN1cHBvcnRlZCBvbiB0ZXh0ZmllbGRz
LgotICAgICAgICBvcHRpb24uc3RhdGUgfD0gUVN0eWxlOjpTdGF0ZV9SZWFkT25seTsKLQotICAg
IG9wdGlvbi5kaXJlY3Rpb24gPSBRdDo6TGVmdFRvUmlnaHQ7Ci0KLSAgICBpZiAoaXNIb3ZlcmVk
KG8pKQotICAgICAgICBvcHRpb24uc3RhdGUgfD0gUVN0eWxlOjpTdGF0ZV9Nb3VzZU92ZXI7Ci0K
LSAgICBzZXRQYWxldHRlRnJvbVBhZ2VDbGllbnRJZkV4aXN0cyhvcHRpb24ucGFsZXR0ZSk7Ci0K
LSAgICBpZiAoIWlzRW5hYmxlZChvKSkgewotICAgICAgICBvcHRpb24ucGFsZXR0ZS5zZXRDdXJy
ZW50Q29sb3JHcm91cChRUGFsZXR0ZTo6RGlzYWJsZWQpOwotICAgICAgICBvcHRpb24uc3RhdGUg
Jj0gflFTdHlsZTo6U3RhdGVfRW5hYmxlZDsKLSAgICB9Ci0KLSAgICBSZW5kZXJTdHlsZSogc3R5
bGUgPSBvLT5zdHlsZSgpOwotICAgIGlmICghc3R5bGUpCi0gICAgICAgIHJldHVybiBOb0NvbnRy
b2xQYXJ0OwotCi0gICAgQ29udHJvbFBhcnQgcmVzdWx0ID0gc3R5bGUtPmFwcGVhcmFuY2UoKTsK
LSAgICBpZiAoc3VwcG9ydHNGb2N1cyhyZXN1bHQpICYmIGlzRm9jdXNlZChvKSkgewotICAgICAg
ICBvcHRpb24uc3RhdGUgfD0gUVN0eWxlOjpTdGF0ZV9IYXNGb2N1czsKLSAgICAgICAgb3B0aW9u
LnN0YXRlIHw9IFFTdHlsZTo6U3RhdGVfS2V5Ym9hcmRGb2N1c0NoYW5nZTsKLSAgICB9Ci0KLSAg
ICBpZiAoc3R5bGUtPmRpcmVjdGlvbigpID09IFdlYkNvcmU6OlJUTCkKLSAgICAgICAgb3B0aW9u
LmRpcmVjdGlvbiA9IFF0OjpSaWdodFRvTGVmdDsKLQotICAgIHN3aXRjaCAocmVzdWx0KSB7Ci0g
ICAgY2FzZSBQdXNoQnV0dG9uUGFydDoKLSAgICBjYXNlIFNxdWFyZUJ1dHRvblBhcnQ6Ci0gICAg
Y2FzZSBCdXR0b25QYXJ0OgotICAgIGNhc2UgQnV0dG9uQmV2ZWxQYXJ0OgotICAgIGNhc2UgTGlz
dEl0ZW1QYXJ0OgotICAgIGNhc2UgTWVudWxpc3RCdXR0b25QYXJ0OgotICAgIGNhc2UgU2VhcmNo
RmllbGRSZXN1bHRzQnV0dG9uUGFydDoKLSAgICBjYXNlIFNlYXJjaEZpZWxkQ2FuY2VsQnV0dG9u
UGFydDogewotICAgICAgICBpZiAoaXNQcmVzc2VkKG8pKQotICAgICAgICAgICAgb3B0aW9uLnN0
YXRlIHw9IFFTdHlsZTo6U3RhdGVfU3Vua2VuOwotICAgICAgICBlbHNlIGlmIChyZXN1bHQgPT0g
UHVzaEJ1dHRvblBhcnQgfHwgcmVzdWx0ID09IEJ1dHRvblBhcnQpCi0gICAgICAgICAgICBvcHRp
b24uc3RhdGUgfD0gUVN0eWxlOjpTdGF0ZV9SYWlzZWQ7Ci0gICAgICAgIGJyZWFrOwotICAgIH0K
LSAgICBjYXNlIFJhZGlvUGFydDoKLSAgICBjYXNlIENoZWNrYm94UGFydDoKLSAgICAgICAgb3B0
aW9uLnN0YXRlIHw9IChpc0NoZWNrZWQobykgPyBRU3R5bGU6OlN0YXRlX09uIDogUVN0eWxlOjpT
dGF0ZV9PZmYpOwotICAgIH0KLQotICAgIHJldHVybiByZXN1bHQ7Ci19Ci0KLXZvaWQgUmVuZGVy
VGhlbWVRU3R5bGU6OmFkanVzdFNsaWRlclRodW1iU2l6ZShSZW5kZXJTdHlsZSogc3R5bGUsIEVs
ZW1lbnQqIGVsZW1lbnQpIGNvbnN0Ci17Ci0gICAgY29uc3QgQ29udHJvbFBhcnQgcGFydCA9IHN0
eWxlLT5hcHBlYXJhbmNlKCk7Ci0gICAgaWYgKHBhcnQgPT0gU2xpZGVyVGh1bWJIb3Jpem9udGFs
UGFydCB8fCBwYXJ0ID09IFNsaWRlclRodW1iVmVydGljYWxQYXJ0KSB7Ci0gICAgICAgIFFTdHls
ZU9wdGlvblNsaWRlciBvcHRpb247Ci0gICAgICAgIGlmIChwYXJ0ID09IFNsaWRlclRodW1iVmVy
dGljYWxQYXJ0KQotICAgICAgICAgICAgb3B0aW9uLm9yaWVudGF0aW9uID0gUXQ6OlZlcnRpY2Fs
OwotCi0gICAgICAgIFFTdHlsZSogcXN0eWxlID0gcVN0eWxlKCk7Ci0KLSAgICAgICAgaW50IGxl
bmd0aCA9IHFzdHlsZS0+cGl4ZWxNZXRyaWMoUVN0eWxlOjpQTV9TbGlkZXJMZW5ndGgsICZvcHRp
b24pOwotICAgICAgICBpbnQgdGhpY2tuZXNzID0gcXN0eWxlLT5waXhlbE1ldHJpYyhRU3R5bGU6
OlBNX1NsaWRlclRoaWNrbmVzcywgJm9wdGlvbik7Ci0gICAgICAgIGlmIChvcHRpb24ub3JpZW50
YXRpb24gPT0gUXQ6OlZlcnRpY2FsKSB7Ci0gICAgICAgICAgICBzdHlsZS0+c2V0V2lkdGgoTGVu
Z3RoKHRoaWNrbmVzcywgRml4ZWQpKTsKLSAgICAgICAgICAgIHN0eWxlLT5zZXRIZWlnaHQoTGVu
Z3RoKGxlbmd0aCwgRml4ZWQpKTsKLSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIHN0eWxl
LT5zZXRXaWR0aChMZW5ndGgobGVuZ3RoLCBGaXhlZCkpOwotICAgICAgICAgICAgc3R5bGUtPnNl
dEhlaWdodChMZW5ndGgodGhpY2tuZXNzLCBGaXhlZCkpOwotICAgICAgICB9Ci0gICAgfSBlbHNl
Ci0gICAgICAgIFJlbmRlclRoZW1lUXQ6OmFkanVzdFNsaWRlclRodW1iU2l6ZShzdHlsZSwgZWxl
bWVudCk7Ci19Ci0KLX0KLQotLy8gdmltOiB0cz00IHN3PTQgZXQKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJLaXQvcXQvV2ViQ29yZVN1cHBvcnQvUmVuZGVyVGhlbWVRU3R5bGUuaCBiL1NvdXJjZS9X
ZWJLaXQvcXQvV2ViQ29yZVN1cHBvcnQvUmVuZGVyVGhlbWVRU3R5bGUuaApkZWxldGVkIGZpbGUg
bW9kZSAxMDA2NDQKaW5kZXggMmNjOTk5MzA4MDQ1MGY5MzkxMjc4ZDQ5ODcxZTU3MTkyNWQwZTFh
Zi4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2Uv
V2ViS2l0L3F0L1dlYkNvcmVTdXBwb3J0L1JlbmRlclRoZW1lUVN0eWxlLmgKKysrIC9kZXYvbnVs
bApAQCAtMSwxNDggKzAsMCBAQAotLyoKLSAqIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSB0aGVt
ZSBpbXBsZW1lbnRhdGlvbiBmb3IgZm9ybSBjb250cm9scyBpbiBXZWJDb3JlLgotICoKLSAqIENv
cHlyaWdodCAoQykgMjAxMS0yMDEyIE5va2lhIENvcnBvcmF0aW9uIGFuZC9vciBpdHMgc3Vic2lk
aWFyeSgtaWVzKS4KLSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNh
biByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCi0gKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9m
IHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwotICogTGljZW5zZSBhcyBwdWJsaXNoZWQg
YnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCi0gKiB2ZXJzaW9uIDIgb2Yg
dGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0gKgot
ICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBi
ZSB1c2VmdWwsCi0gKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUg
aW1wbGllZCB3YXJyYW50eSBvZgotICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEg
UEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKLSAqIExpYnJhcnkgR2VuZXJhbCBQdWJs
aWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICoKLSAqIFlvdSBzaG91bGQgaGF2ZSByZWNl
aXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKLSAq
IGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBu
b3QsIHdyaXRlIHRvCi0gKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBG
cmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAotICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBV
U0EuCi0gKgotICovCi0jaWZuZGVmIFJlbmRlclRoZW1lUVN0eWxlX2gKLSNkZWZpbmUgUmVuZGVy
VGhlbWVRU3R5bGVfaAotCi0jaW5jbHVkZSAiUmVuZGVyVGhlbWVRdC5oIgotCi0jaW5jbHVkZSA8
UVN0eWxlPgotCi1RVF9CRUdJTl9OQU1FU1BBQ0UKLSNpZm5kZWYgUVRfTk9fTElORUVESVQKLWNs
YXNzIFFMaW5lRWRpdDsKLSNlbmRpZgotY2xhc3MgUVBhaW50ZXI7Ci1jbGFzcyBRV2lkZ2V0Owot
UVRfRU5EX05BTUVTUEFDRQotCi1uYW1lc3BhY2UgV2ViQ29yZSB7Ci0KLWNsYXNzIFNjcm9sbGJh
clRoZW1lUVN0eWxlOwotCi1jbGFzcyBSZW5kZXJUaGVtZVFTdHlsZSA6IHB1YmxpYyBSZW5kZXJU
aGVtZVF0IHsKLXByaXZhdGU6Ci0gICAgUmVuZGVyVGhlbWVRU3R5bGUoUGFnZSopOwotICAgIHZp
cnR1YWwgflJlbmRlclRoZW1lUVN0eWxlKCk7Ci0KLXB1YmxpYzoKLSAgICBzdGF0aWMgUGFzc1Jl
ZlB0cjxSZW5kZXJUaGVtZT4gY3JlYXRlKFBhZ2UqKTsKLQotICAgIHZpcnR1YWwgdm9pZCBhZGp1
c3RTbGlkZXJUaHVtYlNpemUoUmVuZGVyU3R5bGUqLCBFbGVtZW50KikgY29uc3Q7Ci0KLSAgICBR
U3R5bGUqIHFTdHlsZSgpIGNvbnN0OwotCi1wcm90ZWN0ZWQ6Ci0gICAgdmlydHVhbCB2b2lkIGFk
anVzdEJ1dHRvblN0eWxlKFN0eWxlUmVzb2x2ZXIqLCBSZW5kZXJTdHlsZSosIEVsZW1lbnQqKSBj
b25zdDsKLSAgICB2aXJ0dWFsIGJvb2wgcGFpbnRCdXR0b24oUmVuZGVyT2JqZWN0KiwgY29uc3Qg
UGFpbnRJbmZvJiwgY29uc3QgSW50UmVjdCYpOwotCi0gICAgdmlydHVhbCBib29sIHBhaW50VGV4
dEZpZWxkKFJlbmRlck9iamVjdCosIGNvbnN0IFBhaW50SW5mbyYsIGNvbnN0IEludFJlY3QmKTsK
LQotICAgIHZpcnR1YWwgYm9vbCBwYWludFRleHRBcmVhKFJlbmRlck9iamVjdCosIGNvbnN0IFBh
aW50SW5mbyYsIGNvbnN0IEludFJlY3QmKTsKLSAgICB2aXJ0dWFsIHZvaWQgYWRqdXN0VGV4dEFy
ZWFTdHlsZShTdHlsZVJlc29sdmVyKiwgUmVuZGVyU3R5bGUqLCBFbGVtZW50KikgY29uc3Q7Ci0K
LSAgICB2aXJ0dWFsIGJvb2wgcGFpbnRNZW51TGlzdChSZW5kZXJPYmplY3QqLCBjb25zdCBQYWlu
dEluZm8mLCBjb25zdCBJbnRSZWN0Jik7Ci0KLSAgICB2aXJ0dWFsIGJvb2wgcGFpbnRNZW51TGlz
dEJ1dHRvbihSZW5kZXJPYmplY3QqLCBjb25zdCBQYWludEluZm8mLCBjb25zdCBJbnRSZWN0Jik7
Ci0gICAgdmlydHVhbCB2b2lkIGFkanVzdE1lbnVMaXN0QnV0dG9uU3R5bGUoU3R5bGVSZXNvbHZl
ciosIFJlbmRlclN0eWxlKiwgRWxlbWVudCopIGNvbnN0OwotCi0jaWYgRU5BQkxFKFBST0dSRVNT
X0VMRU1FTlQpCi0gICAgLy8gUmV0dXJucyB0aGUgZHVyYXRpb24gb2YgdGhlIGFuaW1hdGlvbiBm
b3IgdGhlIHByb2dyZXNzIGJhci4KLSAgICB2aXJ0dWFsIGRvdWJsZSBhbmltYXRpb25EdXJhdGlv
bkZvclByb2dyZXNzQmFyKFJlbmRlclByb2dyZXNzKikgY29uc3Q7Ci0gICAgdmlydHVhbCBib29s
IHBhaW50UHJvZ3Jlc3NCYXIoUmVuZGVyT2JqZWN0KiwgY29uc3QgUGFpbnRJbmZvJiwgY29uc3Qg
SW50UmVjdCYpOwotI2VuZGlmCi0KLSAgICB2aXJ0dWFsIGJvb2wgcGFpbnRTbGlkZXJUcmFjayhS
ZW5kZXJPYmplY3QqLCBjb25zdCBQYWludEluZm8mLCBjb25zdCBJbnRSZWN0Jik7Ci0gICAgdmly
dHVhbCB2b2lkIGFkanVzdFNsaWRlclRyYWNrU3R5bGUoU3R5bGVSZXNvbHZlciosIFJlbmRlclN0
eWxlKiwgRWxlbWVudCopIGNvbnN0OwotCi0gICAgdmlydHVhbCBib29sIHBhaW50U2xpZGVyVGh1
bWIoUmVuZGVyT2JqZWN0KiwgY29uc3QgUGFpbnRJbmZvJiwgY29uc3QgSW50UmVjdCYpOwotICAg
IHZpcnR1YWwgdm9pZCBhZGp1c3RTbGlkZXJUaHVtYlN0eWxlKFN0eWxlUmVzb2x2ZXIqLCBSZW5k
ZXJTdHlsZSosIEVsZW1lbnQqKSBjb25zdDsKLQotICAgIHZpcnR1YWwgYm9vbCBwYWludFNlYXJj
aEZpZWxkKFJlbmRlck9iamVjdCosIGNvbnN0IFBhaW50SW5mbyYsIGNvbnN0IEludFJlY3QmKTsK
LQotICAgIHZpcnR1YWwgdm9pZCBhZGp1c3RTZWFyY2hGaWVsZERlY29yYXRpb25TdHlsZShTdHls
ZVJlc29sdmVyKiwgUmVuZGVyU3R5bGUqLCBFbGVtZW50KikgY29uc3Q7Ci0gICAgdmlydHVhbCBi
b29sIHBhaW50U2VhcmNoRmllbGREZWNvcmF0aW9uKFJlbmRlck9iamVjdCosIGNvbnN0IFBhaW50
SW5mbyYsIGNvbnN0IEludFJlY3QmKTsKLQotICAgIHZpcnR1YWwgdm9pZCBhZGp1c3RTZWFyY2hG
aWVsZFJlc3VsdHNEZWNvcmF0aW9uU3R5bGUoU3R5bGVSZXNvbHZlciosIFJlbmRlclN0eWxlKiwg
RWxlbWVudCopIGNvbnN0OwotICAgIHZpcnR1YWwgYm9vbCBwYWludFNlYXJjaEZpZWxkUmVzdWx0
c0RlY29yYXRpb24oUmVuZGVyT2JqZWN0KiwgY29uc3QgUGFpbnRJbmZvJiwgY29uc3QgSW50UmVj
dCYpOwotCi0jaWZuZGVmIFFUX05PX1NQSU5CT1gKLSAgICB2aXJ0dWFsIGJvb2wgcGFpbnRJbm5l
clNwaW5CdXR0b24oUmVuZGVyT2JqZWN0KiwgY29uc3QgUGFpbnRJbmZvJiwgY29uc3QgSW50UmVj
dCYpOwotI2VuZGlmCi0KLXByb3RlY3RlZDoKLSAgICB2aXJ0dWFsIHZvaWQgY29tcHV0ZVNpemVC
YXNlZE9uU3R5bGUoUmVuZGVyU3R5bGUqKSBjb25zdDsKLQotICAgIHZpcnR1YWwgUVNoYXJlZFBv
aW50ZXI8U3R5bGVQYWludGVyPiBnZXRTdHlsZVBhaW50ZXIoY29uc3QgUGFpbnRJbmZvJik7Ci0K
LSAgICB2aXJ0dWFsIFFSZWN0IGluZmxhdGVCdXR0b25SZWN0KGNvbnN0IFFSZWN0JiBvcmlnaW5h
bFJlY3QpIGNvbnN0OwotCi0gICAgdmlydHVhbCB2b2lkIHNldFBvcHVwUGFkZGluZyhSZW5kZXJT
dHlsZSopIGNvbnN0OwotCi0gICAgdmlydHVhbCBRUGFsZXR0ZSBjb2xvclBhbGV0dGUoKSBjb25z
dDsKLQotcHJpdmF0ZToKLSAgICBDb250cm9sUGFydCBpbml0aWFsaXplQ29tbW9uUVN0eWxlT3B0
aW9ucyhRU3R5bGVPcHRpb24mLCBSZW5kZXJPYmplY3QqKSBjb25zdDsKLQotICAgIHZvaWQgc2V0
QnV0dG9uUGFkZGluZyhSZW5kZXJTdHlsZSopIGNvbnN0OwotCi0gICAgaW50IGZpbmRGcmFtZUxp
bmVXaWR0aChRU3R5bGUqKSBjb25zdDsKLQotICAgIFFTdHlsZSogZmFsbGJhY2tTdHlsZSgpIGNv
bnN0OwotCi0gICAgdm9pZCBzZXRQYWxldHRlRnJvbVBhZ2VDbGllbnRJZkV4aXN0cyhRUGFsZXR0
ZSYpIGNvbnN0OwotCi0jaWZkZWYgUV9PU19NQUMKLSAgICBpbnQgbV9idXR0b25Gb250UGl4ZWxT
aXplOwotI2VuZGlmCi0KLSAgICBRU3R5bGUqIG1fZmFsbGJhY2tTdHlsZTsKLSNpZm5kZWYgUVRf
Tk9fTElORUVESVQKLSAgICBtdXRhYmxlIFFMaW5lRWRpdCogbV9saW5lRWRpdDsKLSNlbmRpZgot
fTsKLQotY2xhc3MgU3R5bGVQYWludGVyUVN0eWxlIDogcHVibGljIFN0eWxlUGFpbnRlciB7Ci1w
dWJsaWM6Ci0gICAgZXhwbGljaXQgU3R5bGVQYWludGVyUVN0eWxlKFJlbmRlclRoZW1lUVN0eWxl
KiwgY29uc3QgUGFpbnRJbmZvJik7Ci0gICAgZXhwbGljaXQgU3R5bGVQYWludGVyUVN0eWxlKFNj
cm9sbGJhclRoZW1lUVN0eWxlKiwgR3JhcGhpY3NDb250ZXh0Kik7Ci0KLSAgICBib29sIGlzVmFs
aWQoKSBjb25zdCB7IHJldHVybiBzdHlsZSAmJiBTdHlsZVBhaW50ZXI6OmlzVmFsaWQoKTsgfQot
Ci0gICAgUVdpZGdldCogd2lkZ2V0OwotICAgIFFTdHlsZSogc3R5bGU7Ci0KLSAgICB2b2lkIGRy
YXdQcmltaXRpdmUoUVN0eWxlOjpQcmltaXRpdmVFbGVtZW50IHBlLCBjb25zdCBRU3R5bGVPcHRp
b24mIG9wdCkKLSAgICB7IHN0eWxlLT5kcmF3UHJpbWl0aXZlKHBlLCAmb3B0LCBwYWludGVyLCB3
aWRnZXQpOyB9Ci0gICAgdm9pZCBkcmF3Q29udHJvbChRU3R5bGU6OkNvbnRyb2xFbGVtZW50IGNl
LCBjb25zdCBRU3R5bGVPcHRpb24mIG9wdCkKLSAgICB7IHN0eWxlLT5kcmF3Q29udHJvbChjZSwg
Jm9wdCwgcGFpbnRlciwgd2lkZ2V0KTsgfQotICAgIHZvaWQgZHJhd0NvbXBsZXhDb250cm9sKFFT
dHlsZTo6Q29tcGxleENvbnRyb2wgY2MsIGNvbnN0IFFTdHlsZU9wdGlvbkNvbXBsZXgmIG9wdCkK
LSAgICB7IHN0eWxlLT5kcmF3Q29tcGxleENvbnRyb2woY2MsICZvcHQsIHBhaW50ZXIsIHdpZGdl
dCk7IH0KLQotcHJpdmF0ZToKLSAgICB2b2lkIGluaXQoR3JhcGhpY3NDb250ZXh0KiwgUVN0eWxl
Kik7Ci0KLSAgICBRX0RJU0FCTEVfQ09QWShTdHlsZVBhaW50ZXJRU3R5bGUpCi19OwotCi19Ci0K
LSNlbmRpZiAvLyBSZW5kZXJUaGVtZVFTdHlsZV9oCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0
L3F0L1dlYkNvcmVTdXBwb3J0L1Njcm9sbGJhclRoZW1lUVN0eWxlLmNwcCBiL1NvdXJjZS9XZWJL
aXQvcXQvV2ViQ29yZVN1cHBvcnQvU2Nyb2xsYmFyVGhlbWVRU3R5bGUuY3BwCmRlbGV0ZWQgZmls
ZSBtb2RlIDEwMDY0NAppbmRleCBiMDgyN2ZlYTRlMDkyMjBmMGFhMzkyYTdhNWQ5ZGM0YzNhNjY4
YmUzLi4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJj
ZS9XZWJLaXQvcXQvV2ViQ29yZVN1cHBvcnQvU2Nyb2xsYmFyVGhlbWVRU3R5bGUuY3BwCisrKyAv
ZGV2L251bGwKQEAgLTEsMjUzICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDcsIDIw
MDggQXBwbGUgSW5jLiBBbGwgUmlnaHRzIFJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDA3
IFN0YWlrb3MgQ29tcHV0aW5nIFNlcnZpY2VzIEluYy4gPGluZm9Ac3RhaWtvcy5uZXQ+Ci0gKiBD
b3B5cmlnaHQgKEMpIDIwMDggTm9raWEgQ29ycG9yYXRpb24gYW5kL29yIGl0cyBzdWJzaWRpYXJ5
KC1pZXMpCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFy
eSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQg
cHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAx
LiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNv
cHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3Jt
IG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAq
ICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRo
ZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBM
RSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCi0gKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElF
UywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQotICogSU1QTElFRCBXQVJSQU5U
SUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQ
VVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgot
ICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lE
RU5UQUwsIFNQRUNJQUwsCi0gKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAo
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElU
VVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKLSAqIFBST0ZJVFM7
IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVP
UlkKLSAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElU
WSwgT1IgVE9SVAotICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lO
RyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0gKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElG
IEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLSNpbmNs
dWRlICJjb25maWcuaCIKLSNpbmNsdWRlICJTY3JvbGxiYXJUaGVtZVFTdHlsZS5oIgotCi0jaW5j
bHVkZSAiR3JhcGhpY3NDb250ZXh0LmgiCi0jaW5jbHVkZSAiUGxhdGZvcm1Nb3VzZUV2ZW50Lmgi
Ci0jaW5jbHVkZSAiUmVuZGVyVGhlbWVRU3R5bGUuaCIKLSNpbmNsdWRlICJSZW5kZXJUaGVtZVF0
TW9iaWxlLmgiCi0jaW5jbHVkZSAiU2Nyb2xsVmlldy5oIgotI2luY2x1ZGUgIlNjcm9sbGJhci5o
IgotCi0jaW5jbHVkZSA8UUFwcGxpY2F0aW9uPgotI2lmZGVmIFFfV1NfTUFDCi0jaW5jbHVkZSA8
UU1hY1N0eWxlPgotI2VuZGlmCi0jaW5jbHVkZSA8UU1lbnU+Ci0jaW5jbHVkZSA8UVBhaW50ZXI+
Ci0jaW5jbHVkZSA8UVN0eWxlPgotI2luY2x1ZGUgPFFTdHlsZU9wdGlvblNsaWRlcj4KLQotbmFt
ZXNwYWNlIFdlYkNvcmUgewotCi1TY3JvbGxiYXJUaGVtZVFTdHlsZTo6flNjcm9sbGJhclRoZW1l
UVN0eWxlKCkKLXsKLX0KLQotc3RhdGljIFFTdHlsZTo6U3ViQ29udHJvbCBzY1BhcnQoY29uc3Qg
U2Nyb2xsYmFyUGFydCYgcGFydCkKLXsKLSAgICBzd2l0Y2ggKHBhcnQpIHsKLSAgICBjYXNlIE5v
UGFydDoKLSAgICAgICAgcmV0dXJuIFFTdHlsZTo6U0NfTm9uZTsKLSAgICBjYXNlIEJhY2tCdXR0
b25TdGFydFBhcnQ6Ci0gICAgY2FzZSBCYWNrQnV0dG9uRW5kUGFydDoKLSAgICAgICAgcmV0dXJu
IFFTdHlsZTo6U0NfU2Nyb2xsQmFyU3ViTGluZTsKLSAgICBjYXNlIEJhY2tUcmFja1BhcnQ6Ci0g
ICAgICAgIHJldHVybiBRU3R5bGU6OlNDX1Njcm9sbEJhclN1YlBhZ2U7Ci0gICAgY2FzZSBUaHVt
YlBhcnQ6Ci0gICAgICAgIHJldHVybiBRU3R5bGU6OlNDX1Njcm9sbEJhclNsaWRlcjsKLSAgICBj
YXNlIEZvcndhcmRUcmFja1BhcnQ6Ci0gICAgICAgIHJldHVybiBRU3R5bGU6OlNDX1Njcm9sbEJh
ckFkZFBhZ2U7Ci0gICAgY2FzZSBGb3J3YXJkQnV0dG9uU3RhcnRQYXJ0OgotICAgIGNhc2UgRm9y
d2FyZEJ1dHRvbkVuZFBhcnQ6Ci0gICAgICAgIHJldHVybiBRU3R5bGU6OlNDX1Njcm9sbEJhckFk
ZExpbmU7Ci0gICAgfQotCi0gICAgcmV0dXJuIFFTdHlsZTo6U0NfTm9uZTsKLX0KLQotc3RhdGlj
IFNjcm9sbGJhclBhcnQgc2Nyb2xsYmFyUGFydChjb25zdCBRU3R5bGU6OlN1YkNvbnRyb2wmIHNj
KQotewotICAgIHN3aXRjaCAoc2MpIHsKLSAgICBjYXNlIFFTdHlsZTo6U0NfTm9uZToKLSAgICAg
ICAgcmV0dXJuIE5vUGFydDsKLSAgICBjYXNlIFFTdHlsZTo6U0NfU2Nyb2xsQmFyU3ViTGluZToK
LSAgICAgICAgcmV0dXJuIEJhY2tCdXR0b25TdGFydFBhcnQ7Ci0gICAgY2FzZSBRU3R5bGU6OlND
X1Njcm9sbEJhclN1YlBhZ2U6Ci0gICAgICAgIHJldHVybiBCYWNrVHJhY2tQYXJ0OwotICAgIGNh
c2UgUVN0eWxlOjpTQ19TY3JvbGxCYXJTbGlkZXI6Ci0gICAgICAgIHJldHVybiBUaHVtYlBhcnQ7
Ci0gICAgY2FzZSBRU3R5bGU6OlNDX1Njcm9sbEJhckFkZFBhZ2U6Ci0gICAgICAgIHJldHVybiBG
b3J3YXJkVHJhY2tQYXJ0OwotICAgIGNhc2UgUVN0eWxlOjpTQ19TY3JvbGxCYXJBZGRMaW5lOgot
ICAgICAgICByZXR1cm4gRm9yd2FyZEJ1dHRvblN0YXJ0UGFydDsKLSAgICB9Ci0gICAgcmV0dXJu
IE5vUGFydDsKLX0KLQotc3RhdGljIFFTdHlsZU9wdGlvblNsaWRlciogc3R5bGVPcHRpb25TbGlk
ZXIoU2Nyb2xsYmFyVGhlbWVDbGllbnQqIHNjcm9sbGJhciwgUVdpZGdldCogd2lkZ2V0ID0gMCkK
LXsKLSAgICBzdGF0aWMgUVN0eWxlT3B0aW9uU2xpZGVyIG9wdDsKLSAgICBpZiAod2lkZ2V0KQot
ICAgICAgICBvcHQuaW5pdEZyb20od2lkZ2V0KTsKLSAgICBlbHNlCi0gICAgICAgIG9wdC5zdGF0
ZSB8PSBRU3R5bGU6OlN0YXRlX0FjdGl2ZTsKLQotICAgIG9wdC5zdGF0ZSAmPSB+UVN0eWxlOjpT
dGF0ZV9IYXNGb2N1czsKLQotICAgIG9wdC5yZWN0ID0gc2Nyb2xsYmFyLT5mcmFtZVJlY3QoKTsK
LSAgICBpZiAoc2Nyb2xsYmFyLT5lbmFibGVkKCkpCi0gICAgICAgIG9wdC5zdGF0ZSB8PSBRU3R5
bGU6OlN0YXRlX0VuYWJsZWQ7Ci0gICAgaWYgKHNjcm9sbGJhci0+Y29udHJvbFNpemUoKSAhPSBS
ZWd1bGFyU2Nyb2xsYmFyKQotICAgICAgICBvcHQuc3RhdGUgfD0gUVN0eWxlOjpTdGF0ZV9NaW5p
OwotICAgIG9wdC5vcmllbnRhdGlvbiA9IChzY3JvbGxiYXItPm9yaWVudGF0aW9uKCkgPT0gVmVy
dGljYWxTY3JvbGxiYXIpID8gUXQ6OlZlcnRpY2FsIDogUXQ6Okhvcml6b250YWw7Ci0KLSAgICBp
ZiAoc2Nyb2xsYmFyLT5vcmllbnRhdGlvbigpID09IEhvcml6b250YWxTY3JvbGxiYXIpCi0gICAg
ICAgIG9wdC5zdGF0ZSB8PSBRU3R5bGU6OlN0YXRlX0hvcml6b250YWw7Ci0gICAgZWxzZQotICAg
ICAgICBvcHQuc3RhdGUgJj0gflFTdHlsZTo6U3RhdGVfSG9yaXpvbnRhbDsKLQotICAgIG9wdC5z
bGlkZXJWYWx1ZSA9IHNjcm9sbGJhci0+dmFsdWUoKTsKLSAgICBvcHQuc2xpZGVyUG9zaXRpb24g
PSBvcHQuc2xpZGVyVmFsdWU7Ci0gICAgb3B0LnBhZ2VTdGVwID0gc2Nyb2xsYmFyLT5wYWdlU3Rl
cCgpOwotICAgIG9wdC5zaW5nbGVTdGVwID0gc2Nyb2xsYmFyLT5saW5lU3RlcCgpOwotICAgIG9w
dC5taW5pbXVtID0gMDsKLSAgICBvcHQubWF4aW11bSA9IHFNYXgoMCwgc2Nyb2xsYmFyLT5tYXhp
bXVtKCkpOwotICAgIFNjcm9sbGJhclBhcnQgcHJlc3NlZFBhcnQgPSBzY3JvbGxiYXItPnByZXNz
ZWRQYXJ0KCk7Ci0gICAgU2Nyb2xsYmFyUGFydCBob3ZlcmVkUGFydCA9IHNjcm9sbGJhci0+aG92
ZXJlZFBhcnQoKTsKLSAgICBpZiAocHJlc3NlZFBhcnQgIT0gTm9QYXJ0KSB7Ci0gICAgICAgIG9w
dC5hY3RpdmVTdWJDb250cm9scyA9IHNjUGFydChzY3JvbGxiYXItPnByZXNzZWRQYXJ0KCkpOwot
ICAgICAgICBpZiAocHJlc3NlZFBhcnQgPT0gQmFja0J1dHRvblN0YXJ0UGFydCB8fCBwcmVzc2Vk
UGFydCA9PSBGb3J3YXJkQnV0dG9uU3RhcnRQYXJ0Ci0gICAgICAgICAgICB8fCBwcmVzc2VkUGFy
dCA9PSBCYWNrQnV0dG9uRW5kUGFydCB8fCBwcmVzc2VkUGFydCA9PSBGb3J3YXJkQnV0dG9uRW5k
UGFydAotICAgICAgICAgICAgfHwgcHJlc3NlZFBhcnQgPT0gVGh1bWJQYXJ0KQotICAgICAgICAg
ICAgb3B0LnN0YXRlIHw9IFFTdHlsZTo6U3RhdGVfU3Vua2VuOwotICAgIH0gZWxzZQotICAgICAg
ICBvcHQuYWN0aXZlU3ViQ29udHJvbHMgPSBzY1BhcnQoaG92ZXJlZFBhcnQpOwotICAgIGlmICho
b3ZlcmVkUGFydCAhPSBOb1BhcnQpCi0gICAgICAgIG9wdC5zdGF0ZSB8PSBRU3R5bGU6OlN0YXRl
X01vdXNlT3ZlcjsKLSAgICByZXR1cm4gJm9wdDsKLX0KLQotYm9vbCBTY3JvbGxiYXJUaGVtZVFT
dHlsZTo6cGFpbnQoU2Nyb2xsYmFyVGhlbWVDbGllbnQqIHNjcm9sbGJhciwgR3JhcGhpY3NDb250
ZXh0KiBncmFwaGljc0NvbnRleHQsIGNvbnN0IEludFJlY3QmIGRpcnR5UmVjdCkKLXsKLSAgICBp
ZiAoZ3JhcGhpY3NDb250ZXh0LT51cGRhdGluZ0NvbnRyb2xUaW50cygpKSB7Ci0gICAgICAgc2Ny
b2xsYmFyLT5pbnZhbGlkYXRlUmVjdChkaXJ0eVJlY3QpOwotICAgICAgIHJldHVybiBmYWxzZTsK
LSAgICB9Ci0KLSAgICBTdHlsZVBhaW50ZXJRU3R5bGUgcCh0aGlzLCBncmFwaGljc0NvbnRleHQp
OwotICAgIGlmICghcC5pc1ZhbGlkKCkpCi0gICAgICByZXR1cm4gdHJ1ZTsKLQotICAgIHAucGFp
bnRlci0+c2F2ZSgpOwotICAgIFFTdHlsZU9wdGlvblNsaWRlciogb3B0ID0gc3R5bGVPcHRpb25T
bGlkZXIoc2Nyb2xsYmFyLCBwLndpZGdldCk7Ci0KLSAgICBwLnBhaW50ZXItPnNldENsaXBSZWN0
KG9wdC0+cmVjdC5pbnRlcnNlY3RlZChkaXJ0eVJlY3QpLCBRdDo6SW50ZXJzZWN0Q2xpcCk7Ci0K
LSNpZmRlZiBRX1dTX01BQwotICAgIC8vIEZJWE1FOiBXZSBhbHNvIG5lZWQgdG8gY2hlY2sgdGhl
IHdpZGdldCBzdHlsZSBidXQgdG9kYXkgU2Nyb2xsYmFyVGhlbWUgaXMgbm90IGF3YXJlIG9mIHRo
ZSBwYWdlIHNvIHdlCi0gICAgLy8gY2FuJ3QgZ2V0IHRoZSB3aWRnZXQuCi0gICAgaWYgKHFvYmpl
Y3RfY2FzdDxRTWFjU3R5bGUqPihzdHlsZSgpKSkKLSAgICAgICAgcC5kcmF3Q29tcGxleENvbnRy
b2woUVN0eWxlOjpDQ19TY3JvbGxCYXIsICpvcHQpOwotICAgIGVsc2UKLSNlbmRpZgotICAgIHsK
LSAgICAgICAgLy8gVGhlIFFTdHlsZSBleHBlY3RzIHRoZSBiYWNrZ3JvdW5kIHRvIGJlIGFscmVh
ZHkgZmlsbGVkLgotICAgICAgICBwLnBhaW50ZXItPmZpbGxSZWN0KG9wdC0+cmVjdCwgb3B0LT5w
YWxldHRlLmJhY2tncm91bmQoKSk7Ci0KLSAgICAgICAgY29uc3QgUVBvaW50IHRvcExlZnQgPSBv
cHQtPnJlY3QudG9wTGVmdCgpOwotICAgICAgICBwLnBhaW50ZXItPnRyYW5zbGF0ZSh0b3BMZWZ0
KTsKLSAgICAgICAgb3B0LT5yZWN0Lm1vdmVUbyhRUG9pbnQoMCwgMCkpOwotICAgICAgICBwLmRy
YXdDb21wbGV4Q29udHJvbChRU3R5bGU6OkNDX1Njcm9sbEJhciwgKm9wdCk7Ci0gICAgICAgIG9w
dC0+cmVjdC5tb3ZlVG8odG9wTGVmdCk7Ci0gICAgfQotICAgIHAucGFpbnRlci0+cmVzdG9yZSgp
OwotCi0gICAgcmV0dXJuIHRydWU7Ci19Ci0KLVNjcm9sbGJhclBhcnQgU2Nyb2xsYmFyVGhlbWVR
U3R5bGU6OmhpdFRlc3QoU2Nyb2xsYmFyVGhlbWVDbGllbnQqIHNjcm9sbGJhciwgY29uc3QgUGxh
dGZvcm1Nb3VzZUV2ZW50JiBldnQpCi17Ci0gICAgUVN0eWxlT3B0aW9uU2xpZGVyKiBvcHQgPSBz
dHlsZU9wdGlvblNsaWRlcihzY3JvbGxiYXIpOwotICAgIGNvbnN0IFFQb2ludCBwb3MgPSBzY3Jv
bGxiYXItPmNvbnZlcnRGcm9tQ29udGFpbmluZ1dpbmRvdyhldnQucG9zaXRpb24oKSk7Ci0gICAg
b3B0LT5yZWN0Lm1vdmVUbyhRUG9pbnQoMCwgMCkpOwotICAgIFFTdHlsZTo6U3ViQ29udHJvbCBz
YyA9IHN0eWxlKCktPmhpdFRlc3RDb21wbGV4Q29udHJvbChRU3R5bGU6OkNDX1Njcm9sbEJhciwg
b3B0LCBwb3MsIDApOwotICAgIHJldHVybiBzY3JvbGxiYXJQYXJ0KHNjKTsKLX0KLQotYm9vbCBT
Y3JvbGxiYXJUaGVtZVFTdHlsZTo6c2hvdWxkQ2VudGVyT25UaHVtYihTY3JvbGxiYXJUaGVtZUNs
aWVudCosIGNvbnN0IFBsYXRmb3JtTW91c2VFdmVudCYgZXZ0KQotewotICAgIC8vIE1pZGRsZSBj
bGljayBjZW50ZXJzIHNsaWRlciB0aHVtYiAoaWYgc3VwcG9ydGVkKS4KLSAgICByZXR1cm4gc3R5
bGUoKS0+c3R5bGVIaW50KFFTdHlsZTo6U0hfU2Nyb2xsQmFyX01pZGRsZUNsaWNrQWJzb2x1dGVQ
b3NpdGlvbikgJiYgZXZ0LmJ1dHRvbigpID09IE1pZGRsZUJ1dHRvbjsKLX0KLQotdm9pZCBTY3Jv
bGxiYXJUaGVtZVFTdHlsZTo6aW52YWxpZGF0ZVBhcnQoU2Nyb2xsYmFyVGhlbWVDbGllbnQqIHNj
cm9sbGJhciwgU2Nyb2xsYmFyUGFydCkKLXsKLSAgICAvLyBGSVhNRTogRG8gbW9yZSBwcmVjaXNl
IGludmFsaWRhdGlvbi4KLSAgICBzY3JvbGxiYXItPmludmFsaWRhdGUoKTsKLX0KLQotaW50IFNj
cm9sbGJhclRoZW1lUVN0eWxlOjpzY3JvbGxiYXJUaGlja25lc3MoU2Nyb2xsYmFyQ29udHJvbFNp
emUgY29udHJvbFNpemUpCi17Ci0gICAgUVN0eWxlT3B0aW9uU2xpZGVyIG87Ci0gICAgby5vcmll
bnRhdGlvbiA9IFF0OjpWZXJ0aWNhbDsKLSAgICBvLnN0YXRlICY9IH5RU3R5bGU6OlN0YXRlX0hv
cml6b250YWw7Ci0gICAgaWYgKGNvbnRyb2xTaXplICE9IFJlZ3VsYXJTY3JvbGxiYXIpCi0gICAg
ICAgIG8uc3RhdGUgfD0gUVN0eWxlOjpTdGF0ZV9NaW5pOwotICAgIHJldHVybiBzdHlsZSgpLT5w
aXhlbE1ldHJpYyhRU3R5bGU6OlBNX1Njcm9sbEJhckV4dGVudCwgJm8sIDApOwotfQotCi1pbnQg
U2Nyb2xsYmFyVGhlbWVRU3R5bGU6OnRodW1iUG9zaXRpb24oU2Nyb2xsYmFyVGhlbWVDbGllbnQq
IHNjcm9sbGJhcikKLXsKLSAgICBpZiAoc2Nyb2xsYmFyLT5lbmFibGVkKCkpIHsKLSAgICAgICAg
ZmxvYXQgcG9zID0gKGZsb2F0KXNjcm9sbGJhci0+Y3VycmVudFBvcygpICogKHRyYWNrTGVuZ3Ro
KHNjcm9sbGJhcikgLSB0aHVtYkxlbmd0aChzY3JvbGxiYXIpKSAvIHNjcm9sbGJhci0+bWF4aW11
bSgpOwotICAgICAgICByZXR1cm4gKHBvcyA8IDEgJiYgcG9zID4gMCkgPyAxIDogcG9zOwotICAg
IH0KLSAgICByZXR1cm4gMDsKLX0KLQotaW50IFNjcm9sbGJhclRoZW1lUVN0eWxlOjp0aHVtYkxl
bmd0aChTY3JvbGxiYXJUaGVtZUNsaWVudCogc2Nyb2xsYmFyKQotewotICAgIFFTdHlsZU9wdGlv
blNsaWRlciogb3B0ID0gc3R5bGVPcHRpb25TbGlkZXIoc2Nyb2xsYmFyKTsKLSAgICBJbnRSZWN0
IHRodW1iID0gc3R5bGUoKS0+c3ViQ29udHJvbFJlY3QoUVN0eWxlOjpDQ19TY3JvbGxCYXIsIG9w
dCwgUVN0eWxlOjpTQ19TY3JvbGxCYXJTbGlkZXIsIDApOwotICAgIHJldHVybiBzY3JvbGxiYXIt
Pm9yaWVudGF0aW9uKCkgPT0gSG9yaXpvbnRhbFNjcm9sbGJhciA/IHRodW1iLndpZHRoKCkgOiB0
aHVtYi5oZWlnaHQoKTsKLX0KLQotaW50IFNjcm9sbGJhclRoZW1lUVN0eWxlOjp0cmFja1Bvc2l0
aW9uKFNjcm9sbGJhclRoZW1lQ2xpZW50KiBzY3JvbGxiYXIpCi17Ci0gICAgUVN0eWxlT3B0aW9u
U2xpZGVyKiBvcHQgPSBzdHlsZU9wdGlvblNsaWRlcihzY3JvbGxiYXIpOwotICAgIEludFJlY3Qg
dHJhY2sgPSBzdHlsZSgpLT5zdWJDb250cm9sUmVjdChRU3R5bGU6OkNDX1Njcm9sbEJhciwgb3B0
LCBRU3R5bGU6OlNDX1Njcm9sbEJhckdyb292ZSwgMCk7Ci0gICAgcmV0dXJuIHNjcm9sbGJhci0+
b3JpZW50YXRpb24oKSA9PSBIb3Jpem9udGFsU2Nyb2xsYmFyID8gdHJhY2sueCgpIC0gc2Nyb2xs
YmFyLT54KCkgOiB0cmFjay55KCkgLSBzY3JvbGxiYXItPnkoKTsKLX0KLQotaW50IFNjcm9sbGJh
clRoZW1lUVN0eWxlOjp0cmFja0xlbmd0aChTY3JvbGxiYXJUaGVtZUNsaWVudCogc2Nyb2xsYmFy
KQotewotICAgIFFTdHlsZU9wdGlvblNsaWRlciogb3B0ID0gc3R5bGVPcHRpb25TbGlkZXIoc2Ny
b2xsYmFyKTsKLSAgICBJbnRSZWN0IHRyYWNrID0gc3R5bGUoKS0+c3ViQ29udHJvbFJlY3QoUVN0
eWxlOjpDQ19TY3JvbGxCYXIsIG9wdCwgUVN0eWxlOjpTQ19TY3JvbGxCYXJHcm9vdmUsIDApOwot
ICAgIHJldHVybiBzY3JvbGxiYXItPm9yaWVudGF0aW9uKCkgPT0gSG9yaXpvbnRhbFNjcm9sbGJh
ciA/IHRyYWNrLndpZHRoKCkgOiB0cmFjay5oZWlnaHQoKTsKLX0KLQotdm9pZCBTY3JvbGxiYXJU
aGVtZVFTdHlsZTo6cGFpbnRTY3JvbGxDb3JuZXIoU2Nyb2xsVmlldyosIEdyYXBoaWNzQ29udGV4
dCogY29udGV4dCwgY29uc3QgSW50UmVjdCYgcmVjdCkKLXsKLSAgICBTdHlsZVBhaW50ZXJRU3R5
bGUgcCh0aGlzLCBjb250ZXh0KTsKLSAgICBpZiAoIXAuaXNWYWxpZCgpKQotICAgICAgICByZXR1
cm47Ci0KLSAgICBRU3R5bGVPcHRpb24gb3B0aW9uOwotICAgIG9wdGlvbi5yZWN0ID0gcmVjdDsK
LSAgICBwLmRyYXdQcmltaXRpdmUoUVN0eWxlOjpQRV9QYW5lbFNjcm9sbEFyZWFDb3JuZXIsIG9w
dGlvbik7Ci19Ci0KLVFTdHlsZSogU2Nyb2xsYmFyVGhlbWVRU3R5bGU6OnN0eWxlKCkgY29uc3QK
LXsKLSAgICByZXR1cm4gUUFwcGxpY2F0aW9uOjpzdHlsZSgpOwotfQotCi19Ci0KZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJLaXQvcXQvV2ViQ29yZVN1cHBvcnQvU2Nyb2xsYmFyVGhlbWVRU3R5bGUu
aCBiL1NvdXJjZS9XZWJLaXQvcXQvV2ViQ29yZVN1cHBvcnQvU2Nyb2xsYmFyVGhlbWVRU3R5bGUu
aApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMjUzN2I5YWU0NGI0NThkZDcwMjI1YTA1
ZTAzZGJhMWM3MmEzZGRlMC4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MAotLS0gYS9Tb3VyY2UvV2ViS2l0L3F0L1dlYkNvcmVTdXBwb3J0L1Njcm9sbGJhclRoZW1lUVN0
eWxlLmgKKysrIC9kZXYvbnVsbApAQCAtMSw2MyArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChD
KSAyMDA4IEFwcGxlIEluYy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1
dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQK
LSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dp
bmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3Vy
Y2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAy
LiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3Zl
IGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Ig
b3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBU
SElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkK
LSAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywgVEhFCi0gKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFO
RCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJ
TiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCi0gKiBDT05UUklCVVRPUlMgQkUgTElBQkxF
IEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKLSAqIEVYRU1Q
TEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywKLSAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExP
U1MgT0YgVVNFLCBEQVRBLCBPUgotICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9O
KSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQotICogT0YgTElBQklMSVRZLCBXSEVU
SEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5H
IE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBV
U0UKLSAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJ
VFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotI2lmbmRlZiBTY3JvbGxiYXJUaGVtZVFTdHlsZV9o
Ci0jZGVmaW5lIFNjcm9sbGJhclRoZW1lUVN0eWxlX2gKLQotI2luY2x1ZGUgIlNjcm9sbGJhclRo
ZW1lLmgiCi0KLSNpbmNsdWRlIDxRdENvcmUvcWdsb2JhbC5oPgotCi1RVF9CRUdJTl9OQU1FU1BB
Q0UKLWNsYXNzIFFTdHlsZTsKLVFUX0VORF9OQU1FU1BBQ0UKLQotbmFtZXNwYWNlIFdlYkNvcmUg
ewotCi1jbGFzcyBTY3JvbGxiYXJUaGVtZVFTdHlsZSA6IHB1YmxpYyBTY3JvbGxiYXJUaGVtZSB7
Ci1wdWJsaWM6Ci0gICAgdmlydHVhbCB+U2Nyb2xsYmFyVGhlbWVRU3R5bGUoKTsKLQotICAgIHZp
cnR1YWwgYm9vbCBwYWludChTY3JvbGxiYXJUaGVtZUNsaWVudCosIEdyYXBoaWNzQ29udGV4dCos
IGNvbnN0IEludFJlY3QmIGRpcnR5UmVjdCk7Ci0gICAgdmlydHVhbCB2b2lkIHBhaW50U2Nyb2xs
Q29ybmVyKFNjcm9sbFZpZXcqLCBHcmFwaGljc0NvbnRleHQqLCBjb25zdCBJbnRSZWN0JiBjb3Ju
ZXJSZWN0KTsKLQotICAgIHZpcnR1YWwgU2Nyb2xsYmFyUGFydCBoaXRUZXN0KFNjcm9sbGJhclRo
ZW1lQ2xpZW50KiwgY29uc3QgUGxhdGZvcm1Nb3VzZUV2ZW50Jik7Ci0KLSAgICB2aXJ0dWFsIGJv
b2wgc2hvdWxkQ2VudGVyT25UaHVtYihTY3JvbGxiYXJUaGVtZUNsaWVudCosIGNvbnN0IFBsYXRm
b3JtTW91c2VFdmVudCYpOwotCi0gICAgdmlydHVhbCB2b2lkIGludmFsaWRhdGVQYXJ0KFNjcm9s
bGJhclRoZW1lQ2xpZW50KiwgU2Nyb2xsYmFyUGFydCk7Ci0KLSAgICB2aXJ0dWFsIGludCB0aHVt
YlBvc2l0aW9uKFNjcm9sbGJhclRoZW1lQ2xpZW50Kik7Ci0gICAgdmlydHVhbCBpbnQgdGh1bWJM
ZW5ndGgoU2Nyb2xsYmFyVGhlbWVDbGllbnQqKTsKLSAgICB2aXJ0dWFsIGludCB0cmFja1Bvc2l0
aW9uKFNjcm9sbGJhclRoZW1lQ2xpZW50Kik7Ci0gICAgdmlydHVhbCBpbnQgdHJhY2tMZW5ndGgo
U2Nyb2xsYmFyVGhlbWVDbGllbnQqKTsKLQotICAgIHZpcnR1YWwgaW50IHNjcm9sbGJhclRoaWNr
bmVzcyhTY3JvbGxiYXJDb250cm9sU2l6ZSA9IFJlZ3VsYXJTY3JvbGxiYXIpOwotCi0gICAgUVN0
eWxlKiBzdHlsZSgpIGNvbnN0OwotfTsKLQotfQotI2VuZGlmCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>166900</attachid>
            <date>2012-10-03 08:31:06 -0700</date>
            <delta_ts>2012-10-03 08:34:27 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-98268-20121003173314.patch</filename>
            <type>text/plain</type>
            <size>132250</size>
            <attacher name="Simon Hausmann">hausmann</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTI5NjEwCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggM2E3OWM4MDNhOWM2MWIy
YzFkMTZjZmI3ZmU1YWJlMWMyNDQ0NDhmMC4uYzU4YTEyODJlYzU3YjgzMGFmOWIxYjNkZWY2Njc4
MWJkYTU5MzQ2YyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDk4IEBACisyMDEyLTEwLTAzICBTaW1v
biBIYXVzbWFubiAgPHNpbW9uLmhhdXNtYW5uQGRpZ2lhLmNvbT4KKworICAgICAgICBbUXRdIE1h
a2UgUmVuZGVyVGhlbWVRU3R5bGUvU2Nyb2xsYmFyVGhlbWVRU3R5bGUgY29tcGlsZSB3aXRob3V0
IFFTdHlsZS9RdFdpZGdldHMKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19i
dWcuY2dpP2lkPTk4MjY4CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisK
KyAgICAgICAgRXh0cmFjdGVkIFFTdHlsZS9RV2lkZ2V0IHJlbGF0ZWQgY29kZSBpbnRvIGEgUVdl
YlN0eWxlIGNsYXNzIHRoYXQgaW1wbGVtZW50cyB0aGUgUVN0eWxlSW50ZXJmYWNlIGludGVyZmFj
ZS4KKworICAgICAgICAqIFRhcmdldC5wcmk6CisgICAgICAgICogcGxhdGZvcm0vcXQvUVN0eWxl
SW50ZXJmYWNlLmNwcDogQWRkZWQuCisgICAgICAgIChXZWJDb3JlKToKKyAgICAgICAgKFdlYkNv
cmU6OlFTdHlsZUludGVyZmFjZTo6c3R5bGVGb3JQYWdlKToKKyAgICAgICAgKiBwbGF0Zm9ybS9x
dC9RU3R5bGVJbnRlcmZhY2UuaDogQWRkZWQuCisgICAgICAgIChXZWJDb3JlKToKKyAgICAgICAg
KFFTdHlsZUludGVyZmFjZSk6CisgICAgICAgIChXZWJDb3JlOjpRU3R5bGVJbnRlcmZhY2U6On5R
U3R5bGVJbnRlcmZhY2UpOgorICAgICAgICAoV2ViQ29yZTo6UVN0eWxlSW50ZXJmYWNlT3B0aW9u
OjpRU3R5bGVJbnRlcmZhY2VPcHRpb24pOgorICAgICAgICAoUVN0eWxlSW50ZXJmYWNlT3B0aW9u
KToKKyAgICAgICAgKiBwbGF0Zm9ybS9xdC9SZW5kZXJUaGVtZVFTdHlsZS5jcHA6IFJlbmFtZWQg
ZnJvbSBTb3VyY2UvV2ViS2l0L3F0L1dlYkNvcmVTdXBwb3J0L1JlbmRlclRoZW1lUVN0eWxlLmNw
cC4KKyAgICAgICAgKFdlYkNvcmUpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGhlbWVRU3R5
bGU6OmdldFN0eWxlUGFpbnRlcik6CisgICAgICAgIChXZWJDb3JlOjpTdHlsZVBhaW50ZXJRU3R5
bGU6OlN0eWxlUGFpbnRlclFTdHlsZSk6CisgICAgICAgIChXZWJDb3JlOjpTdHlsZVBhaW50ZXJR
U3R5bGU6OmluaXQpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGhlbWVRU3R5bGU6OmNyZWF0
ZSk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJUaGVtZVFTdHlsZTo6c2V0U3R5bGVGYWN0b3J5
RnVuY3Rpb24pOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGhlbWVRU3R5bGU6OnN0eWxlRmFj
dG9yeSk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJUaGVtZVFTdHlsZTo6UmVuZGVyVGhlbWVR
U3R5bGUpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGhlbWVRU3R5bGU6On5SZW5kZXJUaGVt
ZVFTdHlsZSk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJUaGVtZVFTdHlsZTo6c2V0UGFsZXR0
ZUZyb21QYWdlQ2xpZW50SWZFeGlzdHMpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGhlbWVR
U3R5bGU6OmluZmxhdGVCdXR0b25SZWN0KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRoZW1l
UVN0eWxlOjpjb21wdXRlU2l6ZUJhc2VkT25TdHlsZSk6CisgICAgICAgIChXZWJDb3JlOjpSZW5k
ZXJUaGVtZVFTdHlsZTo6YWRqdXN0QnV0dG9uU3R5bGUpOgorICAgICAgICAoV2ViQ29yZTo6UmVu
ZGVyVGhlbWVRU3R5bGU6OnNldEJ1dHRvblBhZGRpbmcpOgorICAgICAgICAoV2ViQ29yZTo6UmVu
ZGVyVGhlbWVRU3R5bGU6OnBhaW50QnV0dG9uKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRo
ZW1lUVN0eWxlOjpwYWludFRleHRGaWVsZCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJUaGVt
ZVFTdHlsZTo6YWRqdXN0VGV4dEFyZWFTdHlsZSk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJU
aGVtZVFTdHlsZTo6cGFpbnRUZXh0QXJlYSk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJUaGVt
ZVFTdHlsZTo6c2V0UG9wdXBQYWRkaW5nKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRoZW1l
UVN0eWxlOjpjb2xvclBhbGV0dGUpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGhlbWVRU3R5
bGU6OnBhaW50TWVudUxpc3QpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGhlbWVRU3R5bGU6
OmFkanVzdE1lbnVMaXN0QnV0dG9uU3R5bGUpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGhl
bWVRU3R5bGU6OnBhaW50TWVudUxpc3RCdXR0b24pOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVy
VGhlbWVRU3R5bGU6OmFuaW1hdGlvbkR1cmF0aW9uRm9yUHJvZ3Jlc3NCYXIpOgorICAgICAgICAo
V2ViQ29yZTo6UmVuZGVyVGhlbWVRU3R5bGU6OnBhaW50UHJvZ3Jlc3NCYXIpOgorICAgICAgICAo
V2ViQ29yZTo6UmVuZGVyVGhlbWVRU3R5bGU6OnBhaW50U2xpZGVyVHJhY2spOgorICAgICAgICAo
V2ViQ29yZTo6UmVuZGVyVGhlbWVRU3R5bGU6OmFkanVzdFNsaWRlclRyYWNrU3R5bGUpOgorICAg
ICAgICAoV2ViQ29yZTo6UmVuZGVyVGhlbWVRU3R5bGU6OnBhaW50U2xpZGVyVGh1bWIpOgorICAg
ICAgICAoV2ViQ29yZTo6UmVuZGVyVGhlbWVRU3R5bGU6OmFkanVzdFNsaWRlclRodW1iU3R5bGUp
OgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGhlbWVRU3R5bGU6OnBhaW50U2VhcmNoRmllbGQp
OgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGhlbWVRU3R5bGU6OmFkanVzdFNlYXJjaEZpZWxk
RGVjb3JhdGlvblN0eWxlKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRoZW1lUVN0eWxlOjpw
YWludFNlYXJjaEZpZWxkRGVjb3JhdGlvbik6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJUaGVt
ZVFTdHlsZTo6YWRqdXN0U2VhcmNoRmllbGRSZXN1bHRzRGVjb3JhdGlvblN0eWxlKToKKyAgICAg
ICAgKFdlYkNvcmU6OlJlbmRlclRoZW1lUVN0eWxlOjpwYWludFNlYXJjaEZpZWxkUmVzdWx0c0Rl
Y29yYXRpb24pOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGhlbWVRU3R5bGU6OnBhaW50SW5u
ZXJTcGluQnV0dG9uKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRoZW1lUVN0eWxlOjppbml0
aWFsaXplQ29tbW9uUVN0eWxlT3B0aW9ucyk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJUaGVt
ZVFTdHlsZTo6YWRqdXN0U2xpZGVyVGh1bWJTaXplKToKKyAgICAgICAgKiBwbGF0Zm9ybS9xdC9S
ZW5kZXJUaGVtZVFTdHlsZS5oOiBSZW5hbWVkIGZyb20gU291cmNlL1dlYktpdC9xdC9XZWJDb3Jl
U3VwcG9ydC9SZW5kZXJUaGVtZVFTdHlsZS5oLgorICAgICAgICAoV2ViQ29yZSk6CisgICAgICAg
IChSZW5kZXJUaGVtZVFTdHlsZSk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJUaGVtZVFTdHls
ZTo6c3R5bGVJbnRlcmZhY2UpOgorICAgICAgICAoU3R5bGVQYWludGVyUVN0eWxlKToKKyAgICAg
ICAgKFdlYkNvcmU6OlN0eWxlUGFpbnRlclFTdHlsZTo6aXNWYWxpZCk6CisgICAgICAgIChXZWJD
b3JlOjpTdHlsZVBhaW50ZXJRU3R5bGU6OnBhaW50QnV0dG9uKToKKyAgICAgICAgKFdlYkNvcmU6
OlN0eWxlUGFpbnRlclFTdHlsZTo6cGFpbnRUZXh0RmllbGQpOgorICAgICAgICAoV2ViQ29yZTo6
U3R5bGVQYWludGVyUVN0eWxlOjpwYWludENvbWJvQm94KToKKyAgICAgICAgKFdlYkNvcmU6OlN0
eWxlUGFpbnRlclFTdHlsZTo6cGFpbnRDb21ib0JveEFycm93KToKKyAgICAgICAgKFdlYkNvcmU6
OlN0eWxlUGFpbnRlclFTdHlsZTo6cGFpbnRTbGlkZXJUcmFjayk6CisgICAgICAgIChXZWJDb3Jl
OjpTdHlsZVBhaW50ZXJRU3R5bGU6OnBhaW50U2xpZGVyVGh1bWIpOgorICAgICAgICAoV2ViQ29y
ZTo6U3R5bGVQYWludGVyUVN0eWxlOjpwYWludElubmVyU3BpbkJ1dHRvbik6CisgICAgICAgIChX
ZWJDb3JlOjpTdHlsZVBhaW50ZXJRU3R5bGU6OnBhaW50UHJvZ3Jlc3NCYXIpOgorICAgICAgICAo
V2ViQ29yZTo6U3R5bGVQYWludGVyUVN0eWxlOjpwYWludFNjcm9sbENvcm5lcik6CisgICAgICAg
IChXZWJDb3JlOjpTdHlsZVBhaW50ZXJRU3R5bGU6OnBhaW50U2Nyb2xsQmFyKToKKyAgICAgICAg
KiBwbGF0Zm9ybS9xdC9TY3JvbGxiYXJUaGVtZVFTdHlsZS5jcHA6IFJlbmFtZWQgZnJvbSBTb3Vy
Y2UvV2ViS2l0L3F0L1dlYkNvcmVTdXBwb3J0L1Njcm9sbGJhclRoZW1lUVN0eWxlLmNwcC4KKyAg
ICAgICAgKFdlYkNvcmUpOgorICAgICAgICAoV2ViQ29yZTo6U2Nyb2xsYmFyVGhlbWVRU3R5bGU6
OlNjcm9sbGJhclRoZW1lUVN0eWxlKToKKyAgICAgICAgKFdlYkNvcmU6OlNjcm9sbGJhclRoZW1l
UVN0eWxlOjp+U2Nyb2xsYmFyVGhlbWVRU3R5bGUpOgorICAgICAgICAoV2ViQ29yZTo6c2NQYXJ0
KToKKyAgICAgICAgKFdlYkNvcmU6OnNjcm9sbGJhclBhcnQpOgorICAgICAgICAoV2ViQ29yZTo6
aW5pdFNsaWRlclN0eWxlT3B0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OlNjcm9sbGJhclRoZW1l
UVN0eWxlOjpwYWludCk6CisgICAgICAgIChXZWJDb3JlOjpTY3JvbGxiYXJUaGVtZVFTdHlsZTo6
aGl0VGVzdCk6CisgICAgICAgIChXZWJDb3JlOjpTY3JvbGxiYXJUaGVtZVFTdHlsZTo6c2hvdWxk
Q2VudGVyT25UaHVtYik6CisgICAgICAgIChXZWJDb3JlOjpTY3JvbGxiYXJUaGVtZVFTdHlsZTo6
aW52YWxpZGF0ZVBhcnQpOgorICAgICAgICAoV2ViQ29yZTo6U2Nyb2xsYmFyVGhlbWVRU3R5bGU6
OnNjcm9sbGJhclRoaWNrbmVzcyk6CisgICAgICAgIChXZWJDb3JlOjpTY3JvbGxiYXJUaGVtZVFT
dHlsZTo6dGh1bWJQb3NpdGlvbik6CisgICAgICAgIChXZWJDb3JlOjpTY3JvbGxiYXJUaGVtZVFT
dHlsZTo6dGh1bWJMZW5ndGgpOgorICAgICAgICAoV2ViQ29yZTo6U2Nyb2xsYmFyVGhlbWVRU3R5
bGU6OnRyYWNrUG9zaXRpb24pOgorICAgICAgICAoV2ViQ29yZTo6U2Nyb2xsYmFyVGhlbWVRU3R5
bGU6OnRyYWNrTGVuZ3RoKToKKyAgICAgICAgKFdlYkNvcmU6OlNjcm9sbGJhclRoZW1lUVN0eWxl
OjpwYWludFNjcm9sbENvcm5lcik6CisgICAgICAgICogcGxhdGZvcm0vcXQvU2Nyb2xsYmFyVGhl
bWVRU3R5bGUuaDogUmVuYW1lZCBmcm9tIFNvdXJjZS9XZWJLaXQvcXQvV2ViQ29yZVN1cHBvcnQv
U2Nyb2xsYmFyVGhlbWVRU3R5bGUuaC4KKyAgICAgICAgKFdlYkNvcmUpOgorICAgICAgICAoU2Ny
b2xsYmFyVGhlbWVRU3R5bGUpOgorICAgICAgICAoV2ViQ29yZTo6U2Nyb2xsYmFyVGhlbWVRU3R5
bGU6OnN0eWxlSW50ZXJmYWNlKToKKwogMjAxMi0wOS0yNiAgWmFuIERvYmVyc2VrICA8emFuZG9i
ZXJzZWtAZ21haWwuY29tPgogCiAgICAgICAgIFtHVEtdIEVuYWJsZSBzb21lIG9mIHRoZSB1bnN0
YWJsZSBDU1MgZmVhdHVyZXMKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nIGIv
U291cmNlL1dlYktpdC9DaGFuZ2VMb2cKaW5kZXggYTA5ZThkZjBkYzdmN2IxYjcwNTY4OTIwNTVm
MmI0ZTk1Y2FiZWFkZi4uYTU2NTg3ZmI0NjZhOTJiYWQ1N2M0ZjhlOTZiNGYzYzI5MWNjMjBkYSAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYktpdC9D
aGFuZ2VMb2cKQEAgLTEsMyArMSwxNCBAQAorMjAxMi0xMC0wMyAgU2ltb24gSGF1c21hbm4gIDxz
aW1vbi5oYXVzbWFubkBkaWdpYS5jb20+CisKKyAgICAgICAgW1F0XSBNYWtlIFJlbmRlclRoZW1l
UVN0eWxlL1Njcm9sbGJhclRoZW1lUVN0eWxlIGNvbXBpbGUgd2l0aG91dCBRU3R5bGUvUXRXaWRn
ZXRzCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD05ODI2
OAorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIEV4dHJh
Y3RlZCBRU3R5bGUvUVdpZGdldCByZWxhdGVkIGNvZGUgaW50byBhIFFXZWJTdHlsZSBjbGFzcyB0
aGF0IGltcGxlbWVudHMgdGhlIFFTdHlsZUludGVyZmFjZSBpbnRlcmZhY2UuCisKKyAgICAgICAg
KiBXZWJLaXQxLnBybzoKKwogMjAxMi0wOS0yNCAgQXJ2aWQgTmlsc3NvbiAgPGFuaWxzc29uQHJp
bS5jb20+CiAKICAgICAgICAgW0JsYWNrQmVycnldIEFkZCBjb29raWUgZGF0YWJhc2UgQVBJCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L3F0L0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJLaXQvcXQv
Q2hhbmdlTG9nCmluZGV4IDYxMmI4NjdkMjAxNTNiNGIyOTkxMWE1YjU3MTExN2U2ZWVmNmNmMzYu
LjQ3MTM4ODg4N2M0MjljNTEwMGE3MTk2ZmFkMGQ5YWMzY2Q3YzEzYWYgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJLaXQvcXQvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XZWJLaXQvcXQvQ2hhbmdlTG9n
CkBAIC0xLDMgKzEsNTggQEAKKzIwMTItMTAtMDMgIFNpbW9uIEhhdXNtYW5uICA8c2ltb24uaGF1
c21hbm5AZGlnaWEuY29tPgorCisgICAgICAgIFtRdF0gTWFrZSBSZW5kZXJUaGVtZVFTdHlsZS9T
Y3JvbGxiYXJUaGVtZVFTdHlsZSBjb21waWxlIHdpdGhvdXQgUVN0eWxlL1F0V2lkZ2V0cworICAg
ICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9OTgyNjgKKworICAg
ICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBFeHRyYWN0ZWQgUVN0
eWxlL1FXaWRnZXQgcmVsYXRlZCBjb2RlIGludG8gYSBRV2ViU3R5bGUgY2xhc3MgdGhhdCBpbXBs
ZW1lbnRzIHRoZSBRU3R5bGVJbnRlcmZhY2UgaW50ZXJmYWNlLgorCisgICAgICAgICogV2ViQ29y
ZVN1cHBvcnQvSW5pdFdlYkNvcmVRdC5jcHA6CisgICAgICAgIChXZWJDb3JlOjppbml0aWFsaXpl
V2ViQ29yZVF0KToKKyAgICAgICAgKiBXZWJDb3JlU3VwcG9ydC9RV2ViU3R5bGUuY3BwOiBBZGRl
ZC4KKyAgICAgICAgKFdlYktpdCk6CisgICAgICAgIChXZWJLaXQ6OmNvbnZlcnRUb1FTdHlsZVN0
YXRlKToKKyAgICAgICAgKFdlYktpdDo6Y29udmVydFRvUVN0eWxlU3ViQ29udHJvbCk6CisgICAg
ICAgIChXZWJLaXQ6OmluaXRHZW5lcmljU3R5bGVPcHRpb24pOgorICAgICAgICAoV2ViS2l0Ojpp
bml0U3BlY2lmaWNTdHlsZU9wdGlvbik6CisgICAgICAgIChNYXBwZWRTdHlsZU9wdGlvbik6Cisg
ICAgICAgIChXZWJLaXQ6Ok1hcHBlZFN0eWxlT3B0aW9uOjpNYXBwZWRTdHlsZU9wdGlvbik6Cisg
ICAgICAgIChXZWJLaXQ6OmNvbnZlcnRQaXhlbE1ldHJpYyk6CisgICAgICAgIChXZWJLaXQ6OmNv
bnZlcnRUb1FTdHlsZUludGVyZmFjZVN1YkNvbnRyb2wpOgorICAgICAgICAoV2ViS2l0OjpRV2Vi
U3R5bGU6OlFXZWJTdHlsZSk6CisgICAgICAgIChXZWJLaXQ6OlFXZWJTdHlsZTo6flFXZWJTdHls
ZSk6CisgICAgICAgIChXZWJLaXQ6OlFXZWJTdHlsZTo6YnV0dG9uU3ViRWxlbWVudFJlY3QpOgor
ICAgICAgICAoV2ViS2l0OjpRV2ViU3R5bGU6OmZpbmRGcmFtZUxpbmVXaWR0aCk6CisgICAgICAg
IChXZWJLaXQ6OlFXZWJTdHlsZTo6c2ltcGxlUGl4ZWxNZXRyaWMpOgorICAgICAgICAoV2ViS2l0
OjpRV2ViU3R5bGU6OmJ1dHRvbk1hcmdpbik6CisgICAgICAgIChXZWJLaXQ6OlFXZWJTdHlsZTo6
c2xpZGVyTGVuZ3RoKToKKyAgICAgICAgKFdlYktpdDo6UVdlYlN0eWxlOjpzbGlkZXJUaGlja25l
c3MpOgorICAgICAgICAoV2ViS2l0OjpRV2ViU3R5bGU6OnByb2dyZXNzQmFyQ2h1bmtXaWR0aCk6
CisgICAgICAgIChXZWJLaXQ6OlFXZWJTdHlsZTo6Z2V0QnV0dG9uTWV0cmljcyk6CisgICAgICAg
IChXZWJLaXQ6OlFXZWJTdHlsZTo6c2l6ZUZyb21Db250ZW50cyk6CisgICAgICAgIChXZWJLaXQ6
OlFXZWJTdHlsZTo6cGFpbnRCdXR0b24pOgorICAgICAgICAoV2ViS2l0OjpRV2ViU3R5bGU6OnBh
aW50VGV4dEZpZWxkKToKKyAgICAgICAgKFdlYktpdDo6UVdlYlN0eWxlOjpwYWludENvbWJvQm94
KToKKyAgICAgICAgKFdlYktpdDo6UVdlYlN0eWxlOjpwYWludENvbWJvQm94QXJyb3cpOgorICAg
ICAgICAoV2ViS2l0OjpRV2ViU3R5bGU6OnBhaW50U2xpZGVyVHJhY2spOgorICAgICAgICAoV2Vi
S2l0OjpRV2ViU3R5bGU6OnBhaW50U2xpZGVyVGh1bWIpOgorICAgICAgICAoV2ViS2l0OjpRV2Vi
U3R5bGU6OnBhaW50SW5uZXJTcGluQnV0dG9uKToKKyAgICAgICAgKFdlYktpdDo6UVdlYlN0eWxl
OjpwYWludFByb2dyZXNzQmFyKToKKyAgICAgICAgKFdlYktpdDo6UVdlYlN0eWxlOjpzY3JvbGxC
YXJFeHRlbnQpOgorICAgICAgICAoV2ViS2l0OjpRV2ViU3R5bGU6OnNjcm9sbEJhck1pZGRsZUNs
aWNrQWJzb2x1dGVQb3NpdGlvblN0eWxlSGludCk6CisgICAgICAgIChXZWJLaXQ6OlFXZWJTdHls
ZTo6cGFpbnRTY3JvbGxDb3JuZXIpOgorICAgICAgICAoV2ViS2l0OjpRV2ViU3R5bGU6OmhpdFRl
c3RTY3JvbGxCYXIpOgorICAgICAgICAoV2ViS2l0OjpRV2ViU3R5bGU6OnNjcm9sbEJhclN1YkNv
bnRyb2xSZWN0KToKKyAgICAgICAgKFdlYktpdDo6UVdlYlN0eWxlOjpwYWludFNjcm9sbEJhcik6
CisgICAgICAgIChXZWJLaXQ6OlFXZWJTdHlsZTo6d2lkZ2V0Rm9yUGFpbnRlcik6CisgICAgICAg
IChXZWJLaXQ6OlFXZWJTdHlsZTo6aXNWYWxpZCk6CisgICAgICAgIChXZWJLaXQ6OlFXZWJTdHls
ZTo6ZW5zdXJlU3R5bGUpOgorICAgICAgICAqIFdlYkNvcmVTdXBwb3J0L1FXZWJTdHlsZS5oOiBB
ZGRlZC4KKyAgICAgICAgKFdlYkNvcmUpOgorICAgICAgICAoV2ViS2l0KToKKyAgICAgICAgKFFX
ZWJTdHlsZSk6CisgICAgICAgIChXZWJLaXQ6OlFXZWJTdHlsZTo6Y3JlYXRlKToKKwogMjAxMi0w
OS0yNiAgU2ltb24gSGF1c21hbm4gIDxzaW1vbi5oYXVzbWFubkBkaWdpYS5jb20+CiAKICAgICAg
ICAgW1F0XSBSZW1vdmUgUXQgUXVpY2sgMSBzdXBwb3J0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9UYXJnZXQucHJpIGIvU291cmNlL1dlYkNvcmUvVGFyZ2V0LnByaQppbmRleCAyNDdjMjBl
YzVjMzZiYzQ2Y2UyODAwMGY1NDA4OWUwMTkzYWFhZmVjLi40MzZlYWU5MDIzMTg3NzEwODk0MGE3
M2M4N2JkZTA1NjJjZTExYmE5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9UYXJnZXQucHJp
CisrKyBiL1NvdXJjZS9XZWJDb3JlL1RhcmdldC5wcmkKQEAgLTIyMjksOCArMjIyOSwxMSBAQCBI
RUFERVJTICs9IFwKICAgICBwbGF0Zm9ybS9xdC9DbGlwYm9hcmRRdC5oIFwKICAgICBwbGF0Zm9y
bS9xdC9Db29raWVKYXJRdC5oIFwKICAgICBwbGF0Zm9ybS9xdC9RV2ViUGFnZUNsaWVudC5oIFwK
KyAgICBwbGF0Zm9ybS9xdC9RU3R5bGVJbnRlcmZhY2UuaCBcCisgICAgcGxhdGZvcm0vcXQvUmVu
ZGVyVGhlbWVRU3R5bGUuaCBcCiAgICAgcGxhdGZvcm0vcXQvUmVuZGVyVGhlbWVRdC5oIFwKICAg
ICBwbGF0Zm9ybS9xdC9SZW5kZXJUaGVtZVF0TW9iaWxlLmggXAorICAgIHBsYXRmb3JtL3F0L1Nj
cm9sbGJhclRoZW1lUVN0eWxlLmggXAogICAgIHBsYXRmb3JtL3F0L1VzZXJBZ2VudFF0LmggXAog
ICAgIHBsYXRmb3JtL1Njcm9sbGFibGVBcmVhLmggXAogICAgIHBsYXRmb3JtL1Njcm9sbEFuaW1h
dG9yLmggXApAQCAtMjgwMSw4ICsyODA0LDExIEBAIFNPVVJDRVMgKz0gXAogICAgIHBsYXRmb3Jt
L3F0L1Bhc3RlYm9hcmRRdC5jcHAgXAogICAgIHBsYXRmb3JtL3F0L1BsYXRmb3JtS2V5Ym9hcmRF
dmVudFF0LmNwcCBcCiAgICAgcGxhdGZvcm0vcXQvUGxhdGZvcm1TY3JlZW5RdC5jcHAgXAorICAg
IHBsYXRmb3JtL3F0L1FTdHlsZUludGVyZmFjZS5jcHAgXAorICAgIHBsYXRmb3JtL3F0L1JlbmRl
clRoZW1lUVN0eWxlLmNwcCBcCiAgICAgcGxhdGZvcm0vcXQvUmVuZGVyVGhlbWVRdC5jcHAgXAog
ICAgIHBsYXRmb3JtL3F0L1JlbmRlclRoZW1lUXRNb2JpbGUuY3BwIFwKKyAgICBwbGF0Zm9ybS9x
dC9TY3JvbGxiYXJUaGVtZVFTdHlsZS5jcHAgXAogICAgIHBsYXRmb3JtL3F0L1Njcm9sbGJhclRo
ZW1lUXQuY3BwIFwKICAgICBwbGF0Zm9ybS9xdC9TY3JvbGxWaWV3UXQuY3BwIFwKICAgICBwbGF0
Zm9ybS9xdC9TaGFyZWRUaW1lclF0LmNwcCBcCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9xdC9RU3R5bGVJbnRlcmZhY2UuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
cXQvUVN0eWxlSW50ZXJmYWNlLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5mY2Q2ZTUyZTBlZTQ5Njk1M2Y1ZTg1
YTViYWE4YzhhM2M4ZGUyMmY0Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vcXQvUVN0eWxlSW50ZXJmYWNlLmNwcApAQCAtMCwwICsxLDQ2IEBACisvKgorICogVGhp
cyBmaWxlIGlzIHBhcnQgb2YgdGhlIHRoZW1lIGltcGxlbWVudGF0aW9uIGZvciBmb3JtIGNvbnRy
b2xzIGluIFdlYkNvcmUuCisgKgorICogQ29weXJpZ2h0IChDKSAyMDEyIERpZ2lhIFBsYyBhbmQv
b3IgaXRzIHN1YnNpZGlhcnkoLWllcykuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTEtMjAxMiBOb2tp
YSBDb3Jwb3JhdGlvbiBhbmQvb3IgaXRzIHN1YnNpZGlhcnkoLWllcykuCisgKgorICogVGhpcyBs
aWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgor
ICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQ
dWJsaWMKKyAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5k
YXRpb247IGVpdGhlcgorICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBv
cHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmli
dXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQg
QU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1F
UkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0
aGUgR05VCisgKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWls
cy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGli
cmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsg
c2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bworICogdGhlIEZyZWUg
U29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9v
ciwKKyAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgorICoKKyAqLworCisjaW5jbHVkZSAi
Y29uZmlnLmgiCisjaW5jbHVkZSAiUVN0eWxlSW50ZXJmYWNlLmgiCisKKyNpbmNsdWRlICJRV2Vi
UGFnZUNsaWVudC5oIgorI2luY2x1ZGUgPENocm9tZS5oPgorI2luY2x1ZGUgPENocm9tZUNsaWVu
dC5oPgorI2luY2x1ZGUgPFBhZ2UuaD4KKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitRU3R5bGUq
IFFTdHlsZUludGVyZmFjZTo6c3R5bGVGb3JQYWdlKFBhZ2UqIHBhZ2UpCit7CisgICAgaWYgKCFw
YWdlKQorICAgICAgICByZXR1cm4gMDsKKyAgICBRV2ViUGFnZUNsaWVudCogcGFnZUNsaWVudCA9
IHBhZ2UtPmNocm9tZSgpLT5jbGllbnQoKS0+cGxhdGZvcm1QYWdlQ2xpZW50KCk7CisKKyAgICBp
ZiAoIXBhZ2VDbGllbnQpCisgICAgICAgIHJldHVybiAwOworCisgICAgcmV0dXJuIHBhZ2VDbGll
bnQtPnN0eWxlKCk7Cit9CisKK30KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L3F0L1FTdHlsZUludGVyZmFjZS5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vcXQvUVN0eWxl
SW50ZXJmYWNlLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uZTIxNTg4ODZjMjE0MzVlMTc4YmZhNzk0NDQxNDVjYTFk
ZTdmMGYwNQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3F0L1FT
dHlsZUludGVyZmFjZS5oCkBAIC0wLDAgKzEsMjA1IEBACisvKgorICogVGhpcyBmaWxlIGlzIHBh
cnQgb2YgdGhlIHRoZW1lIGltcGxlbWVudGF0aW9uIGZvciBmb3JtIGNvbnRyb2xzIGluIFdlYkNv
cmUuCisgKgorICogQ29weXJpZ2h0IChDKSAyMDEyIERpZ2lhIFBsYyBhbmQvb3IgaXRzIHN1YnNp
ZGlhcnkoLWllcykuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTEtMjAxMiBOb2tpYSBDb3Jwb3JhdGlv
biBhbmQvb3IgaXRzIHN1YnNpZGlhcnkoLWllcykuCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGZy
ZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0
IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAqIExp
Y2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhl
cgorICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBs
YXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUg
aG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZ
OyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElU
WSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiBM
aWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZ
b3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFs
IFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxl
IENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bworICogdGhlIEZyZWUgU29mdHdhcmUgRm91
bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKKyAqIEJvc3Rv
biwgTUEgMDIxMTAtMTMwMSwgVVNBLgorICoKKyAqLworI2lmbmRlZiBRU3R5bGVJbnRlcmZhY2Vf
aAorI2RlZmluZSBRU3R5bGVJbnRlcmZhY2VfaAorCisjaW5jbHVkZSA8UVBhbGV0dGU+CisjaW5j
bHVkZSA8UVJlY3Q+CisKK1FUX0JFR0lOX05BTUVTUEFDRQorY2xhc3MgUVN0eWxlOworUVRfRU5E
X05BTUVTUEFDRQorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK2NsYXNzIFBhZ2U7CitjbGFzcyBR
U3R5bGVJbnRlcmZhY2VPcHRpb247CisKK2NsYXNzIFFTdHlsZUludGVyZmFjZSB7CitwdWJsaWM6
CisgICAgZW51bSBCdXR0b25TdWJFbGVtZW50IHsKKyAgICAgICAgUHVzaEJ1dHRvbkxheW91dEl0
ZW0sCisgICAgICAgIFB1c2hCdXR0b25Db250ZW50cworICAgIH07CisKKyNkZWZpbmUgRk9SX0VB
Q0hfTUFQUEVEX1NUQVRFKEYsIFNFUEFSQVRPUikgXAorICAgIEYoU3RhdGVfTm9uZSwgMHgwMDAw
MDAwMCkgU0VQQVJBVE9SIFwKKyAgICBGKFN0YXRlX0VuYWJsZWQsIDB4MDAwMDAwMDEpIFNFUEFS
QVRPUiBcCisgICAgRihTdGF0ZV9SYWlzZWQsIDB4MDAwMDAwMDIpIFNFUEFSQVRPUiBcCisgICAg
RihTdGF0ZV9TdW5rZW4sIDB4MDAwMDAwMDQpIFNFUEFSQVRPUiBcCisgICAgRihTdGF0ZV9PZmYs
IDB4MDAwMDAwMDgpIFNFUEFSQVRPUiBcCisgICAgRihTdGF0ZV9Ob0NoYW5nZSwgMHgwMDAwMDAx
MCkgU0VQQVJBVE9SIFwKKyAgICBGKFN0YXRlX09uLCAweDAwMDAwMDIwKSBTRVBBUkFUT1IgXAor
ICAgIEYoU3RhdGVfRG93bkFycm93LCAweDAwMDAwMDQwKSBTRVBBUkFUT1IgXAorICAgIEYoU3Rh
dGVfSG9yaXpvbnRhbCwgMHgwMDAwMDA4MCkgU0VQQVJBVE9SIFwKKyAgICBGKFN0YXRlX0hhc0Zv
Y3VzLCAweDAwMDAwMTAwKSBTRVBBUkFUT1IgXAorICAgIEYoU3RhdGVfVG9wLCAweDAwMDAwMjAw
KSBTRVBBUkFUT1IgXAorICAgIEYoU3RhdGVfQm90dG9tLCAweDAwMDAwNDAwKSBTRVBBUkFUT1Ig
XAorICAgIEYoU3RhdGVfRm9jdXNBdEJvcmRlciwgMHgwMDAwMDgwMCkgU0VQQVJBVE9SIFwKKyAg
ICBGKFN0YXRlX0F1dG9SYWlzZSwgMHgwMDAwMTAwMCkgU0VQQVJBVE9SIFwKKyAgICBGKFN0YXRl
X01vdXNlT3ZlciwgMHgwMDAwMjAwMCkgU0VQQVJBVE9SIFwKKyAgICBGKFN0YXRlX1VwQXJyb3cs
IDB4MDAwMDQwMDApIFNFUEFSQVRPUiBcCisgICAgRihTdGF0ZV9TZWxlY3RlZCwgMHgwMDAwODAw
MCkgU0VQQVJBVE9SIFwKKyAgICBGKFN0YXRlX0FjdGl2ZSwgMHgwMDAxMDAwMCkgU0VQQVJBVE9S
IFwKKyAgICBGKFN0YXRlX1dpbmRvdywgMHgwMDAyMDAwMCkgU0VQQVJBVE9SIFwKKyAgICBGKFN0
YXRlX09wZW4sIDB4MDAwNDAwMDApIFNFUEFSQVRPUiBcCisgICAgRihTdGF0ZV9DaGlsZHJlbiwg
MHgwMDA4MDAwMCkgU0VQQVJBVE9SIFwKKyAgICBGKFN0YXRlX0l0ZW0sIDB4MDAxMDAwMDApIFNF
UEFSQVRPUiBcCisgICAgRihTdGF0ZV9TaWJsaW5nLCAweDAwMjAwMDAwKSBTRVBBUkFUT1IgXAor
ICAgIEYoU3RhdGVfRWRpdGluZywgMHgwMDQwMDAwMCkgU0VQQVJBVE9SIFwKKyAgICBGKFN0YXRl
X0tleWJvYXJkRm9jdXNDaGFuZ2UsIDB4MDA4MDAwMDApIFNFUEFSQVRPUiBcCisgICAgRihTdGF0
ZV9SZWFkT25seSwgMHgwMjAwMDAwMCkgU0VQQVJBVE9SIFwKKyAgICBGKFN0YXRlX1NtYWxsLCAw
eDA0MDAwMDAwKSBTRVBBUkFUT1IgXAorICAgIEYoU3RhdGVfTWluaSwgMHgwODAwMDAwKQorCisj
ZGVmaW5lIENPTU1BICwKKyNkZWZpbmUgU0VNSUNPTE9OIDsKKyNkZWZpbmUgREVGSU5FX01BUFBF
RF9TVEFURShOYW1lLCBWYWx1ZSkgXAorICAgIE5hbWUgPSBWYWx1ZQorCisgICAgLy8gIyMjIFJl
bW92ZSB1bnVzZWQgc3RhdGVzLgorICAgIGVudW0gU3RhdGVGbGFnIHsKKyAgICAgICAgRk9SX0VB
Q0hfTUFQUEVEX1NUQVRFKERFRklORV9NQVBQRURfU1RBVEUsIENPTU1BKQorICAgIH07CisgICAg
UV9ERUNMQVJFX0ZMQUdTKFN0YXRlLCBTdGF0ZUZsYWcpCisKKyNkZWZpbmUgRk9SX0VBQ0hfTUFQ
UEVEX01FVFJJQyhGLCBTRVBBUkFUT1IpIFwKKyAgICBGKFBNX0J1dHRvbk1hcmdpbikgU0VQQVJB
VE9SIFwKKyAgICBGKFBNX0RlZmF1bHRGcmFtZVdpZHRoKSBTRVBBUkFUT1IgXAorICAgIEYoUE1f
SW5kaWNhdG9yV2lkdGgpIFNFUEFSQVRPUiBcCisgICAgRihQTV9FeGNsdXNpdmVJbmRpY2F0b3JX
aWR0aCkgU0VQQVJBVE9SIFwKKyAgICBGKFBNX0J1dHRvbkljb25TaXplKQorCisjZGVmaW5lIERF
RklORV9NRVRSSUMoRikgRgorCisgICAgZW51bSBQaXhlbE1ldHJpYyB7CisgICAgICAgIEZPUl9F
QUNIX01BUFBFRF9NRVRSSUMoREVGSU5FX01FVFJJQywgQ09NTUEpCisgICAgfTsKKworICAgIGVu
dW0gQ29udGVudHNUeXBlIHsKKyAgICAgICAgQ1RfQ29tYm9Cb3gsCisgICAgICAgIENUX1B1c2hC
dXR0b24KKyAgICB9OworCisjZGVmaW5lIEZPUl9FQUNIX1NVQkNPTlRST0woRiwgU0VQQVJBVE9S
KSBcCisgICAgRihTQ19Ob25lLCAweDAwMDAwMDAwKSBTRVBBUkFUT1IgXAorICAgIEYoU0NfU2Ny
b2xsQmFyQWRkTGluZSwgMHgwMDAwMDAwMSkgU0VQQVJBVE9SIFwKKyAgICBGKFNDX1Njcm9sbEJh
clN1YkxpbmUsIDB4MDAwMDAwMDIpIFNFUEFSQVRPUiBcCisgICAgRihTQ19TY3JvbGxCYXJBZGRQ
YWdlLCAweDAwMDAwMDA0KSBTRVBBUkFUT1IgXAorICAgIEYoU0NfU2Nyb2xsQmFyU3ViUGFnZSwg
MHgwMDAwMDAwOCkgU0VQQVJBVE9SIFwKKyAgICBGKFNDX1Njcm9sbEJhckZpcnN0LCAweDAwMDAw
MDEwKSBTRVBBUkFUT1IgXAorICAgIEYoU0NfU2Nyb2xsQmFyTGFzdCwgMHgwMDAwMDAyMCkgU0VQ
QVJBVE9SIFwKKyAgICBGKFNDX1Njcm9sbEJhclNsaWRlciwgMHgwMDAwMDA0MCkgU0VQQVJBVE9S
IFwKKyAgICBGKFNDX1Njcm9sbEJhckdyb292ZSwgMHgwMDAwMDA4MCkKKworI2RlZmluZSBERUZJ
TkVfU1VCQ09OVFJPTChGLCBWYWx1ZSkgRgorCisgICAgZW51bSBTdWJDb250cm9sIHsKKyAgICAg
ICAgRk9SX0VBQ0hfU1VCQ09OVFJPTChERUZJTkVfU1VCQ09OVFJPTCwgQ09NTUEpCisgICAgfTsK
KworICAgIHZpcnR1YWwgflFTdHlsZUludGVyZmFjZSgpIHsgfQorCisgICAgdmlydHVhbCBRUmVj
dCBidXR0b25TdWJFbGVtZW50UmVjdChCdXR0b25TdWJFbGVtZW50IGJ1dHRvbkVsZW1lbnQsIFN0
YXRlLCBjb25zdCBRUmVjdCYgb3JpZ2luYWxSZWN0KSBjb25zdCA9IDA7CisKKyAgICB2aXJ0dWFs
IGludCBmaW5kRnJhbWVMaW5lV2lkdGgoKSBjb25zdCA9IDA7CisgICAgdmlydHVhbCBpbnQgc2lt
cGxlUGl4ZWxNZXRyaWMoUGl4ZWxNZXRyaWMsIFN0YXRlID0gU3RhdGVfTm9uZSwgUU9iamVjdCog
d2lkZ2V0ID0gMCkgY29uc3QgPSAwOworICAgIHZpcnR1YWwgaW50IGJ1dHRvbk1hcmdpbihTdGF0
ZSwgY29uc3QgUVJlY3QmIG9yaWdpbmFsUmVjdCkgY29uc3QgPSAwOworICAgIHZpcnR1YWwgaW50
IHNsaWRlckxlbmd0aChRdDo6T3JpZW50YXRpb24pIGNvbnN0ID0gMDsKKyAgICB2aXJ0dWFsIGlu
dCBzbGlkZXJUaGlja25lc3MoUXQ6Ok9yaWVudGF0aW9uKSBjb25zdCA9IDA7CisgICAgdmlydHVh
bCBpbnQgcHJvZ3Jlc3NCYXJDaHVua1dpZHRoKGNvbnN0IFFTaXplJikgY29uc3QgPSAwOworICAg
IHZpcnR1YWwgdm9pZCBnZXRCdXR0b25NZXRyaWNzKFFTdHJpbmcqIGJ1dHRvbkZvbnRGYW1pbHks
IGludCogYnV0dG9uRm9udFBpeGVsU2l6ZSkgY29uc3QgPSAwOworCisgICAgdmlydHVhbCBRU2l6
ZSBzaXplRnJvbUNvbnRlbnRzKENvbnRlbnRzVHlwZSwgU3RhdGUsIGNvbnN0IFFTaXplJiBjb250
ZW50c1NpemUpIGNvbnN0ID0gMDsKKworICAgIGVudW0gQnV0dG9uVHlwZSB7CisgICAgICAgIFB1
c2hCdXR0b24sCisgICAgICAgIFJhZGlvQnV0dG9uLAorICAgICAgICBDaGVja0JveAorICAgIH07
CisKKyAgICB2aXJ0dWFsIHZvaWQgcGFpbnRCdXR0b24oUVBhaW50ZXIqLCBCdXR0b25UeXBlLCBj
b25zdCBRU3R5bGVJbnRlcmZhY2VPcHRpb24mLCBRT2JqZWN0ICp3aWRnZXQpID0gMDsKKyAgICB2
aXJ0dWFsIHZvaWQgcGFpbnRUZXh0RmllbGQoUVBhaW50ZXIqLCBjb25zdCBRU3R5bGVJbnRlcmZh
Y2VPcHRpb24mLCBRT2JqZWN0KiB3aWRnZXRPYmopID0gMDsKKyAgICB2aXJ0dWFsIHZvaWQgcGFp
bnRDb21ib0JveChRUGFpbnRlciosIGNvbnN0IFFTdHlsZUludGVyZmFjZU9wdGlvbiYsIFFPYmpl
Y3QgKndpZGdldE9iaikgPSAwOworICAgIHZpcnR1YWwgdm9pZCBwYWludENvbWJvQm94QXJyb3co
UVBhaW50ZXIqLCBjb25zdCBRU3R5bGVJbnRlcmZhY2VPcHRpb24mLCBRT2JqZWN0ICp3aWRnZXRP
YmopID0gMDsKKworICAgIHZpcnR1YWwgdm9pZCBwYWludFNsaWRlclRyYWNrKFFQYWludGVyKiwg
Y29uc3QgUVN0eWxlSW50ZXJmYWNlT3B0aW9uJiwgUU9iamVjdCAqd2lkZ2V0T2JqKSA9IDA7Cisg
ICAgdmlydHVhbCB2b2lkIHBhaW50U2xpZGVyVGh1bWIoUVBhaW50ZXIqLCBjb25zdCBRU3R5bGVJ
bnRlcmZhY2VPcHRpb24mLCBRT2JqZWN0ICp3aWRnZXRPYmopID0gMDsKKyAgICB2aXJ0dWFsIHZv
aWQgcGFpbnRJbm5lclNwaW5CdXR0b24oUVBhaW50ZXIqLCBjb25zdCBRU3R5bGVJbnRlcmZhY2VP
cHRpb24mLCBib29sIHNwaW5Cb3hVcCwgUU9iamVjdCogd2lkZ2V0T2JqKSA9IDA7CisgICAgdmly
dHVhbCB2b2lkIHBhaW50UHJvZ3Jlc3NCYXIoUVBhaW50ZXIqLCBjb25zdCBRU3R5bGVJbnRlcmZh
Y2VPcHRpb24mLCBkb3VibGUgcHJvZ3Jlc3MsIGRvdWJsZSBhbmltYXRpb25Qcm9ncmVzcywgUU9i
amVjdCogd2lkZ2V0T2JqKSA9IDA7CisKKyAgICB2aXJ0dWFsIGludCBzY3JvbGxCYXJFeHRlbnQo
Ym9vbCBtaW5pKSA9IDA7CisgICAgdmlydHVhbCBib29sIHNjcm9sbEJhck1pZGRsZUNsaWNrQWJz
b2x1dGVQb3NpdGlvblN0eWxlSGludCgpIGNvbnN0ID0gMDsKKyAgICB2aXJ0dWFsIHZvaWQgcGFp
bnRTY3JvbGxDb3JuZXIoUVBhaW50ZXIqLCBjb25zdCBRUmVjdCYsIFFPYmplY3QqIHdpZGdldE9i
aikgPSAwOworCisgICAgdmlydHVhbCBTdWJDb250cm9sIGhpdFRlc3RTY3JvbGxCYXIoY29uc3Qg
UVN0eWxlSW50ZXJmYWNlT3B0aW9uJiwgY29uc3QgUVBvaW50JiBwb3MpID0gMDsKKyAgICB2aXJ0
dWFsIFFSZWN0IHNjcm9sbEJhclN1YkNvbnRyb2xSZWN0KGNvbnN0IFFTdHlsZUludGVyZmFjZU9w
dGlvbiYsIFN1YkNvbnRyb2wpID0gMDsKKyAgICB2aXJ0dWFsIHZvaWQgcGFpbnRTY3JvbGxCYXIo
UVBhaW50ZXIqLCBjb25zdCBRU3R5bGVJbnRlcmZhY2VPcHRpb24mLCBRT2JqZWN0KiB3aWRnZXRP
YmopID0gMDsKKworICAgIHZpcnR1YWwgUU9iamVjdCogd2lkZ2V0Rm9yUGFpbnRlcihRUGFpbnRl
ciopID0gMDsKKworICAgIHZpcnR1YWwgYm9vbCBpc1ZhbGlkKCkgY29uc3QgPSAwOworCisgICAg
c3RhdGljIFFTdHlsZSogc3R5bGVGb3JQYWdlKFBhZ2UqKTsKK307CisKK1FfREVDTEFSRV9PUEVS
QVRPUlNfRk9SX0ZMQUdTKFFTdHlsZUludGVyZmFjZTo6U3RhdGUpCisKK3N0cnVjdCBRU3R5bGVJ
bnRlcmZhY2VPcHRpb24geworICAgIFFTdHlsZUludGVyZmFjZU9wdGlvbigpCisgICAgICAgIDog
c3RhdGUoUVN0eWxlSW50ZXJmYWNlOjpTdGF0ZV9Ob25lKQorICAgICAgICAsIGRpcmVjdGlvbihR
dDo6TGF5b3V0RGlyZWN0aW9uQXV0bykKKyAgICB7CisgICAgICAgIHNsaWRlci5vcmllbnRhdGlv
biA9IFF0OjpIb3Jpem9udGFsOworICAgICAgICBzbGlkZXIudXBzaWRlRG93biA9IGZhbHNlOwor
ICAgICAgICBzbGlkZXIubWluaW11bSA9IDA7CisgICAgICAgIHNsaWRlci5tYXhpbXVtID0gMDsK
KyAgICAgICAgc2xpZGVyLnBvc2l0aW9uID0gMDsKKyAgICAgICAgc2xpZGVyLnZhbHVlID0gMDsK
KyAgICAgICAgc2xpZGVyLnNpbmdsZVN0ZXAgPSAwOworICAgICAgICBzbGlkZXIucGFnZVN0ZXAg
PSAwOworICAgICAgICBzbGlkZXIuYWN0aXZlU3ViQ29udHJvbHMgPSBRU3R5bGVJbnRlcmZhY2U6
OlNDX05vbmU7CisgICAgfQorCisgICAgUVN0eWxlSW50ZXJmYWNlOjpTdGF0ZSBzdGF0ZTsKKyAg
ICBRUmVjdCByZWN0OworICAgIFF0OjpMYXlvdXREaXJlY3Rpb24gZGlyZWN0aW9uOworICAgIFFQ
YWxldHRlIHBhbGV0dGU7CisKKyAgICAvLyBTbGlkZXIgZmVhdHVyZXMKKyAgICBzdHJ1Y3Qgewor
ICAgICAgICBRdDo6T3JpZW50YXRpb24gb3JpZW50YXRpb247CisgICAgICAgIGJvb2wgdXBzaWRl
RG93bjsKKyAgICAgICAgaW50IG1pbmltdW07CisgICAgICAgIGludCBtYXhpbXVtOworICAgICAg
ICBpbnQgcG9zaXRpb247CisgICAgICAgIGludCB2YWx1ZTsKKyAgICAgICAgaW50IHNpbmdsZVN0
ZXA7CisgICAgICAgIGludCBwYWdlU3RlcDsKKyAgICAgICAgUVN0eWxlSW50ZXJmYWNlOjpTdWJD
b250cm9sIGFjdGl2ZVN1YkNvbnRyb2xzOworICAgIH0gc2xpZGVyOworfTsKKworfQorCisjZW5k
aWYgLy8gUVN0eWxlSW50ZXJmYWNlX2gKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL3F0L1JlbmRlclRoZW1lUVN0eWxlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3F0
L1JlbmRlclRoZW1lUVN0eWxlLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi45YmJkNzA2OGQyYmNjN2M4MjZkNGE3
MzdiNDk1MDRhYTZjOGE5YmYxCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vcXQvUmVuZGVyVGhlbWVRU3R5bGUuY3BwCkBAIC0wLDAgKzEsNjIzIEBACisvKgorICog
VGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIFdlYktpdCBwcm9qZWN0LgorICoKKyAqIENvcHlyaWdo
dCAoQykgMjAwOC0yMDEyIE5va2lhIENvcnBvcmF0aW9uIGFuZC9vciBpdHMgc3Vic2lkaWFyeSgt
aWVzKQorICoKKyAqIENvcHlyaWdodCAoQykgMjAwNiBaYWNrIFJ1c2luIDx6YWNrQGtkZS5vcmc+
CisgKiAgICAgICAgICAgICAgIDIwMDYgRGlyayBNdWVsbGVyIDxtdWVsbGVyQGtkZS5vcmc+Cisg
KiAgICAgICAgICAgICAgIDIwMDYgTmlrb2xhcyBaaW1tZXJtYW5uIDx6aW1tZXJtYW5uQGtkZS5v
cmc+CisgKiBDb3B5cmlnaHQgKEMpIDIwMDggSG9sZ2VyIEhhbnMgUGV0ZXIgRnJleXRoZXIKKyAq
CisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNv
ZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRl
ciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNl
IGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAq
IHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIg
dmVyc2lvbi4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUg
dGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0
aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3Ig
RklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogTGlicmFy
eSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNo
b3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJs
aWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZ
SU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRp
b24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCisgKiBCb3N0b24sIE1B
IDAyMTEwLTEzMDEsIFVTQS4KKyAqCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1
ZGUgIlJlbmRlclRoZW1lUVN0eWxlLmgiCisKKyNpbmNsdWRlICJDU1NGb250U2VsZWN0b3IuaCIK
KyNpbmNsdWRlICJDU1NWYWx1ZUtleXdvcmRzLmgiCisjaW5jbHVkZSAiQ2hyb21lLmgiCisjaW5j
bHVkZSAiQ2hyb21lQ2xpZW50LmgiCisjaW5jbHVkZSAiQ29sb3IuaCIKKyNpbmNsdWRlICJEb2N1
bWVudC5oIgorI2luY2x1ZGUgIkZvbnQuaCIKKyNpbmNsdWRlICJGb250U2VsZWN0b3IuaCIKKyNp
bmNsdWRlICJHcmFwaGljc0NvbnRleHQuaCIKKyNpbmNsdWRlICJIVE1MSW5wdXRFbGVtZW50Lmgi
CisjaW5jbHVkZSAiSFRNTE5hbWVzLmgiCisjaW5jbHVkZSAiTG9jYWxpemVkU3RyaW5ncy5oIgor
I2luY2x1ZGUgIk5vdEltcGxlbWVudGVkLmgiCisjaW5jbHVkZSAiUGFnZS5oIgorI2luY2x1ZGUg
IlBhaW50SW5mby5oIgorI2luY2x1ZGUgIlFXZWJQYWdlQ2xpZW50LmgiCisjaW5jbHVkZSAiUmVu
ZGVyQm94LmgiCisjaWYgRU5BQkxFKFBST0dSRVNTX0VMRU1FTlQpCisjaW5jbHVkZSAiUmVuZGVy
UHJvZ3Jlc3MuaCIKKyNlbmRpZgorI2luY2x1ZGUgIlJlbmRlclNsaWRlci5oIgorI2luY2x1ZGUg
IlNjcm9sbGJhclRoZW1lUVN0eWxlLmgiCisjaW5jbHVkZSAiU2xpZGVyVGh1bWJFbGVtZW50Lmgi
CisjaW5jbHVkZSAiU3R5bGVSZXNvbHZlci5oIgorI2luY2x1ZGUgIlVzZXJBZ2VudFN0eWxlU2hl
ZXRzLmgiCisKKyNpbmNsdWRlIDxRUGFpbnRlcj4KKworbmFtZXNwYWNlIFdlYkNvcmUgeworCit1
c2luZyBuYW1lc3BhY2UgSFRNTE5hbWVzOworCitRU2hhcmVkUG9pbnRlcjxTdHlsZVBhaW50ZXI+
IFJlbmRlclRoZW1lUVN0eWxlOjpnZXRTdHlsZVBhaW50ZXIoY29uc3QgUGFpbnRJbmZvJiBwYWlu
dEluZm8pCit7CisgICAgcmV0dXJuIFFTaGFyZWRQb2ludGVyPFN0eWxlUGFpbnRlcj4obmV3IFN0
eWxlUGFpbnRlclFTdHlsZSh0aGlzLCBwYWludEluZm8sIC8qUmVuZGVyT2JqZWN0Ki8wKSk7Cit9
CisKK1N0eWxlUGFpbnRlclFTdHlsZTo6U3R5bGVQYWludGVyUVN0eWxlKFJlbmRlclRoZW1lUVN0
eWxlKiB0aGVtZSwgY29uc3QgUGFpbnRJbmZvJiBwYWludEluZm8sIFJlbmRlck9iamVjdCogcmVu
ZGVyT2JqZWN0KQorICAgIDogU3R5bGVQYWludGVyKHRoZW1lLCBwYWludEluZm8pCisgICAgLCBz
dHlsZUludGVyZmFjZSh0aGVtZS0+c3R5bGVJbnRlcmZhY2UoKSkKKyAgICAsIGFwcGVhcmFuY2Uo
Tm9Db250cm9sUGFydCkKK3sKKyAgICBpbml0KHBhaW50SW5mby5jb250ZXh0ID8gcGFpbnRJbmZv
LmNvbnRleHQgOiAwKTsKKyAgICBpZiAocmVuZGVyT2JqZWN0KQorICAgICAgICBhcHBlYXJhbmNl
ID0gdGhlbWUtPmluaXRpYWxpemVDb21tb25RU3R5bGVPcHRpb25zKHN0eWxlT3B0aW9uLCByZW5k
ZXJPYmplY3QpOworfQorCitTdHlsZVBhaW50ZXJRU3R5bGU6OlN0eWxlUGFpbnRlclFTdHlsZShT
Y3JvbGxiYXJUaGVtZVFTdHlsZSogdGhlbWUsIEdyYXBoaWNzQ29udGV4dCogY29udGV4dCkKKyAg
ICA6IFN0eWxlUGFpbnRlcigpCisgICAgLCBzdHlsZUludGVyZmFjZSh0aGVtZS0+c3R5bGVJbnRl
cmZhY2UoKSkKKyAgICAsIGFwcGVhcmFuY2UoTm9Db250cm9sUGFydCkKK3sKKyAgICBpbml0KGNv
bnRleHQpOworfQorCit2b2lkIFN0eWxlUGFpbnRlclFTdHlsZTo6aW5pdChHcmFwaGljc0NvbnRl
eHQqIGNvbnRleHQpCit7CisgICAgcGFpbnRlciA9IHN0YXRpY19jYXN0PFFQYWludGVyKj4oY29u
dGV4dC0+cGxhdGZvcm1Db250ZXh0KCkpOworICAgIHdpZGdldCA9IHN0eWxlSW50ZXJmYWNlLT53
aWRnZXRGb3JQYWludGVyKHBhaW50ZXIpOworCisgICAgaWYgKHdpZGdldCkgeworICAgICAgICBz
dHlsZU9wdGlvbi5wYWxldHRlID0gd2lkZ2V0LT5wcm9wZXJ0eSgicGFsZXR0ZSIpLnZhbHVlPFFQ
YWxldHRlPigpOworICAgICAgICBzdHlsZU9wdGlvbi5yZWN0ID0gd2lkZ2V0LT5wcm9wZXJ0eSgi
cmVjdCIpLnZhbHVlPFFSZWN0PigpOworICAgICAgICBzdHlsZU9wdGlvbi5kaXJlY3Rpb24gPSBz
dGF0aWNfY2FzdDxRdDo6TGF5b3V0RGlyZWN0aW9uPih3aWRnZXQtPnByb3BlcnR5KCJsYXlvdXRE
aXJlY3Rpb24iKS50b0ludCgpKTsKKyAgICB9CisKKyAgICBTdHlsZVBhaW50ZXI6OmluaXQoY29u
dGV4dCk7Cit9CisKK1Bhc3NSZWZQdHI8UmVuZGVyVGhlbWU+IFJlbmRlclRoZW1lUVN0eWxlOjpj
cmVhdGUoUGFnZSogcGFnZSkKK3sKKyAgICByZXR1cm4gYWRvcHRSZWYobmV3IFJlbmRlclRoZW1l
UVN0eWxlKHBhZ2UpKTsKK30KKworc3RhdGljIFF0U3R5bGVGYWN0b3J5RnVuY3Rpb24gc3R5bGVG
YWN0b3J5RnVuY3Rpb247CisKK3ZvaWQgUmVuZGVyVGhlbWVRU3R5bGU6OnNldFN0eWxlRmFjdG9y
eUZ1bmN0aW9uKFF0U3R5bGVGYWN0b3J5RnVuY3Rpb24gZnVuY3Rpb24pCit7CisgICAgc3R5bGVG
YWN0b3J5RnVuY3Rpb24gPSBmdW5jdGlvbjsKK30KKworUXRTdHlsZUZhY3RvcnlGdW5jdGlvbiBS
ZW5kZXJUaGVtZVFTdHlsZTo6c3R5bGVGYWN0b3J5KCkKK3sKKyAgICByZXR1cm4gc3R5bGVGYWN0
b3J5RnVuY3Rpb247Cit9CisKK1JlbmRlclRoZW1lUVN0eWxlOjpSZW5kZXJUaGVtZVFTdHlsZShQ
YWdlKiBwYWdlKQorICAgIDogUmVuZGVyVGhlbWVRdChwYWdlKQorICAgICwgbV9zdHlsZUludGVy
ZmFjZShhZG9wdFB0cihzdHlsZUZhY3RvcnlGdW5jdGlvbihwYWdlKSkpCit7CisgICAgaW50IGJ1
dHRvblBpeGVsU2l6ZSA9IDA7CisgICAgbV9zdHlsZUludGVyZmFjZS0+Z2V0QnV0dG9uTWV0cmlj
cygmbV9idXR0b25Gb250RmFtaWx5LCAmYnV0dG9uUGl4ZWxTaXplKTsKKyNpZmRlZiBRX1dTX01B
QworICAgIG1fYnV0dG9uRm9udFBpeGVsU2l6ZSA9IGJ1dHRvblBpeGVsU2l6ZTsKKyNlbmRpZgor
fQorCitSZW5kZXJUaGVtZVFTdHlsZTo6flJlbmRlclRoZW1lUVN0eWxlKCkKK3sKK30KKwordm9p
ZCBSZW5kZXJUaGVtZVFTdHlsZTo6c2V0UGFsZXR0ZUZyb21QYWdlQ2xpZW50SWZFeGlzdHMoUVBh
bGV0dGUmIHBhbGV0dGUpIGNvbnN0Cit7CisgICAgaWYgKCFtX3BhZ2UpCisgICAgICAgIHJldHVy
bjsKKworICAgIEFTU0VSVChtX3BhZ2UtPmNocm9tZSgpKTsKKyAgICBDaHJvbWVDbGllbnQqIGNo
cm9tZUNsaWVudCA9IG1fcGFnZS0+Y2hyb21lKCktPmNsaWVudCgpOworICAgIGlmICghY2hyb21l
Q2xpZW50KQorICAgICAgICByZXR1cm47CisKKyAgICBpZiAoUVdlYlBhZ2VDbGllbnQqIHBhZ2VD
bGllbnQgPSBjaHJvbWVDbGllbnQtPnBsYXRmb3JtUGFnZUNsaWVudCgpKQorICAgICAgICBwYWxl
dHRlID0gcGFnZUNsaWVudC0+cGFsZXR0ZSgpOworfQorCitRUmVjdCBSZW5kZXJUaGVtZVFTdHls
ZTo6aW5mbGF0ZUJ1dHRvblJlY3QoY29uc3QgUVJlY3QmIG9yaWdpbmFsUmVjdCkgY29uc3QKK3sK
KyAgICBRUmVjdCBsYXlvdXRSZWN0ID0gbV9zdHlsZUludGVyZmFjZS0+YnV0dG9uU3ViRWxlbWVu
dFJlY3QoUVN0eWxlSW50ZXJmYWNlOjpQdXNoQnV0dG9uTGF5b3V0SXRlbSwgUVN0eWxlSW50ZXJm
YWNlOjpTdGF0ZV9TbWFsbCwgb3JpZ2luYWxSZWN0KTsKKyAgICBpZiAoIWxheW91dFJlY3QuaXNO
dWxsKCkpIHsKKyAgICAgICAgaW50IHBhZGRpbmdMZWZ0ID0gbGF5b3V0UmVjdC5sZWZ0KCkgLSBv
cmlnaW5hbFJlY3QubGVmdCgpOworICAgICAgICBpbnQgcGFkZGluZ1JpZ2h0ID0gb3JpZ2luYWxS
ZWN0LnJpZ2h0KCkgLSBsYXlvdXRSZWN0LnJpZ2h0KCk7CisgICAgICAgIGludCBwYWRkaW5nVG9w
ID0gbGF5b3V0UmVjdC50b3AoKSAtIG9yaWdpbmFsUmVjdC50b3AoKTsKKyAgICAgICAgaW50IHBh
ZGRpbmdCb3R0b20gPSBvcmlnaW5hbFJlY3QuYm90dG9tKCkgLSBsYXlvdXRSZWN0LmJvdHRvbSgp
OworCisgICAgICAgIHJldHVybiBvcmlnaW5hbFJlY3QuYWRqdXN0ZWQoLXBhZGRpbmdMZWZ0LCAt
cGFkZGluZ1RvcCwgcGFkZGluZ1JpZ2h0LCBwYWRkaW5nQm90dG9tKTsKKyAgICB9CisgICAgcmV0
dXJuIG9yaWdpbmFsUmVjdDsKK30KKwordm9pZCBSZW5kZXJUaGVtZVFTdHlsZTo6Y29tcHV0ZVNp
emVCYXNlZE9uU3R5bGUoUmVuZGVyU3R5bGUqIHJlbmRlclN0eWxlKSBjb25zdAoreworICAgIFFT
aXplIHNpemUoMCwgMCk7CisgICAgY29uc3QgUUZvbnRNZXRyaWNzIGZtKHJlbmRlclN0eWxlLT5m
b250KCkuc3ludGhldGljRm9udCgpKTsKKworICAgIHN3aXRjaCAocmVuZGVyU3R5bGUtPmFwcGVh
cmFuY2UoKSkgeworICAgIGNhc2UgVGV4dEFyZWFQYXJ0OgorICAgIGNhc2UgU2VhcmNoRmllbGRQ
YXJ0OgorICAgIGNhc2UgVGV4dEZpZWxkUGFydDogeworICAgICAgICBpbnQgcGFkZGluZyA9IG1f
c3R5bGVJbnRlcmZhY2UtPmZpbmRGcmFtZUxpbmVXaWR0aCgpOworICAgICAgICByZW5kZXJTdHls
ZS0+c2V0UGFkZGluZ0xlZnQoTGVuZ3RoKHBhZGRpbmcsIEZpeGVkKSk7CisgICAgICAgIHJlbmRl
clN0eWxlLT5zZXRQYWRkaW5nUmlnaHQoTGVuZ3RoKHBhZGRpbmcsIEZpeGVkKSk7CisgICAgICAg
IHJlbmRlclN0eWxlLT5zZXRQYWRkaW5nVG9wKExlbmd0aChwYWRkaW5nLCBGaXhlZCkpOworICAg
ICAgICByZW5kZXJTdHlsZS0+c2V0UGFkZGluZ0JvdHRvbShMZW5ndGgocGFkZGluZywgRml4ZWQp
KTsKKyAgICAgICAgYnJlYWs7CisgICAgfQorICAgIGRlZmF1bHQ6CisgICAgICAgIGJyZWFrOwor
ICAgIH0KKyAgICAvLyBJZiB0aGUgd2lkdGggYW5kIGhlaWdodCBhcmUgYm90aCBzcGVjaWZpZWQs
IHRoZW4gd2UgaGF2ZSBub3RoaW5nIHRvIGRvLgorICAgIGlmICghcmVuZGVyU3R5bGUtPndpZHRo
KCkuaXNJbnRyaW5zaWNPckF1dG8oKSAmJiAhcmVuZGVyU3R5bGUtPmhlaWdodCgpLmlzQXV0bygp
KQorICAgICAgICByZXR1cm47CisKKyAgICBzd2l0Y2ggKHJlbmRlclN0eWxlLT5hcHBlYXJhbmNl
KCkpIHsKKyAgICBjYXNlIENoZWNrYm94UGFydDogeworICAgICAgICBpbnQgY2hlY2tCb3hXaWR0
aCA9IG1fc3R5bGVJbnRlcmZhY2UtPnNpbXBsZVBpeGVsTWV0cmljKFFTdHlsZUludGVyZmFjZTo6
UE1fSW5kaWNhdG9yV2lkdGgsIFFTdHlsZUludGVyZmFjZTo6U3RhdGVfU21hbGwpOworICAgICAg
ICBjaGVja0JveFdpZHRoICo9IHJlbmRlclN0eWxlLT5lZmZlY3RpdmVab29tKCk7CisgICAgICAg
IHNpemUgPSBRU2l6ZShjaGVja0JveFdpZHRoLCBjaGVja0JveFdpZHRoKTsKKyAgICAgICAgYnJl
YWs7CisgICAgfQorICAgIGNhc2UgUmFkaW9QYXJ0OiB7CisgICAgICAgIGludCByYWRpb1dpZHRo
ID0gbV9zdHlsZUludGVyZmFjZS0+c2ltcGxlUGl4ZWxNZXRyaWMoUVN0eWxlSW50ZXJmYWNlOjpQ
TV9FeGNsdXNpdmVJbmRpY2F0b3JXaWR0aCwgUVN0eWxlSW50ZXJmYWNlOjpTdGF0ZV9TbWFsbCk7
CisgICAgICAgIHJhZGlvV2lkdGggKj0gcmVuZGVyU3R5bGUtPmVmZmVjdGl2ZVpvb20oKTsKKyAg
ICAgICAgc2l6ZSA9IFFTaXplKHJhZGlvV2lkdGgsIHJhZGlvV2lkdGgpOworICAgICAgICBicmVh
azsKKyAgICB9CisgICAgY2FzZSBQdXNoQnV0dG9uUGFydDoKKyAgICBjYXNlIEJ1dHRvblBhcnQ6
IHsKKyAgICAgICAgUVNpemUgY29udGVudFNpemUgPSBmbS5zaXplKFF0OjpUZXh0U2hvd01uZW1v
bmljLCBRU3RyaW5nOjpmcm9tTGF0aW4xKCJYIikpOworICAgICAgICBRU2l6ZSBwdXNoQnV0dG9u
U2l6ZSA9IG1fc3R5bGVJbnRlcmZhY2UtPnNpemVGcm9tQ29udGVudHMoUVN0eWxlSW50ZXJmYWNl
OjpDVF9QdXNoQnV0dG9uLCBRU3R5bGVJbnRlcmZhY2U6OlN0YXRlX1NtYWxsLCBjb250ZW50U2l6
ZSk7CisgICAgICAgIFFSZWN0IGxheW91dFJlY3QgPSBtX3N0eWxlSW50ZXJmYWNlLT5idXR0b25T
dWJFbGVtZW50UmVjdChRU3R5bGVJbnRlcmZhY2U6OlB1c2hCdXR0b25MYXlvdXRJdGVtLCBRU3R5
bGVJbnRlcmZhY2U6OlN0YXRlX1NtYWxsLCBRUmVjdCgwLCAwLCBwdXNoQnV0dG9uU2l6ZS53aWR0
aCgpLCBwdXNoQnV0dG9uU2l6ZS5oZWlnaHQoKSkpOworCisgICAgICAgIC8vIElmIHRoZSBzdHls
ZSBzdXBwb3J0cyBsYXlvdXQgcmVjdHMgd2UgdXNlIHRoYXQsIGFuZCAgY29tcGVuc2F0ZSBhY2Nv
cmRpbmdseQorICAgICAgICAvLyBpbiBwYWludEJ1dHRvbigpIGJlbG93LgorICAgICAgICBpZiAo
IWxheW91dFJlY3QuaXNOdWxsKCkpCisgICAgICAgICAgICBzaXplLnNldEhlaWdodChsYXlvdXRS
ZWN0LmhlaWdodCgpKTsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgc2l6ZS5zZXRIZWlnaHQo
cHVzaEJ1dHRvblNpemUuaGVpZ2h0KCkpOworCisgICAgICAgIGJyZWFrOworICAgIH0KKyAgICBj
YXNlIE1lbnVsaXN0UGFydDogeworICAgICAgICBpbnQgY29udGVudEhlaWdodCA9IHFNYXgoZm0u
bGluZVNwYWNpbmcoKSwgMTQpICsgMjsKKyAgICAgICAgUVNpemUgbWVudUxpc3RTaXplID0gbV9z
dHlsZUludGVyZmFjZS0+c2l6ZUZyb21Db250ZW50cyhRU3R5bGVJbnRlcmZhY2U6OkNUX0NvbWJv
Qm94LCBRU3R5bGVJbnRlcmZhY2U6OlN0YXRlX1NtYWxsLCBRU2l6ZSgwLCBjb250ZW50SGVpZ2h0
KSk7CisgICAgICAgIHNpemUuc2V0SGVpZ2h0KG1lbnVMaXN0U2l6ZS5oZWlnaHQoKSk7CisgICAg
ICAgIGJyZWFrOworICAgIH0KKyAgICBkZWZhdWx0OgorICAgICAgICBicmVhazsKKyAgICB9CisK
KyAgICAvLyBGSVhNRTogQ2hlY2sgaXMgZmxhd2VkLCBzaW5jZSBpdCBkb2Vzbid0IHRha2UgbWlu
LXdpZHRoL21heC13aWR0aCBpbnRvIGFjY291bnQuCisgICAgaWYgKHJlbmRlclN0eWxlLT53aWR0
aCgpLmlzSW50cmluc2ljT3JBdXRvKCkgJiYgc2l6ZS53aWR0aCgpID4gMCkKKyAgICAgICAgcmVu
ZGVyU3R5bGUtPnNldE1pbldpZHRoKExlbmd0aChzaXplLndpZHRoKCksIEZpeGVkKSk7CisgICAg
aWYgKHJlbmRlclN0eWxlLT5oZWlnaHQoKS5pc0F1dG8oKSAmJiBzaXplLmhlaWdodCgpID4gMCkK
KyAgICAgICAgcmVuZGVyU3R5bGUtPnNldE1pbkhlaWdodChMZW5ndGgoc2l6ZS5oZWlnaHQoKSwg
Rml4ZWQpKTsKK30KKworCisKK3ZvaWQgUmVuZGVyVGhlbWVRU3R5bGU6OmFkanVzdEJ1dHRvblN0
eWxlKFN0eWxlUmVzb2x2ZXIqIHN0eWxlUmVzb2x2ZXIsIFJlbmRlclN0eWxlKiBzdHlsZSwgRWxl
bWVudCopIGNvbnN0Cit7CisgICAgLy8gRGl0Y2ggdGhlIGJvcmRlci4KKyAgICBzdHlsZS0+cmVz
ZXRCb3JkZXIoKTsKKworI2lmZGVmIFFfV1NfTUFDCisgICAgaWYgKHN0eWxlLT5hcHBlYXJhbmNl
KCkgPT0gUHVzaEJ1dHRvblBhcnQpIHsKKyAgICAgICAgLy8gVGhlIE1hYyBwb3J0cyBpZ25vcmUg
dGhlIHNwZWNpZmllZCBoZWlnaHQgZm9yIDxpbnB1dCB0eXBlPSJidXR0b24iPiBlbGVtZW50cwor
ICAgICAgICAvLyB1bmxlc3MgYSBib3JkZXIgYW5kL29yIGJhY2tncm91bmQgQ1NTIHByb3BlcnR5
IGlzIGFsc28gc3BlY2lmaWVkLgorICAgICAgICBzdHlsZS0+c2V0SGVpZ2h0KExlbmd0aChBdXRv
KSk7CisgICAgfQorI2VuZGlmCisKKyAgICBGb250RGVzY3JpcHRpb24gZm9udERlc2NyaXB0aW9u
ID0gc3R5bGUtPmZvbnREZXNjcmlwdGlvbigpOworICAgIGZvbnREZXNjcmlwdGlvbi5zZXRJc0Fi
c29sdXRlU2l6ZSh0cnVlKTsKKworI2lmZGVmIFFfV1NfTUFDIC8vIFVzZSBmaXhlZCBmb250IHNp
emUgYW5kIGZhbWlseSBvbiBNYWMgKGxpa2UgU2FmYXJpIGRvZXMpCisgICAgZm9udERlc2NyaXB0
aW9uLnNldFNwZWNpZmllZFNpemUobV9idXR0b25Gb250UGl4ZWxTaXplKTsKKyAgICBmb250RGVz
Y3JpcHRpb24uc2V0Q29tcHV0ZWRTaXplKG1fYnV0dG9uRm9udFBpeGVsU2l6ZSk7CisjZWxzZQor
ICAgIGZvbnREZXNjcmlwdGlvbi5zZXRTcGVjaWZpZWRTaXplKHN0eWxlLT5mb250U2l6ZSgpKTsK
KyAgICBmb250RGVzY3JpcHRpb24uc2V0Q29tcHV0ZWRTaXplKHN0eWxlLT5mb250U2l6ZSgpKTsK
KyNlbmRpZgorCisgICAgRm9udEZhbWlseSBmb250RmFtaWx5OworICAgIGZvbnRGYW1pbHkuc2V0
RmFtaWx5KG1fYnV0dG9uRm9udEZhbWlseSk7CisgICAgZm9udERlc2NyaXB0aW9uLnNldEZhbWls
eShmb250RmFtaWx5KTsKKyAgICBzdHlsZS0+c2V0Rm9udERlc2NyaXB0aW9uKGZvbnREZXNjcmlw
dGlvbik7CisgICAgc3R5bGUtPmZvbnQoKS51cGRhdGUoc3R5bGVSZXNvbHZlci0+Zm9udFNlbGVj
dG9yKCkpOworICAgIHN0eWxlLT5zZXRMaW5lSGVpZ2h0KFJlbmRlclN0eWxlOjppbml0aWFsTGlu
ZUhlaWdodCgpKTsKKyAgICBzZXRCdXR0b25TaXplKHN0eWxlKTsKKyAgICBzZXRCdXR0b25QYWRk
aW5nKHN0eWxlKTsKK30KKwordm9pZCBSZW5kZXJUaGVtZVFTdHlsZTo6c2V0QnV0dG9uUGFkZGlu
ZyhSZW5kZXJTdHlsZSogc3R5bGUpIGNvbnN0Cit7CisgICAgLy8gRmFrZSBhIGJ1dHRvbiByZWN0
IGhlcmUsIHNpbmNlIHdlJ3JlIGp1c3QgY29tcHV0aW5nIGRlbHRhcworICAgIFFSZWN0IG9yaWdp
bmFsUmVjdCA9IFFSZWN0KDAsIDAsIDEwMCwgMzApOworCisgICAgLy8gRGVmYXVsdCBwYWRkaW5n
IGlzIGJhc2VkIG9uIHRoZSBidXR0b24gbWFyZ2luIHBpeGVsIG1ldHJpYworICAgIGludCBidXR0
b25NYXJnaW4gPSBtX3N0eWxlSW50ZXJmYWNlLT5idXR0b25NYXJnaW4oUVN0eWxlSW50ZXJmYWNl
OjpTdGF0ZV9TbWFsbCwgb3JpZ2luYWxSZWN0KTsKKyAgICBpbnQgcGFkZGluZ0xlZnQgPSBidXR0
b25NYXJnaW47CisgICAgaW50IHBhZGRpbmdSaWdodCA9IGJ1dHRvbk1hcmdpbjsKKyAgICBpbnQg
cGFkZGluZ1RvcCA9IGJ1dHRvbk1hcmdpbjsKKyAgICBpbnQgcGFkZGluZ0JvdHRvbSA9IGJ1dHRv
bk1hcmdpbjsKKworICAgIC8vIFRoZW4gY2hlY2sgaWYgdGhlIHN0eWxlIHVzZXMgbGF5b3V0IG1h
cmdpbnMKKyAgICBRUmVjdCBsYXlvdXRSZWN0ID0gbV9zdHlsZUludGVyZmFjZS0+YnV0dG9uU3Vi
RWxlbWVudFJlY3QoUVN0eWxlSW50ZXJmYWNlOjpQdXNoQnV0dG9uTGF5b3V0SXRlbSwgUVN0eWxl
SW50ZXJmYWNlOjpTdGF0ZV9TbWFsbCwgb3JpZ2luYWxSZWN0KTsKKyAgICBpZiAoIWxheW91dFJl
Y3QuaXNOdWxsKCkpIHsKKyAgICAgICAgUVJlY3QgY29udGVudHNSZWN0ID0gbV9zdHlsZUludGVy
ZmFjZS0+YnV0dG9uU3ViRWxlbWVudFJlY3QoUVN0eWxlSW50ZXJmYWNlOjpQdXNoQnV0dG9uQ29u
dGVudHMsIFFTdHlsZUludGVyZmFjZTo6U3RhdGVfU21hbGwsIG9yaWdpbmFsUmVjdCk7CisgICAg
ICAgIHBhZGRpbmdMZWZ0ID0gY29udGVudHNSZWN0LmxlZnQoKSAtIGxheW91dFJlY3QubGVmdCgp
OworICAgICAgICBwYWRkaW5nUmlnaHQgPSBsYXlvdXRSZWN0LnJpZ2h0KCkgLSBjb250ZW50c1Jl
Y3QucmlnaHQoKTsKKyAgICAgICAgcGFkZGluZ1RvcCA9IGNvbnRlbnRzUmVjdC50b3AoKSAtIGxh
eW91dFJlY3QudG9wKCk7CisKKyAgICAgICAgLy8gQ2FuJ3QgdXNlIHRoaXMgcmlnaHQgbm93IGJl
Y2F1c2Ugd2UgZG9uJ3QgaGF2ZSB0aGUgYmFzZWxpbmUgdG8gY29tcGVuc2F0ZQorICAgICAgICAv
LyBwYWRkaW5nQm90dG9tID0gbGF5b3V0UmVjdC5ib3R0b20oKSAtIGNvbnRlbnRzUmVjdC5ib3R0
b20oKTsKKyAgICB9CisgICAgc3R5bGUtPnNldFBhZGRpbmdMZWZ0KExlbmd0aChwYWRkaW5nTGVm
dCwgRml4ZWQpKTsKKyAgICBzdHlsZS0+c2V0UGFkZGluZ1JpZ2h0KExlbmd0aChwYWRkaW5nUmln
aHQsIEZpeGVkKSk7CisgICAgc3R5bGUtPnNldFBhZGRpbmdUb3AoTGVuZ3RoKHBhZGRpbmdUb3As
IEZpeGVkKSk7CisgICAgc3R5bGUtPnNldFBhZGRpbmdCb3R0b20oTGVuZ3RoKHBhZGRpbmdCb3R0
b20sIEZpeGVkKSk7Cit9CisKK2Jvb2wgUmVuZGVyVGhlbWVRU3R5bGU6OnBhaW50QnV0dG9uKFJl
bmRlck9iamVjdCogbywgY29uc3QgUGFpbnRJbmZvJiBpLCBjb25zdCBJbnRSZWN0JiByKQorewor
ICAgIFN0eWxlUGFpbnRlclFTdHlsZSBwKHRoaXMsIGksIG8pOworICAgIGlmICghcC5pc1ZhbGlk
KCkpCisgICAgICAgIHJldHVybiB0cnVlOworCisgICAgcC5zdHlsZU9wdGlvbi5yZWN0ID0gcjsK
KyAgICBwLnN0eWxlT3B0aW9uLnN0YXRlIHw9IFFTdHlsZUludGVyZmFjZTo6U3RhdGVfU21hbGw7
CisKKyAgICBpZiAocC5hcHBlYXJhbmNlID09IFB1c2hCdXR0b25QYXJ0IHx8IHAuYXBwZWFyYW5j
ZSA9PSBCdXR0b25QYXJ0KSB7CisgICAgICAgIHAuc3R5bGVPcHRpb24ucmVjdCA9IGluZmxhdGVC
dXR0b25SZWN0KHAuc3R5bGVPcHRpb24ucmVjdCk7CisgICAgICAgIHAucGFpbnRCdXR0b24oUVN0
eWxlSW50ZXJmYWNlOjpQdXNoQnV0dG9uKTsKKyAgICB9IGVsc2UgaWYgKHAuYXBwZWFyYW5jZSA9
PSBSYWRpb1BhcnQpCisgICAgICAgIHAucGFpbnRCdXR0b24oUVN0eWxlSW50ZXJmYWNlOjpSYWRp
b0J1dHRvbik7CisgICAgZWxzZSBpZiAocC5hcHBlYXJhbmNlID09IENoZWNrYm94UGFydCkKKyAg
ICAgICAgcC5wYWludEJ1dHRvbihRU3R5bGVJbnRlcmZhY2U6OkNoZWNrQm94KTsKKworICAgIHJl
dHVybiBmYWxzZTsKK30KKworYm9vbCBSZW5kZXJUaGVtZVFTdHlsZTo6cGFpbnRUZXh0RmllbGQo
UmVuZGVyT2JqZWN0KiBvLCBjb25zdCBQYWludEluZm8mIGksIGNvbnN0IEludFJlY3QmIHIpCit7
CisgICAgU3R5bGVQYWludGVyUVN0eWxlIHAodGhpcywgaSwgbyk7CisgICAgaWYgKCFwLmlzVmFs
aWQoKSkKKyAgICAgICAgcmV0dXJuIHRydWU7CisKKyAgICBwLnN0eWxlT3B0aW9uLnJlY3QgPSBy
OworICAgIHAuc3R5bGVPcHRpb24uc3RhdGUgfD0gUVN0eWxlSW50ZXJmYWNlOjpTdGF0ZV9TdW5r
ZW47CisKKyAgICAvLyBHZXQgdGhlIGNvcnJlY3QgdGhlbWUgZGF0YSBmb3IgYSB0ZXh0IGZpZWxk
CisgICAgaWYgKHAuYXBwZWFyYW5jZSAhPSBUZXh0RmllbGRQYXJ0CisgICAgICAgICYmIHAuYXBw
ZWFyYW5jZSAhPSBTZWFyY2hGaWVsZFBhcnQKKyAgICAgICAgJiYgcC5hcHBlYXJhbmNlICE9IFRl
eHRBcmVhUGFydAorICAgICAgICAmJiBwLmFwcGVhcmFuY2UgIT0gTGlzdGJveFBhcnQpCisgICAg
ICAgIHJldHVybiB0cnVlOworCisgICAgLy8gTm93IHBhaW50IHRoZSB0ZXh0IGZpZWxkLgorICAg
IHAucGFpbnRUZXh0RmllbGQoKTsKKyAgICByZXR1cm4gZmFsc2U7Cit9CisKK3ZvaWQgUmVuZGVy
VGhlbWVRU3R5bGU6OmFkanVzdFRleHRBcmVhU3R5bGUoU3R5bGVSZXNvbHZlciogc3R5bGVSZXNv
bHZlciwgUmVuZGVyU3R5bGUqIHN0eWxlLCBFbGVtZW50KiBlbGVtZW50KSBjb25zdAoreworICAg
IGFkanVzdFRleHRGaWVsZFN0eWxlKHN0eWxlUmVzb2x2ZXIsIHN0eWxlLCBlbGVtZW50KTsKK30K
KworYm9vbCBSZW5kZXJUaGVtZVFTdHlsZTo6cGFpbnRUZXh0QXJlYShSZW5kZXJPYmplY3QqIG8s
IGNvbnN0IFBhaW50SW5mbyYgaSwgY29uc3QgSW50UmVjdCYgcikKK3sKKyAgICByZXR1cm4gcGFp
bnRUZXh0RmllbGQobywgaSwgcik7Cit9CisKK3ZvaWQgUmVuZGVyVGhlbWVRU3R5bGU6OnNldFBv
cHVwUGFkZGluZyhSZW5kZXJTdHlsZSogc3R5bGUpIGNvbnN0Cit7CisgICAgY29uc3QgaW50IHBh
ZGRpbmdMZWZ0ID0gNDsKKyAgICBjb25zdCBpbnQgcGFkZGluZ1JpZ2h0ID0gc3R5bGUtPndpZHRo
KCkuaXNGaXhlZCgpIHx8IHN0eWxlLT53aWR0aCgpLmlzUGVyY2VudCgpID8gNSA6IDg7CisKKyAg
ICBzdHlsZS0+c2V0UGFkZGluZ0xlZnQoTGVuZ3RoKHBhZGRpbmdMZWZ0LCBGaXhlZCkpOworCisg
ICAgaW50IHcgPSBtX3N0eWxlSW50ZXJmYWNlLT5zaW1wbGVQaXhlbE1ldHJpYyhRU3R5bGVJbnRl
cmZhY2U6OlBNX0J1dHRvbkljb25TaXplKTsKKyAgICBzdHlsZS0+c2V0UGFkZGluZ1JpZ2h0KExl
bmd0aChwYWRkaW5nUmlnaHQgKyB3LCBGaXhlZCkpOworCisgICAgc3R5bGUtPnNldFBhZGRpbmdU
b3AoTGVuZ3RoKDIsIEZpeGVkKSk7CisgICAgc3R5bGUtPnNldFBhZGRpbmdCb3R0b20oTGVuZ3Ro
KDIsIEZpeGVkKSk7Cit9CisKK1FQYWxldHRlIFJlbmRlclRoZW1lUVN0eWxlOjpjb2xvclBhbGV0
dGUoKSBjb25zdAoreworICAgIFFQYWxldHRlIHBhbGV0dGUgPSBSZW5kZXJUaGVtZVF0Ojpjb2xv
clBhbGV0dGUoKTsKKyAgICBzZXRQYWxldHRlRnJvbVBhZ2VDbGllbnRJZkV4aXN0cyhwYWxldHRl
KTsKKyAgICByZXR1cm4gcGFsZXR0ZTsKK30KKworYm9vbCBSZW5kZXJUaGVtZVFTdHlsZTo6cGFp
bnRNZW51TGlzdChSZW5kZXJPYmplY3QqIG8sIGNvbnN0IFBhaW50SW5mbyYgaSwgY29uc3QgSW50
UmVjdCYgcikKK3sKKyAgICBTdHlsZVBhaW50ZXJRU3R5bGUgcCh0aGlzLCBpLCBvKTsKKyAgICBp
ZiAoIXAuaXNWYWxpZCgpKQorICAgICAgICByZXR1cm4gdHJ1ZTsKKworICAgIHAuc3R5bGVPcHRp
b24ucmVjdCA9IHI7CisgICAgcC5wYWludENvbWJvQm94KCk7CisgICAgcmV0dXJuIGZhbHNlOwor
fQorCit2b2lkIFJlbmRlclRoZW1lUVN0eWxlOjphZGp1c3RNZW51TGlzdEJ1dHRvblN0eWxlKFN0
eWxlUmVzb2x2ZXIqIHN0eWxlUmVzb2x2ZXIsIFJlbmRlclN0eWxlKiBzdHlsZSwgRWxlbWVudCog
ZSkgY29uc3QKK3sKKyAgICAvLyBXT1JLQVJPVU5EIGJlY2F1c2UgaHRtbC5jc3Mgc3BlY2lmaWVz
IC13ZWJraXQtYm9yZGVyLXJhZGl1cyBmb3IgPHNlbGVjdD4gc28gd2Ugb3ZlcnJpZGUgaXQgaGVy
ZQorICAgIC8vIHNlZSBhbHNvIGh0dHA6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lk
PTE4Mzk5CisgICAgc3R5bGUtPnJlc2V0Qm9yZGVyUmFkaXVzKCk7CisKKyAgICBSZW5kZXJUaGVt
ZVF0OjphZGp1c3RNZW51TGlzdEJ1dHRvblN0eWxlKHN0eWxlUmVzb2x2ZXIsIHN0eWxlLCBlKTsK
K30KKworYm9vbCBSZW5kZXJUaGVtZVFTdHlsZTo6cGFpbnRNZW51TGlzdEJ1dHRvbihSZW5kZXJP
YmplY3QqIG8sIGNvbnN0IFBhaW50SW5mbyYgaSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgY29uc3QgSW50UmVjdCYgcikKK3sKKyAgICBTdHlsZVBhaW50ZXJR
U3R5bGUgcCh0aGlzLCBpLCBvKTsKKyAgICBpZiAoIXAuaXNWYWxpZCgpKQorICAgICAgICByZXR1
cm4gdHJ1ZTsKKworICAgIHAuc3R5bGVPcHRpb24ucmVjdCA9IHI7CisgICAgcC5wYWludENvbWJv
Qm94QXJyb3coKTsKKyAgICByZXR1cm4gZmFsc2U7Cit9CisKKyNpZiBFTkFCTEUoUFJPR1JFU1Nf
RUxFTUVOVCkKK2RvdWJsZSBSZW5kZXJUaGVtZVFTdHlsZTo6YW5pbWF0aW9uRHVyYXRpb25Gb3JQ
cm9ncmVzc0JhcihSZW5kZXJQcm9ncmVzcyogcmVuZGVyUHJvZ3Jlc3MpIGNvbnN0Cit7CisgICAg
aWYgKHJlbmRlclByb2dyZXNzLT5wb3NpdGlvbigpID49IDApCisgICAgICAgIHJldHVybiAwOwor
CisgICAgSW50U2l6ZSBzaXplID0gcmVuZGVyUHJvZ3Jlc3MtPnBpeGVsU25hcHBlZFNpemUoKTsK
KyAgICAvLyBGSVhNRTogVW50aWwgaHR0cDovL2J1Z3JlcG9ydHMucXQubm9raWEuY29tL2Jyb3dz
ZS9RVEJVRy05MTcxIGlzIGZpeGVkLAorICAgIC8vIHdlIHNpbXVsYXRlIG9uZSBzcXVhcmUgYW5p
bWF0aW5nIGFjcm9zcyB0aGUgcHJvZ3Jlc3MgYmFyLgorICAgIHJldHVybiAoc2l6ZS53aWR0aCgp
IC8gbV9zdHlsZUludGVyZmFjZS0+cHJvZ3Jlc3NCYXJDaHVua1dpZHRoKHNpemUpKSAqIGFuaW1h
dGlvblJlcGVhdEludGVydmFsRm9yUHJvZ3Jlc3NCYXIocmVuZGVyUHJvZ3Jlc3MpOworfQorCiti
b29sIFJlbmRlclRoZW1lUVN0eWxlOjpwYWludFByb2dyZXNzQmFyKFJlbmRlck9iamVjdCogbywg
Y29uc3QgUGFpbnRJbmZvJiBwaSwgY29uc3QgSW50UmVjdCYgcikKK3sKKyAgICBpZiAoIW8tPmlz
UHJvZ3Jlc3MoKSkKKyAgICAgICAgcmV0dXJuIHRydWU7CisKKyAgICBTdHlsZVBhaW50ZXJRU3R5
bGUgcCh0aGlzLCBwaSwgbyk7CisgICAgaWYgKCFwLmlzVmFsaWQoKSkKKyAgICAgICAgcmV0dXJu
IHRydWU7CisKKyAgICBwLnN0eWxlT3B0aW9uLnJlY3QgPSByOworICAgIFJlbmRlclByb2dyZXNz
KiByZW5kZXJQcm9ncmVzcyA9IHRvUmVuZGVyUHJvZ3Jlc3Mobyk7CisgICAgcC5wYWludFByb2dy
ZXNzQmFyKHJlbmRlclByb2dyZXNzLT5wb3NpdGlvbigpLCByZW5kZXJQcm9ncmVzcy0+YW5pbWF0
aW9uUHJvZ3Jlc3MoKSk7CisgICAgcmV0dXJuIGZhbHNlOworfQorI2VuZGlmCisKK2Jvb2wgUmVu
ZGVyVGhlbWVRU3R5bGU6OnBhaW50U2xpZGVyVHJhY2soUmVuZGVyT2JqZWN0KiBvLCBjb25zdCBQ
YWludEluZm8mIHBpLCBjb25zdCBJbnRSZWN0JiByKQoreworICAgIFN0eWxlUGFpbnRlclFTdHls
ZSBwKHRoaXMsIHBpLCBvKTsKKyAgICBpZiAoIXAuaXNWYWxpZCgpKQorICAgICAgICByZXR1cm4g
dHJ1ZTsKKworICAgIGNvbnN0IFFQb2ludCB0b3BMZWZ0ID0gci5sb2NhdGlvbigpOworICAgIHAu
cGFpbnRlci0+dHJhbnNsYXRlKHRvcExlZnQpOworCisgICAgcC5zdHlsZU9wdGlvbi5yZWN0ID0g
cjsKKyAgICBwLnN0eWxlT3B0aW9uLnJlY3QubW92ZVRvKFFQb2ludCgwLCAwKSk7CisKKyAgICBp
ZiAocC5hcHBlYXJhbmNlID09IFNsaWRlclZlcnRpY2FsUGFydCkKKyAgICAgICAgcC5zdHlsZU9w
dGlvbi5zbGlkZXIub3JpZW50YXRpb24gPSBRdDo6VmVydGljYWw7CisKKyAgICBpZiAoaXNQcmVz
c2VkKG8pKQorICAgICAgICBwLnN0eWxlT3B0aW9uLnN0YXRlIHw9IFFTdHlsZUludGVyZmFjZTo6
U3RhdGVfU3Vua2VuOworCisgICAgLy8gc29tZSBzdHlsZXMgbmVlZCB0aGlzIHRvIHNob3cgYSBo
aWdobGlnaHQgb24gb25lIHNpZGUgb2YgdGhlIGdyb292ZQorICAgIEhUTUxJbnB1dEVsZW1lbnQq
IHNsaWRlciA9IG8tPm5vZGUoKS0+dG9JbnB1dEVsZW1lbnQoKTsKKyAgICBpZiAoc2xpZGVyKSB7
CisgICAgICAgIHAuc3R5bGVPcHRpb24uc2xpZGVyLnVwc2lkZURvd24gPSAocC5hcHBlYXJhbmNl
ID09IFNsaWRlckhvcml6b250YWxQYXJ0KSAmJiAhby0+c3R5bGUoKS0+aXNMZWZ0VG9SaWdodERp
cmVjdGlvbigpOworICAgICAgICAvLyBVc2UgdGhlIHdpZHRoIGFzIGEgbXVsdGlwbGllciBpbiBj
YXNlIHRoZSBzbGlkZXIgdmFsdWVzIGFyZSA8PSAxCisgICAgICAgIGNvbnN0IGludCB3aWR0aCA9
IHIud2lkdGgoKSA+IDAgPyByLndpZHRoKCkgOiAxMDA7CisgICAgICAgIHAuc3R5bGVPcHRpb24u
c2xpZGVyLm1heGltdW0gPSBzbGlkZXItPm1heGltdW0oKSAqIHdpZHRoOworICAgICAgICBwLnN0
eWxlT3B0aW9uLnNsaWRlci5taW5pbXVtID0gc2xpZGVyLT5taW5pbXVtKCkgKiB3aWR0aDsKKyAg
ICAgICAgaWYgKCFwLnN0eWxlT3B0aW9uLnNsaWRlci51cHNpZGVEb3duKQorICAgICAgICAgICAg
cC5zdHlsZU9wdGlvbi5zbGlkZXIucG9zaXRpb24gPSBzbGlkZXItPnZhbHVlQXNOdW1iZXIoKSAq
IHdpZHRoOworICAgICAgICBlbHNlCisgICAgICAgICAgICBwLnN0eWxlT3B0aW9uLnNsaWRlci5w
b3NpdGlvbiA9IHAuc3R5bGVPcHRpb24uc2xpZGVyLm1pbmltdW0gKyBwLnN0eWxlT3B0aW9uLnNs
aWRlci5tYXhpbXVtIC0gc2xpZGVyLT52YWx1ZUFzTnVtYmVyKCkgKiB3aWR0aDsKKyAgICB9CisK
KyAgICBwLnBhaW50U2xpZGVyVHJhY2soKTsKKworICAgIHAucGFpbnRlci0+dHJhbnNsYXRlKC10
b3BMZWZ0KTsKKyAgICByZXR1cm4gZmFsc2U7Cit9CisKK3ZvaWQgUmVuZGVyVGhlbWVRU3R5bGU6
OmFkanVzdFNsaWRlclRyYWNrU3R5bGUoU3R5bGVSZXNvbHZlciosIFJlbmRlclN0eWxlKiBzdHls
ZSwgRWxlbWVudCopIGNvbnN0Cit7CisgICAgc3R5bGUtPnNldEJveFNoYWRvdyhudWxscHRyKTsK
K30KKworYm9vbCBSZW5kZXJUaGVtZVFTdHlsZTo6cGFpbnRTbGlkZXJUaHVtYihSZW5kZXJPYmpl
Y3QqIG8sIGNvbnN0IFBhaW50SW5mbyYgcGksIGNvbnN0IEludFJlY3QmIHIpCit7CisgICAgU3R5
bGVQYWludGVyUVN0eWxlIHAodGhpcywgcGksIG8pOworICAgIGlmICghcC5pc1ZhbGlkKCkpCisg
ICAgICAgIHJldHVybiB0cnVlOworCisgICAgY29uc3QgUVBvaW50IHRvcExlZnQgPSByLmxvY2F0
aW9uKCk7CisgICAgcC5wYWludGVyLT50cmFuc2xhdGUodG9wTGVmdCk7CisKKyAgICBwLnN0eWxl
T3B0aW9uLnJlY3QgPSByOworICAgIHAuc3R5bGVPcHRpb24ucmVjdC5tb3ZlVG8oUVBvaW50KDAs
IDApKTsKKyAgICBwLnN0eWxlT3B0aW9uLnNsaWRlci5vcmllbnRhdGlvbiA9IFF0OjpIb3Jpem9u
dGFsOworICAgIGlmIChwLmFwcGVhcmFuY2UgPT0gU2xpZGVyVGh1bWJWZXJ0aWNhbFBhcnQpCisg
ICAgICAgIHAuc3R5bGVPcHRpb24uc2xpZGVyLm9yaWVudGF0aW9uID0gUXQ6OlZlcnRpY2FsOwor
ICAgIGlmIChpc1ByZXNzZWQobykpCisgICAgICAgIHAuc3R5bGVPcHRpb24uc3RhdGUgfD0gUVN0
eWxlSW50ZXJmYWNlOjpTdGF0ZV9TdW5rZW47CisKKyAgICBwLnBhaW50U2xpZGVyVGh1bWIoKTsK
KworICAgIHAucGFpbnRlci0+dHJhbnNsYXRlKC10b3BMZWZ0KTsKKyAgICByZXR1cm4gZmFsc2U7
Cit9CisKK3ZvaWQgUmVuZGVyVGhlbWVRU3R5bGU6OmFkanVzdFNsaWRlclRodW1iU3R5bGUoU3R5
bGVSZXNvbHZlciogc3R5bGVSZXNvbHZlciwgUmVuZGVyU3R5bGUqIHN0eWxlLCBFbGVtZW50KiBl
bGVtZW50KSBjb25zdAoreworICAgIFJlbmRlclRoZW1lOjphZGp1c3RTbGlkZXJUaHVtYlN0eWxl
KHN0eWxlUmVzb2x2ZXIsIHN0eWxlLCBlbGVtZW50KTsKKyAgICBzdHlsZS0+c2V0Qm94U2hhZG93
KG51bGxwdHIpOworfQorCitib29sIFJlbmRlclRoZW1lUVN0eWxlOjpwYWludFNlYXJjaEZpZWxk
KFJlbmRlck9iamVjdCogbywgY29uc3QgUGFpbnRJbmZvJiBwaSwgY29uc3QgSW50UmVjdCYgcikK
K3sKKyAgICByZXR1cm4gcGFpbnRUZXh0RmllbGQobywgcGksIHIpOworfQorCit2b2lkIFJlbmRl
clRoZW1lUVN0eWxlOjphZGp1c3RTZWFyY2hGaWVsZERlY29yYXRpb25TdHlsZShTdHlsZVJlc29s
dmVyKiBzdHlsZVJlc29sdmVyLCBSZW5kZXJTdHlsZSogc3R5bGUsIEVsZW1lbnQqIGUpIGNvbnN0
Cit7CisgICAgbm90SW1wbGVtZW50ZWQoKTsKKyAgICBSZW5kZXJUaGVtZTo6YWRqdXN0U2VhcmNo
RmllbGREZWNvcmF0aW9uU3R5bGUoc3R5bGVSZXNvbHZlciwgc3R5bGUsIGUpOworfQorCitib29s
IFJlbmRlclRoZW1lUVN0eWxlOjpwYWludFNlYXJjaEZpZWxkRGVjb3JhdGlvbihSZW5kZXJPYmpl
Y3QqIG8sIGNvbnN0IFBhaW50SW5mbyYgcGksIGNvbnN0IEludFJlY3QmIHIpCit7CisgICAgbm90
SW1wbGVtZW50ZWQoKTsKKyAgICByZXR1cm4gUmVuZGVyVGhlbWU6OnBhaW50U2VhcmNoRmllbGRE
ZWNvcmF0aW9uKG8sIHBpLCByKTsKK30KKwordm9pZCBSZW5kZXJUaGVtZVFTdHlsZTo6YWRqdXN0
U2VhcmNoRmllbGRSZXN1bHRzRGVjb3JhdGlvblN0eWxlKFN0eWxlUmVzb2x2ZXIqIHN0eWxlUmVz
b2x2ZXIsIFJlbmRlclN0eWxlKiBzdHlsZSwgRWxlbWVudCogZSkgY29uc3QKK3sKKyAgICBub3RJ
bXBsZW1lbnRlZCgpOworICAgIFJlbmRlclRoZW1lOjphZGp1c3RTZWFyY2hGaWVsZFJlc3VsdHNE
ZWNvcmF0aW9uU3R5bGUoc3R5bGVSZXNvbHZlciwgc3R5bGUsIGUpOworfQorCitib29sIFJlbmRl
clRoZW1lUVN0eWxlOjpwYWludFNlYXJjaEZpZWxkUmVzdWx0c0RlY29yYXRpb24oUmVuZGVyT2Jq
ZWN0KiBvLCBjb25zdCBQYWludEluZm8mIHBpLCBjb25zdCBJbnRSZWN0JiByKQoreworICAgIG5v
dEltcGxlbWVudGVkKCk7CisgICAgcmV0dXJuIFJlbmRlclRoZW1lOjpwYWludFNlYXJjaEZpZWxk
UmVzdWx0c0RlY29yYXRpb24obywgcGksIHIpOworfQorCisjaWZuZGVmIFFUX05PX1NQSU5CT1gK
KworYm9vbCBSZW5kZXJUaGVtZVFTdHlsZTo6cGFpbnRJbm5lclNwaW5CdXR0b24oUmVuZGVyT2Jq
ZWN0KiBvLCBjb25zdCBQYWludEluZm8mIHBhaW50SW5mbywgY29uc3QgSW50UmVjdCYgcmVjdCkK
K3sKKyAgICBTdHlsZVBhaW50ZXJRU3R5bGUgcCh0aGlzLCBwYWludEluZm8sIG8pOworICAgIGlm
ICghcC5pc1ZhbGlkKCkpCisgICAgICAgIHJldHVybiB0cnVlOworCisgICAgcC5zdHlsZU9wdGlv
bi5yZWN0ID0gcmVjdDsKKyAgICBwLnBhaW50SW5uZXJTcGluQnV0dG9uKGlzU3BpblVwQnV0dG9u
UGFydFByZXNzZWQobykpOworICAgIHJldHVybiBmYWxzZTsKK30KKyNlbmRpZgorCitDb250cm9s
UGFydCBSZW5kZXJUaGVtZVFTdHlsZTo6aW5pdGlhbGl6ZUNvbW1vblFTdHlsZU9wdGlvbnMoUVN0
eWxlSW50ZXJmYWNlT3B0aW9uICZvcHRpb24sIFJlbmRlck9iamVjdCogbykgY29uc3QKK3sKKyAg
ICAvLyBEZWZhdWx0IGJpdHM6IG5vIGZvY3VzLCBubyBtb3VzZSBvdmVyCisgICAgb3B0aW9uLnN0
YXRlICY9IH4oUVN0eWxlSW50ZXJmYWNlOjpTdGF0ZV9IYXNGb2N1cyB8IFFTdHlsZUludGVyZmFj
ZTo6U3RhdGVfTW91c2VPdmVyKTsKKworICAgIGlmIChpc1JlYWRPbmx5Q29udHJvbChvKSkKKyAg
ICAgICAgLy8gUmVhZG9ubHkgaXMgc3VwcG9ydGVkIG9uIHRleHRmaWVsZHMuCisgICAgICAgIG9w
dGlvbi5zdGF0ZSB8PSBRU3R5bGVJbnRlcmZhY2U6OlN0YXRlX1JlYWRPbmx5OworCisgICAgb3B0
aW9uLmRpcmVjdGlvbiA9IFF0OjpMZWZ0VG9SaWdodDsKKworICAgIGlmIChpc0hvdmVyZWQobykp
CisgICAgICAgIG9wdGlvbi5zdGF0ZSB8PSBRU3R5bGVJbnRlcmZhY2U6OlN0YXRlX01vdXNlT3Zl
cjsKKworICAgIHNldFBhbGV0dGVGcm9tUGFnZUNsaWVudElmRXhpc3RzKG9wdGlvbi5wYWxldHRl
KTsKKworICAgIGlmICghaXNFbmFibGVkKG8pKSB7CisgICAgICAgIG9wdGlvbi5wYWxldHRlLnNl
dEN1cnJlbnRDb2xvckdyb3VwKFFQYWxldHRlOjpEaXNhYmxlZCk7CisgICAgICAgIG9wdGlvbi5z
dGF0ZSAmPSB+UVN0eWxlSW50ZXJmYWNlOjpTdGF0ZV9FbmFibGVkOworICAgIH0KKworICAgIFJl
bmRlclN0eWxlKiBzdHlsZSA9IG8tPnN0eWxlKCk7CisgICAgaWYgKCFzdHlsZSkKKyAgICAgICAg
cmV0dXJuIE5vQ29udHJvbFBhcnQ7CisKKyAgICBDb250cm9sUGFydCByZXN1bHQgPSBzdHlsZS0+
YXBwZWFyYW5jZSgpOworICAgIGlmIChzdXBwb3J0c0ZvY3VzKHJlc3VsdCkgJiYgaXNGb2N1c2Vk
KG8pKSB7CisgICAgICAgIG9wdGlvbi5zdGF0ZSB8PSBRU3R5bGVJbnRlcmZhY2U6OlN0YXRlX0hh
c0ZvY3VzOworICAgICAgICBvcHRpb24uc3RhdGUgfD0gUVN0eWxlSW50ZXJmYWNlOjpTdGF0ZV9L
ZXlib2FyZEZvY3VzQ2hhbmdlOworICAgIH0KKworICAgIGlmIChzdHlsZS0+ZGlyZWN0aW9uKCkg
PT0gV2ViQ29yZTo6UlRMKQorICAgICAgICBvcHRpb24uZGlyZWN0aW9uID0gUXQ6OlJpZ2h0VG9M
ZWZ0OworCisgICAgc3dpdGNoIChyZXN1bHQpIHsKKyAgICBjYXNlIFB1c2hCdXR0b25QYXJ0Ogor
ICAgIGNhc2UgU3F1YXJlQnV0dG9uUGFydDoKKyAgICBjYXNlIEJ1dHRvblBhcnQ6CisgICAgY2Fz
ZSBCdXR0b25CZXZlbFBhcnQ6CisgICAgY2FzZSBMaXN0SXRlbVBhcnQ6CisgICAgY2FzZSBNZW51
bGlzdEJ1dHRvblBhcnQ6CisgICAgY2FzZSBJbm5lclNwaW5CdXR0b25QYXJ0OgorICAgIGNhc2Ug
U2VhcmNoRmllbGRSZXN1bHRzQnV0dG9uUGFydDoKKyAgICBjYXNlIFNlYXJjaEZpZWxkQ2FuY2Vs
QnV0dG9uUGFydDogeworICAgICAgICBpZiAoaXNQcmVzc2VkKG8pKQorICAgICAgICAgICAgb3B0
aW9uLnN0YXRlIHw9IFFTdHlsZUludGVyZmFjZTo6U3RhdGVfU3Vua2VuOworICAgICAgICBlbHNl
IGlmIChyZXN1bHQgPT0gUHVzaEJ1dHRvblBhcnQgfHwgcmVzdWx0ID09IEJ1dHRvblBhcnQpCisg
ICAgICAgICAgICBvcHRpb24uc3RhdGUgfD0gUVN0eWxlSW50ZXJmYWNlOjpTdGF0ZV9SYWlzZWQ7
CisgICAgICAgIGJyZWFrOworICAgIH0KKyAgICBjYXNlIFJhZGlvUGFydDoKKyAgICBjYXNlIENo
ZWNrYm94UGFydDoKKyAgICAgICAgb3B0aW9uLnN0YXRlIHw9IChpc0NoZWNrZWQobykgPyBRU3R5
bGVJbnRlcmZhY2U6OlN0YXRlX09uIDogUVN0eWxlSW50ZXJmYWNlOjpTdGF0ZV9PZmYpOworICAg
IH0KKworICAgIHJldHVybiByZXN1bHQ7Cit9CisKK3ZvaWQgUmVuZGVyVGhlbWVRU3R5bGU6OmFk
anVzdFNsaWRlclRodW1iU2l6ZShSZW5kZXJTdHlsZSogc3R5bGUsIEVsZW1lbnQqIGVsZW1lbnQp
IGNvbnN0Cit7CisgICAgY29uc3QgQ29udHJvbFBhcnQgcGFydCA9IHN0eWxlLT5hcHBlYXJhbmNl
KCk7CisgICAgaWYgKHBhcnQgPT0gU2xpZGVyVGh1bWJIb3Jpem9udGFsUGFydCB8fCBwYXJ0ID09
IFNsaWRlclRodW1iVmVydGljYWxQYXJ0KSB7CisgICAgICAgIFF0OjpPcmllbnRhdGlvbiBvcmll
bnRhdGlvbiA9IFF0OjpIb3Jpem9udGFsOworICAgICAgICBpZiAocGFydCA9PSBTbGlkZXJUaHVt
YlZlcnRpY2FsUGFydCkKKyAgICAgICAgICAgIG9yaWVudGF0aW9uID0gUXQ6OlZlcnRpY2FsOwor
CisgICAgICAgIGludCBsZW5ndGggPSBtX3N0eWxlSW50ZXJmYWNlLT5zbGlkZXJMZW5ndGgob3Jp
ZW50YXRpb24pOworICAgICAgICBpbnQgdGhpY2tuZXNzID0gbV9zdHlsZUludGVyZmFjZS0+c2xp
ZGVyVGhpY2tuZXNzKG9yaWVudGF0aW9uKTsKKyAgICAgICAgaWYgKG9yaWVudGF0aW9uID09IFF0
OjpWZXJ0aWNhbCkgeworICAgICAgICAgICAgc3R5bGUtPnNldFdpZHRoKExlbmd0aCh0aGlja25l
c3MsIEZpeGVkKSk7CisgICAgICAgICAgICBzdHlsZS0+c2V0SGVpZ2h0KExlbmd0aChsZW5ndGgs
IEZpeGVkKSk7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBzdHlsZS0+c2V0V2lkdGgo
TGVuZ3RoKGxlbmd0aCwgRml4ZWQpKTsKKyAgICAgICAgICAgIHN0eWxlLT5zZXRIZWlnaHQoTGVu
Z3RoKHRoaWNrbmVzcywgRml4ZWQpKTsKKyAgICAgICAgfQorICAgIH0gZWxzZQorICAgICAgICBS
ZW5kZXJUaGVtZVF0OjphZGp1c3RTbGlkZXJUaHVtYlNpemUoc3R5bGUsIGVsZW1lbnQpOworfQor
Cit9CisKKy8vIHZpbTogdHM9NCBzdz00IGV0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9xdC9SZW5kZXJUaGVtZVFTdHlsZS5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
cXQvUmVuZGVyVGhlbWVRU3R5bGUuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi41YzczMDQzOWMxOTgwZmE3ODhjNTc3
MDI3MzlkMzgwODhmZWQ0YzcwCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vcXQvUmVuZGVyVGhlbWVRU3R5bGUuaApAQCAtMCwwICsxLDE1OSBAQAorLyoKKyAqIFRo
aXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSB0aGVtZSBpbXBsZW1lbnRhdGlvbiBmb3IgZm9ybSBjb250
cm9scyBpbiBXZWJDb3JlLgorICoKKyAqIENvcHlyaWdodCAoQykgMjAxMS0yMDEyIE5va2lhIENv
cnBvcmF0aW9uIGFuZC9vciBpdHMgc3Vic2lkaWFyeSgtaWVzKS4KKyAqCisgKiBUaGlzIGxpYnJh
cnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBt
b2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1Ymxp
YworICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlv
bjsgZWl0aGVyCisgKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlv
bikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVk
IGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkg
V0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hB
TlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBH
TlUKKyAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgor
ICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5
IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUg
dGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCisgKiB0aGUgRnJlZSBTb2Z0
d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAor
ICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisgKgorICovCisjaWZuZGVmIFJlbmRlclRo
ZW1lUVN0eWxlX2gKKyNkZWZpbmUgUmVuZGVyVGhlbWVRU3R5bGVfaAorCisjaW5jbHVkZSAiUVN0
eWxlSW50ZXJmYWNlLmgiCisjaW5jbHVkZSAiUmVuZGVyVGhlbWVRdC5oIgorCituYW1lc3BhY2Ug
V2ViQ29yZSB7CisKK2NsYXNzIFNjcm9sbGJhclRoZW1lUVN0eWxlOworCitjbGFzcyBQYWdlOwor
Y2xhc3MgUVN0eWxlSW50ZXJmYWNlOworc3RydWN0IFFTdHlsZUludGVyZmFjZU9wdGlvbjsKKwor
dHlwZWRlZiBRU3R5bGVJbnRlcmZhY2UqICgqUXRTdHlsZUZhY3RvcnlGdW5jdGlvbikoUGFnZSop
OworCitjbGFzcyBSZW5kZXJUaGVtZVFTdHlsZSA6IHB1YmxpYyBSZW5kZXJUaGVtZVF0IHsKK3By
aXZhdGU6CisgICAgZnJpZW5kIGNsYXNzIFN0eWxlUGFpbnRlclFTdHlsZTsKKworICAgIFJlbmRl
clRoZW1lUVN0eWxlKFBhZ2UqKTsKKyAgICB2aXJ0dWFsIH5SZW5kZXJUaGVtZVFTdHlsZSgpOwor
CitwdWJsaWM6CisgICAgc3RhdGljIFBhc3NSZWZQdHI8UmVuZGVyVGhlbWU+IGNyZWF0ZShQYWdl
Kik7CisKKyAgICBzdGF0aWMgdm9pZCBzZXRTdHlsZUZhY3RvcnlGdW5jdGlvbihRdFN0eWxlRmFj
dG9yeUZ1bmN0aW9uKTsKKyAgICBzdGF0aWMgUXRTdHlsZUZhY3RvcnlGdW5jdGlvbiBzdHlsZUZh
Y3RvcnkoKTsKKworICAgIHZpcnR1YWwgdm9pZCBhZGp1c3RTbGlkZXJUaHVtYlNpemUoUmVuZGVy
U3R5bGUqLCBFbGVtZW50KikgY29uc3Q7CisKKyAgICBRU3R5bGVJbnRlcmZhY2UqIHN0eWxlSW50
ZXJmYWNlKCkgeyByZXR1cm4gbV9zdHlsZUludGVyZmFjZS5nZXQoKTsgfQorCitwcm90ZWN0ZWQ6
CisgICAgdmlydHVhbCB2b2lkIGFkanVzdEJ1dHRvblN0eWxlKFN0eWxlUmVzb2x2ZXIqLCBSZW5k
ZXJTdHlsZSosIEVsZW1lbnQqKSBjb25zdDsKKyAgICB2aXJ0dWFsIGJvb2wgcGFpbnRCdXR0b24o
UmVuZGVyT2JqZWN0KiwgY29uc3QgUGFpbnRJbmZvJiwgY29uc3QgSW50UmVjdCYpOworCisgICAg
dmlydHVhbCBib29sIHBhaW50VGV4dEZpZWxkKFJlbmRlck9iamVjdCosIGNvbnN0IFBhaW50SW5m
byYsIGNvbnN0IEludFJlY3QmKTsKKworICAgIHZpcnR1YWwgYm9vbCBwYWludFRleHRBcmVhKFJl
bmRlck9iamVjdCosIGNvbnN0IFBhaW50SW5mbyYsIGNvbnN0IEludFJlY3QmKTsKKyAgICB2aXJ0
dWFsIHZvaWQgYWRqdXN0VGV4dEFyZWFTdHlsZShTdHlsZVJlc29sdmVyKiwgUmVuZGVyU3R5bGUq
LCBFbGVtZW50KikgY29uc3Q7CisKKyAgICB2aXJ0dWFsIGJvb2wgcGFpbnRNZW51TGlzdChSZW5k
ZXJPYmplY3QqLCBjb25zdCBQYWludEluZm8mLCBjb25zdCBJbnRSZWN0Jik7CisKKyAgICB2aXJ0
dWFsIGJvb2wgcGFpbnRNZW51TGlzdEJ1dHRvbihSZW5kZXJPYmplY3QqLCBjb25zdCBQYWludElu
Zm8mLCBjb25zdCBJbnRSZWN0Jik7CisgICAgdmlydHVhbCB2b2lkIGFkanVzdE1lbnVMaXN0QnV0
dG9uU3R5bGUoU3R5bGVSZXNvbHZlciosIFJlbmRlclN0eWxlKiwgRWxlbWVudCopIGNvbnN0Owor
CisjaWYgRU5BQkxFKFBST0dSRVNTX0VMRU1FTlQpCisgICAgLy8gUmV0dXJucyB0aGUgZHVyYXRp
b24gb2YgdGhlIGFuaW1hdGlvbiBmb3IgdGhlIHByb2dyZXNzIGJhci4KKyAgICB2aXJ0dWFsIGRv
dWJsZSBhbmltYXRpb25EdXJhdGlvbkZvclByb2dyZXNzQmFyKFJlbmRlclByb2dyZXNzKikgY29u
c3Q7CisgICAgdmlydHVhbCBib29sIHBhaW50UHJvZ3Jlc3NCYXIoUmVuZGVyT2JqZWN0KiwgY29u
c3QgUGFpbnRJbmZvJiwgY29uc3QgSW50UmVjdCYpOworI2VuZGlmCisKKyAgICB2aXJ0dWFsIGJv
b2wgcGFpbnRTbGlkZXJUcmFjayhSZW5kZXJPYmplY3QqLCBjb25zdCBQYWludEluZm8mLCBjb25z
dCBJbnRSZWN0Jik7CisgICAgdmlydHVhbCB2b2lkIGFkanVzdFNsaWRlclRyYWNrU3R5bGUoU3R5
bGVSZXNvbHZlciosIFJlbmRlclN0eWxlKiwgRWxlbWVudCopIGNvbnN0OworCisgICAgdmlydHVh
bCBib29sIHBhaW50U2xpZGVyVGh1bWIoUmVuZGVyT2JqZWN0KiwgY29uc3QgUGFpbnRJbmZvJiwg
Y29uc3QgSW50UmVjdCYpOworICAgIHZpcnR1YWwgdm9pZCBhZGp1c3RTbGlkZXJUaHVtYlN0eWxl
KFN0eWxlUmVzb2x2ZXIqLCBSZW5kZXJTdHlsZSosIEVsZW1lbnQqKSBjb25zdDsKKworICAgIHZp
cnR1YWwgYm9vbCBwYWludFNlYXJjaEZpZWxkKFJlbmRlck9iamVjdCosIGNvbnN0IFBhaW50SW5m
byYsIGNvbnN0IEludFJlY3QmKTsKKworICAgIHZpcnR1YWwgdm9pZCBhZGp1c3RTZWFyY2hGaWVs
ZERlY29yYXRpb25TdHlsZShTdHlsZVJlc29sdmVyKiwgUmVuZGVyU3R5bGUqLCBFbGVtZW50Kikg
Y29uc3Q7CisgICAgdmlydHVhbCBib29sIHBhaW50U2VhcmNoRmllbGREZWNvcmF0aW9uKFJlbmRl
ck9iamVjdCosIGNvbnN0IFBhaW50SW5mbyYsIGNvbnN0IEludFJlY3QmKTsKKworICAgIHZpcnR1
YWwgdm9pZCBhZGp1c3RTZWFyY2hGaWVsZFJlc3VsdHNEZWNvcmF0aW9uU3R5bGUoU3R5bGVSZXNv
bHZlciosIFJlbmRlclN0eWxlKiwgRWxlbWVudCopIGNvbnN0OworICAgIHZpcnR1YWwgYm9vbCBw
YWludFNlYXJjaEZpZWxkUmVzdWx0c0RlY29yYXRpb24oUmVuZGVyT2JqZWN0KiwgY29uc3QgUGFp
bnRJbmZvJiwgY29uc3QgSW50UmVjdCYpOworCisjaWZuZGVmIFFUX05PX1NQSU5CT1gKKyAgICB2
aXJ0dWFsIGJvb2wgcGFpbnRJbm5lclNwaW5CdXR0b24oUmVuZGVyT2JqZWN0KiwgY29uc3QgUGFp
bnRJbmZvJiwgY29uc3QgSW50UmVjdCYpOworI2VuZGlmCisKK3Byb3RlY3RlZDoKKyAgICB2aXJ0
dWFsIHZvaWQgY29tcHV0ZVNpemVCYXNlZE9uU3R5bGUoUmVuZGVyU3R5bGUqKSBjb25zdDsKKwor
ICAgIHZpcnR1YWwgUVNoYXJlZFBvaW50ZXI8U3R5bGVQYWludGVyPiBnZXRTdHlsZVBhaW50ZXIo
Y29uc3QgUGFpbnRJbmZvJik7CisKKyAgICB2aXJ0dWFsIFFSZWN0IGluZmxhdGVCdXR0b25SZWN0
KGNvbnN0IFFSZWN0JiBvcmlnaW5hbFJlY3QpIGNvbnN0OworCisgICAgdmlydHVhbCB2b2lkIHNl
dFBvcHVwUGFkZGluZyhSZW5kZXJTdHlsZSopIGNvbnN0OworCisgICAgdmlydHVhbCBRUGFsZXR0
ZSBjb2xvclBhbGV0dGUoKSBjb25zdDsKKworcHJpdmF0ZToKKyAgICBDb250cm9sUGFydCBpbml0
aWFsaXplQ29tbW9uUVN0eWxlT3B0aW9ucyhRU3R5bGVJbnRlcmZhY2VPcHRpb24mLCBSZW5kZXJP
YmplY3QqKSBjb25zdDsKKworICAgIHZvaWQgc2V0QnV0dG9uUGFkZGluZyhSZW5kZXJTdHlsZSop
IGNvbnN0OworCisgICAgdm9pZCBzZXRQYWxldHRlRnJvbVBhZ2VDbGllbnRJZkV4aXN0cyhRUGFs
ZXR0ZSYpIGNvbnN0OworCisjaWZkZWYgUV9PU19NQUMKKyAgICBpbnQgbV9idXR0b25Gb250UGl4
ZWxTaXplOworI2VuZGlmCisKKyAgICBPd25QdHI8UVN0eWxlSW50ZXJmYWNlPiBtX3N0eWxlSW50
ZXJmYWNlOworfTsKKworY2xhc3MgU3R5bGVQYWludGVyUVN0eWxlIDogcHVibGljIFN0eWxlUGFp
bnRlciB7CitwdWJsaWM6CisgICAgZXhwbGljaXQgU3R5bGVQYWludGVyUVN0eWxlKFJlbmRlclRo
ZW1lUVN0eWxlKiwgY29uc3QgUGFpbnRJbmZvJiwgUmVuZGVyT2JqZWN0Kik7CisgICAgZXhwbGlj
aXQgU3R5bGVQYWludGVyUVN0eWxlKFNjcm9sbGJhclRoZW1lUVN0eWxlKiwgR3JhcGhpY3NDb250
ZXh0Kik7CisKKyAgICBib29sIGlzVmFsaWQoKSBjb25zdCB7IHJldHVybiBzdHlsZUludGVyZmFj
ZSAmJiBzdHlsZUludGVyZmFjZS0+aXNWYWxpZCgpICYmIFN0eWxlUGFpbnRlcjo6aXNWYWxpZCgp
OyB9CisKKyAgICBRT2JqZWN0KiB3aWRnZXQ7CisgICAgUVN0eWxlSW50ZXJmYWNlKiBzdHlsZUlu
dGVyZmFjZTsKKyAgICBRU3R5bGVJbnRlcmZhY2VPcHRpb24gc3R5bGVPcHRpb247CisgICAgQ29u
dHJvbFBhcnQgYXBwZWFyYW5jZTsKKworICAgIHZvaWQgcGFpbnRCdXR0b24oUVN0eWxlSW50ZXJm
YWNlOjpCdXR0b25UeXBlIHR5cGUpCisgICAgeyBzdHlsZUludGVyZmFjZS0+cGFpbnRCdXR0b24o
cGFpbnRlciwgdHlwZSwgc3R5bGVPcHRpb24sIHdpZGdldCk7IH0KKyAgICB2b2lkIHBhaW50VGV4
dEZpZWxkKCkKKyAgICB7IHN0eWxlSW50ZXJmYWNlLT5wYWludFRleHRGaWVsZChwYWludGVyLCBz
dHlsZU9wdGlvbiwgd2lkZ2V0KTsgfQorICAgIHZvaWQgcGFpbnRDb21ib0JveCgpCisgICAgeyBz
dHlsZUludGVyZmFjZS0+cGFpbnRDb21ib0JveChwYWludGVyLCBzdHlsZU9wdGlvbiwgd2lkZ2V0
KTsgfQorICAgIHZvaWQgcGFpbnRDb21ib0JveEFycm93KCkKKyAgICB7IHN0eWxlSW50ZXJmYWNl
LT5wYWludENvbWJvQm94QXJyb3cocGFpbnRlciwgc3R5bGVPcHRpb24sIHdpZGdldCk7IH0KKyAg
ICB2b2lkIHBhaW50U2xpZGVyVHJhY2soKQorICAgIHsgc3R5bGVJbnRlcmZhY2UtPnBhaW50U2xp
ZGVyVHJhY2socGFpbnRlciwgc3R5bGVPcHRpb24sIHdpZGdldCk7IH0KKyAgICB2b2lkIHBhaW50
U2xpZGVyVGh1bWIoKQorICAgIHsgc3R5bGVJbnRlcmZhY2UtPnBhaW50U2xpZGVyVGh1bWIocGFp
bnRlciwgc3R5bGVPcHRpb24sIHdpZGdldCk7IH0KKyAgICB2b2lkIHBhaW50SW5uZXJTcGluQnV0
dG9uKGJvb2wgc3BpbkJveFVwKQorICAgIHsgc3R5bGVJbnRlcmZhY2UtPnBhaW50SW5uZXJTcGlu
QnV0dG9uKHBhaW50ZXIsIHN0eWxlT3B0aW9uLCBzcGluQm94VXAsIHdpZGdldCk7IH0KKyAgICB2
b2lkIHBhaW50UHJvZ3Jlc3NCYXIoZG91YmxlIHByb2dyZXNzLCBkb3VibGUgYW5pbWF0aW9uUHJv
Z3Jlc3MpCisgICAgeyBzdHlsZUludGVyZmFjZS0+cGFpbnRQcm9ncmVzc0JhcihwYWludGVyLCBz
dHlsZU9wdGlvbiwgcHJvZ3Jlc3MsIGFuaW1hdGlvblByb2dyZXNzLCB3aWRnZXQpOyB9CisgICAg
dm9pZCBwYWludFNjcm9sbENvcm5lcihjb25zdCBRUmVjdCYgcmVjdCkKKyAgICB7IHN0eWxlSW50
ZXJmYWNlLT5wYWludFNjcm9sbENvcm5lcihwYWludGVyLCByZWN0LCB3aWRnZXQpOyB9CisgICAg
dm9pZCBwYWludFNjcm9sbEJhcigpCisgICAgeyBzdHlsZUludGVyZmFjZS0+cGFpbnRTY3JvbGxC
YXIocGFpbnRlciwgc3R5bGVPcHRpb24sIHdpZGdldCk7IH0KKworcHJpdmF0ZToKKyAgICB2b2lk
IGluaXQoR3JhcGhpY3NDb250ZXh0Kik7CisKKyAgICBRX0RJU0FCTEVfQ09QWShTdHlsZVBhaW50
ZXJRU3R5bGUpCit9OworCit9CisKKyNlbmRpZiAvLyBSZW5kZXJUaGVtZVFTdHlsZV9oCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9xdC9TY3JvbGxiYXJUaGVtZVFTdHlsZS5j
cHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9xdC9TY3JvbGxiYXJUaGVtZVFTdHlsZS5jcHAK
bmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMC4uYmQ1N2I3MDVkMmYyMTJhMzQwYWZkMGRjZjFhYzhhZDlmYWY3ZWJlZAotLS0g
L2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3F0L1Njcm9sbGJhclRoZW1l
UVN0eWxlLmNwcApAQCAtMCwwICsxLDIyMSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwNywg
MjAwOCBBcHBsZSBJbmMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIw
MDcgU3RhaWtvcyBDb21wdXRpbmcgU2VydmljZXMgSW5jLiA8aW5mb0BzdGFpa29zLm5ldD4KKyAq
IENvcHlyaWdodCAoQykgMjAwOCBOb2tpYSBDb3Jwb3JhdGlvbiBhbmQvb3IgaXRzIHN1YnNpZGlh
cnkoLWllcykKKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmlu
YXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRl
ZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAq
IDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUg
Y29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZv
cm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQor
ICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGgg
dGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQ
UExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5U
SUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJB
TlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAq
IFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9S
CisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5D
SURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VT
IChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNU
SVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklU
UzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRI
RU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklM
SVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklT
SU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4g
SUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2lu
Y2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIlNjcm9sbGJhclRoZW1lUVN0eWxlLmgiCisKKyNp
bmNsdWRlICJHcmFwaGljc0NvbnRleHQuaCIKKyNpbmNsdWRlICJQbGF0Zm9ybU1vdXNlRXZlbnQu
aCIKKyNpbmNsdWRlICJSZW5kZXJUaGVtZVFTdHlsZS5oIgorI2luY2x1ZGUgIlNjcm9sbFZpZXcu
aCIKKyNpbmNsdWRlICJTY3JvbGxiYXIuaCIKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitTY3Jv
bGxiYXJUaGVtZVFTdHlsZTo6U2Nyb2xsYmFyVGhlbWVRU3R5bGUoKQoreworICAgIG1fc3R5bGVJ
bnRlcmZhY2UgPSBhZG9wdFB0cihSZW5kZXJUaGVtZVFTdHlsZTo6c3R5bGVGYWN0b3J5KCkoLypw
YWdlKi8gMCkpOworfQorCitTY3JvbGxiYXJUaGVtZVFTdHlsZTo6flNjcm9sbGJhclRoZW1lUVN0
eWxlKCkKK3sKK30KKworc3RhdGljIFFTdHlsZUludGVyZmFjZTo6U3ViQ29udHJvbCBzY1BhcnQo
Y29uc3QgU2Nyb2xsYmFyUGFydCYgcGFydCkKK3sKKyAgICBzd2l0Y2ggKHBhcnQpIHsKKyAgICBj
YXNlIE5vUGFydDoKKyAgICAgICAgcmV0dXJuIFFTdHlsZUludGVyZmFjZTo6U0NfTm9uZTsKKyAg
ICBjYXNlIEJhY2tCdXR0b25TdGFydFBhcnQ6CisgICAgY2FzZSBCYWNrQnV0dG9uRW5kUGFydDoK
KyAgICAgICAgcmV0dXJuIFFTdHlsZUludGVyZmFjZTo6U0NfU2Nyb2xsQmFyU3ViTGluZTsKKyAg
ICBjYXNlIEJhY2tUcmFja1BhcnQ6CisgICAgICAgIHJldHVybiBRU3R5bGVJbnRlcmZhY2U6OlND
X1Njcm9sbEJhclN1YlBhZ2U7CisgICAgY2FzZSBUaHVtYlBhcnQ6CisgICAgICAgIHJldHVybiBR
U3R5bGVJbnRlcmZhY2U6OlNDX1Njcm9sbEJhclNsaWRlcjsKKyAgICBjYXNlIEZvcndhcmRUcmFj
a1BhcnQ6CisgICAgICAgIHJldHVybiBRU3R5bGVJbnRlcmZhY2U6OlNDX1Njcm9sbEJhckFkZFBh
Z2U7CisgICAgY2FzZSBGb3J3YXJkQnV0dG9uU3RhcnRQYXJ0OgorICAgIGNhc2UgRm9yd2FyZEJ1
dHRvbkVuZFBhcnQ6CisgICAgICAgIHJldHVybiBRU3R5bGVJbnRlcmZhY2U6OlNDX1Njcm9sbEJh
ckFkZExpbmU7CisgICAgfQorCisgICAgcmV0dXJuIFFTdHlsZUludGVyZmFjZTo6U0NfTm9uZTsK
K30KKworc3RhdGljIFNjcm9sbGJhclBhcnQgc2Nyb2xsYmFyUGFydChjb25zdCBRU3R5bGVJbnRl
cmZhY2U6OlN1YkNvbnRyb2wmIHNjKQoreworICAgIHN3aXRjaCAoc2MpIHsKKyAgICBjYXNlIFFT
dHlsZUludGVyZmFjZTo6U0NfTm9uZToKKyAgICAgICAgcmV0dXJuIE5vUGFydDsKKyAgICBjYXNl
IFFTdHlsZUludGVyZmFjZTo6U0NfU2Nyb2xsQmFyU3ViTGluZToKKyAgICAgICAgcmV0dXJuIEJh
Y2tCdXR0b25TdGFydFBhcnQ7CisgICAgY2FzZSBRU3R5bGVJbnRlcmZhY2U6OlNDX1Njcm9sbEJh
clN1YlBhZ2U6CisgICAgICAgIHJldHVybiBCYWNrVHJhY2tQYXJ0OworICAgIGNhc2UgUVN0eWxl
SW50ZXJmYWNlOjpTQ19TY3JvbGxCYXJTbGlkZXI6CisgICAgICAgIHJldHVybiBUaHVtYlBhcnQ7
CisgICAgY2FzZSBRU3R5bGVJbnRlcmZhY2U6OlNDX1Njcm9sbEJhckFkZFBhZ2U6CisgICAgICAg
IHJldHVybiBGb3J3YXJkVHJhY2tQYXJ0OworICAgIGNhc2UgUVN0eWxlSW50ZXJmYWNlOjpTQ19T
Y3JvbGxCYXJBZGRMaW5lOgorICAgICAgICByZXR1cm4gRm9yd2FyZEJ1dHRvblN0YXJ0UGFydDsK
KyAgICB9CisgICAgcmV0dXJuIE5vUGFydDsKK30KKworc3RhdGljIFFTdHlsZUludGVyZmFjZU9w
dGlvbiBpbml0U2xpZGVyU3R5bGVPcHRpb24oU2Nyb2xsYmFyVGhlbWVDbGllbnQqIHNjcm9sbGJh
ciwgUU9iamVjdCogd2lkZ2V0ID0gMCkKK3sKKyAgICBRU3R5bGVJbnRlcmZhY2VPcHRpb24gb3B0
OworICAgIGlmICh3aWRnZXQpIHsKKyAgICAgICAgb3B0LnBhbGV0dGUgPSB3aWRnZXQtPnByb3Bl
cnR5KCJwYWxldHRlIikudmFsdWU8UVBhbGV0dGU+KCk7CisgICAgICAgIG9wdC5yZWN0ID0gd2lk
Z2V0LT5wcm9wZXJ0eSgicmVjdCIpLnZhbHVlPFFSZWN0PigpOworICAgICAgICBvcHQuZGlyZWN0
aW9uID0gc3RhdGljX2Nhc3Q8UXQ6OkxheW91dERpcmVjdGlvbj4od2lkZ2V0LT5wcm9wZXJ0eSgi
bGF5b3V0RGlyZWN0aW9uIikudG9JbnQoKSk7CisgICAgfSBlbHNlCisgICAgICAgIG9wdC5zdGF0
ZSB8PSBRU3R5bGVJbnRlcmZhY2U6OlN0YXRlX0FjdGl2ZTsKKworICAgIG9wdC5zdGF0ZSAmPSB+
UVN0eWxlSW50ZXJmYWNlOjpTdGF0ZV9IYXNGb2N1czsKKworICAgIG9wdC5yZWN0ID0gc2Nyb2xs
YmFyLT5mcmFtZVJlY3QoKTsKKyAgICBpZiAoc2Nyb2xsYmFyLT5lbmFibGVkKCkpCisgICAgICAg
IG9wdC5zdGF0ZSB8PSBRU3R5bGVJbnRlcmZhY2U6OlN0YXRlX0VuYWJsZWQ7CisgICAgaWYgKHNj
cm9sbGJhci0+Y29udHJvbFNpemUoKSAhPSBSZWd1bGFyU2Nyb2xsYmFyKQorICAgICAgICBvcHQu
c3RhdGUgfD0gUVN0eWxlSW50ZXJmYWNlOjpTdGF0ZV9NaW5pOworICAgIG9wdC5zbGlkZXIub3Jp
ZW50YXRpb24gPSAoc2Nyb2xsYmFyLT5vcmllbnRhdGlvbigpID09IFZlcnRpY2FsU2Nyb2xsYmFy
KSA/IFF0OjpWZXJ0aWNhbCA6IFF0OjpIb3Jpem9udGFsOworCisgICAgaWYgKHNjcm9sbGJhci0+
b3JpZW50YXRpb24oKSA9PSBIb3Jpem9udGFsU2Nyb2xsYmFyKQorICAgICAgICBvcHQuc3RhdGUg
fD0gUVN0eWxlSW50ZXJmYWNlOjpTdGF0ZV9Ib3Jpem9udGFsOworICAgIGVsc2UKKyAgICAgICAg
b3B0LnN0YXRlICY9IH5RU3R5bGVJbnRlcmZhY2U6OlN0YXRlX0hvcml6b250YWw7CisKKyAgICBv
cHQuc2xpZGVyLnZhbHVlID0gc2Nyb2xsYmFyLT52YWx1ZSgpOworICAgIG9wdC5zbGlkZXIucG9z
aXRpb24gPSBvcHQuc2xpZGVyLnZhbHVlOworICAgIG9wdC5zbGlkZXIucGFnZVN0ZXAgPSBzY3Jv
bGxiYXItPnBhZ2VTdGVwKCk7CisgICAgb3B0LnNsaWRlci5zaW5nbGVTdGVwID0gc2Nyb2xsYmFy
LT5saW5lU3RlcCgpOworICAgIG9wdC5zbGlkZXIubWluaW11bSA9IDA7CisgICAgb3B0LnNsaWRl
ci5tYXhpbXVtID0gcU1heCgwLCBzY3JvbGxiYXItPm1heGltdW0oKSk7CisgICAgU2Nyb2xsYmFy
UGFydCBwcmVzc2VkUGFydCA9IHNjcm9sbGJhci0+cHJlc3NlZFBhcnQoKTsKKyAgICBTY3JvbGxi
YXJQYXJ0IGhvdmVyZWRQYXJ0ID0gc2Nyb2xsYmFyLT5ob3ZlcmVkUGFydCgpOworICAgIGlmIChw
cmVzc2VkUGFydCAhPSBOb1BhcnQpIHsKKyAgICAgICAgb3B0LnNsaWRlci5hY3RpdmVTdWJDb250
cm9scyA9IHNjUGFydChzY3JvbGxiYXItPnByZXNzZWRQYXJ0KCkpOworICAgICAgICBpZiAocHJl
c3NlZFBhcnQgPT0gQmFja0J1dHRvblN0YXJ0UGFydCB8fCBwcmVzc2VkUGFydCA9PSBGb3J3YXJk
QnV0dG9uU3RhcnRQYXJ0CisgICAgICAgICAgICB8fCBwcmVzc2VkUGFydCA9PSBCYWNrQnV0dG9u
RW5kUGFydCB8fCBwcmVzc2VkUGFydCA9PSBGb3J3YXJkQnV0dG9uRW5kUGFydAorICAgICAgICAg
ICAgfHwgcHJlc3NlZFBhcnQgPT0gVGh1bWJQYXJ0KQorICAgICAgICAgICAgb3B0LnN0YXRlIHw9
IFFTdHlsZUludGVyZmFjZTo6U3RhdGVfU3Vua2VuOworICAgIH0gZWxzZQorICAgICAgICBvcHQu
c2xpZGVyLmFjdGl2ZVN1YkNvbnRyb2xzID0gc2NQYXJ0KGhvdmVyZWRQYXJ0KTsKKyAgICBpZiAo
aG92ZXJlZFBhcnQgIT0gTm9QYXJ0KQorICAgICAgICBvcHQuc3RhdGUgfD0gUVN0eWxlSW50ZXJm
YWNlOjpTdGF0ZV9Nb3VzZU92ZXI7CisgICAgcmV0dXJuIG9wdDsKK30KKworYm9vbCBTY3JvbGxi
YXJUaGVtZVFTdHlsZTo6cGFpbnQoU2Nyb2xsYmFyVGhlbWVDbGllbnQqIHNjcm9sbGJhciwgR3Jh
cGhpY3NDb250ZXh0KiBncmFwaGljc0NvbnRleHQsIGNvbnN0IEludFJlY3QmIGRpcnR5UmVjdCkK
K3sKKyAgICBpZiAoZ3JhcGhpY3NDb250ZXh0LT51cGRhdGluZ0NvbnRyb2xUaW50cygpKSB7Cisg
ICAgICAgIHNjcm9sbGJhci0+aW52YWxpZGF0ZVJlY3QoZGlydHlSZWN0KTsKKyAgICAgICAgcmV0
dXJuIGZhbHNlOworICAgIH0KKworICAgIFN0eWxlUGFpbnRlclFTdHlsZSBwKHRoaXMsIGdyYXBo
aWNzQ29udGV4dCk7CisgICAgaWYgKCFwLmlzVmFsaWQoKSkKKyAgICAgICAgcmV0dXJuIHRydWU7
CisKKyAgICBwLnBhaW50ZXItPnNhdmUoKTsKKyAgICBwLnN0eWxlT3B0aW9uID0gaW5pdFNsaWRl
clN0eWxlT3B0aW9uKHNjcm9sbGJhciwgcC53aWRnZXQpOworCisgICAgcC5wYWludGVyLT5zZXRD
bGlwUmVjdChwLnN0eWxlT3B0aW9uLnJlY3QuaW50ZXJzZWN0ZWQoZGlydHlSZWN0KSwgUXQ6Oklu
dGVyc2VjdENsaXApOworICAgIHAucGFpbnRTY3JvbGxCYXIoKTsKKyAgICBwLnBhaW50ZXItPnJl
c3RvcmUoKTsKKyAgICByZXR1cm4gdHJ1ZTsKK30KKworU2Nyb2xsYmFyUGFydCBTY3JvbGxiYXJU
aGVtZVFTdHlsZTo6aGl0VGVzdChTY3JvbGxiYXJUaGVtZUNsaWVudCogc2Nyb2xsYmFyLCBjb25z
dCBQbGF0Zm9ybU1vdXNlRXZlbnQmIGV2dCkKK3sKKyAgICBRU3R5bGVJbnRlcmZhY2VPcHRpb24g
b3B0ID0gaW5pdFNsaWRlclN0eWxlT3B0aW9uKHNjcm9sbGJhcik7CisgICAgY29uc3QgUVBvaW50
IHBvcyA9IHNjcm9sbGJhci0+Y29udmVydEZyb21Db250YWluaW5nV2luZG93KGV2dC5wb3NpdGlv
bigpKTsKKyAgICBvcHQucmVjdC5tb3ZlVG8oUVBvaW50KDAsIDApKTsKKyAgICBRU3R5bGVJbnRl
cmZhY2U6OlN1YkNvbnRyb2wgc2MgPSBtX3N0eWxlSW50ZXJmYWNlLT5oaXRUZXN0U2Nyb2xsQmFy
KG9wdCwgcG9zKTsKKyAgICByZXR1cm4gc2Nyb2xsYmFyUGFydChzYyk7Cit9CisKK2Jvb2wgU2Ny
b2xsYmFyVGhlbWVRU3R5bGU6OnNob3VsZENlbnRlck9uVGh1bWIoU2Nyb2xsYmFyVGhlbWVDbGll
bnQqLCBjb25zdCBQbGF0Zm9ybU1vdXNlRXZlbnQmIGV2dCkKK3sKKyAgICAvLyBNaWRkbGUgY2xp
Y2sgY2VudGVycyBzbGlkZXIgdGh1bWIgKGlmIHN1cHBvcnRlZCkuCisgICAgcmV0dXJuIG1fc3R5
bGVJbnRlcmZhY2UtPnNjcm9sbEJhck1pZGRsZUNsaWNrQWJzb2x1dGVQb3NpdGlvblN0eWxlSGlu
dCgpICYmIGV2dC5idXR0b24oKSA9PSBNaWRkbGVCdXR0b247Cit9CisKK3ZvaWQgU2Nyb2xsYmFy
VGhlbWVRU3R5bGU6OmludmFsaWRhdGVQYXJ0KFNjcm9sbGJhclRoZW1lQ2xpZW50KiBzY3JvbGxi
YXIsIFNjcm9sbGJhclBhcnQpCit7CisgICAgLy8gRklYTUU6IERvIG1vcmUgcHJlY2lzZSBpbnZh
bGlkYXRpb24uCisgICAgc2Nyb2xsYmFyLT5pbnZhbGlkYXRlKCk7Cit9CisKK2ludCBTY3JvbGxi
YXJUaGVtZVFTdHlsZTo6c2Nyb2xsYmFyVGhpY2tuZXNzKFNjcm9sbGJhckNvbnRyb2xTaXplIGNv
bnRyb2xTaXplKQoreworICAgIGNvbnN0IGJvb2wgbWluaSA9IGNvbnRyb2xTaXplICE9IFJlZ3Vs
YXJTY3JvbGxiYXI7CisgICAgcmV0dXJuIG1fc3R5bGVJbnRlcmZhY2UtPnNjcm9sbEJhckV4dGVu
dChtaW5pKTsKK30KKworaW50IFNjcm9sbGJhclRoZW1lUVN0eWxlOjp0aHVtYlBvc2l0aW9uKFNj
cm9sbGJhclRoZW1lQ2xpZW50KiBzY3JvbGxiYXIpCit7CisgICAgaWYgKHNjcm9sbGJhci0+ZW5h
YmxlZCgpKSB7CisgICAgICAgIGZsb2F0IHBvcyA9IChmbG9hdClzY3JvbGxiYXItPmN1cnJlbnRQ
b3MoKSAqICh0cmFja0xlbmd0aChzY3JvbGxiYXIpIC0gdGh1bWJMZW5ndGgoc2Nyb2xsYmFyKSkg
LyBzY3JvbGxiYXItPm1heGltdW0oKTsKKyAgICAgICAgcmV0dXJuIChwb3MgPCAxICYmIHBvcyA+
IDApID8gMSA6IHBvczsKKyAgICB9CisgICAgcmV0dXJuIDA7Cit9CisKK2ludCBTY3JvbGxiYXJU
aGVtZVFTdHlsZTo6dGh1bWJMZW5ndGgoU2Nyb2xsYmFyVGhlbWVDbGllbnQqIHNjcm9sbGJhcikK
K3sKKyAgICBRU3R5bGVJbnRlcmZhY2VPcHRpb24gb3B0ID0gaW5pdFNsaWRlclN0eWxlT3B0aW9u
KHNjcm9sbGJhcik7CisgICAgUVJlY3QgdGh1bWIgPSBtX3N0eWxlSW50ZXJmYWNlLT5zY3JvbGxC
YXJTdWJDb250cm9sUmVjdChvcHQsIFFTdHlsZUludGVyZmFjZTo6U0NfU2Nyb2xsQmFyU2xpZGVy
KTsKKyAgICByZXR1cm4gc2Nyb2xsYmFyLT5vcmllbnRhdGlvbigpID09IEhvcml6b250YWxTY3Jv
bGxiYXIgPyB0aHVtYi53aWR0aCgpIDogdGh1bWIuaGVpZ2h0KCk7Cit9CisKK2ludCBTY3JvbGxi
YXJUaGVtZVFTdHlsZTo6dHJhY2tQb3NpdGlvbihTY3JvbGxiYXJUaGVtZUNsaWVudCogc2Nyb2xs
YmFyKQoreworICAgIFFTdHlsZUludGVyZmFjZU9wdGlvbiBvcHQgPSBpbml0U2xpZGVyU3R5bGVP
cHRpb24oc2Nyb2xsYmFyKTsKKyAgICBRUmVjdCB0cmFjayA9IG1fc3R5bGVJbnRlcmZhY2UtPnNj
cm9sbEJhclN1YkNvbnRyb2xSZWN0KG9wdCwgUVN0eWxlSW50ZXJmYWNlOjpTQ19TY3JvbGxCYXJH
cm9vdmUpOworICAgIHJldHVybiBzY3JvbGxiYXItPm9yaWVudGF0aW9uKCkgPT0gSG9yaXpvbnRh
bFNjcm9sbGJhciA/IHRyYWNrLngoKSAtIHNjcm9sbGJhci0+eCgpIDogdHJhY2sueSgpIC0gc2Ny
b2xsYmFyLT55KCk7Cit9CisKK2ludCBTY3JvbGxiYXJUaGVtZVFTdHlsZTo6dHJhY2tMZW5ndGgo
U2Nyb2xsYmFyVGhlbWVDbGllbnQqIHNjcm9sbGJhcikKK3sKKyAgICBRU3R5bGVJbnRlcmZhY2VP
cHRpb24gb3B0ID0gaW5pdFNsaWRlclN0eWxlT3B0aW9uKHNjcm9sbGJhcik7CisgICAgUVJlY3Qg
dHJhY2sgPSBtX3N0eWxlSW50ZXJmYWNlLT5zY3JvbGxCYXJTdWJDb250cm9sUmVjdChvcHQsIFFT
dHlsZUludGVyZmFjZTo6U0NfU2Nyb2xsQmFyR3Jvb3ZlKTsKKyAgICByZXR1cm4gc2Nyb2xsYmFy
LT5vcmllbnRhdGlvbigpID09IEhvcml6b250YWxTY3JvbGxiYXIgPyB0cmFjay53aWR0aCgpIDog
dHJhY2suaGVpZ2h0KCk7Cit9CisKK3ZvaWQgU2Nyb2xsYmFyVGhlbWVRU3R5bGU6OnBhaW50U2Ny
b2xsQ29ybmVyKFNjcm9sbFZpZXcqLCBHcmFwaGljc0NvbnRleHQqIGNvbnRleHQsIGNvbnN0IElu
dFJlY3QmIHJlY3QpCit7CisgICAgU3R5bGVQYWludGVyUVN0eWxlIHAodGhpcywgY29udGV4dCk7
CisgICAgaWYgKCFwLmlzVmFsaWQoKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgcC5wYWludFNj
cm9sbENvcm5lcihyZWN0KTsKK30KKworfQorCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9xdC9TY3JvbGxiYXJUaGVtZVFTdHlsZS5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vcXQvU2Nyb2xsYmFyVGhlbWVRU3R5bGUuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi43MDczZmIxNzBhZmVhZjk1
NjJkYjQ5ZDY4MDQ2Y2E5ZmIyOTUzZTZhCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vcXQvU2Nyb2xsYmFyVGhlbWVRU3R5bGUuaApAQCAtMCwwICsxLDY1IEBACisv
KgorICogQ29weXJpZ2h0IChDKSAyMDA4IEFwcGxlIEluYy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4K
KyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1z
LCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRl
ZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlz
dHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0
CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCBy
ZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9j
dW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3Ry
aWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4g
YGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0Yg
TUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0Ug
QVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05U
UklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwg
U1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09P
RFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVT
SU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICog
T0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBU
T1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFO
WSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNF
RCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2lmbmRlZiBTY3Jv
bGxiYXJUaGVtZVFTdHlsZV9oCisjZGVmaW5lIFNjcm9sbGJhclRoZW1lUVN0eWxlX2gKKworI2lu
Y2x1ZGUgIlNjcm9sbGJhclRoZW1lLmgiCisKKyNpbmNsdWRlIDxRdENvcmUvcWdsb2JhbC5oPgor
CituYW1lc3BhY2UgV2ViQ29yZSB7CisKK2NsYXNzIFFTdHlsZUludGVyZmFjZTsKKworY2xhc3Mg
U2Nyb2xsYmFyVGhlbWVRU3R5bGUgOiBwdWJsaWMgU2Nyb2xsYmFyVGhlbWUgeworcHVibGljOgor
ICAgIFNjcm9sbGJhclRoZW1lUVN0eWxlKCk7CisgICAgdmlydHVhbCB+U2Nyb2xsYmFyVGhlbWVR
U3R5bGUoKTsKKworICAgIHZpcnR1YWwgYm9vbCBwYWludChTY3JvbGxiYXJUaGVtZUNsaWVudCos
IEdyYXBoaWNzQ29udGV4dCosIGNvbnN0IEludFJlY3QmIGRpcnR5UmVjdCk7CisgICAgdmlydHVh
bCB2b2lkIHBhaW50U2Nyb2xsQ29ybmVyKFNjcm9sbFZpZXcqLCBHcmFwaGljc0NvbnRleHQqLCBj
b25zdCBJbnRSZWN0JiBjb3JuZXJSZWN0KTsKKworICAgIHZpcnR1YWwgU2Nyb2xsYmFyUGFydCBo
aXRUZXN0KFNjcm9sbGJhclRoZW1lQ2xpZW50KiwgY29uc3QgUGxhdGZvcm1Nb3VzZUV2ZW50Jik7
CisKKyAgICB2aXJ0dWFsIGJvb2wgc2hvdWxkQ2VudGVyT25UaHVtYihTY3JvbGxiYXJUaGVtZUNs
aWVudCosIGNvbnN0IFBsYXRmb3JtTW91c2VFdmVudCYpOworCisgICAgdmlydHVhbCB2b2lkIGlu
dmFsaWRhdGVQYXJ0KFNjcm9sbGJhclRoZW1lQ2xpZW50KiwgU2Nyb2xsYmFyUGFydCk7CisKKyAg
ICB2aXJ0dWFsIGludCB0aHVtYlBvc2l0aW9uKFNjcm9sbGJhclRoZW1lQ2xpZW50Kik7CisgICAg
dmlydHVhbCBpbnQgdGh1bWJMZW5ndGgoU2Nyb2xsYmFyVGhlbWVDbGllbnQqKTsKKyAgICB2aXJ0
dWFsIGludCB0cmFja1Bvc2l0aW9uKFNjcm9sbGJhclRoZW1lQ2xpZW50Kik7CisgICAgdmlydHVh
bCBpbnQgdHJhY2tMZW5ndGgoU2Nyb2xsYmFyVGhlbWVDbGllbnQqKTsKKworICAgIHZpcnR1YWwg
aW50IHNjcm9sbGJhclRoaWNrbmVzcyhTY3JvbGxiYXJDb250cm9sU2l6ZSA9IFJlZ3VsYXJTY3Jv
bGxiYXIpOworCisgICAgUVN0eWxlSW50ZXJmYWNlKiBzdHlsZUludGVyZmFjZSgpIHsgcmV0dXJu
IG1fc3R5bGVJbnRlcmZhY2UuZ2V0KCk7IH0KKworcHJpdmF0ZToKKyAgICBPd25QdHI8UVN0eWxl
SW50ZXJmYWNlPiBtX3N0eWxlSW50ZXJmYWNlOworfTsKKworfQorI2VuZGlmCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViS2l0L1dlYktpdDEucHJvIGIvU291cmNlL1dlYktpdC9XZWJLaXQxLnBybwpp
bmRleCBhZTIzYzRlY2E0NDEyYTA2NTIzYWJlYjY4MGFiODQzODA2NzliMjQ1Li4zODBhNDkyMDZi
MzZjMzk2YTAwODg3N2RkOWQ1ZmIwMmE5NzY5NzY0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0
L1dlYktpdDEucHJvCisrKyBiL1NvdXJjZS9XZWJLaXQvV2ViS2l0MS5wcm8KQEAgLTQ5LDEyICs0
OSwxMSBAQCBTT1VSQ0VTICs9IFwKICAgICAkJFBXRC9xdC9XZWJDb3JlU3VwcG9ydC9QYWdlQ2xp
ZW50UXQuY3BwIFwKICAgICAkJFBXRC9xdC9XZWJDb3JlU3VwcG9ydC9Qb3B1cE1lbnVRdC5jcHAg
XAogICAgICQkUFdEL3F0L1dlYkNvcmVTdXBwb3J0L1F0UGxhdGZvcm1QbHVnaW4uY3BwIFwKLSAg
ICAkJFBXRC9xdC9XZWJDb3JlU3VwcG9ydC9SZW5kZXJUaGVtZVFTdHlsZS5jcHAgXAotICAgICQk
UFdEL3F0L1dlYkNvcmVTdXBwb3J0L1Njcm9sbGJhclRoZW1lUVN0eWxlLmNwcCBcCiAgICAgJCRQ
V0QvcXQvV2ViQ29yZVN1cHBvcnQvU2VhcmNoUG9wdXBNZW51UXQuY3BwIFwKICAgICAkJFBXRC9x
dC9XZWJDb3JlU3VwcG9ydC9UZXh0Q2hlY2tlckNsaWVudFF0LmNwcCBcCiAgICAgJCRQV0QvcXQv
V2ViQ29yZVN1cHBvcnQvUGxhdGZvcm1TdHJhdGVnaWVzUXQuY3BwIFwKLSAgICAkJFBXRC9xdC9X
ZWJDb3JlU3VwcG9ydC9XZWJFdmVudENvbnZlcnNpb24uY3BwCisgICAgJCRQV0QvcXQvV2ViQ29y
ZVN1cHBvcnQvV2ViRXZlbnRDb252ZXJzaW9uLmNwcCBcCisgICAgJCRQV0QvcXQvV2ViQ29yZVN1
cHBvcnQvUVdlYlN0eWxlLmNwcCBcCiAKIEhFQURFUlMgKz0gXAogICAgICQkUFdEL3F0L0FwaS9x
d2ViZnJhbWUuaCBcCkBAIC04NywxMiArODYsMTEgQEAgSEVBREVSUyArPSBcCiAgICAgJCRQV0Qv
cXQvV2ViQ29yZVN1cHBvcnQvUGFnZUNsaWVudFF0LmggXAogICAgICQkUFdEL3F0L1dlYkNvcmVT
dXBwb3J0L1BvcHVwTWVudVF0LmggXAogICAgICQkUFdEL3F0L1dlYkNvcmVTdXBwb3J0L1F0UGxh
dGZvcm1QbHVnaW4uaCBcCi0gICAgJCRQV0QvcXQvV2ViQ29yZVN1cHBvcnQvUmVuZGVyVGhlbWVR
U3R5bGUuaCBcCi0gICAgJCRQV0QvcXQvV2ViQ29yZVN1cHBvcnQvU2Nyb2xsYmFyVGhlbWVRU3R5
bGUuaCBcCiAgICAgJCRQV0QvcXQvV2ViQ29yZVN1cHBvcnQvU2VhcmNoUG9wdXBNZW51UXQuaCBc
CiAgICAgJCRQV0QvcXQvV2ViQ29yZVN1cHBvcnQvVGV4dENoZWNrZXJDbGllbnRRdC5oIFwKICAg
ICAkJFBXRC9xdC9XZWJDb3JlU3VwcG9ydC9QbGF0Zm9ybVN0cmF0ZWdpZXNRdC5oIFwKLSAgICAk
JFBXRC9xdC9XZWJDb3JlU3VwcG9ydC9XZWJFdmVudENvbnZlcnNpb24uaAorICAgICQkUFdEL3F0
L1dlYkNvcmVTdXBwb3J0L1dlYkV2ZW50Q29udmVyc2lvbi5oIFwKKyAgICAkJFBXRC9xdC9XZWJD
b3JlU3VwcG9ydC9RV2ViU3R5bGUuaAogCiBjb250YWlucyhRVF9DT05GSUcsYWNjZXNzaWJpbGl0
eSkgewogICAgIFNPVVJDRVMgKz0gJCRQV0QvcXQvQXBpL3F3ZWJ2aWV3YWNjZXNzaWJsZS5jcHAK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvcXQvV2ViQ29yZVN1cHBvcnQvSW5pdFdlYkNvcmVR
dC5jcHAgYi9Tb3VyY2UvV2ViS2l0L3F0L1dlYkNvcmVTdXBwb3J0L0luaXRXZWJDb3JlUXQuY3Bw
CmluZGV4IGM2M2NjYjA0MmIwNTQzMmNlOTUyZjU1MTllNTBhNTIzNDg5N2U5YzEuLjY3ZWQxMDk4
OTYzMGMzN2RjMjRlNzIzNjBiY2RjMTljNmQ3ZWRmZWUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJL
aXQvcXQvV2ViQ29yZVN1cHBvcnQvSW5pdFdlYkNvcmVRdC5jcHAKKysrIGIvU291cmNlL1dlYktp
dC9xdC9XZWJDb3JlU3VwcG9ydC9Jbml0V2ViQ29yZVF0LmNwcApAQCAtMzMsNiArMzMsNyBAQAog
I2luY2x1ZGUgIkltYWdlLmgiCiAjaW5jbHVkZSAiTm90SW1wbGVtZW50ZWQuaCIKICNpbmNsdWRl
ICJQbGF0Zm9ybVN0cmF0ZWdpZXNRdC5oIgorI2luY2x1ZGUgIlFXZWJTdHlsZS5oIgogI2luY2x1
ZGUgIlJlbmRlclRoZW1lUVN0eWxlLmgiCiAjaW5jbHVkZSAiU2NyaXB0Q29udHJvbGxlci5oIgog
I2luY2x1ZGUgIlNjcm9sbGJhclRoZW1lUVN0eWxlLmgiCkBAIC03Niw2ICs3Nyw3IEBAIHZvaWQg
aW5pdGlhbGl6ZVdlYkNvcmVRdCgpCiAgICAgUGxhdGZvcm1TdHJhdGVnaWVzUXQ6OmluaXRpYWxp
emUoKTsKICAgICBRdFdlYkVsZW1lbnRSdW50aW1lOjppbml0aWFsaXplKCk7CiAKKyAgICBSZW5k
ZXJUaGVtZVFTdHlsZTo6c2V0U3R5bGVGYWN0b3J5RnVuY3Rpb24oV2ViS2l0OjpRV2ViU3R5bGU6
OmNyZWF0ZSk7CiAgICAgUmVuZGVyVGhlbWVRdDo6c2V0Q3VzdG9tVGhlbWUoUmVuZGVyVGhlbWVR
U3R5bGU6OmNyZWF0ZSwgbmV3IFNjcm9sbGJhclRoZW1lUVN0eWxlKTsKIAogI2lmIFVTRShRVEtJ
VCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvcXQvV2ViQ29yZVN1cHBvcnQvUVdlYlN0eWxl
LmNwcCBiL1NvdXJjZS9XZWJLaXQvcXQvV2ViQ29yZVN1cHBvcnQvUVdlYlN0eWxlLmNwcApuZXcg
ZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwLi4yZmY5ZWJiM2YwOTQ4YzliNWYyYmJlYTJmYmRlMWYzZjU3NjgxNjZhCi0tLSAvZGV2
L251bGwKKysrIGIvU291cmNlL1dlYktpdC9xdC9XZWJDb3JlU3VwcG9ydC9RV2ViU3R5bGUuY3Bw
CkBAIC0wLDAgKzEsNTQzIEBACisvKgorICogVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIHRoZW1l
IGltcGxlbWVudGF0aW9uIGZvciBmb3JtIGNvbnRyb2xzIGluIFdlYkNvcmUuCisgKgorICogQ29w
eXJpZ2h0IChDKSAyMDEyIERpZ2lhIFBsYyBhbmQvb3IgaXRzIHN1YnNpZGlhcnkoLWllcykuCisg
KiBDb3B5cmlnaHQgKEMpIDIwMTEtMjAxMiBOb2tpYSBDb3Jwb3JhdGlvbiBhbmQvb3IgaXRzIHN1
YnNpZGlhcnkoLWllcykuCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlv
dSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJt
cyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgYXMgcHVibGlz
aGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICogdmVyc2lvbiAy
IG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgor
ICoKKyAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdp
bGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4g
dGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZP
UiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiBMaWJyYXJ5IEdlbmVyYWwg
UHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUg
cmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNl
CisgKiBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAg
SWYgbm90LCB3cml0ZSB0bworICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwg
NTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKKyAqIEJvc3RvbiwgTUEgMDIxMTAtMTMw
MSwgVVNBLgorICoKKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisKKyNpbmNsdWRlICJRV2Vi
U3R5bGUuaCIKKworI2luY2x1ZGUgPFFBcHBsaWNhdGlvbj4KKyNpbmNsdWRlIDxRTGluZUVkaXQ+
CisjaW5jbHVkZSA8UU1hY1N0eWxlPgorI2luY2x1ZGUgPFFQYWludGVyPgorI2luY2x1ZGUgPFFQ
dXNoQnV0dG9uPgorI2lmbmRlZiBRVF9OT19TVFlMRV9QTEFTVElRVUUKKyNpbmNsdWRlIDxRUGxh
c3RpcXVlU3R5bGU+CisjZW5kaWYKKyNpbmNsdWRlIDxRU3R5bGVGYWN0b3J5PgorI2luY2x1ZGUg
PFFTdHlsZU9wdGlvbj4KKworI2luY2x1ZGUgPFFXZWJQYWdlQ2xpZW50Lmg+CisKK3VzaW5nIG5h
bWVzcGFjZSBXZWJDb3JlOworCituYW1lc3BhY2UgV2ViS2l0IHsKKworc3RhdGljIFFTdHlsZTo6
U3RhdGUgY29udmVydFRvUVN0eWxlU3RhdGUoUVN0eWxlSW50ZXJmYWNlOjpTdGF0ZSBzdGF0ZSkK
K3sKKyAgICBRU3R5bGU6OlN0YXRlIHJlc3VsdDsKKyNkZWZpbmUgQ09OVkVSVF9TVEFURShQcm94
aWVkU3RhdGUsIFZhbHVlKSBcCisgICAgaWYgKHN0YXRlICYgUVN0eWxlSW50ZXJmYWNlOjpQcm94
aWVkU3RhdGUpIFwKKyAgICAgICAgcmVzdWx0IHw9IFFTdHlsZTo6UHJveGllZFN0YXRlOworCisg
ICAgRk9SX0VBQ0hfTUFQUEVEX1NUQVRFKENPTlZFUlRfU1RBVEUsICkKKworI3VuZGVmIENPTlZF
UlRfU1RBVEUKKworICAgIHJldHVybiByZXN1bHQ7Cit9CisKK3N0YXRpYyBRU3R5bGU6OlN1YkNv
bnRyb2wgY29udmVydFRvUVN0eWxlU3ViQ29udHJvbChRU3R5bGVJbnRlcmZhY2U6OlN1YkNvbnRy
b2wgc2MpCit7CisjZGVmaW5lIENPTlZFUlRfU1VCQ09OVFJPTChGLCBWYWx1ZSkgXAorICAgIGNh
c2UgUVN0eWxlSW50ZXJmYWNlOjpGOiByZXR1cm4gUVN0eWxlOjpGCisKKyAgICBzd2l0Y2ggKHNj
KSB7CisgICAgICAgIEZPUl9FQUNIX1NVQkNPTlRST0woQ09OVkVSVF9TVUJDT05UUk9MLCBTRU1J
Q09MT04pOworICAgIH0KKyAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICByZXR1cm4gUVN0
eWxlOjpTQ19Ob25lOworI3VuZGVmIENPTlZFUlRfU1VCQ09OVFJPTAorfQorCitzdGF0aWMgdm9p
ZCBpbml0R2VuZXJpY1N0eWxlT3B0aW9uKFFTdHlsZU9wdGlvbiogb3B0aW9uLCBRV2lkZ2V0KiB3
aWRnZXQsIGNvbnN0IFFTdHlsZUludGVyZmFjZU9wdGlvbiYgaW50ZXJmYWNlT3B0aW9uKQorewor
ICAgIGlmICh3aWRnZXQpCisgICAgICAgIG9wdGlvbi0+aW5pdCh3aWRnZXQpOworICAgIGVsc2UK
KyAgICAgICAgLy8gSWYgYSB3aWRnZXQgaXMgbm90IGRpcmVjdGx5IGF2YWlsYWJsZSBmb3IgcmVu
ZGVyaW5nLCB3ZSBmYWxsYmFjayB0byBkZWZhdWx0CisgICAgICAgIC8vIHZhbHVlIGZvciBhbiBh
Y3RpdmUgd2lkZ2V0LgorICAgICAgICBvcHRpb24tPnN0YXRlID0gUVN0eWxlOjpTdGF0ZV9BY3Rp
dmUgfCBRU3R5bGU6OlN0YXRlX0VuYWJsZWQ7CisKKyAgICBvcHRpb24tPnJlY3QgPSBpbnRlcmZh
Y2VPcHRpb24ucmVjdDsKKyAgICBvcHRpb24tPnN0YXRlID0gY29udmVydFRvUVN0eWxlU3RhdGUo
aW50ZXJmYWNlT3B0aW9uLnN0YXRlKTsKKyAgICBvcHRpb24tPmRpcmVjdGlvbiA9IGludGVyZmFj
ZU9wdGlvbi5kaXJlY3Rpb247CisgICAgb3B0aW9uLT5wYWxldHRlID0gaW50ZXJmYWNlT3B0aW9u
LnBhbGV0dGU7Cit9CisKK3N0YXRpYyB2b2lkIGluaXRTcGVjaWZpY1N0eWxlT3B0aW9uKFFTdHls
ZU9wdGlvbiosIGNvbnN0IFFTdHlsZUludGVyZmFjZU9wdGlvbiYpCit7Cit9CisKK3N0YXRpYyB2
b2lkIGluaXRTcGVjaWZpY1N0eWxlT3B0aW9uKFFTdHlsZU9wdGlvblNsaWRlciogc2xpZGVyT3B0
aW9uLCBjb25zdCBRU3R5bGVJbnRlcmZhY2VPcHRpb24mIGludGVyZmFjZU9wdGlvbikKK3sKKyAg
ICBzbGlkZXJPcHRpb24tPm9yaWVudGF0aW9uID0gaW50ZXJmYWNlT3B0aW9uLnNsaWRlci5vcmll
bnRhdGlvbjsKKyAgICBzbGlkZXJPcHRpb24tPnVwc2lkZURvd24gPSBpbnRlcmZhY2VPcHRpb24u
c2xpZGVyLnVwc2lkZURvd247CisgICAgc2xpZGVyT3B0aW9uLT5taW5pbXVtID0gaW50ZXJmYWNl
T3B0aW9uLnNsaWRlci5taW5pbXVtOworICAgIHNsaWRlck9wdGlvbi0+bWF4aW11bSA9IGludGVy
ZmFjZU9wdGlvbi5zbGlkZXIubWF4aW11bTsKKyAgICBzbGlkZXJPcHRpb24tPnNsaWRlclBvc2l0
aW9uID0gaW50ZXJmYWNlT3B0aW9uLnNsaWRlci5wb3NpdGlvbjsKKyAgICBzbGlkZXJPcHRpb24t
PnNsaWRlclZhbHVlID0gaW50ZXJmYWNlT3B0aW9uLnNsaWRlci52YWx1ZTsKKyAgICBzbGlkZXJP
cHRpb24tPnNpbmdsZVN0ZXAgPSBpbnRlcmZhY2VPcHRpb24uc2xpZGVyLnNpbmdsZVN0ZXA7Cisg
ICAgc2xpZGVyT3B0aW9uLT5wYWdlU3RlcCA9IGludGVyZmFjZU9wdGlvbi5zbGlkZXIucGFnZVN0
ZXA7CisgICAgc2xpZGVyT3B0aW9uLT5hY3RpdmVTdWJDb250cm9scyA9IGNvbnZlcnRUb1FTdHls
ZVN1YkNvbnRyb2woaW50ZXJmYWNlT3B0aW9uLnNsaWRlci5hY3RpdmVTdWJDb250cm9scyk7Cit9
CisKK3RlbXBsYXRlIDx0eXBlbmFtZSBTdHlsZU9wdGlvbj4KK2NsYXNzIE1hcHBlZFN0eWxlT3B0
aW9uIDogcHVibGljIFN0eWxlT3B0aW9uIHsKKworcHVibGljOgorICAgIE1hcHBlZFN0eWxlT3B0
aW9uKFFXaWRnZXQqIHdpZGdldCwgY29uc3QgUVN0eWxlSW50ZXJmYWNlT3B0aW9uJiBpbnRlcmZh
Y2VPcHRpb24pCisgICAgeworICAgICAgICBpbml0R2VuZXJpY1N0eWxlT3B0aW9uKHRoaXMsIHdp
ZGdldCwgaW50ZXJmYWNlT3B0aW9uKTsKKyAgICAgICAgaW5pdFNwZWNpZmljU3R5bGVPcHRpb24o
dGhpcywgaW50ZXJmYWNlT3B0aW9uKTsKKyAgICB9Cit9OworCitzdGF0aWMgUVN0eWxlOjpQaXhl
bE1ldHJpYyBjb252ZXJ0UGl4ZWxNZXRyaWMoUVN0eWxlSW50ZXJmYWNlOjpQaXhlbE1ldHJpYyBz
dGF0ZSkKK3sKKyNkZWZpbmUgQ09OVkVSVF9NRVRSSUMoTWV0cmljKSBcCisgICAgY2FzZSBRU3R5
bGVJbnRlcmZhY2U6Ok1ldHJpYzogcmV0dXJuIFFTdHlsZTo6TWV0cmljCisKKyAgICBzd2l0Y2gg
KHN0YXRlKSB7CisgICAgICAgIEZPUl9FQUNIX01BUFBFRF9NRVRSSUMoQ09OVkVSVF9NRVRSSUMs
IFNFTUlDT0xPTik7CisgICAgfQorICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgIHJldHVy
biBRU3R5bGU6OlBNX0N1c3RvbUJhc2U7CisKKyN1bmRlZiBDT05WRVJUX01FVFJJQworfQorCitz
dGF0aWMgUVN0eWxlSW50ZXJmYWNlOjpTdWJDb250cm9sIGNvbnZlcnRUb1FTdHlsZUludGVyZmFj
ZVN1YkNvbnRyb2woUVN0eWxlOjpTdWJDb250cm9sIHNjKQoreworI2RlZmluZSBDT05WRVJUX1NV
QkNPTlRST0woRiwgVmFsdWUpIFwKKyAgICBjYXNlIFFTdHlsZTo6RjogcmV0dXJuIFFTdHlsZUlu
dGVyZmFjZTo6RgorCisgICAgc3dpdGNoIChzYykgeworICAgICAgICBGT1JfRUFDSF9TVUJDT05U
Uk9MKENPTlZFUlRfU1VCQ09OVFJPTCwgU0VNSUNPTE9OKTsKKyAgICB9CisgICAgQVNTRVJUX05P
VF9SRUFDSEVEKCk7CisgICAgcmV0dXJuIFFTdHlsZUludGVyZmFjZTo6U0NfTm9uZTsKKyN1bmRl
ZiBDT05WRVJUX1NVQkNPTlRST0wKK30KKworUVdlYlN0eWxlOjpRV2ViU3R5bGUoUGFnZSogcGFn
ZSkKKyAgICA6IG1fcGFnZShwYWdlKQorICAgICwgbV9zdHlsZSgwKQoreworICAgIG1fZmFsbGJh
Y2tTdHlsZSA9IFFTdHlsZUZhY3Rvcnk6OmNyZWF0ZShRTGF0aW4xU3RyaW5nKCJ3aW5kb3dzIikp
OworICAgIG1fb3duRmFsbGJhY2tTdHlsZSA9IHRydWU7CisgICAgaWYgKCFtX2ZhbGxiYWNrU3R5
bGUpIHsKKyAgICAgICAgbV9mYWxsYmFja1N0eWxlID0gUUFwcGxpY2F0aW9uOjpzdHlsZSgpOwor
ICAgICAgICBtX293bkZhbGxiYWNrU3R5bGUgPSBmYWxzZTsKKyAgICB9Cit9CisKK1FXZWJTdHls
ZTo6flFXZWJTdHlsZSgpCit7CisgICAgaWYgKG1fb3duRmFsbGJhY2tTdHlsZSkKKyAgICAgICAg
ZGVsZXRlIG1fZmFsbGJhY2tTdHlsZTsKK30KKworUVJlY3QgUVdlYlN0eWxlOjpidXR0b25TdWJF
bGVtZW50UmVjdChRU3R5bGVJbnRlcmZhY2U6OkJ1dHRvblN1YkVsZW1lbnQgYnV0dG9uRWxlbWVu
dCwgU3RhdGUgc3RhdGUsIGNvbnN0IFFSZWN0JiBvcmlnaW5hbFJlY3QpIGNvbnN0Cit7CisgICAg
ZW5zdXJlU3R5bGUoKTsKKworICAgIFFTdHlsZU9wdGlvbkJ1dHRvbiBvcHRpb247CisgICAgb3B0
aW9uLnN0YXRlID0gY29udmVydFRvUVN0eWxlU3RhdGUoc3RhdGUpOworICAgIG9wdGlvbi5yZWN0
ID0gb3JpZ2luYWxSZWN0OworCisgICAgUVN0eWxlOjpTdWJFbGVtZW50IHN1YkVsZW1lbnQgPSBR
U3R5bGU6OlNFX0N1c3RvbUJhc2U7CisgICAgc3dpdGNoIChidXR0b25FbGVtZW50KSB7CisgICAg
Y2FzZSBQdXNoQnV0dG9uTGF5b3V0SXRlbTogc3ViRWxlbWVudCA9IFFTdHlsZTo6U0VfUHVzaEJ1
dHRvbkxheW91dEl0ZW07IGJyZWFrOworICAgIGNhc2UgUHVzaEJ1dHRvbkNvbnRlbnRzOiBzdWJF
bGVtZW50ID0gUVN0eWxlOjpTRV9QdXNoQnV0dG9uQ29udGVudHM7IGJyZWFrOworICAgIGRlZmF1
bHQ6IEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgIH0KKyAgICByZXR1cm4gbV9zdHlsZS0+c3Vi
RWxlbWVudFJlY3Qoc3ViRWxlbWVudCwgJm9wdGlvbik7Cit9CisKK2ludCBRV2ViU3R5bGU6OmZp
bmRGcmFtZUxpbmVXaWR0aCgpIGNvbnN0Cit7CisgICAgZW5zdXJlU3R5bGUoKTsKKworICAgIGlm
ICghbV9saW5lRWRpdCkKKyAgICAgICAgbV9saW5lRWRpdC5yZXNldChuZXcgUUxpbmVFZGl0KCkp
OworCisgICAgcmV0dXJuIG1fc3R5bGUtPnBpeGVsTWV0cmljKFFTdHlsZTo6UE1fRGVmYXVsdEZy
YW1lV2lkdGgsIDAsIG1fbGluZUVkaXQuZGF0YSgpKTsKK30KKworaW50IFFXZWJTdHlsZTo6c2lt
cGxlUGl4ZWxNZXRyaWMoUVN0eWxlSW50ZXJmYWNlOjpQaXhlbE1ldHJpYyBtZXRyaWMsIFN0YXRl
IHN0YXRlLCBRT2JqZWN0ICp3aWRnZXQpIGNvbnN0Cit7CisgICAgZW5zdXJlU3R5bGUoKTsKKwor
ICAgIFFTdHlsZU9wdGlvbiBvcHQ7CisgICAgb3B0LnN0YXRlID0gY29udmVydFRvUVN0eWxlU3Rh
dGUoc3RhdGUpOworICAgIHJldHVybiBtX3N0eWxlLT5waXhlbE1ldHJpYyhjb252ZXJ0UGl4ZWxN
ZXRyaWMobWV0cmljKSwgJm9wdCwgcW9iamVjdF9jYXN0PFFXaWRnZXQqPih3aWRnZXQpKTsKK30K
KworaW50IFFXZWJTdHlsZTo6YnV0dG9uTWFyZ2luKFN0YXRlIHN0YXRlLCBjb25zdCBRUmVjdCYg
b3JpZ2luYWxSZWN0KSBjb25zdAoreworICAgIGVuc3VyZVN0eWxlKCk7CisKKyAgICBRU3R5bGVP
cHRpb25CdXR0b24gc3R5bGVPcHRpb247CisgICAgc3R5bGVPcHRpb24uc3RhdGUgPSBjb252ZXJ0
VG9RU3R5bGVTdGF0ZShzdGF0ZSk7CisgICAgc3R5bGVPcHRpb24ucmVjdCA9IG9yaWdpbmFsUmVj
dDsKKyAgICByZXR1cm4gbV9zdHlsZS0+cGl4ZWxNZXRyaWMoUVN0eWxlOjpQTV9CdXR0b25NYXJn
aW4sICZzdHlsZU9wdGlvbiwgMCk7Cit9CisKK2ludCBRV2ViU3R5bGU6OnNsaWRlckxlbmd0aChR
dDo6T3JpZW50YXRpb24gb3JpZW50YXRpb24pIGNvbnN0Cit7CisgICAgZW5zdXJlU3R5bGUoKTsK
KworICAgIFFTdHlsZU9wdGlvblNsaWRlciBvcHQ7CisgICAgb3B0Lm9yaWVudGF0aW9uID0gb3Jp
ZW50YXRpb247CisgICAgcmV0dXJuIG1fc3R5bGUtPnBpeGVsTWV0cmljKFFTdHlsZTo6UE1fU2xp
ZGVyTGVuZ3RoLCAmb3B0KTsKK30KKworaW50IFFXZWJTdHlsZTo6c2xpZGVyVGhpY2tuZXNzKFF0
OjpPcmllbnRhdGlvbiBvcmllbnRhdGlvbikgY29uc3QKK3sKKyAgICBlbnN1cmVTdHlsZSgpOwor
CisgICAgUVN0eWxlT3B0aW9uU2xpZGVyIG9wdDsKKyAgICBvcHQub3JpZW50YXRpb24gPSBvcmll
bnRhdGlvbjsKKyAgICByZXR1cm4gbV9zdHlsZS0+cGl4ZWxNZXRyaWMoUVN0eWxlOjpQTV9TbGlk
ZXJUaGlja25lc3MsICZvcHQpOworfQorCitpbnQgUVdlYlN0eWxlOjpwcm9ncmVzc0JhckNodW5r
V2lkdGgoY29uc3QgUVNpemUmIHNpemUpIGNvbnN0Cit7CisgICAgZW5zdXJlU3R5bGUoKTsKKwor
ICAgIFFTdHlsZU9wdGlvblByb2dyZXNzQmFyVjIgb3B0aW9uOworICAgIG9wdGlvbi5yZWN0LnNl
dFNpemUoc2l6ZSk7CisgICAgLy8gRklYTUU6IFVudGlsIGh0dHA6Ly9idWdyZXBvcnRzLnF0Lm5v
a2lhLmNvbS9icm93c2UvUVRCVUctOTE3MSBpcyBmaXhlZCwKKyAgICAvLyB3ZSBzaW11bGF0ZSBv
bmUgc3F1YXJlIGFuaW1hdGluZyBhY3Jvc3MgdGhlIHByb2dyZXNzIGJhci4KKyAgICByZXR1cm4g
bV9zdHlsZS0+cGl4ZWxNZXRyaWMoUVN0eWxlOjpQTV9Qcm9ncmVzc0JhckNodW5rV2lkdGgsICZv
cHRpb24pOworfQorCit2b2lkIFFXZWJTdHlsZTo6Z2V0QnV0dG9uTWV0cmljcyhRU3RyaW5nICpi
dXR0b25Gb250RmFtaWx5LCBpbnQgKmJ1dHRvbkZvbnRQaXhlbFNpemUpIGNvbnN0Cit7CisgICAg
UVB1c2hCdXR0b24gYnV0dG9uOworICAgIFFGb250IGRlZmF1bHRCdXR0b25Gb250ID0gUUFwcGxp
Y2F0aW9uOjpmb250KCZidXR0b24pOworICAgICpidXR0b25Gb250RmFtaWx5ID0gZGVmYXVsdEJ1
dHRvbkZvbnQuZmFtaWx5KCk7CisgICAgKmJ1dHRvbkZvbnRQaXhlbFNpemUgPSAwOworI2lmZGVm
IFFfV1NfTUFDCisgICAgYnV0dG9uLnNldEF0dHJpYnV0ZShRdDo6V0FfTWFjU21hbGxTaXplKTsK
KyAgICBRRm9udEluZm8gZm9udEluZm8oZGVmYXVsdEJ1dHRvbkZvbnQpOworICAgICpidXR0b25G
b250UGl4ZWxTaXplID0gZm9udEluZm8ucGl4ZWxTaXplKCk7CisjZW5kaWYKK30KKworUVNpemUg
UVdlYlN0eWxlOjpzaXplRnJvbUNvbnRlbnRzKFFTdHlsZUludGVyZmFjZTo6Q29udGVudHNUeXBl
IHR5cGUsIFFTdHlsZUludGVyZmFjZTo6U3RhdGUgc3RhdGUsIGNvbnN0IFFTaXplJiBjb250ZW50
c1NpemUpIGNvbnN0Cit7CisgICAgZW5zdXJlU3R5bGUoKTsKKworICAgIFFTdHlsZU9wdGlvbiBv
cHQ7CisgICAgb3B0LnN0YXRlID0gY29udmVydFRvUVN0eWxlU3RhdGUoc3RhdGUpOworCisgICAg
UVN0eWxlOjpDb250ZW50c1R5cGUgY29udGVudHNUeXBlID0gUVN0eWxlOjpDVF9DdXN0b21CYXNl
OworICAgIHN3aXRjaCAodHlwZSkgeworICAgIGNhc2UgUVN0eWxlSW50ZXJmYWNlOjpDVF9Db21i
b0JveDogY29udGVudHNUeXBlID0gUVN0eWxlOjpDVF9Db21ib0JveDsgYnJlYWs7CisgICAgY2Fz
ZSBRU3R5bGVJbnRlcmZhY2U6OkNUX1B1c2hCdXR0b246IGNvbnRlbnRzVHlwZSA9IFFTdHlsZTo6
Q1RfUHVzaEJ1dHRvbjsgYnJlYWs7CisgICAgfQorCisgICAgcmV0dXJuIG1fc3R5bGUtPnNpemVG
cm9tQ29udGVudHMoY29udGVudHNUeXBlLCAmb3B0LCBjb250ZW50c1NpemUpOworfQorCit2b2lk
IFFXZWJTdHlsZTo6cGFpbnRCdXR0b24oUVBhaW50ZXIqIHBhaW50ZXIsIFFTdHlsZUludGVyZmFj
ZTo6QnV0dG9uVHlwZSB0eXBlLCBjb25zdCBRU3R5bGVJbnRlcmZhY2VPcHRpb24gJnByb3h5T3B0
aW9uLCBRT2JqZWN0ICp3aWRnZXRPYmopCit7CisgICAgZW5zdXJlU3R5bGUoKTsKKworICAgIFFX
aWRnZXQqIHdpZGdldCA9IHFvYmplY3RfY2FzdDxRV2lkZ2V0Kj4od2lkZ2V0T2JqKTsKKyAgICBN
YXBwZWRTdHlsZU9wdGlvbjxRU3R5bGVPcHRpb25CdXR0b24+IG9wdGlvbih3aWRnZXQsIHByb3h5
T3B0aW9uKTsKKworICAgIGlmICh0eXBlID09IFB1c2hCdXR0b24pIHsKKyAgICAgICAgbV9zdHls
ZS0+ZHJhd0NvbnRyb2woUVN0eWxlOjpDRV9QdXNoQnV0dG9uLCAmb3B0aW9uLCBwYWludGVyLCB3
aWRnZXQpOworICAgIH0gZWxzZSBpZiAodHlwZSA9PSBSYWRpb0J1dHRvbikKKyAgICAgICBtX3N0
eWxlLT5kcmF3Q29udHJvbChRU3R5bGU6OkNFX1JhZGlvQnV0dG9uLCAmb3B0aW9uLCBwYWludGVy
LCB3aWRnZXQpOworICAgIGVsc2UgaWYgKHR5cGUgPT0gQ2hlY2tCb3gpCisgICAgICAgIG1fc3R5
bGUtPmRyYXdDb250cm9sKFFTdHlsZTo6Q0VfQ2hlY2tCb3gsICZvcHRpb24sIHBhaW50ZXIsIHdp
ZGdldCk7Cit9CisKK3ZvaWQgUVdlYlN0eWxlOjpwYWludFRleHRGaWVsZChRUGFpbnRlciAqcGFp
bnRlciwgY29uc3QgUVN0eWxlSW50ZXJmYWNlT3B0aW9uICZwcm94eU9wdGlvbiwgUU9iamVjdCAq
d2lkZ2V0T2JqKQoreworICAgIGVuc3VyZVN0eWxlKCk7CisKKyAgICBRV2lkZ2V0KiB3aWRnZXQg
PSBxb2JqZWN0X2Nhc3Q8UVdpZGdldCo+KHdpZGdldE9iaik7CisKKyAgICBNYXBwZWRTdHlsZU9w
dGlvbjxRU3R5bGVPcHRpb25GcmFtZVYyPiBwYW5lbCh3aWRnZXQsIHByb3h5T3B0aW9uKTsKKwor
ICAgIHBhbmVsLmxpbmVXaWR0aCA9IGZpbmRGcmFtZUxpbmVXaWR0aCgpOworICAgIHBhbmVsLmZl
YXR1cmVzID0gUVN0eWxlT3B0aW9uRnJhbWVWMjo6Tm9uZTsKKworICAgIG1fc3R5bGUtPmRyYXdQ
cmltaXRpdmUoUVN0eWxlOjpQRV9QYW5lbExpbmVFZGl0LCAmcGFuZWwsIHBhaW50ZXIsIHdpZGdl
dCk7Cit9CisKK3ZvaWQgUVdlYlN0eWxlOjpwYWludENvbWJvQm94KFFQYWludGVyICpwYWludGVy
LCBjb25zdCBRU3R5bGVJbnRlcmZhY2VPcHRpb24gJnByb3h5T3B0aW9uLCBRT2JqZWN0KiB3aWRn
ZXRPYmopCit7CisgICAgZW5zdXJlU3R5bGUoKTsKKyAgICBRV2lkZ2V0KiB3aWRnZXQgPSBxb2Jq
ZWN0X2Nhc3Q8UVdpZGdldCo+KHdpZGdldE9iaik7CisKKyAgICBNYXBwZWRTdHlsZU9wdGlvbjxR
U3R5bGVPcHRpb25Db21ib0JveD4gb3B0KHdpZGdldCwgcHJveHlPcHRpb24pOworCisgICAgSW50
UmVjdCByZWN0ID0gb3B0LnJlY3Q7CisKKyNpZiBkZWZpbmVkKFFfV1NfTUFDKSAmJiAhZGVmaW5l
ZChRVF9OT19TVFlMRV9NQUMpCisgICAgLy8gUU1hY1N0eWxlIG1ha2VzIHRoZSBjb21ibyBib3hl
cyBhIGxpdHRsZSBiaXQgc21hbGxlciB0byBsZWF2ZSBzcGFjZSBmb3IgdGhlIGZvY3VzIHJlY3Qu
CisgICAgLy8gQmVjYXVzZSBvZiBpdCwgdGhlIGNvbWJvIGJ1dHRvbiBpcyBkcmF3biBhdCBhIHBv
aW50IHRvIHRoZSBsZWZ0IG9mIHdoZXJlIGl0IHdhcyBleHBlY3QgdG8gYmUgYW5kIG1heSBlbmQg
dXAKKyAgICAvLyBvdmVybGFwcGVkIHdpdGggdGhlIHRleHQuIFRoaXMgd2lsbCBmb3JjZSBRTWFj
U3R5bGUgdG8gZHJhdyB0aGUgY29tYm8gYm94IHdpdGggdGhlIGV4cGVjdGVkIHdpZHRoLgorICAg
IGlmIChxb2JqZWN0X2Nhc3Q8UU1hY1N0eWxlKj4obV9zdHlsZSkpCisgICAgICAgIHJlY3QuaW5m
bGF0ZVgoMyk7CisjZW5kaWYKKworICAgIGNvbnN0IFFQb2ludCB0b3BMZWZ0ID0gcmVjdC5sb2Nh
dGlvbigpOworICAgIHBhaW50ZXItPnRyYW5zbGF0ZSh0b3BMZWZ0KTsKKyAgICBvcHQucmVjdC5t
b3ZlVG8oUVBvaW50KDAsIDApKTsKKyAgICBvcHQucmVjdC5zZXRTaXplKHJlY3Quc2l6ZSgpKTsK
KworICAgIG1fc3R5bGUtPmRyYXdDb21wbGV4Q29udHJvbChRU3R5bGU6OkNDX0NvbWJvQm94LCAm
b3B0LCBwYWludGVyLCB3aWRnZXQpOworICAgIHBhaW50ZXItPnRyYW5zbGF0ZSgtdG9wTGVmdCk7
Cit9CisKK3ZvaWQgUVdlYlN0eWxlOjpwYWludENvbWJvQm94QXJyb3coUVBhaW50ZXIgKnBhaW50
ZXIsIGNvbnN0IFFTdHlsZUludGVyZmFjZU9wdGlvbiAmcHJveHlPcHRpb24sIFFPYmplY3QgKndp
ZGdldE9iaikKK3sKKyAgICBlbnN1cmVTdHlsZSgpOworICAgIFFXaWRnZXQqIHdpZGdldCA9IHFv
YmplY3RfY2FzdDxRV2lkZ2V0Kj4od2lkZ2V0T2JqKTsKKworICAgIE1hcHBlZFN0eWxlT3B0aW9u
PFFTdHlsZU9wdGlvbkNvbWJvQm94PiBvcHQod2lkZ2V0LCBwcm94eU9wdGlvbik7CisgICAgb3B0
LnN1YkNvbnRyb2xzID0gUVN0eWxlOjpTQ19Db21ib0JveEFycm93OworICAgIC8vIGZvciBkcmF3
aW5nIHRoZSBjb21ibyBib3ggYXJyb3csIHJlbHkgb25seSBvbiB0aGUgZmFsbGJhY2sgc3R5bGUK
KyAgICBtX2ZhbGxiYWNrU3R5bGUtPmRyYXdDb21wbGV4Q29udHJvbChRU3R5bGU6OkNDX0NvbWJv
Qm94LCAmb3B0LCBwYWludGVyLCB3aWRnZXQpOworfQorCit2b2lkIFFXZWJTdHlsZTo6cGFpbnRT
bGlkZXJUcmFjayhRUGFpbnRlciogcGFpbnRlciwgY29uc3QgUVN0eWxlSW50ZXJmYWNlT3B0aW9u
JiBwcm94eU9wdGlvbiwgUU9iamVjdCAqd2lkZ2V0T2JqKQoreworICAgIGVuc3VyZVN0eWxlKCk7
CisgICAgUVdpZGdldCogd2lkZ2V0ID0gcW9iamVjdF9jYXN0PFFXaWRnZXQqPih3aWRnZXRPYmop
OworCisgICAgTWFwcGVkU3R5bGVPcHRpb248UVN0eWxlT3B0aW9uU2xpZGVyPiBvcHRpb24od2lk
Z2V0LCBwcm94eU9wdGlvbik7CisgICAgb3B0aW9uLnN1YkNvbnRyb2xzID0gUVN0eWxlOjpTQ19T
bGlkZXJHcm9vdmU7CisKKyAgICBvcHRpb24udXBzaWRlRG93biA9IHByb3h5T3B0aW9uLnNsaWRl
ci51cHNpZGVEb3duOworICAgIG9wdGlvbi5taW5pbXVtID0gcHJveHlPcHRpb24uc2xpZGVyLm1p
bmltdW07CisgICAgb3B0aW9uLm1heGltdW0gPSBwcm94eU9wdGlvbi5zbGlkZXIubWF4aW11bTsK
KyAgICBvcHRpb24uc2xpZGVyUG9zaXRpb24gPSBwcm94eU9wdGlvbi5zbGlkZXIucG9zaXRpb247
CisgICAgb3B0aW9uLm9yaWVudGF0aW9uID0gcHJveHlPcHRpb24uc2xpZGVyLm9yaWVudGF0aW9u
OworCisgICAgbV9zdHlsZS0+ZHJhd0NvbXBsZXhDb250cm9sKFFTdHlsZTo6Q0NfU2xpZGVyLCAm
b3B0aW9uLCBwYWludGVyLCB3aWRnZXQpOworCisgICAgaWYgKG9wdGlvbi5zdGF0ZSAmIFFTdHls
ZTo6U3RhdGVfSGFzRm9jdXMpIHsKKyAgICAgICAgUVN0eWxlT3B0aW9uRm9jdXNSZWN0IGZvY3Vz
T3B0aW9uOworICAgICAgICBmb2N1c09wdGlvbi5yZWN0ID0gb3B0aW9uLnJlY3Q7CisgICAgICAg
IG1fc3R5bGUtPmRyYXdQcmltaXRpdmUoUVN0eWxlOjpQRV9GcmFtZUZvY3VzUmVjdCwgJmZvY3Vz
T3B0aW9uLCBwYWludGVyLCB3aWRnZXQpOworICAgIH0KK30KKwordm9pZCBRV2ViU3R5bGU6OnBh
aW50U2xpZGVyVGh1bWIoUVBhaW50ZXIqIHBhaW50ZXIsIGNvbnN0IFFTdHlsZUludGVyZmFjZU9w
dGlvbiYgcHJveHlPcHRpb24sIFFPYmplY3QgKndpZGdldE9iaikKK3sKKyAgICBlbnN1cmVTdHls
ZSgpOworICAgIFFXaWRnZXQqIHdpZGdldCA9IHFvYmplY3RfY2FzdDxRV2lkZ2V0Kj4od2lkZ2V0
T2JqKTsKKworICAgIE1hcHBlZFN0eWxlT3B0aW9uPFFTdHlsZU9wdGlvblNsaWRlcj4gb3B0aW9u
KHdpZGdldCwgcHJveHlPcHRpb24pOworCisgICAgb3B0aW9uLnN1YkNvbnRyb2xzID0gUVN0eWxl
OjpTQ19TbGlkZXJIYW5kbGU7CisgICAgaWYgKG9wdGlvbi5zdGF0ZSAmIFFTdHlsZTo6U3RhdGVf
U3Vua2VuKQorICAgICAgICBvcHRpb24uYWN0aXZlU3ViQ29udHJvbHMgPSBRU3R5bGU6OlNDX1Ns
aWRlckhhbmRsZTsKKworICAgIG1fc3R5bGUtPmRyYXdDb21wbGV4Q29udHJvbChRU3R5bGU6OkND
X1NsaWRlciwgJm9wdGlvbiwgcGFpbnRlciwgd2lkZ2V0KTsKK30KKwordm9pZCBRV2ViU3R5bGU6
OnBhaW50SW5uZXJTcGluQnV0dG9uKFFQYWludGVyKiBwYWludGVyLCBjb25zdCBRU3R5bGVJbnRl
cmZhY2VPcHRpb24mIHByb3h5T3B0aW9uLCBib29sIHNwaW5Cb3hVcCwgUU9iamVjdCogd2lkZ2V0
T2JqKQoreworICAgIGVuc3VyZVN0eWxlKCk7CisgICAgUVdpZGdldCogd2lkZ2V0ID0gcW9iamVj
dF9jYXN0PFFXaWRnZXQqPih3aWRnZXRPYmopOworCisgICAgTWFwcGVkU3R5bGVPcHRpb248UVN0
eWxlT3B0aW9uU3BpbkJveD4gb3B0aW9uKHdpZGdldCwgcHJveHlPcHRpb24pOworCisgICAgb3B0
aW9uLnN1YkNvbnRyb2xzID0gUVN0eWxlOjpTQ19TcGluQm94VXAgfCBRU3R5bGU6OlNDX1NwaW5C
b3hEb3duOworICAgIGlmICghKG9wdGlvbi5zdGF0ZSAmIFFTdHlsZTo6U3RhdGVfUmVhZE9ubHkp
KSB7CisgICAgICAgIGlmIChvcHRpb24uc3RhdGUgJiBRU3R5bGU6OlN0YXRlX0VuYWJsZWQpCisg
ICAgICAgICAgICBvcHRpb24uc3RlcEVuYWJsZWQgPSBRQWJzdHJhY3RTcGluQm94OjpTdGVwVXBF
bmFibGVkIHwgUUFic3RyYWN0U3BpbkJveDo6U3RlcERvd25FbmFibGVkOworICAgICAgICBpZiAo
b3B0aW9uLnN0YXRlICYgUVN0eWxlOjpTdGF0ZV9TdW5rZW4pIHsKKyAgICAgICAgICAgIGlmIChz
cGluQm94VXApCisgICAgICAgICAgICAgICAgb3B0aW9uLmFjdGl2ZVN1YkNvbnRyb2xzID0gUVN0
eWxlOjpTQ19TcGluQm94VXA7CisgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgb3B0
aW9uLmFjdGl2ZVN1YkNvbnRyb2xzID0gUVN0eWxlOjpTQ19TcGluQm94RG93bjsKKyAgICAgICAg
fQorICAgIH0KKworICAgIEludFJlY3QgYnV0dG9uUmVjdCA9IG9wdGlvbi5yZWN0OworICAgIC8v
IERlZmF1bHQgdG8gbW92aW5nIHRoZSBidXR0b25zIGEgbGl0dGxlIGJpdCB3aXRoaW4gdGhlIGVk
aXRvciBmcmFtZS4KKyAgICBpbnQgaW5mbGF0ZVggPSAtMjsKKyAgICBpbnQgaW5mbGF0ZVkgPSAt
MjsKKyNpZiBkZWZpbmVkKFFfV1NfTUFDKSAmJiAhZGVmaW5lZChRVF9OT19TVFlMRV9NQUMpCisg
ICAgLy8gUU1hY1N0eWxlIHdpbGwgcG9zaXRpb24gdGhlIGFxdWEgYnV0dG9ucyBmbHVzaCB0byB0
aGUgcmlnaHQuCisgICAgLy8gVGhpcyB3aWxsIG1vdmUgdGhlbSBtb3JlIHdpdGhpbiB0aGUgY29u
dHJvbCBmb3IgYmV0dGVyIHN0eWxlLCBhIGxhCisgICAgLy8gQ2hyb21pdW0gbG9vayAmIGZlZWwu
CisgICAgaWYgKHFvYmplY3RfY2FzdDxRTWFjU3R5bGUqPihtX3N0eWxlKSkgeworICAgICAgICBp
bmZsYXRlWCA9IC00OworICAgICAgICAvLyBSZW5kZXIgbWluaSBhcXVhIHNwaW4gYnV0dG9ucyBm
b3IgUU1hY1N0eWxlIHRvIGZpdCBuaWNlbHkgaW50bworICAgICAgICAvLyB0aGUgZWRpdG9yIGFy
ZWEsIGxpa2UgQ2hyb21pdW0uCisgICAgICAgIG9wdGlvbi5zdGF0ZSB8PSBRU3R5bGU6OlN0YXRl
X01pbmk7CisgICAgfQorI2VuZGlmCisjaWYgIWRlZmluZWQoUVRfTk9fU1RZTEVfUExBU1RJUVVF
KQorICAgIC8vIFFQbGFzdGlxdWVTdHlsZSBsb29rcyBiZXN0IHdoZW4gdGhlIHNwaW4gYnV0dG9u
cyBhcmUgZmx1c2ggd2l0aCB0aGUgZnJhbWUncyBlZGdlLgorICAgIGlmIChxb2JqZWN0X2Nhc3Q8
UVBsYXN0aXF1ZVN0eWxlKj4obV9zdHlsZSkpIHsKKyAgICAgICAgaW5mbGF0ZVggPSAwOworICAg
ICAgICBpbmZsYXRlWSA9IDA7CisgICAgfQorI2VuZGlmCisKKyAgICBidXR0b25SZWN0LmluZmxh
dGVYKGluZmxhdGVYKTsKKyAgICBidXR0b25SZWN0LmluZmxhdGVZKGluZmxhdGVZKTsKKyAgICBv
cHRpb24ucmVjdCA9IGJ1dHRvblJlY3Q7CisKKyAgICBtX3N0eWxlLT5kcmF3Q29tcGxleENvbnRy
b2woUVN0eWxlOjpDQ19TcGluQm94LCAmb3B0aW9uLCBwYWludGVyLCB3aWRnZXQpOworfQorCit2
b2lkIFFXZWJTdHlsZTo6cGFpbnRQcm9ncmVzc0JhcihRUGFpbnRlciogcGFpbnRlciwgY29uc3Qg
UVN0eWxlSW50ZXJmYWNlT3B0aW9uJiBwcm94eU9wdGlvbiwgZG91YmxlIHByb2dyZXNzLCBkb3Vi
bGUgYW5pbWF0aW9uUHJvZ3Jlc3MsIFFPYmplY3QgKndpZGdldE9iaikKK3sKKyAgICBlbnN1cmVT
dHlsZSgpOworICAgIFFXaWRnZXQqIHdpZGdldCA9IHFvYmplY3RfY2FzdDxRV2lkZ2V0Kj4od2lk
Z2V0T2JqKTsKKworICAgIE1hcHBlZFN0eWxlT3B0aW9uPFFTdHlsZU9wdGlvblByb2dyZXNzQmFy
VjI+IG9wdGlvbih3aWRnZXQsIHByb3h5T3B0aW9uKTsKKworICAgIG9wdGlvbi5tYXhpbXVtID0g
c3RkOjpudW1lcmljX2xpbWl0czxpbnQ+OjptYXgoKTsKKyAgICBvcHRpb24ubWluaW11bSA9IDA7
CisgICAgb3B0aW9uLnByb2dyZXNzID0gcHJvZ3Jlc3MgKiBzdGQ6Om51bWVyaWNfbGltaXRzPGlu
dD46Om1heCgpOworCisgICAgY29uc3QgUVBvaW50IHRvcExlZnQgPSBvcHRpb24ucmVjdC50b3BM
ZWZ0KCk7CisgICAgcGFpbnRlci0+dHJhbnNsYXRlKHRvcExlZnQpOworICAgIG9wdGlvbi5yZWN0
Lm1vdmVUbyhRUG9pbnQoMCwgMCkpOworCisgICAgaWYgKHByb2dyZXNzIDwgMCkgeworICAgICAg
ICAvLyBGSVhNRTogVW50aWwgaHR0cDovL2J1Z3JlcG9ydHMucXQubm9raWEuY29tL2Jyb3dzZS9R
VEJVRy05MTcxIGlzIGZpeGVkLAorICAgICAgICAvLyB3ZSBzaW11bGF0ZSBvbmUgc3F1YXJlIGFu
aW1hdGluZyBhY3Jvc3MgdGhlIHByb2dyZXNzIGJhci4KKyAgICAgICAgbV9zdHlsZS0+ZHJhd0Nv
bnRyb2woUVN0eWxlOjpDRV9Qcm9ncmVzc0Jhckdyb292ZSwgJm9wdGlvbiwgcGFpbnRlciwgd2lk
Z2V0KTsKKyAgICAgICAgaW50IGNodW5rV2lkdGggPSBtX3N0eWxlLT5waXhlbE1ldHJpYyhRU3R5
bGU6OlBNX1Byb2dyZXNzQmFyQ2h1bmtXaWR0aCwgJm9wdGlvbik7CisgICAgICAgIFFDb2xvciBj
b2xvciA9IChvcHRpb24ucGFsZXR0ZS5oaWdobGlnaHQoKSA9PSBvcHRpb24ucGFsZXR0ZS5iYWNr
Z3JvdW5kKCkpID8gb3B0aW9uLnBhbGV0dGUuY29sb3IoUVBhbGV0dGU6OkFjdGl2ZSwgUVBhbGV0
dGU6OkhpZ2hsaWdodCkgOiBvcHRpb24ucGFsZXR0ZS5jb2xvcihRUGFsZXR0ZTo6SGlnaGxpZ2h0
KTsKKyAgICAgICAgaWYgKG9wdGlvbi5kaXJlY3Rpb24gPT0gUXQ6OlJpZ2h0VG9MZWZ0KQorICAg
ICAgICAgICAgcGFpbnRlci0+ZmlsbFJlY3Qob3B0aW9uLnJlY3QucmlnaHQoKSAtIGNodW5rV2lk
dGggIC0gYW5pbWF0aW9uUHJvZ3Jlc3MgKiBvcHRpb24ucmVjdC53aWR0aCgpLCAwLCBjaHVua1dp
ZHRoLCBvcHRpb24ucmVjdC5oZWlnaHQoKSwgY29sb3IpOworICAgICAgICBlbHNlCisgICAgICAg
ICAgICBwYWludGVyLT5maWxsUmVjdChhbmltYXRpb25Qcm9ncmVzcyAqIG9wdGlvbi5yZWN0Lndp
ZHRoKCksIDAsIGNodW5rV2lkdGgsIG9wdGlvbi5yZWN0LmhlaWdodCgpLCBjb2xvcik7CisgICAg
fSBlbHNlCisgICAgICAgIG1fc3R5bGUtPmRyYXdDb250cm9sKFFTdHlsZTo6Q0VfUHJvZ3Jlc3NC
YXIsICZvcHRpb24sIHBhaW50ZXIsIHdpZGdldCk7CisKKyAgICBwYWludGVyLT50cmFuc2xhdGUo
LXRvcExlZnQpOworfQorCitpbnQgUVdlYlN0eWxlOjpzY3JvbGxCYXJFeHRlbnQoYm9vbCBtaW5p
KQoreworICAgIGVuc3VyZVN0eWxlKCk7CisKKyAgICBRU3R5bGVPcHRpb25TbGlkZXIgbzsKKyAg
ICBvLm9yaWVudGF0aW9uID0gUXQ6OlZlcnRpY2FsOworICAgIG8uc3RhdGUgJj0gflFTdHlsZTo6
U3RhdGVfSG9yaXpvbnRhbDsKKyAgICBpZiAobWluaSkKKyAgICAgICAgby5zdGF0ZSB8PSBRU3R5
bGU6OlN0YXRlX01pbmk7CisgICAgcmV0dXJuIG1fc3R5bGUtPnBpeGVsTWV0cmljKFFTdHlsZTo6
UE1fU2Nyb2xsQmFyRXh0ZW50LCAmbywgMCk7Cit9CisKK2Jvb2wgUVdlYlN0eWxlOjpzY3JvbGxC
YXJNaWRkbGVDbGlja0Fic29sdXRlUG9zaXRpb25TdHlsZUhpbnQoKSBjb25zdAoreworICAgIGVu
c3VyZVN0eWxlKCk7CisgICAgcmV0dXJuIG1fc3R5bGUtPnN0eWxlSGludChRU3R5bGU6OlNIX1Nj
cm9sbEJhcl9NaWRkbGVDbGlja0Fic29sdXRlUG9zaXRpb24pOworfQorCit2b2lkIFFXZWJTdHls
ZTo6cGFpbnRTY3JvbGxDb3JuZXIoUVBhaW50ZXIqIHBhaW50ZXIsIGNvbnN0IFFSZWN0JiByZWN0
LCBRT2JqZWN0KiB3aWRnZXRPYmopCit7CisgICAgZW5zdXJlU3R5bGUoKTsKKyAgICBRV2lkZ2V0
KiB3aWRnZXQgPSBxb2JqZWN0X2Nhc3Q8UVdpZGdldCo+KHdpZGdldE9iaik7CisKKyAgICBRU3R5
bGVPcHRpb24gb3B0aW9uOworICAgIG9wdGlvbi5yZWN0ID0gcmVjdDsKKyAgICBtX3N0eWxlLT5k
cmF3UHJpbWl0aXZlKFFTdHlsZTo6UEVfUGFuZWxTY3JvbGxBcmVhQ29ybmVyLCAmb3B0aW9uLCBw
YWludGVyLCB3aWRnZXQpOworfQorCitRU3R5bGVJbnRlcmZhY2U6OlN1YkNvbnRyb2wgUVdlYlN0
eWxlOjpoaXRUZXN0U2Nyb2xsQmFyKGNvbnN0IFFTdHlsZUludGVyZmFjZU9wdGlvbiAmcHJveHlP
cHRpb24sIGNvbnN0IFFQb2ludCAmcG9zKQoreworICAgIGVuc3VyZVN0eWxlKCk7CisgICAgTWFw
cGVkU3R5bGVPcHRpb248UVN0eWxlT3B0aW9uU2xpZGVyPiBvcHQoMCwgcHJveHlPcHRpb24pOwor
ICAgIFFTdHlsZTo6U3ViQ29udHJvbCBzYyA9IG1fc3R5bGUtPmhpdFRlc3RDb21wbGV4Q29udHJv
bChRU3R5bGU6OkNDX1Njcm9sbEJhciwgJm9wdCwgcG9zLCAwKTsKKyAgICByZXR1cm4gY29udmVy
dFRvUVN0eWxlSW50ZXJmYWNlU3ViQ29udHJvbChzYyk7Cit9CisKK1FSZWN0IFFXZWJTdHlsZTo6
c2Nyb2xsQmFyU3ViQ29udHJvbFJlY3QoY29uc3QgUVN0eWxlSW50ZXJmYWNlT3B0aW9uICZwcm94
eU9wdGlvbiwgUVN0eWxlSW50ZXJmYWNlOjpTdWJDb250cm9sIHN1YkNvbnRyb2wpCit7CisgICAg
ZW5zdXJlU3R5bGUoKTsKKyAgICBNYXBwZWRTdHlsZU9wdGlvbjxRU3R5bGVPcHRpb25TbGlkZXI+
IG9wdCgwLCBwcm94eU9wdGlvbik7CisgICAgcmV0dXJuIG1fc3R5bGUtPnN1YkNvbnRyb2xSZWN0
KFFTdHlsZTo6Q0NfU2Nyb2xsQmFyLCAmb3B0LCBjb252ZXJ0VG9RU3R5bGVTdWJDb250cm9sKHN1
YkNvbnRyb2wpLCAwKTsKK30KKwordm9pZCBRV2ViU3R5bGU6OnBhaW50U2Nyb2xsQmFyKFFQYWlu
dGVyICpwYWludGVyLCBjb25zdCBRU3R5bGVJbnRlcmZhY2VPcHRpb24gJnByb3h5T3B0aW9uLCBR
T2JqZWN0ICp3aWRnZXRPYmopCit7CisgICAgZW5zdXJlU3R5bGUoKTsKKyAgICBRV2lkZ2V0KiB3
aWRnZXQgPSBxb2JqZWN0X2Nhc3Q8UVdpZGdldCo+KHdpZGdldE9iaik7CisKKyAgICBNYXBwZWRT
dHlsZU9wdGlvbjxRU3R5bGVPcHRpb25TbGlkZXI+IG9wdCh3aWRnZXQsIHByb3h5T3B0aW9uKTsK
KworI2lmZGVmIFFfV1NfTUFDCisgICAgLy8gRklYTUU6IFdlIGFsc28gbmVlZCB0byBjaGVjayB0
aGUgd2lkZ2V0IHN0eWxlIGJ1dCB0b2RheSBTY3JvbGxiYXJUaGVtZSBpcyBub3QgYXdhcmUgb2Yg
dGhlIHBhZ2Ugc28gd2UKKyAgICAvLyBjYW4ndCBnZXQgdGhlIHdpZGdldC4KKyAgICBpZiAocW9i
amVjdF9jYXN0PFFNYWNTdHlsZSo+KG1fc3R5bGUpKQorICAgICAgICBtX3N0eWxlLT5kcmF3Q29t
cGxleENvbnRyb2woUVN0eWxlOjpDQ19TY3JvbGxCYXIsICZvcHQsIHBhaW50ZXIsIHdpZGdldCk7
CisgICAgZWxzZQorI2VuZGlmCisgICAgeworICAgICAgICAvLyBUaGUgUVN0eWxlIGV4cGVjdHMg
dGhlIGJhY2tncm91bmQgdG8gYmUgYWxyZWFkeSBmaWxsZWQuCisgICAgICAgIHBhaW50ZXItPmZp
bGxSZWN0KG9wdC5yZWN0LCBvcHQucGFsZXR0ZS5iYWNrZ3JvdW5kKCkpOworCisgICAgICAgIGNv
bnN0IFFQb2ludCB0b3BMZWZ0ID0gb3B0LnJlY3QudG9wTGVmdCgpOworICAgICAgICBwYWludGVy
LT50cmFuc2xhdGUodG9wTGVmdCk7CisgICAgICAgIG9wdC5yZWN0Lm1vdmVUbyhRUG9pbnQoMCwg
MCkpOworICAgICAgICBtX3N0eWxlLT5kcmF3Q29tcGxleENvbnRyb2woUVN0eWxlOjpDQ19TY3Jv
bGxCYXIsICZvcHQsIHBhaW50ZXIsIHdpZGdldCk7CisgICAgICAgIG9wdC5yZWN0Lm1vdmVUbyh0
b3BMZWZ0KTsKKyAgICB9Cit9CisKK1FPYmplY3QqIFFXZWJTdHlsZTo6d2lkZ2V0Rm9yUGFpbnRl
cihRUGFpbnRlciogcGFpbnRlcikKK3sKKyAgICBRUGFpbnREZXZpY2UqIGRldiA9IDA7CisgICAg
aWYgKHBhaW50ZXIpCisgICAgICAgIGRldiA9IHBhaW50ZXItPmRldmljZSgpOworICAgIGlmIChk
ZXYgJiYgZGV2LT5kZXZUeXBlKCkgPT0gUUludGVybmFsOjpXaWRnZXQpCisgICAgICAgIHJldHVy
biBzdGF0aWNfY2FzdDxRV2lkZ2V0Kj4oZGV2KTsKKyAgICByZXR1cm4gMDsKK30KKworYm9vbCBR
V2ViU3R5bGU6OmlzVmFsaWQoKSBjb25zdAoreworICAgIGVuc3VyZVN0eWxlKCk7CisgICAgcmV0
dXJuIG1fc3R5bGU7Cit9CisKK3ZvaWQgUVdlYlN0eWxlOjplbnN1cmVTdHlsZSgpIGNvbnN0Cit7
CisgICAgaWYgKG1fc3R5bGUpCisgICAgICAgIHJldHVybjsKKworICAgIG1fc3R5bGUgPSBRU3R5
bGVJbnRlcmZhY2U6OnN0eWxlRm9yUGFnZShtX3BhZ2UpOworCisgICAgaWYgKCFtX3N0eWxlKQor
ICAgICAgICBtX3N0eWxlID0gUUFwcGxpY2F0aW9uOjpzdHlsZSgpOworfQorCit9CmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViS2l0L3F0L1dlYkNvcmVTdXBwb3J0L1FXZWJTdHlsZS5oIGIvU291cmNl
L1dlYktpdC9xdC9XZWJDb3JlU3VwcG9ydC9RV2ViU3R5bGUuaApuZXcgZmlsZSBtb2RlIDEwMDY0
NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi43MGU5ZTRk
ZGUwODVlMWFlYzY3MTY1NzJkNDk2M2FlNjUzOWE3MjczCi0tLSAvZGV2L251bGwKKysrIGIvU291
cmNlL1dlYktpdC9xdC9XZWJDb3JlU3VwcG9ydC9RV2ViU3R5bGUuaApAQCAtMCwwICsxLDk3IEBA
CisvKgorICogVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIHRoZW1lIGltcGxlbWVudGF0aW9uIGZv
ciBmb3JtIGNvbnRyb2xzIGluIFdlYkNvcmUuCisgKgorICogQ29weXJpZ2h0IChDKSAyMDEyIERp
Z2lhIFBsYyBhbmQvb3IgaXRzIHN1YnNpZGlhcnkoLWllcykuCisgKiBDb3B5cmlnaHQgKEMpIDIw
MTEtMjAxMiBOb2tpYSBDb3Jwb3JhdGlvbiBhbmQvb3IgaXRzIHN1YnNpZGlhcnkoLWllcykuCisg
KgorICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRl
IGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJh
cnkgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNv
ZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBv
ciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgbGlicmFy
eSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICog
YnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFu
dHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVS
UE9TRS4gIFNlZSB0aGUgR05VCisgKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9y
IG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9m
IHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRo
aXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bwor
ICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0
LCBGaWZ0aCBGbG9vciwKKyAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgorICoKKyAqLwor
I2lmbmRlZiBRV2ViU3R5bGVfaAorI2RlZmluZSBRV2ViU3R5bGVfaAorCisjaW5jbHVkZSA8UVN0
eWxlSW50ZXJmYWNlLmg+CisKK1FUX0JFR0lOX05BTUVTUEFDRQorY2xhc3MgUVN0eWxlOworY2xh
c3MgUUxpbmVFZGl0OworY2xhc3MgUVN0eWxlT3B0aW9uOworY2xhc3MgUVN0eWxlT3B0aW9uU2xp
ZGVyOworY2xhc3MgUVBhaW50ZXI7CitjbGFzcyBRT2JqZWN0OworUVRfRU5EX05BTUVTUEFDRQor
CituYW1lc3BhY2UgV2ViQ29yZSB7CitjbGFzcyBQYWdlOworfQorCituYW1lc3BhY2UgV2ViS2l0
IHsKKworY2xhc3MgUVdlYlN0eWxlIDogcHVibGljIFdlYkNvcmU6OlFTdHlsZUludGVyZmFjZSB7
CitwdWJsaWM6CisgICAgUVdlYlN0eWxlKFdlYkNvcmU6OlBhZ2UqID0gMCk7CisgICAgdmlydHVh
bCB+UVdlYlN0eWxlKCk7CisKKyAgICBzdGF0aWMgV2ViQ29yZTo6UVN0eWxlSW50ZXJmYWNlKiBj
cmVhdGUoV2ViQ29yZTo6UGFnZSogcGFnZSkKKyAgICB7IHJldHVybiBuZXcgUVdlYlN0eWxlKHBh
Z2UpOyB9CisKKyAgICB2aXJ0dWFsIFFSZWN0IGJ1dHRvblN1YkVsZW1lbnRSZWN0KEJ1dHRvblN1
YkVsZW1lbnQsIFN0YXRlLCBjb25zdCBRUmVjdCYgb3JpZ2luYWxSZWN0KSBjb25zdDsKKworICAg
IHZpcnR1YWwgaW50IGZpbmRGcmFtZUxpbmVXaWR0aCgpIGNvbnN0OworICAgIHZpcnR1YWwgaW50
IHNpbXBsZVBpeGVsTWV0cmljKFBpeGVsTWV0cmljLCBTdGF0ZSA9IFN0YXRlX05vbmUsIFFPYmpl
Y3QqIHdpZGdldCA9IDApIGNvbnN0OworICAgIHZpcnR1YWwgaW50IGJ1dHRvbk1hcmdpbihTdGF0
ZSwgY29uc3QgUVJlY3QmIG9yaWdpbmFsUmVjdCkgY29uc3Q7CisgICAgdmlydHVhbCBpbnQgc2xp
ZGVyTGVuZ3RoKFF0OjpPcmllbnRhdGlvbikgY29uc3Q7CisgICAgdmlydHVhbCBpbnQgc2xpZGVy
VGhpY2tuZXNzKFF0OjpPcmllbnRhdGlvbikgY29uc3Q7CisgICAgdmlydHVhbCBpbnQgcHJvZ3Jl
c3NCYXJDaHVua1dpZHRoKGNvbnN0IFFTaXplJikgY29uc3Q7CisgICAgdmlydHVhbCB2b2lkIGdl
dEJ1dHRvbk1ldHJpY3MoUVN0cmluZyogYnV0dG9uRm9udEZhbWlseSwgaW50KiBidXR0b25Gb250
UGl4ZWxTaXplKSBjb25zdDsKKworICAgIHZpcnR1YWwgUVNpemUgc2l6ZUZyb21Db250ZW50cyhD
b250ZW50c1R5cGUsIFFTdHlsZUludGVyZmFjZTo6U3RhdGUsIGNvbnN0IFFTaXplJikgY29uc3Q7
CisKKyAgICB2aXJ0dWFsIHZvaWQgcGFpbnRCdXR0b24oUVBhaW50ZXIqLCBCdXR0b25UeXBlLCBj
b25zdCBXZWJDb3JlOjpRU3R5bGVJbnRlcmZhY2VPcHRpb24gJnByb3h5T3B0aW9uLCBRT2JqZWN0
ICp3aWRnZXQpOworICAgIHZpcnR1YWwgdm9pZCBwYWludFRleHRGaWVsZChRUGFpbnRlciosIGNv
bnN0IFdlYkNvcmU6OlFTdHlsZUludGVyZmFjZU9wdGlvbiYsIFFPYmplY3QqIHdpZGdldE9iaik7
CisgICAgdmlydHVhbCB2b2lkIHBhaW50Q29tYm9Cb3goUVBhaW50ZXIqLCBjb25zdCBXZWJDb3Jl
OjpRU3R5bGVJbnRlcmZhY2VPcHRpb24mLCBRT2JqZWN0ICp3aWRnZXRPYmopOworICAgIHZpcnR1
YWwgdm9pZCBwYWludENvbWJvQm94QXJyb3coUVBhaW50ZXIqLCBjb25zdCBXZWJDb3JlOjpRU3R5
bGVJbnRlcmZhY2VPcHRpb24mLCBRT2JqZWN0ICp3aWRnZXRPYmopOworCisgICAgdmlydHVhbCB2
b2lkIHBhaW50U2xpZGVyVHJhY2soUVBhaW50ZXIqLCBjb25zdCBXZWJDb3JlOjpRU3R5bGVJbnRl
cmZhY2VPcHRpb24mLCBRT2JqZWN0ICp3aWRnZXRPYmopOworICAgIHZpcnR1YWwgdm9pZCBwYWlu
dFNsaWRlclRodW1iKFFQYWludGVyKiwgY29uc3QgV2ViQ29yZTo6UVN0eWxlSW50ZXJmYWNlT3B0
aW9uJiwgUU9iamVjdCAqd2lkZ2V0T2JqKTsKKyAgICB2aXJ0dWFsIHZvaWQgcGFpbnRJbm5lclNw
aW5CdXR0b24oUVBhaW50ZXIqLCBjb25zdCBXZWJDb3JlOjpRU3R5bGVJbnRlcmZhY2VPcHRpb24m
LCBib29sIHNwaW5Cb3hVcCwgUU9iamVjdCogd2lkZ2V0T2JqKTsKKyAgICB2aXJ0dWFsIHZvaWQg
cGFpbnRQcm9ncmVzc0JhcihRUGFpbnRlciosIGNvbnN0IFdlYkNvcmU6OlFTdHlsZUludGVyZmFj
ZU9wdGlvbiYsIGRvdWJsZSBwcm9ncmVzcywgZG91YmxlIGFuaW1hdGlvblByb2dyZXNzLCBRT2Jq
ZWN0KiB3aWRnZXRPYmopOworCisgICAgdmlydHVhbCBpbnQgc2Nyb2xsQmFyRXh0ZW50KGJvb2wg
bWluaSk7CisgICAgdmlydHVhbCBib29sIHNjcm9sbEJhck1pZGRsZUNsaWNrQWJzb2x1dGVQb3Np
dGlvblN0eWxlSGludCgpIGNvbnN0OworICAgIHZpcnR1YWwgdm9pZCBwYWludFNjcm9sbENvcm5l
cihRUGFpbnRlciosIGNvbnN0IFFSZWN0JiwgUU9iamVjdCogd2lkZ2V0T2JqKTsKKworICAgIHZp
cnR1YWwgU3ViQ29udHJvbCBoaXRUZXN0U2Nyb2xsQmFyKGNvbnN0IFdlYkNvcmU6OlFTdHlsZUlu
dGVyZmFjZU9wdGlvbiYsIGNvbnN0IFFQb2ludCYgcG9zKTsKKyAgICB2aXJ0dWFsIFFSZWN0IHNj
cm9sbEJhclN1YkNvbnRyb2xSZWN0KGNvbnN0IFdlYkNvcmU6OlFTdHlsZUludGVyZmFjZU9wdGlv
biYsIFN1YkNvbnRyb2wpOworICAgIHZpcnR1YWwgdm9pZCBwYWludFNjcm9sbEJhcihRUGFpbnRl
ciosIGNvbnN0IFdlYkNvcmU6OlFTdHlsZUludGVyZmFjZU9wdGlvbiYsIFFPYmplY3QqIHdpZGdl
dE9iaik7CisKKyAgICB2aXJ0dWFsIFFPYmplY3QqIHdpZGdldEZvclBhaW50ZXIoUVBhaW50ZXIq
KTsKKworICAgIHZpcnR1YWwgYm9vbCBpc1ZhbGlkKCkgY29uc3Q7CisKK3ByaXZhdGU6CisgICAg
dm9pZCBlbnN1cmVTdHlsZSgpIGNvbnN0OworCisgICAgV2ViQ29yZTo6UGFnZSogbV9wYWdlOwor
ICAgIG11dGFibGUgUVN0eWxlKiBtX3N0eWxlOworICAgIFFTdHlsZSogbV9mYWxsYmFja1N0eWxl
OworICAgIGJvb2wgbV9vd25GYWxsYmFja1N0eWxlOworICAgIG11dGFibGUgUVNjb3BlZFBvaW50
ZXI8UUxpbmVFZGl0PiBtX2xpbmVFZGl0OworfTsKKworfQorCisjZW5kaWYgLy8gUVdlYlN0eWxl
X2gKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvcXQvV2ViQ29yZVN1cHBvcnQvUmVuZGVyVGhl
bWVRU3R5bGUuY3BwIGIvU291cmNlL1dlYktpdC9xdC9XZWJDb3JlU3VwcG9ydC9SZW5kZXJUaGVt
ZVFTdHlsZS5jcHAKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDhiYzBkZjQ5NzQ1MzU5
ZDY2ODg3N2NhODdkNGJlYjUyMjk3MjQxZjcuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1dlYktpdC9xdC9XZWJDb3JlU3VwcG9ydC9SZW5kZXJU
aGVtZVFTdHlsZS5jcHAKKysrIC9kZXYvbnVsbApAQCAtMSw4MjcgKzAsMCBAQAotLyoKLSAqIFRo
aXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBXZWJLaXQgcHJvamVjdC4KLSAqCi0gKiBDb3B5cmlnaHQg
KEMpIDIwMDgtMjAxMiBOb2tpYSBDb3Jwb3JhdGlvbiBhbmQvb3IgaXRzIHN1YnNpZGlhcnkoLWll
cykKLSAqCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDYgWmFjayBSdXNpbiA8emFja0BrZGUub3JnPgot
ICogICAgICAgICAgICAgICAyMDA2IERpcmsgTXVlbGxlciA8bXVlbGxlckBrZGUub3JnPgotICog
ICAgICAgICAgICAgICAyMDA2IE5pa29sYXMgWmltbWVybWFubiA8emltbWVybWFubkBrZGUub3Jn
PgotICogQ29weXJpZ2h0IChDKSAyMDA4IEhvbGdlciBIYW5zIFBldGVyIEZyZXl0aGVyCi0gKgot
ICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0
d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCi0gKiBtb2RpZnkgaXQgdW5kZXIg
dGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwotICogTGljZW5zZSBh
cyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCi0gKiB2
ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZl
cnNpb24uCi0gKgotICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRo
YXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0gKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhv
dXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJ
VE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKLSAqIExpYnJhcnkg
R2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICoKLSAqIFlvdSBzaG91
bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGlj
IExpY2Vuc2UKLSAqIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlO
Ry5MSUIuICBJZiBub3QsIHdyaXRlIHRvCi0gKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9u
LCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAotICogQm9zdG9uLCBNQSAw
MjExMC0xMzAxLCBVU0EuCi0gKgotICovCi0KLSNpbmNsdWRlICJjb25maWcuaCIKLSNpbmNsdWRl
ICJSZW5kZXJUaGVtZVFTdHlsZS5oIgotCi0jaW5jbHVkZSAiQ1NTRm9udFNlbGVjdG9yLmgiCi0j
aW5jbHVkZSAiQ1NTVmFsdWVLZXl3b3Jkcy5oIgotI2luY2x1ZGUgIkNocm9tZS5oIgotI2luY2x1
ZGUgIkNocm9tZUNsaWVudC5oIgotI2luY2x1ZGUgIkNvbG9yLmgiCi0jaW5jbHVkZSAiRG9jdW1l
bnQuaCIKLSNpbmNsdWRlICJGb250LmgiCi0jaW5jbHVkZSAiRm9udFNlbGVjdG9yLmgiCi0jaW5j
bHVkZSAiR3JhcGhpY3NDb250ZXh0LmgiCi0jaW5jbHVkZSAiSFRNTElucHV0RWxlbWVudC5oIgot
I2luY2x1ZGUgIkhUTUxOYW1lcy5oIgotI2luY2x1ZGUgIkxvY2FsaXplZFN0cmluZ3MuaCIKLSNp
bmNsdWRlICJOb3RJbXBsZW1lbnRlZC5oIgotI2luY2x1ZGUgIlBhZ2UuaCIKLSNpbmNsdWRlICJQ
YWludEluZm8uaCIKLSNpbmNsdWRlICJRV2ViUGFnZUNsaWVudC5oIgotI2luY2x1ZGUgIlJlbmRl
ckJveC5oIgotI2lmIEVOQUJMRShQUk9HUkVTU19FTEVNRU5UKQotI2luY2x1ZGUgIlJlbmRlclBy
b2dyZXNzLmgiCi0jZW5kaWYKLSNpbmNsdWRlICJSZW5kZXJTbGlkZXIuaCIKLSNpbmNsdWRlICJT
Y3JvbGxiYXJUaGVtZVFTdHlsZS5oIgotI2luY2x1ZGUgIlNsaWRlclRodW1iRWxlbWVudC5oIgot
I2luY2x1ZGUgIlN0eWxlUmVzb2x2ZXIuaCIKLSNpbmNsdWRlICJVc2VyQWdlbnRTdHlsZVNoZWV0
cy5oIgotCi0jaW5jbHVkZSA8UUFwcGxpY2F0aW9uPgotI2luY2x1ZGUgPFFDb2xvcj4KLSNpbmNs
dWRlIDxRRmlsZT4KLSNpbmNsdWRlIDxRRm9udE1ldHJpY3M+Ci0jaW5jbHVkZSA8UUxpbmVFZGl0
PgotI2luY2x1ZGUgPFFNYWNTdHlsZT4KLSNpbmNsdWRlIDxRUGFpbnRlcj4KLSNpZm5kZWYgUVRf
Tk9fU1RZTEVfUExBU1RJUVVFCi0jaW5jbHVkZSA8UVBsYXN0aXF1ZVN0eWxlPgotI2VuZGlmCi0j
aW5jbHVkZSA8UVB1c2hCdXR0b24+Ci0jaW5jbHVkZSA8UVN0eWxlRmFjdG9yeT4KLSNpbmNsdWRl
IDxRU3R5bGVPcHRpb25CdXR0b24+Ci0jaW5jbHVkZSA8UVN0eWxlT3B0aW9uRnJhbWVWMj4KLSNp
ZiBFTkFCTEUoUFJPR1JFU1NfRUxFTUVOVCkKLSNpbmNsdWRlIDxRU3R5bGVPcHRpb25Qcm9ncmVz
c0JhclYyPgotI2VuZGlmCi0jaW5jbHVkZSA8UVN0eWxlT3B0aW9uU2xpZGVyPgotI2luY2x1ZGUg
PFFXaWRnZXQ+Ci0KLW5hbWVzcGFjZSBXZWJDb3JlIHsKLQotdXNpbmcgbmFtZXNwYWNlIEhUTUxO
YW1lczsKLQotaW5saW5lIHN0YXRpYyB2b2lkIGluaXRTdHlsZU9wdGlvbihRV2lkZ2V0KiB3aWRn
ZXQsIFFTdHlsZU9wdGlvbiYgb3B0aW9uKQotewotICAgIGlmICh3aWRnZXQpCi0gICAgICAgIG9w
dGlvbi5pbml0RnJvbSh3aWRnZXQpOwotICAgIGVsc2UgewotICAgICAgICAvLyBJZiBhIHdpZGdl
dCBpcyBub3QgZGlyZWN0bHkgYXZhaWxhYmxlIGZvciByZW5kZXJpbmcsIHdlIGZhbGxiYWNrIHRv
IGRlZmF1bHQKLSAgICAgICAgLy8gdmFsdWUgZm9yIGFuIGFjdGl2ZSB3aWRnZXQuCi0gICAgICAg
IG9wdGlvbi5zdGF0ZSA9IFFTdHlsZTo6U3RhdGVfQWN0aXZlIHwgUVN0eWxlOjpTdGF0ZV9FbmFi
bGVkOwotICAgIH0KLX0KLQotCi1RU2hhcmVkUG9pbnRlcjxTdHlsZVBhaW50ZXI+IFJlbmRlclRo
ZW1lUVN0eWxlOjpnZXRTdHlsZVBhaW50ZXIoY29uc3QgUGFpbnRJbmZvJiBwYWludEluZm8pCi17
Ci0gICAgcmV0dXJuIFFTaGFyZWRQb2ludGVyPFN0eWxlUGFpbnRlcj4obmV3IFN0eWxlUGFpbnRl
clFTdHlsZSh0aGlzLCBwYWludEluZm8pKTsKLX0KLQotU3R5bGVQYWludGVyUVN0eWxlOjpTdHls
ZVBhaW50ZXJRU3R5bGUoUmVuZGVyVGhlbWVRU3R5bGUqIHRoZW1lLCBjb25zdCBQYWludEluZm8m
IHBhaW50SW5mbykKLSAgICA6IFN0eWxlUGFpbnRlcih0aGVtZSwgcGFpbnRJbmZvKQotewotICAg
IGluaXQocGFpbnRJbmZvLmNvbnRleHQgPyBwYWludEluZm8uY29udGV4dCA6IDAsIHRoZW1lLT5x
U3R5bGUoKSk7Ci19Ci0KLVN0eWxlUGFpbnRlclFTdHlsZTo6U3R5bGVQYWludGVyUVN0eWxlKFNj
cm9sbGJhclRoZW1lUVN0eWxlKiB0aGVtZSwgR3JhcGhpY3NDb250ZXh0KiBjb250ZXh0KQotICAg
IDogU3R5bGVQYWludGVyKCkKLXsKLSAgICBpbml0KGNvbnRleHQsIHRoZW1lLT5zdHlsZSgpKTsK
LX0KLQotdm9pZCBTdHlsZVBhaW50ZXJRU3R5bGU6OmluaXQoR3JhcGhpY3NDb250ZXh0KiBjb250
ZXh0LCBRU3R5bGUqIHRoZW1lU3R5bGUpCi17Ci0gICAgcGFpbnRlciA9IHN0YXRpY19jYXN0PFFQ
YWludGVyKj4oY29udGV4dC0+cGxhdGZvcm1Db250ZXh0KCkpOwotICAgIHdpZGdldCA9IDA7Ci0g
ICAgUVBhaW50RGV2aWNlKiBkZXYgPSAwOwotICAgIGlmIChwYWludGVyKQotICAgICAgICBkZXYg
PSBwYWludGVyLT5kZXZpY2UoKTsKLSAgICBpZiAoZGV2ICYmIGRldi0+ZGV2VHlwZSgpID09IFFJ
bnRlcm5hbDo6V2lkZ2V0KQotICAgICAgICB3aWRnZXQgPSBzdGF0aWNfY2FzdDxRV2lkZ2V0Kj4o
ZGV2KTsKLSAgICBzdHlsZSA9IHRoZW1lU3R5bGU7Ci0KLSAgICBTdHlsZVBhaW50ZXI6OmluaXQo
Y29udGV4dCk7Ci19Ci0KLVBhc3NSZWZQdHI8UmVuZGVyVGhlbWU+IFJlbmRlclRoZW1lUVN0eWxl
OjpjcmVhdGUoUGFnZSogcGFnZSkKLXsKLSAgICByZXR1cm4gYWRvcHRSZWYobmV3IFJlbmRlclRo
ZW1lUVN0eWxlKHBhZ2UpKTsKLX0KLQotUmVuZGVyVGhlbWVRU3R5bGU6OlJlbmRlclRoZW1lUVN0
eWxlKFBhZ2UqIHBhZ2UpCi0gICAgOiBSZW5kZXJUaGVtZVF0KHBhZ2UpCi0jaWZuZGVmIFFUX05P
X0xJTkVFRElUCi0gICAgLCBtX2xpbmVFZGl0KDApCi0jZW5kaWYKLXsKLSAgICBRUHVzaEJ1dHRv
biBidXR0b247Ci0gICAgUUZvbnQgZGVmYXVsdEJ1dHRvbkZvbnQgPSBRQXBwbGljYXRpb246OmZv
bnQoJmJ1dHRvbik7Ci0gICAgbV9idXR0b25Gb250RmFtaWx5ID0gZGVmYXVsdEJ1dHRvbkZvbnQu
ZmFtaWx5KCk7Ci0jaWZkZWYgUV9XU19NQUMKLSAgICBidXR0b24uc2V0QXR0cmlidXRlKFF0OjpX
QV9NYWNTbWFsbFNpemUpOwotICAgIFFGb250SW5mbyBmb250SW5mbyhkZWZhdWx0QnV0dG9uRm9u
dCk7Ci0gICAgbV9idXR0b25Gb250UGl4ZWxTaXplID0gZm9udEluZm8ucGl4ZWxTaXplKCk7Ci0j
ZW5kaWYKLQotICAgIG1fZmFsbGJhY2tTdHlsZSA9IFFTdHlsZUZhY3Rvcnk6OmNyZWF0ZShRTGF0
aW4xU3RyaW5nKCJ3aW5kb3dzIikpOwotfQotCi1SZW5kZXJUaGVtZVFTdHlsZTo6flJlbmRlclRo
ZW1lUVN0eWxlKCkKLXsKLSAgICBkZWxldGUgbV9mYWxsYmFja1N0eWxlOwotI2lmbmRlZiBRVF9O
T19MSU5FRURJVAotICAgIGRlbGV0ZSBtX2xpbmVFZGl0OwotI2VuZGlmCi19Ci0KLQotLy8gZm9y
IHNvbWUgd2lkZ2V0IHBhaW50aW5nLCB3ZSBuZWVkIHRvIGZhbGxiYWNrIHRvIFdpbmRvd3Mgc3R5
bGUKLVFTdHlsZSogUmVuZGVyVGhlbWVRU3R5bGU6OmZhbGxiYWNrU3R5bGUoKSBjb25zdAotewot
ICAgIHJldHVybiAobV9mYWxsYmFja1N0eWxlKSA/IG1fZmFsbGJhY2tTdHlsZSA6IFFBcHBsaWNh
dGlvbjo6c3R5bGUoKTsKLX0KLQotdm9pZCBSZW5kZXJUaGVtZVFTdHlsZTo6c2V0UGFsZXR0ZUZy
b21QYWdlQ2xpZW50SWZFeGlzdHMoUVBhbGV0dGUmIHBhbGV0dGUpIGNvbnN0Ci17Ci0gICAgaWYg
KCFtX3BhZ2UpCi0gICAgICAgIHJldHVybjsKLQotICAgIEFTU0VSVChtX3BhZ2UtPmNocm9tZSgp
KTsKLSAgICBDaHJvbWVDbGllbnQqIGNocm9tZUNsaWVudCA9IG1fcGFnZS0+Y2hyb21lKCktPmNs
aWVudCgpOwotICAgIGlmICghY2hyb21lQ2xpZW50KQotICAgICAgICByZXR1cm47Ci0KLSAgICBp
ZiAoUVdlYlBhZ2VDbGllbnQqIHBhZ2VDbGllbnQgPSBjaHJvbWVDbGllbnQtPnBsYXRmb3JtUGFn
ZUNsaWVudCgpKQotICAgICAgICBwYWxldHRlID0gcGFnZUNsaWVudC0+cGFsZXR0ZSgpOwotfQot
Ci1RU3R5bGUqIFJlbmRlclRoZW1lUVN0eWxlOjpxU3R5bGUoKSBjb25zdAotewotICAgIGlmICht
X3BhZ2UpIHsKLSAgICAgICAgUVdlYlBhZ2VDbGllbnQqIHBhZ2VDbGllbnQgPSBtX3BhZ2UtPmNo
cm9tZSgpLT5jbGllbnQoKS0+cGxhdGZvcm1QYWdlQ2xpZW50KCk7Ci0KLSAgICAgICAgaWYgKHBh
Z2VDbGllbnQpCi0gICAgICAgICAgICByZXR1cm4gcGFnZUNsaWVudC0+c3R5bGUoKTsKLSAgICB9
Ci0KLSAgICByZXR1cm4gUUFwcGxpY2F0aW9uOjpzdHlsZSgpOwotfQotCi1pbnQgUmVuZGVyVGhl
bWVRU3R5bGU6OmZpbmRGcmFtZUxpbmVXaWR0aChRU3R5bGUqIHN0eWxlKSBjb25zdAotewotI2lm
bmRlZiBRVF9OT19MSU5FRURJVAotICAgIGlmICghbV9saW5lRWRpdCkKLSAgICAgICAgbV9saW5l
RWRpdCA9IG5ldyBRTGluZUVkaXQoKTsKLSNlbmRpZgotCi0gICAgUVN0eWxlT3B0aW9uRnJhbWVW
MiBvcHQ7Ci0gICAgUVdpZGdldCogd2lkZ2V0ID0gMDsKLSNpZm5kZWYgUVRfTk9fTElORUVESVQK
LSAgICB3aWRnZXQgPSBtX2xpbmVFZGl0OwotI2VuZGlmCi0gICAgcmV0dXJuIHN0eWxlLT5waXhl
bE1ldHJpYyhRU3R5bGU6OlBNX0RlZmF1bHRGcmFtZVdpZHRoLCAmb3B0LCB3aWRnZXQpOwotfQot
Ci1RUmVjdCBSZW5kZXJUaGVtZVFTdHlsZTo6aW5mbGF0ZUJ1dHRvblJlY3QoY29uc3QgUVJlY3Qm
IG9yaWdpbmFsUmVjdCkgY29uc3QKLXsKLSAgICBRU3R5bGVPcHRpb25CdXR0b24gb3B0aW9uOwot
ICAgIG9wdGlvbi5zdGF0ZSB8PSBRU3R5bGU6OlN0YXRlX1NtYWxsOwotICAgIG9wdGlvbi5yZWN0
ID0gb3JpZ2luYWxSZWN0OwotCi0gICAgUVJlY3QgbGF5b3V0UmVjdCA9IHFTdHlsZSgpLT5zdWJF
bGVtZW50UmVjdChRU3R5bGU6OlNFX1B1c2hCdXR0b25MYXlvdXRJdGVtLCAmb3B0aW9uLCAwKTsK
LSAgICBpZiAoIWxheW91dFJlY3QuaXNOdWxsKCkpIHsKLSAgICAgICAgaW50IHBhZGRpbmdMZWZ0
ID0gbGF5b3V0UmVjdC5sZWZ0KCkgLSBvcmlnaW5hbFJlY3QubGVmdCgpOwotICAgICAgICBpbnQg
cGFkZGluZ1JpZ2h0ID0gb3JpZ2luYWxSZWN0LnJpZ2h0KCkgLSBsYXlvdXRSZWN0LnJpZ2h0KCk7
Ci0gICAgICAgIGludCBwYWRkaW5nVG9wID0gbGF5b3V0UmVjdC50b3AoKSAtIG9yaWdpbmFsUmVj
dC50b3AoKTsKLSAgICAgICAgaW50IHBhZGRpbmdCb3R0b20gPSBvcmlnaW5hbFJlY3QuYm90dG9t
KCkgLSBsYXlvdXRSZWN0LmJvdHRvbSgpOwotCi0gICAgICAgIHJldHVybiBvcmlnaW5hbFJlY3Qu
YWRqdXN0ZWQoLXBhZGRpbmdMZWZ0LCAtcGFkZGluZ1RvcCwgcGFkZGluZ1JpZ2h0LCBwYWRkaW5n
Qm90dG9tKTsKLSAgICB9Ci0gICAgcmV0dXJuIG9yaWdpbmFsUmVjdDsKLX0KLQotdm9pZCBSZW5k
ZXJUaGVtZVFTdHlsZTo6Y29tcHV0ZVNpemVCYXNlZE9uU3R5bGUoUmVuZGVyU3R5bGUqIHJlbmRl
clN0eWxlKSBjb25zdAotewotICAgIFFTaXplIHNpemUoMCwgMCk7Ci0gICAgY29uc3QgUUZvbnRN
ZXRyaWNzIGZtKHJlbmRlclN0eWxlLT5mb250KCkuc3ludGhldGljRm9udCgpKTsKLSAgICBRU3R5
bGUqIHN0eWxlID0gcVN0eWxlKCk7Ci0KLSAgICBzd2l0Y2ggKHJlbmRlclN0eWxlLT5hcHBlYXJh
bmNlKCkpIHsKLSAgICBjYXNlIFRleHRBcmVhUGFydDoKLSAgICBjYXNlIFNlYXJjaEZpZWxkUGFy
dDoKLSAgICBjYXNlIFRleHRGaWVsZFBhcnQ6IHsKLSAgICAgICAgaW50IHBhZGRpbmcgPSBmaW5k
RnJhbWVMaW5lV2lkdGgoc3R5bGUpOwotICAgICAgICByZW5kZXJTdHlsZS0+c2V0UGFkZGluZ0xl
ZnQoTGVuZ3RoKHBhZGRpbmcsIEZpeGVkKSk7Ci0gICAgICAgIHJlbmRlclN0eWxlLT5zZXRQYWRk
aW5nUmlnaHQoTGVuZ3RoKHBhZGRpbmcsIEZpeGVkKSk7Ci0gICAgICAgIHJlbmRlclN0eWxlLT5z
ZXRQYWRkaW5nVG9wKExlbmd0aChwYWRkaW5nLCBGaXhlZCkpOwotICAgICAgICByZW5kZXJTdHls
ZS0+c2V0UGFkZGluZ0JvdHRvbShMZW5ndGgocGFkZGluZywgRml4ZWQpKTsKLSAgICAgICAgYnJl
YWs7Ci0gICAgfQotICAgIGRlZmF1bHQ6Ci0gICAgICAgIGJyZWFrOwotICAgIH0KLSAgICAvLyBJ
ZiB0aGUgd2lkdGggYW5kIGhlaWdodCBhcmUgYm90aCBzcGVjaWZpZWQsIHRoZW4gd2UgaGF2ZSBu
b3RoaW5nIHRvIGRvLgotICAgIGlmICghcmVuZGVyU3R5bGUtPndpZHRoKCkuaXNJbnRyaW5zaWNP
ckF1dG8oKSAmJiAhcmVuZGVyU3R5bGUtPmhlaWdodCgpLmlzQXV0bygpKQotICAgICAgICByZXR1
cm47Ci0KLSAgICBzd2l0Y2ggKHJlbmRlclN0eWxlLT5hcHBlYXJhbmNlKCkpIHsKLSAgICBjYXNl
IENoZWNrYm94UGFydDogewotICAgICAgICBRU3R5bGVPcHRpb24gc3R5bGVPcHRpb247Ci0gICAg
ICAgIHN0eWxlT3B0aW9uLnN0YXRlIHw9IFFTdHlsZTo6U3RhdGVfU21hbGw7Ci0gICAgICAgIGlu
dCBjaGVja0JveFdpZHRoID0gc3R5bGUtPnBpeGVsTWV0cmljKFFTdHlsZTo6UE1fSW5kaWNhdG9y
V2lkdGgsICZzdHlsZU9wdGlvbik7Ci0gICAgICAgIGNoZWNrQm94V2lkdGggKj0gcmVuZGVyU3R5
bGUtPmVmZmVjdGl2ZVpvb20oKTsKLSAgICAgICAgc2l6ZSA9IFFTaXplKGNoZWNrQm94V2lkdGgs
IGNoZWNrQm94V2lkdGgpOwotICAgICAgICBicmVhazsKLSAgICB9Ci0gICAgY2FzZSBSYWRpb1Bh
cnQ6IHsKLSAgICAgICAgUVN0eWxlT3B0aW9uIHN0eWxlT3B0aW9uOwotICAgICAgICBzdHlsZU9w
dGlvbi5zdGF0ZSB8PSBRU3R5bGU6OlN0YXRlX1NtYWxsOwotICAgICAgICBpbnQgcmFkaW9XaWR0
aCA9IHN0eWxlLT5waXhlbE1ldHJpYyhRU3R5bGU6OlBNX0V4Y2x1c2l2ZUluZGljYXRvcldpZHRo
LCAmc3R5bGVPcHRpb24pOwotICAgICAgICByYWRpb1dpZHRoICo9IHJlbmRlclN0eWxlLT5lZmZl
Y3RpdmVab29tKCk7Ci0gICAgICAgIHNpemUgPSBRU2l6ZShyYWRpb1dpZHRoLCByYWRpb1dpZHRo
KTsKLSAgICAgICAgYnJlYWs7Ci0gICAgfQotICAgIGNhc2UgUHVzaEJ1dHRvblBhcnQ6Ci0gICAg
Y2FzZSBCdXR0b25QYXJ0OiB7Ci0gICAgICAgIFFTdHlsZU9wdGlvbkJ1dHRvbiBzdHlsZU9wdGlv
bjsKLSAgICAgICAgc3R5bGVPcHRpb24uc3RhdGUgfD0gUVN0eWxlOjpTdGF0ZV9TbWFsbDsKLSAg
ICAgICAgUVNpemUgY29udGVudFNpemUgPSBmbS5zaXplKFF0OjpUZXh0U2hvd01uZW1vbmljLCBR
U3RyaW5nOjpmcm9tTGF0aW4xKCJYIikpOwotICAgICAgICBRU2l6ZSBwdXNoQnV0dG9uU2l6ZSA9
IHN0eWxlLT5zaXplRnJvbUNvbnRlbnRzKFFTdHlsZTo6Q1RfUHVzaEJ1dHRvbiwKLSAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmc3R5bGVPcHRp
b24sIGNvbnRlbnRTaXplLCAwKTsKLSAgICAgICAgc3R5bGVPcHRpb24ucmVjdCA9IFFSZWN0KDAs
IDAsIHB1c2hCdXR0b25TaXplLndpZHRoKCksIHB1c2hCdXR0b25TaXplLmhlaWdodCgpKTsKLSAg
ICAgICAgUVJlY3QgbGF5b3V0UmVjdCA9IHN0eWxlLT5zdWJFbGVtZW50UmVjdChRU3R5bGU6OlNF
X1B1c2hCdXR0b25MYXlvdXRJdGVtLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICZzdHlsZU9wdGlvbiwgMCk7Ci0KLSAgICAgICAgLy8gSWYgdGhlIHN0
eWxlIHN1cHBvcnRzIGxheW91dCByZWN0cyB3ZSB1c2UgdGhhdCwgYW5kICBjb21wZW5zYXRlIGFj
Y29yZGluZ2x5Ci0gICAgICAgIC8vIGluIHBhaW50QnV0dG9uKCkgYmVsb3cuCi0gICAgICAgIGlm
ICghbGF5b3V0UmVjdC5pc051bGwoKSkKLSAgICAgICAgICAgIHNpemUuc2V0SGVpZ2h0KGxheW91
dFJlY3QuaGVpZ2h0KCkpOwotICAgICAgICBlbHNlCi0gICAgICAgICAgICBzaXplLnNldEhlaWdo
dChwdXNoQnV0dG9uU2l6ZS5oZWlnaHQoKSk7Ci0KLSAgICAgICAgYnJlYWs7Ci0gICAgfQotICAg
IGNhc2UgTWVudWxpc3RQYXJ0OiB7Ci0gICAgICAgIFFTdHlsZU9wdGlvbkNvbWJvQm94IHN0eWxl
T3B0aW9uOwotICAgICAgICBzdHlsZU9wdGlvbi5zdGF0ZSB8PSBRU3R5bGU6OlN0YXRlX1NtYWxs
OwotICAgICAgICBpbnQgY29udGVudEhlaWdodCA9IHFNYXgoZm0ubGluZVNwYWNpbmcoKSwgMTQp
ICsgMjsKLSAgICAgICAgUVNpemUgbWVudUxpc3RTaXplID0gc3R5bGUtPnNpemVGcm9tQ29udGVu
dHMoUVN0eWxlOjpDVF9Db21ib0JveCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgJnN0eWxlT3B0aW9uLCBRU2l6ZSgwLCBjb250ZW50SGVpZ2h0
KSwgMCk7Ci0gICAgICAgIHNpemUuc2V0SGVpZ2h0KG1lbnVMaXN0U2l6ZS5oZWlnaHQoKSk7Ci0g
ICAgICAgIGJyZWFrOwotICAgIH0KLSAgICBkZWZhdWx0OgotICAgICAgICBicmVhazsKLSAgICB9
Ci0KLSAgICAvLyBGSVhNRTogQ2hlY2sgaXMgZmxhd2VkLCBzaW5jZSBpdCBkb2Vzbid0IHRha2Ug
bWluLXdpZHRoL21heC13aWR0aCBpbnRvIGFjY291bnQuCi0gICAgaWYgKHJlbmRlclN0eWxlLT53
aWR0aCgpLmlzSW50cmluc2ljT3JBdXRvKCkgJiYgc2l6ZS53aWR0aCgpID4gMCkKLSAgICAgICAg
cmVuZGVyU3R5bGUtPnNldE1pbldpZHRoKExlbmd0aChzaXplLndpZHRoKCksIEZpeGVkKSk7Ci0g
ICAgaWYgKHJlbmRlclN0eWxlLT5oZWlnaHQoKS5pc0F1dG8oKSAmJiBzaXplLmhlaWdodCgpID4g
MCkKLSAgICAgICAgcmVuZGVyU3R5bGUtPnNldE1pbkhlaWdodChMZW5ndGgoc2l6ZS5oZWlnaHQo
KSwgRml4ZWQpKTsKLX0KLQotCi0KLXZvaWQgUmVuZGVyVGhlbWVRU3R5bGU6OmFkanVzdEJ1dHRv
blN0eWxlKFN0eWxlUmVzb2x2ZXIqIHN0eWxlUmVzb2x2ZXIsIFJlbmRlclN0eWxlKiBzdHlsZSwg
RWxlbWVudCopIGNvbnN0Ci17Ci0gICAgLy8gRGl0Y2ggdGhlIGJvcmRlci4KLSAgICBzdHlsZS0+
cmVzZXRCb3JkZXIoKTsKLQotI2lmZGVmIFFfV1NfTUFDCi0gICAgaWYgKHN0eWxlLT5hcHBlYXJh
bmNlKCkgPT0gUHVzaEJ1dHRvblBhcnQpIHsKLSAgICAgICAgLy8gVGhlIE1hYyBwb3J0cyBpZ25v
cmUgdGhlIHNwZWNpZmllZCBoZWlnaHQgZm9yIDxpbnB1dCB0eXBlPSJidXR0b24iPiBlbGVtZW50
cwotICAgICAgICAvLyB1bmxlc3MgYSBib3JkZXIgYW5kL29yIGJhY2tncm91bmQgQ1NTIHByb3Bl
cnR5IGlzIGFsc28gc3BlY2lmaWVkLgotICAgICAgICBzdHlsZS0+c2V0SGVpZ2h0KExlbmd0aChB
dXRvKSk7Ci0gICAgfQotI2VuZGlmCi0KLSAgICBGb250RGVzY3JpcHRpb24gZm9udERlc2NyaXB0
aW9uID0gc3R5bGUtPmZvbnREZXNjcmlwdGlvbigpOwotICAgIGZvbnREZXNjcmlwdGlvbi5zZXRJ
c0Fic29sdXRlU2l6ZSh0cnVlKTsKLQotI2lmZGVmIFFfV1NfTUFDIC8vIFVzZSBmaXhlZCBmb250
IHNpemUgYW5kIGZhbWlseSBvbiBNYWMgKGxpa2UgU2FmYXJpIGRvZXMpCi0gICAgZm9udERlc2Ny
aXB0aW9uLnNldFNwZWNpZmllZFNpemUobV9idXR0b25Gb250UGl4ZWxTaXplKTsKLSAgICBmb250
RGVzY3JpcHRpb24uc2V0Q29tcHV0ZWRTaXplKG1fYnV0dG9uRm9udFBpeGVsU2l6ZSk7Ci0jZWxz
ZQotICAgIGZvbnREZXNjcmlwdGlvbi5zZXRTcGVjaWZpZWRTaXplKHN0eWxlLT5mb250U2l6ZSgp
KTsKLSAgICBmb250RGVzY3JpcHRpb24uc2V0Q29tcHV0ZWRTaXplKHN0eWxlLT5mb250U2l6ZSgp
KTsKLSNlbmRpZgotCi0gICAgRm9udEZhbWlseSBmb250RmFtaWx5OwotICAgIGZvbnRGYW1pbHku
c2V0RmFtaWx5KG1fYnV0dG9uRm9udEZhbWlseSk7Ci0gICAgZm9udERlc2NyaXB0aW9uLnNldEZh
bWlseShmb250RmFtaWx5KTsKLSAgICBzdHlsZS0+c2V0Rm9udERlc2NyaXB0aW9uKGZvbnREZXNj
cmlwdGlvbik7Ci0gICAgc3R5bGUtPmZvbnQoKS51cGRhdGUoc3R5bGVSZXNvbHZlci0+Zm9udFNl
bGVjdG9yKCkpOwotICAgIHN0eWxlLT5zZXRMaW5lSGVpZ2h0KFJlbmRlclN0eWxlOjppbml0aWFs
TGluZUhlaWdodCgpKTsKLSAgICBzZXRCdXR0b25TaXplKHN0eWxlKTsKLSAgICBzZXRCdXR0b25Q
YWRkaW5nKHN0eWxlKTsKLX0KLQotdm9pZCBSZW5kZXJUaGVtZVFTdHlsZTo6c2V0QnV0dG9uUGFk
ZGluZyhSZW5kZXJTdHlsZSogc3R5bGUpIGNvbnN0Ci17Ci0gICAgUVN0eWxlT3B0aW9uQnV0dG9u
IHN0eWxlT3B0aW9uOwotICAgIHN0eWxlT3B0aW9uLnN0YXRlIHw9IFFTdHlsZTo6U3RhdGVfU21h
bGw7Ci0KLSAgICAvLyBGYWtlIGEgYnV0dG9uIHJlY3QgaGVyZSwgc2luY2Ugd2UncmUganVzdCBj
b21wdXRpbmcgZGVsdGFzCi0gICAgUVJlY3Qgb3JpZ2luYWxSZWN0ID0gUVJlY3QoMCwgMCwgMTAw
LCAzMCk7Ci0gICAgc3R5bGVPcHRpb24ucmVjdCA9IG9yaWdpbmFsUmVjdDsKLQotICAgIC8vIERl
ZmF1bHQgcGFkZGluZyBpcyBiYXNlZCBvbiB0aGUgYnV0dG9uIG1hcmdpbiBwaXhlbCBtZXRyaWMK
LSAgICBpbnQgYnV0dG9uTWFyZ2luID0gcVN0eWxlKCktPnBpeGVsTWV0cmljKFFTdHlsZTo6UE1f
QnV0dG9uTWFyZ2luLCAmc3R5bGVPcHRpb24sIDApOwotICAgIGludCBwYWRkaW5nTGVmdCA9IGJ1
dHRvbk1hcmdpbjsKLSAgICBpbnQgcGFkZGluZ1JpZ2h0ID0gYnV0dG9uTWFyZ2luOwotICAgIGlu
dCBwYWRkaW5nVG9wID0gYnV0dG9uTWFyZ2luOwotICAgIGludCBwYWRkaW5nQm90dG9tID0gYnV0
dG9uTWFyZ2luOwotCi0gICAgLy8gVGhlbiBjaGVjayBpZiB0aGUgc3R5bGUgdXNlcyBsYXlvdXQg
bWFyZ2lucwotICAgIFFSZWN0IGxheW91dFJlY3QgPSBxU3R5bGUoKS0+c3ViRWxlbWVudFJlY3Qo
UVN0eWxlOjpTRV9QdXNoQnV0dG9uTGF5b3V0SXRlbSwKLSAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICZzdHlsZU9wdGlvbiwgMCk7Ci0gICAgaWYgKCFsYXlv
dXRSZWN0LmlzTnVsbCgpKSB7Ci0gICAgICAgIFFSZWN0IGNvbnRlbnRzUmVjdCA9IHFTdHlsZSgp
LT5zdWJFbGVtZW50UmVjdChRU3R5bGU6OlNFX1B1c2hCdXR0b25Db250ZW50cywKLSAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZzdHlsZU9wdGlv
biwgMCk7Ci0gICAgICAgIHBhZGRpbmdMZWZ0ID0gY29udGVudHNSZWN0LmxlZnQoKSAtIGxheW91
dFJlY3QubGVmdCgpOwotICAgICAgICBwYWRkaW5nUmlnaHQgPSBsYXlvdXRSZWN0LnJpZ2h0KCkg
LSBjb250ZW50c1JlY3QucmlnaHQoKTsKLSAgICAgICAgcGFkZGluZ1RvcCA9IGNvbnRlbnRzUmVj
dC50b3AoKSAtIGxheW91dFJlY3QudG9wKCk7Ci0KLSAgICAgICAgLy8gQ2FuJ3QgdXNlIHRoaXMg
cmlnaHQgbm93IGJlY2F1c2Ugd2UgZG9uJ3QgaGF2ZSB0aGUgYmFzZWxpbmUgdG8gY29tcGVuc2F0
ZQotICAgICAgICAvLyBwYWRkaW5nQm90dG9tID0gbGF5b3V0UmVjdC5ib3R0b20oKSAtIGNvbnRl
bnRzUmVjdC5ib3R0b20oKTsKLSAgICB9Ci0gICAgc3R5bGUtPnNldFBhZGRpbmdMZWZ0KExlbmd0
aChwYWRkaW5nTGVmdCwgRml4ZWQpKTsKLSAgICBzdHlsZS0+c2V0UGFkZGluZ1JpZ2h0KExlbmd0
aChwYWRkaW5nUmlnaHQsIEZpeGVkKSk7Ci0gICAgc3R5bGUtPnNldFBhZGRpbmdUb3AoTGVuZ3Ro
KHBhZGRpbmdUb3AsIEZpeGVkKSk7Ci0gICAgc3R5bGUtPnNldFBhZGRpbmdCb3R0b20oTGVuZ3Ro
KHBhZGRpbmdCb3R0b20sIEZpeGVkKSk7Ci19Ci0KLWJvb2wgUmVuZGVyVGhlbWVRU3R5bGU6OnBh
aW50QnV0dG9uKFJlbmRlck9iamVjdCogbywgY29uc3QgUGFpbnRJbmZvJiBpLCBjb25zdCBJbnRS
ZWN0JiByKQotewotICAgIFN0eWxlUGFpbnRlclFTdHlsZSBwKHRoaXMsIGkpOwotICAgIGlmICgh
cC5pc1ZhbGlkKCkpCi0gICAgICAgcmV0dXJuIHRydWU7Ci0KLSAgICBRU3R5bGVPcHRpb25CdXR0
b24gb3B0aW9uOwotICAgIGluaXRTdHlsZU9wdGlvbihwLndpZGdldCwgb3B0aW9uKTsKLSAgICBv
cHRpb24ucmVjdCA9IHI7Ci0gICAgb3B0aW9uLnN0YXRlIHw9IFFTdHlsZTo6U3RhdGVfU21hbGw7
Ci0KLSAgICBDb250cm9sUGFydCBhcHBlYXJhbmNlID0gaW5pdGlhbGl6ZUNvbW1vblFTdHlsZU9w
dGlvbnMob3B0aW9uLCBvKTsKLSAgICBpZiAoYXBwZWFyYW5jZSA9PSBQdXNoQnV0dG9uUGFydCB8
fCBhcHBlYXJhbmNlID09IEJ1dHRvblBhcnQpIHsKLSAgICAgICAgb3B0aW9uLnJlY3QgPSBpbmZs
YXRlQnV0dG9uUmVjdChvcHRpb24ucmVjdCk7Ci0gICAgICAgIHAuZHJhd0NvbnRyb2woUVN0eWxl
OjpDRV9QdXNoQnV0dG9uLCBvcHRpb24pOwotICAgIH0gZWxzZSBpZiAoYXBwZWFyYW5jZSA9PSBS
YWRpb1BhcnQpCi0gICAgICAgcC5kcmF3Q29udHJvbChRU3R5bGU6OkNFX1JhZGlvQnV0dG9uLCBv
cHRpb24pOwotICAgIGVsc2UgaWYgKGFwcGVhcmFuY2UgPT0gQ2hlY2tib3hQYXJ0KQotICAgICAg
IHAuZHJhd0NvbnRyb2woUVN0eWxlOjpDRV9DaGVja0JveCwgb3B0aW9uKTsKLQotICAgIHJldHVy
biBmYWxzZTsKLX0KLQotYm9vbCBSZW5kZXJUaGVtZVFTdHlsZTo6cGFpbnRUZXh0RmllbGQoUmVu
ZGVyT2JqZWN0KiBvLCBjb25zdCBQYWludEluZm8mIGksIGNvbnN0IEludFJlY3QmIHIpCi17Ci0g
ICAgU3R5bGVQYWludGVyUVN0eWxlIHAodGhpcywgaSk7Ci0gICAgaWYgKCFwLmlzVmFsaWQoKSkK
LSAgICAgICAgcmV0dXJuIHRydWU7Ci0KLSAgICBRU3R5bGVPcHRpb25GcmFtZVYyIHBhbmVsOwot
ICAgIGluaXRTdHlsZU9wdGlvbihwLndpZGdldCwgcGFuZWwpOwotICAgIHBhbmVsLnJlY3QgPSBy
OwotICAgIHBhbmVsLmxpbmVXaWR0aCA9IGZpbmRGcmFtZUxpbmVXaWR0aChxU3R5bGUoKSk7Ci0g
ICAgcGFuZWwuc3RhdGUgfD0gUVN0eWxlOjpTdGF0ZV9TdW5rZW47Ci0gICAgcGFuZWwuZmVhdHVy
ZXMgPSBRU3R5bGVPcHRpb25GcmFtZVYyOjpOb25lOwotCi0gICAgLy8gR2V0IHRoZSBjb3JyZWN0
IHRoZW1lIGRhdGEgZm9yIGEgdGV4dCBmaWVsZAotICAgIENvbnRyb2xQYXJ0IGFwcGVhcmFuY2Ug
PSBpbml0aWFsaXplQ29tbW9uUVN0eWxlT3B0aW9ucyhwYW5lbCwgbyk7Ci0gICAgaWYgKGFwcGVh
cmFuY2UgIT0gVGV4dEZpZWxkUGFydAotICAgICAgICAmJiBhcHBlYXJhbmNlICE9IFNlYXJjaEZp
ZWxkUGFydAotICAgICAgICAmJiBhcHBlYXJhbmNlICE9IFRleHRBcmVhUGFydAotICAgICAgICAm
JiBhcHBlYXJhbmNlICE9IExpc3Rib3hQYXJ0KQotICAgICAgICByZXR1cm4gdHJ1ZTsKLQotICAg
IC8vIE5vdyBwYWludCB0aGUgdGV4dCBmaWVsZC4KLSAgICBwLmRyYXdQcmltaXRpdmUoUVN0eWxl
OjpQRV9QYW5lbExpbmVFZGl0LCBwYW5lbCk7Ci0gICAgcmV0dXJuIGZhbHNlOwotfQotCi12b2lk
IFJlbmRlclRoZW1lUVN0eWxlOjphZGp1c3RUZXh0QXJlYVN0eWxlKFN0eWxlUmVzb2x2ZXIqIHN0
eWxlUmVzb2x2ZXIsIFJlbmRlclN0eWxlKiBzdHlsZSwgRWxlbWVudCogZWxlbWVudCkgY29uc3QK
LXsKLSAgICBhZGp1c3RUZXh0RmllbGRTdHlsZShzdHlsZVJlc29sdmVyLCBzdHlsZSwgZWxlbWVu
dCk7Ci19Ci0KLWJvb2wgUmVuZGVyVGhlbWVRU3R5bGU6OnBhaW50VGV4dEFyZWEoUmVuZGVyT2Jq
ZWN0KiBvLCBjb25zdCBQYWludEluZm8mIGksIGNvbnN0IEludFJlY3QmIHIpCi17Ci0gICAgcmV0
dXJuIHBhaW50VGV4dEZpZWxkKG8sIGksIHIpOwotfQotCi12b2lkIFJlbmRlclRoZW1lUVN0eWxl
OjpzZXRQb3B1cFBhZGRpbmcoUmVuZGVyU3R5bGUqIHN0eWxlKSBjb25zdAotewotICAgIGNvbnN0
IGludCBwYWRkaW5nTGVmdCA9IDQ7Ci0gICAgY29uc3QgaW50IHBhZGRpbmdSaWdodCA9IHN0eWxl
LT53aWR0aCgpLmlzRml4ZWQoKSB8fCBzdHlsZS0+d2lkdGgoKS5pc1BlcmNlbnQoKSA/IDUgOiA4
OwotCi0gICAgc3R5bGUtPnNldFBhZGRpbmdMZWZ0KExlbmd0aChwYWRkaW5nTGVmdCwgRml4ZWQp
KTsKLQotICAgIFFTdHlsZU9wdGlvbkNvbWJvQm94IG9wdDsKLSAgICBpbnQgdyA9IHFTdHlsZSgp
LT5waXhlbE1ldHJpYyhRU3R5bGU6OlBNX0J1dHRvbkljb25TaXplLCAmb3B0LCAwKTsKLSAgICBz
dHlsZS0+c2V0UGFkZGluZ1JpZ2h0KExlbmd0aChwYWRkaW5nUmlnaHQgKyB3LCBGaXhlZCkpOwot
Ci0gICAgc3R5bGUtPnNldFBhZGRpbmdUb3AoTGVuZ3RoKDIsIEZpeGVkKSk7Ci0gICAgc3R5bGUt
PnNldFBhZGRpbmdCb3R0b20oTGVuZ3RoKDIsIEZpeGVkKSk7Ci19Ci0KLVFQYWxldHRlIFJlbmRl
clRoZW1lUVN0eWxlOjpjb2xvclBhbGV0dGUoKSBjb25zdAotewotICAgIFFQYWxldHRlIHBhbGV0
dGUgPSBSZW5kZXJUaGVtZVF0Ojpjb2xvclBhbGV0dGUoKTsKLSAgICBzZXRQYWxldHRlRnJvbVBh
Z2VDbGllbnRJZkV4aXN0cyhwYWxldHRlKTsKLSAgICByZXR1cm4gcGFsZXR0ZTsKLX0KLQotYm9v
bCBSZW5kZXJUaGVtZVFTdHlsZTo6cGFpbnRNZW51TGlzdChSZW5kZXJPYmplY3QqIG8sIGNvbnN0
IFBhaW50SW5mbyYgaSwgY29uc3QgSW50UmVjdCYgcikKLXsKLSAgICBTdHlsZVBhaW50ZXJRU3R5
bGUgcCh0aGlzLCBpKTsKLSAgICBpZiAoIXAuaXNWYWxpZCgpKQotICAgICAgICByZXR1cm4gdHJ1
ZTsKLQotICAgIFFTdHlsZU9wdGlvbkNvbWJvQm94IG9wdDsKLSAgICBpbml0U3R5bGVPcHRpb24o
cC53aWRnZXQsIG9wdCk7Ci0gICAgaW5pdGlhbGl6ZUNvbW1vblFTdHlsZU9wdGlvbnMob3B0LCBv
KTsKLQotICAgIEludFJlY3QgcmVjdCA9IHI7Ci0KLSNpZiBkZWZpbmVkKFFfV1NfTUFDKSAmJiAh
ZGVmaW5lZChRVF9OT19TVFlMRV9NQUMpCi0gICAgLy8gUU1hY1N0eWxlIG1ha2VzIHRoZSBjb21i
byBib3hlcyBhIGxpdHRsZSBiaXQgc21hbGxlciB0byBsZWF2ZSBzcGFjZSBmb3IgdGhlIGZvY3Vz
IHJlY3QuCi0gICAgLy8gQmVjYXVzZSBvZiBpdCwgdGhlIGNvbWJvIGJ1dHRvbiBpcyBkcmF3biBh
dCBhIHBvaW50IHRvIHRoZSBsZWZ0IG9mIHdoZXJlIGl0IHdhcyBleHBlY3QgdG8gYmUgYW5kIG1h
eSBlbmQgdXAKLSAgICAvLyBvdmVybGFwcGVkIHdpdGggdGhlIHRleHQuIFRoaXMgd2lsbCBmb3Jj
ZSBRTWFjU3R5bGUgdG8gZHJhdyB0aGUgY29tYm8gYm94IHdpdGggdGhlIGV4cGVjdGVkIHdpZHRo
LgotICAgIGlmIChxb2JqZWN0X2Nhc3Q8UU1hY1N0eWxlKj4ocC5zdHlsZSkpCi0gICAgICAgIHJl
Y3QuaW5mbGF0ZVgoMyk7Ci0jZW5kaWYKLQotICAgIGNvbnN0IFFQb2ludCB0b3BMZWZ0ID0gcmVj
dC5sb2NhdGlvbigpOwotICAgIHAucGFpbnRlci0+dHJhbnNsYXRlKHRvcExlZnQpOwotICAgIG9w
dC5yZWN0Lm1vdmVUbyhRUG9pbnQoMCwgMCkpOwotICAgIG9wdC5yZWN0LnNldFNpemUocmVjdC5z
aXplKCkpOwotCi0gICAgcC5kcmF3Q29tcGxleENvbnRyb2woUVN0eWxlOjpDQ19Db21ib0JveCwg
b3B0KTsKLSAgICBwLnBhaW50ZXItPnRyYW5zbGF0ZSgtdG9wTGVmdCk7Ci0gICAgcmV0dXJuIGZh
bHNlOwotfQotCi12b2lkIFJlbmRlclRoZW1lUVN0eWxlOjphZGp1c3RNZW51TGlzdEJ1dHRvblN0
eWxlKFN0eWxlUmVzb2x2ZXIqIHN0eWxlUmVzb2x2ZXIsIFJlbmRlclN0eWxlKiBzdHlsZSwgRWxl
bWVudCogZSkgY29uc3QKLXsKLSAgICAvLyBXT1JLQVJPVU5EIGJlY2F1c2UgaHRtbC5jc3Mgc3Bl
Y2lmaWVzIC13ZWJraXQtYm9yZGVyLXJhZGl1cyBmb3IgPHNlbGVjdD4gc28gd2Ugb3ZlcnJpZGUg
aXQgaGVyZQotICAgIC8vIHNlZSBhbHNvIGh0dHA6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcu
Y2dpP2lkPTE4Mzk5Ci0gICAgc3R5bGUtPnJlc2V0Qm9yZGVyUmFkaXVzKCk7Ci0KLSAgICBSZW5k
ZXJUaGVtZVF0OjphZGp1c3RNZW51TGlzdEJ1dHRvblN0eWxlKHN0eWxlUmVzb2x2ZXIsIHN0eWxl
LCBlKTsKLX0KLQotYm9vbCBSZW5kZXJUaGVtZVFTdHlsZTo6cGFpbnRNZW51TGlzdEJ1dHRvbihS
ZW5kZXJPYmplY3QqIG8sIGNvbnN0IFBhaW50SW5mbyYgaSwKLSAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBjb25zdCBJbnRSZWN0JiByKQotewotICAgIFN0eWxlUGFpbnRl
clFTdHlsZSBwKHRoaXMsIGkpOwotICAgIGlmICghcC5pc1ZhbGlkKCkpCi0gICAgICAgIHJldHVy
biB0cnVlOwotCi0gICAgUVN0eWxlT3B0aW9uQ29tYm9Cb3ggb3B0aW9uOwotICAgIGluaXRTdHls
ZU9wdGlvbihwLndpZGdldCwgb3B0aW9uKTsKLSAgICBpbml0aWFsaXplQ29tbW9uUVN0eWxlT3B0
aW9ucyhvcHRpb24sIG8pOwotICAgIG9wdGlvbi5yZWN0ID0gcjsKLQotICAgIC8vIGZvciBkcmF3
aW5nIHRoZSBjb21ibyBib3ggYXJyb3csIHJlbHkgb25seSBvbiB0aGUgZmFsbGJhY2sgc3R5bGUK
LSAgICBwLnN0eWxlID0gZmFsbGJhY2tTdHlsZSgpOwotICAgIG9wdGlvbi5zdWJDb250cm9scyA9
IFFTdHlsZTo6U0NfQ29tYm9Cb3hBcnJvdzsKLSAgICBwLmRyYXdDb21wbGV4Q29udHJvbChRU3R5
bGU6OkNDX0NvbWJvQm94LCBvcHRpb24pOwotCi0gICAgcmV0dXJuIGZhbHNlOwotfQotCi0jaWYg
RU5BQkxFKFBST0dSRVNTX0VMRU1FTlQpCi1kb3VibGUgUmVuZGVyVGhlbWVRU3R5bGU6OmFuaW1h
dGlvbkR1cmF0aW9uRm9yUHJvZ3Jlc3NCYXIoUmVuZGVyUHJvZ3Jlc3MqIHJlbmRlclByb2dyZXNz
KSBjb25zdAotewotICAgIGlmIChyZW5kZXJQcm9ncmVzcy0+cG9zaXRpb24oKSA+PSAwKQotICAg
ICAgICByZXR1cm4gMDsKLQotICAgIFFTdHlsZU9wdGlvblByb2dyZXNzQmFyVjIgb3B0aW9uOwot
ICAgIG9wdGlvbi5yZWN0LnNldFNpemUocmVuZGVyUHJvZ3Jlc3MtPnBpeGVsU25hcHBlZFNpemUo
KSk7Ci0gICAgLy8gRklYTUU6IFVudGlsIGh0dHA6Ly9idWdyZXBvcnRzLnF0Lm5va2lhLmNvbS9i
cm93c2UvUVRCVUctOTE3MSBpcyBmaXhlZCwKLSAgICAvLyB3ZSBzaW11bGF0ZSBvbmUgc3F1YXJl
IGFuaW1hdGluZyBhY3Jvc3MgdGhlIHByb2dyZXNzIGJhci4KLSAgICByZXR1cm4gKG9wdGlvbi5y
ZWN0LndpZHRoKCkgLyBxU3R5bGUoKS0+cGl4ZWxNZXRyaWMoUVN0eWxlOjpQTV9Qcm9ncmVzc0Jh
ckNodW5rV2lkdGgsICZvcHRpb24pKSAqIGFuaW1hdGlvblJlcGVhdEludGVydmFsRm9yUHJvZ3Jl
c3NCYXIocmVuZGVyUHJvZ3Jlc3MpOwotfQotCi1ib29sIFJlbmRlclRoZW1lUVN0eWxlOjpwYWlu
dFByb2dyZXNzQmFyKFJlbmRlck9iamVjdCogbywgY29uc3QgUGFpbnRJbmZvJiBwaSwgY29uc3Qg
SW50UmVjdCYgcikKLXsKLSAgICBpZiAoIW8tPmlzUHJvZ3Jlc3MoKSkKLSAgICAgICAgcmV0dXJu
IHRydWU7Ci0KLSAgICBTdHlsZVBhaW50ZXJRU3R5bGUgcCh0aGlzLCBwaSk7Ci0gICAgaWYgKCFw
LmlzVmFsaWQoKSkKLSAgICAgICByZXR1cm4gdHJ1ZTsKLQotICAgIFFTdHlsZU9wdGlvblByb2dy
ZXNzQmFyVjIgb3B0aW9uOwotICAgIGluaXRTdHlsZU9wdGlvbihwLndpZGdldCwgb3B0aW9uKTsK
LSAgICBpbml0aWFsaXplQ29tbW9uUVN0eWxlT3B0aW9ucyhvcHRpb24sIG8pOwotCi0gICAgUmVu
ZGVyUHJvZ3Jlc3MqIHJlbmRlclByb2dyZXNzID0gdG9SZW5kZXJQcm9ncmVzcyhvKTsKLSAgICBv
cHRpb24ucmVjdCA9IHI7Ci0gICAgb3B0aW9uLm1heGltdW0gPSBzdGQ6Om51bWVyaWNfbGltaXRz
PGludD46Om1heCgpOwotICAgIG9wdGlvbi5taW5pbXVtID0gMDsKLSAgICBvcHRpb24ucHJvZ3Jl
c3MgPSAocmVuZGVyUHJvZ3Jlc3MtPnBvc2l0aW9uKCkgKiBzdGQ6Om51bWVyaWNfbGltaXRzPGlu
dD46Om1heCgpKTsKLQotICAgIGNvbnN0IFFQb2ludCB0b3BMZWZ0ID0gci5sb2NhdGlvbigpOwot
ICAgIHAucGFpbnRlci0+dHJhbnNsYXRlKHRvcExlZnQpOwotICAgIG9wdGlvbi5yZWN0Lm1vdmVU
byhRUG9pbnQoMCwgMCkpOwotICAgIG9wdGlvbi5yZWN0LnNldFNpemUoci5zaXplKCkpOwotCi0g
ICAgaWYgKG9wdGlvbi5wcm9ncmVzcyA8IDApIHsKLSAgICAgICAgLy8gRklYTUU6IFVudGlsIGh0
dHA6Ly9idWdyZXBvcnRzLnF0Lm5va2lhLmNvbS9icm93c2UvUVRCVUctOTE3MSBpcyBmaXhlZCwK
LSAgICAgICAgLy8gd2Ugc2ltdWxhdGUgb25lIHNxdWFyZSBhbmltYXRpbmcgYWNyb3NzIHRoZSBw
cm9ncmVzcyBiYXIuCi0gICAgICAgIHAuZHJhd0NvbnRyb2woUVN0eWxlOjpDRV9Qcm9ncmVzc0Jh
ckdyb292ZSwgb3B0aW9uKTsKLSAgICAgICAgaW50IGNodW5rV2lkdGggPSBxU3R5bGUoKS0+cGl4
ZWxNZXRyaWMoUVN0eWxlOjpQTV9Qcm9ncmVzc0JhckNodW5rV2lkdGgsICZvcHRpb24pOwotICAg
ICAgICBRQ29sb3IgY29sb3IgPSAob3B0aW9uLnBhbGV0dGUuaGlnaGxpZ2h0KCkgPT0gb3B0aW9u
LnBhbGV0dGUuYmFja2dyb3VuZCgpKSA/IG9wdGlvbi5wYWxldHRlLmNvbG9yKFFQYWxldHRlOjpB
Y3RpdmUsIFFQYWxldHRlOjpIaWdobGlnaHQpIDogb3B0aW9uLnBhbGV0dGUuY29sb3IoUVBhbGV0
dGU6OkhpZ2hsaWdodCk7Ci0gICAgICAgIGlmIChyZW5kZXJQcm9ncmVzcy0+c3R5bGUoKS0+ZGly
ZWN0aW9uKCkgPT0gUlRMKQotICAgICAgICAgICAgcC5wYWludGVyLT5maWxsUmVjdChvcHRpb24u
cmVjdC5yaWdodCgpIC0gY2h1bmtXaWR0aCAgLSByZW5kZXJQcm9ncmVzcy0+YW5pbWF0aW9uUHJv
Z3Jlc3MoKSAqIG9wdGlvbi5yZWN0LndpZHRoKCksIDAsIGNodW5rV2lkdGgsIG9wdGlvbi5yZWN0
LmhlaWdodCgpLCBjb2xvcik7Ci0gICAgICAgIGVsc2UKLSAgICAgICAgICAgIHAucGFpbnRlci0+
ZmlsbFJlY3QocmVuZGVyUHJvZ3Jlc3MtPmFuaW1hdGlvblByb2dyZXNzKCkgKiBvcHRpb24ucmVj
dC53aWR0aCgpLCAwLCBjaHVua1dpZHRoLCBvcHRpb24ucmVjdC5oZWlnaHQoKSwgY29sb3IpOwot
ICAgIH0gZWxzZQotICAgICAgICBwLmRyYXdDb250cm9sKFFTdHlsZTo6Q0VfUHJvZ3Jlc3NCYXIs
IG9wdGlvbik7Ci0KLSAgICBwLnBhaW50ZXItPnRyYW5zbGF0ZSgtdG9wTGVmdCk7Ci0KLSAgICBy
ZXR1cm4gZmFsc2U7Ci19Ci0jZW5kaWYKLQotYm9vbCBSZW5kZXJUaGVtZVFTdHlsZTo6cGFpbnRT
bGlkZXJUcmFjayhSZW5kZXJPYmplY3QqIG8sIGNvbnN0IFBhaW50SW5mbyYgcGksCi0gICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgSW50UmVjdCYgcikKLXsKLSAgICBT
dHlsZVBhaW50ZXJRU3R5bGUgcCh0aGlzLCBwaSk7Ci0gICAgaWYgKCFwLmlzVmFsaWQoKSkKLSAg
ICAgICAgcmV0dXJuIHRydWU7Ci0KLSAgICBjb25zdCBRUG9pbnQgdG9wTGVmdCA9IHIubG9jYXRp
b24oKTsKLSAgICBwLnBhaW50ZXItPnRyYW5zbGF0ZSh0b3BMZWZ0KTsKLQotICAgIFFTdHlsZU9w
dGlvblNsaWRlciBvcHRpb247Ci0gICAgaW5pdFN0eWxlT3B0aW9uKHAud2lkZ2V0LCBvcHRpb24p
OwotICAgIG9wdGlvbi5zdWJDb250cm9scyA9IFFTdHlsZTo6U0NfU2xpZGVyR3Jvb3ZlOwotICAg
IENvbnRyb2xQYXJ0IGFwcGVhcmFuY2UgPSBpbml0aWFsaXplQ29tbW9uUVN0eWxlT3B0aW9ucyhv
cHRpb24sIG8pOwotICAgIG9wdGlvbi5yZWN0ID0gcjsKLSAgICBvcHRpb24ucmVjdC5tb3ZlVG8o
UVBvaW50KDAsIDApKTsKLSAgICBpZiAoYXBwZWFyYW5jZSA9PSBTbGlkZXJWZXJ0aWNhbFBhcnQp
Ci0gICAgICAgIG9wdGlvbi5vcmllbnRhdGlvbiA9IFF0OjpWZXJ0aWNhbDsKLSAgICBpZiAoaXNQ
cmVzc2VkKG8pKQotICAgICAgICBvcHRpb24uc3RhdGUgfD0gUVN0eWxlOjpTdGF0ZV9TdW5rZW47
Ci0KLSAgICAvLyBzb21lIHN0eWxlcyBuZWVkIHRoaXMgdG8gc2hvdyBhIGhpZ2hsaWdodCBvbiBv
bmUgc2lkZSBvZiB0aGUgZ3Jvb3ZlCi0gICAgSFRNTElucHV0RWxlbWVudCogc2xpZGVyID0gby0+
bm9kZSgpLT50b0lucHV0RWxlbWVudCgpOwotICAgIGlmIChzbGlkZXIpIHsKLSAgICAgICAgb3B0
aW9uLnVwc2lkZURvd24gPSAoYXBwZWFyYW5jZSA9PSBTbGlkZXJIb3Jpem9udGFsUGFydCkgJiYg
IW8tPnN0eWxlKCktPmlzTGVmdFRvUmlnaHREaXJlY3Rpb24oKTsKLSAgICAgICAgLy8gVXNlIHRo
ZSB3aWR0aCBhcyBhIG11bHRpcGxpZXIgaW4gY2FzZSB0aGUgc2xpZGVyIHZhbHVlcyBhcmUgPD0g
MQotICAgICAgICBjb25zdCBpbnQgd2lkdGggPSByLndpZHRoKCkgPiAwID8gci53aWR0aCgpIDog
MTAwOwotICAgICAgICBvcHRpb24ubWF4aW11bSA9IHNsaWRlci0+bWF4aW11bSgpICogd2lkdGg7
Ci0gICAgICAgIG9wdGlvbi5taW5pbXVtID0gc2xpZGVyLT5taW5pbXVtKCkgKiB3aWR0aDsKLSAg
ICAgICAgaWYgKCFvcHRpb24udXBzaWRlRG93bikKLSAgICAgICAgICAgIG9wdGlvbi5zbGlkZXJQ
b3NpdGlvbiA9IHNsaWRlci0+dmFsdWVBc051bWJlcigpICogd2lkdGg7Ci0gICAgICAgIGVsc2UK
LSAgICAgICAgICAgIG9wdGlvbi5zbGlkZXJQb3NpdGlvbiA9IG9wdGlvbi5taW5pbXVtICsgb3B0
aW9uLm1heGltdW0gLSBzbGlkZXItPnZhbHVlQXNOdW1iZXIoKSAqIHdpZHRoOwotICAgIH0KLQot
ICAgIHAuZHJhd0NvbXBsZXhDb250cm9sKFFTdHlsZTo6Q0NfU2xpZGVyLCBvcHRpb24pOwotCi0g
ICAgaWYgKG9wdGlvbi5zdGF0ZSAmIFFTdHlsZTo6U3RhdGVfSGFzRm9jdXMpIHsKLSAgICAgICAg
UVN0eWxlT3B0aW9uRm9jdXNSZWN0IGZvY3VzT3B0aW9uOwotICAgICAgICBmb2N1c09wdGlvbi5y
ZWN0ID0gcjsKLSAgICAgICAgcC5kcmF3UHJpbWl0aXZlKFFTdHlsZTo6UEVfRnJhbWVGb2N1c1Jl
Y3QsIGZvY3VzT3B0aW9uKTsKLSAgICB9Ci0gICAgcC5wYWludGVyLT50cmFuc2xhdGUoLXRvcExl
ZnQpOwotICAgIHJldHVybiBmYWxzZTsKLX0KLQotdm9pZCBSZW5kZXJUaGVtZVFTdHlsZTo6YWRq
dXN0U2xpZGVyVHJhY2tTdHlsZShTdHlsZVJlc29sdmVyKiwgUmVuZGVyU3R5bGUqIHN0eWxlLCBF
bGVtZW50KikgY29uc3QKLXsKLSAgICBzdHlsZS0+c2V0Qm94U2hhZG93KG51bGxwdHIpOwotfQot
Ci1ib29sIFJlbmRlclRoZW1lUVN0eWxlOjpwYWludFNsaWRlclRodW1iKFJlbmRlck9iamVjdCog
bywgY29uc3QgUGFpbnRJbmZvJiBwaSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBjb25zdCBJbnRSZWN0JiByKQotewotICAgIFN0eWxlUGFpbnRlclFTdHlsZSBwKHRoaXMs
IHBpKTsKLSAgICBpZiAoIXAuaXNWYWxpZCgpKQotICAgICAgICByZXR1cm4gdHJ1ZTsKLQotICAg
IGNvbnN0IFFQb2ludCB0b3BMZWZ0ID0gci5sb2NhdGlvbigpOwotICAgIHAucGFpbnRlci0+dHJh
bnNsYXRlKHRvcExlZnQpOwotCi0gICAgUVN0eWxlT3B0aW9uU2xpZGVyIG9wdGlvbjsKLSAgICBp
bml0U3R5bGVPcHRpb24ocC53aWRnZXQsIG9wdGlvbik7Ci0gICAgb3B0aW9uLnN1YkNvbnRyb2xz
ID0gUVN0eWxlOjpTQ19TbGlkZXJIYW5kbGU7Ci0gICAgQ29udHJvbFBhcnQgYXBwZWFyYW5jZSA9
IGluaXRpYWxpemVDb21tb25RU3R5bGVPcHRpb25zKG9wdGlvbiwgbyk7Ci0gICAgb3B0aW9uLnJl
Y3QgPSByOwotICAgIG9wdGlvbi5yZWN0Lm1vdmVUbyhRUG9pbnQoMCwgMCkpOwotICAgIGlmIChh
cHBlYXJhbmNlID09IFNsaWRlclRodW1iVmVydGljYWxQYXJ0KQotICAgICAgICBvcHRpb24ub3Jp
ZW50YXRpb24gPSBRdDo6VmVydGljYWw7Ci0gICAgaWYgKGlzUHJlc3NlZChvKSkgewotICAgICAg
ICBvcHRpb24uYWN0aXZlU3ViQ29udHJvbHMgPSBRU3R5bGU6OlNDX1NsaWRlckhhbmRsZTsKLSAg
ICAgICAgb3B0aW9uLnN0YXRlIHw9IFFTdHlsZTo6U3RhdGVfU3Vua2VuOwotICAgIH0KLQotICAg
IHAuZHJhd0NvbXBsZXhDb250cm9sKFFTdHlsZTo6Q0NfU2xpZGVyLCBvcHRpb24pOwotICAgIHAu
cGFpbnRlci0+dHJhbnNsYXRlKC10b3BMZWZ0KTsKLSAgICByZXR1cm4gZmFsc2U7Ci19Ci0KLXZv
aWQgUmVuZGVyVGhlbWVRU3R5bGU6OmFkanVzdFNsaWRlclRodW1iU3R5bGUoU3R5bGVSZXNvbHZl
ciogc3R5bGVSZXNvbHZlciwgUmVuZGVyU3R5bGUqIHN0eWxlLCBFbGVtZW50KiBlbGVtZW50KSBj
b25zdAotewotICAgIFJlbmRlclRoZW1lOjphZGp1c3RTbGlkZXJUaHVtYlN0eWxlKHN0eWxlUmVz
b2x2ZXIsIHN0eWxlLCBlbGVtZW50KTsKLSAgICBzdHlsZS0+c2V0Qm94U2hhZG93KG51bGxwdHIp
OwotfQotCi1ib29sIFJlbmRlclRoZW1lUVN0eWxlOjpwYWludFNlYXJjaEZpZWxkKFJlbmRlck9i
amVjdCogbywgY29uc3QgUGFpbnRJbmZvJiBwaSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBjb25zdCBJbnRSZWN0JiByKQotewotICAgIHJldHVybiBwYWludFRleHRGaWVs
ZChvLCBwaSwgcik7Ci19Ci0KLXZvaWQgUmVuZGVyVGhlbWVRU3R5bGU6OmFkanVzdFNlYXJjaEZp
ZWxkRGVjb3JhdGlvblN0eWxlKFN0eWxlUmVzb2x2ZXIqIHN0eWxlUmVzb2x2ZXIsIFJlbmRlclN0
eWxlKiBzdHlsZSwgRWxlbWVudCogZSkgY29uc3QKLXsKLSAgICBub3RJbXBsZW1lbnRlZCgpOwot
ICAgIFJlbmRlclRoZW1lOjphZGp1c3RTZWFyY2hGaWVsZERlY29yYXRpb25TdHlsZShzdHlsZVJl
c29sdmVyLCBzdHlsZSwgZSk7Ci19Ci0KLWJvb2wgUmVuZGVyVGhlbWVRU3R5bGU6OnBhaW50U2Vh
cmNoRmllbGREZWNvcmF0aW9uKFJlbmRlck9iamVjdCogbywgY29uc3QgUGFpbnRJbmZvJiBwaSwK
LSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgSW50
UmVjdCYgcikKLXsKLSAgICBub3RJbXBsZW1lbnRlZCgpOwotICAgIHJldHVybiBSZW5kZXJUaGVt
ZTo6cGFpbnRTZWFyY2hGaWVsZERlY29yYXRpb24obywgcGksIHIpOwotfQotCi12b2lkIFJlbmRl
clRoZW1lUVN0eWxlOjphZGp1c3RTZWFyY2hGaWVsZFJlc3VsdHNEZWNvcmF0aW9uU3R5bGUoU3R5
bGVSZXNvbHZlciogc3R5bGVSZXNvbHZlciwgUmVuZGVyU3R5bGUqIHN0eWxlLCBFbGVtZW50KiBl
KSBjb25zdAotewotICAgIG5vdEltcGxlbWVudGVkKCk7Ci0gICAgUmVuZGVyVGhlbWU6OmFkanVz
dFNlYXJjaEZpZWxkUmVzdWx0c0RlY29yYXRpb25TdHlsZShzdHlsZVJlc29sdmVyLCBzdHlsZSwg
ZSk7Ci19Ci0KLWJvb2wgUmVuZGVyVGhlbWVRU3R5bGU6OnBhaW50U2VhcmNoRmllbGRSZXN1bHRz
RGVjb3JhdGlvbihSZW5kZXJPYmplY3QqIG8sIGNvbnN0IFBhaW50SW5mbyYgcGksCi0gICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBJbnRS
ZWN0JiByKQotewotICAgIG5vdEltcGxlbWVudGVkKCk7Ci0gICAgcmV0dXJuIFJlbmRlclRoZW1l
OjpwYWludFNlYXJjaEZpZWxkUmVzdWx0c0RlY29yYXRpb24obywgcGksIHIpOwotfQotCi0jaWZu
ZGVmIFFUX05PX1NQSU5CT1gKLQotYm9vbCBSZW5kZXJUaGVtZVFTdHlsZTo6cGFpbnRJbm5lclNw
aW5CdXR0b24oUmVuZGVyT2JqZWN0KiBvLCBjb25zdCBQYWludEluZm8mIHBhaW50SW5mbywgY29u
c3QgSW50UmVjdCYgcmVjdCkKLXsKLSAgICBTdHlsZVBhaW50ZXJRU3R5bGUgcCh0aGlzLCBwYWlu
dEluZm8pOwotICAgIGlmICghcC5pc1ZhbGlkKCkpCi0gICAgICAgcmV0dXJuIHRydWU7Ci0KLSAg
ICBRU3R5bGVPcHRpb25TcGluQm94IG9wdGlvbjsKLSAgICBpbml0U3R5bGVPcHRpb24ocC53aWRn
ZXQsIG9wdGlvbik7Ci0gICAgb3B0aW9uLnN1YkNvbnRyb2xzID0gUVN0eWxlOjpTQ19TcGluQm94
VXAgfCBRU3R5bGU6OlNDX1NwaW5Cb3hEb3duOwotICAgIGlmICghaXNSZWFkT25seUNvbnRyb2wo
bykpIHsKLSAgICAgICAgaWYgKGlzRW5hYmxlZChvKSkKLSAgICAgICAgICAgIG9wdGlvbi5zdGVw
RW5hYmxlZCA9IFFBYnN0cmFjdFNwaW5Cb3g6OlN0ZXBVcEVuYWJsZWQgfCBRQWJzdHJhY3RTcGlu
Qm94OjpTdGVwRG93bkVuYWJsZWQ7Ci0gICAgICAgIGlmIChpc1ByZXNzZWQobykpIHsKLSAgICAg
ICAgICAgIG9wdGlvbi5zdGF0ZSB8PSBRU3R5bGU6OlN0YXRlX1N1bmtlbjsKLSAgICAgICAgICAg
IGlmIChpc1NwaW5VcEJ1dHRvblBhcnRQcmVzc2VkKG8pKQotICAgICAgICAgICAgICAgIG9wdGlv
bi5hY3RpdmVTdWJDb250cm9scyA9IFFTdHlsZTo6U0NfU3BpbkJveFVwOwotICAgICAgICAgICAg
ZWxzZQotICAgICAgICAgICAgICAgIG9wdGlvbi5hY3RpdmVTdWJDb250cm9scyA9IFFTdHlsZTo6
U0NfU3BpbkJveERvd247Ci0gICAgICAgIH0KLSAgICB9Ci0gICAgLy8gUmVuZGVyIHRoZSBzcGlu
IGJ1dHRvbnMgZm9yIExUUiBvciBSVEwgYWNjb3JkaW5nbHkuCi0gICAgb3B0aW9uLmRpcmVjdGlv
biA9IG8tPnN0eWxlKCktPmlzTGVmdFRvUmlnaHREaXJlY3Rpb24oKSA/IFF0OjpMZWZ0VG9SaWdo
dCA6IFF0OjpSaWdodFRvTGVmdDsKLQotICAgIEludFJlY3QgYnV0dG9uUmVjdCA9IHJlY3Q7Ci0g
ICAgLy8gRGVmYXVsdCB0byBtb3ZpbmcgdGhlIGJ1dHRvbnMgYSBsaXR0bGUgYml0IHdpdGhpbiB0
aGUgZWRpdG9yIGZyYW1lLgotICAgIGludCBpbmZsYXRlWCA9IC0yOwotICAgIGludCBpbmZsYXRl
WSA9IC0yOwotI2lmIGRlZmluZWQoUV9XU19NQUMpICYmICFkZWZpbmVkKFFUX05PX1NUWUxFX01B
QykKLSAgICAvLyBRTWFjU3R5bGUgd2lsbCBwb3NpdGlvbiB0aGUgYXF1YSBidXR0b25zIGZsdXNo
IHRvIHRoZSByaWdodC4KLSAgICAvLyBUaGlzIHdpbGwgbW92ZSB0aGVtIG1vcmUgd2l0aGluIHRo
ZSBjb250cm9sIGZvciBiZXR0ZXIgc3R5bGUsIGEgbGEKLSAgICAvLyBDaHJvbWl1bSBsb29rICYg
ZmVlbC4KLSAgICBpZiAocW9iamVjdF9jYXN0PFFNYWNTdHlsZSo+KHAuc3R5bGUpKSB7Ci0gICAg
ICAgIGluZmxhdGVYID0gLTQ7Ci0gICAgICAgIC8vIFJlbmRlciBtaW5pIGFxdWEgc3BpbiBidXR0
b25zIGZvciBRTWFjU3R5bGUgdG8gZml0IG5pY2VseSBpbnRvCi0gICAgICAgIC8vIHRoZSBlZGl0
b3IgYXJlYSwgbGlrZSBDaHJvbWl1bS4KLSAgICAgICAgb3B0aW9uLnN0YXRlIHw9IFFTdHlsZTo6
U3RhdGVfTWluaTsKLSAgICB9Ci0jZW5kaWYKLSNpZiAhZGVmaW5lZChRVF9OT19TVFlMRV9QTEFT
VElRVUUpCi0gICAgLy8gUVBsYXN0aXF1ZVN0eWxlIGxvb2tzIGJlc3Qgd2hlbiB0aGUgc3BpbiBi
dXR0b25zIGFyZSBmbHVzaCB3aXRoIHRoZSBmcmFtZSdzIGVkZ2UuCi0gICAgaWYgKHFvYmplY3Rf
Y2FzdDxRUGxhc3RpcXVlU3R5bGUqPihwLnN0eWxlKSkgewotICAgICAgICBpbmZsYXRlWCA9IDA7
Ci0gICAgICAgIGluZmxhdGVZID0gMDsKLSAgICB9Ci0jZW5kaWYKLQotICAgIGJ1dHRvblJlY3Qu
aW5mbGF0ZVgoaW5mbGF0ZVgpOwotICAgIGJ1dHRvblJlY3QuaW5mbGF0ZVkoaW5mbGF0ZVkpOwot
ICAgIG9wdGlvbi5yZWN0ID0gYnV0dG9uUmVjdDsKLQotICAgIHAuZHJhd0NvbXBsZXhDb250cm9s
KFFTdHlsZTo6Q0NfU3BpbkJveCwgb3B0aW9uKTsKLSAgICByZXR1cm4gZmFsc2U7Ci19Ci0jZW5k
aWYKLQotQ29udHJvbFBhcnQgUmVuZGVyVGhlbWVRU3R5bGU6OmluaXRpYWxpemVDb21tb25RU3R5
bGVPcHRpb25zKFFTdHlsZU9wdGlvbiYgb3B0aW9uLCBSZW5kZXJPYmplY3QqIG8pIGNvbnN0Ci17
Ci0gICAgLy8gRGVmYXVsdCBiaXRzOiBubyBmb2N1cywgbm8gbW91c2Ugb3ZlcgotICAgIG9wdGlv
bi5zdGF0ZSAmPSB+KFFTdHlsZTo6U3RhdGVfSGFzRm9jdXMgfCBRU3R5bGU6OlN0YXRlX01vdXNl
T3Zlcik7Ci0KLSAgICBpZiAoaXNSZWFkT25seUNvbnRyb2wobykpCi0gICAgICAgIC8vIFJlYWRv
bmx5IGlzIHN1cHBvcnRlZCBvbiB0ZXh0ZmllbGRzLgotICAgICAgICBvcHRpb24uc3RhdGUgfD0g
UVN0eWxlOjpTdGF0ZV9SZWFkT25seTsKLQotICAgIG9wdGlvbi5kaXJlY3Rpb24gPSBRdDo6TGVm
dFRvUmlnaHQ7Ci0KLSAgICBpZiAoaXNIb3ZlcmVkKG8pKQotICAgICAgICBvcHRpb24uc3RhdGUg
fD0gUVN0eWxlOjpTdGF0ZV9Nb3VzZU92ZXI7Ci0KLSAgICBzZXRQYWxldHRlRnJvbVBhZ2VDbGll
bnRJZkV4aXN0cyhvcHRpb24ucGFsZXR0ZSk7Ci0KLSAgICBpZiAoIWlzRW5hYmxlZChvKSkgewot
ICAgICAgICBvcHRpb24ucGFsZXR0ZS5zZXRDdXJyZW50Q29sb3JHcm91cChRUGFsZXR0ZTo6RGlz
YWJsZWQpOwotICAgICAgICBvcHRpb24uc3RhdGUgJj0gflFTdHlsZTo6U3RhdGVfRW5hYmxlZDsK
LSAgICB9Ci0KLSAgICBSZW5kZXJTdHlsZSogc3R5bGUgPSBvLT5zdHlsZSgpOwotICAgIGlmICgh
c3R5bGUpCi0gICAgICAgIHJldHVybiBOb0NvbnRyb2xQYXJ0OwotCi0gICAgQ29udHJvbFBhcnQg
cmVzdWx0ID0gc3R5bGUtPmFwcGVhcmFuY2UoKTsKLSAgICBpZiAoc3VwcG9ydHNGb2N1cyhyZXN1
bHQpICYmIGlzRm9jdXNlZChvKSkgewotICAgICAgICBvcHRpb24uc3RhdGUgfD0gUVN0eWxlOjpT
dGF0ZV9IYXNGb2N1czsKLSAgICAgICAgb3B0aW9uLnN0YXRlIHw9IFFTdHlsZTo6U3RhdGVfS2V5
Ym9hcmRGb2N1c0NoYW5nZTsKLSAgICB9Ci0KLSAgICBpZiAoc3R5bGUtPmRpcmVjdGlvbigpID09
IFdlYkNvcmU6OlJUTCkKLSAgICAgICAgb3B0aW9uLmRpcmVjdGlvbiA9IFF0OjpSaWdodFRvTGVm
dDsKLQotICAgIHN3aXRjaCAocmVzdWx0KSB7Ci0gICAgY2FzZSBQdXNoQnV0dG9uUGFydDoKLSAg
ICBjYXNlIFNxdWFyZUJ1dHRvblBhcnQ6Ci0gICAgY2FzZSBCdXR0b25QYXJ0OgotICAgIGNhc2Ug
QnV0dG9uQmV2ZWxQYXJ0OgotICAgIGNhc2UgTGlzdEl0ZW1QYXJ0OgotICAgIGNhc2UgTWVudWxp
c3RCdXR0b25QYXJ0OgotICAgIGNhc2UgU2VhcmNoRmllbGRSZXN1bHRzQnV0dG9uUGFydDoKLSAg
ICBjYXNlIFNlYXJjaEZpZWxkQ2FuY2VsQnV0dG9uUGFydDogewotICAgICAgICBpZiAoaXNQcmVz
c2VkKG8pKQotICAgICAgICAgICAgb3B0aW9uLnN0YXRlIHw9IFFTdHlsZTo6U3RhdGVfU3Vua2Vu
OwotICAgICAgICBlbHNlIGlmIChyZXN1bHQgPT0gUHVzaEJ1dHRvblBhcnQgfHwgcmVzdWx0ID09
IEJ1dHRvblBhcnQpCi0gICAgICAgICAgICBvcHRpb24uc3RhdGUgfD0gUVN0eWxlOjpTdGF0ZV9S
YWlzZWQ7Ci0gICAgICAgIGJyZWFrOwotICAgIH0KLSAgICBjYXNlIFJhZGlvUGFydDoKLSAgICBj
YXNlIENoZWNrYm94UGFydDoKLSAgICAgICAgb3B0aW9uLnN0YXRlIHw9IChpc0NoZWNrZWQobykg
PyBRU3R5bGU6OlN0YXRlX09uIDogUVN0eWxlOjpTdGF0ZV9PZmYpOwotICAgIH0KLQotICAgIHJl
dHVybiByZXN1bHQ7Ci19Ci0KLXZvaWQgUmVuZGVyVGhlbWVRU3R5bGU6OmFkanVzdFNsaWRlclRo
dW1iU2l6ZShSZW5kZXJTdHlsZSogc3R5bGUsIEVsZW1lbnQqIGVsZW1lbnQpIGNvbnN0Ci17Ci0g
ICAgY29uc3QgQ29udHJvbFBhcnQgcGFydCA9IHN0eWxlLT5hcHBlYXJhbmNlKCk7Ci0gICAgaWYg
KHBhcnQgPT0gU2xpZGVyVGh1bWJIb3Jpem9udGFsUGFydCB8fCBwYXJ0ID09IFNsaWRlclRodW1i
VmVydGljYWxQYXJ0KSB7Ci0gICAgICAgIFFTdHlsZU9wdGlvblNsaWRlciBvcHRpb247Ci0gICAg
ICAgIGlmIChwYXJ0ID09IFNsaWRlclRodW1iVmVydGljYWxQYXJ0KQotICAgICAgICAgICAgb3B0
aW9uLm9yaWVudGF0aW9uID0gUXQ6OlZlcnRpY2FsOwotCi0gICAgICAgIFFTdHlsZSogcXN0eWxl
ID0gcVN0eWxlKCk7Ci0KLSAgICAgICAgaW50IGxlbmd0aCA9IHFzdHlsZS0+cGl4ZWxNZXRyaWMo
UVN0eWxlOjpQTV9TbGlkZXJMZW5ndGgsICZvcHRpb24pOwotICAgICAgICBpbnQgdGhpY2tuZXNz
ID0gcXN0eWxlLT5waXhlbE1ldHJpYyhRU3R5bGU6OlBNX1NsaWRlclRoaWNrbmVzcywgJm9wdGlv
bik7Ci0gICAgICAgIGlmIChvcHRpb24ub3JpZW50YXRpb24gPT0gUXQ6OlZlcnRpY2FsKSB7Ci0g
ICAgICAgICAgICBzdHlsZS0+c2V0V2lkdGgoTGVuZ3RoKHRoaWNrbmVzcywgRml4ZWQpKTsKLSAg
ICAgICAgICAgIHN0eWxlLT5zZXRIZWlnaHQoTGVuZ3RoKGxlbmd0aCwgRml4ZWQpKTsKLSAgICAg
ICAgfSBlbHNlIHsKLSAgICAgICAgICAgIHN0eWxlLT5zZXRXaWR0aChMZW5ndGgobGVuZ3RoLCBG
aXhlZCkpOwotICAgICAgICAgICAgc3R5bGUtPnNldEhlaWdodChMZW5ndGgodGhpY2tuZXNzLCBG
aXhlZCkpOwotICAgICAgICB9Ci0gICAgfSBlbHNlCi0gICAgICAgIFJlbmRlclRoZW1lUXQ6OmFk
anVzdFNsaWRlclRodW1iU2l6ZShzdHlsZSwgZWxlbWVudCk7Ci19Ci0KLX0KLQotLy8gdmltOiB0
cz00IHN3PTQgZXQKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvcXQvV2ViQ29yZVN1cHBvcnQv
UmVuZGVyVGhlbWVRU3R5bGUuaCBiL1NvdXJjZS9XZWJLaXQvcXQvV2ViQ29yZVN1cHBvcnQvUmVu
ZGVyVGhlbWVRU3R5bGUuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMmNjOTk5MzA4
MDQ1MGY5MzkxMjc4ZDQ5ODcxZTU3MTkyNWQwZTFhZi4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViS2l0L3F0L1dlYkNvcmVTdXBwb3J0L1Jl
bmRlclRoZW1lUVN0eWxlLmgKKysrIC9kZXYvbnVsbApAQCAtMSwxNDggKzAsMCBAQAotLyoKLSAq
IFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSB0aGVtZSBpbXBsZW1lbnRhdGlvbiBmb3IgZm9ybSBj
b250cm9scyBpbiBXZWJDb3JlLgotICoKLSAqIENvcHlyaWdodCAoQykgMjAxMS0yMDEyIE5va2lh
IENvcnBvcmF0aW9uIGFuZC9vciBpdHMgc3Vic2lkaWFyeSgtaWVzKS4KLSAqCi0gKiBUaGlzIGxp
YnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCi0g
KiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1
YmxpYwotICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRh
dGlvbjsgZWl0aGVyCi0gKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9w
dGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0gKgotICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1
dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0gKiBidXQgV0lUSE9VVCBB
TlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICogTUVS
Q0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRo
ZSBHTlUKLSAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxz
LgotICoKLSAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJy
YXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKLSAqIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBz
ZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCi0gKiB0aGUgRnJlZSBT
b2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29y
LAotICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCi0gKgotICovCi0jaWZuZGVmIFJlbmRl
clRoZW1lUVN0eWxlX2gKLSNkZWZpbmUgUmVuZGVyVGhlbWVRU3R5bGVfaAotCi0jaW5jbHVkZSAi
UmVuZGVyVGhlbWVRdC5oIgotCi0jaW5jbHVkZSA8UVN0eWxlPgotCi1RVF9CRUdJTl9OQU1FU1BB
Q0UKLSNpZm5kZWYgUVRfTk9fTElORUVESVQKLWNsYXNzIFFMaW5lRWRpdDsKLSNlbmRpZgotY2xh
c3MgUVBhaW50ZXI7Ci1jbGFzcyBRV2lkZ2V0OwotUVRfRU5EX05BTUVTUEFDRQotCi1uYW1lc3Bh
Y2UgV2ViQ29yZSB7Ci0KLWNsYXNzIFNjcm9sbGJhclRoZW1lUVN0eWxlOwotCi1jbGFzcyBSZW5k
ZXJUaGVtZVFTdHlsZSA6IHB1YmxpYyBSZW5kZXJUaGVtZVF0IHsKLXByaXZhdGU6Ci0gICAgUmVu
ZGVyVGhlbWVRU3R5bGUoUGFnZSopOwotICAgIHZpcnR1YWwgflJlbmRlclRoZW1lUVN0eWxlKCk7
Ci0KLXB1YmxpYzoKLSAgICBzdGF0aWMgUGFzc1JlZlB0cjxSZW5kZXJUaGVtZT4gY3JlYXRlKFBh
Z2UqKTsKLQotICAgIHZpcnR1YWwgdm9pZCBhZGp1c3RTbGlkZXJUaHVtYlNpemUoUmVuZGVyU3R5
bGUqLCBFbGVtZW50KikgY29uc3Q7Ci0KLSAgICBRU3R5bGUqIHFTdHlsZSgpIGNvbnN0OwotCi1w
cm90ZWN0ZWQ6Ci0gICAgdmlydHVhbCB2b2lkIGFkanVzdEJ1dHRvblN0eWxlKFN0eWxlUmVzb2x2
ZXIqLCBSZW5kZXJTdHlsZSosIEVsZW1lbnQqKSBjb25zdDsKLSAgICB2aXJ0dWFsIGJvb2wgcGFp
bnRCdXR0b24oUmVuZGVyT2JqZWN0KiwgY29uc3QgUGFpbnRJbmZvJiwgY29uc3QgSW50UmVjdCYp
OwotCi0gICAgdmlydHVhbCBib29sIHBhaW50VGV4dEZpZWxkKFJlbmRlck9iamVjdCosIGNvbnN0
IFBhaW50SW5mbyYsIGNvbnN0IEludFJlY3QmKTsKLQotICAgIHZpcnR1YWwgYm9vbCBwYWludFRl
eHRBcmVhKFJlbmRlck9iamVjdCosIGNvbnN0IFBhaW50SW5mbyYsIGNvbnN0IEludFJlY3QmKTsK
LSAgICB2aXJ0dWFsIHZvaWQgYWRqdXN0VGV4dEFyZWFTdHlsZShTdHlsZVJlc29sdmVyKiwgUmVu
ZGVyU3R5bGUqLCBFbGVtZW50KikgY29uc3Q7Ci0KLSAgICB2aXJ0dWFsIGJvb2wgcGFpbnRNZW51
TGlzdChSZW5kZXJPYmplY3QqLCBjb25zdCBQYWludEluZm8mLCBjb25zdCBJbnRSZWN0Jik7Ci0K
LSAgICB2aXJ0dWFsIGJvb2wgcGFpbnRNZW51TGlzdEJ1dHRvbihSZW5kZXJPYmplY3QqLCBjb25z
dCBQYWludEluZm8mLCBjb25zdCBJbnRSZWN0Jik7Ci0gICAgdmlydHVhbCB2b2lkIGFkanVzdE1l
bnVMaXN0QnV0dG9uU3R5bGUoU3R5bGVSZXNvbHZlciosIFJlbmRlclN0eWxlKiwgRWxlbWVudCop
IGNvbnN0OwotCi0jaWYgRU5BQkxFKFBST0dSRVNTX0VMRU1FTlQpCi0gICAgLy8gUmV0dXJucyB0
aGUgZHVyYXRpb24gb2YgdGhlIGFuaW1hdGlvbiBmb3IgdGhlIHByb2dyZXNzIGJhci4KLSAgICB2
aXJ0dWFsIGRvdWJsZSBhbmltYXRpb25EdXJhdGlvbkZvclByb2dyZXNzQmFyKFJlbmRlclByb2dy
ZXNzKikgY29uc3Q7Ci0gICAgdmlydHVhbCBib29sIHBhaW50UHJvZ3Jlc3NCYXIoUmVuZGVyT2Jq
ZWN0KiwgY29uc3QgUGFpbnRJbmZvJiwgY29uc3QgSW50UmVjdCYpOwotI2VuZGlmCi0KLSAgICB2
aXJ0dWFsIGJvb2wgcGFpbnRTbGlkZXJUcmFjayhSZW5kZXJPYmplY3QqLCBjb25zdCBQYWludElu
Zm8mLCBjb25zdCBJbnRSZWN0Jik7Ci0gICAgdmlydHVhbCB2b2lkIGFkanVzdFNsaWRlclRyYWNr
U3R5bGUoU3R5bGVSZXNvbHZlciosIFJlbmRlclN0eWxlKiwgRWxlbWVudCopIGNvbnN0OwotCi0g
ICAgdmlydHVhbCBib29sIHBhaW50U2xpZGVyVGh1bWIoUmVuZGVyT2JqZWN0KiwgY29uc3QgUGFp
bnRJbmZvJiwgY29uc3QgSW50UmVjdCYpOwotICAgIHZpcnR1YWwgdm9pZCBhZGp1c3RTbGlkZXJU
aHVtYlN0eWxlKFN0eWxlUmVzb2x2ZXIqLCBSZW5kZXJTdHlsZSosIEVsZW1lbnQqKSBjb25zdDsK
LQotICAgIHZpcnR1YWwgYm9vbCBwYWludFNlYXJjaEZpZWxkKFJlbmRlck9iamVjdCosIGNvbnN0
IFBhaW50SW5mbyYsIGNvbnN0IEludFJlY3QmKTsKLQotICAgIHZpcnR1YWwgdm9pZCBhZGp1c3RT
ZWFyY2hGaWVsZERlY29yYXRpb25TdHlsZShTdHlsZVJlc29sdmVyKiwgUmVuZGVyU3R5bGUqLCBF
bGVtZW50KikgY29uc3Q7Ci0gICAgdmlydHVhbCBib29sIHBhaW50U2VhcmNoRmllbGREZWNvcmF0
aW9uKFJlbmRlck9iamVjdCosIGNvbnN0IFBhaW50SW5mbyYsIGNvbnN0IEludFJlY3QmKTsKLQot
ICAgIHZpcnR1YWwgdm9pZCBhZGp1c3RTZWFyY2hGaWVsZFJlc3VsdHNEZWNvcmF0aW9uU3R5bGUo
U3R5bGVSZXNvbHZlciosIFJlbmRlclN0eWxlKiwgRWxlbWVudCopIGNvbnN0OwotICAgIHZpcnR1
YWwgYm9vbCBwYWludFNlYXJjaEZpZWxkUmVzdWx0c0RlY29yYXRpb24oUmVuZGVyT2JqZWN0Kiwg
Y29uc3QgUGFpbnRJbmZvJiwgY29uc3QgSW50UmVjdCYpOwotCi0jaWZuZGVmIFFUX05PX1NQSU5C
T1gKLSAgICB2aXJ0dWFsIGJvb2wgcGFpbnRJbm5lclNwaW5CdXR0b24oUmVuZGVyT2JqZWN0Kiwg
Y29uc3QgUGFpbnRJbmZvJiwgY29uc3QgSW50UmVjdCYpOwotI2VuZGlmCi0KLXByb3RlY3RlZDoK
LSAgICB2aXJ0dWFsIHZvaWQgY29tcHV0ZVNpemVCYXNlZE9uU3R5bGUoUmVuZGVyU3R5bGUqKSBj
b25zdDsKLQotICAgIHZpcnR1YWwgUVNoYXJlZFBvaW50ZXI8U3R5bGVQYWludGVyPiBnZXRTdHls
ZVBhaW50ZXIoY29uc3QgUGFpbnRJbmZvJik7Ci0KLSAgICB2aXJ0dWFsIFFSZWN0IGluZmxhdGVC
dXR0b25SZWN0KGNvbnN0IFFSZWN0JiBvcmlnaW5hbFJlY3QpIGNvbnN0OwotCi0gICAgdmlydHVh
bCB2b2lkIHNldFBvcHVwUGFkZGluZyhSZW5kZXJTdHlsZSopIGNvbnN0OwotCi0gICAgdmlydHVh
bCBRUGFsZXR0ZSBjb2xvclBhbGV0dGUoKSBjb25zdDsKLQotcHJpdmF0ZToKLSAgICBDb250cm9s
UGFydCBpbml0aWFsaXplQ29tbW9uUVN0eWxlT3B0aW9ucyhRU3R5bGVPcHRpb24mLCBSZW5kZXJP
YmplY3QqKSBjb25zdDsKLQotICAgIHZvaWQgc2V0QnV0dG9uUGFkZGluZyhSZW5kZXJTdHlsZSop
IGNvbnN0OwotCi0gICAgaW50IGZpbmRGcmFtZUxpbmVXaWR0aChRU3R5bGUqKSBjb25zdDsKLQot
ICAgIFFTdHlsZSogZmFsbGJhY2tTdHlsZSgpIGNvbnN0OwotCi0gICAgdm9pZCBzZXRQYWxldHRl
RnJvbVBhZ2VDbGllbnRJZkV4aXN0cyhRUGFsZXR0ZSYpIGNvbnN0OwotCi0jaWZkZWYgUV9PU19N
QUMKLSAgICBpbnQgbV9idXR0b25Gb250UGl4ZWxTaXplOwotI2VuZGlmCi0KLSAgICBRU3R5bGUq
IG1fZmFsbGJhY2tTdHlsZTsKLSNpZm5kZWYgUVRfTk9fTElORUVESVQKLSAgICBtdXRhYmxlIFFM
aW5lRWRpdCogbV9saW5lRWRpdDsKLSNlbmRpZgotfTsKLQotY2xhc3MgU3R5bGVQYWludGVyUVN0
eWxlIDogcHVibGljIFN0eWxlUGFpbnRlciB7Ci1wdWJsaWM6Ci0gICAgZXhwbGljaXQgU3R5bGVQ
YWludGVyUVN0eWxlKFJlbmRlclRoZW1lUVN0eWxlKiwgY29uc3QgUGFpbnRJbmZvJik7Ci0gICAg
ZXhwbGljaXQgU3R5bGVQYWludGVyUVN0eWxlKFNjcm9sbGJhclRoZW1lUVN0eWxlKiwgR3JhcGhp
Y3NDb250ZXh0Kik7Ci0KLSAgICBib29sIGlzVmFsaWQoKSBjb25zdCB7IHJldHVybiBzdHlsZSAm
JiBTdHlsZVBhaW50ZXI6OmlzVmFsaWQoKTsgfQotCi0gICAgUVdpZGdldCogd2lkZ2V0OwotICAg
IFFTdHlsZSogc3R5bGU7Ci0KLSAgICB2b2lkIGRyYXdQcmltaXRpdmUoUVN0eWxlOjpQcmltaXRp
dmVFbGVtZW50IHBlLCBjb25zdCBRU3R5bGVPcHRpb24mIG9wdCkKLSAgICB7IHN0eWxlLT5kcmF3
UHJpbWl0aXZlKHBlLCAmb3B0LCBwYWludGVyLCB3aWRnZXQpOyB9Ci0gICAgdm9pZCBkcmF3Q29u
dHJvbChRU3R5bGU6OkNvbnRyb2xFbGVtZW50IGNlLCBjb25zdCBRU3R5bGVPcHRpb24mIG9wdCkK
LSAgICB7IHN0eWxlLT5kcmF3Q29udHJvbChjZSwgJm9wdCwgcGFpbnRlciwgd2lkZ2V0KTsgfQot
ICAgIHZvaWQgZHJhd0NvbXBsZXhDb250cm9sKFFTdHlsZTo6Q29tcGxleENvbnRyb2wgY2MsIGNv
bnN0IFFTdHlsZU9wdGlvbkNvbXBsZXgmIG9wdCkKLSAgICB7IHN0eWxlLT5kcmF3Q29tcGxleENv
bnRyb2woY2MsICZvcHQsIHBhaW50ZXIsIHdpZGdldCk7IH0KLQotcHJpdmF0ZToKLSAgICB2b2lk
IGluaXQoR3JhcGhpY3NDb250ZXh0KiwgUVN0eWxlKik7Ci0KLSAgICBRX0RJU0FCTEVfQ09QWShT
dHlsZVBhaW50ZXJRU3R5bGUpCi19OwotCi19Ci0KLSNlbmRpZiAvLyBSZW5kZXJUaGVtZVFTdHls
ZV9oCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L3F0L1dlYkNvcmVTdXBwb3J0L1Njcm9sbGJh
clRoZW1lUVN0eWxlLmNwcCBiL1NvdXJjZS9XZWJLaXQvcXQvV2ViQ29yZVN1cHBvcnQvU2Nyb2xs
YmFyVGhlbWVRU3R5bGUuY3BwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBiMDgyN2Zl
YTRlMDkyMjBmMGFhMzkyYTdhNWQ5ZGM0YzNhNjY4YmUzLi4wMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJLaXQvcXQvV2ViQ29yZVN1cHBvcnQv
U2Nyb2xsYmFyVGhlbWVRU3R5bGUuY3BwCisrKyAvZGV2L251bGwKQEAgLTEsMjUzICswLDAgQEAK
LS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDcsIDIwMDggQXBwbGUgSW5jLiBBbGwgUmlnaHRzIFJl
c2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDA3IFN0YWlrb3MgQ29tcHV0aW5nIFNlcnZpY2Vz
IEluYy4gPGluZm9Ac3RhaWtvcy5uZXQ+Ci0gKiBDb3B5cmlnaHQgKEMpIDIwMDggTm9raWEgQ29y
cG9yYXRpb24gYW5kL29yIGl0cyBzdWJzaWRpYXJ5KC1pZXMpCi0gKgotICogUmVkaXN0cmlidXRp
b24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0g
KiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5n
IGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNl
IGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4g
UmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBj
b3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90
aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJ
UyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCi0g
KiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sIFRIRQotICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQg
RklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4g
Tk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgotICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBG
T1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCi0gKiBFWEVNUExB
UlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sCi0gKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NT
IE9GIFVTRSwgREFUQSwgT1IKLSAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikg
SE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKLSAqIE9GIExJQUJJTElUWSwgV0hFVEhF
UiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xVRElORyBO
RUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNF
Ci0gKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZ
IE9GIFNVQ0ggREFNQUdFLgotICovCi0KLSNpbmNsdWRlICJjb25maWcuaCIKLSNpbmNsdWRlICJT
Y3JvbGxiYXJUaGVtZVFTdHlsZS5oIgotCi0jaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0LmgiCi0j
aW5jbHVkZSAiUGxhdGZvcm1Nb3VzZUV2ZW50LmgiCi0jaW5jbHVkZSAiUmVuZGVyVGhlbWVRU3R5
bGUuaCIKLSNpbmNsdWRlICJSZW5kZXJUaGVtZVF0TW9iaWxlLmgiCi0jaW5jbHVkZSAiU2Nyb2xs
Vmlldy5oIgotI2luY2x1ZGUgIlNjcm9sbGJhci5oIgotCi0jaW5jbHVkZSA8UUFwcGxpY2F0aW9u
PgotI2lmZGVmIFFfV1NfTUFDCi0jaW5jbHVkZSA8UU1hY1N0eWxlPgotI2VuZGlmCi0jaW5jbHVk
ZSA8UU1lbnU+Ci0jaW5jbHVkZSA8UVBhaW50ZXI+Ci0jaW5jbHVkZSA8UVN0eWxlPgotI2luY2x1
ZGUgPFFTdHlsZU9wdGlvblNsaWRlcj4KLQotbmFtZXNwYWNlIFdlYkNvcmUgewotCi1TY3JvbGxi
YXJUaGVtZVFTdHlsZTo6flNjcm9sbGJhclRoZW1lUVN0eWxlKCkKLXsKLX0KLQotc3RhdGljIFFT
dHlsZTo6U3ViQ29udHJvbCBzY1BhcnQoY29uc3QgU2Nyb2xsYmFyUGFydCYgcGFydCkKLXsKLSAg
ICBzd2l0Y2ggKHBhcnQpIHsKLSAgICBjYXNlIE5vUGFydDoKLSAgICAgICAgcmV0dXJuIFFTdHls
ZTo6U0NfTm9uZTsKLSAgICBjYXNlIEJhY2tCdXR0b25TdGFydFBhcnQ6Ci0gICAgY2FzZSBCYWNr
QnV0dG9uRW5kUGFydDoKLSAgICAgICAgcmV0dXJuIFFTdHlsZTo6U0NfU2Nyb2xsQmFyU3ViTGlu
ZTsKLSAgICBjYXNlIEJhY2tUcmFja1BhcnQ6Ci0gICAgICAgIHJldHVybiBRU3R5bGU6OlNDX1Nj
cm9sbEJhclN1YlBhZ2U7Ci0gICAgY2FzZSBUaHVtYlBhcnQ6Ci0gICAgICAgIHJldHVybiBRU3R5
bGU6OlNDX1Njcm9sbEJhclNsaWRlcjsKLSAgICBjYXNlIEZvcndhcmRUcmFja1BhcnQ6Ci0gICAg
ICAgIHJldHVybiBRU3R5bGU6OlNDX1Njcm9sbEJhckFkZFBhZ2U7Ci0gICAgY2FzZSBGb3J3YXJk
QnV0dG9uU3RhcnRQYXJ0OgotICAgIGNhc2UgRm9yd2FyZEJ1dHRvbkVuZFBhcnQ6Ci0gICAgICAg
IHJldHVybiBRU3R5bGU6OlNDX1Njcm9sbEJhckFkZExpbmU7Ci0gICAgfQotCi0gICAgcmV0dXJu
IFFTdHlsZTo6U0NfTm9uZTsKLX0KLQotc3RhdGljIFNjcm9sbGJhclBhcnQgc2Nyb2xsYmFyUGFy
dChjb25zdCBRU3R5bGU6OlN1YkNvbnRyb2wmIHNjKQotewotICAgIHN3aXRjaCAoc2MpIHsKLSAg
ICBjYXNlIFFTdHlsZTo6U0NfTm9uZToKLSAgICAgICAgcmV0dXJuIE5vUGFydDsKLSAgICBjYXNl
IFFTdHlsZTo6U0NfU2Nyb2xsQmFyU3ViTGluZToKLSAgICAgICAgcmV0dXJuIEJhY2tCdXR0b25T
dGFydFBhcnQ7Ci0gICAgY2FzZSBRU3R5bGU6OlNDX1Njcm9sbEJhclN1YlBhZ2U6Ci0gICAgICAg
IHJldHVybiBCYWNrVHJhY2tQYXJ0OwotICAgIGNhc2UgUVN0eWxlOjpTQ19TY3JvbGxCYXJTbGlk
ZXI6Ci0gICAgICAgIHJldHVybiBUaHVtYlBhcnQ7Ci0gICAgY2FzZSBRU3R5bGU6OlNDX1Njcm9s
bEJhckFkZFBhZ2U6Ci0gICAgICAgIHJldHVybiBGb3J3YXJkVHJhY2tQYXJ0OwotICAgIGNhc2Ug
UVN0eWxlOjpTQ19TY3JvbGxCYXJBZGRMaW5lOgotICAgICAgICByZXR1cm4gRm9yd2FyZEJ1dHRv
blN0YXJ0UGFydDsKLSAgICB9Ci0gICAgcmV0dXJuIE5vUGFydDsKLX0KLQotc3RhdGljIFFTdHls
ZU9wdGlvblNsaWRlciogc3R5bGVPcHRpb25TbGlkZXIoU2Nyb2xsYmFyVGhlbWVDbGllbnQqIHNj
cm9sbGJhciwgUVdpZGdldCogd2lkZ2V0ID0gMCkKLXsKLSAgICBzdGF0aWMgUVN0eWxlT3B0aW9u
U2xpZGVyIG9wdDsKLSAgICBpZiAod2lkZ2V0KQotICAgICAgICBvcHQuaW5pdEZyb20od2lkZ2V0
KTsKLSAgICBlbHNlCi0gICAgICAgIG9wdC5zdGF0ZSB8PSBRU3R5bGU6OlN0YXRlX0FjdGl2ZTsK
LQotICAgIG9wdC5zdGF0ZSAmPSB+UVN0eWxlOjpTdGF0ZV9IYXNGb2N1czsKLQotICAgIG9wdC5y
ZWN0ID0gc2Nyb2xsYmFyLT5mcmFtZVJlY3QoKTsKLSAgICBpZiAoc2Nyb2xsYmFyLT5lbmFibGVk
KCkpCi0gICAgICAgIG9wdC5zdGF0ZSB8PSBRU3R5bGU6OlN0YXRlX0VuYWJsZWQ7Ci0gICAgaWYg
KHNjcm9sbGJhci0+Y29udHJvbFNpemUoKSAhPSBSZWd1bGFyU2Nyb2xsYmFyKQotICAgICAgICBv
cHQuc3RhdGUgfD0gUVN0eWxlOjpTdGF0ZV9NaW5pOwotICAgIG9wdC5vcmllbnRhdGlvbiA9IChz
Y3JvbGxiYXItPm9yaWVudGF0aW9uKCkgPT0gVmVydGljYWxTY3JvbGxiYXIpID8gUXQ6OlZlcnRp
Y2FsIDogUXQ6Okhvcml6b250YWw7Ci0KLSAgICBpZiAoc2Nyb2xsYmFyLT5vcmllbnRhdGlvbigp
ID09IEhvcml6b250YWxTY3JvbGxiYXIpCi0gICAgICAgIG9wdC5zdGF0ZSB8PSBRU3R5bGU6OlN0
YXRlX0hvcml6b250YWw7Ci0gICAgZWxzZQotICAgICAgICBvcHQuc3RhdGUgJj0gflFTdHlsZTo6
U3RhdGVfSG9yaXpvbnRhbDsKLQotICAgIG9wdC5zbGlkZXJWYWx1ZSA9IHNjcm9sbGJhci0+dmFs
dWUoKTsKLSAgICBvcHQuc2xpZGVyUG9zaXRpb24gPSBvcHQuc2xpZGVyVmFsdWU7Ci0gICAgb3B0
LnBhZ2VTdGVwID0gc2Nyb2xsYmFyLT5wYWdlU3RlcCgpOwotICAgIG9wdC5zaW5nbGVTdGVwID0g
c2Nyb2xsYmFyLT5saW5lU3RlcCgpOwotICAgIG9wdC5taW5pbXVtID0gMDsKLSAgICBvcHQubWF4
aW11bSA9IHFNYXgoMCwgc2Nyb2xsYmFyLT5tYXhpbXVtKCkpOwotICAgIFNjcm9sbGJhclBhcnQg
cHJlc3NlZFBhcnQgPSBzY3JvbGxiYXItPnByZXNzZWRQYXJ0KCk7Ci0gICAgU2Nyb2xsYmFyUGFy
dCBob3ZlcmVkUGFydCA9IHNjcm9sbGJhci0+aG92ZXJlZFBhcnQoKTsKLSAgICBpZiAocHJlc3Nl
ZFBhcnQgIT0gTm9QYXJ0KSB7Ci0gICAgICAgIG9wdC5hY3RpdmVTdWJDb250cm9scyA9IHNjUGFy
dChzY3JvbGxiYXItPnByZXNzZWRQYXJ0KCkpOwotICAgICAgICBpZiAocHJlc3NlZFBhcnQgPT0g
QmFja0J1dHRvblN0YXJ0UGFydCB8fCBwcmVzc2VkUGFydCA9PSBGb3J3YXJkQnV0dG9uU3RhcnRQ
YXJ0Ci0gICAgICAgICAgICB8fCBwcmVzc2VkUGFydCA9PSBCYWNrQnV0dG9uRW5kUGFydCB8fCBw
cmVzc2VkUGFydCA9PSBGb3J3YXJkQnV0dG9uRW5kUGFydAotICAgICAgICAgICAgfHwgcHJlc3Nl
ZFBhcnQgPT0gVGh1bWJQYXJ0KQotICAgICAgICAgICAgb3B0LnN0YXRlIHw9IFFTdHlsZTo6U3Rh
dGVfU3Vua2VuOwotICAgIH0gZWxzZQotICAgICAgICBvcHQuYWN0aXZlU3ViQ29udHJvbHMgPSBz
Y1BhcnQoaG92ZXJlZFBhcnQpOwotICAgIGlmIChob3ZlcmVkUGFydCAhPSBOb1BhcnQpCi0gICAg
ICAgIG9wdC5zdGF0ZSB8PSBRU3R5bGU6OlN0YXRlX01vdXNlT3ZlcjsKLSAgICByZXR1cm4gJm9w
dDsKLX0KLQotYm9vbCBTY3JvbGxiYXJUaGVtZVFTdHlsZTo6cGFpbnQoU2Nyb2xsYmFyVGhlbWVD
bGllbnQqIHNjcm9sbGJhciwgR3JhcGhpY3NDb250ZXh0KiBncmFwaGljc0NvbnRleHQsIGNvbnN0
IEludFJlY3QmIGRpcnR5UmVjdCkKLXsKLSAgICBpZiAoZ3JhcGhpY3NDb250ZXh0LT51cGRhdGlu
Z0NvbnRyb2xUaW50cygpKSB7Ci0gICAgICAgc2Nyb2xsYmFyLT5pbnZhbGlkYXRlUmVjdChkaXJ0
eVJlY3QpOwotICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci0KLSAgICBTdHlsZVBhaW50ZXJR
U3R5bGUgcCh0aGlzLCBncmFwaGljc0NvbnRleHQpOwotICAgIGlmICghcC5pc1ZhbGlkKCkpCi0g
ICAgICByZXR1cm4gdHJ1ZTsKLQotICAgIHAucGFpbnRlci0+c2F2ZSgpOwotICAgIFFTdHlsZU9w
dGlvblNsaWRlciogb3B0ID0gc3R5bGVPcHRpb25TbGlkZXIoc2Nyb2xsYmFyLCBwLndpZGdldCk7
Ci0KLSAgICBwLnBhaW50ZXItPnNldENsaXBSZWN0KG9wdC0+cmVjdC5pbnRlcnNlY3RlZChkaXJ0
eVJlY3QpLCBRdDo6SW50ZXJzZWN0Q2xpcCk7Ci0KLSNpZmRlZiBRX1dTX01BQwotICAgIC8vIEZJ
WE1FOiBXZSBhbHNvIG5lZWQgdG8gY2hlY2sgdGhlIHdpZGdldCBzdHlsZSBidXQgdG9kYXkgU2Ny
b2xsYmFyVGhlbWUgaXMgbm90IGF3YXJlIG9mIHRoZSBwYWdlIHNvIHdlCi0gICAgLy8gY2FuJ3Qg
Z2V0IHRoZSB3aWRnZXQuCi0gICAgaWYgKHFvYmplY3RfY2FzdDxRTWFjU3R5bGUqPihzdHlsZSgp
KSkKLSAgICAgICAgcC5kcmF3Q29tcGxleENvbnRyb2woUVN0eWxlOjpDQ19TY3JvbGxCYXIsICpv
cHQpOwotICAgIGVsc2UKLSNlbmRpZgotICAgIHsKLSAgICAgICAgLy8gVGhlIFFTdHlsZSBleHBl
Y3RzIHRoZSBiYWNrZ3JvdW5kIHRvIGJlIGFscmVhZHkgZmlsbGVkLgotICAgICAgICBwLnBhaW50
ZXItPmZpbGxSZWN0KG9wdC0+cmVjdCwgb3B0LT5wYWxldHRlLmJhY2tncm91bmQoKSk7Ci0KLSAg
ICAgICAgY29uc3QgUVBvaW50IHRvcExlZnQgPSBvcHQtPnJlY3QudG9wTGVmdCgpOwotICAgICAg
ICBwLnBhaW50ZXItPnRyYW5zbGF0ZSh0b3BMZWZ0KTsKLSAgICAgICAgb3B0LT5yZWN0Lm1vdmVU
byhRUG9pbnQoMCwgMCkpOwotICAgICAgICBwLmRyYXdDb21wbGV4Q29udHJvbChRU3R5bGU6OkND
X1Njcm9sbEJhciwgKm9wdCk7Ci0gICAgICAgIG9wdC0+cmVjdC5tb3ZlVG8odG9wTGVmdCk7Ci0g
ICAgfQotICAgIHAucGFpbnRlci0+cmVzdG9yZSgpOwotCi0gICAgcmV0dXJuIHRydWU7Ci19Ci0K
LVNjcm9sbGJhclBhcnQgU2Nyb2xsYmFyVGhlbWVRU3R5bGU6OmhpdFRlc3QoU2Nyb2xsYmFyVGhl
bWVDbGllbnQqIHNjcm9sbGJhciwgY29uc3QgUGxhdGZvcm1Nb3VzZUV2ZW50JiBldnQpCi17Ci0g
ICAgUVN0eWxlT3B0aW9uU2xpZGVyKiBvcHQgPSBzdHlsZU9wdGlvblNsaWRlcihzY3JvbGxiYXIp
OwotICAgIGNvbnN0IFFQb2ludCBwb3MgPSBzY3JvbGxiYXItPmNvbnZlcnRGcm9tQ29udGFpbmlu
Z1dpbmRvdyhldnQucG9zaXRpb24oKSk7Ci0gICAgb3B0LT5yZWN0Lm1vdmVUbyhRUG9pbnQoMCwg
MCkpOwotICAgIFFTdHlsZTo6U3ViQ29udHJvbCBzYyA9IHN0eWxlKCktPmhpdFRlc3RDb21wbGV4
Q29udHJvbChRU3R5bGU6OkNDX1Njcm9sbEJhciwgb3B0LCBwb3MsIDApOwotICAgIHJldHVybiBz
Y3JvbGxiYXJQYXJ0KHNjKTsKLX0KLQotYm9vbCBTY3JvbGxiYXJUaGVtZVFTdHlsZTo6c2hvdWxk
Q2VudGVyT25UaHVtYihTY3JvbGxiYXJUaGVtZUNsaWVudCosIGNvbnN0IFBsYXRmb3JtTW91c2VF
dmVudCYgZXZ0KQotewotICAgIC8vIE1pZGRsZSBjbGljayBjZW50ZXJzIHNsaWRlciB0aHVtYiAo
aWYgc3VwcG9ydGVkKS4KLSAgICByZXR1cm4gc3R5bGUoKS0+c3R5bGVIaW50KFFTdHlsZTo6U0hf
U2Nyb2xsQmFyX01pZGRsZUNsaWNrQWJzb2x1dGVQb3NpdGlvbikgJiYgZXZ0LmJ1dHRvbigpID09
IE1pZGRsZUJ1dHRvbjsKLX0KLQotdm9pZCBTY3JvbGxiYXJUaGVtZVFTdHlsZTo6aW52YWxpZGF0
ZVBhcnQoU2Nyb2xsYmFyVGhlbWVDbGllbnQqIHNjcm9sbGJhciwgU2Nyb2xsYmFyUGFydCkKLXsK
LSAgICAvLyBGSVhNRTogRG8gbW9yZSBwcmVjaXNlIGludmFsaWRhdGlvbi4KLSAgICBzY3JvbGxi
YXItPmludmFsaWRhdGUoKTsKLX0KLQotaW50IFNjcm9sbGJhclRoZW1lUVN0eWxlOjpzY3JvbGxi
YXJUaGlja25lc3MoU2Nyb2xsYmFyQ29udHJvbFNpemUgY29udHJvbFNpemUpCi17Ci0gICAgUVN0
eWxlT3B0aW9uU2xpZGVyIG87Ci0gICAgby5vcmllbnRhdGlvbiA9IFF0OjpWZXJ0aWNhbDsKLSAg
ICBvLnN0YXRlICY9IH5RU3R5bGU6OlN0YXRlX0hvcml6b250YWw7Ci0gICAgaWYgKGNvbnRyb2xT
aXplICE9IFJlZ3VsYXJTY3JvbGxiYXIpCi0gICAgICAgIG8uc3RhdGUgfD0gUVN0eWxlOjpTdGF0
ZV9NaW5pOwotICAgIHJldHVybiBzdHlsZSgpLT5waXhlbE1ldHJpYyhRU3R5bGU6OlBNX1Njcm9s
bEJhckV4dGVudCwgJm8sIDApOwotfQotCi1pbnQgU2Nyb2xsYmFyVGhlbWVRU3R5bGU6OnRodW1i
UG9zaXRpb24oU2Nyb2xsYmFyVGhlbWVDbGllbnQqIHNjcm9sbGJhcikKLXsKLSAgICBpZiAoc2Ny
b2xsYmFyLT5lbmFibGVkKCkpIHsKLSAgICAgICAgZmxvYXQgcG9zID0gKGZsb2F0KXNjcm9sbGJh
ci0+Y3VycmVudFBvcygpICogKHRyYWNrTGVuZ3RoKHNjcm9sbGJhcikgLSB0aHVtYkxlbmd0aChz
Y3JvbGxiYXIpKSAvIHNjcm9sbGJhci0+bWF4aW11bSgpOwotICAgICAgICByZXR1cm4gKHBvcyA8
IDEgJiYgcG9zID4gMCkgPyAxIDogcG9zOwotICAgIH0KLSAgICByZXR1cm4gMDsKLX0KLQotaW50
IFNjcm9sbGJhclRoZW1lUVN0eWxlOjp0aHVtYkxlbmd0aChTY3JvbGxiYXJUaGVtZUNsaWVudCog
c2Nyb2xsYmFyKQotewotICAgIFFTdHlsZU9wdGlvblNsaWRlciogb3B0ID0gc3R5bGVPcHRpb25T
bGlkZXIoc2Nyb2xsYmFyKTsKLSAgICBJbnRSZWN0IHRodW1iID0gc3R5bGUoKS0+c3ViQ29udHJv
bFJlY3QoUVN0eWxlOjpDQ19TY3JvbGxCYXIsIG9wdCwgUVN0eWxlOjpTQ19TY3JvbGxCYXJTbGlk
ZXIsIDApOwotICAgIHJldHVybiBzY3JvbGxiYXItPm9yaWVudGF0aW9uKCkgPT0gSG9yaXpvbnRh
bFNjcm9sbGJhciA/IHRodW1iLndpZHRoKCkgOiB0aHVtYi5oZWlnaHQoKTsKLX0KLQotaW50IFNj
cm9sbGJhclRoZW1lUVN0eWxlOjp0cmFja1Bvc2l0aW9uKFNjcm9sbGJhclRoZW1lQ2xpZW50KiBz
Y3JvbGxiYXIpCi17Ci0gICAgUVN0eWxlT3B0aW9uU2xpZGVyKiBvcHQgPSBzdHlsZU9wdGlvblNs
aWRlcihzY3JvbGxiYXIpOwotICAgIEludFJlY3QgdHJhY2sgPSBzdHlsZSgpLT5zdWJDb250cm9s
UmVjdChRU3R5bGU6OkNDX1Njcm9sbEJhciwgb3B0LCBRU3R5bGU6OlNDX1Njcm9sbEJhckdyb292
ZSwgMCk7Ci0gICAgcmV0dXJuIHNjcm9sbGJhci0+b3JpZW50YXRpb24oKSA9PSBIb3Jpem9udGFs
U2Nyb2xsYmFyID8gdHJhY2sueCgpIC0gc2Nyb2xsYmFyLT54KCkgOiB0cmFjay55KCkgLSBzY3Jv
bGxiYXItPnkoKTsKLX0KLQotaW50IFNjcm9sbGJhclRoZW1lUVN0eWxlOjp0cmFja0xlbmd0aChT
Y3JvbGxiYXJUaGVtZUNsaWVudCogc2Nyb2xsYmFyKQotewotICAgIFFTdHlsZU9wdGlvblNsaWRl
ciogb3B0ID0gc3R5bGVPcHRpb25TbGlkZXIoc2Nyb2xsYmFyKTsKLSAgICBJbnRSZWN0IHRyYWNr
ID0gc3R5bGUoKS0+c3ViQ29udHJvbFJlY3QoUVN0eWxlOjpDQ19TY3JvbGxCYXIsIG9wdCwgUVN0
eWxlOjpTQ19TY3JvbGxCYXJHcm9vdmUsIDApOwotICAgIHJldHVybiBzY3JvbGxiYXItPm9yaWVu
dGF0aW9uKCkgPT0gSG9yaXpvbnRhbFNjcm9sbGJhciA/IHRyYWNrLndpZHRoKCkgOiB0cmFjay5o
ZWlnaHQoKTsKLX0KLQotdm9pZCBTY3JvbGxiYXJUaGVtZVFTdHlsZTo6cGFpbnRTY3JvbGxDb3Ju
ZXIoU2Nyb2xsVmlldyosIEdyYXBoaWNzQ29udGV4dCogY29udGV4dCwgY29uc3QgSW50UmVjdCYg
cmVjdCkKLXsKLSAgICBTdHlsZVBhaW50ZXJRU3R5bGUgcCh0aGlzLCBjb250ZXh0KTsKLSAgICBp
ZiAoIXAuaXNWYWxpZCgpKQotICAgICAgICByZXR1cm47Ci0KLSAgICBRU3R5bGVPcHRpb24gb3B0
aW9uOwotICAgIG9wdGlvbi5yZWN0ID0gcmVjdDsKLSAgICBwLmRyYXdQcmltaXRpdmUoUVN0eWxl
OjpQRV9QYW5lbFNjcm9sbEFyZWFDb3JuZXIsIG9wdGlvbik7Ci19Ci0KLVFTdHlsZSogU2Nyb2xs
YmFyVGhlbWVRU3R5bGU6OnN0eWxlKCkgY29uc3QKLXsKLSAgICByZXR1cm4gUUFwcGxpY2F0aW9u
OjpzdHlsZSgpOwotfQotCi19Ci0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvcXQvV2ViQ29y
ZVN1cHBvcnQvU2Nyb2xsYmFyVGhlbWVRU3R5bGUuaCBiL1NvdXJjZS9XZWJLaXQvcXQvV2ViQ29y
ZVN1cHBvcnQvU2Nyb2xsYmFyVGhlbWVRU3R5bGUuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQK
aW5kZXggMjUzN2I5YWU0NGI0NThkZDcwMjI1YTA1ZTAzZGJhMWM3MmEzZGRlMC4uMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViS2l0L3F0L1dl
YkNvcmVTdXBwb3J0L1Njcm9sbGJhclRoZW1lUVN0eWxlLmgKKysrIC9kZXYvbnVsbApAQCAtMSw2
MyArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDA4IEFwcGxlIEluYy4gQWxsIFJpZ2h0
cyBSZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQg
YmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1p
dHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoK
LSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJv
dmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5
IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRo
ZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdp
dGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZ
IEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKLSAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJS
QU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCi0gKiBJTVBMSUVEIFdB
UlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIK
LSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMu
IE9SCi0gKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwg
SU5DSURFTlRBTCwgU1BFQ0lBTCwKLSAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1B
R0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFBST0NVUkVNRU5UIE9GIFNV
QlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgotICogUFJP
RklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5Z
IFRIRU9SWQotICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElB
QklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBB
UklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLSAqIE9GIFRISVMgU09GVFdBUkUsIEVW
RU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQot
I2lmbmRlZiBTY3JvbGxiYXJUaGVtZVFTdHlsZV9oCi0jZGVmaW5lIFNjcm9sbGJhclRoZW1lUVN0
eWxlX2gKLQotI2luY2x1ZGUgIlNjcm9sbGJhclRoZW1lLmgiCi0KLSNpbmNsdWRlIDxRdENvcmUv
cWdsb2JhbC5oPgotCi1RVF9CRUdJTl9OQU1FU1BBQ0UKLWNsYXNzIFFTdHlsZTsKLVFUX0VORF9O
QU1FU1BBQ0UKLQotbmFtZXNwYWNlIFdlYkNvcmUgewotCi1jbGFzcyBTY3JvbGxiYXJUaGVtZVFT
dHlsZSA6IHB1YmxpYyBTY3JvbGxiYXJUaGVtZSB7Ci1wdWJsaWM6Ci0gICAgdmlydHVhbCB+U2Ny
b2xsYmFyVGhlbWVRU3R5bGUoKTsKLQotICAgIHZpcnR1YWwgYm9vbCBwYWludChTY3JvbGxiYXJU
aGVtZUNsaWVudCosIEdyYXBoaWNzQ29udGV4dCosIGNvbnN0IEludFJlY3QmIGRpcnR5UmVjdCk7
Ci0gICAgdmlydHVhbCB2b2lkIHBhaW50U2Nyb2xsQ29ybmVyKFNjcm9sbFZpZXcqLCBHcmFwaGlj
c0NvbnRleHQqLCBjb25zdCBJbnRSZWN0JiBjb3JuZXJSZWN0KTsKLQotICAgIHZpcnR1YWwgU2Ny
b2xsYmFyUGFydCBoaXRUZXN0KFNjcm9sbGJhclRoZW1lQ2xpZW50KiwgY29uc3QgUGxhdGZvcm1N
b3VzZUV2ZW50Jik7Ci0KLSAgICB2aXJ0dWFsIGJvb2wgc2hvdWxkQ2VudGVyT25UaHVtYihTY3Jv
bGxiYXJUaGVtZUNsaWVudCosIGNvbnN0IFBsYXRmb3JtTW91c2VFdmVudCYpOwotCi0gICAgdmly
dHVhbCB2b2lkIGludmFsaWRhdGVQYXJ0KFNjcm9sbGJhclRoZW1lQ2xpZW50KiwgU2Nyb2xsYmFy
UGFydCk7Ci0KLSAgICB2aXJ0dWFsIGludCB0aHVtYlBvc2l0aW9uKFNjcm9sbGJhclRoZW1lQ2xp
ZW50Kik7Ci0gICAgdmlydHVhbCBpbnQgdGh1bWJMZW5ndGgoU2Nyb2xsYmFyVGhlbWVDbGllbnQq
KTsKLSAgICB2aXJ0dWFsIGludCB0cmFja1Bvc2l0aW9uKFNjcm9sbGJhclRoZW1lQ2xpZW50Kik7
Ci0gICAgdmlydHVhbCBpbnQgdHJhY2tMZW5ndGgoU2Nyb2xsYmFyVGhlbWVDbGllbnQqKTsKLQot
ICAgIHZpcnR1YWwgaW50IHNjcm9sbGJhclRoaWNrbmVzcyhTY3JvbGxiYXJDb250cm9sU2l6ZSA9
IFJlZ3VsYXJTY3JvbGxiYXIpOwotCi0gICAgUVN0eWxlKiBzdHlsZSgpIGNvbnN0OwotfTsKLQot
fQotI2VuZGlmCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>166902</attachid>
            <date>2012-10-03 08:34:32 -0700</date>
            <delta_ts>2012-10-04 02:53:20 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-98268-20121003173641.patch</filename>
            <type>text/plain</type>
            <size>132205</size>
            <attacher name="Simon Hausmann">hausmann</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTI5NjEwCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggM2E3OWM4MDNhOWM2MWIy
YzFkMTZjZmI3ZmU1YWJlMWMyNDQ0NDhmMC4uYzU4YTEyODJlYzU3YjgzMGFmOWIxYjNkZWY2Njc4
MWJkYTU5MzQ2YyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDk4IEBACisyMDEyLTEwLTAzICBTaW1v
biBIYXVzbWFubiAgPHNpbW9uLmhhdXNtYW5uQGRpZ2lhLmNvbT4KKworICAgICAgICBbUXRdIE1h
a2UgUmVuZGVyVGhlbWVRU3R5bGUvU2Nyb2xsYmFyVGhlbWVRU3R5bGUgY29tcGlsZSB3aXRob3V0
IFFTdHlsZS9RdFdpZGdldHMKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19i
dWcuY2dpP2lkPTk4MjY4CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisK
KyAgICAgICAgRXh0cmFjdGVkIFFTdHlsZS9RV2lkZ2V0IHJlbGF0ZWQgY29kZSBpbnRvIGEgUVdl
YlN0eWxlIGNsYXNzIHRoYXQgaW1wbGVtZW50cyB0aGUgUVN0eWxlSW50ZXJmYWNlIGludGVyZmFj
ZS4KKworICAgICAgICAqIFRhcmdldC5wcmk6CisgICAgICAgICogcGxhdGZvcm0vcXQvUVN0eWxl
SW50ZXJmYWNlLmNwcDogQWRkZWQuCisgICAgICAgIChXZWJDb3JlKToKKyAgICAgICAgKFdlYkNv
cmU6OlFTdHlsZUludGVyZmFjZTo6c3R5bGVGb3JQYWdlKToKKyAgICAgICAgKiBwbGF0Zm9ybS9x
dC9RU3R5bGVJbnRlcmZhY2UuaDogQWRkZWQuCisgICAgICAgIChXZWJDb3JlKToKKyAgICAgICAg
KFFTdHlsZUludGVyZmFjZSk6CisgICAgICAgIChXZWJDb3JlOjpRU3R5bGVJbnRlcmZhY2U6On5R
U3R5bGVJbnRlcmZhY2UpOgorICAgICAgICAoV2ViQ29yZTo6UVN0eWxlSW50ZXJmYWNlT3B0aW9u
OjpRU3R5bGVJbnRlcmZhY2VPcHRpb24pOgorICAgICAgICAoUVN0eWxlSW50ZXJmYWNlT3B0aW9u
KToKKyAgICAgICAgKiBwbGF0Zm9ybS9xdC9SZW5kZXJUaGVtZVFTdHlsZS5jcHA6IFJlbmFtZWQg
ZnJvbSBTb3VyY2UvV2ViS2l0L3F0L1dlYkNvcmVTdXBwb3J0L1JlbmRlclRoZW1lUVN0eWxlLmNw
cC4KKyAgICAgICAgKFdlYkNvcmUpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGhlbWVRU3R5
bGU6OmdldFN0eWxlUGFpbnRlcik6CisgICAgICAgIChXZWJDb3JlOjpTdHlsZVBhaW50ZXJRU3R5
bGU6OlN0eWxlUGFpbnRlclFTdHlsZSk6CisgICAgICAgIChXZWJDb3JlOjpTdHlsZVBhaW50ZXJR
U3R5bGU6OmluaXQpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGhlbWVRU3R5bGU6OmNyZWF0
ZSk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJUaGVtZVFTdHlsZTo6c2V0U3R5bGVGYWN0b3J5
RnVuY3Rpb24pOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGhlbWVRU3R5bGU6OnN0eWxlRmFj
dG9yeSk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJUaGVtZVFTdHlsZTo6UmVuZGVyVGhlbWVR
U3R5bGUpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGhlbWVRU3R5bGU6On5SZW5kZXJUaGVt
ZVFTdHlsZSk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJUaGVtZVFTdHlsZTo6c2V0UGFsZXR0
ZUZyb21QYWdlQ2xpZW50SWZFeGlzdHMpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGhlbWVR
U3R5bGU6OmluZmxhdGVCdXR0b25SZWN0KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRoZW1l
UVN0eWxlOjpjb21wdXRlU2l6ZUJhc2VkT25TdHlsZSk6CisgICAgICAgIChXZWJDb3JlOjpSZW5k
ZXJUaGVtZVFTdHlsZTo6YWRqdXN0QnV0dG9uU3R5bGUpOgorICAgICAgICAoV2ViQ29yZTo6UmVu
ZGVyVGhlbWVRU3R5bGU6OnNldEJ1dHRvblBhZGRpbmcpOgorICAgICAgICAoV2ViQ29yZTo6UmVu
ZGVyVGhlbWVRU3R5bGU6OnBhaW50QnV0dG9uKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRo
ZW1lUVN0eWxlOjpwYWludFRleHRGaWVsZCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJUaGVt
ZVFTdHlsZTo6YWRqdXN0VGV4dEFyZWFTdHlsZSk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJU
aGVtZVFTdHlsZTo6cGFpbnRUZXh0QXJlYSk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJUaGVt
ZVFTdHlsZTo6c2V0UG9wdXBQYWRkaW5nKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRoZW1l
UVN0eWxlOjpjb2xvclBhbGV0dGUpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGhlbWVRU3R5
bGU6OnBhaW50TWVudUxpc3QpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGhlbWVRU3R5bGU6
OmFkanVzdE1lbnVMaXN0QnV0dG9uU3R5bGUpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGhl
bWVRU3R5bGU6OnBhaW50TWVudUxpc3RCdXR0b24pOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVy
VGhlbWVRU3R5bGU6OmFuaW1hdGlvbkR1cmF0aW9uRm9yUHJvZ3Jlc3NCYXIpOgorICAgICAgICAo
V2ViQ29yZTo6UmVuZGVyVGhlbWVRU3R5bGU6OnBhaW50UHJvZ3Jlc3NCYXIpOgorICAgICAgICAo
V2ViQ29yZTo6UmVuZGVyVGhlbWVRU3R5bGU6OnBhaW50U2xpZGVyVHJhY2spOgorICAgICAgICAo
V2ViQ29yZTo6UmVuZGVyVGhlbWVRU3R5bGU6OmFkanVzdFNsaWRlclRyYWNrU3R5bGUpOgorICAg
ICAgICAoV2ViQ29yZTo6UmVuZGVyVGhlbWVRU3R5bGU6OnBhaW50U2xpZGVyVGh1bWIpOgorICAg
ICAgICAoV2ViQ29yZTo6UmVuZGVyVGhlbWVRU3R5bGU6OmFkanVzdFNsaWRlclRodW1iU3R5bGUp
OgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGhlbWVRU3R5bGU6OnBhaW50U2VhcmNoRmllbGQp
OgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGhlbWVRU3R5bGU6OmFkanVzdFNlYXJjaEZpZWxk
RGVjb3JhdGlvblN0eWxlKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRoZW1lUVN0eWxlOjpw
YWludFNlYXJjaEZpZWxkRGVjb3JhdGlvbik6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJUaGVt
ZVFTdHlsZTo6YWRqdXN0U2VhcmNoRmllbGRSZXN1bHRzRGVjb3JhdGlvblN0eWxlKToKKyAgICAg
ICAgKFdlYkNvcmU6OlJlbmRlclRoZW1lUVN0eWxlOjpwYWludFNlYXJjaEZpZWxkUmVzdWx0c0Rl
Y29yYXRpb24pOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGhlbWVRU3R5bGU6OnBhaW50SW5u
ZXJTcGluQnV0dG9uKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRoZW1lUVN0eWxlOjppbml0
aWFsaXplQ29tbW9uUVN0eWxlT3B0aW9ucyk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJUaGVt
ZVFTdHlsZTo6YWRqdXN0U2xpZGVyVGh1bWJTaXplKToKKyAgICAgICAgKiBwbGF0Zm9ybS9xdC9S
ZW5kZXJUaGVtZVFTdHlsZS5oOiBSZW5hbWVkIGZyb20gU291cmNlL1dlYktpdC9xdC9XZWJDb3Jl
U3VwcG9ydC9SZW5kZXJUaGVtZVFTdHlsZS5oLgorICAgICAgICAoV2ViQ29yZSk6CisgICAgICAg
IChSZW5kZXJUaGVtZVFTdHlsZSk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJUaGVtZVFTdHls
ZTo6c3R5bGVJbnRlcmZhY2UpOgorICAgICAgICAoU3R5bGVQYWludGVyUVN0eWxlKToKKyAgICAg
ICAgKFdlYkNvcmU6OlN0eWxlUGFpbnRlclFTdHlsZTo6aXNWYWxpZCk6CisgICAgICAgIChXZWJD
b3JlOjpTdHlsZVBhaW50ZXJRU3R5bGU6OnBhaW50QnV0dG9uKToKKyAgICAgICAgKFdlYkNvcmU6
OlN0eWxlUGFpbnRlclFTdHlsZTo6cGFpbnRUZXh0RmllbGQpOgorICAgICAgICAoV2ViQ29yZTo6
U3R5bGVQYWludGVyUVN0eWxlOjpwYWludENvbWJvQm94KToKKyAgICAgICAgKFdlYkNvcmU6OlN0
eWxlUGFpbnRlclFTdHlsZTo6cGFpbnRDb21ib0JveEFycm93KToKKyAgICAgICAgKFdlYkNvcmU6
OlN0eWxlUGFpbnRlclFTdHlsZTo6cGFpbnRTbGlkZXJUcmFjayk6CisgICAgICAgIChXZWJDb3Jl
OjpTdHlsZVBhaW50ZXJRU3R5bGU6OnBhaW50U2xpZGVyVGh1bWIpOgorICAgICAgICAoV2ViQ29y
ZTo6U3R5bGVQYWludGVyUVN0eWxlOjpwYWludElubmVyU3BpbkJ1dHRvbik6CisgICAgICAgIChX
ZWJDb3JlOjpTdHlsZVBhaW50ZXJRU3R5bGU6OnBhaW50UHJvZ3Jlc3NCYXIpOgorICAgICAgICAo
V2ViQ29yZTo6U3R5bGVQYWludGVyUVN0eWxlOjpwYWludFNjcm9sbENvcm5lcik6CisgICAgICAg
IChXZWJDb3JlOjpTdHlsZVBhaW50ZXJRU3R5bGU6OnBhaW50U2Nyb2xsQmFyKToKKyAgICAgICAg
KiBwbGF0Zm9ybS9xdC9TY3JvbGxiYXJUaGVtZVFTdHlsZS5jcHA6IFJlbmFtZWQgZnJvbSBTb3Vy
Y2UvV2ViS2l0L3F0L1dlYkNvcmVTdXBwb3J0L1Njcm9sbGJhclRoZW1lUVN0eWxlLmNwcC4KKyAg
ICAgICAgKFdlYkNvcmUpOgorICAgICAgICAoV2ViQ29yZTo6U2Nyb2xsYmFyVGhlbWVRU3R5bGU6
OlNjcm9sbGJhclRoZW1lUVN0eWxlKToKKyAgICAgICAgKFdlYkNvcmU6OlNjcm9sbGJhclRoZW1l
UVN0eWxlOjp+U2Nyb2xsYmFyVGhlbWVRU3R5bGUpOgorICAgICAgICAoV2ViQ29yZTo6c2NQYXJ0
KToKKyAgICAgICAgKFdlYkNvcmU6OnNjcm9sbGJhclBhcnQpOgorICAgICAgICAoV2ViQ29yZTo6
aW5pdFNsaWRlclN0eWxlT3B0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OlNjcm9sbGJhclRoZW1l
UVN0eWxlOjpwYWludCk6CisgICAgICAgIChXZWJDb3JlOjpTY3JvbGxiYXJUaGVtZVFTdHlsZTo6
aGl0VGVzdCk6CisgICAgICAgIChXZWJDb3JlOjpTY3JvbGxiYXJUaGVtZVFTdHlsZTo6c2hvdWxk
Q2VudGVyT25UaHVtYik6CisgICAgICAgIChXZWJDb3JlOjpTY3JvbGxiYXJUaGVtZVFTdHlsZTo6
aW52YWxpZGF0ZVBhcnQpOgorICAgICAgICAoV2ViQ29yZTo6U2Nyb2xsYmFyVGhlbWVRU3R5bGU6
OnNjcm9sbGJhclRoaWNrbmVzcyk6CisgICAgICAgIChXZWJDb3JlOjpTY3JvbGxiYXJUaGVtZVFT
dHlsZTo6dGh1bWJQb3NpdGlvbik6CisgICAgICAgIChXZWJDb3JlOjpTY3JvbGxiYXJUaGVtZVFT
dHlsZTo6dGh1bWJMZW5ndGgpOgorICAgICAgICAoV2ViQ29yZTo6U2Nyb2xsYmFyVGhlbWVRU3R5
bGU6OnRyYWNrUG9zaXRpb24pOgorICAgICAgICAoV2ViQ29yZTo6U2Nyb2xsYmFyVGhlbWVRU3R5
bGU6OnRyYWNrTGVuZ3RoKToKKyAgICAgICAgKFdlYkNvcmU6OlNjcm9sbGJhclRoZW1lUVN0eWxl
OjpwYWludFNjcm9sbENvcm5lcik6CisgICAgICAgICogcGxhdGZvcm0vcXQvU2Nyb2xsYmFyVGhl
bWVRU3R5bGUuaDogUmVuYW1lZCBmcm9tIFNvdXJjZS9XZWJLaXQvcXQvV2ViQ29yZVN1cHBvcnQv
U2Nyb2xsYmFyVGhlbWVRU3R5bGUuaC4KKyAgICAgICAgKFdlYkNvcmUpOgorICAgICAgICAoU2Ny
b2xsYmFyVGhlbWVRU3R5bGUpOgorICAgICAgICAoV2ViQ29yZTo6U2Nyb2xsYmFyVGhlbWVRU3R5
bGU6OnN0eWxlSW50ZXJmYWNlKToKKwogMjAxMi0wOS0yNiAgWmFuIERvYmVyc2VrICA8emFuZG9i
ZXJzZWtAZ21haWwuY29tPgogCiAgICAgICAgIFtHVEtdIEVuYWJsZSBzb21lIG9mIHRoZSB1bnN0
YWJsZSBDU1MgZmVhdHVyZXMKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nIGIv
U291cmNlL1dlYktpdC9DaGFuZ2VMb2cKaW5kZXggYTA5ZThkZjBkYzdmN2IxYjcwNTY4OTIwNTVm
MmI0ZTk1Y2FiZWFkZi4uYTU2NTg3ZmI0NjZhOTJiYWQ1N2M0ZjhlOTZiNGYzYzI5MWNjMjBkYSAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYktpdC9D
aGFuZ2VMb2cKQEAgLTEsMyArMSwxNCBAQAorMjAxMi0xMC0wMyAgU2ltb24gSGF1c21hbm4gIDxz
aW1vbi5oYXVzbWFubkBkaWdpYS5jb20+CisKKyAgICAgICAgW1F0XSBNYWtlIFJlbmRlclRoZW1l
UVN0eWxlL1Njcm9sbGJhclRoZW1lUVN0eWxlIGNvbXBpbGUgd2l0aG91dCBRU3R5bGUvUXRXaWRn
ZXRzCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD05ODI2
OAorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIEV4dHJh
Y3RlZCBRU3R5bGUvUVdpZGdldCByZWxhdGVkIGNvZGUgaW50byBhIFFXZWJTdHlsZSBjbGFzcyB0
aGF0IGltcGxlbWVudHMgdGhlIFFTdHlsZUludGVyZmFjZSBpbnRlcmZhY2UuCisKKyAgICAgICAg
KiBXZWJLaXQxLnBybzoKKwogMjAxMi0wOS0yNCAgQXJ2aWQgTmlsc3NvbiAgPGFuaWxzc29uQHJp
bS5jb20+CiAKICAgICAgICAgW0JsYWNrQmVycnldIEFkZCBjb29raWUgZGF0YWJhc2UgQVBJCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L3F0L0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJLaXQvcXQv
Q2hhbmdlTG9nCmluZGV4IDYxMmI4NjdkMjAxNTNiNGIyOTkxMWE1YjU3MTExN2U2ZWVmNmNmMzYu
LjQ3MTM4ODg4N2M0MjljNTEwMGE3MTk2ZmFkMGQ5YWMzY2Q3YzEzYWYgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJLaXQvcXQvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XZWJLaXQvcXQvQ2hhbmdlTG9n
CkBAIC0xLDMgKzEsNTggQEAKKzIwMTItMTAtMDMgIFNpbW9uIEhhdXNtYW5uICA8c2ltb24uaGF1
c21hbm5AZGlnaWEuY29tPgorCisgICAgICAgIFtRdF0gTWFrZSBSZW5kZXJUaGVtZVFTdHlsZS9T
Y3JvbGxiYXJUaGVtZVFTdHlsZSBjb21waWxlIHdpdGhvdXQgUVN0eWxlL1F0V2lkZ2V0cworICAg
ICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9OTgyNjgKKworICAg
ICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBFeHRyYWN0ZWQgUVN0
eWxlL1FXaWRnZXQgcmVsYXRlZCBjb2RlIGludG8gYSBRV2ViU3R5bGUgY2xhc3MgdGhhdCBpbXBs
ZW1lbnRzIHRoZSBRU3R5bGVJbnRlcmZhY2UgaW50ZXJmYWNlLgorCisgICAgICAgICogV2ViQ29y
ZVN1cHBvcnQvSW5pdFdlYkNvcmVRdC5jcHA6CisgICAgICAgIChXZWJDb3JlOjppbml0aWFsaXpl
V2ViQ29yZVF0KToKKyAgICAgICAgKiBXZWJDb3JlU3VwcG9ydC9RV2ViU3R5bGUuY3BwOiBBZGRl
ZC4KKyAgICAgICAgKFdlYktpdCk6CisgICAgICAgIChXZWJLaXQ6OmNvbnZlcnRUb1FTdHlsZVN0
YXRlKToKKyAgICAgICAgKFdlYktpdDo6Y29udmVydFRvUVN0eWxlU3ViQ29udHJvbCk6CisgICAg
ICAgIChXZWJLaXQ6OmluaXRHZW5lcmljU3R5bGVPcHRpb24pOgorICAgICAgICAoV2ViS2l0Ojpp
bml0U3BlY2lmaWNTdHlsZU9wdGlvbik6CisgICAgICAgIChNYXBwZWRTdHlsZU9wdGlvbik6Cisg
ICAgICAgIChXZWJLaXQ6Ok1hcHBlZFN0eWxlT3B0aW9uOjpNYXBwZWRTdHlsZU9wdGlvbik6Cisg
ICAgICAgIChXZWJLaXQ6OmNvbnZlcnRQaXhlbE1ldHJpYyk6CisgICAgICAgIChXZWJLaXQ6OmNv
bnZlcnRUb1FTdHlsZUludGVyZmFjZVN1YkNvbnRyb2wpOgorICAgICAgICAoV2ViS2l0OjpRV2Vi
U3R5bGU6OlFXZWJTdHlsZSk6CisgICAgICAgIChXZWJLaXQ6OlFXZWJTdHlsZTo6flFXZWJTdHls
ZSk6CisgICAgICAgIChXZWJLaXQ6OlFXZWJTdHlsZTo6YnV0dG9uU3ViRWxlbWVudFJlY3QpOgor
ICAgICAgICAoV2ViS2l0OjpRV2ViU3R5bGU6OmZpbmRGcmFtZUxpbmVXaWR0aCk6CisgICAgICAg
IChXZWJLaXQ6OlFXZWJTdHlsZTo6c2ltcGxlUGl4ZWxNZXRyaWMpOgorICAgICAgICAoV2ViS2l0
OjpRV2ViU3R5bGU6OmJ1dHRvbk1hcmdpbik6CisgICAgICAgIChXZWJLaXQ6OlFXZWJTdHlsZTo6
c2xpZGVyTGVuZ3RoKToKKyAgICAgICAgKFdlYktpdDo6UVdlYlN0eWxlOjpzbGlkZXJUaGlja25l
c3MpOgorICAgICAgICAoV2ViS2l0OjpRV2ViU3R5bGU6OnByb2dyZXNzQmFyQ2h1bmtXaWR0aCk6
CisgICAgICAgIChXZWJLaXQ6OlFXZWJTdHlsZTo6Z2V0QnV0dG9uTWV0cmljcyk6CisgICAgICAg
IChXZWJLaXQ6OlFXZWJTdHlsZTo6c2l6ZUZyb21Db250ZW50cyk6CisgICAgICAgIChXZWJLaXQ6
OlFXZWJTdHlsZTo6cGFpbnRCdXR0b24pOgorICAgICAgICAoV2ViS2l0OjpRV2ViU3R5bGU6OnBh
aW50VGV4dEZpZWxkKToKKyAgICAgICAgKFdlYktpdDo6UVdlYlN0eWxlOjpwYWludENvbWJvQm94
KToKKyAgICAgICAgKFdlYktpdDo6UVdlYlN0eWxlOjpwYWludENvbWJvQm94QXJyb3cpOgorICAg
ICAgICAoV2ViS2l0OjpRV2ViU3R5bGU6OnBhaW50U2xpZGVyVHJhY2spOgorICAgICAgICAoV2Vi
S2l0OjpRV2ViU3R5bGU6OnBhaW50U2xpZGVyVGh1bWIpOgorICAgICAgICAoV2ViS2l0OjpRV2Vi
U3R5bGU6OnBhaW50SW5uZXJTcGluQnV0dG9uKToKKyAgICAgICAgKFdlYktpdDo6UVdlYlN0eWxl
OjpwYWludFByb2dyZXNzQmFyKToKKyAgICAgICAgKFdlYktpdDo6UVdlYlN0eWxlOjpzY3JvbGxC
YXJFeHRlbnQpOgorICAgICAgICAoV2ViS2l0OjpRV2ViU3R5bGU6OnNjcm9sbEJhck1pZGRsZUNs
aWNrQWJzb2x1dGVQb3NpdGlvblN0eWxlSGludCk6CisgICAgICAgIChXZWJLaXQ6OlFXZWJTdHls
ZTo6cGFpbnRTY3JvbGxDb3JuZXIpOgorICAgICAgICAoV2ViS2l0OjpRV2ViU3R5bGU6OmhpdFRl
c3RTY3JvbGxCYXIpOgorICAgICAgICAoV2ViS2l0OjpRV2ViU3R5bGU6OnNjcm9sbEJhclN1YkNv
bnRyb2xSZWN0KToKKyAgICAgICAgKFdlYktpdDo6UVdlYlN0eWxlOjpwYWludFNjcm9sbEJhcik6
CisgICAgICAgIChXZWJLaXQ6OlFXZWJTdHlsZTo6d2lkZ2V0Rm9yUGFpbnRlcik6CisgICAgICAg
IChXZWJLaXQ6OlFXZWJTdHlsZTo6aXNWYWxpZCk6CisgICAgICAgIChXZWJLaXQ6OlFXZWJTdHls
ZTo6ZW5zdXJlU3R5bGUpOgorICAgICAgICAqIFdlYkNvcmVTdXBwb3J0L1FXZWJTdHlsZS5oOiBB
ZGRlZC4KKyAgICAgICAgKFdlYkNvcmUpOgorICAgICAgICAoV2ViS2l0KToKKyAgICAgICAgKFFX
ZWJTdHlsZSk6CisgICAgICAgIChXZWJLaXQ6OlFXZWJTdHlsZTo6Y3JlYXRlKToKKwogMjAxMi0w
OS0yNiAgU2ltb24gSGF1c21hbm4gIDxzaW1vbi5oYXVzbWFubkBkaWdpYS5jb20+CiAKICAgICAg
ICAgW1F0XSBSZW1vdmUgUXQgUXVpY2sgMSBzdXBwb3J0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9UYXJnZXQucHJpIGIvU291cmNlL1dlYkNvcmUvVGFyZ2V0LnByaQppbmRleCAyNDdjMjBl
YzVjMzZiYzQ2Y2UyODAwMGY1NDA4OWUwMTkzYWFhZmVjLi40MzZlYWU5MDIzMTg3NzEwODk0MGE3
M2M4N2JkZTA1NjJjZTExYmE5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9UYXJnZXQucHJp
CisrKyBiL1NvdXJjZS9XZWJDb3JlL1RhcmdldC5wcmkKQEAgLTIyMjksOCArMjIyOSwxMSBAQCBI
RUFERVJTICs9IFwKICAgICBwbGF0Zm9ybS9xdC9DbGlwYm9hcmRRdC5oIFwKICAgICBwbGF0Zm9y
bS9xdC9Db29raWVKYXJRdC5oIFwKICAgICBwbGF0Zm9ybS9xdC9RV2ViUGFnZUNsaWVudC5oIFwK
KyAgICBwbGF0Zm9ybS9xdC9RU3R5bGVJbnRlcmZhY2UuaCBcCisgICAgcGxhdGZvcm0vcXQvUmVu
ZGVyVGhlbWVRU3R5bGUuaCBcCiAgICAgcGxhdGZvcm0vcXQvUmVuZGVyVGhlbWVRdC5oIFwKICAg
ICBwbGF0Zm9ybS9xdC9SZW5kZXJUaGVtZVF0TW9iaWxlLmggXAorICAgIHBsYXRmb3JtL3F0L1Nj
cm9sbGJhclRoZW1lUVN0eWxlLmggXAogICAgIHBsYXRmb3JtL3F0L1VzZXJBZ2VudFF0LmggXAog
ICAgIHBsYXRmb3JtL1Njcm9sbGFibGVBcmVhLmggXAogICAgIHBsYXRmb3JtL1Njcm9sbEFuaW1h
dG9yLmggXApAQCAtMjgwMSw4ICsyODA0LDExIEBAIFNPVVJDRVMgKz0gXAogICAgIHBsYXRmb3Jt
L3F0L1Bhc3RlYm9hcmRRdC5jcHAgXAogICAgIHBsYXRmb3JtL3F0L1BsYXRmb3JtS2V5Ym9hcmRF
dmVudFF0LmNwcCBcCiAgICAgcGxhdGZvcm0vcXQvUGxhdGZvcm1TY3JlZW5RdC5jcHAgXAorICAg
IHBsYXRmb3JtL3F0L1FTdHlsZUludGVyZmFjZS5jcHAgXAorICAgIHBsYXRmb3JtL3F0L1JlbmRl
clRoZW1lUVN0eWxlLmNwcCBcCiAgICAgcGxhdGZvcm0vcXQvUmVuZGVyVGhlbWVRdC5jcHAgXAog
ICAgIHBsYXRmb3JtL3F0L1JlbmRlclRoZW1lUXRNb2JpbGUuY3BwIFwKKyAgICBwbGF0Zm9ybS9x
dC9TY3JvbGxiYXJUaGVtZVFTdHlsZS5jcHAgXAogICAgIHBsYXRmb3JtL3F0L1Njcm9sbGJhclRo
ZW1lUXQuY3BwIFwKICAgICBwbGF0Zm9ybS9xdC9TY3JvbGxWaWV3UXQuY3BwIFwKICAgICBwbGF0
Zm9ybS9xdC9TaGFyZWRUaW1lclF0LmNwcCBcCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9xdC9RU3R5bGVJbnRlcmZhY2UuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
cXQvUVN0eWxlSW50ZXJmYWNlLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5mY2Q2ZTUyZTBlZTQ5Njk1M2Y1ZTg1
YTViYWE4YzhhM2M4ZGUyMmY0Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vcXQvUVN0eWxlSW50ZXJmYWNlLmNwcApAQCAtMCwwICsxLDQ2IEBACisvKgorICogVGhp
cyBmaWxlIGlzIHBhcnQgb2YgdGhlIHRoZW1lIGltcGxlbWVudGF0aW9uIGZvciBmb3JtIGNvbnRy
b2xzIGluIFdlYkNvcmUuCisgKgorICogQ29weXJpZ2h0IChDKSAyMDEyIERpZ2lhIFBsYyBhbmQv
b3IgaXRzIHN1YnNpZGlhcnkoLWllcykuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTEtMjAxMiBOb2tp
YSBDb3Jwb3JhdGlvbiBhbmQvb3IgaXRzIHN1YnNpZGlhcnkoLWllcykuCisgKgorICogVGhpcyBs
aWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgor
ICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQ
dWJsaWMKKyAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5k
YXRpb247IGVpdGhlcgorICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBv
cHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmli
dXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQg
QU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1F
UkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0
aGUgR05VCisgKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWls
cy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGli
cmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsg
c2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bworICogdGhlIEZyZWUg
U29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9v
ciwKKyAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgorICoKKyAqLworCisjaW5jbHVkZSAi
Y29uZmlnLmgiCisjaW5jbHVkZSAiUVN0eWxlSW50ZXJmYWNlLmgiCisKKyNpbmNsdWRlICJRV2Vi
UGFnZUNsaWVudC5oIgorI2luY2x1ZGUgPENocm9tZS5oPgorI2luY2x1ZGUgPENocm9tZUNsaWVu
dC5oPgorI2luY2x1ZGUgPFBhZ2UuaD4KKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitRU3R5bGUq
IFFTdHlsZUludGVyZmFjZTo6c3R5bGVGb3JQYWdlKFBhZ2UqIHBhZ2UpCit7CisgICAgaWYgKCFw
YWdlKQorICAgICAgICByZXR1cm4gMDsKKyAgICBRV2ViUGFnZUNsaWVudCogcGFnZUNsaWVudCA9
IHBhZ2UtPmNocm9tZSgpLT5jbGllbnQoKS0+cGxhdGZvcm1QYWdlQ2xpZW50KCk7CisKKyAgICBp
ZiAoIXBhZ2VDbGllbnQpCisgICAgICAgIHJldHVybiAwOworCisgICAgcmV0dXJuIHBhZ2VDbGll
bnQtPnN0eWxlKCk7Cit9CisKK30KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L3F0L1FTdHlsZUludGVyZmFjZS5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vcXQvUVN0eWxl
SW50ZXJmYWNlLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uZTIxNTg4ODZjMjE0MzVlMTc4YmZhNzk0NDQxNDVjYTFk
ZTdmMGYwNQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3F0L1FT
dHlsZUludGVyZmFjZS5oCkBAIC0wLDAgKzEsMjA1IEBACisvKgorICogVGhpcyBmaWxlIGlzIHBh
cnQgb2YgdGhlIHRoZW1lIGltcGxlbWVudGF0aW9uIGZvciBmb3JtIGNvbnRyb2xzIGluIFdlYkNv
cmUuCisgKgorICogQ29weXJpZ2h0IChDKSAyMDEyIERpZ2lhIFBsYyBhbmQvb3IgaXRzIHN1YnNp
ZGlhcnkoLWllcykuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTEtMjAxMiBOb2tpYSBDb3Jwb3JhdGlv
biBhbmQvb3IgaXRzIHN1YnNpZGlhcnkoLWllcykuCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGZy
ZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0
IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAqIExp
Y2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhl
cgorICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBs
YXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUg
aG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZ
OyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElU
WSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiBM
aWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZ
b3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFs
IFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxl
IENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bworICogdGhlIEZyZWUgU29mdHdhcmUgRm91
bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKKyAqIEJvc3Rv
biwgTUEgMDIxMTAtMTMwMSwgVVNBLgorICoKKyAqLworI2lmbmRlZiBRU3R5bGVJbnRlcmZhY2Vf
aAorI2RlZmluZSBRU3R5bGVJbnRlcmZhY2VfaAorCisjaW5jbHVkZSA8UVBhbGV0dGU+CisjaW5j
bHVkZSA8UVJlY3Q+CisKK1FUX0JFR0lOX05BTUVTUEFDRQorY2xhc3MgUVN0eWxlOworUVRfRU5E
X05BTUVTUEFDRQorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK2NsYXNzIFBhZ2U7CitjbGFzcyBR
U3R5bGVJbnRlcmZhY2VPcHRpb247CisKK2NsYXNzIFFTdHlsZUludGVyZmFjZSB7CitwdWJsaWM6
CisgICAgZW51bSBCdXR0b25TdWJFbGVtZW50IHsKKyAgICAgICAgUHVzaEJ1dHRvbkxheW91dEl0
ZW0sCisgICAgICAgIFB1c2hCdXR0b25Db250ZW50cworICAgIH07CisKKyNkZWZpbmUgRk9SX0VB
Q0hfTUFQUEVEX1NUQVRFKEYsIFNFUEFSQVRPUikgXAorICAgIEYoU3RhdGVfTm9uZSwgMHgwMDAw
MDAwMCkgU0VQQVJBVE9SIFwKKyAgICBGKFN0YXRlX0VuYWJsZWQsIDB4MDAwMDAwMDEpIFNFUEFS
QVRPUiBcCisgICAgRihTdGF0ZV9SYWlzZWQsIDB4MDAwMDAwMDIpIFNFUEFSQVRPUiBcCisgICAg
RihTdGF0ZV9TdW5rZW4sIDB4MDAwMDAwMDQpIFNFUEFSQVRPUiBcCisgICAgRihTdGF0ZV9PZmYs
IDB4MDAwMDAwMDgpIFNFUEFSQVRPUiBcCisgICAgRihTdGF0ZV9Ob0NoYW5nZSwgMHgwMDAwMDAx
MCkgU0VQQVJBVE9SIFwKKyAgICBGKFN0YXRlX09uLCAweDAwMDAwMDIwKSBTRVBBUkFUT1IgXAor
ICAgIEYoU3RhdGVfRG93bkFycm93LCAweDAwMDAwMDQwKSBTRVBBUkFUT1IgXAorICAgIEYoU3Rh
dGVfSG9yaXpvbnRhbCwgMHgwMDAwMDA4MCkgU0VQQVJBVE9SIFwKKyAgICBGKFN0YXRlX0hhc0Zv
Y3VzLCAweDAwMDAwMTAwKSBTRVBBUkFUT1IgXAorICAgIEYoU3RhdGVfVG9wLCAweDAwMDAwMjAw
KSBTRVBBUkFUT1IgXAorICAgIEYoU3RhdGVfQm90dG9tLCAweDAwMDAwNDAwKSBTRVBBUkFUT1Ig
XAorICAgIEYoU3RhdGVfRm9jdXNBdEJvcmRlciwgMHgwMDAwMDgwMCkgU0VQQVJBVE9SIFwKKyAg
ICBGKFN0YXRlX0F1dG9SYWlzZSwgMHgwMDAwMTAwMCkgU0VQQVJBVE9SIFwKKyAgICBGKFN0YXRl
X01vdXNlT3ZlciwgMHgwMDAwMjAwMCkgU0VQQVJBVE9SIFwKKyAgICBGKFN0YXRlX1VwQXJyb3cs
IDB4MDAwMDQwMDApIFNFUEFSQVRPUiBcCisgICAgRihTdGF0ZV9TZWxlY3RlZCwgMHgwMDAwODAw
MCkgU0VQQVJBVE9SIFwKKyAgICBGKFN0YXRlX0FjdGl2ZSwgMHgwMDAxMDAwMCkgU0VQQVJBVE9S
IFwKKyAgICBGKFN0YXRlX1dpbmRvdywgMHgwMDAyMDAwMCkgU0VQQVJBVE9SIFwKKyAgICBGKFN0
YXRlX09wZW4sIDB4MDAwNDAwMDApIFNFUEFSQVRPUiBcCisgICAgRihTdGF0ZV9DaGlsZHJlbiwg
MHgwMDA4MDAwMCkgU0VQQVJBVE9SIFwKKyAgICBGKFN0YXRlX0l0ZW0sIDB4MDAxMDAwMDApIFNF
UEFSQVRPUiBcCisgICAgRihTdGF0ZV9TaWJsaW5nLCAweDAwMjAwMDAwKSBTRVBBUkFUT1IgXAor
ICAgIEYoU3RhdGVfRWRpdGluZywgMHgwMDQwMDAwMCkgU0VQQVJBVE9SIFwKKyAgICBGKFN0YXRl
X0tleWJvYXJkRm9jdXNDaGFuZ2UsIDB4MDA4MDAwMDApIFNFUEFSQVRPUiBcCisgICAgRihTdGF0
ZV9SZWFkT25seSwgMHgwMjAwMDAwMCkgU0VQQVJBVE9SIFwKKyAgICBGKFN0YXRlX1NtYWxsLCAw
eDA0MDAwMDAwKSBTRVBBUkFUT1IgXAorICAgIEYoU3RhdGVfTWluaSwgMHgwODAwMDAwKQorCisj
ZGVmaW5lIENPTU1BICwKKyNkZWZpbmUgU0VNSUNPTE9OIDsKKyNkZWZpbmUgREVGSU5FX01BUFBF
RF9TVEFURShOYW1lLCBWYWx1ZSkgXAorICAgIE5hbWUgPSBWYWx1ZQorCisgICAgLy8gIyMjIFJl
bW92ZSB1bnVzZWQgc3RhdGVzLgorICAgIGVudW0gU3RhdGVGbGFnIHsKKyAgICAgICAgRk9SX0VB
Q0hfTUFQUEVEX1NUQVRFKERFRklORV9NQVBQRURfU1RBVEUsIENPTU1BKQorICAgIH07CisgICAg
UV9ERUNMQVJFX0ZMQUdTKFN0YXRlLCBTdGF0ZUZsYWcpCisKKyNkZWZpbmUgRk9SX0VBQ0hfTUFQ
UEVEX01FVFJJQyhGLCBTRVBBUkFUT1IpIFwKKyAgICBGKFBNX0J1dHRvbk1hcmdpbikgU0VQQVJB
VE9SIFwKKyAgICBGKFBNX0RlZmF1bHRGcmFtZVdpZHRoKSBTRVBBUkFUT1IgXAorICAgIEYoUE1f
SW5kaWNhdG9yV2lkdGgpIFNFUEFSQVRPUiBcCisgICAgRihQTV9FeGNsdXNpdmVJbmRpY2F0b3JX
aWR0aCkgU0VQQVJBVE9SIFwKKyAgICBGKFBNX0J1dHRvbkljb25TaXplKQorCisjZGVmaW5lIERF
RklORV9NRVRSSUMoRikgRgorCisgICAgZW51bSBQaXhlbE1ldHJpYyB7CisgICAgICAgIEZPUl9F
QUNIX01BUFBFRF9NRVRSSUMoREVGSU5FX01FVFJJQywgQ09NTUEpCisgICAgfTsKKworICAgIGVu
dW0gQ29udGVudHNUeXBlIHsKKyAgICAgICAgQ1RfQ29tYm9Cb3gsCisgICAgICAgIENUX1B1c2hC
dXR0b24KKyAgICB9OworCisjZGVmaW5lIEZPUl9FQUNIX1NVQkNPTlRST0woRiwgU0VQQVJBVE9S
KSBcCisgICAgRihTQ19Ob25lLCAweDAwMDAwMDAwKSBTRVBBUkFUT1IgXAorICAgIEYoU0NfU2Ny
b2xsQmFyQWRkTGluZSwgMHgwMDAwMDAwMSkgU0VQQVJBVE9SIFwKKyAgICBGKFNDX1Njcm9sbEJh
clN1YkxpbmUsIDB4MDAwMDAwMDIpIFNFUEFSQVRPUiBcCisgICAgRihTQ19TY3JvbGxCYXJBZGRQ
YWdlLCAweDAwMDAwMDA0KSBTRVBBUkFUT1IgXAorICAgIEYoU0NfU2Nyb2xsQmFyU3ViUGFnZSwg
MHgwMDAwMDAwOCkgU0VQQVJBVE9SIFwKKyAgICBGKFNDX1Njcm9sbEJhckZpcnN0LCAweDAwMDAw
MDEwKSBTRVBBUkFUT1IgXAorICAgIEYoU0NfU2Nyb2xsQmFyTGFzdCwgMHgwMDAwMDAyMCkgU0VQ
QVJBVE9SIFwKKyAgICBGKFNDX1Njcm9sbEJhclNsaWRlciwgMHgwMDAwMDA0MCkgU0VQQVJBVE9S
IFwKKyAgICBGKFNDX1Njcm9sbEJhckdyb292ZSwgMHgwMDAwMDA4MCkKKworI2RlZmluZSBERUZJ
TkVfU1VCQ09OVFJPTChGLCBWYWx1ZSkgRgorCisgICAgZW51bSBTdWJDb250cm9sIHsKKyAgICAg
ICAgRk9SX0VBQ0hfU1VCQ09OVFJPTChERUZJTkVfU1VCQ09OVFJPTCwgQ09NTUEpCisgICAgfTsK
KworICAgIHZpcnR1YWwgflFTdHlsZUludGVyZmFjZSgpIHsgfQorCisgICAgdmlydHVhbCBRUmVj
dCBidXR0b25TdWJFbGVtZW50UmVjdChCdXR0b25TdWJFbGVtZW50IGJ1dHRvbkVsZW1lbnQsIFN0
YXRlLCBjb25zdCBRUmVjdCYgb3JpZ2luYWxSZWN0KSBjb25zdCA9IDA7CisKKyAgICB2aXJ0dWFs
IGludCBmaW5kRnJhbWVMaW5lV2lkdGgoKSBjb25zdCA9IDA7CisgICAgdmlydHVhbCBpbnQgc2lt
cGxlUGl4ZWxNZXRyaWMoUGl4ZWxNZXRyaWMsIFN0YXRlID0gU3RhdGVfTm9uZSwgUU9iamVjdCog
d2lkZ2V0ID0gMCkgY29uc3QgPSAwOworICAgIHZpcnR1YWwgaW50IGJ1dHRvbk1hcmdpbihTdGF0
ZSwgY29uc3QgUVJlY3QmIG9yaWdpbmFsUmVjdCkgY29uc3QgPSAwOworICAgIHZpcnR1YWwgaW50
IHNsaWRlckxlbmd0aChRdDo6T3JpZW50YXRpb24pIGNvbnN0ID0gMDsKKyAgICB2aXJ0dWFsIGlu
dCBzbGlkZXJUaGlja25lc3MoUXQ6Ok9yaWVudGF0aW9uKSBjb25zdCA9IDA7CisgICAgdmlydHVh
bCBpbnQgcHJvZ3Jlc3NCYXJDaHVua1dpZHRoKGNvbnN0IFFTaXplJikgY29uc3QgPSAwOworICAg
IHZpcnR1YWwgdm9pZCBnZXRCdXR0b25NZXRyaWNzKFFTdHJpbmcqIGJ1dHRvbkZvbnRGYW1pbHks
IGludCogYnV0dG9uRm9udFBpeGVsU2l6ZSkgY29uc3QgPSAwOworCisgICAgdmlydHVhbCBRU2l6
ZSBzaXplRnJvbUNvbnRlbnRzKENvbnRlbnRzVHlwZSwgU3RhdGUsIGNvbnN0IFFTaXplJiBjb250
ZW50c1NpemUpIGNvbnN0ID0gMDsKKworICAgIGVudW0gQnV0dG9uVHlwZSB7CisgICAgICAgIFB1
c2hCdXR0b24sCisgICAgICAgIFJhZGlvQnV0dG9uLAorICAgICAgICBDaGVja0JveAorICAgIH07
CisKKyAgICB2aXJ0dWFsIHZvaWQgcGFpbnRCdXR0b24oUVBhaW50ZXIqLCBCdXR0b25UeXBlLCBj
b25zdCBRU3R5bGVJbnRlcmZhY2VPcHRpb24mLCBRT2JqZWN0ICp3aWRnZXQpID0gMDsKKyAgICB2
aXJ0dWFsIHZvaWQgcGFpbnRUZXh0RmllbGQoUVBhaW50ZXIqLCBjb25zdCBRU3R5bGVJbnRlcmZh
Y2VPcHRpb24mLCBRT2JqZWN0KiB3aWRnZXRPYmopID0gMDsKKyAgICB2aXJ0dWFsIHZvaWQgcGFp
bnRDb21ib0JveChRUGFpbnRlciosIGNvbnN0IFFTdHlsZUludGVyZmFjZU9wdGlvbiYsIFFPYmpl
Y3QgKndpZGdldE9iaikgPSAwOworICAgIHZpcnR1YWwgdm9pZCBwYWludENvbWJvQm94QXJyb3co
UVBhaW50ZXIqLCBjb25zdCBRU3R5bGVJbnRlcmZhY2VPcHRpb24mLCBRT2JqZWN0ICp3aWRnZXRP
YmopID0gMDsKKworICAgIHZpcnR1YWwgdm9pZCBwYWludFNsaWRlclRyYWNrKFFQYWludGVyKiwg
Y29uc3QgUVN0eWxlSW50ZXJmYWNlT3B0aW9uJiwgUU9iamVjdCAqd2lkZ2V0T2JqKSA9IDA7Cisg
ICAgdmlydHVhbCB2b2lkIHBhaW50U2xpZGVyVGh1bWIoUVBhaW50ZXIqLCBjb25zdCBRU3R5bGVJ
bnRlcmZhY2VPcHRpb24mLCBRT2JqZWN0ICp3aWRnZXRPYmopID0gMDsKKyAgICB2aXJ0dWFsIHZv
aWQgcGFpbnRJbm5lclNwaW5CdXR0b24oUVBhaW50ZXIqLCBjb25zdCBRU3R5bGVJbnRlcmZhY2VP
cHRpb24mLCBib29sIHNwaW5Cb3hVcCwgUU9iamVjdCogd2lkZ2V0T2JqKSA9IDA7CisgICAgdmly
dHVhbCB2b2lkIHBhaW50UHJvZ3Jlc3NCYXIoUVBhaW50ZXIqLCBjb25zdCBRU3R5bGVJbnRlcmZh
Y2VPcHRpb24mLCBkb3VibGUgcHJvZ3Jlc3MsIGRvdWJsZSBhbmltYXRpb25Qcm9ncmVzcywgUU9i
amVjdCogd2lkZ2V0T2JqKSA9IDA7CisKKyAgICB2aXJ0dWFsIGludCBzY3JvbGxCYXJFeHRlbnQo
Ym9vbCBtaW5pKSA9IDA7CisgICAgdmlydHVhbCBib29sIHNjcm9sbEJhck1pZGRsZUNsaWNrQWJz
b2x1dGVQb3NpdGlvblN0eWxlSGludCgpIGNvbnN0ID0gMDsKKyAgICB2aXJ0dWFsIHZvaWQgcGFp
bnRTY3JvbGxDb3JuZXIoUVBhaW50ZXIqLCBjb25zdCBRUmVjdCYsIFFPYmplY3QqIHdpZGdldE9i
aikgPSAwOworCisgICAgdmlydHVhbCBTdWJDb250cm9sIGhpdFRlc3RTY3JvbGxCYXIoY29uc3Qg
UVN0eWxlSW50ZXJmYWNlT3B0aW9uJiwgY29uc3QgUVBvaW50JiBwb3MpID0gMDsKKyAgICB2aXJ0
dWFsIFFSZWN0IHNjcm9sbEJhclN1YkNvbnRyb2xSZWN0KGNvbnN0IFFTdHlsZUludGVyZmFjZU9w
dGlvbiYsIFN1YkNvbnRyb2wpID0gMDsKKyAgICB2aXJ0dWFsIHZvaWQgcGFpbnRTY3JvbGxCYXIo
UVBhaW50ZXIqLCBjb25zdCBRU3R5bGVJbnRlcmZhY2VPcHRpb24mLCBRT2JqZWN0KiB3aWRnZXRP
YmopID0gMDsKKworICAgIHZpcnR1YWwgUU9iamVjdCogd2lkZ2V0Rm9yUGFpbnRlcihRUGFpbnRl
ciopID0gMDsKKworICAgIHZpcnR1YWwgYm9vbCBpc1ZhbGlkKCkgY29uc3QgPSAwOworCisgICAg
c3RhdGljIFFTdHlsZSogc3R5bGVGb3JQYWdlKFBhZ2UqKTsKK307CisKK1FfREVDTEFSRV9PUEVS
QVRPUlNfRk9SX0ZMQUdTKFFTdHlsZUludGVyZmFjZTo6U3RhdGUpCisKK3N0cnVjdCBRU3R5bGVJ
bnRlcmZhY2VPcHRpb24geworICAgIFFTdHlsZUludGVyZmFjZU9wdGlvbigpCisgICAgICAgIDog
c3RhdGUoUVN0eWxlSW50ZXJmYWNlOjpTdGF0ZV9Ob25lKQorICAgICAgICAsIGRpcmVjdGlvbihR
dDo6TGF5b3V0RGlyZWN0aW9uQXV0bykKKyAgICB7CisgICAgICAgIHNsaWRlci5vcmllbnRhdGlv
biA9IFF0OjpIb3Jpem9udGFsOworICAgICAgICBzbGlkZXIudXBzaWRlRG93biA9IGZhbHNlOwor
ICAgICAgICBzbGlkZXIubWluaW11bSA9IDA7CisgICAgICAgIHNsaWRlci5tYXhpbXVtID0gMDsK
KyAgICAgICAgc2xpZGVyLnBvc2l0aW9uID0gMDsKKyAgICAgICAgc2xpZGVyLnZhbHVlID0gMDsK
KyAgICAgICAgc2xpZGVyLnNpbmdsZVN0ZXAgPSAwOworICAgICAgICBzbGlkZXIucGFnZVN0ZXAg
PSAwOworICAgICAgICBzbGlkZXIuYWN0aXZlU3ViQ29udHJvbHMgPSBRU3R5bGVJbnRlcmZhY2U6
OlNDX05vbmU7CisgICAgfQorCisgICAgUVN0eWxlSW50ZXJmYWNlOjpTdGF0ZSBzdGF0ZTsKKyAg
ICBRUmVjdCByZWN0OworICAgIFF0OjpMYXlvdXREaXJlY3Rpb24gZGlyZWN0aW9uOworICAgIFFQ
YWxldHRlIHBhbGV0dGU7CisKKyAgICAvLyBTbGlkZXIgZmVhdHVyZXMKKyAgICBzdHJ1Y3Qgewor
ICAgICAgICBRdDo6T3JpZW50YXRpb24gb3JpZW50YXRpb247CisgICAgICAgIGJvb2wgdXBzaWRl
RG93bjsKKyAgICAgICAgaW50IG1pbmltdW07CisgICAgICAgIGludCBtYXhpbXVtOworICAgICAg
ICBpbnQgcG9zaXRpb247CisgICAgICAgIGludCB2YWx1ZTsKKyAgICAgICAgaW50IHNpbmdsZVN0
ZXA7CisgICAgICAgIGludCBwYWdlU3RlcDsKKyAgICAgICAgUVN0eWxlSW50ZXJmYWNlOjpTdWJD
b250cm9sIGFjdGl2ZVN1YkNvbnRyb2xzOworICAgIH0gc2xpZGVyOworfTsKKworfQorCisjZW5k
aWYgLy8gUVN0eWxlSW50ZXJmYWNlX2gKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL3F0L1JlbmRlclRoZW1lUVN0eWxlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3F0
L1JlbmRlclRoZW1lUVN0eWxlLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi43ZjM0OGE5MTgzYjAzMTQ1MmEzNjVh
NDI0NDNlN2IwNTRmODdiZjYwCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vcXQvUmVuZGVyVGhlbWVRU3R5bGUuY3BwCkBAIC0wLDAgKzEsNjIyIEBACisvKgorICog
VGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIFdlYktpdCBwcm9qZWN0LgorICoKKyAqIENvcHlyaWdo
dCAoQykgMjAwOC0yMDEyIE5va2lhIENvcnBvcmF0aW9uIGFuZC9vciBpdHMgc3Vic2lkaWFyeSgt
aWVzKQorICoKKyAqIENvcHlyaWdodCAoQykgMjAwNiBaYWNrIFJ1c2luIDx6YWNrQGtkZS5vcmc+
CisgKiAgICAgICAgICAgICAgIDIwMDYgRGlyayBNdWVsbGVyIDxtdWVsbGVyQGtkZS5vcmc+Cisg
KiAgICAgICAgICAgICAgIDIwMDYgTmlrb2xhcyBaaW1tZXJtYW5uIDx6aW1tZXJtYW5uQGtkZS5v
cmc+CisgKiBDb3B5cmlnaHQgKEMpIDIwMDggSG9sZ2VyIEhhbnMgUGV0ZXIgRnJleXRoZXIKKyAq
CisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNv
ZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRl
ciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNl
IGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAq
IHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIg
dmVyc2lvbi4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUg
dGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0
aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3Ig
RklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogTGlicmFy
eSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNo
b3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJs
aWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZ
SU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRp
b24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCisgKiBCb3N0b24sIE1B
IDAyMTEwLTEzMDEsIFVTQS4KKyAqCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1
ZGUgIlJlbmRlclRoZW1lUVN0eWxlLmgiCisKKyNpbmNsdWRlICJDU1NGb250U2VsZWN0b3IuaCIK
KyNpbmNsdWRlICJDU1NWYWx1ZUtleXdvcmRzLmgiCisjaW5jbHVkZSAiQ2hyb21lLmgiCisjaW5j
bHVkZSAiQ2hyb21lQ2xpZW50LmgiCisjaW5jbHVkZSAiQ29sb3IuaCIKKyNpbmNsdWRlICJEb2N1
bWVudC5oIgorI2luY2x1ZGUgIkZvbnQuaCIKKyNpbmNsdWRlICJGb250U2VsZWN0b3IuaCIKKyNp
bmNsdWRlICJHcmFwaGljc0NvbnRleHQuaCIKKyNpbmNsdWRlICJIVE1MSW5wdXRFbGVtZW50Lmgi
CisjaW5jbHVkZSAiSFRNTE5hbWVzLmgiCisjaW5jbHVkZSAiTG9jYWxpemVkU3RyaW5ncy5oIgor
I2luY2x1ZGUgIk5vdEltcGxlbWVudGVkLmgiCisjaW5jbHVkZSAiUGFnZS5oIgorI2luY2x1ZGUg
IlBhaW50SW5mby5oIgorI2luY2x1ZGUgIlFXZWJQYWdlQ2xpZW50LmgiCisjaW5jbHVkZSAiUmVu
ZGVyQm94LmgiCisjaWYgRU5BQkxFKFBST0dSRVNTX0VMRU1FTlQpCisjaW5jbHVkZSAiUmVuZGVy
UHJvZ3Jlc3MuaCIKKyNlbmRpZgorI2luY2x1ZGUgIlJlbmRlclNsaWRlci5oIgorI2luY2x1ZGUg
IlNjcm9sbGJhclRoZW1lUVN0eWxlLmgiCisjaW5jbHVkZSAiU2xpZGVyVGh1bWJFbGVtZW50Lmgi
CisjaW5jbHVkZSAiU3R5bGVSZXNvbHZlci5oIgorI2luY2x1ZGUgIlVzZXJBZ2VudFN0eWxlU2hl
ZXRzLmgiCisKKyNpbmNsdWRlIDxRUGFpbnRlcj4KKworbmFtZXNwYWNlIFdlYkNvcmUgeworCit1
c2luZyBuYW1lc3BhY2UgSFRNTE5hbWVzOworCitRU2hhcmVkUG9pbnRlcjxTdHlsZVBhaW50ZXI+
IFJlbmRlclRoZW1lUVN0eWxlOjpnZXRTdHlsZVBhaW50ZXIoY29uc3QgUGFpbnRJbmZvJiBwYWlu
dEluZm8pCit7CisgICAgcmV0dXJuIFFTaGFyZWRQb2ludGVyPFN0eWxlUGFpbnRlcj4obmV3IFN0
eWxlUGFpbnRlclFTdHlsZSh0aGlzLCBwYWludEluZm8sIC8qUmVuZGVyT2JqZWN0Ki8wKSk7Cit9
CisKK1N0eWxlUGFpbnRlclFTdHlsZTo6U3R5bGVQYWludGVyUVN0eWxlKFJlbmRlclRoZW1lUVN0
eWxlKiB0aGVtZSwgY29uc3QgUGFpbnRJbmZvJiBwYWludEluZm8sIFJlbmRlck9iamVjdCogcmVu
ZGVyT2JqZWN0KQorICAgIDogU3R5bGVQYWludGVyKHRoZW1lLCBwYWludEluZm8pCisgICAgLCBz
dHlsZUludGVyZmFjZSh0aGVtZS0+c3R5bGVJbnRlcmZhY2UoKSkKKyAgICAsIGFwcGVhcmFuY2Uo
Tm9Db250cm9sUGFydCkKK3sKKyAgICBpbml0KHBhaW50SW5mby5jb250ZXh0ID8gcGFpbnRJbmZv
LmNvbnRleHQgOiAwKTsKKyAgICBpZiAocmVuZGVyT2JqZWN0KQorICAgICAgICBhcHBlYXJhbmNl
ID0gdGhlbWUtPmluaXRpYWxpemVDb21tb25RU3R5bGVPcHRpb25zKHN0eWxlT3B0aW9uLCByZW5k
ZXJPYmplY3QpOworfQorCitTdHlsZVBhaW50ZXJRU3R5bGU6OlN0eWxlUGFpbnRlclFTdHlsZShT
Y3JvbGxiYXJUaGVtZVFTdHlsZSogdGhlbWUsIEdyYXBoaWNzQ29udGV4dCogY29udGV4dCkKKyAg
ICA6IFN0eWxlUGFpbnRlcigpCisgICAgLCBzdHlsZUludGVyZmFjZSh0aGVtZS0+c3R5bGVJbnRl
cmZhY2UoKSkKKyAgICAsIGFwcGVhcmFuY2UoTm9Db250cm9sUGFydCkKK3sKKyAgICBpbml0KGNv
bnRleHQpOworfQorCit2b2lkIFN0eWxlUGFpbnRlclFTdHlsZTo6aW5pdChHcmFwaGljc0NvbnRl
eHQqIGNvbnRleHQpCit7CisgICAgcGFpbnRlciA9IHN0YXRpY19jYXN0PFFQYWludGVyKj4oY29u
dGV4dC0+cGxhdGZvcm1Db250ZXh0KCkpOworICAgIHdpZGdldCA9IHN0eWxlSW50ZXJmYWNlLT53
aWRnZXRGb3JQYWludGVyKHBhaW50ZXIpOworCisgICAgaWYgKHdpZGdldCkgeworICAgICAgICBz
dHlsZU9wdGlvbi5wYWxldHRlID0gd2lkZ2V0LT5wcm9wZXJ0eSgicGFsZXR0ZSIpLnZhbHVlPFFQ
YWxldHRlPigpOworICAgICAgICBzdHlsZU9wdGlvbi5yZWN0ID0gd2lkZ2V0LT5wcm9wZXJ0eSgi
cmVjdCIpLnZhbHVlPFFSZWN0PigpOworICAgICAgICBzdHlsZU9wdGlvbi5kaXJlY3Rpb24gPSBz
dGF0aWNfY2FzdDxRdDo6TGF5b3V0RGlyZWN0aW9uPih3aWRnZXQtPnByb3BlcnR5KCJsYXlvdXRE
aXJlY3Rpb24iKS50b0ludCgpKTsKKyAgICB9CisKKyAgICBTdHlsZVBhaW50ZXI6OmluaXQoY29u
dGV4dCk7Cit9CisKK1Bhc3NSZWZQdHI8UmVuZGVyVGhlbWU+IFJlbmRlclRoZW1lUVN0eWxlOjpj
cmVhdGUoUGFnZSogcGFnZSkKK3sKKyAgICByZXR1cm4gYWRvcHRSZWYobmV3IFJlbmRlclRoZW1l
UVN0eWxlKHBhZ2UpKTsKK30KKworc3RhdGljIFF0U3R5bGVGYWN0b3J5RnVuY3Rpb24gc3R5bGVG
YWN0b3J5RnVuY3Rpb247CisKK3ZvaWQgUmVuZGVyVGhlbWVRU3R5bGU6OnNldFN0eWxlRmFjdG9y
eUZ1bmN0aW9uKFF0U3R5bGVGYWN0b3J5RnVuY3Rpb24gZnVuY3Rpb24pCit7CisgICAgc3R5bGVG
YWN0b3J5RnVuY3Rpb24gPSBmdW5jdGlvbjsKK30KKworUXRTdHlsZUZhY3RvcnlGdW5jdGlvbiBS
ZW5kZXJUaGVtZVFTdHlsZTo6c3R5bGVGYWN0b3J5KCkKK3sKKyAgICByZXR1cm4gc3R5bGVGYWN0
b3J5RnVuY3Rpb247Cit9CisKK1JlbmRlclRoZW1lUVN0eWxlOjpSZW5kZXJUaGVtZVFTdHlsZShQ
YWdlKiBwYWdlKQorICAgIDogUmVuZGVyVGhlbWVRdChwYWdlKQorICAgICwgbV9zdHlsZUludGVy
ZmFjZShhZG9wdFB0cihzdHlsZUZhY3RvcnlGdW5jdGlvbihwYWdlKSkpCit7CisgICAgaW50IGJ1
dHRvblBpeGVsU2l6ZSA9IDA7CisgICAgbV9zdHlsZUludGVyZmFjZS0+Z2V0QnV0dG9uTWV0cmlj
cygmbV9idXR0b25Gb250RmFtaWx5LCAmYnV0dG9uUGl4ZWxTaXplKTsKKyNpZmRlZiBRX1dTX01B
QworICAgIG1fYnV0dG9uRm9udFBpeGVsU2l6ZSA9IGJ1dHRvblBpeGVsU2l6ZTsKKyNlbmRpZgor
fQorCitSZW5kZXJUaGVtZVFTdHlsZTo6flJlbmRlclRoZW1lUVN0eWxlKCkKK3sKK30KKwordm9p
ZCBSZW5kZXJUaGVtZVFTdHlsZTo6c2V0UGFsZXR0ZUZyb21QYWdlQ2xpZW50SWZFeGlzdHMoUVBh
bGV0dGUmIHBhbGV0dGUpIGNvbnN0Cit7CisgICAgaWYgKCFtX3BhZ2UpCisgICAgICAgIHJldHVy
bjsKKworICAgIEFTU0VSVChtX3BhZ2UtPmNocm9tZSgpKTsKKyAgICBDaHJvbWVDbGllbnQqIGNo
cm9tZUNsaWVudCA9IG1fcGFnZS0+Y2hyb21lKCktPmNsaWVudCgpOworICAgIGlmICghY2hyb21l
Q2xpZW50KQorICAgICAgICByZXR1cm47CisKKyAgICBpZiAoUVdlYlBhZ2VDbGllbnQqIHBhZ2VD
bGllbnQgPSBjaHJvbWVDbGllbnQtPnBsYXRmb3JtUGFnZUNsaWVudCgpKQorICAgICAgICBwYWxl
dHRlID0gcGFnZUNsaWVudC0+cGFsZXR0ZSgpOworfQorCitRUmVjdCBSZW5kZXJUaGVtZVFTdHls
ZTo6aW5mbGF0ZUJ1dHRvblJlY3QoY29uc3QgUVJlY3QmIG9yaWdpbmFsUmVjdCkgY29uc3QKK3sK
KyAgICBRUmVjdCBsYXlvdXRSZWN0ID0gbV9zdHlsZUludGVyZmFjZS0+YnV0dG9uU3ViRWxlbWVu
dFJlY3QoUVN0eWxlSW50ZXJmYWNlOjpQdXNoQnV0dG9uTGF5b3V0SXRlbSwgUVN0eWxlSW50ZXJm
YWNlOjpTdGF0ZV9TbWFsbCwgb3JpZ2luYWxSZWN0KTsKKyAgICBpZiAoIWxheW91dFJlY3QuaXNO
dWxsKCkpIHsKKyAgICAgICAgaW50IHBhZGRpbmdMZWZ0ID0gbGF5b3V0UmVjdC5sZWZ0KCkgLSBv
cmlnaW5hbFJlY3QubGVmdCgpOworICAgICAgICBpbnQgcGFkZGluZ1JpZ2h0ID0gb3JpZ2luYWxS
ZWN0LnJpZ2h0KCkgLSBsYXlvdXRSZWN0LnJpZ2h0KCk7CisgICAgICAgIGludCBwYWRkaW5nVG9w
ID0gbGF5b3V0UmVjdC50b3AoKSAtIG9yaWdpbmFsUmVjdC50b3AoKTsKKyAgICAgICAgaW50IHBh
ZGRpbmdCb3R0b20gPSBvcmlnaW5hbFJlY3QuYm90dG9tKCkgLSBsYXlvdXRSZWN0LmJvdHRvbSgp
OworCisgICAgICAgIHJldHVybiBvcmlnaW5hbFJlY3QuYWRqdXN0ZWQoLXBhZGRpbmdMZWZ0LCAt
cGFkZGluZ1RvcCwgcGFkZGluZ1JpZ2h0LCBwYWRkaW5nQm90dG9tKTsKKyAgICB9CisgICAgcmV0
dXJuIG9yaWdpbmFsUmVjdDsKK30KKwordm9pZCBSZW5kZXJUaGVtZVFTdHlsZTo6Y29tcHV0ZVNp
emVCYXNlZE9uU3R5bGUoUmVuZGVyU3R5bGUqIHJlbmRlclN0eWxlKSBjb25zdAoreworICAgIFFT
aXplIHNpemUoMCwgMCk7CisgICAgY29uc3QgUUZvbnRNZXRyaWNzIGZtKHJlbmRlclN0eWxlLT5m
b250KCkuc3ludGhldGljRm9udCgpKTsKKworICAgIHN3aXRjaCAocmVuZGVyU3R5bGUtPmFwcGVh
cmFuY2UoKSkgeworICAgIGNhc2UgVGV4dEFyZWFQYXJ0OgorICAgIGNhc2UgU2VhcmNoRmllbGRQ
YXJ0OgorICAgIGNhc2UgVGV4dEZpZWxkUGFydDogeworICAgICAgICBpbnQgcGFkZGluZyA9IG1f
c3R5bGVJbnRlcmZhY2UtPmZpbmRGcmFtZUxpbmVXaWR0aCgpOworICAgICAgICByZW5kZXJTdHls
ZS0+c2V0UGFkZGluZ0xlZnQoTGVuZ3RoKHBhZGRpbmcsIEZpeGVkKSk7CisgICAgICAgIHJlbmRl
clN0eWxlLT5zZXRQYWRkaW5nUmlnaHQoTGVuZ3RoKHBhZGRpbmcsIEZpeGVkKSk7CisgICAgICAg
IHJlbmRlclN0eWxlLT5zZXRQYWRkaW5nVG9wKExlbmd0aChwYWRkaW5nLCBGaXhlZCkpOworICAg
ICAgICByZW5kZXJTdHlsZS0+c2V0UGFkZGluZ0JvdHRvbShMZW5ndGgocGFkZGluZywgRml4ZWQp
KTsKKyAgICAgICAgYnJlYWs7CisgICAgfQorICAgIGRlZmF1bHQ6CisgICAgICAgIGJyZWFrOwor
ICAgIH0KKyAgICAvLyBJZiB0aGUgd2lkdGggYW5kIGhlaWdodCBhcmUgYm90aCBzcGVjaWZpZWQs
IHRoZW4gd2UgaGF2ZSBub3RoaW5nIHRvIGRvLgorICAgIGlmICghcmVuZGVyU3R5bGUtPndpZHRo
KCkuaXNJbnRyaW5zaWNPckF1dG8oKSAmJiAhcmVuZGVyU3R5bGUtPmhlaWdodCgpLmlzQXV0bygp
KQorICAgICAgICByZXR1cm47CisKKyAgICBzd2l0Y2ggKHJlbmRlclN0eWxlLT5hcHBlYXJhbmNl
KCkpIHsKKyAgICBjYXNlIENoZWNrYm94UGFydDogeworICAgICAgICBpbnQgY2hlY2tCb3hXaWR0
aCA9IG1fc3R5bGVJbnRlcmZhY2UtPnNpbXBsZVBpeGVsTWV0cmljKFFTdHlsZUludGVyZmFjZTo6
UE1fSW5kaWNhdG9yV2lkdGgsIFFTdHlsZUludGVyZmFjZTo6U3RhdGVfU21hbGwpOworICAgICAg
ICBjaGVja0JveFdpZHRoICo9IHJlbmRlclN0eWxlLT5lZmZlY3RpdmVab29tKCk7CisgICAgICAg
IHNpemUgPSBRU2l6ZShjaGVja0JveFdpZHRoLCBjaGVja0JveFdpZHRoKTsKKyAgICAgICAgYnJl
YWs7CisgICAgfQorICAgIGNhc2UgUmFkaW9QYXJ0OiB7CisgICAgICAgIGludCByYWRpb1dpZHRo
ID0gbV9zdHlsZUludGVyZmFjZS0+c2ltcGxlUGl4ZWxNZXRyaWMoUVN0eWxlSW50ZXJmYWNlOjpQ
TV9FeGNsdXNpdmVJbmRpY2F0b3JXaWR0aCwgUVN0eWxlSW50ZXJmYWNlOjpTdGF0ZV9TbWFsbCk7
CisgICAgICAgIHJhZGlvV2lkdGggKj0gcmVuZGVyU3R5bGUtPmVmZmVjdGl2ZVpvb20oKTsKKyAg
ICAgICAgc2l6ZSA9IFFTaXplKHJhZGlvV2lkdGgsIHJhZGlvV2lkdGgpOworICAgICAgICBicmVh
azsKKyAgICB9CisgICAgY2FzZSBQdXNoQnV0dG9uUGFydDoKKyAgICBjYXNlIEJ1dHRvblBhcnQ6
IHsKKyAgICAgICAgUVNpemUgY29udGVudFNpemUgPSBmbS5zaXplKFF0OjpUZXh0U2hvd01uZW1v
bmljLCBRU3RyaW5nOjpmcm9tTGF0aW4xKCJYIikpOworICAgICAgICBRU2l6ZSBwdXNoQnV0dG9u
U2l6ZSA9IG1fc3R5bGVJbnRlcmZhY2UtPnNpemVGcm9tQ29udGVudHMoUVN0eWxlSW50ZXJmYWNl
OjpDVF9QdXNoQnV0dG9uLCBRU3R5bGVJbnRlcmZhY2U6OlN0YXRlX1NtYWxsLCBjb250ZW50U2l6
ZSk7CisgICAgICAgIFFSZWN0IGxheW91dFJlY3QgPSBtX3N0eWxlSW50ZXJmYWNlLT5idXR0b25T
dWJFbGVtZW50UmVjdChRU3R5bGVJbnRlcmZhY2U6OlB1c2hCdXR0b25MYXlvdXRJdGVtLCBRU3R5
bGVJbnRlcmZhY2U6OlN0YXRlX1NtYWxsLCBRUmVjdCgwLCAwLCBwdXNoQnV0dG9uU2l6ZS53aWR0
aCgpLCBwdXNoQnV0dG9uU2l6ZS5oZWlnaHQoKSkpOworCisgICAgICAgIC8vIElmIHRoZSBzdHls
ZSBzdXBwb3J0cyBsYXlvdXQgcmVjdHMgd2UgdXNlIHRoYXQsIGFuZCAgY29tcGVuc2F0ZSBhY2Nv
cmRpbmdseQorICAgICAgICAvLyBpbiBwYWludEJ1dHRvbigpIGJlbG93LgorICAgICAgICBpZiAo
IWxheW91dFJlY3QuaXNOdWxsKCkpCisgICAgICAgICAgICBzaXplLnNldEhlaWdodChsYXlvdXRS
ZWN0LmhlaWdodCgpKTsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgc2l6ZS5zZXRIZWlnaHQo
cHVzaEJ1dHRvblNpemUuaGVpZ2h0KCkpOworCisgICAgICAgIGJyZWFrOworICAgIH0KKyAgICBj
YXNlIE1lbnVsaXN0UGFydDogeworICAgICAgICBpbnQgY29udGVudEhlaWdodCA9IHFNYXgoZm0u
bGluZVNwYWNpbmcoKSwgMTQpICsgMjsKKyAgICAgICAgUVNpemUgbWVudUxpc3RTaXplID0gbV9z
dHlsZUludGVyZmFjZS0+c2l6ZUZyb21Db250ZW50cyhRU3R5bGVJbnRlcmZhY2U6OkNUX0NvbWJv
Qm94LCBRU3R5bGVJbnRlcmZhY2U6OlN0YXRlX1NtYWxsLCBRU2l6ZSgwLCBjb250ZW50SGVpZ2h0
KSk7CisgICAgICAgIHNpemUuc2V0SGVpZ2h0KG1lbnVMaXN0U2l6ZS5oZWlnaHQoKSk7CisgICAg
ICAgIGJyZWFrOworICAgIH0KKyAgICBkZWZhdWx0OgorICAgICAgICBicmVhazsKKyAgICB9CisK
KyAgICAvLyBGSVhNRTogQ2hlY2sgaXMgZmxhd2VkLCBzaW5jZSBpdCBkb2Vzbid0IHRha2UgbWlu
LXdpZHRoL21heC13aWR0aCBpbnRvIGFjY291bnQuCisgICAgaWYgKHJlbmRlclN0eWxlLT53aWR0
aCgpLmlzSW50cmluc2ljT3JBdXRvKCkgJiYgc2l6ZS53aWR0aCgpID4gMCkKKyAgICAgICAgcmVu
ZGVyU3R5bGUtPnNldE1pbldpZHRoKExlbmd0aChzaXplLndpZHRoKCksIEZpeGVkKSk7CisgICAg
aWYgKHJlbmRlclN0eWxlLT5oZWlnaHQoKS5pc0F1dG8oKSAmJiBzaXplLmhlaWdodCgpID4gMCkK
KyAgICAgICAgcmVuZGVyU3R5bGUtPnNldE1pbkhlaWdodChMZW5ndGgoc2l6ZS5oZWlnaHQoKSwg
Rml4ZWQpKTsKK30KKworCisKK3ZvaWQgUmVuZGVyVGhlbWVRU3R5bGU6OmFkanVzdEJ1dHRvblN0
eWxlKFN0eWxlUmVzb2x2ZXIqIHN0eWxlUmVzb2x2ZXIsIFJlbmRlclN0eWxlKiBzdHlsZSwgRWxl
bWVudCopIGNvbnN0Cit7CisgICAgLy8gRGl0Y2ggdGhlIGJvcmRlci4KKyAgICBzdHlsZS0+cmVz
ZXRCb3JkZXIoKTsKKworI2lmZGVmIFFfV1NfTUFDCisgICAgaWYgKHN0eWxlLT5hcHBlYXJhbmNl
KCkgPT0gUHVzaEJ1dHRvblBhcnQpIHsKKyAgICAgICAgLy8gVGhlIE1hYyBwb3J0cyBpZ25vcmUg
dGhlIHNwZWNpZmllZCBoZWlnaHQgZm9yIDxpbnB1dCB0eXBlPSJidXR0b24iPiBlbGVtZW50cwor
ICAgICAgICAvLyB1bmxlc3MgYSBib3JkZXIgYW5kL29yIGJhY2tncm91bmQgQ1NTIHByb3BlcnR5
IGlzIGFsc28gc3BlY2lmaWVkLgorICAgICAgICBzdHlsZS0+c2V0SGVpZ2h0KExlbmd0aChBdXRv
KSk7CisgICAgfQorI2VuZGlmCisKKyAgICBGb250RGVzY3JpcHRpb24gZm9udERlc2NyaXB0aW9u
ID0gc3R5bGUtPmZvbnREZXNjcmlwdGlvbigpOworICAgIGZvbnREZXNjcmlwdGlvbi5zZXRJc0Fi
c29sdXRlU2l6ZSh0cnVlKTsKKworI2lmZGVmIFFfV1NfTUFDIC8vIFVzZSBmaXhlZCBmb250IHNp
emUgYW5kIGZhbWlseSBvbiBNYWMgKGxpa2UgU2FmYXJpIGRvZXMpCisgICAgZm9udERlc2NyaXB0
aW9uLnNldFNwZWNpZmllZFNpemUobV9idXR0b25Gb250UGl4ZWxTaXplKTsKKyAgICBmb250RGVz
Y3JpcHRpb24uc2V0Q29tcHV0ZWRTaXplKG1fYnV0dG9uRm9udFBpeGVsU2l6ZSk7CisjZWxzZQor
ICAgIGZvbnREZXNjcmlwdGlvbi5zZXRTcGVjaWZpZWRTaXplKHN0eWxlLT5mb250U2l6ZSgpKTsK
KyAgICBmb250RGVzY3JpcHRpb24uc2V0Q29tcHV0ZWRTaXplKHN0eWxlLT5mb250U2l6ZSgpKTsK
KyNlbmRpZgorCisgICAgRm9udEZhbWlseSBmb250RmFtaWx5OworICAgIGZvbnRGYW1pbHkuc2V0
RmFtaWx5KG1fYnV0dG9uRm9udEZhbWlseSk7CisgICAgZm9udERlc2NyaXB0aW9uLnNldEZhbWls
eShmb250RmFtaWx5KTsKKyAgICBzdHlsZS0+c2V0Rm9udERlc2NyaXB0aW9uKGZvbnREZXNjcmlw
dGlvbik7CisgICAgc3R5bGUtPmZvbnQoKS51cGRhdGUoc3R5bGVSZXNvbHZlci0+Zm9udFNlbGVj
dG9yKCkpOworICAgIHN0eWxlLT5zZXRMaW5lSGVpZ2h0KFJlbmRlclN0eWxlOjppbml0aWFsTGlu
ZUhlaWdodCgpKTsKKyAgICBzZXRCdXR0b25TaXplKHN0eWxlKTsKKyAgICBzZXRCdXR0b25QYWRk
aW5nKHN0eWxlKTsKK30KKwordm9pZCBSZW5kZXJUaGVtZVFTdHlsZTo6c2V0QnV0dG9uUGFkZGlu
ZyhSZW5kZXJTdHlsZSogc3R5bGUpIGNvbnN0Cit7CisgICAgLy8gRmFrZSBhIGJ1dHRvbiByZWN0
IGhlcmUsIHNpbmNlIHdlJ3JlIGp1c3QgY29tcHV0aW5nIGRlbHRhcworICAgIFFSZWN0IG9yaWdp
bmFsUmVjdCA9IFFSZWN0KDAsIDAsIDEwMCwgMzApOworCisgICAgLy8gRGVmYXVsdCBwYWRkaW5n
IGlzIGJhc2VkIG9uIHRoZSBidXR0b24gbWFyZ2luIHBpeGVsIG1ldHJpYworICAgIGludCBidXR0
b25NYXJnaW4gPSBtX3N0eWxlSW50ZXJmYWNlLT5idXR0b25NYXJnaW4oUVN0eWxlSW50ZXJmYWNl
OjpTdGF0ZV9TbWFsbCwgb3JpZ2luYWxSZWN0KTsKKyAgICBpbnQgcGFkZGluZ0xlZnQgPSBidXR0
b25NYXJnaW47CisgICAgaW50IHBhZGRpbmdSaWdodCA9IGJ1dHRvbk1hcmdpbjsKKyAgICBpbnQg
cGFkZGluZ1RvcCA9IGJ1dHRvbk1hcmdpbjsKKyAgICBpbnQgcGFkZGluZ0JvdHRvbSA9IGJ1dHRv
bk1hcmdpbjsKKworICAgIC8vIFRoZW4gY2hlY2sgaWYgdGhlIHN0eWxlIHVzZXMgbGF5b3V0IG1h
cmdpbnMKKyAgICBRUmVjdCBsYXlvdXRSZWN0ID0gbV9zdHlsZUludGVyZmFjZS0+YnV0dG9uU3Vi
RWxlbWVudFJlY3QoUVN0eWxlSW50ZXJmYWNlOjpQdXNoQnV0dG9uTGF5b3V0SXRlbSwgUVN0eWxl
SW50ZXJmYWNlOjpTdGF0ZV9TbWFsbCwgb3JpZ2luYWxSZWN0KTsKKyAgICBpZiAoIWxheW91dFJl
Y3QuaXNOdWxsKCkpIHsKKyAgICAgICAgUVJlY3QgY29udGVudHNSZWN0ID0gbV9zdHlsZUludGVy
ZmFjZS0+YnV0dG9uU3ViRWxlbWVudFJlY3QoUVN0eWxlSW50ZXJmYWNlOjpQdXNoQnV0dG9uQ29u
dGVudHMsIFFTdHlsZUludGVyZmFjZTo6U3RhdGVfU21hbGwsIG9yaWdpbmFsUmVjdCk7CisgICAg
ICAgIHBhZGRpbmdMZWZ0ID0gY29udGVudHNSZWN0LmxlZnQoKSAtIGxheW91dFJlY3QubGVmdCgp
OworICAgICAgICBwYWRkaW5nUmlnaHQgPSBsYXlvdXRSZWN0LnJpZ2h0KCkgLSBjb250ZW50c1Jl
Y3QucmlnaHQoKTsKKyAgICAgICAgcGFkZGluZ1RvcCA9IGNvbnRlbnRzUmVjdC50b3AoKSAtIGxh
eW91dFJlY3QudG9wKCk7CisKKyAgICAgICAgLy8gQ2FuJ3QgdXNlIHRoaXMgcmlnaHQgbm93IGJl
Y2F1c2Ugd2UgZG9uJ3QgaGF2ZSB0aGUgYmFzZWxpbmUgdG8gY29tcGVuc2F0ZQorICAgICAgICAv
LyBwYWRkaW5nQm90dG9tID0gbGF5b3V0UmVjdC5ib3R0b20oKSAtIGNvbnRlbnRzUmVjdC5ib3R0
b20oKTsKKyAgICB9CisgICAgc3R5bGUtPnNldFBhZGRpbmdMZWZ0KExlbmd0aChwYWRkaW5nTGVm
dCwgRml4ZWQpKTsKKyAgICBzdHlsZS0+c2V0UGFkZGluZ1JpZ2h0KExlbmd0aChwYWRkaW5nUmln
aHQsIEZpeGVkKSk7CisgICAgc3R5bGUtPnNldFBhZGRpbmdUb3AoTGVuZ3RoKHBhZGRpbmdUb3As
IEZpeGVkKSk7CisgICAgc3R5bGUtPnNldFBhZGRpbmdCb3R0b20oTGVuZ3RoKHBhZGRpbmdCb3R0
b20sIEZpeGVkKSk7Cit9CisKK2Jvb2wgUmVuZGVyVGhlbWVRU3R5bGU6OnBhaW50QnV0dG9uKFJl
bmRlck9iamVjdCogbywgY29uc3QgUGFpbnRJbmZvJiBpLCBjb25zdCBJbnRSZWN0JiByKQorewor
ICAgIFN0eWxlUGFpbnRlclFTdHlsZSBwKHRoaXMsIGksIG8pOworICAgIGlmICghcC5pc1ZhbGlk
KCkpCisgICAgICAgIHJldHVybiB0cnVlOworCisgICAgcC5zdHlsZU9wdGlvbi5yZWN0ID0gcjsK
KyAgICBwLnN0eWxlT3B0aW9uLnN0YXRlIHw9IFFTdHlsZUludGVyZmFjZTo6U3RhdGVfU21hbGw7
CisKKyAgICBpZiAocC5hcHBlYXJhbmNlID09IFB1c2hCdXR0b25QYXJ0IHx8IHAuYXBwZWFyYW5j
ZSA9PSBCdXR0b25QYXJ0KSB7CisgICAgICAgIHAuc3R5bGVPcHRpb24ucmVjdCA9IGluZmxhdGVC
dXR0b25SZWN0KHAuc3R5bGVPcHRpb24ucmVjdCk7CisgICAgICAgIHAucGFpbnRCdXR0b24oUVN0
eWxlSW50ZXJmYWNlOjpQdXNoQnV0dG9uKTsKKyAgICB9IGVsc2UgaWYgKHAuYXBwZWFyYW5jZSA9
PSBSYWRpb1BhcnQpCisgICAgICAgIHAucGFpbnRCdXR0b24oUVN0eWxlSW50ZXJmYWNlOjpSYWRp
b0J1dHRvbik7CisgICAgZWxzZSBpZiAocC5hcHBlYXJhbmNlID09IENoZWNrYm94UGFydCkKKyAg
ICAgICAgcC5wYWludEJ1dHRvbihRU3R5bGVJbnRlcmZhY2U6OkNoZWNrQm94KTsKKworICAgIHJl
dHVybiBmYWxzZTsKK30KKworYm9vbCBSZW5kZXJUaGVtZVFTdHlsZTo6cGFpbnRUZXh0RmllbGQo
UmVuZGVyT2JqZWN0KiBvLCBjb25zdCBQYWludEluZm8mIGksIGNvbnN0IEludFJlY3QmIHIpCit7
CisgICAgU3R5bGVQYWludGVyUVN0eWxlIHAodGhpcywgaSwgbyk7CisgICAgaWYgKCFwLmlzVmFs
aWQoKSkKKyAgICAgICAgcmV0dXJuIHRydWU7CisKKyAgICBwLnN0eWxlT3B0aW9uLnJlY3QgPSBy
OworICAgIHAuc3R5bGVPcHRpb24uc3RhdGUgfD0gUVN0eWxlSW50ZXJmYWNlOjpTdGF0ZV9TdW5r
ZW47CisKKyAgICAvLyBHZXQgdGhlIGNvcnJlY3QgdGhlbWUgZGF0YSBmb3IgYSB0ZXh0IGZpZWxk
CisgICAgaWYgKHAuYXBwZWFyYW5jZSAhPSBUZXh0RmllbGRQYXJ0CisgICAgICAgICYmIHAuYXBw
ZWFyYW5jZSAhPSBTZWFyY2hGaWVsZFBhcnQKKyAgICAgICAgJiYgcC5hcHBlYXJhbmNlICE9IFRl
eHRBcmVhUGFydAorICAgICAgICAmJiBwLmFwcGVhcmFuY2UgIT0gTGlzdGJveFBhcnQpCisgICAg
ICAgIHJldHVybiB0cnVlOworCisgICAgLy8gTm93IHBhaW50IHRoZSB0ZXh0IGZpZWxkLgorICAg
IHAucGFpbnRUZXh0RmllbGQoKTsKKyAgICByZXR1cm4gZmFsc2U7Cit9CisKK3ZvaWQgUmVuZGVy
VGhlbWVRU3R5bGU6OmFkanVzdFRleHRBcmVhU3R5bGUoU3R5bGVSZXNvbHZlciogc3R5bGVSZXNv
bHZlciwgUmVuZGVyU3R5bGUqIHN0eWxlLCBFbGVtZW50KiBlbGVtZW50KSBjb25zdAoreworICAg
IGFkanVzdFRleHRGaWVsZFN0eWxlKHN0eWxlUmVzb2x2ZXIsIHN0eWxlLCBlbGVtZW50KTsKK30K
KworYm9vbCBSZW5kZXJUaGVtZVFTdHlsZTo6cGFpbnRUZXh0QXJlYShSZW5kZXJPYmplY3QqIG8s
IGNvbnN0IFBhaW50SW5mbyYgaSwgY29uc3QgSW50UmVjdCYgcikKK3sKKyAgICByZXR1cm4gcGFp
bnRUZXh0RmllbGQobywgaSwgcik7Cit9CisKK3ZvaWQgUmVuZGVyVGhlbWVRU3R5bGU6OnNldFBv
cHVwUGFkZGluZyhSZW5kZXJTdHlsZSogc3R5bGUpIGNvbnN0Cit7CisgICAgY29uc3QgaW50IHBh
ZGRpbmdMZWZ0ID0gNDsKKyAgICBjb25zdCBpbnQgcGFkZGluZ1JpZ2h0ID0gc3R5bGUtPndpZHRo
KCkuaXNGaXhlZCgpIHx8IHN0eWxlLT53aWR0aCgpLmlzUGVyY2VudCgpID8gNSA6IDg7CisKKyAg
ICBzdHlsZS0+c2V0UGFkZGluZ0xlZnQoTGVuZ3RoKHBhZGRpbmdMZWZ0LCBGaXhlZCkpOworCisg
ICAgaW50IHcgPSBtX3N0eWxlSW50ZXJmYWNlLT5zaW1wbGVQaXhlbE1ldHJpYyhRU3R5bGVJbnRl
cmZhY2U6OlBNX0J1dHRvbkljb25TaXplKTsKKyAgICBzdHlsZS0+c2V0UGFkZGluZ1JpZ2h0KExl
bmd0aChwYWRkaW5nUmlnaHQgKyB3LCBGaXhlZCkpOworCisgICAgc3R5bGUtPnNldFBhZGRpbmdU
b3AoTGVuZ3RoKDIsIEZpeGVkKSk7CisgICAgc3R5bGUtPnNldFBhZGRpbmdCb3R0b20oTGVuZ3Ro
KDIsIEZpeGVkKSk7Cit9CisKK1FQYWxldHRlIFJlbmRlclRoZW1lUVN0eWxlOjpjb2xvclBhbGV0
dGUoKSBjb25zdAoreworICAgIFFQYWxldHRlIHBhbGV0dGUgPSBSZW5kZXJUaGVtZVF0Ojpjb2xv
clBhbGV0dGUoKTsKKyAgICBzZXRQYWxldHRlRnJvbVBhZ2VDbGllbnRJZkV4aXN0cyhwYWxldHRl
KTsKKyAgICByZXR1cm4gcGFsZXR0ZTsKK30KKworYm9vbCBSZW5kZXJUaGVtZVFTdHlsZTo6cGFp
bnRNZW51TGlzdChSZW5kZXJPYmplY3QqIG8sIGNvbnN0IFBhaW50SW5mbyYgaSwgY29uc3QgSW50
UmVjdCYgcikKK3sKKyAgICBTdHlsZVBhaW50ZXJRU3R5bGUgcCh0aGlzLCBpLCBvKTsKKyAgICBp
ZiAoIXAuaXNWYWxpZCgpKQorICAgICAgICByZXR1cm4gdHJ1ZTsKKworICAgIHAuc3R5bGVPcHRp
b24ucmVjdCA9IHI7CisgICAgcC5wYWludENvbWJvQm94KCk7CisgICAgcmV0dXJuIGZhbHNlOwor
fQorCit2b2lkIFJlbmRlclRoZW1lUVN0eWxlOjphZGp1c3RNZW51TGlzdEJ1dHRvblN0eWxlKFN0
eWxlUmVzb2x2ZXIqIHN0eWxlUmVzb2x2ZXIsIFJlbmRlclN0eWxlKiBzdHlsZSwgRWxlbWVudCog
ZSkgY29uc3QKK3sKKyAgICAvLyBXT1JLQVJPVU5EIGJlY2F1c2UgaHRtbC5jc3Mgc3BlY2lmaWVz
IC13ZWJraXQtYm9yZGVyLXJhZGl1cyBmb3IgPHNlbGVjdD4gc28gd2Ugb3ZlcnJpZGUgaXQgaGVy
ZQorICAgIC8vIHNlZSBhbHNvIGh0dHA6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lk
PTE4Mzk5CisgICAgc3R5bGUtPnJlc2V0Qm9yZGVyUmFkaXVzKCk7CisKKyAgICBSZW5kZXJUaGVt
ZVF0OjphZGp1c3RNZW51TGlzdEJ1dHRvblN0eWxlKHN0eWxlUmVzb2x2ZXIsIHN0eWxlLCBlKTsK
K30KKworYm9vbCBSZW5kZXJUaGVtZVFTdHlsZTo6cGFpbnRNZW51TGlzdEJ1dHRvbihSZW5kZXJP
YmplY3QqIG8sIGNvbnN0IFBhaW50SW5mbyYgaSwgY29uc3QgSW50UmVjdCYgcikKK3sKKyAgICBT
dHlsZVBhaW50ZXJRU3R5bGUgcCh0aGlzLCBpLCBvKTsKKyAgICBpZiAoIXAuaXNWYWxpZCgpKQor
ICAgICAgICByZXR1cm4gdHJ1ZTsKKworICAgIHAuc3R5bGVPcHRpb24ucmVjdCA9IHI7CisgICAg
cC5wYWludENvbWJvQm94QXJyb3coKTsKKyAgICByZXR1cm4gZmFsc2U7Cit9CisKKyNpZiBFTkFC
TEUoUFJPR1JFU1NfRUxFTUVOVCkKK2RvdWJsZSBSZW5kZXJUaGVtZVFTdHlsZTo6YW5pbWF0aW9u
RHVyYXRpb25Gb3JQcm9ncmVzc0JhcihSZW5kZXJQcm9ncmVzcyogcmVuZGVyUHJvZ3Jlc3MpIGNv
bnN0Cit7CisgICAgaWYgKHJlbmRlclByb2dyZXNzLT5wb3NpdGlvbigpID49IDApCisgICAgICAg
IHJldHVybiAwOworCisgICAgSW50U2l6ZSBzaXplID0gcmVuZGVyUHJvZ3Jlc3MtPnBpeGVsU25h
cHBlZFNpemUoKTsKKyAgICAvLyBGSVhNRTogVW50aWwgaHR0cDovL2J1Z3JlcG9ydHMucXQubm9r
aWEuY29tL2Jyb3dzZS9RVEJVRy05MTcxIGlzIGZpeGVkLAorICAgIC8vIHdlIHNpbXVsYXRlIG9u
ZSBzcXVhcmUgYW5pbWF0aW5nIGFjcm9zcyB0aGUgcHJvZ3Jlc3MgYmFyLgorICAgIHJldHVybiAo
c2l6ZS53aWR0aCgpIC8gbV9zdHlsZUludGVyZmFjZS0+cHJvZ3Jlc3NCYXJDaHVua1dpZHRoKHNp
emUpKSAqIGFuaW1hdGlvblJlcGVhdEludGVydmFsRm9yUHJvZ3Jlc3NCYXIocmVuZGVyUHJvZ3Jl
c3MpOworfQorCitib29sIFJlbmRlclRoZW1lUVN0eWxlOjpwYWludFByb2dyZXNzQmFyKFJlbmRl
ck9iamVjdCogbywgY29uc3QgUGFpbnRJbmZvJiBwaSwgY29uc3QgSW50UmVjdCYgcikKK3sKKyAg
ICBpZiAoIW8tPmlzUHJvZ3Jlc3MoKSkKKyAgICAgICAgcmV0dXJuIHRydWU7CisKKyAgICBTdHls
ZVBhaW50ZXJRU3R5bGUgcCh0aGlzLCBwaSwgbyk7CisgICAgaWYgKCFwLmlzVmFsaWQoKSkKKyAg
ICAgICAgcmV0dXJuIHRydWU7CisKKyAgICBwLnN0eWxlT3B0aW9uLnJlY3QgPSByOworICAgIFJl
bmRlclByb2dyZXNzKiByZW5kZXJQcm9ncmVzcyA9IHRvUmVuZGVyUHJvZ3Jlc3Mobyk7CisgICAg
cC5wYWludFByb2dyZXNzQmFyKHJlbmRlclByb2dyZXNzLT5wb3NpdGlvbigpLCByZW5kZXJQcm9n
cmVzcy0+YW5pbWF0aW9uUHJvZ3Jlc3MoKSk7CisgICAgcmV0dXJuIGZhbHNlOworfQorI2VuZGlm
CisKK2Jvb2wgUmVuZGVyVGhlbWVRU3R5bGU6OnBhaW50U2xpZGVyVHJhY2soUmVuZGVyT2JqZWN0
KiBvLCBjb25zdCBQYWludEluZm8mIHBpLCBjb25zdCBJbnRSZWN0JiByKQoreworICAgIFN0eWxl
UGFpbnRlclFTdHlsZSBwKHRoaXMsIHBpLCBvKTsKKyAgICBpZiAoIXAuaXNWYWxpZCgpKQorICAg
ICAgICByZXR1cm4gdHJ1ZTsKKworICAgIGNvbnN0IFFQb2ludCB0b3BMZWZ0ID0gci5sb2NhdGlv
bigpOworICAgIHAucGFpbnRlci0+dHJhbnNsYXRlKHRvcExlZnQpOworCisgICAgcC5zdHlsZU9w
dGlvbi5yZWN0ID0gcjsKKyAgICBwLnN0eWxlT3B0aW9uLnJlY3QubW92ZVRvKFFQb2ludCgwLCAw
KSk7CisKKyAgICBpZiAocC5hcHBlYXJhbmNlID09IFNsaWRlclZlcnRpY2FsUGFydCkKKyAgICAg
ICAgcC5zdHlsZU9wdGlvbi5zbGlkZXIub3JpZW50YXRpb24gPSBRdDo6VmVydGljYWw7CisKKyAg
ICBpZiAoaXNQcmVzc2VkKG8pKQorICAgICAgICBwLnN0eWxlT3B0aW9uLnN0YXRlIHw9IFFTdHls
ZUludGVyZmFjZTo6U3RhdGVfU3Vua2VuOworCisgICAgLy8gc29tZSBzdHlsZXMgbmVlZCB0aGlz
IHRvIHNob3cgYSBoaWdobGlnaHQgb24gb25lIHNpZGUgb2YgdGhlIGdyb292ZQorICAgIEhUTUxJ
bnB1dEVsZW1lbnQqIHNsaWRlciA9IG8tPm5vZGUoKS0+dG9JbnB1dEVsZW1lbnQoKTsKKyAgICBp
ZiAoc2xpZGVyKSB7CisgICAgICAgIHAuc3R5bGVPcHRpb24uc2xpZGVyLnVwc2lkZURvd24gPSAo
cC5hcHBlYXJhbmNlID09IFNsaWRlckhvcml6b250YWxQYXJ0KSAmJiAhby0+c3R5bGUoKS0+aXNM
ZWZ0VG9SaWdodERpcmVjdGlvbigpOworICAgICAgICAvLyBVc2UgdGhlIHdpZHRoIGFzIGEgbXVs
dGlwbGllciBpbiBjYXNlIHRoZSBzbGlkZXIgdmFsdWVzIGFyZSA8PSAxCisgICAgICAgIGNvbnN0
IGludCB3aWR0aCA9IHIud2lkdGgoKSA+IDAgPyByLndpZHRoKCkgOiAxMDA7CisgICAgICAgIHAu
c3R5bGVPcHRpb24uc2xpZGVyLm1heGltdW0gPSBzbGlkZXItPm1heGltdW0oKSAqIHdpZHRoOwor
ICAgICAgICBwLnN0eWxlT3B0aW9uLnNsaWRlci5taW5pbXVtID0gc2xpZGVyLT5taW5pbXVtKCkg
KiB3aWR0aDsKKyAgICAgICAgaWYgKCFwLnN0eWxlT3B0aW9uLnNsaWRlci51cHNpZGVEb3duKQor
ICAgICAgICAgICAgcC5zdHlsZU9wdGlvbi5zbGlkZXIucG9zaXRpb24gPSBzbGlkZXItPnZhbHVl
QXNOdW1iZXIoKSAqIHdpZHRoOworICAgICAgICBlbHNlCisgICAgICAgICAgICBwLnN0eWxlT3B0
aW9uLnNsaWRlci5wb3NpdGlvbiA9IHAuc3R5bGVPcHRpb24uc2xpZGVyLm1pbmltdW0gKyBwLnN0
eWxlT3B0aW9uLnNsaWRlci5tYXhpbXVtIC0gc2xpZGVyLT52YWx1ZUFzTnVtYmVyKCkgKiB3aWR0
aDsKKyAgICB9CisKKyAgICBwLnBhaW50U2xpZGVyVHJhY2soKTsKKworICAgIHAucGFpbnRlci0+
dHJhbnNsYXRlKC10b3BMZWZ0KTsKKyAgICByZXR1cm4gZmFsc2U7Cit9CisKK3ZvaWQgUmVuZGVy
VGhlbWVRU3R5bGU6OmFkanVzdFNsaWRlclRyYWNrU3R5bGUoU3R5bGVSZXNvbHZlciosIFJlbmRl
clN0eWxlKiBzdHlsZSwgRWxlbWVudCopIGNvbnN0Cit7CisgICAgc3R5bGUtPnNldEJveFNoYWRv
dyhudWxscHRyKTsKK30KKworYm9vbCBSZW5kZXJUaGVtZVFTdHlsZTo6cGFpbnRTbGlkZXJUaHVt
YihSZW5kZXJPYmplY3QqIG8sIGNvbnN0IFBhaW50SW5mbyYgcGksIGNvbnN0IEludFJlY3QmIHIp
Cit7CisgICAgU3R5bGVQYWludGVyUVN0eWxlIHAodGhpcywgcGksIG8pOworICAgIGlmICghcC5p
c1ZhbGlkKCkpCisgICAgICAgIHJldHVybiB0cnVlOworCisgICAgY29uc3QgUVBvaW50IHRvcExl
ZnQgPSByLmxvY2F0aW9uKCk7CisgICAgcC5wYWludGVyLT50cmFuc2xhdGUodG9wTGVmdCk7CisK
KyAgICBwLnN0eWxlT3B0aW9uLnJlY3QgPSByOworICAgIHAuc3R5bGVPcHRpb24ucmVjdC5tb3Zl
VG8oUVBvaW50KDAsIDApKTsKKyAgICBwLnN0eWxlT3B0aW9uLnNsaWRlci5vcmllbnRhdGlvbiA9
IFF0OjpIb3Jpem9udGFsOworICAgIGlmIChwLmFwcGVhcmFuY2UgPT0gU2xpZGVyVGh1bWJWZXJ0
aWNhbFBhcnQpCisgICAgICAgIHAuc3R5bGVPcHRpb24uc2xpZGVyLm9yaWVudGF0aW9uID0gUXQ6
OlZlcnRpY2FsOworICAgIGlmIChpc1ByZXNzZWQobykpCisgICAgICAgIHAuc3R5bGVPcHRpb24u
c3RhdGUgfD0gUVN0eWxlSW50ZXJmYWNlOjpTdGF0ZV9TdW5rZW47CisKKyAgICBwLnBhaW50U2xp
ZGVyVGh1bWIoKTsKKworICAgIHAucGFpbnRlci0+dHJhbnNsYXRlKC10b3BMZWZ0KTsKKyAgICBy
ZXR1cm4gZmFsc2U7Cit9CisKK3ZvaWQgUmVuZGVyVGhlbWVRU3R5bGU6OmFkanVzdFNsaWRlclRo
dW1iU3R5bGUoU3R5bGVSZXNvbHZlciogc3R5bGVSZXNvbHZlciwgUmVuZGVyU3R5bGUqIHN0eWxl
LCBFbGVtZW50KiBlbGVtZW50KSBjb25zdAoreworICAgIFJlbmRlclRoZW1lOjphZGp1c3RTbGlk
ZXJUaHVtYlN0eWxlKHN0eWxlUmVzb2x2ZXIsIHN0eWxlLCBlbGVtZW50KTsKKyAgICBzdHlsZS0+
c2V0Qm94U2hhZG93KG51bGxwdHIpOworfQorCitib29sIFJlbmRlclRoZW1lUVN0eWxlOjpwYWlu
dFNlYXJjaEZpZWxkKFJlbmRlck9iamVjdCogbywgY29uc3QgUGFpbnRJbmZvJiBwaSwgY29uc3Qg
SW50UmVjdCYgcikKK3sKKyAgICByZXR1cm4gcGFpbnRUZXh0RmllbGQobywgcGksIHIpOworfQor
Cit2b2lkIFJlbmRlclRoZW1lUVN0eWxlOjphZGp1c3RTZWFyY2hGaWVsZERlY29yYXRpb25TdHls
ZShTdHlsZVJlc29sdmVyKiBzdHlsZVJlc29sdmVyLCBSZW5kZXJTdHlsZSogc3R5bGUsIEVsZW1l
bnQqIGUpIGNvbnN0Cit7CisgICAgbm90SW1wbGVtZW50ZWQoKTsKKyAgICBSZW5kZXJUaGVtZTo6
YWRqdXN0U2VhcmNoRmllbGREZWNvcmF0aW9uU3R5bGUoc3R5bGVSZXNvbHZlciwgc3R5bGUsIGUp
OworfQorCitib29sIFJlbmRlclRoZW1lUVN0eWxlOjpwYWludFNlYXJjaEZpZWxkRGVjb3JhdGlv
bihSZW5kZXJPYmplY3QqIG8sIGNvbnN0IFBhaW50SW5mbyYgcGksIGNvbnN0IEludFJlY3QmIHIp
Cit7CisgICAgbm90SW1wbGVtZW50ZWQoKTsKKyAgICByZXR1cm4gUmVuZGVyVGhlbWU6OnBhaW50
U2VhcmNoRmllbGREZWNvcmF0aW9uKG8sIHBpLCByKTsKK30KKwordm9pZCBSZW5kZXJUaGVtZVFT
dHlsZTo6YWRqdXN0U2VhcmNoRmllbGRSZXN1bHRzRGVjb3JhdGlvblN0eWxlKFN0eWxlUmVzb2x2
ZXIqIHN0eWxlUmVzb2x2ZXIsIFJlbmRlclN0eWxlKiBzdHlsZSwgRWxlbWVudCogZSkgY29uc3QK
K3sKKyAgICBub3RJbXBsZW1lbnRlZCgpOworICAgIFJlbmRlclRoZW1lOjphZGp1c3RTZWFyY2hG
aWVsZFJlc3VsdHNEZWNvcmF0aW9uU3R5bGUoc3R5bGVSZXNvbHZlciwgc3R5bGUsIGUpOworfQor
Citib29sIFJlbmRlclRoZW1lUVN0eWxlOjpwYWludFNlYXJjaEZpZWxkUmVzdWx0c0RlY29yYXRp
b24oUmVuZGVyT2JqZWN0KiBvLCBjb25zdCBQYWludEluZm8mIHBpLCBjb25zdCBJbnRSZWN0JiBy
KQoreworICAgIG5vdEltcGxlbWVudGVkKCk7CisgICAgcmV0dXJuIFJlbmRlclRoZW1lOjpwYWlu
dFNlYXJjaEZpZWxkUmVzdWx0c0RlY29yYXRpb24obywgcGksIHIpOworfQorCisjaWZuZGVmIFFU
X05PX1NQSU5CT1gKKworYm9vbCBSZW5kZXJUaGVtZVFTdHlsZTo6cGFpbnRJbm5lclNwaW5CdXR0
b24oUmVuZGVyT2JqZWN0KiBvLCBjb25zdCBQYWludEluZm8mIHBhaW50SW5mbywgY29uc3QgSW50
UmVjdCYgcmVjdCkKK3sKKyAgICBTdHlsZVBhaW50ZXJRU3R5bGUgcCh0aGlzLCBwYWludEluZm8s
IG8pOworICAgIGlmICghcC5pc1ZhbGlkKCkpCisgICAgICAgIHJldHVybiB0cnVlOworCisgICAg
cC5zdHlsZU9wdGlvbi5yZWN0ID0gcmVjdDsKKyAgICBwLnBhaW50SW5uZXJTcGluQnV0dG9uKGlz
U3BpblVwQnV0dG9uUGFydFByZXNzZWQobykpOworICAgIHJldHVybiBmYWxzZTsKK30KKyNlbmRp
ZgorCitDb250cm9sUGFydCBSZW5kZXJUaGVtZVFTdHlsZTo6aW5pdGlhbGl6ZUNvbW1vblFTdHls
ZU9wdGlvbnMoUVN0eWxlSW50ZXJmYWNlT3B0aW9uICZvcHRpb24sIFJlbmRlck9iamVjdCogbykg
Y29uc3QKK3sKKyAgICAvLyBEZWZhdWx0IGJpdHM6IG5vIGZvY3VzLCBubyBtb3VzZSBvdmVyCisg
ICAgb3B0aW9uLnN0YXRlICY9IH4oUVN0eWxlSW50ZXJmYWNlOjpTdGF0ZV9IYXNGb2N1cyB8IFFT
dHlsZUludGVyZmFjZTo6U3RhdGVfTW91c2VPdmVyKTsKKworICAgIGlmIChpc1JlYWRPbmx5Q29u
dHJvbChvKSkKKyAgICAgICAgLy8gUmVhZG9ubHkgaXMgc3VwcG9ydGVkIG9uIHRleHRmaWVsZHMu
CisgICAgICAgIG9wdGlvbi5zdGF0ZSB8PSBRU3R5bGVJbnRlcmZhY2U6OlN0YXRlX1JlYWRPbmx5
OworCisgICAgb3B0aW9uLmRpcmVjdGlvbiA9IFF0OjpMZWZ0VG9SaWdodDsKKworICAgIGlmIChp
c0hvdmVyZWQobykpCisgICAgICAgIG9wdGlvbi5zdGF0ZSB8PSBRU3R5bGVJbnRlcmZhY2U6OlN0
YXRlX01vdXNlT3ZlcjsKKworICAgIHNldFBhbGV0dGVGcm9tUGFnZUNsaWVudElmRXhpc3RzKG9w
dGlvbi5wYWxldHRlKTsKKworICAgIGlmICghaXNFbmFibGVkKG8pKSB7CisgICAgICAgIG9wdGlv
bi5wYWxldHRlLnNldEN1cnJlbnRDb2xvckdyb3VwKFFQYWxldHRlOjpEaXNhYmxlZCk7CisgICAg
ICAgIG9wdGlvbi5zdGF0ZSAmPSB+UVN0eWxlSW50ZXJmYWNlOjpTdGF0ZV9FbmFibGVkOworICAg
IH0KKworICAgIFJlbmRlclN0eWxlKiBzdHlsZSA9IG8tPnN0eWxlKCk7CisgICAgaWYgKCFzdHls
ZSkKKyAgICAgICAgcmV0dXJuIE5vQ29udHJvbFBhcnQ7CisKKyAgICBDb250cm9sUGFydCByZXN1
bHQgPSBzdHlsZS0+YXBwZWFyYW5jZSgpOworICAgIGlmIChzdXBwb3J0c0ZvY3VzKHJlc3VsdCkg
JiYgaXNGb2N1c2VkKG8pKSB7CisgICAgICAgIG9wdGlvbi5zdGF0ZSB8PSBRU3R5bGVJbnRlcmZh
Y2U6OlN0YXRlX0hhc0ZvY3VzOworICAgICAgICBvcHRpb24uc3RhdGUgfD0gUVN0eWxlSW50ZXJm
YWNlOjpTdGF0ZV9LZXlib2FyZEZvY3VzQ2hhbmdlOworICAgIH0KKworICAgIGlmIChzdHlsZS0+
ZGlyZWN0aW9uKCkgPT0gV2ViQ29yZTo6UlRMKQorICAgICAgICBvcHRpb24uZGlyZWN0aW9uID0g
UXQ6OlJpZ2h0VG9MZWZ0OworCisgICAgc3dpdGNoIChyZXN1bHQpIHsKKyAgICBjYXNlIFB1c2hC
dXR0b25QYXJ0OgorICAgIGNhc2UgU3F1YXJlQnV0dG9uUGFydDoKKyAgICBjYXNlIEJ1dHRvblBh
cnQ6CisgICAgY2FzZSBCdXR0b25CZXZlbFBhcnQ6CisgICAgY2FzZSBMaXN0SXRlbVBhcnQ6Cisg
ICAgY2FzZSBNZW51bGlzdEJ1dHRvblBhcnQ6CisgICAgY2FzZSBJbm5lclNwaW5CdXR0b25QYXJ0
OgorICAgIGNhc2UgU2VhcmNoRmllbGRSZXN1bHRzQnV0dG9uUGFydDoKKyAgICBjYXNlIFNlYXJj
aEZpZWxkQ2FuY2VsQnV0dG9uUGFydDogeworICAgICAgICBpZiAoaXNQcmVzc2VkKG8pKQorICAg
ICAgICAgICAgb3B0aW9uLnN0YXRlIHw9IFFTdHlsZUludGVyZmFjZTo6U3RhdGVfU3Vua2VuOwor
ICAgICAgICBlbHNlIGlmIChyZXN1bHQgPT0gUHVzaEJ1dHRvblBhcnQgfHwgcmVzdWx0ID09IEJ1
dHRvblBhcnQpCisgICAgICAgICAgICBvcHRpb24uc3RhdGUgfD0gUVN0eWxlSW50ZXJmYWNlOjpT
dGF0ZV9SYWlzZWQ7CisgICAgICAgIGJyZWFrOworICAgIH0KKyAgICBjYXNlIFJhZGlvUGFydDoK
KyAgICBjYXNlIENoZWNrYm94UGFydDoKKyAgICAgICAgb3B0aW9uLnN0YXRlIHw9IChpc0NoZWNr
ZWQobykgPyBRU3R5bGVJbnRlcmZhY2U6OlN0YXRlX09uIDogUVN0eWxlSW50ZXJmYWNlOjpTdGF0
ZV9PZmYpOworICAgIH0KKworICAgIHJldHVybiByZXN1bHQ7Cit9CisKK3ZvaWQgUmVuZGVyVGhl
bWVRU3R5bGU6OmFkanVzdFNsaWRlclRodW1iU2l6ZShSZW5kZXJTdHlsZSogc3R5bGUsIEVsZW1l
bnQqIGVsZW1lbnQpIGNvbnN0Cit7CisgICAgY29uc3QgQ29udHJvbFBhcnQgcGFydCA9IHN0eWxl
LT5hcHBlYXJhbmNlKCk7CisgICAgaWYgKHBhcnQgPT0gU2xpZGVyVGh1bWJIb3Jpem9udGFsUGFy
dCB8fCBwYXJ0ID09IFNsaWRlclRodW1iVmVydGljYWxQYXJ0KSB7CisgICAgICAgIFF0OjpPcmll
bnRhdGlvbiBvcmllbnRhdGlvbiA9IFF0OjpIb3Jpem9udGFsOworICAgICAgICBpZiAocGFydCA9
PSBTbGlkZXJUaHVtYlZlcnRpY2FsUGFydCkKKyAgICAgICAgICAgIG9yaWVudGF0aW9uID0gUXQ6
OlZlcnRpY2FsOworCisgICAgICAgIGludCBsZW5ndGggPSBtX3N0eWxlSW50ZXJmYWNlLT5zbGlk
ZXJMZW5ndGgob3JpZW50YXRpb24pOworICAgICAgICBpbnQgdGhpY2tuZXNzID0gbV9zdHlsZUlu
dGVyZmFjZS0+c2xpZGVyVGhpY2tuZXNzKG9yaWVudGF0aW9uKTsKKyAgICAgICAgaWYgKG9yaWVu
dGF0aW9uID09IFF0OjpWZXJ0aWNhbCkgeworICAgICAgICAgICAgc3R5bGUtPnNldFdpZHRoKExl
bmd0aCh0aGlja25lc3MsIEZpeGVkKSk7CisgICAgICAgICAgICBzdHlsZS0+c2V0SGVpZ2h0KExl
bmd0aChsZW5ndGgsIEZpeGVkKSk7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBzdHls
ZS0+c2V0V2lkdGgoTGVuZ3RoKGxlbmd0aCwgRml4ZWQpKTsKKyAgICAgICAgICAgIHN0eWxlLT5z
ZXRIZWlnaHQoTGVuZ3RoKHRoaWNrbmVzcywgRml4ZWQpKTsKKyAgICAgICAgfQorICAgIH0gZWxz
ZQorICAgICAgICBSZW5kZXJUaGVtZVF0OjphZGp1c3RTbGlkZXJUaHVtYlNpemUoc3R5bGUsIGVs
ZW1lbnQpOworfQorCit9CisKKy8vIHZpbTogdHM9NCBzdz00IGV0CmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9xdC9SZW5kZXJUaGVtZVFTdHlsZS5oIGIvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vcXQvUmVuZGVyVGhlbWVRU3R5bGUuaApuZXcgZmlsZSBtb2RlIDEwMDY0NApp
bmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi41YzczMDQzOWMx
OTgwZmE3ODhjNTc3MDI3MzlkMzgwODhmZWQ0YzcwCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vcXQvUmVuZGVyVGhlbWVRU3R5bGUuaApAQCAtMCwwICsxLDE1OSBA
QAorLyoKKyAqIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSB0aGVtZSBpbXBsZW1lbnRhdGlvbiBm
b3IgZm9ybSBjb250cm9scyBpbiBXZWJDb3JlLgorICoKKyAqIENvcHlyaWdodCAoQykgMjAxMS0y
MDEyIE5va2lhIENvcnBvcmF0aW9uIGFuZC9vciBpdHMgc3Vic2lkaWFyeSgtaWVzKS4KKyAqCisg
KiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQg
YW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBH
ZW5lcmFsIFB1YmxpYworICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdh
cmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChh
dCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBsaWJyYXJ5IGlz
IGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQg
V0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBv
ZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NF
LiAgU2VlIHRoZSBHTlUKKyAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9y
ZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhl
IEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBs
aWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCisgKiB0
aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZp
ZnRoIEZsb29yLAorICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisgKgorICovCisjaWZu
ZGVmIFJlbmRlclRoZW1lUVN0eWxlX2gKKyNkZWZpbmUgUmVuZGVyVGhlbWVRU3R5bGVfaAorCisj
aW5jbHVkZSAiUVN0eWxlSW50ZXJmYWNlLmgiCisjaW5jbHVkZSAiUmVuZGVyVGhlbWVRdC5oIgor
CituYW1lc3BhY2UgV2ViQ29yZSB7CisKK2NsYXNzIFNjcm9sbGJhclRoZW1lUVN0eWxlOworCitj
bGFzcyBQYWdlOworY2xhc3MgUVN0eWxlSW50ZXJmYWNlOworc3RydWN0IFFTdHlsZUludGVyZmFj
ZU9wdGlvbjsKKwordHlwZWRlZiBRU3R5bGVJbnRlcmZhY2UqICgqUXRTdHlsZUZhY3RvcnlGdW5j
dGlvbikoUGFnZSopOworCitjbGFzcyBSZW5kZXJUaGVtZVFTdHlsZSA6IHB1YmxpYyBSZW5kZXJU
aGVtZVF0IHsKK3ByaXZhdGU6CisgICAgZnJpZW5kIGNsYXNzIFN0eWxlUGFpbnRlclFTdHlsZTsK
KworICAgIFJlbmRlclRoZW1lUVN0eWxlKFBhZ2UqKTsKKyAgICB2aXJ0dWFsIH5SZW5kZXJUaGVt
ZVFTdHlsZSgpOworCitwdWJsaWM6CisgICAgc3RhdGljIFBhc3NSZWZQdHI8UmVuZGVyVGhlbWU+
IGNyZWF0ZShQYWdlKik7CisKKyAgICBzdGF0aWMgdm9pZCBzZXRTdHlsZUZhY3RvcnlGdW5jdGlv
bihRdFN0eWxlRmFjdG9yeUZ1bmN0aW9uKTsKKyAgICBzdGF0aWMgUXRTdHlsZUZhY3RvcnlGdW5j
dGlvbiBzdHlsZUZhY3RvcnkoKTsKKworICAgIHZpcnR1YWwgdm9pZCBhZGp1c3RTbGlkZXJUaHVt
YlNpemUoUmVuZGVyU3R5bGUqLCBFbGVtZW50KikgY29uc3Q7CisKKyAgICBRU3R5bGVJbnRlcmZh
Y2UqIHN0eWxlSW50ZXJmYWNlKCkgeyByZXR1cm4gbV9zdHlsZUludGVyZmFjZS5nZXQoKTsgfQor
Citwcm90ZWN0ZWQ6CisgICAgdmlydHVhbCB2b2lkIGFkanVzdEJ1dHRvblN0eWxlKFN0eWxlUmVz
b2x2ZXIqLCBSZW5kZXJTdHlsZSosIEVsZW1lbnQqKSBjb25zdDsKKyAgICB2aXJ0dWFsIGJvb2wg
cGFpbnRCdXR0b24oUmVuZGVyT2JqZWN0KiwgY29uc3QgUGFpbnRJbmZvJiwgY29uc3QgSW50UmVj
dCYpOworCisgICAgdmlydHVhbCBib29sIHBhaW50VGV4dEZpZWxkKFJlbmRlck9iamVjdCosIGNv
bnN0IFBhaW50SW5mbyYsIGNvbnN0IEludFJlY3QmKTsKKworICAgIHZpcnR1YWwgYm9vbCBwYWlu
dFRleHRBcmVhKFJlbmRlck9iamVjdCosIGNvbnN0IFBhaW50SW5mbyYsIGNvbnN0IEludFJlY3Qm
KTsKKyAgICB2aXJ0dWFsIHZvaWQgYWRqdXN0VGV4dEFyZWFTdHlsZShTdHlsZVJlc29sdmVyKiwg
UmVuZGVyU3R5bGUqLCBFbGVtZW50KikgY29uc3Q7CisKKyAgICB2aXJ0dWFsIGJvb2wgcGFpbnRN
ZW51TGlzdChSZW5kZXJPYmplY3QqLCBjb25zdCBQYWludEluZm8mLCBjb25zdCBJbnRSZWN0Jik7
CisKKyAgICB2aXJ0dWFsIGJvb2wgcGFpbnRNZW51TGlzdEJ1dHRvbihSZW5kZXJPYmplY3QqLCBj
b25zdCBQYWludEluZm8mLCBjb25zdCBJbnRSZWN0Jik7CisgICAgdmlydHVhbCB2b2lkIGFkanVz
dE1lbnVMaXN0QnV0dG9uU3R5bGUoU3R5bGVSZXNvbHZlciosIFJlbmRlclN0eWxlKiwgRWxlbWVu
dCopIGNvbnN0OworCisjaWYgRU5BQkxFKFBST0dSRVNTX0VMRU1FTlQpCisgICAgLy8gUmV0dXJu
cyB0aGUgZHVyYXRpb24gb2YgdGhlIGFuaW1hdGlvbiBmb3IgdGhlIHByb2dyZXNzIGJhci4KKyAg
ICB2aXJ0dWFsIGRvdWJsZSBhbmltYXRpb25EdXJhdGlvbkZvclByb2dyZXNzQmFyKFJlbmRlclBy
b2dyZXNzKikgY29uc3Q7CisgICAgdmlydHVhbCBib29sIHBhaW50UHJvZ3Jlc3NCYXIoUmVuZGVy
T2JqZWN0KiwgY29uc3QgUGFpbnRJbmZvJiwgY29uc3QgSW50UmVjdCYpOworI2VuZGlmCisKKyAg
ICB2aXJ0dWFsIGJvb2wgcGFpbnRTbGlkZXJUcmFjayhSZW5kZXJPYmplY3QqLCBjb25zdCBQYWlu
dEluZm8mLCBjb25zdCBJbnRSZWN0Jik7CisgICAgdmlydHVhbCB2b2lkIGFkanVzdFNsaWRlclRy
YWNrU3R5bGUoU3R5bGVSZXNvbHZlciosIFJlbmRlclN0eWxlKiwgRWxlbWVudCopIGNvbnN0Owor
CisgICAgdmlydHVhbCBib29sIHBhaW50U2xpZGVyVGh1bWIoUmVuZGVyT2JqZWN0KiwgY29uc3Qg
UGFpbnRJbmZvJiwgY29uc3QgSW50UmVjdCYpOworICAgIHZpcnR1YWwgdm9pZCBhZGp1c3RTbGlk
ZXJUaHVtYlN0eWxlKFN0eWxlUmVzb2x2ZXIqLCBSZW5kZXJTdHlsZSosIEVsZW1lbnQqKSBjb25z
dDsKKworICAgIHZpcnR1YWwgYm9vbCBwYWludFNlYXJjaEZpZWxkKFJlbmRlck9iamVjdCosIGNv
bnN0IFBhaW50SW5mbyYsIGNvbnN0IEludFJlY3QmKTsKKworICAgIHZpcnR1YWwgdm9pZCBhZGp1
c3RTZWFyY2hGaWVsZERlY29yYXRpb25TdHlsZShTdHlsZVJlc29sdmVyKiwgUmVuZGVyU3R5bGUq
LCBFbGVtZW50KikgY29uc3Q7CisgICAgdmlydHVhbCBib29sIHBhaW50U2VhcmNoRmllbGREZWNv
cmF0aW9uKFJlbmRlck9iamVjdCosIGNvbnN0IFBhaW50SW5mbyYsIGNvbnN0IEludFJlY3QmKTsK
KworICAgIHZpcnR1YWwgdm9pZCBhZGp1c3RTZWFyY2hGaWVsZFJlc3VsdHNEZWNvcmF0aW9uU3R5
bGUoU3R5bGVSZXNvbHZlciosIFJlbmRlclN0eWxlKiwgRWxlbWVudCopIGNvbnN0OworICAgIHZp
cnR1YWwgYm9vbCBwYWludFNlYXJjaEZpZWxkUmVzdWx0c0RlY29yYXRpb24oUmVuZGVyT2JqZWN0
KiwgY29uc3QgUGFpbnRJbmZvJiwgY29uc3QgSW50UmVjdCYpOworCisjaWZuZGVmIFFUX05PX1NQ
SU5CT1gKKyAgICB2aXJ0dWFsIGJvb2wgcGFpbnRJbm5lclNwaW5CdXR0b24oUmVuZGVyT2JqZWN0
KiwgY29uc3QgUGFpbnRJbmZvJiwgY29uc3QgSW50UmVjdCYpOworI2VuZGlmCisKK3Byb3RlY3Rl
ZDoKKyAgICB2aXJ0dWFsIHZvaWQgY29tcHV0ZVNpemVCYXNlZE9uU3R5bGUoUmVuZGVyU3R5bGUq
KSBjb25zdDsKKworICAgIHZpcnR1YWwgUVNoYXJlZFBvaW50ZXI8U3R5bGVQYWludGVyPiBnZXRT
dHlsZVBhaW50ZXIoY29uc3QgUGFpbnRJbmZvJik7CisKKyAgICB2aXJ0dWFsIFFSZWN0IGluZmxh
dGVCdXR0b25SZWN0KGNvbnN0IFFSZWN0JiBvcmlnaW5hbFJlY3QpIGNvbnN0OworCisgICAgdmly
dHVhbCB2b2lkIHNldFBvcHVwUGFkZGluZyhSZW5kZXJTdHlsZSopIGNvbnN0OworCisgICAgdmly
dHVhbCBRUGFsZXR0ZSBjb2xvclBhbGV0dGUoKSBjb25zdDsKKworcHJpdmF0ZToKKyAgICBDb250
cm9sUGFydCBpbml0aWFsaXplQ29tbW9uUVN0eWxlT3B0aW9ucyhRU3R5bGVJbnRlcmZhY2VPcHRp
b24mLCBSZW5kZXJPYmplY3QqKSBjb25zdDsKKworICAgIHZvaWQgc2V0QnV0dG9uUGFkZGluZyhS
ZW5kZXJTdHlsZSopIGNvbnN0OworCisgICAgdm9pZCBzZXRQYWxldHRlRnJvbVBhZ2VDbGllbnRJ
ZkV4aXN0cyhRUGFsZXR0ZSYpIGNvbnN0OworCisjaWZkZWYgUV9PU19NQUMKKyAgICBpbnQgbV9i
dXR0b25Gb250UGl4ZWxTaXplOworI2VuZGlmCisKKyAgICBPd25QdHI8UVN0eWxlSW50ZXJmYWNl
PiBtX3N0eWxlSW50ZXJmYWNlOworfTsKKworY2xhc3MgU3R5bGVQYWludGVyUVN0eWxlIDogcHVi
bGljIFN0eWxlUGFpbnRlciB7CitwdWJsaWM6CisgICAgZXhwbGljaXQgU3R5bGVQYWludGVyUVN0
eWxlKFJlbmRlclRoZW1lUVN0eWxlKiwgY29uc3QgUGFpbnRJbmZvJiwgUmVuZGVyT2JqZWN0Kik7
CisgICAgZXhwbGljaXQgU3R5bGVQYWludGVyUVN0eWxlKFNjcm9sbGJhclRoZW1lUVN0eWxlKiwg
R3JhcGhpY3NDb250ZXh0Kik7CisKKyAgICBib29sIGlzVmFsaWQoKSBjb25zdCB7IHJldHVybiBz
dHlsZUludGVyZmFjZSAmJiBzdHlsZUludGVyZmFjZS0+aXNWYWxpZCgpICYmIFN0eWxlUGFpbnRl
cjo6aXNWYWxpZCgpOyB9CisKKyAgICBRT2JqZWN0KiB3aWRnZXQ7CisgICAgUVN0eWxlSW50ZXJm
YWNlKiBzdHlsZUludGVyZmFjZTsKKyAgICBRU3R5bGVJbnRlcmZhY2VPcHRpb24gc3R5bGVPcHRp
b247CisgICAgQ29udHJvbFBhcnQgYXBwZWFyYW5jZTsKKworICAgIHZvaWQgcGFpbnRCdXR0b24o
UVN0eWxlSW50ZXJmYWNlOjpCdXR0b25UeXBlIHR5cGUpCisgICAgeyBzdHlsZUludGVyZmFjZS0+
cGFpbnRCdXR0b24ocGFpbnRlciwgdHlwZSwgc3R5bGVPcHRpb24sIHdpZGdldCk7IH0KKyAgICB2
b2lkIHBhaW50VGV4dEZpZWxkKCkKKyAgICB7IHN0eWxlSW50ZXJmYWNlLT5wYWludFRleHRGaWVs
ZChwYWludGVyLCBzdHlsZU9wdGlvbiwgd2lkZ2V0KTsgfQorICAgIHZvaWQgcGFpbnRDb21ib0Jv
eCgpCisgICAgeyBzdHlsZUludGVyZmFjZS0+cGFpbnRDb21ib0JveChwYWludGVyLCBzdHlsZU9w
dGlvbiwgd2lkZ2V0KTsgfQorICAgIHZvaWQgcGFpbnRDb21ib0JveEFycm93KCkKKyAgICB7IHN0
eWxlSW50ZXJmYWNlLT5wYWludENvbWJvQm94QXJyb3cocGFpbnRlciwgc3R5bGVPcHRpb24sIHdp
ZGdldCk7IH0KKyAgICB2b2lkIHBhaW50U2xpZGVyVHJhY2soKQorICAgIHsgc3R5bGVJbnRlcmZh
Y2UtPnBhaW50U2xpZGVyVHJhY2socGFpbnRlciwgc3R5bGVPcHRpb24sIHdpZGdldCk7IH0KKyAg
ICB2b2lkIHBhaW50U2xpZGVyVGh1bWIoKQorICAgIHsgc3R5bGVJbnRlcmZhY2UtPnBhaW50U2xp
ZGVyVGh1bWIocGFpbnRlciwgc3R5bGVPcHRpb24sIHdpZGdldCk7IH0KKyAgICB2b2lkIHBhaW50
SW5uZXJTcGluQnV0dG9uKGJvb2wgc3BpbkJveFVwKQorICAgIHsgc3R5bGVJbnRlcmZhY2UtPnBh
aW50SW5uZXJTcGluQnV0dG9uKHBhaW50ZXIsIHN0eWxlT3B0aW9uLCBzcGluQm94VXAsIHdpZGdl
dCk7IH0KKyAgICB2b2lkIHBhaW50UHJvZ3Jlc3NCYXIoZG91YmxlIHByb2dyZXNzLCBkb3VibGUg
YW5pbWF0aW9uUHJvZ3Jlc3MpCisgICAgeyBzdHlsZUludGVyZmFjZS0+cGFpbnRQcm9ncmVzc0Jh
cihwYWludGVyLCBzdHlsZU9wdGlvbiwgcHJvZ3Jlc3MsIGFuaW1hdGlvblByb2dyZXNzLCB3aWRn
ZXQpOyB9CisgICAgdm9pZCBwYWludFNjcm9sbENvcm5lcihjb25zdCBRUmVjdCYgcmVjdCkKKyAg
ICB7IHN0eWxlSW50ZXJmYWNlLT5wYWludFNjcm9sbENvcm5lcihwYWludGVyLCByZWN0LCB3aWRn
ZXQpOyB9CisgICAgdm9pZCBwYWludFNjcm9sbEJhcigpCisgICAgeyBzdHlsZUludGVyZmFjZS0+
cGFpbnRTY3JvbGxCYXIocGFpbnRlciwgc3R5bGVPcHRpb24sIHdpZGdldCk7IH0KKworcHJpdmF0
ZToKKyAgICB2b2lkIGluaXQoR3JhcGhpY3NDb250ZXh0Kik7CisKKyAgICBRX0RJU0FCTEVfQ09Q
WShTdHlsZVBhaW50ZXJRU3R5bGUpCit9OworCit9CisKKyNlbmRpZiAvLyBSZW5kZXJUaGVtZVFT
dHlsZV9oCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9xdC9TY3JvbGxiYXJU
aGVtZVFTdHlsZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9xdC9TY3JvbGxiYXJUaGVt
ZVFTdHlsZS5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uYmQ1N2I3MDVkMmYyMTJhMzQwYWZkMGRjZjFhYzhhZDlm
YWY3ZWJlZAotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3F0L1Nj
cm9sbGJhclRoZW1lUVN0eWxlLmNwcApAQCAtMCwwICsxLDIyMSBAQAorLyoKKyAqIENvcHlyaWdo
dCAoQykgMjAwNywgMjAwOCBBcHBsZSBJbmMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCisgKiBDb3B5
cmlnaHQgKEMpIDIwMDcgU3RhaWtvcyBDb21wdXRpbmcgU2VydmljZXMgSW5jLiA8aW5mb0BzdGFp
a29zLm5ldD4KKyAqIENvcHlyaWdodCAoQykgMjAwOCBOb2tpYSBDb3Jwb3JhdGlvbiBhbmQvb3Ig
aXRzIHN1YnNpZGlhcnkoLWllcykKKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNv
dXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwg
YXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICog
YXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFp
biB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMg
aW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHBy
b3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBS
T1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1Q
TElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJ
TVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBB
UlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBB
UFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJ
TkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVO
VElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVN
RU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBP
UgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBB
TkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBT
VFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RI
RVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09G
VFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0Uu
CisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIlNjcm9sbGJhclRoZW1lUVN0
eWxlLmgiCisKKyNpbmNsdWRlICJHcmFwaGljc0NvbnRleHQuaCIKKyNpbmNsdWRlICJQbGF0Zm9y
bU1vdXNlRXZlbnQuaCIKKyNpbmNsdWRlICJSZW5kZXJUaGVtZVFTdHlsZS5oIgorI2luY2x1ZGUg
IlNjcm9sbFZpZXcuaCIKKyNpbmNsdWRlICJTY3JvbGxiYXIuaCIKKworbmFtZXNwYWNlIFdlYkNv
cmUgeworCitTY3JvbGxiYXJUaGVtZVFTdHlsZTo6U2Nyb2xsYmFyVGhlbWVRU3R5bGUoKQorewor
ICAgIG1fc3R5bGVJbnRlcmZhY2UgPSBhZG9wdFB0cihSZW5kZXJUaGVtZVFTdHlsZTo6c3R5bGVG
YWN0b3J5KCkoLypwYWdlKi8gMCkpOworfQorCitTY3JvbGxiYXJUaGVtZVFTdHlsZTo6flNjcm9s
bGJhclRoZW1lUVN0eWxlKCkKK3sKK30KKworc3RhdGljIFFTdHlsZUludGVyZmFjZTo6U3ViQ29u
dHJvbCBzY1BhcnQoY29uc3QgU2Nyb2xsYmFyUGFydCYgcGFydCkKK3sKKyAgICBzd2l0Y2ggKHBh
cnQpIHsKKyAgICBjYXNlIE5vUGFydDoKKyAgICAgICAgcmV0dXJuIFFTdHlsZUludGVyZmFjZTo6
U0NfTm9uZTsKKyAgICBjYXNlIEJhY2tCdXR0b25TdGFydFBhcnQ6CisgICAgY2FzZSBCYWNrQnV0
dG9uRW5kUGFydDoKKyAgICAgICAgcmV0dXJuIFFTdHlsZUludGVyZmFjZTo6U0NfU2Nyb2xsQmFy
U3ViTGluZTsKKyAgICBjYXNlIEJhY2tUcmFja1BhcnQ6CisgICAgICAgIHJldHVybiBRU3R5bGVJ
bnRlcmZhY2U6OlNDX1Njcm9sbEJhclN1YlBhZ2U7CisgICAgY2FzZSBUaHVtYlBhcnQ6CisgICAg
ICAgIHJldHVybiBRU3R5bGVJbnRlcmZhY2U6OlNDX1Njcm9sbEJhclNsaWRlcjsKKyAgICBjYXNl
IEZvcndhcmRUcmFja1BhcnQ6CisgICAgICAgIHJldHVybiBRU3R5bGVJbnRlcmZhY2U6OlNDX1Nj
cm9sbEJhckFkZFBhZ2U7CisgICAgY2FzZSBGb3J3YXJkQnV0dG9uU3RhcnRQYXJ0OgorICAgIGNh
c2UgRm9yd2FyZEJ1dHRvbkVuZFBhcnQ6CisgICAgICAgIHJldHVybiBRU3R5bGVJbnRlcmZhY2U6
OlNDX1Njcm9sbEJhckFkZExpbmU7CisgICAgfQorCisgICAgcmV0dXJuIFFTdHlsZUludGVyZmFj
ZTo6U0NfTm9uZTsKK30KKworc3RhdGljIFNjcm9sbGJhclBhcnQgc2Nyb2xsYmFyUGFydChjb25z
dCBRU3R5bGVJbnRlcmZhY2U6OlN1YkNvbnRyb2wmIHNjKQoreworICAgIHN3aXRjaCAoc2MpIHsK
KyAgICBjYXNlIFFTdHlsZUludGVyZmFjZTo6U0NfTm9uZToKKyAgICAgICAgcmV0dXJuIE5vUGFy
dDsKKyAgICBjYXNlIFFTdHlsZUludGVyZmFjZTo6U0NfU2Nyb2xsQmFyU3ViTGluZToKKyAgICAg
ICAgcmV0dXJuIEJhY2tCdXR0b25TdGFydFBhcnQ7CisgICAgY2FzZSBRU3R5bGVJbnRlcmZhY2U6
OlNDX1Njcm9sbEJhclN1YlBhZ2U6CisgICAgICAgIHJldHVybiBCYWNrVHJhY2tQYXJ0OworICAg
IGNhc2UgUVN0eWxlSW50ZXJmYWNlOjpTQ19TY3JvbGxCYXJTbGlkZXI6CisgICAgICAgIHJldHVy
biBUaHVtYlBhcnQ7CisgICAgY2FzZSBRU3R5bGVJbnRlcmZhY2U6OlNDX1Njcm9sbEJhckFkZFBh
Z2U6CisgICAgICAgIHJldHVybiBGb3J3YXJkVHJhY2tQYXJ0OworICAgIGNhc2UgUVN0eWxlSW50
ZXJmYWNlOjpTQ19TY3JvbGxCYXJBZGRMaW5lOgorICAgICAgICByZXR1cm4gRm9yd2FyZEJ1dHRv
blN0YXJ0UGFydDsKKyAgICB9CisgICAgcmV0dXJuIE5vUGFydDsKK30KKworc3RhdGljIFFTdHls
ZUludGVyZmFjZU9wdGlvbiBpbml0U2xpZGVyU3R5bGVPcHRpb24oU2Nyb2xsYmFyVGhlbWVDbGll
bnQqIHNjcm9sbGJhciwgUU9iamVjdCogd2lkZ2V0ID0gMCkKK3sKKyAgICBRU3R5bGVJbnRlcmZh
Y2VPcHRpb24gb3B0OworICAgIGlmICh3aWRnZXQpIHsKKyAgICAgICAgb3B0LnBhbGV0dGUgPSB3
aWRnZXQtPnByb3BlcnR5KCJwYWxldHRlIikudmFsdWU8UVBhbGV0dGU+KCk7CisgICAgICAgIG9w
dC5yZWN0ID0gd2lkZ2V0LT5wcm9wZXJ0eSgicmVjdCIpLnZhbHVlPFFSZWN0PigpOworICAgICAg
ICBvcHQuZGlyZWN0aW9uID0gc3RhdGljX2Nhc3Q8UXQ6OkxheW91dERpcmVjdGlvbj4od2lkZ2V0
LT5wcm9wZXJ0eSgibGF5b3V0RGlyZWN0aW9uIikudG9JbnQoKSk7CisgICAgfSBlbHNlCisgICAg
ICAgIG9wdC5zdGF0ZSB8PSBRU3R5bGVJbnRlcmZhY2U6OlN0YXRlX0FjdGl2ZTsKKworICAgIG9w
dC5zdGF0ZSAmPSB+UVN0eWxlSW50ZXJmYWNlOjpTdGF0ZV9IYXNGb2N1czsKKworICAgIG9wdC5y
ZWN0ID0gc2Nyb2xsYmFyLT5mcmFtZVJlY3QoKTsKKyAgICBpZiAoc2Nyb2xsYmFyLT5lbmFibGVk
KCkpCisgICAgICAgIG9wdC5zdGF0ZSB8PSBRU3R5bGVJbnRlcmZhY2U6OlN0YXRlX0VuYWJsZWQ7
CisgICAgaWYgKHNjcm9sbGJhci0+Y29udHJvbFNpemUoKSAhPSBSZWd1bGFyU2Nyb2xsYmFyKQor
ICAgICAgICBvcHQuc3RhdGUgfD0gUVN0eWxlSW50ZXJmYWNlOjpTdGF0ZV9NaW5pOworICAgIG9w
dC5zbGlkZXIub3JpZW50YXRpb24gPSAoc2Nyb2xsYmFyLT5vcmllbnRhdGlvbigpID09IFZlcnRp
Y2FsU2Nyb2xsYmFyKSA/IFF0OjpWZXJ0aWNhbCA6IFF0OjpIb3Jpem9udGFsOworCisgICAgaWYg
KHNjcm9sbGJhci0+b3JpZW50YXRpb24oKSA9PSBIb3Jpem9udGFsU2Nyb2xsYmFyKQorICAgICAg
ICBvcHQuc3RhdGUgfD0gUVN0eWxlSW50ZXJmYWNlOjpTdGF0ZV9Ib3Jpem9udGFsOworICAgIGVs
c2UKKyAgICAgICAgb3B0LnN0YXRlICY9IH5RU3R5bGVJbnRlcmZhY2U6OlN0YXRlX0hvcml6b250
YWw7CisKKyAgICBvcHQuc2xpZGVyLnZhbHVlID0gc2Nyb2xsYmFyLT52YWx1ZSgpOworICAgIG9w
dC5zbGlkZXIucG9zaXRpb24gPSBvcHQuc2xpZGVyLnZhbHVlOworICAgIG9wdC5zbGlkZXIucGFn
ZVN0ZXAgPSBzY3JvbGxiYXItPnBhZ2VTdGVwKCk7CisgICAgb3B0LnNsaWRlci5zaW5nbGVTdGVw
ID0gc2Nyb2xsYmFyLT5saW5lU3RlcCgpOworICAgIG9wdC5zbGlkZXIubWluaW11bSA9IDA7Cisg
ICAgb3B0LnNsaWRlci5tYXhpbXVtID0gcU1heCgwLCBzY3JvbGxiYXItPm1heGltdW0oKSk7Cisg
ICAgU2Nyb2xsYmFyUGFydCBwcmVzc2VkUGFydCA9IHNjcm9sbGJhci0+cHJlc3NlZFBhcnQoKTsK
KyAgICBTY3JvbGxiYXJQYXJ0IGhvdmVyZWRQYXJ0ID0gc2Nyb2xsYmFyLT5ob3ZlcmVkUGFydCgp
OworICAgIGlmIChwcmVzc2VkUGFydCAhPSBOb1BhcnQpIHsKKyAgICAgICAgb3B0LnNsaWRlci5h
Y3RpdmVTdWJDb250cm9scyA9IHNjUGFydChzY3JvbGxiYXItPnByZXNzZWRQYXJ0KCkpOworICAg
ICAgICBpZiAocHJlc3NlZFBhcnQgPT0gQmFja0J1dHRvblN0YXJ0UGFydCB8fCBwcmVzc2VkUGFy
dCA9PSBGb3J3YXJkQnV0dG9uU3RhcnRQYXJ0CisgICAgICAgICAgICB8fCBwcmVzc2VkUGFydCA9
PSBCYWNrQnV0dG9uRW5kUGFydCB8fCBwcmVzc2VkUGFydCA9PSBGb3J3YXJkQnV0dG9uRW5kUGFy
dAorICAgICAgICAgICAgfHwgcHJlc3NlZFBhcnQgPT0gVGh1bWJQYXJ0KQorICAgICAgICAgICAg
b3B0LnN0YXRlIHw9IFFTdHlsZUludGVyZmFjZTo6U3RhdGVfU3Vua2VuOworICAgIH0gZWxzZQor
ICAgICAgICBvcHQuc2xpZGVyLmFjdGl2ZVN1YkNvbnRyb2xzID0gc2NQYXJ0KGhvdmVyZWRQYXJ0
KTsKKyAgICBpZiAoaG92ZXJlZFBhcnQgIT0gTm9QYXJ0KQorICAgICAgICBvcHQuc3RhdGUgfD0g
UVN0eWxlSW50ZXJmYWNlOjpTdGF0ZV9Nb3VzZU92ZXI7CisgICAgcmV0dXJuIG9wdDsKK30KKwor
Ym9vbCBTY3JvbGxiYXJUaGVtZVFTdHlsZTo6cGFpbnQoU2Nyb2xsYmFyVGhlbWVDbGllbnQqIHNj
cm9sbGJhciwgR3JhcGhpY3NDb250ZXh0KiBncmFwaGljc0NvbnRleHQsIGNvbnN0IEludFJlY3Qm
IGRpcnR5UmVjdCkKK3sKKyAgICBpZiAoZ3JhcGhpY3NDb250ZXh0LT51cGRhdGluZ0NvbnRyb2xU
aW50cygpKSB7CisgICAgICAgIHNjcm9sbGJhci0+aW52YWxpZGF0ZVJlY3QoZGlydHlSZWN0KTsK
KyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKworICAgIFN0eWxlUGFpbnRlclFTdHlsZSBw
KHRoaXMsIGdyYXBoaWNzQ29udGV4dCk7CisgICAgaWYgKCFwLmlzVmFsaWQoKSkKKyAgICAgICAg
cmV0dXJuIHRydWU7CisKKyAgICBwLnBhaW50ZXItPnNhdmUoKTsKKyAgICBwLnN0eWxlT3B0aW9u
ID0gaW5pdFNsaWRlclN0eWxlT3B0aW9uKHNjcm9sbGJhciwgcC53aWRnZXQpOworCisgICAgcC5w
YWludGVyLT5zZXRDbGlwUmVjdChwLnN0eWxlT3B0aW9uLnJlY3QuaW50ZXJzZWN0ZWQoZGlydHlS
ZWN0KSwgUXQ6OkludGVyc2VjdENsaXApOworICAgIHAucGFpbnRTY3JvbGxCYXIoKTsKKyAgICBw
LnBhaW50ZXItPnJlc3RvcmUoKTsKKyAgICByZXR1cm4gdHJ1ZTsKK30KKworU2Nyb2xsYmFyUGFy
dCBTY3JvbGxiYXJUaGVtZVFTdHlsZTo6aGl0VGVzdChTY3JvbGxiYXJUaGVtZUNsaWVudCogc2Ny
b2xsYmFyLCBjb25zdCBQbGF0Zm9ybU1vdXNlRXZlbnQmIGV2dCkKK3sKKyAgICBRU3R5bGVJbnRl
cmZhY2VPcHRpb24gb3B0ID0gaW5pdFNsaWRlclN0eWxlT3B0aW9uKHNjcm9sbGJhcik7CisgICAg
Y29uc3QgUVBvaW50IHBvcyA9IHNjcm9sbGJhci0+Y29udmVydEZyb21Db250YWluaW5nV2luZG93
KGV2dC5wb3NpdGlvbigpKTsKKyAgICBvcHQucmVjdC5tb3ZlVG8oUVBvaW50KDAsIDApKTsKKyAg
ICBRU3R5bGVJbnRlcmZhY2U6OlN1YkNvbnRyb2wgc2MgPSBtX3N0eWxlSW50ZXJmYWNlLT5oaXRU
ZXN0U2Nyb2xsQmFyKG9wdCwgcG9zKTsKKyAgICByZXR1cm4gc2Nyb2xsYmFyUGFydChzYyk7Cit9
CisKK2Jvb2wgU2Nyb2xsYmFyVGhlbWVRU3R5bGU6OnNob3VsZENlbnRlck9uVGh1bWIoU2Nyb2xs
YmFyVGhlbWVDbGllbnQqLCBjb25zdCBQbGF0Zm9ybU1vdXNlRXZlbnQmIGV2dCkKK3sKKyAgICAv
LyBNaWRkbGUgY2xpY2sgY2VudGVycyBzbGlkZXIgdGh1bWIgKGlmIHN1cHBvcnRlZCkuCisgICAg
cmV0dXJuIG1fc3R5bGVJbnRlcmZhY2UtPnNjcm9sbEJhck1pZGRsZUNsaWNrQWJzb2x1dGVQb3Np
dGlvblN0eWxlSGludCgpICYmIGV2dC5idXR0b24oKSA9PSBNaWRkbGVCdXR0b247Cit9CisKK3Zv
aWQgU2Nyb2xsYmFyVGhlbWVRU3R5bGU6OmludmFsaWRhdGVQYXJ0KFNjcm9sbGJhclRoZW1lQ2xp
ZW50KiBzY3JvbGxiYXIsIFNjcm9sbGJhclBhcnQpCit7CisgICAgLy8gRklYTUU6IERvIG1vcmUg
cHJlY2lzZSBpbnZhbGlkYXRpb24uCisgICAgc2Nyb2xsYmFyLT5pbnZhbGlkYXRlKCk7Cit9CisK
K2ludCBTY3JvbGxiYXJUaGVtZVFTdHlsZTo6c2Nyb2xsYmFyVGhpY2tuZXNzKFNjcm9sbGJhckNv
bnRyb2xTaXplIGNvbnRyb2xTaXplKQoreworICAgIGNvbnN0IGJvb2wgbWluaSA9IGNvbnRyb2xT
aXplICE9IFJlZ3VsYXJTY3JvbGxiYXI7CisgICAgcmV0dXJuIG1fc3R5bGVJbnRlcmZhY2UtPnNj
cm9sbEJhckV4dGVudChtaW5pKTsKK30KKworaW50IFNjcm9sbGJhclRoZW1lUVN0eWxlOjp0aHVt
YlBvc2l0aW9uKFNjcm9sbGJhclRoZW1lQ2xpZW50KiBzY3JvbGxiYXIpCit7CisgICAgaWYgKHNj
cm9sbGJhci0+ZW5hYmxlZCgpKSB7CisgICAgICAgIGZsb2F0IHBvcyA9IChmbG9hdClzY3JvbGxi
YXItPmN1cnJlbnRQb3MoKSAqICh0cmFja0xlbmd0aChzY3JvbGxiYXIpIC0gdGh1bWJMZW5ndGgo
c2Nyb2xsYmFyKSkgLyBzY3JvbGxiYXItPm1heGltdW0oKTsKKyAgICAgICAgcmV0dXJuIChwb3Mg
PCAxICYmIHBvcyA+IDApID8gMSA6IHBvczsKKyAgICB9CisgICAgcmV0dXJuIDA7Cit9CisKK2lu
dCBTY3JvbGxiYXJUaGVtZVFTdHlsZTo6dGh1bWJMZW5ndGgoU2Nyb2xsYmFyVGhlbWVDbGllbnQq
IHNjcm9sbGJhcikKK3sKKyAgICBRU3R5bGVJbnRlcmZhY2VPcHRpb24gb3B0ID0gaW5pdFNsaWRl
clN0eWxlT3B0aW9uKHNjcm9sbGJhcik7CisgICAgUVJlY3QgdGh1bWIgPSBtX3N0eWxlSW50ZXJm
YWNlLT5zY3JvbGxCYXJTdWJDb250cm9sUmVjdChvcHQsIFFTdHlsZUludGVyZmFjZTo6U0NfU2Ny
b2xsQmFyU2xpZGVyKTsKKyAgICByZXR1cm4gc2Nyb2xsYmFyLT5vcmllbnRhdGlvbigpID09IEhv
cml6b250YWxTY3JvbGxiYXIgPyB0aHVtYi53aWR0aCgpIDogdGh1bWIuaGVpZ2h0KCk7Cit9CisK
K2ludCBTY3JvbGxiYXJUaGVtZVFTdHlsZTo6dHJhY2tQb3NpdGlvbihTY3JvbGxiYXJUaGVtZUNs
aWVudCogc2Nyb2xsYmFyKQoreworICAgIFFTdHlsZUludGVyZmFjZU9wdGlvbiBvcHQgPSBpbml0
U2xpZGVyU3R5bGVPcHRpb24oc2Nyb2xsYmFyKTsKKyAgICBRUmVjdCB0cmFjayA9IG1fc3R5bGVJ
bnRlcmZhY2UtPnNjcm9sbEJhclN1YkNvbnRyb2xSZWN0KG9wdCwgUVN0eWxlSW50ZXJmYWNlOjpT
Q19TY3JvbGxCYXJHcm9vdmUpOworICAgIHJldHVybiBzY3JvbGxiYXItPm9yaWVudGF0aW9uKCkg
PT0gSG9yaXpvbnRhbFNjcm9sbGJhciA/IHRyYWNrLngoKSAtIHNjcm9sbGJhci0+eCgpIDogdHJh
Y2sueSgpIC0gc2Nyb2xsYmFyLT55KCk7Cit9CisKK2ludCBTY3JvbGxiYXJUaGVtZVFTdHlsZTo6
dHJhY2tMZW5ndGgoU2Nyb2xsYmFyVGhlbWVDbGllbnQqIHNjcm9sbGJhcikKK3sKKyAgICBRU3R5
bGVJbnRlcmZhY2VPcHRpb24gb3B0ID0gaW5pdFNsaWRlclN0eWxlT3B0aW9uKHNjcm9sbGJhcik7
CisgICAgUVJlY3QgdHJhY2sgPSBtX3N0eWxlSW50ZXJmYWNlLT5zY3JvbGxCYXJTdWJDb250cm9s
UmVjdChvcHQsIFFTdHlsZUludGVyZmFjZTo6U0NfU2Nyb2xsQmFyR3Jvb3ZlKTsKKyAgICByZXR1
cm4gc2Nyb2xsYmFyLT5vcmllbnRhdGlvbigpID09IEhvcml6b250YWxTY3JvbGxiYXIgPyB0cmFj
ay53aWR0aCgpIDogdHJhY2suaGVpZ2h0KCk7Cit9CisKK3ZvaWQgU2Nyb2xsYmFyVGhlbWVRU3R5
bGU6OnBhaW50U2Nyb2xsQ29ybmVyKFNjcm9sbFZpZXcqLCBHcmFwaGljc0NvbnRleHQqIGNvbnRl
eHQsIGNvbnN0IEludFJlY3QmIHJlY3QpCit7CisgICAgU3R5bGVQYWludGVyUVN0eWxlIHAodGhp
cywgY29udGV4dCk7CisgICAgaWYgKCFwLmlzVmFsaWQoKSkKKyAgICAgICAgcmV0dXJuOworCisg
ICAgcC5wYWludFNjcm9sbENvcm5lcihyZWN0KTsKK30KKworfQorCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9xdC9TY3JvbGxiYXJUaGVtZVFTdHlsZS5oIGIvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vcXQvU2Nyb2xsYmFyVGhlbWVRU3R5bGUuaApuZXcgZmlsZSBtb2RlIDEw
MDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi43MDcz
ZmIxNzBhZmVhZjk1NjJkYjQ5ZDY4MDQ2Y2E5ZmIyOTUzZTZhCi0tLSAvZGV2L251bGwKKysrIGIv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vcXQvU2Nyb2xsYmFyVGhlbWVRU3R5bGUuaApAQCAtMCww
ICsxLDY1IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA4IEFwcGxlIEluYy4gQWxsIFJpZ2h0
cyBSZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQg
YmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1p
dHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoK
KyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJv
dmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5
IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRo
ZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdp
dGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZ
IEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJS
QU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdB
UlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIK
KyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMu
IE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwg
SU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1B
R0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNV
QlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJP
RklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5Z
IFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElB
QklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBB
UklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVW
RU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKwor
I2lmbmRlZiBTY3JvbGxiYXJUaGVtZVFTdHlsZV9oCisjZGVmaW5lIFNjcm9sbGJhclRoZW1lUVN0
eWxlX2gKKworI2luY2x1ZGUgIlNjcm9sbGJhclRoZW1lLmgiCisKKyNpbmNsdWRlIDxRdENvcmUv
cWdsb2JhbC5oPgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK2NsYXNzIFFTdHlsZUludGVyZmFj
ZTsKKworY2xhc3MgU2Nyb2xsYmFyVGhlbWVRU3R5bGUgOiBwdWJsaWMgU2Nyb2xsYmFyVGhlbWUg
eworcHVibGljOgorICAgIFNjcm9sbGJhclRoZW1lUVN0eWxlKCk7CisgICAgdmlydHVhbCB+U2Ny
b2xsYmFyVGhlbWVRU3R5bGUoKTsKKworICAgIHZpcnR1YWwgYm9vbCBwYWludChTY3JvbGxiYXJU
aGVtZUNsaWVudCosIEdyYXBoaWNzQ29udGV4dCosIGNvbnN0IEludFJlY3QmIGRpcnR5UmVjdCk7
CisgICAgdmlydHVhbCB2b2lkIHBhaW50U2Nyb2xsQ29ybmVyKFNjcm9sbFZpZXcqLCBHcmFwaGlj
c0NvbnRleHQqLCBjb25zdCBJbnRSZWN0JiBjb3JuZXJSZWN0KTsKKworICAgIHZpcnR1YWwgU2Ny
b2xsYmFyUGFydCBoaXRUZXN0KFNjcm9sbGJhclRoZW1lQ2xpZW50KiwgY29uc3QgUGxhdGZvcm1N
b3VzZUV2ZW50Jik7CisKKyAgICB2aXJ0dWFsIGJvb2wgc2hvdWxkQ2VudGVyT25UaHVtYihTY3Jv
bGxiYXJUaGVtZUNsaWVudCosIGNvbnN0IFBsYXRmb3JtTW91c2VFdmVudCYpOworCisgICAgdmly
dHVhbCB2b2lkIGludmFsaWRhdGVQYXJ0KFNjcm9sbGJhclRoZW1lQ2xpZW50KiwgU2Nyb2xsYmFy
UGFydCk7CisKKyAgICB2aXJ0dWFsIGludCB0aHVtYlBvc2l0aW9uKFNjcm9sbGJhclRoZW1lQ2xp
ZW50Kik7CisgICAgdmlydHVhbCBpbnQgdGh1bWJMZW5ndGgoU2Nyb2xsYmFyVGhlbWVDbGllbnQq
KTsKKyAgICB2aXJ0dWFsIGludCB0cmFja1Bvc2l0aW9uKFNjcm9sbGJhclRoZW1lQ2xpZW50Kik7
CisgICAgdmlydHVhbCBpbnQgdHJhY2tMZW5ndGgoU2Nyb2xsYmFyVGhlbWVDbGllbnQqKTsKKwor
ICAgIHZpcnR1YWwgaW50IHNjcm9sbGJhclRoaWNrbmVzcyhTY3JvbGxiYXJDb250cm9sU2l6ZSA9
IFJlZ3VsYXJTY3JvbGxiYXIpOworCisgICAgUVN0eWxlSW50ZXJmYWNlKiBzdHlsZUludGVyZmFj
ZSgpIHsgcmV0dXJuIG1fc3R5bGVJbnRlcmZhY2UuZ2V0KCk7IH0KKworcHJpdmF0ZToKKyAgICBP
d25QdHI8UVN0eWxlSW50ZXJmYWNlPiBtX3N0eWxlSW50ZXJmYWNlOworfTsKKworfQorI2VuZGlm
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1dlYktpdDEucHJvIGIvU291cmNlL1dlYktpdC9X
ZWJLaXQxLnBybwppbmRleCBhZTIzYzRlY2E0NDEyYTA2NTIzYWJlYjY4MGFiODQzODA2NzliMjQ1
Li4zODBhNDkyMDZiMzZjMzk2YTAwODg3N2RkOWQ1ZmIwMmE5NzY5NzY0IDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViS2l0L1dlYktpdDEucHJvCisrKyBiL1NvdXJjZS9XZWJLaXQvV2ViS2l0MS5wcm8K
QEAgLTQ5LDEyICs0OSwxMSBAQCBTT1VSQ0VTICs9IFwKICAgICAkJFBXRC9xdC9XZWJDb3JlU3Vw
cG9ydC9QYWdlQ2xpZW50UXQuY3BwIFwKICAgICAkJFBXRC9xdC9XZWJDb3JlU3VwcG9ydC9Qb3B1
cE1lbnVRdC5jcHAgXAogICAgICQkUFdEL3F0L1dlYkNvcmVTdXBwb3J0L1F0UGxhdGZvcm1QbHVn
aW4uY3BwIFwKLSAgICAkJFBXRC9xdC9XZWJDb3JlU3VwcG9ydC9SZW5kZXJUaGVtZVFTdHlsZS5j
cHAgXAotICAgICQkUFdEL3F0L1dlYkNvcmVTdXBwb3J0L1Njcm9sbGJhclRoZW1lUVN0eWxlLmNw
cCBcCiAgICAgJCRQV0QvcXQvV2ViQ29yZVN1cHBvcnQvU2VhcmNoUG9wdXBNZW51UXQuY3BwIFwK
ICAgICAkJFBXRC9xdC9XZWJDb3JlU3VwcG9ydC9UZXh0Q2hlY2tlckNsaWVudFF0LmNwcCBcCiAg
ICAgJCRQV0QvcXQvV2ViQ29yZVN1cHBvcnQvUGxhdGZvcm1TdHJhdGVnaWVzUXQuY3BwIFwKLSAg
ICAkJFBXRC9xdC9XZWJDb3JlU3VwcG9ydC9XZWJFdmVudENvbnZlcnNpb24uY3BwCisgICAgJCRQ
V0QvcXQvV2ViQ29yZVN1cHBvcnQvV2ViRXZlbnRDb252ZXJzaW9uLmNwcCBcCisgICAgJCRQV0Qv
cXQvV2ViQ29yZVN1cHBvcnQvUVdlYlN0eWxlLmNwcCBcCiAKIEhFQURFUlMgKz0gXAogICAgICQk
UFdEL3F0L0FwaS9xd2ViZnJhbWUuaCBcCkBAIC04NywxMiArODYsMTEgQEAgSEVBREVSUyArPSBc
CiAgICAgJCRQV0QvcXQvV2ViQ29yZVN1cHBvcnQvUGFnZUNsaWVudFF0LmggXAogICAgICQkUFdE
L3F0L1dlYkNvcmVTdXBwb3J0L1BvcHVwTWVudVF0LmggXAogICAgICQkUFdEL3F0L1dlYkNvcmVT
dXBwb3J0L1F0UGxhdGZvcm1QbHVnaW4uaCBcCi0gICAgJCRQV0QvcXQvV2ViQ29yZVN1cHBvcnQv
UmVuZGVyVGhlbWVRU3R5bGUuaCBcCi0gICAgJCRQV0QvcXQvV2ViQ29yZVN1cHBvcnQvU2Nyb2xs
YmFyVGhlbWVRU3R5bGUuaCBcCiAgICAgJCRQV0QvcXQvV2ViQ29yZVN1cHBvcnQvU2VhcmNoUG9w
dXBNZW51UXQuaCBcCiAgICAgJCRQV0QvcXQvV2ViQ29yZVN1cHBvcnQvVGV4dENoZWNrZXJDbGll
bnRRdC5oIFwKICAgICAkJFBXRC9xdC9XZWJDb3JlU3VwcG9ydC9QbGF0Zm9ybVN0cmF0ZWdpZXNR
dC5oIFwKLSAgICAkJFBXRC9xdC9XZWJDb3JlU3VwcG9ydC9XZWJFdmVudENvbnZlcnNpb24uaAor
ICAgICQkUFdEL3F0L1dlYkNvcmVTdXBwb3J0L1dlYkV2ZW50Q29udmVyc2lvbi5oIFwKKyAgICAk
JFBXRC9xdC9XZWJDb3JlU3VwcG9ydC9RV2ViU3R5bGUuaAogCiBjb250YWlucyhRVF9DT05GSUcs
YWNjZXNzaWJpbGl0eSkgewogICAgIFNPVVJDRVMgKz0gJCRQV0QvcXQvQXBpL3F3ZWJ2aWV3YWNj
ZXNzaWJsZS5jcHAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvcXQvV2ViQ29yZVN1cHBvcnQv
SW5pdFdlYkNvcmVRdC5jcHAgYi9Tb3VyY2UvV2ViS2l0L3F0L1dlYkNvcmVTdXBwb3J0L0luaXRX
ZWJDb3JlUXQuY3BwCmluZGV4IGM2M2NjYjA0MmIwNTQzMmNlOTUyZjU1MTllNTBhNTIzNDg5N2U5
YzEuLjY3ZWQxMDk4OTYzMGMzN2RjMjRlNzIzNjBiY2RjMTljNmQ3ZWRmZWUgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJLaXQvcXQvV2ViQ29yZVN1cHBvcnQvSW5pdFdlYkNvcmVRdC5jcHAKKysrIGIv
U291cmNlL1dlYktpdC9xdC9XZWJDb3JlU3VwcG9ydC9Jbml0V2ViQ29yZVF0LmNwcApAQCAtMzMs
NiArMzMsNyBAQAogI2luY2x1ZGUgIkltYWdlLmgiCiAjaW5jbHVkZSAiTm90SW1wbGVtZW50ZWQu
aCIKICNpbmNsdWRlICJQbGF0Zm9ybVN0cmF0ZWdpZXNRdC5oIgorI2luY2x1ZGUgIlFXZWJTdHls
ZS5oIgogI2luY2x1ZGUgIlJlbmRlclRoZW1lUVN0eWxlLmgiCiAjaW5jbHVkZSAiU2NyaXB0Q29u
dHJvbGxlci5oIgogI2luY2x1ZGUgIlNjcm9sbGJhclRoZW1lUVN0eWxlLmgiCkBAIC03Niw2ICs3
Nyw3IEBAIHZvaWQgaW5pdGlhbGl6ZVdlYkNvcmVRdCgpCiAgICAgUGxhdGZvcm1TdHJhdGVnaWVz
UXQ6OmluaXRpYWxpemUoKTsKICAgICBRdFdlYkVsZW1lbnRSdW50aW1lOjppbml0aWFsaXplKCk7
CiAKKyAgICBSZW5kZXJUaGVtZVFTdHlsZTo6c2V0U3R5bGVGYWN0b3J5RnVuY3Rpb24oV2ViS2l0
OjpRV2ViU3R5bGU6OmNyZWF0ZSk7CiAgICAgUmVuZGVyVGhlbWVRdDo6c2V0Q3VzdG9tVGhlbWUo
UmVuZGVyVGhlbWVRU3R5bGU6OmNyZWF0ZSwgbmV3IFNjcm9sbGJhclRoZW1lUVN0eWxlKTsKIAog
I2lmIFVTRShRVEtJVCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvcXQvV2ViQ29yZVN1cHBv
cnQvUVdlYlN0eWxlLmNwcCBiL1NvdXJjZS9XZWJLaXQvcXQvV2ViQ29yZVN1cHBvcnQvUVdlYlN0
eWxlLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwLi4yZmY5ZWJiM2YwOTQ4YzliNWYyYmJlYTJmYmRlMWYzZjU3Njgx
NjZhCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYktpdC9xdC9XZWJDb3JlU3VwcG9ydC9R
V2ViU3R5bGUuY3BwCkBAIC0wLDAgKzEsNTQzIEBACisvKgorICogVGhpcyBmaWxlIGlzIHBhcnQg
b2YgdGhlIHRoZW1lIGltcGxlbWVudGF0aW9uIGZvciBmb3JtIGNvbnRyb2xzIGluIFdlYkNvcmUu
CisgKgorICogQ29weXJpZ2h0IChDKSAyMDEyIERpZ2lhIFBsYyBhbmQvb3IgaXRzIHN1YnNpZGlh
cnkoLWllcykuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTEtMjAxMiBOb2tpYSBDb3Jwb3JhdGlvbiBh
bmQvb3IgaXRzIHN1YnNpZGlhcnkoLWllcykuCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUg
c29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVu
ZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vu
c2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgor
ICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRl
ciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9w
ZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3
aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBv
ciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiBMaWJy
YXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ug
c2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1
YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENP
UFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bworICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRh
dGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKKyAqIEJvc3Rvbiwg
TUEgMDIxMTAtMTMwMSwgVVNBLgorICoKKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisKKyNp
bmNsdWRlICJRV2ViU3R5bGUuaCIKKworI2luY2x1ZGUgPFFBcHBsaWNhdGlvbj4KKyNpbmNsdWRl
IDxRTGluZUVkaXQ+CisjaW5jbHVkZSA8UU1hY1N0eWxlPgorI2luY2x1ZGUgPFFQYWludGVyPgor
I2luY2x1ZGUgPFFQdXNoQnV0dG9uPgorI2lmbmRlZiBRVF9OT19TVFlMRV9QTEFTVElRVUUKKyNp
bmNsdWRlIDxRUGxhc3RpcXVlU3R5bGU+CisjZW5kaWYKKyNpbmNsdWRlIDxRU3R5bGVGYWN0b3J5
PgorI2luY2x1ZGUgPFFTdHlsZU9wdGlvbj4KKworI2luY2x1ZGUgPFFXZWJQYWdlQ2xpZW50Lmg+
CisKK3VzaW5nIG5hbWVzcGFjZSBXZWJDb3JlOworCituYW1lc3BhY2UgV2ViS2l0IHsKKworc3Rh
dGljIFFTdHlsZTo6U3RhdGUgY29udmVydFRvUVN0eWxlU3RhdGUoUVN0eWxlSW50ZXJmYWNlOjpT
dGF0ZSBzdGF0ZSkKK3sKKyAgICBRU3R5bGU6OlN0YXRlIHJlc3VsdDsKKyNkZWZpbmUgQ09OVkVS
VF9TVEFURShQcm94aWVkU3RhdGUsIFZhbHVlKSBcCisgICAgaWYgKHN0YXRlICYgUVN0eWxlSW50
ZXJmYWNlOjpQcm94aWVkU3RhdGUpIFwKKyAgICAgICAgcmVzdWx0IHw9IFFTdHlsZTo6UHJveGll
ZFN0YXRlOworCisgICAgRk9SX0VBQ0hfTUFQUEVEX1NUQVRFKENPTlZFUlRfU1RBVEUsICkKKwor
I3VuZGVmIENPTlZFUlRfU1RBVEUKKworICAgIHJldHVybiByZXN1bHQ7Cit9CisKK3N0YXRpYyBR
U3R5bGU6OlN1YkNvbnRyb2wgY29udmVydFRvUVN0eWxlU3ViQ29udHJvbChRU3R5bGVJbnRlcmZh
Y2U6OlN1YkNvbnRyb2wgc2MpCit7CisjZGVmaW5lIENPTlZFUlRfU1VCQ09OVFJPTChGLCBWYWx1
ZSkgXAorICAgIGNhc2UgUVN0eWxlSW50ZXJmYWNlOjpGOiByZXR1cm4gUVN0eWxlOjpGCisKKyAg
ICBzd2l0Y2ggKHNjKSB7CisgICAgICAgIEZPUl9FQUNIX1NVQkNPTlRST0woQ09OVkVSVF9TVUJD
T05UUk9MLCBTRU1JQ09MT04pOworICAgIH0KKyAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAg
ICByZXR1cm4gUVN0eWxlOjpTQ19Ob25lOworI3VuZGVmIENPTlZFUlRfU1VCQ09OVFJPTAorfQor
CitzdGF0aWMgdm9pZCBpbml0R2VuZXJpY1N0eWxlT3B0aW9uKFFTdHlsZU9wdGlvbiogb3B0aW9u
LCBRV2lkZ2V0KiB3aWRnZXQsIGNvbnN0IFFTdHlsZUludGVyZmFjZU9wdGlvbiYgaW50ZXJmYWNl
T3B0aW9uKQoreworICAgIGlmICh3aWRnZXQpCisgICAgICAgIG9wdGlvbi0+aW5pdCh3aWRnZXQp
OworICAgIGVsc2UKKyAgICAgICAgLy8gSWYgYSB3aWRnZXQgaXMgbm90IGRpcmVjdGx5IGF2YWls
YWJsZSBmb3IgcmVuZGVyaW5nLCB3ZSBmYWxsYmFjayB0byBkZWZhdWx0CisgICAgICAgIC8vIHZh
bHVlIGZvciBhbiBhY3RpdmUgd2lkZ2V0LgorICAgICAgICBvcHRpb24tPnN0YXRlID0gUVN0eWxl
OjpTdGF0ZV9BY3RpdmUgfCBRU3R5bGU6OlN0YXRlX0VuYWJsZWQ7CisKKyAgICBvcHRpb24tPnJl
Y3QgPSBpbnRlcmZhY2VPcHRpb24ucmVjdDsKKyAgICBvcHRpb24tPnN0YXRlID0gY29udmVydFRv
UVN0eWxlU3RhdGUoaW50ZXJmYWNlT3B0aW9uLnN0YXRlKTsKKyAgICBvcHRpb24tPmRpcmVjdGlv
biA9IGludGVyZmFjZU9wdGlvbi5kaXJlY3Rpb247CisgICAgb3B0aW9uLT5wYWxldHRlID0gaW50
ZXJmYWNlT3B0aW9uLnBhbGV0dGU7Cit9CisKK3N0YXRpYyB2b2lkIGluaXRTcGVjaWZpY1N0eWxl
T3B0aW9uKFFTdHlsZU9wdGlvbiosIGNvbnN0IFFTdHlsZUludGVyZmFjZU9wdGlvbiYpCit7Cit9
CisKK3N0YXRpYyB2b2lkIGluaXRTcGVjaWZpY1N0eWxlT3B0aW9uKFFTdHlsZU9wdGlvblNsaWRl
ciogc2xpZGVyT3B0aW9uLCBjb25zdCBRU3R5bGVJbnRlcmZhY2VPcHRpb24mIGludGVyZmFjZU9w
dGlvbikKK3sKKyAgICBzbGlkZXJPcHRpb24tPm9yaWVudGF0aW9uID0gaW50ZXJmYWNlT3B0aW9u
LnNsaWRlci5vcmllbnRhdGlvbjsKKyAgICBzbGlkZXJPcHRpb24tPnVwc2lkZURvd24gPSBpbnRl
cmZhY2VPcHRpb24uc2xpZGVyLnVwc2lkZURvd247CisgICAgc2xpZGVyT3B0aW9uLT5taW5pbXVt
ID0gaW50ZXJmYWNlT3B0aW9uLnNsaWRlci5taW5pbXVtOworICAgIHNsaWRlck9wdGlvbi0+bWF4
aW11bSA9IGludGVyZmFjZU9wdGlvbi5zbGlkZXIubWF4aW11bTsKKyAgICBzbGlkZXJPcHRpb24t
PnNsaWRlclBvc2l0aW9uID0gaW50ZXJmYWNlT3B0aW9uLnNsaWRlci5wb3NpdGlvbjsKKyAgICBz
bGlkZXJPcHRpb24tPnNsaWRlclZhbHVlID0gaW50ZXJmYWNlT3B0aW9uLnNsaWRlci52YWx1ZTsK
KyAgICBzbGlkZXJPcHRpb24tPnNpbmdsZVN0ZXAgPSBpbnRlcmZhY2VPcHRpb24uc2xpZGVyLnNp
bmdsZVN0ZXA7CisgICAgc2xpZGVyT3B0aW9uLT5wYWdlU3RlcCA9IGludGVyZmFjZU9wdGlvbi5z
bGlkZXIucGFnZVN0ZXA7CisgICAgc2xpZGVyT3B0aW9uLT5hY3RpdmVTdWJDb250cm9scyA9IGNv
bnZlcnRUb1FTdHlsZVN1YkNvbnRyb2woaW50ZXJmYWNlT3B0aW9uLnNsaWRlci5hY3RpdmVTdWJD
b250cm9scyk7Cit9CisKK3RlbXBsYXRlIDx0eXBlbmFtZSBTdHlsZU9wdGlvbj4KK2NsYXNzIE1h
cHBlZFN0eWxlT3B0aW9uIDogcHVibGljIFN0eWxlT3B0aW9uIHsKKworcHVibGljOgorICAgIE1h
cHBlZFN0eWxlT3B0aW9uKFFXaWRnZXQqIHdpZGdldCwgY29uc3QgUVN0eWxlSW50ZXJmYWNlT3B0
aW9uJiBpbnRlcmZhY2VPcHRpb24pCisgICAgeworICAgICAgICBpbml0R2VuZXJpY1N0eWxlT3B0
aW9uKHRoaXMsIHdpZGdldCwgaW50ZXJmYWNlT3B0aW9uKTsKKyAgICAgICAgaW5pdFNwZWNpZmlj
U3R5bGVPcHRpb24odGhpcywgaW50ZXJmYWNlT3B0aW9uKTsKKyAgICB9Cit9OworCitzdGF0aWMg
UVN0eWxlOjpQaXhlbE1ldHJpYyBjb252ZXJ0UGl4ZWxNZXRyaWMoUVN0eWxlSW50ZXJmYWNlOjpQ
aXhlbE1ldHJpYyBzdGF0ZSkKK3sKKyNkZWZpbmUgQ09OVkVSVF9NRVRSSUMoTWV0cmljKSBcCisg
ICAgY2FzZSBRU3R5bGVJbnRlcmZhY2U6Ok1ldHJpYzogcmV0dXJuIFFTdHlsZTo6TWV0cmljCisK
KyAgICBzd2l0Y2ggKHN0YXRlKSB7CisgICAgICAgIEZPUl9FQUNIX01BUFBFRF9NRVRSSUMoQ09O
VkVSVF9NRVRSSUMsIFNFTUlDT0xPTik7CisgICAgfQorICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgp
OworICAgIHJldHVybiBRU3R5bGU6OlBNX0N1c3RvbUJhc2U7CisKKyN1bmRlZiBDT05WRVJUX01F
VFJJQworfQorCitzdGF0aWMgUVN0eWxlSW50ZXJmYWNlOjpTdWJDb250cm9sIGNvbnZlcnRUb1FT
dHlsZUludGVyZmFjZVN1YkNvbnRyb2woUVN0eWxlOjpTdWJDb250cm9sIHNjKQoreworI2RlZmlu
ZSBDT05WRVJUX1NVQkNPTlRST0woRiwgVmFsdWUpIFwKKyAgICBjYXNlIFFTdHlsZTo6RjogcmV0
dXJuIFFTdHlsZUludGVyZmFjZTo6RgorCisgICAgc3dpdGNoIChzYykgeworICAgICAgICBGT1Jf
RUFDSF9TVUJDT05UUk9MKENPTlZFUlRfU1VCQ09OVFJPTCwgU0VNSUNPTE9OKTsKKyAgICB9Cisg
ICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgcmV0dXJuIFFTdHlsZUludGVyZmFjZTo6U0Nf
Tm9uZTsKKyN1bmRlZiBDT05WRVJUX1NVQkNPTlRST0wKK30KKworUVdlYlN0eWxlOjpRV2ViU3R5
bGUoUGFnZSogcGFnZSkKKyAgICA6IG1fcGFnZShwYWdlKQorICAgICwgbV9zdHlsZSgwKQorewor
ICAgIG1fZmFsbGJhY2tTdHlsZSA9IFFTdHlsZUZhY3Rvcnk6OmNyZWF0ZShRTGF0aW4xU3RyaW5n
KCJ3aW5kb3dzIikpOworICAgIG1fb3duRmFsbGJhY2tTdHlsZSA9IHRydWU7CisgICAgaWYgKCFt
X2ZhbGxiYWNrU3R5bGUpIHsKKyAgICAgICAgbV9mYWxsYmFja1N0eWxlID0gUUFwcGxpY2F0aW9u
OjpzdHlsZSgpOworICAgICAgICBtX293bkZhbGxiYWNrU3R5bGUgPSBmYWxzZTsKKyAgICB9Cit9
CisKK1FXZWJTdHlsZTo6flFXZWJTdHlsZSgpCit7CisgICAgaWYgKG1fb3duRmFsbGJhY2tTdHls
ZSkKKyAgICAgICAgZGVsZXRlIG1fZmFsbGJhY2tTdHlsZTsKK30KKworUVJlY3QgUVdlYlN0eWxl
OjpidXR0b25TdWJFbGVtZW50UmVjdChRU3R5bGVJbnRlcmZhY2U6OkJ1dHRvblN1YkVsZW1lbnQg
YnV0dG9uRWxlbWVudCwgU3RhdGUgc3RhdGUsIGNvbnN0IFFSZWN0JiBvcmlnaW5hbFJlY3QpIGNv
bnN0Cit7CisgICAgZW5zdXJlU3R5bGUoKTsKKworICAgIFFTdHlsZU9wdGlvbkJ1dHRvbiBvcHRp
b247CisgICAgb3B0aW9uLnN0YXRlID0gY29udmVydFRvUVN0eWxlU3RhdGUoc3RhdGUpOworICAg
IG9wdGlvbi5yZWN0ID0gb3JpZ2luYWxSZWN0OworCisgICAgUVN0eWxlOjpTdWJFbGVtZW50IHN1
YkVsZW1lbnQgPSBRU3R5bGU6OlNFX0N1c3RvbUJhc2U7CisgICAgc3dpdGNoIChidXR0b25FbGVt
ZW50KSB7CisgICAgY2FzZSBQdXNoQnV0dG9uTGF5b3V0SXRlbTogc3ViRWxlbWVudCA9IFFTdHls
ZTo6U0VfUHVzaEJ1dHRvbkxheW91dEl0ZW07IGJyZWFrOworICAgIGNhc2UgUHVzaEJ1dHRvbkNv
bnRlbnRzOiBzdWJFbGVtZW50ID0gUVN0eWxlOjpTRV9QdXNoQnV0dG9uQ29udGVudHM7IGJyZWFr
OworICAgIGRlZmF1bHQ6IEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgIH0KKyAgICByZXR1cm4g
bV9zdHlsZS0+c3ViRWxlbWVudFJlY3Qoc3ViRWxlbWVudCwgJm9wdGlvbik7Cit9CisKK2ludCBR
V2ViU3R5bGU6OmZpbmRGcmFtZUxpbmVXaWR0aCgpIGNvbnN0Cit7CisgICAgZW5zdXJlU3R5bGUo
KTsKKworICAgIGlmICghbV9saW5lRWRpdCkKKyAgICAgICAgbV9saW5lRWRpdC5yZXNldChuZXcg
UUxpbmVFZGl0KCkpOworCisgICAgcmV0dXJuIG1fc3R5bGUtPnBpeGVsTWV0cmljKFFTdHlsZTo6
UE1fRGVmYXVsdEZyYW1lV2lkdGgsIDAsIG1fbGluZUVkaXQuZGF0YSgpKTsKK30KKworaW50IFFX
ZWJTdHlsZTo6c2ltcGxlUGl4ZWxNZXRyaWMoUVN0eWxlSW50ZXJmYWNlOjpQaXhlbE1ldHJpYyBt
ZXRyaWMsIFN0YXRlIHN0YXRlLCBRT2JqZWN0ICp3aWRnZXQpIGNvbnN0Cit7CisgICAgZW5zdXJl
U3R5bGUoKTsKKworICAgIFFTdHlsZU9wdGlvbiBvcHQ7CisgICAgb3B0LnN0YXRlID0gY29udmVy
dFRvUVN0eWxlU3RhdGUoc3RhdGUpOworICAgIHJldHVybiBtX3N0eWxlLT5waXhlbE1ldHJpYyhj
b252ZXJ0UGl4ZWxNZXRyaWMobWV0cmljKSwgJm9wdCwgcW9iamVjdF9jYXN0PFFXaWRnZXQqPih3
aWRnZXQpKTsKK30KKworaW50IFFXZWJTdHlsZTo6YnV0dG9uTWFyZ2luKFN0YXRlIHN0YXRlLCBj
b25zdCBRUmVjdCYgb3JpZ2luYWxSZWN0KSBjb25zdAoreworICAgIGVuc3VyZVN0eWxlKCk7CisK
KyAgICBRU3R5bGVPcHRpb25CdXR0b24gc3R5bGVPcHRpb247CisgICAgc3R5bGVPcHRpb24uc3Rh
dGUgPSBjb252ZXJ0VG9RU3R5bGVTdGF0ZShzdGF0ZSk7CisgICAgc3R5bGVPcHRpb24ucmVjdCA9
IG9yaWdpbmFsUmVjdDsKKyAgICByZXR1cm4gbV9zdHlsZS0+cGl4ZWxNZXRyaWMoUVN0eWxlOjpQ
TV9CdXR0b25NYXJnaW4sICZzdHlsZU9wdGlvbiwgMCk7Cit9CisKK2ludCBRV2ViU3R5bGU6OnNs
aWRlckxlbmd0aChRdDo6T3JpZW50YXRpb24gb3JpZW50YXRpb24pIGNvbnN0Cit7CisgICAgZW5z
dXJlU3R5bGUoKTsKKworICAgIFFTdHlsZU9wdGlvblNsaWRlciBvcHQ7CisgICAgb3B0Lm9yaWVu
dGF0aW9uID0gb3JpZW50YXRpb247CisgICAgcmV0dXJuIG1fc3R5bGUtPnBpeGVsTWV0cmljKFFT
dHlsZTo6UE1fU2xpZGVyTGVuZ3RoLCAmb3B0KTsKK30KKworaW50IFFXZWJTdHlsZTo6c2xpZGVy
VGhpY2tuZXNzKFF0OjpPcmllbnRhdGlvbiBvcmllbnRhdGlvbikgY29uc3QKK3sKKyAgICBlbnN1
cmVTdHlsZSgpOworCisgICAgUVN0eWxlT3B0aW9uU2xpZGVyIG9wdDsKKyAgICBvcHQub3JpZW50
YXRpb24gPSBvcmllbnRhdGlvbjsKKyAgICByZXR1cm4gbV9zdHlsZS0+cGl4ZWxNZXRyaWMoUVN0
eWxlOjpQTV9TbGlkZXJUaGlja25lc3MsICZvcHQpOworfQorCitpbnQgUVdlYlN0eWxlOjpwcm9n
cmVzc0JhckNodW5rV2lkdGgoY29uc3QgUVNpemUmIHNpemUpIGNvbnN0Cit7CisgICAgZW5zdXJl
U3R5bGUoKTsKKworICAgIFFTdHlsZU9wdGlvblByb2dyZXNzQmFyVjIgb3B0aW9uOworICAgIG9w
dGlvbi5yZWN0LnNldFNpemUoc2l6ZSk7CisgICAgLy8gRklYTUU6IFVudGlsIGh0dHA6Ly9idWdy
ZXBvcnRzLnF0Lm5va2lhLmNvbS9icm93c2UvUVRCVUctOTE3MSBpcyBmaXhlZCwKKyAgICAvLyB3
ZSBzaW11bGF0ZSBvbmUgc3F1YXJlIGFuaW1hdGluZyBhY3Jvc3MgdGhlIHByb2dyZXNzIGJhci4K
KyAgICByZXR1cm4gbV9zdHlsZS0+cGl4ZWxNZXRyaWMoUVN0eWxlOjpQTV9Qcm9ncmVzc0JhckNo
dW5rV2lkdGgsICZvcHRpb24pOworfQorCit2b2lkIFFXZWJTdHlsZTo6Z2V0QnV0dG9uTWV0cmlj
cyhRU3RyaW5nICpidXR0b25Gb250RmFtaWx5LCBpbnQgKmJ1dHRvbkZvbnRQaXhlbFNpemUpIGNv
bnN0Cit7CisgICAgUVB1c2hCdXR0b24gYnV0dG9uOworICAgIFFGb250IGRlZmF1bHRCdXR0b25G
b250ID0gUUFwcGxpY2F0aW9uOjpmb250KCZidXR0b24pOworICAgICpidXR0b25Gb250RmFtaWx5
ID0gZGVmYXVsdEJ1dHRvbkZvbnQuZmFtaWx5KCk7CisgICAgKmJ1dHRvbkZvbnRQaXhlbFNpemUg
PSAwOworI2lmZGVmIFFfV1NfTUFDCisgICAgYnV0dG9uLnNldEF0dHJpYnV0ZShRdDo6V0FfTWFj
U21hbGxTaXplKTsKKyAgICBRRm9udEluZm8gZm9udEluZm8oZGVmYXVsdEJ1dHRvbkZvbnQpOwor
ICAgICpidXR0b25Gb250UGl4ZWxTaXplID0gZm9udEluZm8ucGl4ZWxTaXplKCk7CisjZW5kaWYK
K30KKworUVNpemUgUVdlYlN0eWxlOjpzaXplRnJvbUNvbnRlbnRzKFFTdHlsZUludGVyZmFjZTo6
Q29udGVudHNUeXBlIHR5cGUsIFFTdHlsZUludGVyZmFjZTo6U3RhdGUgc3RhdGUsIGNvbnN0IFFT
aXplJiBjb250ZW50c1NpemUpIGNvbnN0Cit7CisgICAgZW5zdXJlU3R5bGUoKTsKKworICAgIFFT
dHlsZU9wdGlvbiBvcHQ7CisgICAgb3B0LnN0YXRlID0gY29udmVydFRvUVN0eWxlU3RhdGUoc3Rh
dGUpOworCisgICAgUVN0eWxlOjpDb250ZW50c1R5cGUgY29udGVudHNUeXBlID0gUVN0eWxlOjpD
VF9DdXN0b21CYXNlOworICAgIHN3aXRjaCAodHlwZSkgeworICAgIGNhc2UgUVN0eWxlSW50ZXJm
YWNlOjpDVF9Db21ib0JveDogY29udGVudHNUeXBlID0gUVN0eWxlOjpDVF9Db21ib0JveDsgYnJl
YWs7CisgICAgY2FzZSBRU3R5bGVJbnRlcmZhY2U6OkNUX1B1c2hCdXR0b246IGNvbnRlbnRzVHlw
ZSA9IFFTdHlsZTo6Q1RfUHVzaEJ1dHRvbjsgYnJlYWs7CisgICAgfQorCisgICAgcmV0dXJuIG1f
c3R5bGUtPnNpemVGcm9tQ29udGVudHMoY29udGVudHNUeXBlLCAmb3B0LCBjb250ZW50c1NpemUp
OworfQorCit2b2lkIFFXZWJTdHlsZTo6cGFpbnRCdXR0b24oUVBhaW50ZXIqIHBhaW50ZXIsIFFT
dHlsZUludGVyZmFjZTo6QnV0dG9uVHlwZSB0eXBlLCBjb25zdCBRU3R5bGVJbnRlcmZhY2VPcHRp
b24gJnByb3h5T3B0aW9uLCBRT2JqZWN0ICp3aWRnZXRPYmopCit7CisgICAgZW5zdXJlU3R5bGUo
KTsKKworICAgIFFXaWRnZXQqIHdpZGdldCA9IHFvYmplY3RfY2FzdDxRV2lkZ2V0Kj4od2lkZ2V0
T2JqKTsKKyAgICBNYXBwZWRTdHlsZU9wdGlvbjxRU3R5bGVPcHRpb25CdXR0b24+IG9wdGlvbih3
aWRnZXQsIHByb3h5T3B0aW9uKTsKKworICAgIGlmICh0eXBlID09IFB1c2hCdXR0b24pIHsKKyAg
ICAgICAgbV9zdHlsZS0+ZHJhd0NvbnRyb2woUVN0eWxlOjpDRV9QdXNoQnV0dG9uLCAmb3B0aW9u
LCBwYWludGVyLCB3aWRnZXQpOworICAgIH0gZWxzZSBpZiAodHlwZSA9PSBSYWRpb0J1dHRvbikK
KyAgICAgICBtX3N0eWxlLT5kcmF3Q29udHJvbChRU3R5bGU6OkNFX1JhZGlvQnV0dG9uLCAmb3B0
aW9uLCBwYWludGVyLCB3aWRnZXQpOworICAgIGVsc2UgaWYgKHR5cGUgPT0gQ2hlY2tCb3gpCisg
ICAgICAgIG1fc3R5bGUtPmRyYXdDb250cm9sKFFTdHlsZTo6Q0VfQ2hlY2tCb3gsICZvcHRpb24s
IHBhaW50ZXIsIHdpZGdldCk7Cit9CisKK3ZvaWQgUVdlYlN0eWxlOjpwYWludFRleHRGaWVsZChR
UGFpbnRlciAqcGFpbnRlciwgY29uc3QgUVN0eWxlSW50ZXJmYWNlT3B0aW9uICZwcm94eU9wdGlv
biwgUU9iamVjdCAqd2lkZ2V0T2JqKQoreworICAgIGVuc3VyZVN0eWxlKCk7CisKKyAgICBRV2lk
Z2V0KiB3aWRnZXQgPSBxb2JqZWN0X2Nhc3Q8UVdpZGdldCo+KHdpZGdldE9iaik7CisKKyAgICBN
YXBwZWRTdHlsZU9wdGlvbjxRU3R5bGVPcHRpb25GcmFtZVYyPiBwYW5lbCh3aWRnZXQsIHByb3h5
T3B0aW9uKTsKKworICAgIHBhbmVsLmxpbmVXaWR0aCA9IGZpbmRGcmFtZUxpbmVXaWR0aCgpOwor
ICAgIHBhbmVsLmZlYXR1cmVzID0gUVN0eWxlT3B0aW9uRnJhbWVWMjo6Tm9uZTsKKworICAgIG1f
c3R5bGUtPmRyYXdQcmltaXRpdmUoUVN0eWxlOjpQRV9QYW5lbExpbmVFZGl0LCAmcGFuZWwsIHBh
aW50ZXIsIHdpZGdldCk7Cit9CisKK3ZvaWQgUVdlYlN0eWxlOjpwYWludENvbWJvQm94KFFQYWlu
dGVyICpwYWludGVyLCBjb25zdCBRU3R5bGVJbnRlcmZhY2VPcHRpb24gJnByb3h5T3B0aW9uLCBR
T2JqZWN0KiB3aWRnZXRPYmopCit7CisgICAgZW5zdXJlU3R5bGUoKTsKKyAgICBRV2lkZ2V0KiB3
aWRnZXQgPSBxb2JqZWN0X2Nhc3Q8UVdpZGdldCo+KHdpZGdldE9iaik7CisKKyAgICBNYXBwZWRT
dHlsZU9wdGlvbjxRU3R5bGVPcHRpb25Db21ib0JveD4gb3B0KHdpZGdldCwgcHJveHlPcHRpb24p
OworCisgICAgSW50UmVjdCByZWN0ID0gb3B0LnJlY3Q7CisKKyNpZiBkZWZpbmVkKFFfV1NfTUFD
KSAmJiAhZGVmaW5lZChRVF9OT19TVFlMRV9NQUMpCisgICAgLy8gUU1hY1N0eWxlIG1ha2VzIHRo
ZSBjb21ibyBib3hlcyBhIGxpdHRsZSBiaXQgc21hbGxlciB0byBsZWF2ZSBzcGFjZSBmb3IgdGhl
IGZvY3VzIHJlY3QuCisgICAgLy8gQmVjYXVzZSBvZiBpdCwgdGhlIGNvbWJvIGJ1dHRvbiBpcyBk
cmF3biBhdCBhIHBvaW50IHRvIHRoZSBsZWZ0IG9mIHdoZXJlIGl0IHdhcyBleHBlY3QgdG8gYmUg
YW5kIG1heSBlbmQgdXAKKyAgICAvLyBvdmVybGFwcGVkIHdpdGggdGhlIHRleHQuIFRoaXMgd2ls
bCBmb3JjZSBRTWFjU3R5bGUgdG8gZHJhdyB0aGUgY29tYm8gYm94IHdpdGggdGhlIGV4cGVjdGVk
IHdpZHRoLgorICAgIGlmIChxb2JqZWN0X2Nhc3Q8UU1hY1N0eWxlKj4obV9zdHlsZSkpCisgICAg
ICAgIHJlY3QuaW5mbGF0ZVgoMyk7CisjZW5kaWYKKworICAgIGNvbnN0IFFQb2ludCB0b3BMZWZ0
ID0gcmVjdC5sb2NhdGlvbigpOworICAgIHBhaW50ZXItPnRyYW5zbGF0ZSh0b3BMZWZ0KTsKKyAg
ICBvcHQucmVjdC5tb3ZlVG8oUVBvaW50KDAsIDApKTsKKyAgICBvcHQucmVjdC5zZXRTaXplKHJl
Y3Quc2l6ZSgpKTsKKworICAgIG1fc3R5bGUtPmRyYXdDb21wbGV4Q29udHJvbChRU3R5bGU6OkND
X0NvbWJvQm94LCAmb3B0LCBwYWludGVyLCB3aWRnZXQpOworICAgIHBhaW50ZXItPnRyYW5zbGF0
ZSgtdG9wTGVmdCk7Cit9CisKK3ZvaWQgUVdlYlN0eWxlOjpwYWludENvbWJvQm94QXJyb3coUVBh
aW50ZXIgKnBhaW50ZXIsIGNvbnN0IFFTdHlsZUludGVyZmFjZU9wdGlvbiAmcHJveHlPcHRpb24s
IFFPYmplY3QgKndpZGdldE9iaikKK3sKKyAgICBlbnN1cmVTdHlsZSgpOworICAgIFFXaWRnZXQq
IHdpZGdldCA9IHFvYmplY3RfY2FzdDxRV2lkZ2V0Kj4od2lkZ2V0T2JqKTsKKworICAgIE1hcHBl
ZFN0eWxlT3B0aW9uPFFTdHlsZU9wdGlvbkNvbWJvQm94PiBvcHQod2lkZ2V0LCBwcm94eU9wdGlv
bik7CisgICAgb3B0LnN1YkNvbnRyb2xzID0gUVN0eWxlOjpTQ19Db21ib0JveEFycm93OworICAg
IC8vIGZvciBkcmF3aW5nIHRoZSBjb21ibyBib3ggYXJyb3csIHJlbHkgb25seSBvbiB0aGUgZmFs
bGJhY2sgc3R5bGUKKyAgICBtX2ZhbGxiYWNrU3R5bGUtPmRyYXdDb21wbGV4Q29udHJvbChRU3R5
bGU6OkNDX0NvbWJvQm94LCAmb3B0LCBwYWludGVyLCB3aWRnZXQpOworfQorCit2b2lkIFFXZWJT
dHlsZTo6cGFpbnRTbGlkZXJUcmFjayhRUGFpbnRlciogcGFpbnRlciwgY29uc3QgUVN0eWxlSW50
ZXJmYWNlT3B0aW9uJiBwcm94eU9wdGlvbiwgUU9iamVjdCAqd2lkZ2V0T2JqKQoreworICAgIGVu
c3VyZVN0eWxlKCk7CisgICAgUVdpZGdldCogd2lkZ2V0ID0gcW9iamVjdF9jYXN0PFFXaWRnZXQq
Pih3aWRnZXRPYmopOworCisgICAgTWFwcGVkU3R5bGVPcHRpb248UVN0eWxlT3B0aW9uU2xpZGVy
PiBvcHRpb24od2lkZ2V0LCBwcm94eU9wdGlvbik7CisgICAgb3B0aW9uLnN1YkNvbnRyb2xzID0g
UVN0eWxlOjpTQ19TbGlkZXJHcm9vdmU7CisKKyAgICBvcHRpb24udXBzaWRlRG93biA9IHByb3h5
T3B0aW9uLnNsaWRlci51cHNpZGVEb3duOworICAgIG9wdGlvbi5taW5pbXVtID0gcHJveHlPcHRp
b24uc2xpZGVyLm1pbmltdW07CisgICAgb3B0aW9uLm1heGltdW0gPSBwcm94eU9wdGlvbi5zbGlk
ZXIubWF4aW11bTsKKyAgICBvcHRpb24uc2xpZGVyUG9zaXRpb24gPSBwcm94eU9wdGlvbi5zbGlk
ZXIucG9zaXRpb247CisgICAgb3B0aW9uLm9yaWVudGF0aW9uID0gcHJveHlPcHRpb24uc2xpZGVy
Lm9yaWVudGF0aW9uOworCisgICAgbV9zdHlsZS0+ZHJhd0NvbXBsZXhDb250cm9sKFFTdHlsZTo6
Q0NfU2xpZGVyLCAmb3B0aW9uLCBwYWludGVyLCB3aWRnZXQpOworCisgICAgaWYgKG9wdGlvbi5z
dGF0ZSAmIFFTdHlsZTo6U3RhdGVfSGFzRm9jdXMpIHsKKyAgICAgICAgUVN0eWxlT3B0aW9uRm9j
dXNSZWN0IGZvY3VzT3B0aW9uOworICAgICAgICBmb2N1c09wdGlvbi5yZWN0ID0gb3B0aW9uLnJl
Y3Q7CisgICAgICAgIG1fc3R5bGUtPmRyYXdQcmltaXRpdmUoUVN0eWxlOjpQRV9GcmFtZUZvY3Vz
UmVjdCwgJmZvY3VzT3B0aW9uLCBwYWludGVyLCB3aWRnZXQpOworICAgIH0KK30KKwordm9pZCBR
V2ViU3R5bGU6OnBhaW50U2xpZGVyVGh1bWIoUVBhaW50ZXIqIHBhaW50ZXIsIGNvbnN0IFFTdHls
ZUludGVyZmFjZU9wdGlvbiYgcHJveHlPcHRpb24sIFFPYmplY3QgKndpZGdldE9iaikKK3sKKyAg
ICBlbnN1cmVTdHlsZSgpOworICAgIFFXaWRnZXQqIHdpZGdldCA9IHFvYmplY3RfY2FzdDxRV2lk
Z2V0Kj4od2lkZ2V0T2JqKTsKKworICAgIE1hcHBlZFN0eWxlT3B0aW9uPFFTdHlsZU9wdGlvblNs
aWRlcj4gb3B0aW9uKHdpZGdldCwgcHJveHlPcHRpb24pOworCisgICAgb3B0aW9uLnN1YkNvbnRy
b2xzID0gUVN0eWxlOjpTQ19TbGlkZXJIYW5kbGU7CisgICAgaWYgKG9wdGlvbi5zdGF0ZSAmIFFT
dHlsZTo6U3RhdGVfU3Vua2VuKQorICAgICAgICBvcHRpb24uYWN0aXZlU3ViQ29udHJvbHMgPSBR
U3R5bGU6OlNDX1NsaWRlckhhbmRsZTsKKworICAgIG1fc3R5bGUtPmRyYXdDb21wbGV4Q29udHJv
bChRU3R5bGU6OkNDX1NsaWRlciwgJm9wdGlvbiwgcGFpbnRlciwgd2lkZ2V0KTsKK30KKwordm9p
ZCBRV2ViU3R5bGU6OnBhaW50SW5uZXJTcGluQnV0dG9uKFFQYWludGVyKiBwYWludGVyLCBjb25z
dCBRU3R5bGVJbnRlcmZhY2VPcHRpb24mIHByb3h5T3B0aW9uLCBib29sIHNwaW5Cb3hVcCwgUU9i
amVjdCogd2lkZ2V0T2JqKQoreworICAgIGVuc3VyZVN0eWxlKCk7CisgICAgUVdpZGdldCogd2lk
Z2V0ID0gcW9iamVjdF9jYXN0PFFXaWRnZXQqPih3aWRnZXRPYmopOworCisgICAgTWFwcGVkU3R5
bGVPcHRpb248UVN0eWxlT3B0aW9uU3BpbkJveD4gb3B0aW9uKHdpZGdldCwgcHJveHlPcHRpb24p
OworCisgICAgb3B0aW9uLnN1YkNvbnRyb2xzID0gUVN0eWxlOjpTQ19TcGluQm94VXAgfCBRU3R5
bGU6OlNDX1NwaW5Cb3hEb3duOworICAgIGlmICghKG9wdGlvbi5zdGF0ZSAmIFFTdHlsZTo6U3Rh
dGVfUmVhZE9ubHkpKSB7CisgICAgICAgIGlmIChvcHRpb24uc3RhdGUgJiBRU3R5bGU6OlN0YXRl
X0VuYWJsZWQpCisgICAgICAgICAgICBvcHRpb24uc3RlcEVuYWJsZWQgPSBRQWJzdHJhY3RTcGlu
Qm94OjpTdGVwVXBFbmFibGVkIHwgUUFic3RyYWN0U3BpbkJveDo6U3RlcERvd25FbmFibGVkOwor
ICAgICAgICBpZiAob3B0aW9uLnN0YXRlICYgUVN0eWxlOjpTdGF0ZV9TdW5rZW4pIHsKKyAgICAg
ICAgICAgIGlmIChzcGluQm94VXApCisgICAgICAgICAgICAgICAgb3B0aW9uLmFjdGl2ZVN1YkNv
bnRyb2xzID0gUVN0eWxlOjpTQ19TcGluQm94VXA7CisgICAgICAgICAgICBlbHNlCisgICAgICAg
ICAgICAgICAgb3B0aW9uLmFjdGl2ZVN1YkNvbnRyb2xzID0gUVN0eWxlOjpTQ19TcGluQm94RG93
bjsKKyAgICAgICAgfQorICAgIH0KKworICAgIEludFJlY3QgYnV0dG9uUmVjdCA9IG9wdGlvbi5y
ZWN0OworICAgIC8vIERlZmF1bHQgdG8gbW92aW5nIHRoZSBidXR0b25zIGEgbGl0dGxlIGJpdCB3
aXRoaW4gdGhlIGVkaXRvciBmcmFtZS4KKyAgICBpbnQgaW5mbGF0ZVggPSAtMjsKKyAgICBpbnQg
aW5mbGF0ZVkgPSAtMjsKKyNpZiBkZWZpbmVkKFFfV1NfTUFDKSAmJiAhZGVmaW5lZChRVF9OT19T
VFlMRV9NQUMpCisgICAgLy8gUU1hY1N0eWxlIHdpbGwgcG9zaXRpb24gdGhlIGFxdWEgYnV0dG9u
cyBmbHVzaCB0byB0aGUgcmlnaHQuCisgICAgLy8gVGhpcyB3aWxsIG1vdmUgdGhlbSBtb3JlIHdp
dGhpbiB0aGUgY29udHJvbCBmb3IgYmV0dGVyIHN0eWxlLCBhIGxhCisgICAgLy8gQ2hyb21pdW0g
bG9vayAmIGZlZWwuCisgICAgaWYgKHFvYmplY3RfY2FzdDxRTWFjU3R5bGUqPihtX3N0eWxlKSkg
eworICAgICAgICBpbmZsYXRlWCA9IC00OworICAgICAgICAvLyBSZW5kZXIgbWluaSBhcXVhIHNw
aW4gYnV0dG9ucyBmb3IgUU1hY1N0eWxlIHRvIGZpdCBuaWNlbHkgaW50bworICAgICAgICAvLyB0
aGUgZWRpdG9yIGFyZWEsIGxpa2UgQ2hyb21pdW0uCisgICAgICAgIG9wdGlvbi5zdGF0ZSB8PSBR
U3R5bGU6OlN0YXRlX01pbmk7CisgICAgfQorI2VuZGlmCisjaWYgIWRlZmluZWQoUVRfTk9fU1RZ
TEVfUExBU1RJUVVFKQorICAgIC8vIFFQbGFzdGlxdWVTdHlsZSBsb29rcyBiZXN0IHdoZW4gdGhl
IHNwaW4gYnV0dG9ucyBhcmUgZmx1c2ggd2l0aCB0aGUgZnJhbWUncyBlZGdlLgorICAgIGlmIChx
b2JqZWN0X2Nhc3Q8UVBsYXN0aXF1ZVN0eWxlKj4obV9zdHlsZSkpIHsKKyAgICAgICAgaW5mbGF0
ZVggPSAwOworICAgICAgICBpbmZsYXRlWSA9IDA7CisgICAgfQorI2VuZGlmCisKKyAgICBidXR0
b25SZWN0LmluZmxhdGVYKGluZmxhdGVYKTsKKyAgICBidXR0b25SZWN0LmluZmxhdGVZKGluZmxh
dGVZKTsKKyAgICBvcHRpb24ucmVjdCA9IGJ1dHRvblJlY3Q7CisKKyAgICBtX3N0eWxlLT5kcmF3
Q29tcGxleENvbnRyb2woUVN0eWxlOjpDQ19TcGluQm94LCAmb3B0aW9uLCBwYWludGVyLCB3aWRn
ZXQpOworfQorCit2b2lkIFFXZWJTdHlsZTo6cGFpbnRQcm9ncmVzc0JhcihRUGFpbnRlciogcGFp
bnRlciwgY29uc3QgUVN0eWxlSW50ZXJmYWNlT3B0aW9uJiBwcm94eU9wdGlvbiwgZG91YmxlIHBy
b2dyZXNzLCBkb3VibGUgYW5pbWF0aW9uUHJvZ3Jlc3MsIFFPYmplY3QgKndpZGdldE9iaikKK3sK
KyAgICBlbnN1cmVTdHlsZSgpOworICAgIFFXaWRnZXQqIHdpZGdldCA9IHFvYmplY3RfY2FzdDxR
V2lkZ2V0Kj4od2lkZ2V0T2JqKTsKKworICAgIE1hcHBlZFN0eWxlT3B0aW9uPFFTdHlsZU9wdGlv
blByb2dyZXNzQmFyVjI+IG9wdGlvbih3aWRnZXQsIHByb3h5T3B0aW9uKTsKKworICAgIG9wdGlv
bi5tYXhpbXVtID0gc3RkOjpudW1lcmljX2xpbWl0czxpbnQ+OjptYXgoKTsKKyAgICBvcHRpb24u
bWluaW11bSA9IDA7CisgICAgb3B0aW9uLnByb2dyZXNzID0gcHJvZ3Jlc3MgKiBzdGQ6Om51bWVy
aWNfbGltaXRzPGludD46Om1heCgpOworCisgICAgY29uc3QgUVBvaW50IHRvcExlZnQgPSBvcHRp
b24ucmVjdC50b3BMZWZ0KCk7CisgICAgcGFpbnRlci0+dHJhbnNsYXRlKHRvcExlZnQpOworICAg
IG9wdGlvbi5yZWN0Lm1vdmVUbyhRUG9pbnQoMCwgMCkpOworCisgICAgaWYgKHByb2dyZXNzIDwg
MCkgeworICAgICAgICAvLyBGSVhNRTogVW50aWwgaHR0cDovL2J1Z3JlcG9ydHMucXQubm9raWEu
Y29tL2Jyb3dzZS9RVEJVRy05MTcxIGlzIGZpeGVkLAorICAgICAgICAvLyB3ZSBzaW11bGF0ZSBv
bmUgc3F1YXJlIGFuaW1hdGluZyBhY3Jvc3MgdGhlIHByb2dyZXNzIGJhci4KKyAgICAgICAgbV9z
dHlsZS0+ZHJhd0NvbnRyb2woUVN0eWxlOjpDRV9Qcm9ncmVzc0Jhckdyb292ZSwgJm9wdGlvbiwg
cGFpbnRlciwgd2lkZ2V0KTsKKyAgICAgICAgaW50IGNodW5rV2lkdGggPSBtX3N0eWxlLT5waXhl
bE1ldHJpYyhRU3R5bGU6OlBNX1Byb2dyZXNzQmFyQ2h1bmtXaWR0aCwgJm9wdGlvbik7CisgICAg
ICAgIFFDb2xvciBjb2xvciA9IChvcHRpb24ucGFsZXR0ZS5oaWdobGlnaHQoKSA9PSBvcHRpb24u
cGFsZXR0ZS5iYWNrZ3JvdW5kKCkpID8gb3B0aW9uLnBhbGV0dGUuY29sb3IoUVBhbGV0dGU6OkFj
dGl2ZSwgUVBhbGV0dGU6OkhpZ2hsaWdodCkgOiBvcHRpb24ucGFsZXR0ZS5jb2xvcihRUGFsZXR0
ZTo6SGlnaGxpZ2h0KTsKKyAgICAgICAgaWYgKG9wdGlvbi5kaXJlY3Rpb24gPT0gUXQ6OlJpZ2h0
VG9MZWZ0KQorICAgICAgICAgICAgcGFpbnRlci0+ZmlsbFJlY3Qob3B0aW9uLnJlY3QucmlnaHQo
KSAtIGNodW5rV2lkdGggIC0gYW5pbWF0aW9uUHJvZ3Jlc3MgKiBvcHRpb24ucmVjdC53aWR0aCgp
LCAwLCBjaHVua1dpZHRoLCBvcHRpb24ucmVjdC5oZWlnaHQoKSwgY29sb3IpOworICAgICAgICBl
bHNlCisgICAgICAgICAgICBwYWludGVyLT5maWxsUmVjdChhbmltYXRpb25Qcm9ncmVzcyAqIG9w
dGlvbi5yZWN0LndpZHRoKCksIDAsIGNodW5rV2lkdGgsIG9wdGlvbi5yZWN0LmhlaWdodCgpLCBj
b2xvcik7CisgICAgfSBlbHNlCisgICAgICAgIG1fc3R5bGUtPmRyYXdDb250cm9sKFFTdHlsZTo6
Q0VfUHJvZ3Jlc3NCYXIsICZvcHRpb24sIHBhaW50ZXIsIHdpZGdldCk7CisKKyAgICBwYWludGVy
LT50cmFuc2xhdGUoLXRvcExlZnQpOworfQorCitpbnQgUVdlYlN0eWxlOjpzY3JvbGxCYXJFeHRl
bnQoYm9vbCBtaW5pKQoreworICAgIGVuc3VyZVN0eWxlKCk7CisKKyAgICBRU3R5bGVPcHRpb25T
bGlkZXIgbzsKKyAgICBvLm9yaWVudGF0aW9uID0gUXQ6OlZlcnRpY2FsOworICAgIG8uc3RhdGUg
Jj0gflFTdHlsZTo6U3RhdGVfSG9yaXpvbnRhbDsKKyAgICBpZiAobWluaSkKKyAgICAgICAgby5z
dGF0ZSB8PSBRU3R5bGU6OlN0YXRlX01pbmk7CisgICAgcmV0dXJuIG1fc3R5bGUtPnBpeGVsTWV0
cmljKFFTdHlsZTo6UE1fU2Nyb2xsQmFyRXh0ZW50LCAmbywgMCk7Cit9CisKK2Jvb2wgUVdlYlN0
eWxlOjpzY3JvbGxCYXJNaWRkbGVDbGlja0Fic29sdXRlUG9zaXRpb25TdHlsZUhpbnQoKSBjb25z
dAoreworICAgIGVuc3VyZVN0eWxlKCk7CisgICAgcmV0dXJuIG1fc3R5bGUtPnN0eWxlSGludChR
U3R5bGU6OlNIX1Njcm9sbEJhcl9NaWRkbGVDbGlja0Fic29sdXRlUG9zaXRpb24pOworfQorCit2
b2lkIFFXZWJTdHlsZTo6cGFpbnRTY3JvbGxDb3JuZXIoUVBhaW50ZXIqIHBhaW50ZXIsIGNvbnN0
IFFSZWN0JiByZWN0LCBRT2JqZWN0KiB3aWRnZXRPYmopCit7CisgICAgZW5zdXJlU3R5bGUoKTsK
KyAgICBRV2lkZ2V0KiB3aWRnZXQgPSBxb2JqZWN0X2Nhc3Q8UVdpZGdldCo+KHdpZGdldE9iaik7
CisKKyAgICBRU3R5bGVPcHRpb24gb3B0aW9uOworICAgIG9wdGlvbi5yZWN0ID0gcmVjdDsKKyAg
ICBtX3N0eWxlLT5kcmF3UHJpbWl0aXZlKFFTdHlsZTo6UEVfUGFuZWxTY3JvbGxBcmVhQ29ybmVy
LCAmb3B0aW9uLCBwYWludGVyLCB3aWRnZXQpOworfQorCitRU3R5bGVJbnRlcmZhY2U6OlN1YkNv
bnRyb2wgUVdlYlN0eWxlOjpoaXRUZXN0U2Nyb2xsQmFyKGNvbnN0IFFTdHlsZUludGVyZmFjZU9w
dGlvbiAmcHJveHlPcHRpb24sIGNvbnN0IFFQb2ludCAmcG9zKQoreworICAgIGVuc3VyZVN0eWxl
KCk7CisgICAgTWFwcGVkU3R5bGVPcHRpb248UVN0eWxlT3B0aW9uU2xpZGVyPiBvcHQoMCwgcHJv
eHlPcHRpb24pOworICAgIFFTdHlsZTo6U3ViQ29udHJvbCBzYyA9IG1fc3R5bGUtPmhpdFRlc3RD
b21wbGV4Q29udHJvbChRU3R5bGU6OkNDX1Njcm9sbEJhciwgJm9wdCwgcG9zLCAwKTsKKyAgICBy
ZXR1cm4gY29udmVydFRvUVN0eWxlSW50ZXJmYWNlU3ViQ29udHJvbChzYyk7Cit9CisKK1FSZWN0
IFFXZWJTdHlsZTo6c2Nyb2xsQmFyU3ViQ29udHJvbFJlY3QoY29uc3QgUVN0eWxlSW50ZXJmYWNl
T3B0aW9uICZwcm94eU9wdGlvbiwgUVN0eWxlSW50ZXJmYWNlOjpTdWJDb250cm9sIHN1YkNvbnRy
b2wpCit7CisgICAgZW5zdXJlU3R5bGUoKTsKKyAgICBNYXBwZWRTdHlsZU9wdGlvbjxRU3R5bGVP
cHRpb25TbGlkZXI+IG9wdCgwLCBwcm94eU9wdGlvbik7CisgICAgcmV0dXJuIG1fc3R5bGUtPnN1
YkNvbnRyb2xSZWN0KFFTdHlsZTo6Q0NfU2Nyb2xsQmFyLCAmb3B0LCBjb252ZXJ0VG9RU3R5bGVT
dWJDb250cm9sKHN1YkNvbnRyb2wpLCAwKTsKK30KKwordm9pZCBRV2ViU3R5bGU6OnBhaW50U2Ny
b2xsQmFyKFFQYWludGVyICpwYWludGVyLCBjb25zdCBRU3R5bGVJbnRlcmZhY2VPcHRpb24gJnBy
b3h5T3B0aW9uLCBRT2JqZWN0ICp3aWRnZXRPYmopCit7CisgICAgZW5zdXJlU3R5bGUoKTsKKyAg
ICBRV2lkZ2V0KiB3aWRnZXQgPSBxb2JqZWN0X2Nhc3Q8UVdpZGdldCo+KHdpZGdldE9iaik7CisK
KyAgICBNYXBwZWRTdHlsZU9wdGlvbjxRU3R5bGVPcHRpb25TbGlkZXI+IG9wdCh3aWRnZXQsIHBy
b3h5T3B0aW9uKTsKKworI2lmZGVmIFFfV1NfTUFDCisgICAgLy8gRklYTUU6IFdlIGFsc28gbmVl
ZCB0byBjaGVjayB0aGUgd2lkZ2V0IHN0eWxlIGJ1dCB0b2RheSBTY3JvbGxiYXJUaGVtZSBpcyBu
b3QgYXdhcmUgb2YgdGhlIHBhZ2Ugc28gd2UKKyAgICAvLyBjYW4ndCBnZXQgdGhlIHdpZGdldC4K
KyAgICBpZiAocW9iamVjdF9jYXN0PFFNYWNTdHlsZSo+KG1fc3R5bGUpKQorICAgICAgICBtX3N0
eWxlLT5kcmF3Q29tcGxleENvbnRyb2woUVN0eWxlOjpDQ19TY3JvbGxCYXIsICZvcHQsIHBhaW50
ZXIsIHdpZGdldCk7CisgICAgZWxzZQorI2VuZGlmCisgICAgeworICAgICAgICAvLyBUaGUgUVN0
eWxlIGV4cGVjdHMgdGhlIGJhY2tncm91bmQgdG8gYmUgYWxyZWFkeSBmaWxsZWQuCisgICAgICAg
IHBhaW50ZXItPmZpbGxSZWN0KG9wdC5yZWN0LCBvcHQucGFsZXR0ZS5iYWNrZ3JvdW5kKCkpOwor
CisgICAgICAgIGNvbnN0IFFQb2ludCB0b3BMZWZ0ID0gb3B0LnJlY3QudG9wTGVmdCgpOworICAg
ICAgICBwYWludGVyLT50cmFuc2xhdGUodG9wTGVmdCk7CisgICAgICAgIG9wdC5yZWN0Lm1vdmVU
byhRUG9pbnQoMCwgMCkpOworICAgICAgICBtX3N0eWxlLT5kcmF3Q29tcGxleENvbnRyb2woUVN0
eWxlOjpDQ19TY3JvbGxCYXIsICZvcHQsIHBhaW50ZXIsIHdpZGdldCk7CisgICAgICAgIG9wdC5y
ZWN0Lm1vdmVUbyh0b3BMZWZ0KTsKKyAgICB9Cit9CisKK1FPYmplY3QqIFFXZWJTdHlsZTo6d2lk
Z2V0Rm9yUGFpbnRlcihRUGFpbnRlciogcGFpbnRlcikKK3sKKyAgICBRUGFpbnREZXZpY2UqIGRl
diA9IDA7CisgICAgaWYgKHBhaW50ZXIpCisgICAgICAgIGRldiA9IHBhaW50ZXItPmRldmljZSgp
OworICAgIGlmIChkZXYgJiYgZGV2LT5kZXZUeXBlKCkgPT0gUUludGVybmFsOjpXaWRnZXQpCisg
ICAgICAgIHJldHVybiBzdGF0aWNfY2FzdDxRV2lkZ2V0Kj4oZGV2KTsKKyAgICByZXR1cm4gMDsK
K30KKworYm9vbCBRV2ViU3R5bGU6OmlzVmFsaWQoKSBjb25zdAoreworICAgIGVuc3VyZVN0eWxl
KCk7CisgICAgcmV0dXJuIG1fc3R5bGU7Cit9CisKK3ZvaWQgUVdlYlN0eWxlOjplbnN1cmVTdHls
ZSgpIGNvbnN0Cit7CisgICAgaWYgKG1fc3R5bGUpCisgICAgICAgIHJldHVybjsKKworICAgIG1f
c3R5bGUgPSBRU3R5bGVJbnRlcmZhY2U6OnN0eWxlRm9yUGFnZShtX3BhZ2UpOworCisgICAgaWYg
KCFtX3N0eWxlKQorICAgICAgICBtX3N0eWxlID0gUUFwcGxpY2F0aW9uOjpzdHlsZSgpOworfQor
Cit9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L3F0L1dlYkNvcmVTdXBwb3J0L1FXZWJTdHls
ZS5oIGIvU291cmNlL1dlYktpdC9xdC9XZWJDb3JlU3VwcG9ydC9RV2ViU3R5bGUuaApuZXcgZmls
ZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwLi43MGU5ZTRkZGUwODVlMWFlYzY3MTY1NzJkNDk2M2FlNjUzOWE3MjczCi0tLSAvZGV2L251
bGwKKysrIGIvU291cmNlL1dlYktpdC9xdC9XZWJDb3JlU3VwcG9ydC9RV2ViU3R5bGUuaApAQCAt
MCwwICsxLDk3IEBACisvKgorICogVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIHRoZW1lIGltcGxl
bWVudGF0aW9uIGZvciBmb3JtIGNvbnRyb2xzIGluIFdlYkNvcmUuCisgKgorICogQ29weXJpZ2h0
IChDKSAyMDEyIERpZ2lhIFBsYyBhbmQvb3IgaXRzIHN1YnNpZGlhcnkoLWllcykuCisgKiBDb3B5
cmlnaHQgKEMpIDIwMTEtMjAxMiBOb2tpYSBDb3Jwb3JhdGlvbiBhbmQvb3IgaXRzIHN1YnNpZGlh
cnkoLWllcykuCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4g
cmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0
aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5
IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICogdmVyc2lvbiAyIG9mIHRo
ZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAq
IFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUg
dXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGlt
cGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBB
UlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGlj
IExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2
ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBh
bG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90
LCB3cml0ZSB0bworICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJh
bmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKKyAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNB
LgorICoKKyAqLworI2lmbmRlZiBRV2ViU3R5bGVfaAorI2RlZmluZSBRV2ViU3R5bGVfaAorCisj
aW5jbHVkZSA8UVN0eWxlSW50ZXJmYWNlLmg+CisKK1FUX0JFR0lOX05BTUVTUEFDRQorY2xhc3Mg
UVN0eWxlOworY2xhc3MgUUxpbmVFZGl0OworY2xhc3MgUVN0eWxlT3B0aW9uOworY2xhc3MgUVN0
eWxlT3B0aW9uU2xpZGVyOworY2xhc3MgUVBhaW50ZXI7CitjbGFzcyBRT2JqZWN0OworUVRfRU5E
X05BTUVTUEFDRQorCituYW1lc3BhY2UgV2ViQ29yZSB7CitjbGFzcyBQYWdlOworfQorCituYW1l
c3BhY2UgV2ViS2l0IHsKKworY2xhc3MgUVdlYlN0eWxlIDogcHVibGljIFdlYkNvcmU6OlFTdHls
ZUludGVyZmFjZSB7CitwdWJsaWM6CisgICAgUVdlYlN0eWxlKFdlYkNvcmU6OlBhZ2UqID0gMCk7
CisgICAgdmlydHVhbCB+UVdlYlN0eWxlKCk7CisKKyAgICBzdGF0aWMgV2ViQ29yZTo6UVN0eWxl
SW50ZXJmYWNlKiBjcmVhdGUoV2ViQ29yZTo6UGFnZSogcGFnZSkKKyAgICB7IHJldHVybiBuZXcg
UVdlYlN0eWxlKHBhZ2UpOyB9CisKKyAgICB2aXJ0dWFsIFFSZWN0IGJ1dHRvblN1YkVsZW1lbnRS
ZWN0KEJ1dHRvblN1YkVsZW1lbnQsIFN0YXRlLCBjb25zdCBRUmVjdCYgb3JpZ2luYWxSZWN0KSBj
b25zdDsKKworICAgIHZpcnR1YWwgaW50IGZpbmRGcmFtZUxpbmVXaWR0aCgpIGNvbnN0OworICAg
IHZpcnR1YWwgaW50IHNpbXBsZVBpeGVsTWV0cmljKFBpeGVsTWV0cmljLCBTdGF0ZSA9IFN0YXRl
X05vbmUsIFFPYmplY3QqIHdpZGdldCA9IDApIGNvbnN0OworICAgIHZpcnR1YWwgaW50IGJ1dHRv
bk1hcmdpbihTdGF0ZSwgY29uc3QgUVJlY3QmIG9yaWdpbmFsUmVjdCkgY29uc3Q7CisgICAgdmly
dHVhbCBpbnQgc2xpZGVyTGVuZ3RoKFF0OjpPcmllbnRhdGlvbikgY29uc3Q7CisgICAgdmlydHVh
bCBpbnQgc2xpZGVyVGhpY2tuZXNzKFF0OjpPcmllbnRhdGlvbikgY29uc3Q7CisgICAgdmlydHVh
bCBpbnQgcHJvZ3Jlc3NCYXJDaHVua1dpZHRoKGNvbnN0IFFTaXplJikgY29uc3Q7CisgICAgdmly
dHVhbCB2b2lkIGdldEJ1dHRvbk1ldHJpY3MoUVN0cmluZyogYnV0dG9uRm9udEZhbWlseSwgaW50
KiBidXR0b25Gb250UGl4ZWxTaXplKSBjb25zdDsKKworICAgIHZpcnR1YWwgUVNpemUgc2l6ZUZy
b21Db250ZW50cyhDb250ZW50c1R5cGUsIFFTdHlsZUludGVyZmFjZTo6U3RhdGUsIGNvbnN0IFFT
aXplJikgY29uc3Q7CisKKyAgICB2aXJ0dWFsIHZvaWQgcGFpbnRCdXR0b24oUVBhaW50ZXIqLCBC
dXR0b25UeXBlLCBjb25zdCBXZWJDb3JlOjpRU3R5bGVJbnRlcmZhY2VPcHRpb24gJnByb3h5T3B0
aW9uLCBRT2JqZWN0ICp3aWRnZXQpOworICAgIHZpcnR1YWwgdm9pZCBwYWludFRleHRGaWVsZChR
UGFpbnRlciosIGNvbnN0IFdlYkNvcmU6OlFTdHlsZUludGVyZmFjZU9wdGlvbiYsIFFPYmplY3Qq
IHdpZGdldE9iaik7CisgICAgdmlydHVhbCB2b2lkIHBhaW50Q29tYm9Cb3goUVBhaW50ZXIqLCBj
b25zdCBXZWJDb3JlOjpRU3R5bGVJbnRlcmZhY2VPcHRpb24mLCBRT2JqZWN0ICp3aWRnZXRPYmop
OworICAgIHZpcnR1YWwgdm9pZCBwYWludENvbWJvQm94QXJyb3coUVBhaW50ZXIqLCBjb25zdCBX
ZWJDb3JlOjpRU3R5bGVJbnRlcmZhY2VPcHRpb24mLCBRT2JqZWN0ICp3aWRnZXRPYmopOworCisg
ICAgdmlydHVhbCB2b2lkIHBhaW50U2xpZGVyVHJhY2soUVBhaW50ZXIqLCBjb25zdCBXZWJDb3Jl
OjpRU3R5bGVJbnRlcmZhY2VPcHRpb24mLCBRT2JqZWN0ICp3aWRnZXRPYmopOworICAgIHZpcnR1
YWwgdm9pZCBwYWludFNsaWRlclRodW1iKFFQYWludGVyKiwgY29uc3QgV2ViQ29yZTo6UVN0eWxl
SW50ZXJmYWNlT3B0aW9uJiwgUU9iamVjdCAqd2lkZ2V0T2JqKTsKKyAgICB2aXJ0dWFsIHZvaWQg
cGFpbnRJbm5lclNwaW5CdXR0b24oUVBhaW50ZXIqLCBjb25zdCBXZWJDb3JlOjpRU3R5bGVJbnRl
cmZhY2VPcHRpb24mLCBib29sIHNwaW5Cb3hVcCwgUU9iamVjdCogd2lkZ2V0T2JqKTsKKyAgICB2
aXJ0dWFsIHZvaWQgcGFpbnRQcm9ncmVzc0JhcihRUGFpbnRlciosIGNvbnN0IFdlYkNvcmU6OlFT
dHlsZUludGVyZmFjZU9wdGlvbiYsIGRvdWJsZSBwcm9ncmVzcywgZG91YmxlIGFuaW1hdGlvblBy
b2dyZXNzLCBRT2JqZWN0KiB3aWRnZXRPYmopOworCisgICAgdmlydHVhbCBpbnQgc2Nyb2xsQmFy
RXh0ZW50KGJvb2wgbWluaSk7CisgICAgdmlydHVhbCBib29sIHNjcm9sbEJhck1pZGRsZUNsaWNr
QWJzb2x1dGVQb3NpdGlvblN0eWxlSGludCgpIGNvbnN0OworICAgIHZpcnR1YWwgdm9pZCBwYWlu
dFNjcm9sbENvcm5lcihRUGFpbnRlciosIGNvbnN0IFFSZWN0JiwgUU9iamVjdCogd2lkZ2V0T2Jq
KTsKKworICAgIHZpcnR1YWwgU3ViQ29udHJvbCBoaXRUZXN0U2Nyb2xsQmFyKGNvbnN0IFdlYkNv
cmU6OlFTdHlsZUludGVyZmFjZU9wdGlvbiYsIGNvbnN0IFFQb2ludCYgcG9zKTsKKyAgICB2aXJ0
dWFsIFFSZWN0IHNjcm9sbEJhclN1YkNvbnRyb2xSZWN0KGNvbnN0IFdlYkNvcmU6OlFTdHlsZUlu
dGVyZmFjZU9wdGlvbiYsIFN1YkNvbnRyb2wpOworICAgIHZpcnR1YWwgdm9pZCBwYWludFNjcm9s
bEJhcihRUGFpbnRlciosIGNvbnN0IFdlYkNvcmU6OlFTdHlsZUludGVyZmFjZU9wdGlvbiYsIFFP
YmplY3QqIHdpZGdldE9iaik7CisKKyAgICB2aXJ0dWFsIFFPYmplY3QqIHdpZGdldEZvclBhaW50
ZXIoUVBhaW50ZXIqKTsKKworICAgIHZpcnR1YWwgYm9vbCBpc1ZhbGlkKCkgY29uc3Q7CisKK3By
aXZhdGU6CisgICAgdm9pZCBlbnN1cmVTdHlsZSgpIGNvbnN0OworCisgICAgV2ViQ29yZTo6UGFn
ZSogbV9wYWdlOworICAgIG11dGFibGUgUVN0eWxlKiBtX3N0eWxlOworICAgIFFTdHlsZSogbV9m
YWxsYmFja1N0eWxlOworICAgIGJvb2wgbV9vd25GYWxsYmFja1N0eWxlOworICAgIG11dGFibGUg
UVNjb3BlZFBvaW50ZXI8UUxpbmVFZGl0PiBtX2xpbmVFZGl0OworfTsKKworfQorCisjZW5kaWYg
Ly8gUVdlYlN0eWxlX2gKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvcXQvV2ViQ29yZVN1cHBv
cnQvUmVuZGVyVGhlbWVRU3R5bGUuY3BwIGIvU291cmNlL1dlYktpdC9xdC9XZWJDb3JlU3VwcG9y
dC9SZW5kZXJUaGVtZVFTdHlsZS5jcHAKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDhi
YzBkZjQ5NzQ1MzU5ZDY2ODg3N2NhODdkNGJlYjUyMjk3MjQxZjcuLjAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1dlYktpdC9xdC9XZWJDb3JlU3Vw
cG9ydC9SZW5kZXJUaGVtZVFTdHlsZS5jcHAKKysrIC9kZXYvbnVsbApAQCAtMSw4MjcgKzAsMCBA
QAotLyoKLSAqIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBXZWJLaXQgcHJvamVjdC4KLSAqCi0g
KiBDb3B5cmlnaHQgKEMpIDIwMDgtMjAxMiBOb2tpYSBDb3Jwb3JhdGlvbiBhbmQvb3IgaXRzIHN1
YnNpZGlhcnkoLWllcykKLSAqCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDYgWmFjayBSdXNpbiA8emFj
a0BrZGUub3JnPgotICogICAgICAgICAgICAgICAyMDA2IERpcmsgTXVlbGxlciA8bXVlbGxlckBr
ZGUub3JnPgotICogICAgICAgICAgICAgICAyMDA2IE5pa29sYXMgWmltbWVybWFubiA8emltbWVy
bWFubkBrZGUub3JnPgotICogQ29weXJpZ2h0IChDKSAyMDA4IEhvbGdlciBIYW5zIFBldGVyIEZy
ZXl0aGVyCi0gKgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBUaGlzIGxpYnJhcnkg
aXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCi0gKiBtb2Rp
ZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwot
ICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsg
ZWl0aGVyCi0gKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikg
YW55IGxhdGVyIHZlcnNpb24uCi0gKgotICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGlu
IHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0gKiBidXQgV0lUSE9VVCBBTlkgV0FS
UkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICogTUVSQ0hBTlRB
QklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUK
LSAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICoK
LSAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdl
bmVyYWwgUHVibGljIExpY2Vuc2UKLSAqIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhl
IGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCi0gKiB0aGUgRnJlZSBTb2Z0d2Fy
ZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAotICog
Qm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCi0gKgotICovCi0KLSNpbmNsdWRlICJjb25maWcu
aCIKLSNpbmNsdWRlICJSZW5kZXJUaGVtZVFTdHlsZS5oIgotCi0jaW5jbHVkZSAiQ1NTRm9udFNl
bGVjdG9yLmgiCi0jaW5jbHVkZSAiQ1NTVmFsdWVLZXl3b3Jkcy5oIgotI2luY2x1ZGUgIkNocm9t
ZS5oIgotI2luY2x1ZGUgIkNocm9tZUNsaWVudC5oIgotI2luY2x1ZGUgIkNvbG9yLmgiCi0jaW5j
bHVkZSAiRG9jdW1lbnQuaCIKLSNpbmNsdWRlICJGb250LmgiCi0jaW5jbHVkZSAiRm9udFNlbGVj
dG9yLmgiCi0jaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0LmgiCi0jaW5jbHVkZSAiSFRNTElucHV0
RWxlbWVudC5oIgotI2luY2x1ZGUgIkhUTUxOYW1lcy5oIgotI2luY2x1ZGUgIkxvY2FsaXplZFN0
cmluZ3MuaCIKLSNpbmNsdWRlICJOb3RJbXBsZW1lbnRlZC5oIgotI2luY2x1ZGUgIlBhZ2UuaCIK
LSNpbmNsdWRlICJQYWludEluZm8uaCIKLSNpbmNsdWRlICJRV2ViUGFnZUNsaWVudC5oIgotI2lu
Y2x1ZGUgIlJlbmRlckJveC5oIgotI2lmIEVOQUJMRShQUk9HUkVTU19FTEVNRU5UKQotI2luY2x1
ZGUgIlJlbmRlclByb2dyZXNzLmgiCi0jZW5kaWYKLSNpbmNsdWRlICJSZW5kZXJTbGlkZXIuaCIK
LSNpbmNsdWRlICJTY3JvbGxiYXJUaGVtZVFTdHlsZS5oIgotI2luY2x1ZGUgIlNsaWRlclRodW1i
RWxlbWVudC5oIgotI2luY2x1ZGUgIlN0eWxlUmVzb2x2ZXIuaCIKLSNpbmNsdWRlICJVc2VyQWdl
bnRTdHlsZVNoZWV0cy5oIgotCi0jaW5jbHVkZSA8UUFwcGxpY2F0aW9uPgotI2luY2x1ZGUgPFFD
b2xvcj4KLSNpbmNsdWRlIDxRRmlsZT4KLSNpbmNsdWRlIDxRRm9udE1ldHJpY3M+Ci0jaW5jbHVk
ZSA8UUxpbmVFZGl0PgotI2luY2x1ZGUgPFFNYWNTdHlsZT4KLSNpbmNsdWRlIDxRUGFpbnRlcj4K
LSNpZm5kZWYgUVRfTk9fU1RZTEVfUExBU1RJUVVFCi0jaW5jbHVkZSA8UVBsYXN0aXF1ZVN0eWxl
PgotI2VuZGlmCi0jaW5jbHVkZSA8UVB1c2hCdXR0b24+Ci0jaW5jbHVkZSA8UVN0eWxlRmFjdG9y
eT4KLSNpbmNsdWRlIDxRU3R5bGVPcHRpb25CdXR0b24+Ci0jaW5jbHVkZSA8UVN0eWxlT3B0aW9u
RnJhbWVWMj4KLSNpZiBFTkFCTEUoUFJPR1JFU1NfRUxFTUVOVCkKLSNpbmNsdWRlIDxRU3R5bGVP
cHRpb25Qcm9ncmVzc0JhclYyPgotI2VuZGlmCi0jaW5jbHVkZSA8UVN0eWxlT3B0aW9uU2xpZGVy
PgotI2luY2x1ZGUgPFFXaWRnZXQ+Ci0KLW5hbWVzcGFjZSBXZWJDb3JlIHsKLQotdXNpbmcgbmFt
ZXNwYWNlIEhUTUxOYW1lczsKLQotaW5saW5lIHN0YXRpYyB2b2lkIGluaXRTdHlsZU9wdGlvbihR
V2lkZ2V0KiB3aWRnZXQsIFFTdHlsZU9wdGlvbiYgb3B0aW9uKQotewotICAgIGlmICh3aWRnZXQp
Ci0gICAgICAgIG9wdGlvbi5pbml0RnJvbSh3aWRnZXQpOwotICAgIGVsc2UgewotICAgICAgICAv
LyBJZiBhIHdpZGdldCBpcyBub3QgZGlyZWN0bHkgYXZhaWxhYmxlIGZvciByZW5kZXJpbmcsIHdl
IGZhbGxiYWNrIHRvIGRlZmF1bHQKLSAgICAgICAgLy8gdmFsdWUgZm9yIGFuIGFjdGl2ZSB3aWRn
ZXQuCi0gICAgICAgIG9wdGlvbi5zdGF0ZSA9IFFTdHlsZTo6U3RhdGVfQWN0aXZlIHwgUVN0eWxl
OjpTdGF0ZV9FbmFibGVkOwotICAgIH0KLX0KLQotCi1RU2hhcmVkUG9pbnRlcjxTdHlsZVBhaW50
ZXI+IFJlbmRlclRoZW1lUVN0eWxlOjpnZXRTdHlsZVBhaW50ZXIoY29uc3QgUGFpbnRJbmZvJiBw
YWludEluZm8pCi17Ci0gICAgcmV0dXJuIFFTaGFyZWRQb2ludGVyPFN0eWxlUGFpbnRlcj4obmV3
IFN0eWxlUGFpbnRlclFTdHlsZSh0aGlzLCBwYWludEluZm8pKTsKLX0KLQotU3R5bGVQYWludGVy
UVN0eWxlOjpTdHlsZVBhaW50ZXJRU3R5bGUoUmVuZGVyVGhlbWVRU3R5bGUqIHRoZW1lLCBjb25z
dCBQYWludEluZm8mIHBhaW50SW5mbykKLSAgICA6IFN0eWxlUGFpbnRlcih0aGVtZSwgcGFpbnRJ
bmZvKQotewotICAgIGluaXQocGFpbnRJbmZvLmNvbnRleHQgPyBwYWludEluZm8uY29udGV4dCA6
IDAsIHRoZW1lLT5xU3R5bGUoKSk7Ci19Ci0KLVN0eWxlUGFpbnRlclFTdHlsZTo6U3R5bGVQYWlu
dGVyUVN0eWxlKFNjcm9sbGJhclRoZW1lUVN0eWxlKiB0aGVtZSwgR3JhcGhpY3NDb250ZXh0KiBj
b250ZXh0KQotICAgIDogU3R5bGVQYWludGVyKCkKLXsKLSAgICBpbml0KGNvbnRleHQsIHRoZW1l
LT5zdHlsZSgpKTsKLX0KLQotdm9pZCBTdHlsZVBhaW50ZXJRU3R5bGU6OmluaXQoR3JhcGhpY3ND
b250ZXh0KiBjb250ZXh0LCBRU3R5bGUqIHRoZW1lU3R5bGUpCi17Ci0gICAgcGFpbnRlciA9IHN0
YXRpY19jYXN0PFFQYWludGVyKj4oY29udGV4dC0+cGxhdGZvcm1Db250ZXh0KCkpOwotICAgIHdp
ZGdldCA9IDA7Ci0gICAgUVBhaW50RGV2aWNlKiBkZXYgPSAwOwotICAgIGlmIChwYWludGVyKQot
ICAgICAgICBkZXYgPSBwYWludGVyLT5kZXZpY2UoKTsKLSAgICBpZiAoZGV2ICYmIGRldi0+ZGV2
VHlwZSgpID09IFFJbnRlcm5hbDo6V2lkZ2V0KQotICAgICAgICB3aWRnZXQgPSBzdGF0aWNfY2Fz
dDxRV2lkZ2V0Kj4oZGV2KTsKLSAgICBzdHlsZSA9IHRoZW1lU3R5bGU7Ci0KLSAgICBTdHlsZVBh
aW50ZXI6OmluaXQoY29udGV4dCk7Ci19Ci0KLVBhc3NSZWZQdHI8UmVuZGVyVGhlbWU+IFJlbmRl
clRoZW1lUVN0eWxlOjpjcmVhdGUoUGFnZSogcGFnZSkKLXsKLSAgICByZXR1cm4gYWRvcHRSZWYo
bmV3IFJlbmRlclRoZW1lUVN0eWxlKHBhZ2UpKTsKLX0KLQotUmVuZGVyVGhlbWVRU3R5bGU6OlJl
bmRlclRoZW1lUVN0eWxlKFBhZ2UqIHBhZ2UpCi0gICAgOiBSZW5kZXJUaGVtZVF0KHBhZ2UpCi0j
aWZuZGVmIFFUX05PX0xJTkVFRElUCi0gICAgLCBtX2xpbmVFZGl0KDApCi0jZW5kaWYKLXsKLSAg
ICBRUHVzaEJ1dHRvbiBidXR0b247Ci0gICAgUUZvbnQgZGVmYXVsdEJ1dHRvbkZvbnQgPSBRQXBw
bGljYXRpb246OmZvbnQoJmJ1dHRvbik7Ci0gICAgbV9idXR0b25Gb250RmFtaWx5ID0gZGVmYXVs
dEJ1dHRvbkZvbnQuZmFtaWx5KCk7Ci0jaWZkZWYgUV9XU19NQUMKLSAgICBidXR0b24uc2V0QXR0
cmlidXRlKFF0OjpXQV9NYWNTbWFsbFNpemUpOwotICAgIFFGb250SW5mbyBmb250SW5mbyhkZWZh
dWx0QnV0dG9uRm9udCk7Ci0gICAgbV9idXR0b25Gb250UGl4ZWxTaXplID0gZm9udEluZm8ucGl4
ZWxTaXplKCk7Ci0jZW5kaWYKLQotICAgIG1fZmFsbGJhY2tTdHlsZSA9IFFTdHlsZUZhY3Rvcnk6
OmNyZWF0ZShRTGF0aW4xU3RyaW5nKCJ3aW5kb3dzIikpOwotfQotCi1SZW5kZXJUaGVtZVFTdHls
ZTo6flJlbmRlclRoZW1lUVN0eWxlKCkKLXsKLSAgICBkZWxldGUgbV9mYWxsYmFja1N0eWxlOwot
I2lmbmRlZiBRVF9OT19MSU5FRURJVAotICAgIGRlbGV0ZSBtX2xpbmVFZGl0OwotI2VuZGlmCi19
Ci0KLQotLy8gZm9yIHNvbWUgd2lkZ2V0IHBhaW50aW5nLCB3ZSBuZWVkIHRvIGZhbGxiYWNrIHRv
IFdpbmRvd3Mgc3R5bGUKLVFTdHlsZSogUmVuZGVyVGhlbWVRU3R5bGU6OmZhbGxiYWNrU3R5bGUo
KSBjb25zdAotewotICAgIHJldHVybiAobV9mYWxsYmFja1N0eWxlKSA/IG1fZmFsbGJhY2tTdHls
ZSA6IFFBcHBsaWNhdGlvbjo6c3R5bGUoKTsKLX0KLQotdm9pZCBSZW5kZXJUaGVtZVFTdHlsZTo6
c2V0UGFsZXR0ZUZyb21QYWdlQ2xpZW50SWZFeGlzdHMoUVBhbGV0dGUmIHBhbGV0dGUpIGNvbnN0
Ci17Ci0gICAgaWYgKCFtX3BhZ2UpCi0gICAgICAgIHJldHVybjsKLQotICAgIEFTU0VSVChtX3Bh
Z2UtPmNocm9tZSgpKTsKLSAgICBDaHJvbWVDbGllbnQqIGNocm9tZUNsaWVudCA9IG1fcGFnZS0+
Y2hyb21lKCktPmNsaWVudCgpOwotICAgIGlmICghY2hyb21lQ2xpZW50KQotICAgICAgICByZXR1
cm47Ci0KLSAgICBpZiAoUVdlYlBhZ2VDbGllbnQqIHBhZ2VDbGllbnQgPSBjaHJvbWVDbGllbnQt
PnBsYXRmb3JtUGFnZUNsaWVudCgpKQotICAgICAgICBwYWxldHRlID0gcGFnZUNsaWVudC0+cGFs
ZXR0ZSgpOwotfQotCi1RU3R5bGUqIFJlbmRlclRoZW1lUVN0eWxlOjpxU3R5bGUoKSBjb25zdAot
ewotICAgIGlmIChtX3BhZ2UpIHsKLSAgICAgICAgUVdlYlBhZ2VDbGllbnQqIHBhZ2VDbGllbnQg
PSBtX3BhZ2UtPmNocm9tZSgpLT5jbGllbnQoKS0+cGxhdGZvcm1QYWdlQ2xpZW50KCk7Ci0KLSAg
ICAgICAgaWYgKHBhZ2VDbGllbnQpCi0gICAgICAgICAgICByZXR1cm4gcGFnZUNsaWVudC0+c3R5
bGUoKTsKLSAgICB9Ci0KLSAgICByZXR1cm4gUUFwcGxpY2F0aW9uOjpzdHlsZSgpOwotfQotCi1p
bnQgUmVuZGVyVGhlbWVRU3R5bGU6OmZpbmRGcmFtZUxpbmVXaWR0aChRU3R5bGUqIHN0eWxlKSBj
b25zdAotewotI2lmbmRlZiBRVF9OT19MSU5FRURJVAotICAgIGlmICghbV9saW5lRWRpdCkKLSAg
ICAgICAgbV9saW5lRWRpdCA9IG5ldyBRTGluZUVkaXQoKTsKLSNlbmRpZgotCi0gICAgUVN0eWxl
T3B0aW9uRnJhbWVWMiBvcHQ7Ci0gICAgUVdpZGdldCogd2lkZ2V0ID0gMDsKLSNpZm5kZWYgUVRf
Tk9fTElORUVESVQKLSAgICB3aWRnZXQgPSBtX2xpbmVFZGl0OwotI2VuZGlmCi0gICAgcmV0dXJu
IHN0eWxlLT5waXhlbE1ldHJpYyhRU3R5bGU6OlBNX0RlZmF1bHRGcmFtZVdpZHRoLCAmb3B0LCB3
aWRnZXQpOwotfQotCi1RUmVjdCBSZW5kZXJUaGVtZVFTdHlsZTo6aW5mbGF0ZUJ1dHRvblJlY3Qo
Y29uc3QgUVJlY3QmIG9yaWdpbmFsUmVjdCkgY29uc3QKLXsKLSAgICBRU3R5bGVPcHRpb25CdXR0
b24gb3B0aW9uOwotICAgIG9wdGlvbi5zdGF0ZSB8PSBRU3R5bGU6OlN0YXRlX1NtYWxsOwotICAg
IG9wdGlvbi5yZWN0ID0gb3JpZ2luYWxSZWN0OwotCi0gICAgUVJlY3QgbGF5b3V0UmVjdCA9IHFT
dHlsZSgpLT5zdWJFbGVtZW50UmVjdChRU3R5bGU6OlNFX1B1c2hCdXR0b25MYXlvdXRJdGVtLCAm
b3B0aW9uLCAwKTsKLSAgICBpZiAoIWxheW91dFJlY3QuaXNOdWxsKCkpIHsKLSAgICAgICAgaW50
IHBhZGRpbmdMZWZ0ID0gbGF5b3V0UmVjdC5sZWZ0KCkgLSBvcmlnaW5hbFJlY3QubGVmdCgpOwot
ICAgICAgICBpbnQgcGFkZGluZ1JpZ2h0ID0gb3JpZ2luYWxSZWN0LnJpZ2h0KCkgLSBsYXlvdXRS
ZWN0LnJpZ2h0KCk7Ci0gICAgICAgIGludCBwYWRkaW5nVG9wID0gbGF5b3V0UmVjdC50b3AoKSAt
IG9yaWdpbmFsUmVjdC50b3AoKTsKLSAgICAgICAgaW50IHBhZGRpbmdCb3R0b20gPSBvcmlnaW5h
bFJlY3QuYm90dG9tKCkgLSBsYXlvdXRSZWN0LmJvdHRvbSgpOwotCi0gICAgICAgIHJldHVybiBv
cmlnaW5hbFJlY3QuYWRqdXN0ZWQoLXBhZGRpbmdMZWZ0LCAtcGFkZGluZ1RvcCwgcGFkZGluZ1Jp
Z2h0LCBwYWRkaW5nQm90dG9tKTsKLSAgICB9Ci0gICAgcmV0dXJuIG9yaWdpbmFsUmVjdDsKLX0K
LQotdm9pZCBSZW5kZXJUaGVtZVFTdHlsZTo6Y29tcHV0ZVNpemVCYXNlZE9uU3R5bGUoUmVuZGVy
U3R5bGUqIHJlbmRlclN0eWxlKSBjb25zdAotewotICAgIFFTaXplIHNpemUoMCwgMCk7Ci0gICAg
Y29uc3QgUUZvbnRNZXRyaWNzIGZtKHJlbmRlclN0eWxlLT5mb250KCkuc3ludGhldGljRm9udCgp
KTsKLSAgICBRU3R5bGUqIHN0eWxlID0gcVN0eWxlKCk7Ci0KLSAgICBzd2l0Y2ggKHJlbmRlclN0
eWxlLT5hcHBlYXJhbmNlKCkpIHsKLSAgICBjYXNlIFRleHRBcmVhUGFydDoKLSAgICBjYXNlIFNl
YXJjaEZpZWxkUGFydDoKLSAgICBjYXNlIFRleHRGaWVsZFBhcnQ6IHsKLSAgICAgICAgaW50IHBh
ZGRpbmcgPSBmaW5kRnJhbWVMaW5lV2lkdGgoc3R5bGUpOwotICAgICAgICByZW5kZXJTdHlsZS0+
c2V0UGFkZGluZ0xlZnQoTGVuZ3RoKHBhZGRpbmcsIEZpeGVkKSk7Ci0gICAgICAgIHJlbmRlclN0
eWxlLT5zZXRQYWRkaW5nUmlnaHQoTGVuZ3RoKHBhZGRpbmcsIEZpeGVkKSk7Ci0gICAgICAgIHJl
bmRlclN0eWxlLT5zZXRQYWRkaW5nVG9wKExlbmd0aChwYWRkaW5nLCBGaXhlZCkpOwotICAgICAg
ICByZW5kZXJTdHlsZS0+c2V0UGFkZGluZ0JvdHRvbShMZW5ndGgocGFkZGluZywgRml4ZWQpKTsK
LSAgICAgICAgYnJlYWs7Ci0gICAgfQotICAgIGRlZmF1bHQ6Ci0gICAgICAgIGJyZWFrOwotICAg
IH0KLSAgICAvLyBJZiB0aGUgd2lkdGggYW5kIGhlaWdodCBhcmUgYm90aCBzcGVjaWZpZWQsIHRo
ZW4gd2UgaGF2ZSBub3RoaW5nIHRvIGRvLgotICAgIGlmICghcmVuZGVyU3R5bGUtPndpZHRoKCku
aXNJbnRyaW5zaWNPckF1dG8oKSAmJiAhcmVuZGVyU3R5bGUtPmhlaWdodCgpLmlzQXV0bygpKQot
ICAgICAgICByZXR1cm47Ci0KLSAgICBzd2l0Y2ggKHJlbmRlclN0eWxlLT5hcHBlYXJhbmNlKCkp
IHsKLSAgICBjYXNlIENoZWNrYm94UGFydDogewotICAgICAgICBRU3R5bGVPcHRpb24gc3R5bGVP
cHRpb247Ci0gICAgICAgIHN0eWxlT3B0aW9uLnN0YXRlIHw9IFFTdHlsZTo6U3RhdGVfU21hbGw7
Ci0gICAgICAgIGludCBjaGVja0JveFdpZHRoID0gc3R5bGUtPnBpeGVsTWV0cmljKFFTdHlsZTo6
UE1fSW5kaWNhdG9yV2lkdGgsICZzdHlsZU9wdGlvbik7Ci0gICAgICAgIGNoZWNrQm94V2lkdGgg
Kj0gcmVuZGVyU3R5bGUtPmVmZmVjdGl2ZVpvb20oKTsKLSAgICAgICAgc2l6ZSA9IFFTaXplKGNo
ZWNrQm94V2lkdGgsIGNoZWNrQm94V2lkdGgpOwotICAgICAgICBicmVhazsKLSAgICB9Ci0gICAg
Y2FzZSBSYWRpb1BhcnQ6IHsKLSAgICAgICAgUVN0eWxlT3B0aW9uIHN0eWxlT3B0aW9uOwotICAg
ICAgICBzdHlsZU9wdGlvbi5zdGF0ZSB8PSBRU3R5bGU6OlN0YXRlX1NtYWxsOwotICAgICAgICBp
bnQgcmFkaW9XaWR0aCA9IHN0eWxlLT5waXhlbE1ldHJpYyhRU3R5bGU6OlBNX0V4Y2x1c2l2ZUlu
ZGljYXRvcldpZHRoLCAmc3R5bGVPcHRpb24pOwotICAgICAgICByYWRpb1dpZHRoICo9IHJlbmRl
clN0eWxlLT5lZmZlY3RpdmVab29tKCk7Ci0gICAgICAgIHNpemUgPSBRU2l6ZShyYWRpb1dpZHRo
LCByYWRpb1dpZHRoKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgfQotICAgIGNhc2UgUHVzaEJ1dHRv
blBhcnQ6Ci0gICAgY2FzZSBCdXR0b25QYXJ0OiB7Ci0gICAgICAgIFFTdHlsZU9wdGlvbkJ1dHRv
biBzdHlsZU9wdGlvbjsKLSAgICAgICAgc3R5bGVPcHRpb24uc3RhdGUgfD0gUVN0eWxlOjpTdGF0
ZV9TbWFsbDsKLSAgICAgICAgUVNpemUgY29udGVudFNpemUgPSBmbS5zaXplKFF0OjpUZXh0U2hv
d01uZW1vbmljLCBRU3RyaW5nOjpmcm9tTGF0aW4xKCJYIikpOwotICAgICAgICBRU2l6ZSBwdXNo
QnV0dG9uU2l6ZSA9IHN0eWxlLT5zaXplRnJvbUNvbnRlbnRzKFFTdHlsZTo6Q1RfUHVzaEJ1dHRv
biwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAmc3R5bGVPcHRpb24sIGNvbnRlbnRTaXplLCAwKTsKLSAgICAgICAgc3R5bGVPcHRpb24ucmVj
dCA9IFFSZWN0KDAsIDAsIHB1c2hCdXR0b25TaXplLndpZHRoKCksIHB1c2hCdXR0b25TaXplLmhl
aWdodCgpKTsKLSAgICAgICAgUVJlY3QgbGF5b3V0UmVjdCA9IHN0eWxlLT5zdWJFbGVtZW50UmVj
dChRU3R5bGU6OlNFX1B1c2hCdXR0b25MYXlvdXRJdGVtLAotICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICZzdHlsZU9wdGlvbiwgMCk7Ci0KLSAgICAgICAg
Ly8gSWYgdGhlIHN0eWxlIHN1cHBvcnRzIGxheW91dCByZWN0cyB3ZSB1c2UgdGhhdCwgYW5kICBj
b21wZW5zYXRlIGFjY29yZGluZ2x5Ci0gICAgICAgIC8vIGluIHBhaW50QnV0dG9uKCkgYmVsb3cu
Ci0gICAgICAgIGlmICghbGF5b3V0UmVjdC5pc051bGwoKSkKLSAgICAgICAgICAgIHNpemUuc2V0
SGVpZ2h0KGxheW91dFJlY3QuaGVpZ2h0KCkpOwotICAgICAgICBlbHNlCi0gICAgICAgICAgICBz
aXplLnNldEhlaWdodChwdXNoQnV0dG9uU2l6ZS5oZWlnaHQoKSk7Ci0KLSAgICAgICAgYnJlYWs7
Ci0gICAgfQotICAgIGNhc2UgTWVudWxpc3RQYXJ0OiB7Ci0gICAgICAgIFFTdHlsZU9wdGlvbkNv
bWJvQm94IHN0eWxlT3B0aW9uOwotICAgICAgICBzdHlsZU9wdGlvbi5zdGF0ZSB8PSBRU3R5bGU6
OlN0YXRlX1NtYWxsOwotICAgICAgICBpbnQgY29udGVudEhlaWdodCA9IHFNYXgoZm0ubGluZVNw
YWNpbmcoKSwgMTQpICsgMjsKLSAgICAgICAgUVNpemUgbWVudUxpc3RTaXplID0gc3R5bGUtPnNp
emVGcm9tQ29udGVudHMoUVN0eWxlOjpDVF9Db21ib0JveCwKLSAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJnN0eWxlT3B0aW9uLCBRU2l6ZSgwLCBj
b250ZW50SGVpZ2h0KSwgMCk7Ci0gICAgICAgIHNpemUuc2V0SGVpZ2h0KG1lbnVMaXN0U2l6ZS5o
ZWlnaHQoKSk7Ci0gICAgICAgIGJyZWFrOwotICAgIH0KLSAgICBkZWZhdWx0OgotICAgICAgICBi
cmVhazsKLSAgICB9Ci0KLSAgICAvLyBGSVhNRTogQ2hlY2sgaXMgZmxhd2VkLCBzaW5jZSBpdCBk
b2Vzbid0IHRha2UgbWluLXdpZHRoL21heC13aWR0aCBpbnRvIGFjY291bnQuCi0gICAgaWYgKHJl
bmRlclN0eWxlLT53aWR0aCgpLmlzSW50cmluc2ljT3JBdXRvKCkgJiYgc2l6ZS53aWR0aCgpID4g
MCkKLSAgICAgICAgcmVuZGVyU3R5bGUtPnNldE1pbldpZHRoKExlbmd0aChzaXplLndpZHRoKCks
IEZpeGVkKSk7Ci0gICAgaWYgKHJlbmRlclN0eWxlLT5oZWlnaHQoKS5pc0F1dG8oKSAmJiBzaXpl
LmhlaWdodCgpID4gMCkKLSAgICAgICAgcmVuZGVyU3R5bGUtPnNldE1pbkhlaWdodChMZW5ndGgo
c2l6ZS5oZWlnaHQoKSwgRml4ZWQpKTsKLX0KLQotCi0KLXZvaWQgUmVuZGVyVGhlbWVRU3R5bGU6
OmFkanVzdEJ1dHRvblN0eWxlKFN0eWxlUmVzb2x2ZXIqIHN0eWxlUmVzb2x2ZXIsIFJlbmRlclN0
eWxlKiBzdHlsZSwgRWxlbWVudCopIGNvbnN0Ci17Ci0gICAgLy8gRGl0Y2ggdGhlIGJvcmRlci4K
LSAgICBzdHlsZS0+cmVzZXRCb3JkZXIoKTsKLQotI2lmZGVmIFFfV1NfTUFDCi0gICAgaWYgKHN0
eWxlLT5hcHBlYXJhbmNlKCkgPT0gUHVzaEJ1dHRvblBhcnQpIHsKLSAgICAgICAgLy8gVGhlIE1h
YyBwb3J0cyBpZ25vcmUgdGhlIHNwZWNpZmllZCBoZWlnaHQgZm9yIDxpbnB1dCB0eXBlPSJidXR0
b24iPiBlbGVtZW50cwotICAgICAgICAvLyB1bmxlc3MgYSBib3JkZXIgYW5kL29yIGJhY2tncm91
bmQgQ1NTIHByb3BlcnR5IGlzIGFsc28gc3BlY2lmaWVkLgotICAgICAgICBzdHlsZS0+c2V0SGVp
Z2h0KExlbmd0aChBdXRvKSk7Ci0gICAgfQotI2VuZGlmCi0KLSAgICBGb250RGVzY3JpcHRpb24g
Zm9udERlc2NyaXB0aW9uID0gc3R5bGUtPmZvbnREZXNjcmlwdGlvbigpOwotICAgIGZvbnREZXNj
cmlwdGlvbi5zZXRJc0Fic29sdXRlU2l6ZSh0cnVlKTsKLQotI2lmZGVmIFFfV1NfTUFDIC8vIFVz
ZSBmaXhlZCBmb250IHNpemUgYW5kIGZhbWlseSBvbiBNYWMgKGxpa2UgU2FmYXJpIGRvZXMpCi0g
ICAgZm9udERlc2NyaXB0aW9uLnNldFNwZWNpZmllZFNpemUobV9idXR0b25Gb250UGl4ZWxTaXpl
KTsKLSAgICBmb250RGVzY3JpcHRpb24uc2V0Q29tcHV0ZWRTaXplKG1fYnV0dG9uRm9udFBpeGVs
U2l6ZSk7Ci0jZWxzZQotICAgIGZvbnREZXNjcmlwdGlvbi5zZXRTcGVjaWZpZWRTaXplKHN0eWxl
LT5mb250U2l6ZSgpKTsKLSAgICBmb250RGVzY3JpcHRpb24uc2V0Q29tcHV0ZWRTaXplKHN0eWxl
LT5mb250U2l6ZSgpKTsKLSNlbmRpZgotCi0gICAgRm9udEZhbWlseSBmb250RmFtaWx5OwotICAg
IGZvbnRGYW1pbHkuc2V0RmFtaWx5KG1fYnV0dG9uRm9udEZhbWlseSk7Ci0gICAgZm9udERlc2Ny
aXB0aW9uLnNldEZhbWlseShmb250RmFtaWx5KTsKLSAgICBzdHlsZS0+c2V0Rm9udERlc2NyaXB0
aW9uKGZvbnREZXNjcmlwdGlvbik7Ci0gICAgc3R5bGUtPmZvbnQoKS51cGRhdGUoc3R5bGVSZXNv
bHZlci0+Zm9udFNlbGVjdG9yKCkpOwotICAgIHN0eWxlLT5zZXRMaW5lSGVpZ2h0KFJlbmRlclN0
eWxlOjppbml0aWFsTGluZUhlaWdodCgpKTsKLSAgICBzZXRCdXR0b25TaXplKHN0eWxlKTsKLSAg
ICBzZXRCdXR0b25QYWRkaW5nKHN0eWxlKTsKLX0KLQotdm9pZCBSZW5kZXJUaGVtZVFTdHlsZTo6
c2V0QnV0dG9uUGFkZGluZyhSZW5kZXJTdHlsZSogc3R5bGUpIGNvbnN0Ci17Ci0gICAgUVN0eWxl
T3B0aW9uQnV0dG9uIHN0eWxlT3B0aW9uOwotICAgIHN0eWxlT3B0aW9uLnN0YXRlIHw9IFFTdHls
ZTo6U3RhdGVfU21hbGw7Ci0KLSAgICAvLyBGYWtlIGEgYnV0dG9uIHJlY3QgaGVyZSwgc2luY2Ug
d2UncmUganVzdCBjb21wdXRpbmcgZGVsdGFzCi0gICAgUVJlY3Qgb3JpZ2luYWxSZWN0ID0gUVJl
Y3QoMCwgMCwgMTAwLCAzMCk7Ci0gICAgc3R5bGVPcHRpb24ucmVjdCA9IG9yaWdpbmFsUmVjdDsK
LQotICAgIC8vIERlZmF1bHQgcGFkZGluZyBpcyBiYXNlZCBvbiB0aGUgYnV0dG9uIG1hcmdpbiBw
aXhlbCBtZXRyaWMKLSAgICBpbnQgYnV0dG9uTWFyZ2luID0gcVN0eWxlKCktPnBpeGVsTWV0cmlj
KFFTdHlsZTo6UE1fQnV0dG9uTWFyZ2luLCAmc3R5bGVPcHRpb24sIDApOwotICAgIGludCBwYWRk
aW5nTGVmdCA9IGJ1dHRvbk1hcmdpbjsKLSAgICBpbnQgcGFkZGluZ1JpZ2h0ID0gYnV0dG9uTWFy
Z2luOwotICAgIGludCBwYWRkaW5nVG9wID0gYnV0dG9uTWFyZ2luOwotICAgIGludCBwYWRkaW5n
Qm90dG9tID0gYnV0dG9uTWFyZ2luOwotCi0gICAgLy8gVGhlbiBjaGVjayBpZiB0aGUgc3R5bGUg
dXNlcyBsYXlvdXQgbWFyZ2lucwotICAgIFFSZWN0IGxheW91dFJlY3QgPSBxU3R5bGUoKS0+c3Vi
RWxlbWVudFJlY3QoUVN0eWxlOjpTRV9QdXNoQnV0dG9uTGF5b3V0SXRlbSwKLSAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZzdHlsZU9wdGlvbiwgMCk7Ci0g
ICAgaWYgKCFsYXlvdXRSZWN0LmlzTnVsbCgpKSB7Ci0gICAgICAgIFFSZWN0IGNvbnRlbnRzUmVj
dCA9IHFTdHlsZSgpLT5zdWJFbGVtZW50UmVjdChRU3R5bGU6OlNFX1B1c2hCdXR0b25Db250ZW50
cywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICZzdHlsZU9wdGlvbiwgMCk7Ci0gICAgICAgIHBhZGRpbmdMZWZ0ID0gY29udGVudHNSZWN0Lmxl
ZnQoKSAtIGxheW91dFJlY3QubGVmdCgpOwotICAgICAgICBwYWRkaW5nUmlnaHQgPSBsYXlvdXRS
ZWN0LnJpZ2h0KCkgLSBjb250ZW50c1JlY3QucmlnaHQoKTsKLSAgICAgICAgcGFkZGluZ1RvcCA9
IGNvbnRlbnRzUmVjdC50b3AoKSAtIGxheW91dFJlY3QudG9wKCk7Ci0KLSAgICAgICAgLy8gQ2Fu
J3QgdXNlIHRoaXMgcmlnaHQgbm93IGJlY2F1c2Ugd2UgZG9uJ3QgaGF2ZSB0aGUgYmFzZWxpbmUg
dG8gY29tcGVuc2F0ZQotICAgICAgICAvLyBwYWRkaW5nQm90dG9tID0gbGF5b3V0UmVjdC5ib3R0
b20oKSAtIGNvbnRlbnRzUmVjdC5ib3R0b20oKTsKLSAgICB9Ci0gICAgc3R5bGUtPnNldFBhZGRp
bmdMZWZ0KExlbmd0aChwYWRkaW5nTGVmdCwgRml4ZWQpKTsKLSAgICBzdHlsZS0+c2V0UGFkZGlu
Z1JpZ2h0KExlbmd0aChwYWRkaW5nUmlnaHQsIEZpeGVkKSk7Ci0gICAgc3R5bGUtPnNldFBhZGRp
bmdUb3AoTGVuZ3RoKHBhZGRpbmdUb3AsIEZpeGVkKSk7Ci0gICAgc3R5bGUtPnNldFBhZGRpbmdC
b3R0b20oTGVuZ3RoKHBhZGRpbmdCb3R0b20sIEZpeGVkKSk7Ci19Ci0KLWJvb2wgUmVuZGVyVGhl
bWVRU3R5bGU6OnBhaW50QnV0dG9uKFJlbmRlck9iamVjdCogbywgY29uc3QgUGFpbnRJbmZvJiBp
LCBjb25zdCBJbnRSZWN0JiByKQotewotICAgIFN0eWxlUGFpbnRlclFTdHlsZSBwKHRoaXMsIGkp
OwotICAgIGlmICghcC5pc1ZhbGlkKCkpCi0gICAgICAgcmV0dXJuIHRydWU7Ci0KLSAgICBRU3R5
bGVPcHRpb25CdXR0b24gb3B0aW9uOwotICAgIGluaXRTdHlsZU9wdGlvbihwLndpZGdldCwgb3B0
aW9uKTsKLSAgICBvcHRpb24ucmVjdCA9IHI7Ci0gICAgb3B0aW9uLnN0YXRlIHw9IFFTdHlsZTo6
U3RhdGVfU21hbGw7Ci0KLSAgICBDb250cm9sUGFydCBhcHBlYXJhbmNlID0gaW5pdGlhbGl6ZUNv
bW1vblFTdHlsZU9wdGlvbnMob3B0aW9uLCBvKTsKLSAgICBpZiAoYXBwZWFyYW5jZSA9PSBQdXNo
QnV0dG9uUGFydCB8fCBhcHBlYXJhbmNlID09IEJ1dHRvblBhcnQpIHsKLSAgICAgICAgb3B0aW9u
LnJlY3QgPSBpbmZsYXRlQnV0dG9uUmVjdChvcHRpb24ucmVjdCk7Ci0gICAgICAgIHAuZHJhd0Nv
bnRyb2woUVN0eWxlOjpDRV9QdXNoQnV0dG9uLCBvcHRpb24pOwotICAgIH0gZWxzZSBpZiAoYXBw
ZWFyYW5jZSA9PSBSYWRpb1BhcnQpCi0gICAgICAgcC5kcmF3Q29udHJvbChRU3R5bGU6OkNFX1Jh
ZGlvQnV0dG9uLCBvcHRpb24pOwotICAgIGVsc2UgaWYgKGFwcGVhcmFuY2UgPT0gQ2hlY2tib3hQ
YXJ0KQotICAgICAgIHAuZHJhd0NvbnRyb2woUVN0eWxlOjpDRV9DaGVja0JveCwgb3B0aW9uKTsK
LQotICAgIHJldHVybiBmYWxzZTsKLX0KLQotYm9vbCBSZW5kZXJUaGVtZVFTdHlsZTo6cGFpbnRU
ZXh0RmllbGQoUmVuZGVyT2JqZWN0KiBvLCBjb25zdCBQYWludEluZm8mIGksIGNvbnN0IEludFJl
Y3QmIHIpCi17Ci0gICAgU3R5bGVQYWludGVyUVN0eWxlIHAodGhpcywgaSk7Ci0gICAgaWYgKCFw
LmlzVmFsaWQoKSkKLSAgICAgICAgcmV0dXJuIHRydWU7Ci0KLSAgICBRU3R5bGVPcHRpb25GcmFt
ZVYyIHBhbmVsOwotICAgIGluaXRTdHlsZU9wdGlvbihwLndpZGdldCwgcGFuZWwpOwotICAgIHBh
bmVsLnJlY3QgPSByOwotICAgIHBhbmVsLmxpbmVXaWR0aCA9IGZpbmRGcmFtZUxpbmVXaWR0aChx
U3R5bGUoKSk7Ci0gICAgcGFuZWwuc3RhdGUgfD0gUVN0eWxlOjpTdGF0ZV9TdW5rZW47Ci0gICAg
cGFuZWwuZmVhdHVyZXMgPSBRU3R5bGVPcHRpb25GcmFtZVYyOjpOb25lOwotCi0gICAgLy8gR2V0
IHRoZSBjb3JyZWN0IHRoZW1lIGRhdGEgZm9yIGEgdGV4dCBmaWVsZAotICAgIENvbnRyb2xQYXJ0
IGFwcGVhcmFuY2UgPSBpbml0aWFsaXplQ29tbW9uUVN0eWxlT3B0aW9ucyhwYW5lbCwgbyk7Ci0g
ICAgaWYgKGFwcGVhcmFuY2UgIT0gVGV4dEZpZWxkUGFydAotICAgICAgICAmJiBhcHBlYXJhbmNl
ICE9IFNlYXJjaEZpZWxkUGFydAotICAgICAgICAmJiBhcHBlYXJhbmNlICE9IFRleHRBcmVhUGFy
dAotICAgICAgICAmJiBhcHBlYXJhbmNlICE9IExpc3Rib3hQYXJ0KQotICAgICAgICByZXR1cm4g
dHJ1ZTsKLQotICAgIC8vIE5vdyBwYWludCB0aGUgdGV4dCBmaWVsZC4KLSAgICBwLmRyYXdQcmlt
aXRpdmUoUVN0eWxlOjpQRV9QYW5lbExpbmVFZGl0LCBwYW5lbCk7Ci0gICAgcmV0dXJuIGZhbHNl
OwotfQotCi12b2lkIFJlbmRlclRoZW1lUVN0eWxlOjphZGp1c3RUZXh0QXJlYVN0eWxlKFN0eWxl
UmVzb2x2ZXIqIHN0eWxlUmVzb2x2ZXIsIFJlbmRlclN0eWxlKiBzdHlsZSwgRWxlbWVudCogZWxl
bWVudCkgY29uc3QKLXsKLSAgICBhZGp1c3RUZXh0RmllbGRTdHlsZShzdHlsZVJlc29sdmVyLCBz
dHlsZSwgZWxlbWVudCk7Ci19Ci0KLWJvb2wgUmVuZGVyVGhlbWVRU3R5bGU6OnBhaW50VGV4dEFy
ZWEoUmVuZGVyT2JqZWN0KiBvLCBjb25zdCBQYWludEluZm8mIGksIGNvbnN0IEludFJlY3QmIHIp
Ci17Ci0gICAgcmV0dXJuIHBhaW50VGV4dEZpZWxkKG8sIGksIHIpOwotfQotCi12b2lkIFJlbmRl
clRoZW1lUVN0eWxlOjpzZXRQb3B1cFBhZGRpbmcoUmVuZGVyU3R5bGUqIHN0eWxlKSBjb25zdAot
ewotICAgIGNvbnN0IGludCBwYWRkaW5nTGVmdCA9IDQ7Ci0gICAgY29uc3QgaW50IHBhZGRpbmdS
aWdodCA9IHN0eWxlLT53aWR0aCgpLmlzRml4ZWQoKSB8fCBzdHlsZS0+d2lkdGgoKS5pc1BlcmNl
bnQoKSA/IDUgOiA4OwotCi0gICAgc3R5bGUtPnNldFBhZGRpbmdMZWZ0KExlbmd0aChwYWRkaW5n
TGVmdCwgRml4ZWQpKTsKLQotICAgIFFTdHlsZU9wdGlvbkNvbWJvQm94IG9wdDsKLSAgICBpbnQg
dyA9IHFTdHlsZSgpLT5waXhlbE1ldHJpYyhRU3R5bGU6OlBNX0J1dHRvbkljb25TaXplLCAmb3B0
LCAwKTsKLSAgICBzdHlsZS0+c2V0UGFkZGluZ1JpZ2h0KExlbmd0aChwYWRkaW5nUmlnaHQgKyB3
LCBGaXhlZCkpOwotCi0gICAgc3R5bGUtPnNldFBhZGRpbmdUb3AoTGVuZ3RoKDIsIEZpeGVkKSk7
Ci0gICAgc3R5bGUtPnNldFBhZGRpbmdCb3R0b20oTGVuZ3RoKDIsIEZpeGVkKSk7Ci19Ci0KLVFQ
YWxldHRlIFJlbmRlclRoZW1lUVN0eWxlOjpjb2xvclBhbGV0dGUoKSBjb25zdAotewotICAgIFFQ
YWxldHRlIHBhbGV0dGUgPSBSZW5kZXJUaGVtZVF0Ojpjb2xvclBhbGV0dGUoKTsKLSAgICBzZXRQ
YWxldHRlRnJvbVBhZ2VDbGllbnRJZkV4aXN0cyhwYWxldHRlKTsKLSAgICByZXR1cm4gcGFsZXR0
ZTsKLX0KLQotYm9vbCBSZW5kZXJUaGVtZVFTdHlsZTo6cGFpbnRNZW51TGlzdChSZW5kZXJPYmpl
Y3QqIG8sIGNvbnN0IFBhaW50SW5mbyYgaSwgY29uc3QgSW50UmVjdCYgcikKLXsKLSAgICBTdHls
ZVBhaW50ZXJRU3R5bGUgcCh0aGlzLCBpKTsKLSAgICBpZiAoIXAuaXNWYWxpZCgpKQotICAgICAg
ICByZXR1cm4gdHJ1ZTsKLQotICAgIFFTdHlsZU9wdGlvbkNvbWJvQm94IG9wdDsKLSAgICBpbml0
U3R5bGVPcHRpb24ocC53aWRnZXQsIG9wdCk7Ci0gICAgaW5pdGlhbGl6ZUNvbW1vblFTdHlsZU9w
dGlvbnMob3B0LCBvKTsKLQotICAgIEludFJlY3QgcmVjdCA9IHI7Ci0KLSNpZiBkZWZpbmVkKFFf
V1NfTUFDKSAmJiAhZGVmaW5lZChRVF9OT19TVFlMRV9NQUMpCi0gICAgLy8gUU1hY1N0eWxlIG1h
a2VzIHRoZSBjb21ibyBib3hlcyBhIGxpdHRsZSBiaXQgc21hbGxlciB0byBsZWF2ZSBzcGFjZSBm
b3IgdGhlIGZvY3VzIHJlY3QuCi0gICAgLy8gQmVjYXVzZSBvZiBpdCwgdGhlIGNvbWJvIGJ1dHRv
biBpcyBkcmF3biBhdCBhIHBvaW50IHRvIHRoZSBsZWZ0IG9mIHdoZXJlIGl0IHdhcyBleHBlY3Qg
dG8gYmUgYW5kIG1heSBlbmQgdXAKLSAgICAvLyBvdmVybGFwcGVkIHdpdGggdGhlIHRleHQuIFRo
aXMgd2lsbCBmb3JjZSBRTWFjU3R5bGUgdG8gZHJhdyB0aGUgY29tYm8gYm94IHdpdGggdGhlIGV4
cGVjdGVkIHdpZHRoLgotICAgIGlmIChxb2JqZWN0X2Nhc3Q8UU1hY1N0eWxlKj4ocC5zdHlsZSkp
Ci0gICAgICAgIHJlY3QuaW5mbGF0ZVgoMyk7Ci0jZW5kaWYKLQotICAgIGNvbnN0IFFQb2ludCB0
b3BMZWZ0ID0gcmVjdC5sb2NhdGlvbigpOwotICAgIHAucGFpbnRlci0+dHJhbnNsYXRlKHRvcExl
ZnQpOwotICAgIG9wdC5yZWN0Lm1vdmVUbyhRUG9pbnQoMCwgMCkpOwotICAgIG9wdC5yZWN0LnNl
dFNpemUocmVjdC5zaXplKCkpOwotCi0gICAgcC5kcmF3Q29tcGxleENvbnRyb2woUVN0eWxlOjpD
Q19Db21ib0JveCwgb3B0KTsKLSAgICBwLnBhaW50ZXItPnRyYW5zbGF0ZSgtdG9wTGVmdCk7Ci0g
ICAgcmV0dXJuIGZhbHNlOwotfQotCi12b2lkIFJlbmRlclRoZW1lUVN0eWxlOjphZGp1c3RNZW51
TGlzdEJ1dHRvblN0eWxlKFN0eWxlUmVzb2x2ZXIqIHN0eWxlUmVzb2x2ZXIsIFJlbmRlclN0eWxl
KiBzdHlsZSwgRWxlbWVudCogZSkgY29uc3QKLXsKLSAgICAvLyBXT1JLQVJPVU5EIGJlY2F1c2Ug
aHRtbC5jc3Mgc3BlY2lmaWVzIC13ZWJraXQtYm9yZGVyLXJhZGl1cyBmb3IgPHNlbGVjdD4gc28g
d2Ugb3ZlcnJpZGUgaXQgaGVyZQotICAgIC8vIHNlZSBhbHNvIGh0dHA6Ly9idWdzLndlYmtpdC5v
cmcvc2hvd19idWcuY2dpP2lkPTE4Mzk5Ci0gICAgc3R5bGUtPnJlc2V0Qm9yZGVyUmFkaXVzKCk7
Ci0KLSAgICBSZW5kZXJUaGVtZVF0OjphZGp1c3RNZW51TGlzdEJ1dHRvblN0eWxlKHN0eWxlUmVz
b2x2ZXIsIHN0eWxlLCBlKTsKLX0KLQotYm9vbCBSZW5kZXJUaGVtZVFTdHlsZTo6cGFpbnRNZW51
TGlzdEJ1dHRvbihSZW5kZXJPYmplY3QqIG8sIGNvbnN0IFBhaW50SW5mbyYgaSwKLSAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBJbnRSZWN0JiByKQotewotICAg
IFN0eWxlUGFpbnRlclFTdHlsZSBwKHRoaXMsIGkpOwotICAgIGlmICghcC5pc1ZhbGlkKCkpCi0g
ICAgICAgIHJldHVybiB0cnVlOwotCi0gICAgUVN0eWxlT3B0aW9uQ29tYm9Cb3ggb3B0aW9uOwot
ICAgIGluaXRTdHlsZU9wdGlvbihwLndpZGdldCwgb3B0aW9uKTsKLSAgICBpbml0aWFsaXplQ29t
bW9uUVN0eWxlT3B0aW9ucyhvcHRpb24sIG8pOwotICAgIG9wdGlvbi5yZWN0ID0gcjsKLQotICAg
IC8vIGZvciBkcmF3aW5nIHRoZSBjb21ibyBib3ggYXJyb3csIHJlbHkgb25seSBvbiB0aGUgZmFs
bGJhY2sgc3R5bGUKLSAgICBwLnN0eWxlID0gZmFsbGJhY2tTdHlsZSgpOwotICAgIG9wdGlvbi5z
dWJDb250cm9scyA9IFFTdHlsZTo6U0NfQ29tYm9Cb3hBcnJvdzsKLSAgICBwLmRyYXdDb21wbGV4
Q29udHJvbChRU3R5bGU6OkNDX0NvbWJvQm94LCBvcHRpb24pOwotCi0gICAgcmV0dXJuIGZhbHNl
OwotfQotCi0jaWYgRU5BQkxFKFBST0dSRVNTX0VMRU1FTlQpCi1kb3VibGUgUmVuZGVyVGhlbWVR
U3R5bGU6OmFuaW1hdGlvbkR1cmF0aW9uRm9yUHJvZ3Jlc3NCYXIoUmVuZGVyUHJvZ3Jlc3MqIHJl
bmRlclByb2dyZXNzKSBjb25zdAotewotICAgIGlmIChyZW5kZXJQcm9ncmVzcy0+cG9zaXRpb24o
KSA+PSAwKQotICAgICAgICByZXR1cm4gMDsKLQotICAgIFFTdHlsZU9wdGlvblByb2dyZXNzQmFy
VjIgb3B0aW9uOwotICAgIG9wdGlvbi5yZWN0LnNldFNpemUocmVuZGVyUHJvZ3Jlc3MtPnBpeGVs
U25hcHBlZFNpemUoKSk7Ci0gICAgLy8gRklYTUU6IFVudGlsIGh0dHA6Ly9idWdyZXBvcnRzLnF0
Lm5va2lhLmNvbS9icm93c2UvUVRCVUctOTE3MSBpcyBmaXhlZCwKLSAgICAvLyB3ZSBzaW11bGF0
ZSBvbmUgc3F1YXJlIGFuaW1hdGluZyBhY3Jvc3MgdGhlIHByb2dyZXNzIGJhci4KLSAgICByZXR1
cm4gKG9wdGlvbi5yZWN0LndpZHRoKCkgLyBxU3R5bGUoKS0+cGl4ZWxNZXRyaWMoUVN0eWxlOjpQ
TV9Qcm9ncmVzc0JhckNodW5rV2lkdGgsICZvcHRpb24pKSAqIGFuaW1hdGlvblJlcGVhdEludGVy
dmFsRm9yUHJvZ3Jlc3NCYXIocmVuZGVyUHJvZ3Jlc3MpOwotfQotCi1ib29sIFJlbmRlclRoZW1l
UVN0eWxlOjpwYWludFByb2dyZXNzQmFyKFJlbmRlck9iamVjdCogbywgY29uc3QgUGFpbnRJbmZv
JiBwaSwgY29uc3QgSW50UmVjdCYgcikKLXsKLSAgICBpZiAoIW8tPmlzUHJvZ3Jlc3MoKSkKLSAg
ICAgICAgcmV0dXJuIHRydWU7Ci0KLSAgICBTdHlsZVBhaW50ZXJRU3R5bGUgcCh0aGlzLCBwaSk7
Ci0gICAgaWYgKCFwLmlzVmFsaWQoKSkKLSAgICAgICByZXR1cm4gdHJ1ZTsKLQotICAgIFFTdHls
ZU9wdGlvblByb2dyZXNzQmFyVjIgb3B0aW9uOwotICAgIGluaXRTdHlsZU9wdGlvbihwLndpZGdl
dCwgb3B0aW9uKTsKLSAgICBpbml0aWFsaXplQ29tbW9uUVN0eWxlT3B0aW9ucyhvcHRpb24sIG8p
OwotCi0gICAgUmVuZGVyUHJvZ3Jlc3MqIHJlbmRlclByb2dyZXNzID0gdG9SZW5kZXJQcm9ncmVz
cyhvKTsKLSAgICBvcHRpb24ucmVjdCA9IHI7Ci0gICAgb3B0aW9uLm1heGltdW0gPSBzdGQ6Om51
bWVyaWNfbGltaXRzPGludD46Om1heCgpOwotICAgIG9wdGlvbi5taW5pbXVtID0gMDsKLSAgICBv
cHRpb24ucHJvZ3Jlc3MgPSAocmVuZGVyUHJvZ3Jlc3MtPnBvc2l0aW9uKCkgKiBzdGQ6Om51bWVy
aWNfbGltaXRzPGludD46Om1heCgpKTsKLQotICAgIGNvbnN0IFFQb2ludCB0b3BMZWZ0ID0gci5s
b2NhdGlvbigpOwotICAgIHAucGFpbnRlci0+dHJhbnNsYXRlKHRvcExlZnQpOwotICAgIG9wdGlv
bi5yZWN0Lm1vdmVUbyhRUG9pbnQoMCwgMCkpOwotICAgIG9wdGlvbi5yZWN0LnNldFNpemUoci5z
aXplKCkpOwotCi0gICAgaWYgKG9wdGlvbi5wcm9ncmVzcyA8IDApIHsKLSAgICAgICAgLy8gRklY
TUU6IFVudGlsIGh0dHA6Ly9idWdyZXBvcnRzLnF0Lm5va2lhLmNvbS9icm93c2UvUVRCVUctOTE3
MSBpcyBmaXhlZCwKLSAgICAgICAgLy8gd2Ugc2ltdWxhdGUgb25lIHNxdWFyZSBhbmltYXRpbmcg
YWNyb3NzIHRoZSBwcm9ncmVzcyBiYXIuCi0gICAgICAgIHAuZHJhd0NvbnRyb2woUVN0eWxlOjpD
RV9Qcm9ncmVzc0Jhckdyb292ZSwgb3B0aW9uKTsKLSAgICAgICAgaW50IGNodW5rV2lkdGggPSBx
U3R5bGUoKS0+cGl4ZWxNZXRyaWMoUVN0eWxlOjpQTV9Qcm9ncmVzc0JhckNodW5rV2lkdGgsICZv
cHRpb24pOwotICAgICAgICBRQ29sb3IgY29sb3IgPSAob3B0aW9uLnBhbGV0dGUuaGlnaGxpZ2h0
KCkgPT0gb3B0aW9uLnBhbGV0dGUuYmFja2dyb3VuZCgpKSA/IG9wdGlvbi5wYWxldHRlLmNvbG9y
KFFQYWxldHRlOjpBY3RpdmUsIFFQYWxldHRlOjpIaWdobGlnaHQpIDogb3B0aW9uLnBhbGV0dGUu
Y29sb3IoUVBhbGV0dGU6OkhpZ2hsaWdodCk7Ci0gICAgICAgIGlmIChyZW5kZXJQcm9ncmVzcy0+
c3R5bGUoKS0+ZGlyZWN0aW9uKCkgPT0gUlRMKQotICAgICAgICAgICAgcC5wYWludGVyLT5maWxs
UmVjdChvcHRpb24ucmVjdC5yaWdodCgpIC0gY2h1bmtXaWR0aCAgLSByZW5kZXJQcm9ncmVzcy0+
YW5pbWF0aW9uUHJvZ3Jlc3MoKSAqIG9wdGlvbi5yZWN0LndpZHRoKCksIDAsIGNodW5rV2lkdGgs
IG9wdGlvbi5yZWN0LmhlaWdodCgpLCBjb2xvcik7Ci0gICAgICAgIGVsc2UKLSAgICAgICAgICAg
IHAucGFpbnRlci0+ZmlsbFJlY3QocmVuZGVyUHJvZ3Jlc3MtPmFuaW1hdGlvblByb2dyZXNzKCkg
KiBvcHRpb24ucmVjdC53aWR0aCgpLCAwLCBjaHVua1dpZHRoLCBvcHRpb24ucmVjdC5oZWlnaHQo
KSwgY29sb3IpOwotICAgIH0gZWxzZQotICAgICAgICBwLmRyYXdDb250cm9sKFFTdHlsZTo6Q0Vf
UHJvZ3Jlc3NCYXIsIG9wdGlvbik7Ci0KLSAgICBwLnBhaW50ZXItPnRyYW5zbGF0ZSgtdG9wTGVm
dCk7Ci0KLSAgICByZXR1cm4gZmFsc2U7Ci19Ci0jZW5kaWYKLQotYm9vbCBSZW5kZXJUaGVtZVFT
dHlsZTo6cGFpbnRTbGlkZXJUcmFjayhSZW5kZXJPYmplY3QqIG8sIGNvbnN0IFBhaW50SW5mbyYg
cGksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgSW50UmVjdCYg
cikKLXsKLSAgICBTdHlsZVBhaW50ZXJRU3R5bGUgcCh0aGlzLCBwaSk7Ci0gICAgaWYgKCFwLmlz
VmFsaWQoKSkKLSAgICAgICAgcmV0dXJuIHRydWU7Ci0KLSAgICBjb25zdCBRUG9pbnQgdG9wTGVm
dCA9IHIubG9jYXRpb24oKTsKLSAgICBwLnBhaW50ZXItPnRyYW5zbGF0ZSh0b3BMZWZ0KTsKLQot
ICAgIFFTdHlsZU9wdGlvblNsaWRlciBvcHRpb247Ci0gICAgaW5pdFN0eWxlT3B0aW9uKHAud2lk
Z2V0LCBvcHRpb24pOwotICAgIG9wdGlvbi5zdWJDb250cm9scyA9IFFTdHlsZTo6U0NfU2xpZGVy
R3Jvb3ZlOwotICAgIENvbnRyb2xQYXJ0IGFwcGVhcmFuY2UgPSBpbml0aWFsaXplQ29tbW9uUVN0
eWxlT3B0aW9ucyhvcHRpb24sIG8pOwotICAgIG9wdGlvbi5yZWN0ID0gcjsKLSAgICBvcHRpb24u
cmVjdC5tb3ZlVG8oUVBvaW50KDAsIDApKTsKLSAgICBpZiAoYXBwZWFyYW5jZSA9PSBTbGlkZXJW
ZXJ0aWNhbFBhcnQpCi0gICAgICAgIG9wdGlvbi5vcmllbnRhdGlvbiA9IFF0OjpWZXJ0aWNhbDsK
LSAgICBpZiAoaXNQcmVzc2VkKG8pKQotICAgICAgICBvcHRpb24uc3RhdGUgfD0gUVN0eWxlOjpT
dGF0ZV9TdW5rZW47Ci0KLSAgICAvLyBzb21lIHN0eWxlcyBuZWVkIHRoaXMgdG8gc2hvdyBhIGhp
Z2hsaWdodCBvbiBvbmUgc2lkZSBvZiB0aGUgZ3Jvb3ZlCi0gICAgSFRNTElucHV0RWxlbWVudCog
c2xpZGVyID0gby0+bm9kZSgpLT50b0lucHV0RWxlbWVudCgpOwotICAgIGlmIChzbGlkZXIpIHsK
LSAgICAgICAgb3B0aW9uLnVwc2lkZURvd24gPSAoYXBwZWFyYW5jZSA9PSBTbGlkZXJIb3Jpem9u
dGFsUGFydCkgJiYgIW8tPnN0eWxlKCktPmlzTGVmdFRvUmlnaHREaXJlY3Rpb24oKTsKLSAgICAg
ICAgLy8gVXNlIHRoZSB3aWR0aCBhcyBhIG11bHRpcGxpZXIgaW4gY2FzZSB0aGUgc2xpZGVyIHZh
bHVlcyBhcmUgPD0gMQotICAgICAgICBjb25zdCBpbnQgd2lkdGggPSByLndpZHRoKCkgPiAwID8g
ci53aWR0aCgpIDogMTAwOwotICAgICAgICBvcHRpb24ubWF4aW11bSA9IHNsaWRlci0+bWF4aW11
bSgpICogd2lkdGg7Ci0gICAgICAgIG9wdGlvbi5taW5pbXVtID0gc2xpZGVyLT5taW5pbXVtKCkg
KiB3aWR0aDsKLSAgICAgICAgaWYgKCFvcHRpb24udXBzaWRlRG93bikKLSAgICAgICAgICAgIG9w
dGlvbi5zbGlkZXJQb3NpdGlvbiA9IHNsaWRlci0+dmFsdWVBc051bWJlcigpICogd2lkdGg7Ci0g
ICAgICAgIGVsc2UKLSAgICAgICAgICAgIG9wdGlvbi5zbGlkZXJQb3NpdGlvbiA9IG9wdGlvbi5t
aW5pbXVtICsgb3B0aW9uLm1heGltdW0gLSBzbGlkZXItPnZhbHVlQXNOdW1iZXIoKSAqIHdpZHRo
OwotICAgIH0KLQotICAgIHAuZHJhd0NvbXBsZXhDb250cm9sKFFTdHlsZTo6Q0NfU2xpZGVyLCBv
cHRpb24pOwotCi0gICAgaWYgKG9wdGlvbi5zdGF0ZSAmIFFTdHlsZTo6U3RhdGVfSGFzRm9jdXMp
IHsKLSAgICAgICAgUVN0eWxlT3B0aW9uRm9jdXNSZWN0IGZvY3VzT3B0aW9uOwotICAgICAgICBm
b2N1c09wdGlvbi5yZWN0ID0gcjsKLSAgICAgICAgcC5kcmF3UHJpbWl0aXZlKFFTdHlsZTo6UEVf
RnJhbWVGb2N1c1JlY3QsIGZvY3VzT3B0aW9uKTsKLSAgICB9Ci0gICAgcC5wYWludGVyLT50cmFu
c2xhdGUoLXRvcExlZnQpOwotICAgIHJldHVybiBmYWxzZTsKLX0KLQotdm9pZCBSZW5kZXJUaGVt
ZVFTdHlsZTo6YWRqdXN0U2xpZGVyVHJhY2tTdHlsZShTdHlsZVJlc29sdmVyKiwgUmVuZGVyU3R5
bGUqIHN0eWxlLCBFbGVtZW50KikgY29uc3QKLXsKLSAgICBzdHlsZS0+c2V0Qm94U2hhZG93KG51
bGxwdHIpOwotfQotCi1ib29sIFJlbmRlclRoZW1lUVN0eWxlOjpwYWludFNsaWRlclRodW1iKFJl
bmRlck9iamVjdCogbywgY29uc3QgUGFpbnRJbmZvJiBwaSwKLSAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBjb25zdCBJbnRSZWN0JiByKQotewotICAgIFN0eWxlUGFpbnRlclFT
dHlsZSBwKHRoaXMsIHBpKTsKLSAgICBpZiAoIXAuaXNWYWxpZCgpKQotICAgICAgICByZXR1cm4g
dHJ1ZTsKLQotICAgIGNvbnN0IFFQb2ludCB0b3BMZWZ0ID0gci5sb2NhdGlvbigpOwotICAgIHAu
cGFpbnRlci0+dHJhbnNsYXRlKHRvcExlZnQpOwotCi0gICAgUVN0eWxlT3B0aW9uU2xpZGVyIG9w
dGlvbjsKLSAgICBpbml0U3R5bGVPcHRpb24ocC53aWRnZXQsIG9wdGlvbik7Ci0gICAgb3B0aW9u
LnN1YkNvbnRyb2xzID0gUVN0eWxlOjpTQ19TbGlkZXJIYW5kbGU7Ci0gICAgQ29udHJvbFBhcnQg
YXBwZWFyYW5jZSA9IGluaXRpYWxpemVDb21tb25RU3R5bGVPcHRpb25zKG9wdGlvbiwgbyk7Ci0g
ICAgb3B0aW9uLnJlY3QgPSByOwotICAgIG9wdGlvbi5yZWN0Lm1vdmVUbyhRUG9pbnQoMCwgMCkp
OwotICAgIGlmIChhcHBlYXJhbmNlID09IFNsaWRlclRodW1iVmVydGljYWxQYXJ0KQotICAgICAg
ICBvcHRpb24ub3JpZW50YXRpb24gPSBRdDo6VmVydGljYWw7Ci0gICAgaWYgKGlzUHJlc3NlZChv
KSkgewotICAgICAgICBvcHRpb24uYWN0aXZlU3ViQ29udHJvbHMgPSBRU3R5bGU6OlNDX1NsaWRl
ckhhbmRsZTsKLSAgICAgICAgb3B0aW9uLnN0YXRlIHw9IFFTdHlsZTo6U3RhdGVfU3Vua2VuOwot
ICAgIH0KLQotICAgIHAuZHJhd0NvbXBsZXhDb250cm9sKFFTdHlsZTo6Q0NfU2xpZGVyLCBvcHRp
b24pOwotICAgIHAucGFpbnRlci0+dHJhbnNsYXRlKC10b3BMZWZ0KTsKLSAgICByZXR1cm4gZmFs
c2U7Ci19Ci0KLXZvaWQgUmVuZGVyVGhlbWVRU3R5bGU6OmFkanVzdFNsaWRlclRodW1iU3R5bGUo
U3R5bGVSZXNvbHZlciogc3R5bGVSZXNvbHZlciwgUmVuZGVyU3R5bGUqIHN0eWxlLCBFbGVtZW50
KiBlbGVtZW50KSBjb25zdAotewotICAgIFJlbmRlclRoZW1lOjphZGp1c3RTbGlkZXJUaHVtYlN0
eWxlKHN0eWxlUmVzb2x2ZXIsIHN0eWxlLCBlbGVtZW50KTsKLSAgICBzdHlsZS0+c2V0Qm94U2hh
ZG93KG51bGxwdHIpOwotfQotCi1ib29sIFJlbmRlclRoZW1lUVN0eWxlOjpwYWludFNlYXJjaEZp
ZWxkKFJlbmRlck9iamVjdCogbywgY29uc3QgUGFpbnRJbmZvJiBwaSwKLSAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBJbnRSZWN0JiByKQotewotICAgIHJldHVybiBw
YWludFRleHRGaWVsZChvLCBwaSwgcik7Ci19Ci0KLXZvaWQgUmVuZGVyVGhlbWVRU3R5bGU6OmFk
anVzdFNlYXJjaEZpZWxkRGVjb3JhdGlvblN0eWxlKFN0eWxlUmVzb2x2ZXIqIHN0eWxlUmVzb2x2
ZXIsIFJlbmRlclN0eWxlKiBzdHlsZSwgRWxlbWVudCogZSkgY29uc3QKLXsKLSAgICBub3RJbXBs
ZW1lbnRlZCgpOwotICAgIFJlbmRlclRoZW1lOjphZGp1c3RTZWFyY2hGaWVsZERlY29yYXRpb25T
dHlsZShzdHlsZVJlc29sdmVyLCBzdHlsZSwgZSk7Ci19Ci0KLWJvb2wgUmVuZGVyVGhlbWVRU3R5
bGU6OnBhaW50U2VhcmNoRmllbGREZWNvcmF0aW9uKFJlbmRlck9iamVjdCogbywgY29uc3QgUGFp
bnRJbmZvJiBwaSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgY29uc3QgSW50UmVjdCYgcikKLXsKLSAgICBub3RJbXBsZW1lbnRlZCgpOwotICAgIHJldHVy
biBSZW5kZXJUaGVtZTo6cGFpbnRTZWFyY2hGaWVsZERlY29yYXRpb24obywgcGksIHIpOwotfQot
Ci12b2lkIFJlbmRlclRoZW1lUVN0eWxlOjphZGp1c3RTZWFyY2hGaWVsZFJlc3VsdHNEZWNvcmF0
aW9uU3R5bGUoU3R5bGVSZXNvbHZlciogc3R5bGVSZXNvbHZlciwgUmVuZGVyU3R5bGUqIHN0eWxl
LCBFbGVtZW50KiBlKSBjb25zdAotewotICAgIG5vdEltcGxlbWVudGVkKCk7Ci0gICAgUmVuZGVy
VGhlbWU6OmFkanVzdFNlYXJjaEZpZWxkUmVzdWx0c0RlY29yYXRpb25TdHlsZShzdHlsZVJlc29s
dmVyLCBzdHlsZSwgZSk7Ci19Ci0KLWJvb2wgUmVuZGVyVGhlbWVRU3R5bGU6OnBhaW50U2VhcmNo
RmllbGRSZXN1bHRzRGVjb3JhdGlvbihSZW5kZXJPYmplY3QqIG8sIGNvbnN0IFBhaW50SW5mbyYg
cGksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBjb25zdCBJbnRSZWN0JiByKQotewotICAgIG5vdEltcGxlbWVudGVkKCk7Ci0gICAgcmV0dXJu
IFJlbmRlclRoZW1lOjpwYWludFNlYXJjaEZpZWxkUmVzdWx0c0RlY29yYXRpb24obywgcGksIHIp
OwotfQotCi0jaWZuZGVmIFFUX05PX1NQSU5CT1gKLQotYm9vbCBSZW5kZXJUaGVtZVFTdHlsZTo6
cGFpbnRJbm5lclNwaW5CdXR0b24oUmVuZGVyT2JqZWN0KiBvLCBjb25zdCBQYWludEluZm8mIHBh
aW50SW5mbywgY29uc3QgSW50UmVjdCYgcmVjdCkKLXsKLSAgICBTdHlsZVBhaW50ZXJRU3R5bGUg
cCh0aGlzLCBwYWludEluZm8pOwotICAgIGlmICghcC5pc1ZhbGlkKCkpCi0gICAgICAgcmV0dXJu
IHRydWU7Ci0KLSAgICBRU3R5bGVPcHRpb25TcGluQm94IG9wdGlvbjsKLSAgICBpbml0U3R5bGVP
cHRpb24ocC53aWRnZXQsIG9wdGlvbik7Ci0gICAgb3B0aW9uLnN1YkNvbnRyb2xzID0gUVN0eWxl
OjpTQ19TcGluQm94VXAgfCBRU3R5bGU6OlNDX1NwaW5Cb3hEb3duOwotICAgIGlmICghaXNSZWFk
T25seUNvbnRyb2wobykpIHsKLSAgICAgICAgaWYgKGlzRW5hYmxlZChvKSkKLSAgICAgICAgICAg
IG9wdGlvbi5zdGVwRW5hYmxlZCA9IFFBYnN0cmFjdFNwaW5Cb3g6OlN0ZXBVcEVuYWJsZWQgfCBR
QWJzdHJhY3RTcGluQm94OjpTdGVwRG93bkVuYWJsZWQ7Ci0gICAgICAgIGlmIChpc1ByZXNzZWQo
bykpIHsKLSAgICAgICAgICAgIG9wdGlvbi5zdGF0ZSB8PSBRU3R5bGU6OlN0YXRlX1N1bmtlbjsK
LSAgICAgICAgICAgIGlmIChpc1NwaW5VcEJ1dHRvblBhcnRQcmVzc2VkKG8pKQotICAgICAgICAg
ICAgICAgIG9wdGlvbi5hY3RpdmVTdWJDb250cm9scyA9IFFTdHlsZTo6U0NfU3BpbkJveFVwOwot
ICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgIG9wdGlvbi5hY3RpdmVTdWJDb250cm9s
cyA9IFFTdHlsZTo6U0NfU3BpbkJveERvd247Ci0gICAgICAgIH0KLSAgICB9Ci0gICAgLy8gUmVu
ZGVyIHRoZSBzcGluIGJ1dHRvbnMgZm9yIExUUiBvciBSVEwgYWNjb3JkaW5nbHkuCi0gICAgb3B0
aW9uLmRpcmVjdGlvbiA9IG8tPnN0eWxlKCktPmlzTGVmdFRvUmlnaHREaXJlY3Rpb24oKSA/IFF0
OjpMZWZ0VG9SaWdodCA6IFF0OjpSaWdodFRvTGVmdDsKLQotICAgIEludFJlY3QgYnV0dG9uUmVj
dCA9IHJlY3Q7Ci0gICAgLy8gRGVmYXVsdCB0byBtb3ZpbmcgdGhlIGJ1dHRvbnMgYSBsaXR0bGUg
Yml0IHdpdGhpbiB0aGUgZWRpdG9yIGZyYW1lLgotICAgIGludCBpbmZsYXRlWCA9IC0yOwotICAg
IGludCBpbmZsYXRlWSA9IC0yOwotI2lmIGRlZmluZWQoUV9XU19NQUMpICYmICFkZWZpbmVkKFFU
X05PX1NUWUxFX01BQykKLSAgICAvLyBRTWFjU3R5bGUgd2lsbCBwb3NpdGlvbiB0aGUgYXF1YSBi
dXR0b25zIGZsdXNoIHRvIHRoZSByaWdodC4KLSAgICAvLyBUaGlzIHdpbGwgbW92ZSB0aGVtIG1v
cmUgd2l0aGluIHRoZSBjb250cm9sIGZvciBiZXR0ZXIgc3R5bGUsIGEgbGEKLSAgICAvLyBDaHJv
bWl1bSBsb29rICYgZmVlbC4KLSAgICBpZiAocW9iamVjdF9jYXN0PFFNYWNTdHlsZSo+KHAuc3R5
bGUpKSB7Ci0gICAgICAgIGluZmxhdGVYID0gLTQ7Ci0gICAgICAgIC8vIFJlbmRlciBtaW5pIGFx
dWEgc3BpbiBidXR0b25zIGZvciBRTWFjU3R5bGUgdG8gZml0IG5pY2VseSBpbnRvCi0gICAgICAg
IC8vIHRoZSBlZGl0b3IgYXJlYSwgbGlrZSBDaHJvbWl1bS4KLSAgICAgICAgb3B0aW9uLnN0YXRl
IHw9IFFTdHlsZTo6U3RhdGVfTWluaTsKLSAgICB9Ci0jZW5kaWYKLSNpZiAhZGVmaW5lZChRVF9O
T19TVFlMRV9QTEFTVElRVUUpCi0gICAgLy8gUVBsYXN0aXF1ZVN0eWxlIGxvb2tzIGJlc3Qgd2hl
biB0aGUgc3BpbiBidXR0b25zIGFyZSBmbHVzaCB3aXRoIHRoZSBmcmFtZSdzIGVkZ2UuCi0gICAg
aWYgKHFvYmplY3RfY2FzdDxRUGxhc3RpcXVlU3R5bGUqPihwLnN0eWxlKSkgewotICAgICAgICBp
bmZsYXRlWCA9IDA7Ci0gICAgICAgIGluZmxhdGVZID0gMDsKLSAgICB9Ci0jZW5kaWYKLQotICAg
IGJ1dHRvblJlY3QuaW5mbGF0ZVgoaW5mbGF0ZVgpOwotICAgIGJ1dHRvblJlY3QuaW5mbGF0ZVko
aW5mbGF0ZVkpOwotICAgIG9wdGlvbi5yZWN0ID0gYnV0dG9uUmVjdDsKLQotICAgIHAuZHJhd0Nv
bXBsZXhDb250cm9sKFFTdHlsZTo6Q0NfU3BpbkJveCwgb3B0aW9uKTsKLSAgICByZXR1cm4gZmFs
c2U7Ci19Ci0jZW5kaWYKLQotQ29udHJvbFBhcnQgUmVuZGVyVGhlbWVRU3R5bGU6OmluaXRpYWxp
emVDb21tb25RU3R5bGVPcHRpb25zKFFTdHlsZU9wdGlvbiYgb3B0aW9uLCBSZW5kZXJPYmplY3Qq
IG8pIGNvbnN0Ci17Ci0gICAgLy8gRGVmYXVsdCBiaXRzOiBubyBmb2N1cywgbm8gbW91c2Ugb3Zl
cgotICAgIG9wdGlvbi5zdGF0ZSAmPSB+KFFTdHlsZTo6U3RhdGVfSGFzRm9jdXMgfCBRU3R5bGU6
OlN0YXRlX01vdXNlT3Zlcik7Ci0KLSAgICBpZiAoaXNSZWFkT25seUNvbnRyb2wobykpCi0gICAg
ICAgIC8vIFJlYWRvbmx5IGlzIHN1cHBvcnRlZCBvbiB0ZXh0ZmllbGRzLgotICAgICAgICBvcHRp
b24uc3RhdGUgfD0gUVN0eWxlOjpTdGF0ZV9SZWFkT25seTsKLQotICAgIG9wdGlvbi5kaXJlY3Rp
b24gPSBRdDo6TGVmdFRvUmlnaHQ7Ci0KLSAgICBpZiAoaXNIb3ZlcmVkKG8pKQotICAgICAgICBv
cHRpb24uc3RhdGUgfD0gUVN0eWxlOjpTdGF0ZV9Nb3VzZU92ZXI7Ci0KLSAgICBzZXRQYWxldHRl
RnJvbVBhZ2VDbGllbnRJZkV4aXN0cyhvcHRpb24ucGFsZXR0ZSk7Ci0KLSAgICBpZiAoIWlzRW5h
YmxlZChvKSkgewotICAgICAgICBvcHRpb24ucGFsZXR0ZS5zZXRDdXJyZW50Q29sb3JHcm91cChR
UGFsZXR0ZTo6RGlzYWJsZWQpOwotICAgICAgICBvcHRpb24uc3RhdGUgJj0gflFTdHlsZTo6U3Rh
dGVfRW5hYmxlZDsKLSAgICB9Ci0KLSAgICBSZW5kZXJTdHlsZSogc3R5bGUgPSBvLT5zdHlsZSgp
OwotICAgIGlmICghc3R5bGUpCi0gICAgICAgIHJldHVybiBOb0NvbnRyb2xQYXJ0OwotCi0gICAg
Q29udHJvbFBhcnQgcmVzdWx0ID0gc3R5bGUtPmFwcGVhcmFuY2UoKTsKLSAgICBpZiAoc3VwcG9y
dHNGb2N1cyhyZXN1bHQpICYmIGlzRm9jdXNlZChvKSkgewotICAgICAgICBvcHRpb24uc3RhdGUg
fD0gUVN0eWxlOjpTdGF0ZV9IYXNGb2N1czsKLSAgICAgICAgb3B0aW9uLnN0YXRlIHw9IFFTdHls
ZTo6U3RhdGVfS2V5Ym9hcmRGb2N1c0NoYW5nZTsKLSAgICB9Ci0KLSAgICBpZiAoc3R5bGUtPmRp
cmVjdGlvbigpID09IFdlYkNvcmU6OlJUTCkKLSAgICAgICAgb3B0aW9uLmRpcmVjdGlvbiA9IFF0
OjpSaWdodFRvTGVmdDsKLQotICAgIHN3aXRjaCAocmVzdWx0KSB7Ci0gICAgY2FzZSBQdXNoQnV0
dG9uUGFydDoKLSAgICBjYXNlIFNxdWFyZUJ1dHRvblBhcnQ6Ci0gICAgY2FzZSBCdXR0b25QYXJ0
OgotICAgIGNhc2UgQnV0dG9uQmV2ZWxQYXJ0OgotICAgIGNhc2UgTGlzdEl0ZW1QYXJ0OgotICAg
IGNhc2UgTWVudWxpc3RCdXR0b25QYXJ0OgotICAgIGNhc2UgU2VhcmNoRmllbGRSZXN1bHRzQnV0
dG9uUGFydDoKLSAgICBjYXNlIFNlYXJjaEZpZWxkQ2FuY2VsQnV0dG9uUGFydDogewotICAgICAg
ICBpZiAoaXNQcmVzc2VkKG8pKQotICAgICAgICAgICAgb3B0aW9uLnN0YXRlIHw9IFFTdHlsZTo6
U3RhdGVfU3Vua2VuOwotICAgICAgICBlbHNlIGlmIChyZXN1bHQgPT0gUHVzaEJ1dHRvblBhcnQg
fHwgcmVzdWx0ID09IEJ1dHRvblBhcnQpCi0gICAgICAgICAgICBvcHRpb24uc3RhdGUgfD0gUVN0
eWxlOjpTdGF0ZV9SYWlzZWQ7Ci0gICAgICAgIGJyZWFrOwotICAgIH0KLSAgICBjYXNlIFJhZGlv
UGFydDoKLSAgICBjYXNlIENoZWNrYm94UGFydDoKLSAgICAgICAgb3B0aW9uLnN0YXRlIHw9IChp
c0NoZWNrZWQobykgPyBRU3R5bGU6OlN0YXRlX09uIDogUVN0eWxlOjpTdGF0ZV9PZmYpOwotICAg
IH0KLQotICAgIHJldHVybiByZXN1bHQ7Ci19Ci0KLXZvaWQgUmVuZGVyVGhlbWVRU3R5bGU6OmFk
anVzdFNsaWRlclRodW1iU2l6ZShSZW5kZXJTdHlsZSogc3R5bGUsIEVsZW1lbnQqIGVsZW1lbnQp
IGNvbnN0Ci17Ci0gICAgY29uc3QgQ29udHJvbFBhcnQgcGFydCA9IHN0eWxlLT5hcHBlYXJhbmNl
KCk7Ci0gICAgaWYgKHBhcnQgPT0gU2xpZGVyVGh1bWJIb3Jpem9udGFsUGFydCB8fCBwYXJ0ID09
IFNsaWRlclRodW1iVmVydGljYWxQYXJ0KSB7Ci0gICAgICAgIFFTdHlsZU9wdGlvblNsaWRlciBv
cHRpb247Ci0gICAgICAgIGlmIChwYXJ0ID09IFNsaWRlclRodW1iVmVydGljYWxQYXJ0KQotICAg
ICAgICAgICAgb3B0aW9uLm9yaWVudGF0aW9uID0gUXQ6OlZlcnRpY2FsOwotCi0gICAgICAgIFFT
dHlsZSogcXN0eWxlID0gcVN0eWxlKCk7Ci0KLSAgICAgICAgaW50IGxlbmd0aCA9IHFzdHlsZS0+
cGl4ZWxNZXRyaWMoUVN0eWxlOjpQTV9TbGlkZXJMZW5ndGgsICZvcHRpb24pOwotICAgICAgICBp
bnQgdGhpY2tuZXNzID0gcXN0eWxlLT5waXhlbE1ldHJpYyhRU3R5bGU6OlBNX1NsaWRlclRoaWNr
bmVzcywgJm9wdGlvbik7Ci0gICAgICAgIGlmIChvcHRpb24ub3JpZW50YXRpb24gPT0gUXQ6OlZl
cnRpY2FsKSB7Ci0gICAgICAgICAgICBzdHlsZS0+c2V0V2lkdGgoTGVuZ3RoKHRoaWNrbmVzcywg
Rml4ZWQpKTsKLSAgICAgICAgICAgIHN0eWxlLT5zZXRIZWlnaHQoTGVuZ3RoKGxlbmd0aCwgRml4
ZWQpKTsKLSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIHN0eWxlLT5zZXRXaWR0aChMZW5n
dGgobGVuZ3RoLCBGaXhlZCkpOwotICAgICAgICAgICAgc3R5bGUtPnNldEhlaWdodChMZW5ndGgo
dGhpY2tuZXNzLCBGaXhlZCkpOwotICAgICAgICB9Ci0gICAgfSBlbHNlCi0gICAgICAgIFJlbmRl
clRoZW1lUXQ6OmFkanVzdFNsaWRlclRodW1iU2l6ZShzdHlsZSwgZWxlbWVudCk7Ci19Ci0KLX0K
LQotLy8gdmltOiB0cz00IHN3PTQgZXQKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvcXQvV2Vi
Q29yZVN1cHBvcnQvUmVuZGVyVGhlbWVRU3R5bGUuaCBiL1NvdXJjZS9XZWJLaXQvcXQvV2ViQ29y
ZVN1cHBvcnQvUmVuZGVyVGhlbWVRU3R5bGUuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5k
ZXggMmNjOTk5MzA4MDQ1MGY5MzkxMjc4ZDQ5ODcxZTU3MTkyNWQwZTFhZi4uMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViS2l0L3F0L1dlYkNv
cmVTdXBwb3J0L1JlbmRlclRoZW1lUVN0eWxlLmgKKysrIC9kZXYvbnVsbApAQCAtMSwxNDggKzAs
MCBAQAotLyoKLSAqIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSB0aGVtZSBpbXBsZW1lbnRhdGlv
biBmb3IgZm9ybSBjb250cm9scyBpbiBXZWJDb3JlLgotICoKLSAqIENvcHlyaWdodCAoQykgMjAx
MS0yMDEyIE5va2lhIENvcnBvcmF0aW9uIGFuZC9vciBpdHMgc3Vic2lkaWFyeSgtaWVzKS4KLSAq
Ci0gKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUg
aXQgYW5kL29yCi0gKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFy
eSBHZW5lcmFsIFB1YmxpYwotICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29m
dHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCi0gKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9y
IChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0gKgotICogVGhpcyBsaWJyYXJ5
IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0gKiBi
dXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50
eSBvZgotICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQ
T1NFLiAgU2VlIHRoZSBHTlUKLSAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3Ig
bW9yZSBkZXRhaWxzLgotICoKLSAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2Yg
dGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKLSAqIGFsb25nIHdpdGggdGhp
cyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCi0g
KiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQs
IEZpZnRoIEZsb29yLAotICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCi0gKgotICovCi0j
aWZuZGVmIFJlbmRlclRoZW1lUVN0eWxlX2gKLSNkZWZpbmUgUmVuZGVyVGhlbWVRU3R5bGVfaAot
Ci0jaW5jbHVkZSAiUmVuZGVyVGhlbWVRdC5oIgotCi0jaW5jbHVkZSA8UVN0eWxlPgotCi1RVF9C
RUdJTl9OQU1FU1BBQ0UKLSNpZm5kZWYgUVRfTk9fTElORUVESVQKLWNsYXNzIFFMaW5lRWRpdDsK
LSNlbmRpZgotY2xhc3MgUVBhaW50ZXI7Ci1jbGFzcyBRV2lkZ2V0OwotUVRfRU5EX05BTUVTUEFD
RQotCi1uYW1lc3BhY2UgV2ViQ29yZSB7Ci0KLWNsYXNzIFNjcm9sbGJhclRoZW1lUVN0eWxlOwot
Ci1jbGFzcyBSZW5kZXJUaGVtZVFTdHlsZSA6IHB1YmxpYyBSZW5kZXJUaGVtZVF0IHsKLXByaXZh
dGU6Ci0gICAgUmVuZGVyVGhlbWVRU3R5bGUoUGFnZSopOwotICAgIHZpcnR1YWwgflJlbmRlclRo
ZW1lUVN0eWxlKCk7Ci0KLXB1YmxpYzoKLSAgICBzdGF0aWMgUGFzc1JlZlB0cjxSZW5kZXJUaGVt
ZT4gY3JlYXRlKFBhZ2UqKTsKLQotICAgIHZpcnR1YWwgdm9pZCBhZGp1c3RTbGlkZXJUaHVtYlNp
emUoUmVuZGVyU3R5bGUqLCBFbGVtZW50KikgY29uc3Q7Ci0KLSAgICBRU3R5bGUqIHFTdHlsZSgp
IGNvbnN0OwotCi1wcm90ZWN0ZWQ6Ci0gICAgdmlydHVhbCB2b2lkIGFkanVzdEJ1dHRvblN0eWxl
KFN0eWxlUmVzb2x2ZXIqLCBSZW5kZXJTdHlsZSosIEVsZW1lbnQqKSBjb25zdDsKLSAgICB2aXJ0
dWFsIGJvb2wgcGFpbnRCdXR0b24oUmVuZGVyT2JqZWN0KiwgY29uc3QgUGFpbnRJbmZvJiwgY29u
c3QgSW50UmVjdCYpOwotCi0gICAgdmlydHVhbCBib29sIHBhaW50VGV4dEZpZWxkKFJlbmRlck9i
amVjdCosIGNvbnN0IFBhaW50SW5mbyYsIGNvbnN0IEludFJlY3QmKTsKLQotICAgIHZpcnR1YWwg
Ym9vbCBwYWludFRleHRBcmVhKFJlbmRlck9iamVjdCosIGNvbnN0IFBhaW50SW5mbyYsIGNvbnN0
IEludFJlY3QmKTsKLSAgICB2aXJ0dWFsIHZvaWQgYWRqdXN0VGV4dEFyZWFTdHlsZShTdHlsZVJl
c29sdmVyKiwgUmVuZGVyU3R5bGUqLCBFbGVtZW50KikgY29uc3Q7Ci0KLSAgICB2aXJ0dWFsIGJv
b2wgcGFpbnRNZW51TGlzdChSZW5kZXJPYmplY3QqLCBjb25zdCBQYWludEluZm8mLCBjb25zdCBJ
bnRSZWN0Jik7Ci0KLSAgICB2aXJ0dWFsIGJvb2wgcGFpbnRNZW51TGlzdEJ1dHRvbihSZW5kZXJP
YmplY3QqLCBjb25zdCBQYWludEluZm8mLCBjb25zdCBJbnRSZWN0Jik7Ci0gICAgdmlydHVhbCB2
b2lkIGFkanVzdE1lbnVMaXN0QnV0dG9uU3R5bGUoU3R5bGVSZXNvbHZlciosIFJlbmRlclN0eWxl
KiwgRWxlbWVudCopIGNvbnN0OwotCi0jaWYgRU5BQkxFKFBST0dSRVNTX0VMRU1FTlQpCi0gICAg
Ly8gUmV0dXJucyB0aGUgZHVyYXRpb24gb2YgdGhlIGFuaW1hdGlvbiBmb3IgdGhlIHByb2dyZXNz
IGJhci4KLSAgICB2aXJ0dWFsIGRvdWJsZSBhbmltYXRpb25EdXJhdGlvbkZvclByb2dyZXNzQmFy
KFJlbmRlclByb2dyZXNzKikgY29uc3Q7Ci0gICAgdmlydHVhbCBib29sIHBhaW50UHJvZ3Jlc3NC
YXIoUmVuZGVyT2JqZWN0KiwgY29uc3QgUGFpbnRJbmZvJiwgY29uc3QgSW50UmVjdCYpOwotI2Vu
ZGlmCi0KLSAgICB2aXJ0dWFsIGJvb2wgcGFpbnRTbGlkZXJUcmFjayhSZW5kZXJPYmplY3QqLCBj
b25zdCBQYWludEluZm8mLCBjb25zdCBJbnRSZWN0Jik7Ci0gICAgdmlydHVhbCB2b2lkIGFkanVz
dFNsaWRlclRyYWNrU3R5bGUoU3R5bGVSZXNvbHZlciosIFJlbmRlclN0eWxlKiwgRWxlbWVudCop
IGNvbnN0OwotCi0gICAgdmlydHVhbCBib29sIHBhaW50U2xpZGVyVGh1bWIoUmVuZGVyT2JqZWN0
KiwgY29uc3QgUGFpbnRJbmZvJiwgY29uc3QgSW50UmVjdCYpOwotICAgIHZpcnR1YWwgdm9pZCBh
ZGp1c3RTbGlkZXJUaHVtYlN0eWxlKFN0eWxlUmVzb2x2ZXIqLCBSZW5kZXJTdHlsZSosIEVsZW1l
bnQqKSBjb25zdDsKLQotICAgIHZpcnR1YWwgYm9vbCBwYWludFNlYXJjaEZpZWxkKFJlbmRlck9i
amVjdCosIGNvbnN0IFBhaW50SW5mbyYsIGNvbnN0IEludFJlY3QmKTsKLQotICAgIHZpcnR1YWwg
dm9pZCBhZGp1c3RTZWFyY2hGaWVsZERlY29yYXRpb25TdHlsZShTdHlsZVJlc29sdmVyKiwgUmVu
ZGVyU3R5bGUqLCBFbGVtZW50KikgY29uc3Q7Ci0gICAgdmlydHVhbCBib29sIHBhaW50U2VhcmNo
RmllbGREZWNvcmF0aW9uKFJlbmRlck9iamVjdCosIGNvbnN0IFBhaW50SW5mbyYsIGNvbnN0IElu
dFJlY3QmKTsKLQotICAgIHZpcnR1YWwgdm9pZCBhZGp1c3RTZWFyY2hGaWVsZFJlc3VsdHNEZWNv
cmF0aW9uU3R5bGUoU3R5bGVSZXNvbHZlciosIFJlbmRlclN0eWxlKiwgRWxlbWVudCopIGNvbnN0
OwotICAgIHZpcnR1YWwgYm9vbCBwYWludFNlYXJjaEZpZWxkUmVzdWx0c0RlY29yYXRpb24oUmVu
ZGVyT2JqZWN0KiwgY29uc3QgUGFpbnRJbmZvJiwgY29uc3QgSW50UmVjdCYpOwotCi0jaWZuZGVm
IFFUX05PX1NQSU5CT1gKLSAgICB2aXJ0dWFsIGJvb2wgcGFpbnRJbm5lclNwaW5CdXR0b24oUmVu
ZGVyT2JqZWN0KiwgY29uc3QgUGFpbnRJbmZvJiwgY29uc3QgSW50UmVjdCYpOwotI2VuZGlmCi0K
LXByb3RlY3RlZDoKLSAgICB2aXJ0dWFsIHZvaWQgY29tcHV0ZVNpemVCYXNlZE9uU3R5bGUoUmVu
ZGVyU3R5bGUqKSBjb25zdDsKLQotICAgIHZpcnR1YWwgUVNoYXJlZFBvaW50ZXI8U3R5bGVQYWlu
dGVyPiBnZXRTdHlsZVBhaW50ZXIoY29uc3QgUGFpbnRJbmZvJik7Ci0KLSAgICB2aXJ0dWFsIFFS
ZWN0IGluZmxhdGVCdXR0b25SZWN0KGNvbnN0IFFSZWN0JiBvcmlnaW5hbFJlY3QpIGNvbnN0Owot
Ci0gICAgdmlydHVhbCB2b2lkIHNldFBvcHVwUGFkZGluZyhSZW5kZXJTdHlsZSopIGNvbnN0Owot
Ci0gICAgdmlydHVhbCBRUGFsZXR0ZSBjb2xvclBhbGV0dGUoKSBjb25zdDsKLQotcHJpdmF0ZToK
LSAgICBDb250cm9sUGFydCBpbml0aWFsaXplQ29tbW9uUVN0eWxlT3B0aW9ucyhRU3R5bGVPcHRp
b24mLCBSZW5kZXJPYmplY3QqKSBjb25zdDsKLQotICAgIHZvaWQgc2V0QnV0dG9uUGFkZGluZyhS
ZW5kZXJTdHlsZSopIGNvbnN0OwotCi0gICAgaW50IGZpbmRGcmFtZUxpbmVXaWR0aChRU3R5bGUq
KSBjb25zdDsKLQotICAgIFFTdHlsZSogZmFsbGJhY2tTdHlsZSgpIGNvbnN0OwotCi0gICAgdm9p
ZCBzZXRQYWxldHRlRnJvbVBhZ2VDbGllbnRJZkV4aXN0cyhRUGFsZXR0ZSYpIGNvbnN0OwotCi0j
aWZkZWYgUV9PU19NQUMKLSAgICBpbnQgbV9idXR0b25Gb250UGl4ZWxTaXplOwotI2VuZGlmCi0K
LSAgICBRU3R5bGUqIG1fZmFsbGJhY2tTdHlsZTsKLSNpZm5kZWYgUVRfTk9fTElORUVESVQKLSAg
ICBtdXRhYmxlIFFMaW5lRWRpdCogbV9saW5lRWRpdDsKLSNlbmRpZgotfTsKLQotY2xhc3MgU3R5
bGVQYWludGVyUVN0eWxlIDogcHVibGljIFN0eWxlUGFpbnRlciB7Ci1wdWJsaWM6Ci0gICAgZXhw
bGljaXQgU3R5bGVQYWludGVyUVN0eWxlKFJlbmRlclRoZW1lUVN0eWxlKiwgY29uc3QgUGFpbnRJ
bmZvJik7Ci0gICAgZXhwbGljaXQgU3R5bGVQYWludGVyUVN0eWxlKFNjcm9sbGJhclRoZW1lUVN0
eWxlKiwgR3JhcGhpY3NDb250ZXh0Kik7Ci0KLSAgICBib29sIGlzVmFsaWQoKSBjb25zdCB7IHJl
dHVybiBzdHlsZSAmJiBTdHlsZVBhaW50ZXI6OmlzVmFsaWQoKTsgfQotCi0gICAgUVdpZGdldCog
d2lkZ2V0OwotICAgIFFTdHlsZSogc3R5bGU7Ci0KLSAgICB2b2lkIGRyYXdQcmltaXRpdmUoUVN0
eWxlOjpQcmltaXRpdmVFbGVtZW50IHBlLCBjb25zdCBRU3R5bGVPcHRpb24mIG9wdCkKLSAgICB7
IHN0eWxlLT5kcmF3UHJpbWl0aXZlKHBlLCAmb3B0LCBwYWludGVyLCB3aWRnZXQpOyB9Ci0gICAg
dm9pZCBkcmF3Q29udHJvbChRU3R5bGU6OkNvbnRyb2xFbGVtZW50IGNlLCBjb25zdCBRU3R5bGVP
cHRpb24mIG9wdCkKLSAgICB7IHN0eWxlLT5kcmF3Q29udHJvbChjZSwgJm9wdCwgcGFpbnRlciwg
d2lkZ2V0KTsgfQotICAgIHZvaWQgZHJhd0NvbXBsZXhDb250cm9sKFFTdHlsZTo6Q29tcGxleENv
bnRyb2wgY2MsIGNvbnN0IFFTdHlsZU9wdGlvbkNvbXBsZXgmIG9wdCkKLSAgICB7IHN0eWxlLT5k
cmF3Q29tcGxleENvbnRyb2woY2MsICZvcHQsIHBhaW50ZXIsIHdpZGdldCk7IH0KLQotcHJpdmF0
ZToKLSAgICB2b2lkIGluaXQoR3JhcGhpY3NDb250ZXh0KiwgUVN0eWxlKik7Ci0KLSAgICBRX0RJ
U0FCTEVfQ09QWShTdHlsZVBhaW50ZXJRU3R5bGUpCi19OwotCi19Ci0KLSNlbmRpZiAvLyBSZW5k
ZXJUaGVtZVFTdHlsZV9oCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L3F0L1dlYkNvcmVTdXBw
b3J0L1Njcm9sbGJhclRoZW1lUVN0eWxlLmNwcCBiL1NvdXJjZS9XZWJLaXQvcXQvV2ViQ29yZVN1
cHBvcnQvU2Nyb2xsYmFyVGhlbWVRU3R5bGUuY3BwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NApp
bmRleCBiMDgyN2ZlYTRlMDkyMjBmMGFhMzkyYTdhNWQ5ZGM0YzNhNjY4YmUzLi4wMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJLaXQvcXQvV2Vi
Q29yZVN1cHBvcnQvU2Nyb2xsYmFyVGhlbWVRU3R5bGUuY3BwCisrKyAvZGV2L251bGwKQEAgLTEs
MjUzICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDcsIDIwMDggQXBwbGUgSW5jLiBB
bGwgUmlnaHRzIFJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDA3IFN0YWlrb3MgQ29tcHV0
aW5nIFNlcnZpY2VzIEluYy4gPGluZm9Ac3RhaWtvcy5uZXQ+Ci0gKiBDb3B5cmlnaHQgKEMpIDIw
MDggTm9raWEgQ29ycG9yYXRpb24gYW5kL29yIGl0cyBzdWJzaWRpYXJ5KC1pZXMpCi0gKgotICog
UmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBv
ciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0
aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlv
bnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNl
IHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRp
b24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24u
Ci0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMn
JyBBTkQgQU5ZCi0gKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sIFRIRQotICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5U
QUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVND
TEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgotICogQ09OVFJJQlVUT1JT
IEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUws
Ci0gKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sCi0gKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNF
UlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKLSAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElO
VEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKLSAqIE9GIExJQUJJ
TElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotICog
KElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9V
VCBPRiBUSEUgVVNFCi0gKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhF
IFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLSNpbmNsdWRlICJjb25maWcuaCIK
LSNpbmNsdWRlICJTY3JvbGxiYXJUaGVtZVFTdHlsZS5oIgotCi0jaW5jbHVkZSAiR3JhcGhpY3ND
b250ZXh0LmgiCi0jaW5jbHVkZSAiUGxhdGZvcm1Nb3VzZUV2ZW50LmgiCi0jaW5jbHVkZSAiUmVu
ZGVyVGhlbWVRU3R5bGUuaCIKLSNpbmNsdWRlICJSZW5kZXJUaGVtZVF0TW9iaWxlLmgiCi0jaW5j
bHVkZSAiU2Nyb2xsVmlldy5oIgotI2luY2x1ZGUgIlNjcm9sbGJhci5oIgotCi0jaW5jbHVkZSA8
UUFwcGxpY2F0aW9uPgotI2lmZGVmIFFfV1NfTUFDCi0jaW5jbHVkZSA8UU1hY1N0eWxlPgotI2Vu
ZGlmCi0jaW5jbHVkZSA8UU1lbnU+Ci0jaW5jbHVkZSA8UVBhaW50ZXI+Ci0jaW5jbHVkZSA8UVN0
eWxlPgotI2luY2x1ZGUgPFFTdHlsZU9wdGlvblNsaWRlcj4KLQotbmFtZXNwYWNlIFdlYkNvcmUg
ewotCi1TY3JvbGxiYXJUaGVtZVFTdHlsZTo6flNjcm9sbGJhclRoZW1lUVN0eWxlKCkKLXsKLX0K
LQotc3RhdGljIFFTdHlsZTo6U3ViQ29udHJvbCBzY1BhcnQoY29uc3QgU2Nyb2xsYmFyUGFydCYg
cGFydCkKLXsKLSAgICBzd2l0Y2ggKHBhcnQpIHsKLSAgICBjYXNlIE5vUGFydDoKLSAgICAgICAg
cmV0dXJuIFFTdHlsZTo6U0NfTm9uZTsKLSAgICBjYXNlIEJhY2tCdXR0b25TdGFydFBhcnQ6Ci0g
ICAgY2FzZSBCYWNrQnV0dG9uRW5kUGFydDoKLSAgICAgICAgcmV0dXJuIFFTdHlsZTo6U0NfU2Ny
b2xsQmFyU3ViTGluZTsKLSAgICBjYXNlIEJhY2tUcmFja1BhcnQ6Ci0gICAgICAgIHJldHVybiBR
U3R5bGU6OlNDX1Njcm9sbEJhclN1YlBhZ2U7Ci0gICAgY2FzZSBUaHVtYlBhcnQ6Ci0gICAgICAg
IHJldHVybiBRU3R5bGU6OlNDX1Njcm9sbEJhclNsaWRlcjsKLSAgICBjYXNlIEZvcndhcmRUcmFj
a1BhcnQ6Ci0gICAgICAgIHJldHVybiBRU3R5bGU6OlNDX1Njcm9sbEJhckFkZFBhZ2U7Ci0gICAg
Y2FzZSBGb3J3YXJkQnV0dG9uU3RhcnRQYXJ0OgotICAgIGNhc2UgRm9yd2FyZEJ1dHRvbkVuZFBh
cnQ6Ci0gICAgICAgIHJldHVybiBRU3R5bGU6OlNDX1Njcm9sbEJhckFkZExpbmU7Ci0gICAgfQot
Ci0gICAgcmV0dXJuIFFTdHlsZTo6U0NfTm9uZTsKLX0KLQotc3RhdGljIFNjcm9sbGJhclBhcnQg
c2Nyb2xsYmFyUGFydChjb25zdCBRU3R5bGU6OlN1YkNvbnRyb2wmIHNjKQotewotICAgIHN3aXRj
aCAoc2MpIHsKLSAgICBjYXNlIFFTdHlsZTo6U0NfTm9uZToKLSAgICAgICAgcmV0dXJuIE5vUGFy
dDsKLSAgICBjYXNlIFFTdHlsZTo6U0NfU2Nyb2xsQmFyU3ViTGluZToKLSAgICAgICAgcmV0dXJu
IEJhY2tCdXR0b25TdGFydFBhcnQ7Ci0gICAgY2FzZSBRU3R5bGU6OlNDX1Njcm9sbEJhclN1YlBh
Z2U6Ci0gICAgICAgIHJldHVybiBCYWNrVHJhY2tQYXJ0OwotICAgIGNhc2UgUVN0eWxlOjpTQ19T
Y3JvbGxCYXJTbGlkZXI6Ci0gICAgICAgIHJldHVybiBUaHVtYlBhcnQ7Ci0gICAgY2FzZSBRU3R5
bGU6OlNDX1Njcm9sbEJhckFkZFBhZ2U6Ci0gICAgICAgIHJldHVybiBGb3J3YXJkVHJhY2tQYXJ0
OwotICAgIGNhc2UgUVN0eWxlOjpTQ19TY3JvbGxCYXJBZGRMaW5lOgotICAgICAgICByZXR1cm4g
Rm9yd2FyZEJ1dHRvblN0YXJ0UGFydDsKLSAgICB9Ci0gICAgcmV0dXJuIE5vUGFydDsKLX0KLQot
c3RhdGljIFFTdHlsZU9wdGlvblNsaWRlciogc3R5bGVPcHRpb25TbGlkZXIoU2Nyb2xsYmFyVGhl
bWVDbGllbnQqIHNjcm9sbGJhciwgUVdpZGdldCogd2lkZ2V0ID0gMCkKLXsKLSAgICBzdGF0aWMg
UVN0eWxlT3B0aW9uU2xpZGVyIG9wdDsKLSAgICBpZiAod2lkZ2V0KQotICAgICAgICBvcHQuaW5p
dEZyb20od2lkZ2V0KTsKLSAgICBlbHNlCi0gICAgICAgIG9wdC5zdGF0ZSB8PSBRU3R5bGU6OlN0
YXRlX0FjdGl2ZTsKLQotICAgIG9wdC5zdGF0ZSAmPSB+UVN0eWxlOjpTdGF0ZV9IYXNGb2N1czsK
LQotICAgIG9wdC5yZWN0ID0gc2Nyb2xsYmFyLT5mcmFtZVJlY3QoKTsKLSAgICBpZiAoc2Nyb2xs
YmFyLT5lbmFibGVkKCkpCi0gICAgICAgIG9wdC5zdGF0ZSB8PSBRU3R5bGU6OlN0YXRlX0VuYWJs
ZWQ7Ci0gICAgaWYgKHNjcm9sbGJhci0+Y29udHJvbFNpemUoKSAhPSBSZWd1bGFyU2Nyb2xsYmFy
KQotICAgICAgICBvcHQuc3RhdGUgfD0gUVN0eWxlOjpTdGF0ZV9NaW5pOwotICAgIG9wdC5vcmll
bnRhdGlvbiA9IChzY3JvbGxiYXItPm9yaWVudGF0aW9uKCkgPT0gVmVydGljYWxTY3JvbGxiYXIp
ID8gUXQ6OlZlcnRpY2FsIDogUXQ6Okhvcml6b250YWw7Ci0KLSAgICBpZiAoc2Nyb2xsYmFyLT5v
cmllbnRhdGlvbigpID09IEhvcml6b250YWxTY3JvbGxiYXIpCi0gICAgICAgIG9wdC5zdGF0ZSB8
PSBRU3R5bGU6OlN0YXRlX0hvcml6b250YWw7Ci0gICAgZWxzZQotICAgICAgICBvcHQuc3RhdGUg
Jj0gflFTdHlsZTo6U3RhdGVfSG9yaXpvbnRhbDsKLQotICAgIG9wdC5zbGlkZXJWYWx1ZSA9IHNj
cm9sbGJhci0+dmFsdWUoKTsKLSAgICBvcHQuc2xpZGVyUG9zaXRpb24gPSBvcHQuc2xpZGVyVmFs
dWU7Ci0gICAgb3B0LnBhZ2VTdGVwID0gc2Nyb2xsYmFyLT5wYWdlU3RlcCgpOwotICAgIG9wdC5z
aW5nbGVTdGVwID0gc2Nyb2xsYmFyLT5saW5lU3RlcCgpOwotICAgIG9wdC5taW5pbXVtID0gMDsK
LSAgICBvcHQubWF4aW11bSA9IHFNYXgoMCwgc2Nyb2xsYmFyLT5tYXhpbXVtKCkpOwotICAgIFNj
cm9sbGJhclBhcnQgcHJlc3NlZFBhcnQgPSBzY3JvbGxiYXItPnByZXNzZWRQYXJ0KCk7Ci0gICAg
U2Nyb2xsYmFyUGFydCBob3ZlcmVkUGFydCA9IHNjcm9sbGJhci0+aG92ZXJlZFBhcnQoKTsKLSAg
ICBpZiAocHJlc3NlZFBhcnQgIT0gTm9QYXJ0KSB7Ci0gICAgICAgIG9wdC5hY3RpdmVTdWJDb250
cm9scyA9IHNjUGFydChzY3JvbGxiYXItPnByZXNzZWRQYXJ0KCkpOwotICAgICAgICBpZiAocHJl
c3NlZFBhcnQgPT0gQmFja0J1dHRvblN0YXJ0UGFydCB8fCBwcmVzc2VkUGFydCA9PSBGb3J3YXJk
QnV0dG9uU3RhcnRQYXJ0Ci0gICAgICAgICAgICB8fCBwcmVzc2VkUGFydCA9PSBCYWNrQnV0dG9u
RW5kUGFydCB8fCBwcmVzc2VkUGFydCA9PSBGb3J3YXJkQnV0dG9uRW5kUGFydAotICAgICAgICAg
ICAgfHwgcHJlc3NlZFBhcnQgPT0gVGh1bWJQYXJ0KQotICAgICAgICAgICAgb3B0LnN0YXRlIHw9
IFFTdHlsZTo6U3RhdGVfU3Vua2VuOwotICAgIH0gZWxzZQotICAgICAgICBvcHQuYWN0aXZlU3Vi
Q29udHJvbHMgPSBzY1BhcnQoaG92ZXJlZFBhcnQpOwotICAgIGlmIChob3ZlcmVkUGFydCAhPSBO
b1BhcnQpCi0gICAgICAgIG9wdC5zdGF0ZSB8PSBRU3R5bGU6OlN0YXRlX01vdXNlT3ZlcjsKLSAg
ICByZXR1cm4gJm9wdDsKLX0KLQotYm9vbCBTY3JvbGxiYXJUaGVtZVFTdHlsZTo6cGFpbnQoU2Ny
b2xsYmFyVGhlbWVDbGllbnQqIHNjcm9sbGJhciwgR3JhcGhpY3NDb250ZXh0KiBncmFwaGljc0Nv
bnRleHQsIGNvbnN0IEludFJlY3QmIGRpcnR5UmVjdCkKLXsKLSAgICBpZiAoZ3JhcGhpY3NDb250
ZXh0LT51cGRhdGluZ0NvbnRyb2xUaW50cygpKSB7Ci0gICAgICAgc2Nyb2xsYmFyLT5pbnZhbGlk
YXRlUmVjdChkaXJ0eVJlY3QpOwotICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci0KLSAgICBT
dHlsZVBhaW50ZXJRU3R5bGUgcCh0aGlzLCBncmFwaGljc0NvbnRleHQpOwotICAgIGlmICghcC5p
c1ZhbGlkKCkpCi0gICAgICByZXR1cm4gdHJ1ZTsKLQotICAgIHAucGFpbnRlci0+c2F2ZSgpOwot
ICAgIFFTdHlsZU9wdGlvblNsaWRlciogb3B0ID0gc3R5bGVPcHRpb25TbGlkZXIoc2Nyb2xsYmFy
LCBwLndpZGdldCk7Ci0KLSAgICBwLnBhaW50ZXItPnNldENsaXBSZWN0KG9wdC0+cmVjdC5pbnRl
cnNlY3RlZChkaXJ0eVJlY3QpLCBRdDo6SW50ZXJzZWN0Q2xpcCk7Ci0KLSNpZmRlZiBRX1dTX01B
QwotICAgIC8vIEZJWE1FOiBXZSBhbHNvIG5lZWQgdG8gY2hlY2sgdGhlIHdpZGdldCBzdHlsZSBi
dXQgdG9kYXkgU2Nyb2xsYmFyVGhlbWUgaXMgbm90IGF3YXJlIG9mIHRoZSBwYWdlIHNvIHdlCi0g
ICAgLy8gY2FuJ3QgZ2V0IHRoZSB3aWRnZXQuCi0gICAgaWYgKHFvYmplY3RfY2FzdDxRTWFjU3R5
bGUqPihzdHlsZSgpKSkKLSAgICAgICAgcC5kcmF3Q29tcGxleENvbnRyb2woUVN0eWxlOjpDQ19T
Y3JvbGxCYXIsICpvcHQpOwotICAgIGVsc2UKLSNlbmRpZgotICAgIHsKLSAgICAgICAgLy8gVGhl
IFFTdHlsZSBleHBlY3RzIHRoZSBiYWNrZ3JvdW5kIHRvIGJlIGFscmVhZHkgZmlsbGVkLgotICAg
ICAgICBwLnBhaW50ZXItPmZpbGxSZWN0KG9wdC0+cmVjdCwgb3B0LT5wYWxldHRlLmJhY2tncm91
bmQoKSk7Ci0KLSAgICAgICAgY29uc3QgUVBvaW50IHRvcExlZnQgPSBvcHQtPnJlY3QudG9wTGVm
dCgpOwotICAgICAgICBwLnBhaW50ZXItPnRyYW5zbGF0ZSh0b3BMZWZ0KTsKLSAgICAgICAgb3B0
LT5yZWN0Lm1vdmVUbyhRUG9pbnQoMCwgMCkpOwotICAgICAgICBwLmRyYXdDb21wbGV4Q29udHJv
bChRU3R5bGU6OkNDX1Njcm9sbEJhciwgKm9wdCk7Ci0gICAgICAgIG9wdC0+cmVjdC5tb3ZlVG8o
dG9wTGVmdCk7Ci0gICAgfQotICAgIHAucGFpbnRlci0+cmVzdG9yZSgpOwotCi0gICAgcmV0dXJu
IHRydWU7Ci19Ci0KLVNjcm9sbGJhclBhcnQgU2Nyb2xsYmFyVGhlbWVRU3R5bGU6OmhpdFRlc3Qo
U2Nyb2xsYmFyVGhlbWVDbGllbnQqIHNjcm9sbGJhciwgY29uc3QgUGxhdGZvcm1Nb3VzZUV2ZW50
JiBldnQpCi17Ci0gICAgUVN0eWxlT3B0aW9uU2xpZGVyKiBvcHQgPSBzdHlsZU9wdGlvblNsaWRl
cihzY3JvbGxiYXIpOwotICAgIGNvbnN0IFFQb2ludCBwb3MgPSBzY3JvbGxiYXItPmNvbnZlcnRG
cm9tQ29udGFpbmluZ1dpbmRvdyhldnQucG9zaXRpb24oKSk7Ci0gICAgb3B0LT5yZWN0Lm1vdmVU
byhRUG9pbnQoMCwgMCkpOwotICAgIFFTdHlsZTo6U3ViQ29udHJvbCBzYyA9IHN0eWxlKCktPmhp
dFRlc3RDb21wbGV4Q29udHJvbChRU3R5bGU6OkNDX1Njcm9sbEJhciwgb3B0LCBwb3MsIDApOwot
ICAgIHJldHVybiBzY3JvbGxiYXJQYXJ0KHNjKTsKLX0KLQotYm9vbCBTY3JvbGxiYXJUaGVtZVFT
dHlsZTo6c2hvdWxkQ2VudGVyT25UaHVtYihTY3JvbGxiYXJUaGVtZUNsaWVudCosIGNvbnN0IFBs
YXRmb3JtTW91c2VFdmVudCYgZXZ0KQotewotICAgIC8vIE1pZGRsZSBjbGljayBjZW50ZXJzIHNs
aWRlciB0aHVtYiAoaWYgc3VwcG9ydGVkKS4KLSAgICByZXR1cm4gc3R5bGUoKS0+c3R5bGVIaW50
KFFTdHlsZTo6U0hfU2Nyb2xsQmFyX01pZGRsZUNsaWNrQWJzb2x1dGVQb3NpdGlvbikgJiYgZXZ0
LmJ1dHRvbigpID09IE1pZGRsZUJ1dHRvbjsKLX0KLQotdm9pZCBTY3JvbGxiYXJUaGVtZVFTdHls
ZTo6aW52YWxpZGF0ZVBhcnQoU2Nyb2xsYmFyVGhlbWVDbGllbnQqIHNjcm9sbGJhciwgU2Nyb2xs
YmFyUGFydCkKLXsKLSAgICAvLyBGSVhNRTogRG8gbW9yZSBwcmVjaXNlIGludmFsaWRhdGlvbi4K
LSAgICBzY3JvbGxiYXItPmludmFsaWRhdGUoKTsKLX0KLQotaW50IFNjcm9sbGJhclRoZW1lUVN0
eWxlOjpzY3JvbGxiYXJUaGlja25lc3MoU2Nyb2xsYmFyQ29udHJvbFNpemUgY29udHJvbFNpemUp
Ci17Ci0gICAgUVN0eWxlT3B0aW9uU2xpZGVyIG87Ci0gICAgby5vcmllbnRhdGlvbiA9IFF0OjpW
ZXJ0aWNhbDsKLSAgICBvLnN0YXRlICY9IH5RU3R5bGU6OlN0YXRlX0hvcml6b250YWw7Ci0gICAg
aWYgKGNvbnRyb2xTaXplICE9IFJlZ3VsYXJTY3JvbGxiYXIpCi0gICAgICAgIG8uc3RhdGUgfD0g
UVN0eWxlOjpTdGF0ZV9NaW5pOwotICAgIHJldHVybiBzdHlsZSgpLT5waXhlbE1ldHJpYyhRU3R5
bGU6OlBNX1Njcm9sbEJhckV4dGVudCwgJm8sIDApOwotfQotCi1pbnQgU2Nyb2xsYmFyVGhlbWVR
U3R5bGU6OnRodW1iUG9zaXRpb24oU2Nyb2xsYmFyVGhlbWVDbGllbnQqIHNjcm9sbGJhcikKLXsK
LSAgICBpZiAoc2Nyb2xsYmFyLT5lbmFibGVkKCkpIHsKLSAgICAgICAgZmxvYXQgcG9zID0gKGZs
b2F0KXNjcm9sbGJhci0+Y3VycmVudFBvcygpICogKHRyYWNrTGVuZ3RoKHNjcm9sbGJhcikgLSB0
aHVtYkxlbmd0aChzY3JvbGxiYXIpKSAvIHNjcm9sbGJhci0+bWF4aW11bSgpOwotICAgICAgICBy
ZXR1cm4gKHBvcyA8IDEgJiYgcG9zID4gMCkgPyAxIDogcG9zOwotICAgIH0KLSAgICByZXR1cm4g
MDsKLX0KLQotaW50IFNjcm9sbGJhclRoZW1lUVN0eWxlOjp0aHVtYkxlbmd0aChTY3JvbGxiYXJU
aGVtZUNsaWVudCogc2Nyb2xsYmFyKQotewotICAgIFFTdHlsZU9wdGlvblNsaWRlciogb3B0ID0g
c3R5bGVPcHRpb25TbGlkZXIoc2Nyb2xsYmFyKTsKLSAgICBJbnRSZWN0IHRodW1iID0gc3R5bGUo
KS0+c3ViQ29udHJvbFJlY3QoUVN0eWxlOjpDQ19TY3JvbGxCYXIsIG9wdCwgUVN0eWxlOjpTQ19T
Y3JvbGxCYXJTbGlkZXIsIDApOwotICAgIHJldHVybiBzY3JvbGxiYXItPm9yaWVudGF0aW9uKCkg
PT0gSG9yaXpvbnRhbFNjcm9sbGJhciA/IHRodW1iLndpZHRoKCkgOiB0aHVtYi5oZWlnaHQoKTsK
LX0KLQotaW50IFNjcm9sbGJhclRoZW1lUVN0eWxlOjp0cmFja1Bvc2l0aW9uKFNjcm9sbGJhclRo
ZW1lQ2xpZW50KiBzY3JvbGxiYXIpCi17Ci0gICAgUVN0eWxlT3B0aW9uU2xpZGVyKiBvcHQgPSBz
dHlsZU9wdGlvblNsaWRlcihzY3JvbGxiYXIpOwotICAgIEludFJlY3QgdHJhY2sgPSBzdHlsZSgp
LT5zdWJDb250cm9sUmVjdChRU3R5bGU6OkNDX1Njcm9sbEJhciwgb3B0LCBRU3R5bGU6OlNDX1Nj
cm9sbEJhckdyb292ZSwgMCk7Ci0gICAgcmV0dXJuIHNjcm9sbGJhci0+b3JpZW50YXRpb24oKSA9
PSBIb3Jpem9udGFsU2Nyb2xsYmFyID8gdHJhY2sueCgpIC0gc2Nyb2xsYmFyLT54KCkgOiB0cmFj
ay55KCkgLSBzY3JvbGxiYXItPnkoKTsKLX0KLQotaW50IFNjcm9sbGJhclRoZW1lUVN0eWxlOjp0
cmFja0xlbmd0aChTY3JvbGxiYXJUaGVtZUNsaWVudCogc2Nyb2xsYmFyKQotewotICAgIFFTdHls
ZU9wdGlvblNsaWRlciogb3B0ID0gc3R5bGVPcHRpb25TbGlkZXIoc2Nyb2xsYmFyKTsKLSAgICBJ
bnRSZWN0IHRyYWNrID0gc3R5bGUoKS0+c3ViQ29udHJvbFJlY3QoUVN0eWxlOjpDQ19TY3JvbGxC
YXIsIG9wdCwgUVN0eWxlOjpTQ19TY3JvbGxCYXJHcm9vdmUsIDApOwotICAgIHJldHVybiBzY3Jv
bGxiYXItPm9yaWVudGF0aW9uKCkgPT0gSG9yaXpvbnRhbFNjcm9sbGJhciA/IHRyYWNrLndpZHRo
KCkgOiB0cmFjay5oZWlnaHQoKTsKLX0KLQotdm9pZCBTY3JvbGxiYXJUaGVtZVFTdHlsZTo6cGFp
bnRTY3JvbGxDb3JuZXIoU2Nyb2xsVmlldyosIEdyYXBoaWNzQ29udGV4dCogY29udGV4dCwgY29u
c3QgSW50UmVjdCYgcmVjdCkKLXsKLSAgICBTdHlsZVBhaW50ZXJRU3R5bGUgcCh0aGlzLCBjb250
ZXh0KTsKLSAgICBpZiAoIXAuaXNWYWxpZCgpKQotICAgICAgICByZXR1cm47Ci0KLSAgICBRU3R5
bGVPcHRpb24gb3B0aW9uOwotICAgIG9wdGlvbi5yZWN0ID0gcmVjdDsKLSAgICBwLmRyYXdQcmlt
aXRpdmUoUVN0eWxlOjpQRV9QYW5lbFNjcm9sbEFyZWFDb3JuZXIsIG9wdGlvbik7Ci19Ci0KLVFT
dHlsZSogU2Nyb2xsYmFyVGhlbWVRU3R5bGU6OnN0eWxlKCkgY29uc3QKLXsKLSAgICByZXR1cm4g
UUFwcGxpY2F0aW9uOjpzdHlsZSgpOwotfQotCi19Ci0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJL
aXQvcXQvV2ViQ29yZVN1cHBvcnQvU2Nyb2xsYmFyVGhlbWVRU3R5bGUuaCBiL1NvdXJjZS9XZWJL
aXQvcXQvV2ViQ29yZVN1cHBvcnQvU2Nyb2xsYmFyVGhlbWVRU3R5bGUuaApkZWxldGVkIGZpbGUg
bW9kZSAxMDA2NDQKaW5kZXggMjUzN2I5YWU0NGI0NThkZDcwMjI1YTA1ZTAzZGJhMWM3MmEzZGRl
MC4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2Uv
V2ViS2l0L3F0L1dlYkNvcmVTdXBwb3J0L1Njcm9sbGJhclRoZW1lUVN0eWxlLmgKKysrIC9kZXYv
bnVsbApAQCAtMSw2MyArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDA4IEFwcGxlIElu
Yy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGlu
IHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlv
biwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwot
ICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJl
dGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlv
bnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxz
IHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElT
IFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKLSAqIEVYUFJFU1MgT1Ig
SU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCi0g
KiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBB
IFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFM
TCBBUFBMRSBJTkMuIE9SCi0gKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNU
LCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKLSAqIEVYRU1QTEFSWSwgT1IgQ09OU0VR
VUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFBST0NV
UkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRB
LCBPUgotICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNF
RCBBTkQgT04gQU5ZIFRIRU9SWQotICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNU
LCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1Ig
T1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLSAqIE9GIFRISVMg
U09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1B
R0UuCi0gKi8KLQotI2lmbmRlZiBTY3JvbGxiYXJUaGVtZVFTdHlsZV9oCi0jZGVmaW5lIFNjcm9s
bGJhclRoZW1lUVN0eWxlX2gKLQotI2luY2x1ZGUgIlNjcm9sbGJhclRoZW1lLmgiCi0KLSNpbmNs
dWRlIDxRdENvcmUvcWdsb2JhbC5oPgotCi1RVF9CRUdJTl9OQU1FU1BBQ0UKLWNsYXNzIFFTdHls
ZTsKLVFUX0VORF9OQU1FU1BBQ0UKLQotbmFtZXNwYWNlIFdlYkNvcmUgewotCi1jbGFzcyBTY3Jv
bGxiYXJUaGVtZVFTdHlsZSA6IHB1YmxpYyBTY3JvbGxiYXJUaGVtZSB7Ci1wdWJsaWM6Ci0gICAg
dmlydHVhbCB+U2Nyb2xsYmFyVGhlbWVRU3R5bGUoKTsKLQotICAgIHZpcnR1YWwgYm9vbCBwYWlu
dChTY3JvbGxiYXJUaGVtZUNsaWVudCosIEdyYXBoaWNzQ29udGV4dCosIGNvbnN0IEludFJlY3Qm
IGRpcnR5UmVjdCk7Ci0gICAgdmlydHVhbCB2b2lkIHBhaW50U2Nyb2xsQ29ybmVyKFNjcm9sbFZp
ZXcqLCBHcmFwaGljc0NvbnRleHQqLCBjb25zdCBJbnRSZWN0JiBjb3JuZXJSZWN0KTsKLQotICAg
IHZpcnR1YWwgU2Nyb2xsYmFyUGFydCBoaXRUZXN0KFNjcm9sbGJhclRoZW1lQ2xpZW50KiwgY29u
c3QgUGxhdGZvcm1Nb3VzZUV2ZW50Jik7Ci0KLSAgICB2aXJ0dWFsIGJvb2wgc2hvdWxkQ2VudGVy
T25UaHVtYihTY3JvbGxiYXJUaGVtZUNsaWVudCosIGNvbnN0IFBsYXRmb3JtTW91c2VFdmVudCYp
OwotCi0gICAgdmlydHVhbCB2b2lkIGludmFsaWRhdGVQYXJ0KFNjcm9sbGJhclRoZW1lQ2xpZW50
KiwgU2Nyb2xsYmFyUGFydCk7Ci0KLSAgICB2aXJ0dWFsIGludCB0aHVtYlBvc2l0aW9uKFNjcm9s
bGJhclRoZW1lQ2xpZW50Kik7Ci0gICAgdmlydHVhbCBpbnQgdGh1bWJMZW5ndGgoU2Nyb2xsYmFy
VGhlbWVDbGllbnQqKTsKLSAgICB2aXJ0dWFsIGludCB0cmFja1Bvc2l0aW9uKFNjcm9sbGJhclRo
ZW1lQ2xpZW50Kik7Ci0gICAgdmlydHVhbCBpbnQgdHJhY2tMZW5ndGgoU2Nyb2xsYmFyVGhlbWVD
bGllbnQqKTsKLQotICAgIHZpcnR1YWwgaW50IHNjcm9sbGJhclRoaWNrbmVzcyhTY3JvbGxiYXJD
b250cm9sU2l6ZSA9IFJlZ3VsYXJTY3JvbGxiYXIpOwotCi0gICAgUVN0eWxlKiBzdHlsZSgpIGNv
bnN0OwotfTsKLQotfQotI2VuZGlmCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>167062</attachid>
            <date>2012-10-04 02:53:25 -0700</date>
            <delta_ts>2012-10-04 05:54:23 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-98268-20121004115534.patch</filename>
            <type>text/plain</type>
            <size>135229</size>
            <attacher name="Simon Hausmann">hausmann</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTI5NjEwCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggM2E3OWM4MDNhOWM2MWIy
YzFkMTZjZmI3ZmU1YWJlMWMyNDQ0NDhmMC4uMmJkNWExY2M3NTM1YjNkYTZjNDRjMzM0NDA4YTFi
ODBmZjFiZGE5NyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDEyNCBAQAorMjAxMi0xMC0wMyAgU2lt
b24gSGF1c21hbm4gIDxzaW1vbi5oYXVzbWFubkBkaWdpYS5jb20+CisKKyAgICAgICAgW1F0XSBN
YWtlIFJlbmRlclRoZW1lUVN0eWxlL1Njcm9sbGJhclRoZW1lUVN0eWxlIGNvbXBpbGUgd2l0aG91
dCBRU3R5bGUvUXRXaWRnZXRzCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3df
YnVnLmNnaT9pZD05ODI2OAorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgor
CisgICAgICAgIEV4dHJhY3RlZCBRU3R5bGUvUVdpZGdldCByZWxhdGVkIGNvZGUgaW50byBhIFFX
ZWJTdHlsZSBjbGFzcyB0aGF0IGltcGxlbWVudHMgdGhlIFFTdHlsZUludGVyZmFjZSBpbnRlcmZh
Y2UuCisKKyAgICAgICAgUVN0eWxlSW50ZXJmYWNlIGlzIGEgcHVyZSBpbnRlcmZhY2UgdGhhdCBs
aXZlcyBpbiBXZWJDb3JlL3BsYXRmb3JtL3F0CisgICAgICAgIChuZXh0IHRvIFJlbmRlclRoZW1l
UVN0eWxlIGFuZCBTY3JvbGxiYXJUaGVtZVFTdHlsZSkgYW5kIHByb3ZpZGVzIGEKKyAgICAgICAg
bWluaW1hbCBpbnRlcmZhY2Ugb2Ygd2hhdCB3ZSBuZWVkIHRvIGRyYXcgd2l0aCBRU3R5bGUgYXMg
d2VsbCBhcyBiYXNpYworICAgICAgICBoaXQgdGVzdGluZyBhbmQgbWV0cmljIHJldHJpZXZhbC4g
SXQgYWxzbyBwcm92aWRlcyBhCisgICAgICAgIFFTdHlsZUludGVyZmFjZU9wdGlvbiBjbGFzcyB0
aGF0IGFnZ3JlZ2F0ZXMgY29tbW9uIG1ldGEtZGF0YSBmb3IKKyAgICAgICAgcmVuZGVyaW5nIHBy
aW1pdGl2ZXMsIHN1Y2ggYXMgZGlyZWN0aW9uLCByZWN0YW5nbGUsIHN0YXRlIChzdW5rZW4sCisg
ICAgICAgIGVuYWJsZWQsIGV0Yy4pIG9yIHBhbGV0dGUuIEl0IGFsc28gcHJvdmlkZXMgc29tZSBt
b3JlIHNsaWRlci9zY3JvbGxiYXIKKyAgICAgICAgc3BlY2lmaWMgZmllbGRzIGluIGEgc2xpZGVy
IHN1Yi1zdHJ1Y3R1cmUuCisKKyAgICAgICAgUmVuZGVyVGhlbWVRU3R5bGUvU2Nyb2xsYmFyVGhl
bWVRU3R5bGUgdXNlZCB0byBpbnN0YW50aWF0ZSBzcGVjaWZpYyBRU3R5bGVPcHRpb24gc3ViLWNs
YXNzZXMgYW5kIHBvcHVsYXRlCisgICAgICAgIHRoZW0gd2l0aCBzdGF0ZSBpbmZvcm1hdGlvbiBm
cm9tIHJlbmRlciBvYmplY3RzLCBiZWZvcmUgY2FsbGluZyBzdHJhaWdodCB0byBRU3R5bGUuIE1v
c3Qgb2YgdGhlIGNvbW1vbiBjb2RlCisgICAgICAgIHdhcyBlbmNhcHN1bGF0ZWQgaW4gU3R5bGVQ
YWludGVyUVN0eWxlLgorCisgICAgICAgIFRoZSBuZXcgUmVuZGVyVGhlbWVRU3R5bGUvU2Nyb2xs
bGJhclRoZW1lUVN0eWxlIHVzZXMgY29tbW9uIGNvZGUgaW4KKyAgICAgICAgU3R5bGVQYWludGVy
UVN0eWxlIHRvIHBvcHVsYXRlIHN0YXRlIGludG8gUVN0eWxlSW50ZXJmYWNlT3B0aW9uIGJlZm9y
ZQorICAgICAgICBjYWxsaW5nIGludG8gUVN0eWxlSW50ZXJmYWNlLgorCisgICAgICAgIFRoZSBz
dHlsZSBpbnRlcmZhY2UgaXMgdGhlbiBpbXBsZW1lbnRlZCBieSBRV2ViU3R5bGUsIHdoaWNoIGV4
dHJhY3RzCisgICAgICAgIG1ldGEtZGF0YSBmcm9tIFFTdHlsZUludGVyZmFjZU9wdGlvbiBhcmd1
bWVudHMsIHBvcHVsYXRlcyBzdHlsZQorICAgICAgICBwcmltaXRpdmUgc3BlY2lmaWMgUVN0eWxl
T3B0aW9uIG9iamVjdHMgYW5kIHRoZW4gY2FsbHMgb24gUVN0eWxlLgorCisgICAgICAgIFJlbmRl
clRoZW1lUVN0eWxlL1Njcm9sbGJhclRoZW1lUVN0eWxlIGNhbiBvbmx5IHVzZSBpbnRlcmZhY2Ug
bWV0aG9kcworICAgICAgICBmcm9tIFFTdHlsZUludGVyZmFjZS4gUVdlYlN0eWxlIG9uIHRoZSBv
dGhlciBoYW5kIHdpbGwgbGl2ZSBpbiB0aGUKKyAgICAgICAgc2VwYXJhdGUgUXRXZWJLaXRXaWRn
ZXRzIGxpYnJhcnkgaW4gdGhlIGZ1dHVyZSBhbmQgdGhlcmVmb3JlIGNhbm5vdCB1c2UKKyAgICAg
ICAgYW55IFdlYkNvcmUgdHlwZXMuCisKKyAgICAgICAgKiBUYXJnZXQucHJpOgorICAgICAgICAq
IHBsYXRmb3JtL3F0L1FTdHlsZUludGVyZmFjZS5jcHA6IEFkZGVkLgorICAgICAgICAoV2ViQ29y
ZSk6CisgICAgICAgIChXZWJDb3JlOjpRU3R5bGVJbnRlcmZhY2U6OnN0eWxlRm9yUGFnZSk6Cisg
ICAgICAgICogcGxhdGZvcm0vcXQvUVN0eWxlSW50ZXJmYWNlLmg6IEFkZGVkLgorICAgICAgICAo
V2ViQ29yZSk6CisgICAgICAgIChRU3R5bGVJbnRlcmZhY2UpOgorICAgICAgICAoV2ViQ29yZTo6
UVN0eWxlSW50ZXJmYWNlOjp+UVN0eWxlSW50ZXJmYWNlKToKKyAgICAgICAgKFdlYkNvcmU6OlFT
dHlsZUludGVyZmFjZU9wdGlvbjo6UVN0eWxlSW50ZXJmYWNlT3B0aW9uKToKKyAgICAgICAgKFFT
dHlsZUludGVyZmFjZU9wdGlvbik6CisgICAgICAgICogcGxhdGZvcm0vcXQvUmVuZGVyVGhlbWVR
U3R5bGUuY3BwOiBSZW5hbWVkIGZyb20gU291cmNlL1dlYktpdC9xdC9XZWJDb3JlU3VwcG9ydC9S
ZW5kZXJUaGVtZVFTdHlsZS5jcHAuCisgICAgICAgIChXZWJDb3JlKToKKyAgICAgICAgKFdlYkNv
cmU6OlJlbmRlclRoZW1lUVN0eWxlOjpnZXRTdHlsZVBhaW50ZXIpOgorICAgICAgICAoV2ViQ29y
ZTo6U3R5bGVQYWludGVyUVN0eWxlOjpTdHlsZVBhaW50ZXJRU3R5bGUpOgorICAgICAgICAoV2Vi
Q29yZTo6U3R5bGVQYWludGVyUVN0eWxlOjppbml0KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRl
clRoZW1lUVN0eWxlOjpjcmVhdGUpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGhlbWVRU3R5
bGU6OnNldFN0eWxlRmFjdG9yeUZ1bmN0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRo
ZW1lUVN0eWxlOjpzdHlsZUZhY3RvcnkpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGhlbWVR
U3R5bGU6OlJlbmRlclRoZW1lUVN0eWxlKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRoZW1l
UVN0eWxlOjp+UmVuZGVyVGhlbWVRU3R5bGUpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGhl
bWVRU3R5bGU6OnNldFBhbGV0dGVGcm9tUGFnZUNsaWVudElmRXhpc3RzKToKKyAgICAgICAgKFdl
YkNvcmU6OlJlbmRlclRoZW1lUVN0eWxlOjppbmZsYXRlQnV0dG9uUmVjdCk6CisgICAgICAgIChX
ZWJDb3JlOjpSZW5kZXJUaGVtZVFTdHlsZTo6Y29tcHV0ZVNpemVCYXNlZE9uU3R5bGUpOgorICAg
ICAgICAoV2ViQ29yZTo6UmVuZGVyVGhlbWVRU3R5bGU6OmFkanVzdEJ1dHRvblN0eWxlKToKKyAg
ICAgICAgKFdlYkNvcmU6OlJlbmRlclRoZW1lUVN0eWxlOjpzZXRCdXR0b25QYWRkaW5nKToKKyAg
ICAgICAgKFdlYkNvcmU6OlJlbmRlclRoZW1lUVN0eWxlOjpwYWludEJ1dHRvbik6CisgICAgICAg
IChXZWJDb3JlOjpSZW5kZXJUaGVtZVFTdHlsZTo6cGFpbnRUZXh0RmllbGQpOgorICAgICAgICAo
V2ViQ29yZTo6UmVuZGVyVGhlbWVRU3R5bGU6OmFkanVzdFRleHRBcmVhU3R5bGUpOgorICAgICAg
ICAoV2ViQ29yZTo6UmVuZGVyVGhlbWVRU3R5bGU6OnBhaW50VGV4dEFyZWEpOgorICAgICAgICAo
V2ViQ29yZTo6UmVuZGVyVGhlbWVRU3R5bGU6OnNldFBvcHVwUGFkZGluZyk6CisgICAgICAgIChX
ZWJDb3JlOjpSZW5kZXJUaGVtZVFTdHlsZTo6Y29sb3JQYWxldHRlKToKKyAgICAgICAgKFdlYkNv
cmU6OlJlbmRlclRoZW1lUVN0eWxlOjpwYWludE1lbnVMaXN0KToKKyAgICAgICAgKFdlYkNvcmU6
OlJlbmRlclRoZW1lUVN0eWxlOjphZGp1c3RNZW51TGlzdEJ1dHRvblN0eWxlKToKKyAgICAgICAg
KFdlYkNvcmU6OlJlbmRlclRoZW1lUVN0eWxlOjpwYWludE1lbnVMaXN0QnV0dG9uKToKKyAgICAg
ICAgKFdlYkNvcmU6OlJlbmRlclRoZW1lUVN0eWxlOjphbmltYXRpb25EdXJhdGlvbkZvclByb2dy
ZXNzQmFyKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRoZW1lUVN0eWxlOjpwYWludFByb2dy
ZXNzQmFyKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRoZW1lUVN0eWxlOjpwYWludFNsaWRl
clRyYWNrKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRoZW1lUVN0eWxlOjphZGp1c3RTbGlk
ZXJUcmFja1N0eWxlKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRoZW1lUVN0eWxlOjpwYWlu
dFNsaWRlclRodW1iKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRoZW1lUVN0eWxlOjphZGp1
c3RTbGlkZXJUaHVtYlN0eWxlKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRoZW1lUVN0eWxl
OjpwYWludFNlYXJjaEZpZWxkKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRoZW1lUVN0eWxl
OjphZGp1c3RTZWFyY2hGaWVsZERlY29yYXRpb25TdHlsZSk6CisgICAgICAgIChXZWJDb3JlOjpS
ZW5kZXJUaGVtZVFTdHlsZTo6cGFpbnRTZWFyY2hGaWVsZERlY29yYXRpb24pOgorICAgICAgICAo
V2ViQ29yZTo6UmVuZGVyVGhlbWVRU3R5bGU6OmFkanVzdFNlYXJjaEZpZWxkUmVzdWx0c0RlY29y
YXRpb25TdHlsZSk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJUaGVtZVFTdHlsZTo6cGFpbnRT
ZWFyY2hGaWVsZFJlc3VsdHNEZWNvcmF0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRo
ZW1lUVN0eWxlOjpwYWludElubmVyU3BpbkJ1dHRvbik6CisgICAgICAgIChXZWJDb3JlOjpSZW5k
ZXJUaGVtZVFTdHlsZTo6aW5pdGlhbGl6ZUNvbW1vblFTdHlsZU9wdGlvbnMpOgorICAgICAgICAo
V2ViQ29yZTo6UmVuZGVyVGhlbWVRU3R5bGU6OmFkanVzdFNsaWRlclRodW1iU2l6ZSk6CisgICAg
ICAgICogcGxhdGZvcm0vcXQvUmVuZGVyVGhlbWVRU3R5bGUuaDogUmVuYW1lZCBmcm9tIFNvdXJj
ZS9XZWJLaXQvcXQvV2ViQ29yZVN1cHBvcnQvUmVuZGVyVGhlbWVRU3R5bGUuaC4KKyAgICAgICAg
KFdlYkNvcmUpOgorICAgICAgICAoUmVuZGVyVGhlbWVRU3R5bGUpOgorICAgICAgICAoV2ViQ29y
ZTo6UmVuZGVyVGhlbWVRU3R5bGU6OnN0eWxlSW50ZXJmYWNlKToKKyAgICAgICAgKFN0eWxlUGFp
bnRlclFTdHlsZSk6CisgICAgICAgIChXZWJDb3JlOjpTdHlsZVBhaW50ZXJRU3R5bGU6OmlzVmFs
aWQpOgorICAgICAgICAoV2ViQ29yZTo6U3R5bGVQYWludGVyUVN0eWxlOjpwYWludEJ1dHRvbik6
CisgICAgICAgIChXZWJDb3JlOjpTdHlsZVBhaW50ZXJRU3R5bGU6OnBhaW50VGV4dEZpZWxkKToK
KyAgICAgICAgKFdlYkNvcmU6OlN0eWxlUGFpbnRlclFTdHlsZTo6cGFpbnRDb21ib0JveCk6Cisg
ICAgICAgIChXZWJDb3JlOjpTdHlsZVBhaW50ZXJRU3R5bGU6OnBhaW50Q29tYm9Cb3hBcnJvdyk6
CisgICAgICAgIChXZWJDb3JlOjpTdHlsZVBhaW50ZXJRU3R5bGU6OnBhaW50U2xpZGVyVHJhY2sp
OgorICAgICAgICAoV2ViQ29yZTo6U3R5bGVQYWludGVyUVN0eWxlOjpwYWludFNsaWRlclRodW1i
KToKKyAgICAgICAgKFdlYkNvcmU6OlN0eWxlUGFpbnRlclFTdHlsZTo6cGFpbnRJbm5lclNwaW5C
dXR0b24pOgorICAgICAgICAoV2ViQ29yZTo6U3R5bGVQYWludGVyUVN0eWxlOjpwYWludFByb2dy
ZXNzQmFyKToKKyAgICAgICAgKFdlYkNvcmU6OlN0eWxlUGFpbnRlclFTdHlsZTo6cGFpbnRTY3Jv
bGxDb3JuZXIpOgorICAgICAgICAoV2ViQ29yZTo6U3R5bGVQYWludGVyUVN0eWxlOjpwYWludFNj
cm9sbEJhcik6CisgICAgICAgICogcGxhdGZvcm0vcXQvU2Nyb2xsYmFyVGhlbWVRU3R5bGUuY3Bw
OiBSZW5hbWVkIGZyb20gU291cmNlL1dlYktpdC9xdC9XZWJDb3JlU3VwcG9ydC9TY3JvbGxiYXJU
aGVtZVFTdHlsZS5jcHAuCisgICAgICAgIChXZWJDb3JlKToKKyAgICAgICAgKFdlYkNvcmU6OlNj
cm9sbGJhclRoZW1lUVN0eWxlOjpTY3JvbGxiYXJUaGVtZVFTdHlsZSk6CisgICAgICAgIChXZWJD
b3JlOjpTY3JvbGxiYXJUaGVtZVFTdHlsZTo6flNjcm9sbGJhclRoZW1lUVN0eWxlKToKKyAgICAg
ICAgKFdlYkNvcmU6OnNjUGFydCk6CisgICAgICAgIChXZWJDb3JlOjpzY3JvbGxiYXJQYXJ0KToK
KyAgICAgICAgKFdlYkNvcmU6OmluaXRTbGlkZXJTdHlsZU9wdGlvbik6CisgICAgICAgIChXZWJD
b3JlOjpTY3JvbGxiYXJUaGVtZVFTdHlsZTo6cGFpbnQpOgorICAgICAgICAoV2ViQ29yZTo6U2Ny
b2xsYmFyVGhlbWVRU3R5bGU6OmhpdFRlc3QpOgorICAgICAgICAoV2ViQ29yZTo6U2Nyb2xsYmFy
VGhlbWVRU3R5bGU6OnNob3VsZENlbnRlck9uVGh1bWIpOgorICAgICAgICAoV2ViQ29yZTo6U2Ny
b2xsYmFyVGhlbWVRU3R5bGU6OmludmFsaWRhdGVQYXJ0KToKKyAgICAgICAgKFdlYkNvcmU6OlNj
cm9sbGJhclRoZW1lUVN0eWxlOjpzY3JvbGxiYXJUaGlja25lc3MpOgorICAgICAgICAoV2ViQ29y
ZTo6U2Nyb2xsYmFyVGhlbWVRU3R5bGU6OnRodW1iUG9zaXRpb24pOgorICAgICAgICAoV2ViQ29y
ZTo6U2Nyb2xsYmFyVGhlbWVRU3R5bGU6OnRodW1iTGVuZ3RoKToKKyAgICAgICAgKFdlYkNvcmU6
OlNjcm9sbGJhclRoZW1lUVN0eWxlOjp0cmFja1Bvc2l0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6
OlNjcm9sbGJhclRoZW1lUVN0eWxlOjp0cmFja0xlbmd0aCk6CisgICAgICAgIChXZWJDb3JlOjpT
Y3JvbGxiYXJUaGVtZVFTdHlsZTo6cGFpbnRTY3JvbGxDb3JuZXIpOgorICAgICAgICAqIHBsYXRm
b3JtL3F0L1Njcm9sbGJhclRoZW1lUVN0eWxlLmg6IFJlbmFtZWQgZnJvbSBTb3VyY2UvV2ViS2l0
L3F0L1dlYkNvcmVTdXBwb3J0L1Njcm9sbGJhclRoZW1lUVN0eWxlLmguCisgICAgICAgIChXZWJD
b3JlKToKKyAgICAgICAgKFNjcm9sbGJhclRoZW1lUVN0eWxlKToKKyAgICAgICAgKFdlYkNvcmU6
OlNjcm9sbGJhclRoZW1lUVN0eWxlOjpzdHlsZUludGVyZmFjZSk6CisKIDIwMTItMDktMjYgIFph
biBEb2JlcnNlayAgPHphbmRvYmVyc2VrQGdtYWlsLmNvbT4KIAogICAgICAgICBbR1RLXSBFbmFi
bGUgc29tZSBvZiB0aGUgdW5zdGFibGUgQ1NTIGZlYXR1cmVzCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViS2l0L0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nCmluZGV4IGEwOWU4ZGYw
ZGM3ZjdiMWI3MDU2ODkyMDU1ZjJiNGU5NWNhYmVhZGYuLjI3ZjM4MDE0MGE3ZmU2OGU5ZTRiZWIz
ODU5OTMxOGMzNWY5YjM5NGEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nCisr
KyBiL1NvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTIgQEAKKzIwMTItMTAtMDMg
IFNpbW9uIEhhdXNtYW5uICA8c2ltb24uaGF1c21hbm5AZGlnaWEuY29tPgorCisgICAgICAgIFtR
dF0gTWFrZSBSZW5kZXJUaGVtZVFTdHlsZS9TY3JvbGxiYXJUaGVtZVFTdHlsZSBjb21waWxlIHdp
dGhvdXQgUVN0eWxlL1F0V2lkZ2V0cworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9z
aG93X2J1Zy5jZ2k/aWQ9OTgyNjgKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMh
KS4KKworICAgICAgICAqIFdlYktpdDEucHJvOiBBZGQgbmV3IGZpbGVzIHRvIHRoZSBidWlsZC4K
KwogMjAxMi0wOS0yNCAgQXJ2aWQgTmlsc3NvbiAgPGFuaWxzc29uQHJpbS5jb20+CiAKICAgICAg
ICAgW0JsYWNrQmVycnldIEFkZCBjb29raWUgZGF0YWJhc2UgQVBJCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViS2l0L3F0L0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJLaXQvcXQvQ2hhbmdlTG9nCmluZGV4
IDYxMmI4NjdkMjAxNTNiNGIyOTkxMWE1YjU3MTExN2U2ZWVmNmNmMzYuLjBjM2JiMDE2ZmM2NTc2
MTBjZWM5YjBmZjU1MDNmYmQ0ZDdiZjFjZDIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvcXQv
Q2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XZWJLaXQvcXQvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsODQg
QEAKKzIwMTItMTAtMDMgIFNpbW9uIEhhdXNtYW5uICA8c2ltb24uaGF1c21hbm5AZGlnaWEuY29t
PgorCisgICAgICAgIFtRdF0gTWFrZSBSZW5kZXJUaGVtZVFTdHlsZS9TY3JvbGxiYXJUaGVtZVFT
dHlsZSBjb21waWxlIHdpdGhvdXQgUVN0eWxlL1F0V2lkZ2V0cworICAgICAgICBodHRwczovL2J1
Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9OTgyNjgKKworICAgICAgICBSZXZpZXdlZCBi
eSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBFeHRyYWN0ZWQgUVN0eWxlL1FXaWRnZXQgcmVs
YXRlZCBjb2RlIGludG8gYSBRV2ViU3R5bGUgY2xhc3MgdGhhdCBpbXBsZW1lbnRzIHRoZSBRU3R5
bGVJbnRlcmZhY2UgaW50ZXJmYWNlLgorCisgICAgICAgIFFTdHlsZUludGVyZmFjZSBpcyBhIHB1
cmUgaW50ZXJmYWNlIHRoYXQgbGl2ZXMgaW4gV2ViQ29yZS9wbGF0Zm9ybS9xdAorICAgICAgICAo
bmV4dCB0byBSZW5kZXJUaGVtZVFTdHlsZSBhbmQgU2Nyb2xsYmFyVGhlbWVRU3R5bGUpIGFuZCBw
cm92aWRlcyBhCisgICAgICAgIG1pbmltYWwgaW50ZXJmYWNlIG9mIHdoYXQgd2UgbmVlZCB0byBk
cmF3IHdpdGggUVN0eWxlIGFzIHdlbGwgYXMgYmFzaWMKKyAgICAgICAgaGl0IHRlc3RpbmcgYW5k
IG1ldHJpYyByZXRyaWV2YWwuIEl0IGFsc28gcHJvdmlkZXMgYQorICAgICAgICBRU3R5bGVJbnRl
cmZhY2VPcHRpb24gY2xhc3MgdGhhdCBhZ2dyZWdhdGVzIGNvbW1vbiBtZXRhLWRhdGEgZm9yCisg
ICAgICAgIHJlbmRlcmluZyBwcmltaXRpdmVzLCBzdWNoIGFzIGRpcmVjdGlvbiwgcmVjdGFuZ2xl
LCBzdGF0ZSAoc3Vua2VuLAorICAgICAgICBlbmFibGVkLCBldGMuKSBvciBwYWxldHRlLiBJdCBh
bHNvIHByb3ZpZGVzIHNvbWUgbW9yZSBzbGlkZXIvc2Nyb2xsYmFyCisgICAgICAgIHNwZWNpZmlj
IGZpZWxkcyBpbiBhIHNsaWRlciBzdWItc3RydWN0dXJlLgorCisgICAgICAgIFJlbmRlclRoZW1l
UVN0eWxlL1Njcm9sbGJhclRoZW1lUVN0eWxlIHVzZWQgdG8gaW5zdGFudGlhdGUgc3BlY2lmaWMg
UVN0eWxlT3B0aW9uIHN1Yi1jbGFzc2VzIGFuZCBwb3B1bGF0ZQorICAgICAgICB0aGVtIHdpdGgg
c3RhdGUgaW5mb3JtYXRpb24gZnJvbSByZW5kZXIgb2JqZWN0cywgYmVmb3JlIGNhbGxpbmcgc3Ry
YWlnaHQgdG8gUVN0eWxlLiBNb3N0IG9mIHRoZSBjb21tb24gY29kZQorICAgICAgICB3YXMgZW5j
YXBzdWxhdGVkIGluIFN0eWxlUGFpbnRlclFTdHlsZS4KKworICAgICAgICBUaGUgbmV3IFJlbmRl
clRoZW1lUVN0eWxlL1Njcm9sbGxiYXJUaGVtZVFTdHlsZSB1c2VzIGNvbW1vbiBjb2RlIGluCisg
ICAgICAgIFN0eWxlUGFpbnRlclFTdHlsZSB0byBwb3B1bGF0ZSBzdGF0ZSBpbnRvIFFTdHlsZUlu
dGVyZmFjZU9wdGlvbiBiZWZvcmUKKyAgICAgICAgY2FsbGluZyBpbnRvIFFTdHlsZUludGVyZmFj
ZS4KKworICAgICAgICBUaGUgc3R5bGUgaW50ZXJmYWNlIGlzIHRoZW4gaW1wbGVtZW50ZWQgYnkg
UVdlYlN0eWxlLCB3aGljaCBleHRyYWN0cworICAgICAgICBtZXRhLWRhdGEgZnJvbSBRU3R5bGVJ
bnRlcmZhY2VPcHRpb24gYXJndW1lbnRzLCBwb3B1bGF0ZXMgc3R5bGUKKyAgICAgICAgcHJpbWl0
aXZlIHNwZWNpZmljIFFTdHlsZU9wdGlvbiBvYmplY3RzIGFuZCB0aGVuIGNhbGxzIG9uIFFTdHls
ZS4KKworICAgICAgICBSZW5kZXJUaGVtZVFTdHlsZS9TY3JvbGxiYXJUaGVtZVFTdHlsZSBjYW4g
b25seSB1c2UgaW50ZXJmYWNlIG1ldGhvZHMKKyAgICAgICAgZnJvbSBRU3R5bGVJbnRlcmZhY2Uu
IFFXZWJTdHlsZSBvbiB0aGUgb3RoZXIgaGFuZCB3aWxsIGxpdmUgaW4gdGhlCisgICAgICAgIHNl
cGFyYXRlIFF0V2ViS2l0V2lkZ2V0cyBsaWJyYXJ5IGluIHRoZSBmdXR1cmUgYW5kIHRoZXJlZm9y
ZSBjYW5ub3QgdXNlCisgICAgICAgIGFueSBXZWJDb3JlIHR5cGVzLgorCisgICAgICAgICogV2Vi
Q29yZVN1cHBvcnQvSW5pdFdlYkNvcmVRdC5jcHA6CisgICAgICAgIChXZWJDb3JlOjppbml0aWFs
aXplV2ViQ29yZVF0KToKKyAgICAgICAgKiBXZWJDb3JlU3VwcG9ydC9RV2ViU3R5bGUuY3BwOiBB
ZGRlZC4KKyAgICAgICAgKFdlYktpdCk6CisgICAgICAgIChXZWJLaXQ6OmNvbnZlcnRUb1FTdHls
ZVN0YXRlKToKKyAgICAgICAgKFdlYktpdDo6Y29udmVydFRvUVN0eWxlU3ViQ29udHJvbCk6Cisg
ICAgICAgIChXZWJLaXQ6OmluaXRHZW5lcmljU3R5bGVPcHRpb24pOgorICAgICAgICAoV2ViS2l0
Ojppbml0U3BlY2lmaWNTdHlsZU9wdGlvbik6CisgICAgICAgIChNYXBwZWRTdHlsZU9wdGlvbik6
CisgICAgICAgIChXZWJLaXQ6Ok1hcHBlZFN0eWxlT3B0aW9uOjpNYXBwZWRTdHlsZU9wdGlvbik6
CisgICAgICAgIChXZWJLaXQ6OmNvbnZlcnRQaXhlbE1ldHJpYyk6CisgICAgICAgIChXZWJLaXQ6
OmNvbnZlcnRUb1FTdHlsZUludGVyZmFjZVN1YkNvbnRyb2wpOgorICAgICAgICAoV2ViS2l0OjpR
V2ViU3R5bGU6OlFXZWJTdHlsZSk6CisgICAgICAgIChXZWJLaXQ6OlFXZWJTdHlsZTo6flFXZWJT
dHlsZSk6CisgICAgICAgIChXZWJLaXQ6OlFXZWJTdHlsZTo6YnV0dG9uU3ViRWxlbWVudFJlY3Qp
OgorICAgICAgICAoV2ViS2l0OjpRV2ViU3R5bGU6OmZpbmRGcmFtZUxpbmVXaWR0aCk6CisgICAg
ICAgIChXZWJLaXQ6OlFXZWJTdHlsZTo6c2ltcGxlUGl4ZWxNZXRyaWMpOgorICAgICAgICAoV2Vi
S2l0OjpRV2ViU3R5bGU6OmJ1dHRvbk1hcmdpbik6CisgICAgICAgIChXZWJLaXQ6OlFXZWJTdHls
ZTo6c2xpZGVyTGVuZ3RoKToKKyAgICAgICAgKFdlYktpdDo6UVdlYlN0eWxlOjpzbGlkZXJUaGlj
a25lc3MpOgorICAgICAgICAoV2ViS2l0OjpRV2ViU3R5bGU6OnByb2dyZXNzQmFyQ2h1bmtXaWR0
aCk6CisgICAgICAgIChXZWJLaXQ6OlFXZWJTdHlsZTo6Z2V0QnV0dG9uTWV0cmljcyk6CisgICAg
ICAgIChXZWJLaXQ6OlFXZWJTdHlsZTo6c2l6ZUZyb21Db250ZW50cyk6CisgICAgICAgIChXZWJL
aXQ6OlFXZWJTdHlsZTo6cGFpbnRCdXR0b24pOgorICAgICAgICAoV2ViS2l0OjpRV2ViU3R5bGU6
OnBhaW50VGV4dEZpZWxkKToKKyAgICAgICAgKFdlYktpdDo6UVdlYlN0eWxlOjpwYWludENvbWJv
Qm94KToKKyAgICAgICAgKFdlYktpdDo6UVdlYlN0eWxlOjpwYWludENvbWJvQm94QXJyb3cpOgor
ICAgICAgICAoV2ViS2l0OjpRV2ViU3R5bGU6OnBhaW50U2xpZGVyVHJhY2spOgorICAgICAgICAo
V2ViS2l0OjpRV2ViU3R5bGU6OnBhaW50U2xpZGVyVGh1bWIpOgorICAgICAgICAoV2ViS2l0OjpR
V2ViU3R5bGU6OnBhaW50SW5uZXJTcGluQnV0dG9uKToKKyAgICAgICAgKFdlYktpdDo6UVdlYlN0
eWxlOjpwYWludFByb2dyZXNzQmFyKToKKyAgICAgICAgKFdlYktpdDo6UVdlYlN0eWxlOjpzY3Jv
bGxCYXJFeHRlbnQpOgorICAgICAgICAoV2ViS2l0OjpRV2ViU3R5bGU6OnNjcm9sbEJhck1pZGRs
ZUNsaWNrQWJzb2x1dGVQb3NpdGlvblN0eWxlSGludCk6CisgICAgICAgIChXZWJLaXQ6OlFXZWJT
dHlsZTo6cGFpbnRTY3JvbGxDb3JuZXIpOgorICAgICAgICAoV2ViS2l0OjpRV2ViU3R5bGU6Omhp
dFRlc3RTY3JvbGxCYXIpOgorICAgICAgICAoV2ViS2l0OjpRV2ViU3R5bGU6OnNjcm9sbEJhclN1
YkNvbnRyb2xSZWN0KToKKyAgICAgICAgKFdlYktpdDo6UVdlYlN0eWxlOjpwYWludFNjcm9sbEJh
cik6CisgICAgICAgIChXZWJLaXQ6OlFXZWJTdHlsZTo6d2lkZ2V0Rm9yUGFpbnRlcik6CisgICAg
ICAgIChXZWJLaXQ6OlFXZWJTdHlsZTo6aXNWYWxpZCk6CisgICAgICAgIChXZWJLaXQ6OlFXZWJT
dHlsZTo6ZW5zdXJlU3R5bGUpOgorICAgICAgICAqIFdlYkNvcmVTdXBwb3J0L1FXZWJTdHlsZS5o
OiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmUpOgorICAgICAgICAoV2ViS2l0KToKKyAgICAgICAg
KFFXZWJTdHlsZSk6CisgICAgICAgIChXZWJLaXQ6OlFXZWJTdHlsZTo6Y3JlYXRlKToKKwogMjAx
Mi0wOS0yNiAgU2ltb24gSGF1c21hbm4gIDxzaW1vbi5oYXVzbWFubkBkaWdpYS5jb20+CiAKICAg
ICAgICAgW1F0XSBSZW1vdmUgUXQgUXVpY2sgMSBzdXBwb3J0CmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9UYXJnZXQucHJpIGIvU291cmNlL1dlYkNvcmUvVGFyZ2V0LnByaQppbmRleCAyNDdj
MjBlYzVjMzZiYzQ2Y2UyODAwMGY1NDA4OWUwMTkzYWFhZmVjLi40MzZlYWU5MDIzMTg3NzEwODk0
MGE3M2M4N2JkZTA1NjJjZTExYmE5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9UYXJnZXQu
cHJpCisrKyBiL1NvdXJjZS9XZWJDb3JlL1RhcmdldC5wcmkKQEAgLTIyMjksOCArMjIyOSwxMSBA
QCBIRUFERVJTICs9IFwKICAgICBwbGF0Zm9ybS9xdC9DbGlwYm9hcmRRdC5oIFwKICAgICBwbGF0
Zm9ybS9xdC9Db29raWVKYXJRdC5oIFwKICAgICBwbGF0Zm9ybS9xdC9RV2ViUGFnZUNsaWVudC5o
IFwKKyAgICBwbGF0Zm9ybS9xdC9RU3R5bGVJbnRlcmZhY2UuaCBcCisgICAgcGxhdGZvcm0vcXQv
UmVuZGVyVGhlbWVRU3R5bGUuaCBcCiAgICAgcGxhdGZvcm0vcXQvUmVuZGVyVGhlbWVRdC5oIFwK
ICAgICBwbGF0Zm9ybS9xdC9SZW5kZXJUaGVtZVF0TW9iaWxlLmggXAorICAgIHBsYXRmb3JtL3F0
L1Njcm9sbGJhclRoZW1lUVN0eWxlLmggXAogICAgIHBsYXRmb3JtL3F0L1VzZXJBZ2VudFF0Lmgg
XAogICAgIHBsYXRmb3JtL1Njcm9sbGFibGVBcmVhLmggXAogICAgIHBsYXRmb3JtL1Njcm9sbEFu
aW1hdG9yLmggXApAQCAtMjgwMSw4ICsyODA0LDExIEBAIFNPVVJDRVMgKz0gXAogICAgIHBsYXRm
b3JtL3F0L1Bhc3RlYm9hcmRRdC5jcHAgXAogICAgIHBsYXRmb3JtL3F0L1BsYXRmb3JtS2V5Ym9h
cmRFdmVudFF0LmNwcCBcCiAgICAgcGxhdGZvcm0vcXQvUGxhdGZvcm1TY3JlZW5RdC5jcHAgXAor
ICAgIHBsYXRmb3JtL3F0L1FTdHlsZUludGVyZmFjZS5jcHAgXAorICAgIHBsYXRmb3JtL3F0L1Jl
bmRlclRoZW1lUVN0eWxlLmNwcCBcCiAgICAgcGxhdGZvcm0vcXQvUmVuZGVyVGhlbWVRdC5jcHAg
XAogICAgIHBsYXRmb3JtL3F0L1JlbmRlclRoZW1lUXRNb2JpbGUuY3BwIFwKKyAgICBwbGF0Zm9y
bS9xdC9TY3JvbGxiYXJUaGVtZVFTdHlsZS5jcHAgXAogICAgIHBsYXRmb3JtL3F0L1Njcm9sbGJh
clRoZW1lUXQuY3BwIFwKICAgICBwbGF0Zm9ybS9xdC9TY3JvbGxWaWV3UXQuY3BwIFwKICAgICBw
bGF0Zm9ybS9xdC9TaGFyZWRUaW1lclF0LmNwcCBcCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9xdC9RU3R5bGVJbnRlcmZhY2UuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vcXQvUVN0eWxlSW50ZXJmYWNlLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5mY2Q2ZTUyZTBlZTQ5Njk1M2Y1
ZTg1YTViYWE4YzhhM2M4ZGUyMmY0Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vcXQvUVN0eWxlSW50ZXJmYWNlLmNwcApAQCAtMCwwICsxLDQ2IEBACisvKgorICog
VGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIHRoZW1lIGltcGxlbWVudGF0aW9uIGZvciBmb3JtIGNv
bnRyb2xzIGluIFdlYkNvcmUuCisgKgorICogQ29weXJpZ2h0IChDKSAyMDEyIERpZ2lhIFBsYyBh
bmQvb3IgaXRzIHN1YnNpZGlhcnkoLWllcykuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTEtMjAxMiBO
b2tpYSBDb3Jwb3JhdGlvbiBhbmQvb3IgaXRzIHN1YnNpZGlhcnkoLWllcykuCisgKgorICogVGhp
cyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9v
cgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJh
bCBQdWJsaWMKKyAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZv
dW5kYXRpb247IGVpdGhlcgorICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91
ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBkaXN0
cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhP
VVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAq
IE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNl
ZSB0aGUgR05VCisgKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0
YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUg
TGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgbGlicmFy
eTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bworICogdGhlIEZy
ZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBG
bG9vciwKKyAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgorICoKKyAqLworCisjaW5jbHVk
ZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiUVN0eWxlSW50ZXJmYWNlLmgiCisKKyNpbmNsdWRlICJR
V2ViUGFnZUNsaWVudC5oIgorI2luY2x1ZGUgPENocm9tZS5oPgorI2luY2x1ZGUgPENocm9tZUNs
aWVudC5oPgorI2luY2x1ZGUgPFBhZ2UuaD4KKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitRU3R5
bGUqIFFTdHlsZUludGVyZmFjZTo6c3R5bGVGb3JQYWdlKFBhZ2UqIHBhZ2UpCit7CisgICAgaWYg
KCFwYWdlKQorICAgICAgICByZXR1cm4gMDsKKyAgICBRV2ViUGFnZUNsaWVudCogcGFnZUNsaWVu
dCA9IHBhZ2UtPmNocm9tZSgpLT5jbGllbnQoKS0+cGxhdGZvcm1QYWdlQ2xpZW50KCk7CisKKyAg
ICBpZiAoIXBhZ2VDbGllbnQpCisgICAgICAgIHJldHVybiAwOworCisgICAgcmV0dXJuIHBhZ2VD
bGllbnQtPnN0eWxlKCk7Cit9CisKK30KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL3F0L1FTdHlsZUludGVyZmFjZS5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vcXQvUVN0
eWxlSW50ZXJmYWNlLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uZTIxNTg4ODZjMjE0MzVlMTc4YmZhNzk0NDQxNDVj
YTFkZTdmMGYwNQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3F0
L1FTdHlsZUludGVyZmFjZS5oCkBAIC0wLDAgKzEsMjA1IEBACisvKgorICogVGhpcyBmaWxlIGlz
IHBhcnQgb2YgdGhlIHRoZW1lIGltcGxlbWVudGF0aW9uIGZvciBmb3JtIGNvbnRyb2xzIGluIFdl
YkNvcmUuCisgKgorICogQ29weXJpZ2h0IChDKSAyMDEyIERpZ2lhIFBsYyBhbmQvb3IgaXRzIHN1
YnNpZGlhcnkoLWllcykuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTEtMjAxMiBOb2tpYSBDb3Jwb3Jh
dGlvbiBhbmQvb3IgaXRzIHN1YnNpZGlhcnkoLWllcykuCisgKgorICogVGhpcyBsaWJyYXJ5IGlz
IGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5
IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAq
IExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVp
dGhlcgorICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFu
eSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0
aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJB
TlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJ
TElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisg
KiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisg
KiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5l
cmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBm
aWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bworICogdGhlIEZyZWUgU29mdHdhcmUg
Rm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKKyAqIEJv
c3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgorICoKKyAqLworI2lmbmRlZiBRU3R5bGVJbnRlcmZh
Y2VfaAorI2RlZmluZSBRU3R5bGVJbnRlcmZhY2VfaAorCisjaW5jbHVkZSA8UVBhbGV0dGU+Cisj
aW5jbHVkZSA8UVJlY3Q+CisKK1FUX0JFR0lOX05BTUVTUEFDRQorY2xhc3MgUVN0eWxlOworUVRf
RU5EX05BTUVTUEFDRQorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK2NsYXNzIFBhZ2U7CitjbGFz
cyBRU3R5bGVJbnRlcmZhY2VPcHRpb247CisKK2NsYXNzIFFTdHlsZUludGVyZmFjZSB7CitwdWJs
aWM6CisgICAgZW51bSBCdXR0b25TdWJFbGVtZW50IHsKKyAgICAgICAgUHVzaEJ1dHRvbkxheW91
dEl0ZW0sCisgICAgICAgIFB1c2hCdXR0b25Db250ZW50cworICAgIH07CisKKyNkZWZpbmUgRk9S
X0VBQ0hfTUFQUEVEX1NUQVRFKEYsIFNFUEFSQVRPUikgXAorICAgIEYoU3RhdGVfTm9uZSwgMHgw
MDAwMDAwMCkgU0VQQVJBVE9SIFwKKyAgICBGKFN0YXRlX0VuYWJsZWQsIDB4MDAwMDAwMDEpIFNF
UEFSQVRPUiBcCisgICAgRihTdGF0ZV9SYWlzZWQsIDB4MDAwMDAwMDIpIFNFUEFSQVRPUiBcCisg
ICAgRihTdGF0ZV9TdW5rZW4sIDB4MDAwMDAwMDQpIFNFUEFSQVRPUiBcCisgICAgRihTdGF0ZV9P
ZmYsIDB4MDAwMDAwMDgpIFNFUEFSQVRPUiBcCisgICAgRihTdGF0ZV9Ob0NoYW5nZSwgMHgwMDAw
MDAxMCkgU0VQQVJBVE9SIFwKKyAgICBGKFN0YXRlX09uLCAweDAwMDAwMDIwKSBTRVBBUkFUT1Ig
XAorICAgIEYoU3RhdGVfRG93bkFycm93LCAweDAwMDAwMDQwKSBTRVBBUkFUT1IgXAorICAgIEYo
U3RhdGVfSG9yaXpvbnRhbCwgMHgwMDAwMDA4MCkgU0VQQVJBVE9SIFwKKyAgICBGKFN0YXRlX0hh
c0ZvY3VzLCAweDAwMDAwMTAwKSBTRVBBUkFUT1IgXAorICAgIEYoU3RhdGVfVG9wLCAweDAwMDAw
MjAwKSBTRVBBUkFUT1IgXAorICAgIEYoU3RhdGVfQm90dG9tLCAweDAwMDAwNDAwKSBTRVBBUkFU
T1IgXAorICAgIEYoU3RhdGVfRm9jdXNBdEJvcmRlciwgMHgwMDAwMDgwMCkgU0VQQVJBVE9SIFwK
KyAgICBGKFN0YXRlX0F1dG9SYWlzZSwgMHgwMDAwMTAwMCkgU0VQQVJBVE9SIFwKKyAgICBGKFN0
YXRlX01vdXNlT3ZlciwgMHgwMDAwMjAwMCkgU0VQQVJBVE9SIFwKKyAgICBGKFN0YXRlX1VwQXJy
b3csIDB4MDAwMDQwMDApIFNFUEFSQVRPUiBcCisgICAgRihTdGF0ZV9TZWxlY3RlZCwgMHgwMDAw
ODAwMCkgU0VQQVJBVE9SIFwKKyAgICBGKFN0YXRlX0FjdGl2ZSwgMHgwMDAxMDAwMCkgU0VQQVJB
VE9SIFwKKyAgICBGKFN0YXRlX1dpbmRvdywgMHgwMDAyMDAwMCkgU0VQQVJBVE9SIFwKKyAgICBG
KFN0YXRlX09wZW4sIDB4MDAwNDAwMDApIFNFUEFSQVRPUiBcCisgICAgRihTdGF0ZV9DaGlsZHJl
biwgMHgwMDA4MDAwMCkgU0VQQVJBVE9SIFwKKyAgICBGKFN0YXRlX0l0ZW0sIDB4MDAxMDAwMDAp
IFNFUEFSQVRPUiBcCisgICAgRihTdGF0ZV9TaWJsaW5nLCAweDAwMjAwMDAwKSBTRVBBUkFUT1Ig
XAorICAgIEYoU3RhdGVfRWRpdGluZywgMHgwMDQwMDAwMCkgU0VQQVJBVE9SIFwKKyAgICBGKFN0
YXRlX0tleWJvYXJkRm9jdXNDaGFuZ2UsIDB4MDA4MDAwMDApIFNFUEFSQVRPUiBcCisgICAgRihT
dGF0ZV9SZWFkT25seSwgMHgwMjAwMDAwMCkgU0VQQVJBVE9SIFwKKyAgICBGKFN0YXRlX1NtYWxs
LCAweDA0MDAwMDAwKSBTRVBBUkFUT1IgXAorICAgIEYoU3RhdGVfTWluaSwgMHgwODAwMDAwKQor
CisjZGVmaW5lIENPTU1BICwKKyNkZWZpbmUgU0VNSUNPTE9OIDsKKyNkZWZpbmUgREVGSU5FX01B
UFBFRF9TVEFURShOYW1lLCBWYWx1ZSkgXAorICAgIE5hbWUgPSBWYWx1ZQorCisgICAgLy8gIyMj
IFJlbW92ZSB1bnVzZWQgc3RhdGVzLgorICAgIGVudW0gU3RhdGVGbGFnIHsKKyAgICAgICAgRk9S
X0VBQ0hfTUFQUEVEX1NUQVRFKERFRklORV9NQVBQRURfU1RBVEUsIENPTU1BKQorICAgIH07Cisg
ICAgUV9ERUNMQVJFX0ZMQUdTKFN0YXRlLCBTdGF0ZUZsYWcpCisKKyNkZWZpbmUgRk9SX0VBQ0hf
TUFQUEVEX01FVFJJQyhGLCBTRVBBUkFUT1IpIFwKKyAgICBGKFBNX0J1dHRvbk1hcmdpbikgU0VQ
QVJBVE9SIFwKKyAgICBGKFBNX0RlZmF1bHRGcmFtZVdpZHRoKSBTRVBBUkFUT1IgXAorICAgIEYo
UE1fSW5kaWNhdG9yV2lkdGgpIFNFUEFSQVRPUiBcCisgICAgRihQTV9FeGNsdXNpdmVJbmRpY2F0
b3JXaWR0aCkgU0VQQVJBVE9SIFwKKyAgICBGKFBNX0J1dHRvbkljb25TaXplKQorCisjZGVmaW5l
IERFRklORV9NRVRSSUMoRikgRgorCisgICAgZW51bSBQaXhlbE1ldHJpYyB7CisgICAgICAgIEZP
Ul9FQUNIX01BUFBFRF9NRVRSSUMoREVGSU5FX01FVFJJQywgQ09NTUEpCisgICAgfTsKKworICAg
IGVudW0gQ29udGVudHNUeXBlIHsKKyAgICAgICAgQ1RfQ29tYm9Cb3gsCisgICAgICAgIENUX1B1
c2hCdXR0b24KKyAgICB9OworCisjZGVmaW5lIEZPUl9FQUNIX1NVQkNPTlRST0woRiwgU0VQQVJB
VE9SKSBcCisgICAgRihTQ19Ob25lLCAweDAwMDAwMDAwKSBTRVBBUkFUT1IgXAorICAgIEYoU0Nf
U2Nyb2xsQmFyQWRkTGluZSwgMHgwMDAwMDAwMSkgU0VQQVJBVE9SIFwKKyAgICBGKFNDX1Njcm9s
bEJhclN1YkxpbmUsIDB4MDAwMDAwMDIpIFNFUEFSQVRPUiBcCisgICAgRihTQ19TY3JvbGxCYXJB
ZGRQYWdlLCAweDAwMDAwMDA0KSBTRVBBUkFUT1IgXAorICAgIEYoU0NfU2Nyb2xsQmFyU3ViUGFn
ZSwgMHgwMDAwMDAwOCkgU0VQQVJBVE9SIFwKKyAgICBGKFNDX1Njcm9sbEJhckZpcnN0LCAweDAw
MDAwMDEwKSBTRVBBUkFUT1IgXAorICAgIEYoU0NfU2Nyb2xsQmFyTGFzdCwgMHgwMDAwMDAyMCkg
U0VQQVJBVE9SIFwKKyAgICBGKFNDX1Njcm9sbEJhclNsaWRlciwgMHgwMDAwMDA0MCkgU0VQQVJB
VE9SIFwKKyAgICBGKFNDX1Njcm9sbEJhckdyb292ZSwgMHgwMDAwMDA4MCkKKworI2RlZmluZSBE
RUZJTkVfU1VCQ09OVFJPTChGLCBWYWx1ZSkgRgorCisgICAgZW51bSBTdWJDb250cm9sIHsKKyAg
ICAgICAgRk9SX0VBQ0hfU1VCQ09OVFJPTChERUZJTkVfU1VCQ09OVFJPTCwgQ09NTUEpCisgICAg
fTsKKworICAgIHZpcnR1YWwgflFTdHlsZUludGVyZmFjZSgpIHsgfQorCisgICAgdmlydHVhbCBR
UmVjdCBidXR0b25TdWJFbGVtZW50UmVjdChCdXR0b25TdWJFbGVtZW50IGJ1dHRvbkVsZW1lbnQs
IFN0YXRlLCBjb25zdCBRUmVjdCYgb3JpZ2luYWxSZWN0KSBjb25zdCA9IDA7CisKKyAgICB2aXJ0
dWFsIGludCBmaW5kRnJhbWVMaW5lV2lkdGgoKSBjb25zdCA9IDA7CisgICAgdmlydHVhbCBpbnQg
c2ltcGxlUGl4ZWxNZXRyaWMoUGl4ZWxNZXRyaWMsIFN0YXRlID0gU3RhdGVfTm9uZSwgUU9iamVj
dCogd2lkZ2V0ID0gMCkgY29uc3QgPSAwOworICAgIHZpcnR1YWwgaW50IGJ1dHRvbk1hcmdpbihT
dGF0ZSwgY29uc3QgUVJlY3QmIG9yaWdpbmFsUmVjdCkgY29uc3QgPSAwOworICAgIHZpcnR1YWwg
aW50IHNsaWRlckxlbmd0aChRdDo6T3JpZW50YXRpb24pIGNvbnN0ID0gMDsKKyAgICB2aXJ0dWFs
IGludCBzbGlkZXJUaGlja25lc3MoUXQ6Ok9yaWVudGF0aW9uKSBjb25zdCA9IDA7CisgICAgdmly
dHVhbCBpbnQgcHJvZ3Jlc3NCYXJDaHVua1dpZHRoKGNvbnN0IFFTaXplJikgY29uc3QgPSAwOwor
ICAgIHZpcnR1YWwgdm9pZCBnZXRCdXR0b25NZXRyaWNzKFFTdHJpbmcqIGJ1dHRvbkZvbnRGYW1p
bHksIGludCogYnV0dG9uRm9udFBpeGVsU2l6ZSkgY29uc3QgPSAwOworCisgICAgdmlydHVhbCBR
U2l6ZSBzaXplRnJvbUNvbnRlbnRzKENvbnRlbnRzVHlwZSwgU3RhdGUsIGNvbnN0IFFTaXplJiBj
b250ZW50c1NpemUpIGNvbnN0ID0gMDsKKworICAgIGVudW0gQnV0dG9uVHlwZSB7CisgICAgICAg
IFB1c2hCdXR0b24sCisgICAgICAgIFJhZGlvQnV0dG9uLAorICAgICAgICBDaGVja0JveAorICAg
IH07CisKKyAgICB2aXJ0dWFsIHZvaWQgcGFpbnRCdXR0b24oUVBhaW50ZXIqLCBCdXR0b25UeXBl
LCBjb25zdCBRU3R5bGVJbnRlcmZhY2VPcHRpb24mLCBRT2JqZWN0ICp3aWRnZXQpID0gMDsKKyAg
ICB2aXJ0dWFsIHZvaWQgcGFpbnRUZXh0RmllbGQoUVBhaW50ZXIqLCBjb25zdCBRU3R5bGVJbnRl
cmZhY2VPcHRpb24mLCBRT2JqZWN0KiB3aWRnZXRPYmopID0gMDsKKyAgICB2aXJ0dWFsIHZvaWQg
cGFpbnRDb21ib0JveChRUGFpbnRlciosIGNvbnN0IFFTdHlsZUludGVyZmFjZU9wdGlvbiYsIFFP
YmplY3QgKndpZGdldE9iaikgPSAwOworICAgIHZpcnR1YWwgdm9pZCBwYWludENvbWJvQm94QXJy
b3coUVBhaW50ZXIqLCBjb25zdCBRU3R5bGVJbnRlcmZhY2VPcHRpb24mLCBRT2JqZWN0ICp3aWRn
ZXRPYmopID0gMDsKKworICAgIHZpcnR1YWwgdm9pZCBwYWludFNsaWRlclRyYWNrKFFQYWludGVy
KiwgY29uc3QgUVN0eWxlSW50ZXJmYWNlT3B0aW9uJiwgUU9iamVjdCAqd2lkZ2V0T2JqKSA9IDA7
CisgICAgdmlydHVhbCB2b2lkIHBhaW50U2xpZGVyVGh1bWIoUVBhaW50ZXIqLCBjb25zdCBRU3R5
bGVJbnRlcmZhY2VPcHRpb24mLCBRT2JqZWN0ICp3aWRnZXRPYmopID0gMDsKKyAgICB2aXJ0dWFs
IHZvaWQgcGFpbnRJbm5lclNwaW5CdXR0b24oUVBhaW50ZXIqLCBjb25zdCBRU3R5bGVJbnRlcmZh
Y2VPcHRpb24mLCBib29sIHNwaW5Cb3hVcCwgUU9iamVjdCogd2lkZ2V0T2JqKSA9IDA7CisgICAg
dmlydHVhbCB2b2lkIHBhaW50UHJvZ3Jlc3NCYXIoUVBhaW50ZXIqLCBjb25zdCBRU3R5bGVJbnRl
cmZhY2VPcHRpb24mLCBkb3VibGUgcHJvZ3Jlc3MsIGRvdWJsZSBhbmltYXRpb25Qcm9ncmVzcywg
UU9iamVjdCogd2lkZ2V0T2JqKSA9IDA7CisKKyAgICB2aXJ0dWFsIGludCBzY3JvbGxCYXJFeHRl
bnQoYm9vbCBtaW5pKSA9IDA7CisgICAgdmlydHVhbCBib29sIHNjcm9sbEJhck1pZGRsZUNsaWNr
QWJzb2x1dGVQb3NpdGlvblN0eWxlSGludCgpIGNvbnN0ID0gMDsKKyAgICB2aXJ0dWFsIHZvaWQg
cGFpbnRTY3JvbGxDb3JuZXIoUVBhaW50ZXIqLCBjb25zdCBRUmVjdCYsIFFPYmplY3QqIHdpZGdl
dE9iaikgPSAwOworCisgICAgdmlydHVhbCBTdWJDb250cm9sIGhpdFRlc3RTY3JvbGxCYXIoY29u
c3QgUVN0eWxlSW50ZXJmYWNlT3B0aW9uJiwgY29uc3QgUVBvaW50JiBwb3MpID0gMDsKKyAgICB2
aXJ0dWFsIFFSZWN0IHNjcm9sbEJhclN1YkNvbnRyb2xSZWN0KGNvbnN0IFFTdHlsZUludGVyZmFj
ZU9wdGlvbiYsIFN1YkNvbnRyb2wpID0gMDsKKyAgICB2aXJ0dWFsIHZvaWQgcGFpbnRTY3JvbGxC
YXIoUVBhaW50ZXIqLCBjb25zdCBRU3R5bGVJbnRlcmZhY2VPcHRpb24mLCBRT2JqZWN0KiB3aWRn
ZXRPYmopID0gMDsKKworICAgIHZpcnR1YWwgUU9iamVjdCogd2lkZ2V0Rm9yUGFpbnRlcihRUGFp
bnRlciopID0gMDsKKworICAgIHZpcnR1YWwgYm9vbCBpc1ZhbGlkKCkgY29uc3QgPSAwOworCisg
ICAgc3RhdGljIFFTdHlsZSogc3R5bGVGb3JQYWdlKFBhZ2UqKTsKK307CisKK1FfREVDTEFSRV9P
UEVSQVRPUlNfRk9SX0ZMQUdTKFFTdHlsZUludGVyZmFjZTo6U3RhdGUpCisKK3N0cnVjdCBRU3R5
bGVJbnRlcmZhY2VPcHRpb24geworICAgIFFTdHlsZUludGVyZmFjZU9wdGlvbigpCisgICAgICAg
IDogc3RhdGUoUVN0eWxlSW50ZXJmYWNlOjpTdGF0ZV9Ob25lKQorICAgICAgICAsIGRpcmVjdGlv
bihRdDo6TGF5b3V0RGlyZWN0aW9uQXV0bykKKyAgICB7CisgICAgICAgIHNsaWRlci5vcmllbnRh
dGlvbiA9IFF0OjpIb3Jpem9udGFsOworICAgICAgICBzbGlkZXIudXBzaWRlRG93biA9IGZhbHNl
OworICAgICAgICBzbGlkZXIubWluaW11bSA9IDA7CisgICAgICAgIHNsaWRlci5tYXhpbXVtID0g
MDsKKyAgICAgICAgc2xpZGVyLnBvc2l0aW9uID0gMDsKKyAgICAgICAgc2xpZGVyLnZhbHVlID0g
MDsKKyAgICAgICAgc2xpZGVyLnNpbmdsZVN0ZXAgPSAwOworICAgICAgICBzbGlkZXIucGFnZVN0
ZXAgPSAwOworICAgICAgICBzbGlkZXIuYWN0aXZlU3ViQ29udHJvbHMgPSBRU3R5bGVJbnRlcmZh
Y2U6OlNDX05vbmU7CisgICAgfQorCisgICAgUVN0eWxlSW50ZXJmYWNlOjpTdGF0ZSBzdGF0ZTsK
KyAgICBRUmVjdCByZWN0OworICAgIFF0OjpMYXlvdXREaXJlY3Rpb24gZGlyZWN0aW9uOworICAg
IFFQYWxldHRlIHBhbGV0dGU7CisKKyAgICAvLyBTbGlkZXIgZmVhdHVyZXMKKyAgICBzdHJ1Y3Qg
eworICAgICAgICBRdDo6T3JpZW50YXRpb24gb3JpZW50YXRpb247CisgICAgICAgIGJvb2wgdXBz
aWRlRG93bjsKKyAgICAgICAgaW50IG1pbmltdW07CisgICAgICAgIGludCBtYXhpbXVtOworICAg
ICAgICBpbnQgcG9zaXRpb247CisgICAgICAgIGludCB2YWx1ZTsKKyAgICAgICAgaW50IHNpbmds
ZVN0ZXA7CisgICAgICAgIGludCBwYWdlU3RlcDsKKyAgICAgICAgUVN0eWxlSW50ZXJmYWNlOjpT
dWJDb250cm9sIGFjdGl2ZVN1YkNvbnRyb2xzOworICAgIH0gc2xpZGVyOworfTsKKworfQorCisj
ZW5kaWYgLy8gUVN0eWxlSW50ZXJmYWNlX2gKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL3F0L1JlbmRlclRoZW1lUVN0eWxlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L3F0L1JlbmRlclRoZW1lUVN0eWxlLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi43ZjM0OGE5MTgzYjAzMTQ1MmEz
NjVhNDI0NDNlN2IwNTRmODdiZjYwCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vcXQvUmVuZGVyVGhlbWVRU3R5bGUuY3BwCkBAIC0wLDAgKzEsNjIyIEBACisvKgor
ICogVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIFdlYktpdCBwcm9qZWN0LgorICoKKyAqIENvcHly
aWdodCAoQykgMjAwOC0yMDEyIE5va2lhIENvcnBvcmF0aW9uIGFuZC9vciBpdHMgc3Vic2lkaWFy
eSgtaWVzKQorICoKKyAqIENvcHlyaWdodCAoQykgMjAwNiBaYWNrIFJ1c2luIDx6YWNrQGtkZS5v
cmc+CisgKiAgICAgICAgICAgICAgIDIwMDYgRGlyayBNdWVsbGVyIDxtdWVsbGVyQGtkZS5vcmc+
CisgKiAgICAgICAgICAgICAgIDIwMDYgTmlrb2xhcyBaaW1tZXJtYW5uIDx6aW1tZXJtYW5uQGtk
ZS5vcmc+CisgKiBDb3B5cmlnaHQgKEMpIDIwMDggSG9sZ2VyIEhhbnMgUGV0ZXIgRnJleXRoZXIK
KyAqCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBmcmVl
IHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1
bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgKiBMaWNl
bnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIK
KyAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0
ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhv
cGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsg
d2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkg
b3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogTGli
cmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91
IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQ
dWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBD
T1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5k
YXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCisgKiBCb3N0b24s
IE1BIDAyMTEwLTEzMDEsIFVTQS4KKyAqCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2lu
Y2x1ZGUgIlJlbmRlclRoZW1lUVN0eWxlLmgiCisKKyNpbmNsdWRlICJDU1NGb250U2VsZWN0b3Iu
aCIKKyNpbmNsdWRlICJDU1NWYWx1ZUtleXdvcmRzLmgiCisjaW5jbHVkZSAiQ2hyb21lLmgiCisj
aW5jbHVkZSAiQ2hyb21lQ2xpZW50LmgiCisjaW5jbHVkZSAiQ29sb3IuaCIKKyNpbmNsdWRlICJE
b2N1bWVudC5oIgorI2luY2x1ZGUgIkZvbnQuaCIKKyNpbmNsdWRlICJGb250U2VsZWN0b3IuaCIK
KyNpbmNsdWRlICJHcmFwaGljc0NvbnRleHQuaCIKKyNpbmNsdWRlICJIVE1MSW5wdXRFbGVtZW50
LmgiCisjaW5jbHVkZSAiSFRNTE5hbWVzLmgiCisjaW5jbHVkZSAiTG9jYWxpemVkU3RyaW5ncy5o
IgorI2luY2x1ZGUgIk5vdEltcGxlbWVudGVkLmgiCisjaW5jbHVkZSAiUGFnZS5oIgorI2luY2x1
ZGUgIlBhaW50SW5mby5oIgorI2luY2x1ZGUgIlFXZWJQYWdlQ2xpZW50LmgiCisjaW5jbHVkZSAi
UmVuZGVyQm94LmgiCisjaWYgRU5BQkxFKFBST0dSRVNTX0VMRU1FTlQpCisjaW5jbHVkZSAiUmVu
ZGVyUHJvZ3Jlc3MuaCIKKyNlbmRpZgorI2luY2x1ZGUgIlJlbmRlclNsaWRlci5oIgorI2luY2x1
ZGUgIlNjcm9sbGJhclRoZW1lUVN0eWxlLmgiCisjaW5jbHVkZSAiU2xpZGVyVGh1bWJFbGVtZW50
LmgiCisjaW5jbHVkZSAiU3R5bGVSZXNvbHZlci5oIgorI2luY2x1ZGUgIlVzZXJBZ2VudFN0eWxl
U2hlZXRzLmgiCisKKyNpbmNsdWRlIDxRUGFpbnRlcj4KKworbmFtZXNwYWNlIFdlYkNvcmUgewor
Cit1c2luZyBuYW1lc3BhY2UgSFRNTE5hbWVzOworCitRU2hhcmVkUG9pbnRlcjxTdHlsZVBhaW50
ZXI+IFJlbmRlclRoZW1lUVN0eWxlOjpnZXRTdHlsZVBhaW50ZXIoY29uc3QgUGFpbnRJbmZvJiBw
YWludEluZm8pCit7CisgICAgcmV0dXJuIFFTaGFyZWRQb2ludGVyPFN0eWxlUGFpbnRlcj4obmV3
IFN0eWxlUGFpbnRlclFTdHlsZSh0aGlzLCBwYWludEluZm8sIC8qUmVuZGVyT2JqZWN0Ki8wKSk7
Cit9CisKK1N0eWxlUGFpbnRlclFTdHlsZTo6U3R5bGVQYWludGVyUVN0eWxlKFJlbmRlclRoZW1l
UVN0eWxlKiB0aGVtZSwgY29uc3QgUGFpbnRJbmZvJiBwYWludEluZm8sIFJlbmRlck9iamVjdCog
cmVuZGVyT2JqZWN0KQorICAgIDogU3R5bGVQYWludGVyKHRoZW1lLCBwYWludEluZm8pCisgICAg
LCBzdHlsZUludGVyZmFjZSh0aGVtZS0+c3R5bGVJbnRlcmZhY2UoKSkKKyAgICAsIGFwcGVhcmFu
Y2UoTm9Db250cm9sUGFydCkKK3sKKyAgICBpbml0KHBhaW50SW5mby5jb250ZXh0ID8gcGFpbnRJ
bmZvLmNvbnRleHQgOiAwKTsKKyAgICBpZiAocmVuZGVyT2JqZWN0KQorICAgICAgICBhcHBlYXJh
bmNlID0gdGhlbWUtPmluaXRpYWxpemVDb21tb25RU3R5bGVPcHRpb25zKHN0eWxlT3B0aW9uLCBy
ZW5kZXJPYmplY3QpOworfQorCitTdHlsZVBhaW50ZXJRU3R5bGU6OlN0eWxlUGFpbnRlclFTdHls
ZShTY3JvbGxiYXJUaGVtZVFTdHlsZSogdGhlbWUsIEdyYXBoaWNzQ29udGV4dCogY29udGV4dCkK
KyAgICA6IFN0eWxlUGFpbnRlcigpCisgICAgLCBzdHlsZUludGVyZmFjZSh0aGVtZS0+c3R5bGVJ
bnRlcmZhY2UoKSkKKyAgICAsIGFwcGVhcmFuY2UoTm9Db250cm9sUGFydCkKK3sKKyAgICBpbml0
KGNvbnRleHQpOworfQorCit2b2lkIFN0eWxlUGFpbnRlclFTdHlsZTo6aW5pdChHcmFwaGljc0Nv
bnRleHQqIGNvbnRleHQpCit7CisgICAgcGFpbnRlciA9IHN0YXRpY19jYXN0PFFQYWludGVyKj4o
Y29udGV4dC0+cGxhdGZvcm1Db250ZXh0KCkpOworICAgIHdpZGdldCA9IHN0eWxlSW50ZXJmYWNl
LT53aWRnZXRGb3JQYWludGVyKHBhaW50ZXIpOworCisgICAgaWYgKHdpZGdldCkgeworICAgICAg
ICBzdHlsZU9wdGlvbi5wYWxldHRlID0gd2lkZ2V0LT5wcm9wZXJ0eSgicGFsZXR0ZSIpLnZhbHVl
PFFQYWxldHRlPigpOworICAgICAgICBzdHlsZU9wdGlvbi5yZWN0ID0gd2lkZ2V0LT5wcm9wZXJ0
eSgicmVjdCIpLnZhbHVlPFFSZWN0PigpOworICAgICAgICBzdHlsZU9wdGlvbi5kaXJlY3Rpb24g
PSBzdGF0aWNfY2FzdDxRdDo6TGF5b3V0RGlyZWN0aW9uPih3aWRnZXQtPnByb3BlcnR5KCJsYXlv
dXREaXJlY3Rpb24iKS50b0ludCgpKTsKKyAgICB9CisKKyAgICBTdHlsZVBhaW50ZXI6OmluaXQo
Y29udGV4dCk7Cit9CisKK1Bhc3NSZWZQdHI8UmVuZGVyVGhlbWU+IFJlbmRlclRoZW1lUVN0eWxl
OjpjcmVhdGUoUGFnZSogcGFnZSkKK3sKKyAgICByZXR1cm4gYWRvcHRSZWYobmV3IFJlbmRlclRo
ZW1lUVN0eWxlKHBhZ2UpKTsKK30KKworc3RhdGljIFF0U3R5bGVGYWN0b3J5RnVuY3Rpb24gc3R5
bGVGYWN0b3J5RnVuY3Rpb247CisKK3ZvaWQgUmVuZGVyVGhlbWVRU3R5bGU6OnNldFN0eWxlRmFj
dG9yeUZ1bmN0aW9uKFF0U3R5bGVGYWN0b3J5RnVuY3Rpb24gZnVuY3Rpb24pCit7CisgICAgc3R5
bGVGYWN0b3J5RnVuY3Rpb24gPSBmdW5jdGlvbjsKK30KKworUXRTdHlsZUZhY3RvcnlGdW5jdGlv
biBSZW5kZXJUaGVtZVFTdHlsZTo6c3R5bGVGYWN0b3J5KCkKK3sKKyAgICByZXR1cm4gc3R5bGVG
YWN0b3J5RnVuY3Rpb247Cit9CisKK1JlbmRlclRoZW1lUVN0eWxlOjpSZW5kZXJUaGVtZVFTdHls
ZShQYWdlKiBwYWdlKQorICAgIDogUmVuZGVyVGhlbWVRdChwYWdlKQorICAgICwgbV9zdHlsZUlu
dGVyZmFjZShhZG9wdFB0cihzdHlsZUZhY3RvcnlGdW5jdGlvbihwYWdlKSkpCit7CisgICAgaW50
IGJ1dHRvblBpeGVsU2l6ZSA9IDA7CisgICAgbV9zdHlsZUludGVyZmFjZS0+Z2V0QnV0dG9uTWV0
cmljcygmbV9idXR0b25Gb250RmFtaWx5LCAmYnV0dG9uUGl4ZWxTaXplKTsKKyNpZmRlZiBRX1dT
X01BQworICAgIG1fYnV0dG9uRm9udFBpeGVsU2l6ZSA9IGJ1dHRvblBpeGVsU2l6ZTsKKyNlbmRp
ZgorfQorCitSZW5kZXJUaGVtZVFTdHlsZTo6flJlbmRlclRoZW1lUVN0eWxlKCkKK3sKK30KKwor
dm9pZCBSZW5kZXJUaGVtZVFTdHlsZTo6c2V0UGFsZXR0ZUZyb21QYWdlQ2xpZW50SWZFeGlzdHMo
UVBhbGV0dGUmIHBhbGV0dGUpIGNvbnN0Cit7CisgICAgaWYgKCFtX3BhZ2UpCisgICAgICAgIHJl
dHVybjsKKworICAgIEFTU0VSVChtX3BhZ2UtPmNocm9tZSgpKTsKKyAgICBDaHJvbWVDbGllbnQq
IGNocm9tZUNsaWVudCA9IG1fcGFnZS0+Y2hyb21lKCktPmNsaWVudCgpOworICAgIGlmICghY2hy
b21lQ2xpZW50KQorICAgICAgICByZXR1cm47CisKKyAgICBpZiAoUVdlYlBhZ2VDbGllbnQqIHBh
Z2VDbGllbnQgPSBjaHJvbWVDbGllbnQtPnBsYXRmb3JtUGFnZUNsaWVudCgpKQorICAgICAgICBw
YWxldHRlID0gcGFnZUNsaWVudC0+cGFsZXR0ZSgpOworfQorCitRUmVjdCBSZW5kZXJUaGVtZVFT
dHlsZTo6aW5mbGF0ZUJ1dHRvblJlY3QoY29uc3QgUVJlY3QmIG9yaWdpbmFsUmVjdCkgY29uc3QK
K3sKKyAgICBRUmVjdCBsYXlvdXRSZWN0ID0gbV9zdHlsZUludGVyZmFjZS0+YnV0dG9uU3ViRWxl
bWVudFJlY3QoUVN0eWxlSW50ZXJmYWNlOjpQdXNoQnV0dG9uTGF5b3V0SXRlbSwgUVN0eWxlSW50
ZXJmYWNlOjpTdGF0ZV9TbWFsbCwgb3JpZ2luYWxSZWN0KTsKKyAgICBpZiAoIWxheW91dFJlY3Qu
aXNOdWxsKCkpIHsKKyAgICAgICAgaW50IHBhZGRpbmdMZWZ0ID0gbGF5b3V0UmVjdC5sZWZ0KCkg
LSBvcmlnaW5hbFJlY3QubGVmdCgpOworICAgICAgICBpbnQgcGFkZGluZ1JpZ2h0ID0gb3JpZ2lu
YWxSZWN0LnJpZ2h0KCkgLSBsYXlvdXRSZWN0LnJpZ2h0KCk7CisgICAgICAgIGludCBwYWRkaW5n
VG9wID0gbGF5b3V0UmVjdC50b3AoKSAtIG9yaWdpbmFsUmVjdC50b3AoKTsKKyAgICAgICAgaW50
IHBhZGRpbmdCb3R0b20gPSBvcmlnaW5hbFJlY3QuYm90dG9tKCkgLSBsYXlvdXRSZWN0LmJvdHRv
bSgpOworCisgICAgICAgIHJldHVybiBvcmlnaW5hbFJlY3QuYWRqdXN0ZWQoLXBhZGRpbmdMZWZ0
LCAtcGFkZGluZ1RvcCwgcGFkZGluZ1JpZ2h0LCBwYWRkaW5nQm90dG9tKTsKKyAgICB9CisgICAg
cmV0dXJuIG9yaWdpbmFsUmVjdDsKK30KKwordm9pZCBSZW5kZXJUaGVtZVFTdHlsZTo6Y29tcHV0
ZVNpemVCYXNlZE9uU3R5bGUoUmVuZGVyU3R5bGUqIHJlbmRlclN0eWxlKSBjb25zdAoreworICAg
IFFTaXplIHNpemUoMCwgMCk7CisgICAgY29uc3QgUUZvbnRNZXRyaWNzIGZtKHJlbmRlclN0eWxl
LT5mb250KCkuc3ludGhldGljRm9udCgpKTsKKworICAgIHN3aXRjaCAocmVuZGVyU3R5bGUtPmFw
cGVhcmFuY2UoKSkgeworICAgIGNhc2UgVGV4dEFyZWFQYXJ0OgorICAgIGNhc2UgU2VhcmNoRmll
bGRQYXJ0OgorICAgIGNhc2UgVGV4dEZpZWxkUGFydDogeworICAgICAgICBpbnQgcGFkZGluZyA9
IG1fc3R5bGVJbnRlcmZhY2UtPmZpbmRGcmFtZUxpbmVXaWR0aCgpOworICAgICAgICByZW5kZXJT
dHlsZS0+c2V0UGFkZGluZ0xlZnQoTGVuZ3RoKHBhZGRpbmcsIEZpeGVkKSk7CisgICAgICAgIHJl
bmRlclN0eWxlLT5zZXRQYWRkaW5nUmlnaHQoTGVuZ3RoKHBhZGRpbmcsIEZpeGVkKSk7CisgICAg
ICAgIHJlbmRlclN0eWxlLT5zZXRQYWRkaW5nVG9wKExlbmd0aChwYWRkaW5nLCBGaXhlZCkpOwor
ICAgICAgICByZW5kZXJTdHlsZS0+c2V0UGFkZGluZ0JvdHRvbShMZW5ndGgocGFkZGluZywgRml4
ZWQpKTsKKyAgICAgICAgYnJlYWs7CisgICAgfQorICAgIGRlZmF1bHQ6CisgICAgICAgIGJyZWFr
OworICAgIH0KKyAgICAvLyBJZiB0aGUgd2lkdGggYW5kIGhlaWdodCBhcmUgYm90aCBzcGVjaWZp
ZWQsIHRoZW4gd2UgaGF2ZSBub3RoaW5nIHRvIGRvLgorICAgIGlmICghcmVuZGVyU3R5bGUtPndp
ZHRoKCkuaXNJbnRyaW5zaWNPckF1dG8oKSAmJiAhcmVuZGVyU3R5bGUtPmhlaWdodCgpLmlzQXV0
bygpKQorICAgICAgICByZXR1cm47CisKKyAgICBzd2l0Y2ggKHJlbmRlclN0eWxlLT5hcHBlYXJh
bmNlKCkpIHsKKyAgICBjYXNlIENoZWNrYm94UGFydDogeworICAgICAgICBpbnQgY2hlY2tCb3hX
aWR0aCA9IG1fc3R5bGVJbnRlcmZhY2UtPnNpbXBsZVBpeGVsTWV0cmljKFFTdHlsZUludGVyZmFj
ZTo6UE1fSW5kaWNhdG9yV2lkdGgsIFFTdHlsZUludGVyZmFjZTo6U3RhdGVfU21hbGwpOworICAg
ICAgICBjaGVja0JveFdpZHRoICo9IHJlbmRlclN0eWxlLT5lZmZlY3RpdmVab29tKCk7CisgICAg
ICAgIHNpemUgPSBRU2l6ZShjaGVja0JveFdpZHRoLCBjaGVja0JveFdpZHRoKTsKKyAgICAgICAg
YnJlYWs7CisgICAgfQorICAgIGNhc2UgUmFkaW9QYXJ0OiB7CisgICAgICAgIGludCByYWRpb1dp
ZHRoID0gbV9zdHlsZUludGVyZmFjZS0+c2ltcGxlUGl4ZWxNZXRyaWMoUVN0eWxlSW50ZXJmYWNl
OjpQTV9FeGNsdXNpdmVJbmRpY2F0b3JXaWR0aCwgUVN0eWxlSW50ZXJmYWNlOjpTdGF0ZV9TbWFs
bCk7CisgICAgICAgIHJhZGlvV2lkdGggKj0gcmVuZGVyU3R5bGUtPmVmZmVjdGl2ZVpvb20oKTsK
KyAgICAgICAgc2l6ZSA9IFFTaXplKHJhZGlvV2lkdGgsIHJhZGlvV2lkdGgpOworICAgICAgICBi
cmVhazsKKyAgICB9CisgICAgY2FzZSBQdXNoQnV0dG9uUGFydDoKKyAgICBjYXNlIEJ1dHRvblBh
cnQ6IHsKKyAgICAgICAgUVNpemUgY29udGVudFNpemUgPSBmbS5zaXplKFF0OjpUZXh0U2hvd01u
ZW1vbmljLCBRU3RyaW5nOjpmcm9tTGF0aW4xKCJYIikpOworICAgICAgICBRU2l6ZSBwdXNoQnV0
dG9uU2l6ZSA9IG1fc3R5bGVJbnRlcmZhY2UtPnNpemVGcm9tQ29udGVudHMoUVN0eWxlSW50ZXJm
YWNlOjpDVF9QdXNoQnV0dG9uLCBRU3R5bGVJbnRlcmZhY2U6OlN0YXRlX1NtYWxsLCBjb250ZW50
U2l6ZSk7CisgICAgICAgIFFSZWN0IGxheW91dFJlY3QgPSBtX3N0eWxlSW50ZXJmYWNlLT5idXR0
b25TdWJFbGVtZW50UmVjdChRU3R5bGVJbnRlcmZhY2U6OlB1c2hCdXR0b25MYXlvdXRJdGVtLCBR
U3R5bGVJbnRlcmZhY2U6OlN0YXRlX1NtYWxsLCBRUmVjdCgwLCAwLCBwdXNoQnV0dG9uU2l6ZS53
aWR0aCgpLCBwdXNoQnV0dG9uU2l6ZS5oZWlnaHQoKSkpOworCisgICAgICAgIC8vIElmIHRoZSBz
dHlsZSBzdXBwb3J0cyBsYXlvdXQgcmVjdHMgd2UgdXNlIHRoYXQsIGFuZCAgY29tcGVuc2F0ZSBh
Y2NvcmRpbmdseQorICAgICAgICAvLyBpbiBwYWludEJ1dHRvbigpIGJlbG93LgorICAgICAgICBp
ZiAoIWxheW91dFJlY3QuaXNOdWxsKCkpCisgICAgICAgICAgICBzaXplLnNldEhlaWdodChsYXlv
dXRSZWN0LmhlaWdodCgpKTsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgc2l6ZS5zZXRIZWln
aHQocHVzaEJ1dHRvblNpemUuaGVpZ2h0KCkpOworCisgICAgICAgIGJyZWFrOworICAgIH0KKyAg
ICBjYXNlIE1lbnVsaXN0UGFydDogeworICAgICAgICBpbnQgY29udGVudEhlaWdodCA9IHFNYXgo
Zm0ubGluZVNwYWNpbmcoKSwgMTQpICsgMjsKKyAgICAgICAgUVNpemUgbWVudUxpc3RTaXplID0g
bV9zdHlsZUludGVyZmFjZS0+c2l6ZUZyb21Db250ZW50cyhRU3R5bGVJbnRlcmZhY2U6OkNUX0Nv
bWJvQm94LCBRU3R5bGVJbnRlcmZhY2U6OlN0YXRlX1NtYWxsLCBRU2l6ZSgwLCBjb250ZW50SGVp
Z2h0KSk7CisgICAgICAgIHNpemUuc2V0SGVpZ2h0KG1lbnVMaXN0U2l6ZS5oZWlnaHQoKSk7Cisg
ICAgICAgIGJyZWFrOworICAgIH0KKyAgICBkZWZhdWx0OgorICAgICAgICBicmVhazsKKyAgICB9
CisKKyAgICAvLyBGSVhNRTogQ2hlY2sgaXMgZmxhd2VkLCBzaW5jZSBpdCBkb2Vzbid0IHRha2Ug
bWluLXdpZHRoL21heC13aWR0aCBpbnRvIGFjY291bnQuCisgICAgaWYgKHJlbmRlclN0eWxlLT53
aWR0aCgpLmlzSW50cmluc2ljT3JBdXRvKCkgJiYgc2l6ZS53aWR0aCgpID4gMCkKKyAgICAgICAg
cmVuZGVyU3R5bGUtPnNldE1pbldpZHRoKExlbmd0aChzaXplLndpZHRoKCksIEZpeGVkKSk7Cisg
ICAgaWYgKHJlbmRlclN0eWxlLT5oZWlnaHQoKS5pc0F1dG8oKSAmJiBzaXplLmhlaWdodCgpID4g
MCkKKyAgICAgICAgcmVuZGVyU3R5bGUtPnNldE1pbkhlaWdodChMZW5ndGgoc2l6ZS5oZWlnaHQo
KSwgRml4ZWQpKTsKK30KKworCisKK3ZvaWQgUmVuZGVyVGhlbWVRU3R5bGU6OmFkanVzdEJ1dHRv
blN0eWxlKFN0eWxlUmVzb2x2ZXIqIHN0eWxlUmVzb2x2ZXIsIFJlbmRlclN0eWxlKiBzdHlsZSwg
RWxlbWVudCopIGNvbnN0Cit7CisgICAgLy8gRGl0Y2ggdGhlIGJvcmRlci4KKyAgICBzdHlsZS0+
cmVzZXRCb3JkZXIoKTsKKworI2lmZGVmIFFfV1NfTUFDCisgICAgaWYgKHN0eWxlLT5hcHBlYXJh
bmNlKCkgPT0gUHVzaEJ1dHRvblBhcnQpIHsKKyAgICAgICAgLy8gVGhlIE1hYyBwb3J0cyBpZ25v
cmUgdGhlIHNwZWNpZmllZCBoZWlnaHQgZm9yIDxpbnB1dCB0eXBlPSJidXR0b24iPiBlbGVtZW50
cworICAgICAgICAvLyB1bmxlc3MgYSBib3JkZXIgYW5kL29yIGJhY2tncm91bmQgQ1NTIHByb3Bl
cnR5IGlzIGFsc28gc3BlY2lmaWVkLgorICAgICAgICBzdHlsZS0+c2V0SGVpZ2h0KExlbmd0aChB
dXRvKSk7CisgICAgfQorI2VuZGlmCisKKyAgICBGb250RGVzY3JpcHRpb24gZm9udERlc2NyaXB0
aW9uID0gc3R5bGUtPmZvbnREZXNjcmlwdGlvbigpOworICAgIGZvbnREZXNjcmlwdGlvbi5zZXRJ
c0Fic29sdXRlU2l6ZSh0cnVlKTsKKworI2lmZGVmIFFfV1NfTUFDIC8vIFVzZSBmaXhlZCBmb250
IHNpemUgYW5kIGZhbWlseSBvbiBNYWMgKGxpa2UgU2FmYXJpIGRvZXMpCisgICAgZm9udERlc2Ny
aXB0aW9uLnNldFNwZWNpZmllZFNpemUobV9idXR0b25Gb250UGl4ZWxTaXplKTsKKyAgICBmb250
RGVzY3JpcHRpb24uc2V0Q29tcHV0ZWRTaXplKG1fYnV0dG9uRm9udFBpeGVsU2l6ZSk7CisjZWxz
ZQorICAgIGZvbnREZXNjcmlwdGlvbi5zZXRTcGVjaWZpZWRTaXplKHN0eWxlLT5mb250U2l6ZSgp
KTsKKyAgICBmb250RGVzY3JpcHRpb24uc2V0Q29tcHV0ZWRTaXplKHN0eWxlLT5mb250U2l6ZSgp
KTsKKyNlbmRpZgorCisgICAgRm9udEZhbWlseSBmb250RmFtaWx5OworICAgIGZvbnRGYW1pbHku
c2V0RmFtaWx5KG1fYnV0dG9uRm9udEZhbWlseSk7CisgICAgZm9udERlc2NyaXB0aW9uLnNldEZh
bWlseShmb250RmFtaWx5KTsKKyAgICBzdHlsZS0+c2V0Rm9udERlc2NyaXB0aW9uKGZvbnREZXNj
cmlwdGlvbik7CisgICAgc3R5bGUtPmZvbnQoKS51cGRhdGUoc3R5bGVSZXNvbHZlci0+Zm9udFNl
bGVjdG9yKCkpOworICAgIHN0eWxlLT5zZXRMaW5lSGVpZ2h0KFJlbmRlclN0eWxlOjppbml0aWFs
TGluZUhlaWdodCgpKTsKKyAgICBzZXRCdXR0b25TaXplKHN0eWxlKTsKKyAgICBzZXRCdXR0b25Q
YWRkaW5nKHN0eWxlKTsKK30KKwordm9pZCBSZW5kZXJUaGVtZVFTdHlsZTo6c2V0QnV0dG9uUGFk
ZGluZyhSZW5kZXJTdHlsZSogc3R5bGUpIGNvbnN0Cit7CisgICAgLy8gRmFrZSBhIGJ1dHRvbiBy
ZWN0IGhlcmUsIHNpbmNlIHdlJ3JlIGp1c3QgY29tcHV0aW5nIGRlbHRhcworICAgIFFSZWN0IG9y
aWdpbmFsUmVjdCA9IFFSZWN0KDAsIDAsIDEwMCwgMzApOworCisgICAgLy8gRGVmYXVsdCBwYWRk
aW5nIGlzIGJhc2VkIG9uIHRoZSBidXR0b24gbWFyZ2luIHBpeGVsIG1ldHJpYworICAgIGludCBi
dXR0b25NYXJnaW4gPSBtX3N0eWxlSW50ZXJmYWNlLT5idXR0b25NYXJnaW4oUVN0eWxlSW50ZXJm
YWNlOjpTdGF0ZV9TbWFsbCwgb3JpZ2luYWxSZWN0KTsKKyAgICBpbnQgcGFkZGluZ0xlZnQgPSBi
dXR0b25NYXJnaW47CisgICAgaW50IHBhZGRpbmdSaWdodCA9IGJ1dHRvbk1hcmdpbjsKKyAgICBp
bnQgcGFkZGluZ1RvcCA9IGJ1dHRvbk1hcmdpbjsKKyAgICBpbnQgcGFkZGluZ0JvdHRvbSA9IGJ1
dHRvbk1hcmdpbjsKKworICAgIC8vIFRoZW4gY2hlY2sgaWYgdGhlIHN0eWxlIHVzZXMgbGF5b3V0
IG1hcmdpbnMKKyAgICBRUmVjdCBsYXlvdXRSZWN0ID0gbV9zdHlsZUludGVyZmFjZS0+YnV0dG9u
U3ViRWxlbWVudFJlY3QoUVN0eWxlSW50ZXJmYWNlOjpQdXNoQnV0dG9uTGF5b3V0SXRlbSwgUVN0
eWxlSW50ZXJmYWNlOjpTdGF0ZV9TbWFsbCwgb3JpZ2luYWxSZWN0KTsKKyAgICBpZiAoIWxheW91
dFJlY3QuaXNOdWxsKCkpIHsKKyAgICAgICAgUVJlY3QgY29udGVudHNSZWN0ID0gbV9zdHlsZUlu
dGVyZmFjZS0+YnV0dG9uU3ViRWxlbWVudFJlY3QoUVN0eWxlSW50ZXJmYWNlOjpQdXNoQnV0dG9u
Q29udGVudHMsIFFTdHlsZUludGVyZmFjZTo6U3RhdGVfU21hbGwsIG9yaWdpbmFsUmVjdCk7Cisg
ICAgICAgIHBhZGRpbmdMZWZ0ID0gY29udGVudHNSZWN0LmxlZnQoKSAtIGxheW91dFJlY3QubGVm
dCgpOworICAgICAgICBwYWRkaW5nUmlnaHQgPSBsYXlvdXRSZWN0LnJpZ2h0KCkgLSBjb250ZW50
c1JlY3QucmlnaHQoKTsKKyAgICAgICAgcGFkZGluZ1RvcCA9IGNvbnRlbnRzUmVjdC50b3AoKSAt
IGxheW91dFJlY3QudG9wKCk7CisKKyAgICAgICAgLy8gQ2FuJ3QgdXNlIHRoaXMgcmlnaHQgbm93
IGJlY2F1c2Ugd2UgZG9uJ3QgaGF2ZSB0aGUgYmFzZWxpbmUgdG8gY29tcGVuc2F0ZQorICAgICAg
ICAvLyBwYWRkaW5nQm90dG9tID0gbGF5b3V0UmVjdC5ib3R0b20oKSAtIGNvbnRlbnRzUmVjdC5i
b3R0b20oKTsKKyAgICB9CisgICAgc3R5bGUtPnNldFBhZGRpbmdMZWZ0KExlbmd0aChwYWRkaW5n
TGVmdCwgRml4ZWQpKTsKKyAgICBzdHlsZS0+c2V0UGFkZGluZ1JpZ2h0KExlbmd0aChwYWRkaW5n
UmlnaHQsIEZpeGVkKSk7CisgICAgc3R5bGUtPnNldFBhZGRpbmdUb3AoTGVuZ3RoKHBhZGRpbmdU
b3AsIEZpeGVkKSk7CisgICAgc3R5bGUtPnNldFBhZGRpbmdCb3R0b20oTGVuZ3RoKHBhZGRpbmdC
b3R0b20sIEZpeGVkKSk7Cit9CisKK2Jvb2wgUmVuZGVyVGhlbWVRU3R5bGU6OnBhaW50QnV0dG9u
KFJlbmRlck9iamVjdCogbywgY29uc3QgUGFpbnRJbmZvJiBpLCBjb25zdCBJbnRSZWN0JiByKQor
eworICAgIFN0eWxlUGFpbnRlclFTdHlsZSBwKHRoaXMsIGksIG8pOworICAgIGlmICghcC5pc1Zh
bGlkKCkpCisgICAgICAgIHJldHVybiB0cnVlOworCisgICAgcC5zdHlsZU9wdGlvbi5yZWN0ID0g
cjsKKyAgICBwLnN0eWxlT3B0aW9uLnN0YXRlIHw9IFFTdHlsZUludGVyZmFjZTo6U3RhdGVfU21h
bGw7CisKKyAgICBpZiAocC5hcHBlYXJhbmNlID09IFB1c2hCdXR0b25QYXJ0IHx8IHAuYXBwZWFy
YW5jZSA9PSBCdXR0b25QYXJ0KSB7CisgICAgICAgIHAuc3R5bGVPcHRpb24ucmVjdCA9IGluZmxh
dGVCdXR0b25SZWN0KHAuc3R5bGVPcHRpb24ucmVjdCk7CisgICAgICAgIHAucGFpbnRCdXR0b24o
UVN0eWxlSW50ZXJmYWNlOjpQdXNoQnV0dG9uKTsKKyAgICB9IGVsc2UgaWYgKHAuYXBwZWFyYW5j
ZSA9PSBSYWRpb1BhcnQpCisgICAgICAgIHAucGFpbnRCdXR0b24oUVN0eWxlSW50ZXJmYWNlOjpS
YWRpb0J1dHRvbik7CisgICAgZWxzZSBpZiAocC5hcHBlYXJhbmNlID09IENoZWNrYm94UGFydCkK
KyAgICAgICAgcC5wYWludEJ1dHRvbihRU3R5bGVJbnRlcmZhY2U6OkNoZWNrQm94KTsKKworICAg
IHJldHVybiBmYWxzZTsKK30KKworYm9vbCBSZW5kZXJUaGVtZVFTdHlsZTo6cGFpbnRUZXh0Rmll
bGQoUmVuZGVyT2JqZWN0KiBvLCBjb25zdCBQYWludEluZm8mIGksIGNvbnN0IEludFJlY3QmIHIp
Cit7CisgICAgU3R5bGVQYWludGVyUVN0eWxlIHAodGhpcywgaSwgbyk7CisgICAgaWYgKCFwLmlz
VmFsaWQoKSkKKyAgICAgICAgcmV0dXJuIHRydWU7CisKKyAgICBwLnN0eWxlT3B0aW9uLnJlY3Qg
PSByOworICAgIHAuc3R5bGVPcHRpb24uc3RhdGUgfD0gUVN0eWxlSW50ZXJmYWNlOjpTdGF0ZV9T
dW5rZW47CisKKyAgICAvLyBHZXQgdGhlIGNvcnJlY3QgdGhlbWUgZGF0YSBmb3IgYSB0ZXh0IGZp
ZWxkCisgICAgaWYgKHAuYXBwZWFyYW5jZSAhPSBUZXh0RmllbGRQYXJ0CisgICAgICAgICYmIHAu
YXBwZWFyYW5jZSAhPSBTZWFyY2hGaWVsZFBhcnQKKyAgICAgICAgJiYgcC5hcHBlYXJhbmNlICE9
IFRleHRBcmVhUGFydAorICAgICAgICAmJiBwLmFwcGVhcmFuY2UgIT0gTGlzdGJveFBhcnQpCisg
ICAgICAgIHJldHVybiB0cnVlOworCisgICAgLy8gTm93IHBhaW50IHRoZSB0ZXh0IGZpZWxkLgor
ICAgIHAucGFpbnRUZXh0RmllbGQoKTsKKyAgICByZXR1cm4gZmFsc2U7Cit9CisKK3ZvaWQgUmVu
ZGVyVGhlbWVRU3R5bGU6OmFkanVzdFRleHRBcmVhU3R5bGUoU3R5bGVSZXNvbHZlciogc3R5bGVS
ZXNvbHZlciwgUmVuZGVyU3R5bGUqIHN0eWxlLCBFbGVtZW50KiBlbGVtZW50KSBjb25zdAorewor
ICAgIGFkanVzdFRleHRGaWVsZFN0eWxlKHN0eWxlUmVzb2x2ZXIsIHN0eWxlLCBlbGVtZW50KTsK
K30KKworYm9vbCBSZW5kZXJUaGVtZVFTdHlsZTo6cGFpbnRUZXh0QXJlYShSZW5kZXJPYmplY3Qq
IG8sIGNvbnN0IFBhaW50SW5mbyYgaSwgY29uc3QgSW50UmVjdCYgcikKK3sKKyAgICByZXR1cm4g
cGFpbnRUZXh0RmllbGQobywgaSwgcik7Cit9CisKK3ZvaWQgUmVuZGVyVGhlbWVRU3R5bGU6OnNl
dFBvcHVwUGFkZGluZyhSZW5kZXJTdHlsZSogc3R5bGUpIGNvbnN0Cit7CisgICAgY29uc3QgaW50
IHBhZGRpbmdMZWZ0ID0gNDsKKyAgICBjb25zdCBpbnQgcGFkZGluZ1JpZ2h0ID0gc3R5bGUtPndp
ZHRoKCkuaXNGaXhlZCgpIHx8IHN0eWxlLT53aWR0aCgpLmlzUGVyY2VudCgpID8gNSA6IDg7CisK
KyAgICBzdHlsZS0+c2V0UGFkZGluZ0xlZnQoTGVuZ3RoKHBhZGRpbmdMZWZ0LCBGaXhlZCkpOwor
CisgICAgaW50IHcgPSBtX3N0eWxlSW50ZXJmYWNlLT5zaW1wbGVQaXhlbE1ldHJpYyhRU3R5bGVJ
bnRlcmZhY2U6OlBNX0J1dHRvbkljb25TaXplKTsKKyAgICBzdHlsZS0+c2V0UGFkZGluZ1JpZ2h0
KExlbmd0aChwYWRkaW5nUmlnaHQgKyB3LCBGaXhlZCkpOworCisgICAgc3R5bGUtPnNldFBhZGRp
bmdUb3AoTGVuZ3RoKDIsIEZpeGVkKSk7CisgICAgc3R5bGUtPnNldFBhZGRpbmdCb3R0b20oTGVu
Z3RoKDIsIEZpeGVkKSk7Cit9CisKK1FQYWxldHRlIFJlbmRlclRoZW1lUVN0eWxlOjpjb2xvclBh
bGV0dGUoKSBjb25zdAoreworICAgIFFQYWxldHRlIHBhbGV0dGUgPSBSZW5kZXJUaGVtZVF0Ojpj
b2xvclBhbGV0dGUoKTsKKyAgICBzZXRQYWxldHRlRnJvbVBhZ2VDbGllbnRJZkV4aXN0cyhwYWxl
dHRlKTsKKyAgICByZXR1cm4gcGFsZXR0ZTsKK30KKworYm9vbCBSZW5kZXJUaGVtZVFTdHlsZTo6
cGFpbnRNZW51TGlzdChSZW5kZXJPYmplY3QqIG8sIGNvbnN0IFBhaW50SW5mbyYgaSwgY29uc3Qg
SW50UmVjdCYgcikKK3sKKyAgICBTdHlsZVBhaW50ZXJRU3R5bGUgcCh0aGlzLCBpLCBvKTsKKyAg
ICBpZiAoIXAuaXNWYWxpZCgpKQorICAgICAgICByZXR1cm4gdHJ1ZTsKKworICAgIHAuc3R5bGVP
cHRpb24ucmVjdCA9IHI7CisgICAgcC5wYWludENvbWJvQm94KCk7CisgICAgcmV0dXJuIGZhbHNl
OworfQorCit2b2lkIFJlbmRlclRoZW1lUVN0eWxlOjphZGp1c3RNZW51TGlzdEJ1dHRvblN0eWxl
KFN0eWxlUmVzb2x2ZXIqIHN0eWxlUmVzb2x2ZXIsIFJlbmRlclN0eWxlKiBzdHlsZSwgRWxlbWVu
dCogZSkgY29uc3QKK3sKKyAgICAvLyBXT1JLQVJPVU5EIGJlY2F1c2UgaHRtbC5jc3Mgc3BlY2lm
aWVzIC13ZWJraXQtYm9yZGVyLXJhZGl1cyBmb3IgPHNlbGVjdD4gc28gd2Ugb3ZlcnJpZGUgaXQg
aGVyZQorICAgIC8vIHNlZSBhbHNvIGh0dHA6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dp
P2lkPTE4Mzk5CisgICAgc3R5bGUtPnJlc2V0Qm9yZGVyUmFkaXVzKCk7CisKKyAgICBSZW5kZXJU
aGVtZVF0OjphZGp1c3RNZW51TGlzdEJ1dHRvblN0eWxlKHN0eWxlUmVzb2x2ZXIsIHN0eWxlLCBl
KTsKK30KKworYm9vbCBSZW5kZXJUaGVtZVFTdHlsZTo6cGFpbnRNZW51TGlzdEJ1dHRvbihSZW5k
ZXJPYmplY3QqIG8sIGNvbnN0IFBhaW50SW5mbyYgaSwgY29uc3QgSW50UmVjdCYgcikKK3sKKyAg
ICBTdHlsZVBhaW50ZXJRU3R5bGUgcCh0aGlzLCBpLCBvKTsKKyAgICBpZiAoIXAuaXNWYWxpZCgp
KQorICAgICAgICByZXR1cm4gdHJ1ZTsKKworICAgIHAuc3R5bGVPcHRpb24ucmVjdCA9IHI7Cisg
ICAgcC5wYWludENvbWJvQm94QXJyb3coKTsKKyAgICByZXR1cm4gZmFsc2U7Cit9CisKKyNpZiBF
TkFCTEUoUFJPR1JFU1NfRUxFTUVOVCkKK2RvdWJsZSBSZW5kZXJUaGVtZVFTdHlsZTo6YW5pbWF0
aW9uRHVyYXRpb25Gb3JQcm9ncmVzc0JhcihSZW5kZXJQcm9ncmVzcyogcmVuZGVyUHJvZ3Jlc3Mp
IGNvbnN0Cit7CisgICAgaWYgKHJlbmRlclByb2dyZXNzLT5wb3NpdGlvbigpID49IDApCisgICAg
ICAgIHJldHVybiAwOworCisgICAgSW50U2l6ZSBzaXplID0gcmVuZGVyUHJvZ3Jlc3MtPnBpeGVs
U25hcHBlZFNpemUoKTsKKyAgICAvLyBGSVhNRTogVW50aWwgaHR0cDovL2J1Z3JlcG9ydHMucXQu
bm9raWEuY29tL2Jyb3dzZS9RVEJVRy05MTcxIGlzIGZpeGVkLAorICAgIC8vIHdlIHNpbXVsYXRl
IG9uZSBzcXVhcmUgYW5pbWF0aW5nIGFjcm9zcyB0aGUgcHJvZ3Jlc3MgYmFyLgorICAgIHJldHVy
biAoc2l6ZS53aWR0aCgpIC8gbV9zdHlsZUludGVyZmFjZS0+cHJvZ3Jlc3NCYXJDaHVua1dpZHRo
KHNpemUpKSAqIGFuaW1hdGlvblJlcGVhdEludGVydmFsRm9yUHJvZ3Jlc3NCYXIocmVuZGVyUHJv
Z3Jlc3MpOworfQorCitib29sIFJlbmRlclRoZW1lUVN0eWxlOjpwYWludFByb2dyZXNzQmFyKFJl
bmRlck9iamVjdCogbywgY29uc3QgUGFpbnRJbmZvJiBwaSwgY29uc3QgSW50UmVjdCYgcikKK3sK
KyAgICBpZiAoIW8tPmlzUHJvZ3Jlc3MoKSkKKyAgICAgICAgcmV0dXJuIHRydWU7CisKKyAgICBT
dHlsZVBhaW50ZXJRU3R5bGUgcCh0aGlzLCBwaSwgbyk7CisgICAgaWYgKCFwLmlzVmFsaWQoKSkK
KyAgICAgICAgcmV0dXJuIHRydWU7CisKKyAgICBwLnN0eWxlT3B0aW9uLnJlY3QgPSByOworICAg
IFJlbmRlclByb2dyZXNzKiByZW5kZXJQcm9ncmVzcyA9IHRvUmVuZGVyUHJvZ3Jlc3Mobyk7Cisg
ICAgcC5wYWludFByb2dyZXNzQmFyKHJlbmRlclByb2dyZXNzLT5wb3NpdGlvbigpLCByZW5kZXJQ
cm9ncmVzcy0+YW5pbWF0aW9uUHJvZ3Jlc3MoKSk7CisgICAgcmV0dXJuIGZhbHNlOworfQorI2Vu
ZGlmCisKK2Jvb2wgUmVuZGVyVGhlbWVRU3R5bGU6OnBhaW50U2xpZGVyVHJhY2soUmVuZGVyT2Jq
ZWN0KiBvLCBjb25zdCBQYWludEluZm8mIHBpLCBjb25zdCBJbnRSZWN0JiByKQoreworICAgIFN0
eWxlUGFpbnRlclFTdHlsZSBwKHRoaXMsIHBpLCBvKTsKKyAgICBpZiAoIXAuaXNWYWxpZCgpKQor
ICAgICAgICByZXR1cm4gdHJ1ZTsKKworICAgIGNvbnN0IFFQb2ludCB0b3BMZWZ0ID0gci5sb2Nh
dGlvbigpOworICAgIHAucGFpbnRlci0+dHJhbnNsYXRlKHRvcExlZnQpOworCisgICAgcC5zdHls
ZU9wdGlvbi5yZWN0ID0gcjsKKyAgICBwLnN0eWxlT3B0aW9uLnJlY3QubW92ZVRvKFFQb2ludCgw
LCAwKSk7CisKKyAgICBpZiAocC5hcHBlYXJhbmNlID09IFNsaWRlclZlcnRpY2FsUGFydCkKKyAg
ICAgICAgcC5zdHlsZU9wdGlvbi5zbGlkZXIub3JpZW50YXRpb24gPSBRdDo6VmVydGljYWw7CisK
KyAgICBpZiAoaXNQcmVzc2VkKG8pKQorICAgICAgICBwLnN0eWxlT3B0aW9uLnN0YXRlIHw9IFFT
dHlsZUludGVyZmFjZTo6U3RhdGVfU3Vua2VuOworCisgICAgLy8gc29tZSBzdHlsZXMgbmVlZCB0
aGlzIHRvIHNob3cgYSBoaWdobGlnaHQgb24gb25lIHNpZGUgb2YgdGhlIGdyb292ZQorICAgIEhU
TUxJbnB1dEVsZW1lbnQqIHNsaWRlciA9IG8tPm5vZGUoKS0+dG9JbnB1dEVsZW1lbnQoKTsKKyAg
ICBpZiAoc2xpZGVyKSB7CisgICAgICAgIHAuc3R5bGVPcHRpb24uc2xpZGVyLnVwc2lkZURvd24g
PSAocC5hcHBlYXJhbmNlID09IFNsaWRlckhvcml6b250YWxQYXJ0KSAmJiAhby0+c3R5bGUoKS0+
aXNMZWZ0VG9SaWdodERpcmVjdGlvbigpOworICAgICAgICAvLyBVc2UgdGhlIHdpZHRoIGFzIGEg
bXVsdGlwbGllciBpbiBjYXNlIHRoZSBzbGlkZXIgdmFsdWVzIGFyZSA8PSAxCisgICAgICAgIGNv
bnN0IGludCB3aWR0aCA9IHIud2lkdGgoKSA+IDAgPyByLndpZHRoKCkgOiAxMDA7CisgICAgICAg
IHAuc3R5bGVPcHRpb24uc2xpZGVyLm1heGltdW0gPSBzbGlkZXItPm1heGltdW0oKSAqIHdpZHRo
OworICAgICAgICBwLnN0eWxlT3B0aW9uLnNsaWRlci5taW5pbXVtID0gc2xpZGVyLT5taW5pbXVt
KCkgKiB3aWR0aDsKKyAgICAgICAgaWYgKCFwLnN0eWxlT3B0aW9uLnNsaWRlci51cHNpZGVEb3du
KQorICAgICAgICAgICAgcC5zdHlsZU9wdGlvbi5zbGlkZXIucG9zaXRpb24gPSBzbGlkZXItPnZh
bHVlQXNOdW1iZXIoKSAqIHdpZHRoOworICAgICAgICBlbHNlCisgICAgICAgICAgICBwLnN0eWxl
T3B0aW9uLnNsaWRlci5wb3NpdGlvbiA9IHAuc3R5bGVPcHRpb24uc2xpZGVyLm1pbmltdW0gKyBw
LnN0eWxlT3B0aW9uLnNsaWRlci5tYXhpbXVtIC0gc2xpZGVyLT52YWx1ZUFzTnVtYmVyKCkgKiB3
aWR0aDsKKyAgICB9CisKKyAgICBwLnBhaW50U2xpZGVyVHJhY2soKTsKKworICAgIHAucGFpbnRl
ci0+dHJhbnNsYXRlKC10b3BMZWZ0KTsKKyAgICByZXR1cm4gZmFsc2U7Cit9CisKK3ZvaWQgUmVu
ZGVyVGhlbWVRU3R5bGU6OmFkanVzdFNsaWRlclRyYWNrU3R5bGUoU3R5bGVSZXNvbHZlciosIFJl
bmRlclN0eWxlKiBzdHlsZSwgRWxlbWVudCopIGNvbnN0Cit7CisgICAgc3R5bGUtPnNldEJveFNo
YWRvdyhudWxscHRyKTsKK30KKworYm9vbCBSZW5kZXJUaGVtZVFTdHlsZTo6cGFpbnRTbGlkZXJU
aHVtYihSZW5kZXJPYmplY3QqIG8sIGNvbnN0IFBhaW50SW5mbyYgcGksIGNvbnN0IEludFJlY3Qm
IHIpCit7CisgICAgU3R5bGVQYWludGVyUVN0eWxlIHAodGhpcywgcGksIG8pOworICAgIGlmICgh
cC5pc1ZhbGlkKCkpCisgICAgICAgIHJldHVybiB0cnVlOworCisgICAgY29uc3QgUVBvaW50IHRv
cExlZnQgPSByLmxvY2F0aW9uKCk7CisgICAgcC5wYWludGVyLT50cmFuc2xhdGUodG9wTGVmdCk7
CisKKyAgICBwLnN0eWxlT3B0aW9uLnJlY3QgPSByOworICAgIHAuc3R5bGVPcHRpb24ucmVjdC5t
b3ZlVG8oUVBvaW50KDAsIDApKTsKKyAgICBwLnN0eWxlT3B0aW9uLnNsaWRlci5vcmllbnRhdGlv
biA9IFF0OjpIb3Jpem9udGFsOworICAgIGlmIChwLmFwcGVhcmFuY2UgPT0gU2xpZGVyVGh1bWJW
ZXJ0aWNhbFBhcnQpCisgICAgICAgIHAuc3R5bGVPcHRpb24uc2xpZGVyLm9yaWVudGF0aW9uID0g
UXQ6OlZlcnRpY2FsOworICAgIGlmIChpc1ByZXNzZWQobykpCisgICAgICAgIHAuc3R5bGVPcHRp
b24uc3RhdGUgfD0gUVN0eWxlSW50ZXJmYWNlOjpTdGF0ZV9TdW5rZW47CisKKyAgICBwLnBhaW50
U2xpZGVyVGh1bWIoKTsKKworICAgIHAucGFpbnRlci0+dHJhbnNsYXRlKC10b3BMZWZ0KTsKKyAg
ICByZXR1cm4gZmFsc2U7Cit9CisKK3ZvaWQgUmVuZGVyVGhlbWVRU3R5bGU6OmFkanVzdFNsaWRl
clRodW1iU3R5bGUoU3R5bGVSZXNvbHZlciogc3R5bGVSZXNvbHZlciwgUmVuZGVyU3R5bGUqIHN0
eWxlLCBFbGVtZW50KiBlbGVtZW50KSBjb25zdAoreworICAgIFJlbmRlclRoZW1lOjphZGp1c3RT
bGlkZXJUaHVtYlN0eWxlKHN0eWxlUmVzb2x2ZXIsIHN0eWxlLCBlbGVtZW50KTsKKyAgICBzdHls
ZS0+c2V0Qm94U2hhZG93KG51bGxwdHIpOworfQorCitib29sIFJlbmRlclRoZW1lUVN0eWxlOjpw
YWludFNlYXJjaEZpZWxkKFJlbmRlck9iamVjdCogbywgY29uc3QgUGFpbnRJbmZvJiBwaSwgY29u
c3QgSW50UmVjdCYgcikKK3sKKyAgICByZXR1cm4gcGFpbnRUZXh0RmllbGQobywgcGksIHIpOwor
fQorCit2b2lkIFJlbmRlclRoZW1lUVN0eWxlOjphZGp1c3RTZWFyY2hGaWVsZERlY29yYXRpb25T
dHlsZShTdHlsZVJlc29sdmVyKiBzdHlsZVJlc29sdmVyLCBSZW5kZXJTdHlsZSogc3R5bGUsIEVs
ZW1lbnQqIGUpIGNvbnN0Cit7CisgICAgbm90SW1wbGVtZW50ZWQoKTsKKyAgICBSZW5kZXJUaGVt
ZTo6YWRqdXN0U2VhcmNoRmllbGREZWNvcmF0aW9uU3R5bGUoc3R5bGVSZXNvbHZlciwgc3R5bGUs
IGUpOworfQorCitib29sIFJlbmRlclRoZW1lUVN0eWxlOjpwYWludFNlYXJjaEZpZWxkRGVjb3Jh
dGlvbihSZW5kZXJPYmplY3QqIG8sIGNvbnN0IFBhaW50SW5mbyYgcGksIGNvbnN0IEludFJlY3Qm
IHIpCit7CisgICAgbm90SW1wbGVtZW50ZWQoKTsKKyAgICByZXR1cm4gUmVuZGVyVGhlbWU6OnBh
aW50U2VhcmNoRmllbGREZWNvcmF0aW9uKG8sIHBpLCByKTsKK30KKwordm9pZCBSZW5kZXJUaGVt
ZVFTdHlsZTo6YWRqdXN0U2VhcmNoRmllbGRSZXN1bHRzRGVjb3JhdGlvblN0eWxlKFN0eWxlUmVz
b2x2ZXIqIHN0eWxlUmVzb2x2ZXIsIFJlbmRlclN0eWxlKiBzdHlsZSwgRWxlbWVudCogZSkgY29u
c3QKK3sKKyAgICBub3RJbXBsZW1lbnRlZCgpOworICAgIFJlbmRlclRoZW1lOjphZGp1c3RTZWFy
Y2hGaWVsZFJlc3VsdHNEZWNvcmF0aW9uU3R5bGUoc3R5bGVSZXNvbHZlciwgc3R5bGUsIGUpOwor
fQorCitib29sIFJlbmRlclRoZW1lUVN0eWxlOjpwYWludFNlYXJjaEZpZWxkUmVzdWx0c0RlY29y
YXRpb24oUmVuZGVyT2JqZWN0KiBvLCBjb25zdCBQYWludEluZm8mIHBpLCBjb25zdCBJbnRSZWN0
JiByKQoreworICAgIG5vdEltcGxlbWVudGVkKCk7CisgICAgcmV0dXJuIFJlbmRlclRoZW1lOjpw
YWludFNlYXJjaEZpZWxkUmVzdWx0c0RlY29yYXRpb24obywgcGksIHIpOworfQorCisjaWZuZGVm
IFFUX05PX1NQSU5CT1gKKworYm9vbCBSZW5kZXJUaGVtZVFTdHlsZTo6cGFpbnRJbm5lclNwaW5C
dXR0b24oUmVuZGVyT2JqZWN0KiBvLCBjb25zdCBQYWludEluZm8mIHBhaW50SW5mbywgY29uc3Qg
SW50UmVjdCYgcmVjdCkKK3sKKyAgICBTdHlsZVBhaW50ZXJRU3R5bGUgcCh0aGlzLCBwYWludElu
Zm8sIG8pOworICAgIGlmICghcC5pc1ZhbGlkKCkpCisgICAgICAgIHJldHVybiB0cnVlOworCisg
ICAgcC5zdHlsZU9wdGlvbi5yZWN0ID0gcmVjdDsKKyAgICBwLnBhaW50SW5uZXJTcGluQnV0dG9u
KGlzU3BpblVwQnV0dG9uUGFydFByZXNzZWQobykpOworICAgIHJldHVybiBmYWxzZTsKK30KKyNl
bmRpZgorCitDb250cm9sUGFydCBSZW5kZXJUaGVtZVFTdHlsZTo6aW5pdGlhbGl6ZUNvbW1vblFT
dHlsZU9wdGlvbnMoUVN0eWxlSW50ZXJmYWNlT3B0aW9uICZvcHRpb24sIFJlbmRlck9iamVjdCog
bykgY29uc3QKK3sKKyAgICAvLyBEZWZhdWx0IGJpdHM6IG5vIGZvY3VzLCBubyBtb3VzZSBvdmVy
CisgICAgb3B0aW9uLnN0YXRlICY9IH4oUVN0eWxlSW50ZXJmYWNlOjpTdGF0ZV9IYXNGb2N1cyB8
IFFTdHlsZUludGVyZmFjZTo6U3RhdGVfTW91c2VPdmVyKTsKKworICAgIGlmIChpc1JlYWRPbmx5
Q29udHJvbChvKSkKKyAgICAgICAgLy8gUmVhZG9ubHkgaXMgc3VwcG9ydGVkIG9uIHRleHRmaWVs
ZHMuCisgICAgICAgIG9wdGlvbi5zdGF0ZSB8PSBRU3R5bGVJbnRlcmZhY2U6OlN0YXRlX1JlYWRP
bmx5OworCisgICAgb3B0aW9uLmRpcmVjdGlvbiA9IFF0OjpMZWZ0VG9SaWdodDsKKworICAgIGlm
IChpc0hvdmVyZWQobykpCisgICAgICAgIG9wdGlvbi5zdGF0ZSB8PSBRU3R5bGVJbnRlcmZhY2U6
OlN0YXRlX01vdXNlT3ZlcjsKKworICAgIHNldFBhbGV0dGVGcm9tUGFnZUNsaWVudElmRXhpc3Rz
KG9wdGlvbi5wYWxldHRlKTsKKworICAgIGlmICghaXNFbmFibGVkKG8pKSB7CisgICAgICAgIG9w
dGlvbi5wYWxldHRlLnNldEN1cnJlbnRDb2xvckdyb3VwKFFQYWxldHRlOjpEaXNhYmxlZCk7Cisg
ICAgICAgIG9wdGlvbi5zdGF0ZSAmPSB+UVN0eWxlSW50ZXJmYWNlOjpTdGF0ZV9FbmFibGVkOwor
ICAgIH0KKworICAgIFJlbmRlclN0eWxlKiBzdHlsZSA9IG8tPnN0eWxlKCk7CisgICAgaWYgKCFz
dHlsZSkKKyAgICAgICAgcmV0dXJuIE5vQ29udHJvbFBhcnQ7CisKKyAgICBDb250cm9sUGFydCBy
ZXN1bHQgPSBzdHlsZS0+YXBwZWFyYW5jZSgpOworICAgIGlmIChzdXBwb3J0c0ZvY3VzKHJlc3Vs
dCkgJiYgaXNGb2N1c2VkKG8pKSB7CisgICAgICAgIG9wdGlvbi5zdGF0ZSB8PSBRU3R5bGVJbnRl
cmZhY2U6OlN0YXRlX0hhc0ZvY3VzOworICAgICAgICBvcHRpb24uc3RhdGUgfD0gUVN0eWxlSW50
ZXJmYWNlOjpTdGF0ZV9LZXlib2FyZEZvY3VzQ2hhbmdlOworICAgIH0KKworICAgIGlmIChzdHls
ZS0+ZGlyZWN0aW9uKCkgPT0gV2ViQ29yZTo6UlRMKQorICAgICAgICBvcHRpb24uZGlyZWN0aW9u
ID0gUXQ6OlJpZ2h0VG9MZWZ0OworCisgICAgc3dpdGNoIChyZXN1bHQpIHsKKyAgICBjYXNlIFB1
c2hCdXR0b25QYXJ0OgorICAgIGNhc2UgU3F1YXJlQnV0dG9uUGFydDoKKyAgICBjYXNlIEJ1dHRv
blBhcnQ6CisgICAgY2FzZSBCdXR0b25CZXZlbFBhcnQ6CisgICAgY2FzZSBMaXN0SXRlbVBhcnQ6
CisgICAgY2FzZSBNZW51bGlzdEJ1dHRvblBhcnQ6CisgICAgY2FzZSBJbm5lclNwaW5CdXR0b25Q
YXJ0OgorICAgIGNhc2UgU2VhcmNoRmllbGRSZXN1bHRzQnV0dG9uUGFydDoKKyAgICBjYXNlIFNl
YXJjaEZpZWxkQ2FuY2VsQnV0dG9uUGFydDogeworICAgICAgICBpZiAoaXNQcmVzc2VkKG8pKQor
ICAgICAgICAgICAgb3B0aW9uLnN0YXRlIHw9IFFTdHlsZUludGVyZmFjZTo6U3RhdGVfU3Vua2Vu
OworICAgICAgICBlbHNlIGlmIChyZXN1bHQgPT0gUHVzaEJ1dHRvblBhcnQgfHwgcmVzdWx0ID09
IEJ1dHRvblBhcnQpCisgICAgICAgICAgICBvcHRpb24uc3RhdGUgfD0gUVN0eWxlSW50ZXJmYWNl
OjpTdGF0ZV9SYWlzZWQ7CisgICAgICAgIGJyZWFrOworICAgIH0KKyAgICBjYXNlIFJhZGlvUGFy
dDoKKyAgICBjYXNlIENoZWNrYm94UGFydDoKKyAgICAgICAgb3B0aW9uLnN0YXRlIHw9IChpc0No
ZWNrZWQobykgPyBRU3R5bGVJbnRlcmZhY2U6OlN0YXRlX09uIDogUVN0eWxlSW50ZXJmYWNlOjpT
dGF0ZV9PZmYpOworICAgIH0KKworICAgIHJldHVybiByZXN1bHQ7Cit9CisKK3ZvaWQgUmVuZGVy
VGhlbWVRU3R5bGU6OmFkanVzdFNsaWRlclRodW1iU2l6ZShSZW5kZXJTdHlsZSogc3R5bGUsIEVs
ZW1lbnQqIGVsZW1lbnQpIGNvbnN0Cit7CisgICAgY29uc3QgQ29udHJvbFBhcnQgcGFydCA9IHN0
eWxlLT5hcHBlYXJhbmNlKCk7CisgICAgaWYgKHBhcnQgPT0gU2xpZGVyVGh1bWJIb3Jpem9udGFs
UGFydCB8fCBwYXJ0ID09IFNsaWRlclRodW1iVmVydGljYWxQYXJ0KSB7CisgICAgICAgIFF0OjpP
cmllbnRhdGlvbiBvcmllbnRhdGlvbiA9IFF0OjpIb3Jpem9udGFsOworICAgICAgICBpZiAocGFy
dCA9PSBTbGlkZXJUaHVtYlZlcnRpY2FsUGFydCkKKyAgICAgICAgICAgIG9yaWVudGF0aW9uID0g
UXQ6OlZlcnRpY2FsOworCisgICAgICAgIGludCBsZW5ndGggPSBtX3N0eWxlSW50ZXJmYWNlLT5z
bGlkZXJMZW5ndGgob3JpZW50YXRpb24pOworICAgICAgICBpbnQgdGhpY2tuZXNzID0gbV9zdHls
ZUludGVyZmFjZS0+c2xpZGVyVGhpY2tuZXNzKG9yaWVudGF0aW9uKTsKKyAgICAgICAgaWYgKG9y
aWVudGF0aW9uID09IFF0OjpWZXJ0aWNhbCkgeworICAgICAgICAgICAgc3R5bGUtPnNldFdpZHRo
KExlbmd0aCh0aGlja25lc3MsIEZpeGVkKSk7CisgICAgICAgICAgICBzdHlsZS0+c2V0SGVpZ2h0
KExlbmd0aChsZW5ndGgsIEZpeGVkKSk7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBz
dHlsZS0+c2V0V2lkdGgoTGVuZ3RoKGxlbmd0aCwgRml4ZWQpKTsKKyAgICAgICAgICAgIHN0eWxl
LT5zZXRIZWlnaHQoTGVuZ3RoKHRoaWNrbmVzcywgRml4ZWQpKTsKKyAgICAgICAgfQorICAgIH0g
ZWxzZQorICAgICAgICBSZW5kZXJUaGVtZVF0OjphZGp1c3RTbGlkZXJUaHVtYlNpemUoc3R5bGUs
IGVsZW1lbnQpOworfQorCit9CisKKy8vIHZpbTogdHM9NCBzdz00IGV0CmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9xdC9SZW5kZXJUaGVtZVFTdHlsZS5oIGIvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vcXQvUmVuZGVyVGhlbWVRU3R5bGUuaApuZXcgZmlsZSBtb2RlIDEwMDY0
NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi41YzczMDQz
OWMxOTgwZmE3ODhjNTc3MDI3MzlkMzgwODhmZWQ0YzcwCi0tLSAvZGV2L251bGwKKysrIGIvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vcXQvUmVuZGVyVGhlbWVRU3R5bGUuaApAQCAtMCwwICsxLDE1
OSBAQAorLyoKKyAqIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSB0aGVtZSBpbXBsZW1lbnRhdGlv
biBmb3IgZm9ybSBjb250cm9scyBpbiBXZWJDb3JlLgorICoKKyAqIENvcHlyaWdodCAoQykgMjAx
MS0yMDEyIE5va2lhIENvcnBvcmF0aW9uIGFuZC9vciBpdHMgc3Vic2lkaWFyeSgtaWVzKS4KKyAq
CisgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUg
aXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFy
eSBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29m
dHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9y
IChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBsaWJyYXJ5
IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBi
dXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50
eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQ
T1NFLiAgU2VlIHRoZSBHTlUKKyAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3Ig
bW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2Yg
dGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhp
cyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCisg
KiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQs
IEZpZnRoIEZsb29yLAorICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisgKgorICovCisj
aWZuZGVmIFJlbmRlclRoZW1lUVN0eWxlX2gKKyNkZWZpbmUgUmVuZGVyVGhlbWVRU3R5bGVfaAor
CisjaW5jbHVkZSAiUVN0eWxlSW50ZXJmYWNlLmgiCisjaW5jbHVkZSAiUmVuZGVyVGhlbWVRdC5o
IgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK2NsYXNzIFNjcm9sbGJhclRoZW1lUVN0eWxlOwor
CitjbGFzcyBQYWdlOworY2xhc3MgUVN0eWxlSW50ZXJmYWNlOworc3RydWN0IFFTdHlsZUludGVy
ZmFjZU9wdGlvbjsKKwordHlwZWRlZiBRU3R5bGVJbnRlcmZhY2UqICgqUXRTdHlsZUZhY3RvcnlG
dW5jdGlvbikoUGFnZSopOworCitjbGFzcyBSZW5kZXJUaGVtZVFTdHlsZSA6IHB1YmxpYyBSZW5k
ZXJUaGVtZVF0IHsKK3ByaXZhdGU6CisgICAgZnJpZW5kIGNsYXNzIFN0eWxlUGFpbnRlclFTdHls
ZTsKKworICAgIFJlbmRlclRoZW1lUVN0eWxlKFBhZ2UqKTsKKyAgICB2aXJ0dWFsIH5SZW5kZXJU
aGVtZVFTdHlsZSgpOworCitwdWJsaWM6CisgICAgc3RhdGljIFBhc3NSZWZQdHI8UmVuZGVyVGhl
bWU+IGNyZWF0ZShQYWdlKik7CisKKyAgICBzdGF0aWMgdm9pZCBzZXRTdHlsZUZhY3RvcnlGdW5j
dGlvbihRdFN0eWxlRmFjdG9yeUZ1bmN0aW9uKTsKKyAgICBzdGF0aWMgUXRTdHlsZUZhY3RvcnlG
dW5jdGlvbiBzdHlsZUZhY3RvcnkoKTsKKworICAgIHZpcnR1YWwgdm9pZCBhZGp1c3RTbGlkZXJU
aHVtYlNpemUoUmVuZGVyU3R5bGUqLCBFbGVtZW50KikgY29uc3Q7CisKKyAgICBRU3R5bGVJbnRl
cmZhY2UqIHN0eWxlSW50ZXJmYWNlKCkgeyByZXR1cm4gbV9zdHlsZUludGVyZmFjZS5nZXQoKTsg
fQorCitwcm90ZWN0ZWQ6CisgICAgdmlydHVhbCB2b2lkIGFkanVzdEJ1dHRvblN0eWxlKFN0eWxl
UmVzb2x2ZXIqLCBSZW5kZXJTdHlsZSosIEVsZW1lbnQqKSBjb25zdDsKKyAgICB2aXJ0dWFsIGJv
b2wgcGFpbnRCdXR0b24oUmVuZGVyT2JqZWN0KiwgY29uc3QgUGFpbnRJbmZvJiwgY29uc3QgSW50
UmVjdCYpOworCisgICAgdmlydHVhbCBib29sIHBhaW50VGV4dEZpZWxkKFJlbmRlck9iamVjdCos
IGNvbnN0IFBhaW50SW5mbyYsIGNvbnN0IEludFJlY3QmKTsKKworICAgIHZpcnR1YWwgYm9vbCBw
YWludFRleHRBcmVhKFJlbmRlck9iamVjdCosIGNvbnN0IFBhaW50SW5mbyYsIGNvbnN0IEludFJl
Y3QmKTsKKyAgICB2aXJ0dWFsIHZvaWQgYWRqdXN0VGV4dEFyZWFTdHlsZShTdHlsZVJlc29sdmVy
KiwgUmVuZGVyU3R5bGUqLCBFbGVtZW50KikgY29uc3Q7CisKKyAgICB2aXJ0dWFsIGJvb2wgcGFp
bnRNZW51TGlzdChSZW5kZXJPYmplY3QqLCBjb25zdCBQYWludEluZm8mLCBjb25zdCBJbnRSZWN0
Jik7CisKKyAgICB2aXJ0dWFsIGJvb2wgcGFpbnRNZW51TGlzdEJ1dHRvbihSZW5kZXJPYmplY3Qq
LCBjb25zdCBQYWludEluZm8mLCBjb25zdCBJbnRSZWN0Jik7CisgICAgdmlydHVhbCB2b2lkIGFk
anVzdE1lbnVMaXN0QnV0dG9uU3R5bGUoU3R5bGVSZXNvbHZlciosIFJlbmRlclN0eWxlKiwgRWxl
bWVudCopIGNvbnN0OworCisjaWYgRU5BQkxFKFBST0dSRVNTX0VMRU1FTlQpCisgICAgLy8gUmV0
dXJucyB0aGUgZHVyYXRpb24gb2YgdGhlIGFuaW1hdGlvbiBmb3IgdGhlIHByb2dyZXNzIGJhci4K
KyAgICB2aXJ0dWFsIGRvdWJsZSBhbmltYXRpb25EdXJhdGlvbkZvclByb2dyZXNzQmFyKFJlbmRl
clByb2dyZXNzKikgY29uc3Q7CisgICAgdmlydHVhbCBib29sIHBhaW50UHJvZ3Jlc3NCYXIoUmVu
ZGVyT2JqZWN0KiwgY29uc3QgUGFpbnRJbmZvJiwgY29uc3QgSW50UmVjdCYpOworI2VuZGlmCisK
KyAgICB2aXJ0dWFsIGJvb2wgcGFpbnRTbGlkZXJUcmFjayhSZW5kZXJPYmplY3QqLCBjb25zdCBQ
YWludEluZm8mLCBjb25zdCBJbnRSZWN0Jik7CisgICAgdmlydHVhbCB2b2lkIGFkanVzdFNsaWRl
clRyYWNrU3R5bGUoU3R5bGVSZXNvbHZlciosIFJlbmRlclN0eWxlKiwgRWxlbWVudCopIGNvbnN0
OworCisgICAgdmlydHVhbCBib29sIHBhaW50U2xpZGVyVGh1bWIoUmVuZGVyT2JqZWN0KiwgY29u
c3QgUGFpbnRJbmZvJiwgY29uc3QgSW50UmVjdCYpOworICAgIHZpcnR1YWwgdm9pZCBhZGp1c3RT
bGlkZXJUaHVtYlN0eWxlKFN0eWxlUmVzb2x2ZXIqLCBSZW5kZXJTdHlsZSosIEVsZW1lbnQqKSBj
b25zdDsKKworICAgIHZpcnR1YWwgYm9vbCBwYWludFNlYXJjaEZpZWxkKFJlbmRlck9iamVjdCos
IGNvbnN0IFBhaW50SW5mbyYsIGNvbnN0IEludFJlY3QmKTsKKworICAgIHZpcnR1YWwgdm9pZCBh
ZGp1c3RTZWFyY2hGaWVsZERlY29yYXRpb25TdHlsZShTdHlsZVJlc29sdmVyKiwgUmVuZGVyU3R5
bGUqLCBFbGVtZW50KikgY29uc3Q7CisgICAgdmlydHVhbCBib29sIHBhaW50U2VhcmNoRmllbGRE
ZWNvcmF0aW9uKFJlbmRlck9iamVjdCosIGNvbnN0IFBhaW50SW5mbyYsIGNvbnN0IEludFJlY3Qm
KTsKKworICAgIHZpcnR1YWwgdm9pZCBhZGp1c3RTZWFyY2hGaWVsZFJlc3VsdHNEZWNvcmF0aW9u
U3R5bGUoU3R5bGVSZXNvbHZlciosIFJlbmRlclN0eWxlKiwgRWxlbWVudCopIGNvbnN0OworICAg
IHZpcnR1YWwgYm9vbCBwYWludFNlYXJjaEZpZWxkUmVzdWx0c0RlY29yYXRpb24oUmVuZGVyT2Jq
ZWN0KiwgY29uc3QgUGFpbnRJbmZvJiwgY29uc3QgSW50UmVjdCYpOworCisjaWZuZGVmIFFUX05P
X1NQSU5CT1gKKyAgICB2aXJ0dWFsIGJvb2wgcGFpbnRJbm5lclNwaW5CdXR0b24oUmVuZGVyT2Jq
ZWN0KiwgY29uc3QgUGFpbnRJbmZvJiwgY29uc3QgSW50UmVjdCYpOworI2VuZGlmCisKK3Byb3Rl
Y3RlZDoKKyAgICB2aXJ0dWFsIHZvaWQgY29tcHV0ZVNpemVCYXNlZE9uU3R5bGUoUmVuZGVyU3R5
bGUqKSBjb25zdDsKKworICAgIHZpcnR1YWwgUVNoYXJlZFBvaW50ZXI8U3R5bGVQYWludGVyPiBn
ZXRTdHlsZVBhaW50ZXIoY29uc3QgUGFpbnRJbmZvJik7CisKKyAgICB2aXJ0dWFsIFFSZWN0IGlu
ZmxhdGVCdXR0b25SZWN0KGNvbnN0IFFSZWN0JiBvcmlnaW5hbFJlY3QpIGNvbnN0OworCisgICAg
dmlydHVhbCB2b2lkIHNldFBvcHVwUGFkZGluZyhSZW5kZXJTdHlsZSopIGNvbnN0OworCisgICAg
dmlydHVhbCBRUGFsZXR0ZSBjb2xvclBhbGV0dGUoKSBjb25zdDsKKworcHJpdmF0ZToKKyAgICBD
b250cm9sUGFydCBpbml0aWFsaXplQ29tbW9uUVN0eWxlT3B0aW9ucyhRU3R5bGVJbnRlcmZhY2VP
cHRpb24mLCBSZW5kZXJPYmplY3QqKSBjb25zdDsKKworICAgIHZvaWQgc2V0QnV0dG9uUGFkZGlu
ZyhSZW5kZXJTdHlsZSopIGNvbnN0OworCisgICAgdm9pZCBzZXRQYWxldHRlRnJvbVBhZ2VDbGll
bnRJZkV4aXN0cyhRUGFsZXR0ZSYpIGNvbnN0OworCisjaWZkZWYgUV9PU19NQUMKKyAgICBpbnQg
bV9idXR0b25Gb250UGl4ZWxTaXplOworI2VuZGlmCisKKyAgICBPd25QdHI8UVN0eWxlSW50ZXJm
YWNlPiBtX3N0eWxlSW50ZXJmYWNlOworfTsKKworY2xhc3MgU3R5bGVQYWludGVyUVN0eWxlIDog
cHVibGljIFN0eWxlUGFpbnRlciB7CitwdWJsaWM6CisgICAgZXhwbGljaXQgU3R5bGVQYWludGVy
UVN0eWxlKFJlbmRlclRoZW1lUVN0eWxlKiwgY29uc3QgUGFpbnRJbmZvJiwgUmVuZGVyT2JqZWN0
Kik7CisgICAgZXhwbGljaXQgU3R5bGVQYWludGVyUVN0eWxlKFNjcm9sbGJhclRoZW1lUVN0eWxl
KiwgR3JhcGhpY3NDb250ZXh0Kik7CisKKyAgICBib29sIGlzVmFsaWQoKSBjb25zdCB7IHJldHVy
biBzdHlsZUludGVyZmFjZSAmJiBzdHlsZUludGVyZmFjZS0+aXNWYWxpZCgpICYmIFN0eWxlUGFp
bnRlcjo6aXNWYWxpZCgpOyB9CisKKyAgICBRT2JqZWN0KiB3aWRnZXQ7CisgICAgUVN0eWxlSW50
ZXJmYWNlKiBzdHlsZUludGVyZmFjZTsKKyAgICBRU3R5bGVJbnRlcmZhY2VPcHRpb24gc3R5bGVP
cHRpb247CisgICAgQ29udHJvbFBhcnQgYXBwZWFyYW5jZTsKKworICAgIHZvaWQgcGFpbnRCdXR0
b24oUVN0eWxlSW50ZXJmYWNlOjpCdXR0b25UeXBlIHR5cGUpCisgICAgeyBzdHlsZUludGVyZmFj
ZS0+cGFpbnRCdXR0b24ocGFpbnRlciwgdHlwZSwgc3R5bGVPcHRpb24sIHdpZGdldCk7IH0KKyAg
ICB2b2lkIHBhaW50VGV4dEZpZWxkKCkKKyAgICB7IHN0eWxlSW50ZXJmYWNlLT5wYWludFRleHRG
aWVsZChwYWludGVyLCBzdHlsZU9wdGlvbiwgd2lkZ2V0KTsgfQorICAgIHZvaWQgcGFpbnRDb21i
b0JveCgpCisgICAgeyBzdHlsZUludGVyZmFjZS0+cGFpbnRDb21ib0JveChwYWludGVyLCBzdHls
ZU9wdGlvbiwgd2lkZ2V0KTsgfQorICAgIHZvaWQgcGFpbnRDb21ib0JveEFycm93KCkKKyAgICB7
IHN0eWxlSW50ZXJmYWNlLT5wYWludENvbWJvQm94QXJyb3cocGFpbnRlciwgc3R5bGVPcHRpb24s
IHdpZGdldCk7IH0KKyAgICB2b2lkIHBhaW50U2xpZGVyVHJhY2soKQorICAgIHsgc3R5bGVJbnRl
cmZhY2UtPnBhaW50U2xpZGVyVHJhY2socGFpbnRlciwgc3R5bGVPcHRpb24sIHdpZGdldCk7IH0K
KyAgICB2b2lkIHBhaW50U2xpZGVyVGh1bWIoKQorICAgIHsgc3R5bGVJbnRlcmZhY2UtPnBhaW50
U2xpZGVyVGh1bWIocGFpbnRlciwgc3R5bGVPcHRpb24sIHdpZGdldCk7IH0KKyAgICB2b2lkIHBh
aW50SW5uZXJTcGluQnV0dG9uKGJvb2wgc3BpbkJveFVwKQorICAgIHsgc3R5bGVJbnRlcmZhY2Ut
PnBhaW50SW5uZXJTcGluQnV0dG9uKHBhaW50ZXIsIHN0eWxlT3B0aW9uLCBzcGluQm94VXAsIHdp
ZGdldCk7IH0KKyAgICB2b2lkIHBhaW50UHJvZ3Jlc3NCYXIoZG91YmxlIHByb2dyZXNzLCBkb3Vi
bGUgYW5pbWF0aW9uUHJvZ3Jlc3MpCisgICAgeyBzdHlsZUludGVyZmFjZS0+cGFpbnRQcm9ncmVz
c0JhcihwYWludGVyLCBzdHlsZU9wdGlvbiwgcHJvZ3Jlc3MsIGFuaW1hdGlvblByb2dyZXNzLCB3
aWRnZXQpOyB9CisgICAgdm9pZCBwYWludFNjcm9sbENvcm5lcihjb25zdCBRUmVjdCYgcmVjdCkK
KyAgICB7IHN0eWxlSW50ZXJmYWNlLT5wYWludFNjcm9sbENvcm5lcihwYWludGVyLCByZWN0LCB3
aWRnZXQpOyB9CisgICAgdm9pZCBwYWludFNjcm9sbEJhcigpCisgICAgeyBzdHlsZUludGVyZmFj
ZS0+cGFpbnRTY3JvbGxCYXIocGFpbnRlciwgc3R5bGVPcHRpb24sIHdpZGdldCk7IH0KKworcHJp
dmF0ZToKKyAgICB2b2lkIGluaXQoR3JhcGhpY3NDb250ZXh0Kik7CisKKyAgICBRX0RJU0FCTEVf
Q09QWShTdHlsZVBhaW50ZXJRU3R5bGUpCit9OworCit9CisKKyNlbmRpZiAvLyBSZW5kZXJUaGVt
ZVFTdHlsZV9oCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9xdC9TY3JvbGxi
YXJUaGVtZVFTdHlsZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9xdC9TY3JvbGxiYXJU
aGVtZVFTdHlsZS5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uYmQ1N2I3MDVkMmYyMTJhMzQwYWZkMGRjZjFhYzhh
ZDlmYWY3ZWJlZAotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3F0
L1Njcm9sbGJhclRoZW1lUVN0eWxlLmNwcApAQCAtMCwwICsxLDIyMSBAQAorLyoKKyAqIENvcHly
aWdodCAoQykgMjAwNywgMjAwOCBBcHBsZSBJbmMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCisgKiBD
b3B5cmlnaHQgKEMpIDIwMDcgU3RhaWtvcyBDb21wdXRpbmcgU2VydmljZXMgSW5jLiA8aW5mb0Bz
dGFpa29zLm5ldD4KKyAqIENvcHlyaWdodCAoQykgMjAwOCBOb2tpYSBDb3Jwb3JhdGlvbiBhbmQv
b3IgaXRzIHN1YnNpZGlhcnkoLWllcykKKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGlu
IHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlv
biwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwor
ICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJl
dGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlv
bnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxz
IHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElT
IFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1Ig
SU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisg
KiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBB
IFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFM
TCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNU
LCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VR
VUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NV
UkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRB
LCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNF
RCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNU
LCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1Ig
T1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMg
U09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1B
R0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIlNjcm9sbGJhclRoZW1l
UVN0eWxlLmgiCisKKyNpbmNsdWRlICJHcmFwaGljc0NvbnRleHQuaCIKKyNpbmNsdWRlICJQbGF0
Zm9ybU1vdXNlRXZlbnQuaCIKKyNpbmNsdWRlICJSZW5kZXJUaGVtZVFTdHlsZS5oIgorI2luY2x1
ZGUgIlNjcm9sbFZpZXcuaCIKKyNpbmNsdWRlICJTY3JvbGxiYXIuaCIKKworbmFtZXNwYWNlIFdl
YkNvcmUgeworCitTY3JvbGxiYXJUaGVtZVFTdHlsZTo6U2Nyb2xsYmFyVGhlbWVRU3R5bGUoKQor
eworICAgIG1fc3R5bGVJbnRlcmZhY2UgPSBhZG9wdFB0cihSZW5kZXJUaGVtZVFTdHlsZTo6c3R5
bGVGYWN0b3J5KCkoLypwYWdlKi8gMCkpOworfQorCitTY3JvbGxiYXJUaGVtZVFTdHlsZTo6flNj
cm9sbGJhclRoZW1lUVN0eWxlKCkKK3sKK30KKworc3RhdGljIFFTdHlsZUludGVyZmFjZTo6U3Vi
Q29udHJvbCBzY1BhcnQoY29uc3QgU2Nyb2xsYmFyUGFydCYgcGFydCkKK3sKKyAgICBzd2l0Y2gg
KHBhcnQpIHsKKyAgICBjYXNlIE5vUGFydDoKKyAgICAgICAgcmV0dXJuIFFTdHlsZUludGVyZmFj
ZTo6U0NfTm9uZTsKKyAgICBjYXNlIEJhY2tCdXR0b25TdGFydFBhcnQ6CisgICAgY2FzZSBCYWNr
QnV0dG9uRW5kUGFydDoKKyAgICAgICAgcmV0dXJuIFFTdHlsZUludGVyZmFjZTo6U0NfU2Nyb2xs
QmFyU3ViTGluZTsKKyAgICBjYXNlIEJhY2tUcmFja1BhcnQ6CisgICAgICAgIHJldHVybiBRU3R5
bGVJbnRlcmZhY2U6OlNDX1Njcm9sbEJhclN1YlBhZ2U7CisgICAgY2FzZSBUaHVtYlBhcnQ6Cisg
ICAgICAgIHJldHVybiBRU3R5bGVJbnRlcmZhY2U6OlNDX1Njcm9sbEJhclNsaWRlcjsKKyAgICBj
YXNlIEZvcndhcmRUcmFja1BhcnQ6CisgICAgICAgIHJldHVybiBRU3R5bGVJbnRlcmZhY2U6OlND
X1Njcm9sbEJhckFkZFBhZ2U7CisgICAgY2FzZSBGb3J3YXJkQnV0dG9uU3RhcnRQYXJ0OgorICAg
IGNhc2UgRm9yd2FyZEJ1dHRvbkVuZFBhcnQ6CisgICAgICAgIHJldHVybiBRU3R5bGVJbnRlcmZh
Y2U6OlNDX1Njcm9sbEJhckFkZExpbmU7CisgICAgfQorCisgICAgcmV0dXJuIFFTdHlsZUludGVy
ZmFjZTo6U0NfTm9uZTsKK30KKworc3RhdGljIFNjcm9sbGJhclBhcnQgc2Nyb2xsYmFyUGFydChj
b25zdCBRU3R5bGVJbnRlcmZhY2U6OlN1YkNvbnRyb2wmIHNjKQoreworICAgIHN3aXRjaCAoc2Mp
IHsKKyAgICBjYXNlIFFTdHlsZUludGVyZmFjZTo6U0NfTm9uZToKKyAgICAgICAgcmV0dXJuIE5v
UGFydDsKKyAgICBjYXNlIFFTdHlsZUludGVyZmFjZTo6U0NfU2Nyb2xsQmFyU3ViTGluZToKKyAg
ICAgICAgcmV0dXJuIEJhY2tCdXR0b25TdGFydFBhcnQ7CisgICAgY2FzZSBRU3R5bGVJbnRlcmZh
Y2U6OlNDX1Njcm9sbEJhclN1YlBhZ2U6CisgICAgICAgIHJldHVybiBCYWNrVHJhY2tQYXJ0Owor
ICAgIGNhc2UgUVN0eWxlSW50ZXJmYWNlOjpTQ19TY3JvbGxCYXJTbGlkZXI6CisgICAgICAgIHJl
dHVybiBUaHVtYlBhcnQ7CisgICAgY2FzZSBRU3R5bGVJbnRlcmZhY2U6OlNDX1Njcm9sbEJhckFk
ZFBhZ2U6CisgICAgICAgIHJldHVybiBGb3J3YXJkVHJhY2tQYXJ0OworICAgIGNhc2UgUVN0eWxl
SW50ZXJmYWNlOjpTQ19TY3JvbGxCYXJBZGRMaW5lOgorICAgICAgICByZXR1cm4gRm9yd2FyZEJ1
dHRvblN0YXJ0UGFydDsKKyAgICB9CisgICAgcmV0dXJuIE5vUGFydDsKK30KKworc3RhdGljIFFT
dHlsZUludGVyZmFjZU9wdGlvbiBpbml0U2xpZGVyU3R5bGVPcHRpb24oU2Nyb2xsYmFyVGhlbWVD
bGllbnQqIHNjcm9sbGJhciwgUU9iamVjdCogd2lkZ2V0ID0gMCkKK3sKKyAgICBRU3R5bGVJbnRl
cmZhY2VPcHRpb24gb3B0OworICAgIGlmICh3aWRnZXQpIHsKKyAgICAgICAgb3B0LnBhbGV0dGUg
PSB3aWRnZXQtPnByb3BlcnR5KCJwYWxldHRlIikudmFsdWU8UVBhbGV0dGU+KCk7CisgICAgICAg
IG9wdC5yZWN0ID0gd2lkZ2V0LT5wcm9wZXJ0eSgicmVjdCIpLnZhbHVlPFFSZWN0PigpOworICAg
ICAgICBvcHQuZGlyZWN0aW9uID0gc3RhdGljX2Nhc3Q8UXQ6OkxheW91dERpcmVjdGlvbj4od2lk
Z2V0LT5wcm9wZXJ0eSgibGF5b3V0RGlyZWN0aW9uIikudG9JbnQoKSk7CisgICAgfSBlbHNlCisg
ICAgICAgIG9wdC5zdGF0ZSB8PSBRU3R5bGVJbnRlcmZhY2U6OlN0YXRlX0FjdGl2ZTsKKworICAg
IG9wdC5zdGF0ZSAmPSB+UVN0eWxlSW50ZXJmYWNlOjpTdGF0ZV9IYXNGb2N1czsKKworICAgIG9w
dC5yZWN0ID0gc2Nyb2xsYmFyLT5mcmFtZVJlY3QoKTsKKyAgICBpZiAoc2Nyb2xsYmFyLT5lbmFi
bGVkKCkpCisgICAgICAgIG9wdC5zdGF0ZSB8PSBRU3R5bGVJbnRlcmZhY2U6OlN0YXRlX0VuYWJs
ZWQ7CisgICAgaWYgKHNjcm9sbGJhci0+Y29udHJvbFNpemUoKSAhPSBSZWd1bGFyU2Nyb2xsYmFy
KQorICAgICAgICBvcHQuc3RhdGUgfD0gUVN0eWxlSW50ZXJmYWNlOjpTdGF0ZV9NaW5pOworICAg
IG9wdC5zbGlkZXIub3JpZW50YXRpb24gPSAoc2Nyb2xsYmFyLT5vcmllbnRhdGlvbigpID09IFZl
cnRpY2FsU2Nyb2xsYmFyKSA/IFF0OjpWZXJ0aWNhbCA6IFF0OjpIb3Jpem9udGFsOworCisgICAg
aWYgKHNjcm9sbGJhci0+b3JpZW50YXRpb24oKSA9PSBIb3Jpem9udGFsU2Nyb2xsYmFyKQorICAg
ICAgICBvcHQuc3RhdGUgfD0gUVN0eWxlSW50ZXJmYWNlOjpTdGF0ZV9Ib3Jpem9udGFsOworICAg
IGVsc2UKKyAgICAgICAgb3B0LnN0YXRlICY9IH5RU3R5bGVJbnRlcmZhY2U6OlN0YXRlX0hvcml6
b250YWw7CisKKyAgICBvcHQuc2xpZGVyLnZhbHVlID0gc2Nyb2xsYmFyLT52YWx1ZSgpOworICAg
IG9wdC5zbGlkZXIucG9zaXRpb24gPSBvcHQuc2xpZGVyLnZhbHVlOworICAgIG9wdC5zbGlkZXIu
cGFnZVN0ZXAgPSBzY3JvbGxiYXItPnBhZ2VTdGVwKCk7CisgICAgb3B0LnNsaWRlci5zaW5nbGVT
dGVwID0gc2Nyb2xsYmFyLT5saW5lU3RlcCgpOworICAgIG9wdC5zbGlkZXIubWluaW11bSA9IDA7
CisgICAgb3B0LnNsaWRlci5tYXhpbXVtID0gcU1heCgwLCBzY3JvbGxiYXItPm1heGltdW0oKSk7
CisgICAgU2Nyb2xsYmFyUGFydCBwcmVzc2VkUGFydCA9IHNjcm9sbGJhci0+cHJlc3NlZFBhcnQo
KTsKKyAgICBTY3JvbGxiYXJQYXJ0IGhvdmVyZWRQYXJ0ID0gc2Nyb2xsYmFyLT5ob3ZlcmVkUGFy
dCgpOworICAgIGlmIChwcmVzc2VkUGFydCAhPSBOb1BhcnQpIHsKKyAgICAgICAgb3B0LnNsaWRl
ci5hY3RpdmVTdWJDb250cm9scyA9IHNjUGFydChzY3JvbGxiYXItPnByZXNzZWRQYXJ0KCkpOwor
ICAgICAgICBpZiAocHJlc3NlZFBhcnQgPT0gQmFja0J1dHRvblN0YXJ0UGFydCB8fCBwcmVzc2Vk
UGFydCA9PSBGb3J3YXJkQnV0dG9uU3RhcnRQYXJ0CisgICAgICAgICAgICB8fCBwcmVzc2VkUGFy
dCA9PSBCYWNrQnV0dG9uRW5kUGFydCB8fCBwcmVzc2VkUGFydCA9PSBGb3J3YXJkQnV0dG9uRW5k
UGFydAorICAgICAgICAgICAgfHwgcHJlc3NlZFBhcnQgPT0gVGh1bWJQYXJ0KQorICAgICAgICAg
ICAgb3B0LnN0YXRlIHw9IFFTdHlsZUludGVyZmFjZTo6U3RhdGVfU3Vua2VuOworICAgIH0gZWxz
ZQorICAgICAgICBvcHQuc2xpZGVyLmFjdGl2ZVN1YkNvbnRyb2xzID0gc2NQYXJ0KGhvdmVyZWRQ
YXJ0KTsKKyAgICBpZiAoaG92ZXJlZFBhcnQgIT0gTm9QYXJ0KQorICAgICAgICBvcHQuc3RhdGUg
fD0gUVN0eWxlSW50ZXJmYWNlOjpTdGF0ZV9Nb3VzZU92ZXI7CisgICAgcmV0dXJuIG9wdDsKK30K
KworYm9vbCBTY3JvbGxiYXJUaGVtZVFTdHlsZTo6cGFpbnQoU2Nyb2xsYmFyVGhlbWVDbGllbnQq
IHNjcm9sbGJhciwgR3JhcGhpY3NDb250ZXh0KiBncmFwaGljc0NvbnRleHQsIGNvbnN0IEludFJl
Y3QmIGRpcnR5UmVjdCkKK3sKKyAgICBpZiAoZ3JhcGhpY3NDb250ZXh0LT51cGRhdGluZ0NvbnRy
b2xUaW50cygpKSB7CisgICAgICAgIHNjcm9sbGJhci0+aW52YWxpZGF0ZVJlY3QoZGlydHlSZWN0
KTsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKworICAgIFN0eWxlUGFpbnRlclFTdHls
ZSBwKHRoaXMsIGdyYXBoaWNzQ29udGV4dCk7CisgICAgaWYgKCFwLmlzVmFsaWQoKSkKKyAgICAg
ICAgcmV0dXJuIHRydWU7CisKKyAgICBwLnBhaW50ZXItPnNhdmUoKTsKKyAgICBwLnN0eWxlT3B0
aW9uID0gaW5pdFNsaWRlclN0eWxlT3B0aW9uKHNjcm9sbGJhciwgcC53aWRnZXQpOworCisgICAg
cC5wYWludGVyLT5zZXRDbGlwUmVjdChwLnN0eWxlT3B0aW9uLnJlY3QuaW50ZXJzZWN0ZWQoZGly
dHlSZWN0KSwgUXQ6OkludGVyc2VjdENsaXApOworICAgIHAucGFpbnRTY3JvbGxCYXIoKTsKKyAg
ICBwLnBhaW50ZXItPnJlc3RvcmUoKTsKKyAgICByZXR1cm4gdHJ1ZTsKK30KKworU2Nyb2xsYmFy
UGFydCBTY3JvbGxiYXJUaGVtZVFTdHlsZTo6aGl0VGVzdChTY3JvbGxiYXJUaGVtZUNsaWVudCog
c2Nyb2xsYmFyLCBjb25zdCBQbGF0Zm9ybU1vdXNlRXZlbnQmIGV2dCkKK3sKKyAgICBRU3R5bGVJ
bnRlcmZhY2VPcHRpb24gb3B0ID0gaW5pdFNsaWRlclN0eWxlT3B0aW9uKHNjcm9sbGJhcik7Cisg
ICAgY29uc3QgUVBvaW50IHBvcyA9IHNjcm9sbGJhci0+Y29udmVydEZyb21Db250YWluaW5nV2lu
ZG93KGV2dC5wb3NpdGlvbigpKTsKKyAgICBvcHQucmVjdC5tb3ZlVG8oUVBvaW50KDAsIDApKTsK
KyAgICBRU3R5bGVJbnRlcmZhY2U6OlN1YkNvbnRyb2wgc2MgPSBtX3N0eWxlSW50ZXJmYWNlLT5o
aXRUZXN0U2Nyb2xsQmFyKG9wdCwgcG9zKTsKKyAgICByZXR1cm4gc2Nyb2xsYmFyUGFydChzYyk7
Cit9CisKK2Jvb2wgU2Nyb2xsYmFyVGhlbWVRU3R5bGU6OnNob3VsZENlbnRlck9uVGh1bWIoU2Ny
b2xsYmFyVGhlbWVDbGllbnQqLCBjb25zdCBQbGF0Zm9ybU1vdXNlRXZlbnQmIGV2dCkKK3sKKyAg
ICAvLyBNaWRkbGUgY2xpY2sgY2VudGVycyBzbGlkZXIgdGh1bWIgKGlmIHN1cHBvcnRlZCkuCisg
ICAgcmV0dXJuIG1fc3R5bGVJbnRlcmZhY2UtPnNjcm9sbEJhck1pZGRsZUNsaWNrQWJzb2x1dGVQ
b3NpdGlvblN0eWxlSGludCgpICYmIGV2dC5idXR0b24oKSA9PSBNaWRkbGVCdXR0b247Cit9CisK
K3ZvaWQgU2Nyb2xsYmFyVGhlbWVRU3R5bGU6OmludmFsaWRhdGVQYXJ0KFNjcm9sbGJhclRoZW1l
Q2xpZW50KiBzY3JvbGxiYXIsIFNjcm9sbGJhclBhcnQpCit7CisgICAgLy8gRklYTUU6IERvIG1v
cmUgcHJlY2lzZSBpbnZhbGlkYXRpb24uCisgICAgc2Nyb2xsYmFyLT5pbnZhbGlkYXRlKCk7Cit9
CisKK2ludCBTY3JvbGxiYXJUaGVtZVFTdHlsZTo6c2Nyb2xsYmFyVGhpY2tuZXNzKFNjcm9sbGJh
ckNvbnRyb2xTaXplIGNvbnRyb2xTaXplKQoreworICAgIGNvbnN0IGJvb2wgbWluaSA9IGNvbnRy
b2xTaXplICE9IFJlZ3VsYXJTY3JvbGxiYXI7CisgICAgcmV0dXJuIG1fc3R5bGVJbnRlcmZhY2Ut
PnNjcm9sbEJhckV4dGVudChtaW5pKTsKK30KKworaW50IFNjcm9sbGJhclRoZW1lUVN0eWxlOjp0
aHVtYlBvc2l0aW9uKFNjcm9sbGJhclRoZW1lQ2xpZW50KiBzY3JvbGxiYXIpCit7CisgICAgaWYg
KHNjcm9sbGJhci0+ZW5hYmxlZCgpKSB7CisgICAgICAgIGZsb2F0IHBvcyA9IChmbG9hdClzY3Jv
bGxiYXItPmN1cnJlbnRQb3MoKSAqICh0cmFja0xlbmd0aChzY3JvbGxiYXIpIC0gdGh1bWJMZW5n
dGgoc2Nyb2xsYmFyKSkgLyBzY3JvbGxiYXItPm1heGltdW0oKTsKKyAgICAgICAgcmV0dXJuIChw
b3MgPCAxICYmIHBvcyA+IDApID8gMSA6IHBvczsKKyAgICB9CisgICAgcmV0dXJuIDA7Cit9CisK
K2ludCBTY3JvbGxiYXJUaGVtZVFTdHlsZTo6dGh1bWJMZW5ndGgoU2Nyb2xsYmFyVGhlbWVDbGll
bnQqIHNjcm9sbGJhcikKK3sKKyAgICBRU3R5bGVJbnRlcmZhY2VPcHRpb24gb3B0ID0gaW5pdFNs
aWRlclN0eWxlT3B0aW9uKHNjcm9sbGJhcik7CisgICAgUVJlY3QgdGh1bWIgPSBtX3N0eWxlSW50
ZXJmYWNlLT5zY3JvbGxCYXJTdWJDb250cm9sUmVjdChvcHQsIFFTdHlsZUludGVyZmFjZTo6U0Nf
U2Nyb2xsQmFyU2xpZGVyKTsKKyAgICByZXR1cm4gc2Nyb2xsYmFyLT5vcmllbnRhdGlvbigpID09
IEhvcml6b250YWxTY3JvbGxiYXIgPyB0aHVtYi53aWR0aCgpIDogdGh1bWIuaGVpZ2h0KCk7Cit9
CisKK2ludCBTY3JvbGxiYXJUaGVtZVFTdHlsZTo6dHJhY2tQb3NpdGlvbihTY3JvbGxiYXJUaGVt
ZUNsaWVudCogc2Nyb2xsYmFyKQoreworICAgIFFTdHlsZUludGVyZmFjZU9wdGlvbiBvcHQgPSBp
bml0U2xpZGVyU3R5bGVPcHRpb24oc2Nyb2xsYmFyKTsKKyAgICBRUmVjdCB0cmFjayA9IG1fc3R5
bGVJbnRlcmZhY2UtPnNjcm9sbEJhclN1YkNvbnRyb2xSZWN0KG9wdCwgUVN0eWxlSW50ZXJmYWNl
OjpTQ19TY3JvbGxCYXJHcm9vdmUpOworICAgIHJldHVybiBzY3JvbGxiYXItPm9yaWVudGF0aW9u
KCkgPT0gSG9yaXpvbnRhbFNjcm9sbGJhciA/IHRyYWNrLngoKSAtIHNjcm9sbGJhci0+eCgpIDog
dHJhY2sueSgpIC0gc2Nyb2xsYmFyLT55KCk7Cit9CisKK2ludCBTY3JvbGxiYXJUaGVtZVFTdHls
ZTo6dHJhY2tMZW5ndGgoU2Nyb2xsYmFyVGhlbWVDbGllbnQqIHNjcm9sbGJhcikKK3sKKyAgICBR
U3R5bGVJbnRlcmZhY2VPcHRpb24gb3B0ID0gaW5pdFNsaWRlclN0eWxlT3B0aW9uKHNjcm9sbGJh
cik7CisgICAgUVJlY3QgdHJhY2sgPSBtX3N0eWxlSW50ZXJmYWNlLT5zY3JvbGxCYXJTdWJDb250
cm9sUmVjdChvcHQsIFFTdHlsZUludGVyZmFjZTo6U0NfU2Nyb2xsQmFyR3Jvb3ZlKTsKKyAgICBy
ZXR1cm4gc2Nyb2xsYmFyLT5vcmllbnRhdGlvbigpID09IEhvcml6b250YWxTY3JvbGxiYXIgPyB0
cmFjay53aWR0aCgpIDogdHJhY2suaGVpZ2h0KCk7Cit9CisKK3ZvaWQgU2Nyb2xsYmFyVGhlbWVR
U3R5bGU6OnBhaW50U2Nyb2xsQ29ybmVyKFNjcm9sbFZpZXcqLCBHcmFwaGljc0NvbnRleHQqIGNv
bnRleHQsIGNvbnN0IEludFJlY3QmIHJlY3QpCit7CisgICAgU3R5bGVQYWludGVyUVN0eWxlIHAo
dGhpcywgY29udGV4dCk7CisgICAgaWYgKCFwLmlzVmFsaWQoKSkKKyAgICAgICAgcmV0dXJuOwor
CisgICAgcC5wYWludFNjcm9sbENvcm5lcihyZWN0KTsKK30KKworfQorCmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9xdC9TY3JvbGxiYXJUaGVtZVFTdHlsZS5oIGIvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vcXQvU2Nyb2xsYmFyVGhlbWVRU3R5bGUuaApuZXcgZmlsZSBtb2Rl
IDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi43
MDczZmIxNzBhZmVhZjk1NjJkYjQ5ZDY4MDQ2Y2E5ZmIyOTUzZTZhCi0tLSAvZGV2L251bGwKKysr
IGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vcXQvU2Nyb2xsYmFyVGhlbWVRU3R5bGUuaApAQCAt
MCwwICsxLDY1IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA4IEFwcGxlIEluYy4gQWxsIFJp
Z2h0cyBSZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBh
bmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBl
cm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1l
dDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUg
YWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmlu
YXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGlu
IHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVk
IHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVE
IEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBX
QVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVE
IFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VM
QVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJ
TkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVD
VCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBE
QU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9G
IFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICog
UFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04g
QU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1Qg
TElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNF
KSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUs
IEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8K
KworI2lmbmRlZiBTY3JvbGxiYXJUaGVtZVFTdHlsZV9oCisjZGVmaW5lIFNjcm9sbGJhclRoZW1l
UVN0eWxlX2gKKworI2luY2x1ZGUgIlNjcm9sbGJhclRoZW1lLmgiCisKKyNpbmNsdWRlIDxRdENv
cmUvcWdsb2JhbC5oPgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK2NsYXNzIFFTdHlsZUludGVy
ZmFjZTsKKworY2xhc3MgU2Nyb2xsYmFyVGhlbWVRU3R5bGUgOiBwdWJsaWMgU2Nyb2xsYmFyVGhl
bWUgeworcHVibGljOgorICAgIFNjcm9sbGJhclRoZW1lUVN0eWxlKCk7CisgICAgdmlydHVhbCB+
U2Nyb2xsYmFyVGhlbWVRU3R5bGUoKTsKKworICAgIHZpcnR1YWwgYm9vbCBwYWludChTY3JvbGxi
YXJUaGVtZUNsaWVudCosIEdyYXBoaWNzQ29udGV4dCosIGNvbnN0IEludFJlY3QmIGRpcnR5UmVj
dCk7CisgICAgdmlydHVhbCB2b2lkIHBhaW50U2Nyb2xsQ29ybmVyKFNjcm9sbFZpZXcqLCBHcmFw
aGljc0NvbnRleHQqLCBjb25zdCBJbnRSZWN0JiBjb3JuZXJSZWN0KTsKKworICAgIHZpcnR1YWwg
U2Nyb2xsYmFyUGFydCBoaXRUZXN0KFNjcm9sbGJhclRoZW1lQ2xpZW50KiwgY29uc3QgUGxhdGZv
cm1Nb3VzZUV2ZW50Jik7CisKKyAgICB2aXJ0dWFsIGJvb2wgc2hvdWxkQ2VudGVyT25UaHVtYihT
Y3JvbGxiYXJUaGVtZUNsaWVudCosIGNvbnN0IFBsYXRmb3JtTW91c2VFdmVudCYpOworCisgICAg
dmlydHVhbCB2b2lkIGludmFsaWRhdGVQYXJ0KFNjcm9sbGJhclRoZW1lQ2xpZW50KiwgU2Nyb2xs
YmFyUGFydCk7CisKKyAgICB2aXJ0dWFsIGludCB0aHVtYlBvc2l0aW9uKFNjcm9sbGJhclRoZW1l
Q2xpZW50Kik7CisgICAgdmlydHVhbCBpbnQgdGh1bWJMZW5ndGgoU2Nyb2xsYmFyVGhlbWVDbGll
bnQqKTsKKyAgICB2aXJ0dWFsIGludCB0cmFja1Bvc2l0aW9uKFNjcm9sbGJhclRoZW1lQ2xpZW50
Kik7CisgICAgdmlydHVhbCBpbnQgdHJhY2tMZW5ndGgoU2Nyb2xsYmFyVGhlbWVDbGllbnQqKTsK
KworICAgIHZpcnR1YWwgaW50IHNjcm9sbGJhclRoaWNrbmVzcyhTY3JvbGxiYXJDb250cm9sU2l6
ZSA9IFJlZ3VsYXJTY3JvbGxiYXIpOworCisgICAgUVN0eWxlSW50ZXJmYWNlKiBzdHlsZUludGVy
ZmFjZSgpIHsgcmV0dXJuIG1fc3R5bGVJbnRlcmZhY2UuZ2V0KCk7IH0KKworcHJpdmF0ZToKKyAg
ICBPd25QdHI8UVN0eWxlSW50ZXJmYWNlPiBtX3N0eWxlSW50ZXJmYWNlOworfTsKKworfQorI2Vu
ZGlmCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1dlYktpdDEucHJvIGIvU291cmNlL1dlYktp
dC9XZWJLaXQxLnBybwppbmRleCBhZTIzYzRlY2E0NDEyYTA2NTIzYWJlYjY4MGFiODQzODA2Nzli
MjQ1Li4zODBhNDkyMDZiMzZjMzk2YTAwODg3N2RkOWQ1ZmIwMmE5NzY5NzY0IDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViS2l0L1dlYktpdDEucHJvCisrKyBiL1NvdXJjZS9XZWJLaXQvV2ViS2l0MS5w
cm8KQEAgLTQ5LDEyICs0OSwxMSBAQCBTT1VSQ0VTICs9IFwKICAgICAkJFBXRC9xdC9XZWJDb3Jl
U3VwcG9ydC9QYWdlQ2xpZW50UXQuY3BwIFwKICAgICAkJFBXRC9xdC9XZWJDb3JlU3VwcG9ydC9Q
b3B1cE1lbnVRdC5jcHAgXAogICAgICQkUFdEL3F0L1dlYkNvcmVTdXBwb3J0L1F0UGxhdGZvcm1Q
bHVnaW4uY3BwIFwKLSAgICAkJFBXRC9xdC9XZWJDb3JlU3VwcG9ydC9SZW5kZXJUaGVtZVFTdHls
ZS5jcHAgXAotICAgICQkUFdEL3F0L1dlYkNvcmVTdXBwb3J0L1Njcm9sbGJhclRoZW1lUVN0eWxl
LmNwcCBcCiAgICAgJCRQV0QvcXQvV2ViQ29yZVN1cHBvcnQvU2VhcmNoUG9wdXBNZW51UXQuY3Bw
IFwKICAgICAkJFBXRC9xdC9XZWJDb3JlU3VwcG9ydC9UZXh0Q2hlY2tlckNsaWVudFF0LmNwcCBc
CiAgICAgJCRQV0QvcXQvV2ViQ29yZVN1cHBvcnQvUGxhdGZvcm1TdHJhdGVnaWVzUXQuY3BwIFwK
LSAgICAkJFBXRC9xdC9XZWJDb3JlU3VwcG9ydC9XZWJFdmVudENvbnZlcnNpb24uY3BwCisgICAg
JCRQV0QvcXQvV2ViQ29yZVN1cHBvcnQvV2ViRXZlbnRDb252ZXJzaW9uLmNwcCBcCisgICAgJCRQ
V0QvcXQvV2ViQ29yZVN1cHBvcnQvUVdlYlN0eWxlLmNwcCBcCiAKIEhFQURFUlMgKz0gXAogICAg
ICQkUFdEL3F0L0FwaS9xd2ViZnJhbWUuaCBcCkBAIC04NywxMiArODYsMTEgQEAgSEVBREVSUyAr
PSBcCiAgICAgJCRQV0QvcXQvV2ViQ29yZVN1cHBvcnQvUGFnZUNsaWVudFF0LmggXAogICAgICQk
UFdEL3F0L1dlYkNvcmVTdXBwb3J0L1BvcHVwTWVudVF0LmggXAogICAgICQkUFdEL3F0L1dlYkNv
cmVTdXBwb3J0L1F0UGxhdGZvcm1QbHVnaW4uaCBcCi0gICAgJCRQV0QvcXQvV2ViQ29yZVN1cHBv
cnQvUmVuZGVyVGhlbWVRU3R5bGUuaCBcCi0gICAgJCRQV0QvcXQvV2ViQ29yZVN1cHBvcnQvU2Ny
b2xsYmFyVGhlbWVRU3R5bGUuaCBcCiAgICAgJCRQV0QvcXQvV2ViQ29yZVN1cHBvcnQvU2VhcmNo
UG9wdXBNZW51UXQuaCBcCiAgICAgJCRQV0QvcXQvV2ViQ29yZVN1cHBvcnQvVGV4dENoZWNrZXJD
bGllbnRRdC5oIFwKICAgICAkJFBXRC9xdC9XZWJDb3JlU3VwcG9ydC9QbGF0Zm9ybVN0cmF0ZWdp
ZXNRdC5oIFwKLSAgICAkJFBXRC9xdC9XZWJDb3JlU3VwcG9ydC9XZWJFdmVudENvbnZlcnNpb24u
aAorICAgICQkUFdEL3F0L1dlYkNvcmVTdXBwb3J0L1dlYkV2ZW50Q29udmVyc2lvbi5oIFwKKyAg
ICAkJFBXRC9xdC9XZWJDb3JlU3VwcG9ydC9RV2ViU3R5bGUuaAogCiBjb250YWlucyhRVF9DT05G
SUcsYWNjZXNzaWJpbGl0eSkgewogICAgIFNPVVJDRVMgKz0gJCRQV0QvcXQvQXBpL3F3ZWJ2aWV3
YWNjZXNzaWJsZS5jcHAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvcXQvV2ViQ29yZVN1cHBv
cnQvSW5pdFdlYkNvcmVRdC5jcHAgYi9Tb3VyY2UvV2ViS2l0L3F0L1dlYkNvcmVTdXBwb3J0L0lu
aXRXZWJDb3JlUXQuY3BwCmluZGV4IGM2M2NjYjA0MmIwNTQzMmNlOTUyZjU1MTllNTBhNTIzNDg5
N2U5YzEuLjY3ZWQxMDk4OTYzMGMzN2RjMjRlNzIzNjBiY2RjMTljNmQ3ZWRmZWUgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJLaXQvcXQvV2ViQ29yZVN1cHBvcnQvSW5pdFdlYkNvcmVRdC5jcHAKKysr
IGIvU291cmNlL1dlYktpdC9xdC9XZWJDb3JlU3VwcG9ydC9Jbml0V2ViQ29yZVF0LmNwcApAQCAt
MzMsNiArMzMsNyBAQAogI2luY2x1ZGUgIkltYWdlLmgiCiAjaW5jbHVkZSAiTm90SW1wbGVtZW50
ZWQuaCIKICNpbmNsdWRlICJQbGF0Zm9ybVN0cmF0ZWdpZXNRdC5oIgorI2luY2x1ZGUgIlFXZWJT
dHlsZS5oIgogI2luY2x1ZGUgIlJlbmRlclRoZW1lUVN0eWxlLmgiCiAjaW5jbHVkZSAiU2NyaXB0
Q29udHJvbGxlci5oIgogI2luY2x1ZGUgIlNjcm9sbGJhclRoZW1lUVN0eWxlLmgiCkBAIC03Niw2
ICs3Nyw3IEBAIHZvaWQgaW5pdGlhbGl6ZVdlYkNvcmVRdCgpCiAgICAgUGxhdGZvcm1TdHJhdGVn
aWVzUXQ6OmluaXRpYWxpemUoKTsKICAgICBRdFdlYkVsZW1lbnRSdW50aW1lOjppbml0aWFsaXpl
KCk7CiAKKyAgICBSZW5kZXJUaGVtZVFTdHlsZTo6c2V0U3R5bGVGYWN0b3J5RnVuY3Rpb24oV2Vi
S2l0OjpRV2ViU3R5bGU6OmNyZWF0ZSk7CiAgICAgUmVuZGVyVGhlbWVRdDo6c2V0Q3VzdG9tVGhl
bWUoUmVuZGVyVGhlbWVRU3R5bGU6OmNyZWF0ZSwgbmV3IFNjcm9sbGJhclRoZW1lUVN0eWxlKTsK
IAogI2lmIFVTRShRVEtJVCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvcXQvV2ViQ29yZVN1
cHBvcnQvUVdlYlN0eWxlLmNwcCBiL1NvdXJjZS9XZWJLaXQvcXQvV2ViQ29yZVN1cHBvcnQvUVdl
YlN0eWxlLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwLi4yZmY5ZWJiM2YwOTQ4YzliNWYyYmJlYTJmYmRlMWYzZjU3
NjgxNjZhCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYktpdC9xdC9XZWJDb3JlU3VwcG9y
dC9RV2ViU3R5bGUuY3BwCkBAIC0wLDAgKzEsNTQzIEBACisvKgorICogVGhpcyBmaWxlIGlzIHBh
cnQgb2YgdGhlIHRoZW1lIGltcGxlbWVudGF0aW9uIGZvciBmb3JtIGNvbnRyb2xzIGluIFdlYkNv
cmUuCisgKgorICogQ29weXJpZ2h0IChDKSAyMDEyIERpZ2lhIFBsYyBhbmQvb3IgaXRzIHN1YnNp
ZGlhcnkoLWllcykuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTEtMjAxMiBOb2tpYSBDb3Jwb3JhdGlv
biBhbmQvb3IgaXRzIHN1YnNpZGlhcnkoLWllcykuCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGZy
ZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0
IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAqIExp
Y2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhl
cgorICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBs
YXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUg
aG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZ
OyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElU
WSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiBM
aWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZ
b3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFs
IFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxl
IENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bworICogdGhlIEZyZWUgU29mdHdhcmUgRm91
bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKKyAqIEJvc3Rv
biwgTUEgMDIxMTAtMTMwMSwgVVNBLgorICoKKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisK
KyNpbmNsdWRlICJRV2ViU3R5bGUuaCIKKworI2luY2x1ZGUgPFFBcHBsaWNhdGlvbj4KKyNpbmNs
dWRlIDxRTGluZUVkaXQ+CisjaW5jbHVkZSA8UU1hY1N0eWxlPgorI2luY2x1ZGUgPFFQYWludGVy
PgorI2luY2x1ZGUgPFFQdXNoQnV0dG9uPgorI2lmbmRlZiBRVF9OT19TVFlMRV9QTEFTVElRVUUK
KyNpbmNsdWRlIDxRUGxhc3RpcXVlU3R5bGU+CisjZW5kaWYKKyNpbmNsdWRlIDxRU3R5bGVGYWN0
b3J5PgorI2luY2x1ZGUgPFFTdHlsZU9wdGlvbj4KKworI2luY2x1ZGUgPFFXZWJQYWdlQ2xpZW50
Lmg+CisKK3VzaW5nIG5hbWVzcGFjZSBXZWJDb3JlOworCituYW1lc3BhY2UgV2ViS2l0IHsKKwor
c3RhdGljIFFTdHlsZTo6U3RhdGUgY29udmVydFRvUVN0eWxlU3RhdGUoUVN0eWxlSW50ZXJmYWNl
OjpTdGF0ZSBzdGF0ZSkKK3sKKyAgICBRU3R5bGU6OlN0YXRlIHJlc3VsdDsKKyNkZWZpbmUgQ09O
VkVSVF9TVEFURShQcm94aWVkU3RhdGUsIFZhbHVlKSBcCisgICAgaWYgKHN0YXRlICYgUVN0eWxl
SW50ZXJmYWNlOjpQcm94aWVkU3RhdGUpIFwKKyAgICAgICAgcmVzdWx0IHw9IFFTdHlsZTo6UHJv
eGllZFN0YXRlOworCisgICAgRk9SX0VBQ0hfTUFQUEVEX1NUQVRFKENPTlZFUlRfU1RBVEUsICkK
KworI3VuZGVmIENPTlZFUlRfU1RBVEUKKworICAgIHJldHVybiByZXN1bHQ7Cit9CisKK3N0YXRp
YyBRU3R5bGU6OlN1YkNvbnRyb2wgY29udmVydFRvUVN0eWxlU3ViQ29udHJvbChRU3R5bGVJbnRl
cmZhY2U6OlN1YkNvbnRyb2wgc2MpCit7CisjZGVmaW5lIENPTlZFUlRfU1VCQ09OVFJPTChGLCBW
YWx1ZSkgXAorICAgIGNhc2UgUVN0eWxlSW50ZXJmYWNlOjpGOiByZXR1cm4gUVN0eWxlOjpGCisK
KyAgICBzd2l0Y2ggKHNjKSB7CisgICAgICAgIEZPUl9FQUNIX1NVQkNPTlRST0woQ09OVkVSVF9T
VUJDT05UUk9MLCBTRU1JQ09MT04pOworICAgIH0KKyAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsK
KyAgICByZXR1cm4gUVN0eWxlOjpTQ19Ob25lOworI3VuZGVmIENPTlZFUlRfU1VCQ09OVFJPTAor
fQorCitzdGF0aWMgdm9pZCBpbml0R2VuZXJpY1N0eWxlT3B0aW9uKFFTdHlsZU9wdGlvbiogb3B0
aW9uLCBRV2lkZ2V0KiB3aWRnZXQsIGNvbnN0IFFTdHlsZUludGVyZmFjZU9wdGlvbiYgaW50ZXJm
YWNlT3B0aW9uKQoreworICAgIGlmICh3aWRnZXQpCisgICAgICAgIG9wdGlvbi0+aW5pdCh3aWRn
ZXQpOworICAgIGVsc2UKKyAgICAgICAgLy8gSWYgYSB3aWRnZXQgaXMgbm90IGRpcmVjdGx5IGF2
YWlsYWJsZSBmb3IgcmVuZGVyaW5nLCB3ZSBmYWxsYmFjayB0byBkZWZhdWx0CisgICAgICAgIC8v
IHZhbHVlIGZvciBhbiBhY3RpdmUgd2lkZ2V0LgorICAgICAgICBvcHRpb24tPnN0YXRlID0gUVN0
eWxlOjpTdGF0ZV9BY3RpdmUgfCBRU3R5bGU6OlN0YXRlX0VuYWJsZWQ7CisKKyAgICBvcHRpb24t
PnJlY3QgPSBpbnRlcmZhY2VPcHRpb24ucmVjdDsKKyAgICBvcHRpb24tPnN0YXRlID0gY29udmVy
dFRvUVN0eWxlU3RhdGUoaW50ZXJmYWNlT3B0aW9uLnN0YXRlKTsKKyAgICBvcHRpb24tPmRpcmVj
dGlvbiA9IGludGVyZmFjZU9wdGlvbi5kaXJlY3Rpb247CisgICAgb3B0aW9uLT5wYWxldHRlID0g
aW50ZXJmYWNlT3B0aW9uLnBhbGV0dGU7Cit9CisKK3N0YXRpYyB2b2lkIGluaXRTcGVjaWZpY1N0
eWxlT3B0aW9uKFFTdHlsZU9wdGlvbiosIGNvbnN0IFFTdHlsZUludGVyZmFjZU9wdGlvbiYpCit7
Cit9CisKK3N0YXRpYyB2b2lkIGluaXRTcGVjaWZpY1N0eWxlT3B0aW9uKFFTdHlsZU9wdGlvblNs
aWRlciogc2xpZGVyT3B0aW9uLCBjb25zdCBRU3R5bGVJbnRlcmZhY2VPcHRpb24mIGludGVyZmFj
ZU9wdGlvbikKK3sKKyAgICBzbGlkZXJPcHRpb24tPm9yaWVudGF0aW9uID0gaW50ZXJmYWNlT3B0
aW9uLnNsaWRlci5vcmllbnRhdGlvbjsKKyAgICBzbGlkZXJPcHRpb24tPnVwc2lkZURvd24gPSBp
bnRlcmZhY2VPcHRpb24uc2xpZGVyLnVwc2lkZURvd247CisgICAgc2xpZGVyT3B0aW9uLT5taW5p
bXVtID0gaW50ZXJmYWNlT3B0aW9uLnNsaWRlci5taW5pbXVtOworICAgIHNsaWRlck9wdGlvbi0+
bWF4aW11bSA9IGludGVyZmFjZU9wdGlvbi5zbGlkZXIubWF4aW11bTsKKyAgICBzbGlkZXJPcHRp
b24tPnNsaWRlclBvc2l0aW9uID0gaW50ZXJmYWNlT3B0aW9uLnNsaWRlci5wb3NpdGlvbjsKKyAg
ICBzbGlkZXJPcHRpb24tPnNsaWRlclZhbHVlID0gaW50ZXJmYWNlT3B0aW9uLnNsaWRlci52YWx1
ZTsKKyAgICBzbGlkZXJPcHRpb24tPnNpbmdsZVN0ZXAgPSBpbnRlcmZhY2VPcHRpb24uc2xpZGVy
LnNpbmdsZVN0ZXA7CisgICAgc2xpZGVyT3B0aW9uLT5wYWdlU3RlcCA9IGludGVyZmFjZU9wdGlv
bi5zbGlkZXIucGFnZVN0ZXA7CisgICAgc2xpZGVyT3B0aW9uLT5hY3RpdmVTdWJDb250cm9scyA9
IGNvbnZlcnRUb1FTdHlsZVN1YkNvbnRyb2woaW50ZXJmYWNlT3B0aW9uLnNsaWRlci5hY3RpdmVT
dWJDb250cm9scyk7Cit9CisKK3RlbXBsYXRlIDx0eXBlbmFtZSBTdHlsZU9wdGlvbj4KK2NsYXNz
IE1hcHBlZFN0eWxlT3B0aW9uIDogcHVibGljIFN0eWxlT3B0aW9uIHsKKworcHVibGljOgorICAg
IE1hcHBlZFN0eWxlT3B0aW9uKFFXaWRnZXQqIHdpZGdldCwgY29uc3QgUVN0eWxlSW50ZXJmYWNl
T3B0aW9uJiBpbnRlcmZhY2VPcHRpb24pCisgICAgeworICAgICAgICBpbml0R2VuZXJpY1N0eWxl
T3B0aW9uKHRoaXMsIHdpZGdldCwgaW50ZXJmYWNlT3B0aW9uKTsKKyAgICAgICAgaW5pdFNwZWNp
ZmljU3R5bGVPcHRpb24odGhpcywgaW50ZXJmYWNlT3B0aW9uKTsKKyAgICB9Cit9OworCitzdGF0
aWMgUVN0eWxlOjpQaXhlbE1ldHJpYyBjb252ZXJ0UGl4ZWxNZXRyaWMoUVN0eWxlSW50ZXJmYWNl
OjpQaXhlbE1ldHJpYyBzdGF0ZSkKK3sKKyNkZWZpbmUgQ09OVkVSVF9NRVRSSUMoTWV0cmljKSBc
CisgICAgY2FzZSBRU3R5bGVJbnRlcmZhY2U6Ok1ldHJpYzogcmV0dXJuIFFTdHlsZTo6TWV0cmlj
CisKKyAgICBzd2l0Y2ggKHN0YXRlKSB7CisgICAgICAgIEZPUl9FQUNIX01BUFBFRF9NRVRSSUMo
Q09OVkVSVF9NRVRSSUMsIFNFTUlDT0xPTik7CisgICAgfQorICAgIEFTU0VSVF9OT1RfUkVBQ0hF
RCgpOworICAgIHJldHVybiBRU3R5bGU6OlBNX0N1c3RvbUJhc2U7CisKKyN1bmRlZiBDT05WRVJU
X01FVFJJQworfQorCitzdGF0aWMgUVN0eWxlSW50ZXJmYWNlOjpTdWJDb250cm9sIGNvbnZlcnRU
b1FTdHlsZUludGVyZmFjZVN1YkNvbnRyb2woUVN0eWxlOjpTdWJDb250cm9sIHNjKQoreworI2Rl
ZmluZSBDT05WRVJUX1NVQkNPTlRST0woRiwgVmFsdWUpIFwKKyAgICBjYXNlIFFTdHlsZTo6Rjog
cmV0dXJuIFFTdHlsZUludGVyZmFjZTo6RgorCisgICAgc3dpdGNoIChzYykgeworICAgICAgICBG
T1JfRUFDSF9TVUJDT05UUk9MKENPTlZFUlRfU1VCQ09OVFJPTCwgU0VNSUNPTE9OKTsKKyAgICB9
CisgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgcmV0dXJuIFFTdHlsZUludGVyZmFjZTo6
U0NfTm9uZTsKKyN1bmRlZiBDT05WRVJUX1NVQkNPTlRST0wKK30KKworUVdlYlN0eWxlOjpRV2Vi
U3R5bGUoUGFnZSogcGFnZSkKKyAgICA6IG1fcGFnZShwYWdlKQorICAgICwgbV9zdHlsZSgwKQor
eworICAgIG1fZmFsbGJhY2tTdHlsZSA9IFFTdHlsZUZhY3Rvcnk6OmNyZWF0ZShRTGF0aW4xU3Ry
aW5nKCJ3aW5kb3dzIikpOworICAgIG1fb3duRmFsbGJhY2tTdHlsZSA9IHRydWU7CisgICAgaWYg
KCFtX2ZhbGxiYWNrU3R5bGUpIHsKKyAgICAgICAgbV9mYWxsYmFja1N0eWxlID0gUUFwcGxpY2F0
aW9uOjpzdHlsZSgpOworICAgICAgICBtX293bkZhbGxiYWNrU3R5bGUgPSBmYWxzZTsKKyAgICB9
Cit9CisKK1FXZWJTdHlsZTo6flFXZWJTdHlsZSgpCit7CisgICAgaWYgKG1fb3duRmFsbGJhY2tT
dHlsZSkKKyAgICAgICAgZGVsZXRlIG1fZmFsbGJhY2tTdHlsZTsKK30KKworUVJlY3QgUVdlYlN0
eWxlOjpidXR0b25TdWJFbGVtZW50UmVjdChRU3R5bGVJbnRlcmZhY2U6OkJ1dHRvblN1YkVsZW1l
bnQgYnV0dG9uRWxlbWVudCwgU3RhdGUgc3RhdGUsIGNvbnN0IFFSZWN0JiBvcmlnaW5hbFJlY3Qp
IGNvbnN0Cit7CisgICAgZW5zdXJlU3R5bGUoKTsKKworICAgIFFTdHlsZU9wdGlvbkJ1dHRvbiBv
cHRpb247CisgICAgb3B0aW9uLnN0YXRlID0gY29udmVydFRvUVN0eWxlU3RhdGUoc3RhdGUpOwor
ICAgIG9wdGlvbi5yZWN0ID0gb3JpZ2luYWxSZWN0OworCisgICAgUVN0eWxlOjpTdWJFbGVtZW50
IHN1YkVsZW1lbnQgPSBRU3R5bGU6OlNFX0N1c3RvbUJhc2U7CisgICAgc3dpdGNoIChidXR0b25F
bGVtZW50KSB7CisgICAgY2FzZSBQdXNoQnV0dG9uTGF5b3V0SXRlbTogc3ViRWxlbWVudCA9IFFT
dHlsZTo6U0VfUHVzaEJ1dHRvbkxheW91dEl0ZW07IGJyZWFrOworICAgIGNhc2UgUHVzaEJ1dHRv
bkNvbnRlbnRzOiBzdWJFbGVtZW50ID0gUVN0eWxlOjpTRV9QdXNoQnV0dG9uQ29udGVudHM7IGJy
ZWFrOworICAgIGRlZmF1bHQ6IEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgIH0KKyAgICByZXR1
cm4gbV9zdHlsZS0+c3ViRWxlbWVudFJlY3Qoc3ViRWxlbWVudCwgJm9wdGlvbik7Cit9CisKK2lu
dCBRV2ViU3R5bGU6OmZpbmRGcmFtZUxpbmVXaWR0aCgpIGNvbnN0Cit7CisgICAgZW5zdXJlU3R5
bGUoKTsKKworICAgIGlmICghbV9saW5lRWRpdCkKKyAgICAgICAgbV9saW5lRWRpdC5yZXNldChu
ZXcgUUxpbmVFZGl0KCkpOworCisgICAgcmV0dXJuIG1fc3R5bGUtPnBpeGVsTWV0cmljKFFTdHls
ZTo6UE1fRGVmYXVsdEZyYW1lV2lkdGgsIDAsIG1fbGluZUVkaXQuZGF0YSgpKTsKK30KKworaW50
IFFXZWJTdHlsZTo6c2ltcGxlUGl4ZWxNZXRyaWMoUVN0eWxlSW50ZXJmYWNlOjpQaXhlbE1ldHJp
YyBtZXRyaWMsIFN0YXRlIHN0YXRlLCBRT2JqZWN0ICp3aWRnZXQpIGNvbnN0Cit7CisgICAgZW5z
dXJlU3R5bGUoKTsKKworICAgIFFTdHlsZU9wdGlvbiBvcHQ7CisgICAgb3B0LnN0YXRlID0gY29u
dmVydFRvUVN0eWxlU3RhdGUoc3RhdGUpOworICAgIHJldHVybiBtX3N0eWxlLT5waXhlbE1ldHJp
Yyhjb252ZXJ0UGl4ZWxNZXRyaWMobWV0cmljKSwgJm9wdCwgcW9iamVjdF9jYXN0PFFXaWRnZXQq
Pih3aWRnZXQpKTsKK30KKworaW50IFFXZWJTdHlsZTo6YnV0dG9uTWFyZ2luKFN0YXRlIHN0YXRl
LCBjb25zdCBRUmVjdCYgb3JpZ2luYWxSZWN0KSBjb25zdAoreworICAgIGVuc3VyZVN0eWxlKCk7
CisKKyAgICBRU3R5bGVPcHRpb25CdXR0b24gc3R5bGVPcHRpb247CisgICAgc3R5bGVPcHRpb24u
c3RhdGUgPSBjb252ZXJ0VG9RU3R5bGVTdGF0ZShzdGF0ZSk7CisgICAgc3R5bGVPcHRpb24ucmVj
dCA9IG9yaWdpbmFsUmVjdDsKKyAgICByZXR1cm4gbV9zdHlsZS0+cGl4ZWxNZXRyaWMoUVN0eWxl
OjpQTV9CdXR0b25NYXJnaW4sICZzdHlsZU9wdGlvbiwgMCk7Cit9CisKK2ludCBRV2ViU3R5bGU6
OnNsaWRlckxlbmd0aChRdDo6T3JpZW50YXRpb24gb3JpZW50YXRpb24pIGNvbnN0Cit7CisgICAg
ZW5zdXJlU3R5bGUoKTsKKworICAgIFFTdHlsZU9wdGlvblNsaWRlciBvcHQ7CisgICAgb3B0Lm9y
aWVudGF0aW9uID0gb3JpZW50YXRpb247CisgICAgcmV0dXJuIG1fc3R5bGUtPnBpeGVsTWV0cmlj
KFFTdHlsZTo6UE1fU2xpZGVyTGVuZ3RoLCAmb3B0KTsKK30KKworaW50IFFXZWJTdHlsZTo6c2xp
ZGVyVGhpY2tuZXNzKFF0OjpPcmllbnRhdGlvbiBvcmllbnRhdGlvbikgY29uc3QKK3sKKyAgICBl
bnN1cmVTdHlsZSgpOworCisgICAgUVN0eWxlT3B0aW9uU2xpZGVyIG9wdDsKKyAgICBvcHQub3Jp
ZW50YXRpb24gPSBvcmllbnRhdGlvbjsKKyAgICByZXR1cm4gbV9zdHlsZS0+cGl4ZWxNZXRyaWMo
UVN0eWxlOjpQTV9TbGlkZXJUaGlja25lc3MsICZvcHQpOworfQorCitpbnQgUVdlYlN0eWxlOjpw
cm9ncmVzc0JhckNodW5rV2lkdGgoY29uc3QgUVNpemUmIHNpemUpIGNvbnN0Cit7CisgICAgZW5z
dXJlU3R5bGUoKTsKKworICAgIFFTdHlsZU9wdGlvblByb2dyZXNzQmFyVjIgb3B0aW9uOworICAg
IG9wdGlvbi5yZWN0LnNldFNpemUoc2l6ZSk7CisgICAgLy8gRklYTUU6IFVudGlsIGh0dHA6Ly9i
dWdyZXBvcnRzLnF0Lm5va2lhLmNvbS9icm93c2UvUVRCVUctOTE3MSBpcyBmaXhlZCwKKyAgICAv
LyB3ZSBzaW11bGF0ZSBvbmUgc3F1YXJlIGFuaW1hdGluZyBhY3Jvc3MgdGhlIHByb2dyZXNzIGJh
ci4KKyAgICByZXR1cm4gbV9zdHlsZS0+cGl4ZWxNZXRyaWMoUVN0eWxlOjpQTV9Qcm9ncmVzc0Jh
ckNodW5rV2lkdGgsICZvcHRpb24pOworfQorCit2b2lkIFFXZWJTdHlsZTo6Z2V0QnV0dG9uTWV0
cmljcyhRU3RyaW5nICpidXR0b25Gb250RmFtaWx5LCBpbnQgKmJ1dHRvbkZvbnRQaXhlbFNpemUp
IGNvbnN0Cit7CisgICAgUVB1c2hCdXR0b24gYnV0dG9uOworICAgIFFGb250IGRlZmF1bHRCdXR0
b25Gb250ID0gUUFwcGxpY2F0aW9uOjpmb250KCZidXR0b24pOworICAgICpidXR0b25Gb250RmFt
aWx5ID0gZGVmYXVsdEJ1dHRvbkZvbnQuZmFtaWx5KCk7CisgICAgKmJ1dHRvbkZvbnRQaXhlbFNp
emUgPSAwOworI2lmZGVmIFFfV1NfTUFDCisgICAgYnV0dG9uLnNldEF0dHJpYnV0ZShRdDo6V0Ff
TWFjU21hbGxTaXplKTsKKyAgICBRRm9udEluZm8gZm9udEluZm8oZGVmYXVsdEJ1dHRvbkZvbnQp
OworICAgICpidXR0b25Gb250UGl4ZWxTaXplID0gZm9udEluZm8ucGl4ZWxTaXplKCk7CisjZW5k
aWYKK30KKworUVNpemUgUVdlYlN0eWxlOjpzaXplRnJvbUNvbnRlbnRzKFFTdHlsZUludGVyZmFj
ZTo6Q29udGVudHNUeXBlIHR5cGUsIFFTdHlsZUludGVyZmFjZTo6U3RhdGUgc3RhdGUsIGNvbnN0
IFFTaXplJiBjb250ZW50c1NpemUpIGNvbnN0Cit7CisgICAgZW5zdXJlU3R5bGUoKTsKKworICAg
IFFTdHlsZU9wdGlvbiBvcHQ7CisgICAgb3B0LnN0YXRlID0gY29udmVydFRvUVN0eWxlU3RhdGUo
c3RhdGUpOworCisgICAgUVN0eWxlOjpDb250ZW50c1R5cGUgY29udGVudHNUeXBlID0gUVN0eWxl
OjpDVF9DdXN0b21CYXNlOworICAgIHN3aXRjaCAodHlwZSkgeworICAgIGNhc2UgUVN0eWxlSW50
ZXJmYWNlOjpDVF9Db21ib0JveDogY29udGVudHNUeXBlID0gUVN0eWxlOjpDVF9Db21ib0JveDsg
YnJlYWs7CisgICAgY2FzZSBRU3R5bGVJbnRlcmZhY2U6OkNUX1B1c2hCdXR0b246IGNvbnRlbnRz
VHlwZSA9IFFTdHlsZTo6Q1RfUHVzaEJ1dHRvbjsgYnJlYWs7CisgICAgfQorCisgICAgcmV0dXJu
IG1fc3R5bGUtPnNpemVGcm9tQ29udGVudHMoY29udGVudHNUeXBlLCAmb3B0LCBjb250ZW50c1Np
emUpOworfQorCit2b2lkIFFXZWJTdHlsZTo6cGFpbnRCdXR0b24oUVBhaW50ZXIqIHBhaW50ZXIs
IFFTdHlsZUludGVyZmFjZTo6QnV0dG9uVHlwZSB0eXBlLCBjb25zdCBRU3R5bGVJbnRlcmZhY2VP
cHRpb24gJnByb3h5T3B0aW9uLCBRT2JqZWN0ICp3aWRnZXRPYmopCit7CisgICAgZW5zdXJlU3R5
bGUoKTsKKworICAgIFFXaWRnZXQqIHdpZGdldCA9IHFvYmplY3RfY2FzdDxRV2lkZ2V0Kj4od2lk
Z2V0T2JqKTsKKyAgICBNYXBwZWRTdHlsZU9wdGlvbjxRU3R5bGVPcHRpb25CdXR0b24+IG9wdGlv
bih3aWRnZXQsIHByb3h5T3B0aW9uKTsKKworICAgIGlmICh0eXBlID09IFB1c2hCdXR0b24pIHsK
KyAgICAgICAgbV9zdHlsZS0+ZHJhd0NvbnRyb2woUVN0eWxlOjpDRV9QdXNoQnV0dG9uLCAmb3B0
aW9uLCBwYWludGVyLCB3aWRnZXQpOworICAgIH0gZWxzZSBpZiAodHlwZSA9PSBSYWRpb0J1dHRv
bikKKyAgICAgICBtX3N0eWxlLT5kcmF3Q29udHJvbChRU3R5bGU6OkNFX1JhZGlvQnV0dG9uLCAm
b3B0aW9uLCBwYWludGVyLCB3aWRnZXQpOworICAgIGVsc2UgaWYgKHR5cGUgPT0gQ2hlY2tCb3gp
CisgICAgICAgIG1fc3R5bGUtPmRyYXdDb250cm9sKFFTdHlsZTo6Q0VfQ2hlY2tCb3gsICZvcHRp
b24sIHBhaW50ZXIsIHdpZGdldCk7Cit9CisKK3ZvaWQgUVdlYlN0eWxlOjpwYWludFRleHRGaWVs
ZChRUGFpbnRlciAqcGFpbnRlciwgY29uc3QgUVN0eWxlSW50ZXJmYWNlT3B0aW9uICZwcm94eU9w
dGlvbiwgUU9iamVjdCAqd2lkZ2V0T2JqKQoreworICAgIGVuc3VyZVN0eWxlKCk7CisKKyAgICBR
V2lkZ2V0KiB3aWRnZXQgPSBxb2JqZWN0X2Nhc3Q8UVdpZGdldCo+KHdpZGdldE9iaik7CisKKyAg
ICBNYXBwZWRTdHlsZU9wdGlvbjxRU3R5bGVPcHRpb25GcmFtZVYyPiBwYW5lbCh3aWRnZXQsIHBy
b3h5T3B0aW9uKTsKKworICAgIHBhbmVsLmxpbmVXaWR0aCA9IGZpbmRGcmFtZUxpbmVXaWR0aCgp
OworICAgIHBhbmVsLmZlYXR1cmVzID0gUVN0eWxlT3B0aW9uRnJhbWVWMjo6Tm9uZTsKKworICAg
IG1fc3R5bGUtPmRyYXdQcmltaXRpdmUoUVN0eWxlOjpQRV9QYW5lbExpbmVFZGl0LCAmcGFuZWws
IHBhaW50ZXIsIHdpZGdldCk7Cit9CisKK3ZvaWQgUVdlYlN0eWxlOjpwYWludENvbWJvQm94KFFQ
YWludGVyICpwYWludGVyLCBjb25zdCBRU3R5bGVJbnRlcmZhY2VPcHRpb24gJnByb3h5T3B0aW9u
LCBRT2JqZWN0KiB3aWRnZXRPYmopCit7CisgICAgZW5zdXJlU3R5bGUoKTsKKyAgICBRV2lkZ2V0
KiB3aWRnZXQgPSBxb2JqZWN0X2Nhc3Q8UVdpZGdldCo+KHdpZGdldE9iaik7CisKKyAgICBNYXBw
ZWRTdHlsZU9wdGlvbjxRU3R5bGVPcHRpb25Db21ib0JveD4gb3B0KHdpZGdldCwgcHJveHlPcHRp
b24pOworCisgICAgSW50UmVjdCByZWN0ID0gb3B0LnJlY3Q7CisKKyNpZiBkZWZpbmVkKFFfV1Nf
TUFDKSAmJiAhZGVmaW5lZChRVF9OT19TVFlMRV9NQUMpCisgICAgLy8gUU1hY1N0eWxlIG1ha2Vz
IHRoZSBjb21ibyBib3hlcyBhIGxpdHRsZSBiaXQgc21hbGxlciB0byBsZWF2ZSBzcGFjZSBmb3Ig
dGhlIGZvY3VzIHJlY3QuCisgICAgLy8gQmVjYXVzZSBvZiBpdCwgdGhlIGNvbWJvIGJ1dHRvbiBp
cyBkcmF3biBhdCBhIHBvaW50IHRvIHRoZSBsZWZ0IG9mIHdoZXJlIGl0IHdhcyBleHBlY3QgdG8g
YmUgYW5kIG1heSBlbmQgdXAKKyAgICAvLyBvdmVybGFwcGVkIHdpdGggdGhlIHRleHQuIFRoaXMg
d2lsbCBmb3JjZSBRTWFjU3R5bGUgdG8gZHJhdyB0aGUgY29tYm8gYm94IHdpdGggdGhlIGV4cGVj
dGVkIHdpZHRoLgorICAgIGlmIChxb2JqZWN0X2Nhc3Q8UU1hY1N0eWxlKj4obV9zdHlsZSkpCisg
ICAgICAgIHJlY3QuaW5mbGF0ZVgoMyk7CisjZW5kaWYKKworICAgIGNvbnN0IFFQb2ludCB0b3BM
ZWZ0ID0gcmVjdC5sb2NhdGlvbigpOworICAgIHBhaW50ZXItPnRyYW5zbGF0ZSh0b3BMZWZ0KTsK
KyAgICBvcHQucmVjdC5tb3ZlVG8oUVBvaW50KDAsIDApKTsKKyAgICBvcHQucmVjdC5zZXRTaXpl
KHJlY3Quc2l6ZSgpKTsKKworICAgIG1fc3R5bGUtPmRyYXdDb21wbGV4Q29udHJvbChRU3R5bGU6
OkNDX0NvbWJvQm94LCAmb3B0LCBwYWludGVyLCB3aWRnZXQpOworICAgIHBhaW50ZXItPnRyYW5z
bGF0ZSgtdG9wTGVmdCk7Cit9CisKK3ZvaWQgUVdlYlN0eWxlOjpwYWludENvbWJvQm94QXJyb3co
UVBhaW50ZXIgKnBhaW50ZXIsIGNvbnN0IFFTdHlsZUludGVyZmFjZU9wdGlvbiAmcHJveHlPcHRp
b24sIFFPYmplY3QgKndpZGdldE9iaikKK3sKKyAgICBlbnN1cmVTdHlsZSgpOworICAgIFFXaWRn
ZXQqIHdpZGdldCA9IHFvYmplY3RfY2FzdDxRV2lkZ2V0Kj4od2lkZ2V0T2JqKTsKKworICAgIE1h
cHBlZFN0eWxlT3B0aW9uPFFTdHlsZU9wdGlvbkNvbWJvQm94PiBvcHQod2lkZ2V0LCBwcm94eU9w
dGlvbik7CisgICAgb3B0LnN1YkNvbnRyb2xzID0gUVN0eWxlOjpTQ19Db21ib0JveEFycm93Owor
ICAgIC8vIGZvciBkcmF3aW5nIHRoZSBjb21ibyBib3ggYXJyb3csIHJlbHkgb25seSBvbiB0aGUg
ZmFsbGJhY2sgc3R5bGUKKyAgICBtX2ZhbGxiYWNrU3R5bGUtPmRyYXdDb21wbGV4Q29udHJvbChR
U3R5bGU6OkNDX0NvbWJvQm94LCAmb3B0LCBwYWludGVyLCB3aWRnZXQpOworfQorCit2b2lkIFFX
ZWJTdHlsZTo6cGFpbnRTbGlkZXJUcmFjayhRUGFpbnRlciogcGFpbnRlciwgY29uc3QgUVN0eWxl
SW50ZXJmYWNlT3B0aW9uJiBwcm94eU9wdGlvbiwgUU9iamVjdCAqd2lkZ2V0T2JqKQoreworICAg
IGVuc3VyZVN0eWxlKCk7CisgICAgUVdpZGdldCogd2lkZ2V0ID0gcW9iamVjdF9jYXN0PFFXaWRn
ZXQqPih3aWRnZXRPYmopOworCisgICAgTWFwcGVkU3R5bGVPcHRpb248UVN0eWxlT3B0aW9uU2xp
ZGVyPiBvcHRpb24od2lkZ2V0LCBwcm94eU9wdGlvbik7CisgICAgb3B0aW9uLnN1YkNvbnRyb2xz
ID0gUVN0eWxlOjpTQ19TbGlkZXJHcm9vdmU7CisKKyAgICBvcHRpb24udXBzaWRlRG93biA9IHBy
b3h5T3B0aW9uLnNsaWRlci51cHNpZGVEb3duOworICAgIG9wdGlvbi5taW5pbXVtID0gcHJveHlP
cHRpb24uc2xpZGVyLm1pbmltdW07CisgICAgb3B0aW9uLm1heGltdW0gPSBwcm94eU9wdGlvbi5z
bGlkZXIubWF4aW11bTsKKyAgICBvcHRpb24uc2xpZGVyUG9zaXRpb24gPSBwcm94eU9wdGlvbi5z
bGlkZXIucG9zaXRpb247CisgICAgb3B0aW9uLm9yaWVudGF0aW9uID0gcHJveHlPcHRpb24uc2xp
ZGVyLm9yaWVudGF0aW9uOworCisgICAgbV9zdHlsZS0+ZHJhd0NvbXBsZXhDb250cm9sKFFTdHls
ZTo6Q0NfU2xpZGVyLCAmb3B0aW9uLCBwYWludGVyLCB3aWRnZXQpOworCisgICAgaWYgKG9wdGlv
bi5zdGF0ZSAmIFFTdHlsZTo6U3RhdGVfSGFzRm9jdXMpIHsKKyAgICAgICAgUVN0eWxlT3B0aW9u
Rm9jdXNSZWN0IGZvY3VzT3B0aW9uOworICAgICAgICBmb2N1c09wdGlvbi5yZWN0ID0gb3B0aW9u
LnJlY3Q7CisgICAgICAgIG1fc3R5bGUtPmRyYXdQcmltaXRpdmUoUVN0eWxlOjpQRV9GcmFtZUZv
Y3VzUmVjdCwgJmZvY3VzT3B0aW9uLCBwYWludGVyLCB3aWRnZXQpOworICAgIH0KK30KKwordm9p
ZCBRV2ViU3R5bGU6OnBhaW50U2xpZGVyVGh1bWIoUVBhaW50ZXIqIHBhaW50ZXIsIGNvbnN0IFFT
dHlsZUludGVyZmFjZU9wdGlvbiYgcHJveHlPcHRpb24sIFFPYmplY3QgKndpZGdldE9iaikKK3sK
KyAgICBlbnN1cmVTdHlsZSgpOworICAgIFFXaWRnZXQqIHdpZGdldCA9IHFvYmplY3RfY2FzdDxR
V2lkZ2V0Kj4od2lkZ2V0T2JqKTsKKworICAgIE1hcHBlZFN0eWxlT3B0aW9uPFFTdHlsZU9wdGlv
blNsaWRlcj4gb3B0aW9uKHdpZGdldCwgcHJveHlPcHRpb24pOworCisgICAgb3B0aW9uLnN1YkNv
bnRyb2xzID0gUVN0eWxlOjpTQ19TbGlkZXJIYW5kbGU7CisgICAgaWYgKG9wdGlvbi5zdGF0ZSAm
IFFTdHlsZTo6U3RhdGVfU3Vua2VuKQorICAgICAgICBvcHRpb24uYWN0aXZlU3ViQ29udHJvbHMg
PSBRU3R5bGU6OlNDX1NsaWRlckhhbmRsZTsKKworICAgIG1fc3R5bGUtPmRyYXdDb21wbGV4Q29u
dHJvbChRU3R5bGU6OkNDX1NsaWRlciwgJm9wdGlvbiwgcGFpbnRlciwgd2lkZ2V0KTsKK30KKwor
dm9pZCBRV2ViU3R5bGU6OnBhaW50SW5uZXJTcGluQnV0dG9uKFFQYWludGVyKiBwYWludGVyLCBj
b25zdCBRU3R5bGVJbnRlcmZhY2VPcHRpb24mIHByb3h5T3B0aW9uLCBib29sIHNwaW5Cb3hVcCwg
UU9iamVjdCogd2lkZ2V0T2JqKQoreworICAgIGVuc3VyZVN0eWxlKCk7CisgICAgUVdpZGdldCog
d2lkZ2V0ID0gcW9iamVjdF9jYXN0PFFXaWRnZXQqPih3aWRnZXRPYmopOworCisgICAgTWFwcGVk
U3R5bGVPcHRpb248UVN0eWxlT3B0aW9uU3BpbkJveD4gb3B0aW9uKHdpZGdldCwgcHJveHlPcHRp
b24pOworCisgICAgb3B0aW9uLnN1YkNvbnRyb2xzID0gUVN0eWxlOjpTQ19TcGluQm94VXAgfCBR
U3R5bGU6OlNDX1NwaW5Cb3hEb3duOworICAgIGlmICghKG9wdGlvbi5zdGF0ZSAmIFFTdHlsZTo6
U3RhdGVfUmVhZE9ubHkpKSB7CisgICAgICAgIGlmIChvcHRpb24uc3RhdGUgJiBRU3R5bGU6OlN0
YXRlX0VuYWJsZWQpCisgICAgICAgICAgICBvcHRpb24uc3RlcEVuYWJsZWQgPSBRQWJzdHJhY3RT
cGluQm94OjpTdGVwVXBFbmFibGVkIHwgUUFic3RyYWN0U3BpbkJveDo6U3RlcERvd25FbmFibGVk
OworICAgICAgICBpZiAob3B0aW9uLnN0YXRlICYgUVN0eWxlOjpTdGF0ZV9TdW5rZW4pIHsKKyAg
ICAgICAgICAgIGlmIChzcGluQm94VXApCisgICAgICAgICAgICAgICAgb3B0aW9uLmFjdGl2ZVN1
YkNvbnRyb2xzID0gUVN0eWxlOjpTQ19TcGluQm94VXA7CisgICAgICAgICAgICBlbHNlCisgICAg
ICAgICAgICAgICAgb3B0aW9uLmFjdGl2ZVN1YkNvbnRyb2xzID0gUVN0eWxlOjpTQ19TcGluQm94
RG93bjsKKyAgICAgICAgfQorICAgIH0KKworICAgIEludFJlY3QgYnV0dG9uUmVjdCA9IG9wdGlv
bi5yZWN0OworICAgIC8vIERlZmF1bHQgdG8gbW92aW5nIHRoZSBidXR0b25zIGEgbGl0dGxlIGJp
dCB3aXRoaW4gdGhlIGVkaXRvciBmcmFtZS4KKyAgICBpbnQgaW5mbGF0ZVggPSAtMjsKKyAgICBp
bnQgaW5mbGF0ZVkgPSAtMjsKKyNpZiBkZWZpbmVkKFFfV1NfTUFDKSAmJiAhZGVmaW5lZChRVF9O
T19TVFlMRV9NQUMpCisgICAgLy8gUU1hY1N0eWxlIHdpbGwgcG9zaXRpb24gdGhlIGFxdWEgYnV0
dG9ucyBmbHVzaCB0byB0aGUgcmlnaHQuCisgICAgLy8gVGhpcyB3aWxsIG1vdmUgdGhlbSBtb3Jl
IHdpdGhpbiB0aGUgY29udHJvbCBmb3IgYmV0dGVyIHN0eWxlLCBhIGxhCisgICAgLy8gQ2hyb21p
dW0gbG9vayAmIGZlZWwuCisgICAgaWYgKHFvYmplY3RfY2FzdDxRTWFjU3R5bGUqPihtX3N0eWxl
KSkgeworICAgICAgICBpbmZsYXRlWCA9IC00OworICAgICAgICAvLyBSZW5kZXIgbWluaSBhcXVh
IHNwaW4gYnV0dG9ucyBmb3IgUU1hY1N0eWxlIHRvIGZpdCBuaWNlbHkgaW50bworICAgICAgICAv
LyB0aGUgZWRpdG9yIGFyZWEsIGxpa2UgQ2hyb21pdW0uCisgICAgICAgIG9wdGlvbi5zdGF0ZSB8
PSBRU3R5bGU6OlN0YXRlX01pbmk7CisgICAgfQorI2VuZGlmCisjaWYgIWRlZmluZWQoUVRfTk9f
U1RZTEVfUExBU1RJUVVFKQorICAgIC8vIFFQbGFzdGlxdWVTdHlsZSBsb29rcyBiZXN0IHdoZW4g
dGhlIHNwaW4gYnV0dG9ucyBhcmUgZmx1c2ggd2l0aCB0aGUgZnJhbWUncyBlZGdlLgorICAgIGlm
IChxb2JqZWN0X2Nhc3Q8UVBsYXN0aXF1ZVN0eWxlKj4obV9zdHlsZSkpIHsKKyAgICAgICAgaW5m
bGF0ZVggPSAwOworICAgICAgICBpbmZsYXRlWSA9IDA7CisgICAgfQorI2VuZGlmCisKKyAgICBi
dXR0b25SZWN0LmluZmxhdGVYKGluZmxhdGVYKTsKKyAgICBidXR0b25SZWN0LmluZmxhdGVZKGlu
ZmxhdGVZKTsKKyAgICBvcHRpb24ucmVjdCA9IGJ1dHRvblJlY3Q7CisKKyAgICBtX3N0eWxlLT5k
cmF3Q29tcGxleENvbnRyb2woUVN0eWxlOjpDQ19TcGluQm94LCAmb3B0aW9uLCBwYWludGVyLCB3
aWRnZXQpOworfQorCit2b2lkIFFXZWJTdHlsZTo6cGFpbnRQcm9ncmVzc0JhcihRUGFpbnRlciog
cGFpbnRlciwgY29uc3QgUVN0eWxlSW50ZXJmYWNlT3B0aW9uJiBwcm94eU9wdGlvbiwgZG91Ymxl
IHByb2dyZXNzLCBkb3VibGUgYW5pbWF0aW9uUHJvZ3Jlc3MsIFFPYmplY3QgKndpZGdldE9iaikK
K3sKKyAgICBlbnN1cmVTdHlsZSgpOworICAgIFFXaWRnZXQqIHdpZGdldCA9IHFvYmplY3RfY2Fz
dDxRV2lkZ2V0Kj4od2lkZ2V0T2JqKTsKKworICAgIE1hcHBlZFN0eWxlT3B0aW9uPFFTdHlsZU9w
dGlvblByb2dyZXNzQmFyVjI+IG9wdGlvbih3aWRnZXQsIHByb3h5T3B0aW9uKTsKKworICAgIG9w
dGlvbi5tYXhpbXVtID0gc3RkOjpudW1lcmljX2xpbWl0czxpbnQ+OjptYXgoKTsKKyAgICBvcHRp
b24ubWluaW11bSA9IDA7CisgICAgb3B0aW9uLnByb2dyZXNzID0gcHJvZ3Jlc3MgKiBzdGQ6Om51
bWVyaWNfbGltaXRzPGludD46Om1heCgpOworCisgICAgY29uc3QgUVBvaW50IHRvcExlZnQgPSBv
cHRpb24ucmVjdC50b3BMZWZ0KCk7CisgICAgcGFpbnRlci0+dHJhbnNsYXRlKHRvcExlZnQpOwor
ICAgIG9wdGlvbi5yZWN0Lm1vdmVUbyhRUG9pbnQoMCwgMCkpOworCisgICAgaWYgKHByb2dyZXNz
IDwgMCkgeworICAgICAgICAvLyBGSVhNRTogVW50aWwgaHR0cDovL2J1Z3JlcG9ydHMucXQubm9r
aWEuY29tL2Jyb3dzZS9RVEJVRy05MTcxIGlzIGZpeGVkLAorICAgICAgICAvLyB3ZSBzaW11bGF0
ZSBvbmUgc3F1YXJlIGFuaW1hdGluZyBhY3Jvc3MgdGhlIHByb2dyZXNzIGJhci4KKyAgICAgICAg
bV9zdHlsZS0+ZHJhd0NvbnRyb2woUVN0eWxlOjpDRV9Qcm9ncmVzc0Jhckdyb292ZSwgJm9wdGlv
biwgcGFpbnRlciwgd2lkZ2V0KTsKKyAgICAgICAgaW50IGNodW5rV2lkdGggPSBtX3N0eWxlLT5w
aXhlbE1ldHJpYyhRU3R5bGU6OlBNX1Byb2dyZXNzQmFyQ2h1bmtXaWR0aCwgJm9wdGlvbik7Cisg
ICAgICAgIFFDb2xvciBjb2xvciA9IChvcHRpb24ucGFsZXR0ZS5oaWdobGlnaHQoKSA9PSBvcHRp
b24ucGFsZXR0ZS5iYWNrZ3JvdW5kKCkpID8gb3B0aW9uLnBhbGV0dGUuY29sb3IoUVBhbGV0dGU6
OkFjdGl2ZSwgUVBhbGV0dGU6OkhpZ2hsaWdodCkgOiBvcHRpb24ucGFsZXR0ZS5jb2xvcihRUGFs
ZXR0ZTo6SGlnaGxpZ2h0KTsKKyAgICAgICAgaWYgKG9wdGlvbi5kaXJlY3Rpb24gPT0gUXQ6OlJp
Z2h0VG9MZWZ0KQorICAgICAgICAgICAgcGFpbnRlci0+ZmlsbFJlY3Qob3B0aW9uLnJlY3Qucmln
aHQoKSAtIGNodW5rV2lkdGggIC0gYW5pbWF0aW9uUHJvZ3Jlc3MgKiBvcHRpb24ucmVjdC53aWR0
aCgpLCAwLCBjaHVua1dpZHRoLCBvcHRpb24ucmVjdC5oZWlnaHQoKSwgY29sb3IpOworICAgICAg
ICBlbHNlCisgICAgICAgICAgICBwYWludGVyLT5maWxsUmVjdChhbmltYXRpb25Qcm9ncmVzcyAq
IG9wdGlvbi5yZWN0LndpZHRoKCksIDAsIGNodW5rV2lkdGgsIG9wdGlvbi5yZWN0LmhlaWdodCgp
LCBjb2xvcik7CisgICAgfSBlbHNlCisgICAgICAgIG1fc3R5bGUtPmRyYXdDb250cm9sKFFTdHls
ZTo6Q0VfUHJvZ3Jlc3NCYXIsICZvcHRpb24sIHBhaW50ZXIsIHdpZGdldCk7CisKKyAgICBwYWlu
dGVyLT50cmFuc2xhdGUoLXRvcExlZnQpOworfQorCitpbnQgUVdlYlN0eWxlOjpzY3JvbGxCYXJF
eHRlbnQoYm9vbCBtaW5pKQoreworICAgIGVuc3VyZVN0eWxlKCk7CisKKyAgICBRU3R5bGVPcHRp
b25TbGlkZXIgbzsKKyAgICBvLm9yaWVudGF0aW9uID0gUXQ6OlZlcnRpY2FsOworICAgIG8uc3Rh
dGUgJj0gflFTdHlsZTo6U3RhdGVfSG9yaXpvbnRhbDsKKyAgICBpZiAobWluaSkKKyAgICAgICAg
by5zdGF0ZSB8PSBRU3R5bGU6OlN0YXRlX01pbmk7CisgICAgcmV0dXJuIG1fc3R5bGUtPnBpeGVs
TWV0cmljKFFTdHlsZTo6UE1fU2Nyb2xsQmFyRXh0ZW50LCAmbywgMCk7Cit9CisKK2Jvb2wgUVdl
YlN0eWxlOjpzY3JvbGxCYXJNaWRkbGVDbGlja0Fic29sdXRlUG9zaXRpb25TdHlsZUhpbnQoKSBj
b25zdAoreworICAgIGVuc3VyZVN0eWxlKCk7CisgICAgcmV0dXJuIG1fc3R5bGUtPnN0eWxlSGlu
dChRU3R5bGU6OlNIX1Njcm9sbEJhcl9NaWRkbGVDbGlja0Fic29sdXRlUG9zaXRpb24pOworfQor
Cit2b2lkIFFXZWJTdHlsZTo6cGFpbnRTY3JvbGxDb3JuZXIoUVBhaW50ZXIqIHBhaW50ZXIsIGNv
bnN0IFFSZWN0JiByZWN0LCBRT2JqZWN0KiB3aWRnZXRPYmopCit7CisgICAgZW5zdXJlU3R5bGUo
KTsKKyAgICBRV2lkZ2V0KiB3aWRnZXQgPSBxb2JqZWN0X2Nhc3Q8UVdpZGdldCo+KHdpZGdldE9i
aik7CisKKyAgICBRU3R5bGVPcHRpb24gb3B0aW9uOworICAgIG9wdGlvbi5yZWN0ID0gcmVjdDsK
KyAgICBtX3N0eWxlLT5kcmF3UHJpbWl0aXZlKFFTdHlsZTo6UEVfUGFuZWxTY3JvbGxBcmVhQ29y
bmVyLCAmb3B0aW9uLCBwYWludGVyLCB3aWRnZXQpOworfQorCitRU3R5bGVJbnRlcmZhY2U6OlN1
YkNvbnRyb2wgUVdlYlN0eWxlOjpoaXRUZXN0U2Nyb2xsQmFyKGNvbnN0IFFTdHlsZUludGVyZmFj
ZU9wdGlvbiAmcHJveHlPcHRpb24sIGNvbnN0IFFQb2ludCAmcG9zKQoreworICAgIGVuc3VyZVN0
eWxlKCk7CisgICAgTWFwcGVkU3R5bGVPcHRpb248UVN0eWxlT3B0aW9uU2xpZGVyPiBvcHQoMCwg
cHJveHlPcHRpb24pOworICAgIFFTdHlsZTo6U3ViQ29udHJvbCBzYyA9IG1fc3R5bGUtPmhpdFRl
c3RDb21wbGV4Q29udHJvbChRU3R5bGU6OkNDX1Njcm9sbEJhciwgJm9wdCwgcG9zLCAwKTsKKyAg
ICByZXR1cm4gY29udmVydFRvUVN0eWxlSW50ZXJmYWNlU3ViQ29udHJvbChzYyk7Cit9CisKK1FS
ZWN0IFFXZWJTdHlsZTo6c2Nyb2xsQmFyU3ViQ29udHJvbFJlY3QoY29uc3QgUVN0eWxlSW50ZXJm
YWNlT3B0aW9uICZwcm94eU9wdGlvbiwgUVN0eWxlSW50ZXJmYWNlOjpTdWJDb250cm9sIHN1YkNv
bnRyb2wpCit7CisgICAgZW5zdXJlU3R5bGUoKTsKKyAgICBNYXBwZWRTdHlsZU9wdGlvbjxRU3R5
bGVPcHRpb25TbGlkZXI+IG9wdCgwLCBwcm94eU9wdGlvbik7CisgICAgcmV0dXJuIG1fc3R5bGUt
PnN1YkNvbnRyb2xSZWN0KFFTdHlsZTo6Q0NfU2Nyb2xsQmFyLCAmb3B0LCBjb252ZXJ0VG9RU3R5
bGVTdWJDb250cm9sKHN1YkNvbnRyb2wpLCAwKTsKK30KKwordm9pZCBRV2ViU3R5bGU6OnBhaW50
U2Nyb2xsQmFyKFFQYWludGVyICpwYWludGVyLCBjb25zdCBRU3R5bGVJbnRlcmZhY2VPcHRpb24g
JnByb3h5T3B0aW9uLCBRT2JqZWN0ICp3aWRnZXRPYmopCit7CisgICAgZW5zdXJlU3R5bGUoKTsK
KyAgICBRV2lkZ2V0KiB3aWRnZXQgPSBxb2JqZWN0X2Nhc3Q8UVdpZGdldCo+KHdpZGdldE9iaik7
CisKKyAgICBNYXBwZWRTdHlsZU9wdGlvbjxRU3R5bGVPcHRpb25TbGlkZXI+IG9wdCh3aWRnZXQs
IHByb3h5T3B0aW9uKTsKKworI2lmZGVmIFFfV1NfTUFDCisgICAgLy8gRklYTUU6IFdlIGFsc28g
bmVlZCB0byBjaGVjayB0aGUgd2lkZ2V0IHN0eWxlIGJ1dCB0b2RheSBTY3JvbGxiYXJUaGVtZSBp
cyBub3QgYXdhcmUgb2YgdGhlIHBhZ2Ugc28gd2UKKyAgICAvLyBjYW4ndCBnZXQgdGhlIHdpZGdl
dC4KKyAgICBpZiAocW9iamVjdF9jYXN0PFFNYWNTdHlsZSo+KG1fc3R5bGUpKQorICAgICAgICBt
X3N0eWxlLT5kcmF3Q29tcGxleENvbnRyb2woUVN0eWxlOjpDQ19TY3JvbGxCYXIsICZvcHQsIHBh
aW50ZXIsIHdpZGdldCk7CisgICAgZWxzZQorI2VuZGlmCisgICAgeworICAgICAgICAvLyBUaGUg
UVN0eWxlIGV4cGVjdHMgdGhlIGJhY2tncm91bmQgdG8gYmUgYWxyZWFkeSBmaWxsZWQuCisgICAg
ICAgIHBhaW50ZXItPmZpbGxSZWN0KG9wdC5yZWN0LCBvcHQucGFsZXR0ZS5iYWNrZ3JvdW5kKCkp
OworCisgICAgICAgIGNvbnN0IFFQb2ludCB0b3BMZWZ0ID0gb3B0LnJlY3QudG9wTGVmdCgpOwor
ICAgICAgICBwYWludGVyLT50cmFuc2xhdGUodG9wTGVmdCk7CisgICAgICAgIG9wdC5yZWN0Lm1v
dmVUbyhRUG9pbnQoMCwgMCkpOworICAgICAgICBtX3N0eWxlLT5kcmF3Q29tcGxleENvbnRyb2wo
UVN0eWxlOjpDQ19TY3JvbGxCYXIsICZvcHQsIHBhaW50ZXIsIHdpZGdldCk7CisgICAgICAgIG9w
dC5yZWN0Lm1vdmVUbyh0b3BMZWZ0KTsKKyAgICB9Cit9CisKK1FPYmplY3QqIFFXZWJTdHlsZTo6
d2lkZ2V0Rm9yUGFpbnRlcihRUGFpbnRlciogcGFpbnRlcikKK3sKKyAgICBRUGFpbnREZXZpY2Uq
IGRldiA9IDA7CisgICAgaWYgKHBhaW50ZXIpCisgICAgICAgIGRldiA9IHBhaW50ZXItPmRldmlj
ZSgpOworICAgIGlmIChkZXYgJiYgZGV2LT5kZXZUeXBlKCkgPT0gUUludGVybmFsOjpXaWRnZXQp
CisgICAgICAgIHJldHVybiBzdGF0aWNfY2FzdDxRV2lkZ2V0Kj4oZGV2KTsKKyAgICByZXR1cm4g
MDsKK30KKworYm9vbCBRV2ViU3R5bGU6OmlzVmFsaWQoKSBjb25zdAoreworICAgIGVuc3VyZVN0
eWxlKCk7CisgICAgcmV0dXJuIG1fc3R5bGU7Cit9CisKK3ZvaWQgUVdlYlN0eWxlOjplbnN1cmVT
dHlsZSgpIGNvbnN0Cit7CisgICAgaWYgKG1fc3R5bGUpCisgICAgICAgIHJldHVybjsKKworICAg
IG1fc3R5bGUgPSBRU3R5bGVJbnRlcmZhY2U6OnN0eWxlRm9yUGFnZShtX3BhZ2UpOworCisgICAg
aWYgKCFtX3N0eWxlKQorICAgICAgICBtX3N0eWxlID0gUUFwcGxpY2F0aW9uOjpzdHlsZSgpOwor
fQorCit9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L3F0L1dlYkNvcmVTdXBwb3J0L1FXZWJT
dHlsZS5oIGIvU291cmNlL1dlYktpdC9xdC9XZWJDb3JlU3VwcG9ydC9RV2ViU3R5bGUuaApuZXcg
ZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwLi43MGU5ZTRkZGUwODVlMWFlYzY3MTY1NzJkNDk2M2FlNjUzOWE3MjczCi0tLSAvZGV2
L251bGwKKysrIGIvU291cmNlL1dlYktpdC9xdC9XZWJDb3JlU3VwcG9ydC9RV2ViU3R5bGUuaApA
QCAtMCwwICsxLDk3IEBACisvKgorICogVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIHRoZW1lIGlt
cGxlbWVudGF0aW9uIGZvciBmb3JtIGNvbnRyb2xzIGluIFdlYkNvcmUuCisgKgorICogQ29weXJp
Z2h0IChDKSAyMDEyIERpZ2lhIFBsYyBhbmQvb3IgaXRzIHN1YnNpZGlhcnkoLWllcykuCisgKiBD
b3B5cmlnaHQgKEMpIDIwMTEtMjAxMiBOb2tpYSBDb3Jwb3JhdGlvbiBhbmQvb3IgaXRzIHN1YnNp
ZGlhcnkoLWllcykuCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBj
YW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBv
ZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgYXMgcHVibGlzaGVk
IGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICogdmVyc2lvbiAyIG9m
IHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoK
KyAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwg
YmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhl
IGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBB
IFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiBMaWJyYXJ5IEdlbmVyYWwgUHVi
bGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVj
ZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisg
KiBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYg
bm90LCB3cml0ZSB0bworICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEg
RnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKKyAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwg
VVNBLgorICoKKyAqLworI2lmbmRlZiBRV2ViU3R5bGVfaAorI2RlZmluZSBRV2ViU3R5bGVfaAor
CisjaW5jbHVkZSA8UVN0eWxlSW50ZXJmYWNlLmg+CisKK1FUX0JFR0lOX05BTUVTUEFDRQorY2xh
c3MgUVN0eWxlOworY2xhc3MgUUxpbmVFZGl0OworY2xhc3MgUVN0eWxlT3B0aW9uOworY2xhc3Mg
UVN0eWxlT3B0aW9uU2xpZGVyOworY2xhc3MgUVBhaW50ZXI7CitjbGFzcyBRT2JqZWN0OworUVRf
RU5EX05BTUVTUEFDRQorCituYW1lc3BhY2UgV2ViQ29yZSB7CitjbGFzcyBQYWdlOworfQorCitu
YW1lc3BhY2UgV2ViS2l0IHsKKworY2xhc3MgUVdlYlN0eWxlIDogcHVibGljIFdlYkNvcmU6OlFT
dHlsZUludGVyZmFjZSB7CitwdWJsaWM6CisgICAgUVdlYlN0eWxlKFdlYkNvcmU6OlBhZ2UqID0g
MCk7CisgICAgdmlydHVhbCB+UVdlYlN0eWxlKCk7CisKKyAgICBzdGF0aWMgV2ViQ29yZTo6UVN0
eWxlSW50ZXJmYWNlKiBjcmVhdGUoV2ViQ29yZTo6UGFnZSogcGFnZSkKKyAgICB7IHJldHVybiBu
ZXcgUVdlYlN0eWxlKHBhZ2UpOyB9CisKKyAgICB2aXJ0dWFsIFFSZWN0IGJ1dHRvblN1YkVsZW1l
bnRSZWN0KEJ1dHRvblN1YkVsZW1lbnQsIFN0YXRlLCBjb25zdCBRUmVjdCYgb3JpZ2luYWxSZWN0
KSBjb25zdDsKKworICAgIHZpcnR1YWwgaW50IGZpbmRGcmFtZUxpbmVXaWR0aCgpIGNvbnN0Owor
ICAgIHZpcnR1YWwgaW50IHNpbXBsZVBpeGVsTWV0cmljKFBpeGVsTWV0cmljLCBTdGF0ZSA9IFN0
YXRlX05vbmUsIFFPYmplY3QqIHdpZGdldCA9IDApIGNvbnN0OworICAgIHZpcnR1YWwgaW50IGJ1
dHRvbk1hcmdpbihTdGF0ZSwgY29uc3QgUVJlY3QmIG9yaWdpbmFsUmVjdCkgY29uc3Q7CisgICAg
dmlydHVhbCBpbnQgc2xpZGVyTGVuZ3RoKFF0OjpPcmllbnRhdGlvbikgY29uc3Q7CisgICAgdmly
dHVhbCBpbnQgc2xpZGVyVGhpY2tuZXNzKFF0OjpPcmllbnRhdGlvbikgY29uc3Q7CisgICAgdmly
dHVhbCBpbnQgcHJvZ3Jlc3NCYXJDaHVua1dpZHRoKGNvbnN0IFFTaXplJikgY29uc3Q7CisgICAg
dmlydHVhbCB2b2lkIGdldEJ1dHRvbk1ldHJpY3MoUVN0cmluZyogYnV0dG9uRm9udEZhbWlseSwg
aW50KiBidXR0b25Gb250UGl4ZWxTaXplKSBjb25zdDsKKworICAgIHZpcnR1YWwgUVNpemUgc2l6
ZUZyb21Db250ZW50cyhDb250ZW50c1R5cGUsIFFTdHlsZUludGVyZmFjZTo6U3RhdGUsIGNvbnN0
IFFTaXplJikgY29uc3Q7CisKKyAgICB2aXJ0dWFsIHZvaWQgcGFpbnRCdXR0b24oUVBhaW50ZXIq
LCBCdXR0b25UeXBlLCBjb25zdCBXZWJDb3JlOjpRU3R5bGVJbnRlcmZhY2VPcHRpb24gJnByb3h5
T3B0aW9uLCBRT2JqZWN0ICp3aWRnZXQpOworICAgIHZpcnR1YWwgdm9pZCBwYWludFRleHRGaWVs
ZChRUGFpbnRlciosIGNvbnN0IFdlYkNvcmU6OlFTdHlsZUludGVyZmFjZU9wdGlvbiYsIFFPYmpl
Y3QqIHdpZGdldE9iaik7CisgICAgdmlydHVhbCB2b2lkIHBhaW50Q29tYm9Cb3goUVBhaW50ZXIq
LCBjb25zdCBXZWJDb3JlOjpRU3R5bGVJbnRlcmZhY2VPcHRpb24mLCBRT2JqZWN0ICp3aWRnZXRP
YmopOworICAgIHZpcnR1YWwgdm9pZCBwYWludENvbWJvQm94QXJyb3coUVBhaW50ZXIqLCBjb25z
dCBXZWJDb3JlOjpRU3R5bGVJbnRlcmZhY2VPcHRpb24mLCBRT2JqZWN0ICp3aWRnZXRPYmopOwor
CisgICAgdmlydHVhbCB2b2lkIHBhaW50U2xpZGVyVHJhY2soUVBhaW50ZXIqLCBjb25zdCBXZWJD
b3JlOjpRU3R5bGVJbnRlcmZhY2VPcHRpb24mLCBRT2JqZWN0ICp3aWRnZXRPYmopOworICAgIHZp
cnR1YWwgdm9pZCBwYWludFNsaWRlclRodW1iKFFQYWludGVyKiwgY29uc3QgV2ViQ29yZTo6UVN0
eWxlSW50ZXJmYWNlT3B0aW9uJiwgUU9iamVjdCAqd2lkZ2V0T2JqKTsKKyAgICB2aXJ0dWFsIHZv
aWQgcGFpbnRJbm5lclNwaW5CdXR0b24oUVBhaW50ZXIqLCBjb25zdCBXZWJDb3JlOjpRU3R5bGVJ
bnRlcmZhY2VPcHRpb24mLCBib29sIHNwaW5Cb3hVcCwgUU9iamVjdCogd2lkZ2V0T2JqKTsKKyAg
ICB2aXJ0dWFsIHZvaWQgcGFpbnRQcm9ncmVzc0JhcihRUGFpbnRlciosIGNvbnN0IFdlYkNvcmU6
OlFTdHlsZUludGVyZmFjZU9wdGlvbiYsIGRvdWJsZSBwcm9ncmVzcywgZG91YmxlIGFuaW1hdGlv
blByb2dyZXNzLCBRT2JqZWN0KiB3aWRnZXRPYmopOworCisgICAgdmlydHVhbCBpbnQgc2Nyb2xs
QmFyRXh0ZW50KGJvb2wgbWluaSk7CisgICAgdmlydHVhbCBib29sIHNjcm9sbEJhck1pZGRsZUNs
aWNrQWJzb2x1dGVQb3NpdGlvblN0eWxlSGludCgpIGNvbnN0OworICAgIHZpcnR1YWwgdm9pZCBw
YWludFNjcm9sbENvcm5lcihRUGFpbnRlciosIGNvbnN0IFFSZWN0JiwgUU9iamVjdCogd2lkZ2V0
T2JqKTsKKworICAgIHZpcnR1YWwgU3ViQ29udHJvbCBoaXRUZXN0U2Nyb2xsQmFyKGNvbnN0IFdl
YkNvcmU6OlFTdHlsZUludGVyZmFjZU9wdGlvbiYsIGNvbnN0IFFQb2ludCYgcG9zKTsKKyAgICB2
aXJ0dWFsIFFSZWN0IHNjcm9sbEJhclN1YkNvbnRyb2xSZWN0KGNvbnN0IFdlYkNvcmU6OlFTdHls
ZUludGVyZmFjZU9wdGlvbiYsIFN1YkNvbnRyb2wpOworICAgIHZpcnR1YWwgdm9pZCBwYWludFNj
cm9sbEJhcihRUGFpbnRlciosIGNvbnN0IFdlYkNvcmU6OlFTdHlsZUludGVyZmFjZU9wdGlvbiYs
IFFPYmplY3QqIHdpZGdldE9iaik7CisKKyAgICB2aXJ0dWFsIFFPYmplY3QqIHdpZGdldEZvclBh
aW50ZXIoUVBhaW50ZXIqKTsKKworICAgIHZpcnR1YWwgYm9vbCBpc1ZhbGlkKCkgY29uc3Q7CisK
K3ByaXZhdGU6CisgICAgdm9pZCBlbnN1cmVTdHlsZSgpIGNvbnN0OworCisgICAgV2ViQ29yZTo6
UGFnZSogbV9wYWdlOworICAgIG11dGFibGUgUVN0eWxlKiBtX3N0eWxlOworICAgIFFTdHlsZSog
bV9mYWxsYmFja1N0eWxlOworICAgIGJvb2wgbV9vd25GYWxsYmFja1N0eWxlOworICAgIG11dGFi
bGUgUVNjb3BlZFBvaW50ZXI8UUxpbmVFZGl0PiBtX2xpbmVFZGl0OworfTsKKworfQorCisjZW5k
aWYgLy8gUVdlYlN0eWxlX2gKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvcXQvV2ViQ29yZVN1
cHBvcnQvUmVuZGVyVGhlbWVRU3R5bGUuY3BwIGIvU291cmNlL1dlYktpdC9xdC9XZWJDb3JlU3Vw
cG9ydC9SZW5kZXJUaGVtZVFTdHlsZS5jcHAKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4
IDhiYzBkZjQ5NzQ1MzU5ZDY2ODg3N2NhODdkNGJlYjUyMjk3MjQxZjcuLjAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1dlYktpdC9xdC9XZWJDb3Jl
U3VwcG9ydC9SZW5kZXJUaGVtZVFTdHlsZS5jcHAKKysrIC9kZXYvbnVsbApAQCAtMSw4MjcgKzAs
MCBAQAotLyoKLSAqIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBXZWJLaXQgcHJvamVjdC4KLSAq
Ci0gKiBDb3B5cmlnaHQgKEMpIDIwMDgtMjAxMiBOb2tpYSBDb3Jwb3JhdGlvbiBhbmQvb3IgaXRz
IHN1YnNpZGlhcnkoLWllcykKLSAqCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDYgWmFjayBSdXNpbiA8
emFja0BrZGUub3JnPgotICogICAgICAgICAgICAgICAyMDA2IERpcmsgTXVlbGxlciA8bXVlbGxl
ckBrZGUub3JnPgotICogICAgICAgICAgICAgICAyMDA2IE5pa29sYXMgWmltbWVybWFubiA8emlt
bWVybWFubkBrZGUub3JnPgotICogQ29weXJpZ2h0IChDKSAyMDA4IEhvbGdlciBIYW5zIFBldGVy
IEZyZXl0aGVyCi0gKgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBUaGlzIGxpYnJh
cnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCi0gKiBt
b2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1Ymxp
YwotICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlv
bjsgZWl0aGVyCi0gKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlv
bikgYW55IGxhdGVyIHZlcnNpb24uCi0gKgotICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVk
IGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0gKiBidXQgV0lUSE9VVCBBTlkg
V0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICogTUVSQ0hB
TlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBH
TlUKLSAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgot
ICoKLSAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5
IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKLSAqIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUg
dGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCi0gKiB0aGUgRnJlZSBTb2Z0
d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAot
ICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCi0gKgotICovCi0KLSNpbmNsdWRlICJjb25m
aWcuaCIKLSNpbmNsdWRlICJSZW5kZXJUaGVtZVFTdHlsZS5oIgotCi0jaW5jbHVkZSAiQ1NTRm9u
dFNlbGVjdG9yLmgiCi0jaW5jbHVkZSAiQ1NTVmFsdWVLZXl3b3Jkcy5oIgotI2luY2x1ZGUgIkNo
cm9tZS5oIgotI2luY2x1ZGUgIkNocm9tZUNsaWVudC5oIgotI2luY2x1ZGUgIkNvbG9yLmgiCi0j
aW5jbHVkZSAiRG9jdW1lbnQuaCIKLSNpbmNsdWRlICJGb250LmgiCi0jaW5jbHVkZSAiRm9udFNl
bGVjdG9yLmgiCi0jaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0LmgiCi0jaW5jbHVkZSAiSFRNTElu
cHV0RWxlbWVudC5oIgotI2luY2x1ZGUgIkhUTUxOYW1lcy5oIgotI2luY2x1ZGUgIkxvY2FsaXpl
ZFN0cmluZ3MuaCIKLSNpbmNsdWRlICJOb3RJbXBsZW1lbnRlZC5oIgotI2luY2x1ZGUgIlBhZ2Uu
aCIKLSNpbmNsdWRlICJQYWludEluZm8uaCIKLSNpbmNsdWRlICJRV2ViUGFnZUNsaWVudC5oIgot
I2luY2x1ZGUgIlJlbmRlckJveC5oIgotI2lmIEVOQUJMRShQUk9HUkVTU19FTEVNRU5UKQotI2lu
Y2x1ZGUgIlJlbmRlclByb2dyZXNzLmgiCi0jZW5kaWYKLSNpbmNsdWRlICJSZW5kZXJTbGlkZXIu
aCIKLSNpbmNsdWRlICJTY3JvbGxiYXJUaGVtZVFTdHlsZS5oIgotI2luY2x1ZGUgIlNsaWRlclRo
dW1iRWxlbWVudC5oIgotI2luY2x1ZGUgIlN0eWxlUmVzb2x2ZXIuaCIKLSNpbmNsdWRlICJVc2Vy
QWdlbnRTdHlsZVNoZWV0cy5oIgotCi0jaW5jbHVkZSA8UUFwcGxpY2F0aW9uPgotI2luY2x1ZGUg
PFFDb2xvcj4KLSNpbmNsdWRlIDxRRmlsZT4KLSNpbmNsdWRlIDxRRm9udE1ldHJpY3M+Ci0jaW5j
bHVkZSA8UUxpbmVFZGl0PgotI2luY2x1ZGUgPFFNYWNTdHlsZT4KLSNpbmNsdWRlIDxRUGFpbnRl
cj4KLSNpZm5kZWYgUVRfTk9fU1RZTEVfUExBU1RJUVVFCi0jaW5jbHVkZSA8UVBsYXN0aXF1ZVN0
eWxlPgotI2VuZGlmCi0jaW5jbHVkZSA8UVB1c2hCdXR0b24+Ci0jaW5jbHVkZSA8UVN0eWxlRmFj
dG9yeT4KLSNpbmNsdWRlIDxRU3R5bGVPcHRpb25CdXR0b24+Ci0jaW5jbHVkZSA8UVN0eWxlT3B0
aW9uRnJhbWVWMj4KLSNpZiBFTkFCTEUoUFJPR1JFU1NfRUxFTUVOVCkKLSNpbmNsdWRlIDxRU3R5
bGVPcHRpb25Qcm9ncmVzc0JhclYyPgotI2VuZGlmCi0jaW5jbHVkZSA8UVN0eWxlT3B0aW9uU2xp
ZGVyPgotI2luY2x1ZGUgPFFXaWRnZXQ+Ci0KLW5hbWVzcGFjZSBXZWJDb3JlIHsKLQotdXNpbmcg
bmFtZXNwYWNlIEhUTUxOYW1lczsKLQotaW5saW5lIHN0YXRpYyB2b2lkIGluaXRTdHlsZU9wdGlv
bihRV2lkZ2V0KiB3aWRnZXQsIFFTdHlsZU9wdGlvbiYgb3B0aW9uKQotewotICAgIGlmICh3aWRn
ZXQpCi0gICAgICAgIG9wdGlvbi5pbml0RnJvbSh3aWRnZXQpOwotICAgIGVsc2UgewotICAgICAg
ICAvLyBJZiBhIHdpZGdldCBpcyBub3QgZGlyZWN0bHkgYXZhaWxhYmxlIGZvciByZW5kZXJpbmcs
IHdlIGZhbGxiYWNrIHRvIGRlZmF1bHQKLSAgICAgICAgLy8gdmFsdWUgZm9yIGFuIGFjdGl2ZSB3
aWRnZXQuCi0gICAgICAgIG9wdGlvbi5zdGF0ZSA9IFFTdHlsZTo6U3RhdGVfQWN0aXZlIHwgUVN0
eWxlOjpTdGF0ZV9FbmFibGVkOwotICAgIH0KLX0KLQotCi1RU2hhcmVkUG9pbnRlcjxTdHlsZVBh
aW50ZXI+IFJlbmRlclRoZW1lUVN0eWxlOjpnZXRTdHlsZVBhaW50ZXIoY29uc3QgUGFpbnRJbmZv
JiBwYWludEluZm8pCi17Ci0gICAgcmV0dXJuIFFTaGFyZWRQb2ludGVyPFN0eWxlUGFpbnRlcj4o
bmV3IFN0eWxlUGFpbnRlclFTdHlsZSh0aGlzLCBwYWludEluZm8pKTsKLX0KLQotU3R5bGVQYWlu
dGVyUVN0eWxlOjpTdHlsZVBhaW50ZXJRU3R5bGUoUmVuZGVyVGhlbWVRU3R5bGUqIHRoZW1lLCBj
b25zdCBQYWludEluZm8mIHBhaW50SW5mbykKLSAgICA6IFN0eWxlUGFpbnRlcih0aGVtZSwgcGFp
bnRJbmZvKQotewotICAgIGluaXQocGFpbnRJbmZvLmNvbnRleHQgPyBwYWludEluZm8uY29udGV4
dCA6IDAsIHRoZW1lLT5xU3R5bGUoKSk7Ci19Ci0KLVN0eWxlUGFpbnRlclFTdHlsZTo6U3R5bGVQ
YWludGVyUVN0eWxlKFNjcm9sbGJhclRoZW1lUVN0eWxlKiB0aGVtZSwgR3JhcGhpY3NDb250ZXh0
KiBjb250ZXh0KQotICAgIDogU3R5bGVQYWludGVyKCkKLXsKLSAgICBpbml0KGNvbnRleHQsIHRo
ZW1lLT5zdHlsZSgpKTsKLX0KLQotdm9pZCBTdHlsZVBhaW50ZXJRU3R5bGU6OmluaXQoR3JhcGhp
Y3NDb250ZXh0KiBjb250ZXh0LCBRU3R5bGUqIHRoZW1lU3R5bGUpCi17Ci0gICAgcGFpbnRlciA9
IHN0YXRpY19jYXN0PFFQYWludGVyKj4oY29udGV4dC0+cGxhdGZvcm1Db250ZXh0KCkpOwotICAg
IHdpZGdldCA9IDA7Ci0gICAgUVBhaW50RGV2aWNlKiBkZXYgPSAwOwotICAgIGlmIChwYWludGVy
KQotICAgICAgICBkZXYgPSBwYWludGVyLT5kZXZpY2UoKTsKLSAgICBpZiAoZGV2ICYmIGRldi0+
ZGV2VHlwZSgpID09IFFJbnRlcm5hbDo6V2lkZ2V0KQotICAgICAgICB3aWRnZXQgPSBzdGF0aWNf
Y2FzdDxRV2lkZ2V0Kj4oZGV2KTsKLSAgICBzdHlsZSA9IHRoZW1lU3R5bGU7Ci0KLSAgICBTdHls
ZVBhaW50ZXI6OmluaXQoY29udGV4dCk7Ci19Ci0KLVBhc3NSZWZQdHI8UmVuZGVyVGhlbWU+IFJl
bmRlclRoZW1lUVN0eWxlOjpjcmVhdGUoUGFnZSogcGFnZSkKLXsKLSAgICByZXR1cm4gYWRvcHRS
ZWYobmV3IFJlbmRlclRoZW1lUVN0eWxlKHBhZ2UpKTsKLX0KLQotUmVuZGVyVGhlbWVRU3R5bGU6
OlJlbmRlclRoZW1lUVN0eWxlKFBhZ2UqIHBhZ2UpCi0gICAgOiBSZW5kZXJUaGVtZVF0KHBhZ2Up
Ci0jaWZuZGVmIFFUX05PX0xJTkVFRElUCi0gICAgLCBtX2xpbmVFZGl0KDApCi0jZW5kaWYKLXsK
LSAgICBRUHVzaEJ1dHRvbiBidXR0b247Ci0gICAgUUZvbnQgZGVmYXVsdEJ1dHRvbkZvbnQgPSBR
QXBwbGljYXRpb246OmZvbnQoJmJ1dHRvbik7Ci0gICAgbV9idXR0b25Gb250RmFtaWx5ID0gZGVm
YXVsdEJ1dHRvbkZvbnQuZmFtaWx5KCk7Ci0jaWZkZWYgUV9XU19NQUMKLSAgICBidXR0b24uc2V0
QXR0cmlidXRlKFF0OjpXQV9NYWNTbWFsbFNpemUpOwotICAgIFFGb250SW5mbyBmb250SW5mbyhk
ZWZhdWx0QnV0dG9uRm9udCk7Ci0gICAgbV9idXR0b25Gb250UGl4ZWxTaXplID0gZm9udEluZm8u
cGl4ZWxTaXplKCk7Ci0jZW5kaWYKLQotICAgIG1fZmFsbGJhY2tTdHlsZSA9IFFTdHlsZUZhY3Rv
cnk6OmNyZWF0ZShRTGF0aW4xU3RyaW5nKCJ3aW5kb3dzIikpOwotfQotCi1SZW5kZXJUaGVtZVFT
dHlsZTo6flJlbmRlclRoZW1lUVN0eWxlKCkKLXsKLSAgICBkZWxldGUgbV9mYWxsYmFja1N0eWxl
OwotI2lmbmRlZiBRVF9OT19MSU5FRURJVAotICAgIGRlbGV0ZSBtX2xpbmVFZGl0OwotI2VuZGlm
Ci19Ci0KLQotLy8gZm9yIHNvbWUgd2lkZ2V0IHBhaW50aW5nLCB3ZSBuZWVkIHRvIGZhbGxiYWNr
IHRvIFdpbmRvd3Mgc3R5bGUKLVFTdHlsZSogUmVuZGVyVGhlbWVRU3R5bGU6OmZhbGxiYWNrU3R5
bGUoKSBjb25zdAotewotICAgIHJldHVybiAobV9mYWxsYmFja1N0eWxlKSA/IG1fZmFsbGJhY2tT
dHlsZSA6IFFBcHBsaWNhdGlvbjo6c3R5bGUoKTsKLX0KLQotdm9pZCBSZW5kZXJUaGVtZVFTdHls
ZTo6c2V0UGFsZXR0ZUZyb21QYWdlQ2xpZW50SWZFeGlzdHMoUVBhbGV0dGUmIHBhbGV0dGUpIGNv
bnN0Ci17Ci0gICAgaWYgKCFtX3BhZ2UpCi0gICAgICAgIHJldHVybjsKLQotICAgIEFTU0VSVCht
X3BhZ2UtPmNocm9tZSgpKTsKLSAgICBDaHJvbWVDbGllbnQqIGNocm9tZUNsaWVudCA9IG1fcGFn
ZS0+Y2hyb21lKCktPmNsaWVudCgpOwotICAgIGlmICghY2hyb21lQ2xpZW50KQotICAgICAgICBy
ZXR1cm47Ci0KLSAgICBpZiAoUVdlYlBhZ2VDbGllbnQqIHBhZ2VDbGllbnQgPSBjaHJvbWVDbGll
bnQtPnBsYXRmb3JtUGFnZUNsaWVudCgpKQotICAgICAgICBwYWxldHRlID0gcGFnZUNsaWVudC0+
cGFsZXR0ZSgpOwotfQotCi1RU3R5bGUqIFJlbmRlclRoZW1lUVN0eWxlOjpxU3R5bGUoKSBjb25z
dAotewotICAgIGlmIChtX3BhZ2UpIHsKLSAgICAgICAgUVdlYlBhZ2VDbGllbnQqIHBhZ2VDbGll
bnQgPSBtX3BhZ2UtPmNocm9tZSgpLT5jbGllbnQoKS0+cGxhdGZvcm1QYWdlQ2xpZW50KCk7Ci0K
LSAgICAgICAgaWYgKHBhZ2VDbGllbnQpCi0gICAgICAgICAgICByZXR1cm4gcGFnZUNsaWVudC0+
c3R5bGUoKTsKLSAgICB9Ci0KLSAgICByZXR1cm4gUUFwcGxpY2F0aW9uOjpzdHlsZSgpOwotfQot
Ci1pbnQgUmVuZGVyVGhlbWVRU3R5bGU6OmZpbmRGcmFtZUxpbmVXaWR0aChRU3R5bGUqIHN0eWxl
KSBjb25zdAotewotI2lmbmRlZiBRVF9OT19MSU5FRURJVAotICAgIGlmICghbV9saW5lRWRpdCkK
LSAgICAgICAgbV9saW5lRWRpdCA9IG5ldyBRTGluZUVkaXQoKTsKLSNlbmRpZgotCi0gICAgUVN0
eWxlT3B0aW9uRnJhbWVWMiBvcHQ7Ci0gICAgUVdpZGdldCogd2lkZ2V0ID0gMDsKLSNpZm5kZWYg
UVRfTk9fTElORUVESVQKLSAgICB3aWRnZXQgPSBtX2xpbmVFZGl0OwotI2VuZGlmCi0gICAgcmV0
dXJuIHN0eWxlLT5waXhlbE1ldHJpYyhRU3R5bGU6OlBNX0RlZmF1bHRGcmFtZVdpZHRoLCAmb3B0
LCB3aWRnZXQpOwotfQotCi1RUmVjdCBSZW5kZXJUaGVtZVFTdHlsZTo6aW5mbGF0ZUJ1dHRvblJl
Y3QoY29uc3QgUVJlY3QmIG9yaWdpbmFsUmVjdCkgY29uc3QKLXsKLSAgICBRU3R5bGVPcHRpb25C
dXR0b24gb3B0aW9uOwotICAgIG9wdGlvbi5zdGF0ZSB8PSBRU3R5bGU6OlN0YXRlX1NtYWxsOwot
ICAgIG9wdGlvbi5yZWN0ID0gb3JpZ2luYWxSZWN0OwotCi0gICAgUVJlY3QgbGF5b3V0UmVjdCA9
IHFTdHlsZSgpLT5zdWJFbGVtZW50UmVjdChRU3R5bGU6OlNFX1B1c2hCdXR0b25MYXlvdXRJdGVt
LCAmb3B0aW9uLCAwKTsKLSAgICBpZiAoIWxheW91dFJlY3QuaXNOdWxsKCkpIHsKLSAgICAgICAg
aW50IHBhZGRpbmdMZWZ0ID0gbGF5b3V0UmVjdC5sZWZ0KCkgLSBvcmlnaW5hbFJlY3QubGVmdCgp
OwotICAgICAgICBpbnQgcGFkZGluZ1JpZ2h0ID0gb3JpZ2luYWxSZWN0LnJpZ2h0KCkgLSBsYXlv
dXRSZWN0LnJpZ2h0KCk7Ci0gICAgICAgIGludCBwYWRkaW5nVG9wID0gbGF5b3V0UmVjdC50b3Ao
KSAtIG9yaWdpbmFsUmVjdC50b3AoKTsKLSAgICAgICAgaW50IHBhZGRpbmdCb3R0b20gPSBvcmln
aW5hbFJlY3QuYm90dG9tKCkgLSBsYXlvdXRSZWN0LmJvdHRvbSgpOwotCi0gICAgICAgIHJldHVy
biBvcmlnaW5hbFJlY3QuYWRqdXN0ZWQoLXBhZGRpbmdMZWZ0LCAtcGFkZGluZ1RvcCwgcGFkZGlu
Z1JpZ2h0LCBwYWRkaW5nQm90dG9tKTsKLSAgICB9Ci0gICAgcmV0dXJuIG9yaWdpbmFsUmVjdDsK
LX0KLQotdm9pZCBSZW5kZXJUaGVtZVFTdHlsZTo6Y29tcHV0ZVNpemVCYXNlZE9uU3R5bGUoUmVu
ZGVyU3R5bGUqIHJlbmRlclN0eWxlKSBjb25zdAotewotICAgIFFTaXplIHNpemUoMCwgMCk7Ci0g
ICAgY29uc3QgUUZvbnRNZXRyaWNzIGZtKHJlbmRlclN0eWxlLT5mb250KCkuc3ludGhldGljRm9u
dCgpKTsKLSAgICBRU3R5bGUqIHN0eWxlID0gcVN0eWxlKCk7Ci0KLSAgICBzd2l0Y2ggKHJlbmRl
clN0eWxlLT5hcHBlYXJhbmNlKCkpIHsKLSAgICBjYXNlIFRleHRBcmVhUGFydDoKLSAgICBjYXNl
IFNlYXJjaEZpZWxkUGFydDoKLSAgICBjYXNlIFRleHRGaWVsZFBhcnQ6IHsKLSAgICAgICAgaW50
IHBhZGRpbmcgPSBmaW5kRnJhbWVMaW5lV2lkdGgoc3R5bGUpOwotICAgICAgICByZW5kZXJTdHls
ZS0+c2V0UGFkZGluZ0xlZnQoTGVuZ3RoKHBhZGRpbmcsIEZpeGVkKSk7Ci0gICAgICAgIHJlbmRl
clN0eWxlLT5zZXRQYWRkaW5nUmlnaHQoTGVuZ3RoKHBhZGRpbmcsIEZpeGVkKSk7Ci0gICAgICAg
IHJlbmRlclN0eWxlLT5zZXRQYWRkaW5nVG9wKExlbmd0aChwYWRkaW5nLCBGaXhlZCkpOwotICAg
ICAgICByZW5kZXJTdHlsZS0+c2V0UGFkZGluZ0JvdHRvbShMZW5ndGgocGFkZGluZywgRml4ZWQp
KTsKLSAgICAgICAgYnJlYWs7Ci0gICAgfQotICAgIGRlZmF1bHQ6Ci0gICAgICAgIGJyZWFrOwot
ICAgIH0KLSAgICAvLyBJZiB0aGUgd2lkdGggYW5kIGhlaWdodCBhcmUgYm90aCBzcGVjaWZpZWQs
IHRoZW4gd2UgaGF2ZSBub3RoaW5nIHRvIGRvLgotICAgIGlmICghcmVuZGVyU3R5bGUtPndpZHRo
KCkuaXNJbnRyaW5zaWNPckF1dG8oKSAmJiAhcmVuZGVyU3R5bGUtPmhlaWdodCgpLmlzQXV0bygp
KQotICAgICAgICByZXR1cm47Ci0KLSAgICBzd2l0Y2ggKHJlbmRlclN0eWxlLT5hcHBlYXJhbmNl
KCkpIHsKLSAgICBjYXNlIENoZWNrYm94UGFydDogewotICAgICAgICBRU3R5bGVPcHRpb24gc3R5
bGVPcHRpb247Ci0gICAgICAgIHN0eWxlT3B0aW9uLnN0YXRlIHw9IFFTdHlsZTo6U3RhdGVfU21h
bGw7Ci0gICAgICAgIGludCBjaGVja0JveFdpZHRoID0gc3R5bGUtPnBpeGVsTWV0cmljKFFTdHls
ZTo6UE1fSW5kaWNhdG9yV2lkdGgsICZzdHlsZU9wdGlvbik7Ci0gICAgICAgIGNoZWNrQm94V2lk
dGggKj0gcmVuZGVyU3R5bGUtPmVmZmVjdGl2ZVpvb20oKTsKLSAgICAgICAgc2l6ZSA9IFFTaXpl
KGNoZWNrQm94V2lkdGgsIGNoZWNrQm94V2lkdGgpOwotICAgICAgICBicmVhazsKLSAgICB9Ci0g
ICAgY2FzZSBSYWRpb1BhcnQ6IHsKLSAgICAgICAgUVN0eWxlT3B0aW9uIHN0eWxlT3B0aW9uOwot
ICAgICAgICBzdHlsZU9wdGlvbi5zdGF0ZSB8PSBRU3R5bGU6OlN0YXRlX1NtYWxsOwotICAgICAg
ICBpbnQgcmFkaW9XaWR0aCA9IHN0eWxlLT5waXhlbE1ldHJpYyhRU3R5bGU6OlBNX0V4Y2x1c2l2
ZUluZGljYXRvcldpZHRoLCAmc3R5bGVPcHRpb24pOwotICAgICAgICByYWRpb1dpZHRoICo9IHJl
bmRlclN0eWxlLT5lZmZlY3RpdmVab29tKCk7Ci0gICAgICAgIHNpemUgPSBRU2l6ZShyYWRpb1dp
ZHRoLCByYWRpb1dpZHRoKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgfQotICAgIGNhc2UgUHVzaEJ1
dHRvblBhcnQ6Ci0gICAgY2FzZSBCdXR0b25QYXJ0OiB7Ci0gICAgICAgIFFTdHlsZU9wdGlvbkJ1
dHRvbiBzdHlsZU9wdGlvbjsKLSAgICAgICAgc3R5bGVPcHRpb24uc3RhdGUgfD0gUVN0eWxlOjpT
dGF0ZV9TbWFsbDsKLSAgICAgICAgUVNpemUgY29udGVudFNpemUgPSBmbS5zaXplKFF0OjpUZXh0
U2hvd01uZW1vbmljLCBRU3RyaW5nOjpmcm9tTGF0aW4xKCJYIikpOwotICAgICAgICBRU2l6ZSBw
dXNoQnV0dG9uU2l6ZSA9IHN0eWxlLT5zaXplRnJvbUNvbnRlbnRzKFFTdHlsZTo6Q1RfUHVzaEJ1
dHRvbiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAmc3R5bGVPcHRpb24sIGNvbnRlbnRTaXplLCAwKTsKLSAgICAgICAgc3R5bGVPcHRpb24u
cmVjdCA9IFFSZWN0KDAsIDAsIHB1c2hCdXR0b25TaXplLndpZHRoKCksIHB1c2hCdXR0b25TaXpl
LmhlaWdodCgpKTsKLSAgICAgICAgUVJlY3QgbGF5b3V0UmVjdCA9IHN0eWxlLT5zdWJFbGVtZW50
UmVjdChRU3R5bGU6OlNFX1B1c2hCdXR0b25MYXlvdXRJdGVtLAotICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZzdHlsZU9wdGlvbiwgMCk7Ci0KLSAgICAg
ICAgLy8gSWYgdGhlIHN0eWxlIHN1cHBvcnRzIGxheW91dCByZWN0cyB3ZSB1c2UgdGhhdCwgYW5k
ICBjb21wZW5zYXRlIGFjY29yZGluZ2x5Ci0gICAgICAgIC8vIGluIHBhaW50QnV0dG9uKCkgYmVs
b3cuCi0gICAgICAgIGlmICghbGF5b3V0UmVjdC5pc051bGwoKSkKLSAgICAgICAgICAgIHNpemUu
c2V0SGVpZ2h0KGxheW91dFJlY3QuaGVpZ2h0KCkpOwotICAgICAgICBlbHNlCi0gICAgICAgICAg
ICBzaXplLnNldEhlaWdodChwdXNoQnV0dG9uU2l6ZS5oZWlnaHQoKSk7Ci0KLSAgICAgICAgYnJl
YWs7Ci0gICAgfQotICAgIGNhc2UgTWVudWxpc3RQYXJ0OiB7Ci0gICAgICAgIFFTdHlsZU9wdGlv
bkNvbWJvQm94IHN0eWxlT3B0aW9uOwotICAgICAgICBzdHlsZU9wdGlvbi5zdGF0ZSB8PSBRU3R5
bGU6OlN0YXRlX1NtYWxsOwotICAgICAgICBpbnQgY29udGVudEhlaWdodCA9IHFNYXgoZm0ubGlu
ZVNwYWNpbmcoKSwgMTQpICsgMjsKLSAgICAgICAgUVNpemUgbWVudUxpc3RTaXplID0gc3R5bGUt
PnNpemVGcm9tQ29udGVudHMoUVN0eWxlOjpDVF9Db21ib0JveCwKLSAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJnN0eWxlT3B0aW9uLCBRU2l6ZSgw
LCBjb250ZW50SGVpZ2h0KSwgMCk7Ci0gICAgICAgIHNpemUuc2V0SGVpZ2h0KG1lbnVMaXN0U2l6
ZS5oZWlnaHQoKSk7Ci0gICAgICAgIGJyZWFrOwotICAgIH0KLSAgICBkZWZhdWx0OgotICAgICAg
ICBicmVhazsKLSAgICB9Ci0KLSAgICAvLyBGSVhNRTogQ2hlY2sgaXMgZmxhd2VkLCBzaW5jZSBp
dCBkb2Vzbid0IHRha2UgbWluLXdpZHRoL21heC13aWR0aCBpbnRvIGFjY291bnQuCi0gICAgaWYg
KHJlbmRlclN0eWxlLT53aWR0aCgpLmlzSW50cmluc2ljT3JBdXRvKCkgJiYgc2l6ZS53aWR0aCgp
ID4gMCkKLSAgICAgICAgcmVuZGVyU3R5bGUtPnNldE1pbldpZHRoKExlbmd0aChzaXplLndpZHRo
KCksIEZpeGVkKSk7Ci0gICAgaWYgKHJlbmRlclN0eWxlLT5oZWlnaHQoKS5pc0F1dG8oKSAmJiBz
aXplLmhlaWdodCgpID4gMCkKLSAgICAgICAgcmVuZGVyU3R5bGUtPnNldE1pbkhlaWdodChMZW5n
dGgoc2l6ZS5oZWlnaHQoKSwgRml4ZWQpKTsKLX0KLQotCi0KLXZvaWQgUmVuZGVyVGhlbWVRU3R5
bGU6OmFkanVzdEJ1dHRvblN0eWxlKFN0eWxlUmVzb2x2ZXIqIHN0eWxlUmVzb2x2ZXIsIFJlbmRl
clN0eWxlKiBzdHlsZSwgRWxlbWVudCopIGNvbnN0Ci17Ci0gICAgLy8gRGl0Y2ggdGhlIGJvcmRl
ci4KLSAgICBzdHlsZS0+cmVzZXRCb3JkZXIoKTsKLQotI2lmZGVmIFFfV1NfTUFDCi0gICAgaWYg
KHN0eWxlLT5hcHBlYXJhbmNlKCkgPT0gUHVzaEJ1dHRvblBhcnQpIHsKLSAgICAgICAgLy8gVGhl
IE1hYyBwb3J0cyBpZ25vcmUgdGhlIHNwZWNpZmllZCBoZWlnaHQgZm9yIDxpbnB1dCB0eXBlPSJi
dXR0b24iPiBlbGVtZW50cwotICAgICAgICAvLyB1bmxlc3MgYSBib3JkZXIgYW5kL29yIGJhY2tn
cm91bmQgQ1NTIHByb3BlcnR5IGlzIGFsc28gc3BlY2lmaWVkLgotICAgICAgICBzdHlsZS0+c2V0
SGVpZ2h0KExlbmd0aChBdXRvKSk7Ci0gICAgfQotI2VuZGlmCi0KLSAgICBGb250RGVzY3JpcHRp
b24gZm9udERlc2NyaXB0aW9uID0gc3R5bGUtPmZvbnREZXNjcmlwdGlvbigpOwotICAgIGZvbnRE
ZXNjcmlwdGlvbi5zZXRJc0Fic29sdXRlU2l6ZSh0cnVlKTsKLQotI2lmZGVmIFFfV1NfTUFDIC8v
IFVzZSBmaXhlZCBmb250IHNpemUgYW5kIGZhbWlseSBvbiBNYWMgKGxpa2UgU2FmYXJpIGRvZXMp
Ci0gICAgZm9udERlc2NyaXB0aW9uLnNldFNwZWNpZmllZFNpemUobV9idXR0b25Gb250UGl4ZWxT
aXplKTsKLSAgICBmb250RGVzY3JpcHRpb24uc2V0Q29tcHV0ZWRTaXplKG1fYnV0dG9uRm9udFBp
eGVsU2l6ZSk7Ci0jZWxzZQotICAgIGZvbnREZXNjcmlwdGlvbi5zZXRTcGVjaWZpZWRTaXplKHN0
eWxlLT5mb250U2l6ZSgpKTsKLSAgICBmb250RGVzY3JpcHRpb24uc2V0Q29tcHV0ZWRTaXplKHN0
eWxlLT5mb250U2l6ZSgpKTsKLSNlbmRpZgotCi0gICAgRm9udEZhbWlseSBmb250RmFtaWx5Owot
ICAgIGZvbnRGYW1pbHkuc2V0RmFtaWx5KG1fYnV0dG9uRm9udEZhbWlseSk7Ci0gICAgZm9udERl
c2NyaXB0aW9uLnNldEZhbWlseShmb250RmFtaWx5KTsKLSAgICBzdHlsZS0+c2V0Rm9udERlc2Ny
aXB0aW9uKGZvbnREZXNjcmlwdGlvbik7Ci0gICAgc3R5bGUtPmZvbnQoKS51cGRhdGUoc3R5bGVS
ZXNvbHZlci0+Zm9udFNlbGVjdG9yKCkpOwotICAgIHN0eWxlLT5zZXRMaW5lSGVpZ2h0KFJlbmRl
clN0eWxlOjppbml0aWFsTGluZUhlaWdodCgpKTsKLSAgICBzZXRCdXR0b25TaXplKHN0eWxlKTsK
LSAgICBzZXRCdXR0b25QYWRkaW5nKHN0eWxlKTsKLX0KLQotdm9pZCBSZW5kZXJUaGVtZVFTdHls
ZTo6c2V0QnV0dG9uUGFkZGluZyhSZW5kZXJTdHlsZSogc3R5bGUpIGNvbnN0Ci17Ci0gICAgUVN0
eWxlT3B0aW9uQnV0dG9uIHN0eWxlT3B0aW9uOwotICAgIHN0eWxlT3B0aW9uLnN0YXRlIHw9IFFT
dHlsZTo6U3RhdGVfU21hbGw7Ci0KLSAgICAvLyBGYWtlIGEgYnV0dG9uIHJlY3QgaGVyZSwgc2lu
Y2Ugd2UncmUganVzdCBjb21wdXRpbmcgZGVsdGFzCi0gICAgUVJlY3Qgb3JpZ2luYWxSZWN0ID0g
UVJlY3QoMCwgMCwgMTAwLCAzMCk7Ci0gICAgc3R5bGVPcHRpb24ucmVjdCA9IG9yaWdpbmFsUmVj
dDsKLQotICAgIC8vIERlZmF1bHQgcGFkZGluZyBpcyBiYXNlZCBvbiB0aGUgYnV0dG9uIG1hcmdp
biBwaXhlbCBtZXRyaWMKLSAgICBpbnQgYnV0dG9uTWFyZ2luID0gcVN0eWxlKCktPnBpeGVsTWV0
cmljKFFTdHlsZTo6UE1fQnV0dG9uTWFyZ2luLCAmc3R5bGVPcHRpb24sIDApOwotICAgIGludCBw
YWRkaW5nTGVmdCA9IGJ1dHRvbk1hcmdpbjsKLSAgICBpbnQgcGFkZGluZ1JpZ2h0ID0gYnV0dG9u
TWFyZ2luOwotICAgIGludCBwYWRkaW5nVG9wID0gYnV0dG9uTWFyZ2luOwotICAgIGludCBwYWRk
aW5nQm90dG9tID0gYnV0dG9uTWFyZ2luOwotCi0gICAgLy8gVGhlbiBjaGVjayBpZiB0aGUgc3R5
bGUgdXNlcyBsYXlvdXQgbWFyZ2lucwotICAgIFFSZWN0IGxheW91dFJlY3QgPSBxU3R5bGUoKS0+
c3ViRWxlbWVudFJlY3QoUVN0eWxlOjpTRV9QdXNoQnV0dG9uTGF5b3V0SXRlbSwKLSAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZzdHlsZU9wdGlvbiwgMCk7
Ci0gICAgaWYgKCFsYXlvdXRSZWN0LmlzTnVsbCgpKSB7Ci0gICAgICAgIFFSZWN0IGNvbnRlbnRz
UmVjdCA9IHFTdHlsZSgpLT5zdWJFbGVtZW50UmVjdChRU3R5bGU6OlNFX1B1c2hCdXR0b25Db250
ZW50cywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICZzdHlsZU9wdGlvbiwgMCk7Ci0gICAgICAgIHBhZGRpbmdMZWZ0ID0gY29udGVudHNSZWN0
LmxlZnQoKSAtIGxheW91dFJlY3QubGVmdCgpOwotICAgICAgICBwYWRkaW5nUmlnaHQgPSBsYXlv
dXRSZWN0LnJpZ2h0KCkgLSBjb250ZW50c1JlY3QucmlnaHQoKTsKLSAgICAgICAgcGFkZGluZ1Rv
cCA9IGNvbnRlbnRzUmVjdC50b3AoKSAtIGxheW91dFJlY3QudG9wKCk7Ci0KLSAgICAgICAgLy8g
Q2FuJ3QgdXNlIHRoaXMgcmlnaHQgbm93IGJlY2F1c2Ugd2UgZG9uJ3QgaGF2ZSB0aGUgYmFzZWxp
bmUgdG8gY29tcGVuc2F0ZQotICAgICAgICAvLyBwYWRkaW5nQm90dG9tID0gbGF5b3V0UmVjdC5i
b3R0b20oKSAtIGNvbnRlbnRzUmVjdC5ib3R0b20oKTsKLSAgICB9Ci0gICAgc3R5bGUtPnNldFBh
ZGRpbmdMZWZ0KExlbmd0aChwYWRkaW5nTGVmdCwgRml4ZWQpKTsKLSAgICBzdHlsZS0+c2V0UGFk
ZGluZ1JpZ2h0KExlbmd0aChwYWRkaW5nUmlnaHQsIEZpeGVkKSk7Ci0gICAgc3R5bGUtPnNldFBh
ZGRpbmdUb3AoTGVuZ3RoKHBhZGRpbmdUb3AsIEZpeGVkKSk7Ci0gICAgc3R5bGUtPnNldFBhZGRp
bmdCb3R0b20oTGVuZ3RoKHBhZGRpbmdCb3R0b20sIEZpeGVkKSk7Ci19Ci0KLWJvb2wgUmVuZGVy
VGhlbWVRU3R5bGU6OnBhaW50QnV0dG9uKFJlbmRlck9iamVjdCogbywgY29uc3QgUGFpbnRJbmZv
JiBpLCBjb25zdCBJbnRSZWN0JiByKQotewotICAgIFN0eWxlUGFpbnRlclFTdHlsZSBwKHRoaXMs
IGkpOwotICAgIGlmICghcC5pc1ZhbGlkKCkpCi0gICAgICAgcmV0dXJuIHRydWU7Ci0KLSAgICBR
U3R5bGVPcHRpb25CdXR0b24gb3B0aW9uOwotICAgIGluaXRTdHlsZU9wdGlvbihwLndpZGdldCwg
b3B0aW9uKTsKLSAgICBvcHRpb24ucmVjdCA9IHI7Ci0gICAgb3B0aW9uLnN0YXRlIHw9IFFTdHls
ZTo6U3RhdGVfU21hbGw7Ci0KLSAgICBDb250cm9sUGFydCBhcHBlYXJhbmNlID0gaW5pdGlhbGl6
ZUNvbW1vblFTdHlsZU9wdGlvbnMob3B0aW9uLCBvKTsKLSAgICBpZiAoYXBwZWFyYW5jZSA9PSBQ
dXNoQnV0dG9uUGFydCB8fCBhcHBlYXJhbmNlID09IEJ1dHRvblBhcnQpIHsKLSAgICAgICAgb3B0
aW9uLnJlY3QgPSBpbmZsYXRlQnV0dG9uUmVjdChvcHRpb24ucmVjdCk7Ci0gICAgICAgIHAuZHJh
d0NvbnRyb2woUVN0eWxlOjpDRV9QdXNoQnV0dG9uLCBvcHRpb24pOwotICAgIH0gZWxzZSBpZiAo
YXBwZWFyYW5jZSA9PSBSYWRpb1BhcnQpCi0gICAgICAgcC5kcmF3Q29udHJvbChRU3R5bGU6OkNF
X1JhZGlvQnV0dG9uLCBvcHRpb24pOwotICAgIGVsc2UgaWYgKGFwcGVhcmFuY2UgPT0gQ2hlY2ti
b3hQYXJ0KQotICAgICAgIHAuZHJhd0NvbnRyb2woUVN0eWxlOjpDRV9DaGVja0JveCwgb3B0aW9u
KTsKLQotICAgIHJldHVybiBmYWxzZTsKLX0KLQotYm9vbCBSZW5kZXJUaGVtZVFTdHlsZTo6cGFp
bnRUZXh0RmllbGQoUmVuZGVyT2JqZWN0KiBvLCBjb25zdCBQYWludEluZm8mIGksIGNvbnN0IElu
dFJlY3QmIHIpCi17Ci0gICAgU3R5bGVQYWludGVyUVN0eWxlIHAodGhpcywgaSk7Ci0gICAgaWYg
KCFwLmlzVmFsaWQoKSkKLSAgICAgICAgcmV0dXJuIHRydWU7Ci0KLSAgICBRU3R5bGVPcHRpb25G
cmFtZVYyIHBhbmVsOwotICAgIGluaXRTdHlsZU9wdGlvbihwLndpZGdldCwgcGFuZWwpOwotICAg
IHBhbmVsLnJlY3QgPSByOwotICAgIHBhbmVsLmxpbmVXaWR0aCA9IGZpbmRGcmFtZUxpbmVXaWR0
aChxU3R5bGUoKSk7Ci0gICAgcGFuZWwuc3RhdGUgfD0gUVN0eWxlOjpTdGF0ZV9TdW5rZW47Ci0g
ICAgcGFuZWwuZmVhdHVyZXMgPSBRU3R5bGVPcHRpb25GcmFtZVYyOjpOb25lOwotCi0gICAgLy8g
R2V0IHRoZSBjb3JyZWN0IHRoZW1lIGRhdGEgZm9yIGEgdGV4dCBmaWVsZAotICAgIENvbnRyb2xQ
YXJ0IGFwcGVhcmFuY2UgPSBpbml0aWFsaXplQ29tbW9uUVN0eWxlT3B0aW9ucyhwYW5lbCwgbyk7
Ci0gICAgaWYgKGFwcGVhcmFuY2UgIT0gVGV4dEZpZWxkUGFydAotICAgICAgICAmJiBhcHBlYXJh
bmNlICE9IFNlYXJjaEZpZWxkUGFydAotICAgICAgICAmJiBhcHBlYXJhbmNlICE9IFRleHRBcmVh
UGFydAotICAgICAgICAmJiBhcHBlYXJhbmNlICE9IExpc3Rib3hQYXJ0KQotICAgICAgICByZXR1
cm4gdHJ1ZTsKLQotICAgIC8vIE5vdyBwYWludCB0aGUgdGV4dCBmaWVsZC4KLSAgICBwLmRyYXdQ
cmltaXRpdmUoUVN0eWxlOjpQRV9QYW5lbExpbmVFZGl0LCBwYW5lbCk7Ci0gICAgcmV0dXJuIGZh
bHNlOwotfQotCi12b2lkIFJlbmRlclRoZW1lUVN0eWxlOjphZGp1c3RUZXh0QXJlYVN0eWxlKFN0
eWxlUmVzb2x2ZXIqIHN0eWxlUmVzb2x2ZXIsIFJlbmRlclN0eWxlKiBzdHlsZSwgRWxlbWVudCog
ZWxlbWVudCkgY29uc3QKLXsKLSAgICBhZGp1c3RUZXh0RmllbGRTdHlsZShzdHlsZVJlc29sdmVy
LCBzdHlsZSwgZWxlbWVudCk7Ci19Ci0KLWJvb2wgUmVuZGVyVGhlbWVRU3R5bGU6OnBhaW50VGV4
dEFyZWEoUmVuZGVyT2JqZWN0KiBvLCBjb25zdCBQYWludEluZm8mIGksIGNvbnN0IEludFJlY3Qm
IHIpCi17Ci0gICAgcmV0dXJuIHBhaW50VGV4dEZpZWxkKG8sIGksIHIpOwotfQotCi12b2lkIFJl
bmRlclRoZW1lUVN0eWxlOjpzZXRQb3B1cFBhZGRpbmcoUmVuZGVyU3R5bGUqIHN0eWxlKSBjb25z
dAotewotICAgIGNvbnN0IGludCBwYWRkaW5nTGVmdCA9IDQ7Ci0gICAgY29uc3QgaW50IHBhZGRp
bmdSaWdodCA9IHN0eWxlLT53aWR0aCgpLmlzRml4ZWQoKSB8fCBzdHlsZS0+d2lkdGgoKS5pc1Bl
cmNlbnQoKSA/IDUgOiA4OwotCi0gICAgc3R5bGUtPnNldFBhZGRpbmdMZWZ0KExlbmd0aChwYWRk
aW5nTGVmdCwgRml4ZWQpKTsKLQotICAgIFFTdHlsZU9wdGlvbkNvbWJvQm94IG9wdDsKLSAgICBp
bnQgdyA9IHFTdHlsZSgpLT5waXhlbE1ldHJpYyhRU3R5bGU6OlBNX0J1dHRvbkljb25TaXplLCAm
b3B0LCAwKTsKLSAgICBzdHlsZS0+c2V0UGFkZGluZ1JpZ2h0KExlbmd0aChwYWRkaW5nUmlnaHQg
KyB3LCBGaXhlZCkpOwotCi0gICAgc3R5bGUtPnNldFBhZGRpbmdUb3AoTGVuZ3RoKDIsIEZpeGVk
KSk7Ci0gICAgc3R5bGUtPnNldFBhZGRpbmdCb3R0b20oTGVuZ3RoKDIsIEZpeGVkKSk7Ci19Ci0K
LVFQYWxldHRlIFJlbmRlclRoZW1lUVN0eWxlOjpjb2xvclBhbGV0dGUoKSBjb25zdAotewotICAg
IFFQYWxldHRlIHBhbGV0dGUgPSBSZW5kZXJUaGVtZVF0Ojpjb2xvclBhbGV0dGUoKTsKLSAgICBz
ZXRQYWxldHRlRnJvbVBhZ2VDbGllbnRJZkV4aXN0cyhwYWxldHRlKTsKLSAgICByZXR1cm4gcGFs
ZXR0ZTsKLX0KLQotYm9vbCBSZW5kZXJUaGVtZVFTdHlsZTo6cGFpbnRNZW51TGlzdChSZW5kZXJP
YmplY3QqIG8sIGNvbnN0IFBhaW50SW5mbyYgaSwgY29uc3QgSW50UmVjdCYgcikKLXsKLSAgICBT
dHlsZVBhaW50ZXJRU3R5bGUgcCh0aGlzLCBpKTsKLSAgICBpZiAoIXAuaXNWYWxpZCgpKQotICAg
ICAgICByZXR1cm4gdHJ1ZTsKLQotICAgIFFTdHlsZU9wdGlvbkNvbWJvQm94IG9wdDsKLSAgICBp
bml0U3R5bGVPcHRpb24ocC53aWRnZXQsIG9wdCk7Ci0gICAgaW5pdGlhbGl6ZUNvbW1vblFTdHls
ZU9wdGlvbnMob3B0LCBvKTsKLQotICAgIEludFJlY3QgcmVjdCA9IHI7Ci0KLSNpZiBkZWZpbmVk
KFFfV1NfTUFDKSAmJiAhZGVmaW5lZChRVF9OT19TVFlMRV9NQUMpCi0gICAgLy8gUU1hY1N0eWxl
IG1ha2VzIHRoZSBjb21ibyBib3hlcyBhIGxpdHRsZSBiaXQgc21hbGxlciB0byBsZWF2ZSBzcGFj
ZSBmb3IgdGhlIGZvY3VzIHJlY3QuCi0gICAgLy8gQmVjYXVzZSBvZiBpdCwgdGhlIGNvbWJvIGJ1
dHRvbiBpcyBkcmF3biBhdCBhIHBvaW50IHRvIHRoZSBsZWZ0IG9mIHdoZXJlIGl0IHdhcyBleHBl
Y3QgdG8gYmUgYW5kIG1heSBlbmQgdXAKLSAgICAvLyBvdmVybGFwcGVkIHdpdGggdGhlIHRleHQu
IFRoaXMgd2lsbCBmb3JjZSBRTWFjU3R5bGUgdG8gZHJhdyB0aGUgY29tYm8gYm94IHdpdGggdGhl
IGV4cGVjdGVkIHdpZHRoLgotICAgIGlmIChxb2JqZWN0X2Nhc3Q8UU1hY1N0eWxlKj4ocC5zdHls
ZSkpCi0gICAgICAgIHJlY3QuaW5mbGF0ZVgoMyk7Ci0jZW5kaWYKLQotICAgIGNvbnN0IFFQb2lu
dCB0b3BMZWZ0ID0gcmVjdC5sb2NhdGlvbigpOwotICAgIHAucGFpbnRlci0+dHJhbnNsYXRlKHRv
cExlZnQpOwotICAgIG9wdC5yZWN0Lm1vdmVUbyhRUG9pbnQoMCwgMCkpOwotICAgIG9wdC5yZWN0
LnNldFNpemUocmVjdC5zaXplKCkpOwotCi0gICAgcC5kcmF3Q29tcGxleENvbnRyb2woUVN0eWxl
OjpDQ19Db21ib0JveCwgb3B0KTsKLSAgICBwLnBhaW50ZXItPnRyYW5zbGF0ZSgtdG9wTGVmdCk7
Ci0gICAgcmV0dXJuIGZhbHNlOwotfQotCi12b2lkIFJlbmRlclRoZW1lUVN0eWxlOjphZGp1c3RN
ZW51TGlzdEJ1dHRvblN0eWxlKFN0eWxlUmVzb2x2ZXIqIHN0eWxlUmVzb2x2ZXIsIFJlbmRlclN0
eWxlKiBzdHlsZSwgRWxlbWVudCogZSkgY29uc3QKLXsKLSAgICAvLyBXT1JLQVJPVU5EIGJlY2F1
c2UgaHRtbC5jc3Mgc3BlY2lmaWVzIC13ZWJraXQtYm9yZGVyLXJhZGl1cyBmb3IgPHNlbGVjdD4g
c28gd2Ugb3ZlcnJpZGUgaXQgaGVyZQotICAgIC8vIHNlZSBhbHNvIGh0dHA6Ly9idWdzLndlYmtp
dC5vcmcvc2hvd19idWcuY2dpP2lkPTE4Mzk5Ci0gICAgc3R5bGUtPnJlc2V0Qm9yZGVyUmFkaXVz
KCk7Ci0KLSAgICBSZW5kZXJUaGVtZVF0OjphZGp1c3RNZW51TGlzdEJ1dHRvblN0eWxlKHN0eWxl
UmVzb2x2ZXIsIHN0eWxlLCBlKTsKLX0KLQotYm9vbCBSZW5kZXJUaGVtZVFTdHlsZTo6cGFpbnRN
ZW51TGlzdEJ1dHRvbihSZW5kZXJPYmplY3QqIG8sIGNvbnN0IFBhaW50SW5mbyYgaSwKLSAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBJbnRSZWN0JiByKQotewot
ICAgIFN0eWxlUGFpbnRlclFTdHlsZSBwKHRoaXMsIGkpOwotICAgIGlmICghcC5pc1ZhbGlkKCkp
Ci0gICAgICAgIHJldHVybiB0cnVlOwotCi0gICAgUVN0eWxlT3B0aW9uQ29tYm9Cb3ggb3B0aW9u
OwotICAgIGluaXRTdHlsZU9wdGlvbihwLndpZGdldCwgb3B0aW9uKTsKLSAgICBpbml0aWFsaXpl
Q29tbW9uUVN0eWxlT3B0aW9ucyhvcHRpb24sIG8pOwotICAgIG9wdGlvbi5yZWN0ID0gcjsKLQot
ICAgIC8vIGZvciBkcmF3aW5nIHRoZSBjb21ibyBib3ggYXJyb3csIHJlbHkgb25seSBvbiB0aGUg
ZmFsbGJhY2sgc3R5bGUKLSAgICBwLnN0eWxlID0gZmFsbGJhY2tTdHlsZSgpOwotICAgIG9wdGlv
bi5zdWJDb250cm9scyA9IFFTdHlsZTo6U0NfQ29tYm9Cb3hBcnJvdzsKLSAgICBwLmRyYXdDb21w
bGV4Q29udHJvbChRU3R5bGU6OkNDX0NvbWJvQm94LCBvcHRpb24pOwotCi0gICAgcmV0dXJuIGZh
bHNlOwotfQotCi0jaWYgRU5BQkxFKFBST0dSRVNTX0VMRU1FTlQpCi1kb3VibGUgUmVuZGVyVGhl
bWVRU3R5bGU6OmFuaW1hdGlvbkR1cmF0aW9uRm9yUHJvZ3Jlc3NCYXIoUmVuZGVyUHJvZ3Jlc3Mq
IHJlbmRlclByb2dyZXNzKSBjb25zdAotewotICAgIGlmIChyZW5kZXJQcm9ncmVzcy0+cG9zaXRp
b24oKSA+PSAwKQotICAgICAgICByZXR1cm4gMDsKLQotICAgIFFTdHlsZU9wdGlvblByb2dyZXNz
QmFyVjIgb3B0aW9uOwotICAgIG9wdGlvbi5yZWN0LnNldFNpemUocmVuZGVyUHJvZ3Jlc3MtPnBp
eGVsU25hcHBlZFNpemUoKSk7Ci0gICAgLy8gRklYTUU6IFVudGlsIGh0dHA6Ly9idWdyZXBvcnRz
LnF0Lm5va2lhLmNvbS9icm93c2UvUVRCVUctOTE3MSBpcyBmaXhlZCwKLSAgICAvLyB3ZSBzaW11
bGF0ZSBvbmUgc3F1YXJlIGFuaW1hdGluZyBhY3Jvc3MgdGhlIHByb2dyZXNzIGJhci4KLSAgICBy
ZXR1cm4gKG9wdGlvbi5yZWN0LndpZHRoKCkgLyBxU3R5bGUoKS0+cGl4ZWxNZXRyaWMoUVN0eWxl
OjpQTV9Qcm9ncmVzc0JhckNodW5rV2lkdGgsICZvcHRpb24pKSAqIGFuaW1hdGlvblJlcGVhdElu
dGVydmFsRm9yUHJvZ3Jlc3NCYXIocmVuZGVyUHJvZ3Jlc3MpOwotfQotCi1ib29sIFJlbmRlclRo
ZW1lUVN0eWxlOjpwYWludFByb2dyZXNzQmFyKFJlbmRlck9iamVjdCogbywgY29uc3QgUGFpbnRJ
bmZvJiBwaSwgY29uc3QgSW50UmVjdCYgcikKLXsKLSAgICBpZiAoIW8tPmlzUHJvZ3Jlc3MoKSkK
LSAgICAgICAgcmV0dXJuIHRydWU7Ci0KLSAgICBTdHlsZVBhaW50ZXJRU3R5bGUgcCh0aGlzLCBw
aSk7Ci0gICAgaWYgKCFwLmlzVmFsaWQoKSkKLSAgICAgICByZXR1cm4gdHJ1ZTsKLQotICAgIFFT
dHlsZU9wdGlvblByb2dyZXNzQmFyVjIgb3B0aW9uOwotICAgIGluaXRTdHlsZU9wdGlvbihwLndp
ZGdldCwgb3B0aW9uKTsKLSAgICBpbml0aWFsaXplQ29tbW9uUVN0eWxlT3B0aW9ucyhvcHRpb24s
IG8pOwotCi0gICAgUmVuZGVyUHJvZ3Jlc3MqIHJlbmRlclByb2dyZXNzID0gdG9SZW5kZXJQcm9n
cmVzcyhvKTsKLSAgICBvcHRpb24ucmVjdCA9IHI7Ci0gICAgb3B0aW9uLm1heGltdW0gPSBzdGQ6
Om51bWVyaWNfbGltaXRzPGludD46Om1heCgpOwotICAgIG9wdGlvbi5taW5pbXVtID0gMDsKLSAg
ICBvcHRpb24ucHJvZ3Jlc3MgPSAocmVuZGVyUHJvZ3Jlc3MtPnBvc2l0aW9uKCkgKiBzdGQ6Om51
bWVyaWNfbGltaXRzPGludD46Om1heCgpKTsKLQotICAgIGNvbnN0IFFQb2ludCB0b3BMZWZ0ID0g
ci5sb2NhdGlvbigpOwotICAgIHAucGFpbnRlci0+dHJhbnNsYXRlKHRvcExlZnQpOwotICAgIG9w
dGlvbi5yZWN0Lm1vdmVUbyhRUG9pbnQoMCwgMCkpOwotICAgIG9wdGlvbi5yZWN0LnNldFNpemUo
ci5zaXplKCkpOwotCi0gICAgaWYgKG9wdGlvbi5wcm9ncmVzcyA8IDApIHsKLSAgICAgICAgLy8g
RklYTUU6IFVudGlsIGh0dHA6Ly9idWdyZXBvcnRzLnF0Lm5va2lhLmNvbS9icm93c2UvUVRCVUct
OTE3MSBpcyBmaXhlZCwKLSAgICAgICAgLy8gd2Ugc2ltdWxhdGUgb25lIHNxdWFyZSBhbmltYXRp
bmcgYWNyb3NzIHRoZSBwcm9ncmVzcyBiYXIuCi0gICAgICAgIHAuZHJhd0NvbnRyb2woUVN0eWxl
OjpDRV9Qcm9ncmVzc0Jhckdyb292ZSwgb3B0aW9uKTsKLSAgICAgICAgaW50IGNodW5rV2lkdGgg
PSBxU3R5bGUoKS0+cGl4ZWxNZXRyaWMoUVN0eWxlOjpQTV9Qcm9ncmVzc0JhckNodW5rV2lkdGgs
ICZvcHRpb24pOwotICAgICAgICBRQ29sb3IgY29sb3IgPSAob3B0aW9uLnBhbGV0dGUuaGlnaGxp
Z2h0KCkgPT0gb3B0aW9uLnBhbGV0dGUuYmFja2dyb3VuZCgpKSA/IG9wdGlvbi5wYWxldHRlLmNv
bG9yKFFQYWxldHRlOjpBY3RpdmUsIFFQYWxldHRlOjpIaWdobGlnaHQpIDogb3B0aW9uLnBhbGV0
dGUuY29sb3IoUVBhbGV0dGU6OkhpZ2hsaWdodCk7Ci0gICAgICAgIGlmIChyZW5kZXJQcm9ncmVz
cy0+c3R5bGUoKS0+ZGlyZWN0aW9uKCkgPT0gUlRMKQotICAgICAgICAgICAgcC5wYWludGVyLT5m
aWxsUmVjdChvcHRpb24ucmVjdC5yaWdodCgpIC0gY2h1bmtXaWR0aCAgLSByZW5kZXJQcm9ncmVz
cy0+YW5pbWF0aW9uUHJvZ3Jlc3MoKSAqIG9wdGlvbi5yZWN0LndpZHRoKCksIDAsIGNodW5rV2lk
dGgsIG9wdGlvbi5yZWN0LmhlaWdodCgpLCBjb2xvcik7Ci0gICAgICAgIGVsc2UKLSAgICAgICAg
ICAgIHAucGFpbnRlci0+ZmlsbFJlY3QocmVuZGVyUHJvZ3Jlc3MtPmFuaW1hdGlvblByb2dyZXNz
KCkgKiBvcHRpb24ucmVjdC53aWR0aCgpLCAwLCBjaHVua1dpZHRoLCBvcHRpb24ucmVjdC5oZWln
aHQoKSwgY29sb3IpOwotICAgIH0gZWxzZQotICAgICAgICBwLmRyYXdDb250cm9sKFFTdHlsZTo6
Q0VfUHJvZ3Jlc3NCYXIsIG9wdGlvbik7Ci0KLSAgICBwLnBhaW50ZXItPnRyYW5zbGF0ZSgtdG9w
TGVmdCk7Ci0KLSAgICByZXR1cm4gZmFsc2U7Ci19Ci0jZW5kaWYKLQotYm9vbCBSZW5kZXJUaGVt
ZVFTdHlsZTo6cGFpbnRTbGlkZXJUcmFjayhSZW5kZXJPYmplY3QqIG8sIGNvbnN0IFBhaW50SW5m
byYgcGksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgSW50UmVj
dCYgcikKLXsKLSAgICBTdHlsZVBhaW50ZXJRU3R5bGUgcCh0aGlzLCBwaSk7Ci0gICAgaWYgKCFw
LmlzVmFsaWQoKSkKLSAgICAgICAgcmV0dXJuIHRydWU7Ci0KLSAgICBjb25zdCBRUG9pbnQgdG9w
TGVmdCA9IHIubG9jYXRpb24oKTsKLSAgICBwLnBhaW50ZXItPnRyYW5zbGF0ZSh0b3BMZWZ0KTsK
LQotICAgIFFTdHlsZU9wdGlvblNsaWRlciBvcHRpb247Ci0gICAgaW5pdFN0eWxlT3B0aW9uKHAu
d2lkZ2V0LCBvcHRpb24pOwotICAgIG9wdGlvbi5zdWJDb250cm9scyA9IFFTdHlsZTo6U0NfU2xp
ZGVyR3Jvb3ZlOwotICAgIENvbnRyb2xQYXJ0IGFwcGVhcmFuY2UgPSBpbml0aWFsaXplQ29tbW9u
UVN0eWxlT3B0aW9ucyhvcHRpb24sIG8pOwotICAgIG9wdGlvbi5yZWN0ID0gcjsKLSAgICBvcHRp
b24ucmVjdC5tb3ZlVG8oUVBvaW50KDAsIDApKTsKLSAgICBpZiAoYXBwZWFyYW5jZSA9PSBTbGlk
ZXJWZXJ0aWNhbFBhcnQpCi0gICAgICAgIG9wdGlvbi5vcmllbnRhdGlvbiA9IFF0OjpWZXJ0aWNh
bDsKLSAgICBpZiAoaXNQcmVzc2VkKG8pKQotICAgICAgICBvcHRpb24uc3RhdGUgfD0gUVN0eWxl
OjpTdGF0ZV9TdW5rZW47Ci0KLSAgICAvLyBzb21lIHN0eWxlcyBuZWVkIHRoaXMgdG8gc2hvdyBh
IGhpZ2hsaWdodCBvbiBvbmUgc2lkZSBvZiB0aGUgZ3Jvb3ZlCi0gICAgSFRNTElucHV0RWxlbWVu
dCogc2xpZGVyID0gby0+bm9kZSgpLT50b0lucHV0RWxlbWVudCgpOwotICAgIGlmIChzbGlkZXIp
IHsKLSAgICAgICAgb3B0aW9uLnVwc2lkZURvd24gPSAoYXBwZWFyYW5jZSA9PSBTbGlkZXJIb3Jp
em9udGFsUGFydCkgJiYgIW8tPnN0eWxlKCktPmlzTGVmdFRvUmlnaHREaXJlY3Rpb24oKTsKLSAg
ICAgICAgLy8gVXNlIHRoZSB3aWR0aCBhcyBhIG11bHRpcGxpZXIgaW4gY2FzZSB0aGUgc2xpZGVy
IHZhbHVlcyBhcmUgPD0gMQotICAgICAgICBjb25zdCBpbnQgd2lkdGggPSByLndpZHRoKCkgPiAw
ID8gci53aWR0aCgpIDogMTAwOwotICAgICAgICBvcHRpb24ubWF4aW11bSA9IHNsaWRlci0+bWF4
aW11bSgpICogd2lkdGg7Ci0gICAgICAgIG9wdGlvbi5taW5pbXVtID0gc2xpZGVyLT5taW5pbXVt
KCkgKiB3aWR0aDsKLSAgICAgICAgaWYgKCFvcHRpb24udXBzaWRlRG93bikKLSAgICAgICAgICAg
IG9wdGlvbi5zbGlkZXJQb3NpdGlvbiA9IHNsaWRlci0+dmFsdWVBc051bWJlcigpICogd2lkdGg7
Ci0gICAgICAgIGVsc2UKLSAgICAgICAgICAgIG9wdGlvbi5zbGlkZXJQb3NpdGlvbiA9IG9wdGlv
bi5taW5pbXVtICsgb3B0aW9uLm1heGltdW0gLSBzbGlkZXItPnZhbHVlQXNOdW1iZXIoKSAqIHdp
ZHRoOwotICAgIH0KLQotICAgIHAuZHJhd0NvbXBsZXhDb250cm9sKFFTdHlsZTo6Q0NfU2xpZGVy
LCBvcHRpb24pOwotCi0gICAgaWYgKG9wdGlvbi5zdGF0ZSAmIFFTdHlsZTo6U3RhdGVfSGFzRm9j
dXMpIHsKLSAgICAgICAgUVN0eWxlT3B0aW9uRm9jdXNSZWN0IGZvY3VzT3B0aW9uOwotICAgICAg
ICBmb2N1c09wdGlvbi5yZWN0ID0gcjsKLSAgICAgICAgcC5kcmF3UHJpbWl0aXZlKFFTdHlsZTo6
UEVfRnJhbWVGb2N1c1JlY3QsIGZvY3VzT3B0aW9uKTsKLSAgICB9Ci0gICAgcC5wYWludGVyLT50
cmFuc2xhdGUoLXRvcExlZnQpOwotICAgIHJldHVybiBmYWxzZTsKLX0KLQotdm9pZCBSZW5kZXJU
aGVtZVFTdHlsZTo6YWRqdXN0U2xpZGVyVHJhY2tTdHlsZShTdHlsZVJlc29sdmVyKiwgUmVuZGVy
U3R5bGUqIHN0eWxlLCBFbGVtZW50KikgY29uc3QKLXsKLSAgICBzdHlsZS0+c2V0Qm94U2hhZG93
KG51bGxwdHIpOwotfQotCi1ib29sIFJlbmRlclRoZW1lUVN0eWxlOjpwYWludFNsaWRlclRodW1i
KFJlbmRlck9iamVjdCogbywgY29uc3QgUGFpbnRJbmZvJiBwaSwKLSAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBjb25zdCBJbnRSZWN0JiByKQotewotICAgIFN0eWxlUGFpbnRl
clFTdHlsZSBwKHRoaXMsIHBpKTsKLSAgICBpZiAoIXAuaXNWYWxpZCgpKQotICAgICAgICByZXR1
cm4gdHJ1ZTsKLQotICAgIGNvbnN0IFFQb2ludCB0b3BMZWZ0ID0gci5sb2NhdGlvbigpOwotICAg
IHAucGFpbnRlci0+dHJhbnNsYXRlKHRvcExlZnQpOwotCi0gICAgUVN0eWxlT3B0aW9uU2xpZGVy
IG9wdGlvbjsKLSAgICBpbml0U3R5bGVPcHRpb24ocC53aWRnZXQsIG9wdGlvbik7Ci0gICAgb3B0
aW9uLnN1YkNvbnRyb2xzID0gUVN0eWxlOjpTQ19TbGlkZXJIYW5kbGU7Ci0gICAgQ29udHJvbFBh
cnQgYXBwZWFyYW5jZSA9IGluaXRpYWxpemVDb21tb25RU3R5bGVPcHRpb25zKG9wdGlvbiwgbyk7
Ci0gICAgb3B0aW9uLnJlY3QgPSByOwotICAgIG9wdGlvbi5yZWN0Lm1vdmVUbyhRUG9pbnQoMCwg
MCkpOwotICAgIGlmIChhcHBlYXJhbmNlID09IFNsaWRlclRodW1iVmVydGljYWxQYXJ0KQotICAg
ICAgICBvcHRpb24ub3JpZW50YXRpb24gPSBRdDo6VmVydGljYWw7Ci0gICAgaWYgKGlzUHJlc3Nl
ZChvKSkgewotICAgICAgICBvcHRpb24uYWN0aXZlU3ViQ29udHJvbHMgPSBRU3R5bGU6OlNDX1Ns
aWRlckhhbmRsZTsKLSAgICAgICAgb3B0aW9uLnN0YXRlIHw9IFFTdHlsZTo6U3RhdGVfU3Vua2Vu
OwotICAgIH0KLQotICAgIHAuZHJhd0NvbXBsZXhDb250cm9sKFFTdHlsZTo6Q0NfU2xpZGVyLCBv
cHRpb24pOwotICAgIHAucGFpbnRlci0+dHJhbnNsYXRlKC10b3BMZWZ0KTsKLSAgICByZXR1cm4g
ZmFsc2U7Ci19Ci0KLXZvaWQgUmVuZGVyVGhlbWVRU3R5bGU6OmFkanVzdFNsaWRlclRodW1iU3R5
bGUoU3R5bGVSZXNvbHZlciogc3R5bGVSZXNvbHZlciwgUmVuZGVyU3R5bGUqIHN0eWxlLCBFbGVt
ZW50KiBlbGVtZW50KSBjb25zdAotewotICAgIFJlbmRlclRoZW1lOjphZGp1c3RTbGlkZXJUaHVt
YlN0eWxlKHN0eWxlUmVzb2x2ZXIsIHN0eWxlLCBlbGVtZW50KTsKLSAgICBzdHlsZS0+c2V0Qm94
U2hhZG93KG51bGxwdHIpOwotfQotCi1ib29sIFJlbmRlclRoZW1lUVN0eWxlOjpwYWludFNlYXJj
aEZpZWxkKFJlbmRlck9iamVjdCogbywgY29uc3QgUGFpbnRJbmZvJiBwaSwKLSAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBJbnRSZWN0JiByKQotewotICAgIHJldHVy
biBwYWludFRleHRGaWVsZChvLCBwaSwgcik7Ci19Ci0KLXZvaWQgUmVuZGVyVGhlbWVRU3R5bGU6
OmFkanVzdFNlYXJjaEZpZWxkRGVjb3JhdGlvblN0eWxlKFN0eWxlUmVzb2x2ZXIqIHN0eWxlUmVz
b2x2ZXIsIFJlbmRlclN0eWxlKiBzdHlsZSwgRWxlbWVudCogZSkgY29uc3QKLXsKLSAgICBub3RJ
bXBsZW1lbnRlZCgpOwotICAgIFJlbmRlclRoZW1lOjphZGp1c3RTZWFyY2hGaWVsZERlY29yYXRp
b25TdHlsZShzdHlsZVJlc29sdmVyLCBzdHlsZSwgZSk7Ci19Ci0KLWJvb2wgUmVuZGVyVGhlbWVR
U3R5bGU6OnBhaW50U2VhcmNoRmllbGREZWNvcmF0aW9uKFJlbmRlck9iamVjdCogbywgY29uc3Qg
UGFpbnRJbmZvJiBwaSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgY29uc3QgSW50UmVjdCYgcikKLXsKLSAgICBub3RJbXBsZW1lbnRlZCgpOwotICAgIHJl
dHVybiBSZW5kZXJUaGVtZTo6cGFpbnRTZWFyY2hGaWVsZERlY29yYXRpb24obywgcGksIHIpOwot
fQotCi12b2lkIFJlbmRlclRoZW1lUVN0eWxlOjphZGp1c3RTZWFyY2hGaWVsZFJlc3VsdHNEZWNv
cmF0aW9uU3R5bGUoU3R5bGVSZXNvbHZlciogc3R5bGVSZXNvbHZlciwgUmVuZGVyU3R5bGUqIHN0
eWxlLCBFbGVtZW50KiBlKSBjb25zdAotewotICAgIG5vdEltcGxlbWVudGVkKCk7Ci0gICAgUmVu
ZGVyVGhlbWU6OmFkanVzdFNlYXJjaEZpZWxkUmVzdWx0c0RlY29yYXRpb25TdHlsZShzdHlsZVJl
c29sdmVyLCBzdHlsZSwgZSk7Ci19Ci0KLWJvb2wgUmVuZGVyVGhlbWVRU3R5bGU6OnBhaW50U2Vh
cmNoRmllbGRSZXN1bHRzRGVjb3JhdGlvbihSZW5kZXJPYmplY3QqIG8sIGNvbnN0IFBhaW50SW5m
byYgcGksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBjb25zdCBJbnRSZWN0JiByKQotewotICAgIG5vdEltcGxlbWVudGVkKCk7Ci0gICAgcmV0
dXJuIFJlbmRlclRoZW1lOjpwYWludFNlYXJjaEZpZWxkUmVzdWx0c0RlY29yYXRpb24obywgcGks
IHIpOwotfQotCi0jaWZuZGVmIFFUX05PX1NQSU5CT1gKLQotYm9vbCBSZW5kZXJUaGVtZVFTdHls
ZTo6cGFpbnRJbm5lclNwaW5CdXR0b24oUmVuZGVyT2JqZWN0KiBvLCBjb25zdCBQYWludEluZm8m
IHBhaW50SW5mbywgY29uc3QgSW50UmVjdCYgcmVjdCkKLXsKLSAgICBTdHlsZVBhaW50ZXJRU3R5
bGUgcCh0aGlzLCBwYWludEluZm8pOwotICAgIGlmICghcC5pc1ZhbGlkKCkpCi0gICAgICAgcmV0
dXJuIHRydWU7Ci0KLSAgICBRU3R5bGVPcHRpb25TcGluQm94IG9wdGlvbjsKLSAgICBpbml0U3R5
bGVPcHRpb24ocC53aWRnZXQsIG9wdGlvbik7Ci0gICAgb3B0aW9uLnN1YkNvbnRyb2xzID0gUVN0
eWxlOjpTQ19TcGluQm94VXAgfCBRU3R5bGU6OlNDX1NwaW5Cb3hEb3duOwotICAgIGlmICghaXNS
ZWFkT25seUNvbnRyb2wobykpIHsKLSAgICAgICAgaWYgKGlzRW5hYmxlZChvKSkKLSAgICAgICAg
ICAgIG9wdGlvbi5zdGVwRW5hYmxlZCA9IFFBYnN0cmFjdFNwaW5Cb3g6OlN0ZXBVcEVuYWJsZWQg
fCBRQWJzdHJhY3RTcGluQm94OjpTdGVwRG93bkVuYWJsZWQ7Ci0gICAgICAgIGlmIChpc1ByZXNz
ZWQobykpIHsKLSAgICAgICAgICAgIG9wdGlvbi5zdGF0ZSB8PSBRU3R5bGU6OlN0YXRlX1N1bmtl
bjsKLSAgICAgICAgICAgIGlmIChpc1NwaW5VcEJ1dHRvblBhcnRQcmVzc2VkKG8pKQotICAgICAg
ICAgICAgICAgIG9wdGlvbi5hY3RpdmVTdWJDb250cm9scyA9IFFTdHlsZTo6U0NfU3BpbkJveFVw
OwotICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgIG9wdGlvbi5hY3RpdmVTdWJDb250
cm9scyA9IFFTdHlsZTo6U0NfU3BpbkJveERvd247Ci0gICAgICAgIH0KLSAgICB9Ci0gICAgLy8g
UmVuZGVyIHRoZSBzcGluIGJ1dHRvbnMgZm9yIExUUiBvciBSVEwgYWNjb3JkaW5nbHkuCi0gICAg
b3B0aW9uLmRpcmVjdGlvbiA9IG8tPnN0eWxlKCktPmlzTGVmdFRvUmlnaHREaXJlY3Rpb24oKSA/
IFF0OjpMZWZ0VG9SaWdodCA6IFF0OjpSaWdodFRvTGVmdDsKLQotICAgIEludFJlY3QgYnV0dG9u
UmVjdCA9IHJlY3Q7Ci0gICAgLy8gRGVmYXVsdCB0byBtb3ZpbmcgdGhlIGJ1dHRvbnMgYSBsaXR0
bGUgYml0IHdpdGhpbiB0aGUgZWRpdG9yIGZyYW1lLgotICAgIGludCBpbmZsYXRlWCA9IC0yOwot
ICAgIGludCBpbmZsYXRlWSA9IC0yOwotI2lmIGRlZmluZWQoUV9XU19NQUMpICYmICFkZWZpbmVk
KFFUX05PX1NUWUxFX01BQykKLSAgICAvLyBRTWFjU3R5bGUgd2lsbCBwb3NpdGlvbiB0aGUgYXF1
YSBidXR0b25zIGZsdXNoIHRvIHRoZSByaWdodC4KLSAgICAvLyBUaGlzIHdpbGwgbW92ZSB0aGVt
IG1vcmUgd2l0aGluIHRoZSBjb250cm9sIGZvciBiZXR0ZXIgc3R5bGUsIGEgbGEKLSAgICAvLyBD
aHJvbWl1bSBsb29rICYgZmVlbC4KLSAgICBpZiAocW9iamVjdF9jYXN0PFFNYWNTdHlsZSo+KHAu
c3R5bGUpKSB7Ci0gICAgICAgIGluZmxhdGVYID0gLTQ7Ci0gICAgICAgIC8vIFJlbmRlciBtaW5p
IGFxdWEgc3BpbiBidXR0b25zIGZvciBRTWFjU3R5bGUgdG8gZml0IG5pY2VseSBpbnRvCi0gICAg
ICAgIC8vIHRoZSBlZGl0b3IgYXJlYSwgbGlrZSBDaHJvbWl1bS4KLSAgICAgICAgb3B0aW9uLnN0
YXRlIHw9IFFTdHlsZTo6U3RhdGVfTWluaTsKLSAgICB9Ci0jZW5kaWYKLSNpZiAhZGVmaW5lZChR
VF9OT19TVFlMRV9QTEFTVElRVUUpCi0gICAgLy8gUVBsYXN0aXF1ZVN0eWxlIGxvb2tzIGJlc3Qg
d2hlbiB0aGUgc3BpbiBidXR0b25zIGFyZSBmbHVzaCB3aXRoIHRoZSBmcmFtZSdzIGVkZ2UuCi0g
ICAgaWYgKHFvYmplY3RfY2FzdDxRUGxhc3RpcXVlU3R5bGUqPihwLnN0eWxlKSkgewotICAgICAg
ICBpbmZsYXRlWCA9IDA7Ci0gICAgICAgIGluZmxhdGVZID0gMDsKLSAgICB9Ci0jZW5kaWYKLQot
ICAgIGJ1dHRvblJlY3QuaW5mbGF0ZVgoaW5mbGF0ZVgpOwotICAgIGJ1dHRvblJlY3QuaW5mbGF0
ZVkoaW5mbGF0ZVkpOwotICAgIG9wdGlvbi5yZWN0ID0gYnV0dG9uUmVjdDsKLQotICAgIHAuZHJh
d0NvbXBsZXhDb250cm9sKFFTdHlsZTo6Q0NfU3BpbkJveCwgb3B0aW9uKTsKLSAgICByZXR1cm4g
ZmFsc2U7Ci19Ci0jZW5kaWYKLQotQ29udHJvbFBhcnQgUmVuZGVyVGhlbWVRU3R5bGU6OmluaXRp
YWxpemVDb21tb25RU3R5bGVPcHRpb25zKFFTdHlsZU9wdGlvbiYgb3B0aW9uLCBSZW5kZXJPYmpl
Y3QqIG8pIGNvbnN0Ci17Ci0gICAgLy8gRGVmYXVsdCBiaXRzOiBubyBmb2N1cywgbm8gbW91c2Ug
b3ZlcgotICAgIG9wdGlvbi5zdGF0ZSAmPSB+KFFTdHlsZTo6U3RhdGVfSGFzRm9jdXMgfCBRU3R5
bGU6OlN0YXRlX01vdXNlT3Zlcik7Ci0KLSAgICBpZiAoaXNSZWFkT25seUNvbnRyb2wobykpCi0g
ICAgICAgIC8vIFJlYWRvbmx5IGlzIHN1cHBvcnRlZCBvbiB0ZXh0ZmllbGRzLgotICAgICAgICBv
cHRpb24uc3RhdGUgfD0gUVN0eWxlOjpTdGF0ZV9SZWFkT25seTsKLQotICAgIG9wdGlvbi5kaXJl
Y3Rpb24gPSBRdDo6TGVmdFRvUmlnaHQ7Ci0KLSAgICBpZiAoaXNIb3ZlcmVkKG8pKQotICAgICAg
ICBvcHRpb24uc3RhdGUgfD0gUVN0eWxlOjpTdGF0ZV9Nb3VzZU92ZXI7Ci0KLSAgICBzZXRQYWxl
dHRlRnJvbVBhZ2VDbGllbnRJZkV4aXN0cyhvcHRpb24ucGFsZXR0ZSk7Ci0KLSAgICBpZiAoIWlz
RW5hYmxlZChvKSkgewotICAgICAgICBvcHRpb24ucGFsZXR0ZS5zZXRDdXJyZW50Q29sb3JHcm91
cChRUGFsZXR0ZTo6RGlzYWJsZWQpOwotICAgICAgICBvcHRpb24uc3RhdGUgJj0gflFTdHlsZTo6
U3RhdGVfRW5hYmxlZDsKLSAgICB9Ci0KLSAgICBSZW5kZXJTdHlsZSogc3R5bGUgPSBvLT5zdHls
ZSgpOwotICAgIGlmICghc3R5bGUpCi0gICAgICAgIHJldHVybiBOb0NvbnRyb2xQYXJ0OwotCi0g
ICAgQ29udHJvbFBhcnQgcmVzdWx0ID0gc3R5bGUtPmFwcGVhcmFuY2UoKTsKLSAgICBpZiAoc3Vw
cG9ydHNGb2N1cyhyZXN1bHQpICYmIGlzRm9jdXNlZChvKSkgewotICAgICAgICBvcHRpb24uc3Rh
dGUgfD0gUVN0eWxlOjpTdGF0ZV9IYXNGb2N1czsKLSAgICAgICAgb3B0aW9uLnN0YXRlIHw9IFFT
dHlsZTo6U3RhdGVfS2V5Ym9hcmRGb2N1c0NoYW5nZTsKLSAgICB9Ci0KLSAgICBpZiAoc3R5bGUt
PmRpcmVjdGlvbigpID09IFdlYkNvcmU6OlJUTCkKLSAgICAgICAgb3B0aW9uLmRpcmVjdGlvbiA9
IFF0OjpSaWdodFRvTGVmdDsKLQotICAgIHN3aXRjaCAocmVzdWx0KSB7Ci0gICAgY2FzZSBQdXNo
QnV0dG9uUGFydDoKLSAgICBjYXNlIFNxdWFyZUJ1dHRvblBhcnQ6Ci0gICAgY2FzZSBCdXR0b25Q
YXJ0OgotICAgIGNhc2UgQnV0dG9uQmV2ZWxQYXJ0OgotICAgIGNhc2UgTGlzdEl0ZW1QYXJ0Ogot
ICAgIGNhc2UgTWVudWxpc3RCdXR0b25QYXJ0OgotICAgIGNhc2UgU2VhcmNoRmllbGRSZXN1bHRz
QnV0dG9uUGFydDoKLSAgICBjYXNlIFNlYXJjaEZpZWxkQ2FuY2VsQnV0dG9uUGFydDogewotICAg
ICAgICBpZiAoaXNQcmVzc2VkKG8pKQotICAgICAgICAgICAgb3B0aW9uLnN0YXRlIHw9IFFTdHls
ZTo6U3RhdGVfU3Vua2VuOwotICAgICAgICBlbHNlIGlmIChyZXN1bHQgPT0gUHVzaEJ1dHRvblBh
cnQgfHwgcmVzdWx0ID09IEJ1dHRvblBhcnQpCi0gICAgICAgICAgICBvcHRpb24uc3RhdGUgfD0g
UVN0eWxlOjpTdGF0ZV9SYWlzZWQ7Ci0gICAgICAgIGJyZWFrOwotICAgIH0KLSAgICBjYXNlIFJh
ZGlvUGFydDoKLSAgICBjYXNlIENoZWNrYm94UGFydDoKLSAgICAgICAgb3B0aW9uLnN0YXRlIHw9
IChpc0NoZWNrZWQobykgPyBRU3R5bGU6OlN0YXRlX09uIDogUVN0eWxlOjpTdGF0ZV9PZmYpOwot
ICAgIH0KLQotICAgIHJldHVybiByZXN1bHQ7Ci19Ci0KLXZvaWQgUmVuZGVyVGhlbWVRU3R5bGU6
OmFkanVzdFNsaWRlclRodW1iU2l6ZShSZW5kZXJTdHlsZSogc3R5bGUsIEVsZW1lbnQqIGVsZW1l
bnQpIGNvbnN0Ci17Ci0gICAgY29uc3QgQ29udHJvbFBhcnQgcGFydCA9IHN0eWxlLT5hcHBlYXJh
bmNlKCk7Ci0gICAgaWYgKHBhcnQgPT0gU2xpZGVyVGh1bWJIb3Jpem9udGFsUGFydCB8fCBwYXJ0
ID09IFNsaWRlclRodW1iVmVydGljYWxQYXJ0KSB7Ci0gICAgICAgIFFTdHlsZU9wdGlvblNsaWRl
ciBvcHRpb247Ci0gICAgICAgIGlmIChwYXJ0ID09IFNsaWRlclRodW1iVmVydGljYWxQYXJ0KQot
ICAgICAgICAgICAgb3B0aW9uLm9yaWVudGF0aW9uID0gUXQ6OlZlcnRpY2FsOwotCi0gICAgICAg
IFFTdHlsZSogcXN0eWxlID0gcVN0eWxlKCk7Ci0KLSAgICAgICAgaW50IGxlbmd0aCA9IHFzdHls
ZS0+cGl4ZWxNZXRyaWMoUVN0eWxlOjpQTV9TbGlkZXJMZW5ndGgsICZvcHRpb24pOwotICAgICAg
ICBpbnQgdGhpY2tuZXNzID0gcXN0eWxlLT5waXhlbE1ldHJpYyhRU3R5bGU6OlBNX1NsaWRlclRo
aWNrbmVzcywgJm9wdGlvbik7Ci0gICAgICAgIGlmIChvcHRpb24ub3JpZW50YXRpb24gPT0gUXQ6
OlZlcnRpY2FsKSB7Ci0gICAgICAgICAgICBzdHlsZS0+c2V0V2lkdGgoTGVuZ3RoKHRoaWNrbmVz
cywgRml4ZWQpKTsKLSAgICAgICAgICAgIHN0eWxlLT5zZXRIZWlnaHQoTGVuZ3RoKGxlbmd0aCwg
Rml4ZWQpKTsKLSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIHN0eWxlLT5zZXRXaWR0aChM
ZW5ndGgobGVuZ3RoLCBGaXhlZCkpOwotICAgICAgICAgICAgc3R5bGUtPnNldEhlaWdodChMZW5n
dGgodGhpY2tuZXNzLCBGaXhlZCkpOwotICAgICAgICB9Ci0gICAgfSBlbHNlCi0gICAgICAgIFJl
bmRlclRoZW1lUXQ6OmFkanVzdFNsaWRlclRodW1iU2l6ZShzdHlsZSwgZWxlbWVudCk7Ci19Ci0K
LX0KLQotLy8gdmltOiB0cz00IHN3PTQgZXQKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvcXQv
V2ViQ29yZVN1cHBvcnQvUmVuZGVyVGhlbWVRU3R5bGUuaCBiL1NvdXJjZS9XZWJLaXQvcXQvV2Vi
Q29yZVN1cHBvcnQvUmVuZGVyVGhlbWVRU3R5bGUuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQK
aW5kZXggMmNjOTk5MzA4MDQ1MGY5MzkxMjc4ZDQ5ODcxZTU3MTkyNWQwZTFhZi4uMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViS2l0L3F0L1dl
YkNvcmVTdXBwb3J0L1JlbmRlclRoZW1lUVN0eWxlLmgKKysrIC9kZXYvbnVsbApAQCAtMSwxNDgg
KzAsMCBAQAotLyoKLSAqIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSB0aGVtZSBpbXBsZW1lbnRh
dGlvbiBmb3IgZm9ybSBjb250cm9scyBpbiBXZWJDb3JlLgotICoKLSAqIENvcHlyaWdodCAoQykg
MjAxMS0yMDEyIE5va2lhIENvcnBvcmF0aW9uIGFuZC9vciBpdHMgc3Vic2lkaWFyeSgtaWVzKS4K
LSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1
dGUgaXQgYW5kL29yCi0gKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGli
cmFyeSBHZW5lcmFsIFB1YmxpYwotICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUg
U29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCi0gKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2Us
IG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0gKgotICogVGhpcyBsaWJy
YXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0g
KiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJy
YW50eSBvZgotICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQ
VVJQT1NFLiAgU2VlIHRoZSBHTlUKLSAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBm
b3IgbW9yZSBkZXRhaWxzLgotICoKLSAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkg
b2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKLSAqIGFsb25nIHdpdGgg
dGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRv
Ci0gKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJl
ZXQsIEZpZnRoIEZsb29yLAotICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCi0gKgotICov
Ci0jaWZuZGVmIFJlbmRlclRoZW1lUVN0eWxlX2gKLSNkZWZpbmUgUmVuZGVyVGhlbWVRU3R5bGVf
aAotCi0jaW5jbHVkZSAiUmVuZGVyVGhlbWVRdC5oIgotCi0jaW5jbHVkZSA8UVN0eWxlPgotCi1R
VF9CRUdJTl9OQU1FU1BBQ0UKLSNpZm5kZWYgUVRfTk9fTElORUVESVQKLWNsYXNzIFFMaW5lRWRp
dDsKLSNlbmRpZgotY2xhc3MgUVBhaW50ZXI7Ci1jbGFzcyBRV2lkZ2V0OwotUVRfRU5EX05BTUVT
UEFDRQotCi1uYW1lc3BhY2UgV2ViQ29yZSB7Ci0KLWNsYXNzIFNjcm9sbGJhclRoZW1lUVN0eWxl
OwotCi1jbGFzcyBSZW5kZXJUaGVtZVFTdHlsZSA6IHB1YmxpYyBSZW5kZXJUaGVtZVF0IHsKLXBy
aXZhdGU6Ci0gICAgUmVuZGVyVGhlbWVRU3R5bGUoUGFnZSopOwotICAgIHZpcnR1YWwgflJlbmRl
clRoZW1lUVN0eWxlKCk7Ci0KLXB1YmxpYzoKLSAgICBzdGF0aWMgUGFzc1JlZlB0cjxSZW5kZXJU
aGVtZT4gY3JlYXRlKFBhZ2UqKTsKLQotICAgIHZpcnR1YWwgdm9pZCBhZGp1c3RTbGlkZXJUaHVt
YlNpemUoUmVuZGVyU3R5bGUqLCBFbGVtZW50KikgY29uc3Q7Ci0KLSAgICBRU3R5bGUqIHFTdHls
ZSgpIGNvbnN0OwotCi1wcm90ZWN0ZWQ6Ci0gICAgdmlydHVhbCB2b2lkIGFkanVzdEJ1dHRvblN0
eWxlKFN0eWxlUmVzb2x2ZXIqLCBSZW5kZXJTdHlsZSosIEVsZW1lbnQqKSBjb25zdDsKLSAgICB2
aXJ0dWFsIGJvb2wgcGFpbnRCdXR0b24oUmVuZGVyT2JqZWN0KiwgY29uc3QgUGFpbnRJbmZvJiwg
Y29uc3QgSW50UmVjdCYpOwotCi0gICAgdmlydHVhbCBib29sIHBhaW50VGV4dEZpZWxkKFJlbmRl
ck9iamVjdCosIGNvbnN0IFBhaW50SW5mbyYsIGNvbnN0IEludFJlY3QmKTsKLQotICAgIHZpcnR1
YWwgYm9vbCBwYWludFRleHRBcmVhKFJlbmRlck9iamVjdCosIGNvbnN0IFBhaW50SW5mbyYsIGNv
bnN0IEludFJlY3QmKTsKLSAgICB2aXJ0dWFsIHZvaWQgYWRqdXN0VGV4dEFyZWFTdHlsZShTdHls
ZVJlc29sdmVyKiwgUmVuZGVyU3R5bGUqLCBFbGVtZW50KikgY29uc3Q7Ci0KLSAgICB2aXJ0dWFs
IGJvb2wgcGFpbnRNZW51TGlzdChSZW5kZXJPYmplY3QqLCBjb25zdCBQYWludEluZm8mLCBjb25z
dCBJbnRSZWN0Jik7Ci0KLSAgICB2aXJ0dWFsIGJvb2wgcGFpbnRNZW51TGlzdEJ1dHRvbihSZW5k
ZXJPYmplY3QqLCBjb25zdCBQYWludEluZm8mLCBjb25zdCBJbnRSZWN0Jik7Ci0gICAgdmlydHVh
bCB2b2lkIGFkanVzdE1lbnVMaXN0QnV0dG9uU3R5bGUoU3R5bGVSZXNvbHZlciosIFJlbmRlclN0
eWxlKiwgRWxlbWVudCopIGNvbnN0OwotCi0jaWYgRU5BQkxFKFBST0dSRVNTX0VMRU1FTlQpCi0g
ICAgLy8gUmV0dXJucyB0aGUgZHVyYXRpb24gb2YgdGhlIGFuaW1hdGlvbiBmb3IgdGhlIHByb2dy
ZXNzIGJhci4KLSAgICB2aXJ0dWFsIGRvdWJsZSBhbmltYXRpb25EdXJhdGlvbkZvclByb2dyZXNz
QmFyKFJlbmRlclByb2dyZXNzKikgY29uc3Q7Ci0gICAgdmlydHVhbCBib29sIHBhaW50UHJvZ3Jl
c3NCYXIoUmVuZGVyT2JqZWN0KiwgY29uc3QgUGFpbnRJbmZvJiwgY29uc3QgSW50UmVjdCYpOwot
I2VuZGlmCi0KLSAgICB2aXJ0dWFsIGJvb2wgcGFpbnRTbGlkZXJUcmFjayhSZW5kZXJPYmplY3Qq
LCBjb25zdCBQYWludEluZm8mLCBjb25zdCBJbnRSZWN0Jik7Ci0gICAgdmlydHVhbCB2b2lkIGFk
anVzdFNsaWRlclRyYWNrU3R5bGUoU3R5bGVSZXNvbHZlciosIFJlbmRlclN0eWxlKiwgRWxlbWVu
dCopIGNvbnN0OwotCi0gICAgdmlydHVhbCBib29sIHBhaW50U2xpZGVyVGh1bWIoUmVuZGVyT2Jq
ZWN0KiwgY29uc3QgUGFpbnRJbmZvJiwgY29uc3QgSW50UmVjdCYpOwotICAgIHZpcnR1YWwgdm9p
ZCBhZGp1c3RTbGlkZXJUaHVtYlN0eWxlKFN0eWxlUmVzb2x2ZXIqLCBSZW5kZXJTdHlsZSosIEVs
ZW1lbnQqKSBjb25zdDsKLQotICAgIHZpcnR1YWwgYm9vbCBwYWludFNlYXJjaEZpZWxkKFJlbmRl
ck9iamVjdCosIGNvbnN0IFBhaW50SW5mbyYsIGNvbnN0IEludFJlY3QmKTsKLQotICAgIHZpcnR1
YWwgdm9pZCBhZGp1c3RTZWFyY2hGaWVsZERlY29yYXRpb25TdHlsZShTdHlsZVJlc29sdmVyKiwg
UmVuZGVyU3R5bGUqLCBFbGVtZW50KikgY29uc3Q7Ci0gICAgdmlydHVhbCBib29sIHBhaW50U2Vh
cmNoRmllbGREZWNvcmF0aW9uKFJlbmRlck9iamVjdCosIGNvbnN0IFBhaW50SW5mbyYsIGNvbnN0
IEludFJlY3QmKTsKLQotICAgIHZpcnR1YWwgdm9pZCBhZGp1c3RTZWFyY2hGaWVsZFJlc3VsdHNE
ZWNvcmF0aW9uU3R5bGUoU3R5bGVSZXNvbHZlciosIFJlbmRlclN0eWxlKiwgRWxlbWVudCopIGNv
bnN0OwotICAgIHZpcnR1YWwgYm9vbCBwYWludFNlYXJjaEZpZWxkUmVzdWx0c0RlY29yYXRpb24o
UmVuZGVyT2JqZWN0KiwgY29uc3QgUGFpbnRJbmZvJiwgY29uc3QgSW50UmVjdCYpOwotCi0jaWZu
ZGVmIFFUX05PX1NQSU5CT1gKLSAgICB2aXJ0dWFsIGJvb2wgcGFpbnRJbm5lclNwaW5CdXR0b24o
UmVuZGVyT2JqZWN0KiwgY29uc3QgUGFpbnRJbmZvJiwgY29uc3QgSW50UmVjdCYpOwotI2VuZGlm
Ci0KLXByb3RlY3RlZDoKLSAgICB2aXJ0dWFsIHZvaWQgY29tcHV0ZVNpemVCYXNlZE9uU3R5bGUo
UmVuZGVyU3R5bGUqKSBjb25zdDsKLQotICAgIHZpcnR1YWwgUVNoYXJlZFBvaW50ZXI8U3R5bGVQ
YWludGVyPiBnZXRTdHlsZVBhaW50ZXIoY29uc3QgUGFpbnRJbmZvJik7Ci0KLSAgICB2aXJ0dWFs
IFFSZWN0IGluZmxhdGVCdXR0b25SZWN0KGNvbnN0IFFSZWN0JiBvcmlnaW5hbFJlY3QpIGNvbnN0
OwotCi0gICAgdmlydHVhbCB2b2lkIHNldFBvcHVwUGFkZGluZyhSZW5kZXJTdHlsZSopIGNvbnN0
OwotCi0gICAgdmlydHVhbCBRUGFsZXR0ZSBjb2xvclBhbGV0dGUoKSBjb25zdDsKLQotcHJpdmF0
ZToKLSAgICBDb250cm9sUGFydCBpbml0aWFsaXplQ29tbW9uUVN0eWxlT3B0aW9ucyhRU3R5bGVP
cHRpb24mLCBSZW5kZXJPYmplY3QqKSBjb25zdDsKLQotICAgIHZvaWQgc2V0QnV0dG9uUGFkZGlu
ZyhSZW5kZXJTdHlsZSopIGNvbnN0OwotCi0gICAgaW50IGZpbmRGcmFtZUxpbmVXaWR0aChRU3R5
bGUqKSBjb25zdDsKLQotICAgIFFTdHlsZSogZmFsbGJhY2tTdHlsZSgpIGNvbnN0OwotCi0gICAg
dm9pZCBzZXRQYWxldHRlRnJvbVBhZ2VDbGllbnRJZkV4aXN0cyhRUGFsZXR0ZSYpIGNvbnN0Owot
Ci0jaWZkZWYgUV9PU19NQUMKLSAgICBpbnQgbV9idXR0b25Gb250UGl4ZWxTaXplOwotI2VuZGlm
Ci0KLSAgICBRU3R5bGUqIG1fZmFsbGJhY2tTdHlsZTsKLSNpZm5kZWYgUVRfTk9fTElORUVESVQK
LSAgICBtdXRhYmxlIFFMaW5lRWRpdCogbV9saW5lRWRpdDsKLSNlbmRpZgotfTsKLQotY2xhc3Mg
U3R5bGVQYWludGVyUVN0eWxlIDogcHVibGljIFN0eWxlUGFpbnRlciB7Ci1wdWJsaWM6Ci0gICAg
ZXhwbGljaXQgU3R5bGVQYWludGVyUVN0eWxlKFJlbmRlclRoZW1lUVN0eWxlKiwgY29uc3QgUGFp
bnRJbmZvJik7Ci0gICAgZXhwbGljaXQgU3R5bGVQYWludGVyUVN0eWxlKFNjcm9sbGJhclRoZW1l
UVN0eWxlKiwgR3JhcGhpY3NDb250ZXh0Kik7Ci0KLSAgICBib29sIGlzVmFsaWQoKSBjb25zdCB7
IHJldHVybiBzdHlsZSAmJiBTdHlsZVBhaW50ZXI6OmlzVmFsaWQoKTsgfQotCi0gICAgUVdpZGdl
dCogd2lkZ2V0OwotICAgIFFTdHlsZSogc3R5bGU7Ci0KLSAgICB2b2lkIGRyYXdQcmltaXRpdmUo
UVN0eWxlOjpQcmltaXRpdmVFbGVtZW50IHBlLCBjb25zdCBRU3R5bGVPcHRpb24mIG9wdCkKLSAg
ICB7IHN0eWxlLT5kcmF3UHJpbWl0aXZlKHBlLCAmb3B0LCBwYWludGVyLCB3aWRnZXQpOyB9Ci0g
ICAgdm9pZCBkcmF3Q29udHJvbChRU3R5bGU6OkNvbnRyb2xFbGVtZW50IGNlLCBjb25zdCBRU3R5
bGVPcHRpb24mIG9wdCkKLSAgICB7IHN0eWxlLT5kcmF3Q29udHJvbChjZSwgJm9wdCwgcGFpbnRl
ciwgd2lkZ2V0KTsgfQotICAgIHZvaWQgZHJhd0NvbXBsZXhDb250cm9sKFFTdHlsZTo6Q29tcGxl
eENvbnRyb2wgY2MsIGNvbnN0IFFTdHlsZU9wdGlvbkNvbXBsZXgmIG9wdCkKLSAgICB7IHN0eWxl
LT5kcmF3Q29tcGxleENvbnRyb2woY2MsICZvcHQsIHBhaW50ZXIsIHdpZGdldCk7IH0KLQotcHJp
dmF0ZToKLSAgICB2b2lkIGluaXQoR3JhcGhpY3NDb250ZXh0KiwgUVN0eWxlKik7Ci0KLSAgICBR
X0RJU0FCTEVfQ09QWShTdHlsZVBhaW50ZXJRU3R5bGUpCi19OwotCi19Ci0KLSNlbmRpZiAvLyBS
ZW5kZXJUaGVtZVFTdHlsZV9oCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L3F0L1dlYkNvcmVT
dXBwb3J0L1Njcm9sbGJhclRoZW1lUVN0eWxlLmNwcCBiL1NvdXJjZS9XZWJLaXQvcXQvV2ViQ29y
ZVN1cHBvcnQvU2Nyb2xsYmFyVGhlbWVRU3R5bGUuY3BwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0
NAppbmRleCBiMDgyN2ZlYTRlMDkyMjBmMGFhMzkyYTdhNWQ5ZGM0YzNhNjY4YmUzLi4wMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJLaXQvcXQv
V2ViQ29yZVN1cHBvcnQvU2Nyb2xsYmFyVGhlbWVRU3R5bGUuY3BwCisrKyAvZGV2L251bGwKQEAg
LTEsMjUzICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDcsIDIwMDggQXBwbGUgSW5j
LiBBbGwgUmlnaHRzIFJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDA3IFN0YWlrb3MgQ29t
cHV0aW5nIFNlcnZpY2VzIEluYy4gPGluZm9Ac3RhaWtvcy5uZXQ+Ci0gKiBDb3B5cmlnaHQgKEMp
IDIwMDggTm9raWEgQ29ycG9yYXRpb24gYW5kL29yIGl0cyBzdWJzaWRpYXJ5KC1pZXMpCi0gKgot
ICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0
aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhh
dCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1
dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9k
dWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50
YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRp
b24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMg
SVMnJyBBTkQgQU5ZCi0gKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQotICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNI
QU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBE
SVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgotICogQ09OVFJJQlVU
T1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJ
QUwsCi0gKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sCi0gKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9S
IFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKLSAqIFBST0ZJVFM7IE9SIEJVU0lORVNT
IElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKLSAqIE9GIExJ
QUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAot
ICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZ
IE9VVCBPRiBUSEUgVVNFCi0gKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0Yg
VEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLSNpbmNsdWRlICJjb25maWcu
aCIKLSNpbmNsdWRlICJTY3JvbGxiYXJUaGVtZVFTdHlsZS5oIgotCi0jaW5jbHVkZSAiR3JhcGhp
Y3NDb250ZXh0LmgiCi0jaW5jbHVkZSAiUGxhdGZvcm1Nb3VzZUV2ZW50LmgiCi0jaW5jbHVkZSAi
UmVuZGVyVGhlbWVRU3R5bGUuaCIKLSNpbmNsdWRlICJSZW5kZXJUaGVtZVF0TW9iaWxlLmgiCi0j
aW5jbHVkZSAiU2Nyb2xsVmlldy5oIgotI2luY2x1ZGUgIlNjcm9sbGJhci5oIgotCi0jaW5jbHVk
ZSA8UUFwcGxpY2F0aW9uPgotI2lmZGVmIFFfV1NfTUFDCi0jaW5jbHVkZSA8UU1hY1N0eWxlPgot
I2VuZGlmCi0jaW5jbHVkZSA8UU1lbnU+Ci0jaW5jbHVkZSA8UVBhaW50ZXI+Ci0jaW5jbHVkZSA8
UVN0eWxlPgotI2luY2x1ZGUgPFFTdHlsZU9wdGlvblNsaWRlcj4KLQotbmFtZXNwYWNlIFdlYkNv
cmUgewotCi1TY3JvbGxiYXJUaGVtZVFTdHlsZTo6flNjcm9sbGJhclRoZW1lUVN0eWxlKCkKLXsK
LX0KLQotc3RhdGljIFFTdHlsZTo6U3ViQ29udHJvbCBzY1BhcnQoY29uc3QgU2Nyb2xsYmFyUGFy
dCYgcGFydCkKLXsKLSAgICBzd2l0Y2ggKHBhcnQpIHsKLSAgICBjYXNlIE5vUGFydDoKLSAgICAg
ICAgcmV0dXJuIFFTdHlsZTo6U0NfTm9uZTsKLSAgICBjYXNlIEJhY2tCdXR0b25TdGFydFBhcnQ6
Ci0gICAgY2FzZSBCYWNrQnV0dG9uRW5kUGFydDoKLSAgICAgICAgcmV0dXJuIFFTdHlsZTo6U0Nf
U2Nyb2xsQmFyU3ViTGluZTsKLSAgICBjYXNlIEJhY2tUcmFja1BhcnQ6Ci0gICAgICAgIHJldHVy
biBRU3R5bGU6OlNDX1Njcm9sbEJhclN1YlBhZ2U7Ci0gICAgY2FzZSBUaHVtYlBhcnQ6Ci0gICAg
ICAgIHJldHVybiBRU3R5bGU6OlNDX1Njcm9sbEJhclNsaWRlcjsKLSAgICBjYXNlIEZvcndhcmRU
cmFja1BhcnQ6Ci0gICAgICAgIHJldHVybiBRU3R5bGU6OlNDX1Njcm9sbEJhckFkZFBhZ2U7Ci0g
ICAgY2FzZSBGb3J3YXJkQnV0dG9uU3RhcnRQYXJ0OgotICAgIGNhc2UgRm9yd2FyZEJ1dHRvbkVu
ZFBhcnQ6Ci0gICAgICAgIHJldHVybiBRU3R5bGU6OlNDX1Njcm9sbEJhckFkZExpbmU7Ci0gICAg
fQotCi0gICAgcmV0dXJuIFFTdHlsZTo6U0NfTm9uZTsKLX0KLQotc3RhdGljIFNjcm9sbGJhclBh
cnQgc2Nyb2xsYmFyUGFydChjb25zdCBRU3R5bGU6OlN1YkNvbnRyb2wmIHNjKQotewotICAgIHN3
aXRjaCAoc2MpIHsKLSAgICBjYXNlIFFTdHlsZTo6U0NfTm9uZToKLSAgICAgICAgcmV0dXJuIE5v
UGFydDsKLSAgICBjYXNlIFFTdHlsZTo6U0NfU2Nyb2xsQmFyU3ViTGluZToKLSAgICAgICAgcmV0
dXJuIEJhY2tCdXR0b25TdGFydFBhcnQ7Ci0gICAgY2FzZSBRU3R5bGU6OlNDX1Njcm9sbEJhclN1
YlBhZ2U6Ci0gICAgICAgIHJldHVybiBCYWNrVHJhY2tQYXJ0OwotICAgIGNhc2UgUVN0eWxlOjpT
Q19TY3JvbGxCYXJTbGlkZXI6Ci0gICAgICAgIHJldHVybiBUaHVtYlBhcnQ7Ci0gICAgY2FzZSBR
U3R5bGU6OlNDX1Njcm9sbEJhckFkZFBhZ2U6Ci0gICAgICAgIHJldHVybiBGb3J3YXJkVHJhY2tQ
YXJ0OwotICAgIGNhc2UgUVN0eWxlOjpTQ19TY3JvbGxCYXJBZGRMaW5lOgotICAgICAgICByZXR1
cm4gRm9yd2FyZEJ1dHRvblN0YXJ0UGFydDsKLSAgICB9Ci0gICAgcmV0dXJuIE5vUGFydDsKLX0K
LQotc3RhdGljIFFTdHlsZU9wdGlvblNsaWRlciogc3R5bGVPcHRpb25TbGlkZXIoU2Nyb2xsYmFy
VGhlbWVDbGllbnQqIHNjcm9sbGJhciwgUVdpZGdldCogd2lkZ2V0ID0gMCkKLXsKLSAgICBzdGF0
aWMgUVN0eWxlT3B0aW9uU2xpZGVyIG9wdDsKLSAgICBpZiAod2lkZ2V0KQotICAgICAgICBvcHQu
aW5pdEZyb20od2lkZ2V0KTsKLSAgICBlbHNlCi0gICAgICAgIG9wdC5zdGF0ZSB8PSBRU3R5bGU6
OlN0YXRlX0FjdGl2ZTsKLQotICAgIG9wdC5zdGF0ZSAmPSB+UVN0eWxlOjpTdGF0ZV9IYXNGb2N1
czsKLQotICAgIG9wdC5yZWN0ID0gc2Nyb2xsYmFyLT5mcmFtZVJlY3QoKTsKLSAgICBpZiAoc2Ny
b2xsYmFyLT5lbmFibGVkKCkpCi0gICAgICAgIG9wdC5zdGF0ZSB8PSBRU3R5bGU6OlN0YXRlX0Vu
YWJsZWQ7Ci0gICAgaWYgKHNjcm9sbGJhci0+Y29udHJvbFNpemUoKSAhPSBSZWd1bGFyU2Nyb2xs
YmFyKQotICAgICAgICBvcHQuc3RhdGUgfD0gUVN0eWxlOjpTdGF0ZV9NaW5pOwotICAgIG9wdC5v
cmllbnRhdGlvbiA9IChzY3JvbGxiYXItPm9yaWVudGF0aW9uKCkgPT0gVmVydGljYWxTY3JvbGxi
YXIpID8gUXQ6OlZlcnRpY2FsIDogUXQ6Okhvcml6b250YWw7Ci0KLSAgICBpZiAoc2Nyb2xsYmFy
LT5vcmllbnRhdGlvbigpID09IEhvcml6b250YWxTY3JvbGxiYXIpCi0gICAgICAgIG9wdC5zdGF0
ZSB8PSBRU3R5bGU6OlN0YXRlX0hvcml6b250YWw7Ci0gICAgZWxzZQotICAgICAgICBvcHQuc3Rh
dGUgJj0gflFTdHlsZTo6U3RhdGVfSG9yaXpvbnRhbDsKLQotICAgIG9wdC5zbGlkZXJWYWx1ZSA9
IHNjcm9sbGJhci0+dmFsdWUoKTsKLSAgICBvcHQuc2xpZGVyUG9zaXRpb24gPSBvcHQuc2xpZGVy
VmFsdWU7Ci0gICAgb3B0LnBhZ2VTdGVwID0gc2Nyb2xsYmFyLT5wYWdlU3RlcCgpOwotICAgIG9w
dC5zaW5nbGVTdGVwID0gc2Nyb2xsYmFyLT5saW5lU3RlcCgpOwotICAgIG9wdC5taW5pbXVtID0g
MDsKLSAgICBvcHQubWF4aW11bSA9IHFNYXgoMCwgc2Nyb2xsYmFyLT5tYXhpbXVtKCkpOwotICAg
IFNjcm9sbGJhclBhcnQgcHJlc3NlZFBhcnQgPSBzY3JvbGxiYXItPnByZXNzZWRQYXJ0KCk7Ci0g
ICAgU2Nyb2xsYmFyUGFydCBob3ZlcmVkUGFydCA9IHNjcm9sbGJhci0+aG92ZXJlZFBhcnQoKTsK
LSAgICBpZiAocHJlc3NlZFBhcnQgIT0gTm9QYXJ0KSB7Ci0gICAgICAgIG9wdC5hY3RpdmVTdWJD
b250cm9scyA9IHNjUGFydChzY3JvbGxiYXItPnByZXNzZWRQYXJ0KCkpOwotICAgICAgICBpZiAo
cHJlc3NlZFBhcnQgPT0gQmFja0J1dHRvblN0YXJ0UGFydCB8fCBwcmVzc2VkUGFydCA9PSBGb3J3
YXJkQnV0dG9uU3RhcnRQYXJ0Ci0gICAgICAgICAgICB8fCBwcmVzc2VkUGFydCA9PSBCYWNrQnV0
dG9uRW5kUGFydCB8fCBwcmVzc2VkUGFydCA9PSBGb3J3YXJkQnV0dG9uRW5kUGFydAotICAgICAg
ICAgICAgfHwgcHJlc3NlZFBhcnQgPT0gVGh1bWJQYXJ0KQotICAgICAgICAgICAgb3B0LnN0YXRl
IHw9IFFTdHlsZTo6U3RhdGVfU3Vua2VuOwotICAgIH0gZWxzZQotICAgICAgICBvcHQuYWN0aXZl
U3ViQ29udHJvbHMgPSBzY1BhcnQoaG92ZXJlZFBhcnQpOwotICAgIGlmIChob3ZlcmVkUGFydCAh
PSBOb1BhcnQpCi0gICAgICAgIG9wdC5zdGF0ZSB8PSBRU3R5bGU6OlN0YXRlX01vdXNlT3ZlcjsK
LSAgICByZXR1cm4gJm9wdDsKLX0KLQotYm9vbCBTY3JvbGxiYXJUaGVtZVFTdHlsZTo6cGFpbnQo
U2Nyb2xsYmFyVGhlbWVDbGllbnQqIHNjcm9sbGJhciwgR3JhcGhpY3NDb250ZXh0KiBncmFwaGlj
c0NvbnRleHQsIGNvbnN0IEludFJlY3QmIGRpcnR5UmVjdCkKLXsKLSAgICBpZiAoZ3JhcGhpY3ND
b250ZXh0LT51cGRhdGluZ0NvbnRyb2xUaW50cygpKSB7Ci0gICAgICAgc2Nyb2xsYmFyLT5pbnZh
bGlkYXRlUmVjdChkaXJ0eVJlY3QpOwotICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci0KLSAg
ICBTdHlsZVBhaW50ZXJRU3R5bGUgcCh0aGlzLCBncmFwaGljc0NvbnRleHQpOwotICAgIGlmICgh
cC5pc1ZhbGlkKCkpCi0gICAgICByZXR1cm4gdHJ1ZTsKLQotICAgIHAucGFpbnRlci0+c2F2ZSgp
OwotICAgIFFTdHlsZU9wdGlvblNsaWRlciogb3B0ID0gc3R5bGVPcHRpb25TbGlkZXIoc2Nyb2xs
YmFyLCBwLndpZGdldCk7Ci0KLSAgICBwLnBhaW50ZXItPnNldENsaXBSZWN0KG9wdC0+cmVjdC5p
bnRlcnNlY3RlZChkaXJ0eVJlY3QpLCBRdDo6SW50ZXJzZWN0Q2xpcCk7Ci0KLSNpZmRlZiBRX1dT
X01BQwotICAgIC8vIEZJWE1FOiBXZSBhbHNvIG5lZWQgdG8gY2hlY2sgdGhlIHdpZGdldCBzdHls
ZSBidXQgdG9kYXkgU2Nyb2xsYmFyVGhlbWUgaXMgbm90IGF3YXJlIG9mIHRoZSBwYWdlIHNvIHdl
Ci0gICAgLy8gY2FuJ3QgZ2V0IHRoZSB3aWRnZXQuCi0gICAgaWYgKHFvYmplY3RfY2FzdDxRTWFj
U3R5bGUqPihzdHlsZSgpKSkKLSAgICAgICAgcC5kcmF3Q29tcGxleENvbnRyb2woUVN0eWxlOjpD
Q19TY3JvbGxCYXIsICpvcHQpOwotICAgIGVsc2UKLSNlbmRpZgotICAgIHsKLSAgICAgICAgLy8g
VGhlIFFTdHlsZSBleHBlY3RzIHRoZSBiYWNrZ3JvdW5kIHRvIGJlIGFscmVhZHkgZmlsbGVkLgot
ICAgICAgICBwLnBhaW50ZXItPmZpbGxSZWN0KG9wdC0+cmVjdCwgb3B0LT5wYWxldHRlLmJhY2tn
cm91bmQoKSk7Ci0KLSAgICAgICAgY29uc3QgUVBvaW50IHRvcExlZnQgPSBvcHQtPnJlY3QudG9w
TGVmdCgpOwotICAgICAgICBwLnBhaW50ZXItPnRyYW5zbGF0ZSh0b3BMZWZ0KTsKLSAgICAgICAg
b3B0LT5yZWN0Lm1vdmVUbyhRUG9pbnQoMCwgMCkpOwotICAgICAgICBwLmRyYXdDb21wbGV4Q29u
dHJvbChRU3R5bGU6OkNDX1Njcm9sbEJhciwgKm9wdCk7Ci0gICAgICAgIG9wdC0+cmVjdC5tb3Zl
VG8odG9wTGVmdCk7Ci0gICAgfQotICAgIHAucGFpbnRlci0+cmVzdG9yZSgpOwotCi0gICAgcmV0
dXJuIHRydWU7Ci19Ci0KLVNjcm9sbGJhclBhcnQgU2Nyb2xsYmFyVGhlbWVRU3R5bGU6OmhpdFRl
c3QoU2Nyb2xsYmFyVGhlbWVDbGllbnQqIHNjcm9sbGJhciwgY29uc3QgUGxhdGZvcm1Nb3VzZUV2
ZW50JiBldnQpCi17Ci0gICAgUVN0eWxlT3B0aW9uU2xpZGVyKiBvcHQgPSBzdHlsZU9wdGlvblNs
aWRlcihzY3JvbGxiYXIpOwotICAgIGNvbnN0IFFQb2ludCBwb3MgPSBzY3JvbGxiYXItPmNvbnZl
cnRGcm9tQ29udGFpbmluZ1dpbmRvdyhldnQucG9zaXRpb24oKSk7Ci0gICAgb3B0LT5yZWN0Lm1v
dmVUbyhRUG9pbnQoMCwgMCkpOwotICAgIFFTdHlsZTo6U3ViQ29udHJvbCBzYyA9IHN0eWxlKCkt
PmhpdFRlc3RDb21wbGV4Q29udHJvbChRU3R5bGU6OkNDX1Njcm9sbEJhciwgb3B0LCBwb3MsIDAp
OwotICAgIHJldHVybiBzY3JvbGxiYXJQYXJ0KHNjKTsKLX0KLQotYm9vbCBTY3JvbGxiYXJUaGVt
ZVFTdHlsZTo6c2hvdWxkQ2VudGVyT25UaHVtYihTY3JvbGxiYXJUaGVtZUNsaWVudCosIGNvbnN0
IFBsYXRmb3JtTW91c2VFdmVudCYgZXZ0KQotewotICAgIC8vIE1pZGRsZSBjbGljayBjZW50ZXJz
IHNsaWRlciB0aHVtYiAoaWYgc3VwcG9ydGVkKS4KLSAgICByZXR1cm4gc3R5bGUoKS0+c3R5bGVI
aW50KFFTdHlsZTo6U0hfU2Nyb2xsQmFyX01pZGRsZUNsaWNrQWJzb2x1dGVQb3NpdGlvbikgJiYg
ZXZ0LmJ1dHRvbigpID09IE1pZGRsZUJ1dHRvbjsKLX0KLQotdm9pZCBTY3JvbGxiYXJUaGVtZVFT
dHlsZTo6aW52YWxpZGF0ZVBhcnQoU2Nyb2xsYmFyVGhlbWVDbGllbnQqIHNjcm9sbGJhciwgU2Ny
b2xsYmFyUGFydCkKLXsKLSAgICAvLyBGSVhNRTogRG8gbW9yZSBwcmVjaXNlIGludmFsaWRhdGlv
bi4KLSAgICBzY3JvbGxiYXItPmludmFsaWRhdGUoKTsKLX0KLQotaW50IFNjcm9sbGJhclRoZW1l
UVN0eWxlOjpzY3JvbGxiYXJUaGlja25lc3MoU2Nyb2xsYmFyQ29udHJvbFNpemUgY29udHJvbFNp
emUpCi17Ci0gICAgUVN0eWxlT3B0aW9uU2xpZGVyIG87Ci0gICAgby5vcmllbnRhdGlvbiA9IFF0
OjpWZXJ0aWNhbDsKLSAgICBvLnN0YXRlICY9IH5RU3R5bGU6OlN0YXRlX0hvcml6b250YWw7Ci0g
ICAgaWYgKGNvbnRyb2xTaXplICE9IFJlZ3VsYXJTY3JvbGxiYXIpCi0gICAgICAgIG8uc3RhdGUg
fD0gUVN0eWxlOjpTdGF0ZV9NaW5pOwotICAgIHJldHVybiBzdHlsZSgpLT5waXhlbE1ldHJpYyhR
U3R5bGU6OlBNX1Njcm9sbEJhckV4dGVudCwgJm8sIDApOwotfQotCi1pbnQgU2Nyb2xsYmFyVGhl
bWVRU3R5bGU6OnRodW1iUG9zaXRpb24oU2Nyb2xsYmFyVGhlbWVDbGllbnQqIHNjcm9sbGJhcikK
LXsKLSAgICBpZiAoc2Nyb2xsYmFyLT5lbmFibGVkKCkpIHsKLSAgICAgICAgZmxvYXQgcG9zID0g
KGZsb2F0KXNjcm9sbGJhci0+Y3VycmVudFBvcygpICogKHRyYWNrTGVuZ3RoKHNjcm9sbGJhcikg
LSB0aHVtYkxlbmd0aChzY3JvbGxiYXIpKSAvIHNjcm9sbGJhci0+bWF4aW11bSgpOwotICAgICAg
ICByZXR1cm4gKHBvcyA8IDEgJiYgcG9zID4gMCkgPyAxIDogcG9zOwotICAgIH0KLSAgICByZXR1
cm4gMDsKLX0KLQotaW50IFNjcm9sbGJhclRoZW1lUVN0eWxlOjp0aHVtYkxlbmd0aChTY3JvbGxi
YXJUaGVtZUNsaWVudCogc2Nyb2xsYmFyKQotewotICAgIFFTdHlsZU9wdGlvblNsaWRlciogb3B0
ID0gc3R5bGVPcHRpb25TbGlkZXIoc2Nyb2xsYmFyKTsKLSAgICBJbnRSZWN0IHRodW1iID0gc3R5
bGUoKS0+c3ViQ29udHJvbFJlY3QoUVN0eWxlOjpDQ19TY3JvbGxCYXIsIG9wdCwgUVN0eWxlOjpT
Q19TY3JvbGxCYXJTbGlkZXIsIDApOwotICAgIHJldHVybiBzY3JvbGxiYXItPm9yaWVudGF0aW9u
KCkgPT0gSG9yaXpvbnRhbFNjcm9sbGJhciA/IHRodW1iLndpZHRoKCkgOiB0aHVtYi5oZWlnaHQo
KTsKLX0KLQotaW50IFNjcm9sbGJhclRoZW1lUVN0eWxlOjp0cmFja1Bvc2l0aW9uKFNjcm9sbGJh
clRoZW1lQ2xpZW50KiBzY3JvbGxiYXIpCi17Ci0gICAgUVN0eWxlT3B0aW9uU2xpZGVyKiBvcHQg
PSBzdHlsZU9wdGlvblNsaWRlcihzY3JvbGxiYXIpOwotICAgIEludFJlY3QgdHJhY2sgPSBzdHls
ZSgpLT5zdWJDb250cm9sUmVjdChRU3R5bGU6OkNDX1Njcm9sbEJhciwgb3B0LCBRU3R5bGU6OlND
X1Njcm9sbEJhckdyb292ZSwgMCk7Ci0gICAgcmV0dXJuIHNjcm9sbGJhci0+b3JpZW50YXRpb24o
KSA9PSBIb3Jpem9udGFsU2Nyb2xsYmFyID8gdHJhY2sueCgpIC0gc2Nyb2xsYmFyLT54KCkgOiB0
cmFjay55KCkgLSBzY3JvbGxiYXItPnkoKTsKLX0KLQotaW50IFNjcm9sbGJhclRoZW1lUVN0eWxl
Ojp0cmFja0xlbmd0aChTY3JvbGxiYXJUaGVtZUNsaWVudCogc2Nyb2xsYmFyKQotewotICAgIFFT
dHlsZU9wdGlvblNsaWRlciogb3B0ID0gc3R5bGVPcHRpb25TbGlkZXIoc2Nyb2xsYmFyKTsKLSAg
ICBJbnRSZWN0IHRyYWNrID0gc3R5bGUoKS0+c3ViQ29udHJvbFJlY3QoUVN0eWxlOjpDQ19TY3Jv
bGxCYXIsIG9wdCwgUVN0eWxlOjpTQ19TY3JvbGxCYXJHcm9vdmUsIDApOwotICAgIHJldHVybiBz
Y3JvbGxiYXItPm9yaWVudGF0aW9uKCkgPT0gSG9yaXpvbnRhbFNjcm9sbGJhciA/IHRyYWNrLndp
ZHRoKCkgOiB0cmFjay5oZWlnaHQoKTsKLX0KLQotdm9pZCBTY3JvbGxiYXJUaGVtZVFTdHlsZTo6
cGFpbnRTY3JvbGxDb3JuZXIoU2Nyb2xsVmlldyosIEdyYXBoaWNzQ29udGV4dCogY29udGV4dCwg
Y29uc3QgSW50UmVjdCYgcmVjdCkKLXsKLSAgICBTdHlsZVBhaW50ZXJRU3R5bGUgcCh0aGlzLCBj
b250ZXh0KTsKLSAgICBpZiAoIXAuaXNWYWxpZCgpKQotICAgICAgICByZXR1cm47Ci0KLSAgICBR
U3R5bGVPcHRpb24gb3B0aW9uOwotICAgIG9wdGlvbi5yZWN0ID0gcmVjdDsKLSAgICBwLmRyYXdQ
cmltaXRpdmUoUVN0eWxlOjpQRV9QYW5lbFNjcm9sbEFyZWFDb3JuZXIsIG9wdGlvbik7Ci19Ci0K
LVFTdHlsZSogU2Nyb2xsYmFyVGhlbWVRU3R5bGU6OnN0eWxlKCkgY29uc3QKLXsKLSAgICByZXR1
cm4gUUFwcGxpY2F0aW9uOjpzdHlsZSgpOwotfQotCi19Ci0KZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJLaXQvcXQvV2ViQ29yZVN1cHBvcnQvU2Nyb2xsYmFyVGhlbWVRU3R5bGUuaCBiL1NvdXJjZS9X
ZWJLaXQvcXQvV2ViQ29yZVN1cHBvcnQvU2Nyb2xsYmFyVGhlbWVRU3R5bGUuaApkZWxldGVkIGZp
bGUgbW9kZSAxMDA2NDQKaW5kZXggMjUzN2I5YWU0NGI0NThkZDcwMjI1YTA1ZTAzZGJhMWM3MmEz
ZGRlMC4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3Vy
Y2UvV2ViS2l0L3F0L1dlYkNvcmVTdXBwb3J0L1Njcm9sbGJhclRoZW1lUVN0eWxlLmgKKysrIC9k
ZXYvbnVsbApAQCAtMSw2MyArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDA4IEFwcGxl
IEluYy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNl
IGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNh
dGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9u
cwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0
IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1
dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAot
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJp
YWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJF
IElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKLSAqIEVYUFJFU1Mg
T1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhF
Ci0gKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZP
UiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBT
SEFMTCBBUFBMRSBJTkMuIE9SCi0gKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElS
RUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKLSAqIEVYRU1QTEFSWSwgT1IgQ09O
U0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFBS
T0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBE
QVRBLCBPUgotICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENB
VVNFRCBBTkQgT04gQU5ZIFRIRU9SWQotICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRS
QUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0Ug
T1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLSAqIE9GIFRI
SVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBE
QU1BR0UuCi0gKi8KLQotI2lmbmRlZiBTY3JvbGxiYXJUaGVtZVFTdHlsZV9oCi0jZGVmaW5lIFNj
cm9sbGJhclRoZW1lUVN0eWxlX2gKLQotI2luY2x1ZGUgIlNjcm9sbGJhclRoZW1lLmgiCi0KLSNp
bmNsdWRlIDxRdENvcmUvcWdsb2JhbC5oPgotCi1RVF9CRUdJTl9OQU1FU1BBQ0UKLWNsYXNzIFFT
dHlsZTsKLVFUX0VORF9OQU1FU1BBQ0UKLQotbmFtZXNwYWNlIFdlYkNvcmUgewotCi1jbGFzcyBT
Y3JvbGxiYXJUaGVtZVFTdHlsZSA6IHB1YmxpYyBTY3JvbGxiYXJUaGVtZSB7Ci1wdWJsaWM6Ci0g
ICAgdmlydHVhbCB+U2Nyb2xsYmFyVGhlbWVRU3R5bGUoKTsKLQotICAgIHZpcnR1YWwgYm9vbCBw
YWludChTY3JvbGxiYXJUaGVtZUNsaWVudCosIEdyYXBoaWNzQ29udGV4dCosIGNvbnN0IEludFJl
Y3QmIGRpcnR5UmVjdCk7Ci0gICAgdmlydHVhbCB2b2lkIHBhaW50U2Nyb2xsQ29ybmVyKFNjcm9s
bFZpZXcqLCBHcmFwaGljc0NvbnRleHQqLCBjb25zdCBJbnRSZWN0JiBjb3JuZXJSZWN0KTsKLQot
ICAgIHZpcnR1YWwgU2Nyb2xsYmFyUGFydCBoaXRUZXN0KFNjcm9sbGJhclRoZW1lQ2xpZW50Kiwg
Y29uc3QgUGxhdGZvcm1Nb3VzZUV2ZW50Jik7Ci0KLSAgICB2aXJ0dWFsIGJvb2wgc2hvdWxkQ2Vu
dGVyT25UaHVtYihTY3JvbGxiYXJUaGVtZUNsaWVudCosIGNvbnN0IFBsYXRmb3JtTW91c2VFdmVu
dCYpOwotCi0gICAgdmlydHVhbCB2b2lkIGludmFsaWRhdGVQYXJ0KFNjcm9sbGJhclRoZW1lQ2xp
ZW50KiwgU2Nyb2xsYmFyUGFydCk7Ci0KLSAgICB2aXJ0dWFsIGludCB0aHVtYlBvc2l0aW9uKFNj
cm9sbGJhclRoZW1lQ2xpZW50Kik7Ci0gICAgdmlydHVhbCBpbnQgdGh1bWJMZW5ndGgoU2Nyb2xs
YmFyVGhlbWVDbGllbnQqKTsKLSAgICB2aXJ0dWFsIGludCB0cmFja1Bvc2l0aW9uKFNjcm9sbGJh
clRoZW1lQ2xpZW50Kik7Ci0gICAgdmlydHVhbCBpbnQgdHJhY2tMZW5ndGgoU2Nyb2xsYmFyVGhl
bWVDbGllbnQqKTsKLQotICAgIHZpcnR1YWwgaW50IHNjcm9sbGJhclRoaWNrbmVzcyhTY3JvbGxi
YXJDb250cm9sU2l6ZSA9IFJlZ3VsYXJTY3JvbGxiYXIpOwotCi0gICAgUVN0eWxlKiBzdHlsZSgp
IGNvbnN0OwotfTsKLQotfQotI2VuZGlmCg==
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>167088</attachid>
            <date>2012-10-04 05:54:28 -0700</date>
            <delta_ts>2012-10-05 04:21:20 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-98268-20121004145636.patch</filename>
            <type>text/plain</type>
            <size>133379</size>
            <attacher name="Simon Hausmann">hausmann</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTI5NjEwCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggM2E3OWM4MDNhOWM2MWIy
YzFkMTZjZmI3ZmU1YWJlMWMyNDQ0NDhmMC4uNmMwYjEzMGM0YmI4NGJiYTk5ZGU1YWMyMDQ5MmQ2
NzM0NjFlNmUzYyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDEyNCBAQAorMjAxMi0xMC0wMyAgU2lt
b24gSGF1c21hbm4gIDxzaW1vbi5oYXVzbWFubkBkaWdpYS5jb20+CisKKyAgICAgICAgW1F0XSBN
YWtlIFJlbmRlclRoZW1lUVN0eWxlL1Njcm9sbGJhclRoZW1lUVN0eWxlIGNvbXBpbGUgd2l0aG91
dCBRU3R5bGUvUXRXaWRnZXRzCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3df
YnVnLmNnaT9pZD05ODI2OAorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgor
CisgICAgICAgIEV4dHJhY3RlZCBRU3R5bGUvUVdpZGdldCByZWxhdGVkIGNvZGUgaW50byBhIFFX
ZWJTdHlsZSBjbGFzcyB0aGF0IGltcGxlbWVudHMgdGhlIFFTdHlsZUZhY2FkZSBpbnRlcmZhY2Uu
CisKKyAgICAgICAgUVN0eWxlRmFjYWRlIGlzIGEgcHVyZSBpbnRlcmZhY2UgdGhhdCBsaXZlcyBp
biBXZWJDb3JlL3BsYXRmb3JtL3F0CisgICAgICAgIChuZXh0IHRvIFJlbmRlclRoZW1lUVN0eWxl
IGFuZCBTY3JvbGxiYXJUaGVtZVFTdHlsZSkgYW5kIHByb3ZpZGVzIGEKKyAgICAgICAgbWluaW1h
bCBpbnRlcmZhY2Ugb2Ygd2hhdCB3ZSBuZWVkIHRvIGRyYXcgd2l0aCBRU3R5bGUgYXMgd2VsbCBh
cyBiYXNpYworICAgICAgICBoaXQgdGVzdGluZyBhbmQgbWV0cmljIHJldHJpZXZhbC4gSXQgYWxz
byBwcm92aWRlcyBhCisgICAgICAgIFFTdHlsZUZhY2FkZU9wdGlvbiBjbGFzcyB0aGF0IGFnZ3Jl
Z2F0ZXMgY29tbW9uIG1ldGEtZGF0YSBmb3IKKyAgICAgICAgcmVuZGVyaW5nIHByaW1pdGl2ZXMs
IHN1Y2ggYXMgZGlyZWN0aW9uLCByZWN0YW5nbGUsIHN0YXRlIChzdW5rZW4sCisgICAgICAgIGVu
YWJsZWQsIGV0Yy4pIG9yIHBhbGV0dGUuIEl0IGFsc28gcHJvdmlkZXMgc29tZSBtb3JlIHNsaWRl
ci9zY3JvbGxiYXIKKyAgICAgICAgc3BlY2lmaWMgZmllbGRzIGluIGEgc2xpZGVyIHN1Yi1zdHJ1
Y3R1cmUuCisKKyAgICAgICAgUmVuZGVyVGhlbWVRU3R5bGUvU2Nyb2xsYmFyVGhlbWVRU3R5bGUg
dXNlZCB0byBpbnN0YW50aWF0ZSBzcGVjaWZpYyBRU3R5bGVPcHRpb24gc3ViLWNsYXNzZXMgYW5k
IHBvcHVsYXRlCisgICAgICAgIHRoZW0gd2l0aCBzdGF0ZSBpbmZvcm1hdGlvbiBmcm9tIHJlbmRl
ciBvYmplY3RzLCBiZWZvcmUgY2FsbGluZyBzdHJhaWdodCB0byBRU3R5bGUuIE1vc3Qgb2YgdGhl
IGNvbW1vbiBjb2RlCisgICAgICAgIHdhcyBlbmNhcHN1bGF0ZWQgaW4gU3R5bGVQYWludGVyUVN0
eWxlLgorCisgICAgICAgIFRoZSBuZXcgUmVuZGVyVGhlbWVRU3R5bGUvU2Nyb2xsbGJhclRoZW1l
UVN0eWxlIHVzZXMgY29tbW9uIGNvZGUgaW4KKyAgICAgICAgU3R5bGVQYWludGVyUVN0eWxlIHRv
IHBvcHVsYXRlIHN0YXRlIGludG8gUVN0eWxlRmFjYWRlT3B0aW9uIGJlZm9yZQorICAgICAgICBj
YWxsaW5nIGludG8gUVN0eWxlRmFjYWRlLgorCisgICAgICAgIFRoZSBzdHlsZSBmYWNhZGUgaXMg
dGhlbiBpbXBsZW1lbnRlZCBieSBRU3R5bGVGYWNhZGVJbXAsIHdoaWNoIGV4dHJhY3RzCisgICAg
ICAgIG1ldGEtZGF0YSBmcm9tIFFTdHlsZUZhY2FkZU9wdGlvbiBhcmd1bWVudHMsIHBvcHVsYXRl
cyBzdHlsZQorICAgICAgICBwcmltaXRpdmUgc3BlY2lmaWMgUVN0eWxlT3B0aW9uIG9iamVjdHMg
YW5kIHRoZW4gY2FsbHMgb24gUVN0eWxlLgorCisgICAgICAgIFJlbmRlclRoZW1lUVN0eWxlL1Nj
cm9sbGJhclRoZW1lUVN0eWxlIGNhbiBvbmx5IHVzZSBpbnRlcmZhY2UgbWV0aG9kcworICAgICAg
ICBmcm9tIFFTdHlsZUZhY2FkZS4gUVN0eWxlRmFjYWRlSW1wIG9uIHRoZSBvdGhlciBoYW5kIHdp
bGwgbGl2ZSBpbiB0aGUKKyAgICAgICAgc2VwYXJhdGUgUXRXZWJLaXRXaWRnZXRzIGxpYnJhcnkg
aW4gdGhlIGZ1dHVyZSBhbmQgdGhlcmVmb3JlIGNhbm5vdCB1c2UKKyAgICAgICAgYW55IFdlYkNv
cmUgdHlwZXMuCisKKyAgICAgICAgKiBUYXJnZXQucHJpOgorICAgICAgICAqIHBsYXRmb3JtL3F0
L1FTdHlsZUZhY2FkZS5jcHA6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZSk6CisgICAgICAgIChX
ZWJDb3JlOjpRU3R5bGVGYWNhZGU6OnN0eWxlRm9yUGFnZSk6CisgICAgICAgICogcGxhdGZvcm0v
cXQvUVN0eWxlRmFjYWRlLmg6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZSk6CisgICAgICAgIChR
U3R5bGVGYWNhZGUpOgorICAgICAgICAoV2ViQ29yZTo6UVN0eWxlRmFjYWRlOjp+UVN0eWxlRmFj
YWRlKToKKyAgICAgICAgKFdlYkNvcmU6OlFTdHlsZUZhY2FkZU9wdGlvbjo6UVN0eWxlRmFjYWRl
T3B0aW9uKToKKyAgICAgICAgKFFTdHlsZUZhY2FkZU9wdGlvbik6CisgICAgICAgICogcGxhdGZv
cm0vcXQvUmVuZGVyVGhlbWVRU3R5bGUuY3BwOiBSZW5hbWVkIGZyb20gU291cmNlL1dlYktpdC9x
dC9XZWJDb3JlU3VwcG9ydC9SZW5kZXJUaGVtZVFTdHlsZS5jcHAuCisgICAgICAgIChXZWJDb3Jl
KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRoZW1lUVN0eWxlOjpnZXRTdHlsZVBhaW50ZXIp
OgorICAgICAgICAoV2ViQ29yZTo6U3R5bGVQYWludGVyUVN0eWxlOjpTdHlsZVBhaW50ZXJRU3R5
bGUpOgorICAgICAgICAoV2ViQ29yZTo6U3R5bGVQYWludGVyUVN0eWxlOjppbml0KToKKyAgICAg
ICAgKFdlYkNvcmU6OlJlbmRlclRoZW1lUVN0eWxlOjpjcmVhdGUpOgorICAgICAgICAoV2ViQ29y
ZTo6UmVuZGVyVGhlbWVRU3R5bGU6OnNldFN0eWxlRmFjdG9yeUZ1bmN0aW9uKToKKyAgICAgICAg
KFdlYkNvcmU6OlJlbmRlclRoZW1lUVN0eWxlOjpzdHlsZUZhY3RvcnkpOgorICAgICAgICAoV2Vi
Q29yZTo6UmVuZGVyVGhlbWVRU3R5bGU6OlJlbmRlclRoZW1lUVN0eWxlKToKKyAgICAgICAgKFdl
YkNvcmU6OlJlbmRlclRoZW1lUVN0eWxlOjp+UmVuZGVyVGhlbWVRU3R5bGUpOgorICAgICAgICAo
V2ViQ29yZTo6UmVuZGVyVGhlbWVRU3R5bGU6OnNldFBhbGV0dGVGcm9tUGFnZUNsaWVudElmRXhp
c3RzKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRoZW1lUVN0eWxlOjppbmZsYXRlQnV0dG9u
UmVjdCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJUaGVtZVFTdHlsZTo6Y29tcHV0ZVNpemVC
YXNlZE9uU3R5bGUpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGhlbWVRU3R5bGU6OmFkanVz
dEJ1dHRvblN0eWxlKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRoZW1lUVN0eWxlOjpzZXRC
dXR0b25QYWRkaW5nKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRoZW1lUVN0eWxlOjpwYWlu
dEJ1dHRvbik6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJUaGVtZVFTdHlsZTo6cGFpbnRUZXh0
RmllbGQpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGhlbWVRU3R5bGU6OmFkanVzdFRleHRB
cmVhU3R5bGUpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGhlbWVRU3R5bGU6OnBhaW50VGV4
dEFyZWEpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGhlbWVRU3R5bGU6OnNldFBvcHVwUGFk
ZGluZyk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJUaGVtZVFTdHlsZTo6Y29sb3JQYWxldHRl
KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRoZW1lUVN0eWxlOjpwYWludE1lbnVMaXN0KToK
KyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRoZW1lUVN0eWxlOjphZGp1c3RNZW51TGlzdEJ1dHRv
blN0eWxlKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRoZW1lUVN0eWxlOjpwYWludE1lbnVM
aXN0QnV0dG9uKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRoZW1lUVN0eWxlOjphbmltYXRp
b25EdXJhdGlvbkZvclByb2dyZXNzQmFyKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRoZW1l
UVN0eWxlOjpwYWludFByb2dyZXNzQmFyKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRoZW1l
UVN0eWxlOjpwYWludFNsaWRlclRyYWNrKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRoZW1l
UVN0eWxlOjphZGp1c3RTbGlkZXJUcmFja1N0eWxlKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRl
clRoZW1lUVN0eWxlOjpwYWludFNsaWRlclRodW1iKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRl
clRoZW1lUVN0eWxlOjphZGp1c3RTbGlkZXJUaHVtYlN0eWxlKToKKyAgICAgICAgKFdlYkNvcmU6
OlJlbmRlclRoZW1lUVN0eWxlOjpwYWludFNlYXJjaEZpZWxkKToKKyAgICAgICAgKFdlYkNvcmU6
OlJlbmRlclRoZW1lUVN0eWxlOjphZGp1c3RTZWFyY2hGaWVsZERlY29yYXRpb25TdHlsZSk6Cisg
ICAgICAgIChXZWJDb3JlOjpSZW5kZXJUaGVtZVFTdHlsZTo6cGFpbnRTZWFyY2hGaWVsZERlY29y
YXRpb24pOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGhlbWVRU3R5bGU6OmFkanVzdFNlYXJj
aEZpZWxkUmVzdWx0c0RlY29yYXRpb25TdHlsZSk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJU
aGVtZVFTdHlsZTo6cGFpbnRTZWFyY2hGaWVsZFJlc3VsdHNEZWNvcmF0aW9uKToKKyAgICAgICAg
KFdlYkNvcmU6OlJlbmRlclRoZW1lUVN0eWxlOjpwYWludElubmVyU3BpbkJ1dHRvbik6CisgICAg
ICAgIChXZWJDb3JlOjpSZW5kZXJUaGVtZVFTdHlsZTo6aW5pdGlhbGl6ZUNvbW1vblFTdHlsZU9w
dGlvbnMpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGhlbWVRU3R5bGU6OmFkanVzdFNsaWRl
clRodW1iU2l6ZSk6CisgICAgICAgICogcGxhdGZvcm0vcXQvUmVuZGVyVGhlbWVRU3R5bGUuaDog
UmVuYW1lZCBmcm9tIFNvdXJjZS9XZWJLaXQvcXQvV2ViQ29yZVN1cHBvcnQvUmVuZGVyVGhlbWVR
U3R5bGUuaC4KKyAgICAgICAgKFdlYkNvcmUpOgorICAgICAgICAoUmVuZGVyVGhlbWVRU3R5bGUp
OgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGhlbWVRU3R5bGU6OnFTdHlsZSk6CisgICAgICAg
IChTdHlsZVBhaW50ZXJRU3R5bGUpOgorICAgICAgICAoV2ViQ29yZTo6U3R5bGVQYWludGVyUVN0
eWxlOjppc1ZhbGlkKToKKyAgICAgICAgKFdlYkNvcmU6OlN0eWxlUGFpbnRlclFTdHlsZTo6cGFp
bnRCdXR0b24pOgorICAgICAgICAoV2ViQ29yZTo6U3R5bGVQYWludGVyUVN0eWxlOjpwYWludFRl
eHRGaWVsZCk6CisgICAgICAgIChXZWJDb3JlOjpTdHlsZVBhaW50ZXJRU3R5bGU6OnBhaW50Q29t
Ym9Cb3gpOgorICAgICAgICAoV2ViQ29yZTo6U3R5bGVQYWludGVyUVN0eWxlOjpwYWludENvbWJv
Qm94QXJyb3cpOgorICAgICAgICAoV2ViQ29yZTo6U3R5bGVQYWludGVyUVN0eWxlOjpwYWludFNs
aWRlclRyYWNrKToKKyAgICAgICAgKFdlYkNvcmU6OlN0eWxlUGFpbnRlclFTdHlsZTo6cGFpbnRT
bGlkZXJUaHVtYik6CisgICAgICAgIChXZWJDb3JlOjpTdHlsZVBhaW50ZXJRU3R5bGU6OnBhaW50
SW5uZXJTcGluQnV0dG9uKToKKyAgICAgICAgKFdlYkNvcmU6OlN0eWxlUGFpbnRlclFTdHlsZTo6
cGFpbnRQcm9ncmVzc0Jhcik6CisgICAgICAgIChXZWJDb3JlOjpTdHlsZVBhaW50ZXJRU3R5bGU6
OnBhaW50U2Nyb2xsQ29ybmVyKToKKyAgICAgICAgKFdlYkNvcmU6OlN0eWxlUGFpbnRlclFTdHls
ZTo6cGFpbnRTY3JvbGxCYXIpOgorICAgICAgICAqIHBsYXRmb3JtL3F0L1Njcm9sbGJhclRoZW1l
UVN0eWxlLmNwcDogUmVuYW1lZCBmcm9tIFNvdXJjZS9XZWJLaXQvcXQvV2ViQ29yZVN1cHBvcnQv
U2Nyb2xsYmFyVGhlbWVRU3R5bGUuY3BwLgorICAgICAgICAoV2ViQ29yZSk6CisgICAgICAgIChX
ZWJDb3JlOjpTY3JvbGxiYXJUaGVtZVFTdHlsZTo6U2Nyb2xsYmFyVGhlbWVRU3R5bGUpOgorICAg
ICAgICAoV2ViQ29yZTo6U2Nyb2xsYmFyVGhlbWVRU3R5bGU6On5TY3JvbGxiYXJUaGVtZVFTdHls
ZSk6CisgICAgICAgIChXZWJDb3JlOjpzY1BhcnQpOgorICAgICAgICAoV2ViQ29yZTo6c2Nyb2xs
YmFyUGFydCk6CisgICAgICAgIChXZWJDb3JlOjppbml0U2xpZGVyU3R5bGVPcHRpb24pOgorICAg
ICAgICAoV2ViQ29yZTo6U2Nyb2xsYmFyVGhlbWVRU3R5bGU6OnBhaW50KToKKyAgICAgICAgKFdl
YkNvcmU6OlNjcm9sbGJhclRoZW1lUVN0eWxlOjpoaXRUZXN0KToKKyAgICAgICAgKFdlYkNvcmU6
OlNjcm9sbGJhclRoZW1lUVN0eWxlOjpzaG91bGRDZW50ZXJPblRodW1iKToKKyAgICAgICAgKFdl
YkNvcmU6OlNjcm9sbGJhclRoZW1lUVN0eWxlOjppbnZhbGlkYXRlUGFydCk6CisgICAgICAgIChX
ZWJDb3JlOjpTY3JvbGxiYXJUaGVtZVFTdHlsZTo6c2Nyb2xsYmFyVGhpY2tuZXNzKToKKyAgICAg
ICAgKFdlYkNvcmU6OlNjcm9sbGJhclRoZW1lUVN0eWxlOjp0aHVtYlBvc2l0aW9uKToKKyAgICAg
ICAgKFdlYkNvcmU6OlNjcm9sbGJhclRoZW1lUVN0eWxlOjp0aHVtYkxlbmd0aCk6CisgICAgICAg
IChXZWJDb3JlOjpTY3JvbGxiYXJUaGVtZVFTdHlsZTo6dHJhY2tQb3NpdGlvbik6CisgICAgICAg
IChXZWJDb3JlOjpTY3JvbGxiYXJUaGVtZVFTdHlsZTo6dHJhY2tMZW5ndGgpOgorICAgICAgICAo
V2ViQ29yZTo6U2Nyb2xsYmFyVGhlbWVRU3R5bGU6OnBhaW50U2Nyb2xsQ29ybmVyKToKKyAgICAg
ICAgKiBwbGF0Zm9ybS9xdC9TY3JvbGxiYXJUaGVtZVFTdHlsZS5oOiBSZW5hbWVkIGZyb20gU291
cmNlL1dlYktpdC9xdC9XZWJDb3JlU3VwcG9ydC9TY3JvbGxiYXJUaGVtZVFTdHlsZS5oLgorICAg
ICAgICAoV2ViQ29yZSk6CisgICAgICAgIChTY3JvbGxiYXJUaGVtZVFTdHlsZSk6CisgICAgICAg
IChXZWJDb3JlOjpTY3JvbGxiYXJUaGVtZVFTdHlsZTo6cVN0eWxlKToKKwogMjAxMi0wOS0yNiAg
WmFuIERvYmVyc2VrICA8emFuZG9iZXJzZWtAZ21haWwuY29tPgogCiAgICAgICAgIFtHVEtdIEVu
YWJsZSBzb21lIG9mIHRoZSB1bnN0YWJsZSBDU1MgZmVhdHVyZXMKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJLaXQvQ2hhbmdlTG9nIGIvU291cmNlL1dlYktpdC9DaGFuZ2VMb2cKaW5kZXggYTA5ZThk
ZjBkYzdmN2IxYjcwNTY4OTIwNTVmMmI0ZTk1Y2FiZWFkZi4uMjdmMzgwMTQwYTdmZTY4ZTllNGJl
YjM4NTk5MzE4YzM1ZjliMzk0YSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9DaGFuZ2VMb2cK
KysrIGIvU291cmNlL1dlYktpdC9DaGFuZ2VMb2cKQEAgLTEsMyArMSwxMiBAQAorMjAxMi0xMC0w
MyAgU2ltb24gSGF1c21hbm4gIDxzaW1vbi5oYXVzbWFubkBkaWdpYS5jb20+CisKKyAgICAgICAg
W1F0XSBNYWtlIFJlbmRlclRoZW1lUVN0eWxlL1Njcm9sbGJhclRoZW1lUVN0eWxlIGNvbXBpbGUg
d2l0aG91dCBRU3R5bGUvUXRXaWRnZXRzCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3Jn
L3Nob3dfYnVnLmNnaT9pZD05ODI2OAorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09Q
UyEpLgorCisgICAgICAgICogV2ViS2l0MS5wcm86IEFkZCBuZXcgZmlsZXMgdG8gdGhlIGJ1aWxk
LgorCiAyMDEyLTA5LTI0ICBBcnZpZCBOaWxzc29uICA8YW5pbHNzb25AcmltLmNvbT4KIAogICAg
ICAgICBbQmxhY2tCZXJyeV0gQWRkIGNvb2tpZSBkYXRhYmFzZSBBUEkKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJLaXQvcXQvQ2hhbmdlTG9nIGIvU291cmNlL1dlYktpdC9xdC9DaGFuZ2VMb2cKaW5k
ZXggNjEyYjg2N2QyMDE1M2I0YjI5OTExYTViNTcxMTE3ZTZlZWY2Y2YzNi4uMzVhYTYzNTA1N2Y1
YjllN2U5MmMwMjQ2NzVlOGFjZmFkYWRlNzZhYSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9x
dC9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYktpdC9xdC9DaGFuZ2VMb2cKQEAgLTEsMyArMSw4
NCBAQAorMjAxMi0xMC0wMyAgU2ltb24gSGF1c21hbm4gIDxzaW1vbi5oYXVzbWFubkBkaWdpYS5j
b20+CisKKyAgICAgICAgW1F0XSBNYWtlIFJlbmRlclRoZW1lUVN0eWxlL1Njcm9sbGJhclRoZW1l
UVN0eWxlIGNvbXBpbGUgd2l0aG91dCBRU3R5bGUvUXRXaWRnZXRzCisgICAgICAgIGh0dHBzOi8v
YnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD05ODI2OAorCisgICAgICAgIFJldmlld2Vk
IGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIEV4dHJhY3RlZCBRU3R5bGUvUVdpZGdldCBy
ZWxhdGVkIGNvZGUgaW50byBhIFFXZWJTdHlsZSBjbGFzcyB0aGF0IGltcGxlbWVudHMgdGhlIFFT
dHlsZUZhY2FkZSBpbnRlcmZhY2UuCisKKyAgICAgICAgUVN0eWxlRmFjYWRlIGlzIGEgcHVyZSBp
bnRlcmZhY2UgdGhhdCBsaXZlcyBpbiBXZWJDb3JlL3BsYXRmb3JtL3F0CisgICAgICAgIChuZXh0
IHRvIFJlbmRlclRoZW1lUVN0eWxlIGFuZCBTY3JvbGxiYXJUaGVtZVFTdHlsZSkgYW5kIHByb3Zp
ZGVzIGEKKyAgICAgICAgbWluaW1hbCBpbnRlcmZhY2Ugb2Ygd2hhdCB3ZSBuZWVkIHRvIGRyYXcg
d2l0aCBRU3R5bGUgYXMgd2VsbCBhcyBiYXNpYworICAgICAgICBoaXQgdGVzdGluZyBhbmQgbWV0
cmljIHJldHJpZXZhbC4gSXQgYWxzbyBwcm92aWRlcyBhCisgICAgICAgIFFTdHlsZUZhY2FkZU9w
dGlvbiBjbGFzcyB0aGF0IGFnZ3JlZ2F0ZXMgY29tbW9uIG1ldGEtZGF0YSBmb3IKKyAgICAgICAg
cmVuZGVyaW5nIHByaW1pdGl2ZXMsIHN1Y2ggYXMgZGlyZWN0aW9uLCByZWN0YW5nbGUsIHN0YXRl
IChzdW5rZW4sCisgICAgICAgIGVuYWJsZWQsIGV0Yy4pIG9yIHBhbGV0dGUuIEl0IGFsc28gcHJv
dmlkZXMgc29tZSBtb3JlIHNsaWRlci9zY3JvbGxiYXIKKyAgICAgICAgc3BlY2lmaWMgZmllbGRz
IGluIGEgc2xpZGVyIHN1Yi1zdHJ1Y3R1cmUuCisKKyAgICAgICAgUmVuZGVyVGhlbWVRU3R5bGUv
U2Nyb2xsYmFyVGhlbWVRU3R5bGUgdXNlZCB0byBpbnN0YW50aWF0ZSBzcGVjaWZpYyBRU3R5bGVP
cHRpb24gc3ViLWNsYXNzZXMgYW5kIHBvcHVsYXRlCisgICAgICAgIHRoZW0gd2l0aCBzdGF0ZSBp
bmZvcm1hdGlvbiBmcm9tIHJlbmRlciBvYmplY3RzLCBiZWZvcmUgY2FsbGluZyBzdHJhaWdodCB0
byBRU3R5bGUuIE1vc3Qgb2YgdGhlIGNvbW1vbiBjb2RlCisgICAgICAgIHdhcyBlbmNhcHN1bGF0
ZWQgaW4gU3R5bGVQYWludGVyUVN0eWxlLgorCisgICAgICAgIFRoZSBuZXcgUmVuZGVyVGhlbWVR
U3R5bGUvU2Nyb2xsbGJhclRoZW1lUVN0eWxlIHVzZXMgY29tbW9uIGNvZGUgaW4KKyAgICAgICAg
U3R5bGVQYWludGVyUVN0eWxlIHRvIHBvcHVsYXRlIHN0YXRlIGludG8gUVN0eWxlRmFjYWRlT3B0
aW9uIGJlZm9yZQorICAgICAgICBjYWxsaW5nIGludG8gUVN0eWxlRmFjYWRlLgorCisgICAgICAg
IFRoZSBzdHlsZSBmYWNhZGUgaXMgdGhlbiBpbXBsZW1lbnRlZCBieSBRU3R5bGVGYWNhZGVJbXAs
IHdoaWNoIGV4dHJhY3RzCisgICAgICAgIG1ldGEtZGF0YSBmcm9tIFFTdHlsZUZhY2FkZU9wdGlv
biBhcmd1bWVudHMsIHBvcHVsYXRlcyBzdHlsZQorICAgICAgICBwcmltaXRpdmUgc3BlY2lmaWMg
UVN0eWxlT3B0aW9uIG9iamVjdHMgYW5kIHRoZW4gY2FsbHMgb24gUVN0eWxlLgorCisgICAgICAg
IFJlbmRlclRoZW1lUVN0eWxlL1Njcm9sbGJhclRoZW1lUVN0eWxlIGNhbiBvbmx5IHVzZSBpbnRl
cmZhY2UgbWV0aG9kcworICAgICAgICBmcm9tIFFTdHlsZUZhY2FkZS4gUVN0eWxlRmFjYWRlSW1w
IG9uIHRoZSBvdGhlciBoYW5kIHdpbGwgbGl2ZSBpbiB0aGUKKyAgICAgICAgc2VwYXJhdGUgUXRX
ZWJLaXRXaWRnZXRzIGxpYnJhcnkgaW4gdGhlIGZ1dHVyZSBhbmQgdGhlcmVmb3JlIGNhbm5vdCB1
c2UKKyAgICAgICAgYW55IFdlYkNvcmUgdHlwZXMuCisKKyAgICAgICAgKiBXZWJDb3JlU3VwcG9y
dC9Jbml0V2ViQ29yZVF0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OmluaXRpYWxpemVXZWJDb3Jl
UXQpOgorICAgICAgICAqIFdlYkNvcmVTdXBwb3J0L1FTdHlsZUZhY2FkZUltcC5jcHA6IEFkZGVk
LgorICAgICAgICAoV2ViS2l0KToKKyAgICAgICAgKFdlYktpdDo6Y29udmVydFRvUVN0eWxlU3Rh
dGUpOgorICAgICAgICAoV2ViS2l0Ojpjb252ZXJ0VG9RU3R5bGVTdWJDb250cm9sKToKKyAgICAg
ICAgKFdlYktpdDo6aW5pdEdlbmVyaWNTdHlsZU9wdGlvbik6CisgICAgICAgIChXZWJLaXQ6Omlu
aXRTcGVjaWZpY1N0eWxlT3B0aW9uKToKKyAgICAgICAgKE1hcHBlZFN0eWxlT3B0aW9uKToKKyAg
ICAgICAgKFdlYktpdDo6TWFwcGVkU3R5bGVPcHRpb246Ok1hcHBlZFN0eWxlT3B0aW9uKToKKyAg
ICAgICAgKFdlYktpdDo6Y29udmVydFBpeGVsTWV0cmljKToKKyAgICAgICAgKFdlYktpdDo6Y29u
dmVydFRvUVN0eWxlRmFjYWRlU3ViQ29udHJvbCk6CisgICAgICAgIChXZWJLaXQ6OlFTdHlsZUZh
Y2FkZUltcDo6UVN0eWxlRmFjYWRlSW1wKToKKyAgICAgICAgKFdlYktpdDo6UVN0eWxlRmFjYWRl
SW1wOjp+UVN0eWxlRmFjYWRlSW1wKToKKyAgICAgICAgKFdlYktpdDo6UVN0eWxlRmFjYWRlSW1w
OjpidXR0b25TdWJFbGVtZW50UmVjdCk6CisgICAgICAgIChXZWJLaXQ6OlFTdHlsZUZhY2FkZUlt
cDo6ZmluZEZyYW1lTGluZVdpZHRoKToKKyAgICAgICAgKFdlYktpdDo6UVN0eWxlRmFjYWRlSW1w
OjpzaW1wbGVQaXhlbE1ldHJpYyk6CisgICAgICAgIChXZWJLaXQ6OlFTdHlsZUZhY2FkZUltcDo6
YnV0dG9uTWFyZ2luKToKKyAgICAgICAgKFdlYktpdDo6UVN0eWxlRmFjYWRlSW1wOjpzbGlkZXJM
ZW5ndGgpOgorICAgICAgICAoV2ViS2l0OjpRU3R5bGVGYWNhZGVJbXA6OnNsaWRlclRoaWNrbmVz
cyk6CisgICAgICAgIChXZWJLaXQ6OlFTdHlsZUZhY2FkZUltcDo6cHJvZ3Jlc3NCYXJDaHVua1dp
ZHRoKToKKyAgICAgICAgKFdlYktpdDo6UVN0eWxlRmFjYWRlSW1wOjpnZXRCdXR0b25NZXRyaWNz
KToKKyAgICAgICAgKFdlYktpdDo6UVN0eWxlRmFjYWRlSW1wOjpzaXplRnJvbUNvbnRlbnRzKToK
KyAgICAgICAgKFdlYktpdDo6UVN0eWxlRmFjYWRlSW1wOjpwYWludEJ1dHRvbik6CisgICAgICAg
IChXZWJLaXQ6OlFTdHlsZUZhY2FkZUltcDo6cGFpbnRUZXh0RmllbGQpOgorICAgICAgICAoV2Vi
S2l0OjpRU3R5bGVGYWNhZGVJbXA6OnBhaW50Q29tYm9Cb3gpOgorICAgICAgICAoV2ViS2l0OjpR
U3R5bGVGYWNhZGVJbXA6OnBhaW50Q29tYm9Cb3hBcnJvdyk6CisgICAgICAgIChXZWJLaXQ6OlFT
dHlsZUZhY2FkZUltcDo6cGFpbnRTbGlkZXJUcmFjayk6CisgICAgICAgIChXZWJLaXQ6OlFTdHls
ZUZhY2FkZUltcDo6cGFpbnRTbGlkZXJUaHVtYik6CisgICAgICAgIChXZWJLaXQ6OlFTdHlsZUZh
Y2FkZUltcDo6cGFpbnRJbm5lclNwaW5CdXR0b24pOgorICAgICAgICAoV2ViS2l0OjpRU3R5bGVG
YWNhZGVJbXA6OnBhaW50UHJvZ3Jlc3NCYXIpOgorICAgICAgICAoV2ViS2l0OjpRU3R5bGVGYWNh
ZGVJbXA6OnNjcm9sbEJhckV4dGVudCk6CisgICAgICAgIChXZWJLaXQ6OlFTdHlsZUZhY2FkZUlt
cDo6c2Nyb2xsQmFyTWlkZGxlQ2xpY2tBYnNvbHV0ZVBvc2l0aW9uU3R5bGVIaW50KToKKyAgICAg
ICAgKFdlYktpdDo6UVN0eWxlRmFjYWRlSW1wOjpwYWludFNjcm9sbENvcm5lcik6CisgICAgICAg
IChXZWJLaXQ6OlFTdHlsZUZhY2FkZUltcDo6aGl0VGVzdFNjcm9sbEJhcik6CisgICAgICAgIChX
ZWJLaXQ6OlFTdHlsZUZhY2FkZUltcDo6c2Nyb2xsQmFyU3ViQ29udHJvbFJlY3QpOgorICAgICAg
ICAoV2ViS2l0OjpRU3R5bGVGYWNhZGVJbXA6OnBhaW50U2Nyb2xsQmFyKToKKyAgICAgICAgKFdl
YktpdDo6UVN0eWxlRmFjYWRlSW1wOjp3aWRnZXRGb3JQYWludGVyKToKKyAgICAgICAgKFdlYktp
dDo6UVN0eWxlRmFjYWRlSW1wOjpzdHlsZSk6CisgICAgICAgICogV2ViQ29yZVN1cHBvcnQvUVN0
eWxlRmFjYWRlSW1wLmg6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZSk6CisgICAgICAgIChXZWJL
aXQpOgorICAgICAgICAoUVN0eWxlRmFjYWRlSW1wKToKKyAgICAgICAgKFdlYktpdDo6UVN0eWxl
RmFjYWRlSW1wOjpjcmVhdGUpOgorICAgICAgICAoV2ViS2l0OjpRU3R5bGVGYWNhZGVJbXA6Omlz
VmFsaWQpOgorCiAyMDEyLTA5LTI2ICBTaW1vbiBIYXVzbWFubiAgPHNpbW9uLmhhdXNtYW5uQGRp
Z2lhLmNvbT4KIAogICAgICAgICBbUXRdIFJlbW92ZSBRdCBRdWljayAxIHN1cHBvcnQKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL1RhcmdldC5wcmkgYi9Tb3VyY2UvV2ViQ29yZS9UYXJnZXQu
cHJpCmluZGV4IDI0N2MyMGVjNWMzNmJjNDZjZTI4MDAwZjU0MDg5ZTAxOTNhYWFmZWMuLmM1YTE2
NWIyY2JkZGVlMmE0OThkZGQxMGNmYzNlZDMzYjU5YmNkZjUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL1RhcmdldC5wcmkKKysrIGIvU291cmNlL1dlYkNvcmUvVGFyZ2V0LnByaQpAQCAtMjIy
OSw4ICsyMjI5LDExIEBAIEhFQURFUlMgKz0gXAogICAgIHBsYXRmb3JtL3F0L0NsaXBib2FyZFF0
LmggXAogICAgIHBsYXRmb3JtL3F0L0Nvb2tpZUphclF0LmggXAogICAgIHBsYXRmb3JtL3F0L1FX
ZWJQYWdlQ2xpZW50LmggXAorICAgIHBsYXRmb3JtL3F0L1FTdHlsZUZhY2FkZS5oIFwKKyAgICBw
bGF0Zm9ybS9xdC9SZW5kZXJUaGVtZVFTdHlsZS5oIFwKICAgICBwbGF0Zm9ybS9xdC9SZW5kZXJU
aGVtZVF0LmggXAogICAgIHBsYXRmb3JtL3F0L1JlbmRlclRoZW1lUXRNb2JpbGUuaCBcCisgICAg
cGxhdGZvcm0vcXQvU2Nyb2xsYmFyVGhlbWVRU3R5bGUuaCBcCiAgICAgcGxhdGZvcm0vcXQvVXNl
ckFnZW50UXQuaCBcCiAgICAgcGxhdGZvcm0vU2Nyb2xsYWJsZUFyZWEuaCBcCiAgICAgcGxhdGZv
cm0vU2Nyb2xsQW5pbWF0b3IuaCBcCkBAIC0yODAxLDggKzI4MDQsMTEgQEAgU09VUkNFUyArPSBc
CiAgICAgcGxhdGZvcm0vcXQvUGFzdGVib2FyZFF0LmNwcCBcCiAgICAgcGxhdGZvcm0vcXQvUGxh
dGZvcm1LZXlib2FyZEV2ZW50UXQuY3BwIFwKICAgICBwbGF0Zm9ybS9xdC9QbGF0Zm9ybVNjcmVl
blF0LmNwcCBcCisgICAgcGxhdGZvcm0vcXQvUVN0eWxlRmFjYWRlLmNwcCBcCisgICAgcGxhdGZv
cm0vcXQvUmVuZGVyVGhlbWVRU3R5bGUuY3BwIFwKICAgICBwbGF0Zm9ybS9xdC9SZW5kZXJUaGVt
ZVF0LmNwcCBcCiAgICAgcGxhdGZvcm0vcXQvUmVuZGVyVGhlbWVRdE1vYmlsZS5jcHAgXAorICAg
IHBsYXRmb3JtL3F0L1Njcm9sbGJhclRoZW1lUVN0eWxlLmNwcCBcCiAgICAgcGxhdGZvcm0vcXQv
U2Nyb2xsYmFyVGhlbWVRdC5jcHAgXAogICAgIHBsYXRmb3JtL3F0L1Njcm9sbFZpZXdRdC5jcHAg
XAogICAgIHBsYXRmb3JtL3F0L1NoYXJlZFRpbWVyUXQuY3BwIFwKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL3F0L1FTdHlsZUZhY2FkZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9xdC9RU3R5bGVGYWNhZGUuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjQ3MDdhMmZjMTUyZmYxNmQy
N2JkZTZkNzZhNGI1ZmRhZmRmNDEwZDQKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9xdC9RU3R5bGVGYWNhZGUuY3BwCkBAIC0wLDAgKzEsNDYgQEAKKy8qCisgKiBU
aGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgdGhlbWUgaW1wbGVtZW50YXRpb24gZm9yIGZvcm0gY29u
dHJvbHMgaW4gV2ViQ29yZS4KKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMTIgRGlnaWEgUGxjIGFu
ZC9vciBpdHMgc3Vic2lkaWFyeSgtaWVzKS4KKyAqIENvcHlyaWdodCAoQykgMjAxMS0yMDEyIE5v
a2lhIENvcnBvcmF0aW9uIGFuZC9vciBpdHMgc3Vic2lkaWFyeSgtaWVzKS4KKyAqCisgKiBUaGlz
IGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29y
CisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFs
IFB1YmxpYworICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91
bmRhdGlvbjsgZWl0aGVyCisgKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3Vy
IG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGRpc3Ry
aWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9V
VCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICog
TUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2Vl
IHRoZSBHTlUKKyAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRh
aWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBM
aWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5
OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCisgKiB0aGUgRnJl
ZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZs
b29yLAorICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisgKgorICovCisKKyNpbmNsdWRl
ICJjb25maWcuaCIKKyNpbmNsdWRlICJRU3R5bGVGYWNhZGUuaCIKKworI2luY2x1ZGUgIlFXZWJQ
YWdlQ2xpZW50LmgiCisjaW5jbHVkZSA8Q2hyb21lLmg+CisjaW5jbHVkZSA8Q2hyb21lQ2xpZW50
Lmg+CisjaW5jbHVkZSA8UGFnZS5oPgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK1FTdHlsZSog
UVN0eWxlRmFjYWRlOjpzdHlsZUZvclBhZ2UoUGFnZSogcGFnZSkKK3sKKyAgICBpZiAoIXBhZ2Up
CisgICAgICAgIHJldHVybiAwOworICAgIFFXZWJQYWdlQ2xpZW50KiBwYWdlQ2xpZW50ID0gcGFn
ZS0+Y2hyb21lKCktPmNsaWVudCgpLT5wbGF0Zm9ybVBhZ2VDbGllbnQoKTsKKworICAgIGlmICgh
cGFnZUNsaWVudCkKKyAgICAgICAgcmV0dXJuIDA7CisKKyAgICByZXR1cm4gcGFnZUNsaWVudC0+
c3R5bGUoKTsKK30KKworfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vcXQv
UVN0eWxlRmFjYWRlLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9xdC9RU3R5bGVGYWNhZGUu
aApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwLi40YzNlM2ZkNDZiOGU4MGI2OThkOTMzMzQ4YTkzMGU2OTFmYjI0ZjRmCi0t
LSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vcXQvUVN0eWxlRmFjYWRl
LmgKQEAgLTAsMCArMSwyMDUgQEAKKy8qCisgKiBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgdGhl
bWUgaW1wbGVtZW50YXRpb24gZm9yIGZvcm0gY29udHJvbHMgaW4gV2ViQ29yZS4KKyAqCisgKiBD
b3B5cmlnaHQgKEMpIDIwMTIgRGlnaWEgUGxjIGFuZC9vciBpdHMgc3Vic2lkaWFyeSgtaWVzKS4K
KyAqIENvcHlyaWdodCAoQykgMjAxMS0yMDEyIE5va2lhIENvcnBvcmF0aW9uIGFuZC9vciBpdHMg
c3Vic2lkaWFyeSgtaWVzKS4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsg
eW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRl
cm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZSBhcyBwdWJs
aXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiB2ZXJzaW9u
IDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24u
CisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQg
d2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZl
biB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1Mg
Rk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqIExpYnJhcnkgR2VuZXJh
bCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2
ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vu
c2UKKyAqIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIu
ICBJZiBub3QsIHdyaXRlIHRvCisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMu
LCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAorICogQm9zdG9uLCBNQSAwMjExMC0x
MzAxLCBVU0EuCisgKgorICovCisjaWZuZGVmIFFTdHlsZUZhY2FkZV9oCisjZGVmaW5lIFFTdHls
ZUZhY2FkZV9oCisKKyNpbmNsdWRlIDxRUGFsZXR0ZT4KKyNpbmNsdWRlIDxRUmVjdD4KKworUVRf
QkVHSU5fTkFNRVNQQUNFCitjbGFzcyBRU3R5bGU7CitRVF9FTkRfTkFNRVNQQUNFCisKK25hbWVz
cGFjZSBXZWJDb3JlIHsKKworY2xhc3MgUGFnZTsKK2NsYXNzIFFTdHlsZUZhY2FkZU9wdGlvbjsK
KworY2xhc3MgUVN0eWxlRmFjYWRlIHsKK3B1YmxpYzoKKyAgICBlbnVtIEJ1dHRvblN1YkVsZW1l
bnQgeworICAgICAgICBQdXNoQnV0dG9uTGF5b3V0SXRlbSwKKyAgICAgICAgUHVzaEJ1dHRvbkNv
bnRlbnRzCisgICAgfTsKKworI2RlZmluZSBGT1JfRUFDSF9NQVBQRURfU1RBVEUoRiwgU0VQQVJB
VE9SKSBcCisgICAgRihTdGF0ZV9Ob25lLCAweDAwMDAwMDAwKSBTRVBBUkFUT1IgXAorICAgIEYo
U3RhdGVfRW5hYmxlZCwgMHgwMDAwMDAwMSkgU0VQQVJBVE9SIFwKKyAgICBGKFN0YXRlX1JhaXNl
ZCwgMHgwMDAwMDAwMikgU0VQQVJBVE9SIFwKKyAgICBGKFN0YXRlX1N1bmtlbiwgMHgwMDAwMDAw
NCkgU0VQQVJBVE9SIFwKKyAgICBGKFN0YXRlX09mZiwgMHgwMDAwMDAwOCkgU0VQQVJBVE9SIFwK
KyAgICBGKFN0YXRlX05vQ2hhbmdlLCAweDAwMDAwMDEwKSBTRVBBUkFUT1IgXAorICAgIEYoU3Rh
dGVfT24sIDB4MDAwMDAwMjApIFNFUEFSQVRPUiBcCisgICAgRihTdGF0ZV9Eb3duQXJyb3csIDB4
MDAwMDAwNDApIFNFUEFSQVRPUiBcCisgICAgRihTdGF0ZV9Ib3Jpem9udGFsLCAweDAwMDAwMDgw
KSBTRVBBUkFUT1IgXAorICAgIEYoU3RhdGVfSGFzRm9jdXMsIDB4MDAwMDAxMDApIFNFUEFSQVRP
UiBcCisgICAgRihTdGF0ZV9Ub3AsIDB4MDAwMDAyMDApIFNFUEFSQVRPUiBcCisgICAgRihTdGF0
ZV9Cb3R0b20sIDB4MDAwMDA0MDApIFNFUEFSQVRPUiBcCisgICAgRihTdGF0ZV9Gb2N1c0F0Qm9y
ZGVyLCAweDAwMDAwODAwKSBTRVBBUkFUT1IgXAorICAgIEYoU3RhdGVfQXV0b1JhaXNlLCAweDAw
MDAxMDAwKSBTRVBBUkFUT1IgXAorICAgIEYoU3RhdGVfTW91c2VPdmVyLCAweDAwMDAyMDAwKSBT
RVBBUkFUT1IgXAorICAgIEYoU3RhdGVfVXBBcnJvdywgMHgwMDAwNDAwMCkgU0VQQVJBVE9SIFwK
KyAgICBGKFN0YXRlX1NlbGVjdGVkLCAweDAwMDA4MDAwKSBTRVBBUkFUT1IgXAorICAgIEYoU3Rh
dGVfQWN0aXZlLCAweDAwMDEwMDAwKSBTRVBBUkFUT1IgXAorICAgIEYoU3RhdGVfV2luZG93LCAw
eDAwMDIwMDAwKSBTRVBBUkFUT1IgXAorICAgIEYoU3RhdGVfT3BlbiwgMHgwMDA0MDAwMCkgU0VQ
QVJBVE9SIFwKKyAgICBGKFN0YXRlX0NoaWxkcmVuLCAweDAwMDgwMDAwKSBTRVBBUkFUT1IgXAor
ICAgIEYoU3RhdGVfSXRlbSwgMHgwMDEwMDAwMCkgU0VQQVJBVE9SIFwKKyAgICBGKFN0YXRlX1Np
YmxpbmcsIDB4MDAyMDAwMDApIFNFUEFSQVRPUiBcCisgICAgRihTdGF0ZV9FZGl0aW5nLCAweDAw
NDAwMDAwKSBTRVBBUkFUT1IgXAorICAgIEYoU3RhdGVfS2V5Ym9hcmRGb2N1c0NoYW5nZSwgMHgw
MDgwMDAwMCkgU0VQQVJBVE9SIFwKKyAgICBGKFN0YXRlX1JlYWRPbmx5LCAweDAyMDAwMDAwKSBT
RVBBUkFUT1IgXAorICAgIEYoU3RhdGVfU21hbGwsIDB4MDQwMDAwMDApIFNFUEFSQVRPUiBcCisg
ICAgRihTdGF0ZV9NaW5pLCAweDA4MDAwMDApCisKKyNkZWZpbmUgQ09NTUEgLAorI2RlZmluZSBT
RU1JQ09MT04gOworI2RlZmluZSBERUZJTkVfTUFQUEVEX1NUQVRFKE5hbWUsIFZhbHVlKSBcCisg
ICAgTmFtZSA9IFZhbHVlCisKKyAgICAvLyAjIyMgUmVtb3ZlIHVudXNlZCBzdGF0ZXMuCisgICAg
ZW51bSBTdGF0ZUZsYWcgeworICAgICAgICBGT1JfRUFDSF9NQVBQRURfU1RBVEUoREVGSU5FX01B
UFBFRF9TVEFURSwgQ09NTUEpCisgICAgfTsKKyAgICBRX0RFQ0xBUkVfRkxBR1MoU3RhdGUsIFN0
YXRlRmxhZykKKworI2RlZmluZSBGT1JfRUFDSF9NQVBQRURfTUVUUklDKEYsIFNFUEFSQVRPUikg
XAorICAgIEYoUE1fQnV0dG9uTWFyZ2luKSBTRVBBUkFUT1IgXAorICAgIEYoUE1fRGVmYXVsdEZy
YW1lV2lkdGgpIFNFUEFSQVRPUiBcCisgICAgRihQTV9JbmRpY2F0b3JXaWR0aCkgU0VQQVJBVE9S
IFwKKyAgICBGKFBNX0V4Y2x1c2l2ZUluZGljYXRvcldpZHRoKSBTRVBBUkFUT1IgXAorICAgIEYo
UE1fQnV0dG9uSWNvblNpemUpCisKKyNkZWZpbmUgREVGSU5FX01FVFJJQyhGKSBGCisKKyAgICBl
bnVtIFBpeGVsTWV0cmljIHsKKyAgICAgICAgRk9SX0VBQ0hfTUFQUEVEX01FVFJJQyhERUZJTkVf
TUVUUklDLCBDT01NQSkKKyAgICB9OworCisgICAgZW51bSBDb250ZW50c1R5cGUgeworICAgICAg
ICBDVF9Db21ib0JveCwKKyAgICAgICAgQ1RfUHVzaEJ1dHRvbgorICAgIH07CisKKyNkZWZpbmUg
Rk9SX0VBQ0hfU1VCQ09OVFJPTChGLCBTRVBBUkFUT1IpIFwKKyAgICBGKFNDX05vbmUsIDB4MDAw
MDAwMDApIFNFUEFSQVRPUiBcCisgICAgRihTQ19TY3JvbGxCYXJBZGRMaW5lLCAweDAwMDAwMDAx
KSBTRVBBUkFUT1IgXAorICAgIEYoU0NfU2Nyb2xsQmFyU3ViTGluZSwgMHgwMDAwMDAwMikgU0VQ
QVJBVE9SIFwKKyAgICBGKFNDX1Njcm9sbEJhckFkZFBhZ2UsIDB4MDAwMDAwMDQpIFNFUEFSQVRP
UiBcCisgICAgRihTQ19TY3JvbGxCYXJTdWJQYWdlLCAweDAwMDAwMDA4KSBTRVBBUkFUT1IgXAor
ICAgIEYoU0NfU2Nyb2xsQmFyRmlyc3QsIDB4MDAwMDAwMTApIFNFUEFSQVRPUiBcCisgICAgRihT
Q19TY3JvbGxCYXJMYXN0LCAweDAwMDAwMDIwKSBTRVBBUkFUT1IgXAorICAgIEYoU0NfU2Nyb2xs
QmFyU2xpZGVyLCAweDAwMDAwMDQwKSBTRVBBUkFUT1IgXAorICAgIEYoU0NfU2Nyb2xsQmFyR3Jv
b3ZlLCAweDAwMDAwMDgwKQorCisjZGVmaW5lIERFRklORV9TVUJDT05UUk9MKEYsIFZhbHVlKSBG
CisKKyAgICBlbnVtIFN1YkNvbnRyb2wgeworICAgICAgICBGT1JfRUFDSF9TVUJDT05UUk9MKERF
RklORV9TVUJDT05UUk9MLCBDT01NQSkKKyAgICB9OworCisgICAgdmlydHVhbCB+UVN0eWxlRmFj
YWRlKCkgeyB9CisKKyAgICB2aXJ0dWFsIFFSZWN0IGJ1dHRvblN1YkVsZW1lbnRSZWN0KEJ1dHRv
blN1YkVsZW1lbnQgYnV0dG9uRWxlbWVudCwgU3RhdGUsIGNvbnN0IFFSZWN0JiBvcmlnaW5hbFJl
Y3QpIGNvbnN0ID0gMDsKKworICAgIHZpcnR1YWwgaW50IGZpbmRGcmFtZUxpbmVXaWR0aCgpIGNv
bnN0ID0gMDsKKyAgICB2aXJ0dWFsIGludCBzaW1wbGVQaXhlbE1ldHJpYyhQaXhlbE1ldHJpYywg
U3RhdGUgPSBTdGF0ZV9Ob25lKSBjb25zdCA9IDA7CisgICAgdmlydHVhbCBpbnQgYnV0dG9uTWFy
Z2luKFN0YXRlLCBjb25zdCBRUmVjdCYgb3JpZ2luYWxSZWN0KSBjb25zdCA9IDA7CisgICAgdmly
dHVhbCBpbnQgc2xpZGVyTGVuZ3RoKFF0OjpPcmllbnRhdGlvbikgY29uc3QgPSAwOworICAgIHZp
cnR1YWwgaW50IHNsaWRlclRoaWNrbmVzcyhRdDo6T3JpZW50YXRpb24pIGNvbnN0ID0gMDsKKyAg
ICB2aXJ0dWFsIGludCBwcm9ncmVzc0JhckNodW5rV2lkdGgoY29uc3QgUVNpemUmKSBjb25zdCA9
IDA7CisgICAgdmlydHVhbCB2b2lkIGdldEJ1dHRvbk1ldHJpY3MoUVN0cmluZyogYnV0dG9uRm9u
dEZhbWlseSwgaW50KiBidXR0b25Gb250UGl4ZWxTaXplKSBjb25zdCA9IDA7CisKKyAgICB2aXJ0
dWFsIFFTaXplIHNpemVGcm9tQ29udGVudHMoQ29udGVudHNUeXBlLCBTdGF0ZSwgY29uc3QgUVNp
emUmIGNvbnRlbnRzU2l6ZSkgY29uc3QgPSAwOworCisgICAgZW51bSBCdXR0b25UeXBlIHsKKyAg
ICAgICAgUHVzaEJ1dHRvbiwKKyAgICAgICAgUmFkaW9CdXR0b24sCisgICAgICAgIENoZWNrQm94
CisgICAgfTsKKworICAgIHZpcnR1YWwgdm9pZCBwYWludEJ1dHRvbihRUGFpbnRlciosIEJ1dHRv
blR5cGUsIGNvbnN0IFFTdHlsZUZhY2FkZU9wdGlvbiYpID0gMDsKKyAgICB2aXJ0dWFsIHZvaWQg
cGFpbnRUZXh0RmllbGQoUVBhaW50ZXIqLCBjb25zdCBRU3R5bGVGYWNhZGVPcHRpb24mKSA9IDA7
CisgICAgdmlydHVhbCB2b2lkIHBhaW50Q29tYm9Cb3goUVBhaW50ZXIqLCBjb25zdCBRU3R5bGVG
YWNhZGVPcHRpb24mKSA9IDA7CisgICAgdmlydHVhbCB2b2lkIHBhaW50Q29tYm9Cb3hBcnJvdyhR
UGFpbnRlciosIGNvbnN0IFFTdHlsZUZhY2FkZU9wdGlvbiYpID0gMDsKKworICAgIHZpcnR1YWwg
dm9pZCBwYWludFNsaWRlclRyYWNrKFFQYWludGVyKiwgY29uc3QgUVN0eWxlRmFjYWRlT3B0aW9u
JikgPSAwOworICAgIHZpcnR1YWwgdm9pZCBwYWludFNsaWRlclRodW1iKFFQYWludGVyKiwgY29u
c3QgUVN0eWxlRmFjYWRlT3B0aW9uJikgPSAwOworICAgIHZpcnR1YWwgdm9pZCBwYWludElubmVy
U3BpbkJ1dHRvbihRUGFpbnRlciosIGNvbnN0IFFTdHlsZUZhY2FkZU9wdGlvbiYsIGJvb2wgc3Bp
bkJveFVwKSA9IDA7CisgICAgdmlydHVhbCB2b2lkIHBhaW50UHJvZ3Jlc3NCYXIoUVBhaW50ZXIq
LCBjb25zdCBRU3R5bGVGYWNhZGVPcHRpb24mLCBkb3VibGUgcHJvZ3Jlc3MsIGRvdWJsZSBhbmlt
YXRpb25Qcm9ncmVzcykgPSAwOworCisgICAgdmlydHVhbCBpbnQgc2Nyb2xsQmFyRXh0ZW50KGJv
b2wgbWluaSkgPSAwOworICAgIHZpcnR1YWwgYm9vbCBzY3JvbGxCYXJNaWRkbGVDbGlja0Fic29s
dXRlUG9zaXRpb25TdHlsZUhpbnQoKSBjb25zdCA9IDA7CisgICAgdmlydHVhbCB2b2lkIHBhaW50
U2Nyb2xsQ29ybmVyKFFQYWludGVyKiwgY29uc3QgUVJlY3QmKSA9IDA7CisKKyAgICB2aXJ0dWFs
IFN1YkNvbnRyb2wgaGl0VGVzdFNjcm9sbEJhcihjb25zdCBRU3R5bGVGYWNhZGVPcHRpb24mLCBj
b25zdCBRUG9pbnQmIHBvcykgPSAwOworICAgIHZpcnR1YWwgUVJlY3Qgc2Nyb2xsQmFyU3ViQ29u
dHJvbFJlY3QoY29uc3QgUVN0eWxlRmFjYWRlT3B0aW9uJiwgU3ViQ29udHJvbCkgPSAwOworICAg
IHZpcnR1YWwgdm9pZCBwYWludFNjcm9sbEJhcihRUGFpbnRlciosIGNvbnN0IFFTdHlsZUZhY2Fk
ZU9wdGlvbiYpID0gMDsKKworICAgIHZpcnR1YWwgUU9iamVjdCogd2lkZ2V0Rm9yUGFpbnRlcihR
UGFpbnRlciopID0gMDsKKworICAgIHZpcnR1YWwgYm9vbCBpc1ZhbGlkKCkgY29uc3QgPSAwOwor
CisgICAgc3RhdGljIFFTdHlsZSogc3R5bGVGb3JQYWdlKFBhZ2UqKTsKK307CisKK1FfREVDTEFS
RV9PUEVSQVRPUlNfRk9SX0ZMQUdTKFFTdHlsZUZhY2FkZTo6U3RhdGUpCisKK3N0cnVjdCBRU3R5
bGVGYWNhZGVPcHRpb24geworICAgIFFTdHlsZUZhY2FkZU9wdGlvbigpCisgICAgICAgIDogc3Rh
dGUoUVN0eWxlRmFjYWRlOjpTdGF0ZV9Ob25lKQorICAgICAgICAsIGRpcmVjdGlvbihRdDo6TGF5
b3V0RGlyZWN0aW9uQXV0bykKKyAgICB7CisgICAgICAgIHNsaWRlci5vcmllbnRhdGlvbiA9IFF0
OjpIb3Jpem9udGFsOworICAgICAgICBzbGlkZXIudXBzaWRlRG93biA9IGZhbHNlOworICAgICAg
ICBzbGlkZXIubWluaW11bSA9IDA7CisgICAgICAgIHNsaWRlci5tYXhpbXVtID0gMDsKKyAgICAg
ICAgc2xpZGVyLnBvc2l0aW9uID0gMDsKKyAgICAgICAgc2xpZGVyLnZhbHVlID0gMDsKKyAgICAg
ICAgc2xpZGVyLnNpbmdsZVN0ZXAgPSAwOworICAgICAgICBzbGlkZXIucGFnZVN0ZXAgPSAwOwor
ICAgICAgICBzbGlkZXIuYWN0aXZlU3ViQ29udHJvbHMgPSBRU3R5bGVGYWNhZGU6OlNDX05vbmU7
CisgICAgfQorCisgICAgUVN0eWxlRmFjYWRlOjpTdGF0ZSBzdGF0ZTsKKyAgICBRUmVjdCByZWN0
OworICAgIFF0OjpMYXlvdXREaXJlY3Rpb24gZGlyZWN0aW9uOworICAgIFFQYWxldHRlIHBhbGV0
dGU7CisKKyAgICAvLyBTbGlkZXIgZmVhdHVyZXMKKyAgICBzdHJ1Y3QgeworICAgICAgICBRdDo6
T3JpZW50YXRpb24gb3JpZW50YXRpb247CisgICAgICAgIGJvb2wgdXBzaWRlRG93bjsKKyAgICAg
ICAgaW50IG1pbmltdW07CisgICAgICAgIGludCBtYXhpbXVtOworICAgICAgICBpbnQgcG9zaXRp
b247CisgICAgICAgIGludCB2YWx1ZTsKKyAgICAgICAgaW50IHNpbmdsZVN0ZXA7CisgICAgICAg
IGludCBwYWdlU3RlcDsKKyAgICAgICAgUVN0eWxlRmFjYWRlOjpTdWJDb250cm9sIGFjdGl2ZVN1
YkNvbnRyb2xzOworICAgIH0gc2xpZGVyOworfTsKKworfQorCisjZW5kaWYgLy8gUVN0eWxlRmFj
YWRlX2gKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3F0L1JlbmRlclRoZW1l
UVN0eWxlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3F0L1JlbmRlclRoZW1lUVN0eWxl
LmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwLi43NDJiNjJjMzI0MTQ3ZmI0M2IxMjlkNGFhZTBkNTljNjc5OGNkYzY0
Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vcXQvUmVuZGVyVGhl
bWVRU3R5bGUuY3BwCkBAIC0wLDAgKzEsNjIwIEBACisvKgorICogVGhpcyBmaWxlIGlzIHBhcnQg
b2YgdGhlIFdlYktpdCBwcm9qZWN0LgorICoKKyAqIENvcHlyaWdodCAoQykgMjAwOC0yMDEyIE5v
a2lhIENvcnBvcmF0aW9uIGFuZC9vciBpdHMgc3Vic2lkaWFyeSgtaWVzKQorICoKKyAqIENvcHly
aWdodCAoQykgMjAwNiBaYWNrIFJ1c2luIDx6YWNrQGtkZS5vcmc+CisgKiAgICAgICAgICAgICAg
IDIwMDYgRGlyayBNdWVsbGVyIDxtdWVsbGVyQGtkZS5vcmc+CisgKiAgICAgICAgICAgICAgIDIw
MDYgTmlrb2xhcyBaaW1tZXJtYW5uIDx6aW1tZXJtYW5uQGtkZS5vcmc+CisgKiBDb3B5cmlnaHQg
KEMpIDIwMDggSG9sZ2VyIEhhbnMgUGV0ZXIgRnJleXRoZXIKKyAqCisgKiBBbGwgcmlnaHRzIHJl
c2VydmVkLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJl
ZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhl
IEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0
aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqIHZlcnNpb24gMiBvZiB0aGUg
TGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBU
aGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVz
ZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBs
aWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJU
SUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBM
aWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVk
IGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxv
bmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwg
d3JpdGUgdG8KKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5r
bGluIFN0cmVldCwgRmlmdGggRmxvb3IsCisgKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4K
KyAqCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIlJlbmRlclRoZW1lUVN0
eWxlLmgiCisKKyNpbmNsdWRlICJDU1NGb250U2VsZWN0b3IuaCIKKyNpbmNsdWRlICJDU1NWYWx1
ZUtleXdvcmRzLmgiCisjaW5jbHVkZSAiQ2hyb21lLmgiCisjaW5jbHVkZSAiQ2hyb21lQ2xpZW50
LmgiCisjaW5jbHVkZSAiQ29sb3IuaCIKKyNpbmNsdWRlICJEb2N1bWVudC5oIgorI2luY2x1ZGUg
IkZvbnQuaCIKKyNpbmNsdWRlICJGb250U2VsZWN0b3IuaCIKKyNpbmNsdWRlICJHcmFwaGljc0Nv
bnRleHQuaCIKKyNpbmNsdWRlICJIVE1MSW5wdXRFbGVtZW50LmgiCisjaW5jbHVkZSAiSFRNTE5h
bWVzLmgiCisjaW5jbHVkZSAiTG9jYWxpemVkU3RyaW5ncy5oIgorI2luY2x1ZGUgIk5vdEltcGxl
bWVudGVkLmgiCisjaW5jbHVkZSAiUGFnZS5oIgorI2luY2x1ZGUgIlBhaW50SW5mby5oIgorI2lu
Y2x1ZGUgIlFXZWJQYWdlQ2xpZW50LmgiCisjaW5jbHVkZSAiUmVuZGVyQm94LmgiCisjaWYgRU5B
QkxFKFBST0dSRVNTX0VMRU1FTlQpCisjaW5jbHVkZSAiUmVuZGVyUHJvZ3Jlc3MuaCIKKyNlbmRp
ZgorI2luY2x1ZGUgIlJlbmRlclNsaWRlci5oIgorI2luY2x1ZGUgIlNjcm9sbGJhclRoZW1lUVN0
eWxlLmgiCisjaW5jbHVkZSAiU2xpZGVyVGh1bWJFbGVtZW50LmgiCisjaW5jbHVkZSAiU3R5bGVS
ZXNvbHZlci5oIgorI2luY2x1ZGUgIlVzZXJBZ2VudFN0eWxlU2hlZXRzLmgiCisKKyNpbmNsdWRl
IDxRUGFpbnRlcj4KKworbmFtZXNwYWNlIFdlYkNvcmUgeworCit1c2luZyBuYW1lc3BhY2UgSFRN
TE5hbWVzOworCitRU2hhcmVkUG9pbnRlcjxTdHlsZVBhaW50ZXI+IFJlbmRlclRoZW1lUVN0eWxl
OjpnZXRTdHlsZVBhaW50ZXIoY29uc3QgUGFpbnRJbmZvJiBwYWludEluZm8pCit7CisgICAgcmV0
dXJuIFFTaGFyZWRQb2ludGVyPFN0eWxlUGFpbnRlcj4obmV3IFN0eWxlUGFpbnRlclFTdHlsZSh0
aGlzLCBwYWludEluZm8sIC8qUmVuZGVyT2JqZWN0Ki8wKSk7Cit9CisKK1N0eWxlUGFpbnRlclFT
dHlsZTo6U3R5bGVQYWludGVyUVN0eWxlKFJlbmRlclRoZW1lUVN0eWxlKiB0aGVtZSwgY29uc3Qg
UGFpbnRJbmZvJiBwYWludEluZm8sIFJlbmRlck9iamVjdCogcmVuZGVyT2JqZWN0KQorICAgIDog
U3R5bGVQYWludGVyKHRoZW1lLCBwYWludEluZm8pCisgICAgLCBxU3R5bGUodGhlbWUtPnFTdHls
ZSgpKQorICAgICwgYXBwZWFyYW5jZShOb0NvbnRyb2xQYXJ0KQoreworICAgIGluaXQocGFpbnRJ
bmZvLmNvbnRleHQgPyBwYWludEluZm8uY29udGV4dCA6IDApOworICAgIGlmIChyZW5kZXJPYmpl
Y3QpCisgICAgICAgIGFwcGVhcmFuY2UgPSB0aGVtZS0+aW5pdGlhbGl6ZUNvbW1vblFTdHlsZU9w
dGlvbnMoc3R5bGVPcHRpb24sIHJlbmRlck9iamVjdCk7Cit9CisKK1N0eWxlUGFpbnRlclFTdHls
ZTo6U3R5bGVQYWludGVyUVN0eWxlKFNjcm9sbGJhclRoZW1lUVN0eWxlKiB0aGVtZSwgR3JhcGhp
Y3NDb250ZXh0KiBjb250ZXh0KQorICAgIDogU3R5bGVQYWludGVyKCkKKyAgICAsIHFTdHlsZSh0
aGVtZS0+cVN0eWxlKCkpCisgICAgLCBhcHBlYXJhbmNlKE5vQ29udHJvbFBhcnQpCit7CisgICAg
aW5pdChjb250ZXh0KTsKK30KKwordm9pZCBTdHlsZVBhaW50ZXJRU3R5bGU6OmluaXQoR3JhcGhp
Y3NDb250ZXh0KiBjb250ZXh0KQoreworICAgIHBhaW50ZXIgPSBzdGF0aWNfY2FzdDxRUGFpbnRl
cio+KGNvbnRleHQtPnBsYXRmb3JtQ29udGV4dCgpKTsKKyAgICBpZiAoUU9iamVjdCogd2lkZ2V0
ID0gcVN0eWxlLT53aWRnZXRGb3JQYWludGVyKHBhaW50ZXIpKSB7CisgICAgICAgIHN0eWxlT3B0
aW9uLnBhbGV0dGUgPSB3aWRnZXQtPnByb3BlcnR5KCJwYWxldHRlIikudmFsdWU8UVBhbGV0dGU+
KCk7CisgICAgICAgIHN0eWxlT3B0aW9uLnJlY3QgPSB3aWRnZXQtPnByb3BlcnR5KCJyZWN0Iiku
dmFsdWU8UVJlY3Q+KCk7CisgICAgICAgIHN0eWxlT3B0aW9uLmRpcmVjdGlvbiA9IHN0YXRpY19j
YXN0PFF0OjpMYXlvdXREaXJlY3Rpb24+KHdpZGdldC0+cHJvcGVydHkoImxheW91dERpcmVjdGlv
biIpLnRvSW50KCkpOworICAgIH0KKworICAgIFN0eWxlUGFpbnRlcjo6aW5pdChjb250ZXh0KTsK
K30KKworUGFzc1JlZlB0cjxSZW5kZXJUaGVtZT4gUmVuZGVyVGhlbWVRU3R5bGU6OmNyZWF0ZShQ
YWdlKiBwYWdlKQoreworICAgIHJldHVybiBhZG9wdFJlZihuZXcgUmVuZGVyVGhlbWVRU3R5bGUo
cGFnZSkpOworfQorCitzdGF0aWMgUXRTdHlsZUZhY3RvcnlGdW5jdGlvbiBzdHlsZUZhY3RvcnlG
dW5jdGlvbjsKKwordm9pZCBSZW5kZXJUaGVtZVFTdHlsZTo6c2V0U3R5bGVGYWN0b3J5RnVuY3Rp
b24oUXRTdHlsZUZhY3RvcnlGdW5jdGlvbiBmdW5jdGlvbikKK3sKKyAgICBzdHlsZUZhY3RvcnlG
dW5jdGlvbiA9IGZ1bmN0aW9uOworfQorCitRdFN0eWxlRmFjdG9yeUZ1bmN0aW9uIFJlbmRlclRo
ZW1lUVN0eWxlOjpzdHlsZUZhY3RvcnkoKQoreworICAgIHJldHVybiBzdHlsZUZhY3RvcnlGdW5j
dGlvbjsKK30KKworUmVuZGVyVGhlbWVRU3R5bGU6OlJlbmRlclRoZW1lUVN0eWxlKFBhZ2UqIHBh
Z2UpCisgICAgOiBSZW5kZXJUaGVtZVF0KHBhZ2UpCisgICAgLCBtX3FTdHlsZShhZG9wdFB0cihz
dHlsZUZhY3RvcnlGdW5jdGlvbihwYWdlKSkpCit7CisgICAgaW50IGJ1dHRvblBpeGVsU2l6ZSA9
IDA7CisgICAgbV9xU3R5bGUtPmdldEJ1dHRvbk1ldHJpY3MoJm1fYnV0dG9uRm9udEZhbWlseSwg
JmJ1dHRvblBpeGVsU2l6ZSk7CisjaWZkZWYgUV9XU19NQUMKKyAgICBtX2J1dHRvbkZvbnRQaXhl
bFNpemUgPSBidXR0b25QaXhlbFNpemU7CisjZW5kaWYKK30KKworUmVuZGVyVGhlbWVRU3R5bGU6
On5SZW5kZXJUaGVtZVFTdHlsZSgpCit7Cit9CisKK3ZvaWQgUmVuZGVyVGhlbWVRU3R5bGU6OnNl
dFBhbGV0dGVGcm9tUGFnZUNsaWVudElmRXhpc3RzKFFQYWxldHRlJiBwYWxldHRlKSBjb25zdAor
eworICAgIGlmICghbV9wYWdlKQorICAgICAgICByZXR1cm47CisKKyAgICBBU1NFUlQobV9wYWdl
LT5jaHJvbWUoKSk7CisgICAgQ2hyb21lQ2xpZW50KiBjaHJvbWVDbGllbnQgPSBtX3BhZ2UtPmNo
cm9tZSgpLT5jbGllbnQoKTsKKyAgICBpZiAoIWNocm9tZUNsaWVudCkKKyAgICAgICAgcmV0dXJu
OworCisgICAgaWYgKFFXZWJQYWdlQ2xpZW50KiBwYWdlQ2xpZW50ID0gY2hyb21lQ2xpZW50LT5w
bGF0Zm9ybVBhZ2VDbGllbnQoKSkKKyAgICAgICAgcGFsZXR0ZSA9IHBhZ2VDbGllbnQtPnBhbGV0
dGUoKTsKK30KKworUVJlY3QgUmVuZGVyVGhlbWVRU3R5bGU6OmluZmxhdGVCdXR0b25SZWN0KGNv
bnN0IFFSZWN0JiBvcmlnaW5hbFJlY3QpIGNvbnN0Cit7CisgICAgUVJlY3QgbGF5b3V0UmVjdCA9
IG1fcVN0eWxlLT5idXR0b25TdWJFbGVtZW50UmVjdChRU3R5bGVGYWNhZGU6OlB1c2hCdXR0b25M
YXlvdXRJdGVtLCBRU3R5bGVGYWNhZGU6OlN0YXRlX1NtYWxsLCBvcmlnaW5hbFJlY3QpOworICAg
IGlmICghbGF5b3V0UmVjdC5pc051bGwoKSkgeworICAgICAgICBpbnQgcGFkZGluZ0xlZnQgPSBs
YXlvdXRSZWN0LmxlZnQoKSAtIG9yaWdpbmFsUmVjdC5sZWZ0KCk7CisgICAgICAgIGludCBwYWRk
aW5nUmlnaHQgPSBvcmlnaW5hbFJlY3QucmlnaHQoKSAtIGxheW91dFJlY3QucmlnaHQoKTsKKyAg
ICAgICAgaW50IHBhZGRpbmdUb3AgPSBsYXlvdXRSZWN0LnRvcCgpIC0gb3JpZ2luYWxSZWN0LnRv
cCgpOworICAgICAgICBpbnQgcGFkZGluZ0JvdHRvbSA9IG9yaWdpbmFsUmVjdC5ib3R0b20oKSAt
IGxheW91dFJlY3QuYm90dG9tKCk7CisKKyAgICAgICAgcmV0dXJuIG9yaWdpbmFsUmVjdC5hZGp1
c3RlZCgtcGFkZGluZ0xlZnQsIC1wYWRkaW5nVG9wLCBwYWRkaW5nUmlnaHQsIHBhZGRpbmdCb3R0
b20pOworICAgIH0KKyAgICByZXR1cm4gb3JpZ2luYWxSZWN0OworfQorCit2b2lkIFJlbmRlclRo
ZW1lUVN0eWxlOjpjb21wdXRlU2l6ZUJhc2VkT25TdHlsZShSZW5kZXJTdHlsZSogcmVuZGVyU3R5
bGUpIGNvbnN0Cit7CisgICAgUVNpemUgc2l6ZSgwLCAwKTsKKyAgICBjb25zdCBRRm9udE1ldHJp
Y3MgZm0ocmVuZGVyU3R5bGUtPmZvbnQoKS5zeW50aGV0aWNGb250KCkpOworCisgICAgc3dpdGNo
IChyZW5kZXJTdHlsZS0+YXBwZWFyYW5jZSgpKSB7CisgICAgY2FzZSBUZXh0QXJlYVBhcnQ6Cisg
ICAgY2FzZSBTZWFyY2hGaWVsZFBhcnQ6CisgICAgY2FzZSBUZXh0RmllbGRQYXJ0OiB7CisgICAg
ICAgIGludCBwYWRkaW5nID0gbV9xU3R5bGUtPmZpbmRGcmFtZUxpbmVXaWR0aCgpOworICAgICAg
ICByZW5kZXJTdHlsZS0+c2V0UGFkZGluZ0xlZnQoTGVuZ3RoKHBhZGRpbmcsIEZpeGVkKSk7Cisg
ICAgICAgIHJlbmRlclN0eWxlLT5zZXRQYWRkaW5nUmlnaHQoTGVuZ3RoKHBhZGRpbmcsIEZpeGVk
KSk7CisgICAgICAgIHJlbmRlclN0eWxlLT5zZXRQYWRkaW5nVG9wKExlbmd0aChwYWRkaW5nLCBG
aXhlZCkpOworICAgICAgICByZW5kZXJTdHlsZS0+c2V0UGFkZGluZ0JvdHRvbShMZW5ndGgocGFk
ZGluZywgRml4ZWQpKTsKKyAgICAgICAgYnJlYWs7CisgICAgfQorICAgIGRlZmF1bHQ6CisgICAg
ICAgIGJyZWFrOworICAgIH0KKyAgICAvLyBJZiB0aGUgd2lkdGggYW5kIGhlaWdodCBhcmUgYm90
aCBzcGVjaWZpZWQsIHRoZW4gd2UgaGF2ZSBub3RoaW5nIHRvIGRvLgorICAgIGlmICghcmVuZGVy
U3R5bGUtPndpZHRoKCkuaXNJbnRyaW5zaWNPckF1dG8oKSAmJiAhcmVuZGVyU3R5bGUtPmhlaWdo
dCgpLmlzQXV0bygpKQorICAgICAgICByZXR1cm47CisKKyAgICBzd2l0Y2ggKHJlbmRlclN0eWxl
LT5hcHBlYXJhbmNlKCkpIHsKKyAgICBjYXNlIENoZWNrYm94UGFydDogeworICAgICAgICBpbnQg
Y2hlY2tCb3hXaWR0aCA9IG1fcVN0eWxlLT5zaW1wbGVQaXhlbE1ldHJpYyhRU3R5bGVGYWNhZGU6
OlBNX0luZGljYXRvcldpZHRoLCBRU3R5bGVGYWNhZGU6OlN0YXRlX1NtYWxsKTsKKyAgICAgICAg
Y2hlY2tCb3hXaWR0aCAqPSByZW5kZXJTdHlsZS0+ZWZmZWN0aXZlWm9vbSgpOworICAgICAgICBz
aXplID0gUVNpemUoY2hlY2tCb3hXaWR0aCwgY2hlY2tCb3hXaWR0aCk7CisgICAgICAgIGJyZWFr
OworICAgIH0KKyAgICBjYXNlIFJhZGlvUGFydDogeworICAgICAgICBpbnQgcmFkaW9XaWR0aCA9
IG1fcVN0eWxlLT5zaW1wbGVQaXhlbE1ldHJpYyhRU3R5bGVGYWNhZGU6OlBNX0V4Y2x1c2l2ZUlu
ZGljYXRvcldpZHRoLCBRU3R5bGVGYWNhZGU6OlN0YXRlX1NtYWxsKTsKKyAgICAgICAgcmFkaW9X
aWR0aCAqPSByZW5kZXJTdHlsZS0+ZWZmZWN0aXZlWm9vbSgpOworICAgICAgICBzaXplID0gUVNp
emUocmFkaW9XaWR0aCwgcmFkaW9XaWR0aCk7CisgICAgICAgIGJyZWFrOworICAgIH0KKyAgICBj
YXNlIFB1c2hCdXR0b25QYXJ0OgorICAgIGNhc2UgQnV0dG9uUGFydDogeworICAgICAgICBRU2l6
ZSBjb250ZW50U2l6ZSA9IGZtLnNpemUoUXQ6OlRleHRTaG93TW5lbW9uaWMsIFFTdHJpbmc6OmZy
b21MYXRpbjEoIlgiKSk7CisgICAgICAgIFFTaXplIHB1c2hCdXR0b25TaXplID0gbV9xU3R5bGUt
PnNpemVGcm9tQ29udGVudHMoUVN0eWxlRmFjYWRlOjpDVF9QdXNoQnV0dG9uLCBRU3R5bGVGYWNh
ZGU6OlN0YXRlX1NtYWxsLCBjb250ZW50U2l6ZSk7CisgICAgICAgIFFSZWN0IGxheW91dFJlY3Qg
PSBtX3FTdHlsZS0+YnV0dG9uU3ViRWxlbWVudFJlY3QoUVN0eWxlRmFjYWRlOjpQdXNoQnV0dG9u
TGF5b3V0SXRlbSwgUVN0eWxlRmFjYWRlOjpTdGF0ZV9TbWFsbCwgUVJlY3QoMCwgMCwgcHVzaEJ1
dHRvblNpemUud2lkdGgoKSwgcHVzaEJ1dHRvblNpemUuaGVpZ2h0KCkpKTsKKworICAgICAgICAv
LyBJZiB0aGUgc3R5bGUgc3VwcG9ydHMgbGF5b3V0IHJlY3RzIHdlIHVzZSB0aGF0LCBhbmQgIGNv
bXBlbnNhdGUgYWNjb3JkaW5nbHkKKyAgICAgICAgLy8gaW4gcGFpbnRCdXR0b24oKSBiZWxvdy4K
KyAgICAgICAgaWYgKCFsYXlvdXRSZWN0LmlzTnVsbCgpKQorICAgICAgICAgICAgc2l6ZS5zZXRI
ZWlnaHQobGF5b3V0UmVjdC5oZWlnaHQoKSk7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIHNp
emUuc2V0SGVpZ2h0KHB1c2hCdXR0b25TaXplLmhlaWdodCgpKTsKKworICAgICAgICBicmVhazsK
KyAgICB9CisgICAgY2FzZSBNZW51bGlzdFBhcnQ6IHsKKyAgICAgICAgaW50IGNvbnRlbnRIZWln
aHQgPSBxTWF4KGZtLmxpbmVTcGFjaW5nKCksIDE0KSArIDI7CisgICAgICAgIFFTaXplIG1lbnVM
aXN0U2l6ZSA9IG1fcVN0eWxlLT5zaXplRnJvbUNvbnRlbnRzKFFTdHlsZUZhY2FkZTo6Q1RfQ29t
Ym9Cb3gsIFFTdHlsZUZhY2FkZTo6U3RhdGVfU21hbGwsIFFTaXplKDAsIGNvbnRlbnRIZWlnaHQp
KTsKKyAgICAgICAgc2l6ZS5zZXRIZWlnaHQobWVudUxpc3RTaXplLmhlaWdodCgpKTsKKyAgICAg
ICAgYnJlYWs7CisgICAgfQorICAgIGRlZmF1bHQ6CisgICAgICAgIGJyZWFrOworICAgIH0KKwor
ICAgIC8vIEZJWE1FOiBDaGVjayBpcyBmbGF3ZWQsIHNpbmNlIGl0IGRvZXNuJ3QgdGFrZSBtaW4t
d2lkdGgvbWF4LXdpZHRoIGludG8gYWNjb3VudC4KKyAgICBpZiAocmVuZGVyU3R5bGUtPndpZHRo
KCkuaXNJbnRyaW5zaWNPckF1dG8oKSAmJiBzaXplLndpZHRoKCkgPiAwKQorICAgICAgICByZW5k
ZXJTdHlsZS0+c2V0TWluV2lkdGgoTGVuZ3RoKHNpemUud2lkdGgoKSwgRml4ZWQpKTsKKyAgICBp
ZiAocmVuZGVyU3R5bGUtPmhlaWdodCgpLmlzQXV0bygpICYmIHNpemUuaGVpZ2h0KCkgPiAwKQor
ICAgICAgICByZW5kZXJTdHlsZS0+c2V0TWluSGVpZ2h0KExlbmd0aChzaXplLmhlaWdodCgpLCBG
aXhlZCkpOworfQorCisKKwordm9pZCBSZW5kZXJUaGVtZVFTdHlsZTo6YWRqdXN0QnV0dG9uU3R5
bGUoU3R5bGVSZXNvbHZlciogc3R5bGVSZXNvbHZlciwgUmVuZGVyU3R5bGUqIHN0eWxlLCBFbGVt
ZW50KikgY29uc3QKK3sKKyAgICAvLyBEaXRjaCB0aGUgYm9yZGVyLgorICAgIHN0eWxlLT5yZXNl
dEJvcmRlcigpOworCisjaWZkZWYgUV9XU19NQUMKKyAgICBpZiAoc3R5bGUtPmFwcGVhcmFuY2Uo
KSA9PSBQdXNoQnV0dG9uUGFydCkgeworICAgICAgICAvLyBUaGUgTWFjIHBvcnRzIGlnbm9yZSB0
aGUgc3BlY2lmaWVkIGhlaWdodCBmb3IgPGlucHV0IHR5cGU9ImJ1dHRvbiI+IGVsZW1lbnRzCisg
ICAgICAgIC8vIHVubGVzcyBhIGJvcmRlciBhbmQvb3IgYmFja2dyb3VuZCBDU1MgcHJvcGVydHkg
aXMgYWxzbyBzcGVjaWZpZWQuCisgICAgICAgIHN0eWxlLT5zZXRIZWlnaHQoTGVuZ3RoKEF1dG8p
KTsKKyAgICB9CisjZW5kaWYKKworICAgIEZvbnREZXNjcmlwdGlvbiBmb250RGVzY3JpcHRpb24g
PSBzdHlsZS0+Zm9udERlc2NyaXB0aW9uKCk7CisgICAgZm9udERlc2NyaXB0aW9uLnNldElzQWJz
b2x1dGVTaXplKHRydWUpOworCisjaWZkZWYgUV9XU19NQUMgLy8gVXNlIGZpeGVkIGZvbnQgc2l6
ZSBhbmQgZmFtaWx5IG9uIE1hYyAobGlrZSBTYWZhcmkgZG9lcykKKyAgICBmb250RGVzY3JpcHRp
b24uc2V0U3BlY2lmaWVkU2l6ZShtX2J1dHRvbkZvbnRQaXhlbFNpemUpOworICAgIGZvbnREZXNj
cmlwdGlvbi5zZXRDb21wdXRlZFNpemUobV9idXR0b25Gb250UGl4ZWxTaXplKTsKKyNlbHNlCisg
ICAgZm9udERlc2NyaXB0aW9uLnNldFNwZWNpZmllZFNpemUoc3R5bGUtPmZvbnRTaXplKCkpOwor
ICAgIGZvbnREZXNjcmlwdGlvbi5zZXRDb21wdXRlZFNpemUoc3R5bGUtPmZvbnRTaXplKCkpOwor
I2VuZGlmCisKKyAgICBGb250RmFtaWx5IGZvbnRGYW1pbHk7CisgICAgZm9udEZhbWlseS5zZXRG
YW1pbHkobV9idXR0b25Gb250RmFtaWx5KTsKKyAgICBmb250RGVzY3JpcHRpb24uc2V0RmFtaWx5
KGZvbnRGYW1pbHkpOworICAgIHN0eWxlLT5zZXRGb250RGVzY3JpcHRpb24oZm9udERlc2NyaXB0
aW9uKTsKKyAgICBzdHlsZS0+Zm9udCgpLnVwZGF0ZShzdHlsZVJlc29sdmVyLT5mb250U2VsZWN0
b3IoKSk7CisgICAgc3R5bGUtPnNldExpbmVIZWlnaHQoUmVuZGVyU3R5bGU6OmluaXRpYWxMaW5l
SGVpZ2h0KCkpOworICAgIHNldEJ1dHRvblNpemUoc3R5bGUpOworICAgIHNldEJ1dHRvblBhZGRp
bmcoc3R5bGUpOworfQorCit2b2lkIFJlbmRlclRoZW1lUVN0eWxlOjpzZXRCdXR0b25QYWRkaW5n
KFJlbmRlclN0eWxlKiBzdHlsZSkgY29uc3QKK3sKKyAgICAvLyBGYWtlIGEgYnV0dG9uIHJlY3Qg
aGVyZSwgc2luY2Ugd2UncmUganVzdCBjb21wdXRpbmcgZGVsdGFzCisgICAgUVJlY3Qgb3JpZ2lu
YWxSZWN0ID0gUVJlY3QoMCwgMCwgMTAwLCAzMCk7CisKKyAgICAvLyBEZWZhdWx0IHBhZGRpbmcg
aXMgYmFzZWQgb24gdGhlIGJ1dHRvbiBtYXJnaW4gcGl4ZWwgbWV0cmljCisgICAgaW50IGJ1dHRv
bk1hcmdpbiA9IG1fcVN0eWxlLT5idXR0b25NYXJnaW4oUVN0eWxlRmFjYWRlOjpTdGF0ZV9TbWFs
bCwgb3JpZ2luYWxSZWN0KTsKKyAgICBpbnQgcGFkZGluZ0xlZnQgPSBidXR0b25NYXJnaW47Cisg
ICAgaW50IHBhZGRpbmdSaWdodCA9IGJ1dHRvbk1hcmdpbjsKKyAgICBpbnQgcGFkZGluZ1RvcCA9
IGJ1dHRvbk1hcmdpbjsKKyAgICBpbnQgcGFkZGluZ0JvdHRvbSA9IGJ1dHRvbk1hcmdpbjsKKwor
ICAgIC8vIFRoZW4gY2hlY2sgaWYgdGhlIHN0eWxlIHVzZXMgbGF5b3V0IG1hcmdpbnMKKyAgICBR
UmVjdCBsYXlvdXRSZWN0ID0gbV9xU3R5bGUtPmJ1dHRvblN1YkVsZW1lbnRSZWN0KFFTdHlsZUZh
Y2FkZTo6UHVzaEJ1dHRvbkxheW91dEl0ZW0sIFFTdHlsZUZhY2FkZTo6U3RhdGVfU21hbGwsIG9y
aWdpbmFsUmVjdCk7CisgICAgaWYgKCFsYXlvdXRSZWN0LmlzTnVsbCgpKSB7CisgICAgICAgIFFS
ZWN0IGNvbnRlbnRzUmVjdCA9IG1fcVN0eWxlLT5idXR0b25TdWJFbGVtZW50UmVjdChRU3R5bGVG
YWNhZGU6OlB1c2hCdXR0b25Db250ZW50cywgUVN0eWxlRmFjYWRlOjpTdGF0ZV9TbWFsbCwgb3Jp
Z2luYWxSZWN0KTsKKyAgICAgICAgcGFkZGluZ0xlZnQgPSBjb250ZW50c1JlY3QubGVmdCgpIC0g
bGF5b3V0UmVjdC5sZWZ0KCk7CisgICAgICAgIHBhZGRpbmdSaWdodCA9IGxheW91dFJlY3Qucmln
aHQoKSAtIGNvbnRlbnRzUmVjdC5yaWdodCgpOworICAgICAgICBwYWRkaW5nVG9wID0gY29udGVu
dHNSZWN0LnRvcCgpIC0gbGF5b3V0UmVjdC50b3AoKTsKKworICAgICAgICAvLyBDYW4ndCB1c2Ug
dGhpcyByaWdodCBub3cgYmVjYXVzZSB3ZSBkb24ndCBoYXZlIHRoZSBiYXNlbGluZSB0byBjb21w
ZW5zYXRlCisgICAgICAgIC8vIHBhZGRpbmdCb3R0b20gPSBsYXlvdXRSZWN0LmJvdHRvbSgpIC0g
Y29udGVudHNSZWN0LmJvdHRvbSgpOworICAgIH0KKyAgICBzdHlsZS0+c2V0UGFkZGluZ0xlZnQo
TGVuZ3RoKHBhZGRpbmdMZWZ0LCBGaXhlZCkpOworICAgIHN0eWxlLT5zZXRQYWRkaW5nUmlnaHQo
TGVuZ3RoKHBhZGRpbmdSaWdodCwgRml4ZWQpKTsKKyAgICBzdHlsZS0+c2V0UGFkZGluZ1RvcChM
ZW5ndGgocGFkZGluZ1RvcCwgRml4ZWQpKTsKKyAgICBzdHlsZS0+c2V0UGFkZGluZ0JvdHRvbShM
ZW5ndGgocGFkZGluZ0JvdHRvbSwgRml4ZWQpKTsKK30KKworYm9vbCBSZW5kZXJUaGVtZVFTdHls
ZTo6cGFpbnRCdXR0b24oUmVuZGVyT2JqZWN0KiBvLCBjb25zdCBQYWludEluZm8mIGksIGNvbnN0
IEludFJlY3QmIHIpCit7CisgICAgU3R5bGVQYWludGVyUVN0eWxlIHAodGhpcywgaSwgbyk7Cisg
ICAgaWYgKCFwLmlzVmFsaWQoKSkKKyAgICAgICAgcmV0dXJuIHRydWU7CisKKyAgICBwLnN0eWxl
T3B0aW9uLnJlY3QgPSByOworICAgIHAuc3R5bGVPcHRpb24uc3RhdGUgfD0gUVN0eWxlRmFjYWRl
OjpTdGF0ZV9TbWFsbDsKKworICAgIGlmIChwLmFwcGVhcmFuY2UgPT0gUHVzaEJ1dHRvblBhcnQg
fHwgcC5hcHBlYXJhbmNlID09IEJ1dHRvblBhcnQpIHsKKyAgICAgICAgcC5zdHlsZU9wdGlvbi5y
ZWN0ID0gaW5mbGF0ZUJ1dHRvblJlY3QocC5zdHlsZU9wdGlvbi5yZWN0KTsKKyAgICAgICAgcC5w
YWludEJ1dHRvbihRU3R5bGVGYWNhZGU6OlB1c2hCdXR0b24pOworICAgIH0gZWxzZSBpZiAocC5h
cHBlYXJhbmNlID09IFJhZGlvUGFydCkKKyAgICAgICAgcC5wYWludEJ1dHRvbihRU3R5bGVGYWNh
ZGU6OlJhZGlvQnV0dG9uKTsKKyAgICBlbHNlIGlmIChwLmFwcGVhcmFuY2UgPT0gQ2hlY2tib3hQ
YXJ0KQorICAgICAgICBwLnBhaW50QnV0dG9uKFFTdHlsZUZhY2FkZTo6Q2hlY2tCb3gpOworCisg
ICAgcmV0dXJuIGZhbHNlOworfQorCitib29sIFJlbmRlclRoZW1lUVN0eWxlOjpwYWludFRleHRG
aWVsZChSZW5kZXJPYmplY3QqIG8sIGNvbnN0IFBhaW50SW5mbyYgaSwgY29uc3QgSW50UmVjdCYg
cikKK3sKKyAgICBTdHlsZVBhaW50ZXJRU3R5bGUgcCh0aGlzLCBpLCBvKTsKKyAgICBpZiAoIXAu
aXNWYWxpZCgpKQorICAgICAgICByZXR1cm4gdHJ1ZTsKKworICAgIHAuc3R5bGVPcHRpb24ucmVj
dCA9IHI7CisgICAgcC5zdHlsZU9wdGlvbi5zdGF0ZSB8PSBRU3R5bGVGYWNhZGU6OlN0YXRlX1N1
bmtlbjsKKworICAgIC8vIEdldCB0aGUgY29ycmVjdCB0aGVtZSBkYXRhIGZvciBhIHRleHQgZmll
bGQKKyAgICBpZiAocC5hcHBlYXJhbmNlICE9IFRleHRGaWVsZFBhcnQKKyAgICAgICAgJiYgcC5h
cHBlYXJhbmNlICE9IFNlYXJjaEZpZWxkUGFydAorICAgICAgICAmJiBwLmFwcGVhcmFuY2UgIT0g
VGV4dEFyZWFQYXJ0CisgICAgICAgICYmIHAuYXBwZWFyYW5jZSAhPSBMaXN0Ym94UGFydCkKKyAg
ICAgICAgcmV0dXJuIHRydWU7CisKKyAgICAvLyBOb3cgcGFpbnQgdGhlIHRleHQgZmllbGQuCisg
ICAgcC5wYWludFRleHRGaWVsZCgpOworICAgIHJldHVybiBmYWxzZTsKK30KKwordm9pZCBSZW5k
ZXJUaGVtZVFTdHlsZTo6YWRqdXN0VGV4dEFyZWFTdHlsZShTdHlsZVJlc29sdmVyKiBzdHlsZVJl
c29sdmVyLCBSZW5kZXJTdHlsZSogc3R5bGUsIEVsZW1lbnQqIGVsZW1lbnQpIGNvbnN0Cit7Cisg
ICAgYWRqdXN0VGV4dEZpZWxkU3R5bGUoc3R5bGVSZXNvbHZlciwgc3R5bGUsIGVsZW1lbnQpOwor
fQorCitib29sIFJlbmRlclRoZW1lUVN0eWxlOjpwYWludFRleHRBcmVhKFJlbmRlck9iamVjdCog
bywgY29uc3QgUGFpbnRJbmZvJiBpLCBjb25zdCBJbnRSZWN0JiByKQoreworICAgIHJldHVybiBw
YWludFRleHRGaWVsZChvLCBpLCByKTsKK30KKwordm9pZCBSZW5kZXJUaGVtZVFTdHlsZTo6c2V0
UG9wdXBQYWRkaW5nKFJlbmRlclN0eWxlKiBzdHlsZSkgY29uc3QKK3sKKyAgICBjb25zdCBpbnQg
cGFkZGluZ0xlZnQgPSA0OworICAgIGNvbnN0IGludCBwYWRkaW5nUmlnaHQgPSBzdHlsZS0+d2lk
dGgoKS5pc0ZpeGVkKCkgfHwgc3R5bGUtPndpZHRoKCkuaXNQZXJjZW50KCkgPyA1IDogODsKKwor
ICAgIHN0eWxlLT5zZXRQYWRkaW5nTGVmdChMZW5ndGgocGFkZGluZ0xlZnQsIEZpeGVkKSk7CisK
KyAgICBpbnQgdyA9IG1fcVN0eWxlLT5zaW1wbGVQaXhlbE1ldHJpYyhRU3R5bGVGYWNhZGU6OlBN
X0J1dHRvbkljb25TaXplKTsKKyAgICBzdHlsZS0+c2V0UGFkZGluZ1JpZ2h0KExlbmd0aChwYWRk
aW5nUmlnaHQgKyB3LCBGaXhlZCkpOworCisgICAgc3R5bGUtPnNldFBhZGRpbmdUb3AoTGVuZ3Ro
KDIsIEZpeGVkKSk7CisgICAgc3R5bGUtPnNldFBhZGRpbmdCb3R0b20oTGVuZ3RoKDIsIEZpeGVk
KSk7Cit9CisKK1FQYWxldHRlIFJlbmRlclRoZW1lUVN0eWxlOjpjb2xvclBhbGV0dGUoKSBjb25z
dAoreworICAgIFFQYWxldHRlIHBhbGV0dGUgPSBSZW5kZXJUaGVtZVF0Ojpjb2xvclBhbGV0dGUo
KTsKKyAgICBzZXRQYWxldHRlRnJvbVBhZ2VDbGllbnRJZkV4aXN0cyhwYWxldHRlKTsKKyAgICBy
ZXR1cm4gcGFsZXR0ZTsKK30KKworYm9vbCBSZW5kZXJUaGVtZVFTdHlsZTo6cGFpbnRNZW51TGlz
dChSZW5kZXJPYmplY3QqIG8sIGNvbnN0IFBhaW50SW5mbyYgaSwgY29uc3QgSW50UmVjdCYgcikK
K3sKKyAgICBTdHlsZVBhaW50ZXJRU3R5bGUgcCh0aGlzLCBpLCBvKTsKKyAgICBpZiAoIXAuaXNW
YWxpZCgpKQorICAgICAgICByZXR1cm4gdHJ1ZTsKKworICAgIHAuc3R5bGVPcHRpb24ucmVjdCA9
IHI7CisgICAgcC5wYWludENvbWJvQm94KCk7CisgICAgcmV0dXJuIGZhbHNlOworfQorCit2b2lk
IFJlbmRlclRoZW1lUVN0eWxlOjphZGp1c3RNZW51TGlzdEJ1dHRvblN0eWxlKFN0eWxlUmVzb2x2
ZXIqIHN0eWxlUmVzb2x2ZXIsIFJlbmRlclN0eWxlKiBzdHlsZSwgRWxlbWVudCogZSkgY29uc3QK
K3sKKyAgICAvLyBXT1JLQVJPVU5EIGJlY2F1c2UgaHRtbC5jc3Mgc3BlY2lmaWVzIC13ZWJraXQt
Ym9yZGVyLXJhZGl1cyBmb3IgPHNlbGVjdD4gc28gd2Ugb3ZlcnJpZGUgaXQgaGVyZQorICAgIC8v
IHNlZSBhbHNvIGh0dHA6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE4Mzk5Cisg
ICAgc3R5bGUtPnJlc2V0Qm9yZGVyUmFkaXVzKCk7CisKKyAgICBSZW5kZXJUaGVtZVF0OjphZGp1
c3RNZW51TGlzdEJ1dHRvblN0eWxlKHN0eWxlUmVzb2x2ZXIsIHN0eWxlLCBlKTsKK30KKworYm9v
bCBSZW5kZXJUaGVtZVFTdHlsZTo6cGFpbnRNZW51TGlzdEJ1dHRvbihSZW5kZXJPYmplY3QqIG8s
IGNvbnN0IFBhaW50SW5mbyYgaSwgY29uc3QgSW50UmVjdCYgcikKK3sKKyAgICBTdHlsZVBhaW50
ZXJRU3R5bGUgcCh0aGlzLCBpLCBvKTsKKyAgICBpZiAoIXAuaXNWYWxpZCgpKQorICAgICAgICBy
ZXR1cm4gdHJ1ZTsKKworICAgIHAuc3R5bGVPcHRpb24ucmVjdCA9IHI7CisgICAgcC5wYWludENv
bWJvQm94QXJyb3coKTsKKyAgICByZXR1cm4gZmFsc2U7Cit9CisKKyNpZiBFTkFCTEUoUFJPR1JF
U1NfRUxFTUVOVCkKK2RvdWJsZSBSZW5kZXJUaGVtZVFTdHlsZTo6YW5pbWF0aW9uRHVyYXRpb25G
b3JQcm9ncmVzc0JhcihSZW5kZXJQcm9ncmVzcyogcmVuZGVyUHJvZ3Jlc3MpIGNvbnN0Cit7Cisg
ICAgaWYgKHJlbmRlclByb2dyZXNzLT5wb3NpdGlvbigpID49IDApCisgICAgICAgIHJldHVybiAw
OworCisgICAgSW50U2l6ZSBzaXplID0gcmVuZGVyUHJvZ3Jlc3MtPnBpeGVsU25hcHBlZFNpemUo
KTsKKyAgICAvLyBGSVhNRTogVW50aWwgaHR0cDovL2J1Z3JlcG9ydHMucXQubm9raWEuY29tL2Jy
b3dzZS9RVEJVRy05MTcxIGlzIGZpeGVkLAorICAgIC8vIHdlIHNpbXVsYXRlIG9uZSBzcXVhcmUg
YW5pbWF0aW5nIGFjcm9zcyB0aGUgcHJvZ3Jlc3MgYmFyLgorICAgIHJldHVybiAoc2l6ZS53aWR0
aCgpIC8gbV9xU3R5bGUtPnByb2dyZXNzQmFyQ2h1bmtXaWR0aChzaXplKSkgKiBhbmltYXRpb25S
ZXBlYXRJbnRlcnZhbEZvclByb2dyZXNzQmFyKHJlbmRlclByb2dyZXNzKTsKK30KKworYm9vbCBS
ZW5kZXJUaGVtZVFTdHlsZTo6cGFpbnRQcm9ncmVzc0JhcihSZW5kZXJPYmplY3QqIG8sIGNvbnN0
IFBhaW50SW5mbyYgcGksIGNvbnN0IEludFJlY3QmIHIpCit7CisgICAgaWYgKCFvLT5pc1Byb2dy
ZXNzKCkpCisgICAgICAgIHJldHVybiB0cnVlOworCisgICAgU3R5bGVQYWludGVyUVN0eWxlIHAo
dGhpcywgcGksIG8pOworICAgIGlmICghcC5pc1ZhbGlkKCkpCisgICAgICAgIHJldHVybiB0cnVl
OworCisgICAgcC5zdHlsZU9wdGlvbi5yZWN0ID0gcjsKKyAgICBSZW5kZXJQcm9ncmVzcyogcmVu
ZGVyUHJvZ3Jlc3MgPSB0b1JlbmRlclByb2dyZXNzKG8pOworICAgIHAucGFpbnRQcm9ncmVzc0Jh
cihyZW5kZXJQcm9ncmVzcy0+cG9zaXRpb24oKSwgcmVuZGVyUHJvZ3Jlc3MtPmFuaW1hdGlvblBy
b2dyZXNzKCkpOworICAgIHJldHVybiBmYWxzZTsKK30KKyNlbmRpZgorCitib29sIFJlbmRlclRo
ZW1lUVN0eWxlOjpwYWludFNsaWRlclRyYWNrKFJlbmRlck9iamVjdCogbywgY29uc3QgUGFpbnRJ
bmZvJiBwaSwgY29uc3QgSW50UmVjdCYgcikKK3sKKyAgICBTdHlsZVBhaW50ZXJRU3R5bGUgcCh0
aGlzLCBwaSwgbyk7CisgICAgaWYgKCFwLmlzVmFsaWQoKSkKKyAgICAgICAgcmV0dXJuIHRydWU7
CisKKyAgICBjb25zdCBRUG9pbnQgdG9wTGVmdCA9IHIubG9jYXRpb24oKTsKKyAgICBwLnBhaW50
ZXItPnRyYW5zbGF0ZSh0b3BMZWZ0KTsKKworICAgIHAuc3R5bGVPcHRpb24ucmVjdCA9IHI7Cisg
ICAgcC5zdHlsZU9wdGlvbi5yZWN0Lm1vdmVUbyhRUG9pbnQoMCwgMCkpOworCisgICAgaWYgKHAu
YXBwZWFyYW5jZSA9PSBTbGlkZXJWZXJ0aWNhbFBhcnQpCisgICAgICAgIHAuc3R5bGVPcHRpb24u
c2xpZGVyLm9yaWVudGF0aW9uID0gUXQ6OlZlcnRpY2FsOworCisgICAgaWYgKGlzUHJlc3NlZChv
KSkKKyAgICAgICAgcC5zdHlsZU9wdGlvbi5zdGF0ZSB8PSBRU3R5bGVGYWNhZGU6OlN0YXRlX1N1
bmtlbjsKKworICAgIC8vIHNvbWUgc3R5bGVzIG5lZWQgdGhpcyB0byBzaG93IGEgaGlnaGxpZ2h0
IG9uIG9uZSBzaWRlIG9mIHRoZSBncm9vdmUKKyAgICBIVE1MSW5wdXRFbGVtZW50KiBzbGlkZXIg
PSBvLT5ub2RlKCktPnRvSW5wdXRFbGVtZW50KCk7CisgICAgaWYgKHNsaWRlcikgeworICAgICAg
ICBwLnN0eWxlT3B0aW9uLnNsaWRlci51cHNpZGVEb3duID0gKHAuYXBwZWFyYW5jZSA9PSBTbGlk
ZXJIb3Jpem9udGFsUGFydCkgJiYgIW8tPnN0eWxlKCktPmlzTGVmdFRvUmlnaHREaXJlY3Rpb24o
KTsKKyAgICAgICAgLy8gVXNlIHRoZSB3aWR0aCBhcyBhIG11bHRpcGxpZXIgaW4gY2FzZSB0aGUg
c2xpZGVyIHZhbHVlcyBhcmUgPD0gMQorICAgICAgICBjb25zdCBpbnQgd2lkdGggPSByLndpZHRo
KCkgPiAwID8gci53aWR0aCgpIDogMTAwOworICAgICAgICBwLnN0eWxlT3B0aW9uLnNsaWRlci5t
YXhpbXVtID0gc2xpZGVyLT5tYXhpbXVtKCkgKiB3aWR0aDsKKyAgICAgICAgcC5zdHlsZU9wdGlv
bi5zbGlkZXIubWluaW11bSA9IHNsaWRlci0+bWluaW11bSgpICogd2lkdGg7CisgICAgICAgIGlm
ICghcC5zdHlsZU9wdGlvbi5zbGlkZXIudXBzaWRlRG93bikKKyAgICAgICAgICAgIHAuc3R5bGVP
cHRpb24uc2xpZGVyLnBvc2l0aW9uID0gc2xpZGVyLT52YWx1ZUFzTnVtYmVyKCkgKiB3aWR0aDsK
KyAgICAgICAgZWxzZQorICAgICAgICAgICAgcC5zdHlsZU9wdGlvbi5zbGlkZXIucG9zaXRpb24g
PSBwLnN0eWxlT3B0aW9uLnNsaWRlci5taW5pbXVtICsgcC5zdHlsZU9wdGlvbi5zbGlkZXIubWF4
aW11bSAtIHNsaWRlci0+dmFsdWVBc051bWJlcigpICogd2lkdGg7CisgICAgfQorCisgICAgcC5w
YWludFNsaWRlclRyYWNrKCk7CisKKyAgICBwLnBhaW50ZXItPnRyYW5zbGF0ZSgtdG9wTGVmdCk7
CisgICAgcmV0dXJuIGZhbHNlOworfQorCit2b2lkIFJlbmRlclRoZW1lUVN0eWxlOjphZGp1c3RT
bGlkZXJUcmFja1N0eWxlKFN0eWxlUmVzb2x2ZXIqLCBSZW5kZXJTdHlsZSogc3R5bGUsIEVsZW1l
bnQqKSBjb25zdAoreworICAgIHN0eWxlLT5zZXRCb3hTaGFkb3cobnVsbHB0cik7Cit9CisKK2Jv
b2wgUmVuZGVyVGhlbWVRU3R5bGU6OnBhaW50U2xpZGVyVGh1bWIoUmVuZGVyT2JqZWN0KiBvLCBj
b25zdCBQYWludEluZm8mIHBpLCBjb25zdCBJbnRSZWN0JiByKQoreworICAgIFN0eWxlUGFpbnRl
clFTdHlsZSBwKHRoaXMsIHBpLCBvKTsKKyAgICBpZiAoIXAuaXNWYWxpZCgpKQorICAgICAgICBy
ZXR1cm4gdHJ1ZTsKKworICAgIGNvbnN0IFFQb2ludCB0b3BMZWZ0ID0gci5sb2NhdGlvbigpOwor
ICAgIHAucGFpbnRlci0+dHJhbnNsYXRlKHRvcExlZnQpOworCisgICAgcC5zdHlsZU9wdGlvbi5y
ZWN0ID0gcjsKKyAgICBwLnN0eWxlT3B0aW9uLnJlY3QubW92ZVRvKFFQb2ludCgwLCAwKSk7Cisg
ICAgcC5zdHlsZU9wdGlvbi5zbGlkZXIub3JpZW50YXRpb24gPSBRdDo6SG9yaXpvbnRhbDsKKyAg
ICBpZiAocC5hcHBlYXJhbmNlID09IFNsaWRlclRodW1iVmVydGljYWxQYXJ0KQorICAgICAgICBw
LnN0eWxlT3B0aW9uLnNsaWRlci5vcmllbnRhdGlvbiA9IFF0OjpWZXJ0aWNhbDsKKyAgICBpZiAo
aXNQcmVzc2VkKG8pKQorICAgICAgICBwLnN0eWxlT3B0aW9uLnN0YXRlIHw9IFFTdHlsZUZhY2Fk
ZTo6U3RhdGVfU3Vua2VuOworCisgICAgcC5wYWludFNsaWRlclRodW1iKCk7CisKKyAgICBwLnBh
aW50ZXItPnRyYW5zbGF0ZSgtdG9wTGVmdCk7CisgICAgcmV0dXJuIGZhbHNlOworfQorCit2b2lk
IFJlbmRlclRoZW1lUVN0eWxlOjphZGp1c3RTbGlkZXJUaHVtYlN0eWxlKFN0eWxlUmVzb2x2ZXIq
IHN0eWxlUmVzb2x2ZXIsIFJlbmRlclN0eWxlKiBzdHlsZSwgRWxlbWVudCogZWxlbWVudCkgY29u
c3QKK3sKKyAgICBSZW5kZXJUaGVtZTo6YWRqdXN0U2xpZGVyVGh1bWJTdHlsZShzdHlsZVJlc29s
dmVyLCBzdHlsZSwgZWxlbWVudCk7CisgICAgc3R5bGUtPnNldEJveFNoYWRvdyhudWxscHRyKTsK
K30KKworYm9vbCBSZW5kZXJUaGVtZVFTdHlsZTo6cGFpbnRTZWFyY2hGaWVsZChSZW5kZXJPYmpl
Y3QqIG8sIGNvbnN0IFBhaW50SW5mbyYgcGksIGNvbnN0IEludFJlY3QmIHIpCit7CisgICAgcmV0
dXJuIHBhaW50VGV4dEZpZWxkKG8sIHBpLCByKTsKK30KKwordm9pZCBSZW5kZXJUaGVtZVFTdHls
ZTo6YWRqdXN0U2VhcmNoRmllbGREZWNvcmF0aW9uU3R5bGUoU3R5bGVSZXNvbHZlciogc3R5bGVS
ZXNvbHZlciwgUmVuZGVyU3R5bGUqIHN0eWxlLCBFbGVtZW50KiBlKSBjb25zdAoreworICAgIG5v
dEltcGxlbWVudGVkKCk7CisgICAgUmVuZGVyVGhlbWU6OmFkanVzdFNlYXJjaEZpZWxkRGVjb3Jh
dGlvblN0eWxlKHN0eWxlUmVzb2x2ZXIsIHN0eWxlLCBlKTsKK30KKworYm9vbCBSZW5kZXJUaGVt
ZVFTdHlsZTo6cGFpbnRTZWFyY2hGaWVsZERlY29yYXRpb24oUmVuZGVyT2JqZWN0KiBvLCBjb25z
dCBQYWludEluZm8mIHBpLCBjb25zdCBJbnRSZWN0JiByKQoreworICAgIG5vdEltcGxlbWVudGVk
KCk7CisgICAgcmV0dXJuIFJlbmRlclRoZW1lOjpwYWludFNlYXJjaEZpZWxkRGVjb3JhdGlvbihv
LCBwaSwgcik7Cit9CisKK3ZvaWQgUmVuZGVyVGhlbWVRU3R5bGU6OmFkanVzdFNlYXJjaEZpZWxk
UmVzdWx0c0RlY29yYXRpb25TdHlsZShTdHlsZVJlc29sdmVyKiBzdHlsZVJlc29sdmVyLCBSZW5k
ZXJTdHlsZSogc3R5bGUsIEVsZW1lbnQqIGUpIGNvbnN0Cit7CisgICAgbm90SW1wbGVtZW50ZWQo
KTsKKyAgICBSZW5kZXJUaGVtZTo6YWRqdXN0U2VhcmNoRmllbGRSZXN1bHRzRGVjb3JhdGlvblN0
eWxlKHN0eWxlUmVzb2x2ZXIsIHN0eWxlLCBlKTsKK30KKworYm9vbCBSZW5kZXJUaGVtZVFTdHls
ZTo6cGFpbnRTZWFyY2hGaWVsZFJlc3VsdHNEZWNvcmF0aW9uKFJlbmRlck9iamVjdCogbywgY29u
c3QgUGFpbnRJbmZvJiBwaSwgY29uc3QgSW50UmVjdCYgcikKK3sKKyAgICBub3RJbXBsZW1lbnRl
ZCgpOworICAgIHJldHVybiBSZW5kZXJUaGVtZTo6cGFpbnRTZWFyY2hGaWVsZFJlc3VsdHNEZWNv
cmF0aW9uKG8sIHBpLCByKTsKK30KKworI2lmbmRlZiBRVF9OT19TUElOQk9YCisKK2Jvb2wgUmVu
ZGVyVGhlbWVRU3R5bGU6OnBhaW50SW5uZXJTcGluQnV0dG9uKFJlbmRlck9iamVjdCogbywgY29u
c3QgUGFpbnRJbmZvJiBwYWludEluZm8sIGNvbnN0IEludFJlY3QmIHJlY3QpCit7CisgICAgU3R5
bGVQYWludGVyUVN0eWxlIHAodGhpcywgcGFpbnRJbmZvLCBvKTsKKyAgICBpZiAoIXAuaXNWYWxp
ZCgpKQorICAgICAgICByZXR1cm4gdHJ1ZTsKKworICAgIHAuc3R5bGVPcHRpb24ucmVjdCA9IHJl
Y3Q7CisgICAgcC5wYWludElubmVyU3BpbkJ1dHRvbihpc1NwaW5VcEJ1dHRvblBhcnRQcmVzc2Vk
KG8pKTsKKyAgICByZXR1cm4gZmFsc2U7Cit9CisjZW5kaWYKKworQ29udHJvbFBhcnQgUmVuZGVy
VGhlbWVRU3R5bGU6OmluaXRpYWxpemVDb21tb25RU3R5bGVPcHRpb25zKFFTdHlsZUZhY2FkZU9w
dGlvbiAmb3B0aW9uLCBSZW5kZXJPYmplY3QqIG8pIGNvbnN0Cit7CisgICAgLy8gRGVmYXVsdCBi
aXRzOiBubyBmb2N1cywgbm8gbW91c2Ugb3ZlcgorICAgIG9wdGlvbi5zdGF0ZSAmPSB+KFFTdHls
ZUZhY2FkZTo6U3RhdGVfSGFzRm9jdXMgfCBRU3R5bGVGYWNhZGU6OlN0YXRlX01vdXNlT3Zlcik7
CisKKyAgICBpZiAoaXNSZWFkT25seUNvbnRyb2wobykpCisgICAgICAgIC8vIFJlYWRvbmx5IGlz
IHN1cHBvcnRlZCBvbiB0ZXh0ZmllbGRzLgorICAgICAgICBvcHRpb24uc3RhdGUgfD0gUVN0eWxl
RmFjYWRlOjpTdGF0ZV9SZWFkT25seTsKKworICAgIG9wdGlvbi5kaXJlY3Rpb24gPSBRdDo6TGVm
dFRvUmlnaHQ7CisKKyAgICBpZiAoaXNIb3ZlcmVkKG8pKQorICAgICAgICBvcHRpb24uc3RhdGUg
fD0gUVN0eWxlRmFjYWRlOjpTdGF0ZV9Nb3VzZU92ZXI7CisKKyAgICBzZXRQYWxldHRlRnJvbVBh
Z2VDbGllbnRJZkV4aXN0cyhvcHRpb24ucGFsZXR0ZSk7CisKKyAgICBpZiAoIWlzRW5hYmxlZChv
KSkgeworICAgICAgICBvcHRpb24ucGFsZXR0ZS5zZXRDdXJyZW50Q29sb3JHcm91cChRUGFsZXR0
ZTo6RGlzYWJsZWQpOworICAgICAgICBvcHRpb24uc3RhdGUgJj0gflFTdHlsZUZhY2FkZTo6U3Rh
dGVfRW5hYmxlZDsKKyAgICB9CisKKyAgICBSZW5kZXJTdHlsZSogc3R5bGUgPSBvLT5zdHlsZSgp
OworICAgIGlmICghc3R5bGUpCisgICAgICAgIHJldHVybiBOb0NvbnRyb2xQYXJ0OworCisgICAg
Q29udHJvbFBhcnQgcmVzdWx0ID0gc3R5bGUtPmFwcGVhcmFuY2UoKTsKKyAgICBpZiAoc3VwcG9y
dHNGb2N1cyhyZXN1bHQpICYmIGlzRm9jdXNlZChvKSkgeworICAgICAgICBvcHRpb24uc3RhdGUg
fD0gUVN0eWxlRmFjYWRlOjpTdGF0ZV9IYXNGb2N1czsKKyAgICAgICAgb3B0aW9uLnN0YXRlIHw9
IFFTdHlsZUZhY2FkZTo6U3RhdGVfS2V5Ym9hcmRGb2N1c0NoYW5nZTsKKyAgICB9CisKKyAgICBp
ZiAoc3R5bGUtPmRpcmVjdGlvbigpID09IFdlYkNvcmU6OlJUTCkKKyAgICAgICAgb3B0aW9uLmRp
cmVjdGlvbiA9IFF0OjpSaWdodFRvTGVmdDsKKworICAgIHN3aXRjaCAocmVzdWx0KSB7CisgICAg
Y2FzZSBQdXNoQnV0dG9uUGFydDoKKyAgICBjYXNlIFNxdWFyZUJ1dHRvblBhcnQ6CisgICAgY2Fz
ZSBCdXR0b25QYXJ0OgorICAgIGNhc2UgQnV0dG9uQmV2ZWxQYXJ0OgorICAgIGNhc2UgTGlzdEl0
ZW1QYXJ0OgorICAgIGNhc2UgTWVudWxpc3RCdXR0b25QYXJ0OgorICAgIGNhc2UgSW5uZXJTcGlu
QnV0dG9uUGFydDoKKyAgICBjYXNlIFNlYXJjaEZpZWxkUmVzdWx0c0J1dHRvblBhcnQ6CisgICAg
Y2FzZSBTZWFyY2hGaWVsZENhbmNlbEJ1dHRvblBhcnQ6IHsKKyAgICAgICAgaWYgKGlzUHJlc3Nl
ZChvKSkKKyAgICAgICAgICAgIG9wdGlvbi5zdGF0ZSB8PSBRU3R5bGVGYWNhZGU6OlN0YXRlX1N1
bmtlbjsKKyAgICAgICAgZWxzZSBpZiAocmVzdWx0ID09IFB1c2hCdXR0b25QYXJ0IHx8IHJlc3Vs
dCA9PSBCdXR0b25QYXJ0KQorICAgICAgICAgICAgb3B0aW9uLnN0YXRlIHw9IFFTdHlsZUZhY2Fk
ZTo6U3RhdGVfUmFpc2VkOworICAgICAgICBicmVhazsKKyAgICB9CisgICAgY2FzZSBSYWRpb1Bh
cnQ6CisgICAgY2FzZSBDaGVja2JveFBhcnQ6CisgICAgICAgIG9wdGlvbi5zdGF0ZSB8PSAoaXND
aGVja2VkKG8pID8gUVN0eWxlRmFjYWRlOjpTdGF0ZV9PbiA6IFFTdHlsZUZhY2FkZTo6U3RhdGVf
T2ZmKTsKKyAgICB9CisKKyAgICByZXR1cm4gcmVzdWx0OworfQorCit2b2lkIFJlbmRlclRoZW1l
UVN0eWxlOjphZGp1c3RTbGlkZXJUaHVtYlNpemUoUmVuZGVyU3R5bGUqIHN0eWxlLCBFbGVtZW50
KiBlbGVtZW50KSBjb25zdAoreworICAgIGNvbnN0IENvbnRyb2xQYXJ0IHBhcnQgPSBzdHlsZS0+
YXBwZWFyYW5jZSgpOworICAgIGlmIChwYXJ0ID09IFNsaWRlclRodW1iSG9yaXpvbnRhbFBhcnQg
fHwgcGFydCA9PSBTbGlkZXJUaHVtYlZlcnRpY2FsUGFydCkgeworICAgICAgICBRdDo6T3JpZW50
YXRpb24gb3JpZW50YXRpb24gPSBRdDo6SG9yaXpvbnRhbDsKKyAgICAgICAgaWYgKHBhcnQgPT0g
U2xpZGVyVGh1bWJWZXJ0aWNhbFBhcnQpCisgICAgICAgICAgICBvcmllbnRhdGlvbiA9IFF0OjpW
ZXJ0aWNhbDsKKworICAgICAgICBpbnQgbGVuZ3RoID0gbV9xU3R5bGUtPnNsaWRlckxlbmd0aChv
cmllbnRhdGlvbik7CisgICAgICAgIGludCB0aGlja25lc3MgPSBtX3FTdHlsZS0+c2xpZGVyVGhp
Y2tuZXNzKG9yaWVudGF0aW9uKTsKKyAgICAgICAgaWYgKG9yaWVudGF0aW9uID09IFF0OjpWZXJ0
aWNhbCkgeworICAgICAgICAgICAgc3R5bGUtPnNldFdpZHRoKExlbmd0aCh0aGlja25lc3MsIEZp
eGVkKSk7CisgICAgICAgICAgICBzdHlsZS0+c2V0SGVpZ2h0KExlbmd0aChsZW5ndGgsIEZpeGVk
KSk7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBzdHlsZS0+c2V0V2lkdGgoTGVuZ3Ro
KGxlbmd0aCwgRml4ZWQpKTsKKyAgICAgICAgICAgIHN0eWxlLT5zZXRIZWlnaHQoTGVuZ3RoKHRo
aWNrbmVzcywgRml4ZWQpKTsKKyAgICAgICAgfQorICAgIH0gZWxzZQorICAgICAgICBSZW5kZXJU
aGVtZVF0OjphZGp1c3RTbGlkZXJUaHVtYlNpemUoc3R5bGUsIGVsZW1lbnQpOworfQorCit9CisK
Ky8vIHZpbTogdHM9NCBzdz00IGV0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9xdC9SZW5kZXJUaGVtZVFTdHlsZS5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vcXQvUmVu
ZGVyVGhlbWVRU3R5bGUuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi4wOGMxOGI5NzEwODY4ZTNmYTFjMWY2Mjg4MTYz
OTg4ZWMwYmQzNmNjCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
cXQvUmVuZGVyVGhlbWVRU3R5bGUuaApAQCAtMCwwICsxLDE1OCBAQAorLyoKKyAqIFRoaXMgZmls
ZSBpcyBwYXJ0IG9mIHRoZSB0aGVtZSBpbXBsZW1lbnRhdGlvbiBmb3IgZm9ybSBjb250cm9scyBp
biBXZWJDb3JlLgorICoKKyAqIENvcHlyaWdodCAoQykgMjAxMS0yMDEyIE5va2lhIENvcnBvcmF0
aW9uIGFuZC9vciBpdHMgc3Vic2lkaWFyeSgtaWVzKS4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMg
ZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkg
aXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworICog
TGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0
aGVyCisgKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55
IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRo
ZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFO
VFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklM
SVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAq
IExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAq
IFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVy
YWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZp
bGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBG
b3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAorICogQm9z
dG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisgKgorICovCisjaWZuZGVmIFJlbmRlclRoZW1lUVN0
eWxlX2gKKyNkZWZpbmUgUmVuZGVyVGhlbWVRU3R5bGVfaAorCisjaW5jbHVkZSAiUVN0eWxlRmFj
YWRlLmgiCisjaW5jbHVkZSAiUmVuZGVyVGhlbWVRdC5oIgorCituYW1lc3BhY2UgV2ViQ29yZSB7
CisKK2NsYXNzIFNjcm9sbGJhclRoZW1lUVN0eWxlOworCitjbGFzcyBQYWdlOworY2xhc3MgUVN0
eWxlRmFjYWRlOworc3RydWN0IFFTdHlsZUZhY2FkZU9wdGlvbjsKKwordHlwZWRlZiBRU3R5bGVG
YWNhZGUqICgqUXRTdHlsZUZhY3RvcnlGdW5jdGlvbikoUGFnZSopOworCitjbGFzcyBSZW5kZXJU
aGVtZVFTdHlsZSA6IHB1YmxpYyBSZW5kZXJUaGVtZVF0IHsKK3ByaXZhdGU6CisgICAgZnJpZW5k
IGNsYXNzIFN0eWxlUGFpbnRlclFTdHlsZTsKKworICAgIFJlbmRlclRoZW1lUVN0eWxlKFBhZ2Uq
KTsKKyAgICB2aXJ0dWFsIH5SZW5kZXJUaGVtZVFTdHlsZSgpOworCitwdWJsaWM6CisgICAgc3Rh
dGljIFBhc3NSZWZQdHI8UmVuZGVyVGhlbWU+IGNyZWF0ZShQYWdlKik7CisKKyAgICBzdGF0aWMg
dm9pZCBzZXRTdHlsZUZhY3RvcnlGdW5jdGlvbihRdFN0eWxlRmFjdG9yeUZ1bmN0aW9uKTsKKyAg
ICBzdGF0aWMgUXRTdHlsZUZhY3RvcnlGdW5jdGlvbiBzdHlsZUZhY3RvcnkoKTsKKworICAgIHZp
cnR1YWwgdm9pZCBhZGp1c3RTbGlkZXJUaHVtYlNpemUoUmVuZGVyU3R5bGUqLCBFbGVtZW50Kikg
Y29uc3Q7CisKKyAgICBRU3R5bGVGYWNhZGUqIHFTdHlsZSgpIHsgcmV0dXJuIG1fcVN0eWxlLmdl
dCgpOyB9CisKK3Byb3RlY3RlZDoKKyAgICB2aXJ0dWFsIHZvaWQgYWRqdXN0QnV0dG9uU3R5bGUo
U3R5bGVSZXNvbHZlciosIFJlbmRlclN0eWxlKiwgRWxlbWVudCopIGNvbnN0OworICAgIHZpcnR1
YWwgYm9vbCBwYWludEJ1dHRvbihSZW5kZXJPYmplY3QqLCBjb25zdCBQYWludEluZm8mLCBjb25z
dCBJbnRSZWN0Jik7CisKKyAgICB2aXJ0dWFsIGJvb2wgcGFpbnRUZXh0RmllbGQoUmVuZGVyT2Jq
ZWN0KiwgY29uc3QgUGFpbnRJbmZvJiwgY29uc3QgSW50UmVjdCYpOworCisgICAgdmlydHVhbCBi
b29sIHBhaW50VGV4dEFyZWEoUmVuZGVyT2JqZWN0KiwgY29uc3QgUGFpbnRJbmZvJiwgY29uc3Qg
SW50UmVjdCYpOworICAgIHZpcnR1YWwgdm9pZCBhZGp1c3RUZXh0QXJlYVN0eWxlKFN0eWxlUmVz
b2x2ZXIqLCBSZW5kZXJTdHlsZSosIEVsZW1lbnQqKSBjb25zdDsKKworICAgIHZpcnR1YWwgYm9v
bCBwYWludE1lbnVMaXN0KFJlbmRlck9iamVjdCosIGNvbnN0IFBhaW50SW5mbyYsIGNvbnN0IElu
dFJlY3QmKTsKKworICAgIHZpcnR1YWwgYm9vbCBwYWludE1lbnVMaXN0QnV0dG9uKFJlbmRlck9i
amVjdCosIGNvbnN0IFBhaW50SW5mbyYsIGNvbnN0IEludFJlY3QmKTsKKyAgICB2aXJ0dWFsIHZv
aWQgYWRqdXN0TWVudUxpc3RCdXR0b25TdHlsZShTdHlsZVJlc29sdmVyKiwgUmVuZGVyU3R5bGUq
LCBFbGVtZW50KikgY29uc3Q7CisKKyNpZiBFTkFCTEUoUFJPR1JFU1NfRUxFTUVOVCkKKyAgICAv
LyBSZXR1cm5zIHRoZSBkdXJhdGlvbiBvZiB0aGUgYW5pbWF0aW9uIGZvciB0aGUgcHJvZ3Jlc3Mg
YmFyLgorICAgIHZpcnR1YWwgZG91YmxlIGFuaW1hdGlvbkR1cmF0aW9uRm9yUHJvZ3Jlc3NCYXIo
UmVuZGVyUHJvZ3Jlc3MqKSBjb25zdDsKKyAgICB2aXJ0dWFsIGJvb2wgcGFpbnRQcm9ncmVzc0Jh
cihSZW5kZXJPYmplY3QqLCBjb25zdCBQYWludEluZm8mLCBjb25zdCBJbnRSZWN0Jik7CisjZW5k
aWYKKworICAgIHZpcnR1YWwgYm9vbCBwYWludFNsaWRlclRyYWNrKFJlbmRlck9iamVjdCosIGNv
bnN0IFBhaW50SW5mbyYsIGNvbnN0IEludFJlY3QmKTsKKyAgICB2aXJ0dWFsIHZvaWQgYWRqdXN0
U2xpZGVyVHJhY2tTdHlsZShTdHlsZVJlc29sdmVyKiwgUmVuZGVyU3R5bGUqLCBFbGVtZW50Kikg
Y29uc3Q7CisKKyAgICB2aXJ0dWFsIGJvb2wgcGFpbnRTbGlkZXJUaHVtYihSZW5kZXJPYmplY3Qq
LCBjb25zdCBQYWludEluZm8mLCBjb25zdCBJbnRSZWN0Jik7CisgICAgdmlydHVhbCB2b2lkIGFk
anVzdFNsaWRlclRodW1iU3R5bGUoU3R5bGVSZXNvbHZlciosIFJlbmRlclN0eWxlKiwgRWxlbWVu
dCopIGNvbnN0OworCisgICAgdmlydHVhbCBib29sIHBhaW50U2VhcmNoRmllbGQoUmVuZGVyT2Jq
ZWN0KiwgY29uc3QgUGFpbnRJbmZvJiwgY29uc3QgSW50UmVjdCYpOworCisgICAgdmlydHVhbCB2
b2lkIGFkanVzdFNlYXJjaEZpZWxkRGVjb3JhdGlvblN0eWxlKFN0eWxlUmVzb2x2ZXIqLCBSZW5k
ZXJTdHlsZSosIEVsZW1lbnQqKSBjb25zdDsKKyAgICB2aXJ0dWFsIGJvb2wgcGFpbnRTZWFyY2hG
aWVsZERlY29yYXRpb24oUmVuZGVyT2JqZWN0KiwgY29uc3QgUGFpbnRJbmZvJiwgY29uc3QgSW50
UmVjdCYpOworCisgICAgdmlydHVhbCB2b2lkIGFkanVzdFNlYXJjaEZpZWxkUmVzdWx0c0RlY29y
YXRpb25TdHlsZShTdHlsZVJlc29sdmVyKiwgUmVuZGVyU3R5bGUqLCBFbGVtZW50KikgY29uc3Q7
CisgICAgdmlydHVhbCBib29sIHBhaW50U2VhcmNoRmllbGRSZXN1bHRzRGVjb3JhdGlvbihSZW5k
ZXJPYmplY3QqLCBjb25zdCBQYWludEluZm8mLCBjb25zdCBJbnRSZWN0Jik7CisKKyNpZm5kZWYg
UVRfTk9fU1BJTkJPWAorICAgIHZpcnR1YWwgYm9vbCBwYWludElubmVyU3BpbkJ1dHRvbihSZW5k
ZXJPYmplY3QqLCBjb25zdCBQYWludEluZm8mLCBjb25zdCBJbnRSZWN0Jik7CisjZW5kaWYKKwor
cHJvdGVjdGVkOgorICAgIHZpcnR1YWwgdm9pZCBjb21wdXRlU2l6ZUJhc2VkT25TdHlsZShSZW5k
ZXJTdHlsZSopIGNvbnN0OworCisgICAgdmlydHVhbCBRU2hhcmVkUG9pbnRlcjxTdHlsZVBhaW50
ZXI+IGdldFN0eWxlUGFpbnRlcihjb25zdCBQYWludEluZm8mKTsKKworICAgIHZpcnR1YWwgUVJl
Y3QgaW5mbGF0ZUJ1dHRvblJlY3QoY29uc3QgUVJlY3QmIG9yaWdpbmFsUmVjdCkgY29uc3Q7CisK
KyAgICB2aXJ0dWFsIHZvaWQgc2V0UG9wdXBQYWRkaW5nKFJlbmRlclN0eWxlKikgY29uc3Q7CisK
KyAgICB2aXJ0dWFsIFFQYWxldHRlIGNvbG9yUGFsZXR0ZSgpIGNvbnN0OworCitwcml2YXRlOgor
ICAgIENvbnRyb2xQYXJ0IGluaXRpYWxpemVDb21tb25RU3R5bGVPcHRpb25zKFFTdHlsZUZhY2Fk
ZU9wdGlvbiYsIFJlbmRlck9iamVjdCopIGNvbnN0OworCisgICAgdm9pZCBzZXRCdXR0b25QYWRk
aW5nKFJlbmRlclN0eWxlKikgY29uc3Q7CisKKyAgICB2b2lkIHNldFBhbGV0dGVGcm9tUGFnZUNs
aWVudElmRXhpc3RzKFFQYWxldHRlJikgY29uc3Q7CisKKyNpZmRlZiBRX09TX01BQworICAgIGlu
dCBtX2J1dHRvbkZvbnRQaXhlbFNpemU7CisjZW5kaWYKKworICAgIE93blB0cjxRU3R5bGVGYWNh
ZGU+IG1fcVN0eWxlOworfTsKKworY2xhc3MgU3R5bGVQYWludGVyUVN0eWxlIDogcHVibGljIFN0
eWxlUGFpbnRlciB7CitwdWJsaWM6CisgICAgZXhwbGljaXQgU3R5bGVQYWludGVyUVN0eWxlKFJl
bmRlclRoZW1lUVN0eWxlKiwgY29uc3QgUGFpbnRJbmZvJiwgUmVuZGVyT2JqZWN0Kik7CisgICAg
ZXhwbGljaXQgU3R5bGVQYWludGVyUVN0eWxlKFNjcm9sbGJhclRoZW1lUVN0eWxlKiwgR3JhcGhp
Y3NDb250ZXh0Kik7CisKKyAgICBib29sIGlzVmFsaWQoKSBjb25zdCB7IHJldHVybiBxU3R5bGUg
JiYgcVN0eWxlLT5pc1ZhbGlkKCkgJiYgU3R5bGVQYWludGVyOjppc1ZhbGlkKCk7IH0KKworICAg
IFFTdHlsZUZhY2FkZSogcVN0eWxlOworICAgIFFTdHlsZUZhY2FkZU9wdGlvbiBzdHlsZU9wdGlv
bjsKKyAgICBDb250cm9sUGFydCBhcHBlYXJhbmNlOworCisgICAgdm9pZCBwYWludEJ1dHRvbihR
U3R5bGVGYWNhZGU6OkJ1dHRvblR5cGUgdHlwZSkKKyAgICB7IHFTdHlsZS0+cGFpbnRCdXR0b24o
cGFpbnRlciwgdHlwZSwgc3R5bGVPcHRpb24pOyB9CisgICAgdm9pZCBwYWludFRleHRGaWVsZCgp
CisgICAgeyBxU3R5bGUtPnBhaW50VGV4dEZpZWxkKHBhaW50ZXIsIHN0eWxlT3B0aW9uKTsgfQor
ICAgIHZvaWQgcGFpbnRDb21ib0JveCgpCisgICAgeyBxU3R5bGUtPnBhaW50Q29tYm9Cb3gocGFp
bnRlciwgc3R5bGVPcHRpb24pOyB9CisgICAgdm9pZCBwYWludENvbWJvQm94QXJyb3coKQorICAg
IHsgcVN0eWxlLT5wYWludENvbWJvQm94QXJyb3cocGFpbnRlciwgc3R5bGVPcHRpb24pOyB9Cisg
ICAgdm9pZCBwYWludFNsaWRlclRyYWNrKCkKKyAgICB7IHFTdHlsZS0+cGFpbnRTbGlkZXJUcmFj
ayhwYWludGVyLCBzdHlsZU9wdGlvbik7IH0KKyAgICB2b2lkIHBhaW50U2xpZGVyVGh1bWIoKQor
ICAgIHsgcVN0eWxlLT5wYWludFNsaWRlclRodW1iKHBhaW50ZXIsIHN0eWxlT3B0aW9uKTsgfQor
ICAgIHZvaWQgcGFpbnRJbm5lclNwaW5CdXR0b24oYm9vbCBzcGluQm94VXApCisgICAgeyBxU3R5
bGUtPnBhaW50SW5uZXJTcGluQnV0dG9uKHBhaW50ZXIsIHN0eWxlT3B0aW9uLCBzcGluQm94VXAp
OyB9CisgICAgdm9pZCBwYWludFByb2dyZXNzQmFyKGRvdWJsZSBwcm9ncmVzcywgZG91YmxlIGFu
aW1hdGlvblByb2dyZXNzKQorICAgIHsgcVN0eWxlLT5wYWludFByb2dyZXNzQmFyKHBhaW50ZXIs
IHN0eWxlT3B0aW9uLCBwcm9ncmVzcywgYW5pbWF0aW9uUHJvZ3Jlc3MpOyB9CisgICAgdm9pZCBw
YWludFNjcm9sbENvcm5lcihjb25zdCBRUmVjdCYgcmVjdCkKKyAgICB7IHFTdHlsZS0+cGFpbnRT
Y3JvbGxDb3JuZXIocGFpbnRlciwgcmVjdCk7IH0KKyAgICB2b2lkIHBhaW50U2Nyb2xsQmFyKCkK
KyAgICB7IHFTdHlsZS0+cGFpbnRTY3JvbGxCYXIocGFpbnRlciwgc3R5bGVPcHRpb24pOyB9CisK
K3ByaXZhdGU6CisgICAgdm9pZCBpbml0KEdyYXBoaWNzQ29udGV4dCopOworCisgICAgUV9ESVNB
QkxFX0NPUFkoU3R5bGVQYWludGVyUVN0eWxlKQorfTsKKworfQorCisjZW5kaWYgLy8gUmVuZGVy
VGhlbWVRU3R5bGVfaApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vcXQvU2Ny
b2xsYmFyVGhlbWVRU3R5bGUuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vcXQvU2Nyb2xs
YmFyVGhlbWVRU3R5bGUuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmFjMGRjMzg0NDk2MTJjOTUxMTczYzQ0NjU3
NjY2MzllOWNiOTk5NmUKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9xdC9TY3JvbGxiYXJUaGVtZVFTdHlsZS5jcHAKQEAgLTAsMCArMSwyMjEgQEAKKy8qCisgKiBD
b3B5cmlnaHQgKEMpIDIwMDcsIDIwMDggQXBwbGUgSW5jLiBBbGwgUmlnaHRzIFJlc2VydmVkLgor
ICogQ29weXJpZ2h0IChDKSAyMDA3IFN0YWlrb3MgQ29tcHV0aW5nIFNlcnZpY2VzIEluYy4gPGlu
Zm9Ac3RhaWtvcy5uZXQ+CisgKiBDb3B5cmlnaHQgKEMpIDIwMDggTm9raWEgQ29ycG9yYXRpb24g
YW5kL29yIGl0cyBzdWJzaWRpYXJ5KC1pZXMpCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVz
ZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmlj
YXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlv
bnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVz
dCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmli
dXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVy
aWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FS
RSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNT
IE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRI
RQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBG
T1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQg
U0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJ
UkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENP
TlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQ
Uk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwg
REFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBD
QVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05U
UkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNF
IE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBU
SElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0gg
REFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJTY3JvbGxiYXJU
aGVtZVFTdHlsZS5oIgorCisjaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0LmgiCisjaW5jbHVkZSAi
UGxhdGZvcm1Nb3VzZUV2ZW50LmgiCisjaW5jbHVkZSAiUmVuZGVyVGhlbWVRU3R5bGUuaCIKKyNp
bmNsdWRlICJTY3JvbGxWaWV3LmgiCisjaW5jbHVkZSAiU2Nyb2xsYmFyLmgiCisKK25hbWVzcGFj
ZSBXZWJDb3JlIHsKKworU2Nyb2xsYmFyVGhlbWVRU3R5bGU6OlNjcm9sbGJhclRoZW1lUVN0eWxl
KCkKK3sKKyAgICBtX3FTdHlsZSA9IGFkb3B0UHRyKFJlbmRlclRoZW1lUVN0eWxlOjpzdHlsZUZh
Y3RvcnkoKSgvKnBhZ2UqLyAwKSk7Cit9CisKK1Njcm9sbGJhclRoZW1lUVN0eWxlOjp+U2Nyb2xs
YmFyVGhlbWVRU3R5bGUoKQoreworfQorCitzdGF0aWMgUVN0eWxlRmFjYWRlOjpTdWJDb250cm9s
IHNjUGFydChjb25zdCBTY3JvbGxiYXJQYXJ0JiBwYXJ0KQoreworICAgIHN3aXRjaCAocGFydCkg
eworICAgIGNhc2UgTm9QYXJ0OgorICAgICAgICByZXR1cm4gUVN0eWxlRmFjYWRlOjpTQ19Ob25l
OworICAgIGNhc2UgQmFja0J1dHRvblN0YXJ0UGFydDoKKyAgICBjYXNlIEJhY2tCdXR0b25FbmRQ
YXJ0OgorICAgICAgICByZXR1cm4gUVN0eWxlRmFjYWRlOjpTQ19TY3JvbGxCYXJTdWJMaW5lOwor
ICAgIGNhc2UgQmFja1RyYWNrUGFydDoKKyAgICAgICAgcmV0dXJuIFFTdHlsZUZhY2FkZTo6U0Nf
U2Nyb2xsQmFyU3ViUGFnZTsKKyAgICBjYXNlIFRodW1iUGFydDoKKyAgICAgICAgcmV0dXJuIFFT
dHlsZUZhY2FkZTo6U0NfU2Nyb2xsQmFyU2xpZGVyOworICAgIGNhc2UgRm9yd2FyZFRyYWNrUGFy
dDoKKyAgICAgICAgcmV0dXJuIFFTdHlsZUZhY2FkZTo6U0NfU2Nyb2xsQmFyQWRkUGFnZTsKKyAg
ICBjYXNlIEZvcndhcmRCdXR0b25TdGFydFBhcnQ6CisgICAgY2FzZSBGb3J3YXJkQnV0dG9uRW5k
UGFydDoKKyAgICAgICAgcmV0dXJuIFFTdHlsZUZhY2FkZTo6U0NfU2Nyb2xsQmFyQWRkTGluZTsK
KyAgICB9CisKKyAgICByZXR1cm4gUVN0eWxlRmFjYWRlOjpTQ19Ob25lOworfQorCitzdGF0aWMg
U2Nyb2xsYmFyUGFydCBzY3JvbGxiYXJQYXJ0KGNvbnN0IFFTdHlsZUZhY2FkZTo6U3ViQ29udHJv
bCYgc2MpCit7CisgICAgc3dpdGNoIChzYykgeworICAgIGNhc2UgUVN0eWxlRmFjYWRlOjpTQ19O
b25lOgorICAgICAgICByZXR1cm4gTm9QYXJ0OworICAgIGNhc2UgUVN0eWxlRmFjYWRlOjpTQ19T
Y3JvbGxCYXJTdWJMaW5lOgorICAgICAgICByZXR1cm4gQmFja0J1dHRvblN0YXJ0UGFydDsKKyAg
ICBjYXNlIFFTdHlsZUZhY2FkZTo6U0NfU2Nyb2xsQmFyU3ViUGFnZToKKyAgICAgICAgcmV0dXJu
IEJhY2tUcmFja1BhcnQ7CisgICAgY2FzZSBRU3R5bGVGYWNhZGU6OlNDX1Njcm9sbEJhclNsaWRl
cjoKKyAgICAgICAgcmV0dXJuIFRodW1iUGFydDsKKyAgICBjYXNlIFFTdHlsZUZhY2FkZTo6U0Nf
U2Nyb2xsQmFyQWRkUGFnZToKKyAgICAgICAgcmV0dXJuIEZvcndhcmRUcmFja1BhcnQ7CisgICAg
Y2FzZSBRU3R5bGVGYWNhZGU6OlNDX1Njcm9sbEJhckFkZExpbmU6CisgICAgICAgIHJldHVybiBG
b3J3YXJkQnV0dG9uU3RhcnRQYXJ0OworICAgIH0KKyAgICByZXR1cm4gTm9QYXJ0OworfQorCitz
dGF0aWMgUVN0eWxlRmFjYWRlT3B0aW9uIGluaXRTbGlkZXJTdHlsZU9wdGlvbihTY3JvbGxiYXJU
aGVtZUNsaWVudCogc2Nyb2xsYmFyLCBRT2JqZWN0KiB3aWRnZXQgPSAwKQoreworICAgIFFTdHls
ZUZhY2FkZU9wdGlvbiBvcHQ7CisgICAgaWYgKHdpZGdldCkgeworICAgICAgICBvcHQucGFsZXR0
ZSA9IHdpZGdldC0+cHJvcGVydHkoInBhbGV0dGUiKS52YWx1ZTxRUGFsZXR0ZT4oKTsKKyAgICAg
ICAgb3B0LnJlY3QgPSB3aWRnZXQtPnByb3BlcnR5KCJyZWN0IikudmFsdWU8UVJlY3Q+KCk7Cisg
ICAgICAgIG9wdC5kaXJlY3Rpb24gPSBzdGF0aWNfY2FzdDxRdDo6TGF5b3V0RGlyZWN0aW9uPih3
aWRnZXQtPnByb3BlcnR5KCJsYXlvdXREaXJlY3Rpb24iKS50b0ludCgpKTsKKyAgICB9IGVsc2UK
KyAgICAgICAgb3B0LnN0YXRlIHw9IFFTdHlsZUZhY2FkZTo6U3RhdGVfQWN0aXZlOworCisgICAg
b3B0LnN0YXRlICY9IH5RU3R5bGVGYWNhZGU6OlN0YXRlX0hhc0ZvY3VzOworCisgICAgb3B0LnJl
Y3QgPSBzY3JvbGxiYXItPmZyYW1lUmVjdCgpOworICAgIGlmIChzY3JvbGxiYXItPmVuYWJsZWQo
KSkKKyAgICAgICAgb3B0LnN0YXRlIHw9IFFTdHlsZUZhY2FkZTo6U3RhdGVfRW5hYmxlZDsKKyAg
ICBpZiAoc2Nyb2xsYmFyLT5jb250cm9sU2l6ZSgpICE9IFJlZ3VsYXJTY3JvbGxiYXIpCisgICAg
ICAgIG9wdC5zdGF0ZSB8PSBRU3R5bGVGYWNhZGU6OlN0YXRlX01pbmk7CisgICAgb3B0LnNsaWRl
ci5vcmllbnRhdGlvbiA9IChzY3JvbGxiYXItPm9yaWVudGF0aW9uKCkgPT0gVmVydGljYWxTY3Jv
bGxiYXIpID8gUXQ6OlZlcnRpY2FsIDogUXQ6Okhvcml6b250YWw7CisKKyAgICBpZiAoc2Nyb2xs
YmFyLT5vcmllbnRhdGlvbigpID09IEhvcml6b250YWxTY3JvbGxiYXIpCisgICAgICAgIG9wdC5z
dGF0ZSB8PSBRU3R5bGVGYWNhZGU6OlN0YXRlX0hvcml6b250YWw7CisgICAgZWxzZQorICAgICAg
ICBvcHQuc3RhdGUgJj0gflFTdHlsZUZhY2FkZTo6U3RhdGVfSG9yaXpvbnRhbDsKKworICAgIG9w
dC5zbGlkZXIudmFsdWUgPSBzY3JvbGxiYXItPnZhbHVlKCk7CisgICAgb3B0LnNsaWRlci5wb3Np
dGlvbiA9IG9wdC5zbGlkZXIudmFsdWU7CisgICAgb3B0LnNsaWRlci5wYWdlU3RlcCA9IHNjcm9s
bGJhci0+cGFnZVN0ZXAoKTsKKyAgICBvcHQuc2xpZGVyLnNpbmdsZVN0ZXAgPSBzY3JvbGxiYXIt
PmxpbmVTdGVwKCk7CisgICAgb3B0LnNsaWRlci5taW5pbXVtID0gMDsKKyAgICBvcHQuc2xpZGVy
Lm1heGltdW0gPSBxTWF4KDAsIHNjcm9sbGJhci0+bWF4aW11bSgpKTsKKyAgICBTY3JvbGxiYXJQ
YXJ0IHByZXNzZWRQYXJ0ID0gc2Nyb2xsYmFyLT5wcmVzc2VkUGFydCgpOworICAgIFNjcm9sbGJh
clBhcnQgaG92ZXJlZFBhcnQgPSBzY3JvbGxiYXItPmhvdmVyZWRQYXJ0KCk7CisgICAgaWYgKHBy
ZXNzZWRQYXJ0ICE9IE5vUGFydCkgeworICAgICAgICBvcHQuc2xpZGVyLmFjdGl2ZVN1YkNvbnRy
b2xzID0gc2NQYXJ0KHNjcm9sbGJhci0+cHJlc3NlZFBhcnQoKSk7CisgICAgICAgIGlmIChwcmVz
c2VkUGFydCA9PSBCYWNrQnV0dG9uU3RhcnRQYXJ0IHx8IHByZXNzZWRQYXJ0ID09IEZvcndhcmRC
dXR0b25TdGFydFBhcnQKKyAgICAgICAgICAgIHx8IHByZXNzZWRQYXJ0ID09IEJhY2tCdXR0b25F
bmRQYXJ0IHx8IHByZXNzZWRQYXJ0ID09IEZvcndhcmRCdXR0b25FbmRQYXJ0CisgICAgICAgICAg
ICB8fCBwcmVzc2VkUGFydCA9PSBUaHVtYlBhcnQpCisgICAgICAgICAgICBvcHQuc3RhdGUgfD0g
UVN0eWxlRmFjYWRlOjpTdGF0ZV9TdW5rZW47CisgICAgfSBlbHNlCisgICAgICAgIG9wdC5zbGlk
ZXIuYWN0aXZlU3ViQ29udHJvbHMgPSBzY1BhcnQoaG92ZXJlZFBhcnQpOworICAgIGlmIChob3Zl
cmVkUGFydCAhPSBOb1BhcnQpCisgICAgICAgIG9wdC5zdGF0ZSB8PSBRU3R5bGVGYWNhZGU6OlN0
YXRlX01vdXNlT3ZlcjsKKyAgICByZXR1cm4gb3B0OworfQorCitib29sIFNjcm9sbGJhclRoZW1l
UVN0eWxlOjpwYWludChTY3JvbGxiYXJUaGVtZUNsaWVudCogc2Nyb2xsYmFyLCBHcmFwaGljc0Nv
bnRleHQqIGdyYXBoaWNzQ29udGV4dCwgY29uc3QgSW50UmVjdCYgZGlydHlSZWN0KQoreworICAg
IGlmIChncmFwaGljc0NvbnRleHQtPnVwZGF0aW5nQ29udHJvbFRpbnRzKCkpIHsKKyAgICAgICAg
c2Nyb2xsYmFyLT5pbnZhbGlkYXRlUmVjdChkaXJ0eVJlY3QpOworICAgICAgICByZXR1cm4gZmFs
c2U7CisgICAgfQorCisgICAgU3R5bGVQYWludGVyUVN0eWxlIHAodGhpcywgZ3JhcGhpY3NDb250
ZXh0KTsKKyAgICBpZiAoIXAuaXNWYWxpZCgpKQorICAgICAgICByZXR1cm4gdHJ1ZTsKKworICAg
IHAucGFpbnRlci0+c2F2ZSgpOworICAgIHAuc3R5bGVPcHRpb24gPSBpbml0U2xpZGVyU3R5bGVP
cHRpb24oc2Nyb2xsYmFyLCBtX3FTdHlsZS0+d2lkZ2V0Rm9yUGFpbnRlcihwLnBhaW50ZXIpKTsK
KworICAgIHAucGFpbnRlci0+c2V0Q2xpcFJlY3QocC5zdHlsZU9wdGlvbi5yZWN0LmludGVyc2Vj
dGVkKGRpcnR5UmVjdCksIFF0OjpJbnRlcnNlY3RDbGlwKTsKKyAgICBwLnBhaW50U2Nyb2xsQmFy
KCk7CisgICAgcC5wYWludGVyLT5yZXN0b3JlKCk7CisgICAgcmV0dXJuIHRydWU7Cit9CisKK1Nj
cm9sbGJhclBhcnQgU2Nyb2xsYmFyVGhlbWVRU3R5bGU6OmhpdFRlc3QoU2Nyb2xsYmFyVGhlbWVD
bGllbnQqIHNjcm9sbGJhciwgY29uc3QgUGxhdGZvcm1Nb3VzZUV2ZW50JiBldnQpCit7CisgICAg
UVN0eWxlRmFjYWRlT3B0aW9uIG9wdCA9IGluaXRTbGlkZXJTdHlsZU9wdGlvbihzY3JvbGxiYXIp
OworICAgIGNvbnN0IFFQb2ludCBwb3MgPSBzY3JvbGxiYXItPmNvbnZlcnRGcm9tQ29udGFpbmlu
Z1dpbmRvdyhldnQucG9zaXRpb24oKSk7CisgICAgb3B0LnJlY3QubW92ZVRvKFFQb2ludCgwLCAw
KSk7CisgICAgUVN0eWxlRmFjYWRlOjpTdWJDb250cm9sIHNjID0gbV9xU3R5bGUtPmhpdFRlc3RT
Y3JvbGxCYXIob3B0LCBwb3MpOworICAgIHJldHVybiBzY3JvbGxiYXJQYXJ0KHNjKTsKK30KKwor
Ym9vbCBTY3JvbGxiYXJUaGVtZVFTdHlsZTo6c2hvdWxkQ2VudGVyT25UaHVtYihTY3JvbGxiYXJU
aGVtZUNsaWVudCosIGNvbnN0IFBsYXRmb3JtTW91c2VFdmVudCYgZXZ0KQoreworICAgIC8vIE1p
ZGRsZSBjbGljayBjZW50ZXJzIHNsaWRlciB0aHVtYiAoaWYgc3VwcG9ydGVkKS4KKyAgICByZXR1
cm4gbV9xU3R5bGUtPnNjcm9sbEJhck1pZGRsZUNsaWNrQWJzb2x1dGVQb3NpdGlvblN0eWxlSGlu
dCgpICYmIGV2dC5idXR0b24oKSA9PSBNaWRkbGVCdXR0b247Cit9CisKK3ZvaWQgU2Nyb2xsYmFy
VGhlbWVRU3R5bGU6OmludmFsaWRhdGVQYXJ0KFNjcm9sbGJhclRoZW1lQ2xpZW50KiBzY3JvbGxi
YXIsIFNjcm9sbGJhclBhcnQpCit7CisgICAgLy8gRklYTUU6IERvIG1vcmUgcHJlY2lzZSBpbnZh
bGlkYXRpb24uCisgICAgc2Nyb2xsYmFyLT5pbnZhbGlkYXRlKCk7Cit9CisKK2ludCBTY3JvbGxi
YXJUaGVtZVFTdHlsZTo6c2Nyb2xsYmFyVGhpY2tuZXNzKFNjcm9sbGJhckNvbnRyb2xTaXplIGNv
bnRyb2xTaXplKQoreworICAgIGNvbnN0IGJvb2wgbWluaSA9IGNvbnRyb2xTaXplICE9IFJlZ3Vs
YXJTY3JvbGxiYXI7CisgICAgcmV0dXJuIG1fcVN0eWxlLT5zY3JvbGxCYXJFeHRlbnQobWluaSk7
Cit9CisKK2ludCBTY3JvbGxiYXJUaGVtZVFTdHlsZTo6dGh1bWJQb3NpdGlvbihTY3JvbGxiYXJU
aGVtZUNsaWVudCogc2Nyb2xsYmFyKQoreworICAgIGlmIChzY3JvbGxiYXItPmVuYWJsZWQoKSkg
eworICAgICAgICBmbG9hdCBwb3MgPSAoZmxvYXQpc2Nyb2xsYmFyLT5jdXJyZW50UG9zKCkgKiAo
dHJhY2tMZW5ndGgoc2Nyb2xsYmFyKSAtIHRodW1iTGVuZ3RoKHNjcm9sbGJhcikpIC8gc2Nyb2xs
YmFyLT5tYXhpbXVtKCk7CisgICAgICAgIHJldHVybiAocG9zIDwgMSAmJiBwb3MgPiAwKSA/IDEg
OiBwb3M7CisgICAgfQorICAgIHJldHVybiAwOworfQorCitpbnQgU2Nyb2xsYmFyVGhlbWVRU3R5
bGU6OnRodW1iTGVuZ3RoKFNjcm9sbGJhclRoZW1lQ2xpZW50KiBzY3JvbGxiYXIpCit7CisgICAg
UVN0eWxlRmFjYWRlT3B0aW9uIG9wdCA9IGluaXRTbGlkZXJTdHlsZU9wdGlvbihzY3JvbGxiYXIp
OworICAgIFFSZWN0IHRodW1iID0gbV9xU3R5bGUtPnNjcm9sbEJhclN1YkNvbnRyb2xSZWN0KG9w
dCwgUVN0eWxlRmFjYWRlOjpTQ19TY3JvbGxCYXJTbGlkZXIpOworICAgIHJldHVybiBzY3JvbGxi
YXItPm9yaWVudGF0aW9uKCkgPT0gSG9yaXpvbnRhbFNjcm9sbGJhciA/IHRodW1iLndpZHRoKCkg
OiB0aHVtYi5oZWlnaHQoKTsKK30KKworaW50IFNjcm9sbGJhclRoZW1lUVN0eWxlOjp0cmFja1Bv
c2l0aW9uKFNjcm9sbGJhclRoZW1lQ2xpZW50KiBzY3JvbGxiYXIpCit7CisgICAgUVN0eWxlRmFj
YWRlT3B0aW9uIG9wdCA9IGluaXRTbGlkZXJTdHlsZU9wdGlvbihzY3JvbGxiYXIpOworICAgIFFS
ZWN0IHRyYWNrID0gbV9xU3R5bGUtPnNjcm9sbEJhclN1YkNvbnRyb2xSZWN0KG9wdCwgUVN0eWxl
RmFjYWRlOjpTQ19TY3JvbGxCYXJHcm9vdmUpOworICAgIHJldHVybiBzY3JvbGxiYXItPm9yaWVu
dGF0aW9uKCkgPT0gSG9yaXpvbnRhbFNjcm9sbGJhciA/IHRyYWNrLngoKSAtIHNjcm9sbGJhci0+
eCgpIDogdHJhY2sueSgpIC0gc2Nyb2xsYmFyLT55KCk7Cit9CisKK2ludCBTY3JvbGxiYXJUaGVt
ZVFTdHlsZTo6dHJhY2tMZW5ndGgoU2Nyb2xsYmFyVGhlbWVDbGllbnQqIHNjcm9sbGJhcikKK3sK
KyAgICBRU3R5bGVGYWNhZGVPcHRpb24gb3B0ID0gaW5pdFNsaWRlclN0eWxlT3B0aW9uKHNjcm9s
bGJhcik7CisgICAgUVJlY3QgdHJhY2sgPSBtX3FTdHlsZS0+c2Nyb2xsQmFyU3ViQ29udHJvbFJl
Y3Qob3B0LCBRU3R5bGVGYWNhZGU6OlNDX1Njcm9sbEJhckdyb292ZSk7CisgICAgcmV0dXJuIHNj
cm9sbGJhci0+b3JpZW50YXRpb24oKSA9PSBIb3Jpem9udGFsU2Nyb2xsYmFyID8gdHJhY2sud2lk
dGgoKSA6IHRyYWNrLmhlaWdodCgpOworfQorCit2b2lkIFNjcm9sbGJhclRoZW1lUVN0eWxlOjpw
YWludFNjcm9sbENvcm5lcihTY3JvbGxWaWV3KiwgR3JhcGhpY3NDb250ZXh0KiBjb250ZXh0LCBj
b25zdCBJbnRSZWN0JiByZWN0KQoreworICAgIFN0eWxlUGFpbnRlclFTdHlsZSBwKHRoaXMsIGNv
bnRleHQpOworICAgIGlmICghcC5pc1ZhbGlkKCkpCisgICAgICAgIHJldHVybjsKKworICAgIHAu
cGFpbnRTY3JvbGxDb3JuZXIocmVjdCk7Cit9CisKK30KKwpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vcXQvU2Nyb2xsYmFyVGhlbWVRU3R5bGUuaCBiL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL3F0L1Njcm9sbGJhclRoZW1lUVN0eWxlLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQK
aW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uZTA0YWZhZDEy
OGRmOTM4ZmM3Njk3YzY5ZmNmYWQ0MzZiN2UyNzZhZAotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL3F0L1Njcm9sbGJhclRoZW1lUVN0eWxlLmgKQEAgLTAsMCArMSw2
NSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwOCBBcHBsZSBJbmMuIEFsbCBSaWdodHMgUmVz
ZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFy
eSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQg
cHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAx
LiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNv
cHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3Jt
IG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAq
ICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRo
ZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBM
RSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElF
UywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5U
SUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQ
VVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgor
ICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lE
RU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAo
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElU
VVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7
IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVP
UlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElU
WSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lO
RyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElG
IEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpZm5k
ZWYgU2Nyb2xsYmFyVGhlbWVRU3R5bGVfaAorI2RlZmluZSBTY3JvbGxiYXJUaGVtZVFTdHlsZV9o
CisKKyNpbmNsdWRlICJTY3JvbGxiYXJUaGVtZS5oIgorCisjaW5jbHVkZSA8UXRDb3JlL3FnbG9i
YWwuaD4KKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitjbGFzcyBRU3R5bGVGYWNhZGU7CisKK2Ns
YXNzIFNjcm9sbGJhclRoZW1lUVN0eWxlIDogcHVibGljIFNjcm9sbGJhclRoZW1lIHsKK3B1Ymxp
YzoKKyAgICBTY3JvbGxiYXJUaGVtZVFTdHlsZSgpOworICAgIHZpcnR1YWwgflNjcm9sbGJhclRo
ZW1lUVN0eWxlKCk7CisKKyAgICB2aXJ0dWFsIGJvb2wgcGFpbnQoU2Nyb2xsYmFyVGhlbWVDbGll
bnQqLCBHcmFwaGljc0NvbnRleHQqLCBjb25zdCBJbnRSZWN0JiBkaXJ0eVJlY3QpOworICAgIHZp
cnR1YWwgdm9pZCBwYWludFNjcm9sbENvcm5lcihTY3JvbGxWaWV3KiwgR3JhcGhpY3NDb250ZXh0
KiwgY29uc3QgSW50UmVjdCYgY29ybmVyUmVjdCk7CisKKyAgICB2aXJ0dWFsIFNjcm9sbGJhclBh
cnQgaGl0VGVzdChTY3JvbGxiYXJUaGVtZUNsaWVudCosIGNvbnN0IFBsYXRmb3JtTW91c2VFdmVu
dCYpOworCisgICAgdmlydHVhbCBib29sIHNob3VsZENlbnRlck9uVGh1bWIoU2Nyb2xsYmFyVGhl
bWVDbGllbnQqLCBjb25zdCBQbGF0Zm9ybU1vdXNlRXZlbnQmKTsKKworICAgIHZpcnR1YWwgdm9p
ZCBpbnZhbGlkYXRlUGFydChTY3JvbGxiYXJUaGVtZUNsaWVudCosIFNjcm9sbGJhclBhcnQpOwor
CisgICAgdmlydHVhbCBpbnQgdGh1bWJQb3NpdGlvbihTY3JvbGxiYXJUaGVtZUNsaWVudCopOwor
ICAgIHZpcnR1YWwgaW50IHRodW1iTGVuZ3RoKFNjcm9sbGJhclRoZW1lQ2xpZW50Kik7CisgICAg
dmlydHVhbCBpbnQgdHJhY2tQb3NpdGlvbihTY3JvbGxiYXJUaGVtZUNsaWVudCopOworICAgIHZp
cnR1YWwgaW50IHRyYWNrTGVuZ3RoKFNjcm9sbGJhclRoZW1lQ2xpZW50Kik7CisKKyAgICB2aXJ0
dWFsIGludCBzY3JvbGxiYXJUaGlja25lc3MoU2Nyb2xsYmFyQ29udHJvbFNpemUgPSBSZWd1bGFy
U2Nyb2xsYmFyKTsKKworICAgIFFTdHlsZUZhY2FkZSogcVN0eWxlKCkgeyByZXR1cm4gbV9xU3R5
bGUuZ2V0KCk7IH0KKworcHJpdmF0ZToKKyAgICBPd25QdHI8UVN0eWxlRmFjYWRlPiBtX3FTdHls
ZTsKK307CisKK30KKyNlbmRpZgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9XZWJLaXQxLnBy
byBiL1NvdXJjZS9XZWJLaXQvV2ViS2l0MS5wcm8KaW5kZXggYWUyM2M0ZWNhNDQxMmEwNjUyM2Fi
ZWI2ODBhYjg0MzgwNjc5YjI0NS4uNzVkNGQ3OWRlNWFjNGNlM2VjNjkyZWVkMmY5NWQ1ZDdkZjk0
YjQzOSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9XZWJLaXQxLnBybworKysgYi9Tb3VyY2Uv
V2ViS2l0L1dlYktpdDEucHJvCkBAIC00OCw5ICs0OCw4IEBAIFNPVVJDRVMgKz0gXAogICAgICQk
UFdEL3F0L1dlYkNvcmVTdXBwb3J0L05vdGlmaWNhdGlvblByZXNlbnRlckNsaWVudFF0LmNwcCBc
CiAgICAgJCRQV0QvcXQvV2ViQ29yZVN1cHBvcnQvUGFnZUNsaWVudFF0LmNwcCBcCiAgICAgJCRQ
V0QvcXQvV2ViQ29yZVN1cHBvcnQvUG9wdXBNZW51UXQuY3BwIFwKKyAgICAkJFBXRC9xdC9XZWJD
b3JlU3VwcG9ydC9RU3R5bGVGYWNhZGVJbXAuY3BwIFwKICAgICAkJFBXRC9xdC9XZWJDb3JlU3Vw
cG9ydC9RdFBsYXRmb3JtUGx1Z2luLmNwcCBcCi0gICAgJCRQV0QvcXQvV2ViQ29yZVN1cHBvcnQv
UmVuZGVyVGhlbWVRU3R5bGUuY3BwIFwKLSAgICAkJFBXRC9xdC9XZWJDb3JlU3VwcG9ydC9TY3Jv
bGxiYXJUaGVtZVFTdHlsZS5jcHAgXAogICAgICQkUFdEL3F0L1dlYkNvcmVTdXBwb3J0L1NlYXJj
aFBvcHVwTWVudVF0LmNwcCBcCiAgICAgJCRQV0QvcXQvV2ViQ29yZVN1cHBvcnQvVGV4dENoZWNr
ZXJDbGllbnRRdC5jcHAgXAogICAgICQkUFdEL3F0L1dlYkNvcmVTdXBwb3J0L1BsYXRmb3JtU3Ry
YXRlZ2llc1F0LmNwcCBcCkBAIC04Niw5ICs4NSw4IEBAIEhFQURFUlMgKz0gXAogICAgICQkUFdE
L3F0L1dlYkNvcmVTdXBwb3J0L05vdGlmaWNhdGlvblByZXNlbnRlckNsaWVudFF0LmggXAogICAg
ICQkUFdEL3F0L1dlYkNvcmVTdXBwb3J0L1BhZ2VDbGllbnRRdC5oIFwKICAgICAkJFBXRC9xdC9X
ZWJDb3JlU3VwcG9ydC9Qb3B1cE1lbnVRdC5oIFwKKyAgICAkJFBXRC9xdC9XZWJDb3JlU3VwcG9y
dC9RU3R5bGVGYWNhZGVJbXAuaCBcCiAgICAgJCRQV0QvcXQvV2ViQ29yZVN1cHBvcnQvUXRQbGF0
Zm9ybVBsdWdpbi5oIFwKLSAgICAkJFBXRC9xdC9XZWJDb3JlU3VwcG9ydC9SZW5kZXJUaGVtZVFT
dHlsZS5oIFwKLSAgICAkJFBXRC9xdC9XZWJDb3JlU3VwcG9ydC9TY3JvbGxiYXJUaGVtZVFTdHls
ZS5oIFwKICAgICAkJFBXRC9xdC9XZWJDb3JlU3VwcG9ydC9TZWFyY2hQb3B1cE1lbnVRdC5oIFwK
ICAgICAkJFBXRC9xdC9XZWJDb3JlU3VwcG9ydC9UZXh0Q2hlY2tlckNsaWVudFF0LmggXAogICAg
ICQkUFdEL3F0L1dlYkNvcmVTdXBwb3J0L1BsYXRmb3JtU3RyYXRlZ2llc1F0LmggXApkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYktpdC9xdC9XZWJDb3JlU3VwcG9ydC9Jbml0V2ViQ29yZVF0LmNwcCBi
L1NvdXJjZS9XZWJLaXQvcXQvV2ViQ29yZVN1cHBvcnQvSW5pdFdlYkNvcmVRdC5jcHAKaW5kZXgg
YzYzY2NiMDQyYjA1NDMyY2U5NTJmNTUxOWU1MGE1MjM0ODk3ZTljMS4uMjM3NGJiNWQxYzk5MjI1
MjVmNDVkNTVjNzcyNDkyYmFlMmJkYzFkMyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9xdC9X
ZWJDb3JlU3VwcG9ydC9Jbml0V2ViQ29yZVF0LmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0L3F0L1dl
YkNvcmVTdXBwb3J0L0luaXRXZWJDb3JlUXQuY3BwCkBAIC0zMyw2ICszMyw3IEBACiAjaW5jbHVk
ZSAiSW1hZ2UuaCIKICNpbmNsdWRlICJOb3RJbXBsZW1lbnRlZC5oIgogI2luY2x1ZGUgIlBsYXRm
b3JtU3RyYXRlZ2llc1F0LmgiCisjaW5jbHVkZSAiUVN0eWxlRmFjYWRlSW1wLmgiCiAjaW5jbHVk
ZSAiUmVuZGVyVGhlbWVRU3R5bGUuaCIKICNpbmNsdWRlICJTY3JpcHRDb250cm9sbGVyLmgiCiAj
aW5jbHVkZSAiU2Nyb2xsYmFyVGhlbWVRU3R5bGUuaCIKQEAgLTc2LDYgKzc3LDcgQEAgdm9pZCBp
bml0aWFsaXplV2ViQ29yZVF0KCkKICAgICBQbGF0Zm9ybVN0cmF0ZWdpZXNRdDo6aW5pdGlhbGl6
ZSgpOwogICAgIFF0V2ViRWxlbWVudFJ1bnRpbWU6OmluaXRpYWxpemUoKTsKIAorICAgIFJlbmRl
clRoZW1lUVN0eWxlOjpzZXRTdHlsZUZhY3RvcnlGdW5jdGlvbihXZWJLaXQ6OlFTdHlsZUZhY2Fk
ZUltcDo6Y3JlYXRlKTsKICAgICBSZW5kZXJUaGVtZVF0OjpzZXRDdXN0b21UaGVtZShSZW5kZXJU
aGVtZVFTdHlsZTo6Y3JlYXRlLCBuZXcgU2Nyb2xsYmFyVGhlbWVRU3R5bGUpOwogCiAjaWYgVVNF
KFFUS0lUKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9xdC9XZWJDb3JlU3VwcG9ydC9RU3R5
bGVGYWNhZGVJbXAuY3BwIGIvU291cmNlL1dlYktpdC9xdC9XZWJDb3JlU3VwcG9ydC9RU3R5bGVG
YWNhZGVJbXAuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjk2MTdmZDFmNmVmNDg2MmNhODdmZjRjYWJlMGMxZTcx
OGZhNWU0MzUKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0L3F0L1dlYkNvcmVTdXBw
b3J0L1FTdHlsZUZhY2FkZUltcC5jcHAKQEAgLTAsMCArMSw1MDYgQEAKKy8qCisgKiBUaGlzIGZp
bGUgaXMgcGFydCBvZiB0aGUgdGhlbWUgaW1wbGVtZW50YXRpb24gZm9yIGZvcm0gY29udHJvbHMg
aW4gV2ViQ29yZS4KKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMTIgRGlnaWEgUGxjIGFuZC9vciBp
dHMgc3Vic2lkaWFyeSgtaWVzKS4KKyAqIENvcHlyaWdodCAoQykgMjAxMS0yMDEyIE5va2lhIENv
cnBvcmF0aW9uIGFuZC9vciBpdHMgc3Vic2lkaWFyeSgtaWVzKS4KKyAqCisgKiBUaGlzIGxpYnJh
cnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBt
b2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1Ymxp
YworICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlv
bjsgZWl0aGVyCisgKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlv
bikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVk
IGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkg
V0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hB
TlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBH
TlUKKyAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgor
ICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5
IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUg
dGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCisgKiB0aGUgRnJlZSBTb2Z0
d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAor
ICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisgKgorICovCisKKyNpbmNsdWRlICJjb25m
aWcuaCIKKworI2luY2x1ZGUgIlFTdHlsZUZhY2FkZUltcC5oIgorCisjaW5jbHVkZSA8UUFwcGxp
Y2F0aW9uPgorI2luY2x1ZGUgPFFMaW5lRWRpdD4KKyNpbmNsdWRlIDxRTWFjU3R5bGU+CisjaW5j
bHVkZSA8UVBhaW50ZXI+CisjaW5jbHVkZSA8UVB1c2hCdXR0b24+CisjaWZuZGVmIFFUX05PX1NU
WUxFX1BMQVNUSVFVRQorI2luY2x1ZGUgPFFQbGFzdGlxdWVTdHlsZT4KKyNlbmRpZgorI2luY2x1
ZGUgPFFTdHlsZUZhY3Rvcnk+CisjaW5jbHVkZSA8UVN0eWxlT3B0aW9uPgorCisjaW5jbHVkZSA8
UVdlYlBhZ2VDbGllbnQuaD4KKwordXNpbmcgbmFtZXNwYWNlIFdlYkNvcmU7CisKK25hbWVzcGFj
ZSBXZWJLaXQgeworCitzdGF0aWMgUVN0eWxlOjpTdGF0ZSBjb252ZXJ0VG9RU3R5bGVTdGF0ZShR
U3R5bGVGYWNhZGU6OlN0YXRlIHN0YXRlKQoreworICAgIFFTdHlsZTo6U3RhdGUgcmVzdWx0Owor
I2RlZmluZSBDT05WRVJUX1NUQVRFKFByb3hpZWRTdGF0ZSwgVmFsdWUpIFwKKyAgICBpZiAoc3Rh
dGUgJiBRU3R5bGVGYWNhZGU6OlByb3hpZWRTdGF0ZSkgXAorICAgICAgICByZXN1bHQgfD0gUVN0
eWxlOjpQcm94aWVkU3RhdGU7CisKKyAgICBGT1JfRUFDSF9NQVBQRURfU1RBVEUoQ09OVkVSVF9T
VEFURSwgKQorCisjdW5kZWYgQ09OVkVSVF9TVEFURQorCisgICAgcmV0dXJuIHJlc3VsdDsKK30K
Kworc3RhdGljIFFTdHlsZTo6U3ViQ29udHJvbCBjb252ZXJ0VG9RU3R5bGVTdWJDb250cm9sKFFT
dHlsZUZhY2FkZTo6U3ViQ29udHJvbCBzYykKK3sKKyNkZWZpbmUgQ09OVkVSVF9TVUJDT05UUk9M
KEYsIFZhbHVlKSBcCisgICAgY2FzZSBRU3R5bGVGYWNhZGU6OkY6IHJldHVybiBRU3R5bGU6OkYK
KworICAgIHN3aXRjaCAoc2MpIHsKKyAgICAgICAgRk9SX0VBQ0hfU1VCQ09OVFJPTChDT05WRVJU
X1NVQkNPTlRST0wsIFNFTUlDT0xPTik7CisgICAgfQorICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgp
OworICAgIHJldHVybiBRU3R5bGU6OlNDX05vbmU7CisjdW5kZWYgQ09OVkVSVF9TVUJDT05UUk9M
Cit9CisKK3N0YXRpYyB2b2lkIGluaXRHZW5lcmljU3R5bGVPcHRpb24oUVN0eWxlT3B0aW9uKiBv
cHRpb24sIFFXaWRnZXQqIHdpZGdldCwgY29uc3QgUVN0eWxlRmFjYWRlT3B0aW9uJiBmYWNhZGVP
cHRpb24pCit7CisgICAgaWYgKHdpZGdldCkKKyAgICAgICAgb3B0aW9uLT5pbml0KHdpZGdldCk7
CisgICAgZWxzZQorICAgICAgICAvLyBJZiBhIHdpZGdldCBpcyBub3QgZGlyZWN0bHkgYXZhaWxh
YmxlIGZvciByZW5kZXJpbmcsIHdlIGZhbGxiYWNrIHRvIGRlZmF1bHQKKyAgICAgICAgLy8gdmFs
dWUgZm9yIGFuIGFjdGl2ZSB3aWRnZXQuCisgICAgICAgIG9wdGlvbi0+c3RhdGUgPSBRU3R5bGU6
OlN0YXRlX0FjdGl2ZSB8IFFTdHlsZTo6U3RhdGVfRW5hYmxlZDsKKworICAgIG9wdGlvbi0+cmVj
dCA9IGZhY2FkZU9wdGlvbi5yZWN0OworICAgIG9wdGlvbi0+c3RhdGUgPSBjb252ZXJ0VG9RU3R5
bGVTdGF0ZShmYWNhZGVPcHRpb24uc3RhdGUpOworICAgIG9wdGlvbi0+ZGlyZWN0aW9uID0gZmFj
YWRlT3B0aW9uLmRpcmVjdGlvbjsKKyAgICBvcHRpb24tPnBhbGV0dGUgPSBmYWNhZGVPcHRpb24u
cGFsZXR0ZTsKK30KKworc3RhdGljIHZvaWQgaW5pdFNwZWNpZmljU3R5bGVPcHRpb24oUVN0eWxl
T3B0aW9uKiwgY29uc3QgUVN0eWxlRmFjYWRlT3B0aW9uJikKK3sKK30KKworc3RhdGljIHZvaWQg
aW5pdFNwZWNpZmljU3R5bGVPcHRpb24oUVN0eWxlT3B0aW9uU2xpZGVyKiBzbGlkZXJPcHRpb24s
IGNvbnN0IFFTdHlsZUZhY2FkZU9wdGlvbiYgZmFjYWRlT3B0aW9uKQoreworICAgIHNsaWRlck9w
dGlvbi0+b3JpZW50YXRpb24gPSBmYWNhZGVPcHRpb24uc2xpZGVyLm9yaWVudGF0aW9uOworICAg
IHNsaWRlck9wdGlvbi0+dXBzaWRlRG93biA9IGZhY2FkZU9wdGlvbi5zbGlkZXIudXBzaWRlRG93
bjsKKyAgICBzbGlkZXJPcHRpb24tPm1pbmltdW0gPSBmYWNhZGVPcHRpb24uc2xpZGVyLm1pbmlt
dW07CisgICAgc2xpZGVyT3B0aW9uLT5tYXhpbXVtID0gZmFjYWRlT3B0aW9uLnNsaWRlci5tYXhp
bXVtOworICAgIHNsaWRlck9wdGlvbi0+c2xpZGVyUG9zaXRpb24gPSBmYWNhZGVPcHRpb24uc2xp
ZGVyLnBvc2l0aW9uOworICAgIHNsaWRlck9wdGlvbi0+c2xpZGVyVmFsdWUgPSBmYWNhZGVPcHRp
b24uc2xpZGVyLnZhbHVlOworICAgIHNsaWRlck9wdGlvbi0+c2luZ2xlU3RlcCA9IGZhY2FkZU9w
dGlvbi5zbGlkZXIuc2luZ2xlU3RlcDsKKyAgICBzbGlkZXJPcHRpb24tPnBhZ2VTdGVwID0gZmFj
YWRlT3B0aW9uLnNsaWRlci5wYWdlU3RlcDsKKyAgICBzbGlkZXJPcHRpb24tPmFjdGl2ZVN1YkNv
bnRyb2xzID0gY29udmVydFRvUVN0eWxlU3ViQ29udHJvbChmYWNhZGVPcHRpb24uc2xpZGVyLmFj
dGl2ZVN1YkNvbnRyb2xzKTsKK30KKwordGVtcGxhdGUgPHR5cGVuYW1lIFN0eWxlT3B0aW9uPgor
Y2xhc3MgTWFwcGVkU3R5bGVPcHRpb24gOiBwdWJsaWMgU3R5bGVPcHRpb24geworCitwdWJsaWM6
CisgICAgTWFwcGVkU3R5bGVPcHRpb24oUVdpZGdldCogd2lkZ2V0LCBjb25zdCBRU3R5bGVGYWNh
ZGVPcHRpb24mIGZhY2FkZU9wdGlvbikKKyAgICB7CisgICAgICAgIGluaXRHZW5lcmljU3R5bGVP
cHRpb24odGhpcywgd2lkZ2V0LCBmYWNhZGVPcHRpb24pOworICAgICAgICBpbml0U3BlY2lmaWNT
dHlsZU9wdGlvbih0aGlzLCBmYWNhZGVPcHRpb24pOworICAgIH0KK307CisKK3N0YXRpYyBRU3R5
bGU6OlBpeGVsTWV0cmljIGNvbnZlcnRQaXhlbE1ldHJpYyhRU3R5bGVGYWNhZGU6OlBpeGVsTWV0
cmljIHN0YXRlKQoreworI2RlZmluZSBDT05WRVJUX01FVFJJQyhNZXRyaWMpIFwKKyAgICBjYXNl
IFFTdHlsZUZhY2FkZTo6TWV0cmljOiByZXR1cm4gUVN0eWxlOjpNZXRyaWMKKworICAgIHN3aXRj
aCAoc3RhdGUpIHsKKyAgICAgICAgRk9SX0VBQ0hfTUFQUEVEX01FVFJJQyhDT05WRVJUX01FVFJJ
QywgU0VNSUNPTE9OKTsKKyAgICB9CisgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgcmV0
dXJuIFFTdHlsZTo6UE1fQ3VzdG9tQmFzZTsKKworI3VuZGVmIENPTlZFUlRfTUVUUklDCit9CisK
K3N0YXRpYyBRU3R5bGVGYWNhZGU6OlN1YkNvbnRyb2wgY29udmVydFRvUVN0eWxlRmFjYWRlU3Vi
Q29udHJvbChRU3R5bGU6OlN1YkNvbnRyb2wgc2MpCit7CisjZGVmaW5lIENPTlZFUlRfU1VCQ09O
VFJPTChGLCBWYWx1ZSkgXAorICAgIGNhc2UgUVN0eWxlOjpGOiByZXR1cm4gUVN0eWxlRmFjYWRl
OjpGCisKKyAgICBzd2l0Y2ggKHNjKSB7CisgICAgICAgIEZPUl9FQUNIX1NVQkNPTlRST0woQ09O
VkVSVF9TVUJDT05UUk9MLCBTRU1JQ09MT04pOworICAgIH0KKyAgICBBU1NFUlRfTk9UX1JFQUNI
RUQoKTsKKyAgICByZXR1cm4gUVN0eWxlRmFjYWRlOjpTQ19Ob25lOworI3VuZGVmIENPTlZFUlRf
U1VCQ09OVFJPTAorfQorCitRU3R5bGVGYWNhZGVJbXA6OlFTdHlsZUZhY2FkZUltcChQYWdlKiBw
YWdlKQorICAgIDogbV9wYWdlKHBhZ2UpCisgICAgLCBtX3N0eWxlKDApCit7CisgICAgbV9mYWxs
YmFja1N0eWxlID0gUVN0eWxlRmFjdG9yeTo6Y3JlYXRlKFFMYXRpbjFTdHJpbmcoIndpbmRvd3Mi
KSk7CisgICAgbV9vd25GYWxsYmFja1N0eWxlID0gdHJ1ZTsKKyAgICBpZiAoIW1fZmFsbGJhY2tT
dHlsZSkgeworICAgICAgICBtX2ZhbGxiYWNrU3R5bGUgPSBRQXBwbGljYXRpb246OnN0eWxlKCk7
CisgICAgICAgIG1fb3duRmFsbGJhY2tTdHlsZSA9IGZhbHNlOworICAgIH0KK30KKworUVN0eWxl
RmFjYWRlSW1wOjp+UVN0eWxlRmFjYWRlSW1wKCkKK3sKKyAgICBpZiAobV9vd25GYWxsYmFja1N0
eWxlKQorICAgICAgICBkZWxldGUgbV9mYWxsYmFja1N0eWxlOworfQorCitRUmVjdCBRU3R5bGVG
YWNhZGVJbXA6OmJ1dHRvblN1YkVsZW1lbnRSZWN0KFFTdHlsZUZhY2FkZTo6QnV0dG9uU3ViRWxl
bWVudCBidXR0b25FbGVtZW50LCBTdGF0ZSBzdGF0ZSwgY29uc3QgUVJlY3QmIG9yaWdpbmFsUmVj
dCkgY29uc3QKK3sKKyAgICBRU3R5bGVPcHRpb25CdXR0b24gb3B0aW9uOworICAgIG9wdGlvbi5z
dGF0ZSA9IGNvbnZlcnRUb1FTdHlsZVN0YXRlKHN0YXRlKTsKKyAgICBvcHRpb24ucmVjdCA9IG9y
aWdpbmFsUmVjdDsKKworICAgIFFTdHlsZTo6U3ViRWxlbWVudCBzdWJFbGVtZW50ID0gUVN0eWxl
OjpTRV9DdXN0b21CYXNlOworICAgIHN3aXRjaCAoYnV0dG9uRWxlbWVudCkgeworICAgIGNhc2Ug
UHVzaEJ1dHRvbkxheW91dEl0ZW06IHN1YkVsZW1lbnQgPSBRU3R5bGU6OlNFX1B1c2hCdXR0b25M
YXlvdXRJdGVtOyBicmVhazsKKyAgICBjYXNlIFB1c2hCdXR0b25Db250ZW50czogc3ViRWxlbWVu
dCA9IFFTdHlsZTo6U0VfUHVzaEJ1dHRvbkNvbnRlbnRzOyBicmVhazsKKyAgICBkZWZhdWx0OiBB
U1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICB9CisgICAgcmV0dXJuIHN0eWxlKCktPnN1YkVsZW1l
bnRSZWN0KHN1YkVsZW1lbnQsICZvcHRpb24pOworfQorCitpbnQgUVN0eWxlRmFjYWRlSW1wOjpm
aW5kRnJhbWVMaW5lV2lkdGgoKSBjb25zdAoreworICAgIGlmICghbV9saW5lRWRpdCkKKyAgICAg
ICAgbV9saW5lRWRpdC5yZXNldChuZXcgUUxpbmVFZGl0KCkpOworCisgICAgcmV0dXJuIHN0eWxl
KCktPnBpeGVsTWV0cmljKFFTdHlsZTo6UE1fRGVmYXVsdEZyYW1lV2lkdGgsIDAsIG1fbGluZUVk
aXQuZGF0YSgpKTsKK30KKworaW50IFFTdHlsZUZhY2FkZUltcDo6c2ltcGxlUGl4ZWxNZXRyaWMo
UVN0eWxlRmFjYWRlOjpQaXhlbE1ldHJpYyBtZXRyaWMsIFN0YXRlIHN0YXRlKSBjb25zdAorewor
ICAgIFFTdHlsZU9wdGlvbiBvcHQ7CisgICAgb3B0LnN0YXRlID0gY29udmVydFRvUVN0eWxlU3Rh
dGUoc3RhdGUpOworICAgIHJldHVybiBzdHlsZSgpLT5waXhlbE1ldHJpYyhjb252ZXJ0UGl4ZWxN
ZXRyaWMobWV0cmljKSwgJm9wdCwgMCk7Cit9CisKK2ludCBRU3R5bGVGYWNhZGVJbXA6OmJ1dHRv
bk1hcmdpbihTdGF0ZSBzdGF0ZSwgY29uc3QgUVJlY3QmIG9yaWdpbmFsUmVjdCkgY29uc3QKK3sK
KyAgICBRU3R5bGVPcHRpb25CdXR0b24gc3R5bGVPcHRpb247CisgICAgc3R5bGVPcHRpb24uc3Rh
dGUgPSBjb252ZXJ0VG9RU3R5bGVTdGF0ZShzdGF0ZSk7CisgICAgc3R5bGVPcHRpb24ucmVjdCA9
IG9yaWdpbmFsUmVjdDsKKyAgICByZXR1cm4gc3R5bGUoKS0+cGl4ZWxNZXRyaWMoUVN0eWxlOjpQ
TV9CdXR0b25NYXJnaW4sICZzdHlsZU9wdGlvbiwgMCk7Cit9CisKK2ludCBRU3R5bGVGYWNhZGVJ
bXA6OnNsaWRlckxlbmd0aChRdDo6T3JpZW50YXRpb24gb3JpZW50YXRpb24pIGNvbnN0Cit7Cisg
ICAgUVN0eWxlT3B0aW9uU2xpZGVyIG9wdDsKKyAgICBvcHQub3JpZW50YXRpb24gPSBvcmllbnRh
dGlvbjsKKyAgICByZXR1cm4gc3R5bGUoKS0+cGl4ZWxNZXRyaWMoUVN0eWxlOjpQTV9TbGlkZXJM
ZW5ndGgsICZvcHQpOworfQorCitpbnQgUVN0eWxlRmFjYWRlSW1wOjpzbGlkZXJUaGlja25lc3Mo
UXQ6Ok9yaWVudGF0aW9uIG9yaWVudGF0aW9uKSBjb25zdAoreworICAgIFFTdHlsZU9wdGlvblNs
aWRlciBvcHQ7CisgICAgb3B0Lm9yaWVudGF0aW9uID0gb3JpZW50YXRpb247CisgICAgcmV0dXJu
IHN0eWxlKCktPnBpeGVsTWV0cmljKFFTdHlsZTo6UE1fU2xpZGVyVGhpY2tuZXNzLCAmb3B0KTsK
K30KKworaW50IFFTdHlsZUZhY2FkZUltcDo6cHJvZ3Jlc3NCYXJDaHVua1dpZHRoKGNvbnN0IFFT
aXplJiBzaXplKSBjb25zdAoreworICAgIFFTdHlsZU9wdGlvblByb2dyZXNzQmFyVjIgb3B0aW9u
OworICAgIG9wdGlvbi5yZWN0LnNldFNpemUoc2l6ZSk7CisgICAgLy8gRklYTUU6IFVudGlsIGh0
dHA6Ly9idWdyZXBvcnRzLnF0Lm5va2lhLmNvbS9icm93c2UvUVRCVUctOTE3MSBpcyBmaXhlZCwK
KyAgICAvLyB3ZSBzaW11bGF0ZSBvbmUgc3F1YXJlIGFuaW1hdGluZyBhY3Jvc3MgdGhlIHByb2dy
ZXNzIGJhci4KKyAgICByZXR1cm4gc3R5bGUoKS0+cGl4ZWxNZXRyaWMoUVN0eWxlOjpQTV9Qcm9n
cmVzc0JhckNodW5rV2lkdGgsICZvcHRpb24pOworfQorCit2b2lkIFFTdHlsZUZhY2FkZUltcDo6
Z2V0QnV0dG9uTWV0cmljcyhRU3RyaW5nICpidXR0b25Gb250RmFtaWx5LCBpbnQgKmJ1dHRvbkZv
bnRQaXhlbFNpemUpIGNvbnN0Cit7CisgICAgUVB1c2hCdXR0b24gYnV0dG9uOworICAgIFFGb250
IGRlZmF1bHRCdXR0b25Gb250ID0gUUFwcGxpY2F0aW9uOjpmb250KCZidXR0b24pOworICAgICpi
dXR0b25Gb250RmFtaWx5ID0gZGVmYXVsdEJ1dHRvbkZvbnQuZmFtaWx5KCk7CisgICAgKmJ1dHRv
bkZvbnRQaXhlbFNpemUgPSAwOworI2lmZGVmIFFfV1NfTUFDCisgICAgYnV0dG9uLnNldEF0dHJp
YnV0ZShRdDo6V0FfTWFjU21hbGxTaXplKTsKKyAgICBRRm9udEluZm8gZm9udEluZm8oZGVmYXVs
dEJ1dHRvbkZvbnQpOworICAgICpidXR0b25Gb250UGl4ZWxTaXplID0gZm9udEluZm8ucGl4ZWxT
aXplKCk7CisjZW5kaWYKK30KKworUVNpemUgUVN0eWxlRmFjYWRlSW1wOjpzaXplRnJvbUNvbnRl
bnRzKFFTdHlsZUZhY2FkZTo6Q29udGVudHNUeXBlIHR5cGUsIFFTdHlsZUZhY2FkZTo6U3RhdGUg
c3RhdGUsIGNvbnN0IFFTaXplJiBjb250ZW50c1NpemUpIGNvbnN0Cit7CisgICAgUVN0eWxlT3B0
aW9uIG9wdDsKKyAgICBvcHQuc3RhdGUgPSBjb252ZXJ0VG9RU3R5bGVTdGF0ZShzdGF0ZSk7CisK
KyAgICBRU3R5bGU6OkNvbnRlbnRzVHlwZSBjb250ZW50c1R5cGUgPSBRU3R5bGU6OkNUX0N1c3Rv
bUJhc2U7CisgICAgc3dpdGNoICh0eXBlKSB7CisgICAgY2FzZSBRU3R5bGVGYWNhZGU6OkNUX0Nv
bWJvQm94OiBjb250ZW50c1R5cGUgPSBRU3R5bGU6OkNUX0NvbWJvQm94OyBicmVhazsKKyAgICBj
YXNlIFFTdHlsZUZhY2FkZTo6Q1RfUHVzaEJ1dHRvbjogY29udGVudHNUeXBlID0gUVN0eWxlOjpD
VF9QdXNoQnV0dG9uOyBicmVhazsKKyAgICB9CisKKyAgICByZXR1cm4gc3R5bGUoKS0+c2l6ZUZy
b21Db250ZW50cyhjb250ZW50c1R5cGUsICZvcHQsIGNvbnRlbnRzU2l6ZSk7Cit9CisKK3ZvaWQg
UVN0eWxlRmFjYWRlSW1wOjpwYWludEJ1dHRvbihRUGFpbnRlciogcGFpbnRlciwgUVN0eWxlRmFj
YWRlOjpCdXR0b25UeXBlIHR5cGUsIGNvbnN0IFFTdHlsZUZhY2FkZU9wdGlvbiAmcHJveHlPcHRp
b24pCit7CisgICAgUVdpZGdldCogd2lkZ2V0ID0gcW9iamVjdF9jYXN0PFFXaWRnZXQqPih3aWRn
ZXRGb3JQYWludGVyKHBhaW50ZXIpKTsKKyAgICBNYXBwZWRTdHlsZU9wdGlvbjxRU3R5bGVPcHRp
b25CdXR0b24+IG9wdGlvbih3aWRnZXQsIHByb3h5T3B0aW9uKTsKKworICAgIGlmICh0eXBlID09
IFB1c2hCdXR0b24pCisgICAgICAgIHN0eWxlKCktPmRyYXdDb250cm9sKFFTdHlsZTo6Q0VfUHVz
aEJ1dHRvbiwgJm9wdGlvbiwgcGFpbnRlciwgd2lkZ2V0KTsKKyAgICBlbHNlIGlmICh0eXBlID09
IFJhZGlvQnV0dG9uKQorICAgICAgIHN0eWxlKCktPmRyYXdDb250cm9sKFFTdHlsZTo6Q0VfUmFk
aW9CdXR0b24sICZvcHRpb24sIHBhaW50ZXIsIHdpZGdldCk7CisgICAgZWxzZSBpZiAodHlwZSA9
PSBDaGVja0JveCkKKyAgICAgICAgc3R5bGUoKS0+ZHJhd0NvbnRyb2woUVN0eWxlOjpDRV9DaGVj
a0JveCwgJm9wdGlvbiwgcGFpbnRlciwgd2lkZ2V0KTsKK30KKwordm9pZCBRU3R5bGVGYWNhZGVJ
bXA6OnBhaW50VGV4dEZpZWxkKFFQYWludGVyICpwYWludGVyLCBjb25zdCBRU3R5bGVGYWNhZGVP
cHRpb24gJnByb3h5T3B0aW9uKQoreworICAgIFFXaWRnZXQqIHdpZGdldCA9IHFvYmplY3RfY2Fz
dDxRV2lkZ2V0Kj4od2lkZ2V0Rm9yUGFpbnRlcihwYWludGVyKSk7CisKKyAgICBNYXBwZWRTdHls
ZU9wdGlvbjxRU3R5bGVPcHRpb25GcmFtZVYyPiBwYW5lbCh3aWRnZXQsIHByb3h5T3B0aW9uKTsK
KworICAgIHBhbmVsLmxpbmVXaWR0aCA9IGZpbmRGcmFtZUxpbmVXaWR0aCgpOworICAgIHBhbmVs
LmZlYXR1cmVzID0gUVN0eWxlT3B0aW9uRnJhbWVWMjo6Tm9uZTsKKworICAgIHN0eWxlKCktPmRy
YXdQcmltaXRpdmUoUVN0eWxlOjpQRV9QYW5lbExpbmVFZGl0LCAmcGFuZWwsIHBhaW50ZXIsIHdp
ZGdldCk7Cit9CisKK3ZvaWQgUVN0eWxlRmFjYWRlSW1wOjpwYWludENvbWJvQm94KFFQYWludGVy
ICpwYWludGVyLCBjb25zdCBRU3R5bGVGYWNhZGVPcHRpb24gJnByb3h5T3B0aW9uKQoreworICAg
IFFXaWRnZXQqIHdpZGdldCA9IHFvYmplY3RfY2FzdDxRV2lkZ2V0Kj4od2lkZ2V0Rm9yUGFpbnRl
cihwYWludGVyKSk7CisKKyAgICBNYXBwZWRTdHlsZU9wdGlvbjxRU3R5bGVPcHRpb25Db21ib0Jv
eD4gb3B0KHdpZGdldCwgcHJveHlPcHRpb24pOworCisgICAgSW50UmVjdCByZWN0ID0gb3B0LnJl
Y3Q7CisKKyNpZiBkZWZpbmVkKFFfV1NfTUFDKSAmJiAhZGVmaW5lZChRVF9OT19TVFlMRV9NQUMp
CisgICAgLy8gUU1hY1N0eWxlIG1ha2VzIHRoZSBjb21ibyBib3hlcyBhIGxpdHRsZSBiaXQgc21h
bGxlciB0byBsZWF2ZSBzcGFjZSBmb3IgdGhlIGZvY3VzIHJlY3QuCisgICAgLy8gQmVjYXVzZSBv
ZiBpdCwgdGhlIGNvbWJvIGJ1dHRvbiBpcyBkcmF3biBhdCBhIHBvaW50IHRvIHRoZSBsZWZ0IG9m
IHdoZXJlIGl0IHdhcyBleHBlY3QgdG8gYmUgYW5kIG1heSBlbmQgdXAKKyAgICAvLyBvdmVybGFw
cGVkIHdpdGggdGhlIHRleHQuIFRoaXMgd2lsbCBmb3JjZSBRTWFjU3R5bGUgdG8gZHJhdyB0aGUg
Y29tYm8gYm94IHdpdGggdGhlIGV4cGVjdGVkIHdpZHRoLgorICAgIGlmIChxb2JqZWN0X2Nhc3Q8
UU1hY1N0eWxlKj4obV9zdHlsZSkpCisgICAgICAgIHJlY3QuaW5mbGF0ZVgoMyk7CisjZW5kaWYK
KworICAgIGNvbnN0IFFQb2ludCB0b3BMZWZ0ID0gcmVjdC5sb2NhdGlvbigpOworICAgIHBhaW50
ZXItPnRyYW5zbGF0ZSh0b3BMZWZ0KTsKKyAgICBvcHQucmVjdC5tb3ZlVG8oUVBvaW50KDAsIDAp
KTsKKyAgICBvcHQucmVjdC5zZXRTaXplKHJlY3Quc2l6ZSgpKTsKKworICAgIHN0eWxlKCktPmRy
YXdDb21wbGV4Q29udHJvbChRU3R5bGU6OkNDX0NvbWJvQm94LCAmb3B0LCBwYWludGVyLCB3aWRn
ZXQpOworICAgIHBhaW50ZXItPnRyYW5zbGF0ZSgtdG9wTGVmdCk7Cit9CisKK3ZvaWQgUVN0eWxl
RmFjYWRlSW1wOjpwYWludENvbWJvQm94QXJyb3coUVBhaW50ZXIgKnBhaW50ZXIsIGNvbnN0IFFT
dHlsZUZhY2FkZU9wdGlvbiAmcHJveHlPcHRpb24pCit7CisgICAgUVdpZGdldCogd2lkZ2V0ID0g
cW9iamVjdF9jYXN0PFFXaWRnZXQqPih3aWRnZXRGb3JQYWludGVyKHBhaW50ZXIpKTsKKworICAg
IE1hcHBlZFN0eWxlT3B0aW9uPFFTdHlsZU9wdGlvbkNvbWJvQm94PiBvcHQod2lkZ2V0LCBwcm94
eU9wdGlvbik7CisgICAgb3B0LnN1YkNvbnRyb2xzID0gUVN0eWxlOjpTQ19Db21ib0JveEFycm93
OworICAgIC8vIGZvciBkcmF3aW5nIHRoZSBjb21ibyBib3ggYXJyb3csIHJlbHkgb25seSBvbiB0
aGUgZmFsbGJhY2sgc3R5bGUKKyAgICBtX2ZhbGxiYWNrU3R5bGUtPmRyYXdDb21wbGV4Q29udHJv
bChRU3R5bGU6OkNDX0NvbWJvQm94LCAmb3B0LCBwYWludGVyLCB3aWRnZXQpOworfQorCit2b2lk
IFFTdHlsZUZhY2FkZUltcDo6cGFpbnRTbGlkZXJUcmFjayhRUGFpbnRlciogcGFpbnRlciwgY29u
c3QgUVN0eWxlRmFjYWRlT3B0aW9uJiBwcm94eU9wdGlvbikKK3sKKyAgICBRV2lkZ2V0KiB3aWRn
ZXQgPSBxb2JqZWN0X2Nhc3Q8UVdpZGdldCo+KHdpZGdldEZvclBhaW50ZXIocGFpbnRlcikpOwor
CisgICAgTWFwcGVkU3R5bGVPcHRpb248UVN0eWxlT3B0aW9uU2xpZGVyPiBvcHRpb24od2lkZ2V0
LCBwcm94eU9wdGlvbik7CisgICAgb3B0aW9uLnN1YkNvbnRyb2xzID0gUVN0eWxlOjpTQ19TbGlk
ZXJHcm9vdmU7CisKKyAgICBvcHRpb24udXBzaWRlRG93biA9IHByb3h5T3B0aW9uLnNsaWRlci51
cHNpZGVEb3duOworICAgIG9wdGlvbi5taW5pbXVtID0gcHJveHlPcHRpb24uc2xpZGVyLm1pbmlt
dW07CisgICAgb3B0aW9uLm1heGltdW0gPSBwcm94eU9wdGlvbi5zbGlkZXIubWF4aW11bTsKKyAg
ICBvcHRpb24uc2xpZGVyUG9zaXRpb24gPSBwcm94eU9wdGlvbi5zbGlkZXIucG9zaXRpb247Cisg
ICAgb3B0aW9uLm9yaWVudGF0aW9uID0gcHJveHlPcHRpb24uc2xpZGVyLm9yaWVudGF0aW9uOwor
CisgICAgc3R5bGUoKS0+ZHJhd0NvbXBsZXhDb250cm9sKFFTdHlsZTo6Q0NfU2xpZGVyLCAmb3B0
aW9uLCBwYWludGVyLCB3aWRnZXQpOworCisgICAgaWYgKG9wdGlvbi5zdGF0ZSAmIFFTdHlsZTo6
U3RhdGVfSGFzRm9jdXMpIHsKKyAgICAgICAgUVN0eWxlT3B0aW9uRm9jdXNSZWN0IGZvY3VzT3B0
aW9uOworICAgICAgICBmb2N1c09wdGlvbi5yZWN0ID0gb3B0aW9uLnJlY3Q7CisgICAgICAgIHN0
eWxlKCktPmRyYXdQcmltaXRpdmUoUVN0eWxlOjpQRV9GcmFtZUZvY3VzUmVjdCwgJmZvY3VzT3B0
aW9uLCBwYWludGVyLCB3aWRnZXQpOworICAgIH0KK30KKwordm9pZCBRU3R5bGVGYWNhZGVJbXA6
OnBhaW50U2xpZGVyVGh1bWIoUVBhaW50ZXIqIHBhaW50ZXIsIGNvbnN0IFFTdHlsZUZhY2FkZU9w
dGlvbiYgcHJveHlPcHRpb24pCit7CisgICAgUVdpZGdldCogd2lkZ2V0ID0gcW9iamVjdF9jYXN0
PFFXaWRnZXQqPih3aWRnZXRGb3JQYWludGVyKHBhaW50ZXIpKTsKKworICAgIE1hcHBlZFN0eWxl
T3B0aW9uPFFTdHlsZU9wdGlvblNsaWRlcj4gb3B0aW9uKHdpZGdldCwgcHJveHlPcHRpb24pOwor
CisgICAgb3B0aW9uLnN1YkNvbnRyb2xzID0gUVN0eWxlOjpTQ19TbGlkZXJIYW5kbGU7CisgICAg
aWYgKG9wdGlvbi5zdGF0ZSAmIFFTdHlsZTo6U3RhdGVfU3Vua2VuKQorICAgICAgICBvcHRpb24u
YWN0aXZlU3ViQ29udHJvbHMgPSBRU3R5bGU6OlNDX1NsaWRlckhhbmRsZTsKKworICAgIHN0eWxl
KCktPmRyYXdDb21wbGV4Q29udHJvbChRU3R5bGU6OkNDX1NsaWRlciwgJm9wdGlvbiwgcGFpbnRl
ciwgd2lkZ2V0KTsKK30KKwordm9pZCBRU3R5bGVGYWNhZGVJbXA6OnBhaW50SW5uZXJTcGluQnV0
dG9uKFFQYWludGVyKiBwYWludGVyLCBjb25zdCBRU3R5bGVGYWNhZGVPcHRpb24mIHByb3h5T3B0
aW9uLCBib29sIHNwaW5Cb3hVcCkKK3sKKyAgICBRV2lkZ2V0KiB3aWRnZXQgPSBxb2JqZWN0X2Nh
c3Q8UVdpZGdldCo+KHdpZGdldEZvclBhaW50ZXIocGFpbnRlcikpOworCisgICAgTWFwcGVkU3R5
bGVPcHRpb248UVN0eWxlT3B0aW9uU3BpbkJveD4gb3B0aW9uKHdpZGdldCwgcHJveHlPcHRpb24p
OworCisgICAgb3B0aW9uLnN1YkNvbnRyb2xzID0gUVN0eWxlOjpTQ19TcGluQm94VXAgfCBRU3R5
bGU6OlNDX1NwaW5Cb3hEb3duOworICAgIGlmICghKG9wdGlvbi5zdGF0ZSAmIFFTdHlsZTo6U3Rh
dGVfUmVhZE9ubHkpKSB7CisgICAgICAgIGlmIChvcHRpb24uc3RhdGUgJiBRU3R5bGU6OlN0YXRl
X0VuYWJsZWQpCisgICAgICAgICAgICBvcHRpb24uc3RlcEVuYWJsZWQgPSBRQWJzdHJhY3RTcGlu
Qm94OjpTdGVwVXBFbmFibGVkIHwgUUFic3RyYWN0U3BpbkJveDo6U3RlcERvd25FbmFibGVkOwor
ICAgICAgICBpZiAob3B0aW9uLnN0YXRlICYgUVN0eWxlOjpTdGF0ZV9TdW5rZW4pIHsKKyAgICAg
ICAgICAgIGlmIChzcGluQm94VXApCisgICAgICAgICAgICAgICAgb3B0aW9uLmFjdGl2ZVN1YkNv
bnRyb2xzID0gUVN0eWxlOjpTQ19TcGluQm94VXA7CisgICAgICAgICAgICBlbHNlCisgICAgICAg
ICAgICAgICAgb3B0aW9uLmFjdGl2ZVN1YkNvbnRyb2xzID0gUVN0eWxlOjpTQ19TcGluQm94RG93
bjsKKyAgICAgICAgfQorICAgIH0KKworICAgIEludFJlY3QgYnV0dG9uUmVjdCA9IG9wdGlvbi5y
ZWN0OworICAgIC8vIERlZmF1bHQgdG8gbW92aW5nIHRoZSBidXR0b25zIGEgbGl0dGxlIGJpdCB3
aXRoaW4gdGhlIGVkaXRvciBmcmFtZS4KKyAgICBpbnQgaW5mbGF0ZVggPSAtMjsKKyAgICBpbnQg
aW5mbGF0ZVkgPSAtMjsKKyNpZiBkZWZpbmVkKFFfV1NfTUFDKSAmJiAhZGVmaW5lZChRVF9OT19T
VFlMRV9NQUMpCisgICAgLy8gUU1hY1N0eWxlIHdpbGwgcG9zaXRpb24gdGhlIGFxdWEgYnV0dG9u
cyBmbHVzaCB0byB0aGUgcmlnaHQuCisgICAgLy8gVGhpcyB3aWxsIG1vdmUgdGhlbSBtb3JlIHdp
dGhpbiB0aGUgY29udHJvbCBmb3IgYmV0dGVyIHN0eWxlLCBhIGxhCisgICAgLy8gQ2hyb21pdW0g
bG9vayAmIGZlZWwuCisgICAgaWYgKHFvYmplY3RfY2FzdDxRTWFjU3R5bGUqPihtX3N0eWxlKSkg
eworICAgICAgICBpbmZsYXRlWCA9IC00OworICAgICAgICAvLyBSZW5kZXIgbWluaSBhcXVhIHNw
aW4gYnV0dG9ucyBmb3IgUU1hY1N0eWxlIHRvIGZpdCBuaWNlbHkgaW50bworICAgICAgICAvLyB0
aGUgZWRpdG9yIGFyZWEsIGxpa2UgQ2hyb21pdW0uCisgICAgICAgIG9wdGlvbi5zdGF0ZSB8PSBR
U3R5bGU6OlN0YXRlX01pbmk7CisgICAgfQorI2VuZGlmCisjaWYgIWRlZmluZWQoUVRfTk9fU1RZ
TEVfUExBU1RJUVVFKQorICAgIC8vIFFQbGFzdGlxdWVTdHlsZSBsb29rcyBiZXN0IHdoZW4gdGhl
IHNwaW4gYnV0dG9ucyBhcmUgZmx1c2ggd2l0aCB0aGUgZnJhbWUncyBlZGdlLgorICAgIGlmIChx
b2JqZWN0X2Nhc3Q8UVBsYXN0aXF1ZVN0eWxlKj4oc3R5bGUoKSkpIHsKKyAgICAgICAgaW5mbGF0
ZVggPSAwOworICAgICAgICBpbmZsYXRlWSA9IDA7CisgICAgfQorI2VuZGlmCisKKyAgICBidXR0
b25SZWN0LmluZmxhdGVYKGluZmxhdGVYKTsKKyAgICBidXR0b25SZWN0LmluZmxhdGVZKGluZmxh
dGVZKTsKKyAgICBvcHRpb24ucmVjdCA9IGJ1dHRvblJlY3Q7CisKKyAgICBzdHlsZSgpLT5kcmF3
Q29tcGxleENvbnRyb2woUVN0eWxlOjpDQ19TcGluQm94LCAmb3B0aW9uLCBwYWludGVyLCB3aWRn
ZXQpOworfQorCit2b2lkIFFTdHlsZUZhY2FkZUltcDo6cGFpbnRQcm9ncmVzc0JhcihRUGFpbnRl
ciogcGFpbnRlciwgY29uc3QgUVN0eWxlRmFjYWRlT3B0aW9uJiBwcm94eU9wdGlvbiwgZG91Ymxl
IHByb2dyZXNzLCBkb3VibGUgYW5pbWF0aW9uUHJvZ3Jlc3MpCit7CisgICAgUVdpZGdldCogd2lk
Z2V0ID0gcW9iamVjdF9jYXN0PFFXaWRnZXQqPih3aWRnZXRGb3JQYWludGVyKHBhaW50ZXIpKTsK
KworICAgIE1hcHBlZFN0eWxlT3B0aW9uPFFTdHlsZU9wdGlvblByb2dyZXNzQmFyVjI+IG9wdGlv
bih3aWRnZXQsIHByb3h5T3B0aW9uKTsKKworICAgIG9wdGlvbi5tYXhpbXVtID0gc3RkOjpudW1l
cmljX2xpbWl0czxpbnQ+OjptYXgoKTsKKyAgICBvcHRpb24ubWluaW11bSA9IDA7CisgICAgb3B0
aW9uLnByb2dyZXNzID0gcHJvZ3Jlc3MgKiBzdGQ6Om51bWVyaWNfbGltaXRzPGludD46Om1heCgp
OworCisgICAgY29uc3QgUVBvaW50IHRvcExlZnQgPSBvcHRpb24ucmVjdC50b3BMZWZ0KCk7Cisg
ICAgcGFpbnRlci0+dHJhbnNsYXRlKHRvcExlZnQpOworICAgIG9wdGlvbi5yZWN0Lm1vdmVUbyhR
UG9pbnQoMCwgMCkpOworCisgICAgaWYgKHByb2dyZXNzIDwgMCkgeworICAgICAgICAvLyBGSVhN
RTogVW50aWwgaHR0cDovL2J1Z3JlcG9ydHMucXQubm9raWEuY29tL2Jyb3dzZS9RVEJVRy05MTcx
IGlzIGZpeGVkLAorICAgICAgICAvLyB3ZSBzaW11bGF0ZSBvbmUgc3F1YXJlIGFuaW1hdGluZyBh
Y3Jvc3MgdGhlIHByb2dyZXNzIGJhci4KKyAgICAgICAgc3R5bGUoKS0+ZHJhd0NvbnRyb2woUVN0
eWxlOjpDRV9Qcm9ncmVzc0Jhckdyb292ZSwgJm9wdGlvbiwgcGFpbnRlciwgd2lkZ2V0KTsKKyAg
ICAgICAgaW50IGNodW5rV2lkdGggPSBzdHlsZSgpLT5waXhlbE1ldHJpYyhRU3R5bGU6OlBNX1By
b2dyZXNzQmFyQ2h1bmtXaWR0aCwgJm9wdGlvbik7CisgICAgICAgIFFDb2xvciBjb2xvciA9IChv
cHRpb24ucGFsZXR0ZS5oaWdobGlnaHQoKSA9PSBvcHRpb24ucGFsZXR0ZS5iYWNrZ3JvdW5kKCkp
ID8gb3B0aW9uLnBhbGV0dGUuY29sb3IoUVBhbGV0dGU6OkFjdGl2ZSwgUVBhbGV0dGU6OkhpZ2hs
aWdodCkgOiBvcHRpb24ucGFsZXR0ZS5jb2xvcihRUGFsZXR0ZTo6SGlnaGxpZ2h0KTsKKyAgICAg
ICAgaWYgKG9wdGlvbi5kaXJlY3Rpb24gPT0gUXQ6OlJpZ2h0VG9MZWZ0KQorICAgICAgICAgICAg
cGFpbnRlci0+ZmlsbFJlY3Qob3B0aW9uLnJlY3QucmlnaHQoKSAtIGNodW5rV2lkdGggIC0gYW5p
bWF0aW9uUHJvZ3Jlc3MgKiBvcHRpb24ucmVjdC53aWR0aCgpLCAwLCBjaHVua1dpZHRoLCBvcHRp
b24ucmVjdC5oZWlnaHQoKSwgY29sb3IpOworICAgICAgICBlbHNlCisgICAgICAgICAgICBwYWlu
dGVyLT5maWxsUmVjdChhbmltYXRpb25Qcm9ncmVzcyAqIG9wdGlvbi5yZWN0LndpZHRoKCksIDAs
IGNodW5rV2lkdGgsIG9wdGlvbi5yZWN0LmhlaWdodCgpLCBjb2xvcik7CisgICAgfSBlbHNlCisg
ICAgICAgIHN0eWxlKCktPmRyYXdDb250cm9sKFFTdHlsZTo6Q0VfUHJvZ3Jlc3NCYXIsICZvcHRp
b24sIHBhaW50ZXIsIHdpZGdldCk7CisKKyAgICBwYWludGVyLT50cmFuc2xhdGUoLXRvcExlZnQp
OworfQorCitpbnQgUVN0eWxlRmFjYWRlSW1wOjpzY3JvbGxCYXJFeHRlbnQoYm9vbCBtaW5pKQor
eworICAgIFFTdHlsZU9wdGlvblNsaWRlciBvOworICAgIG8ub3JpZW50YXRpb24gPSBRdDo6VmVy
dGljYWw7CisgICAgby5zdGF0ZSAmPSB+UVN0eWxlOjpTdGF0ZV9Ib3Jpem9udGFsOworICAgIGlm
IChtaW5pKQorICAgICAgICBvLnN0YXRlIHw9IFFTdHlsZTo6U3RhdGVfTWluaTsKKyAgICByZXR1
cm4gc3R5bGUoKS0+cGl4ZWxNZXRyaWMoUVN0eWxlOjpQTV9TY3JvbGxCYXJFeHRlbnQsICZvLCAw
KTsKK30KKworYm9vbCBRU3R5bGVGYWNhZGVJbXA6OnNjcm9sbEJhck1pZGRsZUNsaWNrQWJzb2x1
dGVQb3NpdGlvblN0eWxlSGludCgpIGNvbnN0Cit7CisgICAgcmV0dXJuIHN0eWxlKCktPnN0eWxl
SGludChRU3R5bGU6OlNIX1Njcm9sbEJhcl9NaWRkbGVDbGlja0Fic29sdXRlUG9zaXRpb24pOwor
fQorCit2b2lkIFFTdHlsZUZhY2FkZUltcDo6cGFpbnRTY3JvbGxDb3JuZXIoUVBhaW50ZXIqIHBh
aW50ZXIsIGNvbnN0IFFSZWN0JiByZWN0KQoreworICAgIFFXaWRnZXQqIHdpZGdldCA9IHFvYmpl
Y3RfY2FzdDxRV2lkZ2V0Kj4od2lkZ2V0Rm9yUGFpbnRlcihwYWludGVyKSk7CisKKyAgICBRU3R5
bGVPcHRpb24gb3B0aW9uOworICAgIG9wdGlvbi5yZWN0ID0gcmVjdDsKKyAgICBzdHlsZSgpLT5k
cmF3UHJpbWl0aXZlKFFTdHlsZTo6UEVfUGFuZWxTY3JvbGxBcmVhQ29ybmVyLCAmb3B0aW9uLCBw
YWludGVyLCB3aWRnZXQpOworfQorCitRU3R5bGVGYWNhZGU6OlN1YkNvbnRyb2wgUVN0eWxlRmFj
YWRlSW1wOjpoaXRUZXN0U2Nyb2xsQmFyKGNvbnN0IFFTdHlsZUZhY2FkZU9wdGlvbiAmcHJveHlP
cHRpb24sIGNvbnN0IFFQb2ludCAmcG9zKQoreworICAgIE1hcHBlZFN0eWxlT3B0aW9uPFFTdHls
ZU9wdGlvblNsaWRlcj4gb3B0KDAsIHByb3h5T3B0aW9uKTsKKyAgICBRU3R5bGU6OlN1YkNvbnRy
b2wgc2MgPSBzdHlsZSgpLT5oaXRUZXN0Q29tcGxleENvbnRyb2woUVN0eWxlOjpDQ19TY3JvbGxC
YXIsICZvcHQsIHBvcywgMCk7CisgICAgcmV0dXJuIGNvbnZlcnRUb1FTdHlsZUZhY2FkZVN1YkNv
bnRyb2woc2MpOworfQorCitRUmVjdCBRU3R5bGVGYWNhZGVJbXA6OnNjcm9sbEJhclN1YkNvbnRy
b2xSZWN0KGNvbnN0IFFTdHlsZUZhY2FkZU9wdGlvbiAmcHJveHlPcHRpb24sIFFTdHlsZUZhY2Fk
ZTo6U3ViQ29udHJvbCBzdWJDb250cm9sKQoreworICAgIE1hcHBlZFN0eWxlT3B0aW9uPFFTdHls
ZU9wdGlvblNsaWRlcj4gb3B0KDAsIHByb3h5T3B0aW9uKTsKKyAgICByZXR1cm4gc3R5bGUoKS0+
c3ViQ29udHJvbFJlY3QoUVN0eWxlOjpDQ19TY3JvbGxCYXIsICZvcHQsIGNvbnZlcnRUb1FTdHls
ZVN1YkNvbnRyb2woc3ViQ29udHJvbCksIDApOworfQorCit2b2lkIFFTdHlsZUZhY2FkZUltcDo6
cGFpbnRTY3JvbGxCYXIoUVBhaW50ZXIgKnBhaW50ZXIsIGNvbnN0IFFTdHlsZUZhY2FkZU9wdGlv
biAmcHJveHlPcHRpb24pCit7CisgICAgUVdpZGdldCogd2lkZ2V0ID0gcW9iamVjdF9jYXN0PFFX
aWRnZXQqPih3aWRnZXRGb3JQYWludGVyKHBhaW50ZXIpKTsKKworICAgIE1hcHBlZFN0eWxlT3B0
aW9uPFFTdHlsZU9wdGlvblNsaWRlcj4gb3B0KHdpZGdldCwgcHJveHlPcHRpb24pOworCisjaWZk
ZWYgUV9XU19NQUMKKyAgICAvLyBGSVhNRTogV2UgYWxzbyBuZWVkIHRvIGNoZWNrIHRoZSB3aWRn
ZXQgc3R5bGUgYnV0IHRvZGF5IFNjcm9sbGJhclRoZW1lIGlzIG5vdCBhd2FyZSBvZiB0aGUgcGFn
ZSBzbyB3ZQorICAgIC8vIGNhbid0IGdldCB0aGUgd2lkZ2V0LgorICAgIGlmIChxb2JqZWN0X2Nh
c3Q8UU1hY1N0eWxlKj4obV9zdHlsZSkpCisgICAgICAgIG1fc3R5bGUtPmRyYXdDb21wbGV4Q29u
dHJvbChRU3R5bGU6OkNDX1Njcm9sbEJhciwgJm9wdCwgcGFpbnRlciwgd2lkZ2V0KTsKKyAgICBl
bHNlCisjZW5kaWYKKyAgICB7CisgICAgICAgIC8vIFRoZSBRU3R5bGUgZXhwZWN0cyB0aGUgYmFj
a2dyb3VuZCB0byBiZSBhbHJlYWR5IGZpbGxlZC4KKyAgICAgICAgcGFpbnRlci0+ZmlsbFJlY3Qo
b3B0LnJlY3QsIG9wdC5wYWxldHRlLmJhY2tncm91bmQoKSk7CisKKyAgICAgICAgY29uc3QgUVBv
aW50IHRvcExlZnQgPSBvcHQucmVjdC50b3BMZWZ0KCk7CisgICAgICAgIHBhaW50ZXItPnRyYW5z
bGF0ZSh0b3BMZWZ0KTsKKyAgICAgICAgb3B0LnJlY3QubW92ZVRvKFFQb2ludCgwLCAwKSk7Cisg
ICAgICAgIHN0eWxlKCktPmRyYXdDb21wbGV4Q29udHJvbChRU3R5bGU6OkNDX1Njcm9sbEJhciwg
Jm9wdCwgcGFpbnRlciwgd2lkZ2V0KTsKKyAgICAgICAgb3B0LnJlY3QubW92ZVRvKHRvcExlZnQp
OworICAgIH0KK30KKworUU9iamVjdCogUVN0eWxlRmFjYWRlSW1wOjp3aWRnZXRGb3JQYWludGVy
KFFQYWludGVyKiBwYWludGVyKQoreworICAgIFFQYWludERldmljZSogZGV2ID0gMDsKKyAgICBp
ZiAocGFpbnRlcikKKyAgICAgICAgZGV2ID0gcGFpbnRlci0+ZGV2aWNlKCk7CisgICAgaWYgKGRl
diAmJiBkZXYtPmRldlR5cGUoKSA9PSBRSW50ZXJuYWw6OldpZGdldCkKKyAgICAgICAgcmV0dXJu
IHN0YXRpY19jYXN0PFFXaWRnZXQqPihkZXYpOworICAgIHJldHVybiAwOworfQorCitRU3R5bGUq
IFFTdHlsZUZhY2FkZUltcDo6c3R5bGUoKSBjb25zdAoreworICAgIGlmIChtX3N0eWxlKQorICAg
ICAgICByZXR1cm4gbV9zdHlsZTsKKworICAgIG1fc3R5bGUgPSBRU3R5bGVGYWNhZGU6OnN0eWxl
Rm9yUGFnZShtX3BhZ2UpOworCisgICAgaWYgKCFtX3N0eWxlKQorICAgICAgICBtX3N0eWxlID0g
UUFwcGxpY2F0aW9uOjpzdHlsZSgpOworCisgICAgcmV0dXJuIG1fc3R5bGU7Cit9CisKK30KZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvcXQvV2ViQ29yZVN1cHBvcnQvUVN0eWxlRmFjYWRlSW1w
LmggYi9Tb3VyY2UvV2ViS2l0L3F0L1dlYkNvcmVTdXBwb3J0L1FTdHlsZUZhY2FkZUltcC5oCm5l
dyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAuLmNhNDRlMDhlMDQ3YmQ5NzU2MTk2OWNiNDBiNGEzZDdiYThlZDZkZWMKLS0tIC9k
ZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0L3F0L1dlYkNvcmVTdXBwb3J0L1FTdHlsZUZhY2Fk
ZUltcC5oCkBAIC0wLDAgKzEsOTcgQEAKKy8qCisgKiBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUg
dGhlbWUgaW1wbGVtZW50YXRpb24gZm9yIGZvcm0gY29udHJvbHMgaW4gV2ViQ29yZS4KKyAqCisg
KiBDb3B5cmlnaHQgKEMpIDIwMTIgRGlnaWEgUGxjIGFuZC9vciBpdHMgc3Vic2lkaWFyeSgtaWVz
KS4KKyAqIENvcHlyaWdodCAoQykgMjAxMS0yMDEyIE5va2lhIENvcnBvcmF0aW9uIGFuZC9vciBp
dHMgc3Vic2lkaWFyeSgtaWVzKS4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2Fy
ZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhl
IHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZSBhcyBw
dWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiB2ZXJz
aW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNp
b24uCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQg
aXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQg
ZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5F
U1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqIExpYnJhcnkgR2Vu
ZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQg
aGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExp
Y2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5M
SUIuICBJZiBub3QsIHdyaXRlIHRvCisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJ
bmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAorICogQm9zdG9uLCBNQSAwMjEx
MC0xMzAxLCBVU0EuCisgKgorICovCisjaWZuZGVmIFFTdHlsZUZhY2FkZUltcF9oCisjZGVmaW5l
IFFTdHlsZUZhY2FkZUltcF9oCisKKyNpbmNsdWRlIDxRU3R5bGVGYWNhZGUuaD4KKworUVRfQkVH
SU5fTkFNRVNQQUNFCitjbGFzcyBRU3R5bGU7CitjbGFzcyBRTGluZUVkaXQ7CitjbGFzcyBRU3R5
bGVPcHRpb247CitjbGFzcyBRU3R5bGVPcHRpb25TbGlkZXI7CitjbGFzcyBRUGFpbnRlcjsKK2Ns
YXNzIFFPYmplY3Q7CitRVF9FTkRfTkFNRVNQQUNFCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKK2Ns
YXNzIFBhZ2U7Cit9CisKK25hbWVzcGFjZSBXZWJLaXQgeworCitjbGFzcyBRU3R5bGVGYWNhZGVJ
bXAgOiBwdWJsaWMgV2ViQ29yZTo6UVN0eWxlRmFjYWRlIHsKK3B1YmxpYzoKKyAgICBRU3R5bGVG
YWNhZGVJbXAoV2ViQ29yZTo6UGFnZSogPSAwKTsKKyAgICB2aXJ0dWFsIH5RU3R5bGVGYWNhZGVJ
bXAoKTsKKworICAgIHN0YXRpYyBXZWJDb3JlOjpRU3R5bGVGYWNhZGUqIGNyZWF0ZShXZWJDb3Jl
OjpQYWdlKiBwYWdlKQorICAgIHsgcmV0dXJuIG5ldyBRU3R5bGVGYWNhZGVJbXAocGFnZSk7IH0K
KworICAgIHZpcnR1YWwgUVJlY3QgYnV0dG9uU3ViRWxlbWVudFJlY3QoQnV0dG9uU3ViRWxlbWVu
dCwgU3RhdGUsIGNvbnN0IFFSZWN0JiBvcmlnaW5hbFJlY3QpIGNvbnN0OworCisgICAgdmlydHVh
bCBpbnQgZmluZEZyYW1lTGluZVdpZHRoKCkgY29uc3Q7CisgICAgdmlydHVhbCBpbnQgc2ltcGxl
UGl4ZWxNZXRyaWMoUGl4ZWxNZXRyaWMsIFN0YXRlID0gU3RhdGVfTm9uZSkgY29uc3Q7CisgICAg
dmlydHVhbCBpbnQgYnV0dG9uTWFyZ2luKFN0YXRlLCBjb25zdCBRUmVjdCYgb3JpZ2luYWxSZWN0
KSBjb25zdDsKKyAgICB2aXJ0dWFsIGludCBzbGlkZXJMZW5ndGgoUXQ6Ok9yaWVudGF0aW9uKSBj
b25zdDsKKyAgICB2aXJ0dWFsIGludCBzbGlkZXJUaGlja25lc3MoUXQ6Ok9yaWVudGF0aW9uKSBj
b25zdDsKKyAgICB2aXJ0dWFsIGludCBwcm9ncmVzc0JhckNodW5rV2lkdGgoY29uc3QgUVNpemUm
KSBjb25zdDsKKyAgICB2aXJ0dWFsIHZvaWQgZ2V0QnV0dG9uTWV0cmljcyhRU3RyaW5nKiBidXR0
b25Gb250RmFtaWx5LCBpbnQqIGJ1dHRvbkZvbnRQaXhlbFNpemUpIGNvbnN0OworCisgICAgdmly
dHVhbCBRU2l6ZSBzaXplRnJvbUNvbnRlbnRzKENvbnRlbnRzVHlwZSwgUVN0eWxlRmFjYWRlOjpT
dGF0ZSwgY29uc3QgUVNpemUmKSBjb25zdDsKKworICAgIHZpcnR1YWwgdm9pZCBwYWludEJ1dHRv
bihRUGFpbnRlciosIEJ1dHRvblR5cGUsIGNvbnN0IFdlYkNvcmU6OlFTdHlsZUZhY2FkZU9wdGlv
biAmcHJveHlPcHRpb24pOworICAgIHZpcnR1YWwgdm9pZCBwYWludFRleHRGaWVsZChRUGFpbnRl
ciosIGNvbnN0IFdlYkNvcmU6OlFTdHlsZUZhY2FkZU9wdGlvbiYpOworICAgIHZpcnR1YWwgdm9p
ZCBwYWludENvbWJvQm94KFFQYWludGVyKiwgY29uc3QgV2ViQ29yZTo6UVN0eWxlRmFjYWRlT3B0
aW9uJik7CisgICAgdmlydHVhbCB2b2lkIHBhaW50Q29tYm9Cb3hBcnJvdyhRUGFpbnRlciosIGNv
bnN0IFdlYkNvcmU6OlFTdHlsZUZhY2FkZU9wdGlvbiYpOworCisgICAgdmlydHVhbCB2b2lkIHBh
aW50U2xpZGVyVHJhY2soUVBhaW50ZXIqLCBjb25zdCBXZWJDb3JlOjpRU3R5bGVGYWNhZGVPcHRp
b24mKTsKKyAgICB2aXJ0dWFsIHZvaWQgcGFpbnRTbGlkZXJUaHVtYihRUGFpbnRlciosIGNvbnN0
IFdlYkNvcmU6OlFTdHlsZUZhY2FkZU9wdGlvbiYpOworICAgIHZpcnR1YWwgdm9pZCBwYWludElu
bmVyU3BpbkJ1dHRvbihRUGFpbnRlciosIGNvbnN0IFdlYkNvcmU6OlFTdHlsZUZhY2FkZU9wdGlv
biYsIGJvb2wgc3BpbkJveFVwKTsKKyAgICB2aXJ0dWFsIHZvaWQgcGFpbnRQcm9ncmVzc0JhcihR
UGFpbnRlciosIGNvbnN0IFdlYkNvcmU6OlFTdHlsZUZhY2FkZU9wdGlvbiYsIGRvdWJsZSBwcm9n
cmVzcywgZG91YmxlIGFuaW1hdGlvblByb2dyZXNzKTsKKworICAgIHZpcnR1YWwgaW50IHNjcm9s
bEJhckV4dGVudChib29sIG1pbmkpOworICAgIHZpcnR1YWwgYm9vbCBzY3JvbGxCYXJNaWRkbGVD
bGlja0Fic29sdXRlUG9zaXRpb25TdHlsZUhpbnQoKSBjb25zdDsKKyAgICB2aXJ0dWFsIHZvaWQg
cGFpbnRTY3JvbGxDb3JuZXIoUVBhaW50ZXIqLCBjb25zdCBRUmVjdCYpOworCisgICAgdmlydHVh
bCBTdWJDb250cm9sIGhpdFRlc3RTY3JvbGxCYXIoY29uc3QgV2ViQ29yZTo6UVN0eWxlRmFjYWRl
T3B0aW9uJiwgY29uc3QgUVBvaW50JiBwb3MpOworICAgIHZpcnR1YWwgUVJlY3Qgc2Nyb2xsQmFy
U3ViQ29udHJvbFJlY3QoY29uc3QgV2ViQ29yZTo6UVN0eWxlRmFjYWRlT3B0aW9uJiwgU3ViQ29u
dHJvbCk7CisgICAgdmlydHVhbCB2b2lkIHBhaW50U2Nyb2xsQmFyKFFQYWludGVyKiwgY29uc3Qg
V2ViQ29yZTo6UVN0eWxlRmFjYWRlT3B0aW9uJik7CisKKyAgICB2aXJ0dWFsIFFPYmplY3QqIHdp
ZGdldEZvclBhaW50ZXIoUVBhaW50ZXIqKTsKKworICAgIHZpcnR1YWwgYm9vbCBpc1ZhbGlkKCkg
Y29uc3QgeyByZXR1cm4gc3R5bGUoKTsgfQorCitwcml2YXRlOgorICAgIFFTdHlsZSogc3R5bGUo
KSBjb25zdDsKKworICAgIFdlYkNvcmU6OlBhZ2UqIG1fcGFnZTsKKyAgICBtdXRhYmxlIFFTdHls
ZSogbV9zdHlsZTsKKyAgICBRU3R5bGUqIG1fZmFsbGJhY2tTdHlsZTsKKyAgICBib29sIG1fb3du
RmFsbGJhY2tTdHlsZTsKKyAgICBtdXRhYmxlIFFTY29wZWRQb2ludGVyPFFMaW5lRWRpdD4gbV9s
aW5lRWRpdDsKK307CisKK30KKworI2VuZGlmIC8vIFFTdHlsZUZhY2FkZUltcF9oCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViS2l0L3F0L1dlYkNvcmVTdXBwb3J0L1JlbmRlclRoZW1lUVN0eWxlLmNw
cCBiL1NvdXJjZS9XZWJLaXQvcXQvV2ViQ29yZVN1cHBvcnQvUmVuZGVyVGhlbWVRU3R5bGUuY3Bw
CmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4YmMwZGY0OTc0NTM1OWQ2Njg4NzdjYTg3
ZDRiZWI1MjI5NzI0MWY3Li4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
Ci0tLSBhL1NvdXJjZS9XZWJLaXQvcXQvV2ViQ29yZVN1cHBvcnQvUmVuZGVyVGhlbWVRU3R5bGUu
Y3BwCisrKyAvZGV2L251bGwKQEAgLTEsODI3ICswLDAgQEAKLS8qCi0gKiBUaGlzIGZpbGUgaXMg
cGFydCBvZiB0aGUgV2ViS2l0IHByb2plY3QuCi0gKgotICogQ29weXJpZ2h0IChDKSAyMDA4LTIw
MTIgTm9raWEgQ29ycG9yYXRpb24gYW5kL29yIGl0cyBzdWJzaWRpYXJ5KC1pZXMpCi0gKgotICog
Q29weXJpZ2h0IChDKSAyMDA2IFphY2sgUnVzaW4gPHphY2tAa2RlLm9yZz4KLSAqICAgICAgICAg
ICAgICAgMjAwNiBEaXJrIE11ZWxsZXIgPG11ZWxsZXJAa2RlLm9yZz4KLSAqICAgICAgICAgICAg
ICAgMjAwNiBOaWtvbGFzIFppbW1lcm1hbm4gPHppbW1lcm1hbm5Aa2RlLm9yZz4KLSAqIENvcHly
aWdodCAoQykgMjAwOCBIb2xnZXIgSGFucyBQZXRlciBGcmV5dGhlcgotICoKLSAqIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCi0gKgotICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBj
YW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgotICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBv
ZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKLSAqIExpY2Vuc2UgYXMgcHVibGlzaGVk
IGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgotICogdmVyc2lvbiAyIG9m
IHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotICoK
LSAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwg
YmUgdXNlZnVsLAotICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhl
IGltcGxpZWQgd2FycmFudHkgb2YKLSAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBB
IFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCi0gKiBMaWJyYXJ5IEdlbmVyYWwgUHVi
bGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSAqCi0gKiBZb3Ugc2hvdWxkIGhhdmUgcmVj
ZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCi0g
KiBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYg
bm90LCB3cml0ZSB0bwotICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEg
RnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKLSAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwg
VVNBLgotICoKLSAqLwotCi0jaW5jbHVkZSAiY29uZmlnLmgiCi0jaW5jbHVkZSAiUmVuZGVyVGhl
bWVRU3R5bGUuaCIKLQotI2luY2x1ZGUgIkNTU0ZvbnRTZWxlY3Rvci5oIgotI2luY2x1ZGUgIkNT
U1ZhbHVlS2V5d29yZHMuaCIKLSNpbmNsdWRlICJDaHJvbWUuaCIKLSNpbmNsdWRlICJDaHJvbWVD
bGllbnQuaCIKLSNpbmNsdWRlICJDb2xvci5oIgotI2luY2x1ZGUgIkRvY3VtZW50LmgiCi0jaW5j
bHVkZSAiRm9udC5oIgotI2luY2x1ZGUgIkZvbnRTZWxlY3Rvci5oIgotI2luY2x1ZGUgIkdyYXBo
aWNzQ29udGV4dC5oIgotI2luY2x1ZGUgIkhUTUxJbnB1dEVsZW1lbnQuaCIKLSNpbmNsdWRlICJI
VE1MTmFtZXMuaCIKLSNpbmNsdWRlICJMb2NhbGl6ZWRTdHJpbmdzLmgiCi0jaW5jbHVkZSAiTm90
SW1wbGVtZW50ZWQuaCIKLSNpbmNsdWRlICJQYWdlLmgiCi0jaW5jbHVkZSAiUGFpbnRJbmZvLmgi
Ci0jaW5jbHVkZSAiUVdlYlBhZ2VDbGllbnQuaCIKLSNpbmNsdWRlICJSZW5kZXJCb3guaCIKLSNp
ZiBFTkFCTEUoUFJPR1JFU1NfRUxFTUVOVCkKLSNpbmNsdWRlICJSZW5kZXJQcm9ncmVzcy5oIgot
I2VuZGlmCi0jaW5jbHVkZSAiUmVuZGVyU2xpZGVyLmgiCi0jaW5jbHVkZSAiU2Nyb2xsYmFyVGhl
bWVRU3R5bGUuaCIKLSNpbmNsdWRlICJTbGlkZXJUaHVtYkVsZW1lbnQuaCIKLSNpbmNsdWRlICJT
dHlsZVJlc29sdmVyLmgiCi0jaW5jbHVkZSAiVXNlckFnZW50U3R5bGVTaGVldHMuaCIKLQotI2lu
Y2x1ZGUgPFFBcHBsaWNhdGlvbj4KLSNpbmNsdWRlIDxRQ29sb3I+Ci0jaW5jbHVkZSA8UUZpbGU+
Ci0jaW5jbHVkZSA8UUZvbnRNZXRyaWNzPgotI2luY2x1ZGUgPFFMaW5lRWRpdD4KLSNpbmNsdWRl
IDxRTWFjU3R5bGU+Ci0jaW5jbHVkZSA8UVBhaW50ZXI+Ci0jaWZuZGVmIFFUX05PX1NUWUxFX1BM
QVNUSVFVRQotI2luY2x1ZGUgPFFQbGFzdGlxdWVTdHlsZT4KLSNlbmRpZgotI2luY2x1ZGUgPFFQ
dXNoQnV0dG9uPgotI2luY2x1ZGUgPFFTdHlsZUZhY3Rvcnk+Ci0jaW5jbHVkZSA8UVN0eWxlT3B0
aW9uQnV0dG9uPgotI2luY2x1ZGUgPFFTdHlsZU9wdGlvbkZyYW1lVjI+Ci0jaWYgRU5BQkxFKFBS
T0dSRVNTX0VMRU1FTlQpCi0jaW5jbHVkZSA8UVN0eWxlT3B0aW9uUHJvZ3Jlc3NCYXJWMj4KLSNl
bmRpZgotI2luY2x1ZGUgPFFTdHlsZU9wdGlvblNsaWRlcj4KLSNpbmNsdWRlIDxRV2lkZ2V0Pgot
Ci1uYW1lc3BhY2UgV2ViQ29yZSB7Ci0KLXVzaW5nIG5hbWVzcGFjZSBIVE1MTmFtZXM7Ci0KLWlu
bGluZSBzdGF0aWMgdm9pZCBpbml0U3R5bGVPcHRpb24oUVdpZGdldCogd2lkZ2V0LCBRU3R5bGVP
cHRpb24mIG9wdGlvbikKLXsKLSAgICBpZiAod2lkZ2V0KQotICAgICAgICBvcHRpb24uaW5pdEZy
b20od2lkZ2V0KTsKLSAgICBlbHNlIHsKLSAgICAgICAgLy8gSWYgYSB3aWRnZXQgaXMgbm90IGRp
cmVjdGx5IGF2YWlsYWJsZSBmb3IgcmVuZGVyaW5nLCB3ZSBmYWxsYmFjayB0byBkZWZhdWx0Ci0g
ICAgICAgIC8vIHZhbHVlIGZvciBhbiBhY3RpdmUgd2lkZ2V0LgotICAgICAgICBvcHRpb24uc3Rh
dGUgPSBRU3R5bGU6OlN0YXRlX0FjdGl2ZSB8IFFTdHlsZTo6U3RhdGVfRW5hYmxlZDsKLSAgICB9
Ci19Ci0KLQotUVNoYXJlZFBvaW50ZXI8U3R5bGVQYWludGVyPiBSZW5kZXJUaGVtZVFTdHlsZTo6
Z2V0U3R5bGVQYWludGVyKGNvbnN0IFBhaW50SW5mbyYgcGFpbnRJbmZvKQotewotICAgIHJldHVy
biBRU2hhcmVkUG9pbnRlcjxTdHlsZVBhaW50ZXI+KG5ldyBTdHlsZVBhaW50ZXJRU3R5bGUodGhp
cywgcGFpbnRJbmZvKSk7Ci19Ci0KLVN0eWxlUGFpbnRlclFTdHlsZTo6U3R5bGVQYWludGVyUVN0
eWxlKFJlbmRlclRoZW1lUVN0eWxlKiB0aGVtZSwgY29uc3QgUGFpbnRJbmZvJiBwYWludEluZm8p
Ci0gICAgOiBTdHlsZVBhaW50ZXIodGhlbWUsIHBhaW50SW5mbykKLXsKLSAgICBpbml0KHBhaW50
SW5mby5jb250ZXh0ID8gcGFpbnRJbmZvLmNvbnRleHQgOiAwLCB0aGVtZS0+cVN0eWxlKCkpOwot
fQotCi1TdHlsZVBhaW50ZXJRU3R5bGU6OlN0eWxlUGFpbnRlclFTdHlsZShTY3JvbGxiYXJUaGVt
ZVFTdHlsZSogdGhlbWUsIEdyYXBoaWNzQ29udGV4dCogY29udGV4dCkKLSAgICA6IFN0eWxlUGFp
bnRlcigpCi17Ci0gICAgaW5pdChjb250ZXh0LCB0aGVtZS0+c3R5bGUoKSk7Ci19Ci0KLXZvaWQg
U3R5bGVQYWludGVyUVN0eWxlOjppbml0KEdyYXBoaWNzQ29udGV4dCogY29udGV4dCwgUVN0eWxl
KiB0aGVtZVN0eWxlKQotewotICAgIHBhaW50ZXIgPSBzdGF0aWNfY2FzdDxRUGFpbnRlcio+KGNv
bnRleHQtPnBsYXRmb3JtQ29udGV4dCgpKTsKLSAgICB3aWRnZXQgPSAwOwotICAgIFFQYWludERl
dmljZSogZGV2ID0gMDsKLSAgICBpZiAocGFpbnRlcikKLSAgICAgICAgZGV2ID0gcGFpbnRlci0+
ZGV2aWNlKCk7Ci0gICAgaWYgKGRldiAmJiBkZXYtPmRldlR5cGUoKSA9PSBRSW50ZXJuYWw6Oldp
ZGdldCkKLSAgICAgICAgd2lkZ2V0ID0gc3RhdGljX2Nhc3Q8UVdpZGdldCo+KGRldik7Ci0gICAg
c3R5bGUgPSB0aGVtZVN0eWxlOwotCi0gICAgU3R5bGVQYWludGVyOjppbml0KGNvbnRleHQpOwot
fQotCi1QYXNzUmVmUHRyPFJlbmRlclRoZW1lPiBSZW5kZXJUaGVtZVFTdHlsZTo6Y3JlYXRlKFBh
Z2UqIHBhZ2UpCi17Ci0gICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBSZW5kZXJUaGVtZVFTdHlsZShw
YWdlKSk7Ci19Ci0KLVJlbmRlclRoZW1lUVN0eWxlOjpSZW5kZXJUaGVtZVFTdHlsZShQYWdlKiBw
YWdlKQotICAgIDogUmVuZGVyVGhlbWVRdChwYWdlKQotI2lmbmRlZiBRVF9OT19MSU5FRURJVAot
ICAgICwgbV9saW5lRWRpdCgwKQotI2VuZGlmCi17Ci0gICAgUVB1c2hCdXR0b24gYnV0dG9uOwot
ICAgIFFGb250IGRlZmF1bHRCdXR0b25Gb250ID0gUUFwcGxpY2F0aW9uOjpmb250KCZidXR0b24p
OwotICAgIG1fYnV0dG9uRm9udEZhbWlseSA9IGRlZmF1bHRCdXR0b25Gb250LmZhbWlseSgpOwot
I2lmZGVmIFFfV1NfTUFDCi0gICAgYnV0dG9uLnNldEF0dHJpYnV0ZShRdDo6V0FfTWFjU21hbGxT
aXplKTsKLSAgICBRRm9udEluZm8gZm9udEluZm8oZGVmYXVsdEJ1dHRvbkZvbnQpOwotICAgIG1f
YnV0dG9uRm9udFBpeGVsU2l6ZSA9IGZvbnRJbmZvLnBpeGVsU2l6ZSgpOwotI2VuZGlmCi0KLSAg
ICBtX2ZhbGxiYWNrU3R5bGUgPSBRU3R5bGVGYWN0b3J5OjpjcmVhdGUoUUxhdGluMVN0cmluZygi
d2luZG93cyIpKTsKLX0KLQotUmVuZGVyVGhlbWVRU3R5bGU6On5SZW5kZXJUaGVtZVFTdHlsZSgp
Ci17Ci0gICAgZGVsZXRlIG1fZmFsbGJhY2tTdHlsZTsKLSNpZm5kZWYgUVRfTk9fTElORUVESVQK
LSAgICBkZWxldGUgbV9saW5lRWRpdDsKLSNlbmRpZgotfQotCi0KLS8vIGZvciBzb21lIHdpZGdl
dCBwYWludGluZywgd2UgbmVlZCB0byBmYWxsYmFjayB0byBXaW5kb3dzIHN0eWxlCi1RU3R5bGUq
IFJlbmRlclRoZW1lUVN0eWxlOjpmYWxsYmFja1N0eWxlKCkgY29uc3QKLXsKLSAgICByZXR1cm4g
KG1fZmFsbGJhY2tTdHlsZSkgPyBtX2ZhbGxiYWNrU3R5bGUgOiBRQXBwbGljYXRpb246OnN0eWxl
KCk7Ci19Ci0KLXZvaWQgUmVuZGVyVGhlbWVRU3R5bGU6OnNldFBhbGV0dGVGcm9tUGFnZUNsaWVu
dElmRXhpc3RzKFFQYWxldHRlJiBwYWxldHRlKSBjb25zdAotewotICAgIGlmICghbV9wYWdlKQot
ICAgICAgICByZXR1cm47Ci0KLSAgICBBU1NFUlQobV9wYWdlLT5jaHJvbWUoKSk7Ci0gICAgQ2hy
b21lQ2xpZW50KiBjaHJvbWVDbGllbnQgPSBtX3BhZ2UtPmNocm9tZSgpLT5jbGllbnQoKTsKLSAg
ICBpZiAoIWNocm9tZUNsaWVudCkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgaWYgKFFXZWJQYWdl
Q2xpZW50KiBwYWdlQ2xpZW50ID0gY2hyb21lQ2xpZW50LT5wbGF0Zm9ybVBhZ2VDbGllbnQoKSkK
LSAgICAgICAgcGFsZXR0ZSA9IHBhZ2VDbGllbnQtPnBhbGV0dGUoKTsKLX0KLQotUVN0eWxlKiBS
ZW5kZXJUaGVtZVFTdHlsZTo6cVN0eWxlKCkgY29uc3QKLXsKLSAgICBpZiAobV9wYWdlKSB7Ci0g
ICAgICAgIFFXZWJQYWdlQ2xpZW50KiBwYWdlQ2xpZW50ID0gbV9wYWdlLT5jaHJvbWUoKS0+Y2xp
ZW50KCktPnBsYXRmb3JtUGFnZUNsaWVudCgpOwotCi0gICAgICAgIGlmIChwYWdlQ2xpZW50KQot
ICAgICAgICAgICAgcmV0dXJuIHBhZ2VDbGllbnQtPnN0eWxlKCk7Ci0gICAgfQotCi0gICAgcmV0
dXJuIFFBcHBsaWNhdGlvbjo6c3R5bGUoKTsKLX0KLQotaW50IFJlbmRlclRoZW1lUVN0eWxlOjpm
aW5kRnJhbWVMaW5lV2lkdGgoUVN0eWxlKiBzdHlsZSkgY29uc3QKLXsKLSNpZm5kZWYgUVRfTk9f
TElORUVESVQKLSAgICBpZiAoIW1fbGluZUVkaXQpCi0gICAgICAgIG1fbGluZUVkaXQgPSBuZXcg
UUxpbmVFZGl0KCk7Ci0jZW5kaWYKLQotICAgIFFTdHlsZU9wdGlvbkZyYW1lVjIgb3B0OwotICAg
IFFXaWRnZXQqIHdpZGdldCA9IDA7Ci0jaWZuZGVmIFFUX05PX0xJTkVFRElUCi0gICAgd2lkZ2V0
ID0gbV9saW5lRWRpdDsKLSNlbmRpZgotICAgIHJldHVybiBzdHlsZS0+cGl4ZWxNZXRyaWMoUVN0
eWxlOjpQTV9EZWZhdWx0RnJhbWVXaWR0aCwgJm9wdCwgd2lkZ2V0KTsKLX0KLQotUVJlY3QgUmVu
ZGVyVGhlbWVRU3R5bGU6OmluZmxhdGVCdXR0b25SZWN0KGNvbnN0IFFSZWN0JiBvcmlnaW5hbFJl
Y3QpIGNvbnN0Ci17Ci0gICAgUVN0eWxlT3B0aW9uQnV0dG9uIG9wdGlvbjsKLSAgICBvcHRpb24u
c3RhdGUgfD0gUVN0eWxlOjpTdGF0ZV9TbWFsbDsKLSAgICBvcHRpb24ucmVjdCA9IG9yaWdpbmFs
UmVjdDsKLQotICAgIFFSZWN0IGxheW91dFJlY3QgPSBxU3R5bGUoKS0+c3ViRWxlbWVudFJlY3Qo
UVN0eWxlOjpTRV9QdXNoQnV0dG9uTGF5b3V0SXRlbSwgJm9wdGlvbiwgMCk7Ci0gICAgaWYgKCFs
YXlvdXRSZWN0LmlzTnVsbCgpKSB7Ci0gICAgICAgIGludCBwYWRkaW5nTGVmdCA9IGxheW91dFJl
Y3QubGVmdCgpIC0gb3JpZ2luYWxSZWN0LmxlZnQoKTsKLSAgICAgICAgaW50IHBhZGRpbmdSaWdo
dCA9IG9yaWdpbmFsUmVjdC5yaWdodCgpIC0gbGF5b3V0UmVjdC5yaWdodCgpOwotICAgICAgICBp
bnQgcGFkZGluZ1RvcCA9IGxheW91dFJlY3QudG9wKCkgLSBvcmlnaW5hbFJlY3QudG9wKCk7Ci0g
ICAgICAgIGludCBwYWRkaW5nQm90dG9tID0gb3JpZ2luYWxSZWN0LmJvdHRvbSgpIC0gbGF5b3V0
UmVjdC5ib3R0b20oKTsKLQotICAgICAgICByZXR1cm4gb3JpZ2luYWxSZWN0LmFkanVzdGVkKC1w
YWRkaW5nTGVmdCwgLXBhZGRpbmdUb3AsIHBhZGRpbmdSaWdodCwgcGFkZGluZ0JvdHRvbSk7Ci0g
ICAgfQotICAgIHJldHVybiBvcmlnaW5hbFJlY3Q7Ci19Ci0KLXZvaWQgUmVuZGVyVGhlbWVRU3R5
bGU6OmNvbXB1dGVTaXplQmFzZWRPblN0eWxlKFJlbmRlclN0eWxlKiByZW5kZXJTdHlsZSkgY29u
c3QKLXsKLSAgICBRU2l6ZSBzaXplKDAsIDApOwotICAgIGNvbnN0IFFGb250TWV0cmljcyBmbShy
ZW5kZXJTdHlsZS0+Zm9udCgpLnN5bnRoZXRpY0ZvbnQoKSk7Ci0gICAgUVN0eWxlKiBzdHlsZSA9
IHFTdHlsZSgpOwotCi0gICAgc3dpdGNoIChyZW5kZXJTdHlsZS0+YXBwZWFyYW5jZSgpKSB7Ci0g
ICAgY2FzZSBUZXh0QXJlYVBhcnQ6Ci0gICAgY2FzZSBTZWFyY2hGaWVsZFBhcnQ6Ci0gICAgY2Fz
ZSBUZXh0RmllbGRQYXJ0OiB7Ci0gICAgICAgIGludCBwYWRkaW5nID0gZmluZEZyYW1lTGluZVdp
ZHRoKHN0eWxlKTsKLSAgICAgICAgcmVuZGVyU3R5bGUtPnNldFBhZGRpbmdMZWZ0KExlbmd0aChw
YWRkaW5nLCBGaXhlZCkpOwotICAgICAgICByZW5kZXJTdHlsZS0+c2V0UGFkZGluZ1JpZ2h0KExl
bmd0aChwYWRkaW5nLCBGaXhlZCkpOwotICAgICAgICByZW5kZXJTdHlsZS0+c2V0UGFkZGluZ1Rv
cChMZW5ndGgocGFkZGluZywgRml4ZWQpKTsKLSAgICAgICAgcmVuZGVyU3R5bGUtPnNldFBhZGRp
bmdCb3R0b20oTGVuZ3RoKHBhZGRpbmcsIEZpeGVkKSk7Ci0gICAgICAgIGJyZWFrOwotICAgIH0K
LSAgICBkZWZhdWx0OgotICAgICAgICBicmVhazsKLSAgICB9Ci0gICAgLy8gSWYgdGhlIHdpZHRo
IGFuZCBoZWlnaHQgYXJlIGJvdGggc3BlY2lmaWVkLCB0aGVuIHdlIGhhdmUgbm90aGluZyB0byBk
by4KLSAgICBpZiAoIXJlbmRlclN0eWxlLT53aWR0aCgpLmlzSW50cmluc2ljT3JBdXRvKCkgJiYg
IXJlbmRlclN0eWxlLT5oZWlnaHQoKS5pc0F1dG8oKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAg
c3dpdGNoIChyZW5kZXJTdHlsZS0+YXBwZWFyYW5jZSgpKSB7Ci0gICAgY2FzZSBDaGVja2JveFBh
cnQ6IHsKLSAgICAgICAgUVN0eWxlT3B0aW9uIHN0eWxlT3B0aW9uOwotICAgICAgICBzdHlsZU9w
dGlvbi5zdGF0ZSB8PSBRU3R5bGU6OlN0YXRlX1NtYWxsOwotICAgICAgICBpbnQgY2hlY2tCb3hX
aWR0aCA9IHN0eWxlLT5waXhlbE1ldHJpYyhRU3R5bGU6OlBNX0luZGljYXRvcldpZHRoLCAmc3R5
bGVPcHRpb24pOwotICAgICAgICBjaGVja0JveFdpZHRoICo9IHJlbmRlclN0eWxlLT5lZmZlY3Rp
dmVab29tKCk7Ci0gICAgICAgIHNpemUgPSBRU2l6ZShjaGVja0JveFdpZHRoLCBjaGVja0JveFdp
ZHRoKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgfQotICAgIGNhc2UgUmFkaW9QYXJ0OiB7Ci0gICAg
ICAgIFFTdHlsZU9wdGlvbiBzdHlsZU9wdGlvbjsKLSAgICAgICAgc3R5bGVPcHRpb24uc3RhdGUg
fD0gUVN0eWxlOjpTdGF0ZV9TbWFsbDsKLSAgICAgICAgaW50IHJhZGlvV2lkdGggPSBzdHlsZS0+
cGl4ZWxNZXRyaWMoUVN0eWxlOjpQTV9FeGNsdXNpdmVJbmRpY2F0b3JXaWR0aCwgJnN0eWxlT3B0
aW9uKTsKLSAgICAgICAgcmFkaW9XaWR0aCAqPSByZW5kZXJTdHlsZS0+ZWZmZWN0aXZlWm9vbSgp
OwotICAgICAgICBzaXplID0gUVNpemUocmFkaW9XaWR0aCwgcmFkaW9XaWR0aCk7Ci0gICAgICAg
IGJyZWFrOwotICAgIH0KLSAgICBjYXNlIFB1c2hCdXR0b25QYXJ0OgotICAgIGNhc2UgQnV0dG9u
UGFydDogewotICAgICAgICBRU3R5bGVPcHRpb25CdXR0b24gc3R5bGVPcHRpb247Ci0gICAgICAg
IHN0eWxlT3B0aW9uLnN0YXRlIHw9IFFTdHlsZTo6U3RhdGVfU21hbGw7Ci0gICAgICAgIFFTaXpl
IGNvbnRlbnRTaXplID0gZm0uc2l6ZShRdDo6VGV4dFNob3dNbmVtb25pYywgUVN0cmluZzo6ZnJv
bUxhdGluMSgiWCIpKTsKLSAgICAgICAgUVNpemUgcHVzaEJ1dHRvblNpemUgPSBzdHlsZS0+c2l6
ZUZyb21Db250ZW50cyhRU3R5bGU6OkNUX1B1c2hCdXR0b24sCi0gICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJnN0eWxlT3B0aW9uLCBjb250ZW50
U2l6ZSwgMCk7Ci0gICAgICAgIHN0eWxlT3B0aW9uLnJlY3QgPSBRUmVjdCgwLCAwLCBwdXNoQnV0
dG9uU2l6ZS53aWR0aCgpLCBwdXNoQnV0dG9uU2l6ZS5oZWlnaHQoKSk7Ci0gICAgICAgIFFSZWN0
IGxheW91dFJlY3QgPSBzdHlsZS0+c3ViRWxlbWVudFJlY3QoUVN0eWxlOjpTRV9QdXNoQnV0dG9u
TGF5b3V0SXRlbSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAmc3R5bGVPcHRpb24sIDApOwotCi0gICAgICAgIC8vIElmIHRoZSBzdHlsZSBzdXBwb3J0
cyBsYXlvdXQgcmVjdHMgd2UgdXNlIHRoYXQsIGFuZCAgY29tcGVuc2F0ZSBhY2NvcmRpbmdseQot
ICAgICAgICAvLyBpbiBwYWludEJ1dHRvbigpIGJlbG93LgotICAgICAgICBpZiAoIWxheW91dFJl
Y3QuaXNOdWxsKCkpCi0gICAgICAgICAgICBzaXplLnNldEhlaWdodChsYXlvdXRSZWN0LmhlaWdo
dCgpKTsKLSAgICAgICAgZWxzZQotICAgICAgICAgICAgc2l6ZS5zZXRIZWlnaHQocHVzaEJ1dHRv
blNpemUuaGVpZ2h0KCkpOwotCi0gICAgICAgIGJyZWFrOwotICAgIH0KLSAgICBjYXNlIE1lbnVs
aXN0UGFydDogewotICAgICAgICBRU3R5bGVPcHRpb25Db21ib0JveCBzdHlsZU9wdGlvbjsKLSAg
ICAgICAgc3R5bGVPcHRpb24uc3RhdGUgfD0gUVN0eWxlOjpTdGF0ZV9TbWFsbDsKLSAgICAgICAg
aW50IGNvbnRlbnRIZWlnaHQgPSBxTWF4KGZtLmxpbmVTcGFjaW5nKCksIDE0KSArIDI7Ci0gICAg
ICAgIFFTaXplIG1lbnVMaXN0U2l6ZSA9IHN0eWxlLT5zaXplRnJvbUNvbnRlbnRzKFFTdHlsZTo6
Q1RfQ29tYm9Cb3gsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICZzdHlsZU9wdGlvbiwgUVNpemUoMCwgY29udGVudEhlaWdodCksIDApOwotICAg
ICAgICBzaXplLnNldEhlaWdodChtZW51TGlzdFNpemUuaGVpZ2h0KCkpOwotICAgICAgICBicmVh
azsKLSAgICB9Ci0gICAgZGVmYXVsdDoKLSAgICAgICAgYnJlYWs7Ci0gICAgfQotCi0gICAgLy8g
RklYTUU6IENoZWNrIGlzIGZsYXdlZCwgc2luY2UgaXQgZG9lc24ndCB0YWtlIG1pbi13aWR0aC9t
YXgtd2lkdGggaW50byBhY2NvdW50LgotICAgIGlmIChyZW5kZXJTdHlsZS0+d2lkdGgoKS5pc0lu
dHJpbnNpY09yQXV0bygpICYmIHNpemUud2lkdGgoKSA+IDApCi0gICAgICAgIHJlbmRlclN0eWxl
LT5zZXRNaW5XaWR0aChMZW5ndGgoc2l6ZS53aWR0aCgpLCBGaXhlZCkpOwotICAgIGlmIChyZW5k
ZXJTdHlsZS0+aGVpZ2h0KCkuaXNBdXRvKCkgJiYgc2l6ZS5oZWlnaHQoKSA+IDApCi0gICAgICAg
IHJlbmRlclN0eWxlLT5zZXRNaW5IZWlnaHQoTGVuZ3RoKHNpemUuaGVpZ2h0KCksIEZpeGVkKSk7
Ci19Ci0KLQotCi12b2lkIFJlbmRlclRoZW1lUVN0eWxlOjphZGp1c3RCdXR0b25TdHlsZShTdHls
ZVJlc29sdmVyKiBzdHlsZVJlc29sdmVyLCBSZW5kZXJTdHlsZSogc3R5bGUsIEVsZW1lbnQqKSBj
b25zdAotewotICAgIC8vIERpdGNoIHRoZSBib3JkZXIuCi0gICAgc3R5bGUtPnJlc2V0Qm9yZGVy
KCk7Ci0KLSNpZmRlZiBRX1dTX01BQwotICAgIGlmIChzdHlsZS0+YXBwZWFyYW5jZSgpID09IFB1
c2hCdXR0b25QYXJ0KSB7Ci0gICAgICAgIC8vIFRoZSBNYWMgcG9ydHMgaWdub3JlIHRoZSBzcGVj
aWZpZWQgaGVpZ2h0IGZvciA8aW5wdXQgdHlwZT0iYnV0dG9uIj4gZWxlbWVudHMKLSAgICAgICAg
Ly8gdW5sZXNzIGEgYm9yZGVyIGFuZC9vciBiYWNrZ3JvdW5kIENTUyBwcm9wZXJ0eSBpcyBhbHNv
IHNwZWNpZmllZC4KLSAgICAgICAgc3R5bGUtPnNldEhlaWdodChMZW5ndGgoQXV0bykpOwotICAg
IH0KLSNlbmRpZgotCi0gICAgRm9udERlc2NyaXB0aW9uIGZvbnREZXNjcmlwdGlvbiA9IHN0eWxl
LT5mb250RGVzY3JpcHRpb24oKTsKLSAgICBmb250RGVzY3JpcHRpb24uc2V0SXNBYnNvbHV0ZVNp
emUodHJ1ZSk7Ci0KLSNpZmRlZiBRX1dTX01BQyAvLyBVc2UgZml4ZWQgZm9udCBzaXplIGFuZCBm
YW1pbHkgb24gTWFjIChsaWtlIFNhZmFyaSBkb2VzKQotICAgIGZvbnREZXNjcmlwdGlvbi5zZXRT
cGVjaWZpZWRTaXplKG1fYnV0dG9uRm9udFBpeGVsU2l6ZSk7Ci0gICAgZm9udERlc2NyaXB0aW9u
LnNldENvbXB1dGVkU2l6ZShtX2J1dHRvbkZvbnRQaXhlbFNpemUpOwotI2Vsc2UKLSAgICBmb250
RGVzY3JpcHRpb24uc2V0U3BlY2lmaWVkU2l6ZShzdHlsZS0+Zm9udFNpemUoKSk7Ci0gICAgZm9u
dERlc2NyaXB0aW9uLnNldENvbXB1dGVkU2l6ZShzdHlsZS0+Zm9udFNpemUoKSk7Ci0jZW5kaWYK
LQotICAgIEZvbnRGYW1pbHkgZm9udEZhbWlseTsKLSAgICBmb250RmFtaWx5LnNldEZhbWlseSht
X2J1dHRvbkZvbnRGYW1pbHkpOwotICAgIGZvbnREZXNjcmlwdGlvbi5zZXRGYW1pbHkoZm9udEZh
bWlseSk7Ci0gICAgc3R5bGUtPnNldEZvbnREZXNjcmlwdGlvbihmb250RGVzY3JpcHRpb24pOwot
ICAgIHN0eWxlLT5mb250KCkudXBkYXRlKHN0eWxlUmVzb2x2ZXItPmZvbnRTZWxlY3RvcigpKTsK
LSAgICBzdHlsZS0+c2V0TGluZUhlaWdodChSZW5kZXJTdHlsZTo6aW5pdGlhbExpbmVIZWlnaHQo
KSk7Ci0gICAgc2V0QnV0dG9uU2l6ZShzdHlsZSk7Ci0gICAgc2V0QnV0dG9uUGFkZGluZyhzdHls
ZSk7Ci19Ci0KLXZvaWQgUmVuZGVyVGhlbWVRU3R5bGU6OnNldEJ1dHRvblBhZGRpbmcoUmVuZGVy
U3R5bGUqIHN0eWxlKSBjb25zdAotewotICAgIFFTdHlsZU9wdGlvbkJ1dHRvbiBzdHlsZU9wdGlv
bjsKLSAgICBzdHlsZU9wdGlvbi5zdGF0ZSB8PSBRU3R5bGU6OlN0YXRlX1NtYWxsOwotCi0gICAg
Ly8gRmFrZSBhIGJ1dHRvbiByZWN0IGhlcmUsIHNpbmNlIHdlJ3JlIGp1c3QgY29tcHV0aW5nIGRl
bHRhcwotICAgIFFSZWN0IG9yaWdpbmFsUmVjdCA9IFFSZWN0KDAsIDAsIDEwMCwgMzApOwotICAg
IHN0eWxlT3B0aW9uLnJlY3QgPSBvcmlnaW5hbFJlY3Q7Ci0KLSAgICAvLyBEZWZhdWx0IHBhZGRp
bmcgaXMgYmFzZWQgb24gdGhlIGJ1dHRvbiBtYXJnaW4gcGl4ZWwgbWV0cmljCi0gICAgaW50IGJ1
dHRvbk1hcmdpbiA9IHFTdHlsZSgpLT5waXhlbE1ldHJpYyhRU3R5bGU6OlBNX0J1dHRvbk1hcmdp
biwgJnN0eWxlT3B0aW9uLCAwKTsKLSAgICBpbnQgcGFkZGluZ0xlZnQgPSBidXR0b25NYXJnaW47
Ci0gICAgaW50IHBhZGRpbmdSaWdodCA9IGJ1dHRvbk1hcmdpbjsKLSAgICBpbnQgcGFkZGluZ1Rv
cCA9IGJ1dHRvbk1hcmdpbjsKLSAgICBpbnQgcGFkZGluZ0JvdHRvbSA9IGJ1dHRvbk1hcmdpbjsK
LQotICAgIC8vIFRoZW4gY2hlY2sgaWYgdGhlIHN0eWxlIHVzZXMgbGF5b3V0IG1hcmdpbnMKLSAg
ICBRUmVjdCBsYXlvdXRSZWN0ID0gcVN0eWxlKCktPnN1YkVsZW1lbnRSZWN0KFFTdHlsZTo6U0Vf
UHVzaEJ1dHRvbkxheW91dEl0ZW0sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAmc3R5bGVPcHRpb24sIDApOwotICAgIGlmICghbGF5b3V0UmVjdC5pc051
bGwoKSkgewotICAgICAgICBRUmVjdCBjb250ZW50c1JlY3QgPSBxU3R5bGUoKS0+c3ViRWxlbWVu
dFJlY3QoUVN0eWxlOjpTRV9QdXNoQnV0dG9uQ29udGVudHMsCi0gICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmc3R5bGVPcHRpb24sIDApOwotICAg
ICAgICBwYWRkaW5nTGVmdCA9IGNvbnRlbnRzUmVjdC5sZWZ0KCkgLSBsYXlvdXRSZWN0LmxlZnQo
KTsKLSAgICAgICAgcGFkZGluZ1JpZ2h0ID0gbGF5b3V0UmVjdC5yaWdodCgpIC0gY29udGVudHNS
ZWN0LnJpZ2h0KCk7Ci0gICAgICAgIHBhZGRpbmdUb3AgPSBjb250ZW50c1JlY3QudG9wKCkgLSBs
YXlvdXRSZWN0LnRvcCgpOwotCi0gICAgICAgIC8vIENhbid0IHVzZSB0aGlzIHJpZ2h0IG5vdyBi
ZWNhdXNlIHdlIGRvbid0IGhhdmUgdGhlIGJhc2VsaW5lIHRvIGNvbXBlbnNhdGUKLSAgICAgICAg
Ly8gcGFkZGluZ0JvdHRvbSA9IGxheW91dFJlY3QuYm90dG9tKCkgLSBjb250ZW50c1JlY3QuYm90
dG9tKCk7Ci0gICAgfQotICAgIHN0eWxlLT5zZXRQYWRkaW5nTGVmdChMZW5ndGgocGFkZGluZ0xl
ZnQsIEZpeGVkKSk7Ci0gICAgc3R5bGUtPnNldFBhZGRpbmdSaWdodChMZW5ndGgocGFkZGluZ1Jp
Z2h0LCBGaXhlZCkpOwotICAgIHN0eWxlLT5zZXRQYWRkaW5nVG9wKExlbmd0aChwYWRkaW5nVG9w
LCBGaXhlZCkpOwotICAgIHN0eWxlLT5zZXRQYWRkaW5nQm90dG9tKExlbmd0aChwYWRkaW5nQm90
dG9tLCBGaXhlZCkpOwotfQotCi1ib29sIFJlbmRlclRoZW1lUVN0eWxlOjpwYWludEJ1dHRvbihS
ZW5kZXJPYmplY3QqIG8sIGNvbnN0IFBhaW50SW5mbyYgaSwgY29uc3QgSW50UmVjdCYgcikKLXsK
LSAgICBTdHlsZVBhaW50ZXJRU3R5bGUgcCh0aGlzLCBpKTsKLSAgICBpZiAoIXAuaXNWYWxpZCgp
KQotICAgICAgIHJldHVybiB0cnVlOwotCi0gICAgUVN0eWxlT3B0aW9uQnV0dG9uIG9wdGlvbjsK
LSAgICBpbml0U3R5bGVPcHRpb24ocC53aWRnZXQsIG9wdGlvbik7Ci0gICAgb3B0aW9uLnJlY3Qg
PSByOwotICAgIG9wdGlvbi5zdGF0ZSB8PSBRU3R5bGU6OlN0YXRlX1NtYWxsOwotCi0gICAgQ29u
dHJvbFBhcnQgYXBwZWFyYW5jZSA9IGluaXRpYWxpemVDb21tb25RU3R5bGVPcHRpb25zKG9wdGlv
biwgbyk7Ci0gICAgaWYgKGFwcGVhcmFuY2UgPT0gUHVzaEJ1dHRvblBhcnQgfHwgYXBwZWFyYW5j
ZSA9PSBCdXR0b25QYXJ0KSB7Ci0gICAgICAgIG9wdGlvbi5yZWN0ID0gaW5mbGF0ZUJ1dHRvblJl
Y3Qob3B0aW9uLnJlY3QpOwotICAgICAgICBwLmRyYXdDb250cm9sKFFTdHlsZTo6Q0VfUHVzaEJ1
dHRvbiwgb3B0aW9uKTsKLSAgICB9IGVsc2UgaWYgKGFwcGVhcmFuY2UgPT0gUmFkaW9QYXJ0KQot
ICAgICAgIHAuZHJhd0NvbnRyb2woUVN0eWxlOjpDRV9SYWRpb0J1dHRvbiwgb3B0aW9uKTsKLSAg
ICBlbHNlIGlmIChhcHBlYXJhbmNlID09IENoZWNrYm94UGFydCkKLSAgICAgICBwLmRyYXdDb250
cm9sKFFTdHlsZTo6Q0VfQ2hlY2tCb3gsIG9wdGlvbik7Ci0KLSAgICByZXR1cm4gZmFsc2U7Ci19
Ci0KLWJvb2wgUmVuZGVyVGhlbWVRU3R5bGU6OnBhaW50VGV4dEZpZWxkKFJlbmRlck9iamVjdCog
bywgY29uc3QgUGFpbnRJbmZvJiBpLCBjb25zdCBJbnRSZWN0JiByKQotewotICAgIFN0eWxlUGFp
bnRlclFTdHlsZSBwKHRoaXMsIGkpOwotICAgIGlmICghcC5pc1ZhbGlkKCkpCi0gICAgICAgIHJl
dHVybiB0cnVlOwotCi0gICAgUVN0eWxlT3B0aW9uRnJhbWVWMiBwYW5lbDsKLSAgICBpbml0U3R5
bGVPcHRpb24ocC53aWRnZXQsIHBhbmVsKTsKLSAgICBwYW5lbC5yZWN0ID0gcjsKLSAgICBwYW5l
bC5saW5lV2lkdGggPSBmaW5kRnJhbWVMaW5lV2lkdGgocVN0eWxlKCkpOwotICAgIHBhbmVsLnN0
YXRlIHw9IFFTdHlsZTo6U3RhdGVfU3Vua2VuOwotICAgIHBhbmVsLmZlYXR1cmVzID0gUVN0eWxl
T3B0aW9uRnJhbWVWMjo6Tm9uZTsKLQotICAgIC8vIEdldCB0aGUgY29ycmVjdCB0aGVtZSBkYXRh
IGZvciBhIHRleHQgZmllbGQKLSAgICBDb250cm9sUGFydCBhcHBlYXJhbmNlID0gaW5pdGlhbGl6
ZUNvbW1vblFTdHlsZU9wdGlvbnMocGFuZWwsIG8pOwotICAgIGlmIChhcHBlYXJhbmNlICE9IFRl
eHRGaWVsZFBhcnQKLSAgICAgICAgJiYgYXBwZWFyYW5jZSAhPSBTZWFyY2hGaWVsZFBhcnQKLSAg
ICAgICAgJiYgYXBwZWFyYW5jZSAhPSBUZXh0QXJlYVBhcnQKLSAgICAgICAgJiYgYXBwZWFyYW5j
ZSAhPSBMaXN0Ym94UGFydCkKLSAgICAgICAgcmV0dXJuIHRydWU7Ci0KLSAgICAvLyBOb3cgcGFp
bnQgdGhlIHRleHQgZmllbGQuCi0gICAgcC5kcmF3UHJpbWl0aXZlKFFTdHlsZTo6UEVfUGFuZWxM
aW5lRWRpdCwgcGFuZWwpOwotICAgIHJldHVybiBmYWxzZTsKLX0KLQotdm9pZCBSZW5kZXJUaGVt
ZVFTdHlsZTo6YWRqdXN0VGV4dEFyZWFTdHlsZShTdHlsZVJlc29sdmVyKiBzdHlsZVJlc29sdmVy
LCBSZW5kZXJTdHlsZSogc3R5bGUsIEVsZW1lbnQqIGVsZW1lbnQpIGNvbnN0Ci17Ci0gICAgYWRq
dXN0VGV4dEZpZWxkU3R5bGUoc3R5bGVSZXNvbHZlciwgc3R5bGUsIGVsZW1lbnQpOwotfQotCi1i
b29sIFJlbmRlclRoZW1lUVN0eWxlOjpwYWludFRleHRBcmVhKFJlbmRlck9iamVjdCogbywgY29u
c3QgUGFpbnRJbmZvJiBpLCBjb25zdCBJbnRSZWN0JiByKQotewotICAgIHJldHVybiBwYWludFRl
eHRGaWVsZChvLCBpLCByKTsKLX0KLQotdm9pZCBSZW5kZXJUaGVtZVFTdHlsZTo6c2V0UG9wdXBQ
YWRkaW5nKFJlbmRlclN0eWxlKiBzdHlsZSkgY29uc3QKLXsKLSAgICBjb25zdCBpbnQgcGFkZGlu
Z0xlZnQgPSA0OwotICAgIGNvbnN0IGludCBwYWRkaW5nUmlnaHQgPSBzdHlsZS0+d2lkdGgoKS5p
c0ZpeGVkKCkgfHwgc3R5bGUtPndpZHRoKCkuaXNQZXJjZW50KCkgPyA1IDogODsKLQotICAgIHN0
eWxlLT5zZXRQYWRkaW5nTGVmdChMZW5ndGgocGFkZGluZ0xlZnQsIEZpeGVkKSk7Ci0KLSAgICBR
U3R5bGVPcHRpb25Db21ib0JveCBvcHQ7Ci0gICAgaW50IHcgPSBxU3R5bGUoKS0+cGl4ZWxNZXRy
aWMoUVN0eWxlOjpQTV9CdXR0b25JY29uU2l6ZSwgJm9wdCwgMCk7Ci0gICAgc3R5bGUtPnNldFBh
ZGRpbmdSaWdodChMZW5ndGgocGFkZGluZ1JpZ2h0ICsgdywgRml4ZWQpKTsKLQotICAgIHN0eWxl
LT5zZXRQYWRkaW5nVG9wKExlbmd0aCgyLCBGaXhlZCkpOwotICAgIHN0eWxlLT5zZXRQYWRkaW5n
Qm90dG9tKExlbmd0aCgyLCBGaXhlZCkpOwotfQotCi1RUGFsZXR0ZSBSZW5kZXJUaGVtZVFTdHls
ZTo6Y29sb3JQYWxldHRlKCkgY29uc3QKLXsKLSAgICBRUGFsZXR0ZSBwYWxldHRlID0gUmVuZGVy
VGhlbWVRdDo6Y29sb3JQYWxldHRlKCk7Ci0gICAgc2V0UGFsZXR0ZUZyb21QYWdlQ2xpZW50SWZF
eGlzdHMocGFsZXR0ZSk7Ci0gICAgcmV0dXJuIHBhbGV0dGU7Ci19Ci0KLWJvb2wgUmVuZGVyVGhl
bWVRU3R5bGU6OnBhaW50TWVudUxpc3QoUmVuZGVyT2JqZWN0KiBvLCBjb25zdCBQYWludEluZm8m
IGksIGNvbnN0IEludFJlY3QmIHIpCi17Ci0gICAgU3R5bGVQYWludGVyUVN0eWxlIHAodGhpcywg
aSk7Ci0gICAgaWYgKCFwLmlzVmFsaWQoKSkKLSAgICAgICAgcmV0dXJuIHRydWU7Ci0KLSAgICBR
U3R5bGVPcHRpb25Db21ib0JveCBvcHQ7Ci0gICAgaW5pdFN0eWxlT3B0aW9uKHAud2lkZ2V0LCBv
cHQpOwotICAgIGluaXRpYWxpemVDb21tb25RU3R5bGVPcHRpb25zKG9wdCwgbyk7Ci0KLSAgICBJ
bnRSZWN0IHJlY3QgPSByOwotCi0jaWYgZGVmaW5lZChRX1dTX01BQykgJiYgIWRlZmluZWQoUVRf
Tk9fU1RZTEVfTUFDKQotICAgIC8vIFFNYWNTdHlsZSBtYWtlcyB0aGUgY29tYm8gYm94ZXMgYSBs
aXR0bGUgYml0IHNtYWxsZXIgdG8gbGVhdmUgc3BhY2UgZm9yIHRoZSBmb2N1cyByZWN0LgotICAg
IC8vIEJlY2F1c2Ugb2YgaXQsIHRoZSBjb21ibyBidXR0b24gaXMgZHJhd24gYXQgYSBwb2ludCB0
byB0aGUgbGVmdCBvZiB3aGVyZSBpdCB3YXMgZXhwZWN0IHRvIGJlIGFuZCBtYXkgZW5kIHVwCi0g
ICAgLy8gb3ZlcmxhcHBlZCB3aXRoIHRoZSB0ZXh0LiBUaGlzIHdpbGwgZm9yY2UgUU1hY1N0eWxl
IHRvIGRyYXcgdGhlIGNvbWJvIGJveCB3aXRoIHRoZSBleHBlY3RlZCB3aWR0aC4KLSAgICBpZiAo
cW9iamVjdF9jYXN0PFFNYWNTdHlsZSo+KHAuc3R5bGUpKQotICAgICAgICByZWN0LmluZmxhdGVY
KDMpOwotI2VuZGlmCi0KLSAgICBjb25zdCBRUG9pbnQgdG9wTGVmdCA9IHJlY3QubG9jYXRpb24o
KTsKLSAgICBwLnBhaW50ZXItPnRyYW5zbGF0ZSh0b3BMZWZ0KTsKLSAgICBvcHQucmVjdC5tb3Zl
VG8oUVBvaW50KDAsIDApKTsKLSAgICBvcHQucmVjdC5zZXRTaXplKHJlY3Quc2l6ZSgpKTsKLQot
ICAgIHAuZHJhd0NvbXBsZXhDb250cm9sKFFTdHlsZTo6Q0NfQ29tYm9Cb3gsIG9wdCk7Ci0gICAg
cC5wYWludGVyLT50cmFuc2xhdGUoLXRvcExlZnQpOwotICAgIHJldHVybiBmYWxzZTsKLX0KLQot
dm9pZCBSZW5kZXJUaGVtZVFTdHlsZTo6YWRqdXN0TWVudUxpc3RCdXR0b25TdHlsZShTdHlsZVJl
c29sdmVyKiBzdHlsZVJlc29sdmVyLCBSZW5kZXJTdHlsZSogc3R5bGUsIEVsZW1lbnQqIGUpIGNv
bnN0Ci17Ci0gICAgLy8gV09SS0FST1VORCBiZWNhdXNlIGh0bWwuY3NzIHNwZWNpZmllcyAtd2Vi
a2l0LWJvcmRlci1yYWRpdXMgZm9yIDxzZWxlY3Q+IHNvIHdlIG92ZXJyaWRlIGl0IGhlcmUKLSAg
ICAvLyBzZWUgYWxzbyBodHRwOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xODM5
OQotICAgIHN0eWxlLT5yZXNldEJvcmRlclJhZGl1cygpOwotCi0gICAgUmVuZGVyVGhlbWVRdDo6
YWRqdXN0TWVudUxpc3RCdXR0b25TdHlsZShzdHlsZVJlc29sdmVyLCBzdHlsZSwgZSk7Ci19Ci0K
LWJvb2wgUmVuZGVyVGhlbWVRU3R5bGU6OnBhaW50TWVudUxpc3RCdXR0b24oUmVuZGVyT2JqZWN0
KiBvLCBjb25zdCBQYWludEluZm8mIGksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgY29uc3QgSW50UmVjdCYgcikKLXsKLSAgICBTdHlsZVBhaW50ZXJRU3R5bGUgcCh0
aGlzLCBpKTsKLSAgICBpZiAoIXAuaXNWYWxpZCgpKQotICAgICAgICByZXR1cm4gdHJ1ZTsKLQot
ICAgIFFTdHlsZU9wdGlvbkNvbWJvQm94IG9wdGlvbjsKLSAgICBpbml0U3R5bGVPcHRpb24ocC53
aWRnZXQsIG9wdGlvbik7Ci0gICAgaW5pdGlhbGl6ZUNvbW1vblFTdHlsZU9wdGlvbnMob3B0aW9u
LCBvKTsKLSAgICBvcHRpb24ucmVjdCA9IHI7Ci0KLSAgICAvLyBmb3IgZHJhd2luZyB0aGUgY29t
Ym8gYm94IGFycm93LCByZWx5IG9ubHkgb24gdGhlIGZhbGxiYWNrIHN0eWxlCi0gICAgcC5zdHls
ZSA9IGZhbGxiYWNrU3R5bGUoKTsKLSAgICBvcHRpb24uc3ViQ29udHJvbHMgPSBRU3R5bGU6OlND
X0NvbWJvQm94QXJyb3c7Ci0gICAgcC5kcmF3Q29tcGxleENvbnRyb2woUVN0eWxlOjpDQ19Db21i
b0JveCwgb3B0aW9uKTsKLQotICAgIHJldHVybiBmYWxzZTsKLX0KLQotI2lmIEVOQUJMRShQUk9H
UkVTU19FTEVNRU5UKQotZG91YmxlIFJlbmRlclRoZW1lUVN0eWxlOjphbmltYXRpb25EdXJhdGlv
bkZvclByb2dyZXNzQmFyKFJlbmRlclByb2dyZXNzKiByZW5kZXJQcm9ncmVzcykgY29uc3QKLXsK
LSAgICBpZiAocmVuZGVyUHJvZ3Jlc3MtPnBvc2l0aW9uKCkgPj0gMCkKLSAgICAgICAgcmV0dXJu
IDA7Ci0KLSAgICBRU3R5bGVPcHRpb25Qcm9ncmVzc0JhclYyIG9wdGlvbjsKLSAgICBvcHRpb24u
cmVjdC5zZXRTaXplKHJlbmRlclByb2dyZXNzLT5waXhlbFNuYXBwZWRTaXplKCkpOwotICAgIC8v
IEZJWE1FOiBVbnRpbCBodHRwOi8vYnVncmVwb3J0cy5xdC5ub2tpYS5jb20vYnJvd3NlL1FUQlVH
LTkxNzEgaXMgZml4ZWQsCi0gICAgLy8gd2Ugc2ltdWxhdGUgb25lIHNxdWFyZSBhbmltYXRpbmcg
YWNyb3NzIHRoZSBwcm9ncmVzcyBiYXIuCi0gICAgcmV0dXJuIChvcHRpb24ucmVjdC53aWR0aCgp
IC8gcVN0eWxlKCktPnBpeGVsTWV0cmljKFFTdHlsZTo6UE1fUHJvZ3Jlc3NCYXJDaHVua1dpZHRo
LCAmb3B0aW9uKSkgKiBhbmltYXRpb25SZXBlYXRJbnRlcnZhbEZvclByb2dyZXNzQmFyKHJlbmRl
clByb2dyZXNzKTsKLX0KLQotYm9vbCBSZW5kZXJUaGVtZVFTdHlsZTo6cGFpbnRQcm9ncmVzc0Jh
cihSZW5kZXJPYmplY3QqIG8sIGNvbnN0IFBhaW50SW5mbyYgcGksIGNvbnN0IEludFJlY3QmIHIp
Ci17Ci0gICAgaWYgKCFvLT5pc1Byb2dyZXNzKCkpCi0gICAgICAgIHJldHVybiB0cnVlOwotCi0g
ICAgU3R5bGVQYWludGVyUVN0eWxlIHAodGhpcywgcGkpOwotICAgIGlmICghcC5pc1ZhbGlkKCkp
Ci0gICAgICAgcmV0dXJuIHRydWU7Ci0KLSAgICBRU3R5bGVPcHRpb25Qcm9ncmVzc0JhclYyIG9w
dGlvbjsKLSAgICBpbml0U3R5bGVPcHRpb24ocC53aWRnZXQsIG9wdGlvbik7Ci0gICAgaW5pdGlh
bGl6ZUNvbW1vblFTdHlsZU9wdGlvbnMob3B0aW9uLCBvKTsKLQotICAgIFJlbmRlclByb2dyZXNz
KiByZW5kZXJQcm9ncmVzcyA9IHRvUmVuZGVyUHJvZ3Jlc3Mobyk7Ci0gICAgb3B0aW9uLnJlY3Qg
PSByOwotICAgIG9wdGlvbi5tYXhpbXVtID0gc3RkOjpudW1lcmljX2xpbWl0czxpbnQ+OjptYXgo
KTsKLSAgICBvcHRpb24ubWluaW11bSA9IDA7Ci0gICAgb3B0aW9uLnByb2dyZXNzID0gKHJlbmRl
clByb2dyZXNzLT5wb3NpdGlvbigpICogc3RkOjpudW1lcmljX2xpbWl0czxpbnQ+OjptYXgoKSk7
Ci0KLSAgICBjb25zdCBRUG9pbnQgdG9wTGVmdCA9IHIubG9jYXRpb24oKTsKLSAgICBwLnBhaW50
ZXItPnRyYW5zbGF0ZSh0b3BMZWZ0KTsKLSAgICBvcHRpb24ucmVjdC5tb3ZlVG8oUVBvaW50KDAs
IDApKTsKLSAgICBvcHRpb24ucmVjdC5zZXRTaXplKHIuc2l6ZSgpKTsKLQotICAgIGlmIChvcHRp
b24ucHJvZ3Jlc3MgPCAwKSB7Ci0gICAgICAgIC8vIEZJWE1FOiBVbnRpbCBodHRwOi8vYnVncmVw
b3J0cy5xdC5ub2tpYS5jb20vYnJvd3NlL1FUQlVHLTkxNzEgaXMgZml4ZWQsCi0gICAgICAgIC8v
IHdlIHNpbXVsYXRlIG9uZSBzcXVhcmUgYW5pbWF0aW5nIGFjcm9zcyB0aGUgcHJvZ3Jlc3MgYmFy
LgotICAgICAgICBwLmRyYXdDb250cm9sKFFTdHlsZTo6Q0VfUHJvZ3Jlc3NCYXJHcm9vdmUsIG9w
dGlvbik7Ci0gICAgICAgIGludCBjaHVua1dpZHRoID0gcVN0eWxlKCktPnBpeGVsTWV0cmljKFFT
dHlsZTo6UE1fUHJvZ3Jlc3NCYXJDaHVua1dpZHRoLCAmb3B0aW9uKTsKLSAgICAgICAgUUNvbG9y
IGNvbG9yID0gKG9wdGlvbi5wYWxldHRlLmhpZ2hsaWdodCgpID09IG9wdGlvbi5wYWxldHRlLmJh
Y2tncm91bmQoKSkgPyBvcHRpb24ucGFsZXR0ZS5jb2xvcihRUGFsZXR0ZTo6QWN0aXZlLCBRUGFs
ZXR0ZTo6SGlnaGxpZ2h0KSA6IG9wdGlvbi5wYWxldHRlLmNvbG9yKFFQYWxldHRlOjpIaWdobGln
aHQpOwotICAgICAgICBpZiAocmVuZGVyUHJvZ3Jlc3MtPnN0eWxlKCktPmRpcmVjdGlvbigpID09
IFJUTCkKLSAgICAgICAgICAgIHAucGFpbnRlci0+ZmlsbFJlY3Qob3B0aW9uLnJlY3QucmlnaHQo
KSAtIGNodW5rV2lkdGggIC0gcmVuZGVyUHJvZ3Jlc3MtPmFuaW1hdGlvblByb2dyZXNzKCkgKiBv
cHRpb24ucmVjdC53aWR0aCgpLCAwLCBjaHVua1dpZHRoLCBvcHRpb24ucmVjdC5oZWlnaHQoKSwg
Y29sb3IpOwotICAgICAgICBlbHNlCi0gICAgICAgICAgICBwLnBhaW50ZXItPmZpbGxSZWN0KHJl
bmRlclByb2dyZXNzLT5hbmltYXRpb25Qcm9ncmVzcygpICogb3B0aW9uLnJlY3Qud2lkdGgoKSwg
MCwgY2h1bmtXaWR0aCwgb3B0aW9uLnJlY3QuaGVpZ2h0KCksIGNvbG9yKTsKLSAgICB9IGVsc2UK
LSAgICAgICAgcC5kcmF3Q29udHJvbChRU3R5bGU6OkNFX1Byb2dyZXNzQmFyLCBvcHRpb24pOwot
Ci0gICAgcC5wYWludGVyLT50cmFuc2xhdGUoLXRvcExlZnQpOwotCi0gICAgcmV0dXJuIGZhbHNl
OwotfQotI2VuZGlmCi0KLWJvb2wgUmVuZGVyVGhlbWVRU3R5bGU6OnBhaW50U2xpZGVyVHJhY2so
UmVuZGVyT2JqZWN0KiBvLCBjb25zdCBQYWludEluZm8mIHBpLAotICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGNvbnN0IEludFJlY3QmIHIpCi17Ci0gICAgU3R5bGVQYWludGVy
UVN0eWxlIHAodGhpcywgcGkpOwotICAgIGlmICghcC5pc1ZhbGlkKCkpCi0gICAgICAgIHJldHVy
biB0cnVlOwotCi0gICAgY29uc3QgUVBvaW50IHRvcExlZnQgPSByLmxvY2F0aW9uKCk7Ci0gICAg
cC5wYWludGVyLT50cmFuc2xhdGUodG9wTGVmdCk7Ci0KLSAgICBRU3R5bGVPcHRpb25TbGlkZXIg
b3B0aW9uOwotICAgIGluaXRTdHlsZU9wdGlvbihwLndpZGdldCwgb3B0aW9uKTsKLSAgICBvcHRp
b24uc3ViQ29udHJvbHMgPSBRU3R5bGU6OlNDX1NsaWRlckdyb292ZTsKLSAgICBDb250cm9sUGFy
dCBhcHBlYXJhbmNlID0gaW5pdGlhbGl6ZUNvbW1vblFTdHlsZU9wdGlvbnMob3B0aW9uLCBvKTsK
LSAgICBvcHRpb24ucmVjdCA9IHI7Ci0gICAgb3B0aW9uLnJlY3QubW92ZVRvKFFQb2ludCgwLCAw
KSk7Ci0gICAgaWYgKGFwcGVhcmFuY2UgPT0gU2xpZGVyVmVydGljYWxQYXJ0KQotICAgICAgICBv
cHRpb24ub3JpZW50YXRpb24gPSBRdDo6VmVydGljYWw7Ci0gICAgaWYgKGlzUHJlc3NlZChvKSkK
LSAgICAgICAgb3B0aW9uLnN0YXRlIHw9IFFTdHlsZTo6U3RhdGVfU3Vua2VuOwotCi0gICAgLy8g
c29tZSBzdHlsZXMgbmVlZCB0aGlzIHRvIHNob3cgYSBoaWdobGlnaHQgb24gb25lIHNpZGUgb2Yg
dGhlIGdyb292ZQotICAgIEhUTUxJbnB1dEVsZW1lbnQqIHNsaWRlciA9IG8tPm5vZGUoKS0+dG9J
bnB1dEVsZW1lbnQoKTsKLSAgICBpZiAoc2xpZGVyKSB7Ci0gICAgICAgIG9wdGlvbi51cHNpZGVE
b3duID0gKGFwcGVhcmFuY2UgPT0gU2xpZGVySG9yaXpvbnRhbFBhcnQpICYmICFvLT5zdHlsZSgp
LT5pc0xlZnRUb1JpZ2h0RGlyZWN0aW9uKCk7Ci0gICAgICAgIC8vIFVzZSB0aGUgd2lkdGggYXMg
YSBtdWx0aXBsaWVyIGluIGNhc2UgdGhlIHNsaWRlciB2YWx1ZXMgYXJlIDw9IDEKLSAgICAgICAg
Y29uc3QgaW50IHdpZHRoID0gci53aWR0aCgpID4gMCA/IHIud2lkdGgoKSA6IDEwMDsKLSAgICAg
ICAgb3B0aW9uLm1heGltdW0gPSBzbGlkZXItPm1heGltdW0oKSAqIHdpZHRoOwotICAgICAgICBv
cHRpb24ubWluaW11bSA9IHNsaWRlci0+bWluaW11bSgpICogd2lkdGg7Ci0gICAgICAgIGlmICgh
b3B0aW9uLnVwc2lkZURvd24pCi0gICAgICAgICAgICBvcHRpb24uc2xpZGVyUG9zaXRpb24gPSBz
bGlkZXItPnZhbHVlQXNOdW1iZXIoKSAqIHdpZHRoOwotICAgICAgICBlbHNlCi0gICAgICAgICAg
ICBvcHRpb24uc2xpZGVyUG9zaXRpb24gPSBvcHRpb24ubWluaW11bSArIG9wdGlvbi5tYXhpbXVt
IC0gc2xpZGVyLT52YWx1ZUFzTnVtYmVyKCkgKiB3aWR0aDsKLSAgICB9Ci0KLSAgICBwLmRyYXdD
b21wbGV4Q29udHJvbChRU3R5bGU6OkNDX1NsaWRlciwgb3B0aW9uKTsKLQotICAgIGlmIChvcHRp
b24uc3RhdGUgJiBRU3R5bGU6OlN0YXRlX0hhc0ZvY3VzKSB7Ci0gICAgICAgIFFTdHlsZU9wdGlv
bkZvY3VzUmVjdCBmb2N1c09wdGlvbjsKLSAgICAgICAgZm9jdXNPcHRpb24ucmVjdCA9IHI7Ci0g
ICAgICAgIHAuZHJhd1ByaW1pdGl2ZShRU3R5bGU6OlBFX0ZyYW1lRm9jdXNSZWN0LCBmb2N1c09w
dGlvbik7Ci0gICAgfQotICAgIHAucGFpbnRlci0+dHJhbnNsYXRlKC10b3BMZWZ0KTsKLSAgICBy
ZXR1cm4gZmFsc2U7Ci19Ci0KLXZvaWQgUmVuZGVyVGhlbWVRU3R5bGU6OmFkanVzdFNsaWRlclRy
YWNrU3R5bGUoU3R5bGVSZXNvbHZlciosIFJlbmRlclN0eWxlKiBzdHlsZSwgRWxlbWVudCopIGNv
bnN0Ci17Ci0gICAgc3R5bGUtPnNldEJveFNoYWRvdyhudWxscHRyKTsKLX0KLQotYm9vbCBSZW5k
ZXJUaGVtZVFTdHlsZTo6cGFpbnRTbGlkZXJUaHVtYihSZW5kZXJPYmplY3QqIG8sIGNvbnN0IFBh
aW50SW5mbyYgcGksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qg
SW50UmVjdCYgcikKLXsKLSAgICBTdHlsZVBhaW50ZXJRU3R5bGUgcCh0aGlzLCBwaSk7Ci0gICAg
aWYgKCFwLmlzVmFsaWQoKSkKLSAgICAgICAgcmV0dXJuIHRydWU7Ci0KLSAgICBjb25zdCBRUG9p
bnQgdG9wTGVmdCA9IHIubG9jYXRpb24oKTsKLSAgICBwLnBhaW50ZXItPnRyYW5zbGF0ZSh0b3BM
ZWZ0KTsKLQotICAgIFFTdHlsZU9wdGlvblNsaWRlciBvcHRpb247Ci0gICAgaW5pdFN0eWxlT3B0
aW9uKHAud2lkZ2V0LCBvcHRpb24pOwotICAgIG9wdGlvbi5zdWJDb250cm9scyA9IFFTdHlsZTo6
U0NfU2xpZGVySGFuZGxlOwotICAgIENvbnRyb2xQYXJ0IGFwcGVhcmFuY2UgPSBpbml0aWFsaXpl
Q29tbW9uUVN0eWxlT3B0aW9ucyhvcHRpb24sIG8pOwotICAgIG9wdGlvbi5yZWN0ID0gcjsKLSAg
ICBvcHRpb24ucmVjdC5tb3ZlVG8oUVBvaW50KDAsIDApKTsKLSAgICBpZiAoYXBwZWFyYW5jZSA9
PSBTbGlkZXJUaHVtYlZlcnRpY2FsUGFydCkKLSAgICAgICAgb3B0aW9uLm9yaWVudGF0aW9uID0g
UXQ6OlZlcnRpY2FsOwotICAgIGlmIChpc1ByZXNzZWQobykpIHsKLSAgICAgICAgb3B0aW9uLmFj
dGl2ZVN1YkNvbnRyb2xzID0gUVN0eWxlOjpTQ19TbGlkZXJIYW5kbGU7Ci0gICAgICAgIG9wdGlv
bi5zdGF0ZSB8PSBRU3R5bGU6OlN0YXRlX1N1bmtlbjsKLSAgICB9Ci0KLSAgICBwLmRyYXdDb21w
bGV4Q29udHJvbChRU3R5bGU6OkNDX1NsaWRlciwgb3B0aW9uKTsKLSAgICBwLnBhaW50ZXItPnRy
YW5zbGF0ZSgtdG9wTGVmdCk7Ci0gICAgcmV0dXJuIGZhbHNlOwotfQotCi12b2lkIFJlbmRlclRo
ZW1lUVN0eWxlOjphZGp1c3RTbGlkZXJUaHVtYlN0eWxlKFN0eWxlUmVzb2x2ZXIqIHN0eWxlUmVz
b2x2ZXIsIFJlbmRlclN0eWxlKiBzdHlsZSwgRWxlbWVudCogZWxlbWVudCkgY29uc3QKLXsKLSAg
ICBSZW5kZXJUaGVtZTo6YWRqdXN0U2xpZGVyVGh1bWJTdHlsZShzdHlsZVJlc29sdmVyLCBzdHls
ZSwgZWxlbWVudCk7Ci0gICAgc3R5bGUtPnNldEJveFNoYWRvdyhudWxscHRyKTsKLX0KLQotYm9v
bCBSZW5kZXJUaGVtZVFTdHlsZTo6cGFpbnRTZWFyY2hGaWVsZChSZW5kZXJPYmplY3QqIG8sIGNv
bnN0IFBhaW50SW5mbyYgcGksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
Y29uc3QgSW50UmVjdCYgcikKLXsKLSAgICByZXR1cm4gcGFpbnRUZXh0RmllbGQobywgcGksIHIp
OwotfQotCi12b2lkIFJlbmRlclRoZW1lUVN0eWxlOjphZGp1c3RTZWFyY2hGaWVsZERlY29yYXRp
b25TdHlsZShTdHlsZVJlc29sdmVyKiBzdHlsZVJlc29sdmVyLCBSZW5kZXJTdHlsZSogc3R5bGUs
IEVsZW1lbnQqIGUpIGNvbnN0Ci17Ci0gICAgbm90SW1wbGVtZW50ZWQoKTsKLSAgICBSZW5kZXJU
aGVtZTo6YWRqdXN0U2VhcmNoRmllbGREZWNvcmF0aW9uU3R5bGUoc3R5bGVSZXNvbHZlciwgc3R5
bGUsIGUpOwotfQotCi1ib29sIFJlbmRlclRoZW1lUVN0eWxlOjpwYWludFNlYXJjaEZpZWxkRGVj
b3JhdGlvbihSZW5kZXJPYmplY3QqIG8sIGNvbnN0IFBhaW50SW5mbyYgcGksCi0gICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IEludFJlY3QmIHIpCi17
Ci0gICAgbm90SW1wbGVtZW50ZWQoKTsKLSAgICByZXR1cm4gUmVuZGVyVGhlbWU6OnBhaW50U2Vh
cmNoRmllbGREZWNvcmF0aW9uKG8sIHBpLCByKTsKLX0KLQotdm9pZCBSZW5kZXJUaGVtZVFTdHls
ZTo6YWRqdXN0U2VhcmNoRmllbGRSZXN1bHRzRGVjb3JhdGlvblN0eWxlKFN0eWxlUmVzb2x2ZXIq
IHN0eWxlUmVzb2x2ZXIsIFJlbmRlclN0eWxlKiBzdHlsZSwgRWxlbWVudCogZSkgY29uc3QKLXsK
LSAgICBub3RJbXBsZW1lbnRlZCgpOwotICAgIFJlbmRlclRoZW1lOjphZGp1c3RTZWFyY2hGaWVs
ZFJlc3VsdHNEZWNvcmF0aW9uU3R5bGUoc3R5bGVSZXNvbHZlciwgc3R5bGUsIGUpOwotfQotCi1i
b29sIFJlbmRlclRoZW1lUVN0eWxlOjpwYWludFNlYXJjaEZpZWxkUmVzdWx0c0RlY29yYXRpb24o
UmVuZGVyT2JqZWN0KiBvLCBjb25zdCBQYWludEluZm8mIHBpLAotICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgSW50UmVjdCYgcikKLXsK
LSAgICBub3RJbXBsZW1lbnRlZCgpOwotICAgIHJldHVybiBSZW5kZXJUaGVtZTo6cGFpbnRTZWFy
Y2hGaWVsZFJlc3VsdHNEZWNvcmF0aW9uKG8sIHBpLCByKTsKLX0KLQotI2lmbmRlZiBRVF9OT19T
UElOQk9YCi0KLWJvb2wgUmVuZGVyVGhlbWVRU3R5bGU6OnBhaW50SW5uZXJTcGluQnV0dG9uKFJl
bmRlck9iamVjdCogbywgY29uc3QgUGFpbnRJbmZvJiBwYWludEluZm8sIGNvbnN0IEludFJlY3Qm
IHJlY3QpCi17Ci0gICAgU3R5bGVQYWludGVyUVN0eWxlIHAodGhpcywgcGFpbnRJbmZvKTsKLSAg
ICBpZiAoIXAuaXNWYWxpZCgpKQotICAgICAgIHJldHVybiB0cnVlOwotCi0gICAgUVN0eWxlT3B0
aW9uU3BpbkJveCBvcHRpb247Ci0gICAgaW5pdFN0eWxlT3B0aW9uKHAud2lkZ2V0LCBvcHRpb24p
OwotICAgIG9wdGlvbi5zdWJDb250cm9scyA9IFFTdHlsZTo6U0NfU3BpbkJveFVwIHwgUVN0eWxl
OjpTQ19TcGluQm94RG93bjsKLSAgICBpZiAoIWlzUmVhZE9ubHlDb250cm9sKG8pKSB7Ci0gICAg
ICAgIGlmIChpc0VuYWJsZWQobykpCi0gICAgICAgICAgICBvcHRpb24uc3RlcEVuYWJsZWQgPSBR
QWJzdHJhY3RTcGluQm94OjpTdGVwVXBFbmFibGVkIHwgUUFic3RyYWN0U3BpbkJveDo6U3RlcERv
d25FbmFibGVkOwotICAgICAgICBpZiAoaXNQcmVzc2VkKG8pKSB7Ci0gICAgICAgICAgICBvcHRp
b24uc3RhdGUgfD0gUVN0eWxlOjpTdGF0ZV9TdW5rZW47Ci0gICAgICAgICAgICBpZiAoaXNTcGlu
VXBCdXR0b25QYXJ0UHJlc3NlZChvKSkKLSAgICAgICAgICAgICAgICBvcHRpb24uYWN0aXZlU3Vi
Q29udHJvbHMgPSBRU3R5bGU6OlNDX1NwaW5Cb3hVcDsKLSAgICAgICAgICAgIGVsc2UKLSAgICAg
ICAgICAgICAgICBvcHRpb24uYWN0aXZlU3ViQ29udHJvbHMgPSBRU3R5bGU6OlNDX1NwaW5Cb3hE
b3duOwotICAgICAgICB9Ci0gICAgfQotICAgIC8vIFJlbmRlciB0aGUgc3BpbiBidXR0b25zIGZv
ciBMVFIgb3IgUlRMIGFjY29yZGluZ2x5LgotICAgIG9wdGlvbi5kaXJlY3Rpb24gPSBvLT5zdHls
ZSgpLT5pc0xlZnRUb1JpZ2h0RGlyZWN0aW9uKCkgPyBRdDo6TGVmdFRvUmlnaHQgOiBRdDo6Umln
aHRUb0xlZnQ7Ci0KLSAgICBJbnRSZWN0IGJ1dHRvblJlY3QgPSByZWN0OwotICAgIC8vIERlZmF1
bHQgdG8gbW92aW5nIHRoZSBidXR0b25zIGEgbGl0dGxlIGJpdCB3aXRoaW4gdGhlIGVkaXRvciBm
cmFtZS4KLSAgICBpbnQgaW5mbGF0ZVggPSAtMjsKLSAgICBpbnQgaW5mbGF0ZVkgPSAtMjsKLSNp
ZiBkZWZpbmVkKFFfV1NfTUFDKSAmJiAhZGVmaW5lZChRVF9OT19TVFlMRV9NQUMpCi0gICAgLy8g
UU1hY1N0eWxlIHdpbGwgcG9zaXRpb24gdGhlIGFxdWEgYnV0dG9ucyBmbHVzaCB0byB0aGUgcmln
aHQuCi0gICAgLy8gVGhpcyB3aWxsIG1vdmUgdGhlbSBtb3JlIHdpdGhpbiB0aGUgY29udHJvbCBm
b3IgYmV0dGVyIHN0eWxlLCBhIGxhCi0gICAgLy8gQ2hyb21pdW0gbG9vayAmIGZlZWwuCi0gICAg
aWYgKHFvYmplY3RfY2FzdDxRTWFjU3R5bGUqPihwLnN0eWxlKSkgewotICAgICAgICBpbmZsYXRl
WCA9IC00OwotICAgICAgICAvLyBSZW5kZXIgbWluaSBhcXVhIHNwaW4gYnV0dG9ucyBmb3IgUU1h
Y1N0eWxlIHRvIGZpdCBuaWNlbHkgaW50bwotICAgICAgICAvLyB0aGUgZWRpdG9yIGFyZWEsIGxp
a2UgQ2hyb21pdW0uCi0gICAgICAgIG9wdGlvbi5zdGF0ZSB8PSBRU3R5bGU6OlN0YXRlX01pbmk7
Ci0gICAgfQotI2VuZGlmCi0jaWYgIWRlZmluZWQoUVRfTk9fU1RZTEVfUExBU1RJUVVFKQotICAg
IC8vIFFQbGFzdGlxdWVTdHlsZSBsb29rcyBiZXN0IHdoZW4gdGhlIHNwaW4gYnV0dG9ucyBhcmUg
Zmx1c2ggd2l0aCB0aGUgZnJhbWUncyBlZGdlLgotICAgIGlmIChxb2JqZWN0X2Nhc3Q8UVBsYXN0
aXF1ZVN0eWxlKj4ocC5zdHlsZSkpIHsKLSAgICAgICAgaW5mbGF0ZVggPSAwOwotICAgICAgICBp
bmZsYXRlWSA9IDA7Ci0gICAgfQotI2VuZGlmCi0KLSAgICBidXR0b25SZWN0LmluZmxhdGVYKGlu
ZmxhdGVYKTsKLSAgICBidXR0b25SZWN0LmluZmxhdGVZKGluZmxhdGVZKTsKLSAgICBvcHRpb24u
cmVjdCA9IGJ1dHRvblJlY3Q7Ci0KLSAgICBwLmRyYXdDb21wbGV4Q29udHJvbChRU3R5bGU6OkND
X1NwaW5Cb3gsIG9wdGlvbik7Ci0gICAgcmV0dXJuIGZhbHNlOwotfQotI2VuZGlmCi0KLUNvbnRy
b2xQYXJ0IFJlbmRlclRoZW1lUVN0eWxlOjppbml0aWFsaXplQ29tbW9uUVN0eWxlT3B0aW9ucyhR
U3R5bGVPcHRpb24mIG9wdGlvbiwgUmVuZGVyT2JqZWN0KiBvKSBjb25zdAotewotICAgIC8vIERl
ZmF1bHQgYml0czogbm8gZm9jdXMsIG5vIG1vdXNlIG92ZXIKLSAgICBvcHRpb24uc3RhdGUgJj0g
fihRU3R5bGU6OlN0YXRlX0hhc0ZvY3VzIHwgUVN0eWxlOjpTdGF0ZV9Nb3VzZU92ZXIpOwotCi0g
ICAgaWYgKGlzUmVhZE9ubHlDb250cm9sKG8pKQotICAgICAgICAvLyBSZWFkb25seSBpcyBzdXBw
b3J0ZWQgb24gdGV4dGZpZWxkcy4KLSAgICAgICAgb3B0aW9uLnN0YXRlIHw9IFFTdHlsZTo6U3Rh
dGVfUmVhZE9ubHk7Ci0KLSAgICBvcHRpb24uZGlyZWN0aW9uID0gUXQ6OkxlZnRUb1JpZ2h0Owot
Ci0gICAgaWYgKGlzSG92ZXJlZChvKSkKLSAgICAgICAgb3B0aW9uLnN0YXRlIHw9IFFTdHlsZTo6
U3RhdGVfTW91c2VPdmVyOwotCi0gICAgc2V0UGFsZXR0ZUZyb21QYWdlQ2xpZW50SWZFeGlzdHMo
b3B0aW9uLnBhbGV0dGUpOwotCi0gICAgaWYgKCFpc0VuYWJsZWQobykpIHsKLSAgICAgICAgb3B0
aW9uLnBhbGV0dGUuc2V0Q3VycmVudENvbG9yR3JvdXAoUVBhbGV0dGU6OkRpc2FibGVkKTsKLSAg
ICAgICAgb3B0aW9uLnN0YXRlICY9IH5RU3R5bGU6OlN0YXRlX0VuYWJsZWQ7Ci0gICAgfQotCi0g
ICAgUmVuZGVyU3R5bGUqIHN0eWxlID0gby0+c3R5bGUoKTsKLSAgICBpZiAoIXN0eWxlKQotICAg
ICAgICByZXR1cm4gTm9Db250cm9sUGFydDsKLQotICAgIENvbnRyb2xQYXJ0IHJlc3VsdCA9IHN0
eWxlLT5hcHBlYXJhbmNlKCk7Ci0gICAgaWYgKHN1cHBvcnRzRm9jdXMocmVzdWx0KSAmJiBpc0Zv
Y3VzZWQobykpIHsKLSAgICAgICAgb3B0aW9uLnN0YXRlIHw9IFFTdHlsZTo6U3RhdGVfSGFzRm9j
dXM7Ci0gICAgICAgIG9wdGlvbi5zdGF0ZSB8PSBRU3R5bGU6OlN0YXRlX0tleWJvYXJkRm9jdXND
aGFuZ2U7Ci0gICAgfQotCi0gICAgaWYgKHN0eWxlLT5kaXJlY3Rpb24oKSA9PSBXZWJDb3JlOjpS
VEwpCi0gICAgICAgIG9wdGlvbi5kaXJlY3Rpb24gPSBRdDo6UmlnaHRUb0xlZnQ7Ci0KLSAgICBz
d2l0Y2ggKHJlc3VsdCkgewotICAgIGNhc2UgUHVzaEJ1dHRvblBhcnQ6Ci0gICAgY2FzZSBTcXVh
cmVCdXR0b25QYXJ0OgotICAgIGNhc2UgQnV0dG9uUGFydDoKLSAgICBjYXNlIEJ1dHRvbkJldmVs
UGFydDoKLSAgICBjYXNlIExpc3RJdGVtUGFydDoKLSAgICBjYXNlIE1lbnVsaXN0QnV0dG9uUGFy
dDoKLSAgICBjYXNlIFNlYXJjaEZpZWxkUmVzdWx0c0J1dHRvblBhcnQ6Ci0gICAgY2FzZSBTZWFy
Y2hGaWVsZENhbmNlbEJ1dHRvblBhcnQ6IHsKLSAgICAgICAgaWYgKGlzUHJlc3NlZChvKSkKLSAg
ICAgICAgICAgIG9wdGlvbi5zdGF0ZSB8PSBRU3R5bGU6OlN0YXRlX1N1bmtlbjsKLSAgICAgICAg
ZWxzZSBpZiAocmVzdWx0ID09IFB1c2hCdXR0b25QYXJ0IHx8IHJlc3VsdCA9PSBCdXR0b25QYXJ0
KQotICAgICAgICAgICAgb3B0aW9uLnN0YXRlIHw9IFFTdHlsZTo6U3RhdGVfUmFpc2VkOwotICAg
ICAgICBicmVhazsKLSAgICB9Ci0gICAgY2FzZSBSYWRpb1BhcnQ6Ci0gICAgY2FzZSBDaGVja2Jv
eFBhcnQ6Ci0gICAgICAgIG9wdGlvbi5zdGF0ZSB8PSAoaXNDaGVja2VkKG8pID8gUVN0eWxlOjpT
dGF0ZV9PbiA6IFFTdHlsZTo6U3RhdGVfT2ZmKTsKLSAgICB9Ci0KLSAgICByZXR1cm4gcmVzdWx0
OwotfQotCi12b2lkIFJlbmRlclRoZW1lUVN0eWxlOjphZGp1c3RTbGlkZXJUaHVtYlNpemUoUmVu
ZGVyU3R5bGUqIHN0eWxlLCBFbGVtZW50KiBlbGVtZW50KSBjb25zdAotewotICAgIGNvbnN0IENv
bnRyb2xQYXJ0IHBhcnQgPSBzdHlsZS0+YXBwZWFyYW5jZSgpOwotICAgIGlmIChwYXJ0ID09IFNs
aWRlclRodW1iSG9yaXpvbnRhbFBhcnQgfHwgcGFydCA9PSBTbGlkZXJUaHVtYlZlcnRpY2FsUGFy
dCkgewotICAgICAgICBRU3R5bGVPcHRpb25TbGlkZXIgb3B0aW9uOwotICAgICAgICBpZiAocGFy
dCA9PSBTbGlkZXJUaHVtYlZlcnRpY2FsUGFydCkKLSAgICAgICAgICAgIG9wdGlvbi5vcmllbnRh
dGlvbiA9IFF0OjpWZXJ0aWNhbDsKLQotICAgICAgICBRU3R5bGUqIHFzdHlsZSA9IHFTdHlsZSgp
OwotCi0gICAgICAgIGludCBsZW5ndGggPSBxc3R5bGUtPnBpeGVsTWV0cmljKFFTdHlsZTo6UE1f
U2xpZGVyTGVuZ3RoLCAmb3B0aW9uKTsKLSAgICAgICAgaW50IHRoaWNrbmVzcyA9IHFzdHlsZS0+
cGl4ZWxNZXRyaWMoUVN0eWxlOjpQTV9TbGlkZXJUaGlja25lc3MsICZvcHRpb24pOwotICAgICAg
ICBpZiAob3B0aW9uLm9yaWVudGF0aW9uID09IFF0OjpWZXJ0aWNhbCkgewotICAgICAgICAgICAg
c3R5bGUtPnNldFdpZHRoKExlbmd0aCh0aGlja25lc3MsIEZpeGVkKSk7Ci0gICAgICAgICAgICBz
dHlsZS0+c2V0SGVpZ2h0KExlbmd0aChsZW5ndGgsIEZpeGVkKSk7Ci0gICAgICAgIH0gZWxzZSB7
Ci0gICAgICAgICAgICBzdHlsZS0+c2V0V2lkdGgoTGVuZ3RoKGxlbmd0aCwgRml4ZWQpKTsKLSAg
ICAgICAgICAgIHN0eWxlLT5zZXRIZWlnaHQoTGVuZ3RoKHRoaWNrbmVzcywgRml4ZWQpKTsKLSAg
ICAgICAgfQotICAgIH0gZWxzZQotICAgICAgICBSZW5kZXJUaGVtZVF0OjphZGp1c3RTbGlkZXJU
aHVtYlNpemUoc3R5bGUsIGVsZW1lbnQpOwotfQotCi19Ci0KLS8vIHZpbTogdHM9NCBzdz00IGV0
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L3F0L1dlYkNvcmVTdXBwb3J0L1JlbmRlclRoZW1l
UVN0eWxlLmggYi9Tb3VyY2UvV2ViS2l0L3F0L1dlYkNvcmVTdXBwb3J0L1JlbmRlclRoZW1lUVN0
eWxlLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDJjYzk5OTMwODA0NTBmOTM5MTI3
OGQ0OTg3MWU1NzE5MjVkMGUxYWYuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAKLS0tIGEvU291cmNlL1dlYktpdC9xdC9XZWJDb3JlU3VwcG9ydC9SZW5kZXJUaGVtZVFT
dHlsZS5oCisrKyAvZGV2L251bGwKQEAgLTEsMTQ4ICswLDAgQEAKLS8qCi0gKiBUaGlzIGZpbGUg
aXMgcGFydCBvZiB0aGUgdGhlbWUgaW1wbGVtZW50YXRpb24gZm9yIGZvcm0gY29udHJvbHMgaW4g
V2ViQ29yZS4KLSAqCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTEtMjAxMiBOb2tpYSBDb3Jwb3JhdGlv
biBhbmQvb3IgaXRzIHN1YnNpZGlhcnkoLWllcykuCi0gKgotICogVGhpcyBsaWJyYXJ5IGlzIGZy
ZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgotICogbW9kaWZ5IGl0
IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKLSAqIExp
Y2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhl
cgotICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBs
YXRlciB2ZXJzaW9uLgotICoKLSAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUg
aG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZ
OyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAqIE1FUkNIQU5UQUJJTElU
WSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCi0gKiBM
aWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSAqCi0gKiBZ
b3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFs
IFB1YmxpYyBMaWNlbnNlCi0gKiBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxl
IENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bwotICogdGhlIEZyZWUgU29mdHdhcmUgRm91
bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKLSAqIEJvc3Rv
biwgTUEgMDIxMTAtMTMwMSwgVVNBLgotICoKLSAqLwotI2lmbmRlZiBSZW5kZXJUaGVtZVFTdHls
ZV9oCi0jZGVmaW5lIFJlbmRlclRoZW1lUVN0eWxlX2gKLQotI2luY2x1ZGUgIlJlbmRlclRoZW1l
UXQuaCIKLQotI2luY2x1ZGUgPFFTdHlsZT4KLQotUVRfQkVHSU5fTkFNRVNQQUNFCi0jaWZuZGVm
IFFUX05PX0xJTkVFRElUCi1jbGFzcyBRTGluZUVkaXQ7Ci0jZW5kaWYKLWNsYXNzIFFQYWludGVy
OwotY2xhc3MgUVdpZGdldDsKLVFUX0VORF9OQU1FU1BBQ0UKLQotbmFtZXNwYWNlIFdlYkNvcmUg
ewotCi1jbGFzcyBTY3JvbGxiYXJUaGVtZVFTdHlsZTsKLQotY2xhc3MgUmVuZGVyVGhlbWVRU3R5
bGUgOiBwdWJsaWMgUmVuZGVyVGhlbWVRdCB7Ci1wcml2YXRlOgotICAgIFJlbmRlclRoZW1lUVN0
eWxlKFBhZ2UqKTsKLSAgICB2aXJ0dWFsIH5SZW5kZXJUaGVtZVFTdHlsZSgpOwotCi1wdWJsaWM6
Ci0gICAgc3RhdGljIFBhc3NSZWZQdHI8UmVuZGVyVGhlbWU+IGNyZWF0ZShQYWdlKik7Ci0KLSAg
ICB2aXJ0dWFsIHZvaWQgYWRqdXN0U2xpZGVyVGh1bWJTaXplKFJlbmRlclN0eWxlKiwgRWxlbWVu
dCopIGNvbnN0OwotCi0gICAgUVN0eWxlKiBxU3R5bGUoKSBjb25zdDsKLQotcHJvdGVjdGVkOgot
ICAgIHZpcnR1YWwgdm9pZCBhZGp1c3RCdXR0b25TdHlsZShTdHlsZVJlc29sdmVyKiwgUmVuZGVy
U3R5bGUqLCBFbGVtZW50KikgY29uc3Q7Ci0gICAgdmlydHVhbCBib29sIHBhaW50QnV0dG9uKFJl
bmRlck9iamVjdCosIGNvbnN0IFBhaW50SW5mbyYsIGNvbnN0IEludFJlY3QmKTsKLQotICAgIHZp
cnR1YWwgYm9vbCBwYWludFRleHRGaWVsZChSZW5kZXJPYmplY3QqLCBjb25zdCBQYWludEluZm8m
LCBjb25zdCBJbnRSZWN0Jik7Ci0KLSAgICB2aXJ0dWFsIGJvb2wgcGFpbnRUZXh0QXJlYShSZW5k
ZXJPYmplY3QqLCBjb25zdCBQYWludEluZm8mLCBjb25zdCBJbnRSZWN0Jik7Ci0gICAgdmlydHVh
bCB2b2lkIGFkanVzdFRleHRBcmVhU3R5bGUoU3R5bGVSZXNvbHZlciosIFJlbmRlclN0eWxlKiwg
RWxlbWVudCopIGNvbnN0OwotCi0gICAgdmlydHVhbCBib29sIHBhaW50TWVudUxpc3QoUmVuZGVy
T2JqZWN0KiwgY29uc3QgUGFpbnRJbmZvJiwgY29uc3QgSW50UmVjdCYpOwotCi0gICAgdmlydHVh
bCBib29sIHBhaW50TWVudUxpc3RCdXR0b24oUmVuZGVyT2JqZWN0KiwgY29uc3QgUGFpbnRJbmZv
JiwgY29uc3QgSW50UmVjdCYpOwotICAgIHZpcnR1YWwgdm9pZCBhZGp1c3RNZW51TGlzdEJ1dHRv
blN0eWxlKFN0eWxlUmVzb2x2ZXIqLCBSZW5kZXJTdHlsZSosIEVsZW1lbnQqKSBjb25zdDsKLQot
I2lmIEVOQUJMRShQUk9HUkVTU19FTEVNRU5UKQotICAgIC8vIFJldHVybnMgdGhlIGR1cmF0aW9u
IG9mIHRoZSBhbmltYXRpb24gZm9yIHRoZSBwcm9ncmVzcyBiYXIuCi0gICAgdmlydHVhbCBkb3Vi
bGUgYW5pbWF0aW9uRHVyYXRpb25Gb3JQcm9ncmVzc0JhcihSZW5kZXJQcm9ncmVzcyopIGNvbnN0
OwotICAgIHZpcnR1YWwgYm9vbCBwYWludFByb2dyZXNzQmFyKFJlbmRlck9iamVjdCosIGNvbnN0
IFBhaW50SW5mbyYsIGNvbnN0IEludFJlY3QmKTsKLSNlbmRpZgotCi0gICAgdmlydHVhbCBib29s
IHBhaW50U2xpZGVyVHJhY2soUmVuZGVyT2JqZWN0KiwgY29uc3QgUGFpbnRJbmZvJiwgY29uc3Qg
SW50UmVjdCYpOwotICAgIHZpcnR1YWwgdm9pZCBhZGp1c3RTbGlkZXJUcmFja1N0eWxlKFN0eWxl
UmVzb2x2ZXIqLCBSZW5kZXJTdHlsZSosIEVsZW1lbnQqKSBjb25zdDsKLQotICAgIHZpcnR1YWwg
Ym9vbCBwYWludFNsaWRlclRodW1iKFJlbmRlck9iamVjdCosIGNvbnN0IFBhaW50SW5mbyYsIGNv
bnN0IEludFJlY3QmKTsKLSAgICB2aXJ0dWFsIHZvaWQgYWRqdXN0U2xpZGVyVGh1bWJTdHlsZShT
dHlsZVJlc29sdmVyKiwgUmVuZGVyU3R5bGUqLCBFbGVtZW50KikgY29uc3Q7Ci0KLSAgICB2aXJ0
dWFsIGJvb2wgcGFpbnRTZWFyY2hGaWVsZChSZW5kZXJPYmplY3QqLCBjb25zdCBQYWludEluZm8m
LCBjb25zdCBJbnRSZWN0Jik7Ci0KLSAgICB2aXJ0dWFsIHZvaWQgYWRqdXN0U2VhcmNoRmllbGRE
ZWNvcmF0aW9uU3R5bGUoU3R5bGVSZXNvbHZlciosIFJlbmRlclN0eWxlKiwgRWxlbWVudCopIGNv
bnN0OwotICAgIHZpcnR1YWwgYm9vbCBwYWludFNlYXJjaEZpZWxkRGVjb3JhdGlvbihSZW5kZXJP
YmplY3QqLCBjb25zdCBQYWludEluZm8mLCBjb25zdCBJbnRSZWN0Jik7Ci0KLSAgICB2aXJ0dWFs
IHZvaWQgYWRqdXN0U2VhcmNoRmllbGRSZXN1bHRzRGVjb3JhdGlvblN0eWxlKFN0eWxlUmVzb2x2
ZXIqLCBSZW5kZXJTdHlsZSosIEVsZW1lbnQqKSBjb25zdDsKLSAgICB2aXJ0dWFsIGJvb2wgcGFp
bnRTZWFyY2hGaWVsZFJlc3VsdHNEZWNvcmF0aW9uKFJlbmRlck9iamVjdCosIGNvbnN0IFBhaW50
SW5mbyYsIGNvbnN0IEludFJlY3QmKTsKLQotI2lmbmRlZiBRVF9OT19TUElOQk9YCi0gICAgdmly
dHVhbCBib29sIHBhaW50SW5uZXJTcGluQnV0dG9uKFJlbmRlck9iamVjdCosIGNvbnN0IFBhaW50
SW5mbyYsIGNvbnN0IEludFJlY3QmKTsKLSNlbmRpZgotCi1wcm90ZWN0ZWQ6Ci0gICAgdmlydHVh
bCB2b2lkIGNvbXB1dGVTaXplQmFzZWRPblN0eWxlKFJlbmRlclN0eWxlKikgY29uc3Q7Ci0KLSAg
ICB2aXJ0dWFsIFFTaGFyZWRQb2ludGVyPFN0eWxlUGFpbnRlcj4gZ2V0U3R5bGVQYWludGVyKGNv
bnN0IFBhaW50SW5mbyYpOwotCi0gICAgdmlydHVhbCBRUmVjdCBpbmZsYXRlQnV0dG9uUmVjdChj
b25zdCBRUmVjdCYgb3JpZ2luYWxSZWN0KSBjb25zdDsKLQotICAgIHZpcnR1YWwgdm9pZCBzZXRQ
b3B1cFBhZGRpbmcoUmVuZGVyU3R5bGUqKSBjb25zdDsKLQotICAgIHZpcnR1YWwgUVBhbGV0dGUg
Y29sb3JQYWxldHRlKCkgY29uc3Q7Ci0KLXByaXZhdGU6Ci0gICAgQ29udHJvbFBhcnQgaW5pdGlh
bGl6ZUNvbW1vblFTdHlsZU9wdGlvbnMoUVN0eWxlT3B0aW9uJiwgUmVuZGVyT2JqZWN0KikgY29u
c3Q7Ci0KLSAgICB2b2lkIHNldEJ1dHRvblBhZGRpbmcoUmVuZGVyU3R5bGUqKSBjb25zdDsKLQot
ICAgIGludCBmaW5kRnJhbWVMaW5lV2lkdGgoUVN0eWxlKikgY29uc3Q7Ci0KLSAgICBRU3R5bGUq
IGZhbGxiYWNrU3R5bGUoKSBjb25zdDsKLQotICAgIHZvaWQgc2V0UGFsZXR0ZUZyb21QYWdlQ2xp
ZW50SWZFeGlzdHMoUVBhbGV0dGUmKSBjb25zdDsKLQotI2lmZGVmIFFfT1NfTUFDCi0gICAgaW50
IG1fYnV0dG9uRm9udFBpeGVsU2l6ZTsKLSNlbmRpZgotCi0gICAgUVN0eWxlKiBtX2ZhbGxiYWNr
U3R5bGU7Ci0jaWZuZGVmIFFUX05PX0xJTkVFRElUCi0gICAgbXV0YWJsZSBRTGluZUVkaXQqIG1f
bGluZUVkaXQ7Ci0jZW5kaWYKLX07Ci0KLWNsYXNzIFN0eWxlUGFpbnRlclFTdHlsZSA6IHB1Ymxp
YyBTdHlsZVBhaW50ZXIgewotcHVibGljOgotICAgIGV4cGxpY2l0IFN0eWxlUGFpbnRlclFTdHls
ZShSZW5kZXJUaGVtZVFTdHlsZSosIGNvbnN0IFBhaW50SW5mbyYpOwotICAgIGV4cGxpY2l0IFN0
eWxlUGFpbnRlclFTdHlsZShTY3JvbGxiYXJUaGVtZVFTdHlsZSosIEdyYXBoaWNzQ29udGV4dCop
OwotCi0gICAgYm9vbCBpc1ZhbGlkKCkgY29uc3QgeyByZXR1cm4gc3R5bGUgJiYgU3R5bGVQYWlu
dGVyOjppc1ZhbGlkKCk7IH0KLQotICAgIFFXaWRnZXQqIHdpZGdldDsKLSAgICBRU3R5bGUqIHN0
eWxlOwotCi0gICAgdm9pZCBkcmF3UHJpbWl0aXZlKFFTdHlsZTo6UHJpbWl0aXZlRWxlbWVudCBw
ZSwgY29uc3QgUVN0eWxlT3B0aW9uJiBvcHQpCi0gICAgeyBzdHlsZS0+ZHJhd1ByaW1pdGl2ZShw
ZSwgJm9wdCwgcGFpbnRlciwgd2lkZ2V0KTsgfQotICAgIHZvaWQgZHJhd0NvbnRyb2woUVN0eWxl
OjpDb250cm9sRWxlbWVudCBjZSwgY29uc3QgUVN0eWxlT3B0aW9uJiBvcHQpCi0gICAgeyBzdHls
ZS0+ZHJhd0NvbnRyb2woY2UsICZvcHQsIHBhaW50ZXIsIHdpZGdldCk7IH0KLSAgICB2b2lkIGRy
YXdDb21wbGV4Q29udHJvbChRU3R5bGU6OkNvbXBsZXhDb250cm9sIGNjLCBjb25zdCBRU3R5bGVP
cHRpb25Db21wbGV4JiBvcHQpCi0gICAgeyBzdHlsZS0+ZHJhd0NvbXBsZXhDb250cm9sKGNjLCAm
b3B0LCBwYWludGVyLCB3aWRnZXQpOyB9Ci0KLXByaXZhdGU6Ci0gICAgdm9pZCBpbml0KEdyYXBo
aWNzQ29udGV4dCosIFFTdHlsZSopOwotCi0gICAgUV9ESVNBQkxFX0NPUFkoU3R5bGVQYWludGVy
UVN0eWxlKQotfTsKLQotfQotCi0jZW5kaWYgLy8gUmVuZGVyVGhlbWVRU3R5bGVfaApkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYktpdC9xdC9XZWJDb3JlU3VwcG9ydC9TY3JvbGxiYXJUaGVtZVFTdHls
ZS5jcHAgYi9Tb3VyY2UvV2ViS2l0L3F0L1dlYkNvcmVTdXBwb3J0L1Njcm9sbGJhclRoZW1lUVN0
eWxlLmNwcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYjA4MjdmZWE0ZTA5MjIwZjBh
YTM5MmE3YTVkOWRjNGMzYTY2OGJlMy4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViS2l0L3F0L1dlYkNvcmVTdXBwb3J0L1Njcm9sbGJhclRo
ZW1lUVN0eWxlLmNwcAorKysgL2Rldi9udWxsCkBAIC0xLDI1MyArMCwwIEBACi0vKgotICogQ29w
eXJpZ2h0IChDKSAyMDA3LCAyMDA4IEFwcGxlIEluYy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KLSAq
IENvcHlyaWdodCAoQykgMjAwNyBTdGFpa29zIENvbXB1dGluZyBTZXJ2aWNlcyBJbmMuIDxpbmZv
QHN0YWlrb3MubmV0PgotICogQ29weXJpZ2h0IChDKSAyMDA4IE5va2lhIENvcnBvcmF0aW9uIGFu
ZC9vciBpdHMgc3Vic2lkaWFyeSgtaWVzKQotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2Ug
aW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0
aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25z
Ci0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3Qg
cmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0
aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0g
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlh
bHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUg
SVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQotICogRVhQUkVTUyBP
UiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUK
LSAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9S
IEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNI
QUxMIEFQUExFIElOQy4gT1IKLSAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJF
Q1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAotICogRVhFTVBMQVJZLCBPUiBDT05T
RVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogUFJP
Q1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERB
VEEsIE9SCi0gKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FV
U0VEIEFORCBPTiBBTlkgVEhFT1JZCi0gKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJB
Q1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBP
UiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotICogT0YgVEhJ
UyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERB
TUFHRS4KLSAqLwotCi0jaW5jbHVkZSAiY29uZmlnLmgiCi0jaW5jbHVkZSAiU2Nyb2xsYmFyVGhl
bWVRU3R5bGUuaCIKLQotI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dC5oIgotI2luY2x1ZGUgIlBs
YXRmb3JtTW91c2VFdmVudC5oIgotI2luY2x1ZGUgIlJlbmRlclRoZW1lUVN0eWxlLmgiCi0jaW5j
bHVkZSAiUmVuZGVyVGhlbWVRdE1vYmlsZS5oIgotI2luY2x1ZGUgIlNjcm9sbFZpZXcuaCIKLSNp
bmNsdWRlICJTY3JvbGxiYXIuaCIKLQotI2luY2x1ZGUgPFFBcHBsaWNhdGlvbj4KLSNpZmRlZiBR
X1dTX01BQwotI2luY2x1ZGUgPFFNYWNTdHlsZT4KLSNlbmRpZgotI2luY2x1ZGUgPFFNZW51Pgot
I2luY2x1ZGUgPFFQYWludGVyPgotI2luY2x1ZGUgPFFTdHlsZT4KLSNpbmNsdWRlIDxRU3R5bGVP
cHRpb25TbGlkZXI+Ci0KLW5hbWVzcGFjZSBXZWJDb3JlIHsKLQotU2Nyb2xsYmFyVGhlbWVRU3R5
bGU6On5TY3JvbGxiYXJUaGVtZVFTdHlsZSgpCi17Ci19Ci0KLXN0YXRpYyBRU3R5bGU6OlN1YkNv
bnRyb2wgc2NQYXJ0KGNvbnN0IFNjcm9sbGJhclBhcnQmIHBhcnQpCi17Ci0gICAgc3dpdGNoIChw
YXJ0KSB7Ci0gICAgY2FzZSBOb1BhcnQ6Ci0gICAgICAgIHJldHVybiBRU3R5bGU6OlNDX05vbmU7
Ci0gICAgY2FzZSBCYWNrQnV0dG9uU3RhcnRQYXJ0OgotICAgIGNhc2UgQmFja0J1dHRvbkVuZFBh
cnQ6Ci0gICAgICAgIHJldHVybiBRU3R5bGU6OlNDX1Njcm9sbEJhclN1YkxpbmU7Ci0gICAgY2Fz
ZSBCYWNrVHJhY2tQYXJ0OgotICAgICAgICByZXR1cm4gUVN0eWxlOjpTQ19TY3JvbGxCYXJTdWJQ
YWdlOwotICAgIGNhc2UgVGh1bWJQYXJ0OgotICAgICAgICByZXR1cm4gUVN0eWxlOjpTQ19TY3Jv
bGxCYXJTbGlkZXI7Ci0gICAgY2FzZSBGb3J3YXJkVHJhY2tQYXJ0OgotICAgICAgICByZXR1cm4g
UVN0eWxlOjpTQ19TY3JvbGxCYXJBZGRQYWdlOwotICAgIGNhc2UgRm9yd2FyZEJ1dHRvblN0YXJ0
UGFydDoKLSAgICBjYXNlIEZvcndhcmRCdXR0b25FbmRQYXJ0OgotICAgICAgICByZXR1cm4gUVN0
eWxlOjpTQ19TY3JvbGxCYXJBZGRMaW5lOwotICAgIH0KLQotICAgIHJldHVybiBRU3R5bGU6OlND
X05vbmU7Ci19Ci0KLXN0YXRpYyBTY3JvbGxiYXJQYXJ0IHNjcm9sbGJhclBhcnQoY29uc3QgUVN0
eWxlOjpTdWJDb250cm9sJiBzYykKLXsKLSAgICBzd2l0Y2ggKHNjKSB7Ci0gICAgY2FzZSBRU3R5
bGU6OlNDX05vbmU6Ci0gICAgICAgIHJldHVybiBOb1BhcnQ7Ci0gICAgY2FzZSBRU3R5bGU6OlND
X1Njcm9sbEJhclN1YkxpbmU6Ci0gICAgICAgIHJldHVybiBCYWNrQnV0dG9uU3RhcnRQYXJ0Owot
ICAgIGNhc2UgUVN0eWxlOjpTQ19TY3JvbGxCYXJTdWJQYWdlOgotICAgICAgICByZXR1cm4gQmFj
a1RyYWNrUGFydDsKLSAgICBjYXNlIFFTdHlsZTo6U0NfU2Nyb2xsQmFyU2xpZGVyOgotICAgICAg
ICByZXR1cm4gVGh1bWJQYXJ0OwotICAgIGNhc2UgUVN0eWxlOjpTQ19TY3JvbGxCYXJBZGRQYWdl
OgotICAgICAgICByZXR1cm4gRm9yd2FyZFRyYWNrUGFydDsKLSAgICBjYXNlIFFTdHlsZTo6U0Nf
U2Nyb2xsQmFyQWRkTGluZToKLSAgICAgICAgcmV0dXJuIEZvcndhcmRCdXR0b25TdGFydFBhcnQ7
Ci0gICAgfQotICAgIHJldHVybiBOb1BhcnQ7Ci19Ci0KLXN0YXRpYyBRU3R5bGVPcHRpb25TbGlk
ZXIqIHN0eWxlT3B0aW9uU2xpZGVyKFNjcm9sbGJhclRoZW1lQ2xpZW50KiBzY3JvbGxiYXIsIFFX
aWRnZXQqIHdpZGdldCA9IDApCi17Ci0gICAgc3RhdGljIFFTdHlsZU9wdGlvblNsaWRlciBvcHQ7
Ci0gICAgaWYgKHdpZGdldCkKLSAgICAgICAgb3B0LmluaXRGcm9tKHdpZGdldCk7Ci0gICAgZWxz
ZQotICAgICAgICBvcHQuc3RhdGUgfD0gUVN0eWxlOjpTdGF0ZV9BY3RpdmU7Ci0KLSAgICBvcHQu
c3RhdGUgJj0gflFTdHlsZTo6U3RhdGVfSGFzRm9jdXM7Ci0KLSAgICBvcHQucmVjdCA9IHNjcm9s
bGJhci0+ZnJhbWVSZWN0KCk7Ci0gICAgaWYgKHNjcm9sbGJhci0+ZW5hYmxlZCgpKQotICAgICAg
ICBvcHQuc3RhdGUgfD0gUVN0eWxlOjpTdGF0ZV9FbmFibGVkOwotICAgIGlmIChzY3JvbGxiYXIt
PmNvbnRyb2xTaXplKCkgIT0gUmVndWxhclNjcm9sbGJhcikKLSAgICAgICAgb3B0LnN0YXRlIHw9
IFFTdHlsZTo6U3RhdGVfTWluaTsKLSAgICBvcHQub3JpZW50YXRpb24gPSAoc2Nyb2xsYmFyLT5v
cmllbnRhdGlvbigpID09IFZlcnRpY2FsU2Nyb2xsYmFyKSA/IFF0OjpWZXJ0aWNhbCA6IFF0OjpI
b3Jpem9udGFsOwotCi0gICAgaWYgKHNjcm9sbGJhci0+b3JpZW50YXRpb24oKSA9PSBIb3Jpem9u
dGFsU2Nyb2xsYmFyKQotICAgICAgICBvcHQuc3RhdGUgfD0gUVN0eWxlOjpTdGF0ZV9Ib3Jpem9u
dGFsOwotICAgIGVsc2UKLSAgICAgICAgb3B0LnN0YXRlICY9IH5RU3R5bGU6OlN0YXRlX0hvcml6
b250YWw7Ci0KLSAgICBvcHQuc2xpZGVyVmFsdWUgPSBzY3JvbGxiYXItPnZhbHVlKCk7Ci0gICAg
b3B0LnNsaWRlclBvc2l0aW9uID0gb3B0LnNsaWRlclZhbHVlOwotICAgIG9wdC5wYWdlU3RlcCA9
IHNjcm9sbGJhci0+cGFnZVN0ZXAoKTsKLSAgICBvcHQuc2luZ2xlU3RlcCA9IHNjcm9sbGJhci0+
bGluZVN0ZXAoKTsKLSAgICBvcHQubWluaW11bSA9IDA7Ci0gICAgb3B0Lm1heGltdW0gPSBxTWF4
KDAsIHNjcm9sbGJhci0+bWF4aW11bSgpKTsKLSAgICBTY3JvbGxiYXJQYXJ0IHByZXNzZWRQYXJ0
ID0gc2Nyb2xsYmFyLT5wcmVzc2VkUGFydCgpOwotICAgIFNjcm9sbGJhclBhcnQgaG92ZXJlZFBh
cnQgPSBzY3JvbGxiYXItPmhvdmVyZWRQYXJ0KCk7Ci0gICAgaWYgKHByZXNzZWRQYXJ0ICE9IE5v
UGFydCkgewotICAgICAgICBvcHQuYWN0aXZlU3ViQ29udHJvbHMgPSBzY1BhcnQoc2Nyb2xsYmFy
LT5wcmVzc2VkUGFydCgpKTsKLSAgICAgICAgaWYgKHByZXNzZWRQYXJ0ID09IEJhY2tCdXR0b25T
dGFydFBhcnQgfHwgcHJlc3NlZFBhcnQgPT0gRm9yd2FyZEJ1dHRvblN0YXJ0UGFydAotICAgICAg
ICAgICAgfHwgcHJlc3NlZFBhcnQgPT0gQmFja0J1dHRvbkVuZFBhcnQgfHwgcHJlc3NlZFBhcnQg
PT0gRm9yd2FyZEJ1dHRvbkVuZFBhcnQKLSAgICAgICAgICAgIHx8IHByZXNzZWRQYXJ0ID09IFRo
dW1iUGFydCkKLSAgICAgICAgICAgIG9wdC5zdGF0ZSB8PSBRU3R5bGU6OlN0YXRlX1N1bmtlbjsK
LSAgICB9IGVsc2UKLSAgICAgICAgb3B0LmFjdGl2ZVN1YkNvbnRyb2xzID0gc2NQYXJ0KGhvdmVy
ZWRQYXJ0KTsKLSAgICBpZiAoaG92ZXJlZFBhcnQgIT0gTm9QYXJ0KQotICAgICAgICBvcHQuc3Rh
dGUgfD0gUVN0eWxlOjpTdGF0ZV9Nb3VzZU92ZXI7Ci0gICAgcmV0dXJuICZvcHQ7Ci19Ci0KLWJv
b2wgU2Nyb2xsYmFyVGhlbWVRU3R5bGU6OnBhaW50KFNjcm9sbGJhclRoZW1lQ2xpZW50KiBzY3Jv
bGxiYXIsIEdyYXBoaWNzQ29udGV4dCogZ3JhcGhpY3NDb250ZXh0LCBjb25zdCBJbnRSZWN0JiBk
aXJ0eVJlY3QpCi17Ci0gICAgaWYgKGdyYXBoaWNzQ29udGV4dC0+dXBkYXRpbmdDb250cm9sVGlu
dHMoKSkgewotICAgICAgIHNjcm9sbGJhci0+aW52YWxpZGF0ZVJlY3QoZGlydHlSZWN0KTsKLSAg
ICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQotCi0gICAgU3R5bGVQYWludGVyUVN0eWxlIHAodGhp
cywgZ3JhcGhpY3NDb250ZXh0KTsKLSAgICBpZiAoIXAuaXNWYWxpZCgpKQotICAgICAgcmV0dXJu
IHRydWU7Ci0KLSAgICBwLnBhaW50ZXItPnNhdmUoKTsKLSAgICBRU3R5bGVPcHRpb25TbGlkZXIq
IG9wdCA9IHN0eWxlT3B0aW9uU2xpZGVyKHNjcm9sbGJhciwgcC53aWRnZXQpOwotCi0gICAgcC5w
YWludGVyLT5zZXRDbGlwUmVjdChvcHQtPnJlY3QuaW50ZXJzZWN0ZWQoZGlydHlSZWN0KSwgUXQ6
OkludGVyc2VjdENsaXApOwotCi0jaWZkZWYgUV9XU19NQUMKLSAgICAvLyBGSVhNRTogV2UgYWxz
byBuZWVkIHRvIGNoZWNrIHRoZSB3aWRnZXQgc3R5bGUgYnV0IHRvZGF5IFNjcm9sbGJhclRoZW1l
IGlzIG5vdCBhd2FyZSBvZiB0aGUgcGFnZSBzbyB3ZQotICAgIC8vIGNhbid0IGdldCB0aGUgd2lk
Z2V0LgotICAgIGlmIChxb2JqZWN0X2Nhc3Q8UU1hY1N0eWxlKj4oc3R5bGUoKSkpCi0gICAgICAg
IHAuZHJhd0NvbXBsZXhDb250cm9sKFFTdHlsZTo6Q0NfU2Nyb2xsQmFyLCAqb3B0KTsKLSAgICBl
bHNlCi0jZW5kaWYKLSAgICB7Ci0gICAgICAgIC8vIFRoZSBRU3R5bGUgZXhwZWN0cyB0aGUgYmFj
a2dyb3VuZCB0byBiZSBhbHJlYWR5IGZpbGxlZC4KLSAgICAgICAgcC5wYWludGVyLT5maWxsUmVj
dChvcHQtPnJlY3QsIG9wdC0+cGFsZXR0ZS5iYWNrZ3JvdW5kKCkpOwotCi0gICAgICAgIGNvbnN0
IFFQb2ludCB0b3BMZWZ0ID0gb3B0LT5yZWN0LnRvcExlZnQoKTsKLSAgICAgICAgcC5wYWludGVy
LT50cmFuc2xhdGUodG9wTGVmdCk7Ci0gICAgICAgIG9wdC0+cmVjdC5tb3ZlVG8oUVBvaW50KDAs
IDApKTsKLSAgICAgICAgcC5kcmF3Q29tcGxleENvbnRyb2woUVN0eWxlOjpDQ19TY3JvbGxCYXIs
ICpvcHQpOwotICAgICAgICBvcHQtPnJlY3QubW92ZVRvKHRvcExlZnQpOwotICAgIH0KLSAgICBw
LnBhaW50ZXItPnJlc3RvcmUoKTsKLQotICAgIHJldHVybiB0cnVlOwotfQotCi1TY3JvbGxiYXJQ
YXJ0IFNjcm9sbGJhclRoZW1lUVN0eWxlOjpoaXRUZXN0KFNjcm9sbGJhclRoZW1lQ2xpZW50KiBz
Y3JvbGxiYXIsIGNvbnN0IFBsYXRmb3JtTW91c2VFdmVudCYgZXZ0KQotewotICAgIFFTdHlsZU9w
dGlvblNsaWRlciogb3B0ID0gc3R5bGVPcHRpb25TbGlkZXIoc2Nyb2xsYmFyKTsKLSAgICBjb25z
dCBRUG9pbnQgcG9zID0gc2Nyb2xsYmFyLT5jb252ZXJ0RnJvbUNvbnRhaW5pbmdXaW5kb3coZXZ0
LnBvc2l0aW9uKCkpOwotICAgIG9wdC0+cmVjdC5tb3ZlVG8oUVBvaW50KDAsIDApKTsKLSAgICBR
U3R5bGU6OlN1YkNvbnRyb2wgc2MgPSBzdHlsZSgpLT5oaXRUZXN0Q29tcGxleENvbnRyb2woUVN0
eWxlOjpDQ19TY3JvbGxCYXIsIG9wdCwgcG9zLCAwKTsKLSAgICByZXR1cm4gc2Nyb2xsYmFyUGFy
dChzYyk7Ci19Ci0KLWJvb2wgU2Nyb2xsYmFyVGhlbWVRU3R5bGU6OnNob3VsZENlbnRlck9uVGh1
bWIoU2Nyb2xsYmFyVGhlbWVDbGllbnQqLCBjb25zdCBQbGF0Zm9ybU1vdXNlRXZlbnQmIGV2dCkK
LXsKLSAgICAvLyBNaWRkbGUgY2xpY2sgY2VudGVycyBzbGlkZXIgdGh1bWIgKGlmIHN1cHBvcnRl
ZCkuCi0gICAgcmV0dXJuIHN0eWxlKCktPnN0eWxlSGludChRU3R5bGU6OlNIX1Njcm9sbEJhcl9N
aWRkbGVDbGlja0Fic29sdXRlUG9zaXRpb24pICYmIGV2dC5idXR0b24oKSA9PSBNaWRkbGVCdXR0
b247Ci19Ci0KLXZvaWQgU2Nyb2xsYmFyVGhlbWVRU3R5bGU6OmludmFsaWRhdGVQYXJ0KFNjcm9s
bGJhclRoZW1lQ2xpZW50KiBzY3JvbGxiYXIsIFNjcm9sbGJhclBhcnQpCi17Ci0gICAgLy8gRklY
TUU6IERvIG1vcmUgcHJlY2lzZSBpbnZhbGlkYXRpb24uCi0gICAgc2Nyb2xsYmFyLT5pbnZhbGlk
YXRlKCk7Ci19Ci0KLWludCBTY3JvbGxiYXJUaGVtZVFTdHlsZTo6c2Nyb2xsYmFyVGhpY2tuZXNz
KFNjcm9sbGJhckNvbnRyb2xTaXplIGNvbnRyb2xTaXplKQotewotICAgIFFTdHlsZU9wdGlvblNs
aWRlciBvOwotICAgIG8ub3JpZW50YXRpb24gPSBRdDo6VmVydGljYWw7Ci0gICAgby5zdGF0ZSAm
PSB+UVN0eWxlOjpTdGF0ZV9Ib3Jpem9udGFsOwotICAgIGlmIChjb250cm9sU2l6ZSAhPSBSZWd1
bGFyU2Nyb2xsYmFyKQotICAgICAgICBvLnN0YXRlIHw9IFFTdHlsZTo6U3RhdGVfTWluaTsKLSAg
ICByZXR1cm4gc3R5bGUoKS0+cGl4ZWxNZXRyaWMoUVN0eWxlOjpQTV9TY3JvbGxCYXJFeHRlbnQs
ICZvLCAwKTsKLX0KLQotaW50IFNjcm9sbGJhclRoZW1lUVN0eWxlOjp0aHVtYlBvc2l0aW9uKFNj
cm9sbGJhclRoZW1lQ2xpZW50KiBzY3JvbGxiYXIpCi17Ci0gICAgaWYgKHNjcm9sbGJhci0+ZW5h
YmxlZCgpKSB7Ci0gICAgICAgIGZsb2F0IHBvcyA9IChmbG9hdClzY3JvbGxiYXItPmN1cnJlbnRQ
b3MoKSAqICh0cmFja0xlbmd0aChzY3JvbGxiYXIpIC0gdGh1bWJMZW5ndGgoc2Nyb2xsYmFyKSkg
LyBzY3JvbGxiYXItPm1heGltdW0oKTsKLSAgICAgICAgcmV0dXJuIChwb3MgPCAxICYmIHBvcyA+
IDApID8gMSA6IHBvczsKLSAgICB9Ci0gICAgcmV0dXJuIDA7Ci19Ci0KLWludCBTY3JvbGxiYXJU
aGVtZVFTdHlsZTo6dGh1bWJMZW5ndGgoU2Nyb2xsYmFyVGhlbWVDbGllbnQqIHNjcm9sbGJhcikK
LXsKLSAgICBRU3R5bGVPcHRpb25TbGlkZXIqIG9wdCA9IHN0eWxlT3B0aW9uU2xpZGVyKHNjcm9s
bGJhcik7Ci0gICAgSW50UmVjdCB0aHVtYiA9IHN0eWxlKCktPnN1YkNvbnRyb2xSZWN0KFFTdHls
ZTo6Q0NfU2Nyb2xsQmFyLCBvcHQsIFFTdHlsZTo6U0NfU2Nyb2xsQmFyU2xpZGVyLCAwKTsKLSAg
ICByZXR1cm4gc2Nyb2xsYmFyLT5vcmllbnRhdGlvbigpID09IEhvcml6b250YWxTY3JvbGxiYXIg
PyB0aHVtYi53aWR0aCgpIDogdGh1bWIuaGVpZ2h0KCk7Ci19Ci0KLWludCBTY3JvbGxiYXJUaGVt
ZVFTdHlsZTo6dHJhY2tQb3NpdGlvbihTY3JvbGxiYXJUaGVtZUNsaWVudCogc2Nyb2xsYmFyKQot
ewotICAgIFFTdHlsZU9wdGlvblNsaWRlciogb3B0ID0gc3R5bGVPcHRpb25TbGlkZXIoc2Nyb2xs
YmFyKTsKLSAgICBJbnRSZWN0IHRyYWNrID0gc3R5bGUoKS0+c3ViQ29udHJvbFJlY3QoUVN0eWxl
OjpDQ19TY3JvbGxCYXIsIG9wdCwgUVN0eWxlOjpTQ19TY3JvbGxCYXJHcm9vdmUsIDApOwotICAg
IHJldHVybiBzY3JvbGxiYXItPm9yaWVudGF0aW9uKCkgPT0gSG9yaXpvbnRhbFNjcm9sbGJhciA/
IHRyYWNrLngoKSAtIHNjcm9sbGJhci0+eCgpIDogdHJhY2sueSgpIC0gc2Nyb2xsYmFyLT55KCk7
Ci19Ci0KLWludCBTY3JvbGxiYXJUaGVtZVFTdHlsZTo6dHJhY2tMZW5ndGgoU2Nyb2xsYmFyVGhl
bWVDbGllbnQqIHNjcm9sbGJhcikKLXsKLSAgICBRU3R5bGVPcHRpb25TbGlkZXIqIG9wdCA9IHN0
eWxlT3B0aW9uU2xpZGVyKHNjcm9sbGJhcik7Ci0gICAgSW50UmVjdCB0cmFjayA9IHN0eWxlKCkt
PnN1YkNvbnRyb2xSZWN0KFFTdHlsZTo6Q0NfU2Nyb2xsQmFyLCBvcHQsIFFTdHlsZTo6U0NfU2Ny
b2xsQmFyR3Jvb3ZlLCAwKTsKLSAgICByZXR1cm4gc2Nyb2xsYmFyLT5vcmllbnRhdGlvbigpID09
IEhvcml6b250YWxTY3JvbGxiYXIgPyB0cmFjay53aWR0aCgpIDogdHJhY2suaGVpZ2h0KCk7Ci19
Ci0KLXZvaWQgU2Nyb2xsYmFyVGhlbWVRU3R5bGU6OnBhaW50U2Nyb2xsQ29ybmVyKFNjcm9sbFZp
ZXcqLCBHcmFwaGljc0NvbnRleHQqIGNvbnRleHQsIGNvbnN0IEludFJlY3QmIHJlY3QpCi17Ci0g
ICAgU3R5bGVQYWludGVyUVN0eWxlIHAodGhpcywgY29udGV4dCk7Ci0gICAgaWYgKCFwLmlzVmFs
aWQoKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgUVN0eWxlT3B0aW9uIG9wdGlvbjsKLSAgICBv
cHRpb24ucmVjdCA9IHJlY3Q7Ci0gICAgcC5kcmF3UHJpbWl0aXZlKFFTdHlsZTo6UEVfUGFuZWxT
Y3JvbGxBcmVhQ29ybmVyLCBvcHRpb24pOwotfQotCi1RU3R5bGUqIFNjcm9sbGJhclRoZW1lUVN0
eWxlOjpzdHlsZSgpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIFFBcHBsaWNhdGlvbjo6c3R5bGUoKTsK
LX0KLQotfQotCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L3F0L1dlYkNvcmVTdXBwb3J0L1Nj
cm9sbGJhclRoZW1lUVN0eWxlLmggYi9Tb3VyY2UvV2ViS2l0L3F0L1dlYkNvcmVTdXBwb3J0L1Nj
cm9sbGJhclRoZW1lUVN0eWxlLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDI1Mzdi
OWFlNDRiNDU4ZGQ3MDIyNWEwNWUwM2RiYTFjNzJhM2RkZTAuLjAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1dlYktpdC9xdC9XZWJDb3JlU3VwcG9y
dC9TY3JvbGxiYXJUaGVtZVFTdHlsZS5oCisrKyAvZGV2L251bGwKQEAgLTEsNjMgKzAsMCBAQAot
LyoKLSAqIENvcHlyaWdodCAoQykgMjAwOCBBcHBsZSBJbmMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQu
Ci0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jt
cywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlk
ZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRp
c3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdo
dAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3Qg
cmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRv
Y3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0
cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMu
IGBgQVMgSVMnJyBBTkQgQU5ZCi0gKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQotICogSU1QTElFRCBXQVJSQU5USUVTIE9G
IE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NF
IEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgotICogQ09O
VFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUws
IFNQRUNJQUwsCi0gKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdP
T0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKLSAqIFBST0ZJVFM7IE9SIEJV
U0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKLSAq
IE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1Ig
VE9SVAotICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBB
TlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0gKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklT
RUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLSNpZm5kZWYgU2Ny
b2xsYmFyVGhlbWVRU3R5bGVfaAotI2RlZmluZSBTY3JvbGxiYXJUaGVtZVFTdHlsZV9oCi0KLSNp
bmNsdWRlICJTY3JvbGxiYXJUaGVtZS5oIgotCi0jaW5jbHVkZSA8UXRDb3JlL3FnbG9iYWwuaD4K
LQotUVRfQkVHSU5fTkFNRVNQQUNFCi1jbGFzcyBRU3R5bGU7Ci1RVF9FTkRfTkFNRVNQQUNFCi0K
LW5hbWVzcGFjZSBXZWJDb3JlIHsKLQotY2xhc3MgU2Nyb2xsYmFyVGhlbWVRU3R5bGUgOiBwdWJs
aWMgU2Nyb2xsYmFyVGhlbWUgewotcHVibGljOgotICAgIHZpcnR1YWwgflNjcm9sbGJhclRoZW1l
UVN0eWxlKCk7Ci0KLSAgICB2aXJ0dWFsIGJvb2wgcGFpbnQoU2Nyb2xsYmFyVGhlbWVDbGllbnQq
LCBHcmFwaGljc0NvbnRleHQqLCBjb25zdCBJbnRSZWN0JiBkaXJ0eVJlY3QpOwotICAgIHZpcnR1
YWwgdm9pZCBwYWludFNjcm9sbENvcm5lcihTY3JvbGxWaWV3KiwgR3JhcGhpY3NDb250ZXh0Kiwg
Y29uc3QgSW50UmVjdCYgY29ybmVyUmVjdCk7Ci0KLSAgICB2aXJ0dWFsIFNjcm9sbGJhclBhcnQg
aGl0VGVzdChTY3JvbGxiYXJUaGVtZUNsaWVudCosIGNvbnN0IFBsYXRmb3JtTW91c2VFdmVudCYp
OwotCi0gICAgdmlydHVhbCBib29sIHNob3VsZENlbnRlck9uVGh1bWIoU2Nyb2xsYmFyVGhlbWVD
bGllbnQqLCBjb25zdCBQbGF0Zm9ybU1vdXNlRXZlbnQmKTsKLQotICAgIHZpcnR1YWwgdm9pZCBp
bnZhbGlkYXRlUGFydChTY3JvbGxiYXJUaGVtZUNsaWVudCosIFNjcm9sbGJhclBhcnQpOwotCi0g
ICAgdmlydHVhbCBpbnQgdGh1bWJQb3NpdGlvbihTY3JvbGxiYXJUaGVtZUNsaWVudCopOwotICAg
IHZpcnR1YWwgaW50IHRodW1iTGVuZ3RoKFNjcm9sbGJhclRoZW1lQ2xpZW50Kik7Ci0gICAgdmly
dHVhbCBpbnQgdHJhY2tQb3NpdGlvbihTY3JvbGxiYXJUaGVtZUNsaWVudCopOwotICAgIHZpcnR1
YWwgaW50IHRyYWNrTGVuZ3RoKFNjcm9sbGJhclRoZW1lQ2xpZW50Kik7Ci0KLSAgICB2aXJ0dWFs
IGludCBzY3JvbGxiYXJUaGlja25lc3MoU2Nyb2xsYmFyQ29udHJvbFNpemUgPSBSZWd1bGFyU2Ny
b2xsYmFyKTsKLQotICAgIFFTdHlsZSogc3R5bGUoKSBjb25zdDsKLX07Ci0KLX0KLSNlbmRpZgo=
</data>
<flag name="review"
          id="179651"
          type_id="1"
          status="+"
          setter="vestbo"
    />
          </attachment>
      

    </bug>

</bugzilla>